diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml
index 81fa40e..eef8756 100644
--- a/.github/workflows/no-response.yml
+++ b/.github/workflows/no-response.yml
@@ -19,7 +19,7 @@
     runs-on: ubuntu-latest
     if: ${{ github.repository_owner == 'dart-lang' }}
     steps:
-      - uses: actions/stale@3a9db7e6a41a89f618792c92c0e97cc736e1b13f
+      - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008
         with:
           days-before-stale: -1
           days-before-close: 14
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 0a2d983..d2c8e8e 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -24,7 +24,7 @@
 
     steps:
       - name: "Checkout code"
-        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
+        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
         with:
           persist-credentials: false
 
@@ -44,7 +44,7 @@
 
       # Upload the results as artifacts (optional).
       - name: "Upload artifact"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
+        uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
         with:
           name: SARIF file
           path: results.sarif
@@ -52,6 +52,6 @@
 
       # Upload the results to GitHub's code scanning dashboard.
       - name: "Upload to code-scanning"
-        uses: github/codeql-action/upload-sarif@3599b3baa15b485a2e49ef411a7a4bb2452e7f93
+        uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2
         with:
           sarif_file: results.sarif
diff --git a/.github/workflows/third-party-deps-scan.yml b/.github/workflows/third-party-deps-scan.yml
index 7eccb3f..eaa2ef9 100644
--- a/.github/workflows/third-party-deps-scan.yml
+++ b/.github/workflows/third-party-deps-scan.yml
@@ -22,17 +22,17 @@
       contents: read
     steps:
       - name: "Checkout code"
-        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
+        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
         with:
           persist-credentials: false
       - name: "Set up python"
-        uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c
+        uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548
         with:
           python-version: '3.13.3' # Install the python version needed.
       - name: "Extract deps, find commit hash, pass to osv-scanner"
         run: python .github/extract_deps.py --output osv-lockfile-${{github.sha}}.json
       - name: "Upload osv-scanner deps"
-        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
+        uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
         with:
           # Use github.ref in name to avoid duplicated artifacts.
           name: osv-lockfile-${{github.sha}}
diff --git a/.gitignore b/.gitignore
index 03e2596..0ca4695 100644
--- a/.gitignore
+++ b/.gitignore
@@ -123,3 +123,6 @@
 .cipd
 .gclient
 .gclient_*
+
+# Gemini CLI
+.gemini
diff --git a/BUILD.gn b/BUILD.gn
index 25f4b6a..54217b0 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -51,8 +51,8 @@
     "samples/embedder:kernel",
     "samples/ffi/http:fake_http",
     "samples/ffi/httpIG:fake_httpIG",
-    "utils/dartdev:dartdev",
-    "utils/kernel-service:kernel-service",
+    "utils/dartdev",
+    "utils/kernel-service",
   ]
 
   # The following dependencies allow dartdev to start the resident frontend
@@ -68,8 +68,8 @@
     ]
   } else {
     deps += [
-      "utils/dds:dds",
-      "utils/dtd:dtd",
+      "utils/dds",
+      "utils/dtd",
       "utils/kernel-service:frontend_server",
     ]
   }
@@ -104,6 +104,8 @@
     deps += [ "runtime/bin:abstract_socket_test" ]
   } else if (is_fuchsia) {
     deps += [ ":fuchsia_test_package" ]
+  } else if (is_win) {
+    deps += [ "runtime/bin:create_process_test_helper" ]
   }
 }
 
@@ -376,6 +378,7 @@
     "tests/ffi/vmspecific_highmem_32bit_test.dart",
     "tests/ffi/vmspecific_leaf_call_test.dart",
     "tests/ffi/vmspecific_native_finalizer_2_test.dart",
+    "tests/ffi/vmspecific_native_finalizer_api_calls_test.dart",
     "tests/ffi/vmspecific_native_finalizer_deeply_immutable_test.dart",
     "tests/ffi/vmspecific_native_finalizer_isolate_groups_test.dart",
     "tests/ffi/vmspecific_native_finalizer_isolates_test.dart",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 695b91e..ee0c766 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,9 +27,36 @@
 
 [#61550]: https://github.com/dart-lang/sdk/issues/61550
 
+### Tools
+
+#### Pub
+
+- "Glob" support for pub workspaces.
+
+  Now to include all packages inside `pkgs/` in the workspace, simply write:
+
+  ```yaml
+  workspace:
+    - pkgs/*
+  ```
+
+  Supported if the Dart SDK constraint of the containing package is 3.11.0 or
+  higher.
+
+- New commmand `dart pub cache gc` for reclaiming disk space from your pub
+  cache.
+
+  It works by removing  packages from your pub cache that are not referenced by
+  any of your current projects.
+
+- New flag `dart pub publish --dry-run --ignore-warnings`
+
+  Given this flag, `dart pub publish --dry-run` will only exit non-zero if your
+  project validation has errors.
+
 ## 3.10.0
 
-**Released on:** Unreleased
+**Released on:** 2025-11-12
 
 ### Language
 
@@ -134,6 +161,16 @@
 [writing an analyzer plugin]: https://github.com/dart-lang/sdk/blob/main/pkg/analysis_server_plugin/doc/writing_a_plugin.md
 [using analyzer plugins]: https://github.com/dart-lang/sdk/blob/main/pkg/analysis_server_plugin/doc/using_plugins.md
 
+#### Hooks
+
+Support for **hooks** -- formerly know as _native assets_ -- are now stable.
+
+You can currently use hooks to do things such as compile or download native assets
+(code written in other languages that are compiled into machine code),
+and then call these assets from the Dart code of a package.
+
+For more details see the [hooks documentation](https://dart.dev/tools/hooks).
+
 #### Dart CLI and Dart VM
 
 - The Dart CLI and Dart VM have been split into two separate executables.
diff --git a/DEPS b/DEPS
index a7adc8c..15eab15 100644
--- a/DEPS
+++ b/DEPS
@@ -54,10 +54,10 @@
 
   # co19 is a cipd package automatically generated for each co19 commit.
   # Use tests/co19/update.sh to update this hash.
-  "co19_rev": "dfea6e4100267a94e63563fb86fe3ad53bccb13b",
+  "co19_rev": "37c5e43f9cc4ebc67422cc5c27cf2b84919a5a71",
 
   # The internal benchmarks to use. See go/dart-benchmarks-internal
-  "benchmarks_internal_rev": "13eb8dedf372e4255e64349b6e57960f7de4df2d",
+  "benchmarks_internal_rev": "6058722b4643b62c757dadc006f00bc3e14c4380",
   "checkout_benchmarks_internal": False,
 
   # Checkout the flute benchmark only when benchmarking.
@@ -70,25 +70,25 @@
   # self-service update these by following the go/dart-engprod/browsers.md
   # instructions. d8, the V8 shell, is always checked out.
   "checkout_javascript_engines": False,
-  "d8_tag": "version:14.3.89",
-  "jsshell_tag": "version:144.0",
-  "jsc_tag": "version:301576",
+  "d8_tag": "version:14.4.116",
+  "jsshell_tag": "version:145.0",
+  "jsc_tag": "version:302935",
 
   # https://chrome-infra-packages.appspot.com/p/fuchsia/third_party/clang
-  "clang_version": "git_revision:62adc83c918b1b55f70e4ee33c727b040da2a9ed",
+  "clang_version": "git_revision:f77ce52b56d025399f489a8c0aad8c18c4b06045",
 
   # https://chrome-infra-packages.appspot.com/p/gn/gn
-  "gn_version": "git_revision:07d3c6f4dc290fae5ca6152ebcb37d6815c411ab",
+  "gn_version": "git_revision:6e0b557db44b3c164094e57687d20ba036a80667",
 
   "reclient_version": "re_client_version:28341fc74c68f05a5c8be35160ada940c4edb969",
   "download_reclient": True,
 
   # Update from https://chrome-infra-packages.appspot.com/p/fuchsia/sdk/core
-  "fuchsia_sdk_version": "version:29.20250925.5.1",
+  "fuchsia_sdk_version": "version:30.20251201.5.1",
   "download_fuchsia_deps": False,
 
   # Ninja, runs the build based on files generated by GN.
-  "ninja_tag": "version:3@1.13.1.chromium.4",
+  "ninja_tag": "version:3@1.13.2.chromium.4",
 
   # Scripts that make 'git cl format' work.
   "clang_format_scripts_rev": "bb994c6f067340c1135eb43eed84f4b33cfa7397",
@@ -96,11 +96,11 @@
   ### /third_party/ dependencies
 
   # Prefer to use hashes of binaryen that have been reviewed & rolled into g3.
-  "binaryen_rev" : "23f7af14bba0139e61bb8f403c4ef53dfee44023",
-  "boringssl_rev": "6ac7ca19009a23230a21a55d998a5e0c931df195",
+  "binaryen_rev" : "6ec7b5f9c615d3b224c67ae221d6812c8f8e1a96",
+  "boringssl_rev": "e743669eaf598d55406345d4794927ce70f01244",
   "browser-compat-data_tag": "ac8cae697014da1ff7124fba33b0b4245cc6cd1b", # v1.0.22
   "cpu_features_rev": "936b9ab5515dead115606559502e3864958f7f6e",
-  "devtools_rev": "ed691cae7fb35f6c77950b0e13746893715e4ec8",
+  "devtools_rev": "bac6843cce3c98d8794a7cce796faaa8860cc00f",
   # Use the SHA found in `flutter-candidate.txt` in the devtools repo.
   "flutter_rev": "36ea2bdeab611e908967b6fa57659998f600a2cb",
   "icu_rev": "1b2e3e8a421efae36141a7b932b41e315b089af8",
@@ -126,30 +126,30 @@
   #   and land the review.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
-  "dart_style_rev": "ca019b0498692ad78f5f0f0f6208a1258e17fc90", # rolled manually
+  "dart_style_rev": "e8190bf2242654daee7ebf21fd6d8c8046989822", # rolled manually
 
   ### /third_party/pkg dependencies
   # 'tools/rev_sdk_deps.dart' will rev pkg dependencies to their latest; put an
   # EOL comment after a dependency to instead pin at the current revision.
-  "ai_rev": "0a85ddf4f75cee6e3abe07cecdffae69bbdbc793",
+  "ai_rev": "4eb2446144a8af374e08da8d3c743dcce129f87f",
   "core_rev": "5c3e2c38df268be2347f3aad30ced0147dd012bb", # b/444274553
   "dartdoc_rev": "6d1aa6f5045c33d3723aba05e3e0dc1403b763c0",
-  "ecosystem_rev": "6a8746e70b315aceec7f81cae9bef8b67abb2453",
+  "ecosystem_rev": "eac66d93142907b39f2271647c111f36ff3365b9",
   "flute_rev": "b84119fba67016a80c3eb80765762bcc4d0d0b8d",
-  "http_rev": "2cb6c12966e18abc11a0217a8b613742849a29ea",
-  "i18n_rev": "34d1832b7e65d9aef1f7f6a82c22f6e53476191c",
+  "http_rev": "a22386e9c390290c916d1c53a3d3c1447ec120ce",
+  "i18n_rev": "dd8a792a8492370a594706c8304d2eb8db844d7a",
   "leak_tracker_rev": "f5620600a5ce1c44f65ddaa02001e200b096e14c", # rolled manually
   "material_color_utilities_rev": "799b6ba2f3f1c28c67cc7e0b4f18e0c7d7f3c03e",
-  "native_rev": "3ec573500f743d4a1393f7802143aef50fec0a47", # rolled manually while native assets are experimental
-  "protobuf_rev": "7db07843c86de526edbe3c4d668c0962ef0b203b",
-  "pub_rev": "f7f1891e2de3d795532f45ec214f88ac912ffcd6", # rolled manually
-  "shelf_rev": "710b8cef08f69acf176c807eaf274dfb8656fde0",
+  "native_rev": "93039d7ef0b71cd01567e00e6b5be90a3e7d0668", # rolled manually while record_use is experimental
+  "protobuf_rev": "9e30258e0aa6a6430ee36c84b75308a9702fde42",
+  "pub_rev": "b297f1f5e42f2569f15a98548f44b4b9a48487c1", # rolled manually
+  "shelf_rev": "dd830a0338b31bee92fe7ebc20b9bb963403b6b0",
   "sync_http_rev": "6666fff944221891182e1f80bf56569338164d72",
   "tar_rev": "13479f7c2a18f499e840ad470cfcca8c579f6909",
-  "test_rev": "5855358095b8718712567b8abc0435ddfd125ba8",
-  "tools_rev": "856ad3bc9384d06b24a671afa5982179b304ec31",
-  "vector_math_rev": "a7b7e9ccb931348dbfa669e0f8fea1bf97705b16",
-  "web_rev": "5a7d0be70a258252b95bac6b900f26d6dae4d433",
+  "test_rev": "c15153b9618afc4c5e8a43bac43339de130c2149",
+  "tools_rev": "d03c394b24829f662098e590a2c812a076b01199",
+  "vector_math_rev": "70a9a2cb610d040b247f3ca2cd70a94c1c6f6f23",
+  "web_rev": "35fc98dd8f9da175ed0a2dcf246299e922e1e1e2",
   "webdev_rev": "b9c39c00853dfad0e235bec3b265f86a0f4f328a",
   "webdriver_rev": "09104f459ed834d48b132f6b7734923b1fbcf2e9",
   "webkit_inspection_protocol_rev": "0f7685804d77ec02c6564d7ac1a6c8a2341c5bdf",
@@ -163,9 +163,9 @@
   # meant to be downloaded by users for local testing. You can self-service
   # update these by following the go/dart-engprod/browsers.md instructions.
   "download_chrome": False,
-  "chrome_tag": "142.0.7444.34",
+  "chrome_tag": "143.0.7499.25",
   "download_firefox": False,
-  "firefox_tag": "144.0",
+  "firefox_tag": "145.0",
 
   # Emscripten is used in dart2wasm tests.
   "download_emscripten": False,
@@ -582,7 +582,7 @@
     "packages": [
       {
       "package": "chromium/fuchsia/test-scripts",
-      "version": "OVc1OGW48MqzyzP25wSoNf4dWoEjuVG5deVNKlgJDwoC",
+      "version": "MHF-UAfO6sVKqSEYknqkl3nsdAQmODJNHF-pYBSpRzgC",
       }
     ],
     "condition": 'download_fuchsia_deps',
@@ -593,7 +593,7 @@
     "packages": [
       {
       "package": "chromium/fuchsia/gn-sdk",
-      "version": "NAEC5tfgSl8g94nwpKsGtNMEdbiAlgwrNa9XQ7cIcbcC",
+      "version": "JLBh4Z9PKsjIJcqDUDzEL8Q7whJ3CGRd4QmUL6IzizUC",
       }
     ],
     "condition": 'download_fuchsia_deps',
diff --git a/OWNERS b/OWNERS
index 9b66d9f..6b77761 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,7 +1,6 @@
 # Global approvers - only to be used as a last resort.
-asiva@google.com #{LAST_RESORT_SUGGESTION}
 athom@google.com #{LAST_RESORT_SUGGESTION}
-devoncarew@google.com #{LAST_RESORT_SUGGESTION}
+goderbauer@google.com #{LAST_RESORT_SUGGESTION}
 kustermann@google.com #{LAST_RESORT_SUGGESTION}
 leafp@google.com #{LAST_RESORT_SUGGESTION}
 sigmund@google.com #{LAST_RESORT_SUGGESTION}
diff --git a/benchmarks/analysis_options.yaml b/benchmarks/analysis_options.yaml
index 40d2651..7950ddc 100644
--- a/benchmarks/analysis_options.yaml
+++ b/benchmarks/analysis_options.yaml
@@ -8,7 +8,6 @@
 linter:
   rules:
     - always_declare_return_types
-    - always_require_non_null_named_parameters
     - annotate_overrides
     - avoid_empty_else
     - avoid_function_literals_in_foreach_calls
@@ -17,8 +16,6 @@
     - avoid_relative_lib_imports
     - avoid_renaming_method_parameters
     - avoid_return_types_on_setters
-    - avoid_returning_null
-    - avoid_returning_null_for_future
     - avoid_shadowing_type_parameters
     - avoid_types_as_parameter_names
     - avoid_unused_constructor_parameters
@@ -54,7 +51,6 @@
     - prefer_conditional_assignment
     - prefer_const_constructors
     - prefer_contains
-    - prefer_equal_for_default_values
     - prefer_final_fields
     - prefer_final_locals
     - prefer_for_elements_to_map_fromIterable
diff --git a/build/config/sysroot.gni b/build/config/sysroot.gni
index a2e91ad..27ea1ea 100644
--- a/build/config/sysroot.gni
+++ b/build/config/sysroot.gni
@@ -51,7 +51,10 @@
 
 if ((current_toolchain == host_toolchain ||
      current_toolchain == default_toolchain ||
-     current_toolchain == "${default_toolchain}_shared") &&
+     current_toolchain == "${default_toolchain}_shared" ||
+     current_toolchain == "${default_toolchain}_asan" ||
+     current_toolchain == "${default_toolchain}_msan" ||
+     current_toolchain == "${default_toolchain}_tsan") &&
     target_sysroot != "") {
   sysroot = target_sysroot
 } else if (is_android) {
diff --git a/build/toolchain/toolchain_suite.gni b/build/toolchain/toolchain_suite.gni
index 9c6d0b7..e048293 100644
--- a/build/toolchain/toolchain_suite.gni
+++ b/build/toolchain/toolchain_suite.gni
@@ -31,6 +31,28 @@
       is_shared_library = true
     }
   },
+
+  {
+    suffix = "_asan"
+    toolchain_args = {
+      is_shared_library = false
+      is_asan = true
+    }
+  },
+  {
+    suffix = "_msan"
+    toolchain_args = {
+      is_shared_library = false
+      is_msan = true
+    }
+  },
+  {
+    suffix = "_tsan"
+    toolchain_args = {
+      is_shared_library = false
+      is_tsan = true
+    }
+  },
 ]
 
 template("toolchain_suite") {
diff --git a/pkg/_fe_analyzer_shared/lib/src/base/errors.dart b/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
index f5b167e..e4f9677 100644
--- a/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/base/errors.dart
@@ -243,11 +243,6 @@
    * associated with the error will be created from the given [problemMessage]
    * template. The correction associated with the error will be created from the
    * given [correctionMessage] template.
-   * 
-   * If a non-null value is supplied for [uniqueNameCheck], it should be the
-   * same as [uniqueName]. This parameter is marked `@deprecated` because it
-   * should not be used by client; it exists as a temporary measure to aid in
-   * migration and will soon be removed.
    */
   const DiagnosticCode({
     String? correctionMessage,
@@ -256,12 +251,7 @@
     required this.name,
     required String problemMessage,
     required this.uniqueName,
-    @deprecated String? uniqueNameCheck,
-  }) : assert(
-         uniqueName == uniqueNameCheck || uniqueNameCheck == null,
-         '$uniqueName != $uniqueNameCheck',
-       ),
-       _correctionMessage = correctionMessage,
+  }) : _correctionMessage = correctionMessage,
        _problemMessage = problemMessage;
 
   /**
@@ -327,7 +317,7 @@
   String toString() => uniqueName;
 }
 
-class DiagnosticCodeImpl extends DiagnosticCode {
+abstract class DiagnosticCodeImpl extends DiagnosticCode {
   @override
   final DiagnosticType type;
 
@@ -339,7 +329,6 @@
     required super.problemMessage,
     required this.type,
     required super.uniqueName,
-    required super.uniqueNameCheck,
   });
 
   @override
@@ -348,7 +337,7 @@
 
 /// Private subtype of [DiagnosticCode] that supports runtime checking of
 /// parameter types.
-abstract class DiagnosticCodeWithExpectedTypes extends DiagnosticCodeImpl {
+class DiagnosticCodeWithExpectedTypes extends DiagnosticCodeImpl {
   final List<ExpectedType>? expectedTypes;
 
   const DiagnosticCodeWithExpectedTypes({
@@ -359,7 +348,6 @@
     required super.problemMessage,
     required super.type,
     required super.uniqueName,
-    required super.uniqueNameCheck,
     this.expectedTypes,
   });
 }
@@ -576,6 +564,34 @@
 }
 
 /// Common functionality for [DiagnosticCode]-derived classes that represent
+/// errors that take arguments.
+///
+/// This class provides a [withArguments] getter, which can be used to supply
+/// arguments and produce a [LocatableDiagnostic].
+class DiagnosticWithArguments<T extends Function>
+    extends DiagnosticCodeWithExpectedTypes {
+  /// Function accepting named arguments and returning [LocatableDiagnostic].
+  ///
+  /// The value returned by this function can
+  /// be associated with a location in the source code using the
+  /// [LocatableDiagnostic.at] method, and then the result can be passed to
+  /// [DiagnosticReporter.reportError].
+  final T withArguments;
+
+  const DiagnosticWithArguments({
+    required super.name,
+    required super.problemMessage,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
+    required super.type,
+    required super.uniqueName,
+    required super.expectedTypes,
+    required this.withArguments,
+  });
+}
+
+/// Common functionality for [DiagnosticCode]-derived classes that represent
 /// errors that do not take arguments.
 ///
 /// This class implements [LocatableDiagnostic], which means that instances can
@@ -605,6 +621,26 @@
       new LocatableDiagnosticImpl(code, arguments, contextMessages: messages);
 }
 
+/// Concrete implementation of [DiagnosticWithoutArguments], used for diagnostic
+/// messages that don't take any arguments.
+///
+/// This needs to be a separate class from [DiagnosticWithoutArguments] because
+/// [DiagnosticWithoutArguments] is a mixin.
+final class DiagnosticWithoutArgumentsImpl
+    extends DiagnosticCodeWithExpectedTypes
+    with DiagnosticWithoutArguments {
+  const DiagnosticWithoutArgumentsImpl({
+    required super.name,
+    required super.problemMessage,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+    super.isUnresolvedIdentifier = false,
+    required super.type,
+    required super.uniqueName,
+    super.expectedTypes,
+  });
+}
+
 /// Expected type of a diagnostic code's parameter.
 enum ExpectedType { element, int, name, object, string, token, type, uri }
 
diff --git a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart
index 5a2237b..5133776 100644
--- a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/shared.dart
@@ -102,6 +102,12 @@
   /// Returns the bound of [type] if is a type variable or a promoted type
   /// variable. Otherwise returns `null`.
   Type? getTypeVariableBound(Type type);
+
+  /// Returns `true` if [type] is an enum type.
+  bool isEnum(Type type);
+
+  /// Returns the library URI for [type].
+  Uri? libraryUri(Type type);
 }
 
 /// Interface for looking up fields and their corresponding [StaticType]s of
diff --git a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart
index 45affaf..750a043 100644
--- a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/static_type.dart
@@ -66,6 +66,21 @@
   /// one of those two types*.
   bool get isSealed;
 
+  /// Returns `true` if this is a private type.
+  ///
+  /// This is used to determine whether a missing pattern part is not accessible
+  /// due to being private.
+  bool get isPrivate;
+
+  /// Returns `true` if this is a subtype of `Enum`.
+  ///
+  /// This is used along with [isPrivate] to determine whether we should suggest
+  /// enum values as missing pattern parts or only a default case.
+  bool get isEnumSubtype;
+
+  /// Returns the library URI for this type, or `null`.
+  Uri? get libraryUri;
+
   /// Returns `true` if this is a record type.
   ///
   /// This is only used for print the type as part of a [Witness].
@@ -255,6 +270,15 @@
   void typeToDart(DartTemplateBuffer buffer) {
     buffer.writeCoreType(name);
   }
+
+  @override
+  bool get isEnumSubtype => false;
+
+  @override
+  Uri? get libraryUri => null;
+
+  @override
+  bool get isPrivate => false;
 }
 
 class _NeverType extends _BaseStaticType with _ObjectFieldMixin {
@@ -285,6 +309,15 @@
   void typeToDart(DartTemplateBuffer buffer) {
     buffer.writeCoreType(name);
   }
+
+  @override
+  bool get isEnumSubtype => false;
+
+  @override
+  Uri? get libraryUri => null;
+
+  @override
+  bool get isPrivate => false;
 }
 
 class _NullType extends NullableStaticType with _ObjectFieldMixin {
@@ -367,6 +400,15 @@
       buffer.write('?');
     }
   }
+
+  @override
+  bool get isEnumSubtype => underlying.isEnumSubtype;
+
+  @override
+  Uri? get libraryUri => underlying.libraryUri;
+
+  @override
+  bool get isPrivate => name.startsWith('_');
 }
 
 abstract class NonNullableStaticType extends _BaseStaticType {
@@ -510,6 +552,15 @@
   void typeToDart(DartTemplateBuffer buffer) {
     wrappedType.typeToDart(buffer);
   }
+
+  @override
+  bool get isEnumSubtype => wrappedType.isEnumSubtype;
+
+  @override
+  Uri? get libraryUri => wrappedType.libraryUri;
+
+  @override
+  bool get isPrivate => wrappedType.isPrivate;
 }
 
 /// Interface for accessing the members defined on `Object`.
diff --git a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/types.dart b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/types.dart
index 1f3c21d..2080991 100644
--- a/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/types.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/exhaustiveness/types.dart
@@ -119,6 +119,15 @@
   void typeToDart(DartTemplateBuffer buffer) {
     buffer.writeGeneralType(_type, name);
   }
+
+  @override
+  bool get isEnumSubtype => _typeOperations.isEnum(_type);
+
+  @override
+  Uri? get libraryUri => _typeOperations.libraryUri(_type);
+
+  @override
+  bool get isPrivate => name.startsWith('_');
 }
 
 /// [StaticType] for an object restricted by its [restriction].
diff --git a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
index 8a48653..fe51db7 100644
--- a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart
@@ -10,6 +10,14 @@
 
 /// Enum for experimental flags shared between the CFE and the analyzer.
 enum ExperimentalFlag {
+  anonymousMethods(
+    name: 'anonymous-methods',
+    isEnabledByDefault: false,
+    isExpired: false,
+    experimentEnabledVersion: defaultLanguageVersion,
+    experimentReleasedVersion: defaultLanguageVersion,
+  ),
+
   augmentations(
     name: 'augmentations',
     isEnabledByDefault: false,
@@ -66,14 +74,6 @@
     experimentReleasedVersion: defaultLanguageVersion,
   ),
 
-  declaringConstructors(
-    name: 'declaring-constructors',
-    isEnabledByDefault: false,
-    isExpired: false,
-    experimentEnabledVersion: defaultLanguageVersion,
-    experimentReleasedVersion: defaultLanguageVersion,
-  ),
-
   digitSeparators(
     name: 'digit-separators',
     isEnabledByDefault: true,
@@ -234,6 +234,14 @@
     experimentReleasedVersion: const Version(3, 0),
   ),
 
+  primaryConstructors(
+    name: 'primary-constructors',
+    isEnabledByDefault: false,
+    isExpired: false,
+    experimentEnabledVersion: defaultLanguageVersion,
+    experimentReleasedVersion: defaultLanguageVersion,
+  ),
+
   privateNamedParameters(
     name: 'private-named-parameters',
     isEnabledByDefault: false,
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
index 6531ea4..6223f26 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes.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.
 
-/// @docImport 'package:analyzer/src/dart/error/syntactic_errors.dart';
 /// @docImport 'package:analyzer/src/fasta/ast_builder.dart';
 /// @docImport 'package:analyzer/src/fasta/error_converter.dart';
 /// @docImport 'package:analyzer/src/diagnostic/diagnostic_code_values.dart';
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 cec7477..1d61880 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -1396,6 +1396,15 @@
     _withArgumentsExtraneousModifierInPrimaryConstructor(lexeme: lexeme);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode codeFactoryConstructorNewName = const MessageCode(
+  "FactoryConstructorNewName",
+  sharedCode: SharedCode.factoryConstructorNewName,
+  problemMessage: """Factory constructors can't be named 'new'.""",
+  correctionMessage:
+      """Try removing the 'new' keyword or changing it to a different name.""",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode codeFactoryNotSync = const MessageCode(
   "FactoryNotSync",
   pseudoSharedCode: PseudoSharedCode.nonSyncFactory,
@@ -2476,6 +2485,26 @@
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode codeNewConstructorNewName = const MessageCode(
+  "NewConstructorNewName",
+  sharedCode: SharedCode.newConstructorNewName,
+  problemMessage:
+      """Constructors declared with the 'new' keyword can't be named 'new'.""",
+  correctionMessage:
+      """Try removing the second 'new' or changing it to a different name.""",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode codeNewConstructorQualifiedName = const MessageCode(
+  "NewConstructorQualifiedName",
+  sharedCode: SharedCode.newConstructorQualifiedName,
+  problemMessage:
+      """Constructors declared with the 'new' keyword can't have qualified names.""",
+  correctionMessage:
+      """Try removing the class name prefix from the qualified name or removing the 'new' keyword.""",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
   Message Function(String character, int unicode),
   Message Function({required String character, required int unicode})
@@ -3302,6 +3331,7 @@
   extraneousModifier,
   extraneousModifierInExtensionType,
   extraneousModifierInPrimaryConstructor,
+  factoryConstructorNewName,
   factoryTopLevelDeclaration,
   fieldInitializedOutsideDeclaringClass,
   fieldInitializerOutsideConstructor,
@@ -3374,6 +3404,8 @@
   multipleVarianceModifiers,
   multipleWithClauses,
   nativeClauseShouldBeAnnotation,
+  newConstructorNewName,
+  newConstructorQualifiedName,
   nullAwareCascadeOutOfOrder,
   outOfOrderClauses,
   patternAssignmentDeclaresVariable,
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 fda68a1..81db93a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -136,6 +136,33 @@
   }
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    listener?.beginConstructor(
+      declarationKind,
+      augmentToken,
+      externalToken,
+      staticToken,
+      covariantToken,
+      varFinalOrConst,
+      getOrSet,
+      newToken,
+      name,
+      enclosingDeclarationName,
+    );
+  }
+
+  @override
   void beginConstructorReference(Token start) {
     listener?.beginConstructorReference(start);
   }
@@ -195,13 +222,13 @@
   }
 
   @override
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
     Token? constToken,
   ) {
-    listener?.beginFactoryMethod(
+    listener?.beginFactory(
       declarationKind,
       lastConsumed,
       externalToken,
@@ -725,16 +752,18 @@
   }
 
   @override
-  void endClassConstructor(
-    Token? getOrSet,
+  void endConstructor(
+    DeclarationKind kind,
     Token beginToken,
+    Token? newToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    listener?.endClassConstructor(
-      getOrSet,
+    listener?.endConstructor(
+      kind,
       beginToken,
+      newToken,
       beginParam,
       beginInitializers,
       endToken,
@@ -747,16 +776,18 @@
   }
 
   @override
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
   ) {
-    listener?.endClassFactoryMethod(beginToken, factoryKeyword, endToken);
+    listener?.endFactory(kind, beginToken, factoryKeyword, endToken);
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -768,7 +799,8 @@
     Token beginToken,
     Token endToken,
   ) {
-    listener?.endClassFields(
+    listener?.endFields(
+      kind,
       abstractToken,
       augmentToken,
       externalToken,
@@ -783,14 +815,16 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    listener?.endClassMethod(
+    listener?.endMethod(
+      kind,
       getOrSet,
       beginToken,
       beginParam,
@@ -901,23 +935,6 @@
   }
 
   @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endEnumConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void handleEnumElement(Token beginToken, Token? augmentToken) {
     listener?.handleEnumElement(beginToken, augmentToken);
   }
@@ -947,81 +964,11 @@
   }
 
   @override
-  void endEnumFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    listener?.endEnumFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    listener?.endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endEnumMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endExport(Token exportKeyword, Token semicolon) {
     listener?.endExport(exportKeyword, semicolon);
   }
 
   @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endExtensionConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endExtensionDeclaration(
     Token beginToken,
     Token extensionKeyword,
@@ -1037,59 +984,6 @@
   }
 
   @override
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    listener?.endExtensionFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endExtensionFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    listener?.endExtensionFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endExtensionMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endExtensionMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endFieldInitializer(Token assignment, Token endToken) {
     listener?.endFieldInitializer(assignment, endToken);
   }
@@ -1318,81 +1212,11 @@
   }
 
   @override
-  void endMixinConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endMixinConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endMixinDeclaration(Token beginToken, Token endToken) {
     listener?.endMixinDeclaration(beginToken, endToken);
   }
 
   @override
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    listener?.endMixinFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endMixinFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    listener?.endMixinFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endMixinMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endMixinMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endNamedFunctionExpression(Token endToken) {
     listener?.endNamedFunctionExpression(endToken);
   }
@@ -2116,11 +1940,21 @@
   }
 
   @override
+  void handleNoClassBody(Token semicolonToken) {
+    listener?.handleNoClassBody(semicolonToken);
+  }
+
+  @override
   void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     listener?.handleNoConstructorReferenceContinuationAfterTypeArguments(token);
   }
 
   @override
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    listener?.handleNoExtensionTypeBody(semicolonToken);
+  }
+
+  @override
   void handleNoFieldInitializer(Token token) {
     listener?.handleNoFieldInitializer(token);
   }
@@ -2184,6 +2018,11 @@
   }
 
   @override
+  void handleNoIdentifier(Token token, IdentifierContext identifierContext) {
+    listener?.handleNoIdentifier(token, identifierContext);
+  }
+
+  @override
   void handleNoType(Token lastConsumed) {
     listener?.handleNoType(lastConsumed);
   }
@@ -2516,23 +2355,6 @@
   }
 
   @override
-  void endExtensionTypeConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endExtensionTypeConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endExtensionTypeDeclaration(
     Token beginToken,
     Token? augmentToken,
@@ -2550,63 +2372,6 @@
   }
 
   @override
-  void endExtensionTypeFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    listener?.endExtensionTypeFactoryMethod(
-      beginToken,
-      factoryKeyword,
-      endToken,
-    );
-  }
-
-  @override
-  void endExtensionTypeFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    listener?.endExtensionTypeFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endExtensionTypeMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    listener?.endExtensionTypeMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void beginPrimaryConstructor(Token beginToken) {
     listener?.beginPrimaryConstructor(beginToken);
   }
@@ -2654,6 +2419,24 @@
   void endConstDotShorthand(Token token) {
     listener?.beginConstDotShorthand(token);
   }
+
+  @override
+  void beginPrimaryConstructorBody(Token token) {
+    listener?.beginPrimaryConstructorBody(token);
+  }
+
+  @override
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    listener?.endPrimaryConstructorBody(
+      beginToken,
+      beginInitializers,
+      endToken,
+    );
+  }
 }
 
 class NullListener extends ForwardingListener {
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 6d61c06..b2d08c8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -208,6 +208,16 @@
     logEvent("ClassDeclaration");
   }
 
+  /// Handle `;` as a class body.
+  void handleNoClassBody(Token semicolonToken) {
+    logEvent("NoClassBody");
+  }
+
+  /// Handle `;` as an extension type body.
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    logEvent("NoExtensionTypeBody");
+  }
+
   /// Handle the beginning of a mixin declaration.
   void beginMixinDeclaration(
     Token beginToken,
@@ -346,6 +356,21 @@
     bool forExtensionType,
   ) {}
 
+  void beginPrimaryConstructorBody(Token token) {}
+
+  // Handles the `this` body block for a primary constructor. Substructures:
+  /// - metadata
+  /// - initializers
+  /// - async marker
+  /// - body
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    logEvent("endPrimaryConstructorBody");
+  }
+
   void beginCombinators(Token token) {}
 
   void endCombinators(int count) {
@@ -443,32 +468,6 @@
     logEvent("Enum");
   }
 
-  /// Handle the end of an enum constructor declaration.  Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
   /// Handle the enum elements. Substructures:
   /// - [elementsCount] times:
   ///   - Enum element
@@ -503,14 +502,6 @@
     logEvent("EnumElement");
   }
 
-  void endEnumFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    endClassFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
   void beginExport(Token token) {}
 
   /// Handle the end of an export directive.  Substructures:
@@ -533,48 +524,20 @@
     logEvent("ExpressionStatement");
   }
 
-  /// Note that this is ended by [endClassFactoryMethod],
-  /// [endMixinFactoryMethod] or [endExtensionFactoryMethod].
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
     Token? constToken,
   ) {}
 
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
   ) {
-    logEvent("ClassFactoryMethod");
-  }
-
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  void endExtensionTypeFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassFactoryMethod(beginToken, factoryKeyword, endToken);
+    logEvent("Factory");
   }
 
   void beginFormalParameter(
@@ -621,7 +584,8 @@
   /// - Variable declarations (count times)
   ///
   /// Started by [beginFields].
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -636,166 +600,6 @@
     logEvent("Fields");
   }
 
-  /// Handle the end of a mixin field declaration.  Substructures:
-  /// - Metadata
-  /// - Modifiers
-  /// - Type
-  /// - Variable declarations (count times)
-  ///
-  /// Started by [beginFields].
-  void endMixinFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  /// Handle the end of a extension field declaration.  Substructures:
-  /// - Metadata
-  /// - Modifiers
-  /// - Type
-  /// - Variable declarations (count times)
-  ///
-  /// Started by [beginFields].
-  void endExtensionFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  /// Handle the end of a extension type field declaration.  Substructures:
-  /// - Metadata
-  /// - Modifiers
-  /// - Type
-  /// - Variable declarations (count times)
-  ///
-  /// Started by [beginFields].
-  void endExtensionTypeFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  /// Handle the end of an enum field declaration.  Substructures:
-  /// - Metadata
-  /// - Modifiers
-  /// - Type
-  /// - Variable declarations (count times)
-  ///
-  /// Started by [beginFields].
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  /// Handle the end of an enum method declaration.  Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
   /// Marks that the grammar term `forInitializerStatement` has been parsed and
   /// it was an empty statement.
   void handleForInitializerEmptyStatement(Token token) {
@@ -1335,8 +1139,7 @@
 
   /// Called for class-like members (class, mixin, extension), but each member
   /// should also have a more specific begin/end pair, e.g.
-  /// [beginFactoryMethod]/[endClassFactoryMethod]/[endMixinFactoryMethod]/
-  /// [endExtensionFactoryMethod].
+  /// [beginFactory]/[endFactory].
   void beginMember() {}
 
   /// Handle an invalid member declaration. Substructures:
@@ -1350,19 +1153,13 @@
   /// Members will actually be begin/end'ed by more specific
   /// events as well.
   /// Normally listeners should probably override
-  /// [endClassFields], [endMixinFields], [endExtensionFields],
-  /// [endClassMethod], [endMixinMethod], [endExtensionMethod],
-  /// [endClassConstructor], [endMixinConstructor],
-  /// or [endExtensionConstructor] instead.
+  /// [endFields], [endMethod] or [endConstructor] instead.
   void endMember() {
     logEvent("Member");
   }
 
   /// Handle the beginning of a class-like method declaration.  Substructures:
   /// - metadata
-  /// Note that this is ended with [endClassConstructor], [endClassMethod],
-  /// [endExtensionConstructor], [endExtensionMethod], [endMixinConstructor] or
-  /// [endMixinMethod].
   void beginMethod(
     DeclarationKind declarationKind,
     Token? augmentToken,
@@ -1375,7 +1172,8 @@
     String? enclosingDeclarationName,
   ) {}
 
-  /// Handle the end of a class method declaration.  Substructures:
+  /// Handle the end of a method declaration in a class, enum, mixin, extension
+  /// or extension type.  Substructures:
   /// - metadata
   /// - return type
   /// - method name (identifier, possibly qualified)
@@ -1384,43 +1182,33 @@
   /// - initializers
   /// - async marker
   /// - body
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    logEvent("ClassMethod");
+    logEvent("Method");
   }
 
-  /// Handle the end of a mixin method declaration.  Substructures:
+  /// Handle the beginning of a constructor declaration.  Substructures:
   /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endMixinMethod(
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
     Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {}
 
-  /// Handle the end of a extension method declaration.  Substructures:
+  /// Handle the end of a constructor declaration.  Substructures:
   /// - metadata
   /// - return type
   /// - method name (identifier, possibly qualified)
@@ -1429,152 +1217,15 @@
   /// - initializers
   /// - async marker
   /// - body
-  void endExtensionMethod(
-    Token? getOrSet,
+  void endConstructor(
+    DeclarationKind kind,
     Token beginToken,
+    Token? newToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  /// Handle the end of a extension type method declaration.  Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endExtensionTypeMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  /// Handle the end of a class constructor declaration.  Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endClassConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  /// Handle the end of a mixin constructor declaration.  Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endMixinConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  /// Handle the end of a extension constructor declaration.  Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  /// Handle the end of an extension type constructor declaration.
-  /// Substructures:
-  /// - metadata
-  /// - return type
-  /// - method name (identifier, possibly qualified)
-  /// - type variables
-  /// - formal parameters
-  /// - initializers
-  /// - async marker
-  /// - body
-  void endExtensionTypeConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    // TODO(johnniwinther): push implementation into subclasses
-    endClassConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
+    logEvent("ClassConstructor");
   }
 
   void beginMetadataStar(Token token) {}
@@ -1779,8 +1430,7 @@
   void beginTopLevelMember(Token token) {}
 
   /// Marks the beginning of a fields declaration.
-  /// Note that this is ended with [endTopLevelFields], [endClassFields],
-  /// [endMixinFields] or [endExtensionFields].
+  /// Note that this is ended with [endTopLevelFields] or [endFields].
   void beginFields(
     DeclarationKind declarationKind,
     Token? abstractToken,
@@ -2379,6 +2029,10 @@
     logEvent("NoConstructorReferenceContinuationAfterTypeArguments");
   }
 
+  void handleNoIdentifier(Token token, IdentifierContext identifierContext) {
+    logEvent("NoIdentifier");
+  }
+
   void handleNoTypeNameInConstructorReference(Token token) {
     logEvent("NoTypeNameInConstructorReference");
   }
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 59b3e0b..33bdccb 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -325,8 +325,8 @@
   /// `true` if the 'enhanced-parts' feature is enabled.
   final bool _isEnhancedPartsFeatureEnabled;
 
-  /// `true` if the 'declaring-constructors' feature is enabled.
-  final bool _isDeclaringConstructorsFeatureEnabled;
+  /// `true` if the 'primary-constructors' feature is enabled.
+  final bool _isPrimaryConstructorsFeatureEnabled;
 
   /// `true` if the 'private-named-parameters' feature is enabled.
   final bool _isPrivateNamedParametersEnabled;
@@ -354,8 +354,8 @@
        ),
        _isEnhancedPartsFeatureEnabled = experimentalFeatures
            .isExperimentEnabled(ExperimentalFlag.enhancedParts),
-       _isDeclaringConstructorsFeatureEnabled = experimentalFeatures
-           .isExperimentEnabled(ExperimentalFlag.declaringConstructors),
+       _isPrimaryConstructorsFeatureEnabled = experimentalFeatures
+           .isExperimentEnabled(ExperimentalFlag.primaryConstructors),
        _isPrivateNamedParametersEnabled = experimentalFeatures
            .isExperimentEnabled(ExperimentalFlag.privateNamedParameters);
 
@@ -2215,9 +2215,9 @@
                 codes.codeFunctionTypedParameterVar,
               );
             } else {
-              if (!_isDeclaringConstructorsFeatureEnabled) {
+              if (!_isPrimaryConstructorsFeatureEnabled) {
                 reportExperimentNotEnabled(
-                  ExperimentalFlag.declaringConstructors,
+                  ExperimentalFlag.primaryConstructors,
                   varFinalOrConst,
                   varFinalOrConst,
                 );
@@ -2237,9 +2237,9 @@
             codes.codeFunctionTypedParameterVar,
           );
         } else {
-          if (!_isDeclaringConstructorsFeatureEnabled) {
+          if (!_isPrimaryConstructorsFeatureEnabled) {
             reportExperimentNotEnabled(
-              ExperimentalFlag.declaringConstructors,
+              ExperimentalFlag.primaryConstructors,
               varFinalOrConst,
               varFinalOrConst,
             );
@@ -2258,9 +2258,9 @@
           if (memberKind != MemberKind.PrimaryConstructor) {
             reportRecoverableError(varFinalOrConst, codes.codeTypeAfterVar);
           } else {
-            if (!_isDeclaringConstructorsFeatureEnabled) {
+            if (!_isPrimaryConstructorsFeatureEnabled) {
               reportExperimentNotEnabled(
-                ExperimentalFlag.declaringConstructors,
+                ExperimentalFlag.primaryConstructors,
                 varOrFinal,
                 varOrFinal,
               );
@@ -3051,6 +3051,10 @@
   /// typeWithParameters
   ///     :    typeIdentifier typeParameters?
   ///     ;
+  /// classBody
+  ///     :    '{' (metadata memberDeclaration)* '}'
+  ///     |    ';'
+  ///     ;
   /// ```
   Token parseClass(
     Token token,
@@ -3066,16 +3070,28 @@
       /* forExtensionType = */ false,
     );
     token = parseClassHeaderOpt(token, beginToken, classKeyword);
-    if (!token.next!.isA(TokenType.OPEN_CURLY_BRACKET)) {
-      // Recovery
-      token = parseClassHeaderRecovery(start, beginToken, classKeyword);
-      ensureBlock(token, BlockKind.classDeclaration);
+    if (token.next!.isA(TokenType.SEMICOLON)) {
+      Token semicolonToken = token = token.next!;
+      if (!_isPrimaryConstructorsFeatureEnabled) {
+        reportExperimentNotEnabled(
+          ExperimentalFlag.primaryConstructors,
+          semicolonToken,
+          semicolonToken,
+        );
+      }
+      listener.handleNoClassBody(semicolonToken);
+    } else {
+      if (!token.next!.isA(TokenType.OPEN_CURLY_BRACKET)) {
+        // Recovery
+        token = parseClassHeaderRecovery(start, beginToken, classKeyword);
+        ensureBlock(token, BlockKind.classDeclaration);
+      }
+      token = parseClassOrMixinOrExtensionBody(
+        token,
+        DeclarationKind.Class,
+        className,
+      );
     }
-    token = parseClassOrMixinOrExtensionBody(
-      token,
-      DeclarationKind.Class,
-      className,
-    );
     listener.endClassDeclaration(beginToken, token);
     return token;
   }
@@ -3699,6 +3715,24 @@
     return token;
   }
 
+  Token parsePrimaryConstructorBody(Token token) {
+    Token beginToken = token;
+    listener.beginPrimaryConstructorBody(token);
+
+    Token? beforeInitializers = token;
+    token = parseInitializersOpt(beforeInitializers);
+
+    token = parseAsyncModifierOpt(token);
+    token = parseFunctionBody(
+      token,
+      /* ofFunctionExpression = */ false,
+      /* allowAbstract = */ inPlainSync,
+    );
+
+    listener.endPrimaryConstructorBody(beginToken, beforeInitializers, token);
+    return token;
+  }
+
   /// Parses an extension type declaration after
   ///
   ///    'extension' 'type'
@@ -3751,19 +3785,31 @@
     );
     Token start = token;
     token = parseClassOrMixinOrEnumImplementsOpt(token);
-    if (!token.next!.isA(TokenType.OPEN_CURLY_BRACKET)) {
-      // TODO(johnniwinther): Reuse logic from [parseClassHeaderRecovery] to
-      // handle `extends`, `with` and out-of-order/duplicate clauses.
-      token = parseExtensionTypeHeaderRecovery(start, extensionKeyword);
+    if (token.next!.isA(TokenType.SEMICOLON)) {
+      Token semicolonToken = token = token.next!;
+      if (!_isPrimaryConstructorsFeatureEnabled) {
+        reportExperimentNotEnabled(
+          ExperimentalFlag.primaryConstructors,
+          semicolonToken,
+          semicolonToken,
+        );
+      }
+      listener.handleNoExtensionTypeBody(semicolonToken);
+    } else {
+      if (!token.next!.isA(TokenType.OPEN_CURLY_BRACKET)) {
+        // TODO(johnniwinther): Reuse logic from [parseClassHeaderRecovery] to
+        // handle `extends`, `with` and out-of-order/duplicate clauses.
+        token = parseExtensionTypeHeaderRecovery(start, extensionKeyword);
 
-      // Recovery
-      ensureBlock(token, BlockKind.extensionTypeDeclaration);
+        // Recovery
+        ensureBlock(token, BlockKind.extensionTypeDeclaration);
+      }
+      token = parseClassOrMixinOrExtensionBody(
+        token,
+        DeclarationKind.ExtensionType,
+        name.lexeme,
+      );
     }
-    token = parseClassOrMixinOrExtensionBody(
-      token,
-      DeclarationKind.ExtensionType,
-      name.lexeme,
-    );
     listener.endExtensionTypeDeclaration(
       beginToken,
       augmentToken,
@@ -3987,7 +4033,7 @@
     }
 
     Token beforeType = token;
-    if (varFinalOrConst != null) {
+    if (varFinalOrConst != null && !varFinalOrConst.isA(Keyword.CONST)) {
       Token? afterOuterPattern = skipOuterPattern(beforeType);
       if (afterOuterPattern != null &&
           (afterOuterPattern.next!.isA(TokenType.EQ))) {
@@ -4280,45 +4326,10 @@
     switch (kind) {
       case DeclarationKind.TopLevel:
         assert(abstractToken == null);
-        listener.endTopLevelFields(
-          augmentToken,
-          externalToken,
-          staticToken,
-          covariantToken,
-          lateToken,
-          varFinalOrConst,
-          fieldCount,
-          beforeStart.next!,
-          token,
-        );
         break;
       case DeclarationKind.Class:
-        listener.endClassFields(
-          abstractToken,
-          augmentToken,
-          externalToken,
-          staticToken,
-          covariantToken,
-          lateToken,
-          varFinalOrConst,
-          fieldCount,
-          beforeStart.next!,
-          token,
-        );
-        break;
       case DeclarationKind.Mixin:
-        listener.endMixinFields(
-          abstractToken,
-          augmentToken,
-          externalToken,
-          staticToken,
-          covariantToken,
-          lateToken,
-          varFinalOrConst,
-          fieldCount,
-          beforeStart.next!,
-          token,
-        );
+      case DeclarationKind.Enum:
         break;
       case DeclarationKind.Extension:
         if (abstractToken != null) {
@@ -4330,18 +4341,6 @@
             codes.codeExtensionDeclaresInstanceField,
           );
         }
-        listener.endExtensionFields(
-          abstractToken,
-          augmentToken,
-          externalToken,
-          staticToken,
-          covariantToken,
-          lateToken,
-          varFinalOrConst,
-          fieldCount,
-          beforeStart.next!,
-          token,
-        );
         break;
       case DeclarationKind.ExtensionType:
         if (staticToken == null && externalToken == null) {
@@ -4350,33 +4349,34 @@
             codes.codeExtensionTypeDeclaresInstanceField,
           );
         }
-        listener.endExtensionTypeFields(
-          abstractToken,
-          augmentToken,
-          externalToken,
-          staticToken,
-          covariantToken,
-          lateToken,
-          varFinalOrConst,
-          fieldCount,
-          beforeStart.next!,
-          token,
-        );
         break;
-      case DeclarationKind.Enum:
-        listener.endEnumFields(
-          abstractToken,
-          augmentToken,
-          externalToken,
-          staticToken,
-          covariantToken,
-          lateToken,
-          varFinalOrConst,
-          fieldCount,
-          beforeStart.next!,
-          token,
-        );
-        break;
+    }
+    if (kind == DeclarationKind.TopLevel) {
+      listener.endTopLevelFields(
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        fieldCount,
+        beforeStart.next!,
+        token,
+      );
+    } else {
+      listener.endFields(
+        kind,
+        abstractToken,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        lateToken,
+        varFinalOrConst,
+        fieldCount,
+        beforeStart.next!,
+        token,
+      );
     }
     return token;
   }
@@ -5164,7 +5164,7 @@
     listener.beginMember();
 
     Token beforeType = token;
-    if (varFinalOrConst != null) {
+    if (varFinalOrConst != null && !varFinalOrConst.isA(Keyword.CONST)) {
       Token? afterOuterPattern = skipOuterPattern(beforeType);
       if (afterOuterPattern != null &&
           (afterOuterPattern.next!.isA(TokenType.EQ))) {
@@ -5204,9 +5204,19 @@
     token = typeInfo.skipType(token);
     next = token.next!;
 
+    Token? newToken;
     Token? getOrSet;
     bool nameIsRecovered = false;
-    if (next.type != TokenType.IDENTIFIER) {
+    if (next.isA(Keyword.NEW)) {
+      newToken = next;
+      if (!_isPrimaryConstructorsFeatureEnabled) {
+        reportExperimentNotEnabled(
+          ExperimentalFlag.primaryConstructors,
+          newToken,
+          newToken,
+        );
+      }
+    } else if (next.type != TokenType.IDENTIFIER) {
       String? value = next.stringValue;
       if (identical(value, 'get') || identical(value, 'set')) {
         if (next.next!.isIdentifier) {
@@ -5222,7 +5232,7 @@
         // Fall through to continue parsing `get` or `set` as an identifier.
       } else if (identical(value, 'factory')) {
         Token next2 = next.next!;
-        if (next2.isIdentifier || next2.isModifier) {
+        if (next2.isIdentifier || next2.isModifier || next2.isA(Keyword.NEW)) {
           if (beforeType != token) {
             reportRecoverableError(token, codes.codeTypeBeforeFactory);
           }
@@ -5239,9 +5249,31 @@
             externalToken,
             staticToken ?? covariantToken,
             varFinalOrConst,
+            /* hasName = */ true,
           );
           listener.endMember();
           return token;
+        } else if (_isPrimaryConstructorsFeatureEnabled &&
+            next2.isA(TokenType.OPEN_PAREN)) {
+          if (typeInfo == noType &&
+              covariantToken == null &&
+              //externalToken = null &&
+              lateToken == null &&
+              staticToken == null &&
+              (varFinalOrConst == null || varFinalOrConst.isA(Keyword.CONST)) &&
+              abstractToken == null) {
+            token = parseFactoryMethod(
+              token,
+              kind,
+              beforeStart,
+              externalToken,
+              staticToken ?? covariantToken,
+              varFinalOrConst,
+              /* hasName = */ false,
+            );
+            listener.endMember();
+            return token;
+          }
         }
         // Fall through to continue parsing `factory` as an identifier.
       } else if (identical(value, 'operator')) {
@@ -5262,6 +5294,7 @@
             beforeType,
             typeInfo,
             getOrSet,
+            newToken,
             token.next!,
             kind,
             enclosingDeclarationName,
@@ -5302,6 +5335,7 @@
             beforeType,
             typeInfo,
             getOrSet,
+            newToken,
             token.next!,
             kind,
             enclosingDeclarationName,
@@ -5311,6 +5345,22 @@
           return token;
         }
         // Fall through to continue parsing `operator` as an identifier.
+      } else if (identical(value, 'this')) {
+        Token next2 = next.next!;
+        if (next2.isA(TokenType.COLON) ||
+            next2.isA(TokenType.SEMICOLON) ||
+            next2.isA(TokenType.OPEN_CURLY_BRACKET)) {
+          if (!_isPrimaryConstructorsFeatureEnabled) {
+            reportExperimentNotEnabled(
+              ExperimentalFlag.primaryConstructors,
+              next,
+              next,
+            );
+          }
+          token = parsePrimaryConstructorBody(next);
+          listener.endMember();
+          return token;
+        }
       } else if (!next.isIdentifier ||
           (identical(value, 'typedef') &&
               token == beforeStart &&
@@ -5332,6 +5382,7 @@
           beforeType,
           typeInfo,
           getOrSet,
+          newToken,
           kind,
           enclosingDeclarationName,
         );
@@ -5376,6 +5427,7 @@
     next = next.next!;
     String? value = next.stringValue;
     if (getOrSet != null ||
+        newToken != null ||
         identical(value, '(') ||
         identical(value, '{') ||
         identical(value, '<') ||
@@ -5393,6 +5445,7 @@
         beforeType,
         typeInfo,
         getOrSet,
+        newToken,
         token.next!,
         kind,
         enclosingDeclarationName,
@@ -5423,6 +5476,84 @@
     return token;
   }
 
+  /// Returns `true` if a method-like declaration is determined to be a
+  /// constructor.
+  ///
+  /// [name] is the token for the (first) name of the declaration or the
+  /// `operator` token if [isOperator] is `true`.
+  ///
+  /// [getOrSet] is the token for `get` or `set` if this occurred prior to the
+  /// [name].
+  ///
+  /// [newToken] is the token for `new` if this occurred prior to the name.
+  ///
+  /// [enclosingDeclarationName] is the name of the enclosing class, mixin,
+  /// enum, extension or extension type.
+  bool _isConstructor(
+    Token name,
+    Token? getOrSet,
+    Token? newToken,
+    String? enclosingDeclarationName,
+    bool isOperator,
+  ) {
+    // TODO(johnniwinther): Update this to match what we want and not what we
+    //  happened to do during error recovery.
+    if (newToken != null) {
+      return true;
+    }
+    Token afterName;
+    if (name.isKeywordOrIdentifier) {
+      afterName = name.next!;
+    } else {
+      // Recovery (identifier is synthesized)
+      afterName = name;
+    }
+    if (afterName.isA(TokenType.PERIOD)) {
+      // This is only legal for constructors.
+      return true;
+    }
+
+    if (isOperator) {
+      if (afterName.isOperator) {
+        afterName = afterName.next!;
+      } else if (isUnaryMinus(afterName)) {
+        afterName = afterName.next!.next!;
+      }
+    }
+    if (afterName.isA(TokenType.BANG)) {
+      // Recovery
+      afterName = afterName.next!;
+    }
+    if (afterName.isA(TokenType.LT)) {
+      if (afterName.endGroup != null) {
+        afterName = afterName.endGroup!.next!;
+        if (afterName.isA(TokenType.EQ)) {
+          // Recovery
+          afterName = afterName.next!;
+        }
+      }
+    }
+
+    if (afterName.isA(TokenType.OPEN_PAREN)) {
+      Token afterParen = afterName.endGroup!.next!;
+      if (afterParen.isA(TokenType.COLON)) {
+        return true;
+      }
+    } else if (afterName.isA(TokenType.COLON)) {
+      return true;
+    }
+
+    if (getOrSet != null) {
+      return false;
+    }
+
+    if (name.lexeme == enclosingDeclarationName) {
+      return true;
+    }
+
+    return false;
+  }
+
   Token parseMethod(
     Token beforeStart,
     Token? abstractToken,
@@ -5435,6 +5566,7 @@
     Token beforeType,
     TypeInfo typeInfo,
     Token? getOrSet,
+    Token? newToken,
     Token name,
     DeclarationKind kind,
     String? enclosingDeclarationName,
@@ -5472,6 +5604,14 @@
       }
     }
 
+    bool isConstructor = _isConstructor(
+      name,
+      getOrSet,
+      newToken,
+      enclosingDeclarationName,
+      isOperator,
+    );
+
     if (staticToken != null) {
       if (isOperator) {
         reportRecoverableError(staticToken, codes.codeStaticOperator);
@@ -5505,19 +5645,34 @@
       }
     }
 
-    // TODO(danrubel): Consider parsing the name before calling beginMethod
-    // rather than passing the name token into beginMethod.
-    listener.beginMethod(
-      kind,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      varFinalOrConst,
-      getOrSet,
-      name,
-      enclosingDeclarationName,
-    );
+    if (isConstructor) {
+      listener.beginConstructor(
+        kind,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        varFinalOrConst,
+        getOrSet,
+        newToken,
+        name,
+        enclosingDeclarationName,
+      );
+    } else {
+      // TODO(danrubel): Consider parsing the name before calling beginMethod
+      // rather than passing the name token into beginMethod.
+      listener.beginMethod(
+        kind,
+        augmentToken,
+        externalToken,
+        staticToken,
+        covariantToken,
+        varFinalOrConst,
+        getOrSet,
+        name,
+        enclosingDeclarationName,
+      );
+    }
 
     Token token = typeInfo.parseType(beforeType, this);
     assert(
@@ -5535,6 +5690,37 @@
 
     if (isOperator) {
       token = parseOperatorName(token);
+    } else if (newToken != null) {
+      token = token.next!;
+      if (token.next!.isIdentifier) {
+        Token identifier = token = token.next!;
+        listener.handleIdentifier(
+          identifier,
+          IdentifierContext.methodDeclaration,
+        );
+        // Recovery: This call only does something if the next token is
+        // a '.' --- that's not legal for constructors using 'new' so we'll
+        // report an error and recover better by allowing it.
+        Token qualified = parseQualifiedRestOpt(
+          token,
+          IdentifierContext.methodDeclarationContinuation,
+        );
+        if (token != qualified) {
+          hasQualifiedName = true;
+          reportRecoverableError(token, codes.codeNewConstructorQualifiedName);
+        }
+        token = qualified;
+      } else if (token.next!.isA(Keyword.NEW)) {
+        // This a constructor declaration like `new new();` which isn't allowed.
+        Token identifier = token = token.next!;
+        reportRecoverableError(identifier, codes.codeNewConstructorNewName);
+        listener.handleIdentifier(
+          identifier,
+          IdentifierContext.methodDeclaration,
+        );
+      } else {
+        listener.handleNoIdentifier(token, IdentifierContext.methodDeclaration);
+      }
     } else {
       token = ensureIdentifierPotentiallyRecovered(
         token,
@@ -5626,26 +5812,11 @@
     }
     asyncState = savedAsyncModifier;
 
-    bool isConstructor = false;
-    if (name.next!.isA(TokenType.PERIOD) || beforeInitializers != null) {
-      // This is only legal for constructors.
-      isConstructor = true;
-    } else if (name.lexeme == enclosingDeclarationName) {
-      if (getOrSet != null) {
-        // Recovery: The (simple) get/set member name is invalid.
-        // Report an error and continue with invalid name
-        // (keeping it as a getter/setter).
-        reportRecoverableError(name, codes.codeMemberWithSameNameAsClass);
-      } else {
-        isConstructor = true;
-      }
-    }
-
     if (isConstructor) {
       //
       // constructor
       //
-      if (name.lexeme != enclosingDeclarationName) {
+      if (newToken == null && name.lexeme != enclosingDeclarationName) {
         reportRecoverableError(name, codes.codeConstructorWithWrongName);
       }
       if (staticToken != null) {
@@ -5672,84 +5843,45 @@
       }
 
       switch (kind) {
-        case DeclarationKind.Class:
-          // TODO(danrubel): Remove getOrSet from constructor events
-          listener.endClassConstructor(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
-          break;
         case DeclarationKind.Mixin:
           reportRecoverableError(name, codes.codeMixinDeclaresConstructor);
-          listener.endMixinConstructor(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
           break;
         case DeclarationKind.Extension:
           reportRecoverableError(name, codes.codeExtensionDeclaresConstructor);
-          listener.endExtensionConstructor(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
           break;
+        case DeclarationKind.Class:
         case DeclarationKind.ExtensionType:
-          listener.endExtensionTypeConstructor(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
+        case DeclarationKind.Enum:
           break;
         case DeclarationKind.TopLevel:
           throw "Internal error: TopLevel constructor.";
-        case DeclarationKind.Enum:
-          listener.endEnumConstructor(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
-          break;
       }
+      listener.endConstructor(
+        kind,
+        beforeStart.next!,
+        newToken,
+        beforeParam.next!,
+        beforeInitializers?.next,
+        token,
+      );
     } else {
       //
       // method
       //
+      if (name.lexeme == enclosingDeclarationName && getOrSet != null) {
+        // Recovery: The (simple) get/set member name is invalid.
+        // Report an error and continue with invalid name
+        // (keeping it as a getter/setter).
+        reportRecoverableError(name, codes.codeMemberWithSameNameAsClass);
+      }
       if (varFinalOrConst != null) {
         assert(varFinalOrConst.isA(Keyword.CONST));
         reportRecoverableError(varFinalOrConst, codes.codeConstMethod);
       }
       switch (kind) {
         case DeclarationKind.Class:
-          // TODO(danrubel): Remove beginInitializers token from method events
-          listener.endClassMethod(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
-          break;
         case DeclarationKind.Mixin:
-          listener.endMixinMethod(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
+        case DeclarationKind.Enum:
           break;
         case DeclarationKind.Extension:
           if (bodyStart.isA(TokenType.SEMICOLON) && externalToken == null) {
@@ -5758,13 +5890,6 @@
               codes.codeExtensionDeclaresAbstractMember,
             );
           }
-          listener.endExtensionMethod(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
           break;
         case DeclarationKind.ExtensionType:
           if (bodyStart.isA(TokenType.SEMICOLON) && externalToken == null) {
@@ -5773,26 +5898,19 @@
               codes.codeExtensionTypeDeclaresAbstractMember,
             );
           }
-          listener.endExtensionTypeMethod(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
           break;
         case DeclarationKind.TopLevel:
           throw "Internal error: TopLevel method.";
-        case DeclarationKind.Enum:
-          listener.endEnumMethod(
-            getOrSet,
-            beforeStart.next!,
-            beforeParam.next!,
-            beforeInitializers?.next,
-            token,
-          );
-          break;
       }
+      // TODO(danrubel): Remove beginInitializers token from method events
+      listener.endMethod(
+        kind,
+        getOrSet,
+        beforeStart.next!,
+        beforeParam.next!,
+        beforeInitializers?.next,
+        token,
+      );
     }
     return token;
   }
@@ -5804,6 +5922,7 @@
     Token? externalToken,
     Token? staticOrCovariant,
     Token? varFinalOrConst,
+    bool hasName,
   ) {
     Token factoryKeyword = token = token.next!;
     assert(factoryKeyword.isA(Keyword.FACTORY));
@@ -5836,17 +5955,24 @@
       varFinalOrConst = null;
     }
 
-    listener.beginFactoryMethod(
-      kind,
-      beforeStart,
-      externalToken,
-      varFinalOrConst,
-    );
-    token = ensureIdentifier(token, IdentifierContext.methodDeclaration);
-    token = parseQualifiedRestOpt(
-      token,
-      IdentifierContext.methodDeclarationContinuation,
-    );
+    listener.beginFactory(kind, beforeStart, externalToken, varFinalOrConst);
+    if (!hasName) {
+      listener.handleNoIdentifier(token, IdentifierContext.methodDeclaration);
+    } else if (token.next!.isA(Keyword.NEW) &&
+        !token.next!.next!.isA(TokenType.PERIOD)) {
+      Token identifier = token = token.next!;
+      reportRecoverableError(identifier, codes.codeFactoryConstructorNewName);
+      listener.handleIdentifier(
+        identifier,
+        IdentifierContext.methodDeclaration,
+      );
+    } else {
+      token = ensureIdentifier(token, IdentifierContext.methodDeclaration);
+      token = parseQualifiedRestOpt(
+        token,
+        IdentifierContext.methodDeclarationContinuation,
+      );
+    }
     token = parseMethodTypeVar(token);
     token = parseFormalParametersRequiredOpt(token, MemberKind.Factory);
     Token asyncToken = token.next!;
@@ -5883,47 +6009,25 @@
     }
     switch (kind) {
       case DeclarationKind.Class:
-        listener.endClassFactoryMethod(
-          beforeStart.next!,
-          factoryKeyword,
-          token,
-        );
+      case DeclarationKind.Enum:
+      case DeclarationKind.ExtensionType:
         break;
       case DeclarationKind.Mixin:
         reportRecoverableError(
           factoryKeyword,
           codes.codeMixinDeclaresConstructor,
         );
-        listener.endMixinFactoryMethod(
-          beforeStart.next!,
-          factoryKeyword,
-          token,
-        );
         break;
       case DeclarationKind.Extension:
         reportRecoverableError(
           factoryKeyword,
           codes.codeExtensionDeclaresConstructor,
         );
-        listener.endExtensionFactoryMethod(
-          beforeStart.next!,
-          factoryKeyword,
-          token,
-        );
-        break;
-      case DeclarationKind.ExtensionType:
-        listener.endExtensionTypeFactoryMethod(
-          beforeStart.next!,
-          factoryKeyword,
-          token,
-        );
         break;
       case DeclarationKind.TopLevel:
         throw "Internal error: TopLevel factory.";
-      case DeclarationKind.Enum:
-        listener.endEnumFactoryMethod(beforeStart.next!, factoryKeyword, token);
-        break;
     }
+    listener.endFactory(kind, beforeStart.next!, factoryKeyword, token);
     return token;
   }
 
@@ -10815,6 +10919,7 @@
       beforeType,
       typeInfo,
       /* getOrSet = */ null,
+      /* newToken = */ null,
       beforeName.next!,
       kind,
       enclosingDeclarationName,
@@ -10840,6 +10945,7 @@
     Token beforeType,
     TypeInfo typeInfo,
     Token? getOrSet,
+    Token? newToken,
     DeclarationKind kind,
     String? enclosingDeclarationName,
   ) {
@@ -10884,6 +10990,7 @@
         beforeType,
         typeInfo,
         getOrSet,
+        newToken,
         token.next!,
         kind,
         enclosingDeclarationName,
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 f57a7a6..c38e217 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart
@@ -181,7 +181,7 @@
     if (tokenOrNull == null) stack.push(nullValue);
   }
 
-  Object? peek() => stack.isNotEmpty ? stack.last : null;
+  Object? peek([NullValue? nullValue]) => stack.peek(nullValue);
 
   Object? pop([NullValue? nullValue]) {
     return stack.pop(nullValue);
@@ -488,6 +488,8 @@
 
   List<Object?> get values;
 
+  Object? peek(NullValue? nullValue);
+
   Object? pop(NullValue? nullValue);
 
   int get length;
@@ -529,6 +531,22 @@
   }
 
   @override
+  Object? peek(NullValue? nullValue) {
+    if (isNotEmpty) {
+      Object? value = last;
+      if (value is! NullValue) {
+        return value;
+      } else if (nullValue == null || value == nullValue) {
+        return null;
+      } else {
+        return value;
+      }
+    } else {
+      return null;
+    }
+  }
+
+  @override
   Object? pop(NullValue? nullValue) {
     assert(arrayLength > 0);
     final Object? value = array[--arrayLength];
@@ -639,6 +657,11 @@
   int get length => realStack.length;
 
   @override
+  Object? peek(NullValue? nullValue) {
+    return realStack.peek(nullValue);
+  }
+
+  @override
   Object? pop(NullValue? nullValue) {
     Object? result = realStack.pop(nullValue);
     latestStacktraces.clear();
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 3ff47dc..d0d8114 100644
--- a/pkg/_fe_analyzer_shared/lib/src/scanner/abstract_scanner.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/scanner/abstract_scanner.dart
@@ -1010,7 +1010,6 @@
         iterations++;
 
         if (iterations > 100) {
-          // Coverage-ignore-block(suite): Not run.
           return recoveryCount;
         }
       }
diff --git a/pkg/_fe_analyzer_shared/messages.yaml b/pkg/_fe_analyzer_shared/messages.yaml
index e72f5e4..4d8786f 100644
--- a/pkg/_fe_analyzer_shared/messages.yaml
+++ b/pkg/_fe_analyzer_shared/messages.yaml
@@ -8,6 +8,7 @@
 # See pkg/front_end/messages.yaml for documentation about this file.
 
 ExperimentNotEnabled:
+  type: syntacticError
   parameters:
     String string: undocumented
     String string2: undocumented
@@ -17,6 +18,7 @@
   hasPublishedDocs: false
 
 ExperimentNotEnabledOffByDefault:
+  type: syntacticError
   parameters:
     String string: undocumented
   problemMessage: "This requires the experimental '#string' language feature to be enabled."
@@ -30,6 +32,7 @@
     }
 
 RecordLiteralOnePositionalFieldNoTrailingComma:
+  type: syntacticError
   parameters: none
   problemMessage: "A record literal with exactly one positional field requires a trailing comma."
   correctionMessage: "Try adding a trailing comma."
@@ -67,6 +70,7 @@
     }
 
 RecordLiteralZeroFieldsWithTrailingComma:
+  type: syntacticError
   parameters: none
   problemMessage: "A record literal without fields can't have a trailing comma."
   correctionMessage: "Try removing the trailing comma."
@@ -107,6 +111,7 @@
     }
 
 EmptyRecordTypeNamedFieldsList:
+  type: syntacticError
   parameters: none
   problemMessage: "The list of named fields in a record type can't be empty."
   correctionMessage: "Try adding a named field to the list."
@@ -148,6 +153,7 @@
     }
 
 RecordTypeZeroFieldsButTrailingComma:
+  type: syntacticError
   parameters: none
   problemMessage: "A record type without fields can't have a trailing comma."
   correctionMessage: "Try removing the trailing comma."
@@ -188,6 +194,7 @@
     }
 
 RecordTypeOnePositionalFieldNoTrailingComma:
+  type: syntacticError
   parameters: none
   problemMessage: "A record type with exactly one positional field requires a trailing comma."
   correctionMessage: "Try adding a trailing comma."
@@ -225,6 +232,7 @@
     }
 
 ExpectedElseOrComma:
+  type: syntacticError
   parameters: none
   problemMessage: "Expected 'else' or comma."
   analyzerCode: ParserErrorCode.EXPECTED_ELSE_OR_COMMA
@@ -238,6 +246,7 @@
     }
 
 ExpectedStatement:
+  type: syntacticError
   parameters: none
   problemMessage: "Expected a statement."
   analyzerCode: ParserErrorCode.MISSING_STATEMENT
@@ -245,6 +254,7 @@
   statement: "void;"
 
 ExpectedInstead:
+  type: syntacticError
   parameters:
     String string: undocumented
   problemMessage: "Expected '#string' instead of this."
@@ -269,6 +279,7 @@
     - "class B {} mixin A extends B { }"
 
 MultipleLibraryDirectives:
+  type: syntacticError
   parameters: none
   problemMessage: "Only one library directive may be declared in a file."
   correctionMessage: "Try removing all but one of the library directives."
@@ -279,6 +290,7 @@
     library bar;
 
 MultipleExtends:
+  type: syntacticError
   parameters: none
   problemMessage: "Each class definition can have at most one extends clause."
   correctionMessage: "Try choosing one superclass and define your class to implement (or mix in) the others."
@@ -289,6 +301,7 @@
     - "class B{} class C{} class A extends B, C {}"
 
 MultipleWith:
+  type: syntacticError
   parameters: none
   problemMessage: "Each class definition can have at most one with clause."
   correctionMessage: "Try combining all of the with clauses into a single clause."
@@ -298,6 +311,7 @@
   exampleAllowOtherCodes: true
 
 WithBeforeExtends:
+  type: syntacticError
   parameters: none
   problemMessage: "The extends clause must be before the with clause."
   correctionMessage: "Try moving the extends clause before the with clause."
@@ -306,6 +320,7 @@
   script: "mixin B {} class C {} class A with B extends C {}"
 
 ImplementsBeforeExtends:
+  type: syntacticError
   parameters: none
   problemMessage: "The extends clause must be before the implements clause."
   correctionMessage: "Try moving the extends clause before the implements clause."
@@ -315,6 +330,7 @@
   exampleAllowOtherCodes: true
 
 ImplementsBeforeOn:
+  type: syntacticError
   parameters: none
   problemMessage: "The on clause must be before the implements clause."
   correctionMessage: "Try moving the on clause before the implements clause."
@@ -324,6 +340,7 @@
   exampleAllowOtherCodes: true
 
 ImplementsBeforeWith:
+  type: syntacticError
   parameters: none
   problemMessage: "The with clause must be before the implements clause."
   correctionMessage: "Try moving the with clause before the implements clause."
@@ -333,6 +350,7 @@
   exampleAllowOtherCodes: true
 
 MultipleClauses:
+  type: syntacticError
   parameters:
     String string: undocumented
     String string2: undocumented
@@ -345,6 +363,7 @@
     - "mixin B {} enum A with B with C, D { v; }"
 
 OutOfOrderClauses:
+  type: syntacticError
   parameters:
     String string: undocumented
     String string2: undocumented
@@ -355,6 +374,7 @@
   script: "class B {} class D {} enum A implements B with D { v; }"
 
 MultipleOnClauses:
+  type: syntacticError
   parameters: none
   problemMessage: "Each mixin definition can have at most one on clause."
   correctionMessage: "Try combining all of the on clauses into a single clause."
@@ -364,6 +384,7 @@
   exampleAllowOtherCodes: true
 
 MixinWithClause:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin can't have a with clause."
   analyzerCode: ParserErrorCode.MIXIN_WITH_CLAUSE
@@ -371,6 +392,7 @@
   script: "mixin M {} mixin N with M {}"
 
 ExpectedClassBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A class declaration must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -381,6 +403,7 @@
     class Class
 
 ExpectedMixinBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin declaration must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -391,6 +414,7 @@
     mixin Mixin
 
 ExpectedExtensionBody:
+  type: syntacticError
   parameters: none
   problemMessage: "An extension declaration must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -401,6 +425,7 @@
     extension Extension on int
 
 ExpectedExtensionTypeBody:
+  type: syntacticError
   parameters: none
   problemMessage: "An extension type declaration must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -411,6 +436,7 @@
     extension type ExtensionType(int i)
 
 ExpectedTryStatementBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A try statement must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -423,6 +449,7 @@
     }
 
 ExpectedCatchClauseBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A catch clause must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -435,6 +462,7 @@
     }
 
 ExpectedFinallyClauseBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A finally clause must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -447,6 +475,7 @@
     }
 
 ExpectedSwitchExpressionBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A switch expression must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -457,6 +486,7 @@
     method(Never n) => switch (n);
 
 ExpectedSwitchStatementBody:
+  type: syntacticError
   parameters: none
   problemMessage: "A switch statement must have a body, even if it is empty."
   correctionMessage: "Try adding an empty body."
@@ -469,6 +499,7 @@
     }
 
 ExpectedIdentifierButGotKeyword:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "'#lexeme' can't be used as an identifier because it's a keyword."
@@ -478,6 +509,7 @@
   script: "var default = 42;"
 
 EqualityCannotBeEqualityOperand:
+  type: syntacticError
   parameters: none
   problemMessage: "A comparison expression can't be an operand of another comparison expression."
   correctionMessage: "Try putting parentheses around one of the comparisons."
@@ -489,6 +521,7 @@
     - "main() { var b = a == b != c; }"
 
 VarAsTypeName:
+  type: syntacticError
   parameters: none
   problemMessage: "The keyword 'var' can't be used as a type name."
   analyzerCode: ParserErrorCode.VAR_AS_TYPE_NAME
@@ -498,6 +531,7 @@
   exampleAllowOtherCodes: true
 
 MissingExpressionInThrow:
+  type: syntacticError
   parameters: none
   problemMessage: "Missing expression after 'throw'."
   correctionMessage: "Add an expression after 'throw' or use 'rethrow' to throw a caught exception"
@@ -507,6 +541,7 @@
     - "throw;"
 
 MissingConstFinalVarOrType:
+  type: syntacticError
   parameters: none
   problemMessage: "Variables must be declared using the keywords 'const', 'final', 'var' or a type name."
   correctionMessage: "Try adding the name of the type of the variable or the keyword 'var'."
@@ -516,6 +551,7 @@
     - "class C { static f; }"
 
 FunctionTypedParameterVar:
+  type: syntacticError
   parameters: none
   problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
   correctionMessage: "Try replacing the keyword with a return type."
@@ -528,6 +564,7 @@
   exampleAllowOtherCodes: true
 
 AbstractClassMember:
+  type: syntacticError
   parameters: none
   problemMessage: "Members of classes can't be declared to be 'abstract'."
   correctionMessage: "Try removing the 'abstract' keyword. You can add the 'abstract' keyword before the class declaration."
@@ -544,6 +581,7 @@
       abstract class C {abstract set m(int x);}
 
 AbstractExternalField:
+  type: syntacticError
   parameters: none
   problemMessage: "Fields can't be declared both 'abstract' and 'external'."
   analyzerCode: ParserErrorCode.ABSTRACT_EXTERNAL_FIELD
@@ -554,6 +592,7 @@
     - "abstract class C {external abstract var f;}"
 
 AbstractStaticField:
+  type: syntacticError
   parameters: none
   problemMessage: "Static fields can't be declared 'abstract'."
   analyzerCode: ParserErrorCode.ABSTRACT_STATIC_FIELD
@@ -563,6 +602,7 @@
     - "abstract class C {abstract static var f;}"
 
 AbstractLateField:
+  type: syntacticError
   parameters: none
   problemMessage: "Abstract fields cannot be late."
   analyzerCode: ParserErrorCode.ABSTRACT_LATE_FIELD
@@ -572,6 +612,7 @@
     - "abstract class C {abstract late var f;}"
 
 AbstractFinalBaseClass:
+  type: syntacticError
   parameters: none
   problemMessage: "An 'abstract' class can't be declared as both 'final' and 'base'."
   correctionMessage: "Try removing either the 'final' or 'base' keyword."
@@ -581,6 +622,7 @@
     - "abstract final base class C {}"
 
 AbstractFinalInterfaceClass:
+  type: syntacticError
   parameters: none
   problemMessage: "An 'abstract' class can't be declared as both 'final' and 'interface'."
   correctionMessage: "Try removing either the 'final' or 'interface' keyword."
@@ -590,6 +632,7 @@
     - "abstract final interface class C {}"
 
 AbstractSealedClass:
+  type: syntacticError
   parameters: none
   problemMessage: "A 'sealed' class can't be marked 'abstract' because it's already implicitly abstract."
   correctionMessage: "Try removing the 'abstract' keyword."
@@ -631,6 +674,7 @@
     - "abstract sealed class C {}"
 
 ClassInClass:
+  type: syntacticError
   parameters: none
   problemMessage: "Classes can't be declared inside other classes."
   correctionMessage: "Try moving the class to the top-level."
@@ -640,6 +684,7 @@
     - "class C { class B {} }"
 
 EnumInClass:
+  type: syntacticError
   parameters: none
   problemMessage: "Enums can't be declared inside classes."
   correctionMessage: "Try moving the enum to the top-level."
@@ -649,6 +694,7 @@
     - "class Foo { enum Bar { Bar1, Bar2, Bar3 } }"
 
 TypedefInClass:
+  type: syntacticError
   parameters: none
   problemMessage: "Typedefs can't be declared inside classes."
   correctionMessage: "Try moving the typedef to the top-level."
@@ -658,6 +704,7 @@
     - "abstract class C { typedef int F(int x); }"
 
 CovariantMember:
+  type: syntacticError
   parameters: none
   problemMessage: "Getters, setters and methods can't be declared to be 'covariant'."
   correctionMessage: "Try removing the 'covariant' keyword."
@@ -668,6 +715,7 @@
     - "class A { covariant int m() => 0; }"
 
 VarReturnType:
+  type: syntacticError
   parameters: none
   problemMessage: "The return type can't be 'var'."
   correctionMessage: "Try removing the keyword 'var', or replacing it with the name of the return type."
@@ -678,6 +726,7 @@
     - "class C { var C() {} }"
 
 ConstClass:
+  type: syntacticError
   parameters: none
   problemMessage: "Classes can't be declared to be 'const'."
   correctionMessage: "Try removing the 'const' keyword. If you're trying to indicate that instances of the class can be constants, place the 'const' keyword on  the class' constructor(s)."
@@ -686,6 +735,7 @@
   script: "const class C {}"
 
 ConstAndFinal:
+  type: syntacticError
   parameters: none
   problemMessage: "Members can't be declared to be both 'const' and 'final'."
   correctionMessage: "Try removing either the 'const' or 'final' keyword."
@@ -698,6 +748,7 @@
     - "final const int x = 5;"
 
 ConflictingModifiers:
+  type: syntacticError
   parameters:
     String string: undocumented
     String string2: undocumented
@@ -711,6 +762,7 @@
   exampleAllowOtherCodes: true
 
 ConstFactory:
+  type: syntacticError
   parameters: none
   problemMessage: "Only redirecting factory constructors can be declared to be 'const'."
   correctionMessage: "Try removing the 'const' keyword, or replacing the body with '=' followed by a valid target."
@@ -723,6 +775,7 @@
     }
 
 ModifierOutOfOrder:
+  type: syntacticError
   parameters:
     String string: undocumented
     String string2: undocumented
@@ -741,6 +794,7 @@
   exampleAllowOtherCodes: true
 
 TypeBeforeFactory:
+  type: syntacticError
   parameters: none
   problemMessage: "Factory constructors cannot have a return type."
   correctionMessage: "Try removing the type appearing before 'factory'."
@@ -753,6 +807,7 @@
     }
 
 ConstMethod:
+  type: syntacticError
   parameters: none
   problemMessage: "Getters, setters and methods can't be declared to be 'const'."
   correctionMessage: "Try removing the 'const' keyword."
@@ -762,6 +817,7 @@
     - "class C { const m() {} }"
 
 CovariantAndStatic:
+  type: syntacticError
   parameters: none
   problemMessage: "Members can't be declared to be both 'covariant' and 'static'."
   correctionMessage: "Try removing either the 'covariant' or 'static' keyword."
@@ -772,6 +828,7 @@
     - "class A {} class C { static covariant A? f; }"
 
 DuplicatedModifier:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "The modifier '#lexeme' was already specified."
@@ -790,6 +847,7 @@
     - "class C { var var m; }"
 
 ExternalConstructorWithFieldInitializers:
+  type: syntacticError
   parameters: none
   problemMessage: "An external constructor can't initialize fields."
   correctionMessage: "Try removing the field initializers, or removing the keyword 'external'."
@@ -802,6 +860,7 @@
     }
 
 ExternalFactoryWithBody:
+  type: syntacticError
   parameters: none
   problemMessage: "External factories can't have a body."
   correctionMessage: "Try removing the body of the factory, or removing the keyword 'external'."
@@ -812,6 +871,7 @@
   exampleAllowOtherCodes: true
 
 ExternalLateField:
+  type: syntacticError
   parameters: none
   problemMessage: "External fields cannot be late."
   analyzerCode: ParserErrorCode.EXTERNAL_LATE_FIELD
@@ -822,6 +882,7 @@
     - "abstract class C {external late var f;}"
 
 ExtraneousModifier:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "Can't have modifier '#lexeme' here."
@@ -843,6 +904,7 @@
   exampleAllowOtherCodes: true
 
 ExtraneousModifierInExtension:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "Can't have modifier '#lexeme' in an extension."
@@ -882,6 +944,7 @@
     - "extension on String { foo(covariant String child) {} }"
 
 ExtraneousModifierInExtensionType:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "Can't have modifier '#lexeme' in an extension type."
@@ -892,6 +955,7 @@
     - "extension type ET(String i) { foo(covariant String child) {} }"
 
 ExtraneousModifierInPrimaryConstructor:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "Can't have modifier '#lexeme' in a primary constructor."
@@ -902,6 +966,7 @@
     - "extension type ET(covariant String i) { }"
 
 FinalAndCovariant:
+  type: syntacticError
   parameters: none
   problemMessage: "Members can't be declared to be both 'final' and 'covariant'."
   correctionMessage: "Try removing either the 'final' or 'covariant' keyword."
@@ -913,6 +978,7 @@
   exampleAllowOtherCodes: true
 
 FinalAndCovariantLateWithInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "Members marked 'late' with an initializer can't be declared to be both 'final' and 'covariant'."
   correctionMessage: "Try removing either the 'final' or 'covariant' keyword, or removing the initializer."
@@ -923,6 +989,7 @@
     - "class C { covariant late final f = 5; }"
 
 FinalAndVar:
+  type: syntacticError
   parameters: none
   problemMessage: "Members can't be declared to be both 'final' and 'var'."
   correctionMessage: "Try removing the keyword 'var'."
@@ -933,6 +1000,7 @@
     - "class C { var final x = 5; }"
 
 StaticConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "Constructors can't be static."
   correctionMessage: "Try removing the keyword 'static'."
@@ -943,6 +1011,7 @@
     - "class C { static C.m() {} }"
 
 GetterConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "Constructors can't be a getter."
   correctionMessage: "Try removing 'get'."
@@ -952,6 +1021,7 @@
     - "class C { get C.m() {} }"
 
 SetterConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "Constructors can't be a setter."
   correctionMessage: "Try removing 'set'."
@@ -961,6 +1031,7 @@
     - "class C { set C.m(x) {} }"
 
 StaticOperator:
+  type: syntacticError
   parameters: none
   problemMessage: "Operators can't be static."
   correctionMessage: "Try removing the keyword 'static'."
@@ -970,6 +1041,7 @@
     - "class C { static operator +(int x) => x + 1; }"
 
 BreakOutsideOfLoop:
+  type: syntacticError
   parameters: none
   problemMessage: "A break statement can't be used outside of a loop or switch statement."
   correctionMessage: "Try removing the break statement."
@@ -979,6 +1051,7 @@
     - "main() { break; }"
 
 ContinueOutsideOfLoop:
+  type: syntacticError
   parameters: none
   problemMessage: "A continue statement can't be used outside of a loop or switch statement."
   correctionMessage: "Try removing the continue statement."
@@ -989,6 +1062,7 @@
   exampleAllowOtherCodes: true
 
 ContinueWithoutLabelInCase:
+  type: syntacticError
   parameters: none
   problemMessage: "A continue statement in a switch statement must have a label as a target."
   correctionMessage: "Try adding a label associated with one of the case clauses to the continue statement."
@@ -998,6 +1072,7 @@
     - "main(List<String> x) { switch (x) {case 1: continue;} }"
 
 DuplicateLabelInSwitchStatement:
+  type: syntacticError
   parameters:
     Name name: undocumented
   problemMessage: "The label '#name' was already used in this switch statement."
@@ -1011,6 +1086,7 @@
     - "switch (0) {l1: case 0: break; l1: case 1: break;}"
 
 InitializedVariableInForEach:
+  type: syntacticError
   parameters: none
   problemMessage: "The loop variable in a for-each loop can't be initialized."
   correctionMessage: "Try removing the initializer, or using a different kind of loop."
@@ -1020,6 +1096,7 @@
     - "for (int a = 0 in <int>[10]) {}"
 
 InvalidAwaitFor:
+  type: syntacticError
   parameters: none
   problemMessage: "The keyword 'await' isn't allowed for a normal 'for' statement."
   correctionMessage: "Try removing the keyword, or use a for-each statement."
@@ -1029,6 +1106,7 @@
     - "f() async {await for (int i = 0; i < 5; i++) {}}"
 
 VoidWithTypeArguments:
+  type: syntacticError
   parameters: none
   problemMessage: "Type 'void' can't have type arguments."
   correctionMessage: "Try removing the type arguments."
@@ -1040,6 +1118,7 @@
 # TODO(danrubel): Review where this error is generated and consider generating
 # FieldInitializedOutsideDeclaringClass instead of this in some situations.
 InvalidInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "Not a valid initializer."
   correctionMessage: "To initialize a field, use the syntax 'name = value'."
@@ -1056,6 +1135,7 @@
   exampleAllowOtherCodes: true
 
 FieldInitializedOutsideDeclaringClass:
+  type: syntacticError
   parameters: none
   problemMessage: "A field can only be initialized in its declaring class"
   correctionMessage: "Try passing a value into the superclass constructor, or moving the initialization into the constructor body."
@@ -1066,6 +1146,7 @@
   exampleAllowOtherCodes: true
 
 StackOverflow:
+  type: syntacticError
   parameters: none
   problemMessage: "The file has too many nested expressions or statements."
   correctionMessage: "Try simplifying the code."
@@ -1073,6 +1154,7 @@
   hasPublishedDocs: false
 
 InvalidHexEscape:
+  type: syntacticError
   parameters: none
   problemMessage: "An escape sequence starting with '\\x' must be followed by 2 hexadecimal digits."
   analyzerCode: ParserErrorCode.INVALID_HEX_ESCAPE
@@ -1082,6 +1164,7 @@
     - "'\\x0y'"
 
 InvalidUnicodeEscapeUStarted:
+  type: syntacticError
   parameters: none
   problemMessage: "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits or from 1 to 6 digits between '{' and '}'."
   analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED
@@ -1090,6 +1173,7 @@
     - "'\\u'"
 
 InvalidUnicodeEscapeUNoBracket:
+  type: syntacticError
   parameters: none
   problemMessage: "An escape sequence starting with '\\u' must be followed by 4 hexadecimal digits."
   analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET
@@ -1098,6 +1182,7 @@
     - "'\\u0F'"
 
 InvalidUnicodeEscapeUBracket:
+  type: syntacticError
   parameters: none
   problemMessage: "An escape sequence starting with '\\u{' must be followed by 1 to 6 hexadecimal digits followed by a '}'."
   analyzerCode: ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET
@@ -1109,6 +1194,7 @@
     - "'\\u{0000003}'"
 
 InvalidEscapeStarted:
+  type: syntacticError
   parameters: none
   problemMessage: "The string '\\' can't stand alone."
   correctionMessage: "Try adding another backslash (\\) to escape the '\\'."
@@ -1121,6 +1207,7 @@
       ');
 
 UnexpectedTokens:
+  type: syntacticError
   parameters: none
   problemMessage: "Unexpected tokens."
   analyzerCode: ParserErrorCode.UNEXPECTED_TOKENS
@@ -1128,6 +1215,7 @@
   script: "enum E w Foo { v; }"
 
 LiteralWithClassAndNew:
+  type: syntacticError
   parameters:
     String string: undocumented
     Token lexeme: undocumented
@@ -1144,6 +1232,7 @@
     - "var x = new List[1];"
 
 LiteralWithClass:
+  type: syntacticError
   parameters:
     String string: undocumented
     Token lexeme: undocumented
@@ -1166,6 +1255,7 @@
     - "var x = const List[1];"
 
 LiteralWithNew:
+  type: syntacticError
   parameters: none
   problemMessage: "A literal can't be prefixed by 'new'."
   correctionMessage: "Try removing 'new'"
@@ -1183,6 +1273,7 @@
     - "var x = new ['a'];"
 
 OnlyTry:
+  type: syntacticError
   parameters: none
   problemMessage: "A try block must be followed by an 'on', 'catch', or 'finally' clause."
   correctionMessage: "Try adding either a catch or finally clause, or remove the try statement."
@@ -1191,6 +1282,7 @@
   statement: "try {}"
 
 TypeAfterVar:
+  type: syntacticError
   parameters: none
   problemMessage: "Variables can't be declared using both 'var' and a type name."
   correctionMessage: "Try removing 'var.'"
@@ -1201,6 +1293,7 @@
   exampleAllowOtherCodes: true
 
 CatchSyntax:
+  type: syntacticError
   parameters: none
   problemMessage: "'catch' must be followed by '(identifier)' or '(identifier, identifier)'."
   correctionMessage: "No types are needed, the first is given by 'on', the second is always 'StackTrace'."
@@ -1212,6 +1305,7 @@
     - "try {} catch (e,) {}"
 
 CatchSyntaxExtraParameters:
+  type: syntacticError
   parameters: none
   problemMessage: "'catch' must be followed by '(identifier)' or '(identifier, identifier)'."
   correctionMessage: "No types are needed, the first is given by 'on', the second is always 'StackTrace'."
@@ -1221,6 +1315,7 @@
     - "try {} catch (e, s, x) {}"
 
 SuperNullAware:
+  type: syntacticError
   parameters: none
   problemMessage: "The operator '?.' cannot be used with 'super' because 'super' cannot be null."
   correctionMessage: "Try replacing '?.' with '.'"
@@ -1236,6 +1331,7 @@
   exampleAllowOtherCodes: true
 
 NullAwareCascadeOutOfOrder:
+  type: syntacticError
   parameters: none
   problemMessage: "The '?..' cascade operator must be first in the cascade sequence."
   correctionMessage: "Try moving the '?..' operator to be the first cascade operator in the sequence."
@@ -1250,6 +1346,7 @@
   exampleAllowOtherCodes: true
 
 MetadataTypeArguments:
+  type: syntacticError
   parameters: none
   problemMessage: "An annotation can't use type arguments."
   analyzerCode: ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS
@@ -1263,6 +1360,7 @@
     void foo() {}
 
 MetadataTypeArgumentsUninstantiated:
+  type: syntacticError
   parameters: none
   problemMessage: "An annotation with type arguments must be followed by an argument list."
   analyzerCode: ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED
@@ -1271,6 +1369,7 @@
     - "@deprecated<int> class C {}"
 
 MetadataSpaceBeforeParenthesis:
+  type: syntacticError
   parameters: none
   problemMessage: "Annotations can't have spaces or comments before the parenthesis."
   correctionMessage: Remove any spaces or comments before the parenthesis.
@@ -1289,6 +1388,7 @@
       @Foo () class Bar {}
 
 ConstructorWithReturnType:
+  type: syntacticError
   parameters: none
   problemMessage: "Constructors can't have a return type."
   correctionMessage: "Try removing the return type."
@@ -1299,6 +1399,7 @@
     - "class C { void C.m() {} }"
 
 ConstructorWithTypeParameters:
+  type: syntacticError
   parameters: none
   problemMessage: "Constructors can't have type parameters."
   analyzerCode: ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR
@@ -1321,6 +1422,7 @@
       }
 
 ConstructorWithTypeArguments:
+  type: syntacticError
   parameters: none
   problemMessage: "A constructor invocation can't have type arguments after the constructor name."
   correctionMessage: "Try removing the type arguments or placing them after the class name."
@@ -1331,6 +1433,7 @@
     - "class C<X> { C.foo(); } bar() { C.foo<int>(); }"
 
 ConstructorWithWrongName:
+  type: syntacticError
   parameters: none
   problemMessage: "The name of a constructor must match the name of the enclosing class."
   analyzerCode: ParserErrorCode.INVALID_CONSTRUCTOR_NAME
@@ -1350,6 +1453,7 @@
       }
 
 FieldInitializerOutsideConstructor:
+  type: compileTimeError
   parameters: none
   problemMessage: "Field formal parameters can only be used in a constructor."
   correctionMessage: "Try removing 'this.'."
@@ -1394,6 +1498,7 @@
   exampleAllowOtherCodes: true
 
 NativeClauseShouldBeAnnotation:
+  type: syntacticError
   parameters: none
   problemMessage: "Native clause in this form is deprecated."
   correctionMessage: "Try removing this native clause and adding @native() or @native('native-name') before the declaration."
@@ -1401,6 +1506,7 @@
   hasPublishedDocs: false
 
 MissingPrefixInDeferredImport:
+  type: syntacticError
   parameters: none
   problemMessage: "Deferred imports should have a prefix."
   correctionMessage: "Try adding a prefix to the import by adding an 'as' clause."
@@ -1412,6 +1518,7 @@
     lib.dart: ""
 
 DeferredAfterPrefix:
+  type: syntacticError
   parameters: none
   problemMessage: "The deferred keyword should come immediately before the prefix ('as' clause)."
   correctionMessage: "Try moving the deferred keyword before the prefix."
@@ -1423,6 +1530,7 @@
     lib.dart: ""
 
 DuplicateDeferred:
+  type: syntacticError
   parameters: none
   problemMessage: "An import directive can only have one 'deferred' keyword."
   correctionMessage: "Try removing all but one 'deferred' keyword."
@@ -1434,6 +1542,7 @@
     lib.dart: ""
 
 DuplicatePrefix:
+  type: syntacticError
   parameters: none
   problemMessage: "An import directive can only have one prefix ('as' clause)."
   correctionMessage: "Try removing all but one prefix."
@@ -1445,6 +1554,7 @@
     lib.dart: ""
 
 PrefixAfterCombinator:
+  type: syntacticError
   parameters: none
   problemMessage: "The prefix ('as' clause) should come before any show/hide combinators."
   correctionMessage: "Try moving the prefix before the combinators."
@@ -1456,6 +1566,7 @@
     lib.dart: ""
 
 MixinDeclaresConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "Mixins can't declare constructors."
   analyzerCode: ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR
@@ -1466,6 +1577,7 @@
     }
 
 ExtensionDeclaresAbstractMember:
+  type: syntacticError
   parameters: none
   problemMessage: "Extensions can't declare abstract members."
   correctionMessage: "Try providing an implementation for the member."
@@ -1498,6 +1610,7 @@
   hasPublishedDocs: true
 
 ExtensionDeclaresConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "Extensions can't declare constructors."
   correctionMessage: "Try removing the constructor declaration."
@@ -1532,6 +1645,7 @@
   hasPublishedDocs: true
 
 ExtensionAugmentationHasOnClause:
+  type: syntacticError
   parameters: none
   problemMessage: "Extension augmentations can't have 'on' clauses."
   correctionMessage: "Try removing the 'on' clause."
@@ -1542,6 +1656,7 @@
   comment: No parameters.
 
 AnnotationOnTypeArgument:
+  type: syntacticError
   parameters: none
   problemMessage: "Type arguments can't have annotations because they aren't declarations."
   analyzerCode: ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT
@@ -1550,6 +1665,7 @@
     - "class A<E> {} class C { m() => new A<@Object() C>(); }"
 
 ExternalClass:
+  type: syntacticError
   parameters: none
   problemMessage: "Classes can't be declared to be 'external'."
   correctionMessage: "Try removing the keyword 'external'."
@@ -1559,6 +1675,7 @@
     - "external class C {}"
 
 ExternalEnum:
+  type: syntacticError
   parameters: none
   problemMessage: "Enums can't be declared to be 'external'."
   correctionMessage: "Try removing the keyword 'external'."
@@ -1568,6 +1685,7 @@
     - "external enum E {ONE}"
 
 ExternalMethodWithBody:
+  type: syntacticError
   parameters: none
   problemMessage: "An external or native method can't have a body."
   analyzerCode: ParserErrorCode.EXTERNAL_METHOD_WITH_BODY
@@ -1578,6 +1696,7 @@
     - "class C {foo() native 'bar' {}}"
 
 ExternalConstructorWithInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "An external constructor can't have any initializers."
   analyzerCode: ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER
@@ -1587,6 +1706,7 @@
     - "class C { int? x; external C.foo() : x = 1; }"
 
 ExternalTypedef:
+  type: syntacticError
   parameters: none
   problemMessage: "Typedefs can't be declared to be 'external'."
   correctionMessage: "Try removing the keyword 'external'."
@@ -1596,6 +1716,7 @@
     - "external typedef F();"
 
 OperatorWithTypeParameters:
+  type: syntacticError
   parameters: none
   problemMessage: "Types parameters aren't allowed when defining an operator."
   correctionMessage: "Try removing the type parameters."
@@ -1608,6 +1729,7 @@
     - "class C { operator []<T>(T t) => null; }"
 
 LibraryDirectiveNotFirst:
+  type: syntacticError
   parameters: none
   problemMessage: "The library directive must appear before all other directives."
   correctionMessage: "Try moving the library directive before any other directives."
@@ -1620,6 +1742,7 @@
   exampleAllowOtherCodes: true
 
 ImportAfterPart:
+  type: syntacticError
   parameters: none
   problemMessage: "Import directives must precede part directives."
   correctionMessage: "Try moving the import directives before the part directives."
@@ -1630,6 +1753,7 @@
   exampleAllowOtherCodes: true
 
 ExportAfterPart:
+  type: syntacticError
   parameters: none
   problemMessage: "Export directives must precede part directives."
   correctionMessage: "Try moving the export directives before the part directives."
@@ -1640,6 +1764,7 @@
     - "part 'foo.dart'; export 'bar.dart';"
 
 DirectiveAfterDeclaration:
+  type: syntacticError
   parameters: none
   problemMessage: "Directives must appear before any declarations."
   correctionMessage: "Try moving the directive before any declarations."
@@ -1656,6 +1781,7 @@
       bar.dart: ""
 
 PartOfTwice:
+  type: syntacticError
   parameters: none
   problemMessage: "Only one part-of directive may be declared in a file."
   correctionMessage: "Try removing all but one of the part-of directives."
@@ -1682,6 +1808,7 @@
         part of "main.dart";
 
 FactoryTopLevelDeclaration:
+  type: syntacticError
   parameters: none
   problemMessage: "Top-level declarations can't be declared to be 'factory'."
   correctionMessage: "Try removing the keyword 'factory'."
@@ -1691,6 +1818,7 @@
     - "factory class C {}"
 
 RedirectionInNonFactory:
+  type: syntacticError
   parameters: none
   problemMessage: "Only factory constructor can specify '=' redirection."
   correctionMessage: "Try making this a factory constructor, or remove the redirection."
@@ -1701,6 +1829,7 @@
   exampleAllowOtherCodes: true
 
 TopLevelOperator:
+  type: syntacticError
   parameters: none
   problemMessage: "Operators must be declared within a class."
   correctionMessage: "Try removing the operator, moving it to a class, or converting it to be a function."
@@ -1712,6 +1841,7 @@
     - "void operator +(bool x, bool y) => x | y;"
 
 TypeArgumentsOnTypeVariable:
+  type: syntacticError
   parameters:
     Name name: undocumented
   problemMessage: "Can't use type arguments with type variable '#name'."
@@ -1737,6 +1867,7 @@
 # definitions. Consequently, it is more convenient to use the word
 # "declaration" instead of "definition" as the former implies less.
 MemberWithSameNameAsClass:
+  type: syntacticError
   parameters: none
   problemMessage: "A class member can't have the same name as the enclosing class."
   correctionMessage: "Try renaming the member."
@@ -1751,6 +1882,7 @@
     - "class C { int? A, B, C, D, E; }"
 
 MissingOperatorKeyword:
+  type: syntacticError
   parameters: none
   problemMessage: "Operator declarations must be preceded by the keyword 'operator'."
   correctionMessage: "Try adding the keyword 'operator'."
@@ -1760,6 +1892,7 @@
     - "class C { +(x) {} }"
 
 InvalidOperator:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: "The string '#lexeme' isn't a user-definable operator."
@@ -1772,18 +1905,21 @@
     - "class C { void operator %=(x) {} }"
 
 InvalidSuperInInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "Can only use 'super' in an initializer for calling the superclass constructor (e.g. 'super()' or 'super.namedConstructor()')"
   analyzerCode: ParserErrorCode.INVALID_SUPER_IN_INITIALIZER
   hasPublishedDocs: false
 
 InvalidThisInInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "Can only use 'this' in an initializer for field initialization (e.g. 'this.x = something') and constructor redirection (e.g. 'this()' or 'this.namedConstructor())"
   analyzerCode: ParserErrorCode.INVALID_THIS_IN_INITIALIZER
   hasPublishedDocs: false
 
 SwitchHasCaseAfterDefault:
+  type: syntacticError
   parameters: none
   problemMessage: "The default case should be the last case in a switch statement."
   correctionMessage: "Try moving the default case after the other case clauses."
@@ -1793,6 +1929,7 @@
     - "class C { foo(int a) {switch (a) {default: return 0; case 1: return 1;}} }"
 
 SwitchHasMultipleDefaults:
+  type: syntacticError
   parameters: none
   problemMessage: "The 'default' case can only be declared once."
   correctionMessage: "Try removing all but one default case."
@@ -1802,6 +1939,7 @@
     - "class C { foo(int a) {switch (a) {default: return 0; default: return 1;}} }"
 
 ExpectedAnInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "Expected an initializer."
   analyzerCode: ParserErrorCode.MISSING_INITIALIZER
@@ -1810,6 +1948,7 @@
     - "class C { C() : {} }"
 
 MissingAssignmentInInitializer:
+  type: syntacticError
   parameters: none
   problemMessage: "Expected an assignment after the field name."
   correctionMessage: "To initialize a field, use the syntax 'name = value'."
@@ -1820,6 +1959,7 @@
   exampleAllowOtherCodes: true
 
 RedirectingConstructorWithBody:
+  type: syntacticError
   parameters: none
   problemMessage: "Redirecting constructors can't have a body."
   correctionMessage: "Try removing the body, or not making this a redirecting constructor."
@@ -1830,6 +1970,7 @@
   exampleAllowOtherCodes: true
 
 IllegalAssignmentToNonAssignable:
+  type: syntacticError
   parameters: none
   problemMessage: "Illegal assignment to non-assignable expression."
   analyzerCode: ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
@@ -1838,6 +1979,7 @@
     - "main(){ f()++; }"
 
 MissingAssignableSelector:
+  type: syntacticError
   parameters: none
   problemMessage: "Missing selector such as '.identifier' or '[0]'."
   correctionMessage: "Try adding a selector."
@@ -1847,6 +1989,7 @@
     - "main(){ ++f(); }"
 
 ColonInPlaceOfIn:
+  type: syntacticError
   parameters: none
   problemMessage: "For-in loops use 'in' rather than a colon."
   correctionMessage: "Try replacing the colon with the keyword 'in'."
@@ -1858,6 +2001,7 @@
     }
 
 BinaryOperatorWrittenOut:
+  type: syntacticError
   parameters:
     String string: undocumented
     String string2: undocumented
@@ -1869,6 +2013,7 @@
     int foo(int x, int y) => x xor y;
 
 ExternalFactoryRedirection:
+  type: syntacticError
   parameters: none
   problemMessage: "A redirecting factory can't be external."
   correctionMessage: "Try removing the 'external' modifier."
@@ -1881,6 +2026,7 @@
     }
 
 MultipleVarianceModifiers:
+  type: syntacticError
   parameters: none
   problemMessage: "Each type parameter can have at most one variance modifier."
   correctionMessage: "Use at most one of the 'in', 'out', or 'inout' modifiers."
@@ -1892,6 +2038,7 @@
 
 
 BaseEnum:
+  type: syntacticError
   parameters: none
   problemMessage: "Enums can't be declared to be 'base'."
   correctionMessage: "Try removing the keyword 'base'."
@@ -1901,6 +2048,7 @@
     - "base enum E { v }"
 
 FinalEnum:
+  type: syntacticError
   parameters: none
   problemMessage: "Enums can't be declared to be 'final'."
   correctionMessage: "Try removing the keyword 'final'."
@@ -1910,6 +2058,7 @@
     - "final enum E { v }"
 
 InterfaceEnum:
+  type: syntacticError
   parameters: none
   problemMessage: "Enums can't be declared to be 'interface'."
   correctionMessage: "Try removing the keyword 'interface'."
@@ -1919,6 +2068,7 @@
     - "interface enum E { v }"
 
 SealedEnum:
+  type: syntacticError
   parameters: none
   problemMessage: "Enums can't be declared to be 'sealed'."
   correctionMessage: "Try removing the keyword 'sealed'."
@@ -1928,6 +2078,7 @@
     - "sealed enum E { v }"
 
 FinalMixin:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin can't be declared 'final'."
   correctionMessage: "Try removing the 'final' keyword."
@@ -1937,6 +2088,7 @@
     - "final mixin M {}"
 
 InterfaceMixin:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin can't be declared 'interface'."
   correctionMessage: "Try removing the 'interface' keyword."
@@ -1946,6 +2098,7 @@
     - "interface mixin M {}"
 
 SealedMixin:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin can't be declared 'sealed'."
   correctionMessage: "Try removing the 'sealed' keyword."
@@ -1955,6 +2108,7 @@
     - "sealed mixin M {}"
 
 FinalMixinClass:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin class can't be declared 'final'."
   correctionMessage: "Try removing the 'final' keyword."
@@ -1964,6 +2118,7 @@
     - "final mixin class C {}"
 
 InterfaceMixinClass:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin class can't be declared 'interface'."
   correctionMessage: "Try removing the 'interface' keyword."
@@ -1973,6 +2128,7 @@
     - "interface mixin class C {}"
 
 SealedMixinClass:
+  type: syntacticError
   parameters: none
   problemMessage: "A mixin class can't be declared 'sealed'."
   correctionMessage: "Try removing the 'sealed' keyword."
@@ -1982,6 +2138,7 @@
     - "sealed mixin class C {}"
 
 InvalidConstantPatternNegation:
+  type: syntacticError
   parameters: none
   problemMessage: "Only negation of a numeric literal is supported as a constant pattern."
   correctionMessage: "Try wrapping the expression in 'const ( ... )'."
@@ -1994,6 +2151,7 @@
     }
 
 InvalidConstantPatternUnary:
+  type: syntacticError
   parameters:
     Name name: undocumented
   problemMessage: "The unary operator #name is not supported as a constant pattern."
@@ -2007,6 +2165,7 @@
     }
 
 InvalidConstantPatternDuplicateConst:
+  type: syntacticError
   parameters: none
   problemMessage: "Duplicate 'const' keyword in constant expression."
   correctionMessage: "Try removing one of the 'const' keywords."
@@ -2018,6 +2177,7 @@
     }
 
 InvalidConstantPatternEmptyRecordLiteral:
+  type: syntacticError
   parameters: none
   problemMessage: "The empty record literal is not supported as a constant pattern."
   analyzerCode: ParserErrorCode.INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL
@@ -2028,6 +2188,7 @@
     }
 
 InvalidConstantPatternGeneric:
+  type: syntacticError
   parameters: none
   problemMessage: "This expression is not supported as a constant pattern."
   correctionMessage: "Try wrapping the expression in 'const ( ... )'."
@@ -2039,6 +2200,7 @@
     }
 
 InvalidConstantPatternConstPrefix:
+  type: syntacticError
   parameters: none
   problemMessage: "The expression can't be prefixed by 'const' to form a constant pattern."
   correctionMessage: "Try wrapping the expression in 'const ( ... )' instead."
@@ -2050,6 +2212,7 @@
     }
 
 InvalidConstantPatternBinary:
+  type: syntacticError
   parameters:
     Name name: undocumented
   problemMessage: "The binary operator #name is not supported as a constant pattern."
@@ -2062,6 +2225,7 @@
     }
 
 PatternAssignmentDeclaresVariable:
+  type: syntacticError
   parameters:
     Name name: undocumented
   problemMessage: "Variable '#name' can't be declared in a pattern assignment."
@@ -2075,6 +2239,7 @@
     }
 
 VariablePatternKeywordInDeclarationContext:
+  type: syntacticError
   parameters: none
   problemMessage: Variable patterns in declaration context can't specify 'var' or 'final' keyword.
   correctionMessage: Try removing the keyword.
@@ -2116,6 +2281,7 @@
     ```
 
 IllegalPatternVariableName:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: The variable declared by a variable pattern can't be named '#lexeme'.
@@ -2133,6 +2299,7 @@
     }
 
 IllegalPatternAssignmentVariableName:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: A variable assigned by a pattern assignment can't be named '#lexeme'.
@@ -2149,6 +2316,7 @@
     }
 
 IllegalPatternIdentifierName:
+  type: syntacticError
   parameters:
     Token lexeme: undocumented
   problemMessage: A pattern can't refer to an identifier named '#lexeme'.
@@ -2167,6 +2335,7 @@
     }
 
 InvalidInsideUnaryPattern:
+  type: syntacticError
   parameters: none
   problemMessage: This pattern cannot appear inside a unary pattern (cast pattern, null check pattern, or null assert pattern) without parentheses.
   correctionMessage: Try combining into a single pattern if possible, or enclose the inner pattern in parentheses.
@@ -2179,6 +2348,7 @@
     }
 
 LatePatternVariableDeclaration:
+  type: syntacticError
   parameters: none
   problemMessage: A pattern variable declaration may not use the `late` keyword.
   correctionMessage: Try removing the keyword `late`.
@@ -2191,6 +2361,7 @@
     }
 
 PatternVariableDeclarationOutsideFunctionOrMethod:
+  type: syntacticError
   parameters: none
   problemMessage: A pattern variable declaration may not appear outside a function or method.
   correctionMessage: Try declaring ordinary variables and assigning from within a function or method.
@@ -2203,6 +2374,7 @@
     }
 
 DefaultInSwitchExpression:
+  type: syntacticError
   parameters: none
   problemMessage: A switch expression may not use the `default` keyword.
   correctionMessage: Try replacing `default` with `_`.
@@ -2216,6 +2388,7 @@
     };
 
 MissingPrimaryConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "An extension type declaration must have a primary constructor declaration."
   correctionMessage: "Try adding a primary constructor to the extension type declaration."
@@ -2225,6 +2398,7 @@
     extension type E {}
 
 MissingPrimaryConstructorParameters:
+  type: syntacticError
   parameters: none
   problemMessage: "A primary constructor declaration must have formal parameters."
   correctionMessage: "Try adding formal parameters after the primary constructor name."
@@ -2234,6 +2408,7 @@
     extension type E.name {}
 
 ExtensionTypeExtends:
+  type: syntacticError
   parameters: none
   problemMessage: "An extension type declaration can't have an 'extends' clause."
   correctionMessage: "Try removing the 'extends' clause or replacing the 'extends' with 'implements'."
@@ -2244,6 +2419,7 @@
     extension type E(int i) extends F {}
 
 ExtensionTypeWith:
+  type: syntacticError
   parameters: none
   problemMessage: "An extension type declaration can't have a 'with' clause."
   correctionMessage: "Try removing the 'with' clause or replacing the 'with' with 'implements'."
@@ -2254,6 +2430,7 @@
     extension type E(int i) with F {}
 
 ConstWithoutPrimaryConstructor:
+  type: syntacticError
   parameters: none
   problemMessage: "'const' can only be used together with a primary constructor declaration."
   correctionMessage: "Try removing the 'const' keyword or adding a primary constructor declaration."
@@ -2261,3 +2438,42 @@
   hasPublishedDocs: false
   script: |
     class const C {}
+
+NewConstructorQualifiedName:
+  type: syntacticError
+  parameters: none
+  problemMessage: "Constructors declared with the 'new' keyword can't have qualified names."
+  correctionMessage: "Try removing the class name prefix from the qualified name or removing the 'new' keyword."
+  analyzerCode: ParserErrorCode.NEW_CONSTRUCTOR_QUALIFIED_NAME
+  hasPublishedDocs: false
+  experiments: primary-constructors
+  script: |
+    class C {
+      new C.named();
+    }
+
+NewConstructorNewName:
+  type: syntacticError
+  parameters: none
+  problemMessage: "Constructors declared with the 'new' keyword can't be named 'new'."
+  correctionMessage: "Try removing the second 'new' or changing it to a different name."
+  analyzerCode: ParserErrorCode.NEW_CONSTRUCTOR_NEW_NAME
+  hasPublishedDocs: false
+  experiments: primary-constructors
+  script: |
+    class C {
+      new new();
+    }
+
+FactoryConstructorNewName:
+  type: syntacticError
+  parameters: none
+  problemMessage: "Factory constructors can't be named 'new'."
+  correctionMessage: "Try removing the 'new' keyword or changing it to a different name."
+  analyzerCode: ParserErrorCode.FACTORY_CONSTRUCTOR_NEW_NAME
+  hasPublishedDocs: false
+  experiments: primary-constructors
+  script: |
+    class C {
+      factory new() => throw '';
+    }
diff --git a/pkg/_fe_analyzer_shared/test/constants/data/errors.dart b/pkg/_fe_analyzer_shared/test/constants/data/errors.dart
index ad43f2d..78fd1f3 100644
--- a/pkg/_fe_analyzer_shared/test/constants/data/errors.dart
+++ b/pkg/_fe_analyzer_shared/test/constants/data/errors.dart
@@ -6,7 +6,7 @@
 
 const String string0 =
     /*cfe|dart2js.error: Method invocation is not a constant expression.*/
-    /*analyzer.error: CompileTimeErrorCode.CONST_EVAL_METHOD_INVOCATION*/ method();
+    /*analyzer.error: CONST_EVAL_METHOD_INVOCATION*/ method();
 
 main() {
   print(string0);
diff --git a/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart b/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart
index a98cd2e..4c8901f 100644
--- a/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart
+++ b/pkg/_fe_analyzer_shared/test/exhaustiveness/env.dart
@@ -456,6 +456,20 @@
     // TODO(johnniwinther): Support extension types in testing.
     return type;
   }
+
+  @override
+  bool isEnum(_Type type) {
+    if (type is _InterfaceType) {
+      return type.cls is _EnumClass;
+    }
+    return false;
+  }
+
+  @override
+  Uri? libraryUri(_Type type) {
+    // TODO(FMorschel): Support library URIs in testing.
+    return null;
+  }
 }
 
 class _EnumOperations
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart
index ef48180..4b8154e 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart
@@ -4,12 +4,12 @@
 
 /*class: A:A,Object*/
 class A
-    implements /*analyzer.error: CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY*/
+    implements /*analyzer.error: FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY*/
         /*cfe|cfe:builder.error: FinalClassImplementedOutsideOfLibrary*/ Function {}
 
 /*class: B:B,Object*/
 class B
-    extends /*analyzer.error: CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY*/ /*cfe|cfe:builder.error: FinalClassExtendedOutsideOfLibrary*/
+    extends /*analyzer.error: FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY*/ /*cfe|cfe:builder.error: FinalClassExtendedOutsideOfLibrary*/
         Function {}
 
 /*cfe|cfe:builder.class: C:C,Object,_C&Object&Function*/
@@ -17,12 +17,12 @@
 /*cfe|cfe:builder.class: _C&Object&Function:Object,_C&Object&Function*/
 class /*cfe|cfe:builder.error: SubtypeOfFinalIsNotBaseFinalOrSealed*/ C
     extends Object
-    with /*analyzer.error: CompileTimeErrorCode.CLASS_USED_AS_MIXIN*/
+    with /*analyzer.error: CLASS_USED_AS_MIXIN*/
         /*cfe|cfe:builder.error: CantUseClassAsMixin*/ Function {}
 
 // CFE hides that this is a mixin declaration since its mixed in type has been
 // removed.
 /*cfe|cfe:builder.class: D:D,Object*/
 class D = Object
-    with /*analyzer.error: CompileTimeErrorCode.CLASS_USED_AS_MIXIN*/ /*cfe|cfe:builder.error: CantUseClassAsMixin*/
+    with /*analyzer.error: CLASS_USED_AS_MIXIN*/ /*cfe|cfe:builder.error: CantUseClassAsMixin*/
         Function;
diff --git a/pkg/analysis_server/benchmark/integration/input_converter.dart b/pkg/analysis_server/benchmark/integration/input_converter.dart
index bbd3e85..091c729 100644
--- a/pkg/analysis_server/benchmark/integration/input_converter.dart
+++ b/pkg/analysis_server/benchmark/integration/input_converter.dart
@@ -63,7 +63,7 @@
   /// Return an operation for the notification or `null` if none.
   Operation? convertNotification(Map<String, dynamic> json) {
     var event = json['event'] as String;
-    if (event == SERVER_NOTIFICATION_STATUS) {
+    if (event == serverNotificationStatus) {
       // {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
       var params = asMap2(json['params']);
       if (params != null) {
@@ -73,7 +73,7 @@
         }
       }
     }
-    if (event == SERVER_NOTIFICATION_CONNECTED) {
+    if (event == serverNotificationConnected) {
       // {"event":"server.connected","params":{"version":"1.7.0"}}
       return StartServerOperation();
     }
@@ -90,7 +90,7 @@
     var method = json['method'] as String;
     // Sanity check operations that modify source
     // to ensure that the operation is on source in temp space
-    if (method == ANALYSIS_REQUEST_UPDATE_CONTENT) {
+    if (method == analysisRequestUpdateContent) {
       // Track overlays in parallel with the analysis server
       // so that when an overlay is removed, the file can be updated on disk
       var request = Request.fromJson(json)!;
@@ -125,24 +125,24 @@
     }
     // TODO(danrubel): replace this with code
     // that just forwards the translated request
-    if (method == ANALYSIS_REQUEST_GET_HOVER ||
-        method == ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS ||
-        method == ANALYSIS_REQUEST_SET_PRIORITY_FILES ||
-        method == ANALYSIS_REQUEST_SET_SUBSCRIPTIONS ||
-        method == ANALYSIS_REQUEST_UPDATE_OPTIONS ||
-        method == EDIT_REQUEST_GET_ASSISTS ||
-        method == EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS ||
-        method == EDIT_REQUEST_GET_FIXES ||
-        method == EDIT_REQUEST_GET_REFACTORING ||
-        method == EDIT_REQUEST_SORT_MEMBERS ||
-        method == EXECUTION_REQUEST_CREATE_CONTEXT ||
-        method == EXECUTION_REQUEST_DELETE_CONTEXT ||
-        method == EXECUTION_REQUEST_MAP_URI ||
-        method == EXECUTION_REQUEST_SET_SUBSCRIPTIONS ||
-        method == SEARCH_REQUEST_FIND_ELEMENT_REFERENCES ||
-        method == SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS ||
-        method == SERVER_REQUEST_GET_VERSION ||
-        method == SERVER_REQUEST_SET_SUBSCRIPTIONS) {
+    if (method == analysisRequestGetHover ||
+        method == analysisRequestSetAnalysisRoots ||
+        method == analysisRequestSetPriorityFiles ||
+        method == analysisRequestSetSubscriptions ||
+        method == analysisRequestUpdateOptions ||
+        method == editRequestGetAssists ||
+        method == editRequestGetAvailableRefactorings ||
+        method == editRequestGetFixes ||
+        method == editRequestGetRefactoring ||
+        method == editRequestSortMembers ||
+        method == executionRequestCreateContext ||
+        method == executionRequestDeleteContext ||
+        method == executionRequestMapUri ||
+        method == executionRequestSetSubscriptions ||
+        method == searchRequestFindElementReferences ||
+        method == searchRequestFindMemberDeclarations ||
+        method == serverRequestGetVersion ||
+        method == serverRequestSetSubscriptions) {
       return RequestOperation(this, json);
     }
     throw 'unknown request: $method\n  $json';
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 99dd53e..04b8de5 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -110,7 +110,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  1.40.0
+  1.40.1
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -245,6 +245,10 @@
   ignoring the item or treating it with some default/fallback handling.
 </p>
 <h3>Changelog</h3>
+<h4>1.40.1</h4>
+<ul>
+  <li>Added an optional <tt>extendedType</tt> field to <tt>Element</tt> to store the name of the type that extensions apply to that can be used to improve the display names for unnamed extensions.</li>
+</ul>
 <h4>1.40.0</h4>
 <ul>
   <li>Added an optional <tt>version</tt> field to <tt>AddContentOverlay</tt> and <tt>ChangeContentOverlay</tt> to allow clients/servers to have a way to identify specific versions of documents.</li>
@@ -3975,6 +3979,14 @@
           If the element is a type alias, this field is the aliased type.
           Otherwise this field will not be defined.
         </p>
+      </dd><dt class="field"><b>extendedType: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          If the element is an extension, this field is the name of the type
+          that is extended. This can be useful to show in UIs for unnamed
+          extension, for example "extension on {extendedType}". This field
+          might not be defined even for an extension in the case of invalid code.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_ElementDeclaration">ElementDeclaration: object</a></dt><dd>
     <p>
       A declaration - top-level (class, field, etc) or a class member (method,
diff --git a/pkg/analysis_server/doc/design/principles/language_fidelity.md b/pkg/analysis_server/doc/design/principles/language_fidelity.md
new file mode 100644
index 0000000..246eff4
--- /dev/null
+++ b/pkg/analysis_server/doc/design/principles/language_fidelity.md
@@ -0,0 +1,288 @@
+# Language Fidelity
+
+[Dart Language Specification]: https://storage.googleapis.com/dart-specification/DartLangSpecDraft.pdf
+
+__The tooling should never mislead the user about the syntax or semantics of
+the language.__
+
+That probably sounds obvious, at least on the surface. But you might be
+surprised by how often we receive requests for changes that would violate that
+principle.
+
+The syntax and semantics of Dart are non-trivial, and some of those requests are
+probably a result of misunderstandings about the language. In this document
+we'll look at some of the complexities of the language and how that impacts the
+design of the UX.
+
+## Syntax
+
+Dart's syntax is fairly straightforward, but there are a few places where it can
+impact the user experience.
+
+### Reserved words, build-in identifiers, and positionally significant identifiers
+
+Dart has three categories of identifiers with special semantics:
+
+<dl>
+<dt>Reserved words</dt>
+<dd>
+Identifiers that can only be used in specified places in the grammar. They
+can't be used in any kind of declaration.
+</dd>
+<p></p>
+<dd>
+Examples include `class` and `if`. The complete list is in the
+[Dart Language Specification][] in section 21.1.1.
+</dd>
+<dt>Build-in identifiers</dt>
+<dd>
+Identifiers that are used as keywords in Dart, but are not reserved words. A
+built-in identifier may not be used to name a class or type, but can be used in
+other declarations.
+</dd>
+<p></p>
+<dd>
+Examples include `import` and `extension`. The complete list is in the
+[Dart Language Specification][] in section 17.38.
+</dd>
+<dt>Positionally significant identifiers</dt>
+<dd>
+Identifiers that can be used for any kind of declaration but which have a
+special meaning when used in certain locations.
+</dd>
+<p></p>
+<dd>
+Examples include `show` and `on`. The complete list is in the
+[Dart Language Specification][] in section 17.38.
+</dd>
+</dl>
+
+The question is whether to explicitly represent these three categories of
+identifiers or whether to ignore the distinctions. It could be argued that
+ignoring the distinction would violate this design principle. It could also be
+argued that making the distinction might be confusing for the user.
+
+In the end, we decided that the better interpretation of the language spec is
+that there are two important categories: identifiers that are functioning as a
+keyword and identifiers that are not.
+
+This has implications for
+- Semantic highlighting
+- Code completion
+
+## The type system
+
+For the purposes of this document, we'll classify the types in Dart's type
+system into three categories:
+
+<dl>
+<dt>Nominal types</dt>
+<dd>
+A nominal type is a type with a name, such as the type introduced by a class,
+enum, mixin, or extension type declaration.
+</dd>
+<dt>Structural types</dt>
+<dd>
+A structural type is a type identified only by the structure of the type. This
+includes both function types (such as `int Function(int, int)`) and record types
+(such as `({int x, int y})`).
+</dd>
+<dt>Other types</dt>
+<dd>
+These are the types that don't fit into the other two categories. They include,
+but are not limited to, types like `dynamic`, `void`, `Never`, and `FutureOr`.
+</dd>
+</dl>
+
+One of the questions we think about when designing features related to a type is
+whether two types are equal.
+
+Types introduced by a `typedef` have names, but when we talk about the equality
+of two types, if either or both of those types are introduced by a typedef then
+we "unwrap" the type until we get to a type that is not introduced by a
+`typedef`. The fact that a `typedef` introduces a name does _not_ make the type
+a nominal type.
+
+Two nominal types are the same if they are introduced by the same unwrapped
+(non-`typedef`) declaration. Given the following class declarations
+```dart
+class Point {
+  final int x;
+  final int y;
+}
+
+class Pair {
+  final int x;
+  final int y;
+}
+```
+an instance of class `Point` (which has the type `Point`) and an instance of
+class `Pair`, have different types, despite the fact that both have the same
+number of fields, with the same types and names.
+
+Two structural types are the same if they have the same structure. Given the
+following record-typed variables
+```dart
+({int x, int y}) point = (x: 1, y: 2);
+({int x, int y}) pair = (x: 3, y: 4);
+```
+the record assigned to `point` and the record assigned to `pair` have the same
+type.
+
+Nominal types are only equal to other nominal types, structural types are only
+equal to other structural types, and each of the other types are only equal to
+themselves.
+
+The differences between the different kinds of types impacts many features,
+including occurrences and navigation.
+
+### Occurences
+
+The occurrences feature highlights all references to the same declaration as is
+being referenced at the insertion point.
+
+In the case of nominal types, we decided to highlight all references to a member
+of a nominal type. In the case of a field, all references to the getter and/or
+setter associated with the field are highlighted. We think that matches both the
+semantics of the language as well as the user's expectations for this feature.
+
+In the case of structural types, we decided that it would be misleading to
+highlight all references to a field of a record just because the field has the
+same name and the two record types happen to be equal. The equality of two
+record types doesn't imply that the two types represent the same thing. (See the
+example above about the `point` and `pair` variables.) The same is true of
+parameters in a function type.
+
+But what about cases where we know that it's the same field because it's the
+same variable, and hence the types are not just equal, but are more
+fundamentally the same? For example, consider
+```dart
+void f(({String latitude, String longitude}) coordinate) {
+  print(coordinate.latitude);
+  print(coordinate.latitude);
+}
+```
+
+The problem is that while human readers understand what we mean by "the same",
+the language spec doesn't define that concept. The type is the same, and hence
+equal to itself, but not any more equal than the types of `point` and `pair`
+above. And because there's no definition of the concept, there's no reliable way
+to confirm whether two identifiers should be considered to refer to the same
+declaration.
+
+And that's the root of the problem. Because this is a structural type there is
+no single declaration; there are potentially multiple declarations of the "same"
+field (or parameter). When there's an expression of the form `o.m`, where the
+type of `o` is a nominal type, the analyzer can match `m` to a single
+declaration. When the type of `o` is a structural type, the analyzer can't.
+
+Occurrences are discovered by finding references to a declaration, so in the
+case of a structural type the server doesn't have the information it needs. It
+_could_ do something beyond what the language specifies, and it kind of seems
+reasonable in this case, but it can't support every case where a user would know
+that the fields are the same.
+
+So, we're left with a decision: either we don't highlight occurrences of members
+of structural types, or we have a feature that is inconsistent, highlighting
+some cases and missing others (and possibly incorrectly highlighting places that
+a human reader would know to _not_ be the same).
+
+Combining the principle that the tools shouldn't misrepresent the language
+semantics and the principle that the tools should be self-consistent, we decided
+to not highlight occurrences of members of structural types.
+
+### Go to declaration
+
+The same reasoning that led us to not highlight occurrences of members of
+structural types led us to not support navigation from references to a member of
+a structural type and the declaration(s) of the member.
+
+## Elements without a declaration
+
+There are some elements that exist in the element model for which there is no
+explicit declaration. These cases are listed below.
+
+In all such cases the principle of language fidelity dictates that the tools
+shouldn't pretend that there is a declaration.
+
+For example, go-to-declaration isn't available for references to these elements.
+
+### Default constructors
+
+If a class does not have any explicit constructor declarations, then there is an
+implicit unnamed constructor, sometimes refered to as the "default" constructor.
+
+### Enums
+
+In addition to the possible default constructor, an enum declaration has an
+implicit static member named `values`.
+
+### Built-in types
+
+Several of the types don't have a declaration. These include types such as
+`void` and `dynamic`.
+
+## Multiple elements from a single declaration
+
+A single declaration can sometimes give rise to more than one element.
+That means that that a single name can refer to semantically distinct elements
+at different points in the code. The kinds of declarations for which this is
+true are given below.
+
+This has implications for features like occurences and navigation.
+
+### Fields, getters, and setters
+
+Every field declaration generates two or three separate elements:
+- the field itself,
+- the induced getter used to access the field, and
+- the induced setter used to assign to the field, as long as the field is
+  neither `final` nor `const`.
+
+A field cannot be overridden, but getters and setters _can_ be overridden,
+either by an explicit getter or setter or by the getter and setter induced by
+another field declaration.
+
+In most places, a reference to a field is actually a reference to either the
+getter or the setter. The only places where a field can actually be referenced
+are in the parameter list or initializer list of a constructor.
+
+### Declaring parameters
+
+A declaring parameter (found in a primary constructor) introduces a parameter,
+a field, and the getter and setter induced by that field.
+
+### Object patterns with a matching pattern variable
+
+An object pattern specifies a list of properties and patterns to be matched to
+each listed property. But if the pattern is a variable pattern and the name of
+the variable is the same as the name of the property, then the name of the
+property can be omitted. This leads to the name of the variable playing two
+roles and raising questions about how to reconcile them.
+
+## A single element from multiple declarations
+
+A single element can sometimes be composed from multiple declarations.
+
+This has implications for features like navigation.
+
+### Primary constructors
+
+The parameters for a primary constructor are declared in the header of the
+class (or enum), but the body of the constructor can be provided in the list of
+members.
+
+### Augmentations
+
+Augmentations allow some or all of any member declaration to be in a separate
+declaration, and that declaration can be in either the same part of the library
+or in a different part.
+
+### Pattern variables in switch statements
+
+When there are multiple cases that share a body, or when there's an or-pattern,
+if any of those cases (or operands) define a pattern variable, then every case
+(and operand) must define a pattern variable with the same name.
+
+There's only one variable with that name in the case body, but the declaration
+is split across all of the cases (or operands).
diff --git a/pkg/analysis_server/integration_test/analysis/error_test.dart b/pkg/analysis_server/integration_test/analysis/error_test.dart
index cf7b681..07ef738 100644
--- a/pkg/analysis_server/integration_test/analysis/error_test.dart
+++ b/pkg/analysis_server/integration_test/analysis/error_test.dart
@@ -118,6 +118,30 @@
     expect(currentAnalysisErrors[fileToDeletePath], isNotNull);
   }
 
+  Future<void> test_contextMessage() async {
+    var pathname = sourcePath('test.dart');
+    writeFile(pathname, '''
+void f() {
+  x = 0;
+  int x = 1;
+  x;
+}''');
+    await standardAnalysisSetup();
+
+    await analysisFinished;
+    expect(currentAnalysisErrors[pathname], isList);
+    var errors = existingErrorsForFile(pathname);
+    var error = errors.single;
+    expect(
+      error.message,
+      "Local variable 'x' can't be referenced before it is declared.",
+    );
+    expect(
+      error.contextMessages!.single.message,
+      "The declaration of 'x' is here.",
+    );
+  }
+
   Future<void> test_detect_simple_error() async {
     var pathname = sourcePath('test.dart');
     writeFile(pathname, '''
diff --git a/pkg/analysis_server/integration_test/lsp/abstract_lsp_over_legacy.dart b/pkg/analysis_server/integration_test/lsp/abstract_lsp_over_legacy.dart
index b704f27..1c4386c 100644
--- a/pkg/analysis_server/integration_test/lsp/abstract_lsp_over_legacy.dart
+++ b/pkg/analysis_server/integration_test/lsp/abstract_lsp_over_legacy.dart
@@ -22,7 +22,6 @@
         ClientCapabilitiesHelperMixin,
         LspRequestHelpersMixin,
         LspReverseRequestHelpersMixin,
-        LspNotificationHelpersMixin,
         LspEditHelpersMixin,
         LspVerifyEditHelpersMixin {
   late final testFile = sourcePath('lib/main.dart');
@@ -37,7 +36,6 @@
   final _overlayContent = <String, String>{};
 
   /// A stream of LSP [NotificationMessage]s from the server.
-  @override
   Stream<NotificationMessage> get notificationsFromServer =>
       onLspNotification.map(
         (params) => NotificationMessage.fromJson(
@@ -50,7 +48,7 @@
 
   @override
   Stream<RequestMessage> get requestsFromServer => serverToClientRequests
-      .where((request) => request.method == LSP_REQUEST_HANDLE)
+      .where((request) => request.method == lspRequestHandle)
       .map((request) {
         var params = LspHandleParams.fromRequest(
           request,
diff --git a/pkg/analysis_server/integration_test/lsp_server/integration_tests.dart b/pkg/analysis_server/integration_test/lsp_server/integration_tests.dart
index 0fc0ebc..2d121ae 100644
--- a/pkg/analysis_server/integration_test/lsp_server/integration_tests.dart
+++ b/pkg/analysis_server/integration_test/lsp_server/integration_tests.dart
@@ -26,7 +26,6 @@
         ClientCapabilitiesHelperMixin,
         LspRequestHelpersMixin,
         LspReverseRequestHelpersMixin,
-        LspNotificationHelpersMixin,
         LspEditHelpersMixin,
         LspVerifyEditHelpersMixin,
         LspAnalysisServerTestMixin {
diff --git a/pkg/analysis_server/integration_test/server/message_scheduler_test.dart b/pkg/analysis_server/integration_test/server/message_scheduler_test.dart
index d36cc38..21d84a3 100644
--- a/pkg/analysis_server/integration_test/server/message_scheduler_test.dart
+++ b/pkg/analysis_server/integration_test/server/message_scheduler_test.dart
@@ -63,8 +63,8 @@
 Incoming LegacyMessage: legacy:analysis.setAnalysisRoots
 Entering process messages loop
   Start LegacyMessage: legacy:analysis.setAnalysisRoots
-  Complete LegacyMessage: legacy:analysis.setAnalysisRoots
 Exit process messages loop
+  Complete LegacyMessage: legacy:analysis.setAnalysisRoots
 ''');
   }
 
@@ -244,16 +244,16 @@
     await initialAnalysis;
     await pumpEventQueue(times: 5000);
     _assertLogContents(testView!, r'''
-Incoming RequestMessage: lsp:initialize
+Incoming RequestMessage: initialize: 0
 Entering process messages loop
-  Start LspMessage: lsp:initialize
-  Complete LspMessage: lsp:initialize
+  Start LspMessage: initialize: 0
 Exit process messages loop
-Incoming NotificationMessage: lsp:initialized
+  Complete LspMessage: initialize: 0
+Incoming NotificationMessage: initialized
 Entering process messages loop
-  Start LspMessage: lsp:initialized
-  Complete LspMessage: lsp:initialized
+  Start LspMessage: initialized
 Exit process messages loop
+  Complete LspMessage: initialized
 ''');
   }
 
@@ -330,54 +330,54 @@
     await Future.wait(futures);
 
     _assertLogContents(testView!, r'''
-Incoming RequestMessage: lsp:initialize
+Incoming RequestMessage: initialize: 0
 Entering process messages loop
-  Start LspMessage: lsp:initialize
-  Complete LspMessage: lsp:initialize
+  Start LspMessage: initialize: 0
 Exit process messages loop
-Incoming NotificationMessage: lsp:initialized
+  Complete LspMessage: initialize: 0
+Incoming NotificationMessage: initialized
 Entering process messages loop
-  Start LspMessage: lsp:initialized
-  Complete LspMessage: lsp:initialized
+  Start LspMessage: initialized
 Exit process messages loop
-Incoming RequestMessage: lsp:textDocument/hover
-Incoming RequestMessage: lsp:textDocument/hover
+  Complete LspMessage: initialized
+Incoming RequestMessage: textDocument/hover: 1
+Incoming RequestMessage: textDocument/hover: 2
 Entering process messages loop
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
+  Start LspMessage: textDocument/hover: 1
+  Start LspMessage: textDocument/hover: 2
 Exit process messages loop
+  Complete LspMessage: textDocument/hover: 1
+  Complete LspMessage: textDocument/hover: 2
 Pause requested - there are now 1 pauses
-Incoming RequestMessage: lsp:textDocument/hover
-Incoming RequestMessage: lsp:textDocument/hover
+Incoming RequestMessage: textDocument/hover: 3
+Incoming RequestMessage: textDocument/hover: 4
 Entering process messages loop
 Exit process messages loop
 Pause requested - there are now 2 pauses
-Incoming RequestMessage: lsp:textDocument/hover
-Incoming RequestMessage: lsp:textDocument/hover
+Incoming RequestMessage: textDocument/hover: 5
+Incoming RequestMessage: textDocument/hover: 6
 Entering process messages loop
 Exit process messages loop
 Resume requested - there are now 1 pauses
-Incoming RequestMessage: lsp:textDocument/hover
-Incoming RequestMessage: lsp:textDocument/hover
+Incoming RequestMessage: textDocument/hover: 7
+Incoming RequestMessage: textDocument/hover: 8
 Entering process messages loop
 Exit process messages loop
 Resume requested - there are now 0 pauses
 Entering process messages loop
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
-  Start LspMessage: lsp:textDocument/hover
-  Complete LspMessage: lsp:textDocument/hover
+  Start LspMessage: textDocument/hover: 3
+  Start LspMessage: textDocument/hover: 4
+  Start LspMessage: textDocument/hover: 5
+  Start LspMessage: textDocument/hover: 6
+  Start LspMessage: textDocument/hover: 7
+  Start LspMessage: textDocument/hover: 8
 Exit process messages loop
+  Complete LspMessage: textDocument/hover: 3
+  Complete LspMessage: textDocument/hover: 4
+  Complete LspMessage: textDocument/hover: 5
+  Complete LspMessage: textDocument/hover: 6
+  Complete LspMessage: textDocument/hover: 7
+  Complete LspMessage: textDocument/hover: 8
 ''');
   }
 
diff --git a/pkg/analysis_server/integration_test/support/integration_tests.dart b/pkg/analysis_server/integration_test/support/integration_tests.dart
index 7c6c1b5..ec06565 100644
--- a/pkg/analysis_server/integration_test/support/integration_tests.dart
+++ b/pkg/analysis_server/integration_test/support/integration_tests.dart
@@ -7,7 +7,6 @@
 import 'dart:convert';
 import 'dart:io';
 
-import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/services/pub/pub_command.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
@@ -111,7 +110,7 @@
     with MockPackagesMixin, ConfigurationFilesMixin {
   /// Amount of time to give the server to respond to a shutdown request before
   /// forcibly terminating it.
-  static const Duration SHUTDOWN_TIMEOUT = Duration(seconds: 60);
+  static const Duration shutdownTimeout = Duration(seconds: 60);
 
   /// Connection to the analysis server.
   @override
@@ -288,7 +287,7 @@
     // doesn't exit, then forcibly terminate it.
     sendServerShutdown();
     return server.exitCode.timeout(
-      SHUTDOWN_TIMEOUT,
+      shutdownTimeout,
       onTimeout: () {
         // The integer value of the exit code isn't used, but we have to return
         // an integer to keep the typing correct.
diff --git a/pkg/analysis_server/integration_test/support/protocol_matchers.dart b/pkg/analysis_server/integration_test/support/protocol_matchers.dart
index a56c7c7..0e97cae 100644
--- a/pkg/analysis_server/integration_test/support/protocol_matchers.dart
+++ b/pkg/analysis_server/integration_test/support/protocol_matchers.dart
@@ -404,6 +404,7 @@
 ///       "returnType": optional String
 ///       "typeParameters": optional String
 ///       "aliasedType": optional String
+///       "extendedType": optional String
 ///     }
 final Matcher isElement = LazyMatcher(
   () => MatchesJsonObject(
@@ -415,6 +416,7 @@
       'returnType': isString,
       'typeParameters': isString,
       'aliasedType': isString,
+      'extendedType': isString,
     },
   ),
 );
diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
index f5cfaa9..7f37573 100644
--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+++ b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
@@ -19,12 +19,13 @@
   var aliasedType = getAliasedTypeString(element);
   var elementParameters = getParametersString(element);
   var elementReturnType = getReturnTypeString(element);
+  var extendedType = getExtendedTypeString(element);
   return Element(
     kind,
     name,
     Element.makeFlags(
       isPrivate: element.isPrivate,
-      isDeprecated: element.metadata.hasDeprecated,
+      isDeprecated: element.isDeprecatedWithKind('use'),
       isAbstract: _isAbstract(element),
       isConst: _isConst(element),
       isFinal: _isFinal(element),
@@ -35,6 +36,7 @@
     aliasedType: aliasedType,
     parameters: elementParameters,
     returnType: elementReturnType,
+    extendedType: extendedType,
   );
 }
 
@@ -136,7 +138,7 @@
     path.basename(fragment.source.fullName),
     Element.makeFlags(
       isPrivate: fragment.isPrivate,
-      isDeprecated: fragment.library.metadata.hasDeprecated,
+      isDeprecated: fragment.library.isDeprecatedWithKind('use'),
     ),
     location: newLocation_fromFragment(fragment),
   );
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index 075a895..f8ff84e 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -6,348 +6,334 @@
 // To regenerate the file, use the script
 // "pkg/analysis_server/tool/spec/generate_files".
 
-const String PROTOCOL_VERSION = '1.40.0';
+const String PROTOCOL_VERSION = '1.40.1';
 
-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS = 'analysis.closingLabels';
-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_LABELS = 'labels';
-const String ANALYSIS_NOTIFICATION_ERRORS = 'analysis.errors';
-const String ANALYSIS_NOTIFICATION_ERRORS_ERRORS = 'errors';
-const String ANALYSIS_NOTIFICATION_ERRORS_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS = 'analysis.flushResults';
-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS_FILES = 'files';
-const String ANALYSIS_NOTIFICATION_FOLDING = 'analysis.folding';
-const String ANALYSIS_NOTIFICATION_FOLDING_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_FOLDING_REGIONS = 'regions';
-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS = 'analysis.highlights';
-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_REGIONS = 'regions';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED = 'analysis.implemented';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_CLASSES = 'classes';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_MEMBERS = 'members';
-const String ANALYSIS_NOTIFICATION_INVALIDATE = 'analysis.invalidate';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_DELTA = 'delta';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_LENGTH = 'length';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_OFFSET = 'offset';
-const String ANALYSIS_NOTIFICATION_NAVIGATION = 'analysis.navigation';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILES = 'files';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_REGIONS = 'regions';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_TARGETS = 'targets';
-const String ANALYSIS_NOTIFICATION_OCCURRENCES = 'analysis.occurrences';
-const String ANALYSIS_NOTIFICATION_OCCURRENCES_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_OCCURRENCES_OCCURRENCES = 'occurrences';
-const String ANALYSIS_NOTIFICATION_OUTLINE = 'analysis.outline';
-const String ANALYSIS_NOTIFICATION_OUTLINE_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_OUTLINE_KIND = 'kind';
-const String ANALYSIS_NOTIFICATION_OUTLINE_LIBRARY_NAME = 'libraryName';
-const String ANALYSIS_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
-const String ANALYSIS_NOTIFICATION_OVERRIDES = 'analysis.overrides';
-const String ANALYSIS_NOTIFICATION_OVERRIDES_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_OVERRIDES_OVERRIDES = 'overrides';
-const String ANALYSIS_REQUEST_GET_ERRORS = 'analysis.getErrors';
-const String ANALYSIS_REQUEST_GET_ERRORS_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_HOVER = 'analysis.getHover';
-const String ANALYSIS_REQUEST_GET_HOVER_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_HOVER_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS =
+const String analysisNotificationAnalyzedFiles = 'analysis.analyzedFiles';
+const String analysisNotificationAnalyzedFilesDirectories = 'directories';
+const String analysisNotificationClosingLabels = 'analysis.closingLabels';
+const String analysisNotificationClosingLabelsFile = 'file';
+const String analysisNotificationClosingLabelsLabels = 'labels';
+const String analysisNotificationErrors = 'analysis.errors';
+const String analysisNotificationErrorsErrors = 'errors';
+const String analysisNotificationErrorsFile = 'file';
+const String analysisNotificationFlushResults = 'analysis.flushResults';
+const String analysisNotificationFlushResultsFiles = 'files';
+const String analysisNotificationFolding = 'analysis.folding';
+const String analysisNotificationFoldingFile = 'file';
+const String analysisNotificationFoldingRegions = 'regions';
+const String analysisNotificationHighlights = 'analysis.highlights';
+const String analysisNotificationHighlightsFile = 'file';
+const String analysisNotificationHighlightsRegions = 'regions';
+const String analysisNotificationImplemented = 'analysis.implemented';
+const String analysisNotificationImplementedClasses = 'classes';
+const String analysisNotificationImplementedFile = 'file';
+const String analysisNotificationImplementedMembers = 'members';
+const String analysisNotificationInvalidate = 'analysis.invalidate';
+const String analysisNotificationInvalidateDelta = 'delta';
+const String analysisNotificationInvalidateFile = 'file';
+const String analysisNotificationInvalidateLength = 'length';
+const String analysisNotificationInvalidateOffset = 'offset';
+const String analysisNotificationNavigation = 'analysis.navigation';
+const String analysisNotificationNavigationFile = 'file';
+const String analysisNotificationNavigationFiles = 'files';
+const String analysisNotificationNavigationRegions = 'regions';
+const String analysisNotificationNavigationTargets = 'targets';
+const String analysisNotificationOccurrences = 'analysis.occurrences';
+const String analysisNotificationOccurrencesFile = 'file';
+const String analysisNotificationOccurrencesOccurrences = 'occurrences';
+const String analysisNotificationOutline = 'analysis.outline';
+const String analysisNotificationOutlineFile = 'file';
+const String analysisNotificationOutlineKind = 'kind';
+const String analysisNotificationOutlineLibraryName = 'libraryName';
+const String analysisNotificationOutlineOutline = 'outline';
+const String analysisNotificationOverrides = 'analysis.overrides';
+const String analysisNotificationOverridesFile = 'file';
+const String analysisNotificationOverridesOverrides = 'overrides';
+const String analysisRequestGetErrors = 'analysis.getErrors';
+const String analysisRequestGetErrorsFile = 'file';
+const String analysisRequestGetHover = 'analysis.getHover';
+const String analysisRequestGetHoverFile = 'file';
+const String analysisRequestGetHoverOffset = 'offset';
+const String analysisRequestGetImportedElements =
     'analysis.getImportedElements';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_LENGTH = 'length';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES =
+const String analysisRequestGetImportedElementsFile = 'file';
+const String analysisRequestGetImportedElementsLength = 'length';
+const String analysisRequestGetImportedElementsOffset = 'offset';
+const String analysisRequestGetLibraryDependencies =
     'analysis.getLibraryDependencies';
-const String ANALYSIS_REQUEST_GET_NAVIGATION = 'analysis.getNavigation';
-const String ANALYSIS_REQUEST_GET_NAVIGATION_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_NAVIGATION_LENGTH = 'length';
-const String ANALYSIS_REQUEST_GET_NAVIGATION_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES =
+const String analysisRequestGetNavigation = 'analysis.getNavigation';
+const String analysisRequestGetNavigationFile = 'file';
+const String analysisRequestGetNavigationLength = 'length';
+const String analysisRequestGetNavigationOffset = 'offset';
+const String analysisRequestGetReachableSources =
     'analysis.getReachableSources';
-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_SIGNATURE = 'analysis.getSignature';
-const String ANALYSIS_REQUEST_GET_SIGNATURE_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_SIGNATURE_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_REANALYZE = 'analysis.reanalyze';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS = 'analysis.setAnalysisRoots';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED = 'excluded';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED = 'included';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_PACKAGE_ROOTS = 'packageRoots';
-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS =
+const String analysisRequestGetReachableSourcesFile = 'file';
+const String analysisRequestGetSignature = 'analysis.getSignature';
+const String analysisRequestGetSignatureFile = 'file';
+const String analysisRequestGetSignatureOffset = 'offset';
+const String analysisRequestReanalyze = 'analysis.reanalyze';
+const String analysisRequestSetAnalysisRoots = 'analysis.setAnalysisRoots';
+const String analysisRequestSetAnalysisRootsExcluded = 'excluded';
+const String analysisRequestSetAnalysisRootsIncluded = 'included';
+const String analysisRequestSetAnalysisRootsPackageRoots = 'packageRoots';
+const String analysisRequestSetGeneralSubscriptions =
     'analysis.setGeneralSubscriptions';
-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS_SUBSCRIPTIONS =
+const String analysisRequestSetGeneralSubscriptionsSubscriptions =
     'subscriptions';
-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES = 'analysis.setPriorityFiles';
-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES = 'files';
-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS = 'analysis.setSubscriptions';
-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
-const String ANALYSIS_REQUEST_UPDATE_CONTENT = 'analysis.updateContent';
-const String ANALYSIS_REQUEST_UPDATE_CONTENT_FILES = 'files';
-const String ANALYSIS_REQUEST_UPDATE_OPTIONS = 'analysis.updateOptions';
-const String ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS = 'options';
-const String ANALYSIS_RESPONSE_GET_ERRORS_ERRORS = 'errors';
-const String ANALYSIS_RESPONSE_GET_HOVER_HOVERS = 'hovers';
-const String ANALYSIS_RESPONSE_GET_IMPORTED_ELEMENTS_ELEMENTS = 'elements';
-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_LIBRARIES = 'libraries';
-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_PACKAGE_MAP =
-    'packageMap';
-const String ANALYSIS_RESPONSE_GET_NAVIGATION_FILES = 'files';
-const String ANALYSIS_RESPONSE_GET_NAVIGATION_REGIONS = 'regions';
-const String ANALYSIS_RESPONSE_GET_NAVIGATION_TARGETS = 'targets';
-const String ANALYSIS_RESPONSE_GET_REACHABLE_SOURCES_SOURCES = 'sources';
-const String ANALYSIS_RESPONSE_GET_SIGNATURE_DARTDOC = 'dartdoc';
-const String ANALYSIS_RESPONSE_GET_SIGNATURE_NAME = 'name';
-const String ANALYSIS_RESPONSE_GET_SIGNATURE_PARAMETERS = 'parameters';
-const String ANALYTICS_REQUEST_ENABLE = 'analytics.enable';
-const String ANALYTICS_REQUEST_ENABLE_VALUE = 'value';
-const String ANALYTICS_REQUEST_IS_ENABLED = 'analytics.isEnabled';
-const String ANALYTICS_REQUEST_SEND_EVENT = 'analytics.sendEvent';
-const String ANALYTICS_REQUEST_SEND_EVENT_ACTION = 'action';
-const String ANALYTICS_REQUEST_SEND_TIMING = 'analytics.sendTiming';
-const String ANALYTICS_REQUEST_SEND_TIMING_EVENT = 'event';
-const String ANALYTICS_REQUEST_SEND_TIMING_MILLIS = 'millis';
-const String ANALYTICS_RESPONSE_IS_ENABLED_ENABLED = 'enabled';
-const String COMPLETION_NOTIFICATION_EXISTING_IMPORTS =
+const String analysisRequestSetPriorityFiles = 'analysis.setPriorityFiles';
+const String analysisRequestSetPriorityFilesFiles = 'files';
+const String analysisRequestSetSubscriptions = 'analysis.setSubscriptions';
+const String analysisRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String analysisRequestUpdateContent = 'analysis.updateContent';
+const String analysisRequestUpdateContentFiles = 'files';
+const String analysisRequestUpdateOptions = 'analysis.updateOptions';
+const String analysisRequestUpdateOptionsOptions = 'options';
+const String analysisResponseGetErrorsErrors = 'errors';
+const String analysisResponseGetHoverHovers = 'hovers';
+const String analysisResponseGetImportedElementsElements = 'elements';
+const String analysisResponseGetLibraryDependenciesLibraries = 'libraries';
+const String analysisResponseGetLibraryDependenciesPackageMap = 'packageMap';
+const String analysisResponseGetNavigationFiles = 'files';
+const String analysisResponseGetNavigationRegions = 'regions';
+const String analysisResponseGetNavigationTargets = 'targets';
+const String analysisResponseGetReachableSourcesSources = 'sources';
+const String analysisResponseGetSignatureDartdoc = 'dartdoc';
+const String analysisResponseGetSignatureName = 'name';
+const String analysisResponseGetSignatureParameters = 'parameters';
+const String analyticsRequestEnable = 'analytics.enable';
+const String analyticsRequestEnableValue = 'value';
+const String analyticsRequestIsEnabled = 'analytics.isEnabled';
+const String analyticsRequestSendEvent = 'analytics.sendEvent';
+const String analyticsRequestSendEventAction = 'action';
+const String analyticsRequestSendTiming = 'analytics.sendTiming';
+const String analyticsRequestSendTimingEvent = 'event';
+const String analyticsRequestSendTimingMillis = 'millis';
+const String analyticsResponseIsEnabledEnabled = 'enabled';
+const String completionNotificationExistingImports =
     'completion.existingImports';
-const String COMPLETION_NOTIFICATION_EXISTING_IMPORTS_FILE = 'file';
-const String COMPLETION_NOTIFICATION_EXISTING_IMPORTS_IMPORTS = 'imports';
-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';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_INVOCATION_COUNT =
-    'invocationCount';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_MAX_RESULTS = 'maxResults';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_OFFSET = 'offset';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_TIMEOUT = 'timeout';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2 =
+const String completionNotificationExistingImportsFile = 'file';
+const String completionNotificationExistingImportsImports = 'imports';
+const String completionRequestGetSuggestionDetails2 =
     'completion.getSuggestionDetails2';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_COMPLETION =
-    'completion';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_FILE = 'file';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_LIBRARY_URI =
-    'libraryUri';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_OFFSET = 'offset';
-const String COMPLETION_REQUEST_REGISTER_LIBRARY_PATHS =
+const String completionRequestGetSuggestionDetails2Completion = 'completion';
+const String completionRequestGetSuggestionDetails2File = 'file';
+const String completionRequestGetSuggestionDetails2LibraryUri = 'libraryUri';
+const String completionRequestGetSuggestionDetails2Offset = 'offset';
+const String completionRequestGetSuggestions2 = 'completion.getSuggestions2';
+const String completionRequestGetSuggestions2CompletionCaseMatchingMode =
+    'completionCaseMatchingMode';
+const String completionRequestGetSuggestions2CompletionMode = 'completionMode';
+const String completionRequestGetSuggestions2File = 'file';
+const String completionRequestGetSuggestions2InvocationCount =
+    'invocationCount';
+const String completionRequestGetSuggestions2MaxResults = 'maxResults';
+const String completionRequestGetSuggestions2Offset = 'offset';
+const String completionRequestGetSuggestions2Timeout = 'timeout';
+const String completionRequestRegisterLibraryPaths =
     'completion.registerLibraryPaths';
-const String COMPLETION_REQUEST_REGISTER_LIBRARY_PATHS_PATHS = 'paths';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_IS_INCOMPLETE =
-    'isIncomplete';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_LENGTH =
+const String completionRequestRegisterLibraryPathsPaths = 'paths';
+const String completionResponseGetSuggestionDetails2Change = 'change';
+const String completionResponseGetSuggestionDetails2Completion = 'completion';
+const String completionResponseGetSuggestions2IsIncomplete = 'isIncomplete';
+const String completionResponseGetSuggestions2ReplacementLength =
     'replacementLength';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_OFFSET =
+const String completionResponseGetSuggestions2ReplacementOffset =
     'replacementOffset';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_SUGGESTIONS = 'suggestions';
-const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_CHANGE = 'change';
-const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_COMPLETION =
-    'completion';
-const String DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS = 'diagnostic.getDiagnostics';
-const String DIAGNOSTIC_REQUEST_GET_SERVER_PORT = 'diagnostic.getServerPort';
-const String DIAGNOSTIC_RESPONSE_GET_DIAGNOSTICS_CONTEXTS = 'contexts';
-const String DIAGNOSTIC_RESPONSE_GET_SERVER_PORT_PORT = 'port';
-const String EDIT_REQUEST_BULK_FIXES = 'edit.bulkFixes';
-const String EDIT_REQUEST_BULK_FIXES_CODES = 'codes';
-const String EDIT_REQUEST_BULK_FIXES_INCLUDED = 'included';
-const String EDIT_REQUEST_BULK_FIXES_IN_TEST_MODE = 'inTestMode';
-const String EDIT_REQUEST_BULK_FIXES_UPDATE_PUBSPEC = 'updatePubspec';
-const String EDIT_REQUEST_FORMAT = 'edit.format';
-const String EDIT_REQUEST_FORMAT_FILE = 'file';
-const String EDIT_REQUEST_FORMAT_IF_ENABLED = 'edit.formatIfEnabled';
-const String EDIT_REQUEST_FORMAT_IF_ENABLED_DIRECTORIES = 'directories';
-const String EDIT_REQUEST_FORMAT_LINE_LENGTH = 'lineLength';
-const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH = 'selectionLength';
-const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET = 'selectionOffset';
-const String EDIT_REQUEST_GET_ASSISTS = 'edit.getAssists';
-const String EDIT_REQUEST_GET_ASSISTS_FILE = 'file';
-const String EDIT_REQUEST_GET_ASSISTS_LENGTH = 'length';
-const String EDIT_REQUEST_GET_ASSISTS_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS =
+const String completionResponseGetSuggestions2Suggestions = 'suggestions';
+const String diagnosticRequestGetDiagnostics = 'diagnostic.getDiagnostics';
+const String diagnosticRequestGetServerPort = 'diagnostic.getServerPort';
+const String diagnosticResponseGetDiagnosticsContexts = 'contexts';
+const String diagnosticResponseGetServerPortPort = 'port';
+const String editRequestBulkFixes = 'edit.bulkFixes';
+const String editRequestBulkFixesCodes = 'codes';
+const String editRequestBulkFixesInTestMode = 'inTestMode';
+const String editRequestBulkFixesIncluded = 'included';
+const String editRequestBulkFixesUpdatePubspec = 'updatePubspec';
+const String editRequestFormat = 'edit.format';
+const String editRequestFormatFile = 'file';
+const String editRequestFormatIfEnabled = 'edit.formatIfEnabled';
+const String editRequestFormatIfEnabledDirectories = 'directories';
+const String editRequestFormatLineLength = 'lineLength';
+const String editRequestFormatSelectionLength = 'selectionLength';
+const String editRequestFormatSelectionOffset = 'selectionOffset';
+const String editRequestGetAssists = 'edit.getAssists';
+const String editRequestGetAssistsFile = 'file';
+const String editRequestGetAssistsLength = 'length';
+const String editRequestGetAssistsOffset = 'offset';
+const String editRequestGetAvailableRefactorings =
     'edit.getAvailableRefactorings';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_FILE = 'file';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_LENGTH = 'length';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_FIXES = 'edit.getFixes';
-const String EDIT_REQUEST_GET_FIXES_FILE = 'file';
-const String EDIT_REQUEST_GET_FIXES_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION = 'edit.getPostfixCompletion';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_FILE = 'file';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_KEY = 'key';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_REFACTORING = 'edit.getRefactoring';
-const String EDIT_REQUEST_GET_REFACTORING_FILE = 'file';
-const String EDIT_REQUEST_GET_REFACTORING_KIND = 'kind';
-const String EDIT_REQUEST_GET_REFACTORING_LENGTH = 'length';
-const String EDIT_REQUEST_GET_REFACTORING_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_REFACTORING_OPTIONS = 'options';
-const String EDIT_REQUEST_GET_REFACTORING_VALIDATE_ONLY = 'validateOnly';
-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION =
-    'edit.getStatementCompletion';
-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_FILE = 'file';
-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_OFFSET = 'offset';
-const String EDIT_REQUEST_IMPORT_ELEMENTS = 'edit.importElements';
-const String EDIT_REQUEST_IMPORT_ELEMENTS_ELEMENTS = 'elements';
-const String EDIT_REQUEST_IMPORT_ELEMENTS_FILE = 'file';
-const String EDIT_REQUEST_IMPORT_ELEMENTS_OFFSET = 'offset';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE =
+const String editRequestGetAvailableRefactoringsFile = 'file';
+const String editRequestGetAvailableRefactoringsLength = 'length';
+const String editRequestGetAvailableRefactoringsOffset = 'offset';
+const String editRequestGetFixes = 'edit.getFixes';
+const String editRequestGetFixesFile = 'file';
+const String editRequestGetFixesOffset = 'offset';
+const String editRequestGetPostfixCompletion = 'edit.getPostfixCompletion';
+const String editRequestGetPostfixCompletionFile = 'file';
+const String editRequestGetPostfixCompletionKey = 'key';
+const String editRequestGetPostfixCompletionOffset = 'offset';
+const String editRequestGetRefactoring = 'edit.getRefactoring';
+const String editRequestGetRefactoringFile = 'file';
+const String editRequestGetRefactoringKind = 'kind';
+const String editRequestGetRefactoringLength = 'length';
+const String editRequestGetRefactoringOffset = 'offset';
+const String editRequestGetRefactoringOptions = 'options';
+const String editRequestGetRefactoringValidateOnly = 'validateOnly';
+const String editRequestGetStatementCompletion = 'edit.getStatementCompletion';
+const String editRequestGetStatementCompletionFile = 'file';
+const String editRequestGetStatementCompletionOffset = 'offset';
+const String editRequestImportElements = 'edit.importElements';
+const String editRequestImportElementsElements = 'elements';
+const String editRequestImportElementsFile = 'file';
+const String editRequestImportElementsOffset = 'offset';
+const String editRequestIsPostfixCompletionApplicable =
     'edit.isPostfixCompletionApplicable';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_FILE = 'file';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_KEY = 'key';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_OFFSET = 'offset';
-const String EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES =
+const String editRequestIsPostfixCompletionApplicableFile = 'file';
+const String editRequestIsPostfixCompletionApplicableKey = 'key';
+const String editRequestIsPostfixCompletionApplicableOffset = 'offset';
+const String editRequestListPostfixCompletionTemplates =
     'edit.listPostfixCompletionTemplates';
-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES = 'edit.organizeDirectives';
-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES_FILE = 'file';
-const String EDIT_REQUEST_SORT_MEMBERS = 'edit.sortMembers';
-const String EDIT_REQUEST_SORT_MEMBERS_FILE = 'file';
-const String EDIT_RESPONSE_BULK_FIXES_DETAILS = 'details';
-const String EDIT_RESPONSE_BULK_FIXES_EDITS = 'edits';
-const String EDIT_RESPONSE_BULK_FIXES_MESSAGE = 'message';
-const String EDIT_RESPONSE_FORMAT_EDITS = 'edits';
-const String EDIT_RESPONSE_FORMAT_IF_ENABLED_EDITS = 'edits';
-const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH = 'selectionLength';
-const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET = 'selectionOffset';
-const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS = 'assists';
-const String EDIT_RESPONSE_GET_AVAILABLE_REFACTORINGS_KINDS = 'kinds';
-const String EDIT_RESPONSE_GET_FIXES_FIXES = 'fixes';
-const String EDIT_RESPONSE_GET_POSTFIX_COMPLETION_CHANGE = 'change';
-const String EDIT_RESPONSE_GET_REFACTORING_CHANGE = 'change';
-const String EDIT_RESPONSE_GET_REFACTORING_FEEDBACK = 'feedback';
-const String EDIT_RESPONSE_GET_REFACTORING_FINAL_PROBLEMS = 'finalProblems';
-const String EDIT_RESPONSE_GET_REFACTORING_INITIAL_PROBLEMS = 'initialProblems';
-const String EDIT_RESPONSE_GET_REFACTORING_OPTIONS_PROBLEMS = 'optionsProblems';
-const String EDIT_RESPONSE_GET_REFACTORING_POTENTIAL_EDITS = 'potentialEdits';
-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_CHANGE = 'change';
-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_WHITESPACE_ONLY =
+const String editRequestOrganizeDirectives = 'edit.organizeDirectives';
+const String editRequestOrganizeDirectivesFile = 'file';
+const String editRequestSortMembers = 'edit.sortMembers';
+const String editRequestSortMembersFile = 'file';
+const String editResponseBulkFixesDetails = 'details';
+const String editResponseBulkFixesEdits = 'edits';
+const String editResponseBulkFixesMessage = 'message';
+const String editResponseFormatEdits = 'edits';
+const String editResponseFormatIfEnabledEdits = 'edits';
+const String editResponseFormatSelectionLength = 'selectionLength';
+const String editResponseFormatSelectionOffset = 'selectionOffset';
+const String editResponseGetAssistsAssists = 'assists';
+const String editResponseGetAvailableRefactoringsKinds = 'kinds';
+const String editResponseGetFixesFixes = 'fixes';
+const String editResponseGetPostfixCompletionChange = 'change';
+const String editResponseGetRefactoringChange = 'change';
+const String editResponseGetRefactoringFeedback = 'feedback';
+const String editResponseGetRefactoringFinalProblems = 'finalProblems';
+const String editResponseGetRefactoringInitialProblems = 'initialProblems';
+const String editResponseGetRefactoringOptionsProblems = 'optionsProblems';
+const String editResponseGetRefactoringPotentialEdits = 'potentialEdits';
+const String editResponseGetStatementCompletionChange = 'change';
+const String editResponseGetStatementCompletionWhitespaceOnly =
     'whitespaceOnly';
-const String EDIT_RESPONSE_IMPORT_ELEMENTS_EDIT = 'edit';
-const String EDIT_RESPONSE_IS_POSTFIX_COMPLETION_APPLICABLE_VALUE = 'value';
-const String EDIT_RESPONSE_LIST_POSTFIX_COMPLETION_TEMPLATES_TEMPLATES =
-    'templates';
-const String EDIT_RESPONSE_ORGANIZE_DIRECTIVES_EDIT = 'edit';
-const String EDIT_RESPONSE_SORT_MEMBERS_EDIT = 'edit';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA = 'execution.launchData';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_FILE = 'file';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_KIND = 'kind';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_REFERENCED_FILES =
-    'referencedFiles';
-const String EXECUTION_REQUEST_CREATE_CONTEXT = 'execution.createContext';
-const String EXECUTION_REQUEST_CREATE_CONTEXT_CONTEXT_ROOT = 'contextRoot';
-const String EXECUTION_REQUEST_DELETE_CONTEXT = 'execution.deleteContext';
-const String EXECUTION_REQUEST_DELETE_CONTEXT_ID = 'id';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS = 'execution.getSuggestions';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_CODE = 'code';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_CONTEXT_FILE = 'contextFile';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_CONTEXT_OFFSET = 'contextOffset';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_EXPRESSIONS = 'expressions';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_OFFSET = 'offset';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_VARIABLES = 'variables';
-const String EXECUTION_REQUEST_MAP_URI = 'execution.mapUri';
-const String EXECUTION_REQUEST_MAP_URI_FILE = 'file';
-const String EXECUTION_REQUEST_MAP_URI_ID = 'id';
-const String EXECUTION_REQUEST_MAP_URI_URI = 'uri';
-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS = 'execution.setSubscriptions';
-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =
-    'subscriptions';
-const String EXECUTION_RESPONSE_CREATE_CONTEXT_ID = 'id';
-const String EXECUTION_RESPONSE_GET_SUGGESTIONS_EXPRESSIONS = 'expressions';
-const String EXECUTION_RESPONSE_GET_SUGGESTIONS_SUGGESTIONS = 'suggestions';
-const String EXECUTION_RESPONSE_MAP_URI_FILE = 'file';
-const String EXECUTION_RESPONSE_MAP_URI_URI = 'uri';
-const String FLUTTER_NOTIFICATION_OUTLINE = 'flutter.outline';
-const String FLUTTER_NOTIFICATION_OUTLINE_FILE = 'file';
-const String FLUTTER_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
-const String FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION =
+const String editResponseImportElementsEdit = 'edit';
+const String editResponseIsPostfixCompletionApplicableValue = 'value';
+const String editResponseListPostfixCompletionTemplatesTemplates = 'templates';
+const String editResponseOrganizeDirectivesEdit = 'edit';
+const String editResponseSortMembersEdit = 'edit';
+const String executionNotificationLaunchData = 'execution.launchData';
+const String executionNotificationLaunchDataFile = 'file';
+const String executionNotificationLaunchDataKind = 'kind';
+const String executionNotificationLaunchDataReferencedFiles = 'referencedFiles';
+const String executionRequestCreateContext = 'execution.createContext';
+const String executionRequestCreateContextContextRoot = 'contextRoot';
+const String executionRequestDeleteContext = 'execution.deleteContext';
+const String executionRequestDeleteContextId = 'id';
+const String executionRequestGetSuggestions = 'execution.getSuggestions';
+const String executionRequestGetSuggestionsCode = 'code';
+const String executionRequestGetSuggestionsContextFile = 'contextFile';
+const String executionRequestGetSuggestionsContextOffset = 'contextOffset';
+const String executionRequestGetSuggestionsExpressions = 'expressions';
+const String executionRequestGetSuggestionsOffset = 'offset';
+const String executionRequestGetSuggestionsVariables = 'variables';
+const String executionRequestMapUri = 'execution.mapUri';
+const String executionRequestMapUriFile = 'file';
+const String executionRequestMapUriId = 'id';
+const String executionRequestMapUriUri = 'uri';
+const String executionRequestSetSubscriptions = 'execution.setSubscriptions';
+const String executionRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String executionResponseCreateContextId = 'id';
+const String executionResponseGetSuggestionsExpressions = 'expressions';
+const String executionResponseGetSuggestionsSuggestions = 'suggestions';
+const String executionResponseMapUriFile = 'file';
+const String executionResponseMapUriUri = 'uri';
+const String flutterNotificationOutline = 'flutter.outline';
+const String flutterNotificationOutlineFile = 'file';
+const String flutterNotificationOutlineOutline = 'outline';
+const String flutterRequestGetWidgetDescription =
     'flutter.getWidgetDescription';
-const String FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION_FILE = 'file';
-const String FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION_OFFSET = 'offset';
-const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS = 'flutter.setSubscriptions';
-const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
-const String FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE =
+const String flutterRequestGetWidgetDescriptionFile = 'file';
+const String flutterRequestGetWidgetDescriptionOffset = 'offset';
+const String flutterRequestSetSubscriptions = 'flutter.setSubscriptions';
+const String flutterRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String flutterRequestSetWidgetPropertyValue =
     'flutter.setWidgetPropertyValue';
-const String FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE_ID = 'id';
-const String FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE_VALUE = 'value';
-const String FLUTTER_RESPONSE_GET_WIDGET_DESCRIPTION_PROPERTIES = 'properties';
-const String FLUTTER_RESPONSE_SET_WIDGET_PROPERTY_VALUE_CHANGE = 'change';
-const String LSP_NOTIFICATION_NOTIFICATION = 'lsp.notification';
-const String LSP_NOTIFICATION_NOTIFICATION_LSP_NOTIFICATION = 'lspNotification';
-const String LSP_REQUEST_HANDLE = 'lsp.handle';
-const String LSP_REQUEST_HANDLE_LSP_MESSAGE = 'lspMessage';
-const String LSP_RESPONSE_HANDLE_LSP_RESPONSE = 'lspResponse';
-const String SEARCH_NOTIFICATION_RESULTS = 'search.results';
-const String SEARCH_NOTIFICATION_RESULTS_ID = 'id';
-const String SEARCH_NOTIFICATION_RESULTS_IS_LAST = 'isLast';
-const String SEARCH_NOTIFICATION_RESULTS_RESULTS = 'results';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES =
+const String flutterRequestSetWidgetPropertyValueId = 'id';
+const String flutterRequestSetWidgetPropertyValueValue = 'value';
+const String flutterResponseGetWidgetDescriptionProperties = 'properties';
+const String flutterResponseSetWidgetPropertyValueChange = 'change';
+const String lspNotificationNotification = 'lsp.notification';
+const String lspNotificationNotificationLspNotification = 'lspNotification';
+const String lspRequestHandle = 'lsp.handle';
+const String lspRequestHandleLspMessage = 'lspMessage';
+const String lspResponseHandleLspResponse = 'lspResponse';
+const String searchNotificationResults = 'search.results';
+const String searchNotificationResultsId = 'id';
+const String searchNotificationResultsIsLast = 'isLast';
+const String searchNotificationResultsResults = 'results';
+const String searchRequestFindElementReferences =
     'search.findElementReferences';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_FILE = 'file';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_INCLUDE_POTENTIAL =
+const String searchRequestFindElementReferencesFile = 'file';
+const String searchRequestFindElementReferencesIncludePotential =
     'includePotential';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_OFFSET = 'offset';
-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS =
+const String searchRequestFindElementReferencesOffset = 'offset';
+const String searchRequestFindMemberDeclarations =
     'search.findMemberDeclarations';
-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS_NAME = 'name';
-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES =
-    'search.findMemberReferences';
-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES_NAME = 'name';
-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS =
+const String searchRequestFindMemberDeclarationsName = 'name';
+const String searchRequestFindMemberReferences = 'search.findMemberReferences';
+const String searchRequestFindMemberReferencesName = 'name';
+const String searchRequestFindTopLevelDeclarations =
     'search.findTopLevelDeclarations';
-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS_PATTERN = 'pattern';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS =
+const String searchRequestFindTopLevelDeclarationsPattern = 'pattern';
+const String searchRequestGetElementDeclarations =
     'search.getElementDeclarations';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_FILE = 'file';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_MAX_RESULTS = 'maxResults';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_PATTERN = 'pattern';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY = 'search.getTypeHierarchy';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_FILE = 'file';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_OFFSET = 'offset';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_SUPER_ONLY = 'superOnly';
-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ELEMENT = 'element';
-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ID = 'id';
-const String SEARCH_RESPONSE_FIND_MEMBER_DECLARATIONS_ID = 'id';
-const String SEARCH_RESPONSE_FIND_MEMBER_REFERENCES_ID = 'id';
-const String SEARCH_RESPONSE_FIND_TOP_LEVEL_DECLARATIONS_ID = 'id';
-const String SEARCH_RESPONSE_GET_ELEMENT_DECLARATIONS_DECLARATIONS =
-    'declarations';
-const String SEARCH_RESPONSE_GET_ELEMENT_DECLARATIONS_FILES = 'files';
-const String SEARCH_RESPONSE_GET_TYPE_HIERARCHY_HIERARCHY_ITEMS =
-    'hierarchyItems';
-const String SERVER_NOTIFICATION_CONNECTED = 'server.connected';
-const String SERVER_NOTIFICATION_CONNECTED_PID = 'pid';
-const String SERVER_NOTIFICATION_CONNECTED_VERSION = 'version';
-const String SERVER_NOTIFICATION_ERROR = 'server.error';
-const String SERVER_NOTIFICATION_ERROR_IS_FATAL = 'isFatal';
-const String SERVER_NOTIFICATION_ERROR_MESSAGE = 'message';
-const String SERVER_NOTIFICATION_ERROR_STACK_TRACE = 'stackTrace';
-const String SERVER_NOTIFICATION_LOG = 'server.log';
-const String SERVER_NOTIFICATION_LOG_ENTRY = 'entry';
-const String SERVER_NOTIFICATION_PLUGIN_ERROR = 'server.pluginError';
-const String SERVER_NOTIFICATION_PLUGIN_ERROR_MESSAGE = 'message';
-const String SERVER_NOTIFICATION_STATUS = 'server.status';
-const String SERVER_NOTIFICATION_STATUS_ANALYSIS = 'analysis';
-const String SERVER_NOTIFICATION_STATUS_PUB = 'pub';
-const String SERVER_REQUEST_CANCEL_REQUEST = 'server.cancelRequest';
-const String SERVER_REQUEST_CANCEL_REQUEST_ID = 'id';
-const String SERVER_REQUEST_GET_VERSION = 'server.getVersion';
-const String SERVER_REQUEST_OPEN_URL_REQUEST = 'server.openUrlRequest';
-const String SERVER_REQUEST_OPEN_URL_REQUEST_URL = 'url';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES =
+const String searchRequestGetElementDeclarationsFile = 'file';
+const String searchRequestGetElementDeclarationsMaxResults = 'maxResults';
+const String searchRequestGetElementDeclarationsPattern = 'pattern';
+const String searchRequestGetTypeHierarchy = 'search.getTypeHierarchy';
+const String searchRequestGetTypeHierarchyFile = 'file';
+const String searchRequestGetTypeHierarchyOffset = 'offset';
+const String searchRequestGetTypeHierarchySuperOnly = 'superOnly';
+const String searchResponseFindElementReferencesElement = 'element';
+const String searchResponseFindElementReferencesId = 'id';
+const String searchResponseFindMemberDeclarationsId = 'id';
+const String searchResponseFindMemberReferencesId = 'id';
+const String searchResponseFindTopLevelDeclarationsId = 'id';
+const String searchResponseGetElementDeclarationsDeclarations = 'declarations';
+const String searchResponseGetElementDeclarationsFiles = 'files';
+const String searchResponseGetTypeHierarchyHierarchyItems = 'hierarchyItems';
+const String serverNotificationConnected = 'server.connected';
+const String serverNotificationConnectedPid = 'pid';
+const String serverNotificationConnectedVersion = 'version';
+const String serverNotificationError = 'server.error';
+const String serverNotificationErrorIsFatal = 'isFatal';
+const String serverNotificationErrorMessage = 'message';
+const String serverNotificationErrorStackTrace = 'stackTrace';
+const String serverNotificationLog = 'server.log';
+const String serverNotificationLogEntry = 'entry';
+const String serverNotificationPluginError = 'server.pluginError';
+const String serverNotificationPluginErrorMessage = 'message';
+const String serverNotificationStatus = 'server.status';
+const String serverNotificationStatusAnalysis = 'analysis';
+const String serverNotificationStatusPub = 'pub';
+const String serverRequestCancelRequest = 'server.cancelRequest';
+const String serverRequestCancelRequestId = 'id';
+const String serverRequestGetVersion = 'server.getVersion';
+const String serverRequestOpenUrlRequest = 'server.openUrlRequest';
+const String serverRequestOpenUrlRequestUrl = 'url';
+const String serverRequestSetClientCapabilities =
     'server.setClientCapabilities';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES_LSP_CAPABILITIES =
+const String serverRequestSetClientCapabilitiesLspCapabilities =
     'lspCapabilities';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES_REQUESTS = 'requests';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES_SUPPORTS_URIS =
-    'supportsUris';
-const String SERVER_REQUEST_SET_SUBSCRIPTIONS = 'server.setSubscriptions';
-const String SERVER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST = 'server.showMessageRequest';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST_ACTIONS = 'actions';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST_MESSAGE = 'message';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST_TYPE = 'type';
-const String SERVER_REQUEST_SHUTDOWN = 'server.shutdown';
-const String SERVER_RESPONSE_GET_VERSION_VERSION = 'version';
-const String SERVER_RESPONSE_SHOW_MESSAGE_REQUEST_ACTION = 'action';
+const String serverRequestSetClientCapabilitiesRequests = 'requests';
+const String serverRequestSetClientCapabilitiesSupportsUris = 'supportsUris';
+const String serverRequestSetSubscriptions = 'server.setSubscriptions';
+const String serverRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String serverRequestShowMessageRequest = 'server.showMessageRequest';
+const String serverRequestShowMessageRequestActions = 'actions';
+const String serverRequestShowMessageRequestMessage = 'message';
+const String serverRequestShowMessageRequestType = 'type';
+const String serverRequestShutdown = 'server.shutdown';
+const String serverResponseGetVersionVersion = 'version';
+const String serverResponseShowMessageRequestAction = 'action';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 1e1b96b..61afc71 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -97,16 +97,9 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisAnalyzedFilesParams) {
-      return listEqual(
-        directories,
-        other.directories,
-        (String a, String b) => a == b,
-      );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisAnalyzedFilesParams &&
+      listEqual(directories, other.directories, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(directories);
@@ -218,17 +211,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisClosingLabelsParams) {
-      return file == other.file &&
-          listEqual(
-            labels,
-            other.labels,
-            (ClosingLabel a, ClosingLabel b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisClosingLabelsParams &&
+      file == other.file &&
+      listEqual(
+        labels,
+        other.labels,
+        (ClosingLabel a, ClosingLabel b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(labels));
@@ -311,17 +301,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisErrorFixes) {
-      return error == other.error &&
-          listEqual(
-            fixes,
-            other.fixes,
-            (SourceChange a, SourceChange b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisErrorFixes &&
+      error == other.error &&
+      listEqual(fixes, other.fixes, (SourceChange a, SourceChange b) => a == b);
 
   @override
   int get hashCode => Object.hash(error, Object.hashAll(fixes));
@@ -423,17 +406,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisErrorsParams) {
-      return file == other.file &&
-          listEqual(
-            errors,
-            other.errors,
-            (AnalysisError a, AnalysisError b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisErrorsParams &&
+      file == other.file &&
+      listEqual(
+        errors,
+        other.errors,
+        (AnalysisError a, AnalysisError b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(errors));
@@ -523,12 +503,9 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisFlushResultsParams) {
-      return listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisFlushResultsParams &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(files);
@@ -630,17 +607,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisFoldingParams) {
-      return file == other.file &&
-          listEqual(
-            regions,
-            other.regions,
-            (FoldingRegion a, FoldingRegion b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisFoldingParams &&
+      file == other.file &&
+      listEqual(
+        regions,
+        other.regions,
+        (FoldingRegion a, FoldingRegion b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(regions));
@@ -720,12 +694,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetErrorsParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetErrorsParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -811,16 +781,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetErrorsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisGetErrorsResult &&
+      listEqual(
         errors,
         other.errors,
         (AnalysisError a, AnalysisError b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(errors);
@@ -911,12 +878,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetHoverParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetHoverParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, offset);
@@ -1006,16 +971,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetHoverResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisGetHoverResult &&
+      listEqual(
         hovers,
         other.hovers,
         (HoverInformation a, HoverInformation b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(hovers);
@@ -1121,14 +1083,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetImportedElementsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetImportedElementsParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(file, offset, length);
@@ -1219,16 +1178,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetImportedElementsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisGetImportedElementsResult &&
+      listEqual(
         elements,
         other.elements,
         (ImportedElements a, ImportedElements b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(elements);
@@ -1385,27 +1341,19 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetLibraryDependenciesResult) {
-      return listEqual(
-            libraries,
-            other.libraries,
-            (String a, String b) => a == b,
-          ) &&
-          mapEqual(
-            packageMap,
-            other.packageMap,
-            (Map<String, List<String>> a, Map<String, List<String>> b) =>
-                mapEqual(
-                  a,
-                  b,
-                  (List<String> a, List<String> b) =>
-                      listEqual(a, b, (String a, String b) => a == b),
-                ),
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetLibraryDependenciesResult &&
+      listEqual(libraries, other.libraries, (String a, String b) => a == b) &&
+      mapEqual(
+        packageMap,
+        other.packageMap,
+        (Map<String, List<String>> a, Map<String, List<String>> b) => mapEqual(
+          a,
+          b,
+          (List<String> a, List<String> b) =>
+              listEqual(a, b, (String a, String b) => a == b),
+        ),
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -1516,14 +1464,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetNavigationParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetNavigationParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(file, offset, length);
@@ -1664,22 +1609,19 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetNavigationResult) {
-      return listEqual(files, other.files, (String a, String b) => a == b) &&
-          listEqual(
-            targets,
-            other.targets,
-            (NavigationTarget a, NavigationTarget b) => a == b,
-          ) &&
-          listEqual(
-            regions,
-            other.regions,
-            (NavigationRegion a, NavigationRegion b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetNavigationResult &&
+      listEqual(files, other.files, (String a, String b) => a == b) &&
+      listEqual(
+        targets,
+        other.targets,
+        (NavigationTarget a, NavigationTarget b) => a == b,
+      ) &&
+      listEqual(
+        regions,
+        other.regions,
+        (NavigationRegion a, NavigationRegion b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -1767,12 +1709,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetReachableSourcesParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetReachableSourcesParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -1859,17 +1797,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetReachableSourcesResult) {
-      return mapEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisGetReachableSourcesResult &&
+      mapEqual(
         sources,
         other.sources,
         (List<String> a, List<String> b) =>
             listEqual(a, b, (String a, String b) => a == b),
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll([...sources.keys, ...sources.values]);
@@ -1964,12 +1899,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetSignatureParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetSignatureParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, offset);
@@ -2090,18 +2023,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetSignatureResult) {
-      return name == other.name &&
-          listEqual(
-            parameters,
-            other.parameters,
-            (ParameterInfo a, ParameterInfo b) => a == b,
-          ) &&
-          dartdoc == other.dartdoc;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetSignatureResult &&
+      name == other.name &&
+      listEqual(
+        parameters,
+        other.parameters,
+        (ParameterInfo a, ParameterInfo b) => a == b,
+      ) &&
+      dartdoc == other.dartdoc;
 
   @override
   int get hashCode => Object.hash(name, Object.hashAll(parameters), dartdoc);
@@ -2207,17 +2137,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisHighlightsParams) {
-      return file == other.file &&
-          listEqual(
-            regions,
-            other.regions,
-            (HighlightRegion a, HighlightRegion b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisHighlightsParams &&
+      file == other.file &&
+      listEqual(
+        regions,
+        other.regions,
+        (HighlightRegion a, HighlightRegion b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(regions));
@@ -2344,22 +2271,19 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisImplementedParams) {
-      return file == other.file &&
-          listEqual(
-            classes,
-            other.classes,
-            (ImplementedClass a, ImplementedClass b) => a == b,
-          ) &&
-          listEqual(
-            members,
-            other.members,
-            (ImplementedMember a, ImplementedMember b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisImplementedParams &&
+      file == other.file &&
+      listEqual(
+        classes,
+        other.classes,
+        (ImplementedClass a, ImplementedClass b) => a == b,
+      ) &&
+      listEqual(
+        members,
+        other.members,
+        (ImplementedMember a, ImplementedMember b) => a == b,
+      );
 
   @override
   int get hashCode =>
@@ -2472,15 +2396,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisInvalidateParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length &&
-          delta == other.delta;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisInvalidateParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length &&
+      delta == other.delta;
 
   @override
   int get hashCode => Object.hash(file, offset, length, delta);
@@ -2639,23 +2560,20 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisNavigationParams) {
-      return file == other.file &&
-          listEqual(
-            regions,
-            other.regions,
-            (NavigationRegion a, NavigationRegion b) => a == b,
-          ) &&
-          listEqual(
-            targets,
-            other.targets,
-            (NavigationTarget a, NavigationTarget b) => a == b,
-          ) &&
-          listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisNavigationParams &&
+      file == other.file &&
+      listEqual(
+        regions,
+        other.regions,
+        (NavigationRegion a, NavigationRegion b) => a == b,
+      ) &&
+      listEqual(
+        targets,
+        other.targets,
+        (NavigationTarget a, NavigationTarget b) => a == b,
+      ) &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -2762,17 +2680,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOccurrencesParams) {
-      return file == other.file &&
-          listEqual(
-            occurrences,
-            other.occurrences,
-            (Occurrences a, Occurrences b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOccurrencesParams &&
+      file == other.file &&
+      listEqual(
+        occurrences,
+        other.occurrences,
+        (Occurrences a, Occurrences b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(occurrences));
@@ -2948,18 +2863,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOptions) {
-      return enableAsync == other.enableAsync &&
-          enableDeferredLoading == other.enableDeferredLoading &&
-          enableEnums == other.enableEnums &&
-          enableNullAwareOperators == other.enableNullAwareOperators &&
-          generateDart2jsHints == other.generateDart2jsHints &&
-          generateHints == other.generateHints &&
-          generateLints == other.generateLints;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOptions &&
+      enableAsync == other.enableAsync &&
+      enableDeferredLoading == other.enableDeferredLoading &&
+      enableEnums == other.enableEnums &&
+      enableNullAwareOperators == other.enableNullAwareOperators &&
+      generateDart2jsHints == other.generateDart2jsHints &&
+      generateHints == other.generateHints &&
+      generateLints == other.generateLints;
 
   @override
   int get hashCode => Object.hash(
@@ -3100,15 +3012,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOutlineParams) {
-      return file == other.file &&
-          kind == other.kind &&
-          libraryName == other.libraryName &&
-          outline == other.outline;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOutlineParams &&
+      file == other.file &&
+      kind == other.kind &&
+      libraryName == other.libraryName &&
+      outline == other.outline;
 
   @override
   int get hashCode => Object.hash(file, kind, libraryName, outline);
@@ -3210,17 +3119,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOverridesParams) {
-      return file == other.file &&
-          listEqual(
-            overrides,
-            other.overrides,
-            (Override a, Override b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOverridesParams &&
+      file == other.file &&
+      listEqual(overrides, other.overrides, (Override a, Override b) => a == b);
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(overrides));
@@ -3494,22 +3396,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetAnalysisRootsParams) {
-      return listEqual(
-            included,
-            other.included,
-            (String a, String b) => a == b,
-          ) &&
-          listEqual(excluded, other.excluded, (String a, String b) => a == b) &&
-          mapEqual(
-            packageRoots,
-            other.packageRoots,
-            (String a, String b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisSetAnalysisRootsParams &&
+      listEqual(included, other.included, (String a, String b) => a == b) &&
+      listEqual(excluded, other.excluded, (String a, String b) => a == b) &&
+      mapEqual(
+        packageRoots,
+        other.packageRoots,
+        (String a, String b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -3631,16 +3526,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetGeneralSubscriptionsParams) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisSetGeneralSubscriptionsParams &&
+      listEqual(
         subscriptions,
         other.subscriptions,
         (GeneralAnalysisService a, GeneralAnalysisService b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(subscriptions);
@@ -3758,12 +3650,9 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetPriorityFilesParams) {
-      return listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisSetPriorityFilesParams &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(files);
@@ -3898,17 +3787,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetSubscriptionsParams) {
-      return mapEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisSetSubscriptionsParams &&
+      mapEqual(
         subscriptions,
         other.subscriptions,
         (List<String> a, List<String> b) =>
             listEqual(a, b, (String a, String b) => a == b),
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode =>
@@ -4004,13 +3890,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisStatus) {
-      return isAnalyzing == other.isAnalyzing &&
-          analysisTarget == other.analysisTarget;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisStatus &&
+      isAnalyzing == other.isAnalyzing &&
+      analysisTarget == other.analysisTarget;
 
   @override
   int get hashCode => Object.hash(isAnalyzing, analysisTarget);
@@ -4128,12 +4011,9 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisUpdateContentParams) {
-      return mapEqual(files, other.files, (Object a, Object b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisUpdateContentParams &&
+      mapEqual(files, other.files, (Object a, Object b) => a == b);
 
   @override
   int get hashCode => Object.hashAll([...files.keys, ...files.values]);
@@ -4198,12 +4078,7 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisUpdateContentResult) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is AnalysisUpdateContentResult;
 
   @override
   int get hashCode => 0;
@@ -4288,12 +4163,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisUpdateOptionsParams) {
-      return options == other.options;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisUpdateOptionsParams && options == other.options;
 
   @override
   int get hashCode => options.hashCode;
@@ -4393,12 +4264,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsEnableParams) {
-      return value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsEnableParams && value == other.value;
 
   @override
   int get hashCode => value.hashCode;
@@ -4518,12 +4385,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsIsEnabledResult) {
-      return enabled == other.enabled;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsIsEnabledResult && enabled == other.enabled;
 
   @override
   int get hashCode => enabled.hashCode;
@@ -4599,12 +4462,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsSendEventParams) {
-      return action == other.action;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsSendEventParams && action == other.action;
 
   @override
   int get hashCode => action.hashCode;
@@ -4715,12 +4574,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsSendTimingParams) {
-      return event == other.event && millis == other.millis;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsSendTimingParams &&
+      event == other.event &&
+      millis == other.millis;
 
   @override
   int get hashCode => Object.hash(event, millis);
@@ -4825,17 +4682,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is BulkFix) {
-      return path == other.path &&
-          listEqual(
-            fixes,
-            other.fixes,
-            (BulkFixDetail a, BulkFixDetail b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is BulkFix &&
+      path == other.path &&
+      listEqual(
+        fixes,
+        other.fixes,
+        (BulkFixDetail a, BulkFixDetail b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(path, Object.hashAll(fixes));
@@ -4902,12 +4756,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is BulkFixDetail) {
-      return code == other.code && occurrences == other.occurrences;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is BulkFixDetail &&
+      code == other.code &&
+      occurrences == other.occurrences;
 
   @override
   int get hashCode => Object.hash(code, occurrences);
@@ -4982,14 +4834,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ClosingLabel) {
-      return offset == other.offset &&
-          length == other.length &&
-          label == other.label;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ClosingLabel &&
+      offset == other.offset &&
+      length == other.length &&
+      label == other.label;
 
   @override
   int get hashCode => Object.hash(offset, length, label);
@@ -5128,12 +4977,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionExistingImportsParams) {
-      return file == other.file && imports == other.imports;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionExistingImportsParams &&
+      file == other.file &&
+      imports == other.imports;
 
   @override
   int get hashCode => Object.hash(file, imports);
@@ -5270,15 +5117,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestionDetails2Params) {
-      return file == other.file &&
-          offset == other.offset &&
-          completion == other.completion &&
-          libraryUri == other.libraryUri;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestionDetails2Params &&
+      file == other.file &&
+      offset == other.offset &&
+      completion == other.completion &&
+      libraryUri == other.libraryUri;
 
   @override
   int get hashCode => Object.hash(file, offset, completion, libraryUri);
@@ -5377,12 +5221,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestionDetails2Result) {
-      return completion == other.completion && change == other.change;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestionDetails2Result &&
+      completion == other.completion &&
+      change == other.change;
 
   @override
   int get hashCode => Object.hash(completion, change);
@@ -5578,18 +5420,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestions2Params) {
-      return file == other.file &&
-          offset == other.offset &&
-          maxResults == other.maxResults &&
-          completionCaseMatchingMode == other.completionCaseMatchingMode &&
-          completionMode == other.completionMode &&
-          invocationCount == other.invocationCount &&
-          timeout == other.timeout;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestions2Params &&
+      file == other.file &&
+      offset == other.offset &&
+      maxResults == other.maxResults &&
+      completionCaseMatchingMode == other.completionCaseMatchingMode &&
+      completionMode == other.completionMode &&
+      invocationCount == other.invocationCount &&
+      timeout == other.timeout;
 
   @override
   int get hashCode => Object.hash(
@@ -5755,19 +5594,16 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestions2Result) {
-      return replacementOffset == other.replacementOffset &&
-          replacementLength == other.replacementLength &&
-          listEqual(
-            suggestions,
-            other.suggestions,
-            (CompletionSuggestion a, CompletionSuggestion b) => a == b,
-          ) &&
-          isIncomplete == other.isIncomplete;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestions2Result &&
+      replacementOffset == other.replacementOffset &&
+      replacementLength == other.replacementLength &&
+      listEqual(
+        suggestions,
+        other.suggestions,
+        (CompletionSuggestion a, CompletionSuggestion b) => a == b,
+      ) &&
+      isIncomplete == other.isIncomplete;
 
   @override
   int get hashCode => Object.hash(
@@ -5907,16 +5743,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionRegisterLibraryPathsParams) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is CompletionRegisterLibraryPathsParams &&
+      listEqual(
         paths,
         other.paths,
         (LibraryPathSet a, LibraryPathSet b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(paths);
@@ -6062,20 +5895,17 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ContextData) {
-      return name == other.name &&
-          explicitFileCount == other.explicitFileCount &&
-          implicitFileCount == other.implicitFileCount &&
-          workItemQueueLength == other.workItemQueueLength &&
-          listEqual(
-            cacheEntryExceptions,
-            other.cacheEntryExceptions,
-            (String a, String b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ContextData &&
+      name == other.name &&
+      explicitFileCount == other.explicitFileCount &&
+      implicitFileCount == other.implicitFileCount &&
+      workItemQueueLength == other.workItemQueueLength &&
+      listEqual(
+        cacheEntryExceptions,
+        other.cacheEntryExceptions,
+        (String a, String b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -6243,16 +6073,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is DiagnosticGetDiagnosticsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is DiagnosticGetDiagnosticsResult &&
+      listEqual(
         contexts,
         other.contexts,
         (ContextData a, ContextData b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(contexts);
@@ -6352,12 +6179,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is DiagnosticGetServerPortResult) {
-      return port == other.port;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is DiagnosticGetServerPortResult && port == other.port;
 
   @override
   int get hashCode => port.hashCode;
@@ -6520,19 +6343,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditBulkFixesParams) {
-      return listEqual(
-            included,
-            other.included,
-            (String a, String b) => a == b,
-          ) &&
-          inTestMode == other.inTestMode &&
-          updatePubspec == other.updatePubspec &&
-          listEqual(codes, other.codes, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditBulkFixesParams &&
+      listEqual(included, other.included, (String a, String b) => a == b) &&
+      inTestMode == other.inTestMode &&
+      updatePubspec == other.updatePubspec &&
+      listEqual(codes, other.codes, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -6662,18 +6478,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditBulkFixesResult) {
-      return message == other.message &&
-          listEqual(
-            edits,
-            other.edits,
-            (SourceFileEdit a, SourceFileEdit b) => a == b,
-          ) &&
-          listEqual(details, other.details, (BulkFix a, BulkFix b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditBulkFixesResult &&
+      message == other.message &&
+      listEqual(
+        edits,
+        other.edits,
+        (SourceFileEdit a, SourceFileEdit b) => a == b,
+      ) &&
+      listEqual(details, other.details, (BulkFix a, BulkFix b) => a == b);
 
   @override
   int get hashCode =>
@@ -6763,16 +6576,9 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatIfEnabledParams) {
-      return listEqual(
-        directories,
-        other.directories,
-        (String a, String b) => a == b,
-      );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditFormatIfEnabledParams &&
+      listEqual(directories, other.directories, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(directories);
@@ -6860,16 +6666,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatIfEnabledResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditFormatIfEnabledResult &&
+      listEqual(
         edits,
         other.edits,
         (SourceFileEdit a, SourceFileEdit b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(edits);
@@ -7004,15 +6807,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatParams) {
-      return file == other.file &&
-          selectionOffset == other.selectionOffset &&
-          selectionLength == other.selectionLength &&
-          lineLength == other.lineLength;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditFormatParams &&
+      file == other.file &&
+      selectionOffset == other.selectionOffset &&
+      selectionLength == other.selectionLength &&
+      lineLength == other.lineLength;
 
   @override
   int get hashCode =>
@@ -7128,18 +6928,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatResult) {
-      return listEqual(
-            edits,
-            other.edits,
-            (SourceEdit a, SourceEdit b) => a == b,
-          ) &&
-          selectionOffset == other.selectionOffset &&
-          selectionLength == other.selectionLength;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditFormatResult &&
+      listEqual(edits, other.edits, (SourceEdit a, SourceEdit b) => a == b) &&
+      selectionOffset == other.selectionOffset &&
+      selectionLength == other.selectionLength;
 
   @override
   int get hashCode =>
@@ -7242,14 +7035,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAssistsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetAssistsParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(file, offset, length);
@@ -7335,16 +7125,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAssistsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditGetAssistsResult &&
+      listEqual(
         assists,
         other.assists,
         (SourceChange a, SourceChange b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(assists);
@@ -7450,14 +7237,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAvailableRefactoringsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetAvailableRefactoringsParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(file, offset, length);
@@ -7547,16 +7331,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAvailableRefactoringsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditGetAvailableRefactoringsResult &&
+      listEqual(
         kinds,
         other.kinds,
         (RefactoringKind a, RefactoringKind b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(kinds);
@@ -7647,12 +7428,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetFixesParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetFixesParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, offset);
@@ -7738,16 +7517,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetFixesResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditGetFixesResult &&
+      listEqual(
         fixes,
         other.fixes,
         (AnalysisErrorFixes a, AnalysisErrorFixes b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(fixes);
@@ -7854,12 +7630,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetPostfixCompletionParams) {
-      return file == other.file && key == other.key && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetPostfixCompletionParams &&
+      file == other.file &&
+      key == other.key &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, key, offset);
@@ -7940,12 +7715,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetPostfixCompletionResult) {
-      return change == other.change;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetPostfixCompletionResult && change == other.change;
 
   @override
   int get hashCode => change.hashCode;
@@ -8118,17 +7889,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetRefactoringParams) {
-      return kind == other.kind &&
-          file == other.file &&
-          offset == other.offset &&
-          length == other.length &&
-          validateOnly == other.validateOnly &&
-          options == other.options;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetRefactoringParams &&
+      kind == other.kind &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length &&
+      validateOnly == other.validateOnly &&
+      options == other.options;
 
   @override
   int get hashCode =>
@@ -8350,33 +8118,30 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetRefactoringResult) {
-      return listEqual(
-            initialProblems,
-            other.initialProblems,
-            (RefactoringProblem a, RefactoringProblem b) => a == b,
-          ) &&
-          listEqual(
-            optionsProblems,
-            other.optionsProblems,
-            (RefactoringProblem a, RefactoringProblem b) => a == b,
-          ) &&
-          listEqual(
-            finalProblems,
-            other.finalProblems,
-            (RefactoringProblem a, RefactoringProblem b) => a == b,
-          ) &&
-          feedback == other.feedback &&
-          change == other.change &&
-          listEqual(
-            potentialEdits,
-            other.potentialEdits,
-            (String a, String b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetRefactoringResult &&
+      listEqual(
+        initialProblems,
+        other.initialProblems,
+        (RefactoringProblem a, RefactoringProblem b) => a == b,
+      ) &&
+      listEqual(
+        optionsProblems,
+        other.optionsProblems,
+        (RefactoringProblem a, RefactoringProblem b) => a == b,
+      ) &&
+      listEqual(
+        finalProblems,
+        other.finalProblems,
+        (RefactoringProblem a, RefactoringProblem b) => a == b,
+      ) &&
+      feedback == other.feedback &&
+      change == other.change &&
+      listEqual(
+        potentialEdits,
+        other.potentialEdits,
+        (String a, String b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -8478,12 +8243,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetStatementCompletionParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetStatementCompletionParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, offset);
@@ -8579,12 +8342,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetStatementCompletionResult) {
-      return change == other.change && whitespaceOnly == other.whitespaceOnly;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetStatementCompletionResult &&
+      change == other.change &&
+      whitespaceOnly == other.whitespaceOnly;
 
   @override
   int get hashCode => Object.hash(change, whitespaceOnly);
@@ -8704,18 +8465,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditImportElementsParams) {
-      return file == other.file &&
-          listEqual(
-            elements,
-            other.elements,
-            (ImportedElements a, ImportedElements b) => a == b,
-          ) &&
-          offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditImportElementsParams &&
+      file == other.file &&
+      listEqual(
+        elements,
+        other.elements,
+        (ImportedElements a, ImportedElements b) => a == b,
+      ) &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, Object.hashAll(elements), offset);
@@ -8798,12 +8556,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditImportElementsResult) {
-      return edit == other.edit;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditImportElementsResult && edit == other.edit;
 
   @override
   int get hashCode => edit.hashCode;
@@ -8910,12 +8664,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditIsPostfixCompletionApplicableParams) {
-      return file == other.file && key == other.key && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditIsPostfixCompletionApplicableParams &&
+      file == other.file &&
+      key == other.key &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, key, offset);
@@ -8991,12 +8744,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditIsPostfixCompletionApplicableResult) {
-      return value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditIsPostfixCompletionApplicableResult && value == other.value;
 
   @override
   int get hashCode => value.hashCode;
@@ -9111,16 +8860,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditListPostfixCompletionTemplatesResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditListPostfixCompletionTemplatesResult &&
+      listEqual(
         templates,
         other.templates,
         (PostfixTemplateDescriptor a, PostfixTemplateDescriptor b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(templates);
@@ -9204,12 +8950,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditOrganizeDirectivesParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditOrganizeDirectivesParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -9291,12 +9033,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditOrganizeDirectivesResult) {
-      return edit == other.edit;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditOrganizeDirectivesResult && edit == other.edit;
 
   @override
   int get hashCode => edit.hashCode;
@@ -9376,12 +9114,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditSortMembersParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditSortMembersParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -9459,12 +9193,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditSortMembersResult) {
-      return edit == other.edit;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditSortMembersResult && edit == other.edit;
 
   @override
   int get hashCode => edit.hashCode;
@@ -9683,22 +9413,19 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ElementDeclaration) {
-      return name == other.name &&
-          kind == other.kind &&
-          fileIndex == other.fileIndex &&
-          offset == other.offset &&
-          line == other.line &&
-          column == other.column &&
-          codeOffset == other.codeOffset &&
-          codeLength == other.codeLength &&
-          className == other.className &&
-          mixinName == other.mixinName &&
-          parameters == other.parameters;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ElementDeclaration &&
+      name == other.name &&
+      kind == other.kind &&
+      fileIndex == other.fileIndex &&
+      offset == other.offset &&
+      line == other.line &&
+      column == other.column &&
+      codeOffset == other.codeOffset &&
+      codeLength == other.codeLength &&
+      className == other.className &&
+      mixinName == other.mixinName &&
+      parameters == other.parameters;
 
   @override
   int get hashCode => Object.hash(
@@ -9782,12 +9509,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutableFile) {
-      return file == other.file && kind == other.kind;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutableFile && file == other.file && kind == other.kind;
 
   @override
   int get hashCode => Object.hash(file, kind);
@@ -9920,12 +9643,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionCreateContextParams) {
-      return contextRoot == other.contextRoot;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionCreateContextParams && contextRoot == other.contextRoot;
 
   @override
   int get hashCode => contextRoot.hashCode;
@@ -10001,12 +9720,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionCreateContextResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionCreateContextResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -10086,12 +9801,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionDeleteContextParams) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionDeleteContextParams && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -10321,27 +10032,23 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionGetSuggestionsParams) {
-      return code == other.code &&
-          offset == other.offset &&
-          contextFile == other.contextFile &&
-          contextOffset == other.contextOffset &&
-          listEqual(
-            variables,
-            other.variables,
-            (RuntimeCompletionVariable a, RuntimeCompletionVariable b) =>
-                a == b,
-          ) &&
-          listEqual(
-            expressions,
-            other.expressions,
-            (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
-                a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionGetSuggestionsParams &&
+      code == other.code &&
+      offset == other.offset &&
+      contextFile == other.contextFile &&
+      contextOffset == other.contextOffset &&
+      listEqual(
+        variables,
+        other.variables,
+        (RuntimeCompletionVariable a, RuntimeCompletionVariable b) => a == b,
+      ) &&
+      listEqual(
+        expressions,
+        other.expressions,
+        (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
+            a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -10479,22 +10186,19 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionGetSuggestionsResult) {
-      return listEqual(
-            suggestions,
-            other.suggestions,
-            (CompletionSuggestion a, CompletionSuggestion b) => a == b,
-          ) &&
-          listEqual(
-            expressions,
-            other.expressions,
-            (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
-                a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionGetSuggestionsResult &&
+      listEqual(
+        suggestions,
+        other.suggestions,
+        (CompletionSuggestion a, CompletionSuggestion b) => a == b,
+      ) &&
+      listEqual(
+        expressions,
+        other.expressions,
+        (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
+            a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -10623,18 +10327,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionLaunchDataParams) {
-      return file == other.file &&
-          kind == other.kind &&
-          listEqual(
-            referencedFiles,
-            other.referencedFiles,
-            (String a, String b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionLaunchDataParams &&
+      file == other.file &&
+      kind == other.kind &&
+      listEqual(
+        referencedFiles,
+        other.referencedFiles,
+        (String a, String b) => a == b,
+      );
 
   @override
   int get hashCode =>
@@ -10739,12 +10440,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionMapUriParams) {
-      return id == other.id && file == other.file && uri == other.uri;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionMapUriParams &&
+      id == other.id &&
+      file == other.file &&
+      uri == other.uri;
 
   @override
   int get hashCode => Object.hash(id, file, uri);
@@ -10835,12 +10535,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionMapUriResult) {
-      return file == other.file && uri == other.uri;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionMapUriResult && file == other.file && uri == other.uri;
 
   @override
   int get hashCode => Object.hash(file, uri);
@@ -10966,16 +10662,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionSetSubscriptionsParams) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is ExecutionSetSubscriptionsParams &&
+      listEqual(
         subscriptions,
         other.subscriptions,
         (ExecutionService a, ExecutionService b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(subscriptions);
@@ -11068,13 +10761,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExistingImport) {
-      return uri == other.uri &&
-          listEqual(elements, other.elements, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExistingImport &&
+      uri == other.uri &&
+      listEqual(elements, other.elements, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(uri, Object.hashAll(elements));
@@ -11158,17 +10848,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExistingImports) {
-      return elements == other.elements &&
-          listEqual(
-            imports,
-            other.imports,
-            (ExistingImport a, ExistingImport b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExistingImports &&
+      elements == other.elements &&
+      listEqual(
+        imports,
+        other.imports,
+        (ExistingImport a, ExistingImport b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(elements, Object.hashAll(imports));
@@ -11308,24 +10995,21 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractLocalVariableFeedback) {
-      return listEqual(
-            coveringExpressionOffsets,
-            other.coveringExpressionOffsets,
-            (int a, int b) => a == b,
-          ) &&
-          listEqual(
-            coveringExpressionLengths,
-            other.coveringExpressionLengths,
-            (int a, int b) => a == b,
-          ) &&
-          listEqual(names, other.names, (String a, String b) => a == b) &&
-          listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          listEqual(lengths, other.lengths, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractLocalVariableFeedback &&
+      listEqual(
+        coveringExpressionOffsets,
+        other.coveringExpressionOffsets,
+        (int a, int b) => a == b,
+      ) &&
+      listEqual(
+        coveringExpressionLengths,
+        other.coveringExpressionLengths,
+        (int a, int b) => a == b,
+      ) &&
+      listEqual(names, other.names, (String a, String b) => a == b) &&
+      listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
+      listEqual(lengths, other.lengths, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -11417,12 +11101,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractLocalVariableOptions) {
-      return name == other.name && extractAll == other.extractAll;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractLocalVariableOptions &&
+      name == other.name &&
+      extractAll == other.extractAll;
 
   @override
   int get hashCode => Object.hash(name, extractAll);
@@ -11609,24 +11291,20 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractMethodFeedback) {
-      return offset == other.offset &&
-          length == other.length &&
-          returnType == other.returnType &&
-          listEqual(names, other.names, (String a, String b) => a == b) &&
-          canCreateGetter == other.canCreateGetter &&
-          listEqual(
-            parameters,
-            other.parameters,
-            (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
-                a == b,
-          ) &&
-          listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          listEqual(lengths, other.lengths, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractMethodFeedback &&
+      offset == other.offset &&
+      length == other.length &&
+      returnType == other.returnType &&
+      listEqual(names, other.names, (String a, String b) => a == b) &&
+      canCreateGetter == other.canCreateGetter &&
+      listEqual(
+        parameters,
+        other.parameters,
+        (RefactoringMethodParameter a, RefactoringMethodParameter b) => a == b,
+      ) &&
+      listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
+      listEqual(lengths, other.lengths, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -11792,21 +11470,17 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractMethodOptions) {
-      return returnType == other.returnType &&
-          createGetter == other.createGetter &&
-          name == other.name &&
-          listEqual(
-            parameters,
-            other.parameters,
-            (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
-                a == b,
-          ) &&
-          extractAll == other.extractAll;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractMethodOptions &&
+      returnType == other.returnType &&
+      createGetter == other.createGetter &&
+      name == other.name &&
+      listEqual(
+        parameters,
+        other.parameters,
+        (RefactoringMethodParameter a, RefactoringMethodParameter b) => a == b,
+      ) &&
+      extractAll == other.extractAll;
 
   @override
   int get hashCode => Object.hash(
@@ -11853,12 +11527,7 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractWidgetFeedback) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is ExtractWidgetFeedback;
 
   @override
   int get hashCode => 0;
@@ -11923,12 +11592,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractWidgetOptions) {
-      return name == other.name;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractWidgetOptions && name == other.name;
 
   @override
   int get hashCode => name.hashCode;
@@ -12058,12 +11723,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterGetWidgetDescriptionParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterGetWidgetDescriptionParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(file, offset);
@@ -12156,16 +11819,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterGetWidgetDescriptionResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is FlutterGetWidgetDescriptionResult &&
+      listEqual(
         properties,
         other.properties,
         (FlutterWidgetProperty a, FlutterWidgetProperty b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(properties);
@@ -12437,31 +12097,28 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterOutline) {
-      return kind == other.kind &&
-          offset == other.offset &&
-          length == other.length &&
-          codeOffset == other.codeOffset &&
-          codeLength == other.codeLength &&
-          label == other.label &&
-          dartElement == other.dartElement &&
-          listEqual(
-            attributes,
-            other.attributes,
-            (FlutterOutlineAttribute a, FlutterOutlineAttribute b) => a == b,
-          ) &&
-          className == other.className &&
-          parentAssociationLabel == other.parentAssociationLabel &&
-          variableName == other.variableName &&
-          listEqual(
-            children,
-            other.children,
-            (FlutterOutline a, FlutterOutline b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterOutline &&
+      kind == other.kind &&
+      offset == other.offset &&
+      length == other.length &&
+      codeOffset == other.codeOffset &&
+      codeLength == other.codeLength &&
+      label == other.label &&
+      dartElement == other.dartElement &&
+      listEqual(
+        attributes,
+        other.attributes,
+        (FlutterOutlineAttribute a, FlutterOutlineAttribute b) => a == b,
+      ) &&
+      className == other.className &&
+      parentAssociationLabel == other.parentAssociationLabel &&
+      variableName == other.variableName &&
+      listEqual(
+        children,
+        other.children,
+        (FlutterOutline a, FlutterOutline b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -12644,18 +12301,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterOutlineAttribute) {
-      return name == other.name &&
-          label == other.label &&
-          literalValueBoolean == other.literalValueBoolean &&
-          literalValueInteger == other.literalValueInteger &&
-          literalValueString == other.literalValueString &&
-          nameLocation == other.nameLocation &&
-          valueLocation == other.valueLocation;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterOutlineAttribute &&
+      name == other.name &&
+      label == other.label &&
+      literalValueBoolean == other.literalValueBoolean &&
+      literalValueInteger == other.literalValueInteger &&
+      literalValueString == other.literalValueString &&
+      nameLocation == other.nameLocation &&
+      valueLocation == other.valueLocation;
 
   @override
   int get hashCode => Object.hash(
@@ -12811,12 +12465,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterOutlineParams) {
-      return file == other.file && outline == other.outline;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterOutlineParams &&
+      file == other.file &&
+      outline == other.outline;
 
   @override
   int get hashCode => Object.hash(file, outline);
@@ -12959,17 +12611,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterSetSubscriptionsParams) {
-      return mapEqual(
+  bool operator ==(Object other) =>
+      other is FlutterSetSubscriptionsParams &&
+      mapEqual(
         subscriptions,
         other.subscriptions,
         (List<String> a, List<String> b) =>
             listEqual(a, b, (String a, String b) => a == b),
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode =>
@@ -13103,12 +12752,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterSetWidgetPropertyValueParams) {
-      return id == other.id && value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterSetWidgetPropertyValueParams &&
+      id == other.id &&
+      value == other.value;
 
   @override
   int get hashCode => Object.hash(id, value);
@@ -13189,12 +12836,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterSetWidgetPropertyValueResult) {
-      return change == other.change;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterSetWidgetPropertyValueResult && change == other.change;
 
   @override
   int get hashCode => change.hashCode;
@@ -13410,24 +13053,21 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetProperty) {
-      return documentation == other.documentation &&
-          expression == other.expression &&
-          id == other.id &&
-          isRequired == other.isRequired &&
-          isSafeToUpdate == other.isSafeToUpdate &&
-          name == other.name &&
-          listEqual(
-            children,
-            other.children,
-            (FlutterWidgetProperty a, FlutterWidgetProperty b) => a == b,
-          ) &&
-          editor == other.editor &&
-          value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetProperty &&
+      documentation == other.documentation &&
+      expression == other.expression &&
+      id == other.id &&
+      isRequired == other.isRequired &&
+      isSafeToUpdate == other.isSafeToUpdate &&
+      name == other.name &&
+      listEqual(
+        children,
+        other.children,
+        (FlutterWidgetProperty a, FlutterWidgetProperty b) => a == b,
+      ) &&
+      editor == other.editor &&
+      value == other.value;
 
   @override
   int get hashCode => Object.hash(
@@ -13519,20 +13159,17 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetPropertyEditor) {
-      return kind == other.kind &&
-          listEqual(
-            enumItems,
-            other.enumItems,
-            (
-              FlutterWidgetPropertyValueEnumItem a,
-              FlutterWidgetPropertyValueEnumItem b,
-            ) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetPropertyEditor &&
+      kind == other.kind &&
+      listEqual(
+        enumItems,
+        other.enumItems,
+        (
+          FlutterWidgetPropertyValueEnumItem a,
+          FlutterWidgetPropertyValueEnumItem b,
+        ) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(kind, Object.hashAll(enumItems ?? []));
@@ -13736,17 +13373,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetPropertyValue) {
-      return boolValue == other.boolValue &&
-          doubleValue == other.doubleValue &&
-          intValue == other.intValue &&
-          stringValue == other.stringValue &&
-          enumValue == other.enumValue &&
-          expression == other.expression;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetPropertyValue &&
+      boolValue == other.boolValue &&
+      doubleValue == other.doubleValue &&
+      intValue == other.intValue &&
+      stringValue == other.stringValue &&
+      enumValue == other.enumValue &&
+      expression == other.expression;
 
   @override
   int get hashCode => Object.hash(
@@ -13867,15 +13501,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetPropertyValueEnumItem) {
-      return libraryUri == other.libraryUri &&
-          className == other.className &&
-          name == other.name &&
-          documentation == other.documentation;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetPropertyValueEnumItem &&
+      libraryUri == other.libraryUri &&
+      className == other.className &&
+      name == other.name &&
+      documentation == other.documentation;
 
   @override
   int get hashCode => Object.hash(libraryUri, className, name, documentation);
@@ -14166,23 +13797,20 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is HoverInformation) {
-      return offset == other.offset &&
-          length == other.length &&
-          containingLibraryPath == other.containingLibraryPath &&
-          containingLibraryName == other.containingLibraryName &&
-          containingClassDescription == other.containingClassDescription &&
-          dartdoc == other.dartdoc &&
-          elementDescription == other.elementDescription &&
-          elementKind == other.elementKind &&
-          isDeprecated == other.isDeprecated &&
-          parameter == other.parameter &&
-          propagatedType == other.propagatedType &&
-          staticType == other.staticType;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is HoverInformation &&
+      offset == other.offset &&
+      length == other.length &&
+      containingLibraryPath == other.containingLibraryPath &&
+      containingLibraryName == other.containingLibraryName &&
+      containingClassDescription == other.containingClassDescription &&
+      dartdoc == other.dartdoc &&
+      elementDescription == other.elementDescription &&
+      elementKind == other.elementKind &&
+      isDeprecated == other.isDeprecated &&
+      parameter == other.parameter &&
+      propagatedType == other.propagatedType &&
+      staticType == other.staticType;
 
   @override
   int get hashCode => Object.hash(
@@ -14258,12 +13886,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImplementedClass) {
-      return offset == other.offset && length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImplementedClass &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(offset, length);
@@ -14326,12 +13952,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImplementedMember) {
-      return offset == other.offset && length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImplementedMember &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(offset, length);
@@ -14418,18 +14042,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImportedElementSet) {
-      return listEqual(
-            strings,
-            other.strings,
-            (String a, String b) => a == b,
-          ) &&
-          listEqual(uris, other.uris, (int a, int b) => a == b) &&
-          listEqual(names, other.names, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImportedElementSet &&
+      listEqual(strings, other.strings, (String a, String b) => a == b) &&
+      listEqual(uris, other.uris, (int a, int b) => a == b) &&
+      listEqual(names, other.names, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -14516,14 +14133,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImportedElements) {
-      return path == other.path &&
-          prefix == other.prefix &&
-          listEqual(elements, other.elements, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImportedElements &&
+      path == other.path &&
+      prefix == other.prefix &&
+      listEqual(elements, other.elements, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(path, prefix, Object.hashAll(elements));
@@ -14593,12 +14207,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is InlineLocalVariableFeedback) {
-      return name == other.name && occurrences == other.occurrences;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is InlineLocalVariableFeedback &&
+      name == other.name &&
+      occurrences == other.occurrences;
 
   @override
   int get hashCode => Object.hash(name, occurrences);
@@ -14700,14 +14312,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is InlineMethodFeedback) {
-      return className == other.className &&
-          methodName == other.methodName &&
-          isDeclaration == other.isDeclaration;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is InlineMethodFeedback &&
+      className == other.className &&
+      methodName == other.methodName &&
+      isDeclaration == other.isDeclaration;
 
   @override
   int get hashCode => Object.hash(className, methodName, isDeclaration);
@@ -14791,12 +14400,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is InlineMethodOptions) {
-      return deleteSource == other.deleteSource && inlineAll == other.inlineAll;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is InlineMethodOptions &&
+      deleteSource == other.deleteSource &&
+      inlineAll == other.inlineAll;
 
   @override
   int get hashCode => Object.hash(deleteSource, inlineAll);
@@ -14879,17 +14486,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is LibraryPathSet) {
-      return scope == other.scope &&
-          listEqual(
-            libraryPaths,
-            other.libraryPaths,
-            (String a, String b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LibraryPathSet &&
+      scope == other.scope &&
+      listEqual(
+        libraryPaths,
+        other.libraryPaths,
+        (String a, String b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(scope, Object.hashAll(libraryPaths));
@@ -14965,12 +14569,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is LspHandleParams) {
-      return lspMessage == other.lspMessage;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LspHandleParams && lspMessage == other.lspMessage;
 
   @override
   int get hashCode => lspMessage.hashCode;
@@ -15042,12 +14642,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is LspHandleResult) {
-      return lspResponse == other.lspResponse;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LspHandleResult && lspResponse == other.lspResponse;
 
   @override
   int get hashCode => lspResponse.hashCode;
@@ -15120,12 +14716,9 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is LspNotificationParams) {
-      return lspNotification == other.lspNotification;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LspNotificationParams &&
+      lspNotification == other.lspNotification;
 
   @override
   int get hashCode => lspNotification.hashCode;
@@ -15178,12 +14771,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is MessageAction) {
-      return label == other.label;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is MessageAction && label == other.label;
 
   @override
   int get hashCode => label.hashCode;
@@ -15309,12 +14898,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is MoveFileOptions) {
-      return newFile == other.newFile;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is MoveFileOptions && newFile == other.newFile;
 
   @override
   int get hashCode => newFile.hashCode;
@@ -15385,12 +14970,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is OverriddenMember) {
-      return element == other.element && className == other.className;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is OverriddenMember &&
+      element == other.element &&
+      className == other.className;
 
   @override
   int get hashCode => Object.hash(element, className);
@@ -15512,19 +15095,16 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is Override) {
-      return offset == other.offset &&
-          length == other.length &&
-          superclassMember == other.superclassMember &&
-          listEqual(
-            interfaceMembers,
-            other.interfaceMembers,
-            (OverriddenMember a, OverriddenMember b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is Override &&
+      offset == other.offset &&
+      length == other.length &&
+      superclassMember == other.superclassMember &&
+      listEqual(
+        interfaceMembers,
+        other.interfaceMembers,
+        (OverriddenMember a, OverriddenMember b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -15607,12 +15187,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is PostfixTemplateDescriptor) {
-      return name == other.name && key == other.key && example == other.example;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is PostfixTemplateDescriptor &&
+      name == other.name &&
+      key == other.key &&
+      example == other.example;
 
   @override
   int get hashCode => Object.hash(name, key, example);
@@ -15668,12 +15247,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is PubStatus) {
-      return isListingPackageDirs == other.isListingPackageDirs;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is PubStatus && isListingPackageDirs == other.isListingPackageDirs;
 
   @override
   int get hashCode => isListingPackageDirs.hashCode;
@@ -15716,12 +15291,7 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RefactoringFeedback) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is RefactoringFeedback;
 
   @override
   int get hashCode => 0;
@@ -15764,12 +15334,7 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RefactoringOptions) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is RefactoringOptions;
 
   @override
   int get hashCode => 0;
@@ -15862,15 +15427,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RenameFeedback) {
-      return offset == other.offset &&
-          length == other.length &&
-          elementKindName == other.elementKindName &&
-          oldName == other.oldName;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RenameFeedback &&
+      offset == other.offset &&
+      length == other.length &&
+      elementKindName == other.elementKindName &&
+      oldName == other.oldName;
 
   @override
   int get hashCode => Object.hash(offset, length, elementKindName, oldName);
@@ -15938,12 +15500,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RenameOptions) {
-      return newName == other.newName;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RenameOptions && newName == other.newName;
 
   @override
   int get hashCode => newName.hashCode;
@@ -16030,14 +15588,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RequestError) {
-      return code == other.code &&
-          message == other.message &&
-          stackTrace == other.stackTrace;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RequestError &&
+      code == other.code &&
+      message == other.message &&
+      stackTrace == other.stackTrace;
 
   @override
   int get hashCode => Object.hash(code, message, stackTrace);
@@ -16314,14 +15869,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RuntimeCompletionExpression) {
-      return offset == other.offset &&
-          length == other.length &&
-          type == other.type;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RuntimeCompletionExpression &&
+      offset == other.offset &&
+      length == other.length &&
+      type == other.type;
 
   @override
   int get hashCode => Object.hash(offset, length, type);
@@ -16531,36 +16083,33 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RuntimeCompletionExpressionType) {
-      return libraryPath == other.libraryPath &&
-          kind == other.kind &&
-          name == other.name &&
-          listEqual(
-            typeArguments,
-            other.typeArguments,
-            (
-              RuntimeCompletionExpressionType a,
-              RuntimeCompletionExpressionType b,
-            ) => a == b,
-          ) &&
-          returnType == other.returnType &&
-          listEqual(
-            parameterTypes,
-            other.parameterTypes,
-            (
-              RuntimeCompletionExpressionType a,
-              RuntimeCompletionExpressionType b,
-            ) => a == b,
-          ) &&
-          listEqual(
-            parameterNames,
-            other.parameterNames,
-            (String a, String b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RuntimeCompletionExpressionType &&
+      libraryPath == other.libraryPath &&
+      kind == other.kind &&
+      name == other.name &&
+      listEqual(
+        typeArguments,
+        other.typeArguments,
+        (
+          RuntimeCompletionExpressionType a,
+          RuntimeCompletionExpressionType b,
+        ) => a == b,
+      ) &&
+      returnType == other.returnType &&
+      listEqual(
+        parameterTypes,
+        other.parameterTypes,
+        (
+          RuntimeCompletionExpressionType a,
+          RuntimeCompletionExpressionType b,
+        ) => a == b,
+      ) &&
+      listEqual(
+        parameterNames,
+        other.parameterNames,
+        (String a, String b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(
@@ -16680,12 +16229,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is RuntimeCompletionVariable) {
-      return name == other.name && type == other.type;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RuntimeCompletionVariable &&
+      name == other.name &&
+      type == other.type;
 
   @override
   int get hashCode => Object.hash(name, type);
@@ -16800,14 +16347,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindElementReferencesParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          includePotential == other.includePotential;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindElementReferencesParams &&
+      file == other.file &&
+      offset == other.offset &&
+      includePotential == other.includePotential;
 
   @override
   int get hashCode => Object.hash(file, offset, includePotential);
@@ -16909,12 +16453,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindElementReferencesResult) {
-      return id == other.id && element == other.element;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindElementReferencesResult &&
+      id == other.id &&
+      element == other.element;
 
   @override
   int get hashCode => Object.hash(id, element);
@@ -16994,12 +16536,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberDeclarationsParams) {
-      return name == other.name;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberDeclarationsParams && name == other.name;
 
   @override
   int get hashCode => name.hashCode;
@@ -17075,12 +16613,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberDeclarationsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberDeclarationsResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -17160,12 +16694,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberReferencesParams) {
-      return name == other.name;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberReferencesParams && name == other.name;
 
   @override
   int get hashCode => name.hashCode;
@@ -17241,12 +16771,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberReferencesResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberReferencesResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -17330,12 +16856,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindTopLevelDeclarationsParams) {
-      return pattern == other.pattern;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindTopLevelDeclarationsParams && pattern == other.pattern;
 
   @override
   int get hashCode => pattern.hashCode;
@@ -17411,12 +16933,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindTopLevelDeclarationsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindTopLevelDeclarationsResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -17542,14 +17060,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetElementDeclarationsParams) {
-      return file == other.file &&
-          pattern == other.pattern &&
-          maxResults == other.maxResults;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchGetElementDeclarationsParams &&
+      file == other.file &&
+      pattern == other.pattern &&
+      maxResults == other.maxResults;
 
   @override
   int get hashCode => Object.hash(file, pattern, maxResults);
@@ -17663,17 +17178,14 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetElementDeclarationsResult) {
-      return listEqual(
-            declarations,
-            other.declarations,
-            (ElementDeclaration a, ElementDeclaration b) => a == b,
-          ) &&
-          listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchGetElementDeclarationsResult &&
+      listEqual(
+        declarations,
+        other.declarations,
+        (ElementDeclaration a, ElementDeclaration b) => a == b,
+      ) &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode =>
@@ -17786,14 +17298,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetTypeHierarchyParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          superOnly == other.superOnly;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchGetTypeHierarchyParams &&
+      file == other.file &&
+      offset == other.offset &&
+      superOnly == other.superOnly;
 
   @override
   int get hashCode => Object.hash(file, offset, superOnly);
@@ -17892,16 +17401,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetTypeHierarchyResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is SearchGetTypeHierarchyResult &&
+      listEqual(
         hierarchyItems,
         other.hierarchyItems,
         (TypeHierarchyItem a, TypeHierarchyItem b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(hierarchyItems ?? []);
@@ -18020,15 +17526,12 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchResult) {
-      return location == other.location &&
-          kind == other.kind &&
-          isPotential == other.isPotential &&
-          listEqual(path, other.path, (Element a, Element b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchResult &&
+      location == other.location &&
+      kind == other.kind &&
+      isPotential == other.isPotential &&
+      listEqual(path, other.path, (Element a, Element b) => a == b);
 
   @override
   int get hashCode =>
@@ -18197,18 +17700,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchResultsParams) {
-      return id == other.id &&
-          listEqual(
-            results,
-            other.results,
-            (SearchResult a, SearchResult b) => a == b,
-          ) &&
-          isLast == other.isLast;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchResultsParams &&
+      id == other.id &&
+      listEqual(
+        results,
+        other.results,
+        (SearchResult a, SearchResult b) => a == b,
+      ) &&
+      isLast == other.isLast;
 
   @override
   int get hashCode => Object.hash(id, Object.hashAll(results), isLast);
@@ -18284,12 +17784,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerCancelRequestParams) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerCancelRequestParams && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -18400,12 +17896,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerConnectedParams) {
-      return version == other.version && pid == other.pid;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerConnectedParams &&
+      version == other.version &&
+      pid == other.pid;
 
   @override
   int get hashCode => Object.hash(version, pid);
@@ -18508,14 +18002,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerErrorParams) {
-      return isFatal == other.isFatal &&
-          message == other.message &&
-          stackTrace == other.stackTrace;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerErrorParams &&
+      isFatal == other.isFatal &&
+      message == other.message &&
+      stackTrace == other.stackTrace;
 
   @override
   int get hashCode => Object.hash(isFatal, message, stackTrace);
@@ -18614,12 +18105,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerGetVersionResult) {
-      return version == other.version;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerGetVersionResult && version == other.version;
 
   @override
   int get hashCode => version.hashCode;
@@ -18701,12 +18188,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerLogEntry) {
-      return time == other.time && kind == other.kind && data == other.data;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerLogEntry &&
+      time == other.time &&
+      kind == other.kind &&
+      data == other.data;
 
   @override
   int get hashCode => Object.hash(time, kind, data);
@@ -18846,12 +18332,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerLogParams) {
-      return entry == other.entry;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerLogParams && entry == other.entry;
 
   @override
   int get hashCode => entry.hashCode;
@@ -18931,12 +18413,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerOpenUrlRequestParams) {
-      return url == other.url;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerOpenUrlRequestParams && url == other.url;
 
   @override
   int get hashCode => url.hashCode;
@@ -19036,12 +18514,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerPluginErrorParams) {
-      return message == other.message;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerPluginErrorParams && message == other.message;
 
   @override
   int get hashCode => message.hashCode;
@@ -19224,18 +18698,11 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerSetClientCapabilitiesParams) {
-      return listEqual(
-            requests,
-            other.requests,
-            (String a, String b) => a == b,
-          ) &&
-          supportsUris == other.supportsUris &&
-          lspCapabilities == other.lspCapabilities;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerSetClientCapabilitiesParams &&
+      listEqual(requests, other.requests, (String a, String b) => a == b) &&
+      supportsUris == other.supportsUris &&
+      lspCapabilities == other.lspCapabilities;
 
   @override
   int get hashCode =>
@@ -19354,16 +18821,13 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerSetSubscriptionsParams) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is ServerSetSubscriptionsParams &&
+      listEqual(
         subscriptions,
         other.subscriptions,
         (ServerService a, ServerService b) => a == b,
       );
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(subscriptions);
@@ -19511,18 +18975,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerShowMessageRequestParams) {
-      return type == other.type &&
-          message == other.message &&
-          listEqual(
-            actions,
-            other.actions,
-            (MessageAction a, MessageAction b) => a == b,
-          );
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerShowMessageRequestParams &&
+      type == other.type &&
+      message == other.message &&
+      listEqual(
+        actions,
+        other.actions,
+        (MessageAction a, MessageAction b) => a == b,
+      );
 
   @override
   int get hashCode => Object.hash(type, message, Object.hashAll(actions));
@@ -19601,12 +19062,8 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerShowMessageRequestResult) {
-      return action == other.action;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerShowMessageRequestResult && action == other.action;
 
   @override
   int get hashCode => action.hashCode;
@@ -19757,12 +19214,10 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerStatusParams) {
-      return analysis == other.analysis && pub == other.pub;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerStatusParams &&
+      analysis == other.analysis &&
+      pub == other.pub;
 
   @override
   int get hashCode => Object.hash(analysis, pub);
@@ -19945,18 +19400,15 @@
   String toString() => json.encode(toJson(clientUriConverter: null));
 
   @override
-  bool operator ==(Object other) {
-    if (other is TypeHierarchyItem) {
-      return classElement == other.classElement &&
-          displayName == other.displayName &&
-          memberElement == other.memberElement &&
-          superclass == other.superclass &&
-          listEqual(interfaces, other.interfaces, (int a, int b) => a == b) &&
-          listEqual(mixins, other.mixins, (int a, int b) => a == b) &&
-          listEqual(subclasses, other.subclasses, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is TypeHierarchyItem &&
+      classElement == other.classElement &&
+      displayName == other.displayName &&
+      memberElement == other.memberElement &&
+      superclass == other.superclass &&
+      listEqual(interfaces, other.interfaces, (int a, int b) => a == b) &&
+      listEqual(mixins, other.mixins, (int a, int b) => a == b) &&
+      listEqual(subclasses, other.subclasses, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 046d226..1735c2a 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -82,6 +82,9 @@
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:analyzer/src/utilities/extensions/analysis_session.dart';
+import 'package:analyzer/src/workspace/basic.dart';
+import 'package:analyzer/src/workspace/blaze.dart';
+import 'package:analyzer/src/workspace/gn.dart';
 import 'package:analyzer/src/workspace/pub.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart';
 import 'package:analyzer_plugin/src/protocol/protocol_internal.dart'
@@ -348,6 +351,7 @@
       sdkManager.defaultSdkDirectory,
       notificationManager,
       instrumentationService,
+      sessionLogger,
     );
     var pluginWatcher = PluginWatcher(resourceProvider, pluginManager);
 
@@ -568,12 +572,12 @@
     bool registerExperimentalHandlers = false,
   }) async {
     switch (dtd?.state) {
-      case DtdConnectionState.Connecting || DtdConnectionState.Connected:
+      case DtdConnectionState.connecting || DtdConnectionState.connected:
         return lsp.error(
           lsp.ServerErrorCodes.stateError,
           'Server is already connected to DTD',
         );
-      case DtdConnectionState.Disconnected || DtdConnectionState.Error || null:
+      case DtdConnectionState.disconnected || DtdConnectionState.error || null:
         var connectResult = await DtdServices.connect(
           this,
           dtdUri,
@@ -951,7 +955,7 @@
     var transitiveFilePaths = <String>{};
     var transitiveFileUniqueLineCount = 0;
     var libraryCycles = <LibraryCycle>{};
-    var workspaceTypes = <int>[0, 0, 0];
+    var workspaceTypes = List<int>.filled(5, 0);
     var numberOfPackages = <int>[];
     var driverMap = contextManager.driverMap;
     for (var entry in driverMap.entries) {
@@ -962,17 +966,21 @@
         var contextRoot = analysisContext.contextRoot;
         packagesFileMap[rootPath] = contextRoot.packagesFile;
         var workspace = contextRoot.workspace;
-        if (workspace is PackageConfigWorkspace) {
-          if (workspace.isPubWorkspace) {
-            // Pub workspace index = 2, Package workspace index = 1
-            workspaceTypes[2]++;
-            numberOfPackages.add(workspace.allPackages.length);
-          } else {
-            workspaceTypes[1]++;
-          }
-        } else {
-          // Blaze, GN or other workspace index  = 0
-          workspaceTypes[0]++;
+        switch (workspace) {
+          case PackageConfigWorkspace():
+            if (workspace.isPubWorkspace) {
+              // Pub workspace index = 2, Package workspace index = 1
+              workspaceTypes[2]++;
+              numberOfPackages.add(workspace.allPackages.length);
+            } else {
+              workspaceTypes[1]++;
+            }
+          case BlazeWorkspace():
+            workspaceTypes[3]++;
+          case GnWorkspace():
+            workspaceTypes[4]++;
+          case BasicWorkspace():
+            workspaceTypes[0]++;
         }
       }
       var fileSystemState = driver.fsState;
@@ -1238,23 +1246,6 @@
     var path = result.path;
     filesToFlush.add(path);
 
-    // If this is a virtual file and the client supports URIs, we need to notify
-    // that it's been updated.
-    var lspUri = analysisServer.uriConverter.toClientUri(result.path);
-    if (!lspUri.isScheme('file')) {
-      // TODO(dantup): Should we do any kind of tracking here to avoid sending
-      //  lots of notifications if there aren't actual changes?
-      // TODO(dantup): We may be able to skip sending this if the file is not
-      //  open (priority) depending on the response to
-      //  https://github.com/microsoft/vscode/issues/202017
-      var message = lsp.NotificationMessage(
-        method: lsp.CustomMethods.dartTextDocumentContentDidChange,
-        params: lsp.DartTextDocumentContentDidChangeParams(uri: lspUri),
-        jsonrpc: lsp.jsonRpcVersion,
-      );
-      analysisServer.sendLspNotification(message);
-    }
-
     if (result is AnalysisResultWithDiagnostics) {
       if (analysisServer.isAnalyzed(path)) {
         var serverErrors = server.doAnalysisError_listFromEngine(result);
diff --git a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
index 72d6968..2ee31b6 100644
--- a/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
+++ b/pkg/analysis_server/lib/src/analytics/analytics_manager.dart
@@ -45,13 +45,13 @@
 
   static const openWorkspacePathsKey = 'openWorkspacePaths';
 
-  static const refactoringKindEnumKey = EDIT_REQUEST_GET_REFACTORING_KIND;
+  static const refactoringKindEnumKey = editRequestGetRefactoringKind;
 
-  static const includedKey = ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED;
+  static const includedKey = analysisRequestSetAnalysisRootsIncluded;
 
-  static const excludedKey = ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED;
+  static const excludedKey = analysisRequestSetAnalysisRootsExcluded;
 
-  static const filesKey = ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES;
+  static const filesKey = analysisRequestSetPriorityFilesFiles;
 
   /// The object used to send analytics.
   final Analytics analytics;
@@ -321,7 +321,7 @@
 
   /// Record data from the given [params].
   void startedGetRefactoring(EditGetRefactoringParams params) {
-    var requestData = getRequestData(EDIT_REQUEST_GET_REFACTORING);
+    var requestData = getRequestData(editRequestGetRefactoring);
     requestData.addEnumValue(refactoringKindEnumKey, params.kind.name);
   }
 
@@ -351,16 +351,16 @@
 
   /// Record data from the given [params].
   void startedSetAnalysisRoots(AnalysisSetAnalysisRootsParams params) {
-    var requestData = getRequestData(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS);
+    var requestData = getRequestData(analysisRequestSetAnalysisRoots);
     requestData.addValue(includedKey, params.included.length);
     requestData.addValue(excludedKey, params.excluded.length);
   }
 
   /// Record data from the given [params].
   void startedSetPriorityFiles(AnalysisSetPriorityFilesParams params) {
-    var requestData = getRequestData(ANALYSIS_REQUEST_SET_PRIORITY_FILES);
+    var requestData = getRequestData(analysisRequestSetPriorityFiles);
     requestData.addValue(
-      ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES,
+      analysisRequestSetPriorityFilesFiles,
       params.files.length,
     );
   }
@@ -627,6 +627,11 @@
             statistics.produceErrorsActualFileLineCount,
         produceErrorsDurationMs: statistics.produceErrorsMs,
         produceErrorsElementsDurationMs: statistics.produceErrorsElementsMs,
+        libraryDiagnosticsBundleFailures: statistics
+            .libraryDiagnosticsBundleRequirementsFailures
+            .entries
+            .map((e) => '${e.key.id}:${e.value}')
+            .join(','),
       ),
     );
 
diff --git a/pkg/analysis_server/lib/src/analytics/context_structure.dart b/pkg/analysis_server/lib/src/analytics/context_structure.dart
index 6fc9bed..04c5d1c 100644
--- a/pkg/analysis_server/lib/src/analytics/context_structure.dart
+++ b/pkg/analysis_server/lib/src/analytics/context_structure.dart
@@ -48,9 +48,11 @@
   final int transitiveFileUniqueLineCount;
 
   /// The type of the workspaces in all of the contexts. A list of 3 elements,
-  /// index 0 - number of Blaze/GN/Basic workspace
+  /// index 0 - number of Basic workspaces
   /// index 1 - number of workspaces with one package
   /// index 2 - number of Pub workspaces
+  /// index 3 - number of Blaze workspaces
+  /// index 4 - number of GN workspaces
   final List<int> contextWorkspaceType;
 
   /// The number of packages in the workspace. This value is calculated only
@@ -71,8 +73,8 @@
     required this.transitiveFileUniqueLineCount,
     required List<int> libraryCycleLibraryCounts,
     required List<int> libraryCycleLineCounts,
-    this.contextWorkspaceType = const <int>[0, 0, 0],
-    List<int> numberOfPackagesInWorkspace = const <int>[],
+    required this.contextWorkspaceType,
+    required List<int> numberOfPackagesInWorkspace,
   }) : libraryCycleLibraryCounts = PercentileCalculator.from(
          libraryCycleLibraryCounts,
        ),
diff --git a/pkg/analysis_server/lib/src/analytics/session_data.dart b/pkg/analysis_server/lib/src/analytics/session_data.dart
index 3b37b9c..3942f8c 100644
--- a/pkg/analysis_server/lib/src/analytics/session_data.dart
+++ b/pkg/analysis_server/lib/src/analytics/session_data.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/analytics/percentile_calculator.dart';
 import 'package:analyzer/src/dart/analysis/status.dart';
+import 'package:analyzer/src/fine/requirement_failure.dart';
 
 /// Accumulated statistics over multiple analysis working periods.
 class AnalyticsAnalysisWorkingStatistics {
@@ -66,6 +67,10 @@
   /// The sum of line counts for [produceErrorsActualFileCount].
   int produceErrorsActualFileLineCount = 0;
 
+  /// The counts of requirement failures for library diagnostics bundles.
+  final Map<RequirementFailureKindId, int>
+  libraryDiagnosticsBundleRequirementsFailures = {};
+
   AnalyticsAnalysisWorkingStatistics({required this.withFineDependencies});
 
   void append(AnalysisStatusWorkingStatistics statistics) {
@@ -98,6 +103,15 @@
     produceErrorsActualFileCount += statistics.produceErrorsActualFileCount;
     produceErrorsActualFileLineCount +=
         statistics.produceErrorsActualFileLineCount;
+
+    for (var entry
+        in statistics.libraryDiagnosticsBundleRequirementsFailures.entries) {
+      libraryDiagnosticsBundleRequirementsFailures.update(
+        entry.key,
+        (value) => value + entry.value,
+        ifAbsent: () => entry.value,
+      );
+    }
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/cider/local_library_contributor.dart b/pkg/analysis_server/lib/src/cider/local_library_contributor.dart
index 1218cc1..0fec7f8 100644
--- a/pkg/analysis_server/lib/src/cider/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/cider/local_library_contributor.dart
@@ -110,7 +110,7 @@
         (opType.includeAnnotationSuggestions && variable.isConst)) {
       var parent = element.enclosingElement;
       if (parent is InterfaceElement || parent is ExtensionElement) {
-        if (element.isSynthetic) {
+        if (element.isOriginVariable) {
           if (variable is FieldElement) {
             builder.suggestField(variable, inheritanceDistance: 0.0);
           }
@@ -148,7 +148,7 @@
         (opType.includeAnnotationSuggestions && variable.isConst)) {
       var parent = element.enclosingElement;
       if (parent is InterfaceElement || parent is ExtensionElement) {
-        if (!element.isSynthetic) {
+        if (!element.isOriginVariable) {
           builder.suggestSetter(element, inheritanceDistance: 0.0);
         }
       } else {
@@ -173,7 +173,7 @@
 
   @override
   void visitTopLevelVariableElement(TopLevelVariableElement element) {
-    if (opType.includeReturnValueSuggestions && !element.isSynthetic) {
+    if (opType.includeReturnValueSuggestions && element.isOriginDeclaration) {
       builder.suggestTopLevelVariable(element, prefix: prefix);
     }
   }
@@ -230,7 +230,7 @@
           if (field.isStatic &&
               field.isAccessibleIn(request.libraryElement) &&
               typeSystem.isSubtypeOf(field.type, contextType)) {
-            if (field.isSynthetic) {
+            if (field.isOriginGetterSetter) {
               var getter = field.getter;
               if (getter != null) {
                 builder.suggestGetter(
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index d492bd7..0d464e5 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -126,7 +126,7 @@
   Future<RenameResponse?> computeRenameRanges2() async {
     var elements = <Element>[];
     var element = canRename.refactoringElement.element;
-    if (element is PropertyInducingElement && element.isSynthetic) {
+    if (element is PropertyInducingElement && element.isOriginGetterSetter) {
       var property = element;
       var getter = property.getter;
       var setter = property.setter;
@@ -164,7 +164,7 @@
         }
         replaceMatches.addMatch(match.path, replaceInfo);
       }
-      if (element.isSynthetic) {
+      if (element.isOriginImplicitDefault) {
         var result = await _replaceSyntheticConstructor();
         if (result != null) {
           replaceMatches.addMatch(result.path, result.matches.toList());
@@ -231,7 +231,7 @@
     String sourcePath,
   ) async {
     var infos = <ReplaceInfo>[];
-    if (element is PropertyInducingElement && element.isSynthetic) {
+    if (element is PropertyInducingElement && element.isOriginGetterSetter) {
       var getter = element.getter;
       if (getter != null) {
         infos.add(
@@ -376,7 +376,7 @@
     }
 
     var node = result.node;
-    if (node is! NamedCompilationUnitMember) {
+    if (node is! CompilationUnitMember) {
       return null;
     }
     var edit = await buildEditForInsertedConstructor(
diff --git a/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart b/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart
index 860feca..fb64c4b 100644
--- a/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart
@@ -385,7 +385,7 @@
 
     // Don't consider synthetic getter/setter for a field to be executable
     // since they don't contain any executable code.
-    if (element is PropertyAccessorElement && element.isSynthetic) {
+    if (element is PropertyAccessorElement && element.isOriginVariable) {
       return null;
     }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_color.dart b/pkg/analysis_server/lib/src/computer/computer_color.dart
index b3cfef3..e27b92e 100644
--- a/pkg/analysis_server/lib/src/computer/computer_color.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_color.dart
@@ -72,15 +72,23 @@
   /// This handles constructor calls that cannot be evaluated (for example
   /// because they are not const) but are simple well-known dart:ui/Flutter
   /// color constructors that we can manually parse.
-  bool tryAddKnownColorConstructor(InstanceCreationExpression expression) {
+  bool tryAddKnownColorConstructor(
+    // InvocationExpression or InstanceCreationExpression
+    Expression expression,
+    ConstructorReferenceNode? constructor,
+    ArgumentList argumentList,
+  ) {
     if (!expression.staticType.isColor) return false;
 
-    var constructor = expression.constructorName;
-    var staticElement = constructor.element;
-    var classElement = staticElement?.enclosingElement;
+    var classElement = constructor?.element?.enclosingElement;
     var className = classElement?.name;
-    var constructorName = constructor.name?.name;
-    var constructorArgs = expression.argumentList.arguments.toList();
+    var constructorName = constructor?.element?.name;
+    var constructorArgs = argumentList.arguments.toList();
+
+    // Handle `.new` constructors the same as if called without `.new`.
+    if (constructorName == 'new') {
+      constructorName = null;
+    }
 
     ColorInformation? color;
     if (_isDartUi(classElement) && className == 'Color') {
@@ -340,6 +348,19 @@
   _ColorBuilder(this.computer);
 
   @override
+  void visitDotShorthandConstructorInvocation(
+    DotShorthandConstructorInvocation node,
+  ) {
+    if (!computer.tryAddColor(node)) {
+      // If we couldn't evaluate the constant, try the well-known color
+      // constructors for dart:ui/Flutter.
+      computer.tryAddKnownColorConstructor(node, node, node.argumentList);
+    }
+
+    super.visitDotShorthandConstructorInvocation(node);
+  }
+
+  @override
   void visitIndexExpression(IndexExpression node) {
     // Colors.redAccent[500].
     var index = node.index;
@@ -363,7 +384,11 @@
     if (!computer.tryAddColor(node)) {
       // If we couldn't evaluate the constant, try the well-known color
       // constructors for dart:ui/Flutter.
-      computer.tryAddKnownColorConstructor(node);
+      computer.tryAddKnownColorConstructor(
+        node,
+        node.constructorName,
+        node.argumentList,
+      );
     }
 
     super.visitInstanceCreationExpression(node);
diff --git a/pkg/analysis_server/lib/src/computer/computer_folding.dart b/pkg/analysis_server/lib/src/computer/computer_folding.dart
index 7b855fd..396367d 100644
--- a/pkg/analysis_server/lib/src/computer/computer_folding.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_folding.dart
@@ -268,8 +268,8 @@
   void visitClassDeclaration(ClassDeclaration node) {
     _computer._addRegionForAnnotations(node.metadata);
     _computer._addRegion(
-      node.name.end,
-      node.rightBracket.end,
+      node.namePart.end,
+      node.body.end,
       FoldingKind.CLASS_BODY,
     );
     super.visitClassDeclaration(node);
@@ -279,7 +279,8 @@
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     _computer._addRegionForAnnotations(node.metadata);
     _computer._addRegion(
-      node.name?.end ?? node.returnType.end,
+      // TODO(scheglov): support primary constructors
+      node.name?.end ?? node.typeName!.end,
       node.end,
       FoldingKind.FUNCTION_BODY,
     );
@@ -299,8 +300,8 @@
   void visitEnumDeclaration(EnumDeclaration node) {
     _computer._addRegionForAnnotations(node.metadata);
     _computer._addRegion(
-      node.leftBracket.end,
-      node.rightBracket.offset,
+      node.body.leftBracket.end,
+      node.body.rightBracket.offset,
       FoldingKind.CLASS_BODY,
     );
     super.visitEnumDeclaration(node);
@@ -316,8 +317,8 @@
   void visitExtensionDeclaration(ExtensionDeclaration node) {
     _computer._addRegionForAnnotations(node.metadata);
     _computer._addRegion(
-      node.leftBracket.end,
-      node.rightBracket.offset,
+      node.body.leftBracket.end,
+      node.body.rightBracket.offset,
       FoldingKind.CLASS_BODY,
     );
     super.visitExtensionDeclaration(node);
@@ -326,11 +327,13 @@
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
     _computer._addRegionForAnnotations(node.metadata);
-    _computer._addRegion(
-      node.leftBracket.end,
-      node.rightBracket.offset,
-      FoldingKind.CLASS_BODY,
-    );
+    if (node.body case BlockClassBody body) {
+      _computer._addRegion(
+        body.leftBracket.end,
+        body.rightBracket.offset,
+        FoldingKind.CLASS_BODY,
+      );
+    }
     super.visitExtensionTypeDeclaration(node);
   }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index bd7bdcb..3e2b355 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -868,7 +868,7 @@
     computer._addRegion_token(node.mixinKeyword, HighlightRegionType.BUILT_IN);
     computer._addRegion_token(node.classKeyword, HighlightRegionType.KEYWORD);
     computer._addRegion_token(
-      node.name,
+      node.namePart.typeName,
       HighlightRegionType.CLASS,
       semanticTokenModifiers: {SemanticTokenModifiers.declaration},
     );
@@ -1042,7 +1042,7 @@
     // computer._addRegion_token(
     //     node.augmentKeyword, HighlightRegionType.BUILT_IN);
     computer._addRegion_token(node.enumKeyword, HighlightRegionType.KEYWORD);
-    computer._addRegion_token(node.name, HighlightRegionType.ENUM);
+    computer._addRegion_token(node.namePart.typeName, HighlightRegionType.ENUM);
     super.visitEnumDeclaration(node);
   }
 
@@ -1102,10 +1102,13 @@
 
     computer._addRegion_token(node.typeKeyword, HighlightRegionType.BUILT_IN);
 
-    computer._addRegion_token(node.constKeyword, HighlightRegionType.BUILT_IN);
-
+    var primaryConstructor = node.primaryConstructor;
     computer._addRegion_token(
-      node.name,
+      primaryConstructor.constKeyword,
+      HighlightRegionType.BUILT_IN,
+    );
+    computer._addRegion_token(
+      primaryConstructor.typeName,
       HighlightRegionType.EXTENSION_TYPE,
       semanticTokenModifiers: {SemanticTokenModifiers.declaration},
     );
@@ -1591,6 +1594,12 @@
   }
 
   @override
+  void visitPrimaryConstructorName(PrimaryConstructorName node) {
+    computer._addRegion_token(node.name, HighlightRegionType.CONSTRUCTOR);
+    super.visitPrimaryConstructorName(node);
+  }
+
+  @override
   void visitRecordLiteral(RecordLiteral node) {
     computer._addRegion_node(node, HighlightRegionType.LITERAL_RECORD);
     computer._addRegion_token(node.constKeyword, HighlightRegionType.KEYWORD);
@@ -1618,31 +1627,6 @@
   }
 
   @override
-  void visitRepresentationConstructorName(RepresentationConstructorName node) {
-    computer._addRegion_token(
-      node.name,
-      HighlightRegionType.CONSTRUCTOR,
-      semanticTokenType: SemanticTokenTypes.method,
-      semanticTokenModifiers: {
-        CustomSemanticTokenModifiers.constructor,
-        SemanticTokenModifiers.declaration,
-      },
-    );
-
-    super.visitRepresentationConstructorName(node);
-  }
-
-  @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    computer._addRegion_token(
-      node.fieldName,
-      HighlightRegionType.INSTANCE_FIELD_DECLARATION,
-    );
-
-    super.visitRepresentationDeclaration(node);
-  }
-
-  @override
   void visitRethrowExpression(RethrowExpression node) {
     computer._addRegion_token(
       node.rethrowKeyword,
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index 1030b96..d1262d6 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -39,7 +39,7 @@
       return null;
     }
 
-    var locationEntity = _locationEntity(node);
+    var locationEntity = _locationEntity(node, _offset);
     node = _targetNode(node);
     if (node == null || locationEntity == null) {
       return null;
@@ -68,7 +68,7 @@
         // short code that illustrates the element meaning.
         hover.elementDescription = _elementDisplayString(node, element);
         hover.elementKind = element.kind.displayName;
-        hover.isDeprecated = element.metadata.hasDeprecated;
+        hover.isDeprecated = element.isDeprecatedWithKind('use');
         // not local element
         if (element.enclosingElement is! ExecutableElement) {
           // containing class
@@ -139,9 +139,10 @@
     } else if (node is DotShorthandConstructorInvocation) {
       return (offset: node.offset, length: node.length);
     } else if (node is ConstructorDeclaration) {
-      var offset = node.returnType.offset;
-      var end = node.name?.end ?? node.returnType.end;
-      var length = end - node.returnType.offset;
+      // TODO(scheglov): support primary constructors
+      var offset = node.typeName!.offset;
+      var end = node.name?.end ?? node.typeName!.end;
+      var length = end - node.typeName!.offset;
       return (offset: offset, length: length);
     } else {
       return (offset: entity.offset, length: entity.length);
@@ -187,23 +188,39 @@
   /// hover.
   ///
   /// Returns `null` if there is no valid entity for this hover.
-  SyntacticEntity? _locationEntity(AstNode node) {
+  SyntacticEntity? _locationEntity(AstNode node, int offset) {
     return switch (node) {
+      BinaryExpression() => node.operator,
+      ConditionalExpression()
+          when offset >= node.question.offset && offset <= node.question.end =>
+        node.question,
+      ConditionalExpression()
+          when offset >= node.colon.offset && offset <= node.colon.end =>
+        node.colon,
+      AssignmentExpression() => node.operator,
+      PrefixExpression() => node.operator,
+      PostfixExpression() => node.operator,
       CatchClauseParameter() => node.name,
-      NamedCompilationUnitMember() => node.name,
+      ClassDeclaration() => node.namePart.typeName,
+      ConstructorDeclaration() => node.name ?? node.typeName!,
+      DeclaredIdentifier() => node.name,
+      EnumDeclaration() => node.namePart.typeName,
       Expression() => node,
       ExtensionDeclaration() => node.name,
+      ExtensionTypeDeclaration() => node.primaryConstructor.typeName,
       FormalParameter() => node.name,
+      FunctionDeclaration() => node.name,
+      ImportPrefixReference() => node.name,
+      LibraryDirective() => node.libraryKeyword,
       MethodDeclaration() => node.name,
+      MixinDeclaration() => node.name,
+      NameWithTypeParameters() => node.typeName,
       NamedType() => node.name,
-      ConstructorDeclaration() => node.name ?? node.returnType,
-      DeclaredIdentifier() => node.name,
+      PatternFieldName() => node.name,
+      TypeAlias() => node.name,
       VariableDeclaration() => node.name,
       VariablePattern() => node.name,
-      PatternFieldName() => node.name,
       WildcardPattern() => node.name,
-      LibraryDirective() => node.libraryKeyword,
-      ImportPrefixReference() => node.name,
       _ => null,
     };
   }
@@ -230,14 +247,16 @@
   /// Adjusts the target node for constructors.
   AstNode? _targetNode(AstNode node) {
     var parent = node.parent;
-    var grandParent = parent?.parent;
-    if (parent is NamedType &&
-        grandParent is ConstructorName &&
-        grandParent.parent is InstanceCreationExpression) {
-      return grandParent.parent;
+    var parent2 = parent?.parent;
+    if (node is ClassNamePart) {
+      return parent;
+    } else if (parent is NamedType &&
+        parent2 is ConstructorName &&
+        parent2.parent is InstanceCreationExpression) {
+      return parent2.parent;
     } else if (parent is ConstructorName &&
-        grandParent is InstanceCreationExpression) {
-      return grandParent;
+        parent2 is InstanceCreationExpression) {
+      return parent2;
     } else if (node is SimpleIdentifier &&
         parent is ConstructorDeclaration &&
         parent.name != null) {
diff --git a/pkg/analysis_server/lib/src/computer/computer_lazy_type_hierarchy.dart b/pkg/analysis_server/lib/src/computer/computer_lazy_type_hierarchy.dart
index 8aa5488..75186a4 100644
--- a/pkg/analysis_server/lib/src/computer/computer_lazy_type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_lazy_type_hierarchy.dart
@@ -63,25 +63,26 @@
   /// Finds a target for starting type hierarchy navigation at [offset].
   TypeHierarchyItem? findTarget(int offset) {
     var node = _result.unit.nodeCovering(offset: offset);
+    if (node == null) return null;
 
-    DartType? type;
+    var targetNode = node.thisOrAncestorMatching(
+      (node) =>
+          node is NamedType ||
+          node is CommentReference ||
+          _isValidTargetDeclaration(node),
+    );
 
-    // Try named types.
-    type = node?.thisOrAncestorOfType<NamedType>()?.type;
+    var targetElement = switch (targetNode) {
+      NamedType(:InterfaceType type) => type.element,
+      CommentReference(expression: Identifier(:InterfaceElement element)) =>
+        element,
+      Declaration(declaredFragment: Fragment(:InterfaceElement element)) =>
+        element,
+      _ => null,
+    };
 
-    if (type == null) {
-      // Try enclosing class/mixins.
-      Declaration? declaration = node?.thisOrAncestorMatching(
-        (node) => _isValidTargetDeclaration(node),
-      );
-      var element = declaration?.declaredFragment?.element;
-      if (element is InterfaceElement) {
-        type = element.thisType;
-      }
-    }
-
-    return type is InterfaceType
-        ? TypeHierarchyItem.forElement(type.element)
+    return targetElement != null
+        ? TypeHierarchyItem.forElement(targetElement)
         : null;
   }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index 12c4b89..6dfdc7f 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -24,35 +24,42 @@
     var unitContents = <Outline>[];
     for (var unitMember in unit.declarations) {
       if (unitMember is ClassDeclaration) {
-        unitContents.add(
-          _newClassOutline(unitMember, _outlinesForMembers(unitMember.members)),
-        );
+        if (unitMember.body case BlockClassBody body) {
+          unitContents.add(
+            _newClassOutline(unitMember, _outlinesForMembers(body.members)),
+          );
+        }
       } else if (unitMember is MixinDeclaration) {
         unitContents.add(
-          _newMixinOutline(unitMember, _outlinesForMembers(unitMember.members)),
+          _newMixinOutline(
+            unitMember,
+            _outlinesForMembers(unitMember.body.members),
+          ),
         );
       } else if (unitMember is EnumDeclaration) {
         unitContents.add(
           _newEnumOutline(unitMember, [
-            for (var constant in unitMember.constants)
+            for (var constant in unitMember.body.constants)
               _newEnumConstant(constant),
-            ..._outlinesForMembers(unitMember.members),
+            ..._outlinesForMembers(unitMember.body.members),
           ]),
         );
       } else if (unitMember is ExtensionDeclaration) {
         unitContents.add(
           _newExtensionOutline(
             unitMember,
-            _outlinesForMembers(unitMember.members),
+            _outlinesForMembers(unitMember.body.members),
           ),
         );
       } else if (unitMember is ExtensionTypeDeclaration) {
-        unitContents.add(
-          _newExtensionTypeOutline(
-            unitMember,
-            _outlinesForMembers(unitMember.members),
-          ),
-        );
+        if (unitMember.body case BlockClassBody body) {
+          unitContents.add(
+            _newExtensionTypeOutline(
+              unitMember,
+              _outlinesForMembers(body.members),
+            ),
+          );
+        }
       } else if (unitMember is TopLevelVariableDeclaration) {
         var fieldDeclaration = unitMember;
         var fields = fieldDeclaration.variables;
@@ -122,7 +129,7 @@
   }
 
   Outline _newClassOutline(ClassDeclaration node, List<Outline> classContents) {
-    var nameToken = node.name;
+    var nameToken = node.namePart.typeName;
     var name = nameToken.lexeme;
     var element = Element(
       ElementKind.CLASS,
@@ -133,7 +140,7 @@
         isAbstract: node.abstractKeyword != null,
       ),
       location: _getLocationToken(nameToken),
-      typeParameters: _getTypeParametersStr(node.typeParameters),
+      typeParameters: _getTypeParametersStr(node.namePart.typeParameters),
     );
     return _nodeOutline(node, element, classContents);
   }
@@ -156,10 +163,11 @@
   }
 
   Outline _newConstructorOutline(ConstructorDeclaration constructor) {
-    var returnType = constructor.returnType;
-    var name = returnType.name;
-    var offset = returnType.offset;
-    var length = returnType.length;
+    // TODO(scheglov): support primary constructors
+    var typeName = constructor.typeName!;
+    var name = typeName.name;
+    var offset = typeName.offset;
+    var length = typeName.length;
     var constructorNameToken = constructor.name;
     var isPrivate = false;
     if (constructorNameToken != null) {
@@ -201,7 +209,7 @@
   }
 
   Outline _newEnumOutline(EnumDeclaration node, List<Outline> children) {
-    var nameToken = node.name;
+    var nameToken = node.namePart.typeName;
     var name = nameToken.lexeme;
     var element = Element(
       ElementKind.ENUM,
@@ -229,6 +237,8 @@
       location = _getLocationNode(onClause.extendedType);
     }
 
+    var extendedType = node.onClause?.extendedType;
+
     var element = Element(
       ElementKind.EXTENSION,
       name,
@@ -238,6 +248,7 @@
       ),
       location: location,
       typeParameters: _getTypeParametersStr(node.typeParameters),
+      extendedType: extendedType != null ? _safeToSource(extendedType) : null,
     );
     return _nodeOutline(node, element, extensionContents);
   }
@@ -246,7 +257,7 @@
     ExtensionTypeDeclaration node,
     List<Outline> extensionContents,
   ) {
-    var nameToken = node.name;
+    var nameToken = node.primaryConstructor.typeName;
     var name = nameToken.lexeme;
     var element = Element(
       ElementKind.EXTENSION_TYPE,
@@ -256,7 +267,9 @@
         isDeprecated: _hasDeprecated(node.metadata),
       ),
       location: _getLocationToken(nameToken),
-      typeParameters: _getTypeParametersStr(node.typeParameters),
+      typeParameters: _getTypeParametersStr(
+        node.primaryConstructor.typeParameters,
+      ),
     );
     return _nodeOutline(node, element, extensionContents);
   }
@@ -513,8 +526,10 @@
   /// Whether the list of [annotations] includes a `deprecated` annotation.
   static bool _hasDeprecated(List<Annotation> annotations) {
     for (var annotation in annotations) {
-      if (annotation.elementAnnotation?.isDeprecated ?? false) {
-        return true;
+      if (annotation.elementAnnotation case var element?) {
+        if (element.isDeprecated && element.deprecationKind == 'use') {
+          return true;
+        }
       }
     }
     return false;
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index 1649fe9..a07cc76 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -28,13 +28,17 @@
   List<proto.Override> compute() {
     for (var unitMember in _unit.declarations) {
       if (unitMember is ClassDeclaration) {
-        _classMembers(unitMember.members);
+        if (unitMember.body case BlockClassBody body) {
+          _classMembers(body.members);
+        }
       } else if (unitMember is EnumDeclaration) {
-        _classMembers(unitMember.members);
+        _classMembers(unitMember.body.members);
       } else if (unitMember is ExtensionTypeDeclaration) {
-        _classMembers(unitMember.members);
+        if (unitMember.body case BlockClassBody body) {
+          _classMembers(body.members);
+        }
       } else if (unitMember is MixinDeclaration) {
-        _classMembers(unitMember.members);
+        _classMembers(unitMember.body.members);
       }
     }
     return _overrides;
diff --git a/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart b/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart
index 0cffc88..94c7f2b 100644
--- a/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart
+++ b/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart
@@ -148,6 +148,7 @@
 
   static bool _isConstructorDeclarationReturnType(SimpleIdentifier node) {
     var parent = node.parent;
-    return parent is ConstructorDeclaration && parent.returnType == node;
+    // TODO(scheglov): support primary constructors
+    return parent is ConstructorDeclaration && parent.typeName! == node;
   }
 }
diff --git a/pkg/analysis_server/lib/src/diagnostic.dart b/pkg/analysis_server/lib/src/diagnostic.dart
new file mode 100644
index 0000000..c72add3
--- /dev/null
+++ b/pkg/analysis_server/lib/src/diagnostic.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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 'diagnostic.dart' as diag;
+
+part 'package:analysis_server/src/diagnostic.g.dart';
diff --git a/pkg/analysis_server/lib/src/diagnostic.g.dart b/pkg/analysis_server/lib/src/diagnostic.g.dart
new file mode 100644
index 0000000..c6d2b89
--- /dev/null
+++ b/pkg/analysis_server/lib/src/diagnostic.g.dart
@@ -0,0 +1,426 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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.
+//
+// Instead modify 'pkg/analyzer/messages.yaml' and run
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
+
+// Code generation is easier using double quotes (since we can use json.convert
+// to quote strings).
+// ignore_for_file: prefer_single_quotes
+
+// Generated comments don't quite align with flutter style.
+// ignore_for_file: flutter_style_todos
+
+part of "package:analysis_server/src/diagnostic.dart";
+
+/// Parameters:
+/// Object p0: the conflicting key
+/// Object p1: the key that it conflicts with
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+conflictingKey = DiagnosticWithArguments(
+  name: 'conflicting_key',
+  problemMessage: "The key '{0}' can't be used when '{1}' is also used.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'conflicting_key',
+  withArguments: _withArgumentsConflictingKey,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedPrimary =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'expected_primary',
+      problemMessage: "Expected either an identifier or a string literal.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'expected_primary',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the old kind
+/// Object p1: the new kind
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+incompatibleElementKind = DiagnosticWithArguments(
+  name: 'incompatible_element_kind',
+  problemMessage:
+      "An element of kind '{0}' can't be replaced by an element of kind '{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'incompatible_element_kind',
+  withArguments: _withArgumentsIncompatibleElementKind,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the change kind that is invalid
+/// Object p1: the element kind for the transform
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidChangeForKind = DiagnosticWithArguments(
+  name: 'invalid_change_for_kind',
+  problemMessage:
+      "A change of type '{0}' can't be used for an element of kind '{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_change_for_kind',
+  withArguments: _withArgumentsInvalidChangeForKind,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the character that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+invalidCharacter = DiagnosticWithArguments(
+  name: 'invalid_character',
+  problemMessage: "Invalid character '{0}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_character',
+  withArguments: _withArgumentsInvalidCharacter,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the actual type of the key
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+invalidKey = DiagnosticWithArguments(
+  name: 'invalid_key',
+  problemMessage: "Keys must be of type 'String' but found the type '{0}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_key',
+  withArguments: _withArgumentsInvalidKey,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the list of valid parameter styles
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+invalidParameterStyle = DiagnosticWithArguments(
+  name: 'invalid_parameter_style',
+  problemMessage: "The parameter style must be one of the following: {0}.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_parameter_style',
+  withArguments: _withArgumentsInvalidParameterStyle,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidRequiredIf = DiagnosticWithoutArgumentsImpl(
+  name: 'invalid_required_if',
+  problemMessage:
+      "The key 'requiredIf' can only be used with optional named parameters.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_required_if',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the key with which the value is associated
+/// Object p1: the expected type of the value
+/// Object p2: the actual type of the value
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+invalidValue = DiagnosticWithArguments(
+  name: 'invalid_value',
+  problemMessage:
+      "The value of '{0}' should be of type '{1}' but is of type '{2}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_value',
+  withArguments: _withArgumentsInvalidValue,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// Parameters:
+/// Object p0: the key with which the value is associated
+/// Object p1: the allowed values as a comma-separated list
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidValueOneOf = DiagnosticWithArguments(
+  name: 'invalid_value_one_of',
+  problemMessage: "The value of '{0}' must be one of the following: '{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'invalid_value_one_of',
+  withArguments: _withArgumentsInvalidValueOneOf,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the missing key
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+missingKey = DiagnosticWithArguments(
+  name: 'missing_key',
+  problemMessage: "Missing the required key '{0}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'missing_key',
+  withArguments: _withArgumentsMissingKey,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the list of valid keys
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+missingOneOfMultipleKeys = DiagnosticWithArguments(
+  name: 'missing_one_of_multiple_keys',
+  problemMessage: "Exactly one of the following keys must be provided: {0}.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'missing_one_of_multiple_keys',
+  withArguments: _withArgumentsMissingOneOfMultipleKeys,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingTemplateEnd =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'missing_template_end',
+      problemMessage: "Missing the end brace for the template.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'missing_template_end',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: a description of the expected kinds of tokens
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+missingToken = DiagnosticWithArguments(
+  name: 'missing_token',
+  problemMessage: "Expected to find {0}.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'missing_token',
+  withArguments: _withArgumentsMissingToken,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingUri = DiagnosticWithoutArgumentsImpl(
+  name: 'missing_uri',
+  problemMessage: "At least one URI must be provided.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'missing_uri',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the missing key
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+undefinedVariable = DiagnosticWithArguments(
+  name: 'undefined_variable',
+  problemMessage: "The variable '{0}' isn't defined.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'undefined_variable',
+  withArguments: _withArgumentsUndefinedVariable,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the token that was unexpectedly found
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unexpectedTransformSetToken = DiagnosticWithArguments(
+  name: 'unexpected_transform_set_token',
+  problemMessage: "Didn't expect to find {0}.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'unexpected_transform_set_token',
+  withArguments: _withArgumentsUnexpectedTransformSetToken,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: a description of the expected kind of token
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unknownAccessor = DiagnosticWithArguments(
+  name: 'unknown_accessor',
+  problemMessage: "The accessor '{0}' is invalid.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'unknown_accessor',
+  withArguments: _withArgumentsUnknownAccessor,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the unsupported key
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unsupportedKey = DiagnosticWithArguments(
+  name: 'unsupported_key',
+  problemMessage: "The key '{0}' isn't supported.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'unsupported_key',
+  withArguments: _withArgumentsUnsupportedKey,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unsupportedStatic =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'unsupported_static',
+      problemMessage:
+          "The key 'static' is only supported for elements in a class, enum, "
+          "extension, or mixin.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'unsupported_static',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unsupportedVersion =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'unsupported_version',
+      problemMessage: "Only version '1' is supported at this time.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'unsupported_version',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: a description of the expected kind of token
+/// Object p1: a description of the actual kind of token
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+wrongToken = DiagnosticWithArguments(
+  name: 'wrong_token',
+  problemMessage: "Expected to find {0}, but found {1}.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'wrong_token',
+  withArguments: _withArgumentsWrongToken,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the message produced by the YAML parser
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+yamlSyntaxError = DiagnosticWithArguments(
+  name: 'yaml_syntax_error',
+  problemMessage: "Parse error: {0}",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'yaml_syntax_error',
+  withArguments: _withArgumentsYamlSyntaxError,
+  expectedTypes: [ExpectedType.object],
+);
+
+LocatableDiagnostic _withArgumentsConflictingKey({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingKey, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsIncompatibleElementKind({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.incompatibleElementKind, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidChangeForKind({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidChangeForKind, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCharacter({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.invalidCharacter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidKey({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.invalidKey, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidParameterStyle({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.invalidParameterStyle, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidValue({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidValue, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidValueOneOf({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidValueOneOf, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMissingKey({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.missingKey, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingOneOfMultipleKeys({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.missingOneOfMultipleKeys, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingToken({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.missingToken, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedVariable({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedVariable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnexpectedTransformSetToken({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unexpectedTransformSetToken, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnknownAccessor({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unknownAccessor, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedKey({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unsupportedKey, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsWrongToken({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongToken, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsYamlSyntaxError({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.yamlSyntaxError, [p0]);
+}
diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
index 2e167eb..7b82233 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
@@ -97,7 +97,7 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    _addOccurrence(node.declaredFragment!.element, node.name);
+    _addOccurrence(node.declaredFragment!.element, node.namePart.typeName);
 
     super.visitClassDeclaration(node);
   }
@@ -116,7 +116,8 @@
     } else {
       _addOccurrence(
         node.declaredFragment!.element,
-        node.returnType.beginToken,
+        // TODO(scheglov): support primary constructors
+        node.typeName!.beginToken,
       );
     }
 
@@ -182,7 +183,7 @@
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    _addOccurrence(node.declaredFragment!.element, node.name);
+    _addOccurrence(node.declaredFragment!.element, node.namePart.typeName);
 
     super.visitEnumDeclaration(node);
   }
@@ -205,7 +206,10 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    _addOccurrence(node.declaredFragment!.element, node.name);
+    _addOccurrence(
+      node.declaredFragment!.element,
+      node.primaryConstructor.typeName,
+    );
 
     super.visitExtensionTypeDeclaration(node);
   }
@@ -306,12 +310,12 @@
   }
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    if (node.constructorName case var constructorName?) {
-      _addOccurrence(node.constructorFragment!.element, constructorName.name);
+  void visitPrimaryConstructorName(PrimaryConstructorName node) {
+    if (node.parent case PrimaryConstructorDeclaration primary) {
+      _addOccurrence(primary.declaredFragment!.element, node.name);
     }
 
-    super.visitRepresentationDeclaration(node);
+    super.visitPrimaryConstructorName(node);
   }
 
   @override
@@ -338,8 +342,8 @@
     // for the constructor (not the type).
     if (node.parent case ConstructorDeclaration(
       :var name,
-      :var returnType,
-    ) when name == null && node == returnType) {
+      :var typeName,
+    ) when name == null && node == typeName) {
       return;
     }
 
@@ -412,7 +416,7 @@
       canonicalElement = canonicalElement.field;
     } else if (canonicalElement case PropertyAccessorElement(
       :var variable,
-    ) when !variable.isSynthetic) {
+    ) when variable.isOriginDeclaration) {
       canonicalElement = variable;
     }
     return canonicalElement?.baseElement;
diff --git a/pkg/analysis_server/lib/src/g3/fixes.dart b/pkg/analysis_server/lib/src/g3/fixes.dart
index 6e2f2c5..ece050d 100644
--- a/pkg/analysis_server/lib/src/g3/fixes.dart
+++ b/pkg/analysis_server/lib/src/g3/fixes.dart
@@ -63,6 +63,7 @@
       resourceProvider: _resourceProvider,
       sdkPath: sdkPath,
       packagesFile: packageConfigPath,
+      withFineDependencies: true,
     );
     var analysisContext = collection.contextFor(path);
     var analysisSession = analysisContext.currentSession;
diff --git a/pkg/analysis_server/lib/src/g3/utilities.dart b/pkg/analysis_server/lib/src/g3/utilities.dart
index 61d6508..3cff2a7 100644
--- a/pkg/analysis_server/lib/src/g3/utilities.dart
+++ b/pkg/analysis_server/lib/src/g3/utilities.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
@@ -37,11 +38,7 @@
 ParseStringResult sortDirectives(String contents, {String? fileName}) {
   var (unit, diagnostics) = _parse(contents, fullName: fileName);
   var parseErrors = diagnostics
-      .where(
-        (d) =>
-            d.diagnosticCode is ScannerErrorCode ||
-            d.diagnosticCode is ParserErrorCode,
-      )
+      .where((d) => d.diagnosticCode.type == DiagnosticType.SYNTACTIC_ERROR)
       .toList();
   if (parseErrors.isNotEmpty) {
     return ParseStringResultImpl(contents, unit, parseErrors);
diff --git a/pkg/analysis_server/lib/src/handler/legacy/completion_utils.dart b/pkg/analysis_server/lib/src/handler/legacy/completion_utils.dart
index c17809d..b4f6452 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/completion_utils.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/completion_utils.dart
@@ -78,8 +78,8 @@
           candidate.completion,
           candidate.selectionOffset,
           0,
-          false,
-          false,
+          false /*isDeprecated*/,
+          false /*isPotential*/,
           displayText: data?.displayText ?? candidate.displayText,
         ),
         FunctionCall functionCall => _getFunctionCallSuggestion(functionCall),
@@ -104,8 +104,8 @@
           candidate.completion,
           candidate.completion.length,
           0,
-          false,
-          false,
+          false /*isDeprecated*/,
+          false /*isPotential*/,
           returnType: candidate.field.type.getDisplayString(),
           displayText: data?.displayText ?? candidate.name,
         ),
@@ -130,8 +130,8 @@
         candidate.completion,
         candidate.selectionOffset,
         0,
-        false,
-        false,
+        false /*isDeprecated*/,
+        false /*isPotential*/,
         displayText: candidate.displayText,
       );
     case ConstructorSuggestion():
@@ -627,8 +627,8 @@
     completion,
     completion.length,
     0,
-    false,
-    false,
+    false /*isDeprecated*/,
+    false /*isPotential*/,
     displayText: completion,
     element: _getElementForFunctionCall(
       type,
@@ -689,8 +689,8 @@
     candidate.completion,
     candidate.selectionOffset,
     0,
-    false,
-    false,
+    false /*isDeprecated*/,
+    false /*isPotential*/,
     parameterName: name,
     parameterType: type,
     replacementLength: candidate.replacementLength,
@@ -772,8 +772,8 @@
     completion,
     selectionRange.offset - offsetDelta,
     selectionRange.length,
-    element.metadata.hasDeprecated,
-    false,
+    element.isDeprecatedWithKind('use'),
+    false /*isPotential*/,
     displayText: displayText,
     requiredImports: overrideImports.toList(),
   );
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart
index 2b51554..2a56261 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart
@@ -45,6 +45,7 @@
         resourceProvider: server.resourceProvider,
         sdkPath: server.sdkPath,
         byteStore: server.byteStore,
+        withFineDependencies: true,
       );
       var workspace = DartChangeWorkspace(
         collection.contexts.map((c) => c.currentSession).toList(),
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart
index aaefa81..acbfc4a 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart
@@ -63,6 +63,7 @@
       includedPaths: params.directories,
       resourceProvider: server.resourceProvider,
       sdkPath: server.sdkPath,
+      withFineDependencies: true,
     );
     var sourceFileEdits = <SourceFileEdit>[];
     for (var context in collection.contexts) {
diff --git a/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart b/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart
index 4d5ccd1..591076e 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/legacy_handler.dart
@@ -10,7 +10,7 @@
 import 'package:analysis_server/src/protocol/protocol_internal.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:analyzer/src/utilities/cancellation.dart';
 import 'package:dart_style/dart_style.dart';
@@ -82,8 +82,7 @@
   int numberOfSyntacticErrors(List<Diagnostic> diagnostics) {
     var numScanParseErrors = 0;
     for (var diagnostic in diagnostics) {
-      if (diagnostic.diagnosticCode is ScannerErrorCode ||
-          diagnostic.diagnosticCode is ParserErrorCode) {
+      if (diagnostic.diagnosticCode.type == DiagnosticType.SYNTACTIC_ERROR) {
         numScanParseErrors++;
       }
     }
diff --git a/pkg/analysis_server/lib/src/legacy_analysis_server.dart b/pkg/analysis_server/lib/src/legacy_analysis_server.dart
index 33f0795..b7c6db2 100644
--- a/pkg/analysis_server/lib/src/legacy_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/legacy_analysis_server.dart
@@ -191,86 +191,80 @@
   /// Requests that don't match anything in this map will be passed to
   /// [LspOverLegacyHandler] for possible handling before returning an error.
   static final Map<String, HandlerGenerator> requestHandlerGenerators = {
-    ANALYSIS_REQUEST_GET_ERRORS: AnalysisGetErrorsHandler.new,
-    ANALYSIS_REQUEST_GET_HOVER: AnalysisGetHoverHandler.new,
-    ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS:
-        AnalysisGetImportedElementsHandler.new,
-    ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES: UnsupportedRequestHandler.new,
-    ANALYSIS_REQUEST_GET_NAVIGATION: AnalysisGetNavigationHandler.new,
-    ANALYSIS_REQUEST_GET_REACHABLE_SOURCES: UnsupportedRequestHandler.new,
-    ANALYSIS_REQUEST_GET_SIGNATURE: AnalysisGetSignatureHandler.new,
-    ANALYSIS_REQUEST_REANALYZE: AnalysisReanalyzeHandler.new,
-    ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS: AnalysisSetAnalysisRootsHandler.new,
-    ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS:
+    analysisRequestGetErrors: AnalysisGetErrorsHandler.new,
+    analysisRequestGetHover: AnalysisGetHoverHandler.new,
+    analysisRequestGetImportedElements: AnalysisGetImportedElementsHandler.new,
+    analysisRequestGetLibraryDependencies: UnsupportedRequestHandler.new,
+    analysisRequestGetNavigation: AnalysisGetNavigationHandler.new,
+    analysisRequestGetReachableSources: UnsupportedRequestHandler.new,
+    analysisRequestGetSignature: AnalysisGetSignatureHandler.new,
+    analysisRequestReanalyze: AnalysisReanalyzeHandler.new,
+    analysisRequestSetAnalysisRoots: AnalysisSetAnalysisRootsHandler.new,
+    analysisRequestSetGeneralSubscriptions:
         AnalysisSetGeneralSubscriptionsHandler.new,
-    ANALYSIS_REQUEST_SET_PRIORITY_FILES: AnalysisSetPriorityFilesHandler.new,
-    ANALYSIS_REQUEST_SET_SUBSCRIPTIONS: AnalysisSetSubscriptionsHandler.new,
-    ANALYSIS_REQUEST_UPDATE_CONTENT: AnalysisUpdateContentHandler.new,
-    ANALYSIS_REQUEST_UPDATE_OPTIONS: AnalysisUpdateOptionsHandler.new,
+    analysisRequestSetPriorityFiles: AnalysisSetPriorityFilesHandler.new,
+    analysisRequestSetSubscriptions: AnalysisSetSubscriptionsHandler.new,
+    analysisRequestUpdateContent: AnalysisUpdateContentHandler.new,
+    analysisRequestUpdateOptions: AnalysisUpdateOptionsHandler.new,
 
-    ANALYTICS_REQUEST_IS_ENABLED: AnalyticsIsEnabledHandler.new,
-    ANALYTICS_REQUEST_ENABLE: AnalyticsEnableHandler.new,
-    ANALYTICS_REQUEST_SEND_EVENT: AnalyticsSendEventHandler.new,
-    ANALYTICS_REQUEST_SEND_TIMING: AnalyticsSendTimingHandler.new,
+    analyticsRequestIsEnabled: AnalyticsIsEnabledHandler.new,
+    analyticsRequestEnable: AnalyticsEnableHandler.new,
+    analyticsRequestSendEvent: AnalyticsSendEventHandler.new,
+    analyticsRequestSendTiming: AnalyticsSendTimingHandler.new,
 
-    COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2:
+    completionRequestGetSuggestionDetails2:
         CompletionGetSuggestionDetails2Handler.new,
-    COMPLETION_REQUEST_GET_SUGGESTIONS2: CompletionGetSuggestions2Handler.new,
+    completionRequestGetSuggestions2: CompletionGetSuggestions2Handler.new,
 
-    DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS: DiagnosticGetDiagnosticsHandler.new,
-    DIAGNOSTIC_REQUEST_GET_SERVER_PORT: DiagnosticGetServerPortHandler.new,
+    diagnosticRequestGetDiagnostics: DiagnosticGetDiagnosticsHandler.new,
+    diagnosticRequestGetServerPort: DiagnosticGetServerPortHandler.new,
 
-    EDIT_REQUEST_FORMAT: EditFormatHandler.new,
-    EDIT_REQUEST_FORMAT_IF_ENABLED: EditFormatIfEnabledHandler.new,
-    EDIT_REQUEST_GET_ASSISTS: EditGetAssistsHandler.new,
-    EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS:
+    editRequestFormat: EditFormatHandler.new,
+    editRequestFormatIfEnabled: EditFormatIfEnabledHandler.new,
+    editRequestGetAssists: EditGetAssistsHandler.new,
+    editRequestGetAvailableRefactorings:
         EditGetAvailableRefactoringsHandler.new,
-    EDIT_REQUEST_BULK_FIXES: EditBulkFixes.new,
-    EDIT_REQUEST_GET_FIXES: EditGetFixesHandler.new,
-    EDIT_REQUEST_GET_REFACTORING: EditGetRefactoringHandler.new,
-    EDIT_REQUEST_IMPORT_ELEMENTS: EditImportElementsHandler.new,
-    EDIT_REQUEST_ORGANIZE_DIRECTIVES: EditOrganizeDirectivesHandler.new,
-    EDIT_REQUEST_SORT_MEMBERS: EditSortMembersHandler.new,
-    EDIT_REQUEST_GET_STATEMENT_COMPLETION:
-        EditGetStatementCompletionHandler.new,
-    EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE:
+    editRequestBulkFixes: EditBulkFixes.new,
+    editRequestGetFixes: EditGetFixesHandler.new,
+    editRequestGetRefactoring: EditGetRefactoringHandler.new,
+    editRequestImportElements: EditImportElementsHandler.new,
+    editRequestOrganizeDirectives: EditOrganizeDirectivesHandler.new,
+    editRequestSortMembers: EditSortMembersHandler.new,
+    editRequestGetStatementCompletion: EditGetStatementCompletionHandler.new,
+    editRequestIsPostfixCompletionApplicable:
         EditIsPostfixCompletionApplicableHandler.new,
-    EDIT_REQUEST_GET_POSTFIX_COMPLETION: EditGetPostfixCompletionHandler.new,
-    EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES:
+    editRequestGetPostfixCompletion: EditGetPostfixCompletionHandler.new,
+    editRequestListPostfixCompletionTemplates:
         EditListPostfixCompletionTemplatesHandler.new,
 
-    EXECUTION_REQUEST_CREATE_CONTEXT: ExecutionCreateContextHandler.new,
-    EXECUTION_REQUEST_DELETE_CONTEXT: ExecutionDeleteContextHandler.new,
-    EXECUTION_REQUEST_GET_SUGGESTIONS: ExecutionGetSuggestionsHandler.new,
-    EXECUTION_REQUEST_MAP_URI: ExecutionMapUriHandler.new,
-    EXECUTION_REQUEST_SET_SUBSCRIPTIONS: ExecutionSetSubscriptionsHandler.new,
+    executionRequestCreateContext: ExecutionCreateContextHandler.new,
+    executionRequestDeleteContext: ExecutionDeleteContextHandler.new,
+    executionRequestGetSuggestions: ExecutionGetSuggestionsHandler.new,
+    executionRequestMapUri: ExecutionMapUriHandler.new,
+    executionRequestSetSubscriptions: ExecutionSetSubscriptionsHandler.new,
 
-    FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION:
-        FlutterGetWidgetDescriptionHandler.new,
-    FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE:
+    flutterRequestGetWidgetDescription: FlutterGetWidgetDescriptionHandler.new,
+    flutterRequestSetWidgetPropertyValue:
         FlutterSetWidgetPropertyValueHandler.new,
-    FLUTTER_REQUEST_SET_SUBSCRIPTIONS: FlutterSetSubscriptionsHandler.new,
+    flutterRequestSetSubscriptions: FlutterSetSubscriptionsHandler.new,
 
-    SEARCH_REQUEST_FIND_ELEMENT_REFERENCES:
-        SearchFindElementReferencesHandler.new,
-    SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS:
+    searchRequestFindElementReferences: SearchFindElementReferencesHandler.new,
+    searchRequestFindMemberDeclarations:
         SearchFindMemberDeclarationsHandler.new,
-    SEARCH_REQUEST_FIND_MEMBER_REFERENCES:
-        SearchFindMemberReferencesHandler.new,
-    SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS:
+    searchRequestFindMemberReferences: SearchFindMemberReferencesHandler.new,
+    searchRequestFindTopLevelDeclarations:
         SearchFindTopLevelDeclarationsHandler.new,
-    SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS:
+    searchRequestGetElementDeclarations:
         SearchGetElementDeclarationsHandler.new,
-    SEARCH_REQUEST_GET_TYPE_HIERARCHY: SearchGetTypeHierarchyHandler.new,
+    searchRequestGetTypeHierarchy: SearchGetTypeHierarchyHandler.new,
 
-    SERVER_REQUEST_CANCEL_REQUEST: ServerCancelRequestHandler.new,
-    SERVER_REQUEST_GET_VERSION: ServerGetVersionHandler.new,
-    SERVER_REQUEST_SET_CLIENT_CAPABILITIES:
-        ServerSetClientCapabilitiesHandler.new,
-    SERVER_REQUEST_SET_SUBSCRIPTIONS: ServerSetSubscriptionsHandler.new,
-    SERVER_REQUEST_SHUTDOWN: ServerShutdownHandler.new,
+    serverRequestCancelRequest: ServerCancelRequestHandler.new,
+    serverRequestGetVersion: ServerGetVersionHandler.new,
+    serverRequestSetClientCapabilities: ServerSetClientCapabilitiesHandler.new,
+    serverRequestSetSubscriptions: ServerSetSubscriptionsHandler.new,
+    serverRequestShutdown: ServerShutdownHandler.new,
 
-    LSP_REQUEST_HANDLE: LspOverLegacyHandler.new,
+    lspRequestHandle: LspOverLegacyHandler.new,
   };
 
   /// The channel from which requests are received and to which responses should
@@ -482,6 +476,9 @@
   set clientCapabilities(ServerSetClientCapabilitiesParams capabilities) {
     _clientCapabilities = capabilities;
 
+    // TODO(dantup): If we can confirm that IntelliJ did not ship code that
+    //  sets supportsUris=true, then we may be able to entirely remove the
+    //  uriConverter and all the calls through it.
     if (capabilities.supportsUris ?? false) {
       // URI support implies LSP, as that's the only way to access (and get
       // change notifications for) custom-scheme files.
@@ -768,7 +765,7 @@
     var response = await sendRequest(
       Request(
         id.toString(),
-        LSP_REQUEST_HANDLE,
+        lspRequestHandle,
         LspHandleParams(lspMessage).toJson(clientUriConverter: uriConverter),
       ),
     );
@@ -832,7 +829,7 @@
     bool fatal = false,
   }) {
     var msg = '$message: $exception';
-    if (stackTrace != null && exception is! CaughtException) {
+    if (stackTrace == null && exception is! CaughtException) {
       stackTrace = StackTrace.current;
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
index 8e3cb18..93b8257 100644
--- a/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
+++ b/pkg/analysis_server/lib/src/lsp/client_capabilities.dart
@@ -4,26 +4,6 @@
 
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 
-/// The key in the client capabilities experimental object that enables the Dart
-/// TextDocumentContentProvider.
-///
-/// The presence of this key indicates that the client supports our
-/// (non-standard) way of using TextDocumentContentProvider. This will need to
-/// continue to be supported after switching to standard LSP support for some
-/// period to support outdated extensions.
-const dartExperimentalTextDocumentContentProviderKey =
-    'supportsDartTextDocumentContentProvider';
-
-/// The original key used for [dartExperimentalTextDocumentContentProviderKey].
-///
-/// This is temporarily supported to avoid the macro support vanishing for users
-/// for a period if their SDK is updated before Dart-Code passes the standard
-/// flag.
-///
-const dartExperimentalTextDocumentContentProviderLegacyKey =
-    // TODO(dantup): Remove this after the next beta branch.
-    'supportsDartTextDocumentContentProviderEXP1';
-
 /// A fixed set of ClientCapabilities used for clients that may execute LSP
 /// requests without performing standard LSP initialization (such as a DTD
 /// client or LSP-over-Legacy).
@@ -127,11 +107,6 @@
   final Set<String> codeActionCommandParameterSupportedKinds;
   final bool supportsShowMessageRequest;
 
-  /// Whether the client supports the custom Dart TextDocumentContentProvider,
-  /// meaning it can request file contents from the server for custom URI
-  /// schemes.
-  final bool supportsDartExperimentalTextDocumentContentProvider;
-
   /// A set of commands that exist on the client that the server may call.
   final Set<String> supportedCommands;
 
@@ -251,8 +226,6 @@
       codeActionCommandParameterSupportedKinds:
           experimental.commandParameterKinds,
       supportsShowMessageRequest: experimental.showMessageRequest,
-      supportsDartExperimentalTextDocumentContentProvider:
-          experimental.dartTextDocumentContentProvider,
       supportedCommands: experimental.commands,
       experimentalCapabilitiesErrors: experimental.errors,
     );
@@ -293,7 +266,6 @@
     required this.experimentalSnippetTextEdit,
     required this.codeActionCommandParameterSupportedKinds,
     required this.supportsShowMessageRequest,
-    required this.supportsDartExperimentalTextDocumentContentProvider,
     required this.supportedCommands,
     required this.experimentalCapabilitiesErrors,
   });
@@ -319,14 +291,12 @@
 
   final bool snippetTextEdit;
   final Set<String> commandParameterKinds;
-  final bool dartTextDocumentContentProvider;
   final Set<String> commands;
   final bool showMessageRequest;
 
   _ExperimentalClientCapabilities({
     required this.snippetTextEdit,
     required this.commandParameterKinds,
-    required this.dartTextDocumentContentProvider,
     required this.commands,
     required this.showMessageRequest,
     required this.errors,
@@ -392,15 +362,6 @@
       commandParameters['supportedKinds'],
     );
 
-    // Macro/Augmentation content.
-    var dartContentValue =
-        experimental[dartExperimentalTextDocumentContentProviderKey] ??
-        experimental[dartExperimentalTextDocumentContentProviderLegacyKey];
-    var dartTextDocumentContentProvider = expectBool(
-      '.$dartExperimentalTextDocumentContentProviderKey',
-      dartContentValue,
-    );
-
     // Executable commands.
     var commands = expectNullableStringSet(
       '.commands',
@@ -423,7 +384,6 @@
     return _ExperimentalClientCapabilities(
       snippetTextEdit: snippetTextEdit ?? false,
       commandParameterKinds: commandParameterKinds ?? {},
-      dartTextDocumentContentProvider: dartTextDocumentContentProvider ?? false,
       commands: commands ?? {},
       showMessageRequest: showMessageRequest ?? false,
       errors: errors,
diff --git a/pkg/analysis_server/lib/src/lsp/completion_utils.dart b/pkg/analysis_server/lib/src/lsp/completion_utils.dart
index ea64f6c..8b69a39 100644
--- a/pkg/analysis_server/lib/src/lsp/completion_utils.dart
+++ b/pkg/analysis_server/lib/src/lsp/completion_utils.dart
@@ -680,7 +680,7 @@
   // Use the full signature in the details popup.
   var detail = fullSignature;
   if (element != null &&
-      element.metadata.hasDeprecated &&
+      element.isDeprecatedWithKind('use') &&
       !supportsDeprecated) {
     // If the item is deprecated and we don't support the native deprecated flag
     // then include it in the details.
diff --git a/pkg/analysis_server/lib/src/lsp/constants.dart b/pkg/analysis_server/lib/src/lsp/constants.dart
index e50a2c5..53388f6 100644
--- a/pkg/analysis_server/lib/src/lsp/constants.dart
+++ b/pkg/analysis_server/lib/src/lsp/constants.dart
@@ -152,10 +152,6 @@
   static const summary = Method('dart/textDocument/summary');
   static const super_ = Method('dart/textDocument/super');
   static const imports = Method('dart/textDocument/imports');
-  static const dartTextDocumentContent = Method('dart/textDocumentContent');
-  static const dartTextDocumentContentDidChange = Method(
-    'dart/textDocumentContentDidChange',
-  );
 
   /// Method for requesting the set of editable arguments at a location in a
   /// document.
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_in_workspace.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_in_workspace.dart
index d757902..3c46fef 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_in_workspace.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all_in_workspace.dart
@@ -58,29 +58,35 @@
     var workspace = DartChangeWorkspace(await server.currentSessions);
     var processor = BulkFixProcessor(server.instrumentationService, workspace);
 
-    var result = await processor.fixErrors(
-      server.contextManager.analysisContexts,
-    );
-    var errorMessage = result.errorMessage;
-    if (errorMessage != null) {
-      return error(ErrorCodes.RequestFailed, errorMessage);
-    }
+    progress.begin('Computing fixes…');
+    try {
+      var result = await processor.fixErrors(
+        server.contextManager.analysisContexts,
+      );
 
-    var changeBuilder = result.builder!;
-    var change = changeBuilder.sourceChange;
-    if (change.edits.isEmpty) {
-      return success(null);
-    }
+      var errorMessage = result.errorMessage;
+      if (errorMessage != null) {
+        return error(ErrorCodes.RequestFailed, errorMessage);
+      }
 
-    var edit = createWorkspaceEdit(
-      server,
-      clientCapabilities,
-      change,
-      annotateChanges: requireConfirmation
-          ? ChangeAnnotations.requireConfirmation
-          : ChangeAnnotations.include,
-    );
-    return sendWorkspaceEditToClient(edit);
+      var changeBuilder = result.builder!;
+      var change = changeBuilder.sourceChange;
+      if (change.edits.isEmpty) {
+        return success(null);
+      }
+
+      var edit = createWorkspaceEdit(
+        server,
+        clientCapabilities,
+        change,
+        annotateChanges: requireConfirmation
+            ? ChangeAnnotations.requireConfirmation
+            : ChangeAnnotations.include,
+      );
+      return sendWorkspaceEditToClient(edit);
+    } finally {
+      progress.end();
+    }
   }
 }
 
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 dd2cae2..bc79090 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
@@ -11,8 +11,7 @@
 import 'package:analysis_server/src/lsp/source_edits.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart' as engine;
-import 'package:analyzer/src/dart/scanner/scanner.dart' as engine;
-import 'package:analyzer/src/generated/parser.dart' as engine;
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 
 abstract class SimpleEditCommandHandler<S extends AnalysisServer>
@@ -23,9 +22,7 @@
 
   bool hasScanParseErrors(List<engine.Diagnostic> diagnostics) {
     return diagnostics.any(
-      (d) =>
-          d.diagnosticCode is engine.ScannerErrorCode ||
-          d.diagnosticCode is engine.ParserErrorCode,
+      (d) => d.diagnosticCode.type == DiagnosticType.SYNTACTIC_ERROR,
     );
   }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/custom/editable_arguments/handler_editable_arguments.dart b/pkg/analysis_server/lib/src/lsp/handlers/custom/editable_arguments/handler_editable_arguments.dart
index 60a8288..b5a74e4 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/custom/editable_arguments/handler_editable_arguments.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/custom/editable_arguments/handler_editable_arguments.dart
@@ -245,7 +245,7 @@
       isRequired: parameter.isRequired,
       isNullable:
           parameter.type.nullabilitySuffix == NullabilitySuffix.question,
-      isDeprecated: parameter.metadata.hasDeprecated,
+      isDeprecated: parameter.isDeprecatedWithKind('use'),
       isEditable: notEditableReason == null,
       notEditableReason: notEditableReason,
     );
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_dart_text_document_content_provider.dart b/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_dart_text_document_content_provider.dart
deleted file mode 100644
index 0e1ab8b..0000000
--- a/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_dart_text_document_content_provider.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analysis_server/lsp_protocol/protocol.dart';
-import 'package:analysis_server/src/lsp/constants.dart';
-import 'package:analysis_server/src/lsp/error_or.dart';
-import 'package:analysis_server/src/lsp/handlers/handlers.dart';
-import 'package:analysis_server/src/lsp/registration/feature_registration.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-
-typedef StaticOptions = DartTextDocumentContentProviderRegistrationOptions?;
-
-class DartTextDocumentContentProviderHandler
-    extends
-        SharedMessageHandler<
-          DartTextDocumentContentParams,
-          DartTextDocumentContent
-        > {
-  DartTextDocumentContentProviderHandler(super.server);
-
-  @override
-  Method get handlesMessage => CustomMethods.dartTextDocumentContent;
-
-  @override
-  LspJsonHandler<DartTextDocumentContentParams> get jsonHandler =>
-      DartTextDocumentContentParams.jsonHandler;
-
-  @override
-  bool get requiresTrustedCaller => false;
-
-  @override
-  Future<ErrorOr<DartTextDocumentContent>> handle(
-    DartTextDocumentContentParams params,
-    MessageInfo message,
-    CancellationToken token,
-  ) async {
-    var allowedSchemes = server.uriConverter.supportedNonFileSchemes;
-    var uri = params.uri;
-
-    if (!allowedSchemes.contains(uri.scheme)) {
-      var supportedSchemesString = allowedSchemes.isEmpty
-          ? '(none)'
-          : allowedSchemes.map((scheme) => "'$scheme'").join(', ');
-      return error(
-        ErrorCodes.InvalidParams,
-        "Fetching content for scheme '${uri.scheme}' is not supported. "
-        'Supported schemes are $supportedSchemesString.',
-      );
-    }
-
-    return pathOfUri(uri).mapResult((filePath) async {
-      var file = server.getAnalysisDriver(filePath)?.getFileSync(filePath);
-      var content = file is FileResult ? file.content : null;
-
-      return success(DartTextDocumentContent(content: content));
-    });
-  }
-}
-
-class DartTextDocumentContentProviderRegistrations extends FeatureRegistration
-    with SingleDynamicRegistration, StaticRegistration<StaticOptions> {
-  @override
-  final DartTextDocumentContentProviderRegistrationOptions options;
-
-  DartTextDocumentContentProviderRegistrations(super.info)
-    : options = DartTextDocumentContentProviderRegistrationOptions(
-        schemes: info.customDartSchemes.toList(),
-      );
-
-  @override
-  Method get registrationMethod => CustomMethods.dartTextDocumentContent;
-
-  @override
-  StaticOptions get staticOptions => options;
-
-  @override
-  bool get supportsDynamic => false;
-
-  @override
-  bool get supportsStatic => true;
-}
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_summary.dart b/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_summary.dart
index c0925c9..2ced1a3 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_summary.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_summary.dart
@@ -252,7 +252,11 @@
   }
 
   void summarizeField(FieldElement element) {
-    if (element.isSynthetic || element.isEnumConstant) return;
+    if (element.isOriginGetterSetter ||
+        element.isEnumConstant ||
+        element.isOriginEnumValues) {
+      return;
+    }
 
     var name = element.name;
     if (name == null) return;
@@ -337,7 +341,7 @@
   }
 
   void summarizeGetter(GetterElement element) {
-    if (element.isSynthetic) return;
+    if (element.isOriginVariable) return;
 
     var name = element.name;
     if (name == null) return;
@@ -444,7 +448,7 @@
   }
 
   void summarizeSetter(SetterElement element) {
-    if (element.isSynthetic) return;
+    if (element.isOriginVariable) return;
 
     var name = element.name;
     if (name == null) return;
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index f0152d7..f2f1d24 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -74,7 +74,7 @@
 
   @override
   ToJsonable? get options => CodeActionRegistrationOptions(
-    documentSelector: fullySupportedTypes,
+    documentSelector: supportedTypes,
     codeActionKinds: DartCodeActionKind.serverSupportedKinds,
   );
 
@@ -94,6 +94,22 @@
         )
       : Either2.t1(true);
 
+  /// Types of documents for which code actions are provided.
+  ///
+  /// Includes Dart files, plugin types, pubspec.yaml, and analysis_options.yaml.
+  List<TextDocumentFilterScheme> get supportedTypes {
+    return
+    // Join in a Set because fullSupportedTypes includes plugin registrations
+    // and might overlap.
+    {
+      ...fullySupportedTypes,
+      // We support code actions in pubspec+analysis_options even though they're
+      // not "fully supported" (most handlers do not support them).
+      pubspecFile,
+      analysisOptionsFile,
+    }.toList();
+  }
+
   @override
   bool get supportsDynamic => clientDynamic.codeActions;
 }
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 201ffb8..aed57c1 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_definition.dart
@@ -227,7 +227,7 @@
     // For synthetic getters created for fields, we need to access the associated
     // variable to get the codeOffset/codeLength.
     if (codeFragment is PropertyAccessorFragment &&
-        codeFragment.element.isSynthetic) {
+        codeFragment.element.isOriginVariable) {
       codeFragment = codeFragment.element.nonSynthetic.firstFragment;
     }
 
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart
index a4914b1..63165ff 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_document_color_presentation.dart
@@ -70,8 +70,9 @@
   Future<ColorPresentation> _createColorPresentation({
     required ResolvedUnitResult unit,
     required SourceRange editRange,
-    required InterfaceElement colorType,
-    required String typeName,
+    required InterfaceElement? writtenType,
+    required String labelPrefix,
+    String invocationPrefix = '',
     required String invocationString,
     required bool includeConstKeyword,
   }) async {
@@ -81,7 +82,10 @@
         if (includeConstKeyword) {
           builder.write('const ');
         }
-        builder.writeType(colorType.thisType);
+        if (writtenType != null) {
+          builder.writeType(writtenType.thisType);
+        }
+        builder.write(invocationPrefix);
         builder.write(invocationString);
       });
     });
@@ -104,7 +108,7 @@
     );
 
     return ColorPresentation(
-      label: '$typeName$invocationString',
+      label: '$labelPrefix$invocationString',
       textEdit: toTextEdit(unit.lineInfo, mainEdit),
       additionalTextEdits: otherEdits.isNotEmpty
           ? otherEdits.map((edit) => toTextEdit(unit.lineInfo, edit)).toList()
@@ -158,10 +162,13 @@
         return success([]);
       }
 
-      var requiresConstKeyword = _willRequireConstKeyword(
-        editRange.offset,
-        unit,
-      );
+      var node = unit.unit.nodeCovering(offset: editRange.offset);
+      var requiresConstKeyword = _willRequireConstKeyword(node);
+
+      // For shorthands, we don't need to write the type in code.
+      var isDotShorthand = node is DotShorthandConstructorInvocation;
+      var writtenType = isDotShorthand ? null : colorType;
+
       var colorValue = _colorValueForComponents(alpha, red, green, blue);
       var colorValueHex =
           '0x${colorValue.toRadixString(16).toUpperCase().padLeft(8, '0')}';
@@ -169,8 +176,8 @@
       var colorFromARGB = await _createColorPresentation(
         unit: unit,
         editRange: editRange,
-        colorType: colorType,
-        typeName: 'Color',
+        writtenType: writtenType,
+        labelPrefix: 'Color',
         invocationString: '.fromARGB($alpha, $red, $green, $blue)',
         includeConstKeyword: requiresConstKeyword,
       );
@@ -178,8 +185,8 @@
       var colorFromRGBO = await _createColorPresentation(
         unit: unit,
         editRange: editRange,
-        colorType: colorType,
-        typeName: 'Color',
+        writtenType: writtenType,
+        labelPrefix: 'Color',
         invocationString: '.fromRGBO($red, $green, $blue, $opacityDouble)',
         includeConstKeyword: requiresConstKeyword,
       );
@@ -187,8 +194,8 @@
       var colorFrom = await _createColorPresentation(
         unit: unit,
         editRange: editRange,
-        colorType: colorType,
-        typeName: 'Color',
+        writtenType: writtenType,
+        labelPrefix: 'Color',
         invocationString:
             '.from(alpha: $alphaDoubleRounded, red: $redDoubleRounded, '
             'green: $greenDoubleRounded, blue: $blueDoubleRounded)',
@@ -198,8 +205,10 @@
       var colorDefault = await _createColorPresentation(
         unit: unit,
         editRange: editRange,
-        colorType: colorType,
-        typeName: 'Color',
+        writtenType: writtenType,
+        labelPrefix: 'Color',
+        // For unnamed constructors, we need a `.new` prefix for shorthands.
+        invocationPrefix: isDotShorthand ? '.new' : '',
         invocationString: '($colorValueHex)',
         includeConstKeyword: requiresConstKeyword,
       );
@@ -226,8 +235,7 @@
   ///
   /// `const` should be inserted if the existing expression is constant but
   /// we are not already in a constant context.
-  bool _willRequireConstKeyword(int offset, ResolvedUnitResult unit) {
-    var node = unit.unit.nodeCovering(offset: offset);
+  bool _willRequireConstKeyword(AstNode? node) {
     if (node is! Expression) {
       return false;
     }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
index f5f8399..908150b 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
@@ -15,21 +15,8 @@
 import 'package:analysis_server/src/services/refactoring/legacy/rename_unit_member.dart';
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analysis_server/src/utilities/extensions/string.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 
-AstNode? _tweakLocatedNode(AstNode? node, int offset) {
-  if (node is RepresentationDeclaration) {
-    var extensionTypeDeclaration = node.parent;
-    if (extensionTypeDeclaration is ExtensionTypeDeclaration) {
-      if (extensionTypeDeclaration.name.end == offset) {
-        node = extensionTypeDeclaration;
-      }
-    }
-  }
-  return node;
-}
-
 typedef StaticOptions = Either2<bool, RenameOptions>;
 
 class PrepareRenameHandler
@@ -63,7 +50,6 @@
 
     return (unit, offset).mapResults((result, offset) async {
       var node = result.unit.nodeCovering(offset: offset);
-      node = _tweakLocatedNode(node, offset);
       var element = node?.getElement(useMockForImport: true);
 
       if (node == null || element == null) {
@@ -159,7 +145,6 @@
       offset,
     ) async {
       var node = result.unit.nodeCovering(offset: offset);
-      node = _tweakLocatedNode(node, offset);
       var element = node?.getElement(useMockForImport: true);
       if (node == null || element == null) {
         return success(null);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
index 326afc4..e360a8a 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_states.dart
@@ -13,7 +13,6 @@
 import 'package:analysis_server/src/lsp/handlers/custom/handler_augmentation.dart';
 import 'package:analysis_server/src/lsp/handlers/custom/handler_augmented.dart';
 import 'package:analysis_server/src/lsp/handlers/custom/handler_connect_to_dtd.dart';
-import 'package:analysis_server/src/lsp/handlers/custom/handler_dart_text_document_content_provider.dart';
 import 'package:analysis_server/src/lsp/handlers/custom/handler_diagnostic_server.dart';
 import 'package:analysis_server/src/lsp/handlers/custom/handler_experimental_echo.dart';
 import 'package:analysis_server/src/lsp/handlers/custom/handler_imports.dart';
@@ -126,7 +125,6 @@
         CodeActionHandler.new,
         CodeLensHandler.new,
         ConnectToDtdHandler.new,
-        DartTextDocumentContentProviderHandler.new,
         DocumentColorHandler.new,
         DocumentColorPresentationHandler.new,
         DocumentHighlightsHandler.new,
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
index 6d0179d..a632911 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
@@ -93,6 +93,14 @@
         } else if (node is DeclaredIdentifier) {
           originEntity = node.name;
           type = node.declaredFragment?.element.type;
+        } else if (node is VariablePattern) {
+          originEntity = node.name;
+          type = node.matchedValueType;
+        } else if (node is PatternFieldName) {
+          originEntity = node.name;
+          if (node.parent case PatternField field) {
+            type = field.pattern.matchedValueType;
+          }
         } else if (node is Expression) {
           originEntity = node;
           type = _getType(node);
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index 9c1bf40..9483735 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -47,7 +47,6 @@
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:analyzer_plugin/src/protocol/protocol_internal.dart' as plugin;
-import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart';
 import 'package:http/http.dart' as http;
 import 'package:meta/meta.dart';
 
@@ -398,15 +397,6 @@
     var initializationOptions = _initializationOptions =
         LspInitializationOptions(rawInitializationOptions);
 
-    /// Enable virtual file support.
-    var supportsVirtualFiles =
-        _clientCapabilities
-            ?.supportsDartExperimentalTextDocumentContentProvider ??
-        false;
-    if (supportsVirtualFiles) {
-      uriConverter = ClientUriConverter.withVirtualFileSupport(pathContext);
-    }
-
     // Set whether to allow interleaved requests.
     if (initializationOptions.allowOverlappingHandlers
         case var allowOverlappingHandlers?) {
@@ -569,7 +559,7 @@
         logException(errorMessage, error, stackTrace);
         completer?.setComplete();
       }
-    }, socketError);
+    }, unhandledZoneError);
   }
 
   /// Logs the error on the client using window/logMessage.
@@ -1001,10 +991,22 @@
   /// There was an error related to the socket from which messages are being
   /// read.
   void socketError(Object error, StackTrace? stackTrace) {
-    // Don't send to instrumentation service; not an internal error.
+    // Don't send to instrumentation service; not an internal error. Probably
+    // caused by server shutdown or similar.
     sendServerErrorNotification('Socket error', error, stackTrace);
   }
 
+  /// There was an unhandled async error in the zone used to execute the
+  /// message handler.
+  void unhandledZoneError(Object error, StackTrace? stackTrace) {
+    // Record to the instrumentation log so the stack trace is accessible. This
+    // is an unhandled exception that was not awaited and is almost certainly a
+    // bug.
+    instrumentationService.logException(error, stackTrace);
+
+    sendServerErrorNotification('Unhandled handler error', error, stackTrace);
+  }
+
   /// Updates the active set of workspace folders.
   ///
   /// This is provided by the client at startup and may be updated by
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 1a462ea..0ef7174 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -34,7 +34,7 @@
     as server
     show DeclarationKind;
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart';
 import 'package:collection/collection.dart';
@@ -52,13 +52,13 @@
 final completionSetterTypePattern = RegExp(r'^\((\S+)\s+\S+\)$');
 
 final diagnosticTagsForErrorCode = <String, List<lsp.DiagnosticTag>>{
-  _diagnosticCode(WarningCode.deadCode): [lsp.DiagnosticTag.Unnecessary],
-  _diagnosticCode(HintCode.deprecatedMemberUse): [lsp.DiagnosticTag.Deprecated],
+  _diagnosticCode(diag.deadCode): [lsp.DiagnosticTag.Unnecessary],
+  _diagnosticCode(diag.deprecatedMemberUse): [lsp.DiagnosticTag.Deprecated],
   'deprecated_member_use_from_same_package': [lsp.DiagnosticTag.Deprecated],
   'deprecated_member_use_from_same_package_with_message': [
     lsp.DiagnosticTag.Deprecated,
   ],
-  _diagnosticCode(HintCode.deprecatedMemberUseWithMessage): [
+  _diagnosticCode(diag.deprecatedMemberUseWithMessage): [
     lsp.DiagnosticTag.Deprecated,
   ],
 };
@@ -1382,7 +1382,9 @@
   return element.name.isNotEmpty
       ? element.name
       : (element.kind == server.ElementKind.EXTENSION
-            ? '<unnamed extension>'
+            ? (element.extendedType?.isNotEmpty ?? false)
+                  ? 'extension on ${element.extendedType}'
+                  : '<unnamed extension>'
             : '<unnamed>');
 }
 
diff --git a/pkg/analysis_server/lib/src/lsp/registration/feature_registration.dart b/pkg/analysis_server/lib/src/lsp/registration/feature_registration.dart
index e30b986..dd3f03b 100644
--- a/pkg/analysis_server/lib/src/lsp/registration/feature_registration.dart
+++ b/pkg/analysis_server/lib/src/lsp/registration/feature_registration.dart
@@ -5,7 +5,6 @@
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/lsp/client_capabilities.dart';
 import 'package:analysis_server/src/lsp/client_configuration.dart';
-import 'package:analysis_server/src/lsp/handlers/custom/handler_dart_text_document_content_provider.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_call_hierarchy.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_change_workspace_folders.dart';
 import 'package:analysis_server/src/lsp/handlers/handler_code_actions.dart';
@@ -114,8 +113,6 @@
   final WorkspaceDidChangeConfigurationRegistrations
   workspaceDidChangeConfiguration;
   final WorkspaceSymbolRegistrations workspaceSymbol;
-  final DartTextDocumentContentProviderRegistrations
-  dartTextDocumentContentProvider;
 
   LspFeatures(RegistrationContext context)
     : callHierarchy = CallHierarchyRegistrations(context),
@@ -148,9 +145,7 @@
       willRename = WillRenameFilesRegistrations(context),
       workspaceDidChangeConfiguration =
           WorkspaceDidChangeConfigurationRegistrations(context),
-      workspaceSymbol = WorkspaceSymbolRegistrations(context),
-      dartTextDocumentContentProvider =
-          DartTextDocumentContentProviderRegistrations(context);
+      workspaceSymbol = WorkspaceSymbolRegistrations(context);
 
   List<FeatureRegistration> get allFeatures => [
     callHierarchy,
diff --git a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
index 8ea3ff4..db7f31c 100644
--- a/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
+++ b/pkg/analysis_server/lib/src/lsp/server_capabilities_computer.dart
@@ -219,10 +219,7 @@
         // Some of these fields are objects where bools could be sufficient to
         // allow for future expansion without potentially breaking clients by
         // changing the data type.
-        if (clientCapabilities
-            .supportsDartExperimentalTextDocumentContentProvider)
-          'dartTextDocumentContentProvider':
-              features.dartTextDocumentContentProvider.staticRegistration,
+
         // Indicate that we support the 'updateDiagnosticInformation'
         // custom request.
         'updateDiagnosticInformation': {},
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_isolate.dart b/pkg/analysis_server/lib/src/plugin/plugin_isolate.dart
index e15f660..375faac 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_isolate.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_isolate.dart
@@ -11,6 +11,8 @@
 
 import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analysis_server/src/plugin/server_isolate_channel.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
 import 'package:analyzer/dart/analysis/context_root.dart' as analyzer;
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
@@ -18,7 +20,6 @@
 import 'package:analyzer_plugin/protocol/protocol.dart';
 import 'package:analyzer_plugin/protocol/protocol_constants.dart';
 import 'package:analyzer_plugin/protocol/protocol_generated.dart';
-import 'package:analyzer_plugin/src/channel/isolate_channel.dart';
 import 'package:analyzer_plugin/src/protocol/protocol_internal.dart';
 import 'package:meta/meta.dart';
 
@@ -43,6 +44,9 @@
   /// The instrumentation service that is being used by the analysis server.
   final InstrumentationService _instrumentationService;
 
+  /// The session logger that is to be used by the isolate.
+  final SessionLogger sessionLogger;
+
   /// The context roots that are currently using the results produced by the
   /// plugin.
   Set<analyzer.ContextRoot> contextRoots = HashSet<analyzer.ContextRoot>();
@@ -60,7 +64,8 @@
     this.executionPath,
     this.packagesPath,
     this._notificationManager,
-    this._instrumentationService, {
+    this._instrumentationService,
+    this.sessionLogger, {
     required this.isLegacy,
   });
 
@@ -207,6 +212,7 @@
       Uri.file(executionPath!, windows: Platform.isWindows),
       Uri.file(packagesPath!, windows: Platform.isWindows),
       _instrumentationService,
+      sessionLogger,
     );
   }
 
@@ -233,11 +239,11 @@
 class PluginSession {
   /// The maximum number of milliseconds that server should wait for a response
   /// from a plugin before deciding that the plugin is hung.
-  static const Duration MAXIMUM_RESPONSE_TIME = Duration(minutes: 2);
+  static const Duration _maximumResponseTime = Duration(minutes: 2);
 
   /// The length of time to wait after sending a 'plugin.shutdown' request
   /// before a failure to terminate will cause the isolate to be killed.
-  static const Duration WAIT_FOR_SHUTDOWN_DURATION = Duration(seconds: 10);
+  static const Duration _waitForShutdownDuration = Duration(seconds: 10);
 
   /// The information about the plugin being executed.
   final PluginIsolate _isolate;
@@ -343,7 +349,7 @@
     // identify non-responsive plugins and kill them.
     var cutOffTime =
         DateTime.now().millisecondsSinceEpoch -
-        MAXIMUM_RESPONSE_TIME.inMilliseconds;
+        _maximumResponseTime.inMilliseconds;
     for (var requestData in pendingRequests.values) {
       if (requestData.requestTime < cutOffTime) {
         return true;
@@ -470,7 +476,7 @@
       throw StateError('Cannot stop a plugin that is not running.');
     }
     sendRequest(PluginShutdownParams());
-    Future.delayed(WAIT_FOR_SHUTDOWN_DURATION, () {
+    Future.delayed(_waitForShutdownDuration, () {
       if (channel != null) {
         channel?.kill();
         channel = null;
diff --git a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
index 5c97d47..09adc8e 100644
--- a/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
+++ b/pkg/analysis_server/lib/src/plugin/plugin_manager.dart
@@ -8,11 +8,13 @@
 
 import 'dart:async';
 import 'dart:convert';
-import 'dart:io' show Platform, Process, ProcessResult;
+import 'dart:io' show Platform, ProcessResult;
 
 import 'package:analysis_server/src/analytics/percentile_calculator.dart';
 import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/plugin/plugin_isolate.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
+import 'package:analysis_server/src/utilities/process.dart';
 import 'package:analysis_server/src/utilities/sdk.dart';
 import 'package:analyzer/dart/analysis/context_root.dart' as analyzer;
 import 'package:analyzer/exception/exception.dart';
@@ -87,6 +89,9 @@
   /// The instrumentation service that is being used by the analysis server.
   final InstrumentationService instrumentationService;
 
+  /// The session logger that is being used by the analysis server.
+  final SessionLogger sessionLogger;
+
   /// A table mapping the paths of plugins to information about those plugins.
   final Map<String, PluginIsolate> _pluginMap = <String, PluginIsolate>{};
 
@@ -117,15 +122,21 @@
   /// the analysis server.
   Completer<void> initializedCompleter = Completer();
 
-  /// Initialize a newly created plugin manager. The notifications from the
-  /// running plugins will be handled by the given [_notificationManager].
+  final ProcessRunner _processRunner;
+
+  /// Initializes a newly created plugin manager.
+  ///
+  /// The notifications from the running plugins will be handled by the given
+  /// [_notificationManager].
   PluginManager(
     this._resourceProvider,
     this._byteStorePath,
     this._sdkPath,
     this._notificationManager,
     this.instrumentationService,
-  );
+    this.sessionLogger, {
+    ProcessRunner processRunner = const ProcessRunner(),
+  }) : _processRunner = processRunner;
 
   /// All of the legacy plugins that are currently known.
   List<PluginIsolate> get legacyPluginIsolates =>
@@ -167,6 +178,7 @@
           null,
           _notificationManager,
           instrumentationService,
+          sessionLogger,
           isLegacy: isLegacyPlugin,
         );
         pluginIsolate.reportException(CaughtException(exception, stackTrace));
@@ -179,6 +191,7 @@
         pluginFiles.packageConfig.path,
         _notificationManager,
         instrumentationService,
+        sessionLogger,
         isLegacy: isLegacyPlugin,
       );
       _pluginMap[path] = pluginIsolate;
@@ -280,24 +293,38 @@
   ///
   /// Throws a [PluginException] if there is a problem that prevents the plugin
   /// from being executing.
+  ///
+  /// [builtAsAot] can be passed in during a test, to simulate a different flow.
   @visibleForTesting
-  PluginFiles filesFor(String pluginPath, {required bool isLegacyPlugin}) {
+  PluginFiles filesFor(
+    String pluginPath, {
+    required bool isLegacyPlugin,
+    @visibleForTesting bool builtAsAot = _builtAsAot,
+  }) {
     var pluginFolder = _resourceProvider.getFolder(pluginPath);
     var pubspecFile = pluginFolder.getChildAssumingFile(file_paths.pubspecYaml);
     if (!pubspecFile.exists) {
       // If there's no pubspec file, then we don't need to copy the package
       // because we won't be running pub.
-      return _computeFiles(pluginFolder);
+      return _computeFiles(pluginFolder, builtAsAot: builtAsAot);
     }
     var workspace = BlazeWorkspace.find(_resourceProvider, pluginFolder.path);
     if (workspace != null) {
       // Similarly, we won't be running pub if we're in a workspace because
       // there is exactly one version of each package.
-      return _computeFiles(pluginFolder, workspace: workspace);
+      return _computeFiles(
+        pluginFolder,
+        builtAsAot: builtAsAot,
+        workspace: workspace,
+      );
     }
 
     if (!isLegacyPlugin) {
-      return _computeFiles(pluginFolder, pubCommand: 'upgrade');
+      return _computeFiles(
+        pluginFolder,
+        builtAsAot: builtAsAot,
+        pubCommand: 'upgrade',
+      );
     }
 
     // Copy the plugin directory to a unique subdirectory of the plugin
@@ -310,10 +337,18 @@
       var executionFolder = parentFolder.getChildAssumingFolder(
         pluginFolder.shortName,
       );
-      return _computeFiles(executionFolder, pubCommand: 'upgrade');
+      return _computeFiles(
+        executionFolder,
+        builtAsAot: builtAsAot,
+        pubCommand: 'upgrade',
+      );
     }
     var executionFolder = pluginFolder.copyTo(parentFolder);
-    return _computeFiles(executionFolder, pubCommand: 'get');
+    return _computeFiles(
+      executionFolder,
+      builtAsAot: builtAsAot,
+      pubCommand: 'get',
+    );
   }
 
   /// Return a list of all of the plugin isolates that are currently associated
@@ -486,7 +521,7 @@
     );
 
     var stopwatch = Stopwatch()..start();
-    var result = Process.runSync(
+    var result = _processRunner.runSync(
       sdk.dart,
       ['compile', 'aot-snapshot', entrypoint],
       stderrEncoding: utf8,
@@ -532,6 +567,7 @@
   /// Runs `pub` if [pubCommand] is not `null`.
   PluginFiles _computeFiles(
     Folder pluginFolder, {
+    required bool builtAsAot,
     String? pubCommand,
     Workspace? workspace,
   }) {
@@ -564,7 +600,7 @@
         throw PluginException(exceptionReason);
       }
 
-      if (_builtAsAot) {
+      if (builtAsAot) {
         // Update the entrypoint path to be the AOT-compiled file.
         pluginFile = _compileAsAot(
           pluginFile: pluginFile,
@@ -592,7 +628,7 @@
       }
     }
 
-    if (_builtAsAot) {
+    if (builtAsAot) {
       // Update the entrypoint path to be the AOT-compiled file.
       pluginFile = _compileAsAot(
         pluginFile: pluginFile,
@@ -713,13 +749,13 @@
     );
 
     var stopwatch = Stopwatch()..start();
-    var result = Process.runSync(
+    var result = _processRunner.runSync(
       sdk.dart,
       ['pub', pubCommand],
-      stderrEncoding: utf8,
-      stdoutEncoding: utf8,
       workingDirectory: folder.path,
       environment: {_pubEnvironmentKey: _getPubEnvironmentValue()},
+      stderrEncoding: utf8,
+      stdoutEncoding: utf8,
     );
     stopwatch.stop();
 
diff --git a/pkg/analysis_server/lib/src/plugin/server_isolate_channel.dart b/pkg/analysis_server/lib/src/plugin/server_isolate_channel.dart
new file mode 100644
index 0000000..b982fbb
--- /dev/null
+++ b/pkg/analysis_server/lib/src/plugin/server_isolate_channel.dart
@@ -0,0 +1,247 @@
+// 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.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:isolate';
+
+import 'package:analysis_server/src/session_logger/process_id.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
+import 'package:analyzer/instrumentation/instrumentation.dart';
+import 'package:analyzer_plugin/channel/channel.dart';
+import 'package:analyzer_plugin/protocol/protocol.dart';
+import 'package:analyzer_plugin/protocol/protocol_generated.dart';
+
+/// The type of the function used to run a built-in plugin in an isolate.
+typedef EntryPoint = void Function(SendPort sendPort);
+
+/// A communication channel appropriate for built-in plugins.
+class BuiltInServerIsolateChannel extends ServerIsolateChannel {
+  /// The entry point
+  final EntryPoint entryPoint;
+
+  @override
+  final String pluginId;
+
+  /// Initialize a newly created channel to communicate with an isolate running
+  /// the given [entryPoint].
+  BuiltInServerIsolateChannel(
+    this.entryPoint,
+    this.pluginId,
+    InstrumentationService instrumentationService,
+    SessionLogger sessionLogger,
+  ) : super._(instrumentationService, sessionLogger);
+
+  @override
+  Future<Isolate> _spawnIsolate() {
+    return Isolate.spawn(
+      (message) => entryPoint(message as SendPort),
+      _receivePort?.sendPort,
+      onError: _errorPort?.sendPort,
+      onExit: _exitPort?.sendPort,
+    );
+  }
+}
+
+/// A communication channel appropriate for discovered plugins.
+class DiscoveredServerIsolateChannel extends ServerIsolateChannel {
+  /// The URI for the Dart file that will be run in the isolate that this
+  /// channel communicates with.
+  final Uri pluginUri;
+
+  /// The URI for the '.packages' file that will control how 'package:' URIs are
+  /// resolved.
+  final Uri packagesUri;
+
+  /// Initialize a newly created channel to communicate with an isolate running
+  /// the code at the given [uri].
+  DiscoveredServerIsolateChannel(
+    this.pluginUri,
+    this.packagesUri,
+    InstrumentationService instrumentationService,
+    SessionLogger sessionLogger,
+  ) : super._(instrumentationService, sessionLogger);
+
+  @override
+  String get pluginId => pluginUri.toString();
+
+  @override
+  Future<Isolate> _spawnIsolate() {
+    return Isolate.spawnUri(
+      pluginUri,
+      <String>[],
+      _receivePort?.sendPort,
+      onError: _errorPort?.sendPort,
+      onExit: _exitPort?.sendPort,
+      packageConfig: packagesUri,
+    );
+  }
+}
+
+/// A communication channel that allows an analysis server to send [Request]s
+/// to, and to receive both [Response]s and [Notification]s from, a plugin.
+abstract class ServerIsolateChannel implements ServerCommunicationChannel {
+  /// The instrumentation service that is being used by the analysis server.
+  final InstrumentationService instrumentationService;
+
+  /// The session logger that is to be used by this channel.
+  final SessionLogger sessionLogger;
+
+  /// The isolate in which the plugin is running, or `null` if the plugin has
+  /// not yet been started by invoking [listen].
+  Isolate? _isolate;
+
+  /// The port used to send requests to the plugin, or `null` if the plugin has
+  /// not yet been started by invoking [listen].
+  SendPort? _sendPort;
+
+  /// The port used to receive responses and notifications from the plugin.
+  ReceivePort? _receivePort;
+
+  /// The port used to receive unhandled exceptions thrown in the plugin.
+  ReceivePort? _errorPort;
+
+  /// The port used to receive notification when the plugin isolate has exited.
+  ReceivePort? _exitPort;
+
+  /// Return a communication channel appropriate for communicating with a
+  /// built-in plugin.
+  // TODO(brianwilkerson): This isn't currently referenced. We should decide
+  //  whether there's any value to supporting built-in plugins and remove this
+  //  if we decide there isn't.
+  factory ServerIsolateChannel.builtIn(
+    EntryPoint entryPoint,
+    String pluginId,
+    InstrumentationService instrumentationService,
+    SessionLogger sessionLogger,
+  ) = BuiltInServerIsolateChannel;
+
+  /// Return a communication channel appropriate for communicating with a
+  /// discovered plugin.
+  factory ServerIsolateChannel.discovered(
+    Uri pluginUri,
+    Uri packagesUri,
+    InstrumentationService instrumentationService,
+    SessionLogger sessionLogger,
+  ) = DiscoveredServerIsolateChannel;
+
+  /// Initialize a newly created channel.
+  ServerIsolateChannel._(this.instrumentationService, this.sessionLogger);
+
+  /// Return the id of the plugin running in the isolate, used to identify the
+  /// plugin to the instrumentation service.
+  String get pluginId;
+
+  @override
+  void close() {
+    _receivePort?.close();
+    _errorPort?.close();
+    _exitPort?.close();
+    _isolate = null;
+  }
+
+  @override
+  void kill() {
+    _isolate?.kill(priority: Isolate.immediate);
+  }
+
+  @override
+  Future<void> listen(
+    void Function(Response response) onResponse,
+    void Function(Notification notification) onNotification, {
+    void Function(dynamic error)? onError,
+    void Function()? onDone,
+  }) async {
+    if (_isolate != null) {
+      throw StateError('Cannot listen to the same channel more than once.');
+    }
+
+    var receivePort = ReceivePort();
+    _receivePort = receivePort;
+
+    if (onError != null) {
+      var errorPort = ReceivePort();
+      _errorPort = errorPort;
+      errorPort.listen((error) {
+        onError(error);
+      });
+    }
+
+    if (onDone != null) {
+      var exitPort = ReceivePort();
+      _exitPort = exitPort;
+      exitPort.listen((_) {
+        onDone();
+      });
+    }
+
+    try {
+      _isolate = await _spawnIsolate();
+    } catch (exception, stackTrace) {
+      instrumentationService.logPluginError(
+        PluginData(pluginId, null, null),
+        RequestErrorCode.PLUGIN_ERROR.toString(),
+        exception.toString(),
+        stackTrace.toString(),
+      );
+      if (onError != null) {
+        onError([exception.toString(), stackTrace.toString()]);
+      }
+      if (onDone != null) {
+        onDone();
+      }
+      close();
+      return;
+    }
+
+    var channelReady = Completer<void>();
+    receivePort.listen((dynamic input) {
+      if (input is SendPort) {
+        _sendPort = input;
+        channelReady.complete(null);
+      } else if (input is Map<String, Object?>) {
+        if (input.containsKey('id')) {
+          var encodedInput = json.encode(input);
+          instrumentationService.logPluginResponse(pluginId, encodedInput);
+          sessionLogger.logMessage(
+            from: ProcessId.plugin,
+            to: ProcessId.server,
+            message: input,
+          );
+          onResponse(Response.fromJson(input));
+        } else if (input.containsKey('event')) {
+          var encodedInput = json.encode(input);
+          instrumentationService.logPluginNotification(pluginId, encodedInput);
+          sessionLogger.logMessage(
+            from: ProcessId.plugin,
+            to: ProcessId.server,
+            message: input,
+          );
+          onNotification(Notification.fromJson(input));
+        }
+      }
+    });
+
+    return channelReady.future;
+  }
+
+  @override
+  void sendRequest(Request request) {
+    var sendPort = _sendPort;
+    if (sendPort != null) {
+      var jsonData = request.toJson();
+      var encodedRequest = json.encode(jsonData);
+      instrumentationService.logPluginRequest(pluginId, encodedRequest);
+      sessionLogger.logMessage(
+        from: ProcessId.server,
+        to: ProcessId.plugin,
+        message: jsonData,
+      );
+      sendPort.send(jsonData);
+    }
+  }
+
+  /// Spawn the isolate in which the plugin is running.
+  Future<Isolate> _spawnIsolate();
+}
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 3d1cb66..6ae9913 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -89,6 +89,14 @@
   return null;
 }
 
+String? getExtendedTypeString(engine.Element element) {
+  if (element is engine.ExtensionElement) {
+    var extendedType = element.extendedType;
+    return extendedType.getDisplayString();
+  }
+  return null;
+}
+
 String? getReturnTypeString(engine.Element element) {
   if (element is engine.ExecutableElement) {
     if (element.kind == engine.ElementKind.SETTER) {
@@ -341,7 +349,8 @@
     return SearchResultKind.WRITE;
   }
   if (kind == engine.MatchKind.INVOCATION ||
-      kind == engine.MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
+      kind == engine.MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS ||
+      kind == engine.MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION) {
     return SearchResultKind.INVOCATION;
   }
   if (kind.isReference) {
diff --git a/pkg/analysis_server/lib/src/scheduler/message_scheduler.dart b/pkg/analysis_server/lib/src/scheduler/message_scheduler.dart
index d3cac44..0766145 100644
--- a/pkg/analysis_server/lib/src/scheduler/message_scheduler.dart
+++ b/pkg/analysis_server/lib/src/scheduler/message_scheduler.dart
@@ -89,11 +89,11 @@
   /// - The incoming [legacy.ANALYSIS_REQUEST_UPDATE_CONTENT] message cancels
   ///   any rename files request that is in progress.
   void add(ScheduledMessage message) {
-    listener?.addPendingMessage(message);
     if (message is LegacyMessage) {
+      listener?.addPendingMessage(message);
       var request = message.request;
       var method = request.method;
-      if (method == legacy.SERVER_REQUEST_CANCEL_REQUEST) {
+      if (method == legacy.serverRequestCancelRequest) {
         var id = legacy.ServerCancelRequestParams.fromRequest(
           request,
           clientUriConverter: server.uriConverter,
@@ -103,11 +103,11 @@
         // The message needs to be added to the queue of pending messages, but
         // it seems like it shouldn't be necessary and that we ought to return
         // at this point. However, doing so causes some tests to timeout.
-      } else if (method == legacy.ANALYSIS_REQUEST_UPDATE_CONTENT) {
+      } else if (method == legacy.analysisRequestUpdateContent) {
         for (var activeMessage in _activeMessages) {
           if (activeMessage is LegacyMessage) {
             var activeRequest = activeMessage.request;
-            if (activeRequest.method == legacy.LSP_REQUEST_HANDLE) {
+            if (activeRequest.method == legacy.lspRequestHandle) {
               var method = _getLspOverLegacyParams(activeRequest)?['method'];
               if (method == lsp.Method.workspace_willRenameFiles.toString()) {
                 activeMessage.cancellationToken?.cancel(
@@ -128,11 +128,11 @@
         // Responses don't go on the queue because there might be an active
         // message that can't complete until the response is received. If the
         // response was added to the queue then this process could deadlock.
-        listener?.addActiveMessage(message);
         (server as LspAnalysisServer).handleMessage(msg, null);
-        listener?.messageCompleted(message);
         return;
-      } else if (msg is lsp.NotificationMessage) {
+      }
+      listener?.addPendingMessage(message);
+      if (msg is lsp.NotificationMessage) {
         var method = msg.method;
         if (method == lsp.Method.cancelRequest) {
           // Cancellations are handled immediately in order to minimize the
@@ -142,8 +142,8 @@
           // a response to be sent back to the client saying that the results
           // aren't provided because the request was cancelled.
           listener?.addActiveMessage(message);
-          _processCancellation(msg);
-          listener?.messageCompleted(message);
+          var id = _processCancellation(msg);
+          listener?.messageCompleted(message, id: id);
           return;
         } else if (method == lsp.Method.textDocument_didChange) {
           // Document change notifications are _not_ handled immediately, but
@@ -259,7 +259,11 @@
         // TODO(pq): if not awaited, consider adding a `then` so we can track
         // when the future completes. But note that we may see some flakiness in
         // tests as message handling gets non-deterministically interleaved.
-        listener?.messageCompleted(currentMessage);
+        unawaited(
+          _completer.future.then((_) {
+            listener?.messageCompleted(currentMessage);
+          }),
+        );
       }
     } catch (error, stackTrace) {
       server.instrumentationService.logException(
@@ -374,10 +378,11 @@
   ///
   /// The notification doesn't need to be placed on the pending messages queue
   /// after it has been processed.
-  void _processCancellation(lsp.NotificationMessage msg) {
+  /// Returns the id of the request that was canceled.
+  lsp.Either2<int, String>? _processCancellation(lsp.NotificationMessage msg) {
     var params = _getCancelParams(msg);
     if (params == null) {
-      return;
+      return null;
     }
     for (var activeMessage in _activeMessages) {
       if (activeMessage is LspMessage && activeMessage.isRequest) {
@@ -385,7 +390,7 @@
         if (request.id == params.id) {
           activeMessage.cancellationToken?.cancel();
           listener?.cancelActiveMessage(activeMessage);
-          return;
+          return params.id;
         }
       }
     }
@@ -395,10 +400,11 @@
         if (request.id == params.id) {
           pendingMessage.cancellationToken?.cancel();
           listener?.cancelPendingMessage(pendingMessage);
-          return;
+          return params.id;
         }
       }
     }
+    return null;
   }
 
   /// Cancel the current refactor, if any, for the document changed.
@@ -514,7 +520,10 @@
   /// Report that the [message] has been completed.
   ///
   /// This implies that the message was active and wasn't cancelled.
-  void messageCompleted(ScheduledMessage message);
+  void messageCompleted(
+    ScheduledMessage message, {
+    lsp.Either2<int, String>? id,
+  });
 
   /// Report that the pause counter was increased to [newPauseCount], and that
   /// processing will be paused.
diff --git a/pkg/analysis_server/lib/src/scheduler/scheduled_message.dart b/pkg/analysis_server/lib/src/scheduler/scheduled_message.dart
index ec0b6f2..cc04f01 100644
--- a/pkg/analysis_server/lib/src/scheduler/scheduled_message.dart
+++ b/pkg/analysis_server/lib/src/scheduler/scheduled_message.dart
@@ -63,10 +63,10 @@
   String get id {
     var msg = message;
     return switch (msg) {
-      RequestMessage() => 'lsp:${msg.method}',
-      NotificationMessage() => 'lsp:${msg.method}',
-      ResponseMessage() => 'lsp:ResponseMessage',
-      Message() => 'lsp:Message',
+      RequestMessage() => '${msg.method}: ${msg.id}',
+      NotificationMessage() => '${msg.method}',
+      ResponseMessage() => 'ResponseMessage:${msg.id}',
+      Message() => 'Message',
     };
   }
 
diff --git a/pkg/analysis_server/lib/src/scheduler/scheduler_tracking_listener.dart b/pkg/analysis_server/lib/src/scheduler/scheduler_tracking_listener.dart
index d467bf2..f467b02 100644
--- a/pkg/analysis_server/lib/src/scheduler/scheduler_tracking_listener.dart
+++ b/pkg/analysis_server/lib/src/scheduler/scheduler_tracking_listener.dart
@@ -4,6 +4,7 @@
 
 import 'dart:convert';
 
+import 'package:analysis_server/lsp_protocol/protocol.dart' as lsp show Either2;
 import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/scheduler/message_scheduler.dart';
 import 'package:analysis_server/src/scheduler/scheduled_message.dart';
@@ -18,13 +19,37 @@
   /// The message for which data is being collected.
   final ScheduledMessage message;
 
-  /// The number of pending messages already on the queue when the [message] was
-  /// added to the queue.
-  final int pendingMessageCount;
+  /// The number of pending messages already on the active queue when the [message] was
+  /// added to the pending queue.
+  final int activeOnPendingMessageCount;
 
-  /// The number of active messages already on the queue when the [message] was
-  /// added to the queue.
-  final int activeMessageCount;
+  /// The ids of the messages in the active message queue when this message was
+  /// added to the pending queue.
+  final List<String> activeOnPendingMessages;
+
+  /// The number of pending messages already on the queue when the [message] was
+  /// added to the pending queue.
+  final int pendingOnPendingMessageCount;
+
+  /// The ids of the messages in the pending message queue when this message was
+  /// added to the pending queue.
+  final List<String> pendingOnPendingMessages;
+
+  /// The number of pending messages on the queue when the [message] was moved
+  /// to the active queue.
+  int pendingOnActiveMessageCount = 0;
+
+  /// The ids of the messages in the pending message queue when this message was
+  /// moved to the active queue.
+  List<String> pendingOnActiveMessages = [];
+
+  /// The number of active messages on the queue when the [message] was moved
+  /// to the active queue.
+  int activeOnActiveMessageCount = 0;
+
+  /// The ids of the messages in the active message queue when this message was
+  /// moved to the active queue.
+  List<String> activeOnActiveMessages = [];
 
   /// The time at which the [message] was added to the pending queue.
   final int pendingTime;
@@ -38,10 +63,15 @@
   /// The time at which the [message] was completed.
   int? completeTime;
 
+  /// The id of the message that was completed, if any.
+  lsp.Either2<int, String>? cancelledMessageId;
+
   MessageData({
     required this.message,
-    required this.pendingMessageCount,
-    required this.activeMessageCount,
+    required this.pendingOnPendingMessageCount,
+    required this.pendingOnPendingMessages,
+    required this.activeOnPendingMessageCount,
+    required this.activeOnPendingMessages,
   }) : pendingTime = _now;
 }
 
@@ -50,15 +80,22 @@
 /// The data will be included in the reports sent to track down performance
 /// issues, and aggregated data will be reported to the analytics manager.
 class SchedulerTrackingListener extends MessageSchedulerListener {
-  /// The number of lines of data to be kept in the [completedMessageLog].
+  /// The number of messages to keep in the [_receivedMessageData] list.
   static const int logLength = 100;
 
   /// The analytics manager through which analytics are to be sent.
   final AnalyticsManager analyticsManager;
 
-  /// A map from scheduled messages to the data being collected about them.
+  /// A map from scheduled messages to the [MessageData] object
+  /// being collected about them.
   final Map<ScheduledMessage, MessageData> _messageDataMap = {};
 
+  /// A list of [MessageData] objects for messages as they are received.
+  final List<MessageData> _receivedMessageData = [];
+
+  /// The index into [_receivedMessageData] for the next message.
+  int _nextMessageIndex = 0;
+
   /// The number of messages in the active message queue.
   int _activeMessageCount = 0;
 
@@ -72,42 +109,47 @@
   /// ended.
   int processingEndTime = -1;
 
-  /// A list of data about the [logLength] most recently completed messages.
-  List<String> completedMessageLog = [];
-
   /// Returns a newly created listener that will report to the
   /// [analyticsManager].
   SchedulerTrackingListener(this.analyticsManager);
 
-  ({List<MessageData> pending, List<MessageData> active})
-  get pendingAndActiveMessages {
-    var pendingMessages = <MessageData>[];
-    var activeMessages = <MessageData>[];
-    for (var messageData in _messageDataMap.values) {
-      if (messageData.activeTime != null) {
-        activeMessages.add(messageData);
-      } else {
-        pendingMessages.add(messageData);
-      }
-    }
-    return (pending: pendingMessages, active: activeMessages);
-  }
-
   @override
   void addActiveMessage(ScheduledMessage message) {
-    var messageData = _messageDataMap[message]!;
+    var messageData = _messageDataMap[message];
+    if (messageData == null) {
+      return;
+    }
     messageData.activeTime = _now;
+
+    var (:pending, :active) = _getCurrentActiveAndPendingMessages(
+      exclude: message,
+    );
+    messageData.pendingOnActiveMessageCount = _pendingMessageCount - 1;
+    messageData.pendingOnActiveMessages = pending;
+    messageData.activeOnActiveMessageCount = active.length;
+    messageData.activeOnActiveMessages = active;
     _pendingMessageCount--;
     _activeMessageCount++;
   }
 
   @override
   void addPendingMessage(ScheduledMessage message) {
-    _messageDataMap[message] = MessageData(
+    var (:pending, :active) = _getCurrentActiveAndPendingMessages();
+    var newMessageData = MessageData(
       message: message,
-      pendingMessageCount: _pendingMessageCount,
-      activeMessageCount: _activeMessageCount,
+      pendingOnPendingMessageCount: _pendingMessageCount,
+      pendingOnPendingMessages: pending,
+      activeOnPendingMessageCount: _activeMessageCount,
+      activeOnPendingMessages: active,
     );
+    _messageDataMap[message] = newMessageData;
+    if (_receivedMessageData.length < SchedulerTrackingListener.logLength) {
+      _receivedMessageData.add(newMessageData);
+    } else {
+      _receivedMessageData[_nextMessageIndex] = newMessageData;
+      _nextMessageIndex =
+          (_nextMessageIndex + 1) % SchedulerTrackingListener.logLength;
+    }
     _pendingMessageCount++;
   }
 
@@ -143,12 +185,64 @@
     // TODO(brianwilkerson): Record [processingDuration].
   }
 
+  /// Returns a list of the most recent messages.
+  List<String> getMessageLog() {
+    var log = <String>[];
+    if (_receivedMessageData.isEmpty) {
+      return log;
+    }
+
+    var startIndex = _receivedMessageData.length < logLength
+        ? 0
+        : _nextMessageIndex;
+    var count = _receivedMessageData.length;
+
+    for (var i = 0; i < count; i++) {
+      var index = (startIndex + i) % count;
+      var messageData = _receivedMessageData[index];
+
+      var now = _now;
+      var pendingTime = messageData.pendingTime;
+      var activeTime = messageData.activeTime ?? now;
+      var completeTime = messageData.completeTime ?? now;
+      var id = messageData.cancelledMessageId;
+      var message = id != null
+          ? '${messageData.message.id}:$id'
+          : messageData.message.id;
+
+      var jsonData = {
+        'message': message,
+        'pendingMessageCount': messageData.pendingOnPendingMessageCount,
+        'pendingMessages': messageData.pendingOnPendingMessages,
+        'activeOnPendingMessageCount': messageData.activeOnPendingMessageCount,
+        'activeOnPendingMessages': messageData.activeOnPendingMessages,
+        'pendingOnActiveMessageCount': messageData.pendingOnActiveMessageCount,
+        'pendingOnActiveMessages': messageData.pendingOnActiveMessages,
+        'activeOnActiveMessageCount': messageData.activeOnActiveMessageCount,
+        'activeOnActiveMessages': messageData.activeOnActiveMessages,
+        'queueTime': activeTime - pendingTime,
+        'processTime': completeTime - activeTime,
+        'wasCancelled': messageData.wasCancelled,
+        'completed': messageData.completeTime != null,
+      };
+      log.add(jsonEncode(jsonData));
+    }
+    return log;
+  }
+
   @override
-  void messageCompleted(ScheduledMessage message) {
-    var messageData = _messageDataMap.remove(message)!;
+  void messageCompleted(
+    ScheduledMessage message, {
+    lsp.Either2<int, String>? id,
+  }) {
+    var messageData = _messageDataMap[message];
+    if (messageData == null) {
+      return;
+    }
     messageData.completeTime = _now;
+    messageData.cancelledMessageId = id;
     _activeMessageCount--;
-    _reportMessageData(messageData);
+    _messageDataMap.remove(message);
   }
 
   @override
@@ -168,28 +262,20 @@
     // TODO(brianwilkerson): Record [idleDuration].
   }
 
-  /// Reports information about a completed message.
-  void _reportMessageData(MessageData messageData) {
-    var now = _now;
-    var pendingTime = messageData.pendingTime;
-    var activeTime = messageData.activeTime ?? now;
-    var completeTime = messageData.completeTime ?? now;
-
-    var jsonData = {
-      'message': messageData.message.id,
-      'pendingMessageCount': messageData.pendingMessageCount,
-      'activeMessageCount': messageData.activeMessageCount,
-      'pendingDuration': activeTime - pendingTime,
-      'activeDuration': completeTime - activeTime,
-      'wasCancelled': messageData.wasCancelled,
-    };
-
-    if (completedMessageLog.length >= logLength) {
-      completedMessageLog.removeAt(0);
+  ({List<String> pending, List<String> active})
+  _getCurrentActiveAndPendingMessages({ScheduledMessage? exclude}) {
+    var pendingMessages = <String>[];
+    var activeMessages = <String>[];
+    for (var messageData in _messageDataMap.values) {
+      if (messageData.message == exclude) {
+        continue;
+      }
+      if (messageData.activeTime != null) {
+        activeMessages.add(messageData.message.id);
+      } else {
+        pendingMessages.add(messageData.message.id);
+      }
     }
-    completedMessageLog.add(jsonEncode(jsonData));
-
-    // TODO(brianwilkerson): Report the [messageDataData] to the analytics manager.
-    // analyticsManager;
+    return (pending: pendingMessages, active: activeMessages);
   }
 }
diff --git a/pkg/analysis_server/lib/src/server/debounce_requests.dart b/pkg/analysis_server/lib/src/server/debounce_requests.dart
index 0884da8..7af04c1 100644
--- a/pkg/analysis_server/lib/src/server/debounce_requests.dart
+++ b/pkg/analysis_server/lib/src/server/debounce_requests.dart
@@ -70,10 +70,10 @@
     var abortFixesRequests = false;
     for (var requestOrResponse in requests.reversed) {
       if (requestOrResponse is Request) {
-        if (requestOrResponse.method == ANALYSIS_REQUEST_UPDATE_CONTENT) {
+        if (requestOrResponse.method == analysisRequestUpdateContent) {
           abortCompletionRequests = true;
         } else if (requestOrResponse.method ==
-            COMPLETION_REQUEST_GET_SUGGESTIONS2) {
+            completionRequestGetSuggestions2) {
           if (abortCompletionRequests) {
             discardedRequests.add(requestOrResponse);
             var params = CompletionGetSuggestions2Params.fromRequest(
@@ -95,7 +95,7 @@
           } else {
             abortCompletionRequests = true;
           }
-        } else if (requestOrResponse.method == ANALYSIS_REQUEST_GET_HOVER) {
+        } else if (requestOrResponse.method == analysisRequestGetHover) {
           if (abortHoverRequests) {
             discardedRequests.add(requestOrResponse);
             channel.sendResponse(
@@ -110,7 +110,7 @@
           } else {
             abortHoverRequests = true;
           }
-        } else if (requestOrResponse.method == EDIT_REQUEST_GET_ASSISTS) {
+        } else if (requestOrResponse.method == editRequestGetAssists) {
           if (abortAssistsRequests) {
             discardedRequests.add(requestOrResponse);
             channel.sendResponse(
@@ -125,7 +125,7 @@
           } else {
             abortAssistsRequests = true;
           }
-        } else if (requestOrResponse.method == EDIT_REQUEST_GET_FIXES) {
+        } else if (requestOrResponse.method == editRequestGetFixes) {
           if (abortFixesRequests) {
             discardedRequests.add(requestOrResponse);
             channel.sendResponse(
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index fd4931b..6e448a8 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -335,9 +335,12 @@
     // Initialize the session logging service.
     var sessionLogFilePath = results.option(sessionLogOption);
     _sessionLogger = SessionLogger();
+    var inMemorySink = SessionLoggerInMemorySink(maxBufferLength: 256);
+    _sessionLogger.sink = inMemorySink;
     if (sessionLogFilePath != null) {
-      _sessionLogger.sink = SessionLoggerFileSink(sessionLogFilePath);
+      inMemorySink.nextLogger = SessionLoggerFileSink(sessionLogFilePath);
     }
+    _sessionLogger.logCommandLine(arguments: arguments);
 
     int? diagnosticServerPort;
     var portValue =
@@ -899,6 +902,7 @@
     parser.addFlag(
       withFineDependenciesOption,
       help: 'Enable fine-grained dependencies.',
+      defaultsTo: true,
       hide: true,
     );
     parser.addFlag(
diff --git a/pkg/analysis_server/lib/src/server/http_server.dart b/pkg/analysis_server/lib/src/server/http_server.dart
index cc68c34..7d0bd8c 100644
--- a/pkg/analysis_server/lib/src/server/http_server.dart
+++ b/pkg/analysis_server/lib/src/server/http_server.dart
@@ -27,7 +27,7 @@
 /// - serves diagnostic information as html pages
 class HttpAnalysisServer {
   /// Number of lines of print output to capture.
-  static const int MAX_PRINT_BUFFER_LENGTH = 1000;
+  static const int _maxPrintBufferLength = 1000;
 
   /// An object that can handle either a WebSocket connection or a connection
   /// to the client over stdio.
@@ -62,11 +62,8 @@
   /// Record that the given line was printed out by the analysis server.
   void recordPrint(String line) {
     _printBuffer.add(line);
-    if (_printBuffer.length > MAX_PRINT_BUFFER_LENGTH) {
-      _printBuffer.removeRange(
-        0,
-        _printBuffer.length - MAX_PRINT_BUFFER_LENGTH,
-      );
+    if (_printBuffer.length > _maxPrintBufferLength) {
+      _printBuffer.removeRange(0, _printBuffer.length - _maxPrintBufferLength);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart b/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart
index 01c6b5c..9c2c117 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart
@@ -273,7 +273,7 @@
     for (var field in containingElement.fields) {
       // Skip fields that are already initialized at their declaration.
       if (!field.isStatic &&
-          !field.isSynthetic &&
+          field.isOriginDeclaration &&
           !fieldsToSkip.contains(field) &&
           (!(field.isFinal || field.isConst) || !field.hasInitializer)) {
         _suggestField(field: field);
@@ -419,6 +419,15 @@
       return;
     }
     AstNode? parent = containingMember.parent ?? containingMember;
+    if (parent is ClassNamePart) {
+      parent = parent.parent;
+    }
+    switch (parent) {
+      case BlockClassBody():
+        parent = parent.parent;
+      case EnumBody():
+        parent = parent.parent;
+    }
     if (parent is EnumConstantDeclaration) {
       assert(node is CommentReference);
       parent = parent.parent;
@@ -430,6 +439,12 @@
     } else if (parent is CompilationUnit) {
       parent = containingMember;
     }
+    switch (parent) {
+      case BlockClassBody():
+        parent = parent.parent;
+      case EnumBody():
+        parent = parent.parent;
+    }
     CompilationUnitMember? topLevelMember;
     if (parent is CompilationUnitMember) {
       topLevelMember = parent;
@@ -835,7 +850,7 @@
         if (excludedGetters.contains(getter.name)) {
           continue;
         }
-        if (!getter.isSynthetic) {
+        if (getter.isOriginDeclaration) {
           if (getter.isVisibleIn(libraryElement)) {
             _suggestProperty(
               accessor: getter,
@@ -862,7 +877,7 @@
           // Avoid visiting a field twice. All fields induce a getter, but only
           // non-final fields induce a setter, so we don't add a suggestion for
           // a synthetic setter.
-          if (setter.isSynthetic || !setter.isVisibleIn(libraryElement)) {
+          if (setter.isOriginVariable || !setter.isVisibleIn(libraryElement)) {
             continue;
           }
           _suggestProperty(accessor: setter);
@@ -912,7 +927,7 @@
             // Do not add synthetic setters, as these may prevent adding getters,
             // they are both tracked with the same name in the
             // [VisibilityTracker].
-            if (element.isSynthetic) {
+            if (element.isOriginVariable) {
               break;
             }
             _suggestTopLevelProperty(element, importData);
@@ -1371,7 +1386,7 @@
     var referencingInterface = _referencingInterfaceFor(element);
 
     for (var accessor in element.getters) {
-      if ((!accessor.isSynthetic || accessor.isEnumValues) &&
+      if ((accessor.isOriginDeclaration || accessor.isEnumValues) &&
           (!mustBeStatic || accessor.isStatic)) {
         _suggestProperty(
           accessor: accessor,
@@ -1382,7 +1397,8 @@
     }
 
     for (var accessor in element.setters) {
-      if (!accessor.isSynthetic && (!mustBeStatic || accessor.isStatic)) {
+      if (accessor.isOriginDeclaration &&
+          (!mustBeStatic || accessor.isStatic)) {
         _suggestProperty(
           accessor: accessor,
           referencingInterface: referencingInterface,
@@ -1392,7 +1408,7 @@
     }
 
     for (var field in element.fields) {
-      if (!field.isSynthetic && (!mustBeStatic || field.isStatic)) {
+      if (field.isOriginDeclaration && (!mustBeStatic || field.isStatic)) {
         _suggestField(
           field: field,
           referencingInterface: referencingInterface,
@@ -1504,7 +1520,7 @@
   }) {
     for (var getter in getters) {
       if (getter.isStatic &&
-          !getter.isSynthetic &&
+          getter.isOriginDeclaration &&
           getter.isVisibleIn(request.libraryElement) &&
           (!onlyInvocations ||
               getter.returnType is FunctionType ||
@@ -1514,15 +1530,14 @@
     }
     for (var setter in setters) {
       if (setter.isStatic &&
-          !setter.isSynthetic &&
+          setter.isOriginDeclaration &&
           setter.isVisibleIn(request.libraryElement)) {
         _suggestProperty(accessor: setter);
       }
     }
     for (var field in fields) {
       if (field.isStatic &&
-          (!field.isSynthetic ||
-              (containingElement is EnumElement && field.name == 'values')) &&
+          (field.isOriginDeclaration || field.isOriginEnumValues) &&
           field.isVisibleIn(request.libraryElement) &&
           (!onlyInvocations ||
               field.type is FunctionType ||
@@ -1593,12 +1608,12 @@
     }
     if (!mustBeType) {
       for (var element in library.getters) {
-        if (!element.isSynthetic) {
+        if (element.isOriginDeclaration) {
           _suggestTopLevelProperty(element, null);
         }
       }
       for (var element in library.setters) {
-        if (!element.isSynthetic) {
+        if (element.isOriginDeclaration) {
           if (element.correspondingGetter == null) {
             _suggestTopLevelProperty(element, null);
           }
@@ -1613,7 +1628,7 @@
         _suggestTopLevelFunction(element, null);
       }
       for (var element in library.topLevelVariables) {
-        if (!element.isSynthetic) {
+        if (element.isOriginDeclaration) {
           _suggestTopLevelVariable(element, null);
         }
       }
@@ -1634,10 +1649,10 @@
     var firstMember = list.first;
     if (mustBeAssignable) {
       if (firstMember case SetterElementImpl(
-        :var isSynthetic,
+        :var isOriginVariable,
         :var correspondingGetter,
       )) {
-        if (isSynthetic && correspondingGetter != null) {
+        if (isOriginVariable && correspondingGetter != null) {
           return correspondingGetter;
         } else {
           return firstMember;
@@ -1646,10 +1661,10 @@
       for (var i = 1; i < list.length; i++) {
         var member = list[i];
         if (member case SetterElementImpl(
-          :var isSynthetic,
+          :var isOriginVariable,
           :var correspondingGetter,
         )) {
-          if (isSynthetic && correspondingGetter != null) {
+          if (isOriginVariable && correspondingGetter != null) {
             return correspondingGetter;
           } else {
             return member;
@@ -1733,7 +1748,7 @@
     double matcherScore, {
     ImportData? importData,
   }) {
-    if (element.isSynthetic) {
+    if (element.isOriginVariable) {
       if (element is GetterElement) {
         var variable = element.variable;
         if (variable is TopLevelVariableElement) {
@@ -2218,7 +2233,7 @@
             keyword = Keyword.VAR;
           }
         }
-        if (accessor.isSynthetic) {
+        if (accessor.isOriginVariable) {
           // Avoid visiting a field twice. All fields induce a getter, but only
           // non-final fields induce a setter, so we don't add a suggestion for a
           // synthetic setter.
@@ -2324,10 +2339,10 @@
       } else {
         var matcherScore = state.matcher.score(element.displayName);
         if (matcherScore != -1) {
-          if (element.isSynthetic) {
+          if (element.isOriginGetterSetter) {
             var getter = element.getter;
             if (getter != null) {
-              if (getter.isSynthetic) {
+              if (getter.isOriginVariable) {
                 var variable = getter.variable;
                 if (variable is FieldElement) {
                   var suggestion = FieldSuggestion(
@@ -2778,7 +2793,7 @@
   bool get isEnumValues =>
       name == 'values' &&
       isStatic &&
-      isSynthetic &&
+      isOriginVariable &&
       enclosingElement is EnumElement;
 }
 
@@ -2799,7 +2814,7 @@
 extension on PropertyAccessorElement {
   /// Whether this accessor is an accessor for a constant variable.
   bool get isConst {
-    if (isSynthetic) {
+    if (isOriginVariable) {
       return variable.isConst;
     }
     return false;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index f180b88..ce5f198 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -382,7 +382,7 @@
       return 1.0;
     } else if (element is TopLevelVariableElement && element.isConst) {
       return 1.0;
-    } else if (element is PropertyAccessorElement && element.isSynthetic) {
+    } else if (element is PropertyAccessorElement && element.isOriginVariable) {
       var variable = element.variable;
       if (variable.isStatic && variable.isConst) {
         return 1.0;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/in_scope_completion_pass.dart b/pkg/analysis_server/lib/src/services/completion/dart/in_scope_completion_pass.dart
index 1063244..36f6062 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/in_scope_completion_pass.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/in_scope_completion_pass.dart
@@ -157,6 +157,13 @@
   /// Computes the candidate suggestions associated with this pass.
   void computeSuggestions() {
     var completionNode = _completionNode;
+    // TODO(scheglov): update the visitor properly
+    if (completionNode is BlockClassBody) {
+      completionNode = completionNode.parent!;
+    }
+    if (completionNode is EnumBody) {
+      completionNode = completionNode.parent!;
+    }
     completionNode.accept(this);
   }
 
@@ -257,7 +264,7 @@
     // So, it is not an annotation for a method, but override request.
     if (node.constructorName == null) {
       if (node.name case SimpleIdentifier name) {
-        var classNode = node.parent.parent;
+        var classNode = node.parent.parent?.parent;
         if (classNode is Declaration) {
           var lineInfo = state.request.unit.lineInfo;
           var nameLocation = lineInfo.getLocation(name.offset);
@@ -613,12 +620,17 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
+    var body = node.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     // `class X { final String in^; }` is parsed as
     // `final <NoType> String ; in^`, where `in` is dropped.
     var dropped = state.request.target.droppedToken;
     if (dropped != null && dropped.end == offset) {
       if (dropped.type.isKeyword) {
-        for (var fieldDeclaration in node.members) {
+        for (var fieldDeclaration in body.members) {
           if (fieldDeclaration is FieldDeclaration) {
             var fields = fieldDeclaration.fields;
             if (fields.type == null) {
@@ -649,24 +661,24 @@
       keywordHelper.addClassModifiers(node);
     } else if (offset <= node.classKeyword.end) {
       keywordHelper.addKeyword(Keyword.CLASS);
-    } else if (offset <= node.name.end) {
+    } else if (offset <= node.namePart.typeName.end) {
       var hasSyntheticBody =
-          node.leftBracket.isSynthetic && node.rightBracket.isSynthetic;
+          body.leftBracket.isSynthetic && body.rightBracket.isSynthetic;
       identifierHelper(
         includePrivateIdentifiers: false,
       ).addTopLevelName(includeBody: hasSyntheticBody);
-    } else if (offset <= node.leftBracket.offset) {
+    } else if (offset <= body.leftBracket.offset) {
       keywordHelper.addClassDeclarationKeywords(node);
-    } else if (offset >= node.leftBracket.end &&
-        offset <= node.rightBracket.offset) {
+    } else if (offset >= body.leftBracket.end &&
+        offset <= body.rightBracket.offset) {
       if (_tryAnnotationAtEndOfClassBody(node)) {
         return;
       }
 
       collector.completionLocation = 'ClassDeclaration_member';
-      var members = node.members;
+      var members = body.members;
       var precedingMember = members.elementBefore(offset);
-      var token = precedingMember?.beginToken ?? node.leftBracket.next!;
+      var token = precedingMember?.beginToken ?? body.leftBracket.next!;
       if (token.keyword == Keyword.FINAL) {
         // The user is completing after the keyword `final`, so they're likely
         // trying to declare a field.
@@ -674,7 +686,7 @@
         return;
       }
       _forClassMember(node);
-      var element = node.members.elementBefore(offset);
+      var element = body.members.elementBefore(offset);
       if (element is MethodDeclaration) {
         var body = element.body;
         if (body.isEmpty) {
@@ -735,9 +747,10 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    if (offset <= node.returnType.end) {
+    // TODO(scheglov): support primary constructors
+    if (offset <= node.typeName!.end) {
       collector.completionLocation = 'ClassDeclaration_member';
-      var parent = node.parent;
+      var parent = node.parent?.parent;
       if (parent != null) {
         _forClassLikeMember(parent);
       }
@@ -857,7 +870,7 @@
       return;
     }
 
-    var enumDeclaration = enumConstant.parent;
+    var enumDeclaration = enumConstant.parent?.parent;
     if (enumDeclaration is! EnumDeclaration) {
       return;
     }
@@ -1051,23 +1064,24 @@
       keywordHelper.addKeyword(Keyword.ENUM);
       return;
     }
-    if (offset <= node.name.end) {
+    if (offset <= node.namePart.typeName.end) {
       var hasSyntheticBody =
-          node.leftBracket.isSynthetic && node.rightBracket.isSynthetic;
+          node.body.leftBracket.isSynthetic &&
+          node.body.rightBracket.isSynthetic;
       identifierHelper(
         includePrivateIdentifiers: false,
       ).addTopLevelName(includeBody: hasSyntheticBody);
       return;
     }
-    if (offset <= node.leftBracket.offset) {
+    if (offset <= node.body.leftBracket.offset) {
       keywordHelper.addEnumDeclarationKeywords(node);
       return;
     }
-    var rightBracket = node.rightBracket;
+    var rightBracket = node.body.rightBracket;
     if (!rightBracket.isSynthetic && offset >= rightBracket.end) {
       return;
     }
-    var semicolon = node.semicolon;
+    var semicolon = node.body.semicolon;
     if (semicolon != null && offset >= semicolon.end) {
       collector.completionLocation = 'EnumDeclaration_member';
       _forEnumMember(node);
@@ -1233,7 +1247,7 @@
         includePrivateIdentifiers: false,
       ).addTopLevelName(includeBody: false);
     }
-    if (offset <= node.leftBracket.offset) {
+    if (offset <= node.body.leftBracket.offset) {
       collector.completionLocation = 'ExtensionDeclaration_onClause';
       if (node.onClause case var onClause?) {
         if (onClause.onKeyword.isSynthetic) {
@@ -1242,7 +1256,8 @@
       }
       return;
     }
-    if (offset >= node.leftBracket.end && offset <= node.rightBracket.offset) {
+    if (offset >= node.body.leftBracket.end &&
+        offset <= node.body.rightBracket.offset) {
       collector.completionLocation = 'ExtensionDeclaration_member';
       _forExtensionMember(node);
     }
@@ -1266,19 +1281,24 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
+    var body = node.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     if (offset == node.offset) {
       _forCompilationUnitMemberBefore(node);
-    } else if (offset <= node.name.end) {
+    } else if (offset <= node.primaryConstructor.typeName.end) {
       var hasSyntheticBody =
-          node.leftBracket.isSynthetic && node.rightBracket.isSynthetic;
+          body.leftBracket.isSynthetic && body.rightBracket.isSynthetic;
       identifierHelper(
         includePrivateIdentifiers: false,
       ).addTopLevelName(includeBody: hasSyntheticBody);
-    } else if (offset >= node.representation.end &&
-        (offset <= node.leftBracket.offset || node.leftBracket.isSynthetic)) {
+    } else if (offset >= node.primaryConstructor.end &&
+        (offset <= body.leftBracket.offset || body.leftBracket.isSynthetic)) {
       keywordHelper.addKeyword(Keyword.IMPLEMENTS);
-    } else if (offset >= node.leftBracket.end &&
-        offset <= node.rightBracket.offset) {
+    } else if (offset >= body.leftBracket.end &&
+        offset <= body.rightBracket.offset) {
       collector.completionLocation = 'ExtensionTypeDeclaration_member';
       _forExtensionTypeMember(node);
     }
@@ -1321,7 +1341,7 @@
       var precedingMember = node.precedingMember;
       if (offset <= type.offset &&
           (precedingMember == null || offset >= precedingMember.end)) {
-        var parent = node.parent;
+        var parent = node.parent?.parent;
         if (parent != null) {
           _forClassLikeMember(parent);
         }
@@ -1396,6 +1416,11 @@
 
   @override
   void visitFormalParameterList(FormalParameterList node) {
+    if (node.parent case PrimaryConstructorDeclaration primary) {
+      primary.accept(this);
+      return;
+    }
+
     if (offset >= node.end) {
       var parent = node.parent;
       if (parent is FunctionExpression) {
@@ -2048,23 +2073,25 @@
     }
     if (offset <= node.name.end) {
       var hasSyntheticBody =
-          node.leftBracket.isSynthetic && node.rightBracket.isSynthetic;
+          node.body.leftBracket.isSynthetic &&
+          node.body.rightBracket.isSynthetic;
       identifierHelper(
         includePrivateIdentifiers: false,
       ).addTopLevelName(includeBody: hasSyntheticBody);
       return;
     }
-    if (offset <= node.leftBracket.offset) {
+    if (offset <= node.body.leftBracket.offset) {
       keywordHelper.addMixinDeclarationKeywords(node);
       return;
     }
-    if (offset >= node.leftBracket.end && offset <= node.rightBracket.offset) {
+    if (offset >= node.body.leftBracket.end &&
+        offset <= node.body.rightBracket.offset) {
       collector.completionLocation = 'MixinDeclaration_member';
       if (_tryAnnotationAtEndOfClassBody(node)) {
         return;
       }
       _forMixinMember(node);
-      var element = node.members.elementBefore(offset);
+      var element = node.body.members.elementBefore(offset);
       if (element is MethodDeclaration) {
         var body = element.body;
         if (body.isEmpty) {
@@ -2325,7 +2352,9 @@
         collector.completionLocation = 'PatternField_pattern';
       }
       _forPatternFieldName(node, isKeywordNeeded: false, isTypeNeeded: false);
+      return;
     }
+    node.parent?.accept(this);
   }
 
   @override
@@ -2404,6 +2433,76 @@
   }
 
   @override
+  void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
+    var formalParameters = node.formalParameters;
+    var parameter = formalParameters.parameters.firstOrNull;
+    if (parameter == null) {
+      return;
+    }
+
+    NormalFormalParameter? normalParameter;
+    switch (parameter) {
+      case DefaultFormalParameter(:var parameter):
+        normalParameter = parameter;
+      case NormalFormalParameter():
+        normalParameter = parameter;
+    }
+
+    var nameToken = normalParameter.name;
+    if (nameToken == null) {
+      return;
+    }
+
+    TypeAnnotation? parameterType;
+    switch (normalParameter) {
+      case FieldFormalParameter(:var type):
+        parameterType = type;
+      case FunctionTypedFormalParameter(:var returnType):
+        parameterType = returnType;
+      case SimpleFormalParameter(:var type):
+        parameterType = type;
+      case SuperFormalParameter(:var type):
+        parameterType = type;
+    }
+
+    bool hasIncompleteAnnotation() {
+      var next = formalParameters.leftParenthesis.next;
+      if (next == null) {
+        return false;
+      }
+      var following = next.next;
+      return next.type == TokenType.AT ||
+          (next.isSynthetic && following?.type == TokenType.AT);
+    }
+
+    if (offset <= nameToken.end) {
+      if (parameterType == null || parameterType.isFullySynthetic) {
+        if (nameToken.isSynthetic && hasIncompleteAnnotation()) {
+          collector.completionLocation = 'Annotation_name';
+          _forAnnotation(normalParameter);
+        } else {
+          collector.completionLocation =
+              'PrimaryConstructorDeclaration_fieldType';
+          declarationHelper(
+            mustBeType: true,
+          ).addLexicalDeclarations(normalParameter);
+        }
+      } else {
+        collector.completionLocation =
+            'PrimaryConstructorDeclaration_fieldName';
+        identifierHelper(
+          includePrivateIdentifiers: true,
+        ).addVariable(parameterType);
+      }
+    } else {
+      collector.completionLocation = 'PrimaryConstructorDeclaration_fieldName';
+      identifierHelper(
+        includePrivateIdentifiers: true,
+      ).addSuggestionsFromTypeName(nameToken.lexeme);
+    }
+  }
+
+  @override
   void visitPropertyAccess(PropertyAccess node) {
     var operator = node.operator;
     if (offset <= operator.offset) {
@@ -2587,41 +2686,6 @@
   }
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    bool hasIncompleteAnnotation() {
-      var next = node.leftParenthesis.next!;
-      return next.type == TokenType.AT ||
-          (next.isSynthetic && next.next!.type == TokenType.AT);
-    }
-
-    var fieldName = node.fieldName;
-    if (offset <= fieldName.end) {
-      var fieldType = node.fieldType;
-      if (fieldType.isFullySynthetic) {
-        if (fieldName.isSynthetic && hasIncompleteAnnotation()) {
-          collector.completionLocation = 'Annotation_name';
-          _forAnnotation(node);
-        } else {
-          collector.completionLocation = 'RepresentationDeclaration_fieldType';
-          declarationHelper(mustBeType: true).addLexicalDeclarations(node);
-        }
-      } else {
-        collector.completionLocation = 'RepresentationDeclaration_fieldName';
-        identifierHelper(
-          includePrivateIdentifiers: true,
-        ).addVariable(fieldType);
-      }
-    } else {
-      // The name might be a type and the user might be trying to type a name
-      // for the variable.
-      collector.completionLocation = 'RepresentationDeclaration_fieldName';
-      identifierHelper(
-        includePrivateIdentifiers: true,
-      ).addSuggestionsFromTypeName(fieldName.lexeme);
-    }
-  }
-
-  @override
   void visitRestPatternElement(RestPatternElement node) {
     collector.completionLocation = 'RestPatternElement_pattern';
     _forPattern(node);
@@ -2655,6 +2719,11 @@
 
   @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
+    if (node.parent?.parent case PrimaryConstructorDeclaration primary) {
+      primary.accept(this);
+      return;
+    }
+
     var name = node.name;
     var noRequired = node.requiredKeyword == null;
     bool suggestCovariant = true;
@@ -2788,7 +2857,7 @@
     if (period != null &&
         offset >= period.end &&
         offset <= node.argumentList.offset) {
-      var container = constructor.parent;
+      var container = constructor.parent?.parent;
       var superType = switch (container) {
         ClassDeclaration() => container.declaredFragment?.element.supertype,
         EnumDeclaration() => container.declaredFragment?.element.supertype,
@@ -3157,6 +3226,9 @@
     if (offset <= node.name.end) {
       var constAdded = false;
       var container = grandparent?.parent;
+      if (container is BlockClassBody) {
+        container = container.parent;
+      }
       var keyword = parent.keyword;
       var type = parent.type;
       if (type == null) {
@@ -3859,7 +3931,7 @@
   void _forRedirectingConstructorInvocation(
     ConstructorDeclaration constructor,
   ) {
-    var container = constructor.parent;
+    var container = constructor.parent?.parent;
     var thisType = switch (container) {
       ClassDeclaration() => container.declaredFragment?.element.thisType,
       EnumDeclaration() => container.declaredFragment?.element.thisType,
@@ -4275,11 +4347,11 @@
       AdjacentStrings(:var strings) => strings.contains(child),
       ArgumentList(:var arguments) => arguments.contains(child),
       Block(:var statements) => statements.contains(child),
+      BlockClassBody(:var members) => members.contains(child),
       CascadeExpression(:var cascadeSections) => cascadeSections.contains(
         child,
       ),
-      ClassDeclaration(:var members, :var metadata) =>
-        members.contains(child) || metadata.contains(child),
+      ClassDeclaration(:var metadata) => metadata.contains(child),
       ClassTypeAlias(:var metadata) => metadata.contains(child),
       Comment(:var references) => references.contains(child),
       CompilationUnit(:var directives, :var declarations) =>
@@ -4289,18 +4361,15 @@
       DeclaredIdentifier(:var metadata) => metadata.contains(child),
       DottedName(:var components) => components.contains(child),
       EnumConstantDeclaration(:var metadata) => metadata.contains(child),
-      EnumDeclaration(:var constants, :var members, :var metadata) =>
-        constants.contains(child) ||
-            members.contains(child) ||
-            metadata.contains(child),
+      EnumBody(:var constants, :var members) =>
+        constants.contains(child) || members.contains(child),
+      EnumDeclaration(:var metadata) => metadata.contains(child),
       ExportDirective(:var combinators, :var configurations, :var metadata) =>
         combinators.contains(child) ||
             configurations.contains(child) ||
             metadata.contains(child),
-      ExtensionDeclaration(:var members, :var metadata) =>
-        members.contains(child) || metadata.contains(child),
-      ExtensionTypeDeclaration(:var members, :var metadata) =>
-        members.contains(child) || metadata.contains(child),
+      ExtensionDeclaration(:var metadata) => metadata.contains(child),
+      ExtensionTypeDeclaration(:var metadata) => metadata.contains(child),
       FieldDeclaration(:var metadata) => metadata.contains(child),
       ForEachPartsWithPattern(:var metadata) => metadata.contains(child),
       FormalParameter(:var metadata) => metadata.contains(child),
@@ -4322,8 +4391,7 @@
       ListPattern(:var elements) => elements.contains(child),
       MapPattern(:var elements) => elements.contains(child),
       MethodDeclaration(:var metadata) => metadata.contains(child),
-      MixinDeclaration(:var members, :var metadata) =>
-        members.contains(child) || metadata.contains(child),
+      MixinDeclaration(:var metadata) => metadata.contains(child),
       MixinOnClause(:var superclassConstraints) =>
         superclassConstraints.contains(child),
       ObjectPattern(:var fields) => fields.contains(child),
@@ -4337,9 +4405,6 @@
       ),
       RecordTypeAnnotationField(:var metadata) => metadata.contains(child),
       RecordTypeAnnotationNamedFields(:var fields) => fields.contains(child),
-      RepresentationDeclaration(:var fieldMetadata) => fieldMetadata.contains(
-        child,
-      ),
       SetOrMapLiteral(:var elements) => elements.contains(child),
       ShowCombinator(:var shownNames) => shownNames.contains(child),
       SwitchExpression(:var cases) => cases.contains(child),
@@ -4363,7 +4428,12 @@
 extension on ClassDeclaration {
   /// Whether this class declaration doesn't have a body.
   bool get hasNoBody {
-    return leftBracket.isSynthetic && rightBracket.isSynthetic;
+    switch (body) {
+      case BlockClassBody body:
+        return body.leftBracket.isSynthetic && body.rightBracket.isSynthetic;
+      default:
+        return true;
+    }
   }
 }
 
@@ -4371,13 +4441,13 @@
   /// Returns the member before `this`, or `null` if this is the first member in
   /// the body.
   ClassMember? get precedingMember {
-    var parent = this.parent;
+    var parent = this.parent?.parent;
     var members = switch (parent) {
-      ClassDeclaration() => parent.members,
-      EnumDeclaration() => parent.members,
-      ExtensionDeclaration() => parent.members,
-      ExtensionTypeDeclaration() => parent.members,
-      MixinDeclaration() => parent.members,
+      ClassDeclaration(:BlockClassBody body) => body.members,
+      EnumDeclaration() => parent.body.members,
+      ExtensionDeclaration() => parent.body.members,
+      ExtensionTypeDeclaration(:BlockClassBody body) => body.members,
+      MixinDeclaration() => parent.body.members,
       _ => null,
     };
     if (members == null) {
@@ -4398,6 +4468,10 @@
     switch (parent) {
       case Annotation invocation:
         return invocation.element;
+      case DotShorthandConstructorInvocation invocation:
+        return invocation.element;
+      case DotShorthandInvocation invocation:
+        return invocation.memberName.element;
       case EnumConstantArguments invocation:
         var grandParent = invocation.parent;
         if (grandParent is EnumConstantDeclaration) {
@@ -4443,7 +4517,9 @@
 
   /// Returns a record whose fields indicate the number of positional arguments
   /// before the argument at the [argumentIndex], and the names of named
-  /// parameters that are already in use.
+  /// parameters that are already in use either by this argument list or in the
+  /// case of an invocation of a super constructor, already in use as super
+  /// parameters.
   ({int positionalArgumentCount, Set<String> usedNames}) argumentContext(
     int argumentIndex,
   ) {
@@ -4457,6 +4533,25 @@
         positionalArgumentCount++;
       }
     }
+
+    // Add in any names used by super parameters.
+    if (parent case SuperConstructorInvocation(
+      parent: ConstructorDeclaration constructor,
+    )) {
+      var parameters = constructor.parameters.parameters;
+      for (var i = 0; i < parameters.length; i++) {
+        var parameter = parameters[i];
+        if (!parameter.isNamed) continue;
+
+        var formalParameter = parameter is DefaultFormalParameter
+            ? parameter.parameter
+            : parameter;
+        if (formalParameter is SuperFormalParameter) {
+          usedNames.add(formalParameter.name.lexeme);
+        }
+      }
+    }
+
     return (
       positionalArgumentCount: positionalArgumentCount,
       usedNames: usedNames,
@@ -4563,7 +4658,12 @@
 extension on ExtensionTypeDeclaration {
   /// Whether this class declaration doesn't have a body.
   bool get hasNoBody {
-    return leftBracket.isSynthetic && rightBracket.isSynthetic;
+    switch (body) {
+      case BlockClassBody body:
+        return body.leftBracket.isSynthetic && body.rightBracket.isSynthetic;
+      default:
+        return true;
+    }
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_helper.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_helper.dart
index 7c29b0e..4ddeffe 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_helper.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_helper.dart
@@ -64,7 +64,7 @@
 
   /// Checks if the [element] has the `@nonVirtual` annotation.
   bool _hasNonVirtualAnnotation(ExecutableElement element) {
-    if (element is GetterElement && element.isSynthetic) {
+    if (element is GetterElement && element.isOriginVariable) {
       var variable = element.variable;
       if (variable.metadata.hasNonVirtual) {
         return true;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/relevance_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/relevance_computer.dart
index 15c003b..29634ad 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/relevance_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/relevance_computer.dart
@@ -641,7 +641,7 @@
     double inheritanceDistance,
     bool isNotImportedLibrary,
   ) {
-    if (accessor.isSynthetic) {
+    if (accessor.isOriginVariable) {
       if (accessor is GetterElement) {
         var variable = accessor.variable;
         if (variable is FieldElement) {
@@ -675,7 +675,7 @@
     double inheritanceDistance,
     bool isNotImportedLibrary,
   ) {
-    if (element.isSynthetic) {
+    if (element.isOriginGetterSetter) {
       var getter = element.getter;
       if (getter != null) {
         var variable = getter.variable;
@@ -698,7 +698,7 @@
     PropertyAccessorElement accessor,
     bool isNotImportedLibrary,
   ) {
-    if (accessor.isSynthetic) {
+    if (accessor.isOriginVariable) {
       if (accessor is GetterElement) {
         var variable = accessor.variable;
         if (variable is TopLevelVariableElement) {
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 2c63ada..ca920de 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
@@ -154,8 +154,8 @@
         completion,
         selectionOffset,
         0,
-        false,
-        false,
+        false /*isDeprecated*/,
+        false /*isPotential*/,
         displayText: displayText,
       ),
     );
@@ -734,8 +734,8 @@
       completion,
       selectionOffset,
       0,
-      false,
-      false,
+      false /*isDeprecated*/,
+      false /*isPotential*/,
       parameterName: name,
       parameterType: type,
       replacementLength: replacementLength,
@@ -858,8 +858,8 @@
       completion,
       selectionRange.offset - offsetDelta,
       selectionRange.length,
-      element.metadata.hasDeprecated,
-      false,
+      element.isDeprecatedWithKind('use'),
+      false /*isPotential*/,
       displayText: displayText,
       requiredImports: overrideImports.toList(),
     );
@@ -910,8 +910,8 @@
         completion,
         completion.length,
         0,
-        false,
-        false,
+        false /*isDeprecated*/,
+        false /*isPotential*/,
         displayText: displayText,
         returnType: returnType,
         requiredImports: requiredImports,
@@ -936,8 +936,8 @@
         completion,
         selectionOffset,
         0,
-        false,
-        false,
+        false /*isDeprecated*/,
+        false /*isPotential*/,
         // Let the user know that we are going to insert a complete statement.
         displayText: displayText,
       ),
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 206085a..7e7e665 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -20,7 +20,7 @@
     show Element, ElementKind;
 
 /// The name of the type `dynamic`;
-const DYNAMIC = 'dynamic';
+const _dynamicName = 'dynamic';
 
 /// Sort by relevance first, highest to lowest, and then by the completion
 /// alphabetically.
@@ -249,7 +249,7 @@
   DartType type;
   var element = identifier.element;
   if (element == null) {
-    return DYNAMIC;
+    return _dynamicName;
   } else if (element is FunctionTypedElement) {
     if (element is PropertyAccessorElement && element is SetterElement) {
       return null;
@@ -273,7 +273,7 @@
     if (declaredType is NamedType) {
       return declaredType.qualifiedName;
     }
-    return DYNAMIC;
+    return _dynamicName;
   }
   return type.getDisplayString();
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
index 79b03e0..c3195e4 100644
--- a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
@@ -20,8 +20,7 @@
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/source/source_range.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 import 'package:collection/collection.dart';
@@ -188,8 +187,7 @@
     }
     for (var diagnostic in statementContext.resolveResult.diagnostics) {
       if (diagnostic.offset >= node.offset && diagnostic.offset <= node.end) {
-        if (diagnostic.diagnosticCode is! HintCode &&
-            diagnostic.diagnosticCode is! WarningCode) {
+        if (diagnostic.diagnosticCode.type == DiagnosticType.SYNTACTIC_ERROR) {
           diagnostics.add(diagnostic);
         }
       }
@@ -313,7 +311,7 @@
           : null;
     }
 
-    var expr = diagnosticMatching(ScannerErrorCode.unterminatedStringLiteral);
+    var expr = diagnosticMatching(diag.unterminatedStringLiteral);
     if (expr != null) {
       var source = utils.getNodeText(expr);
       var content = source;
@@ -339,15 +337,12 @@
         delimiter = content.substring(0, 1);
         loc = expr.offset + source.length;
       }
-      _removeError(ScannerErrorCode.unterminatedStringLiteral);
+      _removeError(diag.unterminatedStringLiteral);
       _addInsertEdit(loc, delimiter);
     }
     expr =
-        diagnosticMatching(
-          ParserErrorCode.expectedToken,
-          partialMatch: "']'",
-        ) ??
-        diagnosticMatching(ParserErrorCode.expectedToken, partialMatch: "']'");
+        diagnosticMatching(diag.expectedToken, partialMatch: "']'") ??
+        diagnosticMatching(diag.expectedToken, partialMatch: "']'");
     if (expr != null) {
       expr = expr.thisOrAncestorOfType<ListLiteral>();
       if (expr is ListLiteral) {
@@ -360,7 +355,7 @@
           } else {
             _addInsertEdit(loc, ']');
           }
-          _removeError(ParserErrorCode.expectedToken, partialMatch: "']'");
+          _removeError(diag.expectedToken, partialMatch: "']'");
         }
       }
     }
@@ -397,7 +392,11 @@
     if (node is! ClassDeclaration) {
       return false;
     }
-    if (node.leftBracket.isSynthetic && diagnostics.length == 1) {
+    var body = node.body;
+    if (body is! BlockClassBody) {
+      return false;
+    }
+    if (body.leftBracket.isSynthetic && diagnostics.length == 1) {
       // The space before the left brace is assumed to exist, even if it does not.
       var sb = SourceBuilder(file, node.end - eol.length);
       sb.append(' ');
@@ -430,10 +429,7 @@
     var previousInsertions = _lengthOfInsertions();
     var delta = 0;
     if (diagnostics.isNotEmpty) {
-      var error = _findDiagnostic(
-        ParserErrorCode.expectedToken,
-        partialMatch: "';'",
-      );
+      var error = _findDiagnostic(diag.expectedToken, partialMatch: "';'");
       if (error != null) {
         int insertOffset;
         // Fasta scanner reports unterminated string literal errors
@@ -747,7 +743,7 @@
     var needsParen = false;
     int computeExitPos(FormalParameterList parameters) {
       if (needsParen = parameters.rightParenthesis.isSynthetic) {
-        var error = _findDiagnostic(ParserErrorCode.missingClosingParenthesis);
+        var error = _findDiagnostic(diag.missingClosingParenthesis);
         if (error != null) {
           return error.offset - 1;
         }
@@ -786,10 +782,7 @@
     if (node is! FunctionDeclarationStatement) {
       return false;
     }
-    var error = _findDiagnostic(
-      ParserErrorCode.expectedToken,
-      partialMatch: "';'",
-    );
+    var error = _findDiagnostic(diag.expectedToken, partialMatch: "';'");
     if (error != null) {
       var src = utils.getNodeText(node);
       var insertOffset = node.functionDeclaration.end - eol.length;
@@ -920,10 +913,7 @@
   }
 
   bool _complete_methodCall(AstNode node) {
-    var parenError = _findDiagnostic(
-      ParserErrorCode.expectedToken,
-      partialMatch: "')'",
-    );
+    var parenError = _findDiagnostic(diag.expectedToken, partialMatch: "')'");
     if (parenError == null) {
       return false;
     }
@@ -941,7 +931,7 @@
     var loc = min(selectionOffset, argList.end);
     _addInsertEdit(loc, ')');
     var semicolonError = _findDiagnostic(
-      ParserErrorCode.expectedToken,
+      diag.expectedToken,
       partialMatch: "';'",
     );
     if (semicolonError != null) {
@@ -975,10 +965,7 @@
     if (diagnostics.length != 1) {
       return false;
     }
-    var error = _findDiagnostic(
-      ParserErrorCode.expectedToken,
-      partialMatch: "';'",
-    );
+    var error = _findDiagnostic(diag.expectedToken, partialMatch: "';'");
     if (error != null) {
       var previousInsertions = _lengthOfInsertions();
       // TODO(messick): Fix this to find the correct place in all cases.
@@ -1070,7 +1057,7 @@
         if (onKeyword != null && exceptionType != null) {
           if (exceptionType.length == 0 ||
               _findDiagnostic(
-                    CompileTimeErrorCode.nonTypeInCatchClause,
+                    diag.nonTypeInCatchClause,
                     partialMatch: "name 'catch",
                   ) !=
                   null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 31c7e46..14f2e99 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -32,11 +32,9 @@
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/analysis_rule/rule_context.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/lint/linter_visitor.dart';
 import 'package:analyzer/src/lint/registry.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/pubspec/validators/missing_dependency_validator.dart';
 import 'package:analyzer/src/string_source.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
@@ -50,7 +48,7 @@
 import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
-import 'package:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 import 'package:linter/src/lint_names.dart';
 import 'package:linter/src/rules/directives_ordering.dart';
 import 'package:meta/meta.dart';
@@ -93,11 +91,11 @@
   /// will almost certainly be invalid code.
   static const Map<DiagnosticCode, List<MultiProducerGenerator>>
   nonLintMultiProducerMap = {
-    CompileTimeErrorCode.argumentTypeNotAssignable: [DataDriven.new],
-    CompileTimeErrorCode.castToNonType: [DataDriven.new],
-    CompileTimeErrorCode.dotShorthandUndefinedGetter: [DataDriven.new],
-    CompileTimeErrorCode.dotShorthandUndefinedInvocation: [DataDriven.new],
-    CompileTimeErrorCode.extendsNonClass: [DataDriven.new],
+    diag.argumentTypeNotAssignable: [DataDriven.new],
+    diag.castToNonType: [DataDriven.new],
+    diag.dotShorthandUndefinedGetter: [DataDriven.new],
+    diag.dotShorthandUndefinedInvocation: [DataDriven.new],
+    diag.extendsNonClass: [DataDriven.new],
     // TODO(brianwilkerson): The following fix fails if an invocation of the
     //  function is the argument that needs to be removed.
     // CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS: [
@@ -108,39 +106,33 @@
     // CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED: [
     //   DataDriven.newInstance,
     // ],
-    CompileTimeErrorCode.implementsNonClass: [DataDriven.new],
-    CompileTimeErrorCode.invalidOverride: [DataDriven.new],
-    CompileTimeErrorCode.invalidOverrideSetter: [DataDriven.new],
-    CompileTimeErrorCode.missingRequiredArgument: [DataDriven.new],
-    CompileTimeErrorCode.mixinOfNonClass: [DataDriven.new],
-    CompileTimeErrorCode.newWithUndefinedConstructorDefault: [DataDriven.new],
-    CompileTimeErrorCode.nonTypeAsTypeArgument: [DataDriven.new],
-    CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural: [
-      DataDriven.new,
-    ],
-    CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular: [
-      DataDriven.new,
-    ],
-    CompileTimeErrorCode.notEnoughPositionalArgumentsPlural: [DataDriven.new],
-    CompileTimeErrorCode.notEnoughPositionalArgumentsSingular: [DataDriven.new],
-    CompileTimeErrorCode.undefinedClass: [DataDriven.new],
-    CompileTimeErrorCode.undefinedExtensionGetter: [DataDriven.new],
-    CompileTimeErrorCode.undefinedFunction: [DataDriven.new],
-    CompileTimeErrorCode.undefinedGetter: [DataDriven.new],
-    CompileTimeErrorCode.undefinedIdentifier: [DataDriven.new],
-    CompileTimeErrorCode.undefinedMethod: [DataDriven.new],
-    CompileTimeErrorCode.undefinedNamedParameter: [DataDriven.new],
-    CompileTimeErrorCode.undefinedSetter: [DataDriven.new],
-    CompileTimeErrorCode.wrongNumberOfTypeArguments: [DataDriven.new],
-    CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor: [
-      DataDriven.new,
-    ],
-    CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension: [DataDriven.new],
-    CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod: [DataDriven.new],
-    HintCode.deprecatedMemberUse: [DataDriven.new],
-    HintCode.deprecatedMemberUseWithMessage: [DataDriven.new],
-    WarningCode.deprecatedExportUse: [DataDriven.new],
-    WarningCode.overrideOnNonOverridingMethod: [DataDriven.new],
+    diag.implementsNonClass: [DataDriven.new],
+    diag.invalidOverride: [DataDriven.new],
+    diag.invalidOverrideSetter: [DataDriven.new],
+    diag.missingRequiredArgument: [DataDriven.new],
+    diag.mixinOfNonClass: [DataDriven.new],
+    diag.newWithUndefinedConstructorDefault: [DataDriven.new],
+    diag.nonTypeAsTypeArgument: [DataDriven.new],
+    diag.notEnoughPositionalArgumentsNamePlural: [DataDriven.new],
+    diag.notEnoughPositionalArgumentsNameSingular: [DataDriven.new],
+    diag.notEnoughPositionalArgumentsPlural: [DataDriven.new],
+    diag.notEnoughPositionalArgumentsSingular: [DataDriven.new],
+    diag.undefinedClass: [DataDriven.new],
+    diag.undefinedExtensionGetter: [DataDriven.new],
+    diag.undefinedFunction: [DataDriven.new],
+    diag.undefinedGetter: [DataDriven.new],
+    diag.undefinedIdentifier: [DataDriven.new],
+    diag.undefinedMethod: [DataDriven.new],
+    diag.undefinedNamedParameter: [DataDriven.new],
+    diag.undefinedSetter: [DataDriven.new],
+    diag.wrongNumberOfTypeArguments: [DataDriven.new],
+    diag.wrongNumberOfTypeArgumentsConstructor: [DataDriven.new],
+    diag.wrongNumberOfTypeArgumentsExtension: [DataDriven.new],
+    diag.wrongNumberOfTypeArgumentsMethod: [DataDriven.new],
+    diag.deprecatedMemberUse: [DataDriven.new],
+    diag.deprecatedMemberUseWithMessage: [DataDriven.new],
+    diag.deprecatedExportUse: [DataDriven.new],
+    diag.overrideOnNonOverridingMethod: [DataDriven.new],
   };
 
   /// Cached results of [_canBulkFix].
@@ -441,10 +433,7 @@
           }
           details.add(
             BulkFix(pubspecFile.path, [
-              BulkFixDetail(
-                PubspecWarningCode.missingDependency.name.toLowerCase(),
-                1,
-              ),
+              BulkFixDetail(diag.missingDependency.name.toLowerCase(), 1),
             ]),
           );
         }
@@ -654,9 +643,9 @@
           directivesOrderingError = diagnostic;
           break;
         }
-      } else if (diagnosticCode == WarningCode.duplicateImport ||
-          diagnosticCode == HintCode.unnecessaryImport ||
-          diagnosticCode == WarningCode.unusedImport) {
+      } else if (diagnosticCode == diag.duplicateImport ||
+          diagnosticCode == diag.unnecessaryImport ||
+          diagnosticCode == diag.unusedImport) {
         unusedImportDiagnostics.add(diagnostic);
       }
     }
@@ -713,9 +702,9 @@
     // See https://github.com/dart-lang/sdk/issues/61301
     // Since the output for it should be before any other fixes like editing
     // the return type
-    if (a.diagnosticCode == LinterLintCode.annotateOverrides) {
+    if (a.diagnosticCode == diag.annotateOverrides) {
       return -1;
-    } else if (b.diagnosticCode == LinterLintCode.annotateOverrides) {
+    } else if (b.diagnosticCode == diag.annotateOverrides) {
       return 1;
     }
     return 0;
@@ -918,9 +907,7 @@
         var diagnostics = unitResult.diagnostics;
         // Check if there are scan/parse errors in the file.
         var hasParseErrors = diagnostics.any(
-          (d) =>
-              d.diagnosticCode is ScannerErrorCode ||
-              d.diagnosticCode is ParserErrorCode,
+          (d) => d.diagnosticCode.type == DiagnosticType.SYNTACTIC_ERROR,
         );
         if (hasParseErrors) {
           // Cannot process files with parse errors.
@@ -1155,9 +1142,9 @@
   bool get isFixable {
     // Special cases that can be bulk fixed by this class but not by
     // FixProcessor.
-    if (diagnosticCode == WarningCode.duplicateImport ||
-        diagnosticCode == HintCode.unnecessaryImport ||
-        diagnosticCode == WarningCode.unusedImport ||
+    if (diagnosticCode == diag.duplicateImport ||
+        diagnosticCode == diag.unnecessaryImport ||
+        diagnosticCode == diag.unusedImport ||
         (DirectivesOrdering.allCodes.contains(diagnosticCode))) {
       return true;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_class_modifier.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_class_modifier.dart
index 17ad2c4..0d65827 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_class_modifier.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_class_modifier.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/utilities/extensions/object.dart';
 import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -53,11 +54,13 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     var node = this.node;
-    if (node is! NamedCompilationUnitMember) return;
+
+    var declaration = node.ifTypeOrNull<CompilationUnitMember>() ?? node.parent;
+    if (declaration is! CompilationUnitMember) return;
 
     await builder.addDartFileEdit(file, (builder) {
       builder.addSimpleInsertion(
-        node.firstTokenAfterCommentAndMetadata.offset,
+        declaration.firstTokenAfterCommentAndMetadata.offset,
         '$modifier ',
       );
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart
index 7b46c7d..47865f2 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_const.dart
@@ -14,7 +14,7 @@
 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:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 
 class AddConst extends ResolvedCorrectionProducer {
   AddConst({required super.context});
@@ -184,8 +184,7 @@
   bool _declarationListIsFullyConst(NodeList<VariableDeclaration> variables) {
     var diagnostics = [
       ...unitResult.diagnostics.where(
-        (error) =>
-            error.diagnosticCode == LinterLintCode.preferConstConstructors,
+        (error) => error.diagnosticCode == diag.preferConstConstructors,
       ),
     ];
     var ranges = diagnostics.map(range.diagnostic);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
index 75321b6..395845a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analysis_server/src/utilities/extensions/object.dart';
 import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -15,7 +16,7 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
-import 'package:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 import 'package:linter/src/lint_names.dart';
 
 class AddDiagnosticPropertyReference extends ResolvedCorrectionProducer {
@@ -322,7 +323,7 @@
   }
 
   /// Returns a list of all the [Diagnostic]s of type
-  /// [LinterLintCode.diagnosticDescribeAllProperties] for the given
+  /// [diag.diagnosticDescribeAllProperties] for the given
   /// [declaration].
   List<Diagnostic> _getAllDiagnosticsInClass(ClassDeclaration declaration) {
     var propertyDiagnostics = <Diagnostic>[];
@@ -331,7 +332,7 @@
     for (var diagnostic in unitResult.diagnostics) {
       var diagnosticCode = diagnostic.diagnosticCode;
       if (diagnosticCode.type == DiagnosticType.LINT &&
-          diagnosticCode == LinterLintCode.diagnosticDescribeAllProperties &&
+          diagnosticCode == diag.diagnosticDescribeAllProperties &&
           diagnostic.offset > startOffset &&
           diagnostic.offset < endOffset) {
         propertyDiagnostics.add(diagnostic);
@@ -464,7 +465,9 @@
 }
 
 extension on ClassDeclaration {
-  MethodDeclaration? get debugFillPropertiesDeclaration => members
+  MethodDeclaration? get debugFillPropertiesDeclaration => body
+      .ifTypeOrNull<BlockClassBody>()
+      ?.members
       .whereType<MethodDeclaration>()
       .where((e) => e.name.lexeme == 'debugFillProperties')
       .singleOrNull;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart
index 72a6e34..69d2669 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart
@@ -61,7 +61,7 @@
     var targetSource = targetFragment.libraryFragment.source;
     var targetFile = targetSource.fullName;
 
-    var constructors = targetNode.members
+    var constructors = targetNode.body.members
         .whereType<ConstructorDeclaration>()
         .where((con) => con.factoryKeyword == null);
 
@@ -75,7 +75,7 @@
     var constructorName = length == 1 ? constructors.first.name?.lexeme : null;
     var addition = constructorName != null ? '.$constructorName()' : '';
 
-    var lastConstant = targetNode.constants.lastOrNull;
+    var lastConstant = targetNode.body.constants.lastOrNull;
 
     await builder.addDartFileEdit(targetFile, (builder) {
       if (lastConstant != null) {
@@ -85,7 +85,7 @@
           builder.write(addition);
         });
       } else {
-        builder.addInsertion(targetNode.rightBracket.offset, (builder) {
+        builder.addInsertion(targetNode.body.rightBracket.offset, (builder) {
           builder.write(_constantName);
           builder.write(addition);
         });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_field_formal_parameters.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_field_formal_parameters.dart
index 79f5ded..3785ed7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_field_formal_parameters.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_field_formal_parameters.dart
@@ -11,11 +11,11 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:collection/collection.dart';
 
-/// The boolean value indicates whether the field is required.
-/// The string value is the field/parameter name.
-typedef _FieldRecord = ({bool isRequired, String parameter});
-
 class AddFieldFormalParameters extends ResolvedCorrectionProducer {
+  static final _charAfterUnderscore = RegExp('[^_]');
+
+  static final _startsWithNumber = RegExp('^[0-9]');
+
   final _Style _style;
 
   @override
@@ -27,8 +27,7 @@
 
   AddFieldFormalParameters.requiredNamed({required super.context})
     : _style = _Style.requiredNamed,
-      fixKind = DartFixKind.addInitializingFormalNamesParameters;
-
+      fixKind = DartFixKind.addInitializingFormalNamedParameters;
   @override
   CorrectionApplicability get applicability =>
       // TODO(applicability): comment on why.
@@ -42,10 +41,9 @@
     }
     List<FormalParameter> parameters = constructor.parameters.parameters;
 
-    var instanceNodeDeclaration = constructor.parent;
-    if (instanceNodeDeclaration is! NamedCompilationUnitMember ||
-        instanceNodeDeclaration is TypeAlias ||
-        instanceNodeDeclaration is FunctionDeclaration) {
+    if (constructor.parent is BlockClassBody ||
+        constructor.parent is EnumBody) {
+    } else {
       return;
     }
 
@@ -61,96 +59,149 @@
         .map((pair) => pair.$1)
         .toList();
 
+    if (fields.isEmpty) {
+      assert(false, 'How can this trigger with no fields?');
+      return;
+    }
+
     // Prepare the last required parameter.
-    FormalParameter? lastRequiredParameter;
+    FormalParameter? lastRequiredPositionalParameter;
     FormalParameter? firstNamedParameter;
+    var containsOptionalPositional = false;
     for (var parameter in parameters) {
       if (parameter.isRequiredPositional) {
-        lastRequiredParameter = parameter;
-      } else if (_style == _Style.base) {
-        break;
+        lastRequiredPositionalParameter = parameter;
       } else if (parameter.isOptionalPositional) {
-        // If there are optional positional parameters, we can't add required
-        // named parameters.
-        return;
+        if (_style == _Style.requiredNamed) {
+          // If there are optional positional parameters, we can't add required
+          // named parameters.
+          return;
+        } else {
+          containsOptionalPositional = true;
+        }
       } else if (parameter.isNamed) {
         firstNamedParameter = parameter;
         break;
       }
     }
 
-    var fieldsRecords = fields.map(_parameterForField).toList();
-    var requiredFirst = getCodeStyleOptions(
-      unitResult.file,
-    ).requiredNamedParametersFirst;
-    if (requiredFirst) {
-      fieldsRecords.sort((a, b) {
-        if (a.isRequired && !b.isRequired) {
-          return -1;
-        } else if (!a.isRequired && b.isRequired) {
-          return 1;
-        }
-        return a.parameter.compareTo(b.parameter);
-      });
-    }
-    var requiredParameters = fieldsRecords.where((r) => r.isRequired);
-    var optionalParameters = fieldsRecords
-        .where((r) => !r.isRequired)
-        .map((r) => r.parameter);
-    var fieldParametersCode = fieldsRecords.map((r) => r.parameter).join(', ');
     await builder.addDartFileEdit(file, (builder) {
-      if (firstNamedParameter != null &&
-          requiredFirst &&
-          requiredParameters.isNotEmpty) {
-        builder.addSimpleInsertion(
-          firstNamedParameter.offset,
-          '${requiredParameters.map((r) => r.parameter).join(', ')}, ',
-        );
-        if (optionalParameters.isNotEmpty) {
-          fieldParametersCode = optionalParameters.join(', ');
+      var insertOffset =
+          (lastRequiredPositionalParameter ??
+                  constructor.parameters.leftParenthesis)
+              .end;
+      var mappedFields = fields.map(
+        (field) => (field, isRequired: _isFieldRequired(field)),
+      );
+      var initializer = <({String publicName, FieldElement field})>[];
+      var addCurlyBraces =
+          firstNamedParameter == null && _style == _Style.requiredNamed;
+      var parametersAtCurly = getCodeStyleOptions(
+        unitResult.file,
+      ).requiredNamedParametersFirst;
+      var curlyOpen = lastRequiredPositionalParameter == null ? '{' : ', {';
+      if (addCurlyBraces && !parametersAtCurly) {
+        builder.addSimpleInsertion(insertOffset, curlyOpen);
+      }
+      if (!addCurlyBraces && _style == _Style.requiredNamed) {
+        if (parametersAtCurly) {
+          insertOffset = firstNamedParameter!.offset;
         } else {
-          return; // No optional parameters to add.
+          insertOffset =
+              parameters.lastOrNull?.end ??
+              constructor.parameters.rightParenthesis.offset;
         }
       }
-      if (_style == _Style.requiredNamed) {
-        var lastParameter = parameters.lastOrNull;
-        if (lastParameter != null) {
-          var write = ', ';
-          if (!lastParameter.isNamed) {
-            write += '{$fieldParametersCode}';
-          } else {
-            write += fieldParametersCode;
+      if (parametersAtCurly) {
+        mappedFields.sorted((r1, r2) {
+          return r1.isRequired == r2.isRequired ? 0 : (r1.isRequired ? -1 : 1);
+        });
+      }
+      var requiredFirst =
+          firstNamedParameter != null &&
+          firstNamedParameter.isRequiredNamed &&
+          parametersAtCurly;
+      builder.addInsertion(insertOffset, (builder) {
+        var addComma = _style == _Style.base
+            ? lastRequiredPositionalParameter != null
+            : !parametersAtCurly && !addCurlyBraces;
+        for (var (field, :isRequired) in mappedFields) {
+          // If we have a required named parameter already, don't add
+          // non-required parameters yet.
+          if (requiredFirst && !isRequired) {
+            continue;
           }
-          builder.addSimpleInsertion(parameters.last.end, write);
-        } else {
-          var offset = constructor.parameters.leftParenthesis.end;
-          builder.addSimpleInsertion(offset, '{$fieldParametersCode}');
+          if (addComma) {
+            builder.write(', ');
+          }
+          addComma = true;
+          if (isRequired) {
+            builder.write('required ');
+          }
+          if (field.isPrivate) {
+            var nameIndex = field.displayName.indexOf(_charAfterUnderscore);
+            var publicName = field.displayName.substring(nameIndex);
+            if (_startsWithNumber.hasMatch(publicName)) {
+              // Like we do for closures suggesting p0, p1, etc.
+              publicName = 'p$publicName';
+            }
+            builder.writeType(field.type);
+            builder.write(' $publicName');
+            initializer.add((field: field, publicName: publicName));
+          } else {
+            builder.write('this.${field.name}');
+          }
         }
-      } else if (lastRequiredParameter != null) {
-        return builder.addSimpleInsertion(
-          lastRequiredParameter.end,
-          ', $fieldParametersCode',
-        );
-      } else {
-        var offset = constructor.parameters.leftParenthesis.end;
-        if (parameters.isNotEmpty) {
-          fieldParametersCode += ', ';
+        if (_style == _Style.base
+            ? containsOptionalPositional || firstNamedParameter != null
+            : firstNamedParameter != null && parametersAtCurly) {
+          builder.write(', ');
         }
-        builder.addSimpleInsertion(offset, fieldParametersCode);
+      });
+      insertOffset =
+          parameters.lastOrNull?.end ??
+          constructor.parameters.rightParenthesis.offset;
+      if (requiredFirst) {
+        builder.addInsertion(insertOffset, (builder) {
+          for (var (field, :isRequired) in mappedFields) {
+            if (isRequired) {
+              continue;
+            }
+            builder.write(', this.${field.name}');
+          }
+        });
+      }
+      if (addCurlyBraces) {
+        builder.addSimpleInsertion(insertOffset, '}');
+      }
+
+      if (initializer.isNotEmpty) {
+        var colonOffset =
+            constructor.separator?.end ??
+            constructor.parameters.rightParenthesis.end;
+        builder.addInsertion(colonOffset, (builder) {
+          if (constructor.separator == null) {
+            builder.write(' :');
+          }
+          var writeComma = false;
+          for (var (:field, :publicName) in initializer) {
+            if (writeComma) {
+              builder.write(',');
+            }
+            writeComma = true;
+            builder.write(' ${field.name} = $publicName');
+          }
+          if (constructor.initializers.isNotEmpty) {
+            builder.write(',');
+          }
+        });
       }
     });
   }
 
-  _FieldRecord _parameterForField(FieldElement field) {
-    var prefix = '';
-    var isRequired = false;
-    if (typeSystem.isPotentiallyNonNullable(field.type) &&
-        _style == _Style.requiredNamed) {
-      isRequired = true;
-      prefix = 'required ';
-    }
-    return (isRequired: isRequired, parameter: '${prefix}this.${field.name}');
-  }
+  bool _isFieldRequired(FieldElement field) =>
+      _style == _Style.requiredNamed &&
+      typeSystem.isPotentiallyNonNullable(field.type);
 }
 
 enum _Style { base, requiredNamed }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_key_to_constructors.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_key_to_constructors.dart
index cde718c..3748f2a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_key_to_constructors.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_key_to_constructors.dart
@@ -16,6 +16,8 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 import 'package:collection/collection.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class AddKeyToConstructors extends ResolvedCorrectionProducer {
   AddKeyToConstructors({required super.context});
 
@@ -33,8 +35,8 @@
   Future<void> compute(ChangeBuilder builder) async {
     var node = this.node;
     var parent = node.parent;
-    if (node is ClassDeclaration) {
-      await _computeClassDeclaration(builder, node);
+    if (parent is ClassDeclaration) {
+      await _computeClassDeclaration(builder, parent);
     } else if (node is ConstructorDeclaration) {
       await _computeConstructorDeclaration(builder, node);
     } else if (parent is ConstructorDeclaration) {
@@ -53,7 +55,7 @@
       }
     }
 
-    for (var member in classDeclaration.members) {
+    for (var member in classDeclaration.members2) {
       if (member is FieldDeclaration && !member.isStatic) {
         if (!member.fields.isFinal) {
           return false;
@@ -79,7 +81,7 @@
     if (keyType == null) {
       return;
     }
-    var className = node.name.lexeme;
+    var className = node.namePart.typeName.lexeme;
     var constructors = node.declaredFragment!.element.supertype?.constructors;
     if (constructors == null) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
index 63a7344..483459c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
@@ -65,10 +65,10 @@
     } else if (node is SimpleIdentifier) {
       var getter = node.writeOrReadElement;
       if (getter is GetterElement &&
-          getter.isSynthetic &&
+          getter.isOriginVariable &&
           getter.enclosingElement is InterfaceElement) {
         var variableElement = getter.variable;
-        if (!variableElement.isSynthetic &&
+        if (variableElement.isOriginDeclaration &&
             !variableElement.isLate &&
             variableElement.setter == null &&
             // It is currently too expensive to do a `getFragmentDeclaration`
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
index f8fefa3..44a4543 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
@@ -106,7 +106,7 @@
     var constantNames = <String>[];
     for (var field in classElement.fields) {
       // Ensure static const.
-      if (field.isSynthetic || !field.isConst || !field.isStatic) {
+      if (field.isOriginGetterSetter || !field.isConst || !field.isStatic) {
         continue;
       }
       // Check for type equality.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter.dart
index f372724..731c76b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter.dart
@@ -6,6 +6,10 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
@@ -15,19 +19,28 @@
   @override
   Future<List<ResolvedCorrectionProducer>> get producers async {
     // `node` is the unmatched argument.
-    var argumentList = node.parent;
-    if (argumentList is! ArgumentList) {
-      return const [];
+    var parent = node.parent;
+    AstNode? invocation;
+    Element? element;
+    if (parent is DefaultFormalParameter) {
+      parent = parent.parent;
+    }
+    if (parent case FormalParameterList(
+      parent: ConstructorDeclaration(:var declaredFragment?),
+    )) {
+      element = declaredFragment.element.superConstructor;
+    } else if (parent case ArgumentList(:var parent)) {
+      invocation = parent;
     }
 
-    var invocation = argumentList.parent;
-    if (invocation == null) {
+    if (invocation == null && element == null) {
       return const [];
     }
 
     var executableParameters = ExecutableParameters.forInvocation(
       sessionHelper,
       invocation,
+      element: element,
     );
     if (executableParameters == null) {
       return const [];
@@ -62,6 +75,9 @@
   FixKind get fixKind => DartFixKind.addMissingParameterPositional;
 
   @override
+  bool get isOptional => true;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     var prefix = _executableParameters.required.isNotEmpty ? ', [' : '[';
     if (_executableParameters.required.isNotEmpty) {
@@ -90,6 +106,8 @@
       // TODO(applicability): comment on why.
       CorrectionApplicability.singleLocation;
 
+  bool get isOptional;
+
   Future<void> _addParameter(
     ChangeBuilder builder,
     int? offset,
@@ -97,17 +115,16 @@
     String suffix,
   ) async {
     // node is the unmatched argument.
-    var argumentList = node.parent;
-    if (argumentList is! ArgumentList) {
+    if (offset == null) {
       return;
     }
-    List<Expression> arguments = argumentList.arguments;
-    var numRequired = _executableParameters.required.length;
-    if (numRequired >= arguments.length) {
-      return;
-    }
-    var argument = arguments[numRequired];
-    if (offset != null) {
+    var parent = node.parent;
+    if (parent case ArgumentList(:var arguments)) {
+      var numRequired = _executableParameters.required.length;
+      if (numRequired >= arguments.length) {
+        return;
+      }
+      var argument = arguments[numRequired];
       await builder.addDartFileEdit(_executableParameters.file, (builder) {
         builder.addInsertion(offset, (builder) {
           builder.write(prefix);
@@ -115,11 +132,48 @@
             argument,
             numRequired,
             <String>{},
+            isOptional: isOptional,
           );
           builder.write(suffix);
         });
       });
     }
+    if (parent is DefaultFormalParameter) {
+      parent = parent.parent;
+    }
+    if (parent case FormalParameterList(:var parameters)) {
+      var numRequired = _executableParameters.required.length;
+      if (numRequired >= parameters.length) {
+        return;
+      }
+      var parameter = parameters[numRequired];
+      await builder.addDartFileEdit(_executableParameters.file, (builder) {
+        SuperFormalParameter formalParameter;
+        DartType? type;
+        if (parameter case DefaultFormalParameter(
+          :var defaultValue,
+          :SuperFormalParameter parameter,
+        )) {
+          formalParameter = parameter;
+          type = parameter.type?.type ?? defaultValue?.staticType;
+        } else if (parameter is SuperFormalParameter) {
+          formalParameter = parameter;
+          type = formalParameter.type?.type;
+        } else {
+          return;
+        }
+        if (isOptional &&
+            type is TypeImpl &&
+            type.nullabilitySuffix != NullabilitySuffix.question) {
+          type = type.withNullability(NullabilitySuffix.question);
+        }
+        builder.addInsertion(offset, (builder) {
+          builder.write(prefix);
+          builder.writeFormalParameter(formalParameter.name.lexeme, type: type);
+          builder.write(suffix);
+        });
+      });
+    }
   }
 }
 
@@ -135,6 +189,9 @@
   FixKind get fixKind => DartFixKind.addMissingParameterRequired;
 
   @override
+  bool get isOptional => false;
+
+  @override
   Future<void> compute(ChangeBuilder builder) async {
     if (_executableParameters.required.isNotEmpty) {
       var lastElement = _executableParameters.required.last;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart
index 78ece3f..c960d53 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_parameter_named.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server_plugin/edit/dart/correction_producer.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';
 
@@ -29,9 +30,66 @@
   Future<void> compute(ChangeBuilder builder) async {
     // Prepare the name of the missing parameter.
     var node = this.node;
-    if (node is! SimpleIdentifier) {
-      return;
+    if (node is SimpleIdentifier) {
+      await _handleArgumentNode(node, builder);
+    } else if (node is SuperFormalParameter) {
+      await _handleSuperFormalParameter(node, builder);
     }
+  }
+
+  Future<void> _addParameter(
+    ChangeBuilder builder,
+    ExecutableParameters context,
+    int? offset,
+    String prefix,
+    String suffix, {
+    NamedExpression? namedExpression,
+    SuperFormalParameter? superFormalParameter,
+  }) async {
+    assert(
+      (namedExpression != null) != (superFormalParameter != null),
+      'Either namedExpression or superFormalParameter must be provided.',
+    );
+    if (offset != null) {
+      if (namedExpression != null) {
+        await builder.addDartFileEdit(context.file, (builder) {
+          builder.addInsertion(offset, (builder) {
+            builder.write(prefix);
+            builder.writeParameterMatchingArgument(
+              namedExpression,
+              0,
+              <String>{},
+            );
+            builder.write(suffix);
+          });
+        });
+      } else if (superFormalParameter != null) {
+        await builder.addDartFileEdit(context.file, (builder) {
+          builder.addInsertion(offset, (builder) {
+            builder.write(prefix);
+            var type = superFormalParameter.type?.type;
+            if (superFormalParameter.parent case DefaultFormalParameter(
+              :var defaultValue?,
+            )) {
+              type ??= defaultValue.staticType;
+            }
+            builder.writeFormalParameter(
+              superFormalParameter.name.lexeme,
+              type: type,
+              isRequiredNamed:
+                  type != null && typeSystem.isPotentiallyNonNullable(type),
+            );
+            builder.write(suffix);
+          });
+        });
+      }
+    }
+  }
+
+  Future<void> _handleArgumentNode(
+    SimpleIdentifier node,
+    ChangeBuilder builder,
+  ) async {
     _parameterName = node.name;
 
     // We expect that the node is part of a NamedExpression.
@@ -60,33 +118,99 @@
       return;
     }
 
-    Future<void> addParameter(int? offset, String prefix, String suffix) async {
-      if (offset != null) {
-        await builder.addDartFileEdit(context.file, (builder) {
-          builder.addInsertion(offset, (builder) {
-            builder.write(prefix);
-            builder.writeParameterMatchingArgument(
-              namedExpression,
-              0,
-              <String>{},
-            );
-            builder.write(suffix);
-          });
-        });
-      }
+    if (context.named.isNotEmpty) {
+      var lastFirst = context.named.last.firstFragment;
+      var prevNode = await context.getParameterNode(lastFirst);
+      await _addParameter(
+        builder,
+        context,
+        prevNode?.end,
+        ', ',
+        '',
+        namedExpression: namedExpression,
+      );
+    } else if (context.required.isNotEmpty) {
+      var lastFirst = context.required.last.firstFragment;
+      var prevNode = await context.getParameterNode(lastFirst);
+      await _addParameter(
+        builder,
+        context,
+        prevNode?.end,
+        ', {',
+        '}',
+        namedExpression: namedExpression,
+      );
+    } else {
+      var parameterList = await context.getParameterList();
+      await _addParameter(
+        builder,
+        context,
+        parameterList?.leftParenthesis.end,
+        '{',
+        '}',
+        namedExpression: namedExpression,
+      );
+    }
+  }
+
+  Future<void> _handleSuperFormalParameter(
+    SuperFormalParameter node,
+    ChangeBuilder builder,
+  ) async {
+    Element? element;
+    if (node.parent?.parent case FormalParameterList(
+      parent: ConstructorDeclaration(:var declaredFragment?),
+    )) {
+      element = declaredFragment.element.superConstructor;
+    }
+
+    // Prepare the invoked element.
+    var context = ExecutableParameters.forInvocation(
+      sessionHelper,
+      null,
+      element: element,
+    );
+    if (context == null) {
+      return;
+    }
+
+    // We cannot add named parameters when there are positional positional.
+    if (context.optionalPositional.isNotEmpty) {
+      return;
     }
 
     if (context.named.isNotEmpty) {
       var lastFirst = context.named.last.firstFragment;
       var prevNode = await context.getParameterNode(lastFirst);
-      await addParameter(prevNode?.end, ', ', '');
+      await _addParameter(
+        builder,
+        context,
+        prevNode?.end,
+        superFormalParameter: node,
+        ', ',
+        '',
+      );
     } else if (context.required.isNotEmpty) {
       var lastFirst = context.required.last.firstFragment;
       var prevNode = await context.getParameterNode(lastFirst);
-      await addParameter(prevNode?.end, ', {', '}');
+      await _addParameter(
+        builder,
+        context,
+        prevNode?.end,
+        superFormalParameter: node,
+        ', {',
+        '}',
+      );
     } else {
       var parameterList = await context.getParameterList();
-      await addParameter(parameterList?.leftParenthesis.end, '{', '}');
+      await _addParameter(
+        builder,
+        context,
+        parameterList?.leftParenthesis.end,
+        superFormalParameter: node,
+        '{',
+        '}',
+      );
     }
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
index cac8c19..0fc1b49 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_super_constructor_invocation.dart
@@ -20,7 +20,7 @@
       return const [];
     }
 
-    var targetClassNode = targetConstructor.parent;
+    var targetClassNode = targetConstructor.parent?.parent;
     if (targetClassNode is! ClassDeclaration) {
       return const [];
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_super_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_super_parameter.dart
index 995250b..39a0171 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_super_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_super_parameter.dart
@@ -39,7 +39,7 @@
     var constructorDeclaration = node.parent;
     if (constructorDeclaration is! ConstructorDeclaration) return;
 
-    var classDeclaration = constructorDeclaration.parent;
+    var classDeclaration = constructorDeclaration.parent?.parent;
     if (classDeclaration is! ClassDeclaration) return;
 
     var classElement = classDeclaration.declaredFragment!.element;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/bind_to_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/bind_to_field.dart
index 7bef682..b949561 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/bind_to_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/bind_to_field.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 import 'package:collection/collection.dart';
 
+import '../../../utilities/extensions/ast.dart';
 import 'create_constructor.dart';
 
 /// Binds a constructor parameter to a newly created field.
@@ -100,17 +101,18 @@
       return;
     }
     if (container is ClassDeclaration &&
-        container.members.any(
+        container.members2.any(
           (member) => switch (member) {
             ConstructorDeclaration() => false,
             FieldDeclaration() => false,
             MethodDeclaration() => member.name.lexeme == parameter.name?.lexeme,
+            PrimaryConstructorBody() => false,
           },
         )) {
       return;
     }
     if (container is EnumDeclaration &&
-        container.constants.any(
+        container.body.constants.any(
           (constant) => constant.name.lexeme == parameter.name?.lexeme,
         )) {
       return;
@@ -155,7 +157,7 @@
     LibraryElement libraryElement2,
   ) {
     if (container is ClassDeclaration) {
-      var fieldWithSameName = container.members
+      var fieldWithSameName = container.members2
           .whereType<FieldDeclaration>()
           .map(
             (member) => member.fields.variables.firstWhereOrNull(
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 e195eca..2114b7d 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
@@ -227,7 +227,7 @@
     await _proposeClassOrMixinMember(builder, node.name, null, (element) {
       return element is FieldElement &&
           !exclusions.contains(element.name) &&
-          !element.isSynthetic &&
+          element.isOriginDeclaration &&
           !element.isExternal &&
           (type == null ||
               typeSystem.isAssignableTo(
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
index 034c877..4705b91 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
@@ -21,6 +21,8 @@
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 import 'package:collection/collection.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class ConvertClassToEnum extends ResolvedCorrectionProducer {
   ConvertClassToEnum({required super.context});
 
@@ -39,8 +41,9 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var declaration = node;
-    if (declaration is! ClassDeclaration || declaration.name != token) {
+    var declaration = node.parent;
+    if (declaration is! ClassDeclaration ||
+        declaration.namePart.typeName != token) {
       return;
     }
     if (!isEnabled(Feature.enhanced_enums)) {
@@ -173,7 +176,8 @@
 
   /// Return the offset immediately following the opening brace for the class
   /// body.
-  int get bodyOffset => classDeclaration.leftBracket.end;
+  int get bodyOffset =>
+      (classDeclaration.body as BlockClassBody).leftBracket.end;
 
   /// Use the [builder] and correction [utils] to apply the change necessary to
   /// convert the class to an enum.
@@ -193,7 +197,7 @@
 
     // Compute the declarations of the enum constants and delete the fields
     // being converted.
-    var members = classDeclaration.members;
+    var members = classDeclaration.members2;
     var indent = utils.oneIndent;
     var eol = utils.endOfLine;
     var constantsBuffer = StringBuffer();
@@ -311,7 +315,7 @@
   void _deleteField(
     DartFileEditBuilder builder,
     _Field field,
-    NodeList<ClassMember> members,
+    List<ClassMember> members,
   ) {
     var variableList = field.declarationList;
     if (variableList.variables.length == 1) {
@@ -326,7 +330,7 @@
   /// 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 members = classDeclaration.members2;
     var constructors = members.whereType<ConstructorDeclaration>().toList();
     if (constructors.length != 1) {
       return null;
@@ -555,7 +559,7 @@
     ClassElement classElement,
   ) {
     var constructors = _Constructors();
-    for (var member in classDeclaration.members) {
+    for (var member in classDeclaration.members2) {
       if (member is ConstructorDeclaration) {
         var constructor = member.declaredFragment?.element;
         if (constructor is ConstructorElement) {
@@ -588,7 +592,7 @@
     var potentialFieldsToConvert = <DartObject, List<_ConstantField>>{};
     _Field? indexField;
 
-    for (var member in classDeclaration.members) {
+    for (var member in classDeclaration.members2) {
       if (member is FieldDeclaration) {
         var fieldList = member.fields;
         var fields = fieldList.variables;
@@ -673,7 +677,7 @@
   /// 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) {
+    for (var member in classDeclaration.members2) {
       if (member is MethodDeclaration) {
         var name = member.name.lexeme;
         if (name == '==' || name == 'hashCode') {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
index 1bebe16..0ca3776 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
@@ -12,6 +12,8 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class ConvertClassToMixin extends ResolvedCorrectionProducer {
   ConvertClassToMixin({required super.context});
 
@@ -29,11 +31,11 @@
     if (classDeclaration == null) {
       return;
     }
-    if (selectionOffset > classDeclaration.name.end ||
+    if (selectionOffset > classDeclaration.namePart.typeName.end ||
         selectionEnd < classDeclaration.classKeyword.offset) {
       return;
     }
-    if (classDeclaration.members.any(
+    if (classDeclaration.members2.any(
       (member) => member is ConstructorDeclaration,
     )) {
       return;
@@ -73,11 +75,11 @@
       builder.addReplacement(
         range.startStart(
           classDeclaration.abstractKeyword ?? classDeclaration.classKeyword,
-          classDeclaration.leftBracket,
+          (classDeclaration.body as BlockClassBody).leftBracket,
         ),
         (builder) {
           builder.write('mixin ');
-          builder.write(classDeclaration.name.lexeme);
+          builder.write(classDeclaration.namePart.typeName.lexeme);
           builder.writeTypeParameters(classElement.typeParameters);
           builder.writeTypes(superclassConstraints, prefix: ' on ');
           builder.writeTypes(interfaces, prefix: ' implements ');
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 07c61a9..0d4bae9 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
@@ -100,10 +100,11 @@
     }
 
     await _write(
-      builder,
-      resolvedUnit,
-      name,
-      targetNode,
+      builder: builder,
+      resolvedUnit: resolvedUnit,
+      name: name,
+      unitMember: targetNode,
+      unitMemberName: targetNode.namePart.typeName,
       constructorName: name,
       argumentList: argumentList,
     );
@@ -118,8 +119,7 @@
     _constructorName = node.toSource();
     // should be synthetic default constructor
     if (constructorElement == null ||
-        !constructorElement.isDefaultConstructor ||
-        !constructorElement.isSynthetic) {
+        !constructorElement.isOriginImplicitDefault) {
       return;
     }
 
@@ -226,7 +226,7 @@
     Token name,
     EnumConstantDeclaration parent,
   ) async {
-    var grandParent = parent.parent;
+    var grandParent = parent.parent?.parent;
     if (grandParent is! EnumDeclaration) {
       return;
     }
@@ -255,24 +255,26 @@
 
     var arguments = parent.arguments;
     _constructorName =
-        '${targetNode.name.lexeme}${arguments?.constructorSelector ?? ''}';
+        '${targetNode.namePart.typeName.lexeme}${arguments?.constructorSelector ?? ''}';
 
     await _write(
-      builder,
-      resolvedUnit,
-      name,
-      targetNode,
+      builder: builder,
+      resolvedUnit: resolvedUnit,
+      name: name,
+      unitMember: targetNode,
+      unitMemberName: targetNode.namePart.typeName,
       isConst: true,
       constructorName: arguments?.constructorSelector?.name.token,
       argumentList: arguments?.argumentList,
     );
   }
 
-  Future<void> _write(
-    ChangeBuilder builder,
-    ResolvedUnitResult resolvedUnit,
-    Token name,
-    NamedCompilationUnitMember unitMember, {
+  Future<void> _write({
+    required ChangeBuilder builder,
+    required ResolvedUnitResult resolvedUnit,
+    required Token name,
+    required CompilationUnitMember unitMember,
+    required Token unitMemberName,
     Token? constructorName,
     bool isConst = false,
     ArgumentList? argumentList,
@@ -281,7 +283,7 @@
     await builder.addDartFileEdit(targetFile, (builder) {
       builder.insertConstructor(unitMember, (builder) {
         builder.writeConstructorDeclaration(
-          unitMember.name.lexeme,
+          unitMemberName.lexeme,
           isConst: isConst,
           argumentList: argumentList,
           constructorName: constructorName?.lexeme,
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
index 573b891..38866b7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
@@ -16,6 +16,8 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 /// The boolean value indicates whether the field is required.
 /// The string value is the field/parameter name.
 typedef _FieldRecord = (bool, String);
@@ -52,8 +54,8 @@
       return;
     }
 
-    var container = fieldDeclaration.parent;
-    if (container is! NamedCompilationUnitMember) {
+    var container = fieldDeclaration.parent?.parent;
+    if (container is! CompilationUnitMember) {
       return;
     }
 
@@ -67,9 +69,9 @@
         }
         fixContext = _FixContext(
           builder: builder,
-          containerName: container.name.lexeme,
+          containerName: container.namePart.typeName.lexeme,
           superType: superType,
-          variableLists: container.members.interestingVariableLists,
+          variableLists: container.members2.interestingVariableLists,
         );
       case EnumDeclaration():
         superType = container.declaredFragment?.element.supertype;
@@ -78,9 +80,9 @@
         }
         fixContext = _FixContext(
           builder: builder,
-          containerName: container.name.lexeme,
+          containerName: container.namePart.typeName.lexeme,
           superType: superType,
-          variableLists: container.members.interestingVariableLists,
+          variableLists: container.body.members.interestingVariableLists,
         );
       case _:
         return;
@@ -145,7 +147,7 @@
 
   Future<void> _forFlutterWidget({
     required _FixContext fixContext,
-    required NamedCompilationUnitMember classDeclaration,
+    required CompilationUnitMember classDeclaration,
     required bool requiredNamedParametersFirst,
   }) async {
     if (unit.featureSet.isEnabled(Feature.super_parameters)) {
@@ -165,7 +167,7 @@
 
   Future<void> _forFlutterWithoutSuperParameters({
     required _FixContext fixContext,
-    required NamedCompilationUnitMember classDeclaration,
+    required CompilationUnitMember classDeclaration,
     required bool requiredNamedParametersFirst,
   }) async {
     var keyClass = await sessionHelper.getFlutterClass('Key');
@@ -220,7 +222,7 @@
 
   Future<void> _forFlutterWithSuperParameters({
     required _FixContext fixContext,
-    required NamedCompilationUnitMember classDeclaration,
+    required CompilationUnitMember classDeclaration,
     required bool requiredNamedParametersFirst,
   }) async {
     await fixContext.builder.addDartFileEdit(file, (builder) {
@@ -263,7 +265,7 @@
 
   Future<void> _notFlutterNamed({
     required _FixContext fixContext,
-    required NamedCompilationUnitMember containerDeclaration,
+    required CompilationUnitMember containerDeclaration,
     required bool isConst,
     required List<_Field> fields,
     required bool requiredNamedParametersFirst,
@@ -344,7 +346,7 @@
 
   Future<void> _notFlutterRequiredPositional({
     required _FixContext fixContext,
-    required NamedCompilationUnitMember containerDeclaration,
+    required CompilationUnitMember containerDeclaration,
     required bool isConst,
     required List<_Field> fields,
   }) async {
@@ -373,7 +375,7 @@
 
   Future<void> _notFlutterWidget({
     required _FixContext fixContext,
-    required NamedCompilationUnitMember containerDeclaration,
+    required CompilationUnitMember containerDeclaration,
     required bool isConst,
     required bool requiredNamedParametersFirst,
   }) async {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
index 06093bd..602f913 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_super.dart
@@ -160,7 +160,7 @@
           }
         }
 
-        builder.write(_targetClass.name.lexeme);
+        builder.write(_targetClass.namePart.typeName.lexeme);
         if (constructorName != null && constructorName != 'new') {
           builder.write('.');
           builder.addSimpleLinkedEdit('NAME', constructorName);
@@ -206,7 +206,7 @@
           builder.write(parameterName);
         }
 
-        builder.write(_targetClass.name.lexeme);
+        builder.write(_targetClass.namePart.typeName.lexeme);
         if (constructorName != null && constructorName != 'new') {
           builder.write('.');
           builder.addSimpleLinkedEdit('NAME', constructorName);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
index 8c13327..d5d574f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
@@ -148,7 +148,7 @@
         // doesn't make sense to create a method.
         return;
       }
-      var enclosingMemberParent = enclosingMember.parent;
+      var enclosingMemberParent = enclosingMember.parent?.parent;
       if (enclosingMemberParent is CompilationUnitMember &&
           enclosingMemberParent is! ExtensionDeclaration) {
         targetNode = enclosingMemberParent;
@@ -160,6 +160,7 @@
             fields: VariableDeclarationList(:var isLate),
           ) =>
             isStatic || !isLate,
+          PrimaryConstructorBody() => false,
         };
       }
     } else {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart
index 6716c0a..b9c58f7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_missing_overrides.dart
@@ -33,8 +33,8 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var targetDeclaration = node;
-    if (targetDeclaration is! NamedCompilationUnitMember) {
+    var targetDeclaration = node.parent;
+    if (targetDeclaration is! CompilationUnitMember) {
       return;
     }
     if (targetDeclaration is! ClassDeclaration &&
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart
index 6429b22..98f6f37 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_no_such_method.dart
@@ -8,6 +8,8 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class CreateNoSuchMethod extends ResolvedCorrectionProducer {
   CreateNoSuchMethod({required super.context});
 
@@ -21,7 +23,7 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var targetClass = node;
+    var targetClass = node.parent;
     if (targetClass is! ClassDeclaration) {
       return;
     }
@@ -32,7 +34,7 @@
       builder.addInsertion(insertOffset, (builder) {
         builder.selectHere();
         // insert empty line before existing member
-        if (targetClass.members.isNotEmpty) {
+        if (targetClass.members2.isNotEmpty) {
           builder.writeln();
         }
         // append method
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
index b5348ac..1a79b1f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
@@ -61,13 +61,13 @@
     // Should be in a class or mixin.
     List<ClassMember> classMembers;
     InterfaceElement parentElement;
-    var parent = fieldDeclaration.parent;
+    var parent = fieldDeclaration.parent?.parent;
     switch (parent) {
       case ClassDeclaration():
-        classMembers = parent.members;
+        classMembers = parent.members2;
         parentElement = parent.declaredFragment!.element;
       case MixinDeclaration():
-        classMembers = parent.members;
+        classMembers = parent.body.members;
         parentElement = parent.declaredFragment!.element;
       default:
         return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
index ca5b9aa..7a41f7b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
@@ -41,7 +41,8 @@
       _typeName = message.substring(startIndex, endIndex);
       await builder.addDartFileEdit(file, (builder) {
         builder.addSimpleInsertion(
-          declaration.typeParameters?.end ?? declaration.name.end,
+          declaration.namePart.typeParameters?.end ??
+              declaration.namePart.typeName.end,
           ' extends $_typeName',
         );
       });
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 c2cd646..150ed19 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
@@ -16,6 +16,8 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class FlutterConvertToStatefulWidget extends ResolvedCorrectionProducer {
   FlutterConvertToStatefulWidget({required super.context});
 
@@ -35,9 +37,14 @@
       return;
     }
 
+    var body = widgetClass.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     // Don't spam, activate only from the `class` keyword to the class body.
     if (selectionOffset < widgetClass.classKeyword.offset ||
-        selectionOffset > widgetClass.leftBracket.end) {
+        selectionOffset > body.leftBracket.end) {
       return;
     }
 
@@ -60,7 +67,7 @@
 
     // Find fields assigned in constructors.
     var visitor = _FieldFinder();
-    for (var member in widgetClass.members) {
+    for (var member in body.members) {
       if (member is ConstructorDeclaration) {
         member.accept(visitor);
       }
@@ -70,7 +77,7 @@
     // Prepare nodes to move.
     var nodesToMove = <ClassMember>{};
     var elementsToMove = <Element>{};
-    for (var member in widgetClass.members) {
+    for (var member in body.members) {
       if (member is FieldDeclaration && !member.isStatic) {
         for (var fieldNode in member.fields.variables) {
           var fieldFragment = fieldNode.declaredFragment as FieldFragment;
@@ -131,7 +138,7 @@
       var hasBuildMethod = false;
 
       var typeParams = '';
-      var typeParameters = widgetClass.typeParameters;
+      var typeParameters = widgetClass.namePart.typeParameters;
       if (typeParameters != null) {
         typeParams = utils.getNodeText(typeParameters);
       }
@@ -155,7 +162,9 @@
             builder.writeln('  @override');
             builder.write('  ');
             builder.writeReference(stateClass);
-            builder.write('<${widgetClass.name.lexeme}$typeParams>');
+            builder.write(
+              '<${widgetClass.namePart.typeName.lexeme}$typeParams>',
+            );
             builder.writeln(' createState() => $stateName$typeParams();');
             if (hasEmptyLineAfterCreateState) {
               builder.writeln();
@@ -171,7 +180,7 @@
       // Remove continuous ranges of lines of nodes being moved.
       var lastToRemoveIsField = false;
       var endOfLastNodeToKeep = 0;
-      for (var node in widgetClass.members) {
+      for (var node in body.members) {
         if (nodesToMove.contains(node)) {
           if (replaceOffset == 0) {
             var comments = node.beginToken.precedingComments;
@@ -202,7 +211,7 @@
           replaceOffset = endOfLastNodeToKeep;
         }
         replaceInterval(
-          widgetClass.rightBracket.offset,
+          body.rightBracket.offset,
           hasEmptyLineBeforeCreateState: endOfLastNodeToKeep != 0,
           hasEmptyLineAfterCreateState: false,
         );
@@ -217,7 +226,7 @@
         builder.writeReference(stateClass);
 
         // Write just param names (and not bounds, metadata and docs).
-        builder.write('<${widgetClass.name.lexeme}');
+        builder.write('<${widgetClass.namePart.typeName.lexeme}');
         if (typeParameters != null) {
           builder.write('<');
           var first = true;
@@ -258,7 +267,7 @@
   }
 
   MethodDeclaration? _findBuildMethod(ClassDeclaration widgetClass) {
-    for (var member in widgetClass.members) {
+    for (var member in widgetClass.members2) {
       if (member is MethodDeclaration && member.name.lexeme == 'build') {
         var parameters = member.parameters;
         if (parameters != null && parameters.parameters.length == 1) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
index 33eb5d1..a9039a3 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
@@ -17,6 +17,8 @@
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class FlutterConvertToStatelessWidget extends ResolvedCorrectionProducer {
   FlutterConvertToStatelessWidget({required super.context});
 
@@ -34,9 +36,14 @@
     var superclass = widgetClass?.extendsClause?.superclass;
     if (widgetClass == null || superclass == null) return;
 
+    var widgetClassBody = widgetClass.body;
+    if (widgetClassBody is! BlockClassBody) {
+      return;
+    }
+
     // Don't spam, activate only from the `class` keyword to the class body.
     if (selectionOffset < widgetClass.classKeyword.offset ||
-        selectionOffset > widgetClass.leftBracket.end) {
+        selectionOffset > widgetClassBody.leftBracket.end) {
       return;
     }
 
@@ -55,7 +62,7 @@
     var stateClassElement = stateClass?.declaredFragment!.element;
     if (stateClass == null ||
         stateClassElement == null ||
-        !Identifier.isPrivateName(stateClass.name.lexeme) ||
+        !Identifier.isPrivateName(stateClass.namePart.typeName.lexeme) ||
         !_isSameTypeParameters(widgetClass, stateClass)) {
       return;
     }
@@ -63,7 +70,7 @@
     var verifier = _StatelessVerifier();
     var fieldFinder = _FieldFinder();
 
-    for (var member in stateClass.members) {
+    for (var member in stateClass.members2) {
       if (member is ConstructorDeclaration) {
         member.accept(fieldFinder);
       } else if (member is MethodDeclaration) {
@@ -86,7 +93,7 @@
     // Prepare nodes to move.
     var nodesToMove = <ClassMember>[];
     var elementsToMove = <Element>{};
-    for (var member in stateClass.members) {
+    for (var member in stateClass.members2) {
       if (member is FieldDeclaration) {
         if (member.isStatic) {
           return;
@@ -182,7 +189,7 @@
   }
 
   MethodDeclaration? _findCreateStateMethod(ClassDeclaration widgetClass) {
-    for (var member in widgetClass.members) {
+    for (var member in widgetClass.members2) {
       if (member is MethodDeclaration && member.name.lexeme == 'createState') {
         var parameters = member.parameters;
         if (parameters?.parameters.isEmpty ?? false) {
@@ -212,7 +219,7 @@
     ClassDeclaration stateClass,
   ) {
     List<TypeParameter>? parameters(ClassDeclaration declaration) =>
-        declaration.typeParameters?.typeParameters;
+        declaration.namePart.typeParameters?.typeParameters;
 
     var widgetParams = parameters(widgetClass);
     var stateParams = parameters(stateClass);
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 9a266ad..dc33c8e 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
@@ -1094,7 +1094,7 @@
     // If there is no explicit target, then return the type of an implicit
     // `this`.
     DartType? enclosingThisType(AstNode node) {
-      var parent = node.parent;
+      var parent = node.parent?.parent;
       if (parent is ClassDeclaration) {
         return parent.declaredFragment?.element.thisType;
       } else if (parent is ExtensionDeclaration) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
index ec0d2be..b025f2c 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
@@ -30,7 +30,7 @@
     if (enclosingClass == null) {
       return;
     }
-    _className = enclosingClass.name.lexeme;
+    _className = enclosingClass.namePart.typeName.lexeme;
 
     await builder.addDartFileEdit(file, (builder) {
       builder.addSimpleInsertion(
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
index 3f4bb11..d180d8d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
@@ -38,13 +38,13 @@
     var getter = node.writeOrReadElement;
 
     // The accessor must be a getter, and it must be synthetic.
-    if (!(getter is GetterElement && getter.isSynthetic)) {
+    if (!(getter is GetterElement && getter.isOriginVariable)) {
       return;
     }
 
     // The variable must be not synthetic, and have no setter yet.
     var variable = getter.variable;
-    if (variable.isSynthetic || variable.setter != null) {
+    if (!variable.isOriginDeclaration || variable.setter != null) {
       return;
     }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart
index e1e0d75..cd216cb 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart
@@ -10,6 +10,8 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class MakeFieldPublic extends ResolvedCorrectionProducer {
   late String _fieldName;
 
@@ -35,12 +37,12 @@
     var getterName = declaration.name.lexeme;
     _fieldName = '_$getterName';
     if (declaration.name == token && declaration.isGetter) {
-      NodeList<ClassMember> members;
-      var container = declaration.parent;
+      List<ClassMember> members;
+      var container = declaration.parent?.parent;
       if (container is ClassDeclaration) {
-        members = container.members;
+        members = container.members2;
       } else if (container is MixinDeclaration) {
-        members = container.members;
+        members = container.body.members;
       } else {
         return;
       }
@@ -73,7 +75,7 @@
 }
 
 extension on DartFileEditBuilder {
-  void removeMember(NodeList<ClassMember> members, ClassMember member) {
+  void removeMember(List<ClassMember> members, ClassMember member) {
     // TODO(brianwilkerson): Consider moving this to DartFileEditBuilder.
     var index = members.indexOf(member);
     if (index == 0) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_abstract.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_abstract.dart
index 7397128..bbef01e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_abstract.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_abstract.dart
@@ -12,6 +12,8 @@
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../../../utilities/extensions/ast.dart';
+
 class RemoveAbstract extends CorrectionProducerWithDiagnostic {
   @override
   final CorrectionApplicability applicability;
@@ -44,6 +46,8 @@
       await _compute(classDeclaration, node.element, builder);
     } else if (node is CompilationUnitMember) {
       await _computeAbstractClassMember(builder);
+    } else if (node is BlockClassBody) {
+      await _computeAbstractClassMember(builder);
     }
   }
 
@@ -54,7 +58,7 @@
   ) async {
     if (classDeclaration == null) return;
 
-    for (var member in classDeclaration.members) {
+    for (var member in classDeclaration.members2) {
       if (member is FieldDeclaration) {
         var fields = member.fields;
         var variables = fields.variables;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
index c3ef2a6..6bb5820 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_comparison.dart
@@ -8,11 +8,11 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/source/source_range.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 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:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 
 class RemoveComparison extends ResolvedCorrectionProducer {
   @override
@@ -38,21 +38,20 @@
   /// Whether the condition will always return `false`.
   bool get _conditionIsFalse {
     var diagnosticCode = (diagnostic as Diagnostic).diagnosticCode;
-    return diagnosticCode == WarningCode.unnecessaryNanComparisonFalse ||
-        diagnosticCode ==
-            WarningCode.unnecessaryNullComparisonAlwaysNullFalse ||
-        diagnosticCode == WarningCode.unnecessaryNullComparisonNeverNullFalse ||
-        diagnosticCode == WarningCode.unnecessaryTypeCheckFalse;
+    return diagnosticCode == diag.unnecessaryNanComparisonFalse ||
+        diagnosticCode == diag.unnecessaryNullComparisonAlwaysNullFalse ||
+        diagnosticCode == diag.unnecessaryNullComparisonNeverNullFalse ||
+        diagnosticCode == diag.unnecessaryTypeCheckFalse;
   }
 
   /// Whether the condition will always return `true`.
   bool get _conditionIsTrue {
     var errorCode = (diagnostic as Diagnostic).diagnosticCode;
-    return errorCode == WarningCode.unnecessaryNanComparisonTrue ||
-        errorCode == WarningCode.unnecessaryNullComparisonAlwaysNullTrue ||
-        errorCode == WarningCode.unnecessaryNullComparisonNeverNullTrue ||
-        errorCode == WarningCode.unnecessaryTypeCheckTrue ||
-        errorCode == LinterLintCode.avoidNullChecksInEqualityOperators;
+    return errorCode == diag.unnecessaryNanComparisonTrue ||
+        errorCode == diag.unnecessaryNullComparisonAlwaysNullTrue ||
+        errorCode == diag.unnecessaryNullComparisonNeverNullTrue ||
+        errorCode == diag.unnecessaryTypeCheckTrue ||
+        errorCode == diag.avoidNullChecksInEqualityOperators;
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_constructor.dart
index 636f67d..3156529 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_constructor.dart
@@ -63,16 +63,16 @@
   }
 
   _Container? _findContainer() {
-    switch (node) {
+    switch (node.parent) {
       case ExtensionDeclaration extension:
         return _Container(
-          leftBracket: extension.leftBracket,
-          members: extension.members,
+          leftBracket: extension.body.leftBracket,
+          members: extension.body.members,
         );
       case MixinDeclaration mixin:
         return _Container(
-          leftBracket: mixin.leftBracket,
-          members: mixin.members,
+          leftBracket: mixin.body.leftBracket,
+          members: mixin.body.members,
         );
       default:
         return null;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_extends_clause.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_extends_clause.dart
index a128cda..61fbb4e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_extends_clause.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_extends_clause.dart
@@ -31,7 +31,7 @@
       builder.addDeletion(
         range.startStart(
           classDeclaration.extendsClause!,
-          classDeclaration.leftBracket,
+          (classDeclaration.body as BlockClassBody).leftBracket,
         ),
       );
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_on_clause.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_on_clause.dart
index 683e683..fc6f26e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_on_clause.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_on_clause.dart
@@ -32,7 +32,7 @@
       builder.addDeletion(
         range.startStart(
           extensionDeclaration.onClause!,
-          extensionDeclaration.leftBracket,
+          extensionDeclaration.body.leftBracket,
         ),
       );
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
index ea4977a..055bb50 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused.dart
@@ -36,6 +36,10 @@
       return;
     }
 
+    if (node is NameWithTypeParameters) {
+      node = node.parent!;
+    }
+
     Element? element;
     if (node is Declaration) {
       element = node.declaredFragment?.element;
@@ -76,11 +80,15 @@
     required ConstructorDeclaration node,
   }) async {
     NodeList<ClassMember> members;
-    switch (node.parent) {
+    switch (node.parent?.parent) {
       case ClassDeclaration classDeclaration:
-        members = classDeclaration.members;
+        if (classDeclaration.body case BlockClassBody body) {
+          members = body.members;
+        } else {
+          return;
+        }
       case EnumDeclaration enumDeclaration:
-        members = enumDeclaration.members;
+        members = enumDeclaration.body.members;
       case _:
         return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart
index a8ca1f2..b5095592 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart
@@ -43,7 +43,7 @@
     if (methodParameters == null) return;
 
     Fragment? declaredFragment;
-    if (method.parent case Declaration declaration) {
+    if (method.parent?.parent case Declaration declaration) {
       declaredFragment = declaration.declaredFragment;
     }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_decorated_box.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_decorated_box.dart
index 5b11e65..81433ad 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_decorated_box.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_decorated_box.dart
@@ -10,7 +10,7 @@
 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:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 
 class ReplaceWithDecoratedBox extends ResolvedCorrectionProducer {
   ReplaceWithDecoratedBox({required super.context});
@@ -118,7 +118,7 @@
     return unitResult.diagnostics.any((d) {
       var diagnosticCode = d.diagnosticCode;
       return diagnosticCode.type == DiagnosticType.LINT &&
-          diagnosticCode == LinterLintCode.useDecoratedBox &&
+          diagnosticCode == diag.useDecoratedBox &&
           d.offset == constructorName.offset &&
           d.length == constructorName.length;
     });
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
index c131132..62d0072 100644
--- 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
@@ -26,11 +26,16 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     var constructor = coveringNode?.parent;
-    var clazz = constructor?.parent;
+    var clazz = constructor?.parent?.parent;
     if (clazz is! ClassDeclaration || constructor is! ConstructorDeclaration) {
       return;
     }
 
+    var body = clazz.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     await builder.addDartFileEdit(file, (builder) {
       var deletionRange = range.endEnd(
         constructor.firstNonCommentToken.previous!,
@@ -39,7 +44,7 @@
 
       builder.addDeletion(deletionRange);
       builder.addSimpleInsertion(
-        clazz.leftBracket.end,
+        body.leftBracket.end,
         utils.getRangeText(deletionRange),
       );
     });
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
index b8b481d..3972e7d 100644
--- 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
@@ -25,12 +25,17 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    var clazz = coveringNode?.parent?.parent;
+    var clazz = coveringNode?.parent?.parent?.parent;
     if (clazz is! ClassDeclaration) {
       return;
     }
 
-    var members = clazz.members;
+    var body = clazz.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
+    var members = body.members;
     var constructors = members.whereType<ConstructorDeclaration>().toList();
 
     var firstConstructor = constructors.firstOrNull;
@@ -60,7 +65,7 @@
       var firstIndex = members.indexOf(firstConstructor);
       var tokenBeforeFirst = firstIndex != 0
           ? members[firstIndex - 1].endToken
-          : clazz.leftBracket;
+          : body.leftBracket;
       builder.addSimpleInsertion(
         tokenBeforeFirst.end,
         utils.getRangeText(moveRange),
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
index 69709b4..ab682f8 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml
@@ -49,30 +49,30 @@
 # - 500 "hasFix"
 # - 498 "noFix"
 
-AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR:
+INCLUDED_FILE_PARSE_ERROR:
   status: noFix
   notes: |-
     The fix needs to be made in the included file.
-AnalysisOptionsErrorCode.PARSE_ERROR:
+PARSE_ERROR:
   status: noFix
   notes: |-
     Because of the way the YAML parser works, there isn't enough information to
     be able to provide a fix.
-AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED:
+ANALYSIS_OPTION_DEPRECATED:
   status: needsFix
   notes: |-
     The fix is to remove the deprecated option.
-AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT:
+ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT:
   status: hasFix
-AnalysisOptionsWarningCode.DEPRECATED_LINT:
+DEPRECATED_LINT:
   status: hasFix
-AnalysisOptionsWarningCode.DEPRECATED_LINT_WITH_REPLACEMENT:
+DEPRECATED_LINT_WITH_REPLACEMENT:
   status: needsFix
   notes: |-
     We should be able to replace the deprecated lint rule with its replacement.
-AnalysisOptionsWarningCode.DUPLICATE_RULE:
+DUPLICATE_RULE:
   status: hasFix
-AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND:
+INCLUDE_FILE_NOT_FOUND:
   status: noFix
   notes: |-
     It would not be performant to search the disk for analysis options files
@@ -81,244 +81,244 @@
     We could potentially have a fix to create the referenced file that currently
     doesn't exist, but that would only be useful if the missing file is in the
     same repository as the including file.
-AnalysisOptionsWarningCode.INCLUDED_FILE_WARNING:
+INCLUDED_FILE_WARNING:
   status: noFix
   notes: |-
     The fix needs to be made in the included file.
-AnalysisOptionsWarningCode.INCOMPATIBLE_LINT:
+INCOMPATIBLE_LINT:
   status: needsFix
   notes: |-
     Allowing the user to select which rule they would prefer to use so we can
     remove the incompatible ones.
-AnalysisOptionsWarningCode.INCOMPATIBLE_LINT_FILES:
+INCOMPATIBLE_LINT_FILES:
   status: needsFix
   notes: |-
     Allowing the user to select which rule they would prefer to use so we can
     disable the incompatible ones.
-AnalysisOptionsWarningCode.INCOMPATIBLE_LINT_INCLUDED:
+INCOMPATIBLE_LINT_INCLUDED:
   status: needsFix
   notes: |-
     Allowing the user to select which rule they would prefer to use so we can
     disable the incompatible ones.
-AnalysisOptionsWarningCode.INVALID_OPTION:
+INVALID_OPTION:
   status: needsFix
   notes: |-
     We could look for valid options that are similar in spelling to the invalid
     option and replace the invalid option with the selected replacement.
-AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT:
+INVALID_SECTION_FORMAT:
   status: noFix
   notes: |-
     It isn't worth the cost to try to figure out how to convert
     a list, map, or string to a different format.
-AnalysisOptionsWarningCode.MULTIPLE_PLUGINS:
+MULTIPLE_PLUGINS:
   status: needsFix
   notes: |-
     The fix is to remove the plugin name. Might not be worth the cost if we
     can address the question of if/how we're supporting plugins.
-AnalysisOptionsWarningCode.PLUGINS_IN_INNER_OPTIONS:
+PLUGINS_IN_INNER_OPTIONS:
   status: needsFix
   notes: |-
     The fix is to delete the 'plugins' section.
-AnalysisOptionsWarningCode.RECURSIVE_INCLUDE_FILE:
+RECURSIVE_INCLUDE_FILE:
   status: noFix
   notes: |-
     It isn't possible to know the right place to break the recursion. The best
     we could do is to remove the include in the file that the diagnostic is
     reported on.
-AnalysisOptionsWarningCode.REMOVED_LINT:
+REMOVED_LINT:
   status: hasFix
-AnalysisOptionsWarningCode.REPLACED_LINT:
+REPLACED_LINT:
   status: needsFix
   notes: |-
     We should be able to replace the deprecated lint rule with its replacement.
-AnalysisOptionsWarningCode.UNDEFINED_LINT:
+UNDEFINED_LINT:
   status: hasFix
-AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE:
+UNRECOGNIZED_ERROR_CODE:
   status: needsFix
   notes: |-
     The fix would be to replace the code with a valid code whose name is similar
     to the unrecognized code.
-AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE:
+UNSUPPORTED_OPTION_WITH_LEGAL_VALUE:
   status: needsFix
   notes: |-
     The fix is to replace the unsupported option with the one legal value.
-AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES:
+UNSUPPORTED_OPTION_WITH_LEGAL_VALUES:
   status: needsFix
   notes: |-
     The fix is to replace the unsupported option with one of the legal values.
-AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITHOUT_VALUES:
+UNSUPPORTED_OPTION_WITHOUT_VALUES:
   status: hasFix
-AnalysisOptionsWarningCode.UNSUPPORTED_VALUE:
+UNSUPPORTED_VALUE:
   status: needsFix
   notes: |-
     The fix is to replace the unsupported option with one of the legal values.
-CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
+ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
   status: hasFix
-CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER:
+ABSTRACT_FIELD_INITIALIZER:
   status: hasFix
-CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE:
+ABSTRACT_SUPER_MEMBER_REFERENCE:
   status: noFix
   notes: |-
     The only fix we could automate is to remove the call to super, which is
     unlikely to be the right solution.
-CompileTimeErrorCode.AMBIGUOUS_EXPORT:
+AMBIGUOUS_EXPORT:
   status: needsFix
   notes: |-
     For each exported name, add a fix to hide the name.
-CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE:
+AMBIGUOUS_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE:
   status: hasFix
-CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO:
+AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO:
   status: hasFix
-CompileTimeErrorCode.AMBIGUOUS_IMPORT:
+AMBIGUOUS_IMPORT:
   status: hasFix
   notes: |-
     For each imported name, add a fix to add a prefix. We wouldn't be able to
     add the prefix everywhere, but could add it wherever the name was already
     unambiguous.
-CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH:
+AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH:
   status: noFix
   notes: |-
     We could potentially have a pair of fixes: one to remove the elements that
     force it to be a set and one to remove the map related elements. I doubt
     that either is the right solution.
-CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER:
+AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER:
   status: noFix
   notes: |-
     We don't have enough information to add type arguments for the user.
-CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE:
+ARGUMENT_TYPE_NOT_ASSIGNABLE:
   status: hasFix
-CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR:
+ASSERT_IN_REDIRECTING_CONSTRUCTOR:
   status: hasFix
-CompileTimeErrorCode.ASSIGNMENT_TO_CONST:
+ASSIGNMENT_TO_CONST:
   status: noFix
   notes: |-
     Making the field non-const doesn't seem to be a good choice, but it is a
     possibility.
-CompileTimeErrorCode.ASSIGNMENT_TO_FINAL:
+ASSIGNMENT_TO_FINAL:
   status: hasFix
-CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL:
+ASSIGNMENT_TO_FINAL_LOCAL:
   status: hasFix
-CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER:
+ASSIGNMENT_TO_FINAL_NO_SETTER:
   status: needsFix
   notes: |-
     The fix is to create the missing setter.
-CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION:
+ASSIGNMENT_TO_FUNCTION:
   status: noFix
   notes: |-
     Theoretically we could replace the function with a function valued variable
     if the value being assigned is a function with the same signature, but that
     case is likely rare enough to not be worth supporting.
-CompileTimeErrorCode.ASSIGNMENT_TO_METHOD:
+ASSIGNMENT_TO_METHOD:
   status: noFix
   notes: |-
     Theoretically we could replace the method with a function valued variable
     if the value being assigned is a function with the same signature, but that
     case is likely rare enough to not be worth supporting.
-CompileTimeErrorCode.ASSIGNMENT_TO_TYPE:
+ASSIGNMENT_TO_TYPE:
   status: noFix
-CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT:
+ASYNC_FOR_IN_WRONG_CONTEXT:
   status: hasFix
-CompileTimeErrorCode.AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT:
+AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT:
   status: needsEvaluation
-CompileTimeErrorCode.AUGMENTATION_MODIFIER_EXTRA:
+AUGMENTATION_MODIFIER_EXTRA:
   status: hasFix
-CompileTimeErrorCode.AUGMENTATION_MODIFIER_MISSING:
+AUGMENTATION_MODIFIER_MISSING:
   status: needsFix
-CompileTimeErrorCode.AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND:
+AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND:
   status: noFix
-CompileTimeErrorCode.AUGMENTATION_TYPE_PARAMETER_BOUND:
+AUGMENTATION_TYPE_PARAMETER_BOUND:
   status: noFix
-CompileTimeErrorCode.AUGMENTATION_TYPE_PARAMETER_COUNT:
+AUGMENTATION_TYPE_PARAMETER_COUNT:
   status: noFix
-CompileTimeErrorCode.AUGMENTATION_TYPE_PARAMETER_NAME:
+AUGMENTATION_TYPE_PARAMETER_NAME:
   status: needsFix
   notes: |-
     We could rename the type parameter, this is purely local operation.
-CompileTimeErrorCode.AUGMENTATION_WITHOUT_DECLARATION:
+AUGMENTATION_WITHOUT_DECLARATION:
   status: noFix
-CompileTimeErrorCode.AUGMENTED_EXPRESSION_IS_NOT_SETTER:
+AUGMENTED_EXPRESSION_IS_NOT_SETTER:
   status: noFix
-CompileTimeErrorCode.AUGMENTED_EXPRESSION_IS_SETTER:
+AUGMENTED_EXPRESSION_IS_SETTER:
   status: noFix
-CompileTimeErrorCode.AUGMENTED_EXPRESSION_NOT_OPERATOR:
+AUGMENTED_EXPRESSION_NOT_OPERATOR:
   status: noFix
-CompileTimeErrorCode.AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER:
+AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER:
   status: hasFix
-CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT:
+AWAIT_IN_WRONG_CONTEXT:
   status: hasFix
-CompileTimeErrorCode.AWAIT_OF_INCOMPATIBLE_TYPE:
+AWAIT_OF_INCOMPATIBLE_TYPE:
   status: noFix
-CompileTimeErrorCode.BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
+BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
   status: noFix
   notes: |-
     Theoretically we could remove the `base` modifier, but that's unlikely to be
     the right fix most of the time.
-CompileTimeErrorCode.BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
+BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
   status: noFix
   notes: |-
     Theoretically we could remove the `base` modifier, but that's unlikely to be
     the right fix most of the time.
-CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY:
+BODY_MIGHT_COMPLETE_NORMALLY:
   status: hasFix
-CompileTimeErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER:
+BREAK_LABEL_ON_SWITCH_MEMBER:
   status: noFix
   notes: |-
     Theoretically we could replace the `break` with a `continue`, but this
     probably occurs rarely enough to not be worth the cost.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME:
+BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_TYPE_NAME:
+BUILT_IN_IDENTIFIER_AS_EXTENSION_TYPE_NAME:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME:
+BUILT_IN_IDENTIFIER_AS_PREFIX_NAME:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE:
+BUILT_IN_IDENTIFIER_AS_TYPE:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME:
+BUILT_IN_IDENTIFIER_AS_TYPE_NAME:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME:
+BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME:
+BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME:
   status: noFix
   notes: |-
     The correction is to change the name.
-CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
+CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
   status: needsFix
   notes: |-
     The fix could be to change the switch expression to an if statement.
-CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE:
+CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE:
   status: noFix
-CompileTimeErrorCode.CAST_TO_NON_TYPE:
+CAST_TO_NON_TYPE:
   status: hasFix
-CompileTimeErrorCode.CLASS_USED_AS_MIXIN:
+CLASS_USED_AS_MIXIN:
   status: noFix
   notes: |-
     Theoretically we could add the mixin modifier to the class if the class if
     doing so would be valid.
-CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER:
+CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER:
   status: noFix
   since: 2.15
-CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER:
+CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER:
   status: hasFix
-CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER:
+CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER:
   status: noFix
   notes: |-
     Theoretically we could look for static members whose name is similar in
     spelling and suggest them (and remove the type arguments), but it's probably
     not valuable often enough to warrant the cost.
   since: in 2.15
-CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE:
+CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE:
   status: noFix
   since: 2.17
   notes: |-
@@ -326,1605 +326,1620 @@
     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:
+CONCRETE_CLASS_WITH_ABSTRACT_MEMBER:
   status: hasFix
-CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD:
+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:
+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:
+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:
+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:
+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:
+CONFLICTING_GENERIC_INTERFACES:
   status: noFix
-CompileTimeErrorCode.CONFLICTING_INHERITED_METHOD_AND_SETTER:
+CONFLICTING_INHERITED_METHOD_AND_SETTER:
   status: needsEvaluation
-CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD:
+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:
+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:
+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:
+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:
+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_EXTENSION_TYPE:
+CONFLICTING_TYPE_VARIABLE_AND_EXTENSION_TYPE:
   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:
+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:
+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:
+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_EXTENSION_TYPE:
+CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION_TYPE:
   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:
+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:
+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_CONSTANT_FROM_DEFERRED_LIBRARY:
+CONST_CONSTRUCTOR_CONSTANT_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH:
+CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH:
+CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION:
+CONST_CONSTRUCTOR_THROWS_EXCEPTION:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST:
+CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD:
+CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS:
+CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER:
+CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER:
   status: noFix
-CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD:
+CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD:
   status: noFix
-CompileTimeErrorCode.CONST_DEFERRED_CLASS:
+CONST_DEFERRED_CLASS:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.CONST_EVAL_ASSERTION_FAILURE:
+CONST_EVAL_ASSERTION_FAILURE:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE:
+CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_EXTENSION_METHOD:
+CONST_EVAL_EXTENSION_METHOD:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_EXTENSION_TYPE_METHOD:
+CONST_EVAL_EXTENSION_TYPE_METHOD:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_FOR_ELEMENT:
+CONST_EVAL_FOR_ELEMENT:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_METHOD_INVOCATION:
+CONST_EVAL_METHOD_INVOCATION:
   status: hasFix
-CompileTimeErrorCode.CONST_EVAL_PRIMITIVE_EQUALITY:
+CONST_EVAL_PRIMITIVE_EQUALITY:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_PROPERTY_ACCESS:
+CONST_EVAL_PROPERTY_ACCESS:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION:
+CONST_EVAL_THROWS_EXCEPTION:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE:
+CONST_EVAL_THROWS_IDBZE:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL:
+CONST_EVAL_TYPE_BOOL:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_INT:
+CONST_EVAL_TYPE_BOOL_INT:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING:
+CONST_EVAL_TYPE_BOOL_NUM_STRING:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_INT:
+CONST_EVAL_TYPE_INT:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_NUM:
+CONST_EVAL_TYPE_NUM:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_NUM_STRING:
+CONST_EVAL_TYPE_NUM_STRING:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_STRING:
+CONST_EVAL_TYPE_STRING:
   status: noFix
-CompileTimeErrorCode.CONST_EVAL_TYPE_TYPE:
+CONST_EVAL_TYPE_TYPE:
   status: noFix
-CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE:
+CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE:
+CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE:
   status: hasFix
-? CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY
-: status: needsFix
+CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+  status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.CONST_INSTANCE_FIELD:
+CONST_INSTANCE_FIELD:
   status: hasFix
-CompileTimeErrorCode.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY:
+CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY:
   status: noFix
-CompileTimeErrorCode.CONST_NOT_INITIALIZED:
+CONST_NOT_INITIALIZED:
   status: noFix
-CompileTimeErrorCode.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY:
+CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY:
   status: noFix
-CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET:
+CONST_SPREAD_EXPECTED_LIST_OR_SET:
   status: noFix
-CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP:
+CONST_SPREAD_EXPECTED_MAP:
   status: noFix
-CompileTimeErrorCode.CONST_TYPE_PARAMETER:
+CONST_TYPE_PARAMETER:
   status: needsEvaluation
-CompileTimeErrorCode.CONST_WITH_NON_CONST:
+CONST_WITH_NON_CONST:
   status: hasFix
-CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT:
+CONST_WITH_NON_CONSTANT_ARGUMENT:
   status: noFix
-CompileTimeErrorCode.CONST_WITH_NON_TYPE:
+CONST_WITH_NON_TYPE:
   status: hasFix
-CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS:
+CONST_WITH_TYPE_PARAMETERS:
   status: noFix
-CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF:
+CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF:
   status: noFix
   since: 2.15
-CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF:
+CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF:
   status: noFix
   since: 2.15
-CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR:
+CONST_WITH_UNDEFINED_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
   status: noFix
-CompileTimeErrorCode.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION:
+CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION:
   status: hasFix
   notes: |-
     Has fix for expression that can be made constant. More cases to be
     implemented as per the tests.
-CompileTimeErrorCode.CONTINUE_LABEL_INVALID:
+CONTINUE_LABEL_INVALID:
   status: noFix
-CompileTimeErrorCode.COULD_NOT_INFER:
+COULD_NOT_INFER:
   status: noFix
-CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR:
+DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove the default value.
-CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
+DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
   status: hasFix
-CompileTimeErrorCode.DEFERRED_IMPORT_OF_EXTENSION:
+DEFERRED_IMPORT_OF_EXTENSION:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE:
+DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE:
   status: noFix
-CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION:
+DISALLOWED_TYPE_INSTANTIATION_EXPRESSION:
   status: needsFix
   since: 2.15
-CompileTimeErrorCode.DOT_SHORTHAND_MISSING_CONTEXT:
+DOT_SHORTHAND_MISSING_CONTEXT:
   status: needsEvaluation
-CompileTimeErrorCode.DOT_SHORTHAND_UNDEFINED_GETTER:
+DOT_SHORTHAND_UNDEFINED_GETTER:
   status: hasFix
-CompileTimeErrorCode.DOT_SHORTHAND_UNDEFINED_INVOCATION:
+DOT_SHORTHAND_UNDEFINED_INVOCATION:
   status: hasFix
-CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT:
+DUPLICATE_CONSTRUCTOR_DEFAULT:
   status: noFix
   notes: |-
     Theoretically we could remove all but one of the constructors, but we have
     no way of knowing which should not be removed.
-CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME:
+DUPLICATE_CONSTRUCTOR_NAME:
   status: noFix
   notes: |-
     Theoretically we could remove all but one of the constructors, but we have
     no way of knowing which should not be removed.
-CompileTimeErrorCode.DUPLICATE_DEFINITION:
+DUPLICATE_DEFINITION:
   status: noFix
   notes: |-
     Theoretically we could remove all but one of the constructors, but we have
     no way of knowing which should not be removed.
-CompileTimeErrorCode.DUPLICATE_FIELD_NAME:
+DUPLICATE_FIELD_NAME:
   status: noFix
   notes: |-
     Theoretically we could remove all but one of the constructors, but we have
     no way of knowing which should not be removed.
-CompileTimeErrorCode.DUPLICATE_FIELD_FORMAL_PARAMETER:
+DUPLICATE_FIELD_FORMAL_PARAMETER:
   status: noFix
   notes: |-
     Theoretically we could remove all but one of the constructors, but we have
     no way of knowing which should not be removed.
-CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT:
+DUPLICATE_NAMED_ARGUMENT:
   status: needsFix
   notes: |-
     Look for other named parameters with similar name and suggest renaming the
     argument. If there are none that are similar enough, then we could just
     suggest all of the names that aren't already being used.
-CompileTimeErrorCode.DUPLICATE_PART:
+DUPLICATE_PART:
   status: needsFix
   notes: |-
     Remove the duplicated import.
-CompileTimeErrorCode.DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE:
+DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE:
   status: needsFix
   notes: |-
     We can suggest names from the context, as in did you mean this?
-CompileTimeErrorCode.DUPLICATE_PATTERN_FIELD:
+DUPLICATE_PATTERN_FIELD:
   status: needsFix
   notes: |-
     Look for other named parameters with similar name and suggest renaming the
     argument. If there are none that are similar enough, then we could just
     suggest all of the names that aren't already being used.
-CompileTimeErrorCode.DUPLICATE_REST_ELEMENT_IN_PATTERN:
+DUPLICATE_REST_ELEMENT_IN_PATTERN:
   status: noFix
   notes: |-
     We do not know which one of the rest elements is to be removed.
-CompileTimeErrorCode.DUPLICATE_VARIABLE_PATTERN:
+DUPLICATE_VARIABLE_PATTERN:
   status: noFix
   notes: |-
     We cannot figure out the intent of the user to suggest the right fix.
-CompileTimeErrorCode.EMPTY_MAP_PATTERN:
+EMPTY_MAP_PATTERN:
   status: hasFix
-CompileTimeErrorCode.ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR:
+ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR:
   status: noFix
   since: 3.3
-CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
+ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
   status: noFix
   notes: |-
     The fix is to rename one of the two, but we can't know what name to use.
-CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
+ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
   status: noFix
   since: 2.17
-CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE:
+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:
+ENUM_WITH_ABSTRACT_MEMBER:
   status: hasFix
   since: 2.17
-CompileTimeErrorCode.ENUM_WITH_NAME_VALUES:
+ENUM_WITH_NAME_VALUES:
   status: noFix
   since: 2.17
   notes: |-
     Requires a rename.
-CompileTimeErrorCode.ENUM_WITHOUT_CONSTANTS:
+ENUM_WITHOUT_CONSTANTS:
   status: noFix
-CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET:
+EQUAL_ELEMENTS_IN_CONST_SET:
   status: needsFix
   notes: |-
     Remove the duplicates.
-CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP:
+EQUAL_KEYS_IN_CONST_MAP:
   status: needsFix
   notes: |-
     Remove the duplicates.
-CompileTimeErrorCode.EQUAL_KEYS_IN_MAP_PATTERN:
+EQUAL_KEYS_IN_MAP_PATTERN:
   status: needsFix
   notes: |-
     Remove the duplicates.
-CompileTimeErrorCode.EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS:
+EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS:
   status: noFix
-CompileTimeErrorCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS:
+EXPECTED_ONE_LIST_TYPE_ARGUMENTS:
   status: noFix
-CompileTimeErrorCode.EXPECTED_ONE_SET_TYPE_ARGUMENTS:
+EXPECTED_ONE_SET_TYPE_ARGUMENTS:
   status: noFix
-CompileTimeErrorCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS:
+EXPECTED_TWO_MAP_TYPE_ARGUMENTS:
   status: noFix
-CompileTimeErrorCode.EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS:
+EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS:
   status: noFix
   notes: |-
     We do not know the user's intent here and so cannot figure out what to
     add or delete.
-CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY:
+EXPORT_INTERNAL_LIBRARY:
   status: needsFix
   notes: |-
     Remove the export.
-CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY:
+EXPORT_OF_NON_LIBRARY:
   status: needsFix
   notes: |-
     Find the library containing the part being export, update the export to the
     library, and add a show combinator (if there isn't one already) that limits
     the export to the names defined in the part.
-CompileTimeErrorCode.EXPRESSION_IN_MAP:
+EXPRESSION_IN_MAP:
   status: needsFix
   notes: |-
     Based on the type, add the separator either before or after the expression.
-CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS:
+EXTENDS_DEFERRED_CLASS:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS:
+EXTENDS_DISALLOWED_CLASS:
   status: hasFix
-CompileTimeErrorCode.EXTENDS_NON_CLASS:
+EXTENDS_NON_CLASS:
   status: hasFix
-CompileTimeErrorCode.EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
   status: hasFix
-CompileTimeErrorCode.EXTENSION_AS_EXPRESSION:
+EXTENSION_AS_EXPRESSION:
   status: noFix
-CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE:
+EXTENSION_CONFLICTING_STATIC_AND_INSTANCE:
   status: noFix
-CompileTimeErrorCode.EXTENSION_DECLARES_MEMBER_OF_OBJECT:
+EXTENSION_DECLARES_MEMBER_OF_OBJECT:
   status: hasFix
-CompileTimeErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD:
+EXTENSION_DECLARES_INSTANCE_FIELD:
   status: hasFix
   notes: |-
     Remove the field, or add `static`.
-CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER:
+EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER:
   status: hasFix
-CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE:
+EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.EXTENSION_OVERRIDE_WITH_CASCADE:
+EXTENSION_OVERRIDE_WITH_CASCADE:
   status: hasFix
-CompileTimeErrorCode.EXTENSION_OVERRIDE_WITHOUT_ACCESS:
+EXTENSION_OVERRIDE_WITHOUT_ACCESS:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER:
+EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER:
   status: needsFix
   notes: |-
     Remove it.
-CompileTimeErrorCode.EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION:
+EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION:
   status: needsFix
-CompileTimeErrorCode.EXTENSION_TYPE_DECLARES_INSTANCE_FIELD:
+EXTENSION_TYPE_DECLARES_INSTANCE_FIELD:
   status: hasFix
   notes: |-
     Remove the field, or add `static`.
-CompileTimeErrorCode.EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT:
+EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT:
   status: hasFix
-CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE:
+EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_ITSELF:
+EXTENSION_TYPE_IMPLEMENTS_ITSELF:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE:
+EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE:
+EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT:
+EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF:
+EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM:
+EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM:
   status: noFix
-CompileTimeErrorCode.EXTENSION_TYPE_WITH_ABSTRACT_MEMBER:
+EXTENSION_TYPE_WITH_ABSTRACT_MEMBER:
   status: hasFix
-CompileTimeErrorCode.EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER:
+EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER:
   status: needsFix
   notes: |-
     Remove the `external` keyword. Remove the initializer.
-CompileTimeErrorCode.EXTERNAL_FIELD_INITIALIZER:
+EXTERNAL_FIELD_INITIALIZER:
   status: needsFix
   notes: |-
     Remove the `external` keyword. Remove the initializer.
-CompileTimeErrorCode.EXTERNAL_VARIABLE_INITIALIZER:
+EXTERNAL_VARIABLE_INITIALIZER:
   status: needsFix
   notes: |-
     Remove the `external` keyword. Remove the initializer.
-CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS:
+EXTRA_POSITIONAL_ARGUMENTS:
   status: hasFix
-CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED:
+EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED:
   status: hasFix
-CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS:
+FACTORY_CONSTRUCTOR_NEW_NAME:
+  status: needsEvaluation
+FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS:
   status: needsFix
   notes: |-
     Remove all but one of the initializers.
     Replace the field name with the name of a different field (from the
     enclosing class).
-CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION:
+FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION:
   status: needsFix
   notes: |-
     Remove all but one of the initializers.
-CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER:
+FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER:
   status: needsFix
   notes: |-
     Remove all but one of the initializers.
-CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR:
+FIELD_INITIALIZER_FACTORY_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Replace the initializing formal parameter with a normal parameter.
-CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE:
+FIELD_INITIALIZER_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
+FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Replace the initializing formal parameter with a normal parameter and
     add an assignment to the field in the method.
-CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
+FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Replace the initializing formal parameter with a normal parameter.
-CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE:
+FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
+FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
   status: hasFix
-CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
+FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
   status: hasFix
-CompileTimeErrorCode.FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY:
+FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY:
   status: noFix
-CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR:
+FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove all but one of the initializers.
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED:
+FINAL_NOT_INITIALIZED:
   status: hasFix
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1:
+FINAL_NOT_INITIALIZED_CONSTRUCTOR_1:
   status: hasFix
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2:
+FINAL_NOT_INITIALIZED_CONSTRUCTOR_2:
   status: hasFix
-CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS:
+FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS:
   status: hasFix
-CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE:
+FOR_IN_OF_INVALID_ELEMENT_TYPE:
   status: noFix
-CompileTimeErrorCode.FOR_IN_OF_INVALID_TYPE:
+FOR_IN_OF_INVALID_TYPE:
   status: hasFix
-CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE:
+FOR_IN_WITH_CONST_VARIABLE:
   status: noFix
-CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND:
+GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND:
   status: noFix
-CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT:
+GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT:
   status: noFix
-CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC:
+GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC:
   status: needsFix
   since: 2.15
-CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES:
+GETTER_NOT_ASSIGNABLE_SETTER_TYPES:
   status: noFix
-CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES:
+GETTER_NOT_SUBTYPE_SETTER_TYPES:
   status: noFix
-CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY:
+IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE:
+ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE:
   status: hasFix
-CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE:
+ILLEGAL_ASYNC_RETURN_TYPE:
   status: hasFix
-CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION:
+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:
+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:
+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:
+ILLEGAL_ENUM_VALUES_INHERITANCE:
   status: noFix
   since: 2.17
-CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE:
+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:
+ILLEGAL_SYNC_GENERATOR_RETURN_TYPE:
   status: hasFix
-CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS:
+IMPLEMENTS_DEFERRED_CLASS:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS:
+IMPLEMENTS_DISALLOWED_CLASS:
   status: hasFix
-CompileTimeErrorCode.IMPLEMENTS_NON_CLASS:
+IMPLEMENTS_NON_CLASS:
   status: hasFix
-CompileTimeErrorCode.IMPLEMENTS_REPEATED:
+IMPLEMENTS_REPEATED:
   status: hasFix
-CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS:
+IMPLEMENTS_SUPER_CLASS:
   status: hasFix
-CompileTimeErrorCode.IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
   status: hasFix
-CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER:
+IMPLICIT_THIS_REFERENCE_IN_INITIALIZER:
   status: hasFix
-CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS:
+IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS:
   status: hasFix
-CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY:
+IMPORT_INTERNAL_LIBRARY:
   status: hasFix
-CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY:
+IMPORT_OF_NON_LIBRARY:
   status: hasFix
-CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES:
+INCONSISTENT_CASE_EXPRESSION_TYPES:
   status: noFix
-CompileTimeErrorCode.INCONSISTENT_INHERITANCE:
+INCONSISTENT_INHERITANCE:
   status: needsFix
   notes: |-
     Add a stub of the method that needs to be implemented.
-CompileTimeErrorCode.INCONSISTENT_INHERITANCE_GETTER_AND_METHOD:
+INCONSISTENT_INHERITANCE_GETTER_AND_METHOD:
   status: noFix
-CompileTimeErrorCode.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
+INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
   status: needsFix
   notes: |-
     Replace (or add) the language override in the parts to match the library.
-CompileTimeErrorCode.INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR:
+INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR:
   status: noFix
   notes: |-
     We cannot figure out the user's intent here, and so cannot generate a
     fix that would be right.
-CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD:
+INITIALIZER_FOR_NON_EXISTENT_FIELD:
   status: needsFix
   notes: |-
     Suggest a different field whose name is similar.
-CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD:
+INITIALIZER_FOR_STATIC_FIELD:
   status: needsFix
   notes: |-
     Suggest a different field whose name is similar.
-CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD:
+INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD:
   status: hasFix
-CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER:
+INSTANCE_ACCESS_TO_STATIC_MEMBER:
   status: hasFix
-CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION:
+INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION:
   status: noFix
   notes: |-
     Theoretically, we could give the extension a name and then use the name to
     access the static member.
-CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
+INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
   status: noFix
-CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC:
+INSTANCE_MEMBER_ACCESS_FROM_STATIC:
   status: noFix
-CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS:
+INSTANTIATE_ABSTRACT_CLASS:
   status: noFix
   notes: |-
     Theoretically we could remove the `abstract` modifier.
-CompileTimeErrorCode.INSTANTIATE_ENUM:
+INSTANTIATE_ENUM:
   status: noFix
-CompileTimeErrorCode.INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
   status: noFix
-CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE:
+INTEGER_LITERAL_IMPRECISE_AS_DOUBLE:
   status: hasFix
-CompileTimeErrorCode.INTEGER_LITERAL_OUT_OF_RANGE:
+INTEGER_LITERAL_OUT_OF_RANGE:
   status: needsFix
   notes: |-
     Replace the literal with a constructor for `BigInt`.
-CompileTimeErrorCode.INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
+INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
   status: noFix
   notes: |-
     Theoretically we could remove the `interface` modifier from the superclass.
-CompileTimeErrorCode.INVALID_ANNOTATION:
+INVALID_ANNOTATION:
   status: hasFix
-CompileTimeErrorCode.INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY:
+INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.INVALID_ASSIGNMENT:
+INVALID_ASSIGNMENT:
   status: hasFix
-CompileTimeErrorCode.INVALID_CAST_FUNCTION:
+INVALID_CAST_FUNCTION:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_FUNCTION_EXPR:
+INVALID_CAST_FUNCTION_EXPR:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_LITERAL:
+INVALID_CAST_LITERAL:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST:
+INVALID_CAST_LITERAL_LIST:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP:
+INVALID_CAST_LITERAL_MAP:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_LITERAL_SET:
+INVALID_CAST_LITERAL_SET:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_METHOD:
+INVALID_CAST_METHOD:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CAST_NEW_EXPR:
+INVALID_CAST_NEW_EXPR:
   status: noFix
   notes: |-
     Removed in Dart 3.0
-CompileTimeErrorCode.INVALID_CONSTANT:
+INVALID_CONSTANT:
   status: hasFix
   notes: |-
     The diagnostic is too general. It needs to be replaced with multiple more
     specific diagnostics.
-CompileTimeErrorCode.INVALID_EXTENSION_ARGUMENT_COUNT:
+INVALID_EXTENSION_ARGUMENT_COUNT:
   status: needsFix
   notes: |-
     Remove all but one of the arguments. Not clear how much value that adds.
-CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS:
+INVALID_FACTORY_NAME_NOT_A_CLASS:
   status: needsFix
   notes: |-
     Replace the name of the factory with the name of the class (or prefix it
     with the name of the class if it's lowercase?).
-CompileTimeErrorCode.INVALID_FIELD_NAME_FROM_OBJECT:
+INVALID_FIELD_NAME_FROM_OBJECT:
   status: noFix
-CompileTimeErrorCode.INVALID_FIELD_NAME_PRIVATE:
+INVALID_FIELD_NAME_PRIVATE:
   status: needsFix
   notes: |-
     Make the name public.
-CompileTimeErrorCode.INVALID_FIELD_NAME_POSITIONAL:
+INVALID_FIELD_NAME_POSITIONAL:
   status: noFix
-CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE:
+INVALID_IMPLEMENTATION_OVERRIDE:
   status: needsFix
   notes: |-
     Replace the signature with the valid signature.
-CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE_SETTER:
+INVALID_IMPLEMENTATION_OVERRIDE_SETTER:
   status: needsFix
   notes: |-
     Replace the signature with the valid signature.
-CompileTimeErrorCode.INVALID_INLINE_FUNCTION_TYPE:
+INVALID_INLINE_FUNCTION_TYPE:
   status: needsFix
   notes: |-
     Replace with the equivalent generic function type.
-CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR:
+INVALID_MODIFIER_ON_CONSTRUCTOR:
   status: hasFix
-CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER:
+INVALID_MODIFIER_ON_SETTER:
   status: hasFix
-CompileTimeErrorCode.INVALID_OVERRIDE:
+INVALID_OVERRIDE:
   status: hasFix
-CompileTimeErrorCode.INVALID_OVERRIDE_SETTER:
+INVALID_OVERRIDE_SETTER:
   status: hasFix
-CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR:
+INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR:
   status: noFix
   since: 2.17
-CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR_TEAROFF:
+INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR_TEAROFF:
   status: noFix
   since: 2.17
-CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS:
+INVALID_REFERENCE_TO_THIS:
   status: noFix
-CompileTimeErrorCode.INVALID_SUPER_FORMAL_PARAMETER_LOCATION:
+INVALID_SUPER_FORMAL_PARAMETER_LOCATION:
   status: needsFix
   since: 2.17
-CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
+INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
   status: noFix
-CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP:
+INVALID_TYPE_ARGUMENT_IN_CONST_MAP:
   status: noFix
-CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_SET:
+INVALID_TYPE_ARGUMENT_IN_CONST_SET:
   status: noFix
-CompileTimeErrorCode.INVALID_URI:
+INVALID_URI:
   status: noFix
-CompileTimeErrorCode.INVALID_USE_OF_COVARIANT:
+INVALID_USE_OF_COVARIANT:
   status: hasFix
-CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE:
+INVALID_USE_OF_NULL_VALUE:
   status: noFix
-CompileTimeErrorCode.INVOCATION_OF_EXTENSION_WITHOUT_CALL:
+INVOCATION_OF_EXTENSION_WITHOUT_CALL:
   status: needsFix
   notes: |-
     Add a call method to the extension.
-CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION:
+INVOCATION_OF_NON_FUNCTION:
   status: needsFix
   notes: |-
     Suggest similarly named functions.
-CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION:
+INVOCATION_OF_NON_FUNCTION_EXPRESSION:
   status: hasFix
-CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE:
+LABEL_IN_OUTER_SCOPE:
   status: noFix
-CompileTimeErrorCode.LABEL_UNDEFINED:
+LABEL_UNDEFINED:
   status: needsFix
   notes: |-
     Suggest similarly named label.
-CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR:
+LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove `late`.
     Remove `const`.
-CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED:
+LATE_FINAL_LOCAL_ALREADY_ASSIGNED:
   status: hasFix
-CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+LIST_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
   status: hasFix
-CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE:
+LIST_ELEMENT_TYPE_NOT_ASSIGNABLE:
   status: needsEvaluation
-CompileTimeErrorCode.MAIN_FIRST_POSITIONAL_PARAMETER_TYPE:
+MAIN_FIRST_POSITIONAL_PARAMETER_TYPE:
   status: needsFix
   notes: |-
     Replace the type of the first parameter.
-CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS:
+MAIN_HAS_REQUIRED_NAMED_PARAMETERS:
   status: needsFix
   notes: |-
     Remove the named parameters.
-CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS:
+MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS:
   status: needsFix
   notes: |-
     Remove the invalid parameters.
-CompileTimeErrorCode.MAIN_IS_NOT_FUNCTION:
+MAIN_IS_NOT_FUNCTION:
   status: noFix
-CompileTimeErrorCode.MAP_ENTRY_NOT_IN_MAP:
+MAP_ENTRY_NOT_IN_MAP:
   status: noFix
-CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY:
   status: hasFix
-CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE:
+MAP_KEY_TYPE_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+MAP_VALUE_TYPE_NOT_ASSIGNABLE_NULLABILITY:
   status: hasFix
-CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE:
+MAP_VALUE_TYPE_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL:
+MISSING_CONST_IN_LIST_LITERAL:
   status: noFix
   notes: |-
     Not displayed to users.
-CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL:
+MISSING_CONST_IN_MAP_LITERAL:
   status: noFix
   notes: |-
     Not displayed to users.
-CompileTimeErrorCode.MISSING_CONST_IN_SET_LITERAL:
+MISSING_CONST_IN_SET_LITERAL:
   status: noFix
   notes: |-
     Not displayed to users.
-CompileTimeErrorCode.MISSING_DART_LIBRARY:
+MISSING_DART_LIBRARY:
   status: noFix
-CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER:
+MISSING_DEFAULT_VALUE_FOR_PARAMETER:
   status: hasFix
-CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL:
+MISSING_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL:
   status: hasFix
-CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION:
+MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION:
   status: hasFix
-CompileTimeErrorCode.MISSING_NAMED_PATTERN_FIELD_NAME:
+MISSING_NAMED_PATTERN_FIELD_NAME:
   status: noFix
-CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT:
+MISSING_REQUIRED_ARGUMENT:
   status: hasFix
-CompileTimeErrorCode.MISSING_VARIABLE_PATTERN:
+MISSING_VARIABLE_PATTERN:
   status: noFix
-CompileTimeErrorCode.MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE:
+MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE:
   status: needsFix
   notes: |-
     Update the type in the mixin.
-CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER:
+MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER:
   status: noFix
-CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_SETTER:
+MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_SETTER:
   status: noFix
-CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE:
+MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE:
   status: hasFix
-CompileTimeErrorCode.MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT:
+MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT:
   status: hasFix
-CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR:
+MIXIN_CLASS_DECLARES_CONSTRUCTOR:
+  status: needsFix
   notes: |-
     Remove the constructor.
-CompileTimeErrorCode.MIXIN_DEFERRED_CLASS:
+MIXIN_DEFERRED_CLASS:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT:
+MIXIN_INHERITS_FROM_NOT_OBJECT:
+  status: needsFix
   notes: |-
     Remove the extends clause.
-CompileTimeErrorCode.MIXIN_INSTANTIATE:
+MIXIN_INSTANTIATE:
   status: noFix
-CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS:
+MIXIN_OF_DISALLOWED_CLASS:
   status: hasFix
-CompileTimeErrorCode.MIXIN_OF_NON_CLASS:
+MIXIN_OF_NON_CLASS:
   status: hasFix
-CompileTimeErrorCode.MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
   status: noFix
-CompileTimeErrorCode.MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
   status: noFix
-CompileTimeErrorCode.MIXIN_SUBTYPE_OF_BASE_IS_NOT_BASE:
+MIXIN_SUBTYPE_OF_BASE_IS_NOT_BASE:
   status: hasFix
-CompileTimeErrorCode.MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE:
+MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE:
   status: hasFix
-CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
+MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS:
+MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS:
   status: hasFix
-CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
+MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
   status: hasFix
-CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS:
+MIXIN_WITH_NON_CLASS_SUPERCLASS:
   status: hasFix
-CompileTimeErrorCode.MIXINS_SUPER_CLASS:
+MIXINS_SUPER_CLASS:
   status: needsFix
   notes: |-
     Remove one of the uses of the class.
-CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS:
+MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS:
   status: needsFix
   notes: |-
     Remove all but one of the redirecting constructor invocations.
-CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS:
+MULTIPLE_SUPER_INITIALIZERS:
   status: needsFix
   notes: |-
     Remove all but one of the redirecting constructor invocations.
-CompileTimeErrorCode.NEW_WITH_NON_TYPE:
+NEW_CONSTRUCTOR_NEW_NAME:
+  status: needsEvaluation
+NEW_CONSTRUCTOR_QUALIFIED_NAME:
+  status: needsEvaluation
+NEW_WITH_NON_TYPE:
   status: hasFix
-CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR:
+NEW_WITH_UNDEFINED_CONSTRUCTOR:
   status: hasFix
-CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
   status: hasFix
-CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS:
+NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS:
   status: hasFix
-CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE:
+NO_COMBINED_SUPER_SIGNATURE:
   status: noFix
-CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT:
+NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT:
   status: hasFix
-CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT:
+NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT:
   status: hasFix
-CompileTimeErrorCode.NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS:
+NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS:
   status: noFix
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
+NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
   status: hasFix
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR:
+NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR:
   status: hasFix
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE:
+NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE:
   status: hasFix
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE:
+NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE:
   status: hasFix
-CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO:
+NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO:
   status: hasFix
-CompileTimeErrorCode.NON_BOOL_CONDITION:
+NON_BOOL_CONDITION:
   status: hasFix
-CompileTimeErrorCode.NON_BOOL_EXPRESSION:
+NON_BOOL_EXPRESSION:
   status: noFix
-CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION:
+NON_BOOL_NEGATION_EXPRESSION:
   status: noFix
-CompileTimeErrorCode.NON_BOOL_OPERAND:
+NON_BOOL_OPERAND:
   status: noFix
-CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
+NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
   status: hasFix
   since: 2.17
-CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT:
+NON_CONST_MAP_AS_EXPRESSION_STATEMENT:
   status: needsFix
   notes: |-
     Add `const` keyword.
-CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR:
+NON_CONSTANT_ANNOTATION_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Add `const` to the constructor (if doing so would be valid).
-CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION:
+NON_CONSTANT_CASE_EXPRESSION:
   status: noFix
   notes: |-
     I think this is a pre-3.0 only issue, so might not be worth supporting. If
     it is worth supporting, then we could potentially add `const` to make it a
     constant expression.
-CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY:
+NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE:
+NON_CONSTANT_DEFAULT_VALUE:
   status: needsFix
   notes: |-
     Add `const` if the expression can be a constant expression.
-CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY:
+NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT:
+NON_CONSTANT_LIST_ELEMENT:
   status: hasFix
-CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY:
+NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY:
   status: hasFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT:
+NON_CONSTANT_MAP_ELEMENT:
   status: hasFix
-CompileTimeErrorCode.NON_CONSTANT_MAP_KEY:
+NON_CONSTANT_MAP_KEY:
   status: hasFix
-CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
+NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
   status: hasFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.NON_CONSTANT_MAP_PATTERN_KEY:
+NON_CONSTANT_MAP_PATTERN_KEY:
   status: hasFix
-CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE:
+NON_CONSTANT_MAP_VALUE:
   status: hasFix
-CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY:
+NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY:
   status: hasFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.NON_CONSTANT_RECORD_FIELD:
+NON_CONSTANT_RECORD_FIELD:
   status: noFix
-CompileTimeErrorCode.NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY:
+NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION:
+NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION:
   status: hasFix
   notes: |-
     Make the pattern expression a constant.
-CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT:
+NON_CONSTANT_SET_ELEMENT:
   status: hasFix
-? CompileTimeErrorCode.NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE
-: status: noFix
-CompileTimeErrorCode.NON_EXHAUSTIVE_SWITCH_EXPRESSION:
+NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE:
+  status: noFix
+NON_EXHAUSTIVE_SWITCH_EXPRESSION:
   status: hasFix
-CompileTimeErrorCode.NON_EXHAUSTIVE_SWITCH_STATEMENT:
+NON_EXHAUSTIVE_SWITCH_EXPRESSION_PRIVATE:
   status: hasFix
-CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM:
+NON_EXHAUSTIVE_SWITCH_STATEMENT:
+  status: hasFix
+NON_EXHAUSTIVE_SWITCH_STATEMENT_PRIVATE:
+  status: hasFix
+NON_FINAL_FIELD_IN_ENUM:
   status: hasFix
   since: 2.17
-CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR:
+NON_GENERATIVE_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Suggest generative constructors that could be invoked.
-CompileTimeErrorCode.NON_GENERATIVE_IMPLICIT_CONSTRUCTOR:
+NON_GENERATIVE_IMPLICIT_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Suggest generative constructors that could be invoked.
-CompileTimeErrorCode.NON_SYNC_FACTORY:
+NON_REDIRECTING_GENERATIVE_CONSTRUCTOR_WITH_PRIMARY:
+  status: needsEvaluation
+NON_SYNC_FACTORY:
   status: needsFix
   notes: |-
     Remove the modifier on the body.
-CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT:
+NON_TYPE_AS_TYPE_ARGUMENT:
   status: hasFix
-CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE:
+NON_TYPE_IN_CATCH_CLAUSE:
   status: hasFix
-CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR:
+NON_VOID_RETURN_FOR_OPERATOR:
   status: needsFix
   notes: |-
     Change the return type to `void`.
-CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER:
+NON_VOID_RETURN_FOR_SETTER:
   status: needsFix
   notes: |-
     Remove the return type.
     Change the return type to `void`.
-CompileTimeErrorCode.NOT_A_TYPE:
+NOT_A_TYPE:
   status: hasFix
-CompileTimeErrorCode.NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE:
+NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE:
   status: noFix
-CompileTimeErrorCode.NOT_BINARY_OPERATOR:
+NOT_BINARY_OPERATOR:
   status: noFix
-CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL:
+NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL:
   status: hasFix
-CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR:
+NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR:
   status: hasFix
-CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL:
+NOT_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL:
   status: hasFix
-CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_SINGULAR:
+NOT_ENOUGH_POSITIONAL_ARGUMENTS_SINGULAR:
   status: hasFix
-CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD:
+NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD:
   status: hasFix
-CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR:
+NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE:
+NOT_INITIALIZED_NON_NULLABLE_VARIABLE:
   status: noFix
-CompileTimeErrorCode.NOT_INSTANTIATED_BOUND:
+NOT_INSTANTIATED_BOUND:
   status: noFix
-CompileTimeErrorCode.NOT_ITERABLE_SPREAD:
+NOT_ITERABLE_SPREAD:
   status: noFix
-CompileTimeErrorCode.NOT_MAP_SPREAD:
+NOT_MAP_SPREAD:
   status: noFix
-CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD:
+NOT_NULL_AWARE_NULL_SPREAD:
   status: needsFix
   notes: |-
     Convert to a null-aware spread operator.
-CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
+NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
   status: hasFix
-CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE:
+NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE:
   status: hasFix
-CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE:
+NULLABLE_TYPE_IN_ON_CLAUSE:
   status: hasFix
-CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE:
+NULLABLE_TYPE_IN_WITH_CLAUSE:
   status: hasFix
-CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS:
+OBJECT_CANNOT_EXTEND_ANOTHER_CLASS:
   status: noFix
-CompileTimeErrorCode.OBSOLETE_COLON_FOR_DEFAULT_VALUE:
+OBSOLETE_COLON_FOR_DEFAULT_VALUE:
   status: hasFix
-CompileTimeErrorCode.ON_REPEATED:
+ON_REPEATED:
   status: needsFix
   notes: |-
     Remove the repeated type.
-CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR:
+OPTIONAL_PARAMETER_IN_OPERATOR:
   status: noFix
-CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY:
+PART_OF_DIFFERENT_LIBRARY:
   status: noFix
-CompileTimeErrorCode.PART_OF_NON_PART:
+PART_OF_NON_PART:
   status: noFix
-CompileTimeErrorCode.PART_OF_UNNAMED_LIBRARY:
+PART_OF_UNNAMED_LIBRARY:
   status: needsFix
   notes: |-
     Replace the library name with a URI.
-CompileTimeErrorCode.PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE:
+PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE:
   status: noFix
-CompileTimeErrorCode.PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY:
+PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT:
+PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT:
   status: noFix
-CompileTimeErrorCode.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD:
+PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD:
   status: noFix
   notes: |-
     We do not have enough information to figure out the user's intent with the
     use of the variable in the pattern.
-? CompileTimeErrorCode.PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE
-: status: needsFix
+PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE:
+  status: needsFix
   notes: |-
     Make all of the types / finalities the same.
-CompileTimeErrorCode.PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL:
+PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL:
   status: needsFix
   notes: |-
     If the problem is a default, split the case group into two pieces.
-CompileTimeErrorCode.PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES:
+PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES:
   status: noFix
-CompileTimeErrorCode.POSITIONAL_FIELD_IN_OBJECT_PATTERN:
+POSITIONAL_FIELD_IN_OBJECT_PATTERN:
   status: noFix
-CompileTimeErrorCode.POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT:
-  status: needsFix
-  since: 2.17
-CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
-  status: noFix
-CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT:
-  status: noFix
-CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION:
-  status: noFix
-CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
-  status: noFix
-CompileTimeErrorCode.PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME:
-  status: noFix
-CompileTimeErrorCode.PRIVATE_SETTER:
-  status: noFix
-CompileTimeErrorCode.READ_POTENTIALLY_UNASSIGNED_FINAL:
-  status: noFix
-CompileTimeErrorCode.RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA_BY_TYPE:
+POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT:
   status: hasFix
-CompileTimeErrorCode.RECURSIVE_CONSTANT_CONSTRUCTOR:
+  since: 2.17
+PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT:
+PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT:
+PREFIX_SHADOWED_BY_LOCAL_DECLARATION:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT:
+PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE:
+PRIVATE_NAMED_PARAMETER_DUPLICATE_PUBLIC_NAME:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS:
+PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS:
+PRIVATE_SETTER:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON:
+READ_POTENTIALLY_UNASSIGNED_FINAL:
   status: noFix
-CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH:
+RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA_BY_TYPE:
+  status: hasFix
+RECURSIVE_CONSTANT_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR:
+RECURSIVE_COMPILE_TIME_CONSTANT:
   status: noFix
-CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR:
+RECURSIVE_CONSTRUCTOR_REDIRECT:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR:
+RECURSIVE_FACTORY_REDIRECT:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE:
+RECURSIVE_INTERFACE_INHERITANCE:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE:
+RECURSIVE_INTERFACE_INHERITANCE_EXTENDS:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR:
+RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_NON_CLASS:
+RECURSIVE_INTERFACE_INHERITANCE_ON:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR:
+RECURSIVE_INTERFACE_INHERITANCE_WITH:
   status: noFix
-CompileTimeErrorCode.REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION:
+REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT:
+REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE:
+REDIRECT_TO_INVALID_FUNCTION_TYPE:
   status: noFix
-? CompileTimeErrorCode.RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL
-: status: noFix
-CompileTimeErrorCode.REST_ELEMENT_IN_MAP_PATTERN:
+REDIRECT_TO_INVALID_RETURN_TYPE:
+  status: noFix
+REDIRECT_TO_MISSING_CONSTRUCTOR:
+  status: noFix
+REDIRECT_TO_NON_CLASS:
+  status: noFix
+REDIRECT_TO_NON_CONST_CONSTRUCTOR:
+  status: noFix
+REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+  status: noFix
+REFERENCED_BEFORE_DECLARATION:
+  status: noFix
+REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT:
+  status: noFix
+RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE:
+  status: noFix
+RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL:
+  status: noFix
+REST_ELEMENT_IN_MAP_PATTERN:
   status: needsFix
   issue: https://github.com/dart-lang/sdk/issues/51892
-CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH:
+RETHROW_OUTSIDE_CATCH:
   status: noFix
-CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR:
+RETURN_IN_GENERATIVE_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove the return.
     Convert to a factory constructor.
-CompileTimeErrorCode.RETURN_IN_GENERATOR:
+RETURN_IN_GENERATOR:
   status: needsFix
   notes: |-
     Replace with a yield.
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE:
+RETURN_OF_INVALID_TYPE_FROM_CLOSURE:
   status: hasFix
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR:
+RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR:
   status: noFix
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION:
+RETURN_OF_INVALID_TYPE_FROM_FUNCTION:
   status: hasFix
-CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD:
+RETURN_OF_INVALID_TYPE_FROM_METHOD:
   status: hasFix
-CompileTimeErrorCode.RETURN_WITHOUT_VALUE:
+RETURN_WITHOUT_VALUE:
   status: noFix
-CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY:
+SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY:
   status: noFix
-CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY:
+SET_ELEMENT_FROM_DEFERRED_LIBRARY:
   status: hasFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
   status: hasFix
-CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
+SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
   status: noFix
-CompileTimeErrorCode.SHARED_DEFERRED_PREFIX:
+SHARED_DEFERRED_PREFIX:
   status: noFix
-CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY:
+SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY:
   status: hasFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER:
+STATIC_ACCESS_TO_INSTANCE_MEMBER:
   status: noFix
-CompileTimeErrorCode.SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED:
+SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED:
   status: hasFix
-CompileTimeErrorCode.SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED:
+SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED:
   status: hasFix
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED:
+SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED:
   status: hasFix
   since: 2.17
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED:
+SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED:
   status: hasFix
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL:
-  status: needsFix
-  issue: https://github.com/dart-lang/sdk/issues/48359
-CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR:
+SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL:
+  status: hasFix
+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:
+SUPER_IN_EXTENSION:
   status: noFix
   notes: |-
     We could potentially offer a fix to remove the super invocation, but the
     user really needs to think about what function they were trying to invoke
     and why in order to really fix the issue.
-CompileTimeErrorCode.SUPER_IN_EXTENSION_TYPE:
+SUPER_IN_EXTENSION_TYPE:
   status: noFix
   notes: |-
     We could potentially offer a fix to remove the super invocation, but the
     user really needs to think about what function they were trying to invoke
     and why in order to really fix the issue.
-CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT:
+SUPER_IN_INVALID_CONTEXT:
   status: noFix
   notes: |-
     We could potentially offer a fix to remove the super invocation, but the
     user really needs to think about what member they were trying to invoke
     and why in order to really fix the issue.
-CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR:
+SUPER_IN_REDIRECTING_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove the super initialize.
     Remove the redirection.
-CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT:
+SUPER_INITIALIZER_IN_OBJECT:
   status: noFix
   notes: |-
     Object is only declared in SDK code; those developers do OK without fixes.
-CompileTimeErrorCode.SUPER_INVOCATION_NOT_LAST:
+SUPER_INVOCATION_NOT_LAST:
   status: hasFix
-CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY:
+SWITCH_CASE_COMPLETES_NORMALLY:
   status: hasFix
-CompileTimeErrorCode.TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS:
+TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS:
   status: noFix
   since: 2.15
-CompileTimeErrorCode.THROW_OF_INVALID_TYPE:
+THROW_OF_INVALID_TYPE:
   status: noFix
-CompileTimeErrorCode.TOP_LEVEL_CYCLE:
+TOP_LEVEL_CYCLE:
   status: noFix
-CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF:
+TYPE_ALIAS_CANNOT_REFERENCE_ITSELF:
   status: noFix
-CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS:
+TYPE_ANNOTATION_DEFERRED_CLASS:
   status: needsFix
   notes: |-
     Remove the `deferred` keyword from the import.
-CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS:
+TYPE_ARGUMENT_NOT_MATCHING_BOUNDS:
   status: noFix
-CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC:
+TYPE_PARAMETER_REFERENCED_BY_STATIC:
   status: needsFix
   notes: |-
     Fixes could include (1) removing the 'static' keyword, (2) changing the type
     variable to its bound, (3) looking for similarly spelled types.
-CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND:
+TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND:
   status: noFix
-CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE:
+TYPE_TEST_WITH_NON_TYPE:
   status: needsFix
   notes: |-
     Fixes could include: (1) changing ` is ` to ` == ` and (2) changing the
     right operand to the static type of the left.
-CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME:
+TYPE_TEST_WITH_UNDEFINED_NAME:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE:
+UNCHECKED_INVOCATION_OF_NULLABLE_VALUE:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE:
+UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE:
+UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE:
+UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION:
+UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR:
+UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD:
+UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD:
   status: hasFix
-CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH:
+UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_ANNOTATION:
+UNDEFINED_ANNOTATION:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_CLASS:
+UNDEFINED_CLASS:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN:
+UNDEFINED_CLASS_BOOLEAN:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER:
+UNDEFINED_CONSTRUCTOR_IN_INITIALIZER:
   status: needsFix
   notes: |-
     Fixes could include (1) adding a declaration for such constructor, (2) look
     for closely named constructors.
-CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT:
+UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT:
+UNDEFINED_ENUM_CONSTANT:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED:
+UNDEFINED_ENUM_CONSTRUCTOR_NAMED:
   status: hasFix
   since: 2.17
-CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
+UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
   status: hasFix
   since: 2.17
-CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER:
+UNDEFINED_EXTENSION_GETTER:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD:
+UNDEFINED_EXTENSION_METHOD:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR:
+UNDEFINED_EXTENSION_OPERATOR:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER:
+UNDEFINED_EXTENSION_SETTER:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_FUNCTION:
+UNDEFINED_FUNCTION:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_GETTER:
+UNDEFINED_GETTER:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_GETTER_ON_FUNCTION_TYPE:
+UNDEFINED_GETTER_ON_FUNCTION_TYPE:
   status: needsFix
   since: 2.15
-CompileTimeErrorCode.UNDEFINED_IDENTIFIER:
+UNDEFINED_IDENTIFIER:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT:
+UNDEFINED_IDENTIFIER_AWAIT:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_METHOD:
+UNDEFINED_METHOD:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_METHOD_ON_FUNCTION_TYPE:
+UNDEFINED_METHOD_ON_FUNCTION_TYPE:
   status: needsFix
   since: 2.15
-CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER:
+UNDEFINED_NAMED_PARAMETER:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_OPERATOR:
+UNDEFINED_OPERATOR:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME:
+UNDEFINED_PREFIXED_NAME:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_SETTER:
+UNDEFINED_SETTER:
   status: hasFix
-CompileTimeErrorCode.UNDEFINED_SETTER_ON_FUNCTION_TYPE:
+UNDEFINED_SETTER_ON_FUNCTION_TYPE:
   status: needsFix
   since: 2.15
-CompileTimeErrorCode.UNDEFINED_SUPER_GETTER:
+UNDEFINED_SUPER_GETTER:
   status: needsFix
   notes: |-
     The fix is to create the getter, assuming the superclass is editable.
-CompileTimeErrorCode.UNDEFINED_SUPER_METHOD:
+UNDEFINED_SUPER_METHOD:
   status: needsFix
   notes: |-
     The fix is to create the method, assuming the superclass is editable.
-CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR:
+UNDEFINED_SUPER_OPERATOR:
   status: needsFix
   notes: |-
     The fix is to create the operator, assuming the superclass is editable.
-CompileTimeErrorCode.UNDEFINED_SUPER_SETTER:
+UNDEFINED_SUPER_SETTER:
   status: needsFix
   notes: |-
     The fix is to create the setter, assuming the superclass is editable.
-CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER:
+UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER:
   status: hasFix
-CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE:
+UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE:
   status: hasFix
-CompileTimeErrorCode.URI_DOES_NOT_EXIST:
+URI_DOES_NOT_EXIST:
   status: hasFix
-CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED:
+URI_HAS_NOT_BEEN_GENERATED:
   status: noFix
-CompileTimeErrorCode.URI_WITH_INTERPOLATION:
+URI_WITH_INTERPOLATION:
   status: noFix
-CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION:
+USE_OF_NATIVE_EXTENSION:
   status: noFix
   since: ~2.15
-CompileTimeErrorCode.USE_OF_VOID_RESULT:
+USE_OF_VOID_RESULT:
   status: noFix
-CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM:
+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:
+VARIABLE_TYPE_MISMATCH:
   status: noFix
-CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
   status: noFix
-CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR:
+WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR:
   status: needsFix
   notes: |-
     Fixes could include (1) removing all past the first parameter, and (2)
     removing all but a singular used parameter, if only one is used.
-CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS:
+WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS:
   status: needsFix
   notes: |-
     Fixes could include (1) removing all past the first parameter, and (2)
     removing all but a singular used parameter, if only one is used.
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS:
   status: hasFix
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION:
   status: needsFix
   since: 2.15
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR:
   status: hasFix
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_DOT_SHORTHAND_CONSTRUCTOR:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS_DOT_SHORTHAND_CONSTRUCTOR:
   status: needsEvaluation
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM:
+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:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION:
   status: hasFix
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION:
   status: needsFix
   since: ~2.15
-CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD:
+WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD:
   status: hasFix
-CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
   status: noFix
-CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION:
+WRONG_TYPE_PARAMETER_VARIANCE_POSITION:
   status: noFix
-CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR:
+YIELD_EACH_IN_NON_GENERATOR:
   status: needsFix
   notes: |-
     Fixes could include: (1) change `yield` to `return` (maybe only if it
     matches the return type) and (2) change function signature from implicit
     sync to `sync*` or `async` to `async*`.
-CompileTimeErrorCode.YIELD_IN_NON_GENERATOR:
+YIELD_IN_NON_GENERATOR:
   status: needsFix
   notes: |-
     Fixes could include: (1) change `yield` to `return` (maybe only if it
     matches the return type)  and (2) change function signature from implicit
     sync to `sync*` or `async` to `async*`.
-CompileTimeErrorCode.YIELD_EACH_OF_INVALID_TYPE:
+YIELD_EACH_OF_INVALID_TYPE:
   status: noFix
-CompileTimeErrorCode.YIELD_OF_INVALID_TYPE:
+YIELD_OF_INVALID_TYPE:
   status: hasFix
-FfiCode.ABI_SPECIFIC_INTEGER_INVALID:
+ABI_SPECIFIC_INTEGER_INVALID:
   status: noFix
   since: ~2.16
-FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
+ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
   status: needsFix
   since: ~2.16
-FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
+ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
   status: noFix
   since: ~2.16
-FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
+ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
   status: noFix
   since: ~2.16
-FfiCode.ADDRESS_POSITION:
+ADDRESS_POSITION:
   status: needsEvaluation
   since: ~3.5
-FfiCode.ADDRESS_RECEIVER:
+ADDRESS_RECEIVER:
   status: needsEvaluation
   since: ~3.5
-FfiCode.ANNOTATION_ON_POINTER_FIELD:
+ANNOTATION_ON_POINTER_FIELD:
   status: needsFix
-FfiCode.ARGUMENT_MUST_BE_A_CONSTANT:
+ARGUMENT_MUST_BE_A_CONSTANT:
   status: noFix
-FfiCode.ARGUMENT_MUST_BE_NATIVE:
+ARGUMENT_MUST_BE_NATIVE:
   status: needsEvaluation
-FfiCode.COMPOUND_IMPLEMENTS_FINALIZABLE:
+COMPOUND_IMPLEMENTS_FINALIZABLE:
   status: noFix
-FfiCode.CREATION_OF_STRUCT_OR_UNION:
+CREATION_OF_STRUCT_OR_UNION:
   status: noFix
   since: ~2.15
-FfiCode.EMPTY_STRUCT:
+EMPTY_STRUCT:
   status: noFix
-FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD:
+EXTRA_ANNOTATION_ON_STRUCT_FIELD:
   status: needsFix
-FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY:
+EXTRA_SIZE_ANNOTATION_CARRAY:
   status: needsFix
-FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL:
+FFI_NATIVE_MUST_BE_EXTERNAL:
   status: needsFix
   since: ~2.15
   notes: |-
     The fix is to add the `external` keyword.
-FfiCode.FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER:
+FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER:
   status: noFix
   since: ~2.15
-FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS:
+FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS:
   status: noFix
   since: ~2.15
-FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER:
+FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER:
   status: noFix
   since: ~2.15
-FfiCode.FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET:
+FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET:
   status: needsEvaluation
-FfiCode.FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS:
+FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS:
   status: needsEvaluation
-FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT:
+FIELD_MUST_BE_EXTERNAL_IN_STRUCT:
   status: needsFix
   since: ~2.15
   notes: |-
     The fix is to add the `external` keyword.
-FfiCode.GENERIC_STRUCT_SUBCLASS:
+GENERIC_STRUCT_SUBCLASS:
   status: noFix
-FfiCode.INVALID_EXCEPTION_VALUE:
+INVALID_EXCEPTION_VALUE:
   status: noFix
-FfiCode.INVALID_FIELD_TYPE_IN_STRUCT:
+INVALID_FIELD_TYPE_IN_STRUCT:
   status: noFix
-FfiCode.LEAF_CALL_MUST_NOT_RETURN_HANDLE:
+LEAF_CALL_MUST_NOT_RETURN_HANDLE:
   status: noFix
-FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE:
+LEAF_CALL_MUST_NOT_TAKE_HANDLE:
   status: noFix
-FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD:
+MISMATCHED_ANNOTATION_ON_STRUCT_FIELD:
   status: noFix
-FfiCode.MISSING_ANNOTATION_ON_STRUCT_FIELD:
+MISSING_ANNOTATION_ON_STRUCT_FIELD:
   status: noFix
-FfiCode.MISSING_EXCEPTION_VALUE:
+MISSING_EXCEPTION_VALUE:
   status: noFix
-FfiCode.MISSING_FIELD_TYPE_IN_STRUCT:
+MISSING_FIELD_TYPE_IN_STRUCT:
   status: noFix
-FfiCode.MISSING_SIZE_ANNOTATION_CARRAY:
+MISSING_SIZE_ANNOTATION_CARRAY:
   status: noFix
-FfiCode.MUST_BE_A_NATIVE_FUNCTION_TYPE:
+MUST_BE_A_NATIVE_FUNCTION_TYPE:
   status: noFix
-FfiCode.MUST_BE_A_SUBTYPE:
+MUST_BE_A_SUBTYPE:
   status: noFix
-FfiCode.MUST_RETURN_VOID:
+MUST_RETURN_VOID:
   status: noFix
-FfiCode.NATIVE_FIELD_INVALID_TYPE:
+NATIVE_FIELD_INVALID_TYPE:
   status: needsEvaluation
-FfiCode.NATIVE_FIELD_MISSING_TYPE:
+NATIVE_FIELD_MISSING_TYPE:
   status: needsEvaluation
-FfiCode.NATIVE_FIELD_NOT_STATIC:
+NATIVE_FIELD_NOT_STATIC:
   status: needsEvaluation
-FfiCode.NATIVE_FUNCTION_MISSING_TYPE:
+NATIVE_FUNCTION_MISSING_TYPE:
   status: needsEvaluation
-FfiCode.NEGATIVE_VARIABLE_DIMENSION:
+NEGATIVE_VARIABLE_DIMENSION:
   status: noFix
-FfiCode.NON_CONSTANT_TYPE_ARGUMENT:
+NON_CONSTANT_TYPE_ARGUMENT:
   status: noFix
-FfiCode.NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
+NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
   status: noFix
-FfiCode.NON_POSITIVE_ARRAY_DIMENSION:
+NON_POSITIVE_ARRAY_DIMENSION:
   status: noFix
-FfiCode.NON_SIZED_TYPE_ARGUMENT:
+NON_SIZED_TYPE_ARGUMENT:
   status: noFix
-FfiCode.PACKED_ANNOTATION:
+PACKED_ANNOTATION:
   status: needsFix
   notes: |-
     The fix is to remove the extra annotation.
-FfiCode.PACKED_ANNOTATION_ALIGNMENT:
+PACKED_ANNOTATION_ALIGNMENT:
   status: noFix
-FfiCode.SIZE_ANNOTATION_DIMENSIONS:
+SIZE_ANNOTATION_DIMENSIONS:
   status: noFix
-FfiCode.VARIABLE_LENGTH_ARRAY_NOT_LAST:
+VARIABLE_LENGTH_ARRAY_NOT_LAST:
   status: noFix
-FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS:
+SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS:
   status: hasFix
-FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS:
+SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS:
   status: hasFix
-FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
+SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
   status: hasFix
-HintCode.DEPRECATED_COLON_FOR_DEFAULT_VALUE:
+DEPRECATED_COLON_FOR_DEFAULT_VALUE:
   status: hasFix
-HintCode.DEPRECATED_MEMBER_USE:
+DEPRECATED_MEMBER_USE:
   status: hasFix
-HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE:
+DEPRECATED_MEMBER_USE_WITH_MESSAGE:
   status: hasFix
-HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
+IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
   status: noFix
-HintCode.UNNECESSARY_IMPORT:
+UNNECESSARY_IMPORT:
   status: hasFix
-LintCode.always_declare_return_types_of_functions:
+always_declare_return_types_of_functions:
   status: hasFix
-LintCode.always_declare_return_types_of_methods:
+always_declare_return_types_of_methods:
   status: hasFix
-LintCode.always_put_control_body_on_new_line:
+always_put_control_body_on_new_line:
   status: hasFix
-LintCode.always_put_required_named_parameters_first:
+always_put_required_named_parameters_first:
   status: hasFix
-LintCode.always_specify_types_add_type:
+always_specify_types_add_type:
   status: hasFix
-LintCode.always_specify_types_replace_keyword:
+always_specify_types_replace_keyword:
   status: hasFix
-LintCode.always_specify_types_specify_type:
+always_specify_types_specify_type:
   status: hasFix
-LintCode.always_specify_types_split_to_types:
+always_specify_types_split_to_types:
   status: hasFix
-LintCode.always_use_package_imports:
+always_use_package_imports:
   status: hasFix
-LintCode.analyzer_element_model_tracking_bad:
+analyzer_element_model_tracking_bad:
   status: noFix
-LintCode.analyzer_element_model_tracking_more_than_one:
+analyzer_element_model_tracking_more_than_one:
   status: noFix
-LintCode.analyzer_element_model_tracking_zero:
+analyzer_element_model_tracking_zero:
   status: noFix
-LintCode.analyzer_public_api_bad_part_directive:
+analyzer_public_api_bad_part_directive:
   status: noFix
-LintCode.analyzer_public_api_bad_type:
+analyzer_public_api_bad_type:
   status: noFix
-LintCode.analyzer_public_api_experimental_inconsistency:
+analyzer_public_api_experimental_inconsistency:
   status: noFix
-LintCode.analyzer_public_api_exports_non_public_name:
+analyzer_public_api_exports_non_public_name:
   status: noFix
-LintCode.analyzer_public_api_impl_in_public_api:
+analyzer_public_api_impl_in_public_api:
   status: noFix
-LintCode.annotate_overrides:
+annotate_overrides:
   status: hasFix
-LintCode.annotate_redeclares:
+annotate_redeclares:
   status: hasFix
-LintCode.avoid_annotating_with_dynamic:
+avoid_annotating_with_dynamic:
   status: hasFix
-LintCode.avoid_bool_literals_in_conditional_expressions:
+avoid_bool_literals_in_conditional_expressions:
   status: hasFix
-LintCode.avoid_catches_without_on_clauses:
+avoid_catches_without_on_clauses:
   status: noFix
   notes: |-
     There's no way to know which type to use in the on clause.
-LintCode.avoid_catching_errors_class:
+avoid_catching_errors_class:
   status: noFix
-LintCode.avoid_catching_errors_subclass:
+avoid_catching_errors_subclass:
   status: noFix
-LintCode.avoid_classes_with_only_static_members:
+avoid_classes_with_only_static_members:
   status: noFix
   notes: |-
     The fix would be to convert the static members to top-level members, but
     that would require a refactoring.
-LintCode.avoid_double_and_int_checks:
+avoid_double_and_int_checks:
   status: needsFix
   notes: |-
     The fix is to replace the type name with `num`.
-LintCode.avoid_dynamic_calls:
+avoid_dynamic_calls:
   status: noFix
-LintCode.avoid_empty_else:
+avoid_empty_else:
   status: hasFix
-LintCode.avoid_equals_and_hash_code_on_mutable_classes:
+avoid_equals_and_hash_code_on_mutable_classes:
   status: noFix
   notes: |-
     Theoretically we could remove the methods, but the fix is probably
     appropriate so seldom that it isn't worth offering it.
-LintCode.avoid_escaping_inner_quotes:
+avoid_escaping_inner_quotes:
   status: hasFix
-LintCode.avoid_field_initializers_in_const_classes:
+avoid_field_initializers_in_const_classes:
   status: noFix
-LintCode.avoid_final_parameters:
+avoid_final_parameters:
   status: needsFix
   notes: |-
     The fix is to remove the `final` keyword.
-LintCode.avoid_function_literals_in_foreach_calls:
+avoid_function_literals_in_foreach_calls:
   status: hasFix
-LintCode.avoid_futureor_void:
+avoid_futureor_void:
   status: noFix
   notes: |-
     The type 'FutureOr<void>' is inherently problematic, but there is
@@ -1933,239 +1948,239 @@
     a need for some implementation changes, or it might be a breaking
     change. Another possibility is to use 'void', but this could also
     be breaking.
-LintCode.avoid_implementing_value_types:
+avoid_implementing_value_types:
   status: noFix
   notes: |-
     This lint should probably be retired in favor of explicitly marking the
     value type class as being `base`. We might want a new lint to flag classes
     that implement `==` but aren't marked as `base`
     (`non_base_class_with_equals`?).
-LintCode.avoid_init_to_null:
+avoid_init_to_null:
   status: hasFix
-LintCode.avoid_js_rounded_ints:
+avoid_js_rounded_ints:
   status: noFix
-LintCode.avoid_multiple_declarations_per_line:
+avoid_multiple_declarations_per_line:
   status: hasFix
-LintCode.avoid_null_checks_in_equality_operators:
+avoid_null_checks_in_equality_operators:
   status: hasFix
-LintCode.avoid_positional_boolean_parameters:
+avoid_positional_boolean_parameters:
   status: noFix
   notes: |-
     The fix is to make bool parameter be named parameters, but that requires a
     refactoring.
-LintCode.avoid_print:
+avoid_print:
   status: hasFix
-LintCode.avoid_private_typedef_functions:
+avoid_private_typedef_functions:
   status: hasFix
-LintCode.avoid_redundant_argument_values:
+avoid_redundant_argument_values:
   status: hasFix
-LintCode.avoid_relative_lib_imports:
+avoid_relative_lib_imports:
   status: hasFix
-LintCode.avoid_renaming_method_parameters:
+avoid_renaming_method_parameters:
   status: hasFix
-LintCode.avoid_return_types_on_setters:
+avoid_return_types_on_setters:
   status: hasFix
-LintCode.avoid_returning_null_for_void_from_function:
+avoid_returning_null_for_void_from_function:
   status: hasFix
-LintCode.avoid_returning_null_for_void_from_method:
+avoid_returning_null_for_void_from_method:
   status: hasFix
-LintCode.avoid_returning_this:
+avoid_returning_this:
   status: noFix
   notes: |-
     The fix would be to change the return type to `void`, but that requires a
     refactoring. (It might not be possible to clean up all invocation sites, but
     we could handle some of them.)
-LintCode.avoid_setters_without_getters:
+avoid_setters_without_getters:
   status: needsFix
   notes: |-
     The fix is to either add a corresponding getter or to remove the setter.
-LintCode.avoid_shadowing_type_parameters:
+avoid_shadowing_type_parameters:
   status: noFix
   notes: |-
     The fix is to rename the type parameter, which is a refactoring.
-LintCode.avoid_single_cascade_in_expression_statements:
+avoid_single_cascade_in_expression_statements:
   status: hasFix
-LintCode.avoid_slow_async_io:
+avoid_slow_async_io:
   status: needsFix
   notes: |-
     The fix is to use the corresponding sync method and to remove the `await`,
     but it's probably very seldom needed, so it's low priority.
-LintCode.avoid_type_to_string:
+avoid_type_to_string:
   status: noFix
   notes: |-
     Theoretically we could replace some uses with `is` checks, but it's probably
     uncommon enough to not be worth the cost.
-LintCode.avoid_types_as_parameter_names_type_parameter:
+avoid_types_as_parameter_names_type_parameter:
   status: noFix
   notes: |-
     The type variable needs to be renamed, but that's a refactoring.
-LintCode.avoid_types_as_parameter_names_formal_parameter:
+avoid_types_as_parameter_names_formal_parameter:
   status: hasFix
-LintCode.avoid_types_on_closure_parameters:
+avoid_types_on_closure_parameters:
   status: hasFix
-LintCode.avoid_unnecessary_containers:
+avoid_unnecessary_containers:
   status: hasFix
-LintCode.avoid_unused_constructor_parameters:
+avoid_unused_constructor_parameters:
   status: hasFix
-LintCode.avoid_void_async:
+avoid_void_async:
   status: hasFix
-LintCode.avoid_web_libraries_in_flutter:
+avoid_web_libraries_in_flutter:
   status: noFix
-LintCode.await_only_futures:
+await_only_futures:
   status: hasFix
-LintCode.camel_case_extensions:
+camel_case_extensions:
   status: noFix
   notes: |-
     The fix is to rename the extension, but that's a refactoring.
-LintCode.camel_case_types:
+camel_case_types:
   status: noFix
   notes: |-
     The fix is to rename the type, but that's a refactoring.
-LintCode.cancel_subscriptions:
+cancel_subscriptions:
   status: noFix
-LintCode.cascade_invocations:
+cascade_invocations:
   status: hasFix
-LintCode.cast_nullable_to_non_nullable:
+cast_nullable_to_non_nullable:
   status: hasFix
-LintCode.close_sinks:
+close_sinks:
   status: noFix
-LintCode.collection_methods_unrelated_type:
+collection_methods_unrelated_type:
   status: noFix
-LintCode.combinators_ordering:
+combinators_ordering:
   status: hasFix
-LintCode.comment_references:
+comment_references:
   status: hasFix
   notes: |-
     This lint should be deprecated when we have a doc-only form of import. At
     that point this will be a warning rather than a lint.
-LintCode.conditional_uri_does_not_exist:
+conditional_uri_does_not_exist:
   status: noFix
   notes: |-
     The fix is to create the file, but typically that means running a generator,
     which is outside the scope of fixes.
-LintCode.constant_identifier_names:
+constant_identifier_names:
   status: hasFix
   notes: |-
     Supported for local variables.
     Not supported for fields and top-level variables, has to be a refactoring.
-LintCode.control_flow_in_finally:
+control_flow_in_finally:
   status: noFix
-LintCode.curly_braces_in_flow_control_structures:
+curly_braces_in_flow_control_structures:
   status: hasFix
-LintCode.dangling_library_doc_comments:
+dangling_library_doc_comments:
   status: hasFix
-LintCode.depend_on_referenced_packages:
+depend_on_referenced_packages:
   status: needsFix
-LintCode.deprecated_consistency_constructor:
+deprecated_consistency_constructor:
   status: needsFix
   notes: |-
     The fix is to either remove deprecated or to add it in the missing places.
-LintCode.deprecated_consistency_field:
+deprecated_consistency_field:
   status: needsFix
   notes: |-
     The fix is to either remove deprecated or to add it in the missing places.
-LintCode.deprecated_consistency_parameter:
+deprecated_consistency_parameter:
   status: needsFix
   notes: |-
     The fix is to either remove deprecated or to add it in the missing places.
-LintCode.deprecated_member_use_from_same_package_without_message:
+deprecated_member_use_from_same_package_without_message:
   status: hasFix
-LintCode.deprecated_member_use_from_same_package_with_message:
+deprecated_member_use_from_same_package_with_message:
   status: hasFix
-LintCode.diagnostic_describe_all_properties:
+diagnostic_describe_all_properties:
   status: hasFix
-LintCode.directives_ordering_alphabetical:
+directives_ordering_alphabetical:
   status: hasFix
-LintCode.directives_ordering_dart:
+directives_ordering_dart:
   status: hasFix
-LintCode.directives_ordering_exports:
+directives_ordering_exports:
   status: hasFix
-LintCode.directives_ordering_package_before_relative:
+directives_ordering_package_before_relative:
   status: hasFix
-LintCode.discarded_futures:
+discarded_futures:
   status: hasFix
-LintCode.do_not_use_environment:
+do_not_use_environment:
   status: noFix
-LintCode.document_ignores:
+document_ignores:
   status: needsFix
   notes: |-
     We of course cannot generate a fix including appropriate text, but we can
     insert a stub comment in the correct position.
-LintCode.empty_catches:
+empty_catches:
   status: hasFix
-LintCode.empty_constructor_bodies:
+empty_constructor_bodies:
   status: hasFix
-LintCode.empty_statements:
+empty_statements:
   status: hasFix
-LintCode.eol_at_end_of_file:
+eol_at_end_of_file:
   status: hasFix
-LintCode.erase_dart_type_extension_types:
+erase_dart_type_extension_types:
   status: needsEvaluation
-LintCode.exhaustive_cases:
+exhaustive_cases:
   status: hasFix
-LintCode.file_names:
+file_names:
   status: noFix
   notes: |-
     The fix is to rename the file, but that's a refactoring.
-LintCode.flutter_style_todos:
+flutter_style_todos:
   status: hasFix
-LintCode.hash_and_equals:
+hash_and_equals:
   status: hasFix
-LintCode.implementation_imports:
+implementation_imports:
   status: noFix
   notes: |-
     Theoretically, once analyzer can share dartdoc's method for finding public
     libraries that export a private one, we could offer the public libraries as
     a replacement. But a fix is blocked on having that support available.
-LintCode.implicit_call_tearoffs:
+implicit_call_tearoffs:
   status: hasFix
-LintCode.implicit_reopen:
+implicit_reopen:
   status: hasFix
-LintCode.invalid_case_patterns:
+invalid_case_patterns:
   status: hasFix
-LintCode.invalid_runtime_check_with_js_interop_types_dart_as_js:
+invalid_runtime_check_with_js_interop_types_dart_as_js:
   status: needsEvaluation
   notes: |-
     The fix is dependent on the specific types that are being used. In some
     cases, the type test is incorrect and has no fix besides removing the test.
     In other cases, JS interop helpers may be used to do the type test instead.
-LintCode.invalid_runtime_check_with_js_interop_types_dart_is_js:
+invalid_runtime_check_with_js_interop_types_dart_is_js:
   status: needsEvaluation
-LintCode.invalid_runtime_check_with_js_interop_types_js_as_dart:
+invalid_runtime_check_with_js_interop_types_js_as_dart:
   status: needsEvaluation
-LintCode.invalid_runtime_check_with_js_interop_types_js_as_incompatible_js:
+invalid_runtime_check_with_js_interop_types_js_as_incompatible_js:
   status: needsEvaluation
-LintCode.invalid_runtime_check_with_js_interop_types_js_is_dart:
+invalid_runtime_check_with_js_interop_types_js_is_dart:
   status: needsEvaluation
-LintCode.invalid_runtime_check_with_js_interop_types_js_is_inconsistent_js:
+invalid_runtime_check_with_js_interop_types_js_is_inconsistent_js:
   status: needsEvaluation
-LintCode.invalid_runtime_check_with_js_interop_types_js_is_unrelated_js:
+invalid_runtime_check_with_js_interop_types_js_is_unrelated_js:
   status: needsEvaluation
-LintCode.join_return_with_assignment:
+join_return_with_assignment:
   status: needsFix
-LintCode.leading_newlines_in_multiline_strings:
+leading_newlines_in_multiline_strings:
   status: hasFix
-LintCode.library_annotations:
+library_annotations:
   status: hasFix
-LintCode.library_names:
+library_names:
   status: noFix
   notes: |-
     The fix is to rename the library (possibly to an empty name), but that's a
     refactoring.
-LintCode.library_prefixes:
+library_prefixes:
   status: noFix
   notes: |-
     The fix is to rename the prefix, but that's a refactoring.
-LintCode.library_private_types_in_public_api:
+library_private_types_in_public_api:
   status: noFix
   notes: |-
     The fix is to either change the type in the API (which we can't automate) or
     to make the private type public, which (sort of) requires a refactoring.
-LintCode.lines_longer_than_80_chars:
+lines_longer_than_80_chars:
   status: noFix
-LintCode.literal_only_boolean_expressions:
+literal_only_boolean_expressions:
   status: noFix
-LintCode.matching_super_parameters:
+matching_super_parameters:
   status: needsFix
   notes: |-
     A little tricky, but two (non-conflicting) ideas:
@@ -2173,44 +2188,44 @@
        parameter name.
     2. Transpose two super parameters if doing so would match up their
        super-constructor parameters.
-LintCode.missing_code_block_language_in_doc_comment:
+missing_code_block_language_in_doc_comment:
   status: needsEvaluation
-LintCode.missing_whitespace_between_adjacent_strings:
+missing_whitespace_between_adjacent_strings:
   status: needsFix
   notes: |-
     The fix is to add the whitespace. Might require a preference to know which
     string to add it to.
-LintCode.no_adjacent_strings_in_list:
+no_adjacent_strings_in_list:
   status: needsFix
   notes: |-
     The fix is to either add a comma or join the strings.
-LintCode.no_default_cases:
+no_default_cases:
   status: needsFix
   notes: |-
     The fix is to replace the `default` with a list of cases for the existing
     values that the default would have matched.
-LintCode.no_duplicate_case_values:
+no_duplicate_case_values:
   status: hasFix
-LintCode.no_leading_underscores_for_library_prefixes:
+no_leading_underscores_for_library_prefixes:
   status: hasFix
-LintCode.no_leading_underscores_for_local_identifiers:
+no_leading_underscores_for_local_identifiers:
   status: hasFix
-LintCode.no_literal_bool_comparisons:
+no_literal_bool_comparisons:
   status: hasFix
-LintCode.no_logic_in_create_state:
+no_logic_in_create_state:
   status: noFix
-LintCode.no_runtimeType_toString:
+no_runtimeType_toString:
   status: noFix
-LintCode.no_self_assignments:
+no_self_assignments:
   status: needsEvaluation
-LintCode.non_constant_identifier_names:
+non_constant_identifier_names:
   status: hasFix
   notes: |-
     Supported for local variables.
     Not supported for fields and top-level variables, has to be a refactoring.
-LintCode.noop_primitive_operations:
+noop_primitive_operations:
   status: hasFix
-LintCode.null_check_on_nullable_type_parameter:
+null_check_on_nullable_type_parameter:
   status: hasFix
   notes: |-
     A second fix is possible, in which we make the type parameter not
@@ -2219,1396 +2234,1394 @@
     `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:
+null_closures:
   status: hasFix
-LintCode.omit_local_variable_types:
+omit_local_variable_types:
   status: hasFix
-LintCode.omit_obvious_local_variable_types:
+omit_obvious_local_variable_types:
   status: hasFix
-LintCode.omit_obvious_property_types:
+omit_obvious_property_types:
   status: hasFix
-LintCode.one_member_abstracts:
+one_member_abstracts:
   status: noFix
   notes: |-
     Theoretically we could convert the member to a top-level function, but that
     would require a refactoring.
-LintCode.only_throw_errors:
+only_throw_errors:
   status: noFix
-LintCode.overridden_fields:
+overridden_fields:
   status: noFix
-LintCode.package_names:
+package_names:
   status: noFix
   notes: |-
     The fix is to rename the package, but that's a refactoring.
-LintCode.package_prefixed_library_names:
+package_prefixed_library_names:
   status: noFix
   notes: |-
     The fix is to rename the library, but that's a refactoring.
-LintCode.parameter_assignments:
+parameter_assignments:
   status: noFix
   notes: |-
     Theoretically we could assign the parameter to a local variable and replace
     all references to the parameter with a reference to the variable, but that
     would require choosing a name for the local variable.
-LintCode.prefer_adjacent_string_concatenation:
+prefer_adjacent_string_concatenation:
   status: hasFix
-LintCode.prefer_asserts_in_initializer_lists:
+prefer_asserts_in_initializer_lists:
   status: needsFix
   notes: |-
     The fix is to move the assert to the initializer list.
-LintCode.prefer_asserts_with_message:
+prefer_asserts_with_message:
   status: noFix
-LintCode.prefer_collection_literals:
+prefer_collection_literals:
   status: hasFix
-LintCode.prefer_conditional_assignment:
+prefer_conditional_assignment:
   status: hasFix
-LintCode.prefer_const_constructors:
+prefer_const_constructors:
   status: hasFix
-LintCode.prefer_const_constructors_in_immutables:
+prefer_const_constructors_in_immutables:
   status: hasFix
-LintCode.prefer_const_declarations:
+prefer_const_declarations:
   status: hasFix
-LintCode.prefer_const_literals_to_create_immutables:
+prefer_const_literals_to_create_immutables:
   status: hasFix
-LintCode.prefer_constructors_over_static_methods:
+prefer_constructors_over_static_methods:
   status: needsFix
   notes: |-
     The fix is to rewrite the static method as a factory constructor.
-LintCode.prefer_contains_always_false:
+prefer_contains_always_false:
   status: hasFix
-LintCode.prefer_contains_always_true:
+prefer_contains_always_true:
   status: hasFix
-LintCode.prefer_contains_use_contains:
+prefer_contains_use_contains:
   status: hasFix
-LintCode.prefer_double_quotes:
+prefer_double_quotes:
   status: hasFix
-LintCode.prefer_expression_function_bodies:
+prefer_expression_function_bodies:
   status: hasFix
-LintCode.prefer_final_fields:
+prefer_final_fields:
   status: hasFix
-LintCode.prefer_final_in_for_each_pattern:
+prefer_final_in_for_each_pattern:
   status: hasFix
-LintCode.prefer_final_in_for_each_variable:
+prefer_final_in_for_each_variable:
   status: hasFix
-LintCode.prefer_final_locals:
+prefer_final_locals:
   status: hasFix
-LintCode.prefer_final_parameters:
+prefer_final_parameters:
   status: hasFix
-LintCode.prefer_for_elements_to_map_fromIterable:
+prefer_for_elements_to_map_fromIterable:
   status: hasFix
-LintCode.prefer_foreach:
+prefer_foreach:
   status: hasFix
-LintCode.prefer_function_declarations_over_variables:
+prefer_function_declarations_over_variables:
   status: hasFix
-LintCode.prefer_generic_function_type_aliases:
+prefer_generic_function_type_aliases:
   status: hasFix
-LintCode.prefer_if_elements_to_conditional_expressions:
+prefer_if_elements_to_conditional_expressions:
   status: hasFix
-LintCode.prefer_if_null_operators:
+prefer_if_null_operators:
   status: hasFix
-LintCode.prefer_initializing_formals:
+prefer_initializing_formals:
   status: hasFix
-LintCode.prefer_inlined_adds_multiple:
+prefer_inlined_adds_multiple:
   status: hasFix
-LintCode.prefer_inlined_adds_single:
+prefer_inlined_adds_single:
   status: hasFix
-LintCode.prefer_int_literals:
+prefer_int_literals:
   status: hasFix
-LintCode.prefer_interpolation_to_compose_strings:
+prefer_interpolation_to_compose_strings:
   status: hasFix
-LintCode.prefer_is_empty_always_false:
+prefer_is_empty_always_false:
   status: hasFix
-LintCode.prefer_is_empty_always_true:
+prefer_is_empty_always_true:
   status: hasFix
-LintCode.prefer_is_empty_use_is_empty:
+prefer_is_empty_use_is_empty:
   status: hasFix
-LintCode.prefer_is_empty_use_is_not_empty:
+prefer_is_empty_use_is_not_empty:
   status: hasFix
-LintCode.prefer_is_not_empty:
+prefer_is_not_empty:
   status: hasFix
-LintCode.prefer_is_not_operator:
+prefer_is_not_operator:
   status: hasFix
-LintCode.prefer_iterable_whereType:
+prefer_iterable_whereType:
   status: hasFix
-LintCode.prefer_mixin:
+prefer_mixin:
   status: needsFix
   notes: |-
     The fix is to either rewrite the class as a mixin or add the mixin modifier.
-LintCode.prefer_null_aware_method_calls:
+prefer_null_aware_method_calls:
   status: needsFix
   notes: |-
     The fix is to rewrite the invocation to use `?.`.
-LintCode.prefer_null_aware_operators:
+prefer_null_aware_operators:
   status: hasFix
-LintCode.prefer_relative_imports:
+prefer_relative_imports:
   status: hasFix
-LintCode.prefer_single_quotes:
+prefer_single_quotes:
   status: hasFix
-LintCode.prefer_spread_collections:
+prefer_spread_collections:
   status: hasFix
-LintCode.prefer_typing_uninitialized_variables_for_field:
+prefer_typing_uninitialized_variables_for_field:
   status: hasFix
-LintCode.prefer_typing_uninitialized_variables_for_local_variable:
+prefer_typing_uninitialized_variables_for_local_variable:
   status: hasFix
-LintCode.prefer_void_to_null:
+prefer_void_to_null:
   status: hasFix
-LintCode.provide_deprecation_message:
+provide_deprecation_message:
   status: noFix
   notes: |-
     Theoretically we could identify common patterns of messages in doc comments
     and move them into the annotation, but we'll never recognize all of the
     possible patterns.
-LintCode.public_member_api_docs:
+public_member_api_docs:
   status: noFix
-LintCode.recursive_getters:
+recursive_getters:
   status: noFix
-LintCode.removed_lint:
-  status: noFix
-LintCode.remove_deprecations_in_breaking_versions:
+remove_deprecations_in_breaking_versions:
   status: needsFix
   notes: |-
     We can implement the fixes indicated in the messages.yaml.
-LintCode.require_trailing_commas:
+require_trailing_commas:
   status: hasFix
-LintCode.secure_pubspec_urls:
+secure_pubspec_urls:
   status: noFix
-LintCode.sized_box_for_whitespace:
+sized_box_for_whitespace:
   status: hasFix
-LintCode.sized_box_shrink_expand:
+sized_box_shrink_expand:
   status: needsFix
   notes: |-
     The fix is to invoke a different constructor.
-LintCode.slash_for_doc_comments:
+slash_for_doc_comments:
   status: hasFix
-LintCode.sort_child_properties_last:
+sort_child_properties_last:
   status: hasFix
-LintCode.sort_constructors_first:
+sort_constructors_first:
   status: hasFix
-LintCode.sort_pub_dependencies:
+sort_pub_dependencies:
   status: needsFix
-LintCode.sort_unnamed_constructors_first:
+sort_unnamed_constructors_first:
   status: hasFix
-LintCode.specify_nonobvious_local_variable_types:
+specify_nonobvious_local_variable_types:
   status: hasFix
-LintCode.specify_nonobvious_property_types:
+specify_nonobvious_property_types:
   status: hasFix
-LintCode.strict_top_level_inference_add_type:
+strict_top_level_inference_add_type:
   status: hasFix
-LintCode.strict_top_level_inference_replace_keyword:
+strict_top_level_inference_replace_keyword:
   status: noFix
   notes: |-
     Conceivably for variable declarations we can search some space (like the
     library or the compilation unit) for what values are assigned, and suggest
     the LUB of those value(s)' type(s).
-LintCode.strict_top_level_inference_split_to_types:
+strict_top_level_inference_split_to_types:
   status: noFix
   notes: |-
     Conceivably for variable declarations we can search some space (like the
     library or the compilation unit) for what values are assigned, and suggest
     the LUB of those value(s)' type(s).
-LintCode.switch_on_type:
+switch_on_type:
   status: noFix
-LintCode.test_types_in_equals:
+test_types_in_equals:
   status: noFix
-LintCode.throw_in_finally:
+throw_in_finally:
   status: noFix
-LintCode.tighten_type_of_initializing_formals:
+tighten_type_of_initializing_formals:
   status: needsFix
-LintCode.type_annotate_public_apis:
+type_annotate_public_apis:
   status: hasFix
-LintCode.type_init_formals:
+type_init_formals:
   status: hasFix
-LintCode.type_literal_in_constant_pattern:
+type_literal_in_constant_pattern:
   status: hasFix
-LintCode.unawaited_futures:
+unawaited_futures:
   status: hasFix
-LintCode.unintended_html_in_doc_comment:
+unintended_html_in_doc_comment:
   status: needsFix
   notes: |-
     The fix is to encode the angle brackets.
-LintCode.unnecessary_async:
+unnecessary_async:
   status: hasFix
-LintCode.unnecessary_await_in_return:
+unnecessary_await_in_return:
   status: hasFix
-LintCode.unnecessary_brace_in_string_interps:
+unnecessary_brace_in_string_interps:
   status: hasFix
-LintCode.unnecessary_breaks:
+unnecessary_breaks:
   status: hasFix
-LintCode.unnecessary_const:
+unnecessary_const:
   status: hasFix
-LintCode.unnecessary_constructor_name:
+unnecessary_constructor_name:
   status: hasFix
-LintCode.unnecessary_final_with_type:
+unnecessary_final_with_type:
   status: hasFix
-LintCode.unnecessary_final_without_type:
+unnecessary_final_without_type:
   status: hasFix
-LintCode.unnecessary_getters_setters:
+unnecessary_getters_setters:
   status: hasFix
-LintCode.unnecessary_ignore:
+unnecessary_ignore:
   status: hasFix
-LintCode.unnecessary_ignore_file:
+unnecessary_ignore_file:
   status: hasFix
-LintCode.unnecessary_ignore_name:
+unnecessary_ignore_name:
   status: hasFix
-LintCode.unnecessary_ignore_name_file:
+unnecessary_ignore_name_file:
   status: hasFix
-LintCode.unnecessary_lambdas:
+unnecessary_lambdas:
   status: hasFix
-LintCode.unnecessary_late:
+unnecessary_late:
   status: hasFix
-LintCode.unnecessary_library_directive:
+unnecessary_library_directive:
   status: hasFix
-LintCode.unnecessary_library_name:
+unnecessary_library_name:
   status: hasFix
-LintCode.unnecessary_new:
+unnecessary_new:
   status: hasFix
-LintCode.no_wildcard_variable_uses:
+no_wildcard_variable_uses:
   status: needsEvaluation
-LintCode.unnecessary_null_aware_assignments:
+unnecessary_null_aware_assignments:
   status: hasFix
-LintCode.unnecessary_null_aware_operator_on_extension_on_nullable:
+unnecessary_null_aware_operator_on_extension_on_nullable:
   status: needsFix
-LintCode.unnecessary_null_checks:
+unnecessary_null_checks:
   status: hasFix
-LintCode.unnecessary_null_in_if_null_operators:
+unnecessary_null_in_if_null_operators:
   status: hasFix
-LintCode.unnecessary_nullable_for_final_variable_declarations:
+unnecessary_nullable_for_final_variable_declarations:
   status: hasFix
-LintCode.unnecessary_overrides:
+unnecessary_overrides:
   status: hasFix
-LintCode.unnecessary_parenthesis:
+unnecessary_parenthesis:
   status: hasFix
-LintCode.unnecessary_raw_strings:
+unnecessary_raw_strings:
   status: hasFix
-LintCode.unnecessary_statements:
+unnecessary_statements:
   status: noFix
-LintCode.unnecessary_string_escapes:
+unnecessary_string_escapes:
   status: hasFix
-LintCode.unnecessary_string_interpolations:
+unnecessary_string_interpolations:
   status: hasFix
-LintCode.unnecessary_this:
+unnecessary_this:
   status: hasFix
-LintCode.unnecessary_to_list_in_spreads:
+unnecessary_to_list_in_spreads:
   status: hasFix
-LintCode.unnecessary_unawaited:
+unnecessary_unawaited:
   status: hasFix
-LintCode.unnecessary_underscores:
+unnecessary_underscores:
   status: hasFix
-LintCode.unreachable_from_main:
+unreachable_from_main:
   status: hasFix
-LintCode.unrelated_type_equality_checks_in_expression:
+unrelated_type_equality_checks_in_expression:
   status: needsEvaluation
-LintCode.unrelated_type_equality_checks_in_pattern:
+unrelated_type_equality_checks_in_pattern:
   status: needsEvaluation
-LintCode.unsafe_variance:
+unsafe_variance:
   status: noFix
   notes: |-
     A type like `X Function([X])` could be replaced by `X Function()`,
     or by `X Function([Never])`, or by `Function`, depending on the
     situation and the preferences of the developer. There is no
     universally applicable fix.
-LintCode.use_build_context_synchronously_async_use:
+use_build_context_synchronously_async_use:
   status: noFix
-LintCode.use_build_context_synchronously_wrong_mounted:
+use_build_context_synchronously_wrong_mounted:
   status: needsFix
   notes: |-
     We could have a fix that would replace a mounted check on the wrong element
     to a mounted check on the right element.
-LintCode.use_colored_box:
+use_colored_box:
   status: hasFix
-LintCode.use_decorated_box:
+use_decorated_box:
   status: hasFix
-LintCode.use_enums:
+use_enums:
   status: hasFix
-LintCode.use_full_hex_values_for_flutter_colors:
+use_full_hex_values_for_flutter_colors:
   status: hasFix
-LintCode.use_function_type_syntax_for_parameters:
+use_function_type_syntax_for_parameters:
   status: hasFix
-LintCode.use_if_null_to_convert_nulls_to_bools:
+use_if_null_to_convert_nulls_to_bools:
   status: hasFix
-LintCode.use_is_even_rather_than_modulo:
+use_is_even_rather_than_modulo:
   status: needsFix
-LintCode.use_key_in_widget_constructors:
+use_key_in_widget_constructors:
   status: hasFix
-LintCode.use_late_for_private_fields_and_variables:
+use_late_for_private_fields_and_variables:
   status: needsFix
-LintCode.use_named_constants:
+use_named_constants:
   status: hasFix
-LintCode.use_null_aware_elements:
+use_null_aware_elements:
   status: hasFix
-LintCode.use_raw_strings:
+use_raw_strings:
   status: hasFix
-LintCode.use_rethrow_when_possible:
+use_rethrow_when_possible:
   status: hasFix
-LintCode.use_setters_to_change_properties:
+use_setters_to_change_properties:
   status: noFix
   notes: |-
     Theoretically we could rewrite the method to a setter, but that would
     require a refactoring.
-LintCode.use_string_buffers:
+use_string_buffers:
   status: needsFix
   notes: |-
     It isn't clear that this occurs often enough to justify the cost.
-LintCode.use_string_in_part_of_directives:
+use_string_in_part_of_directives:
   status: hasFix
-LintCode.use_test_throws_matchers:
+use_test_throws_matchers:
   status: needsFix
-LintCode.use_super_parameters_multiple:
+use_super_parameters_multiple:
   status: hasFix
-LintCode.use_super_parameters_single:
+use_super_parameters_single:
   status: hasFix
-LintCode.use_to_and_as_if_applicable:
+use_to_and_as_if_applicable:
   status: noFix
   notes: |-
     This would require renaming the method, which is a refactoring.
-LintCode.use_truncating_division:
+use_truncating_division:
   status: hasFix
-LintCode.valid_regexps:
+valid_regexps:
   status: noFix
-LintCode.void_checks:
+void_checks:
   status: noFix
-ManifestWarningCode.CAMERA_PERMISSIONS_INCOMPATIBLE:
+CAMERA_PERMISSIONS_INCOMPATIBLE:
   status: noFix
-ManifestWarningCode.NO_TOUCHSCREEN_FEATURE:
+NO_TOUCHSCREEN_FEATURE:
   status: noFix
-ManifestWarningCode.NON_RESIZABLE_ACTIVITY:
+NON_RESIZABLE_ACTIVITY:
   status: noFix
-ManifestWarningCode.PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE:
+PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE:
   status: noFix
-ManifestWarningCode.SETTING_ORIENTATION_ON_ACTIVITY:
+SETTING_ORIENTATION_ON_ACTIVITY:
   status: noFix
-ManifestWarningCode.UNSUPPORTED_CHROME_OS_FEATURE:
+UNSUPPORTED_CHROME_OS_FEATURE:
   status: noFix
-ManifestWarningCode.UNSUPPORTED_CHROME_OS_HARDWARE:
+UNSUPPORTED_CHROME_OS_HARDWARE:
   status: noFix
-ParserErrorCode.ABSTRACT_CLASS_MEMBER:
+ABSTRACT_CLASS_MEMBER:
   status: hasFix
-ParserErrorCode.ABSTRACT_EXTERNAL_FIELD:
+ABSTRACT_EXTERNAL_FIELD:
   status: needsFix
   notes: |-
     Remove either the `abstract` or the `external` keyword.
-ParserErrorCode.ABSTRACT_FINAL_BASE_CLASS:
+ABSTRACT_FINAL_BASE_CLASS:
   status: needsFix
   notes: |-
     Remove either the `final` or `base` keyword.
-ParserErrorCode.ABSTRACT_FINAL_INTERFACE_CLASS:
+ABSTRACT_FINAL_INTERFACE_CLASS:
   status: needsFix
   notes: |-
     Remove either the `final` or `interface` keyword.
-ParserErrorCode.ABSTRACT_LATE_FIELD:
+ABSTRACT_LATE_FIELD:
   status: needsFix
   notes: |-
     Remove either the `abstract` or the `late` keyword.
-ParserErrorCode.ABSTRACT_SEALED_CLASS:
+ABSTRACT_SEALED_CLASS:
   status: needsFix
   notes: |-
     Remove either the `abstract` or the `sealed` keyword.
-ParserErrorCode.ABSTRACT_STATIC_FIELD:
+ABSTRACT_STATIC_FIELD:
   status: hasFix
-ParserErrorCode.ABSTRACT_STATIC_METHOD:
+ABSTRACT_STATIC_METHOD:
   status: hasFix
-ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT:
+ANNOTATION_ON_TYPE_ARGUMENT:
   status: needsFix
   notes: |-
     Remove the annotation.
-ParserErrorCode.ANNOTATION_SPACE_BEFORE_PARENTHESIS:
+ANNOTATION_SPACE_BEFORE_PARENTHESIS:
   status: needsFix
   notes: |-
     Remove the extra spaces
-ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS:
+ANNOTATION_WITH_TYPE_ARGUMENTS:
   status: needsFix
   notes: |-
     Remove the type arguments.
-ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED:
+ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED:
   status: needsFix
   notes: |-
     Add the parens.
-ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER:
+ASYNC_KEYWORD_USED_AS_IDENTIFIER:
   status: noFix
-ParserErrorCode.BASE_ENUM:
+BASE_ENUM:
   status: needsEvaluation
-ParserErrorCode.BINARY_OPERATOR_WRITTEN_OUT:
+BINARY_OPERATOR_WRITTEN_OUT:
   status: needsFix
   notes: |-
     Replace with the real operand.
-ParserErrorCode.BREAK_OUTSIDE_OF_LOOP:
+BREAK_OUTSIDE_OF_LOOP:
   status: noFix
-ParserErrorCode.CATCH_SYNTAX:
+CATCH_SYNTAX:
   status: needsFix
   notes: |-
     Add `(exception)`. (The longer form is suggested as a learning aid.)
-ParserErrorCode.CATCH_SYNTAX_EXTRA_PARAMETERS:
+CATCH_SYNTAX_EXTRA_PARAMETERS:
   status: noFix
-ParserErrorCode.CLASS_IN_CLASS:
+CLASS_IN_CLASS:
   status: needsFix
   notes: |-
     Move the inner class to the top-level.
-ParserErrorCode.COLON_IN_PLACE_OF_IN:
+COLON_IN_PLACE_OF_IN:
   status: hasFix
-ParserErrorCode.CONFLICTING_MODIFIERS:
+CONFLICTING_MODIFIERS:
   status: needsFix
   notes: |-
     Remove either the left or right modifier.
-ParserErrorCode.CONST_AND_FINAL:
+CONST_AND_FINAL:
   status: needsFix
   notes: |-
     Remove either `const` or `final`.
-ParserErrorCode.CONST_CLASS:
+CONST_CLASS:
   status: hasFix
-ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY:
+CONST_CONSTRUCTOR_WITH_BODY:
   status: noFix
-ParserErrorCode.CONST_FACTORY:
+CONST_FACTORY:
   status: hasFix
-ParserErrorCode.CONST_METHOD:
+CONST_METHOD:
   status: hasFix
-ParserErrorCode.CONST_WITHOUT_PRIMARY_CONSTRUCTOR:
+CONST_WITHOUT_PRIMARY_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove the keyword.
     Add a primary constructor.
-ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE:
+CONSTRUCTOR_WITH_RETURN_TYPE:
   status: needsFix
   notes: |-
     Remove the return type
-ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS:
+CONSTRUCTOR_WITH_TYPE_ARGUMENTS:
   status: needsFix
   notes: |-
     Move the type arguments to after the class name.
   since: ~2.15
-ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP:
+CONTINUE_OUTSIDE_OF_LOOP:
   status: noFix
-ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE:
+CONTINUE_WITHOUT_LABEL_IN_CASE:
   status: needsFix
   notes: |-
     Suggest each of the labels that are valid.
-ParserErrorCode.COVARIANT_AND_STATIC:
+COVARIANT_AND_STATIC:
   status: needsFix
   notes: |-
     Remove either `covariant` or `static`.
-ParserErrorCode.COVARIANT_CONSTRUCTOR:
+COVARIANT_CONSTRUCTOR:
   status: noFix
   notes: |-
     This error code is currently unreported and constructors
     are treated the same as members (see `COVARIANT_MEMBER`).
-ParserErrorCode.COVARIANT_MEMBER:
+COVARIANT_MEMBER:
   status: hasFix
-ParserErrorCode.DEFAULT_IN_SWITCH_EXPRESSION:
+DEFAULT_IN_SWITCH_EXPRESSION:
   status: hasFix
-ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE:
+DEFAULT_VALUE_IN_FUNCTION_TYPE:
   status: needsFix
   notes: |-
     Remove the default value.
-ParserErrorCode.DEFERRED_AFTER_PREFIX:
+DEFERRED_AFTER_PREFIX:
   status: needsFix
   notes: |-
     Move the `deferred` keyword before the prefix.
-ParserErrorCode.DIRECTIVE_AFTER_DECLARATION:
+DIRECTIVE_AFTER_DECLARATION:
   status: needsFix
   notes: |-
     Move the directive to the directive section.
-ParserErrorCode.DUPLICATE_DEFERRED:
+DUPLICATE_DEFERRED:
   status: needsFix
   notes: |-
     Remove the second `deferred`.
-ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT:
+DUPLICATE_LABEL_IN_SWITCH_STATEMENT:
   status: noFix
-ParserErrorCode.DUPLICATE_PREFIX:
+DUPLICATE_PREFIX:
   status: needsFix
   notes: |-
     Remove the duplicate.
-ParserErrorCode.DUPLICATED_MODIFIER:
+DUPLICATED_MODIFIER:
   status: hasFix
-ParserErrorCode.EMPTY_ENUM_BODY:
+EMPTY_ENUM_BODY:
   status: noFix
   notes: |-
     We can't guess at the names or number of the enum constants that should be
     added.
-ParserErrorCode.EMPTY_RECORD_LITERAL_WITH_COMMA:
+EMPTY_RECORD_LITERAL_WITH_COMMA:
   status: hasFix
-ParserErrorCode.EMPTY_RECORD_TYPE_NAMED_FIELDS_LIST:
+EMPTY_RECORD_TYPE_NAMED_FIELDS_LIST:
   status: noFix
   notes: |-
     It's likely that the user just hasn't provided a named field yet, and
     offering to remove the braces would be counter-productive.
-ParserErrorCode.EMPTY_RECORD_TYPE_WITH_COMMA:
+EMPTY_RECORD_TYPE_WITH_COMMA:
   status: hasFix
-ParserErrorCode.ENUM_IN_CLASS:
+ENUM_IN_CLASS:
   status: needsFix
   notes: |-
     Move the nested enum to the top level.
-ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND:
+EQUALITY_CANNOT_BE_EQUALITY_OPERAND:
   status: noFix
-ParserErrorCode.EXPECTED_CASE_OR_DEFAULT:
+EXPECTED_CASE_OR_DEFAULT:
   status: noFix
-ParserErrorCode.EXPECTED_CATCH_CLAUSE_BODY:
+EXPECTED_CATCH_CLAUSE_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_CLASS_BODY:
+EXPECTED_CLASS_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_CLASS_MEMBER:
+EXPECTED_CLASS_MEMBER:
   status: noFix
-ParserErrorCode.EXPECTED_ELSE_OR_COMMA:
+EXPECTED_ELSE_OR_COMMA:
   status: noFix
-ParserErrorCode.EXPECTED_EXECUTABLE:
+EXPECTED_EXECUTABLE:
   status: noFix
-ParserErrorCode.EXPECTED_EXTENSION_BODY:
+EXPECTED_EXTENSION_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_EXTENSION_TYPE_BODY:
+EXPECTED_EXTENSION_TYPE_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_FINALLY_CLAUSE_BODY:
+EXPECTED_FINALLY_CLAUSE_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD:
+EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD:
   status: noFix
-ParserErrorCode.EXPECTED_INSTEAD:
+EXPECTED_INSTEAD:
   status: noFix
-ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL:
+EXPECTED_LIST_OR_MAP_LITERAL:
   status: needsFix
   notes: |-
     Add the braces or brackets for the literal.
-ParserErrorCode.EXPECTED_MIXIN_BODY:
+EXPECTED_MIXIN_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_NAMED_TYPE_EXTENDS:
+EXPECTED_NAMED_TYPE_EXTENDS:
   status: noFix
-ParserErrorCode.EXPECTED_NAMED_TYPE_IMPLEMENTS:
+EXPECTED_NAMED_TYPE_IMPLEMENTS:
   status: noFix
-ParserErrorCode.EXPECTED_NAMED_TYPE_ON:
+EXPECTED_NAMED_TYPE_ON:
   status: noFix
-ParserErrorCode.EXPECTED_NAMED_TYPE_WITH:
+EXPECTED_NAMED_TYPE_WITH:
   status: noFix
-ParserErrorCode.EXPECTED_REPRESENTATION_FIELD:
+EXPECTED_REPRESENTATION_FIELD:
   status: noFix
-ParserErrorCode.EXPECTED_REPRESENTATION_TYPE:
+EXPECTED_REPRESENTATION_TYPE:
   status: noFix
-ParserErrorCode.EXPECTED_STRING_LITERAL:
+EXPECTED_STRING_LITERAL:
   status: noFix
-ParserErrorCode.EXPECTED_SWITCH_EXPRESSION_BODY:
+EXPECTED_SWITCH_EXPRESSION_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_SWITCH_STATEMENT_BODY:
+EXPECTED_SWITCH_STATEMENT_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_TOKEN:
+EXPECTED_TOKEN:
   status: hasFix
-ParserErrorCode.EXPECTED_TRY_STATEMENT_BODY:
+EXPECTED_TRY_STATEMENT_BODY:
   status: hasFix
-ParserErrorCode.EXPECTED_TYPE_NAME:
+EXPECTED_TYPE_NAME:
   status: noFix
-ParserErrorCode.EXPERIMENT_NOT_ENABLED:
+EXPERIMENT_NOT_ENABLED:
   status: needsFix
   notes: |-
     Update the sdk constraints.
-ParserErrorCode.EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT:
+EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT:
   status: needsFix
   notes: |-
     Add the experiment to the analysis options file.
-ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
+EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
   status: needsFix
   notes: |-
     Move the directive to a valid place.
-ParserErrorCode.EXTENSION_AUGMENTATION_HAS_ON_CLAUSE:
+EXTENSION_AUGMENTATION_HAS_ON_CLAUSE:
   status: hasFix
-ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER:
+EXTENSION_DECLARES_ABSTRACT_MEMBER:
   status: needsFix
   notes: |-
     Provide an empty body for the member.
-ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR:
+EXTENSION_DECLARES_CONSTRUCTOR:
   status: hasFix
-ParserErrorCode.EXTENSION_TYPE_EXTENDS:
+EXTENSION_TYPE_EXTENDS:
   status: needsEvaluation
-ParserErrorCode.EXTENSION_TYPE_WITH:
+EXTENSION_TYPE_WITH:
   status: needsEvaluation
-ParserErrorCode.EXTERNAL_CLASS:
+EXTERNAL_CLASS:
   status: hasFix
-ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS:
+EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS:
   status: needsFix
   notes: |-
     Remove the `external` keyword or remove the initializers.
-ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER:
+EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER:
   status: needsFix
   notes: |-
     Remove the `external` keyword or remove the initializers.
-ParserErrorCode.EXTERNAL_ENUM:
+EXTERNAL_ENUM:
   status: hasFix
-ParserErrorCode.EXTERNAL_FACTORY_REDIRECTION:
+EXTERNAL_FACTORY_REDIRECTION:
   status: needsFix
   notes: |-
     Remove the `external` keyword.
-ParserErrorCode.EXTERNAL_FACTORY_WITH_BODY:
+EXTERNAL_FACTORY_WITH_BODY:
   status: needsFix
   notes: |-
     Remove the `external` keyword, or remove the body of the factory.
-ParserErrorCode.EXTERNAL_GETTER_WITH_BODY:
+EXTERNAL_GETTER_WITH_BODY:
   status: needsFix
   notes: |-
     Remove the `external` keyword, or remove the body.
-ParserErrorCode.EXTERNAL_LATE_FIELD:
+EXTERNAL_LATE_FIELD:
   status: needsFix
   notes: |-
     Remove the `external` keyword.
-ParserErrorCode.EXTERNAL_METHOD_WITH_BODY:
+EXTERNAL_METHOD_WITH_BODY:
   status: needsFix
   notes: |-
     Remove the `external` keyword, or remove the body.
-ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY:
+EXTERNAL_OPERATOR_WITH_BODY:
   status: needsFix
   notes: |-
     Remove the `external` keyword, or remove the body.
-ParserErrorCode.EXTERNAL_SETTER_WITH_BODY:
+EXTERNAL_SETTER_WITH_BODY:
   status: needsFix
   notes: |-
     Remove the `external` keyword, or remove the body.
-ParserErrorCode.EXTERNAL_TYPEDEF:
+EXTERNAL_TYPEDEF:
   status: hasFix
-ParserErrorCode.EXTRANEOUS_MODIFIER:
+EXTRANEOUS_MODIFIER:
   status: hasFix
-ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE:
+EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE:
   status: needsEvaluation
-ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR:
+EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR:
   status: needsEvaluation
-ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION:
+FACTORY_TOP_LEVEL_DECLARATION:
   status: hasFix
-ParserErrorCode.FACTORY_WITH_INITIALIZERS:
+FACTORY_WITH_INITIALIZERS:
   status: needsFix
   notes: |-
     Remove the `factory` keyword or remove the initializers.
-ParserErrorCode.FACTORY_WITHOUT_BODY:
+FACTORY_WITHOUT_BODY:
   status: noFix
-ParserErrorCode.FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS:
+FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS:
   status: noFix
-ParserErrorCode.FINAL_AND_COVARIANT:
+FINAL_AND_COVARIANT:
   status: needsFix
   notes: |-
     Remove either `final` or `covariant`.
-ParserErrorCode.FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER:
+FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER:
   status: needsFix
   notes: |-
     Remove either `final` or `covariant`, or remove the initializer.
-ParserErrorCode.FINAL_AND_VAR:
+FINAL_AND_VAR:
   status: needsFix
   notes: |-
     Remove either `final` or `var`.
-ParserErrorCode.FINAL_CONSTRUCTOR:
+FINAL_CONSTRUCTOR:
   status: hasFix
-ParserErrorCode.FINAL_ENUM:
+FINAL_ENUM:
   status: hasFix
-ParserErrorCode.FINAL_METHOD:
+FINAL_METHOD:
   status: hasFix
-ParserErrorCode.FINAL_MIXIN:
+FINAL_MIXIN:
   status: hasFix
-ParserErrorCode.FINAL_MIXIN_CLASS:
+FINAL_MIXIN_CLASS:
   status: hasFix
-ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR:
+FUNCTION_TYPED_PARAMETER_VAR:
   status: noFix
-ParserErrorCode.GETTER_CONSTRUCTOR:
+GETTER_CONSTRUCTOR:
   status: hasFix
-ParserErrorCode.GETTER_IN_FUNCTION:
+GETTER_IN_FUNCTION:
   status: needsFix
   notes: |-
     Move the getter outside the function, or convert the getter to a function.
-ParserErrorCode.GETTER_WITH_PARAMETERS:
+GETTER_WITH_PARAMETERS:
   status: hasFix
-ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE:
+ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE:
   status: noFix
-ParserErrorCode.ILLEGAL_PATTERN_ASSIGNMENT_VARIABLE_NAME:
+ILLEGAL_PATTERN_ASSIGNMENT_VARIABLE_NAME:
   status: needsEvaluation
-ParserErrorCode.ILLEGAL_PATTERN_IDENTIFIER_NAME:
+ILLEGAL_PATTERN_IDENTIFIER_NAME:
   status: needsEvaluation
-ParserErrorCode.ILLEGAL_PATTERN_VARIABLE_NAME:
+ILLEGAL_PATTERN_VARIABLE_NAME:
   status: needsEvaluation
-ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS:
+IMPLEMENTS_BEFORE_EXTENDS:
   status: needsFix
   notes: |-
     Move the extends clause first.
-ParserErrorCode.IMPLEMENTS_BEFORE_ON:
+IMPLEMENTS_BEFORE_ON:
   status: needsFix
   notes: |-
     Move the implements after the on.
-ParserErrorCode.IMPLEMENTS_BEFORE_WITH:
+IMPLEMENTS_BEFORE_WITH:
   status: needsFix
   notes: |-
     Move the implements after the with.
-ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
+IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE:
   status: needsFix
   notes: |-
     Move the directive to a valid location.
-ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH:
+INITIALIZED_VARIABLE_IN_FOR_EACH:
   status: needsFix
   notes: |-
     Remove the initializer.
-ParserErrorCode.INTERFACE_ENUM:
+INTERFACE_ENUM:
   status: needsEvaluation
-ParserErrorCode.INTERFACE_MIXIN:
+INTERFACE_MIXIN:
   status: hasFix
-ParserErrorCode.INTERFACE_MIXIN_CLASS:
+INTERFACE_MIXIN_CLASS:
   status: hasFix
-ParserErrorCode.INVALID_AWAIT_IN_FOR:
+INVALID_AWAIT_IN_FOR:
   status: noFix
   notes: |-
     We could potentially remove the await, but we can't convert the loop and it
     seems wrong to hide the second option.
-ParserErrorCode.INVALID_CODE_POINT:
+INVALID_CODE_POINT:
   status: noFix
-ParserErrorCode.INVALID_COMMENT_REFERENCE:
+INVALID_COMMENT_REFERENCE:
   status: noFix
-ParserErrorCode.INVALID_CONSTANT_CONST_PREFIX:
+INVALID_CONSTANT_CONST_PREFIX:
   status: needsFix
   notes: |-
     Add parents around the expression following `const`.
-ParserErrorCode.INVALID_CONSTANT_PATTERN_BINARY:
+INVALID_CONSTANT_PATTERN_BINARY:
   status: hasFix
-ParserErrorCode.INVALID_CONSTANT_PATTERN_DUPLICATE_CONST:
+INVALID_CONSTANT_PATTERN_DUPLICATE_CONST:
   status: needsFix
   notes: |-
     Remove all but the first `const`.
-ParserErrorCode.INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL:
+INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL:
   status: noFix
-ParserErrorCode.INVALID_CONSTANT_PATTERN_GENERIC:
+INVALID_CONSTANT_PATTERN_GENERIC:
   status: hasFix
-ParserErrorCode.INVALID_CONSTANT_PATTERN_NEGATION:
+INVALID_CONSTANT_PATTERN_NEGATION:
   status: hasFix
-ParserErrorCode.INVALID_CONSTANT_PATTERN_UNARY:
+INVALID_CONSTANT_PATTERN_UNARY:
   status: needsFix
   notes: |-
     Use `AddConst.new`.
-ParserErrorCode.INVALID_CONSTRUCTOR_NAME:
+INVALID_CONSTRUCTOR_NAME:
   status: noFix
-ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE:
+INVALID_GENERIC_FUNCTION_TYPE:
   status: noFix
-ParserErrorCode.INVALID_HEX_ESCAPE:
+INVALID_HEX_ESCAPE:
   status: noFix
-ParserErrorCode.INVALID_INITIALIZER:
+INVALID_INITIALIZER:
   status: noFix
-ParserErrorCode.INVALID_INSIDE_UNARY_PATTERN:
+INVALID_INSIDE_UNARY_PATTERN:
   status: hasFix
-ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION:
+INVALID_LITERAL_IN_CONFIGURATION:
   status: noFix
-ParserErrorCode.INVALID_OPERATOR:
+INVALID_OPERATOR:
   status: noFix
-ParserErrorCode.INVALID_OPERATOR_FOR_SUPER:
+INVALID_OPERATOR_FOR_SUPER:
   status: noFix
-ParserErrorCode.INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER:
+INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER:
   status: needsFix
   notes: |-
     Replace `?.` with `.`.
-ParserErrorCode.INVALID_STAR_AFTER_ASYNC:
+INVALID_STAR_AFTER_ASYNC:
   status: needsFix
   notes: |-
     Convert to a block body (already an assist, maybe no work needed).
-ParserErrorCode.INVALID_SUPER_IN_INITIALIZER:
+INVALID_SUPER_IN_INITIALIZER:
   status: noFix
-ParserErrorCode.INVALID_SYNC:
+INVALID_SYNC:
   status: needsFix
   notes: |-
     Convert to a block body (already an assist, maybe no work needed).
-ParserErrorCode.INVALID_THIS_IN_INITIALIZER:
+INVALID_THIS_IN_INITIALIZER:
   status: noFix
-ParserErrorCode.INVALID_UNICODE_ESCAPE_STARTED:
+INVALID_UNICODE_ESCAPE_STARTED:
   status: noFix
-ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET:
+INVALID_UNICODE_ESCAPE_U_BRACKET:
   status: noFix
-ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET:
+INVALID_UNICODE_ESCAPE_U_NO_BRACKET:
   status: noFix
-ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED:
+INVALID_UNICODE_ESCAPE_U_STARTED:
   status: noFix
-ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION:
+INVALID_USE_OF_COVARIANT_IN_EXTENSION:
   status: hasFix
-ParserErrorCode.INVALID_USE_OF_IDENTIFIER_AUGMENTED:
+INVALID_USE_OF_IDENTIFIER_AUGMENTED:
   status: noFix
-ParserErrorCode.LATE_PATTERN_VARIABLE_DECLARATION:
+LATE_PATTERN_VARIABLE_DECLARATION:
   status: hasFix
-ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST:
+LIBRARY_DIRECTIVE_NOT_FIRST:
   status: needsFix
   notes: |-
     Move the directive.
-ParserErrorCode.LITERAL_WITH_CLASS_AND_NEW:
+LITERAL_WITH_CLASS_AND_NEW:
   status: needsFix
   notes: |-
     Remove `new List.`.
-ParserErrorCode.LITERAL_WITH_CLASS:
+LITERAL_WITH_CLASS:
   status: needsFix
   notes: |-
     Remove the `List.`.
-ParserErrorCode.LITERAL_WITH_NEW:
+LITERAL_WITH_NEW:
   status: hasFix
-ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER:
+LOCAL_FUNCTION_DECLARATION_MODIFIER:
   status: noFix
-ParserErrorCode.MEMBER_WITH_CLASS_NAME:
+MEMBER_WITH_CLASS_NAME:
   status: noFix
-ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR:
+MISSING_ASSIGNABLE_SELECTOR:
   status: noFix
-ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER:
+MISSING_ASSIGNMENT_IN_INITIALIZER:
   status: needsFix
   notes: |-
     Add the `=`.
-ParserErrorCode.MISSING_CATCH_OR_FINALLY:
+MISSING_CATCH_OR_FINALLY:
   status: noFix
-ParserErrorCode.MISSING_CLOSING_PARENTHESIS:
+MISSING_CLOSING_PARENTHESIS:
   status: noFix
   notes: |-
     The targeted location isn't likely to be the right place for the paren.
-ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE:
+MISSING_CONST_FINAL_VAR_OR_TYPE:
   status: hasFix
-ParserErrorCode.MISSING_ENUM_BODY:
+MISSING_ENUM_BODY:
   status: hasFix
-ParserErrorCode.MISSING_EXPRESSION_IN_INITIALIZER:
+MISSING_EXPRESSION_IN_INITIALIZER:
   status: noFix
-ParserErrorCode.MISSING_EXPRESSION_IN_THROW:
+MISSING_EXPRESSION_IN_THROW:
   status: noFix
-ParserErrorCode.MISSING_FUNCTION_BODY:
+MISSING_FUNCTION_BODY:
   status: hasFix
-ParserErrorCode.MISSING_FUNCTION_KEYWORD:
+MISSING_FUNCTION_KEYWORD:
   status: noFix
-ParserErrorCode.MISSING_FUNCTION_PARAMETERS:
+MISSING_FUNCTION_PARAMETERS:
   status: noFix
-ParserErrorCode.MISSING_GET:
+MISSING_GET:
   status: needsFix
   notes: |-
     Add the `get`.
-ParserErrorCode.MISSING_IDENTIFIER:
+MISSING_IDENTIFIER:
   status: noFix
-ParserErrorCode.MISSING_INITIALIZER:
+MISSING_INITIALIZER:
   status: noFix
-ParserErrorCode.MISSING_KEYWORD_OPERATOR:
+MISSING_KEYWORD_OPERATOR:
   status: needsFix
   notes: |-
     Add `operator`.
-ParserErrorCode.MISSING_METHOD_PARAMETERS:
+MISSING_METHOD_PARAMETERS:
   status: needsFix
   notes: |-
     Add an empty parameter list.
-ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER:
+MISSING_NAME_FOR_NAMED_PARAMETER:
   status: noFix
-ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE:
+MISSING_NAME_IN_LIBRARY_DIRECTIVE:
   status: noFix
-ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE:
+MISSING_NAME_IN_PART_OF_DIRECTIVE:
   status: noFix
-ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT:
+MISSING_PREFIX_IN_DEFERRED_IMPORT:
   status: noFix
-ParserErrorCode.MISSING_PRIMARY_CONSTRUCTOR:
+MISSING_PRIMARY_CONSTRUCTOR:
   status: needsEvaluation
-ParserErrorCode.MISSING_PRIMARY_CONSTRUCTOR_PARAMETERS:
+MISSING_PRIMARY_CONSTRUCTOR_PARAMETERS:
   status: needsEvaluation
-ParserErrorCode.MISSING_STAR_AFTER_SYNC:
+MISSING_STAR_AFTER_SYNC:
   status: needsFix
   notes: |-
     Remove the `sync` keyword. Add a `*`.
-ParserErrorCode.MISSING_STATEMENT:
+MISSING_STATEMENT:
   status: noFix
-ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
+MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
   status: needsFix
   notes: |-
     Add the missing terminator.
-ParserErrorCode.MISSING_TYPEDEF_PARAMETERS:
+MISSING_TYPEDEF_PARAMETERS:
   status: hasFix
-ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH:
+MISSING_VARIABLE_IN_FOR_EACH:
   status: noFix
-ParserErrorCode.MIXED_PARAMETER_GROUPS:
+MIXED_PARAMETER_GROUPS:
   status: noFix
-ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR:
+MIXIN_DECLARES_CONSTRUCTOR:
   status: hasFix
-ParserErrorCode.MIXIN_WITH_CLAUSE:
+MIXIN_WITH_CLAUSE:
   status: needsEvaluation
-ParserErrorCode.MODIFIER_OUT_OF_ORDER:
+MODIFIER_OUT_OF_ORDER:
   status: noFix
   notes: |-
     There isn't enough information to reorder them correctly. Consider making
     this diagnostic less general so that we'll have information for a fix.
-ParserErrorCode.MULTIPLE_CLAUSES:
+MULTIPLE_CLAUSES:
   status: noFix
   notes: |-
     There isn't enough information to know how to fix it. Consider making this
     diagnostic less general so that we'll have information for a fix.
-ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES:
+MULTIPLE_EXTENDS_CLAUSES:
   status: noFix
-ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES:
+MULTIPLE_IMPLEMENTS_CLAUSES:
   status: needsFix
   notes: |-
     Merge the two clauses.
-ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES:
+MULTIPLE_LIBRARY_DIRECTIVES:
   status: noFix
-ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS:
+MULTIPLE_NAMED_PARAMETER_GROUPS:
   status: needsFix
   notes: |-
     Merge the groups.
-ParserErrorCode.MULTIPLE_ON_CLAUSES:
+MULTIPLE_ON_CLAUSES:
   status: needsFix
   notes: |-
     Merge the clauses.
-ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES:
+MULTIPLE_PART_OF_DIRECTIVES:
   status: noFix
-ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
+MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
   status: needsFix
   notes: |-
     Merge the groups.
-ParserErrorCode.MULTIPLE_REPRESENTATION_FIELDS:
+MULTIPLE_REPRESENTATION_FIELDS:
   status: needsFix
   notes: |-
     Remove extra fields.
     Maybe wrap into a record.
-ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH:
+MULTIPLE_VARIABLES_IN_FOR_EACH:
   status: noFix
-ParserErrorCode.MULTIPLE_VARIANCE_MODIFIERS:
+MULTIPLE_VARIANCE_MODIFIERS:
   status: noFix
-ParserErrorCode.MULTIPLE_WITH_CLAUSES:
+MULTIPLE_WITH_CLAUSES:
   status: needsFix
   notes: |-
     Merge the two clauses.
-ParserErrorCode.NAMED_FUNCTION_EXPRESSION:
+NAMED_FUNCTION_EXPRESSION:
   status: needsFix
   notes: |-
     Remove the name.
-ParserErrorCode.NAMED_FUNCTION_TYPE:
+NAMED_FUNCTION_TYPE:
   status: needsFix
   notes: |-
     Replace the name with `Function`.
-ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP:
+NAMED_PARAMETER_OUTSIDE_GROUP:
   status: needsFix
   notes: |-
     Move it inside a group, creating the group if it doesn't already exist.
-ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE:
+NATIVE_CLAUSE_IN_NON_SDK_CODE:
   status: needsFix
   notes: |-
     Remove the native clause.
-ParserErrorCode.NATIVE_CLAUSE_SHOULD_BE_ANNOTATION:
+NATIVE_CLAUSE_SHOULD_BE_ANNOTATION:
   status: noFix
-ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
+NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
   status: needsFix
   notes: |-
     Remove the `native` keyword.
-ParserErrorCode.NON_CONSTRUCTOR_FACTORY:
+NON_CONSTRUCTOR_FACTORY:
   status: needsFix
   notes: |-
     Remove the keyword `factory`.
-ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME:
+NON_IDENTIFIER_LIBRARY_NAME:
   status: noFix
-ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART:
+NON_PART_OF_DIRECTIVE_IN_PART:
   status: needsFix
   notes: |-
     Remove the directive. Move the directive to the library.
-ParserErrorCode.NON_STRING_LITERAL_AS_URI:
+NON_STRING_LITERAL_AS_URI:
   status: noFix
-ParserErrorCode.NON_USER_DEFINABLE_OPERATOR:
+NON_USER_DEFINABLE_OPERATOR:
   status: noFix
-ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS:
+NORMAL_BEFORE_OPTIONAL_PARAMETERS:
   status: needsFix
   notes: |-
     Move the normal parameters before the optional.
-ParserErrorCode.NULL_AWARE_CASCADE_OUT_OF_ORDER:
+NULL_AWARE_CASCADE_OUT_OF_ORDER:
   status: needsFix
   notes: |-
     Move the `?..` to the first operator in the chain.
-ParserErrorCode.OUT_OF_ORDER_CLAUSES:
+OUT_OF_ORDER_CLAUSES:
   status: noFix
   notes: |-
     There isn't enough information for a fix. Consider splitting this diagnostic
     so that each variant has enough information.
-ParserErrorCode.PATTERN_ASSIGNMENT_DECLARES_VARIABLE:
+PATTERN_ASSIGNMENT_DECLARES_VARIABLE:
   status: hasFix
-ParserErrorCode.PART_OF_NAME:
+PART_OF_NAME:
   status: needsFix
   notes: |-
     Convert to URI.
-ParserErrorCode.PATTERN_VARIABLE_DECLARATION_OUTSIDE_FUNCTION_OR_METHOD:
+PATTERN_VARIABLE_DECLARATION_OUTSIDE_FUNCTION_OR_METHOD:
   status: noFix
-ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT:
+POSITIONAL_AFTER_NAMED_ARGUMENT:
   status: noFix
   notes: |-
     This probably isn't produced anymore.
-ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP:
+POSITIONAL_PARAMETER_OUTSIDE_GROUP:
   status: needsFix
   notes: |-
     Add the square brackets.
-ParserErrorCode.PREFIX_AFTER_COMBINATOR:
+PREFIX_AFTER_COMBINATOR:
   status: needsFix
   notes: |-
     Move the prefix before the combinators.
-ParserErrorCode.PRIVATE_OPTIONAL_PARAMETER:
+PRIVATE_OPTIONAL_PARAMETER:
   status: needsFix
   notes: |-
     Remove the underscore
-ParserErrorCode.PRIVATE_NAMED_NON_FIELD_PARAMETER:
+PRIVATE_NAMED_NON_FIELD_PARAMETER:
   status: needsEvaluation
-ParserErrorCode.RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA:
+RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA:
   status: hasFix
-ParserErrorCode.RECORD_TYPE_ONE_POSITIONAL_NO_TRAILING_COMMA:
+RECORD_TYPE_ONE_POSITIONAL_NO_TRAILING_COMMA:
   status: hasFix
-ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY:
+REDIRECTING_CONSTRUCTOR_WITH_BODY:
   status: needsFix
   notes: |-
     Remove the body. Remove the redirection.
-ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR:
+REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove the redirection.
-ParserErrorCode.REPRESENTATION_FIELD_MODIFIER:
+REPRESENTATION_FIELD_MODIFIER:
   status: needsFix
   notes: Remove it.
-ParserErrorCode.REPRESENTATION_FIELD_TRAILING_COMMA:
+REPRESENTATION_FIELD_TRAILING_COMMA:
   status: hasFix
-ParserErrorCode.SEALED_ENUM:
+SEALED_ENUM:
   status: needsEvaluation
-ParserErrorCode.SEALED_MIXIN:
+SEALED_MIXIN:
   status: hasFix
-ParserErrorCode.SEALED_MIXIN_CLASS:
+SEALED_MIXIN_CLASS:
   status: hasFix
-ParserErrorCode.SETTER_CONSTRUCTOR:
+SETTER_CONSTRUCTOR:
   status: hasFix
-ParserErrorCode.SETTER_IN_FUNCTION:
+SETTER_IN_FUNCTION:
   status: needsFix
   notes: |-
     Move the setter outside the function. Convert the setter to a function.
-ParserErrorCode.STACK_OVERFLOW:
+STACK_OVERFLOW:
   status: noFix
-ParserErrorCode.STATIC_CONSTRUCTOR:
+STATIC_CONSTRUCTOR:
   status: hasFix
-ParserErrorCode.STATIC_GETTER_WITHOUT_BODY:
+STATIC_GETTER_WITHOUT_BODY:
   status: hasFix
-ParserErrorCode.STATIC_OPERATOR:
+STATIC_OPERATOR:
   status: hasFix
-ParserErrorCode.STATIC_SETTER_WITHOUT_BODY:
+STATIC_SETTER_WITHOUT_BODY:
   status: hasFix
-ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE:
+SWITCH_HAS_CASE_AFTER_DEFAULT_CASE:
   status: needsFix
   notes: |-
     Move the default case to the end.
-ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES:
+SWITCH_HAS_MULTIPLE_DEFAULT_CASES:
   status: needsFix
   notes: |-
     Merge the bodies.
-ParserErrorCode.TOP_LEVEL_OPERATOR:
+TOP_LEVEL_OPERATOR:
   status: noFix
-ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE:
+TYPE_ARGUMENTS_ON_TYPE_VARIABLE:
   status: needsFix
   notes: |-
     Remove the type arguments
-ParserErrorCode.TYPE_BEFORE_FACTORY:
+TYPE_BEFORE_FACTORY:
   status: needsFix
   notes: |-
     Move the `factory` before the type.
-ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR:
+TYPE_PARAMETER_ON_CONSTRUCTOR:
   status: needsFix
   notes: |-
     Remove the type parameters.
-ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR:
+TYPE_PARAMETER_ON_OPERATOR:
   status: needsFix
   notes: |-
     Remove the type parameters.
-ParserErrorCode.TYPEDEF_IN_CLASS:
+TYPEDEF_IN_CLASS:
   status: needsFix
   notes: |-
     Move the typedef to the top level.
-ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
+UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
   status: needsFix
   notes: |-
     Remove the terminator.
-ParserErrorCode.UNEXPECTED_TOKEN:
+UNEXPECTED_TOKEN:
   status: noFix
-ParserErrorCode.UNEXPECTED_TOKENS:
+UNEXPECTED_TOKENS:
   status: noFix
-ParserErrorCode.VAR_AND_TYPE:
+VAR_AND_TYPE:
   status: hasFix
-ParserErrorCode.VAR_AS_TYPE_NAME:
+VAR_AS_TYPE_NAME:
   status: hasFix
-ParserErrorCode.VAR_CLASS:
+VAR_CLASS:
   status: needsFix
   notes: |-
     Remove `var`.
-ParserErrorCode.VAR_ENUM:
+VAR_ENUM:
   status: needsFix
   notes: |-
     Remove `var`.
-ParserErrorCode.VAR_RETURN_TYPE:
+VAR_RETURN_TYPE:
   status: hasFix
-ParserErrorCode.VAR_TYPEDEF:
+VAR_TYPEDEF:
   status: needsFix
   notes: |-
     Remove `var`.
-ParserErrorCode.VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT:
+VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT:
   status: hasFix
-ParserErrorCode.VOID_WITH_TYPE_ARGUMENTS:
+VOID_WITH_TYPE_ARGUMENTS:
   status: needsFix
   notes: |-
     Remove the type arguments.
-ParserErrorCode.WITH_BEFORE_EXTENDS:
+WITH_BEFORE_EXTENDS:
   status: needsFix
   notes: |-
     Move the extends clause.
-ParserErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER:
+WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER:
   status: needsFix
-ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
+WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
   status: hasFix
-ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP:
+WRONG_TERMINATOR_FOR_PARAMETER_GROUP:
   status: needsFix
   notes: |-
     Replace the terminator with the correct terminator.
-PubspecWarningCode.ASSET_DOES_NOT_EXIST:
+ASSET_DOES_NOT_EXIST:
   status: noFix
   since: ~2.15
-PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST:
+ASSET_DIRECTORY_DOES_NOT_EXIST:
   status: noFix
   since: ~2.15
   notes: |-
     Theoretically we could offer to create the directory, but I suspect that
     this occurs more frequently as a result of mistyping the directory path.
-PubspecWarningCode.ASSET_FIELD_NOT_LIST:
+ASSET_FIELD_NOT_LIST:
   status: noFix
   since: ~2.15
-PubspecWarningCode.ASSET_MISSING_PATH:
+ASSET_MISSING_PATH:
   status: needsFix
   notes: We could add a path field with a blank value.
-PubspecWarningCode.ASSET_NOT_STRING:
+ASSET_NOT_STRING:
   status: noFix
   since: ~2.15
-PubspecWarningCode.ASSET_NOT_STRING_OR_MAP:
+ASSET_NOT_STRING_OR_MAP:
   status: noFix
-PubspecWarningCode.ASSET_PATH_NOT_STRING:
+ASSET_PATH_NOT_STRING:
   status: noFix
-PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP:
+DEPENDENCIES_FIELD_NOT_MAP:
   status: noFix
   since: ~2.15
-PubspecWarningCode.DEPRECATED_FIELD:
+DEPRECATED_FIELD:
   status: needsFix
   since: ~2.15
-PubspecWarningCode.FLUTTER_FIELD_NOT_MAP:
+FLUTTER_FIELD_NOT_MAP:
   status: noFix
   since: ~2.15
-PubspecWarningCode.INVALID_DEPENDENCY:
+INVALID_DEPENDENCY:
   status: noFix
-PubspecWarningCode.INVALID_PLATFORMS_FIELD:
+INVALID_PLATFORMS_FIELD:
   status: needsEvaluation
-PubspecWarningCode.MISSING_DEPENDENCY:
+MISSING_DEPENDENCY:
   status: hasFix
-PubspecWarningCode.MISSING_NAME:
+MISSING_NAME:
   status: hasFix
-PubspecWarningCode.NAME_NOT_STRING:
+NAME_NOT_STRING:
   status: noFix
   since: ~2.15
-PubspecWarningCode.PATH_DOES_NOT_EXIST:
+PATH_DOES_NOT_EXIST:
   status: noFix
-PubspecWarningCode.PATH_NOT_POSIX:
+PATH_NOT_POSIX:
   status: needsFix
   since: ~2.15
   notes: |-
     If the path is a windows path, then we should be able to convert it.
-PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST:
+PATH_PUBSPEC_DOES_NOT_EXIST:
   status: noFix
-PubspecWarningCode.PLATFORM_VALUE_DISALLOWED:
+PLATFORM_VALUE_DISALLOWED:
   status: needsEvaluation
-PubspecWarningCode.UNKNOWN_PLATFORM:
+UNKNOWN_PLATFORM:
   status: needsEvaluation
-PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY:
+UNNECESSARY_DEV_DEPENDENCY:
   status: needsFix
   since: ~2.15
   notes: |-
     The fix is to remove the dependency
-PubspecWarningCode.WORKSPACE_FIELD_NOT_LIST:
+WORKSPACE_FIELD_NOT_LIST:
   status: needsEvaluation
-PubspecWarningCode.WORKSPACE_VALUE_NOT_STRING:
+WORKSPACE_VALUE_NOT_STRING:
   status: needsEvaluation
-PubspecWarningCode.WORKSPACE_VALUE_NOT_SUBDIRECTORY:
+WORKSPACE_VALUE_NOT_SUBDIRECTORY:
   status: needsEvaluation
-ScannerErrorCode.ENCODING:
+ENCODING:
   status: needsEvaluation
-ScannerErrorCode.ILLEGAL_CHARACTER:
+ILLEGAL_CHARACTER:
   status: noFix
-ScannerErrorCode.MISSING_DIGIT:
+MISSING_DIGIT:
   status: noFix
-ScannerErrorCode.MISSING_HEX_DIGIT:
+MISSING_HEX_DIGIT:
   status: noFix
-ScannerErrorCode.MISSING_QUOTE:
+MISSING_QUOTE:
   status: noFix
-ScannerErrorCode.UNABLE_GET_CONTENT:
+UNABLE_GET_CONTENT:
   status: noFix
-ScannerErrorCode.UNEXPECTED_DOLLAR_IN_STRING:
+UNEXPECTED_DOLLAR_IN_STRING:
   status: noFix
-ScannerErrorCode.UNEXPECTED_SEPARATOR_IN_NUMBER:
+UNEXPECTED_SEPARATOR_IN_NUMBER:
   status: hasFix
-ScannerErrorCode.UNSUPPORTED_OPERATOR:
+UNSUPPORTED_OPERATOR:
   status: noFix
-ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT:
+UNTERMINATED_MULTI_LINE_COMMENT:
   status: noFix
-ScannerErrorCode.UNTERMINATED_STRING_LITERAL:
+UNTERMINATED_STRING_LITERAL:
   status: noFix
-StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION:
+DEAD_NULL_AWARE_EXPRESSION:
   status: hasFix
-StaticWarningCode.INVALID_NULL_AWARE_OPERATOR:
+INVALID_NULL_AWARE_OPERATOR:
   status: hasFix
-StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT:
+INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT:
   status: hasFix
-StaticWarningCode.INVALID_NULL_AWARE_ELEMENT:
+INVALID_NULL_AWARE_ELEMENT:
   status: hasFix
-StaticWarningCode.INVALID_NULL_AWARE_MAP_ENTRY_KEY:
+INVALID_NULL_AWARE_MAP_ENTRY_KEY:
   status: hasFix
-StaticWarningCode.INVALID_NULL_AWARE_MAP_ENTRY_VALUE:
+INVALID_NULL_AWARE_MAP_ENTRY_VALUE:
   status: hasFix
-StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH:
+MISSING_ENUM_CONSTANT_IN_SWITCH:
   status: hasFix
-StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION:
+UNNECESSARY_NON_NULL_ASSERTION:
   status: hasFix
-StaticWarningCode.UNNECESSARY_NULL_ASSERT_PATTERN:
+UNNECESSARY_NULL_ASSERT_PATTERN:
   status: hasFix
-StaticWarningCode.UNNECESSARY_NULL_CHECK_PATTERN:
+UNNECESSARY_NULL_CHECK_PATTERN:
   status: hasFix
-WarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
+ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
   status: noFix
   notes: |-
     Fix depends on user's intent, which can't be known.
-WarningCode.ASSIGNMENT_OF_DO_NOT_STORE:
+ASSIGNMENT_OF_DO_NOT_STORE:
   status: noFix
   notes: |-
     Fix depends on user's intent, which can't be known.
-WarningCode.BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR:
+BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR:
   status: needsFix
-WarningCode.CAST_FROM_NULL_ALWAYS_FAILS:
+CAST_FROM_NULL_ALWAYS_FAILS:
   status: noFix
-WarningCode.CAST_FROM_NULLABLE_ALWAYS_FAILS:
+CAST_FROM_NULLABLE_ALWAYS_FAILS:
   status: noFix
-WarningCode.CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE:
+CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE:
   status: noFix
-WarningCode.BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
+BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
   status: hasFix
-WarningCode.DEAD_CODE:
+DEAD_CODE:
   status: hasFix
-WarningCode.DEAD_CODE_CATCH_FOLLOWING_CATCH:
+DEAD_CODE_CATCH_FOLLOWING_CATCH:
   status: hasFix
-WarningCode.DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER:
+DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER:
   status: hasFix
-WarningCode.DEAD_CODE_ON_CATCH_SUBTYPE:
+DEAD_CODE_ON_CATCH_SUBTYPE:
   status: hasFix
-WarningCode.DEPRECATED_EXPORT_USE:
+DEPRECATED_EXPORT_USE:
   status: hasFix
   notes: |-
     A data driven fix using `replacedBy`.
-WarningCode.DEPRECATED_EXTEND:
+DEPRECATED_EXTEND:
   status: hasFix
-WarningCode.DEPRECATED_EXTENDS_FUNCTION:
+DEPRECATED_EXTENDS_FUNCTION:
   status: needsFix
   notes: |-
     The fix is to remove the class from the implements list.
-WarningCode.DEPRECATED_IMPLEMENT:
+DEPRECATED_IMPLEMENT:
   status: hasFix
-WarningCode.DEPRECATED_IMPLEMENTS_FUNCTION:
+DEPRECATED_IMPLEMENTS_FUNCTION:
   status: hasFix
-WarningCode.DEPRECATED_INSTANTIATE:
+DEPRECATED_INSTANTIATE:
   status: noFix
   notes: |-
     The only fix would be to delete the whole instance creation expression, or
     follow the directions in the deprecation message.
-WarningCode.DEPRECATED_MIXIN:
+DEPRECATED_MIXIN:
   status: needsFix
-WarningCode.DEPRECATED_MIXIN_FUNCTION:
+DEPRECATED_MIXIN_FUNCTION:
   status: needsFix
   notes: |-
     The fix is to remove `Function` from where it's referenced.
-WarningCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE:
+DEPRECATED_NEW_IN_COMMENT_REFERENCE:
   status: hasFix
-WarningCode.DEPRECATED_OPTIONAL:
+DEPRECATED_OPTIONAL:
   status: needsEvaluation
-WarningCode.DEPRECATED_SUBCLASS:
+DEPRECATED_SUBCLASS:
   status: hasFix
-WarningCode.DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT:
+DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT:
   status: noFix
-WarningCode.DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS:
+DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS:
   status: needsFix
   notes: |-
     The fix is to remove the extra arguments.
-WarningCode.DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT:
+DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT:
   status: needsFix
   notes: |-
     The fix is to remove the unexpected named argument.
-WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_BRACE:
+DOC_DIRECTIVE_MISSING_CLOSING_BRACE:
   status: needsFix
   notes: Add the closing brace at the end of the line.
-WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_TAG:
+DOC_DIRECTIVE_MISSING_CLOSING_TAG:
   status: needsFix
   notes: Add the appropriate closing tag, perhaps on the line just following.
-WarningCode.DOC_DIRECTIVE_MISSING_ONE_ARGUMENT:
+DOC_DIRECTIVE_MISSING_ONE_ARGUMENT:
   status: noFix
-WarningCode.DOC_DIRECTIVE_MISSING_OPENING_TAG:
+DOC_DIRECTIVE_MISSING_OPENING_TAG:
   status: needsFix
   notes: |-
     I can think of two: Offer to insert the appropriate starting tag (maybe
     on the preceding line), and offer to change the end-tag to the start-tag.
-WarningCode.DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS:
+DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS:
   status: noFix
-WarningCode.DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS:
+DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS:
   status: noFix
-WarningCode.DOC_DIRECTIVE_UNKNOWN:
+DOC_DIRECTIVE_UNKNOWN:
   status: noFix
-WarningCode.DOC_IMPORT_CANNOT_BE_DEFERRED:
+DOC_IMPORT_CANNOT_BE_DEFERRED:
   status: needsFix
-WarningCode.DOC_IMPORT_CANNOT_HAVE_COMBINATORS:
+DOC_IMPORT_CANNOT_HAVE_COMBINATORS:
   status: needsFix
-WarningCode.DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS:
+DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS:
   status: needsFix
-WarningCode.DOC_IMPORT_CANNOT_HAVE_PREFIX:
+DOC_IMPORT_CANNOT_HAVE_PREFIX:
   status: needsFix
-WarningCode.DUPLICATE_EXPORT:
+DUPLICATE_EXPORT:
   status: needsFix
   notes: |-
     One fix is to remove the duplicated export.
-WarningCode.DUPLICATE_HIDDEN_NAME:
+DUPLICATE_HIDDEN_NAME:
   status: hasFix
-WarningCode.DUPLICATE_IGNORE:
+DUPLICATE_IGNORE:
   status: needsFix
   notes: |-
     One fix is to remove the duplicated error code.
-WarningCode.DUPLICATE_IMPORT:
+DUPLICATE_IMPORT:
   status: hasFix
-WarningCode.DUPLICATE_SHOWN_NAME:
+DUPLICATE_SHOWN_NAME:
   status: hasFix
-WarningCode.EQUAL_ELEMENTS_IN_SET:
+EQUAL_ELEMENTS_IN_SET:
   status: noFix
   notes: |-
     Fix depends on user's intent, which can't be known.
-WarningCode.EQUAL_KEYS_IN_MAP:
+EQUAL_KEYS_IN_MAP:
   status: noFix
   notes: |-
     Fix depends on user's intent, which can't be known.
-WarningCode.EXPERIMENTAL_MEMBER_USE:
+EXPERIMENTAL_MEMBER_USE:
   status: needsEvaluation
-WarningCode.INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
+INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
   status: noFix
-WarningCode.INFERENCE_FAILURE_ON_FUNCTION_INVOCATION:
+INFERENCE_FAILURE_ON_FUNCTION_INVOCATION:
   status: noFix
-WarningCode.INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE:
+INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE:
   status: noFix
-WarningCode.INFERENCE_FAILURE_ON_GENERIC_INVOCATION:
+INFERENCE_FAILURE_ON_GENERIC_INVOCATION:
   status: noFix
-WarningCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION:
+INFERENCE_FAILURE_ON_INSTANCE_CREATION:
   status: noFix
-WarningCode.INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE:
+INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE:
   status: noFix
-WarningCode.INFERENCE_FAILURE_ON_UNTYPED_PARAMETER:
+INFERENCE_FAILURE_ON_UNTYPED_PARAMETER:
   status: noFix
-WarningCode.INVALID_ANNOTATION_TARGET:
+INVALID_ANNOTATION_TARGET:
   status: hasFix
-WarningCode.INVALID_AWAIT_NOT_REQUIRED_ANNOTATION:
+INVALID_AWAIT_NOT_REQUIRED_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_DEPRECATED_EXTEND_ANNOTATION:
+INVALID_DEPRECATED_EXTEND_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_DEPRECATED_IMPLEMENT_ANNOTATION:
+INVALID_DEPRECATED_IMPLEMENT_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_DEPRECATED_INSTANTIATE_ANNOTATION:
+INVALID_DEPRECATED_INSTANTIATE_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_DEPRECATED_MIXIN_ANNOTATION:
+INVALID_DEPRECATED_MIXIN_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_DEPRECATED_OPTIONAL_ANNOTATION:
+INVALID_DEPRECATED_OPTIONAL_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_DEPRECATED_SUBCLASS_ANNOTATION:
+INVALID_DEPRECATED_SUBCLASS_ANNOTATION:
   status: needsFix
   notes: The fix is to remove the annotation.
-WarningCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT:
+INVALID_EXPORT_OF_INTERNAL_ELEMENT:
   status: needsFix
   notes: |-
     Low priority, because this is likely not encountered often.
 
     The fix is to update the export directive so that the name is no longer
     exported.
-WarningCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
+INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
   status: needsFix
   notes: |-
     Low priority, because this is likely not encountered often and the only fix
@@ -3616,272 +3629,272 @@
 
     The fix is to update the export directive so that the member using the name
     is no longer exported.
-WarningCode.INVALID_FACTORY_METHOD_DECL:
+INVALID_FACTORY_METHOD_DECL:
   status: noFix
-WarningCode.INVALID_FACTORY_METHOD_IMPL:
+INVALID_FACTORY_METHOD_IMPL:
   status: noFix
-WarningCode.INVALID_INTERNAL_ANNOTATION:
+INVALID_INTERNAL_ANNOTATION:
   status: hasFix
-WarningCode.INVALID_LITERAL_ANNOTATION:
+INVALID_LITERAL_ANNOTATION:
   status: hasFix
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
+INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
+INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
+INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
+INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE:
+INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
+INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
+INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
+INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
+INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
   status: needsFix
   notes: |-
     If we can identify enough information to do so, the fix is to rewrite the
     comment into a valid form.
-WarningCode.INVALID_NON_VIRTUAL_ANNOTATION:
+INVALID_NON_VIRTUAL_ANNOTATION:
   status: hasFix
-WarningCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
+INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
   status: noFix
-WarningCode.INVALID_REOPEN_ANNOTATION:
+INVALID_REOPEN_ANNOTATION:
   status: hasFix
-WarningCode.INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER:
+INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER:
   status: needsEvaluation
-WarningCode.INVALID_USE_OF_INTERNAL_MEMBER:
+INVALID_USE_OF_INTERNAL_MEMBER:
   status: noFix
-WarningCode.INVALID_USE_OF_PROTECTED_MEMBER:
+INVALID_USE_OF_PROTECTED_MEMBER:
   status: noFix
-WarningCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER:
+INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER:
   status: noFix
   since: ~2.15
-WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER:
+INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER:
   status: noFix
-WarningCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER:
+INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER:
   status: noFix
-WarningCode.INVALID_WIDGET_PREVIEW_APPLICATION:
+INVALID_WIDGET_PREVIEW_APPLICATION:
   status: needsEvaluation
-WarningCode.INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT:
+INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT:
   status: needsEvaluation
-WarningCode.INVALID_VISIBILITY_ANNOTATION:
+INVALID_VISIBILITY_ANNOTATION:
   status: hasFix
-WarningCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION:
+INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION:
   status: hasFix
-WarningCode.INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION:
+INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION:
   status: needsEvaluation
-WarningCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE:
+MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE:
   status: hasFix
-WarningCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO:
+MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO:
   status: hasFix
-WarningCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS:
+MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS:
   status: hasFix
-WarningCode.MISSING_REQUIRED_PARAM:
+MISSING_REQUIRED_PARAM:
   status: hasFix
-WarningCode.MISSING_REQUIRED_PARAM_WITH_DETAILS:
+MISSING_REQUIRED_PARAM_WITH_DETAILS:
   status: hasFix
-WarningCode.MIXIN_ON_SEALED_CLASS:
+MIXIN_ON_SEALED_CLASS:
   status: noFix
   notes: |-
     `sealed` annotation is likely to be replaced by the `sealed` keyword
     in the next stable release.
-WarningCode.MULTIPLE_COMBINATORS:
+MULTIPLE_COMBINATORS:
   status: hasFix
-WarningCode.MUST_BE_IMMUTABLE:
+MUST_BE_IMMUTABLE:
   status: noFix
-WarningCode.MUST_CALL_SUPER:
+MUST_CALL_SUPER:
   status: hasFix
-WarningCode.NON_CONST_ARGUMENT_FOR_CONST_PARAMETER:
+NON_CONST_ARGUMENT_FOR_CONST_PARAMETER:
   status: needsEvaluation
-WarningCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR:
+NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR:
   status: needsFix
   notes: |-
     The fix is to add `const` before the constructor invocation.
-WarningCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW:
+NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW:
   status: hasFix
-WarningCode.NON_NULLABLE_EQUALS_PARAMETER:
+NON_NULLABLE_EQUALS_PARAMETER:
   status: needsFix
   notes: |-
     The fix is to remove the question mark if the parameter has one (if the
     written type is an alias, it may not).
-WarningCode.NULLABLE_TYPE_IN_CATCH_CLAUSE:
+NULLABLE_TYPE_IN_CATCH_CLAUSE:
   status: hasFix
-WarningCode.NULL_ARGUMENT_TO_NON_NULL_TYPE:
+NULL_ARGUMENT_TO_NON_NULL_TYPE:
   status: noFix
   since: ~2.15
-WarningCode.NULL_CHECK_ALWAYS_FAILS:
+NULL_CHECK_ALWAYS_FAILS:
   status: hasFix
-WarningCode.OVERRIDE_ON_NON_OVERRIDING_FIELD:
+OVERRIDE_ON_NON_OVERRIDING_FIELD:
   status: hasFix
-WarningCode.OVERRIDE_ON_NON_OVERRIDING_GETTER:
+OVERRIDE_ON_NON_OVERRIDING_GETTER:
   status: hasFix
-WarningCode.OVERRIDE_ON_NON_OVERRIDING_METHOD:
+OVERRIDE_ON_NON_OVERRIDING_METHOD:
   status: hasFix
-WarningCode.OVERRIDE_ON_NON_OVERRIDING_SETTER:
+OVERRIDE_ON_NON_OVERRIDING_SETTER:
   status: hasFix
-WarningCode.PATTERN_NEVER_MATCHES_VALUE_TYPE:
+PATTERN_NEVER_MATCHES_VALUE_TYPE:
   status: noFix
-WarningCode.RECEIVER_OF_TYPE_NEVER:
+RECEIVER_OF_TYPE_NEVER:
   status: needsFix
   notes: |-
     We _could_ remove the thing being received (method invocation, etc.)
-WarningCode.REDECLARE_ON_NON_REDECLARING_MEMBER:
+REDECLARE_ON_NON_REDECLARING_MEMBER:
   status: hasFix
-WarningCode.REMOVED_LINT_USE:
+REMOVED_LINT_USE:
   status: needsFix
-WarningCode.REPLACED_LINT_USE:
+REPLACED_LINT_USE:
   status: needsFix
-WarningCode.RETURN_OF_DO_NOT_STORE:
+RETURN_OF_DO_NOT_STORE:
   status: needsFix
   notes: |-
     The fix is to add the annotation to the enclosing function.
-WarningCode.RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR:
+RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR:
   status: noFix
-WarningCode.RETURN_TYPE_INVALID_FOR_CATCH_ERROR:
+RETURN_TYPE_INVALID_FOR_CATCH_ERROR:
   status: noFix
-WarningCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS:
+SDK_VERSION_CONSTRUCTOR_TEAROFFS:
   status: needsFix
   since: 2.15
-WarningCode.SDK_VERSION_GT_GT_GT_OPERATOR:
+SDK_VERSION_GT_GT_GT_OPERATOR:
   status: hasFix
-WarningCode.SDK_VERSION_SINCE:
+SDK_VERSION_SINCE:
   status: needsFix
   notes: |-
     The fix would be to update the SDK constraints. The user would still need to
     run `dart pub` before the diagnostic would go away, and there's a question
     whether a fix that doesn't actually fix the problem is something we want.
-WarningCode.STRICT_RAW_TYPE:
+STRICT_RAW_TYPE:
   status: needsFix
   notes: |-
     One fix would be to add an explicit `<dynamic>`, but we can also provide
     more helpful fixes that pretend inference works the way the user may
     have thought it did. For example in: `List a = <int>[];`, we can add
     `<int>` after `List`.
-WarningCode.SUBTYPE_OF_SEALED_CLASS:
+SUBTYPE_OF_SEALED_CLASS:
   status: needsFix
   notes: |-
     `sealed` annotation is likely to be replaced by the `sealed` keyword
     in the next stable release.
     Remove the sealed class in the `extends` or `implements` clause.
     Use RemoveNameFromDeclarationClause.
-WarningCode.TEXT_DIRECTION_CODE_POINT_IN_COMMENT:
+TEXT_DIRECTION_CODE_POINT_IN_COMMENT:
   status: hasFix
-WarningCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL:
+TEXT_DIRECTION_CODE_POINT_IN_LITERAL:
   status: hasFix
-WarningCode.TYPE_CHECK_IS_NOT_NULL:
+TYPE_CHECK_IS_NOT_NULL:
   status: hasFix
-WarningCode.TYPE_CHECK_IS_NULL:
+TYPE_CHECK_IS_NULL:
   status: hasFix
-WarningCode.UNDEFINED_HIDDEN_NAME:
+UNDEFINED_HIDDEN_NAME:
   status: hasFix
-WarningCode.UNDEFINED_REFERENCED_PARAMETER:
+UNDEFINED_REFERENCED_PARAMETER:
   status: needsFix
   notes: |-
     Can try to find the correct parameter name.
-WarningCode.UNDEFINED_SHOWN_NAME:
+UNDEFINED_SHOWN_NAME:
   status: hasFix
-WarningCode.UNIGNORABLE_IGNORE:
+UNIGNORABLE_IGNORE:
   status: needsFix
   notes: |-
     Remove the ignore comment (or one code in the comment).
-WarningCode.UNNECESSARY_CAST_PATTERN:
+UNNECESSARY_CAST_PATTERN:
   status: needsFix
   notes: |-
     The fix is to remove the cast pattern, assuming that doing so won't produce
     invalid code.
-WarningCode.UNNECESSARY_CAST:
+UNNECESSARY_CAST:
   status: hasFix
-WarningCode.UNNECESSARY_FINAL:
+UNNECESSARY_FINAL:
   status: hasFix
-WarningCode.UNNECESSARY_NAN_COMPARISON_FALSE:
+UNNECESSARY_NAN_COMPARISON_FALSE:
   status: hasFix
   notes: |-
     Add another fix to remove the comparison.
-WarningCode.UNNECESSARY_NAN_COMPARISON_TRUE:
+UNNECESSARY_NAN_COMPARISON_TRUE:
   status: hasFix
   notes: |-
     Add another fix to remove the comparison.
-WarningCode.UNNECESSARY_NO_SUCH_METHOD:
+UNNECESSARY_NO_SUCH_METHOD:
   status: needsFix
   notes: |-
     Remove the noSuchMethod implementation.
-WarningCode.UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_FALSE:
+UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_FALSE:
   status: hasFix
-WarningCode.UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE:
+UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE:
   status: hasFix
-WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE:
+UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE:
   status: hasFix
-WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE:
+UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE:
   status: hasFix
-WarningCode.UNNECESSARY_QUESTION_MARK:
+UNNECESSARY_QUESTION_MARK:
   status: hasFix
-WarningCode.UNNECESSARY_SET_LITERAL:
+UNNECESSARY_SET_LITERAL:
   status: hasFix
-WarningCode.UNNECESSARY_TYPE_CHECK_FALSE:
+UNNECESSARY_TYPE_CHECK_FALSE:
   status: hasFix
-WarningCode.UNNECESSARY_TYPE_CHECK_TRUE:
+UNNECESSARY_TYPE_CHECK_TRUE:
   status: hasFix
-WarningCode.UNNECESSARY_WILDCARD_PATTERN:
+UNNECESSARY_WILDCARD_PATTERN:
   status: hasFix
-WarningCode.UNREACHABLE_SWITCH_CASE:
+UNREACHABLE_SWITCH_CASE:
   status: hasFix
-WarningCode.UNREACHABLE_SWITCH_DEFAULT:
+UNREACHABLE_SWITCH_DEFAULT:
   status: hasFix
-WarningCode.UNUSED_CATCH_CLAUSE:
+UNUSED_CATCH_CLAUSE:
   status: hasFix
-WarningCode.UNUSED_CATCH_STACK:
+UNUSED_CATCH_STACK:
   status: hasFix
-WarningCode.UNUSED_ELEMENT:
+UNUSED_ELEMENT:
   status: hasFix
-WarningCode.UNUSED_ELEMENT_PARAMETER:
+UNUSED_ELEMENT_PARAMETER:
   status: hasFix
-WarningCode.UNUSED_FIELD:
+UNUSED_FIELD:
   status: hasFix
-WarningCode.UNUSED_IMPORT:
+UNUSED_IMPORT:
   status: hasFix
-WarningCode.UNUSED_LABEL:
+UNUSED_LABEL:
   status: hasFix
-WarningCode.UNUSED_LOCAL_VARIABLE:
+UNUSED_LOCAL_VARIABLE:
   status: hasFix
-WarningCode.UNUSED_RESULT:
+UNUSED_RESULT:
   status: noFix
   notes: |-
     There is no predictable common way in which a result _should_ be used.
-WarningCode.UNUSED_RESULT_WITH_MESSAGE:
+UNUSED_RESULT_WITH_MESSAGE:
   status: noFix
   notes: |-
     There is no predictable common way in which a result _should_ be used.
-WarningCode.UNUSED_SHOWN_NAME:
+UNUSED_SHOWN_NAME:
   status: hasFix
-WarningCode.URI_DOES_NOT_EXIST_IN_DOC_IMPORT:
+URI_DOES_NOT_EXIST_IN_DOC_IMPORT:
   status: needsFix
   notes: |-
     The same fix as CompileTimeErrorCode.URI_DOES_NOT_EXIST
diff --git a/pkg/analysis_server/lib/src/services/correction/executable_parameters.dart b/pkg/analysis_server/lib/src/services/correction/executable_parameters.dart
index ba96138..91ec534 100644
--- a/pkg/analysis_server/lib/src/services/correction/executable_parameters.dart
+++ b/pkg/analysis_server/lib/src/services/correction/executable_parameters.dart
@@ -73,9 +73,9 @@
 
   static ExecutableParameters? forInvocation(
     AnalysisSessionHelper sessionHelper,
-    AstNode? invocation,
-  ) {
-    Element? element;
+    AstNode? invocation, {
+    Element? element,
+  }) {
     // This doesn't handle FunctionExpressionInvocation.
     if (invocation is Annotation) {
       element = invocation.element;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index d9b15ad..8fb852d 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -157,7 +157,7 @@
     DartFixKindPriority.standard + 20,
     'Add final initializing formal parameters',
   );
-  static const addInitializingFormalNamesParameters = FixKind(
+  static const addInitializingFormalNamedParameters = FixKind(
     'dart.fix.add.initializingFormalNamedParameters',
     DartFixKindPriority.standard + 21,
     'Add final initializing formal required named parameters',
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
index 93625ab..d48a7f6 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/analysis_options/fix_generator.dart
@@ -18,7 +18,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/source/source_range.dart';
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -31,12 +31,12 @@
 /// The generator used to generate fixes in analysis options files.
 class AnalysisOptionsFixGenerator {
   static const List<DiagnosticCode> codesWithFixes = [
-    AnalysisOptionsWarningCode.deprecatedLint,
-    AnalysisOptionsWarningCode.analysisOptionDeprecatedWithReplacement,
-    AnalysisOptionsWarningCode.duplicateRule,
-    AnalysisOptionsWarningCode.removedLint,
-    AnalysisOptionsWarningCode.undefinedLint,
-    AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
+    diag.deprecatedLint,
+    diag.analysisOptionDeprecatedWithReplacement,
+    diag.duplicateRule,
+    diag.removedLint,
+    diag.undefinedLint,
+    diag.unsupportedOptionWithoutValues,
   ];
 
   /// The resource provider used to access the file system.
@@ -90,8 +90,7 @@
       return fixes;
     }
 
-    if (diagnosticCode ==
-        AnalysisOptionsWarningCode.analysisOptionDeprecatedWithReplacement) {
+    if (diagnosticCode == diag.analysisOptionDeprecatedWithReplacement) {
       var analyzerMap = options['analyzer'];
       if (analyzerMap is! YamlMap) {
         return fixes;
@@ -115,13 +114,12 @@
           strongModeMap,
         );
       }
-    } else if (diagnosticCode == AnalysisOptionsWarningCode.deprecatedLint ||
-        diagnosticCode == AnalysisOptionsWarningCode.duplicateRule ||
-        diagnosticCode == AnalysisOptionsWarningCode.removedLint ||
-        diagnosticCode == AnalysisOptionsWarningCode.undefinedLint) {
+    } else if (diagnosticCode == diag.deprecatedLint ||
+        diagnosticCode == diag.duplicateRule ||
+        diagnosticCode == diag.removedLint ||
+        diagnosticCode == diag.undefinedLint) {
       await _addFix_removeLint(coveringNodePath);
-    } else if (diagnosticCode ==
-        AnalysisOptionsWarningCode.unsupportedOptionWithoutValues) {
+    } else if (diagnosticCode == diag.unsupportedOptionWithoutValues) {
       await _addFix_removeSetting(coveringNodePath);
     }
     return fixes;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
index 5e1f279..877a191 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.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:analysis_server/src/diagnostic.dart' as diag;
 import 'package:analysis_server/src/services/correction/fix/data_driven/accessor.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/expression.dart';
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/variable_scope.dart';
 import 'package:analysis_server/src/services/refactoring/framework/formal_parameter.dart';
 import 'package:analyzer/error/listener.dart';
@@ -86,7 +86,7 @@
         diagnosticReporter.atOffset(
           offset: token.offset + delta,
           length: token.length,
-          diagnosticCode: TransformSetErrorCode.wrongToken,
+          diagnosticCode: diag.wrongToken,
           arguments: ['.', token.kind.displayName],
         );
         return null;
@@ -119,7 +119,7 @@
       diagnosticReporter.atOffset(
         offset: token.offset + delta,
         length: token.length,
-        diagnosticCode: TransformSetErrorCode.unexpectedTransformSetToken,
+        diagnosticCode: diag.unexpectedTransformSetToken,
         arguments: [token.kind.displayName],
       );
       return null;
@@ -157,7 +157,7 @@
       diagnosticReporter.atOffset(
         offset: offset + delta,
         length: length,
-        diagnosticCode: TransformSetErrorCode.missingToken,
+        diagnosticCode: diag.missingToken,
         arguments: [validKindsDisplayString()],
       );
       return null;
@@ -166,7 +166,7 @@
       diagnosticReporter.atOffset(
         offset: token.offset + delta,
         length: token.length,
-        diagnosticCode: TransformSetErrorCode.wrongToken,
+        diagnosticCode: diag.wrongToken,
         arguments: [validKindsDisplayString(), token.kind.displayName],
       );
       return null;
@@ -239,7 +239,7 @@
       diagnosticReporter.atOffset(
         offset: token.offset + delta,
         length: token.length,
-        diagnosticCode: TransformSetErrorCode.unknownAccessor,
+        diagnosticCode: diag.unknownAccessor,
         arguments: [identifier],
       );
       return null;
@@ -320,7 +320,7 @@
           diagnosticReporter.atOffset(
             offset: token.offset + delta,
             length: token.length,
-            diagnosticCode: TransformSetErrorCode.undefinedVariable,
+            diagnosticCode: diag.undefinedVariable,
             arguments: [variableName],
           );
           return null;
@@ -351,7 +351,7 @@
     diagnosticReporter.atOffset(
       offset: offset,
       length: length,
-      diagnosticCode: TransformSetErrorCode.expectedPrimary,
+      diagnosticCode: diag.expectedPrimary,
     );
     return null;
   }
@@ -478,7 +478,7 @@
     _diagnosticReporter.atOffset(
       offset: offset + delta,
       length: 1,
-      diagnosticCode: TransformSetErrorCode.invalidCharacter,
+      diagnosticCode: diag.invalidCharacter,
       arguments: [content.substring(offset, offset + 1)],
     );
     return null;
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 7364f2f..29985ea 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
@@ -278,7 +278,8 @@
         _addMatcher(
           components: [
             parent.constructorName?.name ?? '',
-            grandparent.returnType.name,
+            // TODO(scheglov): support primary constructors
+            grandparent.typeName!.name,
           ],
           kinds: [ElementKind.constructorKind],
         );
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
index 7a2cf48..aa3db7c 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
@@ -55,8 +55,8 @@
                 type: parameterElement.type,
               );
               builder.write(', ');
-              if (overriddenParameter.metadata.hasDeprecated &&
-                  !parameterElement.metadata.hasDeprecated) {
+              if (overriddenParameter.isDeprecatedWithKind('use') &&
+                  !parameterElement.isDeprecatedWithKind('use')) {
                 builder.write('@deprecated ');
               }
             });
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart
deleted file mode 100644
index 6b0301f..0000000
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.dart
+++ /dev/null
@@ -1,7 +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:_fe_analyzer_shared/src/base/errors.dart';
-
-part 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.g.dart';
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.g.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.g.dart
deleted file mode 100644
index 1fd2883..0000000
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_error_code.g.dart
+++ /dev/null
@@ -1,498 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-// ignore_for_file: prefer_single_quotes
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart";
-
-/// An error code representing a problem in a file containing an encoding of a
-/// transform set.
-class TransformSetErrorCode extends DiagnosticCodeWithExpectedTypes {
-  /// Parameters:
-  /// Object p0: the conflicting key
-  /// Object p1: the key that it conflicts with
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  conflictingKey = TransformSetErrorTemplate(
-    name: 'conflicting_key',
-    problemMessage: "The key '{0}' can't be used when '{1}' is also used.",
-    uniqueNameCheck: 'TransformSetErrorCode.conflicting_key',
-    withArguments: _withArgumentsConflictingKey,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const TransformSetErrorWithoutArguments expectedPrimary =
-      TransformSetErrorWithoutArguments(
-        name: 'expected_primary',
-        problemMessage: "Expected either an identifier or a string literal.",
-        uniqueNameCheck: 'TransformSetErrorCode.expected_primary',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the old kind
-  /// Object p1: the new kind
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  incompatibleElementKind = TransformSetErrorTemplate(
-    name: 'incompatible_element_kind',
-    problemMessage:
-        "An element of kind '{0}' can't be replaced by an element of kind '{1}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.incompatible_element_kind',
-    withArguments: _withArgumentsIncompatibleElementKind,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the change kind that is invalid
-  /// Object p1: the element kind for the transform
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidChangeForKind = TransformSetErrorTemplate(
-    name: 'invalid_change_for_kind',
-    problemMessage:
-        "A change of type '{0}' can't be used for an element of kind '{1}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_change_for_kind',
-    withArguments: _withArgumentsInvalidChangeForKind,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the character that is invalid
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  invalidCharacter = TransformSetErrorTemplate(
-    name: 'invalid_character',
-    problemMessage: "Invalid character '{0}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_character',
-    withArguments: _withArgumentsInvalidCharacter,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the actual type of the key
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  invalidKey = TransformSetErrorTemplate(
-    name: 'invalid_key',
-    problemMessage: "Keys must be of type 'String' but found the type '{0}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_key',
-    withArguments: _withArgumentsInvalidKey,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the list of valid parameter styles
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  invalidParameterStyle = TransformSetErrorTemplate(
-    name: 'invalid_parameter_style',
-    problemMessage: "The parameter style must be one of the following: {0}.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_parameter_style',
-    withArguments: _withArgumentsInvalidParameterStyle,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const TransformSetErrorWithoutArguments
-  invalidRequiredIf = TransformSetErrorWithoutArguments(
-    name: 'invalid_required_if',
-    problemMessage:
-        "The key 'requiredIf' can only be used with optional named parameters.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_required_if',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the key with which the value is associated
-  /// Object p1: the expected type of the value
-  /// Object p2: the actual type of the value
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  invalidValue = TransformSetErrorTemplate(
-    name: 'invalid_value',
-    problemMessage:
-        "The value of '{0}' should be of type '{1}' but is of type '{2}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_value',
-    withArguments: _withArgumentsInvalidValue,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// Parameters:
-  /// Object p0: the key with which the value is associated
-  /// Object p1: the allowed values as a comma-separated list
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidValueOneOf = TransformSetErrorTemplate(
-    name: 'invalid_value_one_of',
-    problemMessage: "The value of '{0}' must be one of the following: '{1}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.invalid_value_one_of',
-    withArguments: _withArgumentsInvalidValueOneOf,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the missing key
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  missingKey = TransformSetErrorTemplate(
-    name: 'missing_key',
-    problemMessage: "Missing the required key '{0}'.",
-    uniqueNameCheck: 'TransformSetErrorCode.missing_key',
-    withArguments: _withArgumentsMissingKey,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the list of valid keys
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  missingOneOfMultipleKeys = TransformSetErrorTemplate(
-    name: 'missing_one_of_multiple_keys',
-    problemMessage: "Exactly one of the following keys must be provided: {0}.",
-    uniqueNameCheck: 'TransformSetErrorCode.missing_one_of_multiple_keys',
-    withArguments: _withArgumentsMissingOneOfMultipleKeys,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const TransformSetErrorWithoutArguments missingTemplateEnd =
-      TransformSetErrorWithoutArguments(
-        name: 'missing_template_end',
-        problemMessage: "Missing the end brace for the template.",
-        uniqueNameCheck: 'TransformSetErrorCode.missing_template_end',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: a description of the expected kinds of tokens
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  missingToken = TransformSetErrorTemplate(
-    name: 'missing_token',
-    problemMessage: "Expected to find {0}.",
-    uniqueNameCheck: 'TransformSetErrorCode.missing_token',
-    withArguments: _withArgumentsMissingToken,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const TransformSetErrorWithoutArguments missingUri =
-      TransformSetErrorWithoutArguments(
-        name: 'missing_uri',
-        problemMessage: "At least one URI must be provided.",
-        uniqueNameCheck: 'TransformSetErrorCode.missing_uri',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the missing key
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  undefinedVariable = TransformSetErrorTemplate(
-    name: 'undefined_variable',
-    problemMessage: "The variable '{0}' isn't defined.",
-    uniqueNameCheck: 'TransformSetErrorCode.undefined_variable',
-    withArguments: _withArgumentsUndefinedVariable,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the token that was unexpectedly found
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unexpectedTransformSetToken = TransformSetErrorTemplate(
-    name: 'unexpected_transform_set_token',
-    problemMessage: "Didn't expect to find {0}.",
-    uniqueNameCheck: 'TransformSetErrorCode.unexpected_transform_set_token',
-    withArguments: _withArgumentsUnexpectedTransformSetToken,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: a description of the expected kind of token
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unknownAccessor = TransformSetErrorTemplate(
-    name: 'unknown_accessor',
-    problemMessage: "The accessor '{0}' is invalid.",
-    uniqueNameCheck: 'TransformSetErrorCode.unknown_accessor',
-    withArguments: _withArgumentsUnknownAccessor,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the unsupported key
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unsupportedKey = TransformSetErrorTemplate(
-    name: 'unsupported_key',
-    problemMessage: "The key '{0}' isn't supported.",
-    uniqueNameCheck: 'TransformSetErrorCode.unsupported_key',
-    withArguments: _withArgumentsUnsupportedKey,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const TransformSetErrorWithoutArguments unsupportedStatic =
-      TransformSetErrorWithoutArguments(
-        name: 'unsupported_static',
-        problemMessage:
-            "The key 'static' is only supported for elements in a class, enum, "
-            "extension, or mixin.",
-        uniqueNameCheck: 'TransformSetErrorCode.unsupported_static',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const TransformSetErrorWithoutArguments unsupportedVersion =
-      TransformSetErrorWithoutArguments(
-        name: 'unsupported_version',
-        problemMessage: "Only version '1' is supported at this time.",
-        uniqueNameCheck: 'TransformSetErrorCode.unsupported_version',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: a description of the expected kind of token
-  /// Object p1: a description of the actual kind of token
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  wrongToken = TransformSetErrorTemplate(
-    name: 'wrong_token',
-    problemMessage: "Expected to find {0}, but found {1}.",
-    uniqueNameCheck: 'TransformSetErrorCode.wrong_token',
-    withArguments: _withArgumentsWrongToken,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the message produced by the YAML parser
-  static const TransformSetErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  yamlSyntaxError = TransformSetErrorTemplate(
-    name: 'yaml_syntax_error',
-    problemMessage: "Parse error: {0}",
-    uniqueNameCheck: 'TransformSetErrorCode.yaml_syntax_error',
-    withArguments: _withArgumentsYamlSyntaxError,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const TransformSetErrorCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.COMPILE_TIME_ERROR,
-         uniqueName: 'TransformSetErrorCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsConflictingKey({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.conflictingKey, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsIncompatibleElementKind({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      TransformSetErrorCode.incompatibleElementKind,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidChangeForKind({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.invalidChangeForKind, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCharacter({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.invalidCharacter, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidKey({required Object p0}) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.invalidKey, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidParameterStyle({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      TransformSetErrorCode.invalidParameterStyle,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidValue({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.invalidValue, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidValueOneOf({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.invalidValueOneOf, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingKey({required Object p0}) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.missingKey, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingOneOfMultipleKeys({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      TransformSetErrorCode.missingOneOfMultipleKeys,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingToken({required Object p0}) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.missingToken, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedVariable({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.undefinedVariable, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnexpectedTransformSetToken({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      TransformSetErrorCode.unexpectedTransformSetToken,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnknownAccessor({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.unknownAccessor, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedKey({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.unsupportedKey, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongToken({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.wrongToken, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsYamlSyntaxError({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(TransformSetErrorCode.yamlSyntaxError, [p0]);
-  }
-}
-
-final class TransformSetErrorTemplate<T extends Function>
-    extends TransformSetErrorCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const TransformSetErrorTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class TransformSetErrorWithoutArguments extends TransformSetErrorCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const TransformSetErrorWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
index 5581fd1..593afa4 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.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:analysis_server/src/diagnostic.dart' as diag;
 import 'package:analysis_server/src/services/correction/fix/data_driven/add_type_parameter.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/change.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/changes_selector.dart';
@@ -16,7 +17,6 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/replaced_by.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set.dart';
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/variable_scope.dart';
 import 'package:analysis_server/src/services/refactoring/framework/formal_parameter.dart';
@@ -213,7 +213,7 @@
         _diagnosticReporter.atOffset(
           offset: templateOffset + variableStart,
           length: 2,
-          diagnosticCode: TransformSetErrorCode.missingTemplateEnd,
+          diagnosticCode: diag.missingTemplateEnd,
         );
         // Ignore the invalid component, treating it as if it extended to the
         // end of the template.
@@ -225,7 +225,7 @@
           _diagnosticReporter.atOffset(
             offset: templateOffset + template.indexOf(name, variableStart),
             length: name.length,
-            diagnosticCode: TransformSetErrorCode.undefinedVariable,
+            diagnosticCode: diag.undefinedVariable,
             arguments: [name],
           );
           // Ignore the invalid component.
@@ -279,7 +279,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: TransformSetErrorCode.yamlSyntaxError,
+        diagnosticCode: diag.yamlSyntaxError,
         arguments: [e.message],
       );
     }
@@ -310,7 +310,7 @@
     ErrorContext context,
     String expectedType,
   ) {
-    _reportError(TransformSetErrorCode.invalidValue, node, [
+    _reportError(diag.invalidValue, node, [
       context.key,
       expectedType,
       _nodeType(node),
@@ -325,7 +325,7 @@
     ErrorContext context,
     List<String> allowedValues,
   ) {
-    _reportError(TransformSetErrorCode.invalidValueOneOf, node, [
+    _reportError(diag.invalidValueOneOf, node, [
       context.key,
       allowedValues.quotedAndCommaSeparatedWithOr,
     ]);
@@ -335,9 +335,7 @@
   /// Report that a required key is missing, using the [context] to locate the
   /// node associated with the diagnostic and the key to use in the message.
   Null _reportMissingKey(ErrorContext context) {
-    _reportError(TransformSetErrorCode.missingKey, context.parentNode, [
-      context.key,
-    ]);
+    _reportError(diag.missingKey, context.parentNode, [context.key]);
     return null;
   }
 
@@ -347,7 +345,7 @@
       keyNode as YamlNode;
       var key = _translateKey(keyNode);
       if (key != null && !validKeys.contains(key)) {
-        _reportError(TransformSetErrorCode.unsupportedKey, keyNode, [key]);
+        _reportError(diag.unsupportedKey, keyNode, [key]);
       }
     }
   }
@@ -396,21 +394,14 @@
       if (required) {
         var validKeysList =
             translators.keys.flattenedToList.quotedAndCommaSeparatedWithOr;
-        _reportError(
-          TransformSetErrorCode.missingOneOfMultipleKeys,
-          errorNode,
-          [validKeysList],
-        );
+        _reportError(diag.missingOneOfMultipleKeys, errorNode, [validKeysList]);
       }
       return null;
     }
 
     var firstKey = firstEntry.key;
     for (var entry in entries.skip(1)) {
-      _reportError(TransformSetErrorCode.conflictingKey, entry.keyNode, [
-        entry.key,
-        firstKey,
-      ]);
+      _reportError(diag.conflictingKey, entry.keyNode, [entry.key, firstKey]);
     }
 
     return firstEntry.translator(firstKey, firstEntry.valueNode);
@@ -452,9 +443,7 @@
     }
     if (!validStyles.contains(style)) {
       var validStylesList = validStyles.quotedAndCommaSeparatedWithOr;
-      _reportError(TransformSetErrorCode.invalidParameterStyle, styleNode, [
-        validStylesList,
-      ]);
+      _reportError(diag.invalidParameterStyle, styleNode, [validStylesList]);
       return;
     }
     var isRequired = style.startsWith('required_');
@@ -480,7 +469,7 @@
       if (style != 'optional_named') {
         var valueNode = argumentValueNode as YamlMap;
         _reportError(
-          TransformSetErrorCode.invalidRequiredIf,
+          diag.invalidRequiredIf,
           valueNode.keyAtValue(valueNode.valueAt(_requiredIfKey)!)!,
         );
         return;
@@ -652,7 +641,7 @@
     if (!validNullabilityChanges.contains(nullability)) {
       var nullabilityChangeList =
           validNullabilityChanges.quotedAndCommaSeparatedWithOr;
-      _reportError(TransformSetErrorCode.invalidValueOneOf, nullabilityNode!, [
+      _reportError(diag.invalidValueOneOf, nullabilityNode!, [
         _nullabilityKey,
         nullabilityChangeList,
       ]);
@@ -923,9 +912,7 @@
           ].contains(elementKey)) {
             var validKeysList =
                 validContainerKeys.quotedAndCommaSeparatedWithOr;
-            _reportError(TransformSetErrorCode.missingOneOfMultipleKeys, node, [
-              validKeysList,
-            ]);
+            _reportError(diag.missingOneOfMultipleKeys, node, [validKeysList]);
             return null;
           }
         } else {
@@ -938,19 +925,13 @@
           );
           if (staticValue != null) {
             if (components.length == 1) {
-              _reportError(
-                TransformSetErrorCode.unsupportedStatic,
-                node.getKey(_staticKey)!,
-              );
+              _reportError(diag.unsupportedStatic, node.getKey(_staticKey)!);
             }
             isStatic = staticValue;
           }
         }
       } else if (staticNode != null) {
-        _reportError(
-          TransformSetErrorCode.unsupportedStatic,
-          node.getKey(_staticKey)!,
-        );
+        _reportError(diag.unsupportedStatic, node.getKey(_staticKey)!);
       }
       if (uris == null) {
         // The error has already been reported.
@@ -958,7 +939,7 @@
       }
       if (uris.isEmpty) {
         if ((urisNode as YamlList).isEmpty) {
-          _reportError(TransformSetErrorCode.missingUri, urisNode);
+          _reportError(diag.missingUri, urisNode);
         }
         return null;
       }
@@ -996,7 +977,7 @@
     }
     if (uris.isEmpty) {
       if ((urisNode as YamlList).isEmpty) {
-        _reportError(TransformSetErrorCode.missingUri, urisNode);
+        _reportError(diag.missingUri, urisNode);
       }
       return null;
     }
@@ -1035,7 +1016,7 @@
     } else {
       type = node.runtimeType.toString();
     }
-    _reportError(TransformSetErrorCode.invalidKey, node, [type]);
+    _reportError(diag.invalidKey, node, [type]);
     return null;
   }
 
@@ -1160,15 +1141,14 @@
     if (oldElement != null) {
       var compatibleTypes = compatibleReplacementTypes[oldElement.kind];
       if (compatibleTypes == null) {
-        _reportError(
-          TransformSetErrorCode.invalidChangeForKind,
-          node.valueAt(_newElementKey)!,
-          [_replacedByKind, oldElement.kind.displayName],
-        );
+        _reportError(diag.invalidChangeForKind, node.valueAt(_newElementKey)!, [
+          _replacedByKind,
+          oldElement.kind.displayName,
+        ]);
         return null;
       } else if (!compatibleTypes.contains(newElement.kind)) {
         _reportError(
-          TransformSetErrorCode.incompatibleElementKind,
+          diag.incompatibleElementKind,
           node.valueAt(_newElementKey)!,
           [oldElement.kind.displayName, newElement.kind.displayName],
         );
@@ -1358,7 +1338,7 @@
         // The error has already been reported.
         return null;
       } else if (version < 1 || version > currentVersion) {
-        _reportError(TransformSetErrorCode.unsupportedVersion, versionNode);
+        _reportError(diag.unsupportedVersion, versionNode);
         return null;
       }
       // TODO(brianwilkerson): Version information is currently being ignored,
@@ -1385,11 +1365,7 @@
     } else {
       // TODO(brianwilkerson): Consider having a different error code for the
       //  top-level node (instead of using 'file' as the "key").
-      _reportError(TransformSetErrorCode.invalidValue, node, [
-        'file',
-        'Map',
-        _nodeType(node),
-      ]);
+      _reportError(diag.invalidValue, node, ['file', 'Map', _nodeType(node)]);
       return null;
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
index 69c8271..2183af8 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
@@ -13,8 +13,8 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/source/source_range.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/java_core.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/pubspec/validators/missing_dependency_validator.dart';
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:analyzer_plugin/src/utilities/extensions/string_extension.dart';
@@ -25,8 +25,8 @@
 /// The generator used to generate fixes in pubspec.yaml files.
 class PubspecFixGenerator {
   static const List<DiagnosticCode> codesWithFixes = [
-    PubspecWarningCode.missingDependency,
-    PubspecWarningCode.missingName,
+    diag.missingDependency,
+    diag.missingName,
   ];
 
   /// The resource provider used to access the file system.
@@ -93,37 +93,36 @@
       return fixes;
     }
 
-    if (diagnosticCode == PubspecWarningCode.assetDoesNotExist) {
+    if (diagnosticCode == diag.assetDoesNotExist) {
       // Consider replacing the path with a valid path.
-    } else if (diagnosticCode ==
-        PubspecWarningCode.assetDirectoryDoesNotExist) {
+    } else if (diagnosticCode == diag.assetDirectoryDoesNotExist) {
       // Consider replacing the path with a valid path.
       // Consider creating the directory.
-    } else if (diagnosticCode == PubspecWarningCode.assetFieldNotList) {
+    } else if (diagnosticCode == diag.assetFieldNotList) {
       // Not sure how to fix a structural issue.
-    } else if (diagnosticCode == PubspecWarningCode.assetNotString) {
+    } else if (diagnosticCode == diag.assetNotString) {
       // Not sure how to fix a structural issue.
-    } else if (diagnosticCode == PubspecWarningCode.dependenciesFieldNotMap) {
+    } else if (diagnosticCode == diag.dependenciesFieldNotMap) {
       // Not sure how to fix a structural issue.
-    } else if (diagnosticCode == PubspecWarningCode.deprecatedField) {
+    } else if (diagnosticCode == diag.deprecatedField) {
       // Consider removing the field.
-    } else if (diagnosticCode == PubspecWarningCode.flutterFieldNotMap) {
+    } else if (diagnosticCode == diag.flutterFieldNotMap) {
       // Not sure how to fix a structural issue.
-    } else if (diagnosticCode == PubspecWarningCode.invalidDependency) {
+    } else if (diagnosticCode == diag.invalidDependency) {
       // Consider adding `publish_to: none`.
-    } else if (diagnosticCode == PubspecWarningCode.missingName) {
+    } else if (diagnosticCode == diag.missingName) {
       await _addNameEntry();
-    } else if (diagnosticCode == PubspecWarningCode.nameNotString) {
+    } else if (diagnosticCode == diag.nameNotString) {
       // Not sure how to fix a structural issue.
-    } else if (diagnosticCode == PubspecWarningCode.pathDoesNotExist) {
+    } else if (diagnosticCode == diag.pathDoesNotExist) {
       // Consider replacing the path with a valid path.
-    } else if (diagnosticCode == PubspecWarningCode.pathNotPosix) {
+    } else if (diagnosticCode == diag.pathNotPosix) {
       // Consider converting to a POSIX-style path.
-    } else if (diagnosticCode == PubspecWarningCode.pathPubspecDoesNotExist) {
+    } else if (diagnosticCode == diag.pathPubspecDoesNotExist) {
       // Consider replacing the path with a valid path.
-    } else if (diagnosticCode == PubspecWarningCode.unnecessaryDevDependency) {
+    } else if (diagnosticCode == diag.unnecessaryDevDependency) {
       // Consider removing the dependency.
-    } else if (diagnosticCode == PubspecWarningCode.missingDependency) {
+    } else if (diagnosticCode == diag.missingDependency) {
       await _addMissingDependency(diagnosticCode);
     }
     return fixes;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_kind.dart b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_kind.dart
index 105b025..989045d 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_kind.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_kind.dart
@@ -8,16 +8,16 @@
 abstract final class PubspecFixKind {
   static const addName = FixKind(
     'pubspec.fix.add.name',
-    PubspecFixKindPriority.DEFAULT,
+    PubspecFixKindPriority._default,
     "Add 'name' key",
   );
   static const addDependency = FixKind(
     'pubspec.fix.add.dependency',
-    PubspecFixKindPriority.DEFAULT,
+    PubspecFixKindPriority._default,
     'Update pubspec with the missing dependencies',
   );
 }
 
 abstract final class PubspecFixKindPriority {
-  static const int DEFAULT = 50;
+  static const int _default = 50;
 }
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 f30c66b..48f984a 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -260,701 +260,539 @@
 import 'package:analysis_server_plugin/src/correction/fix_processor.dart';
 import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/error/ffi_code.dart';
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart';
-import 'package:linter/src/lint_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
+import 'package:linter/src/diagnostic.dart' as diag;
 
 final _builtInLintGenerators = <DiagnosticCode, List<ProducerGenerator>>{
-  LinterLintCode.alwaysDeclareReturnTypesOfFunctions: [AddReturnType.new],
-  LinterLintCode.alwaysDeclareReturnTypesOfMethods: [AddReturnType.new],
-  LinterLintCode.alwaysPutControlBodyOnNewLine: [UseCurlyBraces.nonBulk],
-  LinterLintCode.alwaysPutRequiredNamedParametersFirst: [
+  diag.alwaysDeclareReturnTypesOfFunctions: [AddReturnType.new],
+  diag.alwaysDeclareReturnTypesOfMethods: [AddReturnType.new],
+  diag.alwaysPutControlBodyOnNewLine: [UseCurlyBraces.nonBulk],
+  diag.alwaysPutRequiredNamedParametersFirst: [
     MakeRequiredNamedParametersFirst.new,
   ],
-  LinterLintCode.alwaysSpecifyTypesAddType: [AddTypeAnnotation.bulkFixable],
-  LinterLintCode.alwaysSpecifyTypesSpecifyType: [AddTypeAnnotation.bulkFixable],
-  LinterLintCode.alwaysSpecifyTypesReplaceKeyword: [
-    AddTypeAnnotation.bulkFixable,
-  ],
-  LinterLintCode.alwaysSpecifyTypesSplitToTypes: [
-    AddTypeAnnotation.bulkFixable,
-  ],
-  LinterLintCode.alwaysUsePackageImports: [ConvertToPackageImport.new],
-  LinterLintCode.annotateOverrides: [AddOverride.new],
-  LinterLintCode.annotateRedeclares: [AddRedeclare.new],
-  LinterLintCode.avoidAnnotatingWithDynamic: [RemoveTypeAnnotation.other],
-  LinterLintCode.avoidBoolLiteralsInConditionalExpressions: [
+  diag.alwaysSpecifyTypesAddType: [AddTypeAnnotation.bulkFixable],
+  diag.alwaysSpecifyTypesSpecifyType: [AddTypeAnnotation.bulkFixable],
+  diag.alwaysSpecifyTypesReplaceKeyword: [AddTypeAnnotation.bulkFixable],
+  diag.alwaysSpecifyTypesSplitToTypes: [AddTypeAnnotation.bulkFixable],
+  diag.alwaysUsePackageImports: [ConvertToPackageImport.new],
+  diag.annotateOverrides: [AddOverride.new],
+  diag.annotateRedeclares: [AddRedeclare.new],
+  diag.avoidAnnotatingWithDynamic: [RemoveTypeAnnotation.other],
+  diag.avoidBoolLiteralsInConditionalExpressions: [
     ConvertToBooleanExpression.new,
   ],
-  LinterLintCode.avoidEmptyElse: [RemoveEmptyElse.new],
-  LinterLintCode.avoidEscapingInnerQuotes: [ConvertQuotes.new],
-  LinterLintCode.avoidFunctionLiteralsInForeachCalls: [
-    ConvertForEachToForLoop.new,
-  ],
-  LinterLintCode.avoidInitToNull: [RemoveInitializer.bulkFixable],
-  LinterLintCode.avoidMultipleDeclarationsPerLine: [
-    SplitMultipleDeclarations.new,
-  ],
-  LinterLintCode.avoidNullChecksInEqualityOperators: [RemoveComparison.new],
-  LinterLintCode.avoidPrint: [MakeConditionalOnDebugMode.new, RemovePrint.new],
-  LinterLintCode.avoidPrivateTypedefFunctions: [InlineTypedef.new],
-  LinterLintCode.avoidRedundantArgumentValues: [RemoveArgument.new],
-  LinterLintCode.avoidRelativeLibImports: [ConvertToPackageImport.new],
-  LinterLintCode.avoidRenamingMethodParameters: [RenameMethodParameter.new],
-  LinterLintCode.avoidReturnTypesOnSetters: [RemoveTypeAnnotation.other],
-  LinterLintCode.avoidReturningNullForVoidFromFunction: [
-    RemoveReturnedValue.new,
-  ],
-  LinterLintCode.avoidReturningNullForVoidFromMethod: [RemoveReturnedValue.new],
-  LinterLintCode.avoidSingleCascadeInExpressionStatements: [
+  diag.avoidEmptyElse: [RemoveEmptyElse.new],
+  diag.avoidEscapingInnerQuotes: [ConvertQuotes.new],
+  diag.avoidFunctionLiteralsInForeachCalls: [ConvertForEachToForLoop.new],
+  diag.avoidInitToNull: [RemoveInitializer.bulkFixable],
+  diag.avoidMultipleDeclarationsPerLine: [SplitMultipleDeclarations.new],
+  diag.avoidNullChecksInEqualityOperators: [RemoveComparison.new],
+  diag.avoidPrint: [MakeConditionalOnDebugMode.new, RemovePrint.new],
+  diag.avoidPrivateTypedefFunctions: [InlineTypedef.new],
+  diag.avoidRedundantArgumentValues: [RemoveArgument.new],
+  diag.avoidRelativeLibImports: [ConvertToPackageImport.new],
+  diag.avoidRenamingMethodParameters: [RenameMethodParameter.new],
+  diag.avoidReturnTypesOnSetters: [RemoveTypeAnnotation.other],
+  diag.avoidReturningNullForVoidFromFunction: [RemoveReturnedValue.new],
+  diag.avoidReturningNullForVoidFromMethod: [RemoveReturnedValue.new],
+  diag.avoidSingleCascadeInExpressionStatements: [
     // TODO(brianwilkerson): This fix should be applied to some non-lint
     //  diagnostics and should also be available as an assist.
     ReplaceCascadeWithDot.new,
   ],
-  LinterLintCode.avoidTypesAsParameterNamesFormalParameter: [
-    ConvertToOnType.new,
-  ],
-  LinterLintCode.avoidTypesOnClosureParameters: [
+  diag.avoidTypesAsParameterNamesFormalParameter: [ConvertToOnType.new],
+  diag.avoidTypesOnClosureParameters: [
     ReplaceWithIdentifier.new,
     RemoveTypeAnnotation.other,
   ],
-  LinterLintCode.avoidUnusedConstructorParameters: [RemoveUnusedParameter.new],
-  LinterLintCode.avoidUnnecessaryContainers: [FlutterRemoveWidget.new],
-  LinterLintCode.avoidVoidAsync: [ReplaceReturnTypeFuture.new],
-  LinterLintCode.awaitOnlyFutures: [RemoveAwait.new],
-  LinterLintCode.cascadeInvocations: [
-    ConvertToCascade.new,
-    ConvertRelatedToCascade.new,
-  ],
-  LinterLintCode.castNullableToNonNullable: [
-    AddNullCheck.withoutAssignabilityCheck,
-  ],
-  LinterLintCode.combinatorsOrdering: [SortCombinators.new],
-  LinterLintCode.constantIdentifierNames: [RenameToCamelCase.new],
-  LinterLintCode.curlyBracesInFlowControlStructures: [UseCurlyBraces.new],
-  LinterLintCode.danglingLibraryDocComments: [
-    MoveDocCommentToLibraryDirective.new,
-  ],
-  LinterLintCode.diagnosticDescribeAllProperties: [
-    AddDiagnosticPropertyReference.new,
-  ],
-  LinterLintCode.directivesOrderingDart: [OrganizeImports.new],
-  LinterLintCode.directivesOrderingAlphabetical: [OrganizeImports.new],
-  LinterLintCode.directivesOrderingExports: [OrganizeImports.new],
-  LinterLintCode.directivesOrderingPackageBeforeRelative: [OrganizeImports.new],
-  LinterLintCode.discardedFutures: [
-    AddAsync.discardedFutures,
-    WrapInUnawaited.new,
-  ],
-  LinterLintCode.emptyCatches: [RemoveEmptyCatch.new],
-  LinterLintCode.emptyConstructorBodies: [RemoveEmptyConstructorBody.new],
-  LinterLintCode.emptyStatements: [
-    RemoveEmptyStatement.new,
-    ReplaceWithBrackets.new,
-  ],
-  LinterLintCode.eolAtEndOfFile: [AddEolAtEndOfFile.new],
-  LinterLintCode.exhaustiveCases: [AddMissingEnumLikeCaseClauses.new],
-  LinterLintCode.flutterStyleTodos: [ConvertToFlutterStyleTodo.new],
-  LinterLintCode.hashAndEquals: [CreateMethod.equalityOrHashCode],
-  LinterLintCode.implicitCallTearoffs: [AddExplicitCall.new],
-  LinterLintCode.implicitReopen: [AddReopen.new],
-  LinterLintCode.invalidCasePatterns: [AddConst.new],
-  LinterLintCode.leadingNewlinesInMultilineStrings: [
-    AddLeadingNewlineToString.new,
-  ],
-  LinterLintCode.libraryAnnotations: [MoveAnnotationToLibraryDirective.new],
-  LinterLintCode.noDuplicateCaseValues: [RemoveDuplicateCase.new],
-  LinterLintCode.noLeadingUnderscoresForLibraryPrefixes: [
-    RemoveLeadingUnderscore.new,
-  ],
-  LinterLintCode.noLeadingUnderscoresForLocalIdentifiers: [
-    RemoveLeadingUnderscore.new,
-  ],
-  LinterLintCode.noLiteralBoolComparisons: [ConvertToBooleanExpression.new],
-  LinterLintCode.nonConstantIdentifierNames: [RenameToCamelCase.new],
-  LinterLintCode.noopPrimitiveOperations: [RemoveInvocation.new],
-  LinterLintCode.nullCheckOnNullableTypeParameter: [
-    ReplaceNullCheckWithCast.new,
-  ],
-  LinterLintCode.nullClosures: [ReplaceNullWithClosure.new],
-  LinterLintCode.omitLocalVariableTypes: [
+  diag.avoidUnusedConstructorParameters: [RemoveUnusedParameter.new],
+  diag.avoidUnnecessaryContainers: [FlutterRemoveWidget.new],
+  diag.avoidVoidAsync: [ReplaceReturnTypeFuture.new],
+  diag.awaitOnlyFutures: [RemoveAwait.new],
+  diag.cascadeInvocations: [ConvertToCascade.new, ConvertRelatedToCascade.new],
+  diag.castNullableToNonNullable: [AddNullCheck.withoutAssignabilityCheck],
+  diag.combinatorsOrdering: [SortCombinators.new],
+  diag.constantIdentifierNames: [RenameToCamelCase.new],
+  diag.curlyBracesInFlowControlStructures: [UseCurlyBraces.new],
+  diag.danglingLibraryDocComments: [MoveDocCommentToLibraryDirective.new],
+  diag.diagnosticDescribeAllProperties: [AddDiagnosticPropertyReference.new],
+  diag.directivesOrderingDart: [OrganizeImports.new],
+  diag.directivesOrderingAlphabetical: [OrganizeImports.new],
+  diag.directivesOrderingExports: [OrganizeImports.new],
+  diag.directivesOrderingPackageBeforeRelative: [OrganizeImports.new],
+  diag.discardedFutures: [AddAsync.discardedFutures, WrapInUnawaited.new],
+  diag.emptyCatches: [RemoveEmptyCatch.new],
+  diag.emptyConstructorBodies: [RemoveEmptyConstructorBody.new],
+  diag.emptyStatements: [RemoveEmptyStatement.new, ReplaceWithBrackets.new],
+  diag.eolAtEndOfFile: [AddEolAtEndOfFile.new],
+  diag.exhaustiveCases: [AddMissingEnumLikeCaseClauses.new],
+  diag.flutterStyleTodos: [ConvertToFlutterStyleTodo.new],
+  diag.hashAndEquals: [CreateMethod.equalityOrHashCode],
+  diag.implicitCallTearoffs: [AddExplicitCall.new],
+  diag.implicitReopen: [AddReopen.new],
+  diag.invalidCasePatterns: [AddConst.new],
+  diag.leadingNewlinesInMultilineStrings: [AddLeadingNewlineToString.new],
+  diag.libraryAnnotations: [MoveAnnotationToLibraryDirective.new],
+  diag.noDuplicateCaseValues: [RemoveDuplicateCase.new],
+  diag.noLeadingUnderscoresForLibraryPrefixes: [RemoveLeadingUnderscore.new],
+  diag.noLeadingUnderscoresForLocalIdentifiers: [RemoveLeadingUnderscore.new],
+  diag.noLiteralBoolComparisons: [ConvertToBooleanExpression.new],
+  diag.nonConstantIdentifierNames: [RenameToCamelCase.new],
+  diag.noopPrimitiveOperations: [RemoveInvocation.new],
+  diag.nullCheckOnNullableTypeParameter: [ReplaceNullCheckWithCast.new],
+  diag.nullClosures: [ReplaceNullWithClosure.new],
+  diag.omitLocalVariableTypes: [ReplaceWithVar.new, RemoveTypeAnnotation.other],
+  diag.omitObviousLocalVariableTypes: [
     ReplaceWithVar.new,
     RemoveTypeAnnotation.other,
   ],
-  LinterLintCode.omitObviousLocalVariableTypes: [
+  diag.omitObviousPropertyTypes: [
     ReplaceWithVar.new,
     RemoveTypeAnnotation.other,
   ],
-  LinterLintCode.omitObviousPropertyTypes: [
-    ReplaceWithVar.new,
-    RemoveTypeAnnotation.other,
-  ],
-  LinterLintCode.preferAdjacentStringConcatenation: [RemoveOperator.new],
-  LinterLintCode.preferCollectionLiterals: [
+  diag.preferAdjacentStringConcatenation: [RemoveOperator.new],
+  diag.preferCollectionLiterals: [
     ConvertToMapLiteral.new,
     ConvertToSetLiteral.new,
   ],
-  LinterLintCode.preferConditionalAssignment: [
-    ReplaceWithConditionalAssignment.new,
-  ],
-  LinterLintCode.preferConstConstructors: [
-    AddConst.new,
-    ReplaceNewWithConst.new,
-  ],
-  LinterLintCode.preferConstConstructorsInImmutables: [AddConst.new],
-  LinterLintCode.preferConstDeclarations: [ReplaceFinalWithConst.new],
-  LinterLintCode.preferConstLiteralsToCreateImmutables: [AddConst.new],
-  LinterLintCode.preferContainsAlwaysFalse: [ConvertToContains.new],
-  LinterLintCode.preferContainsAlwaysTrue: [ConvertToContains.new],
-  LinterLintCode.preferContainsUseContains: [ConvertToContains.new],
-  LinterLintCode.preferDoubleQuotes: [ConvertToDoubleQuotes.new],
-  LinterLintCode.preferExpressionFunctionBodies: [
-    ConvertToExpressionFunctionBody.new,
-  ],
-  LinterLintCode.preferFinalFields: [MakeFinal.new],
-  LinterLintCode.preferFinalInForEachPattern: [MakeFinal.new],
-  LinterLintCode.preferFinalInForEachVariable: [MakeFinal.new],
-  LinterLintCode.preferFinalLocals: [MakeFinal.new],
-  LinterLintCode.preferFinalParameters: [MakeFinal.new],
-  LinterLintCode.preferForElementsToMapFromiterable: [
+  diag.preferConditionalAssignment: [ReplaceWithConditionalAssignment.new],
+  diag.preferConstConstructors: [AddConst.new, ReplaceNewWithConst.new],
+  diag.preferConstConstructorsInImmutables: [AddConst.new],
+  diag.preferConstDeclarations: [ReplaceFinalWithConst.new],
+  diag.preferConstLiteralsToCreateImmutables: [AddConst.new],
+  diag.preferContainsAlwaysFalse: [ConvertToContains.new],
+  diag.preferContainsAlwaysTrue: [ConvertToContains.new],
+  diag.preferContainsUseContains: [ConvertToContains.new],
+  diag.preferDoubleQuotes: [ConvertToDoubleQuotes.new],
+  diag.preferExpressionFunctionBodies: [ConvertToExpressionFunctionBody.new],
+  diag.preferFinalFields: [MakeFinal.new],
+  diag.preferFinalInForEachPattern: [MakeFinal.new],
+  diag.preferFinalInForEachVariable: [MakeFinal.new],
+  diag.preferFinalLocals: [MakeFinal.new],
+  diag.preferFinalParameters: [MakeFinal.new],
+  diag.preferForElementsToMapFromiterable: [
     ConvertMapFromIterableToForLiteral.new,
   ],
-  LinterLintCode.preferForeach: [ConvertToForEach.new],
-  LinterLintCode.preferFunctionDeclarationsOverVariables: [
+  diag.preferForeach: [ConvertToForEach.new],
+  diag.preferFunctionDeclarationsOverVariables: [
     ConvertToFunctionDeclaration.new,
   ],
-  LinterLintCode.preferGenericFunctionTypeAliases: [
-    ConvertToGenericFunctionSyntax.new,
-  ],
-  LinterLintCode.preferIfElementsToConditionalExpressions: [
+  diag.preferGenericFunctionTypeAliases: [ConvertToGenericFunctionSyntax.new],
+  diag.preferIfElementsToConditionalExpressions: [
     ConvertConditionalExpressionToIfElement.new,
   ],
-  LinterLintCode.preferIfNullOperators: [ConvertToIfNull.preferIfNull],
-  LinterLintCode.preferInitializingFormals: [ConvertToInitializingFormal.new],
-  LinterLintCode.preferInlinedAddsSingle: [
+  diag.preferIfNullOperators: [ConvertToIfNull.preferIfNull],
+  diag.preferInitializingFormals: [ConvertToInitializingFormal.new],
+  diag.preferInlinedAddsSingle: [
     ConvertAddAllToSpread.new,
     InlineInvocation.new,
   ],
-  LinterLintCode.preferInlinedAddsMultiple: [
+  diag.preferInlinedAddsMultiple: [
     ConvertAddAllToSpread.new,
     InlineInvocation.new,
   ],
-  LinterLintCode.preferIntLiterals: [ConvertToIntLiteral.new],
-  LinterLintCode.preferInterpolationToComposeStrings: [
-    ReplaceWithInterpolation.new,
-  ],
-  LinterLintCode.preferIsEmptyAlwaysFalse: [ReplaceWithIsEmpty.new],
-  LinterLintCode.preferIsEmptyAlwaysTrue: [ReplaceWithIsEmpty.new],
-  LinterLintCode.preferIsEmptyUseIsEmpty: [ReplaceWithIsEmpty.new],
-  LinterLintCode.preferIsEmptyUseIsNotEmpty: [ReplaceWithIsEmpty.new],
-  LinterLintCode.preferIsNotEmpty: [UseIsNotEmpty.new],
-  LinterLintCode.preferIsNotOperator: [ConvertIntoIsNot.new],
-  LinterLintCode.preferIterableWheretype: [ConvertToWhereType.new],
-  LinterLintCode.preferNullAwareOperators: [ConvertToNullAware.new],
-  LinterLintCode.preferRelativeImports: [ConvertToRelativeImport.new],
-  LinterLintCode.preferSingleQuotes: [ConvertToSingleQuotes.new],
-  LinterLintCode.preferSpreadCollections: [ConvertAddAllToSpread.new],
-  LinterLintCode.preferTypingUninitializedVariablesForField: [
+  diag.preferIntLiterals: [ConvertToIntLiteral.new],
+  diag.preferInterpolationToComposeStrings: [ReplaceWithInterpolation.new],
+  diag.preferIsEmptyAlwaysFalse: [ReplaceWithIsEmpty.new],
+  diag.preferIsEmptyAlwaysTrue: [ReplaceWithIsEmpty.new],
+  diag.preferIsEmptyUseIsEmpty: [ReplaceWithIsEmpty.new],
+  diag.preferIsEmptyUseIsNotEmpty: [ReplaceWithIsEmpty.new],
+  diag.preferIsNotEmpty: [UseIsNotEmpty.new],
+  diag.preferIsNotOperator: [ConvertIntoIsNot.new],
+  diag.preferIterableWheretype: [ConvertToWhereType.new],
+  diag.preferNullAwareOperators: [ConvertToNullAware.new],
+  diag.preferRelativeImports: [ConvertToRelativeImport.new],
+  diag.preferSingleQuotes: [ConvertToSingleQuotes.new],
+  diag.preferSpreadCollections: [ConvertAddAllToSpread.new],
+  diag.preferTypingUninitializedVariablesForField: [
     AddTypeAnnotation.bulkFixable,
   ],
-  LinterLintCode.preferTypingUninitializedVariablesForLocalVariable: [
+  diag.preferTypingUninitializedVariablesForLocalVariable: [
     AddTypeAnnotation.bulkFixable,
   ],
-  LinterLintCode.preferVoidToNull: [ReplaceNullWithVoid.new],
-  LinterLintCode.requireTrailingCommas: [AddTrailingComma.new],
-  LinterLintCode.sizedBoxForWhitespace: [ReplaceContainerWithSizedBox.new],
-  LinterLintCode.slashForDocComments: [ConvertDocumentationIntoLine.new],
-  LinterLintCode.sortChildPropertiesLast: [SortChildPropertyLast.new],
-  LinterLintCode.sortConstructorsFirst: [SortConstructorFirst.new],
-  LinterLintCode.sortUnnamedConstructorsFirst: [
-    SortUnnamedConstructorFirst.new,
-  ],
-  LinterLintCode.specifyNonobviousLocalVariableTypes: [
-    AddTypeAnnotation.bulkFixable,
-  ],
-  LinterLintCode.specifyNonobviousPropertyTypes: [
-    AddTypeAnnotation.bulkFixable,
-  ],
-  LinterLintCode.strictTopLevelInferenceAddType: [AddReturnType.new],
-  LinterLintCode.typeAnnotatePublicApis: [AddTypeAnnotation.bulkFixable],
-  LinterLintCode.typeInitFormals: [RemoveTypeAnnotation.other],
-  LinterLintCode.typeLiteralInConstantPattern: [
+  diag.preferVoidToNull: [ReplaceNullWithVoid.new],
+  diag.requireTrailingCommas: [AddTrailingComma.new],
+  diag.sizedBoxForWhitespace: [ReplaceContainerWithSizedBox.new],
+  diag.slashForDocComments: [ConvertDocumentationIntoLine.new],
+  diag.sortChildPropertiesLast: [SortChildPropertyLast.new],
+  diag.sortConstructorsFirst: [SortConstructorFirst.new],
+  diag.sortUnnamedConstructorsFirst: [SortUnnamedConstructorFirst.new],
+  diag.specifyNonobviousLocalVariableTypes: [AddTypeAnnotation.bulkFixable],
+  diag.specifyNonobviousPropertyTypes: [AddTypeAnnotation.bulkFixable],
+  diag.strictTopLevelInferenceAddType: [AddReturnType.new],
+  diag.typeAnnotatePublicApis: [AddTypeAnnotation.bulkFixable],
+  diag.typeInitFormals: [RemoveTypeAnnotation.other],
+  diag.typeLiteralInConstantPattern: [
     ConvertToConstantPattern.new,
     ConvertToWildcardPattern.new,
   ],
-  LinterLintCode.unawaitedFutures: [AddAwait.unawaited, WrapInUnawaited.new],
-  LinterLintCode.unnecessaryAsync: [RemoveAsync.unnecessary],
-  LinterLintCode.unnecessaryAwaitInReturn: [RemoveAwait.new],
-  LinterLintCode.unnecessaryBraceInStringInterps: [
-    RemoveInterpolationBraces.new,
-  ],
-  LinterLintCode.unnecessaryBreaks: [RemoveBreak.new],
-  LinterLintCode.unnecessaryConst: [RemoveUnnecessaryConst.new],
-  LinterLintCode.unnecessaryConstructorName: [RemoveConstructorName.new],
-  LinterLintCode.unnecessaryFinalWithType: [ReplaceFinalWithVar.new],
-  LinterLintCode.unnecessaryFinalWithoutType: [ReplaceFinalWithVar.new],
-  LinterLintCode.unnecessaryGettersSetters: [MakeFieldPublic.new],
-  LinterLintCode.unnecessaryIgnoreName: [RemoveIgnoredDiagnostic.new],
-  LinterLintCode.unnecessaryIgnoreNameFile: [RemoveIgnoredDiagnostic.new],
-  LinterLintCode.unnecessaryIgnore: [RemoveComment.ignore],
-  LinterLintCode.unnecessaryIgnoreFile: [RemoveComment.ignore],
-  LinterLintCode.unnecessaryLambdas: [ReplaceWithTearOff.new],
-  LinterLintCode.unnecessaryLate: [RemoveUnnecessaryLate.new],
-  LinterLintCode.unnecessaryLibraryDirective: [
-    RemoveUnnecessaryLibraryDirective.new,
-  ],
-  LinterLintCode.unnecessaryLibraryName: [RemoveLibraryName.new],
-  LinterLintCode.unnecessaryNew: [RemoveUnnecessaryNew.new],
-  LinterLintCode.unnecessaryNullAwareAssignments: [RemoveAssignment.new],
-  LinterLintCode.unnecessaryNullChecks: [RemoveNonNullAssertion.new],
-  LinterLintCode.unnecessaryNullInIfNullOperators: [RemoveIfNullOperator.new],
-  LinterLintCode.unnecessaryNullableForFinalVariableDeclarations: [
+  diag.unawaitedFutures: [AddAwait.unawaited, WrapInUnawaited.new],
+  diag.unnecessaryAsync: [RemoveAsync.unnecessary],
+  diag.unnecessaryAwaitInReturn: [RemoveAwait.new],
+  diag.unnecessaryBraceInStringInterps: [RemoveInterpolationBraces.new],
+  diag.unnecessaryBreaks: [RemoveBreak.new],
+  diag.unnecessaryConst: [RemoveUnnecessaryConst.new],
+  diag.unnecessaryConstructorName: [RemoveConstructorName.new],
+  diag.unnecessaryFinalWithType: [ReplaceFinalWithVar.new],
+  diag.unnecessaryFinalWithoutType: [ReplaceFinalWithVar.new],
+  diag.unnecessaryGettersSetters: [MakeFieldPublic.new],
+  diag.unnecessaryIgnoreName: [RemoveIgnoredDiagnostic.new],
+  diag.unnecessaryIgnoreNameFile: [RemoveIgnoredDiagnostic.new],
+  diag.unnecessaryIgnore: [RemoveComment.ignore],
+  diag.unnecessaryIgnoreFile: [RemoveComment.ignore],
+  diag.unnecessaryLambdas: [ReplaceWithTearOff.new],
+  diag.unnecessaryLate: [RemoveUnnecessaryLate.new],
+  diag.unnecessaryLibraryDirective: [RemoveUnnecessaryLibraryDirective.new],
+  diag.unnecessaryLibraryName: [RemoveLibraryName.new],
+  diag.unnecessaryNew: [RemoveUnnecessaryNew.new],
+  diag.unnecessaryNullAwareAssignments: [RemoveAssignment.new],
+  diag.unnecessaryNullChecks: [RemoveNonNullAssertion.new],
+  diag.unnecessaryNullInIfNullOperators: [RemoveIfNullOperator.new],
+  diag.unnecessaryNullableForFinalVariableDeclarations: [
     RemoveQuestionMark.new,
   ],
-  LinterLintCode.unnecessaryOverrides: [RemoveMethodDeclaration.new],
-  LinterLintCode.unnecessaryParenthesis: [RemoveUnnecessaryParentheses.new],
-  LinterLintCode.unnecessaryRawStrings: [RemoveUnnecessaryRawString.new],
-  LinterLintCode.unnecessaryStringEscapes: [RemoveUnnecessaryStringEscape.new],
-  LinterLintCode.unnecessaryStringInterpolations: [
+  diag.unnecessaryOverrides: [RemoveMethodDeclaration.new],
+  diag.unnecessaryParenthesis: [RemoveUnnecessaryParentheses.new],
+  diag.unnecessaryRawStrings: [RemoveUnnecessaryRawString.new],
+  diag.unnecessaryStringEscapes: [RemoveUnnecessaryStringEscape.new],
+  diag.unnecessaryStringInterpolations: [
     RemoveUnnecessaryStringInterpolation.new,
   ],
-  LinterLintCode.unnecessaryToListInSpreads: [RemoveToList.new],
-  LinterLintCode.unnecessaryThis: [RemoveThisExpression.new],
-  LinterLintCode.unnecessaryUnawaited: [RemoveUnawaited.new],
-  LinterLintCode.unnecessaryUnderscores: [ConvertToWildcardVariable.new],
-  LinterLintCode.unreachableFromMain: [RemoveUnusedElement.new],
-  LinterLintCode.useColoredBox: [ReplaceContainerWithColoredBox.new],
-  LinterLintCode.useDecoratedBox: [ReplaceWithDecoratedBox.new],
-  LinterLintCode.useEnums: [ConvertClassToEnum.new],
-  LinterLintCode.useFullHexValuesForFlutterColors: [
-    ReplaceWithEightDigitHex.new,
-  ],
-  LinterLintCode.useFunctionTypeSyntaxForParameters: [
-    ConvertToGenericFunctionSyntax.new,
-  ],
-  LinterLintCode.useIfNullToConvertNullsToBools: [
+  diag.unnecessaryToListInSpreads: [RemoveToList.new],
+  diag.unnecessaryThis: [RemoveThisExpression.new],
+  diag.unnecessaryUnawaited: [RemoveUnawaited.new],
+  diag.unnecessaryUnderscores: [ConvertToWildcardVariable.new],
+  diag.unreachableFromMain: [RemoveUnusedElement.new],
+  diag.useColoredBox: [ReplaceContainerWithColoredBox.new],
+  diag.useDecoratedBox: [ReplaceWithDecoratedBox.new],
+  diag.useEnums: [ConvertClassToEnum.new],
+  diag.useFullHexValuesForFlutterColors: [ReplaceWithEightDigitHex.new],
+  diag.useFunctionTypeSyntaxForParameters: [ConvertToGenericFunctionSyntax.new],
+  diag.useIfNullToConvertNullsToBools: [
     ConvertToIfNull.useToConvertNullsToBools,
   ],
-  LinterLintCode.useKeyInWidgetConstructors: [AddKeyToConstructors.new],
-  LinterLintCode.useNamedConstants: [ReplaceWithNamedConstant.new],
-  LinterLintCode.useNullAwareElements: [
-    ConvertNullCheckToNullAwareElementOrEntry.new,
-  ],
-  LinterLintCode.useRawStrings: [ConvertToRawString.new],
-  LinterLintCode.useRethrowWhenPossible: [UseRethrow.new],
-  LinterLintCode.useStringInPartOfDirectives: [ReplaceWithPartOrUriEmpty.new],
-  LinterLintCode.useSuperParametersSingle: [ConvertToSuperParameters.new],
-  LinterLintCode.useSuperParametersMultiple: [ConvertToSuperParameters.new],
-  LinterLintCode.useTruncatingDivision: [UseEffectiveIntegerDivision.new],
+  diag.useKeyInWidgetConstructors: [AddKeyToConstructors.new],
+  diag.useNamedConstants: [ReplaceWithNamedConstant.new],
+  diag.useNullAwareElements: [ConvertNullCheckToNullAwareElementOrEntry.new],
+  diag.useRawStrings: [ConvertToRawString.new],
+  diag.useRethrowWhenPossible: [UseRethrow.new],
+  diag.useStringInPartOfDirectives: [ReplaceWithPartOrUriEmpty.new],
+  diag.useSuperParametersSingle: [ConvertToSuperParameters.new],
+  diag.useSuperParametersMultiple: [ConvertToSuperParameters.new],
+  diag.useTruncatingDivision: [UseEffectiveIntegerDivision.new],
 };
 
 final _builtInLintMultiGenerators = {
-  LinterLintCode.commentReferences: [
-    ImportLibrary.forType,
-    ImportLibrary.forExtension,
-  ],
-  LinterLintCode.deprecatedMemberUseFromSamePackageWithoutMessage: [
-    DataDriven.new,
-  ],
-  LinterLintCode.deprecatedMemberUseFromSamePackageWithMessage: [
-    DataDriven.new,
-  ],
+  diag.commentReferences: [ImportLibrary.forType, ImportLibrary.forExtension],
+  diag.deprecatedMemberUseFromSamePackageWithoutMessage: [DataDriven.new],
+  diag.deprecatedMemberUseFromSamePackageWithMessage: [DataDriven.new],
 };
 
 final _builtInNonLintGenerators = <DiagnosticCode, List<ProducerGenerator>>{
-  CompileTimeErrorCode.abstractFieldInitializer: [
+  diag.abstractFieldInitializer: [RemoveAbstract.new, RemoveInitializer.new],
+  diag.abstractFieldConstructorInitializer: [
     RemoveAbstract.new,
     RemoveInitializer.new,
   ],
-  CompileTimeErrorCode.abstractFieldConstructorInitializer: [
-    RemoveAbstract.new,
-    RemoveInitializer.new,
-  ],
-  CompileTimeErrorCode.assertInRedirectingConstructor: [RemoveAssertion.new],
-  CompileTimeErrorCode.assignmentToFinal: [MakeFieldNotFinal.new, AddLate.new],
-  CompileTimeErrorCode.assignmentToFinalLocal: [MakeVariableNotFinal.new],
-  CompileTimeErrorCode.argumentTypeNotAssignable: [
+  diag.assertInRedirectingConstructor: [RemoveAssertion.new],
+  diag.assignmentToFinal: [MakeFieldNotFinal.new, AddLate.new],
+  diag.assignmentToFinalLocal: [MakeVariableNotFinal.new],
+  diag.argumentTypeNotAssignable: [
     AddExplicitCast.new,
     AddNullCheck.new,
     WrapInText.new,
     AddAwait.argumentType,
   ],
-  CompileTimeErrorCode.asyncForInWrongContext: [AddAsync.new],
-  CompileTimeErrorCode.augmentationModifierExtra: [RemoveLexeme.modifier],
-  CompileTimeErrorCode.awaitInLateLocalVariableInitializer: [RemoveLate.new],
-  CompileTimeErrorCode.awaitInWrongContext: [AddAsync.new],
-  CompileTimeErrorCode.bodyMightCompleteNormally: [AddAsync.missingReturn],
-  CompileTimeErrorCode.castToNonType: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.classInstantiationAccessToStaticMember: [
-    RemoveTypeArguments.new,
-  ],
-  CompileTimeErrorCode.concreteClassWithAbstractMember: [
+  diag.asyncForInWrongContext: [AddAsync.new],
+  diag.augmentationModifierExtra: [RemoveLexeme.modifier],
+  diag.awaitInLateLocalVariableInitializer: [RemoveLate.new],
+  diag.awaitInWrongContext: [AddAsync.new],
+  diag.bodyMightCompleteNormally: [AddAsync.missingReturn],
+  diag.castToNonType: [ChangeTo.classOrMixin],
+  diag.classInstantiationAccessToStaticMember: [RemoveTypeArguments.new],
+  diag.concreteClassWithAbstractMember: [
     ConvertIntoBlockBody.missingBody,
     CreateNoSuchMethod.new,
     MakeClassAbstract.new,
   ],
-  CompileTimeErrorCode.constEvalMethodInvocation: [RemoveConst.new],
-  CompileTimeErrorCode.constInitializedWithNonConstantValue: [
-    RemoveConst.new,
-    RemoveNew.new,
-  ],
-  CompileTimeErrorCode.constInstanceField: [AddStatic.new],
-  CompileTimeErrorCode.constWithNonConst: [RemoveConst.new],
-  CompileTimeErrorCode.constWithNonType: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.constantPatternWithNonConstantExpression: [AddConst.new],
-  CompileTimeErrorCode.defaultValueOnRequiredParameter: [
+  diag.constEvalMethodInvocation: [RemoveConst.new],
+  diag.constInitializedWithNonConstantValue: [RemoveConst.new, RemoveNew.new],
+  diag.constInstanceField: [AddStatic.new],
+  diag.constWithNonConst: [RemoveConst.new],
+  diag.constWithNonType: [ChangeTo.classOrMixin],
+  diag.constantPatternWithNonConstantExpression: [AddConst.new],
+  diag.defaultValueOnRequiredParameter: [
     RemoveDefaultValue.new,
     RemoveRequired.new,
   ],
-  CompileTimeErrorCode.dotShorthandUndefinedGetter: [
+  diag.dotShorthandUndefinedGetter: [
     AddEnumConstant.new,
     ChangeTo.getterOrSetter,
     CreateGetter.new,
     CreateField.new,
   ],
-  CompileTimeErrorCode.dotShorthandUndefinedInvocation: [
+  diag.dotShorthandUndefinedInvocation: [
     ChangeTo.method,
     CreateConstructor.new,
     CreateMethod.method,
   ],
-  CompileTimeErrorCode.emptyMapPattern: [
+  diag.emptyMapPattern: [
     ReplaceEmptyMapPattern.any,
     ReplaceEmptyMapPattern.empty,
   ],
-  CompileTimeErrorCode.enumWithAbstractMember: [
-    ConvertIntoBlockBody.missingBody,
-  ],
-  CompileTimeErrorCode.extendsDisallowedClass: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  CompileTimeErrorCode.extendsNonClass: [
+  diag.enumWithAbstractMember: [ConvertIntoBlockBody.missingBody],
+  diag.extendsDisallowedClass: [RemoveNameFromDeclarationClause.new],
+  diag.extendsNonClass: [
     ChangeTo.classOrMixin,
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.extendsTypeAliasExpandsToTypeParameter: [
+  diag.extendsTypeAliasExpandsToTypeParameter: [
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.extensionDeclaresMemberOfObject: [
-    RemoveMethodDeclaration.new,
-  ],
-  CompileTimeErrorCode.extensionDeclaresInstanceField: [ConvertIntoGetter.new],
-  CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject: [
-    RemoveMethodDeclaration.new,
-  ],
-  CompileTimeErrorCode.extensionTypeDeclaresInstanceField: [
-    ConvertIntoGetter.new,
-  ],
-  CompileTimeErrorCode.extensionOverrideAccessToStaticMember: [
-    ReplaceWithExtensionName.new,
-  ],
-  CompileTimeErrorCode.extensionOverrideWithCascade: [
-    ReplaceCascadeWithDot.new,
-  ],
-  CompileTimeErrorCode.extensionTypeWithAbstractMember: [
-    ConvertIntoBlockBody.missingBody,
-  ],
-  CompileTimeErrorCode.extraPositionalArguments: [CreateConstructor.new],
-  CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed: [
+  diag.extensionDeclaresMemberOfObject: [RemoveMethodDeclaration.new],
+  diag.extensionDeclaresInstanceField: [ConvertIntoGetter.new],
+  diag.extensionTypeDeclaresMemberOfObject: [RemoveMethodDeclaration.new],
+  diag.extensionTypeDeclaresInstanceField: [ConvertIntoGetter.new],
+  diag.extensionOverrideAccessToStaticMember: [ReplaceWithExtensionName.new],
+  diag.extensionOverrideWithCascade: [ReplaceCascadeWithDot.new],
+  diag.extensionTypeWithAbstractMember: [ConvertIntoBlockBody.missingBody],
+  diag.extraPositionalArguments: [CreateConstructor.new],
+  diag.extraPositionalArgumentsCouldBeNamed: [
     CreateConstructor.new,
     ConvertToNamedArguments.new,
   ],
-  CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary: [
+  diag.finalClassExtendedOutsideOfLibrary: [
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary: [
+  diag.finalClassImplementedOutsideOfLibrary: [
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.finalNotInitialized: [
+  diag.finalNotInitialized: [
     AddLate.new,
     CreateConstructorForFinalFields.requiredNamed,
     CreateConstructorForFinalFields.requiredPositional,
   ],
-  CompileTimeErrorCode.finalNotInitializedConstructor1: [
+  diag.finalNotInitializedConstructor1: [
     AddFieldFormalParameters.new,
     AddFieldFormalParameters.requiredNamed,
   ],
-  CompileTimeErrorCode.finalNotInitializedConstructor2: [
+  diag.finalNotInitializedConstructor2: [
     AddFieldFormalParameters.new,
     AddFieldFormalParameters.requiredNamed,
   ],
-  CompileTimeErrorCode.finalNotInitializedConstructor3Plus: [
+  diag.finalNotInitializedConstructor3Plus: [
     AddFieldFormalParameters.new,
     AddFieldFormalParameters.requiredNamed,
   ],
-  CompileTimeErrorCode.forInOfInvalidType: [AddAwait.forIn],
-  CompileTimeErrorCode.illegalAsyncGeneratorReturnType: [
-    ReplaceReturnTypeStream.new,
-  ],
-  CompileTimeErrorCode.illegalAsyncReturnType: [
-    ReplaceReturnTypeFuture.new,
-    RemoveAsync.new,
-  ],
-  CompileTimeErrorCode.illegalSyncGeneratorReturnType: [
-    ReplaceReturnTypeIterable.new,
-  ],
-  CompileTimeErrorCode.implementsDisallowedClass: [
+  diag.forInOfInvalidType: [AddAwait.forIn],
+  diag.illegalAsyncGeneratorReturnType: [ReplaceReturnTypeStream.new],
+  diag.illegalAsyncReturnType: [ReplaceReturnTypeFuture.new, RemoveAsync.new],
+  diag.illegalSyncGeneratorReturnType: [ReplaceReturnTypeIterable.new],
+  diag.implementsDisallowedClass: [RemoveNameFromDeclarationClause.new],
+  diag.implementsNonClass: [ChangeTo.classOrMixin],
+  diag.implementsRepeated: [RemoveNameFromDeclarationClause.new],
+  diag.implementsSuperClass: [RemoveNameFromDeclarationClause.new],
+  diag.implementsTypeAliasExpandsToTypeParameter: [
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.implementsNonClass: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.implementsRepeated: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  CompileTimeErrorCode.implementsSuperClass: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  CompileTimeErrorCode.implementsTypeAliasExpandsToTypeParameter: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  CompileTimeErrorCode.implicitSuperInitializerMissingArguments: [
-    AddSuperParameter.new,
-  ],
-  CompileTimeErrorCode.implicitThisReferenceInInitializer: [
+  diag.implicitSuperInitializerMissingArguments: [AddSuperParameter.new],
+  diag.implicitThisReferenceInInitializer: [
     ConvertIntoGetter.implicitThis,
     AddLate.implicitThis,
   ],
-  CompileTimeErrorCode.importOfNonLibrary: [RemoveUnusedImport.new],
-  CompileTimeErrorCode.importInternalLibrary: [RemoveUnusedImport.new],
-  CompileTimeErrorCode.initializingFormalForNonExistentField: [
-    ChangeTo.field,
-    CreateField.new,
-  ],
-  CompileTimeErrorCode.instanceAccessToStaticMember: [ChangeToStaticAccess.new],
-  CompileTimeErrorCode.integerLiteralImpreciseAsDouble: [
-    ChangeToNearestPreciseValue.new,
-  ],
-  CompileTimeErrorCode.invalidAnnotation: [ChangeTo.annotation],
-  CompileTimeErrorCode.invalidAssignment: [
+  diag.importOfNonLibrary: [RemoveUnusedImport.new],
+  diag.importInternalLibrary: [RemoveUnusedImport.new],
+  diag.initializingFormalForNonExistentField: [ChangeTo.field, CreateField.new],
+  diag.instanceAccessToStaticMember: [ChangeToStaticAccess.new],
+  diag.integerLiteralImpreciseAsDouble: [ChangeToNearestPreciseValue.new],
+  diag.invalidAnnotation: [ChangeTo.annotation],
+  diag.invalidAssignment: [
     AddExplicitCast.new,
     AddNullCheck.new,
     ChangeTypeAnnotation.new,
     MakeVariableNullable.new,
     AddAwait.assignment,
   ],
-  CompileTimeErrorCode.invalidConstant: [RemoveConst.new],
-  CompileTimeErrorCode.invalidModifierOnConstructor: [RemoveLexeme.modifier],
-  CompileTimeErrorCode.invalidModifierOnSetter: [RemoveLexeme.modifier],
-  CompileTimeErrorCode.invalidUseOfCovariant: [RemoveLexeme.keyword],
-  CompileTimeErrorCode.invocationOfNonFunctionExpression: [
+  diag.invalidConstant: [RemoveConst.new],
+  diag.invalidModifierOnConstructor: [RemoveLexeme.modifier],
+  diag.invalidModifierOnSetter: [RemoveLexeme.modifier],
+  diag.invalidUseOfCovariant: [RemoveLexeme.keyword],
+  diag.invocationOfNonFunctionExpression: [
     RemoveParenthesesInGetterInvocation.new,
   ],
-  CompileTimeErrorCode.lateFinalLocalAlreadyAssigned: [
-    MakeVariableNotFinal.new,
-  ],
-  CompileTimeErrorCode.listElementTypeNotAssignableNullability: [
+  diag.lateFinalLocalAlreadyAssigned: [MakeVariableNotFinal.new],
+  diag.listElementTypeNotAssignableNullability: [
     ConvertToNullAwareListElement.new,
   ],
-  CompileTimeErrorCode.mapKeyTypeNotAssignableNullability: [
-    ConvertToNullAwareMapEntryKey.new,
-  ],
-  CompileTimeErrorCode.mapValueTypeNotAssignableNullability: [
+  diag.mapKeyTypeNotAssignableNullability: [ConvertToNullAwareMapEntryKey.new],
+  diag.mapValueTypeNotAssignableNullability: [
     ConvertToNullAwareMapEntryValue.new,
   ],
-  CompileTimeErrorCode.missingDefaultValueForParameter: [
+  diag.missingDefaultValueForParameter: [
     AddRequiredKeyword.new,
     MakeVariableNullable.new,
   ],
-  CompileTimeErrorCode.missingDefaultValueForParameterPositional: [
-    MakeVariableNullable.new,
-  ],
-  CompileTimeErrorCode.missingDefaultValueForParameterWithAnnotation: [
-    AddRequiredKeyword.new,
-  ],
-  CompileTimeErrorCode.missingRequiredArgument: [
-    AddMissingRequiredArgument.new,
-  ],
-  CompileTimeErrorCode.mixinApplicationNotImplementedInterface: [
-    ExtendClassForMixin.new,
-  ],
-  CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject: [
-    RemoveExtendsClause.new,
-  ],
-  CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase: [
-    AddClassModifier.baseModifier,
-  ],
-  CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase: [
-    AddClassModifier.baseModifier,
-  ],
-  CompileTimeErrorCode.mixinOfDisallowedClass: [
+  diag.missingDefaultValueForParameterPositional: [MakeVariableNullable.new],
+  diag.missingDefaultValueForParameterWithAnnotation: [AddRequiredKeyword.new],
+  diag.missingRequiredArgument: [AddMissingRequiredArgument.new],
+  diag.mixinApplicationNotImplementedInterface: [ExtendClassForMixin.new],
+  diag.mixinClassDeclarationExtendsNotObject: [RemoveExtendsClause.new],
+  diag.mixinSubtypeOfBaseIsNotBase: [AddClassModifier.baseModifier],
+  diag.mixinSubtypeOfFinalIsNotBase: [AddClassModifier.baseModifier],
+  diag.mixinOfDisallowedClass: [RemoveNameFromDeclarationClause.new],
+  diag.mixinOfNonClass: [ChangeTo.classOrMixin],
+  diag.mixinSuperClassConstraintDisallowedClass: [
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.mixinOfNonClass: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass: [
+  diag.mixinSuperClassConstraintNonInterface: [
     RemoveNameFromDeclarationClause.new,
   ],
-  CompileTimeErrorCode.mixinSuperClassConstraintNonInterface: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  CompileTimeErrorCode.newWithNonType: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.newWithUndefinedConstructor: [CreateConstructor.new],
-  CompileTimeErrorCode.noAnnotationConstructorArguments: [
-    AddEmptyArgumentList.new,
-  ],
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFivePlus: [
+  diag.newWithNonType: [ChangeTo.classOrMixin],
+  diag.newWithUndefinedConstructor: [CreateConstructor.new],
+  diag.noAnnotationConstructorArguments: [AddEmptyArgumentList.new],
+  diag.nonAbstractClassInheritsAbstractMemberFivePlus: [
     CreateMissingOverrides.new,
     CreateNoSuchMethod.new,
     MakeClassAbstract.new,
   ],
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFour: [
+  diag.nonAbstractClassInheritsAbstractMemberFour: [
     CreateMissingOverrides.new,
     CreateNoSuchMethod.new,
     MakeClassAbstract.new,
   ],
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne: [
+  diag.nonAbstractClassInheritsAbstractMemberOne: [
     CreateMissingOverrides.new,
     CreateNoSuchMethod.new,
     MakeClassAbstract.new,
   ],
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberThree: [
+  diag.nonAbstractClassInheritsAbstractMemberThree: [
     CreateMissingOverrides.new,
     CreateNoSuchMethod.new,
     MakeClassAbstract.new,
   ],
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo: [
+  diag.nonAbstractClassInheritsAbstractMemberTwo: [
     CreateMissingOverrides.new,
     CreateNoSuchMethod.new,
     MakeClassAbstract.new,
   ],
-  CompileTimeErrorCode.nonBoolCondition: [AddNeNull.new, AddAwait.nonBool],
-  CompileTimeErrorCode.nonConstGenerativeEnumConstructor: [AddConst.new],
-  CompileTimeErrorCode.nonConstantListElement: [RemoveConst.new],
-  CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary: [
-    RemoveConst.new,
-  ],
-  CompileTimeErrorCode.nonConstantMapElement: [RemoveConst.new],
-  CompileTimeErrorCode.nonConstantMapKey: [RemoveConst.new],
-  CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary: [RemoveConst.new],
-  CompileTimeErrorCode.nonConstantMapPatternKey: [AddConst.new],
-  CompileTimeErrorCode.nonConstantMapValue: [RemoveConst.new],
-  CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary: [
-    RemoveConst.new,
-  ],
-  CompileTimeErrorCode.nonConstantRelationalPatternExpression: [AddConst.new],
-  CompileTimeErrorCode.nonConstantSetElement: [RemoveConst.new],
-  CompileTimeErrorCode.nonExhaustiveSwitchExpression: [
-    AddMissingSwitchCases.new,
-  ],
-  CompileTimeErrorCode.nonExhaustiveSwitchStatement: [
-    AddMissingSwitchCases.new,
-  ],
-  CompileTimeErrorCode.nonFinalFieldInEnum: [MakeFinal.new],
-  CompileTimeErrorCode.notAType: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.notInitializedNonNullableInstanceField: [AddLate.new],
-  CompileTimeErrorCode.nullableTypeInExtendsClause: [RemoveQuestionMark.new],
-  CompileTimeErrorCode.nullableTypeInImplementsClause: [RemoveQuestionMark.new],
-  CompileTimeErrorCode.nullableTypeInOnClause: [RemoveQuestionMark.new],
-  CompileTimeErrorCode.nullableTypeInWithClause: [RemoveQuestionMark.new],
-  CompileTimeErrorCode.obsoleteColonForDefaultValue: [
-    ReplaceColonWithEquals.new,
-  ],
-  CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType: [
-    AddTrailingComma.new,
-  ],
-  CompileTimeErrorCode.returnOfInvalidTypeFromClosure: [
-    AddAsync.wrongReturnType,
-  ],
-  CompileTimeErrorCode.returnOfInvalidTypeFromFunction: [
+  diag.nonBoolCondition: [AddNeNull.new, AddAwait.nonBool],
+  diag.nonConstGenerativeEnumConstructor: [AddConst.new],
+  diag.nonConstantListElement: [RemoveConst.new],
+  diag.nonConstantListElementFromDeferredLibrary: [RemoveConst.new],
+  diag.nonConstantMapElement: [RemoveConst.new],
+  diag.nonConstantMapKey: [RemoveConst.new],
+  diag.nonConstantMapKeyFromDeferredLibrary: [RemoveConst.new],
+  diag.nonConstantMapPatternKey: [AddConst.new],
+  diag.nonConstantMapValue: [RemoveConst.new],
+  diag.nonConstantMapValueFromDeferredLibrary: [RemoveConst.new],
+  diag.nonConstantRelationalPatternExpression: [AddConst.new],
+  diag.nonConstantSetElement: [RemoveConst.new],
+  diag.nonExhaustiveSwitchExpression: [AddMissingSwitchCases.new],
+  diag.nonExhaustiveSwitchExpressionPrivate: [AddMissingSwitchCases.new],
+  diag.nonExhaustiveSwitchStatement: [AddMissingSwitchCases.new],
+  diag.nonExhaustiveSwitchStatementPrivate: [AddMissingSwitchCases.new],
+  diag.nonFinalFieldInEnum: [MakeFinal.new],
+  diag.notAType: [ChangeTo.classOrMixin],
+  diag.notInitializedNonNullableInstanceField: [AddLate.new],
+  diag.nullableTypeInExtendsClause: [RemoveQuestionMark.new],
+  diag.nullableTypeInImplementsClause: [RemoveQuestionMark.new],
+  diag.nullableTypeInOnClause: [RemoveQuestionMark.new],
+  diag.nullableTypeInWithClause: [RemoveQuestionMark.new],
+  diag.obsoleteColonForDefaultValue: [ReplaceColonWithEquals.new],
+  diag.recordLiteralOnePositionalNoTrailingCommaByType: [AddTrailingComma.new],
+  diag.returnOfInvalidTypeFromClosure: [AddAsync.wrongReturnType],
+  diag.returnOfInvalidTypeFromFunction: [
     AddAsync.wrongReturnType,
     MakeReturnTypeNullable.new,
     ReplaceReturnType.new,
   ],
-  CompileTimeErrorCode.returnOfInvalidTypeFromMethod: [
+  diag.returnOfInvalidTypeFromMethod: [
     AddAsync.wrongReturnType,
     MakeReturnTypeNullable.new,
     ReplaceReturnType.new,
   ],
-  CompileTimeErrorCode.setElementFromDeferredLibrary: [RemoveConst.new],
-  CompileTimeErrorCode.setElementTypeNotAssignableNullability: [
+  diag.setElementFromDeferredLibrary: [RemoveConst.new],
+  diag.setElementTypeNotAssignableNullability: [
     ConvertToNullAwareSetElement.new,
   ],
-  CompileTimeErrorCode.spreadExpressionFromDeferredLibrary: [RemoveConst.new],
-  CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed: [
+  diag.spreadExpressionFromDeferredLibrary: [RemoveConst.new],
+  diag.subtypeOfBaseIsNotBaseFinalOrSealed: [
     AddClassModifier.baseModifier,
     AddClassModifier.finalModifier,
     AddClassModifier.sealedModifier,
   ],
-  CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed: [
+  diag.subtypeOfFinalIsNotBaseFinalOrSealed: [
     AddClassModifier.baseModifier,
     AddClassModifier.finalModifier,
     AddClassModifier.sealedModifier,
   ],
-  CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated: [
+  diag.superFormalParameterTypeIsNotSubtypeOfAssociated: [
     RemoveTypeAnnotation.other,
   ],
-  CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed: [
+  diag.superFormalParameterWithoutAssociatedNamed: [
     ChangeTo.superFormalParameter,
+    AddMissingParameterNamed.new,
   ],
-  CompileTimeErrorCode.superInvocationNotLast: [MakeSuperInvocationLast.new],
-  CompileTimeErrorCode.switchCaseCompletesNormally: [AddSwitchCaseBreak.new],
-  CompileTimeErrorCode.typeTestWithUndefinedName: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.uncheckedInvocationOfNullableValue: [
+  diag.superInvocationNotLast: [MakeSuperInvocationLast.new],
+  diag.switchCaseCompletesNormally: [AddSwitchCaseBreak.new],
+  diag.typeTestWithUndefinedName: [ChangeTo.classOrMixin],
+  diag.uncheckedInvocationOfNullableValue: [
     AddNullCheck.new,
     ReplaceWithNullAware.single,
   ],
-  CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue: [
+  diag.uncheckedMethodInvocationOfNullableValue: [
     AddNullCheck.new,
     ExtractLocalVariable.new,
     ReplaceWithNullAware.single,
     CreateExtensionMethod.new,
   ],
-  CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue: [
+  diag.uncheckedOperatorInvocationOfNullableValue: [
     AddNullCheck.new,
     CreateExtensionOperator.new,
     CreateOperator.new,
   ],
-  CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue: [
+  diag.uncheckedPropertyAccessOfNullableValue: [
     AddNullCheck.new,
     ExtractLocalVariable.new,
     ReplaceWithNullAware.single,
     CreateExtensionGetter.new,
     CreateExtensionSetter.new,
   ],
-  CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition: [
-    AddNullCheck.new,
-  ],
-  CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator: [
-    AddNullCheck.new,
-  ],
-  CompileTimeErrorCode.uncheckedUseOfNullableValueInSpread: [
+  diag.uncheckedUseOfNullableValueAsCondition: [AddNullCheck.new],
+  diag.uncheckedUseOfNullableValueAsIterator: [AddNullCheck.new],
+  diag.uncheckedUseOfNullableValueInSpread: [
     AddNullCheck.new,
     ConvertToNullAwareSpread.new,
   ],
-  CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach: [
-    AddNullCheck.new,
-  ],
-  CompileTimeErrorCode.undefinedAnnotation: [ChangeTo.annotation],
-  CompileTimeErrorCode.undefinedClass: [ChangeTo.classOrMixin],
-  CompileTimeErrorCode.undefinedClassBoolean: [ReplaceBooleanWithBool.new],
-  CompileTimeErrorCode.undefinedEnumConstant: [
+  diag.uncheckedUseOfNullableValueInYieldEach: [AddNullCheck.new],
+  diag.undefinedAnnotation: [ChangeTo.annotation],
+  diag.undefinedClass: [ChangeTo.classOrMixin],
+  diag.undefinedClassBoolean: [ReplaceBooleanWithBool.new],
+  diag.undefinedEnumConstant: [
     AddEnumConstant.new,
     ChangeTo.getterOrSetter,
     CreateMethodOrFunction.new,
   ],
-  CompileTimeErrorCode.undefinedEnumConstructorNamed: [CreateConstructor.new],
-  CompileTimeErrorCode.undefinedEnumConstructorUnnamed: [CreateConstructor.new],
-  CompileTimeErrorCode.undefinedExtensionGetter: [
+  diag.undefinedEnumConstructorNamed: [CreateConstructor.new],
+  diag.undefinedEnumConstructorUnnamed: [CreateConstructor.new],
+  diag.undefinedExtensionGetter: [
     ChangeTo.getterOrSetter,
     CreateExtensionGetter.new,
     CreateExtensionMethod.new,
   ],
-  CompileTimeErrorCode.undefinedExtensionMethod: [
+  diag.undefinedExtensionMethod: [
     ChangeTo.method,
     CreateExtensionMethod.new,
     CreateMethod.method,
   ],
-  CompileTimeErrorCode.undefinedExtensionOperator: [
-    CreateExtensionOperator.new,
-  ],
-  CompileTimeErrorCode.undefinedExtensionSetter: [
+  diag.undefinedExtensionOperator: [CreateExtensionOperator.new],
+  diag.undefinedExtensionSetter: [
     ChangeTo.getterOrSetter,
     CreateSetter.new,
     CreateExtensionSetter.new,
   ],
-  CompileTimeErrorCode.undefinedFunction: [
-    ChangeTo.function,
-    CreateFunction.new,
-  ],
-  CompileTimeErrorCode.undefinedGetter: [
+  diag.undefinedFunction: [ChangeTo.function, CreateFunction.new],
+  diag.undefinedGetter: [
     ChangeTo.getterOrSetter,
     CreateExtensionMethod.new,
     CreateExtensionGetter.new,
@@ -963,7 +801,7 @@
     CreateLocalVariable.new,
     CreateMethodOrFunction.new,
   ],
-  CompileTimeErrorCode.undefinedIdentifier: [
+  diag.undefinedIdentifier: [
     ChangeTo.getterOrSetter,
     CreateField.new,
     CreateGetter.new,
@@ -975,386 +813,330 @@
     CreateExtensionMethod.new,
     CreateExtensionSetter.new,
   ],
-  CompileTimeErrorCode.undefinedIdentifierAwait: [AddAsync.new],
-  CompileTimeErrorCode.undefinedMethod: [
+  diag.undefinedIdentifierAwait: [AddAsync.new],
+  diag.undefinedMethod: [
     ChangeTo.method,
     CreateExtensionMethod.new,
     CreateFunction.new,
     CreateMethod.method,
   ],
-  CompileTimeErrorCode.undefinedNamedParameter: [
+  diag.undefinedNamedParameter: [
     AddMissingParameterNamed.new,
     ConvertFlutterChild.new,
     ConvertFlutterChildren.new,
   ],
-  CompileTimeErrorCode.undefinedOperator: [
-    CreateExtensionOperator.new,
-    CreateOperator.new,
-  ],
-  CompileTimeErrorCode.undefinedSetter: [
+  diag.undefinedOperator: [CreateExtensionOperator.new, CreateOperator.new],
+  diag.undefinedSetter: [
     ChangeTo.getterOrSetter,
     CreateExtensionSetter.new,
     CreateField.new,
     CreateSetter.new,
   ],
-  CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember: [
+  diag.unqualifiedReferenceToNonLocalStaticMember: [
     // TODO(brianwilkerson): Consider adding fixes to create a field, getter,
     //  method or setter. The existing _addFix methods would need to be
     //  updated so that only the appropriate subset is generated.
     QualifyReference.new,
   ],
-  CompileTimeErrorCode.unqualifiedReferenceToStaticMemberOfExtendedType: [
+  diag.unqualifiedReferenceToStaticMemberOfExtendedType: [
     // TODO(brianwilkerson): Consider adding fixes to create a field, getter,
     //  method or setter. The existing producers would need to be updated so
     //  that only the appropriate subset is generated.
     QualifyReference.new,
   ],
-  CompileTimeErrorCode.uriDoesNotExist: [CreateFile.new],
-  ParserErrorCode.variablePatternKeywordInDeclarationContext: [RemoveVar.new],
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor: [
+  diag.uriDoesNotExist: [CreateFile.new],
+  diag.variablePatternKeywordInDeclarationContext: [RemoveVar.new],
+  diag.wrongNumberOfTypeArgumentsConstructor: [
     MoveTypeArgumentsToClass.new,
     RemoveTypeArguments.new,
   ],
-  CompileTimeErrorCode.yieldOfInvalidType: [MakeReturnTypeNullable.new],
-  FfiCode.subtypeOfStructClassInExtends: [RemoveNameFromDeclarationClause.new],
-  FfiCode.subtypeOfStructClassInImplements: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  FfiCode.subtypeOfStructClassInWith: [RemoveNameFromDeclarationClause.new],
-  HintCode.deprecatedColonForDefaultValue: [ReplaceColonWithEquals.new],
-  HintCode.unnecessaryImport: [RemoveUnusedImport.new],
-  ParserErrorCode.abstractClassMember: [RemoveAbstract.bulkFixable],
-  ParserErrorCode.abstractStaticField: [RemoveLexeme.modifier],
-  ParserErrorCode.abstractStaticMethod: [RemoveLexeme.modifier],
-  ParserErrorCode.colonInPlaceOfIn: [ReplaceColonWithIn.new],
-  ParserErrorCode.constClass: [RemoveConst.new],
-  ParserErrorCode.constFactory: [RemoveConst.new],
-  ParserErrorCode.constMethod: [RemoveConst.new],
-  ParserErrorCode.covariantMember: [RemoveLexeme.modifier],
-  ParserErrorCode.defaultInSwitchExpression: [ReplaceWithWildcard.new],
-  ParserErrorCode.duplicatedModifier: [RemoveLexeme.modifier],
-  ParserErrorCode.emptyRecordLiteralWithComma: [RemoveComma.emptyRecordLiteral],
-  ParserErrorCode.emptyRecordTypeWithComma: [RemoveComma.emptyRecordType],
-  ParserErrorCode.expectedCatchClauseBody: [InsertBody.new],
-  ParserErrorCode.expectedClassBody: [InsertBody.new],
-  ParserErrorCode.expectedExtensionBody: [InsertBody.new],
-  ParserErrorCode.expectedExtensionTypeBody: [InsertBody.new],
-  ParserErrorCode.expectedFinallyClauseBody: [InsertBody.new],
-  ParserErrorCode.expectedMixinBody: [InsertBody.new],
-  ParserErrorCode.expectedSwitchExpressionBody: [InsertBody.new],
-  ParserErrorCode.expectedSwitchStatementBody: [InsertBody.new],
-  ParserErrorCode.expectedTryStatementBody: [InsertBody.new],
-  ParserErrorCode.expectedToken: [
+  diag.yieldOfInvalidType: [MakeReturnTypeNullable.new],
+  diag.subtypeOfStructClassInExtends: [RemoveNameFromDeclarationClause.new],
+  diag.subtypeOfStructClassInImplements: [RemoveNameFromDeclarationClause.new],
+  diag.subtypeOfStructClassInWith: [RemoveNameFromDeclarationClause.new],
+  diag.deprecatedColonForDefaultValue: [ReplaceColonWithEquals.new],
+  diag.unnecessaryImport: [RemoveUnusedImport.new],
+  diag.abstractClassMember: [RemoveAbstract.bulkFixable],
+  diag.abstractStaticField: [RemoveLexeme.modifier],
+  diag.abstractStaticMethod: [RemoveLexeme.modifier],
+  diag.colonInPlaceOfIn: [ReplaceColonWithIn.new],
+  diag.constClass: [RemoveConst.new],
+  diag.constFactory: [RemoveConst.new],
+  diag.constMethod: [RemoveConst.new],
+  diag.covariantMember: [RemoveLexeme.modifier],
+  diag.defaultInSwitchExpression: [ReplaceWithWildcard.new],
+  diag.duplicatedModifier: [RemoveLexeme.modifier],
+  diag.emptyRecordLiteralWithComma: [RemoveComma.emptyRecordLiteral],
+  diag.emptyRecordTypeWithComma: [RemoveComma.emptyRecordType],
+  diag.expectedCatchClauseBody: [InsertBody.new],
+  diag.expectedClassBody: [InsertBody.new],
+  diag.expectedExtensionBody: [InsertBody.new],
+  diag.expectedExtensionTypeBody: [InsertBody.new],
+  diag.expectedFinallyClauseBody: [InsertBody.new],
+  diag.expectedMixinBody: [InsertBody.new],
+  diag.expectedSwitchExpressionBody: [InsertBody.new],
+  diag.expectedSwitchStatementBody: [InsertBody.new],
+  diag.expectedTryStatementBody: [InsertBody.new],
+  diag.expectedToken: [
     InsertSemicolon.new,
     ReplaceWithArrow.new,
     InsertOnKeyword.new,
   ],
-  ParserErrorCode.extensionAugmentationHasOnClause: [RemoveOnClause.new],
-  ParserErrorCode.extensionDeclaresConstructor: [RemoveConstructor.new],
-  ParserErrorCode.externalClass: [RemoveLexeme.modifier],
-  ParserErrorCode.externalEnum: [RemoveLexeme.modifier],
-  ParserErrorCode.externalTypedef: [RemoveLexeme.modifier],
-  ParserErrorCode.extraneousModifier: [RemoveLexeme.modifier],
-  ParserErrorCode.factoryTopLevelDeclaration: [RemoveLexeme.modifier],
-  ParserErrorCode.finalEnum: [RemoveLexeme.modifier],
-  ParserErrorCode.finalConstructor: [RemoveLexeme.modifier],
-  ParserErrorCode.finalMethod: [RemoveLexeme.modifier],
-  ParserErrorCode.finalMixin: [RemoveLexeme.modifier],
-  ParserErrorCode.finalMixinClass: [RemoveLexeme.modifier],
-  ParserErrorCode.getterConstructor: [RemoveLexeme.keyword],
-  ParserErrorCode.getterWithParameters: [
-    RemoveParametersInGetterDeclaration.new,
-  ],
-  ParserErrorCode.interfaceMixin: [RemoveLexeme.modifier],
-  ParserErrorCode.interfaceMixinClass: [RemoveLexeme.modifier],
-  ParserErrorCode.invalidConstantPatternBinary: [AddConst.new],
-  ParserErrorCode.invalidConstantPatternGeneric: [AddConst.new],
-  ParserErrorCode.invalidConstantPatternNegation: [AddConst.new],
-  ParserErrorCode.invalidInsideUnaryPattern: [SurroundWithParentheses.new],
-  ParserErrorCode.invalidUseOfCovariantInExtension: [RemoveLexeme.modifier],
-  ParserErrorCode.latePatternVariableDeclaration: [RemoveLate.new],
-  ParserErrorCode.literalWithNew: [RemoveLexeme.keyword],
-  ParserErrorCode.missingConstFinalVarOrType: [AddTypeAnnotation.new],
-  ParserErrorCode.missingEnumBody: [InsertBody.new],
-  ParserErrorCode.missingFunctionBody: [ConvertIntoBlockBody.missingBody],
-  ParserErrorCode.missingTypedefParameters: [AddEmptyArgumentList.new],
-  ParserErrorCode.mixinDeclaresConstructor: [RemoveConstructor.new],
-  ParserErrorCode.patternAssignmentDeclaresVariable: [RemoveVarKeyword.new],
-  ParserErrorCode.recordLiteralOnePositionalNoTrailingComma: [
-    AddTrailingComma.new,
-  ],
-  ParserErrorCode.recordTypeOnePositionalNoTrailingComma: [
-    AddTrailingComma.new,
-  ],
-  ParserErrorCode.representationFieldTrailingComma: [
-    RemoveComma.representationField,
-  ],
-  ParserErrorCode.sealedMixin: [RemoveLexeme.modifier],
-  ParserErrorCode.sealedMixinClass: [RemoveLexeme.modifier],
-  ParserErrorCode.setterConstructor: [RemoveLexeme.keyword],
-  ParserErrorCode.staticConstructor: [RemoveLexeme.keyword],
-  ParserErrorCode.staticGetterWithoutBody: [ConvertIntoBlockBody.missingBody],
-  ParserErrorCode.staticSetterWithoutBody: [ConvertIntoBlockBody.missingBody],
-  ParserErrorCode.staticOperator: [RemoveLexeme.keyword],
-  ParserErrorCode.varAndType: [
-    RemoveTypeAnnotation.fixVarAndType,
-    RemoveVar.new,
-  ],
-  ParserErrorCode.varAsTypeName: [ReplaceVarWithDynamic.new],
-  ParserErrorCode.varReturnType: [RemoveVar.new],
-  ParserErrorCode.wrongSeparatorForPositionalParameter: [
-    ReplaceColonWithEquals.new,
-  ],
-  ScannerErrorCode.unexpectedSeparatorInNumber: [
-    RemoveUnexpectedUnderscores.new,
-  ],
-  StaticWarningCode.deadNullAwareExpression: [RemoveDeadIfNull.new],
-  StaticWarningCode.invalidNullAwareElement: [
-    ReplaceWithNotNullAwareElementOrEntry.entry,
-  ],
-  StaticWarningCode.invalidNullAwareMapEntryKey: [
+  diag.extensionAugmentationHasOnClause: [RemoveOnClause.new],
+  diag.extensionDeclaresConstructor: [RemoveConstructor.new],
+  diag.externalClass: [RemoveLexeme.modifier],
+  diag.externalEnum: [RemoveLexeme.modifier],
+  diag.externalTypedef: [RemoveLexeme.modifier],
+  diag.extraneousModifier: [RemoveLexeme.modifier],
+  diag.factoryTopLevelDeclaration: [RemoveLexeme.modifier],
+  diag.finalEnum: [RemoveLexeme.modifier],
+  diag.finalConstructor: [RemoveLexeme.modifier],
+  diag.finalMethod: [RemoveLexeme.modifier],
+  diag.finalMixin: [RemoveLexeme.modifier],
+  diag.finalMixinClass: [RemoveLexeme.modifier],
+  diag.getterConstructor: [RemoveLexeme.keyword],
+  diag.getterWithParameters: [RemoveParametersInGetterDeclaration.new],
+  diag.interfaceMixin: [RemoveLexeme.modifier],
+  diag.interfaceMixinClass: [RemoveLexeme.modifier],
+  diag.invalidConstantPatternBinary: [AddConst.new],
+  diag.invalidConstantPatternGeneric: [AddConst.new],
+  diag.invalidConstantPatternNegation: [AddConst.new],
+  diag.invalidInsideUnaryPattern: [SurroundWithParentheses.new],
+  diag.invalidUseOfCovariantInExtension: [RemoveLexeme.modifier],
+  diag.latePatternVariableDeclaration: [RemoveLate.new],
+  diag.literalWithNew: [RemoveLexeme.keyword],
+  diag.missingConstFinalVarOrType: [AddTypeAnnotation.new],
+  diag.missingEnumBody: [InsertBody.new],
+  diag.missingFunctionBody: [ConvertIntoBlockBody.missingBody],
+  diag.missingTypedefParameters: [AddEmptyArgumentList.new],
+  diag.mixinDeclaresConstructor: [RemoveConstructor.new],
+  diag.patternAssignmentDeclaresVariable: [RemoveVarKeyword.new],
+  diag.recordLiteralOnePositionalNoTrailingComma: [AddTrailingComma.new],
+  diag.recordTypeOnePositionalNoTrailingComma: [AddTrailingComma.new],
+  diag.representationFieldTrailingComma: [RemoveComma.representationField],
+  diag.sealedMixin: [RemoveLexeme.modifier],
+  diag.sealedMixinClass: [RemoveLexeme.modifier],
+  diag.setterConstructor: [RemoveLexeme.keyword],
+  diag.staticConstructor: [RemoveLexeme.keyword],
+  diag.staticGetterWithoutBody: [ConvertIntoBlockBody.missingBody],
+  diag.staticSetterWithoutBody: [ConvertIntoBlockBody.missingBody],
+  diag.staticOperator: [RemoveLexeme.keyword],
+  diag.varAndType: [RemoveTypeAnnotation.fixVarAndType, RemoveVar.new],
+  diag.varAsTypeName: [ReplaceVarWithDynamic.new],
+  diag.varReturnType: [RemoveVar.new],
+  diag.wrongSeparatorForPositionalParameter: [ReplaceColonWithEquals.new],
+  diag.unexpectedSeparatorInNumber: [RemoveUnexpectedUnderscores.new],
+  diag.deadNullAwareExpression: [RemoveDeadIfNull.new],
+  diag.invalidNullAwareElement: [ReplaceWithNotNullAwareElementOrEntry.entry],
+  diag.invalidNullAwareMapEntryKey: [
     ReplaceWithNotNullAwareElementOrEntry.mapKey,
   ],
-  StaticWarningCode.invalidNullAwareMapEntryValue: [
+  diag.invalidNullAwareMapEntryValue: [
     ReplaceWithNotNullAwareElementOrEntry.mapValue,
   ],
-  StaticWarningCode.invalidNullAwareOperator: [ReplaceWithNotNullAware.new],
-  StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit: [
-    ReplaceWithNotNullAware.new,
-  ],
-  StaticWarningCode.missingEnumConstantInSwitch: [
-    AddMissingEnumCaseClauses.new,
-  ],
-  StaticWarningCode.unnecessaryNonNullAssertion: [RemoveNonNullAssertion.new],
-  StaticWarningCode.unnecessaryNullCheckPattern: [RemoveQuestionMark.new],
-  StaticWarningCode.unnecessaryNullAssertPattern: [RemoveNonNullAssertion.new],
-  WarningCode.bodyMightCompleteNormallyNullable: [AddReturnNull.new],
-  WarningCode.deadCode: [RemoveDeadCode.new],
-  WarningCode.deadCodeCatchFollowingCatch: [
+  diag.invalidNullAwareOperator: [ReplaceWithNotNullAware.new],
+  diag.invalidNullAwareOperatorAfterShortCircuit: [ReplaceWithNotNullAware.new],
+  diag.missingEnumConstantInSwitch: [AddMissingEnumCaseClauses.new],
+  diag.unnecessaryNonNullAssertion: [RemoveNonNullAssertion.new],
+  diag.unnecessaryNullCheckPattern: [RemoveQuestionMark.new],
+  diag.unnecessaryNullAssertPattern: [RemoveNonNullAssertion.new],
+  diag.bodyMightCompleteNormallyNullable: [AddReturnNull.new],
+  diag.deadCode: [RemoveDeadCode.new],
+  diag.deadCodeCatchFollowingCatch: [
     // TODO(brianwilkerson): Add a fix to move the unreachable catch clause to
     //  a place where it can be reached (when possible).
     RemoveDeadCode.new,
   ],
-  WarningCode.deadCodeLateWildcardVariableInitializer: [
+  diag.deadCodeLateWildcardVariableInitializer: [
     RemoveInitializer.notLate,
     RemoveLate.new,
   ],
-  WarningCode.deadCodeOnCatchSubtype: [
+  diag.deadCodeOnCatchSubtype: [
     // TODO(brianwilkerson): Add a fix to move the unreachable catch clause to
     //  a place where it can be reached (when possible).
     RemoveDeadCode.new,
   ],
-  WarningCode.deprecatedExtend: [RemoveExtendsClause.new],
-  WarningCode.deprecatedImplement: [RemoveNameFromDeclarationClause.new],
-  WarningCode.deprecatedImplementsFunction: [
-    RemoveNameFromDeclarationClause.new,
-  ],
-  WarningCode.deprecatedNewInCommentReference: [
+  diag.deprecatedExtend: [RemoveExtendsClause.new],
+  diag.deprecatedImplement: [RemoveNameFromDeclarationClause.new],
+  diag.deprecatedImplementsFunction: [RemoveNameFromDeclarationClause.new],
+  diag.deprecatedNewInCommentReference: [
     RemoveDeprecatedNewInCommentReference.new,
   ],
-  WarningCode.deprecatedSubclass: [RemoveNameFromDeclarationClause.new],
-  WarningCode.duplicateHiddenName: [RemoveNameFromCombinator.new],
-  WarningCode.duplicateImport: [RemoveUnusedImport.new],
-  WarningCode.duplicateShownName: [RemoveNameFromCombinator.new],
-  WarningCode.invalidAnnotationTarget: [RemoveAnnotation.new],
-  WarningCode.invalidInternalAnnotation: [RemoveAnnotation.new],
-  WarningCode.invalidLiteralAnnotation: [RemoveAnnotation.new],
-  WarningCode.invalidNonVirtualAnnotation: [RemoveAnnotation.new],
-  WarningCode.invalidReopenAnnotation: [RemoveAnnotation.new],
-  WarningCode.invalidVisibilityAnnotation: [RemoveAnnotation.new],
-  WarningCode.invalidVisibleForOverridingAnnotation: [RemoveAnnotation.new],
-  WarningCode.missingOverrideOfMustBeOverriddenOne: [
-    CreateMissingOverrides.new,
-  ],
-  WarningCode.missingOverrideOfMustBeOverriddenTwo: [
-    CreateMissingOverrides.new,
-  ],
-  WarningCode.missingOverrideOfMustBeOverriddenThreePlus: [
-    CreateMissingOverrides.new,
-  ],
-  WarningCode.missingRequiredParam: [AddMissingRequiredArgument.new],
-  WarningCode.missingRequiredParamWithDetails: [AddMissingRequiredArgument.new],
-  WarningCode.mustCallSuper: [AddCallSuper.new],
-  WarningCode.nonConstCallToLiteralConstructorUsingNew: [
-    ReplaceNewWithConst.new,
-  ],
-  WarningCode.nullCheckAlwaysFails: [RemoveNonNullAssertion.new],
-  WarningCode.nullableTypeInCatchClause: [RemoveQuestionMark.new],
-  WarningCode.overrideOnNonOverridingField: [RemoveAnnotation.new],
-  WarningCode.overrideOnNonOverridingGetter: [RemoveAnnotation.new],
-  WarningCode.overrideOnNonOverridingMethod: [RemoveAnnotation.new],
-  WarningCode.overrideOnNonOverridingSetter: [RemoveAnnotation.new],
-  WarningCode.redeclareOnNonRedeclaringMember: [RemoveAnnotation.new],
-  WarningCode.sdkVersionGtGtGtOperator: [UpdateSdkConstraints.version_2_14_0],
-  WarningCode.textDirectionCodePointInComment: [
+  diag.deprecatedSubclass: [RemoveNameFromDeclarationClause.new],
+  diag.duplicateHiddenName: [RemoveNameFromCombinator.new],
+  diag.duplicateImport: [RemoveUnusedImport.new],
+  diag.duplicateShownName: [RemoveNameFromCombinator.new],
+  diag.invalidAnnotationTarget: [RemoveAnnotation.new],
+  diag.invalidInternalAnnotation: [RemoveAnnotation.new],
+  diag.invalidLiteralAnnotation: [RemoveAnnotation.new],
+  diag.invalidNonVirtualAnnotation: [RemoveAnnotation.new],
+  diag.invalidReopenAnnotation: [RemoveAnnotation.new],
+  diag.invalidVisibilityAnnotation: [RemoveAnnotation.new],
+  diag.invalidVisibleForOverridingAnnotation: [RemoveAnnotation.new],
+  diag.missingOverrideOfMustBeOverriddenOne: [CreateMissingOverrides.new],
+  diag.missingOverrideOfMustBeOverriddenTwo: [CreateMissingOverrides.new],
+  diag.missingOverrideOfMustBeOverriddenThreePlus: [CreateMissingOverrides.new],
+  diag.missingRequiredParam: [AddMissingRequiredArgument.new],
+  diag.missingRequiredParamWithDetails: [AddMissingRequiredArgument.new],
+  diag.mustCallSuper: [AddCallSuper.new],
+  diag.nonConstCallToLiteralConstructorUsingNew: [ReplaceNewWithConst.new],
+  diag.nullCheckAlwaysFails: [RemoveNonNullAssertion.new],
+  diag.nullableTypeInCatchClause: [RemoveQuestionMark.new],
+  diag.overrideOnNonOverridingField: [RemoveAnnotation.new],
+  diag.overrideOnNonOverridingGetter: [RemoveAnnotation.new],
+  diag.overrideOnNonOverridingMethod: [RemoveAnnotation.new],
+  diag.overrideOnNonOverridingSetter: [RemoveAnnotation.new],
+  diag.redeclareOnNonRedeclaringMember: [RemoveAnnotation.new],
+  diag.sdkVersionGtGtGtOperator: [UpdateSdkConstraints.version_2_14_0],
+  diag.textDirectionCodePointInComment: [
     RemoveCharacter.new,
     ReplaceWithUnicodeEscape.new,
   ],
-  WarningCode.textDirectionCodePointInLiteral: [
+  diag.textDirectionCodePointInLiteral: [
     RemoveCharacter.new,
     ReplaceWithUnicodeEscape.new,
   ],
-  WarningCode.typeCheckIsNotNull: [UseNotEqNull.new],
-  WarningCode.typeCheckIsNull: [UseEqEqNull.new],
-  WarningCode.undefinedHiddenName: [RemoveNameFromCombinator.new],
-  WarningCode.undefinedShownName: [RemoveNameFromCombinator.new],
-  WarningCode.unnecessaryCast: [RemoveUnnecessaryCast.new],
-  WarningCode.unnecessaryFinal: [RemoveUnnecessaryFinal.new],
-  WarningCode.unnecessaryNanComparisonFalse: [
+  diag.typeCheckIsNotNull: [UseNotEqNull.new],
+  diag.typeCheckIsNull: [UseEqEqNull.new],
+  diag.undefinedHiddenName: [RemoveNameFromCombinator.new],
+  diag.undefinedShownName: [RemoveNameFromCombinator.new],
+  diag.unnecessaryCast: [RemoveUnnecessaryCast.new],
+  diag.unnecessaryFinal: [RemoveUnnecessaryFinal.new],
+  diag.unnecessaryNanComparisonFalse: [
     RemoveComparison.new,
     ReplaceWithIsNan.new,
   ],
-  WarningCode.unnecessaryNanComparisonTrue: [
+  diag.unnecessaryNanComparisonTrue: [
     RemoveComparison.new,
     ReplaceWithIsNan.new,
   ],
-  WarningCode.unnecessaryNullComparisonAlwaysNullFalse: [RemoveComparison.new],
-  WarningCode.unnecessaryNullComparisonAlwaysNullTrue: [RemoveComparison.new],
-  WarningCode.unnecessaryNullComparisonNeverNullFalse: [RemoveComparison.new],
-  WarningCode.unnecessaryNullComparisonNeverNullTrue: [RemoveComparison.new],
-  WarningCode.unnecessaryQuestionMark: [RemoveQuestionMark.new],
-  WarningCode.unnecessarySetLiteral: [ConvertIntoBlockBody.setLiteral],
-  WarningCode.unnecessaryTypeCheckFalse: [RemoveComparison.typeCheck],
-  WarningCode.unnecessaryTypeCheckTrue: [RemoveComparison.typeCheck],
-  WarningCode.unnecessaryWildcardPattern: [
-    RemoveUnnecessaryWildcardPattern.new,
-  ],
-  WarningCode.unreachableSwitchCase: [RemoveDeadCode.new],
-  WarningCode.unreachableSwitchDefault: [RemoveDeadCode.new],
-  WarningCode.unusedCatchClause: [RemoveUnusedCatchClause.new],
-  WarningCode.unusedCatchStack: [RemoveUnusedCatchStack.new],
-  WarningCode.unusedElement: [RemoveUnusedElement.new],
-  WarningCode.unusedElementParameter: [RemoveUnusedParameter.new],
-  WarningCode.unusedField: [RemoveUnusedField.new],
-  WarningCode.unusedImport: [RemoveUnusedImport.new],
-  WarningCode.unusedLabel: [RemoveUnusedLabel.new],
-  WarningCode.unusedLocalVariable: [
+  diag.unnecessaryNullComparisonAlwaysNullFalse: [RemoveComparison.new],
+  diag.unnecessaryNullComparisonAlwaysNullTrue: [RemoveComparison.new],
+  diag.unnecessaryNullComparisonNeverNullFalse: [RemoveComparison.new],
+  diag.unnecessaryNullComparisonNeverNullTrue: [RemoveComparison.new],
+  diag.unnecessaryQuestionMark: [RemoveQuestionMark.new],
+  diag.unnecessarySetLiteral: [ConvertIntoBlockBody.setLiteral],
+  diag.unnecessaryTypeCheckFalse: [RemoveComparison.typeCheck],
+  diag.unnecessaryTypeCheckTrue: [RemoveComparison.typeCheck],
+  diag.unnecessaryWildcardPattern: [RemoveUnnecessaryWildcardPattern.new],
+  diag.unreachableSwitchCase: [RemoveDeadCode.new],
+  diag.unreachableSwitchDefault: [RemoveDeadCode.new],
+  diag.unusedCatchClause: [RemoveUnusedCatchClause.new],
+  diag.unusedCatchStack: [RemoveUnusedCatchStack.new],
+  diag.unusedElement: [RemoveUnusedElement.new],
+  diag.unusedElementParameter: [RemoveUnusedParameter.new],
+  diag.unusedField: [RemoveUnusedField.new],
+  diag.unusedImport: [RemoveUnusedImport.new],
+  diag.unusedLabel: [RemoveUnusedLabel.new],
+  diag.unusedLocalVariable: [
     RemoveUnusedLocalVariable.new,
     ConvertToWildcardVariable.new,
   ],
-  WarningCode.unusedShownName: [
-    OrganizeImports.new,
-    RemoveNameFromCombinator.new,
-  ],
+  diag.unusedShownName: [OrganizeImports.new, RemoveNameFromCombinator.new],
 };
 
 final _builtInNonLintMultiGenerators = {
-  CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo: [
-    AddExtensionOverride.new,
-  ],
-  CompileTimeErrorCode.ambiguousExtensionMemberAccessThreeOrMore: [
-    AddExtensionOverride.new,
-  ],
-  CompileTimeErrorCode.ambiguousImport: [AmbiguousImportFix.new],
-  CompileTimeErrorCode.argumentTypeNotAssignable: [DataDriven.new],
-  CompileTimeErrorCode.castToNonType: [
+  diag.ambiguousExtensionMemberAccessTwo: [AddExtensionOverride.new],
+  diag.ambiguousExtensionMemberAccessThreeOrMore: [AddExtensionOverride.new],
+  diag.ambiguousImport: [AmbiguousImportFix.new],
+  diag.argumentTypeNotAssignable: [DataDriven.new],
+  diag.castToNonType: [
     CreateClass.new,
     CreateMixin.new,
     DataDriven.new,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.constWithNonType: [
-    CreateClass.new,
-    ImportLibrary.forType,
-  ],
-  CompileTimeErrorCode.dotShorthandUndefinedGetter: [DataDriven.new],
-  CompileTimeErrorCode.dotShorthandUndefinedInvocation: [DataDriven.new],
-  CompileTimeErrorCode.extendsNonClass: [
+  diag.constWithNonType: [CreateClass.new, ImportLibrary.forType],
+  diag.dotShorthandUndefinedGetter: [DataDriven.new],
+  diag.dotShorthandUndefinedInvocation: [DataDriven.new],
+  diag.extendsNonClass: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.extraPositionalArguments: [
+  diag.extraPositionalArguments: [AddMissingParameter.new, DataDriven.new],
+  diag.extraPositionalArgumentsCouldBeNamed: [
     AddMissingParameter.new,
     DataDriven.new,
   ],
-  CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed: [
-    AddMissingParameter.new,
-    DataDriven.new,
-  ],
-  CompileTimeErrorCode.implementsNonClass: [
+  diag.implementsNonClass: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.implicitSuperInitializerMissingArguments: [
+  diag.implicitSuperInitializerMissingArguments: [
     AddSuperConstructorInvocation.new,
   ],
-  CompileTimeErrorCode.invalidAnnotation: [
+  diag.invalidAnnotation: [
     CreateClass.new,
     ImportLibrary.forTopLevelVariable,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.invalidOverride: [DataDriven.new],
-  CompileTimeErrorCode.invalidOverrideSetter: [DataDriven.new],
-  CompileTimeErrorCode.missingRequiredArgument: [DataDriven.new],
-  CompileTimeErrorCode.mixinOfNonClass: [
+  diag.invalidOverride: [DataDriven.new],
+  diag.invalidOverrideSetter: [DataDriven.new],
+  diag.missingRequiredArgument: [DataDriven.new],
+  diag.mixinOfNonClass: [
     CreateClass.new,
     CreateMixin.new,
     DataDriven.new,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.mixinWithNonClassSuperclass: [
-    CreateClass.new,
-    ImportLibrary.forType,
-  ],
-  CompileTimeErrorCode.newWithNonType: [CreateClass.new, ImportLibrary.forType],
-  CompileTimeErrorCode.newWithUndefinedConstructorDefault: [DataDriven.new],
-  CompileTimeErrorCode.noDefaultSuperConstructorExplicit: [
-    AddSuperConstructorInvocation.new,
-  ],
-  CompileTimeErrorCode.noDefaultSuperConstructorImplicit: [
+  diag.mixinWithNonClassSuperclass: [CreateClass.new, ImportLibrary.forType],
+  diag.newWithNonType: [CreateClass.new, ImportLibrary.forType],
+  diag.newWithUndefinedConstructorDefault: [DataDriven.new],
+  diag.noDefaultSuperConstructorExplicit: [AddSuperConstructorInvocation.new],
+  diag.noDefaultSuperConstructorImplicit: [
     AddSuperConstructorInvocation.new,
     CreateConstructorSuper.new,
   ],
-  CompileTimeErrorCode.nonTypeInCatchClause: [ImportLibrary.forType],
-  CompileTimeErrorCode.nonTypeAsTypeArgument: [
+  diag.nonTypeInCatchClause: [ImportLibrary.forType],
+  diag.nonTypeAsTypeArgument: [
     CreateClass.new,
     CreateMixin.new,
     DataDriven.new,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.notAType: [
-    CreateClass.new,
-    ImportLibrary.forType,
-    CreateMixin.new,
-  ],
-  CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural: [DataDriven.new],
-  CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular: [
-    DataDriven.new,
-  ],
-  CompileTimeErrorCode.notEnoughPositionalArgumentsPlural: [DataDriven.new],
-  CompileTimeErrorCode.notEnoughPositionalArgumentsSingular: [DataDriven.new],
-  CompileTimeErrorCode.typeTestWithUndefinedName: [
+  diag.notAType: [CreateClass.new, ImportLibrary.forType, CreateMixin.new],
+  diag.notEnoughPositionalArgumentsNamePlural: [DataDriven.new],
+  diag.notEnoughPositionalArgumentsNameSingular: [DataDriven.new],
+  diag.notEnoughPositionalArgumentsPlural: [DataDriven.new],
+  diag.notEnoughPositionalArgumentsSingular: [DataDriven.new],
+  diag.typeTestWithUndefinedName: [
     CreateClass.new,
     CreateMixin.new,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue: [
+  diag.positionalSuperFormalParameterWithPositionalArgument: [
+    AddMissingParameter.new,
+  ],
+  diag.superFormalParameterWithoutAssociatedPositional: [
+    AddMissingParameter.new,
+  ],
+  diag.uncheckedMethodInvocationOfNullableValue: [
     ImportLibrary.forExtensionMember,
   ],
-  CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue: [
+  diag.uncheckedOperatorInvocationOfNullableValue: [
     ImportLibrary.forExtensionMember,
   ],
-  CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue: [
+  diag.uncheckedPropertyAccessOfNullableValue: [
     ImportLibrary.forExtensionMember,
   ],
-  CompileTimeErrorCode.undefinedAnnotation: [
+  diag.undefinedAnnotation: [
     CreateClass.new,
     ImportLibrary.forTopLevelVariable,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.undefinedClass: [
+  diag.undefinedClass: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forType,
     CreateMixin.new,
   ],
-  CompileTimeErrorCode.undefinedConstructorInInitializerDefault: [
+  diag.undefinedConstructorInInitializerDefault: [
     AddSuperConstructorInvocation.new,
   ],
-  CompileTimeErrorCode.undefinedExtensionGetter: [DataDriven.new],
-  CompileTimeErrorCode.undefinedFunction: [
+  diag.undefinedExtensionGetter: [DataDriven.new],
+  diag.undefinedFunction: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forExtension,
@@ -1362,7 +1144,7 @@
     ImportLibrary.forFunction,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.undefinedGetter: [
+  diag.undefinedGetter: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forExtensionMember,
@@ -1370,7 +1152,7 @@
     ImportLibrary.forType,
     CreateMixin.new,
   ],
-  CompileTimeErrorCode.undefinedIdentifier: [
+  diag.undefinedIdentifier: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forExtension,
@@ -1380,49 +1162,42 @@
     ImportLibrary.forType,
     CreateMixin.new,
   ],
-  CompileTimeErrorCode.undefinedMethod: [
+  diag.undefinedMethod: [
     CreateClass.new,
     DataDriven.new,
     ImportLibrary.forExtensionMember,
     ImportLibrary.forFunction,
     ImportLibrary.forType,
   ],
-  CompileTimeErrorCode.undefinedNamedParameter: [
-    ChangeArgumentName.new,
-    DataDriven.new,
-  ],
-  CompileTimeErrorCode.undefinedOperator: [
+  diag.undefinedNamedParameter: [ChangeArgumentName.new, DataDriven.new],
+  diag.undefinedOperator: [
     ImportLibrary.forExtensionMember,
     UseDifferentDivisionOperator.new,
   ],
-  CompileTimeErrorCode.undefinedPrefixedName: [DataDriven.new],
-  CompileTimeErrorCode.undefinedSetter: [
+  diag.undefinedPrefixedName: [DataDriven.new],
+  diag.undefinedSetter: [
     DataDriven.new,
     // TODO(brianwilkerson): Support ImportLibrary for non-extension members.
     ImportLibrary.forExtensionMember,
   ],
-  CompileTimeErrorCode.wrongNumberOfTypeArguments: [DataDriven.new],
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor: [DataDriven.new],
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension: [DataDriven.new],
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod: [DataDriven.new],
-  HintCode.deprecatedMemberUse: [DataDriven.new],
-  HintCode.deprecatedMemberUseWithMessage: [DataDriven.new],
-  WarningCode.deprecatedExportUse: [DataDriven.new],
-  WarningCode.multipleCombinators: [MergeCombinators.new],
-  WarningCode.overrideOnNonOverridingMethod: [DataDriven.new],
+  diag.wrongNumberOfTypeArguments: [DataDriven.new],
+  diag.wrongNumberOfTypeArgumentsConstructor: [DataDriven.new],
+  diag.wrongNumberOfTypeArgumentsExtension: [DataDriven.new],
+  diag.wrongNumberOfTypeArgumentsMethod: [DataDriven.new],
+  diag.deprecatedMemberUse: [DataDriven.new],
+  diag.deprecatedMemberUseWithMessage: [DataDriven.new],
+  diag.deprecatedExportUse: [DataDriven.new],
+  diag.multipleCombinators: [MergeCombinators.new],
+  diag.overrideOnNonOverridingMethod: [DataDriven.new],
 };
 
 final _builtInParseLintGenerators = <DiagnosticCode, List<ProducerGenerator>>{
-  LinterLintCode.preferGenericFunctionTypeAliases: [
-    ConvertToGenericFunctionSyntax.new,
-  ],
-  LinterLintCode.slashForDocComments: [ConvertDocumentationIntoLine.new],
-  LinterLintCode.unnecessaryConst: [RemoveUnnecessaryConst.new],
-  LinterLintCode.unnecessaryNew: [RemoveUnnecessaryNew.new],
-  LinterLintCode.unnecessaryStringEscapes: [RemoveUnnecessaryStringEscape.new],
-  LinterLintCode.useFunctionTypeSyntaxForParameters: [
-    ConvertToGenericFunctionSyntax.new,
-  ],
+  diag.preferGenericFunctionTypeAliases: [ConvertToGenericFunctionSyntax.new],
+  diag.slashForDocComments: [ConvertDocumentationIntoLine.new],
+  diag.unnecessaryConst: [RemoveUnnecessaryConst.new],
+  diag.unnecessaryNew: [RemoveUnnecessaryNew.new],
+  diag.unnecessaryStringEscapes: [RemoveUnnecessaryStringEscape.new],
+  diag.useFunctionTypeSyntaxForParameters: [ConvertToGenericFunctionSyntax.new],
 };
 
 /// Registers each mapping of diagnostic -> list-of-producer-generators with
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 f150962..4f5e9fa 100644
--- a/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
+++ b/pkg/analysis_server/lib/src/services/correction/organize_imports.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/ignore_comments/ignore_info.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     hide AnalysisError, Element;
@@ -65,9 +65,9 @@
 
   bool _isUnusedImport(UriBasedDirective directive) {
     for (var diagnostic in diagnostics) {
-      if ((diagnostic.diagnosticCode == WarningCode.duplicateImport ||
-              diagnostic.diagnosticCode == WarningCode.unusedImport ||
-              diagnostic.diagnosticCode == HintCode.unnecessaryImport) &&
+      if ((diagnostic.diagnosticCode == diag.duplicateImport ||
+              diagnostic.diagnosticCode == diag.unusedImport ||
+              diagnostic.diagnosticCode == diag.unnecessaryImport) &&
           directive.uri.offset == diagnostic.offset) {
         return true;
       }
@@ -77,7 +77,7 @@
 
   bool _isUnusedShowName(SimpleIdentifier name) {
     for (var diagnostic in diagnostics) {
-      if ((diagnostic.diagnosticCode == WarningCode.unusedShownName) &&
+      if ((diagnostic.diagnosticCode == diag.unusedShownName) &&
           name.offset == diagnostic.offset) {
         return true;
       }
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 5c015f9..d22fb24 100644
--- a/pkg/analysis_server/lib/src/services/correction/sort_members.dart
+++ b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
@@ -11,6 +11,8 @@
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
+import '../../utilities/extensions/ast.dart';
+
 /// Sorter for unit/class members.
 class MemberSorter {
   final String _initialCode;
@@ -99,15 +101,15 @@
   void _sortClassesMembers() {
     for (var unitMember in _unit.declarations) {
       if (unitMember is ClassDeclaration) {
-        _sortClassMembers(unitMember.members);
+        _sortClassMembers(unitMember.members2);
       } else if (unitMember is EnumDeclaration) {
-        _sortClassMembers(unitMember.members);
+        _sortClassMembers(unitMember.body.members);
       } else if (unitMember is ExtensionDeclaration) {
-        _sortClassMembers(unitMember.members);
+        _sortClassMembers(unitMember.body.members);
       } else if (unitMember is ExtensionTypeDeclaration) {
-        _sortClassMembers(unitMember.members);
+        _sortClassMembers(unitMember.members2);
       } else if (unitMember is MixinDeclaration) {
-        _sortClassMembers(unitMember.members);
+        _sortClassMembers(unitMember.body.members);
       }
     }
   }
@@ -176,16 +178,16 @@
       switch (member) {
         case ClassDeclaration():
           kind = _MemberKind.unitClass;
-          name = member.name.lexeme;
+          name = member.namePart.typeName.lexeme;
         case ClassTypeAlias():
           kind = _MemberKind.unitClass;
           name = member.name.lexeme;
         case EnumDeclaration():
           kind = _MemberKind.unitClass;
-          name = member.name.lexeme;
+          name = member.namePart.typeName.lexeme;
         case ExtensionTypeDeclaration():
           kind = _MemberKind.unitExtensionType;
-          name = member.name.lexeme;
+          name = member.primaryConstructor.typeName.lexeme;
         case ExtensionDeclaration():
           kind = _MemberKind.unitExtension;
           name = member.name?.lexeme ?? '';
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 3dd8926..d6e6d0e 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -131,12 +131,9 @@
   var member = input;
   for (var node in input.withAncestors) {
     switch (node) {
-      case ClassDeclaration _:
+      case BlockClassBody _:
       case CompilationUnit _:
-      case EnumDeclaration _:
-      case ExtensionDeclaration _:
-      case ExtensionTypeDeclaration _:
-      case MixinDeclaration _:
+      case EnumBody _:
         return member;
     }
     member = node;
diff --git a/pkg/analysis_server/lib/src/services/dart_tooling_daemon/dtd_services.dart b/pkg/analysis_server/lib/src/services/dart_tooling_daemon/dtd_services.dart
index 673be2f..adc535d 100644
--- a/pkg/analysis_server/lib/src/services/dart_tooling_daemon/dtd_services.dart
+++ b/pkg/analysis_server/lib/src/services/dart_tooling_daemon/dtd_services.dart
@@ -21,16 +21,16 @@
 /// The state of the connection to DTD.
 enum DtdConnectionState {
   /// A connection is being made or initialization is in progress.
-  Connecting,
+  connecting,
 
   /// The connection is available to use.
-  Connected,
+  connected,
 
   /// The connection is closing or closed.
-  Disconnected,
+  disconnected,
 
   /// A fatal error occurred setting up the connection to DTD.
-  Error,
+  error,
 }
 
 /// A connection to DTD that exposes some analysis services (such as a subset
@@ -49,7 +49,7 @@
   /// A raw connection to the Dart Tooling Daemon.
   DartToolingDaemon? _dtd;
 
-  DtdConnectionState _state = DtdConnectionState.Connecting;
+  DtdConnectionState _state = DtdConnectionState.connecting;
 
   /// Whether to register experimental LSP handlers over DTD.
   final bool registerExperimentalHandlers;
@@ -110,7 +110,7 @@
   }
 
   /// Closes the connection to DTD and cleans up.
-  void _close([DtdConnectionState state = DtdConnectionState.Disconnected]) {
+  void _close([DtdConnectionState state = DtdConnectionState.disconnected]) {
     _state = state;
 
     // This code may have been closed because the connection closed, or it might
@@ -206,7 +206,7 @@
       ['Failed to connect to/initialize DTD:', error, ?stack].join('\n'),
     );
 
-    _close(DtdConnectionState.Error);
+    _close(DtdConnectionState.error);
   }
 
   /// Registers any request handlers provided by the server handler [handler]
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 256c8dc..f725c75b 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -26,15 +26,15 @@
   if (e is FieldElement && e.isEnumConstant) {
     // FieldElement is a kind of VariableElement, so this test case must be
     // before the e is VariableElement check.
-    return schema.CONSTANT_KIND;
+    return schema.constantKind;
   } else if (e is VariableElement || e is PrefixElement) {
-    return schema.VARIABLE_KIND;
+    return schema.variableKind;
   } else if (e is ExecutableElement) {
-    return schema.FUNCTION_KIND;
+    return schema.functionKind;
   } else if (e is InterfaceElement || e is TypeParameterElement) {
     // TODO(jwren): this should be using absvar instead, see
     // https://kythe.io/docs/schema/#absvar
-    return schema.RECORD_KIND;
+    return schema.recordKind;
   }
   return null;
 }
@@ -82,7 +82,7 @@
 }
 
 /// If a non-null element is passed, the [_SignatureElementVisitor] is used to
-/// generate and return a [String] signature, otherwise [schema.DYNAMIC_KIND] is
+/// generate and return a [String] signature, otherwise [schema.dynamicKind] is
 /// returned.
 String _getSignature(
   ResourceProvider provider,
@@ -91,9 +91,9 @@
   String corpus, {
   String? sdkRootPath,
 }) {
-  assert(nodeKind != schema.ANCHOR_KIND); // Call _getAnchorSignature instead
+  assert(nodeKind != schema.anchorKind); // Call _getAnchorSignature instead
   if (element == null) {
-    return schema.DYNAMIC_KIND;
+    return schema.dynamicKind;
   }
   if (element is LibraryElement) {
     return _getPath(
@@ -118,14 +118,14 @@
 
   /// Returns a URI that can be used to query Kythe.
   String toKytheUri(Element e) {
-    var nodeKind = _getNodeKind(e) ?? schema.RECORD_KIND;
+    var nodeKind = _getNodeKind(e) ?? schema.recordKind;
     var vname = _vNameFromElement(e, nodeKind);
     return 'kythe://$corpus?lang=dart?path=${vname.path}#${vname.signature}';
   }
 
   /// Returns the Kythe name for the [element].
   _KytheVName _vNameFromElement(Element? e, String nodeKind) {
-    assert(nodeKind != schema.FILE_KIND);
+    assert(nodeKind != schema.fileKind);
     // general case
     return _KytheVName(
       path: _getPath(
diff --git a/pkg/analysis_server/lib/src/services/kythe/schema.dart b/pkg/analysis_server/lib/src/services/kythe/schema.dart
index 033712d..e4ad379 100644
--- a/pkg/analysis_server/lib/src/services/kythe/schema.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/schema.dart
@@ -6,85 +6,85 @@
 /// kythe.io/docs/schema/
 library;
 
-const ANCHOR_END_FACT = '/kythe/loc/end';
+const anchorEndFact = '/kythe/loc/end';
 
 /// Kythe node kinds
-const ANCHOR_KIND = 'anchor';
-const ANCHOR_START_FACT = '/kythe/loc/start';
+const anchorKind = 'anchor';
+const anchorStartFact = '/kythe/loc/start';
 
 /// Kythe edge kinds
-const ANNOTATED_BY_EDGE = '${EDGE_PREFIX}annotatedby';
+const annotatedByEdge = '${edgePrefix}annotatedby';
 
-const CHILD_OF_EDGE = '${EDGE_PREFIX}childof';
+const childOfEdge = '${edgePrefix}childof';
 
 /// Kythe node subkinds
-const CLASS_SUBKIND = 'class';
+const classSubkind = 'class';
 
-const COMPLETE_FACT = '/kythe/complete';
-const CONSTANT_KIND = 'constant';
+const completeFact = '/kythe/complete';
+const constantKind = 'constant';
 
-const CONSTRUCTOR_SUBKIND = 'constructor';
+const constructorSubkind = 'constructor';
 
 /// Dart specific facts, labels, and kinds
-const DART_LANG = 'dart';
+const dartLang = 'dart';
 
 /// DEFAULT_TEXT_ENCODING is the assumed value of the TEXT_ENCODING_FACT if it
 /// is empty or missing from a node with a TEXT_FACT.
-const DEFAULT_TEXT_ENCODING = 'UTF-8';
-const DEFINES_BINDING_EDGE = '${EDGE_PREFIX}defines/binding';
+const defaultTextEncoding = 'UTF-8';
+const definesBindingEdge = '${edgePrefix}defines/binding';
 
 /// Kythe edge kinds associated with anchors
-const DEFINES_EDGE = '${EDGE_PREFIX}defines';
+const definesEdge = '${edgePrefix}defines';
 
-const DEFINITION = 'definition';
+const definition = 'definition';
 
-const DOC_KIND = 'doc';
+const docKind = 'doc';
 
-const DOCUMENTS_EDGE = '${EDGE_PREFIX}documents';
-const DYNAMIC_KIND = 'dynamic#builtin';
+const documentsEdge = '${edgePrefix}documents';
+const dynamicKind = 'dynamic#builtin';
 
 /// EdgePrefix is the standard Kythe prefix for all edge kinds.
-const EDGE_PREFIX = '/kythe/edge/';
-const ENUM_CLASS_SUBKIND = 'enumClass';
-const ENUM_KIND = 'enum';
-const EXTENDS_EDGE = '${EDGE_PREFIX}extends';
-const FIELD_SUBKIND = 'field';
-const FILE_KIND = 'file';
-const FN_BUILTIN = 'fn#builtin';
-const FUNCTION_KIND = 'function';
+const edgePrefix = '/kythe/edge/';
+const enumClassSubkind = 'enumClass';
+const enumKind = 'enum';
+const extendsEdge = '${edgePrefix}extends';
+const fieldSubkind = 'field';
+const fileKind = 'file';
+const fnBuiltin = 'fn#builtin';
+const functionKind = 'function';
 
-const IMPLICIT_SUBKIND = 'implicit';
+const implicitSubkind = 'implicit';
 
 /// Kythe complete states
-const INCOMPLETE = 'incomplete';
-const INSTANTIATES_EDGE = '${EDGE_PREFIX}instantiates';
-const LOCAL_PARAMETER_SUBKIND = 'local/parameter';
-const LOCAL_SUBKIND = 'local';
+const incomplete = 'incomplete';
+const instantiatesEdge = '${edgePrefix}instantiates';
+const localParameterSubkind = 'local/parameter';
+const localSubkind = 'local';
 
 /// Kythe node fact labels
-const NODE_KIND_FACT = '/kythe/node/kind';
+const nodeKindFact = '/kythe/node/kind';
 
 /// Kythe ordinal
-const ORDINAL = '/kythe/ordinal';
+const ordinal = '/kythe/ordinal';
 
-const OVERRIDES_EDGE = '${EDGE_PREFIX}overrides';
-const PACKAGE_KIND = 'package';
+const overridesEdge = '${edgePrefix}overrides';
+const packageKind = 'package';
 
-const PARAM_EDGE = '${EDGE_PREFIX}param';
+const paramEdge = '${edgePrefix}param';
 
-const RECORD_KIND = 'record';
+const recordKind = 'record';
 
-const REF_CALL_EDGE = '${EDGE_PREFIX}ref/call';
-const REF_EDGE = '${EDGE_PREFIX}ref';
-const REF_IMPORTS_EDGE = '${EDGE_PREFIX}ref/imports';
-const SNIPPET_END_FACT = '/kythe/snippet/end';
-const SNIPPET_START_FACT = '/kythe/snippet/start';
-const SUBKIND_FACT = '/kythe/subkind';
-const TAPP_KIND = 'tapp';
+const refCallEdge = '${edgePrefix}ref/call';
+const refEdge = '${edgePrefix}ref';
+const refImportsEdge = '${edgePrefix}ref/imports';
+const snippetEndFact = '/kythe/snippet/end';
+const snippetStartFact = '/kythe/snippet/start';
+const subkindFact = '/kythe/subkind';
+const tappKind = 'tapp';
 
-const TEXT_ENCODING_FACT = '/kythe/text/encoding';
-const TEXT_FACT = '/kythe/text';
-const TEXT_FORMAT = '/kythe/format';
-const TYPED_EDGE = '${EDGE_PREFIX}typed';
-const VARIABLE_KIND = 'variable';
-const VOID_BUILTIN = 'void#builtin';
+const textEncodingFact = '/kythe/text/encoding';
+const textFact = '/kythe/text';
+const textFormat = '/kythe/format';
+const typedEdge = '${edgePrefix}typed';
+const variableKind = 'variable';
+const voidBuiltin = 'void#builtin';
diff --git a/pkg/analysis_server/lib/src/services/pub/pub_command.dart b/pkg/analysis_server/lib/src/services/pub/pub_command.dart
index b20f42b..45befcf 100644
--- a/pkg/analysis_server/lib/src/services/pub/pub_command.dart
+++ b/pkg/analysis_server/lib/src/services/pub/pub_command.dart
@@ -7,6 +7,7 @@
 import 'dart:io';
 
 import 'package:analysis_server/src/utilities/process.dart';
+import 'package:analysis_server/src/utilities/sdk.dart';
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:path/path.dart' as path;
 
@@ -120,7 +121,7 @@
     try {
       _instrumentationService.logInfo('Starting pub command $args');
       var process = await _processRunner.start(
-        Platform.resolvedExecutable,
+        sdk.dart,
         ['pub', ...args],
         workingDirectory: workingDirectory,
         environment: {_pubEnvironmentKey: _pubEnvironmentValue},
diff --git a/pkg/analysis_server/lib/src/services/refactoring/agnostic/change_method_signature.dart b/pkg/analysis_server/lib/src/services/refactoring/agnostic/change_method_signature.dart
index 182d45e..e9b17a7 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/agnostic/change_method_signature.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/agnostic/change_method_signature.dart
@@ -311,8 +311,10 @@
     switch (node) {
       case ConstructorDeclaration():
         var nameRange = range.startEnd(
-          node.returnType,
-          node.name ?? node.returnType,
+          // TODO(scheglov): support primary constructors
+          node.typeName!,
+          // TODO(scheglov): support primary constructors
+          node.name ?? node.typeName!,
         );
         var selectionRange = refactoringContext.selectionRange;
         if (anyLocation || nameRange.covers(selectionRange)) {
@@ -1249,7 +1251,8 @@
     if (self is SimpleIdentifier) {
       var constructorDeclaration = self.parent;
       if (constructorDeclaration is ConstructorDeclaration) {
-        if (constructorDeclaration.returnType == self) {
+        // TODO(scheglov): support primary constructors
+        if (constructorDeclaration.typeName! == self) {
           return constructorDeclaration;
         }
       }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart
index 361e95b..96aef7d 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart
@@ -63,7 +63,7 @@
       await Future.forEach(elements, (Element member) async {
         if (member is FieldElement) {
           var getter = member.getter;
-          if (getter != null && !getter.isSynthetic) {
+          if (getter != null && getter.isOriginDeclaration) {
             await _updateElementDeclaration(getter);
             return _updateElementReferences(getter);
           }
@@ -87,7 +87,7 @@
       );
     }
 
-    if (element.isSynthetic) {
+    if (!element.isOriginDeclaration) {
       return RefactoringStatus.fatal(
         'Only explicit getters can be converted to methods.',
       );
@@ -140,6 +140,9 @@
     var matches = await searchEngine.searchReferences(element);
     var references = getSourceReferences(matches);
     for (var reference in references) {
+      if (reference.isReferenceInPatternField) {
+        continue;
+      }
       var refRange = reference.range;
       // insert "()"
       var edit = SourceEdit(refRange.end, 0, '()');
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
index 41a4ccf..e53ac46 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
@@ -27,7 +27,7 @@
 import 'package:analyzer/src/utilities/dot_shorthands.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
 
-const String _TOKEN_SEPARATOR = '\uFFFF';
+const String _tokenSeparator = '\uFFFF';
 
 /// [ExtractLocalRefactoring] implementation.
 class ExtractLocalRefactoringImpl extends RefactoringImpl
@@ -440,8 +440,8 @@
           // done
           return tokenString;
         })
-        .join(_TOKEN_SEPARATOR);
-    return result + _TOKEN_SEPARATOR;
+        .join(_tokenSeparator);
+    return result + _tokenSeparator;
   }
 
   /// Return the [AstNode] to defined the variable before.
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
index 1e29fa1..4beafcf 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
@@ -635,6 +635,13 @@
       var libraryElement = parent.declaredFragment!.element;
       return validateCreateFunction(_searchEngine, libraryElement, name);
     }
+    // Stop up through BlockClassBody or EnumBody.
+    switch (parent) {
+      case BlockClassBody():
+        parent = parent.parent!;
+      case EnumBody():
+        parent = parent.parent!;
+    }
     // method of class
     InterfaceElement? interfaceElement;
     if (parent is ClassDeclaration) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/naming_conventions.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/naming_conventions.dart
index d7910a9..b3228bd 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/naming_conventions.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/naming_conventions.dart
@@ -179,8 +179,7 @@
   // invalid characters
   for (var i = 0; i < length; i++) {
     var currentChar = identifier.codeUnitAt(i);
-    if (!currentChar.isLetterOrDigitOrUnderscore &&
-        currentChar != CHAR_DOLLAR) {
+    if (!currentChar.isLetterOrDigitOrUnderscore && currentChar != charDollar) {
       var charStr = String.fromCharCode(currentChar);
       var message = "$desc must not contain '$charStr'.";
       return RefactoringStatus.fatal(message);
@@ -189,8 +188,8 @@
   // first character
   var currentChar = identifier.codeUnitAt(0);
   if (!currentChar.isLetter &&
-      currentChar != CHAR_UNDERSCORE &&
-      currentChar != CHAR_DOLLAR) {
+      currentChar != charUnderscore &&
+      currentChar != charDollar) {
     var message = '$desc must begin with $beginDesc.';
     return RefactoringStatus.fatal(message);
   }
@@ -216,11 +215,11 @@
     return status;
   }
   // is private, OK
-  if (identifier.codeUnitAt(0) == CHAR_UNDERSCORE) {
+  if (identifier.codeUnitAt(0) == charUnderscore) {
     return RefactoringStatus();
   }
   // leading $, OK
-  if (identifier.codeUnitAt(0) == CHAR_DOLLAR) {
+  if (identifier.codeUnitAt(0) == charDollar) {
     return RefactoringStatus();
   }
   // does not start with lower case
@@ -245,11 +244,11 @@
     return status;
   }
   // is private, OK
-  if (identifier.codeUnitAt(0) == CHAR_UNDERSCORE) {
+  if (identifier.codeUnitAt(0) == charUnderscore) {
     return RefactoringStatus();
   }
   // leading $, OK
-  if (identifier.codeUnitAt(0) == CHAR_DOLLAR) {
+  if (identifier.codeUnitAt(0) == charDollar) {
     return RefactoringStatus();
   }
   // does not start with upper case
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
index f91b854..09163e5 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
@@ -539,6 +539,10 @@
     AstNode node,
     Element? element,
   ) {
+    if (node is ClassNamePart) {
+      node = node.parent!;
+    }
+
     // TODO(scheglov): This is bad code.
     SyntacticEntity? nameNode;
     if (node is AssignedVariablePattern) {
@@ -569,14 +573,22 @@
       nameNode = node;
     } else if (node is MethodDeclaration) {
       nameNode = node.name;
-    } else if (node is NamedCompilationUnitMember) {
+    } else if (node is ClassDeclaration) {
+      nameNode = node.namePart.typeName;
+    } else if (node is EnumDeclaration) {
+      nameNode = node.namePart.typeName;
+    } else if (node is ExtensionTypeDeclaration) {
+      nameNode = node.primaryConstructor.typeName;
+    } else if (node is FunctionDeclaration) {
+      nameNode = node.name;
+    } else if (node is MixinDeclaration) {
+      nameNode = node.name;
+    } else if (node is TypeAlias) {
       nameNode = node.name;
     } else if (node is NamedType) {
       nameNode = node.name;
-    } else if (node is RepresentationConstructorName) {
+    } else if (node is PrimaryConstructorName) {
       nameNode = node.name;
-    } else if (node is RepresentationDeclaration) {
-      nameNode = node.fieldName;
     } else if (node is SimpleFormalParameter) {
       nameNode = node.name;
     } else if (node is SimpleIdentifier) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart
index c65580a..c3b6b18 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart
@@ -28,7 +28,6 @@
     var oldReference = uniqueReferences[newReference];
     if (oldReference == null) {
       uniqueReferences[newReference] = newReference;
-      oldReference = newReference;
     }
   }
   return uniqueReferences.keys.toList();
@@ -82,9 +81,16 @@
   bool get isConstructorTearOff =>
       _match.kind == MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF;
 
+  bool get isDotShortHandsConstructor =>
+      _match.kind == MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION ||
+      _match.kind == MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF;
+
   bool get isInvocationByEnumConstantWithoutArguments =>
       _match.kind == MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
 
+  bool get isReferenceInPatternField =>
+      _match.kind == MatchKind.REFERENCE_IN_PATTERN_FIELD;
+
   bool get isResolved => _match.isResolved;
 
   /// Return the [LibraryElement] for the [file].
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart
index 843c59c..d2150d2d 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart
@@ -17,7 +17,6 @@
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/utilities/cancellation.dart';
 
@@ -40,7 +39,7 @@
 /// Once new set of parameters is received, the previous [Refactoring] instance
 /// is invalidated and a new one is created and initialized.
 class RefactoringManager {
-  static const List<RefactoringProblem> EMPTY_PROBLEM_LIST =
+  static const List<RefactoringProblem> _emptyProblemList =
       <RefactoringProblem>[];
 
   final LegacyAnalysisServer server;
@@ -104,14 +103,15 @@
     // prepare for processing the request
     this.request = request;
     var result = this.result = EditGetRefactoringResult(
-      EMPTY_PROBLEM_LIST,
-      EMPTY_PROBLEM_LIST,
-      EMPTY_PROBLEM_LIST,
+      _emptyProblemList,
+      _emptyProblemList,
+      _emptyProblemList,
     );
 
     // process the request
     var file = params.file;
     if (server.sendResponseErrorIfInvalidFilePath(request, file)) {
+      this.request = null;
       return;
     }
 
@@ -179,6 +179,7 @@
           server.sendResponse(
             Response.serverError(request, exception, stackTrace),
           );
+          this.request = null;
         }
         _reset();
       },
@@ -316,13 +317,6 @@
       if (resolvedUnit != null) {
         var node = resolvedUnit.unit.nodeCovering(offset: offset);
         var element = node?.getElement(useMockForImport: true);
-        if (node is RepresentationDeclaration) {
-          var extensionType = node.parent;
-          if (extensionType is ExtensionTypeDeclaration &&
-              extensionType.name.end == offset) {
-            element = extensionType.declaredFragment?.element;
-          }
-        }
         if (node != null && element != null) {
           var renameElement = RenameRefactoring.getElementToRename(
             node,
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart
index 53a2523..08bfd1e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart
@@ -66,14 +66,15 @@
       // Handle implicit references.
       var coveringNode = await _nodeCoveringReference(reference);
       var coveringParent = coveringNode?.parent;
-      if (coveringNode is ClassDeclaration) {
+      if (coveringParent is ClassDeclaration) {
         _addDefaultConstructorToClass(
           reference: reference,
-          classDeclaration: coveringNode,
+          classDeclaration: coveringParent,
         );
         continue;
       } else if (coveringParent is ConstructorDeclaration &&
-          coveringParent.returnType.offset == reference.range.offset) {
+          // TODO(scheglov): support primary constructors
+          coveringParent.typeName!.offset == reference.range.offset) {
         _addSuperInvocationToConstructor(
           reference: reference,
           constructor: coveringParent,
@@ -83,9 +84,19 @@
 
       String replacement;
       if (newName.isNotEmpty) {
-        replacement = '.$newName';
+        if (reference.isDotShortHandsConstructor) {
+          replacement = newName;
+        } else {
+          replacement = '.$newName';
+        }
       } else {
-        replacement = reference.isConstructorTearOff ? '.new' : '';
+        if (reference.isDotShortHandsConstructor) {
+          replacement = 'new';
+        } else if (reference.isConstructorTearOff) {
+          replacement = '.new';
+        } else {
+          replacement = '';
+        }
       }
       if (reference.isInvocationByEnumConstantWithoutArguments) {
         replacement += '()';
@@ -93,7 +104,7 @@
       reference.addEdit(change, replacement);
     }
     // Update the declaration.
-    if (element.isSynthetic) {
+    if (element.isOriginImplicitDefault) {
       await _replaceSynthetic();
     } else {
       doSourceChange_addSourceEdit(
@@ -111,10 +122,15 @@
     required SourceReference reference,
     required ClassDeclaration classDeclaration,
   }) {
-    var className = classDeclaration.name.lexeme;
+    var body = classDeclaration.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
+    var className = classDeclaration.namePart.typeName.lexeme;
     _replaceInReferenceFile(
       reference: reference,
-      range: range.endLength(classDeclaration.leftBracket, 0),
+      range: range.endLength(body.leftBracket, 0),
       replacement: '${utils.endOfLine}  $className() : super.$newName();',
     );
   }
@@ -211,7 +227,7 @@
     }
 
     var node = result.node;
-    if (node is! NamedCompilationUnitMember) {
+    if (node is! CompilationUnitMember) {
       return;
     }
     if (node is! ClassDeclaration && node is! EnumDeclaration) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart
index be9baee..2c14baa 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart
@@ -260,38 +260,53 @@
     }
 
     var candidateMembers = <CompilationUnitMember, String?>{};
-    var sealedDeclarations = <CompilationUnitMember>[];
     for (var node in selectedNodes) {
-      String? name;
-      if (node is ClassDeclaration && validSelection(node.name)) {
-        if (node.sealedKeyword != null) {
-          sealedDeclarations.add(node);
-        }
-        name = node.name.lexeme;
-      } else if (node is EnumDeclaration && validSelection(node.name)) {
-        name = node.name.lexeme;
-      } else if (node is ExtensionDeclaration && validSelection(node.name)) {
-        name = node.name?.lexeme;
-      } else if (node is ExtensionTypeDeclaration &&
-          validSelection(node.name)) {
-        name = node.name.lexeme;
-      } else if (node is FunctionDeclaration &&
-          node.parent is CompilationUnit &&
-          validSelection(node.name)) {
-        name = node.name.lexeme;
-      } else if (node is MixinDeclaration && validSelection(node.name)) {
-        name = node.name.lexeme;
-      } else if (node is TopLevelVariableDeclaration) {
-        var variables = node.variables.variables;
-        if (variables.length == 1) {
-          name = variables[0].name.lexeme;
-        }
-      } else if (node is TypeAlias && validSelection(node.name)) {
-        name = node.name.lexeme;
-      } else {
-        return null;
+      Token? nameToken;
+      switch (node) {
+        case ClassDeclaration():
+          nameToken = node.namePart.typeName;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        case EnumDeclaration():
+          nameToken = node.namePart.typeName;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        case ExtensionDeclaration():
+          nameToken = node.name;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        case ExtensionTypeDeclaration():
+          nameToken = node.primaryConstructor.typeName;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        case FunctionDeclaration():
+          nameToken = node.name;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        case MixinDeclaration():
+          nameToken = node.name;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        case TopLevelVariableDeclaration():
+          if (node.variables.variables.length == 1) {
+            nameToken = node.variables.variables.first.name;
+          }
+        // No check for selection.
+        case TypeAlias():
+          nameToken = node.name;
+          if (!validSelection(nameToken)) {
+            return null;
+          }
+        default:
+          return null;
       }
-      candidateMembers[node] = name;
+      candidateMembers[node] = nameToken?.lexeme;
     }
 
     var index = _SealedSubclassIndex(
@@ -310,9 +325,12 @@
     for (var sub in index.findSubclassesOfSealedRecursively(
       candidateMembers.keys.toSet(),
     )) {
-      candidateMembers[sub] ??= sub is NamedCompilationUnitMember
-          ? sub.name.lexeme
-          : null;
+      candidateMembers[sub] ??= switch (sub) {
+        ClassDeclaration() => sub.namePart.typeName.lexeme,
+        EnumDeclaration() => sub.namePart.typeName.lexeme,
+        MixinDeclaration() => sub.name.lexeme,
+        _ => null,
+      };
     }
 
     // Ensure there aren't any subclasses of sealed items in other parts of this
@@ -375,6 +393,8 @@
       }
     } else if (node is CompilationUnitMember) {
       return [node];
+    } else if (node is ClassNamePart) {
+      return [node.parent as CompilationUnitMember];
     }
     return null;
   }
@@ -547,7 +567,7 @@
   ) {
     return {
       ...members,
-      ...members.whereType<NamedCompilationUnitMember>().expand(
+      ...members.whereType<CompilationUnitMember>().expand(
         (member) => findSubclassesOfSealedRecursively(
           sealedTypeSubclasses[member.declaredFragment?.element] ?? const {},
         ),
@@ -575,6 +595,11 @@
       var mixesInTypes = declaration.withClause?.mixinTypes;
 
       return [?extendsType, ...?implementsTypes, ...?mixesInTypes];
+    } else if (declaration is EnumDeclaration) {
+      var implementsTypes = declaration.implementsClause?.interfaces;
+      var mixesInTypes = declaration.withClause?.mixinTypes;
+
+      return [...?implementsTypes, ...?mixesInTypes];
     } else if (declaration is MixinDeclaration) {
       var interfaceTypes = declaration.implementsClause?.interfaces;
       var constraintTypes = declaration.onClause?.superclassConstraints;
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 75b0d9b..42bb47a 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -41,13 +41,10 @@
 /// Returns direct non-synthetic children of the given [InterfaceElement].
 ///
 /// Includes: fields, accessors and methods.
-/// Excludes: constructors and synthetic elements.
+/// Excludes: constructors.
 List<Element> getClassMembers(InterfaceElement clazz, [String? name]) {
   var members = <Element>[];
   visitChildren(clazz, (Element element) {
-    if (element.isSynthetic) {
-      return false;
-    }
     if (element is ConstructorElement) {
       return false;
     }
@@ -177,8 +174,6 @@
       var subClassMembers = getChildren(subClass, name);
       for (var member in subClassMembers) {
         switch (member) {
-          case ConstructorElement():
-            members.add(member);
           case FieldElement():
             members.add(member);
           case MethodElement():
@@ -267,7 +262,7 @@
 ///
 /// Includes: fields, accessors and methods.
 ///
-/// Excludes: constructors and synthetic elements.
+/// Excludes: constructors.
 List<Element> getMembers(InterfaceElement clazz) {
   var classElements = [...clazz.allSupertypes.map((e) => e.element), clazz];
   var members = <Element>[];
@@ -281,7 +276,7 @@
 /// its variable, otherwise returns [element].
 Element getSyntheticAccessorVariable(Element element) {
   if (element is PropertyAccessorElement) {
-    if (element.isSynthetic) {
+    if (element.isOriginVariable) {
       return element.variable;
     }
   }
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 571960f..3990de2 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -37,6 +37,12 @@
   /// arguments.
   INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS(),
 
+  /// A dot shorthand invocation.
+  DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION(),
+
+  /// A dot shorthand tear-off.
+  DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF(isReference: true),
+
   /// A reference to an element in which it is referenced.
   REFERENCE(isReference: true),
 
@@ -49,6 +55,9 @@
   /// A reference to an element in an implements clause.
   REFERENCE_IN_IMPLEMENTS_CLAUSE(isReference: true),
 
+  /// A reference to an element in a pattern field.
+  REFERENCE_IN_PATTERN_FIELD(isReference: true),
+
   /// A reference to an element in a with clause.
   REFERENCE_IN_WITH_CLAUSE(isReference: true),
 
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 e72fadd..4910c9d 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
@@ -356,6 +356,12 @@
     if (kind == SearchResultKind.INVOCATION) {
       return MatchKind.INVOCATION;
     }
+    if (kind == SearchResultKind.DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF) {
+      return MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF;
+    }
+    if (kind == SearchResultKind.DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION) {
+      return MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION;
+    }
     if (kind ==
         SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
       return MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
@@ -375,6 +381,9 @@
     if (kind == SearchResultKind.REFERENCE_IN_WITH_CLAUSE) {
       return MatchKind.REFERENCE_IN_WITH_CLAUSE;
     }
+    if (kind == SearchResultKind.REFERENCE_IN_PATTERN_FIELD) {
+      return MatchKind.REFERENCE_IN_PATTERN_FIELD;
+    }
     return MatchKind.REFERENCE;
   }
 }
diff --git a/pkg/analysis_server/lib/src/session_logger/entry_keys.dart b/pkg/analysis_server/lib/src/session_logger/entry_keys.dart
new file mode 100644
index 0000000..f7a5c1f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/session_logger/entry_keys.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 key used in an entry to access the command-line arguments associated
+/// with the entry.
+const String argList = 'argList';
+
+/// The key used in an entry to access the kind of the entry.
+const String kind = 'kind';
+
+/// The key used in an entry to access the message associatd with the entry.
+const String message = 'message';
+
+/// The key used in an entry to access the receiver of a message.
+const String receiver = 'receiver';
+
+/// The key used in an entry to access the sender of a message.
+const String sender = 'sender';
+
+/// The key used in an entry to access the sender of a message.
+const String time = 'time';
diff --git a/pkg/analysis_server/lib/src/session_logger/entry_kind.dart b/pkg/analysis_server/lib/src/session_logger/entry_kind.dart
new file mode 100644
index 0000000..fa479df
--- /dev/null
+++ b/pkg/analysis_server/lib/src/session_logger/entry_kind.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// An identifier for the kind of a log entry.
+enum EntryKind {
+  /// An entry representing the command-line used to start the server.
+  ///
+  /// Entries of this kind will have the following keys:
+  /// - argList
+  commandLine('commandLine'),
+
+  /// An entry representing the passing of a message from one process to
+  /// another.
+  ///
+  /// Entries of this kind will have the following keys:
+  /// - sender
+  /// - receiver
+  /// - message
+  message('message');
+
+  /// A map used to associate kinds with their name.
+  ///
+  /// Used to support [EntryKind.forName].
+  static Map<String, EntryKind> _nameMap = {
+    for (var value in values) value.name: value,
+  };
+
+  /// The name of the kind.
+  final String name;
+
+  /// Creates a new kind with the given [name].
+  const EntryKind(this.name);
+
+  /// Returns the kind with the given [name].
+  factory EntryKind.forName(String name) => _nameMap[name]!;
+}
diff --git a/pkg/analysis_server/lib/src/session_logger/log_entry.dart b/pkg/analysis_server/lib/src/session_logger/log_entry.dart
new file mode 100644
index 0000000..1f1a71c
--- /dev/null
+++ b/pkg/analysis_server/lib/src/session_logger/log_entry.dart
@@ -0,0 +1,74 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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/session_logger/entry_keys.dart' as key;
+import 'package:analysis_server/src/session_logger/entry_kind.dart';
+import 'package:analysis_server/src/session_logger/process_id.dart';
+
+/// A representation of an entry in a [Log].
+///
+/// Every entry has a [time] and a [kind]. Other properties are dependent on the
+/// [kind]. See [EntryKind] for a description of the properties associated with
+/// each [kind].
+extension type LogEntry(JsonMap map) {
+  /// Returns the command-line arguments used to start the server.
+  List<String> get argList =>
+      (map[key.argList] as List<dynamic>).cast<String>();
+
+  /// Whether this entry is a command line entry.
+  bool get isCommandLine => kind == EntryKind.commandLine;
+
+  /// Whether this entry is a message entry.
+  bool get isMessage => kind == EntryKind.message;
+
+  /// Returns the kind of this log entry.
+  EntryKind get kind => EntryKind.forName(map[key.kind] as String);
+
+  /// Returns the message for this log entry.
+  Message get message => Message(map[key.message] as JsonMap);
+
+  /// Returns the receiver of the message.
+  ProcessId get receiver => ProcessId.forName(map[key.receiver] as String);
+
+  /// Returns the sender of the message.
+  ProcessId get sender => ProcessId.forName(map[key.sender] as String);
+}
+
+/// A representation of a message sent from one process to another.
+extension type Message(JsonMap map) {
+  /// Whether this message is a request for the server to exit.
+  bool get isExit => method == 'exit';
+
+  /// Whether this message is a request for the server to initialize itself.
+  bool get isInitialize => method == 'initialize';
+
+  /// Whether this message is a notification to the server indicating that the
+  /// client is initialized.
+  bool get isInitialized => method == 'initialized';
+
+  /// Whether this message is a request from the server to log a message.
+  bool get isLogMessage => method == 'window/logMessage';
+
+  /// Whether this message is a request for the server to connect with DTD.
+  bool get isRequestToConnectWithDtd => method == 'dart/connectToDtd';
+
+  /// Whether this message is a request from the server to show a document to
+  /// the user.
+  bool get isShowDocument => method == 'window/showDocument';
+
+  /// Whether this message is a request from the server to show a message to the
+  /// user.
+  bool get isShowMessage => method == 'window/showMessage';
+
+  /// Whether this message is a request from the server to show a message to the
+  /// user.
+  bool get isShowMessageRequest => method == 'window/showMessageRequest';
+
+  /// Whether this message is a request for the server to shut down.
+  bool get isShutdown => method == 'shutdown';
+
+  /// The method being sent in this message, or `null` if this message isn't an
+  /// LSP request
+  String? get method => map['method'] as String?;
+}
diff --git a/pkg/analysis_server/lib/src/session_logger/session_logger.dart b/pkg/analysis_server/lib/src/session_logger/session_logger.dart
index b5824bf..05ec343 100644
--- a/pkg/analysis_server/lib/src/session_logger/session_logger.dart
+++ b/pkg/analysis_server/lib/src/session_logger/session_logger.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:analysis_server/src/session_logger/entry_keys.dart' as key;
+import 'package:analysis_server/src/session_logger/entry_kind.dart';
 import 'package:analysis_server/src/session_logger/process_id.dart';
 import 'package:analysis_server/src/session_logger/session_logger_sink.dart';
 
@@ -11,6 +13,15 @@
   /// to be done at this point.
   SessionLoggerSink? sink;
 
+  /// Log that the given [arguments] were included on the command-line.
+  void logCommandLine({required List<String> arguments}) {
+    sink?.writeLogEntry({
+      key.time: DateTime.now().millisecondsSinceEpoch,
+      key.kind: EntryKind.commandLine.name,
+      key.argList: arguments,
+    });
+  }
+
   /// Log that the given [message] was sent [from] one process [to] another.
   void logMessage({
     required ProcessId from,
@@ -18,10 +29,11 @@
     required JsonMap message,
   }) {
     sink?.writeLogEntry({
-      'time': DateTime.now().millisecondsSinceEpoch,
-      'sender': from.name,
-      'receiver': to.name,
-      'message': message,
+      key.time: DateTime.now().millisecondsSinceEpoch,
+      key.kind: EntryKind.message.name,
+      key.sender: from.name,
+      key.receiver: to.name,
+      key.message: message,
     });
   }
 
diff --git a/pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart b/pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart
index 4d77c3b..79c9691 100644
--- a/pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart
+++ b/pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart
@@ -5,6 +5,7 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:analysis_server/src/session_logger/log_entry.dart';
 import 'package:analysis_server/src/session_logger/process_id.dart';
 
 /// A sink for a session logger that will write entries to a file.
@@ -32,27 +33,92 @@
 }
 
 /// A sink for a session logger that will write entries to an in-memory buffer.
-class SessionLoggerMemorySink extends SessionLoggerSink {
-  /// The maximum number of entries stored in the [buffer].
+class SessionLoggerInMemorySink extends SessionLoggerSink {
+  /// The maximum number of entries stored in the [_sessionBuffer].
   int maxBufferLength;
 
-  /// The buffer in which entries are stored.
-  List<JsonMap> buffer = [];
+  /// Whether entries should be captured in the buffer.
+  bool _capturingEntries = false;
+
+  /// A session logger to which requests should be forwarded, or `null` if there
+  /// is no logger to forward requests to.
+  SessionLoggerSink? nextLogger;
+
+  /// The buffer in which initialization related entries are stored.
+  final List<LogEntry> _initializationBuffer = [];
+
+  /// The buffer in which normal entries are stored.
+  final List<LogEntry> _sessionBuffer = [];
 
   /// Initialize a newly created sink to store up to [maxBufferLength] entries.
-  SessionLoggerMemorySink(this.maxBufferLength);
+  SessionLoggerInMemorySink({required this.maxBufferLength});
+
+  /// Returns a list of the entries that have been captured.
+  ///
+  /// The list includes necessary initialization entries that might have
+  /// occurred before the capture was started.
+  List<LogEntry> get capturedEntries {
+    return [..._initializationBuffer, ..._sessionBuffer];
+  }
+
+  /// Whether entries are currently being captured in the buffer.
+  bool get isCapturingEntries => _capturingEntries;
 
   @override
   Future<void> close() async {
-    // There's nothing to do in this case.
+    await nextLogger?.close();
+  }
+
+  /// Stops the capturing of entries.
+  void startCapture() {
+    _sessionBuffer.clear();
+    _capturingEntries = true;
+  }
+
+  /// Stops the capturing of entries.
+  void stopCapture() {
+    _capturingEntries = false;
   }
 
   @override
   void writeLogEntry(JsonMap entry) {
-    if (buffer.length > maxBufferLength) {
-      buffer.removeAt(0);
+    nextLogger?.writeLogEntry(entry);
+    var logEntry = LogEntry(entry);
+    if (_isInitializationEntry(logEntry)) {
+      _initializationBuffer.add(logEntry);
+      return;
     }
-    buffer.add(entry);
+    if (_capturingEntries) {
+      if (_sessionBuffer.length > maxBufferLength) {
+        _sessionBuffer.removeAt(0);
+      }
+      _sessionBuffer.add(logEntry);
+    } else {
+      // TODO(brianwilkerson): We also need to collect the most recent messages
+      //  related to which directories are open in the workspace and which files
+      //  are priority files. These should be in separate lists so that we can
+      //  flush messages that are no longer required in order to reproduce the
+      //  captured messages.
+    }
+  }
+
+  /// Returns whether the [entry] is an initialization entry.
+  ///
+  /// An initialization entry is defined as an entry that would need to be
+  /// replayed in order to make the captured entries make sense.
+  ///
+  /// Initialization entries are captured even when [captureEntries] is `false`.
+  bool _isInitializationEntry(LogEntry entry) {
+    if (entry.isCommandLine) return true;
+    if (entry.isMessage) {
+      // TODO(brianwilkerson): This list is incomplete in two ways.
+      //  1. It does not support the legacy protocol.
+      //  2. It does not capture entries that indicate the state of either the
+      //     workspace or the priority files.
+      var message = entry.message;
+      return message.isInitialize || message.isInitialized;
+    }
+    return false;
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index a26102c..a1da359 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -38,6 +38,7 @@
 import 'package:analysis_server/src/status/pages/not_found_page.dart';
 import 'package:analysis_server/src/status/pages/plugins_page.dart';
 import 'package:analysis_server/src/status/pages/refactorings_page.dart';
+import 'package:analysis_server/src/status/pages/session_log_page.dart';
 import 'package:analysis_server/src/status/pages/status_page.dart';
 import 'package:analysis_server/src/status/pages/subscriptions_page.dart';
 import 'package:analysis_server/src/status/pages/timing_page.dart';
@@ -181,9 +182,9 @@
       </span>
 
       <nav class="masthead-nav">
-        <a href="/status" ${isNavPage ? ' class="active"' : ''}>Diagnostics</a>
-        <a href="/collect-report" ${isCurrentPage('/collect-report') ? ' class="active"' : ''}>Collect Report</a>
-        <a href="/feedback" ${isCurrentPage('/feedback') ? ' class="active"' : ''}>Feedback</a>
+        <a href="status" ${isNavPage ? ' class="active"' : ''}>Insights</a>
+        <a href="collect-report" ${isCurrentPage('collect-report') ? ' class="active"' : ''}>Collect Report</a>
+        <a href="feedback" ${isCurrentPage('feedback') ? ' class="active"' : ''}>Feedback</a>
         <a href="https://dart.dev/tools/dart-analyze" target="_blank">Docs</a>
         <a href="https://htmlpreview.github.io/?https://github.com/dart-lang/sdk/blob/main/pkg/analysis_server/doc/api.html" target="_blank">Spec</a>
       </nav>
@@ -474,6 +475,9 @@
     pages.add(ElementModelPage(this));
     pages.add(ContentsPage(this));
 
+    // Add logging pages
+    pages.add(SessionLogPage(this));
+
     // Add timing pages
     pages.add(TimingPage(this));
     // (Nested)
diff --git a/pkg/analysis_server/lib/src/status/pages.dart b/pkg/analysis_server/lib/src/status/pages.dart
index 651cc4d..fa09fe5 100644
--- a/pkg/analysis_server/lib/src/status/pages.dart
+++ b/pkg/analysis_server/lib/src/status/pages.dart
@@ -26,7 +26,13 @@
 
   Page(this.id, this.title, {this.description});
 
-  String get path => '/$id';
+  // We could make this absolute which would make it work from multi-path
+  // routes, but that also breaks it when serving through certain proxy servers
+  // which add prefix segments to the path.
+  //
+  // Really, this should be a function that gives you the path from another
+  // page.
+  String get path => id;
 
   Future<void> asyncDiv(void Function() gen, {String? classes}) async {
     if (classes != null) {
@@ -248,7 +254,7 @@
     var path = request.uri.path;
 
     await _tryHandleRequest(request, (response, queryParameters) async {
-      var page = _getPage(path);
+      var page = _getPage(path.substring(1));
       if (page == null) {
         await respond(request, createUnknownPage(path), HttpStatus.notFound);
         return;
@@ -307,6 +313,7 @@
 
   /// Finds the [Page] that should handle requests to [path].
   Page? _getPage(String path) {
+    path = path.startsWith('/') ? path.substring(1) : path;
     return pages.firstWhereOrNull((page) => page.path == path);
   }
 
diff --git a/pkg/analysis_server/lib/src/status/pages/assists_page.dart b/pkg/analysis_server/lib/src/status/pages/assists_page.dart
index 1d73ed3..74403a2 100644
--- a/pkg/analysis_server/lib/src/status/pages/assists_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/assists_page.dart
@@ -53,7 +53,7 @@
       var (:time, :details) = producerTimeAndDetails(request);
       buf.writeln(
         '<tr>'
-        '<td class="pre right"><a href="/timing?id=${request.id}&kind=getAssists">'
+        '<td class="pre right"><a href="timing?id=${request.id}&kind=getAssists">'
         '${formatLatencyTiming(request.elapsedInMilliseconds, request.requestLatency)}'
         '</a></td>'
         '<td><abbr title="$details">${printMilliseconds(time)}</abbr></td>'
diff --git a/pkg/analysis_server/lib/src/status/pages/code_completion_page.dart b/pkg/analysis_server/lib/src/status/pages/code_completion_page.dart
index 4a81e29..7f2b87c 100644
--- a/pkg/analysis_server/lib/src/status/pages/code_completion_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/code_completion_page.dart
@@ -52,7 +52,7 @@
       var shortName = pathContext.basename(completion.path);
       buf.writeln(
         '<tr>'
-        '<td class="pre right"><a href="/timing?id=${completion.id}&kind=completion">'
+        '<td class="pre right"><a href="timing?id=${completion.id}&kind=completion">'
         '${formatLatencyTiming(completion.elapsedInMilliseconds, completion.requestLatency)}'
         '</a></td>'
         '<td class="right">${completion.computedSuggestionCountStr}</td>'
diff --git a/pkg/analysis_server/lib/src/status/pages/collect_report_page.dart b/pkg/analysis_server/lib/src/status/pages/collect_report_page.dart
index 660a95d..07d63c8 100644
--- a/pkg/analysis_server/lib/src/status/pages/collect_report_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/collect_report_page.dart
@@ -257,52 +257,12 @@
     collectedData['allowOverlappingHandlers'] =
         MessageScheduler.allowOverlappingHandlers;
 
-    var now = DateTime.now().millisecondsSinceEpoch;
     var listener = server.messageScheduler.listener;
     if (listener is! SchedulerTrackingListener) {
       return;
     }
 
-    Map<String, Object?> buildMessageData(
-      MessageData data, {
-      required bool isActive,
-    }) {
-      Map<String, Object?> messageData = {};
-      messageData['id'] = data.message.id;
-      messageData['pendingMessageCount'] = data.pendingMessageCount;
-      messageData['pendingDuration'] =
-          (data.activeTime ?? now) - data.pendingTime;
-      if (isActive) {
-        messageData['activeMessageCount'] = data.activeMessageCount;
-        messageData['runningDuration'] = now - data.activeTime!;
-      }
-      return messageData;
-    }
-
-    var (:pending, :active) = listener.pendingAndActiveMessages;
-    if (pending.isNotEmpty) {
-      pending.sort(
-        (first, second) => first.pendingTime.compareTo(second.pendingTime),
-      );
-      var pendingMessages = <Map<String, Object?>>[];
-      for (var data in pending) {
-        pendingMessages.add(buildMessageData(data, isActive: false));
-      }
-      collectedData['pendingMessages'] = pendingMessages;
-    }
-
-    if (active.isNotEmpty) {
-      active.sort(
-        (first, second) => first.activeTime!.compareTo(second.activeTime!),
-      );
-      var activeMessages = <Map<String, Object?>>[];
-      for (var data in active) {
-        activeMessages.add(buildMessageData(data, isActive: true));
-      }
-      collectedData['activeMessages'] = activeMessages;
-    }
-
-    collectedData['completedMessageLog'] = listener.completedMessageLog;
+    collectedData['messageLog'] = listener.getMessageLog();
   }
 
   Future<void> _collectObservatoryData(
diff --git a/pkg/analysis_server/lib/src/status/pages/fixes_page.dart b/pkg/analysis_server/lib/src/status/pages/fixes_page.dart
index 8ba64a7..3a01028 100644
--- a/pkg/analysis_server/lib/src/status/pages/fixes_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/fixes_page.dart
@@ -53,7 +53,7 @@
       var (:time, :details) = producerTimeAndDetails(request);
       buf.writeln(
         '<tr>'
-        '<td class="pre right"><a href="/timing?id=${request.id}&kind=getFixes">'
+        '<td class="pre right"><a href="timing?id=${request.id}&kind=getFixes">'
         '${formatLatencyTiming(request.elapsedInMilliseconds, request.requestLatency)}'
         '</a></td>'
         '<td><abbr title="$details">${printMilliseconds(time)}</abbr></td>'
diff --git a/pkg/analysis_server/lib/src/status/pages/message_scheduler_page.dart b/pkg/analysis_server/lib/src/status/pages/message_scheduler_page.dart
index 3fd0e05..66caf17 100644
--- a/pkg/analysis_server/lib/src/status/pages/message_scheduler_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/message_scheduler_page.dart
@@ -21,9 +21,10 @@
 
   @override
   Future<void> generateContent(Map<String, String> params) async {
-    var now = DateTime.now().millisecondsSinceEpoch;
     var listener = server.messageScheduler.listener;
 
+    buf.writeln('<style> .container { max-width: 1600px; } </style>');
+
     h3('Status');
     buf.writeln(
       writeOption(
@@ -36,77 +37,54 @@
       return;
     }
 
-    void writeRow(MessageData data, {required bool isActive}) {
-      var pendingDuration = (data.activeTime ?? now) - data.pendingTime;
-      buf.writeln('<tr>');
-      buf.writeln('<td>${data.message.id}</td>');
-      buf.writeln('<td>${data.pendingMessageCount}</td>');
-      buf.writeln('<td>$pendingDuration</td>');
-      if (isActive) {
-        buf.writeln('<td>${data.activeMessageCount}</td>');
-        buf.writeln('<td>${now - data.activeTime!}</td>');
-      } else {
-        buf.writeln('<td>-</td>');
-        buf.writeln('<td>-</td>');
-      }
-      buf.writeln('</tr>');
-    }
-
-    var (:pending, :active) = listener.pendingAndActiveMessages;
-
-    h3('Pending messages');
-    if (pending.isEmpty) {
-      p('none');
-    } else {
-      pending.sort(
-        (first, second) => first.pendingTime.compareTo(second.pendingTime),
-      );
-      buf.writeln('<table>');
-      buf.writeln(
-        '<tr><th>Message ID</th><th>Pending Ahead</th><th>Time in Pending</th><th>Active Ahead</th><th>Time Running</th></tr>',
-      );
-      for (var data in pending) {
-        writeRow(data, isActive: false);
-      }
-      buf.writeln('</table>');
-    }
-
-    h3('Active messages');
-    if (active.isEmpty) {
-      p('none');
-    } else {
-      active.sort(
-        (first, second) => first.activeTime!.compareTo(second.activeTime!),
-      );
-      buf.writeln('<table>');
-      buf.writeln(
-        '<tr><th>Message ID</th><th>Pending Ahead</th><th>Time in Pending</th><th>Active Ahead</th><th>Time Running</th></tr>',
-      );
-      for (var data in active) {
-        writeRow(data, isActive: true);
-      }
-      buf.writeln('</table>');
-    }
-
-    var lines = listener.completedMessageLog;
+    var lines = listener.getMessageLog();
     if (lines.isNotEmpty) {
-      h3('Completed messages');
+      h3('Messages');
       buf.writeln('<table>');
       buf.writeln(
-        '<tr><th>Message</th><th>Pending Count</th><th>Active Count</th><th>Pending Duration</th><th>Active Duration</th><th>Cancelled</th></tr>',
+        '<tr><th>Message</th><th>Pending (on pending)</th><th>Active (on pending)</th><th>Pending (on active)</th><th>Active (on active)</th><th>Queue Time</th><th>Process Time</th><th>Cancelled</th></tr>',
       );
       for (var line in lines) {
         var data = jsonDecode(line) as Map<String, dynamic>;
         buf.writeln('<tr>');
         buf.writeln('<td>${data['message']}</td>');
-        buf.writeln('<td>${data['pendingMessageCount']}</td>');
-        buf.writeln('<td>${data['activeMessageCount']}</td>');
-        buf.writeln('<td>${data['pendingDuration']}</td>');
-        buf.writeln('<td>${data['activeDuration']}</td>');
+        _writeCollapsibleList(
+          data['pendingMessageCount'] as int,
+          (data['pendingMessages'] as List?)?.cast<String>() ?? [],
+        );
+        _writeCollapsibleList(
+          data['activeOnPendingMessageCount'] as int,
+          (data['activeOnPendingMessages'] as List?)?.cast<String>() ?? [],
+        );
+        _writeCollapsibleList(
+          data['pendingOnActiveMessageCount'] as int,
+          (data['pendingOnActiveMessages'] as List?)?.cast<String>() ?? [],
+        );
+        _writeCollapsibleList(
+          data['activeOnActiveMessageCount'] as int,
+          (data['activeOnActiveMessages'] as List?)?.cast<String>() ?? [],
+        );
+        buf.writeln('<td>${data['queueTime']}</td>');
+        buf.writeln('<td>${data['processTime']}</td>');
         buf.writeln('<td>${data['wasCancelled']}</td>');
         buf.writeln('</tr>');
       }
       buf.writeln('</table>');
     }
   }
+
+  void _writeCollapsibleList(int count, List<String> messages) {
+    if (count > 0) {
+      buf.writeln('<td>');
+      buf.writeln('<details>');
+      buf.writeln('<summary>$count</summary>');
+      for (var message in messages) {
+        buf.writeln('$message<br>');
+      }
+      buf.writeln('</details>');
+      buf.writeln('</td>');
+    } else {
+      buf.writeln('<td>$count</td>');
+    }
+  }
 }
diff --git a/pkg/analysis_server/lib/src/status/pages/refactorings_page.dart b/pkg/analysis_server/lib/src/status/pages/refactorings_page.dart
index 795384e..ba2d71c 100644
--- a/pkg/analysis_server/lib/src/status/pages/refactorings_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/refactorings_page.dart
@@ -54,7 +54,7 @@
       var (:time, :details) = producerTimeAndDetails(request);
       buf.writeln(
         '<tr>'
-        '<td class="pre right"><a href="/timing?id=${request.id}&kind=getRefactorings">'
+        '<td class="pre right"><a href="timing?id=${request.id}&kind=getRefactorings">'
         '${formatLatencyTiming(request.elapsedInMilliseconds, request.requestLatency)}'
         '</a></td>'
         '<td><abbr title="$details">${printMilliseconds(time)}</abbr></td>'
diff --git a/pkg/analysis_server/lib/src/status/pages/session_log_page.dart b/pkg/analysis_server/lib/src/status/pages/session_log_page.dart
new file mode 100644
index 0000000..caf18bc
--- /dev/null
+++ b/pkg/analysis_server/lib/src/status/pages/session_log_page.dart
@@ -0,0 +1,76 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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 'package:analysis_server/src/session_logger/session_logger_sink.dart';
+import 'package:analysis_server/src/status/diagnostics.dart';
+import 'package:analysis_server/src/status/pages.dart';
+
+class SessionLogPage extends DiagnosticPageWithNav implements PostablePage {
+  static const _captureFormId = 'capture-entries';
+
+  SessionLogPage(DiagnosticsSite site)
+    : super(
+        site,
+        'session-log',
+        'Session communications log',
+        description:
+            'A log containing all of the communications between the analysis '
+            'server and other processes.',
+        indentInNav: false,
+      );
+
+  @override
+  Future<void> generateContent(Map<String, String> params) async {
+    var sink = server.sessionLogger.sink;
+    if (sink is! SessionLoggerInMemorySink) {
+      buf.write('Internal error.');
+      return;
+    }
+    if (sink.isCapturingEntries) {
+      buf.write('''
+<form action="$path?$_captureFormId=false" method="post">
+<input type="submit" class="btn" value="Stop capturing entries" />
+</form>
+''');
+      h1('Current log contents (in progress)');
+    } else {
+      buf.write('''
+<form action="$path?$_captureFormId=true" method="post">
+<input type="submit" class="btn" value="Start capturing entries" />
+</form>
+''');
+      h1('Previous log contents');
+    }
+    // Output the current entries.
+    var buffer = StringBuffer();
+    var entries = sink.capturedEntries;
+    for (var entry in entries) {
+      buffer.writeln(json.encode(entry));
+    }
+    pre(() {
+      buf.write('<code>');
+      buf.write(escape('$buffer'));
+      buf.writeln('</code>');
+    });
+  }
+
+  @override
+  Future<String> handlePost(Map<String, String> params) async {
+    var newCaptureState = params[_captureFormId];
+    if (newCaptureState != null) {
+      var sink = server.sessionLogger.sink;
+      if (sink is SessionLoggerInMemorySink) {
+        if (newCaptureState == 'true') {
+          sink.startCapture();
+        } else {
+          sink.stopCapture();
+        }
+      }
+    }
+    return path;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/status/pages/timing_page.dart b/pkg/analysis_server/lib/src/status/pages/timing_page.dart
index 597f78e..d5d846d 100644
--- a/pkg/analysis_server/lib/src/status/pages/timing_page.dart
+++ b/pkg/analysis_server/lib/src/status/pages/timing_page.dart
@@ -76,7 +76,7 @@
     for (var item in items) {
       buf.writeln(
         '<tr>'
-        '<td class="pre right"><a href="/timing?id=${item.id}">'
+        '<td class="pre right"><a href="timing?id=${item.id}">'
         '${formatLatencyTiming(item.performance.elapsed.inMilliseconds, item.requestLatency)}'
         '</a></td>'
         '<td>${escape(item.operation)}</td>'
diff --git a/pkg/analysis_server/lib/src/status/utilities/ast_writer.dart b/pkg/analysis_server/lib/src/status/utilities/ast_writer.dart
index ef3ed76..22d42b3 100644
--- a/pkg/analysis_server/lib/src/status/utilities/ast_writer.dart
+++ b/pkg/analysis_server/lib/src/status/utilities/ast_writer.dart
@@ -144,13 +144,15 @@
     if (node is ClassTypeAlias) {
       return node.name.lexeme;
     } else if (node is ClassDeclaration) {
-      return node.name.lexeme;
+      return node.namePart.typeName.lexeme;
     } else if (node is ConstructorDeclaration) {
       var name = node.name;
       if (name == null) {
-        return node.returnType.name;
+        // TODO(scheglov): support primary constructors
+        return node.typeName!.name;
       } else {
-        return '${node.returnType.name}.${name.lexeme}';
+        // TODO(scheglov): support primary constructors
+        return '${node.typeName!.name}.${name.lexeme}';
       }
     } else if (node is ConstructorName) {
       return node.toSource();
diff --git a/pkg/analysis_server/lib/src/utilities/change_builder.dart b/pkg/analysis_server/lib/src/utilities/change_builder.dart
index 6093a8a..bd26eda 100644
--- a/pkg/analysis_server/lib/src/utilities/change_builder.dart
+++ b/pkg/analysis_server/lib/src/utilities/change_builder.dart
@@ -12,7 +12,7 @@
 /// Builds and returns a single [SourceEdit] for a new constructor, inserted
 /// into [container].
 Future<SourceEdit?> buildEditForInsertedConstructor(
-  NamedCompilationUnitMember container,
+  CompilationUnitMember container,
   void Function(DartEditBuilder builder) buildEdit, {
   required ResolvedUnitResult resolvedUnit,
   required AnalysisSession session,
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/ast.dart b/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
index a3bee7b..279a8613 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/ast.dart
@@ -210,6 +210,17 @@
   }
 }
 
+extension ClassDeclarationExtension on ClassDeclaration {
+  List<ClassMember> get members2 {
+    switch (body) {
+      case BlockClassBody body:
+        return body.members;
+      default:
+        return [];
+    }
+  }
+}
+
 extension CompilationUnitExtension on CompilationUnit {
   /// Return the list of tokens that comprise the file header comment for this
   /// compilation unit.
@@ -332,6 +343,17 @@
   }
 }
 
+extension ExtensionTypeDeclarationExtension on ExtensionTypeDeclaration {
+  List<ClassMember> get members2 {
+    switch (body) {
+      case BlockClassBody body:
+        return body.members;
+      default:
+        return [];
+    }
+  }
+}
+
 extension FunctionBodyExtension on FunctionBody {
   bool get isEmpty =>
       this is EmptyFunctionBody ||
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/element.dart b/pkg/analysis_server/lib/src/utilities/extensions/element.dart
index 64a94a2..ddba73c 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/element.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/element.dart
@@ -23,22 +23,22 @@
 }
 
 extension ElementExtensions on Element {
-  /// Return `true` if this element, the enclosing class (if there is one), or
-  /// the enclosing library, has been annotated with the `@deprecated`
+  /// Whether this element, the enclosing class (if there is one), or
+  /// the enclosing library, has been annotated with the `@Deprecated()`
   /// annotation.
   bool get hasOrInheritsDeprecated {
-    if (metadata.hasDeprecated) {
+    if (isDeprecatedWithKind('use')) {
       return true;
     }
 
     var ancestor = enclosingElement;
     if (ancestor is InterfaceElement) {
-      if (ancestor.metadata.hasDeprecated) {
+      if (ancestor.isDeprecatedWithKind('use')) {
         return true;
       }
       ancestor = ancestor.enclosingElement;
     }
-    return ancestor is LibraryElement && ancestor.metadata.hasDeprecated;
+    return ancestor is LibraryElement && ancestor.isDeprecatedWithKind('use');
   }
 
   /// Return this element and all its enclosing elements.
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 e93f568..db252f4 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/range_factory.dart
@@ -98,7 +98,7 @@
   /// 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<T> list,
     List<int> indexes,
   ) {
     var ranges = <SourceRange>[];
diff --git a/pkg/analysis_server/lib/src/utilities/import_analyzer.dart b/pkg/analysis_server/lib/src/utilities/import_analyzer.dart
index e923839..92c9e3f 100644
--- a/pkg/analysis_server/lib/src/utilities/import_analyzer.dart
+++ b/pkg/analysis_server/lib/src/utilities/import_analyzer.dart
@@ -124,7 +124,7 @@
     LibraryImport? import,
   ) {
     if (referencedElement is PropertyAccessorElement) {
-      if (referencedElement.isSynthetic) {
+      if (referencedElement.isOriginVariable) {
         referencedElement = referencedElement.variable;
       }
     }
@@ -221,17 +221,17 @@
     if (extensionElement != null) {
       recorder.recordDeclaration(node.offset, extensionElement);
       for (var getter in extensionElement.getters) {
-        if (!getter.isStatic && !getter.isSynthetic) {
+        if (!getter.isStatic && getter.isOriginDeclaration) {
           recorder.recordDeclaration(node.offset, getter);
         }
       }
       for (var setter in extensionElement.setters) {
-        if (!setter.isStatic && !setter.isSynthetic) {
+        if (!setter.isStatic && setter.isOriginDeclaration) {
           recorder.recordDeclaration(node.offset, setter);
         }
       }
       for (var field in extensionElement.fields) {
-        if (!field.isStatic && !field.isSynthetic) {
+        if (!field.isStatic && field.isOriginDeclaration) {
           recorder.recordDeclaration(node.offset, field);
         }
       }
diff --git a/pkg/analysis_server/lib/src/utilities/navigation/keyword_navigation_computer.dart b/pkg/analysis_server/lib/src/utilities/navigation/keyword_navigation_computer.dart
index 16a02d3..b99cc8c 100644
--- a/pkg/analysis_server/lib/src/utilities/navigation/keyword_navigation_computer.dart
+++ b/pkg/analysis_server/lib/src/utilities/navigation/keyword_navigation_computer.dart
@@ -66,7 +66,8 @@
       ConstructorDeclaration() =>
         // For named constructors, return the name.
         // For unnamed constructors, use the return type / class name.
-        function.name ?? function.returnType.beginToken,
+        // TODO(scheglov): support primary constructors
+        function.name ?? function.typeName!.beginToken,
       _ => null,
     };
   }
diff --git a/pkg/analysis_server/lib/src/utilities/process.dart b/pkg/analysis_server/lib/src/utilities/process.dart
index 1d9ee7b..51b6766 100644
--- a/pkg/analysis_server/lib/src/utilities/process.dart
+++ b/pkg/analysis_server/lib/src/utilities/process.dart
@@ -3,10 +3,29 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:convert';
 import 'dart:io';
 
 /// An abstraction over [Process] from 'dart:io' to allow mocking in tests.
 class ProcessRunner {
+  const ProcessRunner();
+
+  ProcessResult runSync(
+    String executable,
+    List<String> arguments, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    Encoding? stderrEncoding,
+    Encoding? stdoutEncoding,
+  }) => Process.runSync(
+    executable,
+    arguments,
+    workingDirectory: workingDirectory,
+    environment: environment,
+    stderrEncoding: stderrEncoding,
+    stdoutEncoding: stdoutEncoding,
+  );
+
   Future<Process> start(
     String executable,
     List<String> arguments, {
diff --git a/pkg/analysis_server/lib/src/utilities/strings.dart b/pkg/analysis_server/lib/src/utilities/strings.dart
index 25968df..4bc4d23 100644
--- a/pkg/analysis_server/lib/src/utilities/strings.dart
+++ b/pkg/analysis_server/lib/src/utilities/strings.dart
@@ -7,10 +7,10 @@
 import 'package:analyzer/src/utilities/extensions/string.dart';
 
 /// "$"
-const int CHAR_DOLLAR = 0x24;
+const int charDollar = 0x24;
 
 /// "_"
-const int CHAR_UNDERSCORE = 0x5F;
+const int charUnderscore = 0x5F;
 
 String? capitalize(String? str) {
   if (str == null || str.isEmpty) {
diff --git a/pkg/analysis_server/messages.yaml b/pkg/analysis_server/messages.yaml
new file mode 100644
index 0000000..1bc8a0a
--- /dev/null
+++ b/pkg/analysis_server/messages.yaml
@@ -0,0 +1,153 @@
+# Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+# for 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
+#
+#     dart run pkg/analyzer/tool/messages/generate.dart
+#
+# to regenerate messages after having edited this file.
+
+# See `pkg/analyzer/messages.yaml` for a description of the contents
+# of this file.
+
+TransformSetErrorCode:
+  conflicting_key:
+    type: compileTimeError
+    parameters:
+      Object p0: the conflicting key
+      Object p1: the key that it conflicts with
+    problemMessage: "The key '#p0' can't be used when '#p1' is also used."
+    hasPublishedDocs: false
+  expected_primary:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "Expected either an identifier or a string literal."
+    hasPublishedDocs: false
+  incompatible_element_kind:
+    type: compileTimeError
+    parameters:
+      Object p0: the old kind
+      Object p1: the new kind
+    problemMessage: "An element of kind '#p0' can't be replaced by an element of kind '#p1'."
+    hasPublishedDocs: false
+  invalid_change_for_kind:
+    type: compileTimeError
+    parameters:
+      Object p0: the change kind that is invalid
+      Object p1: the element kind for the transform
+    problemMessage: "A change of type '#p0' can't be used for an element of kind '#p1'."
+    hasPublishedDocs: false
+  invalid_character:
+    type: compileTimeError
+    parameters:
+      Object p0: the character that is invalid
+    problemMessage: "Invalid character '#p0'."
+    hasPublishedDocs: false
+  invalid_key:
+    type: compileTimeError
+    parameters:
+      Object p0: the actual type of the key
+    problemMessage: "Keys must be of type 'String' but found the type '#p0'."
+    hasPublishedDocs: false
+  invalid_required_if:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "The key 'requiredIf' can only be used with optional named parameters."
+    hasPublishedDocs: false
+  invalid_value:
+    type: compileTimeError
+    parameters:
+      Object p0: the key with which the value is associated
+      Object p1: the expected type of the value
+      Object p2: the actual type of the value
+    problemMessage: "The value of '#p0' should be of type '#p1' but is of type '#p2'."
+    hasPublishedDocs: false
+  invalid_parameter_style:
+    type: compileTimeError
+    parameters:
+      Object p0: the list of valid parameter styles
+    problemMessage: "The parameter style must be one of the following: #p0."
+    hasPublishedDocs: false
+  invalid_value_one_of:
+    type: compileTimeError
+    parameters:
+      Object p0: the key with which the value is associated
+      Object p1: the allowed values as a comma-separated list
+    problemMessage: "The value of '#p0' must be one of the following: '#p1'."
+    hasPublishedDocs: false
+  missing_key:
+    type: compileTimeError
+    parameters:
+      Object p0: the missing key
+    problemMessage: "Missing the required key '#p0'."
+    hasPublishedDocs: false
+  missing_one_of_multiple_keys:
+    type: compileTimeError
+    parameters:
+      Object p0: the list of valid keys
+    problemMessage: "Exactly one of the following keys must be provided: #p0."
+    hasPublishedDocs: false
+  missing_template_end:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "Missing the end brace for the template."
+    hasPublishedDocs: false
+  missing_token:
+    type: compileTimeError
+    parameters:
+      Object p0: a description of the expected kinds of tokens
+    problemMessage: "Expected to find #p0."
+    hasPublishedDocs: false
+  missing_uri:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "At least one URI must be provided."
+    hasPublishedDocs: false
+  undefined_variable:
+    type: compileTimeError
+    parameters:
+      Object p0: the missing key
+    problemMessage: "The variable '#p0' isn't defined."
+    hasPublishedDocs: false
+  unexpected_transform_set_token:
+    type: compileTimeError
+    parameters:
+      Object p0: the token that was unexpectedly found
+    problemMessage: "Didn't expect to find #p0."
+    hasPublishedDocs: false
+  unknown_accessor:
+    type: compileTimeError
+    parameters:
+      Object p0: a description of the expected kind of token
+    problemMessage: "The accessor '#p0' is invalid."
+    hasPublishedDocs: false
+  unsupported_key:
+    type: compileTimeError
+    parameters:
+      Object p0: the unsupported key
+    problemMessage: "The key '#p0' isn't supported."
+    hasPublishedDocs: false
+  unsupported_static:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "The key 'static' is only supported for elements in a class, enum, extension, or mixin."
+    hasPublishedDocs: false
+  unsupported_version:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "Only version '1' is supported at this time."
+    hasPublishedDocs: false
+  wrong_token:
+    type: compileTimeError
+    parameters:
+      Object p0: a description of the expected kind of token
+      Object p1: a description of the actual kind of token
+    problemMessage: "Expected to find #p0, but found #p1."
+    hasPublishedDocs: false
+  yaml_syntax_error:
+    type: compileTimeError
+    parameters:
+      Object p0: the message produced by the YAML parser
+    problemMessage: "Parse error: #p0"
+    hasPublishedDocs: false
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index 321757a..0c99d7b 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: '^3.9.0'
+  sdk: '^3.10.0'
 
 resolution: workspace
 
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index d83eff2..29c0490 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -125,6 +125,7 @@
     List<String> cannotIgnore = const [],
     List<String> lints = const [],
     Map<String, Object?> errors = const {},
+    bool propagateLinterExceptions = true,
     bool strictCasts = false,
     bool strictInference = false,
     bool strictRawTypes = false,
@@ -134,6 +135,7 @@
         includes: includes,
         experiments: experiments,
         legacyPlugins: legacyPlugins,
+        propagateLinterExceptions: propagateLinterExceptions,
         rules: lints,
         errors: errors,
         unignorableNames: cannotIgnore,
@@ -277,6 +279,7 @@
       includedPaths: collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
       sdkPath: sdkRoot.path,
+      withFineDependencies: true,
     );
 
     _addAnalyzedFilesToDrivers();
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 05b4e9b..5070b2c 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_element2.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer/src/test_utilities/test_code_format.dart';
@@ -84,13 +84,13 @@
     if (verifyNoTestUnitErrors) {
       expect(
         unitResult.diagnostics.where((d) {
-          return d.diagnosticCode != WarningCode.deadCode &&
-              d.diagnosticCode != WarningCode.unusedCatchClause &&
-              d.diagnosticCode != WarningCode.unusedCatchStack &&
-              d.diagnosticCode != WarningCode.unusedElement &&
-              d.diagnosticCode != WarningCode.unusedField &&
-              d.diagnosticCode != WarningCode.unusedImport &&
-              d.diagnosticCode != WarningCode.unusedLocalVariable;
+          return d.diagnosticCode != diag.deadCode &&
+              d.diagnosticCode != diag.unusedCatchClause &&
+              d.diagnosticCode != diag.unusedCatchStack &&
+              d.diagnosticCode != diag.unusedElement &&
+              d.diagnosticCode != diag.unusedField &&
+              d.diagnosticCode != diag.unusedImport &&
+              d.diagnosticCode != diag.unusedLocalVariable;
         }),
         isEmpty,
       );
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index 0d47e23..32a6fa1 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -1254,7 +1254,7 @@
     expect(hover.elementDescription, 'int foo<U>(int t, U u)');
     expect(hover.elementKind, 'method');
     // types
-    expect(hover.staticType, isNull);
+    expect(hover.staticType, 'int Function<U>(int, U)');
     expect(hover.propagatedType, isNull);
     // no parameter
     expect(hover.parameter, isNull);
@@ -1281,7 +1281,7 @@
     expect(hover.elementDescription, 'int foo<U>(U u)');
     expect(hover.elementKind, 'method');
     // types
-    expect(hover.staticType, isNull);
+    expect(hover.staticType, 'int Function<U>(U)');
     expect(hover.propagatedType, isNull);
     // no parameter
     expect(hover.parameter, isNull);
@@ -1702,6 +1702,21 @@
     expect(hover.elementKind, 'parameter');
   }
 
+  Future<void> test_parameter_reference_deprecated_optional() async {
+    newFile(testFilePath, '''
+void f({@Deprecated.optional() int p}) {}
+void g() {
+  f(p: 1);
+}
+''');
+    var hover = await prepareHover('f(p: 1);');
+    // element
+    expect(hover.containingLibraryPath, testFile.path);
+    expect(hover.elementDescription, 'void f({int p})');
+    expect(hover.elementKind, 'function');
+    expect(hover.isDeprecated, isFalse);
+  }
+
   Future<void> test_parameter_reference_fieldFormal() async {
     newFile(testFilePath, '''
 class A {
diff --git a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
index 0e6cec8..4dff783 100644
--- a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
@@ -40,7 +40,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+    if (notification.event == analysisNotificationErrors) {
       var decoded = AnalysisErrorsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart b/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
index f4e2e76..95ac545 100644
--- a/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analyzed_files_test.dart
@@ -40,7 +40,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_ANALYZED_FILES) {
+    if (notification.event == analysisNotificationAnalyzedFiles) {
       var params = AnalysisAnalyzedFilesParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
index f25aa25..70165e1 100644
--- a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
@@ -44,7 +44,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_CLOSING_LABELS) {
+    if (notification.event == analysisNotificationClosingLabels) {
       var params = AnalysisClosingLabelsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
@@ -53,7 +53,7 @@
         lastLabels = params.labels;
         _labelsReceived.complete();
       }
-    } else if (notification.event == SERVER_NOTIFICATION_ERROR) {
+    } else if (notification.event == serverNotificationError) {
       var params = ServerErrorParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index 99cfc68..ec76d41 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -27,13 +27,13 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+    if (notification.event == analysisNotificationErrors) {
       var decoded = AnalysisErrorsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
       );
       filesErrors[getFile(decoded.file)] = decoded.errors;
-    } else if (notification.event == ANALYSIS_NOTIFICATION_FLUSH_RESULTS) {
+    } else if (notification.event == analysisNotificationFlushResults) {
       var decoded = AnalysisFlushResultsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
@@ -73,7 +73,7 @@
 
   Future<void> test_analysisOptionsFile_packageInclude() async {
     var analysisOptions = newAnalysisOptionsYamlFile(testPackageRootPath, '''
-include: package:pedantic/analysis_options.yaml
+include: package:lints/lints.yaml
 ''');
 
     await setRoots(included: [workspaceRootPath], excluded: []);
@@ -89,7 +89,15 @@
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
 
     // Write a package file that allows resolving the include.
-    writeTestPackageConfig(pedantic: true);
+    var lintsRootPath = '/packages/lints';
+    newFile(
+      '$lintsRootPath/lib/lints.yaml',
+      '# Used for testing diagnostics for imports in analysis options files.',
+    );
+    writeTestPackageConfig(
+      config: PackageConfigFileBuilder()
+        ..add(name: 'lints', rootPath: lintsRootPath),
+    );
 
     // Ensure the errors disappear.
     await waitForTasksFinished();
diff --git a/pkg/analysis_server/test/analysis/notification_folding_test.dart b/pkg/analysis_server/test/analysis/notification_folding_test.dart
index 63984e8..29af3b6 100644
--- a/pkg/analysis_server/test/analysis/notification_folding_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_folding_test.dart
@@ -43,7 +43,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_FOLDING) {
+    if (notification.event == analysisNotificationFolding) {
       var params = AnalysisFoldingParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
@@ -52,7 +52,7 @@
         lastRegions = params.regions;
         _regionsReceived.complete();
       }
-    } else if (notification.event == SERVER_NOTIFICATION_ERROR) {
+    } else if (notification.event == serverNotificationError) {
       var params = ServerErrorParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index a1e0727..246639f 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -1306,7 +1306,7 @@
 1:24 |T| TYPE_PARAMETER
 1:27 |named| CONSTRUCTOR
 1:33 |int| CLASS
-1:37 |it| INSTANCE_FIELD_DECLARATION
+1:37 |it| PARAMETER_DECLARATION
 1:41 |implements| BUILT_IN
 1:52 |num| CLASS
 ''');
@@ -2761,12 +2761,12 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == SERVER_NOTIFICATION_ERROR) {
+    if (notification.event == serverNotificationError) {
       print('SERVER_NOTIFICATION_ERROR: ${notification.toJson()}');
       _resultsAvailable.complete();
       fail('SERVER_NOTIFICATION_ERROR');
     }
-    if (notification.event == ANALYSIS_NOTIFICATION_HIGHLIGHTS) {
+    if (notification.event == analysisNotificationHighlights) {
       var params = AnalysisHighlightsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
index bbdec2b..7461b06 100644
--- a/pkg/analysis_server/test/analysis/notification_implemented_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -98,7 +98,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_IMPLEMENTED) {
+    if (notification.event == analysisNotificationImplemented) {
       var params = AnalysisImplementedParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index fbfff5e..4649470 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -203,7 +203,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_NAVIGATION) {
+    if (notification.event == analysisNotificationNavigation) {
       var params = AnalysisNavigationParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index f3ecef8..17b4715 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -99,7 +99,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_OCCURRENCES) {
+    if (notification.event == analysisNotificationOccurrences) {
       var params = AnalysisOccurrencesParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index 0d5a7b3..572d55a 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -35,7 +35,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_OUTLINE) {
+    if (notification.event == analysisNotificationOutline) {
       var params = AnalysisOutlineParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
@@ -47,7 +47,7 @@
         _outlineReceived.complete();
       }
     }
-    if (notification.event == ANALYSIS_NOTIFICATION_HIGHLIGHTS) {
+    if (notification.event == analysisNotificationHighlights) {
       var params = AnalysisHighlightsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index e6b1b54..b62bb53 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -127,7 +127,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_OVERRIDES) {
+    if (notification.event == analysisNotificationOverrides) {
       var params = AnalysisOverridesParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/reanalyze_test.dart b/pkg/analysis_server/test/analysis/reanalyze_test.dart
index bd9f0ca..ab266bf 100644
--- a/pkg/analysis_server/test/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/analysis/reanalyze_test.dart
@@ -24,7 +24,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+    if (notification.event == analysisNotificationErrors) {
       var decoded = AnalysisErrorsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index 9fcd1c16..2cee47a 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -28,7 +28,7 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+    if (notification.event == analysisNotificationErrors) {
       var decoded = AnalysisErrorsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
@@ -36,10 +36,10 @@
       String format(AnalysisError e) => '${e.location.startLine}: ${e.message}';
       filesErrors[getFile(decoded.file)] = decoded.errors.map(format).toList();
     }
-    if (notification.event == ANALYSIS_NOTIFICATION_NAVIGATION) {
+    if (notification.event == analysisNotificationNavigation) {
       navigationCount++;
     }
-    if (notification.event == SERVER_NOTIFICATION_ERROR) {
+    if (notification.event == serverNotificationError) {
       serverErrorCount++;
     }
   }
diff --git a/pkg/analysis_server/test/analysis_server_base.dart b/pkg/analysis_server/test/analysis_server_base.dart
index 8f80bcc..b10ba76 100644
--- a/pkg/analysis_server/test/analysis_server_base.dart
+++ b/pkg/analysis_server/test/analysis_server_base.dart
@@ -221,9 +221,6 @@
 
   final String testPackageName = 'test';
 
-  /// Whether to automatically normalize line endings for the current platform.
-  bool useLineEndingsForPlatform = true;
-
   /// 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 => experimentsForTests;
@@ -277,9 +274,7 @@
 
   // TODO(scheglov): rename
   void addTestFile(String content) {
-    parsedTestCode = useLineEndingsForPlatform
-        ? TestCode.parseNormalized(content)
-        : TestCode.parse(content);
+    parsedTestCode = TestCode.parseNormalized(content);
     newFile(testFilePath, parsedTestCode.code);
   }
 
@@ -322,9 +317,7 @@
 
   @override
   File newFile(String path, String content) {
-    if (useLineEndingsForPlatform) {
-      content = normalizeNewlinesForPlatform(content);
-    }
+    content = normalizeNewlinesForPlatform(content);
     return super.newFile(path, content);
   }
 
diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart
index dae9581..f327548 100644
--- a/pkg/analysis_server/test/analysis_server_test.dart
+++ b/pkg/analysis_server/test/analysis_server_test.dart
@@ -182,10 +182,10 @@
     errorNotifier.logException(Exception('dummy exception'));
 
     var errors = channel.notificationsReceived.where(
-      (notification) => notification.event == SERVER_NOTIFICATION_ERROR,
+      (notification) => notification.event == serverNotificationError,
     );
     expect(
-      errors.single.params![SERVER_NOTIFICATION_ERROR_MESSAGE],
+      errors.single.params![serverNotificationErrorMessage],
       contains('dummy exception'),
     );
   }
@@ -198,10 +198,10 @@
     );
 
     var errors = channel.notificationsReceived.where(
-      (notification) => notification.event == SERVER_NOTIFICATION_ERROR,
+      (notification) => notification.event == serverNotificationError,
     );
     expect(
-      errors.single.params![SERVER_NOTIFICATION_ERROR_MESSAGE],
+      errors.single.params![serverNotificationErrorMessage],
       contains('dummy exception'),
     );
   }
@@ -223,7 +223,7 @@
     // At least one notification indicating analysis is in progress.
     expect(
       notifications.any((Notification notification) {
-        if (notification.event == SERVER_NOTIFICATION_STATUS) {
+        if (notification.event == serverNotificationStatus) {
           var params = ServerStatusParams.fromNotification(
             notification,
             clientUriConverter: server.uriConverter,
@@ -262,7 +262,7 @@
     // At least one notification indicating analysis is in progress.
     expect(
       notifications.any((Notification notification) {
-        if (notification.event == SERVER_NOTIFICATION_STATUS) {
+        if (notification.event == serverNotificationStatus) {
           var params = ServerStatusParams.fromNotification(
             notification,
             clientUriConverter: server.uriConverter,
@@ -304,7 +304,7 @@
     await pumpEventQueue(times: 5000);
     expect(
       channel.notificationsReceived.any((notification) {
-        return notification.event == ANALYSIS_NOTIFICATION_NAVIGATION;
+        return notification.event == analysisNotificationNavigation;
       }),
       isTrue,
     );
@@ -328,14 +328,14 @@
     await pumpEventQueue(times: 5000);
     expect(
       channel.notificationsReceived.any((notification) {
-        return notification.event == ANALYSIS_NOTIFICATION_NAVIGATION;
+        return notification.event == analysisNotificationNavigation;
       }),
       isTrue,
     );
   }
 
   Future<void> test_shutdown() {
-    var request = Request('my28', SERVER_REQUEST_SHUTDOWN);
+    var request = Request('my28', serverRequestShutdown);
     return channel.simulateRequestFromClient(request).then((Response response) {
       expect(response.id, equals('my28'));
       expect(response.error, isNull);
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 2208c0e..3e838d8 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -76,9 +76,7 @@
   @override
   @protected
   Future<List<CompletionSuggestion>> addTestFile(String content) async {
-    if (useLineEndingsForPlatform) {
-      content = normalizeNewlinesForPlatform(content);
-    }
+    content = normalizeNewlinesForPlatform(content);
     driver.addTestFile(content);
 
     // Wait after adding the test file, this might affect diagnostics.
@@ -319,6 +317,34 @@
     with BasicCompletionTestCases {}
 
 mixin BasicCompletionTestCases on AbstractCompletionDriverTest {
+  Future<void> test_deprecated_class_relevance() async {
+    await computeSuggestions('''
+class A1 {}
+
+@Deprecated()
+class A2 {}
+
+void f() {
+  var a = A^
+}
+''');
+
+    expect(
+      suggestionWith(
+        completion: 'A2',
+        element: ElementKind.CONSTRUCTOR,
+        kind: CompletionSuggestionKind.INVOCATION,
+      ).relevance,
+      lessThan(
+        suggestionWith(
+          completion: 'A1',
+          element: ElementKind.CONSTRUCTOR,
+          kind: CompletionSuggestionKind.INVOCATION,
+        ).relevance,
+      ),
+    );
+  }
+
   /// Duplicates (and potentially replaces) [DeprecatedMemberRelevanceTest].
   Future<void> test_deprecated_member_relevance() async {
     await computeSuggestions('''
@@ -349,6 +375,34 @@
       ),
     );
   }
+
+  Future<void> test_deprecatedExtend_class_relevance() async {
+    await computeSuggestions('''
+class A1 {}
+
+@Deprecated.extend()
+class A2 {}
+
+void f() {
+  var a = A^
+}
+''');
+
+    expect(
+      suggestionWith(
+        completion: 'A2',
+        element: ElementKind.CONSTRUCTOR,
+        kind: CompletionSuggestionKind.INVOCATION,
+      ).relevance,
+      equals(
+        suggestionWith(
+          completion: 'A1',
+          element: ElementKind.CONSTRUCTOR,
+          kind: CompletionSuggestionKind.INVOCATION,
+        ).relevance,
+      ),
+    );
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 49f8212..37c5d84 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -74,23 +74,23 @@
 
   @mustCallSuper
   Future<void> processNotification(Notification notification) async {
-    if (notification.event == COMPLETION_NOTIFICATION_EXISTING_IMPORTS) {
+    if (notification.event == completionNotificationExistingImports) {
       var params = CompletionExistingImportsParams.fromNotification(
         notification,
         clientUriConverter: null,
       );
       fileToExistingImports[params.file] = params.imports;
-    } else if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+    } else if (notification.event == analysisNotificationErrors) {
       var decoded = AnalysisErrorsParams.fromNotification(
         notification,
         clientUriConverter: null,
       );
       filesErrors[decoded.file] = decoded.errors;
-    } else if (notification.event == ANALYSIS_NOTIFICATION_FLUSH_RESULTS) {
+    } else if (notification.event == analysisNotificationFlushResults) {
       // Ignored.
-    } else if (notification.event == SERVER_NOTIFICATION_ERROR) {
+    } else if (notification.event == serverNotificationError) {
       throw Exception('server error: ${notification.toJson()}');
-    } else if (notification.event == SERVER_NOTIFICATION_CONNECTED) {
+    } else if (notification.event == serverNotificationConnected) {
       // Ignored.
     } else {
       print('Unhandled notification: ${notification.event}');
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 0db77aa..7f25ece 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -11,7 +11,7 @@
 
 /// A base class for classes containing completion tests.
 abstract class CompletionTestCase extends AbstractCompletionDomainTest {
-  static const String CURSOR_MARKER = '!';
+  static const String _cursorMarker = '!';
 
   List<String> get suggestedCompletions => suggestions
       .map((CompletionSuggestion suggestion) => suggestion.completion)
@@ -23,14 +23,14 @@
     bool? isDeprecated,
     Matcher? libraryUri,
   }) {
-    var expectedOffset = completion.indexOf(CURSOR_MARKER);
+    var expectedOffset = completion.indexOf(_cursorMarker);
     if (expectedOffset >= 0) {
-      if (completion.contains(CURSOR_MARKER, expectedOffset + 1)) {
+      if (completion.contains(_cursorMarker, expectedOffset + 1)) {
         fail(
           "Invalid completion, contains multiple cursor positions: '$completion'",
         );
       }
-      completion = completion.replaceFirst(CURSOR_MARKER, '');
+      completion = completion.replaceFirst(_cursorMarker, '');
     } else {
       expectedOffset = completion.length;
     }
diff --git a/pkg/analysis_server/test/constants.dart b/pkg/analysis_server/test/constants.dart
index 29c1e1a..0392f28 100644
--- a/pkg/analysis_server/test/constants.dart
+++ b/pkg/analysis_server/test/constants.dart
@@ -2,31 +2,30 @@
 // for 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 String CODE = 'code';
-const String COMPLETION_RESULTS = 'completion.results';
-const String CONTEXT_MESSAGES = 'contextMessages';
-const String CORRECTION = 'correction';
+const String codeKey = 'code';
+const String contextReferencesKey = 'contextMessages';
+const String correctionKey = 'correction';
 
 /// Useful for debugging locally, setting this to true will cause all JSON
 /// communication to be printed to stdout.
 const debugPrintCommunication = false;
 
-const String EDITS = 'edits';
-const String END_COLUMN = 'endColumn';
-const String END_LINE = 'endLine';
-const String FILE = 'file';
-const String FILE_STAMP = 'fileStamp';
-const String HAS_FIX = 'hasFix';
-const String LENGTH = 'length';
-const String LOCATION = 'location';
-const String MESSAGE = 'message';
-const String OFFSET = 'offset';
-const String REPLACEMENT = 'replacement';
-const String SEVERITY = 'severity';
-const String STACK_TRACE = 'stackTrace';
-const String START_COLUMN = 'startColumn';
-const String START_LINE = 'startLine';
-const String SUBSCRIPTIONS = 'subscriptions';
-const String TYPE = 'type';
-const String URL = 'url';
-const String VERSION = 'version';
+const String editsKey = 'edits';
+const String endColumnKey = 'endColumn';
+const String endLineKey = 'endLine';
+const String fileKey = 'file';
+const String fileStampKey = 'fileStamp';
+const String hasFixKey = 'hasFix';
+const String lengthKey = 'length';
+const String locationKey = 'location';
+const String messageKey = 'message';
+const String offsetKey = 'offset';
+const String replacementKey = 'replacement';
+const String severityKey = 'severity';
+const String stackTraceKey = 'stackTrace';
+const String startColumnKey = 'startColumn';
+const String startLineKey = 'startLine';
+const String subscriptionsKey = 'subscriptions';
+const String typeKey = 'type';
+const String urlKey = 'url';
+const String versionKey = 'version';
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 5351045..3ab129e 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -2467,7 +2467,7 @@
   @override
   void processNotification(Notification notification) {
     super.processNotification(notification);
-    if (notification.event == ANALYSIS_NOTIFICATION_HIGHLIGHTS) {
+    if (notification.event == analysisNotificationHighlights) {
       var params = AnalysisHighlightsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
@@ -2645,14 +2645,14 @@
 
   @override
   void processNotification(Notification notification) {
-    if (notification.event == ANALYSIS_NOTIFICATION_FLUSH_RESULTS) {
+    if (notification.event == analysisNotificationFlushResults) {
       var decoded = AnalysisFlushResultsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
       );
       notifications.add((notification.event, decoded));
     }
-    if (notification.event == ANALYSIS_NOTIFICATION_ERRORS) {
+    if (notification.event == analysisNotificationErrors) {
       var decoded = AnalysisErrorsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/domain_completion_util.dart b/pkg/analysis_server/test/domain_completion_util.dart
index 7149486..1130d58 100644
--- a/pkg/analysis_server/test/domain_completion_util.dart
+++ b/pkg/analysis_server/test/domain_completion_util.dart
@@ -83,9 +83,7 @@
     required String content,
     int maxResults = 1 << 10,
   }) async {
-    var code = useLineEndingsForPlatform
-        ? TestCode.parseNormalized(content)
-        : TestCode.parse(content);
+    var code = TestCode.parseNormalized(content);
     var completionOffset = code.position.offset;
 
     newFile(path, code.code);
@@ -124,7 +122,7 @@
 
   @override
   Future<void> processNotification(Notification notification) async {
-    if (notification.event == SERVER_NOTIFICATION_ERROR) {
+    if (notification.event == serverNotificationError) {
       fail('server error: ${notification.toJson()}');
     }
   }
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index d169380..dbb8863 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -38,7 +38,7 @@
     );
     expect(context.explicitFileCount, 1); /* test.dart */
 
-    expect(context.implicitFileCount, 5);
+    expect(context.implicitFileCount, 6);
 
     expect(context.workItemQueueLength, isNotNull);
   }
diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart
index 510a350..66aad5f6 100644
--- a/pkg/analysis_server/test/domain_server_test.dart
+++ b/pkg/analysis_server/test/domain_server_test.dart
@@ -77,7 +77,7 @@
       response.toJson(),
       equals({
         Response.idAttributeName: '0',
-        Response.resultAttributeName: {VERSION: PROTOCOL_VERSION},
+        Response.resultAttributeName: {versionKey: PROTOCOL_VERSION},
       }),
     );
   }
@@ -352,8 +352,8 @@
   }
 
   Future<void> test_setSubscriptions_invalidServiceName() async {
-    var request = Request('0', SERVER_REQUEST_SET_SUBSCRIPTIONS, {
-      SUBSCRIPTIONS: ['noSuchService'],
+    var request = Request('0', serverRequestSetSubscriptions, {
+      subscriptionsKey: ['noSuchService'],
     });
     var response = await handleRequest(request);
     expect(response, isResponseFailure('0'));
diff --git a/pkg/analysis_server/test/edit/assists_test.dart b/pkg/analysis_server/test/edit/assists_test.dart
index 7cf2abc..00662f3 100644
--- a/pkg/analysis_server/test/edit/assists_test.dart
+++ b/pkg/analysis_server/test/edit/assists_test.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/plugin/plugin_isolate.dart';
 import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer/src/test_utilities/platform.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -58,6 +59,7 @@
       'c',
       TestNotificationManager(),
       InstrumentationService.NULL_SERVICE,
+      SessionLogger(),
       isLegacy: true,
     );
     var message = 'From a plugin';
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index c64aa81..87f196f 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -7,6 +7,7 @@
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/plugin/plugin_isolate.dart';
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/service.dart';
 import 'package:analyzer/utilities/package_config_file_builder.dart';
@@ -101,6 +102,7 @@
       'c',
       TestNotificationManager(),
       InstrumentationService.NULL_SERVICE,
+      SessionLogger(),
       isLegacy: true,
     );
     var fixes = plugin.AnalysisErrorFixes(
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index cef86bb..1367c5b 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -1588,6 +1588,68 @@
     expect(responseB, isResponseSuccess('2'));
   }
 
+  /// We shouldn't send a cancellation for a previous refactor request that
+  /// errored, since it is complete.
+  Future<void> test_cancelPendingRequest_notForErrored_fatalError() async {
+    addTestFile('''
+void f() {
+  int test = 0;
+  print(test);
+}
+''');
+
+    // Send an invalid params request.
+    test_simulateRefactoringException_final = true;
+    await sendRenameRequest('test =', 'nameB', id: '1');
+    test_simulateRefactoringException_final = false;
+
+    // Then send a successful request
+    await sendRenameRequest('test =', 'nameB', id: '2');
+
+    // Expect exactly one response for each ID.
+    expect(
+      serverChannel.responsesReceived.where((response) => response.id == '1'),
+      [isResponseFailure('1', RequestErrorCode.SERVER_ERROR)],
+    );
+    expect(
+      serverChannel.responsesReceived.where((response) => response.id == '2'),
+      [isResponseSuccess('2')],
+    );
+  }
+
+  /// We shouldn't send a cancellation for a previous refactor request that
+  /// errored, since it is complete.
+  Future<void> test_cancelPendingRequest_notForErrored_invalidPath() async {
+    addTestFile('''
+void f() {
+  int test = 0;
+  print(test);
+}
+''');
+
+    // Send an invalid path request.
+    var invalidRequest = EditGetRefactoringParams(
+      RefactoringKind.RENAME,
+      'INVALID_FILE_PATH',
+      -1,
+      0,
+      false,
+    ).toRequest('1', clientUriConverter: server.uriConverter);
+    await serverChannel.simulateRequestFromClient(invalidRequest);
+    // Then send a successful request
+    await sendRenameRequest('test =', 'nameB', id: '2');
+
+    // Expect exactly one response for each ID.
+    expect(
+      serverChannel.responsesReceived.where((response) => response.id == '1'),
+      [isResponseFailure('1', RequestErrorCode.INVALID_FILE_PATH_FORMAT)],
+    );
+    expect(
+      serverChannel.responsesReceived.where((response) => response.id == '2'),
+      [isResponseSuccess('2')],
+    );
+  }
+
   Future<void> test_class() {
     addTestFile('''
 class Test {
diff --git a/pkg/analysis_server/test/lsp/commands/fix_all_in_workspace_test.dart b/pkg/analysis_server/test/lsp/commands/fix_all_in_workspace_test.dart
index 2e49cb3..b3950d1 100644
--- a/pkg/analysis_server/test/lsp/commands/fix_all_in_workspace_test.dart
+++ b/pkg/analysis_server/test/lsp/commands/fix_all_in_workspace_test.dart
@@ -10,6 +10,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../tool/lsp_spec/matchers.dart';
+import '../request_helpers_mixin.dart';
 import '../server_abstract.dart';
 
 void main() {
@@ -20,7 +21,8 @@
 }
 
 abstract class AbstractFixAllInWorkspaceTest
-    extends AbstractLspAnalysisServerTest {
+    extends AbstractLspAnalysisServerTest
+    with LspProgressNotificationsMixin {
   String get commandId;
   String get commandName;
   bool get expectRequiresConfirmation;
@@ -229,6 +231,28 @@
 ''');
   }
 
+  Future<void> test_progressNotifications_supported() async {
+    // Advertise that we (the client) support progress.
+    setWorkDoneProgressSupport();
+
+    // Expect (during the test) a progress token to be created, started, ended.
+    expect(progressUpdates, emitsInOrder(['CREATE', 'BEGIN', 'END']));
+
+    await initialize();
+    await executeCommand(Command(command: commandId, title: 'UNUSED'));
+  }
+
+  Future<void> test_progressNotifications_unsupported() async {
+    // Advertise that we do not support progress.
+    setWorkDoneProgressSupport(false);
+
+    // Expect no progress updates at all.
+    expect(progressUpdates, neverEmits(anything));
+
+    await initialize();
+    await executeCommand(Command(command: commandId, title: 'UNUSED'));
+  }
+
   Future<void> test_serverAdvertisesCommand() async {
     await initialize();
     expect(
diff --git a/pkg/analysis_server/test/lsp/completion_dart_test.dart b/pkg/analysis_server/test/lsp/completion_dart_test.dart
index e408b05..cbd6b88 100644
--- a/pkg/analysis_server/test/lsp/completion_dart_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_dart_test.dart
@@ -2805,6 +2805,51 @@
     expect(item.detail, isNot(contains('deprecated')));
   }
 
+  Future<void> test_isDeprecatedExtend_supportedFlag() async {
+    setCompletionItemDeprecatedFlagSupport();
+    content = '''
+@Deprecated.extend()
+class MyClass {}
+
+void f() {
+  MyCl^
+}
+''';
+
+    await initialize();
+
+    await openFile(mainFileUri, code.code);
+    var res = await getCompletion(mainFileUri, code.position.position);
+    var item = res.singleWhere((c) => c.label == 'MyClass');
+    expect(item.deprecated, isNull);
+    // If the client says it supports the deprecated flag, we should not show
+    // deprecated in the details.
+    expect(item.detail, isNot(contains('deprecated')));
+  }
+
+  Future<void> test_isDeprecatedExtend_supportedTag() async {
+    setCompletionItemTagSupport([CompletionItemTag.Deprecated]);
+
+    content = '''
+@Deprecated.extend()
+class MyClass {}
+
+void f() {
+  MyCl^
+}
+''';
+
+    await initialize();
+
+    await openFile(mainFileUri, code.code);
+    var res = await getCompletion(mainFileUri, code.position.position);
+    var item = res.singleWhere((c) => c.label == 'MyClass');
+    expect(item.tags, isNot(contains(CompletionItemTag.Deprecated)));
+    // If the client says it supports the deprecated tag, we should not show
+    // deprecated in the details.
+    expect(item.detail, isNot(contains('deprecated')));
+  }
+
   Future<void> test_isIncomplete_falseIfAllIncluded() async {
     content = '''
 import 'a.dart';
diff --git a/pkg/analysis_server/test/lsp/completion_yaml_test.dart b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
index 89cbe6c..1a90c63 100644
--- a/pkg/analysis_server/test/lsp/completion_yaml_test.dart
+++ b/pkg/analysis_server/test/lsp/completion_yaml_test.dart
@@ -442,8 +442,9 @@
       ]
     }
     ''';
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, json, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, json, '');
 
     var content = '''
 name: foo
@@ -497,8 +498,9 @@
       ]
     }
     ''';
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, initialJson, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, initialJson, '');
 
     var content = '''
 name: foo
@@ -522,8 +524,9 @@
 
     // Modify the underlying file which should trigger an update of the
     // cached data.
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, updatedJson, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, updatedJson, '');
     modifyFile2(pubspecFile, '$content# trailing comment');
     await pumpEventQueue(times: 500);
 
@@ -559,8 +562,9 @@
       ]
     }
     ''';
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, initialJson, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, initialJson, '');
 
     var content = '''
 name: foo
diff --git a/pkg/analysis_server/test/lsp/dart_text_document_content_provider_test.dart b/pkg/analysis_server/test/lsp/dart_text_document_content_provider_test.dart
deleted file mode 100644
index a67ff03..0000000
--- a/pkg/analysis_server/test/lsp/dart_text_document_content_provider_test.dart
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for details. 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/legacy_analysis_server.dart';
-import 'package:analyzer_plugin/src/utilities/client_uri_converter.dart';
-import 'package:analyzer_testing/experiments/experiments.dart';
-import 'package:language_server_protocol/protocol_generated.dart';
-import 'package:test/expect.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../tool/lsp_spec/matchers.dart';
-import 'server_abstract.dart';
-
-void main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(DartTextDocumentContentProviderTest);
-  });
-}
-
-@reflectiveTest
-class DartTextDocumentContentProviderTest
-    extends AbstractLspAnalysisServerTest {
-  @override
-  AnalysisServerOptions get serverOptions => AnalysisServerOptions()
-    ..enabledExperiments = [
-      ...super.serverOptions.enabledExperiments,
-      ...experimentsForTests,
-    ];
-
-  @override
-  void setUp() {
-    super.setUp();
-    setDartTextDocumentContentProviderSupport();
-  }
-
-  Future<void> test_invalid_badScheme() async {
-    await initialize();
-
-    await expectLater(
-      getDartTextDocumentContent(Uri.parse('abcde:foo/bar.dart')),
-      throwsA(
-        isResponseError(
-          ErrorCodes.InvalidParams,
-          message:
-              "Fetching content for scheme 'abcde' is not supported. "
-              "Supported schemes are '$macroClientUriScheme'.",
-        ),
-      ),
-    );
-  }
-
-  Future<void> test_invalid_fileScheme() async {
-    await initialize();
-
-    await expectLater(
-      getDartTextDocumentContent(mainFileUri),
-      throwsA(
-        isResponseError(
-          ErrorCodes.InvalidParams,
-          message:
-              "Fetching content for scheme 'file' is not supported. "
-              "Supported schemes are '$macroClientUriScheme'.",
-        ),
-      ),
-    );
-  }
-
-  Future<void> test_support_notSupported() async {
-    setDartTextDocumentContentProviderSupport(false);
-    await initialize();
-    expect(
-      experimentalServerCapabilities['dartTextDocumentContentProvider'],
-      isNull,
-    );
-  }
-
-  Future<void> test_supported_static() async {
-    await initialize();
-    expect(experimentalServerCapabilities['dartTextDocumentContentProvider'], {
-      'schemes': [macroClientUriScheme],
-    });
-  }
-}
diff --git a/pkg/analysis_server/test/lsp/document_color_test.dart b/pkg/analysis_server/test/lsp/document_color_test.dart
index b1b9e7d..fe4e5f4 100644
--- a/pkg/analysis_server/test/lsp/document_color_test.dart
+++ b/pkg/analysis_server/test/lsp/document_color_test.dart
@@ -273,6 +273,33 @@
     );
   }
 
+  Future<void> test_dotShorthand_constructor() async {
+    content = '''
+import 'package:flutter/material.dart';
+
+Color c1 = [!.new(0xffff0000)!];
+''';
+
+    await _checkPresentations(
+      select: Color(alpha: 1, red: 1, green: 0, blue: 0),
+      expectPresentations: [
+        _color(
+          'Color.fromARGB(255, 255, 0, 0)',
+          colorCode: '.fromARGB(255, 255, 0, 0)',
+        ),
+        _color(
+          'Color.fromRGBO(255, 0, 0, 1)',
+          colorCode: '.fromRGBO(255, 0, 0, 1)',
+        ),
+        _color(
+          'Color.from(alpha: 1, red: 1, green: 0, blue: 0)',
+          colorCode: '.from(alpha: 1, red: 1, green: 0, blue: 0)',
+        ),
+        _color('Color(0xFFFF0000)', colorCode: '.new(0xFFFF0000)'),
+      ],
+    );
+  }
+
   // Converting from ints to doubles should be rounded to 3 decimals to avoid
   // very large numbers (2 is not enough to represent 0-255 as it only allows
   // 100 numbers).
diff --git a/pkg/analysis_server/test/lsp/document_symbols_test.dart b/pkg/analysis_server/test/lsp/document_symbols_test.dart
index da1ae8d..a2ad5b6 100644
--- a/pkg/analysis_server/test/lsp/document_symbols_test.dart
+++ b/pkg/analysis_server/test/lsp/document_symbols_test.dart
@@ -76,6 +76,32 @@
     expect(enumValue.containerName, 'Theme');
   }
 
+  Future<void> test_extension_names() async {
+    failTestOnErrorDiagnostic = false;
+
+    const content = '''
+extension StringExtensions on String {}
+extension _StringExtensions on String {}
+extension on String {}
+extension on {}
+''';
+    newFile(mainFilePath, content);
+    await initialize();
+
+    var result = await getDocumentSymbols(mainFileUri);
+    var symbols = result.map(
+      (docsymbols) => throw 'Expected SymbolInformations, got DocumentSymbols',
+      (symbolInfos) => symbolInfos,
+    );
+    var names = symbols.map((symbol) => symbol.name).toList();
+    expect(names, [
+      'StringExtensions',
+      '_StringExtensions',
+      'extension on String',
+      '<unnamed extension>',
+    ]);
+  }
+
   Future<void> test_flat() async {
     const content = '''
 String topLevel = '';
@@ -130,7 +156,7 @@
     expect(namedExtension.containerName, isNull);
 
     var unnamedExtension = symbols[6];
-    expect(unnamedExtension.name, equals('<unnamed extension>'));
+    expect(unnamedExtension.name, equals('extension on String'));
     expect(unnamedExtension.containerName, isNull);
 
     var extensionTypeA = symbols[7];
diff --git a/pkg/analysis_server/test/lsp/hover_test.dart b/pkg/analysis_server/test/lsp/hover_test.dart
index 6478524..f67f68c 100644
--- a/pkg/analysis_server/test/lsp/hover_test.dart
+++ b/pkg/analysis_server/test/lsp/hover_test.dart
@@ -919,6 +919,59 @@
     await assertStringContents(content, equals(expectedHoverContent));
   }
 
+  Future<void> test_range_binaryOperator() async {
+    var content = '''
+var i = 1;
+var a = i [!+^!] i;
+''';
+    var expected = '''
+```dart
+num +(num other)
+```
+Declared in `num` in _dart:core_.''';
+    await assertStringContents(content, equals(expected));
+  }
+
+  Future<void> test_range_compoundAssignment() async {
+    var content = '''
+void f(int i) {
+  i [!+=^!] 1;
+}
+''';
+    var expected = '''
+```dart
+num +(num other)
+```
+Declared in `num` in _dart:core_.''';
+    await assertStringContents(content, equals(expected));
+  }
+
+  Future<void> test_range_conditional_colon() async {
+    var content = '''
+var i = 1;
+int f(bool a, int x) {
+  return a
+    ? x
+    [!:^!] x + 1;
+}
+''';
+    var expected = 'Type: `int`';
+    await assertStringContents(content, equals(expected));
+  }
+
+  Future<void> test_range_conditional_question() async {
+    var content = '''
+var i = 1;
+int f(bool a, int x) {
+  return a
+    [!?^!] x
+    : x + 1;
+}
+''';
+    var expected = 'Type: `int`';
+    await assertStringContents(content, equals(expected));
+  }
+
   Future<void> test_range_multiLineConstructorCall() => assertStringContents('''
     final a = new [!Str^ing.fromCharCodes!]([
       1,
@@ -926,6 +979,34 @@
     ]);
     ''', contains('String.fromCharCodes('));
 
+  Future<void> test_range_postfix() async {
+    var content = '''
+int f(int i) {
+  return i[!+^+!];
+}
+''';
+    var expected = '''
+```dart
+num +(num other)
+```
+Declared in `num` in _dart:core_.''';
+    await assertStringContents(content, equals(expected));
+  }
+
+  Future<void> test_range_prefix() async {
+    var content = '''
+int f(int i) {
+  return [!+^+!]i;
+}
+''';
+    var expected = '''
+```dart
+num +(num other)
+```
+Declared in `num` in _dart:core_.''';
+    await assertStringContents(content, equals(expected));
+  }
+
   Future<void> test_recordLiteral_named() => assertStringContents(r'''
 void f(({int f1, int f2}) r) {
   r.[!f^1!];
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index dbdb552..1d5b6c8 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -32,6 +32,25 @@
   final allowOverlappingHandlersDefault =
       MessageScheduler.allowOverlappingHandlers;
 
+  var isAnalysisOptionsSelector = TypeMatcher<TextDocumentFilterScheme>()
+      .having(
+        (selector) => selector.pattern,
+        'pattern',
+        '**/analysis_options.yaml',
+      );
+
+  var isDartSelector = TypeMatcher<TextDocumentFilterScheme>().having(
+    (selector) => selector.language,
+    'language',
+    'dart',
+  );
+
+  var isPubspecSelector = TypeMatcher<TextDocumentFilterScheme>().having(
+    (selector) => selector.pattern,
+    'pattern',
+    '**/pubspec.yaml',
+  );
+
   /// Waits for any in-progress analysis context rebuild.
   ///
   /// Pumps the event queue before and after, to ensure any server code that
@@ -416,13 +435,14 @@
   Future<void> test_dynamicRegistration_containsAppropriateSettings() async {
     // Support file operations.
     setFileOperationDynamicRegistration();
-    // Support dynamic registration for both text sync + hovers.
+    // Support dynamic registration for text sync, hovers, and code actions.
     setTextSyncDynamicRegistration();
     setHoverDynamicRegistration();
+    setTextDocumentDynamicRegistration('codeAction');
 
     // Basic check that the server responds with the capabilities we'd expect,
-    // for ex including analysis_options.yaml in text synchronization but not
-    // for hovers.
+    // for ex including analysis_options.yaml in text synchronization (and code
+    // actions) but not for hovers.
     var registrations = <Registration>[];
     var initResponse = await monitorDynamicRegistrations(
       registrations,
@@ -440,8 +460,9 @@
     expect(initResult.capabilities, isNotNull);
     expect(initResult.capabilities.textDocumentSync, isNull);
 
-    // Should contain Hover, DidOpen, DidClose, DidChange, WillRenameFiles.
-    expect(registrations, hasLength(5));
+    // Should contain Hover, DidOpen, DidClose, DidChange, CodeAction,
+    // WillRenameFiles.
+    expect(registrations, hasLength(6));
     var hover = registrationOptionsFor(
       registrations,
       Method.textDocument_hover,
@@ -450,6 +471,10 @@
       registrations,
       Method.textDocument_didChange,
     );
+    var codeAction = registrationOptionsFor(
+      registrations,
+      Method.textDocument_codeAction,
+    );
     var rename = FileOperationRegistrationOptions.fromJson(
       registrationFor(
             registrations,
@@ -469,21 +494,30 @@
     // The hover capability should only specific Dart.
     expect(hover, isNotNull);
     expect(hover.documentSelector, hasLength(1));
-    expect(hover.documentSelector!.single.language, equals('dart'));
+    expect(hover.documentSelector!.single, isDartSelector);
 
     // didChange should also include pubspec + analysis_options.
     expect(change, isNotNull);
     expect(change.documentSelector, hasLength(greaterThanOrEqualTo(3)));
-    expect(change.documentSelector!.any((ds) => ds.language == 'dart'), isTrue);
     expect(
-      change.documentSelector!.any((ds) => ds.pattern == '**/pubspec.yaml'),
-      isTrue,
+      change.documentSelector,
+      containsAll([
+        isDartSelector,
+        isPubspecSelector,
+        isAnalysisOptionsSelector,
+      ]),
     );
+
+    // codeAction should also include pubspec + analysis_options.
+    expect(codeAction, isNotNull);
+    expect(codeAction.documentSelector, hasLength(greaterThanOrEqualTo(3)));
     expect(
-      change.documentSelector!.any(
-        (ds) => ds.pattern == '**/analysis_options.yaml',
-      ),
-      isTrue,
+      change.documentSelector,
+      containsAll([
+        isDartSelector,
+        isPubspecSelector,
+        isAnalysisOptionsSelector,
+      ]),
     );
 
     expect(rename, equals(fileOperationRegistrationOptions));
@@ -1113,14 +1147,6 @@
     }, 'ClientCapabilities.experimental.snippetTextEdit must be a bool?');
   }
 
-  Future<void>
-  test_invalidExperimental_supportsDartTextDocumentContentProvider() async {
-    await expectInvalidExperimentalParams(
-      {'supportsDartTextDocumentContentProvider': 1},
-      'ClientCapabilities.experimental.supportsDartTextDocumentContentProvider must be a bool?',
-    );
-  }
-
   Future<void> test_nonFileScheme_rootUri() async {
     // We expect an error notification about the invalid file we try to open.
     failTestOnAnyErrorNotification = false;
diff --git a/pkg/analysis_server/test/lsp/outline_test.dart b/pkg/analysis_server/test/lsp/outline_test.dart
index 188d28c..921101f 100644
--- a/pkg/analysis_server/test/lsp/outline_test.dart
+++ b/pkg/analysis_server/test/lsp/outline_test.dart
@@ -41,9 +41,12 @@
   }
 
   Future<void> test_extensions() async {
+    failTestOnErrorDiagnostic = false;
+
     var initialContent = '''
 extension StringExtensions on String {}
 extension on String {}
+extension on {}
     ''';
     await initialize(initializationOptions: {'outline': true});
 
@@ -52,9 +55,10 @@
     var outline = await outlineUpdate;
 
     expect(outline, isNotNull);
-    expect(outline.children, hasLength(2));
+    expect(outline.children, hasLength(3));
     expect(outline.children![0].element.name, equals('StringExtensions'));
-    expect(outline.children![1].element.name, equals('<unnamed extension>'));
+    expect(outline.children![1].element.name, equals('extension on String'));
+    expect(outline.children![2].element.name, equals('<unnamed extension>'));
   }
 
   Future<void> test_initial() async {
diff --git a/pkg/analysis_server/test/lsp/pub_package_service_test.dart b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
index 3393b71..df45467 100644
--- a/pkg/analysis_server/test/lsp/pub_package_service_test.dart
+++ b/pkg/analysis_server/test/lsp/pub_package_service_test.dart
@@ -105,17 +105,18 @@
 
   Future<void> test_doesNotRunConcurrently() async {
     var isRunning = false;
-    processRunner.startHandler = (executable, args, {dir, env}) async {
-      expect(
-        isRunning,
-        isFalse,
-        reason: 'pub commands should not run concurrently',
-      );
-      isRunning = true;
-      await pumpEventQueue(times: 500);
-      isRunning = false;
-      return MockProcess(0, 0, 'a', 'a');
-    };
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) async {
+          expect(
+            isRunning,
+            isFalse,
+            reason: 'pub commands should not run concurrently',
+          );
+          isRunning = true;
+          await pumpEventQueue(times: 500);
+          isRunning = false;
+          return MockProcess(0, 0, 'a', 'a');
+        };
     await Future.wait([
       pubCommand.outdatedVersions(pubspecPath),
       pubCommand.outdatedVersions(pubspecPath),
@@ -126,7 +127,8 @@
     // Create a process that won't complete (unless it's killed, where
     // the MockProcess will complete it with a non-zero exit code).
     var process = MockProcess(0, Completer<int>().future, '', '');
-    processRunner.startHandler = (executable, args, {dir, env}) => process;
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) => process;
 
     // Start running the (endless) command.
     var commandFuture = pubCommand.outdatedVersions(pubspecPath);
@@ -141,25 +143,26 @@
   }
 
   Future<void> test_outdated_args() async {
-    processRunner.startHandler = (executable, args, {dir, env}) {
-      expect(executable, Platform.resolvedExecutable);
-      expect(args, equals(['pub', 'outdated', '--show-all', '--json']));
-      expect(dir, equals(convertPath('/home/project')));
-      expect(
-        env!['PUB_ENVIRONMENT'],
-        anyOf(
-          equals('analysis_server.pub_api'),
-          endsWith(':analysis_server.pub_api'),
-        ),
-      );
-      return MockProcess(0, 0, '', '');
-    };
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) {
+          expect(executable, Platform.resolvedExecutable);
+          expect(args, equals(['pub', 'outdated', '--show-all', '--json']));
+          expect(workingDirectory, equals(convertPath('/home/project')));
+          expect(
+            environment!['PUB_ENVIRONMENT'],
+            anyOf(
+              equals('analysis_server.pub_api'),
+              endsWith(':analysis_server.pub_api'),
+            ),
+          );
+          return MockProcess(0, 0, '', '');
+        };
     await pubCommand.outdatedVersions(pubspecPath);
   }
 
   Future<void> test_outdated_invalidJson() async {
     processRunner.startHandler =
-        (String executable, List<String> args, {dir, env}) =>
+        (executable, args, {workingDirectory, environment}) =>
             MockProcess(1, 0, 'NOT VALID JSON', '');
     var result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, isEmpty);
@@ -178,8 +181,9 @@
       ]
     }
     ''';
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, validJson, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, validJson, '');
     var result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, hasLength(1));
     var package = result.first;
@@ -212,9 +216,11 @@
     }
     ''';
 
-    processRunner.startHandler = (executable, args, {dir, env}) {
+    processRunner
+        .startHandler = (executable, args, {workingDirectory, environment}) {
       // Return different json based on the directory we were invoked in.
-      var json = dir == resourceProvider.pathContext.dirname(pubspecPath)
+      var json =
+          workingDirectory == resourceProvider.pathContext.dirname(pubspecPath)
           ? pubspecJson1
           : pubspecJson2;
       return MockProcess(1, 0, json, '');
@@ -226,8 +232,9 @@
   }
 
   Future<void> test_outdated_nonZeroExitCode() async {
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 123, '{}', '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 123, '{}', '');
     var result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, isEmpty);
   }
@@ -253,8 +260,9 @@
       ]
     }
     ''';
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, validJson, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, validJson, '');
     var result = await pubCommand.outdatedVersions(pubspecPath);
     expect(result, hasLength(2));
     for (var (index, package) in result.indexed) {
diff --git a/pkg/analysis_server/test/lsp/request_helpers_mixin.dart b/pkg/analysis_server/test/lsp/request_helpers_mixin.dart
index bd255c1..8a4f192 100644
--- a/pkg/analysis_server/test/lsp/request_helpers_mixin.dart
+++ b/pkg/analysis_server/test/lsp/request_helpers_mixin.dart
@@ -91,26 +91,6 @@
   }
 }
 
-/// Helpers to simplify handling LSP notifications.
-mixin LspNotificationHelpersMixin {
-  /// A stream of [DartTextDocumentContentDidChangeParams] for any
-  /// `dart/textDocumentContentDidChange` notifications.
-  Stream<DartTextDocumentContentDidChangeParams>
-  get dartTextDocumentContentDidChangeNotifications => notificationsFromServer
-      .where(
-        (notification) =>
-            notification.method ==
-            CustomMethods.dartTextDocumentContentDidChange,
-      )
-      .map(
-        (message) => DartTextDocumentContentDidChangeParams.fromJson(
-          message.params as Map<String, Object?>,
-        ),
-      );
-
-  Stream<NotificationMessage> get notificationsFromServer;
-}
-
 mixin LspProgressNotificationsMixin {
   Stream<NotificationMessage> get notificationsFromServer;
 
@@ -460,17 +440,6 @@
     return completions;
   }
 
-  Future<DartTextDocumentContent?> getDartTextDocumentContent(Uri uri) {
-    var request = makeRequest(
-      CustomMethods.dartTextDocumentContent,
-      DartTextDocumentContentParams(uri: uri),
-    );
-    return expectSuccessfulResponseTo(
-      request,
-      DartTextDocumentContent.fromJson,
-    );
-  }
-
   Future<Either2<List<Location>, List<LocationLink>>> getDefinition(
     Uri uri,
     Position pos,
diff --git a/pkg/analysis_server/test/lsp/selection_range_test.dart b/pkg/analysis_server/test/lsp/selection_range_test.dart
index ae0e2e4..8e82e3e 100644
--- a/pkg/analysis_server/test/lsp/selection_range_test.dart
+++ b/pkg/analysis_server/test/lsp/selection_range_test.dart
@@ -168,7 +168,8 @@
         '0',
         '=> 0;',
         'void a() => 0;',
-        code.code.trim(), // Whole content minus the trailing newline
+        '{\n  void a() => 0;\n  void b() => 1;\n}',
+        'class Foo {\n  void a() => 0;\n  void b() => 1;\n}',
       ]),
     );
     expect(
@@ -177,7 +178,8 @@
         '1',
         '=> 1;',
         'void b() => 1;',
-        code.code.trim(), // Whole content minus the trailing newline
+        '{\n  void a() => 0;\n  void b() => 1;\n}',
+        'class Foo {\n  void a() => 0;\n  void b() => 1;\n}',
       ]),
     );
   }
@@ -219,6 +221,7 @@
         'return [?(1 + 2) * 3];',
         '{\n    return [?(1 + 2) * 3];\n  }',
         'List<int> a(String b) {\n    return [?(1 + 2) * 3];\n  }',
+        '{\n  List<int> a(String b) {\n    return [?(1 + 2) * 3];\n  }\n}',
         'class Foo<T> {\n  List<int> a(String b) {\n    return [?(1 + 2) * 3];\n  }\n}',
       ]),
     );
@@ -261,6 +264,7 @@
         'return {?(1 + 2) * 3: b};',
         '{\n    return {?(1 + 2) * 3: b};\n  }',
         'Map<int, String> a(String b) {\n    return {?(1 + 2) * 3: b};\n  }',
+        '{\n  Map<int, String> a(String b) {\n    return {?(1 + 2) * 3: b};\n  }\n}',
         'class Foo<T> {\n  Map<int, String> a(String b) {\n    return {?(1 + 2) * 3: b};\n  }\n}',
       ]),
     );
@@ -303,6 +307,7 @@
         'return {b: ?(1 + 2) * 3};',
         '{\n    return {b: ?(1 + 2) * 3};\n  }',
         'Map<String, int> a(String b) {\n    return {b: ?(1 + 2) * 3};\n  }',
+        '{\n  Map<String, int> a(String b) {\n    return {b: ?(1 + 2) * 3};\n  }\n}',
         'class Foo<T> {\n  Map<String, int> a(String b) {\n    return {b: ?(1 + 2) * 3};\n  }\n}',
       ]),
     );
@@ -345,6 +350,7 @@
         'return {?(1 + 2) * 3};',
         '{\n    return {?(1 + 2) * 3};\n  }',
         'Set<int> a(String b) {\n    return {?(1 + 2) * 3};\n  }',
+        '{\n  Set<int> a(String b) {\n    return {?(1 + 2) * 3};\n  }\n}',
         'class Foo<T> {\n  Set<int> a(String b) {\n    return {?(1 + 2) * 3};\n  }\n}',
       ]),
     );
@@ -387,6 +393,7 @@
         'print((1 + 2) * 3);',
         '{\n    print((1 + 2) * 3);\n  }',
         'void a(String b) {\n    print((1 + 2) * 3);\n  }',
+        '{\n  void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
         'class Foo<T> {\n  void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
       ]),
     );
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index 943b097..a690dfb 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -1153,9 +1153,8 @@
         SemanticTokenModifiers.declaration,
       ]),
       _Token('int', SemanticTokenTypes.class_),
-      _Token('i', SemanticTokenTypes.variable, [
+      _Token('i', SemanticTokenTypes.parameter, [
         SemanticTokenModifiers.declaration,
-        CustomSemanticTokenModifiers.instance,
       ]),
     ];
 
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 7f00d01..0a83c47 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -53,7 +53,6 @@
         ClientCapabilitiesHelperMixin,
         LspRequestHelpersMixin,
         LspReverseRequestHelpersMixin,
-        LspNotificationHelpersMixin,
         LspEditHelpersMixin,
         LspVerifyEditHelpersMixin,
         LspAnalysisServerTestMixin,
@@ -112,6 +111,7 @@
       'c',
       server.notificationManager,
       server.instrumentationService,
+      server.sessionLogger,
       isLegacy: true,
     );
     pluginManager.pluginIsolates.add(pluginIsolate);
@@ -262,6 +262,9 @@
 
   @mustCallSuper
   void setUp() {
+    // Reset default in case a single test changed it.
+    failTestOnErrorDiagnostic = true;
+
     httpClient = MockHttpClient();
     processRunner = MockProcessRunner();
     channel = MockLspServerChannel(debugPrintCommunication);
@@ -572,18 +575,6 @@
     });
   }
 
-  void setDartTextDocumentContentProviderSupport([bool supported = true]) {
-    // These are temporarily versioned with a suffix during dev so if we ship
-    // as an experiment (not LSP standard) without the suffix it will only be
-    // active for matching server/clients.
-    const key = dartExperimentalTextDocumentContentProviderKey;
-    if (supported) {
-      experimentalCapabilities[key] = true;
-    } else {
-      experimentalCapabilities.remove(key);
-    }
-  }
-
   void setDiagnosticCodeDescriptionSupport() {
     textDocumentCapabilities = extendTextDocumentCapabilities(
       textDocumentCapabilities,
@@ -770,9 +761,9 @@
     setTextDocumentDynamicRegistration('synchronization');
   }
 
-  void setWorkDoneProgressSupport() {
+  void setWorkDoneProgressSupport([bool supported = true]) {
     windowCapabilities = extendWindowCapabilities(windowCapabilities, {
-      'workDoneProgress': true,
+      'workDoneProgress': supported,
     });
   }
 
@@ -800,7 +791,6 @@
     on
         LspRequestHelpersMixin,
         LspReverseRequestHelpersMixin,
-        LspNotificationHelpersMixin,
         LspEditHelpersMixin
     implements ClientCapabilitiesHelperMixin {
   late String projectFolderPath,
@@ -825,7 +815,7 @@
   /// initialize.
   ServerCapabilities? _serverCapabilities;
 
-  final validProgressTokens = <ProgressToken>{};
+  final _validProgressTokens = <ProgressToken>{};
 
   /// Default initialization options to be used if [initialize] is not provided
   /// options explicitly.
@@ -890,7 +880,6 @@
   Uri get nonExistentFileUri => pathContext.toUri(nonExistentFilePath);
 
   /// A stream of [NotificationMessage]s from the server.
-  @override
   Stream<NotificationMessage> get notificationsFromServer {
     return serverToClient
         .where((m) => m is NotificationMessage)
@@ -1573,7 +1562,7 @@
       request.params as Map<String, Object?>,
     );
     if (params.token != clientProvidedTestWorkDoneToken &&
-        !validProgressTokens.contains(params.token)) {
+        !_validProgressTokens.contains(params.token)) {
       throw Exception(
         'Server sent a progress notification for a token '
         'that has not been created: ${params.token}',
@@ -1581,7 +1570,7 @@
     }
 
     if (WorkDoneProgressEnd.canParse(params.value, nullLspJsonReporter)) {
-      validProgressTokens.remove(params.token);
+      _validProgressTokens.remove(params.token);
     }
 
     if (params.token == analyzingProgressToken) {
@@ -1604,10 +1593,10 @@
     var params = WorkDoneProgressCreateParams.fromJson(
       request.params as Map<String, Object?>,
     );
-    if (validProgressTokens.contains(params.token)) {
+    if (_validProgressTokens.contains(params.token)) {
       throw Exception('Server tried to create already-active progress token');
     }
-    validProgressTokens.add(params.token);
+    _validProgressTokens.add(params.token);
   }
 
   /// Checks whether a notification is likely an error from the server (for
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index 485fa0e..e41153b 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -22,8 +22,6 @@
 import 'completion_dart_test.dart' as completion_dart;
 import 'completion_yaml_test.dart' as completion_yaml;
 import 'configuration_test.dart' as configuration;
-import 'dart_text_document_content_provider_test.dart'
-    as dart_text_document_content_provider;
 import 'definition_test.dart' as definition;
 import 'diagnostic_test.dart' as diagnostic;
 import 'document_changes_test.dart' as document_changes;
@@ -88,7 +86,6 @@
     completion_dart.main();
     completion_yaml.main();
     configuration.main();
-    dart_text_document_content_provider.main();
     definition.main();
     diagnostic.main();
     document_changes.main();
diff --git a/pkg/analysis_server/test/lsp/type_definition_test.dart b/pkg/analysis_server/test/lsp/type_definition_test.dart
index c1c4a6c..bc66ea5 100644
--- a/pkg/analysis_server/test/lsp/type_definition_test.dart
+++ b/pkg/analysis_server/test/lsp/type_definition_test.dart
@@ -331,6 +331,91 @@
     _expectSdkCoreType(result, 'String');
   }
 
+  Future<void> test_pattern_case_explicitType() async {
+    var code = TestCode.parse('''
+void f(Object o) {
+  if (o case String [!a^!]) {}
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_pattern_case_var() async {
+    var code = TestCode.parse('''
+void f(Object o) {
+  if (o case var [!obj^!]) {}
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'Object');
+  }
+
+  Future<void> test_pattern_object_constant() async {
+    var code = TestCode.parse('''
+void f(Object o) {
+  if (o case int([!isEven^!]: true)) {}
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'bool');
+  }
+
+  Future<void> test_pattern_object_destructure() async {
+    var code = TestCode.parse('''
+void f(Object o) {
+  var Object(:[!hashCode!]^) = o;
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'int');
+  }
+
+  Future<void> test_pattern_object_variable() async {
+    var code = TestCode.parse('''
+void f(Object o) {
+  if (o case int(:final [!isEven^!])) {}
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'bool');
+  }
+
+  Future<void> test_pattern_variable_assignment() async {
+    var code = TestCode.parse('''
+void f(String s) {
+  String a;
+  ([!a^!]) = (s);
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'String');
+  }
+
+  Future<void> test_pattern_variable_declared() async {
+    var code = TestCode.parse('''
+void f(String s) {
+  var ([!a^!]) = (s);
+}
+''');
+
+    var result = await _getResult(code);
+    expect(result.originSelectionRange, code.range.range);
+    _expectSdkCoreType(result, 'String');
+  }
+
   Future<void> test_setter() async {
     var code = TestCode.parse('''
 class A {
diff --git a/pkg/analysis_server/test/lsp/type_hierarchy_test.dart b/pkg/analysis_server/test/lsp/type_hierarchy_test.dart
index 70b3a44..fc5f480 100644
--- a/pkg/analysis_server/test/lsp/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/lsp/type_hierarchy_test.dart
@@ -117,6 +117,25 @@
     );
   }
 
+  Future<void> test_commentReference() async {
+    var content = '''
+/// Not a subtype of [^C]
+class A {}
+
+/*[0*/class /*[1*/C/*1]*/ {}/*0]*/
+''';
+    await _prepareTypeHierarchy(content);
+    expect(
+      prepareResult,
+      _isItem(
+        'C',
+        mainFileUri,
+        range: code.ranges[0].range,
+        selectionRange: code.ranges[1].range,
+      ),
+    );
+  }
+
   Future<void> test_extensionType() async {
     var content = '''
 /*[0*/extension type /*[1*/Int^Ext/*1]*/(int a) {}/*0]*/
diff --git a/pkg/analysis_server/test/lsp_over_legacy/abstract_lsp_over_legacy.dart b/pkg/analysis_server/test/lsp_over_legacy/abstract_lsp_over_legacy.dart
index cb15a8d..36451f8 100644
--- a/pkg/analysis_server/test/lsp_over_legacy/abstract_lsp_over_legacy.dart
+++ b/pkg/analysis_server/test/lsp_over_legacy/abstract_lsp_over_legacy.dart
@@ -9,7 +9,6 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/src/analytics/analytics_manager.dart';
 import 'package:analysis_server/src/lsp/client_capabilities.dart';
-import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/protocol/protocol_internal.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analyzer/file_system/file_system.dart';
@@ -34,21 +33,21 @@
   EventsCollector(this.test) {
     test.notificationListener = (notification) {
       switch (notification.event) {
-        case ANALYSIS_NOTIFICATION_ERRORS:
+        case analysisNotificationErrors:
           events.add(
             AnalysisErrorsParams.fromNotification(
               notification,
               clientUriConverter: test.server.uriConverter,
             ),
           );
-        case ANALYSIS_NOTIFICATION_FLUSH_RESULTS:
+        case analysisNotificationFlushResults:
           events.add(
             AnalysisFlushResultsParams.fromNotification(
               notification,
               clientUriConverter: test.server.uriConverter,
             ),
           );
-        case LSP_NOTIFICATION_NOTIFICATION:
+        case lspNotificationNotification:
           var params = LspNotificationParams.fromNotification(
             notification,
             clientUriConverter: test.server.uriConverter,
@@ -97,18 +96,6 @@
             event.files.sorted(),
             _writelnFile,
           );
-        case NotificationMessage():
-          switch (event.method) {
-            case CustomMethods.dartTextDocumentContentDidChange:
-              sink.writelnWithIndent(event.method);
-              var params =
-                  event.params as DartTextDocumentContentDidChangeParams;
-              sink.withIndent(() {
-                _writelnUri(params.uri, name: 'uri');
-              });
-            default:
-              throw UnimplementedError('${event.method}');
-          }
         default:
           throw UnimplementedError('${event.runtimeType}');
       }
@@ -124,23 +111,6 @@
       sink.write(file.posixPath);
     });
   }
-
-  void _writelnUri(Uri uri, {String? name}) {
-    sink.writeIndentedLine(() {
-      if (name != null) {
-        sink.write('$name: ');
-      }
-
-      if (uri.isScheme('file') || uri.isScheme('dart-macro+file')) {
-        var fileUri = uri.replace(scheme: 'file');
-        var path = resourceProvider.pathContext.fromUri(fileUri);
-        var file = resourceProvider.getFile(path);
-        uri = uri.replace(path: file.posixPath);
-      }
-
-      sink.write(uri);
-    });
-  }
 }
 
 class EventsPrinterConfiguration {}
@@ -149,7 +119,6 @@
     with
         LspRequestHelpersMixin,
         LspReverseRequestHelpersMixin,
-        LspNotificationHelpersMixin,
         LspEditHelpersMixin,
         ClientCapabilitiesHelperMixin,
         LspVerifyEditHelpersMixin,
@@ -191,7 +160,6 @@
       server.editorClientCapabilities;
 
   /// A stream of [NotificationMessage]s from the server.
-  @override
   Stream<NotificationMessage> get notificationsFromServer =>
       _notificationsFromServer.stream;
 
@@ -206,7 +174,7 @@
   @override
   Stream<RequestMessage> get requestsFromServer => serverChannel
       .serverToClientRequests
-      .where((request) => request.method == LSP_REQUEST_HANDLE)
+      .where((request) => request.method == lspRequestHandle)
       .map((request) {
         var params = LspHandleParams.fromRequest(
           request,
@@ -312,7 +280,7 @@
   @override
   void processNotification(Notification notification) {
     super.processNotification(notification);
-    if (notification.event == LSP_NOTIFICATION_NOTIFICATION) {
+    if (notification.event == lspNotificationNotification) {
       var params = LspNotificationParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/mocks.dart b/pkg/analysis_server/test/mocks.dart
index 81ba17f..609f00d 100644
--- a/pkg/analysis_server/test/mocks.dart
+++ b/pkg/analysis_server/test/mocks.dart
@@ -93,19 +93,43 @@
 }
 
 class MockProcessRunner implements ProcessRunner {
+  ProcessResult Function(
+    String executable,
+    List<String> arguments, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    Encoding? stderrEncoding,
+    Encoding? stdoutEncoding,
+  })
+  runSyncHandler =
+      (_, _, {workingDirectory, environment, stderrEncoding, stdoutEncoding}) =>
+          throw UnimplementedError();
+
   FutureOr<Process> Function(
     String executable,
     List<String> arguments, {
-    String? dir,
-    Map<String, String>? env,
+    String? workingDirectory,
+    Map<String, String>? environment,
   })
-  startHandler = (executable, arguments, {dir, env}) =>
+  startHandler = (_, _, {workingDirectory, environment}) =>
       throw UnimplementedError();
 
   @override
-  dynamic noSuchMethod(Invocation invocation) {
-    return super.noSuchMethod(invocation);
-  }
+  ProcessResult runSync(
+    String executable,
+    List<String> arguments, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    Encoding? stderrEncoding,
+    Encoding? stdoutEncoding,
+  }) => runSyncHandler(
+    executable,
+    arguments,
+    workingDirectory: workingDirectory,
+    environment: environment,
+    stderrEncoding: stderrEncoding,
+    stdoutEncoding: stdoutEncoding,
+  );
 
   @override
   Future<Process> start(
@@ -120,8 +144,8 @@
     return await startHandler(
       executable,
       arguments,
-      dir: workingDirectory,
-      env: environment,
+      workingDirectory: workingDirectory,
+      environment: environment,
     );
   }
 }
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index c22a663..cd77253 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -16,8 +16,8 @@
 import 'package:analyzer/source/source.dart' as engine;
 import 'package:analyzer/src/dart/analysis/results.dart' as engine;
 import 'package:analyzer/src/dart/error/lint_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart' as engine;
-import 'package:analyzer/src/error/codes.dart' as engine;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -43,7 +43,7 @@
     // prepare AnalysisError
     engineDiagnostic = MockDiagnostic(
       source: source,
-      diagnosticCode: engine.CompileTimeErrorCode.ambiguousExport,
+      diagnosticCode: diag.ambiguousExport,
       offset: 10,
       length: 20,
       message: 'my message',
@@ -76,42 +76,42 @@
       engineDiagnostic,
     );
     expect(error.toJson(), {
-      SEVERITY: 'ERROR',
-      TYPE: 'COMPILE_TIME_ERROR',
-      LOCATION: {
-        FILE: 'foo.dart',
-        OFFSET: 10,
-        LENGTH: 20,
-        START_LINE: 3,
-        START_COLUMN: 2,
-        END_LINE: 4,
-        END_COLUMN: 11,
+      severityKey: 'ERROR',
+      typeKey: 'COMPILE_TIME_ERROR',
+      locationKey: {
+        fileKey: 'foo.dart',
+        offsetKey: 10,
+        lengthKey: 20,
+        startLineKey: 3,
+        startColumnKey: 2,
+        endLineKey: 4,
+        endColumnKey: 11,
       },
-      MESSAGE: 'my message',
-      CODE: 'ambiguous_export',
-      URL: 'https://dart.dev/diagnostics/ambiguous_export',
-      CONTEXT_MESSAGES: [
+      messageKey: 'my message',
+      codeKey: 'ambiguous_export',
+      urlKey: 'https://dart.dev/diagnostics/ambiguous_export',
+      contextReferencesKey: [
         {
-          MESSAGE: 'context',
-          LOCATION: {
-            FILE: 'bar.dart',
-            OFFSET: 30,
-            LENGTH: 5,
-            START_LINE: 4,
-            START_COLUMN: 11,
-            END_LINE: 4,
-            END_COLUMN: 16,
+          messageKey: 'context',
+          locationKey: {
+            fileKey: 'bar.dart',
+            offsetKey: 30,
+            lengthKey: 5,
+            startLineKey: 4,
+            startColumnKey: 11,
+            endLineKey: 4,
+            endColumnKey: 16,
           },
         },
       ],
-      HAS_FIX: false,
+      hasFixKey: false,
     });
   }
 
   void test_fromEngine_hasCorrection() {
     engineDiagnostic = MockDiagnostic(
       source: source,
-      diagnosticCode: engine.CompileTimeErrorCode.ambiguousExport,
+      diagnosticCode: diag.ambiguousExport,
       offset: 10,
       length: 20,
       message: 'my message',
@@ -119,22 +119,22 @@
     );
     var error = newAnalysisError_fromEngine(result, engineDiagnostic);
     expect(error.toJson(), {
-      SEVERITY: 'ERROR',
-      TYPE: 'COMPILE_TIME_ERROR',
-      LOCATION: {
-        FILE: 'foo.dart',
-        OFFSET: 10,
-        LENGTH: 20,
-        START_LINE: 3,
-        START_COLUMN: 2,
-        END_LINE: 4,
-        END_COLUMN: 11,
+      severityKey: 'ERROR',
+      typeKey: 'COMPILE_TIME_ERROR',
+      locationKey: {
+        fileKey: 'foo.dart',
+        offsetKey: 10,
+        lengthKey: 20,
+        startLineKey: 3,
+        startColumnKey: 2,
+        endLineKey: 4,
+        endColumnKey: 11,
       },
-      MESSAGE: 'my message',
-      CORRECTION: 'my correction',
-      CODE: 'ambiguous_export',
-      URL: 'https://dart.dev/diagnostics/ambiguous_export',
-      HAS_FIX: false,
+      messageKey: 'my message',
+      correctionKey: 'my correction',
+      codeKey: 'ambiguous_export',
+      urlKey: 'https://dart.dev/diagnostics/ambiguous_export',
+      hasFixKey: false,
     });
   }
 
@@ -150,21 +150,21 @@
     );
     var error = newAnalysisError_fromEngine(result, engineDiagnostic);
     expect(error.toJson(), {
-      SEVERITY: 'ERROR',
-      TYPE: 'COMPILE_TIME_ERROR',
-      LOCATION: {
-        FILE: 'foo.dart',
-        OFFSET: 10,
-        LENGTH: 20,
-        START_LINE: 3,
-        START_COLUMN: 2,
-        END_LINE: 4,
-        END_COLUMN: 11,
+      severityKey: 'ERROR',
+      typeKey: 'COMPILE_TIME_ERROR',
+      locationKey: {
+        fileKey: 'foo.dart',
+        offsetKey: 10,
+        lengthKey: 20,
+        startLineKey: 3,
+        startColumnKey: 2,
+        endLineKey: 4,
+        endColumnKey: 11,
       },
-      MESSAGE: 'my message',
-      CODE: 'test_error',
-      URL: 'http://codes.dartlang.org/TEST_ERROR',
-      HAS_FIX: false,
+      messageKey: 'my message',
+      codeKey: 'test_error',
+      urlKey: 'http://codes.dartlang.org/TEST_ERROR',
+      hasFixKey: false,
     });
   }
 
@@ -175,8 +175,7 @@
         'my_lint',
         'my message',
         correctionMessage: 'correction',
-        // ignore: deprecated_member_use
-        uniqueNameCheck: 'LintCode.my_lint',
+        uniqueName: 'LintCode.my_lint',
       ),
       offset: 10,
       length: 20,
@@ -184,48 +183,48 @@
     );
     var error = newAnalysisError_fromEngine(result, engineDiagnostic);
     expect(error.toJson(), {
-      SEVERITY: 'INFO',
-      TYPE: 'LINT',
-      LOCATION: {
-        FILE: 'foo.dart',
-        OFFSET: 10,
-        LENGTH: 20,
-        START_LINE: 3,
-        START_COLUMN: 2,
-        END_LINE: 4,
-        END_COLUMN: 11,
+      severityKey: 'INFO',
+      typeKey: 'LINT',
+      locationKey: {
+        fileKey: 'foo.dart',
+        offsetKey: 10,
+        lengthKey: 20,
+        startLineKey: 3,
+        startColumnKey: 2,
+        endLineKey: 4,
+        endColumnKey: 11,
       },
-      MESSAGE: 'my message',
-      CODE: 'my_lint',
-      HAS_FIX: false,
+      messageKey: 'my message',
+      codeKey: 'my_lint',
+      hasFixKey: false,
     });
   }
 
   void test_fromEngine_noCorrection() {
     engineDiagnostic = MockDiagnostic(
       source: source,
-      diagnosticCode: engine.CompileTimeErrorCode.ambiguousExport,
+      diagnosticCode: diag.ambiguousExport,
       offset: 10,
       length: 20,
       message: 'my message',
     );
     var error = newAnalysisError_fromEngine(result, engineDiagnostic);
     expect(error.toJson(), {
-      SEVERITY: 'ERROR',
-      TYPE: 'COMPILE_TIME_ERROR',
-      LOCATION: {
-        FILE: 'foo.dart',
-        OFFSET: 10,
-        LENGTH: 20,
-        START_LINE: 3,
-        START_COLUMN: 2,
-        END_LINE: 4,
-        END_COLUMN: 11,
+      severityKey: 'ERROR',
+      typeKey: 'COMPILE_TIME_ERROR',
+      locationKey: {
+        fileKey: 'foo.dart',
+        offsetKey: 10,
+        lengthKey: 20,
+        startLineKey: 3,
+        startColumnKey: 2,
+        endLineKey: 4,
+        endColumnKey: 11,
       },
-      MESSAGE: 'my message',
-      CODE: 'ambiguous_export',
-      URL: 'https://dart.dev/diagnostics/ambiguous_export',
-      HAS_FIX: false,
+      messageKey: 'my message',
+      codeKey: 'ambiguous_export',
+      urlKey: 'https://dart.dev/diagnostics/ambiguous_export',
+      hasFixKey: false,
     });
   }
 }
@@ -276,8 +275,13 @@
     EnumTester<MatchKind, SearchResultKind>().run(
       newSearchResultKind_fromEngine,
       exceptions: {
+        MatchKind.REFERENCE_IN_PATTERN_FIELD: SearchResultKind.REFERENCE,
+        MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION:
+            SearchResultKind.INVOCATION,
         MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
             SearchResultKind.INVOCATION,
+        MatchKind.DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF:
+            SearchResultKind.REFERENCE,
         MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF: SearchResultKind.REFERENCE,
         MatchKind.REFERENCE_IN_EXTENDS_CLAUSE: SearchResultKind.REFERENCE,
         MatchKind.REFERENCE_IN_IMPLEMENTS_CLAUSE: SearchResultKind.REFERENCE,
diff --git a/pkg/analysis_server/test/protocol_test.dart b/pkg/analysis_server/test/protocol_test.dart
index 9ab5692..ad2f5fb 100644
--- a/pkg/analysis_server/test/protocol_test.dart
+++ b/pkg/analysis_server/test/protocol_test.dart
@@ -64,16 +64,16 @@
     expect(error.message, 'msg');
     expect(
       error.toJson(clientUriConverter: null),
-      equals({CODE: 'INVALID_REQUEST', MESSAGE: 'msg'}),
+      equals({codeKey: 'INVALID_REQUEST', messageKey: 'msg'}),
     );
   }
 
   void test_fromJson() {
     var trace = 'a stack trace\r\nfoo';
     var json = {
-      CODE: RequestErrorCode.INVALID_PARAMETER.name,
-      MESSAGE: 'foo',
-      STACK_TRACE: trace,
+      codeKey: RequestErrorCode.INVALID_PARAMETER.name,
+      messageKey: 'foo',
+      stackTraceKey: trace,
     };
     var error = RequestError.fromJson(
       ResponseDecoder(null),
@@ -94,9 +94,9 @@
       stackTrace: trace,
     );
     expect(error.toJson(clientUriConverter: null), {
-      CODE: 'UNKNOWN_REQUEST',
-      MESSAGE: 'msg',
-      STACK_TRACE: trace,
+      codeKey: 'UNKNOWN_REQUEST',
+      messageKey: 'msg',
+      stackTraceKey: trace,
     });
   }
 }
diff --git a/pkg/analysis_server/test/search/abstract_search_domain.dart b/pkg/analysis_server/test/search/abstract_search_domain.dart
index 61ec4f5..3d01f95 100644
--- a/pkg/analysis_server/test/search/abstract_search_domain.dart
+++ b/pkg/analysis_server/test/search/abstract_search_domain.dart
@@ -73,7 +73,7 @@
   @override
   void processNotification(Notification notification) {
     super.processNotification(notification);
-    if (notification.event == SEARCH_NOTIFICATION_RESULTS) {
+    if (notification.event == searchNotificationResults) {
       var params = SearchResultsParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 5627ee1..328c1e5 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -309,8 +309,8 @@
     await findElementReferences(search: 'foo =>', false);
     expect(searchElement!.kind, ElementKind.FIELD);
     expect(results, hasLength(2));
-    assertHasResult(SearchResultKind.READ, 'foo: 0');
-    assertHasResult(SearchResultKind.READ, ': var foo');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo: 0');
+    assertHasResult(SearchResultKind.REFERENCE, ': var foo');
   }
 
   Future<void> test_class_method() async {
@@ -1270,7 +1270,7 @@
   Future<void> test_pattern_object_field() async {
     await assertReferences(
       kind: ElementKind.FIELD,
-      resultKinds: {0: SearchResultKind.READ},
+      resultKinds: {0: SearchResultKind.REFERENCE},
       '''
 double calculateArea(Shape shape) =>
   switch (shape) {
@@ -1288,7 +1288,7 @@
   Future<void> test_pattern_object_fieldName_explicit() async {
     await assertReferences(
       kind: ElementKind.FIELD,
-      resultKinds: {0: SearchResultKind.READ},
+      resultKinds: {0: SearchResultKind.REFERENCE},
       '''
 double calculateArea(Object a) =>
   switch (a) {
@@ -1305,7 +1305,7 @@
   Future<void> test_pattern_object_fieldName_implicit() async {
     await assertReferences(
       kind: ElementKind.FIELD,
-      resultKinds: {0: SearchResultKind.READ},
+      resultKinds: {0: SearchResultKind.REFERENCE},
       '''
 double calculateArea(Object a) =>
   switch (a) {
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/library_member_test.dart b/pkg/analysis_server/test/services/completion/dart/declaration/library_member_test.dart
index cfc82c4..07715a6 100644
--- a/pkg/analysis_server/test/services/completion/dart/declaration/library_member_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/library_member_test.dart
@@ -205,6 +205,7 @@
 export "a.dart";
 class B0 {}
 @deprecated class B1 {}
+@Deprecated.extend() class B2 {}
 ''');
     await computeSuggestions('''
 import "b.dart" as foo;
@@ -223,6 +224,10 @@
     kind: class
   B0
     kind: constructorInvocation
+  B2
+    kind: class
+  B2
+    kind: constructorInvocation
   B1
     kind: class
     deprecated: true
diff --git a/pkg/analysis_server/test/services/completion/dart/location/argument_list_test.dart b/pkg/analysis_server/test/services/completion/dart/location/argument_list_test.dart
index 8e42b9c..2da5e42 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/argument_list_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/argument_list_test.dart
@@ -296,6 +296,40 @@
 ''');
   }
 
+  Future<void> test_dotShorthands_constructor() async {
+    await computeSuggestions('''
+class A {
+  A({int? foo01, int? foo02});
+}
+
+A a = .new(^);
+''');
+    assertResponse(r'''
+suggestions
+  |foo01: |
+    kind: namedArgument
+  |foo02: |
+    kind: namedArgument
+''');
+  }
+
+  Future<void> test_dotShorthands_method() async {
+    await computeSuggestions('''
+class A {
+  static A foo({int? foo01, int? foo02}) => A();
+}
+
+A a = .foo(^);
+''');
+    assertResponse(r'''
+suggestions
+  |foo01: |
+    kind: namedArgument
+  |foo02: |
+    kind: namedArgument
+''');
+  }
+
   Future<void> test_nullableClosure() async {
     await computeSuggestions('''
 void f(void Function(int i)? x) {
@@ -963,6 +997,46 @@
     );
   }
 
+  Future<void> test_superCall_excludesSuperParams() async {
+    await computeSuggestions('''
+class A {
+  final int x;
+  final int y;
+  A({this.x, this.y})
+}
+
+class B extends A {
+  B({super.x}) : super(^);
+}
+''');
+    // Only y is included because x is a super param.
+    assertResponse(r'''
+suggestions
+  |y: |
+    kind: namedArgument
+''');
+  }
+
+  Future<void> test_superCall_excludesUsedNames() async {
+    await computeSuggestions('''
+class A {
+  final int x;
+  final int y;
+  A({this.x, this.y})
+}
+
+class B extends A {
+  B() : super(x: 1, ^);
+}
+''');
+    // Only y is included because x is already used.
+    assertResponse(r'''
+suggestions
+  |y: |
+    kind: namedArgument
+''');
+  }
+
   Future<void> _tryParametersArguments({
     String? languageVersion,
     required String parameters,
diff --git a/pkg/analysis_server/test/services/completion/dart/location/object_pattern_test.dart b/pkg/analysis_server/test/services/completion/dart/location/object_pattern_test.dart
index a79af70..44de047 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/object_pattern_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/object_pattern_test.dart
@@ -666,6 +666,33 @@
 ''');
   }
 
+  Future<void> test_patternFieldName_afterColon() async {
+    await computeSuggestions('''
+void f(MyClassWithReallyBigName parameter) {
+  if (parameter case MyClassWithReallyBigName(
+    fieldWithBigName: var fieldWithReallyVeryBigName,
+    :^
+  )) {}
+}
+
+abstract class MyClassWithReallyBigName {
+  int get fieldWithBigName;
+  int get g01;
+}
+''');
+    assertResponse(r'''
+location: PatternField_pattern
+locationOpType: PatternField_pattern
+suggestions
+  final
+    kind: keyword
+  var
+    kind: keyword
+  var g01
+    kind: getter
+''');
+  }
+
   Future<void> test_property_first() async {
     await computeSuggestions('''
 void f1(Object x0) {
diff --git a/pkg/analysis_server/test/services/correction/change_test.dart b/pkg/analysis_server/test/services/correction/change_test.dart
index 842d656..7ede5a6 100644
--- a/pkg/analysis_server/test/services/correction/change_test.dart
+++ b/pkg/analysis_server/test/services/correction/change_test.dart
@@ -294,7 +294,7 @@
 
   void test_toJson() {
     var edit = SourceEdit(1, 2, 'foo');
-    var expectedJson = {OFFSET: 1, LENGTH: 2, REPLACEMENT: 'foo'};
+    var expectedJson = {offsetKey: 1, lengthKey: 2, replacementKey: 'foo'};
     expect(edit.toJson(), expectedJson);
   }
 
@@ -349,11 +349,11 @@
     fileEdit.add(SourceEdit(1, 2, 'aaa'));
     fileEdit.add(SourceEdit(10, 20, 'bbb'));
     var expectedJson = {
-      FILE: '/test.dart',
-      FILE_STAMP: 100,
-      EDITS: [
-        {OFFSET: 10, LENGTH: 20, REPLACEMENT: 'bbb'},
-        {OFFSET: 1, LENGTH: 2, REPLACEMENT: 'aaa'},
+      fileKey: '/test.dart',
+      fileStampKey: 100,
+      editsKey: [
+        {offsetKey: 10, lengthKey: 20, replacementKey: 'bbb'},
+        {offsetKey: 1, lengthKey: 2, replacementKey: 'aaa'},
       ],
     };
     expect(fileEdit.toJson(), expectedJson);
@@ -441,7 +441,7 @@
 
   void test_toJson() {
     var position = Position('/test.dart', 1);
-    var expectedJson = {FILE: '/test.dart', OFFSET: 1};
+    var expectedJson = {fileKey: '/test.dart', offsetKey: 1};
     expect(position.toJson(), expectedJson);
   }
 }
diff --git a/pkg/analysis_server/test/services/linter/linter_test.dart b/pkg/analysis_server/test/services/linter/linter_test.dart
index 44746fb..c641d9f 100644
--- a/pkg/analysis_server/test/services/linter/linter_test.dart
+++ b/pkg/analysis_server/test/services/linter/linter_test.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/options_rule_validator.dart';
@@ -74,7 +74,7 @@
   rules:
     - undefined
     ''',
-      [AnalysisOptionsWarningCode.undefinedLint],
+      [diag.undefinedLint],
     );
   }
 
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/convert_getter_to_method_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/convert_getter_to_method_test.dart
index 964a4eb..7adc3f7 100644
--- a/pkg/analysis_server/test/services/refactoring/legacy/convert_getter_to_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/legacy/convert_getter_to_method_test.dart
@@ -173,6 +173,55 @@
     );
   }
 
+  Future<void> test_pattern() async {
+    await indexTestUnit('''
+extension A on String {
+  int get test => 1;
+}
+void f(String a) {
+  if (a case String(:var test)) {}
+}
+''');
+    var element = findElement2.getter('test', of: 'A');
+    _createRefactoringForElement(element);
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+extension A on String {
+  int test() => 1;
+}
+void f(String a) {
+  if (a case String(:var test)) {}
+}
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/62139')
+  Future<void> test_pattern_localVariableReferenced() async {
+    await indexTestUnit('''
+extension A on String {
+  int get test => 1;
+}
+void f(String a) {
+  if (a case String(:var test)) {
+    print(test);
+  }
+}
+''');
+    var element = findElement2.getter('test', of: 'A');
+    _createRefactoringForElement(element);
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+extension A on String {
+  int test() => 1;
+}
+void f(String a) {
+  if (a case String(:var test)) {
+    print(test());
+  }
+}
+''');
+  }
+
   Future<void> _assertInitialConditions_fatal(String message) async {
     var status = await refactoring.checkInitialConditions();
     assertRefactoringStatus(
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/rename_class_member_test.dart
index cfa5a2b..9a08f99 100644
--- a/pkg/analysis_server/test/services/refactoring/legacy/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/legacy/rename_class_member_test.dart
@@ -757,6 +757,33 @@
   }
 
   Future<void>
+  test_createChange_FieldElement_fieldFormalParameter_dotShorthandConstructorInvocation() async {
+    await indexTestUnit('''
+void foo() {
+  A _ = .new(va^lue: 42);
+}
+
+class A {
+  A({required this.value});
+  final int value;
+}
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, 'value');
+    refactoring.newName = 'newName';
+    await assertSuccessfulRefactoring('''
+void foo() {
+  A _ = .new(newName: 42);
+}
+
+class A {
+  A({required this.newName});
+  final int newName;
+}
+''');
+  }
+
+  Future<void>
   test_createChange_FieldElement_fieldFormalParameter_named() async {
     await indexTestUnit('''
 class A {
@@ -1432,6 +1459,36 @@
 ''');
   }
 
+  Future<void> test_memberWithSameName() async {
+    await indexTestUnit('''
+class Foo {
+  Foo.bar() {
+    bar();
+  }
+  void ^bar() {
+    var _ = Foo.bar();
+  }
+}
+''');
+    // configure refactoring
+    createRenameRefactoring();
+    expect(refactoring.refactoringName, 'Rename Method');
+    expect(refactoring.elementKindName, 'method');
+    expect(refactoring.oldName, 'bar');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+class Foo {
+  Foo.bar() {
+    newName();
+  }
+  void newName() {
+    var _ = Foo.bar();
+  }
+}
+''');
+  }
+
   Future<void> test_shadowingLocalVariable_addsThis() async {
     await indexTestUnit('''
 class A {
@@ -2745,4 +2802,21 @@
 }
 ''');
   }
+
+  Future<void> test_dotShorthandInvocation() async {
+    await indexTestUnit('''
+class A {
+  static A ^foo() => A();
+}
+A a = .foo();
+''');
+    createRenameRefactoring();
+    refactoring.newName = 'newName';
+    await assertSuccessfulRefactoring('''
+class A {
+  static A newName() => A();
+}
+A a = .newName();
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/rename_constructor_test.dart
index cf0c5fb..7d759f4 100644
--- a/pkg/analysis_server/test/services/refactoring/legacy/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/legacy/rename_constructor_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test/test.dart';
@@ -23,10 +25,10 @@
   Future<void> test_checkInitialConditions_inSDK() async {
     await indexTestUnit('''
 void f() {
-  new String.fromCharCodes([]);
+  new String.^fromCharCodes([]);
 }
 ''');
-    createRenameRefactoringAtString('fromCharCodes(');
+    createRenameRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = await refactoring.checkInitialConditions();
@@ -41,10 +43,10 @@
   Future<void> test_checkNewName() async {
     await indexTestUnit('''
 class A {
-  A.test() {}
+  A.^test() {}
 }
 ''');
-    createRenameRefactoringAtString('test() {}');
+    createRenameRefactoring();
     expect(refactoring.oldName, 'test');
     // same
     refactoring.newName = 'test';
@@ -64,11 +66,11 @@
   Future<void> test_checkNewName_hasMember_constructor() async {
     await indexTestUnit('''
 class A {
-  A.test() {}
-  A.newName() {} // existing
+  A.^test() {}
+  A.[!newName!]() {}
 }
 ''');
-    _createConstructorDeclarationRefactoring('test() {}');
+    _createConstructorDeclarationRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = refactoring.checkNewName();
@@ -77,18 +79,18 @@
       RefactoringProblemSeverity.ERROR,
       expectedMessage:
           "Class 'A' already declares constructor with name 'newName'.",
-      expectedContextSearch: 'newName() {} // existing',
+      rangeIndex: 0,
     );
   }
 
   Future<void> test_checkNewName_hasMember_method() async {
     await indexTestUnit('''
 class A {
-  A.test() {}
-  newName() {} // existing
+  A.^test() {}
+  [!newName!]() {}
 }
 ''');
-    _createConstructorDeclarationRefactoring('test() {}');
+    _createConstructorDeclarationRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = refactoring.checkNewName();
@@ -96,7 +98,7 @@
       status,
       RefactoringProblemSeverity.ERROR,
       expectedMessage: "Class 'A' already declares method with name 'newName'.",
-      expectedContextSearch: 'newName() {} // existing',
+      rangeIndex: 0,
     );
   }
 
@@ -105,7 +107,7 @@
 // ignore: deprecated_new_in_comment_reference
 /// Documentation for [new A] and [A.new]
 class A {
-  A() {} // marker
+  A^() {}
   factory A._() = A;
 }
 class B extends A {
@@ -117,7 +119,7 @@
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('() {} // marker');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -127,7 +129,7 @@
 // ignore: deprecated_new_in_comment_reference
 /// Documentation for [new A.newName] and [A.newName]
 class A {
-  A.newName() {} // marker
+  A.newName() {}
   factory A._() = A.newName;
 }
 class B extends A {
@@ -151,12 +153,12 @@
   B() : super() {}
 }
 void f() {
-  new A();
+  new ^A();
   A.new;
 }
 ''');
     // configure refactoring
-    _createConstructorInvocationRefactoring('new A();');
+    _createConstructorInvocationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -185,7 +187,7 @@
 // ignore: deprecated_new_in_comment_reference
 /// Documentation for [A.test] and [new A.test]
 class A {
-  A.test() {} // marker
+  A.^test() {}
   factory A._() = A.test;
 }
 class B extends A {
@@ -197,7 +199,7 @@
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('test() {} // marker');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -207,7 +209,7 @@
 // ignore: deprecated_new_in_comment_reference
 /// Documentation for [A.newName] and [new A.newName]
 class A {
-  A.newName() {} // marker
+  A.newName() {}
   factory A._() = A.newName;
 }
 class B extends A {
@@ -224,7 +226,7 @@
   test_createChange_implicitlyInvoked_hasConstructor_hasInitializers() async {
     await indexTestUnit('''
 class A {
-  A();
+  ^A();
 }
 
 class B extends A {
@@ -233,7 +235,7 @@
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('A();');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -255,7 +257,7 @@
   test_createChange_implicitlyInvoked_hasConstructor_noInitializers() async {
     await indexTestUnit('''
 class A {
-  A();
+  ^A();
 }
 
 class B extends A {
@@ -263,7 +265,7 @@
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('A();');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -283,7 +285,7 @@
   Future<void> test_createChange_implicitlyInvoked_noConstructor() async {
     await indexTestUnit('''
 class A {
-  A();
+  ^A();
 }
 
 class B extends A {
@@ -291,7 +293,7 @@
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('A();');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -316,11 +318,11 @@
   int field = 0;
 }
 void f() {
-  new A();
+  n^ew A();
 }
 ''');
     // configure refactoring
-    _createConstructorInvocationRefactoring('new A();');
+    _createConstructorInvocationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -343,7 +345,7 @@
 // ignore: deprecated_new_in_comment_reference
 /// Documentation for [A.test] and [new A.test]
 class A {
-  A.test() {} // marker
+  A.^test() {}
   factory A._() = A.test;
 }
 class B extends A {
@@ -355,7 +357,7 @@
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('test() {} // marker');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -365,7 +367,7 @@
 // ignore: deprecated_new_in_comment_reference
 /// Documentation for [A] and [new A]
 class A {
-  A() {} // marker
+  A() {}
   factory A._() = A;
 }
 class B extends A {
@@ -378,6 +380,112 @@
 ''');
   }
 
+  Future<void> test_dotShorthandConstructor_tearoff() async {
+    // This is wrong, but we should handle it anyway.
+    verifyNoTestUnitErrors = false;
+    await indexTestUnit('''
+class A {
+  A^();
+}
+A a = .new;
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, '');
+    refactoring.newName = 'newName';
+    await assertSuccessfulRefactoring('''
+class A {
+  A.newName();
+}
+A a = .newName;
+''');
+  }
+
+  Future<void> test_dotShorthandConstructor_tearoff_removeName() async {
+    // This is wrong, but we should handle it anyway.
+    verifyNoTestUnitErrors = false;
+    await indexTestUnit('''
+class A {
+  A.^name();
+}
+A a = .name;
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, 'name');
+    refactoring.newName = '';
+    await assertSuccessfulRefactoring('''
+class A {
+  A();
+}
+A a = .new;
+''');
+  }
+
+  Future<void> test_dotShorthandConstructorInvocation() async {
+    await indexTestUnit('''
+class A {
+  A^();
+}
+A a = .new();
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, '');
+    refactoring.newName = 'newName';
+    await assertSuccessfulRefactoring('''
+class A {
+  A.newName();
+}
+A a = .newName();
+''');
+  }
+
+  Future<void> test_dotShorthandConstructorInvocation_removeName() async {
+    await indexTestUnit('''
+class A {
+  A.^name();
+}
+A a = .name();
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, 'name');
+    refactoring.newName = '';
+    await assertSuccessfulRefactoring('''
+class A {
+  A();
+}
+A a = .new();
+''');
+  }
+
+  Future<void> test_memberWithSameName() async {
+    await indexTestUnit('''
+class Foo {
+  Foo.^bar() {
+    bar();
+  }
+  void bar() {
+    var _ = Foo.bar();
+  }
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring();
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, 'bar');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+class Foo {
+  Foo.newName() {
+    bar();
+  }
+  void bar() {
+    var _ = Foo.newName();
+  }
+}
+''');
+  }
+
   Future<void> test_newInstance_nullElement() async {
     await indexTestUnit('');
     var workspace = RefactoringWorkspace([driverFor(testFile)], searchEngine);
@@ -396,10 +504,10 @@
     await indexTestUnit('''
 enum E {
   v.test();
-  const E.test(); // 0
+  const E.^test();
 }
 ''');
-    createRenameRefactoringAtString('test(); // 0');
+    createRenameRefactoring();
     expect(refactoring.oldName, 'test');
     // same
     refactoring.newName = 'test';
@@ -420,11 +528,11 @@
     await indexTestUnit('''
 enum E {
   v.test();
-  const E.test(); // 0
-  const E.newName(); // existing
+  const E.test^();
+  const E.[!newName!]();
 }
 ''');
-    _createConstructorDeclarationRefactoring('test(); // 0');
+    _createConstructorDeclarationRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = refactoring.checkNewName();
@@ -433,7 +541,7 @@
       RefactoringProblemSeverity.ERROR,
       expectedMessage:
           "Enum 'E' already declares constructor with name 'newName'.",
-      expectedContextSearch: 'newName(); // existing',
+      rangeIndex: 0,
     );
   }
 
@@ -441,11 +549,11 @@
     await indexTestUnit('''
 enum E {
   v.test();
-  const E.test(); // 0
-  void newName() {} // existing
+  const E.^test();
+  void [!newName!]() {}
 }
 ''');
-    _createConstructorDeclarationRefactoring('test(); // 0');
+    _createConstructorDeclarationRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = refactoring.checkNewName();
@@ -453,7 +561,7 @@
       status,
       RefactoringProblemSeverity.ERROR,
       expectedMessage: "Enum 'E' already declares method with name 'newName'.",
-      expectedContextSearch: 'newName() {} // existing',
+      rangeIndex: 0,
     );
   }
 
@@ -462,12 +570,12 @@
 /// [E.new]
 enum E {
   v1(), v2.new(), v3, v4.other();
-  const E(); // 0
+  const E^();
   const E.other() : this();
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('(); // 0');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -477,7 +585,7 @@
 /// [E.newName]
 enum E {
   v1.newName(), v2.newName(), v3.newName(), v4.other();
-  const E.newName(); // 0
+  const E.newName();
   const E.other() : this.newName();
 }
 ''');
@@ -487,13 +595,13 @@
     await indexTestUnit('''
 /// [E.new]
 enum E {
-  v1(), v2.new(), v3;
+  v1^(), v2.new(), v3;
 
   factory E.other() => throw 0;
 }
 ''');
     // configure refactoring
-    _createEnumConstantRefactoring('v1()');
+    _createEnumConstantRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -515,13 +623,13 @@
     await indexTestUnit('''
 /// [E.new]
 enum E {
-  v1(), v2.new(), v3;
+  v1^(), v2.new(), v3;
 
   final int foo = 0;
 }
 ''');
     // configure refactoring
-    _createEnumConstantRefactoring('v1()');
+    _createEnumConstantRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -543,13 +651,13 @@
     await indexTestUnit('''
 /// [E.new]
 enum E {
-  v1(), v2.new(), v3;
+  v1^(), v2.new(), v3;
 
   void foo() {}
 }
 ''');
     // configure refactoring
-    _createEnumConstantRefactoring('v1()');
+    _createEnumConstantRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -571,11 +679,11 @@
     await indexTestUnit('''
 /// [E.new]
 enum E {
-  v1(), v2.new(), v3;
+  v1^(), v2.new(), v3;
 }
 ''');
     // configure refactoring
-    _createEnumConstantRefactoring('v1()');
+    _createEnumConstantRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -595,11 +703,11 @@
     await indexTestUnit('''
 /// [E.new]
 enum E {
-  v1(), v2.new(), v3
+  v1^(), v2.new(), v3
 }
 ''');
     // configure refactoring
-    _createEnumConstantRefactoring('v1()');
+    _createEnumConstantRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -620,12 +728,12 @@
 /// [E.test]
 enum E {
   v1.test(), v2.other();
-  const E.test(); // 0
+  const E.^test();
   const E.other() : this.test();
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('test(); // 0');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -635,7 +743,7 @@
 /// [E.newName]
 enum E {
   v1.newName(), v2.other();
-  const E.newName(); // 0
+  const E.newName();
   const E.other() : this.newName();
 }
 ''');
@@ -646,12 +754,12 @@
 /// [E]
 enum E {
   v1.test(), v2.other();
-  const E.test(); // 0
+  const ^E.test();
   const E.other() : this.test();
 }
 ''');
     // configure refactoring
-    _createConstructorDeclarationRefactoring('test(); // 0');
+    _createConstructorDeclarationRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -661,15 +769,18 @@
 /// [E]
 enum E {
   v1(), v2.other();
-  const E(); // 0
+  const E();
   const E.other() : this();
 }
 ''');
   }
 
-  void _createEnumConstantRefactoring(String search) {
-    var enumConstant = findNode.enumConstantDeclaration(search);
-    var element = enumConstant.constructorElement;
+  void _createEnumConstantRefactoring({int index = 0, bool range = false}) {
+    var node = _searchWith<EnumConstantDeclaration>(index: index, range: range);
+    if (node == null) {
+      return;
+    }
+    var element = node.constructorElement;
     createRenameRefactoringForElement2(element);
   }
 }
@@ -678,9 +789,9 @@
 class RenameConstructorExtensionTypeTest extends _RenameConstructorTest {
   Future<void> test_checkNewName() async {
     await indexTestUnit('''
-extension type E.test(int it) {}
+extension type E.^test(int it) {}
 ''');
-    createRenameRefactoringAtString('test(int it)');
+    createRenameRefactoring();
     expect(refactoring.oldName, 'test');
     // same
     refactoring.newName = 'test';
@@ -699,11 +810,11 @@
 
   Future<void> test_checkNewName_hasMember_constructor() async {
     await indexTestUnit('''
-extension type E.test(int it) {
-  E.newName() : this.test(0);
+extension type E.^test(int it) {
+  E.[!newName!]() : this.test(0);
 }
 ''');
-    createRenameRefactoringAtString('test(int it)');
+    createRenameRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = refactoring.checkNewName();
@@ -713,17 +824,17 @@
       expectedMessage:
           "Extension type 'E' already declares constructor with name "
           "'newName'.",
-      expectedContextSearch: 'newName() :',
+      rangeIndex: 0,
     );
   }
 
   Future<void> test_checkNewName_hasMember_method() async {
     await indexTestUnit('''
-extension type E.test(int it) {
-  void newName() {} // existing
+extension type E.^test(int it) {
+  void [!newName!]() {}
 }
 ''');
-    createRenameRefactoringAtString('test(int it)');
+    createRenameRefactoring();
     // check status
     refactoring.newName = 'newName';
     var status = refactoring.checkNewName();
@@ -732,7 +843,7 @@
       RefactoringProblemSeverity.ERROR,
       expectedMessage:
           "Extension type 'E' already declares method with name 'newName'.",
-      expectedContextSearch: 'newName() {} // existing',
+      rangeIndex: 0,
     );
   }
 
@@ -745,11 +856,11 @@
 
 void f() {
   E(0);
-  E.new;
+  E.n^ew;
 }
 ''');
     // configure refactoring
-    createRenameRefactoringAtString('new;');
+    createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -771,7 +882,7 @@
   Future<void> test_createChange_primary_change() async {
     await indexTestUnit('''
 /// [E.test]
-extension type E.test(int it) {
+extension type E.^test(int it) {
   E.other() : this.test(0);
 }
 
@@ -781,7 +892,7 @@
 }
 ''');
     // configure refactoring
-    createRenameRefactoringAtString('test(int it)');
+    createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -803,7 +914,7 @@
   Future<void> test_createChange_primary_remove() async {
     await indexTestUnit('''
 /// [E.test]
-extension type E.test(int it) {
+extension type E.^test(int it) {
   E.other() : this.test(0);
 }
 
@@ -813,7 +924,7 @@
 }
 ''');
     // configure refactoring
-    createRenameRefactoringAtString('test(int it)');
+    createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -836,7 +947,7 @@
     await indexTestUnit('''
 /// [E.new]
 extension type E.named(int it) {
-  E() : this.named(0);
+  ^E() : this.named(0);
   E.other() : this();
 }
 
@@ -846,7 +957,7 @@
 }
 ''');
     // configure refactoring
-    createRenameRefactoringAtString('E() :');
+    createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, '');
@@ -870,7 +981,7 @@
     await indexTestUnit('''
 /// [E.test]
 extension type E(int it) {
-  E.test() : this(0);
+  E.^test() : this(0);
   E.other() : this.test();
 }
 
@@ -880,7 +991,7 @@
 }
 ''');
     // configure refactoring
-    createRenameRefactoringAtString('test() :');
+    createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -904,7 +1015,7 @@
     await indexTestUnit('''
 /// [E.test]
 extension type E.named(int it) {
-  E.test() : this.named(0);
+  ^E.test() : this.named(0);
   E.other() : this.test();
 }
 
@@ -914,7 +1025,7 @@
 }
 ''');
     // configure refactoring
-    createRenameRefactoringAtString('E.test() :');
+    createRenameRefactoring();
     expect(refactoring.refactoringName, 'Rename Constructor');
     expect(refactoring.elementKindName, 'constructor');
     expect(refactoring.oldName, 'test');
@@ -936,14 +1047,42 @@
 }
 
 class _RenameConstructorTest extends RenameRefactoringTest {
-  void _createConstructorDeclarationRefactoring(String search) {
-    var element = findNode.constructor(search).declaredFragment?.element;
+  void _createConstructorDeclarationRefactoring({
+    int index = 0,
+    bool range = false,
+  }) {
+    var node = _searchWith<ConstructorDeclaration>(index: index, range: range);
+    if (node == null) {
+      return;
+    }
+    var element = node.declaredFragment?.element;
     createRenameRefactoringForElement2(element);
   }
 
-  void _createConstructorInvocationRefactoring(String search) {
-    var instanceCreation = findNode.instanceCreation(search);
-    var element = instanceCreation.constructorName.element;
+  void _createConstructorInvocationRefactoring({
+    int index = 0,
+    bool range = false,
+  }) {
+    var node = _searchWith<InstanceCreationExpression>(
+      index: index,
+      range: range,
+    );
+    if (node == null) {
+      return;
+    }
+    var element = node.constructorName.element;
     createRenameRefactoringForElement2(element);
   }
+
+  T? _searchWith<T extends AstNode>({required int index, required bool range}) {
+    if (range) {
+      setRange(index);
+    } else {
+      setPositionOrRange(index);
+    }
+    return NodeLocator2(
+      offset,
+      offset + length,
+    ).searchWithin(testUnit)?.thisOrAncestorOfType<T>();
+  }
 }
diff --git a/pkg/analysis_server/test/services/refactoring/legacy/rename_parameter_test.dart b/pkg/analysis_server/test/services/refactoring/legacy/rename_parameter_test.dart
index f01642e..99bc69d 100644
--- a/pkg/analysis_server/test/services/refactoring/legacy/rename_parameter_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/legacy/rename_parameter_test.dart
@@ -496,6 +496,56 @@
 ''');
   }
 
+  Future<void> test_dotShorthandConstructorInvocation() async {
+    await indexTestUnit('''
+void foo() {
+  A _ = .new(va^lue: 42);
+}
+
+class A {
+  A({required int value});
+}
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, 'value');
+    refactoring.newName = 'newName';
+    await assertSuccessfulRefactoring('''
+void foo() {
+  A _ = .new(newName: 42);
+}
+
+class A {
+  A({required int newName});
+}
+''');
+  }
+
+  Future<void> test_dotShorthandInvocation() async {
+    await indexTestUnit('''
+void foo() {
+  A _ = .foo(va^lue: 42);
+}
+
+class A {
+  A();
+  static A foo({required int value}) => A();
+}
+''');
+    createRenameRefactoring();
+    expect(refactoring.oldName, 'value');
+    refactoring.newName = 'newName';
+    await assertSuccessfulRefactoring('''
+void foo() {
+  A _ = .foo(newName: 42);
+}
+
+class A {
+  A();
+  static A foo({required int newName}) => A();
+}
+''');
+  }
+
   Future<void> test_function_shadow() async {
     await indexTestUnit('''
 void function(int a) {
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index 6816da8..84e7d14 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -4,7 +4,9 @@
 
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
+import 'package:collection/collection.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -362,16 +364,28 @@
   mb2() {}
 }
 ''');
-    {
-      var classA = findElement2.class_('A');
-      var members = getClassMembers(classA);
-      expect(members.map((e) => e.name), unorderedEquals(['ma1', 'ma2']));
+
+    void check(InterfaceElement element, String expected) {
+      var members = getClassMembers(element);
+      var lines = members.map((e) => '${e.kind.name}: ${e.name}\n').sorted();
+      expect(lines.join(), expected);
     }
-    {
-      var classB = findElement2.class_('B');
-      var members = getClassMembers(classB);
-      expect(members.map((e) => e.name), unorderedEquals(['mb1', 'mb2']));
-    }
+
+    var A = findElement2.class_('A');
+    check(A, '''
+FIELD: ma1
+GETTER: ma1
+METHOD: ma2
+SETTER: ma1
+''');
+
+    var B = findElement2.class_('B');
+    check(B, '''
+FIELD: mb1
+GETTER: mb1
+METHOD: mb2
+SETTER: mb1
+''');
   }
 
   Future<void> test_getHierarchyNamedParameters() async {
@@ -477,45 +491,51 @@
   mb2() {}
 }
 ''');
-    {
-      var classA = findElement2.class_('A');
-      var members = getMembers(classA);
-      expect(
-        members.map((e) => e.name),
-        unorderedEquals([
-          'ma1',
-          'ma2',
-          '==',
-          'toString',
-          'hashCode',
-          'noSuchMethod',
-          'runtimeType',
-          'hash',
-          'hashAll',
-          'hashAllUnordered',
-        ]),
-      );
+
+    void check(InterfaceElement element, String expected) {
+      var members = getMembers(element);
+      var lines = members.map((e) => '${e.kind.name}: ${e.name}\n').sorted();
+      expect(lines.join(), expected);
     }
-    {
-      var classB = findElement2.class_('B');
-      var members = getMembers(classB);
-      expect(
-        members.map((e) => e.name),
-        unorderedEquals([
-          'mb1',
-          'mb2',
-          'ma1',
-          'ma2',
-          '==',
-          'toString',
-          'hashCode',
-          'noSuchMethod',
-          'runtimeType',
-          'hash',
-          'hashAll',
-          'hashAllUnordered',
-        ]),
-      );
-    }
+
+    var A = findElement2.class_('A');
+    check(A, '''
+FIELD: hashCode
+FIELD: ma1
+FIELD: runtimeType
+GETTER: hashCode
+GETTER: ma1
+GETTER: runtimeType
+METHOD: ==
+METHOD: hash
+METHOD: hashAll
+METHOD: hashAllUnordered
+METHOD: ma2
+METHOD: noSuchMethod
+METHOD: toString
+SETTER: ma1
+''');
+
+    var B = findElement2.class_('B');
+    check(B, '''
+FIELD: hashCode
+FIELD: ma1
+FIELD: mb1
+FIELD: runtimeType
+GETTER: hashCode
+GETTER: ma1
+GETTER: mb1
+GETTER: runtimeType
+METHOD: ==
+METHOD: hash
+METHOD: hashAll
+METHOD: hashAllUnordered
+METHOD: ma2
+METHOD: mb2
+METHOD: noSuchMethod
+METHOD: toString
+SETTER: ma1
+SETTER: mb1
+''');
   }
 }
diff --git a/pkg/analysis_server/test/shared/shared_code_actions_fixes_tests.dart b/pkg/analysis_server/test/shared/shared_code_actions_fixes_tests.dart
index 7f3a986..121c7ac 100644
--- a/pkg/analysis_server/test/shared/shared_code_actions_fixes_tests.dart
+++ b/pkg/analysis_server/test/shared/shared_code_actions_fixes_tests.dart
@@ -875,9 +875,7 @@
     "The type name '{0}' isn't an UpperCamelCase identifier.",
     correctionMessage:
         'Try changing the name to follow the UpperCamelCase style.',
-    hasPublishedDocs: true,
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.camel_case_types',
+    uniqueName: 'LintCode.camel_case_types',
   );
 
   _DeprecatedCamelCaseTypes()
diff --git a/pkg/analysis_server/test/shared/shared_test_interface.dart b/pkg/analysis_server/test/shared/shared_test_interface.dart
index 3e980a3..9a44c77 100644
--- a/pkg/analysis_server/test/shared/shared_test_interface.dart
+++ b/pkg/analysis_server/test/shared/shared_test_interface.dart
@@ -80,6 +80,5 @@
     String? languageVersion,
     bool flutter = false,
     bool meta = false,
-    bool pedantic = false,
   });
 }
diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart
index a813c5b..2c4ac45 100644
--- a/pkg/analysis_server/test/socket_server_test.dart
+++ b/pkg/analysis_server/test/socket_server_test.dart
@@ -37,7 +37,7 @@
     var server = _createSocketServer(channel1);
     expect(
       channel1.notificationsReceived[0].event,
-      SERVER_NOTIFICATION_CONNECTED,
+      serverNotificationConnected,
     );
     server.createAnalysisServer(channel2);
     channel1.expectMsgCount(notificationCount: 1);
@@ -64,10 +64,7 @@
     var channel = MockServerChannel();
     _createSocketServer(channel);
     channel.expectMsgCount(notificationCount: 1);
-    expect(
-      channel.notificationsReceived[0].event,
-      SERVER_NOTIFICATION_CONNECTED,
-    );
+    expect(channel.notificationsReceived[0].event, serverNotificationConnected);
     return channel
         .simulateRequestFromClient(
           ServerShutdownParams().toRequest('0', clientUriConverter: null),
diff --git a/pkg/analysis_server/test/src/analytics/analytics_manager_test.dart b/pkg/analysis_server/test/src/analytics/analytics_manager_test.dart
index a678d607..a5e9f61 100644
--- a/pkg/analysis_server/test/src/analytics/analytics_manager_test.dart
+++ b/pkg/analysis_server/test/src/analytics/analytics_manager_test.dart
@@ -11,6 +11,7 @@
 import 'package:analysis_server/src/plugin/plugin_isolate.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/service.dart';
@@ -95,13 +96,13 @@
       _ExpectedEvent.session(),
       _ExpectedEvent.severityAdjustment(
         eventData: {
-          'diagnostic': 'AVOID_DYNAMIC_CALLS',
+          'diagnostic': 'avoid_dynamic_calls',
           'adjustments': '{"ERROR":1}',
         },
       ),
       _ExpectedEvent.severityAdjustment(
         eventData: {
-          'diagnostic': 'AWAIT_ONLY_FUTURES',
+          'diagnostic': 'await_only_futures',
           'adjustments': '{"ignore":1}',
         },
       ),
@@ -254,7 +255,7 @@
     var params = AnalysisSetAnalysisRootsParams(['a', 'b', 'c'], ['d', 'e']);
     var request = Request(
       '1',
-      ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS,
+      analysisRequestSetAnalysisRoots,
       params.toJson(clientUriConverter: null),
     );
     manager.startedRequest(request: request, startTime: _now());
@@ -266,11 +267,11 @@
       _ExpectedEvent.request(
         eventData: {
           'latency': _IsPercentiles(),
-          'method': ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS,
+          'method': analysisRequestSetAnalysisRoots,
           'duration': _IsPercentiles(),
-          ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED:
+          analysisRequestSetAnalysisRootsIncluded:
               '{"count":1,"percentiles":[3,3,3,3,3]}',
-          ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED:
+          analysisRequestSetAnalysisRootsExcluded:
               '{"count":1,"percentiles":[2,2,2,2,2]}',
         },
       ),
@@ -282,7 +283,7 @@
     var params = AnalysisSetPriorityFilesParams(['a']);
     var request = Request(
       '1',
-      ANALYSIS_REQUEST_SET_PRIORITY_FILES,
+      analysisRequestSetPriorityFiles,
       params.toJson(clientUriConverter: null),
     );
     manager.startedRequest(request: request, startTime: _now());
@@ -294,9 +295,9 @@
       _ExpectedEvent.request(
         eventData: {
           'latency': _IsPercentiles(),
-          'method': ANALYSIS_REQUEST_SET_PRIORITY_FILES,
+          'method': analysisRequestSetPriorityFiles,
           'duration': _IsPercentiles(),
-          ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES:
+          analysisRequestSetPriorityFilesFiles:
               '{"count":1,"percentiles":[1,1,1,1,1]}',
         },
       ),
@@ -315,7 +316,7 @@
     );
     var request = Request(
       '1',
-      EDIT_REQUEST_GET_REFACTORING,
+      editRequestGetRefactoring,
       params.toJson(clientUriConverter: null),
     );
     manager.startedRequest(request: request, startTime: _now());
@@ -327,9 +328,9 @@
       _ExpectedEvent.request(
         eventData: {
           'latency': _IsPercentiles(),
-          'method': EDIT_REQUEST_GET_REFACTORING,
+          'method': editRequestGetRefactoring,
           'duration': _IsPercentiles(),
-          EDIT_REQUEST_GET_REFACTORING_KIND: '{"RENAME":1}',
+          editRequestGetRefactoringKind: '{"RENAME":1}',
         },
       ),
     ]);
@@ -388,7 +389,7 @@
   Future<void> test_server_request_noAdditional() async {
     _defaultStartup();
     manager.startedRequest(
-      request: Request('1', SERVER_REQUEST_SHUTDOWN),
+      request: Request('1', serverRequestShutdown),
       startTime: _now(),
     );
     manager.sentResponse(response: Response('1'));
@@ -398,7 +399,7 @@
       _ExpectedEvent.request(
         eventData: {
           'latency': _IsPercentiles(),
-          'method': SERVER_REQUEST_SHUTDOWN,
+          'method': serverRequestShutdown,
           'duration': _IsPercentiles(),
         },
       ),
@@ -570,6 +571,7 @@
     '/some/packages/path',
     TestNotificationManager(),
     InstrumentationService.NULL_SERVICE,
+    SessionLogger(),
     isLegacy: true,
   );
 }
diff --git a/pkg/analysis_server/test/src/computer/color_computer_test.dart b/pkg/analysis_server/test/src/computer/color_computer_test.dart
index ef2e46e..0258f01 100644
--- a/pkg/analysis_server/test/src/computer/color_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/color_computer_test.dart
@@ -35,26 +35,32 @@
     // dart:ui Colors
     'Colors.white': 0xFFFFFFFF,
     'Color(0xFF0000FF)': 0xFF0000FF,
+    'Color.new(0xFF0000FF)': 0xFF0000FF,
     'Color.fromARGB(255, 0, 0, 255)': 0xFF0000FF,
     'Color.fromRGBO(0, 0, 255, 1)': 0xFF0000FF,
     'Color.fromRGBO(0, 0, 255, 1.0)': 0xFF0000FF,
     'Color.from(alpha: 1, red: 0.75, green: 0.5, blue: 0.25)': 0xFFBF8040,
     // dart:ui Colors with const keyword
     'const Color(0xFF0000FF)': 0xFF0000FF,
+    'const Color.new(0xFF0000FF)': 0xFF0000FF,
     'const Color.fromARGB(255, 0, 0, 255)': 0xFF0000FF,
     'const Color.fromRGBO(0, 0, 255, 1)': 0xFF0000FF,
     'const Color.fromRGBO(0, 0, 255, 1.0)': 0xFF0000FF,
     'const Color.from(alpha: 1, red: 0.75, green: 0.5, blue: 0.25)': 0xFFBF8040,
     // Flutter Painting
     'ColorSwatch(0xFF89ABCD, {})': 0xFF89ABCD,
+    'ColorSwatch.new(0xFF89ABCD, {})': 0xFF89ABCD,
     // Flutter Painting with const keyword
     'const ColorSwatch(0xFF89ABCD, {})': 0xFF89ABCD,
+    'const ColorSwatch.new(0xFF89ABCD, {})': 0xFF89ABCD,
     // Flutter Material
     'Colors.red': 0xFFFF0000,
     'Colors.redAccent': 0xFFFFAA00,
     'MaterialAccentColor(0xFF89ABCD, {})': 0xFF89ABCD,
+    'MaterialAccentColor.new(0xFF89ABCD, {})': 0xFF89ABCD,
     // Flutter Material with const keyword
     'const MaterialAccentColor(0xFF89ABCD, {})': 0xFF89ABCD,
+    'const MaterialAccentColor.new(0xFF89ABCD, {})': 0xFF89ABCD,
     // Flutter Cupertino
     'CupertinoColors.black': 0xFF000000,
     'CupertinoColors.systemBlue': 0xFF0000FF,
@@ -233,6 +239,19 @@
     await checkAllColors(testCode);
   }
 
+  Future<void> test_constructor_dotShorthand() async {
+    const testCode = '''
+void f() {
+  Color c1 = .new(0xFF000000);
+  Color c2 = .fromARGB(255, 0, 0, 0);
+}
+''';
+    await expectColors(testCode, {
+      '.new(0xFF000000)': 0xFF000000,
+      '.fromARGB(255, 0, 0, 0)': 0xFF000000,
+    });
+  }
+
   Future<void> test_customClass() async {
     const testCode = '''
 import 'other_file.dart';
diff --git a/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart b/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
index 3eb344e..2a8d689 100644
--- a/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/selection_range_computer_test.dart
@@ -72,6 +72,7 @@
       'print((1 + 2) * 3);',
       '{\n    print((1 + 2) * 3);\n  }',
       'void a(String b) {\n    print((1 + 2) * 3);\n  }',
+      '{\n  void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
       'augment class Foo {\n  void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
     ]);
   }
@@ -95,6 +96,7 @@
       'String',
       "String a = 'test'",
       "String a = 'test';",
+      "{\n  String a = 'test';\n}",
       "class Foo<T> {\n  String a = 'test';\n}",
     ]);
   }
@@ -118,6 +120,7 @@
     _expectRegions(regions, [
       'String',
       "augment String get a => 'test2';",
+      "{\n  augment String get a => 'test2';\n}",
       "augment class Foo {\n  augment String get a => 'test2';\n}",
     ]);
   }
@@ -141,6 +144,7 @@
     _expectRegions(regions, [
       '()',
       'augment Foo();',
+      '{\n  augment Foo();\n}',
       'augment class Foo {\n  augment Foo();\n}',
     ]);
   }
@@ -206,6 +210,11 @@
       'void foo() {\n'
           '    (1 + 2) * 3;\n'
           '  }',
+      '{\n'
+          '  void void foo() {\n'
+          '    (1 + 2) * 3;\n'
+          '  }\n'
+          '}',
       'extension type E<T>(int it) {\n'
           '  void void foo() {\n'
           '    (1 + 2) * 3;\n'
@@ -227,6 +236,7 @@
       '(int, int)',
       '(int, int) r = (0, 1)',
       '(int, int) r = (0, 1);',
+      '{\n  (int, int) r = (0, 1);\n}',
       'class C<T> {\n  (int, int) r = (0, 1);\n}',
     ]);
   }
@@ -250,6 +260,7 @@
       'print((1 + 2) * 3);',
       '{\n    print((1 + 2) * 3);\n  }',
       'void a(String b) {\n    print((1 + 2) * 3);\n  }',
+      '{\n  void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
       'class Foo<T> {\n  void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
     ]);
   }
@@ -282,6 +293,7 @@
       'print((1 + 2) * 3);',
       '{\n    print((1 + 2) * 3);\n  }',
       'augment void f() {\n    print((1 + 2) * 3);\n  }',
+      '{\n  augment void f() {\n    print((1 + 2) * 3);\n  }\n}',
       'augment class Foo {\n  augment void f() {\n    print((1 + 2) * 3);\n  }\n}',
     ]);
   }
@@ -328,6 +340,7 @@
       'return [?(1 + 2) * 3];',
       '{\n    return [?(1 + 2) * 3];\n  }',
       'List<int> a(String b) {\n    return [?(1 + 2) * 3];\n  }',
+      '{\n  List<int> a(String b) {\n    return [?(1 + 2) * 3];\n  }\n}',
       'class Foo<T> {\n  List<int> a(String b) {\n    return [?(1 + 2) * 3];\n  }\n}',
     ]);
   }
@@ -351,6 +364,7 @@
       'return {?(1 + 2) * 3: b};',
       '{\n    return {?(1 + 2) * 3: b};\n  }',
       'Map<int, String> a(String b) {\n    return {?(1 + 2) * 3: b};\n  }',
+      '{\n  Map<int, String> a(String b) {\n    return {?(1 + 2) * 3: b};\n  }\n}',
       'class Foo<T> {\n  Map<int, String> a(String b) {\n    return {?(1 + 2) * 3: b};\n  }\n}',
     ]);
   }
@@ -374,6 +388,7 @@
       'return {b: ?(1 + 2) * 3};',
       '{\n    return {b: ?(1 + 2) * 3};\n  }',
       'Map<String, int> a(String b) {\n    return {b: ?(1 + 2) * 3};\n  }',
+      '{\n  Map<String, int> a(String b) {\n    return {b: ?(1 + 2) * 3};\n  }\n}',
       'class Foo<T> {\n  Map<String, int> a(String b) {\n    return {b: ?(1 + 2) * 3};\n  }\n}',
     ]);
   }
@@ -397,6 +412,7 @@
       'return {?(1 + 2) * 3};',
       '{\n    return {?(1 + 2) * 3};\n  }',
       'Set<int> a(String b) {\n    return {?(1 + 2) * 3};\n  }',
+      '{\n  Set<int> a(String b) {\n    return {?(1 + 2) * 3};\n  }\n}',
       'class Foo<T> {\n  Set<int> a(String b) {\n    return {?(1 + 2) * 3};\n  }\n}',
     ]);
   }
@@ -417,6 +433,7 @@
       'print((1 + 2) * 3)',
       '=> print((1 + 2) * 3);',
       'void a(String b) => print((1 + 2) * 3);',
+      '{\n  void a(String b) => print((1 + 2) * 3);\n}',
       'class Foo<T> {\n  void a(String b) => print((1 + 2) * 3);\n}',
     ]);
   }
@@ -449,6 +466,7 @@
       'print((1 + 2) * 3);',
       '{\n    print((1 + 2) * 3);\n  }',
       'augment void a(String b) {\n    print((1 + 2) * 3);\n  }',
+      '{\n  augment void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
       'augment mixin Foo {\n  augment void a(String b) {\n    print((1 + 2) * 3);\n  }\n}',
     ]);
   }
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
index 05b6be2..9f61edd 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -40,7 +40,7 @@
   @override
   void processNotification(Notification notification) {
     super.processNotification(notification);
-    if (notification.event == FLUTTER_NOTIFICATION_OUTLINE) {
+    if (notification.event == flutterNotificationOutline) {
       var params = FlutterOutlineParams.fromNotification(
         notification,
         clientUriConverter: server.uriConverter,
diff --git a/pkg/analysis_server/test/src/plugin/plugin_isolate_test.dart b/pkg/analysis_server/test/src/plugin/plugin_isolate_test.dart
index 70b33a4..582e8eb 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_isolate_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_isolate_test.dart
@@ -5,6 +5,7 @@
 import 'dart:io' as io;
 
 import 'package:analysis_server/src/plugin/plugin_isolate.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/context/packages.dart';
@@ -48,6 +49,7 @@
       packagesPath,
       notificationManager,
       InstrumentationService.NULL_SERVICE,
+      SessionLogger(),
       isLegacy: true,
     );
   }
@@ -134,6 +136,7 @@
           packagesPath,
           notificationManager,
           InstrumentationService.NULL_SERVICE,
+          SessionLogger(),
           isLegacy: true,
         );
         var session = PluginSession(pluginIsolate);
@@ -167,6 +170,7 @@
       packagesPath,
       notificationManager,
       InstrumentationService.NULL_SERVICE,
+      SessionLogger(),
       isLegacy: true,
     );
     session = PluginSession(pluginIsolate);
diff --git a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
index 64c68d9..d05da8d 100644
--- a/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
+++ b/pkg/analysis_server/test/src/plugin/plugin_manager_test.dart
@@ -2,9 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:convert';
 import 'dart:io' as io;
 
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
+import 'package:analysis_server/src/session_logger/session_logger.dart';
+import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/context_root.dart';
@@ -42,18 +45,15 @@
       '',
       notificationManager,
       InstrumentationService.NULL_SERVICE,
+      SessionLogger(),
     );
   }
 
-  @SkippedTest(
-    reason: 'flaky timeouts',
-    issue: 'https://github.com/dart-lang/sdk/issues/38629',
-  )
   Future<void> test_addPluginToContextRoot() async {
     var pkg1Dir = io.Directory.systemTemp.createTempSync('pkg1');
     var pkgPath = pkg1Dir.resolveSymbolicLinksSync();
     await withPlugin(
-      test: (String pluginPath) async {
+      test: (pluginPath) async {
         var contextRoot = _newContextRoot(pkgPath);
         await manager.addPluginToContextRoot(
           contextRoot,
@@ -381,21 +381,60 @@
   late String byteStorePath;
   late String sdkPath;
   late TestNotificationManager notificationManager;
+  late MockProcessRunner processRunner;
   late PluginManager manager;
 
   void setUp() {
     byteStorePath = resourceProvider.convertPath('/byteStore');
     sdkPath = resourceProvider.convertPath('/sdk');
     notificationManager = TestNotificationManager();
+    processRunner = MockProcessRunner();
     manager = PluginManager(
       resourceProvider,
       byteStorePath,
       sdkPath,
       notificationManager,
       InstrumentationService.NULL_SERVICE,
+      SessionLogger(),
+      processRunner: processRunner,
     );
   }
 
+  /// Returns a simple handler for [MockProcessRunner.runSyncHandler], which
+  /// just calls [fn], without consideration for the parameters.
+  ///
+  /// The handler also returns a simple [io.ProcessResult] with no stderr or
+  /// stdout text, and an exit code of 1.
+  ///
+  /// As the signature for the handler is very long, this function just serves
+  /// as a convenience function, for when the parameters are not used.
+  io.ProcessResult Function(
+    String executable,
+    List<String> arguments, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    Encoding? stderrEncoding,
+    Encoding? stdoutEncoding,
+  })
+  simpleRunSyncHandler(void Function() fn) {
+    return (
+      _,
+      _, {
+      environment,
+      workingDirectory,
+      stderrEncoding,
+      stdoutEncoding,
+    }) {
+      fn();
+      return io.ProcessResult(
+        1 /* pid */,
+        0 /* exitCode */,
+        '' /* stdout */,
+        '' /* stderr */,
+      );
+    };
+  }
+
   void test_broadcastRequest_none() {
     var contextRoot = _newContextRoot('/pkg1');
     var responses = manager.broadcastRequest(
@@ -405,7 +444,7 @@
     expect(responses, hasLength(0));
   }
 
-  void test_pathsFor_withPackageConfigJsonFile() {
+  void test_pathsFor_legacy_withPackageConfigJsonFile() {
     //
     // Build the minimal directory structure for a plugin package that includes
     // a '.dart_tool/package_config.json' file.
@@ -421,7 +460,7 @@
     expect(files.packageConfig, packageConfigFile);
   }
 
-  void test_pathsFor_withPubspec_inBlazeWorkspace() {
+  void test_pathsFor_legacy_withPubspec_inBlazeWorkspace() {
     //
     // Build a Blaze workspace containing four packages, including the plugin.
     //
@@ -488,6 +527,60 @@
 ''');
   }
 
+  void test_pathsFor_newPlugin_withPubspec() {
+    late File packageConfigFile;
+
+    processRunner.runSyncHandler = simpleRunSyncHandler(() {
+      packageConfigFile = newPackageConfigJsonFile('/plugin', '');
+    });
+
+    // Build the minimal directory structure for a plugin package that includes
+    // a 'pubspec.yaml' file.
+    var pluginDirPath = newFolder('/plugin').path;
+    var pluginFile = newFile('/plugin/bin/plugin.dart', '');
+    newFile('/plugin/pubspec.yaml', '''
+name: my_plugin
+environment:
+  sdk: ^3.10.0
+''');
+
+    var files = manager.filesFor(pluginDirPath, isLegacyPlugin: false);
+    expect(files.execution, pluginFile);
+    expect(files.packageConfig, packageConfigFile);
+  }
+
+  void test_pathsFor_newPlugin_withPubspec_withAot() {
+    late File packageConfigFile;
+
+    processRunner.runSyncHandler = simpleRunSyncHandler(() {
+      packageConfigFile = newPackageConfigJsonFile('/plugin', '');
+    });
+
+    // Build the minimal directory structure for a plugin package that includes
+    // a 'pubspec.yaml' file.
+    var pluginDir = newFolder('/plugin');
+    newFile('/plugin/bin/plugin.dart', '');
+    newFile('/plugin/pubspec.yaml', '''
+name: my_plugin
+environment:
+  sdk: ^3.10.0
+''');
+
+    var files = manager.filesFor(
+      pluginDir.path,
+      isLegacyPlugin: false,
+      builtAsAot: true,
+    );
+
+    expect(
+      files.execution,
+      pluginDir
+          .getChildAssumingFolder('bin')
+          .getChildAssumingFile('plugin.aot'),
+    );
+    expect(files.packageConfig, packageConfigFile);
+  }
+
   void test_pluginsForContextRoot_none() {
     var contextRoot = _newContextRoot('/pkg1');
     expect(manager.pluginsForContextRoot(contextRoot), isEmpty);
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
index 04b02db..c0cfd4f 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
@@ -282,7 +282,9 @@
   }
 
   void test_linter_rules_removed() {
-    registerLintRule(_RemovedLint());
+    registerLintRule(
+      RemovedAnalysisRule(name: 'removed_lint', description: ''),
+    );
 
     getCompletions('''
 linter:
@@ -325,8 +327,7 @@
     'internal_rule',
     'Internal rule.',
     correctionMessage: 'Try internal rule.',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.internal_rule',
+    uniqueName: 'LintCode.internal_rule',
   );
 
   InternalRule()
@@ -339,18 +340,3 @@
   @override
   DiagnosticCode get diagnosticCode => code;
 }
-
-class _RemovedLint extends AnalysisRule {
-  static const LintCode _code = LintCode(
-    'removed_lint',
-    'Removed rule.',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.removed_lint',
-  );
-
-  _RemovedLint()
-    : super(name: 'removed_lint', state: RuleState.removed(), description: '');
-
-  @override
-  DiagnosticCode get diagnosticCode => _code;
-}
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
index 43aeb0d..cf20f14 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/pubspec_generator_test.dart
@@ -365,8 +365,9 @@
       ]
     }
     ''';
-    processRunner.startHandler = (executable, args, {dir, env}) =>
-        MockProcess(1, 0, json, '');
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) =>
+            MockProcess(1, 0, json, '');
 
     pubPackageService.beginCachePreloads([convertPath('/home/test/$fileName')]);
     await pumpEventQueue(times: 500);
@@ -383,10 +384,11 @@
   /// processes to cache the version numbers.
   void test_packageVersion_withDEPSfile() async {
     var didRun = false;
-    processRunner.startHandler = (executable, args, {dir, env}) {
-      didRun = true;
-      return MockProcess(1, 0, '', '');
-    };
+    processRunner.startHandler =
+        (executable, args, {workingDirectory, environment}) {
+          didRun = true;
+          return MockProcess(1, 0, '', '');
+        };
 
     newFile('/home/DEPS', '');
     pubPackageService.beginCachePreloads([convertPath('/home/test/$fileName')]);
diff --git a/pkg/analysis_server/test/src/services/correction/assist/bind_to_field_test.dart b/pkg/analysis_server/test/src/services/correction/assist/bind_to_field_test.dart
index edef7a3..2b61463 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/bind_to_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/bind_to_field_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
+import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'assist_processor.dart';
@@ -420,4 +421,42 @@
 }
 ''');
   }
+
+  Future<void> test_with_ordering_lint() async {
+    createAnalysisOptionsFile(lints: [LintNames.sort_constructors_first]);
+
+    await resolveTestCode('''
+class A {
+  A(int ^i);
+}
+''');
+    await assertHasAssist('''
+class A {
+  A(this.i);
+
+  int i;
+}
+''');
+  }
+
+  Future<void> test_with_ordering_lint_existing_fields() async {
+    createAnalysisOptionsFile(lints: [LintNames.sort_constructors_first]);
+
+    await resolveTestCode('''
+class A {
+  A(int ^i);
+
+  int k = 0;
+}
+''');
+    await assertHasAssist('''
+class A {
+  A(this.i);
+
+  int k = 0;
+
+  int i;
+}
+''');
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
index 81b6aa2..ec2bd67 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -71,8 +71,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.undefinedIdentifierAwait;
+        return error.diagnosticCode == diag.undefinedIdentifierAwait;
       },
     );
   }
@@ -90,8 +89,7 @@
 void doStuff() => takeFutureCallback(() async => await 1);
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.undefinedIdentifierAwait;
+        return error.diagnosticCode == diag.undefinedIdentifierAwait;
       },
     );
   }
@@ -467,7 +465,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.awaitInWrongContext;
+        return error.diagnosticCode == diag.awaitInWrongContext;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart
index 40e9511..d8da57f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_await_test.dart
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -160,7 +159,7 @@
 void f() async {
   await doSomething()
 }
-''', filter: (error) => error.diagnosticCode != ParserErrorCode.expectedToken);
+''', filter: (error) => error.diagnosticCode != diag.expectedToken);
   }
 
   Future<void> test_nonBoolCondition_futureBool() async {
@@ -312,18 +311,14 @@
   variable = bar();
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 Future<String> bar() async => '';
 
 Future<void> baz() async {
   String? variable;
   variable = await bar();
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.invalidAssignment,
-    );
+''', filter: (error) => error.diagnosticCode == diag.invalidAssignment);
   }
 
   Future<void> test_stringVariable_futureInt() async {
@@ -335,8 +330,7 @@
 }
 ''');
     await assertNoFix(
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.invalidAssignment,
+      filter: (error) => error.diagnosticCode == diag.invalidAssignment,
     );
   }
 
@@ -348,16 +342,12 @@
   String variable = bar();
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 Future<String> bar() async => '';
 
 Future<void> baz() async {
   String variable = await bar();
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.invalidAssignment,
-    );
+''', filter: (error) => error.diagnosticCode == diag.invalidAssignment);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
index 347d7ba..5531d94 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -643,8 +643,7 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 import 'package:flutter/foundation.dart';
 import 'package:flutter/widgets.dart';
 
@@ -657,10 +656,7 @@
     properties.add(DiagnosticsProperty<ClassNotInScope<bool>>('onChanged', onChanged));
   }
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode != CompileTimeErrorCode.undefinedClass,
-    );
+''', filter: (error) => error.diagnosticCode != diag.undefinedClass);
   }
 
   Future<void> test_typeOutOfScopeGetter() async {
@@ -677,8 +673,7 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 import 'package:flutter/foundation.dart';
 import 'package:flutter/widgets.dart';
 
@@ -691,10 +686,7 @@
     properties.add(DiagnosticsProperty<ClassNotInScope<bool>>('onChanged', onChanged));
   }
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode != CompileTimeErrorCode.undefinedClass,
-    );
+''', filter: (error) => error.diagnosticCode != diag.undefinedClass);
   }
 
   Future<void> test_varField() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_empty_argument_list_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_empty_argument_list_test.dart
index b500235..e65bc0c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_empty_argument_list_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_empty_argument_list_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -30,17 +30,14 @@
 @A
 main() {}
 ''');
-    await assertHasFixAllFix(
-      CompileTimeErrorCode.noAnnotationConstructorArguments,
-      '''
+    await assertHasFixAllFix(diag.noAnnotationConstructorArguments, '''
 class A {
   const A();
 }
 @A()
 @A()
 main() {}
-''',
-    );
+''');
   }
 }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart
index f8760d5..cbc0071 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_enum_constant_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -300,7 +300,7 @@
 }
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.undefinedEnumConstant;
+        return e.diagnosticCode == diag.undefinedEnumConstant;
       },
     );
   }
@@ -322,8 +322,7 @@
 }
 ''',
       filter: (e) {
-        return e.diagnosticCode ==
-            CompileTimeErrorCode.dotShorthandUndefinedGetter;
+        return e.diagnosticCode == diag.dotShorthandUndefinedGetter;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart
index 093a62e..dc57db6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_explicit_cast_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,7 +31,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(A a) {
   B b, b2;
   b = a as B;
@@ -52,7 +52,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(List<A> a) {
   List<B> b, b2;
   b = a.where((e) => e is B).cast<B>().toList();
@@ -73,7 +73,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(Map<A, B> a) {
   Map<B, A> b, b2;
   b = a.cast<B, A>();
@@ -96,7 +96,7 @@
 }
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(A a) {
   B b, b2;
   b = (a..m()) as B;
@@ -119,7 +119,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(Set<A> a) {
   Set<B> b, b2;
   b = a.cast<B>();
@@ -139,7 +139,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(A a) {
   B b = a as B;
   B b2 = a as B;
@@ -158,7 +158,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(List<A> a) {
   List<B> b = a.where((e) => e is B).cast<B>().toList();
   List<B> b2 = a.where((e) => e is B).cast<B>().toList();
@@ -177,7 +177,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(Map<A, B> a) {
   Map<B, A> b = a.cast<B, A>();
   Map<B, A> b2 = a.cast<B, A>();
@@ -198,7 +198,7 @@
 }
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(A a) {
   B b = (a..m()) as B;
   B b2 = (a..m()) as B;
@@ -219,7 +219,7 @@
 class A {}
 class B {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.invalidAssignment, '''
+    await assertHasFixAllFix(diag.invalidAssignment, '''
 f(Set<A> a) {
   Set<B> b = a.cast<B>();
   Set<B> b2 = a.cast<B>();
@@ -645,7 +645,7 @@
 ''');
     await assertNoFix(
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.invalidAssignment;
+        return e.diagnosticCode == diag.invalidAssignment;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_extension_override_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_extension_override_test.dart
index 93e3b0c..9652aab 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_extension_override_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_extension_override_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -50,8 +50,7 @@
 ''',
       matchFixMessage: "Add an extension override for 'StringExt1'",
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
 
     await assertHasFixesWithoutApplying(
@@ -61,8 +60,7 @@
         "Add an extension override for 'StringExt2'",
       ],
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
   }
 
@@ -125,8 +123,7 @@
 ''',
       expectedNumberOfFixesForKind: 1,
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo;
+        return error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo;
       },
     );
   }
@@ -202,8 +199,7 @@
 ''',
       matchFixMessage: "Add an extension override for 'E2'",
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
   }
 
@@ -237,8 +233,7 @@
 ''',
       matchFixMessage: "Add an extension override for 'E2'",
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
   }
 
@@ -276,8 +271,7 @@
 ''',
       matchFixMessage: "Add an extension override for 'E2'",
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
   }
 
@@ -384,8 +378,7 @@
 ''',
       matchFixMessage: "Add an extension override for 'StringExt1'",
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
 
     await assertHasFixesWithoutApplying(
@@ -395,8 +388,7 @@
         "Add an extension override for 'StringExt2'",
       ],
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          error.diagnosticCode == diag.ambiguousExtensionMemberAccessTwo,
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart
index 595f5a5..a9017b7 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_field_formal_parameters_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -20,7 +20,7 @@
 @reflectiveTest
 class AddFieldFormalNamedParametersTest extends FixProcessorTest {
   @override
-  FixKind get kind => DartFixKind.addInitializingFormalNamesParameters;
+  FixKind get kind => DartFixKind.addInitializingFormalNamedParameters;
 
   Future<void> test_enum() async {
     await resolveTestCode('''
@@ -221,6 +221,113 @@
 }
 ''');
   }
+
+  Future<void> test_privateField() async {
+    await resolveTestCode('''
+class A {
+  A({int? other});
+
+  final int _foo;
+}
+''');
+    await assertHasFix(
+      '''
+class A {
+  A({int? other, required int foo}) : _foo = foo;
+
+  final int _foo;
+}
+''',
+      filter: (diagnostic) =>
+          diagnostic.diagnosticCode == diag.finalNotInitializedConstructor1,
+    );
+  }
+
+  Future<void> test_privateField_alphaNumeric() async {
+    await resolveTestCode('''
+class C {
+  C();
+
+  final int _1to1;
+}
+''');
+    await assertHasFix(
+      '''
+class C {
+  C({required int p1to1}) : _1to1 = p1to1;
+
+  final int _1to1;
+}
+''',
+      filter: (diagnostic) =>
+          diagnostic.diagnosticCode == diag.finalNotInitializedConstructor1,
+    );
+  }
+
+  Future<void> test_privateField_initializer() async {
+    await resolveTestCode('''
+class A {
+  A({int? other}) : assert(true);
+
+  final int _foo;
+}
+''');
+    await assertHasFix(
+      '''
+class A {
+  A({int? other, required int foo}) : _foo = foo, assert(true);
+
+  final int _foo;
+}
+''',
+      filter: (diagnostic) =>
+          diagnostic.diagnosticCode == diag.finalNotInitializedConstructor1,
+    );
+  }
+
+  Future<void> test_privateField_numeric() async {
+    await resolveTestCode('''
+class C {
+  C();
+
+  final int _3;
+}
+''');
+    await assertHasFix(
+      '''
+class C {
+  C({required int p3}) : _3 = p3;
+
+  final int _3;
+}
+''',
+      filter: (diagnostic) =>
+          diagnostic.diagnosticCode == diag.finalNotInitializedConstructor1,
+    );
+  }
+
+  Future<void> test_privateFields() async {
+    await resolveTestCode('''
+class A {
+  A({int? other});
+
+  final int _foo;
+  final String _bar;
+}
+''');
+    await assertHasFix(
+      '''
+class A {
+  A({int? other, required int foo, required String bar}) : _foo = foo, _bar = bar;
+
+  final int _foo;
+  final String _bar;
+}
+''',
+      filter: (diagnostic) =>
+          diagnostic.diagnosticCode == diag.finalNotInitializedConstructor2,
+    );
+  }
 }
 
 @reflectiveTest
@@ -387,8 +494,7 @@
 }
 ''',
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode ==
-          CompileTimeErrorCode.finalNotInitializedConstructor1,
+          diagnostic.diagnosticCode == diag.finalNotInitializedConstructor1,
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
index acb0d47..c3884b4 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -127,18 +127,14 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 class C {
   late final String s;
   C() {
     s = '';
   }
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.assignmentToFinal,
-    );
+''', filter: (error) => error.diagnosticCode == diag.assignmentToFinal);
   }
 
   Future<void> test_withFinalAssignedInDeclaration() async {
@@ -164,8 +160,7 @@
   c.s = '';
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 class C {
   late final String s;
 }
@@ -173,10 +168,7 @@
 void f(C c) {
   c.s = '';
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.assignmentToFinal,
-    );
+''', filter: (error) => error.diagnosticCode == diag.assignmentToFinal);
   }
 
   Future<void> test_withFinalStaticAssignedInConstructor() async {
@@ -188,18 +180,14 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 class C {
   static late final String s;
   C() {
     s = '';
   }
 }
-''',
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.assignmentToFinal,
-    );
+''', filter: (error) => error.diagnosticCode == diag.assignmentToFinal);
   }
 
   Future<void> test_withLate() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
index 29e33a0..cc32f58 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_enum_case_clauses_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,8 +31,7 @@
     var hasError = false;
     return (error) {
       if (!hasError &&
-          error.diagnosticCode ==
-              StaticWarningCode.missingEnumConstantInSwitch) {
+          error.diagnosticCode == diag.missingEnumConstantInSwitch) {
         hasError = true;
         return true;
       }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart
index cad8b04..00d4c8c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_named_test.dart
@@ -61,6 +61,17 @@
 ''');
   }
 
+  Future<void> test_constructor_implicitSuper() async {
+    // https://github.com/dart-lang/sdk/issues/61927
+    await resolveTestCode('''
+class A {}
+class B extends A {
+  B({super.other});
+}
+''');
+    await assertNoFix();
+  }
+
   Future<void> test_constructor_noParameters() async {
     await resolveTestCode('''
 class A {
@@ -103,6 +114,27 @@
 ''');
   }
 
+  Future<void> test_constructor_superParameter_differentConstructor() async {
+    await resolveTestCode('''
+class A {
+  A();
+  A.foo();
+}
+class B extends A {
+  B({super.other}) : super.foo();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  A.foo({Object? other});
+}
+class B extends A {
+  B({super.other}) : super.foo();
+}
+''');
+  }
+
   Future<void> test_function_hasNamed() async {
     await resolveTestCode('''
 test(int a, {int b = 0}) {}
@@ -229,4 +261,130 @@
 }
 ''');
   }
+
+  Future<void> test_subclass() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+
+class B extends A {
+  B() : super(named: 42);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({required int named});
+}
+
+class B extends A {
+  B() : super(named: 42);
+}
+''');
+  }
+
+  Future<void> test_subclass_superParameter() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+
+class B extends A {
+  B({super.named});
+}
+''');
+    await assertHasFix('''
+class A {
+  A({Object? named});
+}
+
+class B extends A {
+  B({super.named});
+}
+''');
+  }
+
+  Future<void> test_subclass_superParameter_default() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+
+class B extends A {
+  B({super.named = 42});
+}
+''');
+    await assertHasFix('''
+class A {
+  A({required int named});
+}
+
+class B extends A {
+  B({super.named = 42});
+}
+''');
+  }
+
+  Future<void> test_subclass_superParameter_defaultNullable() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+
+class B extends A {
+  B(int? value) : super(named: value);
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? named});
+}
+
+class B extends A {
+  B(int? value) : super(named: value);
+}
+''');
+  }
+
+  Future<void> test_subclass_superParameter_nullable() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+
+class B extends A {
+  B({int? super.named});
+}
+''');
+    await assertHasFix('''
+class A {
+  A({int? named});
+}
+
+class B extends A {
+  B({int? super.named});
+}
+''');
+  }
+
+  Future<void> test_subclass_superParameter_required() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+
+class B extends A {
+  B({required int super.named});
+}
+''');
+    await assertHasFix('''
+class A {
+  A({required int named});
+}
+
+class B extends A {
+  B({required int super.named});
+}
+''');
+  }
 }
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 ba4ff55..5dbe418 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
@@ -30,7 +30,7 @@
 ''');
     await assertHasFix('''
 class A {
-  A(int a, [double d]);
+  A(int a, [double? d]);
 }
 class B extends A {
   B() : super(1, 2.0);
@@ -38,22 +38,40 @@
 ''');
   }
 
-  @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);
+  B(super.a, int super.b);
 }
 ''');
     await assertHasFix('''
 class A {
-  A(int a, [double b]);
+  A(int a, [int? b]);
 }
 class B extends A {
-  B(super.a, super.b);
+  B(super.a, int super.b);
+}
+''');
+  }
+
+  Future<void> test_constructor_callingViaSuperParameter_default() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, [super.b = 0]);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [int? b]);
+}
+class B extends A {
+  B(super.a, [super.b = 0]);
 }
 ''');
   }
@@ -69,7 +87,7 @@
 ''');
     await assertHasFix('''
 class A {
-  A(int a, [double d]);
+  A(int a, [double? d]);
 }
 void f() {
   A(1, 2.0);
@@ -90,7 +108,7 @@
     await assertHasFix('''
 class A {
   int a;
-  A(this.a, [double d]);
+  A(this.a, [double? d]);
 }
 void f() {
   A(1, 2.0);
@@ -115,7 +133,7 @@
   A(int a);
 }
 class B extends A {
-  B(super.a, [double d]);
+  B(super.a, [double? d]);
 }
 void f() {
   B(1, 2.0);
@@ -123,6 +141,57 @@
 ''');
   }
 
+  Future<void> test_constructor_implicitSuper() async {
+    // https://github.com/dart-lang/sdk/issues/61927
+    await resolveTestCode('''
+class A {}
+class B extends A {
+  B([super.other]);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_constructor_superParameter() async {
+    await resolveTestCode('''
+class A {
+  A();
+}
+class B extends A {
+  B([super.other]);
+}
+''');
+    await assertHasFix('''
+class A {
+  A([Object? other]);
+}
+class B extends A {
+  B([super.other]);
+}
+''');
+  }
+
+  Future<void> test_constructor_superParameter_differentConstructor() async {
+    await resolveTestCode('''
+class A {
+  A();
+  A.foo();
+}
+class B extends A {
+  B([super.other]) : super.foo();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  A.foo([Object? other]);
+}
+class B extends A {
+  B([super.other]) : super.foo();
+}
+''');
+  }
+
   Future<void> test_function_hasNamed() async {
     await resolveTestCode('''
 test({int a = 0}) {}
@@ -140,10 +209,8 @@
   test(1);
 }
 ''');
-    // TODO(brianwilkerson): The fix needs to make the parameter nullable, but
-    //  I'm leaving the test as is to keep it passing.
     await assertHasFix('''
-test([int i]) {}
+test([int? i]) {}
 void f() {
   test(1);
 }
@@ -161,7 +228,7 @@
 ''');
     await assertHasFix('''
 class A {
-  test(int a, [double d]) {}
+  test(int a, [double? d]) {}
   void f() {
     test(1, 2.0);
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
index ad6f0bd..4fec317 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
@@ -23,6 +23,55 @@
   @override
   FixKind get kind => DartFixKind.addMissingParameterRequired;
 
+  Future<void> test_constructor_callingViaSuperParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, int super.b);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, int b);
+}
+class B extends A {
+  B(super.a, int super.b);
+}
+''');
+  }
+
+  Future<void> test_constructor_callingViaSuperParameter_default() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, super.b);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, Object? b);
+}
+class B extends A {
+  B(super.a, super.b);
+}
+''');
+  }
+
+  Future<void> test_constructor_implicitSuper() async {
+    // https://github.com/dart-lang/sdk/issues/61927
+    await resolveTestCode('''
+class A {}
+class B extends A {
+  B(super.other);
+}
+''');
+    await assertNoFix();
+  }
+
   Future<void> test_constructor_named_hasOne() async {
     await resolveTestCode('''
 class A {
@@ -42,6 +91,27 @@
 ''');
   }
 
+  Future<void> test_constructor_superParameter_differentConstructor() async {
+    await resolveTestCode('''
+class A {
+  A();
+  A.foo();
+}
+class B extends A {
+  B(super.other) : super.foo();
+}
+''');
+    await assertHasFix('''
+class A {
+  A();
+  A.foo(Object? other);
+}
+class B extends A {
+  B(super.other) : super.foo();
+}
+''');
+  }
+
   Future<void> test_constructor_unnamed_hasOne() async {
     await resolveTestCode('''
 class A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_switch_cases_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_switch_cases_test.dart
index e091b7d..99d6d97 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_switch_cases_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_switch_cases_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
@@ -234,8 +234,7 @@
   };
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 enum E {
   first, second, _unknown
 }
@@ -249,11 +248,7 @@
     E._unknown => throw UnimplementedError(),
   };
 }
-''',
-      filter: (e) =>
-          e.diagnosticCode ==
-          CompileTimeErrorCode.nonExhaustiveSwitchExpression,
-    );
+''', filter: (e) => e.diagnosticCode == diag.nonExhaustiveSwitchExpression);
   }
 
   Future<void> test_num_anyDouble_intProperty() async {
@@ -358,6 +353,88 @@
 ''');
   }
 
+  Future<void> test_privateEnum() async {
+    newFile('$testPackageLibPath/enum.dart', r'''
+enum _E { first, second }
+
+_E f() => _E.first;
+''');
+    await resolveTestCode('''
+import 'enum.dart';
+
+int g() {
+  return switch (f()) {
+  };
+}
+''');
+    await assertHasFix('''
+import 'enum.dart';
+
+int g() {
+  return switch (f()) {
+    // TODO: Handle this case.
+    _ => throw UnimplementedError(),
+  };
+}
+''');
+  }
+
+  Future<void> test_privateEnumConstant() async {
+    newFile('$testPackageLibPath/enum.dart', r'''
+enum E { first, second, _unknown }
+''');
+    await resolveTestCode('''
+import 'enum.dart';
+
+int g(E e) {
+  return switch (e) {
+  };
+}
+''');
+    await assertHasFix('''
+import 'enum.dart';
+
+int g(E e) {
+  return switch (e) {
+    // TODO: Handle this case.
+    E.first => throw UnimplementedError(),
+    // TODO: Handle this case.
+    E.second => throw UnimplementedError(),
+    // TODO: Handle this case.
+    _ => throw UnimplementedError(),
+  };
+}
+''');
+  }
+
+  Future<void> test_privateEnumConstant_privateMissing() async {
+    newFile('$testPackageLibPath/enum.dart', r'''
+enum E { first, second, _unknown }
+''');
+    await resolveTestCode('''
+import 'enum.dart';
+
+int g(E e) {
+  return switch (e) {
+    E.first => 0,
+    E.second => 1,
+  };
+}
+''');
+    await assertHasFix('''
+import 'enum.dart';
+
+int g(E e) {
+  return switch (e) {
+    E.first => 0,
+    E.second => 1,
+    // TODO: Handle this case.
+    _ => throw UnimplementedError(),
+  };
+}
+''');
+  }
+
   Future<void> test_sealed_impl() async {
     var otherRoot = getFolder('$packagesRootPath/other');
     newFile('$otherRoot/lib/src/private.dart', '''
@@ -406,8 +483,7 @@
     var hasError = false;
     return (diagnostic) {
       if (!hasError &&
-          diagnostic.diagnosticCode ==
-              CompileTimeErrorCode.nonExhaustiveSwitchStatement) {
+          diagnostic.diagnosticCode == diag.nonExhaustiveSwitchStatement) {
         hasError = true;
         return true;
       }
@@ -540,8 +616,7 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 enum E {a, b, _c}
 void f(E e) {
   switch (e) {
@@ -556,10 +631,7 @@
       throw UnimplementedError();
   }
 }
-''',
-      filter: (e) =>
-          e.diagnosticCode == CompileTimeErrorCode.nonExhaustiveSwitchStatement,
-    );
+''', filter: (e) => e.diagnosticCode == diag.nonExhaustiveSwitchStatement);
   }
 
   Future<void> test_final() async {
@@ -884,6 +956,95 @@
 ''');
   }
 
+  Future<void> test_privateEnum() async {
+    newFile('$testPackageLibPath/enum.dart', r'''
+enum _E { first, second }
+
+_E f() => _E.first;
+''');
+    await resolveTestCode('''
+import 'enum.dart';
+
+int g() {
+  switch (f()) {
+  }
+}
+''');
+    await assertHasFix('''
+import 'enum.dart';
+
+int g() {
+  switch (f()) {
+    default:
+      // TODO: Handle this case.
+      throw UnimplementedError();
+  }
+}
+''');
+  }
+
+  Future<void> test_privateEnumConstant() async {
+    newFile('$testPackageLibPath/enum.dart', r'''
+enum E { first, second, _unknown }
+''');
+    await resolveTestCode('''
+import 'enum.dart';
+
+int g(E e) {
+  switch (e) {
+  }
+}
+''');
+    await assertHasFix('''
+import 'enum.dart';
+
+int g(E e) {
+  switch (e) {
+    case E.first:
+      // TODO: Handle this case.
+      throw UnimplementedError();
+    case E.second:
+      // TODO: Handle this case.
+      throw UnimplementedError();
+    default:
+      // TODO: Handle this case.
+      throw UnimplementedError();
+  }
+}
+''');
+  }
+
+  Future<void> test_privateEnumConstant_privateMissing() async {
+    newFile('$testPackageLibPath/enum.dart', r'''
+enum E { first, second, _unknown }
+''');
+    await resolveTestCode('''
+import 'enum.dart';
+
+int g(E e) {
+  switch (e) {
+    case E.first:
+    case E.second:
+      return 0;
+  }
+}
+''');
+    await assertHasFix('''
+import 'enum.dart';
+
+int g(E e) {
+  switch (e) {
+    case E.first:
+    case E.second:
+      return 0;
+    default:
+      // TODO: Handle this case.
+      throw UnimplementedError();
+  }
+}
+''');
+  }
+
   Future<void> test_static() async {
     await resolveTestCode('''
 enum E {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart
index 443b9d7..0e74db3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_ne_null_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -32,7 +32,7 @@
   }
 }
 ''');
-    await assertNoFixAllFix(CompileTimeErrorCode.nonBoolCondition);
+    await assertNoFixAllFix(diag.nonBoolCondition);
   }
 
   Future<void> test_nonBoolCondition_all_nullable() async {
@@ -46,7 +46,7 @@
   }
 }
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.nonBoolCondition, '''
+    await assertHasFixAllFix(diag.nonBoolCondition, '''
 f(String? p, String? q) {
   if (p != null) {
     print(p);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_null_check_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_null_check_test.dart
index 63fbb6a..601a3ff 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_null_check_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_null_check_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -390,7 +390,7 @@
 ''');
     await assertNoFix(
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.invalidAssignment,
+          diagnostic.diagnosticCode == diag.invalidAssignment,
     );
   }
 
@@ -403,8 +403,7 @@
 ''');
     await assertNoFix(
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.argumentTypeNotAssignable;
+        return error.diagnosticCode == diag.argumentTypeNotAssignable;
       },
     );
   }
@@ -446,8 +445,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.argumentTypeNotAssignable;
+        return error.diagnosticCode == diag.argumentTypeNotAssignable;
       },
     );
   }
@@ -461,8 +459,7 @@
 ''');
     await assertNoFix(
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.argumentTypeNotAssignable;
+        return error.diagnosticCode == diag.argumentTypeNotAssignable;
       },
     );
   }
@@ -476,8 +473,7 @@
 ''');
     await assertNoFix(
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.argumentTypeNotAssignable;
+        return error.diagnosticCode == diag.argumentTypeNotAssignable;
       },
     );
   }
@@ -567,8 +563,7 @@
 ''');
     await assertNoFix(
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode !=
-          CompileTimeErrorCode.listElementTypeNotAssignable,
+          diagnostic.diagnosticCode != diag.listElementTypeNotAssignable,
     );
   }
 
@@ -617,8 +612,7 @@
 }
 ''',
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode !=
-          CompileTimeErrorCode.yieldEachOfInvalidType,
+          diagnostic.diagnosticCode != diag.yieldEachOfInvalidType,
     );
   }
 
@@ -640,7 +634,7 @@
 ''',
       filter: (diagnostic) =>
           diagnostic.diagnosticCode ==
-          CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach,
+          diag.uncheckedUseOfNullableValueInYieldEach,
     );
   }
 
@@ -661,8 +655,7 @@
 }
 ''',
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode !=
-          CompileTimeErrorCode.yieldEachOfInvalidType,
+          diagnostic.diagnosticCode != diag.yieldEachOfInvalidType,
     );
   }
 
@@ -679,8 +672,7 @@
 }
 ''',
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode !=
-          CompileTimeErrorCode.yieldEachOfInvalidType,
+          diagnostic.diagnosticCode != diag.yieldEachOfInvalidType,
     );
   }
 }
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 9d78a7b..3dfd6a8 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
@@ -53,11 +53,13 @@
     await resolveTestCode('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 void function({@required String param}) {}
 ''');
     await assertHasFix('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 void function({required String param}) {}
 ''');
   }
@@ -70,6 +72,7 @@
 
 class A {
   String foo;
+  // ignore: deprecated_member_use
   A({@required this.foo});
 }
 ''');
@@ -78,6 +81,7 @@
 
 class A {
   String foo;
+  // ignore: deprecated_member_use
   A({required this.foo});
 }
 ''');
@@ -89,11 +93,13 @@
     await resolveTestCode('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 void f({@required int g(String)}) { }
 ''');
     await assertHasFix('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 void f({required int g(String)}) { }
 ''');
   }
@@ -110,6 +116,7 @@
 
 const foo = Foo();
 
+// ignore: deprecated_member_use
 void function({@required @foo String param}) {}
 ''');
     await assertHasFix('''
@@ -121,6 +128,7 @@
 
 const foo = Foo();
 
+// ignore: deprecated_member_use
 void function({@foo required String param}) {}
 ''');
   }
@@ -137,6 +145,7 @@
 
 const foo = Foo();
 
+// ignore: deprecated_member_use
 void function({@foo @required String param}) {}
 ''');
     await assertHasFix('''
@@ -148,6 +157,7 @@
 
 const foo = Foo();
 
+// ignore: deprecated_member_use
 void function({@foo required String param}) {}
 ''');
   }
@@ -158,11 +168,13 @@
     await resolveTestCode('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 void function({@Required('reason') String param}) {}
 ''');
     await assertHasFix('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 void function({required String param}) {}
 ''');
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_switch_case_break_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_switch_case_break_test.dart
index 292aeb4..54ed6dd 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_switch_case_break_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_switch_case_break_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -37,9 +37,7 @@
   }
 }
 ''');
-    await assertHasFixAllFix(
-      CompileTimeErrorCode.switchCaseCompletesNormally,
-      '''
+    await assertHasFixAllFix(diag.switchCaseCompletesNormally, '''
 void f(Object? x) {
   switch (x) {
     case 0:
@@ -52,8 +50,7 @@
       2;
   }
 }
-''',
-    );
+''');
   }
 }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/ambiguous_import_fix_test.dart b/pkg/analysis_server/test/src/services/correction/fix/ambiguous_import_fix_test.dart
index 763557c..09f9f4b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/ambiguous_import_fix_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/ambiguous_import_fix_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -145,7 +145,7 @@
 ''',
       matchFixMessage: "Hide others to use 'M' from 'lib4.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
   }
@@ -195,7 +195,7 @@
 ''',
       matchFixMessage: "Hide others to use 'M' from 'lib3.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
   }
@@ -228,7 +228,7 @@
 ''',
       matchFixMessage: "Hide others to use 'E' from 'lib1.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
   }
@@ -276,7 +276,7 @@
 ''',
       matchFixMessage: "Hide others to use 'M' from 'lib1.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
   }
@@ -564,8 +564,7 @@
 }
 ''',
       matchFixMessage: "Hide others to use 'N' from 'lib2.dart'",
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.ambiguousImport,
+      filter: (error) => error.diagnosticCode == diag.ambiguousImport,
     );
   }
 
@@ -592,8 +591,7 @@
 }
 ''',
       matchFixMessage: "Hide others to use 'N' from 'lib2.dart' as l",
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.ambiguousImport,
+      filter: (error) => error.diagnosticCode == diag.ambiguousImport,
     );
   }
 
@@ -621,7 +619,7 @@
 ''',
       matchFixMessage: "Hide others to use 'M' from 'lib1.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
     await assertHasFix(
@@ -634,7 +632,7 @@
 ''',
       matchFixMessage: "Hide others to use 'M' from 'lib2.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
     await assertHasFix(
@@ -647,7 +645,7 @@
 ''',
       matchFixMessage: "Hide others to use 'M' from 'lib3.dart'",
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.ambiguousImport;
+        return error.diagnosticCode == diag.ambiguousImport;
       },
     );
   }
@@ -861,8 +859,7 @@
   print(n);
 }
 ''',
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.ambiguousImport,
+      filter: (error) => error.diagnosticCode == diag.ambiguousImport,
       matchFixMessage: "Remove show to use 'N' from 'lib2.dart'",
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart
index 3152156..22aa546 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart
@@ -22,8 +22,7 @@
     'deprecated_rule',
     'Deprecated rule.',
     correctionMessage: 'Try deprecated rule.',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.deprecated_rule',
+    uniqueName: 'LintCode.deprecated_rule',
   );
 
   DeprecatedRule()
@@ -37,27 +36,11 @@
   DiagnosticCode get diagnosticCode => code;
 }
 
-class RemovedRule extends AnalysisRule {
-  static const LintCode code = LintCode(
-    'removed_rule',
-    'Removed rule.',
-    correctionMessage: 'Try removed rule.',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.removed_rule',
-  );
-
-  RemovedRule()
-    : super(name: 'removed_rule', description: '', state: RuleState.removed());
-
-  @override
-  DiagnosticCode get diagnosticCode => code;
-}
-
 @reflectiveTest
 class RemoveLintTest extends AnalysisOptionsFixTest with LintRegistrationMixin {
   // Keep track of these rules so they can be unregistered in `tearDown`.
   var deprecatedRule = DeprecatedRule();
-  var removedRule = RemovedRule();
+  var removedRule = RemovedAnalysisRule(name: 'removed_rule', description: '');
 
   void setUp() {
     registerLintRules();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
index cd0ce52..2bf99a3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -491,7 +491,7 @@
 void f(A a) {
   a.foo += 2;
 }
-''', filter: (e) => e.diagnosticCode == CompileTimeErrorCode.undefinedGetter);
+''', filter: (e) => e.diagnosticCode == diag.undefinedGetter);
   }
 
   Future<void> test_getterSetter_qualified_static() async {
@@ -514,7 +514,7 @@
 void f() {
   A.foo += 2;
 }
-''', filter: (e) => e.diagnosticCode == CompileTimeErrorCode.undefinedGetter);
+''', filter: (e) => e.diagnosticCode == diag.undefinedGetter);
   }
 
   Future<void> test_getterSetter_unqualified() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
index 60dc685..ff04546 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_into_block_body_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -242,7 +242,7 @@
   });
 }
 ''');
-    await assertHasFixAllFix(WarningCode.unnecessarySetLiteral, '''
+    await assertHasFixAllFix(diag.unnecessarySetLiteral, '''
 void g(void Function() fun) {}
 
 void f() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_into_getter_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_into_getter_test.dart
index 84f18b9..3cd6701 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_into_getter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_into_getter_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -36,8 +36,7 @@
 }
 ''',
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.extensionDeclaresInstanceField,
+          error.diagnosticCode == diag.extensionDeclaresInstanceField,
     );
   }
 
@@ -240,8 +239,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.implicitThisReferenceInInitializer;
+        return error.diagnosticCode == diag.implicitThisReferenceInInitializer;
       },
     );
   }
@@ -264,8 +262,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.implicitThisReferenceInInitializer;
+        return error.diagnosticCode == diag.implicitThisReferenceInInitializer;
       },
     );
   }
@@ -288,8 +285,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.implicitThisReferenceInInitializer;
+        return error.diagnosticCode == diag.implicitThisReferenceInInitializer;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_block_function_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_block_function_body_test.dart
index 7ed2a25..9b97dfc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_block_function_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_block_function_body_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -50,7 +50,7 @@
   g(() => {g(() => {1})});
 }
 ''');
-    await assertHasFixAllFix(WarningCode.unnecessarySetLiteral, '''
+    await assertHasFixAllFix(diag.unnecessarySetLiteral, '''
 void g(void Function() fun) {}
 
 void f() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_flutter_style_todo_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_flutter_style_todo_test.dart
index b94e0c0..d7f0a5a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_flutter_style_todo_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_flutter_style_todo_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/dart/error/todo_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -60,7 +60,7 @@
 /// Docs.
 // TODO(user): msg.
 void f() { }
-''', filter: (e) => e.diagnosticCode != TodoCode.todo);
+''', filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_docCommentSolo() async {
@@ -71,7 +71,7 @@
     await assertHasFix('''
 // TODO(user): msg.
 void f() { }
-''', filter: (e) => e.diagnosticCode != TodoCode.todo);
+''', filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_extraLeadingSpace() async {
@@ -82,7 +82,7 @@
     await assertHasFix('''
 // TODO(user): msg.
 void f() { }
-''', filter: (e) => e.diagnosticCode != TodoCode.todo);
+''', filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_lowerCase() async {
@@ -101,7 +101,7 @@
 // TODO(user msg.
 void f() { }
 ''');
-    await assertNoFix(filter: (e) => e.diagnosticCode != TodoCode.todo);
+    await assertNoFix(filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_missingColon() async {
@@ -112,7 +112,7 @@
     await assertHasFix('''
 // TODO(user): msg.
 void f() { }
-''', filter: (e) => e.diagnosticCode != TodoCode.todo);
+''', filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_missingColon_surroundingComments() async {
@@ -127,7 +127,7 @@
 // TODO(user): msg.
 // Trailing comment.
 void f() { }
-''', filter: (e) => e.diagnosticCode != TodoCode.todo);
+''', filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_missingColonAndMessage() async {
@@ -135,7 +135,7 @@
 // TODO(user)
 void f() {}
 ''');
-    await assertNoFix(filter: (e) => e.diagnosticCode != TodoCode.todo);
+    await assertNoFix(filter: (e) => e.diagnosticCode != diag.todo);
   }
 
   Future<void> test_missingLeadingSpace() async {
@@ -154,6 +154,6 @@
     await assertHasFix('''
 // TODO(user): msg.
 void f() {}
-''', filter: (e) => e.diagnosticCode != TodoCode.todo);
+''', filter: (e) => e.diagnosticCode != diag.todo);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart
index f8435b5..7a29bd3 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_relative_import_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -88,13 +88,9 @@
 import 'package:test/foo';
 ''');
 
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 import 'foo';
-''',
-      filter: (error) =>
-          error.diagnosticCode != CompileTimeErrorCode.uriDoesNotExist,
-    );
+''', filter: (error) => error.diagnosticCode != diag.uriDoesNotExist);
   }
 
   Future<void> test_relativeImportRespectQuoteStyle() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
index 86c2664..d701c5f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -472,7 +472,7 @@
 }
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.undefinedFunction;
+        return e.diagnosticCode == diag.undefinedFunction;
       },
     );
   }
@@ -563,7 +563,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedIdentifier;
+        return error.diagnosticCode == diag.undefinedIdentifier;
       },
     );
     assertLinkedGroup(change.linkedEditGroups[0], ['Test])', 'Test {']);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
index 616bf3e..683f140 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_for_final_fields_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -312,8 +312,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-                CompileTimeErrorCode.finalNotInitialized &&
+        return error.diagnosticCode == diag.finalNotInitialized &&
             error.message.contains("'_a'");
       },
     );
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_extension_member_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_extension_member_test.dart
index d7019d7..0f38142 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_extension_member_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_extension_member_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -1074,8 +1074,7 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 extension E on int {
   void f(int i) {
     i -= foo();
@@ -1083,10 +1082,7 @@
 
   int foo() {}
 }
-''',
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.undefinedMethod,
-    );
+''', filter: (diagnostic) => diagnostic.diagnosticCode == diag.undefinedMethod);
   }
 
   Future<void> test_operatorAssignment_neverAssignable() async {
@@ -1102,12 +1098,11 @@
 }
 ''');
     await assertNoFix(
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.undefinedMethod,
+      filter: (diagnostic) => diagnostic.diagnosticCode == diag.undefinedMethod,
     );
     await assertNoFix(
       filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.invalidAssignment,
+          diagnostic.diagnosticCode == diag.invalidAssignment,
     );
   }
 
@@ -1156,8 +1151,7 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 extension E on int {
   void f(int i) {
     i += foo();
@@ -1165,10 +1159,7 @@
 
   int foo() {}
 }
-''',
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.undefinedMethod,
-    );
+''', filter: (diagnostic) => diagnostic.diagnosticCode == diag.undefinedMethod);
   }
 
   Future<void> test_operatorAssignment_slash_int() async {
@@ -1180,8 +1171,7 @@
 }
 ''');
     await assertNoFix(
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.undefinedMethod,
+      filter: (diagnostic) => diagnostic.diagnosticCode == diag.undefinedMethod,
     );
   }
 
@@ -1193,8 +1183,7 @@
   }
 }
 ''');
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 extension E on int {
   void f(int i) {
     i *= foo();
@@ -1202,10 +1191,7 @@
 
   int foo() {}
 }
-''',
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.undefinedMethod,
-    );
+''', filter: (diagnostic) => diagnostic.diagnosticCode == diag.undefinedMethod);
   }
 
   Future<void> test_operatorAssignment_subtype() async {
@@ -1223,8 +1209,7 @@
 }
 ''');
     await assertNoFix(
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == CompileTimeErrorCode.undefinedMethod,
+      filter: (diagnostic) => diagnostic.diagnosticCode == diag.undefinedMethod,
     );
   }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart
index cc2521c..33df99b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_field_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -277,8 +277,7 @@
 }
 ''',
       filter: (e) {
-        return e.diagnosticCode ==
-            CompileTimeErrorCode.dotShorthandUndefinedGetter;
+        return e.diagnosticCode == diag.dotShorthandUndefinedGetter;
       },
     );
   }
@@ -300,8 +299,7 @@
 }
 ''',
       filter: (e) {
-        return e.diagnosticCode ==
-            CompileTimeErrorCode.dotShorthandUndefinedGetter;
+        return e.diagnosticCode == diag.dotShorthandUndefinedGetter;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
index c614ffd..734c64e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_function_test.dart
@@ -406,7 +406,7 @@
   print(x);
 }
 
-Future<dynamic> myUndefinedFunction() async {
+Future<Object?> myUndefinedFunction() async {
 }
 ''');
   }
@@ -442,7 +442,7 @@
   test(throw 42);
 }
 
-void test(param0) {
+void test(Object? object) {
 }
 ''');
   }
@@ -731,7 +731,7 @@
   test(null);
 }
 
-void test(param0) {
+void test(Object? object) {
 }
 ''');
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart
index dba3426..3f8f160 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_getter_test.dart
@@ -261,6 +261,75 @@
 ''');
   }
 
+  Future<void> test_futureIterable_int() async {
+    await resolveTestCode('''
+class C {
+  Future<void> f() async {
+    for (int v in await test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Future<Iterable<int>> get test => null;
+
+  Future<void> f() async {
+    for (int v in await test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
+  Future<void> test_futureIterable_nullableObject() async {
+    await resolveTestCode('''
+class C {
+  Future<void> f() async {
+    for (var v in await test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Future<Iterable<Object?>> get test => null;
+
+  Future<void> f() async {
+    for (var v in await test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
+  Future<void> test_futureStream_NullableObject() async {
+    await resolveTestCode('''
+class C {
+  Future<void> f() async {
+    await for (var v in await test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Future<Stream<Object?>> get test => null;
+
+  Future<void> f() async {
+    await for (var v in await test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
   Future<void> test_guard() async {
     await resolveTestCode('''
 class A {
@@ -465,6 +534,101 @@
     await assertNoFix();
   }
 
+  Future<void> test_iterable_identifier() async {
+    await resolveTestCode('''
+class C {
+  void f() {
+    int v;
+    for (v in test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Iterable<int> get test => null;
+
+  void f() {
+    int v;
+    for (v in test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
+  Future<void> test_iterable_int() async {
+    await resolveTestCode('''
+class C {
+  void f() {
+    for (int v in test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Iterable<int> get test => null;
+
+  void f() {
+    for (int v in test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
+  Future<void> test_iterable_nullableObject() async {
+    await resolveTestCode('''
+class C {
+  void f() {
+    for (var v in test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Iterable<Object?> get test => null;
+
+  void f() {
+    for (var v in test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/62093')
+  Future<void> test_iterable_recordDestructuring() async {
+    await resolveTestCode('''
+class C {
+  void f() {
+    for (var (int v) in test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Iterable<(int,)> get test => null;
+
+  void f() {
+    for (var (int v) in test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
   Future<void> test_location_afterLastGetter() async {
     await resolveTestCode('''
 class A {
@@ -1001,6 +1165,52 @@
     await assertNoFix();
   }
 
+  Future<void> test_stream_int() async {
+    await resolveTestCode('''
+class C {
+  Future<void> f() async {
+    await for (int v in test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Stream<int> get test => null;
+
+  Future<void> f() async {
+    await for (int v in test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
+  Future<void> test_stream_nullableObject() async {
+    await resolveTestCode('''
+class C {
+  Future<void> f() async {
+    await for (var v in test) {
+      print(v);
+    }
+  }
+}
+''');
+    await assertHasFix('''
+class C {
+  Stream<Object?> get test => null;
+
+  Future<void> f() async {
+    await for (var v in test) {
+      print(v);
+    }
+  }
+}
+''');
+  }
+
   Future<void> test_unqualified_instance_asInvocationArgument() async {
     await resolveTestCode('''
 class A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
index ed2c455..a0f9d88 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_method_test.dart
@@ -1294,7 +1294,7 @@
 class A {
   var f = myUndefinedMethod();
 
-  static myUndefinedMethod() {}
+  static Object? myUndefinedMethod() {}
 }
 ''');
   }
@@ -1309,7 +1309,7 @@
 class A {
   late var f = myUndefinedMethod();
 
-  myUndefinedMethod() {}
+  Object? myUndefinedMethod() {}
 }
 ''');
   }
@@ -1475,7 +1475,7 @@
 class A {
   static var f = myUndefinedMethod();
 
-  static myUndefinedMethod() {}
+  static Object? myUndefinedMethod() {}
 }
 ''');
   }
@@ -1490,7 +1490,7 @@
 class A {
   static late var f = myUndefinedMethod();
 
-  static myUndefinedMethod() {}
+  static Object? myUndefinedMethod() {}
 }
 ''');
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
index 61750bd..bef5953 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_missing_overrides_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -70,7 +70,7 @@
 ''',
       filter: (error) {
         return error.diagnosticCode ==
-            CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne;
+            diag.nonAbstractClassInheritsAbstractMemberOne;
       },
     );
   }
@@ -99,7 +99,7 @@
 ''',
       filter: (error) {
         return error.diagnosticCode ==
-            CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne;
+            diag.nonAbstractClassInheritsAbstractMemberOne;
       },
     );
   }
@@ -127,7 +127,7 @@
 ''',
       filter: (error) {
         return error.diagnosticCode ==
-            CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne;
+            diag.nonAbstractClassInheritsAbstractMemberOne;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
index fdf6565..e1a2818 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -310,7 +310,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedIdentifier;
+        return error.diagnosticCode == diag.undefinedIdentifier;
       },
     );
     assertLinkedGroup(change.linkedEditGroups[0], ['Test])', 'Test {']);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_parameter_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_parameter_test.dart
index b9b4470..0535296 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_parameter_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_parameter_test.dart
@@ -19,26 +19,6 @@
   @override
   FixKind get kind => DartFixKind.createParameter;
 
-  Future<void> test_dynamic_type() async {
-    await resolveTestCode('''
-int f(
-  int b,
-) {
-  var i = b2;
-  return i;
-}
-''');
-    await assertHasFix('''
-int f(
-  int b,
-  dynamic b2,
-) {
-  var i = b2;
-  return i;
-}
-''');
-  }
-
   Future<void> test_final_comma() async {
     await resolveTestCode('''
 int f(
@@ -98,6 +78,26 @@
 ''');
   }
 
+  Future<void> test_nullableObject_type() async {
+    await resolveTestCode('''
+int f(
+  int b,
+) {
+  var i = b2;
+  return i;
+}
+''');
+    await assertHasFix('''
+int f(
+  int b,
+  Object? b2,
+) {
+  var i = b2;
+  return i;
+}
+''');
+  }
+
   Future<void> test_only() async {
     await resolveTestCode('''
 int f() {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
index 34e9178..4ef8374 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
@@ -60,7 +60,7 @@
   /// A method that can be used as an error filter to ignore any unused_import
   /// diagnostics.
   bool ignoreUnusedImport(Diagnostic diagnostic) =>
-      diagnostic.diagnosticCode != WarningCode.unusedImport;
+      diagnostic.diagnosticCode != diag.unusedImport;
 
   /// Sets the content of the library that defines the element referenced by the
   /// data on which this test is based.
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/conflicting_key_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/conflicting_key_test.dart
index 0419ae2..d1208ff 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/conflicting_key_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/conflicting_key_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -29,8 +29,8 @@
   changes: []
 ''',
       [
-        error(TransformSetErrorCode.missingOneOfMultipleKeys, 69, 53),
-        error(TransformSetErrorCode.conflictingKey, 109, 5),
+        error(diag.missingOneOfMultipleKeys, 69, 53),
+        error(diag.conflictingKey, 109, 5),
       ],
     );
   }
@@ -50,7 +50,7 @@
       index: 2
       name: 'p'
 ''',
-      [error(TransformSetErrorCode.conflictingKey, 167, 4)],
+      [error(diag.conflictingKey, 167, 4)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/expected_primary_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/expected_primary_test.dart
index 93f6452..40ec5e1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/expected_primary_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/expected_primary_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -30,7 +30,7 @@
       - if: "'x' =="
         changes: []
 ''',
-      [error(TransformSetErrorCode.expectedPrimary, 177, 2)],
+      [error(diag.expectedPrimary, 177, 2)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/incompatible_element_kind_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/incompatible_element_kind_test.dart
index 6bc0dd8..3edcac1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/incompatible_element_kind_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/incompatible_element_kind_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -32,7 +32,7 @@
         uris: ['test.dart']
         variable: 'v'
 ''',
-      [error(TransformSetErrorCode.incompatibleElementKind, 191, 42)],
+      [error(diag.incompatibleElementKind, 191, 42)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_change_for_kind_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_change_for_kind_test.dart
index 03565b3..88b7e0b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_change_for_kind_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_change_for_kind_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -31,7 +31,7 @@
         uris: ['test.dart']
         extension: 'F'
 ''',
-      [error(TransformSetErrorCode.invalidChangeForKind, 177, 43)],
+      [error(diag.invalidChangeForKind, 177, 43)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_character_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_character_test.dart
index ab3ece6..7fbf5d9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_character_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_character_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../code_fragment_parser_test.dart';
@@ -16,14 +16,10 @@
 @reflectiveTest
 class InvalidCharacterTest extends AbstractCodeFragmentParserTest {
   void test_final() {
-    assertErrors('arguments;', [
-      error(TransformSetErrorCode.invalidCharacter, 9, 1),
-    ]);
+    assertErrors('arguments;', [error(diag.invalidCharacter, 9, 1)]);
   }
 
   void test_initial() {
-    assertErrors('{ some', [
-      error(TransformSetErrorCode.invalidCharacter, 0, 1),
-    ]);
+    assertErrors('{ some', [error(diag.invalidCharacter, 0, 1)]);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_key_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_key_test.dart
index fc7a61b..7bc9b4f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_key_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_key_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -22,7 +22,7 @@
 version: 1
 transforms: []
 ''',
-      [error(TransformSetErrorCode.invalidKey, 0, 1)],
+      [error(diag.invalidKey, 0, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
 version: 1
 transforms: []
 ''',
-      [error(TransformSetErrorCode.invalidKey, 0, 2)],
+      [error(diag.invalidKey, 0, 2)],
     );
   }
 
@@ -44,7 +44,7 @@
 version: 1
 transforms: []
 ''',
-      [error(TransformSetErrorCode.invalidKey, 0, 2)],
+      [error(diag.invalidKey, 0, 2)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_parameter_style_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_parameter_style_test.dart
index ad85c17..7ca6f8f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_parameter_style_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_parameter_style_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -34,7 +34,7 @@
       argumentValue:
         expression: ''
 ''',
-      [error(TransformSetErrorCode.invalidParameterStyle, 171, 5)],
+      [error(diag.invalidParameterStyle, 171, 5)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_required_if_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_required_if_test.dart
index 8f05992..cdd3cf7 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_required_if_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_required_if_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -39,7 +39,7 @@
             kind: 'fragment'
             value: 'arguments[1]'
 ''',
-      [error(TransformSetErrorCode.invalidRequiredIf, 269, 10)],
+      [error(diag.invalidRequiredIf, 269, 10)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_one_of_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_one_of_test.dart
index a94a2b8..f53b311 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_one_of_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_one_of_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -28,7 +28,7 @@
   changes:
     - kind: 'invalid'
 ''',
-      [error(TransformSetErrorCode.invalidValueOneOf, 135, 9)],
+      [error(diag.invalidValueOneOf, 135, 9)],
     );
   }
 
@@ -52,7 +52,7 @@
           x:
             kind: 'invalid'
 ''',
-      [error(TransformSetErrorCode.invalidValueOneOf, 279, 9)],
+      [error(diag.invalidValueOneOf, 279, 9)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_test.dart
index c2955d8..edfc429 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/invalid_value_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -28,7 +28,7 @@
   changes:
     - 'rename'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 129, 8)],
+      [error(diag.invalidValue, 129, 8)],
     );
   }
 
@@ -44,7 +44,7 @@
     - kind: 'rename'
       newName: 'B'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 73, 1)],
+      [error(diag.invalidValue, 73, 1)],
     );
   }
 
@@ -61,7 +61,7 @@
     - kind: 'rename'
       newName: 'B'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 9, 2)],
+      [error(diag.invalidValue, 9, 2)],
     );
   }
 
@@ -78,7 +78,7 @@
     - kind: 'rename'
       newName: 'B'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 9, 7)],
+      [error(diag.invalidValue, 9, 7)],
     );
   }
 
@@ -88,7 +88,7 @@
 version: 1
 transforms: 3
 ''',
-      [error(TransformSetErrorCode.invalidValue, 23, 1)],
+      [error(diag.invalidValue, 23, 1)],
     );
   }
 
@@ -106,7 +106,7 @@
     - kind: 'rename'
       newName: 'B'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 32, 1)],
+      [error(diag.invalidValue, 32, 1)],
     );
   }
 
@@ -124,7 +124,7 @@
     - kind: 'rename'
       newName: 'B'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 32, 2)],
+      [error(diag.invalidValue, 32, 2)],
     );
   }
 
@@ -135,7 +135,7 @@
 transforms:
 - 'rename'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 25, 8)],
+      [error(diag.invalidValue, 25, 8)],
     );
   }
 
@@ -144,7 +144,7 @@
       '''
 - 'rename'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 0, 11)],
+      [error(diag.invalidValue, 0, 11)],
     );
   }
 
@@ -164,7 +164,7 @@
       name: 'T'
       argumentValue: 'int'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 206, 5)],
+      [error(diag.invalidValue, 206, 5)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_key_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_key_test.dart
index 1d4a2e5..66427ed 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_key_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_key_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -31,7 +31,7 @@
       name: 'a'
       style: required_positional
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 85)],
+      [error(diag.missingKey, 124, 85)],
     );
   }
 
@@ -53,7 +53,7 @@
         kind: 'argument'
         index: 0
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 133)],
+      [error(diag.missingKey, 124, 133)],
     );
   }
 
@@ -75,7 +75,7 @@
         kind: 'argument'
         index: 0
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 132)],
+      [error(diag.missingKey, 124, 132)],
     );
   }
 
@@ -97,7 +97,7 @@
         kind: 'argument'
         index: 0
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 115)],
+      [error(diag.missingKey, 124, 115)],
     );
   }
 
@@ -116,7 +116,7 @@
       index: 0
       name: 'a'
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 56)],
+      [error(diag.missingKey, 124, 56)],
     );
   }
 
@@ -136,7 +136,7 @@
       argumentValue:
         expression: ''
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 85)],
+      [error(diag.missingKey, 124, 85)],
     );
   }
 
@@ -156,7 +156,7 @@
       argumentValue:
         expression: ''
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 84)],
+      [error(diag.missingKey, 124, 84)],
     );
   }
 
@@ -173,7 +173,7 @@
   changes:
     - index: 0
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 9)],
+      [error(diag.missingKey, 124, 9)],
     );
   }
 
@@ -188,7 +188,7 @@
     function: 'f'
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingKey, 69, 16)],
+      [error(diag.missingKey, 69, 16)],
     );
   }
 
@@ -205,7 +205,7 @@
   changes:
     - kind: 'rename'
 ''',
-      [error(TransformSetErrorCode.missingKey, 124, 15)],
+      [error(diag.missingKey, 124, 15)],
     );
   }
 
@@ -220,7 +220,7 @@
     function: 'f'
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingKey, 25, 77)],
+      [error(diag.missingKey, 25, 77)],
     );
   }
 
@@ -233,7 +233,7 @@
   date: 2020-09-14
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingKey, 25, 43)],
+      [error(diag.missingKey, 25, 43)],
     );
   }
 
@@ -248,7 +248,7 @@
     function: 'f'
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingKey, 25, 84)],
+      [error(diag.missingKey, 25, 84)],
     );
   }
 
@@ -257,7 +257,7 @@
       '''
 version: 1
 ''',
-      [error(TransformSetErrorCode.missingKey, 0, 11)],
+      [error(diag.missingKey, 0, 11)],
     );
   }
 
@@ -266,7 +266,7 @@
       '''
 transforms: []
 ''',
-      [error(TransformSetErrorCode.missingKey, 0, 15)],
+      [error(diag.missingKey, 0, 15)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_one_of_multiple_keys_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_one_of_multiple_keys_test.dart
index cc1b39f..a95f909 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_one_of_multiple_keys_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_one_of_multiple_keys_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -26,7 +26,7 @@
     uris: ['test.dart']
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingOneOfMultipleKeys, 69, 22)],
+      [error(diag.missingOneOfMultipleKeys, 69, 22)],
     );
   }
 
@@ -42,7 +42,7 @@
     method: 'm'
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingOneOfMultipleKeys, 69, 38)],
+      [error(diag.missingOneOfMultipleKeys, 69, 38)],
     );
   }
 
@@ -59,7 +59,7 @@
   changes:
     - kind: removeParameter
 ''',
-      [error(TransformSetErrorCode.missingOneOfMultipleKeys, 124, 22)],
+      [error(diag.missingOneOfMultipleKeys, 124, 22)],
     );
   }
 
@@ -74,7 +74,7 @@
     uris: ['test.dart']
     function: 'f'
 ''',
-      [error(TransformSetErrorCode.missingOneOfMultipleKeys, 0, 107)],
+      [error(diag.missingOneOfMultipleKeys, 0, 107)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_template_end_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_template_end_test.dart
index 201b02a..409cd85 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_template_end_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_template_end_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -33,7 +33,7 @@
       argumentValue:
         expression: 'a{% x b'
 ''',
-      [error(TransformSetErrorCode.missingTemplateEnd, 252, 2)],
+      [error(diag.missingTemplateEnd, 252, 2)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_token_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_token_test.dart
index 51ee232..9a1ca2d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_token_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_token_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../code_fragment_parser_test.dart';
@@ -16,34 +16,26 @@
 @reflectiveTest
 class MissingTokenTest extends AbstractCodeFragmentParserTest {
   void test_closeBracket() {
-    assertErrors('arguments[2', [
-      error(TransformSetErrorCode.missingToken, 10, 1),
-    ]);
+    assertErrors('arguments[2', [error(diag.missingToken, 10, 1)]);
   }
 
   void test_empty() {
-    assertErrors('', [error(TransformSetErrorCode.missingToken, 0, 0)]);
+    assertErrors('', [error(diag.missingToken, 0, 0)]);
   }
 
   void test_identifier_afterPeriod() {
-    assertErrors('arguments[2].', [
-      error(TransformSetErrorCode.missingToken, 12, 1),
-    ]);
+    assertErrors('arguments[2].', [error(diag.missingToken, 12, 1)]);
   }
 
   void test_identifier_initial() {
-    assertErrors('', [error(TransformSetErrorCode.missingToken, 0, 0)]);
+    assertErrors('', [error(diag.missingToken, 0, 0)]);
   }
 
   void test_index() {
-    assertErrors('arguments[', [
-      error(TransformSetErrorCode.missingToken, 9, 1),
-    ]);
+    assertErrors('arguments[', [error(diag.missingToken, 9, 1)]);
   }
 
   void test_openBracket() {
-    assertErrors('arguments', [
-      error(TransformSetErrorCode.missingToken, 0, 9),
-    ]);
+    assertErrors('arguments', [error(diag.missingToken, 0, 9)]);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_uri_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_uri_test.dart
index 208485c..d76f0aa 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_uri_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/missing_uri_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -28,7 +28,7 @@
     inClass: 'C'
   changes: []
 ''',
-      [error(TransformSetErrorCode.missingUri, 75, 2)],
+      [error(diag.missingUri, 75, 2)],
     );
   }
 
@@ -45,7 +45,7 @@
     inClass: 'C'
   changes: []
 ''',
-      [error(TransformSetErrorCode.invalidValue, 76, 1)],
+      [error(diag.invalidValue, 76, 1)],
     );
   }
 
@@ -72,7 +72,7 @@
             uris: []
             name: 'String'
 ''',
-      [error(TransformSetErrorCode.missingUri, 307, 2)],
+      [error(diag.missingUri, 307, 2)],
     );
   }
 
@@ -99,7 +99,7 @@
             uris: [3]
             name: 'String'
 ''',
-      [error(TransformSetErrorCode.invalidValue, 308, 1)],
+      [error(diag.invalidValue, 308, 1)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/undefined_variable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/undefined_variable_test.dart
index a511dfc..d07a7e5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/undefined_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/undefined_variable_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -37,7 +37,7 @@
             kind: 'fragment'
             value: 'arguments[0]'
 ''',
-      [error(TransformSetErrorCode.undefinedVariable, 253, 3)],
+      [error(diag.undefinedVariable, 253, 3)],
     );
   }
 
@@ -59,7 +59,7 @@
       argumentValue:
         expression: '{%xyz%}'
 ''',
-      [error(TransformSetErrorCode.undefinedVariable, 253, 3)],
+      [error(diag.undefinedVariable, 253, 3)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unexpected_token_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unexpected_token_test.dart
index e3a5728..1b0cef9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unexpected_token_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unexpected_token_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -30,7 +30,7 @@
       - if: "'x' == 'y' 'z'"
         changes: []
 ''',
-      [error(TransformSetErrorCode.unexpectedTransformSetToken, 184, 3)],
+      [error(diag.unexpectedTransformSetToken, 184, 3)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unknown_accessor_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unknown_accessor_test.dart
index 205ad42..722ed03 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unknown_accessor_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unknown_accessor_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../code_fragment_parser_test.dart';
@@ -17,13 +17,11 @@
 class UnknownAccessorTest extends AbstractCodeFragmentParserTest {
   void test_afterPeriod() {
     assertErrors('arguments[0].argument[1]', [
-      error(TransformSetErrorCode.unknownAccessor, 13, 8),
+      error(diag.unknownAccessor, 13, 8),
     ]);
   }
 
   void test_initial() {
-    assertErrors('argument[0]', [
-      error(TransformSetErrorCode.unknownAccessor, 0, 8),
-    ]);
+    assertErrors('argument[0]', [error(diag.unknownAccessor, 0, 8)]);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_key_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_key_test.dart
index 2de6668..7857944 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_key_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_key_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -31,7 +31,7 @@
       oldName: 'A'
       newName: 'B'
 ''',
-      [error(TransformSetErrorCode.unsupportedKey, 156, 7)],
+      [error(diag.unsupportedKey, 156, 7)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_static_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_static_test.dart
index ab2fe27..3ae5a94 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_static_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_static_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -28,7 +28,7 @@
     static: true
   changes: []
 ''',
-      [error(TransformSetErrorCode.unsupportedStatic, 108, 6)],
+      [error(diag.unsupportedStatic, 108, 6)],
     );
   }
 
@@ -60,7 +60,7 @@
     static: true
   changes: []
 ''',
-      [error(TransformSetErrorCode.unsupportedStatic, 109, 6)],
+      [error(diag.unsupportedStatic, 109, 6)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_version_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_version_test.dart
index 0ee1f1c..a9d513f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_version_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/unsupported_version_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_parser.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -23,7 +23,7 @@
 version: $version
 transforms: []
 ''',
-      [error(TransformSetErrorCode.unsupportedVersion, 9, version.length)],
+      [error(diag.unsupportedVersion, 9, version.length)],
     );
   }
 
@@ -34,7 +34,7 @@
 version: $version
 transforms: []
 ''',
-      [error(TransformSetErrorCode.unsupportedVersion, 9, 1)],
+      [error(diag.unsupportedVersion, 9, 1)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/wrong_token_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/wrong_token_test.dart
index c552114..f03b45f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/wrong_token_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/wrong_token_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../code_fragment_parser_test.dart';
@@ -16,34 +16,28 @@
 @reflectiveTest
 class WrongTokenTest extends AbstractCodeFragmentParserTest {
   void test_closeBracket() {
-    assertErrors('arguments[2 3', [
-      error(TransformSetErrorCode.wrongToken, 12, 1),
-    ]);
+    assertErrors('arguments[2 3', [error(diag.wrongToken, 12, 1)]);
   }
 
   void test_identifier_afterPeriod() {
-    assertErrors('arguments[2].1', [
-      error(TransformSetErrorCode.wrongToken, 13, 1),
-    ]);
+    assertErrors('arguments[2].1', [error(diag.wrongToken, 13, 1)]);
   }
 
   void test_identifier_initial() {
-    assertErrors('1', [error(TransformSetErrorCode.wrongToken, 0, 1)]);
+    assertErrors('1', [error(diag.wrongToken, 0, 1)]);
   }
 
   void test_index() {
-    assertErrors('arguments[.', [
-      error(TransformSetErrorCode.wrongToken, 10, 1),
-    ]);
+    assertErrors('arguments[.', [error(diag.wrongToken, 10, 1)]);
   }
 
   void test_openBracket() {
-    assertErrors('arguments.', [error(TransformSetErrorCode.wrongToken, 9, 1)]);
+    assertErrors('arguments.', [error(diag.wrongToken, 9, 1)]);
   }
 
   void test_period() {
     assertErrors('arguments[2] typeArguments', [
-      error(TransformSetErrorCode.wrongToken, 13, 13),
+      error(diag.wrongToken, 13, 13),
     ]);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/yaml_syntax_error_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/yaml_syntax_error_test.dart
index 413cc80..a7c1630 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/yaml_syntax_error_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/diagnostics/yaml_syntax_error_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.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
+import 'package:analysis_server/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../transform_set_parser_test_support.dart';
@@ -20,7 +20,7 @@
       '''
 {
 ''',
-      [error(TransformSetErrorCode.yamlSyntaxError, 2, 0)],
+      [error(diag.yamlSyntaxError, 2, 0)],
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
index 7245e2a..d69efef 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_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:analysis_server/src/diagnostic.dart' as diag;
 import 'package:analysis_server/src/services/correction/fix/data_driven/accessor.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/add_type_parameter.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/change.dart';
@@ -14,7 +15,6 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/rename.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/replaced_by.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
 import 'package:analysis_server/src/services/refactoring/framework/formal_parameter.dart';
 import 'package:test/test.dart';
@@ -476,7 +476,7 @@
       argumentValue:
         expression: "'newValue'"
 ''',
-      [error(TransformSetErrorCode.missingKey, 145, 98)],
+      [error(diag.missingKey, 145, 98)],
     );
   }
 
@@ -498,7 +498,7 @@
       argumentValue:
         expression: "'newValue'"
 ''',
-      [error(TransformSetErrorCode.conflictingKey, 195, 5)],
+      [error(diag.conflictingKey, 195, 5)],
     );
   }
 
@@ -561,7 +561,7 @@
             kind: 'fragment'
             value: args
 ''',
-      [error(TransformSetErrorCode.unknownAccessor, 361, 4)],
+      [error(diag.unknownAccessor, 361, 4)],
     );
   }
 
@@ -689,7 +689,7 @@
 version: 1
 transforms:
 ''',
-      [error(TransformSetErrorCode.invalidValue, 21, 0)],
+      [error(diag.invalidValue, 21, 0)],
     );
     expect(result, null);
   }
@@ -699,7 +699,7 @@
       '''
 [
 ''',
-      [error(TransformSetErrorCode.yamlSyntaxError, 2, 0)],
+      [error(diag.yamlSyntaxError, 2, 0)],
     );
     expect(result, null);
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart
index 5733b26..70ae5aa 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor_map_test.dart
@@ -51,8 +51,7 @@
     var lintCode = LintCode(
       'test_rule',
       'Test rule.',
-      // ignore: deprecated_member_use
-      uniqueNameCheck: 'LintCode.test_rule',
+      uniqueName: 'LintCode.test_rule',
     );
     expect(registeredFixGenerators.lintProducers[lintCode], null);
     registeredFixGenerators.registerFixForLint(lintCode, generator);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/ignore_diagnostic_test.dart b/pkg/analysis_server/test/src/services/correction/fix/ignore_diagnostic_test.dart
index e70f8bb..6d337d6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/ignore_diagnostic_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/ignore_diagnostic_test.dart
@@ -23,7 +23,10 @@
   FixKind get kind => ignoreErrorAnalysisFileKind;
 
   Future<void> test_addFixToExistingErrorMap() async {
-    createAnalysisOptionsFile(errors: {'unused_label': 'ignore'});
+    createAnalysisOptionsFile(
+      errors: {'unused_label': 'ignore'},
+      propagateLinterExceptions: false,
+    );
 
     await resolveTestCode('''
 void f() {
@@ -107,6 +110,7 @@
       // To create a valid `analyzer` label, we add a `cannot-ignore` label.
       // This also  implicitly tests when unrelated label is in `cannot-ignore`
       cannotIgnore: ['unused_label'],
+      propagateLinterExceptions: false,
     );
 
     await resolveTestCode('''
@@ -134,12 +138,45 @@
     await assertNoFix();
   }
 
+  Future<void> test_noFixWhenLintIsIgnored() async {
+    createAnalysisOptionsFile(
+      errors: {LintNames.always_specify_types: 'ignore'},
+      lints: [LintNames.always_specify_types],
+    );
+
+    await resolveTestCode('''
+void f() {
+  var a = 1;
+  print(a);
+}
+''');
+    await assertNoFix();
+  }
+
+  Future<void> test_noFixWhenLintIsUnignorable() async {
+    createAnalysisOptionsFile(
+      cannotIgnore: [LintNames.always_specify_types],
+      lints: [LintNames.always_specify_types],
+    );
+
+    await resolveTestCode('''
+void f() {
+  var a = 1;
+  print(a);
+}
+''');
+    await assertNoFix();
+  }
+
   Future<void> test_onlyIncludeLabel() async {
     // This overwrites the file created by `super.setUp` method.
     // Having a newline is important because yaml_edit copies existing
     // newlines and we want to test the current platforms EOLs.
     // The content is normalized in newFile().
-    createAnalysisOptionsFile(includes: ['package:lints/recommended.yaml']);
+    createAnalysisOptionsFile(
+      includes: ['package:lints/recommended.yaml'],
+      propagateLinterExceptions: false,
+    );
 
     await resolveTestCode('''
   void f() {
@@ -203,6 +240,23 @@
 ''');
   }
 
+  Future<void> test_docCommentsAtStart() async {
+    await resolveTestCode('''
+/// some comment
+void f() {
+  var a = 1;
+}
+''');
+    await assertHasFix('''
+// ignore_for_file: unused_local_variable
+
+/// some comment
+void f() {
+  var a = 1;
+}
+''');
+  }
+
   Future<void> test_existingIgnores() async {
     await resolveTestCode('''
 // Copyright header.
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_hide_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_hide_test.dart
index 3ff4857..e251256 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_hide_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_hide_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -42,7 +42,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass &&
+        return error.diagnosticCode == diag.undefinedClass &&
             testCode.indexOf('B b') == error.offset;
       },
     );
@@ -54,7 +54,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass &&
+        return error.diagnosticCode == diag.undefinedClass &&
             testCode.indexOf('C c') == error.offset;
       },
     );
@@ -89,7 +89,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedMethod;
+        return error.diagnosticCode == diag.undefinedMethod;
       },
     );
   }
@@ -123,7 +123,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedMethod;
+        return error.diagnosticCode == diag.undefinedMethod;
       },
     );
   }
@@ -162,7 +162,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedOperator;
+        return error.diagnosticCode == diag.undefinedOperator;
       },
     );
   }
@@ -197,7 +197,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass &&
+        return error.diagnosticCode == diag.undefinedClass &&
             testCode.indexOf('B?') == error.offset;
       },
     );
@@ -252,8 +252,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-                CompileTimeErrorCode.undefinedIdentifier &&
+        return error.diagnosticCode == diag.undefinedIdentifier &&
             testCode.indexOf('E.') == error.offset;
       },
     );
@@ -265,8 +264,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-                CompileTimeErrorCode.undefinedIdentifier &&
+        return error.diagnosticCode == diag.undefinedIdentifier &&
             testCode.indexOf("a')") == error.offset;
       },
     );
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart
index ca80b9e..b90338a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_prefix_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -91,7 +91,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass;
+        return error.diagnosticCode == diag.undefinedClass;
       },
     );
   }
@@ -119,7 +119,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass;
+        return error.diagnosticCode == diag.undefinedClass;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
index 65e6d46..1cb4db15 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_project_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
@@ -711,7 +711,7 @@
 void f() {
   Test();
 }
-''', filter: (e) => e.diagnosticCode == CompileTimeErrorCode.undefinedFunction);
+''', filter: (e) => e.diagnosticCode == diag.undefinedFunction);
   }
 
   Future<void> test_lib() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
index 3de59c9..8e0097b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -307,7 +307,7 @@
 void f() {}
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedIdentifier;
+        return error.diagnosticCode == diag.undefinedIdentifier;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart
index f40084d..fcaf22a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_show_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -42,7 +42,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass &&
+        return error.diagnosticCode == diag.undefinedClass &&
             testCode.indexOf('B') == error.offset;
       },
     );
@@ -54,7 +54,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass &&
+        return error.diagnosticCode == diag.undefinedClass &&
             testCode.indexOf('C') == error.offset;
       },
     );
@@ -88,7 +88,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedMethod;
+        return error.diagnosticCode == diag.undefinedMethod;
       },
     );
   }
@@ -121,7 +121,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedMethod;
+        return error.diagnosticCode == diag.undefinedMethod;
       },
     );
   }
@@ -159,7 +159,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedOperator;
+        return error.diagnosticCode == diag.undefinedOperator;
       },
     );
   }
@@ -193,7 +193,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == CompileTimeErrorCode.undefinedClass &&
+        return error.diagnosticCode == diag.undefinedClass &&
             testCode.indexOf('B') == error.offset;
       },
     );
@@ -247,8 +247,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-                CompileTimeErrorCode.undefinedIdentifier &&
+        return error.diagnosticCode == diag.undefinedIdentifier &&
             testCode.indexOf('E') == error.offset;
       },
     );
@@ -260,8 +259,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-                CompileTimeErrorCode.undefinedIdentifier &&
+        return error.diagnosticCode == diag.undefinedIdentifier &&
             testCode.indexOf("a')") == error.offset;
       },
     );
diff --git a/pkg/analysis_server/test/src/services/correction/fix/insert_body_test.dart b/pkg/analysis_server/test/src/services/correction/fix/insert_body_test.dart
index 6b69ebc..6f730c0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/insert_body_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/insert_body_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -122,12 +122,8 @@
 enum E
 ''');
     // TODO(pq): consider special casing enums to improve the insertion offset
-    await assertHasFix(
-      '''
+    await assertHasFix('''
 enum E
- {}''',
-      filter: (error) =>
-          error.diagnosticCode != CompileTimeErrorCode.enumWithoutConstants,
-    );
+ {}''', filter: (error) => error.diagnosticCode != diag.enumWithoutConstants);
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/insert_on_keyword_test.dart b/pkg/analysis_server/test/src/services/correction/fix/insert_on_keyword_test.dart
index 37563b7..292c04b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/insert_on_keyword_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/insert_on_keyword_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test/expect.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -25,7 +25,7 @@
 extension String {}
 ''');
     var fixes = await getFixesForFirst(
-      (e) => e.diagnosticCode == ParserErrorCode.expectedToken,
+      (e) => e.diagnosticCode == diag.expectedToken,
     );
     expect(fixes, hasLength(1));
     assertProduces(fixes.first, r'''
@@ -49,7 +49,7 @@
 extension on int {}
 ''',
       filter: (error) {
-        return error.diagnosticCode == ParserErrorCode.expectedToken;
+        return error.diagnosticCode == diag.expectedToken;
       },
     );
   }
@@ -90,7 +90,7 @@
 extension on List<int> {}
 ''',
       filter: (error) {
-        return error.diagnosticCode == ParserErrorCode.expectedToken;
+        return error.diagnosticCode == diag.expectedToken;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
index ac8a01f..751324a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
@@ -3,7 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -182,7 +183,7 @@
 f() {
   var l = [ for (final i in [1, 2]) i + 3 ];
 }
-''', filter: (e) => e.diagnosticCode != WarningCode.unusedLocalVariable);
+''', filter: (e) => e.diagnosticCode != diag.unusedLocalVariable);
   }
 
   Future<void> test_listPattern() async {
@@ -195,7 +196,7 @@
 f() {
   for (final [i, j] in [[1, 2]]) { }
 }
-''', filter: (e) => e.diagnosticCode != WarningCode.unusedLocalVariable);
+''', filter: (e) => e.diagnosticCode != diag.unusedLocalVariable);
   }
 
   Future<void> test_mapPattern() async {
@@ -208,7 +209,7 @@
 f() {
   for (final {'i' : j} in [{'i' : 1}]) { }
 }
-''', filter: (e) => e.diagnosticCode != WarningCode.unusedLocalVariable);
+''', filter: (e) => e.diagnosticCode != diag.unusedLocalVariable);
   }
 
   Future<void> test_noType() async {
@@ -248,7 +249,7 @@
 f() {
   for (final A(:a) in [A(1)]) { }
 }
-''', filter: (e) => e.diagnosticCode != WarningCode.unusedLocalVariable);
+''', filter: (e) => e.diagnosticCode != diag.unusedLocalVariable);
   }
 
   Future<void> test_recordPattern() async {
@@ -261,7 +262,7 @@
 f() {
   for (final (i, j) in [(1, 2)]) { }
 }
-''', filter: (e) => e.diagnosticCode != WarningCode.unusedLocalVariable);
+''', filter: (e) => e.diagnosticCode != diag.unusedLocalVariable);
   }
 
   Future<void> test_type() async {
@@ -464,6 +465,13 @@
 @reflectiveTest
 class PreferFinalParametersBulkTest extends BulkFixProcessorTest {
   @override
+  List<String> get experiments => super.experiments
+      .where(
+        (experiment) => experiment != Feature.primary_constructors.enableString,
+      )
+      .toList();
+
+  @override
   String get lintCode => LintNames.prefer_final_parameters;
 
   Future<void> test_singleFile() async {
@@ -485,6 +493,13 @@
 @reflectiveTest
 class PreferFinalParametersTest extends FixProcessorLintTest {
   @override
+  List<String> get experiments => super.experiments
+      .where(
+        (experiment) => experiment != Feature.primary_constructors.enableString,
+      )
+      .toList();
+
+  @override
   FixKind get kind => DartFixKind.makeFinal;
 
   @override
diff --git a/pkg/analysis_server/test/src/services/correction/fix/merge_combinators_test.dart b/pkg/analysis_server/test/src/services/correction/fix/merge_combinators_test.dart
index 3710f4f..b6da3d0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/merge_combinators_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/merge_combinators_test.dart
@@ -5,7 +5,7 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -34,7 +34,7 @@
         DartFixKind.mergeCombinatorsHideShow,
       ],
       filter: (error) {
-        return error.diagnosticCode == WarningCode.multipleCombinators;
+        return error.diagnosticCode == diag.multipleCombinators;
       },
     );
   }
@@ -49,7 +49,7 @@
         DartFixKind.mergeCombinatorsShowHide,
       ],
       filter: (error) {
-        return error.diagnosticCode == WarningCode.multipleCombinators;
+        return error.diagnosticCode == diag.multipleCombinators;
       },
     );
   }
@@ -58,7 +58,7 @@
 @reflectiveTest
 class MergeHideUsingHideTest extends _MergeCombinatorTest {
   @override
-  DiagnosticCode get diagnosticCode => WarningCode.multipleCombinators;
+  DiagnosticCode get diagnosticCode => diag.multipleCombinators;
 
   @override
   FixKind get kind => DartFixKind.mergeCombinatorsHideHide;
@@ -170,7 +170,7 @@
 @reflectiveTest
 class MergeHideUsingShowTest extends _MergeCombinatorTest {
   @override
-  DiagnosticCode get diagnosticCode => WarningCode.multipleCombinators;
+  DiagnosticCode get diagnosticCode => diag.multipleCombinators;
 
   @override
   FixKind get kind => DartFixKind.mergeCombinatorsShowHide;
@@ -282,7 +282,7 @@
 @reflectiveTest
 class MergeShowUsingHideTest extends _MergeCombinatorTest {
   @override
-  DiagnosticCode get diagnosticCode => WarningCode.multipleCombinators;
+  DiagnosticCode get diagnosticCode => diag.multipleCombinators;
 
   @override
   FixKind get kind => DartFixKind.mergeCombinatorsHideShow;
@@ -422,7 +422,7 @@
 @reflectiveTest
 class MergeShowUsingShowTest extends _MergeCombinatorTest {
   @override
-  DiagnosticCode get diagnosticCode => WarningCode.multipleCombinators;
+  DiagnosticCode get diagnosticCode => diag.multipleCombinators;
 
   @override
   FixKind get kind => DartFixKind.mergeCombinatorsShowShow;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart b/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart
index 42ee846..bb9e87a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/organize_imports_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -96,8 +96,7 @@
   bool Function(Diagnostic diagnostic) get _firstUnusedShownNameErrorFilter {
     var firstError = true;
     return (Diagnostic diagnostic) {
-      if (firstError &&
-          diagnostic.diagnosticCode == WarningCode.unusedShownName) {
+      if (firstError && diagnostic.diagnosticCode == diag.unusedShownName) {
         firstError = false;
         return true;
       }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart
index 3cca699..1354729 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_abstract_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,7 +28,7 @@
   abstract void m2() {}
 }
 ''');
-    await assertHasFixAllFix(ParserErrorCode.abstractClassMember, '''
+    await assertHasFixAllFix(diag.abstractClassMember, '''
 class MyClass {
   void m1() {}
   void m2() {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart
index 3ed8945..2c54bf5 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_comparison_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -22,7 +22,7 @@
 }
 
 bool _ignoreDeadCode(Diagnostic diagnostic) =>
-    diagnostic.diagnosticCode != WarningCode.deadCode;
+    diagnostic.diagnosticCode != diag.deadCode;
 
 @reflectiveTest
 class RemoveComparisonTest extends FixProcessorTest {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_const_test.dart
index 98e7a5f..f5d0fed 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_const_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -103,8 +103,7 @@
 ''');
     await assertNoFix(
       filter: (error) =>
-          error.diagnosticCode ==
-          CompileTimeErrorCode.constConstructorParamTypeMismatch,
+          error.diagnosticCode == diag.constConstructorParamTypeMismatch,
     );
   }
 
@@ -208,8 +207,7 @@
 var v = [const A(), B()];
 ''',
       // TODO(FMorschel): CONST_WITH_NON_CONST should not be probably triggered
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantListElement,
+      filter: (error) => error.diagnosticCode == diag.nonConstantListElement,
     );
   }
 
@@ -235,7 +233,7 @@
 ''',
       filter: (error) =>
           error.offset == parsedTestCode.positions[0].offset &&
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantListElement,
+          error.diagnosticCode == diag.nonConstantListElement,
     );
     await assertHasFix(
       r'''
@@ -249,7 +247,7 @@
 ''',
       filter: (error) =>
           error.offset == parsedTestCode.positions[1].offset &&
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantListElement,
+          error.diagnosticCode == diag.nonConstantListElement,
     );
   }
 
@@ -275,7 +273,7 @@
 ''',
       filter: (error) =>
           error.offset == parsedTestCode.position.offset &&
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantListElement,
+          error.diagnosticCode == diag.nonConstantListElement,
     );
   }
 
@@ -298,8 +296,7 @@
       // TODO(FMorschel): CONST_WITH_NON_CONST and
       // CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE should not be triggered and
       // NON_CONSTANT_LIST_ELEMENT should have the position for the element
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantListElement,
+      filter: (error) => error.diagnosticCode == diag.nonConstantListElement,
     );
   }
 }
@@ -452,8 +449,7 @@
 var v = {1: const A(), 2: B()};
 ''',
       // TODO(FMorschel): CONST_WITH_NON_CONST should not be probably triggered
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantMapValue,
+      filter: (error) => error.diagnosticCode == diag.nonConstantMapValue,
     );
   }
 
@@ -474,8 +470,7 @@
 final v = {1: const A(), 2: A.nonConst()};
 ''',
       // TODO(FMorschel): CONST_WITH_NON_CONST should not be probably triggered
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantMapValue,
+      filter: (error) => error.diagnosticCode == diag.nonConstantMapValue,
     );
   }
 }
@@ -537,8 +532,7 @@
 var v = {const A(), B()};
 ''',
       // TODO(FMorschel): CONST_WITH_NON_CONST should not be probably triggered
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantSetElement,
+      filter: (error) => error.diagnosticCode == diag.nonConstantSetElement,
     );
   }
 
@@ -559,8 +553,7 @@
 final v = {const A(), A.nonConst()};
 ''',
       // TODO(FMorschel): CONST_WITH_NON_CONST should not be probably triggered
-      filter: (error) =>
-          error.diagnosticCode == CompileTimeErrorCode.nonConstantSetElement,
+      filter: (error) => error.diagnosticCode == diag.nonConstantSetElement,
     );
   }
 }
@@ -731,7 +724,7 @@
 var x = B(a1: A(), b: const [0], a2: A());
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst &&
+        return e.diagnosticCode == diag.constWithNonConst &&
             e.offset == testCode.indexOf('A()');
       },
     );
@@ -771,7 +764,7 @@
 var x = [A(), if (true) const [0] else const [1]];
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst;
+        return e.diagnosticCode == diag.constWithNonConst;
       },
     );
   }
@@ -797,7 +790,7 @@
 var x = [A(), const B(), const B(), A()];
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst &&
+        return e.diagnosticCode == diag.constWithNonConst &&
             e.offset == testCode.indexOf('A()');
       },
     );
@@ -816,7 +809,7 @@
 var x = [A(), const [0], const [1]];
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst;
+        return e.diagnosticCode == diag.constWithNonConst;
       },
     );
   }
@@ -835,7 +828,7 @@
 var x = [A(), ...const [0], ...const [1]];
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst;
+        return e.diagnosticCode == diag.constWithNonConst;
       },
     );
   }
@@ -853,7 +846,7 @@
 var x = {0: A(), ...const {1: 2}, ...const {3: 4}};
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst;
+        return e.diagnosticCode == diag.constWithNonConst;
       },
     );
   }
@@ -871,7 +864,7 @@
 var x = {A(), ...const {0}, ...const {1}};
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst;
+        return e.diagnosticCode == diag.constWithNonConst;
       },
     );
   }
@@ -889,7 +882,7 @@
 final x = A(), y = const [0], z = A();
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst &&
+        return e.diagnosticCode == diag.constWithNonConst &&
             e.offset == testCode.lastIndexOf('A()');
       },
     );
@@ -908,7 +901,7 @@
 final Object x = A(), y = const [0];
 ''',
       filter: (e) {
-        return e.diagnosticCode == CompileTimeErrorCode.constWithNonConst;
+        return e.diagnosticCode == diag.constWithNonConst;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_extends_clause_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_extends_clause_test.dart
index 4aef9c5..32b5753 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_extends_clause_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_extends_clause_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -27,14 +27,11 @@
 mixin class B extends A {}
 mixin class C extends A {}
 ''');
-    await assertHasFixAllFix(
-      CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-      '''
+    await assertHasFixAllFix(diag.mixinClassDeclarationExtendsNotObject, '''
 class A {}
 mixin class B {}
 mixin class C {}
-''',
-    );
+''');
   }
 }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart
index 22bc4a0..7f872f4 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_if_null_operator_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -21,7 +21,7 @@
 }
 
 bool _ignoreDeadCode(Diagnostic diagnostic) =>
-    diagnostic.diagnosticCode != WarningCode.deadCode;
+    diagnostic.diagnosticCode != diag.deadCode;
 
 @reflectiveTest
 class DeadNullAwareAssignmentExpressionTest extends FixProcessorTest {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_lexeme_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_lexeme_test.dart
index 57e3dac..adde4f9 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_lexeme_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_lexeme_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -36,7 +36,7 @@
 
 augment final class A {}
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.augmentationModifierExtra, '''
+    await assertHasFixAllFix(diag.augmentationModifierExtra, '''
 part of 'a.dart';
 
 augment class A {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_declaration_clause_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_declaration_clause_test.dart
index f5793a4..8402e42 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_declaration_clause_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_name_from_declaration_clause_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -331,7 +331,7 @@
 final class C {}
 ''',
       filter: (error) =>
-          error.diagnosticCode == FfiCode.subtypeOfStructClassInWith,
+          error.diagnosticCode == diag.subtypeOfStructClassInWith,
     );
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_on_clause_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_on_clause_test.dart
index d7962d3..f41bc4e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_on_clause_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_on_clause_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -35,16 +35,13 @@
 
 augment extension E on num { }
 ''');
-    await assertHasFixAllFix(
-      ParserErrorCode.extensionAugmentationHasOnClause,
-      '''
+    await assertHasFixAllFix(diag.extensionAugmentationHasOnClause, '''
 part of 'a.dart';
 
 augment extension E { }
 
 augment extension E { }
-''',
-    );
+''');
   }
 }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart
index 4f9878b..8de6e2b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_cast_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -57,7 +57,7 @@
   }
 }
 ''');
-    await assertHasFixAllFix(WarningCode.unnecessaryCast, '''
+    await assertHasFixAllFix(diag.unnecessaryCast, '''
 void f(Object p, Object q) {
   if (p is String) {
     var v = p;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_final_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_final_test.dart
index 56803fe..19dda0b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_final_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unnecessary_final_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -54,7 +54,7 @@
   int v2;
 }
 ''');
-    await assertHasFixAllFix(WarningCode.unnecessaryFinal, '''
+    await assertHasFixAllFix(diag.unnecessaryFinal, '''
 class A {
   A(this.v1, this.v2);
   int v1;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
index c4449b0..64291be 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_clause_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,7 +31,7 @@
   }
 }
 ''');
-    await assertHasFixAllFix(WarningCode.unusedCatchClause, '''
+    await assertHasFixAllFix(diag.unusedCatchClause, '''
 void f() {
   try {
     throw 42;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
index e0920e3..8bee848 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_catch_stack_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,7 +31,7 @@
   }
 }
 ''');
-    await assertHasFixAllFix(WarningCode.unusedCatchStack, '''
+    await assertHasFixAllFix(diag.unusedCatchStack, '''
 void f() {
   try {
     throw 42;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
index 2ce3fd7..f9140df 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_element_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -176,12 +176,8 @@
     await resolveTestCode(r'''
 enum _MyEnum {A, B, C}
 ''');
-    await assertHasFix(
-      r'''
-''',
-      filter: (diagnostic) =>
-          diagnostic.diagnosticCode == WarningCode.unusedElement,
-    );
+    await assertHasFix(r'''
+''', filter: (diagnostic) => diagnostic.diagnosticCode == diag.unusedElement);
   }
 
   Future<void> test_functionLocal_notUsed_noReference() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
index 809afc0..ea5d929 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_import_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -94,7 +94,7 @@
 import 'dart:async';
 void f() {}
 ''');
-    await assertHasFixAllFix(WarningCode.unusedImport, '''
+    await assertHasFixAllFix(diag.unusedImport, '''
 void f() {}
 ''');
   }
@@ -109,7 +109,7 @@
 
 void f() {}
 ''');
-    await assertHasFixAllFix(WarningCode.unusedImport, '''
+    await assertHasFixAllFix(diag.unusedImport, '''
 import 'dart:math' as math;
 
 var tau = math.pi * 2;
@@ -126,7 +126,7 @@
 import 'dart:math'; import 'dart:math'; import 'dart:math';
 void f() {}
 ''');
-    await assertHasFixAllFix(WarningCode.unusedImport, '''
+    await assertHasFixAllFix(diag.unusedImport, '''
 
 void f() {}
 ''');
@@ -137,7 +137,7 @@
 import 'dart:math'; import 'dart:math'; import 'dart:math';
 void f() {}
 ''');
-    await assertHasFixAllFix(WarningCode.unusedImport, '''
+    await assertHasFixAllFix(diag.unusedImport, '''
 import 'dart:math';
 void f() {}
 ''');
@@ -150,7 +150,7 @@
 import 'dart:math';
 void f() {}
 ''');
-    await assertHasFixAllFix(WarningCode.unusedImport, '''
+    await assertHasFixAllFix(diag.unusedImport, '''
 void f() {}
 ''');
   }
@@ -213,7 +213,7 @@
 ''');
 
     await assertHasFix('''
-''', filter: (e) => e.diagnosticCode == WarningCode.unusedImport);
+''', filter: (e) => e.diagnosticCode == diag.unusedImport);
   }
 
   Future<void> test_severalLines() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart
index 2215206..ad250fc 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_unused_local_variable_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -264,14 +264,10 @@
   var v = 1;
 }
 ''');
-    await assertHasFix(
-      r'''
+    await assertHasFix(r'''
 void f() {
 }
-''',
-      filter: (e) =>
-          e.diagnosticCode != CompileTimeErrorCode.referencedBeforeDeclaration,
-    );
+''', filter: (e) => e.diagnosticCode != diag.referencedBeforeDeclaration);
   }
 }
 
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_var_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_var_test.dart
index 6f3224f..88a70b0 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_var_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_var_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -75,7 +75,7 @@
 typedef F = Function();
 ''',
       filter: (error) {
-        return error.diagnosticCode == ParserErrorCode.varReturnType;
+        return error.diagnosticCode == diag.varReturnType;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
index 0c6c8e1..dfa2ff7 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,7 +28,7 @@
   boolean w;
 }
 ''');
-    await assertHasFixAllFix(CompileTimeErrorCode.undefinedClassBoolean, '''
+    await assertHasFixAllFix(diag.undefinedClassBoolean, '''
 void f() {
   bool v;
   bool w;
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 e26f45c..3f8bbb4 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,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:linter/src/lint_names.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -139,8 +139,7 @@
 Future<List<int>> f() async {}
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.illegalAsyncReturnType;
+        return error.diagnosticCode == diag.illegalAsyncReturnType;
       },
     );
   }
@@ -165,8 +164,7 @@
 al.Future<int> f() async {}
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.illegalAsyncReturnType;
+        return error.diagnosticCode == diag.illegalAsyncReturnType;
       },
     );
   }
@@ -195,8 +193,7 @@
 Future<int> f() async {}
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.illegalAsyncReturnType;
+        return error.diagnosticCode == diag.illegalAsyncReturnType;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_stream_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_stream_test.dart
index d98e106..a117b38 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_stream_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_stream_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,8 +31,7 @@
 Stream<List<int>> f() async* {}
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.illegalAsyncGeneratorReturnType;
+        return error.diagnosticCode == diag.illegalAsyncGeneratorReturnType;
       },
     );
   }
@@ -57,8 +56,7 @@
 al.Stream<int> f() async* {}
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.illegalAsyncGeneratorReturnType;
+        return error.diagnosticCode == diag.illegalAsyncGeneratorReturnType;
       },
     );
   }
@@ -74,8 +72,7 @@
 Stream<int> f() async* {}
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.illegalAsyncGeneratorReturnType;
+        return error.diagnosticCode == diag.illegalAsyncGeneratorReturnType;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
index 520693c..03bb207 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_return_type_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -92,8 +92,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.returnOfInvalidTypeFromFunction;
+        return error.diagnosticCode == diag.returnOfInvalidTypeFromFunction;
       },
     );
   }
@@ -136,8 +135,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.returnOfInvalidTypeFromMethod;
+        return error.diagnosticCode == diag.returnOfInvalidTypeFromMethod;
       },
     );
   }
@@ -220,8 +218,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.returnOfInvalidTypeFromFunction;
+        return error.diagnosticCode == diag.returnOfInvalidTypeFromFunction;
       },
     );
   }
@@ -249,8 +246,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode ==
-            CompileTimeErrorCode.returnOfInvalidTypeFromMethod;
+        return error.diagnosticCode == diag.returnOfInvalidTypeFromMethod;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart
index 3a17868..3ef8d3d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_var_with_dynamic_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -33,7 +33,7 @@
 }
 ''',
       filter: (error) {
-        return error.diagnosticCode == ParserErrorCode.varAsTypeName;
+        return error.diagnosticCode == diag.varAsTypeName;
       },
     );
   }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart
index c15cf3e6..c7ddc46 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_eq_eq_null_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,7 +28,7 @@
   q is Null;
 }
 ''');
-    await assertHasFixAllFix(WarningCode.typeCheckIsNull, '''
+    await assertHasFixAllFix(diag.typeCheckIsNull, '''
 void f(p, q) {
   p == null;
   q == null;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart
index 8db9dd5..5a8e43a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/use_not_eq_null_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/fix.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,7 +28,7 @@
   q is! Null;
 }
 ''');
-    await assertHasFixAllFix(WarningCode.typeCheckIsNotNull, '''
+    await assertHasFixAllFix(diag.typeCheckIsNotNull, '''
 void f(p, q) {
   p != null;
   q != null;
diff --git a/pkg/analysis_server/test/src/services/refactoring/move_top_level_to_file_test.dart b/pkg/analysis_server/test/src/services/refactoring/move_top_level_to_file_test.dart
index 675baf5..6de1f22 100644
--- a/pkg/analysis_server/test/src/services/refactoring/move_top_level_to_file_test.dart
+++ b/pkg/analysis_server/test/src/services/refactoring/move_top_level_to_file_test.dart
@@ -1379,6 +1379,33 @@
     await expectNoCodeActionWithTitle(simpleClassRefactorTitle);
   }
 
+  Future<void> test_sealedClass_enumImplements() async {
+    var originalSource = '''
+sealed class [!Either!] {}
+
+enum Left implements Either { v }
+enum Right implements Either { v }
+
+class Neither {}
+''';
+
+    var expected = '''
+>>>>>>>>>> lib/either.dart created
+sealed class Either {}
+
+enum Left implements Either { v }
+enum Right implements Either { v }
+>>>>>>>>>> lib/main.dart
+
+class Neither {}
+''';
+    await _multipleDeclarations(
+      originalSource: originalSource,
+      expected: expected,
+      count: 3,
+    );
+  }
+
   Future<void> test_sealedClass_extends() async {
     var originalSource = '''
 sealed class [!Either!] {}
@@ -1502,12 +1529,12 @@
     );
   }
 
-  Future<void> test_sealedClass_implements() async {
+  Future<void> test_sealedClass_mixinImplements() async {
     var originalSource = '''
 sealed class [!Either!] {}
 
-class Left implements Either {}
-class Right implements Either {}
+mixin Left implements Either {}
+mixin Right implements Either {}
 
 class Neither {}
 ''';
@@ -1516,8 +1543,8 @@
 >>>>>>>>>> lib/either.dart created
 sealed class Either {}
 
-class Left implements Either {}
-class Right implements Either {}
+mixin Left implements Either {}
+mixin Right implements Either {}
 >>>>>>>>>> lib/main.dart
 
 class Neither {}
@@ -1562,6 +1589,30 @@
     );
   }
 
+  Future<void> test_single_class_atName_firstDartDoc() async {
+    var originalSource = '''
+///
+class ^A {}
+
+class B {}
+''';
+    var declarationName = 'A';
+
+    var expected = '''
+>>>>>>>>>> lib/a.dart created
+///
+class A {}
+>>>>>>>>>> lib/main.dart
+
+class B {}
+''';
+    await _singleDeclaration(
+      originalSource: originalSource,
+      expected: expected,
+      declarationName: declarationName,
+    );
+  }
+
   Future<void> test_single_class_withTypeParameters() async {
     var originalSource = '''
 class A {}
@@ -1918,7 +1969,41 @@
     );
   }
 
-  Future<void> test_single_variable() async {
+  Future<void> test_topLevelVariable_multi_atName() async {
+    var originalSource = '''
+var ^a = 1, b = 2;
+''';
+    addTestSource(originalSource);
+    await initializeServer();
+    await expectNoCodeActionWithTitle(null);
+  }
+
+  Future<void> test_topLevelVariable_multi_whole() async {
+    var originalSource = '''
+class A {}
+
+[!var a = 1, b = 2;!]
+
+class B {}
+''';
+
+    var expected = '''
+>>>>>>>>>> lib/main.dart
+class A {}
+
+class B {}
+>>>>>>>>>> lib/newFile.dart created
+var a = 1, b = 2;
+''';
+
+    await _multipleDeclarations(
+      originalSource: originalSource,
+      expected: expected,
+      count: 2,
+    );
+  }
+
+  Future<void> test_topLevelVariable_single_atName() async {
     var originalSource = '''
 class A {}
 
@@ -1944,30 +2029,6 @@
     );
   }
 
-  Future<void> test_single_variable_firstDartDoc() async {
-    var originalSource = '''
-///
-class ^A {}
-
-class B {}
-''';
-    var declarationName = 'A';
-
-    var expected = '''
->>>>>>>>>> lib/a.dart created
-///
-class A {}
->>>>>>>>>> lib/main.dart
-
-class B {}
-''';
-    await _singleDeclaration(
-      originalSource: originalSource,
-      expected: expected,
-      declarationName: declarationName,
-    );
-  }
-
   Future<void> _multipleDeclarations({
     required String originalSource,
     required int count,
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 9fbf4f1..023e285 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
@@ -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:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analysis_server/src/utilities/extensions/range_factory.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
@@ -39,7 +40,7 @@
 
   void _assertClassMemberRanges(Map<int, SourceRange> expectedRanges) {
     var class_ = findNode.classDeclaration('class');
-    var list = class_.members;
+    var list = class_.members2;
     for (var entry in expectedRanges.entries) {
       expect(
         range.nodeWithComments(testUnit.lineInfo, list[entry.key]),
diff --git a/pkg/analysis_server/test/src/utilities/selection_coverage_test.dart b/pkg/analysis_server/test/src/utilities/selection_coverage_test.dart
index 5a57847..9755c01 100644
--- a/pkg/analysis_server/test/src/utilities/selection_coverage_test.dart
+++ b/pkg/analysis_server/test/src/utilities/selection_coverage_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:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -67,7 +68,7 @@
     for (var declaration in result.unit.declarations) {
       if (declaration is ClassDeclaration &&
           declaration.abstractKeyword == null) {
-        var interfaceName = declaration.name.lexeme;
+        var interfaceName = declaration.namePart.typeName.lexeme;
         if (!interfaceName.endsWith('Impl')) {
           continue;
         }
@@ -108,7 +109,7 @@
 
         // Build the node list map.
         var nodeLists = <ExecutableElement>[];
-        for (var member in declaration.members) {
+        for (var member in declaration.members2) {
           if (member is MethodDeclaration && member.isGetter) {
             var returnType = member.returnType;
             if (returnType != null &&
@@ -131,8 +132,8 @@
 
     for (var declaration in result.unit.declarations) {
       if (declaration is ClassDeclaration &&
-          declaration.name.lexeme == '_ChildrenFinder') {
-        for (var member in declaration.members) {
+          declaration.namePart.typeName.lexeme == '_ChildrenFinder') {
+        for (var member in declaration.members2) {
           if (member is MethodDeclaration &&
               member.name.lexeme.startsWith('visit')) {
             var visitedClass = member
diff --git a/pkg/analysis_server/test/support/configuration_files.dart b/pkg/analysis_server/test/support/configuration_files.dart
index f1afd6d..2ec2b6f 100644
--- a/pkg/analysis_server/test/support/configuration_files.dart
+++ b/pkg/analysis_server/test/support/configuration_files.dart
@@ -46,7 +46,6 @@
     String? languageVersion,
     bool flutter = false,
     bool meta = false,
-    bool pedantic = false,
   }) {
     projectFolderPath = resourceProvider.convertPath(projectFolderPath);
 
@@ -81,11 +80,6 @@
       config.add(name: 'flutter_test', rootPath: libFolder.parent.path);
     }
 
-    if (pedantic) {
-      var libFolder = addPedantic();
-      config.add(name: 'pedantic', rootPath: libFolder.parent.path);
-    }
-
     if (addVectorMathPackageDep) {
       var libFolder = addVectorMath();
       config.add(name: 'vector_math', rootPath: libFolder.parent.path);
@@ -109,7 +103,6 @@
     String? languageVersion,
     bool flutter = false,
     bool meta = false,
-    bool pedantic = false,
   }) {
     writePackageConfig(
       testPackageRootPath,
@@ -118,7 +111,6 @@
       packageName: 'test',
       flutter: flutter,
       meta: meta,
-      pedantic: pedantic,
     );
   }
 }
diff --git a/pkg/analysis_server/test/timing/timing_framework.dart b/pkg/analysis_server/test/timing/timing_framework.dart
index ec0e229..23cfe95 100644
--- a/pkg/analysis_server/test/timing/timing_framework.dart
+++ b/pkg/analysis_server/test/timing/timing_framework.dart
@@ -98,20 +98,14 @@
 /// the time required to perform some sequence of server operations.
 abstract class TimingTest extends IntegrationTest {
   /// The number of times the test will be performed in order to warm up the VM.
-  static final int DEFAULT_WARMUP_COUNT = 10;
+  static const int _defaultWarmupCount = 10;
 
   /// The number of times the test will be performed in order to compute a time.
-  static final int DEFAULT_TIMING_COUNT = 10;
-
-  /// The file suffix used to identify Dart files.
-  static final String DART_SUFFIX = '.dart';
-
-  /// The file suffix used to identify HTML files.
-  static final String HTML_SUFFIX = '.html';
+  static const int _defaultTimingCount = 10;
 
   /// The amount of time to give the server to respond to a shutdown request
   /// before forcibly terminating it.
-  static const Duration SHUTDOWN_TIMEOUT = Duration(seconds: 5);
+  static const Duration _shutdownTimeout = Duration(seconds: 5);
 
   /// The connection to the analysis server.
   @override
@@ -127,11 +121,11 @@
 
   /// Return the number of iterations that should be performed in order to
   /// compute a time.
-  int get timingCount => DEFAULT_TIMING_COUNT;
+  int get timingCount => _defaultTimingCount;
 
   /// Return the number of iterations that should be performed in order to warm
   /// up the VM.
-  int get warmupCount => DEFAULT_WARMUP_COUNT;
+  int get warmupCount => _defaultWarmupCount;
 
   /// Perform any operations that need to be performed once before any
   /// iterations.
@@ -240,7 +234,7 @@
     // doesn't exit, then forcibly terminate it.
     sendServerShutdown();
     return server.exitCode.timeout(
-      SHUTDOWN_TIMEOUT,
+      _shutdownTimeout,
       onTimeout: () {
         return server.kill('server failed to exit');
       },
diff --git a/pkg/analysis_server/test/utils/message_scheduler_test_view.dart b/pkg/analysis_server/test/utils/message_scheduler_test_view.dart
index 6ea4d74..db2f555 100644
--- a/pkg/analysis_server/test/utils/message_scheduler_test_view.dart
+++ b/pkg/analysis_server/test/utils/message_scheduler_test_view.dart
@@ -38,8 +38,13 @@
   }
 
   @override
-  void messageCompleted(ScheduledMessage message) {
-    messageLog.add('  Complete ${message.runtimeType}: ${message.toString()}');
+  void messageCompleted(
+    ScheduledMessage message, {
+    lsp.Either2<int, String>? id,
+  }) {
+    messageLog.add(
+      '  Complete ${message.runtimeType}: ${message.toString()}${id != null ? ' (id: $id)' : ''}',
+    );
   }
 
   @override
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/benchmark_utils.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/benchmark_utils.dart
index dabe1ec..023be2e 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/benchmark_utils.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/benchmark_utils.dart
@@ -50,23 +50,23 @@
     String import = "import '$nextFile' as nextFile;";
     String export = "export '$nextFile';";
     switch (copyType) {
-      case CodeType.ImportCycle:
+      case CodeType.importCycle:
         export = '';
-      case CodeType.ImportChain:
+      case CodeType.importChain:
         export = '';
         if (i == numFiles) {
           import = '';
         }
-      case CodeType.ImportExportChain:
+      case CodeType.importExportChain:
         if (i == numFiles) {
           import = '';
           export = '';
         }
-      case CodeType.ImportCycleExportChain:
+      case CodeType.importCycleExportChain:
         if (i == numFiles) {
           export = '';
         }
-      case CodeType.ImportExportCycle:
+      case CodeType.importExportCycle:
       // As default values.
     }
 
@@ -241,11 +241,11 @@
 }
 
 enum CodeType {
-  ImportCycle,
-  ImportChain,
-  ImportExportCycle,
-  ImportExportChain,
-  ImportCycleExportChain,
+  importCycle,
+  importChain,
+  importExportCycle,
+  importExportChain,
+  importCycleExportChain,
 }
 
 class FileContentPair {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_get_fixes_on_error.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_get_fixes_on_error.dart
index 5fc04e4..a2b91d0 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_get_fixes_on_error.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_get_fixes_on_error.dart
@@ -35,7 +35,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_files_in_flutter_set_subscriptions.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_files_in_flutter_set_subscriptions.dart
index c4657d12..2f7cfad 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_files_in_flutter_set_subscriptions.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_files_in_flutter_set_subscriptions.dart
@@ -50,7 +50,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_get_fixes_and_get_assists_requests.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_get_fixes_and_get_assists_requests.dart
index a8b7911..075901a 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_get_fixes_and_get_assists_requests.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_get_fixes_and_get_assists_requests.dart
@@ -45,7 +45,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_hover_requests.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_hover_requests.dart
index 1f45cc2..f419031 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_hover_requests.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_many_hover_requests.dart
@@ -40,7 +40,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_typing_temporary_missing_end_brace.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_typing_temporary_missing_end_brace.dart
index a6fc45c..84ba9ea 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_typing_temporary_missing_end_brace.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_typing_temporary_missing_end_brace.dart
@@ -44,7 +44,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_with_plugin_that_times_out.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_with_plugin_that_times_out.dart
index 8e8ce2c..7ed771b 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_with_plugin_that_times_out.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/legacy_with_plugin_that_times_out.dart
@@ -39,7 +39,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_completion_after_change.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_completion_after_change.dart
index 6a2a0e8..ea99f6d 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_completion_after_change.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_completion_after_change.dart
@@ -36,7 +36,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_typing_temporarily_missing_end_brace_in_string_interpolation.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_typing_temporarily_missing_end_brace_in_string_interpolation.dart
index 6878984..6266a46 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_typing_temporarily_missing_end_brace_in_string_interpolation.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_typing_temporarily_missing_end_brace_in_string_interpolation.dart
@@ -49,7 +49,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_with_plugin_that_times_out.dart b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_with_plugin_that_times_out.dart
index b37ff3a..d990a0d 100644
--- a/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_with_plugin_that_times_out.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/big_chain_benchmark/lsp_with_plugin_that_times_out.dart
@@ -39,7 +39,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/language_server_benchmark.dart b/pkg/analysis_server/tool/benchmark_tools/language_server_benchmark.dart
index ca9104e..620d858 100644
--- a/pkg/analysis_server/tool/benchmark_tools/language_server_benchmark.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/language_server_benchmark.dart
@@ -48,7 +48,7 @@
   List<Uri> get additionalWorkspaceUris => const [];
   Uri? get cacheFolder => null;
 
-  LaunchFrom get launchFrom => LaunchFrom.Source;
+  LaunchFrom get launchFrom => LaunchFrom.source;
 
   Uri get rootUri;
   Future<void> afterInitialization();
@@ -264,7 +264,7 @@
     }
 
     switch (launchFrom) {
-      case LaunchFrom.Source:
+      case LaunchFrom.source:
         File serverFile = File.fromUri(
           repoDir.resolve('pkg/analysis_server/bin/server.dart'),
         );
@@ -282,7 +282,7 @@
           '--port=9102',
           ...cacheFolderArgs,
         ]);
-      case LaunchFrom.Dart:
+      case LaunchFrom.dart:
         // TODO(jensj): Option of wrapping in `perf record -g` call.
         p = await Process.start(executableToUse, [
           'language-server',
@@ -290,8 +290,8 @@
           '--port=9102',
           ...cacheFolderArgs,
         ]);
-      case LaunchFrom.AotWithPerf:
-      case LaunchFrom.Aot:
+      case LaunchFrom.aotWithPerf:
+      case LaunchFrom.aot:
         File serverFile = File.fromUri(
           repoDir.resolve('pkg/analysis_server/bin/server.aot'),
         );
@@ -314,7 +314,7 @@
           ...cacheFolderArgs,
         ]);
 
-        if (launchFrom == LaunchFrom.AotWithPerf) {
+        if (launchFrom == LaunchFrom.aotWithPerf) {
           await Process.start('perf', [
             'record',
             '-p',
@@ -504,7 +504,7 @@
   DurationInfo(this.name, this.duration);
 }
 
-enum LaunchFrom { Source, Dart, Aot, AotWithPerf }
+enum LaunchFrom { source, dart, aot, aotWithPerf }
 
 class MemoryInfo {
   final String name;
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/legacy_type_in_big_file_ask_for_completion.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/legacy_type_in_big_file_ask_for_completion.dart
index a98591b..4be553b 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/legacy_type_in_big_file_ask_for_completion.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/legacy_type_in_big_file_ask_for_completion.dart
@@ -85,7 +85,7 @@
   ) : super(useLspProtocol: false);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_assist_other_file_could_add_late.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_assist_other_file_could_add_late.dart
index 7ae6cdd..89cb4e5 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_assist_other_file_could_add_late.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_assist_other_file_could_add_late.dart
@@ -89,7 +89,7 @@
     : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_change_requests_processing.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_change_requests_processing.dart
index b8b3719..da011e9 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_change_requests_processing.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_change_requests_processing.dart
@@ -84,7 +84,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_assist_calls.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_assist_calls.dart
index 712e4c4..b4948e4 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_assist_calls.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_assist_calls.dart
@@ -15,18 +15,18 @@
   await runHelper(
     args,
     LspManyAssistCalls.new,
-    createData,
+    _createData,
     sizeOptions: [2000, 4000, 8000],
-    extraIterations: getExtraIterations,
+    extraIterations: _getExtraIterations,
     runAsLsp: true,
   );
 }
 
-RunDetails createData(
+RunDetails _createData(
   Uri packageDirUri,
   Uri outerDirForAdditionalData,
   int size,
-  LineEndings? lineEnding,
+  _LineEndings? lineEnding,
   List<String> args, {
   // unused
   required dynamic extraInformation,
@@ -46,7 +46,7 @@
     content.add('  }');
     content.add('}');
   }
-  var lineEndingString = lineEnding == LineEndings.Windows ? '\r\n' : '\n';
+  var lineEndingString = lineEnding == _LineEndings.windows ? '\r\n' : '\n';
   var contentString = content.join(lineEndingString);
   File.fromUri(uri).writeAsStringSync(contentString);
   return RunDetails(
@@ -55,14 +55,14 @@
   );
 }
 
-List<LineEndings> getExtraIterations(List<String> args) {
-  var lineEndings = LineEndings.values;
+List<_LineEndings> _getExtraIterations(List<String> args) {
+  var lineEndings = _LineEndings.values;
   for (String arg in args) {
     if (arg.startsWith('--types=')) {
       lineEndings = [];
       for (var type in arg.substring('--types='.length).split(',')) {
         type = type.toLowerCase();
-        for (var value in LineEndings.values) {
+        for (var value in _LineEndings.values) {
           if (value.name.toLowerCase().contains(type)) {
             lineEndings.add(value);
           }
@@ -80,8 +80,6 @@
   FileContentPair(this.uri, this.content);
 }
 
-enum LineEndings { Windows, Unix }
-
 class LspManyAssistCalls extends DartLanguageServerBenchmark {
   @override
   final Uri rootUri;
@@ -98,7 +96,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
@@ -159,3 +157,5 @@
 
   RunDetails({required this.mainFile, required this.lineEnding});
 }
+
+enum _LineEndings { windows, unix }
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_prefer_single_quotes_violations_benchmark.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_prefer_single_quotes_violations_benchmark.dart
index 673b877..4871fdc 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_prefer_single_quotes_violations_benchmark.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_many_prefer_single_quotes_violations_benchmark.dart
@@ -89,7 +89,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_semantic_token_full_in_big_file.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_semantic_token_full_in_big_file.dart
index 9083ce4..b011dce 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_semantic_token_full_in_big_file.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_semantic_token_full_in_big_file.dart
@@ -77,7 +77,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file.dart
index 4c1ae94..5b73357 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file.dart
@@ -80,7 +80,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file_ask_for_completion.dart b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file_ask_for_completion.dart
index 80250a8..0c28c15 100644
--- a/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file_ask_for_completion.dart
+++ b/pkg/analysis_server/tool/benchmark_tools/single_benchmarks/lsp_type_in_big_file_ask_for_completion.dart
@@ -79,7 +79,7 @@
   ) : super(useLspProtocol: true);
 
   @override
-  LaunchFrom get launchFrom => LaunchFrom.Dart;
+  LaunchFrom get launchFrom => LaunchFrom.dart;
 
   @override
   Future<void> afterInitialization() async {
diff --git a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
index 930652b..13cbda3 100644
--- a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
+++ b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
@@ -4,6 +4,7 @@
 
 import 'dart:io';
 
+import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -37,9 +38,10 @@
             classElement.allSupertypes.any(
               (element) => element.element.name == 'CorrectionProducer',
             )) {
-          var correctionName = classDecl.name.lexeme;
+          var correctionName = classDecl.namePart.typeName.lexeme;
 
-          for (var method in classDecl.members.whereType<MethodDeclaration>()) {
+          for (var method
+              in classDecl.members2.whereType<MethodDeclaration>()) {
             if (method.name.lexeme == 'canBeAppliedInBulk') {
               var hasComment =
                   method.returnType?.beginToken.precedingComments != null;
diff --git a/pkg/analysis_server/tool/code_completion/benchmark/flutter.dart b/pkg/analysis_server/tool/code_completion/benchmark/flutter.dart
index b8515b4..1e77171 100644
--- a/pkg/analysis_server/tool/code_completion/benchmark/flutter.dart
+++ b/pkg/analysis_server/tool/code_completion/benchmark/flutter.dart
@@ -59,6 +59,7 @@
     resourceProvider: resourceProvider,
     includedPaths: [path],
     sdkPath: '/Users/scheglov/Applications/dart-sdk',
+    withFineDependencies: true,
   );
   var analysisContext = collection.contextFor(path);
   var analysisSession = analysisContext.currentSession;
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index d82072f..f40e9c5 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -4,6 +4,7 @@
 
 import 'dart:io' as io;
 
+import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -291,13 +292,13 @@
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
       'abstractKeyword': node.abstractKeyword,
-      'name': node.name,
-      'typeParameters': node.typeParameters,
+      'name': node.namePart.typeName,
+      'typeParameters': node.namePart.typeParameters,
       'extendsClause': node.extendsClause,
       'withClause': node.withClause,
       'implementsClause': node.implementsClause,
       'nativeClause': node.nativeClause,
-      'members': node.members,
+      'members': node.members2,
     });
     super.visitClassDeclaration(node);
   }
@@ -370,7 +371,8 @@
       'externalKeyword': node.externalKeyword,
       'constKeyword': node.constKeyword,
       'factoryKeyword': node.factoryKeyword,
-      'returnType': node.returnType,
+      // TODO(scheglov): support primary constructors
+      'returnType': node.typeName!,
       'name': node.name,
       'parameters': node.parameters,
       'initializers': node.initializers,
@@ -466,8 +468,8 @@
     _visitChildren(node, {
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
-      'name': node.name,
-      'constants': node.constants,
+      'name': node.namePart.typeName,
+      'constants': node.body.constants,
     });
     super.visitEnumDeclaration(node);
   }
@@ -512,7 +514,7 @@
       'name': node.name,
       'typeParameters': node.typeParameters,
       'onClause': node.onClause,
-      'member': node.members,
+      'member': node.body.members,
     });
     super.visitExtensionDeclaration(node);
   }
@@ -883,7 +885,7 @@
       'typeParameters': node.typeParameters,
       'onClause': node.onClause,
       'implementsClause': node.implementsClause,
-      'members': node.members,
+      'members': node.body.members,
     });
     super.visitMixinDeclaration(node);
   }
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index a3ad607..7a43d54 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -153,7 +153,7 @@
     )
     ..addFlag('help', abbr: 'h', help: 'Print this help message.')
     ..addOption(
-      CompletionMetricsOptions.OVERLAY,
+      CompletionMetricsOptions.overlayOption,
       allowed: [
         OverlayMode.none.flag,
         OverlayMode.removeRestOfFile.flag,
@@ -167,7 +167,7 @@
           'complete at the start of the token without modifying the file.',
     )
     ..addOption(
-      CompletionMetricsOptions.PREFIX_LENGTH,
+      CompletionMetricsOptions.prefixLengthOption,
       defaultsTo: '0',
       help:
           'The number of characters to include in the prefix. Each '
@@ -175,14 +175,14 @@
           'start of the token being completed.',
     )
     ..addFlag(
-      CompletionMetricsQualityOptions.PRINT_MISSED_COMPLETION_DETAILS,
+      CompletionMetricsQualityOptions._printMissedCompletionDetails,
       help:
           'Print detailed information every time a completion request fails '
           'to produce a suggestions matching the expected suggestion.',
       negatable: false,
     )
     ..addFlag(
-      CompletionMetricsQualityOptions.PRINT_MISSED_COMPLETION_SUMMARY,
+      CompletionMetricsQualityOptions._printMissedCompletionSummary,
       help:
           'Print summary information about the times that a completion '
           'request failed to produce a suggestions matching the expected '
@@ -190,7 +190,7 @@
       negatable: false,
     )
     ..addFlag(
-      CompletionMetricsQualityOptions.PRINT_MISSING_INFORMATION,
+      CompletionMetricsQualityOptions._printMissingInformation,
       help:
           'Print information about places where no completion location was '
           'computed and about information that is missing in the completion '
@@ -198,7 +198,7 @@
       negatable: false,
     )
     ..addFlag(
-      CompletionMetricsQualityOptions.PRINT_MRR_BY_LOCATION,
+      CompletionMetricsQualityOptions._printMrrByLocation,
       help:
           'Print information about the mrr score achieved at each completion '
           'location. This can help focus efforts to improve the overall '
@@ -207,7 +207,7 @@
       negatable: false,
     )
     ..addFlag(
-      CompletionMetricsQualityOptions.PRINT_SHADOWED_COMPLETION_DETAILS,
+      CompletionMetricsQualityOptions._printShadowedCompletionDetails,
       help:
           'Print detailed information every time a completion request '
           'produces a suggestion whose name matches the expected suggestion '
@@ -215,14 +215,14 @@
       negatable: false,
     )
     ..addFlag(
-      CompletionMetricsOptions.PRINT_SLOWEST_RESULTS,
+      CompletionMetricsOptions.printSlowestResultsFlag,
       help:
           'Print information about the completion requests that were the '
           'slowest to return suggestions.',
       negatable: false,
     )
     ..addFlag(
-      CompletionMetricsQualityOptions.PRINT_WORST_RESULTS,
+      CompletionMetricsQualityOptions._printWorstResults,
       help:
           'Print information about the completion requests that had the '
           'worst mrr scores.',
@@ -691,34 +691,34 @@
   /// A flag that causes detailed information to be printed every time a
   /// completion request fails to produce a suggestions matching the expected
   /// suggestion.
-  static const String PRINT_MISSED_COMPLETION_DETAILS =
+  static const String _printMissedCompletionDetails =
       'print-missed-completion-details';
 
   /// A flag that causes summary information to be printed about the times that
   /// a completion request failed to produce a suggestions matching the expected
   /// suggestion.
-  static const String PRINT_MISSED_COMPLETION_SUMMARY =
+  static const String _printMissedCompletionSummary =
       'print-missed-completion-summary';
 
   /// A flag that causes information to be printed about places where no
   /// completion location was computed and about information that's missing in
   /// the completion tables.
-  static const String PRINT_MISSING_INFORMATION = 'print-missing-information';
+  static const String _printMissingInformation = 'print-missing-information';
 
   /// A flag that causes information to be printed about the mrr score achieved
   /// at each completion location.
-  static const String PRINT_MRR_BY_LOCATION = 'print-mrr-by-location';
+  static const String _printMrrByLocation = 'print-mrr-by-location';
 
   /// A flag that causes detailed information to be printed every time a
   /// completion request produce a suggestions whose name matches the expected
   /// suggestion but that is referencing a different element (one that's
   /// shadowed by the correct element).
-  static const String PRINT_SHADOWED_COMPLETION_DETAILS =
+  static const String _printShadowedCompletionDetails =
       'print-shadowed-completion-details';
 
   /// A flag that causes information to be printed about the completion requests
   /// that had the worst mrr scores.
-  static const String PRINT_WORST_RESULTS = 'print-worst-results';
+  static const String _printWorstResults = 'print-worst-results';
 
   /// A flag indicating whether information should be printed every time a
   /// completion request fails to produce a suggestions matching the expected
@@ -749,15 +749,18 @@
   final bool printWorstResults;
 
   CompletionMetricsQualityOptions(super.results)
-    : printMissedCompletionDetails =
-          results[PRINT_MISSED_COMPLETION_DETAILS] as bool,
-      printMissedCompletionSummary =
-          results[PRINT_MISSED_COMPLETION_SUMMARY] as bool,
-      printMissingInformation = results[PRINT_MISSING_INFORMATION] as bool,
-      printMrrByLocation = results[PRINT_MRR_BY_LOCATION] as bool,
-      printShadowedCompletionDetails =
-          results[PRINT_SHADOWED_COMPLETION_DETAILS] as bool,
-      printWorstResults = results[PRINT_WORST_RESULTS] as bool;
+    : printMissedCompletionDetails = results.flag(
+        _printMissedCompletionDetails,
+      ),
+      printMissedCompletionSummary = results.flag(
+        _printMissedCompletionSummary,
+      ),
+      printMissingInformation = results.flag(_printMissingInformation),
+      printMrrByLocation = results.flag(_printMrrByLocation),
+      printShadowedCompletionDetails = results.flag(
+        _printShadowedCompletionDetails,
+      ),
+      printWorstResults = results.flag(_printWorstResults);
 }
 
 /// This is the main metrics computer class for code completions. After the
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics_base.dart b/pkg/analysis_server/tool/code_completion/completion_metrics_base.dart
index 9731e76..c122c14 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics_base.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics_base.dart
@@ -54,6 +54,7 @@
       includedPaths: root.includedPaths.toList(),
       excludedPaths: root.excludedPaths.toList(),
       resourceProvider: provider,
+      withFineDependencies: true,
     );
 
     var context = collection.contexts[0];
@@ -93,6 +94,7 @@
     var collection = AnalysisContextCollectionImpl(
       includedPaths: [rootPath],
       resourceProvider: PhysicalResourceProvider.INSTANCE,
+      withFineDependencies: true,
     );
     for (var context in collection.contexts) {
       await computeInContext(context.contextRoot);
@@ -190,17 +192,17 @@
 /// The options specified on the command-line.
 class CompletionMetricsOptions {
   /// An option to control whether and how overlays should be produced.
-  static const String OVERLAY = 'overlay';
+  static const String overlayOption = 'overlay';
 
   /// An option controlling how long of a prefix should be used.
   ///
   /// This affects the offset of the completion request, and how much content is
   /// removed in each of the overlay modes.
-  static const String PREFIX_LENGTH = 'prefix-length';
+  static const String prefixLengthOption = 'prefix-length';
 
   /// A flag that causes information to be printed about the completion requests
   /// that were the slowest to return suggestions.
-  static const String PRINT_SLOWEST_RESULTS = 'print-slowest-results';
+  static const String printSlowestResultsFlag = 'print-slowest-results';
 
   /// The overlay mode that should be used.
   final OverlayMode overlay;
@@ -212,9 +214,9 @@
   final bool printSlowestResults;
 
   CompletionMetricsOptions(ArgResults results)
-    : overlay = OverlayMode.parseFlag(results[OVERLAY] as String),
-      prefixLength = int.parse(results[PREFIX_LENGTH] as String),
-      printSlowestResults = results[PRINT_SLOWEST_RESULTS] as bool;
+    : overlay = OverlayMode.parseFlag(results.option(overlayOption)!),
+      prefixLength = int.parse(results.option(prefixLengthOption)!),
+      printSlowestResults = results.flag(printSlowestResultsFlag);
 }
 
 enum OverlayMode {
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics_client.dart b/pkg/analysis_server/tool/code_completion/completion_metrics_client.dart
index a2f316f..5d7c32e 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics_client.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics_client.dart
@@ -67,7 +67,7 @@
     )
     ..addFlag('help', abbr: 'h', help: 'Print this help message.')
     ..addOption(
-      CompletionMetricsOptions.OVERLAY,
+      CompletionMetricsOptions.overlayOption,
       allowed: [
         OverlayMode.none.flag,
         OverlayMode.removeRestOfFile.flag,
@@ -81,7 +81,7 @@
           'complete at the start of the token without modifying the file.',
     )
     ..addOption(
-      CompletionMetricsOptions.PREFIX_LENGTH,
+      CompletionMetricsOptions.prefixLengthOption,
       defaultsTo: '0',
       help:
           'The number of characters to include in the prefix. Each '
@@ -89,7 +89,7 @@
           'start of the token being completed.',
     )
     ..addFlag(
-      CompletionMetricsOptions.PRINT_SLOWEST_RESULTS,
+      CompletionMetricsOptions.printSlowestResultsFlag,
       help:
           'Print information about the completion requests that were the '
           'slowest to return suggestions.',
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index 388c6dc..9e6d9fe 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show convertElementToElementKind, ElementKind;
 import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
+import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -457,10 +458,10 @@
   @override
   void visitClassDeclaration(ClassDeclaration node) {
     var wasInGenericContext = inGenericContext;
-    inGenericContext = inGenericContext || node.typeParameters != null;
+    inGenericContext = inGenericContext || node.namePart.typeParameters != null;
     data.recordPercentage(
       'Classes with type parameters',
-      node.typeParameters != null,
+      node.namePart.typeParameters != null,
     );
     var context = 'name';
     if (node.extendsClause != null) {
@@ -481,7 +482,7 @@
       allowedKeywords: [Keyword.IMPLEMENTS],
     );
 
-    for (var member in node.members) {
+    for (var member in node.members2) {
       _recordDataForNode(
         'ClassDeclaration (member)',
         member,
@@ -740,7 +741,7 @@
       node.typeParameters != null,
     );
     _recordDataForNode('ExtensionDeclaration (onClause)', node.onClause);
-    for (var member in node.members) {
+    for (var member in node.body.members) {
       _recordDataForNode(
         'ExtensionDeclaration (member)',
         member,
@@ -1200,7 +1201,7 @@
       allowedKeywords: [Keyword.IMPLEMENTS],
     );
 
-    for (var member in node.members) {
+    for (var member in node.body.members) {
       _recordDataForNode(
         'MixinDeclaration (member)',
         member,
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 ce6f5f5..6df869d 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -8,6 +8,7 @@
 import 'package:_fe_analyzer_shared/src/base/syntactic_entity.dart';
 import 'package:analysis_server/src/protocol_server.dart' show ElementKind;
 import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
+import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -492,7 +493,7 @@
       allowedKeywords: [Keyword.IMPLEMENTS],
     );
 
-    for (var member in node.members) {
+    for (var member in node.members2) {
       _recordDataForNode(
         'ClassDeclaration_member',
         member,
@@ -571,7 +572,8 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    _recordDataForNode('ConstructorDeclaration_returnType', node.returnType);
+    // TODO(scheglov): support primary constructors
+    _recordDataForNode('ConstructorDeclaration_returnType', node.typeName!);
     for (var initializer in node.initializers) {
       _recordDataForNode('ConstructorDeclaration_initializer', initializer);
     }
@@ -729,7 +731,7 @@
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
     _recordDataForNode('ExtensionDeclaration_onClause', node.onClause);
-    for (var member in node.members) {
+    for (var member in node.body.members) {
       _recordDataForNode(
         'ExtensionDeclaration_member',
         member,
@@ -1116,7 +1118,7 @@
       allowedKeywords: [Keyword.IMPLEMENTS],
     );
 
-    for (var member in node.members) {
+    for (var member in node.body.members) {
       _recordDataForNode(
         'MixinDeclaration_member',
         member,
diff --git a/pkg/analysis_server/tool/code_completion/visitors.dart b/pkg/analysis_server/tool/code_completion/visitors.dart
index 986514a..67309c5 100644
--- a/pkg/analysis_server/tool/code_completion/visitors.dart
+++ b/pkg/analysis_server/tool/code_completion/visitors.dart
@@ -130,19 +130,19 @@
 }
 
 class ExpectedCompletionsVisitor extends RecursiveAstVisitor<void> {
-  static const ASYNC_STAR = 'async*';
+  static const _asyncStar = 'async*';
 
-  static const DEFAULT_COLON = 'default:';
+  static const _defaultColon = 'default:';
 
-  static const DEFERRED_AS = 'deferred as';
+  static const _deferredAs = 'deferred as';
 
-  static const EXPORT_STATEMENT = "export '';";
+  static const _exportStatement = "export '';";
 
-  static const IMPORT_STATEMENT = "import '';";
+  static const _importStatement = "import '';";
 
-  static const PART_STATEMENT = "part '';";
-  static const SYNC_STAR = 'sync*';
-  static const YIELD_STAR = 'yield*';
+  static const _partStatement = "part '';";
+  static const _syncStar = 'sync*';
+  static const _yieldStar = 'yield*';
 
   /// The result of resolving the file being visited.
   final ResolvedUnitResult result;
@@ -204,7 +204,7 @@
             entity,
             lineNumber,
             columnNumber,
-            ASYNC_STAR,
+            _asyncStar,
             kind,
             elementKind,
           ),
@@ -216,7 +216,7 @@
             entity,
             lineNumber,
             columnNumber,
-            DEFAULT_COLON,
+            _defaultColon,
             kind,
             elementKind,
           ),
@@ -228,7 +228,7 @@
             entity,
             lineNumber,
             columnNumber,
-            DEFERRED_AS,
+            _deferredAs,
             kind,
             elementKind,
           ),
@@ -240,7 +240,7 @@
             entity,
             lineNumber,
             columnNumber,
-            EXPORT_STATEMENT,
+            _exportStatement,
             kind,
             elementKind,
           ),
@@ -252,7 +252,7 @@
             entity,
             lineNumber,
             columnNumber,
-            IMPORT_STATEMENT,
+            _importStatement,
             kind,
             elementKind,
           ),
@@ -264,7 +264,7 @@
             entity,
             lineNumber,
             columnNumber,
-            PART_STATEMENT,
+            _partStatement,
             kind,
             elementKind,
           ),
@@ -276,7 +276,7 @@
             entity,
             lineNumber,
             columnNumber,
-            SYNC_STAR,
+            _syncStar,
             kind,
             elementKind,
           ),
@@ -288,7 +288,7 @@
             entity,
             lineNumber,
             columnNumber,
-            YIELD_STAR,
+            _yieldStar,
             kind,
             elementKind,
           ),
diff --git a/pkg/analysis_server/tool/generate_testing_package.dart b/pkg/analysis_server/tool/generate_testing_package.dart
index f68db68..2f7e201 100644
--- a/pkg/analysis_server/tool/generate_testing_package.dart
+++ b/pkg/analysis_server/tool/generate_testing_package.dart
@@ -43,14 +43,20 @@
     ..addFlag(
       'use-json-serializable',
       help: 'Whether to declare @JsonSerializable classes',
-    );
+    )
+    ..addFlag('help', help: 'Print help text');
+
   var argResults = argParser.parse(args);
-  var libraryCount = int.parse(argResults['library-count'] as String);
-  var classCount = int.parse(argResults['class-count'] as String);
-  var methodCount = int.parse(argResults['method-count'] as String);
-  var parameterCount = int.parse(argResults['parameter-count'] as String);
-  var useBarrelFile = argResults['use-barrel-file'] as bool;
-  var useJsonSerializable = argResults['use-json-serializable'] as bool;
+  if (argResults.flag('help')) {
+    print(argParser.usage);
+  }
+
+  var libraryCount = int.parse(argResults.option('library-count')!);
+  var classCount = int.parse(argResults.option('class-count')!);
+  var methodCount = int.parse(argResults.option('method-count')!);
+  var parameterCount = int.parse(argResults.option('parameter-count')!);
+  var useBarrelFile = argResults.flag('use-barrel-file');
+  var useJsonSerializable = argResults.flag('use-json-serializable');
   var testDataDir = Directory('test_data')..createSync();
   var libFiles = <d.Descriptor>[];
   var classCounter = 1;
@@ -199,7 +205,7 @@
 name: test_package
 version: 0.0.1
 environment:
-  sdk: '>=2.12.0 <3.0.0'
+  sdk: ^3.9.0
 $dependencies
 $devDependencies
 ''';
diff --git a/pkg/analysis_server/tool/log_player/log.dart b/pkg/analysis_server/tool/log_player/log.dart
new file mode 100644
index 0000000..da56e2ea
--- /dev/null
+++ b/pkg/analysis_server/tool/log_player/log.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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/session_logger/log_entry.dart';
+import 'package:analyzer/file_system/file_system.dart';
+
+/// The content of a log file.
+class Log {
+  /// The entries in the log.
+  final List<LogEntry> entries;
+
+  /// Creates a log by reading the content of the [file] and decoding it as a
+  /// list of entries.
+  factory Log.fromFile(File file, Map<String, String> replacements) {
+    return Log.fromString(file.readAsStringSync(), replacements);
+  }
+
+  /// Creates a log by decoding the [logContent] as a list of entries.
+  ///
+  /// The [logContent] should not include the opening and closing delimiters
+  /// for a Json array ('[' and ']'), but otherwise should be a comma-separated
+  /// list of json-encoded log entries.
+  ///
+  /// Each entry in [replacements] is all occurences of the key replaced with
+  /// the value.
+  factory Log.fromString(String logContent, Map<String, String> replacements) {
+    logContent = logContent.trim();
+    for (var entry in replacements.entries) {
+      logContent = logContent.replaceAll(entry.key, entry.value);
+    }
+    if (logContent.endsWith(',')) {
+      logContent = logContent.substring(0, logContent.length - 1);
+    }
+    var list = json.decode('[$logContent]') as List<dynamic>;
+    return Log._(list.cast<LogEntry>().toList());
+  }
+
+  Log._(this.entries);
+}
diff --git a/pkg/analysis_server/tool/log_player/log_player.dart b/pkg/analysis_server/tool/log_player/log_player.dart
new file mode 100644
index 0000000..b0251f2
--- /dev/null
+++ b/pkg/analysis_server/tool/log_player/log_player.dart
@@ -0,0 +1,152 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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/server/driver.dart';
+import 'package:analysis_server/src/session_logger/entry_kind.dart';
+import 'package:analysis_server/src/session_logger/log_entry.dart';
+import 'package:analysis_server/src/session_logger/process_id.dart';
+
+import 'log.dart';
+import 'server_driver.dart';
+
+/// An object used to play back the messages in a log.
+///
+/// A reasonable attempt is made to retain the same timing of messages as was
+/// recorded in the log, but there isn't any way to do that perfectly.
+class LogPlayer {
+  /// The log to be played.
+  Log log;
+
+  /// The object used to communicate with the running server.
+  ServerDriver? server;
+
+  /// Whether the `shutdown` method has been seen.
+  bool _hasSeenShutdown = false;
+
+  /// Whether the `exit` method has been seen.
+  bool _hasSeenExit = false;
+
+  /// Arg parser equivalent to what the real driver uses, used to extract
+  /// options from command line arguments.
+  final driverArgParser = Driver.createArgParser();
+
+  LogPlayer({required this.log});
+
+  /// Plays the log.
+  Future<void> play() async {
+    var entries = log.entries;
+    var nextIndex = 0;
+    while (nextIndex < entries.length) {
+      // TODO(brianwilkerson): This doesn't currently attempt to retain the same
+      //  timing of messages as was recorded in the log.
+      var entry = entries[nextIndex];
+      switch (entry.kind) {
+        case EntryKind.commandLine:
+          if (this.server != null) {
+            throw StateError(
+              'Analysis server already started, only one instance is allowed.',
+            );
+          }
+          var server = this.server = ServerDriver(arguments: entry.argList);
+          await server.start();
+        case EntryKind.message:
+          if (entry.receiver == ProcessId.server) {
+            await _sendMessageToServer(entry);
+          } else if (entry.sender == ProcessId.server) {
+            _handleMessageFromServer(entry);
+          } else {
+            throw StateError('''
+Unexpected sender/receiver for message:
+
+sender: ${entry.sender}
+receiver: ${entry.receiver}
+''');
+          }
+      }
+      nextIndex++;
+    }
+    await _readMessagesFromServer();
+    if (!_hasSeenShutdown) {
+      server?.shutdown();
+    }
+    if (!_hasSeenExit) {
+      server?.exit();
+    }
+    await _readMessagesFromServer();
+    server = null;
+  }
+
+  /// Responds to a message sent from the server to some other process.
+  void _handleMessageFromServer(LogEntry entry) {
+    var message = entry.message;
+    switch (entry.receiver) {
+      case ProcessId.dtd:
+        throw UnimplementedError();
+      case ProcessId.ide:
+        if (message.isLogMessage ||
+            message.isShowDocument ||
+            message.isShowMessage ||
+            message.isShowMessageRequest) {
+          // The response from the client should be recorded in the log, so it
+          // will eventually be sent to the server.
+          return;
+        }
+      // throw UnimplementedError();
+      case ProcessId.plugin:
+        throw UnimplementedError();
+      case ProcessId.server:
+        throw StateError(
+          'Cannot send a message from the server to the server.',
+        );
+      case ProcessId.watcher:
+        throw StateError(
+          'Cannot send a message from the server to the file watcher.',
+        );
+    }
+  }
+
+  /// Wait for the server to process any messages that it may have received and
+  /// for any responses to be sent back.
+  Future<void> _readMessagesFromServer() async {
+    await Future.delayed(const Duration(seconds: 1));
+  }
+
+  /// Sends the message in the [entry] to the server.
+  Future<void> _sendMessageToServer(LogEntry entry) async {
+    var server = this.server;
+    if (server == null) {
+      throw StateError('Analysis server not started.');
+    }
+    var message = entry.message;
+    switch (entry.sender) {
+      case ProcessId.dtd:
+        server.sendMessageFromDTD(message);
+      case ProcessId.ide:
+        if (message.isRequestToConnectWithDtd) {
+          // Replace the original message with one that will allow the driver to
+          // communicate as if it were DTD.
+          await server.connectToDtd();
+          return;
+        }
+        // Record when a shudown and/or exit request has been seen so that we
+        // know whether to force send them after all of the messages in the
+        // log have been seen.
+        if (message.isShutdown) {
+          _hasSeenShutdown = true;
+        } else if (message.isExit) {
+          _hasSeenExit = true;
+          this.server = null;
+        }
+        server.sendMessageFromIde(message);
+      case ProcessId.plugin:
+        server.sendMessageFromPluginIsolate(message);
+      case ProcessId.server:
+        throw UnsupportedError(
+          'Cannot send a message from the server to the server.',
+        );
+      case ProcessId.watcher:
+        server.sendMessageFromFileWatcher(message);
+    }
+  }
+}
diff --git a/pkg/analysis_server/tool/log_player/normalize.dart b/pkg/analysis_server/tool/log_player/normalize.dart
new file mode 100644
index 0000000..e435efd
--- /dev/null
+++ b/pkg/analysis_server/tool/log_player/normalize.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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 exit;
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+
+import 'log.dart';
+
+void main(List<String> args) {
+  if (args.length != 2) {
+    print(
+      'Expected exactly two arguments, an input log path a output log path',
+    );
+    exit(1);
+  }
+  var resourceProvider = PhysicalResourceProvider.INSTANCE;
+  var inputFile = resourceProvider.getFile(
+    Uri.base.resolve(args[0]).toFilePath(),
+  );
+  var outputFile = resourceProvider.getFile(
+    Uri.base.resolve(args[1]).toFilePath(),
+  );
+  if (!inputFile.exists) {
+    print('Input file ${args[0]} does not exist');
+    exit(1);
+  }
+  print('normalizing log at ${inputFile.path}');
+  var normalized = normalizeLog(inputFile);
+  outputFile.writeAsStringSync(normalized);
+  print('wrote normalized log to ${outputFile.path}');
+}
+
+/// Reads an [input] log file, and attempts to normalize it so that it can work
+/// across multiple environments.
+///
+/// Specifically, this:
+///   - Replaces all occurences of the "rootPath" value with {{workspaceRoot}}
+///
+/// Returns the new file contents after normalization.
+//
+// TODO(somebody): Replace all other absolute paths.
+// TODO(somebody): Support legacy protocol.
+String normalizeLog(File input) {
+  var content = input.readAsStringSync();
+  var original = Log.fromString(content, {});
+  var initializeMessage = original.entries.firstWhere(
+    (log) => log.isMessage && log.message.isInitialize,
+  );
+  var workspaceFolders =
+      ((initializeMessage.message.map['params']
+                  as Map<String, Object?>)['workspaceFolders']
+              as List)
+          .cast<Map<String, Object?>>();
+  for (var i = 0; i < workspaceFolders.length; i++) {
+    var folder = workspaceFolders[i];
+    var uri = folder['uri'] as String;
+    content = content.replaceAll(uri, '{{workspaceFolder-$i}}');
+  }
+  return content;
+}
diff --git a/pkg/analysis_server/tool/log_player/server_driver.dart b/pkg/analysis_server/tool/log_player/server_driver.dart
new file mode 100644
index 0000000..205b7c0
--- /dev/null
+++ b/pkg/analysis_server/tool/log_player/server_driver.dart
@@ -0,0 +1,217 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:analysis_server/lsp_protocol/protocol.dart' show jsonRpcVersion;
+import 'package:analysis_server/src/lsp/lsp_packet_transformer.dart';
+import 'package:analysis_server/src/server/driver.dart';
+import 'package:analysis_server/src/session_logger/log_entry.dart';
+
+/// The driver used to communicate with the analysis server.
+class ServerDriver {
+  /// The protocol being used by the server.
+  final ServerProtocol _protocol;
+
+  /// A list of arguments from the command-line used to start the server.
+  final List<String> arguments;
+
+  /// The sink used to send messages from the IDE to the server's stdin, or
+  /// `null` if the server has not been started using [start].
+  IOSink? _stdinSink;
+
+  /// The socket used to send messages from DTD to the server, or `null` if the
+  /// server has not been connected to DTD using [connectToDtd].
+  WebSocket? _dtdSocket;
+
+  /// The messages read from the analysis server's stdout.
+  final List<String> _messagesFromServer = [];
+
+  /// Creates a new driver that can be used to communicate with a server.
+  ///
+  /// When the server is [start]ed, it will use the given [protocol].
+  ///
+  /// The server is run in a separate process.
+  // TODO(brianwilkerson): Add a flag controlling whether the server is in the
+  //  same process as the driver or in a separate process.
+  factory ServerDriver({required List<String> arguments}) {
+    var parsedArgs = Driver.createArgParser().parse(arguments);
+
+    var protocolOption = parsedArgs.option(Driver.serverProtocolOption);
+    var protocol = switch (protocolOption) {
+      Driver.protocolAnalyzer => ServerProtocol.legacy,
+      Driver.protocolLsp => ServerProtocol.lsp,
+      null => throw StateError('No protocol specified'),
+      _ => throw StateError('Unrecognized protocol $protocolOption'),
+    };
+
+    var useFineDependencies = parsedArgs.wasParsed(
+      Driver.withFineDependenciesOption,
+    );
+
+    return ServerDriver._(
+      arguments: [
+        '--${Driver.serverProtocolOption}=${protocol.flagValue}',
+        if (useFineDependencies) '--${Driver.withFineDependenciesOption}',
+      ],
+      protocol: protocol,
+    );
+  }
+
+  /// Creates a new driver that can be used to communicate with a server.
+  ///
+  /// When the server is [start]ed, it will use the given [protocol].
+  ///
+  /// The server is run in a separate process.
+  ServerDriver._({required this.arguments, required ServerProtocol protocol})
+    : _protocol = protocol;
+
+  /// Returns the path to the `dart` executable.
+  String get _dartExecutable {
+    return Platform.resolvedExecutable;
+  }
+
+  /// Create a websocket through which DTD messages can be sent to the server
+  /// and send a request to the server asking it to connect to the socket.
+  // ignore: unnecessary_async
+  Future<void> connectToDtd() async {
+    // TODO(brianwilkerson): Implement this.
+    throw UnimplementedError();
+    // var socketUri = 'ws://';
+    // _dtdSocket = await WebSocket.connect(socketUri);
+  }
+
+  /// Send an exit request to the server, then close the communication channels
+  /// used to communicate with the server.
+  void exit() {
+    if (_protocol == ServerProtocol.lsp) {
+      sendMessageFromIde(
+        Message({
+          'id': 0,
+          'method': 'exit',
+          'jsonrpc': jsonRpcVersion,
+          'clientRequestTime': DateTime.now().millisecondsSinceEpoch,
+        }),
+      );
+    }
+    _stdinSink?.close();
+    _stdinSink = null;
+    _dtdSocket?.close();
+    _dtdSocket = null;
+  }
+
+  void sendMessageFromDTD(Message message) {
+    if (_dtdSocket case var socket?) {
+      socket.add(json.encode(message));
+    } else {
+      throw StateError(
+        "The method 'connectToDtd' must be invoked before "
+        'messages can be sent from DTD.',
+      );
+    }
+  }
+
+  void sendMessageFromFileWatcher(Message message) {
+    // TODO(brianwilkerson): Implementing this will require some additional
+    //  support in the server. The most likely approach is to add support for a
+    //  new protocol that will fake receiving a watch event.
+  }
+
+  /// Send the given [message] to the server using the communication channel
+  /// used by the IDE.
+  void sendMessageFromIde(Message message) {
+    if (_stdinSink case IOSink writeSink) {
+      var jsonEncodedBody = jsonEncode(message);
+      if (_protocol == ServerProtocol.lsp) {
+        var utf8EncodedBody = utf8.encode(jsonEncodedBody);
+        var header =
+            'Content-Length: ${utf8EncodedBody.length}\r\n'
+            'Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n\r\n';
+        var asciiEncodedHeader = ascii.encode(header);
+
+        // Header is always ascii, body is always utf8!
+        writeSink.add(asciiEncodedHeader);
+        writeSink.add(utf8EncodedBody);
+      } else {
+        writeSink.write(jsonEncodedBody);
+      }
+    } else {
+      throw StateError(
+        "The method 'start' must be invoked before "
+        'messages can be sent from the IDE.',
+      );
+    }
+  }
+
+  void sendMessageFromPluginIsolate(Message message) {
+    // TODO(brianwilkerson): Implementing this will require some additional
+    //  support in the server. Two possibilities to consider:
+    //  1. Add a protocol to fake receiving a messsage from the plugin isolate.
+    //  2. Add a protocol to connect to a web socket as if it were a connection
+    //     to a plugin isolate.
+    //  The first is likely to be the easier path forward.
+  }
+
+  /// Send a shutdown request to the server.
+  void shutdown() {
+    if (_protocol == ServerProtocol.legacy) {
+      sendMessageFromIde(
+        Message({
+          'id': 0,
+          'method': 'server.shutdown',
+          'clientRequestTime': DateTime.now().millisecondsSinceEpoch,
+        }),
+      );
+    } else if (_protocol == ServerProtocol.lsp) {
+      sendMessageFromIde(
+        Message({
+          'id': 0,
+          'method': 'shutdown',
+          'jsonrpc': jsonRpcVersion,
+          'clientRequestTime': DateTime.now().millisecondsSinceEpoch,
+        }),
+      );
+    }
+  }
+
+  /// Create and start the server.
+  Future<void> start() async {
+    if (_stdinSink != null) {
+      throw StateError(
+        'Analysis server already started, only one active instance is allowed '
+        'at a time.',
+      );
+    }
+    var process = await Process.start(_dartExecutable, [
+      'language-server',
+      '--suppress-analytics',
+      ...arguments,
+    ]);
+    _stdinSink = process.stdin;
+    if (_protocol == ServerProtocol.lsp) {
+      process.stdout
+          .transform(LspPacketTransformer())
+          .listen(_receiveMessageFromServer);
+    } else {
+      process.stdout
+          .transform(const Utf8Decoder())
+          .transform(const LineSplitter())
+          .listen(_receiveMessageFromServer);
+    }
+  }
+
+  void _receiveMessageFromServer(String message) {
+    _messagesFromServer.add(message);
+  }
+}
+
+/// An indication of the protocol to be used when communicating with the server.
+enum ServerProtocol {
+  legacy('analyzer'),
+  lsp('lsp');
+
+  final String flagValue;
+  const ServerProtocol(this.flagValue);
+}
diff --git a/pkg/analysis_server/tool/lsp_spec/generate_all.dart b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
index d1bd5a8..552eb8e 100644
--- a/pkg/analysis_server/tool/lsp_spec/generate_all.dart
+++ b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
@@ -603,26 +603,6 @@
       baseType: 'CommandParameter',
       comment: 'Information about a Save URI argument needed by the command.',
     ),
-    interface('DartTextDocumentContentProviderRegistrationOptions', [
-      field(
-        'schemes',
-        type: 'string',
-        array: true,
-        comment:
-            'A set of URI schemes the server can provide content for. '
-            'The server may also return URIs with these schemes in responses '
-            'to other requests.',
-      ),
-    ]),
-    interface('DartTextDocumentContentParams', [
-      field('uri', type: 'DocumentUri'),
-    ]),
-    interface('DartTextDocumentContent', [
-      field('content', type: 'String', canBeNull: true),
-    ]),
-    interface('DartTextDocumentContentDidChangeParams', [
-      field('uri', type: 'DocumentUri'),
-    ]),
 
     // Types for `dart/textDocument/summary`.
     interface('DartTextDocumentSummaryParams', [
diff --git a/pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart b/pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart
new file mode 100644
index 0000000..b4f7cdd
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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 '../utilities/git.dart';
+import 'project_generator.dart';
+
+/// A [ProjectGenerator] that clones a git [repo] and checks out a specific
+/// [ref] (commit sha, tag, or branch name).
+class GitCloneProjectGenerator implements ProjectGenerator {
+  /// The URI of the git repo to clone.
+  final String repo;
+
+  /// The ref (commit sha, tag, or branch) to check out.
+  final String ref;
+
+  GitCloneProjectGenerator(this.repo, this.ref);
+
+  @override
+  String get description => 'Cloning git repo "$repo" at ref "$ref"';
+
+  @override
+  Future<Iterable<Directory>> setUp() async {
+    var outputDir = await Directory.systemTemp.createTemp('as_git_clone');
+    await runGitCommand(['clone', repo, '.'], outputDir);
+    await runGitCommand(['fetch', 'origin', ref], outputDir);
+    await runGitCommand(['checkout', ref], outputDir);
+    return [outputDir];
+  }
+
+  @override
+  Future<void> tearDown(Iterable<Directory> workspaceDirs) async {
+    await Future.wait(workspaceDirs.map((dir) => dir.delete(recursive: true)));
+  }
+}
diff --git a/pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart b/pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart
new file mode 100644
index 0000000..4cf6dbb
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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 '../utilities/git.dart';
+import 'project_generator.dart';
+
+/// A [ProjectGenerator] that creates a new git working tree for an already
+/// cloned local repo, checked out at a specific [ref] (commit sha, tag, or branch name).
+class GitWorktreeProjectGenerator implements ProjectGenerator {
+  /// The Directory containing the local git repo.
+  final Directory originalRepo;
+
+  /// The ref (commit sha, tag, or branch) to check out into a new working tree.
+  final String ref;
+
+  GitWorktreeProjectGenerator(this.originalRepo, this.ref);
+
+  @override
+  String get description =>
+      'Creating git worktree for "${originalRepo.path}" at ref "$ref"';
+
+  @override
+  Future<Iterable<Directory>> setUp() async {
+    var projectDir = await Directory.systemTemp.createTemp('as_git_worktree');
+    await runGitCommand([
+      'worktree',
+      'add',
+      '-d',
+      projectDir.path,
+    ], originalRepo);
+    return [projectDir];
+  }
+
+  @override
+  Future<void> tearDown(Iterable<Directory> workspaceDirs) async {
+    if (workspaceDirs.length != 1) {
+      throw StateError('Expected exactly one workspace directory');
+    }
+    await runGitCommand([
+      'worktree',
+      'remove',
+      '-f',
+      workspaceDirs.single.path,
+    ], originalRepo);
+  }
+}
diff --git a/pkg/analysis_server/tool/performance/project_generator/project_generator.dart b/pkg/analysis_server/tool/performance/project_generator/project_generator.dart
new file mode 100644
index 0000000..111f221
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/project_generator/project_generator.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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';
+
+/// A [ProjectGenerator] represents a reproducible way to create a pristine
+/// copy of a codebase.
+///
+/// Each call to [setUp] returns a (typically new) instance of this project.
+abstract interface class ProjectGenerator {
+  /// A short description of the project.
+  String get description;
+
+  /// Performs any work necessary to initialize the project and returns the
+  /// workspace [Directory]s that were created.
+  ///
+  /// Note that the order these are returned in should be deterministic and
+  /// match the original project order.
+  Future<Iterable<Directory>> setUp();
+
+  /// Invoked once the project is no longer needed, should perform any
+  /// necessary cleanup for the workspaces.
+  Future<void> tearDown(Iterable<Directory> workspaceDirs);
+}
diff --git a/pkg/analysis_server/tool/performance/scenarios/logs/initialize.json b/pkg/analysis_server/tool/performance/scenarios/logs/initialize.json
new file mode 100644
index 0000000..52f514f
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/scenarios/logs/initialize.json
@@ -0,0 +1,3 @@
+{"time":1763408263553,"kind":"commandLine","argList":["--protocol=lsp","--port=0","--client-id=VS-Code","--client-version=3.122.0","--with-fine-dependencies"]},
+{"time":1763408263573,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":2053633,"clientInfo":{"name":"code-server","version":"1.98.2"},"locale":"en","rootPath":"{{workspaceFolder-0}}","rootUri":"file://{{workspaceFolder-0}}","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional","normalizesLineEndings":true,"changeAnnotationSupport":{"groupsOnLabel":true}},"configuration":true,"didChangeWatchedFiles":{"dynamicRegistration":true,"relativePatternSupport":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[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]},"tagSupport":{"valueSet":[1]},"resolveSupport":{"properties":["location.range"]}},"codeLens":{"refreshSupport":true},"executeCommand":{"dynamicRegistration":true},"didChangeConfiguration":{"dynamicRegistration":true},"workspaceFolders":true,"semanticTokens":{"refreshSupport":true},"fileOperations":{"dynamicRegistration":true,"didCreate":true,"didRename":true,"didDelete":true,"willCreate":true,"willRename":true,"willDelete":true},"inlineValue":{"refreshSupport":true},"inlayHint":{"refreshSupport":true},"diagnostics":{"refreshSupport":true}},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]},"codeDescriptionSupport":true,"dataSupport":true},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true,"tagSupport":{"valueSet":[1]},"insertReplaceSupport":true,"resolveSupport":{"properties":["documentation","detail","additionalTextEdits"]},"insertTextModeSupport":{"valueSet":[1,2]},"labelDetailsSupport":true},"insertTextMode":2,"completionItemKind":{"valueSet":[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]},"completionList":{"itemDefaults":["commitCharacters","editRange","insertTextFormat","insertTextMode"]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true},"activeParameterSupport":true},"contextSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[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]},"hierarchicalDocumentSymbolSupport":true,"tagSupport":{"valueSet":[1]},"labelSupport":true},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"disabledSupport":true,"dataSupport":true,"resolveSupport":{"properties":["edit"]},"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"honorsChangeAnnotations":false},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true,"prepareSupportDefaultBehavior":1,"honorsChangeAnnotations":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true,"foldingRangeKind":{"valueSet":["comment","imports","region"]},"foldingRange":{"collapsedText":false}},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","macro","keyword","modifier","comment","string","number","regexp","operator","decorator"],"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],"formats":["relative"],"requests":{"range":true,"full":{"delta":true}},"multilineTokenSupport":false,"overlappingTokenSupport":false,"serverCancelSupport":true,"augmentsSyntaxTokens":true},"linkedEditingRange":{"dynamicRegistration":true},"typeHierarchy":{"dynamicRegistration":true},"inlineValue":{"dynamicRegistration":true},"inlayHint":{"dynamicRegistration":true,"resolveSupport":{"properties":["tooltip","textEdits","label.tooltip","label.location","label.command"]}},"diagnostic":{"dynamicRegistration":true,"relatedDocumentSupport":false}},"window":{"showMessage":{"messageActionItem":{"additionalPropertiesSupport":true}},"showDocument":{"support":true},"workDoneProgress":true},"general":{"staleRequestSupport":{"cancel":true,"retryOnContentModified":["textDocument/semanticTokens/full","textDocument/semanticTokens/range","textDocument/semanticTokens/full/delta"]},"regularExpressions":{"engine":"ECMAScript","version":"ES2020"},"markdown":{"parser":"marked","version":"1.1.0","allowedTags":["ul","li","p","code","blockquote","ol","h1","h2","h3","h4","h5","h6","hr","em","pre","table","thead","tbody","tr","th","td","div","del","a","strong","br","img","span"]},"positionEncodings":["utf-16"]},"notebookDocument":{"synchronization":{"dynamicRegistration":true,"executionSummarySupport":true}},"experimental":{"supportsWindowShowMessageRequest":true,"commands":["dart.goToLocation"],"dartCodeAction":{"commandParameterSupport":{"supportedKinds":["saveUri"]}},"snippetTextEdit":true,"supportsDartTextDocumentContentProvider":true,"supportsDartTextDocumentContentProviderEXP1":true}},"initializationOptions":{"allowOpenUri":true,"appHost":"server-distro","closingLabels":true,"flutterOutline":false,"hostKind":"server-distro","onlyAnalyzeProjectsWithOpenFiles":false,"outline":true,"previewSurveys":true,"suggestFromUnimportedLibraries":true,"useInEditorDartFixPrompt":true},"trace":"off","workspaceFolders":[{"uri":"{{workspaceFolder-0}}","name":"sdk"}]},"clientRequestTime":1763408262903}},
+{"time":1763408263726,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"initialized","params":{},"clientRequestTime":1763408263726}},
diff --git a/pkg/analysis_server/tool/performance/scenarios/logs/sdk_rename_driver_class.json b/pkg/analysis_server/tool/performance/scenarios/logs/sdk_rename_driver_class.json
new file mode 100644
index 0000000..104110f
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/scenarios/logs/sdk_rename_driver_class.json
@@ -0,0 +1,182 @@
+{"time":1763408263553,"kind":"commandLine","argList":["--protocol=lsp","--port=0","--client-id=VS-Code","--client-version=3.122.0","--with-fine-dependencies"]},
+{"time":1763408263573,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":2053633,"clientInfo":{"name":"code-server","version":"1.98.2"},"locale":"en","rootPath":"{{workspaceFolder-0}}","rootUri":"file://{{workspaceFolder-0}}","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true,"resourceOperations":["create","rename","delete"],"failureHandling":"textOnlyTransactional","normalizesLineEndings":true,"changeAnnotationSupport":{"groupsOnLabel":true}},"configuration":true,"didChangeWatchedFiles":{"dynamicRegistration":true,"relativePatternSupport":true},"symbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[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]},"tagSupport":{"valueSet":[1]},"resolveSupport":{"properties":["location.range"]}},"codeLens":{"refreshSupport":true},"executeCommand":{"dynamicRegistration":true},"didChangeConfiguration":{"dynamicRegistration":true},"workspaceFolders":true,"semanticTokens":{"refreshSupport":true},"fileOperations":{"dynamicRegistration":true,"didCreate":true,"didRename":true,"didDelete":true,"willCreate":true,"willRename":true,"willDelete":true},"inlineValue":{"refreshSupport":true},"inlayHint":{"refreshSupport":true},"diagnostics":{"refreshSupport":true}},"textDocument":{"publishDiagnostics":{"relatedInformation":true,"versionSupport":false,"tagSupport":{"valueSet":[1,2]},"codeDescriptionSupport":true,"dataSupport":true},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true,"tagSupport":{"valueSet":[1]},"insertReplaceSupport":true,"resolveSupport":{"properties":["documentation","detail","additionalTextEdits"]},"insertTextModeSupport":{"valueSet":[1,2]},"labelDetailsSupport":true},"insertTextMode":2,"completionItemKind":{"valueSet":[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]},"completionList":{"itemDefaults":["commitCharacters","editRange","insertTextFormat","insertTextMode"]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true},"activeParameterSupport":true},"contextSupport":true},"definition":{"dynamicRegistration":true,"linkSupport":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"symbolKind":{"valueSet":[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]},"hierarchicalDocumentSymbolSupport":true,"tagSupport":{"valueSet":[1]},"labelSupport":true},"codeAction":{"dynamicRegistration":true,"isPreferredSupport":true,"disabledSupport":true,"dataSupport":true,"resolveSupport":{"properties":["edit"]},"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"honorsChangeAnnotations":false},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true,"prepareSupport":true,"prepareSupportDefaultBehavior":1,"honorsChangeAnnotations":true},"documentLink":{"dynamicRegistration":true,"tooltipSupport":true},"typeDefinition":{"dynamicRegistration":true,"linkSupport":true},"implementation":{"dynamicRegistration":true,"linkSupport":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true,"foldingRangeKind":{"valueSet":["comment","imports","region"]},"foldingRange":{"collapsedText":false}},"declaration":{"dynamicRegistration":true,"linkSupport":true},"selectionRange":{"dynamicRegistration":true},"callHierarchy":{"dynamicRegistration":true},"semanticTokens":{"dynamicRegistration":true,"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","macro","keyword","modifier","comment","string","number","regexp","operator","decorator"],"tokenModifiers":["declaration","definition","readonly","static","deprecated","abstract","async","modification","documentation","defaultLibrary"],"formats":["relative"],"requests":{"range":true,"full":{"delta":true}},"multilineTokenSupport":false,"overlappingTokenSupport":false,"serverCancelSupport":true,"augmentsSyntaxTokens":true},"linkedEditingRange":{"dynamicRegistration":true},"typeHierarchy":{"dynamicRegistration":true},"inlineValue":{"dynamicRegistration":true},"inlayHint":{"dynamicRegistration":true,"resolveSupport":{"properties":["tooltip","textEdits","label.tooltip","label.location","label.command"]}},"diagnostic":{"dynamicRegistration":true,"relatedDocumentSupport":false}},"window":{"showMessage":{"messageActionItem":{"additionalPropertiesSupport":true}},"showDocument":{"support":true},"workDoneProgress":true},"general":{"staleRequestSupport":{"cancel":true,"retryOnContentModified":["textDocument/semanticTokens/full","textDocument/semanticTokens/range","textDocument/semanticTokens/full/delta"]},"regularExpressions":{"engine":"ECMAScript","version":"ES2020"},"markdown":{"parser":"marked","version":"1.1.0","allowedTags":["ul","li","p","code","blockquote","ol","h1","h2","h3","h4","h5","h6","hr","em","pre","table","thead","tbody","tr","th","td","div","del","a","strong","br","img","span"]},"positionEncodings":["utf-16"]},"notebookDocument":{"synchronization":{"dynamicRegistration":true,"executionSummarySupport":true}},"experimental":{"supportsWindowShowMessageRequest":true,"commands":["dart.goToLocation"],"dartCodeAction":{"commandParameterSupport":{"supportedKinds":["saveUri"]}},"snippetTextEdit":true,"supportsDartTextDocumentContentProvider":true,"supportsDartTextDocumentContentProviderEXP1":true}},"initializationOptions":{"allowOpenUri":true,"appHost":"server-distro","closingLabels":true,"flutterOutline":false,"hostKind":"server-distro","onlyAnalyzeProjectsWithOpenFiles":false,"outline":true,"previewSurveys":true,"suggestFromUnimportedLibraries":true,"useInEditorDartFixPrompt":true},"trace":"off","workspaceFolders":[{"uri":"{{workspaceFolder-0}}","name":"sdk"}]},"clientRequestTime":1763408262903}},
+{"time":1763408263726,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"initialized","params":{},"clientRequestTime":1763408263726}},
+{"time":1763411721288,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5797,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/run_saved_scenarios.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":48,"character":0}}},"clientRequestTime":1763411721288}},
+{"time":1763411721289,"kind":"message","sender":"server","receiver":"ide","message":{"id":5797,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/scenario.dart"},"value":"Scenario"}],"paddingRight":true,"position":{"character":11,"line":15}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":403},"start":{"character":49,"line":403}},"uri":"file://{{dartSdkRoot}}lib/isolate/isolate.dart"},"value":"packageUri:"}],"paddingRight":true,"position":{"character":2,"line":21}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":856},"start":{"character":26,"line":856}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"uri:"}],"paddingRight":true,"position":{"character":12,"line":21}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":109},"start":{"character":25,"line":109}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"Uri"}],"paddingRight":true,"position":{"character":6,"line":20}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":2,"line":25}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":109},"start":{"character":25,"line":109}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"Uri"}],"paddingRight":true,"position":{"character":6,"line":24}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":43,"line":28}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":109},"start":{"character":25,"line":109}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"Uri"}],"paddingRight":true,"position":{"character":6,"line":28}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":6,"line":31}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":34,"line":34}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":51,"line":34}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":18},"start":{"character":35,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart"},"value":"originalRepo:"}],"paddingRight":true,"position":{"character":43,"line":35}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":18},"start":{"character":54,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart"},"value":"ref:"}],"paddingRight":true,"position":{"character":71,"line":35}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":128},"start":{"character":32,"line":128}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"uri:"}],"paddingRight":true,"position":{"character":61,"line":35}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":34,"line":39}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":51,"line":39}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":18},"start":{"character":32,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart"},"value":"repo:"}],"paddingRight":true,"position":{"character":8,"line":41}},{"kind":2,"label":[{"location":{"range":{"end":{"character":46,"line":18},"start":{"character":43,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart"},"value":"ref:"}],"paddingRight":true,"position":{"character":8,"line":42}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":14,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/scenario.dart"},"value":"Scenario"},{"value":">"}],"position":{"character":9,"line":32}}]}},
+{"time":1763411722252,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5798,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/run_saved_scenarios.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":48,"character":0}}},"clientRequestTime":1763411722252}},
+{"time":1763411722253,"kind":"message","sender":"server","receiver":"ide","message":{"id":5798,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/scenario.dart"},"value":"Scenario"}],"paddingRight":true,"position":{"character":11,"line":15}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":403},"start":{"character":49,"line":403}},"uri":"file://{{dartSdkRoot}}lib/isolate/isolate.dart"},"value":"packageUri:"}],"paddingRight":true,"position":{"character":2,"line":21}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":856},"start":{"character":26,"line":856}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"uri:"}],"paddingRight":true,"position":{"character":12,"line":21}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":109},"start":{"character":25,"line":109}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"Uri"}],"paddingRight":true,"position":{"character":6,"line":20}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":2,"line":25}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":109},"start":{"character":25,"line":109}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"Uri"}],"paddingRight":true,"position":{"character":6,"line":24}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":43,"line":28}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":109},"start":{"character":25,"line":109}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"Uri"}],"paddingRight":true,"position":{"character":6,"line":28}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":6,"line":31}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":34,"line":34}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":51,"line":34}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":18},"start":{"character":35,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart"},"value":"originalRepo:"}],"paddingRight":true,"position":{"character":43,"line":35}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":18},"start":{"character":54,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_worktree_project_generator.dart"},"value":"ref:"}],"paddingRight":true,"position":{"character":71,"line":35}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":128},"start":{"character":32,"line":128}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"uri:"}],"paddingRight":true,"position":{"character":61,"line":35}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":34,"line":39}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":807},"start":{"character":21,"line":807}},"uri":"file://{{dartSdkRoot}}lib/core/uri.dart"},"value":"reference:"}],"paddingRight":true,"position":{"character":51,"line":39}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":18},"start":{"character":32,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart"},"value":"repo:"}],"paddingRight":true,"position":{"character":8,"line":41}},{"kind":2,"label":[{"location":{"range":{"end":{"character":46,"line":18},"start":{"character":43,"line":18}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/project_generator/git_clone_project_generator.dart"},"value":"ref:"}],"paddingRight":true,"position":{"character":8,"line":42}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":14,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/scenario.dart"},"value":"Scenario"},{"value":">"}],"position":{"character":9,"line":32}}]}},
+{"time":1763411729550,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"textDocument/didClose","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/run_saved_scenarios.dart"}},"clientRequestTime":1763411729550}},
+{"time":1763411729557,"kind":"message","sender":"server","receiver":"ide","message":{"id":2059,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411729564,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2059,"result":null,"clientRequestTime":1763411729564}},
+{"time":1763411729564,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411729564,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411729701,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","languageId":"dart","version":1,"text":"// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file\n// for details. All rights reserved. Use of this source code is governed by a\n// BSD-style license that can be found in the LICENSE file.\n\nimport 'dart:async';\nimport 'dart:io';\nimport 'dart:isolate';\nimport 'dart:math';\n\nimport 'package:analysis_server/protocol/protocol_constants.dart'\n    show PROTOCOL_VERSION;\nimport 'package:analysis_server/src/analytics/analytics_manager.dart';\nimport 'package:analysis_server/src/legacy_analysis_server.dart';\nimport 'package:analysis_server/src/lsp/lsp_socket_server.dart';\nimport 'package:analysis_server/src/server/crash_reporting.dart';\nimport 'package:analysis_server/src/server/crash_reporting_attachments.dart';\nimport 'package:analysis_server/src/server/detachable_filesystem_manager.dart';\nimport 'package:analysis_server/src/server/dev_server.dart';\nimport 'package:analysis_server/src/server/diagnostic_server.dart';\nimport 'package:analysis_server/src/server/error_notifier.dart';\nimport 'package:analysis_server/src/server/features.dart';\nimport 'package:analysis_server/src/server/http_server.dart';\nimport 'package:analysis_server/src/server/isolate_analysis_server.dart';\nimport 'package:analysis_server/src/server/lsp_stdio_server.dart';\nimport 'package:analysis_server/src/server/sdk_configuration.dart';\nimport 'package:analysis_server/src/server/stdio_server.dart';\nimport 'package:analysis_server/src/services/correction/assist_internal.dart';\nimport 'package:analysis_server/src/services/correction/fix_internal.dart';\nimport 'package:analysis_server/src/session_logger/session_logger.dart';\nimport 'package:analysis_server/src/session_logger/session_logger_sink.dart';\nimport 'package:analysis_server/src/socket_server.dart';\nimport 'package:analysis_server/src/utilities/request_statistics.dart';\nimport 'package:analysis_server/starter.dart';\nimport 'package:analyzer/file_system/physical_file_system.dart';\nimport 'package:analyzer/instrumentation/file_instrumentation.dart';\nimport 'package:analyzer/instrumentation/instrumentation.dart';\nimport 'package:analyzer/src/dart/sdk/sdk.dart';\nimport 'package:analyzer/src/generated/engine.dart';\nimport 'package:analyzer/src/generated/sdk.dart';\nimport 'package:analyzer/src/util/sdk.dart';\nimport 'package:args/args.dart';\nimport 'package:linter/src/rules.dart' as linter;\nimport 'package:telemetry/crash_reporting.dart';\nimport 'package:unified_analytics/unified_analytics.dart';\n\nimport '../utilities/usage_tracking/usage_tracking.dart';\n\n/// The [Driver] class represents a single running instance of the analysis\n/// server application.  It is responsible for parsing command line options\n/// and starting the HTTP and/or stdio servers.\nclass Driver implements ServerStarter {\n  /// The name of the application that is used to start a server.\n  static const binaryName = 'analysis_server';\n\n  /// The name of the option used to set the identifier for the client.\n  static const String clientIdOption = 'client-id';\n\n  /// The name of the option used to set the version for the client.\n  static const String clientVersionOption = 'client-version';\n\n  /// The name of the option used to disable exception handling.\n  static const String disableServerExceptionHandlingOption =\n      'disable-server-exception-handling';\n\n  /// The name of the option to disable the completion feature.\n  static const String disableServerFeatureCompletionOption =\n      'disable-server-feature-completion';\n\n  /// The name of the option to disable the search feature.\n  static const String disableServerFeatureSearchOption =\n      'disable-server-feature-search';\n\n  /// The name of the option to disable the debouncing of `server.status`\n  /// notifications.\n  static const String disableStatusNotificationDebouncingOption =\n      'disable-status-notification-debouncing';\n\n  /// The name of the option to prevent exceptions during analysis from being\n  /// silent.\n  static const String disableSilentAnalysisExceptionsOption =\n      'disable-silent-analysis-exceptions';\n\n  /// The name of the multi-option to enable one or more experiments.\n  static const String enableExperimentOption = 'enable-experiment';\n\n  /// The name of the option used to print usage information.\n  static const String helpFlag = 'help';\n\n  /// The name of the flag used to configure reporting legacy analytics.\n  static const String analyticsFlag = 'analytics';\n\n  /// The name of the flag used to suppress legacy analytics for this session.\n  static const String suppressAnalyticsFlag = 'suppress-analytics';\n\n  /// The name of the option used to cause instrumentation to also be written to\n  /// a local file.\n  static const String protocolTrafficLogOption = 'protocol-traffic-log';\n  static const String protocolTrafficLogAliasOption =\n      'instrumentation-log-file';\n\n  /// The name of the option used to cause a log of the session to be written to\n  /// a file.\n  static const String sessionLogOption = 'session-log';\n\n  /// The name of the option used to specify if [print] should print to the\n  /// console instead of being intercepted.\n  static const String internalPrintToConsoleOption =\n      'internal-print-to-console';\n\n  /// The name of the option used to describe the new analysis driver logger.\n  static const String analysisDriverLogOption = 'analysis-driver-log';\n  static const String analysisDriverLogAliasOption = 'new-analysis-driver-log';\n\n  /// The name of the option for specifying the http diagnostic port.\n  /// If specified, users can review server status and performance information\n  /// by opening a web browser on `http://localhost:<port>`.\n  static const String diagnosticPortOption = 'diagnostic-port';\n  static const String diagnosticPortAliasOption = 'port';\n\n  /// The name of the option used to specify the path to the SDK.\n  static const String dartSdkOption = 'dart-sdk';\n  static const String dartSdkAliasOption = 'sdk';\n\n  /// The name of the option used to specify the path to the data cache.\n  static const String cacheFolderOption = 'cache';\n\n  /// The name of the option used to specify the path to the package config file\n  /// override.\n  static const String packagesFileOption = 'packages';\n\n  /// The name of the option used to specify a forced protocol version that the\n  /// server will report to the client.\n  static const String reportProtocolVersionOption = 'report-protocol-version';\n\n  /// The name of the option specifying the server protocol to use.\n  static const String serverProtocolOption = 'protocol';\n  static const String protocolAnalyzer = 'analyzer';\n  static const String protocolLsp = 'lsp';\n\n  /// The name of the flag to use the Language Server Protocol (LSP).\n  static const String useLspFlag = 'lsp';\n\n  /// The name of the flag used to specify a directory to analyze in order to\n  /// train an analysis server snapshot.\n  static const String trainUsingOption = 'train-using';\n\n  /// Flag to not use a (Evicting)FileByteStore.\n  static const String disableFileByteStoreOption = 'disable-file-byte-store';\n\n  /// The name of the flag to enable fine-grained dependencies.\n  static const String withFineDependenciesOption = 'with-fine-dependencies';\n\n  /// The builder for attachments that should be included into crash reports.\n  CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder =\n      CrashReportingAttachmentsBuilder.empty;\n\n  /// An optional manager to handle file systems which may not always be\n  /// available.\n  DetachableFileSystemManager? detachableFileSystemManager;\n\n  /// The instrumentation service that is to be used by the analysis server.\n  late final InstrumentationService _instrumentationService;\n\n  /// The session logger.\n  late final SessionLogger _sessionLogger;\n\n  /// Use the given command-line [arguments] to start this server.\n  ///\n  /// If [sendPort] is not null, assumes this is launched in an isolate and will\n  /// connect to the original isolate via an isolate channel.\n  @override\n  void start(\n    List<String> arguments, {\n    SendPort? sendPort,\n    bool defaultToLsp = false,\n  }) {\n    var sessionStartTime = DateTime.now();\n    var parser = createArgParser(defaultToLsp: defaultToLsp);\n    var results = parser.parse(arguments);\n\n    var analysisServerOptions = AnalysisServerOptions();\n    analysisServerOptions.newAnalysisDriverLog =\n        results.option(analysisDriverLogOption) ??\n        results.option(analysisDriverLogAliasOption);\n    if (results.wasParsed(useLspFlag)) {\n      analysisServerOptions.useLanguageServerProtocol = results.flag(\n        useLspFlag,\n      );\n    } else {\n      analysisServerOptions.useLanguageServerProtocol =\n          results.option(serverProtocolOption) == protocolLsp;\n    }\n    // For clients that don't supply their own identifier, use a default based\n    // on whether the server will run in LSP mode or not.\n    var clientId =\n        results.option(clientIdOption) ??\n        (analysisServerOptions.useLanguageServerProtocol\n            ? 'unknown.client.lsp'\n            : 'unknown.client.classic');\n    analysisServerOptions.clientId = clientId;\n    analysisServerOptions.clientVersion = results.option(clientVersionOption);\n    analysisServerOptions.cacheFolder = results.option(cacheFolderOption);\n    analysisServerOptions.packagesFile = results.option(packagesFileOption);\n    analysisServerOptions.reportProtocolVersion = results.option(\n      reportProtocolVersionOption,\n    );\n    analysisServerOptions.withFineDependencies = results.flag(\n      withFineDependenciesOption,\n    );\n\n    analysisServerOptions.enabledExperiments = results.multiOption(\n      enableExperimentOption,\n    );\n\n    // Read in any per-SDK overrides specified in <sdk>/config/settings.json.\n    var sdkConfig = SdkConfiguration.readFromSdk();\n    analysisServerOptions.configurationOverrides = sdkConfig;\n\n    // Analytics (legacy, and unified)\n    var disableAnalyticsForSession = results.flag(suppressAnalyticsFlag);\n\n    if (results.wasParsed(trainUsingOption)) {\n      disableAnalyticsForSession = true;\n    }\n\n    var defaultSdkPath = _getSdkPath(results);\n    var dartSdkManager = DartSdkManager(defaultSdkPath);\n\n    // TODO(brianwilkerson): It would be nice to avoid creating an SDK that\n    // can't be re-used, but the SDK is needed to create a package map provider\n    // in the case where we need to run `pub` in order to get the package map.\n    var defaultSdk = _createDefaultSdk(defaultSdkPath);\n\n    // Create the analytics manager.\n    Analytics analytics;\n    if (disableAnalyticsForSession) {\n      analytics = NoOpAnalytics();\n    } else {\n      var tool = switch (clientId) {\n        'VS-Code' || 'VS-Code-Remote' => DashTool.vscodePlugins,\n        'IntelliJ-IDEA' => DashTool.intellijPlugins,\n        'Android-Studio' => DashTool.androidStudioPlugins,\n        _ => null,\n      };\n      if (tool != null) {\n        analytics = _createAnalytics(defaultSdk, defaultSdkPath, tool);\n      } else {\n        analytics = NoOpAnalytics();\n      }\n    }\n    var analyticsManager = AnalyticsManager(analytics);\n\n    bool shouldSendCallback() {\n      // Check sdkConfig to optionally force reporting on.\n      if (sdkConfig.crashReportingForceEnabled == true) {\n        return true;\n      }\n\n      // Reuse the unified_analytics consent mechanism to determine whether\n      // we can send a crash report.\n      return analyticsManager.analytics.okToSend;\n    }\n\n    // Crash reporting\n\n    // Use sdkConfig to optionally override analytics settings.\n    var crashProductId = sdkConfig.crashReportingId ?? 'Dart_analysis_server';\n    var crashReportSender = CrashReportSender.prod(\n      crashProductId,\n      shouldSendCallback,\n    );\n\n    {\n      var disableCompletion = results.flag(\n        disableServerFeatureCompletionOption,\n      );\n      var disableSearch = results.flag(disableServerFeatureSearchOption);\n      if (disableCompletion || disableSearch) {\n        analysisServerOptions.featureSet = FeatureSet(\n          completion: !disableCompletion,\n          search: !disableSearch,\n        );\n      }\n    }\n\n    if (results.flag(helpFlag)) {\n      _printUsage(parser, fromHelp: true);\n      return;\n    }\n\n    // Record the start of the session.\n    analyticsManager.startUp(\n      time: sessionStartTime,\n      arguments: _getArgumentsForAnalytics(results),\n      clientId: clientId,\n      clientVersion: analysisServerOptions.clientVersion,\n    );\n    //\n    // Initialize the instrumentation service.\n    //\n    var logFilePath =\n        results.option(protocolTrafficLogOption) ??\n        results.option(protocolTrafficLogAliasOption);\n    var allInstrumentationServices = <InstrumentationService>[];\n    if (logFilePath != null) {\n      _rollLogFiles(logFilePath, 5);\n      allInstrumentationServices.add(\n        InstrumentationLogAdapter(\n          FileInstrumentationLogger(logFilePath),\n          watchEventExclusionFiles: {logFilePath},\n        ),\n      );\n    }\n\n    var errorNotifier = ErrorNotifier();\n    allInstrumentationServices.add(errorNotifier);\n    allInstrumentationServices.add(\n      CrashReportingInstrumentation(crashReportSender),\n    );\n    _instrumentationService = MulticastInstrumentationService(\n      allInstrumentationServices,\n    );\n\n    _instrumentationService.logVersion(\n      results.option(trainUsingOption) != null\n          ? 'training-0'\n          : _readUuid(_instrumentationService),\n      analysisServerOptions.clientId ?? '',\n      analysisServerOptions.clientVersion ?? '',\n      PROTOCOL_VERSION,\n      defaultSdk.languageVersion.toString(),\n    );\n    AnalysisEngine.instance.instrumentationService = _instrumentationService;\n\n    // Initialize the session logging service.\n    var sessionLogFilePath = results.option(sessionLogOption);\n    _sessionLogger = SessionLogger();\n    var inMemorySink = SessionLoggerInMemorySink(maxBufferLength: 256);\n    _sessionLogger.sink = inMemorySink;\n    if (sessionLogFilePath != null) {\n      inMemorySink.nextLogger = SessionLoggerFileSink(sessionLogFilePath);\n    }\n    _sessionLogger.logCommandLine(arguments: arguments);\n\n    int? diagnosticServerPort;\n    var portValue =\n        results.option(diagnosticPortOption) ??\n        results.option(diagnosticPortAliasOption);\n    if (portValue != null) {\n      try {\n        diagnosticServerPort = int.parse(portValue);\n      } on FormatException {\n        print('Invalid port number: $portValue');\n        print('');\n        _printUsage(parser);\n        exitCode = 1;\n        return;\n      }\n    }\n\n    // TODO(brianwilkerson): Pass the following value to the server and\n    // implement the debouncing when it hasn't been disabled.\n    // var disableDebouncing = results[DISABLE_STATUS_NOTIFICATION_DEBOUNCING] as bool;\n    if (analysisServerOptions.useLanguageServerProtocol) {\n      if (sendPort != null) {\n        throw UnimplementedError(\n          'Isolate usage not implemented for LspAnalysisServer',\n        );\n      }\n      startLspServer(\n        results,\n        analysisServerOptions,\n        dartSdkManager,\n        analyticsManager,\n        _instrumentationService,\n        _sessionLogger,\n        diagnosticServerPort,\n        errorNotifier,\n      );\n    } else {\n      startAnalysisServer(\n        results,\n        analysisServerOptions,\n        parser,\n        dartSdkManager,\n        analyticsManager,\n        crashReportingAttachmentsBuilder,\n        _instrumentationService,\n        _sessionLogger,\n        RequestStatisticsHelper(),\n        diagnosticServerPort,\n        errorNotifier,\n        sendPort,\n      );\n    }\n\n    configureMemoryUsageTracking(\n      arguments,\n      (memoryUsageEvent) => analyticsManager.sendMemoryUsage(memoryUsageEvent),\n    );\n  }\n\n  void startAnalysisServer(\n    ArgResults results,\n    AnalysisServerOptions analysisServerOptions,\n    ArgParser parser,\n    DartSdkManager dartSdkManager,\n    AnalyticsManager analyticsManager,\n    CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder,\n    InstrumentationService instrumentationService,\n    SessionLogger sessionLogger,\n    RequestStatisticsHelper requestStatistics,\n    int? diagnosticServerPort,\n    ErrorNotifier errorNotifier,\n    SendPort? sendPort,\n  ) {\n    var capture = results.flag(disableServerExceptionHandlingOption)\n        ? (_, Function f, {void Function(String)? print}) => f()\n        : _captureExceptions;\n    var trainDirectory = results.option(trainUsingOption);\n    if (trainDirectory != null) {\n      if (!FileSystemEntity.isDirectorySync(trainDirectory)) {\n        print(\"Training directory '$trainDirectory' not found.\\n\");\n        exitCode = 1;\n        return;\n      }\n    }\n    linter.registerLintRules();\n    registerBuiltInAssistGenerators();\n    registerBuiltInFixGenerators();\n\n    var diagnosticServer = _DiagnosticServerImpl();\n\n    //\n    // Create the sockets and start listening for requests.\n    //\n    var socketServer = SocketServer(\n      analysisServerOptions,\n      dartSdkManager,\n      crashReportingAttachmentsBuilder,\n      instrumentationService,\n      sessionLogger,\n      requestStatistics,\n      diagnosticServer,\n      analyticsManager,\n      detachableFileSystemManager,\n    );\n\n    diagnosticServer.httpServer = HttpAnalysisServer(socketServer);\n    if (diagnosticServerPort != null) {\n      diagnosticServer.startOnPort(diagnosticServerPort);\n    }\n\n    if (trainDirectory != null) {\n      if (sendPort != null) {\n        throw UnimplementedError(\n          'isolate usage not supported for DevAnalysisServer',\n        );\n      }\n      var tempDriverDir = Directory.systemTemp.createTempSync(\n        'analysis_server_',\n      );\n      analysisServerOptions.cacheFolder = tempDriverDir.path;\n      analysisServerOptions.disableFileByteStore = results.flag(\n        disableFileByteStoreOption,\n      );\n\n      var devServer = DevAnalysisServer(socketServer);\n      devServer.initServer();\n\n      () async {\n        // We first analyze code with an empty driver cache.\n        print('Analyzing with an empty driver cache:');\n        var exitCode = await devServer.processDirectories([trainDirectory]);\n        if (exitCode != 0) exit(exitCode);\n\n        print('');\n\n        // Then again with a populated cache.\n        print('Analyzing with a populated driver cache:');\n        exitCode = await devServer.processDirectories([trainDirectory]);\n        if (exitCode != 0) exit(exitCode);\n\n        diagnosticServer.httpServer.close();\n        await instrumentationService.shutdown();\n        unawaited(socketServer.analysisServer!.shutdown());\n\n        try {\n          tempDriverDir.deleteSync(recursive: true);\n        } catch (_) {\n          // Ignore any exception.\n        }\n\n        exit(exitCode);\n      }();\n    } else {\n      capture(\n        instrumentationService,\n        () {\n          Future<void> serveResult;\n          if (sendPort == null) {\n            var stdioServer = StdioAnalysisServer(socketServer);\n            serveResult = stdioServer.serveStdio();\n          } else {\n            var isolateAnalysisServer = IsolateAnalysisServer(socketServer);\n            serveResult = isolateAnalysisServer.serveIsolate(sendPort);\n          }\n          errorNotifier.server = socketServer.analysisServer;\n          if (results.flag(disableSilentAnalysisExceptionsOption)) {\n            errorNotifier.sendSilentExceptionsToClient = true;\n          }\n          serveResult.then((_) async {\n            diagnosticServer.httpServer.close();\n            await instrumentationService.shutdown();\n            unawaited(socketServer.analysisServer!.shutdown());\n            if (sendPort == null) exit(0);\n          });\n        },\n        print: results.flag(internalPrintToConsoleOption)\n            ? null\n            : diagnosticServer.httpServer.recordPrint,\n      );\n    }\n  }\n\n  void startLspServer(\n    ArgResults args,\n    AnalysisServerOptions analysisServerOptions,\n    DartSdkManager dartSdkManager,\n    AnalyticsManager analyticsManager,\n    InstrumentationService instrumentationService,\n    SessionLogger sessionLogger,\n    int? diagnosticServerPort,\n    ErrorNotifier errorNotifier,\n  ) {\n    var capture = args.flag(disableServerExceptionHandlingOption)\n        ? (_, Function f, {void Function(String)? print}) => f()\n        : _captureExceptions;\n\n    linter.registerLintRules();\n    registerBuiltInAssistGenerators();\n    registerBuiltInFixGenerators();\n\n    var diagnosticServer = _DiagnosticServerImpl();\n\n    var socketServer = LspSocketServer(\n      analysisServerOptions,\n      diagnosticServer,\n      analyticsManager,\n      dartSdkManager,\n      instrumentationService,\n      sessionLogger,\n      detachableFileSystemManager,\n    );\n    errorNotifier.server = socketServer.analysisServer;\n    diagnosticServer.httpServer = HttpAnalysisServer(socketServer);\n\n    if (diagnosticServerPort != null) {\n      diagnosticServer.startOnPort(diagnosticServerPort);\n    }\n\n    capture(instrumentationService, () {\n      var stdioServer = LspStdioAnalysisServer(socketServer);\n      stdioServer.serveStdio().then((_) {\n        // Only shutdown the server and exit if the server is not already\n        // handling the shutdown.\n        if (!socketServer.analysisServer!.willExit) {\n          unawaited(socketServer.analysisServer!.shutdown());\n          exit(0);\n        }\n      });\n    });\n  }\n\n  /// Execute the given [callback] within a zone that will capture any unhandled\n  /// exceptions and both report them to the client and send them to the given\n  /// instrumentation [service]. If a [print] function is provided, then also\n  /// capture any data printed by the callback and redirect it to the function.\n  void _captureExceptions(\n    InstrumentationService service,\n    void Function() callback, {\n    void Function(String line)? print,\n  }) {\n    void errorFunction(\n      Zone self,\n      ZoneDelegate parent,\n      Zone zone,\n      Object exception,\n      StackTrace stackTrace,\n    ) {\n      service.logException(exception, stackTrace);\n      throw exception;\n    }\n\n    var printFunction = print == null\n        ? null\n        : (Zone self, ZoneDelegate parent, Zone zone, String line) {\n            // Note: we don't pass the line on to stdout, because that is\n            // reserved for communication to the client.\n            print(line);\n          };\n    var zoneSpecification = ZoneSpecification(\n      handleUncaughtError: errorFunction,\n      print: printFunction,\n    );\n    return runZoned(callback, zoneSpecification: zoneSpecification);\n  }\n\n  /// Create the `Analytics` instance to be used to report analytics.\n  Analytics _createAnalytics(\n    DartSdk dartSdk,\n    String dartSdkPath,\n    DashTool tool,\n  ) {\n    // TODO(brianwilkerson): Find out whether there's a way to get the channel\n    //  without running `flutter channel`.\n    var pathContext = PhysicalResourceProvider.INSTANCE.pathContext;\n    var flutterSdkRoot = pathContext.dirname(\n      pathContext.dirname(pathContext.dirname(dartSdkPath)),\n    );\n    var flutterVersionFile = PhysicalResourceProvider.INSTANCE.getFile(\n      pathContext.join(flutterSdkRoot, 'version'),\n    );\n    String? flutterVersion;\n    try {\n      flutterVersion = flutterVersionFile.readAsStringSync();\n    } catch (exception) {\n      // If we can't read the file, ignore it.\n    }\n    return Analytics(\n      tool: tool,\n      dartVersion: dartSdk.sdkVersion,\n      // flutterChannel: '',\n      flutterVersion: flutterVersion,\n    );\n  }\n\n  DartSdk _createDefaultSdk(String defaultSdkPath) {\n    var resourceProvider = PhysicalResourceProvider.INSTANCE;\n    return FolderBasedDartSdk(\n      resourceProvider,\n      resourceProvider.getFolder(defaultSdkPath),\n    );\n  }\n\n  /// Constructs a uuid combining the current date and a random integer.\n  String _generateUuidString() {\n    var millisecondsSinceEpoch = DateTime.now().millisecondsSinceEpoch;\n    var random = Random().nextInt(0x3fffffff);\n    return '$millisecondsSinceEpoch$random';\n  }\n\n  /// Return a list of the known command-line arguments that were parsed when\n  /// creating the given [results]. We return only the names of the arguments,\n  /// not the values of the arguments, in order to prevent the collection of any\n  /// PII.\n  List<String> _getArgumentsForAnalytics(ArgResults results) {\n    // The arguments that are literal strings are deprecated and no longer read\n    // from, but we still want to know if clients are using them.\n    var knownArguments = [\n      analyticsFlag,\n      cacheFolderOption,\n      clientIdOption,\n      clientVersionOption,\n      'completion-model',\n      'dartpad',\n      dartSdkOption,\n      dartSdkAliasOption,\n      diagnosticPortOption,\n      diagnosticPortAliasOption,\n      disableServerExceptionHandlingOption,\n      disableServerFeatureCompletionOption,\n      disableServerFeatureSearchOption,\n      disableSilentAnalysisExceptionsOption,\n      disableStatusNotificationDebouncingOption,\n      'enable-completion-model',\n      'enable-experiment',\n      'enable-instrumentation',\n      'file-read-mode',\n      helpFlag,\n      'ignore-unrecognized-flags',\n      internalPrintToConsoleOption,\n      packagesFileOption,\n      'preview-dart-2',\n      protocolTrafficLogOption,\n      protocolTrafficLogAliasOption,\n      reportProtocolVersionOption,\n      serverProtocolOption,\n      sessionLogOption,\n      suppressAnalyticsFlag,\n      trainUsingOption,\n      'useAnalysisHighlight2',\n      useLspFlag,\n      'use-new-relevance',\n      'use-fasta-parser',\n      disableFileByteStoreOption,\n      withFineDependenciesOption,\n    ];\n    return knownArguments\n        .where((argument) => results.wasParsed(argument))\n        .toList();\n  }\n\n  String _getSdkPath(ArgResults args) {\n    String? sdkPath;\n\n    void tryCandidateArgument(String argumentName) {\n      var argumentValue = args[argumentName];\n      if (sdkPath == null && argumentValue is String) {\n        sdkPath = argumentValue;\n      }\n    }\n\n    tryCandidateArgument(dartSdkOption);\n    tryCandidateArgument(dartSdkAliasOption);\n    var sdkPath2 = sdkPath ?? getSdkPath();\n\n    var pathContext = PhysicalResourceProvider.INSTANCE.pathContext;\n    return pathContext.normalize(pathContext.absolute(sdkPath2));\n  }\n\n  /// Print information about how to use the server.\n  void _printUsage(ArgParser parser, {bool fromHelp = false}) {\n    print('Usage: $binaryName [flags]');\n    print('');\n    print('Supported flags are:');\n    print(parser.usage);\n  }\n\n  /// Read the UUID from disk, generating and storing a new one if necessary.\n  String _readUuid(InstrumentationService service) {\n    var instrumentationLocation = PhysicalResourceProvider.INSTANCE\n        .getStateLocation('.instrumentation');\n    if (instrumentationLocation == null) {\n      return _generateUuidString();\n    }\n    var uuidFile = File(instrumentationLocation.getChild('uuid.txt').path);\n    try {\n      if (uuidFile.existsSync()) {\n        var uuid = uuidFile.readAsStringSync();\n        if (uuid.length > 5) {\n          return uuid;\n        }\n      }\n    } catch (exception, stackTrace) {\n      service.logException(exception, stackTrace);\n    }\n    var uuid = _generateUuidString();\n    try {\n      uuidFile.parent.createSync(recursive: true);\n      uuidFile.writeAsStringSync(uuid);\n    } catch (exception, stackTrace) {\n      service.logException(exception, stackTrace);\n      // Slightly alter the uuid to indicate it was not persisted\n      uuid = 'temp-$uuid';\n    }\n    return uuid;\n  }\n\n  /// Create and return the parser used to parse the command-line arguments.\n  static ArgParser createArgParser({\n    int? usageLineLength,\n    bool includeHelpFlag = true,\n    bool defaultToLsp = false,\n  }) {\n    var parser = ArgParser(usageLineLength: usageLineLength);\n    if (includeHelpFlag) {\n      parser.addFlag(\n        helpFlag,\n        abbr: 'h',\n        negatable: false,\n        help: 'Print this usage information.',\n      );\n    }\n    parser.addOption(\n      clientIdOption,\n      valueHelp: 'name',\n      help: 'An identifier for the analysis server client.',\n    );\n    parser.addOption(\n      clientVersionOption,\n      valueHelp: 'version',\n      help: 'The version of the analysis server client.',\n    );\n    parser.addOption(\n      dartSdkOption,\n      valueHelp: 'path',\n      help: 'Override the Dart SDK to use for analysis.',\n    );\n    parser.addOption(dartSdkAliasOption, hide: true);\n    parser.addOption(\n      cacheFolderOption,\n      valueHelp: 'path',\n      help: 'Override the location of the analysis server\\'s cache.',\n    );\n    parser.addOption(\n      packagesFileOption,\n      valueHelp: 'path',\n      help:\n          'The path to the package resolution configuration file, which '\n          'supplies a mapping of package names\\ninto paths.',\n    );\n    parser.addMultiOption(\n      enableExperimentOption,\n      valueHelp: 'experiment',\n      help:\n          'Enable one or more experimental features '\n          '(see dart.dev/go/experiments).',\n      hide: true,\n    );\n\n    parser.addOption(\n      serverProtocolOption,\n      defaultsTo: defaultToLsp ? protocolLsp : protocolAnalyzer,\n      valueHelp: 'protocol',\n      allowed: [protocolLsp, protocolAnalyzer],\n      allowedHelp: {\n        protocolLsp:\n            'The Language Server Protocol '\n            '(https://microsoft.github.io/language-server-protocol)',\n        protocolAnalyzer:\n            'Dart\\'s analysis server protocol '\n            '(https://dart.dev/go/analysis-server-protocol)',\n      },\n      help:\n          'Specify the protocol to use to communicate with the analysis server.',\n    );\n    // This option is hidden but still accepted; it's effectively translated to\n    // the 'protocol' option above.\n    parser.addFlag(\n      useLspFlag,\n      negatable: false,\n      help: 'Whether to use the Language Server Protocol (LSP).',\n      hide: true,\n    );\n\n    parser.addSeparator('Server diagnostics:');\n\n    parser.addOption(\n      protocolTrafficLogOption,\n      valueHelp: 'file path',\n      help: 'Write server protocol traffic to the given file.',\n    );\n    parser.addOption(protocolTrafficLogAliasOption, hide: true);\n\n    parser.addOption(\n      sessionLogOption,\n      valueHelp: 'file path',\n      help: 'Write a server session log to the given file.',\n    );\n\n    parser.addOption(\n      analysisDriverLogOption,\n      valueHelp: 'file path',\n      help: 'Write analysis driver diagnostic data to the given file.',\n    );\n    parser.addOption(analysisDriverLogAliasOption, hide: true);\n\n    parser.addOption(\n      diagnosticPortOption,\n      valueHelp: 'port',\n      help:\n          'Serve a web UI for status and performance data on the given '\n          'port.',\n    );\n    parser.addOption(diagnosticPortAliasOption, hide: true);\n\n    //\n    // Hidden; these have not yet been made public.\n    //\n    parser.addFlag(\n      analyticsFlag,\n      help:\n          'Allow or disallow sending analytics information to '\n          'Google for this session.',\n      hide: true,\n    );\n    parser.addFlag(\n      suppressAnalyticsFlag,\n      negatable: false,\n      help: 'Suppress analytics for this session.',\n      hide: true,\n    );\n\n    //\n    // Hidden; these are for internal development.\n    //\n    parser.addOption(\n      trainUsingOption,\n      valueHelp: 'path',\n      help:\n          'Pass in a directory to analyze for purposes of training an '\n          'analysis server snapshot.  Disables analytics.',\n      hide: true,\n    );\n    parser.addFlag(\n      disableFileByteStoreOption,\n      help:\n          'Disable use of (Evicting)FileByteStore. Intended for benchmarking.',\n      hide: true,\n    );\n    parser.addFlag(\n      withFineDependenciesOption,\n      help: 'Enable fine-grained dependencies.',\n      defaultsTo: true,\n      hide: true,\n    );\n    parser.addFlag(\n      disableServerExceptionHandlingOption,\n      // TODO(jcollins-g): Pipeline option through and apply to all\n      // exception-nullifying runZoned() calls.\n      help:\n          'disable analyzer exception capture for interactive debugging '\n          'of the server',\n      hide: true,\n    );\n    parser.addFlag(\n      disableServerFeatureCompletionOption,\n      help: 'disable all completion features',\n      hide: true,\n    );\n    parser.addFlag(\n      disableServerFeatureSearchOption,\n      help: 'disable all search features',\n      hide: true,\n    );\n    parser.addFlag(\n      disableSilentAnalysisExceptionsOption,\n      negatable: false,\n      help: 'Prevent exceptions during analysis from being silent',\n      hide: true,\n    );\n    parser.addFlag(\n      disableStatusNotificationDebouncingOption,\n      negatable: false,\n      help: 'Suppress debouncing of status notifications.',\n      hide: true,\n    );\n    parser.addFlag(\n      internalPrintToConsoleOption,\n      help: 'enable sending `print` output to the console',\n      negatable: false,\n      hide: true,\n    );\n    parser.addOption(\n      reportProtocolVersionOption,\n      valueHelp: 'version',\n      help:\n          'The protocol version that the server will report to the client, '\n          'can be used to temporary enabling features that we expect to be '\n          'available in future versions.',\n      hide: true,\n    );\n\n    //\n    // Hidden; these are deprecated and no longer read from.\n    //\n\n    // Removed 11/15/2020.\n    parser.addOption('completion-model', hide: true);\n    // Removed 11/8/2020.\n    parser.addFlag('dartpad', hide: true);\n    // Removed 11/15/2020.\n    parser.addFlag('enable-completion-model', hide: true);\n    // Removed 9/23/2020.\n    parser.addFlag('enable-instrumentation', hide: true);\n    // Removed 11/12/2020.\n    parser.addOption('file-read-mode', hide: true);\n    // Removed 11/12/2020.\n    parser.addFlag('ignore-unrecognized-flags', hide: true);\n    // Removed 11/8/2020.\n    parser.addFlag('preview-dart-2', hide: true);\n    // Removed 11/12/2020.\n    parser.addFlag('useAnalysisHighlight2', hide: true);\n    // Removed 11/13/2020.\n    parser.addFlag('use-new-relevance', hide: true);\n    // Removed 9/23/2020.\n    parser.addFlag('use-fasta-parser', hide: true);\n\n    return parser;\n  }\n\n  /// Perform log files rolling.\n  ///\n  /// Rename existing files with names `[path].(x)` to `[path].(x+1)`.\n  /// Keep at most [numOld] files.\n  /// Rename the file with the given [path] to `[path].1`.\n  static void _rollLogFiles(String path, int numOld) {\n    for (var i = numOld - 1; i >= 0; i--) {\n      try {\n        var oldPath = i == 0 ? path : '$path.$i';\n        File(oldPath).renameSync('$path.${i + 1}');\n      } catch (e) {\n        // If a file can't be renamed, then leave it and attempt to rename the\n        // remaining files.\n      }\n    }\n  }\n}\n\n/// Implements the [DiagnosticServer] class by wrapping an [HttpAnalysisServer].\nclass _DiagnosticServerImpl extends DiagnosticServer {\n  late HttpAnalysisServer httpServer;\n\n  @override\n  Future<int> getServerPort() async => (await httpServer.serveHttp())!;\n\n  Future<void> startOnPort(int port) {\n    return httpServer.serveHttp(port);\n  }\n}\n"}},"clientRequestTime":1763411729697}},
+{"time":1763411729701,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5799,"method":"textDocument/documentColor","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411729698}},
+{"time":1763411729701,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5800,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411729698}},
+{"time":1763411729701,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5801,"method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411729698}},
+{"time":1763411729701,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5802,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411729698}},
+{"time":1763411729703,"kind":"message","sender":"server","receiver":"ide","message":{"id":2060,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411729759,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[{"label":"InstrumentationLogAdapter","range":{"end":{"character":9,"line":310},"start":{"character":8,"line":307}}}],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}}},
+{"time":1763411729760,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":45,"line":52},"start":{"character":15,"line":52}},"element":{"kind":"FIELD","name":"binaryName","range":{"end":{"character":25,"line":52},"start":{"character":15,"line":52}},"returnType":""},"range":{"end":{"character":46,"line":52},"start":{"character":2,"line":51}}},{"codeRange":{"end":{"character":50,"line":55},"start":{"character":22,"line":55}},"element":{"kind":"FIELD","name":"clientIdOption","range":{"end":{"character":36,"line":55},"start":{"character":22,"line":55}},"returnType":"String"},"range":{"end":{"character":51,"line":55},"start":{"character":2,"line":54}}},{"codeRange":{"end":{"character":60,"line":58},"start":{"character":22,"line":58}},"element":{"kind":"FIELD","name":"clientVersionOption","range":{"end":{"character":41,"line":58},"start":{"character":22,"line":58}},"returnType":"String"},"range":{"end":{"character":61,"line":58},"start":{"character":2,"line":57}}},{"codeRange":{"end":{"character":41,"line":62},"start":{"character":22,"line":61}},"element":{"kind":"FIELD","name":"disableServerExceptionHandlingOption","range":{"end":{"character":58,"line":61},"start":{"character":22,"line":61}},"returnType":"String"},"range":{"end":{"character":42,"line":62},"start":{"character":2,"line":60}}},{"codeRange":{"end":{"character":41,"line":66},"start":{"character":22,"line":65}},"element":{"kind":"FIELD","name":"disableServerFeatureCompletionOption","range":{"end":{"character":58,"line":65},"start":{"character":22,"line":65}},"returnType":"String"},"range":{"end":{"character":42,"line":66},"start":{"character":2,"line":64}}},{"codeRange":{"end":{"character":37,"line":70},"start":{"character":22,"line":69}},"element":{"kind":"FIELD","name":"disableServerFeatureSearchOption","range":{"end":{"character":54,"line":69},"start":{"character":22,"line":69}},"returnType":"String"},"range":{"end":{"character":38,"line":70},"start":{"character":2,"line":68}}},{"codeRange":{"end":{"character":46,"line":75},"start":{"character":22,"line":74}},"element":{"kind":"FIELD","name":"disableStatusNotificationDebouncingOption","range":{"end":{"character":63,"line":74},"start":{"character":22,"line":74}},"returnType":"String"},"range":{"end":{"character":47,"line":75},"start":{"character":2,"line":72}}},{"codeRange":{"end":{"character":42,"line":80},"start":{"character":22,"line":79}},"element":{"kind":"FIELD","name":"disableSilentAnalysisExceptionsOption","range":{"end":{"character":59,"line":79},"start":{"character":22,"line":79}},"returnType":"String"},"range":{"end":{"character":43,"line":80},"start":{"character":2,"line":77}}},{"codeRange":{"end":{"character":66,"line":83},"start":{"character":22,"line":83}},"element":{"kind":"FIELD","name":"enableExperimentOption","range":{"end":{"character":44,"line":83},"start":{"character":22,"line":83}},"returnType":"String"},"range":{"end":{"character":67,"line":83},"start":{"character":2,"line":82}}},{"codeRange":{"end":{"character":39,"line":86},"start":{"character":22,"line":86}},"element":{"kind":"FIELD","name":"helpFlag","range":{"end":{"character":30,"line":86},"start":{"character":22,"line":86}},"returnType":"String"},"range":{"end":{"character":40,"line":86},"start":{"character":2,"line":85}}},{"codeRange":{"end":{"character":49,"line":89},"start":{"character":22,"line":89}},"element":{"kind":"FIELD","name":"analyticsFlag","range":{"end":{"character":35,"line":89},"start":{"character":22,"line":89}},"returnType":"String"},"range":{"end":{"character":50,"line":89},"start":{"character":2,"line":88}}},{"codeRange":{"end":{"character":66,"line":92},"start":{"character":22,"line":92}},"element":{"kind":"FIELD","name":"suppressAnalyticsFlag","range":{"end":{"character":43,"line":92},"start":{"character":22,"line":92}},"returnType":"String"},"range":{"end":{"character":67,"line":92},"start":{"character":2,"line":91}}},{"codeRange":{"end":{"character":71,"line":96},"start":{"character":22,"line":96}},"element":{"kind":"FIELD","name":"protocolTrafficLogOption","range":{"end":{"character":46,"line":96},"start":{"character":22,"line":96}},"returnType":"String"},"range":{"end":{"character":72,"line":96},"start":{"character":2,"line":94}}},{"codeRange":{"end":{"character":32,"line":98},"start":{"character":22,"line":97}},"element":{"kind":"FIELD","name":"protocolTrafficLogAliasOption","range":{"end":{"character":51,"line":97},"start":{"character":22,"line":97}},"returnType":"String"},"range":{"end":{"character":33,"line":98},"start":{"character":2,"line":97}}},{"codeRange":{"end":{"character":54,"line":102},"start":{"character":22,"line":102}},"element":{"kind":"FIELD","name":"sessionLogOption","range":{"end":{"character":38,"line":102},"start":{"character":22,"line":102}},"returnType":"String"},"range":{"end":{"character":55,"line":102},"start":{"character":2,"line":100}}},{"codeRange":{"end":{"character":33,"line":107},"start":{"character":22,"line":106}},"element":{"kind":"FIELD","name":"internalPrintToConsoleOption","range":{"end":{"character":50,"line":106},"start":{"character":22,"line":106}},"returnType":"String"},"range":{"end":{"character":34,"line":107},"start":{"character":2,"line":104}}},{"codeRange":{"end":{"character":69,"line":110},"start":{"character":22,"line":110}},"element":{"kind":"FIELD","name":"analysisDriverLogOption","range":{"end":{"character":45,"line":110},"start":{"character":22,"line":110}},"returnType":"String"},"range":{"end":{"character":70,"line":110},"start":{"character":2,"line":109}}},{"codeRange":{"end":{"character":78,"line":111},"start":{"character":22,"line":111}},"element":{"kind":"FIELD","name":"analysisDriverLogAliasOption","range":{"end":{"character":50,"line":111},"start":{"character":22,"line":111}},"returnType":"String"},"range":{"end":{"character":79,"line":111},"start":{"character":2,"line":111}}},{"codeRange":{"end":{"character":62,"line":116},"start":{"character":22,"line":116}},"element":{"kind":"FIELD","name":"diagnosticPortOption","range":{"end":{"character":42,"line":116},"start":{"character":22,"line":116}},"returnType":"String"},"range":{"end":{"character":63,"line":116},"start":{"character":2,"line":113}}},{"codeRange":{"end":{"character":56,"line":117},"start":{"character":22,"line":117}},"element":{"kind":"FIELD","name":"diagnosticPortAliasOption","range":{"end":{"character":47,"line":117},"start":{"character":22,"line":117}},"returnType":"String"},"range":{"end":{"character":57,"line":117},"start":{"character":2,"line":117}}},{"codeRange":{"end":{"character":48,"line":120},"start":{"character":22,"line":120}},"element":{"kind":"FIELD","name":"dartSdkOption","range":{"end":{"character":35,"line":120},"start":{"character":22,"line":120}},"returnType":"String"},"range":{"end":{"character":49,"line":120},"start":{"character":2,"line":119}}},{"codeRange":{"end":{"character":48,"line":121},"start":{"character":22,"line":121}},"element":{"kind":"FIELD","name":"dartSdkAliasOption","range":{"end":{"character":40,"line":121},"start":{"character":22,"line":121}},"returnType":"String"},"range":{"end":{"character":49,"line":121},"start":{"character":2,"line":121}}},{"codeRange":{"end":{"character":49,"line":124},"start":{"character":22,"line":124}},"element":{"kind":"FIELD","name":"cacheFolderOption","range":{"end":{"character":39,"line":124},"start":{"character":22,"line":124}},"returnType":"String"},"range":{"end":{"character":50,"line":124},"start":{"character":2,"line":123}}},{"codeRange":{"end":{"character":53,"line":128},"start":{"character":22,"line":128}},"element":{"kind":"FIELD","name":"packagesFileOption","range":{"end":{"character":40,"line":128},"start":{"character":22,"line":128}},"returnType":"String"},"range":{"end":{"character":54,"line":128},"start":{"character":2,"line":126}}},{"codeRange":{"end":{"character":77,"line":132},"start":{"character":22,"line":132}},"element":{"kind":"FIELD","name":"reportProtocolVersionOption","range":{"end":{"character":49,"line":132},"start":{"character":22,"line":132}},"returnType":"String"},"range":{"end":{"character":78,"line":132},"start":{"character":2,"line":130}}},{"codeRange":{"end":{"character":55,"line":135},"start":{"character":22,"line":135}},"element":{"kind":"FIELD","name":"serverProtocolOption","range":{"end":{"character":42,"line":135},"start":{"character":22,"line":135}},"returnType":"String"},"range":{"end":{"character":56,"line":135},"start":{"character":2,"line":134}}},{"codeRange":{"end":{"character":51,"line":136},"start":{"character":22,"line":136}},"element":{"kind":"FIELD","name":"protocolAnalyzer","range":{"end":{"character":38,"line":136},"start":{"character":22,"line":136}},"returnType":"String"},"range":{"end":{"character":52,"line":136},"start":{"character":2,"line":136}}},{"codeRange":{"end":{"character":41,"line":137},"start":{"character":22,"line":137}},"element":{"kind":"FIELD","name":"protocolLsp","range":{"end":{"character":33,"line":137},"start":{"character":22,"line":137}},"returnType":"String"},"range":{"end":{"character":42,"line":137},"start":{"character":2,"line":137}}},{"codeRange":{"end":{"character":40,"line":140},"start":{"character":22,"line":140}},"element":{"kind":"FIELD","name":"useLspFlag","range":{"end":{"character":32,"line":140},"start":{"character":22,"line":140}},"returnType":"String"},"range":{"end":{"character":41,"line":140},"start":{"character":2,"line":139}}},{"codeRange":{"end":{"character":54,"line":144},"start":{"character":22,"line":144}},"element":{"kind":"FIELD","name":"trainUsingOption","range":{"end":{"character":38,"line":144},"start":{"character":22,"line":144}},"returnType":"String"},"range":{"end":{"character":55,"line":144},"start":{"character":2,"line":142}}},{"codeRange":{"end":{"character":76,"line":147},"start":{"character":22,"line":147}},"element":{"kind":"FIELD","name":"disableFileByteStoreOption","range":{"end":{"character":48,"line":147},"start":{"character":22,"line":147}},"returnType":"String"},"range":{"end":{"character":77,"line":147},"start":{"character":2,"line":146}}},{"codeRange":{"end":{"character":75,"line":150},"start":{"character":22,"line":150}},"element":{"kind":"FIELD","name":"withFineDependenciesOption","range":{"end":{"character":48,"line":150},"start":{"character":22,"line":150}},"returnType":"String"},"range":{"end":{"character":76,"line":150},"start":{"character":2,"line":149}}},{"codeRange":{"end":{"character":44,"line":154},"start":{"character":35,"line":153}},"element":{"kind":"FIELD","name":"crashReportingAttachmentsBuilder","range":{"end":{"character":67,"line":153},"start":{"character":35,"line":153}},"returnType":"CrashReportingAttachmentsBuilder"},"range":{"end":{"character":45,"line":154},"start":{"character":2,"line":152}}},{"codeRange":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}},"element":{"kind":"FIELD","name":"detachableFileSystemManager","range":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}},"returnType":"DetachableFileSystemManager?"},"range":{"end":{"character":59,"line":158},"start":{"character":2,"line":156}}},{"codeRange":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}},"element":{"kind":"FIELD","name":"_instrumentationService","range":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}},"returnType":"InstrumentationService"},"range":{"end":{"character":60,"line":161},"start":{"character":2,"line":160}}},{"codeRange":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}},"element":{"kind":"FIELD","name":"_sessionLogger","range":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}},"returnType":"SessionLogger"},"range":{"end":{"character":42,"line":164},"start":{"character":2,"line":163}}},{"children":[{"codeRange":{"end":{"character":5,"line":261},"start":{"character":4,"line":252}},"element":{"kind":"FUNCTION","name":"shouldSendCallback","parameters":"()","range":{"end":{"character":27,"line":252},"start":{"character":9,"line":252}},"returnType":"bool"},"range":{"end":{"character":5,"line":261},"start":{"character":4,"line":252}}}],"codeRange":{"end":{"character":3,"line":400},"start":{"character":2,"line":171}},"element":{"kind":"METHOD","name":"start","parameters":"(List<String> arguments, {SendPort? sendPort, bool defaultToLsp = false})","range":{"end":{"character":12,"line":171},"start":{"character":7,"line":171}},"returnType":"void"},"range":{"end":{"character":3,"line":400},"start":{"character":2,"line":166}}},{"codeRange":{"end":{"character":3,"line":523},"start":{"character":2,"line":402}},"element":{"kind":"METHOD","name":"startAnalysisServer","parameters":"(ArgResults results, AnalysisServerOptions analysisServerOptions, ArgParser parser, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder, InstrumentationService instrumentationService, SessionLogger sessionLogger, RequestStatisticsHelper requestStatistics, int? diagnosticServerPort, ErrorNotifier errorNotifier, SendPort? sendPort)","range":{"end":{"character":26,"line":402},"start":{"character":7,"line":402}},"returnType":"void"},"range":{"end":{"character":3,"line":523},"start":{"character":2,"line":402}}},{"codeRange":{"end":{"character":3,"line":572},"start":{"character":2,"line":525}},"element":{"kind":"METHOD","name":"startLspServer","parameters":"(ArgResults args, AnalysisServerOptions analysisServerOptions, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, InstrumentationService instrumentationService, SessionLogger sessionLogger, int? diagnosticServerPort, ErrorNotifier errorNotifier)","range":{"end":{"character":21,"line":525},"start":{"character":7,"line":525}},"returnType":"void"},"range":{"end":{"character":3,"line":572},"start":{"character":2,"line":525}}},{"children":[{"codeRange":{"end":{"character":5,"line":592},"start":{"character":4,"line":583}},"element":{"kind":"FUNCTION","name":"errorFunction","parameters":"(Zone self, ZoneDelegate parent, Zone zone, Object exception, StackTrace stackTrace)","range":{"end":{"character":22,"line":583},"start":{"character":9,"line":583}},"returnType":"void"},"range":{"end":{"character":5,"line":592},"start":{"character":4,"line":583}}}],"codeRange":{"end":{"character":3,"line":606},"start":{"character":2,"line":578}},"element":{"kind":"METHOD","name":"_captureExceptions","parameters":"(InstrumentationService service, void Function() callback, {void Function(String line)? print})","range":{"end":{"character":25,"line":578},"start":{"character":7,"line":578}},"returnType":"void"},"range":{"end":{"character":3,"line":606},"start":{"character":2,"line":574}}},{"codeRange":{"end":{"character":3,"line":635},"start":{"character":2,"line":609}},"element":{"kind":"METHOD","name":"_createAnalytics","parameters":"(DartSdk dartSdk, String dartSdkPath, DashTool tool)","range":{"end":{"character":28,"line":609},"start":{"character":12,"line":609}},"returnType":"Analytics"},"range":{"end":{"character":3,"line":635},"start":{"character":2,"line":608}}},{"codeRange":{"end":{"character":3,"line":643},"start":{"character":2,"line":637}},"element":{"kind":"METHOD","name":"_createDefaultSdk","parameters":"(String defaultSdkPath)","range":{"end":{"character":27,"line":637},"start":{"character":10,"line":637}},"returnType":"DartSdk"},"range":{"end":{"character":3,"line":643},"start":{"character":2,"line":637}}},{"codeRange":{"end":{"character":3,"line":650},"start":{"character":2,"line":646}},"element":{"kind":"METHOD","name":"_generateUuidString","parameters":"()","range":{"end":{"character":28,"line":646},"start":{"character":9,"line":646}},"returnType":"String"},"range":{"end":{"character":3,"line":650},"start":{"character":2,"line":645}}},{"codeRange":{"end":{"character":3,"line":701},"start":{"character":2,"line":656}},"element":{"kind":"METHOD","name":"_getArgumentsForAnalytics","parameters":"(ArgResults results)","range":{"end":{"character":40,"line":656},"start":{"character":15,"line":656}},"returnType":"List<String>"},"range":{"end":{"character":3,"line":701},"start":{"character":2,"line":652}}},{"children":[{"codeRange":{"end":{"character":5,"line":711},"start":{"character":4,"line":706}},"element":{"kind":"FUNCTION","name":"tryCandidateArgument","parameters":"(String argumentName)","range":{"end":{"character":29,"line":706},"start":{"character":9,"line":706}},"returnType":"void"},"range":{"end":{"character":5,"line":711},"start":{"character":4,"line":706}}}],"codeRange":{"end":{"character":3,"line":719},"start":{"character":2,"line":703}},"element":{"kind":"METHOD","name":"_getSdkPath","parameters":"(ArgResults args)","range":{"end":{"character":20,"line":703},"start":{"character":9,"line":703}},"returnType":"String"},"range":{"end":{"character":3,"line":719},"start":{"character":2,"line":703}}},{"codeRange":{"end":{"character":3,"line":727},"start":{"character":2,"line":722}},"element":{"kind":"METHOD","name":"_printUsage","parameters":"(ArgParser parser, {bool fromHelp = false})","range":{"end":{"character":18,"line":722},"start":{"character":7,"line":722}},"returnType":"void"},"range":{"end":{"character":3,"line":727},"start":{"character":2,"line":721}}},{"codeRange":{"end":{"character":3,"line":757},"start":{"character":2,"line":730}},"element":{"kind":"METHOD","name":"_readUuid","parameters":"(InstrumentationService service)","range":{"end":{"character":18,"line":730},"start":{"character":9,"line":730}},"returnType":"String"},"range":{"end":{"character":3,"line":757},"start":{"character":2,"line":729}}},{"codeRange":{"end":{"character":3,"line":980},"start":{"character":2,"line":760}},"element":{"kind":"METHOD","name":"createArgParser","parameters":"({int? usageLineLength, bool includeHelpFlag = true, bool defaultToLsp = false})","range":{"end":{"character":34,"line":760},"start":{"character":19,"line":760}},"returnType":"ArgParser"},"range":{"end":{"character":3,"line":980},"start":{"character":2,"line":759}}},{"codeRange":{"end":{"character":3,"line":997},"start":{"character":2,"line":987}},"element":{"kind":"METHOD","name":"_rollLogFiles","parameters":"(String path, int numOld)","range":{"end":{"character":27,"line":987},"start":{"character":14,"line":987}},"returnType":"void"},"range":{"end":{"character":3,"line":997},"start":{"character":2,"line":982}}}],"codeRange":{"end":{"character":1,"line":998},"start":{"character":0,"line":50}},"element":{"kind":"CLASS","name":"Driver","range":{"end":{"character":12,"line":50},"start":{"character":6,"line":50}}},"range":{"end":{"character":1,"line":998},"start":{"character":0,"line":47}}},{"children":[{"codeRange":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}},"element":{"kind":"FIELD","name":"httpServer","range":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}},"returnType":"HttpAnalysisServer"},"range":{"end":{"character":37,"line":1002},"start":{"character":2,"line":1002}}},{"codeRange":{"end":{"character":71,"line":1005},"start":{"character":2,"line":1005}},"element":{"kind":"METHOD","name":"getServerPort","parameters":"()","range":{"end":{"character":27,"line":1005},"start":{"character":14,"line":1005}},"returnType":"Future<int>"},"range":{"end":{"character":71,"line":1005},"start":{"character":2,"line":1004}}},{"codeRange":{"end":{"character":3,"line":1009},"start":{"character":2,"line":1007}},"element":{"kind":"METHOD","name":"startOnPort","parameters":"(int port)","range":{"end":{"character":26,"line":1007},"start":{"character":15,"line":1007}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":1009},"start":{"character":2,"line":1007}}}],"codeRange":{"end":{"character":1,"line":1010},"start":{"character":0,"line":1001}},"element":{"kind":"CLASS","name":"_DiagnosticServerImpl","range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}}},"range":{"end":{"character":1,"line":1010},"start":{"character":0,"line":1000}}}],"codeRange":{"end":{"character":0,"line":1011},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":1011},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":1011},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}}},
+{"time":1763411729762,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5803,"method":"textDocument/documentLink","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411729717}},
+{"time":1763411729762,"kind":"message","sender":"server","receiver":"ide","message":{"id":5799,"jsonrpc":"2.0","result":[]}},
+{"time":1763411729763,"kind":"message","sender":"server","receiver":"ide","message":{"id":5800,"jsonrpc":"2.0","result":[{"children":[{"deprecated":false,"kind":8,"name":"binaryName","range":{"end":{"character":45,"line":52},"start":{"character":15,"line":52}},"selectionRange":{"end":{"character":25,"line":52},"start":{"character":15,"line":52}}},{"deprecated":false,"kind":8,"name":"clientIdOption","range":{"end":{"character":50,"line":55},"start":{"character":22,"line":55}},"selectionRange":{"end":{"character":36,"line":55},"start":{"character":22,"line":55}}},{"deprecated":false,"kind":8,"name":"clientVersionOption","range":{"end":{"character":60,"line":58},"start":{"character":22,"line":58}},"selectionRange":{"end":{"character":41,"line":58},"start":{"character":22,"line":58}}},{"deprecated":false,"kind":8,"name":"disableServerExceptionHandlingOption","range":{"end":{"character":41,"line":62},"start":{"character":22,"line":61}},"selectionRange":{"end":{"character":58,"line":61},"start":{"character":22,"line":61}}},{"deprecated":false,"kind":8,"name":"disableServerFeatureCompletionOption","range":{"end":{"character":41,"line":66},"start":{"character":22,"line":65}},"selectionRange":{"end":{"character":58,"line":65},"start":{"character":22,"line":65}}},{"deprecated":false,"kind":8,"name":"disableServerFeatureSearchOption","range":{"end":{"character":37,"line":70},"start":{"character":22,"line":69}},"selectionRange":{"end":{"character":54,"line":69},"start":{"character":22,"line":69}}},{"deprecated":false,"kind":8,"name":"disableStatusNotificationDebouncingOption","range":{"end":{"character":46,"line":75},"start":{"character":22,"line":74}},"selectionRange":{"end":{"character":63,"line":74},"start":{"character":22,"line":74}}},{"deprecated":false,"kind":8,"name":"disableSilentAnalysisExceptionsOption","range":{"end":{"character":42,"line":80},"start":{"character":22,"line":79}},"selectionRange":{"end":{"character":59,"line":79},"start":{"character":22,"line":79}}},{"deprecated":false,"kind":8,"name":"enableExperimentOption","range":{"end":{"character":66,"line":83},"start":{"character":22,"line":83}},"selectionRange":{"end":{"character":44,"line":83},"start":{"character":22,"line":83}}},{"deprecated":false,"kind":8,"name":"helpFlag","range":{"end":{"character":39,"line":86},"start":{"character":22,"line":86}},"selectionRange":{"end":{"character":30,"line":86},"start":{"character":22,"line":86}}},{"deprecated":false,"kind":8,"name":"analyticsFlag","range":{"end":{"character":49,"line":89},"start":{"character":22,"line":89}},"selectionRange":{"end":{"character":35,"line":89},"start":{"character":22,"line":89}}},{"deprecated":false,"kind":8,"name":"suppressAnalyticsFlag","range":{"end":{"character":66,"line":92},"start":{"character":22,"line":92}},"selectionRange":{"end":{"character":43,"line":92},"start":{"character":22,"line":92}}},{"deprecated":false,"kind":8,"name":"protocolTrafficLogOption","range":{"end":{"character":71,"line":96},"start":{"character":22,"line":96}},"selectionRange":{"end":{"character":46,"line":96},"start":{"character":22,"line":96}}},{"deprecated":false,"kind":8,"name":"protocolTrafficLogAliasOption","range":{"end":{"character":32,"line":98},"start":{"character":22,"line":97}},"selectionRange":{"end":{"character":51,"line":97},"start":{"character":22,"line":97}}},{"deprecated":false,"kind":8,"name":"sessionLogOption","range":{"end":{"character":54,"line":102},"start":{"character":22,"line":102}},"selectionRange":{"end":{"character":38,"line":102},"start":{"character":22,"line":102}}},{"deprecated":false,"kind":8,"name":"internalPrintToConsoleOption","range":{"end":{"character":33,"line":107},"start":{"character":22,"line":106}},"selectionRange":{"end":{"character":50,"line":106},"start":{"character":22,"line":106}}},{"deprecated":false,"kind":8,"name":"analysisDriverLogOption","range":{"end":{"character":69,"line":110},"start":{"character":22,"line":110}},"selectionRange":{"end":{"character":45,"line":110},"start":{"character":22,"line":110}}},{"deprecated":false,"kind":8,"name":"analysisDriverLogAliasOption","range":{"end":{"character":78,"line":111},"start":{"character":22,"line":111}},"selectionRange":{"end":{"character":50,"line":111},"start":{"character":22,"line":111}}},{"deprecated":false,"kind":8,"name":"diagnosticPortOption","range":{"end":{"character":62,"line":116},"start":{"character":22,"line":116}},"selectionRange":{"end":{"character":42,"line":116},"start":{"character":22,"line":116}}},{"deprecated":false,"kind":8,"name":"diagnosticPortAliasOption","range":{"end":{"character":56,"line":117},"start":{"character":22,"line":117}},"selectionRange":{"end":{"character":47,"line":117},"start":{"character":22,"line":117}}},{"deprecated":false,"kind":8,"name":"dartSdkOption","range":{"end":{"character":48,"line":120},"start":{"character":22,"line":120}},"selectionRange":{"end":{"character":35,"line":120},"start":{"character":22,"line":120}}},{"deprecated":false,"kind":8,"name":"dartSdkAliasOption","range":{"end":{"character":48,"line":121},"start":{"character":22,"line":121}},"selectionRange":{"end":{"character":40,"line":121},"start":{"character":22,"line":121}}},{"deprecated":false,"kind":8,"name":"cacheFolderOption","range":{"end":{"character":49,"line":124},"start":{"character":22,"line":124}},"selectionRange":{"end":{"character":39,"line":124},"start":{"character":22,"line":124}}},{"deprecated":false,"kind":8,"name":"packagesFileOption","range":{"end":{"character":53,"line":128},"start":{"character":22,"line":128}},"selectionRange":{"end":{"character":40,"line":128},"start":{"character":22,"line":128}}},{"deprecated":false,"kind":8,"name":"reportProtocolVersionOption","range":{"end":{"character":77,"line":132},"start":{"character":22,"line":132}},"selectionRange":{"end":{"character":49,"line":132},"start":{"character":22,"line":132}}},{"deprecated":false,"kind":8,"name":"serverProtocolOption","range":{"end":{"character":55,"line":135},"start":{"character":22,"line":135}},"selectionRange":{"end":{"character":42,"line":135},"start":{"character":22,"line":135}}},{"deprecated":false,"kind":8,"name":"protocolAnalyzer","range":{"end":{"character":51,"line":136},"start":{"character":22,"line":136}},"selectionRange":{"end":{"character":38,"line":136},"start":{"character":22,"line":136}}},{"deprecated":false,"kind":8,"name":"protocolLsp","range":{"end":{"character":41,"line":137},"start":{"character":22,"line":137}},"selectionRange":{"end":{"character":33,"line":137},"start":{"character":22,"line":137}}},{"deprecated":false,"kind":8,"name":"useLspFlag","range":{"end":{"character":40,"line":140},"start":{"character":22,"line":140}},"selectionRange":{"end":{"character":32,"line":140},"start":{"character":22,"line":140}}},{"deprecated":false,"kind":8,"name":"trainUsingOption","range":{"end":{"character":54,"line":144},"start":{"character":22,"line":144}},"selectionRange":{"end":{"character":38,"line":144},"start":{"character":22,"line":144}}},{"deprecated":false,"kind":8,"name":"disableFileByteStoreOption","range":{"end":{"character":76,"line":147},"start":{"character":22,"line":147}},"selectionRange":{"end":{"character":48,"line":147},"start":{"character":22,"line":147}}},{"deprecated":false,"kind":8,"name":"withFineDependenciesOption","range":{"end":{"character":75,"line":150},"start":{"character":22,"line":150}},"selectionRange":{"end":{"character":48,"line":150},"start":{"character":22,"line":150}}},{"deprecated":false,"kind":8,"name":"crashReportingAttachmentsBuilder","range":{"end":{"character":44,"line":154},"start":{"character":35,"line":153}},"selectionRange":{"end":{"character":67,"line":153},"start":{"character":35,"line":153}}},{"deprecated":false,"kind":8,"name":"detachableFileSystemManager","range":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}},"selectionRange":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}}},{"deprecated":false,"kind":8,"name":"_instrumentationService","range":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}},"selectionRange":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}}},{"deprecated":false,"kind":8,"name":"_sessionLogger","range":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}},"selectionRange":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}}},{"children":[{"deprecated":false,"detail":"()","kind":12,"name":"shouldSendCallback","range":{"end":{"character":5,"line":261},"start":{"character":4,"line":252}},"selectionRange":{"end":{"character":27,"line":252},"start":{"character":9,"line":252}}}],"deprecated":false,"detail":"(List<String> arguments, {SendPort? sendPort, bool defaultToLsp = false})","kind":6,"name":"start","range":{"end":{"character":3,"line":400},"start":{"character":2,"line":171}},"selectionRange":{"end":{"character":12,"line":171},"start":{"character":7,"line":171}}},{"deprecated":false,"detail":"(ArgResults results, AnalysisServerOptions analysisServerOptions, ArgParser parser, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder, InstrumentationService instrumentationService, SessionLogger sessionLogger, RequestStatisticsHelper requestStatistics, int? diagnosticServerPort, ErrorNotifier errorNotifier, SendPort? sendPort)","kind":6,"name":"startAnalysisServer","range":{"end":{"character":3,"line":523},"start":{"character":2,"line":402}},"selectionRange":{"end":{"character":26,"line":402},"start":{"character":7,"line":402}}},{"deprecated":false,"detail":"(ArgResults args, AnalysisServerOptions analysisServerOptions, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, InstrumentationService instrumentationService, SessionLogger sessionLogger, int? diagnosticServerPort, ErrorNotifier errorNotifier)","kind":6,"name":"startLspServer","range":{"end":{"character":3,"line":572},"start":{"character":2,"line":525}},"selectionRange":{"end":{"character":21,"line":525},"start":{"character":7,"line":525}}},{"children":[{"deprecated":false,"detail":"(Zone self, ZoneDelegate parent, Zone zone, Object exception, StackTrace stackTrace)","kind":12,"name":"errorFunction","range":{"end":{"character":5,"line":592},"start":{"character":4,"line":583}},"selectionRange":{"end":{"character":22,"line":583},"start":{"character":9,"line":583}}}],"deprecated":false,"detail":"(InstrumentationService service, void Function() callback, {void Function(String line)? print})","kind":6,"name":"_captureExceptions","range":{"end":{"character":3,"line":606},"start":{"character":2,"line":578}},"selectionRange":{"end":{"character":25,"line":578},"start":{"character":7,"line":578}}},{"deprecated":false,"detail":"(DartSdk dartSdk, String dartSdkPath, DashTool tool)","kind":6,"name":"_createAnalytics","range":{"end":{"character":3,"line":635},"start":{"character":2,"line":609}},"selectionRange":{"end":{"character":28,"line":609},"start":{"character":12,"line":609}}},{"deprecated":false,"detail":"(String defaultSdkPath)","kind":6,"name":"_createDefaultSdk","range":{"end":{"character":3,"line":643},"start":{"character":2,"line":637}},"selectionRange":{"end":{"character":27,"line":637},"start":{"character":10,"line":637}}},{"deprecated":false,"detail":"()","kind":6,"name":"_generateUuidString","range":{"end":{"character":3,"line":650},"start":{"character":2,"line":646}},"selectionRange":{"end":{"character":28,"line":646},"start":{"character":9,"line":646}}},{"deprecated":false,"detail":"(ArgResults results)","kind":6,"name":"_getArgumentsForAnalytics","range":{"end":{"character":3,"line":701},"start":{"character":2,"line":656}},"selectionRange":{"end":{"character":40,"line":656},"start":{"character":15,"line":656}}},{"children":[{"deprecated":false,"detail":"(String argumentName)","kind":12,"name":"tryCandidateArgument","range":{"end":{"character":5,"line":711},"start":{"character":4,"line":706}},"selectionRange":{"end":{"character":29,"line":706},"start":{"character":9,"line":706}}}],"deprecated":false,"detail":"(ArgResults args)","kind":6,"name":"_getSdkPath","range":{"end":{"character":3,"line":719},"start":{"character":2,"line":703}},"selectionRange":{"end":{"character":20,"line":703},"start":{"character":9,"line":703}}},{"deprecated":false,"detail":"(ArgParser parser, {bool fromHelp = false})","kind":6,"name":"_printUsage","range":{"end":{"character":3,"line":727},"start":{"character":2,"line":722}},"selectionRange":{"end":{"character":18,"line":722},"start":{"character":7,"line":722}}},{"deprecated":false,"detail":"(InstrumentationService service)","kind":6,"name":"_readUuid","range":{"end":{"character":3,"line":757},"start":{"character":2,"line":730}},"selectionRange":{"end":{"character":18,"line":730},"start":{"character":9,"line":730}}},{"deprecated":false,"detail":"({int? usageLineLength, bool includeHelpFlag = true, bool defaultToLsp = false})","kind":6,"name":"createArgParser","range":{"end":{"character":3,"line":980},"start":{"character":2,"line":760}},"selectionRange":{"end":{"character":34,"line":760},"start":{"character":19,"line":760}}},{"deprecated":false,"detail":"(String path, int numOld)","kind":6,"name":"_rollLogFiles","range":{"end":{"character":3,"line":997},"start":{"character":2,"line":987}},"selectionRange":{"end":{"character":27,"line":987},"start":{"character":14,"line":987}}}],"deprecated":false,"kind":5,"name":"Driver","range":{"end":{"character":1,"line":998},"start":{"character":0,"line":50}},"selectionRange":{"end":{"character":12,"line":50},"start":{"character":6,"line":50}}},{"children":[{"deprecated":false,"kind":8,"name":"httpServer","range":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}},"selectionRange":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}}},{"deprecated":false,"detail":"()","kind":6,"name":"getServerPort","range":{"end":{"character":71,"line":1005},"start":{"character":2,"line":1005}},"selectionRange":{"end":{"character":27,"line":1005},"start":{"character":14,"line":1005}}},{"deprecated":false,"detail":"(int port)","kind":6,"name":"startOnPort","range":{"end":{"character":3,"line":1009},"start":{"character":2,"line":1007}},"selectionRange":{"end":{"character":26,"line":1007},"start":{"character":15,"line":1007}}}],"deprecated":false,"kind":5,"name":"_DiagnosticServerImpl","range":{"end":{"character":1,"line":1010},"start":{"character":0,"line":1001}},"selectionRange":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}}}]}},
+{"time":1763411729764,"kind":"message","sender":"server","receiver":"ide","message":{"id":5801,"jsonrpc":"2.0","result":{"data":[0,0,76,3,0,1,0,77,3,0,1,0,59,3,0,2,0,6,1,0,0,7,12,16,0,1,0,6,1,0,0,7,9,16,0,1,0,6,1,0,0,7,14,16,0,1,0,6,1,0,0,7,11,16,0,2,0,6,1,0,0,7,58,16,0,1,4,4,1,0,0,5,16,5,4,1,0,6,1,0,0,7,62,16,0,1,0,6,1,0,0,7,57,16,0,1,0,6,1,0,0,7,56,16,0,1,0,6,1,0,0,7,57,16,0,1,0,6,1,0,0,7,69,16,0,1,0,6,1,0,0,7,71,16,0,1,0,6,1,0,0,7,52,16,0,1,0,6,1,0,0,7,59,16,0,1,0,6,1,0,0,7,56,16,0,1,0,6,1,0,0,7,50,16,0,1,0,6,1,0,0,7,53,16,0,1,0,6,1,0,0,7,65,16,0,1,0,6,1,0,0,7,58,16,0,1,0,6,1,0,0,7,59,16,0,1,0,6,1,0,0,7,54,16,0,1,0,6,1,0,0,7,70,16,0,1,0,6,1,0,0,7,67,16,0,1,0,6,1,0,0,7,64,16,0,1,0,6,1,0,0,7,69,16,0,1,0,6,1,0,0,7,48,16,0,1,0,6,1,0,0,7,63,16,0,1,0,6,1,0,0,7,38,16,0,1,0,6,1,0,0,7,56,16,0,1,0,6,1,0,0,7,60,16,0,1,0,6,1,0,0,7,55,16,0,1,0,6,1,0,0,7,40,16,0,1,0,6,1,0,0,7,44,16,0,1,0,6,1,0,0,7,41,16,0,1,0,6,1,0,0,7,36,16,0,1,0,6,1,0,0,7,24,16,0,1,0,6,1,0,0,7,31,16,0,0,32,2,1,0,0,3,6,5,8,1,0,6,1,0,0,7,40,16,0,1,0,6,1,0,0,7,50,16,0,2,0,6,1,0,0,7,49,16,0,2,0,9,3,1,0,9,6,2,0,0,6,60,3,1,1,0,75,3,1,1,0,47,3,1,1,0,5,1,0,0,6,6,2,4,0,7,10,1,0,0,11,13,2,0,1,2,63,3,1,1,2,6,1,0,0,7,5,1,0,0,6,10,5,36,0,13,17,16,0,2,2,69,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,14,5,36,0,17,11,16,0,2,2,66,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,19,5,36,0,22,16,16,0,2,2,62,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,36,5,36,1,6,35,16,0,2,2,61,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,36,5,36,1,6,35,16,0,2,2,57,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,32,5,36,1,6,31,16,0,2,2,71,3,1,1,2,18,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,41,5,36,1,6,40,16,0,2,2,75,3,1,1,2,11,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,37,5,36,1,6,36,16,0,2,2,67,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,22,5,36,0,25,19,16,0,2,2,59,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,8,5,36,0,11,6,16,0,2,2,70,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,13,5,36,0,16,11,16,0,2,2,76,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,21,5,36,0,24,20,16,0,2,2,78,3,1,1,2,17,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,24,5,36,0,27,22,16,0,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,29,5,36,1,6,26,16,0,2,2,78,3,1,1,2,11,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,16,5,36,0,19,13,16,0,2,2,47,3,1,0,47,5,17,0,0,5,21,3,1,1,2,41,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,28,5,36,1,6,27,16,0,2,2,75,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,23,5,36,0,26,21,16,0,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,28,5,36,0,31,25,16,0,2,2,67,3,1,1,2,76,3,1,1,2,58,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,20,5,36,0,23,17,16,0,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,25,5,36,0,28,6,16,0,2,2,63,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,13,5,36,0,16,10,16,0,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,18,5,36,0,21,5,16,0,2,2,70,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,17,5,36,0,20,7,16,0,2,2,78,3,1,1,2,13,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,18,5,36,0,21,10,16,0,2,2,77,3,1,1,2,37,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,27,5,36,0,30,25,16,0,2,2,65,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,20,5,36,0,23,10,16,0,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,16,5,36,0,19,10,16,0,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,11,5,36,0,14,5,16,0,2,2,67,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,10,5,36,0,13,5,16,0,2,2,75,3,1,1,2,38,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,16,5,36,0,19,13,16,0,2,2,46,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,26,5,36,0,29,25,16,0,2,2,61,3,1,1,2,6,1,0,0,7,5,1,0,0,6,6,2,0,0,7,26,5,36,0,29,24,16,0,2,2,75,3,1,1,2,32,2,0,0,33,32,5,20,1,6,32,2,0,0,33,5,11,32,2,2,70,3,1,1,2,14,3,1,1,2,27,2,0,0,29,27,5,20,2,2,74,3,1,1,2,4,1,0,0,5,5,1,0,0,6,22,2,0,0,23,23,5,20,2,2,23,3,1,1,2,4,1,0,0,5,5,1,0,0,6,13,2,0,0,14,14,5,20,2,2,32,3,1,0,32,9,6,0,0,9,23,3,1,1,2,3,3,1,1,2,8,3,1,0,8,8,6,0,0,8,62,3,1,1,2,59,3,1,1,2,1,0,0,0,1,8,11,128,1,2,4,1,2048,0,5,5,4,20,1,4,4,2,0,0,5,6,2,0,0,8,9,6,4,1,4,8,2,0,0,10,8,6,4,1,4,4,2,0,0,5,12,6,4,0,15,5,14,0,2,4,3,1,0,0,4,16,5,4,0,19,8,2,2,0,9,3,4,2,1,4,3,1,0,0,4,6,5,4,0,9,15,4,32,0,16,12,6,512,0,14,12,6,0,1,4,3,1,0,0,4,7,5,4,0,10,6,5,0,0,7,5,4,16,0,6,9,6,0,2,4,3,1,0,0,4,21,5,4,0,24,21,2,2,1,4,21,5,0,0,22,20,11,16,1,8,7,5,0,0,8,6,4,16,0,7,23,11,32,1,8,7,5,0,0,8,6,4,16,0,7,28,11,32,1,4,2,1,256,0,4,7,5,0,0,8,9,4,16,0,10,10,11,32,1,6,21,5,0,0,22,25,11,16,0,28,7,5,0,0,8,4,4,16,1,8,10,11,32,2,6,4,1,256,1,6,21,5,0,0,22,25,11,16,1,10,7,5,0,0,8,6,4,16,0,7,20,11,32,0,25,11,11,32,2,4,74,3,0,1,4,53,3,0,1,4,3,1,0,0,4,8,5,4,1,8,7,5,0,0,8,6,4,16,0,7,14,11,32,1,9,21,5,0,0,22,25,11,16,1,14,20,16,0,1,14,24,16,0,1,4,21,5,0,0,22,8,11,16,0,11,8,5,0,1,4,21,5,0,0,22,13,11,16,0,16,7,5,0,0,8,6,4,16,0,7,19,11,32,1,4,21,5,0,0,22,11,11,16,0,14,7,5,0,0,8,6,4,16,0,7,17,11,32,1,4,21,5,0,0,22,12,11,16,0,15,7,5,0,0,8,6,4,16,0,7,18,11,32,1,4,21,5,0,0,22,21,11,16,0,24,7,5,0,0,8,6,4,16,1,6,27,11,32,2,4,21,5,0,0,22,20,11,16,0,23,7,5,0,0,8,4,4,16,1,6,26,11,32,3,4,21,5,0,0,22,18,11,16,0,21,7,5,0,0,8,11,4,16,1,6,22,11,32,3,4,73,3,0,1,4,3,1,0,0,4,9,5,4,0,12,16,2,2,0,17,11,4,2,1,4,21,5,0,0,22,22,11,16,0,25,9,5,0,2,4,34,3,0,1,4,3,1,0,0,4,26,5,4,0,29,7,5,0,0,8,4,4,16,0,5,21,11,32,2,4,2,1,256,0,4,7,5,0,0,8,9,4,16,0,10,16,11,32,1,6,26,5,0,0,29,4,14,0,3,4,3,1,0,0,4,14,5,4,0,17,11,4,16,0,12,7,5,0,1,4,3,1,0,0,4,14,5,4,0,17,14,2,2,0,15,14,5,0,2,4,71,3,0,1,4,75,3,0,1,4,74,3,0,1,4,3,1,0,0,4,10,5,4,0,13,17,4,16,0,18,14,5,0,2,4,32,3,0,1,4,9,2,0,0,10,9,5,4,1,4,2,1,256,0,4,26,5,0,1,6,9,5,0,0,12,13,2,2,1,6,4,1,256,1,6,3,1,0,0,4,4,5,4,0,7,6,1,0,0,8,8,5,0,1,8,9,16,0,0,13,16,16,0,0,20,8,7,0,0,9,13,8,0,1,8,15,16,0,0,19,8,7,0,0,9,15,8,0,1,8,16,16,0,0,20,8,7,0,0,9,20,8,0,1,8,1,5,4100,0,5,4,1,0,2,6,2,1,256,0,4,4,5,0,0,8,4,1,0,1,8,9,5,0,0,12,16,4,16,0,17,10,5,0,0,12,14,5,0,0,16,4,5,0,1,8,4,1,256,1,8,9,5,0,0,12,13,2,2,3,4,3,1,0,0,4,16,5,4,0,19,16,2,2,0,17,9,5,0,2,4,4,2,0,0,5,18,17,4,1,6,52,3,0,1,6,2,1,256,0,4,9,5,0,0,10,26,11,16,0,30,4,14,0,1,8,6,1,256,0,7,4,14,0,3,6,69,3,0,1,6,30,3,0,1,6,6,1,256,0,7,16,5,0,0,17,9,11,16,0,10,8,11,16,3,4,18,3,0,2,4,59,3,0,1,4,3,1,0,0,4,14,5,4,0,17,9,5,0,0,10,16,11,16,0,20,22,16,0,1,4,3,1,0,0,4,17,5,4,0,20,17,2,2,0,18,4,4,2,1,6,14,5,0,1,6,18,17,0,4,6,3,1,0,0,4,17,5,4,0,20,7,5,0,0,8,4,4,16,1,8,36,11,32,2,6,3,1,0,0,4,13,5,4,0,16,7,5,0,0,8,4,4,16,0,5,32,11,32,1,6,2,1,256,0,4,17,5,0,0,21,13,5,0,1,8,21,5,0,0,22,10,11,16,0,13,10,2,2,1,10,10,6,512,0,13,17,5,0,1,10,6,6,512,0,9,13,5,0,5,4,2,1,256,0,4,7,5,0,0,8,4,4,16,0,5,8,11,32,1,6,11,4,16,0,12,6,5,0,0,8,8,6,512,0,10,4,14,0,1,6,6,1,256,3,4,35,3,0,1,4,16,5,0,0,17,7,4,16,1,6,4,6,512,0,6,16,5,0,1,6,9,6,512,0,11,25,4,16,0,26,7,5,0,1,6,8,6,512,0,10,8,5,0,1,6,13,6,512,0,15,21,5,0,0,22,13,11,16,2,4,2,3,0,1,4,42,3,0,1,4,2,3,0,1,4,3,1,0,0,4,11,5,4,1,8,7,5,0,0,8,6,4,16,0,7,24,11,32,1,8,7,5,0,0,8,6,4,16,0,7,29,11,32,1,4,3,1,0,0,4,26,5,4,0,30,22,2,0,1,4,2,1,256,0,4,11,5,0,0,15,4,1,0,1,6,13,4,32,0,14,11,5,0,0,13,1,15,0,1,6,26,5,0,0,27,3,4,16,1,8,25,2,2,1,10,25,2,2,0,26,11,5,0,1,10,24,6,512,0,27,11,5,0,5,4,3,1,0,0,4,13,5,4,0,16,13,2,2,1,4,26,5,0,0,27,3,4,16,0,4,13,5,0,1,4,26,5,0,0,27,3,4,16,1,6,29,2,2,0,30,17,5,0,2,4,23,11,16,0,26,31,2,2,1,6,26,5,0,3,4,23,11,16,0,24,10,4,16,1,6,7,5,0,0,8,6,4,16,0,7,16,11,32,0,21,4,1,0,1,12,12,16,0,1,12,9,4,16,0,10,23,11,16,1,6,21,5,0,0,22,8,11,16,0,12,2,16,0,1,6,21,5,0,0,22,13,11,16,0,17,2,16,0,1,6,16,11,0,1,6,10,5,0,0,11,15,11,16,0,16,8,4,16,2,4,14,2,0,0,15,8,11,32,0,9,22,11,16,0,25,23,11,16,2,4,42,3,0,1,4,3,1,0,0,4,18,5,4,0,21,7,5,0,0,8,6,4,16,0,7,16,11,32,1,4,14,11,16,0,17,13,2,2,1,4,3,1,0,0,4,12,5,4,0,15,25,2,2,0,26,15,6,512,0,17,3,15,0,1,4,14,11,16,0,15,4,11,16,0,7,12,5,0,1,4,2,1,256,0,4,18,5,0,0,22,4,1,0,1,6,12,5,0,0,13,10,11,16,0,13,21,2,2,0,22,18,5,0,2,4,14,11,16,0,15,14,4,16,0,15,9,6,512,0,11,9,6,0,2,4,3,2,0,0,5,20,5,4,1,4,3,1,0,0,4,9,5,4,1,8,7,5,0,0,8,6,4,16,0,7,20,11,32,1,8,7,5,0,0,8,6,4,16,0,7,25,11,32,1,4,2,1,256,0,4,9,5,0,0,13,4,1,0,1,6,3,1,256,1,8,20,5,0,0,23,3,2,0,0,4,5,4,32,0,6,9,5,0,1,8,2,1,256,0,3,15,2,0,1,8,5,17,0,0,6,22,16,0,0,22,1,10,1024,0,1,9,5,0,0,9,1,16,0,1,8,5,17,0,0,6,2,16,0,1,8,11,4,16,0,12,6,5,0,1,8,8,11,0,0,11,1,15,0,1,8,6,1,256,4,4,67,3,0,1,4,57,3,0,1,4,83,3,0,1,4,2,1,256,0,4,21,5,0,0,22,25,11,16,1,6,2,1,256,0,4,8,6,0,0,12,4,1,0,1,8,5,1,256,0,6,18,2,2,1,10,53,16,0,3,6,14,4,16,1,8,7,5,0,1,8,21,5,0,1,8,14,5,0,1,8,16,5,0,1,8,23,11,16,1,8,14,11,16,1,8,20,5,0,1,8,13,5,0,2,6,4,1,256,1,6,19,4,16,1,8,7,5,0,1,8,21,5,0,1,8,6,5,0,1,8,14,5,0,1,8,16,5,0,1,8,32,11,16,1,8,23,11,16,1,8,14,11,16,1,8,23,2,2,1,8,20,5,0,1,8,13,5,0,1,8,8,6,0,4,4,28,17,0,1,6,9,6,0,1,7,16,6,4,0,21,16,5,0,0,17,15,4,16,0,16,16,6,0,4,2,4,1,2048,0,5,19,4,20,1,4,10,2,0,0,11,7,6,4,1,4,21,2,0,0,22,21,6,4,1,4,9,2,0,0,10,6,6,4,1,4,14,2,0,0,15,14,6,4,1,4,16,2,0,0,17,16,6,4,1,4,32,2,0,0,33,32,6,4,1,4,22,2,0,0,23,22,6,4,1,4,13,2,0,0,14,13,6,4,1,4,23,2,0,0,24,17,6,4,1,4,3,2,0,0,5,20,6,4,1,4,13,2,0,0,14,13,6,4,1,4,8,2,0,0,10,8,6,4,2,4,3,1,0,0,4,7,5,4,0,10,7,6,0,0,8,4,4,16,0,5,36,11,32,1,11,1,6,4100,0,3,8,2,0,0,9,1,6,4,0,4,4,1,2048,0,5,8,1,0,0,9,6,2,0,0,9,5,6,4,0,11,1,6,0,1,10,18,4,16,1,4,3,1,0,0,4,14,5,4,0,17,7,6,0,0,8,6,4,16,0,7,16,11,32,1,4,2,1,256,0,4,14,5,0,0,18,4,1,0,1,6,2,1,256,0,5,16,2,0,0,17,15,4,32,0,16,14,5,0,1,8,5,17,0,0,6,21,16,0,0,21,1,10,1024,0,1,14,5,0,0,14,12,16,0,0,12,2,16,64,0,2,1,16,0,1,8,8,11,0,0,11,1,15,0,1,8,6,1,256,3,4,6,5,8,0,7,17,17,0,1,4,31,17,0,1,4,28,17,0,2,4,3,1,0,0,4,16,5,4,0,19,21,2,2,2,4,2,3,0,1,4,55,3,0,1,4,2,3,0,1,4,3,1,0,0,4,12,5,4,0,15,12,2,2,1,6,21,6,0,1,6,14,6,0,1,6,32,6,0,1,6,22,6,0,1,6,13,6,0,1,6,17,6,0,1,6,16,5,0,1,6,16,6,0,1,6,27,11,16,3,4,16,5,0,0,17,10,11,16,0,13,18,2,2,0,19,12,5,0,1,4,2,1,256,0,4,20,6,0,0,24,4,1,0,1,6,16,5,0,0,17,11,4,16,0,12,20,6,0,3,4,2,1,256,0,4,14,5,0,0,18,4,1,0,1,6,2,1,256,0,4,8,6,0,0,12,4,1,0,1,8,5,1,256,0,6,18,2,2,1,10,51,16,0,3,6,3,1,0,0,4,13,5,4,0,16,9,2,0,0,10,10,11,32,0,11,14,4,16,1,8,18,16,0,2,6,21,6,0,0,22,11,11,16,0,14,13,5,0,0,14,4,11,16,1,6,21,6,0,0,22,20,11,16,0,23,7,6,0,0,8,4,4,16,1,8,26,11,32,3,6,3,1,0,0,4,9,5,4,0,12,17,2,2,0,18,12,5,0,1,6,9,5,0,0,10,10,4,16,2,9,5,1,256,1,8,52,3,0,1,8,5,17,0,0,6,39,16,0,1,8,3,1,0,0,4,8,5,4,0,11,5,1,256,0,6,9,5,0,0,10,18,4,16,0,20,14,5,0,1,8,2,1,256,0,4,8,5,0,0,12,1,15,0,0,3,4,17,0,0,5,8,5,0,2,8,5,17,0,0,6,2,16,0,2,8,37,3,0,1,8,5,17,0,0,6,42,16,0,1,8,8,5,0,0,11,5,1,256,0,6,9,5,0,0,10,18,4,16,0,20,14,5,0,1,8,2,1,256,0,4,8,5,0,0,12,1,15,0,0,3,4,17,0,0,5,8,5,0,2,8,16,5,0,0,17,10,11,16,0,11,5,4,16,1,8,5,1,256,0,6,22,6,0,0,23,8,4,16,1,8,9,17,0,0,10,12,5,0,0,13,14,11,16,0,16,8,4,16,2,8,3,1,256,1,10,13,5,0,0,14,10,4,16,0,11,9,6,512,0,11,4,14,0,1,10,5,1,256,0,7,1,5,4100,1,10,24,3,0,3,8,4,17,0,0,5,8,5,0,2,6,4,1,256,1,6,7,5,0,1,8,22,6,0,2,10,6,2,0,0,7,4,1,2048,0,6,11,5,4,1,10,2,1,256,0,4,8,6,0,0,12,4,1,0,1,12,3,1,0,0,4,11,5,4,0,14,19,2,2,0,20,12,5,0,1,12,11,5,0,0,14,11,5,0,0,12,10,4,16,1,12,4,1,256,1,12,3,1,0,0,4,21,5,4,0,24,21,2,2,0,22,12,5,0,1,12,11,5,0,0,14,21,5,0,0,22,12,4,16,0,13,8,6,0,2,10,13,6,0,0,14,6,11,16,0,9,12,5,0,0,13,14,11,16,1,10,2,1,256,0,4,7,6,0,0,8,4,4,16,0,5,37,11,32,1,12,13,6,0,0,14,28,11,16,0,31,4,14,0,2,10,11,5,0,0,12,4,4,16,0,6,1,6,4100,0,3,5,1,256,1,12,16,5,0,0,17,10,11,16,0,11,5,4,16,1,12,5,1,256,0,6,22,6,0,0,23,8,4,16,1,12,9,17,0,0,10,12,5,0,0,13,14,11,16,0,16,8,4,16,1,12,2,1,256,0,4,8,6,0,0,12,4,1,0,0,6,4,17,0,0,5,1,15,0,3,8,5,6,512,0,7,7,6,0,0,8,4,4,16,0,5,28,11,32,1,14,4,1,0,1,14,16,5,0,0,17,10,11,16,0,11,11,4,16,5,2,4,1,2048,0,5,14,4,20,1,4,10,2,0,0,11,4,6,4,1,4,21,2,0,0,22,21,6,4,1,4,14,2,0,0,15,14,6,4,1,4,16,2,0,0,17,16,6,4,1,4,22,2,0,0,23,22,6,4,1,4,13,2,0,0,14,13,6,4,1,4,3,2,0,0,5,20,6,4,1,4,13,2,0,0,14,13,6,4,2,4,3,1,0,0,4,7,5,4,0,10,4,6,0,0,5,4,4,16,0,5,36,11,32,1,11,1,6,4100,0,3,8,2,0,0,9,1,6,4,0,4,4,1,2048,0,5,8,1,0,0,9,6,2,0,0,9,5,6,4,0,11,1,6,0,1,10,18,4,16,2,4,6,5,8,0,7,17,17,0,1,4,31,17,0,1,4,28,17,0,2,4,3,1,0,0,4,16,5,4,0,19,21,2,2,2,4,3,1,0,0,4,12,5,4,0,15,15,2,2,1,6,21,6,0,1,6,16,5,0,1,6,16,6,0,1,6,14,6,0,1,6,22,6,0,1,6,13,6,0,1,6,27,11,16,2,4,13,6,0,0,14,6,11,16,0,9,12,5,0,0,13,14,11,16,1,4,16,5,0,0,17,10,11,16,0,13,18,2,2,0,19,12,5,0,2,4,2,1,256,0,4,20,6,0,0,24,4,1,0,1,6,16,5,0,0,17,11,4,16,0,12,20,6,0,3,4,7,5,0,0,8,22,6,0,1,6,3,1,0,0,4,11,5,4,0,14,22,2,2,0,23,12,5,0,1,6,11,5,0,0,12,10,4,16,0,13,4,4,16,0,6,1,6,4100,1,8,65,3,0,1,8,25,3,0,1,8,2,1,256,0,5,12,5,0,0,13,14,11,16,0,16,8,11,16,1,10,9,17,0,0,10,12,5,0,0,13,14,11,16,0,16,8,4,16,1,10,4,17,0,0,5,1,15,0,6,2,23,3,1,0,23,8,6,0,0,8,47,3,1,1,2,76,3,1,1,2,21,3,1,0,21,7,6,0,0,7,9,3,1,0,9,5,6,0,0,5,33,3,1,1,2,77,3,1,1,2,4,1,2048,0,5,18,4,20,1,4,22,2,0,0,23,7,6,4,1,4,4,1,2048,0,5,8,1,0,0,11,8,6,4,1,4,4,1,2048,0,5,8,1,0,0,9,6,2,0,0,7,4,6,4,0,7,5,6,4,2,4,4,1,2048,0,5,13,17,4,1,6,4,2,0,0,5,4,6,4,1,6,12,2,0,0,13,6,6,4,1,6,4,2,0,0,5,4,6,4,1,6,6,2,0,0,7,9,6,4,1,6,10,2,0,0,11,10,6,4,2,6,7,6,0,0,8,12,4,16,0,13,9,6,0,0,11,10,6,0,1,6,5,1,256,0,6,9,6,0,3,4,3,1,0,0,4,13,5,4,0,16,5,6,0,0,9,4,1,0,1,10,4,1,0,1,11,4,2,0,0,5,4,6,4,0,6,12,2,0,0,13,6,6,4,0,8,4,2,0,0,5,4,6,4,0,6,6,2,0,0,7,4,6,4,1,12,61,3,0,1,12,44,3,0,1,12,5,6,0,0,6,4,6,0,2,4,3,1,0,0,4,17,5,4,0,20,17,2,2,1,6,19,6,512,0,21,13,17,0,1,6,5,6,512,0,7,13,5,0,2,4,6,1,256,0,7,8,17,0,0,9,8,6,0,0,10,17,6,512,0,19,17,5,0,3,2,67,3,1,1,2,9,2,0,0,10,16,4,20,1,4,7,2,0,0,8,7,6,4,1,4,6,2,0,0,7,11,6,4,1,4,8,7,0,0,9,4,6,4,2,4,74,3,0,1,4,38,3,0,1,4,3,1,0,0,4,11,5,4,0,14,24,2,0,0,25,8,11,32,0,9,11,11,16,1,4,3,1,0,0,4,14,5,4,0,17,11,5,0,0,12,7,4,16,1,6,11,5,0,0,12,7,4,16,0,8,11,5,0,0,12,7,4,16,0,8,11,6,0,2,4,3,1,0,0,4,18,5,4,0,21,24,2,0,0,25,8,11,32,0,9,7,4,16,1,6,11,5,0,0,12,4,4,16,0,5,14,5,0,0,16,9,16,0,2,4,6,2,0,0,8,14,5,4,1,4,3,1,256,1,6,14,5,0,0,17,18,5,0,0,19,16,4,16,1,6,5,1,256,0,7,9,5,4,1,6,40,3,0,2,4,6,1,256,0,7,9,2,2,1,6,4,6,512,0,6,4,6,0,1,6,11,6,512,0,13,7,6,0,0,8,10,11,16,1,6,22,3,0,1,6,14,6,512,0,16,14,5,0,4,2,7,2,0,0,8,17,4,20,0,18,6,2,0,0,7,14,6,4,1,4,3,1,0,0,4,16,5,4,0,19,24,2,0,0,25,8,11,32,1,4,6,1,256,0,7,18,2,2,1,6,16,5,0,1,6,16,5,0,0,17,9,4,16,0,10,14,6,0,4,2,70,3,1,1,2,6,2,0,0,7,19,4,20,1,4,3,1,0,0,4,22,5,4,0,25,8,2,2,0,9,3,4,2,0,6,22,11,16,1,4,3,1,0,0,4,6,5,4,0,9,6,2,2,0,9,7,4,16,0,8,10,15,0,1,4,6,1,256,0,7,1,16,0,0,1,1,10,1024,0,1,22,5,0,0,22,1,10,1024,0,1,6,5,0,0,6,1,16,0,3,2,75,3,1,1,2,24,3,1,0,24,7,6,0,0,7,45,3,1,1,2,78,3,1,1,2,8,3,1,1,2,4,2,0,0,5,6,2,0,0,8,25,4,20,0,26,10,2,0,0,11,7,6,4,1,4,75,3,0,1,4,61,3,0,1,4,3,1,0,0,4,14,5,4,1,6,13,11,32,1,6,17,11,32,1,6,14,11,32,1,6,19,11,32,1,6,18,16,0,1,6,9,16,0,1,6,13,11,32,1,6,18,11,32,1,6,20,11,32,1,6,25,11,32,1,6,36,11,32,1,6,36,11,32,1,6,32,11,32,1,6,37,11,32,1,6,41,11,32,1,6,25,16,0,1,6,19,16,0,1,6,24,16,0,1,6,16,16,0,1,6,8,11,32,1,6,27,16,0,1,6,28,11,32,1,6,18,11,32,1,6,16,16,0,1,6,24,11,32,1,6,29,11,32,1,6,27,11,32,1,6,20,11,32,1,6,16,11,32,1,6,21,11,32,1,6,16,11,32,1,6,23,16,0,1,6,10,11,32,1,6,19,16,0,1,6,18,16,0,1,6,26,11,32,1,6,26,11,32,2,4,6,1,256,0,7,14,5,0,1,9,5,4,16,0,7,8,6,4,0,13,7,6,0,0,8,9,4,16,0,10,8,6,0,1,9,6,4,16,3,2,6,2,0,0,7,11,4,20,0,12,10,2,0,0,11,4,6,4,1,4,6,2,0,0,8,7,5,4,2,4,4,1,2048,0,5,20,17,4,0,21,6,2,0,0,7,12,6,4,1,6,3,1,0,0,4,13,5,4,0,16,4,6,0,0,5,12,6,0,1,6,2,1,256,0,4,7,5,0,0,11,4,1,0,0,8,13,5,0,0,14,2,1,0,0,3,6,2,0,1,8,7,5,0,0,10,13,5,0,4,4,20,17,0,0,21,13,11,32,1,4,20,17,0,0,21,18,11,32,1,4,3,1,0,0,4,8,5,4,0,11,7,5,0,0,11,10,17,0,2,4,3,1,0,0,4,11,5,4,0,14,24,2,0,0,25,8,11,32,0,9,11,11,16,1,4,6,1,256,0,7,11,5,0,0,12,9,4,16,0,10,11,5,0,0,12,8,4,16,0,9,8,5,0,3,2,50,3,1,1,2,4,1,2048,0,5,11,4,20,0,12,9,2,0,0,10,6,6,4,0,9,4,2,0,0,5,8,6,4,0,11,5,14,0,1,4,5,17,0,0,6,8,16,0,0,8,1,10,1024,0,1,10,11,32,0,10,9,16,0,1,4,5,17,0,0,6,2,16,0,1,4,5,17,0,0,6,22,16,0,1,4,5,17,0,0,6,6,6,0,0,7,5,11,16,3,2,75,3,1,1,2,6,2,0,0,7,9,4,20,0,10,22,2,0,0,23,7,6,4,1,4,3,1,0,0,4,23,5,4,0,26,24,2,0,0,25,8,11,32,1,9,16,4,16,0,17,18,16,0,1,4,2,1,256,0,4,23,5,0,0,27,4,1,0,1,6,6,1,256,0,7,19,4,16,2,4,3,1,0,0,4,8,5,4,0,11,4,2,2,0,5,23,5,0,0,24,8,4,16,0,9,10,16,0,0,12,4,11,16,1,4,3,1,256,1,6,2,1,256,0,4,8,5,0,0,9,10,4,16,1,8,3,1,0,0,4,4,5,4,0,7,8,5,0,0,9,16,4,16,1,8,2,1,256,0,4,4,5,0,0,5,6,11,16,0,9,1,15,0,1,10,6,1,256,0,7,4,5,0,3,6,5,1,256,0,7,9,5,4,0,11,10,5,4,1,6,7,6,0,0,8,12,4,16,0,13,9,5,0,0,11,10,5,0,2,4,3,1,0,0,4,4,5,4,0,7,19,4,16,1,4,3,1,256,1,6,8,5,0,0,9,6,11,16,0,7,10,4,16,0,11,9,6,512,0,11,4,14,0,1,6,8,5,0,0,9,17,4,16,0,18,4,5,0,1,6,5,1,256,0,7,9,5,4,0,11,10,5,4,1,6,7,6,0,0,8,12,4,16,0,13,9,5,0,0,11,10,5,0,1,6,59,3,0,1,6,4,5,0,0,7,6,16,0,0,6,1,10,1024,0,1,4,5,0,0,4,1,16,0,2,4,6,1,256,0,7,4,5,0,3,2,74,3,1,1,2,6,1,0,0,7,9,2,0,0,10,15,4,36,1,4,3,2,0,0,5,15,6,4,1,4,4,2,0,0,5,15,6,4,0,18,4,14,0,1,4,4,2,0,0,5,12,6,4,0,15,5,14,0,2,4,3,1,0,0,4,6,5,4,0,9,9,2,2,0,10,15,6,512,0,17,15,6,0,1,4,2,1,256,0,4,15,6,0,1,6,6,5,0,0,7,7,4,16,1,8,8,11,32,1,8,4,6,512,0,6,3,16,0,1,8,9,6,512,0,11,5,14,0,1,8,4,6,512,0,6,31,16,0,3,4,6,5,0,0,7,9,4,16,1,6,14,11,32,1,6,9,6,512,0,11,6,16,0,1,6,4,6,512,0,6,47,16,0,2,4,6,5,0,0,7,9,4,16,1,6,19,11,32,1,6,9,6,512,0,11,9,16,0,1,6,4,6,512,0,6,44,16,0,2,4,6,5,0,0,7,9,4,16,1,6,13,11,32,1,6,9,6,512,0,11,6,16,0,1,6,4,6,512,0,6,44,16,0,2,4,6,5,0,0,7,9,4,16,0,10,18,11,32,0,20,4,6,512,0,6,4,14,0,1,4,6,5,0,0,7,9,4,16,1,6,17,11,32,1,6,9,6,512,0,11,6,16,0,1,6,4,6,512,0,6,45,16,0,0,45,2,16,64,0,2,9,16,0,2,4,6,5,0,0,7,9,4,16,1,6,18,11,32,1,6,9,6,512,0,11,6,16,0,1,6,4,6,512,1,10,63,16,0,1,10,36,16,0,0,36,2,16,64,0,2,12,16,0,2,4,6,5,0,0,7,14,4,16,1,6,22,11,32,1,6,9,6,512,0,11,12,16,0,1,6,4,6,512,1,10,43,16,0,1,10,32,16,0,1,6,4,6,512,0,6,4,14,0,3,4,6,5,0,0,7,9,4,16,1,6,20,11,32,1,6,10,6,512,0,12,12,6,0,0,15,11,11,32,0,14,16,11,32,1,6,9,6,512,0,11,10,16,0,1,6,7,6,512,0,10,11,11,32,0,13,16,11,32,1,6,11,6,512,1,8,11,11,32,1,12,31,16,0,1,12,56,16,0,1,8,16,11,32,1,12,5,16,0,0,5,2,16,64,0,2,28,16,0,1,12,48,16,0,2,6,4,6,512,1,10,70,16,0,2,4,75,3,0,1,4,31,3,0,1,4,6,5,0,0,7,7,4,16,1,6,10,11,32,1,6,9,6,512,0,11,5,14,0,1,6,4,6,512,0,6,52,16,0,1,6,4,6,512,0,6,4,14,0,3,4,6,5,0,0,7,12,4,16,0,13,21,16,0,2,4,6,5,0,0,7,9,4,16,1,6,24,11,32,1,6,9,6,512,0,11,11,16,0,1,6,4,6,512,0,6,50,16,0,2,4,6,5,0,0,7,9,4,16,0,10,29,11,32,0,31,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,9,4,16,1,6,16,11,32,1,6,9,6,512,0,11,11,16,0,1,6,4,6,512,0,6,47,16,0,3,4,6,5,0,0,7,9,4,16,1,6,23,11,32,1,6,9,6,512,0,11,11,16,0,1,6,4,6,512,0,6,58,16,0,2,4,6,5,0,0,7,9,4,16,0,10,28,11,32,0,30,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,9,4,16,1,6,20,11,32,1,6,9,6,512,0,11,6,16,0,1,6,4,6,512,1,10,62,16,0,1,10,7,16,0,2,4,6,5,0,0,7,9,4,16,0,10,25,11,32,0,27,4,6,512,0,6,4,14,0,2,4,2,3,0,1,4,47,3,0,1,4,2,3,0,1,4,6,5,0,0,7,7,4,16,1,6,13,11,32,1,6,4,6,512,1,10,53,16,0,1,10,26,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,21,11,32,1,6,9,6,512,0,11,5,14,0,1,6,4,6,512,0,6,38,16,0,1,6,4,6,512,0,6,4,14,0,3,4,2,3,0,1,4,46,3,0,1,4,2,3,0,1,4,6,5,0,0,7,9,4,16,1,6,16,11,32,1,6,9,6,512,0,11,6,16,0,1,6,4,6,512,1,10,61,16,0,1,10,48,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,26,11,32,1,6,4,6,512,1,10,68,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,26,11,32,1,6,4,6,512,0,6,35,16,0,1,6,10,6,512,0,12,4,14,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,36,11,32,1,6,61,3,0,1,6,41,3,0,1,6,4,6,512,1,10,63,16,0,1,10,15,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,36,11,32,1,6,4,6,512,0,6,33,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,32,11,32,1,6,4,6,512,0,6,29,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,37,11,32,1,6,9,6,512,0,11,5,14,0,1,6,4,6,512,0,6,54,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,41,11,32,1,6,9,6,512,0,11,5,14,0,1,6,4,6,512,0,6,46,16,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,7,4,16,1,6,28,11,32,1,6,4,6,512,0,6,46,16,0,1,6,9,6,512,0,11,5,14,0,1,6,4,6,512,0,6,4,14,0,2,4,6,5,0,0,7,9,4,16,1,6,27,11,32,1,6,9,6,512,0,11,9,16,0,1,6,4,6,512,1,10,66,16,0,1,10,66,16,0,1,10,31,16,0,1,6,4,6,512,0,6,4,14,0,3,4,2,3,0,1,4,56,3,0,1,4,2,3,0,2,4,22,3,0,1,4,6,5,0,0,7,9,4,16,0,10,18,16,0,0,20,4,6,512,0,6,4,14,0,1,4,21,3,0,1,4,6,5,0,0,7,7,4,16,0,8,9,16,0,0,11,4,6,512,0,6,4,14,0,1,4,22,3,0,1,4,6,5,0,0,7,7,4,16,0,8,25,16,0,0,27,4,6,512,0,6,4,14,0,1,4,21,3,0,1,4,6,5,0,0,7,7,4,16,0,8,24,16,0,0,26,4,6,512,0,6,4,14,0,1,4,22,3,0,1,4,6,5,0,0,7,9,4,16,0,10,16,16,0,0,18,4,6,512,0,6,4,14,0,1,4,22,3,0,1,4,6,5,0,0,7,7,4,16,0,8,27,16,0,0,29,4,6,512,0,6,4,14,0,1,4,21,3,0,1,4,6,5,0,0,7,7,4,16,0,8,16,16,0,0,18,4,6,512,0,6,4,14,0,1,4,22,3,0,1,4,6,5,0,0,7,7,4,16,0,8,23,16,0,0,25,4,6,512,0,6,4,14,0,1,4,22,3,0,1,4,6,5,0,0,7,7,4,16,0,8,19,16,0,0,21,4,6,512,0,6,4,14,0,1,4,21,3,0,1,4,6,5,0,0,7,7,4,16,0,8,18,16,0,0,20,4,6,512,0,6,4,14,0,2,4,6,1,256,0,7,6,5,0,3,2,30,3,1,1,2,3,3,1,1,2,68,3,1,1,2,18,3,1,0,18,6,6,0,0,6,8,3,1,1,2,36,3,1,0,36,4,6,0,0,4,16,3,1,1,2,6,1,0,0,7,4,1,2048,0,5,13,4,36,0,14,6,2,0,0,7,4,6,4,0,6,3,2,0,0,4,6,6,4,1,4,3,1,256,0,5,3,1,0,0,4,1,5,4,0,4,6,6,0,0,9,1,15,0,0,3,1,5,0,0,5,1,15,0,0,3,1,5,0,1,6,3,1,256,1,8,3,1,0,0,4,7,5,4,0,10,1,5,0,0,5,1,15,0,0,4,4,6,0,0,7,1,16,0,0,1,1,10,1024,0,1,4,6,0,0,4,1,16,0,0,1,1,10,1024,0,1,1,5,0,0,1,1,16,0,1,8,4,2,2,0,5,7,5,0,0,9,10,4,16,0,11,1,16,0,0,1,1,10,1024,0,1,4,6,0,0,4,1,16,0,0,1,2,10,1024,0,2,1,5,0,0,1,3,10,1024,0,3,1,15,0,0,1,1,10,1024,0,1,1,16,0,1,8,5,1,256,0,7,1,5,4,1,8,70,3,0,1,8,19,3,0,6,0,20,3,1,0,20,16,2,0,0,16,24,3,1,0,24,18,2,0,0,18,2,3,1,1,0,5,1,0,0,6,21,2,4,0,22,7,1,0,0,8,16,2,0,1,2,4,1,0,0,5,18,2,0,0,19,10,5,20,2,2,1,0,0,0,1,8,11,128,1,2,6,2,0,0,7,3,2,0,0,5,13,4,20,0,16,5,1,256,0,10,5,1,256,0,6,10,11,16,0,11,9,4,16,2,2,6,2,0,0,7,4,1,2048,0,6,11,4,20,0,12,3,2,0,0,4,4,6,4,1,4,6,1,256,0,7,10,11,16,0,11,9,4,16,0,10,4,6,0]}}},
+{"time":1763411729765,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2060,"result":null,"clientRequestTime":1763411729763}},
+{"time":1763411729765,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411729765,"kind":"message","sender":"server","receiver":"ide","message":{"id":5803,"jsonrpc":"2.0","result":[]}},
+{"time":1763411729767,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411729768,"kind":"message","sender":"server","receiver":"ide","message":{"id":5802,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"}]}},
+{"time":1763411729807,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5804,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":746,"character":0},"end":{"line":862,"character":65}}},"clientRequestTime":1763411729806}},
+{"time":1763411729811,"kind":"message","sender":"server","receiver":"ide","message":{"id":5804,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":15,"line":52}},{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":135},"start":{"character":6,"line":135}},"uri":"file://{{dartSdkRoot}}lib/core/date_time.dart"},"value":"DateTime"}],"paddingRight":true,"position":{"character":8,"line":176}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":177}},{"kind":2,"label":[{"location":{"range":{"end":{"character":40,"line":360},"start":{"character":36,"line":360}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":31,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":27},"start":{"character":6,"line":27}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"ArgResults"}],"paddingRight":true,"position":{"character":8,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":137},"start":{"character":6,"line":137}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/legacy_analysis_server.dart"},"value":"AnalysisServerOptions"}],"paddingRight":true,"position":{"character":8,"line":180}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":182}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":183}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":184}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":186}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":25,"line":190}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":195}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":194}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":57,"line":200}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":55,"line":201}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":56,"line":202}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":204}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":207}},{"kind":2,"label":[{"location":{"range":{"end":{"character":38,"line":113},"start":{"character":34,"line":113}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":211}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/sdk_configuration.dart"},"value":"SdkConfiguration"}],"paddingRight":true,"position":{"character":8,"line":215}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":50,"line":219}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":8,"line":219}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":221}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":703},"start":{"character":32,"line":703}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":37,"line":225}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":225}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":79},"start":{"character":22,"line":79}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"defaultSdkDirectory:"}],"paddingRight":true,"position":{"character":40,"line":226}},{"kind":1,"label":[{"location":{"range":{"end":{"character":20,"line":70},"start":{"character":6,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdkManager"}],"paddingRight":true,"position":{"character":8,"line":226}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":637},"start":{"character":35,"line":637}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"defaultSdkPath:"}],"paddingRight":true,"position":{"character":39,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":12},"start":{"character":15,"line":12}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdk"}],"paddingRight":true,"position":{"character":8,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":192},"start":{"character":5,"line":192}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/tools/pkgs/unified_analytics/lib/src/enums.dart"},"value":"DashTool"},{"value":"?"}],"paddingRight":true,"position":{"character":10,"line":238}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":610},"start":{"character":12,"line":610}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdk:"}],"paddingRight":true,"position":{"character":37,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":611},"start":{"character":11,"line":611}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkPath:"}],"paddingRight":true,"position":{"character":49,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":612},"start":{"character":13,"line":612}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"tool:"}],"paddingRight":true,"position":{"character":65,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":103},"start":{"character":24,"line":103}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"analytics:"}],"paddingRight":true,"position":{"character":44,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"AnalyticsManager"}],"paddingRight":true,"position":{"character":8,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":266}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":73},"start":{"character":11,"line":73}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"crashProductId:"}],"paddingRight":true,"position":{"character":6,"line":268}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":74},"start":{"character":23,"line":74}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"shouldSend:"}],"paddingRight":true,"position":{"character":6,"line":269}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":40},"start":{"character":6,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"CrashReportSender"}],"paddingRight":true,"position":{"character":8,"line":267}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":274}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":273}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":39,"line":276}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":276}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":285}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":18,"line":286}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":656},"start":{"character":52,"line":656}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":43,"line":293}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":301}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":302}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":300}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":37,"line":9},"start":{"character":15,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"InstrumentationService"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":303}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":987},"start":{"character":35,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":20,"line":305}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":987},"start":{"character":45,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"numOld:"}],"paddingRight":true,"position":{"character":33,"line":305}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":8,"line":307}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":39},"start":{"character":9,"line":39}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/log_adapter.dart"},"value":"_instrumentationLogger:"}],"paddingRight":true,"position":{"character":10,"line":308}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":14},"start":{"character":33,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/file_instrumentation.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":36,"line":308}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":36,"line":309}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":6,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/error_notifier.dart"},"value":"ErrorNotifier"}],"paddingRight":true,"position":{"character":8,"line":314}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":35,"line":315}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":6,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":14},"start":{"character":37,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/crash_reporting.dart"},"value":"serverReporter:"}],"paddingRight":true,"position":{"character":36,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":48,"line":11},"start":{"character":39,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/multicast_service.dart"},"value":"_services:"}],"paddingRight":true,"position":{"character":6,"line":320}},{"kind":2,"label":[{"location":{"range":{"end":{"character":15,"line":82},"start":{"character":11,"line":82}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"uuid:"}],"paddingRight":true,"position":{"character":6,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":83},"start":{"character":11,"line":83}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientId:"}],"paddingRight":true,"position":{"character":6,"line":327}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":84},"start":{"character":11,"line":84}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientVersion:"}],"paddingRight":true,"position":{"character":6,"line":328}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":85},"start":{"character":11,"line":85}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"serverVersion:"}],"paddingRight":true,"position":{"character":6,"line":329}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":86},"start":{"character":11,"line":86}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"sdkVersion:"}],"paddingRight":true,"position":{"character":6,"line":330}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":730},"start":{"character":42,"line":730}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"service:"}],"paddingRight":true,"position":{"character":22,"line":326}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":44,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":31,"line":35},"start":{"character":6,"line":35}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"SessionLoggerInMemorySink"}],"paddingRight":true,"position":{"character":8,"line":337}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":31,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":54,"line":340}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":346}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":347}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":345}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":420},"start":{"character":35,"line":420}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"source:"}],"paddingRight":true,"position":{"character":41,"line":350}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":352}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":353}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":20,"line":354}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":366}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":526},"start":{"character":15,"line":526}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":8,"line":370}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":527},"start":{"character":26,"line":527}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":371}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":528},"start":{"character":19,"line":528}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":372}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":529},"start":{"character":21,"line":529}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":373}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":530},"start":{"character":27,"line":530}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":374}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":531},"start":{"character":18,"line":531}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":375}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":532},"start":{"character":9,"line":532}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":376}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":533},"start":{"character":18,"line":533}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":377}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":403},"start":{"character":15,"line":403}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":8,"line":381}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":404},"start":{"character":26,"line":404}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":382}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":405},"start":{"character":14,"line":405}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":8,"line":383}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":406},"start":{"character":19,"line":406}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":384}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":407},"start":{"character":21,"line":407}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":385}},{"kind":2,"label":[{"location":{"range":{"end":{"character":69,"line":408},"start":{"character":37,"line":408}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":8,"line":386}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":409},"start":{"character":27,"line":409}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":387}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":410},"start":{"character":18,"line":410}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":388}},{"kind":2,"label":[{"location":{"range":{"end":{"character":45,"line":411},"start":{"character":28,"line":411}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":8,"line":389}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":412},"start":{"character":9,"line":412}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":390}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":413},"start":{"character":18,"line":413}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":391}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":414},"start":{"character":14,"line":414}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sendPort:"}],"paddingRight":true,"position":{"character":8,"line":392}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":8},"start":{"character":15,"line":8}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"arguments:"}],"paddingRight":true,"position":{"character":6,"line":397}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":9},"start":{"character":16,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"callback:"}],"paddingRight":true,"position":{"character":6,"line":398}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":25},"start":{"character":6,"line":25}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/leak_tracker/pkgs/memory_usage/lib/src/model.dart"},"value":"MemoryUsageEvent"}],"paddingRight":true,"position":{"character":7,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":53,"line":268},"start":{"character":48,"line":268}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"event:"}],"paddingRight":true,"position":{"character":61,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":31,"line":416}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":417}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":416}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":40,"line":419}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":419}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":772},"start":{"character":37,"line":772}},"uri":"file://{{dartSdkRoot}}lib/io/file_system_entity.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":44,"line":421}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":422}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":431}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":63},"start":{"character":9,"line":63}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":437}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":64},"start":{"character":9,"line":64}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":438}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":65},"start":{"character":9,"line":65}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":6,"line":439}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":66},"start":{"character":9,"line":66}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":440}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":67},"start":{"character":9,"line":67}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":441}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":68},"start":{"character":9,"line":68}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":6,"line":442}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":69},"start":{"character":9,"line":69}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":443}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":70},"start":{"character":9,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":444}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":71},"start":{"character":9,"line":71}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":445}},{"kind":1,"label":[{"location":{"range":{"end":{"character":18,"line":31},"start":{"character":6,"line":31}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"SocketServer"}],"paddingRight":true,"position":{"character":8,"line":436}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":448}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":450}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":456}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":239},"start":{"character":36,"line":239}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"prefix:"}],"paddingRight":true,"position":{"character":8,"line":460}},{"kind":1,"label":[{"location":{"range":{"end":{"character":34,"line":99},"start":{"character":25,"line":99}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"Directory"}],"paddingRight":true,"position":{"character":10,"line":459}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":464}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":29},"start":{"character":25,"line":29}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":40,"line":467}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":15},"start":{"character":6,"line":15}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"DevAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":467}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":472}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":58,"line":473}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":58,"line":473}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":12,"line":473}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":474}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":476}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":479}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":54,"line":480}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":54,"line":480}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":481}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":18,"line":485}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":13,"line":493}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":8,"line":497}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":8,"line":498}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":27,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":50,"line":501}},{"kind":1,"label":[{"location":{"range":{"end":{"character":25,"line":11},"start":{"character":6,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"StdioAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":501}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":19},"start":{"character":29,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":62,"line":504}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"IsolateAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":504}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":23},"start":{"character":37,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"clientSendPort:"}],"paddingRight":true,"position":{"character":61,"line":505}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":27,"line":508}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":27,"line":511}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":28,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":22,"line":514}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":39,"line":515}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":26,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":518}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":535}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":536}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":535}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":543}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":51},"start":{"character":9,"line":51}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":546}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":52},"start":{"character":9,"line":52}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":547}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":53},"start":{"character":9,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":548}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":54},"start":{"character":9,"line":54}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":549}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":55},"start":{"character":9,"line":55}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":550}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":56},"start":{"character":9,"line":56}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":551}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":57},"start":{"character":9,"line":57}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":552}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":23},"start":{"character":6,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"LspSocketServer"}],"paddingRight":true,"position":{"character":8,"line":545}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":555}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":558}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":12,"line":561}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":36,"line":561}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":19},"start":{"character":30,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":47,"line":562}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"LspStdioAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":562}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":36,"line":563}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":37,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":20,"line":567}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":15,"line":568}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":35,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":590}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":590}},{"kind":2,"label":[{"value":"line:"}],"paddingRight":true,"position":{"character":18,"line":599}},{"kind":1,"label":[{"value":"Null Function(Zone, ZoneDelegate, Zone, String)?"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":594}},{"kind":1,"label":[{"location":{"range":{"end":{"character":38,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/async/zone_specification.dart"},"value":"ZoneSpecification"}],"paddingRight":true,"position":{"character":8,"line":601}},{"kind":2,"label":[{"location":{"range":{"end":{"character":8,"line":64},"start":{"character":4,"line":64}},"uri":"file://{{dartSdkRoot}}lib/async/zone_api.dart"},"value":"body:"}],"paddingRight":true,"position":{"character":20,"line":605}},{"kind":1,"label":[{"value":"<"},{"value":"void"},{"value":">"}],"position":{"character":19,"line":605}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":616}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":26,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":46,"line":618}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":617}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":268},"start":{"character":11,"line":268}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":23,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":269},"start":{"character":12,"line":269}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part2:"}],"paddingRight":true,"position":{"character":39,"line":621}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":15,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":620}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":8,"line":638}},{"kind":2,"label":[{"location":{"range":{"end":{"character":54,"line":389},"start":{"character":38,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"resourceProvider:"}],"paddingRight":true,"position":{"character":6,"line":640}},{"kind":2,"label":[{"location":{"range":{"end":{"character":75,"line":389},"start":{"character":63,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"sdkDirectory:"}],"paddingRight":true,"position":{"character":6,"line":641}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":53},"start":{"character":26,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":641}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":647}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":55},"start":{"character":18,"line":55}},"uri":"file://{{dartSdkRoot}}lib/math/random.dart"},"value":"max:"}],"paddingRight":true,"position":{"character":34,"line":648}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":648}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":25,"line":659}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":659}},{"kind":2,"label":[{"value":"test:"}],"paddingRight":true,"position":{"character":15,"line":699}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":16,"line":699}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":47,"line":699}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":10,"line":707}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":713}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":714}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":715}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":717}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":428},"start":{"character":26,"line":428}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":79},"start":{"character":11,"line":79}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":54,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":723}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":724}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":725}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":726}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":75},"start":{"character":34,"line":75}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"pluginId:"}],"paddingRight":true,"position":{"character":26,"line":732}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":72},"start":{"character":15,"line":72}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"Folder"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":731}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":24,"line":736}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":97},"start":{"character":27,"line":97}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"relPath:"}],"paddingRight":true,"position":{"character":57,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":191},"start":{"character":25,"line":191}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":739}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":745}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":745}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":747}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":704},"start":{"character":11,"line":704}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"contents:"}],"paddingRight":true,"position":{"character":33,"line":750}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":752}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":752}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":765}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":768}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":775}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":780}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":785}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":789}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":791}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":796}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":266},"start":{"character":29,"line":266}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":803}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":812}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":15,"line":815}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":", "},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":19,"line":816}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":830}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":354},"start":{"character":27,"line":354}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"text:"}],"paddingRight":true,"position":{"character":24,"line":836}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":839}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":843}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":846}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":852}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":856}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":859}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":865}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":871}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":878}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":888}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":896}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":902}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":908}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":917}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":922}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":927}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":933}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":939}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":945}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":959}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":961}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":963}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":965}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":967}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":969}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":971}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":973}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":975}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":977}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":13,"line":988}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":990}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":13,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":310},"start":{"character":25,"line":310}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"newPath:"}],"paddingRight":true,"position":{"character":33,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":70},"start":{"character":31,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"initialPort:"}],"paddingRight":true,"position":{"character":32,"line":1008}}]}},
+{"time":1763411729885,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5805,"method":"textDocument/foldingRange","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411729884}},
+{"time":1763411729887,"kind":"message","sender":"server","receiver":"ide","message":{"id":5805,"jsonrpc":"2.0","result":[{"endLine":2,"kind":"comment","startLine":0},{"endLine":45,"kind":"imports","startLine":4},{"endLine":49,"kind":"comment","startLine":47},{"endLine":998,"startLine":50},{"endLine":73,"kind":"comment","startLine":72},{"endLine":78,"kind":"comment","startLine":77},{"endLine":95,"kind":"comment","startLine":94},{"endLine":101,"kind":"comment","startLine":100},{"endLine":105,"kind":"comment","startLine":104},{"endLine":115,"kind":"comment","startLine":113},{"endLine":127,"kind":"comment","startLine":126},{"endLine":131,"kind":"comment","startLine":130},{"endLine":143,"kind":"comment","startLine":142},{"endLine":157,"kind":"comment","startLine":156},{"endLine":169,"kind":"comment","startLine":166},{"endLine":400,"startLine":171},{"endLine":175,"startLine":172},{"endLine":187,"startLine":184},{"endLine":187,"startLine":185},{"endLine":190,"startLine":188},{"endLine":193,"kind":"comment","startLine":192},{"endLine":205,"startLine":203},{"endLine":208,"startLine":206},{"endLine":212,"startLine":210},{"endLine":222,"startLine":221},{"endLine":230,"kind":"comment","startLine":228},{"endLine":236,"startLine":235},{"endLine":248,"startLine":237},{"endLine":243,"startLine":238},{"endLine":245,"startLine":244},{"endLine":247,"startLine":246},{"endLine":261,"startLine":252},{"endLine":255,"startLine":254},{"endLine":259,"kind":"comment","startLine":258},{"endLine":270,"startLine":267},{"endLine":275,"startLine":273},{"endLine":281,"startLine":277},{"endLine":281,"startLine":278},{"endLine":287,"startLine":285},{"endLine":296,"startLine":291},{"endLine":299,"kind":"comment","startLine":297},{"endLine":311,"startLine":304},{"endLine":311,"startLine":306},{"endLine":310,"startLine":307},{"endLine":318,"startLine":316},{"endLine":321,"startLine":319},{"endLine":331,"startLine":323},{"endLine":340,"startLine":339},{"endLine":357,"startLine":348},{"endLine":350,"startLine":349},{"endLine":356,"startLine":351},{"endLine":362,"kind":"comment","startLine":360},{"endLine":378,"startLine":363},{"endLine":367,"startLine":364},{"endLine":367,"startLine":365},{"endLine":378,"startLine":369},{"endLine":393,"startLine":379},{"endLine":393,"startLine":380},{"endLine":399,"startLine":396},{"endLine":523,"startLine":402},{"endLine":415,"startLine":403},{"endLine":425,"startLine":420},{"endLine":424,"startLine":421},{"endLine":435,"kind":"comment","startLine":433},{"endLine":446,"startLine":436},{"endLine":450,"startLine":449},{"endLine":494,"startLine":453},{"endLine":457,"startLine":454},{"endLine":457,"startLine":455},{"endLine":461,"startLine":459},{"endLine":465,"startLine":463},{"endLine":494,"startLine":470},{"endLine":488,"startLine":487},{"endLine":490,"startLine":489},{"endLine":521,"startLine":495},{"endLine":521,"startLine":496},{"endLine":517,"startLine":498},{"endLine":502,"startLine":500},{"endLine":505,"startLine":503},{"endLine":509,"startLine":508},{"endLine":516,"startLine":511},{"endLine":572,"startLine":525},{"endLine":534,"startLine":526},{"endLine":553,"startLine":545},{"endLine":558,"startLine":557},{"endLine":571,"startLine":561},{"endLine":570,"startLine":563},{"endLine":565,"kind":"comment","startLine":564},{"endLine":568,"startLine":566},{"endLine":577,"kind":"comment","startLine":574},{"endLine":606,"startLine":578},{"endLine":582,"startLine":579},{"endLine":592,"startLine":583},{"endLine":588,"startLine":584},{"endLine":592,"startLine":589},{"endLine":600,"startLine":596},{"endLine":598,"kind":"comment","startLine":597},{"endLine":604,"startLine":601},{"endLine":635,"startLine":609},{"endLine":613,"startLine":610},{"endLine":615,"kind":"comment","startLine":614},{"endLine":619,"startLine":617},{"endLine":622,"startLine":620},{"endLine":625,"startLine":624},{"endLine":627,"startLine":626},{"endLine":634,"startLine":629},{"endLine":643,"startLine":637},{"endLine":642,"startLine":639},{"endLine":650,"startLine":646},{"endLine":655,"kind":"comment","startLine":652},{"endLine":701,"startLine":656},{"endLine":658,"kind":"comment","startLine":657},{"endLine":697,"startLine":659},{"endLine":719,"startLine":703},{"endLine":711,"startLine":706},{"endLine":709,"startLine":708},{"endLine":727,"startLine":722},{"endLine":757,"startLine":730},{"endLine":734,"startLine":733},{"endLine":743,"startLine":737},{"endLine":742,"startLine":738},{"endLine":741,"startLine":740},{"endLine":745,"startLine":744},{"endLine":750,"startLine":748},{"endLine":754,"startLine":751},{"endLine":980,"startLine":760},{"endLine":764,"startLine":761},{"endLine":772,"startLine":766},{"endLine":772,"startLine":767},{"endLine":778,"startLine":774},{"endLine":783,"startLine":779},{"endLine":788,"startLine":784},{"endLine":794,"startLine":790},{"endLine":801,"startLine":795},{"endLine":809,"startLine":802},{"endLine":826,"startLine":811},{"endLine":823,"startLine":816},{"endLine":828,"kind":"comment","startLine":827},{"endLine":834,"startLine":829},{"endLine":842,"startLine":838},{"endLine":849,"startLine":845},{"endLine":855,"startLine":851},{"endLine":864,"startLine":858},{"endLine":869,"kind":"comment","startLine":867},{"endLine":876,"startLine":870},{"endLine":882,"startLine":877},{"endLine":886,"kind":"comment","startLine":884},{"endLine":894,"startLine":887},{"endLine":900,"startLine":895},{"endLine":906,"startLine":901},{"endLine":915,"startLine":907},{"endLine":910,"kind":"comment","startLine":909},{"endLine":920,"startLine":916},{"endLine":925,"startLine":921},{"endLine":931,"startLine":926},{"endLine":937,"startLine":932},{"endLine":943,"startLine":938},{"endLine":952,"startLine":944},{"endLine":956,"kind":"comment","startLine":954},{"endLine":986,"kind":"comment","startLine":982},{"endLine":997,"startLine":987},{"endLine":996,"startLine":988},{"endLine":991,"startLine":989},{"endLine":994,"startLine":992},{"endLine":994,"kind":"comment","startLine":993},{"endLine":1010,"startLine":1001},{"endLine":1009,"startLine":1007}]}},
+{"time":1763411729945,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5806,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":814,"character":17},"end":{"line":814,"character":26}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411729945}},
+{"time":1763411729946,"kind":"message","sender":"server","receiver":"ide","message":{"id":2061,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411729949,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2061,"result":null,"clientRequestTime":1763411729947}},
+{"time":1763411729949,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411729949,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411729949,"kind":"message","sender":"server","receiver":"ide","message":{"id":5806,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"},{"command":{"arguments":[{"action":"dart.assist.convert.toDoubleQuotedString"}],"command":"dart.logAction","title":"Log Action"},"diagnostics":[],"edit":{"documentChanges":[{"edits":[{"newText":"\"","range":{"end":{"character":18,"line":814},"start":{"character":17,"line":814}}},{"newText":"\"","range":{"end":{"character":27,"line":814},"start":{"character":26,"line":814}}}],"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","version":1}}]},"kind":"refactor.convert.toDoubleQuotedString","title":"Convert to double quoted string"},{"command":{"arguments":[{"action":"dart.assist.convert.toMultilineString"}],"command":"dart.logAction","title":"Log Action"},"diagnostics":[],"edit":{"documentChanges":[{"edits":[{"newText":"'''\n","range":{"end":{"character":18,"line":814},"start":{"character":17,"line":814}}},{"newText":"'''","range":{"end":{"character":27,"line":814},"start":{"character":26,"line":814}}}],"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","version":1}}]},"kind":"refactor.convert.toMultilineString","title":"Convert to multiline string"},{"command":{"arguments":["EXTRACT_METHOD","{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart",1,29024,9,null],"command":"refactor.perform","title":"Extract Method"},"kind":"refactor.extract","title":"Extract Method"},{"command":{"arguments":["EXTRACT_LOCAL_VARIABLE","{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart",1,29024,9,null],"command":"refactor.perform","title":"Extract Local Variable"},"kind":"refactor.extract","title":"Extract Local Variable"}]}},
+{"time":1763411729984,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5807,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411729983}},
+{"time":1763411729985,"kind":"message","sender":"server","receiver":"ide","message":{"id":5807,"jsonrpc":"2.0","result":[{"children":[{"deprecated":false,"kind":8,"name":"binaryName","range":{"end":{"character":45,"line":52},"start":{"character":15,"line":52}},"selectionRange":{"end":{"character":25,"line":52},"start":{"character":15,"line":52}}},{"deprecated":false,"kind":8,"name":"clientIdOption","range":{"end":{"character":50,"line":55},"start":{"character":22,"line":55}},"selectionRange":{"end":{"character":36,"line":55},"start":{"character":22,"line":55}}},{"deprecated":false,"kind":8,"name":"clientVersionOption","range":{"end":{"character":60,"line":58},"start":{"character":22,"line":58}},"selectionRange":{"end":{"character":41,"line":58},"start":{"character":22,"line":58}}},{"deprecated":false,"kind":8,"name":"disableServerExceptionHandlingOption","range":{"end":{"character":41,"line":62},"start":{"character":22,"line":61}},"selectionRange":{"end":{"character":58,"line":61},"start":{"character":22,"line":61}}},{"deprecated":false,"kind":8,"name":"disableServerFeatureCompletionOption","range":{"end":{"character":41,"line":66},"start":{"character":22,"line":65}},"selectionRange":{"end":{"character":58,"line":65},"start":{"character":22,"line":65}}},{"deprecated":false,"kind":8,"name":"disableServerFeatureSearchOption","range":{"end":{"character":37,"line":70},"start":{"character":22,"line":69}},"selectionRange":{"end":{"character":54,"line":69},"start":{"character":22,"line":69}}},{"deprecated":false,"kind":8,"name":"disableStatusNotificationDebouncingOption","range":{"end":{"character":46,"line":75},"start":{"character":22,"line":74}},"selectionRange":{"end":{"character":63,"line":74},"start":{"character":22,"line":74}}},{"deprecated":false,"kind":8,"name":"disableSilentAnalysisExceptionsOption","range":{"end":{"character":42,"line":80},"start":{"character":22,"line":79}},"selectionRange":{"end":{"character":59,"line":79},"start":{"character":22,"line":79}}},{"deprecated":false,"kind":8,"name":"enableExperimentOption","range":{"end":{"character":66,"line":83},"start":{"character":22,"line":83}},"selectionRange":{"end":{"character":44,"line":83},"start":{"character":22,"line":83}}},{"deprecated":false,"kind":8,"name":"helpFlag","range":{"end":{"character":39,"line":86},"start":{"character":22,"line":86}},"selectionRange":{"end":{"character":30,"line":86},"start":{"character":22,"line":86}}},{"deprecated":false,"kind":8,"name":"analyticsFlag","range":{"end":{"character":49,"line":89},"start":{"character":22,"line":89}},"selectionRange":{"end":{"character":35,"line":89},"start":{"character":22,"line":89}}},{"deprecated":false,"kind":8,"name":"suppressAnalyticsFlag","range":{"end":{"character":66,"line":92},"start":{"character":22,"line":92}},"selectionRange":{"end":{"character":43,"line":92},"start":{"character":22,"line":92}}},{"deprecated":false,"kind":8,"name":"protocolTrafficLogOption","range":{"end":{"character":71,"line":96},"start":{"character":22,"line":96}},"selectionRange":{"end":{"character":46,"line":96},"start":{"character":22,"line":96}}},{"deprecated":false,"kind":8,"name":"protocolTrafficLogAliasOption","range":{"end":{"character":32,"line":98},"start":{"character":22,"line":97}},"selectionRange":{"end":{"character":51,"line":97},"start":{"character":22,"line":97}}},{"deprecated":false,"kind":8,"name":"sessionLogOption","range":{"end":{"character":54,"line":102},"start":{"character":22,"line":102}},"selectionRange":{"end":{"character":38,"line":102},"start":{"character":22,"line":102}}},{"deprecated":false,"kind":8,"name":"internalPrintToConsoleOption","range":{"end":{"character":33,"line":107},"start":{"character":22,"line":106}},"selectionRange":{"end":{"character":50,"line":106},"start":{"character":22,"line":106}}},{"deprecated":false,"kind":8,"name":"analysisDriverLogOption","range":{"end":{"character":69,"line":110},"start":{"character":22,"line":110}},"selectionRange":{"end":{"character":45,"line":110},"start":{"character":22,"line":110}}},{"deprecated":false,"kind":8,"name":"analysisDriverLogAliasOption","range":{"end":{"character":78,"line":111},"start":{"character":22,"line":111}},"selectionRange":{"end":{"character":50,"line":111},"start":{"character":22,"line":111}}},{"deprecated":false,"kind":8,"name":"diagnosticPortOption","range":{"end":{"character":62,"line":116},"start":{"character":22,"line":116}},"selectionRange":{"end":{"character":42,"line":116},"start":{"character":22,"line":116}}},{"deprecated":false,"kind":8,"name":"diagnosticPortAliasOption","range":{"end":{"character":56,"line":117},"start":{"character":22,"line":117}},"selectionRange":{"end":{"character":47,"line":117},"start":{"character":22,"line":117}}},{"deprecated":false,"kind":8,"name":"dartSdkOption","range":{"end":{"character":48,"line":120},"start":{"character":22,"line":120}},"selectionRange":{"end":{"character":35,"line":120},"start":{"character":22,"line":120}}},{"deprecated":false,"kind":8,"name":"dartSdkAliasOption","range":{"end":{"character":48,"line":121},"start":{"character":22,"line":121}},"selectionRange":{"end":{"character":40,"line":121},"start":{"character":22,"line":121}}},{"deprecated":false,"kind":8,"name":"cacheFolderOption","range":{"end":{"character":49,"line":124},"start":{"character":22,"line":124}},"selectionRange":{"end":{"character":39,"line":124},"start":{"character":22,"line":124}}},{"deprecated":false,"kind":8,"name":"packagesFileOption","range":{"end":{"character":53,"line":128},"start":{"character":22,"line":128}},"selectionRange":{"end":{"character":40,"line":128},"start":{"character":22,"line":128}}},{"deprecated":false,"kind":8,"name":"reportProtocolVersionOption","range":{"end":{"character":77,"line":132},"start":{"character":22,"line":132}},"selectionRange":{"end":{"character":49,"line":132},"start":{"character":22,"line":132}}},{"deprecated":false,"kind":8,"name":"serverProtocolOption","range":{"end":{"character":55,"line":135},"start":{"character":22,"line":135}},"selectionRange":{"end":{"character":42,"line":135},"start":{"character":22,"line":135}}},{"deprecated":false,"kind":8,"name":"protocolAnalyzer","range":{"end":{"character":51,"line":136},"start":{"character":22,"line":136}},"selectionRange":{"end":{"character":38,"line":136},"start":{"character":22,"line":136}}},{"deprecated":false,"kind":8,"name":"protocolLsp","range":{"end":{"character":41,"line":137},"start":{"character":22,"line":137}},"selectionRange":{"end":{"character":33,"line":137},"start":{"character":22,"line":137}}},{"deprecated":false,"kind":8,"name":"useLspFlag","range":{"end":{"character":40,"line":140},"start":{"character":22,"line":140}},"selectionRange":{"end":{"character":32,"line":140},"start":{"character":22,"line":140}}},{"deprecated":false,"kind":8,"name":"trainUsingOption","range":{"end":{"character":54,"line":144},"start":{"character":22,"line":144}},"selectionRange":{"end":{"character":38,"line":144},"start":{"character":22,"line":144}}},{"deprecated":false,"kind":8,"name":"disableFileByteStoreOption","range":{"end":{"character":76,"line":147},"start":{"character":22,"line":147}},"selectionRange":{"end":{"character":48,"line":147},"start":{"character":22,"line":147}}},{"deprecated":false,"kind":8,"name":"withFineDependenciesOption","range":{"end":{"character":75,"line":150},"start":{"character":22,"line":150}},"selectionRange":{"end":{"character":48,"line":150},"start":{"character":22,"line":150}}},{"deprecated":false,"kind":8,"name":"crashReportingAttachmentsBuilder","range":{"end":{"character":44,"line":154},"start":{"character":35,"line":153}},"selectionRange":{"end":{"character":67,"line":153},"start":{"character":35,"line":153}}},{"deprecated":false,"kind":8,"name":"detachableFileSystemManager","range":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}},"selectionRange":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}}},{"deprecated":false,"kind":8,"name":"_instrumentationService","range":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}},"selectionRange":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}}},{"deprecated":false,"kind":8,"name":"_sessionLogger","range":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}},"selectionRange":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}}},{"children":[{"deprecated":false,"detail":"()","kind":12,"name":"shouldSendCallback","range":{"end":{"character":5,"line":261},"start":{"character":4,"line":252}},"selectionRange":{"end":{"character":27,"line":252},"start":{"character":9,"line":252}}}],"deprecated":false,"detail":"(List<String> arguments, {SendPort? sendPort, bool defaultToLsp = false})","kind":6,"name":"start","range":{"end":{"character":3,"line":400},"start":{"character":2,"line":171}},"selectionRange":{"end":{"character":12,"line":171},"start":{"character":7,"line":171}}},{"deprecated":false,"detail":"(ArgResults results, AnalysisServerOptions analysisServerOptions, ArgParser parser, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder, InstrumentationService instrumentationService, SessionLogger sessionLogger, RequestStatisticsHelper requestStatistics, int? diagnosticServerPort, ErrorNotifier errorNotifier, SendPort? sendPort)","kind":6,"name":"startAnalysisServer","range":{"end":{"character":3,"line":523},"start":{"character":2,"line":402}},"selectionRange":{"end":{"character":26,"line":402},"start":{"character":7,"line":402}}},{"deprecated":false,"detail":"(ArgResults args, AnalysisServerOptions analysisServerOptions, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, InstrumentationService instrumentationService, SessionLogger sessionLogger, int? diagnosticServerPort, ErrorNotifier errorNotifier)","kind":6,"name":"startLspServer","range":{"end":{"character":3,"line":572},"start":{"character":2,"line":525}},"selectionRange":{"end":{"character":21,"line":525},"start":{"character":7,"line":525}}},{"children":[{"deprecated":false,"detail":"(Zone self, ZoneDelegate parent, Zone zone, Object exception, StackTrace stackTrace)","kind":12,"name":"errorFunction","range":{"end":{"character":5,"line":592},"start":{"character":4,"line":583}},"selectionRange":{"end":{"character":22,"line":583},"start":{"character":9,"line":583}}}],"deprecated":false,"detail":"(InstrumentationService service, void Function() callback, {void Function(String line)? print})","kind":6,"name":"_captureExceptions","range":{"end":{"character":3,"line":606},"start":{"character":2,"line":578}},"selectionRange":{"end":{"character":25,"line":578},"start":{"character":7,"line":578}}},{"deprecated":false,"detail":"(DartSdk dartSdk, String dartSdkPath, DashTool tool)","kind":6,"name":"_createAnalytics","range":{"end":{"character":3,"line":635},"start":{"character":2,"line":609}},"selectionRange":{"end":{"character":28,"line":609},"start":{"character":12,"line":609}}},{"deprecated":false,"detail":"(String defaultSdkPath)","kind":6,"name":"_createDefaultSdk","range":{"end":{"character":3,"line":643},"start":{"character":2,"line":637}},"selectionRange":{"end":{"character":27,"line":637},"start":{"character":10,"line":637}}},{"deprecated":false,"detail":"()","kind":6,"name":"_generateUuidString","range":{"end":{"character":3,"line":650},"start":{"character":2,"line":646}},"selectionRange":{"end":{"character":28,"line":646},"start":{"character":9,"line":646}}},{"deprecated":false,"detail":"(ArgResults results)","kind":6,"name":"_getArgumentsForAnalytics","range":{"end":{"character":3,"line":701},"start":{"character":2,"line":656}},"selectionRange":{"end":{"character":40,"line":656},"start":{"character":15,"line":656}}},{"children":[{"deprecated":false,"detail":"(String argumentName)","kind":12,"name":"tryCandidateArgument","range":{"end":{"character":5,"line":711},"start":{"character":4,"line":706}},"selectionRange":{"end":{"character":29,"line":706},"start":{"character":9,"line":706}}}],"deprecated":false,"detail":"(ArgResults args)","kind":6,"name":"_getSdkPath","range":{"end":{"character":3,"line":719},"start":{"character":2,"line":703}},"selectionRange":{"end":{"character":20,"line":703},"start":{"character":9,"line":703}}},{"deprecated":false,"detail":"(ArgParser parser, {bool fromHelp = false})","kind":6,"name":"_printUsage","range":{"end":{"character":3,"line":727},"start":{"character":2,"line":722}},"selectionRange":{"end":{"character":18,"line":722},"start":{"character":7,"line":722}}},{"deprecated":false,"detail":"(InstrumentationService service)","kind":6,"name":"_readUuid","range":{"end":{"character":3,"line":757},"start":{"character":2,"line":730}},"selectionRange":{"end":{"character":18,"line":730},"start":{"character":9,"line":730}}},{"deprecated":false,"detail":"({int? usageLineLength, bool includeHelpFlag = true, bool defaultToLsp = false})","kind":6,"name":"createArgParser","range":{"end":{"character":3,"line":980},"start":{"character":2,"line":760}},"selectionRange":{"end":{"character":34,"line":760},"start":{"character":19,"line":760}}},{"deprecated":false,"detail":"(String path, int numOld)","kind":6,"name":"_rollLogFiles","range":{"end":{"character":3,"line":997},"start":{"character":2,"line":987}},"selectionRange":{"end":{"character":27,"line":987},"start":{"character":14,"line":987}}}],"deprecated":false,"kind":5,"name":"Driver","range":{"end":{"character":1,"line":998},"start":{"character":0,"line":50}},"selectionRange":{"end":{"character":12,"line":50},"start":{"character":6,"line":50}}},{"children":[{"deprecated":false,"kind":8,"name":"httpServer","range":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}},"selectionRange":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}}},{"deprecated":false,"detail":"()","kind":6,"name":"getServerPort","range":{"end":{"character":71,"line":1005},"start":{"character":2,"line":1005}},"selectionRange":{"end":{"character":27,"line":1005},"start":{"character":14,"line":1005}}},{"deprecated":false,"detail":"(int port)","kind":6,"name":"startOnPort","range":{"end":{"character":3,"line":1009},"start":{"character":2,"line":1007}},"selectionRange":{"end":{"character":26,"line":1007},"start":{"character":15,"line":1007}}}],"deprecated":false,"kind":5,"name":"_DiagnosticServerImpl","range":{"end":{"character":1,"line":1010},"start":{"character":0,"line":1001}},"selectionRange":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}}}]}},
+{"time":1763411730278,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5808,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411730277}},
+{"time":1763411730278,"kind":"message","sender":"server","receiver":"ide","message":{"id":5808,"jsonrpc":"2.0","result":[]}},
+{"time":1763411730705,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5809,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":677,"character":0},"end":{"line":792,"character":24}}},"clientRequestTime":1763411730705}},
+{"time":1763411730717,"kind":"message","sender":"server","receiver":"ide","message":{"id":5809,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":15,"line":52}},{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":135},"start":{"character":6,"line":135}},"uri":"file://{{dartSdkRoot}}lib/core/date_time.dart"},"value":"DateTime"}],"paddingRight":true,"position":{"character":8,"line":176}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":177}},{"kind":2,"label":[{"location":{"range":{"end":{"character":40,"line":360},"start":{"character":36,"line":360}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":31,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":27},"start":{"character":6,"line":27}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"ArgResults"}],"paddingRight":true,"position":{"character":8,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":137},"start":{"character":6,"line":137}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/legacy_analysis_server.dart"},"value":"AnalysisServerOptions"}],"paddingRight":true,"position":{"character":8,"line":180}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":182}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":183}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":184}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":186}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":25,"line":190}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":195}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":194}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":57,"line":200}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":55,"line":201}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":56,"line":202}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":204}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":207}},{"kind":2,"label":[{"location":{"range":{"end":{"character":38,"line":113},"start":{"character":34,"line":113}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":211}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/sdk_configuration.dart"},"value":"SdkConfiguration"}],"paddingRight":true,"position":{"character":8,"line":215}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":50,"line":219}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":8,"line":219}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":221}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":703},"start":{"character":32,"line":703}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":37,"line":225}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":225}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":79},"start":{"character":22,"line":79}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"defaultSdkDirectory:"}],"paddingRight":true,"position":{"character":40,"line":226}},{"kind":1,"label":[{"location":{"range":{"end":{"character":20,"line":70},"start":{"character":6,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdkManager"}],"paddingRight":true,"position":{"character":8,"line":226}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":637},"start":{"character":35,"line":637}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"defaultSdkPath:"}],"paddingRight":true,"position":{"character":39,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":12},"start":{"character":15,"line":12}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdk"}],"paddingRight":true,"position":{"character":8,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":192},"start":{"character":5,"line":192}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/tools/pkgs/unified_analytics/lib/src/enums.dart"},"value":"DashTool"},{"value":"?"}],"paddingRight":true,"position":{"character":10,"line":238}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":610},"start":{"character":12,"line":610}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdk:"}],"paddingRight":true,"position":{"character":37,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":611},"start":{"character":11,"line":611}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkPath:"}],"paddingRight":true,"position":{"character":49,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":612},"start":{"character":13,"line":612}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"tool:"}],"paddingRight":true,"position":{"character":65,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":103},"start":{"character":24,"line":103}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"analytics:"}],"paddingRight":true,"position":{"character":44,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"AnalyticsManager"}],"paddingRight":true,"position":{"character":8,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":266}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":73},"start":{"character":11,"line":73}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"crashProductId:"}],"paddingRight":true,"position":{"character":6,"line":268}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":74},"start":{"character":23,"line":74}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"shouldSend:"}],"paddingRight":true,"position":{"character":6,"line":269}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":40},"start":{"character":6,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"CrashReportSender"}],"paddingRight":true,"position":{"character":8,"line":267}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":274}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":273}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":39,"line":276}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":276}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":285}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":18,"line":286}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":656},"start":{"character":52,"line":656}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":43,"line":293}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":301}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":302}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":300}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":37,"line":9},"start":{"character":15,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"InstrumentationService"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":303}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":987},"start":{"character":35,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":20,"line":305}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":987},"start":{"character":45,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"numOld:"}],"paddingRight":true,"position":{"character":33,"line":305}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":8,"line":307}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":39},"start":{"character":9,"line":39}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/log_adapter.dart"},"value":"_instrumentationLogger:"}],"paddingRight":true,"position":{"character":10,"line":308}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":14},"start":{"character":33,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/file_instrumentation.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":36,"line":308}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":36,"line":309}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":6,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/error_notifier.dart"},"value":"ErrorNotifier"}],"paddingRight":true,"position":{"character":8,"line":314}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":35,"line":315}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":6,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":14},"start":{"character":37,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/crash_reporting.dart"},"value":"serverReporter:"}],"paddingRight":true,"position":{"character":36,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":48,"line":11},"start":{"character":39,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/multicast_service.dart"},"value":"_services:"}],"paddingRight":true,"position":{"character":6,"line":320}},{"kind":2,"label":[{"location":{"range":{"end":{"character":15,"line":82},"start":{"character":11,"line":82}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"uuid:"}],"paddingRight":true,"position":{"character":6,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":83},"start":{"character":11,"line":83}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientId:"}],"paddingRight":true,"position":{"character":6,"line":327}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":84},"start":{"character":11,"line":84}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientVersion:"}],"paddingRight":true,"position":{"character":6,"line":328}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":85},"start":{"character":11,"line":85}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"serverVersion:"}],"paddingRight":true,"position":{"character":6,"line":329}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":86},"start":{"character":11,"line":86}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"sdkVersion:"}],"paddingRight":true,"position":{"character":6,"line":330}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":730},"start":{"character":42,"line":730}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"service:"}],"paddingRight":true,"position":{"character":22,"line":326}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":44,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":31,"line":35},"start":{"character":6,"line":35}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"SessionLoggerInMemorySink"}],"paddingRight":true,"position":{"character":8,"line":337}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":31,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":54,"line":340}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":346}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":347}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":345}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":420},"start":{"character":35,"line":420}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"source:"}],"paddingRight":true,"position":{"character":41,"line":350}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":352}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":353}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":20,"line":354}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":366}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":526},"start":{"character":15,"line":526}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":8,"line":370}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":527},"start":{"character":26,"line":527}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":371}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":528},"start":{"character":19,"line":528}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":372}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":529},"start":{"character":21,"line":529}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":373}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":530},"start":{"character":27,"line":530}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":374}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":531},"start":{"character":18,"line":531}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":375}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":532},"start":{"character":9,"line":532}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":376}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":533},"start":{"character":18,"line":533}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":377}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":403},"start":{"character":15,"line":403}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":8,"line":381}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":404},"start":{"character":26,"line":404}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":382}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":405},"start":{"character":14,"line":405}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":8,"line":383}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":406},"start":{"character":19,"line":406}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":384}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":407},"start":{"character":21,"line":407}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":385}},{"kind":2,"label":[{"location":{"range":{"end":{"character":69,"line":408},"start":{"character":37,"line":408}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":8,"line":386}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":409},"start":{"character":27,"line":409}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":387}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":410},"start":{"character":18,"line":410}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":388}},{"kind":2,"label":[{"location":{"range":{"end":{"character":45,"line":411},"start":{"character":28,"line":411}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":8,"line":389}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":412},"start":{"character":9,"line":412}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":390}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":413},"start":{"character":18,"line":413}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":391}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":414},"start":{"character":14,"line":414}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sendPort:"}],"paddingRight":true,"position":{"character":8,"line":392}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":8},"start":{"character":15,"line":8}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"arguments:"}],"paddingRight":true,"position":{"character":6,"line":397}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":9},"start":{"character":16,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"callback:"}],"paddingRight":true,"position":{"character":6,"line":398}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":25},"start":{"character":6,"line":25}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/leak_tracker/pkgs/memory_usage/lib/src/model.dart"},"value":"MemoryUsageEvent"}],"paddingRight":true,"position":{"character":7,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":53,"line":268},"start":{"character":48,"line":268}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"event:"}],"paddingRight":true,"position":{"character":61,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":31,"line":416}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":417}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":416}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":40,"line":419}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":419}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":772},"start":{"character":37,"line":772}},"uri":"file://{{dartSdkRoot}}lib/io/file_system_entity.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":44,"line":421}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":422}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":431}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":63},"start":{"character":9,"line":63}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":437}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":64},"start":{"character":9,"line":64}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":438}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":65},"start":{"character":9,"line":65}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":6,"line":439}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":66},"start":{"character":9,"line":66}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":440}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":67},"start":{"character":9,"line":67}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":441}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":68},"start":{"character":9,"line":68}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":6,"line":442}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":69},"start":{"character":9,"line":69}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":443}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":70},"start":{"character":9,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":444}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":71},"start":{"character":9,"line":71}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":445}},{"kind":1,"label":[{"location":{"range":{"end":{"character":18,"line":31},"start":{"character":6,"line":31}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"SocketServer"}],"paddingRight":true,"position":{"character":8,"line":436}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":448}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":450}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":456}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":239},"start":{"character":36,"line":239}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"prefix:"}],"paddingRight":true,"position":{"character":8,"line":460}},{"kind":1,"label":[{"location":{"range":{"end":{"character":34,"line":99},"start":{"character":25,"line":99}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"Directory"}],"paddingRight":true,"position":{"character":10,"line":459}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":464}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":29},"start":{"character":25,"line":29}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":40,"line":467}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":15},"start":{"character":6,"line":15}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"DevAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":467}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":472}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":58,"line":473}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":58,"line":473}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":12,"line":473}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":474}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":476}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":479}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":54,"line":480}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":54,"line":480}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":481}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":18,"line":485}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":13,"line":493}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":8,"line":497}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":8,"line":498}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":27,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":50,"line":501}},{"kind":1,"label":[{"location":{"range":{"end":{"character":25,"line":11},"start":{"character":6,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"StdioAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":501}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":19},"start":{"character":29,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":62,"line":504}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"IsolateAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":504}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":23},"start":{"character":37,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"clientSendPort:"}],"paddingRight":true,"position":{"character":61,"line":505}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":27,"line":508}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":27,"line":511}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":28,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":22,"line":514}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":39,"line":515}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":26,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":518}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":535}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":536}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":535}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":543}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":51},"start":{"character":9,"line":51}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":546}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":52},"start":{"character":9,"line":52}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":547}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":53},"start":{"character":9,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":548}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":54},"start":{"character":9,"line":54}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":549}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":55},"start":{"character":9,"line":55}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":550}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":56},"start":{"character":9,"line":56}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":551}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":57},"start":{"character":9,"line":57}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":552}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":23},"start":{"character":6,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"LspSocketServer"}],"paddingRight":true,"position":{"character":8,"line":545}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":555}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":558}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":12,"line":561}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":36,"line":561}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":19},"start":{"character":30,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":47,"line":562}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"LspStdioAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":562}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":36,"line":563}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":37,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":20,"line":567}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":15,"line":568}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":35,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":590}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":590}},{"kind":2,"label":[{"value":"line:"}],"paddingRight":true,"position":{"character":18,"line":599}},{"kind":1,"label":[{"value":"Null Function(Zone, ZoneDelegate, Zone, String)?"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":594}},{"kind":1,"label":[{"location":{"range":{"end":{"character":38,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/async/zone_specification.dart"},"value":"ZoneSpecification"}],"paddingRight":true,"position":{"character":8,"line":601}},{"kind":2,"label":[{"location":{"range":{"end":{"character":8,"line":64},"start":{"character":4,"line":64}},"uri":"file://{{dartSdkRoot}}lib/async/zone_api.dart"},"value":"body:"}],"paddingRight":true,"position":{"character":20,"line":605}},{"kind":1,"label":[{"value":"<"},{"value":"void"},{"value":">"}],"position":{"character":19,"line":605}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":616}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":26,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":46,"line":618}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":617}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":268},"start":{"character":11,"line":268}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":23,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":269},"start":{"character":12,"line":269}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part2:"}],"paddingRight":true,"position":{"character":39,"line":621}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":15,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":620}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":8,"line":638}},{"kind":2,"label":[{"location":{"range":{"end":{"character":54,"line":389},"start":{"character":38,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"resourceProvider:"}],"paddingRight":true,"position":{"character":6,"line":640}},{"kind":2,"label":[{"location":{"range":{"end":{"character":75,"line":389},"start":{"character":63,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"sdkDirectory:"}],"paddingRight":true,"position":{"character":6,"line":641}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":53},"start":{"character":26,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":641}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":647}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":55},"start":{"character":18,"line":55}},"uri":"file://{{dartSdkRoot}}lib/math/random.dart"},"value":"max:"}],"paddingRight":true,"position":{"character":34,"line":648}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":648}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":25,"line":659}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":659}},{"kind":2,"label":[{"value":"test:"}],"paddingRight":true,"position":{"character":15,"line":699}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":16,"line":699}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":47,"line":699}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":10,"line":707}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":713}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":714}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":715}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":717}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":428},"start":{"character":26,"line":428}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":79},"start":{"character":11,"line":79}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":54,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":723}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":724}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":725}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":726}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":75},"start":{"character":34,"line":75}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"pluginId:"}],"paddingRight":true,"position":{"character":26,"line":732}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":72},"start":{"character":15,"line":72}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"Folder"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":731}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":24,"line":736}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":97},"start":{"character":27,"line":97}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"relPath:"}],"paddingRight":true,"position":{"character":57,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":191},"start":{"character":25,"line":191}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":739}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":745}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":745}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":747}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":704},"start":{"character":11,"line":704}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"contents:"}],"paddingRight":true,"position":{"character":33,"line":750}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":752}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":752}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":765}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":768}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":775}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":780}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":785}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":789}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":791}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":796}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":266},"start":{"character":29,"line":266}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":803}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":812}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":15,"line":815}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":", "},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":19,"line":816}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":830}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":354},"start":{"character":27,"line":354}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"text:"}],"paddingRight":true,"position":{"character":24,"line":836}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":839}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":843}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":846}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":852}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":856}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":859}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":865}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":871}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":878}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":888}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":896}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":902}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":908}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":917}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":922}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":927}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":933}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":939}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":945}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":959}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":961}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":963}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":965}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":967}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":969}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":971}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":973}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":975}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":977}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":13,"line":988}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":990}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":13,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":310},"start":{"character":25,"line":310}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"newPath:"}],"paddingRight":true,"position":{"character":33,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":70},"start":{"character":31,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"initialPort:"}],"paddingRight":true,"position":{"character":32,"line":1008}}]}},
+{"time":1763411731563,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5810,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":738,"character":30}},"clientRequestTime":1763411731563}},
+{"time":1763411731564,"kind":"message","sender":"server","receiver":"ide","message":{"id":5810,"jsonrpc":"2.0","result":null}},
+{"time":1763411732183,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5811,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":736,"character":26}},"clientRequestTime":1763411732183}},
+{"time":1763411732184,"kind":"message","sender":"server","receiver":"ide","message":{"id":5811,"jsonrpc":"2.0","result":{"contents":{"kind":"markdown","value":"```dart\nFolder? instrumentationLocation\n```\nType: `Folder`"},"range":{"end":{"character":47,"line":736},"start":{"character":24,"line":736}}}}},
+{"time":1763411733294,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5812,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":655,"character":0},"end":{"line":771,"character":22}}},"clientRequestTime":1763411733294}},
+{"time":1763411733299,"kind":"message","sender":"server","receiver":"ide","message":{"id":5812,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":15,"line":52}},{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":135},"start":{"character":6,"line":135}},"uri":"file://{{dartSdkRoot}}lib/core/date_time.dart"},"value":"DateTime"}],"paddingRight":true,"position":{"character":8,"line":176}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":177}},{"kind":2,"label":[{"location":{"range":{"end":{"character":40,"line":360},"start":{"character":36,"line":360}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":31,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":27},"start":{"character":6,"line":27}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"ArgResults"}],"paddingRight":true,"position":{"character":8,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":137},"start":{"character":6,"line":137}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/legacy_analysis_server.dart"},"value":"AnalysisServerOptions"}],"paddingRight":true,"position":{"character":8,"line":180}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":182}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":183}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":184}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":186}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":25,"line":190}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":195}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":194}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":57,"line":200}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":55,"line":201}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":56,"line":202}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":204}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":207}},{"kind":2,"label":[{"location":{"range":{"end":{"character":38,"line":113},"start":{"character":34,"line":113}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":211}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/sdk_configuration.dart"},"value":"SdkConfiguration"}],"paddingRight":true,"position":{"character":8,"line":215}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":50,"line":219}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":8,"line":219}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":221}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":703},"start":{"character":32,"line":703}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":37,"line":225}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":225}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":79},"start":{"character":22,"line":79}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"defaultSdkDirectory:"}],"paddingRight":true,"position":{"character":40,"line":226}},{"kind":1,"label":[{"location":{"range":{"end":{"character":20,"line":70},"start":{"character":6,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdkManager"}],"paddingRight":true,"position":{"character":8,"line":226}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":637},"start":{"character":35,"line":637}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"defaultSdkPath:"}],"paddingRight":true,"position":{"character":39,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":12},"start":{"character":15,"line":12}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdk"}],"paddingRight":true,"position":{"character":8,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":192},"start":{"character":5,"line":192}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/tools/pkgs/unified_analytics/lib/src/enums.dart"},"value":"DashTool"},{"value":"?"}],"paddingRight":true,"position":{"character":10,"line":238}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":610},"start":{"character":12,"line":610}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdk:"}],"paddingRight":true,"position":{"character":37,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":611},"start":{"character":11,"line":611}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkPath:"}],"paddingRight":true,"position":{"character":49,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":612},"start":{"character":13,"line":612}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"tool:"}],"paddingRight":true,"position":{"character":65,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":103},"start":{"character":24,"line":103}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"analytics:"}],"paddingRight":true,"position":{"character":44,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"AnalyticsManager"}],"paddingRight":true,"position":{"character":8,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":266}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":73},"start":{"character":11,"line":73}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"crashProductId:"}],"paddingRight":true,"position":{"character":6,"line":268}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":74},"start":{"character":23,"line":74}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"shouldSend:"}],"paddingRight":true,"position":{"character":6,"line":269}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":40},"start":{"character":6,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"CrashReportSender"}],"paddingRight":true,"position":{"character":8,"line":267}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":274}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":273}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":39,"line":276}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":276}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":285}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":18,"line":286}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":656},"start":{"character":52,"line":656}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":43,"line":293}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":301}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":302}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":300}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":37,"line":9},"start":{"character":15,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"InstrumentationService"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":303}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":987},"start":{"character":35,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":20,"line":305}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":987},"start":{"character":45,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"numOld:"}],"paddingRight":true,"position":{"character":33,"line":305}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":8,"line":307}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":39},"start":{"character":9,"line":39}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/log_adapter.dart"},"value":"_instrumentationLogger:"}],"paddingRight":true,"position":{"character":10,"line":308}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":14},"start":{"character":33,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/file_instrumentation.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":36,"line":308}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":36,"line":309}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":6,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/error_notifier.dart"},"value":"ErrorNotifier"}],"paddingRight":true,"position":{"character":8,"line":314}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":35,"line":315}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":6,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":14},"start":{"character":37,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/crash_reporting.dart"},"value":"serverReporter:"}],"paddingRight":true,"position":{"character":36,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":48,"line":11},"start":{"character":39,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/multicast_service.dart"},"value":"_services:"}],"paddingRight":true,"position":{"character":6,"line":320}},{"kind":2,"label":[{"location":{"range":{"end":{"character":15,"line":82},"start":{"character":11,"line":82}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"uuid:"}],"paddingRight":true,"position":{"character":6,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":83},"start":{"character":11,"line":83}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientId:"}],"paddingRight":true,"position":{"character":6,"line":327}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":84},"start":{"character":11,"line":84}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientVersion:"}],"paddingRight":true,"position":{"character":6,"line":328}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":85},"start":{"character":11,"line":85}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"serverVersion:"}],"paddingRight":true,"position":{"character":6,"line":329}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":86},"start":{"character":11,"line":86}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"sdkVersion:"}],"paddingRight":true,"position":{"character":6,"line":330}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":730},"start":{"character":42,"line":730}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"service:"}],"paddingRight":true,"position":{"character":22,"line":326}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":44,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":31,"line":35},"start":{"character":6,"line":35}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"SessionLoggerInMemorySink"}],"paddingRight":true,"position":{"character":8,"line":337}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":31,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":54,"line":340}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":346}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":347}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":345}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":420},"start":{"character":35,"line":420}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"source:"}],"paddingRight":true,"position":{"character":41,"line":350}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":352}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":353}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":20,"line":354}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":366}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":526},"start":{"character":15,"line":526}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":8,"line":370}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":527},"start":{"character":26,"line":527}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":371}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":528},"start":{"character":19,"line":528}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":372}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":529},"start":{"character":21,"line":529}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":373}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":530},"start":{"character":27,"line":530}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":374}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":531},"start":{"character":18,"line":531}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":375}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":532},"start":{"character":9,"line":532}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":376}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":533},"start":{"character":18,"line":533}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":377}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":403},"start":{"character":15,"line":403}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":8,"line":381}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":404},"start":{"character":26,"line":404}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":382}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":405},"start":{"character":14,"line":405}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":8,"line":383}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":406},"start":{"character":19,"line":406}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":384}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":407},"start":{"character":21,"line":407}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":385}},{"kind":2,"label":[{"location":{"range":{"end":{"character":69,"line":408},"start":{"character":37,"line":408}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":8,"line":386}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":409},"start":{"character":27,"line":409}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":387}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":410},"start":{"character":18,"line":410}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":388}},{"kind":2,"label":[{"location":{"range":{"end":{"character":45,"line":411},"start":{"character":28,"line":411}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":8,"line":389}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":412},"start":{"character":9,"line":412}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":390}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":413},"start":{"character":18,"line":413}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":391}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":414},"start":{"character":14,"line":414}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sendPort:"}],"paddingRight":true,"position":{"character":8,"line":392}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":8},"start":{"character":15,"line":8}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"arguments:"}],"paddingRight":true,"position":{"character":6,"line":397}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":9},"start":{"character":16,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"callback:"}],"paddingRight":true,"position":{"character":6,"line":398}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":25},"start":{"character":6,"line":25}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/leak_tracker/pkgs/memory_usage/lib/src/model.dart"},"value":"MemoryUsageEvent"}],"paddingRight":true,"position":{"character":7,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":53,"line":268},"start":{"character":48,"line":268}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"event:"}],"paddingRight":true,"position":{"character":61,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":31,"line":416}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":417}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":416}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":40,"line":419}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":419}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":772},"start":{"character":37,"line":772}},"uri":"file://{{dartSdkRoot}}lib/io/file_system_entity.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":44,"line":421}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":422}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":431}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":63},"start":{"character":9,"line":63}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":437}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":64},"start":{"character":9,"line":64}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":438}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":65},"start":{"character":9,"line":65}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":6,"line":439}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":66},"start":{"character":9,"line":66}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":440}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":67},"start":{"character":9,"line":67}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":441}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":68},"start":{"character":9,"line":68}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":6,"line":442}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":69},"start":{"character":9,"line":69}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":443}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":70},"start":{"character":9,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":444}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":71},"start":{"character":9,"line":71}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":445}},{"kind":1,"label":[{"location":{"range":{"end":{"character":18,"line":31},"start":{"character":6,"line":31}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"SocketServer"}],"paddingRight":true,"position":{"character":8,"line":436}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":448}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":450}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":456}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":239},"start":{"character":36,"line":239}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"prefix:"}],"paddingRight":true,"position":{"character":8,"line":460}},{"kind":1,"label":[{"location":{"range":{"end":{"character":34,"line":99},"start":{"character":25,"line":99}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"Directory"}],"paddingRight":true,"position":{"character":10,"line":459}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":464}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":29},"start":{"character":25,"line":29}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":40,"line":467}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":15},"start":{"character":6,"line":15}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"DevAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":467}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":472}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":58,"line":473}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":58,"line":473}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":12,"line":473}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":474}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":476}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":479}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":54,"line":480}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":54,"line":480}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":481}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":18,"line":485}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":13,"line":493}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":8,"line":497}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":8,"line":498}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":27,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":50,"line":501}},{"kind":1,"label":[{"location":{"range":{"end":{"character":25,"line":11},"start":{"character":6,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"StdioAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":501}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":19},"start":{"character":29,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":62,"line":504}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"IsolateAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":504}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":23},"start":{"character":37,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"clientSendPort:"}],"paddingRight":true,"position":{"character":61,"line":505}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":27,"line":508}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":27,"line":511}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":28,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":22,"line":514}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":39,"line":515}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":26,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":518}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":535}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":536}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":535}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":543}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":51},"start":{"character":9,"line":51}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":546}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":52},"start":{"character":9,"line":52}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":547}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":53},"start":{"character":9,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":548}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":54},"start":{"character":9,"line":54}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":549}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":55},"start":{"character":9,"line":55}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":550}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":56},"start":{"character":9,"line":56}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":551}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":57},"start":{"character":9,"line":57}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":552}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":23},"start":{"character":6,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"LspSocketServer"}],"paddingRight":true,"position":{"character":8,"line":545}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":555}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":558}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":12,"line":561}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":36,"line":561}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":19},"start":{"character":30,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":47,"line":562}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"LspStdioAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":562}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":36,"line":563}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":37,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":20,"line":567}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":15,"line":568}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":35,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":590}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":590}},{"kind":2,"label":[{"value":"line:"}],"paddingRight":true,"position":{"character":18,"line":599}},{"kind":1,"label":[{"value":"Null Function(Zone, ZoneDelegate, Zone, String)?"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":594}},{"kind":1,"label":[{"location":{"range":{"end":{"character":38,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/async/zone_specification.dart"},"value":"ZoneSpecification"}],"paddingRight":true,"position":{"character":8,"line":601}},{"kind":2,"label":[{"location":{"range":{"end":{"character":8,"line":64},"start":{"character":4,"line":64}},"uri":"file://{{dartSdkRoot}}lib/async/zone_api.dart"},"value":"body:"}],"paddingRight":true,"position":{"character":20,"line":605}},{"kind":1,"label":[{"value":"<"},{"value":"void"},{"value":">"}],"position":{"character":19,"line":605}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":616}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":26,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":46,"line":618}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":617}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":268},"start":{"character":11,"line":268}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":23,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":269},"start":{"character":12,"line":269}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part2:"}],"paddingRight":true,"position":{"character":39,"line":621}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":15,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":620}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":8,"line":638}},{"kind":2,"label":[{"location":{"range":{"end":{"character":54,"line":389},"start":{"character":38,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"resourceProvider:"}],"paddingRight":true,"position":{"character":6,"line":640}},{"kind":2,"label":[{"location":{"range":{"end":{"character":75,"line":389},"start":{"character":63,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"sdkDirectory:"}],"paddingRight":true,"position":{"character":6,"line":641}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":53},"start":{"character":26,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":641}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":647}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":55},"start":{"character":18,"line":55}},"uri":"file://{{dartSdkRoot}}lib/math/random.dart"},"value":"max:"}],"paddingRight":true,"position":{"character":34,"line":648}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":648}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":25,"line":659}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":659}},{"kind":2,"label":[{"value":"test:"}],"paddingRight":true,"position":{"character":15,"line":699}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":16,"line":699}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":47,"line":699}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":10,"line":707}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":713}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":714}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":715}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":717}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":428},"start":{"character":26,"line":428}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":79},"start":{"character":11,"line":79}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":54,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":723}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":724}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":725}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":726}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":75},"start":{"character":34,"line":75}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"pluginId:"}],"paddingRight":true,"position":{"character":26,"line":732}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":72},"start":{"character":15,"line":72}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"Folder"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":731}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":24,"line":736}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":97},"start":{"character":27,"line":97}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"relPath:"}],"paddingRight":true,"position":{"character":57,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":191},"start":{"character":25,"line":191}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":739}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":745}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":745}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":747}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":704},"start":{"character":11,"line":704}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"contents:"}],"paddingRight":true,"position":{"character":33,"line":750}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":752}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":752}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":765}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":768}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":775}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":780}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":785}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":789}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":791}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":796}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":266},"start":{"character":29,"line":266}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":803}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":812}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":15,"line":815}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":", "},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":19,"line":816}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":830}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":354},"start":{"character":27,"line":354}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"text:"}],"paddingRight":true,"position":{"character":24,"line":836}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":839}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":843}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":846}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":852}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":856}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":859}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":865}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":871}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":878}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":888}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":896}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":902}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":908}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":917}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":922}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":927}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":933}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":939}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":945}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":959}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":961}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":963}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":965}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":967}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":969}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":971}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":973}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":975}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":977}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":13,"line":988}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":990}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":13,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":310},"start":{"character":25,"line":310}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"newPath:"}],"paddingRight":true,"position":{"character":33,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":70},"start":{"character":31,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"initialPort:"}],"paddingRight":true,"position":{"character":32,"line":1008}}]}},
+{"time":1763411733755,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5813,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":654,"character":0},"end":{"line":770,"character":25}}},"clientRequestTime":1763411733755}},
+{"time":1763411733760,"kind":"message","sender":"server","receiver":"ide","message":{"id":5813,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":15,"line":52}},{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":135},"start":{"character":6,"line":135}},"uri":"file://{{dartSdkRoot}}lib/core/date_time.dart"},"value":"DateTime"}],"paddingRight":true,"position":{"character":8,"line":176}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":177}},{"kind":2,"label":[{"location":{"range":{"end":{"character":40,"line":360},"start":{"character":36,"line":360}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":31,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":27},"start":{"character":6,"line":27}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"ArgResults"}],"paddingRight":true,"position":{"character":8,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":137},"start":{"character":6,"line":137}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/legacy_analysis_server.dart"},"value":"AnalysisServerOptions"}],"paddingRight":true,"position":{"character":8,"line":180}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":182}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":183}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":184}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":186}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":25,"line":190}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":195}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":194}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":57,"line":200}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":55,"line":201}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":56,"line":202}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":204}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":207}},{"kind":2,"label":[{"location":{"range":{"end":{"character":38,"line":113},"start":{"character":34,"line":113}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":211}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/sdk_configuration.dart"},"value":"SdkConfiguration"}],"paddingRight":true,"position":{"character":8,"line":215}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":50,"line":219}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":8,"line":219}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":221}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":703},"start":{"character":32,"line":703}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":37,"line":225}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":225}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":79},"start":{"character":22,"line":79}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"defaultSdkDirectory:"}],"paddingRight":true,"position":{"character":40,"line":226}},{"kind":1,"label":[{"location":{"range":{"end":{"character":20,"line":70},"start":{"character":6,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdkManager"}],"paddingRight":true,"position":{"character":8,"line":226}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":637},"start":{"character":35,"line":637}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"defaultSdkPath:"}],"paddingRight":true,"position":{"character":39,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":12},"start":{"character":15,"line":12}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdk"}],"paddingRight":true,"position":{"character":8,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":192},"start":{"character":5,"line":192}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/tools/pkgs/unified_analytics/lib/src/enums.dart"},"value":"DashTool"},{"value":"?"}],"paddingRight":true,"position":{"character":10,"line":238}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":610},"start":{"character":12,"line":610}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdk:"}],"paddingRight":true,"position":{"character":37,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":611},"start":{"character":11,"line":611}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkPath:"}],"paddingRight":true,"position":{"character":49,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":612},"start":{"character":13,"line":612}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"tool:"}],"paddingRight":true,"position":{"character":65,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":103},"start":{"character":24,"line":103}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"analytics:"}],"paddingRight":true,"position":{"character":44,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"AnalyticsManager"}],"paddingRight":true,"position":{"character":8,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":266}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":73},"start":{"character":11,"line":73}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"crashProductId:"}],"paddingRight":true,"position":{"character":6,"line":268}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":74},"start":{"character":23,"line":74}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"shouldSend:"}],"paddingRight":true,"position":{"character":6,"line":269}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":40},"start":{"character":6,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"CrashReportSender"}],"paddingRight":true,"position":{"character":8,"line":267}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":274}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":273}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":39,"line":276}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":276}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":285}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":18,"line":286}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":656},"start":{"character":52,"line":656}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":43,"line":293}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":301}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":302}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":300}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":37,"line":9},"start":{"character":15,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"InstrumentationService"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":303}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":987},"start":{"character":35,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":20,"line":305}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":987},"start":{"character":45,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"numOld:"}],"paddingRight":true,"position":{"character":33,"line":305}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":8,"line":307}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":39},"start":{"character":9,"line":39}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/log_adapter.dart"},"value":"_instrumentationLogger:"}],"paddingRight":true,"position":{"character":10,"line":308}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":14},"start":{"character":33,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/file_instrumentation.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":36,"line":308}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":36,"line":309}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":6,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/error_notifier.dart"},"value":"ErrorNotifier"}],"paddingRight":true,"position":{"character":8,"line":314}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":35,"line":315}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":6,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":14},"start":{"character":37,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/crash_reporting.dart"},"value":"serverReporter:"}],"paddingRight":true,"position":{"character":36,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":48,"line":11},"start":{"character":39,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/multicast_service.dart"},"value":"_services:"}],"paddingRight":true,"position":{"character":6,"line":320}},{"kind":2,"label":[{"location":{"range":{"end":{"character":15,"line":82},"start":{"character":11,"line":82}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"uuid:"}],"paddingRight":true,"position":{"character":6,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":83},"start":{"character":11,"line":83}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientId:"}],"paddingRight":true,"position":{"character":6,"line":327}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":84},"start":{"character":11,"line":84}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientVersion:"}],"paddingRight":true,"position":{"character":6,"line":328}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":85},"start":{"character":11,"line":85}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"serverVersion:"}],"paddingRight":true,"position":{"character":6,"line":329}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":86},"start":{"character":11,"line":86}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"sdkVersion:"}],"paddingRight":true,"position":{"character":6,"line":330}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":730},"start":{"character":42,"line":730}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"service:"}],"paddingRight":true,"position":{"character":22,"line":326}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":44,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":31,"line":35},"start":{"character":6,"line":35}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"SessionLoggerInMemorySink"}],"paddingRight":true,"position":{"character":8,"line":337}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":31,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":54,"line":340}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":346}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":347}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":345}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":420},"start":{"character":35,"line":420}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"source:"}],"paddingRight":true,"position":{"character":41,"line":350}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":352}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":353}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":20,"line":354}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":366}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":526},"start":{"character":15,"line":526}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":8,"line":370}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":527},"start":{"character":26,"line":527}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":371}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":528},"start":{"character":19,"line":528}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":372}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":529},"start":{"character":21,"line":529}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":373}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":530},"start":{"character":27,"line":530}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":374}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":531},"start":{"character":18,"line":531}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":375}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":532},"start":{"character":9,"line":532}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":376}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":533},"start":{"character":18,"line":533}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":377}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":403},"start":{"character":15,"line":403}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":8,"line":381}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":404},"start":{"character":26,"line":404}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":382}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":405},"start":{"character":14,"line":405}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":8,"line":383}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":406},"start":{"character":19,"line":406}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":384}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":407},"start":{"character":21,"line":407}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":385}},{"kind":2,"label":[{"location":{"range":{"end":{"character":69,"line":408},"start":{"character":37,"line":408}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":8,"line":386}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":409},"start":{"character":27,"line":409}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":387}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":410},"start":{"character":18,"line":410}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":388}},{"kind":2,"label":[{"location":{"range":{"end":{"character":45,"line":411},"start":{"character":28,"line":411}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":8,"line":389}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":412},"start":{"character":9,"line":412}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":390}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":413},"start":{"character":18,"line":413}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":391}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":414},"start":{"character":14,"line":414}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sendPort:"}],"paddingRight":true,"position":{"character":8,"line":392}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":8},"start":{"character":15,"line":8}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"arguments:"}],"paddingRight":true,"position":{"character":6,"line":397}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":9},"start":{"character":16,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"callback:"}],"paddingRight":true,"position":{"character":6,"line":398}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":25},"start":{"character":6,"line":25}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/leak_tracker/pkgs/memory_usage/lib/src/model.dart"},"value":"MemoryUsageEvent"}],"paddingRight":true,"position":{"character":7,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":53,"line":268},"start":{"character":48,"line":268}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"event:"}],"paddingRight":true,"position":{"character":61,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":31,"line":416}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":417}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":416}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":40,"line":419}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":419}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":772},"start":{"character":37,"line":772}},"uri":"file://{{dartSdkRoot}}lib/io/file_system_entity.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":44,"line":421}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":422}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":431}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":63},"start":{"character":9,"line":63}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":437}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":64},"start":{"character":9,"line":64}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":438}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":65},"start":{"character":9,"line":65}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":6,"line":439}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":66},"start":{"character":9,"line":66}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":440}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":67},"start":{"character":9,"line":67}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":441}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":68},"start":{"character":9,"line":68}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":6,"line":442}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":69},"start":{"character":9,"line":69}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":443}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":70},"start":{"character":9,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":444}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":71},"start":{"character":9,"line":71}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":445}},{"kind":1,"label":[{"location":{"range":{"end":{"character":18,"line":31},"start":{"character":6,"line":31}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"SocketServer"}],"paddingRight":true,"position":{"character":8,"line":436}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":448}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":450}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":456}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":239},"start":{"character":36,"line":239}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"prefix:"}],"paddingRight":true,"position":{"character":8,"line":460}},{"kind":1,"label":[{"location":{"range":{"end":{"character":34,"line":99},"start":{"character":25,"line":99}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"Directory"}],"paddingRight":true,"position":{"character":10,"line":459}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":464}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":29},"start":{"character":25,"line":29}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":40,"line":467}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":15},"start":{"character":6,"line":15}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"DevAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":467}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":472}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":58,"line":473}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":58,"line":473}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":12,"line":473}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":474}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":476}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":479}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":54,"line":480}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":54,"line":480}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":481}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":18,"line":485}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":13,"line":493}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":8,"line":497}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":8,"line":498}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":27,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":50,"line":501}},{"kind":1,"label":[{"location":{"range":{"end":{"character":25,"line":11},"start":{"character":6,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"StdioAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":501}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":19},"start":{"character":29,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":62,"line":504}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"IsolateAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":504}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":23},"start":{"character":37,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"clientSendPort:"}],"paddingRight":true,"position":{"character":61,"line":505}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":27,"line":508}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":27,"line":511}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":28,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":22,"line":514}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":39,"line":515}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":26,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":518}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":535}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":536}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":535}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":543}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":51},"start":{"character":9,"line":51}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":546}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":52},"start":{"character":9,"line":52}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":547}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":53},"start":{"character":9,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":548}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":54},"start":{"character":9,"line":54}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":549}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":55},"start":{"character":9,"line":55}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":550}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":56},"start":{"character":9,"line":56}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":551}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":57},"start":{"character":9,"line":57}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":552}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":23},"start":{"character":6,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"LspSocketServer"}],"paddingRight":true,"position":{"character":8,"line":545}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":555}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":558}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":12,"line":561}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":36,"line":561}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":19},"start":{"character":30,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":47,"line":562}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"LspStdioAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":562}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":36,"line":563}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":37,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":20,"line":567}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":15,"line":568}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":35,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":590}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":590}},{"kind":2,"label":[{"value":"line:"}],"paddingRight":true,"position":{"character":18,"line":599}},{"kind":1,"label":[{"value":"Null Function(Zone, ZoneDelegate, Zone, String)?"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":594}},{"kind":1,"label":[{"location":{"range":{"end":{"character":38,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/async/zone_specification.dart"},"value":"ZoneSpecification"}],"paddingRight":true,"position":{"character":8,"line":601}},{"kind":2,"label":[{"location":{"range":{"end":{"character":8,"line":64},"start":{"character":4,"line":64}},"uri":"file://{{dartSdkRoot}}lib/async/zone_api.dart"},"value":"body:"}],"paddingRight":true,"position":{"character":20,"line":605}},{"kind":1,"label":[{"value":"<"},{"value":"void"},{"value":">"}],"position":{"character":19,"line":605}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":616}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":26,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":46,"line":618}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":617}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":268},"start":{"character":11,"line":268}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":23,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":269},"start":{"character":12,"line":269}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part2:"}],"paddingRight":true,"position":{"character":39,"line":621}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":15,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":620}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":8,"line":638}},{"kind":2,"label":[{"location":{"range":{"end":{"character":54,"line":389},"start":{"character":38,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"resourceProvider:"}],"paddingRight":true,"position":{"character":6,"line":640}},{"kind":2,"label":[{"location":{"range":{"end":{"character":75,"line":389},"start":{"character":63,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"sdkDirectory:"}],"paddingRight":true,"position":{"character":6,"line":641}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":53},"start":{"character":26,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":641}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":647}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":55},"start":{"character":18,"line":55}},"uri":"file://{{dartSdkRoot}}lib/math/random.dart"},"value":"max:"}],"paddingRight":true,"position":{"character":34,"line":648}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":648}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":25,"line":659}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":659}},{"kind":2,"label":[{"value":"test:"}],"paddingRight":true,"position":{"character":15,"line":699}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":16,"line":699}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":47,"line":699}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":10,"line":707}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":713}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":714}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":715}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":717}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":428},"start":{"character":26,"line":428}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":79},"start":{"character":11,"line":79}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":54,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":723}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":724}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":725}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":726}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":75},"start":{"character":34,"line":75}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"pluginId:"}],"paddingRight":true,"position":{"character":26,"line":732}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":72},"start":{"character":15,"line":72}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"Folder"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":731}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":24,"line":736}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":97},"start":{"character":27,"line":97}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"relPath:"}],"paddingRight":true,"position":{"character":57,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":191},"start":{"character":25,"line":191}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":739}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":745}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":745}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":747}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":704},"start":{"character":11,"line":704}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"contents:"}],"paddingRight":true,"position":{"character":33,"line":750}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":752}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":752}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":765}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":768}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":775}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":780}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":785}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":789}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":791}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":796}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":266},"start":{"character":29,"line":266}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":803}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":812}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":15,"line":815}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":", "},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":19,"line":816}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":830}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":354},"start":{"character":27,"line":354}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"text:"}],"paddingRight":true,"position":{"character":24,"line":836}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":839}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":843}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":846}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":852}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":856}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":859}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":865}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":871}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":878}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":888}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":896}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":902}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":908}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":917}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":922}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":927}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":933}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":939}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":945}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":959}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":961}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":963}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":965}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":967}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":969}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":971}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":973}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":975}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":977}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":13,"line":988}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":990}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":13,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":310},"start":{"character":25,"line":310}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"newPath:"}],"paddingRight":true,"position":{"character":33,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":70},"start":{"character":31,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"initialPort:"}],"paddingRight":true,"position":{"character":32,"line":1008}}]}},
+{"time":1763411735919,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5814,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":50,"character":24}},"clientRequestTime":1763411735918}},
+{"time":1763411735920,"kind":"message","sender":"server","receiver":"ide","message":{"id":5814,"jsonrpc":"2.0","result":[{"range":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}}}]}},
+{"time":1763411735981,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5815,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":111,"character":0}}},"clientRequestTime":1763411735980}},
+{"time":1763411735986,"kind":"message","sender":"server","receiver":"ide","message":{"id":5815,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":15,"line":52}},{"kind":1,"label":[{"location":{"range":{"end":{"character":14,"line":135},"start":{"character":6,"line":135}},"uri":"file://{{dartSdkRoot}}lib/core/date_time.dart"},"value":"DateTime"}],"paddingRight":true,"position":{"character":8,"line":176}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":177}},{"kind":2,"label":[{"location":{"range":{"end":{"character":40,"line":360},"start":{"character":36,"line":360}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":31,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":27},"start":{"character":6,"line":27}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"ArgResults"}],"paddingRight":true,"position":{"character":8,"line":178}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":137},"start":{"character":6,"line":137}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/legacy_analysis_server.dart"},"value":"AnalysisServerOptions"}],"paddingRight":true,"position":{"character":8,"line":180}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":182}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":183}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":184}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":186}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":25,"line":190}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":195}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":194}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":57,"line":200}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":55,"line":201}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":56,"line":202}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":204}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":207}},{"kind":2,"label":[{"location":{"range":{"end":{"character":38,"line":113},"start":{"character":34,"line":113}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":211}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/sdk_configuration.dart"},"value":"SdkConfiguration"}],"paddingRight":true,"position":{"character":8,"line":215}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":50,"line":219}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":8,"line":219}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":26,"line":221}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":703},"start":{"character":32,"line":703}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":37,"line":225}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":225}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":79},"start":{"character":22,"line":79}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"defaultSdkDirectory:"}],"paddingRight":true,"position":{"character":40,"line":226}},{"kind":1,"label":[{"location":{"range":{"end":{"character":20,"line":70},"start":{"character":6,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdkManager"}],"paddingRight":true,"position":{"character":8,"line":226}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":637},"start":{"character":35,"line":637}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"defaultSdkPath:"}],"paddingRight":true,"position":{"character":39,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":12},"start":{"character":15,"line":12}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/generated/sdk.dart"},"value":"DartSdk"}],"paddingRight":true,"position":{"character":8,"line":231}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":192},"start":{"character":5,"line":192}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/tools/pkgs/unified_analytics/lib/src/enums.dart"},"value":"DashTool"},{"value":"?"}],"paddingRight":true,"position":{"character":10,"line":238}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":610},"start":{"character":12,"line":610}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdk:"}],"paddingRight":true,"position":{"character":37,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":611},"start":{"character":11,"line":611}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkPath:"}],"paddingRight":true,"position":{"character":49,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":612},"start":{"character":13,"line":612}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"tool:"}],"paddingRight":true,"position":{"character":65,"line":245}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":103},"start":{"character":24,"line":103}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"analytics:"}],"paddingRight":true,"position":{"character":44,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"AnalyticsManager"}],"paddingRight":true,"position":{"character":8,"line":250}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":266}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":73},"start":{"character":11,"line":73}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"crashProductId:"}],"paddingRight":true,"position":{"character":6,"line":268}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":74},"start":{"character":23,"line":74}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"shouldSend:"}],"paddingRight":true,"position":{"character":6,"line":269}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":40},"start":{"character":6,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/telemetry/lib/crash_reporting.dart"},"value":"CrashReportSender"}],"paddingRight":true,"position":{"character":8,"line":267}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":274}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":273}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":39,"line":276}},{"kind":1,"label":[{"location":{"range":{"end":{"character":16,"line":15},"start":{"character":12,"line":15}},"uri":"file://{{dartSdkRoot}}lib/core/bool.dart"},"value":"bool"}],"paddingRight":true,"position":{"character":10,"line":276}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":285}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":18,"line":286}},{"kind":2,"label":[{"location":{"range":{"end":{"character":59,"line":656},"start":{"character":52,"line":656}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":43,"line":293}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":301}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":302}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":300}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":37,"line":9},"start":{"character":15,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"InstrumentationService"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":303}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":987},"start":{"character":35,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":20,"line":305}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":987},"start":{"character":45,"line":987}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"numOld:"}],"paddingRight":true,"position":{"character":33,"line":305}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":8,"line":307}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":39},"start":{"character":9,"line":39}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/log_adapter.dart"},"value":"_instrumentationLogger:"}],"paddingRight":true,"position":{"character":10,"line":308}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":14},"start":{"character":33,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/file_instrumentation.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":36,"line":308}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":36,"line":309}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":6,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/error_notifier.dart"},"value":"ErrorNotifier"}],"paddingRight":true,"position":{"character":8,"line":314}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":35,"line":315}},{"kind":2,"label":[{"value":"value:"}],"paddingRight":true,"position":{"character":6,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":14},"start":{"character":37,"line":14}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/crash_reporting.dart"},"value":"serverReporter:"}],"paddingRight":true,"position":{"character":36,"line":317}},{"kind":2,"label":[{"location":{"range":{"end":{"character":48,"line":11},"start":{"character":39,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/multicast_service.dart"},"value":"_services:"}],"paddingRight":true,"position":{"character":6,"line":320}},{"kind":2,"label":[{"location":{"range":{"end":{"character":15,"line":82},"start":{"character":11,"line":82}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"uuid:"}],"paddingRight":true,"position":{"character":6,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":83},"start":{"character":11,"line":83}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientId:"}],"paddingRight":true,"position":{"character":6,"line":327}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":84},"start":{"character":11,"line":84}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"clientVersion:"}],"paddingRight":true,"position":{"character":6,"line":328}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":85},"start":{"character":11,"line":85}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"serverVersion:"}],"paddingRight":true,"position":{"character":6,"line":329}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":86},"start":{"character":11,"line":86}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"sdkVersion:"}],"paddingRight":true,"position":{"character":6,"line":330}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":324}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":730},"start":{"character":42,"line":730}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"service:"}],"paddingRight":true,"position":{"character":22,"line":326}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":44,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":335}},{"kind":1,"label":[{"location":{"range":{"end":{"character":31,"line":35},"start":{"character":6,"line":35}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"SessionLoggerInMemorySink"}],"paddingRight":true,"position":{"character":8,"line":337}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":31,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/session_logger/session_logger_sink.dart"},"value":"filePath:"}],"paddingRight":true,"position":{"character":54,"line":340}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":346}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":23,"line":347}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":345}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":420},"start":{"character":35,"line":420}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"source:"}],"paddingRight":true,"position":{"character":41,"line":350}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":352}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":353}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":722},"start":{"character":29,"line":722}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":20,"line":354}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":366}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":526},"start":{"character":15,"line":526}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"args:"}],"paddingRight":true,"position":{"character":8,"line":370}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":527},"start":{"character":26,"line":527}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":371}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":528},"start":{"character":19,"line":528}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":372}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":529},"start":{"character":21,"line":529}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":373}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":530},"start":{"character":27,"line":530}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":374}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":531},"start":{"character":18,"line":531}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":375}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":532},"start":{"character":9,"line":532}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":376}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":533},"start":{"character":18,"line":533}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":377}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":403},"start":{"character":15,"line":403}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"results:"}],"paddingRight":true,"position":{"character":8,"line":381}},{"kind":2,"label":[{"location":{"range":{"end":{"character":47,"line":404},"start":{"character":26,"line":404}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":8,"line":382}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":405},"start":{"character":14,"line":405}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"parser:"}],"paddingRight":true,"position":{"character":8,"line":383}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":406},"start":{"character":19,"line":406}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"dartSdkManager:"}],"paddingRight":true,"position":{"character":8,"line":384}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":407},"start":{"character":21,"line":407}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":8,"line":385}},{"kind":2,"label":[{"location":{"range":{"end":{"character":69,"line":408},"start":{"character":37,"line":408}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":8,"line":386}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":409},"start":{"character":27,"line":409}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":8,"line":387}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":410},"start":{"character":18,"line":410}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":8,"line":388}},{"kind":2,"label":[{"location":{"range":{"end":{"character":45,"line":411},"start":{"character":28,"line":411}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":8,"line":389}},{"kind":2,"label":[{"location":{"range":{"end":{"character":29,"line":412},"start":{"character":9,"line":412}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"diagnosticServerPort:"}],"paddingRight":true,"position":{"character":8,"line":390}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":413},"start":{"character":18,"line":413}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"errorNotifier:"}],"paddingRight":true,"position":{"character":8,"line":391}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":414},"start":{"character":14,"line":414}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"sendPort:"}],"paddingRight":true,"position":{"character":8,"line":392}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":8},"start":{"character":15,"line":8}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"arguments:"}],"paddingRight":true,"position":{"character":6,"line":397}},{"kind":2,"label":[{"location":{"range":{"end":{"character":24,"line":9},"start":{"character":16,"line":9}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/utilities/usage_tracking/usage_tracking.dart"},"value":"callback:"}],"paddingRight":true,"position":{"character":6,"line":398}},{"kind":1,"label":[{"location":{"range":{"end":{"character":22,"line":25},"start":{"character":6,"line":25}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/leak_tracker/pkgs/memory_usage/lib/src/model.dart"},"value":"MemoryUsageEvent"}],"paddingRight":true,"position":{"character":7,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":53,"line":268},"start":{"character":48,"line":268}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/analytics/analytics_manager.dart"},"value":"event:"}],"paddingRight":true,"position":{"character":61,"line":398}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":31,"line":416}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":417}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":416}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":96},"start":{"character":24,"line":96}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":40,"line":419}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":419}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":772},"start":{"character":37,"line":772}},"uri":"file://{{dartSdkRoot}}lib/io/file_system_entity.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":44,"line":421}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":422}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":431}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":63},"start":{"character":9,"line":63}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":437}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":64},"start":{"character":9,"line":64}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":438}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":65},"start":{"character":9,"line":65}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"crashReportingAttachmentsBuilder:"}],"paddingRight":true,"position":{"character":6,"line":439}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":66},"start":{"character":9,"line":66}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":440}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":67},"start":{"character":9,"line":67}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":441}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":68},"start":{"character":9,"line":68}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"requestStatistics:"}],"paddingRight":true,"position":{"character":6,"line":442}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":69},"start":{"character":9,"line":69}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":443}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":70},"start":{"character":9,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":444}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":71},"start":{"character":9,"line":71}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":445}},{"kind":1,"label":[{"location":{"range":{"end":{"character":18,"line":31},"start":{"character":6,"line":31}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/socket_server.dart"},"value":"SocketServer"}],"paddingRight":true,"position":{"character":8,"line":436}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":448}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":450}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":596},"start":{"character":27,"line":596}},"uri":"file://{{dartSdkRoot}}lib/core/errors.dart"},"value":"message:"}],"paddingRight":true,"position":{"character":10,"line":456}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":239},"start":{"character":36,"line":239}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"prefix:"}],"paddingRight":true,"position":{"character":8,"line":460}},{"kind":1,"label":[{"location":{"range":{"end":{"character":34,"line":99},"start":{"character":25,"line":99}},"uri":"file://{{dartSdkRoot}}lib/io/directory.dart"},"value":"Directory"}],"paddingRight":true,"position":{"character":10,"line":459}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":464}},{"kind":2,"label":[{"location":{"range":{"end":{"character":37,"line":29},"start":{"character":25,"line":29}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":40,"line":467}},{"kind":1,"label":[{"location":{"range":{"end":{"character":23,"line":15},"start":{"character":6,"line":15}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"DevAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":467}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":472}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":58,"line":473}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":58,"line":473}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":12,"line":473}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":474}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":476}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":14,"line":479}},{"kind":2,"label":[{"location":{"range":{"end":{"character":57,"line":40},"start":{"character":46,"line":40}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/dev_server.dart"},"value":"directories:"}],"paddingRight":true,"position":{"character":54,"line":480}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":54,"line":480}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":32,"line":481}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":18,"line":485}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":13,"line":493}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":8,"line":497}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":8,"line":498}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":17},"start":{"character":27,"line":17}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":50,"line":501}},{"kind":1,"label":[{"location":{"range":{"end":{"character":25,"line":11},"start":{"character":6,"line":11}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/stdio_server.dart"},"value":"StdioAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":501}},{"kind":2,"label":[{"location":{"range":{"end":{"character":41,"line":19},"start":{"character":29,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":62,"line":504}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"IsolateAnalysisServer"}],"paddingRight":true,"position":{"character":16,"line":504}},{"kind":2,"label":[{"location":{"range":{"end":{"character":51,"line":23},"start":{"character":37,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/isolate_analysis_server.dart"},"value":"clientSendPort:"}],"paddingRight":true,"position":{"character":61,"line":505}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":27,"line":508}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":27,"line":511}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":28,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":22,"line":514}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":39,"line":515}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":26,"line":511}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":518}},{"kind":2,"label":[{"location":{"range":{"end":{"character":23,"line":82},"start":{"character":19,"line":82}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":28,"line":535}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":11,"line":536}},{"kind":1,"label":[{"value":"void Function(InstrumentationService, void Function(), {void Function(String)? print})"}],"paddingRight":true,"position":{"character":8,"line":535}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"_DiagnosticServerImpl"}],"paddingRight":true,"position":{"character":8,"line":543}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":51},"start":{"character":9,"line":51}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analysisServerOptions:"}],"paddingRight":true,"position":{"character":6,"line":546}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":52},"start":{"character":9,"line":52}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"diagnosticServer:"}],"paddingRight":true,"position":{"character":6,"line":547}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":53},"start":{"character":9,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"analyticsManager:"}],"paddingRight":true,"position":{"character":6,"line":548}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":54},"start":{"character":9,"line":54}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sdkManager:"}],"paddingRight":true,"position":{"character":6,"line":549}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":55},"start":{"character":9,"line":55}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"instrumentationService:"}],"paddingRight":true,"position":{"character":6,"line":550}},{"kind":2,"label":[{"location":{"range":{"end":{"character":22,"line":56},"start":{"character":9,"line":56}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"sessionLogger:"}],"paddingRight":true,"position":{"character":6,"line":551}},{"kind":2,"label":[{"location":{"range":{"end":{"character":36,"line":57},"start":{"character":9,"line":57}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"detachableFileSystemManager:"}],"paddingRight":true,"position":{"character":6,"line":552}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":23},"start":{"character":6,"line":23}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/lsp/lsp_socket_server.dart"},"value":"LspSocketServer"}],"paddingRight":true,"position":{"character":8,"line":545}},{"kind":2,"label":[{"location":{"range":{"end":{"character":39,"line":48},"start":{"character":26,"line":48}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"_socketServer:"}],"paddingRight":true,"position":{"character":53,"line":555}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1007},"start":{"character":31,"line":1007}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"port:"}],"paddingRight":true,"position":{"character":35,"line":558}},{"kind":2,"label":[{"value":"_:"}],"paddingRight":true,"position":{"character":12,"line":561}},{"kind":2,"label":[{"value":"f:"}],"paddingRight":true,"position":{"character":36,"line":561}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":19},"start":{"character":30,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"socketServer:"}],"paddingRight":true,"position":{"character":47,"line":562}},{"kind":1,"label":[{"location":{"range":{"end":{"character":28,"line":13},"start":{"character":6,"line":13}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/lsp_stdio_server.dart"},"value":"LspStdioAnalysisServer"}],"paddingRight":true,"position":{"character":10,"line":562}},{"kind":2,"label":[{"value":"onValue:"}],"paddingRight":true,"position":{"character":36,"line":563}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":37,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":35,"line":1023},"start":{"character":29,"line":1023}},"uri":"file://{{dartSdkRoot}}lib/async/future.dart"},"value":"future:"}],"paddingRight":true,"position":{"character":20,"line":567}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":52},"start":{"character":15,"line":52}},"uri":"file://{{dartSdkRoot}}lib/io/process.dart"},"value":"code:"}],"paddingRight":true,"position":{"character":15,"line":568}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":16,"line":23},"start":{"character":12,"line":23}},"uri":"file://{{dartSdkRoot}}lib/core/null.dart"},"value":"Null"},{"value":">"}],"position":{"character":35,"line":563}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":590}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":590}},{"kind":2,"label":[{"value":"line:"}],"paddingRight":true,"position":{"character":18,"line":599}},{"kind":1,"label":[{"value":"Null Function(Zone, ZoneDelegate, Zone, String)?"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":594}},{"kind":1,"label":[{"location":{"range":{"end":{"character":38,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/async/zone_specification.dart"},"value":"ZoneSpecification"}],"paddingRight":true,"position":{"character":8,"line":601}},{"kind":2,"label":[{"location":{"range":{"end":{"character":8,"line":64},"start":{"character":4,"line":64}},"uri":"file://{{dartSdkRoot}}lib/async/zone_api.dart"},"value":"body:"}],"paddingRight":true,"position":{"character":20,"line":605}},{"kind":1,"label":[{"value":"<"},{"value":"void"},{"value":">"}],"position":{"character":19,"line":605}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":616}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":26,"line":618}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":169},"start":{"character":24,"line":169}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":46,"line":618}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":617}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":47},"start":{"character":22,"line":47}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":6,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":268},"start":{"character":11,"line":268}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":23,"line":621}},{"kind":2,"label":[{"location":{"range":{"end":{"character":17,"line":269},"start":{"character":12,"line":269}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part2:"}],"paddingRight":true,"position":{"character":39,"line":621}},{"kind":1,"label":[{"location":{"range":{"end":{"character":19,"line":10},"start":{"character":15,"line":10}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":620}},{"kind":1,"label":[{"location":{"range":{"end":{"character":30,"line":34},"start":{"character":6,"line":34}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"PhysicalResourceProvider"}],"paddingRight":true,"position":{"character":8,"line":638}},{"kind":2,"label":[{"location":{"range":{"end":{"character":54,"line":389},"start":{"character":38,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"resourceProvider:"}],"paddingRight":true,"position":{"character":6,"line":640}},{"kind":2,"label":[{"location":{"range":{"end":{"character":75,"line":389},"start":{"character":63,"line":389}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/src/dart/sdk/sdk.dart"},"value":"sdkDirectory:"}],"paddingRight":true,"position":{"character":6,"line":641}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":53},"start":{"character":26,"line":53}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":641}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":647}},{"kind":2,"label":[{"location":{"range":{"end":{"character":21,"line":55},"start":{"character":18,"line":55}},"uri":"file://{{dartSdkRoot}}lib/math/random.dart"},"value":"max:"}],"paddingRight":true,"position":{"character":34,"line":648}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":8,"line":648}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":25,"line":659}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":119},"start":{"character":25,"line":119}},"uri":"file://{{dartSdkRoot}}lib/core/list.dart"},"value":"List"},{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"paddingRight":true,"position":{"character":8,"line":659}},{"kind":2,"label":[{"value":"test:"}],"paddingRight":true,"position":{"character":15,"line":699}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":16,"line":699}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":146},"start":{"character":24,"line":146}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_results.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":47,"line":699}},{"kind":1,"label":[{"value":"dynamic"}],"paddingRight":true,"position":{"character":10,"line":707}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":713}},{"kind":2,"label":[{"location":{"range":{"end":{"character":49,"line":706},"start":{"character":37,"line":706}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"value":"argumentName:"}],"paddingRight":true,"position":{"character":25,"line":714}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":715}},{"kind":1,"label":[{"location":{"range":{"end":{"character":13,"line":17},"start":{"character":6,"line":17}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"Context"}],"paddingRight":true,"position":{"character":8,"line":717}},{"kind":2,"label":[{"location":{"range":{"end":{"character":30,"line":428},"start":{"character":26,"line":428}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":33,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":16,"line":79},"start":{"character":11,"line":79}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/path/lib/src/context.dart"},"value":"part1:"}],"paddingRight":true,"position":{"character":54,"line":718}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":723}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":724}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":725}},{"kind":2,"label":[{"location":{"range":{"end":{"character":25,"line":18},"start":{"character":19,"line":18}},"uri":"file://{{dartSdkRoot}}lib/core/print.dart"},"value":"object:"}],"paddingRight":true,"position":{"character":10,"line":726}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":75},"start":{"character":34,"line":75}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/physical_file_system.dart"},"value":"pluginId:"}],"paddingRight":true,"position":{"character":26,"line":732}},{"kind":1,"label":[{"location":{"range":{"end":{"character":21,"line":72},"start":{"character":15,"line":72}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"Folder"},{"value":"?"}],"paddingRight":true,"position":{"character":8,"line":731}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":24,"line":736}},{"kind":2,"label":[{"location":{"range":{"end":{"character":34,"line":97},"start":{"character":27,"line":97}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/file_system/file_system.dart"},"value":"relPath:"}],"paddingRight":true,"position":{"character":57,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":29,"line":191},"start":{"character":25,"line":191}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"File"}],"paddingRight":true,"position":{"character":8,"line":736}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":739}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":745}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":745}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":8,"line":747}},{"kind":2,"label":[{"location":{"range":{"end":{"character":19,"line":704},"start":{"character":11,"line":704}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"contents:"}],"paddingRight":true,"position":{"character":33,"line":750}},{"kind":2,"label":[{"location":{"range":{"end":{"character":20,"line":19},"start":{"character":11,"line":19}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"exception:"}],"paddingRight":true,"position":{"character":27,"line":752}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":20},"start":{"character":16,"line":20}},"uri":"file://{{workspaceFolder-0}}pkg/analyzer/lib/instrumentation/service.dart"},"value":"stackTrace:"}],"paddingRight":true,"position":{"character":38,"line":752}},{"kind":1,"label":[{"location":{"range":{"end":{"character":15,"line":14},"start":{"character":6,"line":14}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"ArgParser"}],"paddingRight":true,"position":{"character":8,"line":765}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":8,"line":768}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":775}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":780}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":785}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":789}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":791}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":796}},{"kind":2,"label":[{"location":{"range":{"end":{"character":33,"line":266},"start":{"character":29,"line":266}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":803}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":812}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":15,"line":815}},{"kind":1,"label":[{"value":"<"},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":", "},{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"},{"value":">"}],"position":{"character":19,"line":816}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":830}},{"kind":2,"label":[{"location":{"range":{"end":{"character":31,"line":354},"start":{"character":27,"line":354}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"text:"}],"paddingRight":true,"position":{"character":24,"line":836}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":839}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":843}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":846}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":852}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":856}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":859}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":865}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":871}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":878}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":888}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":896}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":902}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":908}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":917}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":922}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":927}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":933}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":939}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":6,"line":945}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":959}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":961}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":963}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":965}},{"kind":2,"label":[{"location":{"range":{"end":{"character":28,"line":204},"start":{"character":24,"line":204}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":21,"line":967}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":969}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":971}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":973}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":975}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":133},"start":{"character":22,"line":133}},"uri":"file://{{workspaceFolder-0}}third_party/pkg/core/pkgs/args/lib/src/arg_parser.dart"},"value":"name:"}],"paddingRight":true,"position":{"character":19,"line":977}},{"kind":1,"label":[{"location":{"range":{"end":{"character":24,"line":27},"start":{"character":21,"line":27}},"uri":"file://{{dartSdkRoot}}lib/core/int.dart"},"value":"int"}],"paddingRight":true,"position":{"character":13,"line":988}},{"kind":1,"label":[{"location":{"range":{"end":{"character":27,"line":107},"start":{"character":21,"line":107}},"uri":"file://{{dartSdkRoot}}lib/core/string.dart"},"value":"String"}],"paddingRight":true,"position":{"character":12,"line":990}},{"kind":2,"label":[{"location":{"range":{"end":{"character":26,"line":200},"start":{"character":22,"line":200}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"path:"}],"paddingRight":true,"position":{"character":13,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":32,"line":310},"start":{"character":25,"line":310}},"uri":"file://{{dartSdkRoot}}lib/io/file.dart"},"value":"newPath:"}],"paddingRight":true,"position":{"character":33,"line":991}},{"kind":2,"label":[{"location":{"range":{"end":{"character":42,"line":70},"start":{"character":31,"line":70}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/http_server.dart"},"value":"initialPort:"}],"paddingRight":true,"position":{"character":32,"line":1008}}]}},
+{"time":1763411736062,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5816,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}},"clientRequestTime":1763411736062}},
+{"time":1763411736063,"kind":"message","sender":"server","receiver":"ide","message":{"id":5816,"jsonrpc":"2.0","result":[]}},
+{"time":1763411736125,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5817,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"range":{"start":{"line":50,"character":24},"end":{"line":50,"character":24}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411736124}},
+{"time":1763411736125,"kind":"message","sender":"server","receiver":"ide","message":{"id":2062,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411736126,"kind":"message","sender":"server","receiver":"ide","message":{"id":5817,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"}]}},
+{"time":1763411736127,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2062,"result":null,"clientRequestTime":1763411736127}},
+{"time":1763411736127,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411736127,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411736861,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5818,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":51,"character":29}},"clientRequestTime":1763411736860}},
+{"time":1763411736861,"kind":"message","sender":"server","receiver":"ide","message":{"id":5818,"jsonrpc":"2.0","result":null}},
+{"time":1763411737245,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5819,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":50,"character":24}},"clientRequestTime":1763411737245}},
+{"time":1763411737246,"kind":"message","sender":"server","receiver":"ide","message":{"id":5819,"jsonrpc":"2.0","result":{"contents":{"kind":"markdown","value":"```dart\nabstract class ServerStarter\n```\nDeclared in _package:analysis_server/starter.dart_.\n\n---\nAn object that can be used to start an analysis server. This class exists so\nthat clients can configure an analysis server before starting it.\n\nClients may not extend, implement or mix-in this class."},"range":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}}}}},
+{"time":1763411737495,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5820,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":50,"character":29}},"clientRequestTime":1763411737494}},
+{"time":1763411737495,"kind":"message","sender":"server","receiver":"ide","message":{"id":5820,"jsonrpc":"2.0","result":{"contents":{"kind":"markdown","value":"```dart\nabstract class ServerStarter\n```\nDeclared in _package:analysis_server/starter.dart_.\n\n---\nAn object that can be used to start an analysis server. This class exists so\nthat clients can configure an analysis server before starting it.\n\nClients may not extend, implement or mix-in this class."},"range":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}}}}},
+{"time":1763411738097,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5821,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":50,"character":36}},"clientRequestTime":1763411738097}},
+{"time":1763411738098,"kind":"message","sender":"server","receiver":"ide","message":{"id":5821,"jsonrpc":"2.0","result":[{"originSelectionRange":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}},"targetRange":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"targetSelectionRange":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}},"targetUri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}]}},
+{"time":1763411738428,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5822,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":50,"character":32}},"clientRequestTime":1763411738427}},
+{"time":1763411738428,"kind":"message","sender":"server","receiver":"ide","message":{"id":5822,"jsonrpc":"2.0","result":{"contents":{"kind":"markdown","value":"```dart\nabstract class ServerStarter\n```\nDeclared in _package:analysis_server/starter.dart_.\n\n---\nAn object that can be used to start an analysis server. This class exists so\nthat clients can configure an analysis server before starting it.\n\nClients may not extend, implement or mix-in this class."},"range":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}}}}},
+{"time":1763411739018,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5823,"method":"textDocument/definition","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"position":{"line":50,"character":32}},"clientRequestTime":1763411739018}},
+{"time":1763411739019,"kind":"message","sender":"server","receiver":"ide","message":{"id":5823,"jsonrpc":"2.0","result":[{"originSelectionRange":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}},"targetRange":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"targetSelectionRange":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}},"targetUri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}]}},
+{"time":1763411739216,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5824,"method":"textDocument/documentColor","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411739216}},
+{"time":1763411739217,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5825,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411739216}},
+{"time":1763411739221,"kind":"message","sender":"server","receiver":"ide","message":{"id":2063,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411739225,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}}},
+{"time":1763411739226,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":35,"line":16},"start":{"character":2,"line":16}},"element":{"kind":"CONSTRUCTOR","name":"ServerStarter","parameters":"()","range":{"end":{"character":23,"line":16},"start":{"character":10,"line":16}}},"range":{"end":{"character":35,"line":16},"start":{"character":2,"line":15}}},{"codeRange":{"end":{"character":4,"line":22},"start":{"character":2,"line":20}},"element":{"kind":"SETTER","name":"crashReportingAttachmentsBuilder","parameters":"(CrashReportingAttachmentsBuilder builder)","range":{"end":{"character":38,"line":20},"start":{"character":6,"line":20}},"returnType":""},"range":{"end":{"character":4,"line":22},"start":{"character":2,"line":18}}},{"codeRange":{"end":{"character":71,"line":26},"start":{"character":2,"line":26}},"element":{"kind":"SETTER","name":"detachableFileSystemManager","parameters":"(DetachableFileSystemManager manager)","range":{"end":{"character":33,"line":26},"start":{"character":6,"line":26}},"returnType":""},"range":{"end":{"character":71,"line":26},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":5,"line":33},"start":{"character":2,"line":29}},"element":{"kind":"METHOD","name":"start","parameters":"(List<String> arguments, {SendPort sendPort, bool defaultToLsp = false})","range":{"end":{"character":12,"line":29},"start":{"character":7,"line":29}},"returnType":"void"},"range":{"end":{"character":5,"line":33},"start":{"character":2,"line":28}}}],"codeRange":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"element":{"kind":"CLASS","name":"ServerStarter","range":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}}},"range":{"end":{"character":1,"line":34},"start":{"character":0,"line":10}}}],"codeRange":{"end":{"character":0,"line":35},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":35},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":35},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}}},
+{"time":1763411739226,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5826,"method":"textDocument/documentLink","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411739219}},
+{"time":1763411739226,"kind":"message","sender":"server","receiver":"ide","message":{"id":5824,"jsonrpc":"2.0","result":[]}},
+{"time":1763411739226,"kind":"message","sender":"server","receiver":"ide","message":{"id":5826,"jsonrpc":"2.0","result":[]}},
+{"time":1763411739226,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2063,"result":null,"clientRequestTime":1763411739226}},
+{"time":1763411739227,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411739228,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411739228,"kind":"message","sender":"server","receiver":"ide","message":{"id":5825,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"}]}},
+{"time":1763411739297,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5827,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":35,"character":0}}},"clientRequestTime":1763411739297}},
+{"time":1763411739297,"kind":"message","sender":"server","receiver":"ide","message":{"id":5827,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":6,"line":20}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":6,"line":26}}]}},
+{"time":1763411739352,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5828,"method":"textDocument/foldingRange","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411739352}},
+{"time":1763411739353,"kind":"message","sender":"server","receiver":"ide","message":{"id":5828,"jsonrpc":"2.0","result":[{"endLine":2,"kind":"comment","startLine":0},{"endLine":8,"kind":"imports","startLine":4},{"endLine":13,"kind":"comment","startLine":10},{"endLine":34,"startLine":14},{"endLine":19,"kind":"comment","startLine":18},{"endLine":22,"startLine":20},{"endLine":22,"startLine":21},{"endLine":25,"kind":"comment","startLine":24},{"endLine":33,"startLine":29},{"endLine":33,"startLine":30}]}},
+{"time":1763411739419,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5829,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":14,"character":15},"end":{"line":14,"character":15}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411739418}},
+{"time":1763411739419,"kind":"message","sender":"server","receiver":"ide","message":{"id":2064,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411739420,"kind":"message","sender":"server","receiver":"ide","message":{"id":5829,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"},{"command":{"arguments":[{"filePath":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","selectionOffset":686,"selectionLength":0,"arguments":["file://{{workspaceFolder-0}}pkg/analysis_server/lib/server_starter.dart"]}],"command":"dart.refactor.move_top_level_to_file","title":"Move 'ServerStarter' to file"},"data":{"parameters":[{"actionLabel":"Move","defaultValue":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/server_starter.dart","filters":{"Dart":["dart"]},"kind":"saveUri","parameterLabel":"Move to:","parameterTitle":"Select a file to move to"}]},"kind":"refactor.move","title":"Move 'ServerStarter' to file"}]}},
+{"time":1763411739421,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2064,"result":null,"clientRequestTime":1763411739421}},
+{"time":1763411739421,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411739421,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411739465,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5830,"method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411739465}},
+{"time":1763411739466,"kind":"message","sender":"server","receiver":"ide","message":{"id":5830,"jsonrpc":"2.0","result":{"data":[0,0,76,3,0,1,0,77,3,0,1,0,59,3,0,2,0,6,1,0,0,7,14,16,0,2,0,6,1,0,0,7,69,16,0,1,0,6,1,0,0,7,71,16,0,1,0,6,1,0,0,7,48,16,0,2,0,80,3,1,1,0,69,3,1,1,0,3,3,1,1,0,59,3,1,1,0,8,1,0,0,9,5,1,0,0,6,13,2,4,1,2,70,3,1,1,2,7,1,0,0,8,13,2,6,0,18,6,2,0,2,2,74,3,1,1,2,12,3,1,1,2,3,1,0,0,4,32,11,20,1,4,32,2,0,0,33,7,6,4,3,2,70,3,1,1,2,14,3,1,1,2,3,1,0,0,4,27,11,20,0,28,27,2,0,0,28,7,6,4,2,2,32,3,1,0,32,9,6,0,0,9,23,3,1,1,2,4,1,2048,0,5,5,4,20,1,4,4,2,0,0,5,6,2,0,0,8,9,6,4,1,4,8,2,0,0,9,8,6,4,1,4,4,2,0,0,5,12,6,4,0,15,5,14,0]}}},
+{"time":1763411739466,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5831,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411739466}},
+{"time":1763411739466,"kind":"message","sender":"server","receiver":"ide","message":{"id":5831,"jsonrpc":"2.0","result":[{"children":[{"deprecated":false,"detail":"()","kind":9,"name":"ServerStarter","range":{"end":{"character":35,"line":16},"start":{"character":2,"line":16}},"selectionRange":{"end":{"character":23,"line":16},"start":{"character":10,"line":16}}},{"deprecated":false,"detail":"(CrashReportingAttachmentsBuilder builder)","kind":7,"name":"crashReportingAttachmentsBuilder","range":{"end":{"character":4,"line":22},"start":{"character":2,"line":20}},"selectionRange":{"end":{"character":38,"line":20},"start":{"character":6,"line":20}}},{"deprecated":false,"detail":"(DetachableFileSystemManager manager)","kind":7,"name":"detachableFileSystemManager","range":{"end":{"character":71,"line":26},"start":{"character":2,"line":26}},"selectionRange":{"end":{"character":33,"line":26},"start":{"character":6,"line":26}}},{"deprecated":false,"detail":"(List<String> arguments, {SendPort sendPort, bool defaultToLsp = false})","kind":6,"name":"start","range":{"end":{"character":5,"line":33},"start":{"character":2,"line":29}},"selectionRange":{"end":{"character":12,"line":29},"start":{"character":7,"line":29}}}],"deprecated":false,"kind":5,"name":"ServerStarter","range":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"selectionRange":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}}}]}},
+{"time":1763411739597,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5832,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411739597}},
+{"time":1763411739597,"kind":"message","sender":"server","receiver":"ide","message":{"id":5832,"jsonrpc":"2.0","result":[]}},
+{"time":1763411740976,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5833,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"position":{"line":13,"character":23}},"clientRequestTime":1763411740976}},
+{"time":1763411740977,"kind":"message","sender":"server","receiver":"ide","message":{"id":5833,"jsonrpc":"2.0","result":null}},
+{"time":1763411741265,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5834,"method":"textDocument/hover","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"position":{"line":14,"character":23}},"clientRequestTime":1763411741264}},
+{"time":1763411741265,"kind":"message","sender":"server","receiver":"ide","message":{"id":5834,"jsonrpc":"2.0","result":{"contents":{"kind":"markdown","value":"```dart\nabstract class ServerStarter\n```\nDeclared in _package:analysis_server/starter.dart_.\n\n---\nAn object that can be used to start an analysis server. This class exists so\nthat clients can configure an analysis server before starting it.\n\nClients may not extend, implement or mix-in this class."},"range":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}}}}},
+{"time":1763411741658,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5835,"method":"textDocument/documentHighlight","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"position":{"line":14,"character":23}},"clientRequestTime":1763411741657}},
+{"time":1763411741658,"kind":"message","sender":"server","receiver":"ide","message":{"id":5835,"jsonrpc":"2.0","result":[{"range":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}}}]}},
+{"time":1763411742060,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5836,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":14,"character":15},"end":{"line":14,"character":28}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411742060}},
+{"time":1763411742061,"kind":"message","sender":"server","receiver":"ide","message":{"id":2065,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411742062,"kind":"message","sender":"server","receiver":"ide","message":{"id":5836,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"},{"command":{"arguments":[{"filePath":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","selectionOffset":686,"selectionLength":13,"arguments":["file://{{workspaceFolder-0}}pkg/analysis_server/lib/server_starter.dart"]}],"command":"dart.refactor.move_top_level_to_file","title":"Move 'ServerStarter' to file"},"data":{"parameters":[{"actionLabel":"Move","defaultValue":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/server_starter.dart","filters":{"Dart":["dart"]},"kind":"saveUri","parameterLabel":"Move to:","parameterTitle":"Select a file to move to"}]},"kind":"refactor.move","title":"Move 'ServerStarter' to file"}]}},
+{"time":1763411742063,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2065,"result":null,"clientRequestTime":1763411742062}},
+{"time":1763411742063,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411742063,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411743314,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5837,"method":"textDocument/prepareRename","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"position":{"line":14,"character":28}},"clientRequestTime":1763411743314}},
+{"time":1763411743315,"kind":"message","sender":"server","receiver":"ide","message":{"id":5837,"jsonrpc":"2.0","result":{"placeholder":"ServerStarter","range":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}}}}},
+{"time":1763411745407,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5838,"method":"textDocument/rename","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"position":{"line":14,"character":28},"newName":"ServerStarter2"},"clientRequestTime":1763411745406}},
+{"time":1763411745411,"kind":"message","sender":"server","receiver":"ide","message":{"id":2066,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411745424,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2066,"result":null,"clientRequestTime":1763411745415}},
+{"time":1763411745425,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411747238,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5839,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411745642}},
+{"time":1763411747239,"kind":"message","sender":"server","receiver":"ide","message":{"id":5839,"jsonrpc":"2.0","result":[]}},
+{"time":1763411775493,"kind":"message","sender":"server","receiver":"ide","message":{"id":5838,"jsonrpc":"2.0","result":{"documentChanges":[{"edits":[{"newText":"ServerStarter2","range":{"end":{"character":28,"line":14},"start":{"character":15,"line":14}}},{"newText":"ServerStarter2","range":{"end":{"character":23,"line":16},"start":{"character":10,"line":16}}}],"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","version":1}},{"edits":[{"newText":"ServerStarter2","range":{"end":{"character":37,"line":50},"start":{"character":24,"line":50}}}],"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","version":1}},{"edits":[{"newText":"ServerStarter2","range":{"end":{"character":29,"line":8},"start":{"character":16,"line":8}}}],"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart","version":1}}]}}},
+{"time":1763411775493,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
+{"time":1763411775626,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","version":2},"contentChanges":[{"range":{"start":{"line":16,"character":23},"end":{"line":16,"character":23}},"rangeLength":0,"text":"2"},{"range":{"start":{"line":14,"character":28},"end":{"line":14,"character":28}},"rangeLength":0,"text":"2"}]},"clientRequestTime":1763411775625}},
+{"time":1763411775626,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","version":2},"contentChanges":[{"range":{"start":{"line":50,"character":24},"end":{"line":50,"character":37}},"rangeLength":13,"text":"ServerStarter2"}]},"clientRequestTime":1763411775626}},
+{"time":1763411775626,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart","version":2},"contentChanges":[{"range":{"start":{"line":8,"character":16},"end":{"line":8,"character":29}},"rangeLength":13,"text":"ServerStarter2"}]},"clientRequestTime":1763411775626}},
+{"time":1763411775632,"kind":"message","sender":"server","receiver":"ide","message":{"id":2067,"jsonrpc":"2.0","method":"window/workDoneProgress/create","params":{"token":"ANALYZING"}}},
+{"time":1763411775708,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/status/pages.dart"}}},
+{"time":1763411775708,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"codeRange":{"end":{"character":76,"line":11},"start":{"character":0,"line":11}},"element":{"kind":"FUNCTION","name":"escape","parameters":"(String? text)","range":{"end":{"character":13,"line":11},"start":{"character":7,"line":11}},"returnType":"String"},"range":{"end":{"character":76,"line":11},"start":{"character":0,"line":11}}},{"codeRange":{"end":{"character":51,"line":13},"start":{"character":0,"line":13}},"element":{"kind":"FUNCTION","name":"printMilliseconds","parameters":"(int value)","range":{"end":{"character":24,"line":13},"start":{"character":7,"line":13}},"returnType":"String"},"range":{"end":{"character":51,"line":13},"start":{"character":0,"line":13}}},{"codeRange":{"end":{"character":56,"line":16},"start":{"character":0,"line":15}},"element":{"kind":"FUNCTION","name":"printPercentage","parameters":"(num value, [int fractionDigits = 1])","range":{"end":{"character":22,"line":15},"start":{"character":7,"line":15}},"returnType":"String"},"range":{"end":{"character":56,"line":16},"start":{"character":0,"line":15}}},{"children":[{"codeRange":{"end":{"character":41,"line":20},"start":{"character":21,"line":20}},"element":{"kind":"FIELD","name":"buf","range":{"end":{"character":24,"line":20},"start":{"character":21,"line":20}},"returnType":"StringBuffer"},"range":{"end":{"character":42,"line":20},"start":{"character":2,"line":20}}},{"codeRange":{"end":{"character":17,"line":22},"start":{"character":15,"line":22}},"element":{"kind":"FIELD","name":"id","range":{"end":{"character":17,"line":22},"start":{"character":15,"line":22}},"returnType":"String"},"range":{"end":{"character":18,"line":22},"start":{"character":2,"line":22}}},{"codeRange":{"end":{"character":20,"line":23},"start":{"character":15,"line":23}},"element":{"kind":"FIELD","name":"title","range":{"end":{"character":20,"line":23},"start":{"character":15,"line":23}},"returnType":"String"},"range":{"end":{"character":21,"line":23},"start":{"character":2,"line":23}}},{"codeRange":{"end":{"character":27,"line":24},"start":{"character":16,"line":24}},"element":{"kind":"FIELD","name":"description","range":{"end":{"character":27,"line":24},"start":{"character":16,"line":24}},"returnType":"String?"},"range":{"end":{"character":28,"line":24},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":48,"line":26},"start":{"character":2,"line":26}},"element":{"kind":"CONSTRUCTOR","name":"Page","parameters":"(this.id, this.title, {this.description})","range":{"end":{"character":6,"line":26},"start":{"character":2,"line":26}}},"range":{"end":{"character":48,"line":26},"start":{"character":2,"line":26}}},{"codeRange":{"end":{"character":28,"line":28},"start":{"character":2,"line":28}},"element":{"kind":"GETTER","name":"path","range":{"end":{"character":17,"line":28},"start":{"character":13,"line":28}},"returnType":"String"},"range":{"end":{"character":28,"line":28},"start":{"character":2,"line":28}}},{"codeRange":{"end":{"character":3,"line":40},"start":{"character":2,"line":30}},"element":{"kind":"METHOD","name":"asyncDiv","parameters":"(void Function() gen, {String? classes})","range":{"end":{"character":23,"line":30},"start":{"character":15,"line":30}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":40},"start":{"character":2,"line":30}}},{"codeRange":{"end":{"character":3,"line":44},"start":{"character":2,"line":42}},"element":{"kind":"METHOD","name":"blankslate","parameters":"(String str)","range":{"end":{"character":17,"line":42},"start":{"character":7,"line":42}},"returnType":"void"},"range":{"end":{"character":3,"line":44},"start":{"character":2,"line":42}}},{"codeRange":{"end":{"character":71,"line":46},"start":{"character":2,"line":46}},"element":{"kind":"METHOD","name":"contentDispositionString","parameters":"(Map<String, String> params)","range":{"end":{"character":34,"line":46},"start":{"character":10,"line":46}},"returnType":"String?"},"range":{"end":{"character":71,"line":46},"start":{"character":2,"line":46}}},{"codeRange":{"end":{"character":74,"line":48},"start":{"character":2,"line":48}},"element":{"kind":"METHOD","name":"contentType","parameters":"(Map<String, String> params)","range":{"end":{"character":25,"line":48},"start":{"character":14,"line":48}},"returnType":"ContentType"},"range":{"end":{"character":74,"line":48},"start":{"character":2,"line":48}}},{"codeRange":{"end":{"character":3,"line":58},"start":{"character":2,"line":50}},"element":{"kind":"METHOD","name":"div","parameters":"(void Function() gen, {String? classes})","range":{"end":{"character":10,"line":50},"start":{"character":7,"line":50}},"returnType":"void"},"range":{"end":{"character":3,"line":58},"start":{"character":2,"line":50}}},{"codeRange":{"end":{"character":3,"line":64},"start":{"character":2,"line":60}},"element":{"kind":"METHOD","name":"generate","parameters":"(Map<String, String> params)","range":{"end":{"character":25,"line":60},"start":{"character":17,"line":60}},"returnType":"Future<String>"},"range":{"end":{"character":3,"line":64},"start":{"character":2,"line":60}}},{"codeRange":{"end":{"character":56,"line":66},"start":{"character":2,"line":66}},"element":{"kind":"METHOD","name":"generatePage","parameters":"(Map<String, String> params)","range":{"end":{"character":27,"line":66},"start":{"character":15,"line":66}},"returnType":"Future<void>"},"range":{"end":{"character":56,"line":66},"start":{"character":2,"line":66}}},{"codeRange":{"end":{"character":3,"line":74},"start":{"character":2,"line":68}},"element":{"kind":"METHOD","name":"h1","parameters":"(String text, {String? classes})","range":{"end":{"character":9,"line":68},"start":{"character":7,"line":68}},"returnType":"void"},"range":{"end":{"character":3,"line":74},"start":{"character":2,"line":68}}},{"codeRange":{"end":{"character":3,"line":78},"start":{"character":2,"line":76}},"element":{"kind":"METHOD","name":"h2","parameters":"(String text)","range":{"end":{"character":9,"line":76},"start":{"character":7,"line":76}},"returnType":"void"},"range":{"end":{"character":3,"line":78},"start":{"character":2,"line":76}}},{"codeRange":{"end":{"character":3,"line":82},"start":{"character":2,"line":80}},"element":{"kind":"METHOD","name":"h3","parameters":"(String text, {bool raw = false})","range":{"end":{"character":9,"line":80},"start":{"character":7,"line":80}},"returnType":"void"},"range":{"end":{"character":3,"line":82},"start":{"character":2,"line":80}}},{"codeRange":{"end":{"character":3,"line":86},"start":{"character":2,"line":84}},"element":{"kind":"METHOD","name":"h4","parameters":"(String text, {bool raw = false})","range":{"end":{"character":9,"line":84},"start":{"character":7,"line":84}},"returnType":"void"},"range":{"end":{"character":3,"line":86},"start":{"character":2,"line":84}}},{"codeRange":{"end":{"character":3,"line":96},"start":{"character":2,"line":88}},"element":{"kind":"METHOD","name":"inputList","parameters":"(Iterable<T> items, void Function(T item) gen)","range":{"end":{"character":16,"line":88},"start":{"character":7,"line":88}},"returnType":"void","typeParameters":"<T>"},"range":{"end":{"character":3,"line":96},"start":{"character":2,"line":88}}},{"codeRange":{"end":{"character":62,"line":98},"start":{"character":2,"line":98}},"element":{"kind":"METHOD","name":"isCurrentPage","parameters":"(String pathToTest)","range":{"end":{"character":20,"line":98},"start":{"character":7,"line":98}},"returnType":"bool"},"range":{"end":{"character":62,"line":98},"start":{"character":2,"line":98}}},{"codeRange":{"end":{"character":3,"line":108},"start":{"character":2,"line":100}},"element":{"kind":"METHOD","name":"p","parameters":"(String text, {String? style, bool raw = false, String? classes})","range":{"end":{"character":8,"line":100},"start":{"character":7,"line":100}},"returnType":"void"},"range":{"end":{"character":3,"line":108},"start":{"character":2,"line":100}}},{"codeRange":{"end":{"character":3,"line":118},"start":{"character":2,"line":110}},"element":{"kind":"METHOD","name":"pre","parameters":"(void Function() gen, {String? classes})","range":{"end":{"character":10,"line":110},"start":{"character":7,"line":110}},"returnType":"void"},"range":{"end":{"character":3,"line":118},"start":{"character":2,"line":110}}},{"codeRange":{"end":{"character":3,"line":125},"start":{"character":2,"line":120}},"element":{"kind":"METHOD","name":"prettyJson","parameters":"(Object? data)","range":{"end":{"character":17,"line":120},"start":{"character":7,"line":120}},"returnType":"void"},"range":{"end":{"character":3,"line":125},"start":{"character":2,"line":120}}},{"codeRange":{"end":{"character":3,"line":135},"start":{"character":2,"line":127}},"element":{"kind":"METHOD","name":"ul","parameters":"(Iterable<T> items, void Function(T item) gen, {String? classes})","range":{"end":{"character":9,"line":127},"start":{"character":7,"line":127}},"returnType":"void","typeParameters":"<T>"},"range":{"end":{"character":3,"line":135},"start":{"character":2,"line":127}}}],"codeRange":{"end":{"character":1,"line":136},"start":{"character":0,"line":19}},"element":{"kind":"CLASS","name":"Page","range":{"end":{"character":19,"line":19},"start":{"character":15,"line":19}}},"range":{"end":{"character":1,"line":136},"start":{"character":0,"line":18}}},{"children":[{"codeRange":{"end":{"character":3,"line":178},"start":{"character":2,"line":139}},"element":{"kind":"METHOD","name":"drawChart","parameters":"(List<RequestPerformance> items)","range":{"end":{"character":16,"line":139},"start":{"character":7,"line":139}},"returnType":"void"},"range":{"end":{"character":3,"line":178},"start":{"character":2,"line":139}}}],"codeRange":{"end":{"character":1,"line":179},"start":{"character":0,"line":138}},"element":{"kind":"MIXIN","name":"PerformanceChartMixin","range":{"end":{"character":27,"line":138},"start":{"character":6,"line":138}}},"range":{"end":{"character":1,"line":179},"start":{"character":0,"line":138}}},{"children":[{"codeRange":{"end":{"character":65,"line":183},"start":{"character":2,"line":183}},"element":{"kind":"METHOD","name":"handlePost","parameters":"(Map<String, String> queryParameters)","range":{"end":{"character":27,"line":183},"start":{"character":17,"line":183}},"returnType":"Future<String>"},"range":{"end":{"character":65,"line":183},"start":{"character":2,"line":182}}}],"codeRange":{"end":{"character":1,"line":184},"start":{"character":0,"line":181}},"element":{"kind":"CLASS","name":"PostablePage","range":{"end":{"character":37,"line":181},"start":{"character":25,"line":181}}},"range":{"end":{"character":1,"line":184},"start":{"character":0,"line":181}}},{"children":[{"codeRange":{"end":{"character":20,"line":188},"start":{"character":15,"line":188}},"element":{"kind":"FIELD","name":"title","range":{"end":{"character":20,"line":188},"start":{"character":15,"line":188}},"returnType":"String"},"range":{"end":{"character":21,"line":188},"start":{"character":2,"line":188}}},{"codeRange":{"end":{"character":29,"line":189},"start":{"character":19,"line":189}},"element":{"kind":"FIELD","name":"pages","range":{"end":{"character":24,"line":189},"start":{"character":19,"line":189}},"returnType":"List<Page>"},"range":{"end":{"character":30,"line":189},"start":{"character":2,"line":189}}},{"codeRange":{"end":{"character":19,"line":191},"start":{"character":2,"line":191}},"element":{"kind":"CONSTRUCTOR","name":"Site","parameters":"(this.title)","range":{"end":{"character":6,"line":191},"start":{"character":2,"line":191}}},"range":{"end":{"character":19,"line":191},"start":{"character":2,"line":191}}},{"codeRange":{"end":{"character":29,"line":193},"start":{"character":2,"line":193}},"element":{"kind":"GETTER","name":"customCss","range":{"end":{"character":22,"line":193},"start":{"character":13,"line":193}},"returnType":"String"},"range":{"end":{"character":29,"line":193},"start":{"character":2,"line":193}}},{"codeRange":{"end":{"character":61,"line":195},"start":{"character":2,"line":195}},"element":{"kind":"METHOD","name":"createExceptionPage","parameters":"(String message, StackTrace trace)","range":{"end":{"character":26,"line":195},"start":{"character":7,"line":195}},"returnType":"Page"},"range":{"end":{"character":61,"line":195},"start":{"character":2,"line":195}}},{"codeRange":{"end":{"character":45,"line":197},"start":{"character":2,"line":197}},"element":{"kind":"METHOD","name":"createUnknownPage","parameters":"(String unknownPath)","range":{"end":{"character":24,"line":197},"start":{"character":7,"line":197}},"returnType":"Page"},"range":{"end":{"character":45,"line":197},"start":{"character":2,"line":197}}},{"codeRange":{"end":{"character":3,"line":222},"start":{"character":2,"line":199}},"element":{"kind":"METHOD","name":"handleGetRequest","parameters":"(HttpRequest request)","range":{"end":{"character":31,"line":199},"start":{"character":15,"line":199}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":222},"start":{"character":2,"line":199}}},{"codeRange":{"end":{"character":3,"line":244},"start":{"character":2,"line":224}},"element":{"kind":"METHOD","name":"handlePostRequest","parameters":"(HttpRequest request)","range":{"end":{"character":32,"line":224},"start":{"character":15,"line":224}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":244},"start":{"character":2,"line":224}}},{"codeRange":{"end":{"character":3,"line":262},"start":{"character":2,"line":246}},"element":{"kind":"METHOD","name":"handleWebSocketRequest","parameters":"(HttpRequest request)","range":{"end":{"character":37,"line":246},"start":{"character":15,"line":246}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":262},"start":{"character":2,"line":246}}},{"codeRange":{"end":{"character":3,"line":274},"start":{"character":2,"line":264}},"element":{"kind":"METHOD","name":"respond","parameters":"(HttpRequest request, Page page, [int code = HttpStatus.ok])","range":{"end":{"character":22,"line":264},"start":{"character":15,"line":264}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":274},"start":{"character":2,"line":264}}},{"codeRange":{"end":{"character":3,"line":286},"start":{"character":2,"line":276}},"element":{"kind":"METHOD","name":"respondJson","parameters":"(HttpRequest request, Map<String, Object> json, [int code = HttpStatus.ok])","range":{"end":{"character":26,"line":276},"start":{"character":15,"line":276}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":286},"start":{"character":2,"line":276}}},{"codeRange":{"end":{"character":3,"line":299},"start":{"character":2,"line":288}},"element":{"kind":"METHOD","name":"respondOk","parameters":"(HttpRequest request, {int code = HttpStatus.ok})","range":{"end":{"character":24,"line":288},"start":{"character":15,"line":288}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":299},"start":{"character":2,"line":288}}},{"codeRange":{"end":{"character":3,"line":305},"start":{"character":2,"line":301}},"element":{"kind":"METHOD","name":"respondRedirect","parameters":"(HttpRequest request, String pathFragment)","range":{"end":{"character":30,"line":301},"start":{"character":15,"line":301}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":305},"start":{"character":2,"line":301}}},{"codeRange":{"end":{"character":3,"line":310},"start":{"character":2,"line":308}},"element":{"kind":"METHOD","name":"_getPage","parameters":"(String path)","range":{"end":{"character":16,"line":308},"start":{"character":8,"line":308}},"returnType":"Page?"},"range":{"end":{"character":3,"line":310},"start":{"character":2,"line":307}}},{"codeRange":{"end":{"character":3,"line":346},"start":{"character":2,"line":314}},"element":{"kind":"METHOD","name":"_tryHandleRequest","parameters":"(HttpRequest request, Future<void> Function(HttpResponse, Map<String, String>) handler)","range":{"end":{"character":32,"line":314},"start":{"character":15,"line":314}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":346},"start":{"character":2,"line":312}}}],"codeRange":{"end":{"character":1,"line":347},"start":{"character":0,"line":187}},"element":{"kind":"CLASS","name":"Site","range":{"end":{"character":19,"line":187},"start":{"character":15,"line":187}}},"range":{"end":{"character":1,"line":347},"start":{"character":0,"line":186}}},{"children":[{"codeRange":{"end":{"character":49,"line":351},"start":{"character":2,"line":351}},"element":{"kind":"METHOD","name":"handleWebSocket","parameters":"(WebSocket socket)","range":{"end":{"character":30,"line":351},"start":{"character":15,"line":351}},"returnType":"Future<void>"},"range":{"end":{"character":49,"line":351},"start":{"character":2,"line":350}}}],"codeRange":{"end":{"character":1,"line":352},"start":{"character":0,"line":349}},"element":{"kind":"CLASS","name":"WebSocketPage","range":{"end":{"character":38,"line":349},"start":{"character":25,"line":349}}},"range":{"end":{"character":1,"line":352},"start":{"character":0,"line":349}}}],"codeRange":{"end":{"character":0,"line":353},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":353},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":353},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/status/pages.dart"}}},
+{"time":1763411775709,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":2067,"result":null,"clientRequestTime":1763411775709}},
+{"time":1763411775709,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"begin","title":"Analyzing…"}}}},
+{"time":1763411775746,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[{"label":"Message","range":{"end":{"character":10,"line":81},"start":{"character":8,"line":76}}},{"label":"Message","range":{"end":{"character":10,"line":137},"start":{"character":8,"line":133}}},{"label":"Message","range":{"end":{"character":10,"line":146},"start":{"character":8,"line":141}}}],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/log_player/server_driver.dart"}}},
+{"time":1763411775746,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":32,"line":14},"start":{"character":23,"line":14}},"element":{"kind":"FIELD","name":"_protocol","range":{"end":{"character":32,"line":14},"start":{"character":23,"line":14}},"returnType":"ServerProtocol"},"range":{"end":{"character":33,"line":14},"start":{"character":2,"line":13}}},{"codeRange":{"end":{"character":45,"line":18},"start":{"character":21,"line":18}},"element":{"kind":"FIELD","name":"additionalArguments","range":{"end":{"character":40,"line":18},"start":{"character":21,"line":18}},"returnType":"List<String>"},"range":{"end":{"character":46,"line":18},"start":{"character":2,"line":16}}},{"codeRange":{"end":{"character":20,"line":22},"start":{"character":10,"line":22}},"element":{"kind":"FIELD","name":"_stdinSink","range":{"end":{"character":20,"line":22},"start":{"character":10,"line":22}},"returnType":"IOSink?"},"range":{"end":{"character":21,"line":22},"start":{"character":2,"line":20}}},{"codeRange":{"end":{"character":23,"line":26},"start":{"character":13,"line":26}},"element":{"kind":"FIELD","name":"_dtdSocket","range":{"end":{"character":23,"line":26},"start":{"character":13,"line":26}},"returnType":"WebSocket?"},"range":{"end":{"character":24,"line":26},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":45,"line":29},"start":{"character":21,"line":29}},"element":{"kind":"FIELD","name":"_messagesFromServer","range":{"end":{"character":40,"line":29},"start":{"character":21,"line":29}},"returnType":"List<String>"},"range":{"end":{"character":46,"line":29},"start":{"character":2,"line":28}}},{"codeRange":{"end":{"character":74,"line":38},"start":{"character":2,"line":38}},"element":{"kind":"CONSTRUCTOR","name":"ServerDriver","parameters":"({required ServerProtocol protocol})","range":{"end":{"character":14,"line":38},"start":{"character":2,"line":38}}},"range":{"end":{"character":74,"line":38},"start":{"character":2,"line":31}}},{"codeRange":{"end":{"character":3,"line":54},"start":{"character":2,"line":43}},"element":{"kind":"GETTER","name":"filteredAdditionalArguments","range":{"end":{"character":46,"line":43},"start":{"character":19,"line":43}},"returnType":"List<String>"},"range":{"end":{"character":3,"line":54},"start":{"character":2,"line":40}}},{"codeRange":{"end":{"character":3,"line":59},"start":{"character":2,"line":57}},"element":{"kind":"GETTER","name":"_dartExecutable","range":{"end":{"character":28,"line":57},"start":{"character":13,"line":57}},"returnType":"String"},"range":{"end":{"character":3,"line":59},"start":{"character":2,"line":56}}},{"codeRange":{"end":{"character":3,"line":69},"start":{"character":2,"line":64}},"element":{"kind":"METHOD","name":"connectToDtd","parameters":"()","range":{"end":{"character":27,"line":64},"start":{"character":15,"line":64}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":69},"start":{"character":2,"line":61}}},{"codeRange":{"end":{"character":3,"line":88},"start":{"character":2,"line":73}},"element":{"kind":"METHOD","name":"exit","parameters":"()","range":{"end":{"character":11,"line":73},"start":{"character":7,"line":73}},"returnType":"void"},"range":{"end":{"character":3,"line":88},"start":{"character":2,"line":71}}},{"codeRange":{"end":{"character":3,"line":99},"start":{"character":2,"line":90}},"element":{"kind":"METHOD","name":"sendMessageFromDTD","parameters":"(Message message)","range":{"end":{"character":25,"line":90},"start":{"character":7,"line":90}},"returnType":"void"},"range":{"end":{"character":3,"line":99},"start":{"character":2,"line":90}}},{"codeRange":{"end":{"character":3,"line":105},"start":{"character":2,"line":101}},"element":{"kind":"METHOD","name":"sendMessageFromFileWatcher","parameters":"(Message message)","range":{"end":{"character":33,"line":101},"start":{"character":7,"line":101}},"returnType":"void"},"range":{"end":{"character":3,"line":105},"start":{"character":2,"line":101}}},{"codeRange":{"end":{"character":3,"line":118},"start":{"character":2,"line":109}},"element":{"kind":"METHOD","name":"sendMessageFromIde","parameters":"(Message message)","range":{"end":{"character":25,"line":109},"start":{"character":7,"line":109}},"returnType":"void"},"range":{"end":{"character":3,"line":118},"start":{"character":2,"line":107}}},{"codeRange":{"end":{"character":3,"line":127},"start":{"character":2,"line":120}},"element":{"kind":"METHOD","name":"sendMessageFromPluginIsolate","parameters":"(Message message)","range":{"end":{"character":35,"line":120},"start":{"character":7,"line":120}},"returnType":"void"},"range":{"end":{"character":3,"line":127},"start":{"character":2,"line":120}}},{"codeRange":{"end":{"character":3,"line":149},"start":{"character":2,"line":130}},"element":{"kind":"METHOD","name":"shutdown","parameters":"()","range":{"end":{"character":15,"line":130},"start":{"character":7,"line":130}},"returnType":"void"},"range":{"end":{"character":3,"line":149},"start":{"character":2,"line":129}}},{"codeRange":{"end":{"character":3,"line":170},"start":{"character":2,"line":152}},"element":{"kind":"METHOD","name":"start","parameters":"()","range":{"end":{"character":20,"line":152},"start":{"character":15,"line":152}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":170},"start":{"character":2,"line":151}}},{"codeRange":{"end":{"character":3,"line":174},"start":{"character":2,"line":172}},"element":{"kind":"METHOD","name":"_receiveMessageFromServer","parameters":"(String message)","range":{"end":{"character":32,"line":172},"start":{"character":7,"line":172}},"returnType":"void"},"range":{"end":{"character":3,"line":174},"start":{"character":2,"line":172}}}],"codeRange":{"end":{"character":1,"line":175},"start":{"character":0,"line":12}},"element":{"kind":"CLASS","name":"ServerDriver","range":{"end":{"character":18,"line":12},"start":{"character":6,"line":12}}},"range":{"end":{"character":1,"line":175},"start":{"character":0,"line":11}}},{"children":[{"codeRange":{"end":{"character":20,"line":179},"start":{"character":2,"line":179}},"element":{"kind":"ENUM_CONSTANT","name":"legacy","range":{"end":{"character":8,"line":179},"start":{"character":2,"line":179}}},"range":{"end":{"character":20,"line":179},"start":{"character":2,"line":179}}},{"codeRange":{"end":{"character":12,"line":180},"start":{"character":2,"line":180}},"element":{"kind":"ENUM_CONSTANT","name":"lsp","range":{"end":{"character":5,"line":180},"start":{"character":2,"line":180}}},"range":{"end":{"character":12,"line":180},"start":{"character":2,"line":180}}},{"codeRange":{"end":{"character":24,"line":182},"start":{"character":15,"line":182}},"element":{"kind":"FIELD","name":"flagValue","range":{"end":{"character":24,"line":182},"start":{"character":15,"line":182}},"returnType":"String"},"range":{"end":{"character":25,"line":182},"start":{"character":2,"line":182}}},{"codeRange":{"end":{"character":39,"line":183},"start":{"character":2,"line":183}},"element":{"kind":"CONSTRUCTOR","name":"ServerProtocol","parameters":"(this.flagValue)","range":{"end":{"character":22,"line":183},"start":{"character":8,"line":183}}},"range":{"end":{"character":39,"line":183},"start":{"character":2,"line":183}}}],"codeRange":{"end":{"character":1,"line":184},"start":{"character":0,"line":178}},"element":{"kind":"ENUM","name":"ServerProtocol","range":{"end":{"character":19,"line":178},"start":{"character":5,"line":178}}},"range":{"end":{"character":1,"line":184},"start":{"character":0,"line":177}}}],"codeRange":{"end":{"character":0,"line":185},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":185},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":185},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/log_player/server_driver.dart"}}},
+{"time":1763411775746,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5840,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":35,"character":0}}},"clientRequestTime":1763411775717}},
+{"time":1763411775746,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5841,"method":"textDocument/formatting","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart"},"options":{"tabSize":2,"insertSpaces":true,"trimTrailingWhitespace":true,"trimFinalNewlines":true,"insertFinalNewline":true}},"clientRequestTime":1763411775723}},
+{"time":1763411775746,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5842,"method":"textDocument/formatting","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"options":{"tabSize":2,"insertSpaces":true,"trimTrailingWhitespace":true,"trimFinalNewlines":true,"insertFinalNewline":true}},"clientRequestTime":1763411775723}},
+{"time":1763411775746,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5843,"method":"textDocument/formatting","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"},"options":{"tabSize":2,"insertSpaces":true,"trimTrailingWhitespace":true,"trimFinalNewlines":true,"insertFinalNewline":true}},"clientRequestTime":1763411775723}},
+{"time":1763411775755,"kind":"message","sender":"server","receiver":"ide","message":{"id":5841,"jsonrpc":"2.0","result":null}},
+{"time":1763411775755,"kind":"message","sender":"server","receiver":"ide","message":{"id":5842,"jsonrpc":"2.0","result":null}},
+{"time":1763411775755,"kind":"message","sender":"server","receiver":"ide","message":{"id":5843,"jsonrpc":"2.0","result":null}},
+{"time":1763411775757,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}}},
+{"time":1763411775757,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":36,"line":16},"start":{"character":2,"line":16}},"element":{"kind":"CONSTRUCTOR","name":"ServerStarter2","parameters":"()","range":{"end":{"character":24,"line":16},"start":{"character":10,"line":16}}},"range":{"end":{"character":36,"line":16},"start":{"character":2,"line":15}}},{"codeRange":{"end":{"character":4,"line":22},"start":{"character":2,"line":20}},"element":{"kind":"SETTER","name":"crashReportingAttachmentsBuilder","parameters":"(CrashReportingAttachmentsBuilder builder)","range":{"end":{"character":38,"line":20},"start":{"character":6,"line":20}},"returnType":""},"range":{"end":{"character":4,"line":22},"start":{"character":2,"line":18}}},{"codeRange":{"end":{"character":71,"line":26},"start":{"character":2,"line":26}},"element":{"kind":"SETTER","name":"detachableFileSystemManager","parameters":"(DetachableFileSystemManager manager)","range":{"end":{"character":33,"line":26},"start":{"character":6,"line":26}},"returnType":""},"range":{"end":{"character":71,"line":26},"start":{"character":2,"line":24}}},{"codeRange":{"end":{"character":5,"line":33},"start":{"character":2,"line":29}},"element":{"kind":"METHOD","name":"start","parameters":"(List<String> arguments, {SendPort sendPort, bool defaultToLsp = false})","range":{"end":{"character":12,"line":29},"start":{"character":7,"line":29}},"returnType":"void"},"range":{"end":{"character":5,"line":33},"start":{"character":2,"line":28}}}],"codeRange":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"element":{"kind":"CLASS","name":"ServerStarter2","range":{"end":{"character":29,"line":14},"start":{"character":15,"line":14}}},"range":{"end":{"character":1,"line":34},"start":{"character":0,"line":10}}}],"codeRange":{"end":{"character":0,"line":35},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":35},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":35},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}}},
+{"time":1763411775762,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/log_player/log_player.dart"}}},
+{"time":1763411775762,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":9,"line":18},"start":{"character":6,"line":18}},"element":{"kind":"FIELD","name":"log","range":{"end":{"character":9,"line":18},"start":{"character":6,"line":18}},"returnType":"Log"},"range":{"end":{"character":10,"line":18},"start":{"character":2,"line":17}}},{"codeRange":{"end":{"character":22,"line":21},"start":{"character":16,"line":21}},"element":{"kind":"FIELD","name":"server","range":{"end":{"character":22,"line":21},"start":{"character":16,"line":21}},"returnType":"ServerDriver?"},"range":{"end":{"character":23,"line":21},"start":{"character":2,"line":20}}},{"codeRange":{"end":{"character":31,"line":24},"start":{"character":7,"line":24}},"element":{"kind":"FIELD","name":"_hasSeenShutdown","range":{"end":{"character":23,"line":24},"start":{"character":7,"line":24}},"returnType":"bool"},"range":{"end":{"character":32,"line":24},"start":{"character":2,"line":23}}},{"codeRange":{"end":{"character":27,"line":27},"start":{"character":7,"line":27}},"element":{"kind":"FIELD","name":"_hasSeenExit","range":{"end":{"character":19,"line":27},"start":{"character":7,"line":27}},"returnType":"bool"},"range":{"end":{"character":28,"line":27},"start":{"character":2,"line":26}}},{"codeRange":{"end":{"character":50,"line":31},"start":{"character":8,"line":31}},"element":{"kind":"FIELD","name":"driverArgParser","range":{"end":{"character":23,"line":31},"start":{"character":8,"line":31}},"returnType":""},"range":{"end":{"character":51,"line":31},"start":{"character":2,"line":29}}},{"codeRange":{"end":{"character":33,"line":33},"start":{"character":2,"line":33}},"element":{"kind":"CONSTRUCTOR","name":"LogPlayer","parameters":"({required this.log})","range":{"end":{"character":11,"line":33},"start":{"character":2,"line":33}}},"range":{"end":{"character":33,"line":33},"start":{"character":2,"line":33}}},{"codeRange":{"end":{"character":3,"line":76},"start":{"character":2,"line":36}},"element":{"kind":"METHOD","name":"play","parameters":"()","range":{"end":{"character":19,"line":36},"start":{"character":15,"line":36}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":76},"start":{"character":2,"line":35}}},{"codeRange":{"end":{"character":3,"line":105},"start":{"character":2,"line":79}},"element":{"kind":"METHOD","name":"_handleMessageFromServer","parameters":"(LogEntry entry)","range":{"end":{"character":31,"line":79},"start":{"character":7,"line":79}},"returnType":"void"},"range":{"end":{"character":3,"line":105},"start":{"character":2,"line":78}}},{"codeRange":{"end":{"character":3,"line":143},"start":{"character":2,"line":108}},"element":{"kind":"METHOD","name":"_sendMessageToServer","parameters":"(LogEntry entry)","range":{"end":{"character":35,"line":108},"start":{"character":15,"line":108}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":143},"start":{"character":2,"line":107}}}],"codeRange":{"end":{"character":1,"line":144},"start":{"character":0,"line":16}},"element":{"kind":"CLASS","name":"LogPlayer","range":{"end":{"character":15,"line":16},"start":{"character":6,"line":16}}},"range":{"end":{"character":1,"line":144},"start":{"character":0,"line":12}}}],"codeRange":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":145},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/log_player/log_player.dart"}}},
+{"time":1763411775762,"kind":"message","sender":"server","receiver":"ide","message":{"id":5840,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":6,"line":20}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":6,"line":26}}]}},
+{"time":1763411775766,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/scenario.dart"}}},
+{"time":1763411775766,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":20,"line":15},"start":{"character":13,"line":15}},"element":{"kind":"FIELD","name":"logFile","range":{"end":{"character":20,"line":15},"start":{"character":13,"line":15}},"returnType":"File"},"range":{"end":{"character":21,"line":15},"start":{"character":2,"line":15}}},{"codeRange":{"end":{"character":32,"line":16},"start":{"character":25,"line":16}},"element":{"kind":"FIELD","name":"project","range":{"end":{"character":32,"line":16},"start":{"character":25,"line":16}},"returnType":"ProjectGenerator"},"range":{"end":{"character":33,"line":16},"start":{"character":2,"line":16}}},{"codeRange":{"end":{"character":37,"line":17},"start":{"character":23,"line":17}},"element":{"kind":"FIELD","name":"serverProtocol","range":{"end":{"character":37,"line":17},"start":{"character":23,"line":17}},"returnType":"ServerProtocol"},"range":{"end":{"character":38,"line":17},"start":{"character":2,"line":17}}},{"codeRange":{"end":{"character":5,"line":23},"start":{"character":2,"line":19}},"element":{"kind":"CONSTRUCTOR","name":"Scenario","parameters":"({required this.logFile, required this.project, required this.serverProtocol})","range":{"end":{"character":10,"line":19},"start":{"character":2,"line":19}}},"range":{"end":{"character":5,"line":23},"start":{"character":2,"line":19}}},{"children":[{"codeRange":{"end":{"character":5,"line":29},"start":{"character":4,"line":27}},"element":{"kind":"FUNCTION","name":"log","parameters":"(String message)","range":{"end":{"character":12,"line":27},"start":{"character":9,"line":27}},"returnType":"void"},"range":{"end":{"character":5,"line":29},"start":{"character":4,"line":27}}}],"codeRange":{"end":{"character":3,"line":60},"start":{"character":2,"line":25}},"element":{"kind":"METHOD","name":"run","parameters":"()","range":{"end":{"character":18,"line":25},"start":{"character":15,"line":25}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":60},"start":{"character":2,"line":25}}}],"codeRange":{"end":{"character":1,"line":61},"start":{"character":0,"line":14}},"element":{"kind":"CLASS","name":"Scenario","range":{"end":{"character":14,"line":14},"start":{"character":6,"line":14}}},"range":{"end":{"character":1,"line":61},"start":{"character":0,"line":11}}}],"codeRange":{"end":{"character":0,"line":62},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":62},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":62},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/performance/scenarios/scenario.dart"}}},
+{"time":1763411775767,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart"}}},
+{"time":1763411775767,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"codeRange":{"end":{"character":1,"line":10},"start":{"character":0,"line":7}},"element":{"kind":"FUNCTION","name":"main","parameters":"(List<String> args)","range":{"end":{"character":9,"line":7},"start":{"character":5,"line":7}},"returnType":"void"},"range":{"end":{"character":1,"line":10},"start":{"character":0,"line":6}}}],"codeRange":{"end":{"character":0,"line":11},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":11},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":11},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart"}}},
+{"time":1763411775780,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/log_player/log.dart"}}},
+{"time":1763411775780,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":30,"line":12},"start":{"character":23,"line":12}},"element":{"kind":"FIELD","name":"entries","range":{"end":{"character":30,"line":12},"start":{"character":23,"line":12}},"returnType":"List<LogEntry>"},"range":{"end":{"character":31,"line":12},"start":{"character":2,"line":11}}},{"codeRange":{"end":{"character":3,"line":18},"start":{"character":2,"line":16}},"element":{"kind":"CONSTRUCTOR","name":"Log.fromFile","parameters":"(File file, Map<String, String> replacements)","range":{"end":{"character":22,"line":16},"start":{"character":14,"line":16}}},"range":{"end":{"character":3,"line":18},"start":{"character":2,"line":14}}},{"codeRange":{"end":{"character":3,"line":38},"start":{"character":2,"line":28}},"element":{"kind":"CONSTRUCTOR","name":"Log.fromString","parameters":"(String logContent, Map<String, String> replacements)","range":{"end":{"character":24,"line":28},"start":{"character":14,"line":28}}},"range":{"end":{"character":3,"line":38},"start":{"character":2,"line":20}}},{"codeRange":{"end":{"character":22,"line":40},"start":{"character":2,"line":40}},"element":{"kind":"CONSTRUCTOR","name":"Log._","parameters":"(this.entries)","range":{"end":{"character":7,"line":40},"start":{"character":6,"line":40}}},"range":{"end":{"character":22,"line":40},"start":{"character":2,"line":40}}}],"codeRange":{"end":{"character":1,"line":41},"start":{"character":0,"line":10}},"element":{"kind":"CLASS","name":"Log","range":{"end":{"character":9,"line":10},"start":{"character":6,"line":10}}},"range":{"end":{"character":1,"line":41},"start":{"character":0,"line":9}}}],"codeRange":{"end":{"character":0,"line":42},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":42},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":42},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/tool/log_player/log.dart"}}},
+{"time":1763411775796,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishClosingLabels","params":{"labels":[{"label":"InstrumentationLogAdapter","range":{"end":{"character":9,"line":310},"start":{"character":8,"line":307}}}],"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}}},
+{"time":1763411775797,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"dart/textDocument/publishOutline","params":{"outline":{"children":[{"children":[{"codeRange":{"end":{"character":45,"line":52},"start":{"character":15,"line":52}},"element":{"kind":"FIELD","name":"binaryName","range":{"end":{"character":25,"line":52},"start":{"character":15,"line":52}},"returnType":""},"range":{"end":{"character":46,"line":52},"start":{"character":2,"line":51}}},{"codeRange":{"end":{"character":50,"line":55},"start":{"character":22,"line":55}},"element":{"kind":"FIELD","name":"clientIdOption","range":{"end":{"character":36,"line":55},"start":{"character":22,"line":55}},"returnType":"String"},"range":{"end":{"character":51,"line":55},"start":{"character":2,"line":54}}},{"codeRange":{"end":{"character":60,"line":58},"start":{"character":22,"line":58}},"element":{"kind":"FIELD","name":"clientVersionOption","range":{"end":{"character":41,"line":58},"start":{"character":22,"line":58}},"returnType":"String"},"range":{"end":{"character":61,"line":58},"start":{"character":2,"line":57}}},{"codeRange":{"end":{"character":41,"line":62},"start":{"character":22,"line":61}},"element":{"kind":"FIELD","name":"disableServerExceptionHandlingOption","range":{"end":{"character":58,"line":61},"start":{"character":22,"line":61}},"returnType":"String"},"range":{"end":{"character":42,"line":62},"start":{"character":2,"line":60}}},{"codeRange":{"end":{"character":41,"line":66},"start":{"character":22,"line":65}},"element":{"kind":"FIELD","name":"disableServerFeatureCompletionOption","range":{"end":{"character":58,"line":65},"start":{"character":22,"line":65}},"returnType":"String"},"range":{"end":{"character":42,"line":66},"start":{"character":2,"line":64}}},{"codeRange":{"end":{"character":37,"line":70},"start":{"character":22,"line":69}},"element":{"kind":"FIELD","name":"disableServerFeatureSearchOption","range":{"end":{"character":54,"line":69},"start":{"character":22,"line":69}},"returnType":"String"},"range":{"end":{"character":38,"line":70},"start":{"character":2,"line":68}}},{"codeRange":{"end":{"character":46,"line":75},"start":{"character":22,"line":74}},"element":{"kind":"FIELD","name":"disableStatusNotificationDebouncingOption","range":{"end":{"character":63,"line":74},"start":{"character":22,"line":74}},"returnType":"String"},"range":{"end":{"character":47,"line":75},"start":{"character":2,"line":72}}},{"codeRange":{"end":{"character":42,"line":80},"start":{"character":22,"line":79}},"element":{"kind":"FIELD","name":"disableSilentAnalysisExceptionsOption","range":{"end":{"character":59,"line":79},"start":{"character":22,"line":79}},"returnType":"String"},"range":{"end":{"character":43,"line":80},"start":{"character":2,"line":77}}},{"codeRange":{"end":{"character":66,"line":83},"start":{"character":22,"line":83}},"element":{"kind":"FIELD","name":"enableExperimentOption","range":{"end":{"character":44,"line":83},"start":{"character":22,"line":83}},"returnType":"String"},"range":{"end":{"character":67,"line":83},"start":{"character":2,"line":82}}},{"codeRange":{"end":{"character":39,"line":86},"start":{"character":22,"line":86}},"element":{"kind":"FIELD","name":"helpFlag","range":{"end":{"character":30,"line":86},"start":{"character":22,"line":86}},"returnType":"String"},"range":{"end":{"character":40,"line":86},"start":{"character":2,"line":85}}},{"codeRange":{"end":{"character":49,"line":89},"start":{"character":22,"line":89}},"element":{"kind":"FIELD","name":"analyticsFlag","range":{"end":{"character":35,"line":89},"start":{"character":22,"line":89}},"returnType":"String"},"range":{"end":{"character":50,"line":89},"start":{"character":2,"line":88}}},{"codeRange":{"end":{"character":66,"line":92},"start":{"character":22,"line":92}},"element":{"kind":"FIELD","name":"suppressAnalyticsFlag","range":{"end":{"character":43,"line":92},"start":{"character":22,"line":92}},"returnType":"String"},"range":{"end":{"character":67,"line":92},"start":{"character":2,"line":91}}},{"codeRange":{"end":{"character":71,"line":96},"start":{"character":22,"line":96}},"element":{"kind":"FIELD","name":"protocolTrafficLogOption","range":{"end":{"character":46,"line":96},"start":{"character":22,"line":96}},"returnType":"String"},"range":{"end":{"character":72,"line":96},"start":{"character":2,"line":94}}},{"codeRange":{"end":{"character":32,"line":98},"start":{"character":22,"line":97}},"element":{"kind":"FIELD","name":"protocolTrafficLogAliasOption","range":{"end":{"character":51,"line":97},"start":{"character":22,"line":97}},"returnType":"String"},"range":{"end":{"character":33,"line":98},"start":{"character":2,"line":97}}},{"codeRange":{"end":{"character":54,"line":102},"start":{"character":22,"line":102}},"element":{"kind":"FIELD","name":"sessionLogOption","range":{"end":{"character":38,"line":102},"start":{"character":22,"line":102}},"returnType":"String"},"range":{"end":{"character":55,"line":102},"start":{"character":2,"line":100}}},{"codeRange":{"end":{"character":33,"line":107},"start":{"character":22,"line":106}},"element":{"kind":"FIELD","name":"internalPrintToConsoleOption","range":{"end":{"character":50,"line":106},"start":{"character":22,"line":106}},"returnType":"String"},"range":{"end":{"character":34,"line":107},"start":{"character":2,"line":104}}},{"codeRange":{"end":{"character":69,"line":110},"start":{"character":22,"line":110}},"element":{"kind":"FIELD","name":"analysisDriverLogOption","range":{"end":{"character":45,"line":110},"start":{"character":22,"line":110}},"returnType":"String"},"range":{"end":{"character":70,"line":110},"start":{"character":2,"line":109}}},{"codeRange":{"end":{"character":78,"line":111},"start":{"character":22,"line":111}},"element":{"kind":"FIELD","name":"analysisDriverLogAliasOption","range":{"end":{"character":50,"line":111},"start":{"character":22,"line":111}},"returnType":"String"},"range":{"end":{"character":79,"line":111},"start":{"character":2,"line":111}}},{"codeRange":{"end":{"character":62,"line":116},"start":{"character":22,"line":116}},"element":{"kind":"FIELD","name":"diagnosticPortOption","range":{"end":{"character":42,"line":116},"start":{"character":22,"line":116}},"returnType":"String"},"range":{"end":{"character":63,"line":116},"start":{"character":2,"line":113}}},{"codeRange":{"end":{"character":56,"line":117},"start":{"character":22,"line":117}},"element":{"kind":"FIELD","name":"diagnosticPortAliasOption","range":{"end":{"character":47,"line":117},"start":{"character":22,"line":117}},"returnType":"String"},"range":{"end":{"character":57,"line":117},"start":{"character":2,"line":117}}},{"codeRange":{"end":{"character":48,"line":120},"start":{"character":22,"line":120}},"element":{"kind":"FIELD","name":"dartSdkOption","range":{"end":{"character":35,"line":120},"start":{"character":22,"line":120}},"returnType":"String"},"range":{"end":{"character":49,"line":120},"start":{"character":2,"line":119}}},{"codeRange":{"end":{"character":48,"line":121},"start":{"character":22,"line":121}},"element":{"kind":"FIELD","name":"dartSdkAliasOption","range":{"end":{"character":40,"line":121},"start":{"character":22,"line":121}},"returnType":"String"},"range":{"end":{"character":49,"line":121},"start":{"character":2,"line":121}}},{"codeRange":{"end":{"character":49,"line":124},"start":{"character":22,"line":124}},"element":{"kind":"FIELD","name":"cacheFolderOption","range":{"end":{"character":39,"line":124},"start":{"character":22,"line":124}},"returnType":"String"},"range":{"end":{"character":50,"line":124},"start":{"character":2,"line":123}}},{"codeRange":{"end":{"character":53,"line":128},"start":{"character":22,"line":128}},"element":{"kind":"FIELD","name":"packagesFileOption","range":{"end":{"character":40,"line":128},"start":{"character":22,"line":128}},"returnType":"String"},"range":{"end":{"character":54,"line":128},"start":{"character":2,"line":126}}},{"codeRange":{"end":{"character":77,"line":132},"start":{"character":22,"line":132}},"element":{"kind":"FIELD","name":"reportProtocolVersionOption","range":{"end":{"character":49,"line":132},"start":{"character":22,"line":132}},"returnType":"String"},"range":{"end":{"character":78,"line":132},"start":{"character":2,"line":130}}},{"codeRange":{"end":{"character":55,"line":135},"start":{"character":22,"line":135}},"element":{"kind":"FIELD","name":"serverProtocolOption","range":{"end":{"character":42,"line":135},"start":{"character":22,"line":135}},"returnType":"String"},"range":{"end":{"character":56,"line":135},"start":{"character":2,"line":134}}},{"codeRange":{"end":{"character":51,"line":136},"start":{"character":22,"line":136}},"element":{"kind":"FIELD","name":"protocolAnalyzer","range":{"end":{"character":38,"line":136},"start":{"character":22,"line":136}},"returnType":"String"},"range":{"end":{"character":52,"line":136},"start":{"character":2,"line":136}}},{"codeRange":{"end":{"character":41,"line":137},"start":{"character":22,"line":137}},"element":{"kind":"FIELD","name":"protocolLsp","range":{"end":{"character":33,"line":137},"start":{"character":22,"line":137}},"returnType":"String"},"range":{"end":{"character":42,"line":137},"start":{"character":2,"line":137}}},{"codeRange":{"end":{"character":40,"line":140},"start":{"character":22,"line":140}},"element":{"kind":"FIELD","name":"useLspFlag","range":{"end":{"character":32,"line":140},"start":{"character":22,"line":140}},"returnType":"String"},"range":{"end":{"character":41,"line":140},"start":{"character":2,"line":139}}},{"codeRange":{"end":{"character":54,"line":144},"start":{"character":22,"line":144}},"element":{"kind":"FIELD","name":"trainUsingOption","range":{"end":{"character":38,"line":144},"start":{"character":22,"line":144}},"returnType":"String"},"range":{"end":{"character":55,"line":144},"start":{"character":2,"line":142}}},{"codeRange":{"end":{"character":76,"line":147},"start":{"character":22,"line":147}},"element":{"kind":"FIELD","name":"disableFileByteStoreOption","range":{"end":{"character":48,"line":147},"start":{"character":22,"line":147}},"returnType":"String"},"range":{"end":{"character":77,"line":147},"start":{"character":2,"line":146}}},{"codeRange":{"end":{"character":75,"line":150},"start":{"character":22,"line":150}},"element":{"kind":"FIELD","name":"withFineDependenciesOption","range":{"end":{"character":48,"line":150},"start":{"character":22,"line":150}},"returnType":"String"},"range":{"end":{"character":76,"line":150},"start":{"character":2,"line":149}}},{"codeRange":{"end":{"character":44,"line":154},"start":{"character":35,"line":153}},"element":{"kind":"FIELD","name":"crashReportingAttachmentsBuilder","range":{"end":{"character":67,"line":153},"start":{"character":35,"line":153}},"returnType":"CrashReportingAttachmentsBuilder"},"range":{"end":{"character":45,"line":154},"start":{"character":2,"line":152}}},{"codeRange":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}},"element":{"kind":"FIELD","name":"detachableFileSystemManager","range":{"end":{"character":58,"line":158},"start":{"character":31,"line":158}},"returnType":"DetachableFileSystemManager?"},"range":{"end":{"character":59,"line":158},"start":{"character":2,"line":156}}},{"codeRange":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}},"element":{"kind":"FIELD","name":"_instrumentationService","range":{"end":{"character":59,"line":161},"start":{"character":36,"line":161}},"returnType":"InstrumentationService"},"range":{"end":{"character":60,"line":161},"start":{"character":2,"line":160}}},{"codeRange":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}},"element":{"kind":"FIELD","name":"_sessionLogger","range":{"end":{"character":41,"line":164},"start":{"character":27,"line":164}},"returnType":"SessionLogger"},"range":{"end":{"character":42,"line":164},"start":{"character":2,"line":163}}},{"children":[{"codeRange":{"end":{"character":5,"line":261},"start":{"character":4,"line":252}},"element":{"kind":"FUNCTION","name":"shouldSendCallback","parameters":"()","range":{"end":{"character":27,"line":252},"start":{"character":9,"line":252}},"returnType":"bool"},"range":{"end":{"character":5,"line":261},"start":{"character":4,"line":252}}}],"codeRange":{"end":{"character":3,"line":400},"start":{"character":2,"line":171}},"element":{"kind":"METHOD","name":"start","parameters":"(List<String> arguments, {SendPort? sendPort, bool defaultToLsp = false})","range":{"end":{"character":12,"line":171},"start":{"character":7,"line":171}},"returnType":"void"},"range":{"end":{"character":3,"line":400},"start":{"character":2,"line":166}}},{"codeRange":{"end":{"character":3,"line":523},"start":{"character":2,"line":402}},"element":{"kind":"METHOD","name":"startAnalysisServer","parameters":"(ArgResults results, AnalysisServerOptions analysisServerOptions, ArgParser parser, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, CrashReportingAttachmentsBuilder crashReportingAttachmentsBuilder, InstrumentationService instrumentationService, SessionLogger sessionLogger, RequestStatisticsHelper requestStatistics, int? diagnosticServerPort, ErrorNotifier errorNotifier, SendPort? sendPort)","range":{"end":{"character":26,"line":402},"start":{"character":7,"line":402}},"returnType":"void"},"range":{"end":{"character":3,"line":523},"start":{"character":2,"line":402}}},{"codeRange":{"end":{"character":3,"line":572},"start":{"character":2,"line":525}},"element":{"kind":"METHOD","name":"startLspServer","parameters":"(ArgResults args, AnalysisServerOptions analysisServerOptions, DartSdkManager dartSdkManager, AnalyticsManager analyticsManager, InstrumentationService instrumentationService, SessionLogger sessionLogger, int? diagnosticServerPort, ErrorNotifier errorNotifier)","range":{"end":{"character":21,"line":525},"start":{"character":7,"line":525}},"returnType":"void"},"range":{"end":{"character":3,"line":572},"start":{"character":2,"line":525}}},{"children":[{"codeRange":{"end":{"character":5,"line":592},"start":{"character":4,"line":583}},"element":{"kind":"FUNCTION","name":"errorFunction","parameters":"(Zone self, ZoneDelegate parent, Zone zone, Object exception, StackTrace stackTrace)","range":{"end":{"character":22,"line":583},"start":{"character":9,"line":583}},"returnType":"void"},"range":{"end":{"character":5,"line":592},"start":{"character":4,"line":583}}}],"codeRange":{"end":{"character":3,"line":606},"start":{"character":2,"line":578}},"element":{"kind":"METHOD","name":"_captureExceptions","parameters":"(InstrumentationService service, void Function() callback, {void Function(String line)? print})","range":{"end":{"character":25,"line":578},"start":{"character":7,"line":578}},"returnType":"void"},"range":{"end":{"character":3,"line":606},"start":{"character":2,"line":574}}},{"codeRange":{"end":{"character":3,"line":635},"start":{"character":2,"line":609}},"element":{"kind":"METHOD","name":"_createAnalytics","parameters":"(DartSdk dartSdk, String dartSdkPath, DashTool tool)","range":{"end":{"character":28,"line":609},"start":{"character":12,"line":609}},"returnType":"Analytics"},"range":{"end":{"character":3,"line":635},"start":{"character":2,"line":608}}},{"codeRange":{"end":{"character":3,"line":643},"start":{"character":2,"line":637}},"element":{"kind":"METHOD","name":"_createDefaultSdk","parameters":"(String defaultSdkPath)","range":{"end":{"character":27,"line":637},"start":{"character":10,"line":637}},"returnType":"DartSdk"},"range":{"end":{"character":3,"line":643},"start":{"character":2,"line":637}}},{"codeRange":{"end":{"character":3,"line":650},"start":{"character":2,"line":646}},"element":{"kind":"METHOD","name":"_generateUuidString","parameters":"()","range":{"end":{"character":28,"line":646},"start":{"character":9,"line":646}},"returnType":"String"},"range":{"end":{"character":3,"line":650},"start":{"character":2,"line":645}}},{"codeRange":{"end":{"character":3,"line":701},"start":{"character":2,"line":656}},"element":{"kind":"METHOD","name":"_getArgumentsForAnalytics","parameters":"(ArgResults results)","range":{"end":{"character":40,"line":656},"start":{"character":15,"line":656}},"returnType":"List<String>"},"range":{"end":{"character":3,"line":701},"start":{"character":2,"line":652}}},{"children":[{"codeRange":{"end":{"character":5,"line":711},"start":{"character":4,"line":706}},"element":{"kind":"FUNCTION","name":"tryCandidateArgument","parameters":"(String argumentName)","range":{"end":{"character":29,"line":706},"start":{"character":9,"line":706}},"returnType":"void"},"range":{"end":{"character":5,"line":711},"start":{"character":4,"line":706}}}],"codeRange":{"end":{"character":3,"line":719},"start":{"character":2,"line":703}},"element":{"kind":"METHOD","name":"_getSdkPath","parameters":"(ArgResults args)","range":{"end":{"character":20,"line":703},"start":{"character":9,"line":703}},"returnType":"String"},"range":{"end":{"character":3,"line":719},"start":{"character":2,"line":703}}},{"codeRange":{"end":{"character":3,"line":727},"start":{"character":2,"line":722}},"element":{"kind":"METHOD","name":"_printUsage","parameters":"(ArgParser parser, {bool fromHelp = false})","range":{"end":{"character":18,"line":722},"start":{"character":7,"line":722}},"returnType":"void"},"range":{"end":{"character":3,"line":727},"start":{"character":2,"line":721}}},{"codeRange":{"end":{"character":3,"line":757},"start":{"character":2,"line":730}},"element":{"kind":"METHOD","name":"_readUuid","parameters":"(InstrumentationService service)","range":{"end":{"character":18,"line":730},"start":{"character":9,"line":730}},"returnType":"String"},"range":{"end":{"character":3,"line":757},"start":{"character":2,"line":729}}},{"codeRange":{"end":{"character":3,"line":980},"start":{"character":2,"line":760}},"element":{"kind":"METHOD","name":"createArgParser","parameters":"({int? usageLineLength, bool includeHelpFlag = true, bool defaultToLsp = false})","range":{"end":{"character":34,"line":760},"start":{"character":19,"line":760}},"returnType":"ArgParser"},"range":{"end":{"character":3,"line":980},"start":{"character":2,"line":759}}},{"codeRange":{"end":{"character":3,"line":997},"start":{"character":2,"line":987}},"element":{"kind":"METHOD","name":"_rollLogFiles","parameters":"(String path, int numOld)","range":{"end":{"character":27,"line":987},"start":{"character":14,"line":987}},"returnType":"void"},"range":{"end":{"character":3,"line":997},"start":{"character":2,"line":982}}}],"codeRange":{"end":{"character":1,"line":998},"start":{"character":0,"line":50}},"element":{"kind":"CLASS","name":"Driver","range":{"end":{"character":12,"line":50},"start":{"character":6,"line":50}}},"range":{"end":{"character":1,"line":998},"start":{"character":0,"line":47}}},{"children":[{"codeRange":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}},"element":{"kind":"FIELD","name":"httpServer","range":{"end":{"character":36,"line":1002},"start":{"character":26,"line":1002}},"returnType":"HttpAnalysisServer"},"range":{"end":{"character":37,"line":1002},"start":{"character":2,"line":1002}}},{"codeRange":{"end":{"character":71,"line":1005},"start":{"character":2,"line":1005}},"element":{"kind":"METHOD","name":"getServerPort","parameters":"()","range":{"end":{"character":27,"line":1005},"start":{"character":14,"line":1005}},"returnType":"Future<int>"},"range":{"end":{"character":71,"line":1005},"start":{"character":2,"line":1004}}},{"codeRange":{"end":{"character":3,"line":1009},"start":{"character":2,"line":1007}},"element":{"kind":"METHOD","name":"startOnPort","parameters":"(int port)","range":{"end":{"character":26,"line":1007},"start":{"character":15,"line":1007}},"returnType":"Future<void>"},"range":{"end":{"character":3,"line":1009},"start":{"character":2,"line":1007}}}],"codeRange":{"end":{"character":1,"line":1010},"start":{"character":0,"line":1001}},"element":{"kind":"CLASS","name":"_DiagnosticServerImpl","range":{"end":{"character":27,"line":1001},"start":{"character":6,"line":1001}}},"range":{"end":{"character":1,"line":1010},"start":{"character":0,"line":1000}}}],"codeRange":{"end":{"character":0,"line":1011},"start":{"character":0,"line":0}},"element":{"kind":"COMPILATION_UNIT","name":"<unit>","range":{"end":{"character":0,"line":1011},"start":{"character":0,"line":0}}},"range":{"end":{"character":0,"line":1011},"start":{"character":0,"line":0}}},"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart"}}},
+{"time":1763411775854,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5844,"method":"textDocument/foldingRange","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411775840}},
+{"time":1763411775854,"kind":"message","sender":"server","receiver":"ide","message":{"id":5844,"jsonrpc":"2.0","result":[{"endLine":2,"kind":"comment","startLine":0},{"endLine":8,"kind":"imports","startLine":4},{"endLine":13,"kind":"comment","startLine":10},{"endLine":34,"startLine":14},{"endLine":19,"kind":"comment","startLine":18},{"endLine":22,"startLine":20},{"endLine":22,"startLine":21},{"endLine":25,"kind":"comment","startLine":24},{"endLine":33,"startLine":29},{"endLine":33,"startLine":30}]}},
+{"time":1763411775889,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5845,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":14,"character":29},"end":{"line":14,"character":29}},"context":{"diagnostics":[],"triggerKind":2}},"clientRequestTime":1763411775873}},
+{"time":1763411775897,"kind":"message","sender":"server","receiver":"ide","message":{"id":5845,"jsonrpc":"2.0","result":[{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.sortMembers","title":"Sort Members"},"kind":"source.sortMembers","title":"Sort Members"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.organizeImports","title":"Organize Imports"},"kind":"source.organizeImports","title":"Organize Imports"},{"command":{"arguments":[{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","autoTriggered":true}],"command":"dart.edit.fixAll","title":"Fix All"},"kind":"source.fixAll","title":"Fix All"},{"command":{"arguments":[{"filePath":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","selectionOffset":700,"selectionLength":0,"arguments":["file://{{workspaceFolder-0}}pkg/analysis_server/lib/server_starter2.dart"]}],"command":"dart.refactor.move_top_level_to_file","title":"Move 'ServerStarter2' to file"},"data":{"parameters":[{"actionLabel":"Move","defaultValue":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/server_starter2.dart","filters":{"Dart":["dart"]},"kind":"saveUri","parameterLabel":"Move to:","parameterTitle":"Select a file to move to"}]},"kind":"refactor.move","title":"Move 'ServerStarter2' to file"}]}},
+{"time":1763411775992,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5846,"method":"textDocument/semanticTokens/full","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411775928}},
+{"time":1763411775992,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5847,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411775974}},
+{"time":1763411775992,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5848,"method":"textDocument/documentSymbol","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411775974}},
+{"time":1763411775993,"kind":"message","sender":"server","receiver":"ide","message":{"id":5847,"jsonrpc":"2.0","result":[{"children":[{"deprecated":false,"detail":"()","kind":9,"name":"ServerStarter2","range":{"end":{"character":36,"line":16},"start":{"character":2,"line":16}},"selectionRange":{"end":{"character":24,"line":16},"start":{"character":10,"line":16}}},{"deprecated":false,"detail":"(CrashReportingAttachmentsBuilder builder)","kind":7,"name":"crashReportingAttachmentsBuilder","range":{"end":{"character":4,"line":22},"start":{"character":2,"line":20}},"selectionRange":{"end":{"character":38,"line":20},"start":{"character":6,"line":20}}},{"deprecated":false,"detail":"(DetachableFileSystemManager manager)","kind":7,"name":"detachableFileSystemManager","range":{"end":{"character":71,"line":26},"start":{"character":2,"line":26}},"selectionRange":{"end":{"character":33,"line":26},"start":{"character":6,"line":26}}},{"deprecated":false,"detail":"(List<String> arguments, {SendPort sendPort, bool defaultToLsp = false})","kind":6,"name":"start","range":{"end":{"character":5,"line":33},"start":{"character":2,"line":29}},"selectionRange":{"end":{"character":12,"line":29},"start":{"character":7,"line":29}}}],"deprecated":false,"kind":5,"name":"ServerStarter2","range":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"selectionRange":{"end":{"character":29,"line":14},"start":{"character":15,"line":14}}}]}},
+{"time":1763411775993,"kind":"message","sender":"server","receiver":"ide","message":{"id":5848,"jsonrpc":"2.0","result":[{"children":[{"deprecated":false,"detail":"()","kind":9,"name":"ServerStarter2","range":{"end":{"character":36,"line":16},"start":{"character":2,"line":16}},"selectionRange":{"end":{"character":24,"line":16},"start":{"character":10,"line":16}}},{"deprecated":false,"detail":"(CrashReportingAttachmentsBuilder builder)","kind":7,"name":"crashReportingAttachmentsBuilder","range":{"end":{"character":4,"line":22},"start":{"character":2,"line":20}},"selectionRange":{"end":{"character":38,"line":20},"start":{"character":6,"line":20}}},{"deprecated":false,"detail":"(DetachableFileSystemManager manager)","kind":7,"name":"detachableFileSystemManager","range":{"end":{"character":71,"line":26},"start":{"character":2,"line":26}},"selectionRange":{"end":{"character":33,"line":26},"start":{"character":6,"line":26}}},{"deprecated":false,"detail":"(List<String> arguments, {SendPort sendPort, bool defaultToLsp = false})","kind":6,"name":"start","range":{"end":{"character":5,"line":33},"start":{"character":2,"line":29}},"selectionRange":{"end":{"character":12,"line":29},"start":{"character":7,"line":29}}}],"deprecated":false,"kind":5,"name":"ServerStarter2","range":{"end":{"character":1,"line":34},"start":{"character":0,"line":14}},"selectionRange":{"end":{"character":29,"line":14},"start":{"character":15,"line":14}}}]}},
+{"time":1763411775993,"kind":"message","sender":"server","receiver":"ide","message":{"id":5846,"jsonrpc":"2.0","result":{"data":[0,0,76,3,0,1,0,77,3,0,1,0,59,3,0,2,0,6,1,0,0,7,14,16,0,2,0,6,1,0,0,7,69,16,0,1,0,6,1,0,0,7,71,16,0,1,0,6,1,0,0,7,48,16,0,2,0,80,3,1,1,0,69,3,1,1,0,3,3,1,1,0,59,3,1,1,0,8,1,0,0,9,5,1,0,0,6,14,2,4,1,2,70,3,1,1,2,7,1,0,0,8,14,2,6,0,19,6,2,0,2,2,74,3,1,1,2,12,3,1,1,2,3,1,0,0,4,32,11,20,1,4,32,2,0,0,33,7,6,4,3,2,70,3,1,1,2,14,3,1,1,2,3,1,0,0,4,27,11,20,0,28,27,2,0,0,28,7,6,4,2,2,32,3,1,0,32,9,6,0,0,9,23,3,1,1,2,4,1,2048,0,5,5,4,20,1,4,4,2,0,0,5,6,2,0,0,8,9,6,4,1,4,8,2,0,0,9,8,6,4,1,4,4,2,0,0,5,12,6,4,0,15,5,14,0]}}},
+{"time":1763411775993,"kind":"message","sender":"watcher","receiver":"server","message":{"path":"{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart","type":"modify"}},
+{"time":1763411775993,"kind":"message","sender":"watcher","receiver":"server","message":{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","type":"modify"}},
+{"time":1763411775993,"kind":"message","sender":"watcher","receiver":"server","message":{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","type":"modify"}},
+{"time":1763411775993,"kind":"message","sender":"watcher","receiver":"server","message":{"path":"{{workspaceFolder-0}}pkg/analysis_server/bin/server.dart","type":"modify"}},
+{"time":1763411775993,"kind":"message","sender":"watcher","receiver":"server","message":{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart","type":"modify"}},
+{"time":1763411775993,"kind":"message","sender":"watcher","receiver":"server","message":{"path":"{{workspaceFolder-0}}pkg/analysis_server/lib/src/server/driver.dart","type":"modify"}},
+{"time":1763411776392,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5849,"method":"textDocument/codeLens","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411776386}},
+{"time":1763411776393,"kind":"message","sender":"server","receiver":"ide","message":{"id":5849,"jsonrpc":"2.0","result":[]}},
+{"time":1763411776423,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5850,"method":"textDocument/inlayHint","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"},"range":{"start":{"line":0,"character":0},"end":{"line":35,"character":0}}},"clientRequestTime":1763411776421}},
+{"time":1763411776423,"kind":"message","sender":"server","receiver":"ide","message":{"id":5850,"jsonrpc":"2.0","result":[{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":6,"line":20}},{"kind":1,"label":[{"value":"void"}],"paddingRight":true,"position":{"character":6,"line":26}}]}},
+{"time":1763411776640,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5851,"method":"textDocument/documentLink","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411776637}},
+{"time":1763411776640,"kind":"message","sender":"ide","receiver":"server","message":{"jsonrpc":"2.0","id":5852,"method":"textDocument/documentColor","params":{"textDocument":{"uri":"file://{{workspaceFolder-0}}pkg/analysis_server/lib/starter.dart"}},"clientRequestTime":1763411776638}},
+{"time":1763411776665,"kind":"message","sender":"server","receiver":"ide","message":{"id":5852,"jsonrpc":"2.0","result":[]}},
+{"time":1763411776665,"kind":"message","sender":"server","receiver":"ide","message":{"id":5851,"jsonrpc":"2.0","result":[]}},
+{"time":1763411778176,"kind":"message","sender":"server","receiver":"ide","message":{"jsonrpc":"2.0","method":"$/progress","params":{"token":"ANALYZING","value":{"kind":"end"}}}},
diff --git a/pkg/analysis_server/tool/performance/scenarios/run_saved_scenarios.dart b/pkg/analysis_server/tool/performance/scenarios/run_saved_scenarios.dart
new file mode 100644
index 0000000..1875ad7
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/scenarios/run_saved_scenarios.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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;
+import 'dart:isolate';
+
+import 'package:analyzer/file_system/physical_file_system.dart';
+
+import '../project_generator/git_clone_project_generator.dart';
+import '../project_generator/git_worktree_project_generator.dart';
+import 'scenario.dart';
+
+void main() async {
+  for (var scenario in await scenarios()) {
+    await scenario.run();
+  }
+}
+
+final analysisServerRoot = Isolate.resolvePackageUriSync(
+  Uri.parse('package:analysis_server/'),
+)!;
+
+final logsRoot = analysisServerRoot.resolve(
+  '../tool/performance/scenarios/logs/',
+);
+
+final sdkRoot = analysisServerRoot.resolve('../../');
+
+Future<List<Scenario>> scenarios() async {
+  var fileSystem = PhysicalResourceProvider.INSTANCE;
+  return [
+    Scenario(
+      logFile: fileSystem.getFile(
+        logsRoot.resolve('sdk_rename_driver_class.json').toFilePath(),
+      ),
+      project: GitWorktreeProjectGenerator(Directory.fromUri(sdkRoot), 'main'),
+    ),
+    Scenario(
+      logFile: fileSystem.getFile(
+        logsRoot.resolve('initialize.json').toFilePath(),
+      ),
+      project: GitCloneProjectGenerator(
+        'https://github.com/dart-lang/tools',
+        'main',
+      ),
+    ),
+  ];
+}
diff --git a/pkg/analysis_server/tool/performance/scenarios/scenario.dart b/pkg/analysis_server/tool/performance/scenarios/scenario.dart
new file mode 100644
index 0000000..a9c44f3
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/scenarios/scenario.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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:analyzer/file_system/file_system.dart';
+import 'package:path/path.dart' as p;
+
+import '../../log_player/log.dart';
+import '../../log_player/log_player.dart';
+import '../project_generator/project_generator.dart';
+
+final dartSdkRoot = p.dirname(p.dirname(Platform.resolvedExecutable));
+
+/// A [Scenario] represents a combination of a [project] and a [logFile] to
+/// replay in that project.
+class Scenario {
+  final File logFile;
+  final ProjectGenerator project;
+
+  Scenario({required this.logFile, required this.project});
+
+  Future<void> run() async {
+    var watch = Stopwatch()..start();
+    void log(String message) {
+      print('${watch.elapsed}: $message');
+    }
+
+    log('Initializing scenario for project: ${project.description}');
+
+    log('Setting up project');
+    var projectDirs = await project.setUp();
+
+    log('Reading logs');
+    var logs = Log.fromFile(logFile, {
+      for (var i = 0; i < projectDirs.length; i++)
+        '{{workspaceFolder-$i}}': projectDirs.elementAt(i).path,
+      '{{dartSdkRoot}}': dartSdkRoot,
+    });
+
+    log('Creating log player');
+    var logPlayer = LogPlayer(log: logs);
+
+    log(
+      'Scenario initialized with workpace dirs:\n'
+      '${projectDirs.map((dir) => '  - ${dir.path}').join('\n')}',
+    );
+    try {
+      var scenarioWatch = Stopwatch()..start();
+      log('Replaying scenario');
+      await logPlayer.play();
+      log('Scenario completed, took ${scenarioWatch.elapsed} to replay');
+    } catch (e, s) {
+      print('''
+Scenario failed with Error: $e
+
+StackTrace:
+$s
+''');
+    } finally {
+      log('Tearing down scenario for project');
+      await project.tearDown(projectDirs);
+      log('Scenario cleaned up');
+    }
+  }
+}
diff --git a/pkg/analysis_server/tool/performance/utilities/analysis_tester.dart b/pkg/analysis_server/tool/performance/utilities/analysis_tester.dart
index 2b961bf..9220878 100644
--- a/pkg/analysis_server/tool/performance/utilities/analysis_tester.dart
+++ b/pkg/analysis_server/tool/performance/utilities/analysis_tester.dart
@@ -115,6 +115,7 @@
       includedPaths: packagePaths.toList(),
       scheduler: scheduler,
       performanceLog: log,
+      withFineDependencies: true,
     );
     for (var context in collection.contexts) {
       var contextRoot = context.contextRoot;
diff --git a/pkg/analysis_server/tool/performance/utilities/code_generator.dart b/pkg/analysis_server/tool/performance/utilities/code_generator.dart
index f01b355..a9698ed 100644
--- a/pkg/analysis_server/tool/performance/utilities/code_generator.dart
+++ b/pkg/analysis_server/tool/performance/utilities/code_generator.dart
@@ -4,6 +4,10 @@
 
 /// Returns the content of a file containing [classCount] classes.
 ///
+/// If [exports] are provided, the file will contain one export directive for
+/// each element. The elements should be the text of the URI without enclosing
+/// quotes.
+///
 /// If [imports] are provided, the file will contain one import directive for
 /// each element. The elements should be the text of the URI without enclosing
 /// quotes.
@@ -22,6 +26,7 @@
 /// quotes.
 String createFileContent({
   int classCount = CodeGenerator.classCount,
+  List<String> exports = const [],
   List<String> imports = const [],
   String? libraryName,
   String? partOf,
@@ -30,6 +35,7 @@
   var generator = CodeGenerator();
   generator.writeClasses(
     classCount: classCount,
+    exports: exports,
     imports: imports,
     libraryName: libraryName,
     partOf: partOf,
@@ -76,12 +82,15 @@
 
   /// Generate [classCount] classes with synthetic names.
   ///
-  /// The file will have one part directive for each of the unquoted URI's in [imports].
+  /// The file will have one export for each of the unquoted URI's in [exports].
+  ///
+  /// The file will have one part directive for each of the unquoted URI's in [parts].
   ///
   /// The file will have one import for each of the unquoted URI's in [imports].
   /// For example, to import `dart:async`, include `'dart:async'` in the list.
   void writeClasses({
     required int classCount,
+    List<String> exports = const [],
     List<String> imports = const [],
     String? libraryName,
     String? partOf,
@@ -103,18 +112,24 @@
       }
       buffer.writeln();
     }
-    for (var part in parts) {
-      buffer.writeln("part '$part';");
-    }
-    if (parts.isNotEmpty) {
-      buffer.writeln();
-    }
     for (var import in imports) {
       buffer.writeln("import '$import';");
     }
     if (imports.isNotEmpty) {
       buffer.writeln();
     }
+    for (var export in exports) {
+      buffer.writeln("export '$export';");
+    }
+    if (exports.isNotEmpty) {
+      buffer.writeln();
+    }
+    for (var part in parts) {
+      buffer.writeln("part '$part';");
+    }
+    if (parts.isNotEmpty) {
+      buffer.writeln();
+    }
     for (int i = 0; i < classCount; i++) {
       writeClass(name: 'C$i');
     }
diff --git a/pkg/analysis_server/tool/performance/utilities/git.dart b/pkg/analysis_server/tool/performance/utilities/git.dart
new file mode 100644
index 0000000..c1755f3
--- /dev/null
+++ b/pkg/analysis_server/tool/performance/utilities/git.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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';
+
+/// Runs `git` with [args] in the specified [workingDirectory].
+///
+/// Throws a [StateError] if it has a non-zero exit code.
+Future<void> runGitCommand(
+  List<String> args,
+  Directory workingDirectory,
+) async {
+  var result = await Process.run(
+    'git',
+    args,
+    workingDirectory: workingDirectory.path,
+  );
+  if (result.exitCode != 0) {
+    throw StateError('''
+Error running `git ${args.join(' ')}`:
+
+Stderr:
+${result.stderr}
+
+Stdout:
+${result.stdout}''');
+  }
+}
diff --git a/pkg/analysis_server/tool/presubmit/verify_error_fix_status.dart b/pkg/analysis_server/tool/presubmit/verify_error_fix_status.dart
index 6b893e3..cb2e22d 100644
--- a/pkg/analysis_server/tool/presubmit/verify_error_fix_status.dart
+++ b/pkg/analysis_server/tool/presubmit/verify_error_fix_status.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer_testing/package_root.dart' as package_root;
+import 'package:analyzer_utilities/located_error.dart';
 import 'package:linter/src/rules.dart';
 import 'package:yaml/yaml.dart';
 
@@ -44,11 +45,12 @@
 /// string describing how the file is out-of-date, or `null` if the file is
 /// up-to-date.
 String? verifyErrorFixStatus() {
-  var (error, statusInfo) = _statusInfo();
-  if (error != null) {
-    return error;
+  YamlMap statusInfo;
+  try {
+    statusInfo = _statusInfo();
+  } catch (e) {
+    return e.toString();
   }
-  statusInfo!; // This is non-null when `error` is `null`.
   registerLintRules();
   registerBuiltInFixGenerators();
   var lintRuleCodes = {
@@ -59,7 +61,7 @@
   var errorData = ErrorData();
   for (var code in diagnosticCodeValues) {
     var name = code.uniqueName;
-    if (name.startsWith('TodoCode.')) {
+    if (code.type == .TODO) {
       // To-do codes are ignored.
       continue;
     }
@@ -118,14 +120,36 @@
 
 /// Returns the content of the file containing the status information, parsed
 /// as a YAML map.
-(String? error, YamlMap? info) _statusInfo() {
+YamlMap _statusInfo() {
   var statusFile = _resourceProvider.getFile(statusFilePath());
-  var document = loadYamlDocument(statusFile.readAsStringSync());
+  var document = loadYamlDocument(
+    statusFile.readAsStringSync(),
+    sourceUrl: Uri.file(statusFile.path),
+  );
   var statusInfo = document.contents;
   if (statusInfo is! YamlMap) {
-    return ('Expected a YamlMap, found ${statusInfo.runtimeType}', null);
+    throw LocatedError(
+      'Expected a YamlMap, found ${statusInfo.runtimeType}',
+      span: statusInfo.span,
+    );
   }
-  return (null, statusInfo);
+  for (var value in statusInfo.nodes.values) {
+    if (value is! YamlMap) {
+      throw LocatedError('Expected a map', span: value.span);
+    }
+    switch (value.nodes['status']) {
+      case null:
+        throw LocatedError('A status entry is required', span: value.span);
+      case YamlScalar(
+        value: 'hasFix' || 'needsEvaluation' || 'needsFix' || 'noFix',
+      ):
+        // ok
+        break;
+      case var statusNode:
+        throw LocatedError('Invalid status', span: statusNode.span);
+    }
+  }
+  return statusInfo;
 }
 
 class ErrorData {
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index 30d54d4..70593c8 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -559,30 +559,17 @@
       writeln('=> other is $className;');
       return;
     }
-    writeln('{');
+    writeln('=> ');
     indent(() {
-      writeln('if (other is $className) {');
-      indent(() {
-        var comparisons = <String>[];
-        for (var field in type.fields) {
-          if (field.value != null) {
-            continue;
-          }
-          comparisons.add(
+      var comparisons = [
+        'other is $className',
+        for (var field in type.fields)
+          if (field.value == null)
             compareEqualsCode(field.type, field.name, 'other.${field.name}'),
-          );
-        }
-        if (comparisons.isEmpty) {
-          writeln('return true;');
-        } else {
-          var concatenated = comparisons.join(' &&\n    ');
-          writeln('return $concatenated;');
-        }
-      });
-      writeln('}');
-      writeln('return false;');
+      ];
+      var concatenated = comparisons.join(' &&\n    ');
+      writeln('$concatenated;');
     });
-    writeln('}');
   }
 
   /// Emit the method for decoding an object from JSON.
diff --git a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
index 20535f6..7224c0a 100644
--- a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
+++ b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
@@ -24,31 +24,32 @@
   },
 );
 
+final _upperCaseLettersPattern = RegExp('[A-Z]');
+
 /// Generate a name from the [domainName], [kind] and [name] components.
 String generateConstName(String domainName, String kind, String name) {
-  var components = <String>[];
-  components.addAll(_split(domainName));
-  components.add(kind);
-  components.addAll(_split(name));
-  return _fromComponents(components);
+  return _fromComponents([..._split(domainName), kind, ..._split(name)]);
 }
 
-/// Return a name generated by converting each of the given [components] to an
+/// Returns a name generated by converting each of the given [components] to an
 /// uppercase equivalent, then joining them with underscores.
-String _fromComponents(List<String> components) =>
-    components.map((String component) => component.toUpperCase()).join('_');
+String _fromComponents(List<String> components) {
+  var joinedName = components
+      .map((s) => '${s[0].toUpperCase()}${s.substring(1)}')
+      .join();
+  return '${joinedName[0].toLowerCase()}${joinedName.substring(1)}';
+}
 
 /// Returns the components of the given String that are indicated by an upper
 /// case letter.
 Iterable<String> _split(String first) {
-  var regExp = RegExp('[A-Z]');
   var components = <String>[];
   var start = 1;
-  var index = first.indexOf(regExp, start);
+  var index = first.indexOf(_upperCaseLettersPattern, start);
   while (index >= 0) {
     components.add(first.substring(start - 1, index));
     start = index + 1;
-    index = first.indexOf(regExp, start);
+    index = first.indexOf(_upperCaseLettersPattern, start);
   }
   components.add(first.substring(start - 1));
   return components;
@@ -151,10 +152,7 @@
     }
     for (var field in type.fields) {
       var name = field.name;
-      var components = <String>[];
-      components.add(parentName);
-      components.addAll(_split(name));
-      var fieldConstantName = _fromComponents(components);
+      var fieldConstantName = _fromComponents([parentName, ..._split(name)]);
       constants.add(_Constant(fieldConstantName, "'$name'"));
     }
   }
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 b4fb7ac..0ac486a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Element.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
@@ -96,9 +96,16 @@
   private final String aliasedType;
 
   /**
+   * If the element is an extension, this field is the name of the type that is extended. This can be
+   * useful to show in UIs for unnamed extension, for example "extension on {extendedType}". This
+   * field might not be defined even for an extension in the case of invalid code.
+   */
+  private final String extendedType;
+
+  /**
    * Constructor for {@link Element}.
    */
-  public Element(String kind, String name, Location location, int flags, String parameters, String returnType, String typeParameters, String aliasedType) {
+  public Element(String kind, String name, Location location, int flags, String parameters, String returnType, String typeParameters, String aliasedType, String extendedType) {
     this.kind = kind;
     this.name = name;
     this.location = location;
@@ -107,6 +114,7 @@
     this.returnType = returnType;
     this.typeParameters = typeParameters;
     this.aliasedType = aliasedType;
+    this.extendedType = extendedType;
   }
 
   @Override
@@ -120,7 +128,8 @@
         Objects.equals(other.parameters, parameters) &&
         Objects.equals(other.returnType, returnType) &&
         Objects.equals(other.typeParameters, typeParameters) &&
-        Objects.equals(other.aliasedType, aliasedType);
+        Objects.equals(other.aliasedType, aliasedType) &&
+        Objects.equals(other.extendedType, extendedType);
     }
     return false;
   }
@@ -134,7 +143,8 @@
     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();
-    return new Element(kind, name, location, flags, parameters, returnType, typeParameters, aliasedType);
+    String extendedType = jsonObject.get("extendedType") == null ? null : jsonObject.get("extendedType").getAsString();
+    return new Element(kind, name, location, flags, parameters, returnType, typeParameters, aliasedType, extendedType);
   }
 
   public static List<Element> fromJsonArray(JsonArray jsonArray) {
@@ -157,6 +167,15 @@
   }
 
   /**
+   * If the element is an extension, this field is the name of the type that is extended. This can be
+   * useful to show in UIs for unnamed extension, for example "extension on {extendedType}". This
+   * field might not be defined even for an extension in the case of invalid code.
+   */
+  public String getExtendedType() {
+    return extendedType;
+  }
+
+  /**
    * A bit-map containing the following flags:
    *
    * - 0x01 - set if the element is explicitly or implicitly abstract
@@ -227,7 +246,8 @@
       parameters,
       returnType,
       typeParameters,
-      aliasedType
+      aliasedType,
+      extendedType
     );
   }
 
@@ -275,6 +295,9 @@
     if (aliasedType != null) {
       jsonObject.addProperty("aliasedType", aliasedType);
     }
+    if (extendedType != null) {
+      jsonObject.addProperty("extendedType", extendedType);
+    }
     return jsonObject;
   }
 
@@ -305,6 +328,9 @@
     builder.append(", ");
     builder.append("aliasedType=");
     builder.append(aliasedType);
+    builder.append(", ");
+    builder.append("extendedType=");
+    builder.append(extendedType);
     builder.append("]");
     return builder.toString();
   }
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 47dc4f8..200b808 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.40.0</version>
+  <version>1.40.1</version>
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -142,6 +142,10 @@
   ignoring the item or treating it with some default/fallback handling.
 </p>
 <h3>Changelog</h3>
+<h4>1.40.1</h4>
+<ul>
+  <li>Added an optional <tt>extendedType</tt> field to <tt>Element</tt> to store the name of the type that extensions apply to that can be used to improve the display names for unnamed extensions.</li>
+</ul>
 <h4>1.40.0</h4>
 <ul>
   <li>Added an optional <tt>version</tt> field to <tt>AddContentOverlay</tt> and <tt>ChangeContentOverlay</tt> to allow clients/servers to have a way to identify specific versions of documents.</li>
diff --git a/pkg/analysis_server_client/example/example.dart b/pkg/analysis_server_client/example/example.dart
index 9790d78..f9f393e 100644
--- a/pkg/analysis_server_client/example/example.dart
+++ b/pkg/analysis_server_client/example/example.dart
@@ -29,9 +29,9 @@
   }
 
   // Request analysis
-  await server.send(SERVER_REQUEST_SET_SUBSCRIPTIONS,
+  await server.send(serverRequestSetSubscriptions,
       ServerSetSubscriptionsParams([ServerService.STATUS]).toJson());
-  await server.send(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS,
+  await server.send(analysisRequestSetAnalysisRoots,
       AnalysisSetAnalysisRootsParams([target], const []).toJson());
 
   // Continue to watch for analysis until the user presses Ctrl-C
diff --git a/pkg/analysis_server_client/lib/handler/notification_handler.dart b/pkg/analysis_server_client/lib/handler/notification_handler.dart
index 1e2265e..21296ff 100644
--- a/pkg/analysis_server_client/lib/handler/notification_handler.dart
+++ b/pkg/analysis_server_client/lib/handler/notification_handler.dart
@@ -19,89 +19,89 @@
     var params = notification.params;
     var decoder = ResponseDecoder(null);
     switch (notification.event) {
-      case ANALYSIS_NOTIFICATION_ANALYZED_FILES:
+      case analysisNotificationAnalyzedFiles:
         onAnalysisAnalyzedFiles(
             AnalysisAnalyzedFilesParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_CLOSING_LABELS:
+      case analysisNotificationClosingLabels:
         onAnalysisClosingLabels(
             AnalysisClosingLabelsParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_ERRORS:
+      case analysisNotificationErrors:
         onAnalysisErrors(
             AnalysisErrorsParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_FLUSH_RESULTS:
+      case analysisNotificationFlushResults:
         onAnalysisFlushResults(
             AnalysisFlushResultsParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_FOLDING:
+      case analysisNotificationFolding:
         onAnalysisFolding(
             AnalysisFoldingParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_HIGHLIGHTS:
+      case analysisNotificationHighlights:
         onAnalysisHighlights(
             AnalysisHighlightsParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_IMPLEMENTED:
+      case analysisNotificationImplemented:
         onAnalysisImplemented(
             AnalysisImplementedParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_INVALIDATE:
+      case analysisNotificationInvalidate:
         onAnalysisInvalidate(
             AnalysisInvalidateParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_NAVIGATION:
+      case analysisNotificationNavigation:
         onAnalysisNavigation(
             AnalysisNavigationParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_OCCURRENCES:
+      case analysisNotificationOccurrences:
         onAnalysisOccurrences(
             AnalysisOccurrencesParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_OUTLINE:
+      case analysisNotificationOutline:
         onAnalysisOutline(
             AnalysisOutlineParams.fromJson(decoder, 'params', params));
         break;
-      case ANALYSIS_NOTIFICATION_OVERRIDES:
+      case analysisNotificationOverrides:
         onAnalysisOverrides(
             AnalysisOverridesParams.fromJson(decoder, 'params', params));
         break;
-      case COMPLETION_NOTIFICATION_EXISTING_IMPORTS:
+      case completionNotificationExistingImports:
         onCompletionExistingImports(CompletionExistingImportsParams.fromJson(
             decoder, 'params', params));
         break;
-      case EXECUTION_NOTIFICATION_LAUNCH_DATA:
+      case executionNotificationLaunchData:
         onExecutionLaunchData(
             ExecutionLaunchDataParams.fromJson(decoder, 'params', params));
         break;
-      case FLUTTER_NOTIFICATION_OUTLINE:
+      case flutterNotificationOutline:
         onFlutterOutline(
             FlutterOutlineParams.fromJson(decoder, 'params', params));
         break;
-      case LSP_NOTIFICATION_NOTIFICATION:
+      case lspNotificationNotification:
         onLspNotification(
             LspNotificationParams.fromJson(decoder, 'params', params));
         break;
-      case SEARCH_NOTIFICATION_RESULTS:
+      case searchNotificationResults:
         onSearchResults(
             SearchResultsParams.fromJson(decoder, 'params', params));
         break;
-      case SERVER_NOTIFICATION_CONNECTED:
+      case serverNotificationConnected:
         onServerConnected(
             ServerConnectedParams.fromJson(decoder, 'params', params));
         break;
-      case SERVER_NOTIFICATION_ERROR:
+      case serverNotificationError:
         onServerError(ServerErrorParams.fromJson(decoder, 'params', params));
         break;
-      case SERVER_NOTIFICATION_LOG:
+      case serverNotificationLog:
         onServerLog(ServerLogParams.fromJson(decoder, 'params', params));
         break;
-      case SERVER_NOTIFICATION_PLUGIN_ERROR:
+      case serverNotificationPluginError:
         onServerPluginError(
             ServerPluginErrorParams.fromJson(decoder, 'params', params));
         break;
-      case SERVER_NOTIFICATION_STATUS:
+      case serverNotificationStatus:
         onServerStatus(ServerStatusParams.fromJson(decoder, 'params', params));
         break;
       default:
diff --git a/pkg/analysis_server_client/lib/server.dart b/pkg/analysis_server_client/lib/server.dart
index 90cb42d..2a78b08 100644
--- a/pkg/analysis_server_client/lib/server.dart
+++ b/pkg/analysis_server_client/lib/server.dart
@@ -173,7 +173,7 @@
       return -1;
     }
 
-    final future = send(SERVER_REQUEST_SHUTDOWN, null);
+    final future = send(serverRequestShutdown, null);
     _process = null;
     await future
         // fall through to wait for exit
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 576d021..50ddba4 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_common.dart
@@ -1182,6 +1182,7 @@
 ///       "returnType": optional String
 ///       "typeParameters": optional String
 ///       "aliasedType": optional String
+///       "extendedType": optional String
 ///     }
 ///
 /// Clients may not extend, implement or mix-in this class.
@@ -1250,12 +1251,19 @@
   /// this field will not be defined.
   String? aliasedType;
 
+  /// If the element is an extension, this field is the name of the type that
+  /// is extended. This can be useful to show in UIs for unnamed extension, for
+  /// example "extension on {extendedType}". This field might not be defined
+  /// even for an extension in the case of invalid code.
+  String? extendedType;
+
   Element(this.kind, this.name, this.flags,
       {this.location,
       this.parameters,
       this.returnType,
       this.typeParameters,
-      this.aliasedType});
+      this.aliasedType,
+      this.extendedType});
 
   factory Element.fromJson(
       JsonDecoder jsonDecoder, String jsonPath, Object? json) {
@@ -1305,12 +1313,18 @@
         aliasedType = jsonDecoder.decodeString(
             '$jsonPath.aliasedType', json['aliasedType']);
       }
+      String? extendedType;
+      if (json.containsKey('extendedType')) {
+        extendedType = jsonDecoder.decodeString(
+            '$jsonPath.extendedType', json['extendedType']);
+      }
       return Element(kind, name, flags,
           location: location,
           parameters: parameters,
           returnType: returnType,
           typeParameters: typeParameters,
-          aliasedType: aliasedType);
+          aliasedType: aliasedType,
+          extendedType: extendedType);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "'Element'", json);
     }
@@ -1349,6 +1363,10 @@
     if (aliasedType != null) {
       result['aliasedType'] = aliasedType;
     }
+    var extendedType = this.extendedType;
+    if (extendedType != null) {
+      result['extendedType'] = extendedType;
+    }
     return result;
   }
 
@@ -1365,7 +1383,8 @@
           parameters == other.parameters &&
           returnType == other.returnType &&
           typeParameters == other.typeParameters &&
-          aliasedType == other.aliasedType;
+          aliasedType == other.aliasedType &&
+          extendedType == other.extendedType;
     }
     return false;
   }
@@ -1380,6 +1399,7 @@
         returnType,
         typeParameters,
         aliasedType,
+        extendedType,
       );
 }
 
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 075a895..f8ff84e 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
@@ -6,348 +6,334 @@
 // To regenerate the file, use the script
 // "pkg/analysis_server/tool/spec/generate_files".
 
-const String PROTOCOL_VERSION = '1.40.0';
+const String PROTOCOL_VERSION = '1.40.1';
 
-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES = 'analysis.analyzedFiles';
-const String ANALYSIS_NOTIFICATION_ANALYZED_FILES_DIRECTORIES = 'directories';
-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS = 'analysis.closingLabels';
-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_CLOSING_LABELS_LABELS = 'labels';
-const String ANALYSIS_NOTIFICATION_ERRORS = 'analysis.errors';
-const String ANALYSIS_NOTIFICATION_ERRORS_ERRORS = 'errors';
-const String ANALYSIS_NOTIFICATION_ERRORS_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS = 'analysis.flushResults';
-const String ANALYSIS_NOTIFICATION_FLUSH_RESULTS_FILES = 'files';
-const String ANALYSIS_NOTIFICATION_FOLDING = 'analysis.folding';
-const String ANALYSIS_NOTIFICATION_FOLDING_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_FOLDING_REGIONS = 'regions';
-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS = 'analysis.highlights';
-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_HIGHLIGHTS_REGIONS = 'regions';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED = 'analysis.implemented';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_CLASSES = 'classes';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_IMPLEMENTED_MEMBERS = 'members';
-const String ANALYSIS_NOTIFICATION_INVALIDATE = 'analysis.invalidate';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_DELTA = 'delta';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_LENGTH = 'length';
-const String ANALYSIS_NOTIFICATION_INVALIDATE_OFFSET = 'offset';
-const String ANALYSIS_NOTIFICATION_NAVIGATION = 'analysis.navigation';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_FILES = 'files';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_REGIONS = 'regions';
-const String ANALYSIS_NOTIFICATION_NAVIGATION_TARGETS = 'targets';
-const String ANALYSIS_NOTIFICATION_OCCURRENCES = 'analysis.occurrences';
-const String ANALYSIS_NOTIFICATION_OCCURRENCES_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_OCCURRENCES_OCCURRENCES = 'occurrences';
-const String ANALYSIS_NOTIFICATION_OUTLINE = 'analysis.outline';
-const String ANALYSIS_NOTIFICATION_OUTLINE_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_OUTLINE_KIND = 'kind';
-const String ANALYSIS_NOTIFICATION_OUTLINE_LIBRARY_NAME = 'libraryName';
-const String ANALYSIS_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
-const String ANALYSIS_NOTIFICATION_OVERRIDES = 'analysis.overrides';
-const String ANALYSIS_NOTIFICATION_OVERRIDES_FILE = 'file';
-const String ANALYSIS_NOTIFICATION_OVERRIDES_OVERRIDES = 'overrides';
-const String ANALYSIS_REQUEST_GET_ERRORS = 'analysis.getErrors';
-const String ANALYSIS_REQUEST_GET_ERRORS_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_HOVER = 'analysis.getHover';
-const String ANALYSIS_REQUEST_GET_HOVER_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_HOVER_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS =
+const String analysisNotificationAnalyzedFiles = 'analysis.analyzedFiles';
+const String analysisNotificationAnalyzedFilesDirectories = 'directories';
+const String analysisNotificationClosingLabels = 'analysis.closingLabels';
+const String analysisNotificationClosingLabelsFile = 'file';
+const String analysisNotificationClosingLabelsLabels = 'labels';
+const String analysisNotificationErrors = 'analysis.errors';
+const String analysisNotificationErrorsErrors = 'errors';
+const String analysisNotificationErrorsFile = 'file';
+const String analysisNotificationFlushResults = 'analysis.flushResults';
+const String analysisNotificationFlushResultsFiles = 'files';
+const String analysisNotificationFolding = 'analysis.folding';
+const String analysisNotificationFoldingFile = 'file';
+const String analysisNotificationFoldingRegions = 'regions';
+const String analysisNotificationHighlights = 'analysis.highlights';
+const String analysisNotificationHighlightsFile = 'file';
+const String analysisNotificationHighlightsRegions = 'regions';
+const String analysisNotificationImplemented = 'analysis.implemented';
+const String analysisNotificationImplementedClasses = 'classes';
+const String analysisNotificationImplementedFile = 'file';
+const String analysisNotificationImplementedMembers = 'members';
+const String analysisNotificationInvalidate = 'analysis.invalidate';
+const String analysisNotificationInvalidateDelta = 'delta';
+const String analysisNotificationInvalidateFile = 'file';
+const String analysisNotificationInvalidateLength = 'length';
+const String analysisNotificationInvalidateOffset = 'offset';
+const String analysisNotificationNavigation = 'analysis.navigation';
+const String analysisNotificationNavigationFile = 'file';
+const String analysisNotificationNavigationFiles = 'files';
+const String analysisNotificationNavigationRegions = 'regions';
+const String analysisNotificationNavigationTargets = 'targets';
+const String analysisNotificationOccurrences = 'analysis.occurrences';
+const String analysisNotificationOccurrencesFile = 'file';
+const String analysisNotificationOccurrencesOccurrences = 'occurrences';
+const String analysisNotificationOutline = 'analysis.outline';
+const String analysisNotificationOutlineFile = 'file';
+const String analysisNotificationOutlineKind = 'kind';
+const String analysisNotificationOutlineLibraryName = 'libraryName';
+const String analysisNotificationOutlineOutline = 'outline';
+const String analysisNotificationOverrides = 'analysis.overrides';
+const String analysisNotificationOverridesFile = 'file';
+const String analysisNotificationOverridesOverrides = 'overrides';
+const String analysisRequestGetErrors = 'analysis.getErrors';
+const String analysisRequestGetErrorsFile = 'file';
+const String analysisRequestGetHover = 'analysis.getHover';
+const String analysisRequestGetHoverFile = 'file';
+const String analysisRequestGetHoverOffset = 'offset';
+const String analysisRequestGetImportedElements =
     'analysis.getImportedElements';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_LENGTH = 'length';
-const String ANALYSIS_REQUEST_GET_IMPORTED_ELEMENTS_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES =
+const String analysisRequestGetImportedElementsFile = 'file';
+const String analysisRequestGetImportedElementsLength = 'length';
+const String analysisRequestGetImportedElementsOffset = 'offset';
+const String analysisRequestGetLibraryDependencies =
     'analysis.getLibraryDependencies';
-const String ANALYSIS_REQUEST_GET_NAVIGATION = 'analysis.getNavigation';
-const String ANALYSIS_REQUEST_GET_NAVIGATION_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_NAVIGATION_LENGTH = 'length';
-const String ANALYSIS_REQUEST_GET_NAVIGATION_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES =
+const String analysisRequestGetNavigation = 'analysis.getNavigation';
+const String analysisRequestGetNavigationFile = 'file';
+const String analysisRequestGetNavigationLength = 'length';
+const String analysisRequestGetNavigationOffset = 'offset';
+const String analysisRequestGetReachableSources =
     'analysis.getReachableSources';
-const String ANALYSIS_REQUEST_GET_REACHABLE_SOURCES_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_SIGNATURE = 'analysis.getSignature';
-const String ANALYSIS_REQUEST_GET_SIGNATURE_FILE = 'file';
-const String ANALYSIS_REQUEST_GET_SIGNATURE_OFFSET = 'offset';
-const String ANALYSIS_REQUEST_REANALYZE = 'analysis.reanalyze';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS = 'analysis.setAnalysisRoots';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_EXCLUDED = 'excluded';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_INCLUDED = 'included';
-const String ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS_PACKAGE_ROOTS = 'packageRoots';
-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS =
+const String analysisRequestGetReachableSourcesFile = 'file';
+const String analysisRequestGetSignature = 'analysis.getSignature';
+const String analysisRequestGetSignatureFile = 'file';
+const String analysisRequestGetSignatureOffset = 'offset';
+const String analysisRequestReanalyze = 'analysis.reanalyze';
+const String analysisRequestSetAnalysisRoots = 'analysis.setAnalysisRoots';
+const String analysisRequestSetAnalysisRootsExcluded = 'excluded';
+const String analysisRequestSetAnalysisRootsIncluded = 'included';
+const String analysisRequestSetAnalysisRootsPackageRoots = 'packageRoots';
+const String analysisRequestSetGeneralSubscriptions =
     'analysis.setGeneralSubscriptions';
-const String ANALYSIS_REQUEST_SET_GENERAL_SUBSCRIPTIONS_SUBSCRIPTIONS =
+const String analysisRequestSetGeneralSubscriptionsSubscriptions =
     'subscriptions';
-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES = 'analysis.setPriorityFiles';
-const String ANALYSIS_REQUEST_SET_PRIORITY_FILES_FILES = 'files';
-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS = 'analysis.setSubscriptions';
-const String ANALYSIS_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
-const String ANALYSIS_REQUEST_UPDATE_CONTENT = 'analysis.updateContent';
-const String ANALYSIS_REQUEST_UPDATE_CONTENT_FILES = 'files';
-const String ANALYSIS_REQUEST_UPDATE_OPTIONS = 'analysis.updateOptions';
-const String ANALYSIS_REQUEST_UPDATE_OPTIONS_OPTIONS = 'options';
-const String ANALYSIS_RESPONSE_GET_ERRORS_ERRORS = 'errors';
-const String ANALYSIS_RESPONSE_GET_HOVER_HOVERS = 'hovers';
-const String ANALYSIS_RESPONSE_GET_IMPORTED_ELEMENTS_ELEMENTS = 'elements';
-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_LIBRARIES = 'libraries';
-const String ANALYSIS_RESPONSE_GET_LIBRARY_DEPENDENCIES_PACKAGE_MAP =
-    'packageMap';
-const String ANALYSIS_RESPONSE_GET_NAVIGATION_FILES = 'files';
-const String ANALYSIS_RESPONSE_GET_NAVIGATION_REGIONS = 'regions';
-const String ANALYSIS_RESPONSE_GET_NAVIGATION_TARGETS = 'targets';
-const String ANALYSIS_RESPONSE_GET_REACHABLE_SOURCES_SOURCES = 'sources';
-const String ANALYSIS_RESPONSE_GET_SIGNATURE_DARTDOC = 'dartdoc';
-const String ANALYSIS_RESPONSE_GET_SIGNATURE_NAME = 'name';
-const String ANALYSIS_RESPONSE_GET_SIGNATURE_PARAMETERS = 'parameters';
-const String ANALYTICS_REQUEST_ENABLE = 'analytics.enable';
-const String ANALYTICS_REQUEST_ENABLE_VALUE = 'value';
-const String ANALYTICS_REQUEST_IS_ENABLED = 'analytics.isEnabled';
-const String ANALYTICS_REQUEST_SEND_EVENT = 'analytics.sendEvent';
-const String ANALYTICS_REQUEST_SEND_EVENT_ACTION = 'action';
-const String ANALYTICS_REQUEST_SEND_TIMING = 'analytics.sendTiming';
-const String ANALYTICS_REQUEST_SEND_TIMING_EVENT = 'event';
-const String ANALYTICS_REQUEST_SEND_TIMING_MILLIS = 'millis';
-const String ANALYTICS_RESPONSE_IS_ENABLED_ENABLED = 'enabled';
-const String COMPLETION_NOTIFICATION_EXISTING_IMPORTS =
+const String analysisRequestSetPriorityFiles = 'analysis.setPriorityFiles';
+const String analysisRequestSetPriorityFilesFiles = 'files';
+const String analysisRequestSetSubscriptions = 'analysis.setSubscriptions';
+const String analysisRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String analysisRequestUpdateContent = 'analysis.updateContent';
+const String analysisRequestUpdateContentFiles = 'files';
+const String analysisRequestUpdateOptions = 'analysis.updateOptions';
+const String analysisRequestUpdateOptionsOptions = 'options';
+const String analysisResponseGetErrorsErrors = 'errors';
+const String analysisResponseGetHoverHovers = 'hovers';
+const String analysisResponseGetImportedElementsElements = 'elements';
+const String analysisResponseGetLibraryDependenciesLibraries = 'libraries';
+const String analysisResponseGetLibraryDependenciesPackageMap = 'packageMap';
+const String analysisResponseGetNavigationFiles = 'files';
+const String analysisResponseGetNavigationRegions = 'regions';
+const String analysisResponseGetNavigationTargets = 'targets';
+const String analysisResponseGetReachableSourcesSources = 'sources';
+const String analysisResponseGetSignatureDartdoc = 'dartdoc';
+const String analysisResponseGetSignatureName = 'name';
+const String analysisResponseGetSignatureParameters = 'parameters';
+const String analyticsRequestEnable = 'analytics.enable';
+const String analyticsRequestEnableValue = 'value';
+const String analyticsRequestIsEnabled = 'analytics.isEnabled';
+const String analyticsRequestSendEvent = 'analytics.sendEvent';
+const String analyticsRequestSendEventAction = 'action';
+const String analyticsRequestSendTiming = 'analytics.sendTiming';
+const String analyticsRequestSendTimingEvent = 'event';
+const String analyticsRequestSendTimingMillis = 'millis';
+const String analyticsResponseIsEnabledEnabled = 'enabled';
+const String completionNotificationExistingImports =
     'completion.existingImports';
-const String COMPLETION_NOTIFICATION_EXISTING_IMPORTS_FILE = 'file';
-const String COMPLETION_NOTIFICATION_EXISTING_IMPORTS_IMPORTS = 'imports';
-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';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_INVOCATION_COUNT =
-    'invocationCount';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_MAX_RESULTS = 'maxResults';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_OFFSET = 'offset';
-const String COMPLETION_REQUEST_GET_SUGGESTIONS2_TIMEOUT = 'timeout';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2 =
+const String completionNotificationExistingImportsFile = 'file';
+const String completionNotificationExistingImportsImports = 'imports';
+const String completionRequestGetSuggestionDetails2 =
     'completion.getSuggestionDetails2';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_COMPLETION =
-    'completion';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_FILE = 'file';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_LIBRARY_URI =
-    'libraryUri';
-const String COMPLETION_REQUEST_GET_SUGGESTION_DETAILS2_OFFSET = 'offset';
-const String COMPLETION_REQUEST_REGISTER_LIBRARY_PATHS =
+const String completionRequestGetSuggestionDetails2Completion = 'completion';
+const String completionRequestGetSuggestionDetails2File = 'file';
+const String completionRequestGetSuggestionDetails2LibraryUri = 'libraryUri';
+const String completionRequestGetSuggestionDetails2Offset = 'offset';
+const String completionRequestGetSuggestions2 = 'completion.getSuggestions2';
+const String completionRequestGetSuggestions2CompletionCaseMatchingMode =
+    'completionCaseMatchingMode';
+const String completionRequestGetSuggestions2CompletionMode = 'completionMode';
+const String completionRequestGetSuggestions2File = 'file';
+const String completionRequestGetSuggestions2InvocationCount =
+    'invocationCount';
+const String completionRequestGetSuggestions2MaxResults = 'maxResults';
+const String completionRequestGetSuggestions2Offset = 'offset';
+const String completionRequestGetSuggestions2Timeout = 'timeout';
+const String completionRequestRegisterLibraryPaths =
     'completion.registerLibraryPaths';
-const String COMPLETION_REQUEST_REGISTER_LIBRARY_PATHS_PATHS = 'paths';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_IS_INCOMPLETE =
-    'isIncomplete';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_LENGTH =
+const String completionRequestRegisterLibraryPathsPaths = 'paths';
+const String completionResponseGetSuggestionDetails2Change = 'change';
+const String completionResponseGetSuggestionDetails2Completion = 'completion';
+const String completionResponseGetSuggestions2IsIncomplete = 'isIncomplete';
+const String completionResponseGetSuggestions2ReplacementLength =
     'replacementLength';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_REPLACEMENT_OFFSET =
+const String completionResponseGetSuggestions2ReplacementOffset =
     'replacementOffset';
-const String COMPLETION_RESPONSE_GET_SUGGESTIONS2_SUGGESTIONS = 'suggestions';
-const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_CHANGE = 'change';
-const String COMPLETION_RESPONSE_GET_SUGGESTION_DETAILS2_COMPLETION =
-    'completion';
-const String DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS = 'diagnostic.getDiagnostics';
-const String DIAGNOSTIC_REQUEST_GET_SERVER_PORT = 'diagnostic.getServerPort';
-const String DIAGNOSTIC_RESPONSE_GET_DIAGNOSTICS_CONTEXTS = 'contexts';
-const String DIAGNOSTIC_RESPONSE_GET_SERVER_PORT_PORT = 'port';
-const String EDIT_REQUEST_BULK_FIXES = 'edit.bulkFixes';
-const String EDIT_REQUEST_BULK_FIXES_CODES = 'codes';
-const String EDIT_REQUEST_BULK_FIXES_INCLUDED = 'included';
-const String EDIT_REQUEST_BULK_FIXES_IN_TEST_MODE = 'inTestMode';
-const String EDIT_REQUEST_BULK_FIXES_UPDATE_PUBSPEC = 'updatePubspec';
-const String EDIT_REQUEST_FORMAT = 'edit.format';
-const String EDIT_REQUEST_FORMAT_FILE = 'file';
-const String EDIT_REQUEST_FORMAT_IF_ENABLED = 'edit.formatIfEnabled';
-const String EDIT_REQUEST_FORMAT_IF_ENABLED_DIRECTORIES = 'directories';
-const String EDIT_REQUEST_FORMAT_LINE_LENGTH = 'lineLength';
-const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH = 'selectionLength';
-const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET = 'selectionOffset';
-const String EDIT_REQUEST_GET_ASSISTS = 'edit.getAssists';
-const String EDIT_REQUEST_GET_ASSISTS_FILE = 'file';
-const String EDIT_REQUEST_GET_ASSISTS_LENGTH = 'length';
-const String EDIT_REQUEST_GET_ASSISTS_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS =
+const String completionResponseGetSuggestions2Suggestions = 'suggestions';
+const String diagnosticRequestGetDiagnostics = 'diagnostic.getDiagnostics';
+const String diagnosticRequestGetServerPort = 'diagnostic.getServerPort';
+const String diagnosticResponseGetDiagnosticsContexts = 'contexts';
+const String diagnosticResponseGetServerPortPort = 'port';
+const String editRequestBulkFixes = 'edit.bulkFixes';
+const String editRequestBulkFixesCodes = 'codes';
+const String editRequestBulkFixesInTestMode = 'inTestMode';
+const String editRequestBulkFixesIncluded = 'included';
+const String editRequestBulkFixesUpdatePubspec = 'updatePubspec';
+const String editRequestFormat = 'edit.format';
+const String editRequestFormatFile = 'file';
+const String editRequestFormatIfEnabled = 'edit.formatIfEnabled';
+const String editRequestFormatIfEnabledDirectories = 'directories';
+const String editRequestFormatLineLength = 'lineLength';
+const String editRequestFormatSelectionLength = 'selectionLength';
+const String editRequestFormatSelectionOffset = 'selectionOffset';
+const String editRequestGetAssists = 'edit.getAssists';
+const String editRequestGetAssistsFile = 'file';
+const String editRequestGetAssistsLength = 'length';
+const String editRequestGetAssistsOffset = 'offset';
+const String editRequestGetAvailableRefactorings =
     'edit.getAvailableRefactorings';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_FILE = 'file';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_LENGTH = 'length';
-const String EDIT_REQUEST_GET_AVAILABLE_REFACTORINGS_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_FIXES = 'edit.getFixes';
-const String EDIT_REQUEST_GET_FIXES_FILE = 'file';
-const String EDIT_REQUEST_GET_FIXES_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION = 'edit.getPostfixCompletion';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_FILE = 'file';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_KEY = 'key';
-const String EDIT_REQUEST_GET_POSTFIX_COMPLETION_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_REFACTORING = 'edit.getRefactoring';
-const String EDIT_REQUEST_GET_REFACTORING_FILE = 'file';
-const String EDIT_REQUEST_GET_REFACTORING_KIND = 'kind';
-const String EDIT_REQUEST_GET_REFACTORING_LENGTH = 'length';
-const String EDIT_REQUEST_GET_REFACTORING_OFFSET = 'offset';
-const String EDIT_REQUEST_GET_REFACTORING_OPTIONS = 'options';
-const String EDIT_REQUEST_GET_REFACTORING_VALIDATE_ONLY = 'validateOnly';
-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION =
-    'edit.getStatementCompletion';
-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_FILE = 'file';
-const String EDIT_REQUEST_GET_STATEMENT_COMPLETION_OFFSET = 'offset';
-const String EDIT_REQUEST_IMPORT_ELEMENTS = 'edit.importElements';
-const String EDIT_REQUEST_IMPORT_ELEMENTS_ELEMENTS = 'elements';
-const String EDIT_REQUEST_IMPORT_ELEMENTS_FILE = 'file';
-const String EDIT_REQUEST_IMPORT_ELEMENTS_OFFSET = 'offset';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE =
+const String editRequestGetAvailableRefactoringsFile = 'file';
+const String editRequestGetAvailableRefactoringsLength = 'length';
+const String editRequestGetAvailableRefactoringsOffset = 'offset';
+const String editRequestGetFixes = 'edit.getFixes';
+const String editRequestGetFixesFile = 'file';
+const String editRequestGetFixesOffset = 'offset';
+const String editRequestGetPostfixCompletion = 'edit.getPostfixCompletion';
+const String editRequestGetPostfixCompletionFile = 'file';
+const String editRequestGetPostfixCompletionKey = 'key';
+const String editRequestGetPostfixCompletionOffset = 'offset';
+const String editRequestGetRefactoring = 'edit.getRefactoring';
+const String editRequestGetRefactoringFile = 'file';
+const String editRequestGetRefactoringKind = 'kind';
+const String editRequestGetRefactoringLength = 'length';
+const String editRequestGetRefactoringOffset = 'offset';
+const String editRequestGetRefactoringOptions = 'options';
+const String editRequestGetRefactoringValidateOnly = 'validateOnly';
+const String editRequestGetStatementCompletion = 'edit.getStatementCompletion';
+const String editRequestGetStatementCompletionFile = 'file';
+const String editRequestGetStatementCompletionOffset = 'offset';
+const String editRequestImportElements = 'edit.importElements';
+const String editRequestImportElementsElements = 'elements';
+const String editRequestImportElementsFile = 'file';
+const String editRequestImportElementsOffset = 'offset';
+const String editRequestIsPostfixCompletionApplicable =
     'edit.isPostfixCompletionApplicable';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_FILE = 'file';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_KEY = 'key';
-const String EDIT_REQUEST_IS_POSTFIX_COMPLETION_APPLICABLE_OFFSET = 'offset';
-const String EDIT_REQUEST_LIST_POSTFIX_COMPLETION_TEMPLATES =
+const String editRequestIsPostfixCompletionApplicableFile = 'file';
+const String editRequestIsPostfixCompletionApplicableKey = 'key';
+const String editRequestIsPostfixCompletionApplicableOffset = 'offset';
+const String editRequestListPostfixCompletionTemplates =
     'edit.listPostfixCompletionTemplates';
-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES = 'edit.organizeDirectives';
-const String EDIT_REQUEST_ORGANIZE_DIRECTIVES_FILE = 'file';
-const String EDIT_REQUEST_SORT_MEMBERS = 'edit.sortMembers';
-const String EDIT_REQUEST_SORT_MEMBERS_FILE = 'file';
-const String EDIT_RESPONSE_BULK_FIXES_DETAILS = 'details';
-const String EDIT_RESPONSE_BULK_FIXES_EDITS = 'edits';
-const String EDIT_RESPONSE_BULK_FIXES_MESSAGE = 'message';
-const String EDIT_RESPONSE_FORMAT_EDITS = 'edits';
-const String EDIT_RESPONSE_FORMAT_IF_ENABLED_EDITS = 'edits';
-const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH = 'selectionLength';
-const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET = 'selectionOffset';
-const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS = 'assists';
-const String EDIT_RESPONSE_GET_AVAILABLE_REFACTORINGS_KINDS = 'kinds';
-const String EDIT_RESPONSE_GET_FIXES_FIXES = 'fixes';
-const String EDIT_RESPONSE_GET_POSTFIX_COMPLETION_CHANGE = 'change';
-const String EDIT_RESPONSE_GET_REFACTORING_CHANGE = 'change';
-const String EDIT_RESPONSE_GET_REFACTORING_FEEDBACK = 'feedback';
-const String EDIT_RESPONSE_GET_REFACTORING_FINAL_PROBLEMS = 'finalProblems';
-const String EDIT_RESPONSE_GET_REFACTORING_INITIAL_PROBLEMS = 'initialProblems';
-const String EDIT_RESPONSE_GET_REFACTORING_OPTIONS_PROBLEMS = 'optionsProblems';
-const String EDIT_RESPONSE_GET_REFACTORING_POTENTIAL_EDITS = 'potentialEdits';
-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_CHANGE = 'change';
-const String EDIT_RESPONSE_GET_STATEMENT_COMPLETION_WHITESPACE_ONLY =
+const String editRequestOrganizeDirectives = 'edit.organizeDirectives';
+const String editRequestOrganizeDirectivesFile = 'file';
+const String editRequestSortMembers = 'edit.sortMembers';
+const String editRequestSortMembersFile = 'file';
+const String editResponseBulkFixesDetails = 'details';
+const String editResponseBulkFixesEdits = 'edits';
+const String editResponseBulkFixesMessage = 'message';
+const String editResponseFormatEdits = 'edits';
+const String editResponseFormatIfEnabledEdits = 'edits';
+const String editResponseFormatSelectionLength = 'selectionLength';
+const String editResponseFormatSelectionOffset = 'selectionOffset';
+const String editResponseGetAssistsAssists = 'assists';
+const String editResponseGetAvailableRefactoringsKinds = 'kinds';
+const String editResponseGetFixesFixes = 'fixes';
+const String editResponseGetPostfixCompletionChange = 'change';
+const String editResponseGetRefactoringChange = 'change';
+const String editResponseGetRefactoringFeedback = 'feedback';
+const String editResponseGetRefactoringFinalProblems = 'finalProblems';
+const String editResponseGetRefactoringInitialProblems = 'initialProblems';
+const String editResponseGetRefactoringOptionsProblems = 'optionsProblems';
+const String editResponseGetRefactoringPotentialEdits = 'potentialEdits';
+const String editResponseGetStatementCompletionChange = 'change';
+const String editResponseGetStatementCompletionWhitespaceOnly =
     'whitespaceOnly';
-const String EDIT_RESPONSE_IMPORT_ELEMENTS_EDIT = 'edit';
-const String EDIT_RESPONSE_IS_POSTFIX_COMPLETION_APPLICABLE_VALUE = 'value';
-const String EDIT_RESPONSE_LIST_POSTFIX_COMPLETION_TEMPLATES_TEMPLATES =
-    'templates';
-const String EDIT_RESPONSE_ORGANIZE_DIRECTIVES_EDIT = 'edit';
-const String EDIT_RESPONSE_SORT_MEMBERS_EDIT = 'edit';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA = 'execution.launchData';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_FILE = 'file';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_KIND = 'kind';
-const String EXECUTION_NOTIFICATION_LAUNCH_DATA_REFERENCED_FILES =
-    'referencedFiles';
-const String EXECUTION_REQUEST_CREATE_CONTEXT = 'execution.createContext';
-const String EXECUTION_REQUEST_CREATE_CONTEXT_CONTEXT_ROOT = 'contextRoot';
-const String EXECUTION_REQUEST_DELETE_CONTEXT = 'execution.deleteContext';
-const String EXECUTION_REQUEST_DELETE_CONTEXT_ID = 'id';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS = 'execution.getSuggestions';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_CODE = 'code';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_CONTEXT_FILE = 'contextFile';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_CONTEXT_OFFSET = 'contextOffset';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_EXPRESSIONS = 'expressions';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_OFFSET = 'offset';
-const String EXECUTION_REQUEST_GET_SUGGESTIONS_VARIABLES = 'variables';
-const String EXECUTION_REQUEST_MAP_URI = 'execution.mapUri';
-const String EXECUTION_REQUEST_MAP_URI_FILE = 'file';
-const String EXECUTION_REQUEST_MAP_URI_ID = 'id';
-const String EXECUTION_REQUEST_MAP_URI_URI = 'uri';
-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS = 'execution.setSubscriptions';
-const String EXECUTION_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS =
-    'subscriptions';
-const String EXECUTION_RESPONSE_CREATE_CONTEXT_ID = 'id';
-const String EXECUTION_RESPONSE_GET_SUGGESTIONS_EXPRESSIONS = 'expressions';
-const String EXECUTION_RESPONSE_GET_SUGGESTIONS_SUGGESTIONS = 'suggestions';
-const String EXECUTION_RESPONSE_MAP_URI_FILE = 'file';
-const String EXECUTION_RESPONSE_MAP_URI_URI = 'uri';
-const String FLUTTER_NOTIFICATION_OUTLINE = 'flutter.outline';
-const String FLUTTER_NOTIFICATION_OUTLINE_FILE = 'file';
-const String FLUTTER_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
-const String FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION =
+const String editResponseImportElementsEdit = 'edit';
+const String editResponseIsPostfixCompletionApplicableValue = 'value';
+const String editResponseListPostfixCompletionTemplatesTemplates = 'templates';
+const String editResponseOrganizeDirectivesEdit = 'edit';
+const String editResponseSortMembersEdit = 'edit';
+const String executionNotificationLaunchData = 'execution.launchData';
+const String executionNotificationLaunchDataFile = 'file';
+const String executionNotificationLaunchDataKind = 'kind';
+const String executionNotificationLaunchDataReferencedFiles = 'referencedFiles';
+const String executionRequestCreateContext = 'execution.createContext';
+const String executionRequestCreateContextContextRoot = 'contextRoot';
+const String executionRequestDeleteContext = 'execution.deleteContext';
+const String executionRequestDeleteContextId = 'id';
+const String executionRequestGetSuggestions = 'execution.getSuggestions';
+const String executionRequestGetSuggestionsCode = 'code';
+const String executionRequestGetSuggestionsContextFile = 'contextFile';
+const String executionRequestGetSuggestionsContextOffset = 'contextOffset';
+const String executionRequestGetSuggestionsExpressions = 'expressions';
+const String executionRequestGetSuggestionsOffset = 'offset';
+const String executionRequestGetSuggestionsVariables = 'variables';
+const String executionRequestMapUri = 'execution.mapUri';
+const String executionRequestMapUriFile = 'file';
+const String executionRequestMapUriId = 'id';
+const String executionRequestMapUriUri = 'uri';
+const String executionRequestSetSubscriptions = 'execution.setSubscriptions';
+const String executionRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String executionResponseCreateContextId = 'id';
+const String executionResponseGetSuggestionsExpressions = 'expressions';
+const String executionResponseGetSuggestionsSuggestions = 'suggestions';
+const String executionResponseMapUriFile = 'file';
+const String executionResponseMapUriUri = 'uri';
+const String flutterNotificationOutline = 'flutter.outline';
+const String flutterNotificationOutlineFile = 'file';
+const String flutterNotificationOutlineOutline = 'outline';
+const String flutterRequestGetWidgetDescription =
     'flutter.getWidgetDescription';
-const String FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION_FILE = 'file';
-const String FLUTTER_REQUEST_GET_WIDGET_DESCRIPTION_OFFSET = 'offset';
-const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS = 'flutter.setSubscriptions';
-const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
-const String FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE =
+const String flutterRequestGetWidgetDescriptionFile = 'file';
+const String flutterRequestGetWidgetDescriptionOffset = 'offset';
+const String flutterRequestSetSubscriptions = 'flutter.setSubscriptions';
+const String flutterRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String flutterRequestSetWidgetPropertyValue =
     'flutter.setWidgetPropertyValue';
-const String FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE_ID = 'id';
-const String FLUTTER_REQUEST_SET_WIDGET_PROPERTY_VALUE_VALUE = 'value';
-const String FLUTTER_RESPONSE_GET_WIDGET_DESCRIPTION_PROPERTIES = 'properties';
-const String FLUTTER_RESPONSE_SET_WIDGET_PROPERTY_VALUE_CHANGE = 'change';
-const String LSP_NOTIFICATION_NOTIFICATION = 'lsp.notification';
-const String LSP_NOTIFICATION_NOTIFICATION_LSP_NOTIFICATION = 'lspNotification';
-const String LSP_REQUEST_HANDLE = 'lsp.handle';
-const String LSP_REQUEST_HANDLE_LSP_MESSAGE = 'lspMessage';
-const String LSP_RESPONSE_HANDLE_LSP_RESPONSE = 'lspResponse';
-const String SEARCH_NOTIFICATION_RESULTS = 'search.results';
-const String SEARCH_NOTIFICATION_RESULTS_ID = 'id';
-const String SEARCH_NOTIFICATION_RESULTS_IS_LAST = 'isLast';
-const String SEARCH_NOTIFICATION_RESULTS_RESULTS = 'results';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES =
+const String flutterRequestSetWidgetPropertyValueId = 'id';
+const String flutterRequestSetWidgetPropertyValueValue = 'value';
+const String flutterResponseGetWidgetDescriptionProperties = 'properties';
+const String flutterResponseSetWidgetPropertyValueChange = 'change';
+const String lspNotificationNotification = 'lsp.notification';
+const String lspNotificationNotificationLspNotification = 'lspNotification';
+const String lspRequestHandle = 'lsp.handle';
+const String lspRequestHandleLspMessage = 'lspMessage';
+const String lspResponseHandleLspResponse = 'lspResponse';
+const String searchNotificationResults = 'search.results';
+const String searchNotificationResultsId = 'id';
+const String searchNotificationResultsIsLast = 'isLast';
+const String searchNotificationResultsResults = 'results';
+const String searchRequestFindElementReferences =
     'search.findElementReferences';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_FILE = 'file';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_INCLUDE_POTENTIAL =
+const String searchRequestFindElementReferencesFile = 'file';
+const String searchRequestFindElementReferencesIncludePotential =
     'includePotential';
-const String SEARCH_REQUEST_FIND_ELEMENT_REFERENCES_OFFSET = 'offset';
-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS =
+const String searchRequestFindElementReferencesOffset = 'offset';
+const String searchRequestFindMemberDeclarations =
     'search.findMemberDeclarations';
-const String SEARCH_REQUEST_FIND_MEMBER_DECLARATIONS_NAME = 'name';
-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES =
-    'search.findMemberReferences';
-const String SEARCH_REQUEST_FIND_MEMBER_REFERENCES_NAME = 'name';
-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS =
+const String searchRequestFindMemberDeclarationsName = 'name';
+const String searchRequestFindMemberReferences = 'search.findMemberReferences';
+const String searchRequestFindMemberReferencesName = 'name';
+const String searchRequestFindTopLevelDeclarations =
     'search.findTopLevelDeclarations';
-const String SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS_PATTERN = 'pattern';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS =
+const String searchRequestFindTopLevelDeclarationsPattern = 'pattern';
+const String searchRequestGetElementDeclarations =
     'search.getElementDeclarations';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_FILE = 'file';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_MAX_RESULTS = 'maxResults';
-const String SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS_PATTERN = 'pattern';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY = 'search.getTypeHierarchy';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_FILE = 'file';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_OFFSET = 'offset';
-const String SEARCH_REQUEST_GET_TYPE_HIERARCHY_SUPER_ONLY = 'superOnly';
-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ELEMENT = 'element';
-const String SEARCH_RESPONSE_FIND_ELEMENT_REFERENCES_ID = 'id';
-const String SEARCH_RESPONSE_FIND_MEMBER_DECLARATIONS_ID = 'id';
-const String SEARCH_RESPONSE_FIND_MEMBER_REFERENCES_ID = 'id';
-const String SEARCH_RESPONSE_FIND_TOP_LEVEL_DECLARATIONS_ID = 'id';
-const String SEARCH_RESPONSE_GET_ELEMENT_DECLARATIONS_DECLARATIONS =
-    'declarations';
-const String SEARCH_RESPONSE_GET_ELEMENT_DECLARATIONS_FILES = 'files';
-const String SEARCH_RESPONSE_GET_TYPE_HIERARCHY_HIERARCHY_ITEMS =
-    'hierarchyItems';
-const String SERVER_NOTIFICATION_CONNECTED = 'server.connected';
-const String SERVER_NOTIFICATION_CONNECTED_PID = 'pid';
-const String SERVER_NOTIFICATION_CONNECTED_VERSION = 'version';
-const String SERVER_NOTIFICATION_ERROR = 'server.error';
-const String SERVER_NOTIFICATION_ERROR_IS_FATAL = 'isFatal';
-const String SERVER_NOTIFICATION_ERROR_MESSAGE = 'message';
-const String SERVER_NOTIFICATION_ERROR_STACK_TRACE = 'stackTrace';
-const String SERVER_NOTIFICATION_LOG = 'server.log';
-const String SERVER_NOTIFICATION_LOG_ENTRY = 'entry';
-const String SERVER_NOTIFICATION_PLUGIN_ERROR = 'server.pluginError';
-const String SERVER_NOTIFICATION_PLUGIN_ERROR_MESSAGE = 'message';
-const String SERVER_NOTIFICATION_STATUS = 'server.status';
-const String SERVER_NOTIFICATION_STATUS_ANALYSIS = 'analysis';
-const String SERVER_NOTIFICATION_STATUS_PUB = 'pub';
-const String SERVER_REQUEST_CANCEL_REQUEST = 'server.cancelRequest';
-const String SERVER_REQUEST_CANCEL_REQUEST_ID = 'id';
-const String SERVER_REQUEST_GET_VERSION = 'server.getVersion';
-const String SERVER_REQUEST_OPEN_URL_REQUEST = 'server.openUrlRequest';
-const String SERVER_REQUEST_OPEN_URL_REQUEST_URL = 'url';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES =
+const String searchRequestGetElementDeclarationsFile = 'file';
+const String searchRequestGetElementDeclarationsMaxResults = 'maxResults';
+const String searchRequestGetElementDeclarationsPattern = 'pattern';
+const String searchRequestGetTypeHierarchy = 'search.getTypeHierarchy';
+const String searchRequestGetTypeHierarchyFile = 'file';
+const String searchRequestGetTypeHierarchyOffset = 'offset';
+const String searchRequestGetTypeHierarchySuperOnly = 'superOnly';
+const String searchResponseFindElementReferencesElement = 'element';
+const String searchResponseFindElementReferencesId = 'id';
+const String searchResponseFindMemberDeclarationsId = 'id';
+const String searchResponseFindMemberReferencesId = 'id';
+const String searchResponseFindTopLevelDeclarationsId = 'id';
+const String searchResponseGetElementDeclarationsDeclarations = 'declarations';
+const String searchResponseGetElementDeclarationsFiles = 'files';
+const String searchResponseGetTypeHierarchyHierarchyItems = 'hierarchyItems';
+const String serverNotificationConnected = 'server.connected';
+const String serverNotificationConnectedPid = 'pid';
+const String serverNotificationConnectedVersion = 'version';
+const String serverNotificationError = 'server.error';
+const String serverNotificationErrorIsFatal = 'isFatal';
+const String serverNotificationErrorMessage = 'message';
+const String serverNotificationErrorStackTrace = 'stackTrace';
+const String serverNotificationLog = 'server.log';
+const String serverNotificationLogEntry = 'entry';
+const String serverNotificationPluginError = 'server.pluginError';
+const String serverNotificationPluginErrorMessage = 'message';
+const String serverNotificationStatus = 'server.status';
+const String serverNotificationStatusAnalysis = 'analysis';
+const String serverNotificationStatusPub = 'pub';
+const String serverRequestCancelRequest = 'server.cancelRequest';
+const String serverRequestCancelRequestId = 'id';
+const String serverRequestGetVersion = 'server.getVersion';
+const String serverRequestOpenUrlRequest = 'server.openUrlRequest';
+const String serverRequestOpenUrlRequestUrl = 'url';
+const String serverRequestSetClientCapabilities =
     'server.setClientCapabilities';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES_LSP_CAPABILITIES =
+const String serverRequestSetClientCapabilitiesLspCapabilities =
     'lspCapabilities';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES_REQUESTS = 'requests';
-const String SERVER_REQUEST_SET_CLIENT_CAPABILITIES_SUPPORTS_URIS =
-    'supportsUris';
-const String SERVER_REQUEST_SET_SUBSCRIPTIONS = 'server.setSubscriptions';
-const String SERVER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST = 'server.showMessageRequest';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST_ACTIONS = 'actions';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST_MESSAGE = 'message';
-const String SERVER_REQUEST_SHOW_MESSAGE_REQUEST_TYPE = 'type';
-const String SERVER_REQUEST_SHUTDOWN = 'server.shutdown';
-const String SERVER_RESPONSE_GET_VERSION_VERSION = 'version';
-const String SERVER_RESPONSE_SHOW_MESSAGE_REQUEST_ACTION = 'action';
+const String serverRequestSetClientCapabilitiesRequests = 'requests';
+const String serverRequestSetClientCapabilitiesSupportsUris = 'supportsUris';
+const String serverRequestSetSubscriptions = 'server.setSubscriptions';
+const String serverRequestSetSubscriptionsSubscriptions = 'subscriptions';
+const String serverRequestShowMessageRequest = 'server.showMessageRequest';
+const String serverRequestShowMessageRequestActions = 'actions';
+const String serverRequestShowMessageRequestMessage = 'message';
+const String serverRequestShowMessageRequestType = 'type';
+const String serverRequestShutdown = 'server.shutdown';
+const String serverResponseGetVersionVersion = 'version';
+const String serverResponseShowMessageRequestAction = 'action';
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 6954e9a..1f72aba 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
@@ -64,13 +64,9 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisAnalyzedFilesParams) {
-      return listEqual(
-          directories, other.directories, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisAnalyzedFilesParams &&
+      listEqual(directories, other.directories, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(directories);
@@ -149,14 +145,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisClosingLabelsParams) {
-      return file == other.file &&
-          listEqual(
-              labels, other.labels, (ClosingLabel a, ClosingLabel b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisClosingLabelsParams &&
+      file == other.file &&
+      listEqual(
+          labels, other.labels, (ClosingLabel a, ClosingLabel b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -223,14 +216,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisErrorFixes) {
-      return error == other.error &&
-          listEqual(
-              fixes, other.fixes, (SourceChange a, SourceChange b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisErrorFixes &&
+      error == other.error &&
+      listEqual(fixes, other.fixes, (SourceChange a, SourceChange b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -304,14 +293,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisErrorsParams) {
-      return file == other.file &&
-          listEqual(errors, other.errors,
-              (AnalysisError a, AnalysisError b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisErrorsParams &&
+      file == other.file &&
+      listEqual(
+          errors, other.errors, (AnalysisError a, AnalysisError b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -372,12 +358,9 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisFlushResultsParams) {
-      return listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisFlushResultsParams &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(files);
@@ -448,14 +431,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisFoldingParams) {
-      return file == other.file &&
-          listEqual(regions, other.regions,
-              (FoldingRegion a, FoldingRegion b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisFoldingParams &&
+      file == other.file &&
+      listEqual(
+          regions, other.regions, (FoldingRegion a, FoldingRegion b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -514,12 +494,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetErrorsParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetErrorsParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -582,13 +558,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetErrorsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisGetErrorsResult &&
+      listEqual(
           errors, other.errors, (AnalysisError a, AnalysisError b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(errors);
@@ -655,12 +628,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetHoverParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetHoverParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -730,13 +701,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetHoverResult) {
-      return listEqual(hovers, other.hovers,
+  bool operator ==(Object other) =>
+      other is AnalysisGetHoverResult &&
+      listEqual(hovers, other.hovers,
           (HoverInformation a, HoverInformation b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(hovers);
@@ -815,14 +783,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetImportedElementsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetImportedElementsParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(
@@ -891,13 +856,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetImportedElementsResult) {
-      return listEqual(elements, other.elements,
+  bool operator ==(Object other) =>
+      other is AnalysisGetImportedElementsResult &&
+      listEqual(elements, other.elements,
           (ImportedElements a, ImportedElements b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(elements);
@@ -996,22 +958,18 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetLibraryDependenciesResult) {
-      return listEqual(
-              libraries, other.libraries, (String a, String b) => a == b) &&
-          mapEqual(
-              packageMap,
-              other.packageMap,
-              (Map<String, List<String>> a, Map<String, List<String>> b) =>
-                  mapEqual(
-                      a,
-                      b,
-                      (List<String> a, List<String> b) =>
-                          listEqual(a, b, (String a, String b) => a == b)));
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetLibraryDependenciesResult &&
+      listEqual(libraries, other.libraries, (String a, String b) => a == b) &&
+      mapEqual(
+          packageMap,
+          other.packageMap,
+          (Map<String, List<String>> a, Map<String, List<String>> b) =>
+              mapEqual(
+                  a,
+                  b,
+                  (List<String> a, List<String> b) =>
+                      listEqual(a, b, (String a, String b) => a == b)));
 
   @override
   int get hashCode => Object.hash(
@@ -1095,14 +1053,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetNavigationParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetNavigationParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(
@@ -1200,16 +1155,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetNavigationResult) {
-      return listEqual(files, other.files, (String a, String b) => a == b) &&
-          listEqual(targets, other.targets,
-              (NavigationTarget a, NavigationTarget b) => a == b) &&
-          listEqual(regions, other.regions,
-              (NavigationRegion a, NavigationRegion b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetNavigationResult &&
+      listEqual(files, other.files, (String a, String b) => a == b) &&
+      listEqual(targets, other.targets,
+          (NavigationTarget a, NavigationTarget b) => a == b) &&
+      listEqual(regions, other.regions,
+          (NavigationRegion a, NavigationRegion b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -1270,12 +1222,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetReachableSourcesParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetReachableSourcesParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -1342,16 +1290,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetReachableSourcesResult) {
-      return mapEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisGetReachableSourcesResult &&
+      mapEqual(
           sources,
           other.sources,
           (List<String> a, List<String> b) =>
               listEqual(a, b, (String a, String b) => a == b));
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll([...sources.keys, ...sources.values]);
@@ -1419,12 +1364,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetSignatureParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetSignatureParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -1520,15 +1463,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisGetSignatureResult) {
-      return name == other.name &&
-          listEqual(parameters, other.parameters,
-              (ParameterInfo a, ParameterInfo b) => a == b) &&
-          dartdoc == other.dartdoc;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisGetSignatureResult &&
+      name == other.name &&
+      listEqual(parameters, other.parameters,
+          (ParameterInfo a, ParameterInfo b) => a == b) &&
+      dartdoc == other.dartdoc;
 
   @override
   int get hashCode => Object.hash(
@@ -1607,14 +1547,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisHighlightsParams) {
-      return file == other.file &&
-          listEqual(regions, other.regions,
-              (HighlightRegion a, HighlightRegion b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisHighlightsParams &&
+      file == other.file &&
+      listEqual(regions, other.regions,
+          (HighlightRegion a, HighlightRegion b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -1705,16 +1642,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisImplementedParams) {
-      return file == other.file &&
-          listEqual(classes, other.classes,
-              (ImplementedClass a, ImplementedClass b) => a == b) &&
-          listEqual(members, other.members,
-              (ImplementedMember a, ImplementedMember b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisImplementedParams &&
+      file == other.file &&
+      listEqual(classes, other.classes,
+          (ImplementedClass a, ImplementedClass b) => a == b) &&
+      listEqual(members, other.members,
+          (ImplementedMember a, ImplementedMember b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -1808,15 +1742,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisInvalidateParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length &&
-          delta == other.delta;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisInvalidateParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length &&
+      delta == other.delta;
 
   @override
   int get hashCode => Object.hash(
@@ -1928,17 +1859,14 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisNavigationParams) {
-      return file == other.file &&
-          listEqual(regions, other.regions,
-              (NavigationRegion a, NavigationRegion b) => a == b) &&
-          listEqual(targets, other.targets,
-              (NavigationTarget a, NavigationTarget b) => a == b) &&
-          listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisNavigationParams &&
+      file == other.file &&
+      listEqual(regions, other.regions,
+          (NavigationRegion a, NavigationRegion b) => a == b) &&
+      listEqual(targets, other.targets,
+          (NavigationTarget a, NavigationTarget b) => a == b) &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -2015,14 +1943,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOccurrencesParams) {
-      return file == other.file &&
-          listEqual(occurrences, other.occurrences,
-              (Occurrences a, Occurrences b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOccurrencesParams &&
+      file == other.file &&
+      listEqual(occurrences, other.occurrences,
+          (Occurrences a, Occurrences b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -2180,18 +2105,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOptions) {
-      return enableAsync == other.enableAsync &&
-          enableDeferredLoading == other.enableDeferredLoading &&
-          enableEnums == other.enableEnums &&
-          enableNullAwareOperators == other.enableNullAwareOperators &&
-          generateDart2jsHints == other.generateDart2jsHints &&
-          generateHints == other.generateHints &&
-          generateLints == other.generateLints;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOptions &&
+      enableAsync == other.enableAsync &&
+      enableDeferredLoading == other.enableDeferredLoading &&
+      enableEnums == other.enableEnums &&
+      enableNullAwareOperators == other.enableNullAwareOperators &&
+      generateDart2jsHints == other.generateDart2jsHints &&
+      generateHints == other.generateHints &&
+      generateLints == other.generateLints;
 
   @override
   int get hashCode => Object.hash(
@@ -2295,15 +2217,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOutlineParams) {
-      return file == other.file &&
-          kind == other.kind &&
-          libraryName == other.libraryName &&
-          outline == other.outline;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOutlineParams &&
+      file == other.file &&
+      kind == other.kind &&
+      libraryName == other.libraryName &&
+      outline == other.outline;
 
   @override
   int get hashCode => Object.hash(
@@ -2379,14 +2298,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisOverridesParams) {
-      return file == other.file &&
-          listEqual(
-              overrides, other.overrides, (Override a, Override b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisOverridesParams &&
+      file == other.file &&
+      listEqual(overrides, other.overrides, (Override a, Override b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -2579,16 +2494,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetAnalysisRootsParams) {
-      return listEqual(
-              included, other.included, (String a, String b) => a == b) &&
-          listEqual(excluded, other.excluded, (String a, String b) => a == b) &&
-          mapEqual(
-              packageRoots, other.packageRoots, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisSetAnalysisRootsParams &&
+      listEqual(included, other.included, (String a, String b) => a == b) &&
+      listEqual(excluded, other.excluded, (String a, String b) => a == b) &&
+      mapEqual(
+          packageRoots, other.packageRoots, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -2674,13 +2585,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetGeneralSubscriptionsParams) {
-      return listEqual(subscriptions, other.subscriptions,
+  bool operator ==(Object other) =>
+      other is AnalysisSetGeneralSubscriptionsParams &&
+      listEqual(subscriptions, other.subscriptions,
           (GeneralAnalysisService a, GeneralAnalysisService b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(subscriptions);
@@ -2758,12 +2666,9 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetPriorityFilesParams) {
-      return listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisSetPriorityFilesParams &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(files);
@@ -2846,16 +2751,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisSetSubscriptionsParams) {
-      return mapEqual(
+  bool operator ==(Object other) =>
+      other is AnalysisSetSubscriptionsParams &&
+      mapEqual(
           subscriptions,
           other.subscriptions,
           (List<String> a, List<String> b) =>
               listEqual(a, b, (String a, String b) => a == b));
-    }
-    return false;
-  }
 
   @override
   int get hashCode =>
@@ -2936,13 +2838,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisStatus) {
-      return isAnalyzing == other.isAnalyzing &&
-          analysisTarget == other.analysisTarget;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisStatus &&
+      isAnalyzing == other.isAnalyzing &&
+      analysisTarget == other.analysisTarget;
 
   @override
   int get hashCode => Object.hash(
@@ -3014,12 +2913,9 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisUpdateContentParams) {
-      return mapEqual(files, other.files, (Object a, Object b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisUpdateContentParams &&
+      mapEqual(files, other.files, (Object a, Object b) => a == b);
 
   @override
   int get hashCode => Object.hashAll([...files.keys, ...files.values]);
@@ -3067,12 +2963,7 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisUpdateContentResult) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is AnalysisUpdateContentResult;
 
   @override
   int get hashCode => 0;
@@ -3130,12 +3021,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalysisUpdateOptionsParams) {
-      return options == other.options;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalysisUpdateOptionsParams && options == other.options;
 
   @override
   int get hashCode => options.hashCode;
@@ -3210,12 +3097,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsEnableParams) {
-      return value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsEnableParams && value == other.value;
 
   @override
   int get hashCode => value.hashCode;
@@ -3311,12 +3194,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsIsEnabledResult) {
-      return enabled == other.enabled;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsIsEnabledResult && enabled == other.enabled;
 
   @override
   int get hashCode => enabled.hashCode;
@@ -3372,12 +3251,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsSendEventParams) {
-      return action == other.action;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsSendEventParams && action == other.action;
 
   @override
   int get hashCode => action.hashCode;
@@ -3463,12 +3338,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is AnalyticsSendTimingParams) {
-      return event == other.event && millis == other.millis;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is AnalyticsSendTimingParams &&
+      event == other.event &&
+      millis == other.millis;
 
   @override
   int get hashCode => Object.hash(
@@ -3552,14 +3425,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is BulkFix) {
-      return path == other.path &&
-          listEqual(
-              fixes, other.fixes, (BulkFixDetail a, BulkFixDetail b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is BulkFix &&
+      path == other.path &&
+      listEqual(
+          fixes, other.fixes, (BulkFixDetail a, BulkFixDetail b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -3621,12 +3491,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is BulkFixDetail) {
-      return code == other.code && occurrences == other.occurrences;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is BulkFixDetail &&
+      code == other.code &&
+      occurrences == other.occurrences;
 
   @override
   int get hashCode => Object.hash(
@@ -3698,14 +3566,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ClosingLabel) {
-      return offset == other.offset &&
-          length == other.length &&
-          label == other.label;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ClosingLabel &&
+      offset == other.offset &&
+      length == other.length &&
+      label == other.label;
 
   @override
   int get hashCode => Object.hash(
@@ -3816,12 +3681,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionExistingImportsParams) {
-      return file == other.file && imports == other.imports;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionExistingImportsParams &&
+      file == other.file &&
+      imports == other.imports;
 
   @override
   int get hashCode => Object.hash(
@@ -3922,15 +3785,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestionDetails2Params) {
-      return file == other.file &&
-          offset == other.offset &&
-          completion == other.completion &&
-          libraryUri == other.libraryUri;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestionDetails2Params &&
+      file == other.file &&
+      offset == other.offset &&
+      completion == other.completion &&
+      libraryUri == other.libraryUri;
 
   @override
   int get hashCode => Object.hash(
@@ -4012,12 +3872,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestionDetails2Result) {
-      return completion == other.completion && change == other.change;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestionDetails2Result &&
+      completion == other.completion &&
+      change == other.change;
 
   @override
   int get hashCode => Object.hash(
@@ -4168,18 +4026,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestions2Params) {
-      return file == other.file &&
-          offset == other.offset &&
-          maxResults == other.maxResults &&
-          completionCaseMatchingMode == other.completionCaseMatchingMode &&
-          completionMode == other.completionMode &&
-          invocationCount == other.invocationCount &&
-          timeout == other.timeout;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestions2Params &&
+      file == other.file &&
+      offset == other.offset &&
+      maxResults == other.maxResults &&
+      completionCaseMatchingMode == other.completionCaseMatchingMode &&
+      completionMode == other.completionMode &&
+      invocationCount == other.invocationCount &&
+      timeout == other.timeout;
 
   @override
   int get hashCode => Object.hash(
@@ -4306,16 +4161,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionGetSuggestions2Result) {
-      return replacementOffset == other.replacementOffset &&
-          replacementLength == other.replacementLength &&
-          listEqual(suggestions, other.suggestions,
-              (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
-          isIncomplete == other.isIncomplete;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is CompletionGetSuggestions2Result &&
+      replacementOffset == other.replacementOffset &&
+      replacementLength == other.replacementLength &&
+      listEqual(suggestions, other.suggestions,
+          (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
+      isIncomplete == other.isIncomplete;
 
   @override
   int get hashCode => Object.hash(
@@ -4419,13 +4271,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is CompletionRegisterLibraryPathsParams) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is CompletionRegisterLibraryPathsParams &&
+      listEqual(
           paths, other.paths, (LibraryPathSet a, LibraryPathSet b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(paths);
@@ -4543,17 +4392,14 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ContextData) {
-      return name == other.name &&
-          explicitFileCount == other.explicitFileCount &&
-          implicitFileCount == other.implicitFileCount &&
-          workItemQueueLength == other.workItemQueueLength &&
-          listEqual(cacheEntryExceptions, other.cacheEntryExceptions,
-              (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ContextData &&
+      name == other.name &&
+      explicitFileCount == other.explicitFileCount &&
+      implicitFileCount == other.implicitFileCount &&
+      workItemQueueLength == other.workItemQueueLength &&
+      listEqual(cacheEntryExceptions, other.cacheEntryExceptions,
+          (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -4690,13 +4536,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is DiagnosticGetDiagnosticsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is DiagnosticGetDiagnosticsResult &&
+      listEqual(
           contexts, other.contexts, (ContextData a, ContextData b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(contexts);
@@ -4774,12 +4617,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is DiagnosticGetServerPortResult) {
-      return port == other.port;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is DiagnosticGetServerPortResult && port == other.port;
 
   @override
   int get hashCode => port.hashCode;
@@ -4895,16 +4734,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditBulkFixesParams) {
-      return listEqual(
-              included, other.included, (String a, String b) => a == b) &&
-          inTestMode == other.inTestMode &&
-          updatePubspec == other.updatePubspec &&
-          listEqual(codes, other.codes, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditBulkFixesParams &&
+      listEqual(included, other.included, (String a, String b) => a == b) &&
+      inTestMode == other.inTestMode &&
+      updatePubspec == other.updatePubspec &&
+      listEqual(codes, other.codes, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -4999,15 +4834,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditBulkFixesResult) {
-      return message == other.message &&
-          listEqual(edits, other.edits,
-              (SourceFileEdit a, SourceFileEdit b) => a == b) &&
-          listEqual(details, other.details, (BulkFix a, BulkFix b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditBulkFixesResult &&
+      message == other.message &&
+      listEqual(
+          edits, other.edits, (SourceFileEdit a, SourceFileEdit b) => a == b) &&
+      listEqual(details, other.details, (BulkFix a, BulkFix b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -5068,13 +4900,9 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatIfEnabledParams) {
-      return listEqual(
-          directories, other.directories, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditFormatIfEnabledParams &&
+      listEqual(directories, other.directories, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hashAll(directories);
@@ -5139,13 +4967,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatIfEnabledResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditFormatIfEnabledResult &&
+      listEqual(
           edits, other.edits, (SourceFileEdit a, SourceFileEdit b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(edits);
@@ -5242,15 +5067,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatParams) {
-      return file == other.file &&
-          selectionOffset == other.selectionOffset &&
-          selectionLength == other.selectionLength &&
-          lineLength == other.lineLength;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditFormatParams &&
+      file == other.file &&
+      selectionOffset == other.selectionOffset &&
+      selectionLength == other.selectionLength &&
+      lineLength == other.lineLength;
 
   @override
   int get hashCode => Object.hash(
@@ -5342,15 +5164,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditFormatResult) {
-      return listEqual(
-              edits, other.edits, (SourceEdit a, SourceEdit b) => a == b) &&
-          selectionOffset == other.selectionOffset &&
-          selectionLength == other.selectionLength;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditFormatResult &&
+      listEqual(edits, other.edits, (SourceEdit a, SourceEdit b) => a == b) &&
+      selectionOffset == other.selectionOffset &&
+      selectionLength == other.selectionLength;
 
   @override
   int get hashCode => Object.hash(
@@ -5432,14 +5250,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAssistsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetAssistsParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(
@@ -5506,13 +5321,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAssistsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditGetAssistsResult &&
+      listEqual(
           assists, other.assists, (SourceChange a, SourceChange b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(assists);
@@ -5591,14 +5403,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAvailableRefactoringsParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetAvailableRefactoringsParams &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(
@@ -5666,13 +5475,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetAvailableRefactoringsResult) {
-      return listEqual(
+  bool operator ==(Object other) =>
+      other is EditGetAvailableRefactoringsResult &&
+      listEqual(
           kinds, other.kinds, (RefactoringKind a, RefactoringKind b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(kinds);
@@ -5739,12 +5545,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetFixesParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetFixesParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -5810,13 +5614,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetFixesResult) {
-      return listEqual(fixes, other.fixes,
+  bool operator ==(Object other) =>
+      other is EditGetFixesResult &&
+      listEqual(fixes, other.fixes,
           (AnalysisErrorFixes a, AnalysisErrorFixes b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(fixes);
@@ -5896,12 +5697,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetPostfixCompletionParams) {
-      return file == other.file && key == other.key && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetPostfixCompletionParams &&
+      file == other.file &&
+      key == other.key &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -5965,12 +5765,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetPostfixCompletionResult) {
-      return change == other.change;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetPostfixCompletionResult && change == other.change;
 
   @override
   int get hashCode => change.hashCode;
@@ -6095,17 +5891,14 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetRefactoringParams) {
-      return kind == other.kind &&
-          file == other.file &&
-          offset == other.offset &&
-          length == other.length &&
-          validateOnly == other.validateOnly &&
-          options == other.options;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetRefactoringParams &&
+      kind == other.kind &&
+      file == other.file &&
+      offset == other.offset &&
+      length == other.length &&
+      validateOnly == other.validateOnly &&
+      options == other.options;
 
   @override
   int get hashCode => Object.hash(
@@ -6271,21 +6064,18 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetRefactoringResult) {
-      return listEqual(initialProblems, other.initialProblems,
-              (RefactoringProblem a, RefactoringProblem b) => a == b) &&
-          listEqual(optionsProblems, other.optionsProblems,
-              (RefactoringProblem a, RefactoringProblem b) => a == b) &&
-          listEqual(finalProblems, other.finalProblems,
-              (RefactoringProblem a, RefactoringProblem b) => a == b) &&
-          feedback == other.feedback &&
-          change == other.change &&
-          listEqual(potentialEdits, other.potentialEdits,
-              (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetRefactoringResult &&
+      listEqual(initialProblems, other.initialProblems,
+          (RefactoringProblem a, RefactoringProblem b) => a == b) &&
+      listEqual(optionsProblems, other.optionsProblems,
+          (RefactoringProblem a, RefactoringProblem b) => a == b) &&
+      listEqual(finalProblems, other.finalProblems,
+          (RefactoringProblem a, RefactoringProblem b) => a == b) &&
+      feedback == other.feedback &&
+      change == other.change &&
+      listEqual(
+          potentialEdits, other.potentialEdits, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -6360,12 +6150,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetStatementCompletionParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetStatementCompletionParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -6441,12 +6229,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditGetStatementCompletionResult) {
-      return change == other.change && whitespaceOnly == other.whitespaceOnly;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditGetStatementCompletionResult &&
+      change == other.change &&
+      whitespaceOnly == other.whitespaceOnly;
 
   @override
   int get hashCode => Object.hash(
@@ -6536,15 +6322,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditImportElementsParams) {
-      return file == other.file &&
-          listEqual(elements, other.elements,
-              (ImportedElements a, ImportedElements b) => a == b) &&
-          offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditImportElementsParams &&
+      file == other.file &&
+      listEqual(elements, other.elements,
+          (ImportedElements a, ImportedElements b) => a == b) &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -6613,12 +6396,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditImportElementsResult) {
-      return edit == other.edit;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditImportElementsResult && edit == other.edit;
 
   @override
   int get hashCode => edit.hashCode;
@@ -6698,12 +6477,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditIsPostfixCompletionApplicableParams) {
-      return file == other.file && key == other.key && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditIsPostfixCompletionApplicableParams &&
+      file == other.file &&
+      key == other.key &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -6767,12 +6545,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditIsPostfixCompletionApplicableResult) {
-      return value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditIsPostfixCompletionApplicableResult && value == other.value;
 
   @override
   int get hashCode => value.hashCode;
@@ -6859,13 +6633,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditListPostfixCompletionTemplatesResult) {
-      return listEqual(templates, other.templates,
+  bool operator ==(Object other) =>
+      other is EditListPostfixCompletionTemplatesResult &&
+      listEqual(templates, other.templates,
           (PostfixTemplateDescriptor a, PostfixTemplateDescriptor b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(templates);
@@ -6922,12 +6693,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditOrganizeDirectivesParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditOrganizeDirectivesParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -6988,12 +6755,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditOrganizeDirectivesResult) {
-      return edit == other.edit;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditOrganizeDirectivesResult && edit == other.edit;
 
   @override
   int get hashCode => edit.hashCode;
@@ -7049,12 +6812,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditSortMembersParams) {
-      return file == other.file;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditSortMembersParams && file == other.file;
 
   @override
   int get hashCode => file.hashCode;
@@ -7114,12 +6873,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is EditSortMembersResult) {
-      return edit == other.edit;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is EditSortMembersResult && edit == other.edit;
 
   @override
   int get hashCode => edit.hashCode;
@@ -7296,22 +7051,19 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ElementDeclaration) {
-      return name == other.name &&
-          kind == other.kind &&
-          fileIndex == other.fileIndex &&
-          offset == other.offset &&
-          line == other.line &&
-          column == other.column &&
-          codeOffset == other.codeOffset &&
-          codeLength == other.codeLength &&
-          className == other.className &&
-          mixinName == other.mixinName &&
-          parameters == other.parameters;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ElementDeclaration &&
+      name == other.name &&
+      kind == other.kind &&
+      fileIndex == other.fileIndex &&
+      offset == other.offset &&
+      line == other.line &&
+      column == other.column &&
+      codeOffset == other.codeOffset &&
+      codeLength == other.codeLength &&
+      className == other.className &&
+      mixinName == other.mixinName &&
+      parameters == other.parameters;
 
   @override
   int get hashCode => Object.hash(
@@ -7381,12 +7133,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutableFile) {
-      return file == other.file && kind == other.kind;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutableFile && file == other.file && kind == other.kind;
 
   @override
   int get hashCode => Object.hash(
@@ -7485,12 +7233,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionCreateContextParams) {
-      return contextRoot == other.contextRoot;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionCreateContextParams && contextRoot == other.contextRoot;
 
   @override
   int get hashCode => contextRoot.hashCode;
@@ -7549,12 +7293,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionCreateContextResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionCreateContextResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -7611,12 +7351,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionDeleteContextParams) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionDeleteContextParams && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -7781,25 +7517,22 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionGetSuggestionsParams) {
-      return code == other.code &&
-          offset == other.offset &&
-          contextFile == other.contextFile &&
-          contextOffset == other.contextOffset &&
-          listEqual(
-              variables,
-              other.variables,
-              (RuntimeCompletionVariable a, RuntimeCompletionVariable b) =>
-                  a == b) &&
-          listEqual(
-              expressions,
-              other.expressions,
-              (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
-                  a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionGetSuggestionsParams &&
+      code == other.code &&
+      offset == other.offset &&
+      contextFile == other.contextFile &&
+      contextOffset == other.contextOffset &&
+      listEqual(
+          variables,
+          other.variables,
+          (RuntimeCompletionVariable a, RuntimeCompletionVariable b) =>
+              a == b) &&
+      listEqual(
+          expressions,
+          other.expressions,
+          (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
+              a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -7902,18 +7635,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionGetSuggestionsResult) {
-      return listEqual(suggestions, other.suggestions,
-              (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
-          listEqual(
-              expressions,
-              other.expressions,
-              (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
-                  a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionGetSuggestionsResult &&
+      listEqual(suggestions, other.suggestions,
+          (CompletionSuggestion a, CompletionSuggestion b) => a == b) &&
+      listEqual(
+          expressions,
+          other.expressions,
+          (RuntimeCompletionExpression a, RuntimeCompletionExpression b) =>
+              a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -8002,15 +7732,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionLaunchDataParams) {
-      return file == other.file &&
-          kind == other.kind &&
-          listEqual(referencedFiles, other.referencedFiles,
-              (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionLaunchDataParams &&
+      file == other.file &&
+      kind == other.kind &&
+      listEqual(referencedFiles, other.referencedFiles,
+          (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -8094,12 +7821,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionMapUriParams) {
-      return id == other.id && file == other.file && uri == other.uri;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionMapUriParams &&
+      id == other.id &&
+      file == other.file &&
+      uri == other.uri;
 
   @override
   int get hashCode => Object.hash(
@@ -8176,12 +7902,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionMapUriResult) {
-      return file == other.file && uri == other.uri;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExecutionMapUriResult && file == other.file && uri == other.uri;
 
   @override
   int get hashCode => Object.hash(
@@ -8274,13 +7996,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExecutionSetSubscriptionsParams) {
-      return listEqual(subscriptions, other.subscriptions,
+  bool operator ==(Object other) =>
+      other is ExecutionSetSubscriptionsParams &&
+      listEqual(subscriptions, other.subscriptions,
           (ExecutionService a, ExecutionService b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(subscriptions);
@@ -8359,13 +8078,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExistingImport) {
-      return uri == other.uri &&
-          listEqual(elements, other.elements, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExistingImport &&
+      uri == other.uri &&
+      listEqual(elements, other.elements, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -8431,14 +8147,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExistingImports) {
-      return elements == other.elements &&
-          listEqual(imports, other.imports,
-              (ExistingImport a, ExistingImport b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExistingImports &&
+      elements == other.elements &&
+      listEqual(imports, other.imports,
+          (ExistingImport a, ExistingImport b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -8552,18 +8265,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractLocalVariableFeedback) {
-      return listEqual(coveringExpressionOffsets,
-              other.coveringExpressionOffsets, (int a, int b) => a == b) &&
-          listEqual(coveringExpressionLengths, other.coveringExpressionLengths,
-              (int a, int b) => a == b) &&
-          listEqual(names, other.names, (String a, String b) => a == b) &&
-          listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          listEqual(lengths, other.lengths, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractLocalVariableFeedback &&
+      listEqual(coveringExpressionOffsets, other.coveringExpressionOffsets,
+          (int a, int b) => a == b) &&
+      listEqual(coveringExpressionLengths, other.coveringExpressionLengths,
+          (int a, int b) => a == b) &&
+      listEqual(names, other.names, (String a, String b) => a == b) &&
+      listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
+      listEqual(lengths, other.lengths, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -8637,12 +8347,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractLocalVariableOptions) {
-      return name == other.name && extractAll == other.extractAll;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractLocalVariableOptions &&
+      name == other.name &&
+      extractAll == other.extractAll;
 
   @override
   int get hashCode => Object.hash(
@@ -8789,23 +8497,20 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractMethodFeedback) {
-      return offset == other.offset &&
-          length == other.length &&
-          returnType == other.returnType &&
-          listEqual(names, other.names, (String a, String b) => a == b) &&
-          canCreateGetter == other.canCreateGetter &&
-          listEqual(
-              parameters,
-              other.parameters,
-              (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
-                  a == b) &&
-          listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
-          listEqual(lengths, other.lengths, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractMethodFeedback &&
+      offset == other.offset &&
+      length == other.length &&
+      returnType == other.returnType &&
+      listEqual(names, other.names, (String a, String b) => a == b) &&
+      canCreateGetter == other.canCreateGetter &&
+      listEqual(
+          parameters,
+          other.parameters,
+          (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
+              a == b) &&
+      listEqual(offsets, other.offsets, (int a, int b) => a == b) &&
+      listEqual(lengths, other.lengths, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -8934,20 +8639,17 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractMethodOptions) {
-      return returnType == other.returnType &&
-          createGetter == other.createGetter &&
-          name == other.name &&
-          listEqual(
-              parameters,
-              other.parameters,
-              (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
-                  a == b) &&
-          extractAll == other.extractAll;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractMethodOptions &&
+      returnType == other.returnType &&
+      createGetter == other.createGetter &&
+      name == other.name &&
+      listEqual(
+          parameters,
+          other.parameters,
+          (RefactoringMethodParameter a, RefactoringMethodParameter b) =>
+              a == b) &&
+      extractAll == other.extractAll;
 
   @override
   int get hashCode => Object.hash(
@@ -8988,12 +8690,7 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractWidgetFeedback) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is ExtractWidgetFeedback;
 
   @override
   int get hashCode => 0;
@@ -9045,12 +8742,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ExtractWidgetOptions) {
-      return name == other.name;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ExtractWidgetOptions && name == other.name;
 
   @override
   int get hashCode => name.hashCode;
@@ -9149,12 +8842,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterGetWidgetDescriptionParams) {
-      return file == other.file && offset == other.offset;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterGetWidgetDescriptionParams &&
+      file == other.file &&
+      offset == other.offset;
 
   @override
   int get hashCode => Object.hash(
@@ -9225,13 +8916,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterGetWidgetDescriptionResult) {
-      return listEqual(properties, other.properties,
+  bool operator ==(Object other) =>
+      other is FlutterGetWidgetDescriptionResult &&
+      listEqual(properties, other.properties,
           (FlutterWidgetProperty a, FlutterWidgetProperty b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(properties);
@@ -9449,28 +9137,22 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterOutline) {
-      return kind == other.kind &&
-          offset == other.offset &&
-          length == other.length &&
-          codeOffset == other.codeOffset &&
-          codeLength == other.codeLength &&
-          label == other.label &&
-          dartElement == other.dartElement &&
-          listEqual(
-              attributes,
-              other.attributes,
-              (FlutterOutlineAttribute a, FlutterOutlineAttribute b) =>
-                  a == b) &&
-          className == other.className &&
-          parentAssociationLabel == other.parentAssociationLabel &&
-          variableName == other.variableName &&
-          listEqual(children, other.children,
-              (FlutterOutline a, FlutterOutline b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterOutline &&
+      kind == other.kind &&
+      offset == other.offset &&
+      length == other.length &&
+      codeOffset == other.codeOffset &&
+      codeLength == other.codeLength &&
+      label == other.label &&
+      dartElement == other.dartElement &&
+      listEqual(attributes, other.attributes,
+          (FlutterOutlineAttribute a, FlutterOutlineAttribute b) => a == b) &&
+      className == other.className &&
+      parentAssociationLabel == other.parentAssociationLabel &&
+      variableName == other.variableName &&
+      listEqual(children, other.children,
+          (FlutterOutline a, FlutterOutline b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -9623,18 +9305,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterOutlineAttribute) {
-      return name == other.name &&
-          label == other.label &&
-          literalValueBoolean == other.literalValueBoolean &&
-          literalValueInteger == other.literalValueInteger &&
-          literalValueString == other.literalValueString &&
-          nameLocation == other.nameLocation &&
-          valueLocation == other.valueLocation;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterOutlineAttribute &&
+      name == other.name &&
+      label == other.label &&
+      literalValueBoolean == other.literalValueBoolean &&
+      literalValueInteger == other.literalValueInteger &&
+      literalValueString == other.literalValueString &&
+      nameLocation == other.nameLocation &&
+      valueLocation == other.valueLocation;
 
   @override
   int get hashCode => Object.hash(
@@ -9760,12 +9439,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterOutlineParams) {
-      return file == other.file && outline == other.outline;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterOutlineParams &&
+      file == other.file &&
+      outline == other.outline;
 
   @override
   int get hashCode => Object.hash(
@@ -9860,16 +9537,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterSetSubscriptionsParams) {
-      return mapEqual(
+  bool operator ==(Object other) =>
+      other is FlutterSetSubscriptionsParams &&
+      mapEqual(
           subscriptions,
           other.subscriptions,
           (List<String> a, List<String> b) =>
               listEqual(a, b, (String a, String b) => a == b));
-    }
-    return false;
-  }
 
   @override
   int get hashCode =>
@@ -9971,12 +9645,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterSetWidgetPropertyValueParams) {
-      return id == other.id && value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterSetWidgetPropertyValueParams &&
+      id == other.id &&
+      value == other.value;
 
   @override
   int get hashCode => Object.hash(
@@ -10039,12 +9711,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterSetWidgetPropertyValueResult) {
-      return change == other.change;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterSetWidgetPropertyValueResult && change == other.change;
 
   @override
   int get hashCode => change.hashCode;
@@ -10221,21 +9889,18 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetProperty) {
-      return documentation == other.documentation &&
-          expression == other.expression &&
-          id == other.id &&
-          isRequired == other.isRequired &&
-          isSafeToUpdate == other.isSafeToUpdate &&
-          name == other.name &&
-          listEqual(children, other.children,
-              (FlutterWidgetProperty a, FlutterWidgetProperty b) => a == b) &&
-          editor == other.editor &&
-          value == other.value;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetProperty &&
+      documentation == other.documentation &&
+      expression == other.expression &&
+      id == other.id &&
+      isRequired == other.isRequired &&
+      isSafeToUpdate == other.isSafeToUpdate &&
+      name == other.name &&
+      listEqual(children, other.children,
+          (FlutterWidgetProperty a, FlutterWidgetProperty b) => a == b) &&
+      editor == other.editor &&
+      value == other.value;
 
   @override
   int get hashCode => Object.hash(
@@ -10309,18 +9974,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetPropertyEditor) {
-      return kind == other.kind &&
-          listEqual(
-              enumItems,
-              other.enumItems,
-              (FlutterWidgetPropertyValueEnumItem a,
-                      FlutterWidgetPropertyValueEnumItem b) =>
-                  a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetPropertyEditor &&
+      kind == other.kind &&
+      listEqual(
+          enumItems,
+          other.enumItems,
+          (FlutterWidgetPropertyValueEnumItem a,
+                  FlutterWidgetPropertyValueEnumItem b) =>
+              a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -10496,17 +10158,14 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetPropertyValue) {
-      return boolValue == other.boolValue &&
-          doubleValue == other.doubleValue &&
-          intValue == other.intValue &&
-          stringValue == other.stringValue &&
-          enumValue == other.enumValue &&
-          expression == other.expression;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetPropertyValue &&
+      boolValue == other.boolValue &&
+      doubleValue == other.doubleValue &&
+      intValue == other.intValue &&
+      stringValue == other.stringValue &&
+      enumValue == other.enumValue &&
+      expression == other.expression;
 
   @override
   int get hashCode => Object.hash(
@@ -10604,15 +10263,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is FlutterWidgetPropertyValueEnumItem) {
-      return libraryUri == other.libraryUri &&
-          className == other.className &&
-          name == other.name &&
-          documentation == other.documentation;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is FlutterWidgetPropertyValueEnumItem &&
+      libraryUri == other.libraryUri &&
+      className == other.className &&
+      name == other.name &&
+      documentation == other.documentation;
 
   @override
   int get hashCode => Object.hash(
@@ -10873,23 +10529,20 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is HoverInformation) {
-      return offset == other.offset &&
-          length == other.length &&
-          containingLibraryPath == other.containingLibraryPath &&
-          containingLibraryName == other.containingLibraryName &&
-          containingClassDescription == other.containingClassDescription &&
-          dartdoc == other.dartdoc &&
-          elementDescription == other.elementDescription &&
-          elementKind == other.elementKind &&
-          isDeprecated == other.isDeprecated &&
-          parameter == other.parameter &&
-          propagatedType == other.propagatedType &&
-          staticType == other.staticType;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is HoverInformation &&
+      offset == other.offset &&
+      length == other.length &&
+      containingLibraryPath == other.containingLibraryPath &&
+      containingLibraryName == other.containingLibraryName &&
+      containingClassDescription == other.containingClassDescription &&
+      dartdoc == other.dartdoc &&
+      elementDescription == other.elementDescription &&
+      elementKind == other.elementKind &&
+      isDeprecated == other.isDeprecated &&
+      parameter == other.parameter &&
+      propagatedType == other.propagatedType &&
+      staticType == other.staticType;
 
   @override
   int get hashCode => Object.hash(
@@ -10959,12 +10612,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImplementedClass) {
-      return offset == other.offset && length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImplementedClass &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(
@@ -11024,12 +10675,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImplementedMember) {
-      return offset == other.offset && length == other.length;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImplementedMember &&
+      offset == other.offset &&
+      length == other.length;
 
   @override
   int get hashCode => Object.hash(
@@ -11104,15 +10753,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImportedElementSet) {
-      return listEqual(
-              strings, other.strings, (String a, String b) => a == b) &&
-          listEqual(uris, other.uris, (int a, int b) => a == b) &&
-          listEqual(names, other.names, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImportedElementSet &&
+      listEqual(strings, other.strings, (String a, String b) => a == b) &&
+      listEqual(uris, other.uris, (int a, int b) => a == b) &&
+      listEqual(names, other.names, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -11186,14 +10831,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ImportedElements) {
-      return path == other.path &&
-          prefix == other.prefix &&
-          listEqual(elements, other.elements, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ImportedElements &&
+      path == other.path &&
+      prefix == other.prefix &&
+      listEqual(elements, other.elements, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -11256,12 +10898,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is InlineLocalVariableFeedback) {
-      return name == other.name && occurrences == other.occurrences;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is InlineLocalVariableFeedback &&
+      name == other.name &&
+      occurrences == other.occurrences;
 
   @override
   int get hashCode => Object.hash(
@@ -11351,14 +10991,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is InlineMethodFeedback) {
-      return className == other.className &&
-          methodName == other.methodName &&
-          isDeclaration == other.isDeclaration;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is InlineMethodFeedback &&
+      className == other.className &&
+      methodName == other.methodName &&
+      isDeclaration == other.isDeclaration;
 
   @override
   int get hashCode => Object.hash(
@@ -11429,12 +11066,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is InlineMethodOptions) {
-      return deleteSource == other.deleteSource && inlineAll == other.inlineAll;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is InlineMethodOptions &&
+      deleteSource == other.deleteSource &&
+      inlineAll == other.inlineAll;
 
   @override
   int get hashCode => Object.hash(
@@ -11498,14 +11133,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is LibraryPathSet) {
-      return scope == other.scope &&
-          listEqual(
-              libraryPaths, other.libraryPaths, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LibraryPathSet &&
+      scope == other.scope &&
+      listEqual(
+          libraryPaths, other.libraryPaths, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -11564,12 +11196,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is LspHandleParams) {
-      return lspMessage == other.lspMessage;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LspHandleParams && lspMessage == other.lspMessage;
 
   @override
   int get hashCode => lspMessage.hashCode;
@@ -11627,12 +11255,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is LspHandleResult) {
-      return lspResponse == other.lspResponse;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LspHandleResult && lspResponse == other.lspResponse;
 
   @override
   int get hashCode => lspResponse.hashCode;
@@ -11687,12 +11311,9 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is LspNotificationParams) {
-      return lspNotification == other.lspNotification;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is LspNotificationParams &&
+      lspNotification == other.lspNotification;
 
   @override
   int get hashCode => lspNotification.hashCode;
@@ -11739,12 +11360,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is MessageAction) {
-      return label == other.label;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is MessageAction && label == other.label;
 
   @override
   int get hashCode => label.hashCode;
@@ -11849,12 +11466,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is MoveFileOptions) {
-      return newFile == other.newFile;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is MoveFileOptions && newFile == other.newFile;
 
   @override
   int get hashCode => newFile.hashCode;
@@ -11913,12 +11526,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is OverriddenMember) {
-      return element == other.element && className == other.className;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is OverriddenMember &&
+      element == other.element &&
+      className == other.className;
 
   @override
   int get hashCode => Object.hash(
@@ -12016,16 +11627,13 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is Override) {
-      return offset == other.offset &&
-          length == other.length &&
-          superclassMember == other.superclassMember &&
-          listEqual(interfaceMembers, other.interfaceMembers,
-              (OverriddenMember a, OverriddenMember b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is Override &&
+      offset == other.offset &&
+      length == other.length &&
+      superclassMember == other.superclassMember &&
+      listEqual(interfaceMembers, other.interfaceMembers,
+          (OverriddenMember a, OverriddenMember b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -12100,12 +11708,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is PostfixTemplateDescriptor) {
-      return name == other.name && key == other.key && example == other.example;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is PostfixTemplateDescriptor &&
+      name == other.name &&
+      key == other.key &&
+      example == other.example;
 
   @override
   int get hashCode => Object.hash(
@@ -12157,12 +11764,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is PubStatus) {
-      return isListingPackageDirs == other.isListingPackageDirs;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is PubStatus && isListingPackageDirs == other.isListingPackageDirs;
 
   @override
   int get hashCode => isListingPackageDirs.hashCode;
@@ -12193,12 +11796,7 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RefactoringFeedback) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is RefactoringFeedback;
 
   @override
   int get hashCode => 0;
@@ -12228,12 +11826,7 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RefactoringOptions) {
-      return true;
-    }
-    return false;
-  }
+  bool operator ==(Object other) => other is RefactoringOptions;
 
   @override
   int get hashCode => 0;
@@ -12316,15 +11909,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RenameFeedback) {
-      return offset == other.offset &&
-          length == other.length &&
-          elementKindName == other.elementKindName &&
-          oldName == other.oldName;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RenameFeedback &&
+      offset == other.offset &&
+      length == other.length &&
+      elementKindName == other.elementKindName &&
+      oldName == other.oldName;
 
   @override
   int get hashCode => Object.hash(
@@ -12382,12 +11972,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RenameOptions) {
-      return newName == other.newName;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RenameOptions && newName == other.newName;
 
   @override
   int get hashCode => newName.hashCode;
@@ -12460,14 +12046,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RequestError) {
-      return code == other.code &&
-          message == other.message &&
-          stackTrace == other.stackTrace;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RequestError &&
+      code == other.code &&
+      message == other.message &&
+      stackTrace == other.stackTrace;
 
   @override
   int get hashCode => Object.hash(
@@ -12734,14 +12317,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RuntimeCompletionExpression) {
-      return offset == other.offset &&
-          length == other.length &&
-          type == other.type;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RuntimeCompletionExpression &&
+      offset == other.offset &&
+      length == other.length &&
+      type == other.type;
 
   @override
   int get hashCode => Object.hash(
@@ -12903,29 +12483,26 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RuntimeCompletionExpressionType) {
-      return libraryPath == other.libraryPath &&
-          kind == other.kind &&
-          name == other.name &&
-          listEqual(
-              typeArguments,
-              other.typeArguments,
-              (RuntimeCompletionExpressionType a,
-                      RuntimeCompletionExpressionType b) =>
-                  a == b) &&
-          returnType == other.returnType &&
-          listEqual(
-              parameterTypes,
-              other.parameterTypes,
-              (RuntimeCompletionExpressionType a,
-                      RuntimeCompletionExpressionType b) =>
-                  a == b) &&
-          listEqual(parameterNames, other.parameterNames,
-              (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RuntimeCompletionExpressionType &&
+      libraryPath == other.libraryPath &&
+      kind == other.kind &&
+      name == other.name &&
+      listEqual(
+          typeArguments,
+          other.typeArguments,
+          (RuntimeCompletionExpressionType a,
+                  RuntimeCompletionExpressionType b) =>
+              a == b) &&
+      returnType == other.returnType &&
+      listEqual(
+          parameterTypes,
+          other.parameterTypes,
+          (RuntimeCompletionExpressionType a,
+                  RuntimeCompletionExpressionType b) =>
+              a == b) &&
+      listEqual(
+          parameterNames, other.parameterNames, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -13028,12 +12605,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is RuntimeCompletionVariable) {
-      return name == other.name && type == other.type;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is RuntimeCompletionVariable &&
+      name == other.name &&
+      type == other.type;
 
   @override
   int get hashCode => Object.hash(
@@ -13119,14 +12694,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindElementReferencesParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          includePotential == other.includePotential;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindElementReferencesParams &&
+      file == other.file &&
+      offset == other.offset &&
+      includePotential == other.includePotential;
 
   @override
   int get hashCode => Object.hash(
@@ -13209,12 +12781,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindElementReferencesResult) {
-      return id == other.id && element == other.element;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindElementReferencesResult &&
+      id == other.id &&
+      element == other.element;
 
   @override
   int get hashCode => Object.hash(
@@ -13274,12 +12844,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberDeclarationsParams) {
-      return name == other.name;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberDeclarationsParams && name == other.name;
 
   @override
   int get hashCode => name.hashCode;
@@ -13338,12 +12904,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberDeclarationsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberDeclarationsResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -13400,12 +12962,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberReferencesParams) {
-      return name == other.name;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberReferencesParams && name == other.name;
 
   @override
   int get hashCode => name.hashCode;
@@ -13464,12 +13022,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindMemberReferencesResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindMemberReferencesResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -13528,12 +13082,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindTopLevelDeclarationsParams) {
-      return pattern == other.pattern;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindTopLevelDeclarationsParams && pattern == other.pattern;
 
   @override
   int get hashCode => pattern.hashCode;
@@ -13592,12 +13142,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchFindTopLevelDeclarationsResult) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchFindTopLevelDeclarationsResult && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -13686,14 +13232,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetElementDeclarationsParams) {
-      return file == other.file &&
-          pattern == other.pattern &&
-          maxResults == other.maxResults;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchGetElementDeclarationsParams &&
+      file == other.file &&
+      pattern == other.pattern &&
+      maxResults == other.maxResults;
 
   @override
   int get hashCode => Object.hash(
@@ -13773,14 +13316,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetElementDeclarationsResult) {
-      return listEqual(declarations, other.declarations,
-              (ElementDeclaration a, ElementDeclaration b) => a == b) &&
-          listEqual(files, other.files, (String a, String b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchGetElementDeclarationsResult &&
+      listEqual(declarations, other.declarations,
+          (ElementDeclaration a, ElementDeclaration b) => a == b) &&
+      listEqual(files, other.files, (String a, String b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -13866,14 +13406,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetTypeHierarchyParams) {
-      return file == other.file &&
-          offset == other.offset &&
-          superOnly == other.superOnly;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchGetTypeHierarchyParams &&
+      file == other.file &&
+      offset == other.offset &&
+      superOnly == other.superOnly;
 
   @override
   int get hashCode => Object.hash(
@@ -13951,13 +13488,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchGetTypeHierarchyResult) {
-      return listEqual(hierarchyItems, other.hierarchyItems,
+  bool operator ==(Object other) =>
+      other is SearchGetTypeHierarchyResult &&
+      listEqual(hierarchyItems, other.hierarchyItems,
           (TypeHierarchyItem a, TypeHierarchyItem b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(hierarchyItems ?? []);
@@ -14048,15 +13582,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchResult) {
-      return location == other.location &&
-          kind == other.kind &&
-          isPotential == other.isPotential &&
-          listEqual(path, other.path, (Element a, Element b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchResult &&
+      location == other.location &&
+      kind == other.kind &&
+      isPotential == other.isPotential &&
+      listEqual(path, other.path, (Element a, Element b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -14198,15 +13729,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is SearchResultsParams) {
-      return id == other.id &&
-          listEqual(results, other.results,
-              (SearchResult a, SearchResult b) => a == b) &&
-          isLast == other.isLast;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is SearchResultsParams &&
+      id == other.id &&
+      listEqual(
+          results, other.results, (SearchResult a, SearchResult b) => a == b) &&
+      isLast == other.isLast;
 
   @override
   int get hashCode => Object.hash(
@@ -14266,12 +13794,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerCancelRequestParams) {
-      return id == other.id;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerCancelRequestParams && id == other.id;
 
   @override
   int get hashCode => id.hashCode;
@@ -14357,12 +13881,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerConnectedParams) {
-      return version == other.version && pid == other.pid;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerConnectedParams &&
+      version == other.version &&
+      pid == other.pid;
 
   @override
   int get hashCode => Object.hash(
@@ -14446,14 +13968,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerErrorParams) {
-      return isFatal == other.isFatal &&
-          message == other.message &&
-          stackTrace == other.stackTrace;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerErrorParams &&
+      isFatal == other.isFatal &&
+      message == other.message &&
+      stackTrace == other.stackTrace;
 
   @override
   int get hashCode => Object.hash(
@@ -14535,12 +14054,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerGetVersionResult) {
-      return version == other.version;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerGetVersionResult && version == other.version;
 
   @override
   int get hashCode => version.hashCode;
@@ -14612,12 +14127,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerLogEntry) {
-      return time == other.time && kind == other.kind && data == other.data;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerLogEntry &&
+      time == other.time &&
+      kind == other.kind &&
+      data == other.data;
 
   @override
   int get hashCode => Object.hash(
@@ -14735,12 +14249,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerLogParams) {
-      return entry == other.entry;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerLogParams && entry == other.entry;
 
   @override
   int get hashCode => entry.hashCode;
@@ -14797,12 +14307,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerOpenUrlRequestParams) {
-      return url == other.url;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerOpenUrlRequestParams && url == other.url;
 
   @override
   int get hashCode => url.hashCode;
@@ -14877,12 +14383,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerPluginErrorParams) {
-      return message == other.message;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerPluginErrorParams && message == other.message;
 
   @override
   int get hashCode => message.hashCode;
@@ -15027,15 +14529,11 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerSetClientCapabilitiesParams) {
-      return listEqual(
-              requests, other.requests, (String a, String b) => a == b) &&
-          supportsUris == other.supportsUris &&
-          lspCapabilities == other.lspCapabilities;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerSetClientCapabilitiesParams &&
+      listEqual(requests, other.requests, (String a, String b) => a == b) &&
+      supportsUris == other.supportsUris &&
+      lspCapabilities == other.lspCapabilities;
 
   @override
   int get hashCode => Object.hash(
@@ -15120,13 +14618,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerSetSubscriptionsParams) {
-      return listEqual(subscriptions, other.subscriptions,
+  bool operator ==(Object other) =>
+      other is ServerSetSubscriptionsParams &&
+      listEqual(subscriptions, other.subscriptions,
           (ServerService a, ServerService b) => a == b);
-    }
-    return false;
-  }
 
   @override
   int get hashCode => Object.hashAll(subscriptions);
@@ -15231,15 +14726,12 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerShowMessageRequestParams) {
-      return type == other.type &&
-          message == other.message &&
-          listEqual(actions, other.actions,
-              (MessageAction a, MessageAction b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerShowMessageRequestParams &&
+      type == other.type &&
+      message == other.message &&
+      listEqual(
+          actions, other.actions, (MessageAction a, MessageAction b) => a == b);
 
   @override
   int get hashCode => Object.hash(
@@ -15305,12 +14797,8 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerShowMessageRequestResult) {
-      return action == other.action;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerShowMessageRequestResult && action == other.action;
 
   @override
   int get hashCode => action.hashCode;
@@ -15422,12 +14910,10 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is ServerStatusParams) {
-      return analysis == other.analysis && pub == other.pub;
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is ServerStatusParams &&
+      analysis == other.analysis &&
+      pub == other.pub;
 
   @override
   int get hashCode => Object.hash(
@@ -15579,18 +15065,15 @@
   String toString() => json.encode(toJson());
 
   @override
-  bool operator ==(Object other) {
-    if (other is TypeHierarchyItem) {
-      return classElement == other.classElement &&
-          displayName == other.displayName &&
-          memberElement == other.memberElement &&
-          superclass == other.superclass &&
-          listEqual(interfaces, other.interfaces, (int a, int b) => a == b) &&
-          listEqual(mixins, other.mixins, (int a, int b) => a == b) &&
-          listEqual(subclasses, other.subclasses, (int a, int b) => a == b);
-    }
-    return false;
-  }
+  bool operator ==(Object other) =>
+      other is TypeHierarchyItem &&
+      classElement == other.classElement &&
+      displayName == other.displayName &&
+      memberElement == other.memberElement &&
+      superclass == other.superclass &&
+      listEqual(interfaces, other.interfaces, (int a, int b) => a == b) &&
+      listEqual(mixins, other.mixins, (int a, int b) => a == b) &&
+      listEqual(subclasses, other.subclasses, (int a, int b) => a == b);
 
   @override
   int get hashCode => Object.hash(
diff --git a/pkg/analysis_server_client/test/live_test.dart b/pkg/analysis_server_client/test/live_test.dart
index e9ed329..496da18 100644
--- a/pkg/analysis_server_client/test/live_test.dart
+++ b/pkg/analysis_server_client/test/live_test.dart
@@ -22,7 +22,7 @@
     }
 
     var json = await server.send(
-        SERVER_REQUEST_GET_VERSION, ServerGetVersionParams().toJson());
+        serverRequestGetVersion, ServerGetVersionParams().toJson());
     final result =
         ServerGetVersionResult.fromJson(ResponseDecoder(null), 'result', json);
     await server.stop();
diff --git a/pkg/analysis_server_client/test/verify_sorted_test.dart b/pkg/analysis_server_client/test/verify_sorted_test.dart
index c98f30f..3bfc3f7 100644
--- a/pkg/analysis_server_client/test/verify_sorted_test.dart
+++ b/pkg/analysis_server_client/test/verify_sorted_test.dart
@@ -37,8 +37,8 @@
           provider.pathContext.relative(file.path, from: packagePath);
 
       test(relativePath, () async {
-        var response = await server.send(EDIT_REQUEST_SORT_MEMBERS,
-            EditSortMembersParams(file.path).toJson());
+        var response = await server.send(
+            editRequestSortMembers, EditSortMembersParams(file.path).toJson());
         var result = EditSortMembersResult.fromJson(
             ResponseDecoder(null), 'result', response);
 
@@ -70,9 +70,9 @@
   }
 
   // start analysis
-  await server.send(SERVER_REQUEST_SET_SUBSCRIPTIONS,
+  await server.send(serverRequestSetSubscriptions,
       ServerSetSubscriptionsParams([ServerService.STATUS]).toJson());
-  await server.send(ANALYSIS_REQUEST_SET_ANALYSIS_ROOTS,
+  await server.send(analysisRequestSetAnalysisRoots,
       AnalysisSetAnalysisRootsParams([packagePath], const []).toJson());
 
   // wait for initial analysis to complete
diff --git a/pkg/analysis_server_plugin/CHANGELOG.md b/pkg/analysis_server_plugin/CHANGELOG.md
index b44e0f3..9b47952 100644
--- a/pkg/analysis_server_plugin/CHANGELOG.md
+++ b/pkg/analysis_server_plugin/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 0.3.5-dev
+
+- Require version `10.0.0` of the `analyzer` package.
+- Require version `0.14.0` of the `analyzer_plugin` package.
+- `PluginRegistry.registerFixForRule` now accepts a `DiagnosticCode` (a
+  supertype of the old parameter type, `LintCode`).
+
 ## 0.3.4
 
 - Require version `9.0.0` of the `analyzer` package.
diff --git a/pkg/analysis_server_plugin/api.txt b/pkg/analysis_server_plugin/api.txt
index 8796234..73c99de 100644
--- a/pkg/analysis_server_plugin/api.txt
+++ b/pkg/analysis_server_plugin/api.txt
@@ -147,7 +147,7 @@
   PluginRegistry (class extends Object):
     new (constructor: PluginRegistry Function())
     registerAssist (method: void Function(CorrectionProducer<ParsedUnitResult> Function({required CorrectionProducerContext context})))
-    registerFixForRule (method: void Function(LintCode, CorrectionProducer<ParsedUnitResult> Function({required CorrectionProducerContext context})))
+    registerFixForRule (method: void Function(DiagnosticCode, CorrectionProducer<ParsedUnitResult> Function({required CorrectionProducerContext context})))
     registerLintRule (method: void Function(AbstractAnalysisRule))
     registerWarningRule (method: void Function(AbstractAnalysisRule))
 dart:async:
@@ -164,6 +164,7 @@
   int (referenced)
 package:_fe_analyzer_shared/src/base/errors.dart:
   Diagnostic (referenced)
+  DiagnosticCode (referenced)
 package:_fe_analyzer_shared/src/scanner/token.dart:
   Token (referenced)
 package:analyzer/analysis_rule/analysis_rule.dart:
@@ -212,8 +213,6 @@
 package:analyzer/src/dart/element/inheritance_manager3.dart:
   InheritanceManager3 (referenced)
   Name (referenced)
-package:analyzer/src/dart/error/lint_codes.dart:
-  LintCode (referenced)
 package:analyzer_plugin/protocol/protocol_common.dart:
   SourceChange (referenced)
 package:analyzer_plugin/utilities/assist/assist.dart:
diff --git a/pkg/analysis_server_plugin/doc/writing_a_plugin.md b/pkg/analysis_server_plugin/doc/writing_a_plugin.md
index 5484807..738fd6c 100644
--- a/pkg/analysis_server_plugin/doc/writing_a_plugin.md
+++ b/pkg/analysis_server_plugin/doc/writing_a_plugin.md
@@ -36,6 +36,9 @@
 
 class SimplePlugin extends Plugin {
   @override
+  String get name => 'Simple plugin';
+
+  @override
   void register(PluginRegistry registry) {
     // Here we register analysis rules, quick fixes, and quick assists.
   }
diff --git a/pkg/analysis_server_plugin/doc/writing_assists.md b/pkg/analysis_server_plugin/doc/writing_assists.md
index 5107071..c211d83 100644
--- a/pkg/analysis_server_plugin/doc/writing_assists.md
+++ b/pkg/analysis_server_plugin/doc/writing_assists.md
@@ -102,6 +102,9 @@
 
 class SimplePlugin extends Plugin {
   @override
+  String get name => 'Simple plugin';
+
+  @override
   void register(PluginRegistry registry) {
     registry.registerAssist(RemoveAwait.new);
   }
diff --git a/pkg/analysis_server_plugin/doc/writing_fixes.md b/pkg/analysis_server_plugin/doc/writing_fixes.md
index d8cbab4..04d129f 100644
--- a/pkg/analysis_server_plugin/doc/writing_fixes.md
+++ b/pkg/analysis_server_plugin/doc/writing_fixes.md
@@ -118,6 +118,9 @@
 
 class SimplePlugin extends Plugin {
   @override
+  String get name => 'Simple plugin';
+
+  @override
   void register(PluginRegistry registry) {
     registry.registerWarningRule(MyRule());
     registry.registerFixForRule(MyRule.code, RemoveAwait.new);
diff --git a/pkg/analysis_server_plugin/doc/writing_rules.md b/pkg/analysis_server_plugin/doc/writing_rules.md
index 3ef939d..88a942d 100644
--- a/pkg/analysis_server_plugin/doc/writing_rules.md
+++ b/pkg/analysis_server_plugin/doc/writing_rules.md
@@ -159,6 +159,9 @@
 
 class SimplePlugin extends Plugin {
   @override
+  String get name => 'Simple plugin';
+
+  @override
   void register(PluginRegistry registry) {
     registry.registerWarningRule(MyRule());
   }
diff --git a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
index 4f01338..6b041e7 100644
--- a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
+++ b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
@@ -593,7 +593,7 @@
         var variableElement = variableDeclaration.declaredFragment?.element;
         if (variableElement case VariableElement(:var type)) {
           if (type is InvalidType) {
-            return typeProvider.dynamicType;
+            return typeProvider.objectQuestionType;
           }
           return type;
         }
@@ -733,13 +733,35 @@
       if (grandParent is ExpressionStatement) {
         return typeProvider.futureType(typeProvider.voidType);
       }
-      var inferredParentType =
-          inferUndefinedExpressionType(parent) ?? typeProvider.dynamicType;
-      if (inferredParentType is InvalidType) {
-        inferredParentType = typeProvider.dynamicType;
+      var inferredParentType = inferUndefinedExpressionType(parent);
+      if (inferredParentType == null || inferredParentType is InvalidType) {
+        inferredParentType = typeProvider.objectQuestionType;
       }
       return typeProvider.futureType(inferredParentType);
     }
+    // for (int x in myFunction()) { }
+    if (parent
+        case ForEachPartsWithDeclaration(
+              :var iterable,
+              :var type,
+              parent: var statement,
+            ) ||
+            ForEachPartsWithIdentifier(
+              :var iterable,
+              :var type,
+              parent: var statement,
+            ) ||
+            ForEachPartsWithPattern(
+              :var iterable,
+              :var type,
+              parent: var statement,
+            ) when iterable == expression) {
+      var inferredType = type ?? typeProvider.objectQuestionType;
+      if (statement.awaitKeyword != null) {
+        return typeProvider.streamType(inferredType);
+      }
+      return typeProvider.iterableType(inferredType);
+    }
     // We don't know.
     return null;
   }
@@ -912,3 +934,17 @@
     return _context.dartFixContext!.librariesWithExtensions(memberName);
   }
 }
+
+extension on ForEachParts {
+  DartType? get type {
+    return switch (this) {
+      ForEachPartsWithDeclaration(
+        loopVariable: DeclaredIdentifier(type: TypeAnnotation(:var type)),
+      ) ||
+      ForEachPartsWithIdentifier(
+        identifier: Identifier(staticType: var type),
+      ) => type,
+      _ => null,
+    };
+  }
+}
diff --git a/pkg/analysis_server_plugin/lib/registry.dart b/pkg/analysis_server_plugin/lib/registry.dart
index 256b3ce..dd01f1c 100644
--- a/pkg/analysis_server_plugin/lib/registry.dart
+++ b/pkg/analysis_server_plugin/lib/registry.dart
@@ -12,11 +12,23 @@
 
   /// Registers this fix [generator] for the given lint [code] with the
   /// analyzer's rule registry.
-  void registerFixForRule(LintCode code, ProducerGenerator generator);
+  void registerFixForRule(DiagnosticCode code, ProducerGenerator generator);
 
   /// Registers this [rule] with the analyzer's rule registry.
+  ///
+  /// Lint rules are disabled by default and can be enabled using
+  /// the analysis options file.
+  ///
+  /// Use [registerWarningRule] for rules that are enabled by
+  /// default.
   void registerLintRule(AbstractAnalysisRule rule);
 
   /// Registers this [rule] with the analyzer's rule registry.
+  ///
+  /// Warning rules are enabled by default and can be disabled using
+  /// the analysis options file.
+  ///
+  /// Use [registerLintRule] for rules that are disabled by
+  /// default.
   void registerWarningRule(AbstractAnalysisRule rule);
 }
diff --git a/pkg/analysis_server_plugin/lib/src/correction/fix_generators.dart b/pkg/analysis_server_plugin/lib/src/correction/fix_generators.dart
index 1788d8c..a59c201 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/fix_generators.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/fix_generators.dart
@@ -62,7 +62,10 @@
 
   /// Associates the given correction producer [generator] with the lint with
   /// the given [lintCode].
-  void registerFixForLint(LintCode lintCode, ProducerGenerator generator) {
+  void registerFixForLint(
+    DiagnosticCode lintCode,
+    ProducerGenerator generator,
+  ) {
     lintProducers.putIfAbsent(lintCode, () => []).add(generator);
   }
 }
diff --git a/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart b/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
index 868af6b..53ad7d1 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server_plugin/src/correction/fix_in_file_processor.dart';
 import 'package:analysis_server_plugin/src/correction/ignore_diagnostic.dart';
 import 'package:analysis_server_plugin/src/correction/performance.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
@@ -152,9 +152,9 @@
       }
     }
 
-    if (diagnosticCode is LintCode ||
-        diagnosticCode is HintCode ||
-        diagnosticCode is WarningCode) {
+    if (diagnosticCode.type == DiagnosticType.LINT ||
+        diagnosticCode.type == DiagnosticType.HINT ||
+        diagnosticCode.type == DiagnosticType.STATIC_WARNING) {
       for (var generator in registeredFixGenerators.ignoreProducerGenerators) {
         var producer = generator(context: context);
         if (producer.fixKind == ignoreErrorAnalysisFileKind) {
diff --git a/pkg/analysis_server_plugin/lib/src/correction/ignore_diagnostic.dart b/pkg/analysis_server_plugin/lib/src/correction/ignore_diagnostic.dart
index ccaf603..66ce6ed 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/ignore_diagnostic.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/ignore_diagnostic.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server_plugin/edit/dart/correction_producer.dart';
 import 'package:analysis_server_plugin/edit/dart/dart_fix_kind_priority.dart';
+import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/analysis_options.dart';
@@ -174,6 +175,14 @@
           continue;
         }
 
+        if (utils.findNode(lineStart) case var node?) {
+          var unitMember = node.thisOrAncestorOfType<CompilationUnitMember>();
+          var reference = unitMember?.documentationComment ?? node;
+          lineStart = reference.offset;
+          // Found code with possible doc-comment; insert before that.
+          break;
+        }
+
         // We found some code.
         break;
       }
@@ -252,7 +261,7 @@
   bool get _isCodeUnignorable {
     var cannotIgnore = (analysisOptions as AnalysisOptionsImpl)
         .unignorableDiagnosticCodeNames
-        .contains(diagnostic.diagnosticCode.name);
+        .contains(diagnostic.diagnosticCode.name.toLowerCase());
 
     if (cannotIgnore) {
       return true;
@@ -264,7 +273,9 @@
     // Note: both `ignore` and `false` severity are set to `null` when parsed.
     //       See `ErrorConfig` in `pkg/analyzer/source/error_processor.dart`.
     return analysisOptions.errorProcessors.any(
-      (e) => e.severity == null && e.code == diagnostic.diagnosticCode.name,
+      (e) =>
+          e.severity == null &&
+          e.code == diagnostic.diagnosticCode.name.toLowerCase(),
     );
   }
 }
diff --git a/pkg/analysis_server_plugin/lib/src/plugin_server.dart b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
index c476e2b..155997b 100644
--- a/pkg/analysis_server_plugin/lib/src/plugin_server.dart
+++ b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
@@ -699,6 +699,7 @@
           ({required AnalysisOptionsImpl analysisOptions}) => analysisOptions
             ..warning = false
             ..lint = false,
+      withFineDependencies: true,
     );
     _contextCollection = contextCollection;
     await _analyzeAllFilesInContextCollection(
diff --git a/pkg/analysis_server_plugin/lib/src/registry.dart b/pkg/analysis_server_plugin/lib/src/registry.dart
index 03327a1..dbac4b3 100644
--- a/pkg/analysis_server_plugin/lib/src/registry.dart
+++ b/pkg/analysis_server_plugin/lib/src/registry.dart
@@ -44,7 +44,7 @@
   }
 
   @override
-  void registerFixForRule(LintCode code, ProducerGenerator generator) {
+  void registerFixForRule(DiagnosticCode code, ProducerGenerator generator) {
     var producer = generator(context: StubCorrectionProducerContext.instance);
     var fixKind = producer.fixKind;
     if (fixKind == null) {
diff --git a/pkg/analysis_server_plugin/lib/src/utilities/selection.dart b/pkg/analysis_server_plugin/lib/src/utilities/selection.dart
index 3c53d57..7d8608a 100644
--- a/pkg/analysis_server_plugin/lib/src/utilities/selection.dart
+++ b/pkg/analysis_server_plugin/lib/src/utilities/selection.dart
@@ -79,13 +79,21 @@
   }
 
   @override
+  void visitBlockClassBody(BlockClassBody node) {
+    _fromList(node.members);
+  }
+
+  @override
   void visitCascadeExpression(CascadeExpression node) {
     _fromList(node.cascadeSections);
   }
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    _fromList(node.metadata) || _fromList(node.members);
+    _fromList(node.metadata);
+    if (node.body case BlockClassBody body) {
+      _fromList(body.members);
+    }
   }
 
   @override
@@ -120,15 +128,18 @@
   }
 
   @override
+  void visitEnumBody(EnumBody node) {
+    _fromList(node.constants) || _fromList(node.members);
+  }
+
+  @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     _fromList(node.metadata);
   }
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    _fromList(node.metadata) ||
-        _fromList(node.constants) ||
-        _fromList(node.members);
+    _fromList(node.metadata);
   }
 
   @override
@@ -140,7 +151,7 @@
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
-    _fromList(node.metadata) || _fromList(node.members);
+    _fromList(node.metadata) || _fromList(node.body.members);
   }
 
   @override
@@ -255,7 +266,7 @@
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    _fromList(node.metadata) || _fromList(node.members);
+    _fromList(node.metadata) || _fromList(node.body.members);
   }
 
   @override
diff --git a/pkg/analysis_server_plugin/pubspec.yaml b/pkg/analysis_server_plugin/pubspec.yaml
index 1eccc83..8ca57af 100644
--- a/pkg/analysis_server_plugin/pubspec.yaml
+++ b/pkg/analysis_server_plugin/pubspec.yaml
@@ -1,6 +1,6 @@
 name: analysis_server_plugin
 description: A framework and support code for building plugins for the analysis server.
-version: 0.3.4
+version: 0.3.5-dev
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/analysis_server_plugin
 
 environment:
@@ -11,8 +11,8 @@
 dependencies:
   # See the release policy for managing this dependency at
   # pkg/analyzer/doc/implementation/releasing.md.
-  analyzer: 9.0.0
-  analyzer_plugin: 0.13.11
+  analyzer: 10.0.0-dev
+  analyzer_plugin: 0.14.0-dev
   meta: ^1.16.0
   yaml: ^3.1.0
   yaml_edit: ^2.2.0
diff --git a/pkg/analysis_server_plugin/test/single_unit.dart b/pkg/analysis_server_plugin/test/single_unit.dart
index 8d70e0f..a50d30e 100644
--- a/pkg/analysis_server_plugin/test/single_unit.dart
+++ b/pkg/analysis_server_plugin/test/single_unit.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -79,13 +79,13 @@
 
     expect(
       result.diagnostics.where((d) {
-        return d.diagnosticCode != WarningCode.deadCode &&
-            d.diagnosticCode != WarningCode.unusedCatchClause &&
-            d.diagnosticCode != WarningCode.unusedCatchStack &&
-            d.diagnosticCode != WarningCode.unusedElement &&
-            d.diagnosticCode != WarningCode.unusedField &&
-            d.diagnosticCode != WarningCode.unusedImport &&
-            d.diagnosticCode != WarningCode.unusedLocalVariable;
+        return d.diagnosticCode != diag.deadCode &&
+            d.diagnosticCode != diag.unusedCatchClause &&
+            d.diagnosticCode != diag.unusedCatchStack &&
+            d.diagnosticCode != diag.unusedElement &&
+            d.diagnosticCode != diag.unusedField &&
+            d.diagnosticCode != diag.unusedImport &&
+            d.diagnosticCode != diag.unusedLocalVariable;
       }),
       isEmpty,
     );
@@ -165,6 +165,7 @@
       includedPaths: _collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
       sdkPath: _sdkRoot.path,
+      withFineDependencies: true,
     );
 
     _addAnalyzedFilesToDrivers();
diff --git a/pkg/analysis_server_plugin/test/src/lint_rules.dart b/pkg/analysis_server_plugin/test/src/lint_rules.dart
index 9e3ebd9..c6eb541 100644
--- a/pkg/analysis_server_plugin/test/src/lint_rules.dart
+++ b/pkg/analysis_server_plugin/test/src/lint_rules.dart
@@ -13,8 +13,7 @@
   static const LintCode code = LintCode(
     'needs_package',
     'Needs Package at {0}',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.needs_package',
+    uniqueName: 'LintCode.needs_package',
   );
 
   NeedsPackageRule()
@@ -39,8 +38,7 @@
   static const LintCode code = LintCode(
     'no_bools',
     'No bools message',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.no_bools',
+    uniqueName: 'LintCode.no_bools',
   );
 
   NoBoolsRule() : super(name: 'no_bools', description: 'No bools desc');
@@ -63,8 +61,7 @@
     'no_doubles_custom_severity',
     'No doubles message',
     severity: DiagnosticSeverity.WARNING,
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.no_doubles_custom_severity',
+    uniqueName: 'LintCode.no_doubles_custom_severity',
   );
 
   NoDoublesCustomSeverityRule()
@@ -90,8 +87,7 @@
   static const LintCode code = LintCode(
     'no_doubles',
     'No doubles message',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.no_doubles',
+    uniqueName: 'LintCode.no_doubles',
   );
 
   NoDoublesRule()
@@ -114,8 +110,7 @@
   static const LintCode code = LintCode(
     'no_references_to_strings',
     'No references to Strings',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.no_references_to_strings',
+    uniqueName: 'LintCode.no_references_to_strings',
   );
 
   NoReferencesToStringsRule()
diff --git a/pkg/analysis_server_plugin/test/src/plugin_server_error_test.dart b/pkg/analysis_server_plugin/test/src/plugin_server_error_test.dart
index e63952d..bd3249b 100644
--- a/pkg/analysis_server_plugin/test/src/plugin_server_error_test.dart
+++ b/pkg/analysis_server_plugin/test/src/plugin_server_error_test.dart
@@ -296,8 +296,7 @@
   static const LintCode code = LintCode(
     'no_bools',
     'No bools message',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.no_bools',
+    uniqueName: 'LintCode.no_bools',
   );
 
   _ThrowsAsyncErrorRule()
@@ -350,8 +349,7 @@
   static const LintCode code = LintCode(
     'no_bools',
     'No bools message',
-    // ignore: deprecated_member_use
-    uniqueNameCheck: 'LintCode.no_bools',
+    uniqueName: 'LintCode.no_bools',
   );
 
   _ThrowsSyncErrorRule()
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index e58380e..1b1b8c4 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,35 @@
+## 10.0.0-dev
+* Deprecations in `ClassDeclaration`:
+  * Properties `leftBracket`, `members`, `rightBracket` are deprecated, use `body` instead.
+  * Properties `name`, `typeParameters` are deprecated, use `namePart` instead.
+* Deprecations in `EnumDeclaration`:
+  * Properties `leftBracket`, `constants`, `members`, `rightBracket` are deprecated, use `body` instead.
+  * Properties `name`, `typeParameters` are deprecated, use `namePart` instead.
+* Deprecations in `ExtensionDeclaration`:
+  * Properties `leftBracket`, `members`, `rightBracket` are deprecated, use `body` instead.
+* Deprecations in `ExtensionTypeDeclaration`:
+  * Properties `leftBracket`, `constants`, `members`, `rightBracket` are deprecated, use `body` instead.
+  * Properties `constKeyword`, `name`, `representation`, `typeParameters` are deprecated,
+    use `primaryConstructor` instead.
+* **Breaking Change:** While the deprecated members mentioned above still exist in the AST,
+  their parent nodes have changed. This means that code relying on specific parent-child
+  relationships for these nodes might break.
+* **Breaking Change:** Remove deprecated `DiagnosticOrErrorListener` and the
+  `DiagnosticOrErrorListenerExtension` extension.
+* **Breaking Change:** Remove deprecated `RecordingDiagnosticListener.onError`
+  and `BooleanDiagnosticListener.onError` methods.
+* Deprecate `LintCode.new`'s `hasPublishedDocs` parameter.
+* Add `RemovedAnalysisRule` as the preferred way to represent removed lint
+  rules. Deprecated `RuleState.removed` (which was the previous way to do so).
+* Deprecate `ConstructorElement.isSynthetic`.
+  Use `isOriginDeclaration`, `isOriginImplicitDefault`, `isOriginMixinApplication` instead.
+* Deprecate `TopLevelVariableElement.isSynthetic`.
+  Use `isOriginDeclaration`, `isOriginGetterSetter`.
+* Deprecate `FieldElement.isSynthetic`.
+  Use `isOriginDeclaration`, `isOriginGetterSetter`, `isOriginDeclaringFormalParameter`, `isOriginEnumValues` instead.
+* Deprecate `PropertyAccessorElement.isSynthetic`.
+  Use `isOriginDeclaration`, `isOriginInterface`, `isOriginVariable` instead.
+
 ## 9.0.0
 * Remove deprecated field `Diagnostic.data`.
 * In the method `DiagnosticReporter.atOffset` and the constructors
diff --git a/pkg/analyzer/PRESUBMIT.py b/pkg/analyzer/PRESUBMIT.py
index 4c4697f..b254621 100644
--- a/pkg/analyzer/PRESUBMIT.py
+++ b/pkg/analyzer/PRESUBMIT.py
@@ -24,7 +24,7 @@
     for git_file in input_api.AffectedTestableFiles():
         filename = git_file.AbsoluteLocalPath()
         if (filename == node_text_expectations_file):
-            isEnabledLine = re.compile('static const updatingIsEnabled = (.*);')
+            isEnabledLine = re.compile('defaultValue: (.*),')
             for line in git_file.NewContents():
                 m = isEnabledLine.search(line)
                 if (m is not None):
@@ -35,7 +35,7 @@
                         return [
                             output_api.PresubmitError(
                                 'NodeTextExpectationsCollector.updatingIsEnabled '
-                                'must be `false`')
+                                'must default to `false`')
                         ]
             return [
                 output_api.PresubmitError(
diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt
index 2f1489b..cac3979 100644
--- a/pkg/analyzer/api.txt
+++ b/pkg/analyzer/api.txt
@@ -23,6 +23,9 @@
     reportAtOffset (method: Diagnostic Function(int, int, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
     reportAtPubNode (method: Diagnostic Function(PubspecNode, {List<Object> arguments, List<DiagnosticMessage> contextMessages, required DiagnosticCode diagnosticCode}))
     reportAtToken (method: Diagnostic? Function(Token, {List<Object> arguments, List<DiagnosticMessage>? contextMessages, required DiagnosticCode diagnosticCode}))
+  RemovedAnalysisRule (class extends MultiAnalysisRule):
+    new (constructor: RemovedAnalysisRule Function({required String description, required String name, String? replacedBy, Version? since}))
+    diagnosticCodes (getter: List<DiagnosticCode>)
 package:analyzer/analysis_rule/pubspec.dart:
   PubspecDependency (class extends Object):
     new (constructor: PubspecDependency Function())
@@ -106,7 +109,7 @@
     deprecated (constructor: RuleState Function({String? replacedBy, Version? since}))
     experimental (constructor: RuleState Function({Version? since}))
     internal (constructor: RuleState Function({Version? since}))
-    removed (constructor: RuleState Function({String? replacedBy, Version? since}))
+    removed (constructor: RuleState Function({String? replacedBy, Version? since}), deprecated)
     stable (constructor: RuleState Function({Version? since}))
     isDeprecated (getter: bool)
     isExperimental (getter: bool)
@@ -129,7 +132,7 @@
     addAwaitExpression (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addBinaryExpression (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addBlock (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
-    addBlockClassBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>), experimental)
+    addBlockClassBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addBlockFunctionBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addBooleanLiteral (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addBreakStatement (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
@@ -161,10 +164,10 @@
     addDotShorthandPropertyAccess (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addDottedName (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addDoubleLiteral (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
-    addEmptyClassBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>), experimental)
+    addEmptyClassBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addEmptyFunctionBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addEmptyStatement (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
-    addEnumBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>), experimental)
+    addEnumBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addEnumConstantArguments (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addEnumConstantDeclaration (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addEnumDeclaration (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
@@ -225,7 +228,7 @@
     addMethodInvocation (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addMixinDeclaration (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addMixinOnClause (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
-    addNameWithTypeParameters (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>), experimental)
+    addNameWithTypeParameters (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addNamedExpression (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addNamedType (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addNativeClause (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
@@ -247,8 +250,9 @@
     addPostfixExpression (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addPrefixExpression (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addPrefixedIdentifier (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
-    addPrimaryConstructorDeclaration (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>), experimental)
-    addPrimaryConstructorName (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>), experimental)
+    addPrimaryConstructorBody (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
+    addPrimaryConstructorDeclaration (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
+    addPrimaryConstructorName (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addPropertyAccess (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addRecordLiteral (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
     addRecordPattern (method: void Function(AbstractAnalysisRule, AstVisitor<dynamic>))
@@ -390,12 +394,12 @@
     get (method: String? Function(String))
 package:analyzer/dart/analysis/features.dart:
   Feature (class extends Object):
+    anonymous_methods (static getter: ExperimentalFeature)
     augmentations (static getter: ExperimentalFeature)
     class_modifiers (static getter: ExperimentalFeature)
     constant_update_2018 (static getter: ExperimentalFeature)
     constructor_tearoffs (static getter: ExperimentalFeature)
     control_flow_collections (static getter: ExperimentalFeature)
-    declaring_constructors (static getter: ExperimentalFeature)
     digit_separators (static getter: ExperimentalFeature)
     dot_shorthands (static getter: ExperimentalFeature)
     enhanced_enums (static getter: ExperimentalFeature)
@@ -415,6 +419,7 @@
     nonfunction_type_aliases (static getter: ExperimentalFeature)
     null_aware_elements (static getter: ExperimentalFeature)
     patterns (static getter: ExperimentalFeature)
+    primary_constructors (static getter: ExperimentalFeature)
     private_named_parameters (static getter: ExperimentalFeature)
     records (static getter: ExperimentalFeature)
     sealed_class (static getter: ExperimentalFeature)
@@ -578,8 +583,6 @@
   parseString (function: ParseStringResult Function({required String content, FeatureSet? featureSet, String? path, bool throwIfDiagnostics}))
   resolveFile (function: Future<SomeResolvedUnitResult> Function({required String path, ResourceProvider? resourceProvider}))
 package:analyzer/dart/ast/ast.dart:
-  useDeclaringConstructorsAst (static getter: bool, experimental)
-  useDeclaringConstructorsAst= (static setter: bool, experimental)
   AdjacentStrings (class extends Object implements StringLiteral):
     strings (getter: NodeList<StringLiteral>)
   AnnotatedNode (class extends Object implements AstNode):
@@ -653,7 +656,7 @@
     visitAwaitExpression (method: R? Function(AwaitExpression))
     visitBinaryExpression (method: R? Function(BinaryExpression))
     visitBlock (method: R? Function(Block))
-    visitBlockClassBody (method: R? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: R? Function(BlockClassBody))
     visitBlockFunctionBody (method: R? Function(BlockFunctionBody))
     visitBooleanLiteral (method: R? Function(BooleanLiteral))
     visitBreakStatement (method: R? Function(BreakStatement))
@@ -685,10 +688,10 @@
     visitDotShorthandPropertyAccess (method: R? Function(DotShorthandPropertyAccess))
     visitDottedName (method: R? Function(DottedName))
     visitDoubleLiteral (method: R? Function(DoubleLiteral))
-    visitEmptyClassBody (method: R? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: R? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: R? Function(EmptyFunctionBody))
     visitEmptyStatement (method: R? Function(EmptyStatement))
-    visitEnumBody (method: R? Function(EnumBody), experimental)
+    visitEnumBody (method: R? Function(EnumBody))
     visitEnumConstantArguments (method: R? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: R? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: R? Function(EnumDeclaration))
@@ -749,7 +752,7 @@
     visitMethodInvocation (method: R? Function(MethodInvocation))
     visitMixinDeclaration (method: R? Function(MixinDeclaration))
     visitMixinOnClause (method: R? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters))
     visitNamedExpression (method: R? Function(NamedExpression))
     visitNamedType (method: R? Function(NamedType))
     visitNativeClause (method: R? Function(NativeClause))
@@ -771,8 +774,9 @@
     visitPostfixExpression (method: R? Function(PostfixExpression))
     visitPrefixExpression (method: R? Function(PrefixExpression))
     visitPrefixedIdentifier (method: R? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: R? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName))
     visitPropertyAccess (method: R? Function(PropertyAccess))
     visitRecordLiteral (method: R? Function(RecordLiteral))
     visitRecordPattern (method: R? Function(RecordPattern))
@@ -833,7 +837,7 @@
     leftBracket (getter: Token)
     rightBracket (getter: Token)
     statements (getter: NodeList<Statement>)
-  BlockClassBody (class extends Object implements ClassBody, sealed (immediate subtypes: BlockClassBodyImpl), experimental):
+  BlockClassBody (class extends Object implements ClassBody, sealed (immediate subtypes: BlockClassBodyImpl)):
     leftBracket (getter: Token)
     members (getter: NodeList<ClassMember>)
     rightBracket (getter: Token)
@@ -871,30 +875,30 @@
   CatchClauseParameter (class extends AstNode):
     declaredFragment (getter: LocalVariableFragment?)
     name (getter: Token)
-  ClassBody (class extends Object implements AstNode, sealed (immediate subtypes: BlockClassBody, ClassBodyImpl, EmptyClassBody), experimental)
+  ClassBody (class extends Object implements AstNode, sealed (immediate subtypes: BlockClassBody, ClassBodyImpl, EmptyClassBody))
   ClassDeclaration (class extends Object implements NamedCompilationUnitMember):
     abstractKeyword (getter: Token?)
     augmentKeyword (getter: Token?)
     baseKeyword (getter: Token?)
-    body (getter: ClassBody, experimental)
+    body (getter: ClassBody)
     classKeyword (getter: Token)
     declaredFragment (getter: ClassFragment?)
     extendsClause (getter: ExtendsClause?)
     finalKeyword (getter: Token?)
     implementsClause (getter: ImplementsClause?)
     interfaceKeyword (getter: Token?)
-    leftBracket (getter: Token)
-    members (getter: NodeList<ClassMember>)
+    leftBracket (getter: Token, deprecated)
+    members (getter: NodeList<ClassMember>, deprecated)
     mixinKeyword (getter: Token?)
-    name (getter: Token)
-    namePart (getter: ClassNamePart, experimental)
+    name (getter: Token, deprecated)
+    namePart (getter: ClassNamePart)
     nativeClause (getter: NativeClause?)
-    rightBracket (getter: Token)
+    rightBracket (getter: Token, deprecated)
     sealedKeyword (getter: Token?)
-    typeParameters (getter: TypeParameterList?)
+    typeParameters (getter: TypeParameterList?, deprecated)
     withClause (getter: WithClause?)
-  ClassMember (class extends Object implements Declaration, sealed (immediate subtypes: ClassMemberImpl, ConstructorDeclaration, FieldDeclaration, MethodDeclaration))
-  ClassNamePart (class extends Object implements AstNode, sealed (immediate subtypes: ClassNamePartImpl, NameWithTypeParameters, PrimaryConstructorDeclaration), experimental):
+  ClassMember (class extends Object implements Declaration, sealed (immediate subtypes: ClassMemberImpl, ConstructorDeclaration, FieldDeclaration, MethodDeclaration, PrimaryConstructorBody))
+  ClassNamePart (class extends Object implements AstNode, sealed (immediate subtypes: ClassNamePartImpl, NameWithTypeParameters, PrimaryConstructorDeclaration)):
     typeName (getter: Token)
     typeParameters (getter: TypeParameterList?)
   ClassTypeAlias (class extends Object implements TypeAlias):
@@ -970,11 +974,13 @@
     factoryKeyword (getter: Token?)
     initializers (getter: NodeList<ConstructorInitializer>)
     name (getter: Token?)
+    newKeyword (getter: Token?)
     parameters (getter: FormalParameterList)
     period (getter: Token?)
     redirectedConstructor (getter: ConstructorName?)
-    returnType (getter: Identifier)
+    returnType (getter: Identifier, deprecated)
     separator (getter: Token?)
+    typeName (getter: SimpleIdentifier?)
   ConstructorFieldInitializer (class extends Object implements ConstructorInitializer):
     equals (getter: Token)
     expression (getter: Expression)
@@ -1044,13 +1050,13 @@
   DoubleLiteral (class extends Object implements Literal):
     literal (getter: Token)
     value (getter: double)
-  EmptyClassBody (class extends Object implements ClassBody, sealed (immediate subtypes: EmptyClassBodyImpl), experimental):
+  EmptyClassBody (class extends Object implements ClassBody, sealed (immediate subtypes: EmptyClassBodyImpl)):
     semicolon (getter: Token)
   EmptyFunctionBody (class extends Object implements FunctionBody):
     semicolon (getter: Token)
   EmptyStatement (class extends Object implements Statement):
     semicolon (getter: Token)
-  EnumBody (class extends Object implements AstNode, sealed (immediate subtypes: EnumBodyImpl), experimental):
+  EnumBody (class extends Object implements AstNode, sealed (immediate subtypes: EnumBodyImpl)):
     constants (getter: NodeList<EnumConstantDeclaration>)
     leftBracket (getter: Token)
     members (getter: NodeList<ClassMember>)
@@ -1068,18 +1074,18 @@
     name (getter: Token)
   EnumDeclaration (class extends Object implements NamedCompilationUnitMember):
     augmentKeyword (getter: Token?)
-    body (getter: EnumBody, experimental)
-    constants (getter: NodeList<EnumConstantDeclaration>)
+    body (getter: EnumBody)
+    constants (getter: NodeList<EnumConstantDeclaration>, deprecated)
     declaredFragment (getter: EnumFragment?)
     enumKeyword (getter: Token)
     implementsClause (getter: ImplementsClause?)
-    leftBracket (getter: Token)
-    members (getter: NodeList<ClassMember>)
-    name (getter: Token)
-    namePart (getter: ClassNamePart, experimental)
-    rightBracket (getter: Token)
-    semicolon (getter: Token?)
-    typeParameters (getter: TypeParameterList?)
+    leftBracket (getter: Token, deprecated)
+    members (getter: NodeList<ClassMember>, deprecated)
+    name (getter: Token, deprecated)
+    namePart (getter: ClassNamePart)
+    rightBracket (getter: Token, deprecated)
+    semicolon (getter: Token?, deprecated)
+    typeParameters (getter: TypeParameterList?, deprecated)
     withClause (getter: WithClause?)
   ExportDirective (class extends Object implements NamespaceDirective):
     exportKeyword (getter: Token)
@@ -1107,14 +1113,14 @@
     superclass (getter: NamedType)
   ExtensionDeclaration (class extends Object implements CompilationUnitMember):
     augmentKeyword (getter: Token?)
-    body (getter: BlockClassBody, experimental)
+    body (getter: BlockClassBody)
     declaredFragment (getter: ExtensionFragment?)
     extensionKeyword (getter: Token)
-    leftBracket (getter: Token)
-    members (getter: NodeList<ClassMember>)
+    leftBracket (getter: Token, deprecated)
+    members (getter: NodeList<ClassMember>, deprecated)
     name (getter: Token?)
     onClause (getter: ExtensionOnClause?)
-    rightBracket (getter: Token)
+    rightBracket (getter: Token, deprecated)
     typeKeyword (getter: Token?)
     typeParameters (getter: TypeParameterList?)
   ExtensionOnClause (class extends Object implements AstNode):
@@ -1131,19 +1137,19 @@
     typeArguments (getter: TypeArgumentList?)
   ExtensionTypeDeclaration (class extends Object implements NamedCompilationUnitMember):
     augmentKeyword (getter: Token?)
-    body (getter: ClassBody, experimental)
-    constKeyword (getter: Token?)
+    body (getter: ClassBody)
+    constKeyword (getter: Token?, deprecated)
     declaredFragment (getter: ExtensionTypeFragment?)
     extensionKeyword (getter: Token)
     implementsClause (getter: ImplementsClause?)
-    leftBracket (getter: Token)
-    members (getter: NodeList<ClassMember>)
-    name (getter: Token)
-    namePart (getter: ClassNamePart, experimental)
-    representation (getter: RepresentationDeclaration)
-    rightBracket (getter: Token)
+    leftBracket (getter: Token, deprecated)
+    members (getter: NodeList<ClassMember>, deprecated)
+    name (getter: Token, deprecated)
+    primaryConstructor (getter: PrimaryConstructorDeclaration)
+    representation (getter: RepresentationDeclaration, deprecated)
+    rightBracket (getter: Token, deprecated)
     typeKeyword (getter: Token)
-    typeParameters (getter: TypeParameterList?)
+    typeParameters (getter: TypeParameterList?, deprecated)
   FieldDeclaration (class extends Object implements ClassMember):
     abstractKeyword (getter: Token?)
     augmentKeyword (getter: Token?)
@@ -1234,6 +1240,7 @@
     functionExpression (getter: FunctionExpression)
     isGetter (getter: bool)
     isSetter (getter: bool)
+    name (getter: Token)
     propertyKeyword (getter: Token?)
     returnType (getter: TypeAnnotation?)
   FunctionDeclarationStatement (class extends Object implements Statement):
@@ -1438,21 +1445,22 @@
   MixinDeclaration (class extends Object implements NamedCompilationUnitMember):
     augmentKeyword (getter: Token?)
     baseKeyword (getter: Token?)
-    body (getter: BlockClassBody, experimental)
+    body (getter: BlockClassBody)
     declaredFragment (getter: MixinFragment?)
     implementsClause (getter: ImplementsClause?)
-    leftBracket (getter: Token)
-    members (getter: NodeList<ClassMember>)
+    leftBracket (getter: Token, deprecated)
+    members (getter: NodeList<ClassMember>, deprecated)
     mixinKeyword (getter: Token)
+    name (getter: Token)
     onClause (getter: MixinOnClause?)
-    rightBracket (getter: Token)
+    rightBracket (getter: Token, deprecated)
     typeParameters (getter: TypeParameterList?)
   MixinOnClause (class extends Object implements AstNode):
     onKeyword (getter: Token)
     superclassConstraints (getter: NodeList<NamedType>)
-  NameWithTypeParameters (class extends Object implements ClassNamePart, experimental)
-  NamedCompilationUnitMember (class extends Object implements CompilationUnitMember):
-    name (getter: Token)
+  NameWithTypeParameters (class extends Object implements ClassNamePart)
+  NamedCompilationUnitMember (class extends Object implements CompilationUnitMember, deprecated):
+    name (getter: Token, deprecated)
   NamedExpression (class extends Object implements Expression):
     element (getter: FormalParameterElement?)
     expression (getter: Expression)
@@ -1555,11 +1563,17 @@
     isDeferred (getter: bool)
     period (getter: Token)
     prefix (getter: SimpleIdentifier)
-  PrimaryConstructorDeclaration (class extends Object implements ClassNamePart, experimental):
+  PrimaryConstructorBody (class extends Object implements ClassMember):
+    body (getter: FunctionBody)
+    colon (getter: Token?)
+    initializers (getter: NodeList<ConstructorInitializer>)
+    thisKeyword (getter: Token)
+  PrimaryConstructorDeclaration (class extends Object implements ClassNamePart):
     constKeyword (getter: Token?)
     constructorName (getter: PrimaryConstructorName?)
+    declaredFragment (getter: ConstructorFragment?)
     formalParameters (getter: FormalParameterList)
-  PrimaryConstructorName (class extends Object implements AstNode, experimental):
+  PrimaryConstructorName (class extends Object implements AstNode):
     name (getter: Token)
     period (getter: Token)
   PropertyAccess (class extends Object implements CommentReferableExpression):
@@ -1604,10 +1618,10 @@
     element (getter: MethodElement?)
     operand (getter: Expression)
     operator (getter: Token)
-  RepresentationConstructorName (class extends Object implements AstNode):
+  RepresentationConstructorName (class extends Object implements AstNode, deprecated):
     name (getter: Token)
     period (getter: Token)
-  RepresentationDeclaration (class extends Object implements AstNode):
+  RepresentationDeclaration (class extends Object implements AstNode, deprecated):
     constructorFragment (getter: ConstructorFragment?)
     constructorName (getter: RepresentationConstructorName?)
     fieldFragment (getter: FieldFragment?)
@@ -1734,6 +1748,7 @@
     tryKeyword (getter: Token)
   TypeAlias (class extends Object implements NamedCompilationUnitMember):
     augmentKeyword (getter: Token?)
+    name (getter: Token)
     semicolon (getter: Token)
     typedefKeyword (getter: Token)
   TypeAnnotation (class extends Object implements AstNode, sealed (immediate subtypes: GenericFunctionType, NamedType, RecordTypeAnnotation, TypeAnnotationImpl)):
@@ -2199,7 +2214,7 @@
     visitAwaitExpression (method: R? Function(AwaitExpression))
     visitBinaryExpression (method: R? Function(BinaryExpression))
     visitBlock (method: R? Function(Block))
-    visitBlockClassBody (method: R? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: R? Function(BlockClassBody))
     visitBlockFunctionBody (method: R? Function(BlockFunctionBody))
     visitBooleanLiteral (method: R? Function(BooleanLiteral))
     visitBreakStatement (method: R? Function(BreakStatement))
@@ -2208,10 +2223,10 @@
     visitCastPattern (method: R? Function(CastPattern))
     visitCatchClause (method: R? Function(CatchClause))
     visitCatchClauseParameter (method: R? Function(CatchClauseParameter))
-    visitClassBody (method: R? Function(ClassBody), experimental)
+    visitClassBody (method: R? Function(ClassBody))
     visitClassDeclaration (method: R? Function(ClassDeclaration))
     visitClassMember (method: R? Function(ClassMember))
-    visitClassNamePart (method: R? Function(ClassNamePart), experimental)
+    visitClassNamePart (method: R? Function(ClassNamePart))
     visitClassTypeAlias (method: R? Function(ClassTypeAlias))
     visitCollectionElement (method: R? Function(CollectionElement))
     visitCombinator (method: R? Function(Combinator))
@@ -2242,10 +2257,10 @@
     visitDotShorthandPropertyAccess (method: R? Function(DotShorthandPropertyAccess))
     visitDottedName (method: R? Function(DottedName))
     visitDoubleLiteral (method: R? Function(DoubleLiteral))
-    visitEmptyClassBody (method: R? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: R? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: R? Function(EmptyFunctionBody))
     visitEmptyStatement (method: R? Function(EmptyStatement))
-    visitEnumBody (method: R? Function(EnumBody), experimental)
+    visitEnumBody (method: R? Function(EnumBody))
     visitEnumConstantArguments (method: R? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: R? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: R? Function(EnumDeclaration))
@@ -2316,7 +2331,7 @@
     visitMethodInvocation (method: R? Function(MethodInvocation))
     visitMixinDeclaration (method: R? Function(MixinDeclaration))
     visitMixinOnClause (method: R? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters))
     visitNamedCompilationUnitMember (method: R? Function(NamedCompilationUnitMember))
     visitNamedExpression (method: R? Function(NamedExpression))
     visitNamedType (method: R? Function(NamedType))
@@ -2342,8 +2357,9 @@
     visitPostfixExpression (method: R? Function(PostfixExpression))
     visitPrefixExpression (method: R? Function(PrefixExpression))
     visitPrefixedIdentifier (method: R? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: R? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName))
     visitPropertyAccess (method: R? Function(PropertyAccess))
     visitRecordLiteral (method: R? Function(RecordLiteral))
     visitRecordPattern (method: R? Function(RecordPattern))
@@ -2415,7 +2431,7 @@
     visitAwaitExpression (method: R? Function(AwaitExpression))
     visitBinaryExpression (method: R? Function(BinaryExpression))
     visitBlock (method: R? Function(Block))
-    visitBlockClassBody (method: R? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: R? Function(BlockClassBody))
     visitBlockFunctionBody (method: R? Function(BlockFunctionBody))
     visitBooleanLiteral (method: R? Function(BooleanLiteral))
     visitBreakStatement (method: R? Function(BreakStatement))
@@ -2447,10 +2463,10 @@
     visitDotShorthandPropertyAccess (method: R? Function(DotShorthandPropertyAccess))
     visitDottedName (method: R? Function(DottedName))
     visitDoubleLiteral (method: R? Function(DoubleLiteral))
-    visitEmptyClassBody (method: R? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: R? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: R? Function(EmptyFunctionBody))
     visitEmptyStatement (method: R? Function(EmptyStatement))
-    visitEnumBody (method: R? Function(EnumBody), experimental)
+    visitEnumBody (method: R? Function(EnumBody))
     visitEnumConstantArguments (method: R? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: R? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: R? Function(EnumDeclaration))
@@ -2511,7 +2527,7 @@
     visitMethodInvocation (method: R? Function(MethodInvocation))
     visitMixinDeclaration (method: R? Function(MixinDeclaration))
     visitMixinOnClause (method: R? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters))
     visitNamedExpression (method: R? Function(NamedExpression))
     visitNamedType (method: R? Function(NamedType))
     visitNativeClause (method: R? Function(NativeClause))
@@ -2533,8 +2549,9 @@
     visitPostfixExpression (method: R? Function(PostfixExpression))
     visitPrefixExpression (method: R? Function(PrefixExpression))
     visitPrefixedIdentifier (method: R? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: R? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName))
     visitPropertyAccess (method: R? Function(PropertyAccess))
     visitRecordLiteral (method: R? Function(RecordLiteral))
     visitRecordPattern (method: R? Function(RecordPattern))
@@ -2596,7 +2613,7 @@
     visitAwaitExpression (method: R? Function(AwaitExpression))
     visitBinaryExpression (method: R? Function(BinaryExpression))
     visitBlock (method: R? Function(Block))
-    visitBlockClassBody (method: R? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: R? Function(BlockClassBody))
     visitBlockFunctionBody (method: R? Function(BlockFunctionBody))
     visitBooleanLiteral (method: R? Function(BooleanLiteral))
     visitBreakStatement (method: R? Function(BreakStatement))
@@ -2628,10 +2645,10 @@
     visitDotShorthandPropertyAccess (method: R? Function(DotShorthandPropertyAccess))
     visitDottedName (method: R? Function(DottedName))
     visitDoubleLiteral (method: R? Function(DoubleLiteral))
-    visitEmptyClassBody (method: R? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: R? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: R? Function(EmptyFunctionBody))
     visitEmptyStatement (method: R? Function(EmptyStatement))
-    visitEnumBody (method: R? Function(EnumBody), experimental)
+    visitEnumBody (method: R? Function(EnumBody))
     visitEnumConstantArguments (method: R? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: R? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: R? Function(EnumDeclaration))
@@ -2692,7 +2709,7 @@
     visitMethodInvocation (method: R? Function(MethodInvocation))
     visitMixinDeclaration (method: R? Function(MixinDeclaration))
     visitMixinOnClause (method: R? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters))
     visitNamedExpression (method: R? Function(NamedExpression))
     visitNamedType (method: R? Function(NamedType))
     visitNativeClause (method: R? Function(NativeClause))
@@ -2714,8 +2731,9 @@
     visitPostfixExpression (method: R? Function(PostfixExpression))
     visitPrefixExpression (method: R? Function(PrefixExpression))
     visitPrefixedIdentifier (method: R? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: R? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName))
     visitPropertyAccess (method: R? Function(PropertyAccess))
     visitRecordLiteral (method: R? Function(RecordLiteral))
     visitRecordPattern (method: R? Function(RecordPattern))
@@ -2777,7 +2795,7 @@
     visitAwaitExpression (method: R? Function(AwaitExpression))
     visitBinaryExpression (method: R? Function(BinaryExpression))
     visitBlock (method: R? Function(Block))
-    visitBlockClassBody (method: R? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: R? Function(BlockClassBody))
     visitBlockFunctionBody (method: R? Function(BlockFunctionBody))
     visitBooleanLiteral (method: R? Function(BooleanLiteral))
     visitBreakStatement (method: R? Function(BreakStatement))
@@ -2809,10 +2827,10 @@
     visitDotShorthandPropertyAccess (method: R? Function(DotShorthandPropertyAccess))
     visitDottedName (method: R? Function(DottedName))
     visitDoubleLiteral (method: R? Function(DoubleLiteral))
-    visitEmptyClassBody (method: R? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: R? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: R? Function(EmptyFunctionBody))
     visitEmptyStatement (method: R? Function(EmptyStatement))
-    visitEnumBody (method: R? Function(EnumBody), experimental)
+    visitEnumBody (method: R? Function(EnumBody))
     visitEnumConstantArguments (method: R? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: R? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: R? Function(EnumDeclaration))
@@ -2873,7 +2891,7 @@
     visitMethodInvocation (method: R? Function(MethodInvocation))
     visitMixinDeclaration (method: R? Function(MixinDeclaration))
     visitMixinOnClause (method: R? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters))
     visitNamedExpression (method: R? Function(NamedExpression))
     visitNamedType (method: R? Function(NamedType))
     visitNativeClause (method: R? Function(NativeClause))
@@ -2895,8 +2913,9 @@
     visitPostfixExpression (method: R? Function(PostfixExpression))
     visitPrefixExpression (method: R? Function(PrefixExpression))
     visitPrefixedIdentifier (method: R? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: R? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName))
     visitPropertyAccess (method: R? Function(PropertyAccess))
     visitRecordLiteral (method: R? Function(RecordLiteral))
     visitRecordPattern (method: R? Function(RecordPattern))
@@ -2959,7 +2978,7 @@
     visitAwaitExpression (method: T? Function(AwaitExpression))
     visitBinaryExpression (method: T? Function(BinaryExpression))
     visitBlock (method: T? Function(Block))
-    visitBlockClassBody (method: T? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: T? Function(BlockClassBody))
     visitBlockFunctionBody (method: T? Function(BlockFunctionBody))
     visitBooleanLiteral (method: T? Function(BooleanLiteral))
     visitBreakStatement (method: T? Function(BreakStatement))
@@ -2991,10 +3010,10 @@
     visitDotShorthandPropertyAccess (method: T? Function(DotShorthandPropertyAccess))
     visitDottedName (method: T? Function(DottedName))
     visitDoubleLiteral (method: T? Function(DoubleLiteral))
-    visitEmptyClassBody (method: T? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: T? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: T? Function(EmptyFunctionBody))
     visitEmptyStatement (method: T? Function(EmptyStatement))
-    visitEnumBody (method: T? Function(EnumBody), experimental)
+    visitEnumBody (method: T? Function(EnumBody))
     visitEnumConstantArguments (method: T? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: T? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: T? Function(EnumDeclaration))
@@ -3055,7 +3074,7 @@
     visitMethodInvocation (method: T? Function(MethodInvocation))
     visitMixinDeclaration (method: T? Function(MixinDeclaration))
     visitMixinOnClause (method: T? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: T? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: T? Function(NameWithTypeParameters))
     visitNamedExpression (method: T? Function(NamedExpression))
     visitNamedType (method: T? Function(NamedType))
     visitNativeClause (method: T? Function(NativeClause))
@@ -3077,8 +3096,9 @@
     visitPostfixExpression (method: T? Function(PostfixExpression))
     visitPrefixExpression (method: T? Function(PrefixExpression))
     visitPrefixedIdentifier (method: T? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: T? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: T? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: T? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: T? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: T? Function(PrimaryConstructorName))
     visitPropertyAccess (method: T? Function(PropertyAccess))
     visitRecordLiteral (method: T? Function(RecordLiteral))
     visitRecordPattern (method: T? Function(RecordPattern))
@@ -3140,7 +3160,7 @@
     visitAwaitExpression (method: R? Function(AwaitExpression))
     visitBinaryExpression (method: R? Function(BinaryExpression))
     visitBlock (method: R? Function(Block))
-    visitBlockClassBody (method: R? Function(BlockClassBody), experimental)
+    visitBlockClassBody (method: R? Function(BlockClassBody))
     visitBlockFunctionBody (method: R? Function(BlockFunctionBody))
     visitBooleanLiteral (method: R? Function(BooleanLiteral))
     visitBreakStatement (method: R? Function(BreakStatement))
@@ -3172,10 +3192,10 @@
     visitDotShorthandPropertyAccess (method: R? Function(DotShorthandPropertyAccess))
     visitDottedName (method: R? Function(DottedName))
     visitDoubleLiteral (method: R? Function(DoubleLiteral))
-    visitEmptyClassBody (method: R? Function(EmptyClassBody), experimental)
+    visitEmptyClassBody (method: R? Function(EmptyClassBody))
     visitEmptyFunctionBody (method: R? Function(EmptyFunctionBody))
     visitEmptyStatement (method: R? Function(EmptyStatement))
-    visitEnumBody (method: R? Function(EnumBody), experimental)
+    visitEnumBody (method: R? Function(EnumBody))
     visitEnumConstantArguments (method: R? Function(EnumConstantArguments))
     visitEnumConstantDeclaration (method: R? Function(EnumConstantDeclaration))
     visitEnumDeclaration (method: R? Function(EnumDeclaration))
@@ -3236,7 +3256,7 @@
     visitMethodInvocation (method: R? Function(MethodInvocation))
     visitMixinDeclaration (method: R? Function(MixinDeclaration))
     visitMixinOnClause (method: R? Function(MixinOnClause))
-    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters), experimental)
+    visitNameWithTypeParameters (method: R? Function(NameWithTypeParameters))
     visitNamedExpression (method: R? Function(NamedExpression))
     visitNamedType (method: R? Function(NamedType))
     visitNativeClause (method: R? Function(NativeClause))
@@ -3259,8 +3279,9 @@
     visitPostfixExpression (method: R? Function(PostfixExpression))
     visitPrefixExpression (method: R? Function(PrefixExpression))
     visitPrefixedIdentifier (method: R? Function(PrefixedIdentifier))
-    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration), experimental)
-    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName), experimental)
+    visitPrimaryConstructorBody (method: R? Function(PrimaryConstructorBody))
+    visitPrimaryConstructorDeclaration (method: R? Function(PrimaryConstructorDeclaration))
+    visitPrimaryConstructorName (method: R? Function(PrimaryConstructorName))
     visitPropertyAccess (method: R? Function(PropertyAccess))
     visitRecordLiteral (method: R? Function(RecordLiteral))
     visitRecordPattern (method: R? Function(RecordPattern))
@@ -3376,9 +3397,15 @@
     firstFragment (getter: ConstructorFragment)
     fragments (getter: List<ConstructorFragment>)
     isConst (getter: bool)
+    isDeclaring (getter: bool, experimental)
     isDefaultConstructor (getter: bool)
     isFactory (getter: bool)
     isGenerative (getter: bool)
+    isOriginDeclaration (getter: bool)
+    isOriginImplicitDefault (getter: bool)
+    isOriginMixinApplication (getter: bool)
+    isPrimary (getter: bool, experimental)
+    isSynthetic (getter: bool, deprecated)
     name (getter: String?)
     redirectedConstructor (getter: ConstructorElement?)
     returnType (getter: InterfaceType)
@@ -3387,7 +3414,10 @@
     new (constructor: ConstructorFragment Function())
     element (getter: ConstructorElement)
     enclosingFragment (getter: InstanceFragment?)
+    factoryKeywordOffset (getter: int?)
+    isSynthetic (getter: bool, deprecated)
     name (getter: String)
+    newKeywordOffset (getter: int?)
     nextFragment (getter: ConstructorFragment?)
     offset (getter: int)
     periodOffset (getter: int?)
@@ -3611,6 +3641,7 @@
   FieldElement (class extends Object implements PropertyInducingElement):
     new (constructor: FieldElement Function())
     baseElement (getter: FieldElement)
+    declaringFormalParameter (getter: FieldFormalParameterElement?, experimental)
     enclosingElement (getter: InstanceElement)
     firstFragment (getter: FieldFragment)
     fragments (getter: List<FieldFragment>)
@@ -3618,17 +3649,22 @@
     isCovariant (getter: bool)
     isEnumConstant (getter: bool)
     isExternal (getter: bool)
+    isOriginDeclaringFormalParameter (getter: bool)
+    isOriginEnumValues (getter: bool)
     isPromotable (getter: bool)
   FieldFormalParameterElement (class extends Object implements FormalParameterElement):
     new (constructor: FieldFormalParameterElement Function())
     field (getter: FieldElement?)
     firstFragment (getter: FieldFormalParameterFragment)
     fragments (getter: List<FieldFormalParameterFragment>)
+    isDeclaring (getter: bool, experimental)
+    privateName (getter: String?, experimental)
   FieldFormalParameterFragment (class extends Object implements FormalParameterFragment):
     new (constructor: FieldFormalParameterFragment Function())
     element (getter: FieldFormalParameterElement)
     nextFragment (getter: FieldFormalParameterFragment?)
     previousFragment (getter: FieldFormalParameterFragment?)
+    privateName (getter: String?, experimental)
   FieldFragment (class extends Object implements PropertyInducingFragment):
     new (constructor: FieldFragment Function())
     element (getter: FieldElement)
@@ -4025,6 +4061,10 @@
     enclosingElement (getter: Element)
     firstFragment (getter: PropertyAccessorFragment)
     fragments (getter: List<PropertyAccessorFragment>)
+    isOriginDeclaration (getter: bool)
+    isOriginInterface (getter: bool)
+    isOriginVariable (getter: bool)
+    isSynthetic (getter: bool, deprecated)
     variable (getter: PropertyInducingElement)
   PropertyAccessorFragment (class extends Object implements ExecutableFragment):
     new (constructor: PropertyAccessorFragment Function())
@@ -4037,6 +4077,9 @@
     fragments (getter: List<PropertyInducingFragment>)
     getter (getter: GetterElement?)
     hasInitializer (getter: bool)
+    isOriginDeclaration (getter: bool)
+    isOriginGetterSetter (getter: bool)
+    isSynthetic (getter: bool, deprecated)
     library (getter: LibraryElement)
     setter (getter: SetterElement?)
   PropertyInducingFragment (class extends Object implements VariableFragment):
@@ -4044,7 +4087,7 @@
     element (getter: PropertyInducingElement)
     hasInitializer (getter: bool)
     isAugmentation (getter: bool)
-    isSynthetic (getter: bool)
+    isSynthetic (getter: bool, deprecated)
     libraryFragment (getter: LibraryFragment)
     nextFragment (getter: PropertyInducingFragment?)
     previousFragment (getter: PropertyInducingFragment?)
@@ -4525,7 +4568,7 @@
   errorCodeValues (static getter: List<DiagnosticCode>, deprecated)
   errorCodeByUniqueName (function: DiagnosticCode? Function(String))
   DiagnosticCode (class extends Object):
-    new (constructor: DiagnosticCode Function({String? correctionMessage, bool hasPublishedDocs, bool isUnresolvedIdentifier, required String name, required String problemMessage, required String uniqueName, deprecated String? uniqueNameCheck}))
+    new (constructor: DiagnosticCode Function({String? correctionMessage, bool hasPublishedDocs, bool isUnresolvedIdentifier, required String name, required String problemMessage, required String uniqueName}))
     correctionMessage (getter: String?)
     errorSeverity (getter: DiagnosticSeverity, deprecated)
     hasPublishedDocs (getter: bool)
@@ -4572,7 +4615,7 @@
     compareTo (method: int Function(DiagnosticType))
     toString (method: String Function())
   LintCode (class extends DiagnosticCode):
-    new (constructor: LintCode Function(String, String, {String? correctionMessage, bool hasPublishedDocs, DiagnosticSeverity severity, String? uniqueName, deprecated String? uniqueNameCheck}))
+    new (constructor: LintCode Function(String, String, {String? correctionMessage, deprecated bool hasPublishedDocs, DiagnosticSeverity severity, String? uniqueName}))
     hashCode (getter: int)
     severity (getter: DiagnosticSeverity)
     type (getter: DiagnosticType)
@@ -4584,14 +4627,12 @@
     new (constructor: BooleanDiagnosticListener Function())
     errorReported (getter: bool)
     onDiagnostic (method: void Function(Diagnostic))
-    onError (method: void Function(Diagnostic), deprecated)
-  DiagnosticListener (class extends Object implements DiagnosticOrErrorListener):
+  DiagnosticListener (class extends Object):
     nullListener (static getter: DiagnosticListener)
     new (constructor: DiagnosticListener Function())
     onDiagnostic (method: void Function(Diagnostic))
-  DiagnosticOrErrorListener (class extends Object, sealed (immediate subtypes: DiagnosticListener), deprecated)
   DiagnosticReporter (class extends Object):
-    new (constructor: DiagnosticReporter Function(DiagnosticOrErrorListener, Source))
+    new (constructor: DiagnosticReporter Function(DiagnosticListener, Source))
     lockLevel (getter: int)
     lockLevel= (setter: int)
     source (getter: Source)
@@ -4607,9 +4648,6 @@
     new (constructor: RecordingDiagnosticListener Function())
     diagnostics (getter: List<Diagnostic>)
     onDiagnostic (method: void Function(Diagnostic))
-    onError (method: void Function(Diagnostic), deprecated)
-  DiagnosticOrErrorListenerExtension (extension on DiagnosticOrErrorListener):
-    onDiagnostic (method: void Function(Diagnostic))
   ErrorReporter (type alias for DiagnosticReporter, deprecated)
 package:analyzer/exception/exception.dart:
   AnalysisException (class extends Object implements Exception):
diff --git a/pkg/analyzer/lib/analysis_rule/analysis_rule.dart b/pkg/analyzer/lib/analysis_rule/analysis_rule.dart
index d8b7c42..f78c695 100644
--- a/pkg/analyzer/lib/analysis_rule/analysis_rule.dart
+++ b/pkg/analyzer/lib/analysis_rule/analysis_rule.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/lint/pub.dart';
+import 'package:pub_semver/pub_semver.dart';
 
 /// Describes a static analysis rule, either a lint rule (which must be enabled
 /// via analysis options) or a warning rule (which is enabled by default).
@@ -159,6 +160,13 @@
 
   /// Reports a diagnostic at [node] with message [arguments] and
   /// [contextMessages].
+  ///
+  /// {@template analyzer.lib.analysis_rule.analysis_rule.arguments}
+  /// The [arguments] are interpolated into the [DiagnosticCode.problemMessage]
+  /// and [DiagnosticCode.correctionMessage] text. If present, the first
+  /// argument (at position 0) replaces each instance of `{0}`, the second
+  /// argument (at position 1) replaces each instance of `{1}`, etc.
+  /// {@endtemplate}
   Diagnostic? reportAtNode(
     AstNode? node, {
     List<Object> arguments = const [],
@@ -172,6 +180,8 @@
 
   /// Reports a diagnostic at [offset], with [length], with message [arguments]
   /// and [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic reportAtOffset(
     int offset,
     int length, {
@@ -187,6 +197,8 @@
 
   /// Reports a diagnostic at Pubspec [node], with message [arguments] and
   /// [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic reportAtPubNode(
     PubspecNode node, {
     List<Object> arguments = const [],
@@ -200,6 +212,8 @@
 
   /// Reports a diagnostic at [token], with message [arguments] and
   /// [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic? reportAtToken(
     Token token, {
     List<Object> arguments = const [],
@@ -223,6 +237,8 @@
 
   /// Reports [diagnosticCode] at [node] with message [arguments] and
   /// [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic? reportAtNode(
     AstNode? node, {
     List<Object> arguments = const [],
@@ -237,6 +253,8 @@
 
   /// Reports [diagnosticCode] at [offset], with [length], with message [arguments]
   /// and [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic reportAtOffset(
     int offset,
     int length, {
@@ -253,6 +271,8 @@
 
   /// Reports [diagnosticCode] at Pubspec [node], with message [arguments] and
   /// [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic reportAtPubNode(
     PubspecNode node, {
     required DiagnosticCode diagnosticCode,
@@ -274,6 +294,8 @@
 
   /// Reports [diagnosticCode] at [token], with message [arguments] and
   /// [contextMessages].
+  ///
+  /// {@macro analyzer.lib.analysis_rule.analysis_rule.arguments}
   Diagnostic? reportAtToken(
     Token token, {
     required DiagnosticCode diagnosticCode,
@@ -286,3 +308,21 @@
     contextMessages: contextMessages,
   );
 }
+
+/// Describes an [AbstractAnalysisRule] whose implementation has been removed.
+final class RemovedAnalysisRule extends MultiAnalysisRule {
+  RemovedAnalysisRule({
+    required super.name,
+    required super.description,
+    Version? since,
+    String? replacedBy,
+  }) : super(
+         // Note: the reason `RuleState.removed` is deprecated is to encourage
+         // clients to use `AbstractAnalysisRule`, so this reference is ok.
+         // ignore: deprecated_member_use_from_same_package
+         state: RuleState.removed(since: since, replacedBy: replacedBy),
+       );
+
+  @override
+  List<DiagnosticCode> get diagnosticCodes => const [];
+}
diff --git a/pkg/analyzer/lib/analysis_rule/rule_state.dart b/pkg/analyzer/lib/analysis_rule/rule_state.dart
index 757f397..a339a27 100644
--- a/pkg/analyzer/lib/analysis_rule/rule_state.dart
+++ b/pkg/analyzer/lib/analysis_rule/rule_state.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.
 
+/// @docImport 'package:analyzer/analysis_rule/analysis_rule.dart';
+library;
+
 import 'package:pub_semver/pub_semver.dart';
 
 /// A version describing Dart language version 2.12.0.
@@ -39,7 +42,11 @@
     : _type = _RuleStateType.internal,
       replacedBy = null;
 
-  /// Initializes a state that identifies an analysis rule as having been removed.
+  /// Initializes a state that identifies an analysis rule as having been
+  /// removed.
+  ///
+  /// Deprecated; clients should use [RemovedAnalysisRule] instead.
+  @Deprecated('Use RemovedAnalysisRule instead')
   const RuleState.removed({this.since, this.replacedBy})
     : _type = _RuleStateType.removed;
 
diff --git a/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.dart b/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.dart
index e5a2f70..8e8f7b4 100644
--- a/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.dart
+++ b/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.dart
@@ -4,6 +4,5 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/analysis_rule/rule_context.dart';
-import 'package:meta/meta.dart';
 
 part 'rule_visitor_registry.g.dart';
diff --git a/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.g.dart b/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.g.dart
index bdbfb73..6f52ed7 100644
--- a/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.g.dart
+++ b/pkg/analyzer/lib/analysis_rule/rule_visitor_registry.g.dart
@@ -41,7 +41,6 @@
 
   void addBlock(AbstractAnalysisRule rule, AstVisitor visitor);
 
-  @experimental
   void addBlockClassBody(AbstractAnalysisRule rule, AstVisitor visitor);
 
   void addBlockFunctionBody(AbstractAnalysisRule rule, AstVisitor visitor);
@@ -118,14 +117,12 @@
 
   void addDoubleLiteral(AbstractAnalysisRule rule, AstVisitor visitor);
 
-  @experimental
   void addEmptyClassBody(AbstractAnalysisRule rule, AstVisitor visitor);
 
   void addEmptyFunctionBody(AbstractAnalysisRule rule, AstVisitor visitor);
 
   void addEmptyStatement(AbstractAnalysisRule rule, AstVisitor visitor);
 
-  @experimental
   void addEnumBody(AbstractAnalysisRule rule, AstVisitor visitor);
 
   void addEnumConstantArguments(AbstractAnalysisRule rule, AstVisitor visitor);
@@ -285,7 +282,6 @@
 
   void addNamedType(AbstractAnalysisRule rule, AstVisitor visitor);
 
-  @experimental
   void addNameWithTypeParameters(AbstractAnalysisRule rule, AstVisitor visitor);
 
   void addNativeClause(AbstractAnalysisRule rule, AstVisitor visitor);
@@ -335,13 +331,13 @@
 
   void addPrefixExpression(AbstractAnalysisRule rule, AstVisitor visitor);
 
-  @experimental
+  void addPrimaryConstructorBody(AbstractAnalysisRule rule, AstVisitor visitor);
+
   void addPrimaryConstructorDeclaration(
     AbstractAnalysisRule rule,
     AstVisitor visitor,
   );
 
-  @experimental
   void addPrimaryConstructorName(AbstractAnalysisRule rule, AstVisitor visitor);
 
   void addPropertyAccess(AbstractAnalysisRule rule, AstVisitor visitor);
diff --git a/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
index 60b232d..0bd19f8 100644
--- a/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
@@ -27,7 +27,14 @@
     List<String>? excludedPaths,
     ResourceProvider? resourceProvider,
     String? sdkPath,
-  }) = AnalysisContextCollectionImpl;
+  }) {
+    return AnalysisContextCollectionImpl(
+      includedPaths: includedPaths,
+      excludedPaths: excludedPaths,
+      resourceProvider: resourceProvider,
+      sdkPath: sdkPath,
+    );
+  }
 
   /// Return all of the analysis contexts in this collection.
   List<AnalysisContext> get contexts;
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index 360ee72..1dedfe1 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -9,16 +9,15 @@
 /// depends on the supported Dart SDK version, and possibly on the presence of
 /// experimental flags.
 abstract class Feature {
+  /// Feature information for anonymous methods.
+  static final anonymous_methods = ExperimentalFeatures.anonymous_methods;
+
   /// Feature information for augmentations.
   static final augmentations = ExperimentalFeatures.augmentations;
 
   /// Feature information for class modifiers.
   static final class_modifiers = ExperimentalFeatures.class_modifiers;
 
-  /// Feature information for declaring constructors.
-  static final declaring_constructors =
-      ExperimentalFeatures.declaring_constructors;
-
   /// Feature information for number literal digit separators.
   static final digit_separators = ExperimentalFeatures.digit_separators;
 
@@ -81,6 +80,9 @@
   /// Feature information for patterns.
   static final patterns = ExperimentalFeatures.patterns;
 
+  /// Feature information for primary constructors.
+  static final primary_constructors = ExperimentalFeatures.primary_constructors;
+
   /// Feature information for private named parameters.
   static final private_named_parameters =
       ExperimentalFeatures.private_named_parameters;
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index f8ac17f..9c834a42 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -35,7 +35,6 @@
 library;
 
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:meta/meta.dart';
 
 export 'package:analyzer/src/dart/ast/ast.dart'
     show
@@ -177,6 +176,7 @@
         MethodReferenceExpression,
         MixinDeclaration,
         MixinOnClause,
+        // ignore: deprecated_member_use_from_same_package
         NamedCompilationUnitMember,
         NamedExpression,
         NamedType,
@@ -203,6 +203,7 @@
         PostfixExpression,
         PrefixedIdentifier,
         PrefixExpression,
+        PrimaryConstructorBody,
         PrimaryConstructorDeclaration,
         PrimaryConstructorName,
         PropertyAccess,
@@ -215,7 +216,9 @@
         RecordTypeAnnotationPositionalField,
         RedirectingConstructorInvocation,
         RelationalPattern,
+        // ignore: deprecated_member_use_from_same_package
         RepresentationConstructorName,
+        // ignore: deprecated_member_use_from_same_package
         RepresentationDeclaration,
         RestPatternElement,
         RethrowExpression,
@@ -263,44 +266,3 @@
         WildcardPattern,
         WithClause,
         YieldStatement;
-
-/// Controls how AST represents nodes related to the declaring constructors
-/// language feature.
-///
-/// Must be set before any interaction with the analyzer, specifically before
-/// parsing any code. Must not be changed after that.
-///
-/// For [ClassDeclaration], when `true`:
-/// 1. [ClassDeclaration.namePart] can be used.
-/// 2. [ClassDeclaration.name] throws [UnsupportedError].
-/// 3. [ClassDeclaration.typeParameters] throws [UnsupportedError].
-/// 4. [ClassDeclaration.body] can be used.
-/// 5. [ClassDeclaration.members] throws [UnsupportedError].
-/// 6. [ClassDeclaration.childEntities] returns `namePart` and `body`, and does
-///    not return `name`, `typeParameters`, or `members` entities.
-/// 7. [ClassDeclaration.visitChildren] visits `namePart` and `body`, and does
-///    not visit `typeParameters` or `members`.
-///
-/// For [EnumDeclaration], when `true`:
-/// 1. [EnumDeclaration.namePart] can be used.
-/// 2. [EnumDeclaration.name] throws [UnsupportedError].
-/// 3. [EnumDeclaration.typeParameters] throws [UnsupportedError].
-/// 4. [EnumDeclaration.childEntities] returns `namePart`, and does not
-///    return `name` or `typeParameters` entities.
-/// 5. [EnumDeclaration.visitChildren] visits `namePart`, and does not
-///    visit `typeParameters`.
-///
-/// For [ExtensionTypeDeclaration], when `true`:
-/// 1. [ExtensionTypeDeclaration.namePart] can be used.
-/// 2. [ExtensionTypeDeclaration.name] throws [UnsupportedError].
-/// 3. [ExtensionTypeDeclaration.typeParameters] throws [UnsupportedError].
-/// 4. [ExtensionTypeDeclaration.representation] throws [UnsupportedError].
-/// 5. [ExtensionTypeDeclaration.body] can be used.
-/// 6. [ExtensionTypeDeclaration.members] throws [UnsupportedError].
-/// 7. [ExtensionTypeDeclaration.childEntities] returns `namePart` and `body`,
-///    and does not return `name`, `typeParameters`, `representation`, or
-///    `members` entities.
-/// 8. [ExtensionTypeDeclaration.visitChildren] visits `namePart` and `body`,
-///    and does not visit `typeParameters`, `representation`, or `members`.
-@experimental
-bool useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
diff --git a/pkg/analyzer/lib/dart/ast/visitor.dart b/pkg/analyzer/lib/dart/ast/visitor.dart
index 52e8e97..66fb327 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.dart
@@ -24,7 +24,6 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:meta/meta.dart';
 
 part 'visitor.g.dart';
 
diff --git a/pkg/analyzer/lib/dart/ast/visitor.g.dart b/pkg/analyzer/lib/dart/ast/visitor.g.dart
index 7323502..41680a3 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.g.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.g.dart
@@ -67,7 +67,6 @@
   @override
   R? visitBlock(Block node) => visitStatement(node);
 
-  @experimental
   @override
   R? visitBlockClassBody(BlockClassBody node) => visitClassBody(node);
 
@@ -95,7 +94,6 @@
   @override
   R? visitCatchClauseParameter(CatchClauseParameter node) => visitNode(node);
 
-  @experimental
   R? visitClassBody(ClassBody node) => visitNode(node);
 
   @override
@@ -104,7 +102,6 @@
 
   R? visitClassMember(ClassMember node) => visitDeclaration(node);
 
-  @experimental
   R? visitClassNamePart(ClassNamePart node) => visitNode(node);
 
   @override
@@ -202,7 +199,6 @@
   @override
   R? visitDoubleLiteral(DoubleLiteral node) => visitLiteral(node);
 
-  @experimental
   @override
   R? visitEmptyClassBody(EmptyClassBody node) => visitClassBody(node);
 
@@ -212,7 +208,6 @@
   @override
   R? visitEmptyStatement(EmptyStatement node) => visitStatement(node);
 
-  @experimental
   @override
   R? visitEnumBody(EnumBody node) => visitNode(node);
 
@@ -446,6 +441,7 @@
   @override
   R? visitMixinOnClause(MixinOnClause node) => visitNode(node);
 
+  // ignore: deprecated_member_use_from_same_package
   R? visitNamedCompilationUnitMember(NamedCompilationUnitMember node) =>
       visitCompilationUnitMember(node);
 
@@ -458,7 +454,6 @@
   R? visitNamespaceDirective(NamespaceDirective node) =>
       visitUriBasedDirective(node);
 
-  @experimental
   @override
   R? visitNameWithTypeParameters(NameWithTypeParameters node) =>
       visitClassNamePart(node);
@@ -535,12 +530,14 @@
   @override
   R? visitPrefixExpression(PrefixExpression node) => visitExpression(node);
 
-  @experimental
+  @override
+  R? visitPrimaryConstructorBody(PrimaryConstructorBody node) =>
+      visitClassMember(node);
+
   @override
   R? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) =>
       visitClassNamePart(node);
 
-  @experimental
   @override
   R? visitPrimaryConstructorName(PrimaryConstructorName node) =>
       visitNode(node);
@@ -585,10 +582,12 @@
   R? visitRelationalPattern(RelationalPattern node) => visitDartPattern(node);
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationConstructorName(RepresentationConstructorName node) =>
       visitNode(node);
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationDeclaration(RepresentationDeclaration node) =>
       visitNode(node);
 
@@ -813,7 +812,6 @@
     return null;
   }
 
-  @experimental
   @override
   R? visitBlockClassBody(BlockClassBody node) {
     node.visitChildren(this);
@@ -1008,7 +1006,6 @@
     return null;
   }
 
-  @experimental
   @override
   R? visitEmptyClassBody(EmptyClassBody node) {
     node.visitChildren(this);
@@ -1027,7 +1024,6 @@
     return null;
   }
 
-  @experimental
   @override
   R? visitEnumBody(EnumBody node) {
     node.visitChildren(this);
@@ -1406,7 +1402,6 @@
     return null;
   }
 
-  @experimental
   @override
   R? visitNameWithTypeParameters(NameWithTypeParameters node) {
     node.visitChildren(this);
@@ -1529,14 +1524,18 @@
     return null;
   }
 
-  @experimental
+  @override
+  R? visitPrimaryConstructorBody(PrimaryConstructorBody node) {
+    node.visitChildren(this);
+    return null;
+  }
+
   @override
   R? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
     node.visitChildren(this);
     return null;
   }
 
-  @experimental
   @override
   R? visitPrimaryConstructorName(PrimaryConstructorName node) {
     node.visitChildren(this);
@@ -1604,12 +1603,14 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationConstructorName(RepresentationConstructorName node) {
     node.visitChildren(this);
     return null;
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationDeclaration(RepresentationDeclaration node) {
     node.visitChildren(this);
     return null;
@@ -1880,7 +1881,6 @@
   @override
   R? visitBlock(Block node) => null;
 
-  @experimental
   @override
   R? visitBlockClassBody(BlockClassBody node) => null;
 
@@ -1979,7 +1979,6 @@
   @override
   R? visitDoubleLiteral(DoubleLiteral node) => null;
 
-  @experimental
   @override
   R? visitEmptyClassBody(EmptyClassBody node) => null;
 
@@ -1989,7 +1988,6 @@
   @override
   R? visitEmptyStatement(EmptyStatement node) => null;
 
-  @experimental
   @override
   R? visitEnumBody(EnumBody node) => null;
 
@@ -2182,7 +2180,6 @@
   @override
   R? visitNamedType(NamedType node) => null;
 
-  @experimental
   @override
   R? visitNameWithTypeParameters(NameWithTypeParameters node) => null;
 
@@ -2245,12 +2242,13 @@
   @override
   R? visitPrefixExpression(PrefixExpression node) => null;
 
-  @experimental
+  @override
+  R? visitPrimaryConstructorBody(PrimaryConstructorBody node) => null;
+
   @override
   R? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) =>
       null;
 
-  @experimental
   @override
   R? visitPrimaryConstructorName(PrimaryConstructorName node) => null;
 
@@ -2289,10 +2287,12 @@
   R? visitRelationalPattern(RelationalPattern node) => null;
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationConstructorName(RepresentationConstructorName node) =>
       null;
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationDeclaration(RepresentationDeclaration node) => null;
 
   @override
@@ -2452,7 +2452,6 @@
   @override
   R? visitBlock(Block node) => _throw(node);
 
-  @experimental
   @override
   R? visitBlockClassBody(BlockClassBody node) => _throw(node);
 
@@ -2553,7 +2552,6 @@
   @override
   R? visitDoubleLiteral(DoubleLiteral node) => _throw(node);
 
-  @experimental
   @override
   R? visitEmptyClassBody(EmptyClassBody node) => _throw(node);
 
@@ -2563,7 +2561,6 @@
   @override
   R? visitEmptyStatement(EmptyStatement node) => _throw(node);
 
-  @experimental
   @override
   R? visitEnumBody(EnumBody node) => _throw(node);
 
@@ -2761,7 +2758,6 @@
   @override
   R? visitNamedType(NamedType node) => _throw(node);
 
-  @experimental
   @override
   R? visitNameWithTypeParameters(NameWithTypeParameters node) => _throw(node);
 
@@ -2825,12 +2821,13 @@
   @override
   R? visitPrefixExpression(PrefixExpression node) => _throw(node);
 
-  @experimental
+  @override
+  R? visitPrimaryConstructorBody(PrimaryConstructorBody node) => _throw(node);
+
   @override
   R? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) =>
       _throw(node);
 
-  @experimental
   @override
   R? visitPrimaryConstructorName(PrimaryConstructorName node) => _throw(node);
 
@@ -2869,10 +2866,12 @@
   R? visitRelationalPattern(RelationalPattern node) => _throw(node);
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationConstructorName(RepresentationConstructorName node) =>
       _throw(node);
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationDeclaration(RepresentationDeclaration node) =>
       _throw(node);
 
@@ -3102,7 +3101,6 @@
     return result;
   }
 
-  @experimental
   @override
   T? visitBlockClassBody(BlockClassBody node) {
     stopwatch.start();
@@ -3361,7 +3359,6 @@
     return result;
   }
 
-  @experimental
   @override
   T? visitEmptyClassBody(EmptyClassBody node) {
     stopwatch.start();
@@ -3386,7 +3383,6 @@
     return result;
   }
 
-  @experimental
   @override
   T? visitEnumBody(EnumBody node) {
     stopwatch.start();
@@ -3891,7 +3887,6 @@
     return result;
   }
 
-  @experimental
   @override
   T? visitNameWithTypeParameters(NameWithTypeParameters node) {
     stopwatch.start();
@@ -4054,7 +4049,14 @@
     return result;
   }
 
-  @experimental
+  @override
+  T? visitPrimaryConstructorBody(PrimaryConstructorBody node) {
+    stopwatch.start();
+    T? result = _baseVisitor.visitPrimaryConstructorBody(node);
+    stopwatch.stop();
+    return result;
+  }
+
   @override
   T? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
     stopwatch.start();
@@ -4063,7 +4065,6 @@
     return result;
   }
 
-  @experimental
   @override
   T? visitPrimaryConstructorName(PrimaryConstructorName node) {
     stopwatch.start();
@@ -4151,6 +4152,7 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   T? visitRepresentationConstructorName(RepresentationConstructorName node) {
     stopwatch.start();
     T? result = _baseVisitor.visitRepresentationConstructorName(node);
@@ -4159,6 +4161,7 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   T? visitRepresentationDeclaration(RepresentationDeclaration node) {
     stopwatch.start();
     T? result = _baseVisitor.visitRepresentationDeclaration(node);
@@ -4512,7 +4515,6 @@
   @override
   R? visitBlock(Block node) => visitNode(node);
 
-  @experimental
   @override
   R? visitBlockClassBody(BlockClassBody node) => visitNode(node);
 
@@ -4617,7 +4619,6 @@
   @override
   R? visitDoubleLiteral(DoubleLiteral node) => visitNode(node);
 
-  @experimental
   @override
   R? visitEmptyClassBody(EmptyClassBody node) => visitNode(node);
 
@@ -4627,7 +4628,6 @@
   @override
   R? visitEmptyStatement(EmptyStatement node) => visitNode(node);
 
-  @experimental
   @override
   R? visitEnumBody(EnumBody node) => visitNode(node);
 
@@ -4830,7 +4830,6 @@
   @override
   R? visitNamedType(NamedType node) => visitNode(node);
 
-  @experimental
   @override
   R? visitNameWithTypeParameters(NameWithTypeParameters node) =>
       visitNode(node);
@@ -4901,12 +4900,14 @@
   @override
   R? visitPrefixExpression(PrefixExpression node) => visitNode(node);
 
-  @experimental
+  @override
+  R? visitPrimaryConstructorBody(PrimaryConstructorBody node) =>
+      visitNode(node);
+
   @override
   R? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) =>
       visitNode(node);
 
-  @experimental
   @override
   R? visitPrimaryConstructorName(PrimaryConstructorName node) =>
       visitNode(node);
@@ -4946,10 +4947,12 @@
   R? visitRelationalPattern(RelationalPattern node) => visitNode(node);
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationConstructorName(RepresentationConstructorName node) =>
       visitNode(node);
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationDeclaration(RepresentationDeclaration node) =>
       visitNode(node);
 
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 8d8e451..486054c 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -59,6 +59,7 @@
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart' show Name;
 import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:meta/meta.dart';
 import 'package:pub_semver/pub_semver.dart';
 
 export 'package:analyzer/src/dart/element/inheritance_manager3.dart' show Name;
@@ -228,6 +229,10 @@
   /// Whether the constructor is a const constructor.
   bool get isConst;
 
+  /// Whether this is a declaring constructor.
+  @experimental
+  bool get isDeclaring;
+
   /// Whether the constructor can be used as a default constructor - unnamed,
   /// and has no required parameters.
   bool get isDefaultConstructor;
@@ -238,6 +243,38 @@
   /// Whether the constructor represents a generative constructor.
   bool get isGenerative;
 
+  /// Whether the constructor is from an explicit [ConstructorDeclaration]
+  /// or [PrimaryConstructorDeclaration].
+  ///
+  /// When this is `true`, [isOriginImplicitDefault] and
+  /// [isOriginMixinApplication] are `false`.
+  bool get isOriginDeclaration;
+
+  /// Whether the constructor was created because there are no explicit
+  /// constructors.
+  ///
+  /// When this is `true`, [isOriginDeclaration] and
+  /// [isOriginMixinApplication] are `false`.
+  bool get isOriginImplicitDefault;
+
+  /// Whether the constructor was created for a mixin application.
+  ///
+  /// When this is `true`, [isOriginDeclaration] and
+  /// [isOriginImplicitDefault] are `false`.
+  bool get isOriginMixinApplication;
+
+  /// Whether this is a primary constructor.
+  /// When `true`, [isDeclaring] is also `true`.
+  @experimental
+  bool get isPrimary;
+
+  @Deprecated(
+    'Use isOriginDeclaration / isOriginImplicitDefault / '
+    'isOriginMixinApplication instead, depending on intent.',
+  )
+  @override
+  bool get isSynthetic;
+
   /// The name of this constructor.
   ///
   /// The name of the unnamed constructor is `new`.
@@ -270,9 +307,26 @@
   @override
   InstanceFragment? get enclosingFragment;
 
+  /// The offset of the `factory` keyword.
+  ///
+  /// It is `null` if the fragment is synthetic, or does not have the keyword.
+  int? get factoryKeywordOffset;
+
+  @Deprecated(
+    'Use isOriginDeclaration / isOriginImplicitDefault / '
+    'isOriginMixinApplication instead, depending on intent.',
+  )
+  @override
+  bool get isSynthetic;
+
   @override
   String get name;
 
+  /// The offset of the `new` keyword.
+  ///
+  /// It is `null` if the fragment is synthetic, or does not have the keyword.
+  int? get newKeywordOffset;
+
   @override
   ConstructorFragment? get nextFragment;
 
@@ -1193,6 +1247,10 @@
   @override
   FieldElement get baseElement;
 
+  /// The declaring formal parameter, if created from one.
+  @experimental
+  FieldFormalParameterElement? get declaringFormalParameter;
+
   @override
   InstanceElement get enclosingElement;
 
@@ -1217,6 +1275,18 @@
   /// Whether the field was explicitly marked as being external.
   bool get isExternal;
 
+  /// Whether the field is from a declaring formal parameter.
+  ///
+  /// When this is `true`, [isOriginDeclaration], [isOriginGetterSetter],
+  /// and [isOriginEnumValues] are `false`.
+  bool get isOriginDeclaringFormalParameter;
+
+  /// Whether the field is the `values` field of an enum.
+  ///
+  /// When this is `true`, [isOriginDeclaration], [isOriginGetterSetter],
+  /// and [isOriginDeclaringFormalParameter] are `false`.
+  bool get isOriginEnumValues;
+
   /// Whether the field can be type promoted.
   bool get isPromotable;
 }
@@ -1235,6 +1305,28 @@
 
   @override
   List<FieldFormalParameterFragment> get fragments;
+
+  /// Whether this is a declaring formal parameter.
+  @experimental
+  bool get isDeclaring;
+
+  /// If this field formal parameter is a named parameter with a private name,
+  /// the original private name.
+  ///
+  /// In that case, [name] is the corresponding public name for the parameter
+  /// and [privateName] is the original declared name. Otherwise (the declared
+  /// name wasn't private or was private but has no corresponding public name),
+  /// then, [privateName] is `null`.
+  ///
+  /// The private name is used for:
+  ///
+  /// * Accessing the parameter in the initializer list.
+  ///
+  /// * Finding the corresponding instance variable.
+  ///
+  /// * Referring to the parameter in the constructor's doc comment.
+  @experimental
+  String? get privateName;
 }
 
 /// The portion of a [FieldFormalParameterElement] contributed by a single
@@ -1250,6 +1342,13 @@
 
   @override
   FieldFormalParameterFragment? get previousFragment;
+
+  /// If this field formal parameter is a named parameter with a private name,
+  /// the original private name.
+  ///
+  /// In that case, [name] is the corresponding public name for the parameter.
+  @experimental
+  String? get privateName;
 }
 
 /// The portion of a [FieldElement] contributed by a single declaration.
@@ -2832,6 +2931,29 @@
   @override
   List<PropertyAccessorFragment> get fragments;
 
+  /// Whether the property accessor is from an explicit [MethodDeclaration] or
+  /// [FunctionDeclaration].
+  ///
+  /// When this is `true`, [isOriginVariable] and [isOriginInterface] are `false`.
+  bool get isOriginDeclaration;
+
+  /// Whether the property accessor is created while building interface.
+  ///
+  /// When this is `true`, [isOriginDeclaration] and [isOriginVariable]
+  /// are `false`.
+  bool get isOriginInterface;
+
+  /// Whether the property accessor is from a [FieldElement] or
+  /// [TopLevelVariableElement].
+  ///
+  /// When this is `true`, [isOriginDeclaration] and [isOriginInterface] are
+  /// `false`.
+  bool get isOriginVariable;
+
+  @Deprecated('Use isOriginX instead')
+  @override
+  bool get isSynthetic;
+
   /// The field or top-level variable associated with this getter.
   ///
   /// If this getter was explicitly defined (is not synthetic) then the variable
@@ -2886,6 +3008,21 @@
   /// Whether any fragment of this variable has an initializer at declaration.
   bool get hasInitializer;
 
+  /// Whether the property is from an explicit [FieldDeclaration],
+  /// [TopLevelVariableDeclaration], or [EnumConstantDeclaration].
+  ///
+  /// When this is `true`, [isOriginGetterSetter] is `false`.
+  bool get isOriginDeclaration;
+
+  /// Whether the property is from a getter or setter.
+  ///
+  /// When this is `true`, [isOriginGetterSetter] is `false`.
+  bool get isOriginGetterSetter;
+
+  @Deprecated('Use isOriginX instead')
+  @override
+  bool get isSynthetic;
+
   @override
   LibraryElement get library;
 
@@ -2924,6 +3061,7 @@
   /// A synthetic fragment is a fragment that is not represented in the source
   /// code explicitly, but is implied by the source code, such as the default
   /// constructor for a class that does not explicitly define any constructors.
+  @Deprecated('Use isOriginX instead')
   bool get isSynthetic;
 
   @override
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index fa2cfaf..6473718 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -24,22 +24,15 @@
   void onDiagnostic(Diagnostic diagnostic) {
     _diagnosticReported = true;
   }
-
-  @Deprecated("Call 'onDiagnostic' instead")
-  void onError(Diagnostic diagnostic) => onDiagnostic(diagnostic);
 }
 
-// ignore: deprecated_member_use_from_same_package
-abstract class DiagnosticListener implements DiagnosticOrErrorListener {
+abstract class DiagnosticListener {
   /// A diagnostic listener that ignores diagnostics that are reported to it.
   static const DiagnosticListener nullListener = _NullDiagnosticListener();
 
   void onDiagnostic(Diagnostic diagnostic);
 }
 
-@Deprecated("Use 'DiagnosticListener' instead")
-sealed class DiagnosticOrErrorListener {}
-
 /// A diagnostic listener that records the diagnostics that are reported to it
 /// in a way that is appropriate for caching those diagnostic within an
 /// analysis context.
@@ -58,9 +51,6 @@
   void onDiagnostic(Diagnostic diagnostic) {
     (_diagnostics ??= {}).add(diagnostic);
   }
-
-  @Deprecated("Call 'onDiagnostic' instead")
-  void onError(Diagnostic diagnostic) => onDiagnostic(diagnostic);
 }
 
 /// A [DiagnosticListener] that ignores everything.
@@ -72,10 +62,3 @@
     // Ignore diagnostics.
   }
 }
-
-// ignore: deprecated_member_use_from_same_package
-extension DiagnosticOrErrorListenerExtension on DiagnosticOrErrorListener {
-  void onDiagnostic(Diagnostic diagnostic) => switch (this) {
-    DiagnosticListener self => self.onDiagnostic(diagnostic),
-  };
-}
diff --git a/pkg/analyzer/lib/source/error_processor.dart b/pkg/analyzer/lib/source/error_processor.dart
index eaffd4c..80e3c5a 100644
--- a/pkg/analyzer/lib/source/error_processor.dart
+++ b/pkg/analyzer/lib/source/error_processor.dart
@@ -68,7 +68,7 @@
   /// given [severity].
   ///
   /// If [severity] is `null`, matching errors will be filtered.
-  ErrorProcessor(this.code, [this.severity]);
+  ErrorProcessor(String code, [this.severity]) : code = code.toLowerCase();
 
   /// Create an error processor that ignores the given error by [code].
   factory ErrorProcessor.ignore(String code) => ErrorProcessor(code);
@@ -77,13 +77,9 @@
   String get description => '$code -> ${severity?.name}';
 
   /// Check if this processor applies to the given [diagnostic].
-  ///
-  /// Note: [code] is normalized to uppercase; `errorCode.name` for regular
-  /// analysis issues uses uppercase; `errorCode.name` for lints uses lowercase.
   @visibleForTesting
   bool appliesTo(Diagnostic diagnostic) =>
-      code == diagnostic.diagnosticCode.name ||
-      code == diagnostic.diagnosticCode.name.toUpperCase();
+      code == diagnostic.diagnosticCode.name.toLowerCase();
 
   @override
   String toString() => "ErrorProcessor[code='$code', severity=$severity]";
diff --git a/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart b/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart
deleted file mode 100644
index ab0e529..0000000
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.dart
+++ /dev/null
@@ -1,7 +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:_fe_analyzer_shared/src/base/errors.dart';
-
-part 'package:analyzer/src/analysis_options/error/option_codes.g.dart';
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
deleted file mode 100644
index de38c21..0000000
--- a/pkg/analyzer/lib/src/analysis_options/error/option_codes.g.dart
+++ /dev/null
@@ -1,886 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/analysis_options/error/option_codes.dart";
-
-class AnalysisOptionsErrorCode extends DiagnosticCodeWithExpectedTypes {
-  /// An error code indicating that there is a syntactic error in the included
-  /// file.
-  ///
-  /// Parameters:
-  /// Object p0: the path of the file containing the error
-  /// Object p1: the starting offset of the text in the file that contains the
-  ///            error
-  /// Object p2: the ending offset of the text in the file that contains the
-  ///            error
-  /// Object p3: the error message
-  static const AnalysisOptionsErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-    })
-  >
-  includedFileParseError = AnalysisOptionsErrorTemplate(
-    name: 'INCLUDED_FILE_PARSE_ERROR',
-    problemMessage: "{3} in {0}({1}..{2})",
-    uniqueNameCheck: 'AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR',
-    withArguments: _withArgumentsIncludedFileParseError,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// An error code indicating that there is a syntactic error in the file.
-  ///
-  /// Parameters:
-  /// Object p0: the error message from the parse error
-  static const AnalysisOptionsErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  parseError = AnalysisOptionsErrorTemplate(
-    name: 'PARSE_ERROR',
-    problemMessage: "{0}",
-    uniqueNameCheck: 'AnalysisOptionsErrorCode.PARSE_ERROR',
-    withArguments: _withArgumentsParseError,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const AnalysisOptionsErrorCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.COMPILE_TIME_ERROR,
-         uniqueName: 'AnalysisOptionsErrorCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsIncludedFileParseError({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsErrorCode.includedFileParseError,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsParseError({required Object p0}) {
-    return LocatableDiagnosticImpl(AnalysisOptionsErrorCode.parseError, [p0]);
-  }
-}
-
-final class AnalysisOptionsErrorTemplate<T extends Function>
-    extends AnalysisOptionsErrorCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const AnalysisOptionsErrorTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class AnalysisOptionsErrorWithoutArguments
-    extends AnalysisOptionsErrorCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const AnalysisOptionsErrorWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
-
-class AnalysisOptionsWarningCode extends DiagnosticCodeWithExpectedTypes {
-  /// An error code indicating that the given option is deprecated.
-  ///
-  /// Parameters:
-  /// Object p0: the option name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  analysisOptionDeprecated = AnalysisOptionsWarningTemplate(
-    name: 'ANALYSIS_OPTION_DEPRECATED',
-    problemMessage: "The option '{0}' is no longer supported.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED',
-    withArguments: _withArgumentsAnalysisOptionDeprecated,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// An error code indicating that the given option is deprecated.
-  ///
-  /// Parameters:
-  /// Object p0: the option name
-  /// Object p1: the replacement option name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  analysisOptionDeprecatedWithReplacement = AnalysisOptionsWarningTemplate(
-    name: 'ANALYSIS_OPTION_DEPRECATED',
-    problemMessage: "The option '{0}' is no longer supported.",
-    correctionMessage: "Try using the new '{1}' option.",
-    uniqueName: 'ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT',
-    uniqueNameCheck:
-        'AnalysisOptionsWarningCode.ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT',
-    withArguments: _withArgumentsAnalysisOptionDeprecatedWithReplacement,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// A hint code indicating reference to a deprecated lint.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  deprecatedLint = AnalysisOptionsWarningTemplate(
-    name: 'DEPRECATED_LINT',
-    problemMessage: "'{0}' is a deprecated lint rule and should not be used.",
-    correctionMessage: "Try removing '{0}'.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.DEPRECATED_LINT',
-    withArguments: _withArgumentsDeprecatedLint,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// A hint code indicating reference to a deprecated lint.
-  ///
-  /// Parameters:
-  /// String p0: the deprecated lint name
-  /// String p1: the replacing rule name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  deprecatedLintWithReplacement = AnalysisOptionsWarningTemplate(
-    name: 'DEPRECATED_LINT_WITH_REPLACEMENT',
-    problemMessage: "'{0}' is deprecated and should be replaced by '{1}'.",
-    correctionMessage: "Try replacing '{0}' with '{1}'.",
-    uniqueNameCheck:
-        'AnalysisOptionsWarningCode.DEPRECATED_LINT_WITH_REPLACEMENT',
-    withArguments: _withArgumentsDeprecatedLintWithReplacement,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Duplicate rules.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  duplicateRule = AnalysisOptionsWarningTemplate(
-    name: 'DUPLICATE_RULE',
-    problemMessage:
-        "The rule {0} is already specified and doesn't need to be specified again.",
-    correctionMessage: "Try removing all but one specification of the rule.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.DUPLICATE_RULE',
-    withArguments: _withArgumentsDuplicateRule,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating a specified include file has a warning.
-  ///
-  /// Parameters:
-  /// Object p0: the path of the file containing the warnings
-  /// Object p1: the starting offset of the text in the file that contains the
-  ///            warning
-  /// Object p2: the ending offset of the text in the file that contains the
-  ///            warning
-  /// Object p3: the warning message
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-    })
-  >
-  includedFileWarning = AnalysisOptionsWarningTemplate(
-    name: 'INCLUDED_FILE_WARNING',
-    problemMessage: "Warning in the included options file {0}({1}..{2}): {3}",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INCLUDED_FILE_WARNING',
-    withArguments: _withArgumentsIncludedFileWarning,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// An error code indicating a specified include file could not be found.
-  ///
-  /// Parameters:
-  /// Object p0: the URI of the file to be included
-  /// Object p1: the path of the file containing the include directive
-  /// Object p2: the path of the context being analyzed
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  includeFileNotFound = AnalysisOptionsWarningTemplate(
-    name: 'INCLUDE_FILE_NOT_FOUND',
-    problemMessage:
-        "The include file '{0}' in '{1}' can't be found when analyzing '{2}'.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INCLUDE_FILE_NOT_FOUND',
-    withArguments: _withArgumentsIncludeFileNotFound,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// An error code indicating an incompatible rule.
-  ///
-  /// The incompatible rules must be included by context messages.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  /// String p1: the incompatible rules
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  incompatibleLint = AnalysisOptionsWarningTemplate(
-    name: 'INCOMPATIBLE_LINT',
-    problemMessage: "The rule '{0}' is incompatible with {1}.",
-    correctionMessage: "Try removing all but one of the incompatible rules.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INCOMPATIBLE_LINT',
-    withArguments: _withArgumentsIncompatibleLint,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// An error code indicating an incompatible rule.
-  ///
-  /// The files that enable the referenced rules must be included by context messages.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  /// String p1: the incompatible rules
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  incompatibleLintFiles = AnalysisOptionsWarningTemplate(
-    name: 'INCOMPATIBLE_LINT',
-    problemMessage: "The rule '{0}' is incompatible with {1}.",
-    correctionMessage:
-        "Try locally disabling all but one of the conflicting rules or "
-        "removing one of the incompatible files.",
-    uniqueName: 'INCOMPATIBLE_LINT_FILES',
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INCOMPATIBLE_LINT_FILES',
-    withArguments: _withArgumentsIncompatibleLintFiles,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// An error code indicating an incompatible rule.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  /// String p1: the incompatible rules
-  /// int p2: the number of files that include the incompatible rule
-  /// String p3: plural suffix for the word "file"
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required int p2,
-      required String p3,
-    })
-  >
-  incompatibleLintIncluded = AnalysisOptionsWarningTemplate(
-    name: 'INCOMPATIBLE_LINT',
-    problemMessage:
-        "The rule '{0}' is incompatible with {1}, which is included from {2} "
-        "file{3}.",
-    correctionMessage:
-        "Try locally disabling all but one of the conflicting rules or "
-        "removing one of the incompatible files.",
-    uniqueName: 'INCOMPATIBLE_LINT_INCLUDED',
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INCOMPATIBLE_LINT_INCLUDED',
-    withArguments: _withArgumentsIncompatibleLintIncluded,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.int,
-      ExpectedType.string,
-    ],
-  );
-
-  /// An error code indicating that a plugin is being configured with an invalid
-  /// value for an option and a detail message is provided.
-  ///
-  /// Parameters:
-  /// String p0: the option name
-  /// String p1: the detail message
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidOption = AnalysisOptionsWarningTemplate(
-    name: 'INVALID_OPTION',
-    problemMessage: "Invalid option specified for '{0}': {1}",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INVALID_OPTION',
-    withArguments: _withArgumentsInvalidOption,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// An error code indicating an invalid format for an options file section.
-  ///
-  /// Parameters:
-  /// String p0: the section name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidSectionFormat = AnalysisOptionsWarningTemplate(
-    name: 'INVALID_SECTION_FORMAT',
-    problemMessage: "Invalid format for the '{0}' section.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.INVALID_SECTION_FORMAT',
-    withArguments: _withArgumentsInvalidSectionFormat,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating multiple plugins have been specified as enabled.
-  ///
-  /// Parameters:
-  /// String p0: the name of the first plugin
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  multiplePlugins = AnalysisOptionsWarningTemplate(
-    name: 'MULTIPLE_PLUGINS',
-    problemMessage: "Multiple plugins can't be enabled.",
-    correctionMessage: "Remove all plugins following the first, '{0}'.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.MULTIPLE_PLUGINS',
-    withArguments: _withArgumentsMultiplePlugins,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating plugins have been specified in an "inner"
-  /// analysis options file.
-  ///
-  /// Parameters:
-  /// String contextRoot: the root of the analysis context
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String contextRoot})
-  >
-  pluginsInInnerOptions = AnalysisOptionsWarningTemplate(
-    name: 'PLUGINS_IN_INNER_OPTIONS',
-    problemMessage:
-        "Plugins can only be specified in the root of a pub workspace or the root "
-        "of a package that isn't in a workspace.",
-    correctionMessage:
-        "Try specifying plugins in an analysis options file at '{0}'.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.PLUGINS_IN_INNER_OPTIONS',
-    withArguments: _withArgumentsPluginsInInnerOptions,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating a specified include file includes itself recursively.
-  ///
-  /// Parameters:
-  /// Object p0: the URI of the file to be included
-  /// Object p1: the path of the file containing the include directive
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  recursiveIncludeFile = AnalysisOptionsWarningTemplate(
-    name: 'RECURSIVE_INCLUDE_FILE',
-    problemMessage:
-        "The include file '{0}' in '{1}' includes itself recursively.",
-    correctionMessage:
-        "Try changing the chain of 'include's to not re-include this file.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.RECURSIVE_INCLUDE_FILE',
-    withArguments: _withArgumentsRecursiveIncludeFile,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// An error code indicating a removed lint rule.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  /// String p1: the SDK version in which the lint was removed
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  removedLint = AnalysisOptionsWarningTemplate(
-    name: 'REMOVED_LINT',
-    problemMessage: "'{0}' was removed in Dart '{1}'",
-    correctionMessage: "Remove the reference to '{0}'.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.REMOVED_LINT',
-    withArguments: _withArgumentsRemovedLint,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// An error code indicating a removed lint rule.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  /// String p1: the SDK version in which the lint was removed
-  /// String p2: the name of a replacing lint
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  replacedLint = AnalysisOptionsWarningTemplate(
-    name: 'REPLACED_LINT',
-    problemMessage: "'{0}' was replaced by '{2}' in Dart '{1}'.",
-    correctionMessage: "Replace '{0}' with '{1}'.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.REPLACED_LINT',
-    withArguments: _withArgumentsReplacedLint,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// An error code indicating an undefined lint rule.
-  ///
-  /// Parameters:
-  /// String p0: the rule name
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedLint = AnalysisOptionsWarningTemplate(
-    name: 'UNDEFINED_LINT',
-    problemMessage: "'{0}' is not a recognized lint rule.",
-    correctionMessage: "Try using the name of a recognized lint rule.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.UNDEFINED_LINT',
-    withArguments: _withArgumentsUndefinedLint,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating that an unrecognized error code is being used to
-  /// specify an error filter.
-  ///
-  /// Parameters:
-  /// String p0: the unrecognized error code
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unrecognizedErrorCode = AnalysisOptionsWarningTemplate(
-    name: 'UNRECOGNIZED_ERROR_CODE',
-    problemMessage: "'{0}' isn't a recognized error code.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.UNRECOGNIZED_ERROR_CODE',
-    withArguments: _withArgumentsUnrecognizedErrorCode,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating that a YAML section is being configured with an
-  /// unsupported option where there is just one legal value.
-  ///
-  /// Parameters:
-  /// String p0: the section name
-  /// String p1: the unsupported option key
-  /// String p2: the legal value
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  unsupportedOptionWithLegalValue = AnalysisOptionsWarningTemplate(
-    name: 'UNSUPPORTED_OPTION_WITH_LEGAL_VALUE',
-    problemMessage:
-        "The option '{1}' isn't supported by '{0}'. Try using the only supported "
-        "option: '{2}'.",
-    uniqueNameCheck:
-        'AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUE',
-    withArguments: _withArgumentsUnsupportedOptionWithLegalValue,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// An error code indicating that a YAML section is being configured with an
-  /// unsupported option and legal options are provided.
-  ///
-  /// Parameters:
-  /// String p0: the section name
-  /// String p1: the unsupported option key
-  /// String p2: legal values
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  unsupportedOptionWithLegalValues = AnalysisOptionsWarningTemplate(
-    name: 'UNSUPPORTED_OPTION_WITH_LEGAL_VALUES',
-    problemMessage: "The option '{1}' isn't supported by '{0}'.",
-    correctionMessage: "Try using one of the supported options: {2}.",
-    uniqueNameCheck:
-        'AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITH_LEGAL_VALUES',
-    withArguments: _withArgumentsUnsupportedOptionWithLegalValues,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// An error code indicating that a plugin is being configured with an
-  /// unsupported option and legal options are provided.
-  ///
-  /// Parameters:
-  /// String p0: the plugin name
-  /// String p1: the unsupported option key
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  unsupportedOptionWithoutValues = AnalysisOptionsWarningTemplate(
-    name: 'UNSUPPORTED_OPTION_WITHOUT_VALUES',
-    problemMessage: "The option '{1}' isn't supported by '{0}'.",
-    uniqueNameCheck:
-        'AnalysisOptionsWarningCode.UNSUPPORTED_OPTION_WITHOUT_VALUES',
-    withArguments: _withArgumentsUnsupportedOptionWithoutValues,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// An error code indicating that an option entry is being configured with an
-  /// unsupported value.
-  ///
-  /// Parameters:
-  /// String p0: the option name
-  /// Object p1: the unsupported value
-  /// String p2: legal values
-  static const AnalysisOptionsWarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required Object p1,
-      required String p2,
-    })
-  >
-  unsupportedValue = AnalysisOptionsWarningTemplate(
-    name: 'UNSUPPORTED_VALUE',
-    problemMessage: "The value '{1}' isn't supported by '{0}'.",
-    correctionMessage: "Try using one of the supported options: {2}.",
-    uniqueNameCheck: 'AnalysisOptionsWarningCode.UNSUPPORTED_VALUE',
-    withArguments: _withArgumentsUnsupportedValue,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.object,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const AnalysisOptionsWarningCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.STATIC_WARNING,
-         uniqueName: 'AnalysisOptionsWarningCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsAnalysisOptionDeprecated({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.analysisOptionDeprecated,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAnalysisOptionDeprecatedWithReplacement({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.analysisOptionDeprecatedWithReplacement,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedLint({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.deprecatedLint, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedLintWithReplacement({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.deprecatedLintWithReplacement,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateRule({required String p0}) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.duplicateRule, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsIncludedFileWarning({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.includedFileWarning,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIncludeFileNotFound({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.includeFileNotFound,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIncompatibleLint({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.incompatibleLint,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIncompatibleLintFiles({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.incompatibleLintFiles,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIncompatibleLintIncluded({
-    required String p0,
-    required String p1,
-    required int p2,
-    required String p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.incompatibleLintIncluded,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidOption({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.invalidOption, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidSectionFormat({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.invalidSectionFormat,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMultiplePlugins({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.multiplePlugins, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPluginsInInnerOptions({
-    required String contextRoot,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.pluginsInInnerOptions,
-      [contextRoot],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRecursiveIncludeFile({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.recursiveIncludeFile,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRemovedLint({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.removedLint, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsReplacedLint({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.replacedLint, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedLint({required String p0}) {
-    return LocatableDiagnosticImpl(AnalysisOptionsWarningCode.undefinedLint, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnrecognizedErrorCode({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.unrecognizedErrorCode,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedOptionWithLegalValue({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.unsupportedOptionWithLegalValue,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedOptionWithLegalValues({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedOptionWithoutValues({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedValue({
-    required String p0,
-    required Object p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      AnalysisOptionsWarningCode.unsupportedValue,
-      [p0, p1, p2],
-    );
-  }
-}
-
-final class AnalysisOptionsWarningTemplate<T extends Function>
-    extends AnalysisOptionsWarningCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const AnalysisOptionsWarningTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class AnalysisOptionsWarningWithoutArguments
-    extends AnalysisOptionsWarningCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const AnalysisOptionsWarningWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart b/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart
index 0d6f627..f4206ae 100644
--- a/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart
+++ b/pkg/analyzer/lib/src/analysis_options/options_file_validator.dart
@@ -10,9 +10,9 @@
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_file.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
 import 'package:analyzer/src/analysis_options/options_validator.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/source.dart' show SourceFactory;
 import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer/src/lint/options_rule_validator.dart';
@@ -64,7 +64,7 @@
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
-            diagnosticCode: AnalysisOptionsWarningCode.includedFileWarning,
+            diagnosticCode: diag.includedFileWarning,
             arguments: args,
           ),
         );
@@ -127,7 +127,7 @@
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
-            diagnosticCode: AnalysisOptionsWarningCode.recursiveIncludeFile,
+            diagnosticCode: diag.recursiveIncludeFile,
             arguments: [includeUri, source.fullName],
           ),
         );
@@ -139,7 +139,7 @@
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
-            diagnosticCode: AnalysisOptionsWarningCode.includeFileNotFound,
+            diagnosticCode: diag.includeFileNotFound,
             arguments: [includeUri, source.fullName, contextRoot],
           ),
         );
@@ -152,7 +152,7 @@
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
-            diagnosticCode: AnalysisOptionsWarningCode.includedFileWarning,
+            diagnosticCode: diag.includedFileWarning,
             arguments: [
               includedSource,
               spanInChain.start.offset,
@@ -196,7 +196,7 @@
             source: initialSource,
             offset: initialIncludeSpan!.start.offset,
             length: initialIncludeSpan!.length,
-            diagnosticCode: AnalysisOptionsErrorCode.includedFileParseError,
+            diagnosticCode: diag.includedFileParseError,
             arguments: args,
           ),
         );
@@ -231,7 +231,7 @@
         source: source,
         offset: span.start.offset,
         length: span.length,
-        diagnosticCode: AnalysisOptionsErrorCode.parseError,
+        diagnosticCode: diag.parseError,
         arguments: [e.message],
       ),
     );
@@ -379,7 +379,7 @@
                 !_removedDiagnosticCodes.contains(upperCaseName)) {
               reporter.atSourceSpan(
                 unignorableNameNode.span,
-                AnalysisOptionsWarningCode.unrecognizedErrorCode,
+                diag.unrecognizedErrorCode,
                 arguments: [unignorableName],
               );
             } else if (listedNames.contains(upperCaseName)) {
@@ -391,7 +391,7 @@
           } else {
             reporter.atSourceSpan(
               unignorableNameNode.span,
-              AnalysisOptionsWarningCode.invalidSectionFormat,
+              diag.invalidSectionFormat,
               arguments: [AnalysisOptionsFile.cannotIgnore],
             );
           }
@@ -399,7 +399,7 @@
       } else if (unignorableNames != null) {
         reporter.atSourceSpan(
           unignorableNames.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.cannotIgnore],
         );
       }
@@ -420,7 +420,7 @@
         } else {
           reporter.atSourceSpan(
             keyNode.span,
-            AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
+            diag.unsupportedOptionWithoutValues,
             arguments: [AnalysisOptionsFile.codeStyle, keyNode.toString()],
           );
         }
@@ -428,13 +428,13 @@
     } else if (codeStyle is YamlScalar && codeStyle.value != null) {
       reporter.atSourceSpan(
         codeStyle.span,
-        AnalysisOptionsWarningCode.invalidSectionFormat,
+        diag.invalidSectionFormat,
         arguments: [AnalysisOptionsFile.codeStyle],
       );
     } else if (codeStyle is YamlList) {
       reporter.atSourceSpan(
         codeStyle.span,
-        AnalysisOptionsWarningCode.invalidSectionFormat,
+        diag.invalidSectionFormat,
         arguments: [AnalysisOptionsFile.codeStyle],
       );
     }
@@ -444,7 +444,7 @@
     if (format is! YamlScalar) {
       reporter.atSourceSpan(
         format.span,
-        AnalysisOptionsWarningCode.invalidSectionFormat,
+        diag.invalidSectionFormat,
         arguments: [AnalysisOptionsFile.format],
       );
       return;
@@ -453,7 +453,7 @@
     if (formatValue == null) {
       reporter.atSourceSpan(
         format.span,
-        AnalysisOptionsWarningCode.unsupportedValue,
+        diag.unsupportedValue,
         arguments: [
           AnalysisOptionsFile.format,
           format.valueOrThrow,
@@ -497,7 +497,7 @@
           if (validationResult is UnrecognizedFlag) {
             reporter.atSourceSpan(
               span,
-              AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
+              diag.unsupportedOptionWithoutValues,
               arguments: [
                 AnalysisOptionsFile.enableExperiment,
                 flags[flagIndex],
@@ -506,7 +506,7 @@
           } else {
             reporter.atSourceSpan(
               span,
-              AnalysisOptionsWarningCode.invalidOption,
+              diag.invalidOption,
               arguments: [
                 AnalysisOptionsFile.enableExperiment,
                 validationResult.message,
@@ -517,7 +517,7 @@
       } else if (experimentNames != null) {
         reporter.atSourceSpan(
           experimentNames.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.enableExperiment],
         );
       }
@@ -528,13 +528,13 @@
 /// Builds error reports with value proposals.
 class _ErrorBuilder {
   static DiagnosticCode get noProposalCode =>
-      AnalysisOptionsWarningCode.unsupportedOptionWithoutValues;
+      diag.unsupportedOptionWithoutValues;
 
   static DiagnosticCode get pluralProposalCode =>
-      AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues;
+      diag.unsupportedOptionWithLegalValues;
 
   static DiagnosticCode get singularProposalCode =>
-      AnalysisOptionsWarningCode.unsupportedOptionWithLegalValue;
+      diag.unsupportedOptionWithLegalValue;
 
   final String proposal;
 
@@ -619,7 +619,7 @@
                 !_removedDiagnosticCodes.contains(value)) {
               reporter.atSourceSpan(
                 k.span,
-                AnalysisOptionsWarningCode.unrecognizedErrorCode,
+                diag.unrecognizedErrorCode,
                 arguments: [k.value.toString()],
               );
             }
@@ -629,7 +629,7 @@
             if (!legalValues.contains(value)) {
               reporter.atSourceSpan(
                 v.span,
-                AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues,
+                diag.unsupportedOptionWithLegalValues,
                 arguments: [
                   AnalysisOptionsFile.errors,
                   v.value.toString(),
@@ -640,7 +640,7 @@
           } else {
             reporter.atSourceSpan(
               v.span,
-              AnalysisOptionsWarningCode.invalidSectionFormat,
+              diag.invalidSectionFormat,
               arguments: [AnalysisOptionsFile.enableExperiment],
             );
           }
@@ -648,7 +648,7 @@
       } else if (filters != null) {
         reporter.atSourceSpan(
           filters.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.enableExperiment],
         );
       }
@@ -675,7 +675,7 @@
         } else {
           reporter.atSourceSpan(
             keyNode.span,
-            AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
+            diag.unsupportedOptionWithoutValues,
             arguments: [AnalysisOptionsFile.formatter, keyNode.toString()],
           );
         }
@@ -683,7 +683,7 @@
     } else if (formatter.value != null) {
       reporter.atSourceSpan(
         formatter.span,
-        AnalysisOptionsWarningCode.invalidSectionFormat,
+        diag.invalidSectionFormat,
         arguments: [AnalysisOptionsFile.formatter],
       );
     }
@@ -698,7 +698,7 @@
     if (value is! int || value <= 0) {
       reporter.atSourceSpan(
         valueNode.span,
-        AnalysisOptionsWarningCode.invalidOption,
+        diag.invalidOption,
         arguments: [
           keyNode.toString(),
           '"page_width" must be a positive integer.',
@@ -717,7 +717,7 @@
     if (!TrailingCommas.values.any((item) => item.name == value)) {
       reporter.atSourceSpan(
         valueNode.span,
-        AnalysisOptionsWarningCode.invalidOption,
+        diag.invalidOption,
         arguments: [
           keyNode.toString(),
           '"trailing_commas" must be "automate" or "preserve".',
@@ -758,7 +758,7 @@
             if (!AnalysisOptionsFile.trueOrFalse.contains(value)) {
               reporter.atSourceSpan(
                 v.span,
-                AnalysisOptionsWarningCode.unsupportedValue,
+                diag.unsupportedValue,
                 arguments: [
                   key!,
                   v.valueOrThrow,
@@ -771,13 +771,13 @@
       } else if (language is YamlScalar && language.value != null) {
         reporter.atSourceSpan(
           language.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.language],
         );
       } else if (language is YamlList) {
         reporter.atSourceSpan(
           language.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.language],
         );
       }
@@ -806,7 +806,7 @@
           _firstIncludedPluginName != plugins.value) {
         reporter.atSourceSpan(
           plugins.span,
-          AnalysisOptionsWarningCode.multiplePlugins,
+          diag.multiplePlugins,
           arguments: [_firstIncludedPluginName],
         );
       }
@@ -818,7 +818,7 @@
           if (plugin.value != _firstIncludedPluginName) {
             reporter.atSourceSpan(
               plugin.span,
-              AnalysisOptionsWarningCode.multiplePlugins,
+              diag.multiplePlugins,
               arguments: [_firstIncludedPluginName],
             );
           }
@@ -838,7 +838,7 @@
           } else if (plugin.value != firstPlugin) {
             reporter.atSourceSpan(
               plugin.span,
-              AnalysisOptionsWarningCode.multiplePlugins,
+              diag.multiplePlugins,
               arguments: [firstPlugin],
             );
           }
@@ -852,7 +852,7 @@
           if (plugin != null && plugin.value != _firstIncludedPluginName) {
             reporter.atSourceSpan(
               plugin.span,
-              AnalysisOptionsWarningCode.multiplePlugins,
+              diag.multiplePlugins,
               arguments: [_firstIncludedPluginName],
             );
           }
@@ -872,7 +872,7 @@
           } else if (plugin != null && plugin.value != firstPlugin) {
             reporter.atSourceSpan(
               plugin.span,
-              AnalysisOptionsWarningCode.multiplePlugins,
+              diag.multiplePlugins,
               arguments: [firstPlugin],
             );
           }
@@ -901,10 +901,12 @@
       var v = analyzer.valueAt(AnalysisOptionsFile.optionalChecks);
       if (v is YamlScalar) {
         var value = toLowerCase(v.value);
-        if (value != AnalysisOptionsFile.chromeOsManifestChecks) {
+        if (!AnalysisOptionsFile.optionalChecksOptions.contains(value)) {
           _builder.reportError(
             reporter,
-            AnalysisOptionsFile.chromeOsManifestChecks,
+            AnalysisOptionsFile
+                .optionalChecksOptions
+                .quotedAndCommaSeparatedWithOr,
             v,
           );
         }
@@ -913,10 +915,12 @@
           String? key, value;
           if (k is YamlScalar) {
             key = k.value?.toString();
-            if (key != AnalysisOptionsFile.chromeOsManifestChecks) {
+            if (!AnalysisOptionsFile.optionalChecksOptions.contains(key)) {
               _builder.reportError(
                 reporter,
-                AnalysisOptionsFile.chromeOsManifestChecks,
+                AnalysisOptionsFile
+                    .optionalChecksOptions
+                    .quotedAndCommaSeparatedWithOr,
                 k,
               );
             } else {
@@ -924,7 +928,7 @@
               if (!AnalysisOptionsFile.trueOrFalse.contains(value)) {
                 reporter.atSourceSpan(
                   v.span,
-                  AnalysisOptionsWarningCode.unsupportedValue,
+                  diag.unsupportedValue,
                   arguments: [
                     key!,
                     v.valueOrThrow,
@@ -938,7 +942,7 @@
       } else if (v != null) {
         reporter.atSourceSpan(
           v.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.enableExperiment],
         );
       }
@@ -980,7 +984,7 @@
         if (!isAtContextRoot && _isPrimarySource) {
           reporter.atSourceSpan(
             plugins.span,
-            AnalysisOptionsWarningCode.pluginsInInnerOptions,
+            diag.pluginsInInnerOptions,
             arguments: [_contextRoot],
           );
         }
@@ -998,7 +1002,7 @@
             default:
               reporter.atSourceSpan(
                 plugins.span,
-                AnalysisOptionsWarningCode.invalidSectionFormat,
+                diag.invalidSectionFormat,
                 arguments: ['${AnalysisOptionsFile.plugins}/$pluginName'],
               );
           }
@@ -1006,14 +1010,14 @@
       case YamlList():
         reporter.atSourceSpan(
           plugins.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.plugins],
         );
       case YamlScalar(:var value):
         if (value != null) {
           reporter.atSourceSpan(
             plugins.span,
-            AnalysisOptionsWarningCode.invalidSectionFormat,
+            diag.invalidSectionFormat,
             arguments: [AnalysisOptionsFile.plugins],
           );
         }
@@ -1058,7 +1062,7 @@
       } else if (strongModeNode != null) {
         reporter.atSourceSpan(
           strongModeNode.span,
-          AnalysisOptionsWarningCode.invalidSectionFormat,
+          diag.invalidSectionFormat,
           arguments: [AnalysisOptionsFile.strongMode],
         );
       }
@@ -1077,7 +1081,7 @@
         } else if (key == AnalysisOptionsFile.declarationCasts) {
           reporter.atSourceSpan(
             v.span,
-            AnalysisOptionsWarningCode.unsupportedValue,
+            diag.unsupportedValue,
             arguments: [
               AnalysisOptionsFile.strongMode,
               v.valueOrThrow,
@@ -1091,7 +1095,7 @@
             if (!AnalysisOptionsFile.trueOrFalse.contains(value)) {
               reporter.atSourceSpan(
                 v.span,
-                AnalysisOptionsWarningCode.unsupportedValue,
+                diag.unsupportedValue,
                 arguments: [
                   key!,
                   v.valueOrThrow,
@@ -1123,8 +1127,8 @@
     : assert(supportedOptions.isNotEmpty),
       _valueProposal = supportedOptions.quotedAndCommaSeparatedWithAnd,
       _warningCode = supportedOptions.length == 1
-          ? AnalysisOptionsWarningCode.unsupportedOptionWithLegalValue
-          : AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues;
+          ? diag.unsupportedOptionWithLegalValue
+          : diag.unsupportedOptionWithLegalValues;
 
   @override
   void validate(DiagnosticReporter reporter, YamlMap options) {
@@ -1135,7 +1139,7 @@
     if (node is! YamlMap) {
       reporter.atSourceSpan(
         node.span,
-        AnalysisOptionsWarningCode.invalidSectionFormat,
+        diag.invalidSectionFormat,
         arguments: [AnalysisOptionsFile.cannotIgnore],
       );
       return;
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart
index 0f89029..0d9a93d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_options.dart
@@ -281,35 +281,26 @@
     if (cannotIgnore is! YamlList) {
       return;
     }
-    var stringValues = cannotIgnore.whereType<String>().toSet();
-    for (var severity in AnalysisOptionsFile.severities) {
-      if (stringValues.contains(severity)) {
-        // [severity] is a marker denoting all diagnostic codes with severity
-        // equal to [severity].
-        stringValues.remove(severity);
-        // Replace name like 'error' with diagnostic codes with this named
-        // severity.
-        for (var d in diagnosticCodeValues) {
-          // If the severity of [error] is also changed in this options file
-          // to be [severity], we add [error] to the un-ignorable list.
+    for (var entry in cannotIgnore) {
+      if (entry is! String) continue;
+      if (severityMap[entry] case var severity?) {
+        for (var diagnostic in diagnosticCodeValues) {
+          // If the severity of [error] is also changed in this options file,
+          // use the changed severity.
           var processors = errorProcessors.where(
-            (processor) => processor.code == d.name,
+            (processor) => processor.code == diagnostic.name.toLowerCase(),
           );
-          if (processors.isNotEmpty &&
-              processors.first.severity?.displayName == severity) {
-            unignorableDiagnosticCodeNames.add(d.name);
-            continue;
-          }
-          // Otherwise, add [error] if its default severity is [severity].
-          if (d.severity.displayName == severity) {
-            unignorableDiagnosticCodeNames.add(d.name);
+          DiagnosticSeverity? diagnosticSeverity = processors.isNotEmpty
+              ? processors.first.severity
+              : diagnostic.severity;
+          if (diagnosticSeverity == severity) {
+            unignorableDiagnosticCodeNames.add(diagnostic.name.toLowerCase());
           }
         }
+      } else {
+        unignorableDiagnosticCodeNames.add(entry.toLowerCase());
       }
     }
-    unignorableDiagnosticCodeNames.addAll(
-      stringValues.map((name) => name.toUpperCase()),
-    );
   }
 
   PluginSource? _getSource(
@@ -435,6 +426,8 @@
 
   /// The set of "un-ignorable" diagnostic names, as parsed from an analysis
   /// options file.
+  ///
+  /// All entries in this set are in `lower_snake_case` form.
   final Set<String> unignorableDiagnosticCodeNames;
 
   /// Returns a newly instantiated [AnalysisOptionsImpl].
@@ -546,6 +539,7 @@
     required this.formatterOptions,
     required this.unignorableDiagnosticCodeNames,
   }) : _contextFeatures = contextFeatures {
+    assert(unignorableDiagnosticCodeNames.every((n) => n == n.toLowerCase()));
     (codeStyleOptions as CodeStyleOptionsImpl).options = this;
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index 6252ec7..7cf64e3 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -406,28 +406,33 @@
     File? optionsFile,
     File? packagesFile,
   ) {
-    //
-    // If the options and packages files are allowed to be locally specified,
-    // then look to see whether they are.
-    //
-    File? localOptionsFile;
-    if (optionsFile == null) {
-      localOptionsFile = folder.existingAnalysisOptionsYamlFile;
-    }
-    File? localPackagesFile;
-    if (packagesFile == null) {
-      localPackagesFile = _getPackagesFile(folder);
-    }
+    var packagesFileToUse =
+        packagesFile ?? _getPackagesFile(folder) ?? containingRoot.packagesFile;
     var buildGnFile = folder.getExistingFile(file_paths.buildGn);
 
+    var optionsFileToUse = optionsFile;
+    if (optionsFileToUse == null) {
+      optionsFileToUse = folder.existingAnalysisOptionsYamlFile;
+      if (optionsFileToUse == null) {
+        var parentFolder = folder.parent;
+        while (parentFolder != containingRoot.root) {
+          optionsFileToUse = parentFolder.existingAnalysisOptionsYamlFile;
+          if (optionsFileToUse != null) {
+            break;
+          }
+          parentFolder = parentFolder.parent;
+        }
+      }
+    }
+
     var localEnabledPlugins = _getEnabledLegacyPlugins(
       containingRoot.workspace,
-      localOptionsFile,
+      optionsFileToUse,
     );
     // Legacy plugins differ only if there is an analysis_options and it
     // contains a different set of plugins from the containing context.
     var pluginsDiffer =
-        localOptionsFile != null &&
+        optionsFileToUse != null &&
         !const SetEquality<String>().equals(
           containingRootEnabledLegacyPlugins,
           localEnabledPlugins,
@@ -437,38 +442,20 @@
 
     // Create a context root for the given [folder] if a packages or build file
     // is locally specified, or the set of enabled legacy plugins changed.
-    if (pluginsDiffer || localPackagesFile != null || buildGnFile != null) {
-      if (optionsFile != null) {
-        localOptionsFile = optionsFile;
-      }
-      if (packagesFile != null) {
-        localPackagesFile = packagesFile;
-      }
-      var rootPackagesFile = localPackagesFile ?? containingRoot.packagesFile;
+    if (pluginsDiffer ||
+        packagesFileToUse != containingRoot.packagesFile ||
+        buildGnFile != null) {
       var workspace = _createWorkspace(
         folder: folder,
-        packagesFile: rootPackagesFile,
+        packagesFile: packagesFileToUse,
         buildGnFile: buildGnFile,
       );
-      // Check for analysis options file in the parent directories, from
-      // root folder to the containing root folder. Pick the one closest
-      // to the root.
-      if (localOptionsFile == null) {
-        var parentFolder = folder.parent;
-        while (parentFolder != containingRoot.root) {
-          localOptionsFile = parentFolder.existingAnalysisOptionsYamlFile;
-          if (localOptionsFile != null) {
-            break;
-          }
-          parentFolder = parentFolder.parent;
-        }
-      }
       var root = ContextRootImpl(
         resourceProvider,
         folder,
         workspace,
-        optionsFile: localOptionsFile ?? containingRoot.optionsFile,
-        packagesFile: rootPackagesFile,
+        optionsFile: optionsFileToUse ?? containingRoot.optionsFile,
+        packagesFile: packagesFileToUse,
       );
       root.included.add(folder);
       containingRoot.excluded.add(folder);
@@ -480,12 +467,12 @@
       usedThisRoot = false;
     }
 
-    if (localOptionsFile != null) {
+    if (optionsFileToUse != null) {
       (containingRoot as ContextRootImpl).optionsFileMap[folder] =
-          localOptionsFile;
+          optionsFileToUse;
       // Add excluded globs.
       var excludes = _getExcludedGlobs(
-        localOptionsFile,
+        optionsFileToUse,
         containingRoot.workspace,
       );
       containingRoot.excludedGlobs.addAll(excludes);
diff --git a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
index b7af6ad..86b3bc3 100644
--- a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/defined_names.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/ast/token.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 
@@ -28,52 +27,37 @@
   }
 
   void appendTopLevelName(CompilationUnitMember member) {
-    if (member is NamedCompilationUnitMember) {
-      switch (member) {
-        case ClassDeclarationImpl():
-          if (useDeclaringConstructorsAst) {
-            appendName(names.topLevelNames, member.namePart.typeName);
-            member.body.members.forEach(appendClassMemberName);
-          } else {
-            appendName(names.topLevelNames, member.name);
-            member.members.forEach(appendClassMemberName);
-          }
-        case EnumDeclaration():
-          if (useDeclaringConstructorsAst) {
-            appendName(names.topLevelNames, member.namePart.typeName);
-            for (var constant in member.body.constants) {
-              appendName(names.classMemberNames, constant.name);
-            }
-            member.body.members.forEach(appendClassMemberName);
-          } else {
-            appendName(names.topLevelNames, member.name);
-            for (var constant in member.constants) {
-              appendName(names.classMemberNames, constant.name);
-            }
-            member.members.forEach(appendClassMemberName);
-          }
-        case ExtensionTypeDeclarationImpl():
-          if (useDeclaringConstructorsAst) {
-            appendName(names.topLevelNames, member.namePart.typeName);
-            member.body.members.forEach(appendClassMemberName);
-          } else {
-            appendName(names.topLevelNames, member.name);
-            member.members.forEach(appendClassMemberName);
-          }
-        case MixinDeclaration():
-          appendName(names.topLevelNames, member.name);
-          if (useDeclaringConstructorsAst) {
-            member.body.members.forEach(appendClassMemberName);
-          } else {
-            member.members.forEach(appendClassMemberName);
-          }
-        default:
-          appendName(names.topLevelNames, member.name);
-      }
-    } else if (member is TopLevelVariableDeclaration) {
-      for (VariableDeclaration variable in member.variables.variables) {
-        appendName(names.topLevelNames, variable.name);
-      }
+    switch (member) {
+      case ClassDeclaration():
+        appendName(names.topLevelNames, member.namePart.typeName);
+        if (member.body case BlockClassBody body) {
+          body.members.forEach(appendClassMemberName);
+        }
+      case EnumDeclaration():
+        appendName(names.topLevelNames, member.namePart.typeName);
+        for (var constant in member.body.constants) {
+          appendName(names.classMemberNames, constant.name);
+        }
+        member.body.members.forEach(appendClassMemberName);
+      case ExtensionDeclaration():
+        appendName(names.topLevelNames, member.name);
+        member.body.members.forEach(appendClassMemberName);
+      case ExtensionTypeDeclaration():
+        appendName(names.topLevelNames, member.primaryConstructor.typeName);
+        if (member.body case BlockClassBody body) {
+          body.members.forEach(appendClassMemberName);
+        }
+      case FunctionDeclaration():
+        appendName(names.topLevelNames, member.name);
+      case MixinDeclaration():
+        appendName(names.topLevelNames, member.name);
+        member.body.members.forEach(appendClassMemberName);
+      case TopLevelVariableDeclaration():
+        for (VariableDeclaration variable in member.variables.variables) {
+          appendName(names.topLevelNames, variable.name);
+        }
+      case TypeAlias():
+        appendName(names.topLevelNames, member.name);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index f3d7623..9e4ce01 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -7,7 +7,6 @@
 
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
@@ -109,7 +108,7 @@
 // TODO(scheglov): Clean up the list of implicitly analyzed files.
 class AnalysisDriver {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 582;
+  static const int DATA_VERSION = 592;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
@@ -1951,6 +1950,11 @@
         ),
       );
       if (failure != null) {
+        performance.getDataInt(failure.statisticKey).increment();
+        _scheduler
+            ._workingStatistics
+            ?.libraryDiagnosticsBundleRequirementsFailures
+            .update(failure.kindId, (value) => value + 1, ifAbsent: () => 1);
         return null;
       }
 
@@ -2488,9 +2492,8 @@
   static Uint32List _calculateSaltForElements(
     DeclaredVariables declaredVariables,
   ) {
-    var buffer = ApiSignature()
-      ..addInt(DATA_VERSION)
-      ..addBool(useDeclaringConstructorsAst);
+    var buffer = ApiSignature();
+    buffer.addInt(DATA_VERSION);
     _addDeclaredVariablesToSignature(buffer, declaredVariables);
     return buffer.toUint32List();
   }
@@ -2503,7 +2506,6 @@
     var buffer = ApiSignature()
       ..addInt(DATA_VERSION)
       ..addBool(enableIndex)
-      ..addBool(useDeclaringConstructorsAst)
       ..addBool(enableDebugResolutionMarkers);
     _addDeclaredVariablesToSignature(buffer, declaredVariables);
 
@@ -2516,8 +2518,7 @@
   static Uint32List _calculateSaltForUnlinked({required bool enableIndex}) {
     var buffer = ApiSignature()
       ..addInt(DATA_VERSION)
-      ..addBool(enableIndex)
-      ..addBool(useDeclaringConstructorsAst);
+      ..addBool(enableIndex);
 
     return buffer.toUint32List();
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 193ad57..1c08b8d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -16,6 +16,7 @@
 
 /// A map containing information about all known experimental flags.
 final _knownFeatures = <String, ExperimentalFeature>{
+  EnableString.anonymous_methods: ExperimentalFeatures.anonymous_methods,
   EnableString.augmentations: ExperimentalFeatures.augmentations,
   EnableString.class_modifiers: ExperimentalFeatures.class_modifiers,
   EnableString.const_functions: ExperimentalFeatures.const_functions,
@@ -24,8 +25,6 @@
   EnableString.control_flow_collections:
       ExperimentalFeatures.control_flow_collections,
   EnableString.data_assets: ExperimentalFeatures.data_assets,
-  EnableString.declaring_constructors:
-      ExperimentalFeatures.declaring_constructors,
   EnableString.digit_separators: ExperimentalFeatures.digit_separators,
   EnableString.dot_shorthands: ExperimentalFeatures.dot_shorthands,
   EnableString.enhanced_enums: ExperimentalFeatures.enhanced_enums,
@@ -49,6 +48,7 @@
       ExperimentalFeatures.nonfunction_type_aliases,
   EnableString.null_aware_elements: ExperimentalFeatures.null_aware_elements,
   EnableString.patterns: ExperimentalFeatures.patterns,
+  EnableString.primary_constructors: ExperimentalFeatures.primary_constructors,
   EnableString.private_named_parameters:
       ExperimentalFeatures.private_named_parameters,
   EnableString.record_use: ExperimentalFeatures.record_use,
@@ -71,6 +71,8 @@
 Feature fromSharedExperimentalFlags(
   shared.ExperimentalFlag flag,
 ) => switch (flag) {
+  shared.ExperimentalFlag.anonymousMethods =>
+    ExperimentalFeatures.anonymous_methods,
   shared.ExperimentalFlag.augmentations => ExperimentalFeatures.augmentations,
   shared.ExperimentalFlag.classModifiers =>
     ExperimentalFeatures.class_modifiers,
@@ -83,8 +85,6 @@
   shared.ExperimentalFlag.controlFlowCollections =>
     ExperimentalFeatures.control_flow_collections,
   shared.ExperimentalFlag.dataAssets => ExperimentalFeatures.data_assets,
-  shared.ExperimentalFlag.declaringConstructors =>
-    ExperimentalFeatures.declaring_constructors,
   shared.ExperimentalFlag.digitSeparators =>
     ExperimentalFeatures.digit_separators,
   shared.ExperimentalFlag.dotShorthands => ExperimentalFeatures.dot_shorthands,
@@ -117,6 +117,8 @@
   shared.ExperimentalFlag.nullAwareElements =>
     ExperimentalFeatures.null_aware_elements,
   shared.ExperimentalFlag.patterns => ExperimentalFeatures.patterns,
+  shared.ExperimentalFlag.primaryConstructors =>
+    ExperimentalFeatures.primary_constructors,
   shared.ExperimentalFlag.privateNamedParameters =>
     ExperimentalFeatures.private_named_parameters,
   shared.ExperimentalFlag.recordUse => ExperimentalFeatures.record_use,
@@ -146,6 +148,9 @@
 /// Constant strings for enabling each of the currently known experimental
 /// flags.
 class EnableString {
+  /// String to enable the experiment "anonymous-methods"
+  static const String anonymous_methods = 'anonymous-methods';
+
   /// String to enable the experiment "augmentations"
   static const String augmentations = 'augmentations';
 
@@ -167,9 +172,6 @@
   /// String to enable the experiment "data-assets"
   static const String data_assets = 'data-assets';
 
-  /// String to enable the experiment "declaring-constructors"
-  static const String declaring_constructors = 'declaring-constructors';
-
   /// String to enable the experiment "digit-separators"
   static const String digit_separators = 'digit-separators';
 
@@ -230,6 +232,9 @@
   /// String to enable the experiment "patterns"
   static const String patterns = 'patterns';
 
+  /// String to enable the experiment "primary-constructors"
+  static const String primary_constructors = 'primary-constructors';
+
   /// String to enable the experiment "private-named-parameters"
   static const String private_named_parameters = 'private-named-parameters';
 
@@ -277,8 +282,19 @@
 }
 
 class ExperimentalFeatures {
-  static final augmentations = ExperimentalFeature(
+  static final anonymous_methods = ExperimentalFeature(
     index: 0,
+    enableString: EnableString.anonymous_methods,
+    isEnabledByDefault: IsEnabledByDefault.anonymous_methods,
+    isExpired: IsExpired.anonymous_methods,
+    documentation: 'Anonymous methods.',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+    channels: ["stable", "beta", "dev", "main"],
+  );
+
+  static final augmentations = ExperimentalFeature(
+    index: 1,
     enableString: EnableString.augmentations,
     isEnabledByDefault: IsEnabledByDefault.augmentations,
     isExpired: IsExpired.augmentations,
@@ -289,7 +305,7 @@
   );
 
   static final class_modifiers = ExperimentalFeature(
-    index: 1,
+    index: 2,
     enableString: EnableString.class_modifiers,
     isEnabledByDefault: IsEnabledByDefault.class_modifiers,
     isExpired: IsExpired.class_modifiers,
@@ -300,7 +316,7 @@
   );
 
   static final const_functions = ExperimentalFeature(
-    index: 2,
+    index: 3,
     enableString: EnableString.const_functions,
     isEnabledByDefault: IsEnabledByDefault.const_functions,
     isExpired: IsExpired.const_functions,
@@ -312,7 +328,7 @@
   );
 
   static final constant_update_2018 = ExperimentalFeature(
-    index: 3,
+    index: 4,
     enableString: EnableString.constant_update_2018,
     isEnabledByDefault: IsEnabledByDefault.constant_update_2018,
     isExpired: IsExpired.constant_update_2018,
@@ -323,7 +339,7 @@
   );
 
   static final constructor_tearoffs = ExperimentalFeature(
-    index: 4,
+    index: 5,
     enableString: EnableString.constructor_tearoffs,
     isEnabledByDefault: IsEnabledByDefault.constructor_tearoffs,
     isExpired: IsExpired.constructor_tearoffs,
@@ -335,7 +351,7 @@
   );
 
   static final control_flow_collections = ExperimentalFeature(
-    index: 5,
+    index: 6,
     enableString: EnableString.control_flow_collections,
     isEnabledByDefault: IsEnabledByDefault.control_flow_collections,
     isExpired: IsExpired.control_flow_collections,
@@ -346,7 +362,7 @@
   );
 
   static final data_assets = ExperimentalFeature(
-    index: 6,
+    index: 7,
     enableString: EnableString.data_assets,
     isEnabledByDefault: IsEnabledByDefault.data_assets,
     isExpired: IsExpired.data_assets,
@@ -356,17 +372,6 @@
     channels: ["main", "dev"],
   );
 
-  static final declaring_constructors = ExperimentalFeature(
-    index: 7,
-    enableString: EnableString.declaring_constructors,
-    isEnabledByDefault: IsEnabledByDefault.declaring_constructors,
-    isExpired: IsExpired.declaring_constructors,
-    documentation: 'Less verbose constructors.',
-    experimentalReleaseVersion: null,
-    releaseVersion: null,
-    channels: ["stable", "beta", "dev", "main"],
-  );
-
   static final digit_separators = ExperimentalFeature(
     index: 8,
     enableString: EnableString.digit_separators,
@@ -592,8 +597,19 @@
     channels: ["stable", "beta", "dev", "main"],
   );
 
-  static final private_named_parameters = ExperimentalFeature(
+  static final primary_constructors = ExperimentalFeature(
     index: 28,
+    enableString: EnableString.primary_constructors,
+    isEnabledByDefault: IsEnabledByDefault.primary_constructors,
+    isExpired: IsExpired.primary_constructors,
+    documentation: 'Less verbose constructors.',
+    experimentalReleaseVersion: null,
+    releaseVersion: null,
+    channels: ["stable", "beta", "dev", "main"],
+  );
+
+  static final private_named_parameters = ExperimentalFeature(
+    index: 29,
     enableString: EnableString.private_named_parameters,
     isEnabledByDefault: IsEnabledByDefault.private_named_parameters,
     isExpired: IsExpired.private_named_parameters,
@@ -605,7 +621,7 @@
   );
 
   static final record_use = ExperimentalFeature(
-    index: 29,
+    index: 30,
     enableString: EnableString.record_use,
     isEnabledByDefault: IsEnabledByDefault.record_use,
     isExpired: IsExpired.record_use,
@@ -616,7 +632,7 @@
   );
 
   static final records = ExperimentalFeature(
-    index: 30,
+    index: 31,
     enableString: EnableString.records,
     isEnabledByDefault: IsEnabledByDefault.records,
     isExpired: IsExpired.records,
@@ -627,7 +643,7 @@
   );
 
   static final sealed_class = ExperimentalFeature(
-    index: 31,
+    index: 32,
     enableString: EnableString.sealed_class,
     isEnabledByDefault: IsEnabledByDefault.sealed_class,
     isExpired: IsExpired.sealed_class,
@@ -638,7 +654,7 @@
   );
 
   static final set_literals = ExperimentalFeature(
-    index: 32,
+    index: 33,
     enableString: EnableString.set_literals,
     isEnabledByDefault: IsEnabledByDefault.set_literals,
     isExpired: IsExpired.set_literals,
@@ -649,7 +665,7 @@
   );
 
   static final sound_flow_analysis = ExperimentalFeature(
-    index: 33,
+    index: 34,
     enableString: EnableString.sound_flow_analysis,
     isEnabledByDefault: IsEnabledByDefault.sound_flow_analysis,
     isExpired: IsExpired.sound_flow_analysis,
@@ -661,7 +677,7 @@
   );
 
   static final spread_collections = ExperimentalFeature(
-    index: 34,
+    index: 35,
     enableString: EnableString.spread_collections,
     isEnabledByDefault: IsEnabledByDefault.spread_collections,
     isExpired: IsExpired.spread_collections,
@@ -672,7 +688,7 @@
   );
 
   static final static_extensions = ExperimentalFeature(
-    index: 35,
+    index: 36,
     enableString: EnableString.static_extensions,
     isEnabledByDefault: IsEnabledByDefault.static_extensions,
     isExpired: IsExpired.static_extensions,
@@ -683,7 +699,7 @@
   );
 
   static final super_parameters = ExperimentalFeature(
-    index: 36,
+    index: 37,
     enableString: EnableString.super_parameters,
     isEnabledByDefault: IsEnabledByDefault.super_parameters,
     isExpired: IsExpired.super_parameters,
@@ -694,7 +710,7 @@
   );
 
   static final test_experiment = ExperimentalFeature(
-    index: 37,
+    index: 38,
     enableString: EnableString.test_experiment,
     isEnabledByDefault: IsEnabledByDefault.test_experiment,
     isExpired: IsExpired.test_experiment,
@@ -706,7 +722,7 @@
   );
 
   static final triple_shift = ExperimentalFeature(
-    index: 38,
+    index: 39,
     enableString: EnableString.triple_shift,
     isEnabledByDefault: IsEnabledByDefault.triple_shift,
     isExpired: IsExpired.triple_shift,
@@ -717,7 +733,7 @@
   );
 
   static final unnamed_libraries = ExperimentalFeature(
-    index: 39,
+    index: 40,
     enableString: EnableString.unnamed_libraries,
     isEnabledByDefault: IsEnabledByDefault.unnamed_libraries,
     isExpired: IsExpired.unnamed_libraries,
@@ -728,7 +744,7 @@
   );
 
   static final unquoted_imports = ExperimentalFeature(
-    index: 40,
+    index: 41,
     enableString: EnableString.unquoted_imports,
     isEnabledByDefault: IsEnabledByDefault.unquoted_imports,
     isExpired: IsExpired.unquoted_imports,
@@ -739,7 +755,7 @@
   );
 
   static final variance = ExperimentalFeature(
-    index: 41,
+    index: 42,
     enableString: EnableString.variance,
     isEnabledByDefault: IsEnabledByDefault.variance,
     isExpired: IsExpired.variance,
@@ -750,7 +766,7 @@
   );
 
   static final wildcard_variables = ExperimentalFeature(
-    index: 42,
+    index: 43,
     enableString: EnableString.wildcard_variables,
     isEnabledByDefault: IsEnabledByDefault.wildcard_variables,
     isExpired: IsExpired.wildcard_variables,
@@ -765,6 +781,9 @@
 /// Constant bools indicating whether each experimental flag is currently
 /// enabled by default.
 class IsEnabledByDefault {
+  /// Default state of the experiment "anonymous-methods"
+  static const bool anonymous_methods = false;
+
   /// Default state of the experiment "augmentations"
   static const bool augmentations = false;
 
@@ -786,9 +805,6 @@
   /// Default state of the experiment "data-assets"
   static const bool data_assets = false;
 
-  /// Default state of the experiment "declaring-constructors"
-  static const bool declaring_constructors = false;
-
   /// Default state of the experiment "digit-separators"
   static const bool digit_separators = true;
 
@@ -849,6 +865,9 @@
   /// Default state of the experiment "patterns"
   static const bool patterns = true;
 
+  /// Default state of the experiment "primary-constructors"
+  static const bool primary_constructors = false;
+
   /// Default state of the experiment "private-named-parameters"
   static const bool private_named_parameters = false;
 
@@ -899,6 +918,9 @@
 /// expired (meaning its enable/disable status can no longer be altered from the
 /// value in [IsEnabledByDefault]).
 class IsExpired {
+  /// Expiration status of the experiment "anonymous-methods"
+  static const bool anonymous_methods = false;
+
   /// Expiration status of the experiment "augmentations"
   static const bool augmentations = false;
 
@@ -920,9 +942,6 @@
   /// Expiration status of the experiment "data-assets"
   static const bool data_assets = false;
 
-  /// Expiration status of the experiment "declaring-constructors"
-  static const bool declaring_constructors = false;
-
   /// Expiration status of the experiment "digit-separators"
   static const bool digit_separators = true;
 
@@ -983,6 +1002,9 @@
   /// Expiration status of the experiment "patterns"
   static const bool patterns = true;
 
+  /// Expiration status of the experiment "primary-constructors"
+  static const bool primary_constructors = false;
+
   /// Expiration status of the experiment "private-named-parameters"
   static const bool private_named_parameters = false;
 
@@ -1030,6 +1052,10 @@
 }
 
 mixin _CurrentState {
+  /// Current state for the flag "anonymous-methods"
+  bool get anonymous_methods =>
+      isEnabled(ExperimentalFeatures.anonymous_methods);
+
   /// Current state for the flag "augmentations"
   bool get augmentations => isEnabled(ExperimentalFeatures.augmentations);
 
@@ -1054,10 +1080,6 @@
   /// Current state for the flag "data-assets"
   bool get data_assets => isEnabled(ExperimentalFeatures.data_assets);
 
-  /// Current state for the flag "declaring-constructors"
-  bool get declaring_constructors =>
-      isEnabled(ExperimentalFeatures.declaring_constructors);
-
   /// Current state for the flag "digit-separators"
   bool get digit_separators => isEnabled(ExperimentalFeatures.digit_separators);
 
@@ -1128,6 +1150,10 @@
   /// Current state for the flag "patterns"
   bool get patterns => isEnabled(ExperimentalFeatures.patterns);
 
+  /// Current state for the flag "primary-constructors"
+  bool get primary_constructors =>
+      isEnabled(ExperimentalFeatures.primary_constructors);
+
   /// Current state for the flag "private-named-parameters"
   bool get private_named_parameters =>
       isEnabled(ExperimentalFeatures.private_named_parameters);
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index a1f35c0..e74b248 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -11,7 +11,6 @@
 import 'package:analyzer/dart/analysis/analysis_options.dart';
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
@@ -1011,28 +1010,18 @@
     var topLevelDeclarations = <String>{};
     for (var declaration in unit.declarations) {
       if (declaration is ClassDeclaration) {
-        if (useDeclaringConstructorsAst) {
-          topLevelDeclarations.add(declaration.namePart.typeName.lexeme);
-        } else {
-          topLevelDeclarations.add(declaration.name.lexeme);
-        }
+        topLevelDeclarations.add(declaration.namePart.typeName.lexeme);
       } else if (declaration is EnumDeclaration) {
-        if (useDeclaringConstructorsAst) {
-          topLevelDeclarations.add(declaration.namePart.typeName.lexeme);
-        } else {
-          topLevelDeclarations.add(declaration.name.lexeme);
-        }
+        topLevelDeclarations.add(declaration.namePart.typeName.lexeme);
       } else if (declaration is ExtensionDeclaration) {
         var name = declaration.name;
         if (name != null) {
           topLevelDeclarations.add(name.lexeme);
         }
       } else if (declaration is ExtensionTypeDeclaration) {
-        if (useDeclaringConstructorsAst) {
-          topLevelDeclarations.add(declaration.namePart.typeName.lexeme);
-        } else {
-          topLevelDeclarations.add(declaration.name.lexeme);
-        }
+        topLevelDeclarations.add(
+          declaration.primaryConstructor.typeName.lexeme,
+        );
       } else if (declaration is FunctionDeclaration) {
         topLevelDeclarations.add(declaration.name.lexeme);
       } else if (declaration is MixinDeclaration) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index d3194fd..a5d4435 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -130,7 +130,12 @@
     String? classMemberName;
     if (element.enclosingElement is InterfaceElement ||
         element.enclosingElement is ExtensionElement) {
-      classMemberName = element.lookupName;
+      if (element.lookupName case var lookupName?) {
+        if (element is ConstructorElement) {
+          lookupName = '.$lookupName';
+        }
+        classMemberName = lookupName;
+      }
       element = element.enclosingElement!;
     }
 
@@ -712,7 +717,7 @@
   }
 
   @override
-  void visitClassDeclaration(ClassDeclaration node) {
+  void visitClassDeclaration(covariant ClassDeclarationImpl node) {
     _addSubtypeForClassDeclaration(node);
     var declaredElement = node.declaredFragment!.element;
     if (node.extendsClause == null) {
@@ -720,7 +725,7 @@
       recordRelationOffset(
         objectElement,
         IndexRelationKind.IS_EXTENDED_BY,
-        node.name.offset,
+        node.namePart.typeName.offset,
         0,
         true,
       );
@@ -732,14 +737,14 @@
     // invocation with the name of the class.
     var defaultConstructor = declaredElement.constructors.singleOrNull;
     if (defaultConstructor is ConstructorElementImpl &&
-        defaultConstructor.isSynthetic) {
+        defaultConstructor.isOriginImplicitDefault) {
       defaultConstructor.isDefaultConstructor;
       var superConstructor = defaultConstructor.superConstructor;
       if (superConstructor != null) {
         recordRelation(
           superConstructor,
           IndexRelationKind.IS_INVOKED_BY,
-          node.name,
+          node.namePart.typeName,
           true,
         );
       }
@@ -805,13 +810,12 @@
       var element = node.declaredFragment!.element;
       var superConstructor = element.superConstructor;
       if (superConstructor != null) {
-        var offset = node.returnType.offset;
-        var end = (node.name ?? node.returnType).end;
+        var range = node.errorRange;
         recordRelationOffset(
           superConstructor,
           IndexRelationKind.IS_INVOKED_BY,
-          offset,
-          end - offset,
+          range.offset,
+          range.length,
           true,
         );
       }
@@ -864,10 +868,11 @@
     var element = _getActualConstructorElement(node.element?.baseElement);
     recordRelation(
       element,
-      IndexRelationKind.IS_INVOKED_BY,
+      IndexRelationKind.IS_INVOKED_BY_DOT_SHORTHANDS_CONSTRUCTOR,
       node.constructorName,
       true,
     );
+    node.argumentList.accept(this);
   }
 
   @override
@@ -885,7 +890,8 @@
     var element = node.propertyName.element;
     if (element is InternalConstructorElement) {
       element = _getActualConstructorElement(element);
-      kind = IndexRelationKind.IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF;
+      kind =
+          IndexRelationKind.IS_REFERENCED_BY_DOT_SHORTHAND_CONSTRUCTOR_TEAR_OFF;
     } else {
       kind = IndexRelationKind.IS_REFERENCED_BY;
     }
@@ -923,10 +929,10 @@
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
     _addSubtype(
-      node.name.lexeme,
+      node.namePart.typeName.lexeme,
       withClause: node.withClause,
       implementsClause: node.implementsClause,
-      memberNodes: node.members,
+      memberNodes: node.body.members,
     );
 
     var declaredElement = node.declaredFragment!.element;
@@ -983,11 +989,13 @@
   }
 
   @override
-  void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
+  void visitExtensionTypeDeclaration(
+    covariant ExtensionTypeDeclarationImpl node,
+  ) {
     _addSubtype(
-      node.name.lexeme,
+      node.primaryConstructor.typeName.lexeme,
       implementsClause: node.implementsClause,
-      memberNodes: node.members,
+      memberNodes: node.body.members,
     );
 
     var declaredElement = node.declaredFragment!.element;
@@ -1104,7 +1112,7 @@
   }
 
   @override
-  visitPatternField(PatternField node) {
+  void visitPatternField(PatternField node) {
     var nameNode = node.name;
     if (nameNode != null) {
       var nameToken = nameNode.name;
@@ -1119,13 +1127,13 @@
       }
       recordRelationOffset(
         node.element,
-        IndexRelationKind.IS_REFERENCED_BY,
+        IndexRelationKind.IS_REFERENCED_BY_PATTERN_FIELD,
         offset,
         length,
         true,
       );
     }
-    return super.visitPatternField(node);
+    super.visitPatternField(node);
   }
 
   @override
@@ -1335,13 +1343,13 @@
   }
 
   /// Record the given class as a subclass of its direct superclasses.
-  void _addSubtypeForClassDeclaration(ClassDeclaration node) {
+  void _addSubtypeForClassDeclaration(ClassDeclarationImpl node) {
     _addSubtype(
-      node.name.lexeme,
+      node.namePart.typeName.lexeme,
       superclass: node.extendsClause?.superclass,
       withClause: node.withClause,
       implementsClause: node.implementsClause,
-      memberNodes: node.members,
+      memberNodes: node.body.members,
     );
   }
 
@@ -1362,7 +1370,7 @@
       node.name.lexeme,
       onClause: node.onClause,
       implementsClause: node.implementsClause,
-      memberNodes: node.members,
+      memberNodes: node.body.members,
     );
   }
 
@@ -1373,7 +1381,8 @@
     ConstructorElement? constructor,
   ) {
     var seenConstructors = <ConstructorElement?>{};
-    while (constructor is ConstructorElementImpl && constructor.isSynthetic) {
+    while (constructor is ConstructorElementImpl &&
+        constructor.isOriginMixinApplication) {
       var enclosing = constructor.enclosingElement;
       if (enclosing is ClassElementImpl && enclosing.isMixinApplication) {
         var superInvocation = constructor.firstFragment.constantInitializers
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 02390a6..c3fce57 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -29,8 +29,8 @@
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/dart/resolver/resolution_visitor.dart';
 import 'package:analyzer/src/dart/resolver/type_analyzer_options.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/best_practices_verifier.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/constructor_fields_verifier.dart';
 import 'package:analyzer/src/error/dead_code_verifier.dart';
 import 'package:analyzer/src/error/duplicate_definition_verifier.dart';
@@ -220,8 +220,10 @@
       );
 
       var nodeToResolve = node?.thisOrAncestorMatching((e) {
-        return e.parent is ClassDeclaration ||
+        return e.parent is ClassBody ||
+            e.parent is ClassDeclaration ||
             e.parent is CompilationUnit ||
+            e.parent is EnumBody ||
             e.parent is ExtensionDeclaration ||
             e.parent is MixinDeclaration;
       });
@@ -282,7 +284,7 @@
               if (shouldReport) {
                 container.diagnosticReporter.atNode(
                   directive.uri,
-                  CompileTimeErrorCode.inconsistentLanguageVersionOverride,
+                  diag.inconsistentLanguageVersionOverride,
                 );
               } else {
                 visitPartDirectives(part);
@@ -586,10 +588,7 @@
     bool isIgnored(Diagnostic diagnostic) {
       var code = diagnostic.diagnosticCode;
       // Don't allow un-ignorable codes to be ignored.
-      if (unignorableCodes.contains(code.name) ||
-          unignorableCodes.contains(code.uniqueName) ||
-          // Lint rules have lower case names.
-          unignorableCodes.contains(code.name.toUpperCase())) {
+      if (unignorableCodes.contains(code.name.toLowerCase())) {
         return false;
       }
       return ignoreInfo.ignored(diagnostic);
@@ -625,20 +624,20 @@
 
     for (var errorCode in errorCodes) {
       if (const {
-        CompileTimeErrorCode.ambiguousImport,
-        CompileTimeErrorCode.constWithNonType,
-        CompileTimeErrorCode.extendsNonClass,
-        CompileTimeErrorCode.implementsNonClass,
-        CompileTimeErrorCode.mixinOfNonClass,
-        CompileTimeErrorCode.newWithNonType,
-        CompileTimeErrorCode.notAType,
-        CompileTimeErrorCode.prefixIdentifierNotFollowedByDot,
-        CompileTimeErrorCode.undefinedAnnotation,
-        CompileTimeErrorCode.undefinedClass,
-        CompileTimeErrorCode.undefinedFunction,
-        CompileTimeErrorCode.undefinedIdentifier,
-        CompileTimeErrorCode.undefinedPrefixedName,
-        WarningCode.deprecatedExportUse,
+        diag.ambiguousImport,
+        diag.constWithNonType,
+        diag.extendsNonClass,
+        diag.implementsNonClass,
+        diag.mixinOfNonClass,
+        diag.newWithNonType,
+        diag.notAType,
+        diag.prefixIdentifierNotFollowedByDot,
+        diag.undefinedAnnotation,
+        diag.undefinedClass,
+        diag.undefinedFunction,
+        diag.undefinedIdentifier,
+        diag.undefinedPrefixedName,
+        diag.deprecatedExportUse,
       }.contains(errorCode)) {
         return true;
       }
@@ -701,14 +700,11 @@
     if (state is LibraryImportWithUri) {
       var selectedUriStr = state.selectedUri.relativeUriStr;
       if (selectedUriStr.startsWith('dart-ext:')) {
-        diagnosticReporter.atNode(
-          directive.uri,
-          CompileTimeErrorCode.useOfNativeExtension,
-        );
+        diagnosticReporter.atNode(directive.uri, diag.useOfNativeExtension);
       } else if (state.importedSource == null) {
         var errorCode = state.isDocImport
-            ? WarningCode.uriDoesNotExistInDocImport
-            : CompileTimeErrorCode.uriDoesNotExist;
+            ? diag.uriDoesNotExistInDocImport
+            : diag.uriDoesNotExist;
         diagnosticReporter.atNode(
           directive.uri,
           errorCode,
@@ -716,10 +712,10 @@
         );
       } else if (state is LibraryImportWithFile && !state.importedFile.exists) {
         var errorCode = state.isDocImport
-            ? WarningCode.uriDoesNotExistInDocImport
+            ? diag.uriDoesNotExistInDocImport
             : state.importedSource.isGenerated
-            ? CompileTimeErrorCode.uriHasNotBeenGenerated
-            : CompileTimeErrorCode.uriDoesNotExist;
+            ? diag.uriHasNotBeenGenerated
+            : diag.uriDoesNotExist;
         diagnosticReporter.atNode(
           directive.uri,
           errorCode,
@@ -728,21 +724,18 @@
       } else if (state.importedLibrarySource == null) {
         diagnosticReporter.atNode(
           directive.uri,
-          CompileTimeErrorCode.importOfNonLibrary,
+          diag.importOfNonLibrary,
           arguments: [selectedUriStr],
         );
       }
     } else if (state is LibraryImportWithUriStr) {
       diagnosticReporter.atNode(
         directive.uri,
-        CompileTimeErrorCode.invalidUri,
+        diag.invalidUri,
         arguments: [state.selectedUri.relativeUriStr],
       );
     } else {
-      diagnosticReporter.atNode(
-        directive.uri,
-        CompileTimeErrorCode.uriWithInterpolation,
-      );
+      diagnosticReporter.atNode(directive.uri, diag.uriWithInterpolation);
     }
   }
 
@@ -922,20 +915,17 @@
     if (state is LibraryExportWithUri) {
       var selectedUriStr = state.selectedUri.relativeUriStr;
       if (selectedUriStr.startsWith('dart-ext:')) {
-        diagnosticReporter.atNode(
-          directive.uri,
-          CompileTimeErrorCode.useOfNativeExtension,
-        );
+        diagnosticReporter.atNode(directive.uri, diag.useOfNativeExtension);
       } else if (state.exportedSource == null) {
         diagnosticReporter.atNode(
           directive.uri,
-          CompileTimeErrorCode.uriDoesNotExist,
+          diag.uriDoesNotExist,
           arguments: [selectedUriStr],
         );
       } else if (state is LibraryExportWithFile && !state.exportedFile.exists) {
         var errorCode = isGeneratedSource(state.exportedSource)
-            ? CompileTimeErrorCode.uriHasNotBeenGenerated
-            : CompileTimeErrorCode.uriDoesNotExist;
+            ? diag.uriHasNotBeenGenerated
+            : diag.uriDoesNotExist;
         diagnosticReporter.atNode(
           directive.uri,
           errorCode,
@@ -944,21 +934,18 @@
       } else if (state.exportedLibrarySource == null) {
         diagnosticReporter.atNode(
           directive.uri,
-          CompileTimeErrorCode.exportOfNonLibrary,
+          diag.exportOfNonLibrary,
           arguments: [selectedUriStr],
         );
       }
     } else if (state is LibraryExportWithUriStr) {
       diagnosticReporter.atNode(
         directive.uri,
-        CompileTimeErrorCode.invalidUri,
+        diag.invalidUri,
         arguments: [state.selectedUri.relativeUriStr],
       );
     } else {
-      diagnosticReporter.atNode(
-        directive.uri,
-        CompileTimeErrorCode.uriWithInterpolation,
-      );
+      diagnosticReporter.atNode(directive.uri, diag.uriWithInterpolation);
     }
   }
 
@@ -1004,13 +991,13 @@
     }
 
     if (partState is! PartIncludeWithUriStr) {
-      reportOnDirectiveUri(CompileTimeErrorCode.uriWithInterpolation);
+      reportOnDirectiveUri(diag.uriWithInterpolation);
       return;
     }
 
     if (partState is! PartIncludeWithUri) {
       reportOnDirectiveUri(
-        CompileTimeErrorCode.invalidUri,
+        diag.invalidUri,
         arguments: [partState.selectedUri.relativeUriStr],
       );
       return;
@@ -1018,7 +1005,7 @@
 
     if (partState is! PartIncludeWithFile) {
       reportOnDirectiveUri(
-        CompileTimeErrorCode.uriDoesNotExist,
+        diag.uriDoesNotExist,
         arguments: [partState.selectedUri.relativeUriStr],
       );
       return;
@@ -1030,11 +1017,11 @@
     if (includedKind is! PartFileKind) {
       DiagnosticCode diagnosticCode;
       if (includedFile.exists) {
-        diagnosticCode = CompileTimeErrorCode.partOfNonPart;
+        diagnosticCode = diag.partOfNonPart;
       } else if (isGeneratedSource(includedFile.source)) {
-        diagnosticCode = CompileTimeErrorCode.uriHasNotBeenGenerated;
+        diagnosticCode = diag.uriHasNotBeenGenerated;
       } else {
-        diagnosticCode = CompileTimeErrorCode.uriDoesNotExist;
+        diagnosticCode = diag.uriDoesNotExist;
       }
       reportOnDirectiveUri(diagnosticCode, arguments: [includedFile.uriStr]);
       return;
@@ -1044,10 +1031,7 @@
     // Validate that the part source is unique in the library.
     //
     if (_libraryFiles.containsKey(includedFile)) {
-      reportOnDirectiveUri(
-        CompileTimeErrorCode.duplicatePart,
-        arguments: [includedFile.uri],
-      );
+      reportOnDirectiveUri(diag.duplicatePart, arguments: [includedFile.uri]);
       return;
     }
 
@@ -1060,19 +1044,19 @@
             var libraryName = _libraryElement.name;
             if (libraryName.isEmpty) {
               reportOnDirectiveUri(
-                CompileTimeErrorCode.partOfUnnamedLibrary,
+                diag.partOfUnnamedLibrary,
                 arguments: [name],
               );
             } else {
               reportOnDirectiveUri(
-                CompileTimeErrorCode.partOfDifferentLibrary,
+                diag.partOfDifferentLibrary,
                 arguments: [libraryName, name],
               );
             }
           }
         case PartOfUriFileKind():
           reportOnDirectiveUri(
-            CompileTimeErrorCode.partOfDifferentLibrary,
+            diag.partOfDifferentLibrary,
             arguments: [enclosingFile.file.uriStr, includedFile.uriStr],
           );
       }
diff --git a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
index 74d41db..6864114 100644
--- a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/referenced_names.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/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -76,23 +75,12 @@
     ClassDeclarationImpl node,
   ) {
     _LocalNameScope scope = _LocalNameScope(enclosing);
-    if (useDeclaringConstructorsAst) {
-      scope.addTypeParameters(node.namePart.typeParameters);
-      for (ClassMember member in node.body.members) {
-        if (member is FieldDeclaration) {
-          scope.addVariableNames(member.fields);
-        } else if (member is MethodDeclaration) {
-          scope.add(member.name);
-        }
-      }
-    } else {
-      scope.addTypeParameters(node.typeParameters);
-      for (ClassMember member in node.members) {
-        if (member is FieldDeclaration) {
-          scope.addVariableNames(member.fields);
-        } else if (member is MethodDeclaration) {
-          scope.add(member.name);
-        }
+    scope.addTypeParameters(node.namePart.typeParameters);
+    for (ClassMember member in node.body.members) {
+      if (member is FieldDeclaration) {
+        scope.addVariableNames(member.fields);
+      } else if (member is MethodDeclaration) {
+        scope.add(member.name);
       }
     }
     return scope;
@@ -121,23 +109,12 @@
     ExtensionTypeDeclarationImpl node,
   ) {
     var scope = _LocalNameScope(enclosing);
-    if (useDeclaringConstructorsAst) {
-      scope.addTypeParameters(node.namePart.typeParameters);
-      for (ClassMember member in node.body.members) {
-        if (member is FieldDeclaration) {
-          scope.addVariableNames(member.fields);
-        } else if (member is MethodDeclaration) {
-          scope.add(member.name);
-        }
-      }
-    } else {
-      scope.addTypeParameters(node.typeParameters);
-      for (var member in node.members) {
-        if (member is FieldDeclarationImpl) {
-          scope.addVariableNames(member.fields);
-        } else if (member is MethodDeclarationImpl) {
-          scope.add(member.name);
-        }
+    scope.addTypeParameters(node.primaryConstructor.typeParameters);
+    for (ClassMember member in node.body.members) {
+      if (member is FieldDeclaration) {
+        scope.addVariableNames(member.fields);
+      } else if (member is MethodDeclaration) {
+        scope.add(member.name);
       }
     }
     return scope;
@@ -177,27 +154,21 @@
     for (CompilationUnitMember declaration in node.declarations) {
       switch (declaration) {
         case ClassDeclaration():
-          if (useDeclaringConstructorsAst) {
-            scope.add(declaration.namePart.typeName);
-          } else {
-            scope.add(declaration.name);
-          }
+          scope.add(declaration.namePart.typeName);
         case EnumDeclaration():
-          if (useDeclaringConstructorsAst) {
-            scope.add(declaration.namePart.typeName);
-          } else {
-            scope.add(declaration.name);
-          }
+          scope.add(declaration.namePart.typeName);
+        case ExtensionDeclaration():
+          scope.add(declaration.name);
         case ExtensionTypeDeclaration():
-          if (useDeclaringConstructorsAst) {
-            scope.add(declaration.namePart.typeName);
-          } else {
-            scope.add(declaration.name);
-          }
-        case NamedCompilationUnitMember():
+          scope.add(declaration.primaryConstructor.typeName);
+        case FunctionDeclaration():
+          scope.add(declaration.name);
+        case MixinDeclaration():
           scope.add(declaration.name);
         case TopLevelVariableDeclaration():
           scope.addVariableNames(declaration.variables);
+        case TypeAlias():
+          scope.add(declaration.name);
       }
     }
     return scope;
@@ -372,7 +343,7 @@
     }
     // Ignore class names references from constructors.
     var parent = node.parent!;
-    if (parent is ConstructorDeclaration && parent.returnType == node) {
+    if (parent is ConstructorDeclaration && parent.typeName == node) {
       return;
     }
     // Prepare name.
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index d9bc91c..15f5420 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -66,7 +66,7 @@
 
     if (fragment is InterfaceFragment) {
       if (node is ClassDeclaration) {
-        if (_hasOffset2(node.name)) {
+        if (_hasOffset2(node.namePart.typeName)) {
           result = node;
         }
       } else if (node is ClassTypeAlias) {
@@ -74,7 +74,7 @@
           result = node;
         }
       } else if (node is EnumDeclaration) {
-        if (_hasOffset2(node.name)) {
+        if (_hasOffset2(node.namePart.typeName)) {
           result = node;
         }
       } else if (node is MixinDeclaration) {
@@ -82,7 +82,7 @@
           result = node;
         }
       } else if (node is ExtensionTypeDeclaration) {
-        if (_hasOffset2(node.name)) {
+        if (_hasOffset2(node.primaryConstructor.typeName)) {
           result = node;
         }
       }
@@ -93,7 +93,7 @@
             result = node;
           }
         } else {
-          if (_hasOffset(node.returnType)) {
+          if (_hasOffset(node.typeName)) {
             result = node;
           }
         }
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 464167d..253732e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -775,11 +775,15 @@
     List<SearchResult> results = <SearchResult>[];
     await _addResults(results, element, searchedFiles, const {
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
+      IndexRelationKind.IS_INVOKED_BY_DOT_SHORTHANDS_CONSTRUCTOR:
+          SearchResultKind.DOT_SHORTHANDS_CONSTRUCTOR_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,
+      IndexRelationKind.IS_REFERENCED_BY_DOT_SHORTHAND_CONSTRUCTOR_TEAR_OFF:
+          SearchResultKind.DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF,
     });
     return results;
   }
@@ -791,15 +795,19 @@
     List<SearchResult> results = <SearchResult>[];
     var getter = field.getter;
     var setter = field.setter;
-    if (!field.isSynthetic) {
+    if (field.isOriginDeclaration) {
       await _addResults(results, field, searchedFiles, const {
         IndexRelationKind.IS_WRITTEN_BY: SearchResultKind.WRITE,
         IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
+        IndexRelationKind.IS_REFERENCED_BY_PATTERN_FIELD:
+            SearchResultKind.REFERENCE_IN_PATTERN_FIELD,
       });
     }
     if (getter != null) {
       await _addResults(results, getter, searchedFiles, const {
         IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.READ,
+        IndexRelationKind.IS_REFERENCED_BY_PATTERN_FIELD:
+            SearchResultKind.REFERENCE_IN_PATTERN_FIELD,
         IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
       });
     }
@@ -817,6 +825,8 @@
   ) async {
     List<SearchResult> results = <SearchResult>[];
     await _addResults(results, element.baseElement, searchedFiles, const {
+      IndexRelationKind.IS_REFERENCED_BY_PATTERN_FIELD:
+          SearchResultKind.REFERENCE,
       IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
     });
@@ -830,6 +840,8 @@
     List<SearchResult> results = <SearchResult>[];
     await _addResults(results, getter, searchedFiles, const {
       IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
+      IndexRelationKind.IS_REFERENCED_BY_PATTERN_FIELD:
+          SearchResultKind.REFERENCE_IN_PATTERN_FIELD,
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
     });
     return results;
@@ -1117,7 +1129,10 @@
   WRITE,
   INVOCATION,
   INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+  DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION,
+  DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF,
   REFERENCE,
+  REFERENCE_IN_PATTERN_FIELD,
   REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
   REFERENCE_IN_EXTENDS_CLAUSE,
   REFERENCE_IN_WITH_CLAUSE,
@@ -1302,7 +1317,7 @@
   void _addConstructors(List<ConstructorElement> elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
-      if (!element.isSynthetic) {
+      if (element.isOriginDeclaration) {
         _addDeclaration(element, element.name!);
       }
     }
@@ -1402,7 +1417,7 @@
   void _addFields(List<FieldElement> elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
-      if (!element.isSynthetic) {
+      if (element.isOriginDeclaration) {
         _addDeclaration(element, element.name!);
       }
     }
@@ -1418,7 +1433,7 @@
   void _addGetters(List<GetterElement> elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
-      if (!element.isSynthetic) {
+      if (element.isOriginDeclaration) {
         _addDeclaration(element, element.displayName);
       }
     }
@@ -1434,7 +1449,7 @@
   void _addSetters(List<SetterElement> elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
-      if (!element.isSynthetic) {
+      if (element.isOriginDeclaration) {
         _addDeclaration(element, element.displayName);
       }
     }
@@ -1450,7 +1465,7 @@
   void _addVariables(List<TopLevelVariableElement> elements) {
     for (var i = 0; i < elements.length; i++) {
       var element = elements[i];
-      if (!element.isSynthetic) {
+      if (element.isOriginDeclaration) {
         _addDeclaration(element, element.name!);
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/status.dart b/pkg/analyzer/lib/src/dart/analysis/status.dart
index 6e97660..391f16f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/status.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/status.dart
@@ -4,6 +4,8 @@
 
 import 'dart:async';
 
+import 'package:analyzer/src/fine/requirement_failure.dart';
+
 /// The status of analysis.
 sealed class AnalysisStatus {
   const AnalysisStatus._();
@@ -81,6 +83,10 @@
   /// The sum of line counts for [produceErrorsActualFileCount].
   int produceErrorsActualFileLineCount = 0;
 
+  /// The counts of requirement failures for library diagnostics bundles.
+  final Map<RequirementFailureKindId, int>
+  libraryDiagnosticsBundleRequirementsFailures = {};
+
   AnalysisStatusWorkingStatistics({
     required this.withFineDependencies,
     required this.changedFiles,
diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
index 8cdc629..bd5a6dd 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
@@ -4,7 +4,6 @@
 
 import 'dart:typed_data';
 
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/invokes_super_self.dart';
@@ -24,6 +23,7 @@
   static const int _kindConstructorDeclaration = 1;
   static const int _kindFieldDeclaration = 2;
   static const int _kindMethodDeclaration = 3;
+  static const int _kindPrimaryConstructorBody = 4;
   static const int _nullNode = 0;
   static const int _notNullNode = 1;
   static const int _nullToken = 0;
@@ -63,21 +63,11 @@
   }
 
   void _addClass(ClassDeclarationImpl node) {
-    if (useDeclaringConstructorsAst) {
-      _addTokens(node.beginToken, node.body.beginToken);
-      bool hasConstConstructor = node.body.members.any(
-        (m) => m is ConstructorDeclarationImpl && m.constKeyword != null,
-      );
-      _addClassMembers(node.body.members, hasConstConstructor);
-    } else {
-      _addTokens(node.beginToken, node.leftBracket);
-
-      bool hasConstConstructor = node.members.any(
-        (m) => m is ConstructorDeclarationImpl && m.constKeyword != null,
-      );
-
-      _addClassMembers(node.members, hasConstConstructor);
-    }
+    _addTokens(node.beginToken, node.body.beginToken);
+    bool hasConstConstructor = node.body.members.any(
+      (m) => m is ConstructorDeclarationImpl && m.constKeyword != null,
+    );
+    _addClassMembers(node.body.members, hasConstConstructor);
   }
 
   void _addClassMembers(List<ClassMember> members, bool hasConstConstructor) {
@@ -89,6 +79,8 @@
         _addFieldDeclaration(member, hasConstConstructor);
       } else if (member is MethodDeclaration) {
         _addMethodDeclaration(member);
+      } else if (member is PrimaryConstructorBody) {
+        _addPrimaryConstructorBody(member);
       } else {
         throw UnimplementedError('(${member.runtimeType}) $member');
       }
@@ -103,9 +95,7 @@
   }
 
   void _addEnum(EnumDeclaration node) {
-    var members = useDeclaringConstructorsAst
-        ? node.body.members
-        : node.members;
+    var members = node.body.members;
 
     // If not enhanced, include the whole node.
     var firstMember = members.firstOrNull;
@@ -119,13 +109,8 @@
   }
 
   void _addExtension(ExtensionDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      _addTokens(node.beginToken, node.body.beginToken);
-      _addClassMembers(node.body.members, false);
-    } else {
-      _addTokens(node.beginToken, node.leftBracket);
-      _addClassMembers(node.members, false);
-    }
+    _addTokens(node.beginToken, node.body.beginToken);
+    _addClassMembers(node.body.members, false);
   }
 
   void _addFieldDeclaration(FieldDeclaration node, bool hasConstConstructor) {
@@ -163,13 +148,8 @@
   }
 
   void _addMixin(MixinDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      _addTokens(node.beginToken, node.body.beginToken);
-      _addClassMembers(node.body.members, false);
-    } else {
-      _addTokens(node.beginToken, node.leftBracket);
-      _addClassMembers(node.members, false);
-    }
+    _addTokens(node.beginToken, node.body.beginToken);
+    _addClassMembers(node.body.members, false);
     signature.addStringList(node.superInvokedNames);
   }
 
@@ -188,6 +168,11 @@
     }
   }
 
+  void _addPrimaryConstructorBody(PrimaryConstructorBody node) {
+    signature.addInt(_kindPrimaryConstructorBody);
+    _addTokens(node.beginToken, node.body.beginToken);
+  }
+
   void _addToken(Token? token) {
     if (token != null) {
       signature.addInt(_notNullToken);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 8621227..5f5aa78 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -15,7 +15,6 @@
 import 'package:_fe_analyzer_shared/src/type_inference/type_analysis_result.dart';
 import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/doc_comment.dart';
 import 'package:analyzer/dart/ast/precedence.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
@@ -39,7 +38,7 @@
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/resolver/body_inference_context.dart';
 import 'package:analyzer/src/dart/resolver/typed_literal_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/fasta/token_utils.dart' as util show findPrevious;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -54,9 +53,6 @@
 /// Marker for declarations that are code generated.
 const generated = _Generated();
 
-/// The default value for [useDeclaringConstructorsAst].
-bool default_useDeclaringConstructorsAst = false;
-
 /// The type alias that allows using nullable type as type literals.
 typedef _TypeLiteral<X> = X;
 
@@ -1754,7 +1750,6 @@
 
 /// The class body with members.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 sealed class BlockClassBody implements ClassBody {
   /// The left curly bracket.
   Token get leftBracket;
@@ -1835,14 +1830,6 @@
   }
 }
 
-/// Stub of [BlockClassBodyImpl], used to pass to the [ExtensionDeclarationImpl]
-/// constructor, but it never returned through the API.
-// TODO(scheglov): Remove together with [useDeclaringConstructorsAst].
-final class BlockClassBodyImplStub implements BlockClassBodyImpl {
-  @override
-  noSuchMethod(invocation) => super.noSuchMethod(invocation);
-}
-
 /// A function body that consists of a block of statements.
 ///
 ///    blockFunctionBody ::=
@@ -2918,22 +2905,12 @@
 
 /// The body of a class declaration.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 sealed class ClassBody implements AstNode {}
 
 abstract final class ClassBodyImpl extends AstNodeImpl implements ClassBody {
   List<ClassMemberImpl> get members;
 }
 
-/// Stub of [ClassBodyImpl], used to pass to the [ClassDeclarationImpl] or
-/// [ExtensionTypeDeclarationImpl] constructor, but it never returned through
-/// the API.
-// TODO(scheglov): Remove together with [useDeclaringConstructorsAst].
-final class ClassBodyImplStub implements ClassBodyImpl {
-  @override
-  noSuchMethod(invocation) => super.noSuchMethod(invocation);
-}
-
 /// The declaration of a class.
 ///
 ///    classDeclaration ::=
@@ -2945,7 +2922,10 @@
 ///      | 'abstract'? ('base' | 'interface' | 'final')?
 ///      | 'abstract'? 'base'? 'mixin'
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-abstract final class ClassDeclaration implements NamedCompilationUnitMember {
+abstract final class ClassDeclaration
+    implements
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMember {
   /// The `abstract` keyword, or `null` if the keyword was absent.
   Token? get abstractKeyword;
 
@@ -2956,9 +2936,6 @@
   Token? get baseKeyword;
 
   /// The body of the class declaration.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   ClassBody get body;
 
   /// The token representing the `class` keyword.
@@ -2982,29 +2959,23 @@
   Token? get interfaceKeyword;
 
   /// The left curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get leftBracket;
 
   /// The members defined by the class.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   NodeList<ClassMember> get members;
 
   /// The `mixin` keyword, or `null` if the keyword was absent.
   Token? get mixinKeyword;
 
   /// The name of the class.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use namePart instead')
   @override
   Token get name;
 
   /// The name of the class, as an identifier with type parameters, or
   /// a primary constructor.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   ClassNamePart get namePart;
 
   /// The native clause for this class, or `null` if the class doesn't have a
@@ -3012,8 +2983,7 @@
   NativeClause? get nativeClause;
 
   /// The right curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get rightBracket;
 
   /// The `sealed` keyword, or `null` if the keyword was absent.
@@ -3021,8 +2991,7 @@
 
   /// The type parameters for the class, or `null` if the class doesn't have any
   /// type parameters.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use namePart instead')
   TypeParameterList? get typeParameters;
 
   /// The `with` clause for the class, or `null` if the class doesn't have a
@@ -3041,19 +3010,17 @@
     GenerateNodeProperty('mixinKeyword'),
     GenerateNodeProperty('classKeyword'),
     GenerateNodeProperty('namePart'),
-    GenerateNodeProperty('name', isSuper: true),
-    GenerateNodeProperty('typeParameters'),
     GenerateNodeProperty('extendsClause'),
     GenerateNodeProperty('withClause'),
     GenerateNodeProperty('implementsClause'),
     GenerateNodeProperty('nativeClause'),
     GenerateNodeProperty('body'),
-    GenerateNodeProperty('leftBracket'),
-    GenerateNodeProperty('members'),
-    GenerateNodeProperty('rightBracket'),
   ],
 )
-final class ClassDeclarationImpl extends NamedCompilationUnitMemberImpl
+final class ClassDeclarationImpl
+    extends
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMemberImpl
     with AstNodeWithNameScopeMixin
     implements ClassDeclaration {
   @generated
@@ -3089,6 +3056,9 @@
   final Token classKeyword;
 
   @generated
+  ClassNamePartImpl _namePart;
+
+  @generated
   ExtendsClauseImpl? _extendsClause;
 
   @generated
@@ -3100,28 +3070,13 @@
   @generated
   NativeClauseImpl? _nativeClause;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final ClassNamePartImpl _namePart;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  TypeParameterListImpl? _typeParameters;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final ClassBodyImpl _body;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _leftBracket;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final NodeListImpl<ClassMemberImpl> _members = NodeListImpl._();
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _rightBracket;
+  @generated
+  ClassBodyImpl _body;
 
   @override
   ClassFragmentImpl? declaredFragment;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   ClassDeclarationImpl({
     required super.comment,
     required super.metadata,
@@ -3133,61 +3088,39 @@
     required this.finalKeyword,
     required this.mixinKeyword,
     required this.classKeyword,
-    required super.name,
     required ClassNamePartImpl namePart,
-    required TypeParameterListImpl? typeParameters,
     required ExtendsClauseImpl? extendsClause,
     required WithClauseImpl? withClause,
     required ImplementsClauseImpl? implementsClause,
     required NativeClauseImpl? nativeClause,
     required ClassBodyImpl body,
-    required Token leftBracket,
-    required List<ClassMemberImpl> members,
-    required Token rightBracket,
   }) : _namePart = namePart,
-       _typeParameters = typeParameters,
        _extendsClause = extendsClause,
        _withClause = withClause,
        _implementsClause = implementsClause,
        _nativeClause = nativeClause,
-       _body = body,
-       _leftBracket = leftBracket,
-       _rightBracket = rightBracket {
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(namePart);
-    } else {
-      _becomeParentOf(typeParameters);
-    }
+       _body = body {
+    _becomeParentOf(namePart);
     _becomeParentOf(extendsClause);
     _becomeParentOf(withClause);
     _becomeParentOf(implementsClause);
     _becomeParentOf(nativeClause);
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(body);
-      assert(identical(typeParameters, namePart.typeParameters));
-    } else {
-      _members._initialize(this, members);
-      assert(namePart is ClassNamePartImplStub);
-      assert(body is ClassBodyImplStub);
-    }
+    _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ClassBodyImpl get body {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _body;
+  ClassBodyImpl get body => _body;
+
+  @generated
+  set body(ClassBodyImpl body) {
+    _body = _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   Token get endToken {
-    if (useDeclaringConstructorsAst) {
-      return body.endToken;
-    }
-    return rightBracket;
+    return body.endToken;
   }
 
   @generated
@@ -3235,40 +3168,29 @@
     _implementsClause = _becomeParentOf(implementsClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get leftBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _leftBracket;
+    return (body as BlockClassBodyImpl).leftBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   NodeListImpl<ClassMemberImpl> get members {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _members;
+    return (body as BlockClassBodyImpl).members;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use namePart instead')
   @override
-  Token get name {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return super.name;
-  }
+  Token get name => namePart.typeName;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ClassNamePartImpl get namePart {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _namePart;
+  ClassNamePartImpl get namePart => _namePart;
+
+  @generated
+  set namePart(ClassNamePartImpl namePart) {
+    _namePart = _becomeParentOf(namePart);
   }
 
   @generated
@@ -3280,27 +3202,16 @@
     _nativeClause = _becomeParentOf(nativeClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get rightBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _rightBracket;
+    return (body as BlockClassBodyImpl).rightBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use namePart instead')
   @override
   TypeParameterListImpl? get typeParameters {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _typeParameters;
-  }
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  set typeParameters(TypeParameterListImpl? typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters);
+    return namePart.typeParameters;
   }
 
   @generated
@@ -3312,85 +3223,48 @@
     _withClause = _becomeParentOf(withClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ChildEntities get _childEntities {
-    var result = super._childEntities
-      ..addToken('augmentKeyword', augmentKeyword)
-      ..addToken('abstractKeyword', abstractKeyword)
-      ..addToken('sealedKeyword', sealedKeyword)
-      ..addToken('baseKeyword', baseKeyword)
-      ..addToken('interfaceKeyword', interfaceKeyword)
-      ..addToken('finalKeyword', finalKeyword)
-      ..addToken('mixinKeyword', mixinKeyword)
-      ..addToken('classKeyword', classKeyword);
-
-    if (useDeclaringConstructorsAst) {
-      result.addNode('namePart', namePart);
-    } else {
-      result
-        ..addToken('name', name)
-        ..addNode('typeParameters', typeParameters);
-    }
-
-    result
-      ..addNode('extendsClause', extendsClause)
-      ..addNode('withClause', withClause)
-      ..addNode('implementsClause', implementsClause)
-      ..addNode('nativeClause', nativeClause);
-
-    if (useDeclaringConstructorsAst) {
-      result.addNode('body', body);
-    } else {
-      result
-        ..addToken('leftBracket', leftBracket)
-        ..addNodeList('members', members)
-        ..addToken('rightBracket', rightBracket);
-    }
-
-    return result;
-  }
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('abstractKeyword', abstractKeyword)
+    ..addToken('sealedKeyword', sealedKeyword)
+    ..addToken('baseKeyword', baseKeyword)
+    ..addToken('interfaceKeyword', interfaceKeyword)
+    ..addToken('finalKeyword', finalKeyword)
+    ..addToken('mixinKeyword', mixinKeyword)
+    ..addToken('classKeyword', classKeyword)
+    ..addNode('namePart', namePart)
+    ..addNode('extendsClause', extendsClause)
+    ..addNode('withClause', withClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addNode('nativeClause', nativeClause)
+    ..addNode('body', body);
 
   @generated
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitClassDeclaration(this);
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    if (useDeclaringConstructorsAst) {
-      namePart.accept(visitor);
-    } else {
-      typeParameters?.accept(visitor);
-    }
+    namePart.accept(visitor);
     extendsClause?.accept(visitor);
     withClause?.accept(visitor);
     implementsClause?.accept(visitor);
     nativeClause?.accept(visitor);
-    if (useDeclaringConstructorsAst) {
-      body.accept(visitor);
-    } else {
-      members.accept(visitor);
-    }
+    body.accept(visitor);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
     if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
       return result;
     }
-    if (useDeclaringConstructorsAst) {
-      if (namePart._containsOffset(rangeOffset, rangeEnd)) {
-        return namePart;
-      }
-    } else {
-      if (typeParameters case var typeParameters?) {
-        if (typeParameters._containsOffset(rangeOffset, rangeEnd)) {
-          return typeParameters;
-        }
-      }
+    if (namePart._containsOffset(rangeOffset, rangeEnd)) {
+      return namePart;
     }
     if (extendsClause case var extendsClause?) {
       if (extendsClause._containsOffset(rangeOffset, rangeEnd)) {
@@ -3412,15 +3286,8 @@
         return nativeClause;
       }
     }
-    if (useDeclaringConstructorsAst) {
-      if (body._containsOffset(rangeOffset, rangeEnd)) {
-        return body;
-      }
-    } else {
-      if (members._elementContainingRange(rangeOffset, rangeEnd)
-          case var result?) {
-        return result;
-      }
+    if (body._containsOffset(rangeOffset, rangeEnd)) {
+      return body;
     }
     return null;
   }
@@ -3441,7 +3308,6 @@
 
 /// The name of a class, enum, or extension type declaration.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 sealed class ClassNamePart implements AstNode {
   /// The name of the type being declared.
   Token get typeName;
@@ -3455,14 +3321,6 @@
   TypeParameterListImpl? get typeParameters;
 }
 
-/// Stub of [ClassNamePartImpl], used to pass to the [ClassDeclarationImpl]
-/// constructor, but it never returned through the API.
-// TODO(scheglov): Remove together with [useDeclaringConstructorsAst].
-final class ClassNamePartImplStub implements ClassNamePartImpl {
-  @override
-  noSuchMethod(invocation) => super.noSuchMethod(invocation);
-}
-
 /// A class type alias.
 ///
 ///    classTypeAlias ::=
@@ -4855,6 +4713,11 @@
   /// is unnamed.
   Token? get name;
 
+  /// The token for the `new` keyword, or `null` if the keyword is absent, so
+  /// either [factoryKeyword] is not `null`, or the old syntax with [typeName]
+  /// is used.
+  Token? get newKeyword;
+
   /// The parameters associated with the constructor.
   FormalParameterList get parameters;
 
@@ -4867,12 +4730,18 @@
   ConstructorName? get redirectedConstructor;
 
   /// The type of object being created.
+  @Deprecated('Use typeName instead')
   Identifier get returnType;
 
   /// The token for the separator (colon or equals) before the initializer list
   /// or redirection, or `null` if there are neither initializers nor a
   /// redirection.
   Token? get separator;
+
+  /// The name of the enclosing type, e.g. `C` in `C() {}` or `C.named() {}`.
+  ///
+  /// Or `null` if uses new syntax with [newKeyword] or [factoryKeyword].
+  SimpleIdentifier? get typeName;
 }
 
 @GenerateNodeImpl(
@@ -4881,7 +4750,8 @@
     GenerateNodeProperty('externalKeyword', tokenGroupId: 0),
     GenerateNodeProperty('constKeyword', tokenGroupId: 0, isTokenFinal: false),
     GenerateNodeProperty('factoryKeyword', tokenGroupId: 0),
-    GenerateNodeProperty('returnType'),
+    GenerateNodeProperty('newKeyword', tokenGroupId: 0),
+    GenerateNodeProperty('typeName'),
     GenerateNodeProperty('period'),
     GenerateNodeProperty('name'),
     GenerateNodeProperty('parameters'),
@@ -4910,7 +4780,11 @@
   final Token? factoryKeyword;
 
   @generated
-  IdentifierImpl _returnType;
+  @override
+  final Token? newKeyword;
+
+  @generated
+  SimpleIdentifierImpl? _typeName;
 
   @generated
   @override
@@ -4949,7 +4823,8 @@
     required this.externalKeyword,
     required this.constKeyword,
     required this.factoryKeyword,
-    required IdentifierImpl returnType,
+    required this.newKeyword,
+    required SimpleIdentifierImpl? typeName,
     required this.period,
     required this.name,
     required FormalParameterListImpl parameters,
@@ -4957,11 +4832,11 @@
     required List<ConstructorInitializerImpl> initializers,
     required ConstructorNameImpl? redirectedConstructor,
     required FunctionBodyImpl body,
-  }) : _returnType = returnType,
+  }) : _typeName = typeName,
        _parameters = parameters,
        _redirectedConstructor = redirectedConstructor,
        _body = body {
-    _becomeParentOf(returnType);
+    _becomeParentOf(typeName);
     _becomeParentOf(parameters);
     this.initializers._initialize(this, initializers);
     _becomeParentOf(redirectedConstructor);
@@ -4991,11 +4866,21 @@
           externalKeyword,
           constKeyword,
           factoryKeyword,
+          newKeyword,
         )
         case var result?) {
       return result;
     }
-    return returnType.beginToken;
+    if (typeName case var typeName?) {
+      return typeName.beginToken;
+    }
+    if (period case var period?) {
+      return period;
+    }
+    if (name case var name?) {
+      return name;
+    }
+    return parameters.beginToken;
   }
 
   /// Whether this is a trivial constructor.
@@ -5028,13 +4913,20 @@
     _redirectedConstructor = _becomeParentOf(redirectedConstructor);
   }
 
-  @generated
+  @Deprecated('Use typeName instead')
   @override
-  IdentifierImpl get returnType => _returnType;
+  IdentifierImpl get returnType {
+    // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+    return typeName!;
+  }
 
   @generated
-  set returnType(IdentifierImpl returnType) {
-    _returnType = _becomeParentOf(returnType);
+  @override
+  SimpleIdentifierImpl? get typeName => _typeName;
+
+  @generated
+  set typeName(SimpleIdentifierImpl? typeName) {
+    _typeName = _becomeParentOf(typeName);
   }
 
   @generated
@@ -5044,7 +4936,8 @@
     ..addToken('externalKeyword', externalKeyword)
     ..addToken('constKeyword', constKeyword)
     ..addToken('factoryKeyword', factoryKeyword)
-    ..addNode('returnType', returnType)
+    ..addToken('newKeyword', newKeyword)
+    ..addNode('typeName', typeName)
     ..addToken('period', period)
     ..addToken('name', name)
     ..addNode('parameters', parameters)
@@ -5062,7 +4955,7 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    returnType.accept(visitor);
+    typeName?.accept(visitor);
     parameters.accept(visitor);
     initializers.accept(visitor);
     redirectedConstructor?.accept(visitor);
@@ -5075,8 +4968,10 @@
     if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
       return result;
     }
-    if (returnType._containsOffset(rangeOffset, rangeEnd)) {
-      return returnType;
+    if (typeName case var typeName?) {
+      if (typeName._containsOffset(rangeOffset, rangeEnd)) {
+        return typeName;
+      }
     }
     if (parameters._containsOffset(rangeOffset, rangeEnd)) {
       return parameters;
@@ -5755,7 +5650,7 @@
   /// Returns `null` for [FieldDeclaration] and [TopLevelVariableDeclaration]
   /// because these nodes don't declare any fragments, but individual
   /// [VariableDeclaration]s inside them do. They are [Declaration]s mostly to
-  /// fit into [ClassDeclaration.members] and [CompilationUnit.declarations].
+  /// fit into [ClassDeclaration.body] and [CompilationUnit.declarations].
   Fragment? get declaredFragment;
 }
 
@@ -6919,7 +6814,6 @@
 
 /// The empty class body.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 sealed class EmptyClassBody implements ClassBody {
   /// The semicolon token.
   Token get semicolon;
@@ -7084,7 +6978,6 @@
 
 /// The enum declaration body, with constants and members.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 sealed class EnumBody implements AstNode {
   /// The enumeration constants being declared.
   NodeList<EnumConstantDeclaration> get constants;
@@ -7194,14 +7087,6 @@
   }
 }
 
-/// Stub of [EnumBodyImpl], used to pass to the [EnumDeclarationImpl]
-/// constructor, but it is never returned through the API.
-// TODO(scheglov): Remove together with [useDeclaringConstructorsAst].
-final class EnumBodyImplStub implements EnumBodyImpl {
-  @override
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
 /// The arguments part of an enum constant.
 ///
 ///    enumConstantArguments ::=
@@ -7466,19 +7351,18 @@
 ///        [WithClause]? [ImplementsClause]? '{' [SimpleIdentifier]
 ///        (',' [SimpleIdentifier])* (';' [ClassMember]+)? '}'
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-abstract final class EnumDeclaration implements NamedCompilationUnitMember {
+abstract final class EnumDeclaration
+    implements
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMember {
   /// The `augment` keyword, or `null` if the keyword was absent.
   Token? get augmentKeyword;
 
   /// The body of the enum declaration.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   EnumBody get body;
 
   /// The enumeration constants being declared.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   NodeList<EnumConstantDeclaration> get constants;
 
   @override
@@ -7492,42 +7376,33 @@
   ImplementsClause? get implementsClause;
 
   /// The left curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get leftBracket;
 
   /// The members declared by the enumeration.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   NodeList<ClassMember> get members;
 
   /// The name of the enum.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use namePart instead')
   @override
   Token get name;
 
   /// The name of the enum, as an identifier with type parameters,
   /// or a primary constructor.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   ClassNamePart get namePart;
 
   /// The right curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get rightBracket;
 
   /// The optional semicolon after the last constant.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token? get semicolon;
 
   /// The type parameters for the enumeration, or `null` if the enumeration
   /// doesn't have any type parameters.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use namePart instead')
   TypeParameterList? get typeParameters;
 
   /// The `with` clause for the enumeration, or `null` if the enumeration
@@ -7540,19 +7415,15 @@
     GenerateNodeProperty('augmentKeyword'),
     GenerateNodeProperty('enumKeyword'),
     GenerateNodeProperty('namePart'),
-    GenerateNodeProperty('name', isSuper: true),
-    GenerateNodeProperty('typeParameters'),
     GenerateNodeProperty('withClause'),
     GenerateNodeProperty('implementsClause'),
     GenerateNodeProperty('body'),
-    GenerateNodeProperty('leftBracket'),
-    GenerateNodeProperty('constants'),
-    GenerateNodeProperty('semicolon'),
-    GenerateNodeProperty('members'),
-    GenerateNodeProperty('rightBracket'),
   ],
 )
-final class EnumDeclarationImpl extends NamedCompilationUnitMemberImpl
+final class EnumDeclarationImpl
+    extends
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMemberImpl
     with AstNodeWithNameScopeMixin
     implements EnumDeclaration {
   @generated
@@ -7564,106 +7435,59 @@
   final Token enumKeyword;
 
   @generated
+  ClassNamePartImpl _namePart;
+
+  @generated
   WithClauseImpl? _withClause;
 
   @generated
   ImplementsClauseImpl? _implementsClause;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final ClassNamePartImpl _namePart;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  TypeParameterListImpl? _typeParameters;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   EnumBodyImpl _body;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _leftBracket;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final NodeListImpl<EnumConstantDeclarationImpl> _constants = NodeListImpl._();
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token? _semicolon;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final NodeListImpl<ClassMemberImpl> _members = NodeListImpl._();
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _rightBracket;
-
   @override
   EnumFragmentImpl? declaredFragment;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   EnumDeclarationImpl({
     required super.comment,
     required super.metadata,
     required this.augmentKeyword,
     required this.enumKeyword,
-    required super.name,
     required ClassNamePartImpl namePart,
-    required TypeParameterListImpl? typeParameters,
     required WithClauseImpl? withClause,
     required ImplementsClauseImpl? implementsClause,
     required EnumBodyImpl body,
-    required Token leftBracket,
-    required List<EnumConstantDeclarationImpl> constants,
-    required Token? semicolon,
-    required List<ClassMemberImpl> members,
-    required Token rightBracket,
   }) : _namePart = namePart,
-       _typeParameters = typeParameters,
        _withClause = withClause,
        _implementsClause = implementsClause,
-       _body = body,
-       _leftBracket = leftBracket,
-       _semicolon = semicolon,
-       _rightBracket = rightBracket {
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(namePart);
-    } else {
-      _becomeParentOf(typeParameters);
-    }
+       _body = body {
+    _becomeParentOf(namePart);
     _becomeParentOf(withClause);
     _becomeParentOf(implementsClause);
-    if (useDeclaringConstructorsAst) {
-      _body = _becomeParentOf(body);
-      assert(identical(typeParameters, namePart.typeParameters));
-    } else {
-      _constants._initialize(this, constants);
-      _members._initialize(this, members);
-      assert(namePart is ClassNamePartImplStub);
-      assert(body is EnumBodyImplStub);
-    }
+    _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  EnumBodyImpl get body {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _body;
+  EnumBodyImpl get body => _body;
+
+  @generated
+  set body(EnumBodyImpl body) {
+    _body = _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   NodeListImpl<EnumConstantDeclarationImpl> get constants {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _constants;
+    return body.constants;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   Token get endToken {
-    if (useDeclaringConstructorsAst) {
-      return body.endToken;
-    }
-    return rightBracket;
+    return body.endToken;
   }
 
   @generated
@@ -7684,72 +7508,47 @@
     _implementsClause = _becomeParentOf(implementsClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get leftBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _leftBracket;
+    return body.leftBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   NodeListImpl<ClassMemberImpl> get members {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _members;
+    return body.members;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use namePart instead')
   @override
-  Token get name {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return super.name;
-  }
+  Token get name => namePart.typeName;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ClassNamePartImpl get namePart {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _namePart;
+  ClassNamePartImpl get namePart => _namePart;
+
+  @generated
+  set namePart(ClassNamePartImpl namePart) {
+    _namePart = _becomeParentOf(namePart);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get rightBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _rightBracket;
+    return body.rightBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token? get semicolon {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _semicolon;
+    return body.semicolon;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use namePart instead')
   @override
   TypeParameterListImpl? get typeParameters {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _typeParameters;
-  }
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  set typeParameters(TypeParameterListImpl? typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters);
+    return namePart.typeParameters;
   }
 
   @generated
@@ -7761,77 +7560,38 @@
     _withClause = _becomeParentOf(withClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ChildEntities get _childEntities {
-    var result = super._childEntities
-      ..addToken('augmentKeyword', augmentKeyword)
-      ..addToken('enumKeyword', enumKeyword);
-
-    if (useDeclaringConstructorsAst) {
-      result.addNode('namePart', namePart);
-    } else {
-      result
-        ..addToken('name', name)
-        ..addNode('typeParameters', typeParameters);
-    }
-
-    result
-      ..addNode('withClause', withClause)
-      ..addNode('implementsClause', implementsClause);
-
-    if (useDeclaringConstructorsAst) {
-      result.addNode('body', body);
-    } else {
-      result
-        ..addToken('leftBracket', leftBracket)
-        ..addNodeList('constants', constants)
-        ..addToken('semicolon', semicolon)
-        ..addNodeList('members', members)
-        ..addToken('rightBracket', rightBracket);
-    }
-    return result;
-  }
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('enumKeyword', enumKeyword)
+    ..addNode('namePart', namePart)
+    ..addNode('withClause', withClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addNode('body', body);
 
   @generated
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitEnumDeclaration(this);
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    if (useDeclaringConstructorsAst) {
-      namePart.accept(visitor);
-    } else {
-      typeParameters?.accept(visitor);
-    }
+    namePart.accept(visitor);
     withClause?.accept(visitor);
     implementsClause?.accept(visitor);
-    if (useDeclaringConstructorsAst) {
-      body.accept(visitor);
-    } else {
-      constants.accept(visitor);
-      members.accept(visitor);
-    }
+    body.accept(visitor);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
     if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
       return result;
     }
-    if (useDeclaringConstructorsAst) {
-      if (namePart._containsOffset(rangeOffset, rangeEnd)) {
-        return namePart;
-      }
-    } else {
-      if (typeParameters case var typeParameters?) {
-        if (typeParameters._containsOffset(rangeOffset, rangeEnd)) {
-          return typeParameters;
-        }
-      }
+    if (namePart._containsOffset(rangeOffset, rangeEnd)) {
+      return namePart;
     }
     if (withClause case var withClause?) {
       if (withClause._containsOffset(rangeOffset, rangeEnd)) {
@@ -7843,19 +7603,8 @@
         return implementsClause;
       }
     }
-    if (useDeclaringConstructorsAst) {
-      if (body._containsOffset(rangeOffset, rangeEnd)) {
-        return body;
-      }
-    } else {
-      if (_constants._elementContainingRange(rangeOffset, rangeEnd)
-          case var result?) {
-        return result;
-      }
-      if (_members._elementContainingRange(rangeOffset, rangeEnd)
-          case var result?) {
-        return result;
-      }
+    if (body._containsOffset(rangeOffset, rangeEnd)) {
+      return body;
     }
     return null;
   }
@@ -8274,7 +8023,7 @@
 
     var constant = visitor.evaluateAndReportInvalidConstant(this);
     var isInvalidConstant = diagnosticListener.diagnostics.any(
-      (e) => e.diagnosticCode == CompileTimeErrorCode.invalidConstant,
+      (e) => e.diagnosticCode == diag.invalidConstant,
     );
     if (isInvalidConstant) {
       return null;
@@ -8595,9 +8344,6 @@
   Token? get augmentKeyword;
 
   /// The body of the extension declaration.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   BlockClassBody get body;
 
   @override
@@ -8607,13 +8353,11 @@
   Token get extensionKeyword;
 
   /// The left curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get leftBracket;
 
   /// The members being added to the extended class.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   NodeList<ClassMember> get members;
 
   /// The name of the extension, or `null` if the extension doesn't have a name.
@@ -8623,8 +8367,7 @@
   ExtensionOnClause? get onClause;
 
   /// The right curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get rightBracket;
 
   /// The token representing the `type` keyword.
@@ -8632,8 +8375,6 @@
 
   /// The type parameters for the extension, or `null` if the extension doesn't
   /// have any type parameters.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
   TypeParameterList? get typeParameters;
 }
 
@@ -8646,9 +8387,6 @@
     GenerateNodeProperty('typeParameters'),
     GenerateNodeProperty('onClause'),
     GenerateNodeProperty('body'),
-    GenerateNodeProperty('leftBracket'),
-    GenerateNodeProperty('members'),
-    GenerateNodeProperty('rightBracket'),
   ],
 )
 final class ExtensionDeclarationImpl extends CompilationUnitMemberImpl
@@ -8676,22 +8414,13 @@
   @generated
   ExtensionOnClauseImpl? _onClause;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final BlockClassBodyImpl _body;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _leftBracket;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final NodeListImpl<ClassMemberImpl> _members = NodeListImpl._();
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _rightBracket;
+  @generated
+  BlockClassBodyImpl _body;
 
   @override
   ExtensionFragmentImpl? declaredFragment;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   ExtensionDeclarationImpl({
     required super.comment,
     required super.metadata,
@@ -8702,40 +8431,27 @@
     required TypeParameterListImpl? typeParameters,
     required ExtensionOnClauseImpl? onClause,
     required BlockClassBodyImpl body,
-    required Token leftBracket,
-    required List<ClassMemberImpl> members,
-    required Token rightBracket,
   }) : _typeParameters = typeParameters,
        _onClause = onClause,
-       _body = body,
-       _leftBracket = leftBracket,
-       _rightBracket = rightBracket {
+       _body = body {
     _becomeParentOf(typeParameters);
     _becomeParentOf(onClause);
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(body);
-    } else {
-      _members._initialize(this, members);
-      assert(body is BlockClassBodyImplStub);
-    }
+    _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  BlockClassBodyImpl get body {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _body;
+  BlockClassBodyImpl get body => _body;
+
+  @generated
+  set body(BlockClassBodyImpl body) {
+    _body = _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   Token get endToken {
-    if (useDeclaringConstructorsAst) {
-      return body.endToken;
-    }
-    return _rightBracket;
+    return body.endToken;
   }
 
   @generated
@@ -8747,22 +8463,16 @@
     return extensionKeyword;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get leftBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _leftBracket;
+    return body.leftBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   NodeListImpl<ClassMemberImpl> get members {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _members;
+    return body.members;
   }
 
   @generated
@@ -8774,13 +8484,10 @@
     _onClause = _becomeParentOf(onClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get rightBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _rightBracket;
+    return body.rightBracket;
   }
 
   @generated
@@ -8792,46 +8499,32 @@
     _typeParameters = _becomeParentOf(typeParameters);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ChildEntities get _childEntities {
-    var result = super._childEntities
-      ..addToken('augmentKeyword', augmentKeyword)
-      ..addToken('extensionKeyword', extensionKeyword)
-      ..addToken('typeKeyword', typeKeyword)
-      ..addToken('name', name)
-      ..addNode('typeParameters', typeParameters)
-      ..addNode('onClause', onClause);
-    if (useDeclaringConstructorsAst) {
-      result.addNode('body', body);
-    } else {
-      result
-        ..addToken('leftBracket', leftBracket)
-        ..addNodeList('members', members)
-        ..addToken('rightBracket', rightBracket);
-    }
-    return result;
-  }
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('extensionKeyword', extensionKeyword)
+    ..addToken('typeKeyword', typeKeyword)
+    ..addToken('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('onClause', onClause)
+    ..addNode('body', body);
 
   @generated
   @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitExtensionDeclaration(this);
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     typeParameters?.accept(visitor);
     onClause?.accept(visitor);
-    if (useDeclaringConstructorsAst) {
-      body.accept(visitor);
-    } else {
-      members.accept(visitor);
-    }
+    body.accept(visitor);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
     if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
@@ -8847,15 +8540,8 @@
         return onClause;
       }
     }
-    if (useDeclaringConstructorsAst) {
-      if (body._containsOffset(rangeOffset, rangeEnd)) {
-        return body;
-      }
-    } else {
-      if (_members._elementContainingRange(rangeOffset, rangeEnd)
-          case var result?) {
-        return result;
-      }
+    if (body._containsOffset(rangeOffset, rangeEnd)) {
+      return body;
     }
     return null;
   }
@@ -9142,19 +8828,17 @@
 ///        '}'
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
 abstract final class ExtensionTypeDeclaration
-    implements NamedCompilationUnitMember {
+    implements
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMember {
   /// The `augment` keyword, or `null` if the keyword was absent.
   Token? get augmentKeyword;
 
   /// The body of the extension type declaration.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   ClassBody get body;
 
   /// The `const` keyword.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use primaryConstructor instead')
   Token? get constKeyword;
 
   @override
@@ -9167,47 +8851,34 @@
   ImplementsClause? get implementsClause;
 
   /// The left curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get leftBracket;
 
   /// The members.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   NodeList<ClassMember> get members;
 
   /// The name of the extension type.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use primaryConstructor instead')
   @override
   Token get name;
 
-  /// The name of the extension type, as an identifier with type parameters,
-  /// or a primary constructor.
-  ///
-  /// Will become not `null` when [Feature.declaring_constructors] is
-  /// implemented, replaces [name], [typeParameters], [representation].
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
-  ClassNamePart get namePart;
+  /// The primary constructor of the extension type.
+  PrimaryConstructorDeclaration get primaryConstructor;
 
   /// The representation declaration.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use primaryConstructor instead')
   RepresentationDeclaration get representation;
 
   /// The right curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get rightBracket;
 
   /// The `type` keyword.
   Token get typeKeyword;
 
   /// The type parameters.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use primaryConstructor instead')
   TypeParameterList? get typeParameters;
 }
 
@@ -9216,19 +8887,15 @@
     GenerateNodeProperty('augmentKeyword'),
     GenerateNodeProperty('extensionKeyword'),
     GenerateNodeProperty('typeKeyword'),
-    GenerateNodeProperty('namePart'),
-    GenerateNodeProperty('constKeyword'),
-    GenerateNodeProperty('name', isSuper: true),
-    GenerateNodeProperty('typeParameters'),
-    GenerateNodeProperty('representation'),
+    GenerateNodeProperty('primaryConstructor'),
     GenerateNodeProperty('implementsClause'),
     GenerateNodeProperty('body'),
-    GenerateNodeProperty('leftBracket'),
-    GenerateNodeProperty('members'),
-    GenerateNodeProperty('rightBracket'),
   ],
 )
-final class ExtensionTypeDeclarationImpl extends NamedCompilationUnitMemberImpl
+final class ExtensionTypeDeclarationImpl
+    extends
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMemberImpl
     with AstNodeWithNameScopeMixin
     implements ExtensionTypeDeclaration {
   @generated
@@ -9244,103 +8911,64 @@
   final Token typeKeyword;
 
   @generated
+  PrimaryConstructorDeclarationImpl _primaryConstructor;
+
+  @generated
   ImplementsClauseImpl? _implementsClause;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  ClassNamePartImpl _namePart;
+  @generated
+  ClassBodyImpl _body;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token? _constKeyword;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  TypeParameterListImpl? _typeParameters;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final RepresentationDeclarationImpl _representation;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final ClassBodyImpl _body;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _leftBracket;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final NodeListImpl<ClassMemberImpl> _members = NodeListImpl._();
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _rightBracket;
+  @Deprecated('Use primaryConstructor instead')
+  RepresentationDeclarationImpl? _representation;
 
   @override
   ExtensionTypeFragmentImpl? declaredFragment;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   ExtensionTypeDeclarationImpl({
     required super.comment,
     required super.metadata,
     required this.augmentKeyword,
     required this.extensionKeyword,
     required this.typeKeyword,
-    required Token? constKeyword,
-    required super.name,
-    required ClassNamePartImpl namePart,
-    required TypeParameterListImpl? typeParameters,
-    required RepresentationDeclarationImpl representation,
+    required PrimaryConstructorDeclarationImpl primaryConstructor,
     required ImplementsClauseImpl? implementsClause,
     required ClassBodyImpl body,
-    required Token leftBracket,
-    required List<ClassMemberImpl> members,
-    required Token rightBracket,
-  }) : _constKeyword = constKeyword,
-       _namePart = namePart,
-       _typeParameters = typeParameters,
-       _representation = representation,
+  }) : _primaryConstructor = primaryConstructor,
        _implementsClause = implementsClause,
-       _body = body,
-       _leftBracket = leftBracket,
-       _rightBracket = rightBracket {
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(namePart);
-    } else {
-      _becomeParentOf(typeParameters);
-      _becomeParentOf(representation);
-    }
+       _body = body {
+    _becomeParentOf(primaryConstructor);
     _becomeParentOf(implementsClause);
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(body);
-      assert(identical(typeParameters, namePart.typeParameters));
-      assert(representation is RepresentationDeclarationImplStub);
-    } else {
-      _members._initialize(this, members);
-      assert(namePart is ClassNamePartImplStub);
-      assert(body is ClassBodyImplStub);
-    }
+    _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ClassBodyImpl get body {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _body;
+  ClassBodyImpl get body => _body;
+
+  @generated
+  set body(ClassBodyImpl body) {
+    _body = _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use primaryConstructor instead')
   @override
   Token? get constKeyword {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _constKeyword;
+    return primaryConstructor.constKeyword;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   Token get endToken {
-    if (useDeclaringConstructorsAst) {
-      return body.endToken;
-    }
-    return rightBracket;
+    return body.endToken;
+  }
+
+  /// The type annotation of the only formal parameter of the primary
+  /// constructor. It is always present, ensured by the AST builder.
+  TypeAnnotationImpl get fieldType {
+    var formal = primaryConstructor.formalParameters.parameters.first;
+    return (formal as SimpleFormalParameterImpl).type!;
   }
 
   @generated
@@ -9361,168 +8989,117 @@
     _implementsClause = _becomeParentOf(implementsClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get leftBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _leftBracket;
+    return (body as BlockClassBodyImpl).leftBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   NodeListImpl<ClassMemberImpl> get members {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _members;
+    return (body as BlockClassBodyImpl).members;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use primaryConstructor instead')
   @override
-  Token get name {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return super.name;
-  }
+  Token get name => primaryConstructor.typeName;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ClassNamePartImpl get namePart {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _namePart;
+  PrimaryConstructorDeclarationImpl get primaryConstructor =>
+      _primaryConstructor;
+
+  @generated
+  set primaryConstructor(PrimaryConstructorDeclarationImpl primaryConstructor) {
+    _primaryConstructor = _becomeParentOf(primaryConstructor);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  set namePart(ClassNamePartImpl namePart) {
-    _namePart = _becomeParentOf(namePart);
-  }
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use primaryConstructor instead')
   @override
   RepresentationDeclarationImpl get representation {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
+    var formal = primaryConstructor.formalParameters.parameters.first;
+    formal as SimpleFormalParameterImpl;
+
+    var representation = _representation;
+    if (representation == null) {
+      var constructorName = primaryConstructor.constructorName;
+      representation = RepresentationDeclarationImpl(
+        constructorName: constructorName != null
+            ? RepresentationConstructorNameImpl(
+                period: constructorName.period,
+                name: constructorName.name,
+              )
+            : null,
+        leftParenthesis: primaryConstructor.formalParameters.leftParenthesis,
+        fieldMetadata: formal.metadata,
+        fieldType: formal.type!,
+        fieldName: formal.name!,
+        rightParenthesis: primaryConstructor.formalParameters.rightParenthesis,
+      );
+      _representation = _becomeParentOf(representation);
     }
-    return _representation;
+    representation.fieldFragment =
+        (formal.declaredFragment as FieldFormalParameterFragmentImpl?)
+            ?.element
+            .field
+            ?.firstFragment;
+    representation.constructorFragment = declaredFragment?.constructors.first;
+    return representation;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get rightBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _rightBracket;
+    return (body as BlockClassBodyImpl).rightBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use primaryConstructor instead')
   @override
   TypeParameterListImpl? get typeParameters {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _typeParameters;
+    return primaryConstructor.typeParameters;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  set typeParameters(TypeParameterListImpl? typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters);
-  }
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ChildEntities get _childEntities {
-    var result = super._childEntities
-      ..addToken('augmentKeyword', augmentKeyword)
-      ..addToken('extensionKeyword', extensionKeyword)
-      ..addToken('typeKeyword', typeKeyword);
-
-    if (useDeclaringConstructorsAst) {
-      result.addNode('namePart', namePart);
-    } else {
-      result
-        ..addToken('constKeyword', constKeyword)
-        ..addToken('name', name)
-        ..addNode('typeParameters', typeParameters)
-        ..addNode('representation', representation);
-    }
-
-    result.addNode('implementsClause', implementsClause);
-
-    if (useDeclaringConstructorsAst) {
-      result.addNode('body', body);
-    } else {
-      result
-        ..addToken('leftBracket', leftBracket)
-        ..addNodeList('members', members)
-        ..addToken('rightBracket', rightBracket);
-    }
-
-    return result;
-  }
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('extensionKeyword', extensionKeyword)
+    ..addToken('typeKeyword', typeKeyword)
+    ..addNode('primaryConstructor', primaryConstructor)
+    ..addNode('implementsClause', implementsClause)
+    ..addNode('body', body);
 
   @generated
   @override
   E? accept<E>(AstVisitor<E> visitor) =>
       visitor.visitExtensionTypeDeclaration(this);
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    if (useDeclaringConstructorsAst) {
-      namePart.accept(visitor);
-    } else {
-      typeParameters?.accept(visitor);
-      representation.accept(visitor);
-    }
+    primaryConstructor.accept(visitor);
     implementsClause?.accept(visitor);
-    if (useDeclaringConstructorsAst) {
-      body.accept(visitor);
-    } else {
-      members.accept(visitor);
-    }
+    body.accept(visitor);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
     if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
       return result;
     }
-    if (useDeclaringConstructorsAst) {
-      if (namePart._containsOffset(rangeOffset, rangeEnd)) {
-        return namePart;
-      }
-    } else {
-      if (typeParameters case var typeParameters?) {
-        if (typeParameters._containsOffset(rangeOffset, rangeEnd)) {
-          return typeParameters;
-        }
-      }
-      if (representation._containsOffset(rangeOffset, rangeEnd)) {
-        return representation;
-      }
+    if (primaryConstructor._containsOffset(rangeOffset, rangeEnd)) {
+      return primaryConstructor;
     }
     if (implementsClause case var implementsClause?) {
       if (implementsClause._containsOffset(rangeOffset, rangeEnd)) {
         return implementsClause;
       }
     }
-    if (useDeclaringConstructorsAst) {
-      if (body._containsOffset(rangeOffset, rangeEnd)) {
-        return body;
-      }
-    } else {
-      if (members._elementContainingRange(rangeOffset, rangeEnd)
-          case var result?) {
-        return result;
-      }
+    if (body._containsOffset(rangeOffset, rangeEnd)) {
+      return body;
     }
     return null;
   }
@@ -11361,7 +10938,10 @@
 //  that are only sometimes applicable. Consider changing the class hierarchy so
 //  that these two kinds of variables can be distinguished.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-abstract final class FunctionDeclaration implements NamedCompilationUnitMember {
+abstract final class FunctionDeclaration
+    implements
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMember {
   /// The `augment` keyword, or `null` if there is no `augment` keyword.
   Token? get augmentKeyword;
 
@@ -11385,6 +10965,10 @@
   /// Whether this function declares a setter.
   bool get isSetter;
 
+  /// The name of the function.
+  @override
+  Token get name;
+
   /// The token representing the `get` or `set` keyword, or `null` if this is a
   /// function declaration rather than a property declaration.
   Token? get propertyKeyword;
@@ -11399,11 +10983,14 @@
     GenerateNodeProperty('externalKeyword'),
     GenerateNodeProperty('returnType'),
     GenerateNodeProperty('propertyKeyword'),
-    GenerateNodeProperty('name', isSuper: true),
+    GenerateNodeProperty('name'),
     GenerateNodeProperty('functionExpression'),
   ],
 )
-final class FunctionDeclarationImpl extends NamedCompilationUnitMemberImpl
+final class FunctionDeclarationImpl
+    extends
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMemberImpl
     with AstNodeWithNameScopeMixin
     implements FunctionDeclaration {
   @generated
@@ -11422,6 +11009,10 @@
   final Token? propertyKeyword;
 
   @generated
+  @override
+  final Token name;
+
+  @generated
   FunctionExpressionImpl _functionExpression;
 
   @override
@@ -11435,7 +11026,7 @@
     required this.externalKeyword,
     required TypeAnnotationImpl? returnType,
     required this.propertyKeyword,
-    required super.name,
+    required this.name,
     required FunctionExpressionImpl functionExpression,
   }) : _returnType = returnType,
        _functionExpression = functionExpression {
@@ -16862,7 +16453,10 @@
 ///        'base'? 'mixin' name [TypeParameterList]?
 ///        [OnClause]? [ImplementsClause]? '{' [ClassMember]* '}'
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-abstract final class MixinDeclaration implements NamedCompilationUnitMember {
+abstract final class MixinDeclaration
+    implements
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMember {
   /// The `augment` keyword, or `null` if the keyword was absent.
   Token? get augmentKeyword;
 
@@ -16870,12 +16464,6 @@
   Token? get baseKeyword;
 
   /// The body of the mixin declaration.
-  ///
-  /// Replaces [leftBracket], [members], [rightBracket] when
-  /// [useDeclaringConstructorsAst] is `true`.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `false`.
-  @experimental
   BlockClassBody get body;
 
   @override
@@ -16886,25 +16474,26 @@
   ImplementsClause? get implementsClause;
 
   /// The left curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get leftBracket;
 
   /// The members defined by the mixin.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   NodeList<ClassMember> get members;
 
   /// The token representing the `mixin` keyword.
   Token get mixinKeyword;
 
+  /// The name of the mixin.
+  @override
+  Token get name;
+
   /// The on clause for the mixin, or `null` if the mixin doesn't have any
   /// superclass constraints.
   MixinOnClause? get onClause;
 
   /// The right curly bracket.
-  ///
-  /// Throws [UnsupportedError] if [useDeclaringConstructorsAst] is `true`.
+  @Deprecated('Use body instead')
   Token get rightBracket;
 
   /// The type parameters for the mixin, or `null` if the mixin doesn't have any
@@ -16917,17 +16506,17 @@
     GenerateNodeProperty('augmentKeyword'),
     GenerateNodeProperty('baseKeyword'),
     GenerateNodeProperty('mixinKeyword'),
-    GenerateNodeProperty('name', isSuper: true),
+    GenerateNodeProperty('name'),
     GenerateNodeProperty('typeParameters'),
     GenerateNodeProperty('onClause'),
     GenerateNodeProperty('implementsClause'),
     GenerateNodeProperty('body'),
-    GenerateNodeProperty('leftBracket'),
-    GenerateNodeProperty('members'),
-    GenerateNodeProperty('rightBracket'),
   ],
 )
-final class MixinDeclarationImpl extends NamedCompilationUnitMemberImpl
+final class MixinDeclarationImpl
+    extends
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMemberImpl
     with AstNodeWithNameScopeMixin
     implements MixinDeclaration {
   @generated
@@ -16943,6 +16532,10 @@
   final Token mixinKeyword;
 
   @generated
+  @override
+  final Token name;
+
+  @generated
   TypeParameterListImpl? _typeParameters;
 
   @generated
@@ -16951,68 +16544,47 @@
   @generated
   ImplementsClauseImpl? _implementsClause;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final BlockClassBodyImpl _body;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _leftBracket;
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final NodeListImpl<ClassMemberImpl> _members = NodeListImpl._();
-
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
-  final Token _rightBracket;
+  @generated
+  BlockClassBodyImpl _body;
 
   @override
   MixinFragmentImpl? declaredFragment;
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   MixinDeclarationImpl({
     required super.comment,
     required super.metadata,
     required this.augmentKeyword,
     required this.baseKeyword,
     required this.mixinKeyword,
-    required super.name,
+    required this.name,
     required TypeParameterListImpl? typeParameters,
     required MixinOnClauseImpl? onClause,
     required ImplementsClauseImpl? implementsClause,
     required BlockClassBodyImpl body,
-    required Token leftBracket,
-    required List<ClassMemberImpl> members,
-    required Token rightBracket,
   }) : _typeParameters = typeParameters,
        _onClause = onClause,
        _implementsClause = implementsClause,
-       _body = body,
-       _leftBracket = leftBracket,
-       _rightBracket = rightBracket {
+       _body = body {
     _becomeParentOf(typeParameters);
     _becomeParentOf(onClause);
     _becomeParentOf(implementsClause);
-    if (useDeclaringConstructorsAst) {
-      _becomeParentOf(body);
-    } else {
-      _members._initialize(this, members);
-    }
+    _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  BlockClassBodyImpl get body {
-    if (!useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = true');
-    }
-    return _body;
+  BlockClassBodyImpl get body => _body;
+
+  @generated
+  set body(BlockClassBodyImpl body) {
+    _body = _becomeParentOf(body);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   Token get endToken {
-    if (useDeclaringConstructorsAst) {
-      return body.endToken;
-    }
-    return rightBracket;
+    return body.endToken;
   }
 
   @generated
@@ -17036,22 +16608,16 @@
     _implementsClause = _becomeParentOf(implementsClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get leftBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _leftBracket;
+    return body.leftBracket;
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   NodeListImpl<ClassMemberImpl> get members {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _members;
+    return body.members;
   }
 
   @generated
@@ -17063,13 +16629,10 @@
     _onClause = _becomeParentOf(onClause);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @Deprecated('Use body instead')
   @override
   Token get rightBracket {
-    if (useDeclaringConstructorsAst) {
-      throw UnsupportedError('Requires useDeclaringConstructorsAst = false');
-    }
-    return _rightBracket;
+    return body.rightBracket;
   }
 
   @generated
@@ -17081,47 +16644,33 @@
     _typeParameters = _becomeParentOf(typeParameters);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
-  ChildEntities get _childEntities {
-    var result = super._childEntities
-      ..addToken('augmentKeyword', augmentKeyword)
-      ..addToken('baseKeyword', baseKeyword)
-      ..addToken('mixinKeyword', mixinKeyword)
-      ..addToken('name', name)
-      ..addNode('typeParameters', typeParameters)
-      ..addNode('onClause', onClause)
-      ..addNode('implementsClause', implementsClause);
-    if (useDeclaringConstructorsAst) {
-      result.addNode('body', body);
-    } else {
-      result
-        ..addToken('leftBracket', leftBracket)
-        ..addNodeList('members', members)
-        ..addToken('rightBracket', rightBracket);
-    }
-    return result;
-  }
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('augmentKeyword', augmentKeyword)
+    ..addToken('baseKeyword', baseKeyword)
+    ..addToken('mixinKeyword', mixinKeyword)
+    ..addToken('name', name)
+    ..addNode('typeParameters', typeParameters)
+    ..addNode('onClause', onClause)
+    ..addNode('implementsClause', implementsClause)
+    ..addNode('body', body);
 
   @generated
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitMixinDeclaration(this);
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     typeParameters?.accept(visitor);
     onClause?.accept(visitor);
     implementsClause?.accept(visitor);
-    if (useDeclaringConstructorsAst) {
-      body.accept(visitor);
-    } else {
-      members.accept(visitor);
-    }
+    body.accept(visitor);
   }
 
-  @DoNotGenerate(reason: 'Support for useDeclaringConstructorsAst')
+  @generated
   @override
   AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
     if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
@@ -17142,15 +16691,8 @@
         return implementsClause;
       }
     }
-    if (useDeclaringConstructorsAst) {
-      if (body._containsOffset(rangeOffset, rangeEnd)) {
-        return body;
-      }
-    } else {
-      if (members._elementContainingRange(rangeOffset, rangeEnd)
-          case var result?) {
-        return result;
-      }
+    if (body._containsOffset(rangeOffset, rangeEnd)) {
+      return body;
     }
     return null;
   }
@@ -17236,25 +16778,24 @@
 
 /// A node that declares a single name within the scope of a compilation unit.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
+@Deprecated('Use specific subclasses and properties')
 abstract final class NamedCompilationUnitMember
     implements CompilationUnitMember {
   /// The name of the member being declared.
+  @Deprecated('Use name or namePart properties of concrete subclasses')
   Token get name;
 }
 
+@Deprecated('Use specific subclasses and properties')
 sealed class NamedCompilationUnitMemberImpl extends CompilationUnitMemberImpl
     implements NamedCompilationUnitMember {
-  @override
-  final Token name;
-
-  /// Initializes a newly created compilation unit member with the given [name].
+  /// Initializes a newly created compilation unit member.
   ///
   /// Either or both of the [comment] and [metadata] can be `null` if the member
   /// doesn't have the corresponding attribute.
   NamedCompilationUnitMemberImpl({
     required super.comment,
     required super.metadata,
-    required this.name,
   });
 }
 
@@ -17605,7 +17146,6 @@
 
 /// The type name with optional type parameters.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 abstract final class NameWithTypeParameters implements ClassNamePart {}
 
 @GenerateNodeImpl(
@@ -20037,9 +19577,127 @@
   }
 }
 
+/// The body of a primary constructor.
+@AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
+// TODO(scheglov): This should not be a `Declaration`.
+abstract final class PrimaryConstructorBody implements ClassMember {
+  /// The body of the constructor.
+  FunctionBody get body;
+
+  /// The token for the separator before [initializers], or `null` if there
+  /// are no initializers.
+  Token? get colon;
+
+  /// The initializers associated with the constructor.
+  NodeList<ConstructorInitializer> get initializers;
+
+  /// The token for the `this` keyword.
+  Token get thisKeyword;
+}
+
+@GenerateNodeImpl(
+  childEntitiesOrder: [
+    GenerateNodeProperty('thisKeyword'),
+    GenerateNodeProperty('colon'),
+    GenerateNodeProperty('initializers'),
+    GenerateNodeProperty('body'),
+  ],
+)
+final class PrimaryConstructorBodyImpl extends ClassMemberImpl
+    implements PrimaryConstructorBody {
+  @generated
+  @override
+  final Token thisKeyword;
+
+  @generated
+  @override
+  final Token? colon;
+
+  @generated
+  @override
+  final NodeListImpl<ConstructorInitializerImpl> initializers =
+      NodeListImpl._();
+
+  @generated
+  FunctionBodyImpl _body;
+
+  @generated
+  PrimaryConstructorBodyImpl({
+    required super.comment,
+    required super.metadata,
+    required this.thisKeyword,
+    required this.colon,
+    required List<ConstructorInitializerImpl> initializers,
+    required FunctionBodyImpl body,
+  }) : _body = body {
+    this.initializers._initialize(this, initializers);
+    _becomeParentOf(body);
+  }
+
+  @generated
+  @override
+  FunctionBodyImpl get body => _body;
+
+  @generated
+  set body(FunctionBodyImpl body) {
+    _body = _becomeParentOf(body);
+  }
+
+  @generated
+  @override
+  Token get endToken {
+    return body.endToken;
+  }
+
+  @generated
+  @override
+  Token get firstTokenAfterCommentAndMetadata {
+    return thisKeyword;
+  }
+
+  @generated
+  @override
+  ChildEntities get _childEntities => super._childEntities
+    ..addToken('thisKeyword', thisKeyword)
+    ..addToken('colon', colon)
+    ..addNodeList('initializers', initializers)
+    ..addNode('body', body);
+
+  @generated
+  @override
+  E? accept<E>(AstVisitor<E> visitor) =>
+      visitor.visitPrimaryConstructorBody(this);
+
+  @override
+  dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+
+  @generated
+  @override
+  void visitChildren(AstVisitor visitor) {
+    super.visitChildren(visitor);
+    initializers.accept(visitor);
+    body.accept(visitor);
+  }
+
+  @generated
+  @override
+  AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
+    if (super._childContainingRange(rangeOffset, rangeEnd) case var result?) {
+      return result;
+    }
+    if (initializers._elementContainingRange(rangeOffset, rangeEnd)
+        case var result?) {
+      return result;
+    }
+    if (body._containsOffset(rangeOffset, rangeEnd)) {
+      return body;
+    }
+    return null;
+  }
+}
+
 /// The declaration of a primary constructor.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 abstract final class PrimaryConstructorDeclaration implements ClassNamePart {
   /// The token for the `const` keyword, or `null` if the primary constructor
   /// isn't a const constructor.
@@ -20048,6 +19706,11 @@
   /// The name of the primary constructor.
   PrimaryConstructorName? get constructorName;
 
+  /// The fragment declared by this declaration.
+  ///
+  /// Returns `null` if the AST structure hasn't been resolved.
+  ConstructorFragment? get declaredFragment;
+
   /// The formal parameters of the constructor, including declaring.
   FormalParameterList get formalParameters;
 }
@@ -20080,6 +19743,9 @@
   @generated
   FormalParameterListImpl _formalParameters;
 
+  @override
+  ConstructorFragmentImpl? declaredFragment;
+
   @generated
   PrimaryConstructorDeclarationImpl({
     required this.constKeyword,
@@ -20184,7 +19850,6 @@
 
 /// The name of a primary constructor.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-@experimental
 abstract final class PrimaryConstructorName implements AstNode {
   /// The name of the primary constructor, can be `new`.
   Token get name;
@@ -21356,6 +21021,7 @@
 
 /// The name of the primary constructor of an extension type.
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
+@Deprecated('Use PrimaryConstructorDeclaration instead')
 abstract final class RepresentationConstructorName implements AstNode {
   /// The name of the primary constructor.
   Token get name;
@@ -21370,6 +21036,7 @@
     GenerateNodeProperty('name'),
   ],
 )
+@Deprecated('Use PrimaryConstructorDeclaration instead')
 final class RepresentationConstructorNameImpl extends AstNodeImpl
     implements RepresentationConstructorName {
   @generated
@@ -21424,6 +21091,7 @@
 ///    <representationDeclaration> ::=
 ///        ('.' <identifierOrNew>)? '(' <metadata> <type> <identifier> ')'
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
+@Deprecated('Use PrimaryConstructorDeclaration instead')
 abstract final class RepresentationDeclaration implements AstNode {
   /// The fragment of the primary constructor contained in this declaration.
   ConstructorFragment? get constructorFragment;
@@ -21461,6 +21129,7 @@
     GenerateNodeProperty('rightParenthesis'),
   ],
 )
+@Deprecated('Use PrimaryConstructorDeclaration instead')
 final class RepresentationDeclarationImpl extends AstNodeImpl
     implements RepresentationDeclaration {
   @generated
@@ -21581,16 +21250,6 @@
   }
 }
 
-/// Stub of [RepresentationDeclarationImpl], used to pass to the
-/// [ExtensionTypeDeclarationImpl] constructor, but it never returned through
-/// the API.
-// TODO(scheglov): Remove together with [useDeclaringConstructorsAst].
-final class RepresentationDeclarationImplStub
-    implements RepresentationDeclarationImpl {
-  @override
-  noSuchMethod(invocation) => super.noSuchMethod(invocation);
-}
-
 /// A rest pattern element.
 ///
 ///    restPatternElement ::= '...' [DartPattern]?
@@ -24835,10 +24494,17 @@
 ///      | [FunctionTypeAlias]
 ///      | [GenericTypeAlias]
 @AnalyzerPublicApi(message: 'exported by lib/dart/ast/ast.dart')
-abstract final class TypeAlias implements NamedCompilationUnitMember {
+abstract final class TypeAlias
+    implements
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMember {
   /// The `augment` keyword, or `null` if the keyword was absent.
   Token? get augmentKeyword;
 
+  /// The name of the type alias.
+  @override
+  Token get name;
+
   /// The semicolon terminating the declaration.
   Token get semicolon;
 
@@ -24846,7 +24512,10 @@
   Token get typedefKeyword;
 }
 
-sealed class TypeAliasImpl extends NamedCompilationUnitMemberImpl
+sealed class TypeAliasImpl
+    extends
+        // ignore: deprecated_member_use_from_same_package
+        NamedCompilationUnitMemberImpl
     implements TypeAlias {
   @override
   final Token? augmentKeyword;
@@ -24855,6 +24524,9 @@
   final Token typedefKeyword;
 
   @override
+  Token name;
+
+  @override
   final Token semicolon;
 
   /// Initializes a newly created type alias.
@@ -24866,7 +24538,7 @@
     required super.metadata,
     required this.augmentKeyword,
     required this.typedefKeyword,
-    required super.name,
+    required this.name,
     required this.semicolon,
   });
 
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.g.dart b/pkg/analyzer/lib/src/dart/ast/ast.g.dart
index fa8d262..6c54bab 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.g.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.g.dart
@@ -43,7 +43,6 @@
 
   R? visitBlock(Block node);
 
-  @experimental
   R? visitBlockClassBody(BlockClassBody node);
 
   R? visitBlockFunctionBody(BlockFunctionBody node);
@@ -110,14 +109,12 @@
 
   R? visitDoubleLiteral(DoubleLiteral node);
 
-  @experimental
   R? visitEmptyClassBody(EmptyClassBody node);
 
   R? visitEmptyFunctionBody(EmptyFunctionBody node);
 
   R? visitEmptyStatement(EmptyStatement node);
 
-  @experimental
   R? visitEnumBody(EnumBody node);
 
   R? visitEnumConstantArguments(EnumConstantArguments node);
@@ -244,7 +241,6 @@
 
   R? visitNamedType(NamedType node);
 
-  @experimental
   R? visitNameWithTypeParameters(NameWithTypeParameters node);
 
   R? visitNativeClause(NativeClause node);
@@ -287,10 +283,10 @@
 
   R? visitPrefixExpression(PrefixExpression node);
 
-  @experimental
+  R? visitPrimaryConstructorBody(PrimaryConstructorBody node);
+
   R? visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node);
 
-  @experimental
   R? visitPrimaryConstructorName(PrimaryConstructorName node);
 
   R? visitPropertyAccess(PropertyAccess node);
@@ -315,8 +311,10 @@
 
   R? visitRelationalPattern(RelationalPattern node);
 
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationConstructorName(RepresentationConstructorName node);
 
+  // ignore: deprecated_member_use_from_same_package
   R? visitRepresentationDeclaration(RepresentationDeclaration node);
 
   R? visitRestPatternElement(RestPatternElement node);
diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
index 9dd3917..0ec6802 100644
--- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart
+++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
@@ -166,7 +166,7 @@
       }
     } else if (parent is ConstructorDeclaration) {
       // Map a constructor declarations to its associated constructor element.
-      var returnType = parent.returnType;
+      var returnType = parent.typeName;
       if (identical(returnType, node)) {
         var name = parent.name;
         if (name != null) {
@@ -257,6 +257,11 @@
   }
 
   @override
+  Element? visitNameWithTypeParameters(NameWithTypeParameters node) {
+    return node.parent!.accept(this);
+  }
+
+  @override
   Element? visitPartOfDirective(PartOfDirective node) {
     return node.libraryName?.element;
   }
@@ -292,16 +297,21 @@
   }
 
   @override
-  Element? visitRepresentationConstructorName(
-    RepresentationConstructorName node,
+  Element? visitPrimaryConstructorDeclaration(
+    PrimaryConstructorDeclaration node,
   ) {
-    var representation = node.parent as RepresentationDeclaration;
-    return representation.constructorFragment?.element;
+    if (node.constructorName != null) {
+      return node.declaredFragment?.element;
+    }
+    if (node.parent case ExtensionTypeDeclaration extensionType) {
+      return extensionType.declaredFragment?.element;
+    }
+    return null;
   }
 
   @override
-  Element? visitRepresentationDeclaration(RepresentationDeclaration node) {
-    return node.fieldFragment?.element;
+  Element? visitPrimaryConstructorName(PrimaryConstructorName node) {
+    return node.parent!.accept(this);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/extensions.dart b/pkg/analyzer/lib/src/dart/ast/extensions.dart
index 897b437..26d085a 100644
--- a/pkg/analyzer/lib/src/dart/ast/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/ast/extensions.dart
@@ -99,10 +99,9 @@
   /// The offset and length to use as an error range for this constructor
   /// declaration, accounting for named and unnamed constructors.
   SourceRange get errorRange {
-    var name = this.name;
-    var offset = returnType.offset;
-    int length = (name != null ? name.end : returnType.end) - offset;
-    return SourceRange(offset, length);
+    var startEntity = typeName ?? (newKeyword ?? factoryKeyword)!;
+    var endEntity = name ?? startEntity;
+    return SourceRange(startEntity.offset, endEntity.end - startEntity.offset);
   }
 
   bool get isNonRedirectingGenerative {
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 c66a46d..7c8f199 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -105,7 +105,7 @@
 
   @override
   void visitBlockClassBody(BlockClassBody node) {
-    sink.write('{');
+    sink.write(' {');
     _visitNodeList(node.members, separator: ' ');
     sink.write('}');
   }
@@ -187,14 +187,11 @@
     _visitToken(node.finalKeyword, suffix: ' ');
     _visitToken(node.mixinKeyword, suffix: ' ');
     sink.write('class ');
-    _visitToken(node.name);
-    _visitNode(node.typeParameters);
+    _visitNode(node.namePart);
     _visitNode(node.extendsClause, prefix: ' ');
     _visitNode(node.withClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
-    sink.write(' {');
-    _visitNodeList(node.members, separator: ' ');
-    sink.write('}');
+    _visitNode(node.body);
   }
 
   @override
@@ -268,8 +265,13 @@
     _visitToken(node.externalKeyword, suffix: ' ');
     _visitToken(node.constKeyword, suffix: ' ');
     _visitToken(node.factoryKeyword, suffix: ' ');
-    _visitNode(node.returnType);
-    _visitToken(node.name, prefix: '.');
+    _visitToken(node.newKeyword, suffix: ' ');
+    if (node.typeName != null) {
+      _visitNode(node.typeName);
+      _visitToken(node.name, prefix: '.');
+    } else {
+      _visitToken(node.name);
+    }
     _visitNode(node.parameters);
     _visitNodeList(node.initializers, prefix: ' : ', separator: ', ');
     _visitNode(node.redirectedConstructor, prefix: ' = ');
@@ -422,15 +424,10 @@
   void visitEnumDeclaration(EnumDeclaration node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     sink.write('enum ');
-    _visitToken(node.name);
-    _visitNode(node.typeParameters);
+    _visitNode(node.namePart);
     _visitNode(node.withClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
-    sink.write(' {');
-    _visitNodeList(node.constants, separator: ', ');
-    _visitToken(node.semicolon);
-    _visitNodeList(node.members, prefix: ' ', separator: ' ');
-    sink.write('}');
+    _visitNode(node.body);
   }
 
   @override
@@ -480,11 +477,8 @@
     _visitToken(node.typeKeyword, suffix: ' ');
     _visitToken(node.name);
     _visitNode(node.typeParameters);
-    sink.write(' ');
-    _visitNode(node.onClause, suffix: ' ');
-    _visitToken(node.leftBracket);
-    _visitNodeList(node.members, separator: ' ');
-    _visitToken(node.rightBracket);
+    _visitNode(node.onClause, prefix: ' ');
+    _visitNode(node.body);
   }
 
   @override
@@ -506,14 +500,9 @@
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.extensionKeyword, suffix: ' ');
     _visitToken(node.typeKeyword, suffix: ' ');
-    _visitToken(node.constKeyword, suffix: ' ');
-    _visitToken(node.name);
-    _visitNode(node.typeParameters);
-    _visitNode(node.representation, suffix: ' ');
-    _visitNode(node.implementsClause, suffix: ' ');
-    _visitToken(node.leftBracket);
-    _visitNodeList(node.members, separator: ' ');
-    _visitToken(node.rightBracket);
+    _visitNode(node.primaryConstructor);
+    _visitNode(node.implementsClause, prefix: ' ');
+    _visitNode(node.body);
   }
 
   @override
@@ -689,6 +678,7 @@
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.requiredKeyword, suffix: ' ');
     _visitToken(node.covariantKeyword, suffix: ' ');
+    _visitToken(node.keyword, suffix: ' ');
     _visitNode(node.returnType, suffix: ' ');
     _visitToken(node.name);
     _visitNode(node.typeParameters);
@@ -956,9 +946,7 @@
     _visitNode(node.typeParameters);
     _visitNode(node.onClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
-    sink.write(' {');
-    _visitNodeList(node.members, separator: ' ');
-    sink.write('}');
+    _visitNode(node.body);
   }
 
   @override
@@ -1121,9 +1109,20 @@
   }
 
   @override
+  void visitPrimaryConstructorBody(PrimaryConstructorBody node) {
+    _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
+    _visitToken(node.thisKeyword);
+    if (node.initializers.isNotEmpty) {
+      _visitToken(node.colon, prefix: ' ', suffix: ' ');
+      _visitNodeList(node.initializers, separator: ', ');
+    }
+    _visitFunctionBody(node.body);
+  }
+
+  @override
   void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
-    _visitToken(node.constKeyword);
-    _visitToken(node.typeName, prefix: ' ');
+    _visitToken(node.constKeyword, suffix: ' ');
+    _visitToken(node.typeName);
     _visitNode(node.typeParameters);
     _visitNode(node.constructorName);
     _visitNode(node.formalParameters);
@@ -1229,12 +1228,14 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   void visitRepresentationConstructorName(RepresentationConstructorName node) {
     _visitToken(node.period);
     _visitToken(node.name);
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   void visitRepresentationDeclaration(RepresentationDeclaration node) {
     _visitNode(node.constructorName);
     _visitToken(node.leftParenthesis);
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 6ba3b70..7245d39 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -66,7 +66,8 @@
   void visitClassDeclaration(ClassDeclaration node) {
     // Names do not have AstNodes but offsets at the end should be treated as
     // part of the declaration (not parameter list).
-    if (_startOffset == _endOffset && _startOffset == node.name.end) {
+    if (_startOffset == _endOffset &&
+        _startOffset == node.namePart.typeName.end) {
       _foundNode = node;
       return;
     }
@@ -78,10 +79,12 @@
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     // Names do not have AstNodes but offsets at the end should be treated as
     // part of the declaration (not parameter list).
-    if (_startOffset == _endOffset &&
-        _startOffset == (node.name ?? node.returnType).end) {
-      _foundNode = node;
-      return;
+    if (_startOffset == _endOffset) {
+      var end = node.name?.end ?? node.typeName?.end;
+      if (end != null && _startOffset == end) {
+        _foundNode = node;
+        return;
+      }
     }
 
     super.visitConstructorDeclaration(node);
@@ -353,10 +356,7 @@
 
   @override
   bool visitClassDeclaration(covariant ClassDeclarationImpl node) {
-    if (identical(node.typeParameters, _oldNode)) {
-      node.typeParameters = _newNode as TypeParameterListImpl;
-      return true;
-    } else if (identical(node.extendsClause, _oldNode)) {
+    if (identical(node.extendsClause, _oldNode)) {
       node.extendsClause = _newNode as ExtendsClauseImpl;
       return true;
     } else if (identical(node.withClause, _oldNode)) {
@@ -365,8 +365,6 @@
     } else if (identical(node.implementsClause, _oldNode)) {
       node.implementsClause = _newNode as ImplementsClauseImpl;
       return true;
-    } else if (_replaceInList(node.members)) {
-      return true;
     }
     return visitAnnotatedNode(node);
   }
@@ -460,10 +458,7 @@
 
   @override
   bool visitConstructorDeclaration(covariant ConstructorDeclarationImpl node) {
-    if (identical(node.returnType, _oldNode)) {
-      node.returnType = _newNode as IdentifierImpl;
-      return true;
-    } else if (identical(node.parameters, _oldNode)) {
+    if (identical(node.parameters, _oldNode)) {
       node.parameters = _newNode as FormalParameterListImpl;
       return true;
     } else if (identical(node.redirectedConstructor, _oldNode)) {
@@ -606,6 +601,16 @@
   bool visitEmptyStatement(EmptyStatement node) => visitNode(node);
 
   @override
+  bool? visitEnumBody(covariant EnumBodyImpl node) {
+    if (_replaceInList(node.constants)) {
+      return true;
+    } else if (_replaceInList(node.members)) {
+      return true;
+    }
+    return super.visitEnumBody(node);
+  }
+
+  @override
   bool visitEnumConstantArguments(EnumConstantArguments node) {
     throw UnimplementedError();
   }
@@ -619,19 +624,12 @@
 
   @override
   bool visitEnumDeclaration(covariant EnumDeclarationImpl node) {
-    if (identical(node.typeParameters, _oldNode)) {
-      node.typeParameters = _newNode as TypeParameterListImpl;
-      return true;
-    } else if (identical(node.withClause, _oldNode)) {
+    if (identical(node.withClause, _oldNode)) {
       node.withClause = _newNode as WithClauseImpl;
       return true;
     } else if (identical(node.implementsClause, _oldNode)) {
       node.implementsClause = _newNode as ImplementsClauseImpl;
       return true;
-    } else if (_replaceInList(node.constants)) {
-      return true;
-    } else if (_replaceInList(node.members)) {
-      return true;
     }
     return visitAnnotatedNode(node);
   }
@@ -677,8 +675,6 @@
     } else if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterListImpl;
       return true;
-    } else if (_replaceInList(node.members)) {
-      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 b52cfd6..06efa07 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -29,8 +29,9 @@
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/error/listener.dart';
 import 'package:analyzer/src/generated/exhaustiveness.dart';
 import 'package:analyzer/src/utilities/extensions/ast.dart';
 
@@ -109,19 +110,13 @@
     if (element is ConstructorElement) {
       // should be 'const' constructor
       if (!element.isConst) {
-        _diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.nonConstantAnnotationConstructor,
-        );
+        _diagnosticReporter.atNode(node, diag.nonConstantAnnotationConstructor);
         return;
       }
       // should have arguments
       var argumentList = node.arguments;
       if (argumentList == null) {
-        _diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.noAnnotationConstructorArguments,
-        );
+        _diagnosticReporter.atNode(node, diag.noAnnotationConstructorArguments);
         return;
       }
       // arguments should be constants
@@ -138,7 +133,7 @@
 
     var value = _evaluateAndReportError(
       expression,
-      CompileTimeErrorCode.constantPatternWithNonConstantExpression,
+      diag.constantPatternWithNonConstantExpression,
     );
     if (value is DartObjectImpl) {
       if (_currentLibrary.featureSet.isEnabled(Feature.patterns)) {
@@ -151,7 +146,7 @@
             if (!_canBeEqual(constantType, matchedValueType)) {
               _diagnosticReporter.atNode(
                 node,
-                WarningCode.constantPatternNeverMatchesValueType,
+                diag.constantPatternNeverMatchesValueType,
                 arguments: [matchedValueType, constantType],
               );
               return;
@@ -173,8 +168,9 @@
       var element = node.declaredFragment!.element;
       if (!element.isCycleFree && !element.isFactory) {
         _diagnosticReporter.atNode(
-          node.returnType,
-          CompileTimeErrorCode.recursiveConstantConstructor,
+          // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+          node.typeName!,
+          diag.recursiveConstantConstructor,
         );
       }
 
@@ -183,7 +179,7 @@
         _validateFieldInitializers(
           node.parent.classMembers,
           constKeyword,
-          isEnumDeclaration: node.parent is EnumDeclaration,
+          isEnumDeclaration: node.parent?.parent is EnumDeclaration,
         );
       }
     }
@@ -197,7 +193,7 @@
     if (node.inConstantContext || node.inConstantExpression) {
       _checkForConstWithTypeParameters(
         node.constructorName.type,
-        CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
+        diag.constWithTypeParametersConstructorTearoff,
       );
     }
   }
@@ -249,7 +245,7 @@
       for (var typeArgument in typeArguments.arguments) {
         _checkForConstWithTypeParameters(
           typeArgument,
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
+          diag.constWithTypeParametersFunctionTearoff,
         );
       }
     }
@@ -262,10 +258,7 @@
     var parent = node.parent;
     if ((parent is AsExpression || parent is IsExpression) &&
         (parent as Expression).inConstantContext) {
-      _checkForConstWithTypeParameters(
-        node,
-        CompileTimeErrorCode.constWithTypeParameters,
-      );
+      _checkForConstWithTypeParameters(node, diag.constWithTypeParameters);
     }
   }
 
@@ -275,10 +268,7 @@
   ) {
     if (node.isConst) {
       var namedType = node.constructorName.type;
-      _checkForConstWithTypeParameters(
-        namedType,
-        CompileTimeErrorCode.constWithTypeParameters,
-      );
+      _checkForConstWithTypeParameters(namedType, diag.constWithTypeParameters);
 
       var constructor = node.constructorName.element;
       if (constructor != null) {
@@ -297,7 +287,7 @@
       var elementType = nodeType.typeArguments[0];
       var verifier = _ConstLiteralVerifier(
         this,
-        diagnosticCode: CompileTimeErrorCode.nonConstantListElement,
+        diagnosticCode: diag.nonConstantListElement,
         listElementType: elementType,
       );
       for (var element in node.elements) {
@@ -331,7 +321,7 @@
         var key = element.key;
         var keyValue = _evaluateAndReportError(
           key,
-          CompileTimeErrorCode.nonConstantMapPatternKey,
+          diag.nonConstantMapPatternKey,
         );
         if (keyValue is DartObjectImpl) {
           _mapPatternKeyValues?[key] = keyValue;
@@ -368,10 +358,7 @@
 
     if (node.isConst) {
       for (var field in node.fields) {
-        _evaluateAndReportError(
-          field,
-          CompileTimeErrorCode.nonConstantRecordField,
-        );
+        _evaluateAndReportError(field, diag.nonConstantRecordField);
       }
     }
   }
@@ -382,7 +369,7 @@
 
     _evaluateAndReportError(
       node.operand,
-      CompileTimeErrorCode.nonConstantRelationalPatternExpression,
+      diag.nonConstantRelationalPatternExpression,
     );
   }
 
@@ -396,7 +383,7 @@
         var config = _SetVerifierConfig(elementType: elementType);
         var verifier = _ConstLiteralVerifier(
           this,
-          diagnosticCode: CompileTimeErrorCode.nonConstantSetElement,
+          diagnosticCode: diag.nonConstantSetElement,
           setConfig: config,
         );
         for (CollectionElement element in node.elements) {
@@ -420,7 +407,7 @@
         var config = _MapVerifierConfig(keyType: keyType, valueType: valueType);
         var verifier = _ConstLiteralVerifier(
           this,
-          diagnosticCode: CompileTimeErrorCode.nonConstantMapElement,
+          diagnosticCode: diag.nonConstantMapElement,
           mapConfig: config,
         );
         for (var entry in node.elements) {
@@ -509,10 +496,7 @@
       }
       if (result is InvalidConstant) {
         if (node.isConst) {
-          _reportError(
-            result,
-            CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          );
+          _reportError(result, diag.constInitializedWithNonConstantValue);
         } else {
           _reportError(result, null);
         }
@@ -559,7 +543,7 @@
   ///
   /// A generic function type is allowed to reference its own type parameter(s).
   ///
-  /// See [CompileTimeErrorCode.constWithTypeParameters].
+  /// See [diag.constWithTypeParameters].
   void _checkForConstWithTypeParameters(
     TypeAnnotation type,
     DiagnosticCode diagnosticCode, {
@@ -672,145 +656,81 @@
     //
     // These error codes are more specific than the [defaultErrorCode] so they
     // will overwrite and replace the default when we report the error.
-    DiagnosticCode diagnosticCode = error.diagnosticCode;
-    if (identical(
+    DiagnosticCode diagnosticCode = error.locatableDiagnostic.code;
+    if (identical(diagnosticCode, diag.constEvalExtensionMethod) ||
+        identical(diagnosticCode, diag.constEvalExtensionTypeMethod) ||
+        identical(diagnosticCode, diag.constEvalForElement) ||
+        identical(diagnosticCode, diag.constEvalMethodInvocation) ||
+        identical(diagnosticCode, diag.constEvalPrimitiveEquality) ||
+        identical(diagnosticCode, diag.constEvalPropertyAccess) ||
+        identical(diagnosticCode, diag.constEvalThrowsException) ||
+        identical(diagnosticCode, diag.constEvalThrowsIdbze) ||
+        identical(diagnosticCode, diag.constEvalTypeBoolNumString) ||
+        identical(diagnosticCode, diag.constEvalTypeBool) ||
+        identical(diagnosticCode, diag.constEvalTypeBoolInt) ||
+        identical(diagnosticCode, diag.constEvalTypeInt) ||
+        identical(diagnosticCode, diag.constEvalTypeNum) ||
+        identical(diagnosticCode, diag.constEvalTypeNumString) ||
+        identical(diagnosticCode, diag.constEvalTypeString) ||
+        identical(diagnosticCode, diag.recursiveCompileTimeConstant) ||
+        identical(diagnosticCode, diag.constConstructorFieldTypeMismatch) ||
+        identical(diagnosticCode, diag.constConstructorParamTypeMismatch) ||
+        identical(diagnosticCode, diag.constTypeParameter) ||
+        identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalExtensionMethod,
+          diag.constWithTypeParametersFunctionTearoff,
+        ) ||
+        identical(diagnosticCode, diag.constSpreadExpectedListOrSet) ||
+        identical(diagnosticCode, diag.constSpreadExpectedMap) ||
+        identical(diagnosticCode, diag.expressionInMap) ||
+        identical(diagnosticCode, diag.variableTypeMismatch) ||
+        identical(diagnosticCode, diag.nonBoolCondition) ||
+        identical(
+          diagnosticCode,
+          diag.nonConstantDefaultValueFromDeferredLibrary,
+        ) ||
+        identical(diagnosticCode, diag.nonConstantMapKeyFromDeferredLibrary) ||
+        identical(
+          diagnosticCode,
+          diag.nonConstantMapValueFromDeferredLibrary,
+        ) ||
+        identical(diagnosticCode, diag.setElementFromDeferredLibrary) ||
+        identical(diagnosticCode, diag.spreadExpressionFromDeferredLibrary) ||
+        identical(
+          diagnosticCode,
+          diag.nonConstantCaseExpressionFromDeferredLibrary,
         ) ||
         identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalExtensionTypeMethod,
+          diag.invalidAnnotationConstantValueFromDeferredLibrary,
         ) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalForElement) ||
+        identical(diagnosticCode, diag.ifElementConditionFromDeferredLibrary) ||
         identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalMethodInvocation,
+          diag.constInitializedWithNonConstantValueFromDeferredLibrary,
         ) ||
         identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalPrimitiveEquality,
+          diag.nonConstantListElementFromDeferredLibrary,
         ) ||
         identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalPropertyAccess,
+          diag.nonConstantRecordFieldFromDeferredLibrary,
         ) ||
         identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constInitializedWithNonConstantValueFromDeferredLibrary,
         ) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalThrowsIdbze) ||
+        identical(diagnosticCode, diag.patternConstantFromDeferredLibrary) ||
+        identical(diagnosticCode, diag.wrongNumberOfTypeArgumentsFunction) ||
         identical(
           diagnosticCode,
-          CompileTimeErrorCode.constEvalTypeBoolNumString,
-        ) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalTypeBool) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalTypeBoolInt) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalTypeInt) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalTypeNum) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.constEvalTypeNumString,
-        ) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constEvalTypeString) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.recursiveCompileTimeConstant,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.constConstructorFieldTypeMismatch,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.constConstructorParamTypeMismatch,
-        ) ||
-        identical(diagnosticCode, CompileTimeErrorCode.constTypeParameter) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.constSpreadExpectedListOrSet,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.constSpreadExpectedMap,
-        ) ||
-        identical(diagnosticCode, CompileTimeErrorCode.expressionInMap) ||
-        identical(diagnosticCode, CompileTimeErrorCode.variableTypeMismatch) ||
-        identical(diagnosticCode, CompileTimeErrorCode.nonBoolCondition) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.nonConstantDefaultValueFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.setElementFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.spreadExpressionFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.nonConstantCaseExpressionFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode
-              .invalidAnnotationConstantValueFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.ifElementConditionFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.nonConstantRecordFieldFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.patternConstantFromDeferredLibrary,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction,
-        ) ||
-        identical(
-          diagnosticCode,
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction,
+          diag.wrongNumberOfTypeArgumentsAnonymousFunction,
         )) {
-      _diagnosticReporter.reportError(
-        Diagnostic.tmp(
-          source: _diagnosticReporter.source,
+      _diagnosticReporter.report(
+        error.locatableDiagnostic.atOffset(
           offset: error.offset,
           length: error.length,
-          diagnosticCode: error.diagnosticCode,
-          arguments: error.arguments,
-          contextMessages: error.contextMessages,
         ),
       );
     } else if (defaultDiagnosticCode != null) {
@@ -833,10 +753,7 @@
     if (notPotentiallyConstants.isEmpty) return;
 
     for (var notConst in notPotentiallyConstants) {
-      _diagnosticReporter.atNode(
-        notConst,
-        CompileTimeErrorCode.invalidConstant,
-      );
+      _diagnosticReporter.atNode(notConst, diag.invalidConstant);
     }
   }
 
@@ -860,10 +777,7 @@
       Expression realArgument = argument is NamedExpression
           ? argument.expression
           : argument;
-      _evaluateAndReportError(
-        realArgument,
-        CompileTimeErrorCode.constWithNonConstantArgument,
-      );
+      _evaluateAndReportError(realArgument, diag.constWithNonConstantArgument);
     }
   }
 
@@ -911,12 +825,11 @@
     switch (result) {
       case InvalidConstant():
         if (!result.avoidReporting) {
-          _diagnosticReporter.atOffset(
-            offset: result.offset,
-            length: result.length,
-            diagnosticCode: result.diagnosticCode,
-            arguments: result.arguments,
-            contextMessages: result.contextMessages,
+          _diagnosticReporter.report(
+            result.locatableDiagnostic.atOffset(
+              offset: result.offset,
+              length: result.length,
+            ),
           );
         }
       case DartObjectImpl():
@@ -946,7 +859,7 @@
         } else {
           result = _evaluateAndReportError(
             defaultValue,
-            CompileTimeErrorCode.nonConstantDefaultValue,
+            diag.nonConstantDefaultValue,
           );
         }
         var element = parameter.declaredFragment!.element;
@@ -992,8 +905,7 @@
             if (result is! DartObjectImpl) {
               _diagnosticReporter.atToken(
                 constKeyword,
-                CompileTimeErrorCode
-                    .constConstructorWithFieldInitializedByNonConst,
+                diag.constConstructorWithFieldInitializedByNonConst,
                 arguments: [variableDeclaration.name.lexeme],
               );
             }
@@ -1070,10 +982,7 @@
           SwitchExpressionCaseImpl() => caseNode.arrow,
           SwitchPatternCaseImpl() => caseNode.keyword,
         };
-        _diagnosticReporter.atToken(
-          errorToken,
-          WarningCode.unreachableSwitchCase,
-        );
+        _diagnosticReporter.atToken(errorToken, diag.unreachableSwitchCase);
       }
       if (nonExhaustiveness != null) {
         if (reportNonExhaustive) {
@@ -1096,17 +1005,35 @@
               correctionData.add(correctionDataBuffer.parts);
             }
           }
-          var diagnostic = _diagnosticReporter.atToken(
-            switchKeyword,
-            isSwitchExpression
-                ? CompileTimeErrorCode.nonExhaustiveSwitchExpression
-                : CompileTimeErrorCode.nonExhaustiveSwitchStatement,
-            arguments: [
-              scrutineeType,
-              errorBuffer.toString(),
-              correctionTextBuffer.toString(),
-            ],
-          );
+
+          Diagnostic diagnostic;
+          _currentLibrary;
+          if (nonExhaustiveness.valueType.isEnumSubtype &&
+              nonExhaustiveness.valueType.libraryUri != _currentLibrary.uri &&
+              (nonExhaustiveness.valueType.isPrivate ||
+                  nonExhaustiveness.witnesses.every(
+                    (witness) => witness.asWitness.contains('._'),
+                  ))) {
+            diagnostic = _diagnosticReporter.atToken(
+              switchKeyword,
+              isSwitchExpression
+                  ? diag.nonExhaustiveSwitchExpressionPrivate
+                  : diag.nonExhaustiveSwitchStatementPrivate,
+              arguments: [scrutineeType],
+            );
+          } else {
+            diagnostic = _diagnosticReporter.atToken(
+              switchKeyword,
+              isSwitchExpression
+                  ? diag.nonExhaustiveSwitchExpression
+                  : diag.nonExhaustiveSwitchStatement,
+              arguments: [
+                scrutineeType,
+                errorBuffer.toString(),
+                correctionTextBuffer.toString(),
+              ],
+            );
+          }
           if (correctionData.isNotEmpty) {
             MissingPatternPart.byDiagnostic[diagnostic] = correctionData;
           }
@@ -1116,7 +1043,7 @@
           // Default node is unreachable
           _diagnosticReporter.atToken(
             defaultNode.keyword,
-            WarningCode.unreachableSwitchDefault,
+            diag.unreachableSwitchDefault,
           );
         }
       }
@@ -1147,7 +1074,7 @@
     void validateExpression(Expression expression) {
       var expressionValue = _evaluateAndReportError(
         expression,
-        CompileTimeErrorCode.nonConstantCaseExpression,
+        diag.nonConstantCaseExpression,
       );
       if (expressionValue is! DartObjectImpl) {
         return;
@@ -1159,7 +1086,7 @@
         if (!expressionValue.hasPrimitiveEquality(featureSet)) {
           _diagnosticReporter.atNode(
             expression,
-            CompileTimeErrorCode.caseExpressionTypeImplementsEquals,
+            diag.caseExpressionTypeImplementsEquals,
             arguments: [expressionType],
           );
         }
@@ -1232,10 +1159,7 @@
 
       return true;
     } else if (element is ForElement) {
-      verifier._diagnosticReporter.atNode(
-        element,
-        CompileTimeErrorCode.constEvalForElement,
-      );
+      verifier._diagnosticReporter.atNode(element, diag.constEvalForElement);
       return false;
     } else if (element is IfElement) {
       var conditionConstant = verifier._evaluateAndReportError(
@@ -1340,9 +1264,9 @@
     for (var notConst in notPotentiallyConstants) {
       DiagnosticCode errorCode;
       if (listElementType != null) {
-        errorCode = CompileTimeErrorCode.nonConstantListElement;
+        errorCode = diag.nonConstantListElement;
       } else if (mapConfig != null) {
-        errorCode = CompileTimeErrorCode.nonConstantMapElement;
+        errorCode = diag.nonConstantMapElement;
         for (
           AstNode? parent = notConst;
           parent != null;
@@ -1350,15 +1274,15 @@
         ) {
           if (parent is MapLiteralEntry) {
             if (parent.key == notConst) {
-              errorCode = CompileTimeErrorCode.nonConstantMapKey;
+              errorCode = diag.nonConstantMapKey;
             } else {
-              errorCode = CompileTimeErrorCode.nonConstantMapValue;
+              errorCode = diag.nonConstantMapValue;
             }
             break;
           }
         }
       } else if (setConfig != null) {
-        errorCode = CompileTimeErrorCode.nonConstantSetElement;
+        errorCode = diag.nonConstantSetElement;
       } else {
         throw UnimplementedError();
       }
@@ -1380,13 +1304,13 @@
       )) {
         verifier._diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
+          diag.listElementTypeNotAssignableNullability,
           arguments: [value.type, listElementType],
         );
       } else {
         verifier._diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.listElementTypeNotAssignable,
+          diag.listElementTypeNotAssignable,
           arguments: [value.type, listElementType],
         );
       }
@@ -1410,7 +1334,7 @@
       // _addElementsTo methods..
       verifier._diagnosticReporter.atNode(
         element.expression,
-        CompileTimeErrorCode.constSpreadExpectedListOrSet,
+        diag.constSpreadExpectedListOrSet,
       );
       return false;
     }
@@ -1425,7 +1349,7 @@
       if (!listValue.every((e) => e.hasPrimitiveEquality(featureSet))) {
         verifier._diagnosticReporter.atNode(
           element,
-          CompileTimeErrorCode.constSetElementNotPrimitiveEquality,
+          diag.constSetElementNotPrimitiveEquality,
           arguments: [value.type],
         );
         return false;
@@ -1457,11 +1381,11 @@
 
     var keyValue = verifier._evaluateAndReportError(
       keyExpression,
-      CompileTimeErrorCode.nonConstantMapKey,
+      diag.nonConstantMapKey,
     );
     var valueValue = verifier._evaluateAndReportError(
       valueExpression,
-      CompileTimeErrorCode.nonConstantMapValue,
+      diag.nonConstantMapValue,
     );
 
     if (keyValue is DartObjectImpl) {
@@ -1479,13 +1403,13 @@
             )) {
           verifier._diagnosticReporter.atNode(
             keyExpression,
-            CompileTimeErrorCode.mapKeyTypeNotAssignableNullability,
+            diag.mapKeyTypeNotAssignableNullability,
             arguments: [keyType, expectedKeyType],
           );
         } else {
           verifier._diagnosticReporter.atNode(
             keyExpression,
-            CompileTimeErrorCode.mapKeyTypeNotAssignable,
+            diag.mapKeyTypeNotAssignable,
             arguments: [keyType, expectedKeyType],
           );
         }
@@ -1495,7 +1419,7 @@
       if (!keyValue.hasPrimitiveEquality(featureSet)) {
         verifier._diagnosticReporter.atNode(
           keyExpression,
-          CompileTimeErrorCode.constMapKeyNotPrimitiveEquality,
+          diag.constMapKeyNotPrimitiveEquality,
           arguments: [keyType],
         );
       }
@@ -1529,13 +1453,13 @@
             )) {
           verifier._diagnosticReporter.atNode(
             valueExpression,
-            CompileTimeErrorCode.mapValueTypeNotAssignableNullability,
+            diag.mapValueTypeNotAssignableNullability,
             arguments: [valueValue.type, expectedValueType],
           );
         } else {
           verifier._diagnosticReporter.atNode(
             valueExpression,
-            CompileTimeErrorCode.mapValueTypeNotAssignable,
+            diag.mapValueTypeNotAssignable,
             arguments: [valueValue.type, expectedValueType],
           );
         }
@@ -1571,7 +1495,7 @@
     }
     verifier._diagnosticReporter.atNode(
       element.expression,
-      CompileTimeErrorCode.constSpreadExpectedMap,
+      diag.constSpreadExpectedMap,
     );
     return false;
   }
@@ -1588,13 +1512,13 @@
       )) {
         verifier._diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.setElementTypeNotAssignableNullability,
+          diag.setElementTypeNotAssignableNullability,
           arguments: [value.type, config.elementType],
         );
       } else {
         verifier._diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.setElementTypeNotAssignable,
+          diag.setElementTypeNotAssignable,
           arguments: [value.type, config.elementType],
         );
       }
@@ -1605,7 +1529,7 @@
     if (!value.hasPrimitiveEquality(featureSet)) {
       verifier._diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.constSetElementNotPrimitiveEquality,
+        diag.constSetElementNotPrimitiveEquality,
         arguments: [value.type],
       );
       return false;
@@ -1657,14 +1581,17 @@
           var declarationListParent = declarationList.parent;
           if (declarationListParent is FieldDeclaration &&
               !declarationListParent.isStatic) {
-            var container = declarationListParent.parent;
-            if (container is ClassDeclaration) {
-              var enclosingClass = container.declaredFragment!.element;
-              if (enclosingClass is ClassElementImpl) {
-                // A field initializer of a class with at least one generative
-                // const constructor does not constitute a constant context, but
-                // must be a constant expression.
-                return enclosingClass.hasGenerativeConstConstructor;
+            var body = declarationListParent.parent;
+            if (body is BlockClassBody) {
+              var container = body.parent;
+              if (container is ClassDeclaration) {
+                var enclosingClass = container.declaredFragment!.element;
+                if (enclosingClass is ClassElementImpl) {
+                  // A field initializer of a class with at least one generative
+                  // const constructor does not constitute a constant context, but
+                  // must be a constant expression.
+                  return enclosingClass.hasGenerativeConstConstructor;
+                }
               }
             }
           }
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 5b0fa69..74c523b 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -27,8 +27,9 @@
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type_system.dart' show TypeSystemImpl;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/error/listener.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/utilities/extensions/collection.dart';
@@ -133,11 +134,10 @@
               )) {
                 constant.evaluationResult = InvalidConstant.forEntity(
                   entity: constantInitializer,
-                  diagnosticCode: CompileTimeErrorCode.variableTypeMismatch,
-                  arguments: [
-                    dartConstant.type.getDisplayString(),
-                    constant.type.getDisplayString(),
-                  ],
+                  locatableDiagnostic: diag.variableTypeMismatch.withArguments(
+                    valueType: dartConstant.type.getDisplayString(),
+                    variableType: constant.type.getDisplayString(),
+                  ),
                 );
                 return;
               }
@@ -376,8 +376,8 @@
     // where the exception was found.
     if (result.isRuntimeException) {
       var formattedMessage = formatList(
-        result.diagnosticCode.problemMessage,
-        result.arguments,
+        result.locatableDiagnostic.code.problemMessage,
+        result.locatableDiagnostic.arguments,
       );
       var contextMessage = DiagnosticMessageImpl(
         filePath: library.source.fullName,
@@ -389,8 +389,10 @@
       var errorNode = configuration.errorNode(node);
       result = InvalidConstant.forEntity(
         entity: errorNode,
-        diagnosticCode: CompileTimeErrorCode.constEvalThrowsException,
-        contextMessages: [...result.contextMessages, contextMessage],
+        locatableDiagnostic: diag.constEvalThrowsException.withContextMessages([
+          ...result.locatableDiagnostic.contextMessages,
+          contextMessage,
+        ]),
       );
     }
 
@@ -437,11 +439,11 @@
       // description of the cycle.
       diagnosticReporter.atElement2(
         constant,
-        CompileTimeErrorCode.recursiveCompileTimeConstant,
+        diag.recursiveCompileTimeConstant,
       );
       constant.evaluationResult = InvalidConstant.forElement(
         element: constant,
-        diagnosticCode: CompileTimeErrorCode.recursiveCompileTimeConstant,
+        locatableDiagnostic: diag.recursiveCompileTimeConstant,
       );
     } else if (constant is ConstructorElementImpl) {
       // We don't report cycle errors on constructor declarations here since
@@ -595,12 +597,11 @@
   Constant evaluateAndReportInvalidConstant(AstNode node) {
     var result = evaluateConstant(node);
     if (result case InvalidConstant(avoidReporting: false)) {
-      _diagnosticReporter.atOffset(
-        offset: result.offset,
-        length: result.length,
-        diagnosticCode: result.diagnosticCode,
-        arguments: result.arguments,
-        contextMessages: result.contextMessages,
+      _diagnosticReporter.report(
+        result.locatableDiagnostic.atOffset(
+          offset: result.offset,
+          length: result.length,
+        ),
       );
     }
     return result;
@@ -651,12 +652,12 @@
       case ExtensionElement():
         return InvalidConstant.forEntity(
           entity: node,
-          diagnosticCode: CompileTimeErrorCode.constEvalExtensionMethod,
+          locatableDiagnostic: diag.constEvalExtensionMethod,
         );
       case ExtensionTypeElement():
         return InvalidConstant.forEntity(
           entity: node,
-          diagnosticCode: CompileTimeErrorCode.constEvalExtensionTypeMethod,
+          locatableDiagnostic: diag.constEvalExtensionTypeMethod,
         );
     }
 
@@ -673,7 +674,7 @@
         case DartObjectImpl():
           return constant;
         case InvalidConstant():
-          throw EvaluationException(constant.diagnosticCode);
+          throw EvaluationException(constant.locatableDiagnostic);
       }
     }
 
@@ -784,7 +785,7 @@
     if (!conditionConstant.isBool) {
       return InvalidConstant.forEntity(
         entity: condition,
-        diagnosticCode: CompileTimeErrorCode.constEvalTypeBool,
+        locatableDiagnostic: diag.constEvalTypeBool,
       );
     }
     conditionConstant = _dartObjectComputer.applyBooleanConversion(
@@ -827,7 +828,7 @@
     if (constructorFunctionType is! FunctionTypeImpl) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.invalidConstant,
+        locatableDiagnostic: diag.invalidConstant,
       );
     }
     var classType = constructorFunctionType.returnType as InterfaceTypeImpl;
@@ -852,7 +853,7 @@
     if (constructorElement == null) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.invalidConstant,
+        locatableDiagnostic: diag.invalidConstant,
       );
     }
 
@@ -895,7 +896,7 @@
     // problem - the error has already been reported.
     return InvalidConstant.forEntity(
       entity: node,
-      diagnosticCode: CompileTimeErrorCode.invalidConstant,
+      locatableDiagnostic: diag.invalidConstant,
     );
   }
 
@@ -949,8 +950,7 @@
         if (instantiatedTypeArgumentTypes.any(hasTypeParameterReference)) {
           return InvalidConstant.forEntity(
             entity: node,
-            diagnosticCode:
-                CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
+            locatableDiagnostic: diag.constWithTypeParametersFunctionTearoff,
           );
         }
       }
@@ -965,15 +965,12 @@
     for (var typeArgument in typeArgumentList.arguments) {
       var typeArgumentConstant = evaluateConstant(typeArgument);
       switch (typeArgumentConstant) {
-        case InvalidConstant(
-          diagnosticCode: CompileTimeErrorCode.constTypeParameter,
-        ):
+        case InvalidConstant(locatableDiagnostic: diag.constTypeParameter):
           // If there's a type parameter error in the evaluated constant, we
           // convert the message to a more specific function reference error.
           return InvalidConstant.forEntity(
             entity: typeArgument,
-            diagnosticCode:
-                CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
+            locatableDiagnostic: diag.constWithTypeParametersFunctionTearoff,
           );
         case InvalidConstant():
           return typeArgumentConstant;
@@ -982,7 +979,7 @@
           if (typeArgumentType == null) {
             return InvalidConstant.forEntity(
               entity: typeArgument,
-              diagnosticCode: CompileTimeErrorCode.invalidConstant,
+              locatableDiagnostic: diag.invalidConstant,
             );
           }
           // TODO(srawlins): Test type alias types (`typedef i = int`) used as
@@ -1024,7 +1021,7 @@
       // TODO(kallentu): Use a better error code for this.
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.invalidConstant,
+        locatableDiagnostic: diag.invalidConstant,
       );
     }
 
@@ -1064,7 +1061,7 @@
     if (!result.isBoolNumStringOrNull) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.constEvalTypeBoolNumString,
+        locatableDiagnostic: diag.constEvalTypeBoolNumString,
       );
     }
     return _dartObjectComputer.performToString(node, result);
@@ -1097,7 +1094,7 @@
     if (!node.isConst) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.missingConstInListLiteral,
+        locatableDiagnostic: diag.missingConstInListLiteral,
       );
     }
     var nodeType = node.staticType;
@@ -1147,7 +1144,7 @@
         hasTypeParameterReference(type)) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.constTypeParameter,
+        locatableDiagnostic: diag.constTypeParameter,
       );
     } else if (node.isDeferred) {
       return _getDeferredLibraryError(node, node.name);
@@ -1229,12 +1226,12 @@
       case ExtensionElement():
         return InvalidConstant.forEntity(
           entity: node,
-          diagnosticCode: CompileTimeErrorCode.constEvalExtensionMethod,
+          locatableDiagnostic: diag.constEvalExtensionMethod,
         );
       case ExtensionTypeElement():
         return InvalidConstant.forEntity(
           entity: node,
-          diagnosticCode: CompileTimeErrorCode.constEvalExtensionTypeMethod,
+          locatableDiagnostic: diag.constEvalExtensionTypeMethod,
         );
     }
 
@@ -1354,7 +1351,7 @@
       if (!node.isConst) {
         return InvalidConstant.forEntity(
           entity: node,
-          diagnosticCode: CompileTimeErrorCode.missingConstInMapLiteral,
+          locatableDiagnostic: diag.missingConstInMapLiteral,
         );
       }
       var keyType = _typeProvider.dynamicType;
@@ -1382,7 +1379,7 @@
       if (!node.isConst) {
         return InvalidConstant.forEntity(
           entity: node,
-          diagnosticCode: CompileTimeErrorCode.missingConstInSetLiteral,
+          locatableDiagnostic: diag.missingConstInSetLiteral,
         );
       }
       var nodeType = node.staticType;
@@ -1470,7 +1467,7 @@
         case ForElement():
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.constEvalForElement,
+            locatableDiagnostic: diag.constEvalForElement,
           );
         case IfElement():
           var condition = evaluateConstant(element.expression);
@@ -1492,7 +1489,7 @@
               if (conditionValue == null) {
                 return InvalidConstant.forEntity(
                   entity: element.expression,
-                  diagnosticCode: CompileTimeErrorCode.nonBoolCondition,
+                  locatableDiagnostic: diag.nonBoolCondition,
                 );
               } else if (conditionValue) {
                 branchResult = _buildListConstant(
@@ -1516,7 +1513,7 @@
         case MapLiteralEntry():
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.mapEntryNotInMap,
+            locatableDiagnostic: diag.mapEntryNotInMap,
           );
         case SpreadElement():
           var spread = evaluateConstant(element.expression);
@@ -1532,8 +1529,7 @@
               if (listValue == null) {
                 return InvalidConstant.forEntity(
                   entity: element.expression,
-                  diagnosticCode:
-                      CompileTimeErrorCode.constSpreadExpectedListOrSet,
+                  locatableDiagnostic: diag.constSpreadExpectedListOrSet,
                 );
               }
               list.addAll(listValue);
@@ -1583,12 +1579,12 @@
         case Expression():
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.expressionInMap,
+            locatableDiagnostic: diag.expressionInMap,
           );
         case ForElement():
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.constEvalForElement,
+            locatableDiagnostic: diag.constEvalForElement,
           );
         case IfElement():
           var condition = evaluateConstant(element.expression);
@@ -1611,7 +1607,7 @@
               if (conditionValue == null) {
                 return InvalidConstant.forEntity(
                   entity: element.expression,
-                  diagnosticCode: CompileTimeErrorCode.nonBoolCondition,
+                  locatableDiagnostic: diag.nonBoolCondition,
                 );
               } else if (conditionValue) {
                 branchResult = _buildMapConstant(
@@ -1660,7 +1656,7 @@
               if (mapValue == null) {
                 return InvalidConstant.forEntity(
                   entity: element.expression,
-                  diagnosticCode: CompileTimeErrorCode.constSpreadExpectedMap,
+                  locatableDiagnostic: diag.constSpreadExpectedMap,
                 );
               }
               map.addAll(mapValue);
@@ -1670,7 +1666,7 @@
           // `CompileTimeErrorCode.NULL_AWARE_ELEMENT_IN_MAP`?
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.expressionInMap,
+            locatableDiagnostic: diag.expressionInMap,
           );
       }
     }
@@ -1709,7 +1705,7 @@
         case ForElement():
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.constEvalForElement,
+            locatableDiagnostic: diag.constEvalForElement,
           );
         case IfElement():
           var condition = evaluateConstant(element.expression);
@@ -1731,7 +1727,7 @@
               if (conditionValue == null) {
                 return InvalidConstant.forEntity(
                   entity: element.expression,
-                  diagnosticCode: CompileTimeErrorCode.nonBoolCondition,
+                  locatableDiagnostic: diag.nonBoolCondition,
                 );
               } else if (conditionValue) {
                 branchResult = _buildSetConstant(
@@ -1755,7 +1751,7 @@
         case MapLiteralEntry():
           return InvalidConstant.forEntity(
             entity: element,
-            diagnosticCode: CompileTimeErrorCode.mapEntryNotInMap,
+            locatableDiagnostic: diag.mapEntryNotInMap,
           );
         case SpreadElement():
           var spread = evaluateConstant(element.expression);
@@ -1771,8 +1767,7 @@
               if (setValue == null) {
                 return InvalidConstant.forEntity(
                   entity: element.expression,
-                  diagnosticCode:
-                      CompileTimeErrorCode.constSpreadExpectedListOrSet,
+                  locatableDiagnostic: diag.constSpreadExpectedListOrSet,
                 );
               }
               set.addAll(setValue);
@@ -1858,12 +1853,12 @@
       case ExtensionElement():
         return InvalidConstant.forEntity(
           entity: errorNode,
-          diagnosticCode: CompileTimeErrorCode.constEvalExtensionMethod,
+          locatableDiagnostic: diag.constEvalExtensionMethod,
         );
       case ExtensionTypeElement():
         return InvalidConstant.forEntity(
           entity: errorNode,
-          diagnosticCode: CompileTimeErrorCode.constEvalExtensionTypeMethod,
+          locatableDiagnostic: diag.constEvalExtensionTypeMethod,
         );
     }
 
@@ -1886,8 +1881,10 @@
     // No other property access is allowed except for `.length` of a `String`.
     return InvalidConstant.forEntity(
       entity: errorNode,
-      diagnosticCode: CompileTimeErrorCode.constEvalPropertyAccess,
-      arguments: [identifier.name, targetType.getDisplayString()],
+      locatableDiagnostic: diag.constEvalPropertyAccess.withArguments(
+        propertyName: identifier.name,
+        type: targetType.getDisplayString(),
+      ),
     );
   }
 
@@ -1919,7 +1916,7 @@
             false)) {
       return InvalidConstant.forEntity(
         entity: expression,
-        diagnosticCode: CompileTimeErrorCode.constTypeParameter,
+        locatableDiagnostic: diag.constTypeParameter,
       );
     }
 
@@ -1944,7 +1941,7 @@
             if (identifier == null) {
               return InvalidConstant.forEntity(
                 entity: errorNode,
-                diagnosticCode: CompileTimeErrorCode.invalidConstant,
+                locatableDiagnostic: diag.invalidConstant,
               );
             }
             return _instantiateFunctionTypeForSimpleIdentifier(
@@ -1956,7 +1953,7 @@
             // if we remove `avoidReporting`.
             return InvalidConstant.forEntity(
               entity: errorNode,
-              diagnosticCode: CompileTimeErrorCode.invalidConstant,
+              locatableDiagnostic: diag.invalidConstant,
               avoidReporting: true,
               isUnresolved: true,
             );
@@ -1979,7 +1976,7 @@
         if (identifier == null) {
           return InvalidConstant.forEntity(
             entity: errorNode,
-            diagnosticCode: CompileTimeErrorCode.invalidConstant,
+            locatableDiagnostic: diag.invalidConstant,
           );
         }
         return _instantiateFunctionTypeForSimpleIdentifier(identifier, rawType);
@@ -2038,7 +2035,7 @@
         }
         return InvalidConstant.forEntity(
           entity: errorNode2,
-          diagnosticCode: CompileTimeErrorCode.constTypeParameter,
+          locatableDiagnostic: diag.constTypeParameter,
         );
       }
     }
@@ -2058,7 +2055,7 @@
   /// library.
   ///
   /// If no specific error can be chosen, an [InvalidConstant] error using
-  /// [CompileTimeErrorCode.invalidConstant] is returned.
+  /// [diag.invalidConstant] is returned.
   InvalidConstant _getDeferredLibraryError(
     AstNode node,
     SyntacticEntity errorTarget,
@@ -2067,41 +2064,35 @@
       AstNode? previous;
       for (AstNode? current = node; current != null;) {
         if (current is Annotation) {
-          return CompileTimeErrorCode
-              .invalidAnnotationConstantValueFromDeferredLibrary;
+          return diag.invalidAnnotationConstantValueFromDeferredLibrary;
         } else if (current is ConstantContextForExpressionImpl) {
-          return CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary;
+          return diag.constInitializedWithNonConstantValueFromDeferredLibrary;
         } else if (current is DefaultFormalParameter) {
-          return CompileTimeErrorCode
-              .nonConstantDefaultValueFromDeferredLibrary;
+          return diag.nonConstantDefaultValueFromDeferredLibrary;
         } else if (current is IfElement && current.expression == node) {
-          return CompileTimeErrorCode.ifElementConditionFromDeferredLibrary;
+          return diag.ifElementConditionFromDeferredLibrary;
         } else if (current is InstanceCreationExpression) {
-          return CompileTimeErrorCode
-              .constConstructorConstantFromDeferredLibrary;
+          return diag.constConstructorConstantFromDeferredLibrary;
         } else if (current is ListLiteral) {
-          return CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary;
+          return diag.nonConstantListElementFromDeferredLibrary;
         } else if (current is MapLiteralEntry) {
           if (previous == current.key) {
-            return CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary;
+            return diag.nonConstantMapKeyFromDeferredLibrary;
           } else {
-            return CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary;
+            return diag.nonConstantMapValueFromDeferredLibrary;
           }
         } else if (current is RecordLiteral) {
-          return CompileTimeErrorCode.nonConstantRecordFieldFromDeferredLibrary;
+          return diag.nonConstantRecordFieldFromDeferredLibrary;
         } else if (current is SetOrMapLiteral) {
-          return CompileTimeErrorCode.setElementFromDeferredLibrary;
+          return diag.setElementFromDeferredLibrary;
         } else if (current is SpreadElement) {
-          return CompileTimeErrorCode.spreadExpressionFromDeferredLibrary;
+          return diag.spreadExpressionFromDeferredLibrary;
         } else if (current is SwitchCase) {
-          return CompileTimeErrorCode
-              .nonConstantCaseExpressionFromDeferredLibrary;
+          return diag.nonConstantCaseExpressionFromDeferredLibrary;
         } else if (current is SwitchPatternCase) {
-          return CompileTimeErrorCode.patternConstantFromDeferredLibrary;
+          return diag.patternConstantFromDeferredLibrary;
         } else if (current is VariableDeclaration) {
-          return CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary;
+          return diag.constInitializedWithNonConstantValueFromDeferredLibrary;
         }
         previous = current;
         current = current.parent;
@@ -2110,12 +2101,12 @@
     if (errorCode != null) {
       return InvalidConstant.forEntity(
         entity: errorTarget,
-        diagnosticCode: errorCode,
+        locatableDiagnostic: errorCode,
       );
     }
     return InvalidConstant.forEntity(
       entity: node,
-      diagnosticCode: CompileTimeErrorCode.invalidConstant,
+      locatableDiagnostic: diag.invalidConstant,
     );
   }
 
@@ -2191,14 +2182,14 @@
     if (node.staticType is InvalidType) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.invalidConstant,
+        locatableDiagnostic: diag.invalidConstant,
         isUnresolved: true,
       );
     }
 
     return InvalidConstant.forEntity(
       entity: node,
-      diagnosticCode: CompileTimeErrorCode.constEvalMethodInvocation,
+      locatableDiagnostic: diag.constEvalMethodInvocation,
     );
   }
 
@@ -2214,7 +2205,7 @@
     // Only report the first invalid constant we see.
     return InvalidConstant.forEntity(
       entity: notPotentiallyConstants.first,
-      diagnosticCode: CompileTimeErrorCode.invalidConstant,
+      locatableDiagnostic: diag.invalidConstant,
     );
   }
 
@@ -2228,12 +2219,11 @@
       // interaction with g3 more elegantly.
       case InvalidConstant(isUnresolved: true):
         if (!expressionValue.avoidReporting) {
-          _diagnosticReporter.atOffset(
-            offset: expressionValue.offset,
-            length: expressionValue.length,
-            diagnosticCode: expressionValue.diagnosticCode,
-            arguments: expressionValue.arguments,
-            contextMessages: expressionValue.contextMessages,
+          _diagnosticReporter.report(
+            expressionValue.locatableDiagnostic.atOffset(
+              offset: expressionValue.offset,
+              length: expressionValue.length,
+            ),
           );
         }
         return ConstantEvaluationEngine._unresolvedObject(
@@ -2264,7 +2254,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2281,7 +2271,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2292,7 +2282,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2307,7 +2297,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2322,7 +2312,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2337,7 +2327,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2352,7 +2342,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2367,7 +2357,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2382,7 +2372,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2397,7 +2387,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2412,7 +2402,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2427,7 +2417,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2442,7 +2432,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
         isRuntimeException: exception.isRuntimeException,
       );
     }
@@ -2458,7 +2448,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2473,7 +2463,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2488,7 +2478,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2514,7 +2504,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2529,7 +2519,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2540,7 +2530,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2555,7 +2545,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2570,7 +2560,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2581,7 +2571,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2596,7 +2586,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2607,7 +2597,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2622,7 +2612,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2637,7 +2627,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2652,7 +2642,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2663,7 +2653,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2678,7 +2668,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2695,20 +2685,21 @@
         if (node is SimpleIdentifier) {
           return InvalidConstant.forEntity(
             entity: typeArgumentsErrorNode,
-            diagnosticCode:
-                CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction,
-            arguments: [
-              node.name,
-              rawType.typeParameters.length,
-              typeArguments.length,
-            ],
+            locatableDiagnostic: diag.wrongNumberOfTypeArgumentsFunction
+                .withArguments(
+                  functionName: node.name,
+                  typeParameterCount: rawType.typeParameters.length,
+                  typeArgumentCount: typeArguments.length,
+                ),
           );
         }
         return InvalidConstant.forEntity(
           entity: typeArgumentsErrorNode,
-          diagnosticCode:
-              CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction,
-          arguments: [rawType.typeParameters.length, typeArguments.length],
+          locatableDiagnostic: diag.wrongNumberOfTypeArgumentsAnonymousFunction
+              .withArguments(
+                typeParameterCount: rawType.typeParameters.length,
+                typeArgumentCount: typeArguments.length,
+              ),
         );
       }
       var type = rawType.instantiate(typeArguments);
@@ -2716,7 +2707,7 @@
     } else {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.invalidConstant,
+        locatableDiagnostic: diag.invalidConstant,
       );
     }
   }
@@ -2735,7 +2726,7 @@
     } on EvaluationException catch (exception) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: exception.diagnosticCode,
+        locatableDiagnostic: exception.locatableDiagnostic,
       );
     }
   }
@@ -2881,7 +2872,7 @@
       if (!_checkFromEnvironmentArguments(arguments, definingType)) {
         return InvalidConstant.forEntity(
           entity: _errorNode,
-          diagnosticCode: CompileTimeErrorCode.constEvalThrowsException,
+          locatableDiagnostic: diag.constEvalThrowsException,
         );
       }
       String? variableName = argumentCount < 1
@@ -2925,7 +2916,7 @@
       if (!_checkSymbolArguments(arguments)) {
         return InvalidConstant.forEntity(
           entity: _errorNode,
-          diagnosticCode: CompileTimeErrorCode.constEvalThrowsException,
+          locatableDiagnostic: diag.constEvalThrowsException,
         );
       }
       return DartObjectImpl(
@@ -3049,13 +3040,12 @@
           var errorNode = field.constantInitializer ?? _errorNode;
           return InvalidConstant.forEntity(
             entity: errorNode,
-            diagnosticCode:
-                CompileTimeErrorCode.constConstructorFieldTypeMismatch,
-            arguments: [
-              fieldValue.type.getDisplayString(),
-              field.name ?? '',
-              fieldType.getDisplayString(),
-            ],
+            locatableDiagnostic: diag.constConstructorFieldTypeMismatch
+                .withArguments(
+                  valueType: fieldValue.type.getDisplayString(),
+                  fieldName: field.name ?? '',
+                  fieldType: fieldType.getDisplayString(),
+                ),
             isRuntimeException: isRuntimeException,
           );
         }
@@ -3127,7 +3117,7 @@
               return _InitializersEvaluationResult(
                 InvalidConstant.forEntity(
                   entity: _errorNode,
-                  diagnosticCode: CompileTimeErrorCode.constEvalThrowsException,
+                  locatableDiagnostic: diag.constEvalThrowsException,
                 ),
                 evaluationIsComplete: true,
               );
@@ -3150,13 +3140,12 @@
                 return _InitializersEvaluationResult(
                   InvalidConstant.forEntity(
                     entity: errorNode,
-                    diagnosticCode:
-                        CompileTimeErrorCode.constConstructorFieldTypeMismatch,
-                    arguments: [
-                      evaluationResult.type.getDisplayString(),
-                      fieldName,
-                      field.type.getDisplayString(),
-                    ],
+                    locatableDiagnostic: diag.constConstructorFieldTypeMismatch
+                        .withArguments(
+                          valueType: evaluationResult.type.getDisplayString(),
+                          fieldName: fieldName,
+                          fieldType: field.type.getDisplayString(),
+                        ),
                     isRuntimeException: isRuntimeException,
                   ),
                   evaluationIsComplete: true,
@@ -3166,22 +3155,24 @@
           case InvalidConstant(isRuntimeException: false):
             // Add additional information to the error in the field initializer
             // because the error is reported at the location of [_errorNode].
-            if (evaluationResult.contextMessages.isEmpty) {
-              evaluationResult.contextMessages.add(
-                DiagnosticMessageImpl(
-                  filePath: _constructor
-                      .firstFragment
-                      .libraryFragment
-                      .source
-                      .fullName,
-                  length: evaluationResult.length,
-                  message:
-                      "The error is in the field initializer of "
-                      "'${_constructor.displayName}', and occurs here.",
-                  offset: evaluationResult.offset,
-                  url: null,
-                ),
-              );
+            if (evaluationResult.locatableDiagnostic.contextMessages.isEmpty) {
+              evaluationResult.locatableDiagnostic = evaluationResult
+                  .locatableDiagnostic
+                  .withContextMessages([
+                    DiagnosticMessageImpl(
+                      filePath: _constructor
+                          .firstFragment
+                          .libraryFragment
+                          .source
+                          .fullName,
+                      length: evaluationResult.length,
+                      message:
+                          "The error is in the field initializer of "
+                          "'${_constructor.displayName}', and occurs here.",
+                      offset: evaluationResult.offset,
+                      url: null,
+                    ),
+                  ]);
             }
             return _InitializersEvaluationResult(
               InvalidConstant.copyWithEntity(
@@ -3245,9 +3236,9 @@
                   if (messageConstant.toStringValue() case var assertMessage?) {
                     invalidConstant = InvalidConstant.forEntity(
                       entity: initializer,
-                      diagnosticCode: CompileTimeErrorCode
-                          .constEvalAssertionFailureWithMessage,
-                      arguments: [assertMessage],
+                      locatableDiagnostic: diag
+                          .constEvalAssertionFailureWithMessage
+                          .withArguments(message: assertMessage),
                       isRuntimeException: true,
                     );
                   }
@@ -3256,7 +3247,7 @@
 
               invalidConstant ??= InvalidConstant.forEntity(
                 entity: initializer,
-                diagnosticCode: CompileTimeErrorCode.constEvalAssertionFailure,
+                locatableDiagnostic: diag.constEvalAssertionFailure,
                 isRuntimeException: true,
               );
               return _InitializersEvaluationResult(
@@ -3267,22 +3258,24 @@
           case InvalidConstant(isRuntimeException: false):
             // Add additional information to the error in the assert initializer
             // because the error is reported at the location of [_errorNode].
-            if (evaluationResult.contextMessages.isEmpty) {
-              evaluationResult.contextMessages.add(
-                DiagnosticMessageImpl(
-                  filePath: _constructor
-                      .firstFragmentLocation
-                      .libraryFragment!
-                      .source
-                      .fullName,
-                  length: evaluationResult.length,
-                  message:
-                      "The error is in the assert initializer of "
-                      "'${_constructor.displayName}', and occurs here.",
-                  offset: evaluationResult.offset,
-                  url: null,
-                ),
-              );
+            if (evaluationResult.locatableDiagnostic.contextMessages.isEmpty) {
+              evaluationResult.locatableDiagnostic = evaluationResult
+                  .locatableDiagnostic
+                  .withContextMessages([
+                    DiagnosticMessageImpl(
+                      filePath: _constructor
+                          .firstFragmentLocation
+                          .libraryFragment!
+                          .source
+                          .fullName,
+                      length: evaluationResult.length,
+                      message:
+                          "The error is in the assert initializer of "
+                          "'${_constructor.displayName}', and occurs here.",
+                      offset: evaluationResult.offset,
+                      url: null,
+                    ),
+                  ]);
             }
             return _InitializersEvaluationResult(
               InvalidConstant.copyWithEntity(
@@ -3361,12 +3354,11 @@
               );
           return InvalidConstant.forEntity(
             entity: errorTarget,
-            diagnosticCode:
-                CompileTimeErrorCode.constConstructorParamTypeMismatch,
-            arguments: [
-              argumentValue.type.getDisplayString(),
-              parameter.type.getDisplayString(),
-            ],
+            locatableDiagnostic: diag.constConstructorParamTypeMismatch
+                .withArguments(
+                  valueType: argumentValue.type.getDisplayString(),
+                  parameterType: parameter.type.getDisplayString(),
+                ),
             isRuntimeException: isEvaluationException,
           );
         }
@@ -3382,12 +3374,11 @@
                   !typeSystem.runtimeTypeMatch(argumentValue, fieldType)) {
                 return InvalidConstant.forEntity(
                   entity: errorTarget,
-                  diagnosticCode:
-                      CompileTimeErrorCode.constConstructorParamTypeMismatch,
-                  arguments: [
-                    argumentValue.type.getDisplayString(),
-                    fieldType.getDisplayString(),
-                  ],
+                  locatableDiagnostic: diag.constConstructorParamTypeMismatch
+                      .withArguments(
+                        valueType: argumentValue.type.getDisplayString(),
+                        parameterType: fieldType.getDisplayString(),
+                      ),
                 );
               }
             }
@@ -3395,7 +3386,7 @@
             if (_fieldMap.containsKey(fieldName)) {
               return InvalidConstant.forEntity(
                 entity: _errorNode,
-                diagnosticCode: CompileTimeErrorCode.constEvalThrowsException,
+                locatableDiagnostic: diag.constEvalThrowsException,
               );
             }
             _fieldMap[fieldName] = argumentValue;
@@ -3445,35 +3436,41 @@
             // Add additional information to the error in the super constructor
             // call because the error is reported at the location of
             // [_errorNode].
-            if (evaluationResult.contextMessages.isEmpty) {
-              evaluationResult.contextMessages.add(
-                DiagnosticMessageImpl(
-                  filePath: _constructor
-                      .firstFragment
-                      .libraryFragment
-                      .source
-                      .fullName,
-                  length: evaluationResult.length,
-                  message:
-                      "The error is in the super constructor invocation "
-                      "of '${_constructor.displayName}', and occurs here.",
-                  offset: evaluationResult.offset,
-                  url: null,
-                ),
-              );
+            if (evaluationResult.locatableDiagnostic.contextMessages.isEmpty) {
+              evaluationResult.locatableDiagnostic = evaluationResult
+                  .locatableDiagnostic
+                  .withContextMessages([
+                    DiagnosticMessageImpl(
+                      filePath: _constructor
+                          .firstFragment
+                          .libraryFragment
+                          .source
+                          .fullName,
+                      length: evaluationResult.length,
+                      message:
+                          "The error is in the super constructor invocation "
+                          "of '${_constructor.displayName}', and occurs here.",
+                      offset: evaluationResult.offset,
+                      url: null,
+                    ),
+                  ]);
             } else {
-              evaluationResult.contextMessages.add(
-                _stackTraceContextMessage(superConstructor, _constructor),
-              );
+              evaluationResult.locatableDiagnostic = evaluationResult
+                  .locatableDiagnostic
+                  .withContextMessages([
+                    _stackTraceContextMessage(superConstructor, _constructor),
+                  ]);
             }
             return InvalidConstant.copyWithEntity(
               other: evaluationResult,
               entity: _errorNode,
             );
           case InvalidConstant():
-            evaluationResult.contextMessages.add(
-              _stackTraceContextMessage(superConstructor, _constructor),
-            );
+            evaluationResult.locatableDiagnostic = evaluationResult
+                .locatableDiagnostic
+                .withContextMessages([
+                  _stackTraceContextMessage(superConstructor, _constructor),
+                ]);
             return evaluationResult;
         }
       }
@@ -3556,7 +3553,7 @@
       }
       return InvalidConstant.forEntity(
         entity: keyword ?? node,
-        diagnosticCode: CompileTimeErrorCode.constWithNonConst,
+        locatableDiagnostic: diag.constWithNonConst,
       );
     }
 
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 48be297..8643790 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -15,14 +15,13 @@
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/diagnostic/diagnostic.dart';
-import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/constant/has_invalid_type.dart';
 import 'package:analyzer/src/dart/constant/has_type_parameter_reference.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
 import 'package:meta/meta.dart';
@@ -357,7 +356,7 @@
 
     if (!typeSystem.isSubtypeOf(type, resultType)) {
       // TODO(kallentu): Make a more specific error for casting.
-      throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+      throw EvaluationException(diag.constEvalThrowsException);
     }
     return this;
   }
@@ -439,7 +438,7 @@
         state.bitAnd(rightOperand.state),
       );
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalTypeBoolInt);
+    throw EvaluationException(diag.constEvalTypeBoolInt);
   }
 
   /// Return the result of invoking the '|' operator on this object with the
@@ -464,7 +463,7 @@
         state.bitOr(rightOperand.state),
       );
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalTypeBoolInt);
+    throw EvaluationException(diag.constEvalTypeBoolInt);
   }
 
   /// Return the result of invoking the '^' operator on this object with the
@@ -489,7 +488,7 @@
         state.bitXor(rightOperand.state),
       );
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalTypeBoolInt);
+    throw EvaluationException(diag.constEvalTypeBoolInt);
   }
 
   /// Returns the result of invoking the '==' operator on this object with the
@@ -530,8 +529,8 @@
     }
     throw EvaluationException(
       featureSet.isEnabled(Feature.patterns)
-          ? CompileTimeErrorCode.constEvalPrimitiveEquality
-          : CompileTimeErrorCode.constEvalTypeBoolNumString,
+          ? diag.constEvalPrimitiveEquality
+          : diag.constEvalTypeBoolNumString,
     );
   }
 
@@ -1049,7 +1048,7 @@
   /// value.
   void _assertType(DartObjectImpl object) {
     if (object.state is! TypeState) {
-      throw EvaluationException(CompileTimeErrorCode.constEvalTypeType);
+      throw EvaluationException(diag.constEvalTypeType);
     }
   }
 }
@@ -1098,7 +1097,7 @@
       }
       return DoubleState(value! + rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1128,7 +1127,7 @@
       }
       return DoubleState(value! / rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1150,7 +1149,7 @@
       }
       return BoolState.from(value! > rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1172,7 +1171,7 @@
       }
       return BoolState.from(value! >= rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1200,7 +1199,7 @@
         return IntState(result.toInt());
       }
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1250,7 +1249,7 @@
       }
       return BoolState.from(value! < rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1272,7 +1271,7 @@
       }
       return BoolState.from(value! <= rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1294,7 +1293,7 @@
       }
       return DoubleState(value! - rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1324,7 +1323,7 @@
       }
       return DoubleState(value! % rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1346,7 +1345,7 @@
       }
       return DoubleState(value! * rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -1355,14 +1354,18 @@
 
 /// Exception that would be thrown during the evaluation of Dart code.
 class EvaluationException {
-  /// The diagnostic code associated with the exception.
-  final DiagnosticCode diagnosticCode;
+  /// The [LocatableDiagnostic] associated with the exception.
+  final LocatableDiagnostic locatableDiagnostic;
 
   /// Returns `true` if the evaluation exception is a runtime exception.
   final bool isRuntimeException;
 
-  /// Initialize a newly created exception to have the given [diagnosticCode].
-  EvaluationException(this.diagnosticCode, {this.isRuntimeException = false});
+  /// Initialize a newly created exception to have the given
+  /// [locatableDiagnostic].
+  EvaluationException(
+    this.locatableDiagnostic, {
+    this.isRuntimeException = false,
+  });
 }
 
 /// The state of an object representing a function.
@@ -1631,14 +1634,14 @@
     }
     assertNumStringOrNull(this);
     assertNumStringOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Throws an exception if the given [state] does not represent a `bool`
   /// value.
   void assertBool(InstanceState? state) {
     if (state is! BoolState) {
-      throw EvaluationException(CompileTimeErrorCode.constEvalTypeBool);
+      throw EvaluationException(diag.constEvalTypeBool);
     }
   }
 
@@ -1646,7 +1649,7 @@
   /// `null` value.
   void assertIntOrNull(InstanceState state) {
     if (!(state is IntState || state is NullState)) {
-      throw EvaluationException(CompileTimeErrorCode.constEvalTypeInt);
+      throw EvaluationException(diag.constEvalTypeInt);
     }
   }
 
@@ -1654,7 +1657,7 @@
   /// `null` value.
   void assertNumOrNull(InstanceState state) {
     if (!(state is NumState || state is NullState)) {
-      throw EvaluationException(CompileTimeErrorCode.constEvalTypeNum);
+      throw EvaluationException(diag.constEvalTypeNum);
     }
   }
 
@@ -1662,7 +1665,7 @@
   /// `String`, or `null` value.
   void assertNumStringOrNull(InstanceState state) {
     if (!(state is NumState || state is StringState || state is NullState)) {
-      throw EvaluationException(CompileTimeErrorCode.constEvalTypeNumString);
+      throw EvaluationException(diag.constEvalTypeNumString);
     }
   }
 
@@ -1670,7 +1673,7 @@
   /// value.
   void assertString(InstanceState state) {
     if (state is! StringState) {
-      throw EvaluationException(CompileTimeErrorCode.constEvalTypeString);
+      throw EvaluationException(diag.constEvalTypeString);
     }
   }
 
@@ -1682,7 +1685,7 @@
   IntState bitAnd(InstanceState rightOperand) {
     assertIntOrNull(this);
     assertIntOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '~' operator on this object.
@@ -1691,7 +1694,7 @@
   /// object of this kind.
   IntState bitNot() {
     assertIntOrNull(this);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '|' operator on this object with the
@@ -1702,7 +1705,7 @@
   IntState bitOr(InstanceState rightOperand) {
     assertIntOrNull(this);
     assertIntOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '^' operator on this object with the
@@ -1713,7 +1716,7 @@
   IntState bitXor(InstanceState rightOperand) {
     assertIntOrNull(this);
     assertIntOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the ' ' operator on this object with the
@@ -1723,7 +1726,7 @@
   /// object of this kind.
   StringState concatenate(InstanceState rightOperand) {
     assertString(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of applying boolean conversion to this object.
@@ -1746,7 +1749,7 @@
   NumState divide(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '==' operator on this object with the
@@ -1764,7 +1767,7 @@
   BoolState greaterThan(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '&gt;=' operator on this object with the
@@ -1775,7 +1778,7 @@
   BoolState greaterThanOrEqual(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Returns `true` if this value, inside a library with the [featureSet],
@@ -1790,7 +1793,7 @@
   IntState integerDivide(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the identical function on this object with
@@ -1835,7 +1838,7 @@
   BoolState lessThan(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '&lt;=' operator on this object with the
@@ -1846,7 +1849,7 @@
   BoolState lessThanOrEqual(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '&' operator on this object with the
@@ -1898,7 +1901,7 @@
   IntState logicalShiftRight(InstanceState rightOperand) {
     assertIntOrNull(this);
     assertIntOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '^' operator on this object with the
@@ -1925,7 +1928,7 @@
   NumState minus(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '-' operator on this object.
@@ -1934,7 +1937,7 @@
   /// object of this kind.
   NumState negated() {
     assertNumOrNull(this);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '%' operator on this object with the
@@ -1945,7 +1948,7 @@
   NumState remainder(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '&lt;&lt;' operator on this object with
@@ -1956,7 +1959,7 @@
   IntState shiftLeft(InstanceState rightOperand) {
     assertIntOrNull(this);
     assertIntOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '&gt;&gt;' operator on this object with
@@ -1967,7 +1970,7 @@
   IntState shiftRight(InstanceState rightOperand) {
     assertIntOrNull(this);
     assertIntOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the 'length' getter on this object.
@@ -1976,7 +1979,7 @@
   /// object of this kind.
   IntState stringLength() {
     assertString(this);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   /// Return the result of invoking the '*' operator on this object with the
@@ -1987,7 +1990,7 @@
   NumState times(InstanceState rightOperand) {
     assertNumOrNull(this);
     assertNumOrNull(rightOperand);
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 }
 
@@ -2040,7 +2043,7 @@
       }
       return DoubleState(value!.toDouble() + rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2056,7 +2059,7 @@
       }
       return IntState(value! & rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2080,7 +2083,7 @@
       }
       return IntState(value! | rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2096,7 +2099,7 @@
       }
       return IntState(value! ^ rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2127,7 +2130,7 @@
       }
       return DoubleState(value!.toDouble() / rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2149,7 +2152,7 @@
       }
       return BoolState.from(value!.toDouble() > rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2171,7 +2174,7 @@
       }
       return BoolState.from(value!.toDouble() >= rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2189,7 +2192,7 @@
         return UNKNOWN_VALUE;
       } else if (rightValue == 0) {
         throw EvaluationException(
-          CompileTimeErrorCode.constEvalThrowsIdbze,
+          diag.constEvalThrowsIdbze,
           isRuntimeException: true,
         );
       }
@@ -2204,7 +2207,7 @@
         return IntState(result.toInt());
       }
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2247,7 +2250,7 @@
       }
       return BoolState.from(value!.toDouble() < rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2269,7 +2272,7 @@
       }
       return BoolState.from(value!.toDouble() <= rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2292,7 +2295,7 @@
         );
       }
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2317,7 +2320,7 @@
       }
       return DoubleState(value!.toDouble() - rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2352,7 +2355,7 @@
       }
       return DoubleState(value!.toDouble() % rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2372,7 +2375,7 @@
         return IntState(value! << rightValue);
       }
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2392,7 +2395,7 @@
         return IntState(value! >> rightValue);
       }
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2417,7 +2420,7 @@
       }
       return DoubleState(value!.toDouble() * rightValue);
     }
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2432,15 +2435,13 @@
   /// The length of the entity that the evaluation error is reported at.
   final int length;
 
-  /// The diagnostic code that is being reported.
-  final DiagnosticCode diagnosticCode;
-
-  /// The arguments required to complete the message.
-  final List<Object> arguments;
-
-  /// Additional context messages for the error, including stack trace
-  /// information if the error occurs within a constructor.
-  final List<DiagnosticMessage> contextMessages;
+  /// The [LocatableDiagnostic] that is being reported.
+  ///
+  /// This object encapsulates the diagnostic code that is being reported, the
+  /// arguments required to complete the diagnostic message, and additional
+  /// context messages for the error, including stack trace information if the
+  /// error occurs within a constructor.
+  LocatableDiagnostic locatableDiagnostic;
 
   /// Whether to omit reporting this error.
   ///
@@ -2456,7 +2457,7 @@
   ///
   /// In [ConstantEvaluationEngine.evaluateAndFormatErrorsInConstructorCall],
   /// we convert this error into a
-  /// [CompileTimeErrorCode.constEvalThrowsException] with a context message
+  /// [diag.constEvalThrowsException] with a context message
   /// pointing to where the exception was thrown.
   final bool isRuntimeException;
 
@@ -2470,9 +2471,7 @@
   }) {
     return InvalidConstant.forEntity(
       entity: entity,
-      diagnosticCode: other.diagnosticCode,
-      arguments: other.arguments,
-      contextMessages: other.contextMessages,
+      locatableDiagnostic: other.locatableDiagnostic,
       avoidReporting: other.avoidReporting,
       isUnresolved: other.isUnresolved,
       isRuntimeException: other.isRuntimeException,
@@ -2482,18 +2481,14 @@
   /// Creates a constant evaluation error associated with an [element].
   InvalidConstant.forElement({
     required Element element,
-    required DiagnosticCode diagnosticCode,
-    List<Object>? arguments,
-    List<DiagnosticMessage>? contextMessages,
+    required LocatableDiagnostic locatableDiagnostic,
     bool avoidReporting = false,
     bool isUnresolved = false,
     bool isRuntimeException = false,
   }) : this._(
          length: element.name!.length,
          offset: element.firstFragment.nameOffset ?? -1,
-         diagnosticCode: diagnosticCode,
-         arguments: arguments,
-         contextMessages: contextMessages,
+         locatableDiagnostic: locatableDiagnostic,
          avoidReporting: avoidReporting,
          isUnresolved: isUnresolved,
          isRuntimeException: isRuntimeException,
@@ -2503,18 +2498,14 @@
   /// [entity].
   InvalidConstant.forEntity({
     required SyntacticEntity entity,
-    required DiagnosticCode diagnosticCode,
-    List<Object>? arguments,
-    List<DiagnosticMessage>? contextMessages,
+    required LocatableDiagnostic locatableDiagnostic,
     bool avoidReporting = false,
     bool isUnresolved = false,
     bool isRuntimeException = false,
   }) : this._(
          offset: entity.offset,
          length: entity.length,
-         diagnosticCode: diagnosticCode,
-         arguments: arguments,
-         contextMessages: contextMessages,
+         locatableDiagnostic: locatableDiagnostic,
          avoidReporting: avoidReporting,
          isUnresolved: isUnresolved,
          isRuntimeException: isRuntimeException,
@@ -2532,13 +2523,13 @@
         parent2.isConst) {
       return InvalidConstant.forEntity(
         entity: node,
-        diagnosticCode: CompileTimeErrorCode.constWithNonConstantArgument,
+        locatableDiagnostic: diag.constWithNonConstantArgument,
         isUnresolved: isUnresolved,
       );
     }
     return InvalidConstant.forEntity(
       entity: node,
-      diagnosticCode: CompileTimeErrorCode.invalidConstant,
+      locatableDiagnostic: diag.invalidConstant,
       isUnresolved: isUnresolved,
     );
   }
@@ -2546,14 +2537,11 @@
   InvalidConstant._({
     required this.offset,
     required this.length,
-    required this.diagnosticCode,
-    List<Object>? arguments,
-    List<DiagnosticMessage>? contextMessages,
+    required this.locatableDiagnostic,
     this.avoidReporting = false,
     this.isUnresolved = false,
     this.isRuntimeException = false,
-  }) : arguments = arguments ?? [],
-       contextMessages = contextMessages ?? [];
+  });
 }
 
 /// The state of an object representing a list.
@@ -2794,7 +2782,7 @@
 
   @override
   BoolState convertToBool() {
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
@@ -2815,7 +2803,7 @@
 
   @override
   BoolState logicalNot() {
-    throw EvaluationException(CompileTimeErrorCode.constEvalThrowsException);
+    throw EvaluationException(diag.constEvalThrowsException);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 2fdb7a0..452a0b8 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -46,6 +46,7 @@
 import 'package:analyzer/src/error/inference_error.dart';
 import 'package:analyzer/src/fine/annotations.dart';
 import 'package:analyzer/src/fine/library_manifest.dart';
+import 'package:analyzer/src/fine/requirement_failure.dart';
 import 'package:analyzer/src/fine/requirements.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
 import 'package:analyzer/src/generated/source.dart' show DartUriResolver;
@@ -60,6 +61,7 @@
 import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
 import 'package:collection/collection.dart';
+import 'package:meta/meta.dart';
 import 'package:pub_semver/pub_semver.dart';
 
 part 'element.g.dart';
@@ -256,14 +258,22 @@
   @override
   @trackedDirectlyOpaque
   ClassFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<ClassFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -394,7 +404,7 @@
       return false;
     }
     for (var constructor in constructors) {
-      if (!constructor.isSynthetic && !constructor.isFactory) {
+      if (constructor.isOriginDeclaration && !constructor.isFactory) {
         return false;
       }
     }
@@ -419,7 +429,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitClassElement(this);
   }
 
@@ -475,13 +489,13 @@
         .toList(growable: false);
 
     bool typeHasInstanceVariables(InterfaceTypeImpl type) =>
-        type.element.fields.any((e) => !e.isSynthetic);
+        type.element.fields.any((e) => e.isOriginDeclaration);
 
     _constructors = superConstructors.map((superConstructor) {
       var constructorFragment = ConstructorFragmentImpl(
         name: superConstructor.name ?? 'new',
       );
-      constructorFragment.isSynthetic = true;
+      constructorFragment.isOriginMixinApplication = true;
       constructorFragment.typeName = name;
       constructorFragment.isConst =
           superConstructor.isConst && !mixins.any(typeHasInstanceVariables);
@@ -686,14 +700,22 @@
   @override
   @trackedDirectlyOpaque
   ConstructorFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<ConstructorFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -702,6 +724,10 @@
   bool get isConst => _firstFragment.isConst;
 
   @override
+  @trackedIncludedInId
+  bool get isDeclaring => _firstFragment.isDeclaring;
+
+  @override
   @trackedIndirectly
   bool get isDefaultConstructor => _firstFragment.isDefaultConstructor;
 
@@ -715,12 +741,40 @@
 
   @override
   @trackedIncludedInId
+  bool get isOriginDeclaration => _firstFragment.isOriginDeclaration;
+
+  @override
+  @trackedIncludedInId
+  bool get isOriginImplicitDefault => _firstFragment.isOriginImplicitDefault;
+
+  @override
+  @trackedIncludedInId
+  bool get isOriginMixinApplication => _firstFragment.isOriginMixinApplication;
+
+  @override
+  @trackedIncludedInId
+  bool get isPrimary => _firstFragment.isPrimary;
+
+  @Deprecated(
+    'Use isOriginDeclaration / isOriginImplicitDefault / '
+    'isOriginMixinApplication instead, depending on intent.',
+  )
+  @override
+  @trackedIncludedInId
+  bool get isSynthetic => !isOriginDeclaration;
+
+  @override
+  @trackedIncludedInId
   ElementKind get kind => ElementKind.CONSTRUCTOR;
 
   @override
   @trackedDirectlyOpaque
   ConstructorFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     return super.lastFragment as ConstructorFragmentImpl;
   }
 
@@ -731,10 +785,10 @@
   @override
   @trackedIncludedInId
   Element get nonSynthetic {
-    if (isSynthetic) {
-      return enclosingElement;
-    } else {
+    if (isOriginDeclaration) {
       return this;
+    } else {
+      return enclosingElement;
     }
   }
 
@@ -786,7 +840,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitConstructorElement(this);
   }
 
@@ -831,7 +889,11 @@
   @override
   @trackedDirectlyOpaque
   void visitChildren<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'visitChildren');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueVisitChildren,
+      target: this,
+      method: 'visitChildren',
+    );
     for (var child in children) {
       child.accept(visitor);
     }
@@ -850,6 +912,12 @@
   List<ConstructorInitializer> _constantInitializers = const [];
 
   @override
+  int? newKeywordOffset;
+
+  @override
+  int? factoryKeywordOffset;
+
+  @override
   String? typeName;
 
   @override
@@ -859,15 +927,15 @@
   int? periodOffset;
 
   @override
-  int? nameEnd;
-
-  @override
   final String name;
 
   @override
   int? nameOffset;
 
   @override
+  int? nameEnd;
+
+  @override
   ConstructorFragmentImpl? previousFragment;
 
   @override
@@ -925,6 +993,13 @@
     return !isFactory;
   }
 
+  @Deprecated(
+    'Use isOriginDeclaration / isOriginImplicitDefault / '
+    'isOriginMixinApplication instead, depending on intent.',
+  )
+  @override
+  bool get isSynthetic => !isOriginDeclaration;
+
   @override
   int get offset =>
       nameOffset ??
@@ -1378,9 +1453,10 @@
           source: libraryFragment.source,
           offset: evaluationResult.offset,
           length: evaluationResult.length,
-          diagnosticCode: evaluationResult.diagnosticCode,
-          arguments: evaluationResult.arguments,
-          contextMessages: evaluationResult.contextMessages,
+          diagnosticCode: evaluationResult.locatableDiagnostic.code,
+          arguments: evaluationResult.locatableDiagnostic.arguments,
+          contextMessages: evaluationResult.locatableDiagnostic.contextMessages
+              .toList(),
         ),
       ];
     }
@@ -1675,7 +1751,11 @@
   @override
   @trackedDirectlyOpaque
   String? get documentationComment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'documentationComment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueDocumentationComment,
+      target: this,
+      method: 'documentationComment',
+    );
     var buffer = StringBuffer();
     for (var fragment in fragments) {
       var comment = fragment.documentationComment;
@@ -1754,7 +1834,11 @@
   @override
   @trackedDirectlyOpaque
   AnalysisSession? get session {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'session');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueSession,
+      target: this,
+      method: 'session',
+    );
     return enclosingElement?.session;
   }
 
@@ -1876,7 +1960,11 @@
   @override
   @trackedDirectlyOpaque
   void visitChildren<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'visitChildren');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueVisitChildren,
+      target: this,
+      method: 'visitChildren',
+    );
     for (var child in children) {
       child.accept(visitor);
     }
@@ -1911,14 +1999,22 @@
   @override
   @trackedDirectlyOpaque
   EnumFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<EnumFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return [
       for (
         EnumFragmentImpl? fragment = _firstFragment;
@@ -1938,7 +2034,7 @@
   @trackedIndirectly
   FieldElementImpl? get valuesField {
     for (var field in fields) {
-      if (field.name == 'values' && field.isSyntheticEnumField) {
+      if (field.isOriginEnumValues) {
         return field;
       }
     }
@@ -1948,7 +2044,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitEnumElement(this);
   }
 
@@ -2113,7 +2213,11 @@
 
   @trackedDirectlyOpaque
   ExecutableFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     var result = _firstFragment;
     while (true) {
       if (result.nextFragment case ExecutableFragmentImpl nextFragment) {
@@ -2305,14 +2409,22 @@
   @override
   @trackedDirectlyOpaque
   ExtensionFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<ExtensionFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return [
       for (
         ExtensionFragmentImpl? fragment = _firstFragment;
@@ -2394,7 +2506,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitExtensionElement(this);
   }
 
@@ -2501,14 +2617,22 @@
   @override
   @trackedDirectlyOpaque
   ExtensionTypeFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<ExtensionTypeFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -2559,7 +2683,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitExtensionTypeElement(this);
   }
 
@@ -2628,6 +2756,22 @@
   FieldElementImpl get baseElement => this;
 
   @override
+  @trackedIndirectly
+  FieldFormalParameterElementImpl? get declaringFormalParameter {
+    if (enclosingElement case InterfaceElementImpl enclosingElement) {
+      var declaringConstructor = enclosingElement.constructors.firstWhereOrNull(
+        (constructor) => constructor.isDeclaring,
+      );
+      return declaringConstructor?.formalParameters
+          .whereType<FieldFormalParameterElementImpl>()
+          .firstWhereOrNull((f) {
+            return f.isDeclaring && f.field == this;
+          });
+    }
+    return null;
+  }
+
+  @override
   @trackedIncludedInId
   InstanceElementImpl get enclosingElement {
     return _firstFragment.enclosingFragment.element;
@@ -2636,14 +2780,22 @@
   @override
   @trackedDirectlyOpaque
   FieldFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<FieldFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -2703,44 +2855,49 @@
   @trackedIncludedInId
   bool get isFinal => _firstFragment.isFinal;
 
+  @trackedIndirectly
+  bool get isInstanceField => !isStatic;
+
   @override
   @trackedIncludedInId
   bool get isLate => _firstFragment.isLate;
 
   @override
   @trackedIncludedInId
+  bool get isOriginDeclaringFormalParameter {
+    return _firstFragment.isOriginDeclaringFormalParameter;
+  }
+
+  @override
+  @trackedIncludedInId
+  bool get isOriginEnumValues {
+    return _firstFragment.isOriginEnumValues;
+  }
+
+  @override
+  @trackedIncludedInId
   bool get isPromotable => _firstFragment.isPromotable;
 
   @override
   @trackedIncludedInId
   bool get isStatic => _firstFragment.isStatic;
 
+  @Deprecated('Use isOriginX instead')
   @override
   @trackedIncludedInId
   bool get isSynthetic => _firstFragment.isSynthetic;
 
-  /// Return `true` if this element is a synthetic enum field.
-  ///
-  /// It is synthetic because it is not written explicitly in code, but it
-  /// is different from other synthetic fields, because its getter is also
-  /// synthetic.
-  ///
-  /// Such fields are `index`, `_name`, and `values`.
-  @trackedIndirectly
-  bool get isSyntheticEnumField {
-    return enclosingElement is EnumElementImpl &&
-        isSynthetic &&
-        getter?.isSynthetic == true &&
-        setter == null;
-  }
-
   @override
   @trackedIncludedInId
   ElementKind get kind => ElementKind.FIELD;
 
   @trackedDirectlyOpaque
   FieldFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
 
     var result = _firstFragment;
     while (true) {
@@ -2792,7 +2949,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitFieldElement(this);
   }
 
@@ -2829,12 +2990,24 @@
   }
 
   @override
+  bool get isDeclaring => _firstFragment.isDeclaring;
+
+  @override
+  String? get privateName => _firstFragment.privateName;
+
+  @override
   FieldFormalParameterFragmentImpl get _firstFragment =>
       super._firstFragment as FieldFormalParameterFragmentImpl;
 }
 
+@GenerateFragmentImpl(modifiers: _FieldFormalParameterFragmentModifiers.values)
 class FieldFormalParameterFragmentImpl extends FormalParameterFragmentImpl
+    with _FieldFormalParameterFragmentImplMixin
     implements FieldFormalParameterFragment {
+  @experimental
+  @override
+  final String? privateName;
+
   /// Initialize a newly created parameter element to have the given [name] and
   /// [nameOffset].
   FieldFormalParameterFragmentImpl({
@@ -2842,6 +3015,7 @@
     required super.name,
     required super.nameOffset,
     required super.parameterKind,
+    required this.privateName,
   });
 
   @override
@@ -3080,9 +3254,7 @@
   }
 
   @override
-  String? get name {
-    return _firstFragment.name;
-  }
+  String? get name => _firstFragment.name;
 
   @override
   String get nameShared => _firstFragment.name ?? '';
@@ -3813,14 +3985,22 @@
   @override
   @trackedDirectlyOpaque
   GetterFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<GetterFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -3831,14 +4011,18 @@
   @override
   @trackedDirectlyOpaque
   GetterFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     return super.lastFragment as GetterFragmentImpl;
   }
 
   @override
   @trackedIndirectly
   Element get nonSynthetic {
-    if (isSynthetic) {
+    if (isOriginVariable) {
       return variable.nonSynthetic;
     } else {
       return this;
@@ -3848,7 +4032,7 @@
   @override
   @trackedIndirectly
   Version? get sinceSdkVersion {
-    if (isSynthetic) {
+    if (isOriginVariable) {
       return variable.sinceSdkVersion;
     }
     return super.sinceSdkVersion;
@@ -3869,7 +4053,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitGetterElement(this);
   }
 
@@ -3969,7 +4157,11 @@
   @override
   @trackedDirectlyOpaque
   String? get documentationComment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'documentationComment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueDocumentationComment,
+      target: this,
+      method: 'documentationComment',
+    );
     return _firstFragment.documentationComment;
   }
 
@@ -4062,7 +4254,11 @@
   @override
   @trackedDirectlyOpaque
   AnalysisSessionImpl get session {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'session');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueSession,
+      target: this,
+      method: 'session',
+    );
     return library.session;
   }
 
@@ -4179,7 +4375,11 @@
     required String name,
     required LibraryElement library,
   }) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lookUpGetter');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLookUpGetter,
+      target: this,
+      method: 'lookUpGetter',
+    );
     return _implementationsOfGetter(
           name,
         ).firstWhereOrNull((getter) => getter.isAccessibleIn(library))
@@ -4192,7 +4392,11 @@
     required String name,
     required LibraryElement library,
   }) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lookUpMethod');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLookUpMethod,
+      target: this,
+      method: 'lookUpMethod',
+    );
     return _implementationsOfMethod(
       name,
     ).firstWhereOrNull((method) => method.isAccessibleIn(library));
@@ -4204,7 +4408,11 @@
     required String name,
     required LibraryElement library,
   }) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lookUpSetter');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLookUpSetter,
+      target: this,
+      method: 'lookUpSetter',
+    );
     return _implementationsOfSetter(
           name,
         ).firstWhereOrNull((setter) => setter.isAccessibleIn(library))
@@ -4548,7 +4756,11 @@
   @override
   @trackedDirectlyOpaque
   List<InterfaceFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return [
       for (
         InterfaceFragmentImpl? fragment = _firstFragment;
@@ -4581,8 +4793,9 @@
   @trackedDirectlyOpaque
   Map<Name, ExecutableElement> get inheritedConcreteMembers {
     globalResultRequirements?.recordOpaqueApiUse(
-      this,
-      'inheritedConcreteMembers',
+      kindId: RequirementFailureKindId.opaqueInheritedConcreteMembers,
+      target: this,
+      method: 'inheritedConcreteMembers',
     );
     return inheritanceManager.getInheritedConcreteMap(this);
   }
@@ -4590,14 +4803,22 @@
   @override
   @trackedDirectlyOpaque
   Map<Name, ExecutableElement> get inheritedMembers {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'inheritedMembers');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueInheritedMembers,
+      target: this,
+      method: 'inheritedMembers',
+    );
     return inheritanceManager.getInheritedMap(this);
   }
 
   @override
   @trackedDirectlyOpaque
   Map<Name, ExecutableElement> get interfaceMembers {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'interfaceMembers');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueInterfaceMembers,
+      target: this,
+      method: 'interfaceMembers',
+    );
     return inheritanceManager.getInterface(this).map;
   }
 
@@ -4701,7 +4922,11 @@
   @override
   @trackedDirectlyOpaque
   ExecutableElement? getInheritedMember(Name name) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'getInheritedMember');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueGetInheritedMember,
+      target: this,
+      method: 'getInheritedMember',
+    );
     return inheritanceManager.getInherited(this, name);
   }
 
@@ -4727,7 +4952,11 @@
   @override
   @trackedDirectlyOpaque
   List<ExecutableElement>? getOverridden(Name name) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'getOverridden');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueGetOverridden,
+      target: this,
+      method: 'getOverridden',
+    );
     return inheritanceManager.getOverridden(this, name);
   }
 
@@ -4846,7 +5075,11 @@
     required String methodName,
     required LibraryElement library,
   }) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lookUpInheritedMethod');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLookUpInheritedMethod,
+      target: this,
+      method: 'lookUpInheritedMethod',
+    );
     return inheritanceManager
         .getInherited(this, Name.forLibrary(library, methodName))
         .ifTypeOrNull();
@@ -5525,7 +5758,11 @@
 
   @trackedDirectlyOpaque
   AnalysisContext get context {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'context');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueContext,
+      target: this,
+      method: 'context',
+    );
     return _context;
   }
 
@@ -5537,7 +5774,11 @@
   @override
   @trackedDirectlyOpaque
   String? get documentationComment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'documentationComment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueDocumentationComment,
+      target: this,
+      method: 'documentationComment',
+    );
     return _documentationComment;
   }
 
@@ -5653,8 +5894,9 @@
   Map<String, FieldNameNonPromotabilityInfo> get fieldNameNonPromotabilityInfo {
     _ensureReadResolution();
     globalResultRequirements?.recordOpaqueApiUse(
-      this,
-      'fieldNameNonPromotabilityInfo',
+      kindId: RequirementFailureKindId.opaqueFieldNameNonPromotabilityInfo,
+      target: this,
+      method: 'fieldNameNonPromotabilityInfo',
     );
     return _fieldNameNonPromotabilityInfo!;
   }
@@ -5668,7 +5910,11 @@
   @override
   @trackedDirectlyOpaque
   LibraryFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
@@ -5679,7 +5925,11 @@
   @override
   @trackedDirectlyOpaque
   List<LibraryFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -5801,7 +6051,11 @@
 
   @trackedDirectlyOpaque
   int get nameLength {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'nameLength');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueNameLength,
+      target: this,
+      method: 'nameLength',
+    );
     return _nameLength;
   }
 
@@ -5811,7 +6065,11 @@
 
   @trackedDirectlyOpaque
   int get nameOffset {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'nameOffset');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueNameOffset,
+      target: this,
+      method: 'nameOffset',
+    );
     return _nameOffset;
   }
 
@@ -5826,7 +6084,11 @@
   @override
   @trackedDirectlyOpaque
   Namespace get publicNamespace {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'publicNamespace');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaquePublicNamespace,
+      target: this,
+      method: 'publicNamespace',
+    );
     return _publicNamespace ??= NamespaceBuilder()
         .createPublicNamespaceForLibrary(this);
   }
@@ -5838,7 +6100,11 @@
   @override
   @trackedDirectlyOpaque
   AnalysisSessionImpl get session {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'session');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueSession,
+      target: this,
+      method: 'session',
+    );
     return _session;
   }
 
@@ -5928,7 +6194,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitLibraryElement(this);
   }
 
@@ -6171,7 +6441,11 @@
   @override
   @trackedDirectlyOpaque
   void visitChildren<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'visitChildren');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueVisitChildren,
+      target: this,
+      method: 'visitChildren',
+    );
     for (var child in children) {
       child.accept(visitor);
     }
@@ -6810,7 +7084,11 @@
   @override
   @trackedDirectlyOpaque
   List<LocalFunctionFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -7424,14 +7702,22 @@
   @override
   @trackedDirectlyOpaque
   MethodFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<MethodFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -7446,7 +7732,11 @@
   @override
   @trackedDirectlyOpaque
   MethodFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     return super.lastFragment as MethodFragmentImpl;
   }
 
@@ -7474,7 +7764,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitMethodElement(this);
   }
 
@@ -7591,14 +7885,22 @@
   @override
   @trackedDirectlyOpaque
   MixinFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<MixinFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -7661,7 +7963,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitMixinElement(this);
   }
 
@@ -7754,7 +8060,12 @@
   /// Indicates that the class is `Object` from `dart:core`.
   DART_CORE_OBJECT,
 
-  /// Indicates that the import element represents a deferred library.
+  /// Indicates that the element is either:
+  /// 1. Declaring formal parameters.
+  /// 2. Declaring constructor.
+  DECLARING,
+
+  /// Indicates that the element is a declaring formal parameter.
   DEFERRED,
 
   /// Indicates that a class element was defined by an enum declaration.
@@ -7822,6 +8133,36 @@
   /// enclosing element. This includes not only explicitly specified type
   /// annotations, but also inferred types.
   NO_ENCLOSING_TYPE_PARAMETER_REFERENCE,
+
+  /// Whether the constructor is from an explicit [ConstructorDeclaration]
+  /// or [PrimaryConstructorDeclaration].
+  ORIGIN_DECLARATION,
+
+  /// Whether the field is from a declaring formal parameter.
+  ORIGIN_DECLARING_FORMAL_PARAMETER,
+
+  /// Whether the field is the `values` field of an enum.
+  ORIGIN_ENUM_VALUES,
+
+  /// Whether the property inducing element is from a getter or setter.
+  ORIGIN_GETTER_SETTER,
+
+  /// Whether the constructor was created because there are no explicit
+  /// constructors.
+  ORIGIN_IMPLICIT_DEFAULT,
+
+  /// Whether the property accessor is created while building interface.
+  ORIGIN_INTERFACE,
+
+  /// Whether the constructor was created for a mixin application.
+  ORIGIN_MIXIN_APPLICATION,
+
+  /// Whether the property accessor is from a field or top-level variable.
+  ORIGIN_VARIABLE,
+
+  /// Whether the constructor is primary.
+  PRIMARY,
+
   PROMOTABLE,
 
   /// Indicates whether the type of a [PropertyInducingFragmentImpl] should be
@@ -8401,9 +8742,35 @@
   List<PropertyAccessorFragmentImpl> get fragments;
 
   @override
+  @trackedIncludedInId
+  bool get isOriginDeclaration {
+    return _firstFragment.isOriginDeclaration;
+  }
+
+  @override
+  @trackedIncludedInId
+  bool get isOriginInterface {
+    return _firstFragment.isOriginInterface;
+  }
+
+  @override
+  @trackedIncludedInId
+  bool get isOriginVariable {
+    return _firstFragment.isOriginVariable;
+  }
+
+  @Deprecated('Use isOriginX instead')
+  @override
+  bool get isSynthetic;
+
+  @override
   @trackedDirectlyOpaque
   PropertyAccessorFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     return super.lastFragment as PropertyAccessorFragmentImpl;
   }
 
@@ -8428,9 +8795,14 @@
   set variable(PropertyInducingElementImpl? value) {
     _variable3 = value;
   }
+
+  @override
+  PropertyAccessorFragmentImpl get _firstFragment;
 }
 
+@GenerateFragmentImpl(modifiers: _PropertyAccessorFragmentImplModifiers.values)
 sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
+    with _PropertyAccessorFragmentImplMixin
     implements PropertyAccessorFragment {
   @override
   final String? name;
@@ -8491,6 +8863,16 @@
 
   TypeImpl? _type;
 
+  /// This field is set during linking, and performs type inference for
+  /// this property. After linking this field is always `null`.
+  @trackedInternal
+  PropertyInducingElementTypeInference? typeInference;
+
+  /// The error reported during type inference for this variable, or `null` if
+  /// this variable is not a subject of type inference, or there was no error.
+  @trackedIncludedInId
+  TopLevelInferenceError? typeInferenceError;
+
   PropertyInducingElementImpl() {
     shouldUseTypeForInitializerInference = true;
   }
@@ -8501,7 +8883,11 @@
   @override
   @trackedDirectlyOpaque
   List<PropertyInducingFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -8513,6 +8899,18 @@
 
   @override
   @trackedIncludedInId
+  bool get isOriginDeclaration {
+    return _firstFragment.isOriginDeclaration;
+  }
+
+  @override
+  @trackedIncludedInId
+  bool get isOriginGetterSetter {
+    return _firstFragment.isOriginGetterSetter;
+  }
+
+  @override
+  @trackedIncludedInId
   LibraryElementImpl get library => super.library!;
 
   @override
@@ -8552,7 +8950,7 @@
     }
 
     // We must be linking, and the type has not been set yet.
-    var type = _firstFragment.typeInference?.perform();
+    var type = typeInference?.perform();
     type ??= InvalidTypeImpl.instance;
     this.type = type;
     shouldUseTypeForInitializerInference = false;
@@ -8565,13 +8963,13 @@
     _type = value;
 
     if (getter case var getter?) {
-      if (getter.isSynthetic) {
+      if (getter.isOriginVariable) {
         getter.returnType = type;
       }
     }
 
     if (setter case var setter?) {
-      if (setter.isSynthetic) {
+      if (setter.isOriginVariable) {
         setter.returnType = VoidTypeImpl.instance;
         setter.valueFormalParameter.type = type;
       }
@@ -8597,9 +8995,10 @@
   TypeImpl perform();
 }
 
+@GenerateFragmentImpl(modifiers: _PropertyInducingFragmentImplModifiers.values)
 abstract class PropertyInducingFragmentImpl
     extends NonParameterVariableFragmentImpl
-    with DeferredResolutionReadingMixin
+    with DeferredResolutionReadingMixin, _PropertyInducingFragmentImplMixin
     implements PropertyInducingFragment {
   @override
   final String? name;
@@ -8613,14 +9012,6 @@
   @override
   PropertyInducingFragmentImpl? nextFragment;
 
-  /// This field is set during linking, and performs type inference for
-  /// this property. After linking this field is always `null`.
-  PropertyInducingElementTypeInference? typeInference;
-
-  /// The error reported during type inference for this variable, or `null` if
-  /// this variable is not a subject of type inference, or there was no error.
-  TopLevelInferenceError? typeInferenceError;
-
   /// Initialize a newly created synthetic element to have the given [name] and
   /// [offset].
   PropertyInducingFragmentImpl({required this.name});
@@ -8686,14 +9077,22 @@
   @override
   @trackedDirectlyOpaque
   SetterFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<SetterFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -8704,7 +9103,11 @@
   @override
   @trackedDirectlyOpaque
   SetterFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     return super.lastFragment as SetterFragmentImpl;
   }
 
@@ -8720,7 +9123,7 @@
   @override
   @trackedIndirectly
   Element get nonSynthetic {
-    if (isSynthetic) {
+    if (isOriginVariable) {
       return variable.nonSynthetic;
     } else {
       return this;
@@ -8730,7 +9133,7 @@
   @override
   @trackedIndirectly
   Version? get sinceSdkVersion {
-    if (isSynthetic) {
+    if (isOriginVariable) {
       return variable.sinceSdkVersion;
     }
     return super.sinceSdkVersion;
@@ -8756,7 +9159,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitSetterElement(this);
   }
 
@@ -9030,14 +9437,22 @@
   @override
   @trackedDirectlyOpaque
   TopLevelFunctionFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<TopLevelFunctionFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -9060,7 +9475,11 @@
   @override
   @trackedDirectlyOpaque
   TopLevelFunctionFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     return super.lastFragment as TopLevelFunctionFragmentImpl;
   }
 
@@ -9083,7 +9502,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitTopLevelFunctionElement(this);
   }
 
@@ -9166,14 +9589,22 @@
   @override
   @trackedDirectlyOpaque
   TopLevelVariableFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<TopLevelVariableFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -9201,6 +9632,7 @@
   @trackedIncludedInId
   bool get isStatic => _firstFragment.isStatic;
 
+  @Deprecated('Use isOriginX instead')
   @override
   @trackedIncludedInId
   bool get isSynthetic {
@@ -9213,7 +9645,11 @@
 
   @trackedDirectlyOpaque
   TopLevelVariableFragmentImpl get lastFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'lastFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueLastFragment,
+      target: this,
+      method: 'lastFragment',
+    );
     var current = firstFragment;
     while (current.nextFragment != null) {
       current = current.nextFragment!;
@@ -9250,7 +9686,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitTopLevelVariableElement(this);
   }
 
@@ -9352,14 +9792,22 @@
   @override
   @trackedDirectlyOpaque
   TypeAliasFragmentImpl get firstFragment {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'firstFragment');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFirstFragment,
+      target: this,
+      method: 'firstFragment',
+    );
     return _firstFragment;
   }
 
   @override
   @trackedDirectlyOpaque
   List<TypeAliasFragmentImpl> get fragments {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'fragments');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueFragments,
+      target: this,
+      method: 'fragments',
+    );
     return _fragments;
   }
 
@@ -9461,7 +9909,11 @@
   @override
   @trackedDirectlyOpaque
   T? accept<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'accept');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueAccept,
+      target: this,
+      method: 'accept',
+    );
     return visitor.visitTypeAliasElement(this);
   }
 
@@ -9985,7 +10437,11 @@
   @override
   @trackedDirectlyOpaque
   void visitChildren<T>(ElementVisitor2<T> visitor) {
-    globalResultRequirements?.recordOpaqueApiUse(this, 'visitChildren');
+    globalResultRequirements?.recordOpaqueApiUse(
+      kindId: RequirementFailureKindId.opaqueVisitChildren,
+      target: this,
+      method: 'visitChildren',
+    );
     for (var child in children) {
       child.accept(visitor);
     }
@@ -10053,7 +10509,15 @@
   isSealed,
 }
 
-enum _ConstructorFragmentImplModifiers { isConst, isFactory }
+enum _ConstructorFragmentImplModifiers {
+  isConst,
+  isDeclaring,
+  isFactory,
+  isOriginDeclaration,
+  isOriginImplicitDefault,
+  isOriginMixinApplication,
+  isPrimary,
+}
 
 enum _ExecutableFragmentImplModifiers {
   hasImplicitReturnType,
@@ -10073,10 +10537,14 @@
   isStatic,
 }
 
+enum _FieldFormalParameterFragmentModifiers { isDeclaring }
+
 enum _FieldFragmentImplModifiers {
   /// Whether the field was explicitly marked as being covariant.
   isExplicitlyCovariant,
   isEnumConstant,
+  isOriginDeclaringFormalParameter,
+  isOriginEnumValues,
   isPromotable,
 }
 
@@ -10098,6 +10566,17 @@
 
 enum _NonParameterVariableFragmentImplModifiers { hasInitializer }
 
+enum _PropertyAccessorFragmentImplModifiers {
+  isOriginDeclaration,
+  isOriginInterface,
+  isOriginVariable,
+}
+
+enum _PropertyInducingFragmentImplModifiers {
+  isOriginDeclaration,
+  isOriginGetterSetter,
+}
+
 /// Instances of [List]s that are used as "not yet computed" values, they
 /// must be not `null`, and not identical to `const <T>[]`.
 class _Sentinel {
diff --git a/pkg/analyzer/lib/src/dart/element/element.g.dart b/pkg/analyzer/lib/src/dart/element/element.g.dart
index 59a9b99..715d3c3 100644
--- a/pkg/analyzer/lib/src/dart/element/element.g.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.g.dart
@@ -91,6 +91,14 @@
     setModifier(Modifier.CONST, value);
   }
 
+  bool get isDeclaring {
+    return hasModifier(Modifier.DECLARING);
+  }
+
+  set isDeclaring(bool value) {
+    setModifier(Modifier.DECLARING, value);
+  }
+
   bool get isFactory {
     return hasModifier(Modifier.FACTORY);
   }
@@ -99,6 +107,38 @@
     setModifier(Modifier.FACTORY, value);
   }
 
+  bool get isOriginDeclaration {
+    return hasModifier(Modifier.ORIGIN_DECLARATION);
+  }
+
+  set isOriginDeclaration(bool value) {
+    setModifier(Modifier.ORIGIN_DECLARATION, value);
+  }
+
+  bool get isOriginImplicitDefault {
+    return hasModifier(Modifier.ORIGIN_IMPLICIT_DEFAULT);
+  }
+
+  set isOriginImplicitDefault(bool value) {
+    setModifier(Modifier.ORIGIN_IMPLICIT_DEFAULT, value);
+  }
+
+  bool get isOriginMixinApplication {
+    return hasModifier(Modifier.ORIGIN_MIXIN_APPLICATION);
+  }
+
+  set isOriginMixinApplication(bool value) {
+    setModifier(Modifier.ORIGIN_MIXIN_APPLICATION, value);
+  }
+
+  bool get isPrimary {
+    return hasModifier(Modifier.PRIMARY);
+  }
+
+  set isPrimary(bool value) {
+    setModifier(Modifier.PRIMARY, value);
+  }
+
   bool hasModifier(Modifier modifier);
 
   void setModifier(Modifier modifier, bool value);
@@ -172,6 +212,20 @@
   void setModifier(Modifier modifier, bool value);
 }
 
+mixin _FieldFormalParameterFragmentImplMixin {
+  bool get isDeclaring {
+    return hasModifier(Modifier.DECLARING);
+  }
+
+  set isDeclaring(bool value) {
+    setModifier(Modifier.DECLARING, value);
+  }
+
+  bool hasModifier(Modifier modifier);
+
+  void setModifier(Modifier modifier, bool value);
+}
+
 mixin _FieldFragmentImplMixin {
   bool get isEnumConstant {
     return hasModifier(Modifier.ENUM_CONSTANT);
@@ -190,6 +244,22 @@
     setModifier(Modifier.EXPLICITLY_COVARIANT, value);
   }
 
+  bool get isOriginDeclaringFormalParameter {
+    return hasModifier(Modifier.ORIGIN_DECLARING_FORMAL_PARAMETER);
+  }
+
+  set isOriginDeclaringFormalParameter(bool value) {
+    setModifier(Modifier.ORIGIN_DECLARING_FORMAL_PARAMETER, value);
+  }
+
+  bool get isOriginEnumValues {
+    return hasModifier(Modifier.ORIGIN_ENUM_VALUES);
+  }
+
+  set isOriginEnumValues(bool value) {
+    setModifier(Modifier.ORIGIN_ENUM_VALUES, value);
+  }
+
   bool get isPromotable {
     return hasModifier(Modifier.PROMOTABLE);
   }
@@ -271,6 +341,58 @@
   void setModifier(Modifier modifier, bool value);
 }
 
+mixin _PropertyAccessorFragmentImplMixin {
+  bool get isOriginDeclaration {
+    return hasModifier(Modifier.ORIGIN_DECLARATION);
+  }
+
+  set isOriginDeclaration(bool value) {
+    setModifier(Modifier.ORIGIN_DECLARATION, value);
+  }
+
+  bool get isOriginInterface {
+    return hasModifier(Modifier.ORIGIN_INTERFACE);
+  }
+
+  set isOriginInterface(bool value) {
+    setModifier(Modifier.ORIGIN_INTERFACE, value);
+  }
+
+  bool get isOriginVariable {
+    return hasModifier(Modifier.ORIGIN_VARIABLE);
+  }
+
+  set isOriginVariable(bool value) {
+    setModifier(Modifier.ORIGIN_VARIABLE, value);
+  }
+
+  bool hasModifier(Modifier modifier);
+
+  void setModifier(Modifier modifier, bool value);
+}
+
+mixin _PropertyInducingFragmentImplMixin {
+  bool get isOriginDeclaration {
+    return hasModifier(Modifier.ORIGIN_DECLARATION);
+  }
+
+  set isOriginDeclaration(bool value) {
+    setModifier(Modifier.ORIGIN_DECLARATION, value);
+  }
+
+  bool get isOriginGetterSetter {
+    return hasModifier(Modifier.ORIGIN_GETTER_SETTER);
+  }
+
+  set isOriginGetterSetter(bool value) {
+    setModifier(Modifier.ORIGIN_GETTER_SETTER, value);
+  }
+
+  bool hasModifier(Modifier modifier);
+
+  void setModifier(Modifier modifier, bool value);
+}
+
 mixin _VariableFragmentImplMixin {
   /// Whether the variable element did not have an explicit type specified
   /// for it.
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index d5473f3..5f0329c 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -19,8 +19,7 @@
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
-import 'package:analyzer/src/error/codes.dart'
-    show CompileTimeErrorCode, WarningCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:collection/collection.dart';
 
@@ -372,7 +371,7 @@
 
         _diagnosticReporter?.atEntity(
           errorEntity!,
-          CompileTimeErrorCode.couldNotInfer,
+          diag.couldNotInfer,
           arguments: [name, _formatError(parameter, inferred, constraints)],
         );
 
@@ -401,7 +400,7 @@
         var typeParametersStr = typeParameters.map(_elementStr).join(', ');
         _diagnosticReporter.atEntity(
           errorEntity!,
-          CompileTimeErrorCode.couldNotInfer,
+          diag.couldNotInfer,
           arguments: [
             name,
             ' Inferred candidate type ${_typeStr(inferred)} has type parameters'
@@ -456,7 +455,7 @@
         // TODO(jmesserly): improve this error message.
         _diagnosticReporter?.atEntity(
           errorEntity!,
-          CompileTimeErrorCode.couldNotInfer,
+          diag.couldNotInfer,
           arguments: [
             name,
             "\nRecursive bound cannot be instantiated: '$typeParamBound'."
@@ -508,7 +507,7 @@
       if (!_typeSystem.isSubtypeOf(argument, bound)) {
         diagnosticReporter?.atEntity(
           errorEntity!,
-          CompileTimeErrorCode.couldNotInfer,
+          diag.couldNotInfer,
           arguments: [
             name,
             "\n'${_typeStr(argument)}' doesn't conform to "
@@ -607,7 +606,7 @@
           : '${errorEntity.type}.${errorEntity.name}';
       diagnosticReporter.atNode(
         errorEntity,
-        WarningCode.inferenceFailureOnInstanceCreation,
+        diag.inferenceFailureOnInstanceCreation,
         arguments: [constructorName],
       );
     } else if (errorEntity is Annotation) {
@@ -620,7 +619,7 @@
               : '${errorEntity.name.name}.${errorEntity.constructorName}';
           diagnosticReporter.atNode(
             errorEntity,
-            WarningCode.inferenceFailureOnInstanceCreation,
+            diag.inferenceFailureOnInstanceCreation,
             arguments: [constructorName],
           );
         }
@@ -644,7 +643,7 @@
         if (!element.metadata.hasOptionalTypeArgs) {
           diagnosticReporter.atNode(
             errorEntity,
-            WarningCode.inferenceFailureOnFunctionInvocation,
+            diag.inferenceFailureOnFunctionInvocation,
             arguments: [errorEntity.name],
           );
           return;
@@ -656,7 +655,7 @@
         var typeDisplayString = _typeStr(type);
         diagnosticReporter.atNode(
           errorEntity,
-          WarningCode.inferenceFailureOnGenericInvocation,
+          diag.inferenceFailureOnGenericInvocation,
           arguments: [typeDisplayString],
         );
         return;
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 44a8211..6b7b0a3 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -405,7 +405,23 @@
       return null;
     }
 
-    (_combinedSignatures[targetClass] ??= {})[name] = candidates;
+    // https://github.com/flutter/flutter/issues/178925#issuecomment-3573399510
+    // TODO(scheglov): Consider having only one merge pass of candidates.
+    var expandedCandidates = candidates;
+    if (candidates.any((c) => c.enclosingElement == targetClass)) {
+      expandedCandidates = [];
+      for (var candidate in candidates) {
+        if (candidate.enclosingElement == targetClass) {
+          if (_combinedSignatures[targetClass]?[name] case var previous?) {
+            expandedCandidates.addAll(previous);
+            continue;
+          }
+        }
+        expandedCandidates.add(candidate);
+      }
+    }
+
+    (_combinedSignatures[targetClass] ??= {})[name] = expandedCandidates;
 
     return _topMerge(typeSystem, targetClass, validOverrides);
   }
@@ -1014,6 +1030,7 @@
       var resultFragment = SetterFragmentImpl(name: executable.name);
       resultFragment.enclosingFragment = class_.firstFragment;
       resultFragment.isSynthetic = true;
+      resultFragment.isOriginInterface = true;
       resultFragment.formalParameters = transformedParameters
           .map((e) => e.firstFragment)
           .toList();
@@ -1023,6 +1040,8 @@
 
       var resultField = FieldFragmentImpl(name: executable.name);
       resultField.enclosingFragment = class_.firstFragment;
+      resultField.isOriginGetterSetter = true;
+      resultField.isSynthetic = true;
 
       var elementName = executable.name!;
       var fieldReference = class_.reference!
@@ -1101,6 +1120,8 @@
       var firstElement = first as InternalPropertyAccessorElement;
       var fragmentName = first.name!;
       var field = FieldFragmentImpl(name: fragmentName);
+      field.isOriginGetterSetter = true;
+      field.isSynthetic = true;
 
       PropertyAccessorFragmentImpl resultFragment;
       PropertyAccessorElementImpl resultElement;
@@ -1130,6 +1151,7 @@
 
         var fragment = SetterFragmentImpl(name: fragmentName);
         resultFragment = fragment;
+        resultFragment.isOriginInterface = true;
 
         var element = SetterElementImpl(elementReference, fragment);
         element.returnType = resultType.returnType;
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index d058210..92f0fb4 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -50,6 +50,9 @@
   bool get isConst => baseElement.isConst;
 
   @override
+  bool get isDeclaring => baseElement.isDeclaring;
+
+  @override
   bool get isDefaultConstructor => baseElement.isDefaultConstructor;
 
   @override
@@ -59,6 +62,18 @@
   bool get isGenerative => baseElement.isGenerative;
 
   @override
+  bool get isOriginDeclaration => baseElement.isOriginDeclaration;
+
+  @override
+  bool get isOriginImplicitDefault => baseElement.isOriginImplicitDefault;
+
+  @override
+  bool get isOriginMixinApplication => baseElement.isOriginMixinApplication;
+
+  @override
+  bool get isPrimary => baseElement.isPrimary;
+
+  @override
   LibraryElementImpl get library => baseElement.library;
 
   @override
@@ -400,6 +415,11 @@
   List<Element> get children => const [];
 
   @override
+  FieldFormalParameterElementImpl? get declaringFormalParameter {
+    return baseElement.declaringFormalParameter;
+  }
+
+  @override
   String? get documentationComment => baseElement.documentationComment;
 
   @override
@@ -441,6 +461,19 @@
   bool get isExternal => baseElement.isExternal;
 
   @override
+  bool get isOriginDeclaration => baseElement.isOriginDeclaration;
+
+  @override
+  bool get isOriginDeclaringFormalParameter =>
+      baseElement.isOriginDeclaringFormalParameter;
+
+  @override
+  bool get isOriginEnumValues => baseElement.isOriginEnumValues;
+
+  @override
+  bool get isOriginGetterSetter => baseElement.isOriginGetterSetter;
+
+  @override
   bool get isPromotable => baseElement.isPromotable;
 
   @override
@@ -541,6 +574,12 @@
 
   @override
   bool get isCovariant => baseElement.isCovariant;
+
+  @override
+  bool get isDeclaring => baseElement.isDeclaring;
+
+  @override
+  String? get privateName => baseElement.privateName;
 }
 
 /// A parameter element defined in a parameterized type where the values of the
@@ -883,6 +922,15 @@
   PropertyAccessorFragmentImpl get firstFragment;
 
   @override
+  bool get isOriginDeclaration => baseElement.isOriginDeclaration;
+
+  @override
+  bool get isOriginInterface => baseElement.isOriginInterface;
+
+  @override
+  bool get isOriginVariable => baseElement.isOriginVariable;
+
+  @override
   Version? get sinceSdkVersion => baseElement.sinceSdkVersion;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index 4a9efa1..9099467 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -23,7 +23,15 @@
       if (formalParameter.name == '_' && hasWildcardVariables) {
         continue;
       }
-      _addGetter(formalParameter);
+
+      // If the parameter is a private named parameter, then the formal
+      // parameter's name is the public name, but in the constructor initializer
+      // list, it is referred to by its private name.
+      if (formalParameter case FieldFormalParameterElement(:var privateName?)) {
+        _getters[privateName] ??= formalParameter;
+      } else {
+        _addGetter(formalParameter);
+      }
     }
   }
 }
@@ -266,6 +274,37 @@
     element.setters.forEach(_addSetter);
     element.methods.forEach(_addGetter);
   }
+
+  @override
+  ScopeLookupResult lookup(String id) {
+    // When a lexical lookup encounters an instance member with the requested
+    // basename, the returned result should have null as the getter and setter
+    // (and that is the result, so we should not search the enclosing scope).
+    // This corresponds to the following rule from the specification:
+    // "Consider the case where D is an instance member declaration in a class
+    // or mixin A. The lexical lookup then yields nothing."
+    var getter = _getters[id];
+    var setter = _setters[id];
+    if (getter == null && setter == null) {
+      return _parent.lookup(id);
+    }
+    if (_isStatic(getter) || _isStatic(setter)) {
+      return ScopeLookupResultImpl(getter: getter, setter: setter);
+    }
+    // A declaration with the right basename was found, so the search ends.
+    // Return nulls to ensure that it is handled as with a prepended `this.`.
+    return ScopeLookupResultImpl(getter: null, setter: null);
+  }
+
+  static bool _isStatic(Element? element) {
+    switch (element) {
+      case PropertyAccessorElement(:var isStatic) ||
+          MethodElement(:var isStatic):
+        return isStatic;
+      default:
+        return false;
+    }
+  }
 }
 
 /// The top-level declarations of the library.
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.dart
deleted file mode 100644
index 0b457b3..0000000
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:_fe_analyzer_shared/src/base/errors.dart';
-import 'package:analyzer/dart/element/type.dart';
-
-part 'package:analyzer/src/dart/error/ffi_code.g.dart';
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
deleted file mode 100644
index 62277d2..0000000
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.g.dart
+++ /dev/null
@@ -1,965 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/dart/error/ffi_code.dart";
-
-class FfiCode extends DiagnosticCodeWithExpectedTypes {
-  /// No parameters.
-  static const FfiWithoutArguments
-  abiSpecificIntegerInvalid = FfiWithoutArguments(
-    name: 'ABI_SPECIFIC_INTEGER_INVALID',
-    problemMessage:
-        "Classes extending 'AbiSpecificInteger' must have exactly one const "
-        "constructor, no other members, and no type parameters.",
-    correctionMessage:
-        "Try removing all type parameters, removing all members, and adding "
-        "one const constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ABI_SPECIFIC_INTEGER_INVALID',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  abiSpecificIntegerMappingExtra = FfiWithoutArguments(
-    name: 'ABI_SPECIFIC_INTEGER_MAPPING_EXTRA',
-    problemMessage:
-        "Classes extending 'AbiSpecificInteger' must have exactly one "
-        "'AbiSpecificIntegerMapping' annotation specifying the mapping from "
-        "ABI to a 'NativeType' integer with a fixed size.",
-    correctionMessage: "Try removing the extra annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_EXTRA',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  abiSpecificIntegerMappingMissing = FfiWithoutArguments(
-    name: 'ABI_SPECIFIC_INTEGER_MAPPING_MISSING',
-    problemMessage:
-        "Classes extending 'AbiSpecificInteger' must have exactly one "
-        "'AbiSpecificIntegerMapping' annotation specifying the mapping from "
-        "ABI to a 'NativeType' integer with a fixed size.",
-    correctionMessage: "Try adding an annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the value of the invalid mapping
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  abiSpecificIntegerMappingUnsupported = FfiTemplate(
-    name: 'ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED',
-    problemMessage:
-        "Invalid mapping to '{0}'; only mappings to 'Int8', 'Int16', 'Int32', "
-        "'Int64', 'Uint8', 'Uint16', 'UInt32', and 'Uint64' are supported.",
-    correctionMessage:
-        "Try changing the value to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', "
-        "'Uint16', 'UInt32', or 'Uint64'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED',
-    withArguments: _withArgumentsAbiSpecificIntegerMappingUnsupported,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments addressPosition = FfiWithoutArguments(
-    name: 'ADDRESS_POSITION',
-    problemMessage:
-        "The '.address' expression can only be used as argument to a leaf native "
-        "external call.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ADDRESS_POSITION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments addressReceiver = FfiWithoutArguments(
-    name: 'ADDRESS_RECEIVER',
-    problemMessage:
-        "The receiver of '.address' must be a concrete 'TypedData', a concrete "
-        "'TypedData' '[]', an 'Array', an 'Array' '[]', a Struct field, or a "
-        "Union field.",
-    correctionMessage:
-        "Change the receiver of '.address' to one of the allowed kinds.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ADDRESS_RECEIVER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  annotationOnPointerField = FfiWithoutArguments(
-    name: 'ANNOTATION_ON_POINTER_FIELD',
-    problemMessage:
-        "Fields in a struct class whose type is 'Pointer' shouldn't have any "
-        "annotations.",
-    correctionMessage: "Try removing the annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ANNOTATION_ON_POINTER_FIELD',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the argument
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  argumentMustBeAConstant = FfiTemplate(
-    name: 'ARGUMENT_MUST_BE_A_CONSTANT',
-    problemMessage: "Argument '{0}' must be a constant.",
-    correctionMessage: "Try replacing the value with a literal or const.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ARGUMENT_MUST_BE_A_CONSTANT',
-    withArguments: _withArgumentsArgumentMustBeAConstant,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments argumentMustBeNative = FfiWithoutArguments(
-    name: 'ARGUMENT_MUST_BE_NATIVE',
-    problemMessage:
-        "Argument to 'Native.addressOf' must be annotated with @Native",
-    correctionMessage:
-        "Try passing a static function or field annotated with '@Native'",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.ARGUMENT_MUST_BE_NATIVE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the struct or union class
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  compoundImplementsFinalizable = FfiTemplate(
-    name: 'COMPOUND_IMPLEMENTS_FINALIZABLE',
-    problemMessage: "The class '{0}' can't implement Finalizable.",
-    correctionMessage: "Try removing the implements clause from '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.COMPOUND_IMPLEMENTS_FINALIZABLE',
-    withArguments: _withArgumentsCompoundImplementsFinalizable,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  creationOfStructOrUnion = FfiWithoutArguments(
-    name: 'CREATION_OF_STRUCT_OR_UNION',
-    problemMessage:
-        "Subclasses of 'Struct' and 'Union' are backed by native memory, and can't "
-        "be instantiated by a generative constructor.",
-    correctionMessage:
-        "Try allocating it via allocation, or load from a 'Pointer'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.CREATION_OF_STRUCT_OR_UNION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subclass
-  /// String p1: the name of the superclass
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  emptyStruct = FfiTemplate(
-    name: 'EMPTY_STRUCT',
-    problemMessage:
-        "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,
-    uniqueNameCheck: 'FfiCode.EMPTY_STRUCT',
-    withArguments: _withArgumentsEmptyStruct,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  extraAnnotationOnStructField = FfiWithoutArguments(
-    name: 'EXTRA_ANNOTATION_ON_STRUCT_FIELD',
-    problemMessage:
-        "Fields in a struct class must have exactly one annotation indicating the "
-        "native type.",
-    correctionMessage: "Try removing the extra annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.EXTRA_ANNOTATION_ON_STRUCT_FIELD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments extraSizeAnnotationCarray =
-      FfiWithoutArguments(
-        name: 'EXTRA_SIZE_ANNOTATION_CARRAY',
-        problemMessage: "'Array's must have exactly one 'Array' annotation.",
-        correctionMessage: "Try removing the extra annotation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.EXTRA_SIZE_ANNOTATION_CARRAY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const FfiWithoutArguments ffiNativeInvalidDuplicateDefaultAsset =
-      FfiWithoutArguments(
-        name: 'FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET',
-        problemMessage:
-            "There may be at most one @DefaultAsset annotation on a library.",
-        correctionMessage: "Try removing the extra annotation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  ffiNativeInvalidMultipleAnnotations = FfiWithoutArguments(
-    name: 'FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS',
-    problemMessage:
-        "Native functions and fields must have exactly one `@Native` annotation.",
-    correctionMessage: "Try removing the extra annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments ffiNativeMustBeExternal =
-      FfiWithoutArguments(
-        name: 'FFI_NATIVE_MUST_BE_EXTERNAL',
-        problemMessage: "Native functions must be declared external.",
-        correctionMessage: "Add the `external` keyword to the function.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.FFI_NATIVE_MUST_BE_EXTERNAL',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer = FfiWithoutArguments(
-    name:
-        'FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER',
-    problemMessage:
-        "Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.",
-    correctionMessage: "Pass as Handle instead.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'FfiCode.FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// int p0: the expected number of parameters
-  /// int p1: the actual number of parameters
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  ffiNativeUnexpectedNumberOfParameters = FfiTemplate(
-    name: 'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS',
-    problemMessage:
-        "Unexpected number of Native annotation parameters. Expected {0} but has "
-        "{1}.",
-    correctionMessage: "Make sure parameters match the function annotated.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS',
-    withArguments: _withArgumentsFfiNativeUnexpectedNumberOfParameters,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the expected number of parameters
-  /// int p1: the actual number of parameters
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  ffiNativeUnexpectedNumberOfParametersWithReceiver = FfiTemplate(
-    name: 'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER',
-    problemMessage:
-        "Unexpected number of Native annotation parameters. Expected {0} but has "
-        "{1}. Native instance method annotation must have receiver as first "
-        "argument.",
-    correctionMessage:
-        "Make sure parameters match the function annotated, including an extra "
-        "first parameter for the receiver.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'FfiCode.FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER',
-    withArguments:
-        _withArgumentsFfiNativeUnexpectedNumberOfParametersWithReceiver,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  fieldMustBeExternalInStruct = FfiWithoutArguments(
-    name: 'FIELD_MUST_BE_EXTERNAL_IN_STRUCT',
-    problemMessage:
-        "Fields of 'Struct' and 'Union' subclasses must be marked external.",
-    correctionMessage: "Try adding the 'external' modifier.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the struct class
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  genericStructSubclass = FfiTemplate(
-    name: 'GENERIC_STRUCT_SUBCLASS',
-    problemMessage:
-        "The class '{0}' can't extend 'Struct' or 'Union' because '{0}' is "
-        "generic.",
-    correctionMessage: "Try removing the type parameters from '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.GENERIC_STRUCT_SUBCLASS',
-    withArguments: _withArgumentsGenericStructSubclass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  invalidExceptionValue = FfiTemplate(
-    name: 'INVALID_EXCEPTION_VALUE',
-    problemMessage:
-        "The method {0} 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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.INVALID_EXCEPTION_VALUE',
-    withArguments: _withArgumentsInvalidExceptionValue,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the type of the field
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  invalidFieldTypeInStruct = FfiTemplate(
-    name: 'INVALID_FIELD_TYPE_IN_STRUCT',
-    problemMessage:
-        "Fields in struct classes can't have the type '{0}'. They can only be "
-        "declared as 'int', 'double', 'Array', 'Pointer', or subtype of "
-        "'Struct' or 'Union'.",
-    correctionMessage:
-        "Try using 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' "
-        "or 'Union'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.INVALID_FIELD_TYPE_IN_STRUCT',
-    withArguments: _withArgumentsInvalidFieldTypeInStruct,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments leafCallMustNotReturnHandle =
-      FfiWithoutArguments(
-        name: 'LEAF_CALL_MUST_NOT_RETURN_HANDLE',
-        problemMessage: "FFI leaf call can't return a 'Handle'.",
-        correctionMessage:
-            "Try changing the return type to primitive or struct.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.LEAF_CALL_MUST_NOT_RETURN_HANDLE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const FfiWithoutArguments leafCallMustNotTakeHandle =
-      FfiWithoutArguments(
-        name: 'LEAF_CALL_MUST_NOT_TAKE_HANDLE',
-        problemMessage: "FFI leaf call can't take arguments of type 'Handle'.",
-        correctionMessage:
-            "Try changing the argument type to primitive or struct.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.LEAF_CALL_MUST_NOT_TAKE_HANDLE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const FfiWithoutArguments mismatchedAnnotationOnStructField =
-      FfiWithoutArguments(
-        name: 'MISMATCHED_ANNOTATION_ON_STRUCT_FIELD',
-        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.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.MISMATCHED_ANNOTATION_ON_STRUCT_FIELD',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the type that is missing a native type annotation
-  /// String p1: the superclass which is extended by this field's class
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required DartType p0, required String p1})
-  >
-  missingAnnotationOnStructField = FfiTemplate(
-    name: 'MISSING_ANNOTATION_ON_STRUCT_FIELD',
-    problemMessage:
-        "Fields of type '{0}' in a subclass of '{1}' must have an annotation "
-        "indicating the native type.",
-    correctionMessage: "Try adding an annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.MISSING_ANNOTATION_ON_STRUCT_FIELD',
-    withArguments: _withArgumentsMissingAnnotationOnStructField,
-    expectedTypes: [ExpectedType.type, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  missingExceptionValue = FfiTemplate(
-    name: 'MISSING_EXCEPTION_VALUE',
-    problemMessage:
-        "The method {0} 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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.MISSING_EXCEPTION_VALUE',
-    withArguments: _withArgumentsMissingExceptionValue,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  missingFieldTypeInStruct = FfiWithoutArguments(
-    name: 'MISSING_FIELD_TYPE_IN_STRUCT',
-    problemMessage:
-        "Fields in struct classes must have an explicitly declared type of 'int', "
-        "'double' or 'Pointer'.",
-    correctionMessage: "Try using 'int', 'double' or 'Pointer'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.MISSING_FIELD_TYPE_IN_STRUCT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments missingSizeAnnotationCarray =
-      FfiWithoutArguments(
-        name: 'MISSING_SIZE_ANNOTATION_CARRAY',
-        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.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.MISSING_SIZE_ANNOTATION_CARRAY',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the type that should be a valid dart:ffi native type.
-  /// String p1: the name of the function whose invocation depends on this
-  ///            relationship
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required Object p0, required String p1})
-  >
-  mustBeANativeFunctionType = FfiTemplate(
-    name: 'MUST_BE_A_NATIVE_FUNCTION_TYPE',
-    problemMessage:
-        "The type '{0}' given to '{1}' must be a valid 'dart:ffi' native function "
-        "type.",
-    correctionMessage:
-        "Try changing the type to only use members for 'dart:ffi'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.MUST_BE_A_NATIVE_FUNCTION_TYPE',
-    withArguments: _withArgumentsMustBeANativeFunctionType,
-    expectedTypes: [ExpectedType.object, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the type that should be a subtype
-  /// Type p1: the supertype that the subtype is compared to
-  /// String p2: the name of the function whose invocation depends on this
-  ///            relationship
-  static const FfiTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required String p2,
-    })
-  >
-  mustBeASubtype = FfiTemplate(
-    name: 'MUST_BE_A_SUBTYPE',
-    problemMessage: "The type '{0}' must be a subtype of '{1}' for '{2}'.",
-    correctionMessage: "Try changing one or both of the type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.MUST_BE_A_SUBTYPE',
-    withArguments: _withArgumentsMustBeASubtype,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type that should be 'void'.
-  static const FfiTemplate<LocatableDiagnostic Function({required DartType p0})>
-  mustReturnVoid = FfiTemplate(
-    name: 'MUST_RETURN_VOID',
-    problemMessage:
-        "The return type of the function passed to 'NativeCallable.listener' must "
-        "be 'void' rather than '{0}'.",
-    correctionMessage: "Try changing the return type to 'void'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.MUST_RETURN_VOID',
-    withArguments: _withArgumentsMustReturnVoid,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: The invalid type.
-  static const FfiTemplate<LocatableDiagnostic Function({required DartType p0})>
-  nativeFieldInvalidType = FfiTemplate(
-    name: 'NATIVE_FIELD_INVALID_TYPE',
-    problemMessage:
-        "'{0}' is an unsupported type for native fields. Native fields only "
-        "support pointers, arrays or numeric and compound types.",
-    correctionMessage:
-        "Try changing the type in the `@Native` annotation to a numeric FFI "
-        "type, a pointer, array, or a compound class.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NATIVE_FIELD_INVALID_TYPE',
-    withArguments: _withArgumentsNativeFieldInvalidType,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments nativeFieldMissingType = FfiWithoutArguments(
-    name: 'NATIVE_FIELD_MISSING_TYPE',
-    problemMessage:
-        "The native type of this field could not be inferred and must be specified "
-        "in the annotation.",
-    correctionMessage:
-        "Try adding a type parameter extending `NativeType` to the `@Native` "
-        "annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NATIVE_FIELD_MISSING_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments nativeFieldNotStatic = FfiWithoutArguments(
-    name: 'NATIVE_FIELD_NOT_STATIC',
-    problemMessage: "Native fields must be static.",
-    correctionMessage: "Try adding the modifier 'static' to this field.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NATIVE_FIELD_NOT_STATIC',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  nativeFunctionMissingType = FfiWithoutArguments(
-    name: 'NATIVE_FUNCTION_MISSING_TYPE',
-    problemMessage:
-        "The native type of this function couldn't be inferred so it must be "
-        "specified in the annotation.",
-    correctionMessage:
-        "Try adding a type parameter extending `NativeType` to the `@Native` "
-        "annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NATIVE_FUNCTION_MISSING_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  negativeVariableDimension = FfiWithoutArguments(
-    name: 'NEGATIVE_VARIABLE_DIMENSION',
-    problemMessage:
-        "The variable dimension of a variable-length array must be non-negative.",
-    correctionMessage: "Try using a value that is zero or greater.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NEGATIVE_VARIABLE_DIMENSION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the function, method, or constructor having type
-  ///            arguments
-  static const FfiTemplate<LocatableDiagnostic Function({required String p0})>
-  nonConstantTypeArgument = FfiTemplate(
-    name: 'NON_CONSTANT_TYPE_ARGUMENT',
-    problemMessage:
-        "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,
-    uniqueNameCheck: 'FfiCode.NON_CONSTANT_TYPE_ARGUMENT',
-    withArguments: _withArgumentsNonConstantTypeArgument,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the type that should be a valid dart:ffi native type.
-  static const FfiTemplate<LocatableDiagnostic Function({required DartType p0})>
-  nonNativeFunctionTypeArgumentToPointer = FfiTemplate(
-    name: 'NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER',
-    problemMessage:
-        "Can't invoke 'asFunction' because the function signature '{0}' for the "
-        "pointer isn't a valid C function signature.",
-    correctionMessage:
-        "Try changing the function argument in 'NativeFunction' to only use "
-        "NativeTypes.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER',
-    withArguments: _withArgumentsNonNativeFunctionTypeArgumentToPointer,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments nonPositiveArrayDimension =
-      FfiWithoutArguments(
-        name: 'NON_POSITIVE_ARRAY_DIMENSION',
-        problemMessage: "Array dimensions must be positive numbers.",
-        correctionMessage: "Try changing the input to a positive number.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'FfiCode.NON_POSITIVE_ARRAY_DIMENSION',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the field
-  /// Type p1: the type of the field
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  nonSizedTypeArgument = FfiTemplate(
-    name: 'NON_SIZED_TYPE_ARGUMENT',
-    problemMessage:
-        "The type '{1}' isn't a valid type argument for '{0}'. The type argument "
-        "must be a native integer, 'Float', 'Double', 'Pointer', or subtype of "
-        "'Struct', 'Union', or 'AbiSpecificInteger'.",
-    correctionMessage:
-        "Try using a native integer, 'Float', 'Double', 'Pointer', or subtype "
-        "of 'Struct', 'Union', or 'AbiSpecificInteger'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.NON_SIZED_TYPE_ARGUMENT',
-    withArguments: _withArgumentsNonSizedTypeArgument,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments packedAnnotation = FfiWithoutArguments(
-    name: 'PACKED_ANNOTATION',
-    problemMessage: "Structs must have at most one 'Packed' annotation.",
-    correctionMessage: "Try removing extra 'Packed' annotations.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.PACKED_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  packedAnnotationAlignment = FfiWithoutArguments(
-    name: 'PACKED_ANNOTATION_ALIGNMENT',
-    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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.PACKED_ANNOTATION_ALIGNMENT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  sizeAnnotationDimensions = FfiWithoutArguments(
-    name: 'SIZE_ANNOTATION_DIMENSIONS',
-    problemMessage:
-        "'Array's must have an 'Array' annotation that matches the dimensions.",
-    correctionMessage: "Try adjusting the arguments in the 'Array' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.SIZE_ANNOTATION_DIMENSIONS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subclass
-  /// String p1: the name of the class being extended, implemented, or mixed in
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  subtypeOfStructClassInExtends = FfiTemplate(
-    name: 'SUBTYPE_OF_STRUCT_CLASS',
-    problemMessage:
-        "The class '{0}' can't extend '{1}' because '{1}' is a subtype of "
-        "'Struct', 'Union', or 'AbiSpecificInteger'.",
-    correctionMessage:
-        "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
-    hasPublishedDocs: true,
-    uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS',
-    uniqueNameCheck: 'FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS',
-    withArguments: _withArgumentsSubtypeOfStructClassInExtends,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subclass
-  /// String p1: the name of the class being extended, implemented, or mixed in
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  subtypeOfStructClassInImplements = FfiTemplate(
-    name: 'SUBTYPE_OF_STRUCT_CLASS',
-    problemMessage:
-        "The class '{0}' can't implement '{1}' because '{1}' is a subtype of "
-        "'Struct', 'Union', or 'AbiSpecificInteger'.",
-    correctionMessage:
-        "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
-    hasPublishedDocs: true,
-    uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS',
-    uniqueNameCheck: 'FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS',
-    withArguments: _withArgumentsSubtypeOfStructClassInImplements,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subclass
-  /// String p1: the name of the class being extended, implemented, or mixed in
-  static const FfiTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  subtypeOfStructClassInWith = FfiTemplate(
-    name: 'SUBTYPE_OF_STRUCT_CLASS',
-    problemMessage:
-        "The class '{0}' can't mix in '{1}' because '{1}' is a subtype of "
-        "'Struct', 'Union', or 'AbiSpecificInteger'.",
-    correctionMessage:
-        "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
-    hasPublishedDocs: true,
-    uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_WITH',
-    uniqueNameCheck: 'FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH',
-    withArguments: _withArgumentsSubtypeOfStructClassInWith,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const FfiWithoutArguments
-  variableLengthArrayNotLast = FfiWithoutArguments(
-    name: 'VARIABLE_LENGTH_ARRAY_NOT_LAST',
-    problemMessage:
-        "Variable length 'Array's must only occur as the last field of Structs.",
-    correctionMessage: "Try adjusting the arguments in the 'Array' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'FfiCode.VARIABLE_LENGTH_ARRAY_NOT_LAST',
-    expectedTypes: [],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const FfiCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.COMPILE_TIME_ERROR,
-         uniqueName: 'FfiCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic
-  _withArgumentsAbiSpecificIntegerMappingUnsupported({required String p0}) {
-    return LocatableDiagnosticImpl(
-      FfiCode.abiSpecificIntegerMappingUnsupported,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsArgumentMustBeAConstant({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.argumentMustBeAConstant, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsCompoundImplementsFinalizable({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.compoundImplementsFinalizable, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsEmptyStruct({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.emptyStruct, [p0, p1]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFfiNativeUnexpectedNumberOfParameters({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      FfiCode.ffiNativeUnexpectedNumberOfParameters,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFfiNativeUnexpectedNumberOfParametersWithReceiver({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      FfiCode.ffiNativeUnexpectedNumberOfParametersWithReceiver,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsGenericStructSubclass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.genericStructSubclass, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidExceptionValue({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.invalidExceptionValue, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidFieldTypeInStruct({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.invalidFieldTypeInStruct, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingAnnotationOnStructField({
-    required DartType p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.missingAnnotationOnStructField, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingExceptionValue({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.missingExceptionValue, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMustBeANativeFunctionType({
-    required Object p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.mustBeANativeFunctionType, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMustBeASubtype({
-    required DartType p0,
-    required DartType p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.mustBeASubtype, [p0, p1, p2]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMustReturnVoid({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.mustReturnVoid, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNativeFieldInvalidType({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.nativeFieldInvalidType, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNonConstantTypeArgument({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.nonConstantTypeArgument, [p0]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonNativeFunctionTypeArgumentToPointer({required DartType p0}) {
-    return LocatableDiagnosticImpl(
-      FfiCode.nonNativeFunctionTypeArgumentToPointer,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonSizedTypeArgument({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.nonSizedTypeArgument, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSubtypeOfStructClassInExtends({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.subtypeOfStructClassInExtends, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSubtypeOfStructClassInImplements({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.subtypeOfStructClassInImplements, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSubtypeOfStructClassInWith({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(FfiCode.subtypeOfStructClassInWith, [
-      p0,
-      p1,
-    ]);
-  }
-}
-
-final class FfiTemplate<T extends Function> extends FfiCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const FfiTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class FfiWithoutArguments extends FfiCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const FfiWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
deleted file mode 100644
index d79d614..0000000
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ /dev/null
@@ -1,7 +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:_fe_analyzer_shared/src/base/errors.dart';
-
-part 'package:analyzer/src/dart/error/hint_codes.g.dart';
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
deleted file mode 100644
index 2effa3f..0000000
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.g.dart
+++ /dev/null
@@ -1,170 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/dart/error/hint_codes.dart";
-
-class HintCode extends DiagnosticCodeWithExpectedTypes {
-  /// Note: Since this diagnostic is only produced in pre-3.0 code, we do not
-  /// plan to go through the exercise of converting it to a Warning.
-  ///
-  /// No parameters.
-  static const HintWithoutArguments
-  deprecatedColonForDefaultValue = HintWithoutArguments(
-    name: 'DEPRECATED_COLON_FOR_DEFAULT_VALUE',
-    problemMessage:
-        "Using a colon as the separator before a default value is deprecated and "
-        "will not be supported in language version 3.0 and later.",
-    correctionMessage: "Try replacing the colon with an equal sign.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'HintCode.DEPRECATED_COLON_FOR_DEFAULT_VALUE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const HintTemplate<LocatableDiagnostic Function({required String p0})>
-  deprecatedMemberUse = HintTemplate(
-    name: 'DEPRECATED_MEMBER_USE',
-    problemMessage: "'{0}' is deprecated and shouldn't be used.",
-    correctionMessage:
-        "Try replacing the use of the deprecated member with the replacement.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'HintCode.DEPRECATED_MEMBER_USE',
-    withArguments: _withArgumentsDeprecatedMemberUse,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  /// String p1: message details
-  static const HintTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  deprecatedMemberUseWithMessage = HintTemplate(
-    name: 'DEPRECATED_MEMBER_USE',
-    problemMessage: "'{0}' is deprecated and shouldn't be used. {1}",
-    correctionMessage:
-        "Try replacing the use of the deprecated member with the replacement.",
-    hasPublishedDocs: true,
-    uniqueName: 'DEPRECATED_MEMBER_USE_WITH_MESSAGE',
-    uniqueNameCheck: 'HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE',
-    withArguments: _withArgumentsDeprecatedMemberUseWithMessage,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const HintWithoutArguments
-  importDeferredLibraryWithLoadFunction = HintWithoutArguments(
-    name: 'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
-    problemMessage:
-        "The imported library defines a top-level function named 'loadLibrary' "
-        "that is hidden by deferring this library.",
-    correctionMessage:
-        "Try changing the import to not be deferred, or rename the function in "
-        "the imported library.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the URI that is not necessary
-  /// String p1: the URI that makes it unnecessary
-  static const HintTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  unnecessaryImport = HintTemplate(
-    name: 'UNNECESSARY_IMPORT',
-    problemMessage:
-        "The import of '{0}' is unnecessary because all of the used elements are "
-        "also provided by the import of '{1}'.",
-    correctionMessage: "Try removing the import directive.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'HintCode.UNNECESSARY_IMPORT',
-    withArguments: _withArgumentsUnnecessaryImport,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const HintCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.HINT,
-         uniqueName: 'HintCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsDeprecatedMemberUse({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(HintCode.deprecatedMemberUse, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedMemberUseWithMessage({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(HintCode.deprecatedMemberUseWithMessage, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryImport({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(HintCode.unnecessaryImport, [p0, p1]);
-  }
-}
-
-final class HintTemplate<T extends Function> extends HintCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const HintTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class HintWithoutArguments extends HintCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const HintWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/dart/error/lint_codes.dart b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
index c9594d4..adb5c82 100644
--- a/pkg/analyzer/lib/src/dart/error/lint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/lint_codes.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// @docImport 'package:analyzer/src/error/codes.dart';
+/// @docImport 'package:analyzer/analysis_rule/analysis_rule.dart';
 library;
 
 import 'package:_fe_analyzer_shared/src/base/analyzer_public_api.dart';
@@ -10,6 +11,7 @@
 
 export 'package:_fe_analyzer_shared/src/base/errors.dart'
     show
+        DiagnosticWithArguments,
         DiagnosticWithoutArguments,
         ExpectedType,
         LocatableDiagnostic,
@@ -26,17 +28,35 @@
 
   /// Initializes a lint code.
   ///
-  /// If a non-null value is supplied for [uniqueNameCheck], it should be the
-  /// same as [uniqueName]. This parameter is marked `@deprecated` because it
-  /// should not be used by client; it exists as a temporary measure to aid in
-  /// migration and will soon be removed.
+  /// The [name] is a "snake_case" name for the reported diagnostic.
+  ///
+  /// The [problemMessage] is a concise, human-readable message indicating
+  /// the problematic behavior.
+  ///
+  /// The [correctionMessage], if given, is a concise, human-readable message
+  /// indicating one or two possible corrections.
+  ///
+  /// The [problemMessage] and [correctionMessage] text is printed with a
+  /// reported diagnostics. For example, `dart analyze` and `flutter analyze`
+  /// will print the [problemMessage] with each diagnostic. The [problemMessage]
+  /// and [correctionMessage] area each printed in an IDE's "problems" panel
+  /// with each diagnostic.
+  ///
+  /// The [problemMessage] and [correctionMessage] text can contain
+  /// interpolation placeholders, in the form of `{0}`, `{1}`, etc. When a
+  /// diagnostic for this LintCode is produced (for example with
+  /// [AnalysisRule.reportAtNode]) with arguments, they are interpolated into
+  /// the [problemMessage] and [correctionMessage]. If present, the first
+  /// argument (at position 0) replaces each instance of `{0}`, the second
+  /// argument (at position 1) replaces each instance of `{1}`, etc.
+  // TODO(srawlins): Add a 'url' parameter for plugin authors.
+  // TODO(srawlins): Document `uniqueName` and `severity`.
   const LintCode(
     String name,
     String problemMessage, {
     super.correctionMessage,
-    super.hasPublishedDocs,
+    @Deprecated('To be removed without replacement') super.hasPublishedDocs,
     String? uniqueName,
-    @deprecated super.uniqueNameCheck,
     this.severity = DiagnosticSeverity.INFO,
   }) : super(
          problemMessage: problemMessage,
@@ -60,20 +80,16 @@
 
 /// Private subtype of [LintCode] that supports runtime checking of parameter
 /// types.
-class LintCodeWithExpectedTypes extends DiagnosticCodeWithExpectedTypes
+abstract class LintCodeWithExpectedTypes extends DiagnosticCodeWithExpectedTypes
     implements LintCode {
   const LintCodeWithExpectedTypes({
     required super.name,
     required super.problemMessage,
     super.correctionMessage,
     super.hasPublishedDocs,
-    String? uniqueName,
-    required super.uniqueNameCheck,
+    required super.uniqueName,
     required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.LINT,
-         uniqueName: uniqueName ?? 'LintCode.$name',
-       );
+  }) : super(type: DiagnosticType.LINT);
 
   @override
   int get hashCode => uniqueName.hashCode;
@@ -101,7 +117,6 @@
          problemMessage: problemMessage,
          type: DiagnosticType.LINT,
          uniqueName: uniqueName ?? 'LintCode.$name',
-         uniqueNameCheck: null,
        );
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
deleted file mode 100644
index 852dcff..0000000
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ /dev/null
@@ -1,7 +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:_fe_analyzer_shared/src/base/errors.dart';
-
-part 'package:analyzer/src/dart/error/syntactic_errors.g.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
deleted file mode 100644
index 4fae335..0000000
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ /dev/null
@@ -1,3484 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/dart/error/syntactic_errors.dart";
-
-class ParserErrorCode extends DiagnosticCodeWithExpectedTypes {
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractClassMember =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_CLASS_MEMBER',
-        problemMessage:
-            "Members of classes can't be declared to be 'abstract'.",
-        correctionMessage:
-            "Try removing the 'abstract' keyword. You can add the 'abstract' "
-            "keyword before the class declaration.",
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_CLASS_MEMBER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractExternalField =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_EXTERNAL_FIELD',
-        problemMessage:
-            "Fields can't be declared both 'abstract' and 'external'.",
-        correctionMessage: "Try removing the 'abstract' or 'external' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_EXTERNAL_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractFinalBaseClass =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_FINAL_BASE_CLASS',
-        problemMessage:
-            "An 'abstract' class can't be declared as both 'final' and 'base'.",
-        correctionMessage: "Try removing either the 'final' or 'base' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_FINAL_BASE_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  abstractFinalInterfaceClass = ParserErrorWithoutArguments(
-    name: 'ABSTRACT_FINAL_INTERFACE_CLASS',
-    problemMessage:
-        "An 'abstract' class can't be declared as both 'final' and 'interface'.",
-    correctionMessage:
-        "Try removing either the 'final' or 'interface' keyword.",
-    uniqueNameCheck: 'ParserErrorCode.ABSTRACT_FINAL_INTERFACE_CLASS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractLateField =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_LATE_FIELD',
-        problemMessage: "Abstract fields cannot be late.",
-        correctionMessage: "Try removing the 'abstract' or 'late' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_LATE_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractSealedClass =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_SEALED_CLASS',
-        problemMessage:
-            "A 'sealed' class can't be marked 'abstract' because it's already "
-            "implicitly abstract.",
-        correctionMessage: "Try removing the 'abstract' keyword.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_SEALED_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractStaticField =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_STATIC_FIELD',
-        problemMessage: "Static fields can't be declared 'abstract'.",
-        correctionMessage: "Try removing the 'abstract' or 'static' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_STATIC_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments abstractStaticMethod =
-      ParserErrorWithoutArguments(
-        name: 'ABSTRACT_STATIC_METHOD',
-        problemMessage: "Static methods can't be declared to be 'abstract'.",
-        correctionMessage: "Try removing the keyword 'abstract'.",
-        uniqueNameCheck: 'ParserErrorCode.ABSTRACT_STATIC_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  annotationOnTypeArgument = ParserErrorWithoutArguments(
-    name: 'ANNOTATION_ON_TYPE_ARGUMENT',
-    problemMessage:
-        "Type arguments can't have annotations because they aren't declarations.",
-    uniqueNameCheck: 'ParserErrorCode.ANNOTATION_ON_TYPE_ARGUMENT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments annotationSpaceBeforeParenthesis =
-      ParserErrorWithoutArguments(
-        name: 'ANNOTATION_SPACE_BEFORE_PARENTHESIS',
-        problemMessage:
-            "Annotations can't have spaces or comments before the parenthesis.",
-        correctionMessage:
-            "Remove any spaces or comments before the parenthesis.",
-        uniqueNameCheck: 'ParserErrorCode.ANNOTATION_SPACE_BEFORE_PARENTHESIS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments annotationWithTypeArguments =
-      ParserErrorWithoutArguments(
-        name: 'ANNOTATION_WITH_TYPE_ARGUMENTS',
-        problemMessage: "An annotation can't use type arguments.",
-        uniqueNameCheck: 'ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  annotationWithTypeArgumentsUninstantiated = ParserErrorWithoutArguments(
-    name: 'ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
-    problemMessage:
-        "An annotation with type arguments must be followed by an argument list.",
-    uniqueNameCheck:
-        'ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
-    expectedTypes: [],
-  );
-
-  /// 16.32 Identifier Reference: It is a compile-time error if any of the
-  /// identifiers async, await, or yield is used as an identifier in a function
-  /// body marked with either async, async, or sync.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  asyncKeywordUsedAsIdentifier = ParserErrorWithoutArguments(
-    name: 'ASYNC_KEYWORD_USED_AS_IDENTIFIER',
-    problemMessage:
-        "The keywords 'await' and 'yield' can't be used as identifiers in an "
-        "asynchronous or generator function.",
-    uniqueNameCheck: 'ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments baseEnum =
-      ParserErrorWithoutArguments(
-        name: 'BASE_ENUM',
-        problemMessage: "Enums can't be declared to be 'base'.",
-        correctionMessage: "Try removing the keyword 'base'.",
-        uniqueNameCheck: 'ParserErrorCode.BASE_ENUM',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// String string2: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({
-      required String string,
-      required String string2,
-    })
-  >
-  binaryOperatorWrittenOut = ParserErrorTemplate(
-    name: 'BINARY_OPERATOR_WRITTEN_OUT',
-    problemMessage:
-        "Binary operator '{0}' is written as '{1}' instead of the written out "
-        "word.",
-    correctionMessage: "Try replacing '{0}' with '{1}'.",
-    uniqueNameCheck: 'ParserErrorCode.BINARY_OPERATOR_WRITTEN_OUT',
-    withArguments: _withArgumentsBinaryOperatorWrittenOut,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  breakOutsideOfLoop = ParserErrorWithoutArguments(
-    name: 'BREAK_OUTSIDE_OF_LOOP',
-    problemMessage:
-        "A break statement can't be used outside of a loop or switch statement.",
-    correctionMessage: "Try removing the break statement.",
-    uniqueNameCheck: 'ParserErrorCode.BREAK_OUTSIDE_OF_LOOP',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  catchSyntax = ParserErrorWithoutArguments(
-    name: 'CATCH_SYNTAX',
-    problemMessage:
-        "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
-    correctionMessage:
-        "No types are needed, the first is given by 'on', the second is always "
-        "'StackTrace'.",
-    uniqueNameCheck: 'ParserErrorCode.CATCH_SYNTAX',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  catchSyntaxExtraParameters = ParserErrorWithoutArguments(
-    name: 'CATCH_SYNTAX_EXTRA_PARAMETERS',
-    problemMessage:
-        "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
-    correctionMessage:
-        "No types are needed, the first is given by 'on', the second is always "
-        "'StackTrace'.",
-    uniqueNameCheck: 'ParserErrorCode.CATCH_SYNTAX_EXTRA_PARAMETERS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments classInClass =
-      ParserErrorWithoutArguments(
-        name: 'CLASS_IN_CLASS',
-        problemMessage: "Classes can't be declared inside other classes.",
-        correctionMessage: "Try moving the class to the top-level.",
-        uniqueNameCheck: 'ParserErrorCode.CLASS_IN_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments colonInPlaceOfIn =
-      ParserErrorWithoutArguments(
-        name: 'COLON_IN_PLACE_OF_IN',
-        problemMessage: "For-in loops use 'in' rather than a colon.",
-        correctionMessage: "Try replacing the colon with the keyword 'in'.",
-        uniqueNameCheck: 'ParserErrorCode.COLON_IN_PLACE_OF_IN',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// String string2: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({
-      required String string,
-      required String string2,
-    })
-  >
-  conflictingModifiers = ParserErrorTemplate(
-    name: 'CONFLICTING_MODIFIERS',
-    problemMessage: "Members can't be declared to be both '{0}' and '{1}'.",
-    correctionMessage: "Try removing one of the keywords.",
-    uniqueNameCheck: 'ParserErrorCode.CONFLICTING_MODIFIERS',
-    withArguments: _withArgumentsConflictingModifiers,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  constAndFinal = ParserErrorWithoutArguments(
-    name: 'CONST_AND_FINAL',
-    problemMessage: "Members can't be declared to be both 'const' and 'final'.",
-    correctionMessage: "Try removing either the 'const' or 'final' keyword.",
-    uniqueNameCheck: 'ParserErrorCode.CONST_AND_FINAL',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  constClass = ParserErrorWithoutArguments(
-    name: 'CONST_CLASS',
-    problemMessage: "Classes can't be declared to be 'const'.",
-    correctionMessage:
-        "Try removing the 'const' keyword. If you're trying to indicate that "
-        "instances of the class can be constants, place the 'const' keyword on "
-        " the class' constructor(s).",
-    uniqueNameCheck: 'ParserErrorCode.CONST_CLASS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments constConstructorWithBody =
-      ParserErrorWithoutArguments(
-        name: 'CONST_CONSTRUCTOR_WITH_BODY',
-        problemMessage: "Const constructors can't have a body.",
-        correctionMessage:
-            "Try removing either the 'const' keyword or the body.",
-        uniqueNameCheck: 'ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  constFactory = ParserErrorWithoutArguments(
-    name: 'CONST_FACTORY',
-    problemMessage:
-        "Only redirecting factory constructors can be declared to be 'const'.",
-    correctionMessage:
-        "Try removing the 'const' keyword, or replacing the body with '=' "
-        "followed by a valid target.",
-    uniqueNameCheck: 'ParserErrorCode.CONST_FACTORY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments constMethod =
-      ParserErrorWithoutArguments(
-        name: 'CONST_METHOD',
-        problemMessage:
-            "Getters, setters and methods can't be declared to be 'const'.",
-        correctionMessage: "Try removing the 'const' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.CONST_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments constructorWithReturnType =
-      ParserErrorWithoutArguments(
-        name: 'CONSTRUCTOR_WITH_RETURN_TYPE',
-        problemMessage: "Constructors can't have a return type.",
-        correctionMessage: "Try removing the return type.",
-        uniqueNameCheck: 'ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  constructorWithTypeArguments = ParserErrorWithoutArguments(
-    name: 'CONSTRUCTOR_WITH_TYPE_ARGUMENTS',
-    problemMessage:
-        "A constructor invocation can't have type arguments after the constructor "
-        "name.",
-    correctionMessage:
-        "Try removing the type arguments or placing them after the class name.",
-    uniqueNameCheck: 'ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  constWithoutPrimaryConstructor = ParserErrorWithoutArguments(
-    name: 'CONST_WITHOUT_PRIMARY_CONSTRUCTOR',
-    problemMessage:
-        "'const' can only be used together with a primary constructor declaration.",
-    correctionMessage:
-        "Try removing the 'const' keyword or adding a primary constructor "
-        "declaration.",
-    uniqueNameCheck: 'ParserErrorCode.CONST_WITHOUT_PRIMARY_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  continueOutsideOfLoop = ParserErrorWithoutArguments(
-    name: 'CONTINUE_OUTSIDE_OF_LOOP',
-    problemMessage:
-        "A continue statement can't be used outside of a loop or switch statement.",
-    correctionMessage: "Try removing the continue statement.",
-    uniqueNameCheck: 'ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  continueWithoutLabelInCase = ParserErrorWithoutArguments(
-    name: 'CONTINUE_WITHOUT_LABEL_IN_CASE',
-    problemMessage:
-        "A continue statement in a switch statement must have a label as a target.",
-    correctionMessage:
-        "Try adding a label associated with one of the case clauses to the "
-        "continue statement.",
-    uniqueNameCheck: 'ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments covariantAndStatic =
-      ParserErrorWithoutArguments(
-        name: 'COVARIANT_AND_STATIC',
-        problemMessage:
-            "Members can't be declared to be both 'covariant' and 'static'.",
-        correctionMessage:
-            "Try removing either the 'covariant' or 'static' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.COVARIANT_AND_STATIC',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments covariantConstructor =
-      ParserErrorWithoutArguments(
-        name: 'COVARIANT_CONSTRUCTOR',
-        problemMessage: "A constructor can't be declared to be 'covariant'.",
-        correctionMessage: "Try removing the keyword 'covariant'.",
-        uniqueNameCheck: 'ParserErrorCode.COVARIANT_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments covariantMember =
-      ParserErrorWithoutArguments(
-        name: 'COVARIANT_MEMBER',
-        problemMessage:
-            "Getters, setters and methods can't be declared to be 'covariant'.",
-        correctionMessage: "Try removing the 'covariant' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.COVARIANT_MEMBER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments defaultInSwitchExpression =
-      ParserErrorWithoutArguments(
-        name: 'DEFAULT_IN_SWITCH_EXPRESSION',
-        problemMessage:
-            "A switch expression may not use the `default` keyword.",
-        correctionMessage: "Try replacing `default` with `_`.",
-        uniqueNameCheck: 'ParserErrorCode.DEFAULT_IN_SWITCH_EXPRESSION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments defaultValueInFunctionType =
-      ParserErrorWithoutArguments(
-        name: 'DEFAULT_VALUE_IN_FUNCTION_TYPE',
-        problemMessage:
-            "Parameters in a function type can't have default values.",
-        correctionMessage: "Try removing the default value.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  deferredAfterPrefix = ParserErrorWithoutArguments(
-    name: 'DEFERRED_AFTER_PREFIX',
-    problemMessage:
-        "The deferred keyword should come immediately before the prefix ('as' "
-        "clause).",
-    correctionMessage: "Try moving the deferred keyword before the prefix.",
-    uniqueNameCheck: 'ParserErrorCode.DEFERRED_AFTER_PREFIX',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments directiveAfterDeclaration =
-      ParserErrorWithoutArguments(
-        name: 'DIRECTIVE_AFTER_DECLARATION',
-        problemMessage: "Directives must appear before any declarations.",
-        correctionMessage: "Try moving the directive before any declarations.",
-        uniqueNameCheck: 'ParserErrorCode.DIRECTIVE_AFTER_DECLARATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments duplicateDeferred =
-      ParserErrorWithoutArguments(
-        name: 'DUPLICATE_DEFERRED',
-        problemMessage:
-            "An import directive can only have one 'deferred' keyword.",
-        correctionMessage: "Try removing all but one 'deferred' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.DUPLICATE_DEFERRED',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// 0: the modifier that was duplicated
-  ///
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode duplicatedModifier = ParserErrorCode(
-    name: 'DUPLICATED_MODIFIER',
-    problemMessage: "The modifier '{0}' was already specified.",
-    correctionMessage: "Try removing all but one occurrence of the modifier.",
-    uniqueNameCheck: 'ParserErrorCode.DUPLICATED_MODIFIER',
-    expectedTypes: [ExpectedType.token],
-  );
-
-  /// Parameters:
-  /// 0: the label that was duplicated
-  ///
-  /// Parameters:
-  /// Name name: undocumented
-  static const ParserErrorCode duplicateLabelInSwitchStatement =
-      ParserErrorCode(
-        name: 'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
-        problemMessage:
-            "The label '{0}' was already used in this switch statement.",
-        correctionMessage: "Try choosing a different name for this label.",
-        uniqueNameCheck: 'ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
-        expectedTypes: [ExpectedType.name],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments duplicatePrefix =
-      ParserErrorWithoutArguments(
-        name: 'DUPLICATE_PREFIX',
-        problemMessage:
-            "An import directive can only have one prefix ('as' clause).",
-        correctionMessage: "Try removing all but one prefix.",
-        uniqueNameCheck: 'ParserErrorCode.DUPLICATE_PREFIX',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments emptyEnumBody =
-      ParserErrorWithoutArguments(
-        name: 'EMPTY_ENUM_BODY',
-        problemMessage: "An enum must declare at least one constant name.",
-        correctionMessage: "Try declaring a constant.",
-        uniqueNameCheck: 'ParserErrorCode.EMPTY_ENUM_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments emptyRecordLiteralWithComma =
-      ParserErrorWithoutArguments(
-        name: 'EMPTY_RECORD_LITERAL_WITH_COMMA',
-        problemMessage:
-            "A record literal without fields can't have a trailing comma.",
-        correctionMessage: "Try removing the trailing comma.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.EMPTY_RECORD_LITERAL_WITH_COMMA',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments emptyRecordTypeNamedFieldsList =
-      ParserErrorWithoutArguments(
-        name: 'EMPTY_RECORD_TYPE_NAMED_FIELDS_LIST',
-        problemMessage:
-            "The list of named fields in a record type can't be empty.",
-        correctionMessage: "Try adding a named field to the list.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.EMPTY_RECORD_TYPE_NAMED_FIELDS_LIST',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments emptyRecordTypeWithComma =
-      ParserErrorWithoutArguments(
-        name: 'EMPTY_RECORD_TYPE_WITH_COMMA',
-        problemMessage:
-            "A record type without fields can't have a trailing comma.",
-        correctionMessage: "Try removing the trailing comma.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.EMPTY_RECORD_TYPE_WITH_COMMA',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments enumInClass =
-      ParserErrorWithoutArguments(
-        name: 'ENUM_IN_CLASS',
-        problemMessage: "Enums can't be declared inside classes.",
-        correctionMessage: "Try moving the enum to the top-level.",
-        uniqueNameCheck: 'ParserErrorCode.ENUM_IN_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments equalityCannotBeEqualityOperand =
-      ParserErrorWithoutArguments(
-        name: 'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
-        problemMessage:
-            "A comparison expression can't be an operand of another comparison "
-            "expression.",
-        correctionMessage:
-            "Try putting parentheses around one of the comparisons.",
-        uniqueNameCheck: 'ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedCaseOrDefault =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_CASE_OR_DEFAULT',
-        problemMessage: "Expected 'case' or 'default'.",
-        correctionMessage: "Try placing this code inside a case clause.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_CASE_OR_DEFAULT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedCatchClauseBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage: "A catch clause must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_CATCH_CLAUSE_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_CATCH_CLAUSE_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedClassBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "A class declaration must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_CLASS_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_CLASS_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedClassMember =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_CLASS_MEMBER',
-        problemMessage: "Expected a class member.",
-        correctionMessage: "Try placing this code inside a class member.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_CLASS_MEMBER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedElseOrComma =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_ELSE_OR_COMMA',
-        problemMessage: "Expected 'else' or comma.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_ELSE_OR_COMMA',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  expectedExecutable = ParserErrorWithoutArguments(
-    name: 'EXPECTED_EXECUTABLE',
-    problemMessage:
-        "Expected a method, getter, setter or operator declaration.",
-    correctionMessage:
-        "This appears to be incomplete code. Try removing it or completing it.",
-    uniqueNameCheck: 'ParserErrorCode.EXPECTED_EXECUTABLE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedExtensionBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "An extension declaration must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_EXTENSION_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_EXTENSION_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  expectedExtensionTypeBody = ParserErrorWithoutArguments(
-    name: 'EXPECTED_BODY',
-    problemMessage:
-        "An extension type declaration must have a body, even if it is empty.",
-    correctionMessage: "Try adding an empty body.",
-    uniqueName: 'EXPECTED_EXTENSION_TYPE_BODY',
-    uniqueNameCheck: 'ParserErrorCode.EXPECTED_EXTENSION_TYPE_BODY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedFinallyClauseBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "A finally clause must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_FINALLY_CLAUSE_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_FINALLY_CLAUSE_BODY',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode expectedIdentifierButGotKeyword =
-      ParserErrorCode(
-        name: 'EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
-        problemMessage:
-            "'{0}' can't be used as an identifier because it's a keyword.",
-        correctionMessage:
-            "Try renaming this to be an identifier that isn't a keyword.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
-        expectedTypes: [ExpectedType.token],
-      );
-
-  /// Parameters:
-  /// String string: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required String string})
-  >
-  expectedInstead = ParserErrorTemplate(
-    name: 'EXPECTED_INSTEAD',
-    problemMessage: "Expected '{0}' instead of this.",
-    uniqueNameCheck: 'ParserErrorCode.EXPECTED_INSTEAD',
-    withArguments: _withArgumentsExpectedInstead,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  expectedListOrMapLiteral = ParserErrorWithoutArguments(
-    name: 'EXPECTED_LIST_OR_MAP_LITERAL',
-    problemMessage: "Expected a list or map literal.",
-    correctionMessage:
-        "Try inserting a list or map literal, or remove the type arguments.",
-    uniqueNameCheck: 'ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedMixinBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "A mixin declaration must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_MIXIN_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_MIXIN_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedNamedTypeExtends =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_NAMED_TYPE',
-        problemMessage: "Expected a class name.",
-        correctionMessage:
-            "Try using a class name, possibly with type arguments.",
-        uniqueName: 'EXPECTED_NAMED_TYPE_EXTENDS',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_NAMED_TYPE_EXTENDS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedNamedTypeImplements =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_NAMED_TYPE',
-        problemMessage: "Expected the name of a class or mixin.",
-        correctionMessage:
-            "Try using a class or mixin name, possibly with type arguments.",
-        uniqueName: 'EXPECTED_NAMED_TYPE_IMPLEMENTS',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_NAMED_TYPE_IMPLEMENTS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedNamedTypeOn =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_NAMED_TYPE',
-        problemMessage: "Expected the name of a class or mixin.",
-        correctionMessage:
-            "Try using a class or mixin name, possibly with type arguments.",
-        uniqueName: 'EXPECTED_NAMED_TYPE_ON',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_NAMED_TYPE_ON',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedNamedTypeWith =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_NAMED_TYPE',
-        problemMessage: "Expected a mixin name.",
-        correctionMessage:
-            "Try using a mixin name, possibly with type arguments.",
-        uniqueName: 'EXPECTED_NAMED_TYPE_WITH',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_NAMED_TYPE_WITH',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedRepresentationField =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_REPRESENTATION_FIELD',
-        problemMessage: "Expected a representation field.",
-        correctionMessage:
-            "Try providing the representation field for this extension type.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_REPRESENTATION_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedRepresentationType =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_REPRESENTATION_TYPE',
-        problemMessage: "Expected a representation type.",
-        correctionMessage:
-            "Try providing the representation type for this extension type.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_REPRESENTATION_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedStringLiteral =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_STRING_LITERAL',
-        problemMessage: "Expected a string literal.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_STRING_LITERAL',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedSwitchExpressionBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "A switch expression must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_SWITCH_EXPRESSION_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_SWITCH_EXPRESSION_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedSwitchStatementBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "A switch statement must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_SWITCH_STATEMENT_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_SWITCH_STATEMENT_BODY',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the token that was expected but not found
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  expectedToken = ParserErrorTemplate(
-    name: 'EXPECTED_TOKEN',
-    problemMessage: "Expected to find '{0}'.",
-    uniqueNameCheck: 'ParserErrorCode.EXPECTED_TOKEN',
-    withArguments: _withArgumentsExpectedToken,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedTryStatementBody =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_BODY',
-        problemMessage:
-            "A try statement must have a body, even if it is empty.",
-        correctionMessage: "Try adding an empty body.",
-        uniqueName: 'EXPECTED_TRY_STATEMENT_BODY',
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_TRY_STATEMENT_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments expectedTypeName =
-      ParserErrorWithoutArguments(
-        name: 'EXPECTED_TYPE_NAME',
-        problemMessage: "Expected a type name.",
-        uniqueNameCheck: 'ParserErrorCode.EXPECTED_TYPE_NAME',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// String string2: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({
-      required String string,
-      required String string2,
-    })
-  >
-  experimentNotEnabled = ParserErrorTemplate(
-    name: 'EXPERIMENT_NOT_ENABLED',
-    problemMessage: "This requires the '{0}' language feature to be enabled.",
-    correctionMessage:
-        "Try updating your pubspec.yaml to set the minimum SDK constraint to "
-        "{1} or higher, and running 'pub get'.",
-    uniqueNameCheck: 'ParserErrorCode.EXPERIMENT_NOT_ENABLED',
-    withArguments: _withArgumentsExperimentNotEnabled,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String string: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required String string})
-  >
-  experimentNotEnabledOffByDefault = ParserErrorTemplate(
-    name: 'EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT',
-    problemMessage:
-        "This requires the experimental '{0}' language feature to be enabled.",
-    correctionMessage:
-        "Try passing the '--enable-experiment={0}' command line option.",
-    uniqueNameCheck: 'ParserErrorCode.EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT',
-    withArguments: _withArgumentsExperimentNotEnabledOffByDefault,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments exportDirectiveAfterPartDirective =
-      ParserErrorWithoutArguments(
-        name: 'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-        problemMessage: "Export directives must precede part directives.",
-        correctionMessage:
-            "Try moving the export directives before the part directives.",
-        uniqueNameCheck:
-            'ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments extensionAugmentationHasOnClause =
-      ParserErrorWithoutArguments(
-        name: 'EXTENSION_AUGMENTATION_HAS_ON_CLAUSE',
-        problemMessage: "Extension augmentations can't have 'on' clauses.",
-        correctionMessage: "Try removing the 'on' clause.",
-        uniqueNameCheck: 'ParserErrorCode.EXTENSION_AUGMENTATION_HAS_ON_CLAUSE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments extensionDeclaresAbstractMember =
-      ParserErrorWithoutArguments(
-        name: 'EXTENSION_DECLARES_ABSTRACT_MEMBER',
-        problemMessage: "Extensions can't declare abstract members.",
-        correctionMessage: "Try providing an implementation for the member.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.EXTENSION_DECLARES_ABSTRACT_MEMBER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments extensionDeclaresConstructor =
-      ParserErrorWithoutArguments(
-        name: 'EXTENSION_DECLARES_CONSTRUCTOR',
-        problemMessage: "Extensions can't declare constructors.",
-        correctionMessage: "Try removing the constructor declaration.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments extensionTypeExtends =
-      ParserErrorWithoutArguments(
-        name: 'EXTENSION_TYPE_EXTENDS',
-        problemMessage:
-            "An extension type declaration can't have an 'extends' clause.",
-        correctionMessage:
-            "Try removing the 'extends' clause or replacing the 'extends' with "
-            "'implements'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTENSION_TYPE_EXTENDS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments extensionTypeWith =
-      ParserErrorWithoutArguments(
-        name: 'EXTENSION_TYPE_WITH',
-        problemMessage:
-            "An extension type declaration can't have a 'with' clause.",
-        correctionMessage:
-            "Try removing the 'with' clause or replacing the 'with' with "
-            "'implements'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTENSION_TYPE_WITH',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalClass =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_CLASS',
-        problemMessage: "Classes can't be declared to be 'external'.",
-        correctionMessage: "Try removing the keyword 'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  externalConstructorWithFieldInitializers = ParserErrorWithoutArguments(
-    name: 'EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS',
-    problemMessage: "An external constructor can't initialize fields.",
-    correctionMessage:
-        "Try removing the field initializers, or removing the keyword "
-        "'external'.",
-    uniqueNameCheck:
-        'ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalConstructorWithInitializer =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER',
-        problemMessage: "An external constructor can't have any initializers.",
-        uniqueNameCheck:
-            'ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalEnum =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_ENUM',
-        problemMessage: "Enums can't be declared to be 'external'.",
-        correctionMessage: "Try removing the keyword 'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_ENUM',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalFactoryRedirection =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_FACTORY_REDIRECTION',
-        problemMessage: "A redirecting factory can't be external.",
-        correctionMessage: "Try removing the 'external' modifier.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_FACTORY_REDIRECTION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalFactoryWithBody =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_FACTORY_WITH_BODY',
-        problemMessage: "External factories can't have a body.",
-        correctionMessage:
-            "Try removing the body of the factory, or removing the keyword "
-            "'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_FACTORY_WITH_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalGetterWithBody =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_GETTER_WITH_BODY',
-        problemMessage: "External getters can't have a body.",
-        correctionMessage:
-            "Try removing the body of the getter, or removing the keyword "
-            "'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_GETTER_WITH_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalLateField =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_LATE_FIELD',
-        problemMessage: "External fields cannot be late.",
-        correctionMessage: "Try removing the 'external' or 'late' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_LATE_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalMethodWithBody =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_METHOD_WITH_BODY',
-        problemMessage: "An external or native method can't have a body.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_METHOD_WITH_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalOperatorWithBody =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_OPERATOR_WITH_BODY',
-        problemMessage: "External operators can't have a body.",
-        correctionMessage:
-            "Try removing the body of the operator, or removing the keyword "
-            "'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalSetterWithBody =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_SETTER_WITH_BODY',
-        problemMessage: "External setters can't have a body.",
-        correctionMessage:
-            "Try removing the body of the setter, or removing the keyword "
-            "'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_SETTER_WITH_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments externalTypedef =
-      ParserErrorWithoutArguments(
-        name: 'EXTERNAL_TYPEDEF',
-        problemMessage: "Typedefs can't be declared to be 'external'.",
-        correctionMessage: "Try removing the keyword 'external'.",
-        uniqueNameCheck: 'ParserErrorCode.EXTERNAL_TYPEDEF',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode extraneousModifier = ParserErrorCode(
-    name: 'EXTRANEOUS_MODIFIER',
-    problemMessage: "Can't have modifier '{0}' here.",
-    correctionMessage: "Try removing '{0}'.",
-    uniqueNameCheck: 'ParserErrorCode.EXTRANEOUS_MODIFIER',
-    expectedTypes: [ExpectedType.token],
-  );
-
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode extraneousModifierInExtensionType =
-      ParserErrorCode(
-        name: 'EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE',
-        problemMessage: "Can't have modifier '{0}' in an extension type.",
-        correctionMessage: "Try removing '{0}'.",
-        uniqueNameCheck:
-            'ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE',
-        expectedTypes: [ExpectedType.token],
-      );
-
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode extraneousModifierInPrimaryConstructor =
-      ParserErrorCode(
-        name: 'EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR',
-        problemMessage: "Can't have modifier '{0}' in a primary constructor.",
-        correctionMessage: "Try removing '{0}'.",
-        uniqueNameCheck:
-            'ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR',
-        expectedTypes: [ExpectedType.token],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments factoryTopLevelDeclaration =
-      ParserErrorWithoutArguments(
-        name: 'FACTORY_TOP_LEVEL_DECLARATION',
-        problemMessage:
-            "Top-level declarations can't be declared to be 'factory'.",
-        correctionMessage: "Try removing the keyword 'factory'.",
-        uniqueNameCheck: 'ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments factoryWithInitializers =
-      ParserErrorWithoutArguments(
-        name: 'FACTORY_WITH_INITIALIZERS',
-        problemMessage: "A 'factory' constructor can't have initializers.",
-        correctionMessage:
-            "Try removing the 'factory' keyword to make this a generative "
-            "constructor, or removing the initializers.",
-        uniqueNameCheck: 'ParserErrorCode.FACTORY_WITH_INITIALIZERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments factoryWithoutBody =
-      ParserErrorWithoutArguments(
-        name: 'FACTORY_WITHOUT_BODY',
-        problemMessage:
-            "A non-redirecting 'factory' constructor must have a body.",
-        correctionMessage: "Try adding a body to the constructor.",
-        uniqueNameCheck: 'ParserErrorCode.FACTORY_WITHOUT_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  fieldInitializedOutsideDeclaringClass = ParserErrorWithoutArguments(
-    name: 'FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS',
-    problemMessage: "A field can only be initialized in its declaring class",
-    correctionMessage:
-        "Try passing a value into the superclass constructor, or moving the "
-        "initialization into the constructor body.",
-    uniqueNameCheck:
-        'ParserErrorCode.FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalAndCovariant =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_AND_COVARIANT',
-        problemMessage:
-            "Members can't be declared to be both 'final' and 'covariant'.",
-        correctionMessage:
-            "Try removing either the 'final' or 'covariant' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_AND_COVARIANT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  finalAndCovariantLateWithInitializer = ParserErrorWithoutArguments(
-    name: 'FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER',
-    problemMessage:
-        "Members marked 'late' with an initializer can't be declared to be both "
-        "'final' and 'covariant'.",
-    correctionMessage:
-        "Try removing either the 'final' or 'covariant' keyword, or removing "
-        "the initializer.",
-    uniqueNameCheck:
-        'ParserErrorCode.FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalAndVar =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_AND_VAR',
-        problemMessage:
-            "Members can't be declared to be both 'final' and 'var'.",
-        correctionMessage: "Try removing the keyword 'var'.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_AND_VAR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalConstructor =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_CONSTRUCTOR',
-        problemMessage: "A constructor can't be declared to be 'final'.",
-        correctionMessage: "Try removing the keyword 'final'.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalEnum =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_ENUM',
-        problemMessage: "Enums can't be declared to be 'final'.",
-        correctionMessage: "Try removing the keyword 'final'.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_ENUM',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalMethod =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_METHOD',
-        problemMessage:
-            "Getters, setters and methods can't be declared to be 'final'.",
-        correctionMessage: "Try removing the keyword 'final'.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalMixin =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_MIXIN',
-        problemMessage: "A mixin can't be declared 'final'.",
-        correctionMessage: "Try removing the 'final' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_MIXIN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments finalMixinClass =
-      ParserErrorWithoutArguments(
-        name: 'FINAL_MIXIN_CLASS',
-        problemMessage: "A mixin class can't be declared 'final'.",
-        correctionMessage: "Try removing the 'final' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.FINAL_MIXIN_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  functionTypedParameterVar = ParserErrorWithoutArguments(
-    name: 'FUNCTION_TYPED_PARAMETER_VAR',
-    problemMessage:
-        "Function-typed parameters can't specify 'const', 'final' or 'var' in "
-        "place of a return type.",
-    correctionMessage: "Try replacing the keyword with a return type.",
-    uniqueNameCheck: 'ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments getterConstructor =
-      ParserErrorWithoutArguments(
-        name: 'GETTER_CONSTRUCTOR',
-        problemMessage: "Constructors can't be a getter.",
-        correctionMessage: "Try removing 'get'.",
-        uniqueNameCheck: 'ParserErrorCode.GETTER_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  getterInFunction = ParserErrorWithoutArguments(
-    name: 'GETTER_IN_FUNCTION',
-    problemMessage: "Getters can't be defined within methods or functions.",
-    correctionMessage:
-        "Try moving the getter outside the method or function, or converting "
-        "the getter to a function.",
-    uniqueNameCheck: 'ParserErrorCode.GETTER_IN_FUNCTION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments getterWithParameters =
-      ParserErrorWithoutArguments(
-        name: 'GETTER_WITH_PARAMETERS',
-        problemMessage: "Getters must be declared without a parameter list.",
-        correctionMessage:
-            "Try removing the parameter list, or removing the keyword 'get' to "
-            "define a method rather than a getter.",
-        uniqueNameCheck: 'ParserErrorCode.GETTER_WITH_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments illegalAssignmentToNonAssignable =
-      ParserErrorWithoutArguments(
-        name: 'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
-        problemMessage: "Illegal assignment to non-assignable expression.",
-        uniqueNameCheck: 'ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// 0: the illegal name
-  ///
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode illegalPatternAssignmentVariableName =
-      ParserErrorCode(
-        name: 'ILLEGAL_PATTERN_ASSIGNMENT_VARIABLE_NAME',
-        problemMessage:
-            "A variable assigned by a pattern assignment can't be named '{0}'.",
-        correctionMessage: "Choose a different name.",
-        uniqueNameCheck:
-            'ParserErrorCode.ILLEGAL_PATTERN_ASSIGNMENT_VARIABLE_NAME',
-        expectedTypes: [ExpectedType.token],
-      );
-
-  /// Parameters:
-  /// 0: the illegal name
-  ///
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode illegalPatternIdentifierName = ParserErrorCode(
-    name: 'ILLEGAL_PATTERN_IDENTIFIER_NAME',
-    problemMessage: "A pattern can't refer to an identifier named '{0}'.",
-    correctionMessage: "Match the identifier using '==",
-    uniqueNameCheck: 'ParserErrorCode.ILLEGAL_PATTERN_IDENTIFIER_NAME',
-    expectedTypes: [ExpectedType.token],
-  );
-
-  /// Parameters:
-  /// 0: the illegal name
-  ///
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode illegalPatternVariableName = ParserErrorCode(
-    name: 'ILLEGAL_PATTERN_VARIABLE_NAME',
-    problemMessage:
-        "The variable declared by a variable pattern can't be named '{0}'.",
-    correctionMessage: "Choose a different name.",
-    uniqueNameCheck: 'ParserErrorCode.ILLEGAL_PATTERN_VARIABLE_NAME',
-    expectedTypes: [ExpectedType.token],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments implementsBeforeExtends =
-      ParserErrorWithoutArguments(
-        name: 'IMPLEMENTS_BEFORE_EXTENDS',
-        problemMessage:
-            "The extends clause must be before the implements clause.",
-        correctionMessage:
-            "Try moving the extends clause before the implements clause.",
-        uniqueNameCheck: 'ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments implementsBeforeOn =
-      ParserErrorWithoutArguments(
-        name: 'IMPLEMENTS_BEFORE_ON',
-        problemMessage: "The on clause must be before the implements clause.",
-        correctionMessage:
-            "Try moving the on clause before the implements clause.",
-        uniqueNameCheck: 'ParserErrorCode.IMPLEMENTS_BEFORE_ON',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments implementsBeforeWith =
-      ParserErrorWithoutArguments(
-        name: 'IMPLEMENTS_BEFORE_WITH',
-        problemMessage: "The with clause must be before the implements clause.",
-        correctionMessage:
-            "Try moving the with clause before the implements clause.",
-        uniqueNameCheck: 'ParserErrorCode.IMPLEMENTS_BEFORE_WITH',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments importDirectiveAfterPartDirective =
-      ParserErrorWithoutArguments(
-        name: 'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-        problemMessage: "Import directives must precede part directives.",
-        correctionMessage:
-            "Try moving the import directives before the part directives.",
-        uniqueNameCheck:
-            'ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments initializedVariableInForEach =
-      ParserErrorWithoutArguments(
-        name: 'INITIALIZED_VARIABLE_IN_FOR_EACH',
-        problemMessage:
-            "The loop variable in a for-each loop can't be initialized.",
-        correctionMessage:
-            "Try removing the initializer, or using a different kind of loop.",
-        uniqueNameCheck: 'ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments interfaceEnum =
-      ParserErrorWithoutArguments(
-        name: 'INTERFACE_ENUM',
-        problemMessage: "Enums can't be declared to be 'interface'.",
-        correctionMessage: "Try removing the keyword 'interface'.",
-        uniqueNameCheck: 'ParserErrorCode.INTERFACE_ENUM',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments interfaceMixin =
-      ParserErrorWithoutArguments(
-        name: 'INTERFACE_MIXIN',
-        problemMessage: "A mixin can't be declared 'interface'.",
-        correctionMessage: "Try removing the 'interface' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.INTERFACE_MIXIN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments interfaceMixinClass =
-      ParserErrorWithoutArguments(
-        name: 'INTERFACE_MIXIN_CLASS',
-        problemMessage: "A mixin class can't be declared 'interface'.",
-        correctionMessage: "Try removing the 'interface' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.INTERFACE_MIXIN_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments invalidAwaitInFor =
-      ParserErrorWithoutArguments(
-        name: 'INVALID_AWAIT_IN_FOR',
-        problemMessage:
-            "The keyword 'await' isn't allowed for a normal 'for' statement.",
-        correctionMessage:
-            "Try removing the keyword, or use a for-each statement.",
-        uniqueNameCheck: 'ParserErrorCode.INVALID_AWAIT_IN_FOR',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the invalid escape sequence
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidCodePoint = ParserErrorTemplate(
-    name: 'INVALID_CODE_POINT',
-    problemMessage: "The escape sequence '{0}' isn't a valid code point.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CODE_POINT',
-    withArguments: _withArgumentsInvalidCodePoint,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidCommentReference = ParserErrorWithoutArguments(
-    name: 'INVALID_COMMENT_REFERENCE',
-    problemMessage:
-        "Comment references should contain a possibly prefixed identifier and can "
-        "start with 'new', but shouldn't contain anything else.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_COMMENT_REFERENCE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidConstantConstPrefix = ParserErrorWithoutArguments(
-    name: 'INVALID_CONSTANT_CONST_PREFIX',
-    problemMessage:
-        "The expression can't be prefixed by 'const' to form a constant pattern.",
-    correctionMessage:
-        "Try wrapping the expression in 'const ( ... )' instead.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTANT_CONST_PREFIX',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Name name: undocumented
-  static const ParserErrorCode invalidConstantPatternBinary = ParserErrorCode(
-    name: 'INVALID_CONSTANT_PATTERN_BINARY',
-    problemMessage:
-        "The binary operator {0} is not supported as a constant pattern.",
-    correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTANT_PATTERN_BINARY',
-    expectedTypes: [ExpectedType.name],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidConstantPatternDuplicateConst = ParserErrorWithoutArguments(
-    name: 'INVALID_CONSTANT_PATTERN_DUPLICATE_CONST',
-    problemMessage: "Duplicate 'const' keyword in constant expression.",
-    correctionMessage: "Try removing one of the 'const' keywords.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTANT_PATTERN_DUPLICATE_CONST',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidConstantPatternEmptyRecordLiteral = ParserErrorWithoutArguments(
-    name: 'INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL',
-    problemMessage:
-        "The empty record literal is not supported as a constant pattern.",
-    uniqueNameCheck:
-        'ParserErrorCode.INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments invalidConstantPatternGeneric =
-      ParserErrorWithoutArguments(
-        name: 'INVALID_CONSTANT_PATTERN_GENERIC',
-        problemMessage:
-            "This expression is not supported as a constant pattern.",
-        correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
-        uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTANT_PATTERN_GENERIC',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidConstantPatternNegation = ParserErrorWithoutArguments(
-    name: 'INVALID_CONSTANT_PATTERN_NEGATION',
-    problemMessage:
-        "Only negation of a numeric literal is supported as a constant pattern.",
-    correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTANT_PATTERN_NEGATION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Name name: undocumented
-  static const ParserErrorCode invalidConstantPatternUnary = ParserErrorCode(
-    name: 'INVALID_CONSTANT_PATTERN_UNARY',
-    problemMessage:
-        "The unary operator {0} is not supported as a constant pattern.",
-    correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTANT_PATTERN_UNARY',
-    expectedTypes: [ExpectedType.name],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidConstructorName = ParserErrorWithoutArguments(
-    name: 'INVALID_CONSTRUCTOR_NAME',
-    problemMessage:
-        "The name of a constructor must match the name of the enclosing class.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_CONSTRUCTOR_NAME',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidGenericFunctionType = ParserErrorWithoutArguments(
-    name: 'INVALID_GENERIC_FUNCTION_TYPE',
-    problemMessage: "Invalid generic function type.",
-    correctionMessage:
-        "Try using a generic function type (returnType 'Function(' parameters "
-        "')').",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidHexEscape = ParserErrorWithoutArguments(
-    name: 'INVALID_HEX_ESCAPE',
-    problemMessage:
-        "An escape sequence starting with '\\x' must be followed by 2 hexadecimal "
-        "digits.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_HEX_ESCAPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments invalidInitializer =
-      ParserErrorWithoutArguments(
-        name: 'INVALID_INITIALIZER',
-        problemMessage: "Not a valid initializer.",
-        correctionMessage:
-            "To initialize a field, use the syntax 'name = value'.",
-        uniqueNameCheck: 'ParserErrorCode.INVALID_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidInsideUnaryPattern = ParserErrorWithoutArguments(
-    name: 'INVALID_INSIDE_UNARY_PATTERN',
-    problemMessage:
-        "This pattern cannot appear inside a unary pattern (cast pattern, null "
-        "check pattern, or null assert pattern) without parentheses.",
-    correctionMessage:
-        "Try combining into a single pattern if possible, or enclose the inner "
-        "pattern in parentheses.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_INSIDE_UNARY_PATTERN',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments invalidLiteralInConfiguration =
-      ParserErrorWithoutArguments(
-        name: 'INVALID_LITERAL_IN_CONFIGURATION',
-        problemMessage:
-            "The literal in a configuration can't contain interpolation.",
-        correctionMessage: "Try removing the interpolation expressions.",
-        uniqueNameCheck: 'ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// 0: the operator that is invalid
-  ///
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode invalidOperator = ParserErrorCode(
-    name: 'INVALID_OPERATOR',
-    problemMessage: "The string '{0}' isn't a user-definable operator.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_OPERATOR',
-    expectedTypes: [ExpectedType.token],
-  );
-
-  /// Only generated by the old parser.
-  /// Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
-  ///
-  /// Parameters:
-  /// Object p0: the operator being applied to 'super'
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  invalidOperatorForSuper = ParserErrorTemplate(
-    name: 'INVALID_OPERATOR_FOR_SUPER',
-    problemMessage: "The operator '{0}' can't be used with 'super'.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_OPERATOR_FOR_SUPER',
-    withArguments: _withArgumentsInvalidOperatorForSuper,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidOperatorQuestionmarkPeriodForSuper = ParserErrorWithoutArguments(
-    name: 'INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
-    problemMessage:
-        "The operator '?.' cannot be used with 'super' because 'super' cannot be "
-        "null.",
-    correctionMessage: "Try replacing '?.' with '.'",
-    uniqueNameCheck:
-        'ParserErrorCode.INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidStarAfterAsync = ParserErrorWithoutArguments(
-    name: 'INVALID_STAR_AFTER_ASYNC',
-    problemMessage:
-        "The modifier 'async*' isn't allowed for an expression function body.",
-    correctionMessage: "Try converting the body to a block.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_STAR_AFTER_ASYNC',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments invalidSuperInInitializer =
-      ParserErrorWithoutArguments(
-        name: 'INVALID_SUPER_IN_INITIALIZER',
-        problemMessage:
-            "Can only use 'super' in an initializer for calling the superclass "
-            "constructor (e.g. 'super()' or 'super.namedConstructor()')",
-        uniqueNameCheck: 'ParserErrorCode.INVALID_SUPER_IN_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidSync = ParserErrorWithoutArguments(
-    name: 'INVALID_SYNC',
-    problemMessage:
-        "The modifier 'sync' isn't allowed for an expression function body.",
-    correctionMessage: "Try converting the body to a block.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_SYNC',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidThisInInitializer = ParserErrorWithoutArguments(
-    name: 'INVALID_THIS_IN_INITIALIZER',
-    problemMessage:
-        "Can only use 'this' in an initializer for field initialization (e.g. "
-        "'this.x = something') and constructor redirection (e.g. 'this()' or "
-        "'this.namedConstructor())",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_THIS_IN_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments invalidUnicodeEscapeStarted =
-      ParserErrorWithoutArguments(
-        name: 'INVALID_UNICODE_ESCAPE_STARTED',
-        problemMessage: "The string '\\' can't stand alone.",
-        correctionMessage:
-            "Try adding another backslash (\\) to escape the '\\'.",
-        uniqueNameCheck: 'ParserErrorCode.INVALID_UNICODE_ESCAPE_STARTED',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidUnicodeEscapeUBracket = ParserErrorWithoutArguments(
-    name: 'INVALID_UNICODE_ESCAPE_U_BRACKET',
-    problemMessage:
-        "An escape sequence starting with '\\u{' must be followed by 1 to 6 "
-        "hexadecimal digits followed by a '}'.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_UNICODE_ESCAPE_U_BRACKET',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidUnicodeEscapeUNoBracket = ParserErrorWithoutArguments(
-    name: 'INVALID_UNICODE_ESCAPE_U_NO_BRACKET',
-    problemMessage:
-        "An escape sequence starting with '\\u' must be followed by 4 hexadecimal "
-        "digits.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_UNICODE_ESCAPE_U_NO_BRACKET',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidUnicodeEscapeUStarted = ParserErrorWithoutArguments(
-    name: 'INVALID_UNICODE_ESCAPE_U_STARTED',
-    problemMessage:
-        "An escape sequence starting with '\\u' must be followed by 4 hexadecimal "
-        "digits or from 1 to 6 digits between '{' and '}'.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_UNICODE_ESCAPE_U_STARTED',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  ///
-  /// Parameters:
-  /// Token lexeme: undocumented
-  static const ParserErrorCode invalidUseOfCovariantInExtension =
-      ParserErrorCode(
-        name: 'INVALID_USE_OF_COVARIANT_IN_EXTENSION',
-        problemMessage: "Can't have modifier '{0}' in an extension.",
-        correctionMessage: "Try removing '{0}'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION',
-        expectedTypes: [ExpectedType.token],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  invalidUseOfIdentifierAugmented = ParserErrorWithoutArguments(
-    name: 'INVALID_USE_OF_IDENTIFIER_AUGMENTED',
-    problemMessage:
-        "The identifier 'augmented' can only be used to reference the augmented "
-        "declaration inside an augmentation.",
-    correctionMessage: "Try using a different identifier.",
-    uniqueNameCheck: 'ParserErrorCode.INVALID_USE_OF_IDENTIFIER_AUGMENTED',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments latePatternVariableDeclaration =
-      ParserErrorWithoutArguments(
-        name: 'LATE_PATTERN_VARIABLE_DECLARATION',
-        problemMessage:
-            "A pattern variable declaration may not use the `late` keyword.",
-        correctionMessage: "Try removing the keyword `late`.",
-        uniqueNameCheck: 'ParserErrorCode.LATE_PATTERN_VARIABLE_DECLARATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments libraryDirectiveNotFirst =
-      ParserErrorWithoutArguments(
-        name: 'LIBRARY_DIRECTIVE_NOT_FIRST',
-        problemMessage:
-            "The library directive must appear before all other directives.",
-        correctionMessage:
-            "Try moving the library directive before any other directives.",
-        uniqueNameCheck: 'ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// Token lexeme: undocumented
-  static const ParserErrorCode literalWithClass = ParserErrorCode(
-    name: 'LITERAL_WITH_CLASS',
-    problemMessage: "A {0} literal can't be prefixed by '{1}'.",
-    correctionMessage: "Try removing '{1}'",
-    uniqueNameCheck: 'ParserErrorCode.LITERAL_WITH_CLASS',
-    expectedTypes: [ExpectedType.string, ExpectedType.token],
-  );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// Token lexeme: undocumented
-  static const ParserErrorCode literalWithClassAndNew = ParserErrorCode(
-    name: 'LITERAL_WITH_CLASS_AND_NEW',
-    problemMessage: "A {0} literal can't be prefixed by 'new {1}'.",
-    correctionMessage: "Try removing 'new' and '{1}'",
-    uniqueNameCheck: 'ParserErrorCode.LITERAL_WITH_CLASS_AND_NEW',
-    expectedTypes: [ExpectedType.string, ExpectedType.token],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments literalWithNew =
-      ParserErrorWithoutArguments(
-        name: 'LITERAL_WITH_NEW',
-        problemMessage: "A literal can't be prefixed by 'new'.",
-        correctionMessage: "Try removing 'new'",
-        uniqueNameCheck: 'ParserErrorCode.LITERAL_WITH_NEW',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments localFunctionDeclarationModifier =
-      ParserErrorWithoutArguments(
-        name: 'LOCAL_FUNCTION_DECLARATION_MODIFIER',
-        problemMessage:
-            "Local function declarations can't specify any modifiers.",
-        correctionMessage: "Try removing the modifier.",
-        uniqueNameCheck: 'ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments memberWithClassName =
-      ParserErrorWithoutArguments(
-        name: 'MEMBER_WITH_CLASS_NAME',
-        problemMessage:
-            "A class member can't have the same name as the enclosing class.",
-        correctionMessage: "Try renaming the member.",
-        uniqueNameCheck: 'ParserErrorCode.MEMBER_WITH_CLASS_NAME',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingAssignableSelector =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_ASSIGNABLE_SELECTOR',
-        problemMessage: "Missing selector such as '.identifier' or '[0]'.",
-        correctionMessage: "Try adding a selector.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingAssignmentInInitializer =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_ASSIGNMENT_IN_INITIALIZER',
-        problemMessage: "Expected an assignment after the field name.",
-        correctionMessage:
-            "To initialize a field, use the syntax 'name = value'.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingCatchOrFinally = ParserErrorWithoutArguments(
-    name: 'MISSING_CATCH_OR_FINALLY',
-    problemMessage:
-        "A try block must be followed by an 'on', 'catch', or 'finally' clause.",
-    correctionMessage:
-        "Try adding either a catch or finally clause, or remove the try "
-        "statement.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_CATCH_OR_FINALLY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingClosingParenthesis =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_CLOSING_PARENTHESIS',
-        problemMessage: "The closing parenthesis is missing.",
-        correctionMessage: "Try adding the closing parenthesis.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_CLOSING_PARENTHESIS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingConstFinalVarOrType = ParserErrorWithoutArguments(
-    name: 'MISSING_CONST_FINAL_VAR_OR_TYPE',
-    problemMessage:
-        "Variables must be declared using the keywords 'const', 'final', 'var' or "
-        "a type name.",
-    correctionMessage:
-        "Try adding the name of the type of the variable or the keyword 'var'.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingEnumBody = ParserErrorWithoutArguments(
-    name: 'MISSING_ENUM_BODY',
-    problemMessage:
-        "An enum definition must have a body with at least one constant name.",
-    correctionMessage: "Try adding a body and defining at least one constant.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_ENUM_BODY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingExpressionInInitializer =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_EXPRESSION_IN_INITIALIZER',
-        problemMessage: "Expected an expression after the assignment operator.",
-        correctionMessage:
-            "Try adding the value to be assigned, or remove the assignment "
-            "operator.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_EXPRESSION_IN_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingExpressionInThrow = ParserErrorWithoutArguments(
-    name: 'MISSING_EXPRESSION_IN_THROW',
-    problemMessage: "Missing expression after 'throw'.",
-    correctionMessage:
-        "Add an expression after 'throw' or use 'rethrow' to throw a caught "
-        "exception",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_EXPRESSION_IN_THROW',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingFunctionBody =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_FUNCTION_BODY',
-        problemMessage: "A function body must be provided.",
-        correctionMessage: "Try adding a function body.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_FUNCTION_BODY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingFunctionKeyword = ParserErrorWithoutArguments(
-    name: 'MISSING_FUNCTION_KEYWORD',
-    problemMessage:
-        "Function types must have the keyword 'Function' before the parameter "
-        "list.",
-    correctionMessage: "Try adding the keyword 'Function'.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_FUNCTION_KEYWORD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingFunctionParameters =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_FUNCTION_PARAMETERS',
-        problemMessage: "Functions must have an explicit list of parameters.",
-        correctionMessage: "Try adding a parameter list.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_FUNCTION_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingGet =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_GET',
-        problemMessage:
-            "Getters must have the keyword 'get' before the getter name.",
-        correctionMessage: "Try adding the keyword 'get'.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_GET',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingIdentifier =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_IDENTIFIER',
-        problemMessage: "Expected an identifier.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_IDENTIFIER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingInitializer =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_INITIALIZER',
-        problemMessage: "Expected an initializer.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingKeywordOperator =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_KEYWORD_OPERATOR',
-        problemMessage:
-            "Operator declarations must be preceded by the keyword 'operator'.",
-        correctionMessage: "Try adding the keyword 'operator'.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_KEYWORD_OPERATOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingMethodParameters =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_METHOD_PARAMETERS',
-        problemMessage: "Methods must have an explicit list of parameters.",
-        correctionMessage: "Try adding a parameter list.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_METHOD_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingNameForNamedParameter = ParserErrorWithoutArguments(
-    name: 'MISSING_NAME_FOR_NAMED_PARAMETER',
-    problemMessage: "Named parameters in a function type must have a name",
-    correctionMessage:
-        "Try providing a name for the parameter or removing the curly braces.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_NAME_FOR_NAMED_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingNameInLibraryDirective = ParserErrorWithoutArguments(
-    name: 'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
-    problemMessage: "Library directives must include a library name.",
-    correctionMessage:
-        "Try adding a library name after the keyword 'library', or remove the "
-        "library directive if the library doesn't have any parts.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingNameInPartOfDirective =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_NAME_IN_PART_OF_DIRECTIVE',
-        problemMessage: "Part-of directives must include a library name.",
-        correctionMessage: "Try adding a library name after the 'of'.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingPrefixInDeferredImport =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_PREFIX_IN_DEFERRED_IMPORT',
-        problemMessage: "Deferred imports should have a prefix.",
-        correctionMessage:
-            "Try adding a prefix to the import by adding an 'as' clause.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_PREFIX_IN_DEFERRED_IMPORT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingPrimaryConstructor = ParserErrorWithoutArguments(
-    name: 'MISSING_PRIMARY_CONSTRUCTOR',
-    problemMessage:
-        "An extension type declaration must have a primary constructor "
-        "declaration.",
-    correctionMessage:
-        "Try adding a primary constructor to the extension type declaration.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_PRIMARY_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingPrimaryConstructorParameters =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_PRIMARY_CONSTRUCTOR_PARAMETERS',
-        problemMessage:
-            "A primary constructor declaration must have formal parameters.",
-        correctionMessage:
-            "Try adding formal parameters after the primary constructor name.",
-        uniqueNameCheck:
-            'ParserErrorCode.MISSING_PRIMARY_CONSTRUCTOR_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingStarAfterSync =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_STAR_AFTER_SYNC',
-        problemMessage: "The modifier 'sync' must be followed by a star ('*').",
-        correctionMessage: "Try removing the modifier, or add a star.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_STAR_AFTER_SYNC',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingStatement =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_STATEMENT',
-        problemMessage: "Expected a statement.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_STATEMENT',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the terminator that is missing
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  missingTerminatorForParameterGroup = ParserErrorTemplate(
-    name: 'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
-    problemMessage: "There is no '{0}' to close the parameter group.",
-    correctionMessage: "Try inserting a '{0}' at the end of the group.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
-    withArguments: _withArgumentsMissingTerminatorForParameterGroup,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments missingTypedefParameters =
-      ParserErrorWithoutArguments(
-        name: 'MISSING_TYPEDEF_PARAMETERS',
-        problemMessage: "Typedefs must have an explicit list of parameters.",
-        correctionMessage: "Try adding a parameter list.",
-        uniqueNameCheck: 'ParserErrorCode.MISSING_TYPEDEF_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  missingVariableInForEach = ParserErrorWithoutArguments(
-    name: 'MISSING_VARIABLE_IN_FOR_EACH',
-    problemMessage:
-        "A loop variable must be declared in a for-each loop before the 'in', but "
-        "none was found.",
-    correctionMessage: "Try declaring a loop variable.",
-    uniqueNameCheck: 'ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  mixedParameterGroups = ParserErrorWithoutArguments(
-    name: 'MIXED_PARAMETER_GROUPS',
-    problemMessage:
-        "Can't have both positional and named parameters in a single parameter "
-        "list.",
-    correctionMessage: "Try choosing a single style of optional parameters.",
-    uniqueNameCheck: 'ParserErrorCode.MIXED_PARAMETER_GROUPS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments mixinDeclaresConstructor =
-      ParserErrorWithoutArguments(
-        name: 'MIXIN_DECLARES_CONSTRUCTOR',
-        problemMessage: "Mixins can't declare constructors.",
-        uniqueNameCheck: 'ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments mixinWithClause =
-      ParserErrorWithoutArguments(
-        name: 'MIXIN_WITH_CLAUSE',
-        problemMessage: "A mixin can't have a with clause.",
-        uniqueNameCheck: 'ParserErrorCode.MIXIN_WITH_CLAUSE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// String string2: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({
-      required String string,
-      required String string2,
-    })
-  >
-  modifierOutOfOrder = ParserErrorTemplate(
-    name: 'MODIFIER_OUT_OF_ORDER',
-    problemMessage: "The modifier '{0}' should be before the modifier '{1}'.",
-    correctionMessage: "Try re-ordering the modifiers.",
-    uniqueNameCheck: 'ParserErrorCode.MODIFIER_OUT_OF_ORDER',
-    withArguments: _withArgumentsModifierOutOfOrder,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// String string2: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({
-      required String string,
-      required String string2,
-    })
-  >
-  multipleClauses = ParserErrorTemplate(
-    name: 'MULTIPLE_CLAUSES',
-    problemMessage: "Each '{0}' definition can have at most one '{1}' clause.",
-    correctionMessage:
-        "Try combining all of the '{1}' clauses into a single clause.",
-    uniqueNameCheck: 'ParserErrorCode.MULTIPLE_CLAUSES',
-    withArguments: _withArgumentsMultipleClauses,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  multipleExtendsClauses = ParserErrorWithoutArguments(
-    name: 'MULTIPLE_EXTENDS_CLAUSES',
-    problemMessage:
-        "Each class definition can have at most one extends clause.",
-    correctionMessage:
-        "Try choosing one superclass and define your class to implement (or "
-        "mix in) the others.",
-    uniqueNameCheck: 'ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  multipleImplementsClauses = ParserErrorWithoutArguments(
-    name: 'MULTIPLE_IMPLEMENTS_CLAUSES',
-    problemMessage:
-        "Each class or mixin definition can have at most one implements clause.",
-    correctionMessage:
-        "Try combining all of the implements clauses into a single clause.",
-    uniqueNameCheck: 'ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments multipleLibraryDirectives =
-      ParserErrorWithoutArguments(
-        name: 'MULTIPLE_LIBRARY_DIRECTIVES',
-        problemMessage: "Only one library directive may be declared in a file.",
-        correctionMessage:
-            "Try removing all but one of the library directives.",
-        uniqueNameCheck: 'ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  multipleNamedParameterGroups = ParserErrorWithoutArguments(
-    name: 'MULTIPLE_NAMED_PARAMETER_GROUPS',
-    problemMessage:
-        "Can't have multiple groups of named parameters in a single parameter "
-        "list.",
-    correctionMessage: "Try combining all of the groups into a single group.",
-    uniqueNameCheck: 'ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments multipleOnClauses =
-      ParserErrorWithoutArguments(
-        name: 'MULTIPLE_ON_CLAUSES',
-        problemMessage: "Each mixin definition can have at most one on clause.",
-        correctionMessage:
-            "Try combining all of the on clauses into a single clause.",
-        uniqueNameCheck: 'ParserErrorCode.MULTIPLE_ON_CLAUSES',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments multiplePartOfDirectives =
-      ParserErrorWithoutArguments(
-        name: 'MULTIPLE_PART_OF_DIRECTIVES',
-        problemMessage: "Only one part-of directive may be declared in a file.",
-        correctionMessage:
-            "Try removing all but one of the part-of directives.",
-        uniqueNameCheck: 'ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  multiplePositionalParameterGroups = ParserErrorWithoutArguments(
-    name: 'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
-    problemMessage:
-        "Can't have multiple groups of positional parameters in a single parameter "
-        "list.",
-    correctionMessage: "Try combining all of the groups into a single group.",
-    uniqueNameCheck: 'ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments multipleRepresentationFields =
-      ParserErrorWithoutArguments(
-        name: 'MULTIPLE_REPRESENTATION_FIELDS',
-        problemMessage:
-            "Each extension type should have exactly one representation field.",
-        correctionMessage:
-            "Try combining fields into a record, or removing extra fields.",
-        uniqueNameCheck: 'ParserErrorCode.MULTIPLE_REPRESENTATION_FIELDS',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the number of variables being declared
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  multipleVariablesInForEach = ParserErrorTemplate(
-    name: 'MULTIPLE_VARIABLES_IN_FOR_EACH',
-    problemMessage:
-        "A single loop variable must be declared in a for-each loop before the "
-        "'in', but {0} were found.",
-    correctionMessage:
-        "Try moving all but one of the declarations inside the loop body.",
-    uniqueNameCheck: 'ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH',
-    withArguments: _withArgumentsMultipleVariablesInForEach,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments multipleVarianceModifiers =
-      ParserErrorWithoutArguments(
-        name: 'MULTIPLE_VARIANCE_MODIFIERS',
-        problemMessage:
-            "Each type parameter can have at most one variance modifier.",
-        correctionMessage:
-            "Use at most one of the 'in', 'out', or 'inout' modifiers.",
-        uniqueNameCheck: 'ParserErrorCode.MULTIPLE_VARIANCE_MODIFIERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments multipleWithClauses =
-      ParserErrorWithoutArguments(
-        name: 'MULTIPLE_WITH_CLAUSES',
-        problemMessage:
-            "Each class definition can have at most one with clause.",
-        correctionMessage:
-            "Try combining all of the with clauses into a single clause.",
-        uniqueNameCheck: 'ParserErrorCode.MULTIPLE_WITH_CLAUSES',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments namedFunctionExpression =
-      ParserErrorWithoutArguments(
-        name: 'NAMED_FUNCTION_EXPRESSION',
-        problemMessage: "Function expressions can't be named.",
-        correctionMessage:
-            "Try removing the name, or moving the function expression to a "
-            "function declaration statement.",
-        uniqueNameCheck: 'ParserErrorCode.NAMED_FUNCTION_EXPRESSION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments namedFunctionType =
-      ParserErrorWithoutArguments(
-        name: 'NAMED_FUNCTION_TYPE',
-        problemMessage: "Function types can't be named.",
-        correctionMessage:
-            "Try replacing the name with the keyword 'Function'.",
-        uniqueNameCheck: 'ParserErrorCode.NAMED_FUNCTION_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments namedParameterOutsideGroup =
-      ParserErrorWithoutArguments(
-        name: 'NAMED_PARAMETER_OUTSIDE_GROUP',
-        problemMessage:
-            "Named parameters must be enclosed in curly braces ('{' and '}').",
-        correctionMessage:
-            "Try surrounding the named parameters in curly braces.",
-        uniqueNameCheck: 'ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  nativeClauseInNonSdkCode = ParserErrorWithoutArguments(
-    name: 'NATIVE_CLAUSE_IN_NON_SDK_CODE',
-    problemMessage:
-        "Native clause can only be used in the SDK and code that is loaded through "
-        "native extensions.",
-    correctionMessage: "Try removing the native clause.",
-    uniqueNameCheck: 'ParserErrorCode.NATIVE_CLAUSE_IN_NON_SDK_CODE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments nativeClauseShouldBeAnnotation =
-      ParserErrorWithoutArguments(
-        name: 'NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
-        problemMessage: "Native clause in this form is deprecated.",
-        correctionMessage:
-            "Try removing this native clause and adding @native() or "
-            "@native('native-name') before the declaration.",
-        uniqueNameCheck: 'ParserErrorCode.NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  nativeFunctionBodyInNonSdkCode = ParserErrorWithoutArguments(
-    name: 'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
-    problemMessage:
-        "Native functions can only be declared in the SDK and code that is loaded "
-        "through native extensions.",
-    correctionMessage: "Try removing the word 'native'.",
-    uniqueNameCheck: 'ParserErrorCode.NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments nonConstructorFactory =
-      ParserErrorWithoutArguments(
-        name: 'NON_CONSTRUCTOR_FACTORY',
-        problemMessage: "Only a constructor can be declared to be a factory.",
-        correctionMessage: "Try removing the keyword 'factory'.",
-        uniqueNameCheck: 'ParserErrorCode.NON_CONSTRUCTOR_FACTORY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments nonIdentifierLibraryName =
-      ParserErrorWithoutArguments(
-        name: 'NON_IDENTIFIER_LIBRARY_NAME',
-        problemMessage: "The name of a library must be an identifier.",
-        correctionMessage:
-            "Try using an identifier as the name of the library.",
-        uniqueNameCheck: 'ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  nonPartOfDirectiveInPart = ParserErrorWithoutArguments(
-    name: 'NON_PART_OF_DIRECTIVE_IN_PART',
-    problemMessage:
-        "The part-of directive must be the only directive in a part.",
-    correctionMessage:
-        "Try removing the other directives, or moving them to the library for "
-        "which this is a part.",
-    uniqueNameCheck: 'ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments nonStringLiteralAsUri =
-      ParserErrorWithoutArguments(
-        name: 'NON_STRING_LITERAL_AS_URI',
-        problemMessage: "The URI must be a string literal.",
-        correctionMessage:
-            "Try enclosing the URI in either single or double quotes.",
-        uniqueNameCheck: 'ParserErrorCode.NON_STRING_LITERAL_AS_URI',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the operator that the user is trying to define
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  nonUserDefinableOperator = ParserErrorTemplate(
-    name: 'NON_USER_DEFINABLE_OPERATOR',
-    problemMessage: "The operator '{0}' isn't user definable.",
-    uniqueNameCheck: 'ParserErrorCode.NON_USER_DEFINABLE_OPERATOR',
-    withArguments: _withArgumentsNonUserDefinableOperator,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments normalBeforeOptionalParameters =
-      ParserErrorWithoutArguments(
-        name: 'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
-        problemMessage:
-            "Normal parameters must occur before optional parameters.",
-        correctionMessage:
-            "Try moving all of the normal parameters before the optional "
-            "parameters.",
-        uniqueNameCheck: 'ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  nullAwareCascadeOutOfOrder = ParserErrorWithoutArguments(
-    name: 'NULL_AWARE_CASCADE_OUT_OF_ORDER',
-    problemMessage:
-        "The '?..' cascade operator must be first in the cascade sequence.",
-    correctionMessage:
-        "Try moving the '?..' operator to be the first cascade operator in the "
-        "sequence.",
-    uniqueNameCheck: 'ParserErrorCode.NULL_AWARE_CASCADE_OUT_OF_ORDER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String string: undocumented
-  /// String string2: undocumented
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({
-      required String string,
-      required String string2,
-    })
-  >
-  outOfOrderClauses = ParserErrorTemplate(
-    name: 'OUT_OF_ORDER_CLAUSES',
-    problemMessage: "The '{0}' clause must come before the '{1}' clause.",
-    correctionMessage: "Try moving the '{0}' clause before the '{1}' clause.",
-    uniqueNameCheck: 'ParserErrorCode.OUT_OF_ORDER_CLAUSES',
-    withArguments: _withArgumentsOutOfOrderClauses,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  partOfName = ParserErrorWithoutArguments(
-    name: 'PART_OF_NAME',
-    problemMessage:
-        "The 'part of' directive can't use a name with the enhanced-parts feature.",
-    correctionMessage: "Try using 'part of' with a URI instead.",
-    uniqueNameCheck: 'ParserErrorCode.PART_OF_NAME',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Name name: undocumented
-  static const ParserErrorCode patternAssignmentDeclaresVariable =
-      ParserErrorCode(
-        name: 'PATTERN_ASSIGNMENT_DECLARES_VARIABLE',
-        problemMessage:
-            "Variable '{0}' can't be declared in a pattern assignment.",
-        correctionMessage:
-            "Try using a preexisting variable or changing the assignment to a "
-            "pattern variable declaration.",
-        uniqueNameCheck: 'ParserErrorCode.PATTERN_ASSIGNMENT_DECLARES_VARIABLE',
-        expectedTypes: [ExpectedType.name],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  patternVariableDeclarationOutsideFunctionOrMethod = ParserErrorWithoutArguments(
-    name: 'PATTERN_VARIABLE_DECLARATION_OUTSIDE_FUNCTION_OR_METHOD',
-    problemMessage:
-        "A pattern variable declaration may not appear outside a function or "
-        "method.",
-    correctionMessage:
-        "Try declaring ordinary variables and assigning from within a function "
-        "or method.",
-    uniqueNameCheck:
-        'ParserErrorCode.PATTERN_VARIABLE_DECLARATION_OUTSIDE_FUNCTION_OR_METHOD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments positionalAfterNamedArgument =
-      ParserErrorWithoutArguments(
-        name: 'POSITIONAL_AFTER_NAMED_ARGUMENT',
-        problemMessage:
-            "Positional arguments must occur before named arguments.",
-        correctionMessage:
-            "Try moving all of the positional arguments before the named "
-            "arguments.",
-        uniqueNameCheck: 'ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  positionalParameterOutsideGroup = ParserErrorWithoutArguments(
-    name: 'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
-    problemMessage:
-        "Positional parameters must be enclosed in square brackets ('[' and ']').",
-    correctionMessage:
-        "Try surrounding the positional parameters in square brackets.",
-    uniqueNameCheck: 'ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  prefixAfterCombinator = ParserErrorWithoutArguments(
-    name: 'PREFIX_AFTER_COMBINATOR',
-    problemMessage:
-        "The prefix ('as' clause) should come before any show/hide combinators.",
-    correctionMessage: "Try moving the prefix before the combinators.",
-    uniqueNameCheck: 'ParserErrorCode.PREFIX_AFTER_COMBINATOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  privateNamedNonFieldParameter = ParserErrorWithoutArguments(
-    name: 'PRIVATE_NAMED_NON_FIELD_PARAMETER',
-    problemMessage:
-        "Named parameters that don't refer to instance variables can't start with "
-        "underscore.",
-    uniqueNameCheck: 'ParserErrorCode.PRIVATE_NAMED_NON_FIELD_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments privateOptionalParameter =
-      ParserErrorWithoutArguments(
-        name: 'PRIVATE_OPTIONAL_PARAMETER',
-        problemMessage: "Named parameters can't start with an underscore.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'ParserErrorCode.PRIVATE_OPTIONAL_PARAMETER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  recordLiteralOnePositionalNoTrailingComma = ParserErrorWithoutArguments(
-    name: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA',
-    problemMessage:
-        "A record literal with exactly one positional field requires a trailing "
-        "comma.",
-    correctionMessage: "Try adding a trailing comma.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'ParserErrorCode.RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  recordTypeOnePositionalNoTrailingComma = ParserErrorWithoutArguments(
-    name: 'RECORD_TYPE_ONE_POSITIONAL_NO_TRAILING_COMMA',
-    problemMessage:
-        "A record type with exactly one positional field requires a trailing "
-        "comma.",
-    correctionMessage: "Try adding a trailing comma.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'ParserErrorCode.RECORD_TYPE_ONE_POSITIONAL_NO_TRAILING_COMMA',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  redirectingConstructorWithBody = ParserErrorWithoutArguments(
-    name: 'REDIRECTING_CONSTRUCTOR_WITH_BODY',
-    problemMessage: "Redirecting constructors can't have a body.",
-    correctionMessage:
-        "Try removing the body, or not making this a redirecting constructor.",
-    uniqueNameCheck: 'ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments redirectionInNonFactoryConstructor =
-      ParserErrorWithoutArguments(
-        name: 'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
-        problemMessage: "Only factory constructor can specify '=' redirection.",
-        correctionMessage:
-            "Try making this a factory constructor, or remove the redirection.",
-        uniqueNameCheck:
-            'ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments representationFieldModifier =
-      ParserErrorWithoutArguments(
-        name: 'REPRESENTATION_FIELD_MODIFIER',
-        problemMessage: "Representation fields can't have modifiers.",
-        correctionMessage: "Try removing the modifier.",
-        uniqueNameCheck: 'ParserErrorCode.REPRESENTATION_FIELD_MODIFIER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments representationFieldTrailingComma =
-      ParserErrorWithoutArguments(
-        name: 'REPRESENTATION_FIELD_TRAILING_COMMA',
-        problemMessage: "The representation field can't have a trailing comma.",
-        correctionMessage: "Try removing the trailing comma.",
-        uniqueNameCheck: 'ParserErrorCode.REPRESENTATION_FIELD_TRAILING_COMMA',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments sealedEnum =
-      ParserErrorWithoutArguments(
-        name: 'SEALED_ENUM',
-        problemMessage: "Enums can't be declared to be 'sealed'.",
-        correctionMessage: "Try removing the keyword 'sealed'.",
-        uniqueNameCheck: 'ParserErrorCode.SEALED_ENUM',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments sealedMixin =
-      ParserErrorWithoutArguments(
-        name: 'SEALED_MIXIN',
-        problemMessage: "A mixin can't be declared 'sealed'.",
-        correctionMessage: "Try removing the 'sealed' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.SEALED_MIXIN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments sealedMixinClass =
-      ParserErrorWithoutArguments(
-        name: 'SEALED_MIXIN_CLASS',
-        problemMessage: "A mixin class can't be declared 'sealed'.",
-        correctionMessage: "Try removing the 'sealed' keyword.",
-        uniqueNameCheck: 'ParserErrorCode.SEALED_MIXIN_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments setterConstructor =
-      ParserErrorWithoutArguments(
-        name: 'SETTER_CONSTRUCTOR',
-        problemMessage: "Constructors can't be a setter.",
-        correctionMessage: "Try removing 'set'.",
-        uniqueNameCheck: 'ParserErrorCode.SETTER_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments setterInFunction =
-      ParserErrorWithoutArguments(
-        name: 'SETTER_IN_FUNCTION',
-        problemMessage: "Setters can't be defined within methods or functions.",
-        correctionMessage:
-            "Try moving the setter outside the method or function.",
-        uniqueNameCheck: 'ParserErrorCode.SETTER_IN_FUNCTION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments stackOverflow =
-      ParserErrorWithoutArguments(
-        name: 'STACK_OVERFLOW',
-        problemMessage:
-            "The file has too many nested expressions or statements.",
-        correctionMessage: "Try simplifying the code.",
-        uniqueNameCheck: 'ParserErrorCode.STACK_OVERFLOW',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments staticConstructor =
-      ParserErrorWithoutArguments(
-        name: 'STATIC_CONSTRUCTOR',
-        problemMessage: "Constructors can't be static.",
-        correctionMessage: "Try removing the keyword 'static'.",
-        uniqueNameCheck: 'ParserErrorCode.STATIC_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  staticGetterWithoutBody = ParserErrorWithoutArguments(
-    name: 'STATIC_GETTER_WITHOUT_BODY',
-    problemMessage: "A 'static' getter must have a body.",
-    correctionMessage:
-        "Try adding a body to the getter, or removing the keyword 'static'.",
-    uniqueNameCheck: 'ParserErrorCode.STATIC_GETTER_WITHOUT_BODY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments staticOperator =
-      ParserErrorWithoutArguments(
-        name: 'STATIC_OPERATOR',
-        problemMessage: "Operators can't be static.",
-        correctionMessage: "Try removing the keyword 'static'.",
-        uniqueNameCheck: 'ParserErrorCode.STATIC_OPERATOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  staticSetterWithoutBody = ParserErrorWithoutArguments(
-    name: 'STATIC_SETTER_WITHOUT_BODY',
-    problemMessage: "A 'static' setter must have a body.",
-    correctionMessage:
-        "Try adding a body to the setter, or removing the keyword 'static'.",
-    uniqueNameCheck: 'ParserErrorCode.STATIC_SETTER_WITHOUT_BODY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments switchHasCaseAfterDefaultCase =
-      ParserErrorWithoutArguments(
-        name: 'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
-        problemMessage:
-            "The default case should be the last case in a switch statement.",
-        correctionMessage:
-            "Try moving the default case after the other case clauses.",
-        uniqueNameCheck: 'ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments switchHasMultipleDefaultCases =
-      ParserErrorWithoutArguments(
-        name: 'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
-        problemMessage: "The 'default' case can only be declared once.",
-        correctionMessage: "Try removing all but one default case.",
-        uniqueNameCheck: 'ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  topLevelOperator = ParserErrorWithoutArguments(
-    name: 'TOP_LEVEL_OPERATOR',
-    problemMessage: "Operators must be declared within a class.",
-    correctionMessage:
-        "Try removing the operator, moving it to a class, or converting it to "
-        "be a function.",
-    uniqueNameCheck: 'ParserErrorCode.TOP_LEVEL_OPERATOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Name name: undocumented
-  static const ParserErrorCode typeArgumentsOnTypeVariable = ParserErrorCode(
-    name: 'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
-    problemMessage: "Can't use type arguments with type variable '{0}'.",
-    correctionMessage: "Try removing the type arguments.",
-    uniqueNameCheck: 'ParserErrorCode.TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
-    expectedTypes: [ExpectedType.name],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments typeBeforeFactory =
-      ParserErrorWithoutArguments(
-        name: 'TYPE_BEFORE_FACTORY',
-        problemMessage: "Factory constructors cannot have a return type.",
-        correctionMessage: "Try removing the type appearing before 'factory'.",
-        uniqueNameCheck: 'ParserErrorCode.TYPE_BEFORE_FACTORY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments typedefInClass =
-      ParserErrorWithoutArguments(
-        name: 'TYPEDEF_IN_CLASS',
-        problemMessage: "Typedefs can't be declared inside classes.",
-        correctionMessage: "Try moving the typedef to the top-level.",
-        uniqueNameCheck: 'ParserErrorCode.TYPEDEF_IN_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments typeParameterOnConstructor =
-      ParserErrorWithoutArguments(
-        name: 'TYPE_PARAMETER_ON_CONSTRUCTOR',
-        problemMessage: "Constructors can't have type parameters.",
-        correctionMessage: "Try removing the type parameters.",
-        uniqueNameCheck: 'ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// 7.1.1 Operators: Type parameters are not syntactically supported on an
-  /// operator.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments typeParameterOnOperator =
-      ParserErrorWithoutArguments(
-        name: 'TYPE_PARAMETER_ON_OPERATOR',
-        problemMessage:
-            "Types parameters aren't allowed when defining an operator.",
-        correctionMessage: "Try removing the type parameters.",
-        uniqueNameCheck: 'ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR',
-        expectedTypes: [],
-      );
-
-  @Deprecated("Please use unexpectedToken")
-  static const ParserErrorCode UNEXPECTED_TOKEN = unexpectedToken;
-
-  /// Parameters:
-  /// Object p0: the starting character that was missing
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unexpectedTerminatorForParameterGroup = ParserErrorTemplate(
-    name: 'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
-    problemMessage: "There is no '{0}' to open a parameter group.",
-    correctionMessage: "Try inserting the '{0}' at the appropriate location.",
-    uniqueNameCheck:
-        'ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
-    withArguments: _withArgumentsUnexpectedTerminatorForParameterGroup,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the unexpected text that was found
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unexpectedToken = ParserErrorTemplate(
-    name: 'UNEXPECTED_TOKEN',
-    problemMessage: "Unexpected text '{0}'.",
-    correctionMessage: "Try removing the text.",
-    uniqueNameCheck: 'ParserErrorCode.UNEXPECTED_TOKEN',
-    withArguments: _withArgumentsUnexpectedToken,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments unexpectedTokens =
-      ParserErrorWithoutArguments(
-        name: 'UNEXPECTED_TOKENS',
-        problemMessage: "Unexpected tokens.",
-        uniqueNameCheck: 'ParserErrorCode.UNEXPECTED_TOKENS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments varAndType =
-      ParserErrorWithoutArguments(
-        name: 'VAR_AND_TYPE',
-        problemMessage:
-            "Variables can't be declared using both 'var' and a type name.",
-        correctionMessage: "Try removing 'var.'",
-        uniqueNameCheck: 'ParserErrorCode.VAR_AND_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments varAsTypeName =
-      ParserErrorWithoutArguments(
-        name: 'VAR_AS_TYPE_NAME',
-        problemMessage: "The keyword 'var' can't be used as a type name.",
-        uniqueNameCheck: 'ParserErrorCode.VAR_AS_TYPE_NAME',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments varClass =
-      ParserErrorWithoutArguments(
-        name: 'VAR_CLASS',
-        problemMessage: "Classes can't be declared to be 'var'.",
-        correctionMessage: "Try removing the keyword 'var'.",
-        uniqueNameCheck: 'ParserErrorCode.VAR_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments varEnum =
-      ParserErrorWithoutArguments(
-        name: 'VAR_ENUM',
-        problemMessage: "Enums can't be declared to be 'var'.",
-        correctionMessage: "Try removing the keyword 'var'.",
-        uniqueNameCheck: 'ParserErrorCode.VAR_ENUM',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  ///
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  variablePatternKeywordInDeclarationContext = ParserErrorWithoutArguments(
-    name: 'VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT',
-    problemMessage:
-        "Variable patterns in declaration context can't specify 'var' or 'final' "
-        "keyword.",
-    correctionMessage: "Try removing the keyword.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'ParserErrorCode.VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  varReturnType = ParserErrorWithoutArguments(
-    name: 'VAR_RETURN_TYPE',
-    problemMessage: "The return type can't be 'var'.",
-    correctionMessage:
-        "Try removing the keyword 'var', or replacing it with the name of the "
-        "return type.",
-    uniqueNameCheck: 'ParserErrorCode.VAR_RETURN_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  varTypedef = ParserErrorWithoutArguments(
-    name: 'VAR_TYPEDEF',
-    problemMessage: "Typedefs can't be declared to be 'var'.",
-    correctionMessage:
-        "Try removing the keyword 'var', or replacing it with the name of the "
-        "return type.",
-    uniqueNameCheck: 'ParserErrorCode.VAR_TYPEDEF',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments voidWithTypeArguments =
-      ParserErrorWithoutArguments(
-        name: 'VOID_WITH_TYPE_ARGUMENTS',
-        problemMessage: "Type 'void' can't have type arguments.",
-        correctionMessage: "Try removing the type arguments.",
-        uniqueNameCheck: 'ParserErrorCode.VOID_WITH_TYPE_ARGUMENTS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments withBeforeExtends =
-      ParserErrorWithoutArguments(
-        name: 'WITH_BEFORE_EXTENDS',
-        problemMessage: "The extends clause must be before the with clause.",
-        correctionMessage:
-            "Try moving the extends clause before the with clause.",
-        uniqueNameCheck: 'ParserErrorCode.WITH_BEFORE_EXTENDS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments wrongNumberOfParametersForSetter =
-      ParserErrorWithoutArguments(
-        name: 'WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER',
-        problemMessage:
-            "Setters must declare exactly one required positional parameter.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'ParserErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ParserErrorWithoutArguments
-  wrongSeparatorForPositionalParameter = ParserErrorWithoutArguments(
-    name: 'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
-    problemMessage:
-        "The default value of a positional parameter should be preceded by '='.",
-    correctionMessage: "Try replacing the ':' with '='.",
-    uniqueNameCheck: 'ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the terminator that was expected
-  /// Object p1: the terminator that was found
-  static const ParserErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  wrongTerminatorForParameterGroup = ParserErrorTemplate(
-    name: 'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
-    problemMessage: "Expected '{0}' to close parameter group.",
-    correctionMessage: "Try replacing '{0}' with '{1}'.",
-    uniqueNameCheck: 'ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
-    withArguments: _withArgumentsWrongTerminatorForParameterGroup,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const ParserErrorCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.SYNTACTIC_ERROR,
-         uniqueName: 'ParserErrorCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsBinaryOperatorWrittenOut({
-    required String string,
-    required String string2,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.binaryOperatorWrittenOut, [
-      string,
-      string2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingModifiers({
-    required String string,
-    required String string2,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.conflictingModifiers, [
-      string,
-      string2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedInstead({
-    required String string,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.expectedInstead, [string]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedToken({required String p0}) {
-    return LocatableDiagnosticImpl(ParserErrorCode.expectedToken, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExperimentNotEnabled({
-    required String string,
-    required String string2,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.experimentNotEnabled, [
-      string,
-      string2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExperimentNotEnabledOffByDefault({
-    required String string,
-  }) {
-    return LocatableDiagnosticImpl(
-      ParserErrorCode.experimentNotEnabledOffByDefault,
-      [string],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCodePoint({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.invalidCodePoint, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidOperatorForSuper({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.invalidOperatorForSuper, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingTerminatorForParameterGroup({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      ParserErrorCode.missingTerminatorForParameterGroup,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsModifierOutOfOrder({
-    required String string,
-    required String string2,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.modifierOutOfOrder, [
-      string,
-      string2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMultipleClauses({
-    required String string,
-    required String string2,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.multipleClauses, [
-      string,
-      string2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMultipleVariablesInForEach({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.multipleVariablesInForEach, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNonUserDefinableOperator({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.nonUserDefinableOperator, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsOutOfOrderClauses({
-    required String string,
-    required String string2,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.outOfOrderClauses, [
-      string,
-      string2,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUnexpectedTerminatorForParameterGroup({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      ParserErrorCode.unexpectedTerminatorForParameterGroup,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnexpectedToken({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(ParserErrorCode.unexpectedToken, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongTerminatorForParameterGroup({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      ParserErrorCode.wrongTerminatorForParameterGroup,
-      [p0, p1],
-    );
-  }
-}
-
-final class ParserErrorTemplate<T extends Function> extends ParserErrorCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const ParserErrorTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class ParserErrorWithoutArguments extends ParserErrorCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const ParserErrorWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
-
-class ScannerErrorCode extends DiagnosticCodeWithExpectedTypes {
-  /// No parameters.
-  static const ScannerErrorWithoutArguments encoding =
-      ScannerErrorWithoutArguments(
-        name: 'ENCODING',
-        problemMessage: "Unable to decode bytes as UTF-8.",
-        uniqueNameCheck: 'ScannerErrorCode.ENCODING',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the illegal character
-  static const ScannerErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  illegalCharacter = ScannerErrorTemplate(
-    name: 'ILLEGAL_CHARACTER',
-    problemMessage: "Illegal character '{0}'.",
-    uniqueNameCheck: 'ScannerErrorCode.ILLEGAL_CHARACTER',
-    withArguments: _withArgumentsIllegalCharacter,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments missingDigit =
-      ScannerErrorWithoutArguments(
-        name: 'MISSING_DIGIT',
-        problemMessage: "Decimal digit expected.",
-        uniqueNameCheck: 'ScannerErrorCode.MISSING_DIGIT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments missingHexDigit =
-      ScannerErrorWithoutArguments(
-        name: 'MISSING_HEX_DIGIT',
-        problemMessage: "Hexadecimal digit expected.",
-        uniqueNameCheck: 'ScannerErrorCode.MISSING_HEX_DIGIT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments missingQuote =
-      ScannerErrorWithoutArguments(
-        name: 'MISSING_QUOTE',
-        problemMessage: "Expected quote (' or \").",
-        uniqueNameCheck: 'ScannerErrorCode.MISSING_QUOTE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the path of the file that cannot be read
-  static const ScannerErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unableGetContent = ScannerErrorTemplate(
-    name: 'UNABLE_GET_CONTENT',
-    problemMessage: "Unable to get content of '{0}'.",
-    uniqueNameCheck: 'ScannerErrorCode.UNABLE_GET_CONTENT',
-    withArguments: _withArgumentsUnableGetContent,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments
-  unexpectedDollarInString = ScannerErrorWithoutArguments(
-    name: 'UNEXPECTED_DOLLAR_IN_STRING',
-    problemMessage:
-        "A '\$' has special meaning inside a string, and must be followed by an "
-        "identifier or an expression in curly braces ({}).",
-    correctionMessage: "Try adding a backslash (\\) to escape the '\$'.",
-    uniqueNameCheck: 'ScannerErrorCode.UNEXPECTED_DOLLAR_IN_STRING',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments
-  unexpectedSeparatorInNumber = ScannerErrorWithoutArguments(
-    name: 'UNEXPECTED_SEPARATOR_IN_NUMBER',
-    problemMessage:
-        "Digit separators ('_') in a number literal can only be placed between two "
-        "digits.",
-    correctionMessage: "Try removing the '_'.",
-    uniqueNameCheck: 'ScannerErrorCode.UNEXPECTED_SEPARATOR_IN_NUMBER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the unsupported operator
-  static const ScannerErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unsupportedOperator = ScannerErrorTemplate(
-    name: 'UNSUPPORTED_OPERATOR',
-    problemMessage: "The '{0}' operator is not supported.",
-    uniqueNameCheck: 'ScannerErrorCode.UNSUPPORTED_OPERATOR',
-    withArguments: _withArgumentsUnsupportedOperator,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments unterminatedMultiLineComment =
-      ScannerErrorWithoutArguments(
-        name: 'UNTERMINATED_MULTI_LINE_COMMENT',
-        problemMessage: "Unterminated multi-line comment.",
-        correctionMessage:
-            "Try terminating the comment with '*/', or removing any unbalanced "
-            "occurrences of '/*' (because comments nest in Dart).",
-        uniqueNameCheck: 'ScannerErrorCode.UNTERMINATED_MULTI_LINE_COMMENT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const ScannerErrorWithoutArguments unterminatedStringLiteral =
-      ScannerErrorWithoutArguments(
-        name: 'UNTERMINATED_STRING_LITERAL',
-        problemMessage: "Unterminated string literal.",
-        uniqueNameCheck: 'ScannerErrorCode.UNTERMINATED_STRING_LITERAL',
-        expectedTypes: [],
-      );
-
-  /// Initialize a newly created error code to have the given [name].
-  const ScannerErrorCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.SYNTACTIC_ERROR,
-         uniqueName: 'ScannerErrorCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsIllegalCharacter({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(ScannerErrorCode.illegalCharacter, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnableGetContent({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(ScannerErrorCode.unableGetContent, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedOperator({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(ScannerErrorCode.unsupportedOperator, [p0]);
-  }
-}
-
-final class ScannerErrorTemplate<T extends Function> extends ScannerErrorCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const ScannerErrorTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class ScannerErrorWithoutArguments extends ScannerErrorCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const ScannerErrorWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/dart/error/todo_codes.dart b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
index 1a9b3c6..a87aebf 100644
--- a/pkg/analyzer/lib/src/dart/error/todo_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/todo_codes.dart
@@ -3,16 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/base/errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
-part 'package:analyzer/src/dart/error/todo_codes.g.dart';
-
-/// Static helper methods and properties for working with [TodoCode]s.
+/// Static helper methods and properties for working with [DiagnosticType.TODO]
+/// codes.
 class Todo {
   static const _codes = {
-    'TODO': TodoCode.todo,
-    'FIXME': TodoCode.fixme,
-    'HACK': TodoCode.hack,
-    'UNDONE': TodoCode.undone,
+    'TODO': diag.todo,
+    'FIXME': diag.fixme,
+    'HACK': diag.hack,
+    'UNDONE': diag.undone,
   };
 
   /// This matches the two common Dart task styles
@@ -48,6 +48,6 @@
     throw UnimplementedError('Do not construct');
   }
 
-  /// Returns the TodoCode for [kind], falling back to [TodoCode.todo].
-  static DiagnosticCode forKind(String kind) => _codes[kind] ?? TodoCode.todo;
+  /// Returns the TodoCode for [kind], falling back to [diag.todo].
+  static DiagnosticCode forKind(String kind) => _codes[kind] ?? diag.todo;
 }
diff --git a/pkg/analyzer/lib/src/dart/error/todo_codes.g.dart b/pkg/analyzer/lib/src/dart/error/todo_codes.g.dart
deleted file mode 100644
index 22c1c6c..0000000
--- a/pkg/analyzer/lib/src/dart/error/todo_codes.g.dart
+++ /dev/null
@@ -1,144 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/dart/error/todo_codes.dart";
-
-/// The error code indicating a marker in code for work that needs to be finished
-/// or revisited.
-class TodoCode extends DiagnosticCodeWithExpectedTypes {
-  /// A TODO comment marked as FIXME.
-  ///
-  /// Parameters:
-  /// String message: the user-supplied problem message
-  static const TodoTemplate<
-    LocatableDiagnostic Function({required String message})
-  >
-  fixme = TodoTemplate(
-    name: 'FIXME',
-    problemMessage: "{0}",
-    uniqueNameCheck: 'TodoCode.FIXME',
-    withArguments: _withArgumentsFixme,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// A TODO comment marked as HACK.
-  ///
-  /// Parameters:
-  /// String message: the user-supplied problem message
-  static const TodoTemplate<
-    LocatableDiagnostic Function({required String message})
-  >
-  hack = TodoTemplate(
-    name: 'HACK',
-    problemMessage: "{0}",
-    uniqueNameCheck: 'TodoCode.HACK',
-    withArguments: _withArgumentsHack,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// A standard TODO comment marked as TODO.
-  ///
-  /// Parameters:
-  /// String message: the user-supplied problem message
-  static const TodoTemplate<
-    LocatableDiagnostic Function({required String message})
-  >
-  todo = TodoTemplate(
-    name: 'TODO',
-    problemMessage: "{0}",
-    uniqueNameCheck: 'TodoCode.TODO',
-    withArguments: _withArgumentsTodo,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// A TODO comment marked as UNDONE.
-  ///
-  /// Parameters:
-  /// String message: the user-supplied problem message
-  static const TodoTemplate<
-    LocatableDiagnostic Function({required String message})
-  >
-  undone = TodoTemplate(
-    name: 'UNDONE',
-    problemMessage: "{0}",
-    uniqueNameCheck: 'TodoCode.UNDONE',
-    withArguments: _withArgumentsUndone,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const TodoCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.TODO,
-         uniqueName: 'TodoCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsFixme({required String message}) {
-    return LocatableDiagnosticImpl(TodoCode.fixme, [message]);
-  }
-
-  static LocatableDiagnostic _withArgumentsHack({required String message}) {
-    return LocatableDiagnosticImpl(TodoCode.hack, [message]);
-  }
-
-  static LocatableDiagnostic _withArgumentsTodo({required String message}) {
-    return LocatableDiagnosticImpl(TodoCode.todo, [message]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndone({required String message}) {
-    return LocatableDiagnosticImpl(TodoCode.undone, [message]);
-  }
-}
-
-final class TodoTemplate<T extends Function> extends TodoCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const TodoTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class TodoWithoutArguments extends TodoCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const TodoWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/dart/micro/utils.dart b/pkg/analyzer/lib/src/dart/micro/utils.dart
index 86adeeb..65a5c5f 100644
--- a/pkg/analyzer/lib/src/dart/micro/utils.dart
+++ b/pkg/analyzer/lib/src/dart/micro/utils.dart
@@ -15,6 +15,9 @@
   if (node == null) {
     return null;
   }
+  if (node is NameWithTypeParameters) {
+    node = node.parent;
+  }
   if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
     node = node.parent;
   }
@@ -56,7 +59,8 @@
   ConstructorElement? constructor,
 ) {
   var seenConstructors = <ConstructorElement?>{};
-  while (constructor is ConstructorElementImpl && constructor.isSynthetic) {
+  while (constructor is ConstructorElementImpl &&
+      constructor.isOriginMixinApplication) {
     var enclosing = constructor.enclosingElement;
     if (enclosing is ClassElementImpl && enclosing.isMixinApplication) {
       var superInvocation = constructor.constantInitializers
@@ -352,9 +356,8 @@
         var length = nameToken.end - offset;
         references.add(MatchInfo(offset, length, MatchKind.DECLARATION));
       } else {
-        references.add(
-          MatchInfo(node.returnType.end, 0, MatchKind.DECLARATION),
-        );
+        // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+        references.add(MatchInfo(node.typeName!.end, 0, MatchKind.DECLARATION));
       }
     }
     super.visitConstructorDeclaration(node);
diff --git a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
index bb65c4b..c99a19c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
@@ -13,7 +13,7 @@
 import 'package:analyzer/src/dart/element/type_schema.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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 class AnnotationResolver {
@@ -93,7 +93,7 @@
       );
       _resolveAnnotationElementGetter(node, getter);
     } else if (getter is! ConstructorElement) {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.invalidAnnotation);
+      _diagnosticReporter.atNode(node, diag.invalidAnnotation);
     }
 
     _visitArguments(
@@ -117,7 +117,7 @@
     node.element = constructorElement;
 
     if (constructorElement == null) {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.invalidAnnotation);
+      _diagnosticReporter.atNode(node, diag.invalidAnnotation);
       AnnotationInferrer(
         resolver: _resolver,
         node: node,
@@ -172,7 +172,7 @@
       );
       _resolveAnnotationElementGetter(node, getter);
     } else {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.invalidAnnotation);
+      _diagnosticReporter.atNode(node, diag.invalidAnnotation);
     }
 
     _visitArguments(
@@ -188,7 +188,7 @@
     List<WhyNotPromotedGetter> whyNotPromotedArguments,
   ) {
     if (!element.isConst || node.arguments != null) {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.invalidAnnotation);
+      _diagnosticReporter.atNode(node, diag.invalidAnnotation);
     }
 
     _visitArguments(
@@ -239,7 +239,7 @@
     if (element1 == null) {
       _diagnosticReporter.atNode(
         node,
-        CompileTimeErrorCode.undefinedAnnotation,
+        diag.undefinedAnnotation,
         arguments: [name1.name],
       );
       _visitArguments(
@@ -331,7 +331,7 @@
         if (element == null) {
           _diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.undefinedAnnotation,
+            diag.undefinedAnnotation,
             arguments: [name2.name],
           );
           _visitArguments(
@@ -375,7 +375,7 @@
       return;
     }
 
-    _diagnosticReporter.atNode(node, CompileTimeErrorCode.invalidAnnotation);
+    _diagnosticReporter.atNode(node, diag.invalidAnnotation);
 
     _visitArguments(
       node,
@@ -390,13 +390,10 @@
   ) {
     // The accessor should be synthetic, the variable should be constant, and
     // there should be no arguments.
-    if (!accessorElement.isSynthetic ||
+    if (accessorElement.isOriginDeclaration ||
         !accessorElement.variable.isConst ||
         annotation.arguments != null) {
-      _diagnosticReporter.atNode(
-        annotation,
-        CompileTimeErrorCode.invalidAnnotation,
-      );
+      _diagnosticReporter.atNode(annotation, diag.invalidAnnotation);
     }
   }
 
@@ -459,7 +456,7 @@
       );
       _resolveAnnotationElementGetter(node, getter);
     } else if (getter is! ConstructorElement) {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.invalidAnnotation);
+      _diagnosticReporter.atNode(node, diag.invalidAnnotation);
     }
 
     _visitArguments(
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 f5d78f1..f281d5f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving [AssignmentExpression]s.
@@ -150,7 +150,7 @@
       )) {
         _diagnosticReporter.atNode(
           right,
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
+          diag.recordLiteralOnePositionalNoTrailingCommaByType,
         );
         return;
       }
@@ -158,7 +158,7 @@
 
     _diagnosticReporter.atNode(
       right,
-      CompileTimeErrorCode.invalidAssignment,
+      diag.invalidAssignment,
       arguments: [rightType, writeType],
       contextMessages: _resolver.computeWhyNotPromotedMessages(
         right,
@@ -171,7 +171,7 @@
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
   ///
-  /// See [CompileTimeErrorCode.useOfVoidResult].
+  /// See [diag.useOfVoidResult].
   // TODO(scheglov): this is duplicate
   bool _checkForUseOfVoidResult(Expression expression) {
     if (!identical(expression.staticType, VoidTypeImpl.instance)) {
@@ -180,15 +180,9 @@
 
     if (expression is MethodInvocation) {
       SimpleIdentifier methodName = expression.methodName;
-      _diagnosticReporter.atNode(
-        methodName,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(methodName, diag.useOfVoidResult);
     } else {
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(expression, diag.useOfVoidResult);
     }
 
     return true;
@@ -238,10 +232,7 @@
     // Example: `y += 0`, is not allowed.
     if (operatorType != TokenType.EQ) {
       if (leftType is VoidType) {
-        _diagnosticReporter.atToken(
-          operator,
-          CompileTimeErrorCode.useOfVoidResult,
-        );
+        _diagnosticReporter.atToken(operator, diag.useOfVoidResult);
         return;
       }
     }
@@ -272,7 +263,7 @@
     if (result.needsGetterError) {
       _diagnosticReporter.atToken(
         operator,
-        CompileTimeErrorCode.undefinedOperator,
+        diag.undefinedOperator,
         arguments: [methodName, leftType],
       );
     }
@@ -397,16 +388,13 @@
         if (element.isFinal) {
           if (element.isLate) {
             if (isForEachIdentifier || assigned) {
-              _errorReporter.atNode(
-                left,
-                CompileTimeErrorCode.lateFinalLocalAlreadyAssigned,
-              );
+              _errorReporter.atNode(left, diag.lateFinalLocalAlreadyAssigned);
             }
           } else {
             if (isForEachIdentifier || !unassigned) {
               _errorReporter.atNode(
                 left,
-                CompileTimeErrorCode.assignmentToFinalLocal,
+                diag.assignmentToFinalLocal,
                 arguments: [element.name!],
               );
             }
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index 0f89377..54188e7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -10,7 +10,7 @@
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Handles possible rewrites of AST.
 ///
@@ -445,7 +445,7 @@
     if (typeArguments != null) {
       _diagnosticReporter.atNode(
         typeArguments,
-        CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+        diag.wrongNumberOfTypeArgumentsConstructor,
         arguments: [typeNameIdentifier.toString(), constructorIdentifier.name],
       );
     }
@@ -610,7 +610,7 @@
     if (typeArguments != null) {
       _diagnosticReporter.atNode(
         typeArguments,
-        CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+        diag.wrongNumberOfTypeArgumentsConstructor,
         arguments: [typeIdentifier.name, constructorIdentifier.name],
       );
     }
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 753c8ae..3c0e5e2 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -19,7 +19,7 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/resolution_result.dart';
 import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/super_context.dart';
 
@@ -70,7 +70,7 @@
     if (operator != TokenType.BANG_EQ_EQ && operator != TokenType.EQ_EQ_EQ) {
       _diagnosticReporter.atToken(
         node.operator,
-        CompileTimeErrorCode.notBinaryOperator,
+        diag.notBinaryOperator,
         arguments: [operator.lexeme],
       );
     }
@@ -85,7 +85,7 @@
   }) {
     _resolver.boolExpressionVerifier.checkForNonBoolExpression(
       operand,
-      diagnosticCode: CompileTimeErrorCode.nonBoolOperand,
+      diagnosticCode: diag.nonBoolOperand,
       arguments: [operator],
       whyNotPromoted: whyNotPromoted,
     );
@@ -147,8 +147,8 @@
 
     void reportNullComparison(SyntacticEntity start, SyntacticEntity end) {
       var errorCode = notEqual
-          ? WarningCode.unnecessaryNullComparisonAlwaysNullFalse
-          : WarningCode.unnecessaryNullComparisonAlwaysNullTrue;
+          ? diag.unnecessaryNullComparisonAlwaysNullFalse
+          : diag.unnecessaryNullComparisonAlwaysNullTrue;
       var offset = start.offset;
       _diagnosticReporter.atOffset(
         offset: offset,
@@ -405,7 +405,7 @@
         // safe to assume `extension.name` is non-`null`.
         _diagnosticReporter.atToken(
           node.operator,
-          CompileTimeErrorCode.undefinedExtensionOperator,
+          diag.undefinedExtensionOperator,
           arguments: [methodName, extension.name!],
         );
       }
@@ -419,7 +419,7 @@
     if (identical(leftType, NeverTypeImpl.instance)) {
       _resolver.diagnosticReporter.atNode(
         leftOperand,
-        WarningCode.receiverOfTypeNever,
+        diag.receiverOfTypeNever,
       );
       return;
     }
@@ -444,13 +444,13 @@
       if (leftOperand is SuperExpression) {
         _diagnosticReporter.atToken(
           node.operator,
-          CompileTimeErrorCode.undefinedSuperOperator,
+          diag.undefinedSuperOperator,
           arguments: [methodName, leftType],
         );
       } else {
         _diagnosticReporter.atToken(
           node.operator,
-          CompileTimeErrorCode.undefinedOperator,
+          diag.undefinedOperator,
           arguments: [methodName, leftType],
         );
       }
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 c998fa6..57745be 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// A resolver for [ConstructorReference] nodes.
@@ -25,7 +25,7 @@
       // the parser has already reported an error.
       _resolver.diagnosticReporter.atNode(
         node,
-        WarningCode.sdkVersionConstructorTearoffs,
+        diag.sdkVersionConstructorTearoffs,
       );
     }
     node.constructorName.accept(_resolver);
@@ -35,7 +35,7 @@
       if (enclosingElement is ClassElementImpl && enclosingElement.isAbstract) {
         _resolver.diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.tearoffOfGenerativeConstructorOfAbstractClass,
+          diag.tearoffOfGenerativeConstructorOfAbstractClass,
         );
       }
     }
@@ -67,8 +67,8 @@
             enclosingElement.getSetter(name.name);
         if (method != null) {
           var error = method.isStatic
-              ? CompileTimeErrorCode.classInstantiationAccessToStaticMember
-              : CompileTimeErrorCode.classInstantiationAccessToInstanceMember;
+              ? diag.classInstantiationAccessToStaticMember
+              : diag.classInstantiationAccessToInstanceMember;
           _resolver.diagnosticReporter.atNode(
             node,
             error,
@@ -77,7 +77,7 @@
         } else if (!name.isSynthetic) {
           _resolver.diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.classInstantiationAccessToUnknownMember,
+            diag.classInstantiationAccessToUnknownMember,
             arguments: [enclosingElement.name!, name.name],
           );
         }
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 100ff5d..3e146fc 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -18,7 +18,7 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/applicable_extensions.dart';
 import 'package:analyzer/src/dart/resolver/resolution_result.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/listener.dart';
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -129,7 +129,7 @@
     if (mostSpecific.length == 2) {
       _diagnosticReporter.atEntity(
         nameEntity,
-        CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+        diag.ambiguousExtensionMemberAccessTwo,
         arguments: [
           name.name,
           mostSpecific[0].extension,
@@ -140,7 +140,7 @@
       var extensions = mostSpecific.map((e) => e.extension).toList();
       _diagnosticReporter.atEntity(
         nameEntity,
-        CompileTimeErrorCode.ambiguousExtensionMemberAccessThreeOrMore,
+        diag.ambiguousExtensionMemberAccessThreeOrMore,
         arguments: [
           name.name,
           mostSpecific.map((e) {
@@ -159,7 +159,7 @@
   }
 
   /// Finds extensions applicable to [declaration] for static member lookups.
-  StaticExtensionResolutionResult findExtensionForDeclaration(
+  StaticExtensionResolutionResult findStaticExtension(
     InterfaceElement declaration,
     SyntacticEntity nameEntity,
     Name name,
@@ -244,10 +244,7 @@
 
     if (!_isValidContext(node)) {
       if (!_isCascadeTarget(node)) {
-        _diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.extensionOverrideWithoutAccess,
-        );
+        _diagnosticReporter.atNode(node, diag.extensionOverrideWithoutAccess);
       }
       nodeImpl.setPseudoExpressionStaticType(DynamicTypeImpl.instance);
     }
@@ -256,7 +253,7 @@
     if (arguments.length != 1) {
       _diagnosticReporter.atNode(
         node.argumentList,
-        CompileTimeErrorCode.invalidExtensionArgumentCount,
+        diag.invalidExtensionArgumentCount,
       );
       nodeImpl.typeArgumentTypes = _listOfDynamic(typeParameters);
       nodeImpl.extendedType = DynamicTypeImpl.instance;
@@ -295,10 +292,7 @@
     );
 
     if (receiverType is VoidType) {
-      _diagnosticReporter.atNode(
-        receiverExpression,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(receiverExpression, diag.useOfVoidResult);
     } else if (!_typeSystem.isAssignableTo(
       receiverType,
       extendedType,
@@ -309,7 +303,7 @@
           : whyNotPromotedArguments[0];
       _diagnosticReporter.atNode(
         receiverExpression,
-        CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
+        diag.extensionOverrideArgumentNotAssignable,
         arguments: [receiverType, extendedType],
         contextMessages: _resolver.computeWhyNotPromotedMessages(
           receiverExpression,
@@ -336,7 +330,7 @@
           if (!_typeSystem.isSubtypeOf(argument, parameterBound)) {
             _diagnosticReporter.atNode(
               typeArgumentList.arguments[i],
-              CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+              diag.typeArgumentNotMatchingBounds,
               arguments: [argument, name, parameterBound],
             );
           }
@@ -419,7 +413,7 @@
         // explicit extension overrides cannot refer to unnamed extensions.
         _diagnosticReporter.atNode(
           typeArguments,
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension,
+          diag.wrongNumberOfTypeArgumentsExtension,
           arguments: [element.name!, typeParameters.length, arguments.length],
         );
         return _listOfDynamic(typeParameters);
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index 62bcdcc..966f715 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -962,7 +962,7 @@
     if (field is! FieldElement) {
       return PropertyNonPromotabilityReason.isNotField;
     }
-    if (field.isSynthetic && !property.isSynthetic) {
+    if (field.isOriginGetterSetter) {
       // The field is synthetic but not the property; this means that what was
       // declared by the user was the property (the getter).
       return PropertyNonPromotabilityReason.isNotField;
diff --git a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
index 6229927..6ed8894 100644
--- a/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/for_resolver.dart
@@ -13,7 +13,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/typed_literal_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -85,7 +85,7 @@
     );
     _resolver.popRewrite();
     _resolver.nullableDereferenceVerifier.expression(
-      CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
+      diag.uncheckedUseOfNullableValueAsIterator,
       forLoopParts.iterable,
     );
   }
@@ -175,7 +175,7 @@
     iterable = _resolver.popRewrite()!;
 
     _resolver.nullableDereferenceVerifier.expression(
-      CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
+      diag.uncheckedUseOfNullableValueAsIterator,
       iterable,
     );
 
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 7bb5fce..6bdd7b3 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
@@ -12,7 +12,7 @@
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/nullable_dereference_verifier.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -65,7 +65,7 @@
     receiverType = _typeSystem.resolveToBound(receiverType);
     if (receiverType is FunctionTypeImpl) {
       _nullableDereferenceVerifier.expression(
-        CompileTimeErrorCode.uncheckedInvocationOfNullableValue,
+        diag.uncheckedInvocationOfNullableValue,
         function,
       );
       _resolve(
@@ -78,7 +78,7 @@
     }
 
     if (identical(receiverType, NeverTypeImpl.instance)) {
-      _diagnosticReporter.atNode(function, WarningCode.receiverOfTypeNever);
+      _diagnosticReporter.atNode(function, diag.receiverOfTypeNever);
       _unresolved(
         node,
         NeverTypeImpl.instance,
@@ -103,7 +103,7 @@
       if (result.needsGetterError) {
         _diagnosticReporter.atNode(
           function,
-          CompileTimeErrorCode.invocationOfNonFunctionExpression,
+          diag.invocationOfNonFunctionExpression,
         );
       }
       var type = result.isGetterInvalid
@@ -121,7 +121,7 @@
     if (callElement.kind != ElementKind.METHOD) {
       _diagnosticReporter.atNode(
         function,
-        CompileTimeErrorCode.invocationOfNonFunctionExpression,
+        diag.invocationOfNonFunctionExpression,
       );
       _unresolved(
         node,
@@ -141,7 +141,7 @@
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
   ///
-  /// See [CompileTimeErrorCode.useOfVoidResult].
+  /// See [diag.useOfVoidResult].
   ///
   // TODO(scheglov): this is duplicate
   bool _checkForUseOfVoidResult(Expression expression, DartType type) {
@@ -151,15 +151,9 @@
 
     if (expression is MethodInvocation) {
       SimpleIdentifier methodName = expression.methodName;
-      _diagnosticReporter.atNode(
-        methodName,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(methodName, diag.useOfVoidResult);
     } else {
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(expression, diag.useOfVoidResult);
     }
 
     return true;
@@ -203,7 +197,7 @@
     if (callElement == null) {
       _diagnosticReporter.atNode(
         function,
-        CompileTimeErrorCode.invocationOfExtensionWithoutCall,
+        diag.invocationOfExtensionWithoutCall,
         arguments: [function.name.lexeme],
       );
       return _unresolved(
@@ -217,7 +211,7 @@
     if (callElement.isStatic) {
       _diagnosticReporter.atNode(
         node.argumentList,
-        CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
+        diag.extensionOverrideAccessToStaticMember,
       );
     }
 
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 bc55d97..5bfb46f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -13,7 +13,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// A resolver for [FunctionReference] nodes.
@@ -58,7 +58,7 @@
         // interpreted as a type literal (e.g. `List<int>`).
         _diagnosticReporter.atNode(
           typeArguments,
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           arguments: [
             function.constructorName.type.qualifiedName,
             function.constructorName.name!.name,
@@ -88,32 +88,6 @@
     }
   }
 
-  /// Checks for a type instantiation of a `dynamic`-typed expression.
-  ///
-  /// Returns `true` if an error was reported, and resolution can stop.
-  bool _checkDynamicTypeInstantiation(
-    FunctionReferenceImpl node,
-    PrefixedIdentifierImpl function,
-    Element prefixElement,
-  ) {
-    DartType? prefixType;
-    if (prefixElement is VariableElement) {
-      prefixType = prefixElement.type;
-    } else if (prefixElement is PropertyAccessorElement) {
-      prefixType = prefixElement.variable.type;
-    }
-
-    if (prefixType is DynamicType) {
-      _diagnosticReporter.atNode(
-        function,
-        CompileTimeErrorCode.genericMethodTypeInstantiationOnDynamic,
-      );
-      node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
-      return true;
-    }
-    return false;
-  }
-
   List<TypeImpl> _checkTypeArguments(
     TypeArgumentList typeArgumentList,
     String? name,
@@ -122,10 +96,8 @@
   ) {
     if (typeArgumentList.arguments.length != typeParameters.length) {
       if (name == null &&
-          errorCode ==
-              CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction) {
-        errorCode =
-            CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction;
+          errorCode == diag.wrongNumberOfTypeArgumentsFunction) {
+        errorCode = diag.wrongNumberOfTypeArgumentsAnonymousFunction;
         _diagnosticReporter.atNode(
           typeArgumentList,
           errorCode,
@@ -188,13 +160,13 @@
       if (_resolver.enclosingExtension != null) {
         _resolver.diagnosticReporter.atNode(
           nameNode,
-          CompileTimeErrorCode.unqualifiedReferenceToStaticMemberOfExtendedType,
+          diag.unqualifiedReferenceToStaticMemberOfExtendedType,
           arguments: [enclosingElement.displayName],
         );
       } else {
         _resolver.diagnosticReporter.atNode(
           nameNode,
-          CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember,
+          diag.unqualifiedReferenceToNonLocalStaticMember,
           arguments: [enclosingElement.displayName],
         );
       }
@@ -202,7 +174,7 @@
         enclosingElement.name == null) {
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.instanceAccessToStaticMemberOfUnnamedExtension,
+        diag.instanceAccessToStaticMemberOfUnnamedExtension,
         arguments: [nameNode.name, element.kind.displayName],
       );
     } else {
@@ -210,7 +182,7 @@
       // it can only be `null` for extensions, and we handle that case above.
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.instanceAccessToStaticMember,
+        diag.instanceAccessToStaticMember,
         arguments: [
           nameNode.name,
           element.kind.displayName,
@@ -262,7 +234,7 @@
             typeArguments,
             name,
             rawType.typeParameters,
-            CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction,
+            diag.wrongNumberOfTypeArgumentsFunction,
           );
 
           var invokeType = rawType.instantiate(typeArgumentTypes);
@@ -276,7 +248,7 @@
         // tearoff feature is enabled.
         _diagnosticReporter.atNode(
           node.function,
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
+          diag.disallowedTypeInstantiationExpression,
         );
         node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
       } else if (rawType is DynamicType) {
@@ -298,7 +270,7 @@
       node.typeArguments!,
       MethodElement.CALL_METHOD_NAME,
       callMethodType.typeParameters,
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction,
+      diag.wrongNumberOfTypeArgumentsFunction,
     );
     var callReference = ImplicitCallReferenceImpl(
       expression: node.function,
@@ -329,7 +301,7 @@
       node.typeArguments!,
       name.name,
       element.typeParameters,
-      CompileTimeErrorCode.wrongNumberOfTypeArguments,
+      diag.wrongNumberOfTypeArguments,
     );
     var type = element.instantiateImpl(
       typeArguments: typeArguments,
@@ -351,7 +323,7 @@
       // tearoff feature is enabled.
       _diagnosticReporter.atNode(
         node.function,
-        CompileTimeErrorCode.disallowedTypeInstantiationExpression,
+        diag.disallowedTypeInstantiationExpression,
       );
     }
     _resolve(node: node, rawType: rawType);
@@ -377,7 +349,7 @@
     if (member.isStatic) {
       _resolver.diagnosticReporter.atNode(
         function.propertyName,
-        CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
+        diag.extensionOverrideAccessToStaticMember,
       );
       // Continue to resolve type.
     }
@@ -385,7 +357,7 @@
     if (function.isCascaded) {
       _resolver.diagnosticReporter.atToken(
         override.name,
-        CompileTimeErrorCode.extensionOverrideWithCascade,
+        diag.extensionOverrideWithCascade,
       );
       // Continue to resolve type.
     }
@@ -433,63 +405,30 @@
     FunctionReferenceImpl node,
     PrefixedIdentifierImpl function,
   ) {
-    var prefixElement = function.prefix.scopeLookupResult!.getter;
+    _resolver.analyzeExpression(function, _resolver.operations.unknownType);
+    _resolver.popRewrite();
 
-    if (prefixElement == null) {
-      _diagnosticReporter.atNode(
-        function.prefix,
-        CompileTimeErrorCode.undefinedIdentifier,
-        arguments: [function.name],
-      );
-      function.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
+    var propertyType = function.typeOrThrow;
+
+    if (function.element is ExtensionElement) {
       node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
       return;
     }
 
-    function.prefix.element = prefixElement;
-    function.prefix.setPseudoExpressionStaticType(
-      prefixElement is PromotableElementImpl
-          ? _resolver.localVariableTypeProvider.getType(
-              function.prefix,
-              isRead: true,
-            )
-          : prefixElement.referenceType,
-    );
-    var functionName = function.identifier.name;
-
-    if (prefixElement is PrefixElement) {
-      var functionElement = prefixElement.scope.lookup(functionName).getter;
-      if (functionElement == null) {
-        _diagnosticReporter.atNode(
-          function.identifier,
-          CompileTimeErrorCode.undefinedPrefixedName,
-          arguments: [functionName, function.prefix.name],
-        );
-        function.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
-        node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
-        return;
-      } else {
-        _resolveReceiverPrefix(node, prefixElement, function, functionElement);
-        return;
-      }
-    }
-
-    if (_checkDynamicTypeInstantiation(node, function, prefixElement)) {
+    if (propertyType is InvalidType) {
+      node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
       return;
     }
 
-    if (prefixElement is TopLevelFunctionElement &&
-        functionName == MethodElement.CALL_METHOD_NAME) {
-      _resolve(node: node, rawType: prefixElement.type, name: functionName);
+    if (propertyType is DynamicTypeImpl) {
+      _diagnosticReporter.atNode(
+        function,
+        diag.genericMethodTypeInstantiationOnDynamic,
+      );
+      node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
       return;
     }
 
-    var propertyType = _resolveTypeProperty(
-      receiver: function.prefix,
-      name: function.identifier,
-      nameErrorEntity: function,
-    );
-
     var callMethod = _getCallMethod(node, propertyType);
     if (callMethod is MethodElement) {
       _resolveAsImplicitCallReference(node, callMethod);
@@ -498,20 +437,22 @@
 
     if (propertyType is FunctionType) {
       function.setPseudoExpressionStaticType(propertyType);
+      var functionName = function.identifier.name;
       _resolve(node: node, rawType: propertyType, name: functionName);
       return;
     }
 
-    if (propertyType != null) {
-      // If the property is unknown, [UNDEFINED_GETTER] is reported elsewhere.
-      // If it is known, we must report the bad type instantiation here.
-      _diagnosticReporter.atNode(
-        function.identifier,
-        CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-      );
+    if (function.prefix.element case PrefixElement prefixElement) {
+      if (function.element case var functionElement?) {
+        _resolveReceiverPrefix(node, prefixElement, function, functionElement);
+        return;
+      }
     }
-    _resolver.analyzeExpression(function, _resolver.operations.unknownType);
-    _resolver.popRewrite();
+
+    _diagnosticReporter.atNode(
+      function.identifier,
+      diag.disallowedTypeInstantiationExpression,
+    );
     node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
   }
 
@@ -552,7 +493,7 @@
       if (targetType is DynamicType) {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.genericMethodTypeInstantiationOnDynamic,
+          diag.genericMethodTypeInstantiationOnDynamic,
         );
         node.recordStaticType(InvalidTypeImpl.instance, resolver: _resolver);
         return;
@@ -579,7 +520,7 @@
         // If it is known, we must report the bad type instantiation here.
         _diagnosticReporter.atNode(
           function.propertyName,
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
+          diag.disallowedTypeInstantiationExpression,
         );
       }
 
@@ -635,36 +576,12 @@
         _resolveConstructorReference(node);
         return;
       } else if (element is InterfaceElementImpl) {
-        _resolver.analyzeExpression(
-          node.function,
-          _resolver.operations.unknownType,
-        );
-        _resolver.popRewrite();
         _resolveDirectTypeLiteral(node, prefix, element);
         return;
       } else if (element is TypeAliasElementImpl) {
-        _resolver.analyzeExpression(prefix, _resolver.operations.unknownType);
-        _resolver.popRewrite();
         _resolveTypeAlias(node: node, element: element, typeAlias: prefix);
         return;
       }
-    } else if (element is ExecutableElement) {
-      _resolver.analyzeExpression(
-        node.function,
-        _resolver.operations.unknownType,
-      );
-      _resolver.popRewrite();
-      var callMethod = _getCallMethod(node, node.function.staticType);
-      if (callMethod is MethodElement) {
-        _resolveAsImplicitCallReference(node, callMethod);
-        return;
-      }
-      _resolve(
-        node: node,
-        rawType: node.function.typeOrThrow as FunctionType,
-        name: element.name,
-      );
-      return;
     } else if (element is ExtensionElement) {
       prefix.identifier.element = element;
       prefix.identifier.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
@@ -699,7 +616,7 @@
         } else {
           _diagnosticReporter.atNode(
             function,
-            CompileTimeErrorCode.undefinedIdentifier,
+            diag.undefinedIdentifier,
             arguments: [function.name],
           );
           function.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
@@ -743,7 +660,7 @@
       } else {
         _resolver.diagnosticReporter.atNode(
           function,
-          CompileTimeErrorCode.undefinedMethod,
+          diag.undefinedMethod,
           arguments: [function.name, receiverType],
         );
         function.setPseudoExpressionStaticType(InvalidTypeImpl.instance);
@@ -858,7 +775,7 @@
       node.typeArguments!,
       element.name,
       element.typeParameters,
-      CompileTimeErrorCode.wrongNumberOfTypeArguments,
+      diag.wrongNumberOfTypeArguments,
     );
     var type = element.instantiateImpl(
       typeArguments: typeArguments,
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 f085cb2..a111cdd 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
@@ -6,7 +6,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inferrer.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// A resolver for [InstanceCreationExpression] and
@@ -72,7 +72,6 @@
       dotShorthandContextType,
     );
 
-    // TODO(kallentu): Support other context types
     if (dotShorthandContextType is InterfaceTypeImpl) {
       InterfaceElementImpl? contextElement = dotShorthandContextType.element;
       // This branch will be true if we're resolving an explicitly marked
@@ -87,26 +86,26 @@
         } else {
           _resolver.diagnosticReporter.atNode(
             node.constructorName,
-            CompileTimeErrorCode.constWithUndefinedConstructor,
+            diag.constWithUndefinedConstructor,
             arguments: [contextType, node.constructorName.name],
           );
         }
       }
 
       var typeArguments = node.typeArguments;
-      if (contextElement is ClassElementImpl && contextElement.isAbstract) {
-        var constructorElement = node.element;
-        if (constructorElement != null && !constructorElement.isFactory) {
-          _resolver.diagnosticReporter.atNode(
-            node,
-            CompileTimeErrorCode.instantiateAbstractClass,
-          );
-        }
+      var constructorElement = node.element;
+      if (contextElement is ClassElementImpl &&
+          contextElement.isAbstract &&
+          constructorElement != null &&
+          !constructorElement.isFactory) {
+        _resolver.diagnosticReporter.atNode(
+          node,
+          diag.instantiateAbstractClass,
+        );
       } else if (typeArguments != null) {
         _resolver.diagnosticReporter.atNode(
           typeArguments,
-          CompileTimeErrorCode
-              .wrongNumberOfTypeArgumentsDotShorthandConstructor,
+          diag.wrongNumberOfTypeArgumentsDotShorthandConstructor,
           arguments: [
             dotShorthandContextType.getDisplayString(),
             node.constructorName.name,
@@ -116,7 +115,7 @@
     } else {
       _resolver.diagnosticReporter.atNode(
         node,
-        CompileTimeErrorCode.dotShorthandMissingContext,
+        diag.dotShorthandMissingContext,
       );
     }
 
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
index 8197410..d0cf3b0 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -18,7 +18,7 @@
 import 'package:analyzer/src/dart/element/type_algebra.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -87,7 +87,7 @@
 
   @override
   DiagnosticCode get _wrongNumberOfTypeArgumentsErrorCode =>
-      CompileTimeErrorCode.wrongNumberOfTypeArguments;
+      diag.wrongNumberOfTypeArguments;
 
   @override
   List<FormalParameterElement>? _storeResult(
@@ -196,7 +196,7 @@
   TypeArgumentListImpl? get _typeArguments;
 
   DiagnosticCode get _wrongNumberOfTypeArgumentsErrorCode =>
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod;
+      diag.wrongNumberOfTypeArgumentsMethod;
 
   @override
   DartType resolveInvocation({required FunctionTypeImpl? rawType}) {
@@ -251,7 +251,7 @@
               if (!resolver.typeSystem.isSubtypeOf(typeArgument, bound)) {
                 resolver.diagnosticReporter.atNode(
                   typeArgumentList.arguments[i],
-                  CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+                  diag.typeArgumentNotMatchingBounds,
                   arguments: [typeArgument, typeParameter.name!, bound],
                 );
               }
diff --git a/pkg/analyzer/lib/src/dart/resolver/list_pattern_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/list_pattern_resolver.dart
index e4d826a..b69ef7c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/list_pattern_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/list_pattern_resolver.dart
@@ -6,7 +6,7 @@
 import 'package:_fe_analyzer_shared/src/types/shared_type.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 class ListPatternResolver {
@@ -26,7 +26,7 @@
       if (length != 1) {
         resolverVisitor.diagnosticReporter.atNode(
           typeArguments,
-          CompileTimeErrorCode.expectedOneListPatternTypeArguments,
+          diag.expectedOneListPatternTypeArguments,
           arguments: [length],
         );
       }
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 d182aba..6d8e370 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -16,7 +16,7 @@
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/listener.dart';
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
@@ -227,7 +227,7 @@
       // of a function type).
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.undefinedMethodOnFunctionType,
+        diag.undefinedMethodOnFunctionType,
         arguments: [name, receiver.type.qualifiedName],
       );
       _setInvalidTypeResolution(
@@ -287,7 +287,7 @@
 
     _resolver.diagnosticReporter.atNode(
       node.memberName,
-      CompileTimeErrorCode.dotShorthandUndefinedInvocation,
+      diag.dotShorthandUndefinedInvocation,
       arguments: [node.memberName.name, contextType.getDisplayString()],
     );
     _setInvalidTypeResolutionForDotShorthand(
@@ -322,13 +322,13 @@
       if (_resolver.enclosingExtension != null) {
         _resolver.diagnosticReporter.atNode(
           nameNode,
-          CompileTimeErrorCode.unqualifiedReferenceToStaticMemberOfExtendedType,
+          diag.unqualifiedReferenceToStaticMemberOfExtendedType,
           arguments: [enclosingElement.displayString()],
         );
       } else {
         _resolver.diagnosticReporter.atNode(
           nameNode,
-          CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember,
+          diag.unqualifiedReferenceToNonLocalStaticMember,
           arguments: [enclosingElement.displayString()],
         );
       }
@@ -336,7 +336,7 @@
         enclosingElement.name == null) {
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.instanceAccessToStaticMemberOfUnnamedExtension,
+        diag.instanceAccessToStaticMemberOfUnnamedExtension,
         arguments: [nameNode.name, element.kind.displayName],
       );
     } else {
@@ -344,7 +344,7 @@
       // it can only be `null` for extensions, and we handle that case above.
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.instanceAccessToStaticMember,
+        diag.instanceAccessToStaticMember,
         arguments: [
           nameNode.name,
           element.kind.displayName,
@@ -360,7 +360,7 @@
   void _reportInvocationOfNonFunction(SimpleIdentifierImpl methodName) {
     _resolver.diagnosticReporter.atNode(
       methodName,
-      CompileTimeErrorCode.invocationOfNonFunction,
+      diag.invocationOfNonFunction,
       arguments: [methodName.name],
     );
   }
@@ -368,7 +368,7 @@
   void _reportPrefixIdentifierNotFollowedByDot(SimpleIdentifier target) {
     _resolver.diagnosticReporter.atNode(
       target,
-      CompileTimeErrorCode.prefixIdentifierNotFollowedByDot,
+      diag.prefixIdentifierNotFollowedByDot,
       arguments: [target.name],
     );
   }
@@ -380,7 +380,7 @@
     if (!element.isStatic) {
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.staticAccessToInstanceMember,
+        diag.staticAccessToInstanceMember,
         arguments: [nameNode.name],
       );
     }
@@ -405,7 +405,7 @@
 
     _resolver.diagnosticReporter.atNode(
       node.methodName,
-      CompileTimeErrorCode.undefinedFunction,
+      diag.undefinedFunction,
       arguments: [node.methodName.name],
     );
   }
@@ -419,7 +419,7 @@
       if (_resolver.isConstructorTearoffsEnabled) {
         _resolver.diagnosticReporter.atNode(
           methodName,
-          CompileTimeErrorCode.newWithUndefinedConstructorDefault,
+          diag.newWithUndefinedConstructorDefault,
           arguments: [receiver.displayName],
         );
       } else {
@@ -429,17 +429,14 @@
     } else {
       _resolver.diagnosticReporter.atNode(
         methodName,
-        CompileTimeErrorCode.undefinedMethod,
+        diag.undefinedMethod,
         arguments: [methodName.name, receiver.displayName],
       );
     }
   }
 
   void _reportUseOfVoidType(AstNode errorNode) {
-    _resolver.diagnosticReporter.atNode(
-      errorNode,
-      CompileTimeErrorCode.useOfVoidResult,
-    );
+    _resolver.diagnosticReporter.atNode(errorNode, diag.useOfVoidResult);
   }
 
   void _resolveArguments_finishDotShorthandInference(
@@ -545,7 +542,7 @@
     // `extension.name` is non-`null`.
     _resolver.diagnosticReporter.atNode(
       nameNode,
-      CompileTimeErrorCode.undefinedExtensionMethod,
+      diag.undefinedExtensionMethod,
       arguments: [name, extension.name!],
     );
     return null;
@@ -577,7 +574,7 @@
       // assume `override.staticElement!.name` is non-`null`.
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.undefinedExtensionMethod,
+        diag.undefinedExtensionMethod,
         arguments: [name, override.element.name!],
       );
       return null;
@@ -586,7 +583,7 @@
     if (member.isStatic) {
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
+        diag.extensionOverrideAccessToStaticMember,
       );
     }
 
@@ -594,7 +591,7 @@
       // Report this error and recover by treating it like a non-cascade.
       _resolver.diagnosticReporter.atToken(
         override.name,
-        CompileTimeErrorCode.extensionOverrideWithCascade,
+        diag.extensionOverrideWithCascade,
       );
     }
 
@@ -720,10 +717,7 @@
         whyNotPromotedArguments: whyNotPromotedArguments,
       ).resolveInvocation(rawType: null);
 
-      _resolver.diagnosticReporter.atNode(
-        receiver,
-        WarningCode.receiverOfTypeNever,
-      );
+      _resolver.diagnosticReporter.atNode(receiver, diag.receiverOfTypeNever);
 
       node.methodName.setPseudoExpressionStaticType(_dynamicType);
       node.staticInvokeType = _dynamicType;
@@ -855,7 +849,7 @@
         };
         _resolver.diagnosticReporter.atNode(
           nameNode,
-          CompileTimeErrorCode.undefinedMethod,
+          diag.undefinedMethod,
           arguments: [name, receiverTypeName],
         );
         return null;
@@ -1025,7 +1019,7 @@
       );
 
       _resolver.diagnosticReporter.report(
-        CompileTimeErrorCode.abstractSuperMemberReference
+        diag.abstractSuperMemberReference
             .withArguments(memberKind: target.kind.displayName, name: name)
             .at(nameNode),
       );
@@ -1040,7 +1034,7 @@
     );
     _resolver.diagnosticReporter.atNode(
       nameNode,
-      CompileTimeErrorCode.undefinedSuperMethod,
+      diag.undefinedSuperMethod,
       arguments: [name, enclosingClass.firstFragment.displayName],
     );
     return null;
@@ -1168,7 +1162,7 @@
     if (!nameNode.isSynthetic) {
       _resolver.diagnosticReporter.atNode(
         nameNode,
-        CompileTimeErrorCode.undefinedMethod,
+        diag.undefinedMethod,
         arguments: [name, receiverClassName],
       );
     }
@@ -1251,7 +1245,7 @@
   }) {
     var element = _resolveElement(receiver, node.memberName);
     if (element != null) {
-      if (element is InternalExecutableElement) {
+      if (element is InternalExecutableElement && element.isStatic) {
         node.memberName.element = element;
         if (element is InternalPropertyAccessorElement) {
           return _rewriteAsFunctionExpressionInvocation(
@@ -1274,7 +1268,7 @@
       } else {
         _resolver.diagnosticReporter.atNode(
           nameNode,
-          CompileTimeErrorCode.dotShorthandUndefinedInvocation,
+          diag.dotShorthandUndefinedInvocation,
           arguments: [nameNode.name, receiver.displayName],
         );
         _setInvalidTypeResolutionForDotShorthand(
@@ -1308,7 +1302,7 @@
 
     _resolver.diagnosticReporter.atNode(
       nameNode,
-      CompileTimeErrorCode.dotShorthandUndefinedInvocation,
+      diag.dotShorthandUndefinedInvocation,
       arguments: [nameNode.name, receiver.displayName],
     );
     _setInvalidTypeResolutionForDotShorthand(
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 dfe8148..d1c262c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -17,9 +17,9 @@
 import 'package:analyzer/src/dart/element/type_constraint_gatherer.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/scope_helpers.dart';
 
 /// Helper for resolving types.
@@ -116,7 +116,7 @@
 
       diagnosticReporter.atToken(
         prefixToken,
-        CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+        diag.prefixShadowedByLocalDeclaration,
         arguments: [prefixName],
       );
       node.type = InvalidTypeImpl.instance;
@@ -143,7 +143,7 @@
     if (argumentCount != parameterCount) {
       diagnosticReporter.atNode(
         node,
-        CompileTimeErrorCode.wrongNumberOfTypeArguments,
+        diag.wrongNumberOfTypeArguments,
         arguments: [node.name.lexeme, parameterCount, argumentCount],
       );
       return List.filled(parameterCount, InvalidTypeImpl.instance);
@@ -355,7 +355,7 @@
       if (typeArguments != null) {
         diagnosticReporter.atNode(
           typeArguments,
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           arguments: [importPrefix.name.lexeme, nameToken.lexeme],
         );
         var instanceCreation = constructorName.parent;
@@ -402,7 +402,7 @@
       diagnosticReporter.atOffset(
         offset: importPrefix.offset,
         length: nameToken.end - importPrefix.offset,
-        diagnosticCode: CompileTimeErrorCode.notAType,
+        diagnosticCode: diag.notAType,
         arguments: ['${importPrefix.name.lexeme}.${nameToken.lexeme}'],
         contextMessages: [
           if (source != null && nameOffset != null)
@@ -427,25 +427,13 @@
       if (type.nullabilitySuffix == NullabilitySuffix.question) {
         var parent = node.parent;
         if (parent is ExtendsClause || parent is ClassTypeAlias) {
-          diagnosticReporter.atNode(
-            node,
-            CompileTimeErrorCode.nullableTypeInExtendsClause,
-          );
+          diagnosticReporter.atNode(node, diag.nullableTypeInExtendsClause);
         } else if (parent is ImplementsClause) {
-          diagnosticReporter.atNode(
-            node,
-            CompileTimeErrorCode.nullableTypeInImplementsClause,
-          );
+          diagnosticReporter.atNode(node, diag.nullableTypeInImplementsClause);
         } else if (parent is MixinOnClause) {
-          diagnosticReporter.atNode(
-            node,
-            CompileTimeErrorCode.nullableTypeInOnClause,
-          );
+          diagnosticReporter.atNode(node, diag.nullableTypeInOnClause);
         } else if (parent is WithClause) {
-          diagnosticReporter.atNode(
-            node,
-            CompileTimeErrorCode.nullableTypeInWithClause,
-          );
+          diagnosticReporter.atNode(node, diag.nullableTypeInWithClause);
         }
         return type.withNullability(NullabilitySuffix.none);
       }
@@ -469,16 +457,14 @@
           diagnosticReporter.atOffset(
             offset: errorRange.offset,
             length: errorRange.length,
-            diagnosticCode:
-                CompileTimeErrorCode.instantiateTypeAliasExpandsToTypeParameter,
+            diagnosticCode: diag.instantiateTypeAliasExpandsToTypeParameter,
           );
         } else if (constructorUsage is ConstructorDeclaration &&
             constructorUsage.redirectedConstructor == parent) {
           diagnosticReporter.atOffset(
             offset: errorRange.offset,
             length: errorRange.length,
-            diagnosticCode:
-                CompileTimeErrorCode.redirectToTypeAliasExpandsToTypeParameter,
+            diagnosticCode: diag.redirectToTypeAliasExpandsToTypeParameter,
           );
         } else {
           throw UnimplementedError('${constructorUsage.runtimeType}');
@@ -489,17 +475,13 @@
       // Report if this type is used as a class in hierarchy.
       DiagnosticCode? diagnosticCode;
       if (parent is ExtendsClause) {
-        diagnosticCode =
-            CompileTimeErrorCode.extendsTypeAliasExpandsToTypeParameter;
+        diagnosticCode = diag.extendsTypeAliasExpandsToTypeParameter;
       } else if (parent is ImplementsClause) {
-        diagnosticCode =
-            CompileTimeErrorCode.implementsTypeAliasExpandsToTypeParameter;
+        diagnosticCode = diag.implementsTypeAliasExpandsToTypeParameter;
       } else if (parent is MixinOnClause) {
-        diagnosticCode =
-            CompileTimeErrorCode.mixinOnTypeAliasExpandsToTypeParameter;
+        diagnosticCode = diag.mixinOnTypeAliasExpandsToTypeParameter;
       } else if (parent is WithClause) {
-        diagnosticCode =
-            CompileTimeErrorCode.mixinOfTypeAliasExpandsToTypeParameter;
+        diagnosticCode = diag.mixinOfTypeAliasExpandsToTypeParameter;
       }
       if (diagnosticCode != null) {
         var errorRange = _ErrorHelper._getErrorRange(node);
@@ -550,7 +532,7 @@
           diagnosticReporter.atOffset(
             offset: errorRange.offset,
             length: errorRange.length,
-            diagnosticCode: CompileTimeErrorCode.undefinedIdentifier,
+            diagnosticCode: diag.undefinedIdentifier,
             arguments: [prefixOrClassName],
           );
         } else {
@@ -559,8 +541,8 @@
             offset: errorRange.offset,
             length: errorRange.length,
             diagnosticCode: instanceCreation.isConst
-                ? CompileTimeErrorCode.constWithNonType
-                : CompileTimeErrorCode.newWithNonType,
+                ? diag.constWithNonType
+                : diag.newWithNonType,
             arguments: [className],
           );
         }
@@ -580,7 +562,7 @@
       diagnosticReporter.atOffset(
         offset: errorRange.offset,
         length: errorRange.length,
-        diagnosticCode: CompileTimeErrorCode.undefinedClassBoolean,
+        diagnosticCode: diag.undefinedClassBoolean,
         arguments: [node.name.lexeme],
       );
       return;
@@ -591,7 +573,7 @@
       diagnosticReporter.atOffset(
         offset: errorRange.offset,
         length: errorRange.length,
-        diagnosticCode: CompileTimeErrorCode.nonTypeInCatchClause,
+        diagnosticCode: diag.nonTypeInCatchClause,
         arguments: [node.name.lexeme],
       );
       return;
@@ -602,7 +584,7 @@
       diagnosticReporter.atOffset(
         offset: errorRange.offset,
         length: errorRange.length,
-        diagnosticCode: CompileTimeErrorCode.castToNonType,
+        diagnosticCode: diag.castToNonType,
         arguments: [node.name.lexeme],
       );
       return;
@@ -614,14 +596,14 @@
         diagnosticReporter.atOffset(
           offset: errorRange.offset,
           length: errorRange.length,
-          diagnosticCode: CompileTimeErrorCode.typeTestWithNonType,
+          diagnosticCode: diag.typeTestWithNonType,
           arguments: [node.name.lexeme],
         );
       } else {
         diagnosticReporter.atOffset(
           offset: errorRange.offset,
           length: errorRange.length,
-          diagnosticCode: CompileTimeErrorCode.typeTestWithUndefinedName,
+          diagnosticCode: diag.typeTestWithUndefinedName,
           arguments: [node.name.lexeme],
         );
       }
@@ -633,7 +615,7 @@
       diagnosticReporter.atOffset(
         offset: errorRange.offset,
         length: errorRange.length,
-        diagnosticCode: CompileTimeErrorCode.redirectToNonClass,
+        diagnosticCode: diag.redirectToNonClass,
         arguments: [node.name.lexeme],
       );
       return;
@@ -644,7 +626,7 @@
       diagnosticReporter.atOffset(
         offset: errorRange.offset,
         length: errorRange.length,
-        diagnosticCode: CompileTimeErrorCode.nonTypeAsTypeArgument,
+        diagnosticCode: diag.nonTypeAsTypeArgument,
         arguments: [node.name.lexeme],
       );
       return;
@@ -683,7 +665,7 @@
       diagnosticReporter.atOffset(
         offset: errorRange.offset,
         length: errorRange.length,
-        diagnosticCode: CompileTimeErrorCode.notAType,
+        diagnosticCode: diag.notAType,
         arguments: [name],
         contextMessages: [
           if (source != null && nameOffset != null)
@@ -700,10 +682,7 @@
     }
 
     if (node.importPrefix == null && node.name.lexeme == 'await') {
-      diagnosticReporter.atNode(
-        node,
-        CompileTimeErrorCode.undefinedIdentifierAwait,
-      );
+      diagnosticReporter.atNode(node, diag.undefinedIdentifierAwait);
       return;
     }
 
@@ -711,7 +690,7 @@
     diagnosticReporter.atOffset(
       offset: errorRange.offset,
       length: errorRange.length,
-      diagnosticCode: CompileTimeErrorCode.undefinedClass,
+      diagnosticCode: diag.undefinedClass,
       arguments: [node.name.lexeme],
     );
   }
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 de384aa..a3e728f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/postfix_expression_resolver.dart
@@ -13,11 +13,10 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/dart/resolver/assignment_expression_resolver.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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving [PostfixExpression]s.
@@ -86,7 +85,7 @@
     )) {
       _resolver.diagnosticReporter.atNode(
         node,
-        CompileTimeErrorCode.invalidAssignment,
+        diag.invalidAssignment,
         arguments: [type, operandWriteType],
       );
     }
@@ -131,10 +130,7 @@
     ExpressionImpl operand = node.operand;
 
     if (identical(receiverType, NeverTypeImpl.instance)) {
-      _resolver.diagnosticReporter.atNode(
-        operand,
-        WarningCode.receiverOfTypeNever,
-      );
+      _resolver.diagnosticReporter.atNode(operand, diag.receiverOfTypeNever);
       return;
     }
 
@@ -153,13 +149,13 @@
       if (operand is SuperExpression) {
         _diagnosticReporter.atToken(
           node.operator,
-          CompileTimeErrorCode.undefinedSuperOperator,
+          diag.undefinedSuperOperator,
           arguments: [methodName, receiverType],
         );
       } else {
         _diagnosticReporter.atToken(
           node.operator,
-          CompileTimeErrorCode.undefinedOperator,
+          diag.undefinedOperator,
           arguments: [methodName, receiverType],
         );
       }
@@ -213,10 +209,7 @@
     var operand = node.operand;
 
     if (operand is SuperExpression) {
-      _resolver.diagnosticReporter.atNode(
-        node,
-        ParserErrorCode.missingAssignableSelector,
-      );
+      _resolver.diagnosticReporter.atNode(node, diag.missingAssignableSelector);
       operand.setPseudoExpressionStaticType(DynamicTypeImpl.instance);
       node.recordStaticType(DynamicTypeImpl.instance, resolver: _resolver);
       return;
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 1a1c4f3..812a55a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefix_expression_resolver.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/src/dart/resolver/assignment_expression_resolver.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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving [PrefixExpression]s.
@@ -104,7 +104,7 @@
     )) {
       _resolver.diagnosticReporter.atNode(
         node,
-        CompileTimeErrorCode.invalidAssignment,
+        diag.invalidAssignment,
         arguments: [type, operandWriteType],
       );
     }
@@ -162,7 +162,7 @@
           // safely assume `element.name` is non-`null`.
           _diagnosticReporter.atToken(
             node.operator,
-            CompileTimeErrorCode.undefinedExtensionOperator,
+            diag.undefinedExtensionOperator,
             arguments: [methodName, element.name!],
           );
         }
@@ -175,10 +175,7 @@
         return;
       }
       if (identical(readType, NeverTypeImpl.instance)) {
-        _resolver.diagnosticReporter.atNode(
-          operand,
-          WarningCode.receiverOfTypeNever,
-        );
+        _resolver.diagnosticReporter.atNode(operand, diag.receiverOfTypeNever);
         return;
       }
 
@@ -196,13 +193,13 @@
         if (operand is SuperExpression) {
           _diagnosticReporter.atToken(
             operator,
-            CompileTimeErrorCode.undefinedSuperOperator,
+            diag.undefinedSuperOperator,
             arguments: [methodName, readType],
           );
         } else {
           _diagnosticReporter.atToken(
             operator,
-            CompileTimeErrorCode.undefinedOperator,
+            diag.undefinedOperator,
             arguments: [methodName, readType],
           );
         }
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 6b47fbe..e50a084 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
@@ -10,7 +10,7 @@
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/resolver/invocation_inference_helper.dart';
 import 'package:analyzer/src/dart/resolver/property_element_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -144,7 +144,7 @@
       return false;
     }
     if (parent is ConstructorDeclaration) {
-      if (parent.returnType == node) {
+      if (parent.typeName == node) {
         return false;
       }
     }
@@ -181,7 +181,7 @@
 
     _resolver.diagnosticReporter.atNode(
       node,
-      CompileTimeErrorCode.extensionAsExpression,
+      diag.extensionAsExpression,
       arguments: [node.name],
     );
 
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 720b9f4..25c8005 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -19,8 +19,8 @@
 import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
 import 'package:analyzer/src/dart/resolver/lexical_lookup.dart';
 import 'package:analyzer/src/dart/resolver/resolution_result.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/assignment_verifier.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/listener.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/scope_helpers.dart';
@@ -74,8 +74,7 @@
               enclosingElement.isAbstract) {
             _resolver.diagnosticReporter.atNode(
               node,
-              CompileTimeErrorCode
-                  .tearoffOfGenerativeConstructorOfAbstractClass,
+              diag.tearoffOfGenerativeConstructorOfAbstractClass,
             );
           }
         }
@@ -127,10 +126,7 @@
       );
     }
 
-    diagnosticReporter.atNode(
-      node,
-      CompileTimeErrorCode.dotShorthandMissingContext,
-    );
+    diagnosticReporter.atNode(node, diag.dotShorthandMissingContext);
     return PropertyElementResolverResult();
   }
 
@@ -150,11 +146,10 @@
           result != ExtensionResolutionError.ambiguous) {
         // Extension overrides can only refer to named extensions, so it is safe
         // to assume that `target.staticElement!.name` is non-`null`.
-        _reportUnresolvedIndex(
-          node,
-          CompileTimeErrorCode.undefinedExtensionOperator,
-          ['[]', target.element.name!],
-        );
+        _reportUnresolvedIndex(node, diag.undefinedExtensionOperator, [
+          '[]',
+          target.element.name!,
+        ]);
       }
 
       if (hasWrite &&
@@ -162,11 +157,10 @@
           result != ExtensionResolutionError.ambiguous) {
         // Extension overrides can only refer to named extensions, so it is safe
         // to assume that `target.staticElement!.name` is non-`null`.
-        _reportUnresolvedIndex(
-          node,
-          CompileTimeErrorCode.undefinedExtensionOperator,
-          ['[]=', target.element.name!],
-        );
+        _reportUnresolvedIndex(node, diag.undefinedExtensionOperator, [
+          '[]=',
+          target.element.name!,
+        ]);
       }
 
       return _toIndexResult(
@@ -182,13 +176,13 @@
 
     if (targetType is VoidType) {
       // TODO(scheglov): Report directly in TypePropertyResolver?
-      _reportUnresolvedIndex(node, CompileTimeErrorCode.useOfVoidResult);
+      _reportUnresolvedIndex(node, diag.useOfVoidResult);
       return PropertyElementResolverResult();
     }
 
     if (identical(targetType, NeverTypeImpl.instance)) {
       // TODO(scheglov): Report directly in TypePropertyResolver?
-      diagnosticReporter.atNode(target, WarningCode.receiverOfTypeNever);
+      diagnosticReporter.atNode(target, diag.receiverOfTypeNever);
       return PropertyElementResolverResult();
     }
 
@@ -214,8 +208,8 @@
       _reportUnresolvedIndex(
         node,
         target is SuperExpression
-            ? CompileTimeErrorCode.undefinedSuperOperator
-            : CompileTimeErrorCode.undefinedOperator,
+            ? diag.undefinedSuperOperator
+            : diag.undefinedOperator,
         ['[]', targetType],
       );
     }
@@ -224,8 +218,8 @@
       _reportUnresolvedIndex(
         node,
         target is SuperExpression
-            ? CompileTimeErrorCode.undefinedSuperOperator
-            : CompileTimeErrorCode.undefinedOperator,
+            ? diag.undefinedSuperOperator
+            : diag.undefinedOperator,
         ['[]=', targetType],
       );
     }
@@ -409,7 +403,7 @@
 
     diagnosticReporter.atNode(
       identifier,
-      CompileTimeErrorCode.staticAccessToInstanceMember,
+      diag.staticAccessToInstanceMember,
       arguments: [identifier.name],
     );
     return true;
@@ -424,7 +418,7 @@
       if (target is ExtensionOverride) {
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
+          diag.extensionOverrideAccessToStaticMember,
         );
       } else {
         var enclosingElement = element.enclosingElement;
@@ -432,7 +426,7 @@
             enclosingElement.name == null) {
           _resolver.diagnosticReporter.atNode(
             propertyName,
-            CompileTimeErrorCode.instanceAccessToStaticMemberOfUnnamedExtension,
+            diag.instanceAccessToStaticMemberOfUnnamedExtension,
             arguments: [propertyName.name, element.kind.displayName],
           );
         } else {
@@ -441,7 +435,7 @@
           // case above.
           diagnosticReporter.atNode(
             propertyName,
-            CompileTimeErrorCode.instanceAccessToStaticMember,
+            diag.instanceAccessToStaticMember,
             arguments: [
               propertyName.name,
               element.kind.displayName,
@@ -543,10 +537,7 @@
     }
 
     if (targetType is VoidType) {
-      diagnosticReporter.atNode(
-        propertyName,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      diagnosticReporter.atNode(propertyName, diag.useOfVoidResult);
       return PropertyElementResolverResult();
     }
 
@@ -561,13 +552,13 @@
       if (hasRead) {
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedGetterOnFunctionType,
+          diag.undefinedGetterOnFunctionType,
           arguments: [propertyName.name, target.type.qualifiedName],
         );
       } else {
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedSetterOnFunctionType,
+          diag.undefinedSetterOnFunctionType,
           arguments: [propertyName.name, target.type.qualifiedName],
         );
       }
@@ -610,7 +601,7 @@
       if (result.needsGetterError) {
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedGetter,
+          diag.undefinedGetter,
           arguments: [propertyName.name, targetType],
         );
       }
@@ -670,7 +661,7 @@
         // assume that `extension.name` is non-`null`.
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedExtensionGetter,
+          diag.undefinedExtensionGetter,
           arguments: [memberName, extension.name!],
         );
       } else {
@@ -690,7 +681,7 @@
       if (writeElement == null) {
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedExtensionSetter,
+          diag.undefinedExtensionSetter,
           arguments: [memberName, extension.name!],
         );
       } else {
@@ -720,7 +711,7 @@
       // Report this error and recover by treating it like a non-cascade.
       diagnosticReporter.atToken(
         target.name,
-        CompileTimeErrorCode.extensionOverrideWithCascade,
+        diag.extensionOverrideWithCascade,
       );
     }
 
@@ -739,7 +730,7 @@
         // assume that `element.name` is non-`null`.
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedExtensionGetter,
+          diag.undefinedExtensionGetter,
           arguments: [memberName, element.name!],
         );
       } else {
@@ -757,7 +748,7 @@
         // assume that `element.name` is non-`null`.
         diagnosticReporter.atNode(
           propertyName,
-          CompileTimeErrorCode.undefinedExtensionSetter,
+          diag.undefinedExtensionSetter,
           arguments: [memberName, element.name!],
         );
       }
@@ -802,7 +793,7 @@
       if (readElement == null) {
         if (_definingLibrary.featureSet.isEnabled(Feature.static_extensions)) {
           // When direct lookups fail, try static extension resolution.
-          var result = _resolver.typePropertyResolver.resolveForDeclaration(
+          var result = _resolver.typePropertyResolver.resolveStaticExtension(
             declaration: typeReference,
             name: propertyName.name,
             hasRead: hasRead,
@@ -828,13 +819,13 @@
           // context type.
           diagnosticReporter.atNode(
             propertyName,
-            CompileTimeErrorCode.dotShorthandUndefinedGetter,
+            diag.dotShorthandUndefinedGetter,
             arguments: [propertyName.name, typeReference.name!],
           );
         } else {
           var code = typeReference is EnumElement
-              ? CompileTimeErrorCode.undefinedEnumConstant
-              : CompileTimeErrorCode.undefinedGetter;
+              ? diag.undefinedEnumConstant
+              : diag.undefinedGetter;
           diagnosticReporter.atNode(
             propertyName,
             code,
@@ -852,7 +843,7 @@
         if (!_isAccessible(writeElement)) {
           diagnosticReporter.atNode(
             propertyName,
-            CompileTimeErrorCode.privateSetter,
+            diag.privateSetter,
             arguments: [propertyName.name],
           );
         }
@@ -860,6 +851,31 @@
           writeElementRecovery = writeElement;
           writeElement = null;
         }
+      } else if (_definingLibrary.featureSet.isEnabled(
+        Feature.static_extensions,
+      )) {
+        // When direct lookups fail, try static extension resolution.
+        var result = _resolver.typePropertyResolver.resolveStaticExtension(
+          declaration: typeReference,
+          name: propertyName.name,
+          hasRead: hasRead,
+          hasWrite: hasWrite,
+          propertyErrorEntity: propertyName,
+          nameErrorEntity: propertyName,
+        );
+        if (result.setter2 != null) {
+          writeElementRecovery = writeElement;
+          writeElement = result.setter2;
+        } else {
+          // Recovery, try to use getter.
+          writeElementRecovery = typeReference.getGetter(propertyName.name);
+          AssignmentVerifier(diagnosticReporter).verify(
+            node: propertyName,
+            requested: null,
+            recovery: writeElementRecovery,
+            receiverType: typeReference.thisType,
+          );
+        }
       } else {
         // Recovery, try to use getter.
         writeElementRecovery = typeReference.getGetter(propertyName.name);
@@ -911,7 +927,7 @@
           )) {
         diagnosticReporter.atNode(
           identifier,
-          CompileTimeErrorCode.undefinedPrefixedName,
+          diag.undefinedPrefixedName,
           arguments: [identifier.name, target.name!],
         );
       }
@@ -961,7 +977,7 @@
           );
           if (readElement != null) {
             diagnosticReporter.report(
-              CompileTimeErrorCode.abstractSuperMemberReference
+              diag.abstractSuperMemberReference
                   .withArguments(
                     memberKind: readElement.kind.displayName,
                     name: propertyName.name,
@@ -971,7 +987,7 @@
           } else {
             diagnosticReporter.atNode(
               propertyName,
-              CompileTimeErrorCode.undefinedSuperGetter,
+              diag.undefinedSuperGetter,
               arguments: [propertyName.name, targetType],
             );
           }
@@ -1012,7 +1028,7 @@
           );
           if (writeElement != null) {
             diagnosticReporter.report(
-              CompileTimeErrorCode.abstractSuperMemberReference
+              diag.abstractSuperMemberReference
                   .withArguments(
                     memberKind: writeElement.kind.displayName,
                     name: propertyName.name,
@@ -1022,7 +1038,7 @@
           } else {
             diagnosticReporter.atNode(
               propertyName,
-              CompileTimeErrorCode.undefinedSuperSetter,
+              diag.undefinedSuperSetter,
               arguments: [propertyName.name, targetType],
             );
           }
diff --git a/pkg/analyzer/lib/src/dart/resolver/record_literal_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/record_literal_resolver.dart
index 3ba33d7..447da2c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/record_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/record_literal_resolver.dart
@@ -10,8 +10,8 @@
 import 'package:analyzer/src/dart/element/extensions.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving [RecordLiteral]s.
@@ -111,23 +111,20 @@
         var nameNode = field.name.label;
         var name = nameNode.name;
         if (name.startsWith('_')) {
-          _diagnosticReporter.atNode(
-            nameNode,
-            CompileTimeErrorCode.invalidFieldNamePrivate,
-          );
+          _diagnosticReporter.atNode(nameNode, diag.invalidFieldNamePrivate);
         } else {
           var index = RecordTypeExtension.positionalFieldIndex(name);
           if (index != null) {
             if (index < positionalCount) {
               _diagnosticReporter.atNode(
                 nameNode,
-                CompileTimeErrorCode.invalidFieldNamePositional,
+                diag.invalidFieldNamePositional,
               );
             }
           } else if (isForbiddenNameForRecordField(name)) {
             _diagnosticReporter.atNode(
               nameNode,
-              CompileTimeErrorCode.invalidFieldNameFromObject,
+              diag.invalidFieldNameFromObject,
             );
           }
         }
@@ -155,7 +152,7 @@
     }
 
     if (staticType is VoidType) {
-      _diagnosticReporter.atNode(field, CompileTimeErrorCode.useOfVoidResult);
+      _diagnosticReporter.atNode(field, diag.useOfVoidResult);
     }
 
     return staticType;
diff --git a/pkg/analyzer/lib/src/dart/resolver/record_type_annotation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/record_type_annotation_resolver.dart
index 126a97b..e7d19d4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/record_type_annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/record_type_annotation_resolver.dart
@@ -12,8 +12,8 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/resolver/record_literal_resolver.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
 
 /// Helper for resolving [RecordTypeAnnotation]s.
 class RecordTypeAnnotationResolver {
@@ -74,7 +74,7 @@
           if (!isPositionalWildCard(field, name)) {
             _diagnosticReporter.atToken(
               nameToken,
-              CompileTimeErrorCode.invalidFieldNamePrivate,
+              diag.invalidFieldNamePrivate,
             );
           }
         } else {
@@ -84,7 +84,7 @@
                 positionalFields.indexOf(field) != index) {
               _diagnosticReporter.atToken(
                 nameToken,
-                CompileTimeErrorCode.invalidFieldNamePositional,
+                diag.invalidFieldNamePositional,
               );
             }
           } else if (RecordLiteralResolver.isForbiddenNameForRecordField(
@@ -92,7 +92,7 @@
           )) {
             _diagnosticReporter.atToken(
               nameToken,
-              CompileTimeErrorCode.invalidFieldNameFromObject,
+              diag.invalidFieldNameFromObject,
             );
           }
         }
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index e850629..4e0865f 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -25,8 +25,8 @@
 import 'package:analyzer/src/dart/resolver/named_type_resolver.dart';
 import 'package:analyzer/src/dart/resolver/record_type_annotation_resolver.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/element_walker.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/utilities/extensions/collection.dart';
@@ -205,14 +205,14 @@
     if (element == null) {
       _diagnosticReporter.atToken(
         node.name,
-        CompileTimeErrorCode.undefinedIdentifier,
+        diag.undefinedIdentifier,
         arguments: [name],
       );
     } else if (!(element is LocalVariableElement ||
         element is FormalParameterElement)) {
       _diagnosticReporter.atToken(
         node.name,
-        CompileTimeErrorCode.patternAssignmentNotLocalVariable,
+        diag.patternAssignmentNotLocalVariable,
       );
     }
   }
@@ -300,8 +300,8 @@
 
     _withElementWalker(ElementWalker.forClass(fragment), () {
       _withNameScope(() {
-        _buildTypeParameterElements(node.typeParameters);
-        node.typeParameters?.accept(this);
+        _buildTypeParameterElements(node.namePart.typeParameters);
+        node.namePart.accept(this);
 
         var extendsClause = node.extendsClause;
         var withClause = node.withClause;
@@ -323,7 +323,7 @@
         _defineElements(element.getters);
         _defineElements(element.setters);
         _defineElements(element.methods);
-        node.members.accept(this);
+        node.body.accept(this);
       });
     });
 
@@ -371,7 +371,7 @@
     _withElementHolder(ElementHolder(fragment), () {
       _withElementWalker(null, () {
         _withNameScope(() {
-          node.returnType.accept(this);
+          node.typeName?.accept(this);
 
           _withElementWalker(ElementWalker.forExecutable(fragment), () {
             node.parameters.accept(this);
@@ -463,6 +463,7 @@
           parameterKind: node.kind,
           name: name2,
           nameOffset: nameOffset2,
+          privateName: null,
         )..constantInitializer = node.defaultValue;
       } else if (node.parameter is SuperFormalParameter) {
         // Only for recovery, this should not happen in valid code.
@@ -538,8 +539,8 @@
 
     _withElementWalker(ElementWalker.forEnum(fragment), () {
       _withNameScope(() {
-        _buildTypeParameterElements(node.typeParameters);
-        node.typeParameters?.accept(this);
+        _buildTypeParameterElements(node.namePart.typeParameters);
+        node.namePart.accept(this);
 
         _resolveWithClause(declaration: node, clause: node.withClause);
         _resolveImplementsClause(
@@ -550,8 +551,7 @@
         _defineElements(element.getters);
         _defineElements(element.setters);
         _defineElements(element.methods);
-        node.constants.accept(this);
-        node.members.accept(this);
+        node.body.accept(this);
       });
     });
 
@@ -587,7 +587,7 @@
         _defineElements(element.getters);
         _defineElements(element.setters);
         _defineElements(element.methods);
-        node.members.accept(this);
+        node.body.accept(this);
       });
     });
   }
@@ -604,18 +604,21 @@
     _setOrCreateMetadataElements(fragment, node.metadata);
 
     if (identical(element.firstFragment, fragment)) {
+      var formalParameters = node.primaryConstructor.formalParameters;
       _setOrCreateMetadataElements(
         element.representation.firstFragment,
-        node.representation.fieldMetadata,
+        formalParameters.parameters.first.metadata,
       );
     }
 
     _withElementWalker(ElementWalker.forExtensionType(fragment), () {
       _withNameScope(() {
-        _buildTypeParameterElements(node.typeParameters);
-        node.typeParameters?.accept(this);
+        var typeParameters = node.primaryConstructor.typeParameters;
+        _buildTypeParameterElements(typeParameters);
+        typeParameters?.accept(this);
 
-        node.representation.accept(this);
+        node.primaryConstructor.accept(this);
+
         _resolveImplementsClause(
           declaration: node,
           clause: node.implementsClause,
@@ -624,7 +627,9 @@
         _defineElements(element.getters);
         _defineElements(element.setters);
         _defineElements(element.methods);
-        node.members.accept(this);
+        // Skip the representation field.
+        _elementWalker!.getVariable();
+        node.body.accept(this);
       });
     });
 
@@ -648,6 +653,7 @@
           name: nameToken.lexeme.nullIfEmpty,
           nameOffset: nameToken.offset.nullIfNegative,
           parameterKind: node.kind,
+          privateName: null,
         );
         _elementHolder.enclose(fragment);
         fragment.isConst = node.isConst;
@@ -1006,10 +1012,7 @@
         //
         // This is a case where the parser does not report an error, because the
         // parser thinks this could be an InstanceCreationExpression.
-        _diagnosticReporter.atNode(
-          node,
-          WarningCode.sdkVersionConstructorTearoffs,
-        );
+        _diagnosticReporter.atNode(node, diag.sdkVersionConstructorTearoffs);
       }
       return newNode.accept(this);
     }
@@ -1140,7 +1143,7 @@
         _defineElements(element.getters);
         _defineElements(element.setters);
         _defineElements(element.methods);
-        node.members.accept(this);
+        node.body.accept(this);
       });
     });
   }
@@ -1210,6 +1213,24 @@
   }
 
   @override
+  void visitPrimaryConstructorDeclaration(
+    covariant PrimaryConstructorDeclarationImpl node,
+  ) {
+    var fragment = _elementWalker!.getConstructor();
+    node.declaredFragment = fragment;
+
+    _withElementHolder(ElementHolder(fragment), () {
+      _withElementWalker(null, () {
+        _withNameScope(() {
+          _withElementWalker(ElementWalker.forExecutable(fragment), () {
+            node.formalParameters.accept(this);
+          });
+        });
+      });
+    });
+  }
+
+  @override
   void visitPropertyAccess(covariant PropertyAccessImpl node) {
     var newNode = _astRewriter.propertyAccess(_nameScope, node);
     if (newNode != node) {
@@ -1229,16 +1250,6 @@
   }
 
   @override
-  void visitRepresentationDeclaration(
-    covariant RepresentationDeclarationImpl node,
-  ) {
-    node.fieldFragment = _elementWalker!.getVariable() as FieldFragmentImpl;
-    node.constructorFragment = _elementWalker!.getConstructor();
-
-    super.visitRepresentationDeclaration(node);
-  }
-
-  @override
   void visitSimpleFormalParameter(covariant SimpleFormalParameterImpl node) {
     FormalParameterFragmentImpl fragment;
     if (node.parent is DefaultFormalParameter) {
@@ -1746,21 +1757,20 @@
     switch (clause) {
       case null:
         if (declaration is ClassTypeAlias) {
-          diagnosticCode = CompileTimeErrorCode.mixinWithNonClassSuperclass;
+          diagnosticCode = diag.mixinWithNonClassSuperclass;
         }
       case ExtendsClause():
         if (declaration is ClassDeclaration) {
           diagnosticCode = declaration.withClause == null
-              ? CompileTimeErrorCode.extendsNonClass
-              : CompileTimeErrorCode.mixinWithNonClassSuperclass;
+              ? diag.extendsNonClass
+              : diag.mixinWithNonClassSuperclass;
         }
       case ImplementsClause():
-        diagnosticCode = CompileTimeErrorCode.implementsNonClass;
+        diagnosticCode = diag.implementsNonClass;
       case MixinOnClause():
-        diagnosticCode =
-            CompileTimeErrorCode.mixinSuperClassConstraintNonInterface;
+        diagnosticCode = diag.mixinSuperClassConstraintNonInterface;
       case WithClause():
-        diagnosticCode = CompileTimeErrorCode.mixinOfNonClass;
+        diagnosticCode = diag.mixinOfNonClass;
     }
 
     // Should not happen.
@@ -1852,7 +1862,7 @@
     if (!typeSystem.isValidExtensionTypeSuperinterface(type)) {
       _diagnosticReporter.atNode(
         node,
-        CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
+        diag.extensionTypeImplementsDisallowedType,
         arguments: [type],
       );
       return;
@@ -1874,8 +1884,7 @@
         )) {
           _diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode
-                .extensionTypeImplementsRepresentationNotSupertype,
+            diag.extensionTypeImplementsRepresentationNotSupertype,
             arguments: [
               implementedRepresentation,
               type.element.name ?? '',
@@ -1890,7 +1899,7 @@
 
     _diagnosticReporter.atNode(
       node,
-      CompileTimeErrorCode.extensionTypeImplementsNotSupertype,
+      diag.extensionTypeImplementsNotSupertype,
       arguments: [type, declaredRepresentation],
     );
   }
@@ -2039,7 +2048,7 @@
     visitor._diagnosticReporter.reportError(
       DiagnosticFactory().duplicateDefinitionForNodes(
         visitor._diagnosticReporter.source,
-        CompileTimeErrorCode.duplicateVariablePattern,
+        diag.duplicateVariablePattern,
         duplicate.node.name,
         original.node.name,
         [name],
@@ -2057,7 +2066,7 @@
   }) {
     visitor._diagnosticReporter.atNode(
       hasInLeft ? node.rightOperand : node.leftOperand,
-      CompileTimeErrorCode.missingVariablePattern,
+      diag.missingVariablePattern,
       arguments: [name],
     );
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart b/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
index f91df748..2786e67 100644
--- a/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/shared_type_analyzer.dart
@@ -9,8 +9,8 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
 
 typedef SharedPatternField =
     shared.RecordPatternField<PatternFieldImpl, DartPatternImpl>;
@@ -44,7 +44,7 @@
   }) {
     _diagnosticReporter.atNode(
       caseExpression,
-      CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
+      diag.caseExpressionTypeIsNotSwitchExpressionSubtype,
       arguments: [caseExpressionType, scrutineeType],
     );
   }
@@ -102,7 +102,7 @@
 
   @override
   void emptyMapPattern({required DartPattern pattern}) {
-    _diagnosticReporter.atNode(pattern, CompileTimeErrorCode.emptyMapPattern);
+    _diagnosticReporter.atNode(pattern, diag.emptyMapPattern);
   }
 
   @override
@@ -112,7 +112,7 @@
   }) {
     _diagnosticReporter.atElement2(
       component,
-      CompileTimeErrorCode.inconsistentPatternVariableLogicalOr,
+      diag.inconsistentPatternVariableLogicalOr,
       arguments: [variable.name!],
     );
   }
@@ -125,12 +125,12 @@
     if (pattern is NullAssertPattern) {
       _diagnosticReporter.atToken(
         pattern.operator,
-        StaticWarningCode.unnecessaryNullAssertPattern,
+        diag.unnecessaryNullAssertPattern,
       );
     } else if (pattern is NullCheckPattern) {
       _diagnosticReporter.atToken(
         pattern.operator,
-        StaticWarningCode.unnecessaryNullCheckPattern,
+        diag.unnecessaryNullCheckPattern,
       );
     } else {
       throw UnimplementedError('(${pattern.runtimeType}) $pattern');
@@ -143,15 +143,12 @@
     required SharedTypeView matchedType,
     required SharedTypeView requiredType,
   }) {
-    _diagnosticReporter.atToken(
-      pattern.asToken,
-      WarningCode.unnecessaryCastPattern,
-    );
+    _diagnosticReporter.atToken(pattern.asToken, diag.unnecessaryCastPattern);
   }
 
   @override
   void nonBooleanCondition({required Expression node}) {
-    _diagnosticReporter.atNode(node, CompileTimeErrorCode.nonBoolCondition);
+    _diagnosticReporter.atNode(node, diag.nonBoolCondition);
   }
 
   @override
@@ -162,7 +159,7 @@
   }) {
     _diagnosticReporter.atNode(
       expression,
-      CompileTimeErrorCode.forInOfInvalidType,
+      diag.forInOfInvalidType,
       arguments: [expressionType, 'Iterable'],
     );
   }
@@ -176,7 +173,7 @@
   }) {
     _diagnosticReporter.atNode(
       pattern,
-      CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
+      diag.patternTypeMismatchInIrrefutableContext,
       arguments: [matchedType, requiredType],
     );
   }
@@ -188,7 +185,7 @@
   }) {
     _diagnosticReporter.atNode(
       pattern,
-      CompileTimeErrorCode.refutablePatternInIrrefutableContext,
+      diag.refutablePatternInIrrefutableContext,
     );
   }
 
@@ -200,7 +197,7 @@
   }) {
     _diagnosticReporter.atNode(
       pattern.operand,
-      CompileTimeErrorCode.relationalPatternOperandTypeNotAssignable,
+      diag.relationalPatternOperandTypeNotAssignable,
       arguments: [operandType, parameterType, pattern.operator.lexeme],
     );
   }
@@ -212,8 +209,7 @@
   }) {
     _diagnosticReporter.atToken(
       pattern.operator,
-      CompileTimeErrorCode
-          .relationalPatternOperatorReturnTypeNotAssignableToBool,
+      diag.relationalPatternOperatorReturnTypeNotAssignableToBool,
     );
   }
 
@@ -222,10 +218,7 @@
     required covariant MapPatternImpl node,
     required covariant RestPatternElementImpl element,
   }) {
-    _diagnosticReporter.atNode(
-      element,
-      CompileTimeErrorCode.restElementInMapPattern,
-    );
+    _diagnosticReporter.atNode(element, diag.restElementInMapPattern);
   }
 
   @override
@@ -235,7 +228,7 @@
   }) {
     _diagnosticReporter.atToken(
       node.members[caseIndex].keyword,
-      CompileTimeErrorCode.switchCaseCompletesNormally,
+      diag.switchCaseCompletesNormally,
     );
   }
 
@@ -246,10 +239,7 @@
   }) {
     switch (kind) {
       case UnnecessaryWildcardKind.logicalAndPatternOperand:
-        _diagnosticReporter.atNode(
-          pattern,
-          WarningCode.unnecessaryWildcardPattern,
-        );
+        _diagnosticReporter.atNode(pattern, diag.unnecessaryWildcardPattern);
     }
   }
 }
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 da38ffd..b723937 100644
--- a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/resolver/property_element_resolver.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/scope_helpers.dart';
@@ -76,7 +76,7 @@
       return false;
     }
     if (parent is ConstructorDeclaration) {
-      if (parent.returnType == node) {
+      if (parent.typeName == node) {
         return false;
       }
     }
@@ -196,10 +196,7 @@
     var enclosingClass = _resolver.enclosingClass;
     if (_isFactoryConstructorReturnType(node) &&
         !identical(element, enclosingClass)) {
-      diagnosticReporter.atNode(
-        node,
-        CompileTimeErrorCode.invalidFactoryNameNotAClass,
-      );
+      diagnosticReporter.atNode(node, diag.invalidFactoryNameNotAClass);
     } else if (_isConstructorReturnType(node) &&
         !identical(element, enclosingClass)) {
       // This error is now reported by the parser.
@@ -208,23 +205,20 @@
       if (element.name case var name?) {
         diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.prefixIdentifierNotFollowedByDot,
+          diag.prefixIdentifierNotFollowedByDot,
           arguments: [name],
         );
       }
     } else if (element == null) {
       // TODO(brianwilkerson): Recover from this error.
       if (node.name == "await" && _resolver.enclosingFunction != null) {
-        diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.undefinedIdentifierAwait,
-        );
+        diagnosticReporter.atNode(node, diag.undefinedIdentifierAwait);
       } else if (!_resolver.libraryFragment.shouldIgnoreUndefinedIdentifier(
         node,
       )) {
         diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           arguments: [node.name],
         );
       }
@@ -334,7 +328,7 @@
 
     _resolver.diagnosticReporter.atNode(
       node,
-      CompileTimeErrorCode.extensionAsExpression,
+      diag.extensionAsExpression,
       arguments: [node.name],
     );
 
@@ -351,7 +345,7 @@
   static bool _isConstructorReturnType(SimpleIdentifier identifier) {
     var parent = identifier.parent;
     if (parent is ConstructorDeclaration) {
-      return identical(parent.returnType, identifier);
+      return identical(parent.typeName, identifier);
     }
     return false;
   }
@@ -361,7 +355,7 @@
   static bool _isFactoryConstructorReturnType(SimpleIdentifier identifier) {
     var parent = identifier.parent;
     if (parent is ConstructorDeclaration) {
-      return identical(parent.returnType, identifier) &&
+      return identical(parent.typeName, identifier) &&
           parent.factoryKeyword != null;
     }
     return false;
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
index f69a6df..77f6e3d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
@@ -17,7 +17,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/resolution_result.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving properties (getters, setters, or methods).
@@ -128,27 +128,24 @@
       DiagnosticCode errorCode;
       List<String> arguments;
       if (parentNode == null) {
-        errorCode = CompileTimeErrorCode.uncheckedInvocationOfNullableValue;
+        errorCode = diag.uncheckedInvocationOfNullableValue;
         arguments = [];
       } else {
         if (parentNode is CascadeExpression) {
           parentNode = parentNode.cascadeSections.first;
         }
         if (parentNode is BinaryExpression || parentNode is RelationalPattern) {
-          errorCode =
-              CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue;
+          errorCode = diag.uncheckedOperatorInvocationOfNullableValue;
           arguments = [name];
         } else if (parentNode is MethodInvocation ||
             parentNode is MethodReferenceExpression) {
-          errorCode =
-              CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue;
+          errorCode = diag.uncheckedMethodInvocationOfNullableValue;
           arguments = [name];
         } else if (parentNode is FunctionExpressionInvocation) {
-          errorCode = CompileTimeErrorCode.uncheckedInvocationOfNullableValue;
+          errorCode = diag.uncheckedInvocationOfNullableValue;
           arguments = [];
         } else {
-          errorCode =
-              CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue;
+          errorCode = diag.uncheckedPropertyAccessOfNullableValue;
           arguments = [name];
         }
       }
@@ -241,7 +238,7 @@
   }
 
   /// Resolve static invocations for [declaration].
-  ResolutionResult resolveForDeclaration({
+  ResolutionResult resolveStaticExtension({
     required InterfaceElement declaration,
     required String name,
     required bool hasRead,
@@ -256,23 +253,28 @@
     _nameErrorEntity = nameErrorEntity;
     _resetResult();
 
-    var getterName = Name(_definingLibrary.uri, _name);
-    var result = _extensionResolver.findExtensionForDeclaration(
+    var memberName = Name(_definingLibrary.uri, _name);
+    var result = _extensionResolver.findStaticExtension(
       declaration,
       _nameErrorEntity,
-      getterName,
+      memberName,
     );
-    // TODO(cstefantsova): Add the support for setters and methods.
+
     _reportedGetterError =
         result == const AmbiguousStaticExtensionResolutionError();
-    _reportedSetterError = false;
+    _reportedSetterError =
+        result == const AmbiguousStaticExtensionResolutionError();
 
-    if (result.member != null) {
-      // TODO(cstefantsova): Add the support for setters and methods.
+    if (result.member != null && hasRead) {
       _needsGetterError = false;
       _getterRequested = result.member;
     }
 
+    if (result.member != null && hasWrite) {
+      _needsSetterError = false;
+      _setterRequested = result.member;
+    }
+
     return _toResult();
   }
 
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 6bbdc1a..a01a24e 100644
--- a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
@@ -15,7 +15,7 @@
 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_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/inference_log.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
@@ -520,7 +520,7 @@
       // as the types of those elements are considered resolved.
       _diagnosticReporter.atNode(
         node,
-        WarningCode.inferenceFailureOnCollectionLiteral,
+        diag.inferenceFailureOnCollectionLiteral,
         arguments: ['List'],
       );
     }
@@ -635,15 +635,9 @@
       inferenceLogWriter?.exitGenericInference(failed: true);
     }
     if (mustBeAMap && mustBeASet) {
-      _diagnosticReporter.atNode(
-        literal,
-        CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth,
-      );
+      _diagnosticReporter.atNode(literal, diag.ambiguousSetOrMapLiteralBoth);
     } else {
-      _diagnosticReporter.atNode(
-        literal,
-        CompileTimeErrorCode.ambiguousSetOrMapLiteralEither,
-      );
+      _diagnosticReporter.atNode(literal, diag.ambiguousSetOrMapLiteralEither);
     }
     return _typeProvider.dynamicType;
   }
@@ -791,7 +785,7 @@
       // as the types of those elements are considered resolved.
       _diagnosticReporter.atNode(
         node,
-        WarningCode.inferenceFailureOnCollectionLiteral,
+        diag.inferenceFailureOnCollectionLiteral,
         arguments: [node.isMap ? 'Map' : 'Set'],
       );
     }
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 2fcaf91..72bbae9 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving [VariableDeclaration]s.
@@ -31,7 +31,7 @@
       if (_strictInference && parent.type == null) {
         _resolver.diagnosticReporter.atNode(
           node,
-          WarningCode.inferenceFailureOnUninitializedVariable,
+          diag.inferenceFailureOnUninitializedVariable,
           arguments: [node.name.lexeme],
         );
       }
@@ -84,7 +84,7 @@
       initializer,
       initializerType,
       element.type,
-      CompileTimeErrorCode.invalidAssignment,
+      diag.invalidAssignment,
       whyNotPromoted: whyNotPromoted,
     );
   }
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 1edb209..bebb39d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/src/dart/element/type_schema.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/body_inference_context.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for resolving [YieldStatement]s.
@@ -40,7 +40,7 @@
   /// it returns 'void'. Or, in rare cases, when other types of expressions are
   /// void, such as identifiers.
   ///
-  /// See [CompileTimeErrorCode.useOfVoidResult].
+  /// See [diag.useOfVoidResult].
   ///
   // TODO(scheglov): This is duplicate
   // TODO(scheglov): Also in [BoolExpressionVerifier]
@@ -50,15 +50,9 @@
     }
 
     if (expression is MethodInvocation) {
-      _diagnosticReporter.atNode(
-        expression.methodName,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(expression.methodName, diag.useOfVoidResult);
     } else {
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(expression, diag.useOfVoidResult);
     }
 
     return true;
@@ -95,7 +89,7 @@
         )) {
           _diagnosticReporter.atNode(
             expression,
-            CompileTimeErrorCode.yieldEachOfInvalidType,
+            diag.yieldEachOfInvalidType,
             arguments: [impliedReturnType, imposedReturnType],
           );
           return;
@@ -115,7 +109,7 @@
           )) {
             _diagnosticReporter.atNode(
               expression,
-              CompileTimeErrorCode.yieldOfInvalidType,
+              diag.yieldOfInvalidType,
               arguments: [expressionType, imposedValueType],
             );
             return;
@@ -142,7 +136,7 @@
       )) {
         _diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.yieldEachOfInvalidType,
+          diag.yieldEachOfInvalidType,
           arguments: [impliedReturnType, requiredReturnType],
         );
       }
@@ -179,7 +173,7 @@
 
     if (node.star != null) {
       _resolver.nullableDereferenceVerifier.expression(
-        CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach,
+        diag.uncheckedUseOfNullableValueInYieldEach,
         node.expression,
       );
     }
@@ -204,8 +198,8 @@
     _diagnosticReporter.atNode(
       node,
       node.star != null
-          ? CompileTimeErrorCode.yieldEachInNonGenerator
-          : CompileTimeErrorCode.yieldInNonGenerator,
+          ? diag.yieldEachInNonGenerator
+          : diag.yieldInNonGenerator,
     );
 
     _checkForUseOfVoidResult(node.expression);
diff --git a/pkg/analyzer/lib/src/dart/scanner/scanner.dart b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
index 2ae5ee4..f1f6178 100644
--- a/pkg/analyzer/lib/src/dart/scanner/scanner.dart
+++ b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
@@ -16,12 +16,10 @@
 import 'package:analyzer/src/dart/scanner/reader.dart';
 import 'package:analyzer/src/dart/scanner/translate_error_token.dart'
     show translateErrorToken;
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:meta/meta.dart';
 import 'package:pub_semver/pub_semver.dart';
 
-export 'package:analyzer/src/dart/error/syntactic_errors.dart';
-
 /// The class `Scanner` implements a scanner for Dart code.
 ///
 /// The lexical structure of Dart is ambiguous without knowledge of the context
@@ -212,7 +210,7 @@
           source: source,
           offset: versionToken.offset,
           length: versionToken.length,
-          diagnosticCode: WarningCode.invalidLanguageVersionOverrideGreater,
+          diagnosticCode: diag.invalidLanguageVersionOverrideGreater,
           arguments: [latestVersion.major, latestVersion.minor],
         ),
       );
diff --git a/pkg/analyzer/lib/src/dart/scanner/translate_error_token.dart b/pkg/analyzer/lib/src/dart/scanner/translate_error_token.dart
index 61c06b7..238ac9e 100644
--- a/pkg/analyzer/lib/src/dart/scanner/translate_error_token.dart
+++ b/pkg/analyzer/lib/src/dart/scanner/translate_error_token.dart
@@ -8,7 +8,7 @@
     show Token, TokenType;
 import 'package:_fe_analyzer_shared/src/scanner/token_constants.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Translates the given error [token] into an analyzer error and reports it
 /// using [reportError].
@@ -30,51 +30,43 @@
   Code errorCode = token.errorCode;
   switch (errorCode.pseudoSharedCode) {
     case PseudoSharedCode.encoding:
-      reportError(ScannerErrorCode.encoding, charOffset, null);
+      reportError(diag.encoding, charOffset, null);
       return;
 
     case PseudoSharedCode.unterminatedStringLiteral:
       // TODO(paulberry): Fasta reports the error location as the entire
       // string; analyzer expects the end of the string.
-      reportError(
-        ScannerErrorCode.unterminatedStringLiteral,
-        endOffset - 1,
-        null,
-      );
+      reportError(diag.unterminatedStringLiteral, endOffset - 1, null);
       return;
 
     case PseudoSharedCode.unterminatedMultiLineComment:
       // TODO(paulberry): Fasta reports the error location as the entire
       // comment; analyzer expects the end of the comment.
-      reportError(
-        ScannerErrorCode.unterminatedMultiLineComment,
-        endOffset - 1,
-        null,
-      );
+      reportError(diag.unterminatedMultiLineComment, endOffset - 1, null);
       return;
 
     case PseudoSharedCode.missingDigit:
       // TODO(paulberry): Fasta reports the error location as the entire
       // number; analyzer expects the end of the number.
       charOffset = endOffset - 1;
-      return makeError(ScannerErrorCode.missingDigit, null);
+      return makeError(diag.missingDigit, null);
 
     case PseudoSharedCode.missingHexDigit:
       // TODO(paulberry): Fasta reports the error location as the entire
       // number; analyzer expects the end of the number.
       charOffset = endOffset - 1;
-      return makeError(ScannerErrorCode.missingHexDigit, null);
+      return makeError(diag.missingHexDigit, null);
 
     case PseudoSharedCode.illegalCharacter:
       // We can safely assume `token.character` is non-`null` because this error
       // is only reported when there is a character associated with the token.
-      return makeError(ScannerErrorCode.illegalCharacter, [token.character!]);
+      return makeError(diag.illegalCharacter, [token.character!]);
 
     case PseudoSharedCode.unexpectedSeparatorInNumber:
-      return makeError(ScannerErrorCode.unexpectedSeparatorInNumber, null);
+      return makeError(diag.unexpectedSeparatorInNumber, null);
 
     case PseudoSharedCode.unsupportedOperator:
-      return makeError(ScannerErrorCode.unsupportedOperator, [
+      return makeError(diag.unsupportedOperator, [
         (token as UnsupportedOperator).token.lexeme,
       ]);
 
@@ -84,19 +76,19 @@
         TokenType type = token.begin!.type;
         if (type == TokenType.OPEN_CURLY_BRACKET ||
             type == TokenType.STRING_INTERPOLATION_EXPRESSION) {
-          return makeError(ParserErrorCode.expectedToken, ['}']);
+          return makeError(diag.expectedToken, ['}']);
         }
         if (type == TokenType.OPEN_SQUARE_BRACKET) {
-          return makeError(ParserErrorCode.expectedToken, [']']);
+          return makeError(diag.expectedToken, [']']);
         }
         if (type == TokenType.OPEN_PAREN) {
-          return makeError(ParserErrorCode.expectedToken, [')']);
+          return makeError(diag.expectedToken, [')']);
         }
         if (type == TokenType.LT) {
-          return makeError(ParserErrorCode.expectedToken, ['>']);
+          return makeError(diag.expectedToken, ['>']);
         }
       } else if (errorCode == codeUnexpectedDollarInString) {
-        return makeError(ParserErrorCode.missingIdentifier, null);
+        return makeError(diag.missingIdentifier, null);
       }
       throw UnimplementedError('$errorCode "${errorCode.pseudoSharedCode}"');
   }
diff --git a/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart b/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart
index 3316426..9ade90c 100644
--- a/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart
+++ b/pkg/analyzer/lib/src/dartdoc/dartdoc_directive_info.dart
@@ -216,47 +216,25 @@
       var rawText = getCommentNodeRawText(comment);
       result.extractTemplate(rawText);
 
-      if (useDeclaringConstructorsAst) {
-        var members = switch (declaration) {
-          ClassDeclaration() =>
-            declaration.body.ifTypeOrNull<BlockClassBody>()?.members,
-          EnumDeclaration() => [
-            ...declaration.body.constants,
-            ...declaration.body.members,
-          ],
-          MixinDeclaration() => declaration.body.members,
-          ExtensionDeclaration() => declaration.body.members,
-          ExtensionTypeDeclaration() =>
-            declaration.body.ifTypeOrNull<BlockClassBody>()?.members,
-          _ => null,
-        };
+      var members = switch (declaration) {
+        ClassDeclaration() =>
+          declaration.body.ifTypeOrNull<BlockClassBody>()?.members,
+        EnumDeclaration() => [
+          ...declaration.body.constants,
+          ...declaration.body.members,
+        ],
+        MixinDeclaration() => declaration.body.members,
+        ExtensionDeclaration() => declaration.body.members,
+        ExtensionTypeDeclaration() =>
+          declaration.body.ifTypeOrNull<BlockClassBody>()?.members,
+        _ => null,
+      };
 
-        if (members != null) {
-          for (var member in members) {
-            var comment = member.documentationComment;
-            var rawText = getCommentNodeRawText(comment);
-            result.extractTemplate(rawText);
-          }
-        }
-      } else {
-        var members = switch (declaration) {
-          ClassDeclaration() => declaration.members,
-          EnumDeclaration() => [
-            ...declaration.members,
-            ...declaration.constants,
-          ],
-          MixinDeclaration() => declaration.members,
-          ExtensionDeclaration() => declaration.members,
-          ExtensionTypeDeclaration() => declaration.members,
-          _ => null,
-        };
-
-        if (members != null) {
-          for (var member in members) {
-            var comment = member.documentationComment;
-            var rawText = getCommentNodeRawText(comment);
-            result.extractTemplate(rawText);
-          }
+      if (members != null) {
+        for (var member in members) {
+          var comment = member.documentationComment;
+          var rawText = getCommentNodeRawText(comment);
+          result.extractTemplate(rawText);
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic.dart
new file mode 100644
index 0000000..92c6475
--- /dev/null
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// @docImport 'package:analyzer/src/error/inference_error.dart';
+library;
+
+import 'package:_fe_analyzer_shared/src/base/errors.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
+
+part 'package:analyzer/src/diagnostic/diagnostic.g.dart';
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic.g.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic.g.dart
new file mode 100644
index 0000000..02fac83
--- /dev/null
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic.g.dart
@@ -0,0 +1,21174 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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.
+//
+// Instead modify 'pkg/analyzer/messages.yaml' and run
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
+
+// Generated comments don't quite align with flutter style.
+// ignore_for_file: flutter_style_todos
+
+part of "package:analyzer/src/diagnostic/diagnostic.dart";
+
+/// No parameters.
+const DiagnosticWithoutArguments abiSpecificIntegerInvalid =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABI_SPECIFIC_INTEGER_INVALID',
+      problemMessage:
+          "Classes extending 'AbiSpecificInteger' must have exactly one const "
+          "constructor, no other members, and no type parameters.",
+      correctionMessage:
+          "Try removing all type parameters, removing all members, and adding "
+          "one const constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ABI_SPECIFIC_INTEGER_INVALID',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abiSpecificIntegerMappingExtra =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABI_SPECIFIC_INTEGER_MAPPING_EXTRA',
+      problemMessage:
+          "Classes extending 'AbiSpecificInteger' must have exactly one "
+          "'AbiSpecificIntegerMapping' annotation specifying the mapping from "
+          "ABI to a 'NativeType' integer with a fixed size.",
+      correctionMessage: "Try removing the extra annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ABI_SPECIFIC_INTEGER_MAPPING_EXTRA',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abiSpecificIntegerMappingMissing =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABI_SPECIFIC_INTEGER_MAPPING_MISSING',
+      problemMessage:
+          "Classes extending 'AbiSpecificInteger' must have exactly one "
+          "'AbiSpecificIntegerMapping' annotation specifying the mapping from "
+          "ABI to a 'NativeType' integer with a fixed size.",
+      correctionMessage: "Try adding an annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ABI_SPECIFIC_INTEGER_MAPPING_MISSING',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the value of the invalid mapping
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+abiSpecificIntegerMappingUnsupported = DiagnosticWithArguments(
+  name: 'ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED',
+  problemMessage:
+      "Invalid mapping to '{0}'; only mappings to 'Int8', 'Int16', 'Int32', "
+      "'Int64', 'Uint8', 'Uint16', 'UInt32', and 'Uint64' are supported.",
+  correctionMessage:
+      "Try changing the value to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', "
+      "'Uint16', 'UInt32', or 'Uint64'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED',
+  withArguments: _withArgumentsAbiSpecificIntegerMappingUnsupported,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractClassMember =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_CLASS_MEMBER',
+      problemMessage: "Members of classes can't be declared to be 'abstract'.",
+      correctionMessage:
+          "Try removing the 'abstract' keyword. You can add the 'abstract' "
+          "keyword before the class declaration.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_CLASS_MEMBER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractExternalField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_EXTERNAL_FIELD',
+      problemMessage:
+          "Fields can't be declared both 'abstract' and 'external'.",
+      correctionMessage: "Try removing the 'abstract' or 'external' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_EXTERNAL_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+abstractFieldConstructorInitializer = DiagnosticWithoutArgumentsImpl(
+  name: 'ABSTRACT_FIELD_INITIALIZER',
+  problemMessage: "Abstract fields can't have initializers.",
+  correctionMessage:
+      "Try removing the field initializer or the 'abstract' keyword from the "
+      "field declaration.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractFieldInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_FIELD_INITIALIZER',
+      problemMessage: "Abstract fields can't have initializers.",
+      correctionMessage:
+          "Try removing the initializer or the 'abstract' keyword.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ABSTRACT_FIELD_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractFinalBaseClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_FINAL_BASE_CLASS',
+      problemMessage:
+          "An 'abstract' class can't be declared as both 'final' and 'base'.",
+      correctionMessage: "Try removing either the 'final' or 'base' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_FINAL_BASE_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+abstractFinalInterfaceClass = DiagnosticWithoutArgumentsImpl(
+  name: 'ABSTRACT_FINAL_INTERFACE_CLASS',
+  problemMessage:
+      "An 'abstract' class can't be declared as both 'final' and 'interface'.",
+  correctionMessage: "Try removing either the 'final' or 'interface' keyword.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'ABSTRACT_FINAL_INTERFACE_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractLateField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_LATE_FIELD',
+      problemMessage: "Abstract fields cannot be late.",
+      correctionMessage: "Try removing the 'abstract' or 'late' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_LATE_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractSealedClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_SEALED_CLASS',
+      problemMessage:
+          "A 'sealed' class can't be marked 'abstract' because it's already "
+          "implicitly abstract.",
+      correctionMessage: "Try removing the 'abstract' keyword.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_SEALED_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractStaticField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_STATIC_FIELD',
+      problemMessage: "Static fields can't be declared 'abstract'.",
+      correctionMessage: "Try removing the 'abstract' or 'static' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_STATIC_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments abstractStaticMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ABSTRACT_STATIC_METHOD',
+      problemMessage: "Static methods can't be declared to be 'abstract'.",
+      correctionMessage: "Try removing the keyword 'abstract'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ABSTRACT_STATIC_METHOD',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String memberKind: the display name for the kind of the found abstract
+///                    member
+/// String name: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String memberKind,
+    required String name,
+  })
+>
+abstractSuperMemberReference = DiagnosticWithArguments(
+  name: 'ABSTRACT_SUPER_MEMBER_REFERENCE',
+  problemMessage: "The {0} '{1}' is always abstract in the supertype.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ABSTRACT_SUPER_MEMBER_REFERENCE',
+  withArguments: _withArgumentsAbstractSuperMemberReference,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+addressPosition = DiagnosticWithoutArgumentsImpl(
+  name: 'ADDRESS_POSITION',
+  problemMessage:
+      "The '.address' expression can only be used as argument to a leaf native "
+      "external call.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ADDRESS_POSITION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+addressReceiver = DiagnosticWithoutArgumentsImpl(
+  name: 'ADDRESS_RECEIVER',
+  problemMessage:
+      "The receiver of '.address' must be a concrete 'TypedData', a concrete "
+      "'TypedData' '[]', an 'Array', an 'Array' '[]', a Struct field, or a "
+      "Union field.",
+  correctionMessage:
+      "Change the receiver of '.address' to one of the allowed kinds.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ADDRESS_RECEIVER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the ambiguous element
+/// Uri p1: the name of the first library in which the type is found
+/// Uri p2: the name of the second library in which the type is found
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required Uri p1,
+    required Uri p2,
+  })
+>
+ambiguousExport = DiagnosticWithArguments(
+  name: 'AMBIGUOUS_EXPORT',
+  problemMessage: "The name '{0}' is defined in the libraries '{1}' and '{2}'.",
+  correctionMessage:
+      "Try removing the export of one of the libraries, or explicitly hiding "
+      "the name in one of the export directives.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AMBIGUOUS_EXPORT',
+  withArguments: _withArgumentsAmbiguousExport,
+  expectedTypes: [ExpectedType.string, ExpectedType.uri, ExpectedType.uri],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+/// String p1: the names of the declaring extensions
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+ambiguousExtensionMemberAccessThreeOrMore = DiagnosticWithArguments(
+  name: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS',
+  problemMessage:
+      "A member named '{0}' is defined in {1}, and none are more specific.",
+  correctionMessage:
+      "Try using an extension override to specify the extension you want to "
+      "be chosen.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE',
+  withArguments: _withArgumentsAmbiguousExtensionMemberAccessThreeOrMore,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+/// Element p1: the name of the first declaring extension
+/// Element p2: the names of the second declaring extension
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required Element p1,
+    required Element p2,
+  })
+>
+ambiguousExtensionMemberAccessTwo = DiagnosticWithArguments(
+  name: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS',
+  problemMessage:
+      "A member named '{0}' is defined in '{1}' and '{2}', and neither is more "
+      "specific.",
+  correctionMessage:
+      "Try using an extension override to specify the extension you want to "
+      "be chosen.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO',
+  withArguments: _withArgumentsAmbiguousExtensionMemberAccessTwo,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.element,
+    ExpectedType.element,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the ambiguous type
+/// String p1: the names of the libraries that the type is found
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+ambiguousImport = DiagnosticWithArguments(
+  name: 'AMBIGUOUS_IMPORT',
+  problemMessage: "The name '{0}' is defined in the libraries {1}.",
+  correctionMessage:
+      "Try using 'as prefix' for one of the import directives, or hiding the "
+      "name from all but one of the imports.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AMBIGUOUS_IMPORT',
+  withArguments: _withArgumentsAmbiguousImport,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+ambiguousSetOrMapLiteralBoth = DiagnosticWithoutArgumentsImpl(
+  name: 'AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH',
+  problemMessage:
+      "The literal can't be either a map or a set because it contains at least "
+      "one literal map entry or a spread operator spreading a 'Map', and at "
+      "least one element which is neither of these.",
+  correctionMessage:
+      "Try removing or changing some of the elements so that all of the "
+      "elements are consistent.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+ambiguousSetOrMapLiteralEither = DiagnosticWithoutArgumentsImpl(
+  name: 'AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER',
+  problemMessage:
+      "This literal must be either a map or a set, but the elements don't have "
+      "enough information for type inference to work.",
+  correctionMessage:
+      "Try adding type arguments to the literal (one for sets, two for "
+      "maps).",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER',
+  expectedTypes: [],
+);
+
+/// An error code indicating that the given option is deprecated.
+///
+/// Parameters:
+/// Object p0: the option name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+analysisOptionDeprecated = DiagnosticWithArguments(
+  name: 'ANALYSIS_OPTION_DEPRECATED',
+  problemMessage: "The option '{0}' is no longer supported.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ANALYSIS_OPTION_DEPRECATED',
+  withArguments: _withArgumentsAnalysisOptionDeprecated,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// An error code indicating that the given option is deprecated.
+///
+/// Parameters:
+/// Object p0: the option name
+/// Object p1: the replacement option name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+analysisOptionDeprecatedWithReplacement = DiagnosticWithArguments(
+  name: 'ANALYSIS_OPTION_DEPRECATED',
+  problemMessage: "The option '{0}' is no longer supported.",
+  correctionMessage: "Try using the new '{1}' option.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT',
+  withArguments: _withArgumentsAnalysisOptionDeprecatedWithReplacement,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments annotationOnPointerField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ANNOTATION_ON_POINTER_FIELD',
+      problemMessage:
+          "Fields in a struct class whose type is 'Pointer' shouldn't have any "
+          "annotations.",
+      correctionMessage: "Try removing the annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ANNOTATION_ON_POINTER_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+annotationOnTypeArgument = DiagnosticWithoutArgumentsImpl(
+  name: 'ANNOTATION_ON_TYPE_ARGUMENT',
+  problemMessage:
+      "Type arguments can't have annotations because they aren't declarations.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'ANNOTATION_ON_TYPE_ARGUMENT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments annotationSpaceBeforeParenthesis =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ANNOTATION_SPACE_BEFORE_PARENTHESIS',
+      problemMessage:
+          "Annotations can't have spaces or comments before the parenthesis.",
+      correctionMessage:
+          "Remove any spaces or comments before the parenthesis.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ANNOTATION_SPACE_BEFORE_PARENTHESIS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments annotationWithTypeArguments =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ANNOTATION_WITH_TYPE_ARGUMENTS',
+      problemMessage: "An annotation can't use type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ANNOTATION_WITH_TYPE_ARGUMENTS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+annotationWithTypeArgumentsUninstantiated = DiagnosticWithoutArgumentsImpl(
+  name: 'ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
+  problemMessage:
+      "An annotation with type arguments must be followed by an argument list.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'ANNOTATION_WITH_TYPE_ARGUMENTS_UNINSTANTIATED',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the argument
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+argumentMustBeAConstant = DiagnosticWithArguments(
+  name: 'ARGUMENT_MUST_BE_A_CONSTANT',
+  problemMessage: "Argument '{0}' must be a constant.",
+  correctionMessage: "Try replacing the value with a literal or const.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ARGUMENT_MUST_BE_A_CONSTANT',
+  withArguments: _withArgumentsArgumentMustBeAConstant,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments argumentMustBeNative =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ARGUMENT_MUST_BE_NATIVE',
+      problemMessage:
+          "Argument to 'Native.addressOf' must be annotated with @Native",
+      correctionMessage:
+          "Try passing a static function or field annotated with '@Native'",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ARGUMENT_MUST_BE_NATIVE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the actual argument type
+/// Type p1: the name of the expected type
+/// String p2: additional information, if any, when problem is associated with
+///            records
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required String p2,
+  })
+>
+argumentTypeNotAssignable = DiagnosticWithArguments(
+  name: 'ARGUMENT_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The argument type '{0}' can't be assigned to the parameter type '{1}'. "
+      "{2}",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ARGUMENT_TYPE_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsArgumentTypeNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the name of the actual argument type
+/// Type p1: the name of the expected function return type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+argumentTypeNotAssignableToErrorHandler = DiagnosticWithArguments(
+  name: '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)'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER',
+  withArguments: _withArgumentsArgumentTypeNotAssignableToErrorHandler,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments assertInRedirectingConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSERT_IN_REDIRECTING_CONSTRUCTOR',
+      problemMessage:
+          "A redirecting constructor can't have an 'assert' initializer.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ASSERT_IN_REDIRECTING_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the path to the asset directory as given in the file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+assetDirectoryDoesNotExist = DiagnosticWithArguments(
+  name: 'ASSET_DIRECTORY_DOES_NOT_EXIST',
+  problemMessage: "The asset directory '{0}' doesn't exist.",
+  correctionMessage:
+      "Try creating the directory or fixing the path to the directory.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ASSET_DIRECTORY_DOES_NOT_EXIST',
+  withArguments: _withArgumentsAssetDirectoryDoesNotExist,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the path to the asset as given in the file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+assetDoesNotExist = DiagnosticWithArguments(
+  name: 'ASSET_DOES_NOT_EXIST',
+  problemMessage: "The asset file '{0}' doesn't exist.",
+  correctionMessage: "Try creating the file or fixing the path to the file.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ASSET_DOES_NOT_EXIST',
+  withArguments: _withArgumentsAssetDoesNotExist,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+assetFieldNotList = DiagnosticWithoutArgumentsImpl(
+  name: 'ASSET_FIELD_NOT_LIST',
+  problemMessage:
+      "The value of the 'assets' field is expected to be a list of relative file "
+      "paths.",
+  correctionMessage:
+      "Try converting the value to be a list of relative file paths.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ASSET_FIELD_NOT_LIST',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments assetMissingPath =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSET_MISSING_PATH',
+      problemMessage: "Asset map entry must contain a 'path' field.",
+      correctionMessage: "Try adding a 'path' field.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'ASSET_MISSING_PATH',
+      expectedTypes: [],
+    );
+
+/// This code is deprecated in favor of the
+/// 'ASSET_NOT_STRING_OR_MAP' code, and will be removed.
+///
+/// No parameters.
+const DiagnosticWithoutArguments assetNotString =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSET_NOT_STRING',
+      problemMessage: "Assets are required to be file paths (strings).",
+      correctionMessage: "Try converting the value to be a string.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'ASSET_NOT_STRING',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments assetNotStringOrMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSET_NOT_STRING_OR_MAP',
+      problemMessage:
+          "An asset value is required to be a file path (string) or map.",
+      correctionMessage: "Try converting the value to be a string or map.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'ASSET_NOT_STRING_OR_MAP',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments assetPathNotString =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSET_PATH_NOT_STRING',
+      problemMessage: "Asset paths are required to be file paths (strings).",
+      correctionMessage: "Try converting the value to be a string.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'ASSET_PATH_NOT_STRING',
+      expectedTypes: [],
+    );
+
+/// Users should not assign values marked `@doNotStore`.
+///
+/// Parameters:
+/// String p0: the name of the field or variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+assignmentOfDoNotStore = DiagnosticWithArguments(
+  name: 'ASSIGNMENT_OF_DO_NOT_STORE',
+  problemMessage:
+      "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or "
+      "top-level variable.",
+  correctionMessage: "Try removing the assignment.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'ASSIGNMENT_OF_DO_NOT_STORE',
+  withArguments: _withArgumentsAssignmentOfDoNotStore,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+assignmentToConst = DiagnosticWithoutArgumentsImpl(
+  name: 'ASSIGNMENT_TO_CONST',
+  problemMessage:
+      "Constant variables can't be assigned a value after initialization.",
+  correctionMessage:
+      "Try removing the assignment, or remove the modifier 'const' from the "
+      "variable.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ASSIGNMENT_TO_CONST',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the final variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+assignmentToFinal = DiagnosticWithArguments(
+  name: 'ASSIGNMENT_TO_FINAL',
+  problemMessage: "'{0}' can't be used as a setter because it's final.",
+  correctionMessage:
+      "Try finding a different setter, or making '{0}' non-final.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ASSIGNMENT_TO_FINAL',
+  withArguments: _withArgumentsAssignmentToFinal,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+assignmentToFinalLocal = DiagnosticWithArguments(
+  name: 'ASSIGNMENT_TO_FINAL_LOCAL',
+  problemMessage: "The final variable '{0}' can only be set once.",
+  correctionMessage: "Try making '{0}' non-final.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ASSIGNMENT_TO_FINAL_LOCAL',
+  withArguments: _withArgumentsAssignmentToFinalLocal,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the reference
+/// String p1: the name of the class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+assignmentToFinalNoSetter = DiagnosticWithArguments(
+  name: 'ASSIGNMENT_TO_FINAL_NO_SETTER',
+  problemMessage: "There isn't a setter named '{0}' in class '{1}'.",
+  correctionMessage:
+      "Try correcting the name to reference an existing setter, or declare "
+      "the setter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ASSIGNMENT_TO_FINAL_NO_SETTER',
+  withArguments: _withArgumentsAssignmentToFinalNoSetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments assignmentToFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSIGNMENT_TO_FUNCTION',
+      problemMessage: "Functions can't be assigned a value.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ASSIGNMENT_TO_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments assignmentToMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSIGNMENT_TO_METHOD',
+      problemMessage: "Methods can't be assigned a value.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ASSIGNMENT_TO_METHOD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments assignmentToType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASSIGNMENT_TO_TYPE',
+      problemMessage: "Types can't be assigned a value.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ASSIGNMENT_TO_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments asyncForInWrongContext =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASYNC_FOR_IN_WRONG_CONTEXT',
+      problemMessage:
+          "The async for-in loop can only be used in an async function.",
+      correctionMessage:
+          "Try marking the function body with either 'async' or 'async*', or "
+          "removing the 'await' before the for-in loop.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ASYNC_FOR_IN_WRONG_CONTEXT',
+      expectedTypes: [],
+    );
+
+/// 16.32 Identifier Reference: It is a compile-time error if any of the
+/// identifiers async, await, or yield is used as an identifier in a function
+/// body marked with either async, async, or sync.
+///
+/// No parameters.
+const DiagnosticWithoutArguments asyncKeywordUsedAsIdentifier =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ASYNC_KEYWORD_USED_AS_IDENTIFIER',
+      problemMessage:
+          "The keywords 'await' and 'yield' can't be used as identifiers in an "
+          "asynchronous or generator function.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ASYNC_KEYWORD_USED_AS_IDENTIFIER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+augmentationExtendsClauseAlreadyPresent = DiagnosticWithoutArgumentsImpl(
+  name: 'AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT',
+  problemMessage:
+      "The augmentation has an 'extends' clause, but an augmentation target "
+      "already includes an 'extends' clause and it isn't allowed to be "
+      "repeated or changed.",
+  correctionMessage:
+      "Try removing the 'extends' clause, either here or in the augmentation "
+      "target.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the lexeme of the modifier.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+augmentationModifierExtra = DiagnosticWithArguments(
+  name: 'AUGMENTATION_MODIFIER_EXTRA',
+  problemMessage:
+      "The augmentation has the '{0}' modifier that the declaration doesn't "
+      "have.",
+  correctionMessage:
+      "Try removing the '{0}' modifier, or adding it to the declaration.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTATION_MODIFIER_EXTRA',
+  withArguments: _withArgumentsAugmentationModifierExtra,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the lexeme of the modifier.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+augmentationModifierMissing = DiagnosticWithArguments(
+  name: 'AUGMENTATION_MODIFIER_MISSING',
+  problemMessage:
+      "The augmentation is missing the '{0}' modifier that the declaration has.",
+  correctionMessage:
+      "Try adding the '{0}' modifier, or removing it from the declaration.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTATION_MODIFIER_MISSING',
+  withArguments: _withArgumentsAugmentationModifierMissing,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name of the declaration kind.
+/// Object p1: the name of the augmentation kind.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+augmentationOfDifferentDeclarationKind = DiagnosticWithArguments(
+  name: 'AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND',
+  problemMessage: "Can't augment a {0} with a {1}.",
+  correctionMessage:
+      "Try changing the augmentation to match the declaration kind.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND',
+  withArguments: _withArgumentsAugmentationOfDifferentDeclarationKind,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments augmentationTypeParameterBound =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'AUGMENTATION_TYPE_PARAMETER_BOUND',
+      problemMessage:
+          "The augmentation type parameter must have the same bound as the "
+          "corresponding type parameter of the declaration.",
+      correctionMessage:
+          "Try changing the augmentation to match the declaration type "
+          "parameters.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'AUGMENTATION_TYPE_PARAMETER_BOUND',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+augmentationTypeParameterCount = DiagnosticWithoutArgumentsImpl(
+  name: 'AUGMENTATION_TYPE_PARAMETER_COUNT',
+  problemMessage:
+      "The augmentation must have the same number of type parameters as the "
+      "declaration.",
+  correctionMessage:
+      "Try changing the augmentation to match the declaration type "
+      "parameters.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTATION_TYPE_PARAMETER_COUNT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments augmentationTypeParameterName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'AUGMENTATION_TYPE_PARAMETER_NAME',
+      problemMessage:
+          "The augmentation type parameter must have the same name as the "
+          "corresponding type parameter of the declaration.",
+      correctionMessage:
+          "Try changing the augmentation to match the declaration type "
+          "parameters.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'AUGMENTATION_TYPE_PARAMETER_NAME',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments augmentationWithoutDeclaration =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'AUGMENTATION_WITHOUT_DECLARATION',
+      problemMessage: "The declaration being augmented doesn't exist.",
+      correctionMessage:
+          "Try changing the augmentation to match an existing declaration.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'AUGMENTATION_WITHOUT_DECLARATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+augmentedExpressionIsNotSetter = DiagnosticWithoutArgumentsImpl(
+  name: 'AUGMENTED_EXPRESSION_IS_NOT_SETTER',
+  problemMessage:
+      "The augmented declaration is not a setter, it can't be used to write a "
+      "value.",
+  correctionMessage: "Try assigning a value to a setter.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTED_EXPRESSION_IS_NOT_SETTER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+augmentedExpressionIsSetter = DiagnosticWithoutArgumentsImpl(
+  name: 'AUGMENTED_EXPRESSION_IS_SETTER',
+  problemMessage:
+      "The augmented declaration is a setter, it can't be used to read a value.",
+  correctionMessage: "Try assigning a value to the augmented setter.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTED_EXPRESSION_IS_SETTER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the lexeme of the operator.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+augmentedExpressionNotOperator = DiagnosticWithArguments(
+  name: 'AUGMENTED_EXPRESSION_NOT_OPERATOR',
+  problemMessage:
+      "The enclosing augmentation doesn't augment the operator '{0}'.",
+  correctionMessage: "Try augmenting or invoking the correct operator.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AUGMENTED_EXPRESSION_NOT_OPERATOR',
+  withArguments: _withArgumentsAugmentedExpressionNotOperator,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments awaitInLateLocalVariableInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER',
+      problemMessage:
+          "The 'await' expression can't be used in a 'late' local variable's "
+          "initializer.",
+      correctionMessage:
+          "Try removing the 'late' modifier, or rewriting the initializer "
+          "without using the 'await' expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// 16.30 Await Expressions: It is a compile-time error if the function
+/// immediately enclosing _a_ is not declared asynchronous. (Where _a_ is the
+/// await expression.)
+///
+/// No parameters.
+const DiagnosticWithoutArguments awaitInWrongContext =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'AWAIT_IN_WRONG_CONTEXT',
+      problemMessage:
+          "The await expression can only be used in an async function.",
+      correctionMessage:
+          "Try marking the function body with either 'async' or 'async*'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'AWAIT_IN_WRONG_CONTEXT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+awaitOfIncompatibleType = DiagnosticWithoutArgumentsImpl(
+  name: 'AWAIT_OF_INCOMPATIBLE_TYPE',
+  problemMessage:
+      "The 'await' expression can't be used for an expression with an extension "
+      "type that is not a subtype of 'Future'.",
+  correctionMessage:
+      "Try removing the `await`, or updating the extension type to implement "
+      "'Future'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'AWAIT_OF_INCOMPATIBLE_TYPE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String implementedClassName: the name of the base class being implemented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String implementedClassName})
+>
+baseClassImplementedOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The class '{0}' can't be implemented outside of its library because it's "
+      "a base class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsBaseClassImplementedOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments baseEnum = DiagnosticWithoutArgumentsImpl(
+  name: 'BASE_ENUM',
+  problemMessage: "Enums can't be declared to be 'base'.",
+  correctionMessage: "Try removing the keyword 'base'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'BASE_ENUM',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String implementedMixinName: the name of the base mixin being implemented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String implementedMixinName})
+>
+baseMixinImplementedOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The mixin '{0}' can't be implemented outside of its library because it's "
+      "a base mixin.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsBaseMixinImplementedOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String string: undocumented
+/// String string2: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String string,
+    required String string2,
+  })
+>
+binaryOperatorWrittenOut = DiagnosticWithArguments(
+  name: 'BINARY_OPERATOR_WRITTEN_OUT',
+  problemMessage:
+      "Binary operator '{0}' is written as '{1}' instead of the written out "
+      "word.",
+  correctionMessage: "Try replacing '{0}' with '{1}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'BINARY_OPERATOR_WRITTEN_OUT',
+  withArguments: _withArgumentsBinaryOperatorWrittenOut,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the name of the return type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+bodyMightCompleteNormally = DiagnosticWithArguments(
+  name: 'BODY_MIGHT_COMPLETE_NORMALLY',
+  problemMessage:
+      "The body might complete normally, causing 'null' to be returned, but the "
+      "return type, '{0}', is a potentially non-nullable type.",
+  correctionMessage:
+      "Try adding either a return or a throw statement at the end.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BODY_MIGHT_COMPLETE_NORMALLY',
+  withArguments: _withArgumentsBodyMightCompleteNormally,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the return type as derived by the type of the [Future].
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+bodyMightCompleteNormallyCatchError = DiagnosticWithArguments(
+  name: 'BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR',
+  problemMessage:
+      "This 'onError' handler must return a value assignable to '{0}', but ends "
+      "without returning a value.",
+  correctionMessage: "Try adding a return statement.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR',
+  withArguments: _withArgumentsBodyMightCompleteNormallyCatchError,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the name of the declared return type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+bodyMightCompleteNormallyNullable = DiagnosticWithArguments(
+  name: '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'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE',
+  withArguments: _withArgumentsBodyMightCompleteNormallyNullable,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments breakLabelOnSwitchMember =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'BREAK_LABEL_ON_SWITCH_MEMBER',
+      problemMessage:
+          "A break label resolves to the 'case' or 'default' statement.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'BREAK_LABEL_ON_SWITCH_MEMBER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+breakOutsideOfLoop = DiagnosticWithoutArgumentsImpl(
+  name: 'BREAK_OUTSIDE_OF_LOOP',
+  problemMessage:
+      "A break statement can't be used outside of a loop or switch statement.",
+  correctionMessage: "Try removing the break statement.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'BREAK_OUTSIDE_OF_LOOP',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsExtensionName = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+  problemMessage:
+      "The built-in identifier '{0}' can't be used as an extension name.",
+  correctionMessage: "Try choosing a different name for the extension.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME',
+  withArguments: _withArgumentsBuiltInIdentifierAsExtensionName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsExtensionTypeName = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+  problemMessage:
+      "The built-in identifier '{0}' can't be used as an extension type name.",
+  correctionMessage: "Try choosing a different name for the extension type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_EXTENSION_TYPE_NAME',
+  withArguments: _withArgumentsBuiltInIdentifierAsExtensionTypeName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsPrefixName = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+  problemMessage:
+      "The built-in identifier '{0}' can't be used as a prefix name.",
+  correctionMessage: "Try choosing a different name for the prefix.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_PREFIX_NAME',
+  withArguments: _withArgumentsBuiltInIdentifierAsPrefixName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsType = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_AS_TYPE',
+  problemMessage: "The built-in identifier '{0}' can't be used as a type.",
+  correctionMessage: "Try correcting the name to match an existing type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE',
+  withArguments: _withArgumentsBuiltInIdentifierAsType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsTypedefName = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+  problemMessage:
+      "The built-in identifier '{0}' can't be used as a typedef name.",
+  correctionMessage: "Try choosing a different name for the typedef.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
+  withArguments: _withArgumentsBuiltInIdentifierAsTypedefName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsTypeName = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+  problemMessage: "The built-in identifier '{0}' can't be used as a type name.",
+  correctionMessage: "Try choosing a different name for the type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_NAME',
+  withArguments: _withArgumentsBuiltInIdentifierAsTypeName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the built-in identifier that is being used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+builtInIdentifierAsTypeParameterName = DiagnosticWithArguments(
+  name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
+  problemMessage:
+      "The built-in identifier '{0}' can't be used as a type parameter name.",
+  correctionMessage: "Try choosing a different name for the type parameter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
+  withArguments: _withArgumentsBuiltInIdentifierAsTypeParameterName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// A code indicating that the camera permissions is not supported on Chrome
+/// OS.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+cameraPermissionsIncompatible = DiagnosticWithoutArgumentsImpl(
+  name: 'CAMERA_PERMISSIONS_INCOMPATIBLE',
+  problemMessage:
+      "Camera permissions make app incompatible for Chrome OS, consider adding "
+      "optional features \"android.hardware.camera\" and "
+      "\"android.hardware.camera.autofocus\".",
+  correctionMessage:
+      "Try adding `<uses-feature android:name=\"android.hardware.camera\"  "
+      "android:required=\"false\">` `<uses-feature "
+      "android:name=\"android.hardware.camera.autofocus\"  "
+      "android:required=\"false\">`.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'CAMERA_PERMISSIONS_INCOMPATIBLE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the this of the switch case expression
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+caseExpressionTypeImplementsEquals = DiagnosticWithArguments(
+  name: 'CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
+  problemMessage:
+      "The switch case expression type '{0}' can't override the '==' operator.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
+  withArguments: _withArgumentsCaseExpressionTypeImplementsEquals,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the type of the case expression
+/// Type p1: the type of the switch expression
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+caseExpressionTypeIsNotSwitchExpressionSubtype = DiagnosticWithArguments(
+  name: 'CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE',
+  problemMessage:
+      "The switch case expression type '{0}' must be a subtype of the switch "
+      "expression type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE',
+  withArguments: _withArgumentsCaseExpressionTypeIsNotSwitchExpressionSubtype,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the unassigned variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+castFromNullableAlwaysFails = DiagnosticWithArguments(
+  name: 'CAST_FROM_NULLABLE_ALWAYS_FAILS',
+  problemMessage:
+      "This cast will always throw an exception because the nullable local "
+      "variable '{0}' is not assigned.",
+  correctionMessage:
+      "Try giving it an initializer expression, or ensure that it's assigned "
+      "on every execution path.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'CAST_FROM_NULLABLE_ALWAYS_FAILS',
+  withArguments: _withArgumentsCastFromNullableAlwaysFails,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments castFromNullAlwaysFails =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CAST_FROM_NULL_ALWAYS_FAILS',
+      problemMessage:
+          "This cast always throws an exception because the expression always "
+          "evaluates to 'null'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'CAST_FROM_NULL_ALWAYS_FAILS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+castToNonType = DiagnosticWithArguments(
+  name: 'CAST_TO_NON_TYPE',
+  problemMessage:
+      "The name '{0}' isn't a type, so it can't be used in an 'as' expression.",
+  correctionMessage:
+      "Try changing the name to the name of an existing type, or creating a "
+      "type with the name '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CAST_TO_NON_TYPE',
+  withArguments: _withArgumentsCastToNonType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments catchSyntax = DiagnosticWithoutArgumentsImpl(
+  name: 'CATCH_SYNTAX',
+  problemMessage:
+      "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
+  correctionMessage:
+      "No types are needed, the first is given by 'on', the second is always "
+      "'StackTrace'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CATCH_SYNTAX',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+catchSyntaxExtraParameters = DiagnosticWithoutArgumentsImpl(
+  name: 'CATCH_SYNTAX_EXTRA_PARAMETERS',
+  problemMessage:
+      "'catch' must be followed by '(identifier)' or '(identifier, identifier)'.",
+  correctionMessage:
+      "No types are needed, the first is given by 'on', the second is always "
+      "'StackTrace'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CATCH_SYNTAX_EXTRA_PARAMETERS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments classInClass = DiagnosticWithoutArgumentsImpl(
+  name: 'CLASS_IN_CLASS',
+  problemMessage: "Classes can't be declared inside other classes.",
+  correctionMessage: "Try moving the class to the top-level.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CLASS_IN_CLASS',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+classInstantiationAccessToInstanceMember = DiagnosticWithArguments(
+  name: 'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
+  problemMessage:
+      "The instance member '{0}' can't be accessed on a class instantiation.",
+  correctionMessage:
+      "Try changing the member name to the name of a constructor.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER',
+  withArguments: _withArgumentsClassInstantiationAccessToInstanceMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+classInstantiationAccessToStaticMember = DiagnosticWithArguments(
+  name: 'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
+  problemMessage:
+      "The static member '{0}' can't be accessed on a class instantiation.",
+  correctionMessage:
+      "Try removing the type arguments from the class name, or changing the "
+      "member name to the name of a constructor.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER',
+  withArguments: _withArgumentsClassInstantiationAccessToStaticMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the class
+/// String p1: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+classInstantiationAccessToUnknownMember = DiagnosticWithArguments(
+  name: 'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
+  problemMessage: "The class '{0}' doesn't have a constructor named '{1}'.",
+  correctionMessage:
+      "Try invoking a different constructor, or defining a constructor named "
+      "'{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER',
+  withArguments: _withArgumentsClassInstantiationAccessToUnknownMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the class being used as a mixin
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+classUsedAsMixin = DiagnosticWithArguments(
+  name: 'CLASS_USED_AS_MIXIN',
+  problemMessage:
+      "The class '{0}' can't be used as a mixin because it's neither a mixin "
+      "class nor a mixin.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CLASS_USED_AS_MIXIN',
+  withArguments: _withArgumentsClassUsedAsMixin,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments colonInPlaceOfIn =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'COLON_IN_PLACE_OF_IN',
+      problemMessage: "For-in loops use 'in' rather than a colon.",
+      correctionMessage: "Try replacing the colon with the keyword 'in'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'COLON_IN_PLACE_OF_IN',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the struct or union class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+compoundImplementsFinalizable = DiagnosticWithArguments(
+  name: 'COMPOUND_IMPLEMENTS_FINALIZABLE',
+  problemMessage: "The class '{0}' can't implement Finalizable.",
+  correctionMessage: "Try removing the implements clause from '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'COMPOUND_IMPLEMENTS_FINALIZABLE',
+  withArguments: _withArgumentsCompoundImplementsFinalizable,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments concreteClassHasEnumSuperinterface =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE',
+      problemMessage: "Concrete classes can't have 'Enum' as a superinterface.",
+      correctionMessage:
+          "Try specifying a different interface, or remove it from the list.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the abstract method
+/// String p1: the name of the enclosing class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+concreteClassWithAbstractMember = DiagnosticWithArguments(
+  name: '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}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
+  withArguments: _withArgumentsConcreteClassWithAbstractMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor and field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingConstructorAndStaticField = DiagnosticWithArguments(
+  name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a constructor and a static field in this "
+      "class.",
+  correctionMessage: "Try renaming either the constructor or the field.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD',
+  withArguments: _withArgumentsConflictingConstructorAndStaticField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor and getter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingConstructorAndStaticGetter = DiagnosticWithArguments(
+  name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a constructor and a static getter in "
+      "this class.",
+  correctionMessage: "Try renaming either the constructor or the getter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER',
+  withArguments: _withArgumentsConflictingConstructorAndStaticGetter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingConstructorAndStaticMethod = DiagnosticWithArguments(
+  name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a constructor and a static method in "
+      "this class.",
+  correctionMessage: "Try renaming either the constructor or the method.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD',
+  withArguments: _withArgumentsConflictingConstructorAndStaticMethod,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor and setter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingConstructorAndStaticSetter = DiagnosticWithArguments(
+  name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a constructor and a static setter in "
+      "this class.",
+  correctionMessage: "Try renaming either the constructor or the setter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER',
+  withArguments: _withArgumentsConflictingConstructorAndStaticSetter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+/// error if `C` declares a getter or a setter with basename `n`, and has a
+/// method named `n`.
+///
+/// Parameters:
+/// String p0: the name of the class defining the conflicting field
+/// String p1: the name of the conflicting field
+/// String p2: the name of the class defining the method with which the field
+///            conflicts
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+conflictingFieldAndMethod = DiagnosticWithArguments(
+  name: 'CONFLICTING_FIELD_AND_METHOD',
+  problemMessage:
+      "Class '{0}' can't define field '{1}' and have method '{2}.{1}' with the "
+      "same name.",
+  correctionMessage:
+      "Try converting the getter to a method, or renaming the field to a "
+      "name that doesn't conflict.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_FIELD_AND_METHOD',
+  withArguments: _withArgumentsConflictingFieldAndMethod,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the kind of the element implementing the
+///            conflicting interface
+/// String p1: the name of the element implementing the conflicting interface
+/// String p2: the first conflicting type
+/// String p3: the second conflicting type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+    required String p3,
+  })
+>
+conflictingGenericInterfaces = DiagnosticWithArguments(
+  name: 'CONFLICTING_GENERIC_INTERFACES',
+  problemMessage:
+      "The {0} '{1}' can't implement both '{2}' and '{3}' because the type "
+      "arguments are different.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_GENERIC_INTERFACES',
+  withArguments: _withArgumentsConflictingGenericInterfaces,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+/// error if the interface of `C` has an instance method named `n` and an
+/// instance setter with basename `n`.
+///
+/// Parameters:
+/// String p0: the name of the enclosing element kind - class, extension type,
+///            etc
+/// String p1: the name of the enclosing element
+/// String p2: the name of the conflicting method / setter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+conflictingInheritedMethodAndSetter = DiagnosticWithArguments(
+  name: 'CONFLICTING_INHERITED_METHOD_AND_SETTER',
+  problemMessage:
+      "The {0} '{1}' can't inherit both a method and a setter named '{2}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_INHERITED_METHOD_AND_SETTER',
+  withArguments: _withArgumentsConflictingInheritedMethodAndSetter,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+/// error if `C` declares a method named `n`, and has a getter or a setter
+/// with basename `n`.
+///
+/// Parameters:
+/// String p0: the name of the class defining the conflicting method
+/// String p1: the name of the conflicting method
+/// String p2: the name of the class defining the field with which the method
+///            conflicts
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+conflictingMethodAndField = DiagnosticWithArguments(
+  name: 'CONFLICTING_METHOD_AND_FIELD',
+  problemMessage:
+      "Class '{0}' can't define method '{1}' and have field '{2}.{1}' with the "
+      "same name.",
+  correctionMessage:
+      "Try converting the method to a getter, or renaming the method to a "
+      "name that doesn't conflict.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_METHOD_AND_FIELD',
+  withArguments: _withArgumentsConflictingMethodAndField,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String string: undocumented
+/// String string2: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String string,
+    required String string2,
+  })
+>
+conflictingModifiers = DiagnosticWithArguments(
+  name: 'CONFLICTING_MODIFIERS',
+  problemMessage: "Members can't be declared to be both '{0}' and '{1}'.",
+  correctionMessage: "Try removing one of the keywords.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONFLICTING_MODIFIERS',
+  withArguments: _withArgumentsConflictingModifiers,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
+/// error if `C` declares a static member with basename `n`, and has an
+/// instance member with basename `n`.
+///
+/// Parameters:
+/// String p0: the name of the class defining the conflicting member
+/// String p1: the name of the conflicting static member
+/// String p2: the name of the class defining the field with which the method
+///            conflicts
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+conflictingStaticAndInstance = DiagnosticWithArguments(
+  name: 'CONFLICTING_STATIC_AND_INSTANCE',
+  problemMessage:
+      "Class '{0}' can't define static member '{1}' and have instance member "
+      "'{2}.{1}' with the same name.",
+  correctionMessage: "Try renaming the member to a name that doesn't conflict.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_STATIC_AND_INSTANCE',
+  withArguments: _withArgumentsConflictingStaticAndInstance,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndClass = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and the class in which "
+      "the type parameter is defined.",
+  correctionMessage: "Try renaming either the type parameter or the class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_CLASS',
+  withArguments: _withArgumentsConflictingTypeVariableAndClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndEnum = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and the enum in which "
+      "the type parameter is defined.",
+  correctionMessage: "Try renaming either the type parameter or the enum.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_ENUM',
+  withArguments: _withArgumentsConflictingTypeVariableAndEnum,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndExtension = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and the extension in "
+      "which the type parameter is defined.",
+  correctionMessage: "Try renaming either the type parameter or the extension.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_EXTENSION',
+  withArguments: _withArgumentsConflictingTypeVariableAndExtension,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndExtensionType = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and the extension type "
+      "in which the type parameter is defined.",
+  correctionMessage: "Try renaming either the type parameter or the extension.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_EXTENSION_TYPE',
+  withArguments: _withArgumentsConflictingTypeVariableAndExtensionType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndMemberClass = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and a member in this "
+      "class.",
+  correctionMessage: "Try renaming either the type parameter or the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS',
+  withArguments: _withArgumentsConflictingTypeVariableAndMemberClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndMemberEnum = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and a member in this "
+      "enum.",
+  correctionMessage: "Try renaming either the type parameter or the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM',
+  withArguments: _withArgumentsConflictingTypeVariableAndMemberEnum,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndMemberExtension = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and a member in this "
+      "extension.",
+  correctionMessage: "Try renaming either the type parameter or the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION',
+  withArguments: _withArgumentsConflictingTypeVariableAndMemberExtension,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndMemberExtensionType = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and a member in this "
+      "extension type.",
+  correctionMessage: "Try renaming either the type parameter or the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION_TYPE',
+  withArguments: _withArgumentsConflictingTypeVariableAndMemberExtensionType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndMemberMixin = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and a member in this "
+      "mixin.",
+  correctionMessage: "Try renaming either the type parameter or the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN',
+  withArguments: _withArgumentsConflictingTypeVariableAndMemberMixin,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+conflictingTypeVariableAndMixin = DiagnosticWithArguments(
+  name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
+  problemMessage:
+      "'{0}' can't be used to name both a type parameter and the mixin in which "
+      "the type parameter is defined.",
+  correctionMessage: "Try renaming either the type parameter or the mixin.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MIXIN',
+  withArguments: _withArgumentsConflictingTypeVariableAndMixin,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constAndFinal = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_AND_FINAL',
+  problemMessage: "Members can't be declared to be both 'const' and 'final'.",
+  correctionMessage: "Try removing either the 'const' or 'final' keyword.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONST_AND_FINAL',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the matched value type
+/// Type p1: the constant value type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+constantPatternNeverMatchesValueType = DiagnosticWithArguments(
+  name: 'CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE',
+  problemMessage:
+      "The matched value type '{0}' can never be equal to this constant of type "
+      "'{1}'.",
+  correctionMessage:
+      "Try a constant of the same type as the matched value type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE',
+  withArguments: _withArgumentsConstantPatternNeverMatchesValueType,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constantPatternWithNonConstantExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION',
+      problemMessage:
+          "The expression of a constant pattern must be a valid constant.",
+      correctionMessage: "Try making the expression a valid constant.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constClass = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_CLASS',
+  problemMessage: "Classes can't be declared to be 'const'.",
+  correctionMessage:
+      "Try removing the 'const' keyword. If you're trying to indicate that "
+      "instances of the class can be constants, place the 'const' keyword on "
+      " the class' constructor(s).",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONST_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+constConstructorConstantFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as values in a "
+      "'const' constructor.",
+  correctionMessage:
+      "Try removing the keyword 'const' from the constructor or removing the "
+      "keyword 'deferred' from the import.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_CONSTANT_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// 16.12.2 Const: It is a compile-time error if evaluation of a constant
+/// object results in an uncaught exception being thrown.
+///
+/// Parameters:
+/// Object valueType: the type of the runtime value of the argument
+/// Object fieldName: the name of the field
+/// Object fieldType: the type of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object valueType,
+    required Object fieldName,
+    required Object fieldType,
+  })
+>
+constConstructorFieldTypeMismatch = DiagnosticWithArguments(
+  name: 'CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH',
+  problemMessage:
+      "In a const constructor, a value of type '{0}' can't be assigned to the "
+      "field '{1}', which has type '{2}'.",
+  correctionMessage: "Try using a subtype, or removing the keyword 'const'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH',
+  withArguments: _withArgumentsConstConstructorFieldTypeMismatch,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// Parameters:
+/// String valueType: the type of the runtime value of the argument
+/// String parameterType: the static type of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String valueType,
+    required String parameterType,
+  })
+>
+constConstructorParamTypeMismatch = DiagnosticWithArguments(
+  name: 'CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
+  problemMessage:
+      "A value of type '{0}' can't be assigned to a parameter of type '{1}' in a "
+      "const constructor.",
+  correctionMessage: "Try using a subtype, or removing the keyword 'const'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
+  withArguments: _withArgumentsConstConstructorParamTypeMismatch,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// 16.12.2 Const: It is a compile-time error if evaluation of a constant
+/// object results in an uncaught exception being thrown.
+///
+/// No parameters.
+const DiagnosticWithoutArguments constConstructorThrowsException =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_CONSTRUCTOR_THROWS_EXCEPTION',
+      problemMessage: "Const constructors can't throw exceptions.",
+      correctionMessage:
+          "Try removing the throw statement, or removing the keyword 'const'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_CONSTRUCTOR_THROWS_EXCEPTION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constConstructorWithBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_CONSTRUCTOR_WITH_BODY',
+      problemMessage: "Const constructors can't have a body.",
+      correctionMessage: "Try removing either the 'const' keyword or the body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'CONST_CONSTRUCTOR_WITH_BODY',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constConstructorWithFieldInitializedByNonConst = DiagnosticWithArguments(
+  name: 'CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST',
+  problemMessage:
+      "Can't define the 'const' constructor because the field '{0}' is "
+      "initialized with a non-constant value.",
+  correctionMessage:
+      "Try initializing the field to a constant value, or removing the "
+      "keyword 'const' from the constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST',
+  withArguments: _withArgumentsConstConstructorWithFieldInitializedByNonConst,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// 7.6.3 Constant Constructors: The superinitializer that appears, explicitly
+/// or implicitly, in the initializer list of a constant constructor must
+/// specify a constant constructor of the superclass of the immediately
+/// enclosing class or a compile-time error occurs.
+///
+/// 12.1 Mixin Application: For each generative constructor named ... an
+/// implicitly declared constructor named ... is declared. If Sq is a
+/// generative const constructor, and M does not declare any fields, Cq is
+/// also a const constructor.
+///
+/// Parameters:
+/// String p0: the name of the instance field.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constConstructorWithMixinWithField = DiagnosticWithArguments(
+  name: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
+  problemMessage:
+      "This constructor can't be declared 'const' because a mixin adds the "
+      "instance field: {0}.",
+  correctionMessage:
+      "Try removing the 'const' keyword or removing the 'with' clause from "
+      "the class declaration, or removing the field from the mixin class.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
+  withArguments: _withArgumentsConstConstructorWithMixinWithField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// 7.6.3 Constant Constructors: The superinitializer that appears, explicitly
+/// or implicitly, in the initializer list of a constant constructor must
+/// specify a constant constructor of the superclass of the immediately
+/// enclosing class or a compile-time error occurs.
+///
+/// 12.1 Mixin Application: For each generative constructor named ... an
+/// implicitly declared constructor named ... is declared. If Sq is a
+/// generative const constructor, and M does not declare any fields, Cq is
+/// also a const constructor.
+///
+/// Parameters:
+/// String p0: the names of the instance fields.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constConstructorWithMixinWithFields = DiagnosticWithArguments(
+  name: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
+  problemMessage:
+      "This constructor can't be declared 'const' because the mixins add the "
+      "instance fields: {0}.",
+  correctionMessage:
+      "Try removing the 'const' keyword or removing the 'with' clause from "
+      "the class declaration, or removing the fields from the mixin classes.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS',
+  withArguments: _withArgumentsConstConstructorWithMixinWithFields,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the superclass
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constConstructorWithNonConstSuper = DiagnosticWithArguments(
+  name: 'CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
+  problemMessage:
+      "A constant constructor can't call a non-constant super constructor of "
+      "'{0}'.",
+  correctionMessage:
+      "Try calling a constant constructor in the superclass, or removing the "
+      "keyword 'const' from the constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
+  withArguments: _withArgumentsConstConstructorWithNonConstSuper,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constConstructorWithNonFinalField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
+      problemMessage:
+          "Can't define a const constructor for a class with non-final fields.",
+      correctionMessage:
+          "Try making all of the fields final, or removing the keyword 'const' "
+          "from the constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+constDeferredClass = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_DEFERRED_CLASS',
+  problemMessage: "Deferred classes can't be created with 'const'.",
+  correctionMessage:
+      "Try using 'new' to create the instance, or changing the import to not "
+      "be deferred.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_DEFERRED_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalAssertionFailure =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_ASSERTION_FAILURE',
+      problemMessage: "The assertion in this constant expression failed.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_ASSERTION_FAILURE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object message: the message of the assertion
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object message})
+>
+constEvalAssertionFailureWithMessage = DiagnosticWithArguments(
+  name: 'CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE',
+  problemMessage: "An assertion failed with message '{0}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE',
+  withArguments: _withArgumentsConstEvalAssertionFailureWithMessage,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalExtensionMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_EXTENSION_METHOD',
+      problemMessage:
+          "Extension methods can't be used in constant expressions.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_EXTENSION_METHOD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalExtensionTypeMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_EXTENSION_TYPE_METHOD',
+      problemMessage:
+          "Extension type methods can't be used in constant expressions.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_EXTENSION_TYPE_METHOD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalForElement =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_FOR_ELEMENT',
+      problemMessage: "Constant expressions don't support 'for' elements.",
+      correctionMessage:
+          "Try replacing the 'for' element with a spread, or removing 'const'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_FOR_ELEMENT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalMethodInvocation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_METHOD_INVOCATION',
+      problemMessage: "Methods can't be invoked in constant expressions.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_METHOD_INVOCATION',
+      expectedTypes: [],
+    );
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "An expression of the form e1 == e2".
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+constEvalPrimitiveEquality = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_EVAL_PRIMITIVE_EQUALITY',
+  problemMessage:
+      "In constant expressions, operands of the equality operator must have "
+      "primitive equality.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_PRIMITIVE_EQUALITY',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String propertyName: the name of the property being accessed
+/// String type: the type with the property being accessed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String propertyName,
+    required String type,
+  })
+>
+constEvalPropertyAccess = DiagnosticWithArguments(
+  name: 'CONST_EVAL_PROPERTY_ACCESS',
+  problemMessage:
+      "The property '{0}' can't be accessed on the type '{1}' in a constant "
+      "expression.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_PROPERTY_ACCESS',
+  withArguments: _withArgumentsConstEvalPropertyAccess,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// 16.12.2 Const: It is a compile-time error if evaluation of a constant
+/// object results in an uncaught exception being thrown.
+///
+/// No parameters.
+const DiagnosticWithoutArguments constEvalThrowsException =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_THROWS_EXCEPTION',
+      problemMessage:
+          "Evaluation of this constant expression throws an exception.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_THROWS_EXCEPTION',
+      expectedTypes: [],
+    );
+
+/// 16.12.2 Const: It is a compile-time error if evaluation of a constant
+/// object results in an uncaught exception being thrown.
+///
+/// No parameters.
+const DiagnosticWithoutArguments constEvalThrowsIdbze =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_THROWS_IDBZE',
+      problemMessage:
+          "Evaluation of this constant expression throws an "
+          "IntegerDivisionByZeroException.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_THROWS_IDBZE',
+      expectedTypes: [],
+    );
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "An expression of the form !e1", "An expression of the form
+/// e1 && e2", and "An expression of the form e1 || e2".
+///
+/// No parameters.
+const DiagnosticWithoutArguments constEvalTypeBool =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_TYPE_BOOL',
+      problemMessage:
+          "In constant expressions, operands of this operator must be of type "
+          "'bool'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_TYPE_BOOL',
+      expectedTypes: [],
+    );
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "An expression of the form e1 & e2".
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+constEvalTypeBoolInt = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_EVAL_TYPE_BOOL_INT',
+  problemMessage:
+      "In constant expressions, operands of this operator must be of type 'bool' "
+      "or 'int'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_TYPE_BOOL_INT',
+  expectedTypes: [],
+);
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "A literal string".
+///
+/// No parameters.
+const DiagnosticWithoutArguments constEvalTypeBoolNumString =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_TYPE_BOOL_NUM_STRING',
+      problemMessage:
+          "In constant expressions, operands of this operator must be of type "
+          "'bool', 'num', 'String' or 'null'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_TYPE_BOOL_NUM_STRING',
+      expectedTypes: [],
+    );
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "An expression of the form ~e1", "An expression of one of
+/// the forms e1 >> e2".
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+constEvalTypeInt = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_EVAL_TYPE_INT',
+  problemMessage:
+      "In constant expressions, operands of this operator must be of type 'int'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_TYPE_INT',
+  expectedTypes: [],
+);
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "An expression of the form e1 - e2".
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+constEvalTypeNum = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_EVAL_TYPE_NUM',
+  problemMessage:
+      "In constant expressions, operands of this operator must be of type 'num'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_TYPE_NUM',
+  expectedTypes: [],
+);
+
+/// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
+/// for text about "An expression of the form e1 + e2".
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+constEvalTypeNumString = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_EVAL_TYPE_NUM_STRING',
+  problemMessage:
+      "In constant expressions, operands of this operator must be of type 'num' "
+      "or 'String'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_EVAL_TYPE_NUM_STRING',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalTypeString =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_TYPE_STRING',
+      problemMessage:
+          "In constant expressions, operands of this operator must be of type "
+          "'String'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_TYPE_STRING',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constEvalTypeType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_EVAL_TYPE_TYPE',
+      problemMessage:
+          "In constant expressions, operands of this operator must be of type "
+          "'Type'.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_EVAL_TYPE_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constFactory = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_FACTORY',
+  problemMessage:
+      "Only redirecting factory constructors can be declared to be 'const'.",
+  correctionMessage:
+      "Try removing the 'const' keyword, or replacing the body with '=' "
+      "followed by a valid target.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONST_FACTORY',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the name of the type of the initializer expression
+/// Type p1: the name of the type of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+constFieldInitializerNotAssignable = DiagnosticWithArguments(
+  name: 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
+  problemMessage:
+      "The initializer type '{0}' can't be assigned to the field type '{1}' in a "
+      "const constructor.",
+  correctionMessage: "Try using a subtype, or removing the 'const' keyword",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsConstFieldInitializerNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constInitializedWithNonConstantValue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
+      problemMessage:
+          "Const variables must be initialized with a constant value.",
+      correctionMessage:
+          "Try changing the initializer to be a constant expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+constInitializedWithNonConstantValueFromDeferredLibrary =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
+      problemMessage:
+          "Constant values from a deferred library can't be used to initialize a "
+          "'const' variable.",
+      correctionMessage:
+          "Try initializing the variable without referencing members of the "
+          "deferred library, or changing the import to not be deferred.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName:
+          'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constInstanceField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_INSTANCE_FIELD',
+      problemMessage: "Only static fields can be declared as const.",
+      correctionMessage:
+          "Try declaring the field as final, or adding the keyword 'static'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_INSTANCE_FIELD',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the type of the entry's key
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+constMapKeyNotPrimitiveEquality = DiagnosticWithArguments(
+  name: 'CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY',
+  problemMessage:
+      "The type of a key in a constant map can't override the '==' operator, or "
+      "'hashCode', but the class '{0}' does.",
+  correctionMessage:
+      "Try using a different value for the key, or removing the keyword "
+      "'const' from the map.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY',
+  withArguments: _withArgumentsConstMapKeyNotPrimitiveEquality,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constMethod = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_METHOD',
+  problemMessage:
+      "Getters, setters and methods can't be declared to be 'const'.",
+  correctionMessage: "Try removing the 'const' keyword.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONST_METHOD',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the uninitialized final variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constNotInitialized = DiagnosticWithArguments(
+  name: 'CONST_NOT_INITIALIZED',
+  problemMessage: "The constant '{0}' must be initialized.",
+  correctionMessage: "Try adding an initialization to the declaration.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_NOT_INITIALIZED',
+  withArguments: _withArgumentsConstNotInitialized,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constructorWithReturnType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONSTRUCTOR_WITH_RETURN_TYPE',
+      problemMessage: "Constructors can't have a return type.",
+      correctionMessage: "Try removing the return type.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'CONSTRUCTOR_WITH_RETURN_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+constructorWithTypeArguments = DiagnosticWithoutArgumentsImpl(
+  name: 'CONSTRUCTOR_WITH_TYPE_ARGUMENTS',
+  problemMessage:
+      "A constructor invocation can't have type arguments after the constructor "
+      "name.",
+  correctionMessage:
+      "Try removing the type arguments or placing them after the class name.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONSTRUCTOR_WITH_TYPE_ARGUMENTS',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the type of the element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+constSetElementNotPrimitiveEquality = DiagnosticWithArguments(
+  name: 'CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY',
+  problemMessage:
+      "An element in a constant set can't override the '==' operator, or "
+      "'hashCode', but the type '{0}' does.",
+  correctionMessage:
+      "Try using a different value for the element, or removing the keyword "
+      "'const' from the set.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY',
+  withArguments: _withArgumentsConstSetElementNotPrimitiveEquality,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constSpreadExpectedListOrSet =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_SPREAD_EXPECTED_LIST_OR_SET',
+      problemMessage: "A list or a set is expected in this spread.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_SPREAD_EXPECTED_LIST_OR_SET',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constSpreadExpectedMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_SPREAD_EXPECTED_MAP',
+      problemMessage: "A map is expected in this spread.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_SPREAD_EXPECTED_MAP',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constTypeParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_TYPE_PARAMETER',
+      problemMessage: "Type parameters can't be used in a constant expression.",
+      correctionMessage:
+          "Try replacing the type parameter with a different type.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_TYPE_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constWithNonConst =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_WITH_NON_CONST',
+      problemMessage: "The constructor being called isn't a const constructor.",
+      correctionMessage:
+          "Try removing 'const' from the constructor invocation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_WITH_NON_CONST',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constWithNonConstantArgument =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_WITH_NON_CONSTANT_ARGUMENT',
+      problemMessage:
+          "Arguments of a constant creation must be constant expressions.",
+      correctionMessage:
+          "Try making the argument a valid constant, or use 'new' to call the "
+          "constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_WITH_NON_CONSTANT_ARGUMENT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the non-type element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constWithNonType = DiagnosticWithArguments(
+  name: 'CREATION_WITH_NON_TYPE',
+  problemMessage: "The name '{0}' isn't a class.",
+  correctionMessage: "Try correcting the name to match an existing class.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_WITH_NON_TYPE',
+  withArguments: _withArgumentsConstWithNonType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+constWithoutPrimaryConstructor = DiagnosticWithoutArgumentsImpl(
+  name: 'CONST_WITHOUT_PRIMARY_CONSTRUCTOR',
+  problemMessage:
+      "'const' can only be used together with a primary constructor declaration.",
+  correctionMessage:
+      "Try removing the 'const' keyword or adding a primary constructor "
+      "declaration.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONST_WITHOUT_PRIMARY_CONSTRUCTOR',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments constWithTypeParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_WITH_TYPE_PARAMETERS',
+      problemMessage:
+          "A constant creation can't use a type parameter as a type argument.",
+      correctionMessage:
+          "Try replacing the type parameter with a different type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_WITH_TYPE_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constWithTypeParametersConstructorTearoff =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_WITH_TYPE_PARAMETERS',
+      problemMessage:
+          "A constant constructor tearoff can't use a type parameter as a type "
+          "argument.",
+      correctionMessage:
+          "Try replacing the type parameter with a different type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments constWithTypeParametersFunctionTearoff =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'CONST_WITH_TYPE_PARAMETERS',
+      problemMessage:
+          "A constant function tearoff can't use a type parameter as a type "
+          "argument.",
+      correctionMessage:
+          "Try replacing the type parameter with a different type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF',
+      expectedTypes: [],
+    );
+
+/// 16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
+/// a constant constructor declared by the type <i>T</i>.
+///
+/// Parameters:
+/// Object p0: the name of the type
+/// String p1: the name of the requested constant constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required String p1})
+>
+constWithUndefinedConstructor = DiagnosticWithArguments(
+  name: 'CONST_WITH_UNDEFINED_CONSTRUCTOR',
+  problemMessage: "The class '{0}' doesn't have a constant constructor '{1}'.",
+  correctionMessage: "Try calling a different constructor.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_WITH_UNDEFINED_CONSTRUCTOR',
+  withArguments: _withArgumentsConstWithUndefinedConstructor,
+  expectedTypes: [ExpectedType.object, ExpectedType.string],
+);
+
+/// 16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
+/// a constant constructor declared by the type <i>T</i>.
+///
+/// Parameters:
+/// String p0: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+constWithUndefinedConstructorDefault = DiagnosticWithArguments(
+  name: 'CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+  problemMessage:
+      "The class '{0}' doesn't have an unnamed constant constructor.",
+  correctionMessage: "Try calling a different constructor.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+  withArguments: _withArgumentsConstWithUndefinedConstructorDefault,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+continueLabelInvalid = DiagnosticWithoutArgumentsImpl(
+  name: 'CONTINUE_LABEL_INVALID',
+  problemMessage:
+      "The label used in a 'continue' statement must be defined on either a loop "
+      "or a switch member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CONTINUE_LABEL_INVALID',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+continueOutsideOfLoop = DiagnosticWithoutArgumentsImpl(
+  name: 'CONTINUE_OUTSIDE_OF_LOOP',
+  problemMessage:
+      "A continue statement can't be used outside of a loop or switch statement.",
+  correctionMessage: "Try removing the continue statement.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONTINUE_OUTSIDE_OF_LOOP',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+continueWithoutLabelInCase = DiagnosticWithoutArgumentsImpl(
+  name: 'CONTINUE_WITHOUT_LABEL_IN_CASE',
+  problemMessage:
+      "A continue statement in a switch statement must have a label as a target.",
+  correctionMessage:
+      "Try adding a label associated with one of the case clauses to the "
+      "continue statement.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'CONTINUE_WITHOUT_LABEL_IN_CASE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+/// String p1: detail text explaining why the type could not be inferred
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+couldNotInfer = DiagnosticWithArguments(
+  name: 'COULD_NOT_INFER',
+  problemMessage: "Couldn't infer type parameter '{0}'.{1}",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'COULD_NOT_INFER',
+  withArguments: _withArgumentsCouldNotInfer,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments covariantAndStatic =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'COVARIANT_AND_STATIC',
+      problemMessage:
+          "Members can't be declared to be both 'covariant' and 'static'.",
+      correctionMessage:
+          "Try removing either the 'covariant' or 'static' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'COVARIANT_AND_STATIC',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments covariantConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'COVARIANT_CONSTRUCTOR',
+      problemMessage: "A constructor can't be declared to be 'covariant'.",
+      correctionMessage: "Try removing the keyword 'covariant'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'COVARIANT_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments covariantMember =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'COVARIANT_MEMBER',
+      problemMessage:
+          "Getters, setters and methods can't be declared to be 'covariant'.",
+      correctionMessage: "Try removing the 'covariant' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'COVARIANT_MEMBER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+creationOfStructOrUnion = DiagnosticWithoutArgumentsImpl(
+  name: 'CREATION_OF_STRUCT_OR_UNION',
+  problemMessage:
+      "Subclasses of 'Struct' and 'Union' are backed by native memory, and can't "
+      "be instantiated by a generative constructor.",
+  correctionMessage:
+      "Try allocating it via allocation, or load from a 'Pointer'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'CREATION_OF_STRUCT_OR_UNION',
+  expectedTypes: [],
+);
+
+/// Dead code is code that is never reached, this can happen for instance if a
+/// statement follows a return statement.
+///
+/// No parameters.
+const DiagnosticWithoutArguments deadCode = DiagnosticWithoutArgumentsImpl(
+  name: 'DEAD_CODE',
+  problemMessage: "Dead code.",
+  correctionMessage:
+      "Try removing the code, or fixing the code before it so that it can be "
+      "reached.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEAD_CODE',
+  expectedTypes: [],
+);
+
+/// Dead code is code that is never reached. This case covers cases where the
+/// user has catch clauses after `catch (e)` or `on Object catch (e)`.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+deadCodeCatchFollowingCatch = DiagnosticWithoutArgumentsImpl(
+  name: 'DEAD_CODE_CATCH_FOLLOWING_CATCH',
+  problemMessage:
+      "Dead code: Catch clauses after a 'catch (e)' or an 'on Object catch (e)' "
+      "are never reached.",
+  correctionMessage:
+      "Try reordering the catch clauses so that they can be reached, or "
+      "removing the unreachable catch clauses.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEAD_CODE_CATCH_FOLLOWING_CATCH',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+deadCodeLateWildcardVariableInitializer = DiagnosticWithoutArgumentsImpl(
+  name: 'DEAD_CODE',
+  problemMessage:
+      "Dead code: The assigned-to wildcard variable is marked late and can never "
+      "be referenced so this initializer will never be evaluated.",
+  correctionMessage:
+      "Try removing the code, removing the late modifier or changing the "
+      "variable to a non-wildcard.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER',
+  expectedTypes: [],
+);
+
+/// Dead code is code that is never reached. This case covers cases where the
+/// user has an on-catch clause such as `on A catch (e)`, where a supertype of
+/// `A` was already caught.
+///
+/// Parameters:
+/// Type p0: name of the subtype
+/// Type p1: name of the supertype
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+deadCodeOnCatchSubtype = DiagnosticWithArguments(
+  name: 'DEAD_CODE_ON_CATCH_SUBTYPE',
+  problemMessage:
+      "Dead code: This on-catch block won't be executed because '{0}' is a "
+      "subtype of '{1}' and hence will have been caught already.",
+  correctionMessage:
+      "Try reordering the catch clauses so that this block can be reached, "
+      "or removing the unreachable catch clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEAD_CODE_ON_CATCH_SUBTYPE',
+  withArguments: _withArgumentsDeadCodeOnCatchSubtype,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+deadNullAwareExpression = DiagnosticWithoutArgumentsImpl(
+  name: 'DEAD_NULL_AWARE_EXPRESSION',
+  problemMessage:
+      "The left operand can't be null, so the right operand is never executed.",
+  correctionMessage: "Try removing the operator and the right operand.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEAD_NULL_AWARE_EXPRESSION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments defaultInSwitchExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEFAULT_IN_SWITCH_EXPRESSION',
+      problemMessage: "A switch expression may not use the `default` keyword.",
+      correctionMessage: "Try replacing `default` with `_`.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'DEFAULT_IN_SWITCH_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments defaultValueInFunctionType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEFAULT_VALUE_IN_FUNCTION_TYPE',
+      problemMessage:
+          "Parameters in a function type can't have default values.",
+      correctionMessage: "Try removing the default value.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'DEFAULT_VALUE_IN_FUNCTION_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+defaultValueInRedirectingFactoryConstructor = DiagnosticWithoutArgumentsImpl(
+  name: 'DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR',
+  problemMessage:
+      "Default values aren't allowed in factory constructors that redirect to "
+      "another constructor.",
+  correctionMessage: "Try removing the default value.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments defaultValueOnRequiredParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEFAULT_VALUE_ON_REQUIRED_PARAMETER',
+      problemMessage: "Required named parameters can't have a default value.",
+      correctionMessage:
+          "Try removing either the default value or the 'required' modifier.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'DEFAULT_VALUE_ON_REQUIRED_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+deferredAfterPrefix = DiagnosticWithoutArgumentsImpl(
+  name: 'DEFERRED_AFTER_PREFIX',
+  problemMessage:
+      "The deferred keyword should come immediately before the prefix ('as' "
+      "clause).",
+  correctionMessage: "Try moving the deferred keyword before the prefix.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'DEFERRED_AFTER_PREFIX',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments deferredImportOfExtension =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEFERRED_IMPORT_OF_EXTENSION',
+      problemMessage: "Imports of deferred libraries must hide all extensions.",
+      correctionMessage:
+          "Try adding either a show combinator listing the names you need to "
+          "reference or a hide combinator listing all of the extensions.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'DEFERRED_IMPORT_OF_EXTENSION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the variable that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+definitelyUnassignedLateLocalVariable = DiagnosticWithArguments(
+  name: 'DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE',
+  problemMessage:
+      "The late local variable '{0}' is definitely unassigned at this point.",
+  correctionMessage: "Ensure that it is assigned on necessary execution paths.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE',
+  withArguments: _withArgumentsDefinitelyUnassignedLateLocalVariable,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+dependenciesFieldNotMap = DiagnosticWithArguments(
+  name: 'DEPENDENCIES_FIELD_NOT_MAP',
+  problemMessage: "The value of the '{0}' field is expected to be a map.",
+  correctionMessage: "Try converting the value to be a map.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPENDENCIES_FIELD_NOT_MAP',
+  withArguments: _withArgumentsDependenciesFieldNotMap,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Note: Since this diagnostic is only produced in pre-3.0 code, we do not
+/// plan to go through the exercise of converting it to a Warning.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+deprecatedColonForDefaultValue = DiagnosticWithoutArgumentsImpl(
+  name: 'DEPRECATED_COLON_FOR_DEFAULT_VALUE',
+  problemMessage:
+      "Using a colon as the separator before a default value is deprecated and "
+      "will not be supported in language version 3.0 and later.",
+  correctionMessage: "Try replacing the colon with an equal sign.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.HINT,
+  uniqueName: 'DEPRECATED_COLON_FOR_DEFAULT_VALUE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+deprecatedExportUse = DiagnosticWithArguments(
+  name: 'DEPRECATED_EXPORT_USE',
+  problemMessage: "The ability to import '{0}' indirectly is deprecated.",
+  correctionMessage: "Try importing '{0}' directly.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_EXPORT_USE',
+  withArguments: _withArgumentsDeprecatedExportUse,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Object typeName: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object typeName})
+>
+deprecatedExtend = DiagnosticWithArguments(
+  name: 'DEPRECATED_EXTEND',
+  problemMessage: "Extending '{0}' is deprecated.",
+  correctionMessage: "Try removing the 'extends' clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_EXTEND',
+  withArguments: _withArgumentsDeprecatedExtend,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments deprecatedExtendsFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEPRECATED_SUBTYPE_OF_FUNCTION',
+      problemMessage: "Extending 'Function' is deprecated.",
+      correctionMessage: "Try removing 'Function' from the 'extends' clause.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DEPRECATED_EXTENDS_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+deprecatedField = DiagnosticWithArguments(
+  name: 'DEPRECATED_FIELD',
+  problemMessage: "The '{0}' field is no longer used and can be removed.",
+  correctionMessage: "Try removing the field.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_FIELD',
+  withArguments: _withArgumentsDeprecatedField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Object typeName: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object typeName})
+>
+deprecatedImplement = DiagnosticWithArguments(
+  name: 'DEPRECATED_IMPLEMENT',
+  problemMessage: "Implementing '{0}' is deprecated.",
+  correctionMessage: "Try removing '{0}' from the 'implements' clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_IMPLEMENT',
+  withArguments: _withArgumentsDeprecatedImplement,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments deprecatedImplementsFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEPRECATED_SUBTYPE_OF_FUNCTION',
+      problemMessage: "Implementing 'Function' has no effect.",
+      correctionMessage:
+          "Try removing 'Function' from the 'implements' clause.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DEPRECATED_IMPLEMENTS_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object typeName: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object typeName})
+>
+deprecatedInstantiate = DiagnosticWithArguments(
+  name: 'DEPRECATED_INSTANTIATE',
+  problemMessage: "Instantiating '{0}' is deprecated.",
+  correctionMessage: "Try instantiating a non-abstract class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_INSTANTIATE',
+  withArguments: _withArgumentsDeprecatedInstantiate,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// A hint code indicating reference to a deprecated lint.
+///
+/// Parameters:
+/// String p0: the rule name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+deprecatedLint = DiagnosticWithArguments(
+  name: 'DEPRECATED_LINT',
+  problemMessage: "'{0}' is a deprecated lint rule and should not be used.",
+  correctionMessage: "Try removing '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_LINT',
+  withArguments: _withArgumentsDeprecatedLint,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// A hint code indicating reference to a deprecated lint.
+///
+/// Parameters:
+/// String p0: the deprecated lint name
+/// String p1: the replacing rule name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+deprecatedLintWithReplacement = DiagnosticWithArguments(
+  name: 'DEPRECATED_LINT_WITH_REPLACEMENT',
+  problemMessage: "'{0}' is deprecated and should be replaced by '{1}'.",
+  correctionMessage: "Try replacing '{0}' with '{1}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_LINT_WITH_REPLACEMENT',
+  withArguments: _withArgumentsDeprecatedLintWithReplacement,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+deprecatedMemberUse = DiagnosticWithArguments(
+  name: 'DEPRECATED_MEMBER_USE',
+  problemMessage: "'{0}' is deprecated and shouldn't be used.",
+  correctionMessage:
+      "Try replacing the use of the deprecated member with the replacement.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.HINT,
+  uniqueName: 'DEPRECATED_MEMBER_USE',
+  withArguments: _withArgumentsDeprecatedMemberUse,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+/// String p1: message details
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+deprecatedMemberUseWithMessage = DiagnosticWithArguments(
+  name: 'DEPRECATED_MEMBER_USE',
+  problemMessage: "'{0}' is deprecated and shouldn't be used. {1}",
+  correctionMessage:
+      "Try replacing the use of the deprecated member with the replacement.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.HINT,
+  uniqueName: 'DEPRECATED_MEMBER_USE_WITH_MESSAGE',
+  withArguments: _withArgumentsDeprecatedMemberUseWithMessage,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Object typeName: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object typeName})
+>
+deprecatedMixin = DiagnosticWithArguments(
+  name: 'DEPRECATED_MIXIN',
+  problemMessage: "Mixing in '{0}' is deprecated.",
+  correctionMessage: "Try removing '{0}' from the 'with' clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_MIXIN',
+  withArguments: _withArgumentsDeprecatedMixin,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments deprecatedMixinFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEPRECATED_SUBTYPE_OF_FUNCTION',
+      problemMessage: "Mixing in 'Function' is deprecated.",
+      correctionMessage: "Try removing 'Function' from the 'with' clause.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DEPRECATED_MIXIN_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments deprecatedNewInCommentReference =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DEPRECATED_NEW_IN_COMMENT_REFERENCE',
+      problemMessage:
+          "Using the 'new' keyword in a comment reference is deprecated.",
+      correctionMessage: "Try referring to a constructor by its name.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DEPRECATED_NEW_IN_COMMENT_REFERENCE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object parameterName: the name of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object parameterName})
+>
+deprecatedOptional = DiagnosticWithArguments(
+  name: 'DEPRECATED_OPTIONAL',
+  problemMessage: "Omitting an argument for the '{0}' parameter is deprecated.",
+  correctionMessage: "Try passing an argument for '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_OPTIONAL',
+  withArguments: _withArgumentsDeprecatedOptional,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object typeName: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object typeName})
+>
+deprecatedSubclass = DiagnosticWithArguments(
+  name: 'DEPRECATED_SUBCLASS',
+  problemMessage: "Subclassing '{0}' is deprecated.",
+  correctionMessage:
+      "Try removing the 'extends' clause, or removing '{0}' from the "
+      "'implements' clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DEPRECATED_SUBCLASS',
+  withArguments: _withArgumentsDeprecatedSubclass,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments directiveAfterDeclaration =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DIRECTIVE_AFTER_DECLARATION',
+      problemMessage: "Directives must appear before any declarations.",
+      correctionMessage: "Try moving the directive before any declarations.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'DIRECTIVE_AFTER_DECLARATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments disallowedTypeInstantiationExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DISALLOWED_TYPE_INSTANTIATION_EXPRESSION',
+      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.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'DISALLOWED_TYPE_INSTANTIATION_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the doc directive argument
+/// String p1: the expected format
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+docDirectiveArgumentWrongFormat = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT',
+  problemMessage: "The '{0}' argument must be formatted as {1}.",
+  correctionMessage: "Try formatting '{0}' as {1}.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT',
+  withArguments: _withArgumentsDocDirectiveArgumentWrongFormat,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the doc directive
+/// int p1: the actual number of arguments
+/// int p2: the expected number of arguments
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required int p1,
+    required int p2,
+  })
+>
+docDirectiveHasExtraArguments = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS',
+  problemMessage:
+      "The '{0}' directive has '{1}' arguments, but only '{2}' are expected.",
+  correctionMessage: "Try removing the extra arguments.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS',
+  withArguments: _withArgumentsDocDirectiveHasExtraArguments,
+  expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// String p0: the name of the doc directive
+/// String p1: the name of the unexpected argument
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+docDirectiveHasUnexpectedNamedArgument = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT',
+  problemMessage:
+      "The '{0}' directive has an unexpected named argument, '{1}'.",
+  correctionMessage: "Try removing the unexpected argument.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT',
+  withArguments: _withArgumentsDocDirectiveHasUnexpectedNamedArgument,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments docDirectiveMissingClosingBrace =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DOC_DIRECTIVE_MISSING_CLOSING_BRACE',
+      problemMessage: "Doc directive is missing a closing curly brace ('}').",
+      correctionMessage: "Try closing the directive with a curly brace.",
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DOC_DIRECTIVE_MISSING_CLOSING_BRACE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the corresponding doc directive tag
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+docDirectiveMissingClosingTag = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_MISSING_CLOSING_TAG',
+  problemMessage: "Doc directive is missing a closing tag.",
+  correctionMessage:
+      "Try closing the directive with the appropriate closing tag, '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_MISSING_CLOSING_TAG',
+  withArguments: _withArgumentsDocDirectiveMissingClosingTag,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the doc directive
+/// String p1: the name of the missing argument
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+docDirectiveMissingOneArgument = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_MISSING_ARGUMENT',
+  problemMessage: "The '{0}' directive is missing a '{1}' argument.",
+  correctionMessage: "Try adding a '{1}' argument before the closing '}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_MISSING_ONE_ARGUMENT',
+  withArguments: _withArgumentsDocDirectiveMissingOneArgument,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the corresponding doc directive tag
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+docDirectiveMissingOpeningTag = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_MISSING_OPENING_TAG',
+  problemMessage: "Doc directive is missing an opening tag.",
+  correctionMessage:
+      "Try opening the directive with the appropriate opening tag, '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_MISSING_OPENING_TAG',
+  withArguments: _withArgumentsDocDirectiveMissingOpeningTag,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the doc directive
+/// String p1: the name of the first missing argument
+/// String p2: the name of the second missing argument
+/// String p3: the name of the third missing argument
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+    required String p3,
+  })
+>
+docDirectiveMissingThreeArguments = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_MISSING_ARGUMENT',
+  problemMessage:
+      "The '{0}' directive is missing a '{1}', a '{2}', and a '{3}' argument.",
+  correctionMessage: "Try adding the missing arguments before the closing '}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS',
+  withArguments: _withArgumentsDocDirectiveMissingThreeArguments,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the doc directive
+/// String p1: the name of the first missing argument
+/// String p2: the name of the second missing argument
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+docDirectiveMissingTwoArguments = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_MISSING_ARGUMENT',
+  problemMessage:
+      "The '{0}' directive is missing a '{1}' and a '{2}' argument.",
+  correctionMessage: "Try adding the missing arguments before the closing '}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS',
+  withArguments: _withArgumentsDocDirectiveMissingTwoArguments,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the unknown doc directive.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+docDirectiveUnknown = DiagnosticWithArguments(
+  name: 'DOC_DIRECTIVE_UNKNOWN',
+  problemMessage: "Doc directive '{0}' is unknown.",
+  correctionMessage: "Try using one of the supported doc directives.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DOC_DIRECTIVE_UNKNOWN',
+  withArguments: _withArgumentsDocDirectiveUnknown,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments docImportCannotBeDeferred =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DOC_IMPORT_CANNOT_BE_DEFERRED',
+      problemMessage: "Doc imports can't be deferred.",
+      correctionMessage: "Try removing the 'deferred' keyword.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DOC_IMPORT_CANNOT_BE_DEFERRED',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments docImportCannotHaveCombinators =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DOC_IMPORT_CANNOT_HAVE_COMBINATORS',
+      problemMessage: "Doc imports can't have show or hide combinators.",
+      correctionMessage: "Try removing the combinator.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DOC_IMPORT_CANNOT_HAVE_COMBINATORS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments docImportCannotHaveConfigurations =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS',
+      problemMessage: "Doc imports can't have configurations.",
+      correctionMessage: "Try removing the configurations.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments docImportCannotHavePrefix =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DOC_IMPORT_CANNOT_HAVE_PREFIX',
+      problemMessage: "Doc imports can't have prefixes.",
+      correctionMessage: "Try removing the prefix.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DOC_IMPORT_CANNOT_HAVE_PREFIX',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments dotShorthandMissingContext =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DOT_SHORTHAND_MISSING_CONTEXT',
+      problemMessage:
+          "A dot shorthand can't be used where there is no context type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'DOT_SHORTHAND_MISSING_CONTEXT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the static getter
+/// String p1: the name of the enclosing type where the getter is being looked
+///            for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+dotShorthandUndefinedGetter = DiagnosticWithArguments(
+  name: 'DOT_SHORTHAND_UNDEFINED_MEMBER',
+  problemMessage:
+      "The static getter '{0}' isn't defined for the context type '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing static getter, or "
+      "defining a getter or field named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DOT_SHORTHAND_UNDEFINED_GETTER',
+  withArguments: _withArgumentsDotShorthandUndefinedGetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the static method or constructor
+/// String p1: the name of the enclosing type where the method or constructor
+///            is being looked for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+dotShorthandUndefinedInvocation = DiagnosticWithArguments(
+  name: 'DOT_SHORTHAND_UNDEFINED_MEMBER',
+  problemMessage:
+      "The static method or constructor '{0}' isn't defined for the context type "
+      "'{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing static method or "
+      "constructor, or defining a static method or constructor named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DOT_SHORTHAND_UNDEFINED_INVOCATION',
+  withArguments: _withArgumentsDotShorthandUndefinedInvocation,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments duplicateConstructorDefault =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_CONSTRUCTOR',
+      problemMessage: "The unnamed constructor is already defined.",
+      correctionMessage: "Try giving one of the constructors a name.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'DUPLICATE_CONSTRUCTOR_DEFAULT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the duplicate entity
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+duplicateConstructorName = DiagnosticWithArguments(
+  name: 'DUPLICATE_CONSTRUCTOR',
+  problemMessage: "The constructor with name '{0}' is already defined.",
+  correctionMessage: "Try renaming one of the constructors.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_CONSTRUCTOR_NAME',
+  withArguments: _withArgumentsDuplicateConstructorName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments duplicateDeferred =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_DEFERRED',
+      problemMessage:
+          "An import directive can only have one 'deferred' keyword.",
+      correctionMessage: "Try removing all but one 'deferred' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'DUPLICATE_DEFERRED',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the duplicate entity
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+duplicateDefinition = DiagnosticWithArguments(
+  name: 'DUPLICATE_DEFINITION',
+  problemMessage: "The name '{0}' is already defined.",
+  correctionMessage: "Try renaming one of the declarations.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_DEFINITION',
+  withArguments: _withArgumentsDuplicateDefinition,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// 0: the modifier that was duplicated
+///
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode duplicatedModifier = DiagnosticCodeWithExpectedTypes(
+  name: 'DUPLICATED_MODIFIER',
+  problemMessage: "The modifier '{0}' was already specified.",
+  correctionMessage: "Try removing all but one occurrence of the modifier.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'DUPLICATED_MODIFIER',
+  expectedTypes: [ExpectedType.token],
+);
+
+/// Duplicate exports.
+///
+/// No parameters.
+const DiagnosticWithoutArguments duplicateExport =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_EXPORT',
+      problemMessage: "Duplicate export.",
+      correctionMessage: "Try removing all but one export of the library.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DUPLICATE_EXPORT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+duplicateFieldFormalParameter = DiagnosticWithArguments(
+  name: 'DUPLICATE_FIELD_FORMAL_PARAMETER',
+  problemMessage:
+      "The field '{0}' can't be initialized by multiple parameters in the same "
+      "constructor.",
+  correctionMessage:
+      "Try removing one of the parameters, or using different fields.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_FIELD_FORMAL_PARAMETER',
+  withArguments: _withArgumentsDuplicateFieldFormalParameter,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the duplicated name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+duplicateFieldName = DiagnosticWithArguments(
+  name: 'DUPLICATE_FIELD_NAME',
+  problemMessage: "The field name '{0}' is already used in this record.",
+  correctionMessage: "Try renaming the field.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_FIELD_NAME',
+  withArguments: _withArgumentsDuplicateFieldName,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments duplicateHiddenName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_HIDDEN_NAME',
+      problemMessage: "Duplicate hidden name.",
+      correctionMessage:
+          "Try removing the repeated name from the list of hidden members.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DUPLICATE_HIDDEN_NAME',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the diagnostic being ignored
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+duplicateIgnore = DiagnosticWithArguments(
+  name: 'DUPLICATE_IGNORE',
+  problemMessage:
+      "The diagnostic '{0}' doesn't need to be ignored here because it's already "
+      "being ignored.",
+  correctionMessage:
+      "Try removing the name from the list, or removing the whole comment if "
+      "this is the only name in the list.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DUPLICATE_IGNORE',
+  withArguments: _withArgumentsDuplicateIgnore,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Duplicate imports.
+///
+/// No parameters.
+const DiagnosticWithoutArguments duplicateImport =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_IMPORT',
+      problemMessage: "Duplicate import.",
+      correctionMessage: "Try removing all but one import of the library.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DUPLICATE_IMPORT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// 0: the label that was duplicated
+///
+/// Parameters:
+/// Name name: undocumented
+const DiagnosticCode duplicateLabelInSwitchStatement =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
+      problemMessage:
+          "The label '{0}' was already used in this switch statement.",
+      correctionMessage: "Try choosing a different name for this label.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'DUPLICATE_LABEL_IN_SWITCH_STATEMENT',
+      expectedTypes: [ExpectedType.name],
+    );
+
+/// Parameters:
+/// String p0: the name of the parameter that was duplicated
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+duplicateNamedArgument = DiagnosticWithArguments(
+  name: 'DUPLICATE_NAMED_ARGUMENT',
+  problemMessage:
+      "The argument for the named parameter '{0}' was already specified.",
+  correctionMessage:
+      "Try removing one of the named arguments, or correcting one of the "
+      "names to reference a different named parameter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_NAMED_ARGUMENT',
+  withArguments: _withArgumentsDuplicateNamedArgument,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Uri p0: the URI of the duplicate part
+const DiagnosticWithArguments<LocatableDiagnostic Function({required Uri p0})>
+duplicatePart = DiagnosticWithArguments(
+  name: 'DUPLICATE_PART',
+  problemMessage: "The library already contains a part with the URI '{0}'.",
+  correctionMessage:
+      "Try removing all except one of the duplicated part directives.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_PART',
+  withArguments: _withArgumentsDuplicatePart,
+  expectedTypes: [ExpectedType.uri],
+);
+
+/// Parameters:
+/// Object p0: the name of the variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+duplicatePatternAssignmentVariable = DiagnosticWithArguments(
+  name: 'DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE',
+  problemMessage: "The variable '{0}' is already assigned in this pattern.",
+  correctionMessage: "Try renaming the variable.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE',
+  withArguments: _withArgumentsDuplicatePatternAssignmentVariable,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+duplicatePatternField = DiagnosticWithArguments(
+  name: 'DUPLICATE_PATTERN_FIELD',
+  problemMessage: "The field '{0}' is already matched in this pattern.",
+  correctionMessage: "Try removing the duplicate field.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_PATTERN_FIELD',
+  withArguments: _withArgumentsDuplicatePatternField,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments duplicatePrefix =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_PREFIX',
+      problemMessage:
+          "An import directive can only have one prefix ('as' clause).",
+      correctionMessage: "Try removing all but one prefix.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'DUPLICATE_PREFIX',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments duplicateRestElementInPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_REST_ELEMENT_IN_PATTERN',
+      problemMessage:
+          "At most one rest element is allowed in a list or map pattern.",
+      correctionMessage: "Try removing the duplicate rest element.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'DUPLICATE_REST_ELEMENT_IN_PATTERN',
+      expectedTypes: [],
+    );
+
+/// Duplicate rules.
+///
+/// Parameters:
+/// String p0: the rule name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+duplicateRule = DiagnosticWithArguments(
+  name: 'DUPLICATE_RULE',
+  problemMessage:
+      "The rule {0} is already specified and doesn't need to be specified again.",
+  correctionMessage: "Try removing all but one specification of the rule.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'DUPLICATE_RULE',
+  withArguments: _withArgumentsDuplicateRule,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments duplicateShownName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'DUPLICATE_SHOWN_NAME',
+      problemMessage: "Duplicate shown name.",
+      correctionMessage:
+          "Try removing the repeated name from the list of shown members.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'DUPLICATE_SHOWN_NAME',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+duplicateVariablePattern = DiagnosticWithArguments(
+  name: 'DUPLICATE_VARIABLE_PATTERN',
+  problemMessage: "The variable '{0}' is already defined in this pattern.",
+  correctionMessage: "Try renaming the variable.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'DUPLICATE_VARIABLE_PATTERN',
+  withArguments: _withArgumentsDuplicateVariablePattern,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments emptyEnumBody = DiagnosticWithoutArgumentsImpl(
+  name: 'EMPTY_ENUM_BODY',
+  problemMessage: "An enum must declare at least one constant name.",
+  correctionMessage: "Try declaring a constant.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EMPTY_ENUM_BODY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments emptyMapPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EMPTY_MAP_PATTERN',
+      problemMessage: "A map pattern must have at least one entry.",
+      correctionMessage: "Try replacing it with an object pattern 'Map()'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EMPTY_MAP_PATTERN',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments emptyRecordLiteralWithComma =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EMPTY_RECORD_LITERAL_WITH_COMMA',
+      problemMessage:
+          "A record literal without fields can't have a trailing comma.",
+      correctionMessage: "Try removing the trailing comma.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EMPTY_RECORD_LITERAL_WITH_COMMA',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments emptyRecordTypeNamedFieldsList =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EMPTY_RECORD_TYPE_NAMED_FIELDS_LIST',
+      problemMessage:
+          "The list of named fields in a record type can't be empty.",
+      correctionMessage: "Try adding a named field to the list.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EMPTY_RECORD_TYPE_NAMED_FIELDS_LIST',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments emptyRecordTypeWithComma =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EMPTY_RECORD_TYPE_WITH_COMMA',
+      problemMessage:
+          "A record type without fields can't have a trailing comma.",
+      correctionMessage: "Try removing the trailing comma.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EMPTY_RECORD_TYPE_WITH_COMMA',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the subclass
+/// String p1: the name of the superclass
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+emptyStruct = DiagnosticWithArguments(
+  name: 'EMPTY_STRUCT',
+  problemMessage:
+      "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,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EMPTY_STRUCT',
+  withArguments: _withArgumentsEmptyStruct,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments encoding = DiagnosticWithoutArgumentsImpl(
+  name: 'ENCODING',
+  problemMessage: "Unable to decode bytes as UTF-8.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'ENCODING',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments enumConstantInvokesFactoryConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR',
+      problemMessage: "An enum value can't invoke a factory constructor.",
+      correctionMessage: "Try using a generative constructor.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments enumConstantSameNameAsEnclosing =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING',
+      problemMessage:
+          "The name of the enum value can't be the same as the enum's name.",
+      correctionMessage: "Try renaming the constant.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments enumInClass = DiagnosticWithoutArgumentsImpl(
+  name: 'ENUM_IN_CLASS',
+  problemMessage: "Enums can't be declared inside classes.",
+  correctionMessage: "Try moving the enum to the top-level.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'ENUM_IN_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments enumInstantiatedToBoundsIsNotWellBounded =
+    DiagnosticWithoutArgumentsImpl(
+      name: '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.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments enumMixinWithInstanceVariable =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ENUM_MIXIN_WITH_INSTANCE_VARIABLE',
+      problemMessage: "Mixins applied to enums can't have instance variables.",
+      correctionMessage: "Try replacing the instance variables with getters.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ENUM_MIXIN_WITH_INSTANCE_VARIABLE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the abstract method
+/// String p1: the name of the enclosing enum
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+enumWithAbstractMember = DiagnosticWithArguments(
+  name: 'ENUM_WITH_ABSTRACT_MEMBER',
+  problemMessage: "'{0}' must have a method body because '{1}' is an enum.",
+  correctionMessage: "Try adding a body to '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ENUM_WITH_ABSTRACT_MEMBER',
+  withArguments: _withArgumentsEnumWithAbstractMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments enumWithNameValues =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ENUM_WITH_NAME_VALUES',
+      problemMessage: "The name 'values' is not a valid name for an enum.",
+      correctionMessage: "Try using a different name.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ENUM_WITH_NAME_VALUES',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments enumWithoutConstants =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ENUM_WITHOUT_CONSTANTS',
+      problemMessage: "The enum must have at least one enum constant.",
+      correctionMessage: "Try declaring an enum constant.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ENUM_WITHOUT_CONSTANTS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments equalElementsInConstSet =
+    DiagnosticWithoutArgumentsImpl(
+      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.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EQUAL_ELEMENTS_IN_CONST_SET',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments equalElementsInSet =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EQUAL_ELEMENTS_IN_SET',
+      problemMessage: "Two elements in a set literal shouldn't be equal.",
+      correctionMessage: "Change or remove the duplicate element.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'EQUAL_ELEMENTS_IN_SET',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments equalityCannotBeEqualityOperand =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
+      problemMessage:
+          "A comparison expression can't be an operand of another comparison "
+          "expression.",
+      correctionMessage:
+          "Try putting parentheses around one of the comparisons.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EQUALITY_CANNOT_BE_EQUALITY_OPERAND',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments equalKeysInConstMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EQUAL_KEYS_IN_CONST_MAP',
+      problemMessage: "Two keys in a constant map literal can't be equal.",
+      correctionMessage: "Change or remove the duplicate key.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EQUAL_KEYS_IN_CONST_MAP',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments equalKeysInMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EQUAL_KEYS_IN_MAP',
+      problemMessage: "Two keys in a map literal shouldn't be equal.",
+      correctionMessage: "Change or remove the duplicate key.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'EQUAL_KEYS_IN_MAP',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments equalKeysInMapPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EQUAL_KEYS_IN_MAP_PATTERN',
+      problemMessage: "Two keys in a map pattern can't be equal.",
+      correctionMessage: "Change or remove the duplicate key.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EQUAL_KEYS_IN_MAP_PATTERN',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedCaseOrDefault =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_CASE_OR_DEFAULT',
+      problemMessage: "Expected 'case' or 'default'.",
+      correctionMessage: "Try placing this code inside a case clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_CASE_OR_DEFAULT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedCatchClauseBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage: "A catch clause must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_CATCH_CLAUSE_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedClassBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage:
+          "A class declaration must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_CLASS_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedClassMember =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_CLASS_MEMBER',
+      problemMessage: "Expected a class member.",
+      correctionMessage: "Try placing this code inside a class member.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_CLASS_MEMBER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedElseOrComma =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_ELSE_OR_COMMA',
+      problemMessage: "Expected 'else' or comma.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_ELSE_OR_COMMA',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+expectedExecutable = DiagnosticWithoutArgumentsImpl(
+  name: 'EXPECTED_EXECUTABLE',
+  problemMessage: "Expected a method, getter, setter or operator declaration.",
+  correctionMessage:
+      "This appears to be incomplete code. Try removing it or completing it.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXPECTED_EXECUTABLE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedExtensionBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage:
+          "An extension declaration must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_EXTENSION_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+expectedExtensionTypeBody = DiagnosticWithoutArgumentsImpl(
+  name: 'EXPECTED_BODY',
+  problemMessage:
+      "An extension type declaration must have a body, even if it is empty.",
+  correctionMessage: "Try adding an empty body.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXPECTED_EXTENSION_TYPE_BODY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedFinallyClauseBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage: "A finally clause must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_FINALLY_CLAUSE_BODY',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode expectedIdentifierButGotKeyword =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
+      problemMessage:
+          "'{0}' can't be used as an identifier because it's a keyword.",
+      correctionMessage:
+          "Try renaming this to be an identifier that isn't a keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_IDENTIFIER_BUT_GOT_KEYWORD',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// Parameters:
+/// String string: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String string})
+>
+expectedInstead = DiagnosticWithArguments(
+  name: 'EXPECTED_INSTEAD',
+  problemMessage: "Expected '{0}' instead of this.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXPECTED_INSTEAD',
+  withArguments: _withArgumentsExpectedInstead,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedListOrMapLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_LIST_OR_MAP_LITERAL',
+      problemMessage: "Expected a list or map literal.",
+      correctionMessage:
+          "Try inserting a list or map literal, or remove the type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_LIST_OR_MAP_LITERAL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedMixinBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage:
+          "A mixin declaration must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_MIXIN_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedNamedTypeExtends =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_NAMED_TYPE',
+      problemMessage: "Expected a class name.",
+      correctionMessage:
+          "Try using a class name, possibly with type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_NAMED_TYPE_EXTENDS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedNamedTypeImplements =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_NAMED_TYPE',
+      problemMessage: "Expected the name of a class or mixin.",
+      correctionMessage:
+          "Try using a class or mixin name, possibly with type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_NAMED_TYPE_IMPLEMENTS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedNamedTypeOn =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_NAMED_TYPE',
+      problemMessage: "Expected the name of a class or mixin.",
+      correctionMessage:
+          "Try using a class or mixin name, possibly with type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_NAMED_TYPE_ON',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedNamedTypeWith =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_NAMED_TYPE',
+      problemMessage: "Expected a mixin name.",
+      correctionMessage:
+          "Try using a mixin name, possibly with type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_NAMED_TYPE_WITH',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// int p0: the number of provided type arguments
+const DiagnosticWithArguments<LocatableDiagnostic Function({required int p0})>
+expectedOneListPatternTypeArguments = DiagnosticWithArguments(
+  name: 'EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS',
+  problemMessage:
+      "List patterns require one type argument or none, but {0} found.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS',
+  withArguments: _withArgumentsExpectedOneListPatternTypeArguments,
+  expectedTypes: [ExpectedType.int],
+);
+
+/// Parameters:
+/// int p0: the number of provided type arguments
+const DiagnosticWithArguments<LocatableDiagnostic Function({required int p0})>
+expectedOneListTypeArguments = DiagnosticWithArguments(
+  name: 'EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
+  problemMessage:
+      "List literals require one type argument or none, but {0} found.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
+  withArguments: _withArgumentsExpectedOneListTypeArguments,
+  expectedTypes: [ExpectedType.int],
+);
+
+/// Parameters:
+/// int p0: the number of provided type arguments
+const DiagnosticWithArguments<LocatableDiagnostic Function({required int p0})>
+expectedOneSetTypeArguments = DiagnosticWithArguments(
+  name: 'EXPECTED_ONE_SET_TYPE_ARGUMENTS',
+  problemMessage:
+      "Set literals require one type argument or none, but {0} were found.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPECTED_ONE_SET_TYPE_ARGUMENTS',
+  withArguments: _withArgumentsExpectedOneSetTypeArguments,
+  expectedTypes: [ExpectedType.int],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedRepresentationField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_REPRESENTATION_FIELD',
+      problemMessage: "Expected a representation field.",
+      correctionMessage:
+          "Try providing the representation field for this extension type.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_REPRESENTATION_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedRepresentationType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_REPRESENTATION_TYPE',
+      problemMessage: "Expected a representation type.",
+      correctionMessage:
+          "Try providing the representation type for this extension type.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_REPRESENTATION_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedStringLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_STRING_LITERAL',
+      problemMessage: "Expected a string literal.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_STRING_LITERAL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedSwitchExpressionBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage:
+          "A switch expression must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_SWITCH_EXPRESSION_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedSwitchStatementBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage:
+          "A switch statement must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_SWITCH_STATEMENT_BODY',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the token that was expected but not found
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+expectedToken = DiagnosticWithArguments(
+  name: 'EXPECTED_TOKEN',
+  problemMessage: "Expected to find '{0}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXPECTED_TOKEN',
+  withArguments: _withArgumentsExpectedToken,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedTryStatementBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_BODY',
+      problemMessage: "A try statement must have a body, even if it is empty.",
+      correctionMessage: "Try adding an empty body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_TRY_STATEMENT_BODY',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// int p0: the number of provided type arguments
+const DiagnosticWithArguments<LocatableDiagnostic Function({required int p0})>
+expectedTwoMapPatternTypeArguments = DiagnosticWithArguments(
+  name: 'EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS',
+  problemMessage:
+      "Map patterns require two type arguments or none, but {0} found.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS',
+  withArguments: _withArgumentsExpectedTwoMapPatternTypeArguments,
+  expectedTypes: [ExpectedType.int],
+);
+
+/// Parameters:
+/// int p0: the number of provided type arguments
+const DiagnosticWithArguments<LocatableDiagnostic Function({required int p0})>
+expectedTwoMapTypeArguments = DiagnosticWithArguments(
+  name: 'EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
+  problemMessage:
+      "Map literals require two type arguments or none, but {0} found.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
+  withArguments: _withArgumentsExpectedTwoMapTypeArguments,
+  expectedTypes: [ExpectedType.int],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expectedTypeName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPECTED_TYPE_NAME',
+      problemMessage: "Expected a type name.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPECTED_TYPE_NAME',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String member: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String member})
+>
+experimentalMemberUse = DiagnosticWithArguments(
+  name: 'EXPERIMENTAL_MEMBER_USE',
+  problemMessage:
+      "'{0}' is experimental and could be removed or changed at any time.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'EXPERIMENTAL_MEMBER_USE',
+  withArguments: _withArgumentsExperimentalMemberUse,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String string: undocumented
+/// String string2: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String string,
+    required String string2,
+  })
+>
+experimentNotEnabled = DiagnosticWithArguments(
+  name: 'EXPERIMENT_NOT_ENABLED',
+  problemMessage: "This requires the '{0}' language feature to be enabled.",
+  correctionMessage:
+      "Try updating your pubspec.yaml to set the minimum SDK constraint to "
+      "{1} or higher, and running 'pub get'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXPERIMENT_NOT_ENABLED',
+  withArguments: _withArgumentsExperimentNotEnabled,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String string: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String string})
+>
+experimentNotEnabledOffByDefault = DiagnosticWithArguments(
+  name: 'EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT',
+  problemMessage:
+      "This requires the experimental '{0}' language feature to be enabled.",
+  correctionMessage:
+      "Try passing the '--enable-experiment={0}' command line option.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT',
+  withArguments: _withArgumentsExperimentNotEnabledOffByDefault,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments exportDirectiveAfterPartDirective =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+      problemMessage: "Export directives must precede part directives.",
+      correctionMessage:
+          "Try moving the export directives before the part directives.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the URI pointing to a library
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+exportInternalLibrary = DiagnosticWithArguments(
+  name: 'EXPORT_INTERNAL_LIBRARY',
+  problemMessage: "The library '{0}' is internal and can't be exported.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPORT_INTERNAL_LIBRARY',
+  withArguments: _withArgumentsExportInternalLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the URI pointing to a non-library declaration
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+exportOfNonLibrary = DiagnosticWithArguments(
+  name: 'EXPORT_OF_NON_LIBRARY',
+  problemMessage: "The exported library '{0}' can't have a part-of directive.",
+  correctionMessage: "Try exporting the library that the part is a part of.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXPORT_OF_NON_LIBRARY',
+  withArguments: _withArgumentsExportOfNonLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments expressionInMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXPRESSION_IN_MAP',
+      problemMessage: "Expressions can't be used in a map literal.",
+      correctionMessage:
+          "Try removing the expression or converting it to be a map entry.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXPRESSION_IN_MAP',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extendsDeferredClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUBTYPE_OF_DEFERRED_CLASS',
+      problemMessage: "Classes can't extend deferred classes.",
+      correctionMessage:
+          "Try specifying a different superclass, or removing the extends "
+          "clause.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENDS_DEFERRED_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the disallowed type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+extendsDisallowedClass = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_DISALLOWED_TYPE',
+  problemMessage: "Classes can't extend '{0}'.",
+  correctionMessage:
+      "Try specifying a different superclass, or removing the extends "
+      "clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENDS_DISALLOWED_CLASS',
+  withArguments: _withArgumentsExtendsDisallowedClass,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments extendsNonClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENDS_NON_CLASS',
+      problemMessage: "Classes can only extend other classes.",
+      correctionMessage:
+          "Try specifying a different superclass, or removing the extends "
+          "clause.",
+      hasPublishedDocs: true,
+      isUnresolvedIdentifier: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENDS_NON_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extendsTypeAliasExpandsToTypeParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
+      problemMessage:
+          "A type alias that expands to a type parameter can't be used as a "
+          "superclass.",
+      correctionMessage:
+          "Try specifying a different superclass, or removing the extends "
+          "clause.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the extension
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+extensionAsExpression = DiagnosticWithArguments(
+  name: 'EXTENSION_AS_EXPRESSION',
+  problemMessage: "Extension '{0}' can't be used as an expression.",
+  correctionMessage: "Try replacing it with a valid expression.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_AS_EXPRESSION',
+  withArguments: _withArgumentsExtensionAsExpression,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments extensionAugmentationHasOnClause =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_AUGMENTATION_HAS_ON_CLAUSE',
+      problemMessage: "Extension augmentations can't have 'on' clauses.",
+      correctionMessage: "Try removing the 'on' clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTENSION_AUGMENTATION_HAS_ON_CLAUSE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the conflicting static member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+extensionConflictingStaticAndInstance = DiagnosticWithArguments(
+  name: 'EXTENSION_CONFLICTING_STATIC_AND_INSTANCE',
+  problemMessage:
+      "An extension can't define static member '{0}' and an instance member with "
+      "the same name.",
+  correctionMessage: "Try renaming the member to a name that doesn't conflict.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_CONFLICTING_STATIC_AND_INSTANCE',
+  withArguments: _withArgumentsExtensionConflictingStaticAndInstance,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments extensionDeclaresAbstractMember =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_DECLARES_ABSTRACT_MEMBER',
+      problemMessage: "Extensions can't declare abstract members.",
+      correctionMessage: "Try providing an implementation for the member.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTENSION_DECLARES_ABSTRACT_MEMBER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments extensionDeclaresConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_DECLARES_CONSTRUCTOR',
+      problemMessage: "Extensions can't declare constructors.",
+      correctionMessage: "Try removing the constructor declaration.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTENSION_DECLARES_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionDeclaresInstanceField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_DECLARES_INSTANCE_FIELD',
+      problemMessage: "Extensions can't declare instance fields.",
+      correctionMessage: "Try replacing the field with a getter.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_DECLARES_INSTANCE_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extensionDeclaresMemberOfObject = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTENSION_DECLARES_MEMBER_OF_OBJECT',
+  problemMessage:
+      "Extensions can't declare members with the same name as a member declared "
+      "by 'Object'.",
+  correctionMessage: "Try specifying a different name for the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_DECLARES_MEMBER_OF_OBJECT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extensionOverrideAccessToStaticMember = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER',
+  problemMessage:
+      "An extension override can't be used to access a static member from an "
+      "extension.",
+  correctionMessage: "Try using just the name of the extension.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the type of the argument
+/// Type p1: the extended type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+extensionOverrideArgumentNotAssignable = DiagnosticWithArguments(
+  name: 'EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE',
+  problemMessage:
+      "The type of the argument to the extension override '{0}' isn't assignable "
+      "to the extended type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsExtensionOverrideArgumentNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extensionOverrideWithCascade = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTENSION_OVERRIDE_WITH_CASCADE',
+  problemMessage:
+      "Extension overrides have no value so they can't be used as the receiver "
+      "of a cascade expression.",
+  correctionMessage: "Try using '.' instead of '..'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_OVERRIDE_WITH_CASCADE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionOverrideWithoutAccess =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_OVERRIDE_WITHOUT_ACCESS',
+      problemMessage:
+          "An extension override can only be used to access instance members.",
+      correctionMessage: "Consider adding an access to an instance member.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_OVERRIDE_WITHOUT_ACCESS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extensionTypeConstructorWithSuperFormalParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER',
+      problemMessage:
+          "Extension type constructors can't declare super formal parameters.",
+      correctionMessage: "Try removing the super formal parameter declaration.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionTypeConstructorWithSuperInvocation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION',
+      problemMessage:
+          "Extension type constructors can't include super initializers.",
+      correctionMessage: "Try removing the super constructor invocation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionTypeDeclaresInstanceField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_DECLARES_INSTANCE_FIELD',
+      problemMessage: "Extension types can't declare instance fields.",
+      correctionMessage: "Try replacing the field with a getter.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_TYPE_DECLARES_INSTANCE_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extensionTypeDeclaresMemberOfObject = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT',
+  problemMessage:
+      "Extension types can't declare members with the same name as a member "
+      "declared by 'Object'.",
+  correctionMessage: "Try specifying a different name for the member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionTypeExtends =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_EXTENDS',
+      problemMessage:
+          "An extension type declaration can't have an 'extends' clause.",
+      correctionMessage:
+          "Try removing the 'extends' clause or replacing the 'extends' with "
+          "'implements'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTENSION_TYPE_EXTENDS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the display string of the disallowed type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+extensionTypeImplementsDisallowedType = DiagnosticWithArguments(
+  name: 'EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE',
+  problemMessage: "Extension types can't implement '{0}'.",
+  correctionMessage:
+      "Try specifying a different type, or remove the type from the list.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE',
+  withArguments: _withArgumentsExtensionTypeImplementsDisallowedType,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extensionTypeImplementsItself = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTENSION_TYPE_IMPLEMENTS_ITSELF',
+  problemMessage: "The extension type can't implement itself.",
+  correctionMessage:
+      "Try removing the superinterface that references this extension type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_IMPLEMENTS_ITSELF',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the implemented not extension type
+/// Type p1: the ultimate representation type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+extensionTypeImplementsNotSupertype = DiagnosticWithArguments(
+  name: 'EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE',
+  problemMessage: "'{0}' is not a supertype of '{1}', the representation type.",
+  correctionMessage:
+      "Try specifying a different type, or remove the type from the list.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE',
+  withArguments: _withArgumentsExtensionTypeImplementsNotSupertype,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the representation type of the implemented extension type
+/// String p1: the name of the implemented extension type
+/// Type p2: the representation type of the this extension type
+/// String p3: the name of the this extension type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required String p1,
+    required DartType p2,
+    required String p3,
+  })
+>
+extensionTypeImplementsRepresentationNotSupertype = DiagnosticWithArguments(
+  name: 'EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE',
+  problemMessage:
+      "'{0}', the representation type of '{1}', is not a supertype of '{2}', the "
+      "representation type of '{3}'.",
+  correctionMessage:
+      "Try specifying a different type, or remove the type from the list.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE',
+  withArguments:
+      _withArgumentsExtensionTypeImplementsRepresentationNotSupertype,
+  expectedTypes: [
+    ExpectedType.type,
+    ExpectedType.string,
+    ExpectedType.type,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the extension type
+/// String p1: the name of the conflicting member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+extensionTypeInheritedMemberConflict = DiagnosticWithArguments(
+  name: 'EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT',
+  problemMessage:
+      "The extension type '{0}' has more than one distinct member named '{1}' "
+      "from implemented types.",
+  correctionMessage:
+      "Try redeclaring the corresponding member in this extension type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT',
+  withArguments: _withArgumentsExtensionTypeInheritedMemberConflict,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionTypeRepresentationDependsOnItself =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF',
+      problemMessage:
+          "The extension type representation can't depend on itself.",
+      correctionMessage: "Try specifying a different type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionTypeRepresentationTypeBottom =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM',
+      problemMessage: "The representation type can't be a bottom type.",
+      correctionMessage: "Try specifying a different type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments extensionTypeWith =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTENSION_TYPE_WITH',
+      problemMessage:
+          "An extension type declaration can't have a 'with' clause.",
+      correctionMessage:
+          "Try removing the 'with' clause or replacing the 'with' with "
+          "'implements'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTENSION_TYPE_WITH',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the abstract method
+/// String p1: the name of the enclosing extension type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+extensionTypeWithAbstractMember = DiagnosticWithArguments(
+  name: 'EXTENSION_TYPE_WITH_ABSTRACT_MEMBER',
+  problemMessage:
+      "'{0}' must have a method body because '{1}' is an extension type.",
+  correctionMessage: "Try adding a body to '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTENSION_TYPE_WITH_ABSTRACT_MEMBER',
+  withArguments: _withArgumentsExtensionTypeWithAbstractMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments externalClass = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTERNAL_CLASS',
+  problemMessage: "Classes can't be declared to be 'external'.",
+  correctionMessage: "Try removing the keyword 'external'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXTERNAL_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments externalConstructorWithFieldInitializers =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS',
+      problemMessage: "An external constructor can't initialize fields.",
+      correctionMessage:
+          "Try removing the field initializers, or removing the keyword "
+          "'external'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalConstructorWithInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER',
+      problemMessage: "An external constructor can't have any initializers.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_CONSTRUCTOR_WITH_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalEnum = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTERNAL_ENUM',
+  problemMessage: "Enums can't be declared to be 'external'.",
+  correctionMessage: "Try removing the keyword 'external'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXTERNAL_ENUM',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments externalFactoryRedirection =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_FACTORY_REDIRECTION',
+      problemMessage: "A redirecting factory can't be external.",
+      correctionMessage: "Try removing the 'external' modifier.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_FACTORY_REDIRECTION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalFactoryWithBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_FACTORY_WITH_BODY',
+      problemMessage: "External factories can't have a body.",
+      correctionMessage:
+          "Try removing the body of the factory, or removing the keyword "
+          "'external'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_FACTORY_WITH_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+externalFieldConstructorInitializer = DiagnosticWithoutArgumentsImpl(
+  name: '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,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments externalFieldInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_WITH_INITIALIZER',
+      problemMessage: "External fields can't have initializers.",
+      correctionMessage:
+          "Try removing the initializer or the 'external' keyword.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTERNAL_FIELD_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalGetterWithBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_GETTER_WITH_BODY',
+      problemMessage: "External getters can't have a body.",
+      correctionMessage:
+          "Try removing the body of the getter, or removing the keyword "
+          "'external'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_GETTER_WITH_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalLateField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_LATE_FIELD',
+      problemMessage: "External fields cannot be late.",
+      correctionMessage: "Try removing the 'external' or 'late' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_LATE_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalMethodWithBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_METHOD_WITH_BODY',
+      problemMessage: "An external or native method can't have a body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_METHOD_WITH_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalOperatorWithBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_OPERATOR_WITH_BODY',
+      problemMessage: "External operators can't have a body.",
+      correctionMessage:
+          "Try removing the body of the operator, or removing the keyword "
+          "'external'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_OPERATOR_WITH_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalSetterWithBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_SETTER_WITH_BODY',
+      problemMessage: "External setters can't have a body.",
+      correctionMessage:
+          "Try removing the body of the setter, or removing the keyword "
+          "'external'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_SETTER_WITH_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalTypedef =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_TYPEDEF',
+      problemMessage: "Typedefs can't be declared to be 'external'.",
+      correctionMessage: "Try removing the keyword 'external'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTERNAL_TYPEDEF',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments externalVariableInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTERNAL_WITH_INITIALIZER',
+      problemMessage: "External variables can't have initializers.",
+      correctionMessage:
+          "Try removing the initializer or the 'external' keyword.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTERNAL_VARIABLE_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+extraAnnotationOnStructField = DiagnosticWithoutArgumentsImpl(
+  name: 'EXTRA_ANNOTATION_ON_STRUCT_FIELD',
+  problemMessage:
+      "Fields in a struct class must have exactly one annotation indicating the "
+      "native type.",
+  correctionMessage: "Try removing the extra annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTRA_ANNOTATION_ON_STRUCT_FIELD',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode extraneousModifier = DiagnosticCodeWithExpectedTypes(
+  name: 'EXTRANEOUS_MODIFIER',
+  problemMessage: "Can't have modifier '{0}' here.",
+  correctionMessage: "Try removing '{0}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'EXTRANEOUS_MODIFIER',
+  expectedTypes: [ExpectedType.token],
+);
+
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode extraneousModifierInExtensionType =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE',
+      problemMessage: "Can't have modifier '{0}' in an extension type.",
+      correctionMessage: "Try removing '{0}'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode extraneousModifierInPrimaryConstructor =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR',
+      problemMessage: "Can't have modifier '{0}' in a primary constructor.",
+      correctionMessage: "Try removing '{0}'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// Parameters:
+/// int p0: the maximum number of positional arguments
+/// int p1: the actual number of positional arguments given
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required int p0, required int p1})
+>
+extraPositionalArguments = DiagnosticWithArguments(
+  name: 'EXTRA_POSITIONAL_ARGUMENTS',
+  problemMessage: "Too many positional arguments: {0} expected, but {1} found.",
+  correctionMessage: "Try removing the extra arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTRA_POSITIONAL_ARGUMENTS',
+  withArguments: _withArgumentsExtraPositionalArguments,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// int p0: the maximum number of positional arguments
+/// int p1: the actual number of positional arguments given
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required int p0, required int p1})
+>
+extraPositionalArgumentsCouldBeNamed = DiagnosticWithArguments(
+  name: 'EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED',
+  problemMessage: "Too many positional arguments: {0} expected, but {1} found.",
+  correctionMessage:
+      "Try removing the extra positional arguments, or specifying the name "
+      "for named arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED',
+  withArguments: _withArgumentsExtraPositionalArgumentsCouldBeNamed,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments extraSizeAnnotationCarray =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'EXTRA_SIZE_ANNOTATION_CARRAY',
+      problemMessage: "'Array's must have exactly one 'Array' annotation.",
+      correctionMessage: "Try removing the extra annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'EXTRA_SIZE_ANNOTATION_CARRAY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments factoryConstructorNewName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FACTORY_CONSTRUCTOR_NEW_NAME',
+      problemMessage: "Factory constructors can't be named 'new'.",
+      correctionMessage:
+          "Try removing the 'new' keyword or changing it to a different name.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FACTORY_CONSTRUCTOR_NEW_NAME',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments factoryTopLevelDeclaration =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FACTORY_TOP_LEVEL_DECLARATION',
+      problemMessage:
+          "Top-level declarations can't be declared to be 'factory'.",
+      correctionMessage: "Try removing the keyword 'factory'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FACTORY_TOP_LEVEL_DECLARATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments factoryWithInitializers =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FACTORY_WITH_INITIALIZERS',
+      problemMessage: "A 'factory' constructor can't have initializers.",
+      correctionMessage:
+          "Try removing the 'factory' keyword to make this a generative "
+          "constructor, or removing the initializers.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FACTORY_WITH_INITIALIZERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments factoryWithoutBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FACTORY_WITHOUT_BODY',
+      problemMessage:
+          "A non-redirecting 'factory' constructor must have a body.",
+      correctionMessage: "Try adding a body to the constructor.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FACTORY_WITHOUT_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments ffiNativeInvalidDuplicateDefaultAsset =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET',
+      problemMessage:
+          "There may be at most one @DefaultAsset annotation on a library.",
+      correctionMessage: "Try removing the extra annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+ffiNativeInvalidMultipleAnnotations = DiagnosticWithoutArgumentsImpl(
+  name: 'FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS',
+  problemMessage:
+      "Native functions and fields must have exactly one `@Native` annotation.",
+  correctionMessage: "Try removing the extra annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments ffiNativeMustBeExternal =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FFI_NATIVE_MUST_BE_EXTERNAL',
+      problemMessage: "Native functions must be declared external.",
+      correctionMessage: "Add the `external` keyword to the function.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FFI_NATIVE_MUST_BE_EXTERNAL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer =
+    DiagnosticWithoutArgumentsImpl(
+      name:
+          'FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER',
+      problemMessage:
+          "Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.",
+      correctionMessage: "Pass as Handle instead.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName:
+          'FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// int p0: the expected number of parameters
+/// int p1: the actual number of parameters
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required int p0, required int p1})
+>
+ffiNativeUnexpectedNumberOfParameters = DiagnosticWithArguments(
+  name: 'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS',
+  problemMessage:
+      "Unexpected number of Native annotation parameters. Expected {0} but has "
+      "{1}.",
+  correctionMessage: "Make sure parameters match the function annotated.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS',
+  withArguments: _withArgumentsFfiNativeUnexpectedNumberOfParameters,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// int p0: the expected number of parameters
+/// int p1: the actual number of parameters
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required int p0, required int p1})
+>
+ffiNativeUnexpectedNumberOfParametersWithReceiver = DiagnosticWithArguments(
+  name: 'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER',
+  problemMessage:
+      "Unexpected number of Native annotation parameters. Expected {0} but has "
+      "{1}. Native instance method annotation must have receiver as first "
+      "argument.",
+  correctionMessage:
+      "Make sure parameters match the function annotated, including an extra "
+      "first parameter for the receiver.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER',
+  withArguments:
+      _withArgumentsFfiNativeUnexpectedNumberOfParametersWithReceiver,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// String p0: the name of the field being initialized multiple times
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+fieldInitializedByMultipleInitializers = DiagnosticWithArguments(
+  name: 'FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
+  problemMessage:
+      "The field '{0}' can't be initialized twice in the same constructor.",
+  correctionMessage: "Try removing one of the initializations.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
+  withArguments: _withArgumentsFieldInitializedByMultipleInitializers,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+fieldInitializedInInitializerAndDeclaration = DiagnosticWithoutArgumentsImpl(
+  name: 'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
+  problemMessage:
+      "Fields can't be initialized in the constructor if they are final and were "
+      "already initialized at their declaration.",
+  correctionMessage: "Try removing one of the initializations.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments fieldInitializedInParameterAndInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER',
+      problemMessage:
+          "Fields can't be initialized in both the parameter list and the "
+          "initializers.",
+      correctionMessage: "Try removing one of the initializations.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments fieldInitializedOutsideDeclaringClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS',
+      problemMessage: "A field can only be initialized in its declaring class",
+      correctionMessage:
+          "Try passing a value into the superclass constructor, or moving the "
+          "initialization into the constructor body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+fieldInitializerFactoryConstructor = DiagnosticWithoutArgumentsImpl(
+  name: 'FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
+  problemMessage:
+      "Initializing formal parameters can't be used in factory constructors.",
+  correctionMessage: "Try using a normal parameter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the name of the type of the initializer expression
+/// Type p1: the name of the type of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+fieldInitializerNotAssignable = DiagnosticWithArguments(
+  name: 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
+  problemMessage:
+      "The initializer type '{0}' can't be assigned to the field type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsFieldInitializerNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments fieldInitializerOutsideConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
+      problemMessage:
+          "Field formal parameters can only be used in a constructor.",
+      correctionMessage: "Try removing 'this.'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments fieldInitializerRedirectingConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: '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.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the type of the field formal parameter
+/// Type p1: the name of the type of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+fieldInitializingFormalNotAssignable = DiagnosticWithArguments(
+  name: 'FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
+  problemMessage:
+      "The parameter type '{0}' is incompatible with the field type '{1}'.",
+  correctionMessage:
+      "Try changing or removing the parameter's type, or changing the "
+      "field's type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsFieldInitializingFormalNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments fieldMustBeExternalInStruct =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FIELD_MUST_BE_EXTERNAL_IN_STRUCT',
+      problemMessage:
+          "Fields of 'Struct' and 'Union' subclasses must be marked external.",
+      correctionMessage: "Try adding the 'external' modifier.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FIELD_MUST_BE_EXTERNAL_IN_STRUCT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments finalAndCovariant =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FINAL_AND_COVARIANT',
+      problemMessage:
+          "Members can't be declared to be both 'final' and 'covariant'.",
+      correctionMessage:
+          "Try removing either the 'final' or 'covariant' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FINAL_AND_COVARIANT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+finalAndCovariantLateWithInitializer = DiagnosticWithoutArgumentsImpl(
+  name: 'FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER',
+  problemMessage:
+      "Members marked 'late' with an initializer can't be declared to be both "
+      "'final' and 'covariant'.",
+  correctionMessage:
+      "Try removing either the 'final' or 'covariant' keyword, or removing "
+      "the initializer.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'FINAL_AND_COVARIANT_LATE_WITH_INITIALIZER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments finalAndVar = DiagnosticWithoutArgumentsImpl(
+  name: 'FINAL_AND_VAR',
+  problemMessage: "Members can't be declared to be both 'final' and 'var'.",
+  correctionMessage: "Try removing the keyword 'var'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'FINAL_AND_VAR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the final class being extended.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+finalClassExtendedOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The class '{0}' can't be extended outside of its library because it's a "
+      "final class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsFinalClassExtendedOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the final class being implemented.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+finalClassImplementedOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The class '{0}' can't be implemented outside of its library because it's "
+      "a final class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsFinalClassImplementedOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the final class being used as a mixin superclass
+///            constraint.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+finalClassUsedAsMixinConstraintOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The class '{0}' can't be used as a mixin superclass constraint outside of "
+      "its library because it's a final class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsFinalClassUsedAsMixinConstraintOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments finalConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FINAL_CONSTRUCTOR',
+      problemMessage: "A constructor can't be declared to be 'final'.",
+      correctionMessage: "Try removing the keyword 'final'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FINAL_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments finalEnum = DiagnosticWithoutArgumentsImpl(
+  name: 'FINAL_ENUM',
+  problemMessage: "Enums can't be declared to be 'final'.",
+  correctionMessage: "Try removing the keyword 'final'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'FINAL_ENUM',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the field in question
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+finalInitializedInDeclarationAndConstructor = DiagnosticWithArguments(
+  name: 'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
+  problemMessage:
+      "'{0}' is final and was given a value when it was declared, so it can't be "
+      "set to a new value.",
+  correctionMessage: "Try removing one of the initializations.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
+  withArguments: _withArgumentsFinalInitializedInDeclarationAndConstructor,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments finalMethod = DiagnosticWithoutArgumentsImpl(
+  name: 'FINAL_METHOD',
+  problemMessage:
+      "Getters, setters and methods can't be declared to be 'final'.",
+  correctionMessage: "Try removing the keyword 'final'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'FINAL_METHOD',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments finalMixin = DiagnosticWithoutArgumentsImpl(
+  name: 'FINAL_MIXIN',
+  problemMessage: "A mixin can't be declared 'final'.",
+  correctionMessage: "Try removing the 'final' keyword.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'FINAL_MIXIN',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments finalMixinClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FINAL_MIXIN_CLASS',
+      problemMessage: "A mixin class can't be declared 'final'.",
+      correctionMessage: "Try removing the 'final' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'FINAL_MIXIN_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the uninitialized final variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+finalNotInitialized = DiagnosticWithArguments(
+  name: 'FINAL_NOT_INITIALIZED',
+  problemMessage: "The final variable '{0}' must be initialized.",
+  correctionMessage: "Try initializing the variable.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_NOT_INITIALIZED',
+  withArguments: _withArgumentsFinalNotInitialized,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the uninitialized final variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+finalNotInitializedConstructor1 = DiagnosticWithArguments(
+  name: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
+  problemMessage: "All final variables must be initialized, but '{0}' isn't.",
+  correctionMessage: "Try adding an initializer for the field.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
+  withArguments: _withArgumentsFinalNotInitializedConstructor1,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the uninitialized final variable
+/// String p1: the name of the uninitialized final variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+finalNotInitializedConstructor2 = DiagnosticWithArguments(
+  name: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
+  problemMessage:
+      "All final variables must be initialized, but '{0}' and '{1}' aren't.",
+  correctionMessage: "Try adding initializers for the fields.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
+  withArguments: _withArgumentsFinalNotInitializedConstructor2,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the uninitialized final variable
+/// String p1: the name of the uninitialized final variable
+/// int p2: the number of additional not initialized variables that aren't
+///         listed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required int p2,
+  })
+>
+finalNotInitializedConstructor3Plus = DiagnosticWithArguments(
+  name: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
+  problemMessage:
+      "All final variables must be initialized, but '{0}', '{1}', and {2} others "
+      "aren't.",
+  correctionMessage: "Try adding initializers for the fields.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS',
+  withArguments: _withArgumentsFinalNotInitializedConstructor3Plus,
+  expectedTypes: [ExpectedType.string, ExpectedType.string, ExpectedType.int],
+);
+
+/// A TODO comment marked as FIXME.
+///
+/// Parameters:
+/// String message: the user-supplied problem message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String message})
+>
+fixme = DiagnosticWithArguments(
+  name: 'FIXME',
+  problemMessage: "{0}",
+  type: DiagnosticType.TODO,
+  uniqueName: 'FIXME',
+  withArguments: _withArgumentsFixme,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments flutterFieldNotMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FLUTTER_FIELD_NOT_MAP',
+      problemMessage:
+          "The value of the 'flutter' field is expected to be a map.",
+      correctionMessage: "Try converting the value to be a map.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'FLUTTER_FIELD_NOT_MAP',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the type of the iterable expression.
+/// String p1: the sequence type -- Iterable for `for` or Stream for `await
+///            for`.
+/// Type p2: the loop variable type.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required String p1,
+    required DartType p2,
+  })
+>
+forInOfInvalidElementType = DiagnosticWithArguments(
+  name: 'FOR_IN_OF_INVALID_ELEMENT_TYPE',
+  problemMessage:
+      "The type '{0}' used in the 'for' loop must implement '{1}' with a type "
+      "argument that can be assigned to '{2}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FOR_IN_OF_INVALID_ELEMENT_TYPE',
+  withArguments: _withArgumentsForInOfInvalidElementType,
+  expectedTypes: [ExpectedType.type, ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the type of the iterable expression.
+/// String p1: the sequence type -- Iterable for `for` or Stream for `await
+///            for`.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required String p1})
+>
+forInOfInvalidType = DiagnosticWithArguments(
+  name: 'FOR_IN_OF_INVALID_TYPE',
+  problemMessage: "The type '{0}' used in the 'for' loop must implement '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'FOR_IN_OF_INVALID_TYPE',
+  withArguments: _withArgumentsForInOfInvalidType,
+  expectedTypes: [ExpectedType.type, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments forInWithConstVariable =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'FOR_IN_WITH_CONST_VARIABLE',
+      problemMessage: "A for-in loop variable can't be a 'const'.",
+      correctionMessage:
+          "Try removing the 'const' modifier from the variable, or use a "
+          "different variable.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'FOR_IN_WITH_CONST_VARIABLE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+functionTypedParameterVar = DiagnosticWithoutArgumentsImpl(
+  name: 'FUNCTION_TYPED_PARAMETER_VAR',
+  problemMessage:
+      "Function-typed parameters can't specify 'const', 'final' or 'var' in "
+      "place of a return type.",
+  correctionMessage: "Try replacing the keyword with a return type.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'FUNCTION_TYPED_PARAMETER_VAR',
+  expectedTypes: [],
+);
+
+/// It is a compile-time error if a generic function type is used as a bound
+/// for a formal type parameter of a class or a function.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+genericFunctionTypeCannotBeBound = DiagnosticWithoutArgumentsImpl(
+  name: 'GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND',
+  problemMessage:
+      "Generic function types can't be used as type parameter bounds.",
+  correctionMessage:
+      "Try making the free variable in the function type part of the larger "
+      "declaration signature.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND',
+  expectedTypes: [],
+);
+
+/// It is a compile-time error if a generic function type is used as an actual
+/// type argument.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+genericFunctionTypeCannotBeTypeArgument = DiagnosticWithoutArgumentsImpl(
+  name: 'GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT',
+  problemMessage: "A generic function type can't be a type argument.",
+  correctionMessage:
+      "Try removing type parameters from the generic function type, or using "
+      "'dynamic' as the type argument here.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+genericMethodTypeInstantiationOnDynamic = DiagnosticWithoutArgumentsImpl(
+  name: 'GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC',
+  problemMessage:
+      "A method tear-off on a receiver whose type is 'dynamic' can't have type "
+      "arguments.",
+  correctionMessage:
+      "Specify the type of the receiver, or remove the type arguments from "
+      "the method tear-off.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the struct class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+genericStructSubclass = DiagnosticWithArguments(
+  name: 'GENERIC_STRUCT_SUBCLASS',
+  problemMessage:
+      "The class '{0}' can't extend 'Struct' or 'Union' because '{0}' is "
+      "generic.",
+  correctionMessage: "Try removing the type parameters from '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'GENERIC_STRUCT_SUBCLASS',
+  withArguments: _withArgumentsGenericStructSubclass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments getterConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'GETTER_CONSTRUCTOR',
+      problemMessage: "Constructors can't be a getter.",
+      correctionMessage: "Try removing 'get'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'GETTER_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments getterInFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'GETTER_IN_FUNCTION',
+      problemMessage: "Getters can't be defined within methods or functions.",
+      correctionMessage:
+          "Try moving the getter outside the method or function, or converting "
+          "the getter to a function.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'GETTER_IN_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the getter
+/// Object p1: the type of the getter
+/// Object p2: the type of the setter
+/// Object p3: the name of the setter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+  })
+>
+getterNotAssignableSetterTypes = DiagnosticWithArguments(
+  name: 'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
+  problemMessage:
+      "The return type of getter '{0}' is '{1}' which isn't assignable to the "
+      "type '{2}' of its setter '{3}'.",
+  correctionMessage: "Try changing the types so that they are compatible.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
+  withArguments: _withArgumentsGetterNotAssignableSetterTypes,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// Parameters:
+/// Object p0: the name of the getter
+/// Object p1: the type of the getter
+/// Object p2: the type of the setter
+/// Object p3: the name of the setter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+  })
+>
+getterNotSubtypeSetterTypes = DiagnosticWithArguments(
+  name: 'GETTER_NOT_SUBTYPE_SETTER_TYPES',
+  problemMessage:
+      "The return type of getter '{0}' is '{1}' which isn't a subtype of the "
+      "type '{2}' of its setter '{3}'.",
+  correctionMessage: "Try changing the types so that they are compatible.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'GETTER_NOT_SUBTYPE_SETTER_TYPES',
+  withArguments: _withArgumentsGetterNotSubtypeSetterTypes,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments getterWithParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'GETTER_WITH_PARAMETERS',
+      problemMessage: "Getters must be declared without a parameter list.",
+      correctionMessage:
+          "Try removing the parameter list, or removing the keyword 'get' to "
+          "define a method rather than a getter.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'GETTER_WITH_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// A TODO comment marked as HACK.
+///
+/// Parameters:
+/// String message: the user-supplied problem message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String message})
+>
+hack = DiagnosticWithArguments(
+  name: 'HACK',
+  problemMessage: "{0}",
+  type: DiagnosticType.TODO,
+  uniqueName: 'HACK',
+  withArguments: _withArgumentsHack,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+ifElementConditionFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as values in an if "
+      "condition inside a const collection literal.",
+  correctionMessage: "Try making the deferred import non-deferred.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments illegalAssignmentToNonAssignable =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
+      problemMessage: "Illegal assignment to non-assignable expression.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+illegalAsyncGeneratorReturnType = DiagnosticWithoutArgumentsImpl(
+  name: 'ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
+  problemMessage:
+      "Functions marked 'async*' must have a return type that is a supertype of "
+      "'Stream<T>' for some type 'T'.",
+  correctionMessage:
+      "Try fixing the return type of the function, or removing the modifier "
+      "'async*' from the function body.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+illegalAsyncReturnType = DiagnosticWithoutArgumentsImpl(
+  name: 'ILLEGAL_ASYNC_RETURN_TYPE',
+  problemMessage:
+      "Functions marked 'async' must have a return type which is a supertype of "
+      "'Future'.",
+  correctionMessage:
+      "Try fixing the return type of the function, or removing the modifier "
+      "'async' from the function body.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_ASYNC_RETURN_TYPE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the illegal character
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+illegalCharacter = DiagnosticWithArguments(
+  name: 'ILLEGAL_CHARACTER',
+  problemMessage: "Illegal character '{0}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'ILLEGAL_CHARACTER',
+  withArguments: _withArgumentsIllegalCharacter,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of member that cannot be declared
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+illegalConcreteEnumMemberDeclaration = DiagnosticWithArguments(
+  name: 'ILLEGAL_CONCRETE_ENUM_MEMBER',
+  problemMessage:
+      "A concrete instance member named '{0}' can't be declared in a class that "
+      "implements 'Enum'.",
+  correctionMessage: "Try using a different name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION',
+  withArguments: _withArgumentsIllegalConcreteEnumMemberDeclaration,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of member that cannot be inherited
+/// String p1: the name of the class that declares the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+illegalConcreteEnumMemberInheritance = DiagnosticWithArguments(
+  name: 'ILLEGAL_CONCRETE_ENUM_MEMBER',
+  problemMessage:
+      "A concrete instance member named '{0}' can't be inherited from '{1}' in a "
+      "class that implements 'Enum'.",
+  correctionMessage: "Try using a different name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE',
+  withArguments: _withArgumentsIllegalConcreteEnumMemberInheritance,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments illegalEnumValuesDeclaration =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'ILLEGAL_ENUM_VALUES',
+      problemMessage:
+          "An instance member named 'values' can't be declared in a class that "
+          "implements 'Enum'.",
+      correctionMessage: "Try using a different name.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'ILLEGAL_ENUM_VALUES_DECLARATION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the class that declares 'values'
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+illegalEnumValuesInheritance = DiagnosticWithArguments(
+  name: 'ILLEGAL_ENUM_VALUES',
+  problemMessage:
+      "An instance member named 'values' can't be inherited from '{0}' in a "
+      "class that implements 'Enum'.",
+  correctionMessage: "Try using a different name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_ENUM_VALUES_INHERITANCE',
+  withArguments: _withArgumentsIllegalEnumValuesInheritance,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the required language version
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+illegalLanguageVersionOverride = DiagnosticWithArguments(
+  name: 'ILLEGAL_LANGUAGE_VERSION_OVERRIDE',
+  problemMessage: "The language version must be {0}.",
+  correctionMessage:
+      "Try removing the language version override and migrating the code.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_LANGUAGE_VERSION_OVERRIDE',
+  withArguments: _withArgumentsIllegalLanguageVersionOverride,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// 0: the illegal name
+///
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode illegalPatternAssignmentVariableName =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'ILLEGAL_PATTERN_ASSIGNMENT_VARIABLE_NAME',
+      problemMessage:
+          "A variable assigned by a pattern assignment can't be named '{0}'.",
+      correctionMessage: "Choose a different name.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ILLEGAL_PATTERN_ASSIGNMENT_VARIABLE_NAME',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// Parameters:
+/// 0: the illegal name
+///
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode illegalPatternIdentifierName =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'ILLEGAL_PATTERN_IDENTIFIER_NAME',
+      problemMessage: "A pattern can't refer to an identifier named '{0}'.",
+      correctionMessage: "Match the identifier using '==",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ILLEGAL_PATTERN_IDENTIFIER_NAME',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// Parameters:
+/// 0: the illegal name
+///
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode illegalPatternVariableName =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'ILLEGAL_PATTERN_VARIABLE_NAME',
+      problemMessage:
+          "The variable declared by a variable pattern can't be named '{0}'.",
+      correctionMessage: "Choose a different name.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'ILLEGAL_PATTERN_VARIABLE_NAME',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+illegalSyncGeneratorReturnType = DiagnosticWithoutArgumentsImpl(
+  name: '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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ILLEGAL_SYNC_GENERATOR_RETURN_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments implementsBeforeExtends =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'IMPLEMENTS_BEFORE_EXTENDS',
+      problemMessage:
+          "The extends clause must be before the implements clause.",
+      correctionMessage:
+          "Try moving the extends clause before the implements clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'IMPLEMENTS_BEFORE_EXTENDS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments implementsBeforeOn =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'IMPLEMENTS_BEFORE_ON',
+      problemMessage: "The on clause must be before the implements clause.",
+      correctionMessage:
+          "Try moving the on clause before the implements clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'IMPLEMENTS_BEFORE_ON',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments implementsBeforeWith =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'IMPLEMENTS_BEFORE_WITH',
+      problemMessage: "The with clause must be before the implements clause.",
+      correctionMessage:
+          "Try moving the with clause before the implements clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'IMPLEMENTS_BEFORE_WITH',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments implementsDeferredClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUBTYPE_OF_DEFERRED_CLASS',
+      problemMessage: "Classes and mixins can't implement deferred classes.",
+      correctionMessage:
+          "Try specifying a different interface, removing the class from the "
+          "list, or changing the import to not be deferred.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'IMPLEMENTS_DEFERRED_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the disallowed type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+implementsDisallowedClass = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_DISALLOWED_TYPE',
+  problemMessage: "Classes and mixins can't implement '{0}'.",
+  correctionMessage:
+      "Try specifying a different interface, or remove the class from the "
+      "list.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPLEMENTS_DISALLOWED_CLASS',
+  withArguments: _withArgumentsImplementsDisallowedClass,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments implementsNonClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'IMPLEMENTS_NON_CLASS',
+      problemMessage:
+          "Classes and mixins can only implement other classes and mixins.",
+      correctionMessage:
+          "Try specifying a class or mixin, or remove the name from the list.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'IMPLEMENTS_NON_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the interface that is implemented more than once
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+implementsRepeated = DiagnosticWithArguments(
+  name: 'IMPLEMENTS_REPEATED',
+  problemMessage: "'{0}' can only be implemented once.",
+  correctionMessage: "Try removing all but one occurrence of the class name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPLEMENTS_REPEATED',
+  withArguments: _withArgumentsImplementsRepeated,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Element p0: the name of the class that appears in both "extends" and
+///             "implements" clauses
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Element p0})
+>
+implementsSuperClass = DiagnosticWithArguments(
+  name: 'IMPLEMENTS_SUPER_CLASS',
+  problemMessage:
+      "'{0}' can't be used in both the 'extends' and 'implements' clauses.",
+  correctionMessage: "Try removing one of the occurrences.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPLEMENTS_SUPER_CLASS',
+  withArguments: _withArgumentsImplementsSuperClass,
+  expectedTypes: [ExpectedType.element],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments implementsTypeAliasExpandsToTypeParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
+      problemMessage:
+          "A type alias that expands to a type parameter can't be implemented.",
+      correctionMessage:
+          "Try specifying a class or mixin, or removing the list.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the superclass
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+implicitSuperInitializerMissingArguments = DiagnosticWithArguments(
+  name: 'IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS',
+  problemMessage:
+      "The implicitly invoked unnamed constructor from '{0}' has required "
+      "parameters.",
+  correctionMessage:
+      "Try adding an explicit super parameter with the required arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS',
+  withArguments: _withArgumentsImplicitSuperInitializerMissingArguments,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the instance member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+implicitThisReferenceInInitializer = DiagnosticWithArguments(
+  name: 'IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
+  problemMessage:
+      "The instance member '{0}' can't be accessed in an initializer.",
+  correctionMessage:
+      "Try replacing the reference to the instance member with a different "
+      "expression",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
+  withArguments: _withArgumentsImplicitThisReferenceInInitializer,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+importDeferredLibraryWithLoadFunction = DiagnosticWithoutArgumentsImpl(
+  name: 'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
+  problemMessage:
+      "The imported library defines a top-level function named 'loadLibrary' "
+      "that is hidden by deferring this library.",
+  correctionMessage:
+      "Try changing the import to not be deferred, or rename the function in "
+      "the imported library.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.HINT,
+  uniqueName: 'IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments importDirectiveAfterPartDirective =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+      problemMessage: "Import directives must precede part directives.",
+      correctionMessage:
+          "Try moving the import directives before the part directives.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the URI pointing to a library
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+importInternalLibrary = DiagnosticWithArguments(
+  name: 'IMPORT_INTERNAL_LIBRARY',
+  problemMessage: "The library '{0}' is internal and can't be imported.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPORT_INTERNAL_LIBRARY',
+  withArguments: _withArgumentsImportInternalLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the URI pointing to a non-library declaration
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+importOfNonLibrary = DiagnosticWithArguments(
+  name: 'IMPORT_OF_NON_LIBRARY',
+  problemMessage: "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,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'IMPORT_OF_NON_LIBRARY',
+  withArguments: _withArgumentsImportOfNonLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// An error code indicating that there is a syntactic error in the included
+/// file.
+///
+/// Parameters:
+/// Object p0: the path of the file containing the error
+/// Object p1: the starting offset of the text in the file that contains the
+///            error
+/// Object p2: the ending offset of the text in the file that contains the
+///            error
+/// Object p3: the error message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+  })
+>
+includedFileParseError = DiagnosticWithArguments(
+  name: 'INCLUDED_FILE_PARSE_ERROR',
+  problemMessage: "{3} in {0}({1}..{2})",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INCLUDED_FILE_PARSE_ERROR',
+  withArguments: _withArgumentsIncludedFileParseError,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// An error code indicating a specified include file has a warning.
+///
+/// Parameters:
+/// Object p0: the path of the file containing the warnings
+/// Object p1: the starting offset of the text in the file that contains the
+///            warning
+/// Object p2: the ending offset of the text in the file that contains the
+///            warning
+/// Object p3: the warning message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+  })
+>
+includedFileWarning = DiagnosticWithArguments(
+  name: 'INCLUDED_FILE_WARNING',
+  problemMessage: "Warning in the included options file {0}({1}..{2}): {3}",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INCLUDED_FILE_WARNING',
+  withArguments: _withArgumentsIncludedFileWarning,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// An error code indicating a specified include file could not be found.
+///
+/// Parameters:
+/// Object p0: the URI of the file to be included
+/// Object p1: the path of the file containing the include directive
+/// Object p2: the path of the context being analyzed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+includeFileNotFound = DiagnosticWithArguments(
+  name: 'INCLUDE_FILE_NOT_FOUND',
+  problemMessage:
+      "The include file '{0}' in '{1}' can't be found when analyzing '{2}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INCLUDE_FILE_NOT_FOUND',
+  withArguments: _withArgumentsIncludeFileNotFound,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// An error code indicating an incompatible rule.
+///
+/// The incompatible rules must be included by context messages.
+///
+/// Parameters:
+/// String p0: the rule name
+/// String p1: the incompatible rules
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+incompatibleLint = DiagnosticWithArguments(
+  name: 'INCOMPATIBLE_LINT',
+  problemMessage: "The rule '{0}' is incompatible with {1}.",
+  correctionMessage: "Try removing all but one of the incompatible rules.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INCOMPATIBLE_LINT',
+  withArguments: _withArgumentsIncompatibleLint,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// An error code indicating an incompatible rule.
+///
+/// The files that enable the referenced rules must be included by context messages.
+///
+/// Parameters:
+/// String p0: the rule name
+/// String p1: the incompatible rules
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+incompatibleLintFiles = DiagnosticWithArguments(
+  name: 'INCOMPATIBLE_LINT',
+  problemMessage: "The rule '{0}' is incompatible with {1}.",
+  correctionMessage:
+      "Try locally disabling all but one of the conflicting rules or "
+      "removing one of the incompatible files.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INCOMPATIBLE_LINT_FILES',
+  withArguments: _withArgumentsIncompatibleLintFiles,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// An error code indicating an incompatible rule.
+///
+/// Parameters:
+/// String p0: the rule name
+/// String p1: the incompatible rules
+/// int p2: the number of files that include the incompatible rule
+/// String p3: plural suffix for the word "file"
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required int p2,
+    required String p3,
+  })
+>
+incompatibleLintIncluded = DiagnosticWithArguments(
+  name: 'INCOMPATIBLE_LINT',
+  problemMessage:
+      "The rule '{0}' is incompatible with {1}, which is included from {2} "
+      "file{3}.",
+  correctionMessage:
+      "Try locally disabling all but one of the conflicting rules or "
+      "removing one of the incompatible files.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INCOMPATIBLE_LINT_INCLUDED',
+  withArguments: _withArgumentsIncompatibleLintIncluded,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.int,
+    ExpectedType.string,
+  ],
+);
+
+/// 13.9 Switch: It is a compile-time error if values of the expressions
+/// <i>e<sub>k</sub></i> are not instances of the same class <i>C</i>, for all
+/// <i>1 &lt;= k &lt;= n</i>.
+///
+/// Parameters:
+/// Object p0: the expression source code that is the unexpected type
+/// Object p1: the name of the expected type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+inconsistentCaseExpressionTypes = DiagnosticWithArguments(
+  name: 'INCONSISTENT_CASE_EXPRESSION_TYPES',
+  problemMessage:
+      "Case expressions must have the same types, '{0}' isn't a '{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INCONSISTENT_CASE_EXPRESSION_TYPES',
+  withArguments: _withArgumentsInconsistentCaseExpressionTypes,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the instance member with inconsistent inheritance.
+/// String p1: the list of all inherited signatures for this member.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+inconsistentInheritance = DiagnosticWithArguments(
+  name: 'INCONSISTENT_INHERITANCE',
+  problemMessage: "Superinterfaces don't have a valid override for '{0}': {1}.",
+  correctionMessage:
+      "Try adding an explicit override that is consistent with all of the "
+      "inherited members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INCONSISTENT_INHERITANCE',
+  withArguments: _withArgumentsInconsistentInheritance,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// 11.1.1 Inheritance and Overriding. Let `I` be the implicit interface of a
+/// class `C` declared in library `L`. `I` inherits all members of
+/// `inherited(I, L)` and `I` overrides `m'` if `m' ∈ overrides(I, L)`. It is
+/// a compile-time error if `m` is a method and `m'` is a getter, or if `m`
+/// is a getter and `m'` is a method.
+///
+/// Parameters:
+/// String p0: the name of the instance member with inconsistent inheritance.
+/// String p1: the name of the superinterface that declares the name as a
+///            getter.
+/// String p2: the name of the superinterface that declares the name as a
+///            method.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+inconsistentInheritanceGetterAndMethod = DiagnosticWithArguments(
+  name: 'INCONSISTENT_INHERITANCE_GETTER_AND_METHOD',
+  problemMessage:
+      "'{0}' is inherited as a getter (from '{1}') and also a method (from "
+      "'{2}').",
+  correctionMessage:
+      "Try adjusting the supertypes of this class to remove the "
+      "inconsistency.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INCONSISTENT_INHERITANCE_GETTER_AND_METHOD',
+  withArguments: _withArgumentsInconsistentInheritanceGetterAndMethod,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments inconsistentLanguageVersionOverride =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INCONSISTENT_LANGUAGE_VERSION_OVERRIDE',
+      problemMessage:
+          "Parts must have exactly the same language version override as the "
+          "library.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INCONSISTENT_LANGUAGE_VERSION_OVERRIDE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the pattern variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inconsistentPatternVariableLogicalOr = DiagnosticWithArguments(
+  name: 'INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR',
+  problemMessage:
+      "The variable '{0}' has a different type and/or finality in this branch of "
+      "the logical-or pattern.",
+  correctionMessage:
+      "Try declaring the variable pattern with the same type and finality in "
+      "both branches.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR',
+  withArguments: _withArgumentsInconsistentPatternVariableLogicalOr,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" is enabled, collection literal types must be
+/// inferred via the context type, or have type arguments.
+///
+/// Parameters:
+/// String p0: the name of the collection
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnCollectionLiteral = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_COLLECTION_LITERAL',
+  problemMessage: "The type argument(s) of '{0}' can't be inferred.",
+  correctionMessage: "Use explicit type argument(s) for '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_COLLECTION_LITERAL',
+  withArguments: _withArgumentsInferenceFailureOnCollectionLiteral,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" is enabled, types in function invocations must be
+/// inferred via the context type, or have type arguments.
+///
+/// Parameters:
+/// String p0: the name of the function
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnFunctionInvocation = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_FUNCTION_INVOCATION',
+  problemMessage:
+      "The type argument(s) of the function '{0}' can't be inferred.",
+  correctionMessage: "Use explicit type argument(s) for '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_FUNCTION_INVOCATION',
+  withArguments: _withArgumentsInferenceFailureOnFunctionInvocation,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" is enabled, recursive local functions, top-level
+/// functions, methods, and function-typed function parameters must all
+/// specify a return type. See the strict-inference resource:
+///
+/// https://github.com/dart-lang/language/blob/master/resources/type-system/strict-inference.md
+///
+/// Parameters:
+/// String p0: the name of the function or method whose return type can't be
+///            inferred
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnFunctionReturnType = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE',
+  problemMessage: "The return type of '{0}' can't be inferred.",
+  correctionMessage: "Declare the return type of '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE',
+  withArguments: _withArgumentsInferenceFailureOnFunctionReturnType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" is enabled, types in function invocations must be
+/// inferred via the context type, or have type arguments.
+///
+/// Parameters:
+/// String p0: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnGenericInvocation = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_GENERIC_INVOCATION',
+  problemMessage:
+      "The type argument(s) of the generic function type '{0}' can't be "
+      "inferred.",
+  correctionMessage: "Use explicit type argument(s) for '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_GENERIC_INVOCATION',
+  withArguments: _withArgumentsInferenceFailureOnGenericInvocation,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" is enabled, types in instance creation
+/// (constructor calls) must be inferred via the context type, or have type
+/// arguments.
+///
+/// Parameters:
+/// String p0: the name of the constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnInstanceCreation = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_INSTANCE_CREATION',
+  problemMessage:
+      "The type argument(s) of the constructor '{0}' can't be inferred.",
+  correctionMessage: "Use explicit type argument(s) for '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_INSTANCE_CREATION',
+  withArguments: _withArgumentsInferenceFailureOnInstanceCreation,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" in enabled, uninitialized variables must be
+/// declared with a specific type.
+///
+/// Parameters:
+/// String p0: the name of the variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnUninitializedVariable = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE',
+  problemMessage:
+      "The type of {0} can't be inferred without either a type or initializer.",
+  correctionMessage: "Try specifying the type of the variable.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE',
+  withArguments: _withArgumentsInferenceFailureOnUninitializedVariable,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// When "strict-inference" in enabled, function parameters must be
+/// declared with a specific type, or inherit a type.
+///
+/// Parameters:
+/// String p0: the name of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+inferenceFailureOnUntypedParameter = DiagnosticWithArguments(
+  name: 'INFERENCE_FAILURE_ON_UNTYPED_PARAMETER',
+  problemMessage:
+      "The type of {0} can't be inferred; a type must be explicitly provided.",
+  correctionMessage: "Try specifying the type of the parameter.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INFERENCE_FAILURE_ON_UNTYPED_PARAMETER',
+  withArguments: _withArgumentsInferenceFailureOnUntypedParameter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments initializedVariableInForEach =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INITIALIZED_VARIABLE_IN_FOR_EACH',
+      problemMessage:
+          "The loop variable in a for-each loop can't be initialized.",
+      correctionMessage:
+          "Try removing the initializer, or using a different kind of loop.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INITIALIZED_VARIABLE_IN_FOR_EACH',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the initializing formal that is not an instance
+///            variable in the immediately enclosing class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+initializerForNonExistentField = DiagnosticWithArguments(
+  name: '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}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INITIALIZER_FOR_NON_EXISTENT_FIELD',
+  withArguments: _withArgumentsInitializerForNonExistentField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the initializing formal that is a static variable
+///            in the immediately enclosing class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+initializerForStaticField = DiagnosticWithArguments(
+  name: 'INITIALIZER_FOR_STATIC_FIELD',
+  problemMessage:
+      "'{0}' is a static field in the enclosing class. Fields initialized in a "
+      "constructor can't be static.",
+  correctionMessage: "Try removing the initialization.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INITIALIZER_FOR_STATIC_FIELD',
+  withArguments: _withArgumentsInitializerForStaticField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the initializing formal that is not an instance
+///            variable in the immediately enclosing class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+initializingFormalForNonExistentField = DiagnosticWithArguments(
+  name: 'INITIALIZING_FORMAL_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}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD',
+  withArguments: _withArgumentsInitializingFormalForNonExistentField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the static member
+/// String p1: the kind of the static member (field, getter, setter, or
+///            method)
+/// String p2: the name of the static member's enclosing element
+/// String p3: the kind of the static member's enclosing element (class,
+///            mixin, or extension)
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+    required String p3,
+  })
+>
+instanceAccessToStaticMember = DiagnosticWithArguments(
+  name: 'INSTANCE_ACCESS_TO_STATIC_MEMBER',
+  problemMessage: "The static {1} '{0}' can't be accessed through an instance.",
+  correctionMessage: "Try using the {3} '{2}' to access the {1}.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INSTANCE_ACCESS_TO_STATIC_MEMBER',
+  withArguments: _withArgumentsInstanceAccessToStaticMember,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// Object p0: the name of the static member
+/// Object p1: the kind of the static member (field, getter, setter, or
+///            method)
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+instanceAccessToStaticMemberOfUnnamedExtension = DiagnosticWithArguments(
+  name: 'INSTANCE_ACCESS_TO_STATIC_MEMBER',
+  problemMessage: "The static {1} '{0}' can't be accessed through an instance.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION',
+  withArguments: _withArgumentsInstanceAccessToStaticMemberOfUnnamedExtension,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments instanceMemberAccessFromFactory =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
+      problemMessage:
+          "Instance members can't be accessed from a factory constructor.",
+      correctionMessage: "Try removing the reference to the instance member.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments instanceMemberAccessFromStatic =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INSTANCE_MEMBER_ACCESS_FROM_STATIC',
+      problemMessage:
+          "Instance members can't be accessed from a static method.",
+      correctionMessage:
+          "Try removing the reference to the instance member, or removing the "
+          "keyword 'static' from the method.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INSTANCE_MEMBER_ACCESS_FROM_STATIC',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments instantiateAbstractClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INSTANTIATE_ABSTRACT_CLASS',
+      problemMessage: "Abstract classes can't be instantiated.",
+      correctionMessage: "Try creating an instance of a concrete subtype.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INSTANTIATE_ABSTRACT_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments instantiateEnum =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INSTANTIATE_ENUM',
+      problemMessage: "Enums can't be instantiated.",
+      correctionMessage: "Try using one of the defined constants.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INSTANTIATE_ENUM',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments instantiateTypeAliasExpandsToTypeParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+      problemMessage:
+          "Type aliases that expand to a type parameter can't be instantiated.",
+      correctionMessage: "Try replacing it with a class.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the lexeme of the integer
+/// String p1: the closest valid double
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+integerLiteralImpreciseAsDouble = DiagnosticWithArguments(
+  name: 'INTEGER_LITERAL_IMPRECISE_AS_DOUBLE',
+  problemMessage:
+      "The integer literal is being used as a double, but can't be represented "
+      "as a 64-bit double without overflow or loss of precision: '{0}'.",
+  correctionMessage:
+      "Try using the class 'BigInt', or switch to the closest valid double: "
+      "'{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INTEGER_LITERAL_IMPRECISE_AS_DOUBLE',
+  withArguments: _withArgumentsIntegerLiteralImpreciseAsDouble,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the value of the literal
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+integerLiteralOutOfRange = DiagnosticWithArguments(
+  name: 'INTEGER_LITERAL_OUT_OF_RANGE',
+  problemMessage: "The integer literal {0} can't be represented in 64 bits.",
+  correctionMessage:
+      "Try using the 'BigInt' class if you need an integer larger than "
+      "9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INTEGER_LITERAL_OUT_OF_RANGE',
+  withArguments: _withArgumentsIntegerLiteralOutOfRange,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the interface class being extended.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+interfaceClassExtendedOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The class '{0}' can't be extended outside of its library because it's an "
+      "interface class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsInterfaceClassExtendedOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments interfaceEnum = DiagnosticWithoutArgumentsImpl(
+  name: 'INTERFACE_ENUM',
+  problemMessage: "Enums can't be declared to be 'interface'.",
+  correctionMessage: "Try removing the keyword 'interface'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INTERFACE_ENUM',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments interfaceMixin =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INTERFACE_MIXIN',
+      problemMessage: "A mixin can't be declared 'interface'.",
+      correctionMessage: "Try removing the 'interface' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INTERFACE_MIXIN',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments interfaceMixinClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INTERFACE_MIXIN_CLASS',
+      problemMessage: "A mixin class can't be declared 'interface'.",
+      correctionMessage: "Try removing the 'interface' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INTERFACE_MIXIN_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_ANNOTATION',
+  problemMessage:
+      "Annotation must be either a const variable reference or const constructor "
+      "invocation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidAnnotationConstantValueFromDeferredLibrary =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
+      problemMessage:
+          "Constant values from a deferred library can't be used in annotations.",
+      correctionMessage:
+          "Try moving the constant from the deferred library, or removing "
+          "'deferred' from the import.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidAnnotationFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as annotations.",
+  correctionMessage:
+      "Try removing the annotation, or changing the import to not be "
+      "deferred.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the annotation
+/// String p1: the list of valid targets
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidAnnotationTarget = DiagnosticWithArguments(
+  name: 'INVALID_ANNOTATION_TARGET',
+  problemMessage: "The annotation '{0}' can only be used on {1}.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_ANNOTATION_TARGET',
+  withArguments: _withArgumentsInvalidAnnotationTarget,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the name of the right hand side type
+/// Type p1: the name of the left hand side type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+invalidAssignment = DiagnosticWithArguments(
+  name: 'INVALID_ASSIGNMENT',
+  problemMessage:
+      "A value of type '{0}' can't be assigned to a variable of type '{1}'.",
+  correctionMessage:
+      "Try changing the type of the variable, or casting the right-hand type "
+      "to '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_ASSIGNMENT',
+  withArguments: _withArgumentsInvalidAssignment,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidAwaitInFor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_AWAIT_IN_FOR',
+      problemMessage:
+          "The keyword 'await' isn't allowed for a normal 'for' statement.",
+      correctionMessage:
+          "Try removing the keyword, or use a for-each statement.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_AWAIT_IN_FOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidAwaitNotRequiredAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_AWAIT_NOT_REQUIRED_ANNOTATION',
+      problemMessage:
+          "The annotation 'awaitNotRequired' can only be applied to a "
+          "Future-returning function, or a Future-typed field.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_AWAIT_NOT_REQUIRED_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the name of the function
+/// Object p1: the type of the function
+/// Object p2: the expected function type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+invalidCastFunction = DiagnosticWithArguments(
+  name: 'INVALID_CAST_FUNCTION',
+  problemMessage:
+      "The function '{0}' has type '{1}' that isn't of expected type '{2}'. This "
+      "means its parameter or return type doesn't match what is expected.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_FUNCTION',
+  withArguments: _withArgumentsInvalidCastFunction,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the type of the torn-off function expression
+/// Object p1: the expected function type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidCastFunctionExpr = DiagnosticWithArguments(
+  name: 'INVALID_CAST_FUNCTION_EXPR',
+  problemMessage:
+      "The function expression type '{0}' isn't of type '{1}'. This means its "
+      "parameter or return type doesn't match what is expected. Consider "
+      "changing parameter type(s) or the returned type(s).",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_FUNCTION_EXPR',
+  withArguments: _withArgumentsInvalidCastFunctionExpr,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the lexeme of the literal
+/// Object p1: the type of the literal
+/// Object p2: the expected type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+invalidCastLiteral = DiagnosticWithArguments(
+  name: 'INVALID_CAST_LITERAL',
+  problemMessage:
+      "The literal '{0}' with type '{1}' isn't of expected type '{2}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_LITERAL',
+  withArguments: _withArgumentsInvalidCastLiteral,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the type of the list literal
+/// Object p1: the expected type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidCastLiteralList = DiagnosticWithArguments(
+  name: 'INVALID_CAST_LITERAL_LIST',
+  problemMessage:
+      "The list literal type '{0}' isn't of expected type '{1}'. The list's type "
+      "can be changed with an explicit generic type argument or by changing "
+      "the element types.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_LITERAL_LIST',
+  withArguments: _withArgumentsInvalidCastLiteralList,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the type of the map literal
+/// Object p1: the expected type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidCastLiteralMap = DiagnosticWithArguments(
+  name: 'INVALID_CAST_LITERAL_MAP',
+  problemMessage:
+      "The map literal type '{0}' isn't of expected type '{1}'. The map's type "
+      "can be changed with an explicit generic type arguments or by changing "
+      "the key and value types.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_LITERAL_MAP',
+  withArguments: _withArgumentsInvalidCastLiteralMap,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the type of the set literal
+/// Object p1: the expected type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidCastLiteralSet = DiagnosticWithArguments(
+  name: 'INVALID_CAST_LITERAL_SET',
+  problemMessage:
+      "The set literal type '{0}' isn't of expected type '{1}'. The set's type "
+      "can be changed with an explicit generic type argument or by changing "
+      "the element types.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_LITERAL_SET',
+  withArguments: _withArgumentsInvalidCastLiteralSet,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the name of the torn-off method
+/// Object p1: the type of the torn-off method
+/// Object p2: the expected function type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+invalidCastMethod = DiagnosticWithArguments(
+  name: 'INVALID_CAST_METHOD',
+  problemMessage:
+      "The method tear-off '{0}' has type '{1}' that isn't of expected type "
+      "'{2}'. This means its parameter or return type doesn't match what is "
+      "expected.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_METHOD',
+  withArguments: _withArgumentsInvalidCastMethod,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// This error is only reported in libraries which are not null safe.
+///
+/// Parameters:
+/// Object p0: the type of the instantiated object
+/// Object p1: the expected type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidCastNewExpr = DiagnosticWithArguments(
+  name: 'INVALID_CAST_NEW_EXPR',
+  problemMessage:
+      "The constructor returns type '{0}' that isn't of expected type '{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_CAST_NEW_EXPR',
+  withArguments: _withArgumentsInvalidCastNewExpr,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the invalid escape sequence
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidCodePoint = DiagnosticWithArguments(
+  name: 'INVALID_CODE_POINT',
+  problemMessage: "The escape sequence '{0}' isn't a valid code point.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_CODE_POINT',
+  withArguments: _withArgumentsInvalidCodePoint,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidCommentReference = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_COMMENT_REFERENCE',
+  problemMessage:
+      "Comment references should contain a possibly prefixed identifier and can "
+      "start with 'new', but shouldn't contain anything else.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_COMMENT_REFERENCE',
+  expectedTypes: [],
+);
+
+/// TODO(brianwilkerson): Remove this when we have decided on how to report
+/// errors in compile-time constants. Until then, this acts as a placeholder
+/// for more informative errors.
+///
+/// See TODOs in ConstantVisitor
+///
+/// No parameters.
+const DiagnosticWithoutArguments invalidConstant =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_CONSTANT',
+      problemMessage: "Invalid constant value.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_CONSTANT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidConstantConstPrefix = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_CONSTANT_CONST_PREFIX',
+  problemMessage:
+      "The expression can't be prefixed by 'const' to form a constant pattern.",
+  correctionMessage: "Try wrapping the expression in 'const ( ... )' instead.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_CONSTANT_CONST_PREFIX',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Name name: undocumented
+const DiagnosticCode invalidConstantPatternBinary =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'INVALID_CONSTANT_PATTERN_BINARY',
+      problemMessage:
+          "The binary operator {0} is not supported as a constant pattern.",
+      correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_CONSTANT_PATTERN_BINARY',
+      expectedTypes: [ExpectedType.name],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidConstantPatternDuplicateConst =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_CONSTANT_PATTERN_DUPLICATE_CONST',
+      problemMessage: "Duplicate 'const' keyword in constant expression.",
+      correctionMessage: "Try removing one of the 'const' keywords.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_CONSTANT_PATTERN_DUPLICATE_CONST',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidConstantPatternEmptyRecordLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL',
+      problemMessage:
+          "The empty record literal is not supported as a constant pattern.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_CONSTANT_PATTERN_EMPTY_RECORD_LITERAL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidConstantPatternGeneric =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_CONSTANT_PATTERN_GENERIC',
+      problemMessage: "This expression is not supported as a constant pattern.",
+      correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_CONSTANT_PATTERN_GENERIC',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidConstantPatternNegation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_CONSTANT_PATTERN_NEGATION',
+  problemMessage:
+      "Only negation of a numeric literal is supported as a constant pattern.",
+  correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_CONSTANT_PATTERN_NEGATION',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Name name: undocumented
+const DiagnosticCode invalidConstantPatternUnary =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'INVALID_CONSTANT_PATTERN_UNARY',
+      problemMessage:
+          "The unary operator {0} is not supported as a constant pattern.",
+      correctionMessage: "Try wrapping the expression in 'const ( ... )'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_CONSTANT_PATTERN_UNARY',
+      expectedTypes: [ExpectedType.name],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidConstructorName = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_CONSTRUCTOR_NAME',
+  problemMessage:
+      "The name of a constructor must match the name of the enclosing class.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_CONSTRUCTOR_NAME',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the kind of dependency.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidDependency = DiagnosticWithArguments(
+  name: 'INVALID_DEPENDENCY',
+  problemMessage: "Publishable packages can't have '{0}' dependencies.",
+  correctionMessage:
+      "Try adding a 'publish_to: none' entry to mark the package as not for "
+      "publishing or remove the {0} dependency.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_DEPENDENCY',
+  withArguments: _withArgumentsInvalidDependency,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidDeprecatedExtendAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_DEPRECATED_EXTEND_ANNOTATION',
+  problemMessage:
+      "The annotation '@Deprecated.extend' can only be applied to extendable "
+      "classes.",
+  correctionMessage: "Try removing the '@Deprecated.extend' annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_DEPRECATED_EXTEND_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidDeprecatedImplementAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_DEPRECATED_IMPLEMENT_ANNOTATION',
+      problemMessage:
+          "The annotation '@Deprecated.implement' can only be applied to "
+          "implementable classes.",
+      correctionMessage: "Try removing the '@Deprecated.implement' annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_DEPRECATED_IMPLEMENT_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidDeprecatedInstantiateAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_DEPRECATED_INSTANTIATE_ANNOTATION',
+  problemMessage:
+      "The annotation '@Deprecated.instantiate' can only be applied to classes.",
+  correctionMessage: "Try removing the '@Deprecated.instantiate' annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_DEPRECATED_INSTANTIATE_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// This warning is generated anywhere where `@Deprecated.mixin` annotates
+/// something other than a mixin class.
+///
+/// No parameters.
+const DiagnosticWithoutArguments invalidDeprecatedMixinAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_DEPRECATED_MIXIN_ANNOTATION',
+      problemMessage:
+          "The annotation '@Deprecated.mixin' can only be applied to classes.",
+      correctionMessage: "Try removing the '@Deprecated.mixin' annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_DEPRECATED_MIXIN_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// This warning is generated anywhere where `@Deprecated.optional`
+/// annotates something other than an optional parameter.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidDeprecatedOptionalAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_DEPRECATED_OPTIONAL_ANNOTATION',
+  problemMessage:
+      "The annotation '@Deprecated.optional' can only be applied to optional "
+      "parameters.",
+  correctionMessage: "Try removing the '@Deprecated.optional' annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_DEPRECATED_OPTIONAL_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidDeprecatedSubclassAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_DEPRECATED_SUBCLASS_ANNOTATION',
+  problemMessage:
+      "The annotation '@Deprecated.subclass' can only be applied to subclassable "
+      "classes and mixins.",
+  correctionMessage: "Try removing the '@Deprecated.subclass' annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_DEPRECATED_SUBCLASS_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidExceptionValue = DiagnosticWithArguments(
+  name: 'INVALID_EXCEPTION_VALUE',
+  problemMessage:
+      "The method {0} 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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_EXCEPTION_VALUE',
+  withArguments: _withArgumentsInvalidExceptionValue,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidExportOfInternalElement = DiagnosticWithArguments(
+  name: '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}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_EXPORT_OF_INTERNAL_ELEMENT',
+  withArguments: _withArgumentsInvalidExportOfInternalElement,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the internal element
+/// String p1: the name of the exported element that indirectly exposes the
+///            internal element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidExportOfInternalElementIndirectly = DiagnosticWithArguments(
+  name: '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}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY',
+  withArguments: _withArgumentsInvalidExportOfInternalElementIndirectly,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidExtensionArgumentCount = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_EXTENSION_ARGUMENT_COUNT',
+  problemMessage:
+      "Extension overrides must have exactly one argument: the value of 'this' "
+      "in the extension method.",
+  correctionMessage: "Try specifying exactly one argument.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_EXTENSION_ARGUMENT_COUNT',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: The name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidFactoryMethodDecl = DiagnosticWithArguments(
+  name: 'INVALID_FACTORY_METHOD_DECL',
+  problemMessage: "Factory method '{0}' must have a return type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_FACTORY_METHOD_DECL',
+  withArguments: _withArgumentsInvalidFactoryMethodDecl,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidFactoryMethodImpl = DiagnosticWithArguments(
+  name: 'INVALID_FACTORY_METHOD_IMPL',
+  problemMessage:
+      "Factory method '{0}' doesn't return a newly allocated object.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_FACTORY_METHOD_IMPL',
+  withArguments: _withArgumentsInvalidFactoryMethodImpl,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidFactoryNameNotAClass = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_FACTORY_NAME_NOT_A_CLASS',
+  problemMessage:
+      "The name of a factory constructor must be the same as the name of the "
+      "immediately enclosing class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_FACTORY_NAME_NOT_A_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidFieldNameFromObject =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_FIELD_NAME',
+      problemMessage:
+          "Record field names can't be the same as a member from 'Object'.",
+      correctionMessage: "Try using a different name for the field.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_FIELD_NAME_FROM_OBJECT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidFieldNamePositional = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_FIELD_NAME',
+  problemMessage:
+      "Record field names can't be a dollar sign followed by an integer when the "
+      "integer is the index of a positional field.",
+  correctionMessage: "Try using a different name for the field.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_FIELD_NAME_POSITIONAL',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidFieldNamePrivate =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_FIELD_NAME',
+      problemMessage: "Record field names can't be private.",
+      correctionMessage: "Try removing the leading underscore.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_FIELD_NAME_PRIVATE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the type of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidFieldTypeInStruct = DiagnosticWithArguments(
+  name: 'INVALID_FIELD_TYPE_IN_STRUCT',
+  problemMessage:
+      "Fields in struct classes can't have the type '{0}'. They can only be "
+      "declared as 'int', 'double', 'Array', 'Pointer', or subtype of "
+      "'Struct' or 'Union'.",
+  correctionMessage:
+      "Try using 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' "
+      "or 'Union'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_FIELD_TYPE_IN_STRUCT',
+  withArguments: _withArgumentsInvalidFieldTypeInStruct,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidGenericFunctionType = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_GENERIC_FUNCTION_TYPE',
+  problemMessage: "Invalid generic function type.",
+  correctionMessage:
+      "Try using a generic function type (returnType 'Function(' parameters "
+      "')').",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_GENERIC_FUNCTION_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidHexEscape = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_HEX_ESCAPE',
+  problemMessage:
+      "An escape sequence starting with '\\x' must be followed by 2 hexadecimal "
+      "digits.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_HEX_ESCAPE',
+  expectedTypes: [],
+);
+
+/// The parameters of this error code must be kept in sync with those of
+/// [diag.invalidOverride].
+///
+/// Parameters:
+/// Object p0: the name of the declared member that is not a valid override.
+/// Object p1: the name of the interface that declares the member.
+/// Object p2: the type of the declared member in the interface.
+/// Object p3: the name of the interface with the overridden member.
+/// Object p4: the type of the overridden member.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+    required Object p4,
+  })
+>
+invalidImplementationOverride = DiagnosticWithArguments(
+  name: 'INVALID_IMPLEMENTATION_OVERRIDE',
+  problemMessage:
+      "'{1}.{0}' ('{2}') isn't a valid concrete implementation of '{3}.{0}' "
+      "('{4}').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_IMPLEMENTATION_OVERRIDE',
+  withArguments: _withArgumentsInvalidImplementationOverride,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// The parameters of this error code must be kept in sync with those of
+/// [diag.invalidOverride].
+///
+/// Parameters:
+/// Object p0: the name of the declared setter that is not a valid override.
+/// Object p1: the name of the interface that declares the setter.
+/// Object p2: the type of the declared setter in the interface.
+/// Object p3: the name of the interface with the overridden setter.
+/// Object p4: the type of the overridden setter.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+    required Object p4,
+  })
+>
+invalidImplementationOverrideSetter = DiagnosticWithArguments(
+  name: 'INVALID_IMPLEMENTATION_OVERRIDE',
+  problemMessage:
+      "The setter '{1}.{0}' ('{2}') isn't a valid concrete implementation of "
+      "'{3}.{0}' ('{4}').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_IMPLEMENTATION_OVERRIDE_SETTER',
+  withArguments: _withArgumentsInvalidImplementationOverrideSetter,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_INITIALIZER',
+      problemMessage: "Not a valid initializer.",
+      correctionMessage:
+          "To initialize a field, use the syntax 'name = value'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidInlineFunctionType = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_INLINE_FUNCTION_TYPE',
+  problemMessage:
+      "Inline function types can't be used for parameters in a generic function "
+      "type.",
+  correctionMessage:
+      "Try using a generic function type (returnType 'Function(' parameters "
+      "')').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_INLINE_FUNCTION_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidInsideUnaryPattern = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_INSIDE_UNARY_PATTERN',
+  problemMessage:
+      "This pattern cannot appear inside a unary pattern (cast pattern, null "
+      "check pattern, or null assert pattern) without parentheses.",
+  correctionMessage:
+      "Try combining into a single pattern if possible, or enclose the inner "
+      "pattern in parentheses.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_INSIDE_UNARY_PATTERN',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidInternalAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_INTERNAL_ANNOTATION',
+  problemMessage:
+      "Only public elements in a package's private API can be annotated as being "
+      "internal.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_INTERNAL_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidLanguageVersionOverrideAtSign =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+      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'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidLanguageVersionOverrideEquals = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+  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'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the latest major version
+/// Object p1: the latest minor version
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidLanguageVersionOverrideGreater = DiagnosticWithArguments(
+  name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+  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,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
+  withArguments: _withArgumentsInvalidLanguageVersionOverrideGreater,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidLanguageVersionOverrideLocation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+  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,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidLanguageVersionOverrideLowerCase = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+  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'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidLanguageVersionOverrideNumber =
+    DiagnosticWithoutArgumentsImpl(
+      name: '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'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidLanguageVersionOverridePrefix =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+      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'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidLanguageVersionOverrideTrailingCharacters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+      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'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidLanguageVersionOverrideTwoSlashes = DiagnosticWithoutArgumentsImpl(
+  name: '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'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidLiteralAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_LITERAL_ANNOTATION',
+      problemMessage:
+          "Only const constructors can have the `@literal` annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_LITERAL_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidLiteralInConfiguration =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_LITERAL_IN_CONFIGURATION',
+      problemMessage:
+          "The literal in a configuration can't contain interpolation.",
+      correctionMessage: "Try removing the interpolation expressions.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_LITERAL_IN_CONFIGURATION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the invalid modifier
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidModifierOnConstructor = DiagnosticWithArguments(
+  name: 'INVALID_MODIFIER_ON_CONSTRUCTOR',
+  problemMessage:
+      "The modifier '{0}' can't be applied to the body of a constructor.",
+  correctionMessage: "Try removing the modifier.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_MODIFIER_ON_CONSTRUCTOR',
+  withArguments: _withArgumentsInvalidModifierOnConstructor,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidModifierOnSetter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_MODIFIER_ON_SETTER',
+      problemMessage: "Setters can't use 'async', 'async*', or 'sync*'.",
+      correctionMessage: "Try removing the modifier.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_MODIFIER_ON_SETTER',
+      expectedTypes: [],
+    );
+
+/// This warning is generated anywhere where `@nonVirtual` annotates something
+/// other than a non-abstract instance member in a class or mixin.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidNonVirtualAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_NON_VIRTUAL_ANNOTATION',
+  problemMessage:
+      "The annotation '@nonVirtual' can only be applied to a concrete instance "
+      "member.",
+  correctionMessage: "Try removing '@nonVirtual'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_NON_VIRTUAL_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidNullAwareElement = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_NULL_AWARE_OPERATOR',
+  problemMessage:
+      "The element can't be null, so the null-aware operator '?' is unnecessary.",
+  correctionMessage: "Try removing the operator '?'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_NULL_AWARE_ELEMENT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidNullAwareMapEntryKey =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_NULL_AWARE_OPERATOR',
+      problemMessage:
+          "The map entry key can't be null, so the null-aware operator '?' is "
+          "unnecessary.",
+      correctionMessage: "Try removing the operator '?'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_NULL_AWARE_MAP_ENTRY_KEY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidNullAwareMapEntryValue = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_NULL_AWARE_OPERATOR',
+  problemMessage:
+      "The map entry value can't be null, so the null-aware operator '?' is "
+      "unnecessary.",
+  correctionMessage: "Try removing the operator '?'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_NULL_AWARE_MAP_ENTRY_VALUE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the null-aware operator that is invalid
+/// String p1: the non-null-aware operator that can replace the invalid
+///            operator
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidNullAwareOperator = DiagnosticWithArguments(
+  name: 'INVALID_NULL_AWARE_OPERATOR',
+  problemMessage:
+      "The receiver can't be null, so the null-aware operator '{0}' is "
+      "unnecessary.",
+  correctionMessage: "Try replacing the operator '{0}' with '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_NULL_AWARE_OPERATOR',
+  withArguments: _withArgumentsInvalidNullAwareOperator,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the null-aware operator that is invalid
+/// Object p1: the non-null-aware operator that can replace the invalid
+///            operator
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidNullAwareOperatorAfterShortCircuit = DiagnosticWithArguments(
+  name: 'INVALID_NULL_AWARE_OPERATOR',
+  problemMessage:
+      "The receiver can't be 'null' because of short-circuiting, so the "
+      "null-aware operator '{0}' can't be used.",
+  correctionMessage: "Try replacing the operator '{0}' with '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT',
+  withArguments: _withArgumentsInvalidNullAwareOperatorAfterShortCircuit,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// 0: the operator that is invalid
+///
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode invalidOperator = DiagnosticCodeWithExpectedTypes(
+  name: 'INVALID_OPERATOR',
+  problemMessage: "The string '{0}' isn't a user-definable operator.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_OPERATOR',
+  expectedTypes: [ExpectedType.token],
+);
+
+/// Only generated by the old parser.
+/// Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
+///
+/// Parameters:
+/// Object p0: the operator being applied to 'super'
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+invalidOperatorForSuper = DiagnosticWithArguments(
+  name: 'INVALID_OPERATOR_FOR_SUPER',
+  problemMessage: "The operator '{0}' can't be used with 'super'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_OPERATOR_FOR_SUPER',
+  withArguments: _withArgumentsInvalidOperatorForSuper,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidOperatorQuestionmarkPeriodForSuper = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
+  problemMessage:
+      "The operator '?.' cannot be used with 'super' because 'super' cannot be "
+      "null.",
+  correctionMessage: "Try replacing '?.' with '.'",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER',
+  expectedTypes: [],
+);
+
+/// An error code indicating that a plugin is being configured with an invalid
+/// value for an option and a detail message is provided.
+///
+/// Parameters:
+/// String p0: the option name
+/// String p1: the detail message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidOption = DiagnosticWithArguments(
+  name: 'INVALID_OPTION',
+  problemMessage: "Invalid option specified for '{0}': {1}",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_OPTION',
+  withArguments: _withArgumentsInvalidOption,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the declared member that is not a valid override.
+/// String p1: the name of the interface that declares the member.
+/// Type p2: the type of the declared member in the interface.
+/// String p3: the name of the interface with the overridden member.
+/// Type p4: the type of the overridden member.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required DartType p2,
+    required String p3,
+    required DartType p4,
+  })
+>
+invalidOverride = DiagnosticWithArguments(
+  name: 'INVALID_OVERRIDE',
+  problemMessage:
+      "'{1}.{0}' ('{2}') isn't a valid override of '{3}.{0}' ('{4}').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_OVERRIDE',
+  withArguments: _withArgumentsInvalidOverride,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.type,
+    ExpectedType.string,
+    ExpectedType.type,
+  ],
+);
+
+/// This warning is generated anywhere where an instance member annotated with
+/// `@nonVirtual` is overridden in a subclass.
+///
+/// Parameters:
+/// String p0: the name of the member
+/// String p1: the name of the defining class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidOverrideOfNonVirtualMember = DiagnosticWithArguments(
+  name: 'INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER',
+  problemMessage:
+      "The member '{0}' is declared non-virtual in '{1}' and can't be overridden "
+      "in subclasses.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER',
+  withArguments: _withArgumentsInvalidOverrideOfNonVirtualMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the name of the declared setter that is not a valid override.
+/// Object p1: the name of the interface that declares the setter.
+/// Object p2: the type of the declared setter in the interface.
+/// Object p3: the name of the interface with the overridden setter.
+/// Object p4: the type of the overridden setter.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+    required Object p4,
+  })
+>
+invalidOverrideSetter = DiagnosticWithArguments(
+  name: 'INVALID_OVERRIDE',
+  problemMessage:
+      "The setter '{1}.{0}' ('{2}') isn't a valid override of '{3}.{0}' ('{4}').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_OVERRIDE_SETTER',
+  withArguments: _withArgumentsInvalidOverrideSetter,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidPlatformsField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_PLATFORMS_FIELD',
+      problemMessage:
+          "The 'platforms' field must be a map with platforms as keys.",
+      correctionMessage:
+          "Try changing the 'platforms' field to a map with platforms as keys.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_PLATFORMS_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidReferenceToGenerativeEnumConstructor = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
+  problemMessage:
+      "Generative enum constructors can only be used to create an enum constant.",
+  correctionMessage: "Try using an enum value, or a factory constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidReferenceToGenerativeEnumConstructorTearoff =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
+      problemMessage: "Generative enum constructors can't be torn off.",
+      correctionMessage: "Try using an enum value, or a factory constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR_TEAROFF',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidReferenceToThis =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_REFERENCE_TO_THIS',
+      problemMessage: "Invalid reference to 'this' expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_REFERENCE_TO_THIS',
+      expectedTypes: [],
+    );
+
+/// This warning is generated anywhere where `@reopen` annotates a class which
+/// did not reopen any type.
+///
+/// No parameters.
+const DiagnosticWithoutArguments invalidReopenAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_REOPEN_ANNOTATION',
+      problemMessage:
+          "The annotation '@reopen' can only be applied to a class that opens "
+          "capabilities that the supertype intentionally disallows.",
+      correctionMessage: "Try removing the '@reopen' annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'INVALID_REOPEN_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// An error code indicating an invalid format for an options file section.
+///
+/// Parameters:
+/// String p0: the section name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidSectionFormat = DiagnosticWithArguments(
+  name: 'INVALID_SECTION_FORMAT',
+  problemMessage: "Invalid format for the '{0}' section.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_SECTION_FORMAT',
+  withArguments: _withArgumentsInvalidSectionFormat,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidStarAfterAsync = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_STAR_AFTER_ASYNC',
+  problemMessage:
+      "The modifier 'async*' isn't allowed for an expression function body.",
+  correctionMessage: "Try converting the body to a block.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_STAR_AFTER_ASYNC',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidSuperFormalParameterLocation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_SUPER_FORMAL_PARAMETER_LOCATION',
+  problemMessage:
+      "Super parameters can only be used in non-redirecting generative "
+      "constructors.",
+  correctionMessage:
+      "Try removing the 'super' modifier, or changing the constructor to be "
+      "non-redirecting and generative.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_SUPER_FORMAL_PARAMETER_LOCATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidSuperInInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_SUPER_IN_INITIALIZER',
+      problemMessage:
+          "Can only use 'super' in an initializer for calling the superclass "
+          "constructor (e.g. 'super()' or 'super.namedConstructor()')",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_SUPER_IN_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidSync = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_SYNC',
+  problemMessage:
+      "The modifier 'sync' isn't allowed for an expression function body.",
+  correctionMessage: "Try converting the body to a block.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_SYNC',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidThisInInitializer = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_THIS_IN_INITIALIZER',
+  problemMessage:
+      "Can only use 'this' in an initializer for field initialization (e.g. "
+      "'this.x = something') and constructor redirection (e.g. 'this()' or "
+      "'this.namedConstructor())",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_THIS_IN_INITIALIZER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+invalidTypeArgumentInConstList = DiagnosticWithArguments(
+  name: 'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
+  problemMessage:
+      "Constant list literals can't use a type parameter in a type argument, "
+      "such as '{0}'.",
+  correctionMessage: "Try replacing the type parameter with a different type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_LIST',
+  withArguments: _withArgumentsInvalidTypeArgumentInConstList,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+invalidTypeArgumentInConstMap = DiagnosticWithArguments(
+  name: 'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
+  problemMessage:
+      "Constant map literals can't use a type parameter in a type argument, such "
+      "as '{0}'.",
+  correctionMessage: "Try replacing the type parameter with a different type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_MAP',
+  withArguments: _withArgumentsInvalidTypeArgumentInConstMap,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidTypeArgumentInConstSet = DiagnosticWithArguments(
+  name: 'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
+  problemMessage:
+      "Constant set literals can't use a type parameter in a type argument, such "
+      "as '{0}'.",
+  correctionMessage: "Try replacing the type parameter with a different type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_SET',
+  withArguments: _withArgumentsInvalidTypeArgumentInConstSet,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidUnicodeEscapeStarted =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_UNICODE_ESCAPE_STARTED',
+      problemMessage: "The string '\\' can't stand alone.",
+      correctionMessage:
+          "Try adding another backslash (\\) to escape the '\\'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_UNICODE_ESCAPE_STARTED',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidUnicodeEscapeUBracket =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_UNICODE_ESCAPE_U_BRACKET',
+      problemMessage:
+          "An escape sequence starting with '\\u{' must be followed by 1 to 6 "
+          "hexadecimal digits followed by a '}'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_UNICODE_ESCAPE_U_BRACKET',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidUnicodeEscapeUNoBracket = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_UNICODE_ESCAPE_U_NO_BRACKET',
+  problemMessage:
+      "An escape sequence starting with '\\u' must be followed by 4 hexadecimal "
+      "digits.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_UNICODE_ESCAPE_U_NO_BRACKET',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidUnicodeEscapeUStarted = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_UNICODE_ESCAPE_U_STARTED',
+  problemMessage:
+      "An escape sequence starting with '\\u' must be followed by 4 hexadecimal "
+      "digits or from 1 to 6 digits between '{' and '}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_UNICODE_ESCAPE_U_STARTED',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the URI that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidUri = DiagnosticWithArguments(
+  name: 'INVALID_URI',
+  problemMessage: "Invalid URI syntax: '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVALID_URI',
+  withArguments: _withArgumentsInvalidUri,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// The 'covariant' keyword was found in an inappropriate location.
+///
+/// No parameters.
+const DiagnosticWithoutArguments invalidUseOfCovariant =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_USE_OF_COVARIANT',
+      problemMessage:
+          "The 'covariant' keyword can only be used for parameters in instance "
+          "methods or before non-final instance fields.",
+      correctionMessage: "Try removing the 'covariant' keyword.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_USE_OF_COVARIANT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+///
+/// Parameters:
+/// Token lexeme: undocumented
+const DiagnosticCode invalidUseOfCovariantInExtension =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'INVALID_USE_OF_COVARIANT_IN_EXTENSION',
+      problemMessage: "Can't have modifier '{0}' in an extension.",
+      correctionMessage: "Try removing '{0}'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'INVALID_USE_OF_COVARIANT_IN_EXTENSION',
+      expectedTypes: [ExpectedType.token],
+    );
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidUseOfDoNotSubmitMember = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER',
+  problemMessage: "Uses of '{0}' should not be submitted to source control.",
+  correctionMessage: "Try removing the reference to '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER',
+  withArguments: _withArgumentsInvalidUseOfDoNotSubmitMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidUseOfIdentifierAugmented = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_USE_OF_IDENTIFIER_AUGMENTED',
+  problemMessage:
+      "The identifier 'augmented' can only be used to reference the augmented "
+      "declaration inside an augmentation.",
+  correctionMessage: "Try using a different identifier.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'INVALID_USE_OF_IDENTIFIER_AUGMENTED',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidUseOfInternalMember = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_INTERNAL_MEMBER',
+  problemMessage: "The member '{0}' can only be used within its package.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_USE_OF_INTERNAL_MEMBER',
+  withArguments: _withArgumentsInvalidUseOfInternalMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments invalidUseOfNullValue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'INVALID_USE_OF_NULL_VALUE',
+      problemMessage:
+          "An expression whose value is always 'null' can't be dereferenced.",
+      correctionMessage: "Try changing the type of the expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'INVALID_USE_OF_NULL_VALUE',
+      expectedTypes: [],
+    );
+
+/// This warning is generated anywhere where a member annotated with
+/// `@protected` is used outside of an instance member of a subclass.
+///
+/// Parameters:
+/// String p0: the name of the member
+/// String p1: the name of the defining class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidUseOfProtectedMember = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_PROTECTED_MEMBER',
+  problemMessage:
+      "The member '{0}' can only be used within instance members of subclasses "
+      "of '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_USE_OF_PROTECTED_MEMBER',
+  withArguments: _withArgumentsInvalidUseOfProtectedMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invalidUseOfVisibleForOverridingMember = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER',
+  problemMessage: "The member '{0}' can only be used for overriding.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER',
+  withArguments: _withArgumentsInvalidUseOfVisibleForOverridingMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// This warning is generated anywhere where a member annotated with
+/// `@visibleForTemplate` is used outside of a "template" Dart file.
+///
+/// Parameters:
+/// String p0: the name of the member
+/// Uri p1: the name of the defining class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required Uri p1})
+>
+invalidUseOfVisibleForTemplateMember = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER',
+  problemMessage:
+      "The member '{0}' can only be used within '{1}' or a template library.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER',
+  withArguments: _withArgumentsInvalidUseOfVisibleForTemplateMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.uri],
+);
+
+/// This warning is generated anywhere where a member annotated with
+/// `@visibleForTesting` is used outside the defining library, or a test.
+///
+/// Parameters:
+/// String p0: the name of the member
+/// Uri p1: the name of the defining class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required Uri p1})
+>
+invalidUseOfVisibleForTestingMember = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER',
+  problemMessage: "The member '{0}' can only be used within '{1}' or a test.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER',
+  withArguments: _withArgumentsInvalidUseOfVisibleForTestingMember,
+  expectedTypes: [ExpectedType.string, ExpectedType.uri],
+);
+
+/// This warning is generated anywhere where a private declaration is
+/// annotated with `@visibleForTemplate` or `@visibleForTesting`.
+///
+/// Parameters:
+/// String p0: the name of the member
+/// String p1: the name of the annotation
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidVisibilityAnnotation = DiagnosticWithArguments(
+  name: 'INVALID_VISIBILITY_ANNOTATION',
+  problemMessage:
+      "The member '{0}' is annotated with '{1}', but this annotation is only "
+      "meaningful on declarations of public members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_VISIBILITY_ANNOTATION',
+  withArguments: _withArgumentsInvalidVisibilityAnnotation,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidVisibleForOverridingAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION',
+  problemMessage:
+      "The annotation 'visibleForOverriding' can only be applied to a public "
+      "instance member that can be overridden.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidVisibleOutsideTemplateAnnotation = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION',
+  problemMessage:
+      "The annotation 'visibleOutsideTemplate' can only be applied to a member "
+      "of a class, enum, or mixin that is annotated with "
+      "'visibleForTemplate'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invalidWidgetPreviewApplication = DiagnosticWithoutArgumentsImpl(
+  name: 'INVALID_WIDGET_PREVIEW_APPLICATION',
+  problemMessage:
+      "The '@Preview(...)' annotation can only be applied to public, statically "
+      "accessible constructors and functions.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_WIDGET_PREVIEW_APPLICATION',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the private symbol
+/// String p1: the name of the proposed public symbol equivalent
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+invalidWidgetPreviewPrivateArgument = DiagnosticWithArguments(
+  name: 'INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT',
+  problemMessage:
+      "'@Preview(...)' can only accept arguments that consist of literals and "
+      "public symbols.",
+  correctionMessage: "Rename private symbol '{0}' to '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT',
+  withArguments: _withArgumentsInvalidWidgetPreviewPrivateArgument,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the extension
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invocationOfExtensionWithoutCall = DiagnosticWithArguments(
+  name: 'INVOCATION_OF_EXTENSION_WITHOUT_CALL',
+  problemMessage:
+      "The extension '{0}' doesn't define a 'call' method so the override can't "
+      "be used in an invocation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVOCATION_OF_EXTENSION_WITHOUT_CALL',
+  withArguments: _withArgumentsInvocationOfExtensionWithoutCall,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the identifier that is not a function type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+invocationOfNonFunction = DiagnosticWithArguments(
+  name: 'INVOCATION_OF_NON_FUNCTION',
+  problemMessage: "'{0}' isn't a function.",
+  correctionMessage:
+      "Try correcting the name to match an existing function, or define a "
+      "method or function named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVOCATION_OF_NON_FUNCTION',
+  withArguments: _withArgumentsInvocationOfNonFunction,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+invocationOfNonFunctionExpression = DiagnosticWithoutArgumentsImpl(
+  name: 'INVOCATION_OF_NON_FUNCTION_EXPRESSION',
+  problemMessage:
+      "The expression doesn't evaluate to a function, so it can't be invoked.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'INVOCATION_OF_NON_FUNCTION_EXPRESSION',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the unresolvable label
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+labelInOuterScope = DiagnosticWithArguments(
+  name: 'LABEL_IN_OUTER_SCOPE',
+  problemMessage: "Can't reference label '{0}' declared in an outer method.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'LABEL_IN_OUTER_SCOPE',
+  withArguments: _withArgumentsLabelInOuterScope,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the unresolvable label
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+labelUndefined = DiagnosticWithArguments(
+  name: 'LABEL_UNDEFINED',
+  problemMessage: "Can't reference an undefined label '{0}'.",
+  correctionMessage:
+      "Try defining the label, or correcting the name to match an existing "
+      "label.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'LABEL_UNDEFINED',
+  withArguments: _withArgumentsLabelUndefined,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments lateFinalFieldWithConstConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
+      problemMessage:
+          "Can't have a late final field in a class with a generative const "
+          "constructor.",
+      correctionMessage:
+          "Try removing the 'late' modifier, or don't declare 'const' "
+          "constructors.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments lateFinalLocalAlreadyAssigned =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LATE_FINAL_LOCAL_ALREADY_ASSIGNED',
+      problemMessage: "The late final local variable is already assigned.",
+      correctionMessage:
+          "Try removing the 'final' modifier, or don't reassign the value.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'LATE_FINAL_LOCAL_ALREADY_ASSIGNED',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments latePatternVariableDeclaration =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LATE_PATTERN_VARIABLE_DECLARATION',
+      problemMessage:
+          "A pattern variable declaration may not use the `late` keyword.",
+      correctionMessage: "Try removing the keyword `late`.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'LATE_PATTERN_VARIABLE_DECLARATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments leafCallMustNotReturnHandle =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LEAF_CALL_MUST_NOT_RETURN_HANDLE',
+      problemMessage: "FFI leaf call can't return a 'Handle'.",
+      correctionMessage: "Try changing the return type to primitive or struct.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'LEAF_CALL_MUST_NOT_RETURN_HANDLE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments leafCallMustNotTakeHandle =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LEAF_CALL_MUST_NOT_TAKE_HANDLE',
+      problemMessage: "FFI leaf call can't take arguments of type 'Handle'.",
+      correctionMessage:
+          "Try changing the argument type to primitive or struct.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'LEAF_CALL_MUST_NOT_TAKE_HANDLE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments libraryDirectiveNotFirst =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LIBRARY_DIRECTIVE_NOT_FIRST',
+      problemMessage:
+          "The library directive must appear before all other directives.",
+      correctionMessage:
+          "Try moving the library directive before any other directives.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'LIBRARY_DIRECTIVE_NOT_FIRST',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the actual type of the list element
+/// Type p1: the expected type of the list element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+listElementTypeNotAssignable = DiagnosticWithArguments(
+  name: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the list type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsListElementTypeNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the actual type of the list element
+/// Type p1: the expected type of the list element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+listElementTypeNotAssignableNullability = DiagnosticWithArguments(
+  name: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the list type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY',
+  withArguments: _withArgumentsListElementTypeNotAssignableNullability,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// String string: undocumented
+/// Token lexeme: undocumented
+const DiagnosticCode literalWithClass = DiagnosticCodeWithExpectedTypes(
+  name: 'LITERAL_WITH_CLASS',
+  problemMessage: "A {0} literal can't be prefixed by '{1}'.",
+  correctionMessage: "Try removing '{1}'",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'LITERAL_WITH_CLASS',
+  expectedTypes: [ExpectedType.string, ExpectedType.token],
+);
+
+/// Parameters:
+/// String string: undocumented
+/// Token lexeme: undocumented
+const DiagnosticCode literalWithClassAndNew = DiagnosticCodeWithExpectedTypes(
+  name: 'LITERAL_WITH_CLASS_AND_NEW',
+  problemMessage: "A {0} literal can't be prefixed by 'new {1}'.",
+  correctionMessage: "Try removing 'new' and '{1}'",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'LITERAL_WITH_CLASS_AND_NEW',
+  expectedTypes: [ExpectedType.string, ExpectedType.token],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments literalWithNew =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LITERAL_WITH_NEW',
+      problemMessage: "A literal can't be prefixed by 'new'.",
+      correctionMessage: "Try removing 'new'",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'LITERAL_WITH_NEW',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments localFunctionDeclarationModifier =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'LOCAL_FUNCTION_DECLARATION_MODIFIER',
+      problemMessage:
+          "Local function declarations can't specify any modifiers.",
+      correctionMessage: "Try removing the modifier.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'LOCAL_FUNCTION_DECLARATION_MODIFIER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+mainFirstPositionalParameterType = DiagnosticWithoutArgumentsImpl(
+  name: 'MAIN_FIRST_POSITIONAL_PARAMETER_TYPE',
+  problemMessage:
+      "The type of the first positional parameter of the 'main' function must be "
+      "a supertype of 'List<String>'.",
+  correctionMessage: "Try changing the type of the parameter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MAIN_FIRST_POSITIONAL_PARAMETER_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mainHasRequiredNamedParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MAIN_HAS_REQUIRED_NAMED_PARAMETERS',
+      problemMessage:
+          "The function 'main' can't have any required named parameters.",
+      correctionMessage:
+          "Try using a different name for the function, or removing the "
+          "'required' modifier.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MAIN_HAS_REQUIRED_NAMED_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mainHasTooManyRequiredPositionalParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS',
+      problemMessage:
+          "The function 'main' can't have more than two required positional "
+          "parameters.",
+      correctionMessage:
+          "Try using a different name for the function, or removing extra "
+          "parameters.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mainIsNotFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MAIN_IS_NOT_FUNCTION',
+      problemMessage: "The declaration named 'main' must be a function.",
+      correctionMessage: "Try using a different name for this declaration.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MAIN_IS_NOT_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mapEntryNotInMap =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MAP_ENTRY_NOT_IN_MAP',
+      problemMessage: "Map entries can only be used in a map literal.",
+      correctionMessage:
+          "Try converting the collection to a map or removing the map entry.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MAP_ENTRY_NOT_IN_MAP',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the type of the expression being used as a key
+/// Type p1: the type of keys declared for the map
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+mapKeyTypeNotAssignable = DiagnosticWithArguments(
+  name: 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the map key type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsMapKeyTypeNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the type of the expression being used as a key
+/// Type p1: the type of keys declared for the map
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+mapKeyTypeNotAssignableNullability = DiagnosticWithArguments(
+  name: 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the map key type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY',
+  withArguments: _withArgumentsMapKeyTypeNotAssignableNullability,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the type of the expression being used as a value
+/// Type p1: the type of values declared for the map
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+mapValueTypeNotAssignable = DiagnosticWithArguments(
+  name: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the map value type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsMapValueTypeNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the type of the expression being used as a value
+/// Type p1: the type of values declared for the map
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+mapValueTypeNotAssignableNullability = DiagnosticWithArguments(
+  name: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the map value type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE_NULLABILITY',
+  withArguments: _withArgumentsMapValueTypeNotAssignableNullability,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments memberWithClassName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MEMBER_WITH_CLASS_NAME',
+      problemMessage:
+          "A class member can't have the same name as the enclosing class.",
+      correctionMessage: "Try renaming the member.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MEMBER_WITH_CLASS_NAME',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mismatchedAnnotationOnStructField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISMATCHED_ANNOTATION_ON_STRUCT_FIELD',
+      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.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MISMATCHED_ANNOTATION_ON_STRUCT_FIELD',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the type that is missing a native type annotation
+/// String p1: the superclass which is extended by this field's class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required String p1})
+>
+missingAnnotationOnStructField = DiagnosticWithArguments(
+  name: 'MISSING_ANNOTATION_ON_STRUCT_FIELD',
+  problemMessage:
+      "Fields of type '{0}' in a subclass of '{1}' must have an annotation "
+      "indicating the native type.",
+  correctionMessage: "Try adding an annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_ANNOTATION_ON_STRUCT_FIELD',
+  withArguments: _withArgumentsMissingAnnotationOnStructField,
+  expectedTypes: [ExpectedType.type, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingAssignableSelector =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_ASSIGNABLE_SELECTOR',
+      problemMessage: "Missing selector such as '.identifier' or '[0]'.",
+      correctionMessage: "Try adding a selector.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_ASSIGNABLE_SELECTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingAssignmentInInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_ASSIGNMENT_IN_INITIALIZER',
+      problemMessage: "Expected an assignment after the field name.",
+      correctionMessage:
+          "To initialize a field, use the syntax 'name = value'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_ASSIGNMENT_IN_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingCatchOrFinally = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_CATCH_OR_FINALLY',
+  problemMessage:
+      "A try block must be followed by an 'on', 'catch', or 'finally' clause.",
+  correctionMessage:
+      "Try adding either a catch or finally clause, or remove the try "
+      "statement.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_CATCH_OR_FINALLY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingClosingParenthesis =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_CLOSING_PARENTHESIS',
+      problemMessage: "The closing parenthesis is missing.",
+      correctionMessage: "Try adding the closing parenthesis.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_CLOSING_PARENTHESIS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingConstFinalVarOrType = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_CONST_FINAL_VAR_OR_TYPE',
+  problemMessage:
+      "Variables must be declared using the keywords 'const', 'final', 'var' or "
+      "a type name.",
+  correctionMessage:
+      "Try adding the name of the type of the variable or the keyword 'var'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_CONST_FINAL_VAR_OR_TYPE',
+  expectedTypes: [],
+);
+
+/// 12.1 Constants: A constant expression is ... a constant list literal.
+///
+/// Note: This diagnostic is never displayed to the user, so it doesn't need
+/// to be documented.
+///
+/// No parameters.
+const DiagnosticWithoutArguments missingConstInListLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_CONST_IN_LIST_LITERAL',
+      problemMessage:
+          "Seeing this message constitutes a bug. Please report it.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MISSING_CONST_IN_LIST_LITERAL',
+      expectedTypes: [],
+    );
+
+/// 12.1 Constants: A constant expression is ... a constant map literal.
+///
+/// Note: This diagnostic is never displayed to the user, so it doesn't need
+/// to be documented.
+///
+/// No parameters.
+const DiagnosticWithoutArguments missingConstInMapLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_CONST_IN_MAP_LITERAL',
+      problemMessage:
+          "Seeing this message constitutes a bug. Please report it.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MISSING_CONST_IN_MAP_LITERAL',
+      expectedTypes: [],
+    );
+
+/// 12.1 Constants: A constant expression is ... a constant set literal.
+///
+/// Note: This diagnostic is never displayed to the user, so it doesn't need
+/// to be documented.
+///
+/// No parameters.
+const DiagnosticWithoutArguments missingConstInSetLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_CONST_IN_SET_LITERAL',
+      problemMessage:
+          "Seeing this message constitutes a bug. Please report it.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MISSING_CONST_IN_SET_LITERAL',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the library
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+missingDartLibrary = DiagnosticWithArguments(
+  name: 'MISSING_DART_LIBRARY',
+  problemMessage: "Required library '{0}' is missing.",
+  correctionMessage: "Re-install the Dart or Flutter SDK.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_DART_LIBRARY',
+  withArguments: _withArgumentsMissingDartLibrary,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingDefaultValueForParameter = DiagnosticWithArguments(
+  name: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
+  problemMessage:
+      "The parameter '{0}' can't have a value of 'null' because of its type, but "
+      "the implicit default value is 'null'.",
+  correctionMessage:
+      "Try adding either an explicit non-'null' default value or the "
+      "'required' modifier.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
+  withArguments: _withArgumentsMissingDefaultValueForParameter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingDefaultValueForParameterPositional = DiagnosticWithArguments(
+  name: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
+  problemMessage:
+      "The parameter '{0}' can't have a value of 'null' because of its type, but "
+      "the implicit default value is 'null'.",
+  correctionMessage: "Try adding an explicit non-'null' default value.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL',
+  withArguments: _withArgumentsMissingDefaultValueForParameterPositional,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingDefaultValueForParameterWithAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
+      problemMessage:
+          "With null safety, use the 'required' keyword, not the '@required' "
+          "annotation.",
+      correctionMessage: "Try removing the '@'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the list of packages missing from the dependencies and the list
+///            of packages missing from the dev_dependencies (if any) in the
+///            pubspec file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingDependency = DiagnosticWithArguments(
+  name: 'MISSING_DEPENDENCY',
+  problemMessage: "Missing a dependency on imported package '{0}'.",
+  correctionMessage: "Try adding {0}.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_DEPENDENCY',
+  withArguments: _withArgumentsMissingDependency,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingDigit = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_DIGIT',
+  problemMessage: "Decimal digit expected.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_DIGIT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingEnumBody = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_ENUM_BODY',
+  problemMessage:
+      "An enum definition must have a body with at least one constant name.",
+  correctionMessage: "Try adding a body and defining at least one constant.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_ENUM_BODY',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the constant that is missing
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingEnumConstantInSwitch = DiagnosticWithArguments(
+  name: 'MISSING_ENUM_CONSTANT_IN_SWITCH',
+  problemMessage: "Missing case clause for '{0}'.",
+  correctionMessage:
+      "Try adding a case clause for the missing constant, or adding a "
+      "default clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_ENUM_CONSTANT_IN_SWITCH',
+  withArguments: _withArgumentsMissingEnumConstantInSwitch,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingExceptionValue = DiagnosticWithArguments(
+  name: 'MISSING_EXCEPTION_VALUE',
+  problemMessage:
+      "The method {0} 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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_EXCEPTION_VALUE',
+  withArguments: _withArgumentsMissingExceptionValue,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingExpressionInInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_EXPRESSION_IN_INITIALIZER',
+      problemMessage: "Expected an expression after the assignment operator.",
+      correctionMessage:
+          "Try adding the value to be assigned, or remove the assignment "
+          "operator.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_EXPRESSION_IN_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingExpressionInThrow =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_EXPRESSION_IN_THROW',
+      problemMessage: "Missing expression after 'throw'.",
+      correctionMessage:
+          "Add an expression after 'throw' or use 'rethrow' to throw a caught "
+          "exception",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_EXPRESSION_IN_THROW',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingFieldTypeInStruct = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_FIELD_TYPE_IN_STRUCT',
+  problemMessage:
+      "Fields in struct classes must have an explicitly declared type of 'int', "
+      "'double' or 'Pointer'.",
+  correctionMessage: "Try using 'int', 'double' or 'Pointer'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_FIELD_TYPE_IN_STRUCT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingFunctionBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_FUNCTION_BODY',
+      problemMessage: "A function body must be provided.",
+      correctionMessage: "Try adding a function body.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_FUNCTION_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingFunctionKeyword = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_FUNCTION_KEYWORD',
+  problemMessage:
+      "Function types must have the keyword 'Function' before the parameter "
+      "list.",
+  correctionMessage: "Try adding the keyword 'Function'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_FUNCTION_KEYWORD',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingFunctionParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_FUNCTION_PARAMETERS',
+      problemMessage: "Functions must have an explicit list of parameters.",
+      correctionMessage: "Try adding a parameter list.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_FUNCTION_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingGet = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_GET',
+  problemMessage: "Getters must have the keyword 'get' before the getter name.",
+  correctionMessage: "Try adding the keyword 'get'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_GET',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingHexDigit =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_HEX_DIGIT',
+      problemMessage: "Hexadecimal digit expected.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_HEX_DIGIT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingIdentifier =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_IDENTIFIER',
+      problemMessage: "Expected an identifier.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_IDENTIFIER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingInitializer =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_INITIALIZER',
+      problemMessage: "Expected an initializer.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_INITIALIZER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingKeywordOperator =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_KEYWORD_OPERATOR',
+      problemMessage:
+          "Operator declarations must be preceded by the keyword 'operator'.",
+      correctionMessage: "Try adding the keyword 'operator'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_KEYWORD_OPERATOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingMethodParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_METHOD_PARAMETERS',
+      problemMessage: "Methods must have an explicit list of parameters.",
+      correctionMessage: "Try adding a parameter list.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_METHOD_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingName = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_NAME',
+  problemMessage: "The 'name' field is required but missing.",
+  correctionMessage: "Try adding a field named 'name'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_NAME',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingNamedPatternFieldName = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_NAMED_PATTERN_FIELD_NAME',
+  problemMessage:
+      "The getter name is not specified explicitly, and the pattern is not a "
+      "variable.",
+  correctionMessage:
+      "Try specifying the getter name explicitly, or using a variable "
+      "pattern.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_NAMED_PATTERN_FIELD_NAME',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingNameForNamedParameter = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_NAME_FOR_NAMED_PARAMETER',
+  problemMessage: "Named parameters in a function type must have a name",
+  correctionMessage:
+      "Try providing a name for the parameter or removing the curly braces.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_NAME_FOR_NAMED_PARAMETER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingNameInLibraryDirective = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
+  problemMessage: "Library directives must include a library name.",
+  correctionMessage:
+      "Try adding a library name after the keyword 'library', or remove the "
+      "library directive if the library doesn't have any parts.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_NAME_IN_LIBRARY_DIRECTIVE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingNameInPartOfDirective =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_NAME_IN_PART_OF_DIRECTIVE',
+      problemMessage: "Part-of directives must include a library name.",
+      correctionMessage: "Try adding a library name after the 'of'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_NAME_IN_PART_OF_DIRECTIVE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String member: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String member})
+>
+missingOverrideOfMustBeOverriddenOne = DiagnosticWithArguments(
+  name: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN',
+  problemMessage: "Missing a required override of '{0}'.",
+  correctionMessage: "Try overriding the missing member.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE',
+  withArguments: _withArgumentsMissingOverrideOfMustBeOverriddenOne,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String firstMember: the name of the first member
+/// String secondMember: the name of the second member
+/// String additionalCount: the number of additional missing members that
+///                         aren't listed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String firstMember,
+    required String secondMember,
+    required String additionalCount,
+  })
+>
+missingOverrideOfMustBeOverriddenThreePlus = DiagnosticWithArguments(
+  name: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN',
+  problemMessage: "Missing a required override of '{0}', '{1}', and {2} more.",
+  correctionMessage: "Try overriding the missing members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS',
+  withArguments: _withArgumentsMissingOverrideOfMustBeOverriddenThreePlus,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String firstMember: the name of the first member
+/// String secondMember: the name of the second member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String firstMember,
+    required String secondMember,
+  })
+>
+missingOverrideOfMustBeOverriddenTwo = DiagnosticWithArguments(
+  name: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN',
+  problemMessage: "Missing a required override of '{0}' and '{1}'.",
+  correctionMessage: "Try overriding the missing members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO',
+  withArguments: _withArgumentsMissingOverrideOfMustBeOverriddenTwo,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingPrefixInDeferredImport =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_PREFIX_IN_DEFERRED_IMPORT',
+      problemMessage: "Deferred imports should have a prefix.",
+      correctionMessage:
+          "Try adding a prefix to the import by adding an 'as' clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_PREFIX_IN_DEFERRED_IMPORT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingPrimaryConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_PRIMARY_CONSTRUCTOR',
+      problemMessage:
+          "An extension type declaration must have a primary constructor "
+          "declaration.",
+      correctionMessage:
+          "Try adding a primary constructor to the extension type declaration.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_PRIMARY_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingPrimaryConstructorParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_PRIMARY_CONSTRUCTOR_PARAMETERS',
+      problemMessage:
+          "A primary constructor declaration must have formal parameters.",
+      correctionMessage:
+          "Try adding formal parameters after the primary constructor name.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_PRIMARY_CONSTRUCTOR_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingQuote = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_QUOTE',
+  problemMessage: "Expected quote (' or \").",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_QUOTE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingRequiredArgument = DiagnosticWithArguments(
+  name: 'MISSING_REQUIRED_ARGUMENT',
+  problemMessage:
+      "The named parameter '{0}' is required, but there's no corresponding "
+      "argument.",
+  correctionMessage: "Try adding the required argument.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_REQUIRED_ARGUMENT',
+  withArguments: _withArgumentsMissingRequiredArgument,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Generates a warning for a constructor, function or method invocation where
+/// a required parameter is missing.
+///
+/// Parameters:
+/// String p0: the name of the parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingRequiredParam = DiagnosticWithArguments(
+  name: 'MISSING_REQUIRED_PARAM',
+  problemMessage: "The parameter '{0}' is required.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_REQUIRED_PARAM',
+  withArguments: _withArgumentsMissingRequiredParam,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Generates a warning for a constructor, function or method invocation where
+/// a required parameter is missing.
+///
+/// Parameters:
+/// String p0: the name of the parameter
+/// String p1: message details
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+missingRequiredParamWithDetails = DiagnosticWithArguments(
+  name: 'MISSING_REQUIRED_PARAM',
+  problemMessage: "The parameter '{0}' is required. {1}.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MISSING_REQUIRED_PARAM_WITH_DETAILS',
+  withArguments: _withArgumentsMissingRequiredParamWithDetails,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingSizeAnnotationCarray =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_SIZE_ANNOTATION_CARRAY',
+      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.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MISSING_SIZE_ANNOTATION_CARRAY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingStarAfterSync =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_STAR_AFTER_SYNC',
+      problemMessage: "The modifier 'sync' must be followed by a star ('*').",
+      correctionMessage: "Try removing the modifier, or add a star.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_STAR_AFTER_SYNC',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments missingStatement =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_STATEMENT',
+      problemMessage: "Expected a statement.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_STATEMENT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the terminator that is missing
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+missingTerminatorForParameterGroup = DiagnosticWithArguments(
+  name: 'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
+  problemMessage: "There is no '{0}' to close the parameter group.",
+  correctionMessage: "Try inserting a '{0}' at the end of the group.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_TERMINATOR_FOR_PARAMETER_GROUP',
+  withArguments: _withArgumentsMissingTerminatorForParameterGroup,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments missingTypedefParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MISSING_TYPEDEF_PARAMETERS',
+      problemMessage: "Typedefs must have an explicit list of parameters.",
+      correctionMessage: "Try adding a parameter list.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MISSING_TYPEDEF_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+missingVariableInForEach = DiagnosticWithoutArgumentsImpl(
+  name: 'MISSING_VARIABLE_IN_FOR_EACH',
+  problemMessage:
+      "A loop variable must be declared in a for-each loop before the 'in', but "
+      "none was found.",
+  correctionMessage: "Try declaring a loop variable.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MISSING_VARIABLE_IN_FOR_EACH',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the variable pattern
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+missingVariablePattern = DiagnosticWithArguments(
+  name: 'MISSING_VARIABLE_PATTERN',
+  problemMessage:
+      "Variable pattern '{0}' is missing in this branch of the logical-or "
+      "pattern.",
+  correctionMessage: "Try declaring this variable pattern in the branch.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MISSING_VARIABLE_PATTERN',
+  withArguments: _withArgumentsMissingVariablePattern,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+mixedParameterGroups = DiagnosticWithoutArgumentsImpl(
+  name: 'MIXED_PARAMETER_GROUPS',
+  problemMessage:
+      "Can't have both positional and named parameters in a single parameter "
+      "list.",
+  correctionMessage: "Try choosing a single style of optional parameters.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MIXED_PARAMETER_GROUPS',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the super-invoked member
+/// Type p1: the display name of the type of the super-invoked member in the
+///          mixin
+/// Type p2: the display name of the type of the concrete member in the class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required DartType p1,
+    required DartType p2,
+  })
+>
+mixinApplicationConcreteSuperInvokedMemberType = DiagnosticWithArguments(
+  name: 'MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE',
+  problemMessage:
+      "The super-invoked member '{0}' has the type '{1}', and the concrete "
+      "member in the class has the type '{2}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE',
+  withArguments: _withArgumentsMixinApplicationConcreteSuperInvokedMemberType,
+  expectedTypes: [ExpectedType.string, ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the display name of the member without a concrete
+///            implementation
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mixinApplicationNoConcreteSuperInvokedMember = DiagnosticWithArguments(
+  name: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
+  problemMessage:
+      "The class doesn't have a concrete implementation of the super-invoked "
+      "member '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
+  withArguments: _withArgumentsMixinApplicationNoConcreteSuperInvokedMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the display name of the setter without a concrete
+///            implementation
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mixinApplicationNoConcreteSuperInvokedSetter = DiagnosticWithArguments(
+  name: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
+  problemMessage:
+      "The class doesn't have a concrete implementation of the super-invoked "
+      "setter '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_SETTER',
+  withArguments: _withArgumentsMixinApplicationNoConcreteSuperInvokedSetter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the display name of the mixin
+/// Type p1: the display name of the superclass
+/// Type p2: the display name of the type that is not implemented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required DartType p2,
+  })
+>
+mixinApplicationNotImplementedInterface = DiagnosticWithArguments(
+  name: 'MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE',
+  problemMessage:
+      "'{0}' can't be mixed onto '{1}' because '{1}' doesn't implement '{2}'.",
+  correctionMessage: "Try extending the class '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE',
+  withArguments: _withArgumentsMixinApplicationNotImplementedInterface,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the mixin class that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mixinClassDeclarationExtendsNotObject = DiagnosticWithArguments(
+  name: 'MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT',
+  problemMessage:
+      "The class '{0}' can't be declared a mixin because it extends a class "
+      "other than 'Object'.",
+  correctionMessage:
+      "Try removing the 'mixin' modifier or changing the superclass to "
+      "'Object'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT',
+  withArguments: _withArgumentsMixinClassDeclarationExtendsNotObject,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the mixin that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mixinClassDeclaresConstructor = DiagnosticWithArguments(
+  name: 'MIXIN_CLASS_DECLARES_CONSTRUCTOR',
+  problemMessage:
+      "The class '{0}' can't be used as a mixin because it declares a "
+      "constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_CLASS_DECLARES_CONSTRUCTOR',
+  withArguments: _withArgumentsMixinClassDeclaresConstructor,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinDeclaresConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_DECLARES_CONSTRUCTOR',
+      problemMessage: "Mixins can't declare constructors.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MIXIN_DECLARES_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinDeferredClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUBTYPE_OF_DEFERRED_CLASS',
+      problemMessage: "Classes can't mixin deferred classes.",
+      correctionMessage: "Try changing the import to not be deferred.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_DEFERRED_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the mixin that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mixinInheritsFromNotObject = DiagnosticWithArguments(
+  name: 'MIXIN_INHERITS_FROM_NOT_OBJECT',
+  problemMessage:
+      "The class '{0}' can't be used as a mixin because it extends a class other "
+      "than 'Object'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_INHERITS_FROM_NOT_OBJECT',
+  withArguments: _withArgumentsMixinInheritsFromNotObject,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinInstantiate =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_INSTANTIATE',
+      problemMessage: "Mixins can't be instantiated.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_INSTANTIATE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the disallowed type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+mixinOfDisallowedClass = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_DISALLOWED_TYPE',
+  problemMessage: "Classes can't mixin '{0}'.",
+  correctionMessage:
+      "Try specifying a different class or mixin, or remove the class or "
+      "mixin from the list.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_OF_DISALLOWED_CLASS',
+  withArguments: _withArgumentsMixinOfDisallowedClass,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinOfNonClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_OF_NON_CLASS',
+      problemMessage: "Classes can only mix in mixins and classes.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_OF_NON_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinOfTypeAliasExpandsToTypeParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
+      problemMessage:
+          "A type alias that expands to a type parameter can't be mixed in.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// This warning is generated anywhere where a `@sealed` class is used as a
+/// a superclass constraint of a mixin.
+///
+/// Parameters:
+/// String p0: the name of the sealed class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mixinOnSealedClass = DiagnosticWithArguments(
+  name: 'MIXIN_ON_SEALED_CLASS',
+  problemMessage:
+      "The class '{0}' shouldn't be used as a mixin constraint because it is "
+      "sealed, and any class mixing in this mixin must have '{0}' as a "
+      "superclass.",
+  correctionMessage:
+      "Try composing with this class, or refer to its documentation for more "
+      "information.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MIXIN_ON_SEALED_CLASS',
+  withArguments: _withArgumentsMixinOnSealedClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinOnTypeAliasExpandsToTypeParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
+      problemMessage:
+          "A type alias that expands to a type parameter can't be used as a "
+          "superclass constraint.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Element p0: the name of the class that appears in both "extends" and
+///             "with" clauses
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Element p0})
+>
+mixinsSuperClass = DiagnosticWithArguments(
+  name: 'IMPLEMENTS_SUPER_CLASS',
+  problemMessage:
+      "'{0}' can't be used in both the 'extends' and 'with' clauses.",
+  correctionMessage: "Try removing one of the occurrences.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXINS_SUPER_CLASS',
+  withArguments: _withArgumentsMixinsSuperClass,
+  expectedTypes: [ExpectedType.element],
+);
+
+/// Parameters:
+/// String p0: the name of the mixin that is not 'base'
+/// String p1: the name of the 'base' supertype
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+mixinSubtypeOfBaseIsNotBase = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
+  problemMessage:
+      "The mixin '{0}' must be 'base' because the supertype '{1}' is 'base'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_SUBTYPE_OF_BASE_IS_NOT_BASE',
+  withArguments: _withArgumentsMixinSubtypeOfBaseIsNotBase,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the mixin that is not 'final'
+/// String p1: the name of the 'final' supertype
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+mixinSubtypeOfFinalIsNotBase = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
+  problemMessage:
+      "The mixin '{0}' must be 'base' because the supertype '{1}' is 'final'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE',
+  withArguments: _withArgumentsMixinSubtypeOfFinalIsNotBase,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinSuperClassConstraintDeferredClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
+      problemMessage:
+          "Deferred classes can't be used as superclass constraints.",
+      correctionMessage: "Try changing the import to not be deferred.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the name of the disallowed type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+mixinSuperClassConstraintDisallowedClass = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_DISALLOWED_TYPE',
+  problemMessage: "'{0}' can't be used as a superclass constraint.",
+  correctionMessage:
+      "Try specifying a different super-class constraint, or remove the 'on' "
+      "clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS',
+  withArguments: _withArgumentsMixinSuperClassConstraintDisallowedClass,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinSuperClassConstraintNonInterface =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE',
+      problemMessage:
+          "Only classes and mixins can be used as superclass constraints.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments mixinWithClause =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_WITH_CLAUSE',
+      problemMessage: "A mixin can't have a with clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MIXIN_WITH_CLAUSE',
+      expectedTypes: [],
+    );
+
+/// 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.
+///
+/// No parameters.
+const DiagnosticWithoutArguments mixinWithNonClassSuperclass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MIXIN_WITH_NON_CLASS_SUPERCLASS',
+      problemMessage: "Mixin can only be applied to class.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MIXIN_WITH_NON_CLASS_SUPERCLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String string: undocumented
+/// String string2: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String string,
+    required String string2,
+  })
+>
+modifierOutOfOrder = DiagnosticWithArguments(
+  name: 'MODIFIER_OUT_OF_ORDER',
+  problemMessage: "The modifier '{0}' should be before the modifier '{1}'.",
+  correctionMessage: "Try re-ordering the modifiers.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MODIFIER_OUT_OF_ORDER',
+  withArguments: _withArgumentsModifierOutOfOrder,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String string: undocumented
+/// String string2: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String string,
+    required String string2,
+  })
+>
+multipleClauses = DiagnosticWithArguments(
+  name: 'MULTIPLE_CLAUSES',
+  problemMessage: "Each '{0}' definition can have at most one '{1}' clause.",
+  correctionMessage:
+      "Try combining all of the '{1}' clauses into a single clause.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MULTIPLE_CLAUSES',
+  withArguments: _withArgumentsMultipleClauses,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+multipleCombinators = DiagnosticWithoutArgumentsImpl(
+  name: 'MULTIPLE_COMBINATORS',
+  problemMessage:
+      "Using multiple 'hide' or 'show' combinators is never necessary and often "
+      "produces surprising results.",
+  correctionMessage: "Try using a single combinator.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MULTIPLE_COMBINATORS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleExtendsClauses =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_EXTENDS_CLAUSES',
+      problemMessage:
+          "Each class definition can have at most one extends clause.",
+      correctionMessage:
+          "Try choosing one superclass and define your class to implement (or "
+          "mix in) the others.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_EXTENDS_CLAUSES',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+multipleImplementsClauses = DiagnosticWithoutArgumentsImpl(
+  name: 'MULTIPLE_IMPLEMENTS_CLAUSES',
+  problemMessage:
+      "Each class or mixin definition can have at most one implements clause.",
+  correctionMessage:
+      "Try combining all of the implements clauses into a single clause.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MULTIPLE_IMPLEMENTS_CLAUSES',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleLibraryDirectives =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_LIBRARY_DIRECTIVES',
+      problemMessage: "Only one library directive may be declared in a file.",
+      correctionMessage: "Try removing all but one of the library directives.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_LIBRARY_DIRECTIVES',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+multipleNamedParameterGroups = DiagnosticWithoutArgumentsImpl(
+  name: 'MULTIPLE_NAMED_PARAMETER_GROUPS',
+  problemMessage:
+      "Can't have multiple groups of named parameters in a single parameter "
+      "list.",
+  correctionMessage: "Try combining all of the groups into a single group.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MULTIPLE_NAMED_PARAMETER_GROUPS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleOnClauses =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_ON_CLAUSES',
+      problemMessage: "Each mixin definition can have at most one on clause.",
+      correctionMessage:
+          "Try combining all of the on clauses into a single clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_ON_CLAUSES',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments multiplePartOfDirectives =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_PART_OF_DIRECTIVES',
+      problemMessage: "Only one part-of directive may be declared in a file.",
+      correctionMessage: "Try removing all but one of the part-of directives.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_PART_OF_DIRECTIVES',
+      expectedTypes: [],
+    );
+
+/// An error code indicating multiple plugins have been specified as enabled.
+///
+/// Parameters:
+/// String p0: the name of the first plugin
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+multiplePlugins = DiagnosticWithArguments(
+  name: 'MULTIPLE_PLUGINS',
+  problemMessage: "Multiple plugins can't be enabled.",
+  correctionMessage: "Remove all plugins following the first, '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MULTIPLE_PLUGINS',
+  withArguments: _withArgumentsMultiplePlugins,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+multiplePositionalParameterGroups = DiagnosticWithoutArgumentsImpl(
+  name: 'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
+  problemMessage:
+      "Can't have multiple groups of positional parameters in a single parameter "
+      "list.",
+  correctionMessage: "Try combining all of the groups into a single group.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MULTIPLE_POSITIONAL_PARAMETER_GROUPS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleRedirectingConstructorInvocations =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
+      problemMessage:
+          "Constructors can have only one 'this' redirection, at most.",
+      correctionMessage: "Try removing all but one of the redirections.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleRepresentationFields =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_REPRESENTATION_FIELDS',
+      problemMessage:
+          "Each extension type should have exactly one representation field.",
+      correctionMessage:
+          "Try combining fields into a record, or removing extra fields.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_REPRESENTATION_FIELDS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleSuperInitializers =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_SUPER_INITIALIZERS',
+      problemMessage: "A constructor can have at most one 'super' initializer.",
+      correctionMessage:
+          "Try removing all but one of the 'super' initializers.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'MULTIPLE_SUPER_INITIALIZERS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the number of variables being declared
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+multipleVariablesInForEach = DiagnosticWithArguments(
+  name: 'MULTIPLE_VARIABLES_IN_FOR_EACH',
+  problemMessage:
+      "A single loop variable must be declared in a for-each loop before the "
+      "'in', but {0} were found.",
+  correctionMessage:
+      "Try moving all but one of the declarations inside the loop body.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'MULTIPLE_VARIABLES_IN_FOR_EACH',
+  withArguments: _withArgumentsMultipleVariablesInForEach,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleVarianceModifiers =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_VARIANCE_MODIFIERS',
+      problemMessage:
+          "Each type parameter can have at most one variance modifier.",
+      correctionMessage:
+          "Use at most one of the 'in', 'out', or 'inout' modifiers.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_VARIANCE_MODIFIERS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments multipleWithClauses =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'MULTIPLE_WITH_CLAUSES',
+      problemMessage: "Each class definition can have at most one with clause.",
+      correctionMessage:
+          "Try combining all of the with clauses into a single clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'MULTIPLE_WITH_CLAUSES',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the type that should be a valid dart:ffi native type.
+/// String p1: the name of the function whose invocation depends on this
+///            relationship
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required String p1})
+>
+mustBeANativeFunctionType = DiagnosticWithArguments(
+  name: 'MUST_BE_A_NATIVE_FUNCTION_TYPE',
+  problemMessage:
+      "The type '{0}' given to '{1}' must be a valid 'dart:ffi' native function "
+      "type.",
+  correctionMessage:
+      "Try changing the type to only use members for 'dart:ffi'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MUST_BE_A_NATIVE_FUNCTION_TYPE',
+  withArguments: _withArgumentsMustBeANativeFunctionType,
+  expectedTypes: [ExpectedType.object, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the type that should be a subtype
+/// Type p1: the supertype that the subtype is compared to
+/// String p2: the name of the function whose invocation depends on this
+///            relationship
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required String p2,
+  })
+>
+mustBeASubtype = DiagnosticWithArguments(
+  name: 'MUST_BE_A_SUBTYPE',
+  problemMessage: "The type '{0}' must be a subtype of '{1}' for '{2}'.",
+  correctionMessage: "Try changing one or both of the type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MUST_BE_A_SUBTYPE',
+  withArguments: _withArgumentsMustBeASubtype,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
+);
+
+/// Generates a warning for classes that inherit from classes annotated with
+/// `@immutable` but that are not immutable.
+///
+/// Parameters:
+/// String p0: the name of the class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mustBeImmutable = DiagnosticWithArguments(
+  name: 'MUST_BE_IMMUTABLE',
+  problemMessage:
+      "This class (or a class that this class inherits from) is marked as "
+      "'@immutable', but one or more of its instance fields aren't final: "
+      "{0}",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MUST_BE_IMMUTABLE',
+  withArguments: _withArgumentsMustBeImmutable,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the class declaring the overridden method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+mustCallSuper = DiagnosticWithArguments(
+  name: 'MUST_CALL_SUPER',
+  problemMessage:
+      "This method overrides a method annotated as '@mustCallSuper' in '{0}', "
+      "but doesn't invoke the overridden method.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'MUST_CALL_SUPER',
+  withArguments: _withArgumentsMustCallSuper,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the return type that should be 'void'.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+mustReturnVoid = DiagnosticWithArguments(
+  name: 'MUST_RETURN_VOID',
+  problemMessage:
+      "The return type of the function passed to 'NativeCallable.listener' must "
+      "be 'void' rather than '{0}'.",
+  correctionMessage: "Try changing the return type to 'void'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'MUST_RETURN_VOID',
+  withArguments: _withArgumentsMustReturnVoid,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments namedFunctionExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NAMED_FUNCTION_EXPRESSION',
+      problemMessage: "Function expressions can't be named.",
+      correctionMessage:
+          "Try removing the name, or moving the function expression to a "
+          "function declaration statement.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NAMED_FUNCTION_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments namedFunctionType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NAMED_FUNCTION_TYPE',
+      problemMessage: "Function types can't be named.",
+      correctionMessage: "Try replacing the name with the keyword 'Function'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NAMED_FUNCTION_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments namedParameterOutsideGroup =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NAMED_PARAMETER_OUTSIDE_GROUP',
+      problemMessage:
+          "Named parameters must be enclosed in curly braces ('{' and '}').",
+      correctionMessage:
+          "Try surrounding the named parameters in curly braces.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NAMED_PARAMETER_OUTSIDE_GROUP',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nameNotString = DiagnosticWithoutArgumentsImpl(
+  name: 'NAME_NOT_STRING',
+  problemMessage: "The value of the 'name' field is required to be a string.",
+  correctionMessage: "Try converting the value to be a string.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NAME_NOT_STRING',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nativeClauseInNonSdkCode = DiagnosticWithoutArgumentsImpl(
+  name: 'NATIVE_CLAUSE_IN_NON_SDK_CODE',
+  problemMessage:
+      "Native clause can only be used in the SDK and code that is loaded through "
+      "native extensions.",
+  correctionMessage: "Try removing the native clause.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'NATIVE_CLAUSE_IN_NON_SDK_CODE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nativeClauseShouldBeAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
+      problemMessage: "Native clause in this form is deprecated.",
+      correctionMessage:
+          "Try removing this native clause and adding @native() or "
+          "@native('native-name') before the declaration.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NATIVE_CLAUSE_SHOULD_BE_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: The invalid type.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+nativeFieldInvalidType = DiagnosticWithArguments(
+  name: 'NATIVE_FIELD_INVALID_TYPE',
+  problemMessage:
+      "'{0}' is an unsupported type for native fields. Native fields only "
+      "support pointers, arrays or numeric and compound types.",
+  correctionMessage:
+      "Try changing the type in the `@Native` annotation to a numeric FFI "
+      "type, a pointer, array, or a compound class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NATIVE_FIELD_INVALID_TYPE',
+  withArguments: _withArgumentsNativeFieldInvalidType,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nativeFieldMissingType = DiagnosticWithoutArgumentsImpl(
+  name: 'NATIVE_FIELD_MISSING_TYPE',
+  problemMessage:
+      "The native type of this field could not be inferred and must be specified "
+      "in the annotation.",
+  correctionMessage:
+      "Try adding a type parameter extending `NativeType` to the `@Native` "
+      "annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NATIVE_FIELD_MISSING_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nativeFieldNotStatic =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NATIVE_FIELD_NOT_STATIC',
+      problemMessage: "Native fields must be static.",
+      correctionMessage: "Try adding the modifier 'static' to this field.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NATIVE_FIELD_NOT_STATIC',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nativeFunctionBodyInNonSdkCode = DiagnosticWithoutArgumentsImpl(
+  name: 'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
+  problemMessage:
+      "Native functions can only be declared in the SDK and code that is loaded "
+      "through native extensions.",
+  correctionMessage: "Try removing the word 'native'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nativeFunctionMissingType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NATIVE_FUNCTION_MISSING_TYPE',
+      problemMessage:
+          "The native type of this function couldn't be inferred so it must be "
+          "specified in the annotation.",
+      correctionMessage:
+          "Try adding a type parameter extending `NativeType` to the `@Native` "
+          "annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NATIVE_FUNCTION_MISSING_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+negativeVariableDimension = DiagnosticWithoutArgumentsImpl(
+  name: 'NEGATIVE_VARIABLE_DIMENSION',
+  problemMessage:
+      "The variable dimension of a variable-length array must be non-negative.",
+  correctionMessage: "Try using a value that is zero or greater.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NEGATIVE_VARIABLE_DIMENSION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments newConstructorNewName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NEW_CONSTRUCTOR_NEW_NAME',
+      problemMessage:
+          "Constructors declared with the 'new' keyword can't be named 'new'.",
+      correctionMessage:
+          "Try removing the second 'new' or changing it to a different name.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NEW_CONSTRUCTOR_NEW_NAME',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+newConstructorQualifiedName = DiagnosticWithoutArgumentsImpl(
+  name: 'NEW_CONSTRUCTOR_QUALIFIED_NAME',
+  problemMessage:
+      "Constructors declared with the 'new' keyword can't have qualified names.",
+  correctionMessage:
+      "Try removing the class name prefix from the qualified name or "
+      "removing the 'new' keyword.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'NEW_CONSTRUCTOR_QUALIFIED_NAME',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the non-type element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+newWithNonType = DiagnosticWithArguments(
+  name: 'CREATION_WITH_NON_TYPE',
+  problemMessage: "The name '{0}' isn't a class.",
+  correctionMessage: "Try correcting the name to match an existing class.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NEW_WITH_NON_TYPE',
+  withArguments: _withArgumentsNewWithNonType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the
+/// current scope then:
+/// 1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, &hellip;,
+///    a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;,
+///    x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a static warning if
+///    <i>T.id</i> is not the name of a constructor declared by the type
+///    <i>T</i>.
+/// If <i>e</i> of the form <i>new T(a<sub>1</sub>, &hellip;, a<sub>n</sub>,
+/// x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;, x<sub>n+k</sub>:
+/// a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not
+/// declare a constructor with the same name as the declaration of <i>T</i>.
+///
+/// Parameters:
+/// String p0: the name of the class being instantiated
+/// String p1: the name of the constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+newWithUndefinedConstructor = DiagnosticWithArguments(
+  name: 'NEW_WITH_UNDEFINED_CONSTRUCTOR',
+  problemMessage: "The class '{0}' doesn't have a constructor named '{1}'.",
+  correctionMessage:
+      "Try invoking a different constructor, or define a constructor named "
+      "'{1}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NEW_WITH_UNDEFINED_CONSTRUCTOR',
+  withArguments: _withArgumentsNewWithUndefinedConstructor,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the class being instantiated
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+newWithUndefinedConstructorDefault = DiagnosticWithArguments(
+  name: 'NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+  problemMessage: "The class '{0}' doesn't have an unnamed constructor.",
+  correctionMessage:
+      "Try using one of the named constructors defined in '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+  withArguments: _withArgumentsNewWithUndefinedConstructorDefault,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments noAnnotationConstructorArguments =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
+      problemMessage: "Annotation creation must have arguments.",
+      correctionMessage: "Try adding an empty argument list.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the class where override error was detected
+/// String p1: the list of candidate signatures which cannot be combined
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+noCombinedSuperSignature = DiagnosticWithArguments(
+  name: 'NO_COMBINED_SUPER_SIGNATURE',
+  problemMessage:
+      "Can't infer missing types in '{0}' from overridden methods: {1}.",
+  correctionMessage:
+      "Try providing explicit types for this method's parameters and return "
+      "type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NO_COMBINED_SUPER_SIGNATURE',
+  withArguments: _withArgumentsNoCombinedSuperSignature,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the name of the superclass that does not define an implicitly
+///            invoked constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+noDefaultSuperConstructorExplicit = DiagnosticWithArguments(
+  name: 'NO_DEFAULT_SUPER_CONSTRUCTOR',
+  problemMessage:
+      "The superclass '{0}' doesn't have a zero argument constructor.",
+  correctionMessage:
+      "Try declaring a zero argument constructor in '{0}', or explicitly "
+      "invoking a different constructor in '{0}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT',
+  withArguments: _withArgumentsNoDefaultSuperConstructorExplicit,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Type p0: the name of the superclass that does not define an implicitly
+///          invoked constructor
+/// String p1: the name of the subclass that does not contain any explicit
+///            constructors
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required String p1})
+>
+noDefaultSuperConstructorImplicit = DiagnosticWithArguments(
+  name: 'NO_DEFAULT_SUPER_CONSTRUCTOR',
+  problemMessage:
+      "The superclass '{0}' doesn't have a zero argument constructor.",
+  correctionMessage:
+      "Try declaring a zero argument constructor in '{0}', or declaring a "
+      "constructor in {1} that explicitly invokes a constructor in '{0}'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT',
+  withArguments: _withArgumentsNoDefaultSuperConstructorImplicit,
+  expectedTypes: [ExpectedType.type, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the subclass
+/// String p1: the name of the superclass
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+noGenerativeConstructorsInSuperclass = DiagnosticWithArguments(
+  name: 'NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS',
+  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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS',
+  withArguments: _withArgumentsNoGenerativeConstructorsInSuperclass,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the first member
+/// String p1: the name of the second member
+/// String p2: the name of the third member
+/// String p3: the name of the fourth member
+/// int p4: the number of additional missing members that aren't listed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+    required String p3,
+    required int p4,
+  })
+>
+nonAbstractClassInheritsAbstractMemberFivePlus = DiagnosticWithArguments(
+  name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+  problemMessage:
+      "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and {4} "
+      "more.",
+  correctionMessage:
+      "Try implementing the missing methods, or make the class abstract.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
+  withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberFivePlus,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.int,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the first member
+/// String p1: the name of the second member
+/// String p2: the name of the third member
+/// String p3: the name of the fourth member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+    required String p3,
+  })
+>
+nonAbstractClassInheritsAbstractMemberFour = DiagnosticWithArguments(
+  name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+  problemMessage:
+      "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'.",
+  correctionMessage:
+      "Try implementing the missing methods, or make the class abstract.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
+  withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberFour,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonAbstractClassInheritsAbstractMemberOne = DiagnosticWithArguments(
+  name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+  problemMessage: "Missing concrete implementation of '{0}'.",
+  correctionMessage:
+      "Try implementing the missing method, or make the class abstract.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
+  withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberOne,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the first member
+/// String p1: the name of the second member
+/// String p2: the name of the third member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+nonAbstractClassInheritsAbstractMemberThree = DiagnosticWithArguments(
+  name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+  problemMessage:
+      "Missing concrete implementations of '{0}', '{1}', and '{2}'.",
+  correctionMessage:
+      "Try implementing the missing methods, or make the class abstract.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
+  withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberThree,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the first member
+/// String p1: the name of the second member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+nonAbstractClassInheritsAbstractMemberTwo = DiagnosticWithArguments(
+  name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+  problemMessage: "Missing concrete implementations of '{0}' and '{1}'.",
+  correctionMessage:
+      "Try implementing the missing methods, or make the class abstract.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
+  withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberTwo,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonBoolCondition =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_BOOL_CONDITION',
+      problemMessage: "Conditions must have a static type of 'bool'.",
+      correctionMessage: "Try changing the condition.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_BOOL_CONDITION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonBoolExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_BOOL_EXPRESSION',
+      problemMessage: "The expression in an assert must be of type 'bool'.",
+      correctionMessage: "Try changing the expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_BOOL_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonBoolNegationExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_BOOL_NEGATION_EXPRESSION',
+      problemMessage: "A negation operand must have a static type of 'bool'.",
+      correctionMessage: "Try changing the operand to the '!' operator.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_BOOL_NEGATION_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the lexeme of the logical operator
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonBoolOperand = DiagnosticWithArguments(
+  name: 'NON_BOOL_OPERAND',
+  problemMessage:
+      "The operands of the operator '{0}' must be assignable to 'bool'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_BOOL_OPERAND',
+  withArguments: _withArgumentsNonBoolOperand,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantAnnotationConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
+      problemMessage: "Annotation creation can only call a const constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantCaseExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_CASE_EXPRESSION',
+      problemMessage: "Case expressions must be constant.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_CASE_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantCaseExpressionFromDeferredLibrary =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY',
+      problemMessage:
+          "Constant values from a deferred library can't be used as a case "
+          "expression.",
+      correctionMessage:
+          "Try re-writing the switch as a series of if statements, or changing "
+          "the import to not be deferred.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantDefaultValue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_DEFAULT_VALUE',
+      problemMessage:
+          "The default value of an optional parameter must be constant.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_DEFAULT_VALUE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantDefaultValueFromDeferredLibrary =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY',
+      problemMessage:
+          "Constant values from a deferred library can't be used as a default "
+          "parameter value.",
+      correctionMessage:
+          "Try leaving the default as 'null' and initializing the parameter "
+          "inside the function body.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantListElement =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_LIST_ELEMENT',
+      problemMessage: "The values in a const list literal must be constants.",
+      correctionMessage:
+          "Try removing the keyword 'const' from the list literal.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_LIST_ELEMENT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonConstantListElementFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as values in a "
+      "'const' list literal.",
+  correctionMessage:
+      "Try removing the keyword 'const' from the list literal or removing "
+      "the keyword 'deferred' from the import.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantMapElement =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_MAP_ELEMENT',
+      problemMessage: "The elements in a const map literal must be constant.",
+      correctionMessage:
+          "Try removing the keyword 'const' from the map literal.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_MAP_ELEMENT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantMapKey =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_MAP_KEY',
+      problemMessage: "The keys in a const map literal must be constant.",
+      correctionMessage:
+          "Try removing the keyword 'const' from the map literal.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_MAP_KEY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonConstantMapKeyFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as keys in a "
+      "'const' map literal.",
+  correctionMessage:
+      "Try removing the keyword 'const' from the map literal or removing the "
+      "keyword 'deferred' from the import.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantMapPatternKey =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_MAP_PATTERN_KEY',
+      problemMessage: "Key expressions in map patterns must be constants.",
+      correctionMessage: "Try using constants instead.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_MAP_PATTERN_KEY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantMapValue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_MAP_VALUE',
+      problemMessage: "The values in a const map literal must be constant.",
+      correctionMessage:
+          "Try removing the keyword 'const' from the map literal.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_MAP_VALUE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonConstantMapValueFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as values in a "
+      "'const' map literal.",
+  correctionMessage:
+      "Try removing the keyword 'const' from the map literal or removing the "
+      "keyword 'deferred' from the import.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantRecordField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_RECORD_FIELD',
+      problemMessage: "The fields in a const record literal must be constants.",
+      correctionMessage:
+          "Try removing the keyword 'const' from the record literal.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_RECORD_FIELD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonConstantRecordFieldFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as fields in a "
+      "'const' record literal.",
+  correctionMessage:
+      "Try removing the keyword 'const' from the record literal or removing "
+      "the keyword 'deferred' from the import.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantRelationalPatternExpression =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION',
+      problemMessage: "The relational pattern expression must be a constant.",
+      correctionMessage: "Try using a constant instead.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstantSetElement =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTANT_SET_ELEMENT',
+      problemMessage: "The values in a const set literal must be constants.",
+      correctionMessage:
+          "Try removing the keyword 'const' from the set literal.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONSTANT_SET_ELEMENT',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the function, method, or constructor having type
+///            arguments
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonConstantTypeArgument = DiagnosticWithArguments(
+  name: 'NON_CONSTANT_TYPE_ARGUMENT',
+  problemMessage:
+      "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,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_CONSTANT_TYPE_ARGUMENT',
+  withArguments: _withArgumentsNonConstantTypeArgument,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the argument
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonConstArgumentForConstParameter = DiagnosticWithArguments(
+  name: 'NON_CONST_ARGUMENT_FOR_CONST_PARAMETER',
+  problemMessage: "Argument '{0}' must be a constant.",
+  correctionMessage: "Try replacing the argument with a constant.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NON_CONST_ARGUMENT_FOR_CONST_PARAMETER',
+  withArguments: _withArgumentsNonConstArgumentForConstParameter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Generates a warning for non-const instance creation using a constructor
+/// annotated with `@literal`.
+///
+/// Parameters:
+/// String p0: the name of the class defining the annotated constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonConstCallToLiteralConstructor = DiagnosticWithArguments(
+  name: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
+  problemMessage:
+      "This instance creation must be 'const', because the {0} constructor is "
+      "marked as '@literal'.",
+  correctionMessage: "Try adding a 'const' keyword.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
+  withArguments: _withArgumentsNonConstCallToLiteralConstructor,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Generate a warning for non-const instance creation (with the `new` keyword)
+/// using a constructor annotated with `@literal`.
+///
+/// Parameters:
+/// String p0: the name of the class defining the annotated constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonConstCallToLiteralConstructorUsingNew = DiagnosticWithArguments(
+  name: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
+  problemMessage:
+      "This instance creation must be 'const', because the {0} constructor is "
+      "marked as '@literal'.",
+  correctionMessage: "Try replacing the 'new' keyword with 'const'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW',
+  withArguments: _withArgumentsNonConstCallToLiteralConstructorUsingNew,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstGenerativeEnumConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR',
+      problemMessage: "Generative enum constructors must be 'const'.",
+      correctionMessage: "Try adding the keyword 'const'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// 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.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+nonConstMapAsExpressionStatement = DiagnosticWithoutArgumentsImpl(
+  name: 'NON_CONST_MAP_AS_EXPRESSION_STATEMENT',
+  problemMessage:
+      "A non-constant map or set literal without type arguments can't be used as "
+      "an expression statement.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_CONST_MAP_AS_EXPRESSION_STATEMENT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonConstructorFactory =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_CONSTRUCTOR_FACTORY',
+      problemMessage: "Only a constructor can be declared to be a factory.",
+      correctionMessage: "Try removing the keyword 'factory'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NON_CONSTRUCTOR_FACTORY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonCovariantTypeParameterPositionInRepresentationType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE',
+      problemMessage:
+          "An extension type parameter can't be used in a non-covariant position of "
+          "its representation type.",
+      correctionMessage:
+          "Try removing the type parameters from function parameter types and "
+          "type parameter bounds.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName:
+          'NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type type: the type of the switch scrutinee
+/// String unmatchedPattern: the witness pattern for the unmatched value
+/// String suggestedPattern: the suggested pattern for the unmatched value
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType type,
+    required String unmatchedPattern,
+    required String suggestedPattern,
+  })
+>
+nonExhaustiveSwitchExpression = DiagnosticWithArguments(
+  name: 'NON_EXHAUSTIVE_SWITCH_EXPRESSION',
+  problemMessage:
+      "The type '{0}' isn't exhaustively matched by the switch cases since it "
+      "doesn't match the pattern '{1}'.",
+  correctionMessage: "Try adding a wildcard pattern or cases that match '{2}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_EXHAUSTIVE_SWITCH_EXPRESSION',
+  withArguments: _withArgumentsNonExhaustiveSwitchExpression,
+  expectedTypes: [ExpectedType.type, ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type type: the type of the switch scrutinee
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType type})
+>
+nonExhaustiveSwitchExpressionPrivate = DiagnosticWithArguments(
+  name: 'NON_EXHAUSTIVE_SWITCH_EXPRESSION',
+  problemMessage:
+      "The enum '{0}' isn't exhaustively matched by the switch cases because "
+      "some of the enum constants are private.",
+  correctionMessage: "Try adding a wildcard pattern.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_EXHAUSTIVE_SWITCH_EXPRESSION_PRIVATE',
+  withArguments: _withArgumentsNonExhaustiveSwitchExpressionPrivate,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// Parameters:
+/// Type type: the type of the switch scrutinee
+/// String unmatchedPattern: the witness pattern for the unmatched value
+/// String suggestedPattern: the suggested pattern for the unmatched value
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType type,
+    required String unmatchedPattern,
+    required String suggestedPattern,
+  })
+>
+nonExhaustiveSwitchStatement = DiagnosticWithArguments(
+  name: 'NON_EXHAUSTIVE_SWITCH_STATEMENT',
+  problemMessage:
+      "The type '{0}' isn't exhaustively matched by the switch cases since it "
+      "doesn't match the pattern '{1}'.",
+  correctionMessage: "Try adding a default case or cases that match '{2}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_EXHAUSTIVE_SWITCH_STATEMENT',
+  withArguments: _withArgumentsNonExhaustiveSwitchStatement,
+  expectedTypes: [ExpectedType.type, ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type type: the type of the switch scrutinee
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType type})
+>
+nonExhaustiveSwitchStatementPrivate = DiagnosticWithArguments(
+  name: 'NON_EXHAUSTIVE_SWITCH_STATEMENT',
+  problemMessage:
+      "The enum '{0}' isn't exhaustively matched by the switch cases because "
+      "some of the enum constants are private.",
+  correctionMessage: "Try adding a default case.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_EXHAUSTIVE_SWITCH_STATEMENT_PRIVATE',
+  withArguments: _withArgumentsNonExhaustiveSwitchStatementPrivate,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonFinalFieldInEnum =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_FINAL_FIELD_IN_ENUM',
+      problemMessage: "Enums can only declare final fields.",
+      correctionMessage: "Try making the field final.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_FINAL_FIELD_IN_ENUM',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Element p0: the non-generative constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Element p0})
+>
+nonGenerativeConstructor = DiagnosticWithArguments(
+  name: '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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_GENERATIVE_CONSTRUCTOR',
+  withArguments: _withArgumentsNonGenerativeConstructor,
+  expectedTypes: [ExpectedType.element],
+);
+
+/// Parameters:
+/// String p0: the name of the superclass
+/// String p1: the name of the current class
+/// Element p2: the implicitly called factory constructor of the superclass
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required Element p2,
+  })
+>
+nonGenerativeImplicitConstructor = DiagnosticWithArguments(
+  name: 'NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
+  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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
+  withArguments: _withArgumentsNonGenerativeImplicitConstructor,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.element,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonIdentifierLibraryName =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_IDENTIFIER_LIBRARY_NAME',
+      problemMessage: "The name of a library must be an identifier.",
+      correctionMessage: "Try using an identifier as the name of the library.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NON_IDENTIFIER_LIBRARY_NAME',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the type that should be a valid dart:ffi native type.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+nonNativeFunctionTypeArgumentToPointer = DiagnosticWithArguments(
+  name: 'NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER',
+  problemMessage:
+      "Can't invoke 'asFunction' because the function signature '{0}' for the "
+      "pointer isn't a valid C function signature.",
+  correctionMessage:
+      "Try changing the function argument in 'NativeFunction' to only use "
+      "NativeTypes.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER',
+  withArguments: _withArgumentsNonNativeFunctionTypeArgumentToPointer,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonNullableEqualsParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_NULLABLE_EQUALS_PARAMETER',
+      problemMessage:
+          "The parameter type of '==' operators should be non-nullable.",
+      correctionMessage: "Try using a non-nullable type.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'NON_NULLABLE_EQUALS_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonPartOfDirectiveInPart = DiagnosticWithoutArgumentsImpl(
+  name: 'NON_PART_OF_DIRECTIVE_IN_PART',
+  problemMessage: "The part-of directive must be the only directive in a part.",
+  correctionMessage:
+      "Try removing the other directives, or moving them to the library for "
+      "which this is a part.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'NON_PART_OF_DIRECTIVE_IN_PART',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonPositiveArrayDimension =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_POSITIVE_ARRAY_DIMENSION',
+      problemMessage: "Array dimensions must be positive numbers.",
+      correctionMessage: "Try changing the input to a positive number.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_POSITIVE_ARRAY_DIMENSION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nonRedirectingGenerativeConstructorWithPrimary = DiagnosticWithoutArgumentsImpl(
+  name: 'NON_REDIRECTING_GENERATIVE_CONSTRUCTOR_WITH_PRIMARY',
+  problemMessage:
+      "Classes with primary constructors can't have non-redirecting generative "
+      "constructors.",
+  correctionMessage:
+      "Try making the constructor redirect to the primary constructor, or "
+      "remove the primary constructor.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_REDIRECTING_GENERATIVE_CONSTRUCTOR_WITH_PRIMARY',
+  expectedTypes: [],
+);
+
+/// A code indicating that the activity is set to be non resizable.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+nonResizableActivity = DiagnosticWithoutArgumentsImpl(
+  name: 'NON_RESIZABLE_ACTIVITY',
+  problemMessage:
+      "The `<activity>` element should be allowed to be resized to allow users "
+      "to take advantage of the multi-window environment on Chrome OS",
+  correctionMessage:
+      "Consider declaring the corresponding activity element with "
+      "`resizableActivity=\"true\"` attribute.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NON_RESIZABLE_ACTIVITY',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the field
+/// Type p1: the type of the field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+nonSizedTypeArgument = DiagnosticWithArguments(
+  name: 'NON_SIZED_TYPE_ARGUMENT',
+  problemMessage:
+      "The type '{1}' isn't a valid type argument for '{0}'. The type argument "
+      "must be a native integer, 'Float', 'Double', 'Pointer', or subtype of "
+      "'Struct', 'Union', or 'AbiSpecificInteger'.",
+  correctionMessage:
+      "Try using a native integer, 'Float', 'Double', 'Pointer', or subtype "
+      "of 'Struct', 'Union', or 'AbiSpecificInteger'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_SIZED_TYPE_ARGUMENT',
+  withArguments: _withArgumentsNonSizedTypeArgument,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonStringLiteralAsUri =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_STRING_LITERAL_AS_URI',
+      problemMessage: "The URI must be a string literal.",
+      correctionMessage:
+          "Try enclosing the URI in either single or double quotes.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NON_STRING_LITERAL_AS_URI',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonSyncFactory =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_SYNC_FACTORY',
+      problemMessage: "Factory bodies can't use 'async', 'async*', or 'sync*'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_SYNC_FACTORY',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name appearing where a type is expected
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonTypeAsTypeArgument = DiagnosticWithArguments(
+  name: 'NON_TYPE_AS_TYPE_ARGUMENT',
+  problemMessage:
+      "The name '{0}' isn't a type, so it can't be used as a type argument.",
+  correctionMessage:
+      "Try correcting the name to an existing type, or defining a type named "
+      "'{0}'.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_TYPE_AS_TYPE_ARGUMENT',
+  withArguments: _withArgumentsNonTypeAsTypeArgument,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the non-type element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+nonTypeInCatchClause = DiagnosticWithArguments(
+  name: 'NON_TYPE_IN_CATCH_CLAUSE',
+  problemMessage:
+      "The name '{0}' isn't a type and can't be used in an on-catch clause.",
+  correctionMessage: "Try correcting the name to match an existing class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NON_TYPE_IN_CATCH_CLAUSE',
+  withArguments: _withArgumentsNonTypeInCatchClause,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the operator that the user is trying to define
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+nonUserDefinableOperator = DiagnosticWithArguments(
+  name: 'NON_USER_DEFINABLE_OPERATOR',
+  problemMessage: "The operator '{0}' isn't user definable.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'NON_USER_DEFINABLE_OPERATOR',
+  withArguments: _withArgumentsNonUserDefinableOperator,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nonVoidReturnForOperator =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_VOID_RETURN_FOR_OPERATOR',
+      problemMessage: "The return type of the operator []= must be 'void'.",
+      correctionMessage: "Try changing the return type to 'void'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_VOID_RETURN_FOR_OPERATOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nonVoidReturnForSetter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NON_VOID_RETURN_FOR_SETTER',
+      problemMessage: "The return type of the setter must be 'void' or absent.",
+      correctionMessage:
+          "Try removing the return type, or define a method rather than a "
+          "setter.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NON_VOID_RETURN_FOR_SETTER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments normalBeforeOptionalParameters =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
+      problemMessage:
+          "Normal parameters must occur before optional parameters.",
+      correctionMessage:
+          "Try moving all of the normal parameters before the optional "
+          "parameters.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'NORMAL_BEFORE_OPTIONAL_PARAMETERS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the variable that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notAssignedPotentiallyNonNullableLocalVariable = DiagnosticWithArguments(
+  name: 'NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE',
+  problemMessage:
+      "The non-nullable local variable '{0}' must be assigned before it can be "
+      "used.",
+  correctionMessage:
+      "Try giving it an initializer expression, or ensure that it's assigned "
+      "on every execution path.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE',
+  withArguments: _withArgumentsNotAssignedPotentiallyNonNullableLocalVariable,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name that is not a type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notAType = DiagnosticWithArguments(
+  name: 'NOT_A_TYPE',
+  problemMessage: "{0} isn't a type.",
+  correctionMessage: "Try correcting the name to match an existing type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_A_TYPE',
+  withArguments: _withArgumentsNotAType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the operator that is not a binary operator.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notBinaryOperator = DiagnosticWithArguments(
+  name: 'NOT_BINARY_OPERATOR',
+  problemMessage: "'{0}' isn't a binary operator.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_BINARY_OPERATOR',
+  withArguments: _withArgumentsNotBinaryOperator,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// int p0: the expected number of required arguments
+/// int p1: the actual number of positional arguments given
+/// String p2: name of the function or method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required int p0,
+    required int p1,
+    required String p2,
+  })
+>
+notEnoughPositionalArgumentsNamePlural = DiagnosticWithArguments(
+  name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
+  problemMessage: "{0} positional arguments expected by '{2}', but {1} found.",
+  correctionMessage: "Try adding the missing arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL',
+  withArguments: _withArgumentsNotEnoughPositionalArgumentsNamePlural,
+  expectedTypes: [ExpectedType.int, ExpectedType.int, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: name of the function or method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notEnoughPositionalArgumentsNameSingular = DiagnosticWithArguments(
+  name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
+  problemMessage: "1 positional argument expected by '{0}', but 0 found.",
+  correctionMessage: "Try adding the missing argument.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR',
+  withArguments: _withArgumentsNotEnoughPositionalArgumentsNameSingular,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// int p0: the expected number of required arguments
+/// int p1: the actual number of positional arguments given
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required int p0, required int p1})
+>
+notEnoughPositionalArgumentsPlural = DiagnosticWithArguments(
+  name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
+  problemMessage: "{0} positional arguments expected, but {1} found.",
+  correctionMessage: "Try adding the missing arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL',
+  withArguments: _withArgumentsNotEnoughPositionalArgumentsPlural,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments notEnoughPositionalArgumentsSingular =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
+      problemMessage: "1 positional argument expected, but 0 found.",
+      correctionMessage: "Try adding the missing argument.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_SINGULAR',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the field that is not initialized
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notInitializedNonNullableInstanceField = DiagnosticWithArguments(
+  name: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
+  problemMessage: "Non-nullable instance field '{0}' must be initialized.",
+  correctionMessage:
+      "Try adding an initializer expression, or a generative constructor "
+      "that initializes it, or mark it 'late'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
+  withArguments: _withArgumentsNotInitializedNonNullableInstanceField,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the field that is not initialized
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notInitializedNonNullableInstanceFieldConstructor = DiagnosticWithArguments(
+  name: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
+  problemMessage: "Non-nullable instance field '{0}' must be initialized.",
+  correctionMessage:
+      "Try adding an initializer expression, or add a field initializer in "
+      "this constructor, or mark it 'late'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR',
+  withArguments:
+      _withArgumentsNotInitializedNonNullableInstanceFieldConstructor,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the variable that is invalid
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+notInitializedNonNullableVariable = DiagnosticWithArguments(
+  name: 'NOT_INITIALIZED_NON_NULLABLE_VARIABLE',
+  problemMessage: "The non-nullable variable '{0}' must be initialized.",
+  correctionMessage: "Try adding an initializer expression.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_INITIALIZED_NON_NULLABLE_VARIABLE',
+  withArguments: _withArgumentsNotInitializedNonNullableVariable,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments notInstantiatedBound =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NOT_INSTANTIATED_BOUND',
+      problemMessage: "Type parameter bound types must be instantiated.",
+      correctionMessage:
+          "Try adding type arguments to the type parameter bound.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NOT_INSTANTIATED_BOUND',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments notIterableSpread =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NOT_ITERABLE_SPREAD',
+      problemMessage:
+          "Spread elements in list or set literals must implement 'Iterable'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NOT_ITERABLE_SPREAD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments notMapSpread = DiagnosticWithoutArgumentsImpl(
+  name: 'NOT_MAP_SPREAD',
+  problemMessage: "Spread elements in map literals must implement 'Map'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_MAP_SPREAD',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+notNullAwareNullSpread = DiagnosticWithoutArgumentsImpl(
+  name: 'NOT_NULL_AWARE_NULL_SPREAD',
+  problemMessage:
+      "The Null-typed expression can't be used with a non-null-aware spread.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'NOT_NULL_AWARE_NULL_SPREAD',
+  expectedTypes: [],
+);
+
+/// A code indicating that the touchscreen feature is not specified in the
+/// manifest.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+noTouchscreenFeature = DiagnosticWithoutArgumentsImpl(
+  name: 'NO_TOUCHSCREEN_FEATURE',
+  problemMessage:
+      "The default \"android.hardware.touchscreen\" needs to be optional for "
+      "Chrome OS.",
+  correctionMessage:
+      "Consider adding <uses-feature "
+      "android:name=\"android.hardware.touchscreen\" android:required=\"false\" "
+      "/> to the manifest.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NO_TOUCHSCREEN_FEATURE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nullableTypeInCatchClause = DiagnosticWithoutArgumentsImpl(
+  name: 'NULLABLE_TYPE_IN_CATCH_CLAUSE',
+  problemMessage:
+      "A potentially nullable type can't be used in an 'on' clause because it "
+      "isn't valid to throw a nullable expression.",
+  correctionMessage: "Try using a non-nullable type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NULLABLE_TYPE_IN_CATCH_CLAUSE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments nullableTypeInExtendsClause =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NULLABLE_TYPE_IN_EXTENDS_CLAUSE',
+      problemMessage: "A class can't extend a nullable type.",
+      correctionMessage: "Try removing the question mark.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NULLABLE_TYPE_IN_EXTENDS_CLAUSE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nullableTypeInImplementsClause =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE',
+      problemMessage:
+          "A class, mixin, or extension type can't implement a nullable type.",
+      correctionMessage: "Try removing the question mark.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nullableTypeInOnClause =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NULLABLE_TYPE_IN_ON_CLAUSE',
+      problemMessage:
+          "A mixin can't have a nullable type as a superclass constraint.",
+      correctionMessage: "Try removing the question mark.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NULLABLE_TYPE_IN_ON_CLAUSE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments nullableTypeInWithClause =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'NULLABLE_TYPE_IN_WITH_CLAUSE',
+      problemMessage: "A class or mixin can't mix in a nullable type.",
+      correctionMessage: "Try removing the question mark.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'NULLABLE_TYPE_IN_WITH_CLAUSE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the method being invoked
+/// String p1: the type argument associated with the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+nullArgumentToNonNullType = DiagnosticWithArguments(
+  name: 'NULL_ARGUMENT_TO_NON_NULL_TYPE',
+  problemMessage:
+      "'{0}' shouldn't be called with a 'null' argument for the non-nullable "
+      "type argument '{1}'.",
+  correctionMessage: "Try adding a non-null argument.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NULL_ARGUMENT_TO_NON_NULL_TYPE',
+  withArguments: _withArgumentsNullArgumentToNonNullType,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nullAwareCascadeOutOfOrder = DiagnosticWithoutArgumentsImpl(
+  name: 'NULL_AWARE_CASCADE_OUT_OF_ORDER',
+  problemMessage:
+      "The '?..' cascade operator must be first in the cascade sequence.",
+  correctionMessage:
+      "Try moving the '?..' operator to be the first cascade operator in the "
+      "sequence.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'NULL_AWARE_CASCADE_OUT_OF_ORDER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+nullCheckAlwaysFails = DiagnosticWithoutArgumentsImpl(
+  name: 'NULL_CHECK_ALWAYS_FAILS',
+  problemMessage:
+      "This null-check will always throw an exception because the expression "
+      "will always evaluate to 'null'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'NULL_CHECK_ALWAYS_FAILS',
+  expectedTypes: [],
+);
+
+/// 7.9 Superclasses: It is a compile-time error to specify an extends clause
+/// for class Object.
+///
+/// No parameters.
+const DiagnosticWithoutArguments objectCannotExtendAnotherClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OBJECT_CANNOT_EXTEND_ANOTHER_CLASS',
+      problemMessage: "The class 'Object' can't extend any other class.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'OBJECT_CANNOT_EXTEND_ANOTHER_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments obsoleteColonForDefaultValue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OBSOLETE_COLON_FOR_DEFAULT_VALUE',
+      problemMessage:
+          "Using a colon as the separator before a default value is no longer "
+          "supported.",
+      correctionMessage: "Try replacing the colon with an equal sign.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'OBSOLETE_COLON_FOR_DEFAULT_VALUE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the interface that is implemented more than once
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+onRepeated = DiagnosticWithArguments(
+  name: 'ON_REPEATED',
+  problemMessage:
+      "The type '{0}' can be included in the superclass constraints only once.",
+  correctionMessage: "Try removing all except one occurrence of the type name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'ON_REPEATED',
+  withArguments: _withArgumentsOnRepeated,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments optionalParameterInOperator =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OPTIONAL_PARAMETER_IN_OPERATOR',
+      problemMessage:
+          "Optional parameters aren't allowed when defining an operator.",
+      correctionMessage: "Try removing the optional parameters.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'OPTIONAL_PARAMETER_IN_OPERATOR',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String string: undocumented
+/// String string2: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String string,
+    required String string2,
+  })
+>
+outOfOrderClauses = DiagnosticWithArguments(
+  name: 'OUT_OF_ORDER_CLAUSES',
+  problemMessage: "The '{0}' clause must come before the '{1}' clause.",
+  correctionMessage: "Try moving the '{0}' clause before the '{1}' clause.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'OUT_OF_ORDER_CLAUSES',
+  withArguments: _withArgumentsOutOfOrderClauses,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// A field with the override annotation does not override a getter or setter.
+///
+/// No parameters.
+const DiagnosticWithoutArguments overrideOnNonOverridingField =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
+      problemMessage:
+          "The field doesn't override an inherited getter or setter.",
+      correctionMessage:
+          "Try updating this class to match the superclass, or removing the "
+          "override annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_FIELD',
+      expectedTypes: [],
+    );
+
+/// A getter with the override annotation does not override an existing getter.
+///
+/// No parameters.
+const DiagnosticWithoutArguments overrideOnNonOverridingGetter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
+      problemMessage: "The getter doesn't override an inherited getter.",
+      correctionMessage:
+          "Try updating this class to match the superclass, or removing the "
+          "override annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_GETTER',
+      expectedTypes: [],
+    );
+
+/// A method with the override annotation does not override an existing method.
+///
+/// No parameters.
+const DiagnosticWithoutArguments overrideOnNonOverridingMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
+      problemMessage: "The method doesn't override an inherited method.",
+      correctionMessage:
+          "Try updating this class to match the superclass, or removing the "
+          "override annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_METHOD',
+      expectedTypes: [],
+    );
+
+/// A setter with the override annotation does not override an existing setter.
+///
+/// No parameters.
+const DiagnosticWithoutArguments overrideOnNonOverridingSetter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
+      problemMessage: "The setter doesn't override an inherited setter.",
+      correctionMessage:
+          "Try updating this class to match the superclass, or removing the "
+          "override annotation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_SETTER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments packedAnnotation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'PACKED_ANNOTATION',
+      problemMessage: "Structs must have at most one 'Packed' annotation.",
+      correctionMessage: "Try removing extra 'Packed' annotations.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'PACKED_ANNOTATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+packedAnnotationAlignment = DiagnosticWithoutArgumentsImpl(
+  name: 'PACKED_ANNOTATION_ALIGNMENT',
+  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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PACKED_ANNOTATION_ALIGNMENT',
+  expectedTypes: [],
+);
+
+/// An error code indicating that there is a syntactic error in the file.
+///
+/// Parameters:
+/// Object p0: the error message from the parse error
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+parseError = DiagnosticWithArguments(
+  name: 'PARSE_ERROR',
+  problemMessage: "{0}",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PARSE_ERROR',
+  withArguments: _withArgumentsParseError,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of expected library name
+/// String p1: the non-matching actual library name from the "part of"
+///            declaration
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+partOfDifferentLibrary = DiagnosticWithArguments(
+  name: 'PART_OF_DIFFERENT_LIBRARY',
+  problemMessage: "Expected this library to be part of '{0}', not '{1}'.",
+  correctionMessage:
+      "Try including a different part, or changing the name of the library "
+      "in the part's part-of directive.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PART_OF_DIFFERENT_LIBRARY',
+  withArguments: _withArgumentsPartOfDifferentLibrary,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments partOfName = DiagnosticWithoutArgumentsImpl(
+  name: 'PART_OF_NAME',
+  problemMessage:
+      "The 'part of' directive can't use a name with the enhanced-parts feature.",
+  correctionMessage: "Try using 'part of' with a URI instead.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'PART_OF_NAME',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the URI pointing to a non-library declaration
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+partOfNonPart = DiagnosticWithArguments(
+  name: 'PART_OF_NON_PART',
+  problemMessage: "The included part '{0}' must have a part-of directive.",
+  correctionMessage: "Try adding a part-of directive to '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PART_OF_NON_PART',
+  withArguments: _withArgumentsPartOfNonPart,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the non-matching actual library name from the "part of"
+///            declaration
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+partOfUnnamedLibrary = DiagnosticWithArguments(
+  name: 'PART_OF_UNNAMED_LIBRARY',
+  problemMessage:
+      "The library is unnamed. A URI is expected, not a library name '{0}', in "
+      "the part-of directive.",
+  correctionMessage:
+      "Try changing the part-of directive to a URI, or try including a "
+      "different part.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PART_OF_UNNAMED_LIBRARY',
+  withArguments: _withArgumentsPartOfUnnamedLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the path to the dependency as given in the file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+pathDoesNotExist = DiagnosticWithArguments(
+  name: 'PATH_DOES_NOT_EXIST',
+  problemMessage: "The path '{0}' doesn't exist.",
+  correctionMessage:
+      "Try creating the referenced path or using a path that exists.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'PATH_DOES_NOT_EXIST',
+  withArguments: _withArgumentsPathDoesNotExist,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the path as given in the file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+pathNotPosix = DiagnosticWithArguments(
+  name: 'PATH_NOT_POSIX',
+  problemMessage: "The path '{0}' isn't a POSIX-style path.",
+  correctionMessage: "Try converting the value to a POSIX-style path.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'PATH_NOT_POSIX',
+  withArguments: _withArgumentsPathNotPosix,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the path to the dependency as given in the file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+pathPubspecDoesNotExist = DiagnosticWithArguments(
+  name: 'PATH_PUBSPEC_DOES_NOT_EXIST',
+  problemMessage: "The directory '{0}' doesn't contain a pubspec.",
+  correctionMessage:
+      "Try creating a pubspec in the referenced directory or using a path "
+      "that has a pubspec.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'PATH_PUBSPEC_DOES_NOT_EXIST',
+  withArguments: _withArgumentsPathPubspecDoesNotExist,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Name name: undocumented
+const DiagnosticCode patternAssignmentDeclaresVariable =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'PATTERN_ASSIGNMENT_DECLARES_VARIABLE',
+      problemMessage:
+          "Variable '{0}' can't be declared in a pattern assignment.",
+      correctionMessage:
+          "Try using a preexisting variable or changing the assignment to a "
+          "pattern variable declaration.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'PATTERN_ASSIGNMENT_DECLARES_VARIABLE',
+      expectedTypes: [ExpectedType.name],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments patternAssignmentNotLocalVariable =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE',
+      problemMessage:
+          "Only local variables can be assigned in pattern assignments.",
+      correctionMessage: "Try assigning to a local variable.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments patternConstantFromDeferredLibrary =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY',
+      problemMessage:
+          "Constant values from a deferred library can't be used in patterns.",
+      correctionMessage: "Try removing the keyword 'deferred' from the import.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Type p0: the matched value type
+/// Type p1: the required pattern type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+patternNeverMatchesValueType = DiagnosticWithArguments(
+  name: 'PATTERN_NEVER_MATCHES_VALUE_TYPE',
+  problemMessage:
+      "The matched value type '{0}' can never match the required type '{1}'.",
+  correctionMessage: "Try using a different pattern.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'PATTERN_NEVER_MATCHES_VALUE_TYPE',
+  withArguments: _withArgumentsPatternNeverMatchesValueType,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the matched type
+/// Type p1: the required type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+patternTypeMismatchInIrrefutableContext = DiagnosticWithArguments(
+  name: 'PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT',
+  problemMessage:
+      "The matched value of type '{0}' isn't assignable to the required type "
+      "'{1}'.",
+  correctionMessage:
+      "Try changing the required type of the pattern, or the matched value "
+      "type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT',
+  withArguments: _withArgumentsPatternTypeMismatchInIrrefutableContext,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+patternVariableAssignmentInsideGuard = DiagnosticWithoutArgumentsImpl(
+  name: 'PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD',
+  problemMessage:
+      "Pattern variables can't be assigned inside the guard of the enclosing "
+      "guarded pattern.",
+  correctionMessage: "Try assigning to a different variable.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD',
+  expectedTypes: [],
+);
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+patternVariableDeclarationOutsideFunctionOrMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'PATTERN_VARIABLE_DECLARATION_OUTSIDE_FUNCTION_OR_METHOD',
+      problemMessage:
+          "A pattern variable declaration may not appear outside a function or "
+          "method.",
+      correctionMessage:
+          "Try declaring ordinary variables and assigning from within a function "
+          "or method.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'PATTERN_VARIABLE_DECLARATION_OUTSIDE_FUNCTION_OR_METHOD',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the pattern variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+patternVariableSharedCaseScopeDifferentFinalityOrType = DiagnosticWithArguments(
+  name: 'INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE',
+  problemMessage:
+      "The variable '{0}' doesn't have the same type and/or finality in all "
+      "cases that share this body.",
+  correctionMessage:
+      "Try declaring the variable pattern with the same type and finality in "
+      "all cases.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE',
+  withArguments:
+      _withArgumentsPatternVariableSharedCaseScopeDifferentFinalityOrType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the pattern variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+patternVariableSharedCaseScopeHasLabel = DiagnosticWithArguments(
+  name: 'INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE',
+  problemMessage:
+      "The variable '{0}' is not available because there is a label or 'default' "
+      "case.",
+  correctionMessage:
+      "Try removing the label, or providing the 'default' case with its own "
+      "body.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL',
+  withArguments: _withArgumentsPatternVariableSharedCaseScopeHasLabel,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the pattern variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+patternVariableSharedCaseScopeNotAllCases = DiagnosticWithArguments(
+  name: 'INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE',
+  problemMessage:
+      "The variable '{0}' is available in some, but not all cases that share "
+      "this body.",
+  correctionMessage:
+      "Try declaring the variable pattern with the same type and finality in "
+      "all cases.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES',
+  withArguments: _withArgumentsPatternVariableSharedCaseScopeNotAllCases,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// A code indicating that a specified permission is not supported on Chrome
+/// OS.
+///
+/// Parameters:
+/// Object p0: the name of the feature tag
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+permissionImpliesUnsupportedHardware = DiagnosticWithArguments(
+  name: 'PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE',
+  problemMessage:
+      "Permission makes app incompatible for Chrome OS, consider adding optional "
+      "{0} feature tag,",
+  correctionMessage:
+      " Try adding `<uses-feature android:name=\"{0}\"  "
+      "android:required=\"false\">`.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE',
+  withArguments: _withArgumentsPermissionImpliesUnsupportedHardware,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments platformValueDisallowed =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'PLATFORM_VALUE_DISALLOWED',
+      problemMessage: "Keys in the `platforms` field can't have values.",
+      correctionMessage: "Try removing the value, while keeping the key.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'PLATFORM_VALUE_DISALLOWED',
+      expectedTypes: [],
+    );
+
+/// An error code indicating plugins have been specified in an "inner"
+/// analysis options file.
+///
+/// Parameters:
+/// String contextRoot: the root of the analysis context
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String contextRoot})
+>
+pluginsInInnerOptions = DiagnosticWithArguments(
+  name: 'PLUGINS_IN_INNER_OPTIONS',
+  problemMessage:
+      "Plugins can only be specified in the root of a pub workspace or the root "
+      "of a package that isn't in a workspace.",
+  correctionMessage:
+      "Try specifying plugins in an analysis options file at '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'PLUGINS_IN_INNER_OPTIONS',
+  withArguments: _withArgumentsPluginsInInnerOptions,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments positionalAfterNamedArgument =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'POSITIONAL_AFTER_NAMED_ARGUMENT',
+      problemMessage: "Positional arguments must occur before named arguments.",
+      correctionMessage:
+          "Try moving all of the positional arguments before the named "
+          "arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'POSITIONAL_AFTER_NAMED_ARGUMENT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments positionalFieldInObjectPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'POSITIONAL_FIELD_IN_OBJECT_PATTERN',
+      problemMessage: "Object patterns can only use named fields.",
+      correctionMessage: "Try specifying the field name.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'POSITIONAL_FIELD_IN_OBJECT_PATTERN',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+positionalParameterOutsideGroup = DiagnosticWithoutArgumentsImpl(
+  name: 'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
+  problemMessage:
+      "Positional parameters must be enclosed in square brackets ('[' and ']').",
+  correctionMessage:
+      "Try surrounding the positional parameters in square brackets.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'POSITIONAL_PARAMETER_OUTSIDE_GROUP',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+positionalSuperFormalParameterWithPositionalArgument =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT',
+      problemMessage:
+          "Positional super parameters can't be used when the super constructor "
+          "invocation has a positional argument.",
+      correctionMessage:
+          "Try making all the positional parameters passed to the super "
+          "constructor be either all super parameters or all normal parameters.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+prefixAfterCombinator = DiagnosticWithoutArgumentsImpl(
+  name: 'PREFIX_AFTER_COMBINATOR',
+  problemMessage:
+      "The prefix ('as' clause) should come before any show/hide combinators.",
+  correctionMessage: "Try moving the prefix before the combinators.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'PREFIX_AFTER_COMBINATOR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the name of the prefix
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+prefixCollidesWithTopLevelMember = DiagnosticWithArguments(
+  name: 'PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
+  problemMessage:
+      "The name '{0}' is already used as an import prefix and can't be used to "
+      "name a top-level element.",
+  correctionMessage: "Try renaming either the top-level element or the prefix.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
+  withArguments: _withArgumentsPrefixCollidesWithTopLevelMember,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the prefix
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+prefixIdentifierNotFollowedByDot = DiagnosticWithArguments(
+  name: 'PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT',
+  problemMessage:
+      "The name '{0}' refers to an import prefix, so it must be followed by '.'.",
+  correctionMessage:
+      "Try correcting the name to refer to something other than a prefix, or "
+      "renaming the prefix.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT',
+  withArguments: _withArgumentsPrefixIdentifierNotFollowedByDot,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the prefix being shadowed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+prefixShadowedByLocalDeclaration = DiagnosticWithArguments(
+  name: 'PREFIX_SHADOWED_BY_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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PREFIX_SHADOWED_BY_LOCAL_DECLARATION',
+  withArguments: _withArgumentsPrefixShadowedByLocalDeclaration,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the private name that collides
+/// String p1: the name of the first mixin
+/// String p2: the name of the second mixin
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+privateCollisionInMixinApplication = DiagnosticWithArguments(
+  name: '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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PRIVATE_COLLISION_IN_MIXIN_APPLICATION',
+  withArguments: _withArgumentsPrivateCollisionInMixinApplication,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+privateNamedNonFieldParameter = DiagnosticWithoutArgumentsImpl(
+  name: 'PRIVATE_NAMED_NON_FIELD_PARAMETER',
+  problemMessage:
+      "Named parameters that don't refer to instance variables can't start with "
+      "underscore.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'PRIVATE_NAMED_NON_FIELD_PARAMETER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String publicName: the corresponding public name of private named
+///                    parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String publicName})
+>
+privateNamedParameterDuplicatePublicName = DiagnosticWithArguments(
+  name: 'PRIVATE_NAMED_PARAMETER_DUPLICATE_PUBLIC_NAME',
+  problemMessage:
+      "The corresponding public name '{0}' is already the name of another "
+      "parameter.",
+  correctionMessage: "Try renaming one of the parameters.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PRIVATE_NAMED_PARAMETER_DUPLICATE_PUBLIC_NAME',
+  withArguments: _withArgumentsPrivateNamedParameterDuplicatePublicName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+privateNamedParameterWithoutPublicName = DiagnosticWithoutArgumentsImpl(
+  name: 'PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME',
+  problemMessage:
+      "A private named parameter must be a public identifier after removing the "
+      "leading underscore.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments privateOptionalParameter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'PRIVATE_OPTIONAL_PARAMETER',
+      problemMessage: "Named parameters can't start with an underscore.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'PRIVATE_OPTIONAL_PARAMETER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the setter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+privateSetter = DiagnosticWithArguments(
+  name: 'PRIVATE_SETTER',
+  problemMessage:
+      "The setter '{0}' is private and can't be accessed outside the library "
+      "that declares it.",
+  correctionMessage: "Try making it public.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'PRIVATE_SETTER',
+  withArguments: _withArgumentsPrivateSetter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+readPotentiallyUnassignedFinal = DiagnosticWithArguments(
+  name: 'READ_POTENTIALLY_UNASSIGNED_FINAL',
+  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,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'READ_POTENTIALLY_UNASSIGNED_FINAL',
+  withArguments: _withArgumentsReadPotentiallyUnassignedFinal,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// It is not an error to call or tear-off a method, setter, or getter, or to
+/// read or write a field, on a receiver of static type `Never`.
+/// Implementations that provide feedback about dead or unreachable code are
+/// encouraged to indicate that any arguments to the invocation are
+/// unreachable.
+///
+/// It is not an error to apply an expression of type `Never` in the function
+/// position of a function call. Implementations that provide feedback about
+/// dead or unreachable code are encouraged to indicate that any arguments to
+/// the call are unreachable.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+receiverOfTypeNever = DiagnosticWithoutArgumentsImpl(
+  name: 'RECEIVER_OF_TYPE_NEVER',
+  problemMessage:
+      "The receiver is of type 'Never', and will never complete with a value.",
+  correctionMessage:
+      "Try checking for throw expressions or type errors in the receiver",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'RECEIVER_OF_TYPE_NEVER',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+recordLiteralOnePositionalNoTrailingComma = DiagnosticWithoutArgumentsImpl(
+  name: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA',
+  problemMessage:
+      "A record literal with exactly one positional field requires a trailing "
+      "comma.",
+  correctionMessage: "Try adding a trailing comma.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA',
+  expectedTypes: [],
+);
+
+/// This is similar to
+/// ParserErrorCode.recordLiteralOnePositionalNoTrailingComma, but
+/// it is reported at type analysis time, based on a type
+/// incompatibility, rather than at parse time.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+recordLiteralOnePositionalNoTrailingCommaByType = DiagnosticWithoutArgumentsImpl(
+  name: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA',
+  problemMessage:
+      "A record literal with exactly one positional field requires a trailing "
+      "comma.",
+  correctionMessage: "Try adding a trailing comma.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA_BY_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments recordTypeOnePositionalNoTrailingComma =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RECORD_TYPE_ONE_POSITIONAL_NO_TRAILING_COMMA',
+      problemMessage:
+          "A record type with exactly one positional field requires a trailing "
+          "comma.",
+      correctionMessage: "Try adding a trailing comma.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'RECORD_TYPE_ONE_POSITIONAL_NO_TRAILING_COMMA',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments recursiveCompileTimeConstant =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RECURSIVE_COMPILE_TIME_CONSTANT',
+      problemMessage: "The compile-time constant expression depends on itself.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'RECURSIVE_COMPILE_TIME_CONSTANT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments recursiveConstantConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RECURSIVE_CONSTANT_CONSTRUCTOR',
+      problemMessage: "The constant constructor depends on itself.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'RECURSIVE_CONSTANT_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// TODO(scheglov): review this later, there are no explicit "it is a
+/// compile-time error" in specification. But it was added to the co19 and
+/// there is same error for factories.
+///
+/// https://code.google.com/p/dart/issues/detail?id=954
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+recursiveConstructorRedirect = DiagnosticWithoutArgumentsImpl(
+  name: 'RECURSIVE_CONSTRUCTOR_REDIRECT',
+  problemMessage:
+      "Constructors can't redirect to themselves either directly or indirectly.",
+  correctionMessage:
+      "Try changing one of the constructors in the loop to not redirect.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_CONSTRUCTOR_REDIRECT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+recursiveFactoryRedirect = DiagnosticWithoutArgumentsImpl(
+  name: 'RECURSIVE_CONSTRUCTOR_REDIRECT',
+  problemMessage:
+      "Constructors can't redirect to themselves either directly or indirectly.",
+  correctionMessage:
+      "Try changing one of the constructors in the loop to not redirect.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_FACTORY_REDIRECT',
+  expectedTypes: [],
+);
+
+/// An error code indicating a specified include file includes itself recursively.
+///
+/// Parameters:
+/// Object p0: the URI of the file to be included
+/// Object p1: the path of the file containing the include directive
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+recursiveIncludeFile = DiagnosticWithArguments(
+  name: 'RECURSIVE_INCLUDE_FILE',
+  problemMessage:
+      "The include file '{0}' in '{1}' includes itself recursively.",
+  correctionMessage:
+      "Try changing the chain of 'include's to not re-include this file.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'RECURSIVE_INCLUDE_FILE',
+  withArguments: _withArgumentsRecursiveIncludeFile,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the class that implements itself recursively
+/// String p1: a string representation of the implements loop
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+recursiveInterfaceInheritance = DiagnosticWithArguments(
+  name: 'RECURSIVE_INTERFACE_INHERITANCE',
+  problemMessage: "'{0}' can't be a superinterface of itself: {1}.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE',
+  withArguments: _withArgumentsRecursiveInterfaceInheritance,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// 7.10 Superinterfaces: It is a compile-time error if the interface of a
+/// class <i>C</i> is a superinterface of itself.
+///
+/// 8.1 Superinterfaces: It is a compile-time error if an interface is a
+/// superinterface of itself.
+///
+/// 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
+/// superclass of itself.
+///
+/// Parameters:
+/// String p0: the name of the class that implements itself recursively
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+recursiveInterfaceInheritanceExtends = DiagnosticWithArguments(
+  name: 'RECURSIVE_INTERFACE_INHERITANCE',
+  problemMessage: "'{0}' can't extend itself.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_EXTENDS',
+  withArguments: _withArgumentsRecursiveInterfaceInheritanceExtends,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// 7.10 Superinterfaces: It is a compile-time error if the interface of a
+/// class <i>C</i> is a superinterface of itself.
+///
+/// 8.1 Superinterfaces: It is a compile-time error if an interface is a
+/// superinterface of itself.
+///
+/// 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
+/// superclass of itself.
+///
+/// Parameters:
+/// String p0: the name of the class that implements itself recursively
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+recursiveInterfaceInheritanceImplements = DiagnosticWithArguments(
+  name: 'RECURSIVE_INTERFACE_INHERITANCE',
+  problemMessage: "'{0}' can't implement itself.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS',
+  withArguments: _withArgumentsRecursiveInterfaceInheritanceImplements,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the mixin that constraints itself recursively
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+recursiveInterfaceInheritanceOn = DiagnosticWithArguments(
+  name: 'RECURSIVE_INTERFACE_INHERITANCE',
+  problemMessage: "'{0}' can't use itself as a superclass constraint.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_ON',
+  withArguments: _withArgumentsRecursiveInterfaceInheritanceOn,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// 7.10 Superinterfaces: It is a compile-time error if the interface of a
+/// class <i>C</i> is a superinterface of itself.
+///
+/// 8.1 Superinterfaces: It is a compile-time error if an interface is a
+/// superinterface of itself.
+///
+/// 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
+/// superclass of itself.
+///
+/// Parameters:
+/// String p0: the name of the class that implements itself recursively
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+recursiveInterfaceInheritanceWith = DiagnosticWithArguments(
+  name: 'RECURSIVE_INTERFACE_INHERITANCE',
+  problemMessage: "'{0}' can't use itself as a mixin.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_WITH',
+  withArguments: _withArgumentsRecursiveInterfaceInheritanceWith,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// An error code indicating the use of a redeclare annotation on a member that does not redeclare.
+///
+/// Parameters:
+/// String p0: the kind of member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+redeclareOnNonRedeclaringMember = DiagnosticWithArguments(
+  name: 'REDECLARE_ON_NON_REDECLARING_MEMBER',
+  problemMessage:
+      "The {0} doesn't redeclare a {0} declared in a superinterface.",
+  correctionMessage:
+      "Try updating this member to match a declaration in a superinterface, "
+      "or removing the redeclare annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'REDECLARE_ON_NON_REDECLARING_MEMBER',
+  withArguments: _withArgumentsRedeclareOnNonRedeclaringMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor
+/// String p1: the name of the class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+redirectGenerativeToMissingConstructor = DiagnosticWithArguments(
+  name: 'REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
+  problemMessage: "The constructor '{0}' couldn't be found in '{1}'.",
+  correctionMessage:
+      "Try redirecting to a different constructor, or defining the "
+      "constructor named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
+  withArguments: _withArgumentsRedirectGenerativeToMissingConstructor,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments redirectGenerativeToNonGenerativeConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR',
+      problemMessage:
+          "Generative constructors can't redirect to a factory constructor.",
+      correctionMessage: "Try redirecting to a different constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+redirectingConstructorWithBody = DiagnosticWithoutArgumentsImpl(
+  name: 'REDIRECTING_CONSTRUCTOR_WITH_BODY',
+  problemMessage: "Redirecting constructors can't have a body.",
+  correctionMessage:
+      "Try removing the body, or not making this a redirecting constructor.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'REDIRECTING_CONSTRUCTOR_WITH_BODY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments redirectionInNonFactoryConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
+      problemMessage: "Only factory constructor can specify '=' redirection.",
+      correctionMessage:
+          "Try making this a factory constructor, or remove the redirection.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the redirecting constructor
+/// String p1: the name of the abstract class defining the constructor being
+///            redirected to
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+redirectToAbstractClassConstructor = DiagnosticWithArguments(
+  name: 'REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR',
+  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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR',
+  withArguments: _withArgumentsRedirectToAbstractClassConstructor,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the name of the redirected constructor
+/// Type p1: the name of the redirecting constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+redirectToInvalidFunctionType = DiagnosticWithArguments(
+  name: 'REDIRECT_TO_INVALID_FUNCTION_TYPE',
+  problemMessage:
+      "The redirected constructor '{0}' has incompatible parameters with '{1}'.",
+  correctionMessage: "Try redirecting to a different constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_TO_INVALID_FUNCTION_TYPE',
+  withArguments: _withArgumentsRedirectToInvalidFunctionType,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the name of the redirected constructor's return type
+/// Type p1: the name of the redirecting constructor's return type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+redirectToInvalidReturnType = DiagnosticWithArguments(
+  name: 'REDIRECT_TO_INVALID_RETURN_TYPE',
+  problemMessage:
+      "The return type '{0}' of the redirected constructor isn't a subtype of "
+      "'{1}'.",
+  correctionMessage: "Try redirecting to a different constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_TO_INVALID_RETURN_TYPE',
+  withArguments: _withArgumentsRedirectToInvalidReturnType,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor
+/// Type p1: the name of the class containing the constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+redirectToMissingConstructor = DiagnosticWithArguments(
+  name: 'REDIRECT_TO_MISSING_CONSTRUCTOR',
+  problemMessage: "The constructor '{0}' couldn't be found in '{1}'.",
+  correctionMessage:
+      "Try redirecting to a different constructor, or define the constructor "
+      "named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_TO_MISSING_CONSTRUCTOR',
+  withArguments: _withArgumentsRedirectToMissingConstructor,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the non-type referenced in the redirect
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+redirectToNonClass = DiagnosticWithArguments(
+  name: '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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_TO_NON_CLASS',
+  withArguments: _withArgumentsRedirectToNonClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments redirectToNonConstConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'REDIRECT_TO_NON_CONST_CONSTRUCTOR',
+      problemMessage:
+          "A constant redirecting constructor can't redirect to a non-constant "
+          "constructor.",
+      correctionMessage: "Try redirecting to a different constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'REDIRECT_TO_NON_CONST_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+redirectToTypeAliasExpandsToTypeParameter = DiagnosticWithoutArgumentsImpl(
+  name: 'REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+  problemMessage:
+      "A redirecting constructor can't redirect to a type alias that expands to "
+      "a type parameter.",
+  correctionMessage: "Try replacing it with a class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the name of the variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+referencedBeforeDeclaration = DiagnosticWithArguments(
+  name: 'REFERENCED_BEFORE_DECLARATION',
+  problemMessage:
+      "Local variable '{0}' can't be referenced before it is declared.",
+  correctionMessage:
+      "Try moving the declaration to before the first use, or renaming the "
+      "local variable so that it doesn't hide a name from an enclosing "
+      "scope.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REFERENCED_BEFORE_DECLARATION',
+  withArguments: _withArgumentsReferencedBeforeDeclaration,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+refutablePatternInIrrefutableContext = DiagnosticWithoutArgumentsImpl(
+  name: 'REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT',
+  problemMessage: "Refutable patterns can't be used in an irrefutable context.",
+  correctionMessage:
+      "Try using an if-case, a 'switch' statement, or a 'switch' expression "
+      "instead.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the operand type
+/// Type p1: the parameter type of the invoked operator
+/// String p2: the name of the invoked operator
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required String p2,
+  })
+>
+relationalPatternOperandTypeNotAssignable = DiagnosticWithArguments(
+  name: 'RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The constant expression type '{0}' is not assignable to the parameter "
+      "type '{1}' of the '{2}' operator.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsRelationalPatternOperandTypeNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+relationalPatternOperatorReturnTypeNotAssignableToBool =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL',
+      problemMessage:
+          "The return type of operators used in relational patterns must be "
+          "assignable to 'bool'.",
+      correctionMessage:
+          "Try updating the operator declaration to return 'bool'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName:
+          'RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL',
+      expectedTypes: [],
+    );
+
+/// An error code indicating a removed lint rule.
+///
+/// Parameters:
+/// String p0: the rule name
+/// String p1: the SDK version in which the lint was removed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+removedLint = DiagnosticWithArguments(
+  name: 'REMOVED_LINT',
+  problemMessage: "'{0}' was removed in Dart '{1}'",
+  correctionMessage: "Remove the reference to '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'REMOVED_LINT',
+  withArguments: _withArgumentsRemovedLint,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// An error code indicating use of a removed lint rule.
+///
+/// Parameters:
+/// Object p0: the rule name
+/// Object p1: the SDK version in which the lint was removed
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+removedLintUse = DiagnosticWithArguments(
+  name: 'REMOVED_LINT_USE',
+  problemMessage: "'{0}' was removed in Dart '{1}'",
+  correctionMessage: "Remove the reference to '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'REMOVED_LINT_USE',
+  withArguments: _withArgumentsRemovedLintUse,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// An error code indicating a removed lint rule.
+///
+/// Parameters:
+/// String p0: the rule name
+/// String p1: the SDK version in which the lint was removed
+/// String p2: the name of a replacing lint
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+replacedLint = DiagnosticWithArguments(
+  name: 'REPLACED_LINT',
+  problemMessage: "'{0}' was replaced by '{2}' in Dart '{1}'.",
+  correctionMessage: "Replace '{0}' with '{1}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'REPLACED_LINT',
+  withArguments: _withArgumentsReplacedLint,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// An error code indicating use of a removed lint rule.
+///
+/// Parameters:
+/// Object p0: the rule name
+/// Object p1: the SDK version in which the lint was removed
+/// Object p2: the name of a replacing lint
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+replacedLintUse = DiagnosticWithArguments(
+  name: 'REPLACED_LINT_USE',
+  problemMessage: "'{0}' was replaced by '{2}' in Dart '{1}'.",
+  correctionMessage: "Replace '{0}' with '{1}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'REPLACED_LINT_USE',
+  withArguments: _withArgumentsReplacedLintUse,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments representationFieldModifier =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'REPRESENTATION_FIELD_MODIFIER',
+      problemMessage: "Representation fields can't have modifiers.",
+      correctionMessage: "Try removing the modifier.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'REPRESENTATION_FIELD_MODIFIER',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments representationFieldTrailingComma =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'REPRESENTATION_FIELD_TRAILING_COMMA',
+      problemMessage: "The representation field can't have a trailing comma.",
+      correctionMessage: "Try removing the trailing comma.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'REPRESENTATION_FIELD_TRAILING_COMMA',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments restElementInMapPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'REST_ELEMENT_IN_MAP_PATTERN',
+      problemMessage: "A map pattern can't contain a rest pattern.",
+      correctionMessage: "Try removing the rest pattern.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'REST_ELEMENT_IN_MAP_PATTERN',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments rethrowOutsideCatch =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RETHROW_OUTSIDE_CATCH',
+      problemMessage: "A rethrow must be inside of a catch clause.",
+      correctionMessage:
+          "Try moving the expression into a catch clause, or using a 'throw' "
+          "expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'RETHROW_OUTSIDE_CATCH',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments returnInGenerativeConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RETURN_IN_GENERATIVE_CONSTRUCTOR',
+      problemMessage: "Constructors can't return values.",
+      correctionMessage:
+          "Try removing the return statement or using a factory constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'RETURN_IN_GENERATIVE_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+returnInGenerator = DiagnosticWithoutArgumentsImpl(
+  name: 'RETURN_IN_GENERATOR',
+  problemMessage:
+      "Can't return a value from a generator function that uses the 'async*' or "
+      "'sync*' modifier.",
+  correctionMessage:
+      "Try replacing 'return' with 'yield', using a block function body, or "
+      "changing the method body modifier.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RETURN_IN_GENERATOR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the annotated function being invoked
+/// String p1: the name of the function containing the return
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+returnOfDoNotStore = DiagnosticWithArguments(
+  name: 'RETURN_OF_DO_NOT_STORE',
+  problemMessage:
+      "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless "
+      "'{1}' is also annotated.",
+  correctionMessage: "Annotate '{1}' with 'doNotStore'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'RETURN_OF_DO_NOT_STORE',
+  withArguments: _withArgumentsReturnOfDoNotStore,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the return type as declared in the return statement
+/// Type p1: the expected return type as defined by the type of the Future
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+returnOfInvalidTypeFromCatchError = DiagnosticWithArguments(
+  name: 'INVALID_RETURN_TYPE_FOR_CATCH_ERROR',
+  problemMessage:
+      "A value of type '{0}' can't be returned by the 'onError' handler because "
+      "it must be assignable to '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR',
+  withArguments: _withArgumentsReturnOfInvalidTypeFromCatchError,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the return type as declared in the return statement
+/// Type p1: the expected return type as defined by the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+returnOfInvalidTypeFromClosure = DiagnosticWithArguments(
+  name: 'RETURN_OF_INVALID_TYPE_FROM_CLOSURE',
+  problemMessage:
+      "The returned type '{0}' isn't returnable from a '{1}' function, as "
+      "required by the closure's context.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_CLOSURE',
+  withArguments: _withArgumentsReturnOfInvalidTypeFromClosure,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the return type as declared in the return statement
+/// Type p1: the expected return type as defined by the enclosing class
+/// String p2: the name of the constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required String p2,
+  })
+>
+returnOfInvalidTypeFromConstructor = DiagnosticWithArguments(
+  name: 'RETURN_OF_INVALID_TYPE',
+  problemMessage:
+      "A value of type '{0}' can't be returned from the constructor '{2}' "
+      "because it has a return type of '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR',
+  withArguments: _withArgumentsReturnOfInvalidTypeFromConstructor,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the return type as declared in the return statement
+/// Type p1: the expected return type as defined by the method
+/// String p2: the name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required String p2,
+  })
+>
+returnOfInvalidTypeFromFunction = DiagnosticWithArguments(
+  name: 'RETURN_OF_INVALID_TYPE',
+  problemMessage:
+      "A value of type '{0}' can't be returned from the function '{2}' because "
+      "it has a return type of '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_FUNCTION',
+  withArguments: _withArgumentsReturnOfInvalidTypeFromFunction,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the type of the expression in the return statement
+/// Type p1: the expected return type as defined by the method
+/// String p2: the name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required DartType p1,
+    required String p2,
+  })
+>
+returnOfInvalidTypeFromMethod = DiagnosticWithArguments(
+  name: 'RETURN_OF_INVALID_TYPE',
+  problemMessage:
+      "A value of type '{0}' can't be returned from the method '{2}' because it "
+      "has a return type of '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_METHOD',
+  withArguments: _withArgumentsReturnOfInvalidTypeFromMethod,
+  expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the return type of the function
+/// Type p1: the expected return type as defined by the type of the Future
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+returnTypeInvalidForCatchError = DiagnosticWithArguments(
+  name: 'INVALID_RETURN_TYPE_FOR_CATCH_ERROR',
+  problemMessage:
+      "The return type '{0}' isn't assignable to '{1}', as required by "
+      "'Future.catchError'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'RETURN_TYPE_INVALID_FOR_CATCH_ERROR',
+  withArguments: _withArgumentsReturnTypeInvalidForCatchError,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments returnWithoutValue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'RETURN_WITHOUT_VALUE',
+      problemMessage: "The return value is missing after 'return'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'RETURN_WITHOUT_VALUE',
+      expectedTypes: [],
+    );
+
+/// There is also a [diag.experimentNotEnabled] code which
+/// catches some cases of constructor tearoff features (like
+/// `List<int>.filled;`). Other constructor tearoff cases are not realized
+/// until resolution (like `List.filled;`).
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+sdkVersionConstructorTearoffs = DiagnosticWithoutArgumentsImpl(
+  name: 'SDK_VERSION_CONSTRUCTOR_TEAROFFS',
+  problemMessage:
+      "Tearing off a constructor requires the 'constructor-tearoffs' language "
+      "feature.",
+  correctionMessage:
+      "Try updating your 'pubspec.yaml' to set the minimum SDK constraint to "
+      "2.15 or higher, and running 'pub get'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'SDK_VERSION_CONSTRUCTOR_TEAROFFS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+sdkVersionGtGtGtOperator = DiagnosticWithoutArgumentsImpl(
+  name: 'SDK_VERSION_GT_GT_GT_OPERATOR',
+  problemMessage:
+      "The operator '>>>' wasn't supported until version 2.14.0, but this code "
+      "is required to be able to run on earlier versions.",
+  correctionMessage: "Try updating the SDK constraints.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'SDK_VERSION_GT_GT_GT_OPERATOR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the version specified in the `@Since()` annotation
+/// String p1: the SDK version constraints
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+sdkVersionSince = DiagnosticWithArguments(
+  name: 'SDK_VERSION_SINCE',
+  problemMessage:
+      "This API is available since SDK {0}, but constraints '{1}' don't "
+      "guarantee it.",
+  correctionMessage: "Try updating the SDK constraints.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'SDK_VERSION_SINCE',
+  withArguments: _withArgumentsSdkVersionSince,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the sealed class being extended, implemented, or
+///            mixed in
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+sealedClassSubtypeOutsideOfLibrary = DiagnosticWithArguments(
+  name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
+  problemMessage:
+      "The class '{0}' can't be extended, implemented, or mixed in outside of "
+      "its library because it's a sealed class.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY',
+  withArguments: _withArgumentsSealedClassSubtypeOutsideOfLibrary,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments sealedEnum = DiagnosticWithoutArgumentsImpl(
+  name: 'SEALED_ENUM',
+  problemMessage: "Enums can't be declared to be 'sealed'.",
+  correctionMessage: "Try removing the keyword 'sealed'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'SEALED_ENUM',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments sealedMixin = DiagnosticWithoutArgumentsImpl(
+  name: 'SEALED_MIXIN',
+  problemMessage: "A mixin can't be declared 'sealed'.",
+  correctionMessage: "Try removing the 'sealed' keyword.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'SEALED_MIXIN',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments sealedMixinClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SEALED_MIXIN_CLASS',
+      problemMessage: "A mixin class can't be declared 'sealed'.",
+      correctionMessage: "Try removing the 'sealed' keyword.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'SEALED_MIXIN_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+setElementFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be used as values in a "
+      "'const' set literal.",
+  correctionMessage:
+      "Try removing the keyword 'const' from the set literal or removing the "
+      "keyword 'deferred' from the import.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SET_ELEMENT_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the actual type of the set element
+/// Type p1: the expected type of the set element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+setElementTypeNotAssignable = DiagnosticWithArguments(
+  name: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the set type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
+  withArguments: _withArgumentsSetElementTypeNotAssignable,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// Parameters:
+/// Type p0: the actual type of the set element
+/// Type p1: the expected type of the set element
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+setElementTypeNotAssignableNullability = DiagnosticWithArguments(
+  name: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
+  problemMessage:
+      "The element type '{0}' can't be assigned to the set type '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY',
+  withArguments: _withArgumentsSetElementTypeNotAssignableNullability,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments setterConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SETTER_CONSTRUCTOR',
+      problemMessage: "Constructors can't be a setter.",
+      correctionMessage: "Try removing 'set'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'SETTER_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments setterInFunction =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SETTER_IN_FUNCTION',
+      problemMessage: "Setters can't be defined within methods or functions.",
+      correctionMessage:
+          "Try moving the setter outside the method or function.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'SETTER_IN_FUNCTION',
+      expectedTypes: [],
+    );
+
+/// A code indicating that the activity is locked to an orientation.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+settingOrientationOnActivity = DiagnosticWithoutArgumentsImpl(
+  name: 'SETTING_ORIENTATION_ON_ACTIVITY',
+  problemMessage:
+      "The `<activity>` element should not be locked to any orientation so that "
+      "users can take advantage of the multi-window environments and larger "
+      "screens on Chrome OS",
+  correctionMessage:
+      "Consider declaring the corresponding activity element with "
+      "`screenOrientation=\"unspecified\"` or `\"fullSensor\"` attribute.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'SETTING_ORIENTATION_ON_ACTIVITY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+sharedDeferredPrefix = DiagnosticWithoutArgumentsImpl(
+  name: 'SHARED_DEFERRED_PREFIX',
+  problemMessage:
+      "The prefix of a deferred import can't be used in other import directives.",
+  correctionMessage: "Try renaming one of the prefixes.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SHARED_DEFERRED_PREFIX',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+sizeAnnotationDimensions = DiagnosticWithoutArgumentsImpl(
+  name: 'SIZE_ANNOTATION_DIMENSIONS',
+  problemMessage:
+      "'Array's must have an 'Array' annotation that matches the dimensions.",
+  correctionMessage: "Try adjusting the arguments in the 'Array' annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SIZE_ANNOTATION_DIMENSIONS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+spreadExpressionFromDeferredLibrary = DiagnosticWithoutArgumentsImpl(
+  name: 'SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY',
+  problemMessage:
+      "Constant values from a deferred library can't be spread into a const "
+      "literal.",
+  correctionMessage: "Try making the deferred import non-deferred.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments stackOverflow = DiagnosticWithoutArgumentsImpl(
+  name: 'STACK_OVERFLOW',
+  problemMessage: "The file has too many nested expressions or statements.",
+  correctionMessage: "Try simplifying the code.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'STACK_OVERFLOW',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the instance member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+staticAccessToInstanceMember = DiagnosticWithArguments(
+  name: 'STATIC_ACCESS_TO_INSTANCE_MEMBER',
+  problemMessage:
+      "Instance member '{0}' can't be accessed using static access.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'STATIC_ACCESS_TO_INSTANCE_MEMBER',
+  withArguments: _withArgumentsStaticAccessToInstanceMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments staticConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'STATIC_CONSTRUCTOR',
+      problemMessage: "Constructors can't be static.",
+      correctionMessage: "Try removing the keyword 'static'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'STATIC_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments staticGetterWithoutBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'STATIC_GETTER_WITHOUT_BODY',
+      problemMessage: "A 'static' getter must have a body.",
+      correctionMessage:
+          "Try adding a body to the getter, or removing the keyword 'static'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'STATIC_GETTER_WITHOUT_BODY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments staticOperator =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'STATIC_OPERATOR',
+      problemMessage: "Operators can't be static.",
+      correctionMessage: "Try removing the keyword 'static'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'STATIC_OPERATOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments staticSetterWithoutBody =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'STATIC_SETTER_WITHOUT_BODY',
+      problemMessage: "A 'static' setter must have a body.",
+      correctionMessage:
+          "Try adding a body to the setter, or removing the keyword 'static'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'STATIC_SETTER_WITHOUT_BODY',
+      expectedTypes: [],
+    );
+
+/// When "strict-raw-types" is enabled, "raw types" must have type arguments.
+///
+/// A "raw type" is a type name that does not use inference to fill in missing
+/// type arguments; instead, each type argument is instantiated to its bound.
+///
+/// Parameters:
+/// Type p0: the name of the generic type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+strictRawType = DiagnosticWithArguments(
+  name: 'STRICT_RAW_TYPE',
+  problemMessage:
+      "The generic type '{0}' should have explicit type arguments but doesn't.",
+  correctionMessage: "Use explicit type arguments for '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'STRICT_RAW_TYPE',
+  withArguments: _withArgumentsStrictRawType,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the subtype that is not 'base', 'final', or
+///            'sealed'
+/// String p1: the name of the 'base' supertype
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+subtypeOfBaseIsNotBaseFinalOrSealed = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
+  problemMessage:
+      "The type '{0}' must be 'base', 'final' or 'sealed' because the supertype "
+      "'{1}' is 'base'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED',
+  withArguments: _withArgumentsSubtypeOfBaseIsNotBaseFinalOrSealed,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the subtype that is not 'base', 'final', or
+///            'sealed'
+/// String p1: the name of the 'final' supertype
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+subtypeOfFinalIsNotBaseFinalOrSealed = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
+  problemMessage:
+      "The type '{0}' must be 'base', 'final' or 'sealed' because the supertype "
+      "'{1}' is 'final'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
+  withArguments: _withArgumentsSubtypeOfFinalIsNotBaseFinalOrSealed,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the sealed class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+subtypeOfSealedClass = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_SEALED_CLASS',
+  problemMessage:
+      "The class '{0}' shouldn't be extended, mixed in, or implemented because "
+      "it's sealed.",
+  correctionMessage:
+      "Try composing instead of inheriting, or refer to the documentation of "
+      "'{0}' for more information.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'SUBTYPE_OF_SEALED_CLASS',
+  withArguments: _withArgumentsSubtypeOfSealedClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the subclass
+/// String p1: the name of the class being extended, implemented, or mixed in
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+subtypeOfStructClassInExtends = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_STRUCT_CLASS',
+  problemMessage:
+      "The class '{0}' can't extend '{1}' because '{1}' is a subtype of "
+      "'Struct', 'Union', or 'AbiSpecificInteger'.",
+  correctionMessage:
+      "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS',
+  withArguments: _withArgumentsSubtypeOfStructClassInExtends,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the subclass
+/// String p1: the name of the class being extended, implemented, or mixed in
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+subtypeOfStructClassInImplements = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_STRUCT_CLASS',
+  problemMessage:
+      "The class '{0}' can't implement '{1}' because '{1}' is a subtype of "
+      "'Struct', 'Union', or 'AbiSpecificInteger'.",
+  correctionMessage:
+      "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS',
+  withArguments: _withArgumentsSubtypeOfStructClassInImplements,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the subclass
+/// String p1: the name of the class being extended, implemented, or mixed in
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+subtypeOfStructClassInWith = DiagnosticWithArguments(
+  name: 'SUBTYPE_OF_STRUCT_CLASS',
+  problemMessage:
+      "The class '{0}' can't mix in '{1}' because '{1}' is a subtype of "
+      "'Struct', 'Union', or 'AbiSpecificInteger'.",
+  correctionMessage:
+      "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUBTYPE_OF_STRUCT_CLASS_IN_WITH',
+  withArguments: _withArgumentsSubtypeOfStructClassInWith,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the type of super-parameter
+/// Type p1: the type of associated super-constructor parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+superFormalParameterTypeIsNotSubtypeOfAssociated = DiagnosticWithArguments(
+  name: 'SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED',
+  problemMessage:
+      "The type '{0}' of this parameter isn't a subtype of the type '{1}' of the "
+      "associated super constructor parameter.",
+  correctionMessage:
+      "Try removing the explicit type annotation from the parameter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED',
+  withArguments: _withArgumentsSuperFormalParameterTypeIsNotSubtypeOfAssociated,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments superFormalParameterWithoutAssociatedNamed =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED',
+      problemMessage: "No associated named super constructor parameter.",
+      correctionMessage:
+          "Try changing the name to the name of an existing named super "
+          "constructor parameter, or creating such named parameter.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+superFormalParameterWithoutAssociatedPositional = DiagnosticWithoutArgumentsImpl(
+  name: 'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL',
+  problemMessage: "No associated positional super constructor parameter.",
+  correctionMessage:
+      "Try using a normal parameter, or adding more positional parameters to "
+      "the super constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments superInEnumConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPER_IN_ENUM_CONSTRUCTOR',
+      problemMessage: "The enum constructor can't have a 'super' initializer.",
+      correctionMessage: "Try removing the 'super' invocation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SUPER_IN_ENUM_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+superInExtension = DiagnosticWithoutArgumentsImpl(
+  name: 'SUPER_IN_EXTENSION',
+  problemMessage:
+      "The 'super' keyword can't be used in an extension because an extension "
+      "doesn't have a superclass.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUPER_IN_EXTENSION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments superInExtensionType =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPER_IN_EXTENSION_TYPE',
+      problemMessage:
+          "The 'super' keyword can't be used in an extension type because an "
+          "extension type doesn't have a superclass.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SUPER_IN_EXTENSION_TYPE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments superInInvalidContext =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPER_IN_INVALID_CONTEXT',
+      problemMessage: "Invalid context for 'super' invocation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SUPER_IN_INVALID_CONTEXT',
+      expectedTypes: [],
+    );
+
+/// 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It
+/// is a compile-time error if a generative constructor of class Object
+/// includes a superinitializer.
+///
+/// No parameters.
+const DiagnosticWithoutArguments superInitializerInObject =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPER_INITIALIZER_IN_OBJECT',
+      problemMessage:
+          "The class 'Object' can't invoke a constructor from a superclass.",
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SUPER_INITIALIZER_IN_OBJECT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments superInRedirectingConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SUPER_IN_REDIRECTING_CONSTRUCTOR',
+      problemMessage:
+          "The redirecting constructor can't have a 'super' initializer.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SUPER_IN_REDIRECTING_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the superinitializer
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+superInvocationNotLast = DiagnosticWithArguments(
+  name: 'SUPER_INVOCATION_NOT_LAST',
+  problemMessage:
+      "The superconstructor call must be last in an initializer list: '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'SUPER_INVOCATION_NOT_LAST',
+  withArguments: _withArgumentsSuperInvocationNotLast,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments switchCaseCompletesNormally =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SWITCH_CASE_COMPLETES_NORMALLY',
+      problemMessage: "The 'case' shouldn't complete normally.",
+      correctionMessage: "Try adding 'break', 'return', or 'throw'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'SWITCH_CASE_COMPLETES_NORMALLY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments switchHasCaseAfterDefaultCase =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
+      problemMessage:
+          "The default case should be the last case in a switch statement.",
+      correctionMessage:
+          "Try moving the default case after the other case clauses.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'SWITCH_HAS_CASE_AFTER_DEFAULT_CASE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments switchHasMultipleDefaultCases =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
+      problemMessage: "The 'default' case can only be declared once.",
+      correctionMessage: "Try removing all but one default case.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'SWITCH_HAS_MULTIPLE_DEFAULT_CASES',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments tearoffOfGenerativeConstructorOfAbstractClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS',
+      problemMessage:
+          "A generative constructor of an abstract class can't be torn off.",
+      correctionMessage:
+          "Try tearing off a constructor of a concrete class, or a "
+          "non-generative constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the unicode sequence of the code point.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+textDirectionCodePointInComment = DiagnosticWithArguments(
+  name: 'TEXT_DIRECTION_CODE_POINT_IN_COMMENT',
+  problemMessage:
+      "The Unicode code point 'U+{0}' changes the appearance of text from how "
+      "it's interpreted by the compiler.",
+  correctionMessage:
+      "Try removing the code point or using the Unicode escape sequence "
+      "'\\u{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'TEXT_DIRECTION_CODE_POINT_IN_COMMENT',
+  withArguments: _withArgumentsTextDirectionCodePointInComment,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the unicode sequence of the code point.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+textDirectionCodePointInLiteral = DiagnosticWithArguments(
+  name: 'TEXT_DIRECTION_CODE_POINT_IN_LITERAL',
+  problemMessage:
+      "The Unicode code point 'U+{0}' changes the appearance of text from how "
+      "it's interpreted by the compiler.",
+  correctionMessage:
+      "Try removing the code point or using the Unicode escape sequence "
+      "'\\u{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'TEXT_DIRECTION_CODE_POINT_IN_LITERAL',
+  withArguments: _withArgumentsTextDirectionCodePointInLiteral,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the type that can't be thrown
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0})
+>
+throwOfInvalidType = DiagnosticWithArguments(
+  name: 'THROW_OF_INVALID_TYPE',
+  problemMessage:
+      "The type '{0}' of the thrown expression must be assignable to 'Object'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'THROW_OF_INVALID_TYPE',
+  withArguments: _withArgumentsThrowOfInvalidType,
+  expectedTypes: [ExpectedType.type],
+);
+
+/// A standard TODO comment marked as TODO.
+///
+/// Parameters:
+/// String message: the user-supplied problem message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String message})
+>
+todo = DiagnosticWithArguments(
+  name: 'TODO',
+  problemMessage: "{0}",
+  type: DiagnosticType.TODO,
+  uniqueName: 'TODO',
+  withArguments: _withArgumentsTodo,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the element whose type could not be inferred.
+/// String p1: The [TopLevelInferenceError]'s arguments that led to the cycle.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+topLevelCycle = DiagnosticWithArguments(
+  name: 'TOP_LEVEL_CYCLE',
+  problemMessage:
+      "The type of '{0}' can't be inferred because it depends on itself through "
+      "the cycle: {1}.",
+  correctionMessage:
+      "Try adding an explicit type to one or more of the variables in the "
+      "cycle in order to break the cycle.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TOP_LEVEL_CYCLE',
+  withArguments: _withArgumentsTopLevelCycle,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+topLevelOperator = DiagnosticWithoutArgumentsImpl(
+  name: 'TOP_LEVEL_OPERATOR',
+  problemMessage: "Operators must be declared within a class.",
+  correctionMessage:
+      "Try removing the operator, moving it to a class, or converting it to "
+      "be a function.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'TOP_LEVEL_OPERATOR',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+typeAliasCannotReferenceItself = DiagnosticWithoutArgumentsImpl(
+  name: 'TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
+  problemMessage:
+      "Typedefs can't reference themselves directly or recursively via another "
+      "typedef.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the type that is deferred and being used in a type
+///            annotation
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+typeAnnotationDeferredClass = DiagnosticWithArguments(
+  name: 'TYPE_ANNOTATION_DEFERRED_CLASS',
+  problemMessage:
+      "The deferred type '{0}' can't be used in a declaration, cast, or type "
+      "test.",
+  correctionMessage:
+      "Try using a different type, or changing the import to not be "
+      "deferred.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TYPE_ANNOTATION_DEFERRED_CLASS',
+  withArguments: _withArgumentsTypeAnnotationDeferredClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the name of the type used in the instance creation that should be
+///          limited by the bound as specified in the class declaration
+/// String p1: the name of the type parameter
+/// Type p2: the substituted bound of the type parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required String p1,
+    required DartType p2,
+  })
+>
+typeArgumentNotMatchingBounds = DiagnosticWithArguments(
+  name: 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
+  problemMessage:
+      "'{0}' doesn't conform to the bound '{2}' of the type parameter '{1}'.",
+  correctionMessage: "Try using a type that is or is a subclass of '{2}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
+  withArguments: _withArgumentsTypeArgumentNotMatchingBounds,
+  expectedTypes: [ExpectedType.type, ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// Name name: undocumented
+const DiagnosticCode typeArgumentsOnTypeVariable =
+    DiagnosticCodeWithExpectedTypes(
+      name: 'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
+      problemMessage: "Can't use type arguments with type variable '{0}'.",
+      correctionMessage: "Try removing the type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'TYPE_ARGUMENTS_ON_TYPE_VARIABLE',
+      expectedTypes: [ExpectedType.name],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments typeBeforeFactory =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPE_BEFORE_FACTORY',
+      problemMessage: "Factory constructors cannot have a return type.",
+      correctionMessage: "Try removing the type appearing before 'factory'.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'TYPE_BEFORE_FACTORY',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments typeCheckIsNotNull =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPE_CHECK_WITH_NULL',
+      problemMessage: "Tests for non-null should be done with '!= null'.",
+      correctionMessage: "Try replacing the 'is! Null' check with '!= null'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'TYPE_CHECK_IS_NOT_NULL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments typeCheckIsNull =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPE_CHECK_WITH_NULL',
+      problemMessage: "Tests for null should be done with '== null'.",
+      correctionMessage: "Try replacing the 'is Null' check with '== null'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'TYPE_CHECK_IS_NULL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments typedefInClass =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPEDEF_IN_CLASS',
+      problemMessage: "Typedefs can't be declared inside classes.",
+      correctionMessage: "Try moving the typedef to the top-level.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'TYPEDEF_IN_CLASS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments typeParameterOnConstructor =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPE_PARAMETER_ON_CONSTRUCTOR',
+      problemMessage: "Constructors can't have type parameters.",
+      correctionMessage: "Try removing the type parameters.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'TYPE_PARAMETER_ON_CONSTRUCTOR',
+      expectedTypes: [],
+    );
+
+/// 7.1.1 Operators: Type parameters are not syntactically supported on an
+/// operator.
+///
+/// No parameters.
+const DiagnosticWithoutArguments typeParameterOnOperator =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPE_PARAMETER_ON_OPERATOR',
+      problemMessage:
+          "Types parameters aren't allowed when defining an operator.",
+      correctionMessage: "Try removing the type parameters.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'TYPE_PARAMETER_ON_OPERATOR',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments typeParameterReferencedByStatic =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'TYPE_PARAMETER_REFERENCED_BY_STATIC',
+      problemMessage:
+          "Static members can't reference type parameters of the class.",
+      correctionMessage:
+          "Try removing the reference to the type parameter, or making the "
+          "member an instance member.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'TYPE_PARAMETER_REFERENCED_BY_STATIC',
+      expectedTypes: [],
+    );
+
+/// See [diag.typeArgumentNotMatchingBounds].
+///
+/// Parameters:
+/// String p0: the name of the type parameter
+/// Type p1: the name of the bounding type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+typeParameterSupertypeOfItsBound = DiagnosticWithArguments(
+  name: 'TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
+  problemMessage: "'{0}' can't be a supertype of its upper bound.",
+  correctionMessage:
+      "Try using a type that is the same as or a subclass of '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
+  withArguments: _withArgumentsTypeParameterSupertypeOfItsBound,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+typeTestWithNonType = DiagnosticWithArguments(
+  name: 'TYPE_TEST_WITH_NON_TYPE',
+  problemMessage:
+      "The name '{0}' isn't a type and can't be used in an 'is' expression.",
+  correctionMessage: "Try correcting the name to match an existing type.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TYPE_TEST_WITH_NON_TYPE',
+  withArguments: _withArgumentsTypeTestWithNonType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+typeTestWithUndefinedName = DiagnosticWithArguments(
+  name: 'TYPE_TEST_WITH_UNDEFINED_NAME',
+  problemMessage:
+      "The name '{0}' isn't defined, so it can't be used in an 'is' expression.",
+  correctionMessage:
+      "Try changing the name to the name of an existing type, or creating a "
+      "type with the name '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'TYPE_TEST_WITH_UNDEFINED_NAME',
+  withArguments: _withArgumentsTypeTestWithUndefinedName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the path of the file that cannot be read
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unableGetContent = DiagnosticWithArguments(
+  name: 'UNABLE_GET_CONTENT',
+  problemMessage: "Unable to get content of '{0}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'UNABLE_GET_CONTENT',
+  withArguments: _withArgumentsUnableGetContent,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+uncheckedInvocationOfNullableValue = DiagnosticWithoutArgumentsImpl(
+  name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+  problemMessage:
+      "The function can't be unconditionally invoked because it can be 'null'.",
+  correctionMessage: "Try adding a null check ('!').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNCHECKED_INVOCATION_OF_NULLABLE_VALUE',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the name of the method
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+uncheckedMethodInvocationOfNullableValue = DiagnosticWithArguments(
+  name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+  problemMessage:
+      "The method '{0}' can't be unconditionally invoked because the receiver "
+      "can be 'null'.",
+  correctionMessage:
+      "Try making the call conditional (using '?.') or adding a null check "
+      "to the target ('!').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE',
+  withArguments: _withArgumentsUncheckedMethodInvocationOfNullableValue,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the operator
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+uncheckedOperatorInvocationOfNullableValue = DiagnosticWithArguments(
+  name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+  problemMessage:
+      "The operator '{0}' can't be unconditionally invoked because the receiver "
+      "can be 'null'.",
+  correctionMessage: "Try adding a null check to the target ('!').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE',
+  withArguments: _withArgumentsUncheckedOperatorInvocationOfNullableValue,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the property
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+uncheckedPropertyAccessOfNullableValue = DiagnosticWithArguments(
+  name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+  problemMessage:
+      "The property '{0}' can't be unconditionally accessed because the receiver "
+      "can be 'null'.",
+  correctionMessage:
+      "Try making the access conditional (using '?.') or adding a null check "
+      "to the target ('!').",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE',
+  withArguments: _withArgumentsUncheckedPropertyAccessOfNullableValue,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments uncheckedUseOfNullableValueAsCondition =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+      problemMessage: "A nullable expression can't be used as a condition.",
+      correctionMessage:
+          "Try checking that the value isn't 'null' before using it as a "
+          "condition.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+uncheckedUseOfNullableValueAsIterator = DiagnosticWithoutArgumentsImpl(
+  name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+  problemMessage:
+      "A nullable expression can't be used as an iterator in a for-in loop.",
+  correctionMessage:
+      "Try checking that the value isn't 'null' before using it as an "
+      "iterator.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+uncheckedUseOfNullableValueInSpread = DiagnosticWithoutArgumentsImpl(
+  name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+  problemMessage: "A nullable expression can't be used in a spread.",
+  correctionMessage:
+      "Try checking that the value isn't 'null' before using it in a spread, "
+      "or use a null-aware spread.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments uncheckedUseOfNullableValueInYieldEach =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+      problemMessage:
+          "A nullable expression can't be used in a yield-each statement.",
+      correctionMessage:
+          "Try checking that the value isn't 'null' before using it in a "
+          "yield-each statement.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the annotation
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedAnnotation = DiagnosticWithArguments(
+  name: 'UNDEFINED_ANNOTATION',
+  problemMessage: "Undefined name '{0}' used as an annotation.",
+  correctionMessage:
+      "Try defining the name or importing it from another library.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_ANNOTATION',
+  withArguments: _withArgumentsUndefinedAnnotation,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the undefined class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedClass = DiagnosticWithArguments(
+  name: 'UNDEFINED_CLASS',
+  problemMessage: "Undefined class '{0}'.",
+  correctionMessage:
+      "Try changing the name to the name of an existing class, or creating a "
+      "class with the name '{0}'.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_CLASS',
+  withArguments: _withArgumentsUndefinedClass,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Same as [diag.undefinedClass], but to catch using
+/// "boolean" instead of "bool" in order to improve the correction message.
+///
+/// Parameters:
+/// String p0: the name of the undefined class
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedClassBoolean = DiagnosticWithArguments(
+  name: 'UNDEFINED_CLASS',
+  problemMessage: "Undefined class '{0}'.",
+  correctionMessage: "Try using the type 'bool'.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_CLASS_BOOLEAN',
+  withArguments: _withArgumentsUndefinedClassBoolean,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Type p0: the name of the superclass that does not define the invoked
+///          constructor
+/// String p1: the name of the constructor being invoked
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required String p1})
+>
+undefinedConstructorInInitializer = DiagnosticWithArguments(
+  name: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
+  problemMessage: "The class '{0}' doesn't have a constructor named '{1}'.",
+  correctionMessage:
+      "Try defining a constructor named '{1}' in '{0}', or invoking a "
+      "different constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
+  withArguments: _withArgumentsUndefinedConstructorInInitializer,
+  expectedTypes: [ExpectedType.type, ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the name of the superclass that does not define the invoked
+///            constructor
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+undefinedConstructorInInitializerDefault = DiagnosticWithArguments(
+  name: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
+  problemMessage: "The class '{0}' doesn't have an unnamed constructor.",
+  correctionMessage:
+      "Try defining an unnamed constructor in '{0}', or invoking a different "
+      "constructor.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT',
+  withArguments: _withArgumentsUndefinedConstructorInInitializerDefault,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the enum value that is not defined
+/// String p1: the name of the enum used to access the constant
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedEnumConstant = DiagnosticWithArguments(
+  name: 'UNDEFINED_ENUM_CONSTANT',
+  problemMessage: "There's no constant named '{0}' in '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing constant, or "
+      "defining a constant named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_ENUM_CONSTANT',
+  withArguments: _withArgumentsUndefinedEnumConstant,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the constructor that is undefined
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedEnumConstructorNamed = DiagnosticWithArguments(
+  name: 'UNDEFINED_ENUM_CONSTRUCTOR',
+  problemMessage: "The enum doesn't have a constructor named '{0}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing constructor, or "
+      "defining constructor with the name '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_NAMED',
+  withArguments: _withArgumentsUndefinedEnumConstructorNamed,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments undefinedEnumConstructorUnnamed =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNDEFINED_ENUM_CONSTRUCTOR',
+      problemMessage: "The enum doesn't have an unnamed constructor.",
+      correctionMessage:
+          "Try adding the name of an existing constructor, or defining an "
+          "unnamed constructor.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the getter that is undefined
+/// String p1: the name of the extension that was explicitly specified
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedExtensionGetter = DiagnosticWithArguments(
+  name: '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}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_EXTENSION_GETTER',
+  withArguments: _withArgumentsUndefinedExtensionGetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the method that is undefined
+/// String p1: the name of the extension that was explicitly specified
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedExtensionMethod = DiagnosticWithArguments(
+  name: 'UNDEFINED_EXTENSION_METHOD',
+  problemMessage: "The method '{0}' isn't defined for the extension '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing method, or "
+      "defining a method named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_EXTENSION_METHOD',
+  withArguments: _withArgumentsUndefinedExtensionMethod,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the operator that is undefined
+/// String p1: the name of the extension that was explicitly specified
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedExtensionOperator = DiagnosticWithArguments(
+  name: 'UNDEFINED_EXTENSION_OPERATOR',
+  problemMessage: "The operator '{0}' isn't defined for the extension '{1}'.",
+  correctionMessage: "Try defining the operator '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_EXTENSION_OPERATOR',
+  withArguments: _withArgumentsUndefinedExtensionOperator,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the setter that is undefined
+/// String p1: the name of the extension that was explicitly specified
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedExtensionSetter = DiagnosticWithArguments(
+  name: 'UNDEFINED_EXTENSION_SETTER',
+  problemMessage: "The setter '{0}' isn't defined for the extension '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing setter, or "
+      "defining a setter named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_EXTENSION_SETTER',
+  withArguments: _withArgumentsUndefinedExtensionSetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the method that is undefined
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedFunction = DiagnosticWithArguments(
+  name: 'UNDEFINED_FUNCTION',
+  problemMessage: "The function '{0}' isn't defined.",
+  correctionMessage:
+      "Try importing the library that defines '{0}', correcting the name to "
+      "the name of an existing function, or defining a function named '{0}'.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_FUNCTION',
+  withArguments: _withArgumentsUndefinedFunction,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the getter
+/// Object p1: the name of the enclosing type where the getter is being looked
+///            for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required Object p1})
+>
+undefinedGetter = DiagnosticWithArguments(
+  name: 'UNDEFINED_GETTER',
+  problemMessage: "The getter '{0}' isn't defined for the type '{1}'.",
+  correctionMessage:
+      "Try importing the library that defines '{0}', correcting the name to "
+      "the name of an existing getter, or defining a getter or field named "
+      "'{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_GETTER',
+  withArguments: _withArgumentsUndefinedGetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the getter
+/// String p1: the name of the function type alias
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedGetterOnFunctionType = DiagnosticWithArguments(
+  name: 'UNDEFINED_GETTER',
+  problemMessage: "The getter '{0}' isn't defined for the '{1}' function type.",
+  correctionMessage:
+      "Try wrapping the function type alias in parentheses in order to "
+      "access '{0}' as an extension getter on 'Type'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_GETTER_ON_FUNCTION_TYPE',
+  withArguments: _withArgumentsUndefinedGetterOnFunctionType,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the library being imported
+/// String p1: the name in the hide clause that isn't defined in the library
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedHiddenName = DiagnosticWithArguments(
+  name: 'UNDEFINED_HIDDEN_NAME',
+  problemMessage:
+      "The library '{0}' doesn't export a member with the hidden name '{1}'.",
+  correctionMessage: "Try removing the name from the list of hidden members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNDEFINED_HIDDEN_NAME',
+  withArguments: _withArgumentsUndefinedHiddenName,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the identifier
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedIdentifier = DiagnosticWithArguments(
+  name: 'UNDEFINED_IDENTIFIER',
+  problemMessage: "Undefined name '{0}'.",
+  correctionMessage:
+      "Try correcting the name to one that is defined, or defining the name.",
+  hasPublishedDocs: true,
+  isUnresolvedIdentifier: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_IDENTIFIER',
+  withArguments: _withArgumentsUndefinedIdentifier,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+undefinedIdentifierAwait = DiagnosticWithoutArgumentsImpl(
+  name: 'UNDEFINED_IDENTIFIER_AWAIT',
+  problemMessage:
+      "Undefined name 'await' in function body not marked with 'async'.",
+  correctionMessage:
+      "Try correcting the name to one that is defined, defining the name, or "
+      "adding 'async' to the enclosing function body.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_IDENTIFIER_AWAIT',
+  expectedTypes: [],
+);
+
+/// An error code indicating an undefined lint rule.
+///
+/// Parameters:
+/// String p0: the rule name
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedLint = DiagnosticWithArguments(
+  name: 'UNDEFINED_LINT',
+  problemMessage: "'{0}' is not a recognized lint rule.",
+  correctionMessage: "Try using the name of a recognized lint rule.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNDEFINED_LINT',
+  withArguments: _withArgumentsUndefinedLint,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the method that is undefined
+/// Object p1: the resolved type name that the method lookup is happening on
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required Object p1})
+>
+undefinedMethod = DiagnosticWithArguments(
+  name: 'UNDEFINED_METHOD',
+  problemMessage: "The method '{0}' isn't defined for the type '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing method, or "
+      "defining a method named '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_METHOD',
+  withArguments: _withArgumentsUndefinedMethod,
+  expectedTypes: [ExpectedType.string, ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the method
+/// String p1: the name of the function type alias
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedMethodOnFunctionType = DiagnosticWithArguments(
+  name: 'UNDEFINED_METHOD',
+  problemMessage: "The method '{0}' isn't defined for the '{1}' function type.",
+  correctionMessage:
+      "Try wrapping the function type alias in parentheses in order to "
+      "access '{0}' as an extension method on 'Type'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_METHOD_ON_FUNCTION_TYPE',
+  withArguments: _withArgumentsUndefinedMethodOnFunctionType,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the requested named parameter
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+undefinedNamedParameter = DiagnosticWithArguments(
+  name: 'UNDEFINED_NAMED_PARAMETER',
+  problemMessage: "The named parameter '{0}' isn't defined.",
+  correctionMessage:
+      "Try correcting the name to an existing named parameter's name, or "
+      "defining a named parameter with the name '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_NAMED_PARAMETER',
+  withArguments: _withArgumentsUndefinedNamedParameter,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the operator
+/// Type p1: the name of the enclosing type where the operator is being looked
+///          for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+undefinedOperator = DiagnosticWithArguments(
+  name: 'UNDEFINED_OPERATOR',
+  problemMessage: "The operator '{0}' isn't defined for the type '{1}'.",
+  correctionMessage: "Try defining the operator '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_OPERATOR',
+  withArguments: _withArgumentsUndefinedOperator,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the reference
+/// String p1: the name of the prefix
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedPrefixedName = DiagnosticWithArguments(
+  name: 'UNDEFINED_PREFIXED_NAME',
+  problemMessage:
+      "The name '{0}' is being referenced through the prefix '{1}', but it isn't "
+      "defined in any of the libraries imported using that prefix.",
+  correctionMessage:
+      "Try correcting the prefix or importing the library that defines "
+      "'{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_PREFIXED_NAME',
+  withArguments: _withArgumentsUndefinedPrefixedName,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the undefined parameter
+/// String p1: the name of the targeted member
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedReferencedParameter = DiagnosticWithArguments(
+  name: 'UNDEFINED_REFERENCED_PARAMETER',
+  problemMessage: "The parameter '{0}' isn't defined by '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNDEFINED_REFERENCED_PARAMETER',
+  withArguments: _withArgumentsUndefinedReferencedParameter,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the setter
+/// Type p1: the name of the enclosing type where the setter is being looked
+///          for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+undefinedSetter = DiagnosticWithArguments(
+  name: 'UNDEFINED_SETTER',
+  problemMessage: "The setter '{0}' isn't defined for the type '{1}'.",
+  correctionMessage:
+      "Try importing the library that defines '{0}', correcting the name to "
+      "the name of an existing setter, or defining a setter or field named "
+      "'{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_SETTER',
+  withArguments: _withArgumentsUndefinedSetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the setter
+/// String p1: the name of the function type alias
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedSetterOnFunctionType = DiagnosticWithArguments(
+  name: 'UNDEFINED_SETTER',
+  problemMessage: "The setter '{0}' isn't defined for the '{1}' function type.",
+  correctionMessage:
+      "Try wrapping the function type alias in parentheses in order to "
+      "access '{0}' as an extension getter on 'Type'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_SETTER_ON_FUNCTION_TYPE',
+  withArguments: _withArgumentsUndefinedSetterOnFunctionType,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the library being imported
+/// String p1: the name in the show clause that isn't defined in the library
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedShownName = DiagnosticWithArguments(
+  name: 'UNDEFINED_SHOWN_NAME',
+  problemMessage:
+      "The library '{0}' doesn't export a member with the shown name '{1}'.",
+  correctionMessage: "Try removing the name from the list of shown members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNDEFINED_SHOWN_NAME',
+  withArguments: _withArgumentsUndefinedShownName,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the getter
+/// Type p1: the name of the enclosing type where the getter is being looked
+///          for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+undefinedSuperGetter = DiagnosticWithArguments(
+  name: 'UNDEFINED_SUPER_MEMBER',
+  problemMessage: "The getter '{0}' isn't defined in a superclass of '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing getter, or "
+      "defining a getter or field named '{0}' in a superclass.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_SUPER_GETTER',
+  withArguments: _withArgumentsUndefinedSuperGetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the method that is undefined
+/// String p1: the resolved type name that the method lookup is happening on
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+undefinedSuperMethod = DiagnosticWithArguments(
+  name: 'UNDEFINED_SUPER_MEMBER',
+  problemMessage: "The method '{0}' isn't defined in a superclass of '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing method, or "
+      "defining a method named '{0}' in a superclass.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_SUPER_METHOD',
+  withArguments: _withArgumentsUndefinedSuperMethod,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the operator
+/// Type p1: the name of the enclosing type where the operator is being looked
+///          for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+undefinedSuperOperator = DiagnosticWithArguments(
+  name: 'UNDEFINED_SUPER_MEMBER',
+  problemMessage: "The operator '{0}' isn't defined in a superclass of '{1}'.",
+  correctionMessage: "Try defining the operator '{0}' in a superclass.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_SUPER_OPERATOR',
+  withArguments: _withArgumentsUndefinedSuperOperator,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Parameters:
+/// String p0: the name of the setter
+/// Type p1: the name of the enclosing type where the setter is being looked
+///          for
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+undefinedSuperSetter = DiagnosticWithArguments(
+  name: 'UNDEFINED_SUPER_MEMBER',
+  problemMessage: "The setter '{0}' isn't defined in a superclass of '{1}'.",
+  correctionMessage:
+      "Try correcting the name to the name of an existing setter, or "
+      "defining a setter or field named '{0}' in a superclass.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNDEFINED_SUPER_SETTER',
+  withArguments: _withArgumentsUndefinedSuperSetter,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// A TODO comment marked as UNDONE.
+///
+/// Parameters:
+/// String message: the user-supplied problem message
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String message})
+>
+undone = DiagnosticWithArguments(
+  name: 'UNDONE',
+  problemMessage: "{0}",
+  type: DiagnosticType.TODO,
+  uniqueName: 'UNDONE',
+  withArguments: _withArgumentsUndone,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unexpectedDollarInString = DiagnosticWithoutArgumentsImpl(
+  name: 'UNEXPECTED_DOLLAR_IN_STRING',
+  problemMessage:
+      "A '\$' has special meaning inside a string, and must be followed by an "
+      "identifier or an expression in curly braces ({}).",
+  correctionMessage: "Try adding a backslash (\\) to escape the '\$'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'UNEXPECTED_DOLLAR_IN_STRING',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unexpectedSeparatorInNumber = DiagnosticWithoutArgumentsImpl(
+  name: 'UNEXPECTED_SEPARATOR_IN_NUMBER',
+  problemMessage:
+      "Digit separators ('_') in a number literal can only be placed between two "
+      "digits.",
+  correctionMessage: "Try removing the '_'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'UNEXPECTED_SEPARATOR_IN_NUMBER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the starting character that was missing
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unexpectedTerminatorForParameterGroup = DiagnosticWithArguments(
+  name: 'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
+  problemMessage: "There is no '{0}' to open a parameter group.",
+  correctionMessage: "Try inserting the '{0}' at the appropriate location.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP',
+  withArguments: _withArgumentsUnexpectedTerminatorForParameterGroup,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the unexpected text that was found
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unexpectedToken = DiagnosticWithArguments(
+  name: 'UNEXPECTED_TOKEN',
+  problemMessage: "Unexpected text '{0}'.",
+  correctionMessage: "Try removing the text.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'UNEXPECTED_TOKEN',
+  withArguments: _withArgumentsUnexpectedToken,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unexpectedTokens =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNEXPECTED_TOKENS',
+      problemMessage: "Unexpected tokens.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'UNEXPECTED_TOKENS',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the non-diagnostic being ignored
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unignorableIgnore = DiagnosticWithArguments(
+  name: 'UNIGNORABLE_IGNORE',
+  problemMessage: "The diagnostic '{0}' can't be ignored.",
+  correctionMessage:
+      "Try removing the name from the list, or removing the whole comment if "
+      "this is the only name in the list.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNIGNORABLE_IGNORE',
+  withArguments: _withArgumentsUnignorableIgnore,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the unknown platform.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unknownPlatform = DiagnosticWithArguments(
+  name: 'UNKNOWN_PLATFORM',
+  problemMessage: "The platform '{0}' is not a recognized platform.",
+  correctionMessage: "Try correcting the platform name or removing it.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNKNOWN_PLATFORM',
+  withArguments: _withArgumentsUnknownPlatform,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryCast =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_CAST',
+      problemMessage: "Unnecessary cast.",
+      correctionMessage: "Try removing the cast.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_CAST',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryCastPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_CAST_PATTERN',
+      problemMessage: "Unnecessary cast pattern.",
+      correctionMessage: "Try removing the cast pattern.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_CAST_PATTERN',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the package in the dev_dependency list.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unnecessaryDevDependency = DiagnosticWithArguments(
+  name: '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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_DEV_DEPENDENCY',
+  withArguments: _withArgumentsUnnecessaryDevDependency,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unnecessaryFinal = DiagnosticWithoutArgumentsImpl(
+  name: 'UNNECESSARY_FINAL',
+  problemMessage:
+      "The keyword 'final' isn't necessary because the parameter is implicitly "
+      "'final'.",
+  correctionMessage: "Try removing the 'final'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_FINAL',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// String p0: the URI that is not necessary
+/// String p1: the URI that makes it unnecessary
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+unnecessaryImport = DiagnosticWithArguments(
+  name: 'UNNECESSARY_IMPORT',
+  problemMessage:
+      "The import of '{0}' is unnecessary because all of the used elements are "
+      "also provided by the import of '{1}'.",
+  correctionMessage: "Try removing the import directive.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.HINT,
+  uniqueName: 'UNNECESSARY_IMPORT',
+  withArguments: _withArgumentsUnnecessaryImport,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unnecessaryNanComparisonFalse = DiagnosticWithoutArgumentsImpl(
+  name: 'UNNECESSARY_NAN_COMPARISON',
+  problemMessage:
+      "A double can't equal 'double.nan', so the condition is always 'false'.",
+  correctionMessage: "Try using 'double.isNan', or removing the condition.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_NAN_COMPARISON_FALSE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unnecessaryNanComparisonTrue = DiagnosticWithoutArgumentsImpl(
+  name: 'UNNECESSARY_NAN_COMPARISON',
+  problemMessage:
+      "A double can't equal 'double.nan', so the condition is always 'true'.",
+  correctionMessage: "Try using 'double.isNan', or removing the condition.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_NAN_COMPARISON_TRUE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryNonNullAssertion =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_NON_NULL_ASSERTION',
+      problemMessage:
+          "The '!' will have no effect because the receiver can't be null.",
+      correctionMessage: "Try removing the '!' operator.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_NON_NULL_ASSERTION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryNoSuchMethod =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_NO_SUCH_METHOD',
+      problemMessage: "Unnecessary 'noSuchMethod' declaration.",
+      correctionMessage: "Try removing the declaration of 'noSuchMethod'.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_NO_SUCH_METHOD',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unnecessaryNullAssertPattern = DiagnosticWithoutArgumentsImpl(
+  name: 'UNNECESSARY_NULL_ASSERT_PATTERN',
+  problemMessage:
+      "The null-assert pattern will have no effect because the matched type "
+      "isn't nullable.",
+  correctionMessage:
+      "Try replacing the null-assert pattern with its nested pattern.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_NULL_ASSERT_PATTERN',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+unnecessaryNullCheckPattern = DiagnosticWithoutArgumentsImpl(
+  name: 'UNNECESSARY_NULL_CHECK_PATTERN',
+  problemMessage:
+      "The null-check pattern will have no effect because the matched type isn't "
+      "nullable.",
+  correctionMessage:
+      "Try replacing the null-check pattern with its nested pattern.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_NULL_CHECK_PATTERN',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryNullComparisonAlwaysNullFalse =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_NULL_COMPARISON',
+      problemMessage:
+          "The operand must be 'null', so the condition is always 'false'.",
+      correctionMessage: "Remove the condition.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_FALSE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryNullComparisonAlwaysNullTrue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_NULL_COMPARISON',
+      problemMessage:
+          "The operand must be 'null', so the condition is always 'true'.",
+      correctionMessage: "Remove the condition.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryNullComparisonNeverNullFalse =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_NULL_COMPARISON',
+      problemMessage:
+          "The operand can't be 'null', so the condition is always 'false'.",
+      correctionMessage:
+          "Try removing the condition, an enclosing condition, or the whole "
+          "conditional statement.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryNullComparisonNeverNullTrue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_NULL_COMPARISON',
+      problemMessage:
+          "The operand can't be 'null', so the condition is always 'true'.",
+      correctionMessage: "Remove the condition.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the name of the type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unnecessaryQuestionMark = DiagnosticWithArguments(
+  name: 'UNNECESSARY_QUESTION_MARK',
+  problemMessage:
+      "The '?' is unnecessary because '{0}' is nullable without it.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNNECESSARY_QUESTION_MARK',
+  withArguments: _withArgumentsUnnecessaryQuestionMark,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessarySetLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_SET_LITERAL',
+      problemMessage:
+          "Braces unnecessarily wrap this expression in a set literal.",
+      correctionMessage: "Try removing the set literal around the expression.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_SET_LITERAL',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryTypeCheckFalse =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_TYPE_CHECK',
+      problemMessage: "Unnecessary type check; the result is always 'false'.",
+      correctionMessage:
+          "Try correcting the type check, or removing the type check.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_TYPE_CHECK_FALSE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryTypeCheckTrue =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_TYPE_CHECK',
+      problemMessage: "Unnecessary type check; the result is always 'true'.",
+      correctionMessage:
+          "Try correcting the type check, or removing the type check.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_TYPE_CHECK_TRUE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unnecessaryWildcardPattern =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNNECESSARY_WILDCARD_PATTERN',
+      problemMessage: "Unnecessary wildcard pattern.",
+      correctionMessage: "Try removing the wildcard pattern.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNNECESSARY_WILDCARD_PATTERN',
+      expectedTypes: [],
+    );
+
+/// This is a specialization of [instanceAccessToStaticMember] that is used
+/// when we are able to find the name defined in a supertype. It exists to
+/// provide a more informative error message.
+///
+/// Parameters:
+/// String p0: the name of the defining type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unqualifiedReferenceToNonLocalStaticMember = DiagnosticWithArguments(
+  name: 'UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER',
+  problemMessage:
+      "Static members from supertypes must be qualified by the name of the "
+      "defining type.",
+  correctionMessage: "Try adding '{0}.' before the name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER',
+  withArguments: _withArgumentsUnqualifiedReferenceToNonLocalStaticMember,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the defining type
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unqualifiedReferenceToStaticMemberOfExtendedType = DiagnosticWithArguments(
+  name: 'UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE',
+  problemMessage:
+      "Static members from the extended type or one of its superclasses must be "
+      "qualified by the name of the defining type.",
+  correctionMessage: "Try adding '{0}.' before the name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE',
+  withArguments: _withArgumentsUnqualifiedReferenceToStaticMemberOfExtendedType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unreachableSwitchCase =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNREACHABLE_SWITCH_CASE',
+      problemMessage: "This case is covered by the previous cases.",
+      correctionMessage:
+          "Try removing the case clause, or restructuring the preceding "
+          "patterns.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNREACHABLE_SWITCH_CASE',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unreachableSwitchDefault =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNREACHABLE_SWITCH_DEFAULT',
+      problemMessage: "This default clause is covered by the previous cases.",
+      correctionMessage:
+          "Try removing the default clause, or restructuring the preceding "
+          "patterns.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'UNREACHABLE_SWITCH_DEFAULT',
+      expectedTypes: [],
+    );
+
+/// An error code indicating that an unrecognized error code is being used to
+/// specify an error filter.
+///
+/// Parameters:
+/// String p0: the unrecognized error code
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unrecognizedErrorCode = DiagnosticWithArguments(
+  name: 'UNRECOGNIZED_ERROR_CODE',
+  problemMessage: "'{0}' isn't a recognized error code.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNRECOGNIZED_ERROR_CODE',
+  withArguments: _withArgumentsUnrecognizedErrorCode,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// A code indicating that a specified feature is not supported on Chrome OS.
+///
+/// Parameters:
+/// String p0: the name of the feature
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unsupportedChromeOsFeature = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_CHROME_OS_FEATURE',
+  problemMessage:
+      "The feature {0} isn't supported on Chrome OS, consider making it "
+      "optional.",
+  correctionMessage:
+      "Try changing to `android:required=\"false\"` for this feature.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNSUPPORTED_CHROME_OS_FEATURE',
+  withArguments: _withArgumentsUnsupportedChromeOsFeature,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// A code indicating that a specified hardware feature is not supported on
+/// Chrome OS.
+///
+/// Parameters:
+/// String p0: the name of the feature
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unsupportedChromeOsHardware = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_CHROME_OS_HARDWARE',
+  problemMessage:
+      "The feature {0} isn't supported on Chrome OS, consider making it "
+      "optional.",
+  correctionMessage:
+      "Try adding `android:required=\"false\"` for this feature.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNSUPPORTED_CHROME_OS_HARDWARE',
+  withArguments: _withArgumentsUnsupportedChromeOsHardware,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the unsupported operator
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unsupportedOperator = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_OPERATOR',
+  problemMessage: "The '{0}' operator is not supported.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'UNSUPPORTED_OPERATOR',
+  withArguments: _withArgumentsUnsupportedOperator,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// An error code indicating that a YAML section is being configured with an
+/// unsupported option where there is just one legal value.
+///
+/// Parameters:
+/// String p0: the section name
+/// String p1: the unsupported option key
+/// String p2: the legal value
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+unsupportedOptionWithLegalValue = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_OPTION_WITH_LEGAL_VALUE',
+  problemMessage:
+      "The option '{1}' isn't supported by '{0}'. Try using the only supported "
+      "option: '{2}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNSUPPORTED_OPTION_WITH_LEGAL_VALUE',
+  withArguments: _withArgumentsUnsupportedOptionWithLegalValue,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// An error code indicating that a YAML section is being configured with an
+/// unsupported option and legal options are provided.
+///
+/// Parameters:
+/// String p0: the section name
+/// String p1: the unsupported option key
+/// String p2: legal values
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required String p1,
+    required String p2,
+  })
+>
+unsupportedOptionWithLegalValues = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_OPTION_WITH_LEGAL_VALUES',
+  problemMessage: "The option '{1}' isn't supported by '{0}'.",
+  correctionMessage: "Try using one of the supported options: {2}.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNSUPPORTED_OPTION_WITH_LEGAL_VALUES',
+  withArguments: _withArgumentsUnsupportedOptionWithLegalValues,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.string,
+    ExpectedType.string,
+  ],
+);
+
+/// An error code indicating that a plugin is being configured with an
+/// unsupported option and legal options are provided.
+///
+/// Parameters:
+/// String p0: the plugin name
+/// String p1: the unsupported option key
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+unsupportedOptionWithoutValues = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_OPTION_WITHOUT_VALUES',
+  problemMessage: "The option '{1}' isn't supported by '{0}'.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNSUPPORTED_OPTION_WITHOUT_VALUES',
+  withArguments: _withArgumentsUnsupportedOptionWithoutValues,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// An error code indicating that an option entry is being configured with an
+/// unsupported value.
+///
+/// Parameters:
+/// String p0: the option name
+/// Object p1: the unsupported value
+/// String p2: legal values
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required Object p1,
+    required String p2,
+  })
+>
+unsupportedValue = DiagnosticWithArguments(
+  name: 'UNSUPPORTED_VALUE',
+  problemMessage: "The value '{1}' isn't supported by '{0}'.",
+  correctionMessage: "Try using one of the supported options: {2}.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNSUPPORTED_VALUE',
+  withArguments: _withArgumentsUnsupportedValue,
+  expectedTypes: [
+    ExpectedType.string,
+    ExpectedType.object,
+    ExpectedType.string,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments unterminatedMultiLineComment =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNTERMINATED_MULTI_LINE_COMMENT',
+      problemMessage: "Unterminated multi-line comment.",
+      correctionMessage:
+          "Try terminating the comment with '*/', or removing any unbalanced "
+          "occurrences of '/*' (because comments nest in Dart).",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'UNTERMINATED_MULTI_LINE_COMMENT',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments unterminatedStringLiteral =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'UNTERMINATED_STRING_LITERAL',
+      problemMessage: "Unterminated string literal.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'UNTERMINATED_STRING_LITERAL',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the exception variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unusedCatchClause = DiagnosticWithArguments(
+  name: 'UNUSED_CATCH_CLAUSE',
+  problemMessage:
+      "The exception variable '{0}' isn't used, so the 'catch' clause can be "
+      "removed.",
+  correctionMessage: "Try removing the catch clause.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_CATCH_CLAUSE',
+  withArguments: _withArgumentsUnusedCatchClause,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name of the stack trace variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unusedCatchStack = DiagnosticWithArguments(
+  name: 'UNUSED_CATCH_STACK',
+  problemMessage:
+      "The stack trace variable '{0}' isn't used and can be removed.",
+  correctionMessage: "Try removing the stack trace variable, or using it.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_CATCH_STACK',
+  withArguments: _withArgumentsUnusedCatchStack,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name that is declared but not referenced
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unusedElement = DiagnosticWithArguments(
+  name: 'UNUSED_ELEMENT',
+  problemMessage: "The declaration '{0}' isn't referenced.",
+  correctionMessage: "Try removing the declaration of '{0}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_ELEMENT',
+  withArguments: _withArgumentsUnusedElement,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name of the parameter that is declared but not used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unusedElementParameter = DiagnosticWithArguments(
+  name: 'UNUSED_ELEMENT_PARAMETER',
+  problemMessage: "A value for optional parameter '{0}' isn't ever given.",
+  correctionMessage: "Try removing the unused parameter.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_ELEMENT_PARAMETER',
+  withArguments: _withArgumentsUnusedElementParameter,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: the name of the unused field
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unusedField = DiagnosticWithArguments(
+  name: 'UNUSED_FIELD',
+  problemMessage: "The value of the field '{0}' isn't used.",
+  correctionMessage: "Try removing the field, or using it.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_FIELD',
+  withArguments: _withArgumentsUnusedField,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the content of the unused import's URI
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unusedImport = DiagnosticWithArguments(
+  name: 'UNUSED_IMPORT',
+  problemMessage: "Unused import: '{0}'.",
+  correctionMessage: "Try removing the import directive.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_IMPORT',
+  withArguments: _withArgumentsUnusedImport,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the label that isn't used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unusedLabel = DiagnosticWithArguments(
+  name: 'UNUSED_LABEL',
+  problemMessage: "The label '{0}' isn't used.",
+  correctionMessage:
+      "Try removing the label, or using it in either a 'break' or 'continue' "
+      "statement.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_LABEL',
+  withArguments: _withArgumentsUnusedLabel,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// Object p0: the name of the unused variable
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unusedLocalVariable = DiagnosticWithArguments(
+  name: 'UNUSED_LOCAL_VARIABLE',
+  problemMessage: "The value of the local variable '{0}' isn't used.",
+  correctionMessage: "Try removing the variable or using it.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_LOCAL_VARIABLE',
+  withArguments: _withArgumentsUnusedLocalVariable,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name of the annotated method, property or function
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unusedResult = DiagnosticWithArguments(
+  name: 'UNUSED_RESULT',
+  problemMessage: "The value of '{0}' should be used.",
+  correctionMessage:
+      "Try using the result by invoking a member, passing it to a function, "
+      "or returning it from this function.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_RESULT',
+  withArguments: _withArgumentsUnusedResult,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// The result of invoking a method, property, or function annotated with
+/// `@useResult` must be used (assigned, passed to a function as an argument,
+/// or returned by a function).
+///
+/// Parameters:
+/// Object p0: the name of the annotated method, property or function
+/// Object p1: message details
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+unusedResultWithMessage = DiagnosticWithArguments(
+  name: 'UNUSED_RESULT',
+  problemMessage: "'{0}' should be used. {1}.",
+  correctionMessage:
+      "Try using the result by invoking a member, passing it to a function, "
+      "or returning it from this function.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_RESULT_WITH_MESSAGE',
+  withArguments: _withArgumentsUnusedResultWithMessage,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// String p0: the name that is shown but not used
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+unusedShownName = DiagnosticWithArguments(
+  name: 'UNUSED_SHOWN_NAME',
+  problemMessage: "The name {0} is shown, but isn't used.",
+  correctionMessage: "Try removing the name from the list of shown members.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'UNUSED_SHOWN_NAME',
+  withArguments: _withArgumentsUnusedShownName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the URI pointing to a nonexistent file
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+uriDoesNotExist = DiagnosticWithArguments(
+  name: 'URI_DOES_NOT_EXIST',
+  problemMessage: "Target of URI doesn't exist: '{0}'.",
+  correctionMessage:
+      "Try creating the file referenced by the URI, or try using a URI for a "
+      "file that does exist.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'URI_DOES_NOT_EXIST',
+  withArguments: _withArgumentsUriDoesNotExist,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the URI pointing to a nonexistent file
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+uriDoesNotExistInDocImport = DiagnosticWithArguments(
+  name: 'URI_DOES_NOT_EXIST_IN_DOC_IMPORT',
+  problemMessage: "Target of URI doesn't exist: '{0}'.",
+  correctionMessage:
+      "Try creating the file referenced by the URI, or try using a URI for a "
+      "file that does exist.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'URI_DOES_NOT_EXIST_IN_DOC_IMPORT',
+  withArguments: _withArgumentsUriDoesNotExistInDocImport,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the URI pointing to a nonexistent file
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+uriHasNotBeenGenerated = DiagnosticWithArguments(
+  name: 'URI_HAS_NOT_BEEN_GENERATED',
+  problemMessage: "Target of URI hasn't been generated: '{0}'.",
+  correctionMessage:
+      "Try running the generator that will generate the file referenced by "
+      "the URI.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'URI_HAS_NOT_BEEN_GENERATED',
+  withArguments: _withArgumentsUriHasNotBeenGenerated,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments uriWithInterpolation =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'URI_WITH_INTERPOLATION',
+      problemMessage: "URIs can't use string interpolation.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'URI_WITH_INTERPOLATION',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+useOfNativeExtension = DiagnosticWithoutArgumentsImpl(
+  name: 'USE_OF_NATIVE_EXTENSION',
+  problemMessage:
+      "Dart native extensions are deprecated and aren't available in Dart 2.15.",
+  correctionMessage: "Try using dart:ffi for C interop.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'USE_OF_NATIVE_EXTENSION',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+useOfVoidResult = DiagnosticWithoutArgumentsImpl(
+  name: 'USE_OF_VOID_RESULT',
+  problemMessage:
+      "This expression has a type of 'void' so its value can't be used.",
+  correctionMessage:
+      "Try checking to see if you're using the correct API; there might be a "
+      "function or call that returns void you didn't expect. Also check type "
+      "parameters and variables which might also be void.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'USE_OF_VOID_RESULT',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments valuesDeclarationInEnum =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'VALUES_DECLARATION_IN_ENUM',
+      problemMessage: "A member named 'values' can't be declared in an enum.",
+      correctionMessage: "Try using a different name.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.COMPILE_TIME_ERROR,
+      uniqueName: 'VALUES_DECLARATION_IN_ENUM',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments varAndType = DiagnosticWithoutArgumentsImpl(
+  name: 'VAR_AND_TYPE',
+  problemMessage:
+      "Variables can't be declared using both 'var' and a type name.",
+  correctionMessage: "Try removing 'var.'",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VAR_AND_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments varAsTypeName = DiagnosticWithoutArgumentsImpl(
+  name: 'VAR_AS_TYPE_NAME',
+  problemMessage: "The keyword 'var' can't be used as a type name.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VAR_AS_TYPE_NAME',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments varClass = DiagnosticWithoutArgumentsImpl(
+  name: 'VAR_CLASS',
+  problemMessage: "Classes can't be declared to be 'var'.",
+  correctionMessage: "Try removing the keyword 'var'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VAR_CLASS',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments varEnum = DiagnosticWithoutArgumentsImpl(
+  name: 'VAR_ENUM',
+  problemMessage: "Enums can't be declared to be 'var'.",
+  correctionMessage: "Try removing the keyword 'var'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VAR_ENUM',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+variableLengthArrayNotLast = DiagnosticWithoutArgumentsImpl(
+  name: 'VARIABLE_LENGTH_ARRAY_NOT_LAST',
+  problemMessage:
+      "Variable length 'Array's must only occur as the last field of Structs.",
+  correctionMessage: "Try adjusting the arguments in the 'Array' annotation.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'VARIABLE_LENGTH_ARRAY_NOT_LAST',
+  expectedTypes: [],
+);
+
+/// No parameters.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+variablePatternKeywordInDeclarationContext = DiagnosticWithoutArgumentsImpl(
+  name: 'VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT',
+  problemMessage:
+      "Variable patterns in declaration context can't specify 'var' or 'final' "
+      "keyword.",
+  correctionMessage: "Try removing the keyword.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object valueType: the type of the object being assigned.
+/// Object variableType: the type of the variable being assigned to
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object valueType,
+    required Object variableType,
+  })
+>
+variableTypeMismatch = DiagnosticWithArguments(
+  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",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'VARIABLE_TYPE_MISMATCH',
+  withArguments: _withArgumentsVariableTypeMismatch,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments varReturnType = DiagnosticWithoutArgumentsImpl(
+  name: 'VAR_RETURN_TYPE',
+  problemMessage: "The return type can't be 'var'.",
+  correctionMessage:
+      "Try removing the keyword 'var', or replacing it with the name of the "
+      "return type.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VAR_RETURN_TYPE',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments varTypedef = DiagnosticWithoutArgumentsImpl(
+  name: 'VAR_TYPEDEF',
+  problemMessage: "Typedefs can't be declared to be 'var'.",
+  correctionMessage:
+      "Try removing the keyword 'var', or replacing it with the name of the "
+      "return type.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'VAR_TYPEDEF',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments voidWithTypeArguments =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'VOID_WITH_TYPE_ARGUMENTS',
+      problemMessage: "Type 'void' can't have type arguments.",
+      correctionMessage: "Try removing the type arguments.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'VOID_WITH_TYPE_ARGUMENTS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments withBeforeExtends =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'WITH_BEFORE_EXTENDS',
+      problemMessage: "The extends clause must be before the with clause.",
+      correctionMessage:
+          "Try moving the extends clause before the with clause.",
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'WITH_BEFORE_EXTENDS',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const DiagnosticWithoutArguments
+workspaceFieldNotList = DiagnosticWithoutArgumentsImpl(
+  name: 'WORKSPACE_FIELD_NOT_LIST',
+  problemMessage:
+      "The value of the 'workspace' field is required to be a list of relative "
+      "file paths.",
+  correctionMessage:
+      "Try converting the value to be a list of relative file paths.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'WORKSPACE_FIELD_NOT_LIST',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments workspaceValueNotString =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'WORKSPACE_VALUE_NOT_STRING',
+      problemMessage:
+          "Workspace entries are required to be directory paths (strings).",
+      correctionMessage: "Try converting the value to be a string.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.STATIC_WARNING,
+      uniqueName: 'WORKSPACE_VALUE_NOT_STRING',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// String p0: the path of the directory that contains the pubspec.yaml file.
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0})
+>
+workspaceValueNotSubdirectory = DiagnosticWithArguments(
+  name: 'WORKSPACE_VALUE_NOT_SUBDIRECTORY',
+  problemMessage:
+      "Workspace values must be a relative path of a subdirectory of '{0}'.",
+  correctionMessage:
+      "Try using a subdirectory of the directory containing the "
+      "'pubspec.yaml' file.",
+  type: DiagnosticType.STATIC_WARNING,
+  uniqueName: 'WORKSPACE_VALUE_NOT_SUBDIRECTORY',
+  withArguments: _withArgumentsWorkspaceValueNotSubdirectory,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Let `C` be a generic class that declares a formal type parameter `X`, and
+/// assume that `T` is a direct superinterface of `C`.
+///
+/// It is a compile-time error if `X` is explicitly defined as a covariant or
+/// 'in' type parameter and `X` occurs in a non-covariant position in `T`.
+/// It is a compile-time error if `X` is explicitly defined as a contravariant
+/// or 'out' type parameter and `X` occurs in a non-contravariant position in
+/// `T`.
+///
+/// Parameters:
+/// Object p0: the name of the type parameter
+/// Object p1: the variance modifier defined for {0}
+/// Object p2: the variance position of the type parameter {0} in the
+///            superinterface {3}
+/// Object p3: the name of the superinterface
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+  })
+>
+wrongExplicitTypeParameterVarianceInSuperinterface = DiagnosticWithArguments(
+  name: 'WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
+  problemMessage:
+      "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position "
+      "in '{3}'.",
+  correctionMessage:
+      "Try using 'in' type parameters in 'in' positions and 'out' type "
+      "parameters in 'out' positions in the superinterface.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
+  withArguments:
+      _withArgumentsWrongExplicitTypeParameterVarianceInSuperinterface,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// Parameters:
+/// String p0: the name of the declared operator
+/// int p1: the number of parameters expected
+/// int p2: the number of parameters found in the operator declaration
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required int p1,
+    required int p2,
+  })
+>
+wrongNumberOfParametersForOperator = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
+  problemMessage:
+      "Operator '{0}' should declare exactly {1} parameters, but {2} found.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
+  withArguments: _withArgumentsWrongNumberOfParametersForOperator,
+  expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
+);
+
+/// 7.1.1 Operators: It is a compile time error if the arity of the
+/// user-declared operator - is not 0 or 1.
+///
+/// Parameters:
+/// int p0: the number of parameters found in the operator declaration
+const DiagnosticWithArguments<LocatableDiagnostic Function({required int p0})>
+wrongNumberOfParametersForOperatorMinus = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
+  problemMessage:
+      "Operator '-' should declare 0 or 1 parameter, but {0} found.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS',
+  withArguments: _withArgumentsWrongNumberOfParametersForOperatorMinus,
+  expectedTypes: [ExpectedType.int],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments wrongNumberOfParametersForSetter =
+    DiagnosticWithoutArgumentsImpl(
+      name: 'WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER',
+      problemMessage:
+          "Setters must declare exactly one required positional parameter.",
+      hasPublishedDocs: true,
+      type: DiagnosticType.SYNTACTIC_ERROR,
+      uniqueName: 'WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: the name of the type being referenced (<i>G</i>)
+/// int p1: the number of type parameters that were declared
+/// int p2: the number of type arguments provided
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required int p1,
+    required int p2,
+  })
+>
+wrongNumberOfTypeArguments = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS',
+  problemMessage:
+      "The type '{0}' is declared with {1} type parameters, but {2} type "
+      "arguments were given.",
+  correctionMessage:
+      "Try adjusting the number of type arguments to match the number of "
+      "type parameters.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS',
+  withArguments: _withArgumentsWrongNumberOfTypeArguments,
+  expectedTypes: [ExpectedType.object, ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// int typeParameterCount: the number of type parameters that were declared
+/// int typeArgumentCount: the number of type arguments provided
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required int typeParameterCount,
+    required int typeArgumentCount,
+  })
+>
+wrongNumberOfTypeArgumentsAnonymousFunction = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
+  problemMessage:
+      "This function is declared with {0} type parameters, but {1} type "
+      "arguments were given.",
+  correctionMessage:
+      "Try adjusting the number of type arguments to match the number of "
+      "type parameters.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION',
+  withArguments: _withArgumentsWrongNumberOfTypeArgumentsAnonymousFunction,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// String p0: the name of the class being instantiated
+/// String p1: the name of the constructor being invoked
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+wrongNumberOfTypeArgumentsConstructor = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
+  problemMessage: "The constructor '{0}.{1}' doesn't have type parameters.",
+  correctionMessage: "Try moving type arguments to after the type name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
+  withArguments: _withArgumentsWrongNumberOfTypeArgumentsConstructor,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// String p0: the name of the class being instantiated
+/// String p1: the name of the constructor being invoked
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required String p1})
+>
+wrongNumberOfTypeArgumentsDotShorthandConstructor = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
+  problemMessage: "The constructor '{0}.{1}` doesn't have type parameters.",
+  correctionMessage:
+      "Try removing the type arguments, or adding a class name, followed by "
+      "the type arguments, then the constructor name.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_DOT_SHORTHAND_CONSTRUCTOR',
+  withArguments:
+      _withArgumentsWrongNumberOfTypeArgumentsDotShorthandConstructor,
+  expectedTypes: [ExpectedType.string, ExpectedType.string],
+);
+
+/// Parameters:
+/// int p0: the number of type parameters that were declared
+/// int p1: the number of type arguments provided
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required int p0, required int p1})
+>
+wrongNumberOfTypeArgumentsEnum = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM',
+  problemMessage:
+      "The enum is declared with {0} type parameters, but {1} type arguments "
+      "were given.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM',
+  withArguments: _withArgumentsWrongNumberOfTypeArgumentsEnum,
+  expectedTypes: [ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// String p0: the name of the extension being referenced
+/// int p1: the number of type parameters that were declared
+/// int p2: the number of type arguments provided
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String p0,
+    required int p1,
+    required int p2,
+  })
+>
+wrongNumberOfTypeArgumentsExtension = DiagnosticWithArguments(
+  name: '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.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION',
+  withArguments: _withArgumentsWrongNumberOfTypeArgumentsExtension,
+  expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// String functionName: the name of the function being referenced
+/// int typeParameterCount: the number of type parameters that were declared
+/// int typeArgumentCount: the number of type arguments provided
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required String functionName,
+    required int typeParameterCount,
+    required int typeArgumentCount,
+  })
+>
+wrongNumberOfTypeArgumentsFunction = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
+  problemMessage:
+      "The function '{0}' is declared with {1} type parameters, but {2} type "
+      "arguments were given.",
+  correctionMessage:
+      "Try adjusting the number of type arguments to match the number of "
+      "type parameters.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
+  withArguments: _withArgumentsWrongNumberOfTypeArgumentsFunction,
+  expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
+);
+
+/// Parameters:
+/// Type p0: the name of the method being referenced (<i>G</i>)
+/// int p1: the number of type parameters that were declared
+/// int p2: the number of type arguments provided
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required DartType p0,
+    required int p1,
+    required int p2,
+  })
+>
+wrongNumberOfTypeArgumentsMethod = DiagnosticWithArguments(
+  name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD',
+  problemMessage:
+      "The method '{0}' is declared with {1} type parameters, but {2} type "
+      "arguments are given.",
+  correctionMessage: "Try adjusting the number of type arguments.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD',
+  withArguments: _withArgumentsWrongNumberOfTypeArgumentsMethod,
+  expectedTypes: [ExpectedType.type, ExpectedType.int, ExpectedType.int],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+wrongSeparatorForPositionalParameter = DiagnosticWithoutArgumentsImpl(
+  name: 'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
+  problemMessage:
+      "The default value of a positional parameter should be preceded by '='.",
+  correctionMessage: "Try replacing the ':' with '='.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: the terminator that was expected
+/// Object p1: the terminator that was found
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+wrongTerminatorForParameterGroup = DiagnosticWithArguments(
+  name: 'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
+  problemMessage: "Expected '{0}' to close parameter group.",
+  correctionMessage: "Try replacing '{0}' with '{1}'.",
+  type: DiagnosticType.SYNTACTIC_ERROR,
+  uniqueName: 'WRONG_TERMINATOR_FOR_PARAMETER_GROUP',
+  withArguments: _withArgumentsWrongTerminatorForParameterGroup,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Let `C` be a generic class that declares a formal type parameter `X`, and
+/// assume that `T` is a direct superinterface of `C`. It is a compile-time
+/// error if `X` occurs contravariantly or invariantly in `T`.
+///
+/// Parameters:
+/// String p0: the name of the type parameter
+/// Type p1: the name of the super interface
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String p0, required DartType p1})
+>
+wrongTypeParameterVarianceInSuperinterface = DiagnosticWithArguments(
+  name: 'WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
+  problemMessage:
+      "'{0}' can't be used contravariantly or invariantly in '{1}'.",
+  correctionMessage:
+      "Try not using class type parameters in types of formal parameters of "
+      "function types, nor in explicitly contravariant or invariant "
+      "superinterfaces.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
+  withArguments: _withArgumentsWrongTypeParameterVarianceInSuperinterface,
+  expectedTypes: [ExpectedType.string, ExpectedType.type],
+);
+
+/// Let `C` be a generic class that declares a formal type parameter `X`.
+///
+/// If `X` is explicitly contravariant then it is a compile-time error for
+/// `X` to occur in a non-contravariant position in a member signature in the
+/// body of `C`, except when `X` is in a contravariant position in the type
+/// annotation of a covariant formal parameter.
+///
+/// If `X` is explicitly covariant then it is a compile-time error for
+/// `X` to occur in a non-covariant position in a member signature in the
+/// body of `C`, except when `X` is in a covariant position in the type
+/// annotation of a covariant formal parameter.
+///
+/// Parameters:
+/// Object p0: the variance modifier defined for {0}
+/// Object p1: the name of the type parameter
+/// Object p2: the variance position that the type parameter {1} is in
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+  })
+>
+wrongTypeParameterVariancePosition = DiagnosticWithArguments(
+  name: 'WRONG_TYPE_PARAMETER_VARIANCE_POSITION',
+  problemMessage:
+      "The '{0}' type parameter '{1}' can't be used in an '{2}' position.",
+  correctionMessage:
+      "Try removing the type parameter or change the explicit variance "
+      "modifier declaration for the type parameter to another one of 'in', "
+      "'out', or 'inout'.",
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'WRONG_TYPE_PARAMETER_VARIANCE_POSITION',
+  withArguments: _withArgumentsWrongTypeParameterVariancePosition,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// No parameters.
+const DiagnosticWithoutArguments
+yieldEachInNonGenerator = DiagnosticWithoutArgumentsImpl(
+  name: 'YIELD_IN_NON_GENERATOR',
+  problemMessage:
+      "Yield-each statements must be in a generator function (one marked with "
+      "either 'async*' or 'sync*').",
+  correctionMessage:
+      "Try adding 'async*' or 'sync*' to the enclosing function.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'YIELD_EACH_IN_NON_GENERATOR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the type of the expression after `yield*`
+/// Type p1: the return type of the function containing the `yield*`
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+yieldEachOfInvalidType = DiagnosticWithArguments(
+  name: 'YIELD_OF_INVALID_TYPE',
+  problemMessage:
+      "The type '{0}' implied by the 'yield*' expression must be assignable to "
+      "'{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'YIELD_EACH_OF_INVALID_TYPE',
+  withArguments: _withArgumentsYieldEachOfInvalidType,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+/// ?? Yield: It is a compile-time error if a yield statement appears in a
+/// function that is not a generator function.
+///
+/// No parameters.
+const DiagnosticWithoutArguments
+yieldInNonGenerator = DiagnosticWithoutArgumentsImpl(
+  name: 'YIELD_IN_NON_GENERATOR',
+  problemMessage:
+      "Yield statements must be in a generator function (one marked with either "
+      "'async*' or 'sync*').",
+  correctionMessage:
+      "Try adding 'async*' or 'sync*' to the enclosing function.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'YIELD_IN_NON_GENERATOR',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Type p0: the type of the expression after `yield`
+/// Type p1: the return type of the function containing the `yield`
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required DartType p0, required DartType p1})
+>
+yieldOfInvalidType = DiagnosticWithArguments(
+  name: 'YIELD_OF_INVALID_TYPE',
+  problemMessage: "A yielded value of type '{0}' must be assignable to '{1}'.",
+  hasPublishedDocs: true,
+  type: DiagnosticType.COMPILE_TIME_ERROR,
+  uniqueName: 'YIELD_OF_INVALID_TYPE',
+  withArguments: _withArgumentsYieldOfInvalidType,
+  expectedTypes: [ExpectedType.type, ExpectedType.type],
+);
+
+LocatableDiagnostic _withArgumentsAbiSpecificIntegerMappingUnsupported({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.abiSpecificIntegerMappingUnsupported, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAbstractSuperMemberReference({
+  required String memberKind,
+  required String name,
+}) {
+  return LocatableDiagnosticImpl(diag.abstractSuperMemberReference, [
+    memberKind,
+    name,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAmbiguousExport({
+  required String p0,
+  required Uri p1,
+  required Uri p2,
+}) {
+  return LocatableDiagnosticImpl(diag.ambiguousExport, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsAmbiguousExtensionMemberAccessThreeOrMore({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.ambiguousExtensionMemberAccessThreeOrMore,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsAmbiguousExtensionMemberAccessTwo({
+  required String p0,
+  required Element p1,
+  required Element p2,
+}) {
+  return LocatableDiagnosticImpl(diag.ambiguousExtensionMemberAccessTwo, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAmbiguousImport({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.ambiguousImport, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsAnalysisOptionDeprecated({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.analysisOptionDeprecated, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAnalysisOptionDeprecatedWithReplacement({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.analysisOptionDeprecatedWithReplacement, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsArgumentMustBeAConstant({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.argumentMustBeAConstant, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsArgumentTypeNotAssignable({
+  required DartType p0,
+  required DartType p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.argumentTypeNotAssignable, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsArgumentTypeNotAssignableToErrorHandler({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.argumentTypeNotAssignableToErrorHandler, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAssetDirectoryDoesNotExist({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.assetDirectoryDoesNotExist, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAssetDoesNotExist({required String p0}) {
+  return LocatableDiagnosticImpl(diag.assetDoesNotExist, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAssignmentOfDoNotStore({required String p0}) {
+  return LocatableDiagnosticImpl(diag.assignmentOfDoNotStore, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAssignmentToFinal({required String p0}) {
+  return LocatableDiagnosticImpl(diag.assignmentToFinal, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAssignmentToFinalLocal({required String p0}) {
+  return LocatableDiagnosticImpl(diag.assignmentToFinalLocal, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAssignmentToFinalNoSetter({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.assignmentToFinalNoSetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsAugmentationModifierExtra({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.augmentationModifierExtra, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAugmentationModifierMissing({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.augmentationModifierMissing, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAugmentationOfDifferentDeclarationKind({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.augmentationOfDifferentDeclarationKind, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAugmentedExpressionNotOperator({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.augmentedExpressionNotOperator, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBaseClassImplementedOutsideOfLibrary({
+  required String implementedClassName,
+}) {
+  return LocatableDiagnosticImpl(diag.baseClassImplementedOutsideOfLibrary, [
+    implementedClassName,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsBaseMixinImplementedOutsideOfLibrary({
+  required String implementedMixinName,
+}) {
+  return LocatableDiagnosticImpl(diag.baseMixinImplementedOutsideOfLibrary, [
+    implementedMixinName,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsBinaryOperatorWrittenOut({
+  required String string,
+  required String string2,
+}) {
+  return LocatableDiagnosticImpl(diag.binaryOperatorWrittenOut, [
+    string,
+    string2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsBodyMightCompleteNormally({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.bodyMightCompleteNormally, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBodyMightCompleteNormallyCatchError({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.bodyMightCompleteNormallyCatchError, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsBodyMightCompleteNormallyNullable({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.bodyMightCompleteNormallyNullable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsExtensionName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsExtensionName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsExtensionTypeName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsExtensionTypeName, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsPrefixName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsPrefixName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsType({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsTypedefName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsTypedefName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsTypeName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsTypeName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsBuiltInIdentifierAsTypeParameterName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.builtInIdentifierAsTypeParameterName, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsCaseExpressionTypeImplementsEquals({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.caseExpressionTypeImplementsEquals, [p0]);
+}
+
+LocatableDiagnostic
+_withArgumentsCaseExpressionTypeIsNotSwitchExpressionSubtype({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.caseExpressionTypeIsNotSwitchExpressionSubtype,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsCastFromNullableAlwaysFails({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.castFromNullableAlwaysFails, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsCastToNonType({required String p0}) {
+  return LocatableDiagnosticImpl(diag.castToNonType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsClassInstantiationAccessToInstanceMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.classInstantiationAccessToInstanceMember,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsClassInstantiationAccessToStaticMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.classInstantiationAccessToStaticMember, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsClassInstantiationAccessToUnknownMember({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.classInstantiationAccessToUnknownMember, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsClassUsedAsMixin({required String p0}) {
+  return LocatableDiagnosticImpl(diag.classUsedAsMixin, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsCompoundImplementsFinalizable({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.compoundImplementsFinalizable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConcreteClassWithAbstractMember({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.concreteClassWithAbstractMember, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingConstructorAndStaticField({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingConstructorAndStaticField, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingConstructorAndStaticGetter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingConstructorAndStaticGetter, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingConstructorAndStaticMethod({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingConstructorAndStaticMethod, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingConstructorAndStaticSetter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingConstructorAndStaticSetter, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingFieldAndMethod({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingFieldAndMethod, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingGenericInterfaces({
+  required String p0,
+  required String p1,
+  required String p2,
+  required String p3,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingGenericInterfaces, [
+    p0,
+    p1,
+    p2,
+    p3,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingInheritedMethodAndSetter({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingInheritedMethodAndSetter, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingMethodAndField({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingMethodAndField, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingModifiers({
+  required String string,
+  required String string2,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingModifiers, [string, string2]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingStaticAndInstance({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingStaticAndInstance, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndClass({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndEnum({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndEnum, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndExtension({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndExtension, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndExtensionType({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndExtensionType, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndMemberClass({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndMemberClass, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndMemberEnum({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndMemberEnum, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndMemberExtension({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.conflictingTypeVariableAndMemberExtension,
+    [p0],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsConflictingTypeVariableAndMemberExtensionType({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.conflictingTypeVariableAndMemberExtensionType,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndMemberMixin({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndMemberMixin, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConflictingTypeVariableAndMixin({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conflictingTypeVariableAndMixin, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstantPatternNeverMatchesValueType({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.constantPatternNeverMatchesValueType, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstConstructorFieldTypeMismatch({
+  required Object valueType,
+  required Object fieldName,
+  required Object fieldType,
+}) {
+  return LocatableDiagnosticImpl(diag.constConstructorFieldTypeMismatch, [
+    valueType,
+    fieldName,
+    fieldType,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstConstructorParamTypeMismatch({
+  required String valueType,
+  required String parameterType,
+}) {
+  return LocatableDiagnosticImpl(diag.constConstructorParamTypeMismatch, [
+    valueType,
+    parameterType,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsConstConstructorWithFieldInitializedByNonConst({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.constConstructorWithFieldInitializedByNonConst,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsConstConstructorWithMixinWithField({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constConstructorWithMixinWithField, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstConstructorWithMixinWithFields({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constConstructorWithMixinWithFields, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstConstructorWithNonConstSuper({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constConstructorWithNonConstSuper, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstEvalAssertionFailureWithMessage({
+  required Object message,
+}) {
+  return LocatableDiagnosticImpl(diag.constEvalAssertionFailureWithMessage, [
+    message,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstEvalPropertyAccess({
+  required String propertyName,
+  required String type,
+}) {
+  return LocatableDiagnosticImpl(diag.constEvalPropertyAccess, [
+    propertyName,
+    type,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstFieldInitializerNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.constFieldInitializerNotAssignable, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstMapKeyNotPrimitiveEquality({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constMapKeyNotPrimitiveEquality, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstNotInitialized({required String p0}) {
+  return LocatableDiagnosticImpl(diag.constNotInitialized, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstSetElementNotPrimitiveEquality({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constSetElementNotPrimitiveEquality, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsConstWithNonType({required String p0}) {
+  return LocatableDiagnosticImpl(diag.constWithNonType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstWithUndefinedConstructor({
+  required Object p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.constWithUndefinedConstructor, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsConstWithUndefinedConstructorDefault({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constWithUndefinedConstructorDefault, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsCouldNotInfer({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.couldNotInfer, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsDeadCodeOnCatchSubtype({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.deadCodeOnCatchSubtype, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsDefinitelyUnassignedLateLocalVariable({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.definitelyUnassignedLateLocalVariable, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDependenciesFieldNotMap({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.dependenciesFieldNotMap, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedExportUse({required String p0}) {
+  return LocatableDiagnosticImpl(diag.deprecatedExportUse, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedExtend({required Object typeName}) {
+  return LocatableDiagnosticImpl(diag.deprecatedExtend, [typeName]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedField({required String p0}) {
+  return LocatableDiagnosticImpl(diag.deprecatedField, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedImplement({
+  required Object typeName,
+}) {
+  return LocatableDiagnosticImpl(diag.deprecatedImplement, [typeName]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedInstantiate({
+  required Object typeName,
+}) {
+  return LocatableDiagnosticImpl(diag.deprecatedInstantiate, [typeName]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedLint({required String p0}) {
+  return LocatableDiagnosticImpl(diag.deprecatedLint, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedLintWithReplacement({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.deprecatedLintWithReplacement, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedMemberUse({required String p0}) {
+  return LocatableDiagnosticImpl(diag.deprecatedMemberUse, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedMemberUseWithMessage({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.deprecatedMemberUseWithMessage, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedMixin({required Object typeName}) {
+  return LocatableDiagnosticImpl(diag.deprecatedMixin, [typeName]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedOptional({
+  required Object parameterName,
+}) {
+  return LocatableDiagnosticImpl(diag.deprecatedOptional, [parameterName]);
+}
+
+LocatableDiagnostic _withArgumentsDeprecatedSubclass({
+  required Object typeName,
+}) {
+  return LocatableDiagnosticImpl(diag.deprecatedSubclass, [typeName]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveArgumentWrongFormat({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveArgumentWrongFormat, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveHasExtraArguments({
+  required String p0,
+  required int p1,
+  required int p2,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveHasExtraArguments, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveHasUnexpectedNamedArgument({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveHasUnexpectedNamedArgument, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveMissingClosingTag({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveMissingClosingTag, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveMissingOneArgument({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveMissingOneArgument, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveMissingOpeningTag({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveMissingOpeningTag, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveMissingThreeArguments({
+  required String p0,
+  required String p1,
+  required String p2,
+  required String p3,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveMissingThreeArguments, [
+    p0,
+    p1,
+    p2,
+    p3,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveMissingTwoArguments({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveMissingTwoArguments, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDocDirectiveUnknown({required String p0}) {
+  return LocatableDiagnosticImpl(diag.docDirectiveUnknown, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDotShorthandUndefinedGetter({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.dotShorthandUndefinedGetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsDotShorthandUndefinedInvocation({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.dotShorthandUndefinedInvocation, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateConstructorName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.duplicateConstructorName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateDefinition({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.duplicateDefinition, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateFieldFormalParameter({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.duplicateFieldFormalParameter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateFieldName({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.duplicateFieldName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateIgnore({required String p0}) {
+  return LocatableDiagnosticImpl(diag.duplicateIgnore, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateNamedArgument({required String p0}) {
+  return LocatableDiagnosticImpl(diag.duplicateNamedArgument, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicatePart({required Uri p0}) {
+  return LocatableDiagnosticImpl(diag.duplicatePart, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicatePatternAssignmentVariable({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.duplicatePatternAssignmentVariable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicatePatternField({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.duplicatePatternField, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateRule({required String p0}) {
+  return LocatableDiagnosticImpl(diag.duplicateRule, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDuplicateVariablePattern({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.duplicateVariablePattern, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsEmptyStruct({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.emptyStruct, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsEnumWithAbstractMember({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.enumWithAbstractMember, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedInstead({required String string}) {
+  return LocatableDiagnosticImpl(diag.expectedInstead, [string]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedOneListPatternTypeArguments({
+  required int p0,
+}) {
+  return LocatableDiagnosticImpl(diag.expectedOneListPatternTypeArguments, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedOneListTypeArguments({
+  required int p0,
+}) {
+  return LocatableDiagnosticImpl(diag.expectedOneListTypeArguments, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedOneSetTypeArguments({
+  required int p0,
+}) {
+  return LocatableDiagnosticImpl(diag.expectedOneSetTypeArguments, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedToken({required String p0}) {
+  return LocatableDiagnosticImpl(diag.expectedToken, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedTwoMapPatternTypeArguments({
+  required int p0,
+}) {
+  return LocatableDiagnosticImpl(diag.expectedTwoMapPatternTypeArguments, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExpectedTwoMapTypeArguments({
+  required int p0,
+}) {
+  return LocatableDiagnosticImpl(diag.expectedTwoMapTypeArguments, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExperimentalMemberUse({
+  required String member,
+}) {
+  return LocatableDiagnosticImpl(diag.experimentalMemberUse, [member]);
+}
+
+LocatableDiagnostic _withArgumentsExperimentNotEnabled({
+  required String string,
+  required String string2,
+}) {
+  return LocatableDiagnosticImpl(diag.experimentNotEnabled, [string, string2]);
+}
+
+LocatableDiagnostic _withArgumentsExperimentNotEnabledOffByDefault({
+  required String string,
+}) {
+  return LocatableDiagnosticImpl(diag.experimentNotEnabledOffByDefault, [
+    string,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExportInternalLibrary({required String p0}) {
+  return LocatableDiagnosticImpl(diag.exportInternalLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExportOfNonLibrary({required String p0}) {
+  return LocatableDiagnosticImpl(diag.exportOfNonLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExtendsDisallowedClass({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.extendsDisallowedClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExtensionAsExpression({required String p0}) {
+  return LocatableDiagnosticImpl(diag.extensionAsExpression, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsExtensionConflictingStaticAndInstance({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.extensionConflictingStaticAndInstance, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExtensionOverrideArgumentNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.extensionOverrideArgumentNotAssignable, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExtensionTypeImplementsDisallowedType({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.extensionTypeImplementsDisallowedType, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExtensionTypeImplementsNotSupertype({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.extensionTypeImplementsNotSupertype, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsExtensionTypeImplementsRepresentationNotSupertype({
+  required DartType p0,
+  required String p1,
+  required DartType p2,
+  required String p3,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.extensionTypeImplementsRepresentationNotSupertype,
+    [p0, p1, p2, p3],
+  );
+}
+
+LocatableDiagnostic _withArgumentsExtensionTypeInheritedMemberConflict({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.extensionTypeInheritedMemberConflict, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExtensionTypeWithAbstractMember({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.extensionTypeWithAbstractMember, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExtraPositionalArguments({
+  required int p0,
+  required int p1,
+}) {
+  return LocatableDiagnosticImpl(diag.extraPositionalArguments, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsExtraPositionalArgumentsCouldBeNamed({
+  required int p0,
+  required int p1,
+}) {
+  return LocatableDiagnosticImpl(diag.extraPositionalArgumentsCouldBeNamed, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsFfiNativeUnexpectedNumberOfParameters({
+  required int p0,
+  required int p1,
+}) {
+  return LocatableDiagnosticImpl(diag.ffiNativeUnexpectedNumberOfParameters, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsFfiNativeUnexpectedNumberOfParametersWithReceiver({
+  required int p0,
+  required int p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.ffiNativeUnexpectedNumberOfParametersWithReceiver,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsFieldInitializedByMultipleInitializers({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.fieldInitializedByMultipleInitializers, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsFieldInitializerNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.fieldInitializerNotAssignable, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsFieldInitializingFormalNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.fieldInitializingFormalNotAssignable, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsFinalClassExtendedOutsideOfLibrary({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.finalClassExtendedOutsideOfLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsFinalClassImplementedOutsideOfLibrary({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.finalClassImplementedOutsideOfLibrary, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsFinalClassUsedAsMixinConstraintOutsideOfLibrary({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.finalClassUsedAsMixinConstraintOutsideOfLibrary,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsFinalInitializedInDeclarationAndConstructor({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.finalInitializedInDeclarationAndConstructor,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsFinalNotInitialized({required String p0}) {
+  return LocatableDiagnosticImpl(diag.finalNotInitialized, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsFinalNotInitializedConstructor1({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.finalNotInitializedConstructor1, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsFinalNotInitializedConstructor2({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.finalNotInitializedConstructor2, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsFinalNotInitializedConstructor3Plus({
+  required String p0,
+  required String p1,
+  required int p2,
+}) {
+  return LocatableDiagnosticImpl(diag.finalNotInitializedConstructor3Plus, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsFixme({required String message}) {
+  return LocatableDiagnosticImpl(diag.fixme, [message]);
+}
+
+LocatableDiagnostic _withArgumentsForInOfInvalidElementType({
+  required DartType p0,
+  required String p1,
+  required DartType p2,
+}) {
+  return LocatableDiagnosticImpl(diag.forInOfInvalidElementType, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsForInOfInvalidType({
+  required DartType p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.forInOfInvalidType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsGenericStructSubclass({required String p0}) {
+  return LocatableDiagnosticImpl(diag.genericStructSubclass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsGetterNotAssignableSetterTypes({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+}) {
+  return LocatableDiagnosticImpl(diag.getterNotAssignableSetterTypes, [
+    p0,
+    p1,
+    p2,
+    p3,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsGetterNotSubtypeSetterTypes({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+}) {
+  return LocatableDiagnosticImpl(diag.getterNotSubtypeSetterTypes, [
+    p0,
+    p1,
+    p2,
+    p3,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsHack({required String message}) {
+  return LocatableDiagnosticImpl(diag.hack, [message]);
+}
+
+LocatableDiagnostic _withArgumentsIllegalCharacter({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.illegalCharacter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsIllegalConcreteEnumMemberDeclaration({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.illegalConcreteEnumMemberDeclaration, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsIllegalConcreteEnumMemberInheritance({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.illegalConcreteEnumMemberInheritance, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsIllegalEnumValuesInheritance({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.illegalEnumValuesInheritance, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsIllegalLanguageVersionOverride({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.illegalLanguageVersionOverride, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsImplementsDisallowedClass({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.implementsDisallowedClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsImplementsRepeated({required String p0}) {
+  return LocatableDiagnosticImpl(diag.implementsRepeated, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsImplementsSuperClass({required Element p0}) {
+  return LocatableDiagnosticImpl(diag.implementsSuperClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsImplicitSuperInitializerMissingArguments({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.implicitSuperInitializerMissingArguments,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsImplicitThisReferenceInInitializer({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.implicitThisReferenceInInitializer, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsImportInternalLibrary({required String p0}) {
+  return LocatableDiagnosticImpl(diag.importInternalLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsImportOfNonLibrary({required String p0}) {
+  return LocatableDiagnosticImpl(diag.importOfNonLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsIncludedFileParseError({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+}) {
+  return LocatableDiagnosticImpl(diag.includedFileParseError, [p0, p1, p2, p3]);
+}
+
+LocatableDiagnostic _withArgumentsIncludedFileWarning({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+}) {
+  return LocatableDiagnosticImpl(diag.includedFileWarning, [p0, p1, p2, p3]);
+}
+
+LocatableDiagnostic _withArgumentsIncludeFileNotFound({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.includeFileNotFound, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsIncompatibleLint({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.incompatibleLint, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsIncompatibleLintFiles({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.incompatibleLintFiles, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsIncompatibleLintIncluded({
+  required String p0,
+  required String p1,
+  required int p2,
+  required String p3,
+}) {
+  return LocatableDiagnosticImpl(diag.incompatibleLintIncluded, [
+    p0,
+    p1,
+    p2,
+    p3,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInconsistentCaseExpressionTypes({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.inconsistentCaseExpressionTypes, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInconsistentInheritance({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.inconsistentInheritance, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInconsistentInheritanceGetterAndMethod({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.inconsistentInheritanceGetterAndMethod, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInconsistentPatternVariableLogicalOr({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inconsistentPatternVariableLogicalOr, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnCollectionLiteral({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnCollectionLiteral, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnFunctionInvocation({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnFunctionInvocation, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnFunctionReturnType({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnFunctionReturnType, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnGenericInvocation({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnGenericInvocation, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnInstanceCreation({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnInstanceCreation, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnUninitializedVariable({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnUninitializedVariable, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInferenceFailureOnUntypedParameter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.inferenceFailureOnUntypedParameter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInitializerForNonExistentField({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.initializerForNonExistentField, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInitializerForStaticField({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.initializerForStaticField, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInitializingFormalForNonExistentField({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.initializingFormalForNonExistentField, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInstanceAccessToStaticMember({
+  required String p0,
+  required String p1,
+  required String p2,
+  required String p3,
+}) {
+  return LocatableDiagnosticImpl(diag.instanceAccessToStaticMember, [
+    p0,
+    p1,
+    p2,
+    p3,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsInstanceAccessToStaticMemberOfUnnamedExtension({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.instanceAccessToStaticMemberOfUnnamedExtension,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsIntegerLiteralImpreciseAsDouble({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.integerLiteralImpreciseAsDouble, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsIntegerLiteralOutOfRange({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.integerLiteralOutOfRange, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInterfaceClassExtendedOutsideOfLibrary({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.interfaceClassExtendedOutsideOfLibrary, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidAnnotationTarget({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidAnnotationTarget, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidAssignment({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidAssignment, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastFunction({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastFunction, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastFunctionExpr({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastFunctionExpr, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastLiteral({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastLiteral, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastLiteralList({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastLiteralList, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastLiteralMap({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastLiteralMap, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastLiteralSet({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastLiteralSet, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastMethod({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastMethod, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCastNewExpr({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidCastNewExpr, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidCodePoint({required String p0}) {
+  return LocatableDiagnosticImpl(diag.invalidCodePoint, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidDependency({required String p0}) {
+  return LocatableDiagnosticImpl(diag.invalidDependency, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidExceptionValue({required String p0}) {
+  return LocatableDiagnosticImpl(diag.invalidExceptionValue, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidExportOfInternalElement({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidExportOfInternalElement, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidExportOfInternalElementIndirectly({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidExportOfInternalElementIndirectly,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsInvalidFactoryMethodDecl({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidFactoryMethodDecl, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidFactoryMethodImpl({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidFactoryMethodImpl, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidFieldTypeInStruct({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidFieldTypeInStruct, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidImplementationOverride({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+  required Object p4,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidImplementationOverride, [
+    p0,
+    p1,
+    p2,
+    p3,
+    p4,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidImplementationOverrideSetter({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+  required Object p4,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidImplementationOverrideSetter, [
+    p0,
+    p1,
+    p2,
+    p3,
+    p4,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidLanguageVersionOverrideGreater({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidLanguageVersionOverrideGreater, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidModifierOnConstructor({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidModifierOnConstructor, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidNullAwareOperator({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidNullAwareOperator, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidNullAwareOperatorAfterShortCircuit({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidNullAwareOperatorAfterShortCircuit,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsInvalidOperatorForSuper({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidOperatorForSuper, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidOption({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidOption, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidOverride({
+  required String p0,
+  required String p1,
+  required DartType p2,
+  required String p3,
+  required DartType p4,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidOverride, [p0, p1, p2, p3, p4]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidOverrideOfNonVirtualMember({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidOverrideOfNonVirtualMember, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidOverrideSetter({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+  required Object p4,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidOverrideSetter, [
+    p0,
+    p1,
+    p2,
+    p3,
+    p4,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidSectionFormat({required String p0}) {
+  return LocatableDiagnosticImpl(diag.invalidSectionFormat, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidTypeArgumentInConstList({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidTypeArgumentInConstList, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidTypeArgumentInConstMap({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidTypeArgumentInConstMap, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidTypeArgumentInConstSet({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidTypeArgumentInConstSet, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUri({required String p0}) {
+  return LocatableDiagnosticImpl(diag.invalidUri, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUseOfDoNotSubmitMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidUseOfDoNotSubmitMember, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUseOfInternalMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidUseOfInternalMember, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUseOfProtectedMember({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidUseOfProtectedMember, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUseOfVisibleForOverridingMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidUseOfVisibleForOverridingMember, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUseOfVisibleForTemplateMember({
+  required String p0,
+  required Uri p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidUseOfVisibleForTemplateMember, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidUseOfVisibleForTestingMember({
+  required String p0,
+  required Uri p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidUseOfVisibleForTestingMember, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidVisibilityAnnotation({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidVisibilityAnnotation, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsInvalidWidgetPreviewPrivateArgument({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.invalidWidgetPreviewPrivateArgument, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsInvocationOfExtensionWithoutCall({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invocationOfExtensionWithoutCall, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsInvocationOfNonFunction({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.invocationOfNonFunction, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsLabelInOuterScope({required String p0}) {
+  return LocatableDiagnosticImpl(diag.labelInOuterScope, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsLabelUndefined({required String p0}) {
+  return LocatableDiagnosticImpl(diag.labelUndefined, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsListElementTypeNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.listElementTypeNotAssignable, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsListElementTypeNotAssignableNullability({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.listElementTypeNotAssignableNullability, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMapKeyTypeNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mapKeyTypeNotAssignable, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMapKeyTypeNotAssignableNullability({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mapKeyTypeNotAssignableNullability, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMapValueTypeNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mapValueTypeNotAssignable, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMapValueTypeNotAssignableNullability({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mapValueTypeNotAssignableNullability, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMissingAnnotationOnStructField({
+  required DartType p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.missingAnnotationOnStructField, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMissingDartLibrary({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.missingDartLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingDefaultValueForParameter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.missingDefaultValueForParameter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingDefaultValueForParameterPositional({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.missingDefaultValueForParameterPositional,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsMissingDependency({required String p0}) {
+  return LocatableDiagnosticImpl(diag.missingDependency, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingEnumConstantInSwitch({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.missingEnumConstantInSwitch, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingExceptionValue({required String p0}) {
+  return LocatableDiagnosticImpl(diag.missingExceptionValue, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingOverrideOfMustBeOverriddenOne({
+  required String member,
+}) {
+  return LocatableDiagnosticImpl(diag.missingOverrideOfMustBeOverriddenOne, [
+    member,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMissingOverrideOfMustBeOverriddenThreePlus({
+  required String firstMember,
+  required String secondMember,
+  required String additionalCount,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.missingOverrideOfMustBeOverriddenThreePlus,
+    [firstMember, secondMember, additionalCount],
+  );
+}
+
+LocatableDiagnostic _withArgumentsMissingOverrideOfMustBeOverriddenTwo({
+  required String firstMember,
+  required String secondMember,
+}) {
+  return LocatableDiagnosticImpl(diag.missingOverrideOfMustBeOverriddenTwo, [
+    firstMember,
+    secondMember,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMissingRequiredArgument({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.missingRequiredArgument, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingRequiredParam({required String p0}) {
+  return LocatableDiagnosticImpl(diag.missingRequiredParam, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingRequiredParamWithDetails({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.missingRequiredParamWithDetails, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMissingTerminatorForParameterGroup({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.missingTerminatorForParameterGroup, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMissingVariablePattern({required String p0}) {
+  return LocatableDiagnosticImpl(diag.missingVariablePattern, [p0]);
+}
+
+LocatableDiagnostic
+_withArgumentsMixinApplicationConcreteSuperInvokedMemberType({
+  required String p0,
+  required DartType p1,
+  required DartType p2,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.mixinApplicationConcreteSuperInvokedMemberType,
+    [p0, p1, p2],
+  );
+}
+
+LocatableDiagnostic _withArgumentsMixinApplicationNoConcreteSuperInvokedMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.mixinApplicationNoConcreteSuperInvokedMember,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsMixinApplicationNoConcreteSuperInvokedSetter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.mixinApplicationNoConcreteSuperInvokedSetter,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsMixinApplicationNotImplementedInterface({
+  required DartType p0,
+  required DartType p1,
+  required DartType p2,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinApplicationNotImplementedInterface, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMixinClassDeclarationExtendsNotObject({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinClassDeclarationExtendsNotObject, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsMixinClassDeclaresConstructor({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinClassDeclaresConstructor, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMixinInheritsFromNotObject({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinInheritsFromNotObject, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMixinOfDisallowedClass({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinOfDisallowedClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMixinOnSealedClass({required String p0}) {
+  return LocatableDiagnosticImpl(diag.mixinOnSealedClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMixinsSuperClass({required Element p0}) {
+  return LocatableDiagnosticImpl(diag.mixinsSuperClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMixinSubtypeOfBaseIsNotBase({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinSubtypeOfBaseIsNotBase, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMixinSubtypeOfFinalIsNotBase({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mixinSubtypeOfFinalIsNotBase, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMixinSuperClassConstraintDisallowedClass({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.mixinSuperClassConstraintDisallowedClass,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsModifierOutOfOrder({
+  required String string,
+  required String string2,
+}) {
+  return LocatableDiagnosticImpl(diag.modifierOutOfOrder, [string, string2]);
+}
+
+LocatableDiagnostic _withArgumentsMultipleClauses({
+  required String string,
+  required String string2,
+}) {
+  return LocatableDiagnosticImpl(diag.multipleClauses, [string, string2]);
+}
+
+LocatableDiagnostic _withArgumentsMultiplePlugins({required String p0}) {
+  return LocatableDiagnosticImpl(diag.multiplePlugins, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMultipleVariablesInForEach({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.multipleVariablesInForEach, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMustBeANativeFunctionType({
+  required Object p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.mustBeANativeFunctionType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsMustBeASubtype({
+  required DartType p0,
+  required DartType p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.mustBeASubtype, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsMustBeImmutable({required String p0}) {
+  return LocatableDiagnosticImpl(diag.mustBeImmutable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMustCallSuper({required String p0}) {
+  return LocatableDiagnosticImpl(diag.mustCallSuper, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMustReturnVoid({required DartType p0}) {
+  return LocatableDiagnosticImpl(diag.mustReturnVoid, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNativeFieldInvalidType({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nativeFieldInvalidType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNewWithNonType({required String p0}) {
+  return LocatableDiagnosticImpl(diag.newWithNonType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNewWithUndefinedConstructor({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.newWithUndefinedConstructor, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsNewWithUndefinedConstructorDefault({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.newWithUndefinedConstructorDefault, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNoCombinedSuperSignature({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.noCombinedSuperSignature, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsNoDefaultSuperConstructorExplicit({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.noDefaultSuperConstructorExplicit, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNoDefaultSuperConstructorImplicit({
+  required DartType p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.noDefaultSuperConstructorImplicit, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNoGenerativeConstructorsInSuperclass({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.noGenerativeConstructorsInSuperclass, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsNonAbstractClassInheritsAbstractMemberFivePlus({
+  required String p0,
+  required String p1,
+  required String p2,
+  required String p3,
+  required int p4,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.nonAbstractClassInheritsAbstractMemberFivePlus,
+    [p0, p1, p2, p3, p4],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNonAbstractClassInheritsAbstractMemberFour({
+  required String p0,
+  required String p1,
+  required String p2,
+  required String p3,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.nonAbstractClassInheritsAbstractMemberFour,
+    [p0, p1, p2, p3],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNonAbstractClassInheritsAbstractMemberOne({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.nonAbstractClassInheritsAbstractMemberOne,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNonAbstractClassInheritsAbstractMemberThree({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.nonAbstractClassInheritsAbstractMemberThree,
+    [p0, p1, p2],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNonAbstractClassInheritsAbstractMemberTwo({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.nonAbstractClassInheritsAbstractMemberTwo,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNonBoolOperand({required String p0}) {
+  return LocatableDiagnosticImpl(diag.nonBoolOperand, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonConstantTypeArgument({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonConstantTypeArgument, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonConstArgumentForConstParameter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonConstArgumentForConstParameter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonConstCallToLiteralConstructor({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonConstCallToLiteralConstructor, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonConstCallToLiteralConstructorUsingNew({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.nonConstCallToLiteralConstructorUsingNew,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNonExhaustiveSwitchExpression({
+  required DartType type,
+  required String unmatchedPattern,
+  required String suggestedPattern,
+}) {
+  return LocatableDiagnosticImpl(diag.nonExhaustiveSwitchExpression, [
+    type,
+    unmatchedPattern,
+    suggestedPattern,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonExhaustiveSwitchExpressionPrivate({
+  required DartType type,
+}) {
+  return LocatableDiagnosticImpl(diag.nonExhaustiveSwitchExpressionPrivate, [
+    type,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonExhaustiveSwitchStatement({
+  required DartType type,
+  required String unmatchedPattern,
+  required String suggestedPattern,
+}) {
+  return LocatableDiagnosticImpl(diag.nonExhaustiveSwitchStatement, [
+    type,
+    unmatchedPattern,
+    suggestedPattern,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonExhaustiveSwitchStatementPrivate({
+  required DartType type,
+}) {
+  return LocatableDiagnosticImpl(diag.nonExhaustiveSwitchStatementPrivate, [
+    type,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonGenerativeConstructor({
+  required Element p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonGenerativeConstructor, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonGenerativeImplicitConstructor({
+  required String p0,
+  required String p1,
+  required Element p2,
+}) {
+  return LocatableDiagnosticImpl(diag.nonGenerativeImplicitConstructor, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonNativeFunctionTypeArgumentToPointer({
+  required DartType p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonNativeFunctionTypeArgumentToPointer, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonSizedTypeArgument({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.nonSizedTypeArgument, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsNonTypeAsTypeArgument({required String p0}) {
+  return LocatableDiagnosticImpl(diag.nonTypeAsTypeArgument, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonTypeInCatchClause({required String p0}) {
+  return LocatableDiagnosticImpl(diag.nonTypeInCatchClause, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNonUserDefinableOperator({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonUserDefinableOperator, [p0]);
+}
+
+LocatableDiagnostic
+_withArgumentsNotAssignedPotentiallyNonNullableLocalVariable({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.notAssignedPotentiallyNonNullableLocalVariable,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNotAType({required String p0}) {
+  return LocatableDiagnosticImpl(diag.notAType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNotBinaryOperator({required String p0}) {
+  return LocatableDiagnosticImpl(diag.notBinaryOperator, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNotEnoughPositionalArgumentsNamePlural({
+  required int p0,
+  required int p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.notEnoughPositionalArgumentsNamePlural, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNotEnoughPositionalArgumentsNameSingular({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.notEnoughPositionalArgumentsNameSingular,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNotEnoughPositionalArgumentsPlural({
+  required int p0,
+  required int p1,
+}) {
+  return LocatableDiagnosticImpl(diag.notEnoughPositionalArgumentsPlural, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNotInitializedNonNullableInstanceField({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.notInitializedNonNullableInstanceField, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsNotInitializedNonNullableInstanceFieldConstructor({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.notInitializedNonNullableInstanceFieldConstructor,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsNotInitializedNonNullableVariable({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.notInitializedNonNullableVariable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsNullArgumentToNonNullType({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.nullArgumentToNonNullType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsOnRepeated({required String p0}) {
+  return LocatableDiagnosticImpl(diag.onRepeated, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsOutOfOrderClauses({
+  required String string,
+  required String string2,
+}) {
+  return LocatableDiagnosticImpl(diag.outOfOrderClauses, [string, string2]);
+}
+
+LocatableDiagnostic _withArgumentsParseError({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.parseError, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPartOfDifferentLibrary({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.partOfDifferentLibrary, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsPartOfNonPart({required String p0}) {
+  return LocatableDiagnosticImpl(diag.partOfNonPart, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPartOfUnnamedLibrary({required String p0}) {
+  return LocatableDiagnosticImpl(diag.partOfUnnamedLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPathDoesNotExist({required String p0}) {
+  return LocatableDiagnosticImpl(diag.pathDoesNotExist, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPathNotPosix({required String p0}) {
+  return LocatableDiagnosticImpl(diag.pathNotPosix, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPathPubspecDoesNotExist({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.pathPubspecDoesNotExist, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPatternNeverMatchesValueType({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.patternNeverMatchesValueType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsPatternTypeMismatchInIrrefutableContext({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.patternTypeMismatchInIrrefutableContext, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsPatternVariableSharedCaseScopeDifferentFinalityOrType({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.patternVariableSharedCaseScopeDifferentFinalityOrType,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsPatternVariableSharedCaseScopeHasLabel({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.patternVariableSharedCaseScopeHasLabel, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsPatternVariableSharedCaseScopeNotAllCases({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.patternVariableSharedCaseScopeNotAllCases,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsPermissionImpliesUnsupportedHardware({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.permissionImpliesUnsupportedHardware, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsPluginsInInnerOptions({
+  required String contextRoot,
+}) {
+  return LocatableDiagnosticImpl(diag.pluginsInInnerOptions, [contextRoot]);
+}
+
+LocatableDiagnostic _withArgumentsPrefixCollidesWithTopLevelMember({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.prefixCollidesWithTopLevelMember, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPrefixIdentifierNotFollowedByDot({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.prefixIdentifierNotFollowedByDot, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPrefixShadowedByLocalDeclaration({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.prefixShadowedByLocalDeclaration, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPrivateCollisionInMixinApplication({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.privateCollisionInMixinApplication, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsPrivateNamedParameterDuplicatePublicName({
+  required String publicName,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.privateNamedParameterDuplicatePublicName,
+    [publicName],
+  );
+}
+
+LocatableDiagnostic _withArgumentsPrivateSetter({required String p0}) {
+  return LocatableDiagnosticImpl(diag.privateSetter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsReadPotentiallyUnassignedFinal({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.readPotentiallyUnassignedFinal, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveIncludeFile({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.recursiveIncludeFile, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritance({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.recursiveInterfaceInheritance, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritanceExtends({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.recursiveInterfaceInheritanceExtends, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritanceImplements({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.recursiveInterfaceInheritanceImplements, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritanceOn({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.recursiveInterfaceInheritanceOn, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritanceWith({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.recursiveInterfaceInheritanceWith, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsRedeclareOnNonRedeclaringMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.redeclareOnNonRedeclaringMember, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsRedirectGenerativeToMissingConstructor({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.redirectGenerativeToMissingConstructor, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsRedirectToAbstractClassConstructor({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.redirectToAbstractClassConstructor, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsRedirectToInvalidFunctionType({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.redirectToInvalidFunctionType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsRedirectToInvalidReturnType({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.redirectToInvalidReturnType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsRedirectToMissingConstructor({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.redirectToMissingConstructor, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsRedirectToNonClass({required String p0}) {
+  return LocatableDiagnosticImpl(diag.redirectToNonClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsReferencedBeforeDeclaration({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.referencedBeforeDeclaration, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsRelationalPatternOperandTypeNotAssignable({
+  required DartType p0,
+  required DartType p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.relationalPatternOperandTypeNotAssignable,
+    [p0, p1, p2],
+  );
+}
+
+LocatableDiagnostic _withArgumentsRemovedLint({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.removedLint, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsRemovedLintUse({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.removedLintUse, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsReplacedLint({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.replacedLint, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsReplacedLintUse({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.replacedLintUse, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsReturnOfDoNotStore({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.returnOfDoNotStore, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromCatchError({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.returnOfInvalidTypeFromCatchError, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromClosure({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.returnOfInvalidTypeFromClosure, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromConstructor({
+  required DartType p0,
+  required DartType p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.returnOfInvalidTypeFromConstructor, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromFunction({
+  required DartType p0,
+  required DartType p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.returnOfInvalidTypeFromFunction, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromMethod({
+  required DartType p0,
+  required DartType p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.returnOfInvalidTypeFromMethod, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsReturnTypeInvalidForCatchError({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.returnTypeInvalidForCatchError, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsSdkVersionSince({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.sdkVersionSince, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsSealedClassSubtypeOutsideOfLibrary({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.sealedClassSubtypeOutsideOfLibrary, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsSetElementTypeNotAssignable({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.setElementTypeNotAssignable, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsSetElementTypeNotAssignableNullability({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.setElementTypeNotAssignableNullability, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsStaticAccessToInstanceMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.staticAccessToInstanceMember, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsStrictRawType({required DartType p0}) {
+  return LocatableDiagnosticImpl(diag.strictRawType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsSubtypeOfBaseIsNotBaseFinalOrSealed({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.subtypeOfBaseIsNotBaseFinalOrSealed, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsSubtypeOfFinalIsNotBaseFinalOrSealed({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.subtypeOfFinalIsNotBaseFinalOrSealed, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsSubtypeOfSealedClass({required String p0}) {
+  return LocatableDiagnosticImpl(diag.subtypeOfSealedClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsSubtypeOfStructClassInExtends({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.subtypeOfStructClassInExtends, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsSubtypeOfStructClassInImplements({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.subtypeOfStructClassInImplements, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsSubtypeOfStructClassInWith({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.subtypeOfStructClassInWith, [p0, p1]);
+}
+
+LocatableDiagnostic
+_withArgumentsSuperFormalParameterTypeIsNotSubtypeOfAssociated({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.superFormalParameterTypeIsNotSubtypeOfAssociated,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsSuperInvocationNotLast({required String p0}) {
+  return LocatableDiagnosticImpl(diag.superInvocationNotLast, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsTextDirectionCodePointInComment({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.textDirectionCodePointInComment, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsTextDirectionCodePointInLiteral({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.textDirectionCodePointInLiteral, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsThrowOfInvalidType({required DartType p0}) {
+  return LocatableDiagnosticImpl(diag.throwOfInvalidType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsTodo({required String message}) {
+  return LocatableDiagnosticImpl(diag.todo, [message]);
+}
+
+LocatableDiagnostic _withArgumentsTopLevelCycle({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.topLevelCycle, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsTypeAnnotationDeferredClass({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.typeAnnotationDeferredClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsTypeArgumentNotMatchingBounds({
+  required DartType p0,
+  required String p1,
+  required DartType p2,
+}) {
+  return LocatableDiagnosticImpl(diag.typeArgumentNotMatchingBounds, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsTypeParameterSupertypeOfItsBound({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.typeParameterSupertypeOfItsBound, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsTypeTestWithNonType({required String p0}) {
+  return LocatableDiagnosticImpl(diag.typeTestWithNonType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsTypeTestWithUndefinedName({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.typeTestWithUndefinedName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnableGetContent({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unableGetContent, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUncheckedMethodInvocationOfNullableValue({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.uncheckedMethodInvocationOfNullableValue,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsUncheckedOperatorInvocationOfNullableValue({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.uncheckedOperatorInvocationOfNullableValue,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsUncheckedPropertyAccessOfNullableValue({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.uncheckedPropertyAccessOfNullableValue, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedAnnotation({required String p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedAnnotation, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedClass({required String p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedClass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedClassBoolean({required String p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedClassBoolean, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedConstructorInInitializer({
+  required DartType p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedConstructorInInitializer, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedConstructorInInitializerDefault({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.undefinedConstructorInInitializerDefault,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsUndefinedEnumConstant({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedEnumConstant, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedEnumConstructorNamed({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedEnumConstructorNamed, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedExtensionGetter({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedExtensionGetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedExtensionMethod({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedExtensionMethod, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedExtensionOperator({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedExtensionOperator, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedExtensionSetter({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedExtensionSetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedFunction({required String p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedFunction, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedGetter({
+  required String p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedGetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedGetterOnFunctionType({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedGetterOnFunctionType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedHiddenName({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedHiddenName, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedIdentifier({required String p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedIdentifier, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedLint({required String p0}) {
+  return LocatableDiagnosticImpl(diag.undefinedLint, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedMethod({
+  required String p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedMethod, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedMethodOnFunctionType({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedMethodOnFunctionType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedNamedParameter({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedNamedParameter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedOperator({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedOperator, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedPrefixedName({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedPrefixedName, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedReferencedParameter({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedReferencedParameter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedSetter({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedSetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedSetterOnFunctionType({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedSetterOnFunctionType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedShownName({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedShownName, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedSuperGetter({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedSuperGetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedSuperMethod({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedSuperMethod, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedSuperOperator({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedSuperOperator, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndefinedSuperSetter({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.undefinedSuperSetter, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUndone({required String message}) {
+  return LocatableDiagnosticImpl(diag.undone, [message]);
+}
+
+LocatableDiagnostic _withArgumentsUnexpectedTerminatorForParameterGroup({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unexpectedTerminatorForParameterGroup, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUnexpectedToken({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unexpectedToken, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnignorableIgnore({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unignorableIgnore, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnknownPlatform({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unknownPlatform, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryDevDependency({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryDevDependency, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryImport({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryImport, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryQuestionMark({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryQuestionMark, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnqualifiedReferenceToNonLocalStaticMember({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.unqualifiedReferenceToNonLocalStaticMember,
+    [p0],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsUnqualifiedReferenceToStaticMemberOfExtendedType({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.unqualifiedReferenceToStaticMemberOfExtendedType,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsUnrecognizedErrorCode({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unrecognizedErrorCode, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedChromeOsFeature({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unsupportedChromeOsFeature, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedChromeOsHardware({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unsupportedChromeOsHardware, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedOperator({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unsupportedOperator, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedOptionWithLegalValue({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.unsupportedOptionWithLegalValue, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedOptionWithLegalValues({
+  required String p0,
+  required String p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.unsupportedOptionWithLegalValues, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedOptionWithoutValues({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.unsupportedOptionWithoutValues, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUnsupportedValue({
+  required String p0,
+  required Object p1,
+  required String p2,
+}) {
+  return LocatableDiagnosticImpl(diag.unsupportedValue, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedCatchClause({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unusedCatchClause, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedCatchStack({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unusedCatchStack, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedElement({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unusedElement, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedElementParameter({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unusedElementParameter, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedField({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unusedField, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedImport({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unusedImport, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedLabel({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unusedLabel, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedLocalVariable({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unusedLocalVariable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedResult({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unusedResult, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedResultWithMessage({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.unusedResultWithMessage, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsUnusedShownName({required String p0}) {
+  return LocatableDiagnosticImpl(diag.unusedShownName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUriDoesNotExist({required String p0}) {
+  return LocatableDiagnosticImpl(diag.uriDoesNotExist, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUriDoesNotExistInDocImport({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.uriDoesNotExistInDocImport, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUriHasNotBeenGenerated({required String p0}) {
+  return LocatableDiagnosticImpl(diag.uriHasNotBeenGenerated, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsVariableTypeMismatch({
+  required Object valueType,
+  required Object variableType,
+}) {
+  return LocatableDiagnosticImpl(diag.variableTypeMismatch, [
+    valueType,
+    variableType,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWorkspaceValueNotSubdirectory({
+  required String p0,
+}) {
+  return LocatableDiagnosticImpl(diag.workspaceValueNotSubdirectory, [p0]);
+}
+
+LocatableDiagnostic
+_withArgumentsWrongExplicitTypeParameterVarianceInSuperinterface({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.wrongExplicitTypeParameterVarianceInSuperinterface,
+    [p0, p1, p2, p3],
+  );
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfParametersForOperator({
+  required String p0,
+  required int p1,
+  required int p2,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfParametersForOperator, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfParametersForOperatorMinus({
+  required int p0,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfParametersForOperatorMinus, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArguments({
+  required Object p0,
+  required int p1,
+  required int p2,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfTypeArguments, [p0, p1, p2]);
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsAnonymousFunction({
+  required int typeParameterCount,
+  required int typeArgumentCount,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.wrongNumberOfTypeArgumentsAnonymousFunction,
+    [typeParameterCount, typeArgumentCount],
+  );
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsConstructor({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfTypeArgumentsConstructor, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic
+_withArgumentsWrongNumberOfTypeArgumentsDotShorthandConstructor({
+  required String p0,
+  required String p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.wrongNumberOfTypeArgumentsDotShorthandConstructor,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsEnum({
+  required int p0,
+  required int p1,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfTypeArgumentsEnum, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsExtension({
+  required String p0,
+  required int p1,
+  required int p2,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfTypeArgumentsExtension, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsFunction({
+  required String functionName,
+  required int typeParameterCount,
+  required int typeArgumentCount,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfTypeArgumentsFunction, [
+    functionName,
+    typeParameterCount,
+    typeArgumentCount,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsMethod({
+  required DartType p0,
+  required int p1,
+  required int p2,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongNumberOfTypeArgumentsMethod, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWrongTerminatorForParameterGroup({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongTerminatorForParameterGroup, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsWrongTypeParameterVarianceInSuperinterface({
+  required String p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.wrongTypeParameterVarianceInSuperinterface,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsWrongTypeParameterVariancePosition({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+}) {
+  return LocatableDiagnosticImpl(diag.wrongTypeParameterVariancePosition, [
+    p0,
+    p1,
+    p2,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsYieldEachOfInvalidType({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.yieldEachOfInvalidType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsYieldOfInvalidType({
+  required DartType p0,
+  required DartType p1,
+}) {
+  return LocatableDiagnosticImpl(diag.yieldOfInvalidType, [p0, p1]);
+}
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.dart
index 9f11b9a..9a434cf 100644
--- a/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.dart
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.dart
@@ -4,10 +4,6 @@
 
 import 'package:_fe_analyzer_shared/src/base/analyzer_public_api.dart';
 import 'package:_fe_analyzer_shared/src/base/errors.dart';
-import 'package:analyzer/src/dart/error/ffi_code.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/manifest/manifest_warning_code.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 part 'diagnostic_code_values.g.dart';
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.g.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.g.dart
index 3e79032..5e61829 100644
--- a/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.g.dart
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic_code_values.g.dart
@@ -7,1302 +7,1307 @@
 // Instead modify 'pkg/analyzer/messages.yaml' and run
 // 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
 
-// We allow some snake_case and SCREAMING_SNAKE_CASE identifiers in generated
-// code, as they match names declared in the source configuration files.
-// ignore_for_file: constant_identifier_names
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
+// Generated comments don't quite align with flutter style.
+// ignore_for_file: flutter_style_todos
 
 part of 'diagnostic_code_values.dart';
 
 @AnalyzerPublicApi(message: 'exported by lib/error/error.dart')
 const List<DiagnosticCode> diagnosticCodeValues = [
-  AnalysisOptionsErrorCode.includedFileParseError,
-  AnalysisOptionsErrorCode.parseError,
-  AnalysisOptionsWarningCode.analysisOptionDeprecated,
-  AnalysisOptionsWarningCode.analysisOptionDeprecatedWithReplacement,
-  AnalysisOptionsWarningCode.deprecatedLint,
-  AnalysisOptionsWarningCode.deprecatedLintWithReplacement,
-  AnalysisOptionsWarningCode.duplicateRule,
-  AnalysisOptionsWarningCode.includedFileWarning,
-  AnalysisOptionsWarningCode.includeFileNotFound,
-  AnalysisOptionsWarningCode.incompatibleLint,
-  AnalysisOptionsWarningCode.incompatibleLintFiles,
-  AnalysisOptionsWarningCode.incompatibleLintIncluded,
-  AnalysisOptionsWarningCode.invalidOption,
-  AnalysisOptionsWarningCode.invalidSectionFormat,
-  AnalysisOptionsWarningCode.multiplePlugins,
-  AnalysisOptionsWarningCode.pluginsInInnerOptions,
-  AnalysisOptionsWarningCode.recursiveIncludeFile,
-  AnalysisOptionsWarningCode.removedLint,
-  AnalysisOptionsWarningCode.replacedLint,
-  AnalysisOptionsWarningCode.undefinedLint,
-  AnalysisOptionsWarningCode.unrecognizedErrorCode,
-  AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
-  AnalysisOptionsWarningCode.unsupportedOptionWithLegalValue,
-  AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues,
-  AnalysisOptionsWarningCode.unsupportedValue,
-  CompileTimeErrorCode.abstractFieldConstructorInitializer,
-  CompileTimeErrorCode.abstractFieldInitializer,
-  CompileTimeErrorCode.abstractSuperMemberReference,
-  CompileTimeErrorCode.ambiguousExport,
-  CompileTimeErrorCode.ambiguousExtensionMemberAccessThreeOrMore,
-  CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
-  CompileTimeErrorCode.ambiguousImport,
-  CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth,
-  CompileTimeErrorCode.ambiguousSetOrMapLiteralEither,
-  CompileTimeErrorCode.argumentTypeNotAssignable,
-  CompileTimeErrorCode.assertInRedirectingConstructor,
-  CompileTimeErrorCode.assignmentToConst,
-  CompileTimeErrorCode.assignmentToFinal,
-  CompileTimeErrorCode.assignmentToFinalLocal,
-  CompileTimeErrorCode.assignmentToFinalNoSetter,
-  CompileTimeErrorCode.assignmentToFunction,
-  CompileTimeErrorCode.assignmentToMethod,
-  CompileTimeErrorCode.assignmentToType,
-  CompileTimeErrorCode.asyncForInWrongContext,
-  CompileTimeErrorCode.augmentationExtendsClauseAlreadyPresent,
-  CompileTimeErrorCode.augmentationModifierExtra,
-  CompileTimeErrorCode.augmentationModifierMissing,
-  CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-  CompileTimeErrorCode.augmentationTypeParameterBound,
-  CompileTimeErrorCode.augmentationTypeParameterCount,
-  CompileTimeErrorCode.augmentationTypeParameterName,
-  CompileTimeErrorCode.augmentationWithoutDeclaration,
-  CompileTimeErrorCode.augmentedExpressionIsNotSetter,
-  CompileTimeErrorCode.augmentedExpressionIsSetter,
-  CompileTimeErrorCode.augmentedExpressionNotOperator,
-  CompileTimeErrorCode.awaitInLateLocalVariableInitializer,
-  CompileTimeErrorCode.awaitInWrongContext,
-  CompileTimeErrorCode.awaitOfIncompatibleType,
-  CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-  CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-  CompileTimeErrorCode.bodyMightCompleteNormally,
-  CompileTimeErrorCode.breakLabelOnSwitchMember,
-  CompileTimeErrorCode.builtInIdentifierAsExtensionName,
-  CompileTimeErrorCode.builtInIdentifierAsExtensionTypeName,
-  CompileTimeErrorCode.builtInIdentifierAsPrefixName,
-  CompileTimeErrorCode.builtInIdentifierAsType,
-  CompileTimeErrorCode.builtInIdentifierAsTypedefName,
-  CompileTimeErrorCode.builtInIdentifierAsTypeName,
-  CompileTimeErrorCode.builtInIdentifierAsTypeParameterName,
-  CompileTimeErrorCode.caseExpressionTypeImplementsEquals,
-  CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
-  CompileTimeErrorCode.castToNonType,
-  CompileTimeErrorCode.classInstantiationAccessToInstanceMember,
-  CompileTimeErrorCode.classInstantiationAccessToStaticMember,
-  CompileTimeErrorCode.classInstantiationAccessToUnknownMember,
-  CompileTimeErrorCode.classUsedAsMixin,
-  CompileTimeErrorCode.concreteClassHasEnumSuperinterface,
-  CompileTimeErrorCode.concreteClassWithAbstractMember,
-  CompileTimeErrorCode.conflictingConstructorAndStaticField,
-  CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
-  CompileTimeErrorCode.conflictingConstructorAndStaticMethod,
-  CompileTimeErrorCode.conflictingConstructorAndStaticSetter,
-  CompileTimeErrorCode.conflictingFieldAndMethod,
-  CompileTimeErrorCode.conflictingGenericInterfaces,
-  CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
-  CompileTimeErrorCode.conflictingMethodAndField,
-  CompileTimeErrorCode.conflictingStaticAndInstance,
-  CompileTimeErrorCode.conflictingTypeVariableAndClass,
-  CompileTimeErrorCode.conflictingTypeVariableAndEnum,
-  CompileTimeErrorCode.conflictingTypeVariableAndExtension,
-  CompileTimeErrorCode.conflictingTypeVariableAndExtensionType,
-  CompileTimeErrorCode.conflictingTypeVariableAndMemberClass,
-  CompileTimeErrorCode.conflictingTypeVariableAndMemberEnum,
-  CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension,
-  CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-  CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin,
-  CompileTimeErrorCode.conflictingTypeVariableAndMixin,
-  CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-  CompileTimeErrorCode.constConstructorConstantFromDeferredLibrary,
-  CompileTimeErrorCode.constConstructorFieldTypeMismatch,
-  CompileTimeErrorCode.constConstructorParamTypeMismatch,
-  CompileTimeErrorCode.constConstructorThrowsException,
-  CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-  CompileTimeErrorCode.constConstructorWithMixinWithField,
-  CompileTimeErrorCode.constConstructorWithMixinWithFields,
-  CompileTimeErrorCode.constConstructorWithNonConstSuper,
-  CompileTimeErrorCode.constConstructorWithNonFinalField,
-  CompileTimeErrorCode.constDeferredClass,
-  CompileTimeErrorCode.constEvalAssertionFailure,
-  CompileTimeErrorCode.constEvalAssertionFailureWithMessage,
-  CompileTimeErrorCode.constEvalExtensionMethod,
-  CompileTimeErrorCode.constEvalExtensionTypeMethod,
-  CompileTimeErrorCode.constEvalForElement,
-  CompileTimeErrorCode.constEvalMethodInvocation,
-  CompileTimeErrorCode.constEvalPrimitiveEquality,
-  CompileTimeErrorCode.constEvalPropertyAccess,
-  CompileTimeErrorCode.constEvalThrowsException,
-  CompileTimeErrorCode.constEvalThrowsIdbze,
-  CompileTimeErrorCode.constEvalTypeBool,
-  CompileTimeErrorCode.constEvalTypeBoolInt,
-  CompileTimeErrorCode.constEvalTypeBoolNumString,
-  CompileTimeErrorCode.constEvalTypeInt,
-  CompileTimeErrorCode.constEvalTypeNum,
-  CompileTimeErrorCode.constEvalTypeNumString,
-  CompileTimeErrorCode.constEvalTypeString,
-  CompileTimeErrorCode.constEvalTypeType,
-  CompileTimeErrorCode.constFieldInitializerNotAssignable,
-  CompileTimeErrorCode.constInitializedWithNonConstantValue,
-  CompileTimeErrorCode.constInitializedWithNonConstantValueFromDeferredLibrary,
-  CompileTimeErrorCode.constInstanceField,
-  CompileTimeErrorCode.constMapKeyNotPrimitiveEquality,
-  CompileTimeErrorCode.constNotInitialized,
-  CompileTimeErrorCode.constSetElementNotPrimitiveEquality,
-  CompileTimeErrorCode.constSpreadExpectedListOrSet,
-  CompileTimeErrorCode.constSpreadExpectedMap,
-  CompileTimeErrorCode.constTypeParameter,
-  CompileTimeErrorCode.constWithNonConst,
-  CompileTimeErrorCode.constWithNonConstantArgument,
-  CompileTimeErrorCode.constWithNonType,
-  CompileTimeErrorCode.constWithTypeParameters,
-  CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
-  CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-  CompileTimeErrorCode.constWithUndefinedConstructor,
-  CompileTimeErrorCode.constWithUndefinedConstructorDefault,
-  CompileTimeErrorCode.continueLabelInvalid,
-  CompileTimeErrorCode.couldNotInfer,
-  CompileTimeErrorCode.defaultValueInRedirectingFactoryConstructor,
-  CompileTimeErrorCode.defaultValueOnRequiredParameter,
-  CompileTimeErrorCode.deferredImportOfExtension,
-  CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-  CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-  CompileTimeErrorCode.dotShorthandMissingContext,
-  CompileTimeErrorCode.dotShorthandUndefinedGetter,
-  CompileTimeErrorCode.dotShorthandUndefinedInvocation,
-  CompileTimeErrorCode.duplicateConstructorDefault,
-  CompileTimeErrorCode.duplicateConstructorName,
-  CompileTimeErrorCode.duplicateDefinition,
-  CompileTimeErrorCode.duplicateFieldFormalParameter,
-  CompileTimeErrorCode.duplicateFieldName,
-  CompileTimeErrorCode.duplicateNamedArgument,
-  CompileTimeErrorCode.duplicatePart,
-  CompileTimeErrorCode.duplicatePatternAssignmentVariable,
-  CompileTimeErrorCode.duplicatePatternField,
-  CompileTimeErrorCode.duplicateRestElementInPattern,
-  CompileTimeErrorCode.duplicateVariablePattern,
-  CompileTimeErrorCode.emptyMapPattern,
-  CompileTimeErrorCode.enumConstantInvokesFactoryConstructor,
-  CompileTimeErrorCode.enumConstantSameNameAsEnclosing,
-  CompileTimeErrorCode.enumInstantiatedToBoundsIsNotWellBounded,
-  CompileTimeErrorCode.enumMixinWithInstanceVariable,
-  CompileTimeErrorCode.enumWithoutConstants,
-  CompileTimeErrorCode.enumWithAbstractMember,
-  CompileTimeErrorCode.enumWithNameValues,
-  CompileTimeErrorCode.equalElementsInConstSet,
-  CompileTimeErrorCode.equalKeysInConstMap,
-  CompileTimeErrorCode.equalKeysInMapPattern,
-  CompileTimeErrorCode.expectedOneListPatternTypeArguments,
-  CompileTimeErrorCode.expectedOneListTypeArguments,
-  CompileTimeErrorCode.expectedOneSetTypeArguments,
-  CompileTimeErrorCode.expectedTwoMapPatternTypeArguments,
-  CompileTimeErrorCode.expectedTwoMapTypeArguments,
-  CompileTimeErrorCode.exportInternalLibrary,
-  CompileTimeErrorCode.exportOfNonLibrary,
-  CompileTimeErrorCode.expressionInMap,
-  CompileTimeErrorCode.extendsDeferredClass,
-  CompileTimeErrorCode.extendsDisallowedClass,
-  CompileTimeErrorCode.extendsNonClass,
-  CompileTimeErrorCode.extendsTypeAliasExpandsToTypeParameter,
-  CompileTimeErrorCode.extensionAsExpression,
-  CompileTimeErrorCode.extensionConflictingStaticAndInstance,
-  CompileTimeErrorCode.extensionDeclaresInstanceField,
-  CompileTimeErrorCode.extensionDeclaresMemberOfObject,
-  CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-  CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
-  CompileTimeErrorCode.extensionOverrideWithoutAccess,
-  CompileTimeErrorCode.extensionOverrideWithCascade,
-  CompileTimeErrorCode.extensionTypeConstructorWithSuperFormalParameter,
-  CompileTimeErrorCode.extensionTypeConstructorWithSuperInvocation,
-  CompileTimeErrorCode.extensionTypeDeclaresInstanceField,
-  CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject,
-  CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-  CompileTimeErrorCode.extensionTypeImplementsItself,
-  CompileTimeErrorCode.extensionTypeImplementsNotSupertype,
-  CompileTimeErrorCode.extensionTypeImplementsRepresentationNotSupertype,
-  CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
-  CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-  CompileTimeErrorCode.extensionTypeRepresentationTypeBottom,
-  CompileTimeErrorCode.extensionTypeWithAbstractMember,
-  CompileTimeErrorCode.externalFieldConstructorInitializer,
-  CompileTimeErrorCode.externalFieldInitializer,
-  CompileTimeErrorCode.externalVariableInitializer,
-  CompileTimeErrorCode.extraPositionalArguments,
-  CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed,
-  CompileTimeErrorCode.fieldInitializedByMultipleInitializers,
-  CompileTimeErrorCode.fieldInitializedInInitializerAndDeclaration,
-  CompileTimeErrorCode.fieldInitializedInParameterAndInitializer,
-  CompileTimeErrorCode.fieldInitializerFactoryConstructor,
-  CompileTimeErrorCode.fieldInitializerNotAssignable,
-  CompileTimeErrorCode.fieldInitializerOutsideConstructor,
-  CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-  CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-  CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary,
-  CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-  CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-  CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
-  CompileTimeErrorCode.finalNotInitialized,
-  CompileTimeErrorCode.finalNotInitializedConstructor1,
-  CompileTimeErrorCode.finalNotInitializedConstructor2,
-  CompileTimeErrorCode.finalNotInitializedConstructor3Plus,
-  CompileTimeErrorCode.forInOfInvalidElementType,
-  CompileTimeErrorCode.forInOfInvalidType,
-  CompileTimeErrorCode.forInWithConstVariable,
-  CompileTimeErrorCode.genericFunctionTypeCannotBeBound,
-  CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-  CompileTimeErrorCode.genericMethodTypeInstantiationOnDynamic,
-  CompileTimeErrorCode.getterNotAssignableSetterTypes,
-  CompileTimeErrorCode.getterNotSubtypeSetterTypes,
-  CompileTimeErrorCode.ifElementConditionFromDeferredLibrary,
-  CompileTimeErrorCode.illegalAsyncGeneratorReturnType,
-  CompileTimeErrorCode.illegalAsyncReturnType,
-  CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration,
-  CompileTimeErrorCode.illegalConcreteEnumMemberInheritance,
-  CompileTimeErrorCode.illegalEnumValuesDeclaration,
-  CompileTimeErrorCode.illegalEnumValuesInheritance,
-  CompileTimeErrorCode.illegalLanguageVersionOverride,
-  CompileTimeErrorCode.illegalSyncGeneratorReturnType,
-  CompileTimeErrorCode.implementsDeferredClass,
-  CompileTimeErrorCode.implementsDisallowedClass,
-  CompileTimeErrorCode.implementsNonClass,
-  CompileTimeErrorCode.implementsRepeated,
-  CompileTimeErrorCode.implementsSuperClass,
-  CompileTimeErrorCode.implementsTypeAliasExpandsToTypeParameter,
-  CompileTimeErrorCode.implicitSuperInitializerMissingArguments,
-  CompileTimeErrorCode.implicitThisReferenceInInitializer,
-  CompileTimeErrorCode.importInternalLibrary,
-  CompileTimeErrorCode.importOfNonLibrary,
-  CompileTimeErrorCode.inconsistentCaseExpressionTypes,
-  CompileTimeErrorCode.inconsistentInheritance,
-  CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-  CompileTimeErrorCode.inconsistentLanguageVersionOverride,
-  CompileTimeErrorCode.inconsistentPatternVariableLogicalOr,
-  CompileTimeErrorCode.initializerForNonExistentField,
-  CompileTimeErrorCode.initializerForStaticField,
-  CompileTimeErrorCode.initializingFormalForNonExistentField,
-  CompileTimeErrorCode.instanceAccessToStaticMember,
-  CompileTimeErrorCode.instanceAccessToStaticMemberOfUnnamedExtension,
-  CompileTimeErrorCode.instanceMemberAccessFromFactory,
-  CompileTimeErrorCode.instanceMemberAccessFromStatic,
-  CompileTimeErrorCode.instantiateAbstractClass,
-  CompileTimeErrorCode.instantiateEnum,
-  CompileTimeErrorCode.instantiateTypeAliasExpandsToTypeParameter,
-  CompileTimeErrorCode.integerLiteralImpreciseAsDouble,
-  CompileTimeErrorCode.integerLiteralOutOfRange,
-  CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
-  CompileTimeErrorCode.invalidAnnotation,
-  CompileTimeErrorCode.invalidAnnotationConstantValueFromDeferredLibrary,
-  CompileTimeErrorCode.invalidAnnotationFromDeferredLibrary,
-  CompileTimeErrorCode.invalidAssignment,
-  CompileTimeErrorCode.invalidCastFunction,
-  CompileTimeErrorCode.invalidCastFunctionExpr,
-  CompileTimeErrorCode.invalidCastLiteral,
-  CompileTimeErrorCode.invalidCastLiteralList,
-  CompileTimeErrorCode.invalidCastLiteralMap,
-  CompileTimeErrorCode.invalidCastLiteralSet,
-  CompileTimeErrorCode.invalidCastMethod,
-  CompileTimeErrorCode.invalidCastNewExpr,
-  CompileTimeErrorCode.invalidConstant,
-  CompileTimeErrorCode.invalidExtensionArgumentCount,
-  CompileTimeErrorCode.invalidFactoryNameNotAClass,
-  CompileTimeErrorCode.invalidFieldNameFromObject,
-  CompileTimeErrorCode.invalidFieldNamePositional,
-  CompileTimeErrorCode.invalidFieldNamePrivate,
-  CompileTimeErrorCode.invalidImplementationOverride,
-  CompileTimeErrorCode.invalidImplementationOverrideSetter,
-  CompileTimeErrorCode.invalidInlineFunctionType,
-  CompileTimeErrorCode.invalidModifierOnConstructor,
-  CompileTimeErrorCode.invalidModifierOnSetter,
-  CompileTimeErrorCode.invalidOverride,
-  CompileTimeErrorCode.invalidOverrideSetter,
-  CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-  CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructorTearoff,
-  CompileTimeErrorCode.invalidReferenceToThis,
-  CompileTimeErrorCode.invalidSuperFormalParameterLocation,
-  CompileTimeErrorCode.invalidTypeArgumentInConstList,
-  CompileTimeErrorCode.invalidTypeArgumentInConstMap,
-  CompileTimeErrorCode.invalidTypeArgumentInConstSet,
-  CompileTimeErrorCode.invalidUri,
-  CompileTimeErrorCode.invalidUseOfCovariant,
-  CompileTimeErrorCode.invalidUseOfNullValue,
-  CompileTimeErrorCode.invocationOfExtensionWithoutCall,
-  CompileTimeErrorCode.invocationOfNonFunction,
-  CompileTimeErrorCode.invocationOfNonFunctionExpression,
-  CompileTimeErrorCode.labelInOuterScope,
-  CompileTimeErrorCode.labelUndefined,
-  CompileTimeErrorCode.lateFinalFieldWithConstConstructor,
-  CompileTimeErrorCode.lateFinalLocalAlreadyAssigned,
-  CompileTimeErrorCode.listElementTypeNotAssignable,
-  CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-  CompileTimeErrorCode.mainFirstPositionalParameterType,
-  CompileTimeErrorCode.mainHasRequiredNamedParameters,
-  CompileTimeErrorCode.mainHasTooManyRequiredPositionalParameters,
-  CompileTimeErrorCode.mainIsNotFunction,
-  CompileTimeErrorCode.mapEntryNotInMap,
-  CompileTimeErrorCode.mapKeyTypeNotAssignable,
-  CompileTimeErrorCode.mapKeyTypeNotAssignableNullability,
-  CompileTimeErrorCode.mapValueTypeNotAssignable,
-  CompileTimeErrorCode.mapValueTypeNotAssignableNullability,
-  CompileTimeErrorCode.missingConstInListLiteral,
-  CompileTimeErrorCode.missingConstInMapLiteral,
-  CompileTimeErrorCode.missingConstInSetLiteral,
-  CompileTimeErrorCode.missingDartLibrary,
-  CompileTimeErrorCode.missingDefaultValueForParameter,
-  CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-  CompileTimeErrorCode.missingDefaultValueForParameterWithAnnotation,
-  CompileTimeErrorCode.missingNamedPatternFieldName,
-  CompileTimeErrorCode.missingRequiredArgument,
-  CompileTimeErrorCode.missingVariablePattern,
-  CompileTimeErrorCode.mixinsSuperClass,
-  CompileTimeErrorCode.mixinApplicationConcreteSuperInvokedMemberType,
-  CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-  CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-  CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedSetter,
-  CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-  CompileTimeErrorCode.mixinClassDeclaresConstructor,
-  CompileTimeErrorCode.mixinDeferredClass,
-  CompileTimeErrorCode.mixinInheritsFromNotObject,
-  CompileTimeErrorCode.mixinInstantiate,
-  CompileTimeErrorCode.mixinOfDisallowedClass,
-  CompileTimeErrorCode.mixinOfNonClass,
-  CompileTimeErrorCode.mixinOfTypeAliasExpandsToTypeParameter,
-  CompileTimeErrorCode.mixinOnTypeAliasExpandsToTypeParameter,
-  CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase,
-  CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase,
-  CompileTimeErrorCode.mixinSuperClassConstraintDeferredClass,
-  CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
-  CompileTimeErrorCode.mixinSuperClassConstraintNonInterface,
-  CompileTimeErrorCode.mixinWithNonClassSuperclass,
-  CompileTimeErrorCode.multipleRedirectingConstructorInvocations,
-  CompileTimeErrorCode.multipleSuperInitializers,
-  CompileTimeErrorCode.newWithNonType,
-  CompileTimeErrorCode.newWithUndefinedConstructor,
-  CompileTimeErrorCode.newWithUndefinedConstructorDefault,
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFivePlus,
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFour,
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberThree,
-  CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
-  CompileTimeErrorCode.nonBoolCondition,
-  CompileTimeErrorCode.nonBoolExpression,
-  CompileTimeErrorCode.nonBoolNegationExpression,
-  CompileTimeErrorCode.nonBoolOperand,
-  CompileTimeErrorCode.nonConstantAnnotationConstructor,
-  CompileTimeErrorCode.nonConstantCaseExpression,
-  CompileTimeErrorCode.nonConstantCaseExpressionFromDeferredLibrary,
-  CompileTimeErrorCode.nonConstantDefaultValue,
-  CompileTimeErrorCode.nonConstantDefaultValueFromDeferredLibrary,
-  CompileTimeErrorCode.nonConstantListElement,
-  CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary,
-  CompileTimeErrorCode.nonConstantMapElement,
-  CompileTimeErrorCode.nonConstantMapKey,
-  CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary,
-  CompileTimeErrorCode.nonConstantMapPatternKey,
-  CompileTimeErrorCode.nonConstantMapValue,
-  CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary,
-  CompileTimeErrorCode.nonConstantRecordField,
-  CompileTimeErrorCode.nonConstantRecordFieldFromDeferredLibrary,
-  CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-  CompileTimeErrorCode.nonConstantSetElement,
-  CompileTimeErrorCode.nonConstGenerativeEnumConstructor,
-  CompileTimeErrorCode.nonConstMapAsExpressionStatement,
-  CompileTimeErrorCode.nonCovariantTypeParameterPositionInRepresentationType,
-  CompileTimeErrorCode.nonExhaustiveSwitchExpression,
-  CompileTimeErrorCode.nonExhaustiveSwitchStatement,
-  CompileTimeErrorCode.nonFinalFieldInEnum,
-  CompileTimeErrorCode.nonGenerativeConstructor,
-  CompileTimeErrorCode.nonGenerativeImplicitConstructor,
-  CompileTimeErrorCode.nonSyncFactory,
-  CompileTimeErrorCode.nonTypeAsTypeArgument,
-  CompileTimeErrorCode.nonTypeInCatchClause,
-  CompileTimeErrorCode.nonVoidReturnForOperator,
-  CompileTimeErrorCode.nonVoidReturnForSetter,
-  CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-  CompileTimeErrorCode.notAType,
-  CompileTimeErrorCode.notBinaryOperator,
-  CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural,
-  CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
-  CompileTimeErrorCode.notEnoughPositionalArgumentsPlural,
-  CompileTimeErrorCode.notEnoughPositionalArgumentsSingular,
-  CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-  CompileTimeErrorCode.notInitializedNonNullableInstanceFieldConstructor,
-  CompileTimeErrorCode.notInitializedNonNullableVariable,
-  CompileTimeErrorCode.notInstantiatedBound,
-  CompileTimeErrorCode.notIterableSpread,
-  CompileTimeErrorCode.notMapSpread,
-  CompileTimeErrorCode.notNullAwareNullSpread,
-  CompileTimeErrorCode.noAnnotationConstructorArguments,
-  CompileTimeErrorCode.noCombinedSuperSignature,
-  CompileTimeErrorCode.noDefaultSuperConstructorExplicit,
-  CompileTimeErrorCode.noDefaultSuperConstructorImplicit,
-  CompileTimeErrorCode.noGenerativeConstructorsInSuperclass,
-  CompileTimeErrorCode.nullableTypeInExtendsClause,
-  CompileTimeErrorCode.nullableTypeInImplementsClause,
-  CompileTimeErrorCode.nullableTypeInOnClause,
-  CompileTimeErrorCode.nullableTypeInWithClause,
-  CompileTimeErrorCode.objectCannotExtendAnotherClass,
-  CompileTimeErrorCode.obsoleteColonForDefaultValue,
-  CompileTimeErrorCode.onRepeated,
-  CompileTimeErrorCode.optionalParameterInOperator,
-  CompileTimeErrorCode.partOfDifferentLibrary,
-  CompileTimeErrorCode.partOfNonPart,
-  CompileTimeErrorCode.partOfUnnamedLibrary,
-  CompileTimeErrorCode.patternAssignmentNotLocalVariable,
-  CompileTimeErrorCode.patternConstantFromDeferredLibrary,
-  CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-  CompileTimeErrorCode.patternVariableAssignmentInsideGuard,
-  CompileTimeErrorCode.patternVariableSharedCaseScopeDifferentFinalityOrType,
-  CompileTimeErrorCode.patternVariableSharedCaseScopeHasLabel,
-  CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-  CompileTimeErrorCode.positionalFieldInObjectPattern,
-  CompileTimeErrorCode.positionalSuperFormalParameterWithPositionalArgument,
-  CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
-  CompileTimeErrorCode.prefixIdentifierNotFollowedByDot,
-  CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
-  CompileTimeErrorCode.privateCollisionInMixinApplication,
-  CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-  CompileTimeErrorCode.privateSetter,
-  CompileTimeErrorCode.readPotentiallyUnassignedFinal,
-  CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-  CompileTimeErrorCode.recursiveCompileTimeConstant,
-  CompileTimeErrorCode.recursiveConstantConstructor,
-  CompileTimeErrorCode.recursiveConstructorRedirect,
-  CompileTimeErrorCode.recursiveFactoryRedirect,
-  CompileTimeErrorCode.recursiveInterfaceInheritance,
-  CompileTimeErrorCode.recursiveInterfaceInheritanceExtends,
-  CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
-  CompileTimeErrorCode.recursiveInterfaceInheritanceOn,
-  CompileTimeErrorCode.recursiveInterfaceInheritanceWith,
-  CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-  CompileTimeErrorCode.redirectGenerativeToNonGenerativeConstructor,
-  CompileTimeErrorCode.redirectToAbstractClassConstructor,
-  CompileTimeErrorCode.redirectToInvalidFunctionType,
-  CompileTimeErrorCode.redirectToInvalidReturnType,
-  CompileTimeErrorCode.redirectToMissingConstructor,
-  CompileTimeErrorCode.redirectToNonClass,
-  CompileTimeErrorCode.redirectToNonConstConstructor,
-  CompileTimeErrorCode.redirectToTypeAliasExpandsToTypeParameter,
-  CompileTimeErrorCode.referencedBeforeDeclaration,
-  CompileTimeErrorCode.refutablePatternInIrrefutableContext,
-  CompileTimeErrorCode.relationalPatternOperandTypeNotAssignable,
-  CompileTimeErrorCode.relationalPatternOperatorReturnTypeNotAssignableToBool,
-  CompileTimeErrorCode.restElementInMapPattern,
-  CompileTimeErrorCode.rethrowOutsideCatch,
-  CompileTimeErrorCode.returnInGenerativeConstructor,
-  CompileTimeErrorCode.returnInGenerator,
-  CompileTimeErrorCode.returnOfInvalidTypeFromClosure,
-  CompileTimeErrorCode.returnOfInvalidTypeFromConstructor,
-  CompileTimeErrorCode.returnOfInvalidTypeFromFunction,
-  CompileTimeErrorCode.returnOfInvalidTypeFromMethod,
-  CompileTimeErrorCode.returnWithoutValue,
-  CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary,
-  CompileTimeErrorCode.setElementFromDeferredLibrary,
-  CompileTimeErrorCode.setElementTypeNotAssignable,
-  CompileTimeErrorCode.setElementTypeNotAssignableNullability,
-  CompileTimeErrorCode.sharedDeferredPrefix,
-  CompileTimeErrorCode.spreadExpressionFromDeferredLibrary,
-  CompileTimeErrorCode.staticAccessToInstanceMember,
-  CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
-  CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
-  CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
-  CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed,
-  CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-  CompileTimeErrorCode.superInitializerInObject,
-  CompileTimeErrorCode.superInvocationNotLast,
-  CompileTimeErrorCode.superInEnumConstructor,
-  CompileTimeErrorCode.superInExtension,
-  CompileTimeErrorCode.superInExtensionType,
-  CompileTimeErrorCode.superInInvalidContext,
-  CompileTimeErrorCode.superInRedirectingConstructor,
-  CompileTimeErrorCode.switchCaseCompletesNormally,
-  CompileTimeErrorCode.tearoffOfGenerativeConstructorOfAbstractClass,
-  CompileTimeErrorCode.throwOfInvalidType,
-  CompileTimeErrorCode.topLevelCycle,
-  CompileTimeErrorCode.typeAliasCannotReferenceItself,
-  CompileTimeErrorCode.typeAnnotationDeferredClass,
-  CompileTimeErrorCode.typeArgumentNotMatchingBounds,
-  CompileTimeErrorCode.typeParameterReferencedByStatic,
-  CompileTimeErrorCode.typeParameterSupertypeOfItsBound,
-  CompileTimeErrorCode.typeTestWithNonType,
-  CompileTimeErrorCode.typeTestWithUndefinedName,
-  CompileTimeErrorCode.uncheckedInvocationOfNullableValue,
-  CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-  CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-  CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-  CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-  CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
-  CompileTimeErrorCode.uncheckedUseOfNullableValueInSpread,
-  CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach,
-  CompileTimeErrorCode.undefinedAnnotation,
-  CompileTimeErrorCode.undefinedClass,
-  CompileTimeErrorCode.undefinedClassBoolean,
-  CompileTimeErrorCode.undefinedConstructorInInitializer,
-  CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-  CompileTimeErrorCode.undefinedEnumConstant,
-  CompileTimeErrorCode.undefinedEnumConstructorNamed,
-  CompileTimeErrorCode.undefinedEnumConstructorUnnamed,
-  CompileTimeErrorCode.undefinedExtensionGetter,
-  CompileTimeErrorCode.undefinedExtensionMethod,
-  CompileTimeErrorCode.undefinedExtensionOperator,
-  CompileTimeErrorCode.undefinedExtensionSetter,
-  CompileTimeErrorCode.undefinedFunction,
-  CompileTimeErrorCode.undefinedGetter,
-  CompileTimeErrorCode.undefinedGetterOnFunctionType,
-  CompileTimeErrorCode.undefinedIdentifier,
-  CompileTimeErrorCode.undefinedIdentifierAwait,
-  CompileTimeErrorCode.undefinedMethod,
-  CompileTimeErrorCode.undefinedMethodOnFunctionType,
-  CompileTimeErrorCode.undefinedNamedParameter,
-  CompileTimeErrorCode.undefinedOperator,
-  CompileTimeErrorCode.undefinedPrefixedName,
-  CompileTimeErrorCode.undefinedSetter,
-  CompileTimeErrorCode.undefinedSetterOnFunctionType,
-  CompileTimeErrorCode.undefinedSuperGetter,
-  CompileTimeErrorCode.undefinedSuperMethod,
-  CompileTimeErrorCode.undefinedSuperOperator,
-  CompileTimeErrorCode.undefinedSuperSetter,
-  CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember,
-  CompileTimeErrorCode.unqualifiedReferenceToStaticMemberOfExtendedType,
-  CompileTimeErrorCode.uriDoesNotExist,
-  CompileTimeErrorCode.uriHasNotBeenGenerated,
-  CompileTimeErrorCode.uriWithInterpolation,
-  CompileTimeErrorCode.useOfNativeExtension,
-  CompileTimeErrorCode.useOfVoidResult,
-  CompileTimeErrorCode.valuesDeclarationInEnum,
-  CompileTimeErrorCode.variableTypeMismatch,
-  CompileTimeErrorCode.wrongExplicitTypeParameterVarianceInSuperinterface,
-  CompileTimeErrorCode.wrongNumberOfParametersForOperator,
-  CompileTimeErrorCode.wrongNumberOfParametersForOperatorMinus,
-  CompileTimeErrorCode.wrongNumberOfTypeArguments,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsDotShorthandConstructor,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsEnum,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction,
-  CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod,
-  CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-  CompileTimeErrorCode.wrongTypeParameterVariancePosition,
-  CompileTimeErrorCode.yieldEachInNonGenerator,
-  CompileTimeErrorCode.yieldEachOfInvalidType,
-  CompileTimeErrorCode.yieldInNonGenerator,
-  CompileTimeErrorCode.yieldOfInvalidType,
-  FfiCode.abiSpecificIntegerInvalid,
-  FfiCode.abiSpecificIntegerMappingExtra,
-  FfiCode.abiSpecificIntegerMappingMissing,
-  FfiCode.abiSpecificIntegerMappingUnsupported,
-  FfiCode.addressPosition,
-  FfiCode.addressReceiver,
-  FfiCode.annotationOnPointerField,
-  FfiCode.argumentMustBeAConstant,
-  FfiCode.argumentMustBeNative,
-  FfiCode.compoundImplementsFinalizable,
-  FfiCode.creationOfStructOrUnion,
-  FfiCode.emptyStruct,
-  FfiCode.extraAnnotationOnStructField,
-  FfiCode.extraSizeAnnotationCarray,
-  FfiCode.ffiNativeInvalidDuplicateDefaultAsset,
-  FfiCode.ffiNativeInvalidMultipleAnnotations,
-  FfiCode.ffiNativeMustBeExternal,
-  FfiCode.ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer,
-  FfiCode.ffiNativeUnexpectedNumberOfParameters,
-  FfiCode.ffiNativeUnexpectedNumberOfParametersWithReceiver,
-  FfiCode.fieldMustBeExternalInStruct,
-  FfiCode.genericStructSubclass,
-  FfiCode.invalidExceptionValue,
-  FfiCode.invalidFieldTypeInStruct,
-  FfiCode.leafCallMustNotReturnHandle,
-  FfiCode.leafCallMustNotTakeHandle,
-  FfiCode.mismatchedAnnotationOnStructField,
-  FfiCode.missingAnnotationOnStructField,
-  FfiCode.missingExceptionValue,
-  FfiCode.missingFieldTypeInStruct,
-  FfiCode.missingSizeAnnotationCarray,
-  FfiCode.mustBeANativeFunctionType,
-  FfiCode.mustBeASubtype,
-  FfiCode.mustReturnVoid,
-  FfiCode.nativeFieldInvalidType,
-  FfiCode.nativeFieldMissingType,
-  FfiCode.nativeFieldNotStatic,
-  FfiCode.nativeFunctionMissingType,
-  FfiCode.negativeVariableDimension,
-  FfiCode.nonConstantTypeArgument,
-  FfiCode.nonNativeFunctionTypeArgumentToPointer,
-  FfiCode.nonPositiveArrayDimension,
-  FfiCode.nonSizedTypeArgument,
-  FfiCode.packedAnnotation,
-  FfiCode.packedAnnotationAlignment,
-  FfiCode.sizeAnnotationDimensions,
-  FfiCode.subtypeOfStructClassInExtends,
-  FfiCode.subtypeOfStructClassInImplements,
-  FfiCode.subtypeOfStructClassInWith,
-  FfiCode.variableLengthArrayNotLast,
-  HintCode.deprecatedColonForDefaultValue,
-  HintCode.deprecatedMemberUse,
-  HintCode.deprecatedMemberUseWithMessage,
-  HintCode.importDeferredLibraryWithLoadFunction,
-  HintCode.unnecessaryImport,
-  ManifestWarningCode.cameraPermissionsIncompatible,
-  ManifestWarningCode.nonResizableActivity,
-  ManifestWarningCode.noTouchscreenFeature,
-  ManifestWarningCode.permissionImpliesUnsupportedHardware,
-  ManifestWarningCode.settingOrientationOnActivity,
-  ManifestWarningCode.unsupportedChromeOsFeature,
-  ManifestWarningCode.unsupportedChromeOsHardware,
-  ParserErrorCode.abstractClassMember,
-  ParserErrorCode.abstractExternalField,
-  ParserErrorCode.abstractFinalBaseClass,
-  ParserErrorCode.abstractFinalInterfaceClass,
-  ParserErrorCode.abstractLateField,
-  ParserErrorCode.abstractSealedClass,
-  ParserErrorCode.abstractStaticField,
-  ParserErrorCode.abstractStaticMethod,
-  ParserErrorCode.annotationOnTypeArgument,
-  ParserErrorCode.annotationSpaceBeforeParenthesis,
-  ParserErrorCode.annotationWithTypeArguments,
-  ParserErrorCode.annotationWithTypeArgumentsUninstantiated,
-  ParserErrorCode.asyncKeywordUsedAsIdentifier,
-  ParserErrorCode.baseEnum,
-  ParserErrorCode.binaryOperatorWrittenOut,
-  ParserErrorCode.breakOutsideOfLoop,
-  ParserErrorCode.catchSyntax,
-  ParserErrorCode.catchSyntaxExtraParameters,
-  ParserErrorCode.classInClass,
-  ParserErrorCode.colonInPlaceOfIn,
-  ParserErrorCode.conflictingModifiers,
-  ParserErrorCode.constructorWithReturnType,
-  ParserErrorCode.constructorWithTypeArguments,
-  ParserErrorCode.constAndFinal,
-  ParserErrorCode.constClass,
-  ParserErrorCode.constConstructorWithBody,
-  ParserErrorCode.constFactory,
-  ParserErrorCode.constMethod,
-  ParserErrorCode.constWithoutPrimaryConstructor,
-  ParserErrorCode.continueOutsideOfLoop,
-  ParserErrorCode.continueWithoutLabelInCase,
-  ParserErrorCode.covariantAndStatic,
-  ParserErrorCode.covariantConstructor,
-  ParserErrorCode.covariantMember,
-  ParserErrorCode.defaultInSwitchExpression,
-  ParserErrorCode.defaultValueInFunctionType,
-  ParserErrorCode.deferredAfterPrefix,
-  ParserErrorCode.directiveAfterDeclaration,
-  ParserErrorCode.duplicatedModifier,
-  ParserErrorCode.duplicateDeferred,
-  ParserErrorCode.duplicateLabelInSwitchStatement,
-  ParserErrorCode.duplicatePrefix,
-  ParserErrorCode.emptyEnumBody,
-  ParserErrorCode.emptyRecordLiteralWithComma,
-  ParserErrorCode.emptyRecordTypeNamedFieldsList,
-  ParserErrorCode.emptyRecordTypeWithComma,
-  ParserErrorCode.enumInClass,
-  ParserErrorCode.equalityCannotBeEqualityOperand,
-  ParserErrorCode.expectedCaseOrDefault,
-  ParserErrorCode.expectedCatchClauseBody,
-  ParserErrorCode.expectedClassBody,
-  ParserErrorCode.expectedClassMember,
-  ParserErrorCode.expectedElseOrComma,
-  ParserErrorCode.expectedExecutable,
-  ParserErrorCode.expectedExtensionBody,
-  ParserErrorCode.expectedExtensionTypeBody,
-  ParserErrorCode.expectedFinallyClauseBody,
-  ParserErrorCode.expectedIdentifierButGotKeyword,
-  ParserErrorCode.expectedInstead,
-  ParserErrorCode.expectedListOrMapLiteral,
-  ParserErrorCode.expectedMixinBody,
-  ParserErrorCode.expectedNamedTypeExtends,
-  ParserErrorCode.expectedNamedTypeImplements,
-  ParserErrorCode.expectedNamedTypeOn,
-  ParserErrorCode.expectedNamedTypeWith,
-  ParserErrorCode.expectedRepresentationField,
-  ParserErrorCode.expectedRepresentationType,
-  ParserErrorCode.expectedStringLiteral,
-  ParserErrorCode.expectedSwitchExpressionBody,
-  ParserErrorCode.expectedSwitchStatementBody,
-  ParserErrorCode.expectedToken,
-  ParserErrorCode.expectedTryStatementBody,
-  ParserErrorCode.expectedTypeName,
-  ParserErrorCode.experimentNotEnabled,
-  ParserErrorCode.experimentNotEnabledOffByDefault,
-  ParserErrorCode.exportDirectiveAfterPartDirective,
-  ParserErrorCode.extensionAugmentationHasOnClause,
-  ParserErrorCode.extensionDeclaresAbstractMember,
-  ParserErrorCode.extensionDeclaresConstructor,
-  ParserErrorCode.extensionTypeExtends,
-  ParserErrorCode.extensionTypeWith,
-  ParserErrorCode.externalClass,
-  ParserErrorCode.externalConstructorWithFieldInitializers,
-  ParserErrorCode.externalConstructorWithInitializer,
-  ParserErrorCode.externalEnum,
-  ParserErrorCode.externalFactoryRedirection,
-  ParserErrorCode.externalFactoryWithBody,
-  ParserErrorCode.externalGetterWithBody,
-  ParserErrorCode.externalLateField,
-  ParserErrorCode.externalMethodWithBody,
-  ParserErrorCode.externalOperatorWithBody,
-  ParserErrorCode.externalSetterWithBody,
-  ParserErrorCode.externalTypedef,
-  ParserErrorCode.extraneousModifier,
-  ParserErrorCode.extraneousModifierInExtensionType,
-  ParserErrorCode.extraneousModifierInPrimaryConstructor,
-  ParserErrorCode.factoryTopLevelDeclaration,
-  ParserErrorCode.factoryWithoutBody,
-  ParserErrorCode.factoryWithInitializers,
-  ParserErrorCode.fieldInitializedOutsideDeclaringClass,
-  ParserErrorCode.finalAndCovariant,
-  ParserErrorCode.finalAndCovariantLateWithInitializer,
-  ParserErrorCode.finalAndVar,
-  ParserErrorCode.finalConstructor,
-  ParserErrorCode.finalEnum,
-  ParserErrorCode.finalMethod,
-  ParserErrorCode.finalMixin,
-  ParserErrorCode.finalMixinClass,
-  ParserErrorCode.functionTypedParameterVar,
-  ParserErrorCode.getterConstructor,
-  ParserErrorCode.getterInFunction,
-  ParserErrorCode.getterWithParameters,
-  ParserErrorCode.illegalAssignmentToNonAssignable,
-  ParserErrorCode.illegalPatternAssignmentVariableName,
-  ParserErrorCode.illegalPatternIdentifierName,
-  ParserErrorCode.illegalPatternVariableName,
-  ParserErrorCode.implementsBeforeExtends,
-  ParserErrorCode.implementsBeforeOn,
-  ParserErrorCode.implementsBeforeWith,
-  ParserErrorCode.importDirectiveAfterPartDirective,
-  ParserErrorCode.initializedVariableInForEach,
-  ParserErrorCode.interfaceEnum,
-  ParserErrorCode.interfaceMixin,
-  ParserErrorCode.interfaceMixinClass,
-  ParserErrorCode.invalidAwaitInFor,
-  ParserErrorCode.invalidCodePoint,
-  ParserErrorCode.invalidCommentReference,
-  ParserErrorCode.invalidConstantConstPrefix,
-  ParserErrorCode.invalidConstantPatternBinary,
-  ParserErrorCode.invalidConstantPatternDuplicateConst,
-  ParserErrorCode.invalidConstantPatternEmptyRecordLiteral,
-  ParserErrorCode.invalidConstantPatternGeneric,
-  ParserErrorCode.invalidConstantPatternNegation,
-  ParserErrorCode.invalidConstantPatternUnary,
-  ParserErrorCode.invalidConstructorName,
-  ParserErrorCode.invalidGenericFunctionType,
-  ParserErrorCode.invalidHexEscape,
-  ParserErrorCode.invalidInitializer,
-  ParserErrorCode.invalidInsideUnaryPattern,
-  ParserErrorCode.invalidLiteralInConfiguration,
-  ParserErrorCode.invalidOperator,
-  ParserErrorCode.invalidOperatorForSuper,
-  ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
-  ParserErrorCode.invalidStarAfterAsync,
-  ParserErrorCode.invalidSuperInInitializer,
-  ParserErrorCode.invalidSync,
-  ParserErrorCode.invalidThisInInitializer,
-  ParserErrorCode.invalidUnicodeEscapeStarted,
-  ParserErrorCode.invalidUnicodeEscapeUBracket,
-  ParserErrorCode.invalidUnicodeEscapeUNoBracket,
-  ParserErrorCode.invalidUnicodeEscapeUStarted,
-  ParserErrorCode.invalidUseOfCovariantInExtension,
-  ParserErrorCode.invalidUseOfIdentifierAugmented,
-  ParserErrorCode.latePatternVariableDeclaration,
-  ParserErrorCode.libraryDirectiveNotFirst,
-  ParserErrorCode.literalWithClass,
-  ParserErrorCode.literalWithClassAndNew,
-  ParserErrorCode.literalWithNew,
-  ParserErrorCode.localFunctionDeclarationModifier,
-  ParserErrorCode.memberWithClassName,
-  ParserErrorCode.missingAssignableSelector,
-  ParserErrorCode.missingAssignmentInInitializer,
-  ParserErrorCode.missingCatchOrFinally,
-  ParserErrorCode.missingClosingParenthesis,
-  ParserErrorCode.missingConstFinalVarOrType,
-  ParserErrorCode.missingEnumBody,
-  ParserErrorCode.missingExpressionInInitializer,
-  ParserErrorCode.missingExpressionInThrow,
-  ParserErrorCode.missingFunctionBody,
-  ParserErrorCode.missingFunctionKeyword,
-  ParserErrorCode.missingFunctionParameters,
-  ParserErrorCode.missingGet,
-  ParserErrorCode.missingIdentifier,
-  ParserErrorCode.missingInitializer,
-  ParserErrorCode.missingKeywordOperator,
-  ParserErrorCode.missingMethodParameters,
-  ParserErrorCode.missingNameForNamedParameter,
-  ParserErrorCode.missingNameInLibraryDirective,
-  ParserErrorCode.missingNameInPartOfDirective,
-  ParserErrorCode.missingPrefixInDeferredImport,
-  ParserErrorCode.missingPrimaryConstructor,
-  ParserErrorCode.missingPrimaryConstructorParameters,
-  ParserErrorCode.missingStarAfterSync,
-  ParserErrorCode.missingStatement,
-  ParserErrorCode.missingTerminatorForParameterGroup,
-  ParserErrorCode.missingTypedefParameters,
-  ParserErrorCode.missingVariableInForEach,
-  ParserErrorCode.mixedParameterGroups,
-  ParserErrorCode.mixinDeclaresConstructor,
-  ParserErrorCode.mixinWithClause,
-  ParserErrorCode.modifierOutOfOrder,
-  ParserErrorCode.multipleClauses,
-  ParserErrorCode.multipleExtendsClauses,
-  ParserErrorCode.multipleImplementsClauses,
-  ParserErrorCode.multipleLibraryDirectives,
-  ParserErrorCode.multipleNamedParameterGroups,
-  ParserErrorCode.multipleOnClauses,
-  ParserErrorCode.multiplePartOfDirectives,
-  ParserErrorCode.multiplePositionalParameterGroups,
-  ParserErrorCode.multipleRepresentationFields,
-  ParserErrorCode.multipleVariablesInForEach,
-  ParserErrorCode.multipleVarianceModifiers,
-  ParserErrorCode.multipleWithClauses,
-  ParserErrorCode.namedFunctionExpression,
-  ParserErrorCode.namedFunctionType,
-  ParserErrorCode.namedParameterOutsideGroup,
-  ParserErrorCode.nativeClauseInNonSdkCode,
-  ParserErrorCode.nativeClauseShouldBeAnnotation,
-  ParserErrorCode.nativeFunctionBodyInNonSdkCode,
-  ParserErrorCode.nonConstructorFactory,
-  ParserErrorCode.nonIdentifierLibraryName,
-  ParserErrorCode.nonPartOfDirectiveInPart,
-  ParserErrorCode.nonStringLiteralAsUri,
-  ParserErrorCode.nonUserDefinableOperator,
-  ParserErrorCode.normalBeforeOptionalParameters,
-  ParserErrorCode.nullAwareCascadeOutOfOrder,
-  ParserErrorCode.outOfOrderClauses,
-  ParserErrorCode.partOfName,
-  ParserErrorCode.patternAssignmentDeclaresVariable,
-  ParserErrorCode.patternVariableDeclarationOutsideFunctionOrMethod,
-  ParserErrorCode.positionalAfterNamedArgument,
-  ParserErrorCode.positionalParameterOutsideGroup,
-  ParserErrorCode.prefixAfterCombinator,
-  ParserErrorCode.privateNamedNonFieldParameter,
-  ParserErrorCode.privateOptionalParameter,
-  ParserErrorCode.recordLiteralOnePositionalNoTrailingComma,
-  ParserErrorCode.recordTypeOnePositionalNoTrailingComma,
-  ParserErrorCode.redirectingConstructorWithBody,
-  ParserErrorCode.redirectionInNonFactoryConstructor,
-  ParserErrorCode.representationFieldModifier,
-  ParserErrorCode.representationFieldTrailingComma,
-  ParserErrorCode.sealedEnum,
-  ParserErrorCode.sealedMixin,
-  ParserErrorCode.sealedMixinClass,
-  ParserErrorCode.setterConstructor,
-  ParserErrorCode.setterInFunction,
-  ParserErrorCode.stackOverflow,
-  ParserErrorCode.staticConstructor,
-  ParserErrorCode.staticGetterWithoutBody,
-  ParserErrorCode.staticOperator,
-  ParserErrorCode.staticSetterWithoutBody,
-  ParserErrorCode.switchHasCaseAfterDefaultCase,
-  ParserErrorCode.switchHasMultipleDefaultCases,
-  ParserErrorCode.topLevelOperator,
-  ParserErrorCode.typedefInClass,
-  ParserErrorCode.typeArgumentsOnTypeVariable,
-  ParserErrorCode.typeBeforeFactory,
-  ParserErrorCode.typeParameterOnConstructor,
-  ParserErrorCode.typeParameterOnOperator,
-  ParserErrorCode.unexpectedTerminatorForParameterGroup,
-  ParserErrorCode.unexpectedToken,
-  ParserErrorCode.unexpectedTokens,
-  ParserErrorCode.variablePatternKeywordInDeclarationContext,
-  ParserErrorCode.varAndType,
-  ParserErrorCode.varAsTypeName,
-  ParserErrorCode.varClass,
-  ParserErrorCode.varEnum,
-  ParserErrorCode.varReturnType,
-  ParserErrorCode.varTypedef,
-  ParserErrorCode.voidWithTypeArguments,
-  ParserErrorCode.withBeforeExtends,
-  ParserErrorCode.wrongNumberOfParametersForSetter,
-  ParserErrorCode.wrongSeparatorForPositionalParameter,
-  ParserErrorCode.wrongTerminatorForParameterGroup,
-  PubspecWarningCode.assetDirectoryDoesNotExist,
-  PubspecWarningCode.assetDoesNotExist,
-  PubspecWarningCode.assetFieldNotList,
-  PubspecWarningCode.assetMissingPath,
-  PubspecWarningCode.assetNotString,
-  PubspecWarningCode.assetNotStringOrMap,
-  PubspecWarningCode.assetPathNotString,
-  PubspecWarningCode.dependenciesFieldNotMap,
-  PubspecWarningCode.deprecatedField,
-  PubspecWarningCode.flutterFieldNotMap,
-  PubspecWarningCode.invalidDependency,
-  PubspecWarningCode.invalidPlatformsField,
-  PubspecWarningCode.missingDependency,
-  PubspecWarningCode.missingName,
-  PubspecWarningCode.nameNotString,
-  PubspecWarningCode.pathDoesNotExist,
-  PubspecWarningCode.pathNotPosix,
-  PubspecWarningCode.pathPubspecDoesNotExist,
-  PubspecWarningCode.platformValueDisallowed,
-  PubspecWarningCode.unknownPlatform,
-  PubspecWarningCode.unnecessaryDevDependency,
-  PubspecWarningCode.workspaceFieldNotList,
-  PubspecWarningCode.workspaceValueNotString,
-  PubspecWarningCode.workspaceValueNotSubdirectory,
-  ScannerErrorCode.encoding,
-  ScannerErrorCode.illegalCharacter,
-  ScannerErrorCode.missingDigit,
-  ScannerErrorCode.missingHexDigit,
-  ScannerErrorCode.missingQuote,
-  ScannerErrorCode.unableGetContent,
-  ScannerErrorCode.unexpectedDollarInString,
-  ScannerErrorCode.unexpectedSeparatorInNumber,
-  ScannerErrorCode.unsupportedOperator,
-  ScannerErrorCode.unterminatedMultiLineComment,
-  ScannerErrorCode.unterminatedStringLiteral,
-  StaticWarningCode.deadNullAwareExpression,
-  StaticWarningCode.invalidNullAwareElement,
-  StaticWarningCode.invalidNullAwareMapEntryKey,
-  StaticWarningCode.invalidNullAwareMapEntryValue,
-  StaticWarningCode.invalidNullAwareOperator,
-  StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
-  StaticWarningCode.missingEnumConstantInSwitch,
-  StaticWarningCode.unnecessaryNonNullAssertion,
-  StaticWarningCode.unnecessaryNullAssertPattern,
-  StaticWarningCode.unnecessaryNullCheckPattern,
-  TodoCode.fixme,
-  TodoCode.hack,
-  TodoCode.todo,
-  TodoCode.undone,
-  WarningCode.argumentTypeNotAssignableToErrorHandler,
-  WarningCode.assignmentOfDoNotStore,
-  WarningCode.bodyMightCompleteNormallyCatchError,
-  WarningCode.bodyMightCompleteNormallyNullable,
-  WarningCode.castFromNullableAlwaysFails,
-  WarningCode.castFromNullAlwaysFails,
-  WarningCode.constantPatternNeverMatchesValueType,
-  WarningCode.deadCode,
-  WarningCode.deadCodeCatchFollowingCatch,
-  WarningCode.deadCodeLateWildcardVariableInitializer,
-  WarningCode.deadCodeOnCatchSubtype,
-  WarningCode.deprecatedExportUse,
-  WarningCode.deprecatedExtend,
-  WarningCode.deprecatedExtendsFunction,
-  WarningCode.deprecatedImplement,
-  WarningCode.deprecatedImplementsFunction,
-  WarningCode.deprecatedInstantiate,
-  WarningCode.deprecatedMixin,
-  WarningCode.deprecatedMixinFunction,
-  WarningCode.deprecatedNewInCommentReference,
-  WarningCode.deprecatedOptional,
-  WarningCode.deprecatedSubclass,
-  WarningCode.docDirectiveArgumentWrongFormat,
-  WarningCode.docDirectiveHasExtraArguments,
-  WarningCode.docDirectiveHasUnexpectedNamedArgument,
-  WarningCode.docDirectiveMissingClosingBrace,
-  WarningCode.docDirectiveMissingClosingTag,
-  WarningCode.docDirectiveMissingOneArgument,
-  WarningCode.docDirectiveMissingOpeningTag,
-  WarningCode.docDirectiveMissingThreeArguments,
-  WarningCode.docDirectiveMissingTwoArguments,
-  WarningCode.docDirectiveUnknown,
-  WarningCode.docImportCannotBeDeferred,
-  WarningCode.docImportCannotHaveCombinators,
-  WarningCode.docImportCannotHaveConfigurations,
-  WarningCode.docImportCannotHavePrefix,
-  WarningCode.duplicateExport,
-  WarningCode.duplicateHiddenName,
-  WarningCode.duplicateIgnore,
-  WarningCode.duplicateImport,
-  WarningCode.duplicateShownName,
-  WarningCode.equalElementsInSet,
-  WarningCode.equalKeysInMap,
-  WarningCode.experimentalMemberUse,
-  WarningCode.inferenceFailureOnCollectionLiteral,
-  WarningCode.inferenceFailureOnFunctionInvocation,
-  WarningCode.inferenceFailureOnFunctionReturnType,
-  WarningCode.inferenceFailureOnGenericInvocation,
-  WarningCode.inferenceFailureOnInstanceCreation,
-  WarningCode.inferenceFailureOnUninitializedVariable,
-  WarningCode.inferenceFailureOnUntypedParameter,
-  WarningCode.invalidAnnotationTarget,
-  WarningCode.invalidAwaitNotRequiredAnnotation,
-  WarningCode.invalidDeprecatedExtendAnnotation,
-  WarningCode.invalidDeprecatedImplementAnnotation,
-  WarningCode.invalidDeprecatedInstantiateAnnotation,
-  WarningCode.invalidDeprecatedMixinAnnotation,
-  WarningCode.invalidDeprecatedOptionalAnnotation,
-  WarningCode.invalidDeprecatedSubclassAnnotation,
-  WarningCode.invalidExportOfInternalElement,
-  WarningCode.invalidExportOfInternalElementIndirectly,
-  WarningCode.invalidFactoryMethodDecl,
-  WarningCode.invalidFactoryMethodImpl,
-  WarningCode.invalidInternalAnnotation,
-  WarningCode.invalidLanguageVersionOverrideAtSign,
-  WarningCode.invalidLanguageVersionOverrideEquals,
-  WarningCode.invalidLanguageVersionOverrideGreater,
-  WarningCode.invalidLanguageVersionOverrideLocation,
-  WarningCode.invalidLanguageVersionOverrideLowerCase,
-  WarningCode.invalidLanguageVersionOverrideNumber,
-  WarningCode.invalidLanguageVersionOverridePrefix,
-  WarningCode.invalidLanguageVersionOverrideTrailingCharacters,
-  WarningCode.invalidLanguageVersionOverrideTwoSlashes,
-  WarningCode.invalidLiteralAnnotation,
-  WarningCode.invalidNonVirtualAnnotation,
-  WarningCode.invalidOverrideOfNonVirtualMember,
-  WarningCode.invalidReopenAnnotation,
-  WarningCode.invalidUseOfDoNotSubmitMember,
-  WarningCode.invalidUseOfInternalMember,
-  WarningCode.invalidUseOfProtectedMember,
-  WarningCode.invalidUseOfVisibleForOverridingMember,
-  WarningCode.invalidUseOfVisibleForTemplateMember,
-  WarningCode.invalidUseOfVisibleForTestingMember,
-  WarningCode.invalidVisibilityAnnotation,
-  WarningCode.invalidVisibleForOverridingAnnotation,
-  WarningCode.invalidVisibleOutsideTemplateAnnotation,
-  WarningCode.invalidWidgetPreviewApplication,
-  WarningCode.invalidWidgetPreviewPrivateArgument,
-  WarningCode.missingOverrideOfMustBeOverriddenOne,
-  WarningCode.missingOverrideOfMustBeOverriddenThreePlus,
-  WarningCode.missingOverrideOfMustBeOverriddenTwo,
-  WarningCode.missingRequiredParam,
-  WarningCode.missingRequiredParamWithDetails,
-  WarningCode.mixinOnSealedClass,
-  WarningCode.multipleCombinators,
-  WarningCode.mustBeImmutable,
-  WarningCode.mustCallSuper,
-  WarningCode.nonConstArgumentForConstParameter,
-  WarningCode.nonConstCallToLiteralConstructor,
-  WarningCode.nonConstCallToLiteralConstructorUsingNew,
-  WarningCode.nonNullableEqualsParameter,
-  WarningCode.nullableTypeInCatchClause,
-  WarningCode.nullArgumentToNonNullType,
-  WarningCode.nullCheckAlwaysFails,
-  WarningCode.overrideOnNonOverridingField,
-  WarningCode.overrideOnNonOverridingGetter,
-  WarningCode.overrideOnNonOverridingMethod,
-  WarningCode.overrideOnNonOverridingSetter,
-  WarningCode.patternNeverMatchesValueType,
-  WarningCode.receiverOfTypeNever,
-  WarningCode.redeclareOnNonRedeclaringMember,
-  WarningCode.removedLintUse,
-  WarningCode.replacedLintUse,
-  WarningCode.returnOfDoNotStore,
-  WarningCode.returnOfInvalidTypeFromCatchError,
-  WarningCode.returnTypeInvalidForCatchError,
-  WarningCode.sdkVersionConstructorTearoffs,
-  WarningCode.sdkVersionGtGtGtOperator,
-  WarningCode.sdkVersionSince,
-  WarningCode.strictRawType,
-  WarningCode.subtypeOfSealedClass,
-  WarningCode.textDirectionCodePointInComment,
-  WarningCode.textDirectionCodePointInLiteral,
-  WarningCode.typeCheckIsNotNull,
-  WarningCode.typeCheckIsNull,
-  WarningCode.undefinedHiddenName,
-  WarningCode.undefinedReferencedParameter,
-  WarningCode.undefinedShownName,
-  WarningCode.unignorableIgnore,
-  WarningCode.unnecessaryCast,
-  WarningCode.unnecessaryCastPattern,
-  WarningCode.unnecessaryFinal,
-  WarningCode.unnecessaryNanComparisonFalse,
-  WarningCode.unnecessaryNanComparisonTrue,
-  WarningCode.unnecessaryNoSuchMethod,
-  WarningCode.unnecessaryNullComparisonAlwaysNullFalse,
-  WarningCode.unnecessaryNullComparisonAlwaysNullTrue,
-  WarningCode.unnecessaryNullComparisonNeverNullFalse,
-  WarningCode.unnecessaryNullComparisonNeverNullTrue,
-  WarningCode.unnecessaryQuestionMark,
-  WarningCode.unnecessarySetLiteral,
-  WarningCode.unnecessaryTypeCheckFalse,
-  WarningCode.unnecessaryTypeCheckTrue,
-  WarningCode.unnecessaryWildcardPattern,
-  WarningCode.unreachableSwitchCase,
-  WarningCode.unreachableSwitchDefault,
-  WarningCode.unusedCatchClause,
-  WarningCode.unusedCatchStack,
-  WarningCode.unusedElement,
-  WarningCode.unusedElementParameter,
-  WarningCode.unusedField,
-  WarningCode.unusedImport,
-  WarningCode.unusedLabel,
-  WarningCode.unusedLocalVariable,
-  WarningCode.unusedResult,
-  WarningCode.unusedResultWithMessage,
-  WarningCode.unusedShownName,
-  WarningCode.uriDoesNotExistInDocImport,
+  diag.abiSpecificIntegerInvalid,
+  diag.abiSpecificIntegerMappingExtra,
+  diag.abiSpecificIntegerMappingMissing,
+  diag.abiSpecificIntegerMappingUnsupported,
+  diag.abstractClassMember,
+  diag.abstractExternalField,
+  diag.abstractFieldConstructorInitializer,
+  diag.abstractFieldInitializer,
+  diag.abstractFinalBaseClass,
+  diag.abstractFinalInterfaceClass,
+  diag.abstractLateField,
+  diag.abstractSealedClass,
+  diag.abstractStaticField,
+  diag.abstractStaticMethod,
+  diag.abstractSuperMemberReference,
+  diag.addressPosition,
+  diag.addressReceiver,
+  diag.ambiguousExport,
+  diag.ambiguousExtensionMemberAccessThreeOrMore,
+  diag.ambiguousExtensionMemberAccessTwo,
+  diag.ambiguousImport,
+  diag.ambiguousSetOrMapLiteralBoth,
+  diag.ambiguousSetOrMapLiteralEither,
+  diag.analysisOptionDeprecated,
+  diag.analysisOptionDeprecatedWithReplacement,
+  diag.annotationOnPointerField,
+  diag.annotationOnTypeArgument,
+  diag.annotationSpaceBeforeParenthesis,
+  diag.annotationWithTypeArguments,
+  diag.annotationWithTypeArgumentsUninstantiated,
+  diag.argumentMustBeAConstant,
+  diag.argumentMustBeNative,
+  diag.argumentTypeNotAssignable,
+  diag.argumentTypeNotAssignableToErrorHandler,
+  diag.assertInRedirectingConstructor,
+  diag.assetDirectoryDoesNotExist,
+  diag.assetDoesNotExist,
+  diag.assetFieldNotList,
+  diag.assetMissingPath,
+  diag.assetNotString,
+  diag.assetNotStringOrMap,
+  diag.assetPathNotString,
+  diag.assignmentOfDoNotStore,
+  diag.assignmentToConst,
+  diag.assignmentToFinal,
+  diag.assignmentToFinalLocal,
+  diag.assignmentToFinalNoSetter,
+  diag.assignmentToFunction,
+  diag.assignmentToMethod,
+  diag.assignmentToType,
+  diag.asyncForInWrongContext,
+  diag.asyncKeywordUsedAsIdentifier,
+  diag.augmentationExtendsClauseAlreadyPresent,
+  diag.augmentationModifierExtra,
+  diag.augmentationModifierMissing,
+  diag.augmentationOfDifferentDeclarationKind,
+  diag.augmentationTypeParameterBound,
+  diag.augmentationTypeParameterCount,
+  diag.augmentationTypeParameterName,
+  diag.augmentationWithoutDeclaration,
+  diag.augmentedExpressionIsNotSetter,
+  diag.augmentedExpressionIsSetter,
+  diag.augmentedExpressionNotOperator,
+  diag.awaitInLateLocalVariableInitializer,
+  diag.awaitInWrongContext,
+  diag.awaitOfIncompatibleType,
+  diag.baseClassImplementedOutsideOfLibrary,
+  diag.baseEnum,
+  diag.baseMixinImplementedOutsideOfLibrary,
+  diag.binaryOperatorWrittenOut,
+  diag.bodyMightCompleteNormally,
+  diag.bodyMightCompleteNormallyCatchError,
+  diag.bodyMightCompleteNormallyNullable,
+  diag.breakLabelOnSwitchMember,
+  diag.breakOutsideOfLoop,
+  diag.builtInIdentifierAsExtensionName,
+  diag.builtInIdentifierAsExtensionTypeName,
+  diag.builtInIdentifierAsPrefixName,
+  diag.builtInIdentifierAsType,
+  diag.builtInIdentifierAsTypeName,
+  diag.builtInIdentifierAsTypeParameterName,
+  diag.builtInIdentifierAsTypedefName,
+  diag.cameraPermissionsIncompatible,
+  diag.caseExpressionTypeImplementsEquals,
+  diag.caseExpressionTypeIsNotSwitchExpressionSubtype,
+  diag.castFromNullAlwaysFails,
+  diag.castFromNullableAlwaysFails,
+  diag.castToNonType,
+  diag.catchSyntax,
+  diag.catchSyntaxExtraParameters,
+  diag.classInClass,
+  diag.classInstantiationAccessToInstanceMember,
+  diag.classInstantiationAccessToStaticMember,
+  diag.classInstantiationAccessToUnknownMember,
+  diag.classUsedAsMixin,
+  diag.colonInPlaceOfIn,
+  diag.compoundImplementsFinalizable,
+  diag.concreteClassHasEnumSuperinterface,
+  diag.concreteClassWithAbstractMember,
+  diag.conflictingConstructorAndStaticField,
+  diag.conflictingConstructorAndStaticGetter,
+  diag.conflictingConstructorAndStaticMethod,
+  diag.conflictingConstructorAndStaticSetter,
+  diag.conflictingFieldAndMethod,
+  diag.conflictingGenericInterfaces,
+  diag.conflictingInheritedMethodAndSetter,
+  diag.conflictingMethodAndField,
+  diag.conflictingModifiers,
+  diag.conflictingStaticAndInstance,
+  diag.conflictingTypeVariableAndClass,
+  diag.conflictingTypeVariableAndEnum,
+  diag.conflictingTypeVariableAndExtension,
+  diag.conflictingTypeVariableAndExtensionType,
+  diag.conflictingTypeVariableAndMemberClass,
+  diag.conflictingTypeVariableAndMemberEnum,
+  diag.conflictingTypeVariableAndMemberExtension,
+  diag.conflictingTypeVariableAndMemberExtensionType,
+  diag.conflictingTypeVariableAndMemberMixin,
+  diag.conflictingTypeVariableAndMixin,
+  diag.constAndFinal,
+  diag.constClass,
+  diag.constConstructorConstantFromDeferredLibrary,
+  diag.constConstructorFieldTypeMismatch,
+  diag.constConstructorParamTypeMismatch,
+  diag.constConstructorThrowsException,
+  diag.constConstructorWithBody,
+  diag.constConstructorWithFieldInitializedByNonConst,
+  diag.constConstructorWithMixinWithField,
+  diag.constConstructorWithMixinWithFields,
+  diag.constConstructorWithNonConstSuper,
+  diag.constConstructorWithNonFinalField,
+  diag.constDeferredClass,
+  diag.constEvalAssertionFailure,
+  diag.constEvalAssertionFailureWithMessage,
+  diag.constEvalExtensionMethod,
+  diag.constEvalExtensionTypeMethod,
+  diag.constEvalForElement,
+  diag.constEvalMethodInvocation,
+  diag.constEvalPrimitiveEquality,
+  diag.constEvalPropertyAccess,
+  diag.constEvalThrowsException,
+  diag.constEvalThrowsIdbze,
+  diag.constEvalTypeBool,
+  diag.constEvalTypeBoolInt,
+  diag.constEvalTypeBoolNumString,
+  diag.constEvalTypeInt,
+  diag.constEvalTypeNum,
+  diag.constEvalTypeNumString,
+  diag.constEvalTypeString,
+  diag.constEvalTypeType,
+  diag.constFactory,
+  diag.constFieldInitializerNotAssignable,
+  diag.constInitializedWithNonConstantValue,
+  diag.constInitializedWithNonConstantValueFromDeferredLibrary,
+  diag.constInstanceField,
+  diag.constMapKeyNotPrimitiveEquality,
+  diag.constMethod,
+  diag.constNotInitialized,
+  diag.constSetElementNotPrimitiveEquality,
+  diag.constSpreadExpectedListOrSet,
+  diag.constSpreadExpectedMap,
+  diag.constTypeParameter,
+  diag.constWithNonConst,
+  diag.constWithNonConstantArgument,
+  diag.constWithNonType,
+  diag.constWithTypeParameters,
+  diag.constWithTypeParametersConstructorTearoff,
+  diag.constWithTypeParametersFunctionTearoff,
+  diag.constWithUndefinedConstructor,
+  diag.constWithUndefinedConstructorDefault,
+  diag.constWithoutPrimaryConstructor,
+  diag.constantPatternNeverMatchesValueType,
+  diag.constantPatternWithNonConstantExpression,
+  diag.constructorWithReturnType,
+  diag.constructorWithTypeArguments,
+  diag.continueLabelInvalid,
+  diag.continueOutsideOfLoop,
+  diag.continueWithoutLabelInCase,
+  diag.couldNotInfer,
+  diag.covariantAndStatic,
+  diag.covariantConstructor,
+  diag.covariantMember,
+  diag.creationOfStructOrUnion,
+  diag.deadCode,
+  diag.deadCodeCatchFollowingCatch,
+  diag.deadCodeLateWildcardVariableInitializer,
+  diag.deadCodeOnCatchSubtype,
+  diag.deadNullAwareExpression,
+  diag.defaultInSwitchExpression,
+  diag.defaultValueInFunctionType,
+  diag.defaultValueInRedirectingFactoryConstructor,
+  diag.defaultValueOnRequiredParameter,
+  diag.deferredAfterPrefix,
+  diag.deferredImportOfExtension,
+  diag.definitelyUnassignedLateLocalVariable,
+  diag.dependenciesFieldNotMap,
+  diag.deprecatedColonForDefaultValue,
+  diag.deprecatedExportUse,
+  diag.deprecatedExtend,
+  diag.deprecatedExtendsFunction,
+  diag.deprecatedField,
+  diag.deprecatedImplement,
+  diag.deprecatedImplementsFunction,
+  diag.deprecatedInstantiate,
+  diag.deprecatedLint,
+  diag.deprecatedLintWithReplacement,
+  diag.deprecatedMemberUse,
+  diag.deprecatedMemberUseWithMessage,
+  diag.deprecatedMixin,
+  diag.deprecatedMixinFunction,
+  diag.deprecatedNewInCommentReference,
+  diag.deprecatedOptional,
+  diag.deprecatedSubclass,
+  diag.directiveAfterDeclaration,
+  diag.disallowedTypeInstantiationExpression,
+  diag.docDirectiveArgumentWrongFormat,
+  diag.docDirectiveHasExtraArguments,
+  diag.docDirectiveHasUnexpectedNamedArgument,
+  diag.docDirectiveMissingClosingBrace,
+  diag.docDirectiveMissingClosingTag,
+  diag.docDirectiveMissingOneArgument,
+  diag.docDirectiveMissingOpeningTag,
+  diag.docDirectiveMissingThreeArguments,
+  diag.docDirectiveMissingTwoArguments,
+  diag.docDirectiveUnknown,
+  diag.docImportCannotBeDeferred,
+  diag.docImportCannotHaveCombinators,
+  diag.docImportCannotHaveConfigurations,
+  diag.docImportCannotHavePrefix,
+  diag.dotShorthandMissingContext,
+  diag.dotShorthandUndefinedGetter,
+  diag.dotShorthandUndefinedInvocation,
+  diag.duplicateConstructorDefault,
+  diag.duplicateConstructorName,
+  diag.duplicateDeferred,
+  diag.duplicateDefinition,
+  diag.duplicateExport,
+  diag.duplicateFieldFormalParameter,
+  diag.duplicateFieldName,
+  diag.duplicateHiddenName,
+  diag.duplicateIgnore,
+  diag.duplicateImport,
+  diag.duplicateLabelInSwitchStatement,
+  diag.duplicateNamedArgument,
+  diag.duplicatePart,
+  diag.duplicatePatternAssignmentVariable,
+  diag.duplicatePatternField,
+  diag.duplicatePrefix,
+  diag.duplicateRestElementInPattern,
+  diag.duplicateRule,
+  diag.duplicateShownName,
+  diag.duplicateVariablePattern,
+  diag.duplicatedModifier,
+  diag.emptyEnumBody,
+  diag.emptyMapPattern,
+  diag.emptyRecordLiteralWithComma,
+  diag.emptyRecordTypeNamedFieldsList,
+  diag.emptyRecordTypeWithComma,
+  diag.emptyStruct,
+  diag.encoding,
+  diag.enumConstantInvokesFactoryConstructor,
+  diag.enumConstantSameNameAsEnclosing,
+  diag.enumInClass,
+  diag.enumInstantiatedToBoundsIsNotWellBounded,
+  diag.enumMixinWithInstanceVariable,
+  diag.enumWithAbstractMember,
+  diag.enumWithNameValues,
+  diag.enumWithoutConstants,
+  diag.equalElementsInConstSet,
+  diag.equalElementsInSet,
+  diag.equalKeysInConstMap,
+  diag.equalKeysInMap,
+  diag.equalKeysInMapPattern,
+  diag.equalityCannotBeEqualityOperand,
+  diag.expectedCaseOrDefault,
+  diag.expectedCatchClauseBody,
+  diag.expectedClassBody,
+  diag.expectedClassMember,
+  diag.expectedElseOrComma,
+  diag.expectedExecutable,
+  diag.expectedExtensionBody,
+  diag.expectedExtensionTypeBody,
+  diag.expectedFinallyClauseBody,
+  diag.expectedIdentifierButGotKeyword,
+  diag.expectedInstead,
+  diag.expectedListOrMapLiteral,
+  diag.expectedMixinBody,
+  diag.expectedNamedTypeExtends,
+  diag.expectedNamedTypeImplements,
+  diag.expectedNamedTypeOn,
+  diag.expectedNamedTypeWith,
+  diag.expectedOneListPatternTypeArguments,
+  diag.expectedOneListTypeArguments,
+  diag.expectedOneSetTypeArguments,
+  diag.expectedRepresentationField,
+  diag.expectedRepresentationType,
+  diag.expectedStringLiteral,
+  diag.expectedSwitchExpressionBody,
+  diag.expectedSwitchStatementBody,
+  diag.expectedToken,
+  diag.expectedTryStatementBody,
+  diag.expectedTwoMapPatternTypeArguments,
+  diag.expectedTwoMapTypeArguments,
+  diag.expectedTypeName,
+  diag.experimentNotEnabled,
+  diag.experimentNotEnabledOffByDefault,
+  diag.experimentalMemberUse,
+  diag.exportDirectiveAfterPartDirective,
+  diag.exportInternalLibrary,
+  diag.exportOfNonLibrary,
+  diag.expressionInMap,
+  diag.extendsDeferredClass,
+  diag.extendsDisallowedClass,
+  diag.extendsNonClass,
+  diag.extendsTypeAliasExpandsToTypeParameter,
+  diag.extensionAsExpression,
+  diag.extensionAugmentationHasOnClause,
+  diag.extensionConflictingStaticAndInstance,
+  diag.extensionDeclaresAbstractMember,
+  diag.extensionDeclaresConstructor,
+  diag.extensionDeclaresInstanceField,
+  diag.extensionDeclaresMemberOfObject,
+  diag.extensionOverrideAccessToStaticMember,
+  diag.extensionOverrideArgumentNotAssignable,
+  diag.extensionOverrideWithCascade,
+  diag.extensionOverrideWithoutAccess,
+  diag.extensionTypeConstructorWithSuperFormalParameter,
+  diag.extensionTypeConstructorWithSuperInvocation,
+  diag.extensionTypeDeclaresInstanceField,
+  diag.extensionTypeDeclaresMemberOfObject,
+  diag.extensionTypeExtends,
+  diag.extensionTypeImplementsDisallowedType,
+  diag.extensionTypeImplementsItself,
+  diag.extensionTypeImplementsNotSupertype,
+  diag.extensionTypeImplementsRepresentationNotSupertype,
+  diag.extensionTypeInheritedMemberConflict,
+  diag.extensionTypeRepresentationDependsOnItself,
+  diag.extensionTypeRepresentationTypeBottom,
+  diag.extensionTypeWith,
+  diag.extensionTypeWithAbstractMember,
+  diag.externalClass,
+  diag.externalConstructorWithFieldInitializers,
+  diag.externalConstructorWithInitializer,
+  diag.externalEnum,
+  diag.externalFactoryRedirection,
+  diag.externalFactoryWithBody,
+  diag.externalFieldConstructorInitializer,
+  diag.externalFieldInitializer,
+  diag.externalGetterWithBody,
+  diag.externalLateField,
+  diag.externalMethodWithBody,
+  diag.externalOperatorWithBody,
+  diag.externalSetterWithBody,
+  diag.externalTypedef,
+  diag.externalVariableInitializer,
+  diag.extraAnnotationOnStructField,
+  diag.extraPositionalArguments,
+  diag.extraPositionalArgumentsCouldBeNamed,
+  diag.extraSizeAnnotationCarray,
+  diag.extraneousModifier,
+  diag.extraneousModifierInExtensionType,
+  diag.extraneousModifierInPrimaryConstructor,
+  diag.factoryConstructorNewName,
+  diag.factoryTopLevelDeclaration,
+  diag.factoryWithInitializers,
+  diag.factoryWithoutBody,
+  diag.ffiNativeInvalidDuplicateDefaultAsset,
+  diag.ffiNativeInvalidMultipleAnnotations,
+  diag.ffiNativeMustBeExternal,
+  diag.ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer,
+  diag.ffiNativeUnexpectedNumberOfParameters,
+  diag.ffiNativeUnexpectedNumberOfParametersWithReceiver,
+  diag.fieldInitializedByMultipleInitializers,
+  diag.fieldInitializedInInitializerAndDeclaration,
+  diag.fieldInitializedInParameterAndInitializer,
+  diag.fieldInitializedOutsideDeclaringClass,
+  diag.fieldInitializerFactoryConstructor,
+  diag.fieldInitializerNotAssignable,
+  diag.fieldInitializerOutsideConstructor,
+  diag.fieldInitializerRedirectingConstructor,
+  diag.fieldInitializingFormalNotAssignable,
+  diag.fieldMustBeExternalInStruct,
+  diag.finalAndCovariant,
+  diag.finalAndCovariantLateWithInitializer,
+  diag.finalAndVar,
+  diag.finalClassExtendedOutsideOfLibrary,
+  diag.finalClassImplementedOutsideOfLibrary,
+  diag.finalClassUsedAsMixinConstraintOutsideOfLibrary,
+  diag.finalConstructor,
+  diag.finalEnum,
+  diag.finalInitializedInDeclarationAndConstructor,
+  diag.finalMethod,
+  diag.finalMixin,
+  diag.finalMixinClass,
+  diag.finalNotInitialized,
+  diag.finalNotInitializedConstructor1,
+  diag.finalNotInitializedConstructor2,
+  diag.finalNotInitializedConstructor3Plus,
+  diag.fixme,
+  diag.flutterFieldNotMap,
+  diag.forInOfInvalidElementType,
+  diag.forInOfInvalidType,
+  diag.forInWithConstVariable,
+  diag.functionTypedParameterVar,
+  diag.genericFunctionTypeCannotBeBound,
+  diag.genericFunctionTypeCannotBeTypeArgument,
+  diag.genericMethodTypeInstantiationOnDynamic,
+  diag.genericStructSubclass,
+  diag.getterConstructor,
+  diag.getterInFunction,
+  diag.getterNotAssignableSetterTypes,
+  diag.getterNotSubtypeSetterTypes,
+  diag.getterWithParameters,
+  diag.hack,
+  diag.ifElementConditionFromDeferredLibrary,
+  diag.illegalAssignmentToNonAssignable,
+  diag.illegalAsyncGeneratorReturnType,
+  diag.illegalAsyncReturnType,
+  diag.illegalCharacter,
+  diag.illegalConcreteEnumMemberDeclaration,
+  diag.illegalConcreteEnumMemberInheritance,
+  diag.illegalEnumValuesDeclaration,
+  diag.illegalEnumValuesInheritance,
+  diag.illegalLanguageVersionOverride,
+  diag.illegalPatternAssignmentVariableName,
+  diag.illegalPatternIdentifierName,
+  diag.illegalPatternVariableName,
+  diag.illegalSyncGeneratorReturnType,
+  diag.implementsBeforeExtends,
+  diag.implementsBeforeOn,
+  diag.implementsBeforeWith,
+  diag.implementsDeferredClass,
+  diag.implementsDisallowedClass,
+  diag.implementsNonClass,
+  diag.implementsRepeated,
+  diag.implementsSuperClass,
+  diag.implementsTypeAliasExpandsToTypeParameter,
+  diag.implicitSuperInitializerMissingArguments,
+  diag.implicitThisReferenceInInitializer,
+  diag.importDeferredLibraryWithLoadFunction,
+  diag.importDirectiveAfterPartDirective,
+  diag.importInternalLibrary,
+  diag.importOfNonLibrary,
+  diag.includeFileNotFound,
+  diag.includedFileParseError,
+  diag.includedFileWarning,
+  diag.incompatibleLint,
+  diag.incompatibleLintFiles,
+  diag.incompatibleLintIncluded,
+  diag.inconsistentCaseExpressionTypes,
+  diag.inconsistentInheritance,
+  diag.inconsistentInheritanceGetterAndMethod,
+  diag.inconsistentLanguageVersionOverride,
+  diag.inconsistentPatternVariableLogicalOr,
+  diag.inferenceFailureOnCollectionLiteral,
+  diag.inferenceFailureOnFunctionInvocation,
+  diag.inferenceFailureOnFunctionReturnType,
+  diag.inferenceFailureOnGenericInvocation,
+  diag.inferenceFailureOnInstanceCreation,
+  diag.inferenceFailureOnUninitializedVariable,
+  diag.inferenceFailureOnUntypedParameter,
+  diag.initializedVariableInForEach,
+  diag.initializerForNonExistentField,
+  diag.initializerForStaticField,
+  diag.initializingFormalForNonExistentField,
+  diag.instanceAccessToStaticMember,
+  diag.instanceAccessToStaticMemberOfUnnamedExtension,
+  diag.instanceMemberAccessFromFactory,
+  diag.instanceMemberAccessFromStatic,
+  diag.instantiateAbstractClass,
+  diag.instantiateEnum,
+  diag.instantiateTypeAliasExpandsToTypeParameter,
+  diag.integerLiteralImpreciseAsDouble,
+  diag.integerLiteralOutOfRange,
+  diag.interfaceClassExtendedOutsideOfLibrary,
+  diag.interfaceEnum,
+  diag.interfaceMixin,
+  diag.interfaceMixinClass,
+  diag.invalidAnnotation,
+  diag.invalidAnnotationConstantValueFromDeferredLibrary,
+  diag.invalidAnnotationFromDeferredLibrary,
+  diag.invalidAnnotationTarget,
+  diag.invalidAssignment,
+  diag.invalidAwaitInFor,
+  diag.invalidAwaitNotRequiredAnnotation,
+  diag.invalidCastFunction,
+  diag.invalidCastFunctionExpr,
+  diag.invalidCastLiteral,
+  diag.invalidCastLiteralList,
+  diag.invalidCastLiteralMap,
+  diag.invalidCastLiteralSet,
+  diag.invalidCastMethod,
+  diag.invalidCastNewExpr,
+  diag.invalidCodePoint,
+  diag.invalidCommentReference,
+  diag.invalidConstant,
+  diag.invalidConstantConstPrefix,
+  diag.invalidConstantPatternBinary,
+  diag.invalidConstantPatternDuplicateConst,
+  diag.invalidConstantPatternEmptyRecordLiteral,
+  diag.invalidConstantPatternGeneric,
+  diag.invalidConstantPatternNegation,
+  diag.invalidConstantPatternUnary,
+  diag.invalidConstructorName,
+  diag.invalidDependency,
+  diag.invalidDeprecatedExtendAnnotation,
+  diag.invalidDeprecatedImplementAnnotation,
+  diag.invalidDeprecatedInstantiateAnnotation,
+  diag.invalidDeprecatedMixinAnnotation,
+  diag.invalidDeprecatedOptionalAnnotation,
+  diag.invalidDeprecatedSubclassAnnotation,
+  diag.invalidExceptionValue,
+  diag.invalidExportOfInternalElement,
+  diag.invalidExportOfInternalElementIndirectly,
+  diag.invalidExtensionArgumentCount,
+  diag.invalidFactoryMethodDecl,
+  diag.invalidFactoryMethodImpl,
+  diag.invalidFactoryNameNotAClass,
+  diag.invalidFieldNameFromObject,
+  diag.invalidFieldNamePositional,
+  diag.invalidFieldNamePrivate,
+  diag.invalidFieldTypeInStruct,
+  diag.invalidGenericFunctionType,
+  diag.invalidHexEscape,
+  diag.invalidImplementationOverride,
+  diag.invalidImplementationOverrideSetter,
+  diag.invalidInitializer,
+  diag.invalidInlineFunctionType,
+  diag.invalidInsideUnaryPattern,
+  diag.invalidInternalAnnotation,
+  diag.invalidLanguageVersionOverrideAtSign,
+  diag.invalidLanguageVersionOverrideEquals,
+  diag.invalidLanguageVersionOverrideGreater,
+  diag.invalidLanguageVersionOverrideLocation,
+  diag.invalidLanguageVersionOverrideLowerCase,
+  diag.invalidLanguageVersionOverrideNumber,
+  diag.invalidLanguageVersionOverridePrefix,
+  diag.invalidLanguageVersionOverrideTrailingCharacters,
+  diag.invalidLanguageVersionOverrideTwoSlashes,
+  diag.invalidLiteralAnnotation,
+  diag.invalidLiteralInConfiguration,
+  diag.invalidModifierOnConstructor,
+  diag.invalidModifierOnSetter,
+  diag.invalidNonVirtualAnnotation,
+  diag.invalidNullAwareElement,
+  diag.invalidNullAwareMapEntryKey,
+  diag.invalidNullAwareMapEntryValue,
+  diag.invalidNullAwareOperator,
+  diag.invalidNullAwareOperatorAfterShortCircuit,
+  diag.invalidOperator,
+  diag.invalidOperatorForSuper,
+  diag.invalidOperatorQuestionmarkPeriodForSuper,
+  diag.invalidOption,
+  diag.invalidOverride,
+  diag.invalidOverrideOfNonVirtualMember,
+  diag.invalidOverrideSetter,
+  diag.invalidPlatformsField,
+  diag.invalidReferenceToGenerativeEnumConstructor,
+  diag.invalidReferenceToGenerativeEnumConstructorTearoff,
+  diag.invalidReferenceToThis,
+  diag.invalidReopenAnnotation,
+  diag.invalidSectionFormat,
+  diag.invalidStarAfterAsync,
+  diag.invalidSuperFormalParameterLocation,
+  diag.invalidSuperInInitializer,
+  diag.invalidSync,
+  diag.invalidThisInInitializer,
+  diag.invalidTypeArgumentInConstList,
+  diag.invalidTypeArgumentInConstMap,
+  diag.invalidTypeArgumentInConstSet,
+  diag.invalidUnicodeEscapeStarted,
+  diag.invalidUnicodeEscapeUBracket,
+  diag.invalidUnicodeEscapeUNoBracket,
+  diag.invalidUnicodeEscapeUStarted,
+  diag.invalidUri,
+  diag.invalidUseOfCovariant,
+  diag.invalidUseOfCovariantInExtension,
+  diag.invalidUseOfDoNotSubmitMember,
+  diag.invalidUseOfIdentifierAugmented,
+  diag.invalidUseOfInternalMember,
+  diag.invalidUseOfNullValue,
+  diag.invalidUseOfProtectedMember,
+  diag.invalidUseOfVisibleForOverridingMember,
+  diag.invalidUseOfVisibleForTemplateMember,
+  diag.invalidUseOfVisibleForTestingMember,
+  diag.invalidVisibilityAnnotation,
+  diag.invalidVisibleForOverridingAnnotation,
+  diag.invalidVisibleOutsideTemplateAnnotation,
+  diag.invalidWidgetPreviewApplication,
+  diag.invalidWidgetPreviewPrivateArgument,
+  diag.invocationOfExtensionWithoutCall,
+  diag.invocationOfNonFunction,
+  diag.invocationOfNonFunctionExpression,
+  diag.labelInOuterScope,
+  diag.labelUndefined,
+  diag.lateFinalFieldWithConstConstructor,
+  diag.lateFinalLocalAlreadyAssigned,
+  diag.latePatternVariableDeclaration,
+  diag.leafCallMustNotReturnHandle,
+  diag.leafCallMustNotTakeHandle,
+  diag.libraryDirectiveNotFirst,
+  diag.listElementTypeNotAssignable,
+  diag.listElementTypeNotAssignableNullability,
+  diag.literalWithClass,
+  diag.literalWithClassAndNew,
+  diag.literalWithNew,
+  diag.localFunctionDeclarationModifier,
+  diag.mainFirstPositionalParameterType,
+  diag.mainHasRequiredNamedParameters,
+  diag.mainHasTooManyRequiredPositionalParameters,
+  diag.mainIsNotFunction,
+  diag.mapEntryNotInMap,
+  diag.mapKeyTypeNotAssignable,
+  diag.mapKeyTypeNotAssignableNullability,
+  diag.mapValueTypeNotAssignable,
+  diag.mapValueTypeNotAssignableNullability,
+  diag.memberWithClassName,
+  diag.mismatchedAnnotationOnStructField,
+  diag.missingAnnotationOnStructField,
+  diag.missingAssignableSelector,
+  diag.missingAssignmentInInitializer,
+  diag.missingCatchOrFinally,
+  diag.missingClosingParenthesis,
+  diag.missingConstFinalVarOrType,
+  diag.missingConstInListLiteral,
+  diag.missingConstInMapLiteral,
+  diag.missingConstInSetLiteral,
+  diag.missingDartLibrary,
+  diag.missingDefaultValueForParameter,
+  diag.missingDefaultValueForParameterPositional,
+  diag.missingDefaultValueForParameterWithAnnotation,
+  diag.missingDependency,
+  diag.missingDigit,
+  diag.missingEnumBody,
+  diag.missingEnumConstantInSwitch,
+  diag.missingExceptionValue,
+  diag.missingExpressionInInitializer,
+  diag.missingExpressionInThrow,
+  diag.missingFieldTypeInStruct,
+  diag.missingFunctionBody,
+  diag.missingFunctionKeyword,
+  diag.missingFunctionParameters,
+  diag.missingGet,
+  diag.missingHexDigit,
+  diag.missingIdentifier,
+  diag.missingInitializer,
+  diag.missingKeywordOperator,
+  diag.missingMethodParameters,
+  diag.missingName,
+  diag.missingNameForNamedParameter,
+  diag.missingNameInLibraryDirective,
+  diag.missingNameInPartOfDirective,
+  diag.missingNamedPatternFieldName,
+  diag.missingOverrideOfMustBeOverriddenOne,
+  diag.missingOverrideOfMustBeOverriddenThreePlus,
+  diag.missingOverrideOfMustBeOverriddenTwo,
+  diag.missingPrefixInDeferredImport,
+  diag.missingPrimaryConstructor,
+  diag.missingPrimaryConstructorParameters,
+  diag.missingQuote,
+  diag.missingRequiredArgument,
+  diag.missingRequiredParam,
+  diag.missingRequiredParamWithDetails,
+  diag.missingSizeAnnotationCarray,
+  diag.missingStarAfterSync,
+  diag.missingStatement,
+  diag.missingTerminatorForParameterGroup,
+  diag.missingTypedefParameters,
+  diag.missingVariableInForEach,
+  diag.missingVariablePattern,
+  diag.mixedParameterGroups,
+  diag.mixinApplicationConcreteSuperInvokedMemberType,
+  diag.mixinApplicationNoConcreteSuperInvokedMember,
+  diag.mixinApplicationNoConcreteSuperInvokedSetter,
+  diag.mixinApplicationNotImplementedInterface,
+  diag.mixinClassDeclarationExtendsNotObject,
+  diag.mixinClassDeclaresConstructor,
+  diag.mixinDeclaresConstructor,
+  diag.mixinDeferredClass,
+  diag.mixinInheritsFromNotObject,
+  diag.mixinInstantiate,
+  diag.mixinOfDisallowedClass,
+  diag.mixinOfNonClass,
+  diag.mixinOfTypeAliasExpandsToTypeParameter,
+  diag.mixinOnSealedClass,
+  diag.mixinOnTypeAliasExpandsToTypeParameter,
+  diag.mixinSubtypeOfBaseIsNotBase,
+  diag.mixinSubtypeOfFinalIsNotBase,
+  diag.mixinSuperClassConstraintDeferredClass,
+  diag.mixinSuperClassConstraintDisallowedClass,
+  diag.mixinSuperClassConstraintNonInterface,
+  diag.mixinWithClause,
+  diag.mixinWithNonClassSuperclass,
+  diag.mixinsSuperClass,
+  diag.modifierOutOfOrder,
+  diag.multipleClauses,
+  diag.multipleCombinators,
+  diag.multipleExtendsClauses,
+  diag.multipleImplementsClauses,
+  diag.multipleLibraryDirectives,
+  diag.multipleNamedParameterGroups,
+  diag.multipleOnClauses,
+  diag.multiplePartOfDirectives,
+  diag.multiplePlugins,
+  diag.multiplePositionalParameterGroups,
+  diag.multipleRedirectingConstructorInvocations,
+  diag.multipleRepresentationFields,
+  diag.multipleSuperInitializers,
+  diag.multipleVariablesInForEach,
+  diag.multipleVarianceModifiers,
+  diag.multipleWithClauses,
+  diag.mustBeANativeFunctionType,
+  diag.mustBeASubtype,
+  diag.mustBeImmutable,
+  diag.mustCallSuper,
+  diag.mustReturnVoid,
+  diag.nameNotString,
+  diag.namedFunctionExpression,
+  diag.namedFunctionType,
+  diag.namedParameterOutsideGroup,
+  diag.nativeClauseInNonSdkCode,
+  diag.nativeClauseShouldBeAnnotation,
+  diag.nativeFieldInvalidType,
+  diag.nativeFieldMissingType,
+  diag.nativeFieldNotStatic,
+  diag.nativeFunctionBodyInNonSdkCode,
+  diag.nativeFunctionMissingType,
+  diag.negativeVariableDimension,
+  diag.newConstructorNewName,
+  diag.newConstructorQualifiedName,
+  diag.newWithNonType,
+  diag.newWithUndefinedConstructor,
+  diag.newWithUndefinedConstructorDefault,
+  diag.noAnnotationConstructorArguments,
+  diag.noCombinedSuperSignature,
+  diag.noDefaultSuperConstructorExplicit,
+  diag.noDefaultSuperConstructorImplicit,
+  diag.noGenerativeConstructorsInSuperclass,
+  diag.noTouchscreenFeature,
+  diag.nonAbstractClassInheritsAbstractMemberFivePlus,
+  diag.nonAbstractClassInheritsAbstractMemberFour,
+  diag.nonAbstractClassInheritsAbstractMemberOne,
+  diag.nonAbstractClassInheritsAbstractMemberThree,
+  diag.nonAbstractClassInheritsAbstractMemberTwo,
+  diag.nonBoolCondition,
+  diag.nonBoolExpression,
+  diag.nonBoolNegationExpression,
+  diag.nonBoolOperand,
+  diag.nonConstArgumentForConstParameter,
+  diag.nonConstCallToLiteralConstructor,
+  diag.nonConstCallToLiteralConstructorUsingNew,
+  diag.nonConstGenerativeEnumConstructor,
+  diag.nonConstMapAsExpressionStatement,
+  diag.nonConstantAnnotationConstructor,
+  diag.nonConstantCaseExpression,
+  diag.nonConstantCaseExpressionFromDeferredLibrary,
+  diag.nonConstantDefaultValue,
+  diag.nonConstantDefaultValueFromDeferredLibrary,
+  diag.nonConstantListElement,
+  diag.nonConstantListElementFromDeferredLibrary,
+  diag.nonConstantMapElement,
+  diag.nonConstantMapKey,
+  diag.nonConstantMapKeyFromDeferredLibrary,
+  diag.nonConstantMapPatternKey,
+  diag.nonConstantMapValue,
+  diag.nonConstantMapValueFromDeferredLibrary,
+  diag.nonConstantRecordField,
+  diag.nonConstantRecordFieldFromDeferredLibrary,
+  diag.nonConstantRelationalPatternExpression,
+  diag.nonConstantSetElement,
+  diag.nonConstantTypeArgument,
+  diag.nonConstructorFactory,
+  diag.nonCovariantTypeParameterPositionInRepresentationType,
+  diag.nonExhaustiveSwitchExpression,
+  diag.nonExhaustiveSwitchExpressionPrivate,
+  diag.nonExhaustiveSwitchStatement,
+  diag.nonExhaustiveSwitchStatementPrivate,
+  diag.nonFinalFieldInEnum,
+  diag.nonGenerativeConstructor,
+  diag.nonGenerativeImplicitConstructor,
+  diag.nonIdentifierLibraryName,
+  diag.nonNativeFunctionTypeArgumentToPointer,
+  diag.nonNullableEqualsParameter,
+  diag.nonPartOfDirectiveInPart,
+  diag.nonPositiveArrayDimension,
+  diag.nonRedirectingGenerativeConstructorWithPrimary,
+  diag.nonResizableActivity,
+  diag.nonSizedTypeArgument,
+  diag.nonStringLiteralAsUri,
+  diag.nonSyncFactory,
+  diag.nonTypeAsTypeArgument,
+  diag.nonTypeInCatchClause,
+  diag.nonUserDefinableOperator,
+  diag.nonVoidReturnForOperator,
+  diag.nonVoidReturnForSetter,
+  diag.normalBeforeOptionalParameters,
+  diag.notAType,
+  diag.notAssignedPotentiallyNonNullableLocalVariable,
+  diag.notBinaryOperator,
+  diag.notEnoughPositionalArgumentsNamePlural,
+  diag.notEnoughPositionalArgumentsNameSingular,
+  diag.notEnoughPositionalArgumentsPlural,
+  diag.notEnoughPositionalArgumentsSingular,
+  diag.notInitializedNonNullableInstanceField,
+  diag.notInitializedNonNullableInstanceFieldConstructor,
+  diag.notInitializedNonNullableVariable,
+  diag.notInstantiatedBound,
+  diag.notIterableSpread,
+  diag.notMapSpread,
+  diag.notNullAwareNullSpread,
+  diag.nullArgumentToNonNullType,
+  diag.nullAwareCascadeOutOfOrder,
+  diag.nullCheckAlwaysFails,
+  diag.nullableTypeInCatchClause,
+  diag.nullableTypeInExtendsClause,
+  diag.nullableTypeInImplementsClause,
+  diag.nullableTypeInOnClause,
+  diag.nullableTypeInWithClause,
+  diag.objectCannotExtendAnotherClass,
+  diag.obsoleteColonForDefaultValue,
+  diag.onRepeated,
+  diag.optionalParameterInOperator,
+  diag.outOfOrderClauses,
+  diag.overrideOnNonOverridingField,
+  diag.overrideOnNonOverridingGetter,
+  diag.overrideOnNonOverridingMethod,
+  diag.overrideOnNonOverridingSetter,
+  diag.packedAnnotation,
+  diag.packedAnnotationAlignment,
+  diag.parseError,
+  diag.partOfDifferentLibrary,
+  diag.partOfName,
+  diag.partOfNonPart,
+  diag.partOfUnnamedLibrary,
+  diag.pathDoesNotExist,
+  diag.pathNotPosix,
+  diag.pathPubspecDoesNotExist,
+  diag.patternAssignmentDeclaresVariable,
+  diag.patternAssignmentNotLocalVariable,
+  diag.patternConstantFromDeferredLibrary,
+  diag.patternNeverMatchesValueType,
+  diag.patternTypeMismatchInIrrefutableContext,
+  diag.patternVariableAssignmentInsideGuard,
+  diag.patternVariableDeclarationOutsideFunctionOrMethod,
+  diag.patternVariableSharedCaseScopeDifferentFinalityOrType,
+  diag.patternVariableSharedCaseScopeHasLabel,
+  diag.patternVariableSharedCaseScopeNotAllCases,
+  diag.permissionImpliesUnsupportedHardware,
+  diag.platformValueDisallowed,
+  diag.pluginsInInnerOptions,
+  diag.positionalAfterNamedArgument,
+  diag.positionalFieldInObjectPattern,
+  diag.positionalParameterOutsideGroup,
+  diag.positionalSuperFormalParameterWithPositionalArgument,
+  diag.prefixAfterCombinator,
+  diag.prefixCollidesWithTopLevelMember,
+  diag.prefixIdentifierNotFollowedByDot,
+  diag.prefixShadowedByLocalDeclaration,
+  diag.privateCollisionInMixinApplication,
+  diag.privateNamedNonFieldParameter,
+  diag.privateNamedParameterDuplicatePublicName,
+  diag.privateNamedParameterWithoutPublicName,
+  diag.privateOptionalParameter,
+  diag.privateSetter,
+  diag.readPotentiallyUnassignedFinal,
+  diag.receiverOfTypeNever,
+  diag.recordLiteralOnePositionalNoTrailingComma,
+  diag.recordLiteralOnePositionalNoTrailingCommaByType,
+  diag.recordTypeOnePositionalNoTrailingComma,
+  diag.recursiveCompileTimeConstant,
+  diag.recursiveConstantConstructor,
+  diag.recursiveConstructorRedirect,
+  diag.recursiveFactoryRedirect,
+  diag.recursiveIncludeFile,
+  diag.recursiveInterfaceInheritance,
+  diag.recursiveInterfaceInheritanceExtends,
+  diag.recursiveInterfaceInheritanceImplements,
+  diag.recursiveInterfaceInheritanceOn,
+  diag.recursiveInterfaceInheritanceWith,
+  diag.redeclareOnNonRedeclaringMember,
+  diag.redirectGenerativeToMissingConstructor,
+  diag.redirectGenerativeToNonGenerativeConstructor,
+  diag.redirectToAbstractClassConstructor,
+  diag.redirectToInvalidFunctionType,
+  diag.redirectToInvalidReturnType,
+  diag.redirectToMissingConstructor,
+  diag.redirectToNonClass,
+  diag.redirectToNonConstConstructor,
+  diag.redirectToTypeAliasExpandsToTypeParameter,
+  diag.redirectingConstructorWithBody,
+  diag.redirectionInNonFactoryConstructor,
+  diag.referencedBeforeDeclaration,
+  diag.refutablePatternInIrrefutableContext,
+  diag.relationalPatternOperandTypeNotAssignable,
+  diag.relationalPatternOperatorReturnTypeNotAssignableToBool,
+  diag.removedLint,
+  diag.removedLintUse,
+  diag.replacedLint,
+  diag.replacedLintUse,
+  diag.representationFieldModifier,
+  diag.representationFieldTrailingComma,
+  diag.restElementInMapPattern,
+  diag.rethrowOutsideCatch,
+  diag.returnInGenerativeConstructor,
+  diag.returnInGenerator,
+  diag.returnOfDoNotStore,
+  diag.returnOfInvalidTypeFromCatchError,
+  diag.returnOfInvalidTypeFromClosure,
+  diag.returnOfInvalidTypeFromConstructor,
+  diag.returnOfInvalidTypeFromFunction,
+  diag.returnOfInvalidTypeFromMethod,
+  diag.returnTypeInvalidForCatchError,
+  diag.returnWithoutValue,
+  diag.sdkVersionConstructorTearoffs,
+  diag.sdkVersionGtGtGtOperator,
+  diag.sdkVersionSince,
+  diag.sealedClassSubtypeOutsideOfLibrary,
+  diag.sealedEnum,
+  diag.sealedMixin,
+  diag.sealedMixinClass,
+  diag.setElementFromDeferredLibrary,
+  diag.setElementTypeNotAssignable,
+  diag.setElementTypeNotAssignableNullability,
+  diag.setterConstructor,
+  diag.setterInFunction,
+  diag.settingOrientationOnActivity,
+  diag.sharedDeferredPrefix,
+  diag.sizeAnnotationDimensions,
+  diag.spreadExpressionFromDeferredLibrary,
+  diag.stackOverflow,
+  diag.staticAccessToInstanceMember,
+  diag.staticConstructor,
+  diag.staticGetterWithoutBody,
+  diag.staticOperator,
+  diag.staticSetterWithoutBody,
+  diag.strictRawType,
+  diag.subtypeOfBaseIsNotBaseFinalOrSealed,
+  diag.subtypeOfFinalIsNotBaseFinalOrSealed,
+  diag.subtypeOfSealedClass,
+  diag.subtypeOfStructClassInExtends,
+  diag.subtypeOfStructClassInImplements,
+  diag.subtypeOfStructClassInWith,
+  diag.superFormalParameterTypeIsNotSubtypeOfAssociated,
+  diag.superFormalParameterWithoutAssociatedNamed,
+  diag.superFormalParameterWithoutAssociatedPositional,
+  diag.superInEnumConstructor,
+  diag.superInExtension,
+  diag.superInExtensionType,
+  diag.superInInvalidContext,
+  diag.superInRedirectingConstructor,
+  diag.superInitializerInObject,
+  diag.superInvocationNotLast,
+  diag.switchCaseCompletesNormally,
+  diag.switchHasCaseAfterDefaultCase,
+  diag.switchHasMultipleDefaultCases,
+  diag.tearoffOfGenerativeConstructorOfAbstractClass,
+  diag.textDirectionCodePointInComment,
+  diag.textDirectionCodePointInLiteral,
+  diag.throwOfInvalidType,
+  diag.todo,
+  diag.topLevelCycle,
+  diag.topLevelOperator,
+  diag.typeAliasCannotReferenceItself,
+  diag.typeAnnotationDeferredClass,
+  diag.typeArgumentNotMatchingBounds,
+  diag.typeArgumentsOnTypeVariable,
+  diag.typeBeforeFactory,
+  diag.typeCheckIsNotNull,
+  diag.typeCheckIsNull,
+  diag.typeParameterOnConstructor,
+  diag.typeParameterOnOperator,
+  diag.typeParameterReferencedByStatic,
+  diag.typeParameterSupertypeOfItsBound,
+  diag.typeTestWithNonType,
+  diag.typeTestWithUndefinedName,
+  diag.typedefInClass,
+  diag.unableGetContent,
+  diag.uncheckedInvocationOfNullableValue,
+  diag.uncheckedMethodInvocationOfNullableValue,
+  diag.uncheckedOperatorInvocationOfNullableValue,
+  diag.uncheckedPropertyAccessOfNullableValue,
+  diag.uncheckedUseOfNullableValueAsCondition,
+  diag.uncheckedUseOfNullableValueAsIterator,
+  diag.uncheckedUseOfNullableValueInSpread,
+  diag.uncheckedUseOfNullableValueInYieldEach,
+  diag.undefinedAnnotation,
+  diag.undefinedClass,
+  diag.undefinedClassBoolean,
+  diag.undefinedConstructorInInitializer,
+  diag.undefinedConstructorInInitializerDefault,
+  diag.undefinedEnumConstant,
+  diag.undefinedEnumConstructorNamed,
+  diag.undefinedEnumConstructorUnnamed,
+  diag.undefinedExtensionGetter,
+  diag.undefinedExtensionMethod,
+  diag.undefinedExtensionOperator,
+  diag.undefinedExtensionSetter,
+  diag.undefinedFunction,
+  diag.undefinedGetter,
+  diag.undefinedGetterOnFunctionType,
+  diag.undefinedHiddenName,
+  diag.undefinedIdentifier,
+  diag.undefinedIdentifierAwait,
+  diag.undefinedLint,
+  diag.undefinedMethod,
+  diag.undefinedMethodOnFunctionType,
+  diag.undefinedNamedParameter,
+  diag.undefinedOperator,
+  diag.undefinedPrefixedName,
+  diag.undefinedReferencedParameter,
+  diag.undefinedSetter,
+  diag.undefinedSetterOnFunctionType,
+  diag.undefinedShownName,
+  diag.undefinedSuperGetter,
+  diag.undefinedSuperMethod,
+  diag.undefinedSuperOperator,
+  diag.undefinedSuperSetter,
+  diag.undone,
+  diag.unexpectedDollarInString,
+  diag.unexpectedSeparatorInNumber,
+  diag.unexpectedTerminatorForParameterGroup,
+  diag.unexpectedToken,
+  diag.unexpectedTokens,
+  diag.unignorableIgnore,
+  diag.unknownPlatform,
+  diag.unnecessaryCast,
+  diag.unnecessaryCastPattern,
+  diag.unnecessaryDevDependency,
+  diag.unnecessaryFinal,
+  diag.unnecessaryImport,
+  diag.unnecessaryNanComparisonFalse,
+  diag.unnecessaryNanComparisonTrue,
+  diag.unnecessaryNoSuchMethod,
+  diag.unnecessaryNonNullAssertion,
+  diag.unnecessaryNullAssertPattern,
+  diag.unnecessaryNullCheckPattern,
+  diag.unnecessaryNullComparisonAlwaysNullFalse,
+  diag.unnecessaryNullComparisonAlwaysNullTrue,
+  diag.unnecessaryNullComparisonNeverNullFalse,
+  diag.unnecessaryNullComparisonNeverNullTrue,
+  diag.unnecessaryQuestionMark,
+  diag.unnecessarySetLiteral,
+  diag.unnecessaryTypeCheckFalse,
+  diag.unnecessaryTypeCheckTrue,
+  diag.unnecessaryWildcardPattern,
+  diag.unqualifiedReferenceToNonLocalStaticMember,
+  diag.unqualifiedReferenceToStaticMemberOfExtendedType,
+  diag.unreachableSwitchCase,
+  diag.unreachableSwitchDefault,
+  diag.unrecognizedErrorCode,
+  diag.unsupportedChromeOsFeature,
+  diag.unsupportedChromeOsHardware,
+  diag.unsupportedOperator,
+  diag.unsupportedOptionWithLegalValue,
+  diag.unsupportedOptionWithLegalValues,
+  diag.unsupportedOptionWithoutValues,
+  diag.unsupportedValue,
+  diag.unterminatedMultiLineComment,
+  diag.unterminatedStringLiteral,
+  diag.unusedCatchClause,
+  diag.unusedCatchStack,
+  diag.unusedElement,
+  diag.unusedElementParameter,
+  diag.unusedField,
+  diag.unusedImport,
+  diag.unusedLabel,
+  diag.unusedLocalVariable,
+  diag.unusedResult,
+  diag.unusedResultWithMessage,
+  diag.unusedShownName,
+  diag.uriDoesNotExist,
+  diag.uriDoesNotExistInDocImport,
+  diag.uriHasNotBeenGenerated,
+  diag.uriWithInterpolation,
+  diag.useOfNativeExtension,
+  diag.useOfVoidResult,
+  diag.valuesDeclarationInEnum,
+  diag.varAndType,
+  diag.varAsTypeName,
+  diag.varClass,
+  diag.varEnum,
+  diag.varReturnType,
+  diag.varTypedef,
+  diag.variableLengthArrayNotLast,
+  diag.variablePatternKeywordInDeclarationContext,
+  diag.variableTypeMismatch,
+  diag.voidWithTypeArguments,
+  diag.withBeforeExtends,
+  diag.workspaceFieldNotList,
+  diag.workspaceValueNotString,
+  diag.workspaceValueNotSubdirectory,
+  diag.wrongExplicitTypeParameterVarianceInSuperinterface,
+  diag.wrongNumberOfParametersForOperator,
+  diag.wrongNumberOfParametersForOperatorMinus,
+  diag.wrongNumberOfParametersForSetter,
+  diag.wrongNumberOfTypeArguments,
+  diag.wrongNumberOfTypeArgumentsAnonymousFunction,
+  diag.wrongNumberOfTypeArgumentsConstructor,
+  diag.wrongNumberOfTypeArgumentsDotShorthandConstructor,
+  diag.wrongNumberOfTypeArgumentsEnum,
+  diag.wrongNumberOfTypeArgumentsExtension,
+  diag.wrongNumberOfTypeArgumentsFunction,
+  diag.wrongNumberOfTypeArgumentsMethod,
+  diag.wrongSeparatorForPositionalParameter,
+  diag.wrongTerminatorForParameterGroup,
+  diag.wrongTypeParameterVarianceInSuperinterface,
+  diag.wrongTypeParameterVariancePosition,
+  diag.yieldEachInNonGenerator,
+  diag.yieldEachOfInvalidType,
+  diag.yieldInNonGenerator,
+  diag.yieldOfInvalidType,
 ];
 
 final sharedAnalyzerCodes = <DiagnosticCode>[
-  ParserErrorCode.abstractClassMember,
-  ParserErrorCode.abstractExternalField,
-  ParserErrorCode.abstractFinalBaseClass,
-  ParserErrorCode.abstractFinalInterfaceClass,
-  ParserErrorCode.abstractLateField,
-  ParserErrorCode.abstractSealedClass,
-  ParserErrorCode.abstractStaticField,
-  ParserErrorCode.annotationOnTypeArgument,
-  ParserErrorCode.annotationSpaceBeforeParenthesis,
-  ParserErrorCode.annotationWithTypeArguments,
-  ParserErrorCode.annotationWithTypeArgumentsUninstantiated,
-  ParserErrorCode.baseEnum,
-  ParserErrorCode.binaryOperatorWrittenOut,
-  ParserErrorCode.breakOutsideOfLoop,
-  ParserErrorCode.catchSyntax,
-  ParserErrorCode.catchSyntaxExtraParameters,
-  ParserErrorCode.classInClass,
-  ParserErrorCode.colonInPlaceOfIn,
-  ParserErrorCode.conflictingModifiers,
-  ParserErrorCode.constAndFinal,
-  ParserErrorCode.constClass,
-  ParserErrorCode.constFactory,
-  ParserErrorCode.constMethod,
-  ParserErrorCode.constWithoutPrimaryConstructor,
-  ParserErrorCode.constructorWithReturnType,
-  ParserErrorCode.constructorWithTypeArguments,
-  ParserErrorCode.continueOutsideOfLoop,
-  ParserErrorCode.continueWithoutLabelInCase,
-  ParserErrorCode.covariantAndStatic,
-  ParserErrorCode.covariantMember,
-  ParserErrorCode.defaultInSwitchExpression,
-  ParserErrorCode.deferredAfterPrefix,
-  ParserErrorCode.directiveAfterDeclaration,
-  ParserErrorCode.duplicateDeferred,
-  ParserErrorCode.duplicateLabelInSwitchStatement,
-  ParserErrorCode.duplicatePrefix,
-  ParserErrorCode.duplicatedModifier,
-  ParserErrorCode.emptyRecordLiteralWithComma,
-  ParserErrorCode.emptyRecordTypeNamedFieldsList,
-  ParserErrorCode.emptyRecordTypeWithComma,
-  ParserErrorCode.enumInClass,
-  ParserErrorCode.equalityCannotBeEqualityOperand,
-  ParserErrorCode.expectedCatchClauseBody,
-  ParserErrorCode.expectedClassBody,
-  ParserErrorCode.expectedElseOrComma,
-  ParserErrorCode.expectedExtensionBody,
-  ParserErrorCode.expectedExtensionTypeBody,
-  ParserErrorCode.expectedFinallyClauseBody,
-  ParserErrorCode.expectedIdentifierButGotKeyword,
-  ParserErrorCode.expectedInstead,
-  ParserErrorCode.expectedMixinBody,
-  ParserErrorCode.expectedSwitchExpressionBody,
-  ParserErrorCode.expectedSwitchStatementBody,
-  ParserErrorCode.expectedTryStatementBody,
-  ParserErrorCode.experimentNotEnabled,
-  ParserErrorCode.experimentNotEnabledOffByDefault,
-  ParserErrorCode.exportDirectiveAfterPartDirective,
-  ParserErrorCode.extensionAugmentationHasOnClause,
-  ParserErrorCode.extensionDeclaresAbstractMember,
-  ParserErrorCode.extensionDeclaresConstructor,
-  ParserErrorCode.extensionTypeExtends,
-  ParserErrorCode.extensionTypeWith,
-  ParserErrorCode.externalClass,
-  ParserErrorCode.externalConstructorWithFieldInitializers,
-  ParserErrorCode.externalConstructorWithInitializer,
-  ParserErrorCode.externalEnum,
-  ParserErrorCode.externalFactoryRedirection,
-  ParserErrorCode.externalFactoryWithBody,
-  ParserErrorCode.externalLateField,
-  ParserErrorCode.externalMethodWithBody,
-  ParserErrorCode.externalTypedef,
-  ParserErrorCode.extraneousModifier,
-  ParserErrorCode.extraneousModifierInExtensionType,
-  ParserErrorCode.extraneousModifierInPrimaryConstructor,
-  ParserErrorCode.factoryTopLevelDeclaration,
-  ParserErrorCode.fieldInitializedOutsideDeclaringClass,
-  CompileTimeErrorCode.fieldInitializerOutsideConstructor,
-  ParserErrorCode.finalAndCovariant,
-  ParserErrorCode.finalAndCovariantLateWithInitializer,
-  ParserErrorCode.finalAndVar,
-  ParserErrorCode.finalEnum,
-  ParserErrorCode.finalMixin,
-  ParserErrorCode.finalMixinClass,
-  ParserErrorCode.functionTypedParameterVar,
-  ParserErrorCode.getterConstructor,
-  ParserErrorCode.illegalAssignmentToNonAssignable,
-  ParserErrorCode.illegalPatternAssignmentVariableName,
-  ParserErrorCode.illegalPatternIdentifierName,
-  ParserErrorCode.illegalPatternVariableName,
-  ParserErrorCode.implementsBeforeExtends,
-  ParserErrorCode.implementsBeforeOn,
-  ParserErrorCode.implementsBeforeWith,
-  ParserErrorCode.importDirectiveAfterPartDirective,
-  ParserErrorCode.initializedVariableInForEach,
-  ParserErrorCode.interfaceEnum,
-  ParserErrorCode.interfaceMixin,
-  ParserErrorCode.interfaceMixinClass,
-  ParserErrorCode.invalidAwaitInFor,
-  ParserErrorCode.invalidConstantConstPrefix,
-  ParserErrorCode.invalidConstantPatternBinary,
-  ParserErrorCode.invalidConstantPatternDuplicateConst,
-  ParserErrorCode.invalidConstantPatternEmptyRecordLiteral,
-  ParserErrorCode.invalidConstantPatternGeneric,
-  ParserErrorCode.invalidConstantPatternNegation,
-  ParserErrorCode.invalidConstantPatternUnary,
-  ParserErrorCode.invalidConstructorName,
-  ParserErrorCode.invalidHexEscape,
-  ParserErrorCode.invalidInitializer,
-  ParserErrorCode.invalidInsideUnaryPattern,
-  ParserErrorCode.invalidOperator,
-  ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
-  ParserErrorCode.invalidSuperInInitializer,
-  ParserErrorCode.invalidThisInInitializer,
-  ParserErrorCode.invalidUnicodeEscapeStarted,
-  ParserErrorCode.invalidUnicodeEscapeUBracket,
-  ParserErrorCode.invalidUnicodeEscapeUNoBracket,
-  ParserErrorCode.invalidUnicodeEscapeUStarted,
-  ParserErrorCode.invalidUseOfCovariantInExtension,
-  ParserErrorCode.latePatternVariableDeclaration,
-  ParserErrorCode.libraryDirectiveNotFirst,
-  ParserErrorCode.literalWithClass,
-  ParserErrorCode.literalWithClassAndNew,
-  ParserErrorCode.literalWithNew,
-  ParserErrorCode.memberWithClassName,
-  ParserErrorCode.missingAssignableSelector,
-  ParserErrorCode.missingAssignmentInInitializer,
-  ParserErrorCode.missingCatchOrFinally,
-  ParserErrorCode.missingConstFinalVarOrType,
-  ParserErrorCode.missingExpressionInThrow,
-  ParserErrorCode.missingInitializer,
-  ParserErrorCode.missingKeywordOperator,
-  ParserErrorCode.missingPrefixInDeferredImport,
-  ParserErrorCode.missingPrimaryConstructor,
-  ParserErrorCode.missingPrimaryConstructorParameters,
-  ParserErrorCode.missingStatement,
-  ParserErrorCode.mixinDeclaresConstructor,
-  ParserErrorCode.mixinWithClause,
-  ParserErrorCode.modifierOutOfOrder,
-  ParserErrorCode.multipleClauses,
-  ParserErrorCode.multipleExtendsClauses,
-  ParserErrorCode.multipleLibraryDirectives,
-  ParserErrorCode.multipleOnClauses,
-  ParserErrorCode.multiplePartOfDirectives,
-  ParserErrorCode.multipleVarianceModifiers,
-  ParserErrorCode.multipleWithClauses,
-  ParserErrorCode.nativeClauseShouldBeAnnotation,
-  ParserErrorCode.nullAwareCascadeOutOfOrder,
-  ParserErrorCode.outOfOrderClauses,
-  ParserErrorCode.patternAssignmentDeclaresVariable,
-  ParserErrorCode.patternVariableDeclarationOutsideFunctionOrMethod,
-  ParserErrorCode.prefixAfterCombinator,
-  ParserErrorCode.recordLiteralOnePositionalNoTrailingComma,
-  ParserErrorCode.recordTypeOnePositionalNoTrailingComma,
-  ParserErrorCode.redirectingConstructorWithBody,
-  ParserErrorCode.redirectionInNonFactoryConstructor,
-  ParserErrorCode.sealedEnum,
-  ParserErrorCode.sealedMixin,
-  ParserErrorCode.sealedMixinClass,
-  ParserErrorCode.setterConstructor,
-  ParserErrorCode.stackOverflow,
-  ParserErrorCode.staticConstructor,
-  ParserErrorCode.staticOperator,
-  ParserErrorCode.switchHasCaseAfterDefaultCase,
-  ParserErrorCode.switchHasMultipleDefaultCases,
-  ParserErrorCode.topLevelOperator,
-  ParserErrorCode.typeArgumentsOnTypeVariable,
-  ParserErrorCode.typeBeforeFactory,
-  ParserErrorCode.typeParameterOnConstructor,
-  ParserErrorCode.typeParameterOnOperator,
-  ParserErrorCode.typedefInClass,
-  ParserErrorCode.unexpectedTokens,
-  ParserErrorCode.varAndType,
-  ParserErrorCode.varAsTypeName,
-  ParserErrorCode.varReturnType,
-  ParserErrorCode.variablePatternKeywordInDeclarationContext,
-  ParserErrorCode.voidWithTypeArguments,
-  ParserErrorCode.withBeforeExtends,
+  diag.abstractClassMember,
+  diag.abstractExternalField,
+  diag.abstractFinalBaseClass,
+  diag.abstractFinalInterfaceClass,
+  diag.abstractLateField,
+  diag.abstractSealedClass,
+  diag.abstractStaticField,
+  diag.annotationOnTypeArgument,
+  diag.annotationSpaceBeforeParenthesis,
+  diag.annotationWithTypeArguments,
+  diag.annotationWithTypeArgumentsUninstantiated,
+  diag.baseEnum,
+  diag.binaryOperatorWrittenOut,
+  diag.breakOutsideOfLoop,
+  diag.catchSyntax,
+  diag.catchSyntaxExtraParameters,
+  diag.classInClass,
+  diag.colonInPlaceOfIn,
+  diag.conflictingModifiers,
+  diag.constAndFinal,
+  diag.constClass,
+  diag.constFactory,
+  diag.constMethod,
+  diag.constWithoutPrimaryConstructor,
+  diag.constructorWithReturnType,
+  diag.constructorWithTypeArguments,
+  diag.continueOutsideOfLoop,
+  diag.continueWithoutLabelInCase,
+  diag.covariantAndStatic,
+  diag.covariantMember,
+  diag.defaultInSwitchExpression,
+  diag.deferredAfterPrefix,
+  diag.directiveAfterDeclaration,
+  diag.duplicateDeferred,
+  diag.duplicateLabelInSwitchStatement,
+  diag.duplicatePrefix,
+  diag.duplicatedModifier,
+  diag.emptyRecordLiteralWithComma,
+  diag.emptyRecordTypeNamedFieldsList,
+  diag.emptyRecordTypeWithComma,
+  diag.enumInClass,
+  diag.equalityCannotBeEqualityOperand,
+  diag.expectedCatchClauseBody,
+  diag.expectedClassBody,
+  diag.expectedElseOrComma,
+  diag.expectedExtensionBody,
+  diag.expectedExtensionTypeBody,
+  diag.expectedFinallyClauseBody,
+  diag.expectedIdentifierButGotKeyword,
+  diag.expectedInstead,
+  diag.expectedMixinBody,
+  diag.expectedSwitchExpressionBody,
+  diag.expectedSwitchStatementBody,
+  diag.expectedTryStatementBody,
+  diag.experimentNotEnabled,
+  diag.experimentNotEnabledOffByDefault,
+  diag.exportDirectiveAfterPartDirective,
+  diag.extensionAugmentationHasOnClause,
+  diag.extensionDeclaresAbstractMember,
+  diag.extensionDeclaresConstructor,
+  diag.extensionTypeExtends,
+  diag.extensionTypeWith,
+  diag.externalClass,
+  diag.externalConstructorWithFieldInitializers,
+  diag.externalConstructorWithInitializer,
+  diag.externalEnum,
+  diag.externalFactoryRedirection,
+  diag.externalFactoryWithBody,
+  diag.externalLateField,
+  diag.externalMethodWithBody,
+  diag.externalTypedef,
+  diag.extraneousModifier,
+  diag.extraneousModifierInExtensionType,
+  diag.extraneousModifierInPrimaryConstructor,
+  diag.factoryConstructorNewName,
+  diag.factoryTopLevelDeclaration,
+  diag.fieldInitializedOutsideDeclaringClass,
+  diag.fieldInitializerOutsideConstructor,
+  diag.finalAndCovariant,
+  diag.finalAndCovariantLateWithInitializer,
+  diag.finalAndVar,
+  diag.finalEnum,
+  diag.finalMixin,
+  diag.finalMixinClass,
+  diag.functionTypedParameterVar,
+  diag.getterConstructor,
+  diag.illegalAssignmentToNonAssignable,
+  diag.illegalPatternAssignmentVariableName,
+  diag.illegalPatternIdentifierName,
+  diag.illegalPatternVariableName,
+  diag.implementsBeforeExtends,
+  diag.implementsBeforeOn,
+  diag.implementsBeforeWith,
+  diag.importDirectiveAfterPartDirective,
+  diag.initializedVariableInForEach,
+  diag.interfaceEnum,
+  diag.interfaceMixin,
+  diag.interfaceMixinClass,
+  diag.invalidAwaitInFor,
+  diag.invalidConstantConstPrefix,
+  diag.invalidConstantPatternBinary,
+  diag.invalidConstantPatternDuplicateConst,
+  diag.invalidConstantPatternEmptyRecordLiteral,
+  diag.invalidConstantPatternGeneric,
+  diag.invalidConstantPatternNegation,
+  diag.invalidConstantPatternUnary,
+  diag.invalidConstructorName,
+  diag.invalidHexEscape,
+  diag.invalidInitializer,
+  diag.invalidInsideUnaryPattern,
+  diag.invalidOperator,
+  diag.invalidOperatorQuestionmarkPeriodForSuper,
+  diag.invalidSuperInInitializer,
+  diag.invalidThisInInitializer,
+  diag.invalidUnicodeEscapeStarted,
+  diag.invalidUnicodeEscapeUBracket,
+  diag.invalidUnicodeEscapeUNoBracket,
+  diag.invalidUnicodeEscapeUStarted,
+  diag.invalidUseOfCovariantInExtension,
+  diag.latePatternVariableDeclaration,
+  diag.libraryDirectiveNotFirst,
+  diag.literalWithClass,
+  diag.literalWithClassAndNew,
+  diag.literalWithNew,
+  diag.memberWithClassName,
+  diag.missingAssignableSelector,
+  diag.missingAssignmentInInitializer,
+  diag.missingCatchOrFinally,
+  diag.missingConstFinalVarOrType,
+  diag.missingExpressionInThrow,
+  diag.missingInitializer,
+  diag.missingKeywordOperator,
+  diag.missingPrefixInDeferredImport,
+  diag.missingPrimaryConstructor,
+  diag.missingPrimaryConstructorParameters,
+  diag.missingStatement,
+  diag.mixinDeclaresConstructor,
+  diag.mixinWithClause,
+  diag.modifierOutOfOrder,
+  diag.multipleClauses,
+  diag.multipleExtendsClauses,
+  diag.multipleLibraryDirectives,
+  diag.multipleOnClauses,
+  diag.multiplePartOfDirectives,
+  diag.multipleVarianceModifiers,
+  diag.multipleWithClauses,
+  diag.nativeClauseShouldBeAnnotation,
+  diag.newConstructorNewName,
+  diag.newConstructorQualifiedName,
+  diag.nullAwareCascadeOutOfOrder,
+  diag.outOfOrderClauses,
+  diag.patternAssignmentDeclaresVariable,
+  diag.patternVariableDeclarationOutsideFunctionOrMethod,
+  diag.prefixAfterCombinator,
+  diag.recordLiteralOnePositionalNoTrailingComma,
+  diag.recordTypeOnePositionalNoTrailingComma,
+  diag.redirectingConstructorWithBody,
+  diag.redirectionInNonFactoryConstructor,
+  diag.sealedEnum,
+  diag.sealedMixin,
+  diag.sealedMixinClass,
+  diag.setterConstructor,
+  diag.stackOverflow,
+  diag.staticConstructor,
+  diag.staticOperator,
+  diag.switchHasCaseAfterDefaultCase,
+  diag.switchHasMultipleDefaultCases,
+  diag.topLevelOperator,
+  diag.typeArgumentsOnTypeVariable,
+  diag.typeBeforeFactory,
+  diag.typeParameterOnConstructor,
+  diag.typeParameterOnOperator,
+  diag.typedefInClass,
+  diag.unexpectedTokens,
+  diag.varAndType,
+  diag.varAsTypeName,
+  diag.varReturnType,
+  diag.variablePatternKeywordInDeclarationContext,
+  diag.voidWithTypeArguments,
+  diag.withBeforeExtends,
 ];
 @AnalyzerPublicApi(message: 'exported by lib/error/error.dart')
 @Deprecated("Use 'diagnosticCodeValues' instead")
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
index 26110f7..c05c095 100644
--- a/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
@@ -10,8 +10,8 @@
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
 import 'package:yaml/yaml.dart';
 
@@ -32,7 +32,7 @@
       source: source,
       offset: duplicate.offset,
       length: duplicate.length,
-      diagnosticCode: CompileTimeErrorCode.duplicatePatternAssignmentVariable,
+      diagnosticCode: diag.duplicatePatternAssignmentVariable,
       arguments: [variable.name!],
       contextMessages: [
         DiagnosticMessageImpl(
@@ -113,7 +113,7 @@
       source: source,
       offset: duplicateNode.offset,
       length: duplicateNode.length,
-      diagnosticCode: CompileTimeErrorCode.duplicateFieldName,
+      diagnosticCode: diag.duplicateFieldName,
       arguments: [duplicateName],
       contextMessages: [
         DiagnosticMessageImpl(
@@ -143,7 +143,7 @@
       source: source,
       offset: duplicateNode.offset,
       length: duplicateNode.length,
-      diagnosticCode: CompileTimeErrorCode.duplicateFieldName,
+      diagnosticCode: diag.duplicateFieldName,
       arguments: [duplicateName],
       contextMessages: [
         DiagnosticMessageImpl(
@@ -173,7 +173,7 @@
       source: source,
       offset: duplicateTarget.offset,
       length: duplicateTarget.length,
-      diagnosticCode: CompileTimeErrorCode.duplicatePatternField,
+      diagnosticCode: diag.duplicatePatternField,
       arguments: [name],
       contextMessages: [
         DiagnosticMessageImpl(
@@ -198,7 +198,7 @@
       source: source,
       offset: duplicateElement.offset,
       length: duplicateElement.length,
-      diagnosticCode: CompileTimeErrorCode.duplicateRestElementInPattern,
+      diagnosticCode: diag.duplicateRestElementInPattern,
       contextMessages: [
         DiagnosticMessageImpl(
           filePath: source.fullName,
@@ -222,7 +222,7 @@
       source: source,
       offset: duplicateElement.offset,
       length: duplicateElement.length,
-      diagnosticCode: CompileTimeErrorCode.equalElementsInConstSet,
+      diagnosticCode: diag.equalElementsInConstSet,
       contextMessages: [
         DiagnosticMessageImpl(
           filePath: source.fullName,
@@ -246,7 +246,7 @@
       source: source,
       offset: duplicateKey.offset,
       length: duplicateKey.length,
-      diagnosticCode: CompileTimeErrorCode.equalKeysInConstMap,
+      diagnosticCode: diag.equalKeysInConstMap,
       contextMessages: [
         DiagnosticMessageImpl(
           filePath: source.fullName,
@@ -270,7 +270,7 @@
       source: source,
       offset: duplicateKey.offset,
       length: duplicateKey.length,
-      diagnosticCode: CompileTimeErrorCode.equalKeysInMapPattern,
+      diagnosticCode: diag.equalKeysInMapPattern,
       contextMessages: [
         DiagnosticMessageImpl(
           filePath: source.fullName,
@@ -294,7 +294,7 @@
       source: source,
       offset: reference.span.start.offset,
       length: reference.span.length,
-      diagnosticCode: AnalysisOptionsWarningCode.incompatibleLint,
+      diagnosticCode: diag.incompatibleLint,
       arguments: [
         reference.value as String,
         incompatibleRules.values
@@ -329,7 +329,7 @@
       source: source,
       offset: reference.span.start.offset,
       length: reference.span.length,
-      diagnosticCode: AnalysisOptionsWarningCode.incompatibleLintFiles,
+      diagnosticCode: diag.incompatibleLintFiles,
       arguments: [
         reference.value as String,
         incompatibleRules.values
@@ -367,7 +367,7 @@
       source: source,
       offset: reference.span.start.offset,
       length: reference.span.length,
-      diagnosticCode: AnalysisOptionsWarningCode.incompatibleLintIncluded,
+      diagnosticCode: diag.incompatibleLintIncluded,
       arguments: [
         reference.value as String,
         incompatibleRules.values
@@ -403,8 +403,7 @@
       source: source,
       offset: offset,
       length: length,
-      diagnosticCode:
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+      diagnosticCode: diag.invalidNullAwareOperatorAfterShortCircuit,
       arguments: arguments,
       contextMessages: [
         DiagnosticMessageImpl(
@@ -451,7 +450,7 @@
         // INVALID_IMPLEMENTATION_OVERRIDE may provide the subclass as superMember
         // if the subclass has an abstract member and the superclass has the
         // concrete).
-        if (code == CompileTimeErrorCode.invalidOverride)
+        if (code == diag.invalidOverride)
           DiagnosticMessageImpl(
             filePath: superLocation.libraryFragment!.source.fullName,
             message: "The member being overridden.",
@@ -459,7 +458,7 @@
             length: superLocation.name!.length,
             url: null,
           ),
-        if (code == CompileTimeErrorCode.invalidOverrideSetter)
+        if (code == diag.invalidOverrideSetter)
           DiagnosticMessageImpl(
             filePath: superLocation.libraryFragment!.source.fullName,
             message: "The setter being overridden.",
@@ -496,7 +495,7 @@
       source: source,
       offset: nameToken.offset,
       length: nameToken.length,
-      diagnosticCode: CompileTimeErrorCode.referencedBeforeDeclaration,
+      diagnosticCode: diag.referencedBeforeDeclaration,
       arguments: [name],
       contextMessages: contextMessages ?? const [],
     );
diff --git a/pkg/analyzer/lib/src/error/annotation_verifier.dart b/pkg/analyzer/lib/src/error/annotation_verifier.dart
index f2bb9e8..e4788bc 100644
--- a/pkg/analyzer/lib/src/error/annotation_verifier.dart
+++ b/pkg/analyzer/lib/src/error/annotation_verifier.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/utilities/extensions/ast.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
@@ -87,7 +87,7 @@
 
       _diagnosticReporter.atNode(
         errorNode ?? node.name,
-        WarningCode.invalidAwaitNotRequiredAnnotation,
+        diag.invalidAwaitNotRequiredAnnotation,
       );
     }
 
@@ -155,7 +155,7 @@
 
     _diagnosticReporter.atNode(
       node.name,
-      WarningCode.invalidDeprecatedExtendAnnotation,
+      diag.invalidDeprecatedExtendAnnotation,
     );
   }
 
@@ -183,7 +183,7 @@
 
     _diagnosticReporter.atNode(
       node.name,
-      WarningCode.invalidDeprecatedImplementAnnotation,
+      diag.invalidDeprecatedImplementAnnotation,
     );
   }
 
@@ -206,7 +206,7 @@
 
     _diagnosticReporter.atNode(
       node.name,
-      WarningCode.invalidDeprecatedInstantiateAnnotation,
+      diag.invalidDeprecatedInstantiateAnnotation,
     );
   }
 
@@ -220,7 +220,7 @@
 
     _diagnosticReporter.atNode(
       node.name,
-      WarningCode.invalidDeprecatedMixinAnnotation,
+      diag.invalidDeprecatedMixinAnnotation,
     );
   }
 
@@ -253,7 +253,7 @@
 
     _diagnosticReporter.atNode(
       node.name,
-      WarningCode.invalidDeprecatedOptionalAnnotation,
+      diag.invalidDeprecatedOptionalAnnotation,
     );
   }
 
@@ -282,7 +282,7 @@
 
     _diagnosticReporter.atNode(
       node.name,
-      WarningCode.invalidDeprecatedSubclassAnnotation,
+      diag.invalidDeprecatedSubclassAnnotation,
     );
   }
 
@@ -298,7 +298,7 @@
     if (returnType is VoidType) {
       _diagnosticReporter.atToken(
         parent.name,
-        WarningCode.invalidFactoryMethodDecl,
+        diag.invalidFactoryMethodDecl,
         arguments: [parent.name.lexeme],
       );
       return;
@@ -328,7 +328,7 @@
 
     _diagnosticReporter.atToken(
       parent.name,
-      WarningCode.invalidFactoryMethodImpl,
+      diag.invalidFactoryMethodImpl,
       arguments: [parent.name.lexeme],
     );
   }
@@ -346,41 +346,26 @@
       for (var variable in parent.variables.variables) {
         var element = variable.declaredTopLevelVariableElement;
         if (element.isPrivate) {
-          _diagnosticReporter.atNode(
-            variable,
-            WarningCode.invalidInternalAnnotation,
-          );
+          _diagnosticReporter.atNode(variable, diag.invalidInternalAnnotation);
         }
       }
     } else if (parent is FieldDeclaration) {
       for (var variable in parent.fields.variables) {
         var element = variable.declaredFieldElement;
         if (element.isPrivate) {
-          _diagnosticReporter.atNode(
-            variable,
-            WarningCode.invalidInternalAnnotation,
-          );
+          _diagnosticReporter.atNode(variable, diag.invalidInternalAnnotation);
         }
       }
     } else if (parent is ConstructorDeclaration) {
       var element = parent.declaredFragment!.element;
       var class_ = element.enclosingElement;
       if (class_.isPrivate || parentElementIsPrivate) {
-        _diagnosticReporter.atNode(
-          node.name,
-          WarningCode.invalidInternalAnnotation,
-        );
+        _diagnosticReporter.atNode(node.name, diag.invalidInternalAnnotation);
       }
     } else if (parentElementIsPrivate) {
-      _diagnosticReporter.atNode(
-        node.name,
-        WarningCode.invalidInternalAnnotation,
-      );
+      _diagnosticReporter.atNode(node.name, diag.invalidInternalAnnotation);
     } else if (_inPackagePublicApi) {
-      _diagnosticReporter.atNode(
-        node.name,
-        WarningCode.invalidInternalAnnotation,
-      );
+      _diagnosticReporter.atNode(node.name, diag.invalidInternalAnnotation);
     }
   }
 
@@ -403,7 +388,7 @@
         var validKinds = kindNames.commaSeparatedWithOr;
         _diagnosticReporter.atNode(
           node.name,
-          WarningCode.invalidAnnotationTarget,
+          diag.invalidAnnotationTarget,
           arguments: [name!, validKinds],
         );
         return;
@@ -416,10 +401,7 @@
   void _checkLiteral(Annotation node) {
     var parent = node.parent;
     if (parent is! ConstructorDeclaration || parent.constKeyword == null) {
-      _diagnosticReporter.atNode(
-        node.name,
-        WarningCode.invalidLiteralAnnotation,
-      );
+      _diagnosticReporter.atNode(node.name, diag.invalidLiteralAnnotation);
     }
   }
 
@@ -429,26 +411,17 @@
     var parent = node.parent;
     if (parent is FieldDeclaration) {
       if (parent.isStatic) {
-        _diagnosticReporter.atNode(
-          node.name,
-          WarningCode.invalidNonVirtualAnnotation,
-        );
+        _diagnosticReporter.atNode(node.name, diag.invalidNonVirtualAnnotation);
       }
     } else if (parent is MethodDeclaration) {
-      if (parent.parent is ExtensionDeclaration ||
-          parent.parent is ExtensionTypeDeclaration ||
+      if (parent.parent?.parent is ExtensionDeclaration ||
+          parent.parent?.parent is ExtensionTypeDeclaration ||
           parent.isStatic ||
           parent.isAbstract) {
-        _diagnosticReporter.atNode(
-          node.name,
-          WarningCode.invalidNonVirtualAnnotation,
-        );
+        _diagnosticReporter.atNode(node.name, diag.invalidNonVirtualAnnotation);
       }
     } else {
-      _diagnosticReporter.atNode(
-        node.name,
-        WarningCode.invalidNonVirtualAnnotation,
-      );
+      _diagnosticReporter.atNode(node.name, diag.invalidNonVirtualAnnotation);
     }
   }
 
@@ -456,11 +429,14 @@
   /// `@redeclare` annotation.
   void _checkRedeclare(Annotation node) {
     var parent = node.parent;
-    if (parent.parent is! ExtensionTypeDeclaration ||
+    var parent2 = parent.parent;
+    var parent3 = parent2?.parent;
+    if (parent2 is! BlockClassBody ||
+        parent3 is! ExtensionTypeDeclaration ||
         parent is MethodDeclaration && parent.isStatic) {
       _diagnosticReporter.atNode(
         node.name,
-        WarningCode.invalidAnnotationTarget,
+        diag.invalidAnnotationTarget,
         arguments: [node.name.name, 'instance members of extension types'],
       );
     }
@@ -494,25 +470,16 @@
     if (classElement.isFinal ||
         classElement.isMixinClass ||
         classElement.isSealed) {
-      _diagnosticReporter.atNode(
-        node.name,
-        WarningCode.invalidReopenAnnotation,
-      );
+      _diagnosticReporter.atNode(node.name, diag.invalidReopenAnnotation);
       return;
     }
     if (classElement.library != superElement.library) {
-      _diagnosticReporter.atNode(
-        node.name,
-        WarningCode.invalidReopenAnnotation,
-      );
+      _diagnosticReporter.atNode(node.name, diag.invalidReopenAnnotation);
       return;
     }
     if (classElement.isBase) {
       if (!superElement.isFinal && !superElement.isInterface) {
-        _diagnosticReporter.atNode(
-          node.name,
-          WarningCode.invalidReopenAnnotation,
-        );
+        _diagnosticReporter.atNode(node.name, diag.invalidReopenAnnotation);
         return;
       }
     } else if (!classElement.isBase &&
@@ -520,10 +487,7 @@
         !classElement.isInterface &&
         !classElement.isSealed) {
       if (!superElement.isInterface) {
-        _diagnosticReporter.atNode(
-          node.name,
-          WarningCode.invalidReopenAnnotation,
-        );
+        _diagnosticReporter.atNode(node.name, diag.invalidReopenAnnotation);
         return;
       }
     }
@@ -551,7 +515,7 @@
             : undefinedParameter.correspondingParameter?.name;
         _diagnosticReporter.atNode(
           undefinedParameter,
-          WarningCode.undefinedReferencedParameter,
+          diag.undefinedReferencedParameter,
           arguments: [parameterName ?? undefinedParameter, name],
         );
       }
@@ -569,7 +533,7 @@
         // assume that `declaredElement.name` is non-`null`.
         _diagnosticReporter.atNode(
           node.name,
-          WarningCode.invalidVisibilityAnnotation,
+          diag.invalidVisibilityAnnotation,
           arguments: [name, node.name.name],
         );
       }
@@ -577,7 +541,7 @@
       void reportInvalidVisibleForOverriding() {
         _diagnosticReporter.atNode(
           node.name,
-          WarningCode.invalidVisibleForOverridingAnnotation,
+          diag.invalidVisibleForOverridingAnnotation,
         );
       }
 
@@ -633,7 +597,7 @@
     void reportError() {
       _diagnosticReporter.atNode(
         node.name,
-        WarningCode.invalidVisibleOutsideTemplateAnnotation,
+        diag.invalidVisibleOutsideTemplateAnnotation,
       );
     }
 
@@ -653,7 +617,7 @@
     }
 
     InterfaceElement? declaredElement;
-    switch (containedDeclaration.parent) {
+    switch (containedDeclaration.parent?.parent) {
       case ClassDeclaration classDeclaration:
         declaredElement = classDeclaration.declaredFragment?.element;
       case EnumDeclaration enumDeclaration:
@@ -746,9 +710,11 @@
       if ((target is FieldDeclaration && !target.isStatic) ||
           target is MethodDeclaration && !target.isStatic) {
         var parent = target.parent;
-        if (parent is ClassDeclaration ||
-            parent is ExtensionTypeDeclaration ||
-            parent is MixinDeclaration) {
+        var parent2 = parent?.parent;
+        if (parent is BlockClassBody &&
+            (parent2 is ClassDeclaration ||
+                parent2 is ExtensionTypeDeclaration ||
+                parent2 is MixinDeclaration)) {
           // Members of `EnumDeclaration`s and `ExtensionDeclaration`s are not
           // overridable.
           return true;
@@ -790,12 +756,6 @@
         TargetKind.topLevelVariable,
       ),
       TypeParameter() => kinds.contains(TargetKind.typeParameter),
-      // extension type Foo (int bar) {}
-      //                     ^^^^^^^
-      // This is not a parameter in the *traditional sense, but assume you want
-      // to apply an annotation such as @mustBeConst to it; it makes sense that
-      // this is a valid target.
-      RepresentationDeclaration() => kinds.contains(TargetKind.parameter),
       _ => false,
     };
   }
diff --git a/pkg/analyzer/lib/src/error/assignment_verifier.dart b/pkg/analyzer/lib/src/error/assignment_verifier.dart
index 635e53e..500e501 100644
--- a/pkg/analyzer/lib/src/error/assignment_verifier.dart
+++ b/pkg/analyzer/lib/src/error/assignment_verifier.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Helper for verifying resolution of assignments, in form of explicit
 /// an [AssignmentExpression], or a [PrefixExpression] or [PostfixExpression]
@@ -25,8 +25,8 @@
   /// a good error about this.
   ///
   /// When the [receiverType] is not `null`, we report
-  /// [CompileTimeErrorCode.undefinedSetter] instead of a more generic
-  /// [CompileTimeErrorCode.undefinedIdentifier].
+  /// [diag.undefinedSetter] instead of a more generic
+  /// [diag.undefinedIdentifier].
   void verify({
     required SimpleIdentifier node,
     required Element? requested,
@@ -36,10 +36,7 @@
     if (requested != null) {
       if (requested is VariableElement) {
         if (requested.isConst) {
-          _diagnosticReporter.atNode(
-            node,
-            CompileTimeErrorCode.assignmentToConst,
-          );
+          _diagnosticReporter.atNode(node, diag.assignmentToConst);
         }
       }
       return;
@@ -49,20 +46,17 @@
         recovery is InterfaceElement ||
         recovery is TypeAliasElement ||
         recovery is TypeParameterElement) {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.assignmentToType);
+      _diagnosticReporter.atNode(node, diag.assignmentToType);
     } else if (recovery is LocalFunctionElement ||
         recovery is TopLevelFunctionElement) {
-      _diagnosticReporter.atNode(
-        node,
-        CompileTimeErrorCode.assignmentToFunction,
-      );
+      _diagnosticReporter.atNode(node, diag.assignmentToFunction);
     } else if (recovery is MethodElement) {
-      _diagnosticReporter.atNode(node, CompileTimeErrorCode.assignmentToMethod);
+      _diagnosticReporter.atNode(node, diag.assignmentToMethod);
     } else if (recovery is PrefixElement) {
       if (recovery.name case var prefixName?) {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.prefixIdentifierNotFollowedByDot,
+          diag.prefixIdentifierNotFollowedByDot,
           arguments: [prefixName],
         );
       }
@@ -74,20 +68,17 @@
       }
 
       if (variable.isConst) {
+        _diagnosticReporter.atNode(node, diag.assignmentToConst);
+      } else if (variable is FieldElement && variable.isOriginGetterSetter) {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.assignmentToConst,
-        );
-      } else if (variable is FieldElement && variable.isSynthetic) {
-        _diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.assignmentToFinalNoSetter,
+          diag.assignmentToFinalNoSetter,
           arguments: [variableName, variable.enclosingElement.displayName],
         );
       } else {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.assignmentToFinal,
+          diag.assignmentToFinal,
           arguments: [variableName],
         );
       }
@@ -100,13 +91,13 @@
       if (receiverType != null) {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.undefinedSetter,
+          diag.undefinedSetter,
           arguments: [node.name, receiverType],
         );
       } else {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           arguments: [node.name],
         );
       }
diff --git a/pkg/analyzer/lib/src/error/base_or_final_type_verifier.dart b/pkg/analyzer/lib/src/error/base_or_final_type_verifier.dart
index fccbaa8..ea4d13f 100644
--- a/pkg/analyzer/lib/src/error/base_or_final_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/base_or_final_type_verifier.dart
@@ -8,8 +8,8 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/listener.dart';
 
 /// Helper for verifying that subelements of a base or final element must be
@@ -28,9 +28,9 @@
   /// final, or sealed and that base elements are not implemented outside of its
   /// library. Otherwise, an error is reported on that element.
   ///
-  /// See [CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed],
-  /// [CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed],
-  /// [CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary].
+  /// See [diag.subtypeOfBaseIsNotBaseFinalOrSealed],
+  /// [diag.subtypeOfFinalIsNotBaseFinalOrSealed],
+  /// [diag.baseClassImplementedOutsideOfLibrary].
   void checkElement(
     InterfaceElementImpl element,
     ImplementsClause? implementsClause,
@@ -241,14 +241,12 @@
         baseOrFinalSuperElement.library != element.library) {
       if (baseOrFinalSuperElement.isBase) {
         var error = baseOrFinalSuperElement is MixinElement
-            ? CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary
-                  .withArguments(
-                    implementedMixinName: baseOrFinalSuperElement.displayName,
-                  )
-            : CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary
-                  .withArguments(
-                    implementedClassName: baseOrFinalSuperElement.displayName,
-                  );
+            ? diag.baseMixinImplementedOutsideOfLibrary.withArguments(
+                implementedMixinName: baseOrFinalSuperElement.displayName,
+              )
+            : diag.baseClassImplementedOutsideOfLibrary.withArguments(
+                implementedClassName: baseOrFinalSuperElement.displayName,
+              );
         _diagnosticReporter.report(
           error.withContextMessages(contextMessages).at(implementsNamedType),
         );
@@ -279,8 +277,8 @@
           }
         }
         var errorCode = element is MixinElement
-            ? CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase
-            : CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed;
+            ? diag.mixinSubtypeOfFinalIsNotBase
+            : diag.subtypeOfFinalIsNotBaseFinalOrSealed;
         _diagnosticReporter.atElement2(
           element,
           errorCode,
@@ -290,8 +288,8 @@
         return true;
       } else if (baseOrFinalSuperElement.isBase) {
         var errorCode = element is MixinElement
-            ? CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase
-            : CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed;
+            ? diag.mixinSubtypeOfBaseIsNotBase
+            : diag.subtypeOfBaseIsNotBaseFinalOrSealed;
         _diagnosticReporter.atElement2(
           element,
           errorCode,
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 7a758c6..175af72 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -2,9 +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.
 
-/// @docImport 'package:analyzer/src/dart/error/hint_codes.dart';
-library;
-
 import 'dart:collection';
 
 import 'package:analyzer/dart/analysis/analysis_options.dart';
@@ -26,8 +23,8 @@
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/annotation_verifier.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/deprecated_functionality_verifier.dart';
 import 'package:analyzer/src/error/deprecated_member_use_verifier.dart';
 import 'package:analyzer/src/error/doc_comment_verifier.dart';
@@ -173,13 +170,13 @@
   @override
   void visitAsExpression(AsExpression node) {
     if (_isUnnecessaryCast(node, _typeSystem)) {
-      _diagnosticReporter.atNode(node, WarningCode.unnecessaryCast);
+      _diagnosticReporter.atNode(node, diag.unnecessaryCast);
     }
     var type = node.type.type;
     if (type != null &&
         _typeSystem.isNonNullable(type) &&
         node.expression.typeOrThrow.isDartCoreNull) {
-      _diagnosticReporter.atNode(node, WarningCode.castFromNullAlwaysFails);
+      _diagnosticReporter.atNode(node, diag.castFromNullAlwaysFails);
     }
     super.visitAsExpression(node);
   }
@@ -211,7 +208,7 @@
         _typeSystem.isNonNullable(type) &&
         matchedValueType != null &&
         matchedValueType.isDartCoreNull) {
-      _diagnosticReporter.atNode(node, WarningCode.castFromNullAlwaysFails);
+      _diagnosticReporter.atNode(node, diag.castFromNullAlwaysFails);
     }
     super.visitCastPattern(node);
   }
@@ -239,7 +236,7 @@
     }
 
     try {
-      _checkForImmutable(node);
+      _checkForImmutable(node, nameToken: node.namePart.typeName);
       _checkForInvalidSealedSuperclass(node);
       super.visitClassDeclaration(node);
     } finally {
@@ -254,7 +251,7 @@
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    _checkForImmutable(node);
+    _checkForImmutable(node, nameToken: node.name);
     _checkForInvalidSealedSuperclass(node);
     _deprecatedFunctionalityVerifier.classTypeAlias(node);
     for (var v in _elementUsageFrontierDetectors) {
@@ -288,7 +285,7 @@
         _currentLibrary.featureSet.isEnabled(Feature.constructor_tearoffs)) {
       _diagnosticReporter.atToken(
         newKeyword,
-        WarningCode.deprecatedNewInCommentReference,
+        diag.deprecatedNewInCommentReference,
       );
     }
     super.visitCommentReference(node);
@@ -297,10 +294,7 @@
   @override
   void visitConstantPattern(ConstantPattern node) {
     if (node.expression.isDoubleNan) {
-      _diagnosticReporter.atNode(
-        node,
-        WarningCode.unnecessaryNanComparisonFalse,
-      );
+      _diagnosticReporter.atNode(node, diag.unnecessaryNanComparisonFalse);
     }
     super.visitConstantPattern(node);
   }
@@ -351,12 +345,12 @@
       if (_currentLibrary.languageVersion.effective.major < 3) {
         _diagnosticReporter.atToken(
           separator,
-          HintCode.deprecatedColonForDefaultValue,
+          diag.deprecatedColonForDefaultValue,
         );
       } else {
         _diagnosticReporter.atToken(
           separator,
-          CompileTimeErrorCode.obsoleteColonForDefaultValue,
+          diag.obsoleteColonForDefaultValue,
         );
       }
     }
@@ -505,7 +499,7 @@
           // `overriddenElement.enclosingElement3.name` is non-`null`.
           _diagnosticReporter.atToken(
             field.name,
-            WarningCode.invalidOverrideOfNonVirtualMember,
+            diag.invalidOverrideOfNonVirtualMember,
             arguments: [
               field.name.lexeme,
               overriddenElement.enclosingElement!.displayName,
@@ -730,7 +724,7 @@
         // `overriddenElement.enclosingElement3.name` is non-`null`.
         _diagnosticReporter.atToken(
           node.name,
-          WarningCode.invalidOverrideOfNonVirtualMember,
+          diag.invalidOverrideOfNonVirtualMember,
           arguments: [
             node.name.lexeme,
             overriddenElement.enclosingElement!.displayName,
@@ -771,7 +765,7 @@
     }
 
     try {
-      _checkForImmutable(node);
+      _checkForImmutable(node, nameToken: node.name);
       _checkForInvalidSealedSuperclass(node);
       super.visitMixinDeclaration(node);
     } finally {
@@ -799,7 +793,7 @@
           type.alias == null) {
         _diagnosticReporter.atToken(
           question,
-          WarningCode.unnecessaryQuestionMark,
+          diag.unnecessaryQuestionMark,
           arguments: [node.qualifiedName],
         );
       }
@@ -823,7 +817,7 @@
     }
     if (node.operator.type == TokenType.BANG &&
         node.operand.typeOrThrow.isDartCoreNull) {
-      _diagnosticReporter.atNode(node, WarningCode.nullCheckAlwaysFails);
+      _diagnosticReporter.atNode(node, diag.nullCheckAlwaysFails);
     }
     super.visitPostfixExpression(node);
   }
@@ -932,10 +926,10 @@
   /// [IsExpression].
   ///
   /// Returns `true` if a warning code is generated on [node].
-  /// See [WarningCode.typeCheckIsNotNull],
-  /// [WarningCode.typeCheckIsNull],
-  /// [WarningCode.unnecessaryTypeCheckTrue], and
-  /// [WarningCode.unnecessaryTypeCheckFalse].
+  /// See [diag.typeCheckIsNotNull],
+  /// [diag.typeCheckIsNull],
+  /// [diag.unnecessaryTypeCheckTrue], and
+  /// [diag.unnecessaryTypeCheckFalse].
   bool _checkAllTypeChecks(IsExpressionImpl node) {
     var leftNode = node.expression;
     var leftType = leftNode.typeOrThrow;
@@ -947,8 +941,8 @@
       _diagnosticReporter.atNode(
         node,
         node.notOperator == null
-            ? WarningCode.unnecessaryTypeCheckTrue
-            : WarningCode.unnecessaryTypeCheckFalse,
+            ? diag.unnecessaryTypeCheckTrue
+            : diag.unnecessaryTypeCheckFalse,
       );
     }
 
@@ -976,8 +970,8 @@
         _diagnosticReporter.atNode(
           node,
           node.notOperator == null
-              ? WarningCode.typeCheckIsNull
-              : WarningCode.typeCheckIsNotNull,
+              ? diag.typeCheckIsNull
+              : diag.typeCheckIsNotNull,
         );
       }
       return true;
@@ -993,7 +987,7 @@
 
   void _checkFinalParameter(FormalParameter node, Token? keyword) {
     if (node.isFinal) {
-      _diagnosticReporter.atToken(keyword!, WarningCode.unnecessaryFinal);
+      _diagnosticReporter.atToken(keyword!, diag.unnecessaryFinal);
     }
   }
 
@@ -1005,7 +999,7 @@
       // non-`null`.
       _diagnosticReporter.atNode(
         entry.key,
-        WarningCode.assignmentOfDoNotStore,
+        diag.assignmentOfDoNotStore,
         arguments: [entry.value.name!],
       );
     }
@@ -1029,8 +1023,8 @@
         var value = constEvaluation.value;
         if (value != null && !alreadySeen.add(value)) {
           var errorCode = node.isSet
-              ? WarningCode.equalElementsInSet
-              : WarningCode.equalKeysInMap;
+              ? diag.equalElementsInSet
+              : diag.equalKeysInMap;
           _diagnosticReporter.atNode(expression, errorCode);
         }
       }
@@ -1043,7 +1037,10 @@
   /// marked with [immutable], this function searches the fields of [node] and
   /// its superclasses, reporting a warning if any non-final instance fields are
   /// found.
-  void _checkForImmutable(NamedCompilationUnitMember node) {
+  void _checkForImmutable(
+    CompilationUnitMember node, {
+    required Token nameToken,
+  }) {
     /// Return `true` if the given class [element] or any superclass of it is
     /// annotated with the `@immutable` annotation.
     bool isOrInheritsImmutable(
@@ -1073,10 +1070,12 @@
 
     Iterable<String> nonFinalInstanceFields(InterfaceElement element) {
       return element.fields
-          .where(
-            (FieldElement field) =>
-                !field.isSynthetic && !field.isFinal && !field.isStatic,
-          )
+          .where((field) {
+            if (field.isStatic || field.isFinal) {
+              return false;
+            }
+            return field.isOriginDeclaration;
+          })
           .map((FieldElement field) => '${element.name}.${field.name}');
     }
 
@@ -1113,8 +1112,8 @@
           );
       if (nonFinalFields.isNotEmpty) {
         _diagnosticReporter.atToken(
-          node.name,
-          WarningCode.mustBeImmutable,
+          nameToken,
+          diag.mustBeImmutable,
           arguments: [nonFinalFields.join(', ')],
         );
       }
@@ -1135,7 +1134,7 @@
     if (libraryElement.metadata.hasInternal) {
       _diagnosticReporter.atNode(
         node,
-        WarningCode.invalidExportOfInternalElement,
+        diag.invalidExportOfInternalElement,
         arguments: [libraryElement.displayName],
       );
     }
@@ -1146,7 +1145,7 @@
       if (element.metadata.hasInternal) {
         _diagnosticReporter.atNode(
           node,
-          WarningCode.invalidExportOfInternalElement,
+          diag.invalidExportOfInternalElement,
           arguments: [element.displayName],
         );
         return;
@@ -1162,7 +1161,7 @@
           if (aliasElement != null && aliasElement.metadata.hasInternal) {
             _diagnosticReporter.atNode(
               node,
-              WarningCode.invalidExportOfInternalElementIndirectly,
+              diag.invalidExportOfInternalElementIndirectly,
               arguments: [aliasElement.name!, element.displayName],
             );
           }
@@ -1171,7 +1170,7 @@
     });
   }
 
-  void _checkForInvalidSealedSuperclass(NamedCompilationUnitMember node) {
+  void _checkForInvalidSealedSuperclass(CompilationUnitMember node) {
     bool currentPackageContains(Element element) {
       return _isLibraryInWorkspacePackage(element.library);
     }
@@ -1193,14 +1192,14 @@
             // requiring specific messaging.
             _diagnosticReporter.atNode(
               node,
-              WarningCode.mixinOnSealedClass,
+              diag.mixinOnSealedClass,
               arguments: [superclass.name.toString()],
             );
           } else {
             // This is a regular violation of the sealed class contract.
             _diagnosticReporter.atNode(
               node,
-              WarningCode.subtypeOfSealedClass,
+              diag.subtypeOfSealedClass,
               arguments: [superclass.name.toString()],
             );
           }
@@ -1232,18 +1231,18 @@
     }
 
     if (node.operator.type == TokenType.BANG_EQ) {
-      checkLeftRight(WarningCode.unnecessaryNanComparisonTrue);
+      checkLeftRight(diag.unnecessaryNanComparisonTrue);
     } else if (node.operator.type == TokenType.EQ_EQ) {
-      checkLeftRight(WarningCode.unnecessaryNanComparisonFalse);
+      checkLeftRight(diag.unnecessaryNanComparisonFalse);
     }
   }
 
   void _checkForInvariantNullComparison(BinaryExpression node) {
     DiagnosticCode errorCode;
     if (node.operator.type == TokenType.BANG_EQ) {
-      errorCode = WarningCode.unnecessaryNullComparisonNeverNullTrue;
+      errorCode = diag.unnecessaryNullComparisonNeverNullTrue;
     } else if (node.operator.type == TokenType.EQ_EQ) {
-      errorCode = WarningCode.unnecessaryNullComparisonNeverNullFalse;
+      errorCode = diag.unnecessaryNullComparisonNeverNullFalse;
     } else {
       return;
     }
@@ -1291,8 +1290,8 @@
         fullConstructorName = '$fullConstructorName.${constructorName.name}';
       }
       var warning = node.keyword?.keyword == Keyword.NEW
-          ? WarningCode.nonConstCallToLiteralConstructorUsingNew
-          : WarningCode.nonConstCallToLiteralConstructor;
+          ? diag.nonConstCallToLiteralConstructorUsingNew
+          : diag.nonConstCallToLiteralConstructor;
       _diagnosticReporter.atNode(
         node,
         warning,
@@ -1304,7 +1303,7 @@
   /// Report a warning if the dot shorthand constructor is marked with [literal]
   /// and is not const.
   ///
-  /// See [WarningCode.nonConstCallToLiteralConstructor].
+  /// See [diag.nonConstCallToLiteralConstructor].
   void _checkForLiteralConstructorUseInDotShorthand(
     DotShorthandConstructorInvocation node,
   ) {
@@ -1313,7 +1312,7 @@
     if (!node.isConst && constructor.metadata.hasLiteral && node.canBeConst) {
       _diagnosticReporter.atNode(
         node,
-        WarningCode.nonConstCallToLiteralConstructor,
+        diag.nonConstCallToLiteralConstructor,
         arguments: [constructor.displayName],
       );
     }
@@ -1326,7 +1325,7 @@
   /// @param importElement the [LibraryImport] retrieved from the node
   /// @return `true` if and only if an error code is generated on the passed
   ///         node
-  /// See [HintCode.importDeferredLibraryWithLoadFunction].
+  /// See [diag.importDeferredLibraryWithLoadFunction].
   bool _checkForLoadLibraryFunction(
     ImportDirective node,
     LibraryImport importElement,
@@ -1348,7 +1347,7 @@
     if (loadLibraryElement != null) {
       _diagnosticReporter.atNode(
         node,
-        HintCode.importDeferredLibraryWithLoadFunction,
+        diag.importDeferredLibraryWithLoadFunction,
       );
       return true;
     }
@@ -1380,10 +1379,7 @@
     }
 
     if (_typeSystem.isNullable(parameterElement.type)) {
-      _diagnosticReporter.atToken(
-        node.name,
-        WarningCode.nonNullableEqualsParameter,
-      );
+      _diagnosticReporter.atToken(node.name, diag.nonNullableEqualsParameter);
     }
   }
 
@@ -1399,10 +1395,7 @@
     }
 
     if (_typeSystem.isPotentiallyNullable(typeObj)) {
-      _diagnosticReporter.atNode(
-        typeNode,
-        WarningCode.nullableTypeInCatchClause,
-      );
+      _diagnosticReporter.atNode(typeNode, diag.nullableTypeInCatchClause);
     }
   }
 
@@ -1426,7 +1419,7 @@
         // non-`null`.
         _diagnosticReporter.atNode(
           entry.key,
-          WarningCode.returnOfDoNotStore,
+          diag.returnOfDoNotStore,
           arguments: [
             entry.value.name!,
             parent.declaredFragment!.element.displayName,
@@ -1463,10 +1456,7 @@
     FunctionBody body = node.body;
     if (body is ExpressionFunctionBody) {
       if (isNonObjectNoSuchMethodInvocation(body.expression)) {
-        _diagnosticReporter.atToken(
-          node.name,
-          WarningCode.unnecessaryNoSuchMethod,
-        );
+        _diagnosticReporter.atToken(node.name, diag.unnecessaryNoSuchMethod);
         return true;
       }
     } else if (body is BlockFunctionBody) {
@@ -1475,10 +1465,7 @@
         Statement returnStatement = statements.first;
         if (returnStatement is ReturnStatement &&
             isNonObjectNoSuchMethodInvocation(returnStatement.expression)) {
-          _diagnosticReporter.atToken(
-            node.name,
-            WarningCode.unnecessaryNoSuchMethod,
-          );
+          _diagnosticReporter.atToken(node.name, diag.unnecessaryNoSuchMethod);
           return true;
         }
       }
@@ -1520,10 +1507,7 @@
       if (isReturnVoid) {
         var expression = body.expression;
         if (expression is SetOrMapLiteralImpl && expression.isSet) {
-          _diagnosticReporter.atNode(
-            expression,
-            WarningCode.unnecessarySetLiteral,
-          );
+          _diagnosticReporter.atNode(expression, diag.unnecessarySetLiteral);
         }
       }
     }
@@ -1580,7 +1564,7 @@
       var element = parameter.declaredFragment!.element;
       _diagnosticReporter.atNode(
         parameter,
-        WarningCode.inferenceFailureOnUntypedParameter,
+        diag.inferenceFailureOnUntypedParameter,
         arguments: [element.displayName],
       );
     }
@@ -1600,19 +1584,19 @@
       case MethodDeclaration():
         _diagnosticReporter.atToken(
           reportNode.name,
-          WarningCode.inferenceFailureOnFunctionReturnType,
+          diag.inferenceFailureOnFunctionReturnType,
           arguments: [displayName],
         );
       case FunctionDeclaration():
         _diagnosticReporter.atToken(
           reportNode.name,
-          WarningCode.inferenceFailureOnFunctionReturnType,
+          diag.inferenceFailureOnFunctionReturnType,
           arguments: [displayName],
         );
       case _:
         _diagnosticReporter.atNode(
           reportNode,
-          WarningCode.inferenceFailureOnFunctionReturnType,
+          diag.inferenceFailureOnFunctionReturnType,
           arguments: [displayName],
         );
     }
@@ -1669,7 +1653,7 @@
         _getSubExpressionsMarkedDoNotStore(body.expression, addTo: expressions);
       }
     }
-    if (element is PropertyAccessorElement && element.isSynthetic) {
+    if (element is PropertyAccessorElement && element.isOriginVariable) {
       element = element.variable;
     }
 
@@ -1690,7 +1674,7 @@
   }
 
   static bool _hasNonVirtualAnnotation(ExecutableElement element) {
-    if (element is PropertyAccessorElement && element.isSynthetic) {
+    if (element is PropertyAccessorElement && element.isOriginVariable) {
       if (element.variable.metadata.hasNonVirtual) {
         return true;
       }
@@ -1698,11 +1682,11 @@
     return element.metadata.hasNonVirtual;
   }
 
-  /// Checks for the passed as expression for the [WarningCode.unnecessaryCast]
+  /// Checks for the passed as expression for the [diag.unnecessaryCast]
   /// hint code.
   ///
   /// Returns `true` if and only if an unnecessary cast hint should be generated
-  /// on [node].  See [WarningCode.unnecessaryCast].
+  /// on [node].  See [diag.unnecessaryCast].
   static bool _isUnnecessaryCast(AsExpression node, TypeSystemImpl typeSystem) {
     var leftType = node.expression.typeOrThrow;
     var rightType = node.type.typeOrThrow;
@@ -1829,7 +1813,7 @@
 
       _errorReporter.atToken(
         operator,
-        WarningCode.invalidUseOfVisibleForOverridingMember,
+        diag.invalidUseOfVisibleForOverridingMember,
         arguments: [operator.type.lexeme],
       );
     }
@@ -1846,7 +1830,7 @@
       // safely assume `node.uri.stringValue` is non-`null`.
       _errorReporter.atNode(
         node,
-        WarningCode.invalidUseOfInternalMember,
+        diag.invalidUseOfInternalMember,
         arguments: [node.uri.stringValue!],
       );
     }
@@ -1899,7 +1883,7 @@
 
       _errorReporter.atEntity(
         errorEntity,
-        WarningCode.invalidUseOfInternalMember,
+        diag.invalidUseOfInternalMember,
         arguments: [element.displayName],
       );
     }
@@ -1918,7 +1902,7 @@
         !_isLibraryInWorkspacePackage(element.library)) {
       _errorReporter.atNode(
         node,
-        WarningCode.invalidUseOfInternalMember,
+        diag.invalidUseOfInternalMember,
         arguments: [element.name!],
       );
     }
@@ -1953,7 +1937,7 @@
     _errorReporter.atOffset(
       offset: errorEntity.offset,
       length: errorEntity.length,
-      diagnosticCode: WarningCode.invalidUseOfDoNotSubmitMember,
+      diagnosticCode: diag.invalidUseOfDoNotSubmitMember,
       arguments: [name],
     );
   }
@@ -1998,14 +1982,14 @@
           _errorReporter.atOffset(
             offset: errorEntity.offset,
             length: errorEntity.length,
-            diagnosticCode: WarningCode.invalidUseOfDoNotSubmitMember,
+            diagnosticCode: diag.invalidUseOfDoNotSubmitMember,
             arguments: [name],
           );
         } else {
           // For positional arguments.
           _errorReporter.atNode(
             argument,
-            WarningCode.invalidUseOfDoNotSubmitMember,
+            diag.invalidUseOfDoNotSubmitMember,
             arguments: [element.displayName],
           );
         }
@@ -2034,7 +2018,7 @@
 
       _errorReporter.atEntity(
         node,
-        WarningCode.invalidUseOfInternalMember,
+        diag.invalidUseOfInternalMember,
         arguments: [name],
       );
     }
@@ -2091,7 +2075,7 @@
     if (hasProtected) {
       _errorReporter.atEntity(
         errorEntity,
-        WarningCode.invalidUseOfProtectedMember,
+        diag.invalidUseOfProtectedMember,
         arguments: [name, definingClass.displayName],
       );
     }
@@ -2099,7 +2083,7 @@
     if (isVisibleForTemplateApplied) {
       _errorReporter.atEntity(
         errorEntity,
-        WarningCode.invalidUseOfVisibleForTemplateMember,
+        diag.invalidUseOfVisibleForTemplateMember,
         arguments: [name, definingClass.library!.uri],
       );
     }
@@ -2107,7 +2091,7 @@
     if (hasVisibleForTesting) {
       _errorReporter.atEntity(
         errorEntity,
-        WarningCode.invalidUseOfVisibleForTestingMember,
+        diag.invalidUseOfVisibleForTestingMember,
         arguments: [name, definingClass.library!.uri],
       );
     }
@@ -2115,7 +2099,7 @@
     if (hasVisibleForOverriding) {
       _errorReporter.atEntity(
         errorEntity,
-        WarningCode.invalidUseOfVisibleForOverridingMember,
+        diag.invalidUseOfVisibleForOverridingMember,
         arguments: [name],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/bool_expression_verifier.dart b/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
index bb287c3..7945c96 100644
--- a/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
+++ b/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/nullable_dereference_verifier.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -33,14 +33,14 @@
   /// Check to ensure that the [condition] is of type bool, are. Otherwise an
   /// error is reported on the expression.
   ///
-  /// See [CompileTimeErrorCode.nonBoolCondition].
+  /// See [diag.nonBoolCondition].
   void checkForNonBoolCondition(
     Expression condition, {
     required Map<SharedTypeView, NonPromotionReason> Function()? whyNotPromoted,
   }) {
     checkForNonBoolExpression(
       condition,
-      diagnosticCode: CompileTimeErrorCode.nonBoolCondition,
+      diagnosticCode: diag.nonBoolCondition,
       whyNotPromoted: whyNotPromoted,
     );
   }
@@ -63,7 +63,7 @@
         )) {
       if (type.isDartCoreBool) {
         _nullableDereferenceVerifier.report(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
+          diag.uncheckedUseOfNullableValueAsCondition,
           expression,
           type,
           messages: _resolver.computeWhyNotPromotedMessages(
@@ -88,7 +88,7 @@
   }) {
     checkForNonBoolExpression(
       expression,
-      diagnosticCode: CompileTimeErrorCode.nonBoolNegationExpression,
+      diagnosticCode: diag.nonBoolNegationExpression,
       whyNotPromoted: whyNotPromoted,
     );
   }
@@ -104,15 +104,9 @@
 
     if (expression is MethodInvocation) {
       SimpleIdentifier methodName = expression.methodName;
-      _diagnosticReporter.atNode(
-        methodName,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(methodName, diag.useOfVoidResult);
     } else {
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      _diagnosticReporter.atNode(expression, diag.useOfVoidResult);
     }
 
     return true;
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 2f1fd8a..5d85c48 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -2,19 +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.
 
-/// @docImport 'package:analyzer/src/dart/error/syntactic_errors.dart';
-/// @docImport 'package:analyzer/src/error/inference_error.dart';
-library;
-
-import 'package:_fe_analyzer_shared/src/base/errors.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-
 export 'package:_fe_analyzer_shared/src/base/errors.dart'
     show LocatableDiagnosticImpl;
-export 'package:analyzer/src/analysis_options/error/option_codes.dart';
-export 'package:analyzer/src/dart/error/hint_codes.dart';
 export 'package:analyzer/src/dart/error/lint_codes.dart';
 export 'package:analyzer/src/dart/error/todo_codes.dart';
-
-part 'package:analyzer/src/error/codes.g.dart';
diff --git a/pkg/analyzer/lib/src/error/codes.g.dart b/pkg/analyzer/lib/src/error/codes.g.dart
deleted file mode 100644
index b6310b9..0000000
--- a/pkg/analyzer/lib/src/error/codes.g.dart
+++ /dev/null
@@ -1,15614 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/error/codes.dart";
-
-class CompileTimeErrorCode extends DiagnosticCodeWithExpectedTypes {
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  abstractFieldConstructorInitializer = CompileTimeErrorWithoutArguments(
-    name: 'ABSTRACT_FIELD_INITIALIZER',
-    problemMessage: "Abstract fields can't have initializers.",
-    correctionMessage:
-        "Try removing the field initializer or the 'abstract' keyword from the "
-        "field declaration.",
-    hasPublishedDocs: true,
-    uniqueName: 'ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments abstractFieldInitializer =
-      CompileTimeErrorWithoutArguments(
-        name: 'ABSTRACT_FIELD_INITIALIZER',
-        problemMessage: "Abstract fields can't have initializers.",
-        correctionMessage:
-            "Try removing the initializer or the 'abstract' keyword.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String memberKind: the display name for the kind of the found abstract
-  ///                    member
-  /// String name: the name of the member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String memberKind,
-      required String name,
-    })
-  >
-  abstractSuperMemberReference = CompileTimeErrorTemplate(
-    name: 'ABSTRACT_SUPER_MEMBER_REFERENCE',
-    problemMessage: "The {0} '{1}' is always abstract in the supertype.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE',
-    withArguments: _withArgumentsAbstractSuperMemberReference,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the ambiguous element
-  /// Uri p1: the name of the first library in which the type is found
-  /// Uri p2: the name of the second library in which the type is found
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required Uri p1,
-      required Uri p2,
-    })
-  >
-  ambiguousExport = CompileTimeErrorTemplate(
-    name: 'AMBIGUOUS_EXPORT',
-    problemMessage:
-        "The name '{0}' is defined in the libraries '{1}' and '{2}'.",
-    correctionMessage:
-        "Try removing the export of one of the libraries, or explicitly hiding "
-        "the name in one of the export directives.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.AMBIGUOUS_EXPORT',
-    withArguments: _withArgumentsAmbiguousExport,
-    expectedTypes: [ExpectedType.string, ExpectedType.uri, ExpectedType.uri],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  /// String p1: the names of the declaring extensions
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  ambiguousExtensionMemberAccessThreeOrMore = CompileTimeErrorTemplate(
-    name: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS',
-    problemMessage:
-        "A member named '{0}' is defined in {1}, and none are more specific.",
-    correctionMessage:
-        "Try using an extension override to specify the extension you want to "
-        "be chosen.",
-    hasPublishedDocs: true,
-    uniqueName: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE',
-    withArguments: _withArgumentsAmbiguousExtensionMemberAccessThreeOrMore,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  /// Element p1: the name of the first declaring extension
-  /// Element p2: the names of the second declaring extension
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required Element p1,
-      required Element p2,
-    })
-  >
-  ambiguousExtensionMemberAccessTwo = CompileTimeErrorTemplate(
-    name: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS',
-    problemMessage:
-        "A member named '{0}' is defined in '{1}' and '{2}', and neither is more "
-        "specific.",
-    correctionMessage:
-        "Try using an extension override to specify the extension you want to "
-        "be chosen.",
-    hasPublishedDocs: true,
-    uniqueName: 'AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO',
-    withArguments: _withArgumentsAmbiguousExtensionMemberAccessTwo,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.element,
-      ExpectedType.element,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the ambiguous type
-  /// String p1: the names of the libraries that the type is found
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  ambiguousImport = CompileTimeErrorTemplate(
-    name: 'AMBIGUOUS_IMPORT',
-    problemMessage: "The name '{0}' is defined in the libraries {1}.",
-    correctionMessage:
-        "Try using 'as prefix' for one of the import directives, or hiding the "
-        "name from all but one of the imports.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.AMBIGUOUS_IMPORT',
-    withArguments: _withArgumentsAmbiguousImport,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  ambiguousSetOrMapLiteralBoth = CompileTimeErrorWithoutArguments(
-    name: 'AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH',
-    problemMessage:
-        "The literal can't be either a map or a set because it contains at least "
-        "one literal map entry or a spread operator spreading a 'Map', and at "
-        "least one element which is neither of these.",
-    correctionMessage:
-        "Try removing or changing some of the elements so that all of the "
-        "elements are consistent.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  ambiguousSetOrMapLiteralEither = CompileTimeErrorWithoutArguments(
-    name: 'AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER',
-    problemMessage:
-        "This literal must be either a map or a set, but the elements don't have "
-        "enough information for type inference to work.",
-    correctionMessage:
-        "Try adding type arguments to the literal (one for sets, two for "
-        "maps).",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the actual argument type
-  /// Type p1: the name of the expected type
-  /// String p2: additional information, if any, when problem is associated with
-  ///            records
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required String p2,
-    })
-  >
-  argumentTypeNotAssignable = CompileTimeErrorTemplate(
-    name: 'ARGUMENT_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The argument type '{0}' can't be assigned to the parameter type '{1}'. "
-        "{2}",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsArgumentTypeNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments assertInRedirectingConstructor =
-      CompileTimeErrorWithoutArguments(
-        name: 'ASSERT_IN_REDIRECTING_CONSTRUCTOR',
-        problemMessage:
-            "A redirecting constructor can't have an 'assert' initializer.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  assignmentToConst = CompileTimeErrorWithoutArguments(
-    name: 'ASSIGNMENT_TO_CONST',
-    problemMessage:
-        "Constant variables can't be assigned a value after initialization.",
-    correctionMessage:
-        "Try removing the assignment, or remove the modifier 'const' from the "
-        "variable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_CONST',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the final variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  assignmentToFinal = CompileTimeErrorTemplate(
-    name: 'ASSIGNMENT_TO_FINAL',
-    problemMessage: "'{0}' can't be used as a setter because it's final.",
-    correctionMessage:
-        "Try finding a different setter, or making '{0}' non-final.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_FINAL',
-    withArguments: _withArgumentsAssignmentToFinal,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  assignmentToFinalLocal = CompileTimeErrorTemplate(
-    name: 'ASSIGNMENT_TO_FINAL_LOCAL',
-    problemMessage: "The final variable '{0}' can only be set once.",
-    correctionMessage: "Try making '{0}' non-final.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL',
-    withArguments: _withArgumentsAssignmentToFinalLocal,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the reference
-  /// String p1: the name of the class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  assignmentToFinalNoSetter = CompileTimeErrorTemplate(
-    name: 'ASSIGNMENT_TO_FINAL_NO_SETTER',
-    problemMessage: "There isn't a setter named '{0}' in class '{1}'.",
-    correctionMessage:
-        "Try correcting the name to reference an existing setter, or declare "
-        "the setter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER',
-    withArguments: _withArgumentsAssignmentToFinalNoSetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments assignmentToFunction =
-      CompileTimeErrorWithoutArguments(
-        name: 'ASSIGNMENT_TO_FUNCTION',
-        problemMessage: "Functions can't be assigned a value.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments assignmentToMethod =
-      CompileTimeErrorWithoutArguments(
-        name: 'ASSIGNMENT_TO_METHOD',
-        problemMessage: "Methods can't be assigned a value.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments assignmentToType =
-      CompileTimeErrorWithoutArguments(
-        name: 'ASSIGNMENT_TO_TYPE',
-        problemMessage: "Types can't be assigned a value.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.ASSIGNMENT_TO_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments asyncForInWrongContext =
-      CompileTimeErrorWithoutArguments(
-        name: 'ASYNC_FOR_IN_WRONG_CONTEXT',
-        problemMessage:
-            "The async for-in loop can only be used in an async function.",
-        correctionMessage:
-            "Try marking the function body with either 'async' or 'async*', or "
-            "removing the 'await' before the for-in loop.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  augmentationExtendsClauseAlreadyPresent = CompileTimeErrorWithoutArguments(
-    name: 'AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT',
-    problemMessage:
-        "The augmentation has an 'extends' clause, but an augmentation target "
-        "already includes an 'extends' clause and it isn't allowed to be "
-        "repeated or changed.",
-    correctionMessage:
-        "Try removing the 'extends' clause, either here or in the augmentation "
-        "target.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the lexeme of the modifier.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  augmentationModifierExtra = CompileTimeErrorTemplate(
-    name: 'AUGMENTATION_MODIFIER_EXTRA',
-    problemMessage:
-        "The augmentation has the '{0}' modifier that the declaration doesn't "
-        "have.",
-    correctionMessage:
-        "Try removing the '{0}' modifier, or adding it to the declaration.",
-    uniqueNameCheck: 'CompileTimeErrorCode.AUGMENTATION_MODIFIER_EXTRA',
-    withArguments: _withArgumentsAugmentationModifierExtra,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the lexeme of the modifier.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  augmentationModifierMissing = CompileTimeErrorTemplate(
-    name: 'AUGMENTATION_MODIFIER_MISSING',
-    problemMessage:
-        "The augmentation is missing the '{0}' modifier that the declaration has.",
-    correctionMessage:
-        "Try adding the '{0}' modifier, or removing it from the declaration.",
-    uniqueNameCheck: 'CompileTimeErrorCode.AUGMENTATION_MODIFIER_MISSING',
-    withArguments: _withArgumentsAugmentationModifierMissing,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the declaration kind.
-  /// Object p1: the name of the augmentation kind.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  augmentationOfDifferentDeclarationKind = CompileTimeErrorTemplate(
-    name: 'AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND',
-    problemMessage: "Can't augment a {0} with a {1}.",
-    correctionMessage:
-        "Try changing the augmentation to match the declaration kind.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND',
-    withArguments: _withArgumentsAugmentationOfDifferentDeclarationKind,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments augmentationTypeParameterBound =
-      CompileTimeErrorWithoutArguments(
-        name: 'AUGMENTATION_TYPE_PARAMETER_BOUND',
-        problemMessage:
-            "The augmentation type parameter must have the same bound as the "
-            "corresponding type parameter of the declaration.",
-        correctionMessage:
-            "Try changing the augmentation to match the declaration type "
-            "parameters.",
-        uniqueNameCheck:
-            'CompileTimeErrorCode.AUGMENTATION_TYPE_PARAMETER_BOUND',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  augmentationTypeParameterCount = CompileTimeErrorWithoutArguments(
-    name: 'AUGMENTATION_TYPE_PARAMETER_COUNT',
-    problemMessage:
-        "The augmentation must have the same number of type parameters as the "
-        "declaration.",
-    correctionMessage:
-        "Try changing the augmentation to match the declaration type "
-        "parameters.",
-    uniqueNameCheck: 'CompileTimeErrorCode.AUGMENTATION_TYPE_PARAMETER_COUNT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments augmentationTypeParameterName =
-      CompileTimeErrorWithoutArguments(
-        name: 'AUGMENTATION_TYPE_PARAMETER_NAME',
-        problemMessage:
-            "The augmentation type parameter must have the same name as the "
-            "corresponding type parameter of the declaration.",
-        correctionMessage:
-            "Try changing the augmentation to match the declaration type "
-            "parameters.",
-        uniqueNameCheck:
-            'CompileTimeErrorCode.AUGMENTATION_TYPE_PARAMETER_NAME',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments augmentationWithoutDeclaration =
-      CompileTimeErrorWithoutArguments(
-        name: 'AUGMENTATION_WITHOUT_DECLARATION',
-        problemMessage: "The declaration being augmented doesn't exist.",
-        correctionMessage:
-            "Try changing the augmentation to match an existing declaration.",
-        uniqueNameCheck:
-            'CompileTimeErrorCode.AUGMENTATION_WITHOUT_DECLARATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  augmentedExpressionIsNotSetter = CompileTimeErrorWithoutArguments(
-    name: 'AUGMENTED_EXPRESSION_IS_NOT_SETTER',
-    problemMessage:
-        "The augmented declaration is not a setter, it can't be used to write a "
-        "value.",
-    correctionMessage: "Try assigning a value to a setter.",
-    uniqueNameCheck: 'CompileTimeErrorCode.AUGMENTED_EXPRESSION_IS_NOT_SETTER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  augmentedExpressionIsSetter = CompileTimeErrorWithoutArguments(
-    name: 'AUGMENTED_EXPRESSION_IS_SETTER',
-    problemMessage:
-        "The augmented declaration is a setter, it can't be used to read a value.",
-    correctionMessage: "Try assigning a value to the augmented setter.",
-    uniqueNameCheck: 'CompileTimeErrorCode.AUGMENTED_EXPRESSION_IS_SETTER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the lexeme of the operator.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  augmentedExpressionNotOperator = CompileTimeErrorTemplate(
-    name: 'AUGMENTED_EXPRESSION_NOT_OPERATOR',
-    problemMessage:
-        "The enclosing augmentation doesn't augment the operator '{0}'.",
-    correctionMessage: "Try augmenting or invoking the correct operator.",
-    uniqueNameCheck: 'CompileTimeErrorCode.AUGMENTED_EXPRESSION_NOT_OPERATOR',
-    withArguments: _withArgumentsAugmentedExpressionNotOperator,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  awaitInLateLocalVariableInitializer = CompileTimeErrorWithoutArguments(
-    name: 'AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER',
-    problemMessage:
-        "The 'await' expression can't be used in a 'late' local variable's "
-        "initializer.",
-    correctionMessage:
-        "Try removing the 'late' modifier, or rewriting the initializer "
-        "without using the 'await' expression.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// 16.30 Await Expressions: It is a compile-time error if the function
-  /// immediately enclosing _a_ is not declared asynchronous. (Where _a_ is the
-  /// await expression.)
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments awaitInWrongContext =
-      CompileTimeErrorWithoutArguments(
-        name: 'AWAIT_IN_WRONG_CONTEXT',
-        problemMessage:
-            "The await expression can only be used in an async function.",
-        correctionMessage:
-            "Try marking the function body with either 'async' or 'async*'.",
-        uniqueNameCheck: 'CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  awaitOfIncompatibleType = CompileTimeErrorWithoutArguments(
-    name: 'AWAIT_OF_INCOMPATIBLE_TYPE',
-    problemMessage:
-        "The 'await' expression can't be used for an expression with an extension "
-        "type that is not a subtype of 'Future'.",
-    correctionMessage:
-        "Try removing the `await`, or updating the extension type to implement "
-        "'Future'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.AWAIT_OF_INCOMPATIBLE_TYPE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String implementedClassName: the name of the base class being implemented
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String implementedClassName})
-  >
-  baseClassImplementedOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The class '{0}' can't be implemented outside of its library because it's "
-        "a base class.",
-    hasPublishedDocs: true,
-    uniqueName: 'BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
-    withArguments: _withArgumentsBaseClassImplementedOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String implementedMixinName: the name of the base mixin being implemented
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String implementedMixinName})
-  >
-  baseMixinImplementedOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The mixin '{0}' can't be implemented outside of its library because it's "
-        "a base mixin.",
-    hasPublishedDocs: true,
-    uniqueName: 'BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
-    withArguments: _withArgumentsBaseMixinImplementedOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the return type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  bodyMightCompleteNormally = CompileTimeErrorTemplate(
-    name: 'BODY_MIGHT_COMPLETE_NORMALLY',
-    problemMessage:
-        "The body might complete normally, causing 'null' to be returned, but the "
-        "return type, '{0}', is a potentially non-nullable type.",
-    correctionMessage:
-        "Try adding either a return or a throw statement at the end.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY',
-    withArguments: _withArgumentsBodyMightCompleteNormally,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments breakLabelOnSwitchMember =
-      CompileTimeErrorWithoutArguments(
-        name: 'BREAK_LABEL_ON_SWITCH_MEMBER',
-        problemMessage:
-            "A break label resolves to the 'case' or 'default' statement.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.BREAK_LABEL_ON_SWITCH_MEMBER',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsExtensionName = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
-    problemMessage:
-        "The built-in identifier '{0}' can't be used as an extension name.",
-    correctionMessage: "Try choosing a different name for the extension.",
-    hasPublishedDocs: true,
-    uniqueName: 'BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME',
-    withArguments: _withArgumentsBuiltInIdentifierAsExtensionName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsExtensionTypeName = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
-    problemMessage:
-        "The built-in identifier '{0}' can't be used as an extension type name.",
-    correctionMessage: "Try choosing a different name for the extension type.",
-    hasPublishedDocs: true,
-    uniqueName: 'BUILT_IN_IDENTIFIER_AS_EXTENSION_TYPE_NAME',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_TYPE_NAME',
-    withArguments: _withArgumentsBuiltInIdentifierAsExtensionTypeName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsPrefixName = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
-    problemMessage:
-        "The built-in identifier '{0}' can't be used as a prefix name.",
-    correctionMessage: "Try choosing a different name for the prefix.",
-    hasPublishedDocs: true,
-    uniqueName: 'BUILT_IN_IDENTIFIER_AS_PREFIX_NAME',
-    uniqueNameCheck: 'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME',
-    withArguments: _withArgumentsBuiltInIdentifierAsPrefixName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsType = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_AS_TYPE',
-    problemMessage: "The built-in identifier '{0}' can't be used as a type.",
-    correctionMessage: "Try correcting the name to match an existing type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE',
-    withArguments: _withArgumentsBuiltInIdentifierAsType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsTypedefName = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
-    problemMessage:
-        "The built-in identifier '{0}' can't be used as a typedef name.",
-    correctionMessage: "Try choosing a different name for the typedef.",
-    hasPublishedDocs: true,
-    uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
-    uniqueNameCheck: 'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
-    withArguments: _withArgumentsBuiltInIdentifierAsTypedefName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsTypeName = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
-    problemMessage:
-        "The built-in identifier '{0}' can't be used as a type name.",
-    correctionMessage: "Try choosing a different name for the type.",
-    hasPublishedDocs: true,
-    uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_NAME',
-    uniqueNameCheck: 'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME',
-    withArguments: _withArgumentsBuiltInIdentifierAsTypeName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the built-in identifier that is being used
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  builtInIdentifierAsTypeParameterName = CompileTimeErrorTemplate(
-    name: 'BUILT_IN_IDENTIFIER_IN_DECLARATION',
-    problemMessage:
-        "The built-in identifier '{0}' can't be used as a type parameter name.",
-    correctionMessage: "Try choosing a different name for the type parameter.",
-    hasPublishedDocs: true,
-    uniqueName: 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
-    withArguments: _withArgumentsBuiltInIdentifierAsTypeParameterName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the this of the switch case expression
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  caseExpressionTypeImplementsEquals = CompileTimeErrorTemplate(
-    name: 'CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
-    problemMessage:
-        "The switch case expression type '{0}' can't override the '==' operator.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS',
-    withArguments: _withArgumentsCaseExpressionTypeImplementsEquals,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the case expression
-  /// Type p1: the type of the switch expression
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  caseExpressionTypeIsNotSwitchExpressionSubtype = CompileTimeErrorTemplate(
-    name: 'CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE',
-    problemMessage:
-        "The switch case expression type '{0}' must be a subtype of the switch "
-        "expression type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE',
-    withArguments: _withArgumentsCaseExpressionTypeIsNotSwitchExpressionSubtype,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  castToNonType = CompileTimeErrorTemplate(
-    name: 'CAST_TO_NON_TYPE',
-    problemMessage:
-        "The name '{0}' isn't a type, so it can't be used in an 'as' expression.",
-    correctionMessage:
-        "Try changing the name to the name of an existing type, or creating a "
-        "type with the name '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CAST_TO_NON_TYPE',
-    withArguments: _withArgumentsCastToNonType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  classInstantiationAccessToInstanceMember = CompileTimeErrorTemplate(
-    name: 'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
-    problemMessage:
-        "The instance member '{0}' can't be accessed on a class instantiation.",
-    correctionMessage:
-        "Try changing the member name to the name of a constructor.",
-    uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER',
-    withArguments: _withArgumentsClassInstantiationAccessToInstanceMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  classInstantiationAccessToStaticMember = CompileTimeErrorTemplate(
-    name: 'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
-    problemMessage:
-        "The static member '{0}' can't be accessed on a class instantiation.",
-    correctionMessage:
-        "Try removing the type arguments from the class name, or changing the "
-        "member name to the name of a constructor.",
-    uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER',
-    withArguments: _withArgumentsClassInstantiationAccessToStaticMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class
-  /// String p1: the name of the member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  classInstantiationAccessToUnknownMember = CompileTimeErrorTemplate(
-    name: 'CLASS_INSTANTIATION_ACCESS_TO_MEMBER',
-    problemMessage: "The class '{0}' doesn't have a constructor named '{1}'.",
-    correctionMessage:
-        "Try invoking a different constructor, or defining a constructor named "
-        "'{1}'.",
-    uniqueName: 'CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER',
-    withArguments: _withArgumentsClassInstantiationAccessToUnknownMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class being used as a mixin
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  classUsedAsMixin = CompileTimeErrorTemplate(
-    name: 'CLASS_USED_AS_MIXIN',
-    problemMessage:
-        "The class '{0}' can't be used as a mixin because it's neither a mixin "
-        "class nor a mixin.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CLASS_USED_AS_MIXIN',
-    withArguments: _withArgumentsClassUsedAsMixin,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  concreteClassHasEnumSuperinterface = CompileTimeErrorWithoutArguments(
-    name: 'CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE',
-    problemMessage: "Concrete classes can't have 'Enum' as a superinterface.",
-    correctionMessage:
-        "Try specifying a different interface, or remove it from the list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the abstract method
-  /// String p1: the name of the enclosing class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  concreteClassWithAbstractMember = CompileTimeErrorTemplate(
-    name: '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}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
-    withArguments: _withArgumentsConcreteClassWithAbstractMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor and field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingConstructorAndStaticField = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a constructor and a static field in this "
-        "class.",
-    correctionMessage: "Try renaming either the constructor or the field.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD',
-    withArguments: _withArgumentsConflictingConstructorAndStaticField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor and getter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingConstructorAndStaticGetter = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a constructor and a static getter in "
-        "this class.",
-    correctionMessage: "Try renaming either the constructor or the getter.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER',
-    withArguments: _withArgumentsConflictingConstructorAndStaticGetter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingConstructorAndStaticMethod = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a constructor and a static method in "
-        "this class.",
-    correctionMessage: "Try renaming either the constructor or the method.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD',
-    withArguments: _withArgumentsConflictingConstructorAndStaticMethod,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor and setter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingConstructorAndStaticSetter = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a constructor and a static setter in "
-        "this class.",
-    correctionMessage: "Try renaming either the constructor or the setter.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER',
-    withArguments: _withArgumentsConflictingConstructorAndStaticSetter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
-  /// error if `C` declares a getter or a setter with basename `n`, and has a
-  /// method named `n`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class defining the conflicting field
-  /// String p1: the name of the conflicting field
-  /// String p2: the name of the class defining the method with which the field
-  ///            conflicts
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  conflictingFieldAndMethod = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_FIELD_AND_METHOD',
-    problemMessage:
-        "Class '{0}' can't define field '{1}' and have method '{2}.{1}' with the "
-        "same name.",
-    correctionMessage:
-        "Try converting the getter to a method, or renaming the field to a "
-        "name that doesn't conflict.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD',
-    withArguments: _withArgumentsConflictingFieldAndMethod,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the kind of the element implementing the
-  ///            conflicting interface
-  /// String p1: the name of the element implementing the conflicting interface
-  /// String p2: the first conflicting type
-  /// String p3: the second conflicting type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-      required String p3,
-    })
-  >
-  conflictingGenericInterfaces = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_GENERIC_INTERFACES',
-    problemMessage:
-        "The {0} '{1}' can't implement both '{2}' and '{3}' because the type "
-        "arguments are different.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES',
-    withArguments: _withArgumentsConflictingGenericInterfaces,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
-  /// error if the interface of `C` has an instance method named `n` and an
-  /// instance setter with basename `n`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the enclosing element kind - class, extension type,
-  ///            etc
-  /// String p1: the name of the enclosing element
-  /// String p2: the name of the conflicting method / setter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  conflictingInheritedMethodAndSetter = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_INHERITED_METHOD_AND_SETTER',
-    problemMessage:
-        "The {0} '{1}' can't inherit both a method and a setter named '{2}'.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_INHERITED_METHOD_AND_SETTER',
-    withArguments: _withArgumentsConflictingInheritedMethodAndSetter,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
-  /// error if `C` declares a method named `n`, and has a getter or a setter
-  /// with basename `n`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class defining the conflicting method
-  /// String p1: the name of the conflicting method
-  /// String p2: the name of the class defining the field with which the method
-  ///            conflicts
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  conflictingMethodAndField = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_METHOD_AND_FIELD',
-    problemMessage:
-        "Class '{0}' can't define method '{1}' and have field '{2}.{1}' with the "
-        "same name.",
-    correctionMessage:
-        "Try converting the method to a getter, or renaming the method to a "
-        "name that doesn't conflict.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD',
-    withArguments: _withArgumentsConflictingMethodAndField,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
-  /// error if `C` declares a static member with basename `n`, and has an
-  /// instance member with basename `n`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class defining the conflicting member
-  /// String p1: the name of the conflicting static member
-  /// String p2: the name of the class defining the field with which the method
-  ///            conflicts
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  conflictingStaticAndInstance = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_STATIC_AND_INSTANCE',
-    problemMessage:
-        "Class '{0}' can't define static member '{1}' and have instance member "
-        "'{2}.{1}' with the same name.",
-    correctionMessage:
-        "Try renaming the member to a name that doesn't conflict.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE',
-    withArguments: _withArgumentsConflictingStaticAndInstance,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndClass = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and the class in which "
-        "the type parameter is defined.",
-    correctionMessage: "Try renaming either the type parameter or the class.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_CLASS',
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS',
-    withArguments: _withArgumentsConflictingTypeVariableAndClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndEnum = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and the enum in which "
-        "the type parameter is defined.",
-    correctionMessage: "Try renaming either the type parameter or the enum.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_ENUM',
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_ENUM',
-    withArguments: _withArgumentsConflictingTypeVariableAndEnum,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndExtension = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and the extension in "
-        "which the type parameter is defined.",
-    correctionMessage:
-        "Try renaming either the type parameter or the extension.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_EXTENSION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_EXTENSION',
-    withArguments: _withArgumentsConflictingTypeVariableAndExtension,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndExtensionType = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and the extension type "
-        "in which the type parameter is defined.",
-    correctionMessage:
-        "Try renaming either the type parameter or the extension.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_EXTENSION_TYPE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_EXTENSION_TYPE',
-    withArguments: _withArgumentsConflictingTypeVariableAndExtensionType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndMemberClass = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and a member in this "
-        "class.",
-    correctionMessage: "Try renaming either the type parameter or the member.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS',
-    withArguments: _withArgumentsConflictingTypeVariableAndMemberClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndMemberEnum = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and a member in this "
-        "enum.",
-    correctionMessage: "Try renaming either the type parameter or the member.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM',
-    withArguments: _withArgumentsConflictingTypeVariableAndMemberEnum,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndMemberExtension = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and a member in this "
-        "extension.",
-    correctionMessage: "Try renaming either the type parameter or the member.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION',
-    withArguments: _withArgumentsConflictingTypeVariableAndMemberExtension,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndMemberExtensionType = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and a member in this "
-        "extension type.",
-    correctionMessage: "Try renaming either the type parameter or the member.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION_TYPE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION_TYPE',
-    withArguments: _withArgumentsConflictingTypeVariableAndMemberExtensionType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndMemberMixin = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and a member in this "
-        "mixin.",
-    correctionMessage: "Try renaming either the type parameter or the member.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN',
-    withArguments: _withArgumentsConflictingTypeVariableAndMemberMixin,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  conflictingTypeVariableAndMixin = CompileTimeErrorTemplate(
-    name: 'CONFLICTING_TYPE_VARIABLE_AND_CONTAINER',
-    problemMessage:
-        "'{0}' can't be used to name both a type parameter and the mixin in which "
-        "the type parameter is defined.",
-    correctionMessage: "Try renaming either the type parameter or the mixin.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONFLICTING_TYPE_VARIABLE_AND_MIXIN',
-    uniqueNameCheck: 'CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN',
-    withArguments: _withArgumentsConflictingTypeVariableAndMixin,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constantPatternWithNonConstantExpression = CompileTimeErrorWithoutArguments(
-    name: 'CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION',
-    problemMessage:
-        "The expression of a constant pattern must be a valid constant.",
-    correctionMessage: "Try making the expression a valid constant.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constConstructorConstantFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as values in a "
-        "'const' constructor.",
-    correctionMessage:
-        "Try removing the keyword 'const' from the constructor or removing the "
-        "keyword 'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONST_CONSTRUCTOR_CONSTANT_FROM_DEFERRED_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_CONSTANT_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// 16.12.2 Const: It is a compile-time error if evaluation of a constant
-  /// object results in an uncaught exception being thrown.
-  ///
-  /// Parameters:
-  /// Object p0: the type of the runtime value of the argument
-  /// Object p1: the name of the field
-  /// Object p2: the type of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  constConstructorFieldTypeMismatch = CompileTimeErrorTemplate(
-    name: 'CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH',
-    problemMessage:
-        "In a const constructor, a value of type '{0}' can't be assigned to the "
-        "field '{1}', which has type '{2}'.",
-    correctionMessage: "Try using a subtype, or removing the keyword 'const'.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH',
-    withArguments: _withArgumentsConstConstructorFieldTypeMismatch,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the type of the runtime value of the argument
-  /// String p1: the static type of the parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  constConstructorParamTypeMismatch = CompileTimeErrorTemplate(
-    name: 'CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
-    problemMessage:
-        "A value of type '{0}' can't be assigned to a parameter of type '{1}' in a "
-        "const constructor.",
-    correctionMessage: "Try using a subtype, or removing the keyword 'const'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
-    withArguments: _withArgumentsConstConstructorParamTypeMismatch,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// 16.12.2 Const: It is a compile-time error if evaluation of a constant
-  /// object results in an uncaught exception being thrown.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constConstructorThrowsException = CompileTimeErrorWithoutArguments(
-    name: 'CONST_CONSTRUCTOR_THROWS_EXCEPTION',
-    problemMessage: "Const constructors can't throw exceptions.",
-    correctionMessage:
-        "Try removing the throw statement, or removing the keyword 'const'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_CONSTRUCTOR_THROWS_EXCEPTION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constConstructorWithFieldInitializedByNonConst = CompileTimeErrorTemplate(
-    name: 'CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST',
-    problemMessage:
-        "Can't define the 'const' constructor because the field '{0}' is "
-        "initialized with a non-constant value.",
-    correctionMessage:
-        "Try initializing the field to a constant value, or removing the "
-        "keyword 'const' from the constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST',
-    withArguments: _withArgumentsConstConstructorWithFieldInitializedByNonConst,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 7.6.3 Constant Constructors: The superinitializer that appears, explicitly
-  /// or implicitly, in the initializer list of a constant constructor must
-  /// specify a constant constructor of the superclass of the immediately
-  /// enclosing class or a compile-time error occurs.
-  ///
-  /// 12.1 Mixin Application: For each generative constructor named ... an
-  /// implicitly declared constructor named ... is declared. If Sq is a
-  /// generative const constructor, and M does not declare any fields, Cq is
-  /// also a const constructor.
-  ///
-  /// Parameters:
-  /// String p0: the name of the instance field.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constConstructorWithMixinWithField = CompileTimeErrorTemplate(
-    name: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
-    problemMessage:
-        "This constructor can't be declared 'const' because a mixin adds the "
-        "instance field: {0}.",
-    correctionMessage:
-        "Try removing the 'const' keyword or removing the 'with' clause from "
-        "the class declaration, or removing the field from the mixin class.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
-    withArguments: _withArgumentsConstConstructorWithMixinWithField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 7.6.3 Constant Constructors: The superinitializer that appears, explicitly
-  /// or implicitly, in the initializer list of a constant constructor must
-  /// specify a constant constructor of the superclass of the immediately
-  /// enclosing class or a compile-time error occurs.
-  ///
-  /// 12.1 Mixin Application: For each generative constructor named ... an
-  /// implicitly declared constructor named ... is declared. If Sq is a
-  /// generative const constructor, and M does not declare any fields, Cq is
-  /// also a const constructor.
-  ///
-  /// Parameters:
-  /// String p0: the names of the instance fields.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constConstructorWithMixinWithFields = CompileTimeErrorTemplate(
-    name: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD',
-    problemMessage:
-        "This constructor can't be declared 'const' because the mixins add the "
-        "instance fields: {0}.",
-    correctionMessage:
-        "Try removing the 'const' keyword or removing the 'with' clause from "
-        "the class declaration, or removing the fields from the mixin classes.",
-    uniqueName: 'CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS',
-    withArguments: _withArgumentsConstConstructorWithMixinWithFields,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the superclass
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constConstructorWithNonConstSuper = CompileTimeErrorTemplate(
-    name: 'CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
-    problemMessage:
-        "A constant constructor can't call a non-constant super constructor of "
-        "'{0}'.",
-    correctionMessage:
-        "Try calling a constant constructor in the superclass, or removing the "
-        "keyword 'const' from the constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER',
-    withArguments: _withArgumentsConstConstructorWithNonConstSuper,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constConstructorWithNonFinalField = CompileTimeErrorWithoutArguments(
-    name: 'CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
-    problemMessage:
-        "Can't define a const constructor for a class with non-final fields.",
-    correctionMessage:
-        "Try making all of the fields final, or removing the keyword 'const' "
-        "from the constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constDeferredClass = CompileTimeErrorWithoutArguments(
-    name: 'CONST_DEFERRED_CLASS',
-    problemMessage: "Deferred classes can't be created with 'const'.",
-    correctionMessage:
-        "Try using 'new' to create the instance, or changing the import to not "
-        "be deferred.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_DEFERRED_CLASS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constEvalAssertionFailure =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_EVAL_ASSERTION_FAILURE',
-        problemMessage: "The assertion in this constant expression failed.",
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_ASSERTION_FAILURE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the message of the assertion
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  constEvalAssertionFailureWithMessage = CompileTimeErrorTemplate(
-    name: 'CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE',
-    problemMessage: "An assertion failed with message '{0}'.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE',
-    withArguments: _withArgumentsConstEvalAssertionFailureWithMessage,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constEvalExtensionMethod =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_EVAL_EXTENSION_METHOD',
-        problemMessage:
-            "Extension methods can't be used in constant expressions.",
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_EXTENSION_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constEvalExtensionTypeMethod =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_EVAL_EXTENSION_TYPE_METHOD',
-        problemMessage:
-            "Extension type methods can't be used in constant expressions.",
-        uniqueNameCheck:
-            'CompileTimeErrorCode.CONST_EVAL_EXTENSION_TYPE_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalForElement = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_FOR_ELEMENT',
-    problemMessage: "Constant expressions don't support 'for' elements.",
-    correctionMessage:
-        "Try replacing the 'for' element with a spread, or removing 'const'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_FOR_ELEMENT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constEvalMethodInvocation =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_EVAL_METHOD_INVOCATION',
-        problemMessage: "Methods can't be invoked in constant expressions.",
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_METHOD_INVOCATION',
-        expectedTypes: [],
-      );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "An expression of the form e1 == e2".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalPrimitiveEquality = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_PRIMITIVE_EQUALITY',
-    problemMessage:
-        "In constant expressions, operands of the equality operator must have "
-        "primitive equality.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_PRIMITIVE_EQUALITY',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the property being accessed
-  /// String p1: the type with the property being accessed
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  constEvalPropertyAccess = CompileTimeErrorTemplate(
-    name: 'CONST_EVAL_PROPERTY_ACCESS',
-    problemMessage:
-        "The property '{0}' can't be accessed on the type '{1}' in a constant "
-        "expression.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_PROPERTY_ACCESS',
-    withArguments: _withArgumentsConstEvalPropertyAccess,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// 16.12.2 Const: It is a compile-time error if evaluation of a constant
-  /// object results in an uncaught exception being thrown.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constEvalThrowsException =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_EVAL_THROWS_EXCEPTION',
-        problemMessage:
-            "Evaluation of this constant expression throws an exception.",
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION',
-        expectedTypes: [],
-      );
-
-  /// 16.12.2 Const: It is a compile-time error if evaluation of a constant
-  /// object results in an uncaught exception being thrown.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constEvalThrowsIdbze =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_EVAL_THROWS_IDBZE',
-        problemMessage:
-            "Evaluation of this constant expression throws an "
-            "IntegerDivisionByZeroException.",
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_THROWS_IDBZE',
-        expectedTypes: [],
-      );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "An expression of the form !e1", "An expression of the form
-  /// e1 && e2", and "An expression of the form e1 || e2".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeBool = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_BOOL',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type "
-        "'bool'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL',
-    expectedTypes: [],
-  );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "An expression of the form e1 & e2".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeBoolInt = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_BOOL_INT',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type 'bool' "
-        "or 'int'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_INT',
-    expectedTypes: [],
-  );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "A literal string".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeBoolNumString = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_BOOL_NUM_STRING',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type "
-        "'bool', 'num', 'String' or 'null'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_NUM_STRING',
-    expectedTypes: [],
-  );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "An expression of the form ~e1", "An expression of one of
-  /// the forms e1 >> e2".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeInt = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_INT',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type 'int'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_INT',
-    expectedTypes: [],
-  );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "An expression of the form e1 - e2".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeNum = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_NUM',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type 'num'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_NUM',
-    expectedTypes: [],
-  );
-
-  /// See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
-  /// for text about "An expression of the form e1 + e2".
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeNumString = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_NUM_STRING',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type 'num' "
-        "or 'String'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_NUM_STRING',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeString = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_STRING',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type "
-        "'String'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_STRING',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constEvalTypeType = CompileTimeErrorWithoutArguments(
-    name: 'CONST_EVAL_TYPE_TYPE',
-    problemMessage:
-        "In constant expressions, operands of this operator must be of type "
-        "'Type'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_EVAL_TYPE_TYPE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the type of the initializer expression
-  /// Type p1: the name of the type of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  constFieldInitializerNotAssignable = CompileTimeErrorTemplate(
-    name: 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
-    problemMessage:
-        "The initializer type '{0}' can't be assigned to the field type '{1}' in a "
-        "const constructor.",
-    correctionMessage: "Try using a subtype, or removing the 'const' keyword",
-    hasPublishedDocs: true,
-    uniqueName: 'CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsConstFieldInitializerNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constInitializedWithNonConstantValue = CompileTimeErrorWithoutArguments(
-    name: 'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
-    problemMessage:
-        "Const variables must be initialized with a constant value.",
-    correctionMessage:
-        "Try changing the initializer to be a constant expression.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constInitializedWithNonConstantValueFromDeferredLibrary =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
-        problemMessage:
-            "Constant values from a deferred library can't be used to initialize a "
-            "'const' variable.",
-        correctionMessage:
-            "Try initializing the variable without referencing members of the "
-            "deferred library, or changing the import to not be deferred.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constInstanceField =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_INSTANCE_FIELD',
-        problemMessage: "Only static fields can be declared as const.",
-        correctionMessage:
-            "Try declaring the field as final, or adding the keyword 'static'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_INSTANCE_FIELD',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the type of the entry's key
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  constMapKeyNotPrimitiveEquality = CompileTimeErrorTemplate(
-    name: 'CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY',
-    problemMessage:
-        "The type of a key in a constant map can't override the '==' operator, or "
-        "'hashCode', but the class '{0}' does.",
-    correctionMessage:
-        "Try using a different value for the key, or removing the keyword "
-        "'const' from the map.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY',
-    withArguments: _withArgumentsConstMapKeyNotPrimitiveEquality,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the uninitialized final variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constNotInitialized = CompileTimeErrorTemplate(
-    name: 'CONST_NOT_INITIALIZED',
-    problemMessage: "The constant '{0}' must be initialized.",
-    correctionMessage: "Try adding an initialization to the declaration.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_NOT_INITIALIZED',
-    withArguments: _withArgumentsConstNotInitialized,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  constSetElementNotPrimitiveEquality = CompileTimeErrorTemplate(
-    name: 'CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY',
-    problemMessage:
-        "An element in a constant set can't override the '==' operator, or "
-        "'hashCode', but the type '{0}' does.",
-    correctionMessage:
-        "Try using a different value for the element, or removing the keyword "
-        "'const' from the set.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY',
-    withArguments: _withArgumentsConstSetElementNotPrimitiveEquality,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constSpreadExpectedListOrSet =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_SPREAD_EXPECTED_LIST_OR_SET',
-        problemMessage: "A list or a set is expected in this spread.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constSpreadExpectedMap =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_SPREAD_EXPECTED_MAP',
-        problemMessage: "A map is expected in this spread.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments constTypeParameter =
-      CompileTimeErrorWithoutArguments(
-        name: 'CONST_TYPE_PARAMETER',
-        problemMessage:
-            "Type parameters can't be used in a constant expression.",
-        correctionMessage:
-            "Try replacing the type parameter with a different type.",
-        uniqueNameCheck: 'CompileTimeErrorCode.CONST_TYPE_PARAMETER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constWithNonConst = CompileTimeErrorWithoutArguments(
-    name: 'CONST_WITH_NON_CONST',
-    problemMessage: "The constructor being called isn't a const constructor.",
-    correctionMessage: "Try removing 'const' from the constructor invocation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_WITH_NON_CONST',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constWithNonConstantArgument = CompileTimeErrorWithoutArguments(
-    name: 'CONST_WITH_NON_CONSTANT_ARGUMENT',
-    problemMessage:
-        "Arguments of a constant creation must be constant expressions.",
-    correctionMessage:
-        "Try making the argument a valid constant, or use 'new' to call the "
-        "constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the non-type element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constWithNonType = CompileTimeErrorTemplate(
-    name: 'CREATION_WITH_NON_TYPE',
-    problemMessage: "The name '{0}' isn't a class.",
-    correctionMessage: "Try correcting the name to match an existing class.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueName: 'CONST_WITH_NON_TYPE',
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_WITH_NON_TYPE',
-    withArguments: _withArgumentsConstWithNonType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constWithTypeParameters = CompileTimeErrorWithoutArguments(
-    name: 'CONST_WITH_TYPE_PARAMETERS',
-    problemMessage:
-        "A constant creation can't use a type parameter as a type argument.",
-    correctionMessage:
-        "Try replacing the type parameter with a different type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constWithTypeParametersConstructorTearoff = CompileTimeErrorWithoutArguments(
-    name: 'CONST_WITH_TYPE_PARAMETERS',
-    problemMessage:
-        "A constant constructor tearoff can't use a type parameter as a type "
-        "argument.",
-    correctionMessage:
-        "Try replacing the type parameter with a different type.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  constWithTypeParametersFunctionTearoff = CompileTimeErrorWithoutArguments(
-    name: 'CONST_WITH_TYPE_PARAMETERS',
-    problemMessage:
-        "A constant function tearoff can't use a type parameter as a type "
-        "argument.",
-    correctionMessage:
-        "Try replacing the type parameter with a different type.",
-    hasPublishedDocs: true,
-    uniqueName: 'CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF',
-    expectedTypes: [],
-  );
-
-  /// 16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
-  /// a constant constructor declared by the type <i>T</i>.
-  ///
-  /// Parameters:
-  /// Object p0: the name of the type
-  /// String p1: the name of the requested constant constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required String p1})
-  >
-  constWithUndefinedConstructor = CompileTimeErrorTemplate(
-    name: 'CONST_WITH_UNDEFINED_CONSTRUCTOR',
-    problemMessage:
-        "The class '{0}' doesn't have a constant constructor '{1}'.",
-    correctionMessage: "Try calling a different constructor.",
-    uniqueNameCheck: 'CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR',
-    withArguments: _withArgumentsConstWithUndefinedConstructor,
-    expectedTypes: [ExpectedType.object, ExpectedType.string],
-  );
-
-  /// 16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
-  /// a constant constructor declared by the type <i>T</i>.
-  ///
-  /// Parameters:
-  /// String p0: the name of the type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  constWithUndefinedConstructorDefault = CompileTimeErrorTemplate(
-    name: 'CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
-    problemMessage:
-        "The class '{0}' doesn't have an unnamed constant constructor.",
-    correctionMessage: "Try calling a different constructor.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
-    withArguments: _withArgumentsConstWithUndefinedConstructorDefault,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  continueLabelInvalid = CompileTimeErrorWithoutArguments(
-    name: 'CONTINUE_LABEL_INVALID',
-    problemMessage:
-        "The label used in a 'continue' statement must be defined on either a loop "
-        "or a switch member.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.CONTINUE_LABEL_INVALID',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  /// String p1: detail text explaining why the type could not be inferred
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  couldNotInfer = CompileTimeErrorTemplate(
-    name: 'COULD_NOT_INFER',
-    problemMessage: "Couldn't infer type parameter '{0}'.{1}",
-    uniqueNameCheck: 'CompileTimeErrorCode.COULD_NOT_INFER',
-    withArguments: _withArgumentsCouldNotInfer,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  defaultValueInRedirectingFactoryConstructor = CompileTimeErrorWithoutArguments(
-    name: 'DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR',
-    problemMessage:
-        "Default values aren't allowed in factory constructors that redirect to "
-        "another constructor.",
-    correctionMessage: "Try removing the default value.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  defaultValueOnRequiredParameter = CompileTimeErrorWithoutArguments(
-    name: 'DEFAULT_VALUE_ON_REQUIRED_PARAMETER',
-    problemMessage: "Required named parameters can't have a default value.",
-    correctionMessage:
-        "Try removing either the default value or the 'required' modifier.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments deferredImportOfExtension =
-      CompileTimeErrorWithoutArguments(
-        name: 'DEFERRED_IMPORT_OF_EXTENSION',
-        problemMessage:
-            "Imports of deferred libraries must hide all extensions.",
-        correctionMessage:
-            "Try adding either a show combinator listing the names you need to "
-            "reference or a hide combinator listing all of the extensions.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.DEFERRED_IMPORT_OF_EXTENSION',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the variable that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  definitelyUnassignedLateLocalVariable = CompileTimeErrorTemplate(
-    name: 'DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE',
-    problemMessage:
-        "The late local variable '{0}' is definitely unassigned at this point.",
-    correctionMessage:
-        "Ensure that it is assigned on necessary execution paths.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE',
-    withArguments: _withArgumentsDefinitelyUnassignedLateLocalVariable,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  disallowedTypeInstantiationExpression = CompileTimeErrorWithoutArguments(
-    name: 'DISALLOWED_TYPE_INSTANTIATION_EXPRESSION',
-    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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.DISALLOWED_TYPE_INSTANTIATION_EXPRESSION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments dotShorthandMissingContext =
-      CompileTimeErrorWithoutArguments(
-        name: 'DOT_SHORTHAND_MISSING_CONTEXT',
-        problemMessage:
-            "A dot shorthand can't be used where there is no context type.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.DOT_SHORTHAND_MISSING_CONTEXT',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the static getter
-  /// String p1: the name of the enclosing type where the getter is being looked
-  ///            for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  dotShorthandUndefinedGetter = CompileTimeErrorTemplate(
-    name: 'DOT_SHORTHAND_UNDEFINED_MEMBER',
-    problemMessage:
-        "The static getter '{0}' isn't defined for the context type '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing static getter, or "
-        "defining a getter or field named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'DOT_SHORTHAND_UNDEFINED_GETTER',
-    uniqueNameCheck: 'CompileTimeErrorCode.DOT_SHORTHAND_UNDEFINED_GETTER',
-    withArguments: _withArgumentsDotShorthandUndefinedGetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the static method or constructor
-  /// String p1: the name of the enclosing type where the method or constructor
-  ///            is being looked for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  dotShorthandUndefinedInvocation = CompileTimeErrorTemplate(
-    name: 'DOT_SHORTHAND_UNDEFINED_MEMBER',
-    problemMessage:
-        "The static method or constructor '{0}' isn't defined for the context type "
-        "'{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing static method or "
-        "constructor, or defining a static method or constructor named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'DOT_SHORTHAND_UNDEFINED_INVOCATION',
-    uniqueNameCheck: 'CompileTimeErrorCode.DOT_SHORTHAND_UNDEFINED_INVOCATION',
-    withArguments: _withArgumentsDotShorthandUndefinedInvocation,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments duplicateConstructorDefault =
-      CompileTimeErrorWithoutArguments(
-        name: 'DUPLICATE_CONSTRUCTOR',
-        problemMessage: "The unnamed constructor is already defined.",
-        correctionMessage: "Try giving one of the constructors a name.",
-        hasPublishedDocs: true,
-        uniqueName: 'DUPLICATE_CONSTRUCTOR_DEFAULT',
-        uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the duplicate entity
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  duplicateConstructorName = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_CONSTRUCTOR',
-    problemMessage: "The constructor with name '{0}' is already defined.",
-    correctionMessage: "Try renaming one of the constructors.",
-    hasPublishedDocs: true,
-    uniqueName: 'DUPLICATE_CONSTRUCTOR_NAME',
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME',
-    withArguments: _withArgumentsDuplicateConstructorName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the duplicate entity
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  duplicateDefinition = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_DEFINITION',
-    problemMessage: "The name '{0}' is already defined.",
-    correctionMessage: "Try renaming one of the declarations.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_DEFINITION',
-    withArguments: _withArgumentsDuplicateDefinition,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  duplicateFieldFormalParameter = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_FIELD_FORMAL_PARAMETER',
-    problemMessage:
-        "The field '{0}' can't be initialized by multiple parameters in the same "
-        "constructor.",
-    correctionMessage:
-        "Try removing one of the parameters, or using different fields.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_FIELD_FORMAL_PARAMETER',
-    withArguments: _withArgumentsDuplicateFieldFormalParameter,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the duplicated name
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  duplicateFieldName = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_FIELD_NAME',
-    problemMessage: "The field name '{0}' is already used in this record.",
-    correctionMessage: "Try renaming the field.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_FIELD_NAME',
-    withArguments: _withArgumentsDuplicateFieldName,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the parameter that was duplicated
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  duplicateNamedArgument = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_NAMED_ARGUMENT',
-    problemMessage:
-        "The argument for the named parameter '{0}' was already specified.",
-    correctionMessage:
-        "Try removing one of the named arguments, or correcting one of the "
-        "names to reference a different named parameter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT',
-    withArguments: _withArgumentsDuplicateNamedArgument,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Uri p0: the URI of the duplicate part
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Uri p0})
-  >
-  duplicatePart = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_PART',
-    problemMessage: "The library already contains a part with the URI '{0}'.",
-    correctionMessage:
-        "Try removing all except one of the duplicated part directives.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_PART',
-    withArguments: _withArgumentsDuplicatePart,
-    expectedTypes: [ExpectedType.uri],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  duplicatePatternAssignmentVariable = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE',
-    problemMessage: "The variable '{0}' is already assigned in this pattern.",
-    correctionMessage: "Try renaming the variable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE',
-    withArguments: _withArgumentsDuplicatePatternAssignmentVariable,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  duplicatePatternField = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_PATTERN_FIELD',
-    problemMessage: "The field '{0}' is already matched in this pattern.",
-    correctionMessage: "Try removing the duplicate field.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_PATTERN_FIELD',
-    withArguments: _withArgumentsDuplicatePatternField,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments duplicateRestElementInPattern =
-      CompileTimeErrorWithoutArguments(
-        name: 'DUPLICATE_REST_ELEMENT_IN_PATTERN',
-        problemMessage:
-            "At most one rest element is allowed in a list or map pattern.",
-        correctionMessage: "Try removing the duplicate rest element.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.DUPLICATE_REST_ELEMENT_IN_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the name of the variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  duplicateVariablePattern = CompileTimeErrorTemplate(
-    name: 'DUPLICATE_VARIABLE_PATTERN',
-    problemMessage: "The variable '{0}' is already defined in this pattern.",
-    correctionMessage: "Try renaming the variable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.DUPLICATE_VARIABLE_PATTERN',
-    withArguments: _withArgumentsDuplicateVariablePattern,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments emptyMapPattern =
-      CompileTimeErrorWithoutArguments(
-        name: 'EMPTY_MAP_PATTERN',
-        problemMessage: "A map pattern must have at least one entry.",
-        correctionMessage: "Try replacing it with an object pattern 'Map()'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.EMPTY_MAP_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  enumConstantInvokesFactoryConstructor = CompileTimeErrorWithoutArguments(
-    name: 'ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR',
-    problemMessage: "An enum value can't invoke a factory constructor.",
-    correctionMessage: "Try using a generative constructor.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  enumConstantSameNameAsEnclosing = CompileTimeErrorWithoutArguments(
-    name: 'ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING',
-    problemMessage:
-        "The name of the enum value can't be the same as the enum's name.",
-    correctionMessage: "Try renaming the constant.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  enumInstantiatedToBoundsIsNotWellBounded = CompileTimeErrorWithoutArguments(
-    name: '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.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  enumMixinWithInstanceVariable = CompileTimeErrorWithoutArguments(
-    name: 'ENUM_MIXIN_WITH_INSTANCE_VARIABLE',
-    problemMessage: "Mixins applied to enums can't have instance variables.",
-    correctionMessage: "Try replacing the instance variables with getters.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ENUM_MIXIN_WITH_INSTANCE_VARIABLE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the abstract method
-  /// String p1: the name of the enclosing enum
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  enumWithAbstractMember = CompileTimeErrorTemplate(
-    name: 'ENUM_WITH_ABSTRACT_MEMBER',
-    problemMessage: "'{0}' must have a method body because '{1}' is an enum.",
-    correctionMessage: "Try adding a body to '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER',
-    withArguments: _withArgumentsEnumWithAbstractMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments enumWithNameValues =
-      CompileTimeErrorWithoutArguments(
-        name: 'ENUM_WITH_NAME_VALUES',
-        problemMessage: "The name 'values' is not a valid name for an enum.",
-        correctionMessage: "Try using a different name.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.ENUM_WITH_NAME_VALUES',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments enumWithoutConstants =
-      CompileTimeErrorWithoutArguments(
-        name: 'ENUM_WITHOUT_CONSTANTS',
-        problemMessage: "The enum must have at least one enum constant.",
-        correctionMessage: "Try declaring an enum constant.",
-        uniqueNameCheck: 'CompileTimeErrorCode.ENUM_WITHOUT_CONSTANTS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments equalElementsInConstSet =
-      CompileTimeErrorWithoutArguments(
-        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.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments equalKeysInConstMap =
-      CompileTimeErrorWithoutArguments(
-        name: 'EQUAL_KEYS_IN_CONST_MAP',
-        problemMessage: "Two keys in a constant map literal can't be equal.",
-        correctionMessage: "Change or remove the duplicate key.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments equalKeysInMapPattern =
-      CompileTimeErrorWithoutArguments(
-        name: 'EQUAL_KEYS_IN_MAP_PATTERN',
-        problemMessage: "Two keys in a map pattern can't be equal.",
-        correctionMessage: "Change or remove the duplicate key.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.EQUAL_KEYS_IN_MAP_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// int p0: the number of provided type arguments
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0})
-  >
-  expectedOneListPatternTypeArguments = CompileTimeErrorTemplate(
-    name: 'EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS',
-    problemMessage:
-        "List patterns require one type argument or none, but {0} found.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS',
-    withArguments: _withArgumentsExpectedOneListPatternTypeArguments,
-    expectedTypes: [ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the number of provided type arguments
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0})
-  >
-  expectedOneListTypeArguments = CompileTimeErrorTemplate(
-    name: 'EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
-    problemMessage:
-        "List literals require one type argument or none, but {0} found.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS',
-    withArguments: _withArgumentsExpectedOneListTypeArguments,
-    expectedTypes: [ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the number of provided type arguments
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0})
-  >
-  expectedOneSetTypeArguments = CompileTimeErrorTemplate(
-    name: 'EXPECTED_ONE_SET_TYPE_ARGUMENTS',
-    problemMessage:
-        "Set literals require one type argument or none, but {0} were found.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXPECTED_ONE_SET_TYPE_ARGUMENTS',
-    withArguments: _withArgumentsExpectedOneSetTypeArguments,
-    expectedTypes: [ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the number of provided type arguments
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0})
-  >
-  expectedTwoMapPatternTypeArguments = CompileTimeErrorTemplate(
-    name: 'EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS',
-    problemMessage:
-        "Map patterns require two type arguments or none, but {0} found.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS',
-    withArguments: _withArgumentsExpectedTwoMapPatternTypeArguments,
-    expectedTypes: [ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the number of provided type arguments
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0})
-  >
-  expectedTwoMapTypeArguments = CompileTimeErrorTemplate(
-    name: 'EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
-    problemMessage:
-        "Map literals require two type arguments or none, but {0} found.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS',
-    withArguments: _withArgumentsExpectedTwoMapTypeArguments,
-    expectedTypes: [ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a library
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  exportInternalLibrary = CompileTimeErrorTemplate(
-    name: 'EXPORT_INTERNAL_LIBRARY',
-    problemMessage: "The library '{0}' is internal and can't be exported.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY',
-    withArguments: _withArgumentsExportInternalLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a non-library declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  exportOfNonLibrary = CompileTimeErrorTemplate(
-    name: 'EXPORT_OF_NON_LIBRARY',
-    problemMessage:
-        "The exported library '{0}' can't have a part-of directive.",
-    correctionMessage: "Try exporting the library that the part is a part of.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY',
-    withArguments: _withArgumentsExportOfNonLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments expressionInMap =
-      CompileTimeErrorWithoutArguments(
-        name: 'EXPRESSION_IN_MAP',
-        problemMessage: "Expressions can't be used in a map literal.",
-        correctionMessage:
-            "Try removing the expression or converting it to be a map entry.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.EXPRESSION_IN_MAP',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments extendsDeferredClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUBTYPE_OF_DEFERRED_CLASS',
-        problemMessage: "Classes can't extend deferred classes.",
-        correctionMessage:
-            "Try specifying a different superclass, or removing the extends "
-            "clause.",
-        hasPublishedDocs: true,
-        uniqueName: 'EXTENDS_DEFERRED_CLASS',
-        uniqueNameCheck: 'CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the name of the disallowed type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  extendsDisallowedClass = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_DISALLOWED_TYPE',
-    problemMessage: "Classes can't extend '{0}'.",
-    correctionMessage:
-        "Try specifying a different superclass, or removing the extends "
-        "clause.",
-    hasPublishedDocs: true,
-    uniqueName: 'EXTENDS_DISALLOWED_CLASS',
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS',
-    withArguments: _withArgumentsExtendsDisallowedClass,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments extendsNonClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'EXTENDS_NON_CLASS',
-        problemMessage: "Classes can only extend other classes.",
-        correctionMessage:
-            "Try specifying a different superclass, or removing the extends "
-            "clause.",
-        hasPublishedDocs: true,
-        isUnresolvedIdentifier: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.EXTENDS_NON_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extendsTypeAliasExpandsToTypeParameter = CompileTimeErrorWithoutArguments(
-    name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
-    problemMessage:
-        "A type alias that expands to a type parameter can't be used as a "
-        "superclass.",
-    correctionMessage:
-        "Try specifying a different superclass, or removing the extends "
-        "clause.",
-    hasPublishedDocs: true,
-    uniqueName: 'EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the extension
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  extensionAsExpression = CompileTimeErrorTemplate(
-    name: 'EXTENSION_AS_EXPRESSION',
-    problemMessage: "Extension '{0}' can't be used as an expression.",
-    correctionMessage: "Try replacing it with a valid expression.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENSION_AS_EXPRESSION',
-    withArguments: _withArgumentsExtensionAsExpression,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the conflicting static member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  extensionConflictingStaticAndInstance = CompileTimeErrorTemplate(
-    name: 'EXTENSION_CONFLICTING_STATIC_AND_INSTANCE',
-    problemMessage:
-        "An extension can't define static member '{0}' and an instance member with "
-        "the same name.",
-    correctionMessage:
-        "Try renaming the member to a name that doesn't conflict.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE',
-    withArguments: _withArgumentsExtensionConflictingStaticAndInstance,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments extensionDeclaresInstanceField =
-      CompileTimeErrorWithoutArguments(
-        name: 'EXTENSION_DECLARES_INSTANCE_FIELD',
-        problemMessage: "Extensions can't declare instance fields.",
-        correctionMessage: "Try replacing the field with a getter.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionDeclaresMemberOfObject = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_DECLARES_MEMBER_OF_OBJECT',
-    problemMessage:
-        "Extensions can't declare members with the same name as a member declared "
-        "by 'Object'.",
-    correctionMessage: "Try specifying a different name for the member.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENSION_DECLARES_MEMBER_OF_OBJECT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionOverrideAccessToStaticMember = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER',
-    problemMessage:
-        "An extension override can't be used to access a static member from an "
-        "extension.",
-    correctionMessage: "Try using just the name of the extension.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the argument
-  /// Type p1: the extended type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  extensionOverrideArgumentNotAssignable = CompileTimeErrorTemplate(
-    name: 'EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE',
-    problemMessage:
-        "The type of the argument to the extension override '{0}' isn't assignable "
-        "to the extended type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsExtensionOverrideArgumentNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionOverrideWithCascade = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_OVERRIDE_WITH_CASCADE',
-    problemMessage:
-        "Extension overrides have no value so they can't be used as the receiver "
-        "of a cascade expression.",
-    correctionMessage: "Try using '.' instead of '..'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENSION_OVERRIDE_WITH_CASCADE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionOverrideWithoutAccess = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_OVERRIDE_WITHOUT_ACCESS',
-    problemMessage:
-        "An extension override can only be used to access instance members.",
-    correctionMessage: "Consider adding an access to an instance member.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENSION_OVERRIDE_WITHOUT_ACCESS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeConstructorWithSuperFormalParameter =
-      CompileTimeErrorWithoutArguments(
-        name: 'EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER',
-        problemMessage:
-            "Extension type constructors can't declare super formal parameters.",
-        correctionMessage:
-            "Try removing the super formal parameter declaration.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeConstructorWithSuperInvocation = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION',
-    problemMessage:
-        "Extension type constructors can't include super initializers.",
-    correctionMessage: "Try removing the super constructor invocation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeDeclaresInstanceField = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_TYPE_DECLARES_INSTANCE_FIELD',
-    problemMessage: "Extension types can't declare instance fields.",
-    correctionMessage: "Try replacing the field with a getter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_DECLARES_INSTANCE_FIELD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeDeclaresMemberOfObject = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT',
-    problemMessage:
-        "Extension types can't declare members with the same name as a member "
-        "declared by 'Object'.",
-    correctionMessage: "Try specifying a different name for the member.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the display string of the disallowed type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  extensionTypeImplementsDisallowedType = CompileTimeErrorTemplate(
-    name: 'EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE',
-    problemMessage: "Extension types can't implement '{0}'.",
-    correctionMessage:
-        "Try specifying a different type, or remove the type from the list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE',
-    withArguments: _withArgumentsExtensionTypeImplementsDisallowedType,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeImplementsItself = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_TYPE_IMPLEMENTS_ITSELF',
-    problemMessage: "The extension type can't implement itself.",
-    correctionMessage:
-        "Try removing the superinterface that references this extension type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_ITSELF',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the implemented not extension type
-  /// Type p1: the ultimate representation type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  extensionTypeImplementsNotSupertype = CompileTimeErrorTemplate(
-    name: 'EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE',
-    problemMessage:
-        "'{0}' is not a supertype of '{1}', the representation type.",
-    correctionMessage:
-        "Try specifying a different type, or remove the type from the list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE',
-    withArguments: _withArgumentsExtensionTypeImplementsNotSupertype,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the representation type of the implemented extension type
-  /// String p1: the name of the implemented extension type
-  /// Type p2: the representation type of the this extension type
-  /// String p3: the name of the this extension type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required String p1,
-      required DartType p2,
-      required String p3,
-    })
-  >
-  extensionTypeImplementsRepresentationNotSupertype = CompileTimeErrorTemplate(
-    name: 'EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE',
-    problemMessage:
-        "'{0}', the representation type of '{1}', is not a supertype of '{2}', the "
-        "representation type of '{3}'.",
-    correctionMessage:
-        "Try specifying a different type, or remove the type from the list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE',
-    withArguments:
-        _withArgumentsExtensionTypeImplementsRepresentationNotSupertype,
-    expectedTypes: [
-      ExpectedType.type,
-      ExpectedType.string,
-      ExpectedType.type,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the extension type
-  /// String p1: the name of the conflicting member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  extensionTypeInheritedMemberConflict = CompileTimeErrorTemplate(
-    name: 'EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT',
-    problemMessage:
-        "The extension type '{0}' has more than one distinct member named '{1}' "
-        "from implemented types.",
-    correctionMessage:
-        "Try redeclaring the corresponding member in this extension type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT',
-    withArguments: _withArgumentsExtensionTypeInheritedMemberConflict,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeRepresentationDependsOnItself = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF',
-    problemMessage: "The extension type representation can't depend on itself.",
-    correctionMessage: "Try specifying a different type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  extensionTypeRepresentationTypeBottom = CompileTimeErrorWithoutArguments(
-    name: 'EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM',
-    problemMessage: "The representation type can't be a bottom type.",
-    correctionMessage: "Try specifying a different type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the abstract method
-  /// String p1: the name of the enclosing extension type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  extensionTypeWithAbstractMember = CompileTimeErrorTemplate(
-    name: 'EXTENSION_TYPE_WITH_ABSTRACT_MEMBER',
-    problemMessage:
-        "'{0}' must have a method body because '{1}' is an extension type.",
-    correctionMessage: "Try adding a body to '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTENSION_TYPE_WITH_ABSTRACT_MEMBER',
-    withArguments: _withArgumentsExtensionTypeWithAbstractMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  externalFieldConstructorInitializer = CompileTimeErrorWithoutArguments(
-    name: '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,
-    uniqueName: 'EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments externalFieldInitializer =
-      CompileTimeErrorWithoutArguments(
-        name: 'EXTERNAL_WITH_INITIALIZER',
-        problemMessage: "External fields can't have initializers.",
-        correctionMessage:
-            "Try removing the initializer or the 'external' keyword.",
-        hasPublishedDocs: true,
-        uniqueName: 'EXTERNAL_FIELD_INITIALIZER',
-        uniqueNameCheck: 'CompileTimeErrorCode.EXTERNAL_FIELD_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments externalVariableInitializer =
-      CompileTimeErrorWithoutArguments(
-        name: 'EXTERNAL_WITH_INITIALIZER',
-        problemMessage: "External variables can't have initializers.",
-        correctionMessage:
-            "Try removing the initializer or the 'external' keyword.",
-        hasPublishedDocs: true,
-        uniqueName: 'EXTERNAL_VARIABLE_INITIALIZER',
-        uniqueNameCheck: 'CompileTimeErrorCode.EXTERNAL_VARIABLE_INITIALIZER',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// int p0: the maximum number of positional arguments
-  /// int p1: the actual number of positional arguments given
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  extraPositionalArguments = CompileTimeErrorTemplate(
-    name: 'EXTRA_POSITIONAL_ARGUMENTS',
-    problemMessage:
-        "Too many positional arguments: {0} expected, but {1} found.",
-    correctionMessage: "Try removing the extra arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS',
-    withArguments: _withArgumentsExtraPositionalArguments,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the maximum number of positional arguments
-  /// int p1: the actual number of positional arguments given
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  extraPositionalArgumentsCouldBeNamed = CompileTimeErrorTemplate(
-    name: 'EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED',
-    problemMessage:
-        "Too many positional arguments: {0} expected, but {1} found.",
-    correctionMessage:
-        "Try removing the extra positional arguments, or specifying the name "
-        "for named arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED',
-    withArguments: _withArgumentsExtraPositionalArgumentsCouldBeNamed,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the field being initialized multiple times
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  fieldInitializedByMultipleInitializers = CompileTimeErrorTemplate(
-    name: 'FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
-    problemMessage:
-        "The field '{0}' can't be initialized twice in the same constructor.",
-    correctionMessage: "Try removing one of the initializations.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS',
-    withArguments: _withArgumentsFieldInitializedByMultipleInitializers,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  fieldInitializedInInitializerAndDeclaration = CompileTimeErrorWithoutArguments(
-    name: 'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
-    problemMessage:
-        "Fields can't be initialized in the constructor if they are final and were "
-        "already initialized at their declaration.",
-    correctionMessage: "Try removing one of the initializations.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  fieldInitializedInParameterAndInitializer = CompileTimeErrorWithoutArguments(
-    name: 'FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER',
-    problemMessage:
-        "Fields can't be initialized in both the parameter list and the "
-        "initializers.",
-    correctionMessage: "Try removing one of the initializations.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  fieldInitializerFactoryConstructor = CompileTimeErrorWithoutArguments(
-    name: 'FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
-    problemMessage:
-        "Initializing formal parameters can't be used in factory constructors.",
-    correctionMessage: "Try using a normal parameter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the type of the initializer expression
-  /// Type p1: the name of the type of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  fieldInitializerNotAssignable = CompileTimeErrorTemplate(
-    name: 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
-    problemMessage:
-        "The initializer type '{0}' can't be assigned to the field type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsFieldInitializerNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  fieldInitializerOutsideConstructor = CompileTimeErrorWithoutArguments(
-    name: 'FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
-    problemMessage:
-        "Field formal parameters can only be used in a constructor.",
-    correctionMessage: "Try removing 'this.'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  fieldInitializerRedirectingConstructor = CompileTimeErrorWithoutArguments(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the type of the field formal parameter
-  /// Type p1: the name of the type of the field
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  fieldInitializingFormalNotAssignable = CompileTimeErrorTemplate(
-    name: 'FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
-    problemMessage:
-        "The parameter type '{0}' is incompatible with the field type '{1}'.",
-    correctionMessage:
-        "Try changing or removing the parameter's type, or changing the "
-        "field's type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsFieldInitializingFormalNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the final class being extended.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  finalClassExtendedOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The class '{0}' can't be extended outside of its library because it's a "
-        "final class.",
-    hasPublishedDocs: true,
-    uniqueName: 'FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY',
-    withArguments: _withArgumentsFinalClassExtendedOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the final class being implemented.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  finalClassImplementedOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The class '{0}' can't be implemented outside of its library because it's "
-        "a final class.",
-    hasPublishedDocs: true,
-    uniqueName: 'FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY',
-    withArguments: _withArgumentsFinalClassImplementedOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the final class being used as a mixin superclass
-  ///            constraint.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  finalClassUsedAsMixinConstraintOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The class '{0}' can't be used as a mixin superclass constraint outside of "
-        "its library because it's a final class.",
-    hasPublishedDocs: true,
-    uniqueName: 'FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY',
-    withArguments:
-        _withArgumentsFinalClassUsedAsMixinConstraintOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the field in question
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  finalInitializedInDeclarationAndConstructor = CompileTimeErrorTemplate(
-    name: 'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
-    problemMessage:
-        "'{0}' is final and was given a value when it was declared, so it can't be "
-        "set to a new value.",
-    correctionMessage: "Try removing one of the initializations.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
-    withArguments: _withArgumentsFinalInitializedInDeclarationAndConstructor,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the uninitialized final variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  finalNotInitialized = CompileTimeErrorTemplate(
-    name: 'FINAL_NOT_INITIALIZED',
-    problemMessage: "The final variable '{0}' must be initialized.",
-    correctionMessage: "Try initializing the variable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.FINAL_NOT_INITIALIZED',
-    withArguments: _withArgumentsFinalNotInitialized,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the uninitialized final variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  finalNotInitializedConstructor1 = CompileTimeErrorTemplate(
-    name: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
-    problemMessage: "All final variables must be initialized, but '{0}' isn't.",
-    correctionMessage: "Try adding an initializer for the field.",
-    hasPublishedDocs: true,
-    uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
-    uniqueNameCheck: 'CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
-    withArguments: _withArgumentsFinalNotInitializedConstructor1,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the uninitialized final variable
-  /// String p1: the name of the uninitialized final variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  finalNotInitializedConstructor2 = CompileTimeErrorTemplate(
-    name: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
-    problemMessage:
-        "All final variables must be initialized, but '{0}' and '{1}' aren't.",
-    correctionMessage: "Try adding initializers for the fields.",
-    hasPublishedDocs: true,
-    uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
-    uniqueNameCheck: 'CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
-    withArguments: _withArgumentsFinalNotInitializedConstructor2,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the uninitialized final variable
-  /// String p1: the name of the uninitialized final variable
-  /// int p2: the number of additional not initialized variables that aren't
-  ///         listed
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required int p2,
-    })
-  >
-  finalNotInitializedConstructor3Plus = CompileTimeErrorTemplate(
-    name: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
-    problemMessage:
-        "All final variables must be initialized, but '{0}', '{1}', and {2} others "
-        "aren't.",
-    correctionMessage: "Try adding initializers for the fields.",
-    hasPublishedDocs: true,
-    uniqueName: 'FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS',
-    withArguments: _withArgumentsFinalNotInitializedConstructor3Plus,
-    expectedTypes: [ExpectedType.string, ExpectedType.string, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the iterable expression.
-  /// String p1: the sequence type -- Iterable for `for` or Stream for `await
-  ///            for`.
-  /// Type p2: the loop variable type.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required String p1,
-      required DartType p2,
-    })
-  >
-  forInOfInvalidElementType = CompileTimeErrorTemplate(
-    name: 'FOR_IN_OF_INVALID_ELEMENT_TYPE',
-    problemMessage:
-        "The type '{0}' used in the 'for' loop must implement '{1}' with a type "
-        "argument that can be assigned to '{2}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.FOR_IN_OF_INVALID_ELEMENT_TYPE',
-    withArguments: _withArgumentsForInOfInvalidElementType,
-    expectedTypes: [ExpectedType.type, ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the iterable expression.
-  /// String p1: the sequence type -- Iterable for `for` or Stream for `await
-  ///            for`.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required String p1})
-  >
-  forInOfInvalidType = CompileTimeErrorTemplate(
-    name: 'FOR_IN_OF_INVALID_TYPE',
-    problemMessage:
-        "The type '{0}' used in the 'for' loop must implement '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.FOR_IN_OF_INVALID_TYPE',
-    withArguments: _withArgumentsForInOfInvalidType,
-    expectedTypes: [ExpectedType.type, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments forInWithConstVariable =
-      CompileTimeErrorWithoutArguments(
-        name: 'FOR_IN_WITH_CONST_VARIABLE',
-        problemMessage: "A for-in loop variable can't be a 'const'.",
-        correctionMessage:
-            "Try removing the 'const' modifier from the variable, or use a "
-            "different variable.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE',
-        expectedTypes: [],
-      );
-
-  /// It is a compile-time error if a generic function type is used as a bound
-  /// for a formal type parameter of a class or a function.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  genericFunctionTypeCannotBeBound = CompileTimeErrorWithoutArguments(
-    name: 'GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND',
-    problemMessage:
-        "Generic function types can't be used as type parameter bounds.",
-    correctionMessage:
-        "Try making the free variable in the function type part of the larger "
-        "declaration signature.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND',
-    expectedTypes: [],
-  );
-
-  /// It is a compile-time error if a generic function type is used as an actual
-  /// type argument.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  genericFunctionTypeCannotBeTypeArgument = CompileTimeErrorWithoutArguments(
-    name: 'GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT',
-    problemMessage: "A generic function type can't be a type argument.",
-    correctionMessage:
-        "Try removing type parameters from the generic function type, or using "
-        "'dynamic' as the type argument here.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  genericMethodTypeInstantiationOnDynamic = CompileTimeErrorWithoutArguments(
-    name: 'GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC',
-    problemMessage:
-        "A method tear-off on a receiver whose type is 'dynamic' can't have type "
-        "arguments.",
-    correctionMessage:
-        "Specify the type of the receiver, or remove the type arguments from "
-        "the method tear-off.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the getter
-  /// Object p1: the type of the getter
-  /// Object p2: the type of the setter
-  /// Object p3: the name of the setter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-    })
-  >
-  getterNotAssignableSetterTypes = CompileTimeErrorTemplate(
-    name: 'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
-    problemMessage:
-        "The return type of getter '{0}' is '{1}' which isn't assignable to the "
-        "type '{2}' of its setter '{3}'.",
-    correctionMessage: "Try changing the types so that they are compatible.",
-    uniqueNameCheck: 'CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
-    withArguments: _withArgumentsGetterNotAssignableSetterTypes,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the getter
-  /// Object p1: the type of the getter
-  /// Object p2: the type of the setter
-  /// Object p3: the name of the setter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-    })
-  >
-  getterNotSubtypeSetterTypes = CompileTimeErrorTemplate(
-    name: 'GETTER_NOT_SUBTYPE_SETTER_TYPES',
-    problemMessage:
-        "The return type of getter '{0}' is '{1}' which isn't a subtype of the "
-        "type '{2}' of its setter '{3}'.",
-    correctionMessage: "Try changing the types so that they are compatible.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES',
-    withArguments: _withArgumentsGetterNotSubtypeSetterTypes,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  ifElementConditionFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as values in an if "
-        "condition inside a const collection literal.",
-    correctionMessage: "Try making the deferred import non-deferred.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  illegalAsyncGeneratorReturnType = CompileTimeErrorWithoutArguments(
-    name: 'ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
-    problemMessage:
-        "Functions marked 'async*' must have a return type that is a supertype of "
-        "'Stream<T>' for some type 'T'.",
-    correctionMessage:
-        "Try fixing the return type of the function, or removing the modifier "
-        "'async*' from the function body.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  illegalAsyncReturnType = CompileTimeErrorWithoutArguments(
-    name: 'ILLEGAL_ASYNC_RETURN_TYPE',
-    problemMessage:
-        "Functions marked 'async' must have a return type which is a supertype of "
-        "'Future'.",
-    correctionMessage:
-        "Try fixing the return type of the function, or removing the modifier "
-        "'async' from the function body.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of member that cannot be declared
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  illegalConcreteEnumMemberDeclaration = CompileTimeErrorTemplate(
-    name: 'ILLEGAL_CONCRETE_ENUM_MEMBER',
-    problemMessage:
-        "A concrete instance member named '{0}' can't be declared in a class that "
-        "implements 'Enum'.",
-    correctionMessage: "Try using a different name.",
-    hasPublishedDocs: true,
-    uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION',
-    withArguments: _withArgumentsIllegalConcreteEnumMemberDeclaration,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of member that cannot be inherited
-  /// String p1: the name of the class that declares the member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  illegalConcreteEnumMemberInheritance = CompileTimeErrorTemplate(
-    name: 'ILLEGAL_CONCRETE_ENUM_MEMBER',
-    problemMessage:
-        "A concrete instance member named '{0}' can't be inherited from '{1}' in a "
-        "class that implements 'Enum'.",
-    correctionMessage: "Try using a different name.",
-    hasPublishedDocs: true,
-    uniqueName: 'ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE',
-    withArguments: _withArgumentsIllegalConcreteEnumMemberInheritance,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  illegalEnumValuesDeclaration = CompileTimeErrorWithoutArguments(
-    name: 'ILLEGAL_ENUM_VALUES',
-    problemMessage:
-        "An instance member named 'values' can't be declared in a class that "
-        "implements 'Enum'.",
-    correctionMessage: "Try using a different name.",
-    hasPublishedDocs: true,
-    uniqueName: 'ILLEGAL_ENUM_VALUES_DECLARATION',
-    uniqueNameCheck: 'CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class that declares 'values'
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  illegalEnumValuesInheritance = CompileTimeErrorTemplate(
-    name: 'ILLEGAL_ENUM_VALUES',
-    problemMessage:
-        "An instance member named 'values' can't be inherited from '{0}' in a "
-        "class that implements 'Enum'.",
-    correctionMessage: "Try using a different name.",
-    hasPublishedDocs: true,
-    uniqueName: 'ILLEGAL_ENUM_VALUES_INHERITANCE',
-    uniqueNameCheck: 'CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE',
-    withArguments: _withArgumentsIllegalEnumValuesInheritance,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the required language version
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  illegalLanguageVersionOverride = CompileTimeErrorTemplate(
-    name: 'ILLEGAL_LANGUAGE_VERSION_OVERRIDE',
-    problemMessage: "The language version must be {0}.",
-    correctionMessage:
-        "Try removing the language version override and migrating the code.",
-    uniqueNameCheck: 'CompileTimeErrorCode.ILLEGAL_LANGUAGE_VERSION_OVERRIDE',
-    withArguments: _withArgumentsIllegalLanguageVersionOverride,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  illegalSyncGeneratorReturnType = CompileTimeErrorWithoutArguments(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments implementsDeferredClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUBTYPE_OF_DEFERRED_CLASS',
-        problemMessage: "Classes and mixins can't implement deferred classes.",
-        correctionMessage:
-            "Try specifying a different interface, removing the class from the "
-            "list, or changing the import to not be deferred.",
-        hasPublishedDocs: true,
-        uniqueName: 'IMPLEMENTS_DEFERRED_CLASS',
-        uniqueNameCheck: 'CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the name of the disallowed type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  implementsDisallowedClass = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_DISALLOWED_TYPE',
-    problemMessage: "Classes and mixins can't implement '{0}'.",
-    correctionMessage:
-        "Try specifying a different interface, or remove the class from the "
-        "list.",
-    hasPublishedDocs: true,
-    uniqueName: 'IMPLEMENTS_DISALLOWED_CLASS',
-    uniqueNameCheck: 'CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS',
-    withArguments: _withArgumentsImplementsDisallowedClass,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  implementsNonClass = CompileTimeErrorWithoutArguments(
-    name: 'IMPLEMENTS_NON_CLASS',
-    problemMessage:
-        "Classes and mixins can only implement other classes and mixins.",
-    correctionMessage:
-        "Try specifying a class or mixin, or remove the name from the list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.IMPLEMENTS_NON_CLASS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the interface that is implemented more than once
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  implementsRepeated = CompileTimeErrorTemplate(
-    name: 'IMPLEMENTS_REPEATED',
-    problemMessage: "'{0}' can only be implemented once.",
-    correctionMessage: "Try removing all but one occurrence of the class name.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.IMPLEMENTS_REPEATED',
-    withArguments: _withArgumentsImplementsRepeated,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Element p0: the name of the class that appears in both "extends" and
-  ///             "implements" clauses
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Element p0})
-  >
-  implementsSuperClass = CompileTimeErrorTemplate(
-    name: 'IMPLEMENTS_SUPER_CLASS',
-    problemMessage:
-        "'{0}' can't be used in both the 'extends' and 'implements' clauses.",
-    correctionMessage: "Try removing one of the occurrences.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS',
-    withArguments: _withArgumentsImplementsSuperClass,
-    expectedTypes: [ExpectedType.element],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  implementsTypeAliasExpandsToTypeParameter = CompileTimeErrorWithoutArguments(
-    name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
-    problemMessage:
-        "A type alias that expands to a type parameter can't be implemented.",
-    correctionMessage: "Try specifying a class or mixin, or removing the list.",
-    hasPublishedDocs: true,
-    uniqueName: 'IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the superclass
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  implicitSuperInitializerMissingArguments = CompileTimeErrorTemplate(
-    name: 'IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS',
-    problemMessage:
-        "The implicitly invoked unnamed constructor from '{0}' has required "
-        "parameters.",
-    correctionMessage:
-        "Try adding an explicit super parameter with the required arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS',
-    withArguments: _withArgumentsImplicitSuperInitializerMissingArguments,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the instance member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  implicitThisReferenceInInitializer = CompileTimeErrorTemplate(
-    name: 'IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
-    problemMessage:
-        "The instance member '{0}' can't be accessed in an initializer.",
-    correctionMessage:
-        "Try replacing the reference to the instance member with a different "
-        "expression",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER',
-    withArguments: _withArgumentsImplicitThisReferenceInInitializer,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a library
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  importInternalLibrary = CompileTimeErrorTemplate(
-    name: 'IMPORT_INTERNAL_LIBRARY',
-    problemMessage: "The library '{0}' is internal and can't be imported.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY',
-    withArguments: _withArgumentsImportInternalLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a non-library declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  importOfNonLibrary = CompileTimeErrorTemplate(
-    name: 'IMPORT_OF_NON_LIBRARY',
-    problemMessage:
-        "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,
-    uniqueNameCheck: 'CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY',
-    withArguments: _withArgumentsImportOfNonLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 13.9 Switch: It is a compile-time error if values of the expressions
-  /// <i>e<sub>k</sub></i> are not instances of the same class <i>C</i>, for all
-  /// <i>1 &lt;= k &lt;= n</i>.
-  ///
-  /// Parameters:
-  /// Object p0: the expression source code that is the unexpected type
-  /// Object p1: the name of the expected type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  inconsistentCaseExpressionTypes = CompileTimeErrorTemplate(
-    name: 'INCONSISTENT_CASE_EXPRESSION_TYPES',
-    problemMessage:
-        "Case expressions must have the same types, '{0}' isn't a '{1}'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INCONSISTENT_CASE_EXPRESSION_TYPES',
-    withArguments: _withArgumentsInconsistentCaseExpressionTypes,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the instance member with inconsistent inheritance.
-  /// String p1: the list of all inherited signatures for this member.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  inconsistentInheritance = CompileTimeErrorTemplate(
-    name: 'INCONSISTENT_INHERITANCE',
-    problemMessage:
-        "Superinterfaces don't have a valid override for '{0}': {1}.",
-    correctionMessage:
-        "Try adding an explicit override that is consistent with all of the "
-        "inherited members.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INCONSISTENT_INHERITANCE',
-    withArguments: _withArgumentsInconsistentInheritance,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// 11.1.1 Inheritance and Overriding. Let `I` be the implicit interface of a
-  /// class `C` declared in library `L`. `I` inherits all members of
-  /// `inherited(I, L)` and `I` overrides `m'` if `m' ∈ overrides(I, L)`. It is
-  /// a compile-time error if `m` is a method and `m'` is a getter, or if `m`
-  /// is a getter and `m'` is a method.
-  ///
-  /// Parameters:
-  /// String p0: the name of the instance member with inconsistent inheritance.
-  /// String p1: the name of the superinterface that declares the name as a
-  ///            getter.
-  /// String p2: the name of the superinterface that declares the name as a
-  ///            method.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  inconsistentInheritanceGetterAndMethod = CompileTimeErrorTemplate(
-    name: 'INCONSISTENT_INHERITANCE_GETTER_AND_METHOD',
-    problemMessage:
-        "'{0}' is inherited as a getter (from '{1}') and also a method (from "
-        "'{2}').",
-    correctionMessage:
-        "Try adjusting the supertypes of this class to remove the "
-        "inconsistency.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INCONSISTENT_INHERITANCE_GETTER_AND_METHOD',
-    withArguments: _withArgumentsInconsistentInheritanceGetterAndMethod,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  inconsistentLanguageVersionOverride = CompileTimeErrorWithoutArguments(
-    name: 'INCONSISTENT_LANGUAGE_VERSION_OVERRIDE',
-    problemMessage:
-        "Parts must have exactly the same language version override as the "
-        "library.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the pattern variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inconsistentPatternVariableLogicalOr = CompileTimeErrorTemplate(
-    name: 'INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR',
-    problemMessage:
-        "The variable '{0}' has a different type and/or finality in this branch of "
-        "the logical-or pattern.",
-    correctionMessage:
-        "Try declaring the variable pattern with the same type and finality in "
-        "both branches.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR',
-    withArguments: _withArgumentsInconsistentPatternVariableLogicalOr,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the initializing formal that is not an instance
-  ///            variable in the immediately enclosing class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  initializerForNonExistentField = CompileTimeErrorTemplate(
-    name: '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}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD',
-    withArguments: _withArgumentsInitializerForNonExistentField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the initializing formal that is a static variable
-  ///            in the immediately enclosing class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  initializerForStaticField = CompileTimeErrorTemplate(
-    name: 'INITIALIZER_FOR_STATIC_FIELD',
-    problemMessage:
-        "'{0}' is a static field in the enclosing class. Fields initialized in a "
-        "constructor can't be static.",
-    correctionMessage: "Try removing the initialization.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD',
-    withArguments: _withArgumentsInitializerForStaticField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the initializing formal that is not an instance
-  ///            variable in the immediately enclosing class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  initializingFormalForNonExistentField = CompileTimeErrorTemplate(
-    name: 'INITIALIZING_FORMAL_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}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD',
-    withArguments: _withArgumentsInitializingFormalForNonExistentField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the static member
-  /// String p1: the kind of the static member (field, getter, setter, or
-  ///            method)
-  /// String p2: the name of the static member's enclosing element
-  /// String p3: the kind of the static member's enclosing element (class,
-  ///            mixin, or extension)
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-      required String p3,
-    })
-  >
-  instanceAccessToStaticMember = CompileTimeErrorTemplate(
-    name: 'INSTANCE_ACCESS_TO_STATIC_MEMBER',
-    problemMessage:
-        "The static {1} '{0}' can't be accessed through an instance.",
-    correctionMessage: "Try using the {3} '{2}' to access the {1}.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER',
-    withArguments: _withArgumentsInstanceAccessToStaticMember,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the static member
-  /// Object p1: the kind of the static member (field, getter, setter, or
-  ///            method)
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  instanceAccessToStaticMemberOfUnnamedExtension = CompileTimeErrorTemplate(
-    name: 'INSTANCE_ACCESS_TO_STATIC_MEMBER',
-    problemMessage:
-        "The static {1} '{0}' can't be accessed through an instance.",
-    hasPublishedDocs: true,
-    uniqueName: 'INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION',
-    withArguments: _withArgumentsInstanceAccessToStaticMemberOfUnnamedExtension,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  instanceMemberAccessFromFactory = CompileTimeErrorWithoutArguments(
-    name: 'INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
-    problemMessage:
-        "Instance members can't be accessed from a factory constructor.",
-    correctionMessage: "Try removing the reference to the instance member.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  instanceMemberAccessFromStatic = CompileTimeErrorWithoutArguments(
-    name: 'INSTANCE_MEMBER_ACCESS_FROM_STATIC',
-    problemMessage: "Instance members can't be accessed from a static method.",
-    correctionMessage:
-        "Try removing the reference to the instance member, or removing the "
-        "keyword 'static' from the method.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments instantiateAbstractClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'INSTANTIATE_ABSTRACT_CLASS',
-        problemMessage: "Abstract classes can't be instantiated.",
-        correctionMessage: "Try creating an instance of a concrete subtype.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments instantiateEnum =
-      CompileTimeErrorWithoutArguments(
-        name: 'INSTANTIATE_ENUM',
-        problemMessage: "Enums can't be instantiated.",
-        correctionMessage: "Try using one of the defined constants.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.INSTANTIATE_ENUM',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  instantiateTypeAliasExpandsToTypeParameter = CompileTimeErrorWithoutArguments(
-    name: 'INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    problemMessage:
-        "Type aliases that expand to a type parameter can't be instantiated.",
-    correctionMessage: "Try replacing it with a class.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the lexeme of the integer
-  /// String p1: the closest valid double
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  integerLiteralImpreciseAsDouble = CompileTimeErrorTemplate(
-    name: 'INTEGER_LITERAL_IMPRECISE_AS_DOUBLE',
-    problemMessage:
-        "The integer literal is being used as a double, but can't be represented "
-        "as a 64-bit double without overflow or loss of precision: '{0}'.",
-    correctionMessage:
-        "Try using the class 'BigInt', or switch to the closest valid double: "
-        "'{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE',
-    withArguments: _withArgumentsIntegerLiteralImpreciseAsDouble,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the value of the literal
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  integerLiteralOutOfRange = CompileTimeErrorTemplate(
-    name: 'INTEGER_LITERAL_OUT_OF_RANGE',
-    problemMessage: "The integer literal {0} can't be represented in 64 bits.",
-    correctionMessage:
-        "Try using the 'BigInt' class if you need an integer larger than "
-        "9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INTEGER_LITERAL_OUT_OF_RANGE',
-    withArguments: _withArgumentsIntegerLiteralOutOfRange,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the interface class being extended.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  interfaceClassExtendedOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The class '{0}' can't be extended outside of its library because it's an "
-        "interface class.",
-    hasPublishedDocs: true,
-    uniqueName: 'INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY',
-    withArguments: _withArgumentsInterfaceClassExtendedOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidAnnotation = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_ANNOTATION',
-    problemMessage:
-        "Annotation must be either a const variable reference or const constructor "
-        "invocation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidAnnotationConstantValueFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used in annotations.",
-    correctionMessage:
-        "Try moving the constant from the deferred library, or removing "
-        "'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidAnnotationFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as annotations.",
-    correctionMessage:
-        "Try removing the annotation, or changing the import to not be "
-        "deferred.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the right hand side type
-  /// Type p1: the name of the left hand side type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  invalidAssignment = CompileTimeErrorTemplate(
-    name: 'INVALID_ASSIGNMENT',
-    problemMessage:
-        "A value of type '{0}' can't be assigned to a variable of type '{1}'.",
-    correctionMessage:
-        "Try changing the type of the variable, or casting the right-hand type "
-        "to '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_ASSIGNMENT',
-    withArguments: _withArgumentsInvalidAssignment,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the name of the function
-  /// Object p1: the type of the function
-  /// Object p2: the expected function type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  invalidCastFunction = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_FUNCTION',
-    problemMessage:
-        "The function '{0}' has type '{1}' that isn't of expected type '{2}'. This "
-        "means its parameter or return type doesn't match what is expected.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_FUNCTION',
-    withArguments: _withArgumentsInvalidCastFunction,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the type of the torn-off function expression
-  /// Object p1: the expected function type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidCastFunctionExpr = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_FUNCTION_EXPR',
-    problemMessage:
-        "The function expression type '{0}' isn't of type '{1}'. This means its "
-        "parameter or return type doesn't match what is expected. Consider "
-        "changing parameter type(s) or the returned type(s).",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_FUNCTION_EXPR',
-    withArguments: _withArgumentsInvalidCastFunctionExpr,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the lexeme of the literal
-  /// Object p1: the type of the literal
-  /// Object p2: the expected type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  invalidCastLiteral = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_LITERAL',
-    problemMessage:
-        "The literal '{0}' with type '{1}' isn't of expected type '{2}'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_LITERAL',
-    withArguments: _withArgumentsInvalidCastLiteral,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the type of the list literal
-  /// Object p1: the expected type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidCastLiteralList = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_LITERAL_LIST',
-    problemMessage:
-        "The list literal type '{0}' isn't of expected type '{1}'. The list's type "
-        "can be changed with an explicit generic type argument or by changing "
-        "the element types.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST',
-    withArguments: _withArgumentsInvalidCastLiteralList,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the type of the map literal
-  /// Object p1: the expected type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidCastLiteralMap = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_LITERAL_MAP',
-    problemMessage:
-        "The map literal type '{0}' isn't of expected type '{1}'. The map's type "
-        "can be changed with an explicit generic type arguments or by changing "
-        "the key and value types.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP',
-    withArguments: _withArgumentsInvalidCastLiteralMap,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the type of the set literal
-  /// Object p1: the expected type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidCastLiteralSet = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_LITERAL_SET',
-    problemMessage:
-        "The set literal type '{0}' isn't of expected type '{1}'. The set's type "
-        "can be changed with an explicit generic type argument or by changing "
-        "the element types.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_LITERAL_SET',
-    withArguments: _withArgumentsInvalidCastLiteralSet,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the name of the torn-off method
-  /// Object p1: the type of the torn-off method
-  /// Object p2: the expected function type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  invalidCastMethod = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_METHOD',
-    problemMessage:
-        "The method tear-off '{0}' has type '{1}' that isn't of expected type "
-        "'{2}'. This means its parameter or return type doesn't match what is "
-        "expected.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_METHOD',
-    withArguments: _withArgumentsInvalidCastMethod,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// This error is only reported in libraries which are not null safe.
-  ///
-  /// Parameters:
-  /// Object p0: the type of the instantiated object
-  /// Object p1: the expected type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidCastNewExpr = CompileTimeErrorTemplate(
-    name: 'INVALID_CAST_NEW_EXPR',
-    problemMessage:
-        "The constructor returns type '{0}' that isn't of expected type '{1}'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CAST_NEW_EXPR',
-    withArguments: _withArgumentsInvalidCastNewExpr,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// TODO(brianwilkerson): Remove this when we have decided on how to report
-  /// errors in compile-time constants. Until then, this acts as a placeholder
-  /// for more informative errors.
-  ///
-  /// See TODOs in ConstantVisitor
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments invalidConstant =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_CONSTANT',
-        problemMessage: "Invalid constant value.",
-        uniqueNameCheck: 'CompileTimeErrorCode.INVALID_CONSTANT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidExtensionArgumentCount = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_EXTENSION_ARGUMENT_COUNT',
-    problemMessage:
-        "Extension overrides must have exactly one argument: the value of 'this' "
-        "in the extension method.",
-    correctionMessage: "Try specifying exactly one argument.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_EXTENSION_ARGUMENT_COUNT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidFactoryNameNotAClass = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_FACTORY_NAME_NOT_A_CLASS',
-    problemMessage:
-        "The name of a factory constructor must be the same as the name of the "
-        "immediately enclosing class.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_FACTORY_NAME_NOT_A_CLASS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments invalidFieldNameFromObject =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_FIELD_NAME',
-        problemMessage:
-            "Record field names can't be the same as a member from 'Object'.",
-        correctionMessage: "Try using a different name for the field.",
-        hasPublishedDocs: true,
-        uniqueName: 'INVALID_FIELD_NAME_FROM_OBJECT',
-        uniqueNameCheck: 'CompileTimeErrorCode.INVALID_FIELD_NAME_FROM_OBJECT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidFieldNamePositional = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_FIELD_NAME',
-    problemMessage:
-        "Record field names can't be a dollar sign followed by an integer when the "
-        "integer is the index of a positional field.",
-    correctionMessage: "Try using a different name for the field.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_FIELD_NAME_POSITIONAL',
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_FIELD_NAME_POSITIONAL',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments invalidFieldNamePrivate =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_FIELD_NAME',
-        problemMessage: "Record field names can't be private.",
-        correctionMessage: "Try removing the leading underscore.",
-        hasPublishedDocs: true,
-        uniqueName: 'INVALID_FIELD_NAME_PRIVATE',
-        uniqueNameCheck: 'CompileTimeErrorCode.INVALID_FIELD_NAME_PRIVATE',
-        expectedTypes: [],
-      );
-
-  /// The parameters of this error code must be kept in sync with those of
-  /// [CompileTimeErrorCode.invalidOverride].
-  ///
-  /// Parameters:
-  /// Object p0: the name of the declared member that is not a valid override.
-  /// Object p1: the name of the interface that declares the member.
-  /// Object p2: the type of the declared member in the interface.
-  /// Object p3: the name of the interface with the overridden member.
-  /// Object p4: the type of the overridden member.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-      required Object p4,
-    })
-  >
-  invalidImplementationOverride = CompileTimeErrorTemplate(
-    name: 'INVALID_IMPLEMENTATION_OVERRIDE',
-    problemMessage:
-        "'{1}.{0}' ('{2}') isn't a valid concrete implementation of '{3}.{0}' "
-        "('{4}').",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE',
-    withArguments: _withArgumentsInvalidImplementationOverride,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// The parameters of this error code must be kept in sync with those of
-  /// [CompileTimeErrorCode.invalidOverride].
-  ///
-  /// Parameters:
-  /// Object p0: the name of the declared setter that is not a valid override.
-  /// Object p1: the name of the interface that declares the setter.
-  /// Object p2: the type of the declared setter in the interface.
-  /// Object p3: the name of the interface with the overridden setter.
-  /// Object p4: the type of the overridden setter.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-      required Object p4,
-    })
-  >
-  invalidImplementationOverrideSetter = CompileTimeErrorTemplate(
-    name: 'INVALID_IMPLEMENTATION_OVERRIDE',
-    problemMessage:
-        "The setter '{1}.{0}' ('{2}') isn't a valid concrete implementation of "
-        "'{3}.{0}' ('{4}').",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_IMPLEMENTATION_OVERRIDE_SETTER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE_SETTER',
-    withArguments: _withArgumentsInvalidImplementationOverrideSetter,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidInlineFunctionType = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_INLINE_FUNCTION_TYPE',
-    problemMessage:
-        "Inline function types can't be used for parameters in a generic function "
-        "type.",
-    correctionMessage:
-        "Try using a generic function type (returnType 'Function(' parameters "
-        "')').",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_INLINE_FUNCTION_TYPE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the invalid modifier
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidModifierOnConstructor = CompileTimeErrorTemplate(
-    name: 'INVALID_MODIFIER_ON_CONSTRUCTOR',
-    problemMessage:
-        "The modifier '{0}' can't be applied to the body of a constructor.",
-    correctionMessage: "Try removing the modifier.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR',
-    withArguments: _withArgumentsInvalidModifierOnConstructor,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments invalidModifierOnSetter =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_MODIFIER_ON_SETTER',
-        problemMessage: "Setters can't use 'async', 'async*', or 'sync*'.",
-        correctionMessage: "Try removing the modifier.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the declared member that is not a valid override.
-  /// String p1: the name of the interface that declares the member.
-  /// Type p2: the type of the declared member in the interface.
-  /// String p3: the name of the interface with the overridden member.
-  /// Type p4: the type of the overridden member.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required DartType p2,
-      required String p3,
-      required DartType p4,
-    })
-  >
-  invalidOverride = CompileTimeErrorTemplate(
-    name: 'INVALID_OVERRIDE',
-    problemMessage:
-        "'{1}.{0}' ('{2}') isn't a valid override of '{3}.{0}' ('{4}').",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_OVERRIDE',
-    withArguments: _withArgumentsInvalidOverride,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.type,
-      ExpectedType.string,
-      ExpectedType.type,
-    ],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the declared setter that is not a valid override.
-  /// Object p1: the name of the interface that declares the setter.
-  /// Object p2: the type of the declared setter in the interface.
-  /// Object p3: the name of the interface with the overridden setter.
-  /// Object p4: the type of the overridden setter.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-      required Object p4,
-    })
-  >
-  invalidOverrideSetter = CompileTimeErrorTemplate(
-    name: 'INVALID_OVERRIDE',
-    problemMessage:
-        "The setter '{1}.{0}' ('{2}') isn't a valid override of '{3}.{0}' ('{4}').",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_OVERRIDE_SETTER',
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_OVERRIDE_SETTER',
-    withArguments: _withArgumentsInvalidOverrideSetter,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidReferenceToGenerativeEnumConstructor = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
-    problemMessage:
-        "Generative enum constructors can only be used to create an enum constant.",
-    correctionMessage: "Try using an enum value, or a factory constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidReferenceToGenerativeEnumConstructorTearoff =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR',
-        problemMessage: "Generative enum constructors can't be torn off.",
-        correctionMessage: "Try using an enum value, or a factory constructor.",
-        hasPublishedDocs: true,
-        uniqueName: 'INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR_TEAROFF',
-        uniqueNameCheck:
-            'CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR_TEAROFF',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments invalidReferenceToThis =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_REFERENCE_TO_THIS',
-        problemMessage: "Invalid reference to 'this' expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidSuperFormalParameterLocation = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_SUPER_FORMAL_PARAMETER_LOCATION',
-    problemMessage:
-        "Super parameters can only be used in non-redirecting generative "
-        "constructors.",
-    correctionMessage:
-        "Try removing the 'super' modifier, or changing the constructor to be "
-        "non-redirecting and generative.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVALID_SUPER_FORMAL_PARAMETER_LOCATION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  invalidTypeArgumentInConstList = CompileTimeErrorTemplate(
-    name: 'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
-    problemMessage:
-        "Constant list literals can't use a type parameter in a type argument, "
-        "such as '{0}'.",
-    correctionMessage:
-        "Try replacing the type parameter with a different type.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_LIST',
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST',
-    withArguments: _withArgumentsInvalidTypeArgumentInConstList,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  invalidTypeArgumentInConstMap = CompileTimeErrorTemplate(
-    name: 'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
-    problemMessage:
-        "Constant map literals can't use a type parameter in a type argument, such "
-        "as '{0}'.",
-    correctionMessage:
-        "Try replacing the type parameter with a different type.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_MAP',
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP',
-    withArguments: _withArgumentsInvalidTypeArgumentInConstMap,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidTypeArgumentInConstSet = CompileTimeErrorTemplate(
-    name: 'INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL',
-    problemMessage:
-        "Constant set literals can't use a type parameter in a type argument, such "
-        "as '{0}'.",
-    correctionMessage:
-        "Try replacing the type parameter with a different type.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_TYPE_ARGUMENT_IN_CONST_SET',
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_SET',
-    withArguments: _withArgumentsInvalidTypeArgumentInConstSet,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidUri = CompileTimeErrorTemplate(
-    name: 'INVALID_URI',
-    problemMessage: "Invalid URI syntax: '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_URI',
-    withArguments: _withArgumentsInvalidUri,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// The 'covariant' keyword was found in an inappropriate location.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invalidUseOfCovariant = CompileTimeErrorWithoutArguments(
-    name: 'INVALID_USE_OF_COVARIANT',
-    problemMessage:
-        "The 'covariant' keyword can only be used for parameters in instance "
-        "methods or before non-final instance fields.",
-    correctionMessage: "Try removing the 'covariant' keyword.",
-    uniqueNameCheck: 'CompileTimeErrorCode.INVALID_USE_OF_COVARIANT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments invalidUseOfNullValue =
-      CompileTimeErrorWithoutArguments(
-        name: 'INVALID_USE_OF_NULL_VALUE',
-        problemMessage:
-            "An expression whose value is always 'null' can't be dereferenced.",
-        correctionMessage: "Try changing the type of the expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the extension
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invocationOfExtensionWithoutCall = CompileTimeErrorTemplate(
-    name: 'INVOCATION_OF_EXTENSION_WITHOUT_CALL',
-    problemMessage:
-        "The extension '{0}' doesn't define a 'call' method so the override can't "
-        "be used in an invocation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVOCATION_OF_EXTENSION_WITHOUT_CALL',
-    withArguments: _withArgumentsInvocationOfExtensionWithoutCall,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the identifier that is not a function type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invocationOfNonFunction = CompileTimeErrorTemplate(
-    name: 'INVOCATION_OF_NON_FUNCTION',
-    problemMessage: "'{0}' isn't a function.",
-    correctionMessage:
-        "Try correcting the name to match an existing function, or define a "
-        "method or function named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION',
-    withArguments: _withArgumentsInvocationOfNonFunction,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  invocationOfNonFunctionExpression = CompileTimeErrorWithoutArguments(
-    name: 'INVOCATION_OF_NON_FUNCTION_EXPRESSION',
-    problemMessage:
-        "The expression doesn't evaluate to a function, so it can't be invoked.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the unresolvable label
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  labelInOuterScope = CompileTimeErrorTemplate(
-    name: 'LABEL_IN_OUTER_SCOPE',
-    problemMessage: "Can't reference label '{0}' declared in an outer method.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE',
-    withArguments: _withArgumentsLabelInOuterScope,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the unresolvable label
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  labelUndefined = CompileTimeErrorTemplate(
-    name: 'LABEL_UNDEFINED',
-    problemMessage: "Can't reference an undefined label '{0}'.",
-    correctionMessage:
-        "Try defining the label, or correcting the name to match an existing "
-        "label.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.LABEL_UNDEFINED',
-    withArguments: _withArgumentsLabelUndefined,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  lateFinalFieldWithConstConstructor = CompileTimeErrorWithoutArguments(
-    name: 'LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
-    problemMessage:
-        "Can't have a late final field in a class with a generative const "
-        "constructor.",
-    correctionMessage:
-        "Try removing the 'late' modifier, or don't declare 'const' "
-        "constructors.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments lateFinalLocalAlreadyAssigned =
-      CompileTimeErrorWithoutArguments(
-        name: 'LATE_FINAL_LOCAL_ALREADY_ASSIGNED',
-        problemMessage: "The late final local variable is already assigned.",
-        correctionMessage:
-            "Try removing the 'final' modifier, or don't reassign the value.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the actual type of the list element
-  /// Type p1: the expected type of the list element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  listElementTypeNotAssignable = CompileTimeErrorTemplate(
-    name: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the list type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsListElementTypeNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the actual type of the list element
-  /// Type p1: the expected type of the list element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  listElementTypeNotAssignableNullability = CompileTimeErrorTemplate(
-    name: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the list type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'LIST_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    withArguments: _withArgumentsListElementTypeNotAssignableNullability,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  mainFirstPositionalParameterType = CompileTimeErrorWithoutArguments(
-    name: 'MAIN_FIRST_POSITIONAL_PARAMETER_TYPE',
-    problemMessage:
-        "The type of the first positional parameter of the 'main' function must be "
-        "a supertype of 'List<String>'.",
-    correctionMessage: "Try changing the type of the parameter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MAIN_FIRST_POSITIONAL_PARAMETER_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mainHasRequiredNamedParameters =
-      CompileTimeErrorWithoutArguments(
-        name: 'MAIN_HAS_REQUIRED_NAMED_PARAMETERS',
-        problemMessage:
-            "The function 'main' can't have any required named parameters.",
-        correctionMessage:
-            "Try using a different name for the function, or removing the "
-            "'required' modifier.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  mainHasTooManyRequiredPositionalParameters = CompileTimeErrorWithoutArguments(
-    name: 'MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS',
-    problemMessage:
-        "The function 'main' can't have more than two required positional "
-        "parameters.",
-    correctionMessage:
-        "Try using a different name for the function, or removing extra "
-        "parameters.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mainIsNotFunction =
-      CompileTimeErrorWithoutArguments(
-        name: 'MAIN_IS_NOT_FUNCTION',
-        problemMessage: "The declaration named 'main' must be a function.",
-        correctionMessage: "Try using a different name for this declaration.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.MAIN_IS_NOT_FUNCTION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mapEntryNotInMap =
-      CompileTimeErrorWithoutArguments(
-        name: 'MAP_ENTRY_NOT_IN_MAP',
-        problemMessage: "Map entries can only be used in a map literal.",
-        correctionMessage:
-            "Try converting the collection to a map or removing the map entry.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.MAP_ENTRY_NOT_IN_MAP',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the type of the expression being used as a key
-  /// Type p1: the type of keys declared for the map
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  mapKeyTypeNotAssignable = CompileTimeErrorTemplate(
-    name: 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the map key type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsMapKeyTypeNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the expression being used as a key
-  /// Type p1: the type of keys declared for the map
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  mapKeyTypeNotAssignableNullability = CompileTimeErrorTemplate(
-    name: 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the map key type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    withArguments: _withArgumentsMapKeyTypeNotAssignableNullability,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the expression being used as a value
-  /// Type p1: the type of values declared for the map
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  mapValueTypeNotAssignable = CompileTimeErrorTemplate(
-    name: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the map value type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsMapValueTypeNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the expression being used as a value
-  /// Type p1: the type of values declared for the map
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  mapValueTypeNotAssignableNullability = CompileTimeErrorTemplate(
-    name: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the map value type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'MAP_VALUE_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    withArguments: _withArgumentsMapValueTypeNotAssignableNullability,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// 12.1 Constants: A constant expression is ... a constant list literal.
-  ///
-  /// Note: This diagnostic is never displayed to the user, so it doesn't need
-  /// to be documented.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments missingConstInListLiteral =
-      CompileTimeErrorWithoutArguments(
-        name: 'MISSING_CONST_IN_LIST_LITERAL',
-        problemMessage:
-            "Seeing this message constitutes a bug. Please report it.",
-        uniqueNameCheck: 'CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL',
-        expectedTypes: [],
-      );
-
-  /// 12.1 Constants: A constant expression is ... a constant map literal.
-  ///
-  /// Note: This diagnostic is never displayed to the user, so it doesn't need
-  /// to be documented.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments missingConstInMapLiteral =
-      CompileTimeErrorWithoutArguments(
-        name: 'MISSING_CONST_IN_MAP_LITERAL',
-        problemMessage:
-            "Seeing this message constitutes a bug. Please report it.",
-        uniqueNameCheck: 'CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL',
-        expectedTypes: [],
-      );
-
-  /// 12.1 Constants: A constant expression is ... a constant set literal.
-  ///
-  /// Note: This diagnostic is never displayed to the user, so it doesn't need
-  /// to be documented.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments missingConstInSetLiteral =
-      CompileTimeErrorWithoutArguments(
-        name: 'MISSING_CONST_IN_SET_LITERAL',
-        problemMessage:
-            "Seeing this message constitutes a bug. Please report it.",
-        uniqueNameCheck: 'CompileTimeErrorCode.MISSING_CONST_IN_SET_LITERAL',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the name of the library
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  missingDartLibrary = CompileTimeErrorTemplate(
-    name: 'MISSING_DART_LIBRARY',
-    problemMessage: "Required library '{0}' is missing.",
-    correctionMessage: "Re-install the Dart or Flutter SDK.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MISSING_DART_LIBRARY',
-    withArguments: _withArgumentsMissingDartLibrary,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingDefaultValueForParameter = CompileTimeErrorTemplate(
-    name: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
-    problemMessage:
-        "The parameter '{0}' can't have a value of 'null' because of its type, but "
-        "the implicit default value is 'null'.",
-    correctionMessage:
-        "Try adding either an explicit non-'null' default value or the "
-        "'required' modifier.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER',
-    withArguments: _withArgumentsMissingDefaultValueForParameter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingDefaultValueForParameterPositional = CompileTimeErrorTemplate(
-    name: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
-    problemMessage:
-        "The parameter '{0}' can't have a value of 'null' because of its type, but "
-        "the implicit default value is 'null'.",
-    correctionMessage: "Try adding an explicit non-'null' default value.",
-    hasPublishedDocs: true,
-    uniqueName: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL',
-    withArguments: _withArgumentsMissingDefaultValueForParameterPositional,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  missingDefaultValueForParameterWithAnnotation = CompileTimeErrorWithoutArguments(
-    name: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER',
-    problemMessage:
-        "With null safety, use the 'required' keyword, not the '@required' "
-        "annotation.",
-    correctionMessage: "Try removing the '@'.",
-    hasPublishedDocs: true,
-    uniqueName: 'MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  missingNamedPatternFieldName = CompileTimeErrorWithoutArguments(
-    name: 'MISSING_NAMED_PATTERN_FIELD_NAME',
-    problemMessage:
-        "The getter name is not specified explicitly, and the pattern is not a "
-        "variable.",
-    correctionMessage:
-        "Try specifying the getter name explicitly, or using a variable "
-        "pattern.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MISSING_NAMED_PATTERN_FIELD_NAME',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingRequiredArgument = CompileTimeErrorTemplate(
-    name: 'MISSING_REQUIRED_ARGUMENT',
-    problemMessage:
-        "The named parameter '{0}' is required, but there's no corresponding "
-        "argument.",
-    correctionMessage: "Try adding the required argument.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT',
-    withArguments: _withArgumentsMissingRequiredArgument,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the variable pattern
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingVariablePattern = CompileTimeErrorTemplate(
-    name: 'MISSING_VARIABLE_PATTERN',
-    problemMessage:
-        "Variable pattern '{0}' is missing in this branch of the logical-or "
-        "pattern.",
-    correctionMessage: "Try declaring this variable pattern in the branch.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MISSING_VARIABLE_PATTERN',
-    withArguments: _withArgumentsMissingVariablePattern,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the super-invoked member
-  /// Type p1: the display name of the type of the super-invoked member in the
-  ///          mixin
-  /// Type p2: the display name of the type of the concrete member in the class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required DartType p1,
-      required DartType p2,
-    })
-  >
-  mixinApplicationConcreteSuperInvokedMemberType = CompileTimeErrorTemplate(
-    name: 'MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE',
-    problemMessage:
-        "The super-invoked member '{0}' has the type '{1}', and the concrete "
-        "member in the class has the type '{2}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE',
-    withArguments: _withArgumentsMixinApplicationConcreteSuperInvokedMemberType,
-    expectedTypes: [ExpectedType.string, ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the display name of the member without a concrete
-  ///            implementation
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mixinApplicationNoConcreteSuperInvokedMember = CompileTimeErrorTemplate(
-    name: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
-    problemMessage:
-        "The class doesn't have a concrete implementation of the super-invoked "
-        "member '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
-    withArguments: _withArgumentsMixinApplicationNoConcreteSuperInvokedMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the display name of the setter without a concrete
-  ///            implementation
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mixinApplicationNoConcreteSuperInvokedSetter = CompileTimeErrorTemplate(
-    name: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
-    problemMessage:
-        "The class doesn't have a concrete implementation of the super-invoked "
-        "setter '{0}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_SETTER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_SETTER',
-    withArguments: _withArgumentsMixinApplicationNoConcreteSuperInvokedSetter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the display name of the mixin
-  /// Type p1: the display name of the superclass
-  /// Type p2: the display name of the type that is not implemented
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required DartType p2,
-    })
-  >
-  mixinApplicationNotImplementedInterface = CompileTimeErrorTemplate(
-    name: 'MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE',
-    problemMessage:
-        "'{0}' can't be mixed onto '{1}' because '{1}' doesn't implement '{2}'.",
-    correctionMessage: "Try extending the class '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE',
-    withArguments: _withArgumentsMixinApplicationNotImplementedInterface,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the mixin class that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mixinClassDeclarationExtendsNotObject = CompileTimeErrorTemplate(
-    name: 'MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT',
-    problemMessage:
-        "The class '{0}' can't be declared a mixin because it extends a class "
-        "other than 'Object'.",
-    correctionMessage:
-        "Try removing the 'mixin' modifier or changing the superclass to "
-        "'Object'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT',
-    withArguments: _withArgumentsMixinClassDeclarationExtendsNotObject,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the mixin that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mixinClassDeclaresConstructor = CompileTimeErrorTemplate(
-    name: 'MIXIN_CLASS_DECLARES_CONSTRUCTOR',
-    problemMessage:
-        "The class '{0}' can't be used as a mixin because it declares a "
-        "constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR',
-    withArguments: _withArgumentsMixinClassDeclaresConstructor,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mixinDeferredClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUBTYPE_OF_DEFERRED_CLASS',
-        problemMessage: "Classes can't mixin deferred classes.",
-        correctionMessage: "Try changing the import to not be deferred.",
-        hasPublishedDocs: true,
-        uniqueName: 'MIXIN_DEFERRED_CLASS',
-        uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_DEFERRED_CLASS',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the mixin that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mixinInheritsFromNotObject = CompileTimeErrorTemplate(
-    name: 'MIXIN_INHERITS_FROM_NOT_OBJECT',
-    problemMessage:
-        "The class '{0}' can't be used as a mixin because it extends a class other "
-        "than 'Object'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT',
-    withArguments: _withArgumentsMixinInheritsFromNotObject,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mixinInstantiate =
-      CompileTimeErrorWithoutArguments(
-        name: 'MIXIN_INSTANTIATE',
-        problemMessage: "Mixins can't be instantiated.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_INSTANTIATE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the name of the disallowed type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  mixinOfDisallowedClass = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_DISALLOWED_TYPE',
-    problemMessage: "Classes can't mixin '{0}'.",
-    correctionMessage:
-        "Try specifying a different class or mixin, or remove the class or "
-        "mixin from the list.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_OF_DISALLOWED_CLASS',
-    uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS',
-    withArguments: _withArgumentsMixinOfDisallowedClass,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mixinOfNonClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'MIXIN_OF_NON_CLASS',
-        problemMessage: "Classes can only mix in mixins and classes.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_OF_NON_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  mixinOfTypeAliasExpandsToTypeParameter = CompileTimeErrorWithoutArguments(
-    name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
-    problemMessage:
-        "A type alias that expands to a type parameter can't be mixed in.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  mixinOnTypeAliasExpandsToTypeParameter = CompileTimeErrorWithoutArguments(
-    name: 'SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER',
-    problemMessage:
-        "A type alias that expands to a type parameter can't be used as a "
-        "superclass constraint.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Element p0: the name of the class that appears in both "extends" and
-  ///             "with" clauses
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Element p0})
-  >
-  mixinsSuperClass = CompileTimeErrorTemplate(
-    name: 'IMPLEMENTS_SUPER_CLASS',
-    problemMessage:
-        "'{0}' can't be used in both the 'extends' and 'with' clauses.",
-    correctionMessage: "Try removing one of the occurrences.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXINS_SUPER_CLASS',
-    uniqueNameCheck: 'CompileTimeErrorCode.MIXINS_SUPER_CLASS',
-    withArguments: _withArgumentsMixinsSuperClass,
-    expectedTypes: [ExpectedType.element],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the mixin that is not 'base'
-  /// String p1: the name of the 'base' supertype
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  mixinSubtypeOfBaseIsNotBase = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
-    problemMessage:
-        "The mixin '{0}' must be 'base' because the supertype '{1}' is 'base'.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_SUBTYPE_OF_BASE_IS_NOT_BASE',
-    uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_SUBTYPE_OF_BASE_IS_NOT_BASE',
-    withArguments: _withArgumentsMixinSubtypeOfBaseIsNotBase,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the mixin that is not 'final'
-  /// String p1: the name of the 'final' supertype
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  mixinSubtypeOfFinalIsNotBase = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
-    problemMessage:
-        "The mixin '{0}' must be 'base' because the supertype '{1}' is 'final'.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE',
-    uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE',
-    withArguments: _withArgumentsMixinSubtypeOfFinalIsNotBase,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  mixinSuperClassConstraintDeferredClass = CompileTimeErrorWithoutArguments(
-    name: 'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
-    problemMessage: "Deferred classes can't be used as superclass constraints.",
-    correctionMessage: "Try changing the import to not be deferred.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the disallowed type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  mixinSuperClassConstraintDisallowedClass = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_DISALLOWED_TYPE',
-    problemMessage: "'{0}' can't be used as a superclass constraint.",
-    correctionMessage:
-        "Try specifying a different super-class constraint, or remove the 'on' "
-        "clause.",
-    hasPublishedDocs: true,
-    uniqueName: 'MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS',
-    withArguments: _withArgumentsMixinSuperClassConstraintDisallowedClass,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  mixinSuperClassConstraintNonInterface = CompileTimeErrorWithoutArguments(
-    name: 'MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE',
-    problemMessage:
-        "Only classes and mixins can be used as superclass constraints.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE',
-    expectedTypes: [],
-  );
-
-  /// 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.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments mixinWithNonClassSuperclass =
-      CompileTimeErrorWithoutArguments(
-        name: 'MIXIN_WITH_NON_CLASS_SUPERCLASS',
-        problemMessage: "Mixin can only be applied to class.",
-        uniqueNameCheck: 'CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  multipleRedirectingConstructorInvocations = CompileTimeErrorWithoutArguments(
-    name: 'MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
-    problemMessage:
-        "Constructors can have only one 'this' redirection, at most.",
-    correctionMessage: "Try removing all but one of the redirections.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  multipleSuperInitializers = CompileTimeErrorWithoutArguments(
-    name: 'MULTIPLE_SUPER_INITIALIZERS',
-    problemMessage: "A constructor can have at most one 'super' initializer.",
-    correctionMessage: "Try removing all but one of the 'super' initializers.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the non-type element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  newWithNonType = CompileTimeErrorTemplate(
-    name: 'CREATION_WITH_NON_TYPE',
-    problemMessage: "The name '{0}' isn't a class.",
-    correctionMessage: "Try correcting the name to match an existing class.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueName: 'NEW_WITH_NON_TYPE',
-    uniqueNameCheck: 'CompileTimeErrorCode.NEW_WITH_NON_TYPE',
-    withArguments: _withArgumentsNewWithNonType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the
-  /// current scope then:
-  /// 1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, &hellip;,
-  ///    a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;,
-  ///    x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a static warning if
-  ///    <i>T.id</i> is not the name of a constructor declared by the type
-  ///    <i>T</i>.
-  /// If <i>e</i> of the form <i>new T(a<sub>1</sub>, &hellip;, a<sub>n</sub>,
-  /// x<sub>n+1</sub>: a<sub>n+1</sub>, &hellip;, x<sub>n+k</sub>:
-  /// a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not
-  /// declare a constructor with the same name as the declaration of <i>T</i>.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class being instantiated
-  /// String p1: the name of the constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  newWithUndefinedConstructor = CompileTimeErrorTemplate(
-    name: 'NEW_WITH_UNDEFINED_CONSTRUCTOR',
-    problemMessage: "The class '{0}' doesn't have a constructor named '{1}'.",
-    correctionMessage:
-        "Try invoking a different constructor, or define a constructor named "
-        "'{1}'.",
-    uniqueNameCheck: 'CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR',
-    withArguments: _withArgumentsNewWithUndefinedConstructor,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class being instantiated
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  newWithUndefinedConstructorDefault = CompileTimeErrorTemplate(
-    name: 'NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
-    problemMessage: "The class '{0}' doesn't have an unnamed constructor.",
-    correctionMessage:
-        "Try using one of the named constructors defined in '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
-    withArguments: _withArgumentsNewWithUndefinedConstructorDefault,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  noAnnotationConstructorArguments = CompileTimeErrorWithoutArguments(
-    name: 'NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
-    problemMessage: "Annotation creation must have arguments.",
-    correctionMessage: "Try adding an empty argument list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class where override error was detected
-  /// String p1: the list of candidate signatures which cannot be combined
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  noCombinedSuperSignature = CompileTimeErrorTemplate(
-    name: 'NO_COMBINED_SUPER_SIGNATURE',
-    problemMessage:
-        "Can't infer missing types in '{0}' from overridden methods: {1}.",
-    correctionMessage:
-        "Try providing explicit types for this method's parameters and return "
-        "type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE',
-    withArguments: _withArgumentsNoCombinedSuperSignature,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the superclass that does not define an implicitly
-  ///            invoked constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  noDefaultSuperConstructorExplicit = CompileTimeErrorTemplate(
-    name: 'NO_DEFAULT_SUPER_CONSTRUCTOR',
-    problemMessage:
-        "The superclass '{0}' doesn't have a zero argument constructor.",
-    correctionMessage:
-        "Try declaring a zero argument constructor in '{0}', or explicitly "
-        "invoking a different constructor in '{0}'.",
-    uniqueName: 'NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT',
-    withArguments: _withArgumentsNoDefaultSuperConstructorExplicit,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the superclass that does not define an implicitly
-  ///          invoked constructor
-  /// String p1: the name of the subclass that does not contain any explicit
-  ///            constructors
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required String p1})
-  >
-  noDefaultSuperConstructorImplicit = CompileTimeErrorTemplate(
-    name: 'NO_DEFAULT_SUPER_CONSTRUCTOR',
-    problemMessage:
-        "The superclass '{0}' doesn't have a zero argument constructor.",
-    correctionMessage:
-        "Try declaring a zero argument constructor in '{0}', or declaring a "
-        "constructor in {1} that explicitly invokes a constructor in '{0}'.",
-    uniqueName: 'NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT',
-    withArguments: _withArgumentsNoDefaultSuperConstructorImplicit,
-    expectedTypes: [ExpectedType.type, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subclass
-  /// String p1: the name of the superclass
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  noGenerativeConstructorsInSuperclass = CompileTimeErrorTemplate(
-    name: 'NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS',
-    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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS',
-    withArguments: _withArgumentsNoGenerativeConstructorsInSuperclass,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the first member
-  /// String p1: the name of the second member
-  /// String p2: the name of the third member
-  /// String p3: the name of the fourth member
-  /// int p4: the number of additional missing members that aren't listed
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-      required String p3,
-      required int p4,
-    })
-  >
-  nonAbstractClassInheritsAbstractMemberFivePlus = CompileTimeErrorTemplate(
-    name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
-    problemMessage:
-        "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and {4} "
-        "more.",
-    correctionMessage:
-        "Try implementing the missing methods, or make the class abstract.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
-    withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberFivePlus,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.int,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the first member
-  /// String p1: the name of the second member
-  /// String p2: the name of the third member
-  /// String p3: the name of the fourth member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-      required String p3,
-    })
-  >
-  nonAbstractClassInheritsAbstractMemberFour = CompileTimeErrorTemplate(
-    name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
-    problemMessage:
-        "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'.",
-    correctionMessage:
-        "Try implementing the missing methods, or make the class abstract.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
-    withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberFour,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonAbstractClassInheritsAbstractMemberOne = CompileTimeErrorTemplate(
-    name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
-    problemMessage: "Missing concrete implementation of '{0}'.",
-    correctionMessage:
-        "Try implementing the missing method, or make the class abstract.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
-    withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberOne,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the first member
-  /// String p1: the name of the second member
-  /// String p2: the name of the third member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  nonAbstractClassInheritsAbstractMemberThree = CompileTimeErrorTemplate(
-    name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
-    problemMessage:
-        "Missing concrete implementations of '{0}', '{1}', and '{2}'.",
-    correctionMessage:
-        "Try implementing the missing methods, or make the class abstract.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
-    withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberThree,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the first member
-  /// String p1: the name of the second member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  nonAbstractClassInheritsAbstractMemberTwo = CompileTimeErrorTemplate(
-    name: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
-    problemMessage: "Missing concrete implementations of '{0}' and '{1}'.",
-    correctionMessage:
-        "Try implementing the missing methods, or make the class abstract.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
-    withArguments: _withArgumentsNonAbstractClassInheritsAbstractMemberTwo,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonBoolCondition =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_BOOL_CONDITION',
-        problemMessage: "Conditions must have a static type of 'bool'.",
-        correctionMessage: "Try changing the condition.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_BOOL_CONDITION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonBoolExpression =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_BOOL_EXPRESSION',
-        problemMessage: "The expression in an assert must be of type 'bool'.",
-        correctionMessage: "Try changing the expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_BOOL_EXPRESSION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonBoolNegationExpression =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_BOOL_NEGATION_EXPRESSION',
-        problemMessage: "A negation operand must have a static type of 'bool'.",
-        correctionMessage: "Try changing the operand to the '!' operator.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_BOOL_NEGATION_EXPRESSION',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the lexeme of the logical operator
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonBoolOperand = CompileTimeErrorTemplate(
-    name: 'NON_BOOL_OPERAND',
-    problemMessage:
-        "The operands of the operator '{0}' must be assignable to 'bool'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_BOOL_OPERAND',
-    withArguments: _withArgumentsNonBoolOperand,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantAnnotationConstructor = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
-    problemMessage: "Annotation creation can only call a const constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantCaseExpression =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_CASE_EXPRESSION',
-        problemMessage: "Case expressions must be constant.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantCaseExpressionFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as a case "
-        "expression.",
-    correctionMessage:
-        "Try re-writing the switch as a series of if statements, or changing "
-        "the import to not be deferred.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantDefaultValue =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_DEFAULT_VALUE',
-        problemMessage:
-            "The default value of an optional parameter must be constant.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantDefaultValueFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as a default "
-        "parameter value.",
-    correctionMessage:
-        "Try leaving the default as 'null' and initializing the parameter "
-        "inside the function body.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantListElement =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_LIST_ELEMENT',
-        problemMessage: "The values in a const list literal must be constants.",
-        correctionMessage:
-            "Try removing the keyword 'const' from the list literal.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantListElementFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as values in a "
-        "'const' list literal.",
-    correctionMessage:
-        "Try removing the keyword 'const' from the list literal or removing "
-        "the keyword 'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantMapElement =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_MAP_ELEMENT',
-        problemMessage: "The elements in a const map literal must be constant.",
-        correctionMessage:
-            "Try removing the keyword 'const' from the map literal.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantMapKey =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_MAP_KEY',
-        problemMessage: "The keys in a const map literal must be constant.",
-        correctionMessage:
-            "Try removing the keyword 'const' from the map literal.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_MAP_KEY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantMapKeyFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as keys in a "
-        "'const' map literal.",
-    correctionMessage:
-        "Try removing the keyword 'const' from the map literal or removing the "
-        "keyword 'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantMapPatternKey =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_MAP_PATTERN_KEY',
-        problemMessage: "Key expressions in map patterns must be constants.",
-        correctionMessage: "Try using constants instead.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_MAP_PATTERN_KEY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantMapValue =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_MAP_VALUE',
-        problemMessage: "The values in a const map literal must be constant.",
-        correctionMessage:
-            "Try removing the keyword 'const' from the map literal.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantMapValueFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as values in a "
-        "'const' map literal.",
-    correctionMessage:
-        "Try removing the keyword 'const' from the map literal or removing the "
-        "keyword 'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantRecordField =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_RECORD_FIELD',
-        problemMessage:
-            "The fields in a const record literal must be constants.",
-        correctionMessage:
-            "Try removing the keyword 'const' from the record literal.",
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_RECORD_FIELD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantRecordFieldFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as fields in a "
-        "'const' record literal.",
-    correctionMessage:
-        "Try removing the keyword 'const' from the record literal or removing "
-        "the keyword 'deferred' from the import.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstantRelationalPatternExpression = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION',
-    problemMessage: "The relational pattern expression must be a constant.",
-    correctionMessage: "Try using a constant instead.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonConstantSetElement =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_CONSTANT_SET_ELEMENT',
-        problemMessage: "The values in a const set literal must be constants.",
-        correctionMessage:
-            "Try removing the keyword 'const' from the set literal.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstGenerativeEnumConstructor = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR',
-    problemMessage: "Generative enum constructors must be 'const'.",
-    correctionMessage: "Try adding the keyword 'const'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// 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.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonConstMapAsExpressionStatement = CompileTimeErrorWithoutArguments(
-    name: 'NON_CONST_MAP_AS_EXPRESSION_STATEMENT',
-    problemMessage:
-        "A non-constant map or set literal without type arguments can't be used as "
-        "an expression statement.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nonCovariantTypeParameterPositionInRepresentationType =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE',
-        problemMessage:
-            "An extension type parameter can't be used in a non-covariant position of "
-            "its representation type.",
-        correctionMessage:
-            "Try removing the type parameters from function parameter types and "
-            "type parameter bounds.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the type of the switch scrutinee
-  /// String p1: the witness pattern for the unmatched value
-  /// String p2: the suggested pattern for the unmatched value
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  nonExhaustiveSwitchExpression = CompileTimeErrorTemplate(
-    name: 'NON_EXHAUSTIVE_SWITCH_EXPRESSION',
-    problemMessage:
-        "The type '{0}' isn't exhaustively matched by the switch cases since it "
-        "doesn't match the pattern '{1}'.",
-    correctionMessage:
-        "Try adding a wildcard pattern or cases that match '{2}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_EXHAUSTIVE_SWITCH_EXPRESSION',
-    withArguments: _withArgumentsNonExhaustiveSwitchExpression,
-    expectedTypes: [
-      ExpectedType.type,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the switch scrutinee
-  /// String p1: the witness pattern for the unmatched value
-  /// String p2: the suggested pattern for the unmatched value
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  nonExhaustiveSwitchStatement = CompileTimeErrorTemplate(
-    name: 'NON_EXHAUSTIVE_SWITCH_STATEMENT',
-    problemMessage:
-        "The type '{0}' isn't exhaustively matched by the switch cases since it "
-        "doesn't match the pattern '{1}'.",
-    correctionMessage: "Try adding a default case or cases that match '{2}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_EXHAUSTIVE_SWITCH_STATEMENT',
-    withArguments: _withArgumentsNonExhaustiveSwitchStatement,
-    expectedTypes: [
-      ExpectedType.type,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonFinalFieldInEnum =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_FINAL_FIELD_IN_ENUM',
-        problemMessage: "Enums can only declare final fields.",
-        correctionMessage: "Try making the field final.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Element p0: the non-generative constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Element p0})
-  >
-  nonGenerativeConstructor = CompileTimeErrorTemplate(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR',
-    withArguments: _withArgumentsNonGenerativeConstructor,
-    expectedTypes: [ExpectedType.element],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the superclass
-  /// String p1: the name of the current class
-  /// Element p2: the implicitly called factory constructor of the superclass
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required Element p2,
-    })
-  >
-  nonGenerativeImplicitConstructor = CompileTimeErrorTemplate(
-    name: 'NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
-    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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_GENERATIVE_IMPLICIT_CONSTRUCTOR',
-    withArguments: _withArgumentsNonGenerativeImplicitConstructor,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.element,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonSyncFactory =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_SYNC_FACTORY',
-        problemMessage:
-            "Factory bodies can't use 'async', 'async*', or 'sync*'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_SYNC_FACTORY',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name appearing where a type is expected
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonTypeAsTypeArgument = CompileTimeErrorTemplate(
-    name: 'NON_TYPE_AS_TYPE_ARGUMENT',
-    problemMessage:
-        "The name '{0}' isn't a type, so it can't be used as a type argument.",
-    correctionMessage:
-        "Try correcting the name to an existing type, or defining a type named "
-        "'{0}'.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT',
-    withArguments: _withArgumentsNonTypeAsTypeArgument,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the non-type element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonTypeInCatchClause = CompileTimeErrorTemplate(
-    name: 'NON_TYPE_IN_CATCH_CLAUSE',
-    problemMessage:
-        "The name '{0}' isn't a type and can't be used in an on-catch clause.",
-    correctionMessage: "Try correcting the name to match an existing class.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE',
-    withArguments: _withArgumentsNonTypeInCatchClause,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonVoidReturnForOperator =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_VOID_RETURN_FOR_OPERATOR',
-        problemMessage: "The return type of the operator []= must be 'void'.",
-        correctionMessage: "Try changing the return type to 'void'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nonVoidReturnForSetter =
-      CompileTimeErrorWithoutArguments(
-        name: 'NON_VOID_RETURN_FOR_SETTER',
-        problemMessage:
-            "The return type of the setter must be 'void' or absent.",
-        correctionMessage:
-            "Try removing the return type, or define a method rather than a "
-            "setter.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the variable that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notAssignedPotentiallyNonNullableLocalVariable = CompileTimeErrorTemplate(
-    name: 'NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE',
-    problemMessage:
-        "The non-nullable local variable '{0}' must be assigned before it can be "
-        "used.",
-    correctionMessage:
-        "Try giving it an initializer expression, or ensure that it's assigned "
-        "on every execution path.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE',
-    withArguments: _withArgumentsNotAssignedPotentiallyNonNullableLocalVariable,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name that is not a type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notAType = CompileTimeErrorTemplate(
-    name: 'NOT_A_TYPE',
-    problemMessage: "{0} isn't a type.",
-    correctionMessage: "Try correcting the name to match an existing type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NOT_A_TYPE',
-    withArguments: _withArgumentsNotAType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the operator that is not a binary operator.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notBinaryOperator = CompileTimeErrorTemplate(
-    name: 'NOT_BINARY_OPERATOR',
-    problemMessage: "'{0}' isn't a binary operator.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NOT_BINARY_OPERATOR',
-    withArguments: _withArgumentsNotBinaryOperator,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// int p0: the expected number of required arguments
-  /// int p1: the actual number of positional arguments given
-  /// String p2: name of the function or method
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required int p0,
-      required int p1,
-      required String p2,
-    })
-  >
-  notEnoughPositionalArgumentsNamePlural = CompileTimeErrorTemplate(
-    name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
-    problemMessage:
-        "{0} positional arguments expected by '{2}', but {1} found.",
-    correctionMessage: "Try adding the missing arguments.",
-    hasPublishedDocs: true,
-    uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL',
-    withArguments: _withArgumentsNotEnoughPositionalArgumentsNamePlural,
-    expectedTypes: [ExpectedType.int, ExpectedType.int, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: name of the function or method
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notEnoughPositionalArgumentsNameSingular = CompileTimeErrorTemplate(
-    name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
-    problemMessage: "1 positional argument expected by '{0}', but 0 found.",
-    correctionMessage: "Try adding the missing argument.",
-    hasPublishedDocs: true,
-    uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR',
-    withArguments: _withArgumentsNotEnoughPositionalArgumentsNameSingular,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// int p0: the expected number of required arguments
-  /// int p1: the actual number of positional arguments given
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  notEnoughPositionalArgumentsPlural = CompileTimeErrorTemplate(
-    name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
-    problemMessage: "{0} positional arguments expected, but {1} found.",
-    correctionMessage: "Try adding the missing arguments.",
-    hasPublishedDocs: true,
-    uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL',
-    withArguments: _withArgumentsNotEnoughPositionalArgumentsPlural,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  notEnoughPositionalArgumentsSingular = CompileTimeErrorWithoutArguments(
-    name: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS',
-    problemMessage: "1 positional argument expected, but 0 found.",
-    correctionMessage: "Try adding the missing argument.",
-    hasPublishedDocs: true,
-    uniqueName: 'NOT_ENOUGH_POSITIONAL_ARGUMENTS_SINGULAR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS_SINGULAR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the field that is not initialized
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notInitializedNonNullableInstanceField = CompileTimeErrorTemplate(
-    name: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
-    problemMessage: "Non-nullable instance field '{0}' must be initialized.",
-    correctionMessage:
-        "Try adding an initializer expression, or a generative constructor "
-        "that initializes it, or mark it 'late'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
-    withArguments: _withArgumentsNotInitializedNonNullableInstanceField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the field that is not initialized
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notInitializedNonNullableInstanceFieldConstructor = CompileTimeErrorTemplate(
-    name: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD',
-    problemMessage: "Non-nullable instance field '{0}' must be initialized.",
-    correctionMessage:
-        "Try adding an initializer expression, or add a field initializer in "
-        "this constructor, or mark it 'late'.",
-    hasPublishedDocs: true,
-    uniqueName: 'NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR',
-    withArguments:
-        _withArgumentsNotInitializedNonNullableInstanceFieldConstructor,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the variable that is invalid
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  notInitializedNonNullableVariable = CompileTimeErrorTemplate(
-    name: 'NOT_INITIALIZED_NON_NULLABLE_VARIABLE',
-    problemMessage: "The non-nullable variable '{0}' must be initialized.",
-    correctionMessage: "Try adding an initializer expression.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE',
-    withArguments: _withArgumentsNotInitializedNonNullableVariable,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments notInstantiatedBound =
-      CompileTimeErrorWithoutArguments(
-        name: 'NOT_INSTANTIATED_BOUND',
-        problemMessage: "Type parameter bound types must be instantiated.",
-        correctionMessage:
-            "Try adding type arguments to the type parameter bound.",
-        uniqueNameCheck: 'CompileTimeErrorCode.NOT_INSTANTIATED_BOUND',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  notIterableSpread = CompileTimeErrorWithoutArguments(
-    name: 'NOT_ITERABLE_SPREAD',
-    problemMessage:
-        "Spread elements in list or set literals must implement 'Iterable'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NOT_ITERABLE_SPREAD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments notMapSpread =
-      CompileTimeErrorWithoutArguments(
-        name: 'NOT_MAP_SPREAD',
-        problemMessage: "Spread elements in map literals must implement 'Map'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NOT_MAP_SPREAD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  notNullAwareNullSpread = CompileTimeErrorWithoutArguments(
-    name: 'NOT_NULL_AWARE_NULL_SPREAD',
-    problemMessage:
-        "The Null-typed expression can't be used with a non-null-aware spread.",
-    uniqueNameCheck: 'CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nullableTypeInExtendsClause =
-      CompileTimeErrorWithoutArguments(
-        name: 'NULLABLE_TYPE_IN_EXTENDS_CLAUSE',
-        problemMessage: "A class can't extend a nullable type.",
-        correctionMessage: "Try removing the question mark.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  nullableTypeInImplementsClause = CompileTimeErrorWithoutArguments(
-    name: 'NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE',
-    problemMessage:
-        "A class, mixin, or extension type can't implement a nullable type.",
-    correctionMessage: "Try removing the question mark.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nullableTypeInOnClause =
-      CompileTimeErrorWithoutArguments(
-        name: 'NULLABLE_TYPE_IN_ON_CLAUSE',
-        problemMessage:
-            "A mixin can't have a nullable type as a superclass constraint.",
-        correctionMessage: "Try removing the question mark.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments nullableTypeInWithClause =
-      CompileTimeErrorWithoutArguments(
-        name: 'NULLABLE_TYPE_IN_WITH_CLAUSE',
-        problemMessage: "A class or mixin can't mix in a nullable type.",
-        correctionMessage: "Try removing the question mark.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE',
-        expectedTypes: [],
-      );
-
-  /// 7.9 Superclasses: It is a compile-time error to specify an extends clause
-  /// for class Object.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments objectCannotExtendAnotherClass =
-      CompileTimeErrorWithoutArguments(
-        name: 'OBJECT_CANNOT_EXTEND_ANOTHER_CLASS',
-        problemMessage: "The class 'Object' can't extend any other class.",
-        uniqueNameCheck:
-            'CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  obsoleteColonForDefaultValue = CompileTimeErrorWithoutArguments(
-    name: 'OBSOLETE_COLON_FOR_DEFAULT_VALUE',
-    problemMessage:
-        "Using a colon as the separator before a default value is no longer "
-        "supported.",
-    correctionMessage: "Try replacing the colon with an equal sign.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.OBSOLETE_COLON_FOR_DEFAULT_VALUE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the interface that is implemented more than once
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  onRepeated = CompileTimeErrorTemplate(
-    name: 'ON_REPEATED',
-    problemMessage:
-        "The type '{0}' can be included in the superclass constraints only once.",
-    correctionMessage:
-        "Try removing all except one occurrence of the type name.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.ON_REPEATED',
-    withArguments: _withArgumentsOnRepeated,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments optionalParameterInOperator =
-      CompileTimeErrorWithoutArguments(
-        name: 'OPTIONAL_PARAMETER_IN_OPERATOR',
-        problemMessage:
-            "Optional parameters aren't allowed when defining an operator.",
-        correctionMessage: "Try removing the optional parameters.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of expected library name
-  /// String p1: the non-matching actual library name from the "part of"
-  ///            declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  partOfDifferentLibrary = CompileTimeErrorTemplate(
-    name: 'PART_OF_DIFFERENT_LIBRARY',
-    problemMessage: "Expected this library to be part of '{0}', not '{1}'.",
-    correctionMessage:
-        "Try including a different part, or changing the name of the library "
-        "in the part's part-of directive.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY',
-    withArguments: _withArgumentsPartOfDifferentLibrary,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a non-library declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  partOfNonPart = CompileTimeErrorTemplate(
-    name: 'PART_OF_NON_PART',
-    problemMessage: "The included part '{0}' must have a part-of directive.",
-    correctionMessage: "Try adding a part-of directive to '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.PART_OF_NON_PART',
-    withArguments: _withArgumentsPartOfNonPart,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the non-matching actual library name from the "part of"
-  ///            declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  partOfUnnamedLibrary = CompileTimeErrorTemplate(
-    name: 'PART_OF_UNNAMED_LIBRARY',
-    problemMessage:
-        "The library is unnamed. A URI is expected, not a library name '{0}', in "
-        "the part-of directive.",
-    correctionMessage:
-        "Try changing the part-of directive to a URI, or try including a "
-        "different part.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.PART_OF_UNNAMED_LIBRARY',
-    withArguments: _withArgumentsPartOfUnnamedLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  patternAssignmentNotLocalVariable = CompileTimeErrorWithoutArguments(
-    name: 'PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE',
-    problemMessage:
-        "Only local variables can be assigned in pattern assignments.",
-    correctionMessage: "Try assigning to a local variable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  patternConstantFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used in patterns.",
-    correctionMessage: "Try removing the keyword 'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the matched type
-  /// Type p1: the required type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  patternTypeMismatchInIrrefutableContext = CompileTimeErrorTemplate(
-    name: 'PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT',
-    problemMessage:
-        "The matched value of type '{0}' isn't assignable to the required type "
-        "'{1}'.",
-    correctionMessage:
-        "Try changing the required type of the pattern, or the matched value "
-        "type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT',
-    withArguments: _withArgumentsPatternTypeMismatchInIrrefutableContext,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  patternVariableAssignmentInsideGuard = CompileTimeErrorWithoutArguments(
-    name: 'PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD',
-    problemMessage:
-        "Pattern variables can't be assigned inside the guard of the enclosing "
-        "guarded pattern.",
-    correctionMessage: "Try assigning to a different variable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the pattern variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  patternVariableSharedCaseScopeDifferentFinalityOrType = CompileTimeErrorTemplate(
-    name: 'INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE',
-    problemMessage:
-        "The variable '{0}' doesn't have the same type and/or finality in all "
-        "cases that share this body.",
-    correctionMessage:
-        "Try declaring the variable pattern with the same type and finality in "
-        "all cases.",
-    hasPublishedDocs: true,
-    uniqueName: 'PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE',
-    withArguments:
-        _withArgumentsPatternVariableSharedCaseScopeDifferentFinalityOrType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the pattern variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  patternVariableSharedCaseScopeHasLabel = CompileTimeErrorTemplate(
-    name: 'INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE',
-    problemMessage:
-        "The variable '{0}' is not available because there is a label or 'default' "
-        "case.",
-    correctionMessage:
-        "Try removing the label, or providing the 'default' case with its own "
-        "body.",
-    hasPublishedDocs: true,
-    uniqueName: 'PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL',
-    withArguments: _withArgumentsPatternVariableSharedCaseScopeHasLabel,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the pattern variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  patternVariableSharedCaseScopeNotAllCases = CompileTimeErrorTemplate(
-    name: 'INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE',
-    problemMessage:
-        "The variable '{0}' is available in some, but not all cases that share "
-        "this body.",
-    correctionMessage:
-        "Try declaring the variable pattern with the same type and finality in "
-        "all cases.",
-    hasPublishedDocs: true,
-    uniqueName: 'PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES',
-    withArguments: _withArgumentsPatternVariableSharedCaseScopeNotAllCases,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments positionalFieldInObjectPattern =
-      CompileTimeErrorWithoutArguments(
-        name: 'POSITIONAL_FIELD_IN_OBJECT_PATTERN',
-        problemMessage: "Object patterns can only use named fields.",
-        correctionMessage: "Try specifying the field name.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.POSITIONAL_FIELD_IN_OBJECT_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  positionalSuperFormalParameterWithPositionalArgument = CompileTimeErrorWithoutArguments(
-    name: 'POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT',
-    problemMessage:
-        "Positional super parameters can't be used when the super constructor "
-        "invocation has a positional argument.",
-    correctionMessage:
-        "Try making all the positional parameters passed to the super "
-        "constructor be either all super parameters or all normal parameters.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the prefix
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  prefixCollidesWithTopLevelMember = CompileTimeErrorTemplate(
-    name: 'PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
-    problemMessage:
-        "The name '{0}' is already used as an import prefix and can't be used to "
-        "name a top-level element.",
-    correctionMessage:
-        "Try renaming either the top-level element or the prefix.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
-    withArguments: _withArgumentsPrefixCollidesWithTopLevelMember,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the prefix
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  prefixIdentifierNotFollowedByDot = CompileTimeErrorTemplate(
-    name: 'PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT',
-    problemMessage:
-        "The name '{0}' refers to an import prefix, so it must be followed by '.'.",
-    correctionMessage:
-        "Try correcting the name to refer to something other than a prefix, or "
-        "renaming the prefix.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT',
-    withArguments: _withArgumentsPrefixIdentifierNotFollowedByDot,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the prefix being shadowed
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  prefixShadowedByLocalDeclaration = CompileTimeErrorTemplate(
-    name: 'PREFIX_SHADOWED_BY_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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION',
-    withArguments: _withArgumentsPrefixShadowedByLocalDeclaration,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the private name that collides
-  /// String p1: the name of the first mixin
-  /// String p2: the name of the second mixin
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  privateCollisionInMixinApplication = CompileTimeErrorTemplate(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION',
-    withArguments: _withArgumentsPrivateCollisionInMixinApplication,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  privateNamedParameterWithoutPublicName = CompileTimeErrorWithoutArguments(
-    name: 'PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME',
-    problemMessage:
-        "A private named parameter must be a public identifier after removing the "
-        "leading underscore.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the setter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  privateSetter = CompileTimeErrorTemplate(
-    name: 'PRIVATE_SETTER',
-    problemMessage:
-        "The setter '{0}' is private and can't be accessed outside the library "
-        "that declares it.",
-    correctionMessage: "Try making it public.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.PRIVATE_SETTER',
-    withArguments: _withArgumentsPrivateSetter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  readPotentiallyUnassignedFinal = CompileTimeErrorTemplate(
-    name: 'READ_POTENTIALLY_UNASSIGNED_FINAL',
-    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,
-    uniqueNameCheck: 'CompileTimeErrorCode.READ_POTENTIALLY_UNASSIGNED_FINAL',
-    withArguments: _withArgumentsReadPotentiallyUnassignedFinal,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// This is similar to
-  /// ParserErrorCode.recordLiteralOnePositionalNoTrailingComma, but
-  /// it is reported at type analysis time, based on a type
-  /// incompatibility, rather than at parse time.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  recordLiteralOnePositionalNoTrailingCommaByType = CompileTimeErrorWithoutArguments(
-    name: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA',
-    problemMessage:
-        "A record literal with exactly one positional field requires a trailing "
-        "comma.",
-    correctionMessage: "Try adding a trailing comma.",
-    hasPublishedDocs: true,
-    uniqueName: 'RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA_BY_TYPE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA_BY_TYPE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments recursiveCompileTimeConstant =
-      CompileTimeErrorWithoutArguments(
-        name: 'RECURSIVE_COMPILE_TIME_CONSTANT',
-        problemMessage:
-            "The compile-time constant expression depends on itself.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments recursiveConstantConstructor =
-      CompileTimeErrorWithoutArguments(
-        name: 'RECURSIVE_CONSTANT_CONSTRUCTOR',
-        problemMessage: "The constant constructor depends on itself.",
-        uniqueNameCheck: 'CompileTimeErrorCode.RECURSIVE_CONSTANT_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// TODO(scheglov): review this later, there are no explicit "it is a
-  /// compile-time error" in specification. But it was added to the co19 and
-  /// there is same error for factories.
-  ///
-  /// https://code.google.com/p/dart/issues/detail?id=954
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  recursiveConstructorRedirect = CompileTimeErrorWithoutArguments(
-    name: 'RECURSIVE_CONSTRUCTOR_REDIRECT',
-    problemMessage:
-        "Constructors can't redirect to themselves either directly or indirectly.",
-    correctionMessage:
-        "Try changing one of the constructors in the loop to not redirect.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  recursiveFactoryRedirect = CompileTimeErrorWithoutArguments(
-    name: 'RECURSIVE_CONSTRUCTOR_REDIRECT',
-    problemMessage:
-        "Constructors can't redirect to themselves either directly or indirectly.",
-    correctionMessage:
-        "Try changing one of the constructors in the loop to not redirect.",
-    hasPublishedDocs: true,
-    uniqueName: 'RECURSIVE_FACTORY_REDIRECT',
-    uniqueNameCheck: 'CompileTimeErrorCode.RECURSIVE_FACTORY_REDIRECT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class that implements itself recursively
-  /// String p1: a string representation of the implements loop
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  recursiveInterfaceInheritance = CompileTimeErrorTemplate(
-    name: 'RECURSIVE_INTERFACE_INHERITANCE',
-    problemMessage: "'{0}' can't be a superinterface of itself: {1}.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE',
-    withArguments: _withArgumentsRecursiveInterfaceInheritance,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// 7.10 Superinterfaces: It is a compile-time error if the interface of a
-  /// class <i>C</i> is a superinterface of itself.
-  ///
-  /// 8.1 Superinterfaces: It is a compile-time error if an interface is a
-  /// superinterface of itself.
-  ///
-  /// 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
-  /// superclass of itself.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class that implements itself recursively
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  recursiveInterfaceInheritanceExtends = CompileTimeErrorTemplate(
-    name: 'RECURSIVE_INTERFACE_INHERITANCE',
-    problemMessage: "'{0}' can't extend itself.",
-    hasPublishedDocs: true,
-    uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_EXTENDS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS',
-    withArguments: _withArgumentsRecursiveInterfaceInheritanceExtends,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 7.10 Superinterfaces: It is a compile-time error if the interface of a
-  /// class <i>C</i> is a superinterface of itself.
-  ///
-  /// 8.1 Superinterfaces: It is a compile-time error if an interface is a
-  /// superinterface of itself.
-  ///
-  /// 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
-  /// superclass of itself.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class that implements itself recursively
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  recursiveInterfaceInheritanceImplements = CompileTimeErrorTemplate(
-    name: 'RECURSIVE_INTERFACE_INHERITANCE',
-    problemMessage: "'{0}' can't implement itself.",
-    hasPublishedDocs: true,
-    uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS',
-    withArguments: _withArgumentsRecursiveInterfaceInheritanceImplements,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the mixin that constraints itself recursively
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  recursiveInterfaceInheritanceOn = CompileTimeErrorTemplate(
-    name: 'RECURSIVE_INTERFACE_INHERITANCE',
-    problemMessage: "'{0}' can't use itself as a superclass constraint.",
-    hasPublishedDocs: true,
-    uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_ON',
-    uniqueNameCheck: 'CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON',
-    withArguments: _withArgumentsRecursiveInterfaceInheritanceOn,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// 7.10 Superinterfaces: It is a compile-time error if the interface of a
-  /// class <i>C</i> is a superinterface of itself.
-  ///
-  /// 8.1 Superinterfaces: It is a compile-time error if an interface is a
-  /// superinterface of itself.
-  ///
-  /// 7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
-  /// superclass of itself.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class that implements itself recursively
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  recursiveInterfaceInheritanceWith = CompileTimeErrorTemplate(
-    name: 'RECURSIVE_INTERFACE_INHERITANCE',
-    problemMessage: "'{0}' can't use itself as a mixin.",
-    hasPublishedDocs: true,
-    uniqueName: 'RECURSIVE_INTERFACE_INHERITANCE_WITH',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH',
-    withArguments: _withArgumentsRecursiveInterfaceInheritanceWith,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor
-  /// String p1: the name of the class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  redirectGenerativeToMissingConstructor = CompileTimeErrorTemplate(
-    name: 'REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
-    problemMessage: "The constructor '{0}' couldn't be found in '{1}'.",
-    correctionMessage:
-        "Try redirecting to a different constructor, or defining the "
-        "constructor named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR',
-    withArguments: _withArgumentsRedirectGenerativeToMissingConstructor,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  redirectGenerativeToNonGenerativeConstructor = CompileTimeErrorWithoutArguments(
-    name: 'REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR',
-    problemMessage:
-        "Generative constructors can't redirect to a factory constructor.",
-    correctionMessage: "Try redirecting to a different constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the redirecting constructor
-  /// String p1: the name of the abstract class defining the constructor being
-  ///            redirected to
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  redirectToAbstractClassConstructor = CompileTimeErrorTemplate(
-    name: 'REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR',
-    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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR',
-    withArguments: _withArgumentsRedirectToAbstractClassConstructor,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the redirected constructor
-  /// Type p1: the name of the redirecting constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  redirectToInvalidFunctionType = CompileTimeErrorTemplate(
-    name: 'REDIRECT_TO_INVALID_FUNCTION_TYPE',
-    problemMessage:
-        "The redirected constructor '{0}' has incompatible parameters with '{1}'.",
-    correctionMessage: "Try redirecting to a different constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE',
-    withArguments: _withArgumentsRedirectToInvalidFunctionType,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the redirected constructor's return type
-  /// Type p1: the name of the redirecting constructor's return type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  redirectToInvalidReturnType = CompileTimeErrorTemplate(
-    name: 'REDIRECT_TO_INVALID_RETURN_TYPE',
-    problemMessage:
-        "The return type '{0}' of the redirected constructor isn't a subtype of "
-        "'{1}'.",
-    correctionMessage: "Try redirecting to a different constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE',
-    withArguments: _withArgumentsRedirectToInvalidReturnType,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor
-  /// Type p1: the name of the class containing the constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  redirectToMissingConstructor = CompileTimeErrorTemplate(
-    name: 'REDIRECT_TO_MISSING_CONSTRUCTOR',
-    problemMessage: "The constructor '{0}' couldn't be found in '{1}'.",
-    correctionMessage:
-        "Try redirecting to a different constructor, or define the constructor "
-        "named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR',
-    withArguments: _withArgumentsRedirectToMissingConstructor,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the non-type referenced in the redirect
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  redirectToNonClass = CompileTimeErrorTemplate(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.REDIRECT_TO_NON_CLASS',
-    withArguments: _withArgumentsRedirectToNonClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  redirectToNonConstConstructor = CompileTimeErrorWithoutArguments(
-    name: 'REDIRECT_TO_NON_CONST_CONSTRUCTOR',
-    problemMessage:
-        "A constant redirecting constructor can't redirect to a non-constant "
-        "constructor.",
-    correctionMessage: "Try redirecting to a different constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  redirectToTypeAliasExpandsToTypeParameter = CompileTimeErrorWithoutArguments(
-    name: 'REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    problemMessage:
-        "A redirecting constructor can't redirect to a type alias that expands to "
-        "a type parameter.",
-    correctionMessage: "Try replacing it with a class.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the variable
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  referencedBeforeDeclaration = CompileTimeErrorTemplate(
-    name: 'REFERENCED_BEFORE_DECLARATION',
-    problemMessage:
-        "Local variable '{0}' can't be referenced before it is declared.",
-    correctionMessage:
-        "Try moving the declaration to before the first use, or renaming the "
-        "local variable so that it doesn't hide a name from an enclosing "
-        "scope.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION',
-    withArguments: _withArgumentsReferencedBeforeDeclaration,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  refutablePatternInIrrefutableContext = CompileTimeErrorWithoutArguments(
-    name: 'REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT',
-    problemMessage:
-        "Refutable patterns can't be used in an irrefutable context.",
-    correctionMessage:
-        "Try using an if-case, a 'switch' statement, or a 'switch' expression "
-        "instead.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the operand type
-  /// Type p1: the parameter type of the invoked operator
-  /// String p2: the name of the invoked operator
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required String p2,
-    })
-  >
-  relationalPatternOperandTypeNotAssignable = CompileTimeErrorTemplate(
-    name: 'RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The constant expression type '{0}' is not assignable to the parameter "
-        "type '{1}' of the '{2}' operator.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsRelationalPatternOperandTypeNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  relationalPatternOperatorReturnTypeNotAssignableToBool =
-      CompileTimeErrorWithoutArguments(
-        name: 'RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL',
-        problemMessage:
-            "The return type of operators used in relational patterns must be "
-            "assignable to 'bool'.",
-        correctionMessage:
-            "Try updating the operator declaration to return 'bool'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments restElementInMapPattern =
-      CompileTimeErrorWithoutArguments(
-        name: 'REST_ELEMENT_IN_MAP_PATTERN',
-        problemMessage: "A map pattern can't contain a rest pattern.",
-        correctionMessage: "Try removing the rest pattern.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.REST_ELEMENT_IN_MAP_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments rethrowOutsideCatch =
-      CompileTimeErrorWithoutArguments(
-        name: 'RETHROW_OUTSIDE_CATCH',
-        problemMessage: "A rethrow must be inside of a catch clause.",
-        correctionMessage:
-            "Try moving the expression into a catch clause, or using a 'throw' "
-            "expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments returnInGenerativeConstructor =
-      CompileTimeErrorWithoutArguments(
-        name: 'RETURN_IN_GENERATIVE_CONSTRUCTOR',
-        problemMessage: "Constructors can't return values.",
-        correctionMessage:
-            "Try removing the return statement or using a factory constructor.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  returnInGenerator = CompileTimeErrorWithoutArguments(
-    name: 'RETURN_IN_GENERATOR',
-    problemMessage:
-        "Can't return a value from a generator function that uses the 'async*' or "
-        "'sync*' modifier.",
-    correctionMessage:
-        "Try replacing 'return' with 'yield', using a block function body, or "
-        "changing the method body modifier.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.RETURN_IN_GENERATOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type as declared in the return statement
-  /// Type p1: the expected return type as defined by the method
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  returnOfInvalidTypeFromClosure = CompileTimeErrorTemplate(
-    name: 'RETURN_OF_INVALID_TYPE_FROM_CLOSURE',
-    problemMessage:
-        "The returned type '{0}' isn't returnable from a '{1}' function, as "
-        "required by the closure's context.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE',
-    withArguments: _withArgumentsReturnOfInvalidTypeFromClosure,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type as declared in the return statement
-  /// Type p1: the expected return type as defined by the enclosing class
-  /// String p2: the name of the constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required String p2,
-    })
-  >
-  returnOfInvalidTypeFromConstructor = CompileTimeErrorTemplate(
-    name: 'RETURN_OF_INVALID_TYPE',
-    problemMessage:
-        "A value of type '{0}' can't be returned from the constructor '{2}' "
-        "because it has a return type of '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR',
-    withArguments: _withArgumentsReturnOfInvalidTypeFromConstructor,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type as declared in the return statement
-  /// Type p1: the expected return type as defined by the method
-  /// String p2: the name of the method
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required String p2,
-    })
-  >
-  returnOfInvalidTypeFromFunction = CompileTimeErrorTemplate(
-    name: 'RETURN_OF_INVALID_TYPE',
-    problemMessage:
-        "A value of type '{0}' can't be returned from the function '{2}' because "
-        "it has a return type of '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_FUNCTION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION',
-    withArguments: _withArgumentsReturnOfInvalidTypeFromFunction,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the expression in the return statement
-  /// Type p1: the expected return type as defined by the method
-  /// String p2: the name of the method
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required DartType p1,
-      required String p2,
-    })
-  >
-  returnOfInvalidTypeFromMethod = CompileTimeErrorTemplate(
-    name: 'RETURN_OF_INVALID_TYPE',
-    problemMessage:
-        "A value of type '{0}' can't be returned from the method '{2}' because it "
-        "has a return type of '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_METHOD',
-    uniqueNameCheck: 'CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD',
-    withArguments: _withArgumentsReturnOfInvalidTypeFromMethod,
-    expectedTypes: [ExpectedType.type, ExpectedType.type, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments returnWithoutValue =
-      CompileTimeErrorWithoutArguments(
-        name: 'RETURN_WITHOUT_VALUE',
-        problemMessage: "The return value is missing after 'return'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.RETURN_WITHOUT_VALUE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the sealed class being extended, implemented, or
-  ///            mixed in
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  sealedClassSubtypeOutsideOfLibrary = CompileTimeErrorTemplate(
-    name: 'INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY',
-    problemMessage:
-        "The class '{0}' can't be extended, implemented, or mixed in outside of "
-        "its library because it's a sealed class.",
-    hasPublishedDocs: true,
-    uniqueName: 'SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY',
-    withArguments: _withArgumentsSealedClassSubtypeOutsideOfLibrary,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  setElementFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be used as values in a "
-        "'const' set literal.",
-    correctionMessage:
-        "Try removing the keyword 'const' from the set literal or removing the "
-        "keyword 'deferred' from the import.",
-    hasPublishedDocs: true,
-    uniqueName: 'SET_ELEMENT_FROM_DEFERRED_LIBRARY',
-    uniqueNameCheck: 'CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the actual type of the set element
-  /// Type p1: the expected type of the set element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  setElementTypeNotAssignable = CompileTimeErrorTemplate(
-    name: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the set type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
-    withArguments: _withArgumentsSetElementTypeNotAssignable,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the actual type of the set element
-  /// Type p1: the expected type of the set element
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  setElementTypeNotAssignableNullability = CompileTimeErrorTemplate(
-    name: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
-    problemMessage:
-        "The element type '{0}' can't be assigned to the set type '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY',
-    withArguments: _withArgumentsSetElementTypeNotAssignableNullability,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  sharedDeferredPrefix = CompileTimeErrorWithoutArguments(
-    name: 'SHARED_DEFERRED_PREFIX',
-    problemMessage:
-        "The prefix of a deferred import can't be used in other import directives.",
-    correctionMessage: "Try renaming one of the prefixes.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.SHARED_DEFERRED_PREFIX',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  spreadExpressionFromDeferredLibrary = CompileTimeErrorWithoutArguments(
-    name: 'SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY',
-    problemMessage:
-        "Constant values from a deferred library can't be spread into a const "
-        "literal.",
-    correctionMessage: "Try making the deferred import non-deferred.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the instance member
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  staticAccessToInstanceMember = CompileTimeErrorTemplate(
-    name: 'STATIC_ACCESS_TO_INSTANCE_MEMBER',
-    problemMessage:
-        "Instance member '{0}' can't be accessed using static access.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER',
-    withArguments: _withArgumentsStaticAccessToInstanceMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subtype that is not 'base', 'final', or
-  ///            'sealed'
-  /// String p1: the name of the 'base' supertype
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  subtypeOfBaseIsNotBaseFinalOrSealed = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
-    problemMessage:
-        "The type '{0}' must be 'base', 'final' or 'sealed' because the supertype "
-        "'{1}' is 'base'.",
-    hasPublishedDocs: true,
-    uniqueName: 'SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED',
-    withArguments: _withArgumentsSubtypeOfBaseIsNotBaseFinalOrSealed,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the subtype that is not 'base', 'final', or
-  ///            'sealed'
-  /// String p1: the name of the 'final' supertype
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  subtypeOfFinalIsNotBaseFinalOrSealed = CompileTimeErrorTemplate(
-    name: 'SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
-    problemMessage:
-        "The type '{0}' must be 'base', 'final' or 'sealed' because the supertype "
-        "'{1}' is 'final'.",
-    hasPublishedDocs: true,
-    uniqueName: 'SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED',
-    withArguments: _withArgumentsSubtypeOfFinalIsNotBaseFinalOrSealed,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of super-parameter
-  /// Type p1: the type of associated super-constructor parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  superFormalParameterTypeIsNotSubtypeOfAssociated = CompileTimeErrorTemplate(
-    name: 'SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED',
-    problemMessage:
-        "The type '{0}' of this parameter isn't a subtype of the type '{1}' of the "
-        "associated super constructor parameter.",
-    correctionMessage:
-        "Try removing the explicit type annotation from the parameter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED',
-    withArguments:
-        _withArgumentsSuperFormalParameterTypeIsNotSubtypeOfAssociated,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  superFormalParameterWithoutAssociatedNamed = CompileTimeErrorWithoutArguments(
-    name: 'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED',
-    problemMessage: "No associated named super constructor parameter.",
-    correctionMessage:
-        "Try changing the name to the name of an existing named super "
-        "constructor parameter, or creating such named parameter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  superFormalParameterWithoutAssociatedPositional = CompileTimeErrorWithoutArguments(
-    name: 'SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL',
-    problemMessage: "No associated positional super constructor parameter.",
-    correctionMessage:
-        "Try using a normal parameter, or adding more positional parameters to "
-        "the super constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments superInEnumConstructor =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUPER_IN_ENUM_CONSTRUCTOR',
-        problemMessage:
-            "The enum constructor can't have a 'super' initializer.",
-        correctionMessage: "Try removing the 'super' invocation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  superInExtension = CompileTimeErrorWithoutArguments(
-    name: 'SUPER_IN_EXTENSION',
-    problemMessage:
-        "The 'super' keyword can't be used in an extension because an extension "
-        "doesn't have a superclass.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.SUPER_IN_EXTENSION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments superInExtensionType =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUPER_IN_EXTENSION_TYPE',
-        problemMessage:
-            "The 'super' keyword can't be used in an extension type because an "
-            "extension type doesn't have a superclass.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.SUPER_IN_EXTENSION_TYPE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments superInInvalidContext =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUPER_IN_INVALID_CONTEXT',
-        problemMessage: "Invalid context for 'super' invocation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT',
-        expectedTypes: [],
-      );
-
-  /// 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It
-  /// is a compile-time error if a generative constructor of class Object
-  /// includes a superinitializer.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments superInitializerInObject =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUPER_INITIALIZER_IN_OBJECT',
-        problemMessage:
-            "The class 'Object' can't invoke a constructor from a superclass.",
-        uniqueNameCheck: 'CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments superInRedirectingConstructor =
-      CompileTimeErrorWithoutArguments(
-        name: 'SUPER_IN_REDIRECTING_CONSTRUCTOR',
-        problemMessage:
-            "The redirecting constructor can't have a 'super' initializer.",
-        hasPublishedDocs: true,
-        uniqueNameCheck:
-            'CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the superinitializer
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  superInvocationNotLast = CompileTimeErrorTemplate(
-    name: 'SUPER_INVOCATION_NOT_LAST',
-    problemMessage:
-        "The superconstructor call must be last in an initializer list: '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.SUPER_INVOCATION_NOT_LAST',
-    withArguments: _withArgumentsSuperInvocationNotLast,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments switchCaseCompletesNormally =
-      CompileTimeErrorWithoutArguments(
-        name: 'SWITCH_CASE_COMPLETES_NORMALLY',
-        problemMessage: "The 'case' shouldn't complete normally.",
-        correctionMessage: "Try adding 'break', 'return', or 'throw'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  tearoffOfGenerativeConstructorOfAbstractClass = CompileTimeErrorWithoutArguments(
-    name: 'TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS',
-    problemMessage:
-        "A generative constructor of an abstract class can't be torn off.",
-    correctionMessage:
-        "Try tearing off a constructor of a concrete class, or a "
-        "non-generative constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the type that can't be thrown
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  throwOfInvalidType = CompileTimeErrorTemplate(
-    name: 'THROW_OF_INVALID_TYPE',
-    problemMessage:
-        "The type '{0}' of the thrown expression must be assignable to 'Object'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.THROW_OF_INVALID_TYPE',
-    withArguments: _withArgumentsThrowOfInvalidType,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the element whose type could not be inferred.
-  /// String p1: The [TopLevelInferenceError]'s arguments that led to the cycle.
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  topLevelCycle = CompileTimeErrorTemplate(
-    name: 'TOP_LEVEL_CYCLE',
-    problemMessage:
-        "The type of '{0}' can't be inferred because it depends on itself through "
-        "the cycle: {1}.",
-    correctionMessage:
-        "Try adding an explicit type to one or more of the variables in the "
-        "cycle in order to break the cycle.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TOP_LEVEL_CYCLE',
-    withArguments: _withArgumentsTopLevelCycle,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  typeAliasCannotReferenceItself = CompileTimeErrorWithoutArguments(
-    name: 'TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
-    problemMessage:
-        "Typedefs can't reference themselves directly or recursively via another "
-        "typedef.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type that is deferred and being used in a type
-  ///            annotation
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  typeAnnotationDeferredClass = CompileTimeErrorTemplate(
-    name: 'TYPE_ANNOTATION_DEFERRED_CLASS',
-    problemMessage:
-        "The deferred type '{0}' can't be used in a declaration, cast, or type "
-        "test.",
-    correctionMessage:
-        "Try using a different type, or changing the import to not be "
-        "deferred.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS',
-    withArguments: _withArgumentsTypeAnnotationDeferredClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the type used in the instance creation that should be
-  ///          limited by the bound as specified in the class declaration
-  /// String p1: the name of the type parameter
-  /// Type p2: the substituted bound of the type parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required String p1,
-      required DartType p2,
-    })
-  >
-  typeArgumentNotMatchingBounds = CompileTimeErrorTemplate(
-    name: 'TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
-    problemMessage:
-        "'{0}' doesn't conform to the bound '{2}' of the type parameter '{1}'.",
-    correctionMessage: "Try using a type that is or is a subclass of '{2}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS',
-    withArguments: _withArgumentsTypeArgumentNotMatchingBounds,
-    expectedTypes: [ExpectedType.type, ExpectedType.string, ExpectedType.type],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  typeParameterReferencedByStatic = CompileTimeErrorWithoutArguments(
-    name: 'TYPE_PARAMETER_REFERENCED_BY_STATIC',
-    problemMessage:
-        "Static members can't reference type parameters of the class.",
-    correctionMessage:
-        "Try removing the reference to the type parameter, or making the "
-        "member an instance member.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC',
-    expectedTypes: [],
-  );
-
-  /// See [CompileTimeErrorCode.typeArgumentNotMatchingBounds].
-  ///
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  /// Type p1: the name of the bounding type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  typeParameterSupertypeOfItsBound = CompileTimeErrorTemplate(
-    name: 'TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
-    problemMessage: "'{0}' can't be a supertype of its upper bound.",
-    correctionMessage:
-        "Try using a type that is the same as or a subclass of '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
-    withArguments: _withArgumentsTypeParameterSupertypeOfItsBound,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  typeTestWithNonType = CompileTimeErrorTemplate(
-    name: 'TYPE_TEST_WITH_NON_TYPE',
-    problemMessage:
-        "The name '{0}' isn't a type and can't be used in an 'is' expression.",
-    correctionMessage: "Try correcting the name to match an existing type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE',
-    withArguments: _withArgumentsTypeTestWithNonType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  typeTestWithUndefinedName = CompileTimeErrorTemplate(
-    name: 'TYPE_TEST_WITH_UNDEFINED_NAME',
-    problemMessage:
-        "The name '{0}' isn't defined, so it can't be used in an 'is' expression.",
-    correctionMessage:
-        "Try changing the name to the name of an existing type, or creating a "
-        "type with the name '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME',
-    withArguments: _withArgumentsTypeTestWithUndefinedName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  uncheckedInvocationOfNullableValue = CompileTimeErrorWithoutArguments(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage:
-        "The function can't be unconditionally invoked because it can be 'null'.",
-    correctionMessage: "Try adding a null check ('!').",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_INVOCATION_OF_NULLABLE_VALUE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  uncheckedMethodInvocationOfNullableValue = CompileTimeErrorTemplate(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage:
-        "The method '{0}' can't be unconditionally invoked because the receiver "
-        "can be 'null'.",
-    correctionMessage:
-        "Try making the call conditional (using '?.') or adding a null check "
-        "to the target ('!').",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE',
-    withArguments: _withArgumentsUncheckedMethodInvocationOfNullableValue,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the operator
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  uncheckedOperatorInvocationOfNullableValue = CompileTimeErrorTemplate(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage:
-        "The operator '{0}' can't be unconditionally invoked because the receiver "
-        "can be 'null'.",
-    correctionMessage: "Try adding a null check to the target ('!').",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE',
-    withArguments: _withArgumentsUncheckedOperatorInvocationOfNullableValue,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the property
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  uncheckedPropertyAccessOfNullableValue = CompileTimeErrorTemplate(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage:
-        "The property '{0}' can't be unconditionally accessed because the receiver "
-        "can be 'null'.",
-    correctionMessage:
-        "Try making the access conditional (using '?.') or adding a null check "
-        "to the target ('!').",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE',
-    withArguments: _withArgumentsUncheckedPropertyAccessOfNullableValue,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  uncheckedUseOfNullableValueAsCondition = CompileTimeErrorWithoutArguments(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage: "A nullable expression can't be used as a condition.",
-    correctionMessage:
-        "Try checking that the value isn't 'null' before using it as a "
-        "condition.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  uncheckedUseOfNullableValueAsIterator = CompileTimeErrorWithoutArguments(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage:
-        "A nullable expression can't be used as an iterator in a for-in loop.",
-    correctionMessage:
-        "Try checking that the value isn't 'null' before using it as an "
-        "iterator.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  uncheckedUseOfNullableValueInSpread = CompileTimeErrorWithoutArguments(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage: "A nullable expression can't be used in a spread.",
-    correctionMessage:
-        "Try checking that the value isn't 'null' before using it in a spread, "
-        "or use a null-aware spread.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  uncheckedUseOfNullableValueInYieldEach = CompileTimeErrorWithoutArguments(
-    name: 'UNCHECKED_USE_OF_NULLABLE_VALUE',
-    problemMessage:
-        "A nullable expression can't be used in a yield-each statement.",
-    correctionMessage:
-        "Try checking that the value isn't 'null' before using it in a "
-        "yield-each statement.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the annotation
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedAnnotation = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_ANNOTATION',
-    problemMessage: "Undefined name '{0}' used as an annotation.",
-    correctionMessage:
-        "Try defining the name or importing it from another library.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_ANNOTATION',
-    withArguments: _withArgumentsUndefinedAnnotation,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the undefined class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedClass = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_CLASS',
-    problemMessage: "Undefined class '{0}'.",
-    correctionMessage:
-        "Try changing the name to the name of an existing class, or creating a "
-        "class with the name '{0}'.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_CLASS',
-    withArguments: _withArgumentsUndefinedClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Same as [CompileTimeErrorCode.undefinedClass], but to catch using
-  /// "boolean" instead of "bool" in order to improve the correction message.
-  ///
-  /// Parameters:
-  /// String p0: the name of the undefined class
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedClassBoolean = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_CLASS',
-    problemMessage: "Undefined class '{0}'.",
-    correctionMessage: "Try using the type 'bool'.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueName: 'UNDEFINED_CLASS_BOOLEAN',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN',
-    withArguments: _withArgumentsUndefinedClassBoolean,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the superclass that does not define the invoked
-  ///          constructor
-  /// String p1: the name of the constructor being invoked
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required String p1})
-  >
-  undefinedConstructorInInitializer = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
-    problemMessage: "The class '{0}' doesn't have a constructor named '{1}'.",
-    correctionMessage:
-        "Try defining a constructor named '{1}' in '{0}', or invoking a "
-        "different constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
-    withArguments: _withArgumentsUndefinedConstructorInInitializer,
-    expectedTypes: [ExpectedType.type, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the superclass that does not define the invoked
-  ///            constructor
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  undefinedConstructorInInitializerDefault = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER',
-    problemMessage: "The class '{0}' doesn't have an unnamed constructor.",
-    correctionMessage:
-        "Try defining an unnamed constructor in '{0}', or invoking a different "
-        "constructor.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT',
-    withArguments: _withArgumentsUndefinedConstructorInInitializerDefault,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the enum value that is not defined
-  /// String p1: the name of the enum used to access the constant
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedEnumConstant = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_ENUM_CONSTANT',
-    problemMessage: "There's no constant named '{0}' in '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing constant, or "
-        "defining a constant named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT',
-    withArguments: _withArgumentsUndefinedEnumConstant,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constructor that is undefined
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedEnumConstructorNamed = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_ENUM_CONSTRUCTOR',
-    problemMessage: "The enum doesn't have a constructor named '{0}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing constructor, or "
-        "defining constructor with the name '{0}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_NAMED',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_NAMED',
-    withArguments: _withArgumentsUndefinedEnumConstructorNamed,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  undefinedEnumConstructorUnnamed = CompileTimeErrorWithoutArguments(
-    name: 'UNDEFINED_ENUM_CONSTRUCTOR',
-    problemMessage: "The enum doesn't have an unnamed constructor.",
-    correctionMessage:
-        "Try adding the name of an existing constructor, or defining an "
-        "unnamed constructor.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the getter that is undefined
-  /// String p1: the name of the extension that was explicitly specified
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedExtensionGetter = CompileTimeErrorTemplate(
-    name: '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}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER',
-    withArguments: _withArgumentsUndefinedExtensionGetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method that is undefined
-  /// String p1: the name of the extension that was explicitly specified
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedExtensionMethod = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_EXTENSION_METHOD',
-    problemMessage: "The method '{0}' isn't defined for the extension '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing method, or "
-        "defining a method named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD',
-    withArguments: _withArgumentsUndefinedExtensionMethod,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the operator that is undefined
-  /// String p1: the name of the extension that was explicitly specified
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedExtensionOperator = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_EXTENSION_OPERATOR',
-    problemMessage: "The operator '{0}' isn't defined for the extension '{1}'.",
-    correctionMessage: "Try defining the operator '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR',
-    withArguments: _withArgumentsUndefinedExtensionOperator,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the setter that is undefined
-  /// String p1: the name of the extension that was explicitly specified
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedExtensionSetter = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_EXTENSION_SETTER',
-    problemMessage: "The setter '{0}' isn't defined for the extension '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing setter, or "
-        "defining a setter named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER',
-    withArguments: _withArgumentsUndefinedExtensionSetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method that is undefined
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedFunction = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_FUNCTION',
-    problemMessage: "The function '{0}' isn't defined.",
-    correctionMessage:
-        "Try importing the library that defines '{0}', correcting the name to "
-        "the name of an existing function, or defining a function named '{0}'.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_FUNCTION',
-    withArguments: _withArgumentsUndefinedFunction,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the getter
-  /// Object p1: the name of the enclosing type where the getter is being looked
-  ///            for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required Object p1})
-  >
-  undefinedGetter = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_GETTER',
-    problemMessage: "The getter '{0}' isn't defined for the type '{1}'.",
-    correctionMessage:
-        "Try importing the library that defines '{0}', correcting the name to "
-        "the name of an existing getter, or defining a getter or field named "
-        "'{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_GETTER',
-    withArguments: _withArgumentsUndefinedGetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the getter
-  /// String p1: the name of the function type alias
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedGetterOnFunctionType = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_GETTER',
-    problemMessage:
-        "The getter '{0}' isn't defined for the '{1}' function type.",
-    correctionMessage:
-        "Try wrapping the function type alias in parentheses in order to "
-        "access '{0}' as an extension getter on 'Type'.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_GETTER_ON_FUNCTION_TYPE',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_GETTER_ON_FUNCTION_TYPE',
-    withArguments: _withArgumentsUndefinedGetterOnFunctionType,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the identifier
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedIdentifier = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_IDENTIFIER',
-    problemMessage: "Undefined name '{0}'.",
-    correctionMessage:
-        "Try correcting the name to one that is defined, or defining the name.",
-    hasPublishedDocs: true,
-    isUnresolvedIdentifier: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_IDENTIFIER',
-    withArguments: _withArgumentsUndefinedIdentifier,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  undefinedIdentifierAwait = CompileTimeErrorWithoutArguments(
-    name: 'UNDEFINED_IDENTIFIER_AWAIT',
-    problemMessage:
-        "Undefined name 'await' in function body not marked with 'async'.",
-    correctionMessage:
-        "Try correcting the name to one that is defined, defining the name, or "
-        "adding 'async' to the enclosing function body.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method that is undefined
-  /// Object p1: the resolved type name that the method lookup is happening on
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required Object p1})
-  >
-  undefinedMethod = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_METHOD',
-    problemMessage: "The method '{0}' isn't defined for the type '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing method, or "
-        "defining a method named '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_METHOD',
-    withArguments: _withArgumentsUndefinedMethod,
-    expectedTypes: [ExpectedType.string, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method
-  /// String p1: the name of the function type alias
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedMethodOnFunctionType = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_METHOD',
-    problemMessage:
-        "The method '{0}' isn't defined for the '{1}' function type.",
-    correctionMessage:
-        "Try wrapping the function type alias in parentheses in order to "
-        "access '{0}' as an extension method on 'Type'.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_METHOD_ON_FUNCTION_TYPE',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_METHOD_ON_FUNCTION_TYPE',
-    withArguments: _withArgumentsUndefinedMethodOnFunctionType,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the requested named parameter
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  undefinedNamedParameter = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_NAMED_PARAMETER',
-    problemMessage: "The named parameter '{0}' isn't defined.",
-    correctionMessage:
-        "Try correcting the name to an existing named parameter's name, or "
-        "defining a named parameter with the name '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER',
-    withArguments: _withArgumentsUndefinedNamedParameter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the operator
-  /// Type p1: the name of the enclosing type where the operator is being looked
-  ///          for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  undefinedOperator = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_OPERATOR',
-    problemMessage: "The operator '{0}' isn't defined for the type '{1}'.",
-    correctionMessage: "Try defining the operator '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_OPERATOR',
-    withArguments: _withArgumentsUndefinedOperator,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the reference
-  /// String p1: the name of the prefix
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedPrefixedName = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_PREFIXED_NAME',
-    problemMessage:
-        "The name '{0}' is being referenced through the prefix '{1}', but it isn't "
-        "defined in any of the libraries imported using that prefix.",
-    correctionMessage:
-        "Try correcting the prefix or importing the library that defines "
-        "'{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME',
-    withArguments: _withArgumentsUndefinedPrefixedName,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the setter
-  /// Type p1: the name of the enclosing type where the setter is being looked
-  ///          for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  undefinedSetter = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_SETTER',
-    problemMessage: "The setter '{0}' isn't defined for the type '{1}'.",
-    correctionMessage:
-        "Try importing the library that defines '{0}', correcting the name to "
-        "the name of an existing setter, or defining a setter or field named "
-        "'{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_SETTER',
-    withArguments: _withArgumentsUndefinedSetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the setter
-  /// String p1: the name of the function type alias
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedSetterOnFunctionType = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_SETTER',
-    problemMessage:
-        "The setter '{0}' isn't defined for the '{1}' function type.",
-    correctionMessage:
-        "Try wrapping the function type alias in parentheses in order to "
-        "access '{0}' as an extension getter on 'Type'.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_SETTER_ON_FUNCTION_TYPE',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_SETTER_ON_FUNCTION_TYPE',
-    withArguments: _withArgumentsUndefinedSetterOnFunctionType,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the getter
-  /// Type p1: the name of the enclosing type where the getter is being looked
-  ///          for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  undefinedSuperGetter = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_SUPER_MEMBER',
-    problemMessage: "The getter '{0}' isn't defined in a superclass of '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing getter, or "
-        "defining a getter or field named '{0}' in a superclass.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_SUPER_GETTER',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_SUPER_GETTER',
-    withArguments: _withArgumentsUndefinedSuperGetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method that is undefined
-  /// String p1: the resolved type name that the method lookup is happening on
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedSuperMethod = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_SUPER_MEMBER',
-    problemMessage: "The method '{0}' isn't defined in a superclass of '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing method, or "
-        "defining a method named '{0}' in a superclass.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_SUPER_METHOD',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_SUPER_METHOD',
-    withArguments: _withArgumentsUndefinedSuperMethod,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the operator
-  /// Type p1: the name of the enclosing type where the operator is being looked
-  ///          for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  undefinedSuperOperator = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_SUPER_MEMBER',
-    problemMessage:
-        "The operator '{0}' isn't defined in a superclass of '{1}'.",
-    correctionMessage: "Try defining the operator '{0}' in a superclass.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_SUPER_OPERATOR',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR',
-    withArguments: _withArgumentsUndefinedSuperOperator,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the setter
-  /// Type p1: the name of the enclosing type where the setter is being looked
-  ///          for
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  undefinedSuperSetter = CompileTimeErrorTemplate(
-    name: 'UNDEFINED_SUPER_MEMBER',
-    problemMessage: "The setter '{0}' isn't defined in a superclass of '{1}'.",
-    correctionMessage:
-        "Try correcting the name to the name of an existing setter, or "
-        "defining a setter or field named '{0}' in a superclass.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNDEFINED_SUPER_SETTER',
-    uniqueNameCheck: 'CompileTimeErrorCode.UNDEFINED_SUPER_SETTER',
-    withArguments: _withArgumentsUndefinedSuperSetter,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// This is a specialization of [instanceAccessToStaticMember] that is used
-  /// when we are able to find the name defined in a supertype. It exists to
-  /// provide a more informative error message.
-  ///
-  /// Parameters:
-  /// String p0: the name of the defining type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unqualifiedReferenceToNonLocalStaticMember = CompileTimeErrorTemplate(
-    name: 'UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER',
-    problemMessage:
-        "Static members from supertypes must be qualified by the name of the "
-        "defining type.",
-    correctionMessage: "Try adding '{0}.' before the name.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER',
-    withArguments: _withArgumentsUnqualifiedReferenceToNonLocalStaticMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the defining type
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unqualifiedReferenceToStaticMemberOfExtendedType = CompileTimeErrorTemplate(
-    name: 'UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE',
-    problemMessage:
-        "Static members from the extended type or one of its superclasses must be "
-        "qualified by the name of the defining type.",
-    correctionMessage: "Try adding '{0}.' before the name.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE',
-    withArguments:
-        _withArgumentsUnqualifiedReferenceToStaticMemberOfExtendedType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a nonexistent file
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  uriDoesNotExist = CompileTimeErrorTemplate(
-    name: 'URI_DOES_NOT_EXIST',
-    problemMessage: "Target of URI doesn't exist: '{0}'.",
-    correctionMessage:
-        "Try creating the file referenced by the URI, or try using a URI for a "
-        "file that does exist.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.URI_DOES_NOT_EXIST',
-    withArguments: _withArgumentsUriDoesNotExist,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a nonexistent file
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  uriHasNotBeenGenerated = CompileTimeErrorTemplate(
-    name: 'URI_HAS_NOT_BEEN_GENERATED',
-    problemMessage: "Target of URI hasn't been generated: '{0}'.",
-    correctionMessage:
-        "Try running the generator that will generate the file referenced by "
-        "the URI.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED',
-    withArguments: _withArgumentsUriHasNotBeenGenerated,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments uriWithInterpolation =
-      CompileTimeErrorWithoutArguments(
-        name: 'URI_WITH_INTERPOLATION',
-        problemMessage: "URIs can't use string interpolation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.URI_WITH_INTERPOLATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  useOfNativeExtension = CompileTimeErrorWithoutArguments(
-    name: 'USE_OF_NATIVE_EXTENSION',
-    problemMessage:
-        "Dart native extensions are deprecated and aren't available in Dart 2.15.",
-    correctionMessage: "Try using dart:ffi for C interop.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.USE_OF_NATIVE_EXTENSION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  useOfVoidResult = CompileTimeErrorWithoutArguments(
-    name: 'USE_OF_VOID_RESULT',
-    problemMessage:
-        "This expression has a type of 'void' so its value can't be used.",
-    correctionMessage:
-        "Try checking to see if you're using the correct API; there might be a "
-        "function or call that returns void you didn't expect. Also check type "
-        "parameters and variables which might also be void.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.USE_OF_VOID_RESULT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments valuesDeclarationInEnum =
-      CompileTimeErrorWithoutArguments(
-        name: 'VALUES_DECLARATION_IN_ENUM',
-        problemMessage: "A member named 'values' can't be declared in an enum.",
-        correctionMessage: "Try using a different name.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the type of the object being assigned.
-  /// Object p1: the type of the variable being assigned to
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  variableTypeMismatch = CompileTimeErrorTemplate(
-    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",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.VARIABLE_TYPE_MISMATCH',
-    withArguments: _withArgumentsVariableTypeMismatch,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Let `C` be a generic class that declares a formal type parameter `X`, and
-  /// assume that `T` is a direct superinterface of `C`.
-  ///
-  /// It is a compile-time error if `X` is explicitly defined as a covariant or
-  /// 'in' type parameter and `X` occurs in a non-covariant position in `T`.
-  /// It is a compile-time error if `X` is explicitly defined as a contravariant
-  /// or 'out' type parameter and `X` occurs in a non-contravariant position in
-  /// `T`.
-  ///
-  /// Parameters:
-  /// Object p0: the name of the type parameter
-  /// Object p1: the variance modifier defined for {0}
-  /// Object p2: the variance position of the type parameter {0} in the
-  ///            superinterface {3}
-  /// Object p3: the name of the superinterface
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-    })
-  >
-  wrongExplicitTypeParameterVarianceInSuperinterface = CompileTimeErrorTemplate(
-    name: 'WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
-    problemMessage:
-        "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position "
-        "in '{3}'.",
-    correctionMessage:
-        "Try using 'in' type parameters in 'in' positions and 'out' type "
-        "parameters in 'out' positions in the superinterface.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
-    withArguments:
-        _withArgumentsWrongExplicitTypeParameterVarianceInSuperinterface,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the declared operator
-  /// int p1: the number of parameters expected
-  /// int p2: the number of parameters found in the operator declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required int p1,
-      required int p2,
-    })
-  >
-  wrongNumberOfParametersForOperator = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
-    problemMessage:
-        "Operator '{0}' should declare exactly {1} parameters, but {2} found.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
-    withArguments: _withArgumentsWrongNumberOfParametersForOperator,
-    expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
-  );
-
-  /// 7.1.1 Operators: It is a compile time error if the arity of the
-  /// user-declared operator - is not 0 or 1.
-  ///
-  /// Parameters:
-  /// int p0: the number of parameters found in the operator declaration
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0})
-  >
-  wrongNumberOfParametersForOperatorMinus = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR',
-    problemMessage:
-        "Operator '-' should declare 0 or 1 parameter, but {0} found.",
-    hasPublishedDocs: true,
-    uniqueName: 'WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS',
-    withArguments: _withArgumentsWrongNumberOfParametersForOperatorMinus,
-    expectedTypes: [ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the type being referenced (<i>G</i>)
-  /// int p1: the number of type parameters that were declared
-  /// int p2: the number of type arguments provided
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required int p1,
-      required int p2,
-    })
-  >
-  wrongNumberOfTypeArguments = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS',
-    problemMessage:
-        "The type '{0}' is declared with {1} type parameters, but {2} type "
-        "arguments were given.",
-    correctionMessage:
-        "Try adjusting the number of type arguments to match the number of "
-        "type parameters.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS',
-    withArguments: _withArgumentsWrongNumberOfTypeArguments,
-    expectedTypes: [ExpectedType.object, ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// int p0: the number of type parameters that were declared
-  /// int p1: the number of type arguments provided
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  wrongNumberOfTypeArgumentsAnonymousFunction = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
-    problemMessage:
-        "This function is declared with {0} type parameters, but {1} type "
-        "arguments were given.",
-    correctionMessage:
-        "Try adjusting the number of type arguments to match the number of "
-        "type parameters.",
-    uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION',
-    withArguments: _withArgumentsWrongNumberOfTypeArgumentsAnonymousFunction,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class being instantiated
-  /// String p1: the name of the constructor being invoked
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  wrongNumberOfTypeArgumentsConstructor = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
-    problemMessage: "The constructor '{0}.{1}' doesn't have type parameters.",
-    correctionMessage: "Try moving type arguments to after the type name.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
-    withArguments: _withArgumentsWrongNumberOfTypeArgumentsConstructor,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class being instantiated
-  /// String p1: the name of the constructor being invoked
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  wrongNumberOfTypeArgumentsDotShorthandConstructor = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR',
-    problemMessage: "The constructor '{0}.{1}` doesn't have type parameters.",
-    correctionMessage:
-        "Try removing the type arguments, or adding a class name, followed by "
-        "the type arguments, then the constructor name.",
-    hasPublishedDocs: true,
-    uniqueName: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_DOT_SHORTHAND_CONSTRUCTOR',
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_DOT_SHORTHAND_CONSTRUCTOR',
-    withArguments:
-        _withArgumentsWrongNumberOfTypeArgumentsDotShorthandConstructor,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// int p0: the number of type parameters that were declared
-  /// int p1: the number of type arguments provided
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required int p0, required int p1})
-  >
-  wrongNumberOfTypeArgumentsEnum = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM',
-    problemMessage:
-        "The enum is declared with {0} type parameters, but {1} type arguments "
-        "were given.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM',
-    withArguments: _withArgumentsWrongNumberOfTypeArgumentsEnum,
-    expectedTypes: [ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the extension being referenced
-  /// int p1: the number of type parameters that were declared
-  /// int p2: the number of type arguments provided
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required int p1,
-      required int p2,
-    })
-  >
-  wrongNumberOfTypeArgumentsExtension = CompileTimeErrorTemplate(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION',
-    withArguments: _withArgumentsWrongNumberOfTypeArgumentsExtension,
-    expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the function being referenced
-  /// int p1: the number of type parameters that were declared
-  /// int p2: the number of type arguments provided
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required int p1,
-      required int p2,
-    })
-  >
-  wrongNumberOfTypeArgumentsFunction = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
-    problemMessage:
-        "The function '{0}' is declared with {1} type parameters, but {2} type "
-        "arguments were given.",
-    correctionMessage:
-        "Try adjusting the number of type arguments to match the number of "
-        "type parameters.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION',
-    withArguments: _withArgumentsWrongNumberOfTypeArgumentsFunction,
-    expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the method being referenced (<i>G</i>)
-  /// int p1: the number of type parameters that were declared
-  /// int p2: the number of type arguments provided
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required DartType p0,
-      required int p1,
-      required int p2,
-    })
-  >
-  wrongNumberOfTypeArgumentsMethod = CompileTimeErrorTemplate(
-    name: 'WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD',
-    problemMessage:
-        "The method '{0}' is declared with {1} type parameters, but {2} type "
-        "arguments are given.",
-    correctionMessage: "Try adjusting the number of type arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD',
-    withArguments: _withArgumentsWrongNumberOfTypeArgumentsMethod,
-    expectedTypes: [ExpectedType.type, ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Let `C` be a generic class that declares a formal type parameter `X`, and
-  /// assume that `T` is a direct superinterface of `C`. It is a compile-time
-  /// error if `X` occurs contravariantly or invariantly in `T`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the type parameter
-  /// Type p1: the name of the super interface
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required String p0, required DartType p1})
-  >
-  wrongTypeParameterVarianceInSuperinterface = CompileTimeErrorTemplate(
-    name: 'WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
-    problemMessage:
-        "'{0}' can't be used contravariantly or invariantly in '{1}'.",
-    correctionMessage:
-        "Try not using class type parameters in types of formal parameters of "
-        "function types, nor in explicitly contravariant or invariant "
-        "superinterfaces.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
-    withArguments: _withArgumentsWrongTypeParameterVarianceInSuperinterface,
-    expectedTypes: [ExpectedType.string, ExpectedType.type],
-  );
-
-  /// Let `C` be a generic class that declares a formal type parameter `X`.
-  ///
-  /// If `X` is explicitly contravariant then it is a compile-time error for
-  /// `X` to occur in a non-contravariant position in a member signature in the
-  /// body of `C`, except when `X` is in a contravariant position in the type
-  /// annotation of a covariant formal parameter.
-  ///
-  /// If `X` is explicitly covariant then it is a compile-time error for
-  /// `X` to occur in a non-covariant position in a member signature in the
-  /// body of `C`, except when `X` is in a covariant position in the type
-  /// annotation of a covariant formal parameter.
-  ///
-  /// Parameters:
-  /// Object p0: the variance modifier defined for {0}
-  /// Object p1: the name of the type parameter
-  /// Object p2: the variance position that the type parameter {1} is in
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  wrongTypeParameterVariancePosition = CompileTimeErrorTemplate(
-    name: 'WRONG_TYPE_PARAMETER_VARIANCE_POSITION',
-    problemMessage:
-        "The '{0}' type parameter '{1}' can't be used in an '{2}' position.",
-    correctionMessage:
-        "Try removing the type parameter or change the explicit variance "
-        "modifier declaration for the type parameter to another one of 'in', "
-        "'out', or 'inout'.",
-    uniqueNameCheck:
-        'CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION',
-    withArguments: _withArgumentsWrongTypeParameterVariancePosition,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  yieldEachInNonGenerator = CompileTimeErrorWithoutArguments(
-    name: 'YIELD_IN_NON_GENERATOR',
-    problemMessage:
-        "Yield-each statements must be in a generator function (one marked with "
-        "either 'async*' or 'sync*').",
-    correctionMessage:
-        "Try adding 'async*' or 'sync*' to the enclosing function.",
-    hasPublishedDocs: true,
-    uniqueName: 'YIELD_EACH_IN_NON_GENERATOR',
-    uniqueNameCheck: 'CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the expression after `yield*`
-  /// Type p1: the return type of the function containing the `yield*`
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  yieldEachOfInvalidType = CompileTimeErrorTemplate(
-    name: 'YIELD_OF_INVALID_TYPE',
-    problemMessage:
-        "The type '{0}' implied by the 'yield*' expression must be assignable to "
-        "'{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'YIELD_EACH_OF_INVALID_TYPE',
-    uniqueNameCheck: 'CompileTimeErrorCode.YIELD_EACH_OF_INVALID_TYPE',
-    withArguments: _withArgumentsYieldEachOfInvalidType,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// ?? Yield: It is a compile-time error if a yield statement appears in a
-  /// function that is not a generator function.
-  ///
-  /// No parameters.
-  static const CompileTimeErrorWithoutArguments
-  yieldInNonGenerator = CompileTimeErrorWithoutArguments(
-    name: 'YIELD_IN_NON_GENERATOR',
-    problemMessage:
-        "Yield statements must be in a generator function (one marked with either "
-        "'async*' or 'sync*').",
-    correctionMessage:
-        "Try adding 'async*' or 'sync*' to the enclosing function.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.YIELD_IN_NON_GENERATOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the type of the expression after `yield`
-  /// Type p1: the return type of the function containing the `yield`
-  static const CompileTimeErrorTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  yieldOfInvalidType = CompileTimeErrorTemplate(
-    name: 'YIELD_OF_INVALID_TYPE',
-    problemMessage:
-        "A yielded value of type '{0}' must be assignable to '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'CompileTimeErrorCode.YIELD_OF_INVALID_TYPE',
-    withArguments: _withArgumentsYieldOfInvalidType,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const CompileTimeErrorCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.COMPILE_TIME_ERROR,
-         uniqueName: 'CompileTimeErrorCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsAbstractSuperMemberReference({
-    required String memberKind,
-    required String name,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.abstractSuperMemberReference,
-      [memberKind, name],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAmbiguousExport({
-    required String p0,
-    required Uri p1,
-    required Uri p2,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.ambiguousExport, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAmbiguousExtensionMemberAccessThreeOrMore({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.ambiguousExtensionMemberAccessThreeOrMore,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAmbiguousExtensionMemberAccessTwo({
-    required String p0,
-    required Element p1,
-    required Element p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAmbiguousImport({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.ambiguousImport, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsArgumentTypeNotAssignable({
-    required DartType p0,
-    required DartType p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.argumentTypeNotAssignable,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAssignmentToFinal({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.assignmentToFinal, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsAssignmentToFinalLocal({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.assignmentToFinalLocal,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAssignmentToFinalNoSetter({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.assignmentToFinalNoSetter,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAugmentationModifierExtra({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.augmentationModifierExtra,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAugmentationModifierMissing({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.augmentationModifierMissing,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAugmentationOfDifferentDeclarationKind({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAugmentedExpressionNotOperator({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.augmentedExpressionNotOperator,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsBaseClassImplementedOutsideOfLibrary({
-    required String implementedClassName,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-      [implementedClassName],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsBaseMixinImplementedOutsideOfLibrary({
-    required String implementedMixinName,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-      [implementedMixinName],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBodyMightCompleteNormally({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.bodyMightCompleteNormally,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBuiltInIdentifierAsExtensionName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsExtensionName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsBuiltInIdentifierAsExtensionTypeName({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsExtensionTypeName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBuiltInIdentifierAsPrefixName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsPrefixName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBuiltInIdentifierAsType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBuiltInIdentifierAsTypedefName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsTypedefName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBuiltInIdentifierAsTypeName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsTypeName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsBuiltInIdentifierAsTypeParameterName({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.builtInIdentifierAsTypeParameterName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsCaseExpressionTypeImplementsEquals({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.caseExpressionTypeImplementsEquals,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsCaseExpressionTypeIsNotSwitchExpressionSubtype({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsCastToNonType({required String p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.castToNonType, [p0]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsClassInstantiationAccessToInstanceMember({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.classInstantiationAccessToInstanceMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsClassInstantiationAccessToStaticMember({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.classInstantiationAccessToStaticMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsClassInstantiationAccessToUnknownMember({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.classInstantiationAccessToUnknownMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsClassUsedAsMixin({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.classUsedAsMixin, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsConcreteClassWithAbstractMember({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.concreteClassWithAbstractMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingConstructorAndStaticField({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingConstructorAndStaticField,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingConstructorAndStaticGetter({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingConstructorAndStaticMethod({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingConstructorAndStaticMethod,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingConstructorAndStaticSetter({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingConstructorAndStaticSetter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingFieldAndMethod({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingFieldAndMethod,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingGenericInterfaces({
-    required String p0,
-    required String p1,
-    required String p2,
-    required String p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingGenericInterfaces,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingInheritedMethodAndSetter({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingMethodAndField({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingMethodAndField,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingStaticAndInstance({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingStaticAndInstance,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingTypeVariableAndClass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingTypeVariableAndEnum({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndEnum,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingTypeVariableAndExtension({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndExtension,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingTypeVariableAndExtensionType({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndExtensionType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingTypeVariableAndMemberClass({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndMemberClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingTypeVariableAndMemberEnum({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndMemberEnum,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingTypeVariableAndMemberExtension({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingTypeVariableAndMemberExtensionType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConflictingTypeVariableAndMemberMixin({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConflictingTypeVariableAndMixin({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.conflictingTypeVariableAndMixin,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstConstructorFieldTypeMismatch({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constConstructorFieldTypeMismatch,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstConstructorParamTypeMismatch({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constConstructorParamTypeMismatch,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConstConstructorWithFieldInitializedByNonConst({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstConstructorWithMixinWithField({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constConstructorWithMixinWithField,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstConstructorWithMixinWithFields({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constConstructorWithMixinWithFields,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstConstructorWithNonConstSuper({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constConstructorWithNonConstSuper,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConstEvalAssertionFailureWithMessage({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constEvalAssertionFailureWithMessage,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstEvalPropertyAccess({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constEvalPropertyAccess,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstFieldInitializerNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constFieldInitializerNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstMapKeyNotPrimitiveEquality({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constMapKeyNotPrimitiveEquality,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstNotInitialized({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.constNotInitialized, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsConstSetElementNotPrimitiveEquality({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constSetElementNotPrimitiveEquality,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConstWithNonType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.constWithNonType, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsConstWithUndefinedConstructor({
-    required Object p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constWithUndefinedConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConstWithUndefinedConstructorDefault({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.constWithUndefinedConstructorDefault,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsCouldNotInfer({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.couldNotInfer, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsDefinitelyUnassignedLateLocalVariable({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDotShorthandUndefinedGetter({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.dotShorthandUndefinedGetter,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDotShorthandUndefinedInvocation({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.dotShorthandUndefinedInvocation,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateConstructorName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.duplicateConstructorName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateDefinition({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.duplicateDefinition, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateFieldFormalParameter({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.duplicateFieldFormalParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateFieldName({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.duplicateFieldName, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateNamedArgument({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.duplicateNamedArgument,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicatePart({required Uri p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.duplicatePart, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicatePatternAssignmentVariable({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.duplicatePatternAssignmentVariable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicatePatternField({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.duplicatePatternField, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateVariablePattern({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.duplicateVariablePattern,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsEnumWithAbstractMember({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.enumWithAbstractMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedOneListPatternTypeArguments({
-    required int p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.expectedOneListPatternTypeArguments,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedOneListTypeArguments({
-    required int p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.expectedOneListTypeArguments,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedOneSetTypeArguments({
-    required int p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.expectedOneSetTypeArguments,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedTwoMapPatternTypeArguments({
-    required int p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.expectedTwoMapPatternTypeArguments,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExpectedTwoMapTypeArguments({
-    required int p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.expectedTwoMapTypeArguments,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExportInternalLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.exportInternalLibrary, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExportOfNonLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.exportOfNonLibrary, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExtendsDisallowedClass({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extendsDisallowedClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExtensionAsExpression({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.extensionAsExpression, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsExtensionConflictingStaticAndInstance({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionConflictingStaticAndInstance,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsExtensionOverrideArgumentNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsExtensionTypeImplementsDisallowedType({required DartType p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExtensionTypeImplementsNotSupertype({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionTypeImplementsNotSupertype,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsExtensionTypeImplementsRepresentationNotSupertype({
-    required DartType p0,
-    required String p1,
-    required DartType p2,
-    required String p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionTypeImplementsRepresentationNotSupertype,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsExtensionTypeInheritedMemberConflict({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExtensionTypeWithAbstractMember({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extensionTypeWithAbstractMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExtraPositionalArguments({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extraPositionalArguments,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsExtraPositionalArgumentsCouldBeNamed({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFieldInitializedByMultipleInitializers({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.fieldInitializedByMultipleInitializers,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsFieldInitializerNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.fieldInitializerNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFieldInitializingFormalNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsFinalClassExtendedOutsideOfLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFinalClassImplementedOutsideOfLibrary({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFinalClassUsedAsMixinConstraintOutsideOfLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsFinalInitializedInDeclarationAndConstructor({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsFinalNotInitialized({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.finalNotInitialized, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsFinalNotInitializedConstructor1({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalNotInitializedConstructor1,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsFinalNotInitializedConstructor2({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalNotInitializedConstructor2,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsFinalNotInitializedConstructor3Plus({
-    required String p0,
-    required String p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.finalNotInitializedConstructor3Plus,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsForInOfInvalidElementType({
-    required DartType p0,
-    required String p1,
-    required DartType p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.forInOfInvalidElementType,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsForInOfInvalidType({
-    required DartType p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.forInOfInvalidType, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsGetterNotAssignableSetterTypes({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.getterNotAssignableSetterTypes,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsGetterNotSubtypeSetterTypes({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.getterNotSubtypeSetterTypes,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsIllegalConcreteEnumMemberDeclaration({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsIllegalConcreteEnumMemberInheritance({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.illegalConcreteEnumMemberInheritance,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIllegalEnumValuesInheritance({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.illegalEnumValuesInheritance,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIllegalLanguageVersionOverride({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.illegalLanguageVersionOverride,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsImplementsDisallowedClass({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.implementsDisallowedClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsImplementsRepeated({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.implementsRepeated, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsImplementsSuperClass({
-    required Element p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.implementsSuperClass, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsImplicitSuperInitializerMissingArguments({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.implicitSuperInitializerMissingArguments,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsImplicitThisReferenceInInitializer({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.implicitThisReferenceInInitializer,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsImportInternalLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.importInternalLibrary, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsImportOfNonLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.importOfNonLibrary, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInconsistentCaseExpressionTypes({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.inconsistentCaseExpressionTypes,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInconsistentInheritance({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.inconsistentInheritance,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInconsistentInheritanceGetterAndMethod({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInconsistentPatternVariableLogicalOr({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.inconsistentPatternVariableLogicalOr,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInitializerForNonExistentField({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.initializerForNonExistentField,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInitializerForStaticField({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.initializerForStaticField,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInitializingFormalForNonExistentField({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.initializingFormalForNonExistentField,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInstanceAccessToStaticMember({
-    required String p0,
-    required String p1,
-    required String p2,
-    required String p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.instanceAccessToStaticMember,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInstanceAccessToStaticMemberOfUnnamedExtension({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.instanceAccessToStaticMemberOfUnnamedExtension,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIntegerLiteralImpreciseAsDouble({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.integerLiteralImpreciseAsDouble,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsIntegerLiteralOutOfRange({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.integerLiteralOutOfRange,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInterfaceClassExtendedOutsideOfLibrary({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidAssignment({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidAssignment, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastFunction({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidCastFunction, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastFunctionExpr({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidCastFunctionExpr,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastLiteral({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidCastLiteral, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastLiteralList({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidCastLiteralList,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastLiteralMap({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidCastLiteralMap, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastLiteralSet({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidCastLiteralSet, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastMethod({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidCastMethod, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidCastNewExpr({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidCastNewExpr, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidImplementationOverride({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-    required Object p4,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidImplementationOverride,
-      [p0, p1, p2, p3, p4],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidImplementationOverrideSetter({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-    required Object p4,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidImplementationOverrideSetter,
-      [p0, p1, p2, p3, p4],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidModifierOnConstructor({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidModifierOnConstructor,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidOverride({
-    required String p0,
-    required String p1,
-    required DartType p2,
-    required String p3,
-    required DartType p4,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidOverride, [
-      p0,
-      p1,
-      p2,
-      p3,
-      p4,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidOverrideSetter({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-    required Object p4,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidOverrideSetter, [
-      p0,
-      p1,
-      p2,
-      p3,
-      p4,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidTypeArgumentInConstList({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidTypeArgumentInConstList,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidTypeArgumentInConstMap({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidTypeArgumentInConstMap,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidTypeArgumentInConstSet({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invalidTypeArgumentInConstSet,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidUri({required String p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.invalidUri, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvocationOfExtensionWithoutCall({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invocationOfExtensionWithoutCall,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvocationOfNonFunction({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.invocationOfNonFunction,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsLabelInOuterScope({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.labelInOuterScope, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsLabelUndefined({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.labelUndefined, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsListElementTypeNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.listElementTypeNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsListElementTypeNotAssignableNullability({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMapKeyTypeNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mapKeyTypeNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMapKeyTypeNotAssignableNullability({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mapKeyTypeNotAssignableNullability,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMapValueTypeNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mapValueTypeNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMapValueTypeNotAssignableNullability({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mapValueTypeNotAssignableNullability,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingDartLibrary({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.missingDartLibrary, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingDefaultValueForParameter({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.missingDefaultValueForParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMissingDefaultValueForParameterPositional({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingRequiredArgument({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.missingRequiredArgument,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingVariablePattern({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.missingVariablePattern,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMixinApplicationConcreteSuperInvokedMemberType({
-    required String p0,
-    required DartType p1,
-    required DartType p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinApplicationConcreteSuperInvokedMemberType,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMixinApplicationNoConcreteSuperInvokedMember({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMixinApplicationNoConcreteSuperInvokedSetter({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedSetter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMixinApplicationNotImplementedInterface({
-    required DartType p0,
-    required DartType p1,
-    required DartType p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMixinClassDeclarationExtendsNotObject({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinClassDeclaresConstructor({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinClassDeclaresConstructor,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinInheritsFromNotObject({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinInheritsFromNotObject,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinOfDisallowedClass({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinOfDisallowedClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinsSuperClass({
-    required Element p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.mixinsSuperClass, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinSubtypeOfBaseIsNotBase({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinSubtypeOfFinalIsNotBase({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMixinSuperClassConstraintDisallowedClass({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNewWithNonType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.newWithNonType, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNewWithUndefinedConstructor({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.newWithUndefinedConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNewWithUndefinedConstructorDefault({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.newWithUndefinedConstructorDefault,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNoCombinedSuperSignature({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.noCombinedSuperSignature,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNoDefaultSuperConstructorExplicit({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.noDefaultSuperConstructorExplicit,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNoDefaultSuperConstructorImplicit({
-    required DartType p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.noDefaultSuperConstructorImplicit,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNoGenerativeConstructorsInSuperclass({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.noGenerativeConstructorsInSuperclass,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonAbstractClassInheritsAbstractMemberFivePlus({
-    required String p0,
-    required String p1,
-    required String p2,
-    required String p3,
-    required int p4,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFivePlus,
-      [p0, p1, p2, p3, p4],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonAbstractClassInheritsAbstractMemberFour({
-    required String p0,
-    required String p1,
-    required String p2,
-    required String p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFour,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonAbstractClassInheritsAbstractMemberOne({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonAbstractClassInheritsAbstractMemberThree({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberThree,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonAbstractClassInheritsAbstractMemberTwo({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonBoolOperand({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.nonBoolOperand, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNonExhaustiveSwitchExpression({
-    required DartType p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonExhaustiveSwitchExpression,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonExhaustiveSwitchStatement({
-    required DartType p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonExhaustiveSwitchStatement,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonGenerativeConstructor({
-    required Element p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonGenerativeConstructor,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonGenerativeImplicitConstructor({
-    required String p0,
-    required String p1,
-    required Element p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.nonGenerativeImplicitConstructor,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonTypeAsTypeArgument({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.nonTypeAsTypeArgument, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNonTypeInCatchClause({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.nonTypeInCatchClause, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNotAssignedPotentiallyNonNullableLocalVariable({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNotAType({required String p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.notAType, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNotBinaryOperator({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.notBinaryOperator, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNotEnoughPositionalArgumentsNamePlural({
-    required int p0,
-    required int p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNotEnoughPositionalArgumentsNameSingular({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNotEnoughPositionalArgumentsPlural({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notEnoughPositionalArgumentsPlural,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNotInitializedNonNullableInstanceField({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNotInitializedNonNullableInstanceFieldConstructor({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notInitializedNonNullableInstanceFieldConstructor,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNotInitializedNonNullableVariable({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.notInitializedNonNullableVariable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsOnRepeated({required String p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.onRepeated, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPartOfDifferentLibrary({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.partOfDifferentLibrary,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPartOfNonPart({required String p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.partOfNonPart, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPartOfUnnamedLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.partOfUnnamedLibrary, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsPatternTypeMismatchInIrrefutableContext({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsPatternVariableSharedCaseScopeDifferentFinalityOrType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode
-          .patternVariableSharedCaseScopeDifferentFinalityOrType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsPatternVariableSharedCaseScopeHasLabel({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.patternVariableSharedCaseScopeHasLabel,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsPatternVariableSharedCaseScopeNotAllCases({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPrefixCollidesWithTopLevelMember({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPrefixIdentifierNotFollowedByDot({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.prefixIdentifierNotFollowedByDot,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPrefixShadowedByLocalDeclaration({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPrivateCollisionInMixinApplication({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.privateCollisionInMixinApplication,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPrivateSetter({required String p0}) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.privateSetter, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsReadPotentiallyUnassignedFinal({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.readPotentiallyUnassignedFinal,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritance({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.recursiveInterfaceInheritance,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsRecursiveInterfaceInheritanceExtends({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.recursiveInterfaceInheritanceExtends,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsRecursiveInterfaceInheritanceImplements({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritanceOn({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.recursiveInterfaceInheritanceOn,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRecursiveInterfaceInheritanceWith({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.recursiveInterfaceInheritanceWith,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsRedirectGenerativeToMissingConstructor({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRedirectToAbstractClassConstructor({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.redirectToAbstractClassConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRedirectToInvalidFunctionType({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.redirectToInvalidFunctionType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRedirectToInvalidReturnType({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.redirectToInvalidReturnType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRedirectToMissingConstructor({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.redirectToMissingConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRedirectToNonClass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.redirectToNonClass, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsReferencedBeforeDeclaration({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.referencedBeforeDeclaration,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsRelationalPatternOperandTypeNotAssignable({
-    required DartType p0,
-    required DartType p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.relationalPatternOperandTypeNotAssignable,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromClosure({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.returnOfInvalidTypeFromClosure,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromConstructor({
-    required DartType p0,
-    required DartType p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.returnOfInvalidTypeFromConstructor,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromFunction({
-    required DartType p0,
-    required DartType p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.returnOfInvalidTypeFromFunction,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromMethod({
-    required DartType p0,
-    required DartType p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.returnOfInvalidTypeFromMethod,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsSealedClassSubtypeOutsideOfLibrary({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsSetElementTypeNotAssignable({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.setElementTypeNotAssignable,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsSetElementTypeNotAssignableNullability({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.setElementTypeNotAssignableNullability,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsStaticAccessToInstanceMember({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.staticAccessToInstanceMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsSubtypeOfBaseIsNotBaseFinalOrSealed({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsSubtypeOfFinalIsNotBaseFinalOrSealed({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsSuperFormalParameterTypeIsNotSubtypeOfAssociated({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsSuperInvocationNotLast({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.superInvocationNotLast,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsThrowOfInvalidType({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.throwOfInvalidType, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsTopLevelCycle({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.topLevelCycle, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsTypeAnnotationDeferredClass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.typeAnnotationDeferredClass,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsTypeArgumentNotMatchingBounds({
-    required DartType p0,
-    required String p1,
-    required DartType p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.typeArgumentNotMatchingBounds,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsTypeParameterSupertypeOfItsBound({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.typeParameterSupertypeOfItsBound,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsTypeTestWithNonType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.typeTestWithNonType, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsTypeTestWithUndefinedName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.typeTestWithUndefinedName,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUncheckedMethodInvocationOfNullableValue({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUncheckedOperatorInvocationOfNullableValue({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUncheckedPropertyAccessOfNullableValue({required String p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedAnnotation({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedAnnotation, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedClass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedClass, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedClassBoolean({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedClassBoolean, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedConstructorInInitializer({
-    required DartType p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedConstructorInInitializer,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUndefinedConstructorInInitializerDefault({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedEnumConstant({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedEnumConstant, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedEnumConstructorNamed({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedEnumConstructorNamed,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedExtensionGetter({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedExtensionGetter,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedExtensionMethod({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedExtensionMethod,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedExtensionOperator({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedExtensionOperator,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedExtensionSetter({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedExtensionSetter,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedFunction({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedFunction, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedGetter({
-    required String p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedGetter, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedGetterOnFunctionType({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedGetterOnFunctionType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedIdentifier({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedIdentifier, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedMethod({
-    required String p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedMethod, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedMethodOnFunctionType({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedMethodOnFunctionType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedNamedParameter({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedNamedParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedOperator({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedOperator, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedPrefixedName({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedPrefixedName, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedSetter({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedSetter, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedSetterOnFunctionType({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedSetterOnFunctionType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedSuperGetter({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedSuperGetter, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedSuperMethod({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedSuperMethod, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedSuperOperator({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.undefinedSuperOperator,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedSuperSetter({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.undefinedSuperSetter, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUnqualifiedReferenceToNonLocalStaticMember({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUnqualifiedReferenceToStaticMemberOfExtendedType({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.unqualifiedReferenceToStaticMemberOfExtendedType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUriDoesNotExist({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.uriDoesNotExist, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUriHasNotBeenGenerated({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.uriHasNotBeenGenerated,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsVariableTypeMismatch({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.variableTypeMismatch, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsWrongExplicitTypeParameterVarianceInSuperinterface({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongExplicitTypeParameterVarianceInSuperinterface,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongNumberOfParametersForOperator({
-    required String p0,
-    required int p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfParametersForOperator,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsWrongNumberOfParametersForOperatorMinus({required int p0}) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfParametersForOperatorMinus,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongNumberOfTypeArguments({
-    required Object p0,
-    required int p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArguments,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsWrongNumberOfTypeArgumentsAnonymousFunction({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsWrongNumberOfTypeArgumentsConstructor({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsWrongNumberOfTypeArgumentsDotShorthandConstructor({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsDotShorthandConstructor,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsEnum({
-    required int p0,
-    required int p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsEnum,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsExtension({
-    required String p0,
-    required int p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsFunction({
-    required String p0,
-    required int p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongNumberOfTypeArgumentsMethod({
-    required DartType p0,
-    required int p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsWrongTypeParameterVarianceInSuperinterface({
-    required String p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWrongTypeParameterVariancePosition({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.wrongTypeParameterVariancePosition,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsYieldEachOfInvalidType({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      CompileTimeErrorCode.yieldEachOfInvalidType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsYieldOfInvalidType({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(CompileTimeErrorCode.yieldOfInvalidType, [
-      p0,
-      p1,
-    ]);
-  }
-}
-
-final class CompileTimeErrorTemplate<T extends Function>
-    extends CompileTimeErrorCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const CompileTimeErrorTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class CompileTimeErrorWithoutArguments extends CompileTimeErrorCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const CompileTimeErrorWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
-
-class StaticWarningCode extends DiagnosticCodeWithExpectedTypes {
-  /// No parameters.
-  static const StaticWarningWithoutArguments
-  deadNullAwareExpression = StaticWarningWithoutArguments(
-    name: 'DEAD_NULL_AWARE_EXPRESSION',
-    problemMessage:
-        "The left operand can't be null, so the right operand is never executed.",
-    correctionMessage: "Try removing the operator and the right operand.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const StaticWarningWithoutArguments
-  invalidNullAwareElement = StaticWarningWithoutArguments(
-    name: 'INVALID_NULL_AWARE_OPERATOR',
-    problemMessage:
-        "The element can't be null, so the null-aware operator '?' is unnecessary.",
-    correctionMessage: "Try removing the operator '?'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_NULL_AWARE_ELEMENT',
-    uniqueNameCheck: 'StaticWarningCode.INVALID_NULL_AWARE_ELEMENT',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const StaticWarningWithoutArguments
-  invalidNullAwareMapEntryKey = StaticWarningWithoutArguments(
-    name: 'INVALID_NULL_AWARE_OPERATOR',
-    problemMessage:
-        "The map entry key can't be null, so the null-aware operator '?' is "
-        "unnecessary.",
-    correctionMessage: "Try removing the operator '?'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_NULL_AWARE_MAP_ENTRY_KEY',
-    uniqueNameCheck: 'StaticWarningCode.INVALID_NULL_AWARE_MAP_ENTRY_KEY',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const StaticWarningWithoutArguments
-  invalidNullAwareMapEntryValue = StaticWarningWithoutArguments(
-    name: 'INVALID_NULL_AWARE_OPERATOR',
-    problemMessage:
-        "The map entry value can't be null, so the null-aware operator '?' is "
-        "unnecessary.",
-    correctionMessage: "Try removing the operator '?'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_NULL_AWARE_MAP_ENTRY_VALUE',
-    uniqueNameCheck: 'StaticWarningCode.INVALID_NULL_AWARE_MAP_ENTRY_VALUE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the null-aware operator that is invalid
-  /// String p1: the non-null-aware operator that can replace the invalid
-  ///            operator
-  static const StaticWarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidNullAwareOperator = StaticWarningTemplate(
-    name: 'INVALID_NULL_AWARE_OPERATOR',
-    problemMessage:
-        "The receiver can't be null, so the null-aware operator '{0}' is "
-        "unnecessary.",
-    correctionMessage: "Try replacing the operator '{0}' with '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'StaticWarningCode.INVALID_NULL_AWARE_OPERATOR',
-    withArguments: _withArgumentsInvalidNullAwareOperator,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object p0: the null-aware operator that is invalid
-  /// Object p1: the non-null-aware operator that can replace the invalid
-  ///            operator
-  static const StaticWarningTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidNullAwareOperatorAfterShortCircuit = StaticWarningTemplate(
-    name: 'INVALID_NULL_AWARE_OPERATOR',
-    problemMessage:
-        "The receiver can't be 'null' because of short-circuiting, so the "
-        "null-aware operator '{0}' can't be used.",
-    correctionMessage: "Try replacing the operator '{0}' with '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT',
-    uniqueNameCheck:
-        'StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT',
-    withArguments: _withArgumentsInvalidNullAwareOperatorAfterShortCircuit,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the constant that is missing
-  static const StaticWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingEnumConstantInSwitch = StaticWarningTemplate(
-    name: 'MISSING_ENUM_CONSTANT_IN_SWITCH',
-    problemMessage: "Missing case clause for '{0}'.",
-    correctionMessage:
-        "Try adding a case clause for the missing constant, or adding a "
-        "default clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH',
-    withArguments: _withArgumentsMissingEnumConstantInSwitch,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const StaticWarningWithoutArguments unnecessaryNonNullAssertion =
-      StaticWarningWithoutArguments(
-        name: 'UNNECESSARY_NON_NULL_ASSERTION',
-        problemMessage:
-            "The '!' will have no effect because the receiver can't be null.",
-        correctionMessage: "Try removing the '!' operator.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const StaticWarningWithoutArguments
-  unnecessaryNullAssertPattern = StaticWarningWithoutArguments(
-    name: 'UNNECESSARY_NULL_ASSERT_PATTERN',
-    problemMessage:
-        "The null-assert pattern will have no effect because the matched type "
-        "isn't nullable.",
-    correctionMessage:
-        "Try replacing the null-assert pattern with its nested pattern.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'StaticWarningCode.UNNECESSARY_NULL_ASSERT_PATTERN',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const StaticWarningWithoutArguments
-  unnecessaryNullCheckPattern = StaticWarningWithoutArguments(
-    name: 'UNNECESSARY_NULL_CHECK_PATTERN',
-    problemMessage:
-        "The null-check pattern will have no effect because the matched type isn't "
-        "nullable.",
-    correctionMessage:
-        "Try replacing the null-check pattern with its nested pattern.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'StaticWarningCode.UNNECESSARY_NULL_CHECK_PATTERN',
-    expectedTypes: [],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const StaticWarningCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.STATIC_WARNING,
-         uniqueName: 'StaticWarningCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsInvalidNullAwareOperator({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(StaticWarningCode.invalidNullAwareOperator, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidNullAwareOperatorAfterShortCircuit({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingEnumConstantInSwitch({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      StaticWarningCode.missingEnumConstantInSwitch,
-      [p0],
-    );
-  }
-}
-
-final class StaticWarningTemplate<T extends Function>
-    extends StaticWarningCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const StaticWarningTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class StaticWarningWithoutArguments extends StaticWarningCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const StaticWarningWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
-
-class WarningCode extends DiagnosticCodeWithExpectedTypes {
-  /// Parameters:
-  /// Type p0: the name of the actual argument type
-  /// Type p1: the name of the expected function return type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  argumentTypeNotAssignableToErrorHandler = WarningTemplate(
-    name: '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)'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'WarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER',
-    withArguments: _withArgumentsArgumentTypeNotAssignableToErrorHandler,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Users should not assign values marked `@doNotStore`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the field or variable
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  assignmentOfDoNotStore = WarningTemplate(
-    name: 'ASSIGNMENT_OF_DO_NOT_STORE',
-    problemMessage:
-        "'{0}' is marked 'doNotStore' and shouldn't be assigned to a field or "
-        "top-level variable.",
-    correctionMessage: "Try removing the assignment.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.ASSIGNMENT_OF_DO_NOT_STORE',
-    withArguments: _withArgumentsAssignmentOfDoNotStore,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type as derived by the type of the [Future].
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  bodyMightCompleteNormallyCatchError = WarningTemplate(
-    name: 'BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR',
-    problemMessage:
-        "This 'onError' handler must return a value assignable to '{0}', but ends "
-        "without returning a value.",
-    correctionMessage: "Try adding a return statement.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR',
-    withArguments: _withArgumentsBodyMightCompleteNormallyCatchError,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the name of the declared return type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  bodyMightCompleteNormallyNullable = WarningTemplate(
-    name: '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'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE',
-    withArguments: _withArgumentsBodyMightCompleteNormallyNullable,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the unassigned variable
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  castFromNullableAlwaysFails = WarningTemplate(
-    name: 'CAST_FROM_NULLABLE_ALWAYS_FAILS',
-    problemMessage:
-        "This cast will always throw an exception because the nullable local "
-        "variable '{0}' is not assigned.",
-    correctionMessage:
-        "Try giving it an initializer expression, or ensure that it's assigned "
-        "on every execution path.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.CAST_FROM_NULLABLE_ALWAYS_FAILS',
-    withArguments: _withArgumentsCastFromNullableAlwaysFails,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  castFromNullAlwaysFails = WarningWithoutArguments(
-    name: 'CAST_FROM_NULL_ALWAYS_FAILS',
-    problemMessage:
-        "This cast always throws an exception because the expression always "
-        "evaluates to 'null'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.CAST_FROM_NULL_ALWAYS_FAILS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Type p0: the matched value type
-  /// Type p1: the constant value type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  constantPatternNeverMatchesValueType = WarningTemplate(
-    name: 'CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE',
-    problemMessage:
-        "The matched value type '{0}' can never be equal to this constant of type "
-        "'{1}'.",
-    correctionMessage:
-        "Try a constant of the same type as the matched value type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE',
-    withArguments: _withArgumentsConstantPatternNeverMatchesValueType,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Dead code is code that is never reached, this can happen for instance if a
-  /// statement follows a return statement.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments deadCode = WarningWithoutArguments(
-    name: 'DEAD_CODE',
-    problemMessage: "Dead code.",
-    correctionMessage:
-        "Try removing the code, or fixing the code before it so that it can be "
-        "reached.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEAD_CODE',
-    expectedTypes: [],
-  );
-
-  /// Dead code is code that is never reached. This case covers cases where the
-  /// user has catch clauses after `catch (e)` or `on Object catch (e)`.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  deadCodeCatchFollowingCatch = WarningWithoutArguments(
-    name: 'DEAD_CODE_CATCH_FOLLOWING_CATCH',
-    problemMessage:
-        "Dead code: Catch clauses after a 'catch (e)' or an 'on Object catch (e)' "
-        "are never reached.",
-    correctionMessage:
-        "Try reordering the catch clauses so that they can be reached, or "
-        "removing the unreachable catch clauses.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEAD_CODE_CATCH_FOLLOWING_CATCH',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  deadCodeLateWildcardVariableInitializer = WarningWithoutArguments(
-    name: 'DEAD_CODE',
-    problemMessage:
-        "Dead code: The assigned-to wildcard variable is marked late and can never "
-        "be referenced so this initializer will never be evaluated.",
-    correctionMessage:
-        "Try removing the code, removing the late modifier or changing the "
-        "variable to a non-wildcard.",
-    hasPublishedDocs: true,
-    uniqueName: 'DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER',
-    uniqueNameCheck: 'WarningCode.DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER',
-    expectedTypes: [],
-  );
-
-  /// Dead code is code that is never reached. This case covers cases where the
-  /// user has an on-catch clause such as `on A catch (e)`, where a supertype of
-  /// `A` was already caught.
-  ///
-  /// Parameters:
-  /// Type p0: name of the subtype
-  /// Type p1: name of the supertype
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  deadCodeOnCatchSubtype = WarningTemplate(
-    name: 'DEAD_CODE_ON_CATCH_SUBTYPE',
-    problemMessage:
-        "Dead code: This on-catch block won't be executed because '{0}' is a "
-        "subtype of '{1}' and hence will have been caught already.",
-    correctionMessage:
-        "Try reordering the catch clauses so that this block can be reached, "
-        "or removing the unreachable catch clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEAD_CODE_ON_CATCH_SUBTYPE',
-    withArguments: _withArgumentsDeadCodeOnCatchSubtype,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the element
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  deprecatedExportUse = WarningTemplate(
-    name: 'DEPRECATED_EXPORT_USE',
-    problemMessage: "The ability to import '{0}' indirectly is deprecated.",
-    correctionMessage: "Try importing '{0}' directly.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEPRECATED_EXPORT_USE',
-    withArguments: _withArgumentsDeprecatedExportUse,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object typeName: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object typeName})
-  >
-  deprecatedExtend = WarningTemplate(
-    name: 'DEPRECATED_EXTEND',
-    problemMessage: "Extending '{0}' is deprecated.",
-    correctionMessage: "Try removing the 'extends' clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEPRECATED_EXTEND',
-    withArguments: _withArgumentsDeprecatedExtend,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments deprecatedExtendsFunction =
-      WarningWithoutArguments(
-        name: 'DEPRECATED_SUBTYPE_OF_FUNCTION',
-        problemMessage: "Extending 'Function' is deprecated.",
-        correctionMessage: "Try removing 'Function' from the 'extends' clause.",
-        hasPublishedDocs: true,
-        uniqueName: 'DEPRECATED_EXTENDS_FUNCTION',
-        uniqueNameCheck: 'WarningCode.DEPRECATED_EXTENDS_FUNCTION',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object typeName: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object typeName})
-  >
-  deprecatedImplement = WarningTemplate(
-    name: 'DEPRECATED_IMPLEMENT',
-    problemMessage: "Implementing '{0}' is deprecated.",
-    correctionMessage: "Try removing '{0}' from the 'implements' clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEPRECATED_IMPLEMENT',
-    withArguments: _withArgumentsDeprecatedImplement,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments deprecatedImplementsFunction =
-      WarningWithoutArguments(
-        name: 'DEPRECATED_SUBTYPE_OF_FUNCTION',
-        problemMessage: "Implementing 'Function' has no effect.",
-        correctionMessage:
-            "Try removing 'Function' from the 'implements' clause.",
-        hasPublishedDocs: true,
-        uniqueName: 'DEPRECATED_IMPLEMENTS_FUNCTION',
-        uniqueNameCheck: 'WarningCode.DEPRECATED_IMPLEMENTS_FUNCTION',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object typeName: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object typeName})
-  >
-  deprecatedInstantiate = WarningTemplate(
-    name: 'DEPRECATED_INSTANTIATE',
-    problemMessage: "Instantiating '{0}' is deprecated.",
-    correctionMessage: "Try instantiating a non-abstract class.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEPRECATED_INSTANTIATE',
-    withArguments: _withArgumentsDeprecatedInstantiate,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object typeName: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object typeName})
-  >
-  deprecatedMixin = WarningTemplate(
-    name: 'DEPRECATED_MIXIN',
-    problemMessage: "Mixing in '{0}' is deprecated.",
-    correctionMessage: "Try removing '{0}' from the 'with' clause.",
-    uniqueNameCheck: 'WarningCode.DEPRECATED_MIXIN',
-    withArguments: _withArgumentsDeprecatedMixin,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments deprecatedMixinFunction =
-      WarningWithoutArguments(
-        name: 'DEPRECATED_SUBTYPE_OF_FUNCTION',
-        problemMessage: "Mixing in 'Function' is deprecated.",
-        correctionMessage: "Try removing 'Function' from the 'with' clause.",
-        hasPublishedDocs: true,
-        uniqueName: 'DEPRECATED_MIXIN_FUNCTION',
-        uniqueNameCheck: 'WarningCode.DEPRECATED_MIXIN_FUNCTION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments deprecatedNewInCommentReference =
-      WarningWithoutArguments(
-        name: 'DEPRECATED_NEW_IN_COMMENT_REFERENCE',
-        problemMessage:
-            "Using the 'new' keyword in a comment reference is deprecated.",
-        correctionMessage: "Try referring to a constructor by its name.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DEPRECATED_NEW_IN_COMMENT_REFERENCE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object parameterName: the name of the parameter
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object parameterName})
-  >
-  deprecatedOptional = WarningTemplate(
-    name: 'DEPRECATED_OPTIONAL',
-    problemMessage:
-        "Omitting an argument for the '{0}' parameter is deprecated.",
-    correctionMessage: "Try passing an argument for '{0}'.",
-    uniqueNameCheck: 'WarningCode.DEPRECATED_OPTIONAL',
-    withArguments: _withArgumentsDeprecatedOptional,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object typeName: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object typeName})
-  >
-  deprecatedSubclass = WarningTemplate(
-    name: 'DEPRECATED_SUBCLASS',
-    problemMessage: "Subclassing '{0}' is deprecated.",
-    correctionMessage:
-        "Try removing the 'extends' clause, or removing '{0}' from the "
-        "'implements' clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DEPRECATED_SUBCLASS',
-    withArguments: _withArgumentsDeprecatedSubclass,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the doc directive argument
-  /// String p1: the expected format
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  docDirectiveArgumentWrongFormat = WarningTemplate(
-    name: 'DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT',
-    problemMessage: "The '{0}' argument must be formatted as {1}.",
-    correctionMessage: "Try formatting '{0}' as {1}.",
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT',
-    withArguments: _withArgumentsDocDirectiveArgumentWrongFormat,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the doc directive
-  /// int p1: the actual number of arguments
-  /// int p2: the expected number of arguments
-  static const WarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required int p1,
-      required int p2,
-    })
-  >
-  docDirectiveHasExtraArguments = WarningTemplate(
-    name: 'DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS',
-    problemMessage:
-        "The '{0}' directive has '{1}' arguments, but only '{2}' are expected.",
-    correctionMessage: "Try removing the extra arguments.",
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS',
-    withArguments: _withArgumentsDocDirectiveHasExtraArguments,
-    expectedTypes: [ExpectedType.string, ExpectedType.int, ExpectedType.int],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the doc directive
-  /// String p1: the name of the unexpected argument
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  docDirectiveHasUnexpectedNamedArgument = WarningTemplate(
-    name: 'DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT',
-    problemMessage:
-        "The '{0}' directive has an unexpected named argument, '{1}'.",
-    correctionMessage: "Try removing the unexpected argument.",
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT',
-    withArguments: _withArgumentsDocDirectiveHasUnexpectedNamedArgument,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments docDirectiveMissingClosingBrace =
-      WarningWithoutArguments(
-        name: 'DOC_DIRECTIVE_MISSING_CLOSING_BRACE',
-        problemMessage: "Doc directive is missing a closing curly brace ('}').",
-        correctionMessage: "Try closing the directive with a curly brace.",
-        uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_BRACE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the corresponding doc directive tag
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  docDirectiveMissingClosingTag = WarningTemplate(
-    name: 'DOC_DIRECTIVE_MISSING_CLOSING_TAG',
-    problemMessage: "Doc directive is missing a closing tag.",
-    correctionMessage:
-        "Try closing the directive with the appropriate closing tag, '{0}'.",
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_MISSING_CLOSING_TAG',
-    withArguments: _withArgumentsDocDirectiveMissingClosingTag,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the doc directive
-  /// String p1: the name of the missing argument
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  docDirectiveMissingOneArgument = WarningTemplate(
-    name: 'DOC_DIRECTIVE_MISSING_ARGUMENT',
-    problemMessage: "The '{0}' directive is missing a '{1}' argument.",
-    correctionMessage: "Try adding a '{1}' argument before the closing '}'.",
-    uniqueName: 'DOC_DIRECTIVE_MISSING_ONE_ARGUMENT',
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_MISSING_ONE_ARGUMENT',
-    withArguments: _withArgumentsDocDirectiveMissingOneArgument,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the corresponding doc directive tag
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  docDirectiveMissingOpeningTag = WarningTemplate(
-    name: 'DOC_DIRECTIVE_MISSING_OPENING_TAG',
-    problemMessage: "Doc directive is missing an opening tag.",
-    correctionMessage:
-        "Try opening the directive with the appropriate opening tag, '{0}'.",
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_MISSING_OPENING_TAG',
-    withArguments: _withArgumentsDocDirectiveMissingOpeningTag,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the doc directive
-  /// String p1: the name of the first missing argument
-  /// String p2: the name of the second missing argument
-  /// String p3: the name of the third missing argument
-  static const WarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-      required String p3,
-    })
-  >
-  docDirectiveMissingThreeArguments = WarningTemplate(
-    name: 'DOC_DIRECTIVE_MISSING_ARGUMENT',
-    problemMessage:
-        "The '{0}' directive is missing a '{1}', a '{2}', and a '{3}' argument.",
-    correctionMessage:
-        "Try adding the missing arguments before the closing '}'.",
-    uniqueName: 'DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS',
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS',
-    withArguments: _withArgumentsDocDirectiveMissingThreeArguments,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the doc directive
-  /// String p1: the name of the first missing argument
-  /// String p2: the name of the second missing argument
-  static const WarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  docDirectiveMissingTwoArguments = WarningTemplate(
-    name: 'DOC_DIRECTIVE_MISSING_ARGUMENT',
-    problemMessage:
-        "The '{0}' directive is missing a '{1}' and a '{2}' argument.",
-    correctionMessage:
-        "Try adding the missing arguments before the closing '}'.",
-    uniqueName: 'DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS',
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS',
-    withArguments: _withArgumentsDocDirectiveMissingTwoArguments,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the unknown doc directive.
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  docDirectiveUnknown = WarningTemplate(
-    name: 'DOC_DIRECTIVE_UNKNOWN',
-    problemMessage: "Doc directive '{0}' is unknown.",
-    correctionMessage: "Try using one of the supported doc directives.",
-    uniqueNameCheck: 'WarningCode.DOC_DIRECTIVE_UNKNOWN',
-    withArguments: _withArgumentsDocDirectiveUnknown,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments docImportCannotBeDeferred =
-      WarningWithoutArguments(
-        name: 'DOC_IMPORT_CANNOT_BE_DEFERRED',
-        problemMessage: "Doc imports can't be deferred.",
-        correctionMessage: "Try removing the 'deferred' keyword.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DOC_IMPORT_CANNOT_BE_DEFERRED',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments docImportCannotHaveCombinators =
-      WarningWithoutArguments(
-        name: 'DOC_IMPORT_CANNOT_HAVE_COMBINATORS',
-        problemMessage: "Doc imports can't have show or hide combinators.",
-        correctionMessage: "Try removing the combinator.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DOC_IMPORT_CANNOT_HAVE_COMBINATORS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments docImportCannotHaveConfigurations =
-      WarningWithoutArguments(
-        name: 'DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS',
-        problemMessage: "Doc imports can't have configurations.",
-        correctionMessage: "Try removing the configurations.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments docImportCannotHavePrefix =
-      WarningWithoutArguments(
-        name: 'DOC_IMPORT_CANNOT_HAVE_PREFIX',
-        problemMessage: "Doc imports can't have prefixes.",
-        correctionMessage: "Try removing the prefix.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DOC_IMPORT_CANNOT_HAVE_PREFIX',
-        expectedTypes: [],
-      );
-
-  /// Duplicate exports.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments duplicateExport =
-      WarningWithoutArguments(
-        name: 'DUPLICATE_EXPORT',
-        problemMessage: "Duplicate export.",
-        correctionMessage: "Try removing all but one export of the library.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DUPLICATE_EXPORT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments duplicateHiddenName =
-      WarningWithoutArguments(
-        name: 'DUPLICATE_HIDDEN_NAME',
-        problemMessage: "Duplicate hidden name.",
-        correctionMessage:
-            "Try removing the repeated name from the list of hidden members.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DUPLICATE_HIDDEN_NAME',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the diagnostic being ignored
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  duplicateIgnore = WarningTemplate(
-    name: 'DUPLICATE_IGNORE',
-    problemMessage:
-        "The diagnostic '{0}' doesn't need to be ignored here because it's already "
-        "being ignored.",
-    correctionMessage:
-        "Try removing the name from the list, or removing the whole comment if "
-        "this is the only name in the list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.DUPLICATE_IGNORE',
-    withArguments: _withArgumentsDuplicateIgnore,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Duplicate imports.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments duplicateImport =
-      WarningWithoutArguments(
-        name: 'DUPLICATE_IMPORT',
-        problemMessage: "Duplicate import.",
-        correctionMessage: "Try removing all but one import of the library.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DUPLICATE_IMPORT',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments duplicateShownName =
-      WarningWithoutArguments(
-        name: 'DUPLICATE_SHOWN_NAME',
-        problemMessage: "Duplicate shown name.",
-        correctionMessage:
-            "Try removing the repeated name from the list of shown members.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.DUPLICATE_SHOWN_NAME',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments equalElementsInSet =
-      WarningWithoutArguments(
-        name: 'EQUAL_ELEMENTS_IN_SET',
-        problemMessage: "Two elements in a set literal shouldn't be equal.",
-        correctionMessage: "Change or remove the duplicate element.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.EQUAL_ELEMENTS_IN_SET',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments equalKeysInMap = WarningWithoutArguments(
-    name: 'EQUAL_KEYS_IN_MAP',
-    problemMessage: "Two keys in a map literal shouldn't be equal.",
-    correctionMessage: "Change or remove the duplicate key.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.EQUAL_KEYS_IN_MAP',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String member: the name of the member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String member})
-  >
-  experimentalMemberUse = WarningTemplate(
-    name: 'EXPERIMENTAL_MEMBER_USE',
-    problemMessage:
-        "'{0}' is experimental and could be removed or changed at any time.",
-    uniqueNameCheck: 'WarningCode.EXPERIMENTAL_MEMBER_USE',
-    withArguments: _withArgumentsExperimentalMemberUse,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" is enabled, collection literal types must be
-  /// inferred via the context type, or have type arguments.
-  ///
-  /// Parameters:
-  /// String p0: the name of the collection
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnCollectionLiteral = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_COLLECTION_LITERAL',
-    problemMessage: "The type argument(s) of '{0}' can't be inferred.",
-    correctionMessage: "Use explicit type argument(s) for '{0}'.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_COLLECTION_LITERAL',
-    withArguments: _withArgumentsInferenceFailureOnCollectionLiteral,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" is enabled, types in function invocations must be
-  /// inferred via the context type, or have type arguments.
-  ///
-  /// Parameters:
-  /// String p0: the name of the function
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnFunctionInvocation = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_FUNCTION_INVOCATION',
-    problemMessage:
-        "The type argument(s) of the function '{0}' can't be inferred.",
-    correctionMessage: "Use explicit type argument(s) for '{0}'.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_FUNCTION_INVOCATION',
-    withArguments: _withArgumentsInferenceFailureOnFunctionInvocation,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" is enabled, recursive local functions, top-level
-  /// functions, methods, and function-typed function parameters must all
-  /// specify a return type. See the strict-inference resource:
-  ///
-  /// https://github.com/dart-lang/language/blob/master/resources/type-system/strict-inference.md
-  ///
-  /// Parameters:
-  /// String p0: the name of the function or method whose return type can't be
-  ///            inferred
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnFunctionReturnType = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE',
-    problemMessage: "The return type of '{0}' can't be inferred.",
-    correctionMessage: "Declare the return type of '{0}'.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE',
-    withArguments: _withArgumentsInferenceFailureOnFunctionReturnType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" is enabled, types in function invocations must be
-  /// inferred via the context type, or have type arguments.
-  ///
-  /// Parameters:
-  /// String p0: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnGenericInvocation = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_GENERIC_INVOCATION',
-    problemMessage:
-        "The type argument(s) of the generic function type '{0}' can't be "
-        "inferred.",
-    correctionMessage: "Use explicit type argument(s) for '{0}'.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_GENERIC_INVOCATION',
-    withArguments: _withArgumentsInferenceFailureOnGenericInvocation,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" is enabled, types in instance creation
-  /// (constructor calls) must be inferred via the context type, or have type
-  /// arguments.
-  ///
-  /// Parameters:
-  /// String p0: the name of the constructor
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnInstanceCreation = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_INSTANCE_CREATION',
-    problemMessage:
-        "The type argument(s) of the constructor '{0}' can't be inferred.",
-    correctionMessage: "Use explicit type argument(s) for '{0}'.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION',
-    withArguments: _withArgumentsInferenceFailureOnInstanceCreation,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" in enabled, uninitialized variables must be
-  /// declared with a specific type.
-  ///
-  /// Parameters:
-  /// String p0: the name of the variable
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnUninitializedVariable = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE',
-    problemMessage:
-        "The type of {0} can't be inferred without either a type or initializer.",
-    correctionMessage: "Try specifying the type of the variable.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE',
-    withArguments: _withArgumentsInferenceFailureOnUninitializedVariable,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// When "strict-inference" in enabled, function parameters must be
-  /// declared with a specific type, or inherit a type.
-  ///
-  /// Parameters:
-  /// String p0: the name of the parameter
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  inferenceFailureOnUntypedParameter = WarningTemplate(
-    name: 'INFERENCE_FAILURE_ON_UNTYPED_PARAMETER',
-    problemMessage:
-        "The type of {0} can't be inferred; a type must be explicitly provided.",
-    correctionMessage: "Try specifying the type of the parameter.",
-    uniqueNameCheck: 'WarningCode.INFERENCE_FAILURE_ON_UNTYPED_PARAMETER',
-    withArguments: _withArgumentsInferenceFailureOnUntypedParameter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the annotation
-  /// String p1: the list of valid targets
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidAnnotationTarget = WarningTemplate(
-    name: 'INVALID_ANNOTATION_TARGET',
-    problemMessage: "The annotation '{0}' can only be used on {1}.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_ANNOTATION_TARGET',
-    withArguments: _withArgumentsInvalidAnnotationTarget,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments invalidAwaitNotRequiredAnnotation =
-      WarningWithoutArguments(
-        name: 'INVALID_AWAIT_NOT_REQUIRED_ANNOTATION',
-        problemMessage:
-            "The annotation 'awaitNotRequired' can only be applied to a "
-            "Future-returning function, or a Future-typed field.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.INVALID_AWAIT_NOT_REQUIRED_ANNOTATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidDeprecatedExtendAnnotation = WarningWithoutArguments(
-    name: 'INVALID_DEPRECATED_EXTEND_ANNOTATION',
-    problemMessage:
-        "The annotation '@Deprecated.extend' can only be applied to extendable "
-        "classes.",
-    correctionMessage: "Try removing the '@Deprecated.extend' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_DEPRECATED_EXTEND_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments invalidDeprecatedImplementAnnotation =
-      WarningWithoutArguments(
-        name: 'INVALID_DEPRECATED_IMPLEMENT_ANNOTATION',
-        problemMessage:
-            "The annotation '@Deprecated.implement' can only be applied to "
-            "implementable classes.",
-        correctionMessage:
-            "Try removing the '@Deprecated.implement' annotation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.INVALID_DEPRECATED_IMPLEMENT_ANNOTATION',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidDeprecatedInstantiateAnnotation = WarningWithoutArguments(
-    name: 'INVALID_DEPRECATED_INSTANTIATE_ANNOTATION',
-    problemMessage:
-        "The annotation '@Deprecated.instantiate' can only be applied to classes.",
-    correctionMessage: "Try removing the '@Deprecated.instantiate' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_DEPRECATED_INSTANTIATE_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// This warning is generated anywhere where `@Deprecated.mixin` annotates
-  /// something other than a mixin class.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidDeprecatedMixinAnnotation = WarningWithoutArguments(
-    name: 'INVALID_DEPRECATED_MIXIN_ANNOTATION',
-    problemMessage:
-        "The annotation '@Deprecated.mixin' can only be applied to classes.",
-    correctionMessage: "Try removing the '@Deprecated.mixin' annotation.",
-    uniqueNameCheck: 'WarningCode.INVALID_DEPRECATED_MIXIN_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// This warning is generated anywhere where `@Deprecated.optional`
-  /// annotates something other than an optional parameter.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidDeprecatedOptionalAnnotation = WarningWithoutArguments(
-    name: 'INVALID_DEPRECATED_OPTIONAL_ANNOTATION',
-    problemMessage:
-        "The annotation '@Deprecated.optional' can only be applied to optional "
-        "parameters.",
-    correctionMessage: "Try removing the '@Deprecated.optional' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_DEPRECATED_OPTIONAL_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidDeprecatedSubclassAnnotation = WarningWithoutArguments(
-    name: 'INVALID_DEPRECATED_SUBCLASS_ANNOTATION',
-    problemMessage:
-        "The annotation '@Deprecated.subclass' can only be applied to subclassable "
-        "classes and mixins.",
-    correctionMessage: "Try removing the '@Deprecated.subclass' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_DEPRECATED_SUBCLASS_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the element
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidExportOfInternalElement = WarningTemplate(
-    name: '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}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT',
-    withArguments: _withArgumentsInvalidExportOfInternalElement,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the internal element
-  /// String p1: the name of the exported element that indirectly exposes the
-  ///            internal element
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidExportOfInternalElementIndirectly = WarningTemplate(
-    name: '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}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'WarningCode.INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY',
-    withArguments: _withArgumentsInvalidExportOfInternalElementIndirectly,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: The name of the method
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidFactoryMethodDecl = WarningTemplate(
-    name: 'INVALID_FACTORY_METHOD_DECL',
-    problemMessage: "Factory method '{0}' must have a return type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_FACTORY_METHOD_DECL',
-    withArguments: _withArgumentsInvalidFactoryMethodDecl,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidFactoryMethodImpl = WarningTemplate(
-    name: 'INVALID_FACTORY_METHOD_IMPL',
-    problemMessage:
-        "Factory method '{0}' doesn't return a newly allocated object.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_FACTORY_METHOD_IMPL',
-    withArguments: _withArgumentsInvalidFactoryMethodImpl,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidInternalAnnotation = WarningWithoutArguments(
-    name: 'INVALID_INTERNAL_ANNOTATION',
-    problemMessage:
-        "Only public elements in a package's private API can be annotated as being "
-        "internal.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_INTERNAL_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideAtSign = WarningWithoutArguments(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideEquals = WarningWithoutArguments(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: the latest major version
-  /// Object p1: the latest minor version
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidLanguageVersionOverrideGreater = WarningTemplate(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
-    withArguments: _withArgumentsInvalidLanguageVersionOverrideGreater,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideLocation = WarningWithoutArguments(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideLowerCase = WarningWithoutArguments(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideNumber = WarningWithoutArguments(
-    name: '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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverridePrefix = WarningWithoutArguments(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
-    uniqueNameCheck: 'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideTrailingCharacters = WarningWithoutArguments(
-    name: 'INVALID_LANGUAGE_VERSION_OVERRIDE',
-    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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
-    uniqueNameCheck:
-        'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidLanguageVersionOverrideTwoSlashes = WarningWithoutArguments(
-    name: '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'.",
-    hasPublishedDocs: true,
-    uniqueName: 'INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
-    uniqueNameCheck:
-        'WarningCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments invalidLiteralAnnotation =
-      WarningWithoutArguments(
-        name: 'INVALID_LITERAL_ANNOTATION',
-        problemMessage:
-            "Only const constructors can have the `@literal` annotation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.INVALID_LITERAL_ANNOTATION',
-        expectedTypes: [],
-      );
-
-  /// This warning is generated anywhere where `@nonVirtual` annotates something
-  /// other than a non-abstract instance member in a class or mixin.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidNonVirtualAnnotation = WarningWithoutArguments(
-    name: 'INVALID_NON_VIRTUAL_ANNOTATION',
-    problemMessage:
-        "The annotation '@nonVirtual' can only be applied to a concrete instance "
-        "member.",
-    correctionMessage: "Try removing '@nonVirtual'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_NON_VIRTUAL_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// This warning is generated anywhere where an instance member annotated with
-  /// `@nonVirtual` is overridden in a subclass.
-  ///
-  /// Parameters:
-  /// String p0: the name of the member
-  /// String p1: the name of the defining class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidOverrideOfNonVirtualMember = WarningTemplate(
-    name: 'INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER',
-    problemMessage:
-        "The member '{0}' is declared non-virtual in '{1}' and can't be overridden "
-        "in subclasses.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER',
-    withArguments: _withArgumentsInvalidOverrideOfNonVirtualMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// This warning is generated anywhere where `@reopen` annotates a class which
-  /// did not reopen any type.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidReopenAnnotation = WarningWithoutArguments(
-    name: 'INVALID_REOPEN_ANNOTATION',
-    problemMessage:
-        "The annotation '@reopen' can only be applied to a class that opens "
-        "capabilities that the supertype intentionally disallows.",
-    correctionMessage: "Try removing the '@reopen' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_REOPEN_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidUseOfDoNotSubmitMember = WarningTemplate(
-    name: 'INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER',
-    problemMessage: "Uses of '{0}' should not be submitted to source control.",
-    correctionMessage: "Try removing the reference to '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER',
-    withArguments: _withArgumentsInvalidUseOfDoNotSubmitMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidUseOfInternalMember = WarningTemplate(
-    name: 'INVALID_USE_OF_INTERNAL_MEMBER',
-    problemMessage: "The member '{0}' can only be used within its package.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_USE_OF_INTERNAL_MEMBER',
-    withArguments: _withArgumentsInvalidUseOfInternalMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// This warning is generated anywhere where a member annotated with
-  /// `@protected` is used outside of an instance member of a subclass.
-  ///
-  /// Parameters:
-  /// String p0: the name of the member
-  /// String p1: the name of the defining class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidUseOfProtectedMember = WarningTemplate(
-    name: 'INVALID_USE_OF_PROTECTED_MEMBER',
-    problemMessage:
-        "The member '{0}' can only be used within instance members of subclasses "
-        "of '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_USE_OF_PROTECTED_MEMBER',
-    withArguments: _withArgumentsInvalidUseOfProtectedMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidUseOfVisibleForOverridingMember = WarningTemplate(
-    name: 'INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER',
-    problemMessage: "The member '{0}' can only be used for overriding.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER',
-    withArguments: _withArgumentsInvalidUseOfVisibleForOverridingMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// This warning is generated anywhere where a member annotated with
-  /// `@visibleForTemplate` is used outside of a "template" Dart file.
-  ///
-  /// Parameters:
-  /// String p0: the name of the member
-  /// Uri p1: the name of the defining class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required Uri p1})
-  >
-  invalidUseOfVisibleForTemplateMember = WarningTemplate(
-    name: 'INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER',
-    problemMessage:
-        "The member '{0}' can only be used within '{1}' or a template library.",
-    uniqueNameCheck: 'WarningCode.INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER',
-    withArguments: _withArgumentsInvalidUseOfVisibleForTemplateMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.uri],
-  );
-
-  /// This warning is generated anywhere where a member annotated with
-  /// `@visibleForTesting` is used outside the defining library, or a test.
-  ///
-  /// Parameters:
-  /// String p0: the name of the member
-  /// Uri p1: the name of the defining class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required Uri p1})
-  >
-  invalidUseOfVisibleForTestingMember = WarningTemplate(
-    name: 'INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER',
-    problemMessage: "The member '{0}' can only be used within '{1}' or a test.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER',
-    withArguments: _withArgumentsInvalidUseOfVisibleForTestingMember,
-    expectedTypes: [ExpectedType.string, ExpectedType.uri],
-  );
-
-  /// This warning is generated anywhere where a private declaration is
-  /// annotated with `@visibleForTemplate` or `@visibleForTesting`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the member
-  /// String p1: the name of the annotation
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidVisibilityAnnotation = WarningTemplate(
-    name: 'INVALID_VISIBILITY_ANNOTATION',
-    problemMessage:
-        "The member '{0}' is annotated with '{1}', but this annotation is only "
-        "meaningful on declarations of public members.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_VISIBILITY_ANNOTATION',
-    withArguments: _withArgumentsInvalidVisibilityAnnotation,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidVisibleForOverridingAnnotation = WarningWithoutArguments(
-    name: 'INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION',
-    problemMessage:
-        "The annotation 'visibleForOverriding' can only be applied to a public "
-        "instance member that can be overridden.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidVisibleOutsideTemplateAnnotation = WarningWithoutArguments(
-    name: 'INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION',
-    problemMessage:
-        "The annotation 'visibleOutsideTemplate' can only be applied to a member "
-        "of a class, enum, or mixin that is annotated with "
-        "'visibleForTemplate'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  invalidWidgetPreviewApplication = WarningWithoutArguments(
-    name: 'INVALID_WIDGET_PREVIEW_APPLICATION',
-    problemMessage:
-        "The '@Preview(...)' annotation can only be applied to public, statically "
-        "accessible constructors and functions.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_WIDGET_PREVIEW_APPLICATION',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the private symbol
-  /// String p1: the name of the proposed public symbol equivalent
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  invalidWidgetPreviewPrivateArgument = WarningTemplate(
-    name: 'INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT',
-    problemMessage:
-        "'@Preview(...)' can only accept arguments that consist of literals and "
-        "public symbols.",
-    correctionMessage: "Rename private symbol '{0}' to '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT',
-    withArguments: _withArgumentsInvalidWidgetPreviewPrivateArgument,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingOverrideOfMustBeOverriddenOne = WarningTemplate(
-    name: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN',
-    problemMessage: "Missing concrete implementation of '{0}'.",
-    correctionMessage: "Try overriding the missing member.",
-    hasPublishedDocs: true,
-    uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE',
-    uniqueNameCheck: 'WarningCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE',
-    withArguments: _withArgumentsMissingOverrideOfMustBeOverriddenOne,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the first member
-  /// String p1: the name of the second member
-  /// String p2: the number of additional missing members that aren't listed
-  static const WarningTemplate<
-    LocatableDiagnostic Function({
-      required String p0,
-      required String p1,
-      required String p2,
-    })
-  >
-  missingOverrideOfMustBeOverriddenThreePlus = WarningTemplate(
-    name: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN',
-    problemMessage:
-        "Missing concrete implementations of '{0}', '{1}', and {2} more.",
-    correctionMessage: "Try overriding the missing members.",
-    hasPublishedDocs: true,
-    uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS',
-    uniqueNameCheck:
-        'WarningCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS',
-    withArguments: _withArgumentsMissingOverrideOfMustBeOverriddenThreePlus,
-    expectedTypes: [
-      ExpectedType.string,
-      ExpectedType.string,
-      ExpectedType.string,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the first member
-  /// String p1: the name of the second member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  missingOverrideOfMustBeOverriddenTwo = WarningTemplate(
-    name: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN',
-    problemMessage: "Missing concrete implementations of '{0}' and '{1}'.",
-    correctionMessage: "Try overriding the missing members.",
-    hasPublishedDocs: true,
-    uniqueName: 'MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO',
-    uniqueNameCheck: 'WarningCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO',
-    withArguments: _withArgumentsMissingOverrideOfMustBeOverriddenTwo,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Generates a warning for a constructor, function or method invocation where
-  /// a required parameter is missing.
-  ///
-  /// Parameters:
-  /// String p0: the name of the parameter
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingRequiredParam = WarningTemplate(
-    name: 'MISSING_REQUIRED_PARAM',
-    problemMessage: "The parameter '{0}' is required.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.MISSING_REQUIRED_PARAM',
-    withArguments: _withArgumentsMissingRequiredParam,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Generates a warning for a constructor, function or method invocation where
-  /// a required parameter is missing.
-  ///
-  /// Parameters:
-  /// String p0: the name of the parameter
-  /// String p1: message details
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  missingRequiredParamWithDetails = WarningTemplate(
-    name: 'MISSING_REQUIRED_PARAM',
-    problemMessage: "The parameter '{0}' is required. {1}.",
-    hasPublishedDocs: true,
-    uniqueName: 'MISSING_REQUIRED_PARAM_WITH_DETAILS',
-    uniqueNameCheck: 'WarningCode.MISSING_REQUIRED_PARAM_WITH_DETAILS',
-    withArguments: _withArgumentsMissingRequiredParamWithDetails,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// This warning is generated anywhere where a `@sealed` class is used as a
-  /// a superclass constraint of a mixin.
-  ///
-  /// Parameters:
-  /// String p0: the name of the sealed class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mixinOnSealedClass = WarningTemplate(
-    name: 'MIXIN_ON_SEALED_CLASS',
-    problemMessage:
-        "The class '{0}' shouldn't be used as a mixin constraint because it is "
-        "sealed, and any class mixing in this mixin must have '{0}' as a "
-        "superclass.",
-    correctionMessage:
-        "Try composing with this class, or refer to its documentation for more "
-        "information.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.MIXIN_ON_SEALED_CLASS',
-    withArguments: _withArgumentsMixinOnSealedClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  multipleCombinators = WarningWithoutArguments(
-    name: 'MULTIPLE_COMBINATORS',
-    problemMessage:
-        "Using multiple 'hide' or 'show' combinators is never necessary and often "
-        "produces surprising results.",
-    correctionMessage: "Try using a single combinator.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.MULTIPLE_COMBINATORS',
-    expectedTypes: [],
-  );
-
-  /// Generates a warning for classes that inherit from classes annotated with
-  /// `@immutable` but that are not immutable.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mustBeImmutable = WarningTemplate(
-    name: 'MUST_BE_IMMUTABLE',
-    problemMessage:
-        "This class (or a class that this class inherits from) is marked as "
-        "'@immutable', but one or more of its instance fields aren't final: "
-        "{0}",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.MUST_BE_IMMUTABLE',
-    withArguments: _withArgumentsMustBeImmutable,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the class declaring the overridden method
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  mustCallSuper = WarningTemplate(
-    name: 'MUST_CALL_SUPER',
-    problemMessage:
-        "This method overrides a method annotated as '@mustCallSuper' in '{0}', "
-        "but doesn't invoke the overridden method.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.MUST_CALL_SUPER',
-    withArguments: _withArgumentsMustCallSuper,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the argument
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonConstArgumentForConstParameter = WarningTemplate(
-    name: 'NON_CONST_ARGUMENT_FOR_CONST_PARAMETER',
-    problemMessage: "Argument '{0}' must be a constant.",
-    correctionMessage: "Try replacing the argument with a constant.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.NON_CONST_ARGUMENT_FOR_CONST_PARAMETER',
-    withArguments: _withArgumentsNonConstArgumentForConstParameter,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Generates a warning for non-const instance creation using a constructor
-  /// annotated with `@literal`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class defining the annotated constructor
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonConstCallToLiteralConstructor = WarningTemplate(
-    name: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
-    problemMessage:
-        "This instance creation must be 'const', because the {0} constructor is "
-        "marked as '@literal'.",
-    correctionMessage: "Try adding a 'const' keyword.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
-    withArguments: _withArgumentsNonConstCallToLiteralConstructor,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Generate a warning for non-const instance creation (with the `new` keyword)
-  /// using a constructor annotated with `@literal`.
-  ///
-  /// Parameters:
-  /// String p0: the name of the class defining the annotated constructor
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  nonConstCallToLiteralConstructorUsingNew = WarningTemplate(
-    name: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR',
-    problemMessage:
-        "This instance creation must be 'const', because the {0} constructor is "
-        "marked as '@literal'.",
-    correctionMessage: "Try replacing the 'new' keyword with 'const'.",
-    hasPublishedDocs: true,
-    uniqueName: 'NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW',
-    uniqueNameCheck:
-        'WarningCode.NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW',
-    withArguments: _withArgumentsNonConstCallToLiteralConstructorUsingNew,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments nonNullableEqualsParameter =
-      WarningWithoutArguments(
-        name: 'NON_NULLABLE_EQUALS_PARAMETER',
-        problemMessage:
-            "The parameter type of '==' operators should be non-nullable.",
-        correctionMessage: "Try using a non-nullable type.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.NON_NULLABLE_EQUALS_PARAMETER',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  nullableTypeInCatchClause = WarningWithoutArguments(
-    name: 'NULLABLE_TYPE_IN_CATCH_CLAUSE',
-    problemMessage:
-        "A potentially nullable type can't be used in an 'on' clause because it "
-        "isn't valid to throw a nullable expression.",
-    correctionMessage: "Try using a non-nullable type.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.NULLABLE_TYPE_IN_CATCH_CLAUSE',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the method being invoked
-  /// String p1: the type argument associated with the method
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  nullArgumentToNonNullType = WarningTemplate(
-    name: 'NULL_ARGUMENT_TO_NON_NULL_TYPE',
-    problemMessage:
-        "'{0}' shouldn't be called with a 'null' argument for the non-nullable "
-        "type argument '{1}'.",
-    correctionMessage: "Try adding a non-null argument.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.NULL_ARGUMENT_TO_NON_NULL_TYPE',
-    withArguments: _withArgumentsNullArgumentToNonNullType,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  nullCheckAlwaysFails = WarningWithoutArguments(
-    name: 'NULL_CHECK_ALWAYS_FAILS',
-    problemMessage:
-        "This null-check will always throw an exception because the expression "
-        "will always evaluate to 'null'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.NULL_CHECK_ALWAYS_FAILS',
-    expectedTypes: [],
-  );
-
-  /// A field with the override annotation does not override a getter or setter.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments overrideOnNonOverridingField =
-      WarningWithoutArguments(
-        name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
-        problemMessage:
-            "The field doesn't override an inherited getter or setter.",
-        correctionMessage:
-            "Try updating this class to match the superclass, or removing the "
-            "override annotation.",
-        hasPublishedDocs: true,
-        uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_FIELD',
-        uniqueNameCheck: 'WarningCode.OVERRIDE_ON_NON_OVERRIDING_FIELD',
-        expectedTypes: [],
-      );
-
-  /// A getter with the override annotation does not override an existing getter.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments overrideOnNonOverridingGetter =
-      WarningWithoutArguments(
-        name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
-        problemMessage: "The getter doesn't override an inherited getter.",
-        correctionMessage:
-            "Try updating this class to match the superclass, or removing the "
-            "override annotation.",
-        hasPublishedDocs: true,
-        uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_GETTER',
-        uniqueNameCheck: 'WarningCode.OVERRIDE_ON_NON_OVERRIDING_GETTER',
-        expectedTypes: [],
-      );
-
-  /// A method with the override annotation does not override an existing method.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments overrideOnNonOverridingMethod =
-      WarningWithoutArguments(
-        name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
-        problemMessage: "The method doesn't override an inherited method.",
-        correctionMessage:
-            "Try updating this class to match the superclass, or removing the "
-            "override annotation.",
-        hasPublishedDocs: true,
-        uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_METHOD',
-        uniqueNameCheck: 'WarningCode.OVERRIDE_ON_NON_OVERRIDING_METHOD',
-        expectedTypes: [],
-      );
-
-  /// A setter with the override annotation does not override an existing setter.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments overrideOnNonOverridingSetter =
-      WarningWithoutArguments(
-        name: 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
-        problemMessage: "The setter doesn't override an inherited setter.",
-        correctionMessage:
-            "Try updating this class to match the superclass, or removing the "
-            "override annotation.",
-        hasPublishedDocs: true,
-        uniqueName: 'OVERRIDE_ON_NON_OVERRIDING_SETTER',
-        uniqueNameCheck: 'WarningCode.OVERRIDE_ON_NON_OVERRIDING_SETTER',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Type p0: the matched value type
-  /// Type p1: the required pattern type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  patternNeverMatchesValueType = WarningTemplate(
-    name: 'PATTERN_NEVER_MATCHES_VALUE_TYPE',
-    problemMessage:
-        "The matched value type '{0}' can never match the required type '{1}'.",
-    correctionMessage: "Try using a different pattern.",
-    uniqueNameCheck: 'WarningCode.PATTERN_NEVER_MATCHES_VALUE_TYPE',
-    withArguments: _withArgumentsPatternNeverMatchesValueType,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// It is not an error to call or tear-off a method, setter, or getter, or to
-  /// read or write a field, on a receiver of static type `Never`.
-  /// Implementations that provide feedback about dead or unreachable code are
-  /// encouraged to indicate that any arguments to the invocation are
-  /// unreachable.
-  ///
-  /// It is not an error to apply an expression of type `Never` in the function
-  /// position of a function call. Implementations that provide feedback about
-  /// dead or unreachable code are encouraged to indicate that any arguments to
-  /// the call are unreachable.
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  receiverOfTypeNever = WarningWithoutArguments(
-    name: 'RECEIVER_OF_TYPE_NEVER',
-    problemMessage:
-        "The receiver is of type 'Never', and will never complete with a value.",
-    correctionMessage:
-        "Try checking for throw expressions or type errors in the receiver",
-    uniqueNameCheck: 'WarningCode.RECEIVER_OF_TYPE_NEVER',
-    expectedTypes: [],
-  );
-
-  /// An error code indicating the use of a redeclare annotation on a member that does not redeclare.
-  ///
-  /// Parameters:
-  /// String p0: the kind of member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  redeclareOnNonRedeclaringMember = WarningTemplate(
-    name: 'REDECLARE_ON_NON_REDECLARING_MEMBER',
-    problemMessage:
-        "The {0} doesn't redeclare a {0} declared in a superinterface.",
-    correctionMessage:
-        "Try updating this member to match a declaration in a superinterface, "
-        "or removing the redeclare annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.REDECLARE_ON_NON_REDECLARING_MEMBER',
-    withArguments: _withArgumentsRedeclareOnNonRedeclaringMember,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// An error code indicating use of a removed lint rule.
-  ///
-  /// Parameters:
-  /// Object p0: the rule name
-  /// Object p1: the SDK version in which the lint was removed
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  removedLintUse = WarningTemplate(
-    name: 'REMOVED_LINT_USE',
-    problemMessage: "'{0}' was removed in Dart '{1}'",
-    correctionMessage: "Remove the reference to '{0}'.",
-    uniqueNameCheck: 'WarningCode.REMOVED_LINT_USE',
-    withArguments: _withArgumentsRemovedLintUse,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// An error code indicating use of a removed lint rule.
-  ///
-  /// Parameters:
-  /// Object p0: the rule name
-  /// Object p1: the SDK version in which the lint was removed
-  /// Object p2: the name of a replacing lint
-  static const WarningTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-    })
-  >
-  replacedLintUse = WarningTemplate(
-    name: 'REPLACED_LINT_USE',
-    problemMessage: "'{0}' was replaced by '{2}' in Dart '{1}'.",
-    correctionMessage: "Replace '{0}' with '{1}'.",
-    uniqueNameCheck: 'WarningCode.REPLACED_LINT_USE',
-    withArguments: _withArgumentsReplacedLintUse,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the annotated function being invoked
-  /// String p1: the name of the function containing the return
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  returnOfDoNotStore = WarningTemplate(
-    name: 'RETURN_OF_DO_NOT_STORE',
-    problemMessage:
-        "'{0}' is annotated with 'doNotStore' and shouldn't be returned unless "
-        "'{1}' is also annotated.",
-    correctionMessage: "Annotate '{1}' with 'doNotStore'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.RETURN_OF_DO_NOT_STORE',
-    withArguments: _withArgumentsReturnOfDoNotStore,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type as declared in the return statement
-  /// Type p1: the expected return type as defined by the type of the Future
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  returnOfInvalidTypeFromCatchError = WarningTemplate(
-    name: 'INVALID_RETURN_TYPE_FOR_CATCH_ERROR',
-    problemMessage:
-        "A value of type '{0}' can't be returned by the 'onError' handler because "
-        "it must be assignable to '{1}'.",
-    hasPublishedDocs: true,
-    uniqueName: 'RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR',
-    uniqueNameCheck: 'WarningCode.RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR',
-    withArguments: _withArgumentsReturnOfInvalidTypeFromCatchError,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// Type p0: the return type of the function
-  /// Type p1: the expected return type as defined by the type of the Future
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0, required DartType p1})
-  >
-  returnTypeInvalidForCatchError = WarningTemplate(
-    name: 'INVALID_RETURN_TYPE_FOR_CATCH_ERROR',
-    problemMessage:
-        "The return type '{0}' isn't assignable to '{1}', as required by "
-        "'Future.catchError'.",
-    hasPublishedDocs: true,
-    uniqueName: 'RETURN_TYPE_INVALID_FOR_CATCH_ERROR',
-    uniqueNameCheck: 'WarningCode.RETURN_TYPE_INVALID_FOR_CATCH_ERROR',
-    withArguments: _withArgumentsReturnTypeInvalidForCatchError,
-    expectedTypes: [ExpectedType.type, ExpectedType.type],
-  );
-
-  /// There is also a [ParserErrorCode.experimentNotEnabled] code which
-  /// catches some cases of constructor tearoff features (like
-  /// `List<int>.filled;`). Other constructor tearoff cases are not realized
-  /// until resolution (like `List.filled;`).
-  ///
-  /// No parameters.
-  static const WarningWithoutArguments
-  sdkVersionConstructorTearoffs = WarningWithoutArguments(
-    name: 'SDK_VERSION_CONSTRUCTOR_TEAROFFS',
-    problemMessage:
-        "Tearing off a constructor requires the 'constructor-tearoffs' language "
-        "feature.",
-    correctionMessage:
-        "Try updating your 'pubspec.yaml' to set the minimum SDK constraint to "
-        "2.15 or higher, and running 'pub get'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.SDK_VERSION_CONSTRUCTOR_TEAROFFS',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  sdkVersionGtGtGtOperator = WarningWithoutArguments(
-    name: 'SDK_VERSION_GT_GT_GT_OPERATOR',
-    problemMessage:
-        "The operator '>>>' wasn't supported until version 2.14.0, but this code "
-        "is required to be able to run on earlier versions.",
-    correctionMessage: "Try updating the SDK constraints.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.SDK_VERSION_GT_GT_GT_OPERATOR',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the version specified in the `@Since()` annotation
-  /// String p1: the SDK version constraints
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  sdkVersionSince = WarningTemplate(
-    name: 'SDK_VERSION_SINCE',
-    problemMessage:
-        "This API is available since SDK {0}, but constraints '{1}' don't "
-        "guarantee it.",
-    correctionMessage: "Try updating the SDK constraints.",
-    uniqueNameCheck: 'WarningCode.SDK_VERSION_SINCE',
-    withArguments: _withArgumentsSdkVersionSince,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// When "strict-raw-types" is enabled, "raw types" must have type arguments.
-  ///
-  /// A "raw type" is a type name that does not use inference to fill in missing
-  /// type arguments; instead, each type argument is instantiated to its bound.
-  ///
-  /// Parameters:
-  /// Type p0: the name of the generic type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required DartType p0})
-  >
-  strictRawType = WarningTemplate(
-    name: 'STRICT_RAW_TYPE',
-    problemMessage:
-        "The generic type '{0}' should have explicit type arguments but doesn't.",
-    correctionMessage: "Use explicit type arguments for '{0}'.",
-    uniqueNameCheck: 'WarningCode.STRICT_RAW_TYPE',
-    withArguments: _withArgumentsStrictRawType,
-    expectedTypes: [ExpectedType.type],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the sealed class
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  subtypeOfSealedClass = WarningTemplate(
-    name: 'SUBTYPE_OF_SEALED_CLASS',
-    problemMessage:
-        "The class '{0}' shouldn't be extended, mixed in, or implemented because "
-        "it's sealed.",
-    correctionMessage:
-        "Try composing instead of inheriting, or refer to the documentation of "
-        "'{0}' for more information.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.SUBTYPE_OF_SEALED_CLASS',
-    withArguments: _withArgumentsSubtypeOfSealedClass,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the unicode sequence of the code point.
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  textDirectionCodePointInComment = WarningTemplate(
-    name: 'TEXT_DIRECTION_CODE_POINT_IN_COMMENT',
-    problemMessage:
-        "The Unicode code point 'U+{0}' changes the appearance of text from how "
-        "it's interpreted by the compiler.",
-    correctionMessage:
-        "Try removing the code point or using the Unicode escape sequence "
-        "'\\u{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.TEXT_DIRECTION_CODE_POINT_IN_COMMENT',
-    withArguments: _withArgumentsTextDirectionCodePointInComment,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the unicode sequence of the code point.
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  textDirectionCodePointInLiteral = WarningTemplate(
-    name: 'TEXT_DIRECTION_CODE_POINT_IN_LITERAL',
-    problemMessage:
-        "The Unicode code point 'U+{0}' changes the appearance of text from how "
-        "it's interpreted by the compiler.",
-    correctionMessage:
-        "Try removing the code point or using the Unicode escape sequence "
-        "'\\u{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL',
-    withArguments: _withArgumentsTextDirectionCodePointInLiteral,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments typeCheckIsNotNull =
-      WarningWithoutArguments(
-        name: 'TYPE_CHECK_WITH_NULL',
-        problemMessage: "Tests for non-null should be done with '!= null'.",
-        correctionMessage: "Try replacing the 'is! Null' check with '!= null'.",
-        hasPublishedDocs: true,
-        uniqueName: 'TYPE_CHECK_IS_NOT_NULL',
-        uniqueNameCheck: 'WarningCode.TYPE_CHECK_IS_NOT_NULL',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments typeCheckIsNull =
-      WarningWithoutArguments(
-        name: 'TYPE_CHECK_WITH_NULL',
-        problemMessage: "Tests for null should be done with '== null'.",
-        correctionMessage: "Try replacing the 'is Null' check with '== null'.",
-        hasPublishedDocs: true,
-        uniqueName: 'TYPE_CHECK_IS_NULL',
-        uniqueNameCheck: 'WarningCode.TYPE_CHECK_IS_NULL',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the library being imported
-  /// String p1: the name in the hide clause that isn't defined in the library
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedHiddenName = WarningTemplate(
-    name: 'UNDEFINED_HIDDEN_NAME',
-    problemMessage:
-        "The library '{0}' doesn't export a member with the hidden name '{1}'.",
-    correctionMessage: "Try removing the name from the list of hidden members.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNDEFINED_HIDDEN_NAME',
-    withArguments: _withArgumentsUndefinedHiddenName,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the undefined parameter
-  /// String p1: the name of the targeted member
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedReferencedParameter = WarningTemplate(
-    name: 'UNDEFINED_REFERENCED_PARAMETER',
-    problemMessage: "The parameter '{0}' isn't defined by '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNDEFINED_REFERENCED_PARAMETER',
-    withArguments: _withArgumentsUndefinedReferencedParameter,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the library being imported
-  /// String p1: the name in the show clause that isn't defined in the library
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0, required String p1})
-  >
-  undefinedShownName = WarningTemplate(
-    name: 'UNDEFINED_SHOWN_NAME',
-    problemMessage:
-        "The library '{0}' doesn't export a member with the shown name '{1}'.",
-    correctionMessage: "Try removing the name from the list of shown members.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNDEFINED_SHOWN_NAME',
-    withArguments: _withArgumentsUndefinedShownName,
-    expectedTypes: [ExpectedType.string, ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the non-diagnostic being ignored
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unignorableIgnore = WarningTemplate(
-    name: 'UNIGNORABLE_IGNORE',
-    problemMessage: "The diagnostic '{0}' can't be ignored.",
-    correctionMessage:
-        "Try removing the name from the list, or removing the whole comment if "
-        "this is the only name in the list.",
-    uniqueNameCheck: 'WarningCode.UNIGNORABLE_IGNORE',
-    withArguments: _withArgumentsUnignorableIgnore,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryCast =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_CAST',
-        problemMessage: "Unnecessary cast.",
-        correctionMessage: "Try removing the cast.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_CAST',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryCastPattern =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_CAST_PATTERN',
-        problemMessage: "Unnecessary cast pattern.",
-        correctionMessage: "Try removing the cast pattern.",
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_CAST_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  unnecessaryFinal = WarningWithoutArguments(
-    name: 'UNNECESSARY_FINAL',
-    problemMessage:
-        "The keyword 'final' isn't necessary because the parameter is implicitly "
-        "'final'.",
-    correctionMessage: "Try removing the 'final'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNNECESSARY_FINAL',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  unnecessaryNanComparisonFalse = WarningWithoutArguments(
-    name: 'UNNECESSARY_NAN_COMPARISON',
-    problemMessage:
-        "A double can't equal 'double.nan', so the condition is always 'false'.",
-    correctionMessage: "Try using 'double.isNan', or removing the condition.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNNECESSARY_NAN_COMPARISON_FALSE',
-    uniqueNameCheck: 'WarningCode.UNNECESSARY_NAN_COMPARISON_FALSE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  unnecessaryNanComparisonTrue = WarningWithoutArguments(
-    name: 'UNNECESSARY_NAN_COMPARISON',
-    problemMessage:
-        "A double can't equal 'double.nan', so the condition is always 'true'.",
-    correctionMessage: "Try using 'double.isNan', or removing the condition.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNNECESSARY_NAN_COMPARISON_TRUE',
-    uniqueNameCheck: 'WarningCode.UNNECESSARY_NAN_COMPARISON_TRUE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryNoSuchMethod =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_NO_SUCH_METHOD',
-        problemMessage: "Unnecessary 'noSuchMethod' declaration.",
-        correctionMessage: "Try removing the declaration of 'noSuchMethod'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_NO_SUCH_METHOD',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments
-  unnecessaryNullComparisonAlwaysNullFalse = WarningWithoutArguments(
-    name: 'UNNECESSARY_NULL_COMPARISON',
-    problemMessage:
-        "The operand must be 'null', so the condition is always 'false'.",
-    correctionMessage: "Remove the condition.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_FALSE',
-    uniqueNameCheck:
-        'WarningCode.UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_FALSE',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryNullComparisonAlwaysNullTrue =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_NULL_COMPARISON',
-        problemMessage:
-            "The operand must be 'null', so the condition is always 'true'.",
-        correctionMessage: "Remove the condition.",
-        hasPublishedDocs: true,
-        uniqueName: 'UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE',
-        uniqueNameCheck:
-            'WarningCode.UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryNullComparisonNeverNullFalse =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_NULL_COMPARISON',
-        problemMessage:
-            "The operand can't be 'null', so the condition is always 'false'.",
-        correctionMessage:
-            "Try removing the condition, an enclosing condition, or the whole "
-            "conditional statement.",
-        hasPublishedDocs: true,
-        uniqueName: 'UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE',
-        uniqueNameCheck:
-            'WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryNullComparisonNeverNullTrue =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_NULL_COMPARISON',
-        problemMessage:
-            "The operand can't be 'null', so the condition is always 'true'.",
-        correctionMessage: "Remove the condition.",
-        hasPublishedDocs: true,
-        uniqueName: 'UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE',
-        uniqueNameCheck:
-            'WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the type
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unnecessaryQuestionMark = WarningTemplate(
-    name: 'UNNECESSARY_QUESTION_MARK',
-    problemMessage:
-        "The '?' is unnecessary because '{0}' is nullable without it.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNNECESSARY_QUESTION_MARK',
-    withArguments: _withArgumentsUnnecessaryQuestionMark,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessarySetLiteral =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_SET_LITERAL',
-        problemMessage:
-            "Braces unnecessarily wrap this expression in a set literal.",
-        correctionMessage:
-            "Try removing the set literal around the expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_SET_LITERAL',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryTypeCheckFalse =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_TYPE_CHECK',
-        problemMessage: "Unnecessary type check; the result is always 'false'.",
-        correctionMessage:
-            "Try correcting the type check, or removing the type check.",
-        hasPublishedDocs: true,
-        uniqueName: 'UNNECESSARY_TYPE_CHECK_FALSE',
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_TYPE_CHECK_FALSE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryTypeCheckTrue =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_TYPE_CHECK',
-        problemMessage: "Unnecessary type check; the result is always 'true'.",
-        correctionMessage:
-            "Try correcting the type check, or removing the type check.",
-        hasPublishedDocs: true,
-        uniqueName: 'UNNECESSARY_TYPE_CHECK_TRUE',
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_TYPE_CHECK_TRUE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unnecessaryWildcardPattern =
-      WarningWithoutArguments(
-        name: 'UNNECESSARY_WILDCARD_PATTERN',
-        problemMessage: "Unnecessary wildcard pattern.",
-        correctionMessage: "Try removing the wildcard pattern.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.UNNECESSARY_WILDCARD_PATTERN',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unreachableSwitchCase =
-      WarningWithoutArguments(
-        name: 'UNREACHABLE_SWITCH_CASE',
-        problemMessage: "This case is covered by the previous cases.",
-        correctionMessage:
-            "Try removing the case clause, or restructuring the preceding "
-            "patterns.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.UNREACHABLE_SWITCH_CASE',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const WarningWithoutArguments unreachableSwitchDefault =
-      WarningWithoutArguments(
-        name: 'UNREACHABLE_SWITCH_DEFAULT',
-        problemMessage: "This default clause is covered by the previous cases.",
-        correctionMessage:
-            "Try removing the default clause, or restructuring the preceding "
-            "patterns.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'WarningCode.UNREACHABLE_SWITCH_DEFAULT',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the name of the exception variable
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unusedCatchClause = WarningTemplate(
-    name: 'UNUSED_CATCH_CLAUSE',
-    problemMessage:
-        "The exception variable '{0}' isn't used, so the 'catch' clause can be "
-        "removed.",
-    correctionMessage: "Try removing the catch clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_CATCH_CLAUSE',
-    withArguments: _withArgumentsUnusedCatchClause,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the stack trace variable
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unusedCatchStack = WarningTemplate(
-    name: 'UNUSED_CATCH_STACK',
-    problemMessage:
-        "The stack trace variable '{0}' isn't used and can be removed.",
-    correctionMessage: "Try removing the stack trace variable, or using it.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_CATCH_STACK',
-    withArguments: _withArgumentsUnusedCatchStack,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name that is declared but not referenced
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unusedElement = WarningTemplate(
-    name: 'UNUSED_ELEMENT',
-    problemMessage: "The declaration '{0}' isn't referenced.",
-    correctionMessage: "Try removing the declaration of '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_ELEMENT',
-    withArguments: _withArgumentsUnusedElement,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the parameter that is declared but not used
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unusedElementParameter = WarningTemplate(
-    name: 'UNUSED_ELEMENT_PARAMETER',
-    problemMessage: "A value for optional parameter '{0}' isn't ever given.",
-    correctionMessage: "Try removing the unused parameter.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_ELEMENT_PARAMETER',
-    withArguments: _withArgumentsUnusedElementParameter,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the unused field
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unusedField = WarningTemplate(
-    name: 'UNUSED_FIELD',
-    problemMessage: "The value of the field '{0}' isn't used.",
-    correctionMessage: "Try removing the field, or using it.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_FIELD',
-    withArguments: _withArgumentsUnusedField,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the content of the unused import's URI
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unusedImport = WarningTemplate(
-    name: 'UNUSED_IMPORT',
-    problemMessage: "Unused import: '{0}'.",
-    correctionMessage: "Try removing the import directive.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_IMPORT',
-    withArguments: _withArgumentsUnusedImport,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the label that isn't used
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unusedLabel = WarningTemplate(
-    name: 'UNUSED_LABEL',
-    problemMessage: "The label '{0}' isn't used.",
-    correctionMessage:
-        "Try removing the label, or using it in either a 'break' or 'continue' "
-        "statement.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_LABEL',
-    withArguments: _withArgumentsUnusedLabel,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// Object p0: the name of the unused variable
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unusedLocalVariable = WarningTemplate(
-    name: 'UNUSED_LOCAL_VARIABLE',
-    problemMessage: "The value of the local variable '{0}' isn't used.",
-    correctionMessage: "Try removing the variable or using it.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_LOCAL_VARIABLE',
-    withArguments: _withArgumentsUnusedLocalVariable,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the annotated method, property or function
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unusedResult = WarningTemplate(
-    name: 'UNUSED_RESULT',
-    problemMessage: "The value of '{0}' should be used.",
-    correctionMessage:
-        "Try using the result by invoking a member, passing it to a function, "
-        "or returning it from this function.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_RESULT',
-    withArguments: _withArgumentsUnusedResult,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// The result of invoking a method, property, or function annotated with
-  /// `@useResult` must be used (assigned, passed to a function as an argument,
-  /// or returned by a function).
-  ///
-  /// Parameters:
-  /// Object p0: the name of the annotated method, property or function
-  /// Object p1: message details
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  unusedResultWithMessage = WarningTemplate(
-    name: 'UNUSED_RESULT',
-    problemMessage: "'{0}' should be used. {1}.",
-    correctionMessage:
-        "Try using the result by invoking a member, passing it to a function, "
-        "or returning it from this function.",
-    hasPublishedDocs: true,
-    uniqueName: 'UNUSED_RESULT_WITH_MESSAGE',
-    uniqueNameCheck: 'WarningCode.UNUSED_RESULT_WITH_MESSAGE',
-    withArguments: _withArgumentsUnusedResultWithMessage,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name that is shown but not used
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unusedShownName = WarningTemplate(
-    name: 'UNUSED_SHOWN_NAME',
-    problemMessage: "The name {0} is shown, but isn't used.",
-    correctionMessage: "Try removing the name from the list of shown members.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.UNUSED_SHOWN_NAME',
-    withArguments: _withArgumentsUnusedShownName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the URI pointing to a nonexistent file
-  static const WarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  uriDoesNotExistInDocImport = WarningTemplate(
-    name: 'URI_DOES_NOT_EXIST_IN_DOC_IMPORT',
-    problemMessage: "Target of URI doesn't exist: '{0}'.",
-    correctionMessage:
-        "Try creating the file referenced by the URI, or try using a URI for a "
-        "file that does exist.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'WarningCode.URI_DOES_NOT_EXIST_IN_DOC_IMPORT',
-    withArguments: _withArgumentsUriDoesNotExistInDocImport,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const WarningCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.STATIC_WARNING,
-         uniqueName: 'WarningCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic
-  _withArgumentsArgumentTypeNotAssignableToErrorHandler({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.argumentTypeNotAssignableToErrorHandler,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAssignmentOfDoNotStore({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.assignmentOfDoNotStore, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsBodyMightCompleteNormallyCatchError({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.bodyMightCompleteNormallyCatchError,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsBodyMightCompleteNormallyNullable({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.bodyMightCompleteNormallyNullable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsCastFromNullableAlwaysFails({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.castFromNullableAlwaysFails, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsConstantPatternNeverMatchesValueType({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.constantPatternNeverMatchesValueType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDeadCodeOnCatchSubtype({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deadCodeOnCatchSubtype, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedExportUse({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedExportUse, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedExtend({
-    required Object typeName,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedExtend, [typeName]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedImplement({
-    required Object typeName,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedImplement, [typeName]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedInstantiate({
-    required Object typeName,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedInstantiate, [
-      typeName,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedMixin({
-    required Object typeName,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedMixin, [typeName]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedOptional({
-    required Object parameterName,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedOptional, [
-      parameterName,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedSubclass({
-    required Object typeName,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.deprecatedSubclass, [typeName]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveArgumentWrongFormat({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.docDirectiveArgumentWrongFormat,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveHasExtraArguments({
-    required String p0,
-    required int p1,
-    required int p2,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.docDirectiveHasExtraArguments, [
-      p0,
-      p1,
-      p2,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsDocDirectiveHasUnexpectedNamedArgument({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.docDirectiveHasUnexpectedNamedArgument,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveMissingClosingTag({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.docDirectiveMissingClosingTag, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveMissingOneArgument({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.docDirectiveMissingOneArgument, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveMissingOpeningTag({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.docDirectiveMissingOpeningTag, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveMissingThreeArguments({
-    required String p0,
-    required String p1,
-    required String p2,
-    required String p3,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.docDirectiveMissingThreeArguments,
-      [p0, p1, p2, p3],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveMissingTwoArguments({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.docDirectiveMissingTwoArguments,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDocDirectiveUnknown({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.docDirectiveUnknown, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDuplicateIgnore({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.duplicateIgnore, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsExperimentalMemberUse({
-    required String member,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.experimentalMemberUse, [member]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInferenceFailureOnCollectionLiteral({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnCollectionLiteral,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInferenceFailureOnFunctionInvocation({required String p0}) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnFunctionInvocation,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInferenceFailureOnFunctionReturnType({required String p0}) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnFunctionReturnType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInferenceFailureOnGenericInvocation({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnGenericInvocation,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInferenceFailureOnInstanceCreation({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnInstanceCreation,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInferenceFailureOnUninitializedVariable({required String p0}) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnUninitializedVariable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInferenceFailureOnUntypedParameter({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.inferenceFailureOnUntypedParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidAnnotationTarget({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidAnnotationTarget, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidExportOfInternalElement({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidExportOfInternalElement, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidExportOfInternalElementIndirectly({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidExportOfInternalElementIndirectly,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidFactoryMethodDecl({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidFactoryMethodDecl, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidFactoryMethodImpl({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidFactoryMethodImpl, [p0]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidLanguageVersionOverrideGreater({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidLanguageVersionOverrideGreater,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidOverrideOfNonVirtualMember({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidOverrideOfNonVirtualMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidUseOfDoNotSubmitMember({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidUseOfDoNotSubmitMember, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidUseOfInternalMember({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidUseOfInternalMember, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidUseOfProtectedMember({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidUseOfProtectedMember, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidUseOfVisibleForOverridingMember({required String p0}) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidUseOfVisibleForOverridingMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidUseOfVisibleForTemplateMember({
-    required String p0,
-    required Uri p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidUseOfVisibleForTemplateMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidUseOfVisibleForTestingMember({
-    required String p0,
-    required Uri p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidUseOfVisibleForTestingMember,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidVisibilityAnnotation({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.invalidVisibilityAnnotation, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidWidgetPreviewPrivateArgument({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.invalidWidgetPreviewPrivateArgument,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMissingOverrideOfMustBeOverriddenOne({required String p0}) {
-    return LocatableDiagnosticImpl(
-      WarningCode.missingOverrideOfMustBeOverriddenOne,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMissingOverrideOfMustBeOverriddenThreePlus({
-    required String p0,
-    required String p1,
-    required String p2,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.missingOverrideOfMustBeOverriddenThreePlus,
-      [p0, p1, p2],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsMissingOverrideOfMustBeOverriddenTwo({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.missingOverrideOfMustBeOverriddenTwo,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingRequiredParam({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.missingRequiredParam, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingRequiredParamWithDetails({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.missingRequiredParamWithDetails,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsMixinOnSealedClass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.mixinOnSealedClass, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMustBeImmutable({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.mustBeImmutable, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMustCallSuper({required String p0}) {
-    return LocatableDiagnosticImpl(WarningCode.mustCallSuper, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNonConstArgumentForConstParameter({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.nonConstArgumentForConstParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonConstCallToLiteralConstructor({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.nonConstCallToLiteralConstructor,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNonConstCallToLiteralConstructorUsingNew({required String p0}) {
-    return LocatableDiagnosticImpl(
-      WarningCode.nonConstCallToLiteralConstructorUsingNew,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNullArgumentToNonNullType({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.nullArgumentToNonNullType, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPatternNeverMatchesValueType({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.patternNeverMatchesValueType, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsRedeclareOnNonRedeclaringMember({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.redeclareOnNonRedeclaringMember,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsRemovedLintUse({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.removedLintUse, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsReplacedLintUse({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.replacedLintUse, [p0, p1, p2]);
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnOfDoNotStore({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.returnOfDoNotStore, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnOfInvalidTypeFromCatchError({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.returnOfInvalidTypeFromCatchError,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsReturnTypeInvalidForCatchError({
-    required DartType p0,
-    required DartType p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.returnTypeInvalidForCatchError, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSdkVersionSince({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.sdkVersionSince, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsStrictRawType({
-    required DartType p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.strictRawType, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSubtypeOfSealedClass({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.subtypeOfSealedClass, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsTextDirectionCodePointInComment({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.textDirectionCodePointInComment,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsTextDirectionCodePointInLiteral({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      WarningCode.textDirectionCodePointInLiteral,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedHiddenName({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.undefinedHiddenName, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedReferencedParameter({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.undefinedReferencedParameter, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUndefinedShownName({
-    required String p0,
-    required String p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.undefinedShownName, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnignorableIgnore({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unignorableIgnore, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryQuestionMark({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unnecessaryQuestionMark, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedCatchClause({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unusedCatchClause, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedCatchStack({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unusedCatchStack, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedElement({required Object p0}) {
-    return LocatableDiagnosticImpl(WarningCode.unusedElement, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedElementParameter({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unusedElementParameter, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedField({required Object p0}) {
-    return LocatableDiagnosticImpl(WarningCode.unusedField, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedImport({required String p0}) {
-    return LocatableDiagnosticImpl(WarningCode.unusedImport, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedLabel({required String p0}) {
-    return LocatableDiagnosticImpl(WarningCode.unusedLabel, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedLocalVariable({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unusedLocalVariable, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedResult({required String p0}) {
-    return LocatableDiagnosticImpl(WarningCode.unusedResult, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedResultWithMessage({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unusedResultWithMessage, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnusedShownName({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.unusedShownName, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUriDoesNotExistInDocImport({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(WarningCode.uriDoesNotExistInDocImport, [
-      p0,
-    ]);
-  }
-}
-
-final class WarningTemplate<T extends Function> extends WarningCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const WarningTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class WarningWithoutArguments extends WarningCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const WarningWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/error/const_argument_verifier.dart b/pkg/analyzer/lib/src/error/const_argument_verifier.dart
index fcfb744..ddd62c9 100644
--- a/pkg/analyzer/lib/src/error/const_argument_verifier.dart
+++ b/pkg/analyzer/lib/src/error/const_argument_verifier.dart
@@ -10,7 +10,7 @@
 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/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Checks if the arguments for a parameter annotated with `@mustBeConst` are
 /// actually constant.
@@ -33,7 +33,7 @@
       // depends on the value of the left hand side.
       _diagnosticReporter.atNode(
         node.rightHandSide,
-        WarningCode.nonConstArgumentForConstParameter,
+        diag.nonConstArgumentForConstParameter,
         arguments: [node.rightHandSide],
       );
     }
@@ -113,7 +113,7 @@
         if (!_isConst(resolvedArgument)) {
           _diagnosticReporter.atNode(
             argument,
-            WarningCode.nonConstArgumentForConstParameter,
+            diag.nonConstArgumentForConstParameter,
             arguments: [parameterName],
           );
         }
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index 441c9e1..742a882 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Verifier for initializing fields in constructors.
 class ConstructorFieldsVerifier {
@@ -73,7 +73,7 @@
     var fieldMap = <FieldElement, _InitState>{};
 
     for (var field in element.fields) {
-      if (field.isSynthetic) {
+      if (field.isOriginGetterSetter) {
         continue;
       }
       if (element is EnumElement && field.name == 'index') {
@@ -146,25 +146,20 @@
     var names = notInitFinalFields.map((f) => f.name).toList();
     names.sort();
 
-    if (names.length == 1) {
-      diagnosticReporter.atNode(
-        node.returnType,
-        CompileTimeErrorCode.finalNotInitializedConstructor1,
-        arguments: names,
-      );
-    } else if (names.length == 2) {
-      diagnosticReporter.atNode(
-        node.returnType,
-        CompileTimeErrorCode.finalNotInitializedConstructor2,
-        arguments: names,
-      );
-    } else {
-      diagnosticReporter.atNode(
-        node.returnType,
-        CompileTimeErrorCode.finalNotInitializedConstructor3Plus,
-        arguments: [names[0], names[1], names.length - 2],
-      );
-    }
+    var (code, arguments) = switch (names.length) {
+      1 => (diag.finalNotInitializedConstructor1, names),
+      2 => (diag.finalNotInitializedConstructor2, names),
+      _ => (
+        diag.finalNotInitializedConstructor3Plus,
+        [names[0], names[1], names.length - 2],
+      ),
+    };
+
+    diagnosticReporter.atConstructorDeclaration(
+      node,
+      code,
+      arguments: arguments,
+    );
   }
 
   void reportNotInitializedNonNullable(List<_Field> notInitNonNullableFields) {
@@ -176,9 +171,9 @@
     names.sort();
 
     for (var name in names) {
-      diagnosticReporter.atNode(
-        node.returnType,
-        CompileTimeErrorCode.notInitializedNonNullableInstanceFieldConstructor,
+      diagnosticReporter.atConstructorDeclaration(
+        node,
+        diag.notInitializedNonNullableInstanceFieldConstructor,
         arguments: [name],
       );
     }
@@ -203,19 +198,19 @@
             if (fieldElement.isFinal || fieldElement.isConst) {
               diagnosticReporter.atNode(
                 fieldName,
-                CompileTimeErrorCode
-                    .fieldInitializedInInitializerAndDeclaration,
+                diag.fieldInitializedInInitializerAndDeclaration,
               );
             }
+            fields[fieldElement] = _InitState.initInInitializer;
           } else if (state == _InitState.initInFieldFormal) {
             diagnosticReporter.atNode(
               fieldName,
-              CompileTimeErrorCode.fieldInitializedInParameterAndInitializer,
+              diag.fieldInitializedInParameterAndInitializer,
             );
           } else if (state == _InitState.initInInitializer) {
             diagnosticReporter.atNode(
               fieldName,
-              CompileTimeErrorCode.fieldInitializedByMultipleInitializers,
+              diag.fieldInitializedByMultipleInitializers,
               arguments: [fieldElement.displayName],
             );
           }
@@ -241,10 +236,11 @@
           if (fieldElement.isFinal || fieldElement.isConst) {
             diagnosticReporter.atToken(
               formalParameter.name,
-              CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
+              diag.finalInitializedInDeclarationAndConstructor,
               arguments: [fieldElement.displayName],
             );
           }
+          fields[fieldElement] = _InitState.initInFieldFormal;
         } else if (state == _InitState.initInFieldFormal) {
           // Reported in DuplicateDefinitionVerifier._checkDuplicateIdentifier
         }
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index cbe9c27..5b4be02 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -14,8 +14,8 @@
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
 
 class CorrectOverrideHelper {
   final TypeSystemImpl _typeSystem;
@@ -124,7 +124,7 @@
           // `superMember.enclosingElement3.name` are non-`null`.
           errorReporter.atEntity(
             errorEntity,
-            CompileTimeErrorCode.invalidOverride,
+            diag.invalidOverride,
             arguments: [
               _thisMember.name!,
               _thisMember.enclosingElement!.name!,
diff --git a/pkg/analyzer/lib/src/error/dead_code_verifier.dart b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
index dd90848..dc4b310 100644
--- a/pkg/analyzer/lib/src/error/dead_code_verifier.dart
+++ b/pkg/analyzer/lib/src/error/dead_code_verifier.dart
@@ -15,7 +15,7 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// State information captured by [NullSafetyDeadCodeVerifier.for_conditionEnd]
 /// for later use by [NullSafetyDeadCodeVerifier.for_updaterBegin].
@@ -77,7 +77,7 @@
     if (_wildCardVariablesEnabled &&
         element is LocalFunctionElement &&
         element.name == '_') {
-      _diagnosticReporter.atNode(node, WarningCode.deadCode);
+      _diagnosticReporter.atNode(node, diag.deadCode);
     }
     super.visitFunctionDeclaration(node);
   }
@@ -127,7 +127,7 @@
           element.name == '_') {
         _diagnosticReporter.atNode(
           initializer,
-          WarningCode.deadCodeLateWildcardVariableInitializer,
+          diag.deadCodeLateWildcardVariableInitializer,
         );
       }
     }
@@ -143,10 +143,10 @@
     DiagnosticCode warningCode;
     if (combinator is HideCombinator) {
       names = combinator.hiddenNames;
-      warningCode = WarningCode.undefinedHiddenName;
+      warningCode = diag.undefinedHiddenName;
     } else {
       names = (combinator as ShowCombinator).shownNames;
-      warningCode = WarningCode.undefinedShownName;
+      warningCode = diag.undefinedShownName;
     }
     for (SimpleIdentifier name in names) {
       String nameStr = name.name;
@@ -171,7 +171,7 @@
       for (Label label in labelTracker.unusedLabels()) {
         _diagnosticReporter.atNode(
           label,
-          WarningCode.unusedLabel,
+          diag.unusedLabel,
           arguments: [label.label.name],
         );
       }
@@ -232,7 +232,7 @@
     }
 
     if (node is SwitchMember && node == firstDeadNode) {
-      _diagnosticReporter.atToken(node.keyword, WarningCode.deadCode);
+      _diagnosticReporter.atToken(node.keyword, diag.deadCode);
       _firstDeadNode = null;
       return;
     }
@@ -282,7 +282,7 @@
         _diagnosticReporter.atOffset(
           offset: parent.offset,
           length: parent.end - parent.offset,
-          diagnosticCode: WarningCode.deadCode,
+          diagnosticCode: diag.deadCode,
         );
         offset = node.end;
       } else if (parent is DoStatement) {
@@ -295,7 +295,7 @@
         _diagnosticReporter.atOffset(
           offset: whileOffset,
           length: whileEnd - whileOffset,
-          diagnosticCode: WarningCode.deadCode,
+          diagnosticCode: diag.deadCode,
         );
         offset = parent.semicolon.next!.offset;
         if (parent.hasBreakStatement) {
@@ -316,7 +316,7 @@
         _diagnosticReporter.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: WarningCode.deadCode,
+          diagnosticCode: diag.deadCode,
         );
       }
     }
@@ -358,7 +358,7 @@
         _diagnosticReporter.atOffset(
           offset: beginToken.offset,
           length: endToken.end - beginToken.offset,
-          diagnosticCode: WarningCode.deadCode,
+          diagnosticCode: diag.deadCode,
         );
       }
     }
@@ -496,7 +496,7 @@
         _diagnosticReporter.atOffset(
           offset: operator.offset,
           length: node.end - operator.offset,
-          diagnosticCode: WarningCode.deadCode,
+          diagnosticCode: diag.deadCode,
         );
       }
     }
@@ -549,7 +549,7 @@
         _reportDiagnostic(
           catchClauses[index + 1],
           catchClauses.last,
-          WarningCode.deadCodeCatchFollowingCatch,
+          diag.deadCodeCatchFollowingCatch,
           const [],
         );
         _done = true;
@@ -564,7 +564,7 @@
         _reportDiagnostic(
           catchClause,
           catchClauses.last,
-          WarningCode.deadCodeOnCatchSubtype,
+          diag.deadCodeOnCatchSubtype,
           [currentType, type],
         );
         _done = true;
diff --git a/pkg/analyzer/lib/src/error/deprecated_functionality_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_functionality_verifier.dart
index 82962e1..ba847b9 100644
--- a/pkg/analyzer/lib/src/error/deprecated_functionality_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_functionality_verifier.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/super_formal_parameters_verifier.dart';
 
 class DeprecatedFunctionalityVerifier {
@@ -136,13 +136,13 @@
       if (element.isDeprecatedWithKind('extend')) {
         _diagnosticReporter.atNode(
           node,
-          WarningCode.deprecatedExtend,
+          diag.deprecatedExtend,
           arguments: [element.name!],
         );
       } else if (element.isDeprecatedWithKind('subclass')) {
         _diagnosticReporter.atNode(
           node,
-          WarningCode.deprecatedSubclass,
+          diag.deprecatedSubclass,
           arguments: [element.name!],
         );
       }
@@ -159,13 +159,13 @@
         if (element.isDeprecatedWithKind('implement')) {
           _diagnosticReporter.atNode(
             namedType,
-            WarningCode.deprecatedImplement,
+            diag.deprecatedImplement,
             arguments: [element.name!],
           );
         } else if (element.isDeprecatedWithKind('subclass')) {
           _diagnosticReporter.atNode(
             namedType,
-            WarningCode.deprecatedSubclass,
+            diag.deprecatedSubclass,
             arguments: [element.name!],
           );
         }
@@ -180,7 +180,7 @@
     if (element.isDeprecatedWithKind('instantiate')) {
       _diagnosticReporter.atNode(
         errorNode,
-        WarningCode.deprecatedInstantiate,
+        diag.deprecatedInstantiate,
         arguments: [element.name!],
       );
     }
@@ -195,7 +195,7 @@
       if (element.isDeprecatedWithKind('mixin')) {
         _diagnosticReporter.atNode(
           mixin,
-          WarningCode.deprecatedMixin,
+          diag.deprecatedMixin,
           arguments: [element.name!],
         );
       }
@@ -217,7 +217,7 @@
       if (parameter.isDeprecatedWithKind('optional')) {
         _diagnosticReporter.atEntity(
           errorEntity,
-          WarningCode.deprecatedOptional,
+          diag.deprecatedOptional,
           arguments: [parameter.name ?? '<unknown>'],
         );
       }
@@ -257,7 +257,7 @@
         _diagnosticReporter.atOffset(
           offset: errorOffset,
           length: errorLength,
-          diagnosticCode: WarningCode.deprecatedOptional,
+          diagnosticCode: diag.deprecatedOptional,
           arguments: [parameter.name ?? '<unknown>'],
         );
       }
@@ -351,7 +351,7 @@
       _diagnosticReporter.atOffset(
         offset: errorOffset,
         length: errorLength,
-        diagnosticCode: WarningCode.deprecatedOptional,
+        diagnosticCode: diag.deprecatedOptional,
         arguments: [parameter.name ?? '<unknown>'],
       );
     }
@@ -367,7 +367,7 @@
         if (element.isDeprecatedWithKind('subclass')) {
           _diagnosticReporter.atNode(
             namedType,
-            WarningCode.deprecatedSubclass,
+            diag.deprecatedSubclass,
             arguments: [element.name!],
           );
         }
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index 625b480..cda0119 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/error/hint_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/element_usage_detector.dart';
 
 /// Normalizes a deprecation message in preparation for presenting it to the
@@ -48,13 +48,13 @@
     if (normalizeDeprecationMessage(tagInfo) case var message?) {
       _diagnosticReporter.atEntity(
         usageSite,
-        HintCode.deprecatedMemberUseWithMessage,
+        diag.deprecatedMemberUseWithMessage,
         arguments: [displayName, message],
       );
     } else {
       _diagnosticReporter.atEntity(
         usageSite,
-        HintCode.deprecatedMemberUse,
+        diag.deprecatedMemberUse,
         arguments: [displayName],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/doc_comment_verifier.dart b/pkg/analyzer/lib/src/error/doc_comment_verifier.dart
index df4e3b3..598f1ca 100644
--- a/pkg/analyzer/lib/src/error/doc_comment_verifier.dart
+++ b/pkg/analyzer/lib/src/error/doc_comment_verifier.dart
@@ -6,7 +6,7 @@
 
 import 'package:analyzer/dart/ast/doc_comment.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Verifies various data parsed in doc comments.
 class DocCommentVerifier {
@@ -37,7 +37,7 @@
     if (deferredKeyword != null) {
       _diagnosticReporter.atToken(
         deferredKeyword,
-        WarningCode.docImportCannotBeDeferred,
+        diag.docImportCannotBeDeferred,
       );
     }
     var configurations = docImport.import.configurations;
@@ -45,7 +45,7 @@
       _diagnosticReporter.atOffset(
         offset: configurations.first.offset,
         length: configurations.last.end - configurations.first.offset,
-        diagnosticCode: WarningCode.docImportCannotHaveConfigurations,
+        diagnosticCode: diag.docImportCannotHaveConfigurations,
       );
     }
 
@@ -55,7 +55,7 @@
       _diagnosticReporter.atOffset(
         offset: combinators.first.offset,
         length: combinators.last.end - combinators.first.offset,
-        diagnosticCode: WarningCode.docImportCannotHaveCombinators,
+        diagnosticCode: diag.docImportCannotHaveCombinators,
       );
     }
 
@@ -67,7 +67,7 @@
       _diagnosticReporter.atOffset(
         offset: prefix.offset,
         length: prefix.end - prefix.offset,
-        diagnosticCode: WarningCode.docImportCannotHavePrefix,
+        diagnosticCode: diag.docImportCannotHavePrefix,
       );
     }
   }
@@ -83,7 +83,7 @@
         _diagnosticReporter.atOffset(
           offset: tag.offset,
           length: tag.end - tag.offset,
-          diagnosticCode: WarningCode.docDirectiveMissingOneArgument,
+          diagnosticCode: diag.docDirectiveMissingOneArgument,
           arguments: [tag.type.name, required.last.name],
         );
       } else if (gap == 2) {
@@ -94,7 +94,7 @@
         _diagnosticReporter.atOffset(
           offset: tag.offset,
           length: tag.end - tag.offset,
-          diagnosticCode: WarningCode.docDirectiveMissingTwoArguments,
+          diagnosticCode: diag.docDirectiveMissingTwoArguments,
           arguments: [tag.type.name, ...missingArguments],
         );
       } else if (gap == 3) {
@@ -106,7 +106,7 @@
         _diagnosticReporter.atOffset(
           offset: tag.offset,
           length: tag.end - tag.offset,
-          diagnosticCode: WarningCode.docDirectiveMissingThreeArguments,
+          diagnosticCode: diag.docDirectiveMissingThreeArguments,
           arguments: [tag.type.name, ...missingArguments],
         );
       }
@@ -124,7 +124,7 @@
       _diagnosticReporter.atOffset(
         offset: errorOffset,
         length: errorLength,
-        diagnosticCode: WarningCode.docDirectiveHasExtraArguments,
+        diagnosticCode: diag.docDirectiveHasExtraArguments,
         arguments: [tag.type.name, positionalArgumentCount, requiredCount],
       );
     }
@@ -134,7 +134,7 @@
         _diagnosticReporter.atOffset(
           offset: namedArgument.offset,
           length: namedArgument.end - namedArgument.offset,
-          diagnosticCode: WarningCode.docDirectiveHasUnexpectedNamedArgument,
+          diagnosticCode: diag.docDirectiveHasUnexpectedNamedArgument,
           arguments: [tag.type.name, namedArgument.name],
         );
       }
@@ -155,7 +155,7 @@
         _diagnosticReporter.atOffset(
           offset: argument.offset,
           length: argument.end - argument.offset,
-          diagnosticCode: WarningCode.docDirectiveArgumentWrongFormat,
+          diagnosticCode: diag.docDirectiveArgumentWrongFormat,
           arguments: [parameter.name, parameter.expectedFormat.displayString],
         );
       }
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 6734f5e..4c75ee4 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_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/analysis/features.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
@@ -10,11 +9,12 @@
 import 'package:analyzer/src/dart/analysis/file_analysis.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/error_verifier.dart';
 import 'package:analyzer/src/utilities/extensions/element.dart';
 
@@ -44,7 +44,7 @@
         _diagnosticReporter.reportError(
           _diagnosticFactory.duplicateDefinitionForNodes(
             _diagnosticReporter.source,
-            CompileTimeErrorCode.duplicateDefinition,
+            diag.duplicateDefinition,
             stackTraceParameter,
             exceptionParameter,
             [exceptionName],
@@ -57,31 +57,35 @@
   /// Check that the given list of variable declarations does not define
   /// multiple variables of the same name.
   void checkForVariables(VariableDeclarationListImpl node) {
-    var definedNames = <String, ElementImpl>{};
+    var scope = _DuplicateIdentifierScope(this);
     for (var variable in node.variables) {
-      _checkDuplicateIdentifier(
-        definedNames,
-        variable.name,
-        fragment: variable.declaredFragment,
-      );
+      scope.add(variable.name, node: variable);
     }
   }
 
   /// Check that all of the parameters have unique names.
   void checkParameters(FormalParameterListImpl node) {
-    var definedNames = <String, ElementImpl>{};
+    var scope = _FormalParameterDuplicateIdentifierScope(this);
     for (var parameter in node.parameters) {
+      // The identifier can be null if this is a parameter list for a generic
+      // function type.
       var identifier = parameter.name;
-      if (identifier != null) {
-        // The identifier can be null if this is a parameter list for a generic
-        // function type.
+      if (identifier == null) {
+        continue;
+      }
 
-        // Skip wildcard `super._`.
-        if (!_isSuperFormalWildcard(parameter, identifier)) {
-          _checkDuplicateIdentifier(
-            definedNames,
-            identifier,
-            fragment: parameter.declaredFragment,
+      scope.add(identifier, node: parameter);
+    }
+
+    // For private named parameters, also look for collisions with their public
+    // name and other parameters.
+    for (var parameter in node.parameters) {
+      if (parameter.declaredFragment
+          case FieldFormalParameterFragment fragment) {
+        if (fragment.privateName != null) {
+          scope.checkPublicName(
+            privateName: parameter.name!,
+            publicName: fragment.name!,
           );
         }
       }
@@ -90,31 +94,22 @@
 
   /// Check that all of the variables have unique names.
   void checkStatements(List<StatementImpl> statements) {
-    var definedNames = <String, ElementImpl>{};
+    var scope = _DuplicateIdentifierScope(this);
     for (var statement in statements) {
       if (statement is VariableDeclarationStatementImpl) {
         for (var variable in statement.variables.variables) {
-          _checkDuplicateIdentifier(
-            definedNames,
-            variable.name,
-            fragment: variable.declaredFragment,
-          );
+          scope.add(variable.name, node: variable);
         }
       } else if (statement is FunctionDeclarationStatementImpl) {
         if (!_isWildCardFunction(statement)) {
-          _checkDuplicateIdentifier(
-            definedNames,
+          scope.add(
             statement.functionDeclaration.name,
-            fragment: statement.functionDeclaration.declaredFragment,
+            node: statement.functionDeclaration,
           );
         }
       } else if (statement is PatternVariableDeclarationStatementImpl) {
         for (var variable in statement.declaration.elements) {
-          _checkDuplicateIdentifier(
-            definedNames,
-            variable.node.name,
-            fragment: variable.firstFragment,
-          );
+          scope.add(variable.node.name, node: variable.node);
         }
       }
     }
@@ -122,13 +117,9 @@
 
   /// Check that all of the parameters have unique names.
   void checkTypeParameters(TypeParameterListImpl node) {
-    var definedNames = <String, ElementImpl>{};
+    var scope = _DuplicateIdentifierScope(this);
     for (var parameter in node.typeParameters) {
-      _checkDuplicateIdentifier(
-        definedNames,
-        parameter.name,
-        fragment: parameter.declaredFragment,
-      );
+      scope.add(parameter.name, node: parameter);
     }
   }
 
@@ -202,7 +193,7 @@
         if (libraryDeclarations.withName(name) case var existing?) {
           _diagnosticReporter.reportError(
             _diagnosticFactory.duplicateDefinition(
-              CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+              diag.prefixCollidesWithTopLevelMember,
               importPrefix.firstFragment,
               existing as ElementImpl,
               [name],
@@ -222,76 +213,122 @@
     }
 
     for (var member in node.declarations) {
-      if (member is ExtensionDeclarationImpl) {
-        var identifier = member.name;
-        if (identifier != null) {
+      switch (member) {
+        case ClassDeclarationImpl():
           var declaredFragment = member.declaredFragment!;
           if (!declaredFragment.isAugmentation) {
-            _checkDuplicateIdentifier(
+            _checkDuplicateFragmentIdentifier(
               definedGetters,
-              identifier,
+              member.namePart.typeName,
               fragment: declaredFragment,
-              setterScope: definedSetters,
             );
           }
-        }
-      } else if (member is NamedCompilationUnitMemberImpl) {
-        var declaredFragment = member.declaredFragment!;
-        _checkDuplicateIdentifier(
-          definedGetters,
-          member.name,
-          fragment: declaredFragment,
-          setterScope: definedSetters,
-        );
-      } else if (member is TopLevelVariableDeclarationImpl) {
-        for (var variable in member.variables.variables) {
-          var declaredFragment = variable.declaredFragment;
-          declaredFragment as TopLevelVariableFragmentImpl;
+        case EnumDeclarationImpl():
+          var declaredFragment = member.declaredFragment!;
           if (!declaredFragment.isAugmentation) {
-            var declaredElement = declaredFragment.element;
-            _checkDuplicateIdentifier(
+            _checkDuplicateFragmentIdentifier(
               definedGetters,
-              variable.name,
-              originFragment: declaredFragment,
-              fragment: declaredElement.getter?.firstFragment,
-              setterScope: definedSetters,
+              member.namePart.typeName,
+              fragment: declaredFragment,
             );
-            if (declaredElement.definesSetter) {
-              _checkDuplicateIdentifier(
+          }
+        case ExtensionDeclarationImpl():
+          var identifier = member.name;
+          if (identifier != null) {
+            var declaredFragment = member.declaredFragment!;
+            if (!declaredFragment.isAugmentation) {
+              _checkDuplicateFragmentIdentifier(
                 definedGetters,
-                variable.name,
-                originFragment: declaredFragment,
-                fragment: declaredElement.setter?.firstFragment,
-                setterScope: definedSetters,
+                identifier,
+                fragment: declaredFragment,
               );
             }
           }
-        }
+        case ExtensionTypeDeclarationImpl():
+          var declaredFragment = member.declaredFragment!;
+          if (!declaredFragment.isAugmentation) {
+            _checkDuplicateFragmentIdentifier(
+              definedGetters,
+              member.primaryConstructor.typeName,
+              fragment: declaredFragment,
+            );
+          }
+        case FunctionDeclarationImpl():
+          var declaredFragment = member.declaredFragment!;
+          if (!declaredFragment.isAugmentation) {
+            if (declaredFragment is SetterFragment) {
+              _checkDuplicateFragmentIdentifier(
+                definedSetters,
+                member.name,
+                fragment: declaredFragment,
+              );
+            } else {
+              _checkDuplicateFragmentIdentifier(
+                definedGetters,
+                member.name,
+                fragment: declaredFragment,
+              );
+            }
+          }
+        case MixinDeclarationImpl():
+          var declaredFragment = member.declaredFragment!;
+          if (!declaredFragment.isAugmentation) {
+            _checkDuplicateFragmentIdentifier(
+              definedGetters,
+              member.name,
+              fragment: declaredFragment,
+            );
+          }
+        case TopLevelVariableDeclarationImpl():
+          for (var variable in member.variables.variables) {
+            var declaredFragment = variable.declaredFragment;
+            declaredFragment as TopLevelVariableFragmentImpl;
+            if (!declaredFragment.isAugmentation) {
+              var declaredElement = declaredFragment.element;
+              if (declaredElement.getter?.firstFragment case var getter?) {
+                _checkDuplicateFragmentIdentifier(
+                  definedGetters,
+                  variable.name,
+                  originFragment: declaredFragment,
+                  fragment: getter,
+                );
+              }
+              if (declaredElement.definesSetter) {
+                if (declaredElement.setter?.firstFragment case var setter?) {
+                  _checkDuplicateFragmentIdentifier(
+                    definedSetters,
+                    variable.name,
+                    originFragment: declaredFragment,
+                    fragment: setter,
+                  );
+                }
+              }
+            }
+          }
+        case TypeAliasImpl():
+          var declaredFragment = member.declaredFragment!;
+          if (!declaredFragment.isAugmentation) {
+            _checkDuplicateFragmentIdentifier(
+              definedGetters,
+              member.name,
+              fragment: declaredFragment,
+            );
+          }
       }
     }
   }
 
   /// Check whether the given [fragment] defined by the [identifier] is already
-  /// in one of the scopes - [getterScope] or [setterScope], and produce an
-  /// error if it is.
-  void _checkDuplicateIdentifier(
-    Map<String, ElementImpl> getterScope,
+  /// in [scope], and produce an error if it is.
+  void _checkDuplicateFragmentIdentifier(
+    Map<String, ElementImpl> scope,
     Token identifier, {
     FragmentImpl? originFragment,
-    required FragmentImpl? fragment,
-    Map<String, ElementImpl>? setterScope,
+    required FragmentImpl fragment,
   }) {
     if (identifier.isSynthetic) {
       return;
     }
-    if (fragment == null || fragment.element.isWildcardVariable) {
-      return;
-    }
-    if (fragment.isAugmentation) {
-      return;
-    }
-
-    originFragment ??= fragment;
 
     var lookupName = fragment.element.lookupName;
     if (lookupName == null) {
@@ -302,58 +339,21 @@
       return;
     }
 
-    DiagnosticCode getDiagnostic(ElementImpl previous, FragmentImpl current) {
-      if (previous is FieldFormalParameterElement &&
-          current is FieldFormalParameterFragment) {
-        return CompileTimeErrorCode.duplicateFieldFormalParameter;
-      }
-      return CompileTimeErrorCode.duplicateDefinition;
-    }
-
-    if (fragment is SetterFragment) {
-      if (setterScope != null) {
-        var previous = setterScope[lookupName];
-        if (previous != null) {
-          _reportedTokens.add(identifier);
-          _diagnosticReporter.reportError(
-            _diagnosticFactory.duplicateDefinition(
-              getDiagnostic(previous, fragment),
-              originFragment,
-              previous,
-              [lookupName],
-            ),
-          );
-        } else {
-          setterScope[lookupName] = fragment.element;
-        }
-      }
+    if (scope[lookupName] case var previous?) {
+      _reportedTokens.add(identifier);
+      _diagnosticReporter.reportError(
+        _diagnosticFactory.duplicateDefinition(
+          diag.duplicateDefinition,
+          originFragment ?? fragment,
+          previous,
+          [lookupName],
+        ),
+      );
     } else {
-      var previous = getterScope[lookupName];
-      if (previous != null) {
-        _reportedTokens.add(identifier);
-        _diagnosticReporter.reportError(
-          _diagnosticFactory.duplicateDefinition(
-            getDiagnostic(previous, fragment),
-            originFragment,
-            previous,
-            [lookupName],
-          ),
-        );
-      } else {
-        getterScope[lookupName] = fragment.element;
-      }
+      scope[lookupName] = fragment.element;
     }
   }
 
-  bool _isSuperFormalWildcard(FormalParameter parameter, Token identifier) {
-    if (parameter is DefaultFormalParameter) {
-      parameter = parameter.parameter;
-    }
-    return parameter is SuperFormalParameter &&
-        identifier.lexeme == '_' &&
-        _currentLibrary.featureSet.isEnabled(Feature.wildcard_variables);
-  }
-
   bool _isWildCardFunction(FunctionDeclarationStatement statement) =>
       statement.functionDeclaration.name.lexeme == '_' &&
       _currentLibrary.hasWildcardVariablesFeatureEnabled;
@@ -382,7 +382,7 @@
   );
 
   void _checkClass(ClassDeclarationImpl node) {
-    _checkClassMembers(node.declaredFragment!, node.members);
+    _checkClassMembers(node.declaredFragment!, node.body.members);
   }
 
   /// Check that there are no members with the same name.
@@ -404,21 +404,25 @@
           if (member.augmentKeyword != null) {
             continue;
           }
-          if (member.returnType.name != firstFragment.name) {
-            // [member] is erroneous; do not count it as a possible duplicate.
-            continue;
+
+          // Skip if the typeName is wrong.
+          if (member.typeName case var typeName?) {
+            if (typeName.name != firstFragment.name) {
+              continue;
+            }
           }
+
           var name = member.name?.lexeme ?? 'new';
           if (!constructorNames.add(name)) {
             if (name == 'new') {
               _diagnosticReporter.atConstructorDeclaration(
                 member,
-                CompileTimeErrorCode.duplicateConstructorDefault,
+                diag.duplicateConstructorDefault,
               );
             } else {
               _diagnosticReporter.atConstructorDeclaration(
                 member,
-                CompileTimeErrorCode.duplicateConstructorName,
+                diag.duplicateConstructorName,
                 arguments: [name],
               );
             }
@@ -457,6 +461,9 @@
               _checkValuesDeclarationInEnum(member.name);
             }
           }
+        case PrimaryConstructorBodyImpl():
+          // TODO(scheglov): Handle this case.
+          throw UnimplementedError();
       }
     }
 
@@ -491,7 +498,7 @@
                 String className = firstFragment.name ?? '';
                 _diagnosticReporter.atToken(
                   identifier,
-                  CompileTimeErrorCode.conflictingStaticAndInstance,
+                  diag.conflictingStaticAndInstance,
                   arguments: [className, name, className],
                 );
               }
@@ -507,7 +514,7 @@
               String className = firstFragment.name ?? '';
               _diagnosticReporter.atToken(
                 identifier,
-                CompileTimeErrorCode.conflictingStaticAndInstance,
+                diag.conflictingStaticAndInstance,
                 arguments: [className, name, className],
               );
             }
@@ -538,15 +545,12 @@
           element: PropertyAccessorElementImpl staticMember2,
         ):
           DiagnosticCode errorCode;
-          if (staticMember2.isSynthetic) {
-            errorCode =
-                CompileTimeErrorCode.conflictingConstructorAndStaticField;
+          if (staticMember2.isOriginVariable) {
+            errorCode = diag.conflictingConstructorAndStaticField;
           } else if (staticMember2 is GetterElementImpl) {
-            errorCode =
-                CompileTimeErrorCode.conflictingConstructorAndStaticGetter;
+            errorCode = diag.conflictingConstructorAndStaticGetter;
           } else {
-            errorCode =
-                CompileTimeErrorCode.conflictingConstructorAndStaticSetter;
+            errorCode = diag.conflictingConstructorAndStaticSetter;
           }
           _diagnosticReporter.atElement2(
             constructor.asElement2,
@@ -556,15 +560,15 @@
         case _ScopeEntryElement(element: MethodElementImpl()):
           _diagnosticReporter.atElement2(
             constructor.asElement2,
-            CompileTimeErrorCode.conflictingConstructorAndStaticMethod,
+            diag.conflictingConstructorAndStaticMethod,
             arguments: [name],
           );
         case _ScopeEntryGetterSetterPair():
           _diagnosticReporter.atElement2(
             constructor.asElement2,
-            state.getter.isSynthetic
-                ? CompileTimeErrorCode.conflictingConstructorAndStaticField
-                : CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
+            state.getter.isOriginVariable
+                ? diag.conflictingConstructorAndStaticField
+                : diag.conflictingConstructorAndStaticGetter,
             arguments: [name],
           );
         case _ScopeEntryElement(:var element):
@@ -619,7 +623,7 @@
         if (!identical(previous, fragment.element)) {
           _diagnosticReporter.reportError(
             _diagnosticFactory.duplicateDefinition(
-              CompileTimeErrorCode.duplicateDefinition,
+              diag.duplicateDefinition,
               originFragment ?? fragment,
               previous,
               [name],
@@ -638,11 +642,11 @@
     var elementContext = _getElementContext(firstFragment);
     var staticScope = elementContext.staticScope;
 
-    for (var constant in node.constants) {
+    for (var constant in node.body.constants) {
       if (constant.name.lexeme == declarationName) {
         _diagnosticReporter.atToken(
           constant.name,
-          CompileTimeErrorCode.enumConstantSameNameAsEnclosing,
+          diag.enumConstantSameNameAsEnclosing,
         );
       }
       var constantFragment = constant.declaredFragment!;
@@ -656,12 +660,12 @@
       _checkValuesDeclarationInEnum(constant.name);
     }
 
-    _checkClassMembers(fragment, node.members);
+    _checkClassMembers(fragment, node.body.members);
 
     if (declarationName == 'values') {
       _diagnosticReporter.atToken(
-        node.name,
-        CompileTimeErrorCode.enumWithNameValues,
+        node.namePart.typeName,
+        diag.enumWithNameValues,
       );
     }
 
@@ -677,7 +681,7 @@
       if (inherited is InternalMethodElement) {
         _diagnosticReporter.atElement2(
           accessor.asElement2,
-          CompileTimeErrorCode.conflictingFieldAndMethod,
+          diag.conflictingFieldAndMethod,
           arguments: [
             firstFragment.displayName,
             baseName,
@@ -699,7 +703,7 @@
       if (inherited is InternalPropertyAccessorElement) {
         _diagnosticReporter.atElement2(
           method.asElement2,
-          CompileTimeErrorCode.conflictingMethodAndField,
+          diag.conflictingMethodAndField,
           arguments: [
             firstFragment.displayName,
             baseName,
@@ -728,7 +732,7 @@
         if (instance != null && baseName != 'values') {
           _diagnosticReporter.atElement2(
             accessor.asElement2,
-            CompileTimeErrorCode.conflictingStaticAndInstance,
+            diag.conflictingStaticAndInstance,
             arguments: [declarationName, baseName, declarationName],
           );
         }
@@ -745,7 +749,7 @@
         if (instance != null) {
           _diagnosticReporter.atElement2(
             method.asElement2,
-            CompileTimeErrorCode.conflictingStaticAndInstance,
+            diag.conflictingStaticAndInstance,
             arguments: [declarationName, baseName, declarationName],
           );
         }
@@ -756,7 +760,7 @@
   /// Check that there are no members with the same name.
   void _checkExtension(covariant ExtensionDeclarationImpl node) {
     var fragment = node.declaredFragment!;
-    _checkClassMembers(fragment, node.members);
+    _checkClassMembers(fragment, node.body.members);
   }
 
   void _checkExtensionStatic(covariant ExtensionDeclarationImpl node) {
@@ -766,7 +770,7 @@
     var elementContext = _getElementContext(firstFragment);
     var instanceScope = elementContext.instanceScope;
 
-    for (var member in node.members) {
+    for (var member in node.body.members) {
       if (member is FieldDeclarationImpl) {
         if (member.isStatic) {
           for (var field in member.fields.variables) {
@@ -775,7 +779,7 @@
             if (instanceScope.containsKey(name)) {
               _diagnosticReporter.atToken(
                 identifier,
-                CompileTimeErrorCode.extensionConflictingStaticAndInstance,
+                diag.extensionConflictingStaticAndInstance,
                 arguments: [name],
               );
             }
@@ -788,7 +792,7 @@
           if (instanceScope.containsKey(name)) {
             _diagnosticReporter.atToken(
               identifier,
-              CompileTimeErrorCode.extensionConflictingStaticAndInstance,
+              diag.extensionConflictingStaticAndInstance,
               arguments: [name],
             );
           }
@@ -811,11 +815,11 @@
       );
     }
 
-    _checkClassMembers(firstFragment, node.members);
+    _checkClassMembers(firstFragment, node.body.members);
   }
 
   void _checkMixin(MixinDeclarationImpl node) {
-    _checkClassMembers(node.declaredFragment!, node.members);
+    _checkClassMembers(node.declaredFragment!, node.body.members);
   }
 
   void _checkUnit(CompilationUnitImpl node) {
@@ -846,17 +850,17 @@
       switch (declaration) {
         case ClassDeclarationImpl():
           var fragment = declaration.declaredFragment!;
-          _checkClassStatic(fragment, declaration.members);
+          _checkClassStatic(fragment, declaration.body.members);
         case EnumDeclarationImpl():
           _checkEnumStatic(declaration);
         case ExtensionDeclarationImpl():
           _checkExtensionStatic(declaration);
         case ExtensionTypeDeclarationImpl():
           var fragment = declaration.declaredFragment!;
-          _checkClassStatic(fragment, declaration.members);
+          _checkClassStatic(fragment, declaration.body.members);
         case MixinDeclarationImpl():
           var fragment = declaration.declaredFragment!;
-          _checkClassStatic(fragment, declaration.members);
+          _checkClassStatic(fragment, declaration.body.members);
         case ClassTypeAliasImpl():
         case FunctionDeclarationImpl():
         case FunctionTypeAliasImpl():
@@ -869,10 +873,7 @@
 
   void _checkValuesDeclarationInEnum(Token name) {
     if (name.lexeme == 'values') {
-      _diagnosticReporter.atToken(
-        name,
-        CompileTimeErrorCode.valuesDeclarationInEnum,
-      );
+      _diagnosticReporter.atToken(name, diag.valuesDeclarationInEnum);
     }
   }
 
@@ -941,6 +942,109 @@
   }
 }
 
+/// A single scope where colliding definitions with the same name is an error.
+class _DuplicateIdentifierScope<T extends AstNode> {
+  final DuplicateDefinitionVerifier _verifier;
+
+  final Map<String, (T, Token)> _scope = {};
+
+  _DuplicateIdentifierScope(this._verifier);
+
+  /// Reports an error if there is already a node in this scope with the given
+  /// [identifier] name.
+  ///
+  /// Otherwise, adds [node] to the scope.
+  void add(Token identifier, {required T node}) {
+    if (identifier.isSynthetic) {
+      return;
+    }
+
+    if (_verifier._reportedTokens.contains(identifier)) {
+      return;
+    }
+
+    // Wildcards do not collide.
+    if (identifier.lexeme == '_' &&
+        _verifier._currentLibrary.hasWildcardVariablesFeatureEnabled &&
+        isWildcard(node)) {
+      return;
+    }
+
+    if (_scope[identifier.lexeme] case (var previousNode, var previousToken)) {
+      _verifier._reportedTokens.add(identifier);
+      _verifier._diagnosticReporter.reportError(
+        _verifier._diagnosticFactory.duplicateDefinitionForNodes(
+          _verifier._diagnosticReporter.source,
+          getDiagnostic(previousNode, node),
+          identifier,
+          previousToken,
+          [identifier.lexeme],
+        ),
+      );
+    } else {
+      _scope[identifier.lexeme] = (node, identifier);
+    }
+  }
+
+  /// The diagnostic code to use when [previous] and [current] have the same
+  /// name.
+  DiagnosticCode getDiagnostic(T previous, T current) =>
+      diag.duplicateDefinition;
+
+  /// Whether [node] whose name is known to be `_` should be treated as a
+  /// wildcard or not.
+  bool isWildcard(T node) => true;
+}
+
+/// A [_DuplicateIdentifierScope] for formal parameters.
+///
+/// Handles private named parameters and initializing formals.
+class _FormalParameterDuplicateIdentifierScope
+    extends _DuplicateIdentifierScope<FormalParameter> {
+  _FormalParameterDuplicateIdentifierScope(super.verifier);
+
+  /// Given a private named parameter with [privateName] and corresponding
+  /// [publicName], checks that the public name doesn't collide with any other
+  /// parameter.
+  void checkPublicName({
+    required Token privateName,
+    required String publicName,
+  }) {
+    if (_scope[publicName] case (var _, var previousToken)) {
+      _verifier._diagnosticReporter.reportError(
+        _verifier._diagnosticFactory.duplicateDefinitionForNodes(
+          _verifier._diagnosticReporter.source,
+          diag.privateNamedParameterDuplicatePublicName,
+          privateName,
+          previousToken,
+          [publicName],
+        ),
+      );
+    }
+  }
+
+  @override
+  DiagnosticCode getDiagnostic(
+    FormalParameter previous,
+    FormalParameter current,
+  ) {
+    // When two initializing formals collide, tell the user they can't
+    // initialize the same field twice.
+    if (previous.notDefault is FieldFormalParameter &&
+        current.notDefault is FieldFormalParameter) {
+      return diag.duplicateFieldFormalParameter;
+    }
+    return diag.duplicateDefinition;
+  }
+
+  @override
+  bool isWildcard(FormalParameter node) {
+    // Since fields can be named `_`, initializing formals are not
+    // considered wildcards.
+    return node.notDefault is! FieldFormalParameter;
+  }
+}
+
 /// Information accumulated for a single declaration and its augmentations.
 class _InstanceElementContext {
   final Set<String> constructorNames = {};
diff --git a/pkg/analyzer/lib/src/error/error_handler_verifier.dart b/pkg/analyzer/lib/src/error/error_handler_verifier.dart
index 03ece01..46a4c12 100644
--- a/pkg/analyzer/lib/src/error/error_handler_verifier.dart
+++ b/pkg/analyzer/lib/src/error/error_handler_verifier.dart
@@ -12,7 +12,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/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/return_type_verifier.dart';
 import 'package:analyzer/src/generated/error_verifier.dart';
 import 'package:collection/collection.dart';
@@ -203,7 +203,7 @@
     void report() {
       _diagnosticReporter.atNode(
         expression,
-        WarningCode.argumentTypeNotAssignableToErrorHandler,
+        diag.argumentTypeNotAssignableToErrorHandler,
         arguments: [expressionType, expectedFunctionReturnType],
       );
     }
@@ -292,7 +292,7 @@
     )) {
       _diagnosticReporter.atNode(
         callback,
-        WarningCode.returnTypeInvalidForCatchError,
+        diag.returnTypeInvalidForCatchError,
         arguments: [functionReturnType, expectedType],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart b/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart
index da45cd5..b282080 100644
--- a/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/element_usage_detector.dart';
 
 /// Instance of [ElementUsageReporter] for reporting uses of experimental
@@ -29,7 +29,7 @@
 
     _diagnosticReporter.atEntity(
       errorEntity,
-      WarningCode.experimentalMemberUse,
+      diag.experimentalMemberUse,
       arguments: [displayName],
     );
   }
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 20996a5..da953db 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Verifies that the return type of the getter matches the parameter type
 /// of the corresponding setter. Where "match" means "subtype" in non-nullable,
@@ -98,7 +98,7 @@
 
             _diagnosticReporter.atElement2(
               errorElement,
-              CompileTimeErrorCode.getterNotSubtypeSetterTypes,
+              diag.getterNotSubtypeSetterTypes,
               arguments: [getterName, getterType, setterType, setterName],
             );
           }
@@ -139,7 +139,7 @@
     if (!_typeSystem.isSubtypeOf(getterType, setterType)) {
       _diagnosticReporter.atElement2(
         getter,
-        CompileTimeErrorCode.getterNotSubtypeSetterTypes,
+        diag.getterNotSubtypeSetterTypes,
         arguments: [name, getterType, setterType, name],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/ignore_validator.dart b/pkg/analyzer/lib/src/error/ignore_validator.dart
index 7239137..c62c66c 100644
--- a/pkg/analyzer/lib/src/error/ignore_validator.dart
+++ b/pkg/analyzer/lib/src/error/ignore_validator.dart
@@ -6,9 +6,10 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/ignore_comments/ignore_info.dart';
 import 'package:analyzer/src/lint/registry.dart';
+import 'package:meta/meta.dart';
 
 /// Used to validate the ignore comments in a single file.
 class IgnoreValidator {
@@ -27,6 +28,20 @@
   static late DiagnosticCode unnecessaryIgnoreNameLocationLintCode;
   static late DiagnosticCode unnecessaryIgnoreNameFileLintCode;
 
+  /// Whether to report `unignorable_ignore` warnings.
+  ///
+  /// `unignorable_ignore` warnings were introduced in
+  /// https://dart-review.googlesource.com/c/sdk/+/156402 but not enabled until
+  /// https://dart-review.googlesource.com/c/sdk/+/463504.
+  ///
+  /// This flag allows the logic for reporting these warnings to be easily
+  /// disabled again in case this leads to problems, without interfering with
+  /// the ability to unit test the functionality.
+  // TODO(paulberry): remove this flag once sufficient time has elapsed after
+  // rolling https://dart-review.googlesource.com/c/sdk/+/463504 into Flutter.
+  @visibleForTesting
+  static bool enableUnignorableIgnore = true;
+
   /// The diagnostic reporter to which diagnostics are to be reported.
   final DiagnosticReporter _diagnosticReporter;
 
@@ -58,7 +73,9 @@
     this._lineInfo,
     this._unignorableNames,
     this._validateUnnecessaryIgnores,
-  );
+  ) {
+    assert(_unignorableNames.every((n) => n == n.toLowerCase()));
+  }
 
   /// Report any issues with ignore comments in the file being analyzed.
   void reportErrors() {
@@ -130,10 +147,8 @@
       var ignoredOnLine = ignoredOnLineMap[lineNumber];
 
       ignoredForFile.removeByName(error.ignoreName);
-      ignoredForFile.removeByName(error.ignoreUniqueName);
 
       ignoredOnLine?.removeByName(error.ignoreName);
-      ignoredOnLine?.removeByName(error.ignoreUniqueName);
     }
     //
     // Report any remaining ignored names as being unnecessary.
@@ -154,26 +169,27 @@
     List<IgnoredElement> duplicated,
     List<IgnoredElement> list,
   ) {
-    // TODO(brianwilkerson): Uncomment the code below after the unignorable
-    //  ignores in the Flutter code base have been cleaned up.
-    // for (var unignorableName in unignorable) {
-    //   if (unignorableName is IgnoredDiagnosticName) {
-    //     var name = unignorableName.name;
-    //     _errorReporter.atOffset(
-    //         errorCode: WarningCode.UNIGNORABLE_IGNORE,
-    //         offset: unignorableName.offset,
-    //         length: name.length,
-    //         arguments: [name]);
-    //     list.remove(unignorableName);
-    //   }
-    // }
+    if (enableUnignorableIgnore) {
+      for (var unignorableName in unignorable) {
+        if (unignorableName is IgnoredDiagnosticName) {
+          var name = unignorableName.name;
+          _diagnosticReporter.atOffset(
+            diagnosticCode: diag.unignorableIgnore,
+            offset: unignorableName.offset,
+            length: name.length,
+            arguments: [name],
+          );
+          list.remove(unignorableName);
+        }
+      }
+    }
     for (var ignoredElement in duplicated) {
       if (ignoredElement is IgnoredDiagnosticName) {
         var name = ignoredElement.name;
         _diagnosticReporter.atOffset(
           offset: ignoredElement.offset,
           length: name.length,
-          diagnosticCode: WarningCode.duplicateIgnore,
+          diagnosticCode: diag.duplicateIgnore,
           arguments: [name],
         );
         list.remove(ignoredElement);
@@ -181,7 +197,7 @@
         _diagnosticReporter.atOffset(
           offset: ignoredElement.offset,
           length: ignoredElement.length,
-          diagnosticCode: WarningCode.duplicateIgnore,
+          diagnosticCode: diag.duplicateIgnore,
           arguments: [ignoredElement.type],
         );
         list.remove(ignoredElement);
@@ -214,7 +230,7 @@
             var replacedBy = state.replacedBy;
             if (replacedBy != null) {
               _diagnosticReporter.atOffset(
-                diagnosticCode: WarningCode.replacedLintUse,
+                diagnosticCode: diag.replacedLintUse,
                 offset: ignoredName.offset,
                 length: name.length,
                 arguments: [name, since, replacedBy],
@@ -222,7 +238,7 @@
               continue;
             } else {
               _diagnosticReporter.atOffset(
-                diagnosticCode: WarningCode.removedLintUse,
+                diagnosticCode: diag.removedLintUse,
                 offset: ignoredName.offset,
                 length: name.length,
                 arguments: [name, since],
@@ -286,15 +302,6 @@
 
 extension on Diagnostic {
   String get ignoreName => diagnosticCode.name.toLowerCase();
-
-  String get ignoreUniqueName {
-    String uniqueName = diagnosticCode.uniqueName;
-    int period = uniqueName.indexOf('.');
-    if (period >= 0) {
-      uniqueName = uniqueName.substring(period + 1);
-    }
-    return uniqueName.toLowerCase();
-  }
 }
 
 extension on List<IgnoredElement> {
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index b7106ea..1d7e323 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -7,15 +7,15 @@
 import 'package:analyzer/src/dart/analysis/file_analysis.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Instances of the class `ImportsVerifier` visit all of the referenced
 /// libraries in the source code verifying that all of the imports are used,
-/// otherwise a [WarningCode.unusedImport] hint is generated with
+/// otherwise a [diag.unusedImport] hint is generated with
 /// [generateUnusedImportWarnings].
 ///
 /// Additionally, [generateDuplicateImportWarnings] generates
-/// [WarningCode.duplicateImport] hints and [WarningCode.unusedShownName]
+/// [diag.duplicateImport] hints and [diag.unusedShownName]
 /// warnings.
 ///
 /// While this class does not yet have support for an "Organize Imports" action,
@@ -98,34 +98,28 @@
 
   /// Any time after the defining compilation unit has been visited by this
   /// visitor, this method can be called to report an
-  /// [WarningCode.duplicateExport] hint for each of the export
+  /// [diag.duplicateExport] hint for each of the export
   /// directives in the [_duplicateExports] list.
   void generateDuplicateExportWarnings(DiagnosticReporter diagnosticReporter) {
     var length = _duplicateExports.length;
     for (var i = 0; i < length; i++) {
-      diagnosticReporter.atNode(
-        _duplicateExports[i].uri,
-        WarningCode.duplicateExport,
-      );
+      diagnosticReporter.atNode(_duplicateExports[i].uri, diag.duplicateExport);
     }
   }
 
   /// Any time after the defining compilation unit has been visited by this
   /// visitor, this method can be called to report an
-  /// [WarningCode.duplicateImport] hint for each of the import
+  /// [diag.duplicateImport] hint for each of the import
   /// directives in the [_duplicateImports] list.
   void generateDuplicateImportWarnings(DiagnosticReporter diagnosticReporter) {
     var length = _duplicateImports.length;
     for (var i = 0; i < length; i++) {
-      diagnosticReporter.atNode(
-        _duplicateImports[i].uri,
-        WarningCode.duplicateImport,
-      );
+      diagnosticReporter.atNode(_duplicateImports[i].uri, diag.duplicateImport);
     }
   }
 
-  /// Report a [WarningCode.duplicateShownName] and
-  /// [WarningCode.duplicateHiddenName] hints for each duplicate shown or
+  /// Report a [diag.duplicateShownName] and
+  /// [diag.duplicateHiddenName] hints for each duplicate shown or
   /// hidden name.
   ///
   /// Only call this method after all of the compilation units have been visited
@@ -138,7 +132,7 @@
       int length = identifiers.length;
       for (int i = 0; i < length; i++) {
         Identifier identifier = identifiers[i];
-        reporter.atNode(identifier, WarningCode.duplicateHiddenName);
+        reporter.atNode(identifier, diag.duplicateHiddenName);
       }
     });
     _duplicateShownNamesMap.forEach((
@@ -148,7 +142,7 @@
       int length = identifiers.length;
       for (int i = 0; i < length; i++) {
         Identifier identifier = identifiers[i];
-        reporter.atNode(identifier, WarningCode.duplicateShownName);
+        reporter.atNode(identifier, diag.duplicateShownName);
       }
     });
   }
@@ -215,7 +209,7 @@
             secondElementUri is DirectiveUriWithLibraryImpl) {
           diagnosticReporter.atNode(
             firstDirective.uri,
-            HintCode.unnecessaryImport,
+            diag.unnecessaryImport,
             arguments: [
               firstElementUri.relativeUriString,
               secondElementUri.relativeUriString,
@@ -228,7 +222,7 @@
     }
   }
 
-  /// Reports [WarningCode.unusedImport] for each unused import.
+  /// Reports [diag.unusedImport] for each unused import.
   void generateUnusedImportWarnings(DiagnosticReporter diagnosticReporter) {
     var importsTracking = fileAnalysis.importsTracking;
     for (var importDirective in fileAnalysis.unit.directives) {
@@ -262,7 +256,7 @@
             _unusedImports.add(importDirective);
             diagnosticReporter.atNode(
               importDirective.uri,
-              WarningCode.unusedImport,
+              diag.unusedImport,
               arguments: [uri.relativeUriString],
             );
           }
@@ -271,7 +265,7 @@
     }
   }
 
-  /// Use the error [reporter] to report an [WarningCode.unusedShownName]
+  /// Use the error [reporter] to report an [diag.unusedShownName]
   /// for each unused shown name.
   ///
   /// This method should be invoked after [generateUnusedImportWarnings].
@@ -318,7 +312,7 @@
               if (!isUsed) {
                 reporter.atNode(
                   identifier,
-                  WarningCode.unusedShownName,
+                  diag.unusedShownName,
                   arguments: [identifier.name],
                 );
               }
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index c586899..c430403 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -16,7 +16,7 @@
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/correct_override.dart';
 import 'package:analyzer/src/error/getter_setter_types_verifier.dart';
 import 'package:analyzer/src/error/inference_error.dart';
@@ -50,10 +50,11 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
-          classNameToken: declaration.name,
+          node: declaration,
+          classNameToken: declaration.namePart.typeName,
           classElement: fragment.element,
           implementsClause: declaration.implementsClause,
-          members: declaration.members,
+          members: declaration.body.members,
           superclass: declaration.extendsClause?.superclass,
           withClause: declaration.withClause,
         );
@@ -70,6 +71,7 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
+          node: declaration,
           classNameToken: declaration.name,
           classElement: fragment.element,
           implementsClause: declaration.implementsClause,
@@ -89,10 +91,11 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
-          classNameToken: declaration.name,
+          node: declaration,
+          classNameToken: declaration.namePart.typeName,
           classElement: fragment.element,
           implementsClause: declaration.implementsClause,
-          members: declaration.members,
+          members: declaration.body.members,
           withClause: declaration.withClause,
         );
         if (fragment.isAugmentation) {
@@ -108,10 +111,11 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
+          node: declaration,
           classNameToken: declaration.name,
           classElement: fragment.element,
           implementsClause: declaration.implementsClause,
-          members: declaration.members,
+          members: declaration.body.members,
           onClause: declaration.onClause,
         );
         if (fragment.isAugmentation) {
@@ -133,17 +137,15 @@
   /// Returns [ExecutableElement] members that are in the interface of the
   /// given class with `@mustBeOverridden`, but don't have implementations.
   static List<ExecutableElement> missingMustBeOverridden(
-    NamedCompilationUnitMember node,
+    CompilationUnitMember node,
   ) {
-    return _missingMustBeOverridden[node.name] ?? const [];
+    return _missingMustBeOverridden[node] ?? const [];
   }
 
   /// Returns [ExecutableElement] members that are in the interface of the
   /// given class, but don't have concrete implementations.
-  static List<ExecutableElement> missingOverrides(
-    NamedCompilationUnitMember node,
-  ) {
-    return _missingOverrides[node.name] ?? const [];
+  static List<ExecutableElement> missingOverrides(CompilationUnitMember node) {
+    return _missingOverrides[node] ?? const [];
   }
 }
 
@@ -158,6 +160,7 @@
   final Uri libraryUri;
   final InterfaceElementImpl classElement;
 
+  final CompilationUnitMember node;
   final Token classNameToken;
   final List<ClassMember> members;
   final ImplementsClause? implementsClause;
@@ -178,6 +181,7 @@
     required this.reporter,
     required this.featureSet,
     required this.library,
+    required this.node,
     required this.classNameToken,
     required this.classElement,
     this.implementsClause,
@@ -199,10 +203,7 @@
         element is ClassElementImpl &&
         !element.isAbstract &&
         implementsDartCoreEnum) {
-      reporter.atToken(
-        classNameToken,
-        CompileTimeErrorCode.concreteClassHasEnumSuperinterface,
-      );
+      reporter.atToken(classNameToken, diag.concreteClassHasEnumSuperinterface);
       return true;
     }
 
@@ -353,8 +354,8 @@
           diagnosticReporter: reporter,
           errorNode: classNameToken,
           diagnosticCode: concreteElement is InternalSetterElement
-              ? CompileTimeErrorCode.invalidImplementationOverrideSetter
-              : CompileTimeErrorCode.invalidImplementationOverride,
+              ? diag.invalidImplementationOverrideSetter
+              : diag.invalidImplementationOverride,
         );
       }
 
@@ -406,8 +407,8 @@
         diagnosticReporter: reporter,
         errorNode: node,
         diagnosticCode: member is SetterElement
-            ? CompileTimeErrorCode.invalidOverrideSetter
-            : CompileTimeErrorCode.invalidOverride,
+            ? diag.invalidOverrideSetter
+            : diag.invalidOverride,
       );
     }
 
@@ -489,10 +490,7 @@
     return _checkDirectSuperType(
       type: type,
       hasEnum: () {
-        reporter.atNode(
-          namedType,
-          CompileTimeErrorCode.concreteClassHasEnumSuperinterface,
-        );
+        reporter.atNode(namedType, diag.concreteClassHasEnumSuperinterface);
       },
       notSubtypable: () {
         reporter.atNode(namedType, diagnosticCode, arguments: [type]);
@@ -509,7 +507,7 @@
       for (var namedType in implementsClause!.interfaces) {
         if (_checkDirectSuperTypeNode(
           namedType,
-          CompileTimeErrorCode.implementsDisallowedClass,
+          diag.implementsDisallowedClass,
         )) {
           hasError = true;
         }
@@ -519,26 +517,20 @@
       for (var namedType in onClause!.superclassConstraints) {
         if (_checkDirectSuperTypeNode(
           namedType,
-          CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
+          diag.mixinSuperClassConstraintDisallowedClass,
         )) {
           hasError = true;
         }
       }
     }
     if (superclass != null) {
-      if (_checkDirectSuperTypeNode(
-        superclass!,
-        CompileTimeErrorCode.extendsDisallowedClass,
-      )) {
+      if (_checkDirectSuperTypeNode(superclass!, diag.extendsDisallowedClass)) {
         hasError = true;
       }
     }
     if (withClause != null) {
       for (var namedType in withClause!.mixinTypes) {
-        if (_checkDirectSuperTypeNode(
-          namedType,
-          CompileTimeErrorCode.mixinOfDisallowedClass,
-        )) {
+        if (_checkDirectSuperTypeNode(namedType, diag.mixinOfDisallowedClass)) {
           hasError = true;
         }
         if (classElement is EnumElementImpl && _checkMixinOfEnum(namedType)) {
@@ -552,11 +544,11 @@
 
   /// Check that [classElement] is not a superinterface to itself.
   ///
-  /// See [CompileTimeErrorCode.recursiveInterfaceInheritance],
-  /// [CompileTimeErrorCode.recursiveInterfaceInheritanceExtends],
-  /// [CompileTimeErrorCode.recursiveInterfaceInheritanceImplements],
-  /// [CompileTimeErrorCode.recursiveInterfaceInheritanceOn],
-  /// [CompileTimeErrorCode.recursiveInterfaceInheritanceWith].
+  /// See [diag.recursiveInterfaceInheritance],
+  /// [diag.recursiveInterfaceInheritanceExtends],
+  /// [diag.recursiveInterfaceInheritanceImplements],
+  /// [diag.recursiveInterfaceInheritanceOn],
+  /// [diag.recursiveInterfaceInheritanceWith].
   bool _checkForRecursiveInterfaceInheritance(InterfaceElementImpl element) {
     var cycle = element.interfaceCycle;
     if (cycle == null) {
@@ -567,7 +559,7 @@
       if (superclass.element == element) {
         reporter.atElement2(
           element,
-          CompileTimeErrorCode.recursiveInterfaceInheritanceExtends,
+          diag.recursiveInterfaceInheritanceExtends,
           arguments: [element.displayName],
         );
         return true;
@@ -579,7 +571,7 @@
         if (typeAnnotation.element == element) {
           reporter.atElement2(
             element,
-            CompileTimeErrorCode.recursiveInterfaceInheritanceOn,
+            diag.recursiveInterfaceInheritanceOn,
             arguments: [element.displayName],
           );
           return true;
@@ -592,7 +584,7 @@
         if (typeAnnotation.element == element) {
           reporter.atElement2(
             element,
-            CompileTimeErrorCode.recursiveInterfaceInheritanceWith,
+            diag.recursiveInterfaceInheritanceWith,
             arguments: [element.displayName],
           );
           return true;
@@ -605,7 +597,7 @@
         if (typeAnnotation.element == element) {
           reporter.atElement2(
             element,
-            CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
+            diag.recursiveInterfaceInheritanceImplements,
             arguments: [element.displayName],
           );
           return true;
@@ -615,7 +607,7 @@
 
     reporter.atElement2(
       classElement,
-      CompileTimeErrorCode.recursiveInterfaceInheritance,
+      diag.recursiveInterfaceInheritance,
       arguments: [
         element.displayName,
         cycle.map((e) => e.displayName).join(', '),
@@ -634,7 +626,7 @@
         if (const {'index', 'hashCode', '=='}.contains(name.lexeme)) {
           reporter.atToken(
             name,
-            CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration,
+            diag.illegalConcreteEnumMemberDeclaration,
             arguments: [name.lexeme],
           );
         }
@@ -664,7 +656,7 @@
             if (enclosingClass is! ClassElement || filter(enclosingClass)) {
               reporter.atToken(
                 classNameToken,
-                CompileTimeErrorCode.illegalConcreteEnumMemberInheritance,
+                diag.illegalConcreteEnumMemberInheritance,
                 arguments: [memberName, enclosingClass.name!],
               );
             }
@@ -680,7 +672,7 @@
 
   void _checkIllegalEnumValuesDeclaration(Token name) {
     if (implementsDartCoreEnum && name.lexeme == 'values') {
-      reporter.atToken(name, CompileTimeErrorCode.illegalEnumValuesDeclaration);
+      reporter.atToken(name, diag.illegalEnumValuesDeclaration);
     }
   }
 
@@ -698,7 +690,7 @@
       if (inherited != null) {
         reporter.atToken(
           classNameToken,
-          CompileTimeErrorCode.illegalEnumValuesInheritance,
+          diag.illegalEnumValuesInheritance,
           arguments: [inherited.enclosingElement!.name!],
         );
       }
@@ -717,14 +709,13 @@
       return false;
     }
 
-    if (interfaceElement.fields.every((e) => e.isStatic || e.isSynthetic)) {
+    if (interfaceElement.fields.every(
+      (e) => e.isStatic || e.isOriginGetterSetter,
+    )) {
       return false;
     }
 
-    reporter.atNode(
-      namedType,
-      CompileTimeErrorCode.enumMixinWithInstanceVariable,
-    );
+    reporter.atNode(namedType, diag.enumMixinWithInstanceVariable);
     return true;
   }
 
@@ -753,8 +744,8 @@
         reporter.atNode(
           member,
           classElement is EnumElement
-              ? CompileTimeErrorCode.enumWithAbstractMember
-              : CompileTimeErrorCode.concreteClassWithAbstractMember,
+              ? diag.enumWithAbstractMember
+              : diag.concreteClassWithAbstractMember,
           arguments: [displayName, classElement.name ?? ''],
         );
         return true;
@@ -794,7 +785,7 @@
       // `conflict.method.enclosingElement.name` are both non-`null`.
       reporter.atToken(
         token,
-        CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
+        diag.inconsistentInheritanceGetterAndMethod,
         arguments: [
           name.name,
           conflict.getter.enclosingElement!.name!,
@@ -812,7 +803,7 @@
 
       reporter.atToken(
         token,
-        CompileTimeErrorCode.inconsistentInheritance,
+        diag.inconsistentInheritance,
         arguments: [name.name, candidatesStr],
       );
     } else {
@@ -827,7 +818,7 @@
       return;
     }
 
-    _missingOverrides[classNameToken] = elements;
+    _missingOverrides[node] = elements;
 
     var descriptions = <String>[];
     for (var element in elements) {
@@ -849,25 +840,25 @@
     if (descriptions.length == 1) {
       reporter.atToken(
         classNameToken,
-        CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
+        diag.nonAbstractClassInheritsAbstractMemberOne,
         arguments: [descriptions[0]],
       );
     } else if (descriptions.length == 2) {
       reporter.atToken(
         classNameToken,
-        CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
+        diag.nonAbstractClassInheritsAbstractMemberTwo,
         arguments: [descriptions[0], descriptions[1]],
       );
     } else if (descriptions.length == 3) {
       reporter.atToken(
         classNameToken,
-        CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberThree,
+        diag.nonAbstractClassInheritsAbstractMemberThree,
         arguments: [descriptions[0], descriptions[1], descriptions[2]],
       );
     } else if (descriptions.length == 4) {
       reporter.atToken(
         classNameToken,
-        CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFour,
+        diag.nonAbstractClassInheritsAbstractMemberFour,
         arguments: [
           descriptions[0],
           descriptions[1],
@@ -878,7 +869,7 @@
     } else {
       reporter.atToken(
         classNameToken,
-        CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFivePlus,
+        diag.nonAbstractClassInheritsAbstractMemberFivePlus,
         arguments: [
           descriptions[0],
           descriptions[1],
@@ -898,7 +889,7 @@
           TopLevelInferenceErrorKind.overrideNoCombinedSuperSignature) {
         reporter.atToken(
           node.name,
-          CompileTimeErrorCode.noCombinedSuperSignature,
+          diag.noCombinedSuperSignature,
           arguments: [classElement.name ?? '', inferenceError!.arguments[0]],
         );
         return true;
@@ -940,7 +931,7 @@
           continue;
         }
         if (method.metadata.hasMustBeOverridden) {
-          var methodDeclaration = classElement.getMethod(method.name!);
+          var methodDeclaration = classElement.getMethod(method.lookupName!);
           if (methodDeclaration == null || methodDeclaration.isAbstract) {
             notOverridden.add(method.baseElement);
           }
@@ -981,7 +972,7 @@
       return;
     }
 
-    _missingMustBeOverridden[classNameToken] = notOverridden.toList();
+    _missingMustBeOverridden[node] = notOverridden.toList();
     var namesForError = notOverridden
         .map((e) {
           var name = e.name!;
@@ -996,19 +987,19 @@
     if (namesForError.length == 1) {
       reporter.atToken(
         classNameToken,
-        WarningCode.missingOverrideOfMustBeOverriddenOne,
+        diag.missingOverrideOfMustBeOverriddenOne,
         arguments: namesForError,
       );
     } else if (namesForError.length == 2) {
       reporter.atToken(
         classNameToken,
-        WarningCode.missingOverrideOfMustBeOverriddenTwo,
+        diag.missingOverrideOfMustBeOverriddenTwo,
         arguments: namesForError,
       );
     } else {
       reporter.atToken(
         classNameToken,
-        WarningCode.missingOverrideOfMustBeOverriddenThreePlus,
+        diag.missingOverrideOfMustBeOverriddenThreePlus,
         arguments: [
           namesForError[0],
           namesForError[1],
diff --git a/pkg/analyzer/lib/src/error/language_version_override_verifier.dart b/pkg/analyzer/lib/src/error/language_version_override_verifier.dart
index 0cdf309..0848aee 100644
--- a/pkg/analyzer/lib/src/error/language_version_override_verifier.dart
+++ b/pkg/analyzer/lib/src/error/language_version_override_verifier.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Finds invalid, or misplaced language override comments.
 class LanguageVersionOverrideVerifier {
@@ -189,7 +189,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.invalidLanguageVersionOverrideTwoSlashes,
+        diagnosticCode: diag.invalidLanguageVersionOverrideTwoSlashes,
       );
       return false;
     }
@@ -198,7 +198,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.invalidLanguageVersionOverrideAtSign,
+        diagnosticCode: diag.invalidLanguageVersionOverrideAtSign,
       );
       return false;
     }
@@ -208,7 +208,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.invalidLanguageVersionOverrideLowerCase,
+        diagnosticCode: diag.invalidLanguageVersionOverrideLowerCase,
       );
       return false;
     }
@@ -220,7 +220,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.invalidLanguageVersionOverrideEquals,
+        diagnosticCode: diag.invalidLanguageVersionOverrideEquals,
       );
       return false;
     }
@@ -229,7 +229,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.invalidLanguageVersionOverridePrefix,
+        diagnosticCode: diag.invalidLanguageVersionOverridePrefix,
       );
       return false;
     }
@@ -238,7 +238,7 @@
       _diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.invalidLanguageVersionOverrideNumber,
+        diagnosticCode: diag.invalidLanguageVersionOverrideNumber,
       );
     }
 
@@ -274,8 +274,7 @@
     _diagnosticReporter.atOffset(
       offset: offset,
       length: length,
-      diagnosticCode:
-          WarningCode.invalidLanguageVersionOverrideTrailingCharacters,
+      diagnosticCode: diag.invalidLanguageVersionOverrideTrailingCharacters,
     );
     return false;
   }
@@ -304,8 +303,7 @@
             _diagnosticReporter.atOffset(
               offset: commentToken.offset + atDartStart,
               length: match.end - atDartStart,
-              diagnosticCode:
-                  WarningCode.invalidLanguageVersionOverrideLocation,
+              diagnosticCode: diag.invalidLanguageVersionOverrideLocation,
             );
           }
         }
diff --git a/pkg/analyzer/lib/src/error/listener.dart b/pkg/analyzer/lib/src/error/listener.dart
index fe8fe8b..bad503c 100644
--- a/pkg/analyzer/lib/src/error/listener.dart
+++ b/pkg/analyzer/lib/src/error/listener.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/source.dart';
+import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
@@ -144,8 +145,7 @@
 @AnalyzerPublicApi(message: 'Exported by package:analyzer/error/listener.dart')
 class DiagnosticReporter {
   /// The diagnostic listener to which diagnostics are reported.
-  // ignore: deprecated_member_use_from_same_package
-  final DiagnosticOrErrorListener _diagnosticListener;
+  final DiagnosticListener _diagnosticListener;
 
   /// The source to be used when reporting diagnostics.
   final Source _source;
@@ -180,17 +180,14 @@
     // TODO(brianwilkerson): Consider extending this method to take any
     //  declaration and compute the correct range for the name of that
     //  declaration. This might make it easier to be consistent.
-    if (node.name case var nameToken?) {
-      var offset = node.returnType.offset;
-      return atOffset(
-        offset: offset,
-        length: nameToken.end - offset,
-        diagnosticCode: diagnosticCode,
-        arguments: arguments,
-      );
-    } else {
-      return atNode(node.returnType, diagnosticCode, arguments: arguments);
-    }
+    var range = node.errorRange;
+    return atOffset(
+      offset: range.offset,
+      length: range.length,
+      diagnosticCode: diagnosticCode,
+      arguments: arguments,
+      contextMessages: contextMessages,
+    );
   }
 
   /// Reports a diagnostic with the given [diagnosticCode] and [arguments].
diff --git a/pkg/analyzer/lib/src/error/literal_element_verifier.dart b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
index 3388b62..d5f04ae 100644
--- a/pkg/analyzer/lib/src/error/literal_element_verifier.dart
+++ b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
@@ -10,7 +10,7 @@
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/error_verifier.dart';
 
 /// Verifier for [CollectionElement]s in list, set, or map literals.
@@ -69,13 +69,13 @@
         assignableWhenNullable: assignableWhenNullable,
       )) {
         (forList: false, assignableWhenNullable: false) =>
-          CompileTimeErrorCode.setElementTypeNotAssignable,
+          diag.setElementTypeNotAssignable,
         (forList: false, assignableWhenNullable: true) =>
-          CompileTimeErrorCode.setElementTypeNotAssignableNullability,
+          diag.setElementTypeNotAssignableNullability,
         (forList: true, assignableWhenNullable: false) =>
-          CompileTimeErrorCode.listElementTypeNotAssignable,
+          diag.listElementTypeNotAssignable,
         (forList: true, assignableWhenNullable: true) =>
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
+          diag.listElementTypeNotAssignableNullability,
       };
       _diagnosticReporter.atNode(
         errorNode,
@@ -97,10 +97,7 @@
           }
           _checkAssignableToElementType(element.typeOrThrow, element);
         } else {
-          _diagnosticReporter.atNode(
-            element,
-            CompileTimeErrorCode.expressionInMap,
-          );
+          _diagnosticReporter.atNode(element, diag.expressionInMap);
         }
       case ForElementImpl():
         _verifyElement(element.body);
@@ -111,10 +108,7 @@
         if (forMap) {
           _verifyMapLiteralEntry(element);
         } else {
-          _diagnosticReporter.atNode(
-            element,
-            CompileTimeErrorCode.mapEntryNotInMap,
-          );
+          _diagnosticReporter.atNode(element, diag.mapEntryNotInMap);
         }
       case SpreadElementImpl():
         var isNullAware = element.isNullAware;
@@ -135,10 +129,7 @@
             element,
           );
         } else {
-          _diagnosticReporter.atNode(
-            element,
-            CompileTimeErrorCode.expressionInMap,
-          );
+          _diagnosticReporter.atNode(element, diag.expressionInMap);
         }
       case null:
         break;
@@ -179,13 +170,13 @@
           )) {
         _diagnosticReporter.atNode(
           entry.key,
-          CompileTimeErrorCode.mapKeyTypeNotAssignableNullability,
+          diag.mapKeyTypeNotAssignableNullability,
           arguments: [keyType, mapKeyType],
         );
       } else {
         _diagnosticReporter.atNode(
           entry.key,
-          CompileTimeErrorCode.mapKeyTypeNotAssignable,
+          diag.mapKeyTypeNotAssignable,
           arguments: [keyType, mapKeyType],
         );
       }
@@ -210,13 +201,13 @@
           )) {
         _diagnosticReporter.atNode(
           entry.value,
-          CompileTimeErrorCode.mapValueTypeNotAssignableNullability,
+          diag.mapValueTypeNotAssignableNullability,
           arguments: [valueType, mapValueType],
         );
       } else {
         _diagnosticReporter.atNode(
           entry.value,
-          CompileTimeErrorCode.mapValueTypeNotAssignable,
+          diag.mapValueTypeNotAssignable,
           arguments: [valueType, mapValueType],
         );
       }
@@ -229,10 +220,7 @@
     var expressionType = expression.typeOrThrow;
     if (expressionType is DynamicType) {
       if (_errorVerifier.strictCasts) {
-        _diagnosticReporter.atNode(
-          expression,
-          CompileTimeErrorCode.notIterableSpread,
-        );
+        _diagnosticReporter.atNode(expression, diag.notIterableSpread);
       }
       return;
     }
@@ -245,10 +233,7 @@
       if (isNullAware) {
         return;
       }
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.notNullAwareNullSpread,
-      );
+      _diagnosticReporter.atNode(expression, diag.notNullAwareNullSpread);
       return;
     }
 
@@ -257,10 +242,7 @@
     );
 
     if (iterableType == null) {
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.notIterableSpread,
-      );
+      _diagnosticReporter.atNode(expression, diag.notIterableSpread);
       return;
     }
 
@@ -272,8 +254,8 @@
       strictCasts: _strictCasts,
     )) {
       var errorCode = forList
-          ? CompileTimeErrorCode.listElementTypeNotAssignable
-          : CompileTimeErrorCode.setElementTypeNotAssignable;
+          ? diag.listElementTypeNotAssignable
+          : diag.setElementTypeNotAssignable;
       // Also check for an "implicit tear-off conversion" which would be applied
       // after desugaring a spread element.
       var implicitCallMethod = _errorVerifier.getImplicitCallMethod(
@@ -331,10 +313,7 @@
     var expressionType = expression.typeOrThrow;
     if (expressionType is DynamicType) {
       if (_errorVerifier.strictCasts) {
-        _diagnosticReporter.atNode(
-          expression,
-          CompileTimeErrorCode.notMapSpread,
-        );
+        _diagnosticReporter.atNode(expression, diag.notMapSpread);
       }
       return;
     }
@@ -347,17 +326,14 @@
       if (isNullAware) {
         return;
       }
-      _diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.notNullAwareNullSpread,
-      );
+      _diagnosticReporter.atNode(expression, diag.notNullAwareNullSpread);
       return;
     }
 
     var mapType = expressionType.asInstanceOf(typeProvider.mapElement);
 
     if (mapType == null) {
-      _diagnosticReporter.atNode(expression, CompileTimeErrorCode.notMapSpread);
+      _diagnosticReporter.atNode(expression, diag.notMapSpread);
       return;
     }
 
@@ -370,7 +346,7 @@
     )) {
       _diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.mapKeyTypeNotAssignable,
+        diag.mapKeyTypeNotAssignable,
         arguments: [keyType, mapKeyType],
       );
     }
@@ -384,7 +360,7 @@
     )) {
       _diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.mapValueTypeNotAssignable,
+        diag.mapValueTypeNotAssignable,
         arguments: [valueType, mapValueType],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
index a435da5..7dbd7e3 100644
--- a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
+++ b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 class MustCallSuperVerifier {
   final DiagnosticReporter _diagnosticReporter;
@@ -186,7 +186,7 @@
       // safe to assume [overriddenEnclosingName] is non-`null`.
       _diagnosticReporter.atToken(
         node.name,
-        WarningCode.mustCallSuper,
+        diag.mustCallSuper,
         arguments: [overriddenEnclosingName!],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart b/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart
index c6aeef6..31e43d7 100644
--- a/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart
+++ b/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Verifies usages of `Future.value` and `Completer.complete` when null-safety
 /// is enabled.
@@ -83,7 +83,7 @@
     if (argumentIsNull) {
       _diagnosticReporter.atNode(
         argument ?? node,
-        WarningCode.nullArgumentToNonNullType,
+        diag.nullArgumentToNonNullType,
         arguments: [memberName, type.getDisplayString()],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart b/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
index 0003493..0445df0 100644
--- a/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
+++ b/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 
 /// Helper for checking potentially nullable dereferences.
@@ -47,7 +47,7 @@
     List<DiagnosticMessage>? messages,
   }) {
     if (receiverType == _typeSystem.typeProvider.nullType) {
-      diagnosticCode = CompileTimeErrorCode.invalidUseOfNullValue;
+      diagnosticCode = diag.invalidUseOfNullValue;
       arguments = [];
     }
     if (errorEntity is AstNode) {
diff --git a/pkg/analyzer/lib/src/error/override_verifier.dart b/pkg/analyzer/lib/src/error/override_verifier.dart
index 5604031..d4859c6 100644
--- a/pkg/analyzer/lib/src/error/override_verifier.dart
+++ b/pkg/analyzer/lib/src/error/override_verifier.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Instances of the class `OverrideVerifier` visit all of the declarations in a
 /// compilation unit to verify that if they have an override annotation it is
@@ -45,10 +45,7 @@
         var setter = fieldElement.setter;
         if (setter != null && _isOverride(setter)) continue;
 
-        _errorReporter.atToken(
-          field.name,
-          WarningCode.overrideOnNonOverridingField,
-        );
+        _errorReporter.atToken(field.name, diag.overrideOnNonOverridingField);
       }
     }
   }
@@ -59,20 +56,11 @@
     if (element.metadata.hasOverride && !_isOverride(element)) {
       switch (element) {
         case MethodElement():
-          _errorReporter.atToken(
-            node.name,
-            WarningCode.overrideOnNonOverridingMethod,
-          );
+          _errorReporter.atToken(node.name, diag.overrideOnNonOverridingMethod);
         case GetterElement():
-          _errorReporter.atToken(
-            node.name,
-            WarningCode.overrideOnNonOverridingGetter,
-          );
+          _errorReporter.atToken(node.name, diag.overrideOnNonOverridingGetter);
         case SetterElement():
-          _errorReporter.atToken(
-            node.name,
-            WarningCode.overrideOnNonOverridingSetter,
-          );
+          _errorReporter.atToken(node.name, diag.overrideOnNonOverridingSetter);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/error/redeclare_verifier.dart b/pkg/analyzer/lib/src/error/redeclare_verifier.dart
index a3022fa..afba928 100644
--- a/pkg/analyzer/lib/src/error/redeclare_verifier.dart
+++ b/pkg/analyzer/lib/src/error/redeclare_verifier.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Instances of the class `RedeclareVerifier` visit all of the members of any
 /// extension type declarations in a compilation unit to verify that if they
@@ -42,19 +42,19 @@
         case MethodElement():
           _errorReporter.atToken(
             node.name,
-            WarningCode.redeclareOnNonRedeclaringMember,
+            diag.redeclareOnNonRedeclaringMember,
             arguments: ['method'],
           );
         case GetterElement():
           _errorReporter.atToken(
             node.name,
-            WarningCode.redeclareOnNonRedeclaringMember,
+            diag.redeclareOnNonRedeclaringMember,
             arguments: ['getter'],
           );
         case SetterElement():
           _errorReporter.atToken(
             node.name,
-            WarningCode.redeclareOnNonRedeclaringMember,
+            diag.redeclareOnNonRedeclaringMember,
             arguments: ['setter'],
           );
       }
diff --git a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
index 216a0f1..0adcc32 100644
--- a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
+++ b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:collection/collection.dart';
 
 /// Checks for missing arguments for required named parameters.
@@ -161,7 +161,7 @@
           );
           _errorReporter.atEntity(
             errorEntity,
-            CompileTimeErrorCode.missingRequiredArgument,
+            diag.missingRequiredArgument,
             arguments: [parameterName],
           );
         }
@@ -179,13 +179,13 @@
             if (reason != null) {
               _errorReporter.atEntity(
                 errorEntity,
-                WarningCode.missingRequiredParamWithDetails,
+                diag.missingRequiredParamWithDetails,
                 arguments: [parameterName, reason],
               );
             } else {
               _errorReporter.atEntity(
                 errorEntity,
-                WarningCode.missingRequiredParam,
+                diag.missingRequiredParam,
                 arguments: [parameterName],
               );
             }
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index db4fb42..c70d335 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -12,7 +12,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/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/error_verifier.dart';
 
 class ReturnTypeVerifier {
@@ -58,7 +58,7 @@
       if (expression != null) {
         _diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.returnInGenerativeConstructor,
+          diag.returnInGenerativeConstructor,
         );
       }
       return;
@@ -107,18 +107,15 @@
       if (enclosingExecutable.isGenerator) {
         checkElement(
           _typeProvider.streamElement,
-          CompileTimeErrorCode.illegalAsyncGeneratorReturnType,
+          diag.illegalAsyncGeneratorReturnType,
         );
       } else {
-        checkElement(
-          _typeProvider.futureElement,
-          CompileTimeErrorCode.illegalAsyncReturnType,
-        );
+        checkElement(_typeProvider.futureElement, diag.illegalAsyncReturnType);
       }
     } else if (enclosingExecutable.isGenerator) {
       checkElement(
         _typeProvider.iterableElement,
-        CompileTimeErrorCode.illegalSyncGeneratorReturnType,
+        diag.illegalSyncGeneratorReturnType,
       );
     }
   }
@@ -149,13 +146,13 @@
       if (enclosingExecutable.catchErrorOnErrorReturnType != null) {
         _diagnosticReporter.atNode(
           expression,
-          WarningCode.returnOfInvalidTypeFromCatchError,
+          diag.returnOfInvalidTypeFromCatchError,
           arguments: [S, T],
         );
       } else if (enclosingExecutable.isClosure) {
         _diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.returnOfInvalidTypeFromClosure,
+          diag.returnOfInvalidTypeFromClosure,
           arguments: [S, T],
         );
       } else if (enclosingExecutable.isConstructor) {
@@ -165,7 +162,7 @@
         // `enclosingExecutable.displayName` is non-`null`.
         _diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.returnOfInvalidTypeFromConstructor,
+          diag.returnOfInvalidTypeFromConstructor,
           arguments: [S, T, enclosingExecutable.displayName!],
         );
       } else if (enclosingExecutable.isFunction) {
@@ -175,7 +172,7 @@
         // `enclosingExecutable.displayName` is non-`null`.
         _diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.returnOfInvalidTypeFromFunction,
+          diag.returnOfInvalidTypeFromFunction,
           arguments: [S, T, enclosingExecutable.displayName!],
         );
       } else if (enclosingExecutable.isMethod) {
@@ -185,7 +182,7 @@
         // `enclosingExecutable.displayName` is non-`null`.
         _diagnosticReporter.atNode(
           expression,
-          CompileTimeErrorCode.returnOfInvalidTypeFromMethod,
+          diag.returnOfInvalidTypeFromMethod,
           arguments: [S, T, enclosingExecutable.displayName!],
         );
       }
@@ -223,8 +220,7 @@
           )) {
             _diagnosticReporter.atNode(
               expression,
-              CompileTimeErrorCode
-                  .recordLiteralOnePositionalNoTrailingCommaByType,
+              diag.recordLiteralOnePositionalNoTrailingCommaByType,
             );
             return;
           }
@@ -287,7 +283,7 @@
 
     _diagnosticReporter.atToken(
       statement.returnKeyword,
-      CompileTimeErrorCode.returnWithoutValue,
+      diag.returnWithoutValue,
     );
   }
 
diff --git a/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart b/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart
index c50b02f..01dde0d 100644
--- a/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart
+++ b/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart
@@ -5,7 +5,7 @@
 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/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 VerifySuperFormalParametersResult verifySuperFormalParameters({
   required ConstructorDeclaration constructor,
@@ -27,8 +27,7 @@
         if (hasExplicitPositionalArguments) {
           diagnosticReporter?.atToken(
             parameter.name,
-            CompileTimeErrorCode
-                .positionalSuperFormalParameterWithPositionalArgument,
+            diag.positionalSuperFormalParameterWithPositionalArgument,
           );
         }
       }
diff --git a/pkg/analyzer/lib/src/error/todo_finder.dart b/pkg/analyzer/lib/src/error/todo_finder.dart
index e964cee..3523ca2 100644
--- a/pkg/analyzer/lib/src/error/todo_finder.dart
+++ b/pkg/analyzer/lib/src/error/todo_finder.dart
@@ -42,7 +42,7 @@
   ///
   /// @param token the head of the list of tokens being searched
   void _gatherTodoComments(Token? token, LineInfo lineInfo) {
-    while (token != null && !token.isEof) {
+    while (token != null && (!token.isEof || token.precedingComments != null)) {
       Token? commentToken = token.precedingComments;
       while (commentToken != null) {
         if (commentToken.type == TokenType.SINGLE_LINE_COMMENT ||
@@ -52,6 +52,9 @@
           commentToken = commentToken.next;
         }
       }
+      if (token.next == token) {
+        break;
+      }
       token = token.next;
     }
   }
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index 0436da9..223fa57 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -17,8 +17,8 @@
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
-import 'package:analyzer/src/error/codes.dart';
 
 class TypeArgumentsVerifier {
   final AnalysisOptions _options;
@@ -93,7 +93,7 @@
             : node;
         _diagnosticReporter.atNode(
           errorNode,
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           arguments: [typeArgument, typeParameter.name!, bound],
         );
       }
@@ -122,7 +122,7 @@
         typeArgumentNodes.length != typeParameters.length) {
       _diagnosticReporter.atNode(
         typeArgumentList,
-        CompileTimeErrorCode.wrongNumberOfTypeArgumentsEnum,
+        diag.wrongNumberOfTypeArgumentsEnum,
         arguments: [typeParameters.length, typeArgumentNodes.length],
       );
     }
@@ -149,7 +149,7 @@
         var errorTarget = typeArgumentNodes?[i] ?? node.name;
         _diagnosticReporter.atEntity(
           errorTarget,
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           arguments: [typeArgument, typeParameter.name!, bound],
         );
       }
@@ -185,14 +185,14 @@
         for (var argument in typeArguments.arguments) {
           _checkTypeArgumentConst(
             argument,
-            CompileTimeErrorCode.invalidTypeArgumentInConstList,
+            diag.invalidTypeArgumentInConstList,
           );
         }
       }
       _checkTypeArgumentCount(
         typeArguments,
         1,
-        CompileTimeErrorCode.expectedOneListTypeArguments,
+        diag.expectedOneListTypeArguments,
       );
     }
   }
@@ -202,16 +202,13 @@
     if (typeArguments != null) {
       if (node.isConst) {
         for (var argument in typeArguments.arguments) {
-          _checkTypeArgumentConst(
-            argument,
-            CompileTimeErrorCode.invalidTypeArgumentInConstMap,
-          );
+          _checkTypeArgumentConst(argument, diag.invalidTypeArgumentInConstMap);
         }
       }
       _checkTypeArgumentCount(
         typeArguments,
         2,
-        CompileTimeErrorCode.expectedTwoMapTypeArguments,
+        diag.expectedTwoMapTypeArguments,
       );
     }
   }
@@ -238,16 +235,13 @@
     if (typeArguments != null) {
       if (node.isConst) {
         for (var argument in typeArguments.arguments) {
-          _checkTypeArgumentConst(
-            argument,
-            CompileTimeErrorCode.invalidTypeArgumentInConstSet,
-          );
+          _checkTypeArgumentConst(argument, diag.invalidTypeArgumentInConstSet);
         }
       }
       _checkTypeArgumentCount(
         typeArguments,
         1,
-        CompileTimeErrorCode.expectedOneSetTypeArguments,
+        diag.expectedOneSetTypeArguments,
       );
     }
   }
@@ -257,7 +251,7 @@
   ///
   /// This checks if [node] refers to a generic type and does not have explicit
   /// or inferred type arguments. When that happens, it reports error code
-  /// [WarningCode.strictRawType].
+  /// [diag.strictRawType].
   void _checkForRawTypeName(NamedType node) {
     AstNode parentEscapingTypeArguments(NamedType node) {
       var parent = node.parent!;
@@ -286,11 +280,7 @@
         // Do not report a "Strict raw type" error in this case; too noisy.
         // See https://github.com/dart-lang/language/blob/master/resources/type-system/strict-raw-types.md#conditions-for-a-raw-type-hint
       } else {
-        _diagnosticReporter.atNode(
-          node,
-          WarningCode.strictRawType,
-          arguments: [type],
-        );
+        _diagnosticReporter.atNode(node, diag.strictRawType, arguments: [type]);
       }
     }
   }
@@ -344,7 +334,7 @@
         if (!_libraryElement.featureSet.isEnabled(Feature.generic_metadata)) {
           _diagnosticReporter.atNode(
             _typeArgumentErrorNode(namedType, i),
-            CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
+            diag.genericFunctionTypeCannotBeTypeArgument,
           );
           continue;
         }
@@ -422,7 +412,7 @@
       for (var issue in issues) {
         _diagnosticReporter.atNode(
           _typeArgumentErrorNode(namedType, issue.index),
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           arguments: [
             issue.argument,
             issue.parameterName,
@@ -470,7 +460,7 @@
       if (!_typeSystem.isSubtypeOf(typeArgument, bound)) {
         _diagnosticReporter.atNode(
           _typeArgumentErrorNode(namedType, i),
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           arguments: [typeArgument, typeParameterName, bound],
           contextMessages: buildContextMessages(
             invertedTypeArguments: invertedTypeArguments,
@@ -520,7 +510,7 @@
         if (!_libraryElement.featureSet.isEnabled(Feature.generic_metadata)) {
           _diagnosticReporter.atNode(
             typeArgumentList[i],
-            CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
+            diag.genericFunctionTypeCannotBeTypeArgument,
           );
           continue;
         }
@@ -542,7 +532,7 @@
       if (!_typeSystem.isSubtypeOf(argType, bound)) {
         _diagnosticReporter.atNode(
           typeArgumentList[i],
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           arguments: [argType, fnTypeParamName, bound],
         );
       }
@@ -552,9 +542,9 @@
   /// Checks whether the given [typeAnnotation] contains a type parameter.
   ///
   /// The [errorCode] is either
-  /// [CompileTimeErrorCode.invalidTypeArgumentInConstList],
-  /// [CompileTimeErrorCode.invalidTypeArgumentInConstMap], or
-  /// [CompileTimeErrorCode.invalidTypeArgumentInConstSet].
+  /// [diag.invalidTypeArgumentInConstList],
+  /// [diag.invalidTypeArgumentInConstMap], or
+  /// [diag.invalidTypeArgumentInConstSet].
   void _checkTypeArgumentConst(
     TypeAnnotation typeAnnotation,
     DiagnosticCode errorCode,
diff --git a/pkg/analyzer/lib/src/error/unicode_text_verifier.dart b/pkg/analyzer/lib/src/error/unicode_text_verifier.dart
index dd225f88..b4b3ebb 100644
--- a/pkg/analyzer/lib/src/error/unicode_text_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unicode_text_verifier.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// A verifier that checks for unsafe Unicode text.
 /// See: https://nvd.nist.gov/vuln/detail/CVE-2021-22567
@@ -25,8 +25,8 @@
         // (where Unicode is outside a string or comment).
         var errorCode =
             node is SimpleStringLiteral || node is InterpolationString
-            ? WarningCode.textDirectionCodePointInLiteral
-            : WarningCode.textDirectionCodePointInComment;
+            ? diag.textDirectionCodePointInLiteral
+            : diag.textDirectionCodePointInComment;
         var code = codeUnit.toRadixString(16).toUpperCase();
         _diagnosticReporter.atOffset(
           offset: offset,
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 be879c2..2169678 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -20,7 +20,7 @@
 import 'package:analyzer/src/dart/element/member.dart'
     show SubstitutedExecutableElementImpl;
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/utilities/extensions/object.dart';
 import 'package:collection/collection.dart';
 
@@ -110,6 +110,14 @@
       }
     }
 
+    for (var parameter in node.parameters.parameters) {
+      if (parameter is SuperFormalParameter) {
+        usedElements.addElement(
+          parameter.declaredFragment!.element.superConstructorParameter,
+        );
+      }
+    }
+
     super.visitConstructorDeclaration(node);
   }
 
@@ -274,7 +282,7 @@
     if (element is PropertyAccessorElement &&
         isIdentifierRead &&
         variable is TopLevelVariableElement) {
-      if (element.isSynthetic) {
+      if (element.isOriginVariable) {
         usedElements.addElement(variable);
       } else {
         usedElements.members.add(element);
@@ -489,9 +497,9 @@
 }
 
 /// Instances of the class [UnusedLocalElementsVerifier] traverse an AST
-/// looking for cases of [WarningCode.unusedElement],
-/// [WarningCode.unusedField],
-/// [WarningCode.unusedLocalVariable], etc.
+/// looking for cases of [diag.unusedElement],
+/// [diag.unusedField],
+/// [diag.unusedLocalVariable], etc.
 class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
   /// The error listener to which errors will be reported.
   final DiagnosticListener _diagnosticListener;
@@ -604,11 +612,9 @@
     for (var fragment in node.parameterFragments) {
       var element = fragment!.element;
       if (!_isUsedElement(element)) {
-        _reportDiagnosticForElement(
-          WarningCode.unusedElementParameter,
-          element,
-          [element.displayName],
-        );
+        _reportDiagnosticForElement(diag.unusedElementParameter, element, [
+          element.displayName,
+        ]);
       }
     }
     super.visitFormalParameterList(node);
@@ -696,7 +702,7 @@
         }
       }
       for (var element in elementsToReport) {
-        _reportDiagnosticForElement(WarningCode.unusedLocalVariable, element, [
+        _reportDiagnosticForElement(diag.unusedLocalVariable, element, [
           element.displayName,
         ]);
       }
@@ -1027,7 +1033,7 @@
 
   void _visitClassElement(InterfaceElement element) {
     if (!_isUsedElement(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1040,7 +1046,7 @@
     // purpose, the constructor is "used."
     if (element.enclosingElement.constructors.length > 1 &&
         !_isUsedMember(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1048,7 +1054,7 @@
 
   void _visitFieldElement(FieldElement element) {
     if (!_isReadMember(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedField, element, [
+      _reportDiagnosticForElement(diag.unusedField, element, [
         element.displayName,
       ]);
     }
@@ -1057,7 +1063,7 @@
   void _visitLocalFunctionElement(LocalFunctionElement element) {
     if (!_isUsedElement(element)) {
       if (_wildCardVariablesEnabled && _isNamedWildcard(element)) return;
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1067,11 +1073,11 @@
     if (!_isUsedElement(element) && !_isNamedWildcard(element)) {
       DiagnosticCode code;
       if (_usedElements.isCatchException(element)) {
-        code = WarningCode.unusedCatchClause;
+        code = diag.unusedCatchClause;
       } else if (_usedElements.isCatchStackTrace(element)) {
-        code = WarningCode.unusedCatchStack;
+        code = diag.unusedCatchStack;
       } else {
-        code = WarningCode.unusedLocalVariable;
+        code = diag.unusedLocalVariable;
       }
       _reportDiagnosticForElement(code, element, [element.displayName]);
     }
@@ -1079,7 +1085,7 @@
 
   void _visitMethodElement(MethodElement element) {
     if (!_isUsedMember(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1087,7 +1093,7 @@
 
   void _visitPropertyAccessorElement(PropertyAccessorElement element) {
     if (!_isUsedMember(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1095,7 +1101,7 @@
 
   void _visitTopLevelFunctionElement(TopLevelFunctionElement element) {
     if (!_isUsedElement(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1103,7 +1109,7 @@
 
   void _visitTopLevelVariableElement(TopLevelVariableElement element) {
     if (!_isUsedElement(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
@@ -1111,7 +1117,7 @@
 
   void _visitTypeAliasElement(TypeAliasElement element) {
     if (!_isUsedElement(element)) {
-      _reportDiagnosticForElement(WarningCode.unusedElement, element, [
+      _reportDiagnosticForElement(diag.unusedElement, element, [
         element.displayName,
       ]);
     }
diff --git a/pkg/analyzer/lib/src/error/use_result_verifier.dart b/pkg/analyzer/lib/src/error/use_result_verifier.dart
index a316f98..a8578a9 100644
--- a/pkg/analyzer/lib/src/error/use_result_verifier.dart
+++ b/pkg/analyzer/lib/src/error/use_result_verifier.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 class UseResultVerifier {
   final DiagnosticReporter _diagnosticReporter;
@@ -109,13 +109,13 @@
     if (message == null || message.isEmpty) {
       _diagnosticReporter.atNode(
         toAnnotate,
-        WarningCode.unusedResult,
+        diag.unusedResult,
         arguments: [displayName],
       );
     } else {
       _diagnosticReporter.atNode(
         toAnnotate,
-        WarningCode.unusedResultWithMessage,
+        diag.unusedResultWithMessage,
         arguments: [displayName, message],
       );
     }
diff --git a/pkg/analyzer/lib/src/error/widget_preview_verifier.dart b/pkg/analyzer/lib/src/error/widget_preview_verifier.dart
index 81653da..4801e85 100644
--- a/pkg/analyzer/lib/src/error/widget_preview_verifier.dart
+++ b/pkg/analyzer/lib/src/error/widget_preview_verifier.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/utilities/extensions/flutter.dart';
 
 /// Helper for verifying the validity of @Preview(...) applications.
@@ -66,7 +66,7 @@
     if (!isValidApplication) {
       _diagnosticReporter.atNode(
         node.name,
-        WarningCode.invalidWidgetPreviewApplication,
+        diag.invalidWidgetPreviewApplication,
       );
     }
 
@@ -86,7 +86,7 @@
     if (Identifier.isPrivateName(name?.lexeme ?? '')) {
       return true;
     }
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent == null) return false;
 
     return switch (parent) {
@@ -109,10 +109,17 @@
   /// Currently, this only includes previews defined within classes and at the
   /// top level of a compilation unit.
   bool _isSupportedParent({required AstNode node}) {
-    return switch (node.parent) {
-      ClassDeclaration() || CompilationUnit() => true,
-      _ => false,
-    };
+    if (node.parent is CompilationUnit) {
+      return true;
+    }
+
+    if (node.parent case BlockClassBody body) {
+      if (body.parent is ClassDeclaration) {
+        return true;
+      }
+    }
+
+    return false;
   }
 
   /// Returns true if `declaration` is a valid constructor target for a widget
@@ -127,20 +134,23 @@
   bool _isValidConstructorPreviewApplication({
     required ConstructorDeclaration declaration,
   }) {
-    if (declaration case ConstructorDeclaration(
-      :var name,
-      :var externalKeyword,
-      :var factoryKeyword,
-      parent: ClassDeclaration(declaredFragment: ClassFragment(:var element)),
-      parameters: FormalParameterList(:var parameters),
-    )) {
-      return !_isPrivateContext(name: name, node: declaration) &&
-          element.isWidget &&
-          !(element.isAbstract && factoryKeyword == null) &&
-          externalKeyword == null &&
-          !_hasRequiredParameters(parameters);
-    }
-    return false;
+    var parent = declaration.parent?.parent;
+    if (parent is! ClassDeclaration) return false;
+
+    var fragment = parent.declaredFragment;
+    if (fragment is! ClassFragment) return false;
+
+    var element = fragment.element;
+    var name = declaration.name;
+    var externalKeyword = declaration.externalKeyword;
+    var factoryKeyword = declaration.factoryKeyword;
+    var parameters = declaration.parameters;
+
+    return !_isPrivateContext(name: name, node: declaration) &&
+        element.isWidget &&
+        !(element.isAbstract && factoryKeyword == null) &&
+        externalKeyword == null &&
+        !_hasRequiredParameters(parameters.parameters);
   }
 
   /// Returns true if `declaration` is a valid top-level function target for a
@@ -232,7 +242,7 @@
     if (Identifier.isPrivateName(node.name)) {
       errorReporter.atNode(
         rootArgument!,
-        WarningCode.invalidWidgetPreviewPrivateArgument,
+        diag.invalidWidgetPreviewPrivateArgument,
         arguments: [node.name, node.name.replaceFirst(RegExp('_*'), '')],
       );
     }
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 9ecaebd..01b5ea8 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -55,7 +55,6 @@
 import 'package:_fe_analyzer_shared/src/scanner/token_constants.dart';
 import 'package:_fe_analyzer_shared/src/util/null_value.dart';
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
@@ -64,9 +63,9 @@
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/dart/scanner/translate_error_token.dart'
     show translateErrorToken;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/fasta/doc_comment_builder.dart';
 import 'package:analyzer/src/fasta/error_converter.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
@@ -342,6 +341,33 @@
   void beginConstantPattern(Token? constKeyword) {}
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    _beginMethod(
+      declarationKind,
+      augmentToken,
+      externalToken,
+      staticToken,
+      covariantToken,
+      varFinalOrConst,
+      newToken,
+      getOrSet,
+      name,
+      enclosingDeclarationName,
+    );
+  }
+
+  @override
   void beginEnumDeclaration(
     Token beginToken,
     Token? augmentToken,
@@ -404,7 +430,7 @@
   }
 
   @override
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
@@ -472,33 +498,18 @@
     Token name,
     String? enclosingDeclarationName,
   ) {
-    _Modifiers modifiers = _Modifiers();
-    if (augmentToken != null) {
-      assert(augmentToken.isModifier);
-      modifiers.augmentKeyword = augmentToken;
-    }
-    if (externalToken != null) {
-      assert(externalToken.isModifier);
-      modifiers.externalKeyword = externalToken;
-    }
-    if (staticToken != null) {
-      assert(staticToken.isModifier);
-      var builder = _classLikeBuilder;
-      if (builder is! _ClassDeclarationBuilder ||
-          builder.name.lexeme != name.lexeme ||
-          getOrSet != null) {
-        modifiers.staticKeyword = staticToken;
-      }
-    }
-    if (covariantToken != null) {
-      assert(covariantToken.isModifier);
-      modifiers.covariantKeyword = covariantToken;
-    }
-    if (varFinalOrConst != null) {
-      assert(varFinalOrConst.isModifier);
-      modifiers.finalConstOrVarKeyword = varFinalOrConst;
-    }
-    push(modifiers);
+    _beginMethod(
+      declarationKind,
+      augmentToken,
+      externalToken,
+      staticToken,
+      covariantToken,
+      varFinalOrConst,
+      null,
+      getOrSet,
+      name,
+      enclosingDeclarationName,
+    );
   }
 
   @override
@@ -618,6 +629,11 @@
   }
 
   @override
+  void beginPrimaryConstructorBody(Token beginToken) {
+    debugEvent("PrimaryConstructorBody");
+  }
+
+  @override
   void beginSwitchCaseWhenClause(Token when) {
     debugEvent("PatternSwitchCaseGuard");
   }
@@ -1223,26 +1239,6 @@
   }
 
   @override
-  void endClassConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    assert(
-      getOrSet == null ||
-          optional('get', getOrSet) ||
-          optional('set', getOrSet),
-    );
-    debugEvent("ClassConstructor");
-
-    _classLikeBuilder?.members.add(
-      _buildConstructorDeclaration(beginToken: beginToken, endToken: endToken),
-    );
-  }
-
-  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     debugEvent("ClassDeclaration");
 
@@ -1253,181 +1249,6 @@
   }
 
   @override
-  void endClassFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    assert(optional('factory', factoryKeyword));
-    assert(optional(';', endToken) || optional('}', endToken));
-    debugEvent("ClassFactoryMethod");
-
-    _classLikeBuilder?.members.add(
-      _buildFactoryConstructorDeclaration(
-        beginToken: beginToken,
-        factoryKeyword: factoryKeyword,
-        endToken: endToken,
-      ),
-    );
-  }
-
-  @override
-  void endClassFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token semicolon,
-  ) {
-    assert(optional(';', semicolon));
-    debugEvent("Fields");
-
-    if (abstractToken != null) {
-      if (staticToken != null) {
-        handleRecoverableError(
-          codeAbstractStaticField,
-          abstractToken,
-          abstractToken,
-        );
-      }
-      if (lateToken != null) {
-        handleRecoverableError(
-          codeAbstractLateField,
-          abstractToken,
-          abstractToken,
-        );
-      }
-    }
-    if (externalToken != null) {
-      if (lateToken != null) {
-        handleRecoverableError(
-          codeExternalLateField,
-          externalToken,
-          externalToken,
-        );
-      }
-    }
-
-    var variables = popTypedList2<VariableDeclarationImpl>(count);
-    var type = pop() as TypeAnnotationImpl?;
-    var variableList = VariableDeclarationListImpl(
-      comment: null,
-      metadata: null,
-      lateKeyword: lateToken,
-      keyword: varFinalOrConst,
-      type: type,
-      variables: variables,
-    );
-    var covariantKeyword = covariantToken;
-    var metadata = pop() as List<AnnotationImpl>?;
-    var comment = _findComment(metadata, beginToken);
-    _classLikeBuilder?.members.add(
-      FieldDeclarationImpl(
-        comment: comment,
-        metadata: metadata,
-        abstractKeyword: abstractToken,
-        augmentKeyword: augmentToken,
-        covariantKeyword: covariantKeyword,
-        externalKeyword: externalToken,
-        staticKeyword: staticToken,
-        fields: variableList,
-        semicolon: semicolon,
-      ),
-    );
-  }
-
-  @override
-  void endClassMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    assert(
-      getOrSet == null ||
-          optional('get', getOrSet) ||
-          optional('set', getOrSet),
-    );
-    debugEvent("ClassMethod");
-
-    var bodyObject = pop();
-    pop(); // initializers
-    pop(); // separator
-    var formalParameters = pop() as FormalParameterListImpl?;
-    var typeParameters = pop() as TypeParameterListImpl?;
-    var name = pop();
-    var returnType = pop() as TypeAnnotationImpl?;
-    var modifiers = pop() as _Modifiers?;
-    var metadata = pop() as List<AnnotationImpl>?;
-    var comment = _findComment(metadata, beginToken);
-
-    assert(formalParameters != null || optional('get', getOrSet!));
-
-    Token? operatorKeyword;
-    SimpleIdentifierImpl nameId;
-    if (name is SimpleIdentifierImpl) {
-      nameId = name;
-    } else if (name is _OperatorName) {
-      operatorKeyword = name.operatorKeyword;
-      nameId = name.name;
-      if (typeParameters != null) {
-        handleRecoverableError(
-          codeOperatorWithTypeParameters,
-          typeParameters.beginToken,
-          typeParameters.endToken,
-        );
-      }
-    } else {
-      throw UnimplementedError(
-        'name is an instance of ${name.runtimeType} in endClassMethod',
-      );
-    }
-
-    if (getOrSet?.keyword == Keyword.SET) {
-      formalParameters = _ensureSetterFormalParameter(nameId, formalParameters);
-    }
-
-    FunctionBodyImpl body;
-    if (bodyObject is FunctionBodyImpl) {
-      body = bodyObject;
-    } else if (bodyObject is _RedirectingFactoryBody) {
-      body = EmptyFunctionBodyImpl(semicolon: endToken);
-    } else {
-      internalProblem(
-        codeInternalProblemUnhandled.withArgumentsOld(
-          "${bodyObject.runtimeType}",
-          "bodyObject",
-        ),
-        beginToken.charOffset,
-        uri,
-      );
-    }
-
-    _classLikeBuilder?.members.add(
-      MethodDeclarationImpl(
-        comment: comment,
-        metadata: metadata,
-        augmentKeyword: modifiers?.augmentKeyword,
-        externalKeyword: modifiers?.externalKeyword,
-        modifierKeyword: modifiers?.abstractKeyword ?? modifiers?.staticKeyword,
-        returnType: returnType,
-        propertyKeyword: getOrSet,
-        operatorKeyword: operatorKeyword,
-        name: nameId.token,
-        typeParameters: typeParameters,
-        parameters: formalParameters,
-        body: body,
-      ),
-    );
-  }
-
-  @override
   void endClassOrMixinOrExtensionBody(
     DeclarationKind kind,
     int memberCount,
@@ -1598,6 +1419,39 @@
   }
 
   @override
+  void endConstructor(
+    DeclarationKind kind,
+    Token beginToken,
+    Token? newToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    debugEvent("endConstructor");
+    switch (kind) {
+      case DeclarationKind.Class:
+      case DeclarationKind.ExtensionType:
+      case DeclarationKind.Enum:
+        _endClassConstructor(
+          beginToken,
+          beginParam,
+          beginInitializers,
+          endToken,
+        );
+      case DeclarationKind.Mixin:
+      case DeclarationKind.Extension:
+        invalidNodes.add(
+          _buildConstructorDeclaration(
+            beginToken: beginToken,
+            endToken: endToken,
+          ),
+        );
+      case DeclarationKind.TopLevel:
+        throw UnsupportedError("Unexpected constructor kind $kind.");
+    }
+  }
+
+  @override
   void endConstructorReference(
     Token start,
     Token? periodBeforeName,
@@ -1659,24 +1513,6 @@
   }
 
   @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endEnumConstructor");
-    endClassConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endEnumDeclaration(
     Token beginToken,
     Token enumKeyword,
@@ -1718,21 +1554,6 @@
   }
 
   @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("ExtensionConstructor");
-
-    invalidNodes.add(
-      _buildConstructorDeclaration(beginToken: beginToken, endToken: endToken),
-    );
-  }
-
-  @override
   void endExtensionDeclaration(
     Token beginToken,
     Token extensionKeyword,
@@ -1756,76 +1577,6 @@
   }
 
   @override
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    assert(optional('factory', factoryKeyword));
-    assert(optional(';', endToken) || optional('}', endToken));
-    debugEvent("ExtensionFactoryMethod");
-
-    invalidNodes.add(
-      _buildFactoryConstructorDeclaration(
-        beginToken: beginToken,
-        factoryKeyword: factoryKeyword,
-        endToken: endToken,
-      ),
-    );
-  }
-
-  @override
-  void endExtensionFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    if (staticToken == null) {
-      // TODO(danrubel): Decide how to handle instance field declarations
-      // within extensions. They are invalid and the parser has already reported
-      // an error at this point, but we include them in order to get navigation,
-      // search, etc.
-    }
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endExtensionMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("ExtensionMethod");
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endExtensionTypeDeclaration(
     Token beginToken,
     Token? augmentToken,
@@ -1835,45 +1586,60 @@
   ) {
     var implementsClause =
         pop(NullValues.IdentifierList) as ImplementsClauseImpl?;
-    var representation =
-        pop(const NullValue("RepresentationDeclarationImpl"))
-            as RepresentationDeclarationImpl?;
+    var primaryConstructorBuilder =
+        pop(NullValues.PrimaryConstructor) as _PrimaryConstructorBuilder?;
     var constKeyword = pop() as Token?;
 
     if (enableInlineClass) {
       var builder = _classLikeBuilder as _ExtensionTypeDeclarationBuilder;
-      if (representation == null) {
+      if (primaryConstructorBuilder == null) {
         var leftParenthesis = parser.rewriter.insertParens(builder.name, true);
         var typeName = leftParenthesis.next!;
         var rightParenthesis = leftParenthesis.endGroup!;
         var fieldName = parser.rewriter.insertSyntheticIdentifier(typeName);
-        representation = RepresentationDeclarationImpl(
+        primaryConstructorBuilder = _PrimaryConstructorBuilder(
+          constKeyword: constKeyword,
           constructorName: null,
-          leftParenthesis: leftParenthesis,
-          fieldMetadata: [],
-          fieldType: NamedTypeImpl(
-            importPrefix: null,
-            name: typeName,
-            question: null,
-            typeArguments: null,
+          formalParameterList: FormalParameterListImpl(
+            leftParenthesis: leftParenthesis,
+            parameters: [
+              SimpleFormalParameterImpl(
+                comment: null,
+                metadata: [],
+                covariantKeyword: null,
+                requiredKeyword: null,
+                keyword: null,
+                type: NamedTypeImpl(
+                  importPrefix: null,
+                  name: typeName,
+                  question: null,
+                  typeArguments: null,
+                ),
+                name: fieldName,
+              ),
+            ],
+            leftDelimiter: null,
+            rightDelimiter: null,
+            rightParenthesis: rightParenthesis,
           ),
-          fieldName: fieldName,
-          rightParenthesis: rightParenthesis,
         );
       }
       // Check for extension type name conflict.
-      var representationName = representation.fieldName;
+      var representationName =
+          (primaryConstructorBuilder.formalParameterList.parameters.first
+                  as SimpleFormalParameterImpl)
+              .name!;
       if (representationName.lexeme == builder.name.lexeme) {
         diagnosticReporter.diagnosticReporter?.atToken(
           representationName,
-          ParserErrorCode.memberWithClassName,
+          diag.memberWithClassName,
         );
       }
       declarations.add(
         builder.build(
           typeKeyword: typeKeyword,
           constKeyword: constKeyword,
-          representation: representation,
+          primaryConstructorBuilder: primaryConstructorBuilder,
           implementsClause: implementsClause,
         ),
       );
@@ -1888,6 +1654,36 @@
   }
 
   @override
+  void endFactory(
+    DeclarationKind kind,
+    Token beginToken,
+    Token factoryKeyword,
+    Token endToken,
+  ) {
+    assert(optional('factory', factoryKeyword));
+    assert(optional(';', endToken) || optional('}', endToken));
+    debugEvent("endFactory");
+
+    switch (kind) {
+      case DeclarationKind.Class:
+      case DeclarationKind.Enum:
+      case DeclarationKind.ExtensionType:
+        _endFactoryMethod(beginToken, factoryKeyword, endToken);
+      case DeclarationKind.Mixin:
+      case DeclarationKind.Extension:
+        invalidNodes.add(
+          _buildFactoryConstructorDeclaration(
+            beginToken: beginToken,
+            factoryKeyword: factoryKeyword,
+            endToken: endToken,
+          ),
+        );
+      case DeclarationKind.TopLevel:
+        throw UnsupportedError("Unexpected factory kind $kind.");
+    }
+  }
+
+  @override
   void endFieldInitializer(Token equals, Token endToken) {
     assert(optional('=', equals));
     debugEvent("FieldInitializer");
@@ -1907,6 +1703,35 @@
   }
 
   @override
+  void endFields(
+    DeclarationKind kind,
+    Token? abstractToken,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? lateToken,
+    Token? varFinalOrConst,
+    int count,
+    Token beginToken,
+    Token endToken,
+  ) {
+    debugEvent("endFields");
+    _endClassFields(
+      abstractToken,
+      augmentToken,
+      externalToken,
+      staticToken,
+      covariantToken,
+      lateToken,
+      varFinalOrConst,
+      count,
+      beginToken,
+      endToken,
+    );
+  }
+
+  @override
   void endForControlFlow(Token token) {
     debugEvent("endForControlFlow");
     var body = pop() as CollectionElementImpl;
@@ -2704,17 +2529,21 @@
   }
 
   @override
-  void endMixinConstructor(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    debugEvent("MixinConstructor");
-
-    invalidNodes.add(
-      _buildConstructorDeclaration(beginToken: beginToken, endToken: endToken),
+    debugEvent("endMethod");
+    _endClassMethod(
+      getOrSet,
+      beginToken,
+      beginParam,
+      beginInitializers,
+      endToken,
     );
   }
 
@@ -2729,68 +2558,6 @@
   }
 
   @override
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    debugEvent("MixinFactoryMethod");
-
-    invalidNodes.add(
-      _buildFactoryConstructorDeclaration(
-        beginToken: beginToken,
-        factoryKeyword: factoryKeyword,
-        endToken: endToken,
-      ),
-    );
-  }
-
-  @override
-  void endMixinFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endMixinMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("MixinMethod");
-    endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endNamedFunctionExpression(Token endToken) {
     debugEvent("NamedFunctionExpression");
     var body = pop() as FunctionBodyImpl;
@@ -2828,7 +2595,7 @@
     ImplementsClauseImpl? implementsClause;
     if (implementsKeyword != null) {
       var interfaces = _popNamedTypeList(
-        code: ParserErrorCode.expectedNamedTypeImplements,
+        code: diag.expectedNamedTypeImplements,
       );
       implementsClause = ImplementsClauseImpl(
         implementsKeyword: implementsKeyword,
@@ -2840,7 +2607,7 @@
     if (superclass is! NamedTypeImpl) {
       diagnosticReporter.diagnosticReporter?.atNode(
         superclass,
-        ParserErrorCode.expectedNamedTypeExtends,
+        diag.expectedNamedTypeExtends,
       );
       var beginToken = superclass.beginToken;
       var endToken = superclass.endToken;
@@ -2986,10 +2753,7 @@
         components: libraryNameOrUri as List<SimpleIdentifierImpl>,
       );
       if (_featureSet.isEnabled(Feature.enhanced_parts)) {
-        diagnosticReporter.diagnosticReporter?.atNode(
-          name,
-          ParserErrorCode.partOfName,
-        );
+        diagnosticReporter.diagnosticReporter?.atNode(name, diag.partOfName);
       }
     }
     var metadata = pop() as List<AnnotationImpl>?;
@@ -3035,10 +2799,10 @@
     if (forExtensionType) {
       var leftParenthesis = formalParameterList.leftParenthesis;
 
-      RepresentationConstructorNameImpl? constructorName;
+      PrimaryConstructorNameImpl? constructorName;
       if (hasConstructorName) {
         var nameIdentifier = pop() as SimpleIdentifierImpl;
-        constructorName = RepresentationConstructorNameImpl(
+        constructorName = PrimaryConstructorNameImpl(
           period: beginToken,
           name: nameIdentifier.token,
         );
@@ -3056,7 +2820,7 @@
           case null:
             diagnosticReporter.diagnosticReporter?.atToken(
               leftParenthesis.next!,
-              ParserErrorCode.expectedRepresentationType,
+              diag.expectedRepresentationType,
             );
             var typeNameToken = parser.rewriter.insertSyntheticIdentifier(
               leftParenthesis,
@@ -3069,7 +2833,7 @@
             );
         }
         if (firstFormalParameter.keyword case var keyword?) {
-          if (_featureSet.isEnabled(Feature.declaring_constructors)) {
+          if (_featureSet.isEnabled(Feature.primary_constructors)) {
             switch (keyword.keyword) {
               case Keyword.CONST:
               case Keyword.FINAL:
@@ -3077,7 +2841,7 @@
               case Keyword.VAR:
                 diagnosticReporter.diagnosticReporter?.atToken(
                   keyword,
-                  ParserErrorCode.representationFieldModifier,
+                  diag.representationFieldModifier,
                 );
             }
           } else {
@@ -3088,7 +2852,7 @@
               case Keyword.VAR:
                 diagnosticReporter.diagnosticReporter?.atToken(
                   keyword,
-                  ParserErrorCode.representationFieldModifier,
+                  diag.representationFieldModifier,
                 );
             }
           }
@@ -3100,19 +2864,19 @@
           if (formalParameterList.parameters.length == 1) {
             diagnosticReporter.diagnosticReporter?.atToken(
               maybeComma,
-              ParserErrorCode.representationFieldTrailingComma,
+              diag.representationFieldTrailingComma,
             );
           } else {
             diagnosticReporter.diagnosticReporter?.atToken(
               maybeComma,
-              ParserErrorCode.multipleRepresentationFields,
+              diag.multipleRepresentationFields,
             );
           }
         }
       } else {
         diagnosticReporter.diagnosticReporter?.atToken(
           leftParenthesis.next!,
-          ParserErrorCode.expectedRepresentationField,
+          diag.expectedRepresentationField,
         );
         fieldMetadata = [];
         var typeNameToken = parser.rewriter.insertSyntheticIdentifier(
@@ -3130,19 +2894,32 @@
       push(constKeyword ?? const NullValue("Token"));
 
       push(
-        RepresentationDeclarationImpl(
+        _PrimaryConstructorBuilder(
+          constKeyword: constKeyword,
           constructorName: constructorName,
-          leftParenthesis: leftParenthesis,
-          fieldMetadata: fieldMetadata,
-          fieldType: fieldType,
-          fieldName: fieldName,
-          rightParenthesis: formalParameterList.rightParenthesis,
+          formalParameterList: FormalParameterListImpl(
+            leftParenthesis: leftParenthesis,
+            parameters: [
+              SimpleFormalParameterImpl(
+                comment: null,
+                metadata: fieldMetadata,
+                covariantKeyword: null,
+                requiredKeyword: null,
+                keyword: null,
+                type: fieldType,
+                name: fieldName,
+              ),
+            ],
+            leftDelimiter: null,
+            rightDelimiter: null,
+            rightParenthesis: formalParameterList.rightParenthesis,
+          ),
         ),
       );
     } else {
-      if (!_featureSet.isEnabled(Feature.declaring_constructors)) {
+      if (!_featureSet.isEnabled(Feature.primary_constructors)) {
         _reportFeatureNotEnabled(
-          feature: Feature.declaring_constructors,
+          feature: Feature.primary_constructors,
           startToken: beginToken,
         );
       }
@@ -3156,6 +2933,8 @@
         );
       }
 
+      push(constKeyword ?? const NullValue("Token"));
+
       push(
         _PrimaryConstructorBuilder(
           constKeyword: constKeyword,
@@ -3169,6 +2948,32 @@
   }
 
   @override
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    assert(optional('this', beginToken));
+
+    var body = pop() as FunctionBodyImpl;
+    var initializers = (pop() as List<ConstructorInitializerImpl>?) ?? const [];
+    var colon = pop() as Token?;
+    var metadata = pop() as List<AnnotationImpl>?;
+    var comment = _findComment(metadata, beginToken);
+
+    _classLikeBuilder!.members.add(
+      PrimaryConstructorBodyImpl(
+        comment: comment,
+        metadata: metadata,
+        thisKeyword: beginToken,
+        colon: colon,
+        initializers: initializers,
+        body: body,
+      ),
+    );
+  }
+
+  @override
   void endRecordLiteral(Token leftParenthesis, int count, Token? constKeyword) {
     debugEvent("RecordLiteral");
 
@@ -4190,7 +3995,7 @@
       if (supertype != null) {
         diagnosticReporter.diagnosticReporter?.atNode(
           supertype,
-          ParserErrorCode.expectedNamedTypeExtends,
+          diag.expectedNamedTypeExtends,
         );
       }
     }
@@ -4216,6 +4021,7 @@
     var extendsClause = pop(NullValues.ExtendsClause) as ExtendsClauseImpl?;
     var primaryConstructorBuilder =
         pop(NullValues.PrimaryConstructor) as _PrimaryConstructorBuilder?;
+    pop() as Token?; // constKeyword
     var mixinKeyword = pop(NullValues.Token) as Token?;
     var augmentKeyword = pop(NullValues.Token) as Token?;
     var finalKeyword = pop(NullValues.Token) as Token?;
@@ -4263,9 +4069,7 @@
   @override
   void handleClassWithClause(Token withKeyword) {
     assert(optional('with', withKeyword));
-    var mixinTypes = _popNamedTypeList(
-      code: ParserErrorCode.expectedNamedTypeWith,
-    );
+    var mixinTypes = _popNamedTypeList(code: diag.expectedNamedTypeWith);
     push(WithClauseImpl(withKeyword: withKeyword, mixinTypes: mixinTypes));
   }
 
@@ -4501,6 +4305,7 @@
     var withClause = pop(NullValues.WithClause) as WithClauseImpl?;
     var primaryConstructorBuilder =
         pop(NullValues.PrimaryConstructor) as _PrimaryConstructorBuilder?;
+    pop() as Token?; // constKeyword
     var typeParameters = pop() as TypeParameterListImpl?;
     var name = pop() as SimpleIdentifierImpl;
     var metadata = pop() as List<AnnotationImpl>?;
@@ -4545,9 +4350,7 @@
   @override
   void handleEnumWithClause(Token withKeyword) {
     assert(optional('with', withKeyword));
-    var mixinTypes = _popNamedTypeList(
-      code: ParserErrorCode.expectedNamedTypeWith,
-    );
+    var mixinTypes = _popNamedTypeList(code: diag.expectedNamedTypeWith);
     push(WithClauseImpl(withKeyword: withKeyword, mixinTypes: mixinTypes));
   }
 
@@ -4842,7 +4645,7 @@
     if (implementsKeyword != null) {
       endTypeList(interfacesCount);
       var interfaces = _popNamedTypeList(
-        code: ParserErrorCode.expectedNamedTypeImplements,
+        code: diag.expectedNamedTypeImplements,
       );
       push(
         ImplementsClauseImpl(
@@ -5270,9 +5073,7 @@
 
     if (onKeyword != null) {
       endTypeList(typeCount);
-      var onTypes = _popNamedTypeList(
-        code: ParserErrorCode.expectedNamedTypeOn,
-      );
+      var onTypes = _popNamedTypeList(code: diag.expectedNamedTypeOn);
       push(
         MixinOnClauseImpl(onKeyword: onKeyword, superclassConstraints: onTypes),
       );
@@ -5286,7 +5087,7 @@
     assert(optional('with', withKeyword));
     // This is an error case. An error has been issued already.
     // Possibly the data could be used for help though.
-    _popNamedTypeList(code: ParserErrorCode.expectedNamedTypeWith);
+    _popNamedTypeList(code: diag.expectedNamedTypeWith);
   }
 
   @override
@@ -5308,9 +5109,7 @@
   @override
   void handleNamedMixinApplicationWithClause(Token withKeyword) {
     assert(optionalOrNull('with', withKeyword));
-    var mixinTypes = _popNamedTypeList(
-      code: ParserErrorCode.expectedNamedTypeWith,
-    );
+    var mixinTypes = _popNamedTypeList(code: diag.expectedNamedTypeWith);
     push(WithClauseImpl(withKeyword: withKeyword, mixinTypes: mixinTypes));
   }
 
@@ -5357,6 +5156,15 @@
   }
 
   @override
+  void handleNoClassBody(Token semicolonToken) {
+    debugEvent("NoClassBody");
+    var builder = _classLikeBuilder;
+    if (builder != null) {
+      builder.emptyClassBodySemicolon = semicolonToken;
+    }
+  }
+
+  @override
   void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
     debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
 
@@ -5364,6 +5172,15 @@
   }
 
   @override
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    debugEvent("NoExtensionTypeBody");
+    var builder = _classLikeBuilder;
+    if (builder != null) {
+      builder.emptyClassBodySemicolon = semicolonToken;
+    }
+  }
+
+  @override
   void handleNoFieldInitializer(Token token) {
     debugEvent("NoFieldInitializer");
 
@@ -5380,6 +5197,12 @@
   }
 
   @override
+  void handleNoIdentifier(Token token, IdentifierContext context) {
+    debugEvent("handleNoIdentifier");
+    push(NullValues.Identifier);
+  }
+
+  @override
   void handleNoInitializers() {
     debugEvent("NoInitializers");
 
@@ -5403,13 +5226,8 @@
     Token? constKeyword,
     bool forExtensionType,
   ) {
-    if (forExtensionType) {
-      push(constKeyword ?? const NullValue("Token"));
-
-      push(const NullValue("RepresentationDeclarationImpl"));
-    } else {
-      push(NullValues.PrimaryConstructor);
-    }
+    push(constKeyword ?? const NullValue("Token"));
+    push(NullValues.PrimaryConstructor);
   }
 
   @override
@@ -6116,6 +5934,50 @@
     }
   }
 
+  void _beginMethod(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? newKeyword,
+    Token? getOrSet,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    _Modifiers modifiers = _Modifiers();
+    if (augmentToken != null) {
+      assert(augmentToken.isModifier);
+      modifiers.augmentKeyword = augmentToken;
+    }
+    if (externalToken != null) {
+      assert(externalToken.isModifier);
+      modifiers.externalKeyword = externalToken;
+    }
+    if (staticToken != null) {
+      assert(staticToken.isModifier);
+      var builder = _classLikeBuilder;
+      if (builder is! _ClassDeclarationBuilder ||
+          builder.name.lexeme != name.lexeme ||
+          getOrSet != null) {
+        modifiers.staticKeyword = staticToken;
+      }
+    }
+    if (covariantToken != null) {
+      assert(covariantToken.isModifier);
+      modifiers.covariantKeyword = covariantToken;
+    }
+    if (varFinalOrConst != null) {
+      assert(varFinalOrConst.isModifier);
+      modifiers.finalConstOrVarKeyword = varFinalOrConst;
+    }
+    if (newKeyword != null) {
+      modifiers.newKeyword = newKeyword;
+    }
+    push(modifiers);
+  }
+
   ConstructorDeclarationImpl _buildConstructorDeclaration({
     required Token beginToken,
     required Token endToken,
@@ -6125,7 +5987,7 @@
     var separator = pop() as Token?;
     var parameters = pop() as FormalParameterListImpl;
     var typeParameters = pop() as TypeParameterListImpl?;
-    var name = pop();
+    var preliminaryName = pop();
     pop(); // return type
     var modifiers = pop() as _Modifiers?;
     var metadata = pop() as List<AnnotationImpl>?;
@@ -6150,21 +6012,30 @@
       );
     }
 
-    SimpleIdentifierImpl prefixOrName;
+    SimpleIdentifierImpl? typeNameIdentifier;
     Token? period;
-    SimpleIdentifierImpl? nameOrNull;
-    if (name is SimpleIdentifierImpl) {
-      prefixOrName = name;
-    } else if (name is PrefixedIdentifierImpl) {
-      prefixOrName = name.prefix;
-      period = name.period;
-      nameOrNull = name.identifier;
-    } else if (name is _OperatorName) {
-      prefixOrName = name.name;
-    } else {
-      throw UnimplementedError(
-        'name is an instance of ${name.runtimeType} in endClassConstructor',
-      );
+    Token? constructorNameToken;
+
+    var newKeyword = modifiers?.newKeyword;
+    switch (preliminaryName) {
+      case null:
+        break;
+      case SimpleIdentifierImpl():
+        if (newKeyword != null) {
+          constructorNameToken = preliminaryName.token;
+        } else {
+          typeNameIdentifier = preliminaryName;
+        }
+      case PrefixedIdentifierImpl():
+        typeNameIdentifier = preliminaryName.prefix;
+        period = preliminaryName.period;
+        constructorNameToken = preliminaryName.identifier.token;
+      case _OperatorName():
+        typeNameIdentifier = preliminaryName.name;
+      default:
+        throw UnimplementedError(
+          'name is an instance of ${preliminaryName.runtimeType} in endClassConstructor',
+        );
     }
 
     if (typeParameters != null) {
@@ -6193,7 +6064,7 @@
         if (notDefault is FieldFormalParameterImpl) {
           diagnosticReporter.diagnosticReporter?.atToken(
             notDefault.thisKeyword,
-            ParserErrorCode.externalConstructorWithFieldInitializers,
+            diag.externalConstructorWithFieldInitializers,
           );
         }
       }
@@ -6206,9 +6077,10 @@
       externalKeyword: modifiers?.externalKeyword,
       constKeyword: modifiers?.finalConstOrVarKeyword,
       factoryKeyword: null,
-      returnType: SimpleIdentifierImpl(token: prefixOrName.token),
+      newKeyword: modifiers?.newKeyword,
+      typeName: typeNameIdentifier,
       period: period,
-      name: nameOrNull?.token,
+      name: constructorNameToken,
       parameters: parameters,
       separator: separator,
       initializers: initializers,
@@ -6246,7 +6118,7 @@
 
     var parameters = pop() as FormalParameterListImpl;
     var typeParameters = pop() as TypeParameterListImpl?;
-    var constructorName = pop() as IdentifierImpl;
+    var preliminaryName = pop() as IdentifierImpl?;
     var modifiers = pop() as _Modifiers?;
     var metadata = pop() as List<AnnotationImpl>?;
     var comment = _findComment(metadata, beginToken);
@@ -6260,20 +6132,35 @@
       );
     }
 
-    // Decompose the preliminary ConstructorName into the type name and
-    // the actual constructor name.
-    SimpleIdentifierImpl returnType;
+    SimpleIdentifierImpl? typeNameIdentifier;
     Token? period;
-    Token? nameToken;
-    IdentifierImpl typeName = constructorName;
-    if (typeName is SimpleIdentifierImpl) {
-      returnType = typeName;
-    } else if (typeName is PrefixedIdentifierImpl) {
-      returnType = typeName.prefix;
-      period = typeName.period;
-      nameToken = typeName.identifier.token;
-    } else {
-      throw UnimplementedError();
+    Token? constructorNameToken;
+    switch (preliminaryName) {
+      case null:
+        break;
+      case SimpleIdentifierImpl():
+        if (_featureSet.isEnabled(Feature.primary_constructors)) {
+          // Consider a factory constructor declaration of the form
+          // `factory C(...` optionally starting with zero or more of the
+          // modifiers `const`, `augment`, or `external`. Assume that `C` is
+          // the name of the enclosing class, mixin class, enum, or extension
+          // type. In this situation, the declaration declares a constructor
+          // whose name is `C`.
+          var enclosingClassName = _classLikeBuilder?.name;
+          if (enclosingClassName?.lexeme == preliminaryName.token.lexeme) {
+            typeNameIdentifier = preliminaryName;
+          } else {
+            constructorNameToken = preliminaryName.token;
+          }
+        } else {
+          typeNameIdentifier = preliminaryName;
+        }
+      case PrefixedIdentifierImpl():
+        typeNameIdentifier = preliminaryName.prefix;
+        period = preliminaryName.period;
+        constructorNameToken = preliminaryName.identifier.token;
+      default:
+        throw UnimplementedError();
     }
 
     var constructor = ConstructorDeclarationImpl(
@@ -6283,9 +6170,10 @@
       externalKeyword: modifiers?.externalKeyword,
       constKeyword: modifiers?.finalConstOrVarKeyword,
       factoryKeyword: factoryKeyword,
-      returnType: SimpleIdentifierImpl(token: returnType.token),
+      newKeyword: null,
+      typeName: typeNameIdentifier,
       period: period,
-      name: nameToken,
+      name: constructorNameToken,
       parameters: parameters,
       separator: separator,
       initializers: [],
@@ -6295,6 +6183,186 @@
     return constructor;
   }
 
+  void _endClassConstructor(
+    Token beginToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    _classLikeBuilder?.members.add(
+      _buildConstructorDeclaration(beginToken: beginToken, endToken: endToken),
+    );
+  }
+
+  void _endClassFields(
+    Token? abstractToken,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? lateToken,
+    Token? varFinalOrConst,
+    int count,
+    Token beginToken,
+    Token endToken,
+  ) {
+    assert(optional(';', endToken));
+
+    if (abstractToken != null) {
+      if (staticToken != null) {
+        handleRecoverableError(
+          codeAbstractStaticField,
+          abstractToken,
+          abstractToken,
+        );
+      }
+      if (lateToken != null) {
+        handleRecoverableError(
+          codeAbstractLateField,
+          abstractToken,
+          abstractToken,
+        );
+      }
+    }
+    if (externalToken != null) {
+      if (lateToken != null) {
+        handleRecoverableError(
+          codeExternalLateField,
+          externalToken,
+          externalToken,
+        );
+      }
+    }
+
+    var variables = popTypedList2<VariableDeclarationImpl>(count);
+    var type = pop() as TypeAnnotationImpl?;
+    var variableList = VariableDeclarationListImpl(
+      comment: null,
+      metadata: null,
+      lateKeyword: lateToken,
+      keyword: varFinalOrConst,
+      type: type,
+      variables: variables,
+    );
+    var covariantKeyword = covariantToken;
+    var metadata = pop() as List<AnnotationImpl>?;
+    var comment = _findComment(metadata, beginToken);
+    _classLikeBuilder?.members.add(
+      FieldDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        abstractKeyword: abstractToken,
+        augmentKeyword: augmentToken,
+        covariantKeyword: covariantKeyword,
+        externalKeyword: externalToken,
+        staticKeyword: staticToken,
+        fields: variableList,
+        semicolon: endToken,
+      ),
+    );
+  }
+
+  void _endClassMethod(
+    Token? getOrSet,
+    Token beginToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    assert(
+      getOrSet == null ||
+          optional('get', getOrSet) ||
+          optional('set', getOrSet),
+    );
+
+    var bodyObject = pop();
+    pop(); // initializers
+    pop(); // separator
+    var formalParameters = pop() as FormalParameterListImpl?;
+    var typeParameters = pop() as TypeParameterListImpl?;
+    var name = pop();
+    var returnType = pop() as TypeAnnotationImpl?;
+    var modifiers = pop() as _Modifiers?;
+    var metadata = pop() as List<AnnotationImpl>?;
+    var comment = _findComment(metadata, beginToken);
+
+    assert(formalParameters != null || optional('get', getOrSet!));
+
+    Token? operatorKeyword;
+    SimpleIdentifierImpl nameId;
+    if (name is SimpleIdentifierImpl) {
+      nameId = name;
+    } else if (name is _OperatorName) {
+      operatorKeyword = name.operatorKeyword;
+      nameId = name.name;
+      if (typeParameters != null) {
+        handleRecoverableError(
+          codeOperatorWithTypeParameters,
+          typeParameters.beginToken,
+          typeParameters.endToken,
+        );
+      }
+    } else {
+      throw UnimplementedError(
+        'name is an instance of ${name.runtimeType} in endClassMethod',
+      );
+    }
+
+    if (getOrSet?.keyword == Keyword.SET) {
+      formalParameters = _ensureSetterFormalParameter(nameId, formalParameters);
+    }
+
+    FunctionBodyImpl body;
+    if (bodyObject is FunctionBodyImpl) {
+      body = bodyObject;
+    } else if (bodyObject is _RedirectingFactoryBody) {
+      body = EmptyFunctionBodyImpl(semicolon: endToken);
+    } else {
+      internalProblem(
+        codeInternalProblemUnhandled.withArgumentsOld(
+          "${bodyObject.runtimeType}",
+          "bodyObject",
+        ),
+        beginToken.charOffset,
+        uri,
+      );
+    }
+
+    _classLikeBuilder?.members.add(
+      MethodDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        augmentKeyword: modifiers?.augmentKeyword,
+        externalKeyword: modifiers?.externalKeyword,
+        modifierKeyword: modifiers?.abstractKeyword ?? modifiers?.staticKeyword,
+        returnType: returnType,
+        propertyKeyword: getOrSet,
+        operatorKeyword: operatorKeyword,
+        name: nameId.token,
+        typeParameters: typeParameters,
+        parameters: formalParameters,
+        body: body,
+      ),
+    );
+  }
+
+  void _endFactoryMethod(
+    Token beginToken,
+    Token factoryKeyword,
+    Token endToken,
+  ) {
+    assert(optional('factory', factoryKeyword));
+    assert(optional(';', endToken) || optional('}', endToken));
+
+    _classLikeBuilder?.members.add(
+      _buildFactoryConstructorDeclaration(
+        beginToken: beginToken,
+        factoryKeyword: factoryKeyword,
+        endToken: endToken,
+      ),
+    );
+  }
+
   FormalParameterListImpl? _ensureSetterFormalParameter(
     SimpleIdentifierImpl setterName,
     FormalParameterListImpl? formalParameters,
@@ -6308,7 +6376,7 @@
       if (!formalParameters.leftParenthesis.isSynthetic) {
         diagnosticReporter.diagnosticReporter?.atToken(
           setterName.token,
-          ParserErrorCode.wrongNumberOfParametersForSetter,
+          diag.wrongNumberOfParametersForSetter,
         );
       }
       var valueNameToken = parser.rewriter.insertSyntheticIdentifier(
@@ -6340,7 +6408,7 @@
 
     diagnosticReporter.diagnosticReporter?.atToken(
       setterName.token,
-      ParserErrorCode.wrongNumberOfParametersForSetter,
+      diag.wrongNumberOfParametersForSetter,
     );
     return FormalParameterListImpl(
       leftParenthesis: formalParameters.leftParenthesis,
@@ -6485,7 +6553,10 @@
   final Token? mixinKeyword;
   final Token classKeyword;
   final _PrimaryConstructorBuilder? primaryConstructorBuilder;
+
+  @override
   final Token name;
+
   ExtendsClauseImpl? extendsClause;
   WithClauseImpl? withClause;
   ImplementsClauseImpl? implementsClause;
@@ -6516,14 +6587,14 @@
 
   ClassDeclarationImpl build() {
     ClassBodyImpl body;
-    if (useDeclaringConstructorsAst) {
+    if (emptyClassBodySemicolon case var semicolon?) {
+      body = EmptyClassBodyImpl(semicolon: semicolon);
+    } else {
       body = BlockClassBodyImpl(
         leftBracket: leftBracket,
         members: members,
         rightBracket: rightBracket,
       );
-    } else {
-      body = ClassBodyImplStub();
     }
 
     return ClassDeclarationImpl(
@@ -6537,29 +6608,25 @@
       finalKeyword: finalKeyword,
       mixinKeyword: mixinKeyword,
       classKeyword: classKeyword,
-      name: name,
       namePart: buildClassNamePart(
         typeName: name,
         primaryConstructorBuilder: primaryConstructorBuilder,
       ),
-      typeParameters: typeParameters,
       extendsClause: extendsClause,
       withClause: withClause,
       implementsClause: implementsClause,
       nativeClause: nativeClause,
       body: body,
-      leftBracket: leftBracket,
-      members: members,
-      rightBracket: rightBracket,
     );
   }
 }
 
-class _ClassLikeDeclarationBuilder {
+abstract class _ClassLikeDeclarationBuilder {
   final CommentImpl? comment;
   final List<AnnotationImpl>? metadata;
   final TypeParameterListImpl? typeParameters;
 
+  Token? emptyClassBodySemicolon;
   Token leftBracket;
   final List<ClassMemberImpl> members = [];
   Token rightBracket;
@@ -6572,24 +6639,19 @@
     required this.rightBracket,
   });
 
+  Token? get name;
+
   ClassNamePartImpl buildClassNamePart({
     required Token typeName,
     required _PrimaryConstructorBuilder? primaryConstructorBuilder,
   }) {
-    if (useDeclaringConstructorsAst) {
-      if (primaryConstructorBuilder case var builder?) {
-        return builder.build(
-          typeName: typeName,
-          typeParameters: typeParameters,
-        );
-      } else {
-        return NameWithTypeParametersImpl(
-          typeName: typeName,
-          typeParameters: typeParameters,
-        );
-      }
+    if (primaryConstructorBuilder case var builder?) {
+      return builder.build(typeName: typeName, typeParameters: typeParameters);
     } else {
-      return ClassNamePartImplStub();
+      return NameWithTypeParametersImpl(
+        typeName: typeName,
+        typeParameters: typeParameters,
+      );
     }
   }
 }
@@ -6605,7 +6667,10 @@
   final Token? augmentKeyword;
   final Token enumKeyword;
   final _PrimaryConstructorBuilder? primaryConstructorBuilder;
+
+  @override
   final Token name;
+
   final WithClauseImpl? withClause;
   final ImplementsClauseImpl? implementsClause;
   final List<EnumConstantDeclarationImpl> constants = [];
@@ -6627,18 +6692,13 @@
   });
 
   EnumDeclarationImpl build() {
-    EnumBodyImpl body;
-    if (useDeclaringConstructorsAst) {
-      body = EnumBodyImpl(
-        leftBracket: leftBracket,
-        constants: constants,
-        semicolon: semicolon,
-        members: members,
-        rightBracket: rightBracket,
-      );
-    } else {
-      body = EnumBodyImplStub();
-    }
+    var body = EnumBodyImpl(
+      leftBracket: leftBracket,
+      constants: constants,
+      semicolon: semicolon,
+      members: members,
+      rightBracket: rightBracket,
+    );
 
     return EnumDeclarationImpl(
       comment: comment,
@@ -6649,16 +6709,9 @@
         typeName: name,
         primaryConstructorBuilder: primaryConstructorBuilder,
       ),
-      name: name,
-      typeParameters: typeParameters,
       withClause: withClause,
       implementsClause: implementsClause,
       body: body,
-      leftBracket: leftBracket,
-      constants: constants,
-      semicolon: semicolon,
-      members: members,
-      rightBracket: rightBracket,
     );
   }
 }
@@ -6666,6 +6719,7 @@
 class _ExtensionDeclarationBuilder extends _ClassLikeDeclarationBuilder {
   final Token? augmentKeyword;
   final Token extensionKeyword;
+  @override
   final Token? name;
 
   _ExtensionDeclarationBuilder({
@@ -6683,16 +6737,11 @@
     required Token? typeKeyword,
     required ExtensionOnClauseImpl? onClause,
   }) {
-    BlockClassBodyImpl body;
-    if (useDeclaringConstructorsAst) {
-      body = BlockClassBodyImpl(
-        leftBracket: leftBracket,
-        members: members,
-        rightBracket: rightBracket,
-      );
-    } else {
-      body = BlockClassBodyImplStub();
-    }
+    var body = BlockClassBodyImpl(
+      leftBracket: leftBracket,
+      members: members,
+      rightBracket: rightBracket,
+    );
 
     return ExtensionDeclarationImpl(
       comment: comment,
@@ -6704,9 +6753,6 @@
       typeParameters: typeParameters,
       onClause: onClause,
       body: body,
-      leftBracket: leftBracket,
-      members: members,
-      rightBracket: rightBracket,
     );
   }
 }
@@ -6714,6 +6760,8 @@
 class _ExtensionTypeDeclarationBuilder extends _ClassLikeDeclarationBuilder {
   final Token? augmentKeyword;
   final Token extensionKeyword;
+
+  @override
   final Token name;
 
   _ExtensionTypeDeclarationBuilder({
@@ -6730,57 +6778,24 @@
   ExtensionTypeDeclarationImpl build({
     required Token typeKeyword,
     required Token? constKeyword,
-    required RepresentationDeclarationImpl representation,
+    required _PrimaryConstructorBuilder primaryConstructorBuilder,
     required ImplementsClauseImpl? implementsClause,
   }) {
     ClassBodyImpl body;
-    if (useDeclaringConstructorsAst) {
+    if (emptyClassBodySemicolon case var semicolon?) {
+      body = EmptyClassBodyImpl(semicolon: semicolon);
+    } else {
       body = BlockClassBodyImpl(
         leftBracket: leftBracket,
         members: members,
         rightBracket: rightBracket,
       );
-    } else {
-      body = ClassBodyImplStub();
     }
 
-    ClassNamePartImpl namePartOrStub;
-    if (useDeclaringConstructorsAst) {
-      PrimaryConstructorNameImpl? primaryConstructorName;
-      if (representation.constructorName case var representationName?) {
-        primaryConstructorName = PrimaryConstructorNameImpl(
-          period: representationName.period,
-          name: representationName.name,
-        );
-      }
-      var primaryConstructorBuilder = _PrimaryConstructorBuilder(
-        constKeyword: constKeyword,
-        constructorName: primaryConstructorName,
-        formalParameterList: FormalParameterListImpl(
-          leftParenthesis: representation.leftParenthesis,
-          parameters: [
-            SimpleFormalParameterImpl(
-              comment: null,
-              metadata: representation.fieldMetadata,
-              covariantKeyword: null,
-              requiredKeyword: null,
-              keyword: null,
-              type: representation.fieldType,
-              name: representation.fieldName,
-            ),
-          ],
-          leftDelimiter: null,
-          rightDelimiter: null,
-          rightParenthesis: representation.rightParenthesis,
-        ),
-      );
-      namePartOrStub = buildClassNamePart(
-        typeName: name,
-        primaryConstructorBuilder: primaryConstructorBuilder,
-      );
-    } else {
-      namePartOrStub = ClassNamePartImplStub();
-    }
+    var primaryConstructor = primaryConstructorBuilder.build(
+      typeName: name,
+      typeParameters: typeParameters,
+    );
 
     return ExtensionTypeDeclarationImpl(
       comment: comment,
@@ -6788,18 +6803,9 @@
       augmentKeyword: augmentKeyword,
       extensionKeyword: extensionKeyword,
       typeKeyword: typeKeyword,
-      namePart: namePartOrStub,
-      constKeyword: constKeyword,
-      name: name,
-      typeParameters: typeParameters,
-      representation: useDeclaringConstructorsAst
-          ? RepresentationDeclarationImplStub()
-          : representation,
+      primaryConstructor: primaryConstructor,
       implementsClause: implementsClause,
       body: body,
-      leftBracket: leftBracket,
-      members: members,
-      rightBracket: rightBracket,
     );
   }
 }
@@ -6808,7 +6814,10 @@
   final Token? augmentKeyword;
   final Token? baseKeyword;
   final Token mixinKeyword;
+
+  @override
   final Token name;
+
   MixinOnClauseImpl? onClause;
   ImplementsClauseImpl? implementsClause;
 
@@ -6827,16 +6836,11 @@
   });
 
   MixinDeclarationImpl build() {
-    BlockClassBodyImpl body;
-    if (useDeclaringConstructorsAst) {
-      body = BlockClassBodyImpl(
-        leftBracket: leftBracket,
-        members: members,
-        rightBracket: rightBracket,
-      );
-    } else {
-      body = BlockClassBodyImplStub();
-    }
+    var body = BlockClassBodyImpl(
+      leftBracket: leftBracket,
+      members: members,
+      rightBracket: rightBracket,
+    );
 
     return MixinDeclarationImpl(
       comment: comment,
@@ -6849,9 +6853,6 @@
       onClause: onClause,
       implementsClause: implementsClause,
       body: body,
-      leftBracket: leftBracket,
-      members: members,
-      rightBracket: rightBracket,
     );
   }
 }
@@ -6863,6 +6864,7 @@
   Token? augmentKeyword;
   Token? externalKeyword;
   Token? finalConstOrVarKeyword;
+  Token? newKeyword;
   Token? staticKeyword;
   Token? covariantKeyword;
   Token? requiredToken;
@@ -6875,6 +6877,7 @@
       abstractKeyword,
       externalKeyword,
       finalConstOrVarKeyword,
+      newKeyword,
       staticKeyword,
       covariantKeyword,
       requiredToken,
diff --git a/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart b/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
index 9e61a46..ef03475 100644
--- a/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/doc_comment_builder.dart
@@ -17,7 +17,7 @@
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/fasta/ast_builder.dart';
 
 /// Given a comment reference without a closing `]`, search for a possible
@@ -206,7 +206,7 @@
             _diagnosticReporter?.atOffset(
               offset: openingTag.offset,
               length: openingTag.end - openingTag.offset,
-              diagnosticCode: WarningCode.docDirectiveMissingClosingTag,
+              diagnosticCode: diag.docDirectiveMissingClosingTag,
               arguments: [openingTag.type.opposingName!],
             );
           }
@@ -223,7 +223,7 @@
     _diagnosticReporter?.atOffset(
       offset: closingTag.offset,
       length: closingTag.end - closingTag.offset,
-      diagnosticCode: WarningCode.docDirectiveMissingOpeningTag,
+      diagnosticCode: diag.docDirectiveMissingOpeningTag,
       arguments: [closingTag.type.name],
     );
     _pushDocDirective(SimpleDocDirective(closingTag));
@@ -305,7 +305,7 @@
         _diagnosticReporter?.atOffset(
           offset: openingTag.offset,
           length: openingTag.end - openingTag.offset,
-          diagnosticCode: WarningCode.docDirectiveMissingClosingTag,
+          diagnosticCode: diag.docDirectiveMissingClosingTag,
           arguments: [openingTag.type.opposingName!],
         );
       }
@@ -396,7 +396,7 @@
     _diagnosticReporter?.atOffset(
       offset: _characterSequence._offset + nameIndex,
       length: nameEnd - nameIndex,
-      diagnosticCode: WarningCode.docDirectiveUnknown,
+      diagnosticCode: diag.docDirectiveUnknown,
       arguments: [name],
     );
     return false;
@@ -1218,7 +1218,7 @@
     _diagnosticReporter?.atOffset(
       offset: _offset + index - 1,
       length: 1,
-      diagnosticCode: WarningCode.docDirectiveMissingClosingBrace,
+      diagnosticCode: diag.docDirectiveMissingClosingBrace,
     );
     return (positionalArguments, namedArguments);
   }
@@ -1253,7 +1253,7 @@
         _diagnosticReporter?.atOffset(
           offset: _offset + index - 1,
           length: 1,
-          diagnosticCode: WarningCode.docDirectiveMissingClosingBrace,
+          diagnosticCode: diag.docDirectiveMissingClosingBrace,
         );
         break;
       }
@@ -1263,7 +1263,7 @@
     _diagnosticReporter?.atOffset(
       offset: extraArgumentsOffset,
       length: errorLength,
-      diagnosticCode: WarningCode.docDirectiveHasExtraArguments,
+      diagnosticCode: diag.docDirectiveHasExtraArguments,
     );
     _end = _offset + index;
   }
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 6258402..6e4aacc 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -8,9 +8,8 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_code_values.dart';
-import 'package:analyzer/src/error/codes.dart';
 
 /// An error reporter that knows how to convert a Fasta error into an analyzer
 /// error.
@@ -37,28 +36,28 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.asyncForInWrongContext,
+          diagnosticCode: diag.asyncForInWrongContext,
         );
         return;
       case PseudoSharedCode.asyncKeywordUsedAsIdentifier:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.asyncKeywordUsedAsIdentifier,
+          diagnosticCode: diag.asyncKeywordUsedAsIdentifier,
         );
         return;
       case PseudoSharedCode.awaitInWrongContext:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.awaitInWrongContext,
+          diagnosticCode: diag.awaitInWrongContext,
         );
         return;
       case PseudoSharedCode.builtInIdentifierAsType:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.builtInIdentifierAsType,
+          diagnosticCode: diag.builtInIdentifierAsType,
           arguments: [lexeme()],
         );
         return;
@@ -66,7 +65,7 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.constConstructorWithBody,
+          diagnosticCode: diag.constConstructorWithBody,
         );
         return;
       case PseudoSharedCode.constNotInitialized:
@@ -74,7 +73,7 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.constNotInitialized,
+          diagnosticCode: diag.constNotInitialized,
           arguments: [name],
         );
         return;
@@ -82,35 +81,35 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.defaultValueInFunctionType,
+          diagnosticCode: diag.defaultValueInFunctionType,
         );
         return;
       case PseudoSharedCode.expectedClassMember:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.expectedClassMember,
+          diagnosticCode: diag.expectedClassMember,
         );
         return;
       case PseudoSharedCode.expectedExecutable:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.expectedExecutable,
+          diagnosticCode: diag.expectedExecutable,
         );
         return;
       case PseudoSharedCode.expectedStringLiteral:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.expectedStringLiteral,
+          diagnosticCode: diag.expectedStringLiteral,
         );
         return;
       case PseudoSharedCode.expectedToken:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.expectedToken,
+          diagnosticCode: diag.expectedToken,
           arguments: [arguments['string'] as Object],
         );
         return;
@@ -118,7 +117,7 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.expectedTypeName,
+          diagnosticCode: diag.expectedTypeName,
         );
         return;
       case PseudoSharedCode.extensionDeclaresInstanceField:
@@ -130,7 +129,7 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.finalNotInitialized,
+          diagnosticCode: diag.finalNotInitialized,
           arguments: [name],
         );
         return;
@@ -138,35 +137,35 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.getterWithParameters,
+          diagnosticCode: diag.getterWithParameters,
         );
         return;
       case PseudoSharedCode.illegalCharacter:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ScannerErrorCode.illegalCharacter,
+          diagnosticCode: diag.illegalCharacter,
         );
         return;
       case PseudoSharedCode.invalidInlineFunctionType:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.invalidInlineFunctionType,
+          diagnosticCode: diag.invalidInlineFunctionType,
         );
         return;
       case PseudoSharedCode.invalidLiteralInConfiguration:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.invalidLiteralInConfiguration,
+          diagnosticCode: diag.invalidLiteralInConfiguration,
         );
         return;
       case PseudoSharedCode.invalidCodePoint:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.invalidCodePoint,
+          diagnosticCode: diag.invalidCodePoint,
           arguments: ['\\u{...}'],
         );
         return;
@@ -174,13 +173,13 @@
         _reportByCode(
           offset: offset,
           length: length,
-          code: CompileTimeErrorCode.invalidModifierOnSetter,
+          code: diag.invalidModifierOnSetter,
           message: message,
         );
         return;
       case PseudoSharedCode.missingDigit:
         diagnosticReporter?.atOffset(
-          diagnosticCode: ScannerErrorCode.missingDigit,
+          diagnosticCode: diag.missingDigit,
           offset: offset,
           length: length,
         );
@@ -189,119 +188,119 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingEnumBody,
+          diagnosticCode: diag.missingEnumBody,
         );
         return;
       case PseudoSharedCode.missingFunctionBody:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingFunctionBody,
+          diagnosticCode: diag.missingFunctionBody,
         );
         return;
       case PseudoSharedCode.missingFunctionParameters:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingFunctionParameters,
+          diagnosticCode: diag.missingFunctionParameters,
         );
         return;
       case PseudoSharedCode.missingHexDigit:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ScannerErrorCode.missingHexDigit,
+          diagnosticCode: diag.missingHexDigit,
         );
         return;
       case PseudoSharedCode.missingIdentifier:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingIdentifier,
+          diagnosticCode: diag.missingIdentifier,
         );
         return;
       case PseudoSharedCode.missingMethodParameters:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingMethodParameters,
+          diagnosticCode: diag.missingMethodParameters,
         );
         return;
       case PseudoSharedCode.missingStarAfterSync:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingStarAfterSync,
+          diagnosticCode: diag.missingStarAfterSync,
         );
         return;
       case PseudoSharedCode.missingTypedefParameters:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.missingTypedefParameters,
+          diagnosticCode: diag.missingTypedefParameters,
         );
         return;
       case PseudoSharedCode.multipleImplementsClauses:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.multipleImplementsClauses,
+          diagnosticCode: diag.multipleImplementsClauses,
         );
         return;
       case PseudoSharedCode.namedFunctionExpression:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.namedFunctionExpression,
+          diagnosticCode: diag.namedFunctionExpression,
         );
         return;
       case PseudoSharedCode.namedParameterOutsideGroup:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.namedParameterOutsideGroup,
+          diagnosticCode: diag.namedParameterOutsideGroup,
         );
         return;
       case PseudoSharedCode.nonPartOfDirectiveInPart:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.nonPartOfDirectiveInPart,
+          diagnosticCode: diag.nonPartOfDirectiveInPart,
         );
         return;
       case PseudoSharedCode.nonSyncFactory:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.nonSyncFactory,
+          diagnosticCode: diag.nonSyncFactory,
         );
         return;
       case PseudoSharedCode.positionalAfterNamedArgument:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.positionalAfterNamedArgument,
+          diagnosticCode: diag.positionalAfterNamedArgument,
         );
         return;
       case PseudoSharedCode.returnInGenerator:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: CompileTimeErrorCode.returnInGenerator,
+          diagnosticCode: diag.returnInGenerator,
         );
         return;
       case PseudoSharedCode.unexpectedDollarInString:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ScannerErrorCode.unexpectedDollarInString,
+          diagnosticCode: diag.unexpectedDollarInString,
         );
         return;
       case PseudoSharedCode.unexpectedToken:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.unexpectedToken,
+          diagnosticCode: diag.unexpectedToken,
           arguments: [lexeme()],
         );
         return;
@@ -309,21 +308,21 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ScannerErrorCode.unterminatedMultiLineComment,
+          diagnosticCode: diag.unterminatedMultiLineComment,
         );
         return;
       case PseudoSharedCode.unterminatedStringLiteral:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ScannerErrorCode.unterminatedStringLiteral,
+          diagnosticCode: diag.unterminatedStringLiteral,
         );
         return;
       case PseudoSharedCode.wrongSeparatorForPositionalParameter:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.wrongSeparatorForPositionalParameter,
+          diagnosticCode: diag.wrongSeparatorForPositionalParameter,
         );
         return;
       case PseudoSharedCode.yieldInNonGenerator:
@@ -336,14 +335,14 @@
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.privateOptionalParameter,
+          diagnosticCode: diag.privateOptionalParameter,
         );
         return;
       case PseudoSharedCode.privateNamedNonFieldParameter:
         diagnosticReporter?.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode: ParserErrorCode.privateNamedNonFieldParameter,
+          diagnosticCode: diag.privateNamedNonFieldParameter,
         );
         return;
       case PseudoSharedCode.nonSyncAbstractMethod:
diff --git a/pkg/analyzer/lib/src/fine/manifest_item.dart b/pkg/analyzer/lib/src/fine/manifest_item.dart
index ffd95fd..fd6e6bb 100644
--- a/pkg/analyzer/lib/src/fine/manifest_item.dart
+++ b/pkg/analyzer/lib/src/fine/manifest_item.dart
@@ -183,7 +183,12 @@
     return context.withFormalParameters(element.formalParameters, () {
       return super.match(context, element) &&
           flags.isConst == element.isConst &&
+          flags.isDeclaring == element.isDeclaring &&
           flags.isFactory == element.isFactory &&
+          flags.isOriginDeclaration == element.isOriginDeclaration &&
+          flags.isOriginImplicitDefault == element.isOriginImplicitDefault &&
+          flags.isOriginMixinApplication == element.isOriginMixinApplication &&
+          flags.isPrimary == element.isPrimary &&
           constantInitializers.match(context, element.constantInitializers) &&
           redirectedConstructor.match(context, element.redirectedConstructor) &&
           superConstructor.match(context, element.superConstructor);
@@ -489,6 +494,7 @@
     required super.metadata,
     required super.type,
     required super.constInitializer,
+    required super.typeInferenceError,
   });
 
   factory FieldItem.fromElement({
@@ -502,6 +508,7 @@
       metadata: ManifestMetadata.encode(context, element.metadata),
       type: element.type.encode(context),
       constInitializer: element.constantInitializer?.encode(context),
+      typeInferenceError: element.typeInferenceError,
     );
   }
 
@@ -512,6 +519,7 @@
       metadata: ManifestMetadata.read(reader),
       type: ManifestType.read(reader),
       constInitializer: ManifestNode.readOptional(reader),
+      typeInferenceError: TopLevelInferenceError.readOptional(reader),
     );
   }
 
@@ -527,6 +535,11 @@
         flags.isCovariant == element.isCovariant &&
         flags.isEnumConstant == element.isEnumConstant &&
         flags.isExternal == element.isExternal &&
+        flags.isOriginDeclaration == element.isOriginDeclaration &&
+        flags.isOriginDeclaringFormalParameter ==
+            element.isOriginDeclaringFormalParameter &&
+        flags.isOriginEnumValues == element.isOriginEnumValues &&
+        flags.isOriginGetterSetter == element.isOriginGetterSetter &&
         flags.isPromotable == element.isPromotable;
   }
 
@@ -538,7 +551,7 @@
   }
 }
 
-class GetterItem extends ExecutableItem<GetterElementImpl> {
+class GetterItem extends PropertyAccessorItem<GetterElementImpl> {
   GetterItem({
     required super.id,
     required super.flags,
@@ -553,7 +566,7 @@
   }) {
     return GetterItem(
       id: id,
-      flags: _ExecutableItemFlags.encode(element),
+      flags: _PropertyAccessorItemFlags.encode(element),
       metadata: ManifestMetadata.encode(
         context,
         element.thisOrVariableMetadata,
@@ -565,7 +578,7 @@
   factory GetterItem.read(BinaryReader reader) {
     return GetterItem(
       id: ManifestItemId.read(reader),
-      flags: _ExecutableItemFlags.read(reader),
+      flags: _PropertyAccessorItemFlags.read(reader),
       metadata: ManifestMetadata.read(reader),
       functionType: ManifestFunctionType.read(reader),
     );
@@ -1360,7 +1373,29 @@
   }
 }
 
-class SetterItem extends ExecutableItem<SetterElementImpl> {
+sealed class PropertyAccessorItem<E extends PropertyAccessorElementImpl>
+    extends ExecutableItem<E> {
+  PropertyAccessorItem({
+    required super.id,
+    required _PropertyAccessorItemFlags super.flags,
+    required super.metadata,
+    required super.functionType,
+  });
+
+  @override
+  _PropertyAccessorItemFlags get flags =>
+      super.flags as _PropertyAccessorItemFlags;
+
+  @override
+  bool match(MatchContext context, E element) {
+    return super.match(context, element) &&
+        flags.isOriginDeclaration == element.isOriginDeclaration &&
+        flags.isOriginInterface == element.isOriginInterface &&
+        flags.isOriginVariable == element.isOriginVariable;
+  }
+}
+
+class SetterItem extends PropertyAccessorItem<SetterElementImpl> {
   SetterItem({
     required super.id,
     required super.flags,
@@ -1375,7 +1410,7 @@
   }) {
     return SetterItem(
       id: id,
-      flags: _ExecutableItemFlags.encode(element),
+      flags: _PropertyAccessorItemFlags.encode(element),
       metadata: ManifestMetadata.encode(
         context,
         element.thisOrVariableMetadata,
@@ -1387,7 +1422,7 @@
   factory SetterItem.read(BinaryReader reader) {
     return SetterItem(
       id: ManifestItemId.read(reader),
-      flags: _ExecutableItemFlags.read(reader),
+      flags: _PropertyAccessorItemFlags.read(reader),
       metadata: ManifestMetadata.read(reader),
       functionType: ManifestFunctionType.read(reader),
     );
@@ -1439,6 +1474,7 @@
     required super.metadata,
     required super.type,
     required super.constInitializer,
+    required super.typeInferenceError,
   });
 
   factory TopLevelVariableItem.fromElement({
@@ -1452,6 +1488,7 @@
       metadata: ManifestMetadata.encode(context, element.metadata),
       type: element.type.encode(context),
       constInitializer: element.constantInitializer?.encode(context),
+      typeInferenceError: element.typeInferenceError,
     );
   }
 
@@ -1462,6 +1499,7 @@
       metadata: ManifestMetadata.read(reader),
       type: ManifestType.read(reader),
       constInitializer: ManifestNode.readOptional(reader),
+      typeInferenceError: TopLevelInferenceError.readOptional(reader),
     );
   }
 
@@ -1472,7 +1510,9 @@
   @override
   bool match(MatchContext context, TopLevelVariableElementImpl element) {
     return super.match(context, element) &&
-        flags.isExternal == element.isExternal;
+        flags.isExternal == element.isExternal &&
+        flags.isOriginDeclaration == element.isOriginDeclaration &&
+        flags.isOriginGetterSetter == element.isOriginGetterSetter;
   }
 }
 
@@ -1539,6 +1579,7 @@
     extends ManifestItem<E> {
   final ManifestType type;
   final ManifestNode? constInitializer;
+  final TopLevelInferenceError? typeInferenceError;
 
   VariableItem({
     required super.id,
@@ -1546,6 +1587,7 @@
     required super.metadata,
     required this.type,
     required this.constInitializer,
+    required this.typeInferenceError,
   });
 
   @override
@@ -1563,7 +1605,8 @@
         flags.shouldUseTypeForInitializerInference ==
             element.shouldUseTypeForInitializerInference &&
         type.match(context, element.type) &&
-        constInitializer.match(context, element.constantInitializer);
+        constInitializer.match(context, element.constantInitializer) &&
+        typeInferenceError == element.typeInferenceError;
   }
 
   @override
@@ -1571,6 +1614,7 @@
     super.write(writer);
     type.write(writer);
     constInitializer.writeOptional(writer);
+    typeInferenceError.writeOptional(writer);
   }
 }
 
@@ -1584,7 +1628,15 @@
   isSealed,
 }
 
-enum _ConstructorItemFlag { isConst, isFactory }
+enum _ConstructorItemFlag {
+  isConst,
+  isDeclaring,
+  isFactory,
+  isOriginDeclaration,
+  isOriginImplicitDefault,
+  isOriginMixinApplication,
+  isPrimary,
+}
 
 enum _ExecutableItemFlag {
   hasEnclosingTypeParameterReference,
@@ -1608,6 +1660,10 @@
   isCovariant,
   isEnumConstant,
   isExternal,
+  isOriginDeclaration,
+  isOriginDeclaringFormalParameter,
+  isOriginEnumValues,
+  isOriginGetterSetter,
   isPromotable,
 }
 
@@ -1621,7 +1677,17 @@
 
 enum _MixinItemFlag { isBase }
 
-enum _TopLevelVariableItemFlag { isExternal }
+enum _PropertyAccessorItemFlag {
+  isOriginDeclaration,
+  isOriginInterface,
+  isOriginVariable,
+}
+
+enum _TopLevelVariableItemFlag {
+  isExternal,
+  isOriginDeclaration,
+  isOriginGetterSetter,
+}
 
 enum _TypeAliasItemFlag { isProperRename, isSimplyBounded }
 
@@ -1720,9 +1786,24 @@
     if (element.isConst) {
       bits |= _maskFor(_ConstructorItemFlag.isConst);
     }
+    if (element.isDeclaring) {
+      bits |= _maskFor(_ConstructorItemFlag.isDeclaring);
+    }
     if (element.isFactory) {
       bits |= _maskFor(_ConstructorItemFlag.isFactory);
     }
+    if (element.isOriginDeclaration) {
+      bits |= _maskFor(_ConstructorItemFlag.isOriginDeclaration);
+    }
+    if (element.isOriginImplicitDefault) {
+      bits |= _maskFor(_ConstructorItemFlag.isOriginImplicitDefault);
+    }
+    if (element.isOriginMixinApplication) {
+      bits |= _maskFor(_ConstructorItemFlag.isOriginMixinApplication);
+    }
+    if (element.isPrimary) {
+      bits |= _maskFor(_ConstructorItemFlag.isPrimary);
+    }
     return _ConstructorItemFlags._(bits);
   }
 
@@ -1734,10 +1815,30 @@
     return _has(_ConstructorItemFlag.isConst);
   }
 
+  bool get isDeclaring {
+    return _has(_ConstructorItemFlag.isDeclaring);
+  }
+
   bool get isFactory {
     return _has(_ConstructorItemFlag.isFactory);
   }
 
+  bool get isOriginDeclaration {
+    return _has(_ConstructorItemFlag.isOriginDeclaration);
+  }
+
+  bool get isOriginImplicitDefault {
+    return _has(_ConstructorItemFlag.isOriginImplicitDefault);
+  }
+
+  bool get isOriginMixinApplication {
+    return _has(_ConstructorItemFlag.isOriginMixinApplication);
+  }
+
+  bool get isPrimary {
+    return _has(_ConstructorItemFlag.isPrimary);
+  }
+
   void write(BinaryWriter writer) {
     writer.writeUint30(_bits);
   }
@@ -1899,6 +2000,18 @@
     if (element.isExternal) {
       bits |= _maskFor(_FieldItemFlag.isExternal);
     }
+    if (element.isOriginDeclaration) {
+      bits |= _maskFor(_FieldItemFlag.isOriginDeclaration);
+    }
+    if (element.isOriginDeclaringFormalParameter) {
+      bits |= _maskFor(_FieldItemFlag.isOriginDeclaringFormalParameter);
+    }
+    if (element.isOriginEnumValues) {
+      bits |= _maskFor(_FieldItemFlag.isOriginEnumValues);
+    }
+    if (element.isOriginGetterSetter) {
+      bits |= _maskFor(_FieldItemFlag.isOriginGetterSetter);
+    }
     if (element.isPromotable) {
       bits |= _maskFor(_FieldItemFlag.isPromotable);
     }
@@ -1929,6 +2042,22 @@
     return _has(_FieldItemFlag.isExternal);
   }
 
+  bool get isOriginDeclaration {
+    return _has(_FieldItemFlag.isOriginDeclaration);
+  }
+
+  bool get isOriginDeclaringFormalParameter {
+    return _has(_FieldItemFlag.isOriginDeclaringFormalParameter);
+  }
+
+  bool get isOriginEnumValues {
+    return _has(_FieldItemFlag.isOriginEnumValues);
+  }
+
+  bool get isOriginGetterSetter {
+    return _has(_FieldItemFlag.isOriginGetterSetter);
+  }
+
   bool get isPromotable {
     return _has(_FieldItemFlag.isPromotable);
   }
@@ -2110,6 +2239,57 @@
   }
 }
 
+extension type _PropertyAccessorItemFlags._(int _bits)
+    implements _ExecutableItemFlags {
+  static final int _base = _ExecutableItemFlags._next;
+
+  factory _PropertyAccessorItemFlags.encode(
+    PropertyAccessorElementImpl element,
+  ) {
+    var bits = _ExecutableItemFlags.encode(element)._bits;
+    if (element.isOriginDeclaration) {
+      bits |= _maskFor(_PropertyAccessorItemFlag.isOriginDeclaration);
+    }
+    if (element.isOriginInterface) {
+      bits |= _maskFor(_PropertyAccessorItemFlag.isOriginInterface);
+    }
+    if (element.isOriginVariable) {
+      bits |= _maskFor(_PropertyAccessorItemFlag.isOriginVariable);
+    }
+    return _PropertyAccessorItemFlags._(bits);
+  }
+
+  factory _PropertyAccessorItemFlags.read(BinaryReader reader) {
+    return _PropertyAccessorItemFlags._(reader.readUint30());
+  }
+
+  bool get isOriginDeclaration {
+    return _has(_PropertyAccessorItemFlag.isOriginDeclaration);
+  }
+
+  bool get isOriginInterface {
+    return _has(_PropertyAccessorItemFlag.isOriginInterface);
+  }
+
+  bool get isOriginVariable {
+    return _has(_PropertyAccessorItemFlag.isOriginVariable);
+  }
+
+  void write(BinaryWriter writer) {
+    writer.writeUint30(_bits);
+  }
+
+  bool _has(_PropertyAccessorItemFlag flag) {
+    return (_bits & _maskFor(flag)) != 0;
+  }
+
+  static int _maskFor(_PropertyAccessorItemFlag flag) {
+    var bit = _base + flag.index;
+    assert(bit < 30);
+    return 1 << bit;
+  }
+}
+
 extension type _TopLevelVariableItemFlags._(int _bits)
     implements _VariableItemFlags {
   static final int _base = _VariableItemFlags._next;
@@ -2121,6 +2301,12 @@
     if (element.isExternal) {
       bits |= _maskFor(_TopLevelVariableItemFlag.isExternal);
     }
+    if (element.isOriginDeclaration) {
+      bits |= _maskFor(_TopLevelVariableItemFlag.isOriginDeclaration);
+    }
+    if (element.isOriginGetterSetter) {
+      bits |= _maskFor(_TopLevelVariableItemFlag.isOriginGetterSetter);
+    }
     return _TopLevelVariableItemFlags._(bits);
   }
 
@@ -2132,6 +2318,14 @@
     return _has(_TopLevelVariableItemFlag.isExternal);
   }
 
+  bool get isOriginDeclaration {
+    return _has(_TopLevelVariableItemFlag.isOriginDeclaration);
+  }
+
+  bool get isOriginGetterSetter {
+    return _has(_TopLevelVariableItemFlag.isOriginGetterSetter);
+  }
+
   void write(BinaryWriter writer) {
     writer.writeUint30(_bits);
   }
@@ -2362,7 +2556,7 @@
 
 extension _PropertyAccessExtension on PropertyAccessorElementImpl {
   MetadataImpl get thisOrVariableMetadata {
-    if (isSynthetic) {
+    if (isOriginVariable) {
       return variable.metadata;
     } else {
       return metadata;
diff --git a/pkg/analyzer/lib/src/fine/requirement_failure.dart b/pkg/analyzer/lib/src/fine/requirement_failure.dart
index 3adb1bc..b90bdb1 100644
--- a/pkg/analyzer/lib/src/fine/requirement_failure.dart
+++ b/pkg/analyzer/lib/src/fine/requirement_failure.dart
@@ -23,6 +23,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.exportCountMismatch;
+  }
+
+  @override
   String toString() {
     return 'ExportCountMismatch(fragmentUri: $fragmentUri, '
         'exportedUri: $exportedUri, '
@@ -43,6 +48,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.exportedExtensionsMismatch;
+  }
+
+  @override
   String toString() {
     return 'ExportedExtensionsMismatch(libraryUri: $libraryUri, '
         'expectedIds: $expectedIds, actualIds: $actualIds)';
@@ -67,6 +77,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.exportIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'ExportIdMismatch(fragmentUri: $fragmentUri, '
         'exportedUri: $exportedUri, '
@@ -82,6 +97,11 @@
   ExportLibraryMissing({required this.uri});
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.exportLibraryMissing;
+  }
+
+  @override
   String toString() {
     return 'ExportLibraryMissing(uri: $uri)';
   }
@@ -103,6 +123,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.implementedMethodIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'ImplementedMethodIdMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -127,6 +152,14 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.instanceChildrenIdsMismatch;
+  }
+
+  @override
+  String get statisticKey => '$runtimeType.$childrenPropertyName';
+
+  @override
   String toString() {
     return 'InstanceChildrenIdsMismatch(libraryUri: $libraryUri, '
         'instanceName: ${instanceName.asString}, '
@@ -151,6 +184,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.instanceFieldIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'InstanceFieldIdMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -176,6 +214,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.instanceMethodIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'InstanceMethodIdMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -200,6 +243,14 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.interfaceChildrenIdsMismatch;
+  }
+
+  @override
+  String get statisticKey => '$runtimeType.$childrenPropertyName';
+
+  @override
   String toString() {
     return 'InterfaceChildrenIdsMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -224,6 +275,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.interfaceConstructorIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'InterfaceConstructorIdMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -247,6 +303,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.interfaceHasNonFinalFieldMismatch;
+  }
+
+  @override
   String toString() {
     return 'InterfaceHasNonFinalFieldMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -269,6 +330,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.interfaceIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'InterfaceIdMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -291,6 +357,14 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryChildrenIdsMismatch;
+  }
+
+  @override
+  String get statisticKey => '$runtimeType.$childrenPropertyName';
+
+  @override
   String toString() {
     return 'LibraryChildrenIdsMismatch(libraryUri: $libraryUri, '
         'childrenPropertyName: $childrenPropertyName, '
@@ -310,6 +384,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryExportedUrisMismatch;
+  }
+
+  @override
   String toString() {
     return 'LibraryExportedUrisMismatch(libraryUri: $libraryUri, '
         'expected: $expected, actual: $actual)';
@@ -328,6 +407,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryFeatureSetMismatch;
+  }
+
+  @override
   String toString() {
     return 'LibraryFeatureSetMismatch(libraryUri: $libraryUri, '
         'expected: $expected, actual: $actual)';
@@ -346,6 +430,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryIsSyntheticMismatch;
+  }
+
+  @override
   String toString() {
     return 'LibraryIsSyntheticMismatch(libraryUri: $libraryUri, '
         'expected: $expected, actual: $actual)';
@@ -364,6 +453,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryLanguageVersionMismatch;
+  }
+
+  @override
   String toString() {
     return 'LibraryLanguageVersionMismatch(libraryUri: $libraryUri, '
         'expected: $expected, actual: $actual)';
@@ -376,6 +470,11 @@
   LibraryMetadataMismatch({required this.libraryUri});
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryMetadataMismatch;
+  }
+
+  @override
   String toString() => 'LibraryMetadataMismatch(libraryUri: $libraryUri)';
 }
 
@@ -385,6 +484,11 @@
   LibraryMissing({required this.uri});
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryMissing;
+  }
+
+  @override
   String toString() {
     return 'LibraryMissing(uri: $uri)';
   }
@@ -402,6 +506,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.libraryNameMismatch;
+  }
+
+  @override
   String toString() {
     return 'LibraryNameMismatch(libraryUri: $libraryUri, '
         'expected: $expected, actual: $actual)';
@@ -409,13 +518,22 @@
 }
 
 final class OpaqueApiUseFailure extends RequirementFailure {
+  @override
+  final RequirementFailureKindId kindId;
+
   final List<OpaqueApiUse> uses;
 
-  OpaqueApiUseFailure({required this.uses});
+  OpaqueApiUseFailure({required this.kindId, required this.uses});
+
+  @override
+  String get statisticKey {
+    var use = uses.first;
+    return '$runtimeType.${use.targetRuntimeType}.${use.methodName}';
+  }
 
   @override
   String toString() {
-    return 'OpaqueApiUseFailure(uses: $uses)';
+    return 'OpaqueApiUseFailure(kindId: $kindId, uses: $uses)';
   }
 }
 
@@ -433,13 +551,76 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.reExportDeprecatedOnlyMismatch;
+  }
+
+  @override
   String toString() {
     return 'ReExportDeprecatedOnlyMismatch(libraryUri: $libraryUri, '
         'name: ${name.asString}, expected: $expected, actual: $actual)';
   }
 }
 
-sealed class RequirementFailure {}
+sealed class RequirementFailure {
+  RequirementFailureKindId get kindId;
+
+  String get statisticKey => '$runtimeType';
+}
+
+enum RequirementFailureKindId {
+  exportCountMismatch(0),
+  exportIdMismatch(1),
+  exportLibraryMissing(2),
+  exportedExtensionsMismatch(3),
+  implementedMethodIdMismatch(4),
+  instanceChildrenIdsMismatch(5),
+  instanceFieldIdMismatch(6),
+  instanceGetterIdMismatch(7),
+  instanceMethodIdMismatch(8),
+  interfaceChildrenIdsMismatch(9),
+  interfaceConstructorIdMismatch(10),
+  interfaceHasNonFinalFieldMismatch(11),
+  interfaceIdMismatch(12),
+  libraryChildrenIdsMismatch(13),
+  libraryExportedUrisMismatch(14),
+  libraryFeatureSetMismatch(15),
+  libraryIsSyntheticMismatch(16),
+  libraryLanguageVersionMismatch(17),
+  libraryMetadataMismatch(18),
+  libraryMissing(19),
+  libraryNameMismatch(20),
+  opaqueAccept(21),
+  opaqueContext(22),
+  opaqueDocumentationComment(23),
+  opaqueFieldNameNonPromotabilityInfo(24),
+  opaqueFirstFragment(25),
+  opaqueFragments(26),
+  opaqueGetInheritedMember(27),
+  opaqueGetOverridden(28),
+  opaqueInheritedConcreteMembers(29),
+  opaqueInheritedMembers(30),
+  opaqueInterfaceMembers(31),
+  opaqueLastFragment(32),
+  opaqueLookUpGetter(33),
+  opaqueLookUpInheritedMethod(34),
+  opaqueLookUpMethod(35),
+  opaqueLookUpSetter(36),
+  opaqueNameLength(37),
+  opaqueNameOffset(38),
+  opaquePublicNamespace(39),
+  opaqueSession(40),
+  opaqueVisitChildren(41),
+  reExportDeprecatedOnlyMismatch(42),
+  superImplementedMethodIdMismatch(43),
+  topLevelIdMismatch(44),
+  topLevelNotInstance(45),
+  topLevelNotInterface(46);
+
+  final int id;
+
+  const RequirementFailureKindId(this.id);
+}
 
 class SuperImplementedMethodIdMismatch extends RequirementFailure {
   final Uri libraryUri;
@@ -459,6 +640,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.superImplementedMethodIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'SuperImplementedMethodIdMismatch(libraryUri: $libraryUri, '
         'interfaceName: ${interfaceName.asString}, '
@@ -487,6 +673,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.topLevelIdMismatch;
+  }
+
+  @override
   String toString() {
     return 'TopLevelIdMismatch(libraryUri: $libraryUri, '
         'name: ${name.asString}, '
@@ -505,6 +696,11 @@
   });
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.topLevelNotInstance;
+  }
+
+  @override
   String toString() {
     return 'TopLevelNotInstance(libraryUri: $libraryUri, '
         'name: ${name.asString})';
@@ -515,6 +711,11 @@
   TopLevelNotInterface({required super.libraryUri, required super.name});
 
   @override
+  RequirementFailureKindId get kindId {
+    return RequirementFailureKindId.topLevelNotInterface;
+  }
+
+  @override
   String toString() {
     return 'TopLevelNotInterface(libraryUri: $libraryUri, '
         'name: ${name.asString})';
diff --git a/pkg/analyzer/lib/src/fine/requirements.dart b/pkg/analyzer/lib/src/fine/requirements.dart
index e9c2408..ba7e61f 100644
--- a/pkg/analyzer/lib/src/fine/requirements.dart
+++ b/pkg/analyzer/lib/src/fine/requirements.dart
@@ -795,12 +795,14 @@
 /// dependencies. If such API is used, we have to decide that the requirements
 /// are not satisfied, because we don't know for sure.
 class OpaqueApiUse {
+  final RequirementFailureKindId kindId;
   final String targetRuntimeType;
   final String methodName;
   final Uri? targetElementLibraryUri;
   final String? targetElementName;
 
   OpaqueApiUse({
+    required this.kindId,
     required this.targetRuntimeType,
     required this.methodName,
     this.targetElementLibraryUri,
@@ -809,6 +811,7 @@
 
   factory OpaqueApiUse.read(BinaryReader reader) {
     return OpaqueApiUse(
+      kindId: reader.readEnum(RequirementFailureKindId.values),
       targetRuntimeType: reader.readStringUtf8(),
       methodName: reader.readStringUtf8(),
       targetElementLibraryUri: reader.readOptionalObject(
@@ -819,6 +822,7 @@
   }
 
   void write(BinaryWriter writer) {
+    writer.writeEnum(kindId);
     writer.writeStringUtf8(targetRuntimeType);
     writer.writeStringUtf8(methodName);
     writer.writeOptionalObject(
@@ -951,7 +955,10 @@
     required OperationPerformanceImpl performance,
   }) {
     if (opaqueApiUses.isNotEmpty) {
-      return OpaqueApiUseFailure(uses: opaqueApiUses);
+      return OpaqueApiUseFailure(
+        kindId: opaqueApiUses.first.kindId,
+        uses: opaqueApiUses,
+      );
     }
 
     for (var libraryEntry in libraries.entries) {
@@ -2513,7 +2520,11 @@
     }
   }
 
-  void recordOpaqueApiUse(Object target, String method) {
+  void recordOpaqueApiUse({
+    required RequirementFailureKindId kindId,
+    required Object target,
+    required String method,
+  }) {
     if (_recordingLockLevel != 0) {
       return;
     }
@@ -2528,22 +2539,18 @@
       }
     }
 
-    untracked(
-      reason: 'We are recording failure',
-      operation: () {
-        // TODO(scheglov): remove after adding all tracking
-        // print('[${target.runtimeType}.$method]');
-        // print(StackTrace.current);
+    // TODO(scheglov): remove after adding all tracking
+    // print('[${target.runtimeType}.$method]');
+    // print(StackTrace.current);
 
-        opaqueApiUses.add(
-          OpaqueApiUse(
-            targetRuntimeType: target.runtimeType.toString(),
-            methodName: method,
-            targetElementName: targetElementName,
-            targetElementLibraryUri: targetElementLibraryUri,
-          ),
-        );
-      },
+    opaqueApiUses.add(
+      OpaqueApiUse(
+        kindId: kindId,
+        targetRuntimeType: target.runtimeType.toString(),
+        methodName: method,
+        targetElementName: targetElementName,
+        targetElementLibraryUri: targetElementLibraryUri,
+      ),
     );
   }
 
@@ -2612,6 +2619,7 @@
 
     return RequirementsManifestDigest(
       bundleId: bundleId,
+      hasOpaqueApiUses: opaqueApiUses.isNotEmpty,
       libraryHashes: libraryHashes,
     );
   }
@@ -2624,9 +2632,12 @@
       writeValue: (library) => library.write(writer),
     );
 
-    writer.writeList(exportRequirements, (export) => export.write(writer));
+    writer.writeList(
+      exportRequirements,
+      (requirements) => requirements.write(writer),
+    );
 
-    writer.writeList(opaqueApiUses, (usage) => usage.write(writer));
+    writer.writeList(opaqueApiUses, (use) => use.write(writer));
   }
 
   _InstanceItemWithRequirements? _getInstanceItem(InstanceElementImpl element) {
@@ -2767,16 +2778,19 @@
   /// Digests are stored separately from bundles.
   final ManifestItemId bundleId;
 
+  final bool hasOpaqueApiUses;
   final Map<Uri, Hash> libraryHashes;
 
   RequirementsManifestDigest({
     required this.bundleId,
+    required this.hasOpaqueApiUses,
     required this.libraryHashes,
   });
 
   factory RequirementsManifestDigest.read(BinaryReader reader) {
     return RequirementsManifestDigest(
       bundleId: ManifestItemId.read(reader),
+      hasOpaqueApiUses: reader.readBool(),
       libraryHashes: reader.readMap(
         readKey: () => reader.readUri(),
         readValue: () => Hash.read(reader),
@@ -2785,6 +2799,10 @@
   }
 
   bool isSatisfied(LinkedElementFactory elementFactory) {
+    if (hasOpaqueApiUses) {
+      return false;
+    }
+
     for (var entry in libraryHashes.entries) {
       var manifest = elementFactory.libraryManifests[entry.key];
       if (manifest == null) {
@@ -2801,6 +2819,7 @@
     var writer = BinaryWriter();
 
     bundleId.write(writer);
+    writer.writeBool(hasOpaqueApiUses);
     writer.writeMap(
       libraryHashes,
       writeKey: (uri) => writer.writeUri(uri),
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 458474c..44b49df 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -12,7 +12,7 @@
 import 'package:analyzer/src/dart/resolver/comment_reference_resolver.dart';
 import 'package:analyzer/src/dart/resolver/method_invocation_resolver.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/super_context.dart';
 
@@ -324,8 +324,6 @@
     }
   }
 
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {}
-
   void visitSimpleFormalParameter(SimpleFormalParameter node) {}
 
   void visitSuperConstructorInvocation(
@@ -348,13 +346,13 @@
       if (name != null) {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.undefinedConstructorInInitializer,
+          diag.undefinedConstructorInInitializer,
           arguments: [superType, name.name],
         );
       } else {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
+          diag.undefinedConstructorInInitializerDefault,
           arguments: [superType],
         );
       }
@@ -367,7 +365,7 @@
           )) {
         _diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.nonGenerativeConstructor,
+          diag.nonGenerativeConstructor,
           arguments: [element],
         );
       }
@@ -402,17 +400,11 @@
     switch (context) {
       case SuperContext.annotation:
       case SuperContext.static:
-        _diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.superInInvalidContext,
-        );
+        _diagnosticReporter.atNode(node, diag.superInInvalidContext);
       case SuperContext.extension:
-        _diagnosticReporter.atNode(node, CompileTimeErrorCode.superInExtension);
+        _diagnosticReporter.atNode(node, diag.superInExtension);
       case SuperContext.extensionType:
-        _diagnosticReporter.atNode(
-          node,
-          CompileTimeErrorCode.superInExtensionType,
-        );
+        _diagnosticReporter.atNode(node, diag.superInExtensionType);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
index 4ec33c7..902a630 100644
--- a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
+++ b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
@@ -20,7 +20,7 @@
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/utilities/extensions/object.dart';
 
 /// Methods useful in detecting errors.  This mixin exists to allow code to be
@@ -63,7 +63,7 @@
   /// Verify that the given [argument] can be assigned to its corresponding
   /// parameter.
   ///
-  /// See [CompileTimeErrorCode.argumentTypeNotAssignable].
+  /// See [diag.argumentTypeNotAssignable].
   void checkForArgumentTypeNotAssignableForArgument(
     ExpressionImpl argument, {
     bool promoteParameterToNullable = false,
@@ -138,13 +138,12 @@
         )) {
           diagnosticReporter.atNode(
             expression,
-            CompileTimeErrorCode
-                .recordLiteralOnePositionalNoTrailingCommaByType,
+            diag.recordLiteralOnePositionalNoTrailingCommaByType,
           );
           return;
         }
       }
-      if (diagnosticCode == CompileTimeErrorCode.argumentTypeNotAssignable) {
+      if (diagnosticCode == diag.argumentTypeNotAssignable) {
         var additionalInfo = <String>[];
         if (expectedStaticType is RecordTypeImpl &&
             actualStaticType is RecordTypeImpl) {
@@ -210,8 +209,8 @@
   /// and initializer expression types. The [fieldElement] is the static element
   /// from the name in the [ConstructorFieldInitializer].
   ///
-  /// See [CompileTimeErrorCode.constFieldInitializerNotAssignable], and
-  /// [CompileTimeErrorCode.fieldInitializerNotAssignable].
+  /// See [diag.constFieldInitializerNotAssignable], and
+  /// [diag.fieldInitializerNotAssignable].
   void checkForFieldInitializerNotAssignable(
     ConstructorFieldInitializerImpl initializer,
     InternalFieldElement fieldElement, {
@@ -244,14 +243,14 @@
       // constant, not the static type.  See dartbug.com/21119.
       diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.constFieldInitializerNotAssignable,
+        diag.constFieldInitializerNotAssignable,
         arguments: [staticType, fieldType],
         contextMessages: messages,
       );
     } else {
       diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.fieldInitializerNotAssignable,
+        diag.fieldInitializerNotAssignable,
         arguments: [staticType, fieldType],
         contextMessages: messages,
       );
@@ -285,7 +284,7 @@
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
   ///
-  /// See [CompileTimeErrorCode.useOfVoidResult].
+  /// See [diag.useOfVoidResult].
   bool checkForUseOfVoidResult(Expression expression) {
     if (!identical(expression.staticType, VoidTypeImpl.instance)) {
       return false;
@@ -293,15 +292,9 @@
 
     if (expression is MethodInvocation) {
       SimpleIdentifier methodName = expression.methodName;
-      diagnosticReporter.atNode(
-        methodName,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      diagnosticReporter.atNode(methodName, diag.useOfVoidResult);
     } else {
-      diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.useOfVoidResult,
-      );
+      diagnosticReporter.atNode(expression, diag.useOfVoidResult);
     }
 
     return true;
@@ -421,7 +414,7 @@
       argument,
       staticParameterType,
       argument.typeOrThrow,
-      CompileTimeErrorCode.argumentTypeNotAssignable,
+      diag.argumentTypeNotAssignable,
       whyNotPromoted: whyNotPromoted,
     );
   }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 8e60623..d95c2e0 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -33,9 +33,9 @@
 import 'package:analyzer/src/dart/element/well_bounded.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/const_argument_verifier.dart';
 import 'package:analyzer/src/error/constructor_fields_verifier.dart';
 import 'package:analyzer/src/error/correct_override.dart';
@@ -50,7 +50,6 @@
 import 'package:analyzer/src/error/use_result_verifier.dart';
 import 'package:analyzer/src/generated/error_detection_helpers.dart';
 import 'package:analyzer/src/generated/java_core.dart';
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
 import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
@@ -58,7 +57,7 @@
 
 /// Check that none of the type [parameters] references itself in its bound.
 ///
-/// See [CompileTimeErrorCode.typeParameterSupertypeOfItsBound].
+/// See [diag.typeParameterSupertypeOfItsBound].
 void checkForTypeParameterBoundRecursion(
   DiagnosticReporter diagnosticReporter,
   List<TypeParameter> parameters,
@@ -89,7 +88,7 @@
           // assume `element.bound` is non-`null`.
           diagnosticReporter.atToken(
             parameter.name,
-            CompileTimeErrorCode.typeParameterSupertypeOfItsBound,
+            diag.typeParameterSupertypeOfItsBound,
             arguments: [element.displayName, element.bound!],
           );
           break;
@@ -408,10 +407,7 @@
   @override
   void visitAwaitExpression(AwaitExpression node) {
     if (!_enclosingExecutable.isAsynchronous) {
-      diagnosticReporter.atToken(
-        node.awaitKeyword,
-        CompileTimeErrorCode.awaitInWrongContext,
-      );
+      diagnosticReporter.atToken(node.awaitKeyword, diag.awaitInWrongContext);
     }
     checkForUseOfVoidResult(node.expression);
     _checkForAwaitInLateLocalVariableInitializer(node);
@@ -467,10 +463,7 @@
     if (labelNode != null) {
       var labelElement = labelNode.element;
       if (labelElement is LabelElementImpl && labelElement.isOnSwitchMember) {
-        diagnosticReporter.atNode(
-          labelNode,
-          CompileTimeErrorCode.breakLabelOnSwitchMember,
-        );
+        diagnosticReporter.atNode(labelNode, diag.breakLabelOnSwitchMember);
       }
     }
   }
@@ -498,11 +491,11 @@
       var declarationElement = augmented.firstFragment;
       _enclosingClass = declarationElement.asElement2;
 
-      List<ClassMember> members = node.members;
+      List<ClassMember> members = node.body.members;
       if (!declarationElement.element.isDartCoreFunction) {
         _checkForBuiltInIdentifierAsName(
-          node.name,
-          CompileTimeErrorCode.builtInIdentifierAsTypeName,
+          node.namePart.typeName,
+          diag.builtInIdentifierAsTypeName,
         );
       }
       _checkForConflictingClassTypeVariableErrorCodes();
@@ -517,6 +510,7 @@
         var moreChecks = _checkClassInheritance(
           declarationElement,
           node,
+          node.namePart.typeName,
           superclass,
           withClause,
           implementsClause,
@@ -542,7 +536,7 @@
         implementsClause: node.implementsClause,
       );
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
-      _checkForMainFunction1(node.name, node.declaredFragment!);
+      _checkForMainFunction1(node.namePart.typeName, node.declaredFragment!);
       _checkForMixinClassErrorCodes(node, members, superclass, withClause);
 
       GetterSetterTypesVerifier(
@@ -565,13 +559,14 @@
 
     _checkForBuiltInIdentifierAsName(
       node.name,
-      CompileTimeErrorCode.builtInIdentifierAsTypedefName,
+      diag.builtInIdentifierAsTypedefName,
     );
     try {
       _enclosingClass = firstFragment.asElement2;
       _checkClassInheritance(
         firstFragment,
         node,
+        node.name,
         node.superclass,
         node.withClause,
         node.implementsClause,
@@ -632,7 +627,7 @@
         _checkForNonConstGenerativeEnumConstructor(node);
         _checkForInvalidModifierOnBody(
           node.body,
-          CompileTimeErrorCode.invalidModifierOnConstructor,
+          diag.invalidModifierOnConstructor,
         );
         if (!_checkForConstConstructorWithNonConstSuper(node)) {
           _checkForConstConstructorWithNonFinalField(node, element);
@@ -645,6 +640,7 @@
         }
         _checkForUndefinedConstructorInInitializerImplicit(node);
         _checkForReturnInGenerativeConstructor(node);
+        _checkForNonRedirectingGenerativeConstructorWithPrimary(node);
         super.visitConstructorDeclaration(node);
       },
       isAsynchronous: fragment.isAsynchronous,
@@ -688,7 +684,7 @@
         defaultValue,
         defaultValue.typeOrThrow,
         node.declaredFragment!.element.type,
-        CompileTimeErrorCode.invalidAssignment,
+        diag.invalidAssignment,
       );
     }
 
@@ -739,8 +735,8 @@
       _enclosingClass = element;
 
       _checkForBuiltInIdentifierAsName(
-        node.name,
-        CompileTimeErrorCode.builtInIdentifierAsTypeName,
+        node.namePart.typeName,
+        diag.builtInIdentifierAsTypeName,
       );
       _checkForConflictingEnumTypeVariableErrorCodes(declaredFragment);
       var implementsClause = node.implementsClause;
@@ -750,6 +746,7 @@
         _checkClassInheritance(
           firstFragment,
           node,
+          node.namePart.typeName,
           null,
           withClause,
           implementsClause,
@@ -759,13 +756,13 @@
       if (!declaredFragment.isAugmentation) {
         if (element.constants.isEmpty) {
           diagnosticReporter.atToken(
-            node.name,
-            CompileTimeErrorCode.enumWithoutConstants,
+            node.namePart.typeName,
+            diag.enumWithoutConstants,
           );
         }
       }
 
-      var members = node.members;
+      var members = node.body.members;
       libraryContext.constructorFieldsVerifier.addConstructors(
         diagnosticReporter,
         element,
@@ -773,7 +770,7 @@
       );
       _checkForFinalNotInitializedInClass(declaredFragment, members);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
-      _checkForMainFunction1(node.name, node.declaredFragment!);
+      _checkForMainFunction1(node.namePart.typeName, node.declaredFragment!);
       _checkForEnumInstantiatedToBoundsIsNotWellBounded(node, declaredElement);
 
       GetterSetterTypesVerifier(
@@ -818,7 +815,7 @@
 
     _enclosingExtension = declaredFragment.asElement2;
     _checkForConflictingExtensionTypeVariableErrorCodes();
-    _checkForFinalNotInitializedInClass(declaredFragment, node.members);
+    _checkForFinalNotInitializedInClass(declaredFragment, node.body.members);
 
     GetterSetterTypesVerifier(
       library: _currentLibrary,
@@ -829,7 +826,7 @@
     if (name != null) {
       _checkForBuiltInIdentifierAsName(
         name,
-        CompileTimeErrorCode.builtInIdentifierAsExtensionName,
+        diag.builtInIdentifierAsExtensionName,
       );
     }
     super.visitExtensionDeclaration(node);
@@ -848,19 +845,22 @@
       _enclosingClass = firstFragment.asElement2;
 
       _checkForBuiltInIdentifierAsName(
-        node.name,
-        CompileTimeErrorCode.builtInIdentifierAsExtensionTypeName,
+        node.primaryConstructor.typeName,
+        diag.builtInIdentifierAsExtensionTypeName,
       );
       _checkForConflictingExtensionTypeTypeVariableErrorCodes(declaredFragment);
 
-      var members = node.members;
+      var members = node.body.members;
       _checkForRepeatedType(
         libraryContext.setOfImplements(firstFragment.asElement2),
         node.implementsClause?.interfaces,
-        CompileTimeErrorCode.implementsRepeated,
+        diag.implementsRepeated,
       );
       _checkForConflictingClassMembers(declaredFragment);
-      _checkForConflictingGenerics(node);
+      _checkForConflictingGenerics(
+        node: node,
+        nameToken: node.primaryConstructor.typeName,
+      );
       libraryContext.constructorFieldsVerifier.addConstructors(
         diagnosticReporter,
         declaredElement,
@@ -904,10 +904,7 @@
         !node.isStatic && !node.fields.isLate;
     if (!_isInStaticVariableDeclaration) {
       if (fields.isConst) {
-        diagnosticReporter.atToken(
-          fields.keyword!,
-          CompileTimeErrorCode.constInstanceField,
-        );
+        diagnosticReporter.atToken(fields.keyword!, diag.constInstanceField);
       }
     }
     var oldHasAccessToThis = _hasAccessToThis;
@@ -951,7 +948,7 @@
       if (loopVariable.isConst) {
         diagnosticReporter.atToken(
           loopVariable.keyword!,
-          CompileTimeErrorCode.forInWithConstVariable,
+          diag.forInWithConstVariable,
         );
       }
     }
@@ -1055,7 +1052,7 @@
   void visitFunctionTypeAlias(covariant FunctionTypeAliasImpl node) {
     _checkForBuiltInIdentifierAsName(
       node.name,
-      CompileTimeErrorCode.builtInIdentifierAsTypedefName,
+      diag.builtInIdentifierAsTypedefName,
     );
     _checkForMainFunction1(node.name, node.declaredFragment!);
     _checkForTypeAliasCannotReferenceItself(
@@ -1084,7 +1081,7 @@
 
     _checkForBuiltInIdentifierAsName(
       node.name,
-      CompileTimeErrorCode.builtInIdentifierAsTypedefName,
+      diag.builtInIdentifierAsTypedefName,
     );
     _checkForMainFunction1(node.name, node.declaredFragment!);
     _checkForTypeAliasCannotReferenceItself(node.name, fragment);
@@ -1105,7 +1102,7 @@
     if (node.prefix != null) {
       _checkForBuiltInIdentifierAsName(
         node.prefix!.token,
-        CompileTimeErrorCode.builtInIdentifierAsPrefixName,
+        diag.builtInIdentifierAsPrefixName,
       );
     }
     if (importElement != null) {
@@ -1284,10 +1281,10 @@
 
       _enclosingClass = declaredElement;
 
-      List<ClassMember> members = node.members;
+      List<ClassMember> members = node.body.members;
       _checkForBuiltInIdentifierAsName(
         node.name,
-        CompileTimeErrorCode.builtInIdentifierAsTypeName,
+        diag.builtInIdentifierAsTypeName,
       );
       _checkForConflictingClassTypeVariableErrorCodes();
 
@@ -1326,7 +1323,7 @@
     // TODO(brianwilkerson): Figure out the right rule for when 'native' is
     // allowed.
     if (!_isInSystemLibrary) {
-      diagnosticReporter.atNode(node, ParserErrorCode.nativeClauseInNonSdkCode);
+      diagnosticReporter.atNode(node, diag.nativeClauseInNonSdkCode);
     }
     super.visitNativeClause(node);
   }
@@ -1514,17 +1511,19 @@
     if (_enclosingClass is ExtensionTypeElement) {
       diagnosticReporter.atToken(
         node.superKeyword,
-        CompileTimeErrorCode.extensionTypeConstructorWithSuperFormalParameter,
+        diag.extensionTypeConstructorWithSuperFormalParameter,
       );
       return;
     }
 
     var constructor = node.parentFormalParameterList.parent;
-    if (!(constructor is ConstructorDeclaration &&
-        constructor.isNonRedirectingGenerative)) {
+    if (constructor is ConstructorDeclaration &&
+        constructor.isNonRedirectingGenerative) {
+    } else if (constructor is PrimaryConstructorDeclaration) {
+    } else {
       diagnosticReporter.atToken(
         node.superKeyword,
-        CompileTimeErrorCode.invalidSuperFormalParameterLocation,
+        diag.invalidSuperFormalParameterLocation,
       );
       return;
     }
@@ -1537,9 +1536,8 @@
       diagnosticReporter.atToken(
         node.name,
         node.isNamed
-            ? CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed
-            : CompileTimeErrorCode
-                  .superFormalParameterWithoutAssociatedPositional,
+            ? diag.superFormalParameterWithoutAssociatedNamed
+            : diag.superFormalParameterWithoutAssociatedPositional,
       );
       return;
     }
@@ -1550,7 +1548,7 @@
     )) {
       diagnosticReporter.atToken(
         node.name,
-        CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
+        diag.superFormalParameterTypeIsNotSubtypeOfAssociated,
         arguments: [element.type, superParameter.type],
       );
     }
@@ -1634,7 +1632,7 @@
   void visitTypeParameter(TypeParameter node) {
     _checkForBuiltInIdentifierAsName(
       node.name,
-      CompileTimeErrorCode.builtInIdentifierAsTypeParameterName,
+      diag.builtInIdentifierAsTypeParameterName,
     );
     _checkForTypeAnnotationDeferredClass(node.bound);
     _checkForGenericFunctionType(node.bound);
@@ -1699,7 +1697,8 @@
   /// checking is not useful.
   bool _checkClassInheritance(
     InterfaceFragmentImpl declarationElement,
-    NamedCompilationUnitMember node,
+    CompilationUnitMember node,
+    Token nameToken,
     NamedType? superclass,
     WithClauseImpl? withClause,
     ImplementsClause? implementsClause,
@@ -1715,12 +1714,12 @@
       _checkForRepeatedType(
         libraryContext.setOfImplements(declarationElement.asElement2),
         implementsClause?.interfaces,
-        CompileTimeErrorCode.implementsRepeated,
+        diag.implementsRepeated,
       );
       _checkImplementsSuperClass(implementsClause);
       _checkMixinsSuperClass(withClause);
       _checkForMixinWithConflictingPrivateMember(withClause, superclass);
-      _checkForConflictingGenerics(node);
+      _checkForConflictingGenerics(node: node, nameToken: nameToken);
       _checkForBaseClassOrMixinImplementedOutsideOfLibrary(implementsClause);
       _checkForInterfaceClassOrMixinSuperclassOutsideOfLibrary(
         superclass,
@@ -1746,17 +1745,14 @@
   /// Given a list of [directives] that have the same prefix, generate an error
   /// if there is more than one import and any of those imports is deferred.
   ///
-  /// See [CompileTimeErrorCode.sharedDeferredPrefix].
+  /// See [diag.sharedDeferredPrefix].
   void _checkDeferredPrefixCollision(List<ImportDirective> directives) {
     int count = directives.length;
     if (count > 1) {
       for (int i = 0; i < count; i++) {
         var deferredToken = directives[i].deferredKeyword;
         if (deferredToken != null) {
-          diagnosticReporter.atToken(
-            deferredToken,
-            CompileTimeErrorCode.sharedDeferredPrefix,
-          );
+          diagnosticReporter.atToken(deferredToken, diag.sharedDeferredPrefix);
         }
       }
     }
@@ -1768,13 +1764,13 @@
   ) {
     if (fieldElement.isAbstract) {
       diagnosticReporter.report(
-        CompileTimeErrorCode.abstractFieldConstructorInitializer.at(identifier),
+        diag.abstractFieldConstructorInitializer.at(identifier),
       );
     }
     if (fieldElement.isExternal) {
       diagnosticReporter.atToken(
         identifier,
-        CompileTimeErrorCode.externalFieldConstructorInitializer,
+        diag.externalFieldConstructorInitializer,
       );
     }
   }
@@ -1786,22 +1782,16 @@
     if (node.initializer != null) {
       if (declaredElement is FieldElement) {
         if (declaredElement.isAbstract) {
-          diagnosticReporter.atToken(
-            node.name,
-            CompileTimeErrorCode.abstractFieldInitializer,
-          );
+          diagnosticReporter.atToken(node.name, diag.abstractFieldInitializer);
         }
         if (declaredElement.isExternal) {
-          diagnosticReporter.atToken(
-            node.name,
-            CompileTimeErrorCode.externalFieldInitializer,
-          );
+          diagnosticReporter.atToken(node.name, diag.externalFieldInitializer);
         }
       } else if (declaredElement is TopLevelVariableElement) {
         if (declaredElement.isExternal) {
           diagnosticReporter.atToken(
             node.name,
-            CompileTimeErrorCode.externalVariableInitializer,
+            diag.externalVariableInitializer,
           );
         }
       }
@@ -1810,8 +1800,8 @@
 
   /// Verify that all classes of the given [withClause] are valid.
   ///
-  /// See [CompileTimeErrorCode.mixinClassDeclaresConstructor],
-  /// [CompileTimeErrorCode.mixinInheritsFromNotObject].
+  /// See [diag.mixinClassDeclaresConstructor],
+  /// [diag.mixinInheritsFromNotObject].
   bool _checkForAllMixinErrorCodes(WithClauseImpl? withClause) {
     if (withClause == null) {
       return false;
@@ -1829,14 +1819,14 @@
         mixinTypeIndex++;
         if (_checkForExtendsOrImplementsDisallowedClass(
           mixinName,
-          CompileTimeErrorCode.mixinOfDisallowedClass,
+          diag.mixinOfDisallowedClass,
         )) {
           problemReported = true;
         } else {
           var mixinElement = mixinType.element;
           if (_checkForExtendsOrImplementsDeferredClass(
             mixinName,
-            CompileTimeErrorCode.mixinDeferredClass,
+            diag.mixinDeferredClass,
           )) {
             problemReported = true;
           }
@@ -1901,7 +1891,7 @@
         }
         diagnosticReporter.atNode(
           redirectedConstructor,
-          CompileTimeErrorCode.redirectToMissingConstructor,
+          diag.redirectToMissingConstructor,
           arguments: [constructorStrName, redirectedType],
         );
       }
@@ -1920,7 +1910,7 @@
     )) {
       diagnosticReporter.atNode(
         redirectedConstructor,
-        CompileTimeErrorCode.redirectToInvalidReturnType,
+        diag.redirectToInvalidReturnType,
         arguments: [redirectedReturnType, constructorReturnType],
       );
       return;
@@ -1928,7 +1918,7 @@
       // Check parameters.
       diagnosticReporter.atNode(
         redirectedConstructor,
-        CompileTimeErrorCode.redirectToInvalidFunctionType,
+        diag.redirectToInvalidFunctionType,
         arguments: [redirectedType, constructorType],
       );
     }
@@ -1940,7 +1930,7 @@
   /// element in the node was `null`, then this method is not called. The
   /// [exportedLibrary] is the library element containing the exported element.
   ///
-  /// See [CompileTimeErrorCode.ambiguousExport].
+  /// See [diag.ambiguousExport].
   void _checkForAmbiguousExport(
     ExportDirectiveImpl directive,
     LibraryExportImpl libraryExport,
@@ -1960,7 +1950,7 @@
       if (prevElement != null && prevElement != element) {
         diagnosticReporter.atNode(
           directive.uri,
-          CompileTimeErrorCode.ambiguousExport,
+          diag.ambiguousExport,
           arguments: [name, prevElement.library!.uri, element.library!.uri],
         );
         return;
@@ -1986,7 +1976,7 @@
       libraryNames.sort();
       diagnosticReporter.atToken(
         name,
-        CompileTimeErrorCode.ambiguousImport,
+        diag.ambiguousImport,
         arguments: [name.lexeme, libraryNames.quotedAndCommaSeparatedWithAnd],
       );
     }
@@ -1994,9 +1984,9 @@
 
   /// Verify that the given [expression] is not final.
   ///
-  /// See [CompileTimeErrorCode.assignmentToConst],
-  /// [CompileTimeErrorCode.assignmentToFinal], and
-  /// [CompileTimeErrorCode.assignmentToMethod].
+  /// See [diag.assignmentToConst],
+  /// [diag.assignmentToFinal], and
+  /// [diag.assignmentToMethod].
   void _checkForAssignmentToFinal(Expression expression) {
     // TODO(scheglov): Check SimpleIdentifier(s) as all other nodes.
     if (expression is! SimpleIdentifier) return;
@@ -2016,49 +2006,34 @@
     // check if element is assignable
     if (element is VariableElement) {
       if (element.isConst) {
-        diagnosticReporter.atNode(
-          expression,
-          CompileTimeErrorCode.assignmentToConst,
-        );
+        diagnosticReporter.atNode(expression, diag.assignmentToConst);
       }
     } else if (element is GetterElement) {
       var variable = element.variable;
       if (variable.isConst) {
-        diagnosticReporter.atNode(
-          expression,
-          CompileTimeErrorCode.assignmentToConst,
-        );
-      } else if (variable is FieldElement && variable.isSynthetic) {
+        diagnosticReporter.atNode(expression, diag.assignmentToConst);
+      } else if (variable is FieldElement && variable.isOriginGetterSetter) {
         diagnosticReporter.atNode(
           highlightedNode,
-          CompileTimeErrorCode.assignmentToFinalNoSetter,
+          diag.assignmentToFinalNoSetter,
           arguments: [variable.name!, variable.enclosingElement.displayName],
         );
       } else {
         diagnosticReporter.atNode(
           highlightedNode,
-          CompileTimeErrorCode.assignmentToFinal,
+          diag.assignmentToFinal,
           arguments: [variable.name!],
         );
       }
     } else if (element is LocalFunctionElement ||
         element is TopLevelFunctionElement) {
-      diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.assignmentToFunction,
-      );
+      diagnosticReporter.atNode(expression, diag.assignmentToFunction);
     } else if (element is MethodElement) {
-      diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.assignmentToMethod,
-      );
+      diagnosticReporter.atNode(expression, diag.assignmentToMethod);
     } else if (element is InterfaceElement ||
         element is DynamicElementImpl ||
         element is TypeParameterElement) {
-      diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.assignmentToType,
-      );
+      diagnosticReporter.atNode(expression, diag.assignmentToType);
     }
   }
 
@@ -2066,7 +2041,7 @@
     if (_isInLateLocalVariable.last) {
       diagnosticReporter.atToken(
         node.awaitKeyword,
-        CompileTimeErrorCode.awaitInLateLocalVariableInitializer,
+        diag.awaitInLateLocalVariableInitializer,
       );
     }
   }
@@ -2077,7 +2052,7 @@
     if (typeSystem.isIncompatibleWithAwait(expressionType)) {
       diagnosticReporter.atToken(
         node.awaitKeyword,
-        CompileTimeErrorCode.awaitOfIncompatibleType,
+        diag.awaitOfIncompatibleType,
       );
     }
   }
@@ -2096,10 +2071,7 @@
     if (superclass != null) {
       var type = superclass.type;
       if (type != null && type.isDartCoreFunction) {
-        diagnosticReporter.atNode(
-          superclass,
-          WarningCode.deprecatedExtendsFunction,
-        );
+        diagnosticReporter.atNode(superclass, diag.deprecatedExtendsFunction);
       }
     }
 
@@ -2109,7 +2081,7 @@
         if (type != null && type.isDartCoreFunction) {
           diagnosticReporter.atNode(
             interface,
-            WarningCode.deprecatedImplementsFunction,
+            diag.deprecatedImplementsFunction,
           );
           break;
         }
@@ -2120,7 +2092,7 @@
       for (NamedType mixin in withClause.mixinTypes) {
         var type = mixin.type;
         if (type != null && type.isDartCoreFunction) {
-          diagnosticReporter.atNode(mixin, WarningCode.deprecatedMixinFunction);
+          diagnosticReporter.atNode(mixin, diag.deprecatedMixinFunction);
         }
       }
     }
@@ -2129,8 +2101,8 @@
   /// Verify that if a class is implementing a base class or mixin, it must be
   /// within the same library as that class or mixin.
   ///
-  /// See [CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary],
-  /// [CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary].
+  /// See [diag.baseClassImplementedOutsideOfLibrary],
+  /// [diag.baseMixinImplementedOutsideOfLibrary].
   void _checkForBaseClassOrMixinImplementedOutsideOfLibrary(
     ImplementsClause? implementsClause,
   ) {
@@ -2154,13 +2126,13 @@
             if (interfaceElement is ClassElementImpl &&
                 !interfaceElement.isSealed) {
               diagnosticReporter.report(
-                CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary
+                diag.baseClassImplementedOutsideOfLibrary
                     .withArguments(implementedClassName: interfaceElement.name!)
                     .at(interface),
               );
             } else if (interfaceElement is MixinElement) {
               diagnosticReporter.report(
-                CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary
+                diag.baseMixinImplementedOutsideOfLibrary
                     .withArguments(implementedMixinName: interfaceElement.name!)
                     .at(interface),
               );
@@ -2175,10 +2147,10 @@
   /// Verify that the given [token] is not a keyword, and generates the
   /// given [code] on the identifier if it is a keyword.
   ///
-  /// See [CompileTimeErrorCode.builtInIdentifierAsExtensionName],
-  /// [CompileTimeErrorCode.builtInIdentifierAsTypeName],
-  /// [CompileTimeErrorCode.builtInIdentifierAsTypeParameterName], and
-  /// [CompileTimeErrorCode.builtInIdentifierAsTypedefName].
+  /// See [diag.builtInIdentifierAsExtensionName],
+  /// [diag.builtInIdentifierAsTypeName],
+  /// [diag.builtInIdentifierAsTypeParameterName], and
+  /// [diag.builtInIdentifierAsTypedefName].
   void _checkForBuiltInIdentifierAsName(Token token, DiagnosticCode code) {
     if (token.type.isKeyword && token.keyword?.isPseudo != true) {
       diagnosticReporter.atToken(token, code, arguments: [token.lexeme]);
@@ -2188,7 +2160,7 @@
   /// Verify that if a class is being mixed in and class modifiers are enabled
   /// in that class' library, then it must be a mixin class.
   ///
-  /// See [CompileTimeErrorCode.classUsedAsMixin].
+  /// See [diag.classUsedAsMixin].
   void _checkForClassUsedAsMixin(WithClause? withClause) {
     if (withClause != null) {
       for (NamedType withMixin in withClause.mixinTypes) {
@@ -2203,7 +2175,7 @@
               !_mayIgnoreClassModifiers(withElement.library)) {
             diagnosticReporter.atNode(
               withMixin,
-              CompileTimeErrorCode.classUsedAsMixin,
+              diag.classUsedAsMixin,
               arguments: [withElement.name!],
             );
           }
@@ -2215,9 +2187,9 @@
   /// Verify that the [_enclosingClass] does not have a method and getter pair
   /// with the same name, via inheritance.
   ///
-  /// See [CompileTimeErrorCode.conflictingStaticAndInstance],
-  /// [CompileTimeErrorCode.conflictingMethodAndField], and
-  /// [CompileTimeErrorCode.conflictingFieldAndMethod].
+  /// See [diag.conflictingStaticAndInstance],
+  /// [diag.conflictingMethodAndField], and
+  /// [diag.conflictingFieldAndMethod].
   void _checkForConflictingClassMembers(InterfaceFragmentImpl fragment) {
     var enclosingClass = _enclosingClass;
     if (enclosingClass == null) {
@@ -2249,7 +2221,7 @@
         void reportStaticConflict(InternalExecutableElement inherited) {
           diagnosticReporter.atElement2(
             method.asElement2,
-            CompileTimeErrorCode.conflictingStaticAndInstance,
+            diag.conflictingStaticAndInstance,
             arguments: [
               enclosingClass.displayName,
               name,
@@ -2277,7 +2249,7 @@
       void reportFieldConflict(InternalPropertyAccessorElement inherited) {
         diagnosticReporter.atElement2(
           method.asElement2,
-          CompileTimeErrorCode.conflictingMethodAndField,
+          diag.conflictingMethodAndField,
           arguments: [
             enclosingClass.displayName,
             name,
@@ -2314,7 +2286,7 @@
       if (accessor.isStatic && inherited != null) {
         diagnosticReporter.atElement2(
           accessor.asElement2,
-          CompileTimeErrorCode.conflictingStaticAndInstance,
+          diag.conflictingStaticAndInstance,
           arguments: [
             enclosingClass.displayName,
             name,
@@ -2329,7 +2301,7 @@
         }
         diagnosticReporter.atElement2(
           accessor.asElement2,
-          CompileTimeErrorCode.conflictingFieldAndMethod,
+          diag.conflictingFieldAndMethod,
           arguments: [
             enclosingClass.displayName,
             name,
@@ -2354,7 +2326,7 @@
         if (setter is InternalPropertyAccessorElement) {
           diagnosticReporter.atElement2(
             enclosingClass,
-            CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
+            diag.conflictingInheritedMethodAndSetter,
             arguments: [
               enclosingClass.kind.displayName,
               enclosingClass.displayName,
@@ -2402,8 +2374,8 @@
       // name is same as the name of the enclosing class
       if (enclosingClass.name == name) {
         var code = enclosingClass is MixinElement
-            ? CompileTimeErrorCode.conflictingTypeVariableAndMixin
-            : CompileTimeErrorCode.conflictingTypeVariableAndClass;
+            ? diag.conflictingTypeVariableAndMixin
+            : diag.conflictingTypeVariableAndClass;
         diagnosticReporter.atElement2(typeParameter, code, arguments: [name]);
       }
       // check members
@@ -2412,8 +2384,8 @@
           enclosingClass.getGetter(name) != null ||
           enclosingClass.getSetter(name) != null) {
         var code = enclosingClass is MixinElement
-            ? CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin
-            : CompileTimeErrorCode.conflictingTypeVariableAndMemberClass;
+            ? diag.conflictingTypeVariableAndMemberMixin
+            : diag.conflictingTypeVariableAndMemberClass;
         diagnosticReporter.atElement2(typeParameter, code, arguments: [name]);
       }
     }
@@ -2428,7 +2400,7 @@
       if (fragment.name == name) {
         diagnosticReporter.atElement2(
           typeParameter.asElement2,
-          CompileTimeErrorCode.conflictingTypeVariableAndEnum,
+          diag.conflictingTypeVariableAndEnum,
           arguments: [name],
         );
       }
@@ -2439,7 +2411,7 @@
           element.getSetter(name) != null) {
         diagnosticReporter.atElement2(
           typeParameter.asElement2,
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberEnum,
+          diag.conflictingTypeVariableAndMemberEnum,
           arguments: [name],
         );
       }
@@ -2457,7 +2429,7 @@
       if (fragment.name == name) {
         diagnosticReporter.atElement2(
           typeParameter.asElement2,
-          CompileTimeErrorCode.conflictingTypeVariableAndExtensionType,
+          diag.conflictingTypeVariableAndExtensionType,
           arguments: [name],
         );
       }
@@ -2469,7 +2441,7 @@
           element.getSetter(name) != null) {
         diagnosticReporter.atElement2(
           typeParameter.asElement2,
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
+          diag.conflictingTypeVariableAndMemberExtensionType,
           arguments: [name],
         );
       }
@@ -2478,8 +2450,8 @@
 
   /// Verify all conflicts between type variable and enclosing extension.
   ///
-  /// See [CompileTimeErrorCode.conflictingTypeVariableAndExtension], and
-  /// [CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension].
+  /// See [diag.conflictingTypeVariableAndExtension], and
+  /// [diag.conflictingTypeVariableAndMemberExtension].
   void _checkForConflictingExtensionTypeVariableErrorCodes() {
     for (TypeParameterElement typeParameter
         in _enclosingExtension!.typeParameters) {
@@ -2490,7 +2462,7 @@
       if (_enclosingExtension!.name == name) {
         diagnosticReporter.atElement2(
           typeParameter,
-          CompileTimeErrorCode.conflictingTypeVariableAndExtension,
+          diag.conflictingTypeVariableAndExtension,
           arguments: [name],
         );
       }
@@ -2500,14 +2472,17 @@
           _enclosingExtension!.getSetter(name) != null) {
         diagnosticReporter.atElement2(
           typeParameter,
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension,
+          diag.conflictingTypeVariableAndMemberExtension,
           arguments: [name],
         );
       }
     }
   }
 
-  void _checkForConflictingGenerics(NamedCompilationUnitMember node) {
+  void _checkForConflictingGenerics({
+    required CompilationUnitMember node,
+    required Token nameToken,
+  }) {
     var fragment = node.declaredFragment as InterfaceFragmentImpl;
 
     // Report only on the declaration.
@@ -2521,8 +2496,8 @@
     for (var error in errors) {
       if (error is IncompatibleInterfacesClassHierarchyError) {
         diagnosticReporter.atToken(
-          node.name,
-          CompileTimeErrorCode.conflictingGenericInterfaces,
+          nameToken,
+          diag.conflictingGenericInterfaces,
           arguments: [
             _enclosingClass!.kind.displayName,
             _enclosingClass!.name!,
@@ -2555,7 +2530,7 @@
         if (redirectingInitializerCount > 0) {
           diagnosticReporter.atNode(
             initializer,
-            CompileTimeErrorCode.multipleRedirectingConstructorInvocations,
+            diag.multipleRedirectingConstructorInvocations,
           );
         }
         if (declaration.factoryKeyword == null) {
@@ -2569,15 +2544,14 @@
             }
             diagnosticReporter.atNode(
               invocation,
-              CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
+              diag.redirectGenerativeToMissingConstructor,
               arguments: [constructorStrName, enclosingNamedType],
             );
           } else {
             if (redirectingElement.isFactory) {
               diagnosticReporter.atNode(
                 initializer,
-                CompileTimeErrorCode
-                    .redirectGenerativeToNonGenerativeConstructor,
+                diag.redirectGenerativeToNonGenerativeConstructor,
               );
             }
           }
@@ -2594,13 +2568,13 @@
         if (enclosingClass is EnumElement) {
           diagnosticReporter.atToken(
             initializer.superKeyword,
-            CompileTimeErrorCode.superInEnumConstructor,
+            diag.superInEnumConstructor,
           );
         } else if (superInitializerCount == 1) {
           // Only report the second (first illegal) superinitializer.
           diagnosticReporter.atNode(
             initializer,
-            CompileTimeErrorCode.multipleSuperInitializers,
+            diag.multipleSuperInitializers,
           );
         }
         superInitializer = initializer;
@@ -2615,20 +2589,20 @@
           if (enclosingClass is! EnumElement) {
             diagnosticReporter.atNode(
               initializer,
-              CompileTimeErrorCode.superInRedirectingConstructor,
+              diag.superInRedirectingConstructor,
             );
           }
         }
         if (initializer is ConstructorFieldInitializer) {
           diagnosticReporter.atNode(
             initializer,
-            CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
+            diag.fieldInitializerRedirectingConstructor,
           );
         }
         if (initializer is AssertInitializer) {
           diagnosticReporter.atNode(
             initializer,
-            CompileTimeErrorCode.assertInRedirectingConstructor,
+            diag.assertInRedirectingConstructor,
           );
         }
       }
@@ -2647,7 +2621,7 @@
         }
         diagnosticReporter.atToken(
           superInitializer.superKeyword,
-          CompileTimeErrorCode.superInvocationNotLast,
+          diag.superInvocationNotLast,
           arguments: [constructorStrName],
         );
       }
@@ -2661,8 +2635,8 @@
   /// Return `true` if an error is reported here, and the caller should stop
   /// checking the constructor for constant-related errors.
   ///
-  /// See [CompileTimeErrorCode.constConstructorWithNonConstSuper], and
-  /// [CompileTimeErrorCode.constConstructorWithMixinWithField].
+  /// See [diag.constConstructorWithNonConstSuper], and
+  /// [diag.constConstructorWithMixinWithField].
   bool _checkForConstConstructorWithNonConstSuper(
     ConstructorDeclaration constructor,
   ) {
@@ -2684,7 +2658,7 @@
           if (field.isStatic) {
             return false;
           }
-          if (field.isSynthetic) {
+          if (field.isOriginGetterSetter) {
             return false;
           }
           // From the abstract and external fields specification:
@@ -2701,8 +2675,9 @@
     if (instanceFields.length == 1) {
       var field = instanceFields.single;
       diagnosticReporter.atNode(
-        constructor.returnType,
-        CompileTimeErrorCode.constConstructorWithMixinWithField,
+        // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+        constructor.typeName!,
+        diag.constConstructorWithMixinWithField,
         arguments: ["'${field.enclosingElement.name}.${field.name}'"],
       );
       return true;
@@ -2711,8 +2686,9 @@
           .map((field) => "'${field.enclosingElement.name}.${field.name}'")
           .join(', ');
       diagnosticReporter.atNode(
-        constructor.returnType,
-        CompileTimeErrorCode.constConstructorWithMixinWithFields,
+        // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+        constructor.typeName!,
+        diag.constConstructorWithMixinWithFields,
         arguments: [fieldNames],
       );
       return true;
@@ -2742,11 +2718,12 @@
     var superInvocation = constructor.initializers
         .whereType<SuperConstructorInvocation>()
         .firstOrNull;
-    var errorNode = superInvocation ?? constructor.returnType;
+    // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+    var errorNode = superInvocation ?? constructor.typeName!;
 
     diagnosticReporter.atNode(
       errorNode,
-      CompileTimeErrorCode.constConstructorWithNonConstSuper,
+      diag.constConstructorWithNonConstSuper,
       arguments: [element.enclosingElement.displayName],
     );
     return true;
@@ -2772,7 +2749,7 @@
     }
     diagnosticReporter.atConstructorDeclaration(
       constructor,
-      CompileTimeErrorCode.constConstructorWithNonFinalField,
+      diag.constConstructorWithNonFinalField,
     );
   }
 
@@ -2781,29 +2758,26 @@
   /// always non-`null`. The [namedType] is the name of the type defining the
   /// constructor, always non-`null`.
   ///
-  /// See [CompileTimeErrorCode.constDeferredClass].
+  /// See [diag.constDeferredClass].
   void _checkForConstDeferredClass(
     InstanceCreationExpression expression,
     ConstructorName constructorName,
     NamedType namedType,
   ) {
     if (namedType.isDeferred) {
-      diagnosticReporter.atNode(
-        constructorName,
-        CompileTimeErrorCode.constDeferredClass,
-      );
+      diagnosticReporter.atNode(constructorName, diag.constDeferredClass);
     }
   }
 
   /// Verify that the given throw [expression] is not enclosed in a 'const'
   /// constructor declaration.
   ///
-  /// See [CompileTimeErrorCode.constConstructorThrowsException].
+  /// See [diag.constConstructorThrowsException].
   void _checkForConstEvalThrowsException(ThrowExpression expression) {
     if (_enclosingExecutable.isConstConstructor) {
       diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.constConstructorThrowsException,
+        diag.constConstructorThrowsException,
       );
     }
   }
@@ -2822,10 +2796,7 @@
     if (element is ClassElement && element.isAbstract) {
       var constructorElement = expression.constructorName.element;
       if (constructorElement != null && !constructorElement.isFactory) {
-        diagnosticReporter.atNode(
-          namedType,
-          CompileTimeErrorCode.instantiateAbstractClass,
-        );
+        diagnosticReporter.atNode(namedType, diag.instantiateAbstractClass);
       }
     }
   }
@@ -2837,10 +2808,7 @@
     InterfaceType type,
   ) {
     if (type.element is MixinElement) {
-      diagnosticReporter.atNode(
-        namedType,
-        CompileTimeErrorCode.mixinInstantiate,
-      );
+      diagnosticReporter.atNode(namedType, diag.mixinInstantiate);
     }
   }
 
@@ -2850,7 +2818,7 @@
   /// This method assumes that the instance creation or dot shorthand
   /// constructor invocation was tested to be 'const' before being called.
   ///
-  /// See [CompileTimeErrorCode.constWithNonConst].
+  /// See [diag.constWithNonConst].
   void _checkForConstWithNonConst(
     Expression expression,
     ConstructorElement? constructorElement,
@@ -2858,15 +2826,9 @@
   ) {
     if (constructorElement != null && !constructorElement.isConst) {
       if (keyword != null) {
-        diagnosticReporter.atToken(
-          keyword,
-          CompileTimeErrorCode.constWithNonConst,
-        );
+        diagnosticReporter.atToken(keyword, diag.constWithNonConst);
       } else {
-        diagnosticReporter.atNode(
-          expression,
-          CompileTimeErrorCode.constWithNonConst,
-        );
+        diagnosticReporter.atNode(expression, diag.constWithNonConst);
       }
     }
   }
@@ -2879,8 +2841,8 @@
   /// This method assumes that the instance creation was tested to be 'const'
   /// before being called.
   ///
-  /// See [CompileTimeErrorCode.constWithUndefinedConstructor], and
-  /// [CompileTimeErrorCode.constWithUndefinedConstructorDefault].
+  /// See [diag.constWithUndefinedConstructor], and
+  /// [diag.constWithUndefinedConstructorDefault].
   void _checkForConstWithUndefinedConstructor(
     InstanceCreationExpression expression,
     ConstructorName constructorName,
@@ -2895,13 +2857,13 @@
     if (name != null) {
       diagnosticReporter.atNode(
         name,
-        CompileTimeErrorCode.constWithUndefinedConstructor,
+        diag.constWithUndefinedConstructor,
         arguments: [namedType.qualifiedName, name.name],
       );
     } else {
       diagnosticReporter.atNode(
         constructorName,
-        CompileTimeErrorCode.constWithUndefinedConstructorDefault,
+        diag.constWithUndefinedConstructorDefault,
         arguments: [namedType.qualifiedName],
       );
     }
@@ -2909,7 +2871,7 @@
 
   void _checkForDeadNullCoalesce(TypeImpl lhsType, Expression rhs) {
     if (typeSystem.isStrictlyNonNullable(lhsType)) {
-      diagnosticReporter.atNode(rhs, StaticWarningCode.deadNullAwareExpression);
+      diagnosticReporter.atNode(rhs, diag.deadNullAwareExpression);
     }
   }
 
@@ -2923,7 +2885,7 @@
       if (element is ExtensionElement) {
         diagnosticReporter.atNode(
           directive.uri,
-          CompileTimeErrorCode.deferredImportOfExtension,
+          diag.deferredImportOfExtension,
         );
         return;
       }
@@ -2933,7 +2895,7 @@
   /// Verify that any deferred imports in the given compilation [unit] have a
   /// unique prefix.
   ///
-  /// See [CompileTimeErrorCode.sharedDeferredPrefix].
+  /// See [diag.sharedDeferredPrefix].
   void _checkForDeferredPrefixCollisions(CompilationUnit unit) {
     NodeList<Directive> directives = unit.directives;
     int count = directives.length;
@@ -2985,7 +2947,7 @@
     if (iterableType is DynamicType && strictCasts) {
       diagnosticReporter.atNode(
         node.iterable,
-        CompileTimeErrorCode.forInOfInvalidType,
+        diag.forInOfInvalidType,
         arguments: [iterableType, loopNamedType],
       );
       return false;
@@ -3024,7 +2986,7 @@
     )) {
       diagnosticReporter.atNode(
         node.iterable,
-        CompileTimeErrorCode.forInOfInvalidType,
+        diag.forInOfInvalidType,
         arguments: [iterableType, loopNamedType],
       );
       return false;
@@ -3066,7 +3028,7 @@
       if (implicitCallMethod == null) {
         diagnosticReporter.atNode(
           node.iterable,
-          CompileTimeErrorCode.forInOfInvalidElementType,
+          diag.forInOfInvalidElementType,
           arguments: [iterableType, loopNamedType, variableType],
         );
       } else {
@@ -3101,7 +3063,7 @@
         )) {
           diagnosticReporter.atNode(
             node.iterable,
-            CompileTimeErrorCode.forInOfInvalidElementType,
+            diag.forInOfInvalidElementType,
             arguments: [iterableType, loopNamedType, variableType],
           );
         }
@@ -3123,8 +3085,8 @@
       );
       if (isWellBounded is NotWellBoundedTypeResult) {
         diagnosticReporter.atToken(
-          node.name,
-          CompileTimeErrorCode.enumInstantiatedToBoundsIsNotWellBounded,
+          node.namePart.typeName,
+          diag.enumInstantiatedToBoundsIsNotWellBounded,
         );
       }
     }
@@ -3135,7 +3097,7 @@
   /// [LibraryExport] retrieved from the node, if the element in the node was
   /// `null`, then this method is not called.
   ///
-  /// See [CompileTimeErrorCode.exportInternalLibrary].
+  /// See [diag.exportInternalLibrary].
   void _checkForExportInternalLibrary(
     ExportDirective directive,
     LibraryExport libraryExport,
@@ -3160,7 +3122,7 @@
     // first place.
     diagnosticReporter.atNode(
       directive,
-      CompileTimeErrorCode.exportInternalLibrary,
+      diag.exportInternalLibrary,
       arguments: [directive.uri.stringValue!],
     );
   }
@@ -3168,28 +3130,28 @@
   /// Verifies that the given [superclass], found in an extends-clause, is not a
   /// deferred class.
   ///
-  /// See [CompileTimeErrorCode.extendsDeferredClass].
+  /// See [diag.extendsDeferredClass].
   void _checkForExtendsDeferredClass(NamedType? superclass) {
     if (superclass == null) {
       return;
     }
     _checkForExtendsOrImplementsDeferredClass(
       superclass,
-      CompileTimeErrorCode.extendsDeferredClass,
+      diag.extendsDeferredClass,
     );
   }
 
   /// Verifies that the given [superclass], found in an extends-clause, is not a
   /// class such as 'num' or 'String'.
   ///
-  /// See [CompileTimeErrorCode.extendsDisallowedClass].
+  /// See [diag.extendsDisallowedClass].
   bool _checkForExtendsDisallowedClass(NamedType? superclass) {
     if (superclass == null) {
       return false;
     }
     return _checkForExtendsOrImplementsDisallowedClass(
       superclass,
-      CompileTimeErrorCode.extendsDisallowedClass,
+      diag.extendsDisallowedClass,
     );
   }
 
@@ -3198,9 +3160,9 @@
   ///
   /// See [_checkForExtendsDeferredClass],
   /// [_checkForAllMixinErrorCodes],
-  /// [CompileTimeErrorCode.extendsDeferredClass],
-  /// [CompileTimeErrorCode.implementsDeferredClass], and
-  /// [CompileTimeErrorCode.mixinDeferredClass].
+  /// [diag.extendsDeferredClass],
+  /// [diag.implementsDeferredClass], and
+  /// [diag.mixinDeferredClass].
   bool _checkForExtendsOrImplementsDeferredClass(
     NamedType namedType,
     DiagnosticCode code,
@@ -3240,7 +3202,7 @@
   }
 
   void _checkForExtensionDeclaresInstanceField(FieldDeclaration node) {
-    if (node.parent is! ExtensionDeclaration) {
+    if (node.parent?.parent is! ExtensionDeclaration) {
       return;
     }
 
@@ -3251,7 +3213,7 @@
     for (var field in node.fields.variables) {
       diagnosticReporter.atToken(
         field.name,
-        CompileTimeErrorCode.extensionDeclaresInstanceField,
+        diag.extensionDeclaresInstanceField,
       );
     }
   }
@@ -3261,7 +3223,7 @@
       if (node.hasObjectMemberName) {
         diagnosticReporter.atToken(
           node.name,
-          CompileTimeErrorCode.extensionDeclaresMemberOfObject,
+          diag.extensionDeclaresMemberOfObject,
         );
       }
     }
@@ -3270,7 +3232,7 @@
       if (node.hasObjectMemberName) {
         diagnosticReporter.atToken(
           node.name,
-          CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject,
+          diag.extensionTypeDeclaresMemberOfObject,
         );
       }
     }
@@ -3282,7 +3244,7 @@
     if (_enclosingClass is ExtensionTypeElement) {
       diagnosticReporter.atToken(
         node.superKeyword,
-        CompileTimeErrorCode.extensionTypeConstructorWithSuperInvocation,
+        diag.extensionTypeConstructorWithSuperInvocation,
       );
     }
   }
@@ -3299,7 +3261,7 @@
     for (var field in node.fields.variables) {
       diagnosticReporter.atToken(
         field.name,
-        CompileTimeErrorCode.extensionTypeDeclaresInstanceField,
+        diag.extensionTypeDeclaresInstanceField,
       );
     }
   }
@@ -3315,7 +3277,7 @@
     for (var type in clause.interfaces) {
       _checkForExtendsOrImplementsDeferredClass(
         type,
-        CompileTimeErrorCode.implementsDeferredClass,
+        diag.implementsDeferredClass,
       );
     }
   }
@@ -3326,8 +3288,8 @@
   ) {
     if (fragment.element.hasImplementsSelfReference) {
       diagnosticReporter.atToken(
-        node.name,
-        CompileTimeErrorCode.extensionTypeImplementsItself,
+        node.primaryConstructor.typeName,
+        diag.extensionTypeImplementsItself,
       );
     }
   }
@@ -3349,9 +3311,9 @@
         );
       }).toList();
       diagnosticReporter.atToken(
-        node.name,
-        CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
-        arguments: [node.name.lexeme, memberName],
+        node.primaryConstructor.typeName,
+        diag.extensionTypeInheritedMemberConflict,
+        arguments: [node.primaryConstructor.typeName.lexeme, memberName],
         contextMessages: contextMessages,
       );
     }
@@ -3378,8 +3340,8 @@
   ) {
     if (fragment.element.hasRepresentationSelfReference) {
       diagnosticReporter.atToken(
-        node.name,
-        CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
+        node.primaryConstructor.typeName,
+        diag.extensionTypeRepresentationDependsOnItself,
       );
     }
   }
@@ -3392,8 +3354,8 @@
     var representationType = element.representation.type;
     if (representationType.isBottom) {
       diagnosticReporter.atNode(
-        node.representation.fieldType,
-        CompileTimeErrorCode.extensionTypeRepresentationTypeBottom,
+        node.fieldType,
+        diag.extensionTypeRepresentationTypeBottom,
       );
     }
   }
@@ -3401,13 +3363,16 @@
   void _checkForExtensionTypeWithAbstractMember(
     ExtensionTypeDeclarationImpl node,
   ) {
-    for (var member in node.members) {
+    for (var member in node.body.members) {
       if (member is MethodDeclarationImpl && !member.isStatic) {
         if (member.isAbstract) {
           diagnosticReporter.atNode(
             member,
-            CompileTimeErrorCode.extensionTypeWithAbstractMember,
-            arguments: [member.name.lexeme, node.name.lexeme],
+            diag.extensionTypeWithAbstractMember,
+            arguments: [
+              member.name.lexeme,
+              node.primaryConstructor.typeName.lexeme,
+            ],
           );
         }
       }
@@ -3417,7 +3382,7 @@
   /// Verify that the given field formal [parameter] is in a constructor
   /// declaration.
   ///
-  /// See [CompileTimeErrorCode.fieldInitializerOutsideConstructor].
+  /// See [diag.fieldInitializerOutsideConstructor].
   void _checkForFieldInitializingFormalRedirectingConstructor(
     FieldFormalParameter parameter,
   ) {
@@ -3433,7 +3398,7 @@
       if (constructor.factoryKeyword != null) {
         diagnosticReporter.atNode(
           parameter,
-          CompileTimeErrorCode.fieldInitializerFactoryConstructor,
+          diag.fieldInitializerFactoryConstructor,
         );
         return;
       }
@@ -3442,15 +3407,17 @@
         if (initializer is RedirectingConstructorInvocation) {
           diagnosticReporter.atNode(
             parameter,
-            CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
+            diag.fieldInitializerRedirectingConstructor,
           );
           return;
         }
       }
+    } else if (constructor is PrimaryConstructorDeclaration) {
+      // No additional checks.
     } else {
       diagnosticReporter.atNode(
         parameter,
-        CompileTimeErrorCode.fieldInitializerOutsideConstructor,
+        diag.fieldInitializerOutsideConstructor,
       );
     }
   }
@@ -3458,8 +3425,8 @@
   /// Verify that the given variable declaration [list] has only initialized
   /// variables if the list is final or const.
   ///
-  /// See [CompileTimeErrorCode.constNotInitialized], and
-  /// [CompileTimeErrorCode.finalNotInitialized].
+  /// See [diag.constNotInitialized], and
+  /// [diag.finalNotInitialized].
   void _checkForFinalNotInitialized(VariableDeclarationList list) {
     if (_isInNativeClass || list.isSynthetic) {
       return;
@@ -3480,7 +3447,7 @@
         if (isConst) {
           diagnosticReporter.atToken(
             variable.name,
-            CompileTimeErrorCode.constNotInitialized,
+            diag.constNotInitialized,
             arguments: [variable.name.lexeme],
           );
         } else {
@@ -3494,7 +3461,7 @@
           } else if (!variable.isLate) {
             diagnosticReporter.atToken(
               variable.name,
-              CompileTimeErrorCode.finalNotInitialized,
+              diag.finalNotInitialized,
               arguments: [variable.name.lexeme],
             );
           }
@@ -3507,8 +3474,8 @@
   /// final fields are initialized.  Cases in which there is at least one
   /// constructor are handled in [_checkForFinalNotInitialized].
   ///
-  /// See [CompileTimeErrorCode.constNotInitialized], and
-  /// [CompileTimeErrorCode.finalNotInitialized].
+  /// See [diag.constNotInitialized], and
+  /// [diag.finalNotInitialized].
   void _checkForFinalNotInitializedInClass(
     InstanceFragmentImpl fragment,
     List<ClassMember> members,
@@ -3516,7 +3483,7 @@
     if (fragment is InterfaceFragmentImpl) {
       var element = fragment.element;
       for (var constructor in element.constructors) {
-        if (constructor.isGenerative && !constructor.isSynthetic) {
+        if (constructor.isGenerative && constructor.isOriginDeclaration) {
           return;
         }
       }
@@ -3534,8 +3501,8 @@
   /// Check that if a direct supertype of a node is final, then it must be in
   /// the same library.
   ///
-  /// See [CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary],
-  /// [CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary],
+  /// See [diag.finalClassExtendedOutsideOfLibrary],
+  /// [diag.finalClassImplementedOutsideOfLibrary],
   /// [CompileTimeErrorCode.
   /// FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY].
   void _checkForFinalSupertypeOutsideOfLibrary(
@@ -3555,7 +3522,7 @@
             !_mayIgnoreClassModifiers(element.library)) {
           diagnosticReporter.atNode(
             superclass,
-            CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary,
+            diag.finalClassExtendedOutsideOfLibrary,
             arguments: [element.name!],
           );
         }
@@ -3587,7 +3554,7 @@
 
               diagnosticReporter.atNode(
                 namedType,
-                CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
+                diag.finalClassImplementedOutsideOfLibrary,
                 arguments: [element.name!],
               );
               break;
@@ -3608,8 +3575,7 @@
               !_mayIgnoreClassModifiers(element.library)) {
             diagnosticReporter.atNode(
               namedType,
-              CompileTimeErrorCode
-                  .finalClassUsedAsMixinConstraintOutsideOfLibrary,
+              diag.finalClassUsedAsMixinConstraintOutsideOfLibrary,
               arguments: [element.name!],
             );
           }
@@ -3627,10 +3593,7 @@
     }
     DartType type = node.typeOrThrow;
     if (type is FunctionType && type.typeParameters.isNotEmpty) {
-      diagnosticReporter.atNode(
-        node,
-        CompileTimeErrorCode.genericFunctionTypeCannotBeBound,
-      );
+      diagnosticReporter.atNode(node, diag.genericFunctionTypeCannotBeBound);
     }
   }
 
@@ -3650,7 +3613,7 @@
     if (languageVersionToken != null) {
       diagnosticReporter.atToken(
         languageVersionToken,
-        CompileTimeErrorCode.illegalLanguageVersionOverride,
+        diag.illegalLanguageVersionOverride,
         arguments: ['$sourceLanguageConstraint'],
       );
     }
@@ -3659,8 +3622,8 @@
   /// Verify that the given implements [clause] does not implement classes such
   /// as 'num' or 'String'.
   ///
-  /// See [CompileTimeErrorCode.implementsDisallowedClass],
-  /// [CompileTimeErrorCode.implementsDeferredClass].
+  /// See [diag.implementsDisallowedClass],
+  /// [diag.implementsDeferredClass].
   bool _checkForImplementsClauseErrorCodes(ImplementsClause? clause) {
     if (clause == null) {
       return false;
@@ -3669,12 +3632,12 @@
     for (NamedType type in clause.interfaces) {
       if (_checkForExtendsOrImplementsDisallowedClass(
         type,
-        CompileTimeErrorCode.implementsDisallowedClass,
+        diag.implementsDisallowedClass,
       )) {
         foundError = true;
       } else if (_checkForExtendsOrImplementsDeferredClass(
         type,
-        CompileTimeErrorCode.implementsDeferredClass,
+        diag.implementsDeferredClass,
       )) {
         foundError = true;
       }
@@ -3709,7 +3672,7 @@
     // `directive.uri.stringValue` is non-`null`.
     diagnosticReporter.atNode(
       directive.uri,
-      CompileTimeErrorCode.importInternalLibrary,
+      diag.importInternalLibrary,
       arguments: [directive.uri.stringValue!],
     );
   }
@@ -3717,7 +3680,7 @@
   /// Check that the given [typeReference] is not a type reference and that then
   /// the [name] is reference to an instance member.
   ///
-  /// See [CompileTimeErrorCode.instanceAccessToStaticMember].
+  /// See [diag.instanceAccessToStaticMember].
   void _checkForInstanceAccessToStaticMember(
     InterfaceElement? typeReference,
     Expression? target,
@@ -3764,7 +3727,7 @@
   /// mixin.
   ///
   /// See
-  /// [CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary].
+  /// [diag.interfaceClassExtendedOutsideOfLibrary].
   void _checkForInterfaceClassOrMixinSuperclassOutsideOfLibrary(
     NamedType? superclass,
     WithClause? withClause,
@@ -3780,7 +3743,7 @@
             !_mayIgnoreClassModifiers(superclassElement.library)) {
           diagnosticReporter.atNode(
             superclass,
-            CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
+            diag.interfaceClassExtendedOutsideOfLibrary,
             arguments: [superclassElement.name!],
           );
         }
@@ -3792,7 +3755,7 @@
   /// given [argument]. This is used for prefix and postfix expressions where
   /// the argument value is implicit.
   ///
-  /// See [CompileTimeErrorCode.argumentTypeNotAssignable].
+  /// See [diag.argumentTypeNotAssignable].
   void _checkForIntNotAssignable(ExpressionImpl argument) {
     var parameterElement = argument.correspondingParameter;
     var parameterType = parameterElement?.type;
@@ -3801,20 +3764,20 @@
         argument,
         parameterType,
         _intType,
-        CompileTimeErrorCode.argumentTypeNotAssignable,
+        diag.argumentTypeNotAssignable,
       );
     }
   }
 
   /// Verify that the given [annotation] isn't defined in a deferred library.
   ///
-  /// See [CompileTimeErrorCode.invalidAnnotationFromDeferredLibrary].
+  /// See [diag.invalidAnnotationFromDeferredLibrary].
   void _checkForInvalidAnnotationFromDeferredLibrary(Annotation annotation) {
     Identifier nameIdentifier = annotation.name;
     if (nameIdentifier is PrefixedIdentifier && nameIdentifier.isDeferred) {
       diagnosticReporter.atNode(
         annotation.name,
-        CompileTimeErrorCode.invalidAnnotationFromDeferredLibrary,
+        diag.invalidAnnotationFromDeferredLibrary,
       );
     }
   }
@@ -3829,23 +3792,23 @@
     Element? staticElement,
   ) {
     if (staticElement is FieldElement) {
-      if (staticElement.isSynthetic) {
+      if (staticElement.isOriginGetterSetter) {
         diagnosticReporter.atNode(
           initializer,
-          CompileTimeErrorCode.initializerForNonExistentField,
+          diag.initializerForNonExistentField,
           arguments: [fieldName.name],
         );
       } else if (staticElement.isStatic) {
         diagnosticReporter.atNode(
           initializer,
-          CompileTimeErrorCode.initializerForStaticField,
+          diag.initializerForStaticField,
           arguments: [fieldName.name],
         );
       }
     } else {
       diagnosticReporter.atNode(
         initializer,
-        CompileTimeErrorCode.initializerForNonExistentField,
+        diag.initializerForNonExistentField,
         arguments: [fieldName.name],
       );
       return;
@@ -3867,17 +3830,16 @@
         ) when parent is! InstanceCreationExpression) {
           diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode
-                .invalidReferenceToGenerativeEnumConstructorTearoff,
+            diag.invalidReferenceToGenerativeEnumConstructorTearoff,
           );
         } else {
           diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
+            diag.invalidReferenceToGenerativeEnumConstructor,
           );
         }
       } else {
-        diagnosticReporter.atNode(node, CompileTimeErrorCode.instantiateEnum);
+        diagnosticReporter.atNode(node, diag.instantiateEnum);
       }
     }
   }
@@ -3885,9 +3847,9 @@
   /// Verify that if the given [identifier] is part of a constructor
   /// initializer, then it does not implicitly reference 'this' expression.
   ///
-  /// See [CompileTimeErrorCode.implicitThisReferenceInInitializer],
-  /// [CompileTimeErrorCode.instanceMemberAccessFromFactory], and
-  /// [CompileTimeErrorCode.instanceMemberAccessFromStatic].
+  /// See [diag.implicitThisReferenceInInitializer],
+  /// [diag.instanceMemberAccessFromFactory], and
+  /// [diag.instanceMemberAccessFromStatic].
   void _checkForInvalidInstanceMemberAccess(SimpleIdentifier identifier) {
     if (_isInComment) {
       return;
@@ -3938,17 +3900,17 @@
     if (_enclosingExecutable.inStaticMethod) {
       diagnosticReporter.atNode(
         identifier,
-        CompileTimeErrorCode.instanceMemberAccessFromStatic,
+        diag.instanceMemberAccessFromStatic,
       );
     } else if (_enclosingExecutable.inFactoryConstructor) {
       diagnosticReporter.atNode(
         identifier,
-        CompileTimeErrorCode.instanceMemberAccessFromFactory,
+        diag.instanceMemberAccessFromFactory,
       );
     } else {
       diagnosticReporter.atNode(
         identifier,
-        CompileTimeErrorCode.implicitThisReferenceInInitializer,
+        diag.implicitThisReferenceInInitializer,
         arguments: [identifier.name],
       );
     }
@@ -3972,13 +3934,10 @@
 
   /// Verify that the usage of the given 'this' is valid.
   ///
-  /// See [CompileTimeErrorCode.invalidReferenceToThis].
+  /// See [diag.invalidReferenceToThis].
   void _checkForInvalidReferenceToThis(ThisExpression expression) {
     if (!_hasAccessToThis) {
-      diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.invalidReferenceToThis,
-      );
+      diagnosticReporter.atNode(expression, diag.invalidReferenceToThis);
     }
   }
 
@@ -4004,14 +3963,14 @@
 
     diagnosticReporter.atToken(
       lateKeyword,
-      CompileTimeErrorCode.lateFinalFieldWithConstConstructor,
+      diag.lateFinalFieldWithConstConstructor,
     );
   }
 
   /// Verify that the elements of the given list [literal] are subtypes of the
   /// list's static type.
   ///
-  /// See [CompileTimeErrorCode.listElementTypeNotAssignable].
+  /// See [diag.listElementTypeNotAssignable].
   void _checkForListElementTypeNotAssignable(ListLiteral literal) {
     // Determine the list's element type. We base this on the static type and
     // not the literal's type arguments because in strong mode, the type
@@ -4050,10 +4009,7 @@
     }
 
     if (declaredFragment is! TopLevelFunctionFragment) {
-      diagnosticReporter.atToken(
-        nameToken,
-        CompileTimeErrorCode.mainIsNotFunction,
-      );
+      diagnosticReporter.atToken(nameToken, diag.mainIsNotFunction);
     }
   }
 
@@ -4080,14 +4036,14 @@
     if (requiredPositional.length > 2) {
       diagnosticReporter.atToken(
         functionDeclaration.name,
-        CompileTimeErrorCode.mainHasTooManyRequiredPositionalParameters,
+        diag.mainHasTooManyRequiredPositionalParameters,
       );
     }
 
     if (parameters.any((e) => e.isRequiredNamed)) {
       diagnosticReporter.atToken(
         functionDeclaration.name,
-        CompileTimeErrorCode.mainHasRequiredNamedParameters,
+        diag.mainHasRequiredNamedParameters,
       );
     }
 
@@ -4098,7 +4054,7 @@
       if (!typeSystem.isSubtypeOf(listOfString, type)) {
         diagnosticReporter.atNode(
           first.notDefault.typeOrSelf,
-          CompileTimeErrorCode.mainFirstPositionalParameterType,
+          diag.mainFirstPositionalParameterType,
         );
       }
     }
@@ -4191,7 +4147,7 @@
           diagnosticReporter.atOffset(
             offset: offset,
             length: end - offset,
-            diagnosticCode: StaticWarningCode.missingEnumConstantInSwitch,
+            diagnosticCode: diag.missingEnumConstantInSwitch,
             arguments: [constantName!],
           );
         }
@@ -4202,7 +4158,7 @@
           diagnosticReporter.atOffset(
             offset: offset,
             length: end - offset,
-            diagnosticCode: StaticWarningCode.missingEnumConstantInSwitch,
+            diagnosticCode: diag.missingEnumConstantInSwitch,
             arguments: ['null'],
           );
         }
@@ -4214,16 +4170,16 @@
   /// constructor. The [mixinName] is the node to report problem on. The
   /// [mixinElement] is the mixing to evaluate.
   ///
-  /// See [CompileTimeErrorCode.mixinClassDeclaresConstructor].
+  /// See [diag.mixinClassDeclaresConstructor].
   bool _checkForMixinClassDeclaresConstructor(
     NamedType mixinName,
     InterfaceElement mixinElement,
   ) {
     for (var constructor in mixinElement.constructors) {
-      if (!constructor.isSynthetic && !constructor.isFactory) {
+      if (constructor.isOriginDeclaration && !constructor.isFactory) {
         diagnosticReporter.atNode(
           mixinName,
-          CompileTimeErrorCode.mixinClassDeclaresConstructor,
+          diag.mixinClassDeclaresConstructor,
           arguments: [mixinElement.name!],
         );
         return true;
@@ -4235,10 +4191,10 @@
   /// Verify that mixin classes must have 'Object' as their superclass and that
   /// they do not have a constructor.
   ///
-  /// See [CompileTimeErrorCode.mixinClassDeclaresConstructor],
-  /// [CompileTimeErrorCode.mixinInheritsFromNotObject].
+  /// See [diag.mixinClassDeclaresConstructor],
+  /// [diag.mixinInheritsFromNotObject].
   void _checkForMixinClassErrorCodes(
-    NamedCompilationUnitMember node,
+    CompilationUnitMember node,
     List<ClassMember> members,
     NamedType? superclass,
     WithClause? withClause,
@@ -4253,8 +4209,9 @@
             // classes.
             if (!member.isTrivial) {
               diagnosticReporter.atNode(
-                member.returnType,
-                CompileTimeErrorCode.mixinClassDeclaresConstructor,
+                // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+                member.typeName!,
+                diag.mixinClassDeclaresConstructor,
                 arguments: [element.name!],
               );
             }
@@ -4265,14 +4222,14 @@
       if (superclass != null && !superclass.typeOrThrow.isDartCoreObject) {
         diagnosticReporter.atNode(
           superclass,
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
+          diag.mixinClassDeclarationExtendsNotObject,
           arguments: [element.name!],
         );
       } else if (withClause != null &&
           !(element.isMixinApplication && withClause.mixinTypes.length < 2)) {
         diagnosticReporter.atNode(
           withClause,
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
+          diag.mixinClassDeclarationExtendsNotObject,
           arguments: [element.name!],
         );
       }
@@ -4284,7 +4241,7 @@
   /// The [mixinName] is the node to report problem on. The [mixinElement] is
   /// the mixing to evaluate.
   ///
-  /// See [CompileTimeErrorCode.mixinInheritsFromNotObject].
+  /// See [diag.mixinInheritsFromNotObject].
   bool _checkForMixinInheritsNotFromObject(
     NamedType mixinName,
     InterfaceElement mixinElement,
@@ -4304,7 +4261,7 @@
 
     diagnosticReporter.atNode(
       mixinName,
-      CompileTimeErrorCode.mixinInheritsFromNotObject,
+      diag.mixinInheritsFromNotObject,
       arguments: [mixinElement.name!],
     );
     return true;
@@ -4342,7 +4299,7 @@
         // so we can safely rely on `mixinName.type` being non-`null`.
         diagnosticReporter.atToken(
           mixinName.name,
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
+          diag.mixinApplicationNotImplementedInterface,
           arguments: [mixinName.type!, superType, constraint],
         );
         return true;
@@ -4381,8 +4338,8 @@
         var isSetter = name.endsWith('=');
 
         var errorCode = isSetter
-            ? CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedSetter
-            : CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember;
+            ? diag.mixinApplicationNoConcreteSuperInvokedSetter
+            : diag.mixinApplicationNoConcreteSuperInvokedMember;
 
         if (isSetter) {
           name = name.substring(0, name.length - 1);
@@ -4406,7 +4363,7 @@
         if (!isCorrect) {
           diagnosticReporter.atNode(
             mixinName,
-            CompileTimeErrorCode.mixinApplicationConcreteSuperInvokedMemberType,
+            diag.mixinApplicationConcreteSuperInvokedMemberType,
             arguments: [name, mixinMember.type, superMember.type],
           );
           return true;
@@ -4449,7 +4406,7 @@
           }
           diagnosticReporter.atNode(
             namedType,
-            CompileTimeErrorCode.privateCollisionInMixinApplication,
+            diag.privateCollisionInMixinApplication,
             arguments: [name, namedType.name.lexeme, conflictingName],
           );
           return true;
@@ -4469,7 +4426,7 @@
           // non-`null`.
           diagnosticReporter.atNode(
             namedType,
-            CompileTimeErrorCode.privateCollisionInMixinApplication,
+            diag.privateCollisionInMixinApplication,
             arguments: [
               name,
               namedType.name.lexeme,
@@ -4518,13 +4475,10 @@
 
   /// Checks to ensure that the given native function [body] is in SDK code.
   ///
-  /// See [ParserErrorCode.nativeFunctionBodyInNonSdkCode].
+  /// See [diag.nativeFunctionBodyInNonSdkCode].
   void _checkForNativeFunctionBodyInNonSdkCode(NativeFunctionBody body) {
     if (!_isInSystemLibrary) {
-      diagnosticReporter.atNode(
-        body,
-        ParserErrorCode.nativeFunctionBodyInNonSdkCode,
-      );
+      diagnosticReporter.atNode(body, diag.nativeFunctionBodyInNonSdkCode);
     }
   }
 
@@ -4535,7 +4489,7 @@
   /// This method assumes that the instance creation was tested to be 'new'
   /// before being called.
   ///
-  /// See [CompileTimeErrorCode.newWithUndefinedConstructor].
+  /// See [diag.newWithUndefinedConstructor].
   void _checkForNewWithUndefinedConstructor(
     InstanceCreationExpression expression,
     ConstructorName constructorName,
@@ -4558,13 +4512,13 @@
     if (name != null) {
       diagnosticReporter.atNode(
         name,
-        CompileTimeErrorCode.newWithUndefinedConstructor,
+        diag.newWithUndefinedConstructor,
         arguments: [namedType.qualifiedName, name.name],
       );
     } else {
       diagnosticReporter.atNode(
         constructorName,
-        CompileTimeErrorCode.newWithUndefinedConstructorDefault,
+        diag.newWithUndefinedConstructorDefault,
         arguments: [namedType.qualifiedName],
       );
     }
@@ -4574,11 +4528,11 @@
   /// constructor of its superclass, there should be such default constructor -
   /// implicit or explicit.
   ///
-  /// See [CompileTimeErrorCode.noDefaultSuperConstructorImplicit].
+  /// See [diag.noDefaultSuperConstructorImplicit].
   void _checkForNoDefaultSuperConstructorImplicit(ClassFragmentImpl fragment) {
     // do nothing if there is explicit constructor
     var constructors = fragment.element.constructors;
-    if (!constructors[0].isSynthetic) {
+    if (constructors[0].isOriginDeclaration) {
       return;
     }
     // prepare super
@@ -4593,7 +4547,7 @@
       if (superUnnamedConstructor.isFactory) {
         diagnosticReporter.atElement2(
           fragment.asElement2,
-          CompileTimeErrorCode.nonGenerativeImplicitConstructor,
+          diag.nonGenerativeImplicitConstructor,
           arguments: [
             superElement.name ?? '',
             fragment.name ?? '',
@@ -4612,7 +4566,7 @@
       // real problem was already reported.
       diagnosticReporter.atElement2(
         fragment.asElement2,
-        CompileTimeErrorCode.noDefaultSuperConstructorImplicit,
+        diag.noDefaultSuperConstructorImplicit,
         arguments: [superType, fragment.displayName],
       );
     }
@@ -4642,7 +4596,7 @@
       // no generative constructors. State this clearly to users.
       diagnosticReporter.atNode(
         superclass!,
-        CompileTimeErrorCode.noGenerativeConstructorsInSuperclass,
+        diag.noGenerativeConstructorsInSuperclass,
         arguments: [_enclosingClass!.name!, superElement.name!],
       );
       return true;
@@ -4656,7 +4610,7 @@
         node.factoryKeyword == null) {
       diagnosticReporter.atConstructorDeclaration(
         node,
-        CompileTimeErrorCode.nonConstGenerativeEnumConstructor,
+        diag.nonConstGenerativeEnumConstructor,
       );
     }
   }
@@ -4666,7 +4620,7 @@
   /// * has explicit type arguments
   /// * is not start of the statement
   ///
-  /// See [CompileTimeErrorCode.nonConstMapAsExpressionStatement].
+  /// See [diag.nonConstMapAsExpressionStatement].
   void _checkForNonConstMapAsExpressionStatement3(SetOrMapLiteral literal) {
     // "const"
     if (literal.constKeyword != null) {
@@ -4687,17 +4641,14 @@
     }
 
     // TODO(srawlins): Add any tests showing this is reported.
-    diagnosticReporter.atNode(
-      literal,
-      CompileTimeErrorCode.nonConstMapAsExpressionStatement,
-    );
+    diagnosticReporter.atNode(literal, diag.nonConstMapAsExpressionStatement);
   }
 
   void _checkForNonCovariantTypeParameterPositionInRepresentationType(
     ExtensionTypeDeclaration node,
     ExtensionTypeFragmentImpl fragment,
   ) {
-    var typeParameters = node.typeParameters?.typeParameters;
+    var typeParameters = node.primaryConstructor.typeParameters?.typeParameters;
     if (typeParameters == null) {
       return;
     }
@@ -4715,8 +4666,7 @@
       if (nonCovariant) {
         diagnosticReporter.atNode(
           typeParameterNode,
-          CompileTimeErrorCode
-              .nonCovariantTypeParameterPositionInRepresentationType,
+          diag.nonCovariantTypeParameterPositionInRepresentationType,
         );
       }
     }
@@ -4735,14 +4685,35 @@
 
     diagnosticReporter.atToken(
       variableList.variables.first.name,
-      CompileTimeErrorCode.nonFinalFieldInEnum,
+      diag.nonFinalFieldInEnum,
+    );
+  }
+
+  void _checkForNonRedirectingGenerativeConstructorWithPrimary(
+    ConstructorDeclaration node,
+  ) {
+    var enclosingClass = _enclosingClass;
+    if (enclosingClass == null ||
+        enclosingClass is ExtensionTypeElement ||
+        enclosingClass.constructors.none((c) => c.isPrimary)) {
+      return;
+    }
+
+    if (node.factoryKeyword != null ||
+        node.initializers.any((i) => i is RedirectingConstructorInvocation)) {
+      return;
+    }
+
+    diagnosticReporter.atConstructorDeclaration(
+      node,
+      diag.nonRedirectingGenerativeConstructorWithPrimary,
     );
   }
 
   /// Verify that the given method [declaration] of operator `[]=`, has `void`
   /// return type.
   ///
-  /// See [CompileTimeErrorCode.nonVoidReturnForOperator].
+  /// See [diag.nonVoidReturnForOperator].
   void _checkForNonVoidReturnTypeForOperator(MethodDeclaration declaration) {
     // check that []= operator
     if (declaration.name.lexeme != "[]=") {
@@ -4753,10 +4724,7 @@
     if (annotation != null) {
       DartType type = annotation.typeOrThrow;
       if (type is! VoidType) {
-        diagnosticReporter.atNode(
-          annotation,
-          CompileTimeErrorCode.nonVoidReturnForOperator,
-        );
+        diagnosticReporter.atNode(annotation, diag.nonVoidReturnForOperator);
       }
     }
   }
@@ -4764,15 +4732,12 @@
   /// Verify the [namedType], used as the return type of a setter, is valid
   /// (either `null` or the type 'void').
   ///
-  /// See [CompileTimeErrorCode.nonVoidReturnForSetter].
+  /// See [diag.nonVoidReturnForSetter].
   void _checkForNonVoidReturnTypeForSetter(TypeAnnotation? namedType) {
     if (namedType != null) {
       DartType type = namedType.typeOrThrow;
       if (type is! VoidType) {
-        diagnosticReporter.atNode(
-          namedType,
-          CompileTimeErrorCode.nonVoidReturnForSetter,
-        );
+        diagnosticReporter.atNode(namedType, diag.nonVoidReturnForSetter);
       }
     }
   }
@@ -4799,7 +4764,7 @@
 
       diagnosticReporter.atNode(
         field,
-        CompileTimeErrorCode.notInitializedNonNullableInstanceField,
+        diag.notInitializedNonNullableInstanceField,
         arguments: [field.name.lexeme],
       );
     }
@@ -4849,7 +4814,7 @@
       if (variable.initializer == null) {
         diagnosticReporter.atToken(
           variable.name,
-          CompileTimeErrorCode.notInitializedNonNullableVariable,
+          diag.notInitializedNonNullableVariable,
           arguments: [variable.name.lexeme],
         );
       }
@@ -4858,8 +4823,8 @@
 
   /// Verify that all classes of the given [onClause] are valid.
   ///
-  /// See [CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass],
-  /// [CompileTimeErrorCode.mixinSuperClassConstraintDeferredClass].
+  /// See [diag.mixinSuperClassConstraintDisallowedClass],
+  /// [diag.mixinSuperClassConstraintDeferredClass].
   bool _checkForOnClauseErrorCodes(MixinOnClause? onClause) {
     if (onClause == null) {
       return false;
@@ -4870,13 +4835,13 @@
       if (type is InterfaceType) {
         if (_checkForExtendsOrImplementsDisallowedClass(
           namedType,
-          CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
+          diag.mixinSuperClassConstraintDisallowedClass,
         )) {
           problemReported = true;
         } else {
           if (_checkForExtendsOrImplementsDeferredClass(
             namedType,
-            CompileTimeErrorCode.mixinSuperClassConstraintDeferredClass,
+            diag.mixinSuperClassConstraintDeferredClass,
           )) {
             problemReported = true;
           }
@@ -4892,7 +4857,7 @@
   /// This method assumes that the method declaration was tested to be an
   /// operator declaration before being called.
   ///
-  /// See [CompileTimeErrorCode.optionalParameterInOperator].
+  /// See [diag.optionalParameterInOperator].
   void _checkForOptionalParameterInOperator(MethodDeclaration declaration) {
     var parameterList = declaration.parameters;
     if (parameterList == null) {
@@ -4904,7 +4869,7 @@
       if (formalParameter.isOptional) {
         diagnosticReporter.atNode(
           formalParameter,
-          CompileTimeErrorCode.optionalParameterInOperator,
+          diag.optionalParameterInOperator,
         );
       }
     }
@@ -4957,8 +4922,8 @@
       diagnosticReporter.atNode(
         node,
         treatedAsDouble
-            ? CompileTimeErrorCode.integerLiteralImpreciseAsDouble
-            : CompileTimeErrorCode.integerLiteralOutOfRange,
+            ? diag.integerLiteralImpreciseAsDouble
+            : diag.integerLiteralOutOfRange,
         arguments: messageArguments,
       );
     }
@@ -4968,7 +4933,7 @@
   /// generative constructor and references itself directly or indirectly. The
   /// [constructorElement] is the constructor element.
   ///
-  /// See [CompileTimeErrorCode.recursiveConstructorRedirect].
+  /// See [diag.recursiveConstructorRedirect].
   void _checkForRecursiveConstructorRedirect(
     ConstructorDeclaration declaration,
     ConstructorElement constructorElement,
@@ -4984,7 +4949,7 @@
         if (_hasRedirectingFactoryConstructorCycle(constructorElement)) {
           diagnosticReporter.atNode(
             initializer,
-            CompileTimeErrorCode.recursiveConstructorRedirect,
+            diag.recursiveConstructorRedirect,
           );
         }
         return;
@@ -4996,7 +4961,7 @@
   /// constructor and references itself directly or indirectly. The
   /// constructor [element] is the element introduced by the declaration.
   ///
-  /// See [CompileTimeErrorCode.recursiveFactoryRedirect].
+  /// See [diag.recursiveFactoryRedirect].
   bool _checkForRecursiveFactoryRedirect(
     ConstructorDeclaration declaration,
     ConstructorElement element,
@@ -5013,7 +4978,7 @@
     // report error
     diagnosticReporter.atNode(
       redirectedConstructorNode,
-      CompileTimeErrorCode.recursiveFactoryRedirect,
+      diag.recursiveFactoryRedirect,
     );
     return true;
   }
@@ -5033,7 +4998,7 @@
           parameter.defaultValue != null) {
         diagnosticReporter.atToken(
           parameter.name!,
-          CompileTimeErrorCode.defaultValueInRedirectingFactoryConstructor,
+          diag.defaultValueInRedirectingFactoryConstructor,
         );
       }
     }
@@ -5055,7 +5020,7 @@
       }
       diagnosticReporter.atNode(
         redirectedConstructor,
-        CompileTimeErrorCode.redirectToAbstractClassConstructor,
+        diag.redirectToAbstractClassConstructor,
         arguments: [constructorStrName, redirectedClass.name!],
       );
     }
@@ -5068,7 +5033,7 @@
   /// Check whether the redirecting constructor, [element], is const, and
   /// [redirectedElement], its redirectee, is not const.
   ///
-  /// See [CompileTimeErrorCode.redirectToNonConstConstructor].
+  /// See [diag.redirectToNonConstConstructor].
   void _checkForRedirectToNonConstConstructor(
     ConstructorElement element,
     ConstructorElement? redirectedElement,
@@ -5080,7 +5045,7 @@
         !redirectedElement.isConst) {
       diagnosticReporter.atEntity(
         errorEntity,
-        CompileTimeErrorCode.redirectToNonConstConstructor,
+        diag.redirectToNonConstConstructor,
       );
     }
   }
@@ -5130,20 +5095,17 @@
 
   /// Check that the given rethrow [expression] is inside of a catch clause.
   ///
-  /// See [CompileTimeErrorCode.rethrowOutsideCatch].
+  /// See [diag.rethrowOutsideCatch].
   void _checkForRethrowOutsideCatch(RethrowExpression expression) {
     if (_enclosingExecutable.catchClauseLevel == 0) {
-      diagnosticReporter.atNode(
-        expression,
-        CompileTimeErrorCode.rethrowOutsideCatch,
-      );
+      diagnosticReporter.atNode(expression, diag.rethrowOutsideCatch);
     }
   }
 
   /// Check that if the given constructor [declaration] is generative, then
   /// it does not have an expression function body.
   ///
-  /// See [CompileTimeErrorCode.returnInGenerativeConstructor].
+  /// See [diag.returnInGenerativeConstructor].
   void _checkForReturnInGenerativeConstructor(
     ConstructorDeclaration declaration,
   ) {
@@ -5157,23 +5119,20 @@
       return;
     }
 
-    diagnosticReporter.atNode(
-      body,
-      CompileTimeErrorCode.returnInGenerativeConstructor,
-    );
+    diagnosticReporter.atNode(body, diag.returnInGenerativeConstructor);
   }
 
   /// Checks that every supertype which is sealed is also declared in the
   /// current library.
   ///
-  /// See [CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary].
+  /// See [diag.sealedClassSubtypeOutsideOfLibrary].
   void _checkForSealedSupertypeOutsideOfLibrary(List<NamedType> supertypes) {
     for (NamedType namedType in supertypes) {
       if (namedType.type case InterfaceType(:ClassElement element)) {
         if (element.isSealed && element.library != _currentLibrary) {
           diagnosticReporter.atNode(
             namedType,
-            CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary,
+            diag.sealedClassSubtypeOutsideOfLibrary,
             arguments: [element.name!],
           );
         }
@@ -5184,7 +5143,7 @@
   /// Verify that the elements in the given set [literal] are subtypes of the
   /// set's static type.
   ///
-  /// See [CompileTimeErrorCode.setElementTypeNotAssignable].
+  /// See [diag.setElementTypeNotAssignable].
   void _checkForSetElementTypeNotAssignable3(SetOrMapLiteral literal) {
     // Determine the set's element type. We base this on the static type and
     // not the literal's type arguments because in strong mode, the type
@@ -5219,7 +5178,7 @@
   /// Check the given [typeReference] and that the [name] is not a reference to
   /// an instance member.
   ///
-  /// See [CompileTimeErrorCode.staticAccessToInstanceMember].
+  /// See [diag.staticAccessToInstanceMember].
   void _checkForStaticAccessToInstanceMember(
     InterfaceElement? typeReference,
     SimpleIdentifier name,
@@ -5241,7 +5200,7 @@
       }
       diagnosticReporter.atNode(
         name,
-        CompileTimeErrorCode.staticAccessToInstanceMember,
+        diag.staticAccessToInstanceMember,
         arguments: [name.name],
       );
     }
@@ -5258,7 +5217,7 @@
     )) {
       diagnosticReporter.atNode(
         expression,
-        CompileTimeErrorCode.throwOfInvalidType,
+        diag.throwOfInvalidType,
         arguments: [type],
       );
     }
@@ -5267,7 +5226,7 @@
   /// Verify that the given [element] does not reference itself directly.
   /// If it does, report the error on the [nameToken].
   ///
-  /// See [CompileTimeErrorCode.typeAliasCannotReferenceItself].
+  /// See [diag.typeAliasCannotReferenceItself].
   void _checkForTypeAliasCannotReferenceItself(
     Token nameToken,
     TypeAliasFragmentImpl element,
@@ -5275,19 +5234,19 @@
     if (element.hasSelfReference) {
       diagnosticReporter.atToken(
         nameToken,
-        CompileTimeErrorCode.typeAliasCannotReferenceItself,
+        diag.typeAliasCannotReferenceItself,
       );
     }
   }
 
   /// Verify that the [type] is not a deferred type.
   ///
-  /// See [CompileTimeErrorCode.typeAnnotationDeferredClass].
+  /// See [diag.typeAnnotationDeferredClass].
   void _checkForTypeAnnotationDeferredClass(TypeAnnotation? type) {
     if (type is NamedType && type.isDeferred) {
       diagnosticReporter.atNode(
         type,
-        CompileTimeErrorCode.typeAnnotationDeferredClass,
+        diag.typeAnnotationDeferredClass,
         arguments: [type.qualifiedName],
       );
     }
@@ -5295,7 +5254,7 @@
 
   /// Check that none of the type [parameters] references itself in its bound.
   ///
-  /// See [CompileTimeErrorCode.typeParameterSupertypeOfItsBound].
+  /// See [diag.typeParameterSupertypeOfItsBound].
   void _checkForTypeParameterBoundRecursion(List<TypeParameter> parameters) {
     checkForTypeParameterBoundRecursion(diagnosticReporter, parameters);
   }
@@ -5310,10 +5269,7 @@
         // The class's type parameters are not in scope for static methods.
         // However all other type parameters are legal (e.g. the static method's
         // type parameters, or a local function's type parameters).
-        diagnosticReporter.atToken(
-          name,
-          CompileTimeErrorCode.typeParameterReferencedByStatic,
-        );
+        diagnosticReporter.atToken(name, diag.typeParameterReferencedByStatic);
       }
     }
   }
@@ -5322,9 +5278,9 @@
   /// super constructor invocation nor a redirecting constructor invocation,
   /// that the superclass has a default generative constructor.
   ///
-  /// See [CompileTimeErrorCode.undefinedConstructorInInitializerDefault],
-  /// [CompileTimeErrorCode.nonGenerativeConstructor], and
-  /// [CompileTimeErrorCode.noDefaultSuperConstructorExplicit].
+  /// See [diag.undefinedConstructorInInitializerDefault],
+  /// [diag.nonGenerativeConstructor], and
+  /// [diag.noDefaultSuperConstructorExplicit].
   void _checkForUndefinedConstructorInInitializerImplicit(
     ConstructorDeclaration constructor,
   ) {
@@ -5371,8 +5327,9 @@
     var superUnnamedConstructor = superElement.unnamedConstructor;
     if (superUnnamedConstructor == null) {
       diagnosticReporter.atNode(
-        constructor.returnType,
-        CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
+        // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+        constructor.typeName!,
+        diag.undefinedConstructorInInitializerDefault,
         arguments: [superElement.name!],
       );
       return;
@@ -5380,8 +5337,9 @@
 
     if (superUnnamedConstructor.isFactory) {
       diagnosticReporter.atNode(
-        constructor.returnType,
-        CompileTimeErrorCode.nonGenerativeConstructor,
+        // TODO(scheglov): https://github.com/dart-lang/sdk/issues/62067
+        constructor.typeName!,
+        diag.nonGenerativeConstructor,
         arguments: [superUnnamedConstructor],
       );
       return;
@@ -5403,8 +5361,7 @@
         diagnosticReporter.atOffset(
           offset: offset,
           length: length,
-          diagnosticCode:
-              CompileTimeErrorCode.noDefaultSuperConstructorExplicit,
+          diagnosticCode: diag.noDefaultSuperConstructorExplicit,
           arguments: [superType],
         );
       }
@@ -5424,8 +5381,7 @@
       diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode:
-            CompileTimeErrorCode.implicitSuperInitializerMissingArguments,
+        diagnosticCode: diag.implicitSuperInitializerMissingArguments,
         arguments: [superType],
       );
     }
@@ -5445,30 +5401,30 @@
     List<Object> arguments = const [];
     if (operator.type == TokenType.QUESTION) {
       if (nullAwareElementOrMapEntryKind == null) {
-        code = StaticWarningCode.invalidNullAwareOperator;
+        code = diag.invalidNullAwareOperator;
         endToken = operator.next!;
         arguments = ['?[', '['];
       } else {
         switch (nullAwareElementOrMapEntryKind) {
           case _NullAwareElementOrMapEntryKind.element:
-            code = StaticWarningCode.invalidNullAwareElement;
+            code = diag.invalidNullAwareElement;
           case _NullAwareElementOrMapEntryKind.mapEntryKey:
-            code = StaticWarningCode.invalidNullAwareMapEntryKey;
+            code = diag.invalidNullAwareMapEntryKey;
           case _NullAwareElementOrMapEntryKind.mapEntryValue:
-            code = StaticWarningCode.invalidNullAwareMapEntryValue;
+            code = diag.invalidNullAwareMapEntryValue;
         }
       }
     } else if (operator.type == TokenType.QUESTION_PERIOD) {
-      code = StaticWarningCode.invalidNullAwareOperator;
+      code = diag.invalidNullAwareOperator;
       arguments = [operator.lexeme, '.'];
     } else if (operator.type == TokenType.QUESTION_PERIOD_PERIOD) {
-      code = StaticWarningCode.invalidNullAwareOperator;
+      code = diag.invalidNullAwareOperator;
       arguments = [operator.lexeme, '..'];
     } else if (operator.type == TokenType.PERIOD_PERIOD_PERIOD_QUESTION) {
-      code = StaticWarningCode.invalidNullAwareOperator;
+      code = diag.invalidNullAwareOperator;
       arguments = [operator.lexeme, '...'];
     } else if (operator.type == TokenType.BANG) {
-      code = StaticWarningCode.unnecessaryNonNullAssertion;
+      code = diag.unnecessaryNonNullAssertion;
     } else {
       return;
     }
@@ -5525,7 +5481,7 @@
     }
 
     if (typeSystem.isStrictlyNonNullable(targetType)) {
-      if (code == StaticWarningCode.invalidNullAwareOperator) {
+      if (code == diag.invalidNullAwareOperator) {
         var previousOperator = previousShortCircuitingOperator(target);
         if (previousOperator != null) {
           diagnosticReporter.reportError(
@@ -5553,7 +5509,7 @@
   /// defined in the enclosing class rather than in a superclass.
   ///
   /// See
-  /// [CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember].
+  /// [diag.unqualifiedReferenceToNonLocalStaticMember].
   void _checkForUnqualifiedReferenceToNonLocalStaticMember(
     SimpleIdentifier name,
   ) {
@@ -5591,13 +5547,13 @@
     if (_enclosingExtension != null) {
       diagnosticReporter.atNode(
         name,
-        CompileTimeErrorCode.unqualifiedReferenceToStaticMemberOfExtendedType,
+        diag.unqualifiedReferenceToStaticMemberOfExtendedType,
         arguments: [enclosingElement.displayName],
       );
     } else {
       diagnosticReporter.atNode(
         name,
-        CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember,
+        diag.unqualifiedReferenceToNonLocalStaticMember,
         arguments: [enclosingElement.displayName],
       );
     }
@@ -5612,10 +5568,10 @@
     var element = parameter.declaredFragment?.element;
     if (element is FieldFormalParameterElementImpl) {
       var fieldElement = element.field;
-      if (fieldElement == null || fieldElement.isSynthetic) {
+      if (fieldElement == null || fieldElement.isOriginGetterSetter) {
         diagnosticReporter.atNode(
           parameter,
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
+          diag.initializingFormalForNonExistentField,
           arguments: [parameter.name.lexeme],
         );
       } else {
@@ -5623,36 +5579,36 @@
         if (parameterElement is FieldFormalParameterElementImpl) {
           var declaredType = parameterElement.type;
           var fieldType = fieldElement.type;
-          if (fieldElement.isSynthetic) {
+          if (fieldElement.isOriginGetterSetter) {
             diagnosticReporter.atNode(
               parameter,
-              CompileTimeErrorCode.initializingFormalForNonExistentField,
+              diag.initializingFormalForNonExistentField,
               arguments: [parameter.name.lexeme],
             );
           } else if (fieldElement.isStatic) {
             diagnosticReporter.atNode(
               parameter,
-              CompileTimeErrorCode.initializerForStaticField,
+              diag.initializerForStaticField,
               arguments: [parameter.name.lexeme],
             );
           } else if (!typeSystem.isSubtypeOf(declaredType, fieldType)) {
             diagnosticReporter.atNode(
               parameter,
-              CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
+              diag.fieldInitializingFormalNotAssignable,
               arguments: [declaredType, fieldType],
             );
           }
         } else {
-          if (fieldElement.isSynthetic) {
+          if (fieldElement.isOriginGetterSetter) {
             diagnosticReporter.atNode(
               parameter,
-              CompileTimeErrorCode.initializingFormalForNonExistentField,
+              diag.initializingFormalForNonExistentField,
               arguments: [parameter.name.lexeme],
             );
           } else if (fieldElement.isStatic) {
             diagnosticReporter.atNode(
               parameter,
-              CompileTimeErrorCode.initializerForStaticField,
+              diag.initializerForStaticField,
               arguments: [parameter.name.lexeme],
             );
           }
@@ -5671,7 +5627,7 @@
   /// This method assumes that the method declaration was tested to be an
   /// operator declaration before being called.
   ///
-  /// See [CompileTimeErrorCode.wrongNumberOfParametersForOperator].
+  /// See [diag.wrongNumberOfParametersForOperator].
   bool _checkForWrongNumberOfParametersForOperator(
     MethodDeclaration declaration,
   ) {
@@ -5712,14 +5668,14 @@
     if (expected != -1 && numParameters != expected) {
       diagnosticReporter.atToken(
         nameToken,
-        CompileTimeErrorCode.wrongNumberOfParametersForOperator,
+        diag.wrongNumberOfParametersForOperator,
         arguments: [name, expected, numParameters],
       );
       return true;
     } else if ("-" == name && numParameters > 1) {
       diagnosticReporter.atToken(
         nameToken,
-        CompileTimeErrorCode.wrongNumberOfParametersForOperatorMinus,
+        diag.wrongNumberOfParametersForOperatorMinus,
         arguments: [numParameters],
       );
       return true;
@@ -5842,8 +5798,7 @@
             if (!typeParameter.isLegacyCovariant) {
               diagnosticReporter.atElement2(
                 typeParameter,
-                CompileTimeErrorCode
-                    .wrongExplicitTypeParameterVarianceInSuperinterface,
+                diag.wrongExplicitTypeParameterVarianceInSuperinterface,
                 arguments: [
                   typeParameter.name ?? '',
                   typeParameter.variance.keyword,
@@ -5854,7 +5809,7 @@
             } else {
               diagnosticReporter.atElement2(
                 typeParameter,
-                CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
+                diag.wrongTypeParameterVarianceInSuperinterface,
                 arguments: [typeParameter.name ?? '', superInterface],
               );
             }
@@ -5894,7 +5849,7 @@
     if (!variance.greaterThanOrEqual(typeParameter.variance)) {
       diagnosticReporter.atEntity(
         errorTarget,
-        CompileTimeErrorCode.wrongTypeParameterVariancePosition,
+        diag.wrongTypeParameterVariancePosition,
         arguments: [
           typeParameter.variance.keyword,
           typeParameter.name ?? '',
@@ -5907,7 +5862,7 @@
   /// Verify that the current class does not have the same class in the
   /// 'extends' and 'implements' clauses.
   ///
-  /// See [CompileTimeErrorCode.implementsSuperClass].
+  /// See [diag.implementsSuperClass].
   void _checkImplementsSuperClass(ImplementsClause? implementsClause) {
     if (implementsClause == null) {
       return;
@@ -5923,7 +5878,7 @@
       if (type is InterfaceType && type.element == superElement) {
         diagnosticReporter.atNode(
           interfaceNode,
-          CompileTimeErrorCode.implementsSuperClass,
+          diag.implementsSuperClass,
           arguments: [superElement],
         );
       }
@@ -5946,14 +5901,14 @@
       _checkForRepeatedType(
         libraryContext.setOfOn(declarationFragment.asElement2),
         onClause?.superclassConstraints,
-        CompileTimeErrorCode.onRepeated,
+        diag.onRepeated,
       );
       _checkForRepeatedType(
         libraryContext.setOfImplements(declarationFragment.asElement2),
         implementsClause?.interfaces,
-        CompileTimeErrorCode.implementsRepeated,
+        diag.implementsRepeated,
       );
-      _checkForConflictingGenerics(node);
+      _checkForConflictingGenerics(node: node, nameToken: node.name);
       _checkForBaseClassOrMixinImplementedOutsideOfLibrary(implementsClause);
       _checkForFinalSupertypeOutsideOfLibrary(
         null,
@@ -5971,7 +5926,7 @@
   /// Verify that the current class does not have the same class in the
   /// 'extends' and 'with' clauses.
   ///
-  /// See [CompileTimeErrorCode.implementsSuperClass].
+  /// See [diag.implementsSuperClass].
   void _checkMixinsSuperClass(WithClause? withClause) {
     if (withClause == null) {
       return;
@@ -5987,7 +5942,7 @@
       if (type is InterfaceType && type.element == superElement) {
         diagnosticReporter.atNode(
           mixinNode,
-          CompileTimeErrorCode.mixinsSuperClass,
+          diag.mixinsSuperClass,
           arguments: [superElement],
         );
       }
@@ -6017,10 +5972,16 @@
       return;
     }
 
+    // Must refer to a field.
+    // TODO(rnystrom): Handle primary constructor declaring parameters.
+    if (parameter is! FieldFormalParameter) {
+      return;
+    }
+
     if (correspondingPublicName(name.lexeme) == null) {
       diagnosticReporter.atToken(
         name,
-        CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
+        diag.privateNamedParameterWithoutPublicName,
       );
     }
   }
@@ -6054,10 +6015,7 @@
       var parameter = parameters[i].notDefault;
       var keyword = parameter.covariantKeyword;
       if (keyword != null) {
-        diagnosticReporter.atToken(
-          keyword,
-          CompileTimeErrorCode.invalidUseOfCovariant,
-        );
+        diagnosticReporter.atToken(keyword, diag.invalidUseOfCovariant);
       }
     }
   }
@@ -6101,7 +6059,7 @@
             var errorTarget = _parameterName(parameter) ?? parameter;
             diagnosticReporter.atEntity(
               errorTarget,
-              CompileTimeErrorCode.defaultValueOnRequiredParameter,
+              diag.defaultValueOnRequiredParameter,
             );
           }
         } else if (defaultValuesAreExpected) {
@@ -6114,17 +6072,15 @@
               if (parameterElement.metadata.hasRequired) {
                 diagnosticReporter.atEntity(
                   errorTarget,
-                  CompileTimeErrorCode
-                      .missingDefaultValueForParameterWithAnnotation,
+                  diag.missingDefaultValueForParameterWithAnnotation,
                 );
               } else {
                 if (!_isWildcardSuperFormalPositionalParameter(parameter)) {
                   diagnosticReporter.atEntity(
                     errorTarget,
                     parameterElement.isPositional
-                        ? CompileTimeErrorCode
-                              .missingDefaultValueForParameterPositional
-                        : CompileTimeErrorCode.missingDefaultValueForParameter,
+                        ? diag.missingDefaultValueForParameterPositional
+                        : diag.missingDefaultValueForParameter,
                     arguments: [parameterName?.lexeme ?? '?'],
                   );
                 }
@@ -6325,7 +6281,7 @@
       diagnosticReporter.atOffset(
         offset: offset,
         length: length,
-        diagnosticCode: WarningCode.multipleCombinators,
+        diagnosticCode: diag.multipleCombinators,
       );
     }
   }
@@ -6382,7 +6338,7 @@
   ) {
     var fields = <FieldElement>{};
     var unitMemberDeclaration =
-        constructor.parent as NamedCompilationUnitMember;
+        constructor.parent?.parent as CompilationUnitMember;
     late NodeList<ClassMember> membersList;
     switch (unitMemberDeclaration) {
       case TypeAlias() || FunctionDeclaration():
@@ -6564,10 +6520,7 @@
     if (element is TypeParameterizedElement && !element.isSimplyBounded) {
       // TODO(srawlins): Don't report this if TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
       //  has been reported.
-      _diagnosticReporter.atNode(
-        node,
-        CompileTimeErrorCode.notInstantiatedBound,
-      );
+      _diagnosticReporter.atNode(node, diag.notInstantiatedBound);
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/generated/exhaustiveness.dart b/pkg/analyzer/lib/src/generated/exhaustiveness.dart
index 953a453..2f36a25 100644
--- a/pkg/analyzer/lib/src/generated/exhaustiveness.dart
+++ b/pkg/analyzer/lib/src/generated/exhaustiveness.dart
@@ -26,6 +26,7 @@
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:pub_semver/pub_semver.dart';
 
 /// The buffer that accumulates types and elements as is, so that they
@@ -314,6 +315,14 @@
   }
 
   @override
+  bool isEnum(TypeImpl type) {
+    if (type is InterfaceTypeImpl) {
+      return type.element is EnumElement;
+    }
+    return false;
+  }
+
+  @override
   bool isGeneric(TypeImpl type) {
     return type is InterfaceTypeImpl && type.typeArguments.isNotEmpty;
   }
@@ -358,6 +367,11 @@
   }
 
   @override
+  Uri? libraryUri(TypeImpl type) {
+    return type.element?.library?.uri;
+  }
+
+  @override
   TypeImpl overapproximate(TypeImpl type) {
     return TypeParameterReplacer.replaceTypeVariables(_typeSystem, type);
   }
@@ -444,8 +458,8 @@
 
 abstract class MissingPatternPart {
   /// Expando associating each
-  /// [CompileTimeErrorCode.nonExhaustiveSwitchExpression] or
-  /// [CompileTimeErrorCode.nonExhaustiveSwitchStatement] diagnostic with a
+  /// [diag.nonExhaustiveSwitchExpression] or
+  /// [diag.nonExhaustiveSwitchStatement] diagnostic with a
   /// list of missing patterns; this data is used by the analysis server to add
   /// missing switch cases.
   static final byDiagnostic = Expando<List<List<MissingPatternPart>>>();
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index d0d2bb2..e9015c2 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -16,7 +16,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// A visitor used to find problems with the way the `dart:ffi` APIs are being
 /// used. See 'pkg/vm/lib/transformations/ffi_checks.md' for the specification
@@ -133,9 +133,9 @@
           compound = node;
           if (node.declaredFragment!.element.isEmptyStruct) {
             _diagnosticReporter.atToken(
-              node.name,
-              FfiCode.emptyStruct,
-              arguments: [node.name.lexeme, className ?? '<null>'],
+              node.namePart.typeName,
+              diag.emptyStruct,
+              arguments: [node.namePart.typeName.lexeme, className ?? '<null>'],
             );
           }
           if (className == _structClassName) {
@@ -144,7 +144,7 @@
         } else if (className == _abiSpecificIntegerClassName) {
           _validateAbiSpecificIntegerAnnotation(node);
           _validateAbiSpecificIntegerMappingAnnotation(
-            node.name,
+            node.namePart.typeName,
             node.metadata,
           );
         }
@@ -152,8 +152,8 @@
           superclass.isAbiSpecificIntegerSubtype) {
         _diagnosticReporter.atNode(
           superclass,
-          FfiCode.subtypeOfStructClassInExtends,
-          arguments: [node.name.lexeme, superclass.name.lexeme],
+          diag.subtypeOfStructClassInExtends,
+          arguments: [node.namePart.typeName.lexeme, superclass.name.lexeme],
         );
       }
     }
@@ -172,7 +172,7 @@
         _diagnosticReporter.atNode(
           typename,
           subtypeOfStructCode,
-          arguments: [node.name.lexeme, typename.name.lexeme],
+          arguments: [node.namePart.typeName.lexeme, typename.name.lexeme],
         );
       }
     }
@@ -180,22 +180,22 @@
     var implementsClause = node.implementsClause;
     if (implementsClause != null) {
       for (NamedType type in implementsClause.interfaces) {
-        checkSupertype(type, FfiCode.subtypeOfStructClassInImplements);
+        checkSupertype(type, diag.subtypeOfStructClassInImplements);
       }
     }
     var withClause = node.withClause;
     if (withClause != null) {
       for (NamedType type in withClause.mixinTypes) {
-        checkSupertype(type, FfiCode.subtypeOfStructClassInWith);
+        checkSupertype(type, diag.subtypeOfStructClassInWith);
       }
     }
 
     if (inCompound) {
       if (node.declaredFragment!.element.typeParameters.isNotEmpty) {
         _diagnosticReporter.atToken(
-          node.name,
-          FfiCode.genericStructSubclass,
-          arguments: [node.name.lexeme],
+          node.namePart.typeName,
+          diag.genericStructSubclass,
+          arguments: [node.namePart.typeName.lexeme],
         );
       }
       var implementsClause = node.implementsClause;
@@ -207,9 +207,9 @@
         var finalizableType = finalizableElement.thisType;
         if (typeSystem.isSubtypeOf(compoundType, finalizableType)) {
           _diagnosticReporter.atToken(
-            node.name,
-            FfiCode.compoundImplementsFinalizable,
-            arguments: [node.name.lexeme],
+            node.namePart.typeName,
+            diag.compoundImplementsFinalizable,
+            arguments: [node.namePart.typeName.lexeme],
           );
         }
       }
@@ -293,7 +293,7 @@
       if (!constructor!.isFactory) {
         _diagnosticReporter.atNode(
           node.constructorName,
-          FfiCode.creationOfStructOrUnion,
+          diag.creationOfStructOrUnion,
         );
       }
     } else if (class_.isNativeCallable) {
@@ -316,7 +316,7 @@
             var name = annotation.annotationAst.name;
             _diagnosticReporter.atNode(
               name,
-              FfiCode.ffiNativeInvalidDuplicateDefaultAsset,
+              diag.ffiNativeInvalidDuplicateDefaultAsset,
             );
           }
 
@@ -471,7 +471,7 @@
         var name = (annotation as ElementAnnotationImpl).annotationAst.name;
         _diagnosticReporter.atNode(
           name,
-          FfiCode.ffiNativeInvalidMultipleAnnotations,
+          diag.ffiNativeInvalidMultipleAnnotations,
         );
         break;
       }
@@ -479,7 +479,7 @@
       hadNativeAnnotation = true;
 
       if (!isExternal) {
-        _diagnosticReporter.atToken(errorNode, FfiCode.ffiNativeMustBeExternal);
+        _diagnosticReporter.atToken(errorNode, diag.ffiNativeMustBeExternal);
       }
 
       var ffiSignature = annotationType.typeArguments[0]; // The T in @Native<T>
@@ -497,7 +497,7 @@
           // Field annotated with a function type, that can't work.
           _diagnosticReporter.atToken(
             errorNode,
-            FfiCode.nativeFieldInvalidType,
+            diag.nativeFieldInvalidType,
             arguments: [ffiSignature],
           );
         }
@@ -535,7 +535,7 @@
           // Function annotated with something that isn't a function type.
           _diagnosticReporter.atToken(
             errorNode,
-            FfiCode.mustBeANativeFunctionType,
+            diag.mustBeANativeFunctionType,
             arguments: ['T', 'Native'],
           );
         } else {
@@ -564,7 +564,7 @@
 
     if (declarationElement is InternalFieldElement) {
       if (!declarationElement.isStatic) {
-        _diagnosticReporter.atToken(errorToken, FfiCode.nativeFieldNotStatic);
+        _diagnosticReporter.atToken(errorToken, diag.nativeFieldNotStatic);
       }
       type = declarationElement.type;
     } else if (declarationElement is TopLevelVariableElementImpl) {
@@ -572,7 +572,7 @@
     } else if (declarationElement is InternalPropertyAccessorElement) {
       type = declarationElement.variable.type;
     } else {
-      _diagnosticReporter.atToken(errorToken, FfiCode.nativeFieldNotStatic);
+      _diagnosticReporter.atToken(errorToken, diag.nativeFieldNotStatic);
       return;
     }
 
@@ -581,7 +581,7 @@
       var canonical = _canonicalFfiTypeForDartType(type);
 
       if (canonical == null) {
-        _diagnosticReporter.atToken(errorToken, FfiCode.nativeFieldMissingType);
+        _diagnosticReporter.atToken(errorToken, diag.nativeFieldMissingType);
         return;
       } else {
         ffiSignature = canonical;
@@ -599,7 +599,7 @@
     )) {
       _diagnosticReporter.atToken(
         errorToken,
-        FfiCode.mustBeASubtype,
+        diag.mustBeASubtype,
         arguments: [type, ffiSignature, 'Native'],
       );
     } else if (ffiSignature.isArray) {
@@ -613,7 +613,7 @@
     } else if (ffiSignature.isHandle || ffiSignature.isNativeFunction) {
       _diagnosticReporter.atToken(
         errorToken,
-        FfiCode.nativeFieldInvalidType,
+        diag.nativeFieldInvalidType,
         arguments: [ffiSignature],
       );
     }
@@ -644,7 +644,7 @@
       if (formalParameters.length + 1 != ffiParameterTypes.length) {
         _diagnosticReporter.atToken(
           errorToken,
-          FfiCode.ffiNativeUnexpectedNumberOfParametersWithReceiver,
+          diag.ffiNativeUnexpectedNumberOfParametersWithReceiver,
           arguments: [formalParameters.length + 1, ffiParameterTypes.length],
         );
         return;
@@ -657,8 +657,7 @@
         if (!_extendsNativeFieldWrapperClass1(cls.thisType)) {
           _diagnosticReporter.atToken(
             errorToken,
-            FfiCode
-                .ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer,
+            diag.ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer,
           );
         }
       }
@@ -671,7 +670,7 @@
       if (formalParameters.length != ffiParameterTypes.length) {
         _diagnosticReporter.atToken(
           errorToken,
-          FfiCode.ffiNativeUnexpectedNumberOfParameters,
+          diag.ffiNativeUnexpectedNumberOfParameters,
           arguments: [ffiParameterTypes.length, formalParameters.length],
         );
         return;
@@ -689,8 +688,7 @@
                 !type.isTypedData)) {
           _diagnosticReporter.atToken(
             errorToken,
-            FfiCode
-                .ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer,
+            diag.ffiNativeOnlyClassesExtendingNativefieldwrapperclass1CanBePointer,
           );
         }
       }
@@ -708,14 +706,11 @@
           (annotationValue.type! as InterfaceType).typeArguments[0]
               is DynamicType;
       if (nativeTypeIsOmitted) {
-        _diagnosticReporter.atToken(
-          errorToken,
-          FfiCode.nativeFunctionMissingType,
-        );
+        _diagnosticReporter.atToken(errorToken, diag.nativeFunctionMissingType);
       } else {
         _diagnosticReporter.atToken(
           errorToken,
-          FfiCode.mustBeANativeFunctionType,
+          diag.mustBeANativeFunctionType,
           arguments: [nativeType, 'Native'],
         );
       }
@@ -729,7 +724,7 @@
     )) {
       _diagnosticReporter.atToken(
         errorToken,
-        FfiCode.mustBeASubtype,
+        diag.mustBeASubtype,
         arguments: [nativeType, dartType, 'Native'],
       );
       return;
@@ -975,12 +970,16 @@
     return _PrimitiveDartType.none;
   }
 
-  void _validateAbiSpecificIntegerAnnotation(ClassDeclaration node) {
-    if ((node.typeParameters?.length ?? 0) != 0 ||
-        node.members.length != 1 ||
-        node.members.single is! ConstructorDeclaration ||
-        (node.members.single as ConstructorDeclaration).constKeyword == null) {
-      _diagnosticReporter.atToken(node.name, FfiCode.abiSpecificIntegerInvalid);
+  void _validateAbiSpecificIntegerAnnotation(ClassDeclarationImpl node) {
+    if ((node.namePart.typeParameters?.length ?? 0) != 0 ||
+        node.body.members.length != 1 ||
+        node.body.members.single is! ConstructorDeclaration ||
+        (node.body.members.single as ConstructorDeclaration).constKeyword ==
+            null) {
+      _diagnosticReporter.atToken(
+        node.namePart.typeName,
+        diag.abiSpecificIntegerInvalid,
+      );
     }
   }
 
@@ -996,7 +995,7 @@
     if (ffiPackedAnnotations.isEmpty) {
       _diagnosticReporter.atToken(
         errorToken,
-        FfiCode.abiSpecificIntegerMappingMissing,
+        diag.abiSpecificIntegerMappingMissing,
       );
       return;
     }
@@ -1006,7 +1005,7 @@
       for (var annotation in extraAnnotations) {
         _diagnosticReporter.atNode(
           annotation.name,
-          FfiCode.abiSpecificIntegerMappingExtra,
+          diag.abiSpecificIntegerMappingExtra,
         );
       }
     }
@@ -1028,7 +1027,7 @@
               if (!_primitiveIntegerNativeTypesFixedSize.contains(name)) {
                 _diagnosticReporter.atNode(
                   element.value,
-                  FfiCode.abiSpecificIntegerMappingUnsupported,
+                  diag.abiSpecificIntegerMappingUnsupported,
                   arguments: [name],
                 );
               }
@@ -1051,7 +1050,7 @@
         if (!_primitiveIntegerNativeTypesFixedSize.contains(nativeTypeName)) {
           _diagnosticReporter.atNode(
             arguments.first,
-            FfiCode.abiSpecificIntegerMappingUnsupported,
+            diag.abiSpecificIntegerMappingUnsupported,
             arguments: [nativeTypeName],
           );
         }
@@ -1076,7 +1075,7 @@
     if (parent is! ArgumentList ||
         grandParent is! MethodInvocation ||
         !grandParent.isNativeLeafInvocation) {
-      _diagnosticReporter.atNode(errorNode, FfiCode.addressPosition);
+      _diagnosticReporter.atNode(errorNode, diag.addressPosition);
     }
   }
 
@@ -1136,7 +1135,7 @@
         }
       default:
     }
-    _diagnosticReporter.atNode(errorNode, FfiCode.addressReceiver);
+    _diagnosticReporter.atNode(errorNode, diag.addressReceiver);
   }
 
   void _validateAllocate(FunctionExpressionInvocationImpl node) {
@@ -1153,7 +1152,7 @@
       AstNode errorNode = node;
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['$_allocatorExtensionName.$_allocateExtensionMethodName'],
       );
     }
@@ -1190,19 +1189,19 @@
         Annotation invalidAnnotation = extraAnnotations.removeAt(0);
         _diagnosticReporter.atNode(
           invalidAnnotation,
-          FfiCode.mismatchedAnnotationOnStructField,
+          diag.mismatchedAnnotationOnStructField,
         );
       }
       for (Annotation extraAnnotation in extraAnnotations) {
         _diagnosticReporter.atNode(
           extraAnnotation,
-          FfiCode.extraAnnotationOnStructField,
+          diag.extraAnnotationOnStructField,
         );
       }
     } else if (!requiredFound) {
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.missingAnnotationOnStructField,
+        diag.missingAnnotationOnStructField,
         arguments: [
           errorNode.type!,
           compound!.extendsClause!.superclass.name.lexeme,
@@ -1235,7 +1234,7 @@
       if (pointerTypeArg is TypeParameterType) {
         _diagnosticReporter.atNode(
           target,
-          FfiCode.nonConstantTypeArgument,
+          diag.nonConstantTypeArgument,
           arguments: ['asFunction'],
         );
         return;
@@ -1243,7 +1242,7 @@
       if (!_isValidFfiNativeFunctionType(pointerTypeArg)) {
         _diagnosticReporter.atNode(
           errorNode,
-          FfiCode.nonNativeFunctionTypeArgumentToPointer,
+          diag.nonNativeFunctionTypeArgumentToPointer,
           arguments: [T],
         );
         return;
@@ -1259,7 +1258,7 @@
       )) {
         _diagnosticReporter.atNode(
           node,
-          FfiCode.mustBeASubtype,
+          diag.mustBeASubtype,
           arguments: [TPrime, F, 'asFunction'],
         );
       }
@@ -1405,7 +1404,7 @@
       AstNode errorNode = node;
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['$errorClass.create'],
       );
     }
@@ -1420,7 +1419,7 @@
         AstNode errorNode = node;
         _diagnosticReporter.atNode(
           errorNode,
-          FfiCode.nonConstantTypeArgument,
+          diag.nonConstantTypeArgument,
           arguments: ['elementAt'],
         );
       }
@@ -1436,14 +1435,14 @@
           _PrimitiveDartType.handle) {
         _diagnosticReporter.atEntity(
           errorEntity,
-          FfiCode.leafCallMustNotReturnHandle,
+          diag.leafCallMustNotReturnHandle,
         );
       }
       for (var param in nativeType.normalParameterTypes) {
         if (_primitiveNativeType(param) == _PrimitiveDartType.handle) {
           _diagnosticReporter.atEntity(
             errorEntity,
-            FfiCode.leafCallMustNotTakeHandle,
+            diag.leafCallMustNotTakeHandle,
           );
         }
       }
@@ -1463,7 +1462,7 @@
     if (node.externalKeyword == null) {
       _diagnosticReporter.atToken(
         fields.variables[0].name,
-        FfiCode.fieldMustBeExternalInStruct,
+        diag.fieldMustBeExternalInStruct,
       );
     }
 
@@ -1471,14 +1470,14 @@
     if (fieldType == null) {
       _diagnosticReporter.atToken(
         fields.variables[0].name,
-        FfiCode.missingFieldTypeInStruct,
+        diag.missingFieldTypeInStruct,
       );
     } else {
       DartType declaredType = fieldType.typeOrThrow;
       if (declaredType.nullabilitySuffix == NullabilitySuffix.question) {
         _diagnosticReporter.atNode(
           fieldType,
-          FfiCode.invalidFieldTypeInStruct,
+          diag.invalidFieldTypeInStruct,
           arguments: [fieldType.toSource()],
         );
       } else if (declaredType.isDartCoreInt) {
@@ -1501,7 +1500,7 @@
           }
           _diagnosticReporter.atNode(
             errorNode,
-            FfiCode.nonSizedTypeArgument,
+            diag.nonSizedTypeArgument,
             arguments: [_arrayClassName, typeArg],
           );
         }
@@ -1534,14 +1533,14 @@
         if (clazz.isEmptyStruct) {
           _diagnosticReporter.atNode(
             node,
-            FfiCode.emptyStruct,
+            diag.emptyStruct,
             arguments: [clazz.name!, clazz.supertype!.getDisplayString()],
           );
         }
       } else {
         _diagnosticReporter.atNode(
           fieldType,
-          FfiCode.invalidFieldTypeInStruct,
+          diag.invalidFieldTypeInStruct,
           arguments: [fieldType.toSource()],
         );
       }
@@ -1567,7 +1566,7 @@
       }
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.mustBeANativeFunctionType,
+        diag.mustBeANativeFunctionType,
         arguments: [T, 'fromFunction'],
       );
       return;
@@ -1582,7 +1581,7 @@
     )) {
       _diagnosticReporter.atNode(
         f,
-        FfiCode.mustBeASubtype,
+        diag.mustBeASubtype,
         arguments: [FT, T, 'fromFunction'],
       );
       return;
@@ -1597,14 +1596,14 @@
       if (argCount != 1) {
         _diagnosticReporter.atNode(
           node.argumentList.arguments[1],
-          FfiCode.invalidExceptionValue,
+          diag.invalidExceptionValue,
           arguments: ['fromFunction'],
         );
       }
     } else if (argCount != 2) {
       _diagnosticReporter.atNode(
         node.methodName,
-        FfiCode.missingExceptionValue,
+        diag.missingExceptionValue,
         arguments: ['fromFunction'],
       );
     } else {
@@ -1617,14 +1616,14 @@
       )) {
         _diagnosticReporter.atNode(
           e,
-          FfiCode.mustBeASubtype,
+          diag.mustBeASubtype,
           arguments: [eType, R, 'fromFunction'],
         );
       }
       if (!_isConst(e)) {
         _diagnosticReporter.atNode(
           e,
-          FfiCode.argumentMustBeAConstant,
+          diag.argumentMustBeAConstant,
           arguments: ['exceptionalReturn'],
         );
       }
@@ -1642,7 +1641,7 @@
             if (!_isConst(arg.expression)) {
               _diagnosticReporter.atNode(
                 arg.expression,
-                FfiCode.argumentMustBeAConstant,
+                diag.argumentMustBeAConstant,
                 arguments: [_isLeafParamName],
               );
             }
@@ -1669,7 +1668,7 @@
       AstNode errorNode = typeArguments[0];
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.mustBeANativeFunctionType,
+        diag.mustBeANativeFunctionType,
         arguments: [S, 'lookupFunction'],
       );
       return;
@@ -1683,7 +1682,7 @@
       AstNode errorNode = typeArguments[1];
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.mustBeASubtype,
+        diag.mustBeASubtype,
         arguments: [S, F, 'lookupFunction'],
       );
     }
@@ -1732,14 +1731,14 @@
               if (!typeSystem.isEqualTo(nativeType, targetFunctionType)) {
                 _diagnosticReporter.atNode(
                   node,
-                  FfiCode.mustBeASubtype,
+                  diag.mustBeASubtype,
                   arguments: [nativeType, targetFunctionType, _nativeAddressOf],
                 );
               }
             } else {
               _diagnosticReporter.atNode(
                 node,
-                FfiCode.mustBeANativeFunctionType,
+                diag.mustBeANativeFunctionType,
                 arguments: [targetType, _nativeAddressOf],
               );
             }
@@ -1767,7 +1766,7 @@
                   if (!typeSystem.isEqualTo(staticType, targetFunctionType)) {
                     _diagnosticReporter.atNode(
                       node,
-                      FfiCode.mustBeASubtype,
+                      diag.mustBeASubtype,
                       arguments: [
                         staticType,
                         targetFunctionType,
@@ -1778,7 +1777,7 @@
                 } else {
                   _diagnosticReporter.atNode(
                     node,
-                    FfiCode.mustBeANativeFunctionType,
+                    diag.mustBeANativeFunctionType,
                     arguments: [targetType, _nativeAddressOf],
                   );
                 }
@@ -1786,7 +1785,7 @@
                 if (!typeSystem.isEqualTo(staticType, targetType)) {
                   _diagnosticReporter.atNode(
                     node,
-                    FfiCode.mustBeASubtype,
+                    diag.mustBeASubtype,
                     arguments: [staticType, targetType, _nativeAddressOf],
                   );
                 }
@@ -1801,7 +1800,7 @@
     }
 
     if (!validTarget) {
-      _diagnosticReporter.atNode(argument, FfiCode.argumentMustBeNative);
+      _diagnosticReporter.atNode(argument, diag.argumentMustBeNative);
     }
   }
 
@@ -1828,7 +1827,7 @@
     if (!_isValidFfiNativeFunctionType(typeArg)) {
       _diagnosticReporter.atNode(
         node.constructorName,
-        FfiCode.mustBeANativeFunctionType,
+        diag.mustBeANativeFunctionType,
         arguments: [typeArg, _nativeCallable],
       );
       return;
@@ -1843,7 +1842,7 @@
     )) {
       _diagnosticReporter.atNode(
         f,
-        FfiCode.mustBeASubtype,
+        diag.mustBeASubtype,
         arguments: [funcType, typeArg, _nativeCallable],
       );
       return;
@@ -1858,14 +1857,14 @@
         if (argCount != 1) {
           _diagnosticReporter.atNode(
             node.argumentList.arguments[1],
-            FfiCode.invalidExceptionValue,
+            diag.invalidExceptionValue,
             arguments: [name],
           );
         }
       } else if (argCount != 2) {
         _diagnosticReporter.atNode(
           node,
-          FfiCode.missingExceptionValue,
+          diag.missingExceptionValue,
           arguments: [name],
         );
       } else {
@@ -1878,14 +1877,14 @@
         )) {
           _diagnosticReporter.atNode(
             e,
-            FfiCode.mustBeASubtype,
+            diag.mustBeASubtype,
             arguments: [eType, natRetType, name],
           );
         }
         if (!_isConst(e)) {
           _diagnosticReporter.atNode(
             e,
-            FfiCode.argumentMustBeAConstant,
+            diag.argumentMustBeAConstant,
             arguments: ['exceptionalReturn'],
           );
         }
@@ -1894,7 +1893,7 @@
       if (_primitiveNativeType(natRetType) != _PrimitiveDartType.void_) {
         _diagnosticReporter.atNode(
           f,
-          FfiCode.mustReturnVoid,
+          diag.mustReturnVoid,
           arguments: [natRetType],
         );
       }
@@ -1905,10 +1904,7 @@
   void _validateNoAnnotations(NodeList<Annotation> annotations) {
     for (Annotation annotation in annotations) {
       if (annotation.element.ffiClass != null) {
-        _diagnosticReporter.atNode(
-          annotation,
-          FfiCode.annotationOnPointerField,
-        );
+        _diagnosticReporter.atNode(annotation, diag.annotationOnPointerField);
       }
     }
   }
@@ -1926,7 +1922,7 @@
     if (ffiPackedAnnotations.length > 1) {
       var extraAnnotations = ffiPackedAnnotations.skip(1);
       for (var annotation in extraAnnotations) {
-        _diagnosticReporter.atNode(annotation, FfiCode.packedAnnotation);
+        _diagnosticReporter.atNode(annotation, diag.packedAnnotation);
       }
     }
 
@@ -1939,7 +1935,7 @@
       if (arguments != null && arguments.isNotEmpty) {
         errorNode = arguments[0];
       }
-      _diagnosticReporter.atNode(errorNode, FfiCode.packedAnnotationAlignment);
+      _diagnosticReporter.atNode(errorNode, diag.packedAnnotationAlignment);
     }
   }
 
@@ -1953,7 +1949,7 @@
       AstNode errorNode = node;
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['[]'],
       );
     }
@@ -1967,7 +1963,7 @@
       AstNode errorNode = node;
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['ref'],
       );
     }
@@ -1979,7 +1975,7 @@
       AstNode errorNode = node;
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['ref'],
       );
     }
@@ -1993,7 +1989,7 @@
     if (!_isValidFfiNativeType(targetType, allowEmptyStruct: true)) {
       _diagnosticReporter.atNode(
         node,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['refWithFinalizer'],
       );
     }
@@ -2009,7 +2005,7 @@
       AstNode errorNode = node;
       _diagnosticReporter.atNode(
         errorNode,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: ['sizeOf'],
       );
     }
@@ -2031,7 +2027,7 @@
     if (ffiSizeAnnotations.isEmpty) {
       _diagnosticReporter.atEntity(
         errorEntity,
-        FfiCode.missingSizeAnnotationCarray,
+        diag.missingSizeAnnotationCarray,
       );
       return;
     }
@@ -2039,10 +2035,7 @@
     if (ffiSizeAnnotations.length > 1) {
       var extraAnnotations = ffiSizeAnnotations.skip(1);
       for (var annotation in extraAnnotations) {
-        _diagnosticReporter.atNode(
-          annotation,
-          FfiCode.extraSizeAnnotationCarray,
-        );
+        _diagnosticReporter.atNode(annotation, diag.extraSizeAnnotationCarray);
       }
     }
 
@@ -2052,15 +2045,12 @@
         annotation.elementAnnotation?.arraySizeDimensions ?? (<int>[], false);
     var annotationDimensions = dimensions.length;
     if (annotationDimensions != arrayDimensions) {
-      _diagnosticReporter.atNode(annotation, FfiCode.sizeAnnotationDimensions);
+      _diagnosticReporter.atNode(annotation, diag.sizeAnnotationDimensions);
     }
 
     if (variableLength) {
       if (!allowVariableLength) {
-        _diagnosticReporter.atNode(
-          annotation,
-          FfiCode.variableLengthArrayNotLast,
-        );
+        _diagnosticReporter.atNode(annotation, diag.variableLengthArrayNotLast);
       }
     }
 
@@ -2106,19 +2096,13 @@
       if (i == 0 && variableLength) {
         // Variable dimension can't be negative.
         if (dimensions[0] < 0) {
-          _diagnosticReporter.atNode(
-            errorNode,
-            FfiCode.negativeVariableDimension,
-          );
+          _diagnosticReporter.atNode(errorNode, diag.negativeVariableDimension);
         }
         continue;
       }
 
       if (dimensions[i] <= 0) {
-        _diagnosticReporter.atNode(
-          errorNode,
-          FfiCode.nonPositiveArrayDimension,
-        );
+        _diagnosticReporter.atNode(errorNode, diag.nonPositiveArrayDimension);
       }
     }
   }
@@ -2129,7 +2113,7 @@
     if (typeArgument.type is TypeParameterType) {
       _diagnosticReporter.atNode(
         typeArgument,
-        FfiCode.nonConstantTypeArgument,
+        diag.nonConstantTypeArgument,
         arguments: [functionName],
       );
       return true;
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 55a3819..729e08f 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -17,8 +17,6 @@
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/fasta/ast_builder.dart';
 
-export 'package:analyzer/src/dart/error/syntactic_errors.dart';
-
 /// A parser used to parse tokens into an AST structure.
 class Parser {
   late Token currentToken;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 2c5035a..21d14cc 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -70,10 +70,10 @@
 import 'package:analyzer/src/dart/resolver/typed_literal_resolver.dart';
 import 'package:analyzer/src/dart/resolver/variable_declaration_resolver.dart';
 import 'package:analyzer/src/dart/resolver/yield_statement_resolver.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart';
 import 'package:analyzer/src/error/base_or_final_type_verifier.dart';
 import 'package:analyzer/src/error/bool_expression_verifier.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/dead_code_verifier.dart';
 import 'package:analyzer/src/error/inference_error.dart';
 import 'package:analyzer/src/error/nullable_dereference_verifier.dart';
@@ -487,17 +487,11 @@
             variablePattern.fieldNameWithImplicitName = fieldName;
             nameToken = variablePattern.name;
           } else {
-            diagnosticReporter.atNode(
-              field,
-              CompileTimeErrorCode.missingNamedPatternFieldName,
-            );
+            diagnosticReporter.atNode(field, diag.missingNamedPatternFieldName);
           }
         }
       } else if (mustBeNamed) {
-        diagnosticReporter.atNode(
-          field,
-          CompileTimeErrorCode.positionalFieldInObjectPattern,
-        );
+        diagnosticReporter.atNode(field, diag.positionalFieldInObjectPattern);
       }
       return shared.RecordPatternField(
         node: field,
@@ -510,7 +504,7 @@
   /// Verify that the arguments in the given [argumentList] can be assigned to
   /// their corresponding parameters.
   ///
-  /// See [CompileTimeErrorCode.argumentTypeNotAssignable].
+  /// See [diag.argumentTypeNotAssignable].
   void checkForArgumentTypesNotAssignableInList(
     ArgumentListImpl argumentList,
     List<WhyNotPromotedGetter> whyNotPromotedArguments,
@@ -576,7 +570,7 @@
 
       DiagnosticCode diagnosticCode;
       if (typeSystem.isPotentiallyNonNullable(returnType)) {
-        diagnosticCode = CompileTimeErrorCode.bodyMightCompleteNormally;
+        diagnosticCode = diag.bodyMightCompleteNormally;
       } else {
         var returnTypeBase = typeSystem.futureOrBase(returnType);
         if (returnTypeBase is DynamicType ||
@@ -586,7 +580,7 @@
             returnTypeBase.isDartCoreNull) {
           return;
         } else {
-          diagnosticCode = WarningCode.bodyMightCompleteNormallyNullable;
+          diagnosticCode = diag.bodyMightCompleteNormallyNullable;
         }
       }
       if (errorNode is ConstructorDeclaration) {
@@ -642,7 +636,7 @@
         errorNode ??= pattern;
         diagnosticReporter.atNode(
           errorNode,
-          WarningCode.patternNeverMatchesValueType,
+          diag.patternNeverMatchesValueType,
           arguments: [matchedValueType, requiredType],
         );
       }
@@ -669,7 +663,7 @@
         if (unassigned) {
           diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
+            diag.definitelyUnassignedLateLocalVariable,
             arguments: [node.name],
           );
         }
@@ -680,7 +674,7 @@
         if (element.isFinal) {
           diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.readPotentiallyUnassignedFinal,
+            diag.readPotentiallyUnassignedFinal,
             arguments: [node.name],
           );
           return;
@@ -689,7 +683,7 @@
         if (typeSystem.isPotentiallyNonNullable(element.type)) {
           diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
+            diag.notAssignedPotentiallyNonNullableLocalVariable,
             arguments: [node.name],
           );
           return;
@@ -912,22 +906,21 @@
             shared.JoinedPatternVariableInconsistency.sharedCaseAbsent) {
           diagnosticReporter.atNode(
             reference,
-            CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
+            diag.patternVariableSharedCaseScopeNotAllCases,
             arguments: [variable.name!],
           );
         } else if (variable.inconsistency ==
             shared.JoinedPatternVariableInconsistency.sharedCaseHasLabel) {
           diagnosticReporter.atNode(
             reference,
-            CompileTimeErrorCode.patternVariableSharedCaseScopeHasLabel,
+            diag.patternVariableSharedCaseScopeHasLabel,
             arguments: [variable.name!],
           );
         } else if (variable.inconsistency ==
             shared.JoinedPatternVariableInconsistency.differentFinalityOrType) {
           diagnosticReporter.atNode(
             reference,
-            CompileTimeErrorCode
-                .patternVariableSharedCaseScopeDifferentFinalityOrType,
+            diag.patternVariableSharedCaseScopeDifferentFinalityOrType,
             arguments: [variable.name!],
           );
         }
@@ -1314,6 +1307,10 @@
           node is TopLevelVariableDeclaration;
     }
 
+    if (parent is ClassBody) {
+      parent = parent.parent;
+    }
+
     if (parent is ClassDeclarationImpl) {
       enclosingClass = parent.declaredFragment!.element;
       return true;
@@ -1387,14 +1384,14 @@
         if (flow.isAssigned(element)) {
           diagnosticReporter.atToken(
             node.name,
-            CompileTimeErrorCode.lateFinalLocalAlreadyAssigned,
+            diag.lateFinalLocalAlreadyAssigned,
           );
         }
       } else {
         if (!flow.isUnassigned(element)) {
           diagnosticReporter.atToken(
             node.name,
-            CompileTimeErrorCode.assignmentToFinalLocal,
+            diag.assignmentToFinalLocal,
             arguments: [node.name.lexeme],
           );
         }
@@ -1525,7 +1522,7 @@
       if (hasRead && result.readElementRequested2 == null) {
         diagnosticReporter.atNode(
           node,
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           arguments: [node.name],
         );
       }
@@ -1562,7 +1559,7 @@
       } else {
         diagnosticReporter.atNode(
           typeArgumentsList,
-          CompileTimeErrorCode.expectedTwoMapPatternTypeArguments,
+          diag.expectedTwoMapPatternTypeArguments,
           arguments: [length],
         );
       }
@@ -1613,7 +1610,7 @@
     if (result.needsGetterError) {
       diagnosticReporter.atToken(
         nameToken,
-        CompileTimeErrorCode.undefinedGetter,
+        diag.undefinedGetter,
         arguments: [nameToken.lexeme, receiverType],
       );
     }
@@ -1669,7 +1666,7 @@
     if (result.needsGetterError) {
       diagnosticReporter.atToken(
         node.operator,
-        CompileTimeErrorCode.undefinedOperator,
+        diag.undefinedOperator,
         arguments: [methodName, matchedType],
       );
     }
@@ -1886,7 +1883,7 @@
           flowAnalysis.isDefinitelyUnassigned(simpleIdentifier, element)) {
         diagnosticReporter.atNode(
           simpleIdentifier,
-          WarningCode.castFromNullableAlwaysFails,
+          diag.castFromNullableAlwaysFails,
           arguments: [simpleIdentifier.name],
         );
       }
@@ -1904,7 +1901,7 @@
     popRewrite();
     boolExpressionVerifier.checkForNonBoolExpression(
       node.condition,
-      diagnosticCode: CompileTimeErrorCode.nonBoolExpression,
+      diagnosticCode: diag.nonBoolExpression,
       whyNotPromoted: flowAnalysis.flow?.whyNotPromoted(node.condition),
     );
     flowAnalysis.flow?.assert_afterCondition(node.condition);
@@ -1927,7 +1924,7 @@
     popRewrite();
     boolExpressionVerifier.checkForNonBoolExpression(
       node.condition,
-      diagnosticCode: CompileTimeErrorCode.nonBoolExpression,
+      diagnosticCode: diag.nonBoolExpression,
       whyNotPromoted: flowAnalysis.flow?.whyNotPromoted(node.condition),
     );
     flowAnalysis.flow?.assert_afterCondition(node.condition);
@@ -2004,6 +2001,11 @@
   }
 
   @override
+  void visitBlockClassBody(BlockClassBody node) {
+    node.visitChildren(this);
+  }
+
+  @override
   TypeImpl visitBlockFunctionBody(
     covariant BlockFunctionBodyImpl node, {
     TypeImpl? imposedType,
@@ -2248,7 +2250,7 @@
       checkUnreachableNode(node);
       node.documentationComment?.accept(this);
       node.metadata.accept(this);
-      node.returnType.accept(this);
+      node.typeName?.accept(this);
       node.parameters.accept(this);
 
       flowAnalysis.bodyOrInitializer_enter(node, node.parameters);
@@ -2512,6 +2514,9 @@
   }
 
   @override
+  void visitEmptyClassBody(EmptyClassBody node) {}
+
+  @override
   TypeImpl visitEmptyFunctionBody(
     EmptyFunctionBody node, {
     TypeImpl? imposedType,
@@ -2528,6 +2533,11 @@
   }
 
   @override
+  void visitEnumBody(EnumBody node) {
+    node.visitChildren(this);
+  }
+
+  @override
   void visitEnumConstantArguments(EnumConstantArguments node) {
     checkUnreachableNode(node);
     node.visitChildren(this);
@@ -2553,7 +2563,7 @@
           var errorTarget = constructorName ?? node.name;
           diagnosticReporter.atEntity(
             errorTarget,
-            CompileTimeErrorCode.enumConstantInvokesFactoryConstructor,
+            diag.enumConstantInvokesFactoryConstructor,
           );
         }
       } else {
@@ -2562,13 +2572,13 @@
           if (nameNode != null) {
             diagnosticReporter.atNode(
               nameNode,
-              CompileTimeErrorCode.undefinedEnumConstructorNamed,
+              diag.undefinedEnumConstructorNamed,
               arguments: [nameNode.name],
             );
           } else {
             diagnosticReporter.atToken(
               node.name,
-              CompileTimeErrorCode.undefinedEnumConstructorUnnamed,
+              diag.undefinedEnumConstructorUnnamed,
             );
           }
         }
@@ -3465,6 +3475,11 @@
   }
 
   @override
+  void visitNameWithTypeParameters(NameWithTypeParameters node) {
+    node.visitChildren(this);
+  }
+
+  @override
   void visitNativeClause(NativeClause node) {
     checkUnreachableNode(node);
     node.visitChildren(this);
@@ -3671,6 +3686,16 @@
   }
 
   @override
+  void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitPrimaryConstructorName(PrimaryConstructorName node) {
+    node.visitChildren(this);
+  }
+
+  @override
   void visitPropertyAccess(
     covariant PropertyAccessImpl node, {
     TypeImpl contextType = UnknownInferredType.instance,
@@ -3775,16 +3800,6 @@
   }
 
   @override
-  void visitRepresentationConstructorName(RepresentationConstructorName node) {}
-
-  @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    checkUnreachableNode(node);
-    node.visitChildren(this);
-    elementResolver.visitRepresentationDeclaration(node);
-  }
-
-  @override
   void visitRethrowExpression(
     RethrowExpression node, {
     TypeImpl contextType = UnknownInferredType.instance,
@@ -3887,7 +3902,7 @@
 
     if (!node.isNullAware) {
       nullableDereferenceVerifier.expression(
-        CompileTimeErrorCode.uncheckedUseOfNullableValueInSpread,
+        diag.uncheckedUseOfNullableValueInSpread,
         node.expression,
       );
     }
@@ -4234,7 +4249,7 @@
 
         diagnosticReporter.atToken(
           errorNode.block.leftBracket,
-          WarningCode.bodyMightCompleteNormallyCatchError,
+          diag.bodyMightCompleteNormallyCatchError,
           arguments: [returnTypeBase],
         );
       }
@@ -4251,7 +4266,7 @@
     if (fragment.isConst) {
       return;
     }
-    var error = fragment.typeInferenceError;
+    var error = fragment.element.typeInferenceError;
     if (error == null) {
       return;
     }
@@ -4259,7 +4274,7 @@
       var argumentsText = error.arguments.join(', ');
       diagnosticReporter.atToken(
         node.name,
-        CompileTimeErrorCode.topLevelCycle,
+        diag.topLevelCycle,
         arguments: [node.name.lexeme, argumentsText],
       );
     }
@@ -4629,7 +4644,7 @@
         if (element == null) {
           diagnosticReporter?.atNode(
             nameNode,
-            CompileTimeErrorCode.undefinedNamedParameter,
+            diag.undefinedNamedParameter,
             arguments: [name],
           );
         } else {
@@ -4640,7 +4655,7 @@
         if (!usedNames.add(name)) {
           diagnosticReporter?.atNode(
             nameNode,
-            CompileTimeErrorCode.duplicateNamedArgument,
+            diag.duplicateNamedArgument,
             arguments: [name],
           );
         }
@@ -4668,10 +4683,9 @@
       int namedParameterCount = namedParameters?.length ?? 0;
       int namedArgumentCount = usedNames?.length ?? 0;
       if (namedParameterCount > namedArgumentCount) {
-        diagnosticCode =
-            CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed;
+        diagnosticCode = diag.extraPositionalArgumentsCouldBeNamed;
       } else {
-        diagnosticCode = CompileTimeErrorCode.extraPositionalArguments;
+        diagnosticCode = diag.extraPositionalArguments;
       }
       if (firstUnresolvedArgument != null) {
         diagnosticReporter?.atNode(
@@ -4698,8 +4712,8 @@
     return true;
   }
 
-  /// Reports [CompileTimeErrorCode.notEnoughPositionalArgumentsSingular] or
-  /// [CompileTimeErrorCode.notEnoughPositionalArgumentsPlural] at the
+  /// Reports [diag.notEnoughPositionalArgumentsSingular] or
+  /// [diag.notEnoughPositionalArgumentsPlural] at the
   /// specified [token], considering the name of the [nameNode].
   static void _reportNotEnoughPositionalArguments({
     required Token token,
@@ -4768,12 +4782,12 @@
     DiagnosticCode diagnosticCode;
     if (name == null) {
       diagnosticCode = isPlural
-          ? CompileTimeErrorCode.notEnoughPositionalArgumentsPlural
-          : CompileTimeErrorCode.notEnoughPositionalArgumentsSingular;
+          ? diag.notEnoughPositionalArgumentsPlural
+          : diag.notEnoughPositionalArgumentsSingular;
     } else {
       diagnosticCode = isPlural
-          ? CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural
-          : CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular;
+          ? diag.notEnoughPositionalArgumentsNamePlural
+          : diag.notEnoughPositionalArgumentsNameSingular;
       arguments.add(name);
     }
     diagnosticReporter.atToken(token, diagnosticCode, arguments: arguments);
@@ -4891,7 +4905,7 @@
 
       nameScope = TypeParameterScope(nameScope, element.typeParameters);
       node.nameScope = nameScope;
-      node.typeParameters?.accept(this);
+      node.namePart.accept(this);
       node.extendsClause?.accept(this);
       node.withClause?.accept(this);
       node.implementsClause?.accept(this);
@@ -4899,7 +4913,7 @@
 
       nameScope = InstanceScope(nameScope, element);
       _visitDocumentationComment(node.documentationComment);
-      node.members.accept(this);
+      node.body.accept(this);
     } finally {
       nameScope = outerScope;
     }
@@ -4939,7 +4953,7 @@
       var element = node.declaredFragment!.element;
 
       node.metadata.accept(this);
-      node.returnType.accept(this);
+      node.typeName?.accept(this);
       node.parameters.accept(this);
 
       try {
@@ -5000,14 +5014,13 @@
 
       nameScope = TypeParameterScope(nameScope, element.typeParameters);
       node.nameScope = nameScope;
-      node.typeParameters?.accept(this);
+      node.namePart.accept(this);
       node.withClause?.accept(this);
       node.implementsClause?.accept(this);
 
       nameScope = InstanceScope(nameScope, element);
       _visitDocumentationComment(node.documentationComment);
-      node.constants.accept(this);
-      node.members.accept(this);
+      node.body.accept(this);
     } finally {
       nameScope = outerScope;
     }
@@ -5033,7 +5046,7 @@
 
       nameScope = ExtensionScope(nameScope, element);
       _visitDocumentationComment(node.documentationComment);
-      node.members.accept(this);
+      node.body.accept(this);
     } finally {
       nameScope = outerScope;
     }
@@ -5050,13 +5063,12 @@
 
       nameScope = TypeParameterScope(nameScope, element.typeParameters);
       node.nameScope = nameScope;
-      node.typeParameters?.accept(this);
-      node.representation.accept(this);
+      node.primaryConstructor.accept(this);
       node.implementsClause?.accept(this);
 
       nameScope = InstanceScope(nameScope, element);
       _visitDocumentationComment(node.documentationComment);
-      node.members.accept(this);
+      node.body.accept(this);
     } finally {
       nameScope = outerScope;
     }
@@ -5386,7 +5398,7 @@
 
       nameScope = InstanceScope(nameScope, element);
       _visitDocumentationComment(node.documentationComment);
-      node.members.accept(this);
+      node.body.accept(this);
     } finally {
       nameScope = outerScope;
     }
@@ -5455,7 +5467,7 @@
     // Ignore if it cannot be a reference to a local variable.
     if (parent is FieldFormalParameter) {
       return;
-    } else if (parent is ConstructorDeclaration && parent.returnType == node) {
+    } else if (parent is ConstructorDeclaration && parent.typeName == node) {
       return;
     } else if (parent is ConstructorFieldInitializer &&
         parent.fieldName == node) {
@@ -5478,7 +5490,7 @@
             element.isVisitingWhenClause) {
           diagnosticReporter.atNode(
             node,
-            CompileTimeErrorCode.patternVariableAssignmentInsideGuard,
+            diag.patternVariableAssignmentInsideGuard,
           );
         }
         _localVariableInfo.potentiallyMutatedInScope.add(element);
@@ -5619,7 +5631,7 @@
         // undefined.
         diagnosticReporter.atNode(
           labelNode,
-          CompileTimeErrorCode.labelUndefined,
+          diag.labelUndefined,
           arguments: [labelNode.name],
         );
         return null;
@@ -5630,7 +5642,7 @@
         // enclosing scope.
         diagnosticReporter.atNode(
           labelNode,
-          CompileTimeErrorCode.labelUndefined,
+          diag.labelUndefined,
           arguments: [labelNode.name],
         );
         return null;
@@ -5643,7 +5655,7 @@
         if (!identical(labelContainer, enclosingClosure.firstFragment)) {
           diagnosticReporter.atNode(
             labelNode,
-            CompileTimeErrorCode.labelInOuterScope,
+            diag.labelInOuterScope,
             arguments: [labelNode.name],
           );
         }
@@ -5654,10 +5666,7 @@
           node is! ForStatement &&
           node is! SwitchMember &&
           node is! WhileStatement) {
-        diagnosticReporter.atNode(
-          parentNode,
-          CompileTimeErrorCode.continueLabelInvalid,
-        );
+        diagnosticReporter.atNode(parentNode, diag.continueLabelInvalid);
       }
       return node;
     }
diff --git a/pkg/analyzer/lib/src/generated/scope_helpers.dart b/pkg/analyzer/lib/src/generated/scope_helpers.dart
index b48a553..c094f50 100644
--- a/pkg/analyzer/lib/src/generated/scope_helpers.dart
+++ b/pkg/analyzer/lib/src/generated/scope_helpers.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/element/scope.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// Methods useful for [Scope] for resolution, but not belonging to it. This
 /// mixin exists to allow code to be more easily shared between separate
@@ -58,7 +58,7 @@
   void _reportDeprecatedExportUse({required Token nameToken}) {
     diagnosticReporter.atToken(
       nameToken,
-      WarningCode.deprecatedExportUse,
+      diag.deprecatedExportUse,
       arguments: [nameToken.lexeme],
     );
   }
diff --git a/pkg/analyzer/lib/src/generated/sdk.dart b/pkg/analyzer/lib/src/generated/sdk.dart
index c8782dc..8fefc1f 100644
--- a/pkg/analyzer/lib/src/generated/sdk.dart
+++ b/pkg/analyzer/lib/src/generated/sdk.dart
@@ -182,18 +182,6 @@
   /// documented.
   static const String _DOCUMENTED = "documented";
 
-  /// The name of the optional parameter used to specify the category of the
-  /// library.
-  static const String _CATEGORIES = "categories";
-
-  /// The name of the optional parameter used to specify the platforms on which
-  /// the library can be used.
-  static const String _PLATFORMS = "platforms";
-
-  /// The value of the [_PLATFORMS] parameter used to specify that the library
-  /// can be used on the VM.
-  static const String _VM_PLATFORM = "VM_PLATFORM";
-
   /// The library map that is populated by visiting the AST structure parsed
   /// from the contents of the libraries file.
   final LibraryMap _librariesMap = LibraryMap();
@@ -202,24 +190,6 @@
   /// parsed from the contents of the libraries file.
   LibraryMap get librariesMap => _librariesMap;
 
-  // To be backwards-compatible the new categories field is translated to
-  // an old approximation.
-  String convertCategories(String categories) {
-    switch (categories) {
-      case "":
-        return "Internal";
-      case "Client":
-        return "Client";
-      case "Server":
-        return "Server";
-      case "Client,Server":
-        return "Shared";
-      case "Client,Server,Embedded":
-        return "Shared";
-    }
-    return "Shared";
-  }
-
   @override
   void visitMapLiteralEntry(MapLiteralEntry node) {
     var key = node.key as SimpleStringLiteral;
@@ -235,22 +205,10 @@
         } else if (argument is NamedExpression) {
           String name = argument.name.label.name;
           Expression expression = argument.expression;
-          if (name == _CATEGORIES) {
-            var value = (expression as StringLiteral).stringValue!;
-            library.category = convertCategories(value);
-          } else if (name == _IMPLEMENTATION) {
+          if (name == _IMPLEMENTATION) {
             library._implementation = (expression as BooleanLiteral).value;
           } else if (name == _DOCUMENTED) {
             library.documented = (expression as BooleanLiteral).value;
-          } else if (name == _PLATFORMS) {
-            if (expression is SimpleIdentifier) {
-              String identifier = expression.name;
-              if (identifier == _VM_PLATFORM) {
-                library.setVmLibrary();
-              } else {
-                library.setDart2JsLibrary();
-              }
-            }
           } else if (name == _DART2JS_PATH) {
             if (expression is SimpleStringLiteral) {
               library.path = expression.value;
@@ -265,12 +223,6 @@
 
 /// Represents a single library in the SDK
 abstract class SdkLibrary {
-  /// Return the name of the category containing the library.
-  String get category;
-
-  /// Return `true` if this library can be compiled to JavaScript by dart2js.
-  bool get isDart2JsLibrary;
-
   /// Return `true` if the library is documented.
   bool get isDocumented;
 
@@ -281,12 +233,6 @@
   /// libraries.
   bool get isInternal;
 
-  /// Return `true` if this library can be used for both client and server.
-  bool get isShared;
-
-  /// Return `true` if this library can be run on the VM.
-  bool get isVmLibrary;
-
   /// Return the path to the file defining the library. The path is relative to
   /// the `lib` directory within the SDK.
   String get path;
@@ -314,21 +260,12 @@
   @override
   late String path;
 
-  /// The name of the category containing the library. Unless otherwise
-  /// specified in the libraries file all libraries are assumed to be shared
-  /// between server and client.
-  @override
-  String category = "Shared";
-
   /// A flag indicating whether the library is documented.
   bool _documented = true;
 
   /// A flag indicating whether the library is an implementation library.
   bool _implementation = false;
 
-  /// An encoding of which platforms this library is intended to work on.
-  int _platforms = 0;
-
   /// Initialize a newly created library to represent the library with the given
   /// [shortName].
   SdkLibraryImpl(this.shortName);
@@ -339,9 +276,6 @@
   }
 
   @override
-  bool get isDart2JsLibrary => (_platforms & DART2JS_PLATFORM) != 0;
-
-  @override
   bool get isDocumented => _documented;
 
   @override
@@ -349,20 +283,4 @@
 
   @override
   bool get isInternal => shortName.startsWith('dart:_');
-
-  @override
-  bool get isShared => category == "Shared";
-
-  @override
-  bool get isVmLibrary => (_platforms & VM_PLATFORM) != 0;
-
-  /// Record that this library can be compiled to JavaScript by dart2js.
-  void setDart2JsLibrary() {
-    _platforms |= DART2JS_PLATFORM;
-  }
-
-  /// Record that this library can be run on the VM.
-  void setVmLibrary() {
-    _platforms |= VM_PLATFORM;
-  }
 }
diff --git a/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart b/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
index b6c19919..6d104ff 100644
--- a/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
+++ b/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/utilities/extensions/version.dart';
 import 'package:pub_semver/pub_semver.dart';
 
@@ -80,10 +80,7 @@
     if (checkTripleShift) {
       TokenType operatorType = node.operator.type;
       if (operatorType == TokenType.GT_GT_GT) {
-        _errorReporter.atToken(
-          node.operator,
-          WarningCode.sdkVersionGtGtGtOperator,
-        );
+        _errorReporter.atToken(node.operator, diag.sdkVersionGtGtGtOperator);
       }
     }
     super.visitBinaryExpression(node);
@@ -115,7 +112,7 @@
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
     if (checkTripleShift && node.isOperator && node.name.lexeme == '>>>') {
-      _errorReporter.atToken(node.name, WarningCode.sdkVersionGtGtGtOperator);
+      _errorReporter.atToken(node.name, diag.sdkVersionGtGtGtOperator);
     }
     super.visitMethodDeclaration(node);
   }
@@ -196,7 +193,7 @@
         }
         _errorReporter.atEntity(
           errorEntity,
-          WarningCode.sdkVersionSince,
+          diag.sdkVersionSince,
           arguments: [
             sinceSdkVersion.toString(),
             _versionConstraint.toString(),
diff --git a/pkg/analyzer/lib/src/lint/constants.dart b/pkg/analyzer/lib/src/lint/constants.dart
index ac09c75..906338f 100644
--- a/pkg/analyzer/lib/src/lint/constants.dart
+++ b/pkg/analyzer/lib/src/lint/constants.dart
@@ -14,7 +14,7 @@
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/constant/potentially_constant.dart';
 import 'package:analyzer/src/dart/constant/utilities.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 /// A diagnostic listener that only records whether any constant-related
 /// diagnostics have been reported.
@@ -27,40 +27,40 @@
   void onDiagnostic(Diagnostic diagnostic) {
     DiagnosticCode diagnosticCode = diagnostic.diagnosticCode;
     switch (diagnosticCode) {
-      case CompileTimeErrorCode.constConstructorConstantFromDeferredLibrary:
-      case CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst:
-      case CompileTimeErrorCode.constEvalExtensionMethod:
-      case CompileTimeErrorCode.constEvalExtensionTypeMethod:
-      case CompileTimeErrorCode.constEvalMethodInvocation:
-      case CompileTimeErrorCode.constEvalPropertyAccess:
-      case CompileTimeErrorCode.constEvalTypeBool:
-      case CompileTimeErrorCode.constEvalTypeBoolInt:
-      case CompileTimeErrorCode.constEvalTypeBoolNumString:
-      case CompileTimeErrorCode.constEvalTypeInt:
-      case CompileTimeErrorCode.constEvalTypeNum:
-      case CompileTimeErrorCode.constEvalTypeNumString:
-      case CompileTimeErrorCode.constEvalTypeString:
-      case CompileTimeErrorCode.constEvalThrowsException:
-      case CompileTimeErrorCode.constEvalThrowsIdbze:
-      case CompileTimeErrorCode.constEvalForElement:
-      case CompileTimeErrorCode.constMapKeyNotPrimitiveEquality:
-      case CompileTimeErrorCode.constSetElementNotPrimitiveEquality:
-      case CompileTimeErrorCode.constTypeParameter:
-      case CompileTimeErrorCode.constWithNonConst:
-      case CompileTimeErrorCode.constWithNonConstantArgument:
-      case CompileTimeErrorCode.constWithTypeParameters:
-      case CompileTimeErrorCode.constWithTypeParametersConstructorTearoff:
-      case CompileTimeErrorCode.invalidConstant:
-      case CompileTimeErrorCode.missingConstInListLiteral:
-      case CompileTimeErrorCode.missingConstInMapLiteral:
-      case CompileTimeErrorCode.missingConstInSetLiteral:
-      case CompileTimeErrorCode.nonBoolCondition:
-      case CompileTimeErrorCode.nonConstantListElement:
-      case CompileTimeErrorCode.nonConstantMapElement:
-      case CompileTimeErrorCode.nonConstantMapKey:
-      case CompileTimeErrorCode.nonConstantMapValue:
-      case CompileTimeErrorCode.nonConstantRecordField:
-      case CompileTimeErrorCode.nonConstantSetElement:
+      case diag.constConstructorConstantFromDeferredLibrary:
+      case diag.constConstructorWithFieldInitializedByNonConst:
+      case diag.constEvalExtensionMethod:
+      case diag.constEvalExtensionTypeMethod:
+      case diag.constEvalMethodInvocation:
+      case diag.constEvalPropertyAccess:
+      case diag.constEvalTypeBool:
+      case diag.constEvalTypeBoolInt:
+      case diag.constEvalTypeBoolNumString:
+      case diag.constEvalTypeInt:
+      case diag.constEvalTypeNum:
+      case diag.constEvalTypeNumString:
+      case diag.constEvalTypeString:
+      case diag.constEvalThrowsException:
+      case diag.constEvalThrowsIdbze:
+      case diag.constEvalForElement:
+      case diag.constMapKeyNotPrimitiveEquality:
+      case diag.constSetElementNotPrimitiveEquality:
+      case diag.constTypeParameter:
+      case diag.constWithNonConst:
+      case diag.constWithNonConstantArgument:
+      case diag.constWithTypeParameters:
+      case diag.constWithTypeParametersConstructorTearoff:
+      case diag.invalidConstant:
+      case diag.missingConstInListLiteral:
+      case diag.missingConstInMapLiteral:
+      case diag.missingConstInSetLiteral:
+      case diag.nonBoolCondition:
+      case diag.nonConstantListElement:
+      case diag.nonConstantMapElement:
+      case diag.nonConstantMapKey:
+      case diag.nonConstantMapValue:
+      case diag.nonConstantRecordField:
+      case diag.nonConstantSetElement:
         hasConstError = true;
     }
   }
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
deleted file mode 100644
index f6e2811..0000000
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/analysis_rule/analysis_rule.dart';
-import 'package:analyzer/analysis_rule/rule_context.dart';
-import 'package:analyzer/error/error.dart';
-
-/// A soon-to-be deprecated alias for [RuleContext].
-typedef LinterContext = RuleContext;
-
-/// Describes an [AbstractAnalysisRule] which reports diagnostics using exactly
-/// one [DiagnosticCode].
-typedef LintRule = AnalysisRule;
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index 0a696b0..6cca33b 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/src/analysis_rule/rule_context.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/lint/analysis_rule_timers.dart';
-import 'package:meta/meta.dart';
 
 part 'linter_visitor.g.dart';
 
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.g.dart b/pkg/analyzer/lib/src/lint/linter_visitor.g.dart
index 3feea101..ad1f6b2 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.g.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.g.dart
@@ -88,7 +88,6 @@
     node.visitChildren(this);
   }
 
-  @experimental
   @override
   void visitBlockClassBody(BlockClassBody node) {
     _runSubscriptions(node, _registry._forBlockClassBody);
@@ -283,7 +282,6 @@
     node.visitChildren(this);
   }
 
-  @experimental
   @override
   void visitEmptyClassBody(EmptyClassBody node) {
     _runSubscriptions(node, _registry._forEmptyClassBody);
@@ -302,7 +300,6 @@
     node.visitChildren(this);
   }
 
-  @experimental
   @override
   void visitEnumBody(EnumBody node) {
     _runSubscriptions(node, _registry._forEnumBody);
@@ -681,7 +678,6 @@
     node.visitChildren(this);
   }
 
-  @experimental
   @override
   void visitNameWithTypeParameters(NameWithTypeParameters node) {
     _runSubscriptions(node, _registry._forNameWithTypeParameters);
@@ -804,14 +800,18 @@
     node.visitChildren(this);
   }
 
-  @experimental
+  @override
+  void visitPrimaryConstructorBody(PrimaryConstructorBody node) {
+    _runSubscriptions(node, _registry._forPrimaryConstructorBody);
+    node.visitChildren(this);
+  }
+
   @override
   void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
     _runSubscriptions(node, _registry._forPrimaryConstructorDeclaration);
     node.visitChildren(this);
   }
 
-  @experimental
   @override
   void visitPrimaryConstructorName(PrimaryConstructorName node) {
     _runSubscriptions(node, _registry._forPrimaryConstructorName);
@@ -881,12 +881,14 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   void visitRepresentationConstructorName(RepresentationConstructorName node) {
     _runSubscriptions(node, _registry._forRepresentationConstructorName);
     node.visitChildren(this);
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   void visitRepresentationDeclaration(RepresentationDeclaration node) {
     _runSubscriptions(node, _registry._forRepresentationDeclaration);
     node.visitChildren(this);
@@ -1462,6 +1464,9 @@
 
   final List<_Subscription<PrefixExpression>> _forPrefixExpression = [];
 
+  final List<_Subscription<PrimaryConstructorBody>> _forPrimaryConstructorBody =
+      [];
+
   final List<_Subscription<PrimaryConstructorDeclaration>>
   _forPrimaryConstructorDeclaration = [];
 
@@ -1490,9 +1495,11 @@
 
   final List<_Subscription<RelationalPattern>> _forRelationalPattern = [];
 
+  // ignore: deprecated_member_use_from_same_package
   final List<_Subscription<RepresentationConstructorName>>
   _forRepresentationConstructorName = [];
 
+  // ignore: deprecated_member_use_from_same_package
   final List<_Subscription<RepresentationDeclaration>>
   _forRepresentationDeclaration = [];
 
@@ -2357,6 +2364,16 @@
   }
 
   @override
+  void addPrimaryConstructorBody(
+    AbstractAnalysisRule rule,
+    AstVisitor visitor,
+  ) {
+    _forPrimaryConstructorBody.add(
+      _Subscription(rule, visitor, _getTimer(rule)),
+    );
+  }
+
+  @override
   void addPrimaryConstructorDeclaration(
     AbstractAnalysisRule rule,
     AstVisitor visitor,
@@ -2442,6 +2459,7 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   void addRepresentationConstructorName(
     AbstractAnalysisRule rule,
     AstVisitor visitor,
@@ -2452,6 +2470,7 @@
   }
 
   @override
+  // ignore: deprecated_member_use_from_same_package
   void addRepresentationDeclaration(
     AbstractAnalysisRule rule,
     AstVisitor visitor,
diff --git a/pkg/analyzer/lib/src/lint/options_rule_validator.dart b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
index ba811d7..f45f8a1 100644
--- a/pkg/analyzer/lib/src/lint/options_rule_validator.dart
+++ b/pkg/analyzer/lib/src/lint/options_rule_validator.dart
@@ -7,9 +7,9 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/file_source.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
 import 'package:analyzer/src/analysis_options/options_validator.dart';
 import 'package:analyzer/src/analysis_rule/rule_context.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/registry.dart';
@@ -262,7 +262,7 @@
     if (rules[null]!.map((e) => e.value).contains(ruleData.node.value)) {
       reporter.atSourceSpan(
         ruleData.node.span,
-        AnalysisOptionsWarningCode.duplicateRule,
+        diag.duplicateRule,
         arguments: [value],
       );
     }
@@ -382,7 +382,7 @@
       if (rule == null) {
         reporter.atSourceSpan(
           node.span,
-          AnalysisOptionsWarningCode.undefinedLint,
+          diag.undefinedLint,
           arguments: [value],
         );
         return null;
@@ -410,7 +410,7 @@
         var warningNode = enabled is YamlNode ? enabled : node;
         reporter.atSourceSpan(
           warningNode.span,
-          AnalysisOptionsWarningCode.unsupportedValue,
+          diag.unsupportedValue,
           arguments: [
             value,
             ruleValue,
@@ -428,13 +428,13 @@
           if (replacedBy != null) {
             reporter.atSourceSpan(
               node.span,
-              AnalysisOptionsWarningCode.deprecatedLintWithReplacement,
+              diag.deprecatedLintWithReplacement,
               arguments: [value, replacedBy],
             );
           } else {
             reporter.atSourceSpan(
               node.span,
-              AnalysisOptionsWarningCode.deprecatedLint,
+              diag.deprecatedLint,
               arguments: [value],
             );
           }
@@ -444,13 +444,13 @@
           if (replacedBy != null) {
             reporter.atSourceSpan(
               node.span,
-              AnalysisOptionsWarningCode.replacedLint,
+              diag.replacedLint,
               arguments: [value, since, replacedBy],
             );
           } else {
             reporter.atSourceSpan(
               node.span,
-              AnalysisOptionsWarningCode.removedLint,
+              diag.removedLint,
               arguments: [value, since],
             );
           }
diff --git a/pkg/analyzer/lib/src/lint/registry.dart b/pkg/analyzer/lib/src/lint/registry.dart
index 8b2930e..c655d11 100644
--- a/pkg/analyzer/lib/src/lint/registry.dart
+++ b/pkg/analyzer/lib/src/lint/registry.dart
@@ -4,8 +4,8 @@
 
 import 'dart:collection';
 
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/analysis_rule/rule_context.dart';
-import 'package:analyzer/src/dart/error/lint_codes.dart';
 import 'package:analyzer/src/lint/config.dart';
 
 /// Registry of lint rules and warning rules.
@@ -20,7 +20,7 @@
   final Map<String, AbstractAnalysisRule> _warningRules = {};
 
   /// A table mapping unique names to lint codes.
-  final Map<String, LintCode> _codeMap = {};
+  final Map<String, DiagnosticCode> _codeMap = {};
 
   @override
   Iterator<AbstractAnalysisRule> get iterator => _rules.values.iterator;
@@ -39,7 +39,7 @@
   AbstractAnalysisRule? operator [](String name) => _rules[name];
 
   /// Returns the lint code that has the given [uniqueName].
-  LintCode? codeForUniqueName(String uniqueName) => _codeMap[uniqueName];
+  DiagnosticCode? codeForUniqueName(String uniqueName) => _codeMap[uniqueName];
 
   /// Returns a list of the enabled rules.
   ///
@@ -70,7 +70,7 @@
   void registerLintRule(AbstractAnalysisRule rule) {
     _lintRules[rule.name] = rule;
     for (var code in rule.diagnosticCodes) {
-      _codeMap[code.uniqueName] = code as LintCode;
+      _codeMap[code.uniqueName] = code;
     }
   }
 
@@ -78,7 +78,7 @@
   void registerWarningRule(AbstractAnalysisRule rule) {
     _warningRules[rule.name] = rule;
     for (var code in rule.diagnosticCodes) {
-      _codeMap[code.uniqueName] = code as LintCode;
+      _codeMap[code.uniqueName] = code;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/manifest/manifest_validator.dart b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
index d3fa571..d58f3af 100644
--- a/pkg/analyzer/lib/src/manifest/manifest_validator.dart
+++ b/pkg/analyzer/lib/src/manifest/manifest_validator.dart
@@ -6,9 +6,9 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/source/source.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/manifest/charcodes.dart';
 import 'package:analyzer/src/manifest/manifest_values.dart';
-import 'package:analyzer/src/manifest/manifest_warning_code.dart';
 import 'package:analyzer/src/utilities/extensions/string.dart';
 import 'package:collection/collection.dart';
 import 'package:meta/meta.dart';
@@ -495,7 +495,7 @@
           reporter,
           activity,
           attributeScreenOrientation,
-          ManifestWarningCode.settingOrientationOnActivity,
+          diag.settingOrientationOnActivity,
         );
       }
     }
@@ -505,7 +505,7 @@
           reporter,
           activity,
           attributeResizableActivity,
-          ManifestWarningCode.nonResizableActivity,
+          diag.nonResizableActivity,
         );
       }
     }
@@ -532,7 +532,7 @@
           reporter,
           element,
           androidName,
-          ManifestWarningCode.unsupportedChromeOsHardware,
+          diag.unsupportedChromeOsHardware,
           [element.attributes[androidName]!.value],
         );
       } else if (element.attributes[androidRequired]?.value == 'true') {
@@ -545,7 +545,7 @@
           reporter,
           element,
           androidName,
-          ManifestWarningCode.unsupportedChromeOsFeature,
+          diag.unsupportedChromeOsFeature,
           [element.attributes[androidName]!.value],
         );
       }
@@ -567,7 +567,7 @@
             reporter,
             permission,
             androidName,
-            ManifestWarningCode.cameraPermissionsIncompatible,
+            diag.cameraPermissionsIncompatible,
           );
         }
       } else {
@@ -579,7 +579,7 @@
             reporter,
             permission,
             androidName,
-            ManifestWarningCode.permissionImpliesUnsupportedHardware,
+            diag.permissionImpliesUnsupportedHardware,
             [featureName],
           );
         }
@@ -603,7 +603,7 @@
           reporter,
           feature,
           androidName,
-          ManifestWarningCode.unsupportedChromeOsHardware,
+          diag.unsupportedChromeOsHardware,
           [hardwareFeatureTouchscreen],
         );
       } else if (feature.attributes[androidRequired]?.value == 'true') {
@@ -611,17 +611,12 @@
           reporter,
           feature,
           androidName,
-          ManifestWarningCode.unsupportedChromeOsFeature,
+          diag.unsupportedChromeOsFeature,
           [hardwareFeatureTouchscreen],
         );
       }
     } else {
-      _reportErrorForNode(
-        reporter,
-        manifest,
-        null,
-        ManifestWarningCode.noTouchscreenFeature,
-      );
+      _reportErrorForNode(reporter, manifest, null, diag.noTouchscreenFeature);
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/manifest/manifest_warning_code.dart b/pkg/analyzer/lib/src/manifest/manifest_warning_code.dart
deleted file mode 100644
index 99aae9c..0000000
--- a/pkg/analyzer/lib/src/manifest/manifest_warning_code.dart
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:_fe_analyzer_shared/src/base/errors.dart';
-
-part 'package:analyzer/src/manifest/manifest_warning_code.g.dart';
diff --git a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart b/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
deleted file mode 100644
index 7bb0d1b..0000000
--- a/pkg/analyzer/lib/src/manifest/manifest_warning_code.g.dart
+++ /dev/null
@@ -1,225 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/manifest/manifest_warning_code.dart";
-
-class ManifestWarningCode extends DiagnosticCodeWithExpectedTypes {
-  /// A code indicating that the camera permissions is not supported on Chrome
-  /// OS.
-  ///
-  /// No parameters.
-  static const ManifestWarningWithoutArguments
-  cameraPermissionsIncompatible = ManifestWarningWithoutArguments(
-    name: 'CAMERA_PERMISSIONS_INCOMPATIBLE',
-    problemMessage:
-        "Camera permissions make app incompatible for Chrome OS, consider adding "
-        "optional features \"android.hardware.camera\" and "
-        "\"android.hardware.camera.autofocus\".",
-    correctionMessage:
-        "Try adding `<uses-feature android:name=\"android.hardware.camera\"  "
-        "android:required=\"false\">` `<uses-feature "
-        "android:name=\"android.hardware.camera.autofocus\"  "
-        "android:required=\"false\">`.",
-    uniqueNameCheck: 'ManifestWarningCode.CAMERA_PERMISSIONS_INCOMPATIBLE',
-    expectedTypes: [],
-  );
-
-  /// A code indicating that the activity is set to be non resizable.
-  ///
-  /// No parameters.
-  static const ManifestWarningWithoutArguments
-  nonResizableActivity = ManifestWarningWithoutArguments(
-    name: 'NON_RESIZABLE_ACTIVITY',
-    problemMessage:
-        "The `<activity>` element should be allowed to be resized to allow users "
-        "to take advantage of the multi-window environment on Chrome OS",
-    correctionMessage:
-        "Consider declaring the corresponding activity element with "
-        "`resizableActivity=\"true\"` attribute.",
-    uniqueNameCheck: 'ManifestWarningCode.NON_RESIZABLE_ACTIVITY',
-    expectedTypes: [],
-  );
-
-  /// A code indicating that the touchscreen feature is not specified in the
-  /// manifest.
-  ///
-  /// No parameters.
-  static const ManifestWarningWithoutArguments
-  noTouchscreenFeature = ManifestWarningWithoutArguments(
-    name: 'NO_TOUCHSCREEN_FEATURE',
-    problemMessage:
-        "The default \"android.hardware.touchscreen\" needs to be optional for "
-        "Chrome OS.",
-    correctionMessage:
-        "Consider adding <uses-feature "
-        "android:name=\"android.hardware.touchscreen\" android:required=\"false\" "
-        "/> to the manifest.",
-    uniqueNameCheck: 'ManifestWarningCode.NO_TOUCHSCREEN_FEATURE',
-    expectedTypes: [],
-  );
-
-  /// A code indicating that a specified permission is not supported on Chrome
-  /// OS.
-  ///
-  /// Parameters:
-  /// Object p0: the name of the feature tag
-  static const ManifestWarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  permissionImpliesUnsupportedHardware = ManifestWarningTemplate(
-    name: 'PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE',
-    problemMessage:
-        "Permission makes app incompatible for Chrome OS, consider adding optional "
-        "{0} feature tag,",
-    correctionMessage:
-        " Try adding `<uses-feature android:name=\"{0}\"  "
-        "android:required=\"false\">`.",
-    uniqueNameCheck:
-        'ManifestWarningCode.PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE',
-    withArguments: _withArgumentsPermissionImpliesUnsupportedHardware,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// A code indicating that the activity is locked to an orientation.
-  ///
-  /// No parameters.
-  static const ManifestWarningWithoutArguments
-  settingOrientationOnActivity = ManifestWarningWithoutArguments(
-    name: 'SETTING_ORIENTATION_ON_ACTIVITY',
-    problemMessage:
-        "The `<activity>` element should not be locked to any orientation so that "
-        "users can take advantage of the multi-window environments and larger "
-        "screens on Chrome OS",
-    correctionMessage:
-        "Consider declaring the corresponding activity element with "
-        "`screenOrientation=\"unspecified\"` or `\"fullSensor\"` attribute.",
-    uniqueNameCheck: 'ManifestWarningCode.SETTING_ORIENTATION_ON_ACTIVITY',
-    expectedTypes: [],
-  );
-
-  /// A code indicating that a specified feature is not supported on Chrome OS.
-  ///
-  /// Parameters:
-  /// String p0: the name of the feature
-  static const ManifestWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unsupportedChromeOsFeature = ManifestWarningTemplate(
-    name: 'UNSUPPORTED_CHROME_OS_FEATURE',
-    problemMessage:
-        "The feature {0} isn't supported on Chrome OS, consider making it "
-        "optional.",
-    correctionMessage:
-        "Try changing to `android:required=\"false\"` for this feature.",
-    uniqueNameCheck: 'ManifestWarningCode.UNSUPPORTED_CHROME_OS_FEATURE',
-    withArguments: _withArgumentsUnsupportedChromeOsFeature,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// A code indicating that a specified hardware feature is not supported on
-  /// Chrome OS.
-  ///
-  /// Parameters:
-  /// String p0: the name of the feature
-  static const ManifestWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unsupportedChromeOsHardware = ManifestWarningTemplate(
-    name: 'UNSUPPORTED_CHROME_OS_HARDWARE',
-    problemMessage:
-        "The feature {0} isn't supported on Chrome OS, consider making it "
-        "optional.",
-    correctionMessage:
-        "Try adding `android:required=\"false\"` for this feature.",
-    uniqueNameCheck: 'ManifestWarningCode.UNSUPPORTED_CHROME_OS_HARDWARE',
-    withArguments: _withArgumentsUnsupportedChromeOsHardware,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const ManifestWarningCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.STATIC_WARNING,
-         uniqueName: 'ManifestWarningCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic
-  _withArgumentsPermissionImpliesUnsupportedHardware({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      ManifestWarningCode.permissionImpliesUnsupportedHardware,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedChromeOsFeature({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      ManifestWarningCode.unsupportedChromeOsFeature,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUnsupportedChromeOsHardware({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      ManifestWarningCode.unsupportedChromeOsHardware,
-      [p0],
-    );
-  }
-}
-
-final class ManifestWarningTemplate<T extends Function>
-    extends ManifestWarningCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const ManifestWarningTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class ManifestWarningWithoutArguments extends ManifestWarningCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const ManifestWarningWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart b/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart
deleted file mode 100644
index f1aa2c7..0000000
--- a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.dart
+++ /dev/null
@@ -1,7 +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.
-
-import 'package:_fe_analyzer_shared/src/base/errors.dart';
-
-part 'package:analyzer/src/pubspec/pubspec_warning_code.g.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
deleted file mode 100644
index 259b1df..0000000
--- a/pkg/analyzer/lib/src/pubspec/pubspec_warning_code.g.dart
+++ /dev/null
@@ -1,489 +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.
-
-// THIS FILE IS GENERATED. DO NOT EDIT.
-//
-// Instead modify 'pkg/analyzer/messages.yaml' and run
-// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
-//
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-part of "package:analyzer/src/pubspec/pubspec_warning_code.dart";
-
-class PubspecWarningCode extends DiagnosticCodeWithExpectedTypes {
-  /// Parameters:
-  /// String p0: the path to the asset directory as given in the file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  assetDirectoryDoesNotExist = PubspecWarningTemplate(
-    name: 'ASSET_DIRECTORY_DOES_NOT_EXIST',
-    problemMessage: "The asset directory '{0}' doesn't exist.",
-    correctionMessage:
-        "Try creating the directory or fixing the path to the directory.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST',
-    withArguments: _withArgumentsAssetDirectoryDoesNotExist,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the path to the asset as given in the file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  assetDoesNotExist = PubspecWarningTemplate(
-    name: 'ASSET_DOES_NOT_EXIST',
-    problemMessage: "The asset file '{0}' doesn't exist.",
-    correctionMessage: "Try creating the file or fixing the path to the file.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.ASSET_DOES_NOT_EXIST',
-    withArguments: _withArgumentsAssetDoesNotExist,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments
-  assetFieldNotList = PubspecWarningWithoutArguments(
-    name: 'ASSET_FIELD_NOT_LIST',
-    problemMessage:
-        "The value of the 'assets' field is expected to be a list of relative file "
-        "paths.",
-    correctionMessage:
-        "Try converting the value to be a list of relative file paths.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.ASSET_FIELD_NOT_LIST',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments assetMissingPath =
-      PubspecWarningWithoutArguments(
-        name: 'ASSET_MISSING_PATH',
-        problemMessage: "Asset map entry must contain a 'path' field.",
-        correctionMessage: "Try adding a 'path' field.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.ASSET_MISSING_PATH',
-        expectedTypes: [],
-      );
-
-  /// This code is deprecated in favor of the
-  /// 'ASSET_NOT_STRING_OR_MAP' code, and will be removed.
-  ///
-  /// No parameters.
-  static const PubspecWarningWithoutArguments assetNotString =
-      PubspecWarningWithoutArguments(
-        name: 'ASSET_NOT_STRING',
-        problemMessage: "Assets are required to be file paths (strings).",
-        correctionMessage: "Try converting the value to be a string.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.ASSET_NOT_STRING',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments assetNotStringOrMap =
-      PubspecWarningWithoutArguments(
-        name: 'ASSET_NOT_STRING_OR_MAP',
-        problemMessage:
-            "An asset value is required to be a file path (string) or map.",
-        correctionMessage: "Try converting the value to be a string or map.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.ASSET_NOT_STRING_OR_MAP',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments assetPathNotString =
-      PubspecWarningWithoutArguments(
-        name: 'ASSET_PATH_NOT_STRING',
-        problemMessage: "Asset paths are required to be file paths (strings).",
-        correctionMessage: "Try converting the value to be a string.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.ASSET_PATH_NOT_STRING',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the name of the field
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  dependenciesFieldNotMap = PubspecWarningTemplate(
-    name: 'DEPENDENCIES_FIELD_NOT_MAP',
-    problemMessage: "The value of the '{0}' field is expected to be a map.",
-    correctionMessage: "Try converting the value to be a map.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP',
-    withArguments: _withArgumentsDependenciesFieldNotMap,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the field
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  deprecatedField = PubspecWarningTemplate(
-    name: 'DEPRECATED_FIELD',
-    problemMessage: "The '{0}' field is no longer used and can be removed.",
-    correctionMessage: "Try removing the field.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.DEPRECATED_FIELD',
-    withArguments: _withArgumentsDeprecatedField,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments flutterFieldNotMap =
-      PubspecWarningWithoutArguments(
-        name: 'FLUTTER_FIELD_NOT_MAP',
-        problemMessage:
-            "The value of the 'flutter' field is expected to be a map.",
-        correctionMessage: "Try converting the value to be a map.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.FLUTTER_FIELD_NOT_MAP',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the kind of dependency.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  invalidDependency = PubspecWarningTemplate(
-    name: 'INVALID_DEPENDENCY',
-    problemMessage: "Publishable packages can't have '{0}' dependencies.",
-    correctionMessage:
-        "Try adding a 'publish_to: none' entry to mark the package as not for "
-        "publishing or remove the {0} dependency.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.INVALID_DEPENDENCY',
-    withArguments: _withArgumentsInvalidDependency,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments
-  invalidPlatformsField = PubspecWarningWithoutArguments(
-    name: 'INVALID_PLATFORMS_FIELD',
-    problemMessage:
-        "The 'platforms' field must be a map with platforms as keys.",
-    correctionMessage:
-        "Try changing the 'platforms' field to a map with platforms as keys.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.INVALID_PLATFORMS_FIELD',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// String p0: the list of packages missing from the dependencies and the list
-  ///            of packages missing from the dev_dependencies (if any) in the
-  ///            pubspec file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  missingDependency = PubspecWarningTemplate(
-    name: 'MISSING_DEPENDENCY',
-    problemMessage: "Missing a dependency on imported package '{0}'.",
-    correctionMessage: "Try adding {0}.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.MISSING_DEPENDENCY',
-    withArguments: _withArgumentsMissingDependency,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments missingName =
-      PubspecWarningWithoutArguments(
-        name: 'MISSING_NAME',
-        problemMessage: "The 'name' field is required but missing.",
-        correctionMessage: "Try adding a field named 'name'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.MISSING_NAME',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments nameNotString =
-      PubspecWarningWithoutArguments(
-        name: 'NAME_NOT_STRING',
-        problemMessage:
-            "The value of the 'name' field is required to be a string.",
-        correctionMessage: "Try converting the value to be a string.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.NAME_NOT_STRING',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the path to the dependency as given in the file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  pathDoesNotExist = PubspecWarningTemplate(
-    name: 'PATH_DOES_NOT_EXIST',
-    problemMessage: "The path '{0}' doesn't exist.",
-    correctionMessage:
-        "Try creating the referenced path or using a path that exists.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.PATH_DOES_NOT_EXIST',
-    withArguments: _withArgumentsPathDoesNotExist,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the path as given in the file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  pathNotPosix = PubspecWarningTemplate(
-    name: 'PATH_NOT_POSIX',
-    problemMessage: "The path '{0}' isn't a POSIX-style path.",
-    correctionMessage: "Try converting the value to a POSIX-style path.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.PATH_NOT_POSIX',
-    withArguments: _withArgumentsPathNotPosix,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Parameters:
-  /// String p0: the path to the dependency as given in the file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  pathPubspecDoesNotExist = PubspecWarningTemplate(
-    name: 'PATH_PUBSPEC_DOES_NOT_EXIST',
-    problemMessage: "The directory '{0}' doesn't contain a pubspec.",
-    correctionMessage:
-        "Try creating a pubspec in the referenced directory or using a path "
-        "that has a pubspec.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST',
-    withArguments: _withArgumentsPathPubspecDoesNotExist,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments platformValueDisallowed =
-      PubspecWarningWithoutArguments(
-        name: 'PLATFORM_VALUE_DISALLOWED',
-        problemMessage: "Keys in the `platforms` field can't have values.",
-        correctionMessage: "Try removing the value, while keeping the key.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.PLATFORM_VALUE_DISALLOWED',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: the unknown platform.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unknownPlatform = PubspecWarningTemplate(
-    name: 'UNKNOWN_PLATFORM',
-    problemMessage: "The platform '{0}' is not a recognized platform.",
-    correctionMessage: "Try correcting the platform name or removing it.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.UNKNOWN_PLATFORM',
-    withArguments: _withArgumentsUnknownPlatform,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// String p0: the name of the package in the dev_dependency list.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  unnecessaryDevDependency = PubspecWarningTemplate(
-    name: '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.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY',
-    withArguments: _withArgumentsUnnecessaryDevDependency,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments
-  workspaceFieldNotList = PubspecWarningWithoutArguments(
-    name: 'WORKSPACE_FIELD_NOT_LIST',
-    problemMessage:
-        "The value of the 'workspace' field is required to be a list of relative "
-        "file paths.",
-    correctionMessage:
-        "Try converting the value to be a list of relative file paths.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'PubspecWarningCode.WORKSPACE_FIELD_NOT_LIST',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const PubspecWarningWithoutArguments workspaceValueNotString =
-      PubspecWarningWithoutArguments(
-        name: 'WORKSPACE_VALUE_NOT_STRING',
-        problemMessage:
-            "Workspace entries are required to be directory paths (strings).",
-        correctionMessage: "Try converting the value to be a string.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'PubspecWarningCode.WORKSPACE_VALUE_NOT_STRING',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// String p0: the path of the directory that contains the pubspec.yaml file.
-  static const PubspecWarningTemplate<
-    LocatableDiagnostic Function({required String p0})
-  >
-  workspaceValueNotSubdirectory = PubspecWarningTemplate(
-    name: 'WORKSPACE_VALUE_NOT_SUBDIRECTORY',
-    problemMessage:
-        "Workspace values must be a relative path of a subdirectory of '{0}'.",
-    correctionMessage:
-        "Try using a subdirectory of the directory containing the "
-        "'pubspec.yaml' file.",
-    uniqueNameCheck: 'PubspecWarningCode.WORKSPACE_VALUE_NOT_SUBDIRECTORY',
-    withArguments: _withArgumentsWorkspaceValueNotSubdirectory,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Initialize a newly created error code to have the given [name].
-  const PubspecWarningCode({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    String? uniqueName,
-    required String super.uniqueNameCheck,
-    required super.expectedTypes,
-  }) : super(
-         type: DiagnosticType.STATIC_WARNING,
-         uniqueName: 'PubspecWarningCode.${uniqueName ?? name}',
-       );
-
-  static LocatableDiagnostic _withArgumentsAssetDirectoryDoesNotExist({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      PubspecWarningCode.assetDirectoryDoesNotExist,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAssetDoesNotExist({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.assetDoesNotExist, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDependenciesFieldNotMap({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.dependenciesFieldNotMap, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsDeprecatedField({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.deprecatedField, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsInvalidDependency({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.invalidDependency, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMissingDependency({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.missingDependency, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPathDoesNotExist({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.pathDoesNotExist, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPathNotPosix({required String p0}) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.pathNotPosix, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPathPubspecDoesNotExist({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.pathPubspecDoesNotExist, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnknownPlatform({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(PubspecWarningCode.unknownPlatform, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryDevDependency({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      PubspecWarningCode.unnecessaryDevDependency,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsWorkspaceValueNotSubdirectory({
-    required String p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      PubspecWarningCode.workspaceValueNotSubdirectory,
-      [p0],
-    );
-  }
-}
-
-final class PubspecWarningTemplate<T extends Function>
-    extends PubspecWarningCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const PubspecWarningTemplate({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-    required this.withArguments,
-  });
-}
-
-final class PubspecWarningWithoutArguments extends PubspecWarningCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const PubspecWarningWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.isUnresolvedIdentifier = false,
-    super.uniqueName,
-    required super.uniqueNameCheck,
-    required super.expectedTypes,
-  });
-}
diff --git a/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart
index ab7ed4e..7c14fed 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/dependency_validator.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 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:path/path.dart' as path;
@@ -23,9 +23,7 @@
     } else if (field is YamlMap) {
       return field.nodes;
     }
-    ctx.reportErrorForNode(field, PubspecWarningCode.dependenciesFieldNotMap, [
-      key,
-    ]);
+    ctx.reportErrorForNode(field, diag.dependenciesFieldNotMap, [key]);
     return <String, YamlNode>{};
   }
 
@@ -48,9 +46,7 @@
       YamlNode pathValue() => dependency.valueAt(PubspecField.PATH_FIELD)!;
 
       if (pathEntry.contains(r'\')) {
-        ctx.reportErrorForNode(pathValue(), PubspecWarningCode.pathNotPosix, [
-          pathEntry,
-        ]);
+        ctx.reportErrorForNode(pathValue(), diag.pathNotPosix, [pathEntry]);
         return;
       }
       var context = ctx.provider.pathContext;
@@ -61,26 +57,18 @@
       dependencyPath = context.normalize(dependencyPath);
       var packageFolder = ctx.provider.getFolder(dependencyPath);
       if (!packageFolder.exists) {
-        ctx.reportErrorForNode(
-          pathValue(),
-          PubspecWarningCode.pathDoesNotExist,
-          [pathEntry],
-        );
+        ctx.reportErrorForNode(pathValue(), diag.pathDoesNotExist, [pathEntry]);
       } else {
         if (!packageFolder.getChild(file_paths.pubspecYaml).exists) {
-          ctx.reportErrorForNode(
-            pathValue(),
-            PubspecWarningCode.pathPubspecDoesNotExist,
-            [pathEntry],
-          );
+          ctx.reportErrorForNode(pathValue(), diag.pathPubspecDoesNotExist, [
+            pathEntry,
+          ]);
         }
       }
       if (checkForPathAndGitDeps) {
-        ctx.reportErrorForNode(
-          pathKey(),
-          PubspecWarningCode.invalidDependency,
-          [PubspecField.PATH_FIELD],
-        );
+        ctx.reportErrorForNode(pathKey(), diag.invalidDependency, [
+          PubspecField.PATH_FIELD,
+        ]);
       }
     }
 
@@ -88,7 +76,7 @@
     if (gitEntry != null && checkForPathAndGitDeps) {
       ctx.reportErrorForNode(
         dependency.getKey(PubspecField.GIT_FIELD)!,
-        PubspecWarningCode.invalidDependency,
+        diag.invalidDependency,
         [PubspecField.GIT_FIELD],
       );
     }
@@ -119,11 +107,9 @@
   for (var dependency in declaredDevDependencies.entries) {
     var packageName = dependency.key as YamlNode;
     if (declaredDependencies.containsKey(packageName)) {
-      ctx.reportErrorForNode(
-        packageName,
-        PubspecWarningCode.unnecessaryDevDependency,
-        [packageName.valueOrThrow],
-      );
+      ctx.reportErrorForNode(packageName, diag.unnecessaryDevDependency, [
+        packageName.valueOrThrow,
+      ]);
     }
     validatePathEntries(dependency.value, false);
   }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart
index fd8627c..9b762fd 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/field_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/field_validator.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 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:yaml/yaml.dart';
 
 const _deprecatedFields = ['author', 'authors', 'transformers', 'web'];
@@ -17,7 +17,7 @@
   for (var field in contents.nodes.keys) {
     var name = ctx.asString(field);
     if (field is YamlNode && name != null && _deprecatedFields.contains(name)) {
-      ctx.reportErrorForNode(field, PubspecWarningCode.deprecatedField, [name]);
+      ctx.reportErrorForNode(field, diag.deprecatedField, [name]);
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
index 4c29b11..82c796f 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/flutter_validator.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:path/path.dart' as path;
 import 'package:yaml/yaml.dart';
@@ -20,10 +20,7 @@
     // non-map one.
     if (flutterField.value == null) {
     } else {
-      ctx.reportErrorForNode(
-        flutterField,
-        PubspecWarningCode.flutterFieldNotMap,
-      );
+      ctx.reportErrorForNode(flutterField, diag.flutterFieldNotMap);
     }
     return;
   }
@@ -31,7 +28,7 @@
   var assetsField = flutterField.nodes[PubspecField.ASSETS_FIELD];
   if (assetsField == null) return;
   if (assetsField is! YamlList) {
-    ctx.reportErrorForNode(assetsField, PubspecWarningCode.assetFieldNotList);
+    ctx.reportErrorForNode(assetsField, diag.assetFieldNotList);
     return;
   }
 
@@ -39,10 +36,7 @@
     if (assetField is YamlScalar) {
       var entry = assetField.valueOrThrow;
       if (entry is! String) {
-        ctx.reportErrorForNode(
-          assetField,
-          PubspecWarningCode.assetNotStringOrMap,
-        );
+        ctx.reportErrorForNode(assetField, diag.assetNotStringOrMap);
         return;
       }
 
@@ -50,26 +44,20 @@
     } else if (assetField is YamlMap) {
       var pathField = assetField.nodes[PubspecField.ASSET_PATH_FIELD];
       if (pathField == null) {
-        ctx.reportErrorForNode(assetField, PubspecWarningCode.assetMissingPath);
+        ctx.reportErrorForNode(assetField, diag.assetMissingPath);
       } else if (pathField is! YamlScalar) {
-        ctx.reportErrorForNode(
-          pathField,
-          PubspecWarningCode.assetPathNotString,
-        );
+        ctx.reportErrorForNode(pathField, diag.assetPathNotString);
       } else {
         var entry = pathField.valueOrThrow;
         if (entry is! String) {
-          ctx.reportErrorForNode(pathField, PubspecWarningCode.assetNotString);
+          ctx.reportErrorForNode(pathField, diag.assetNotString);
           return;
         }
 
         _validateAssetPath(ctx, entry, pathField);
       }
     } else {
-      ctx.reportErrorForNode(
-        assetField,
-        PubspecWarningCode.assetNotStringOrMap,
-      );
+      ctx.reportErrorForNode(assetField, diag.assetNotStringOrMap);
     }
   }
 
@@ -126,8 +114,8 @@
     var assetPath = context.join(packageRoot, normalizedEntry);
     if (!_assetExistsAtPath(ctx, assetPath)) {
       var errorCode = isDirectoryEntry
-          ? PubspecWarningCode.assetDirectoryDoesNotExist
-          : PubspecWarningCode.assetDoesNotExist;
+          ? diag.assetDirectoryDoesNotExist
+          : diag.assetDoesNotExist;
       ctx.reportErrorForNode(errorField, errorCode, [pathValue]);
     }
   }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
index 9c5a009..5d3b7a2 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/missing_dependency_validator.dart
@@ -7,12 +7,12 @@
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/source.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:yaml/yaml.dart';
 
 class MissingDependencyData {
-  /// Expando associating each [PubspecWarningCode.missingDependency] with
+  /// Expando associating each [diag.missingDependency] with
   /// missing dependency information; this information is used by the analysis
   /// server to list of missing patterns; this data is used by the analysis
   /// server to compute fixes.
@@ -76,9 +76,7 @@
       } else if (field is YamlMap) {
         return field.nodes;
       }
-      _reportErrorForNode(field, PubspecWarningCode.dependenciesFieldNotMap, [
-        key,
-      ]);
+      _reportErrorForNode(field, diag.dependenciesFieldNotMap, [key]);
       return <String, YamlNode>{};
     }
 
@@ -132,7 +130,7 @@
     if (addDeps.isNotEmpty || addDevDeps.isNotEmpty) {
       var diagnostic = _reportErrorForNode(
         contents.nodes.values.first,
-        PubspecWarningCode.missingDependency,
+        diag.missingDependency,
         [message],
         [],
       );
diff --git a/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
index ea8b438..76d512d 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/name_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/name_validator.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 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:yaml/yaml.dart';
 
 /// Validate the value of the required `name` field.
@@ -13,7 +13,7 @@
     ctx.reporter.atOffset(
       offset: 0,
       length: 0,
-      diagnosticCode: PubspecWarningCode.missingName,
+      diagnosticCode: diag.missingName,
     );
     return;
   }
@@ -22,9 +22,9 @@
     ctx.reporter.atOffset(
       offset: 0,
       length: 0,
-      diagnosticCode: PubspecWarningCode.missingName,
+      diagnosticCode: diag.missingName,
     );
   } else if (nameField is! YamlScalar || nameField.value is! String) {
-    ctx.reportErrorForNode(nameField, PubspecWarningCode.nameNotString);
+    ctx.reportErrorForNode(nameField, diag.nameNotString);
   }
 }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/platforms_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/platforms_validator.dart
index 29a6b05..657f19c 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/platforms_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/platforms_validator.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 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:yaml/yaml.dart';
 
@@ -27,13 +27,13 @@
   }
   // The 'platforms' field must be a map
   if (platforms is! YamlMap) {
-    ctx.reportErrorForNode(platforms, PubspecWarningCode.invalidPlatformsField);
+    ctx.reportErrorForNode(platforms, diag.invalidPlatformsField);
     return;
   }
   // Each key under 'platforms' must be a supported platform.
   for (var platform in platforms.nodeMap.keys) {
     if (platform is! YamlScalar || !_knownPlatforms.contains(platform.value)) {
-      ctx.reportErrorForNode(platform, PubspecWarningCode.unknownPlatform, [
+      ctx.reportErrorForNode(platform, diag.unknownPlatform, [
         switch (platform.value) {
           (String s) => s,
           (num n) => n,
@@ -45,7 +45,7 @@
   // Values under the platforms keys are not allowed.
   for (var v in platforms.nodeMap.values) {
     if (v is! YamlScalar || v.value != null) {
-      ctx.reportErrorForNode(v, PubspecWarningCode.platformValueDisallowed);
+      ctx.reportErrorForNode(v, diag.platformValueDisallowed);
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/screenshot_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/screenshot_validator.dart
index be18461..8e55a32 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/screenshot_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/screenshot_validator.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 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:path/path.dart' as p;
 import 'package:yaml/yaml.dart';
@@ -29,7 +29,7 @@
     if (entryValue is! YamlScalar) continue;
     var path = entryValue.value;
     if (path is String && !fileExistsAtPath(path)) {
-      ctx.reportErrorForNode(entryValue, PubspecWarningCode.pathDoesNotExist, [
+      ctx.reportErrorForNode(entryValue, diag.pathDoesNotExist, [
         entryValue.valueOrThrow,
       ]);
     }
diff --git a/pkg/analyzer/lib/src/pubspec/validators/workspace_validator.dart b/pkg/analyzer/lib/src/pubspec/validators/workspace_validator.dart
index f3cd1de..73fd69b 100644
--- a/pkg/analyzer/lib/src/pubspec/validators/workspace_validator.dart
+++ b/pkg/analyzer/lib/src/pubspec/validators/workspace_validator.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 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:path/path.dart' as path;
 import 'package:yaml/yaml.dart';
@@ -15,10 +15,7 @@
   var workspaceField = contents.nodes[PubspecField.WORKSPACE_FIELD];
   if (workspaceField == null) return;
   if (workspaceField is! YamlList) {
-    ctx.reportErrorForNode(
-      workspaceField,
-      PubspecWarningCode.workspaceFieldNotList,
-    );
+    ctx.reportErrorForNode(workspaceField, diag.workspaceFieldNotList);
     return;
   }
 
@@ -26,18 +23,12 @@
     if (directoryField is YamlScalar) {
       var entry = directoryField.valueOrThrow;
       if (entry is! String) {
-        ctx.reportErrorForNode(
-          directoryField,
-          PubspecWarningCode.workspaceValueNotString,
-        );
+        ctx.reportErrorForNode(directoryField, diag.workspaceValueNotString);
         return;
       }
       _validateDirectoryPath(ctx, entry, directoryField);
     } else {
-      ctx.reportErrorForNode(
-        directoryField,
-        PubspecWarningCode.workspaceValueNotString,
-      );
+      ctx.reportErrorForNode(directoryField, diag.workspaceValueNotString);
     }
   }
 }
@@ -57,17 +48,13 @@
   var dirPath = context.join(packageRoot, normalizedEntry);
   // Check if given path is a sub directory of the package root.
   if (!packageRootFolder.contains(dirPath)) {
-    ctx.reportErrorForNode(
-      errorField,
-      PubspecWarningCode.workspaceValueNotSubdirectory,
-      [packageRoot],
-    );
+    ctx.reportErrorForNode(errorField, diag.workspaceValueNotSubdirectory, [
+      packageRoot,
+    ]);
     return;
   }
   var subDirectory = ctx.provider.getFolder(dirPath);
   if (!subDirectory.exists) {
-    ctx.reportErrorForNode(errorField, PubspecWarningCode.pathDoesNotExist, [
-      pathValue,
-    ]);
+    ctx.reportErrorForNode(errorField, diag.pathDoesNotExist, [pathValue]);
   }
 }
diff --git a/pkg/analyzer/lib/src/source/package_map_resolver.dart b/pkg/analyzer/lib/src/source/package_map_resolver.dart
index 92bd34f..5afd75b8 100644
--- a/pkg/analyzer/lib/src/source/package_map_resolver.dart
+++ b/pkg/analyzer/lib/src/source/package_map_resolver.dart
@@ -46,6 +46,8 @@
     // See for instance https://github.com/dart-lang/package_config/pull/117
     // for inspiration, but also, maybe just use package:package_config?
     pathos.Context pathContext = resourceProvider.pathContext;
+    Uri? bestUri;
+    int bestLength = -1;
     for (var packageEntry in packageMap.entries) {
       String pkgName = packageEntry.key;
       Folder pkgFolder = packageEntry.value[0];
@@ -53,13 +55,16 @@
       if (path.length >= pkgFolderPath.length + pathContext.separator.length &&
           path.startsWith(pkgFolderPath) &&
           path.startsWith(pathContext.separator, pkgFolderPath.length)) {
-        String relPath = path.substring(pkgFolderPath.length + 1);
-        List<String> relPathComponents = pathContext.split(relPath);
-        String relUriPath = pathos.posix.joinAll(relPathComponents);
-        return uriCache.parse('$_packageScheme:$pkgName/$relUriPath');
+        if (pkgFolderPath.length > bestLength) {
+          String relPath = path.substring(pkgFolderPath.length + 1);
+          List<String> relPathComponents = pathContext.split(relPath);
+          String relUriPath = pathos.posix.joinAll(relPathComponents);
+          bestUri = uriCache.parse('$_packageScheme:$pkgName/$relUriPath');
+          bestLength = pkgFolderPath.length;
+        }
       }
     }
-    return null;
+    return bestUri;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index f629d13..ebc91d0 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -47,16 +47,32 @@
   IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
 
   /// Left: any element.
+  ///   Is invoked by a dot shorthand constructor invocation.
+  /// Right: location.
+  IS_INVOKED_BY_DOT_SHORTHANDS_CONSTRUCTOR,
+
+  /// Left: any element.
   ///   Is referenced (and not invoked, read/written) at.
   /// Right: location.
   IS_REFERENCED_BY,
 
+  /// Left: a pattern field.
+  ///  Is referenced at.
+  /// Right: location.
+  IS_REFERENCED_BY_PATTERN_FIELD,
+
   /// Left: a constructor.
   ///   Is referenced by a constructor tear-off at, which is special because
   ///   the name of the constructor is required (`new` for unnamed).
   /// Right: location.
   IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF,
 
+  /// Left: a constructor.
+  ///   Is referenced by a constructor tear-off at, which is special because
+  ///   the name of the constructor is required (`new` for unnamed).
+  /// Right: location.
+  IS_REFERENCED_BY_DOT_SHORTHAND_CONSTRUCTOR_TEAR_OFF,
+
   /// Left: unresolved member name.
   ///   Is read at.
   /// Right: location.
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index fced039..e96f00a 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -357,16 +357,32 @@
   IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
 
   /// Left: any element.
+  ///   Is invoked by a dot shorthand constructor invocation.
+  /// Right: location.
+  IS_INVOKED_BY_DOT_SHORTHANDS_CONSTRUCTOR,
+
+  /// Left: any element.
   ///   Is referenced (and not invoked, read/written) at.
   /// Right: location.
   IS_REFERENCED_BY,
 
+  /// Left: a pattern field.
+  ///  Is referenced at.
+  /// Right: location.
+  IS_REFERENCED_BY_PATTERN_FIELD,
+
   /// Left: a constructor.
   ///   Is referenced by a constructor tear-off at, which is special because
   ///   the name of the constructor is required (`new` for unnamed).
   /// Right: location.
   IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF,
 
+  /// Left: a constructor.
+  ///   Is referenced by a constructor tear-off at, which is special because
+  ///   the name of the constructor is required (`new` for unnamed).
+  /// Right: location.
+  IS_REFERENCED_BY_DOT_SHORTHAND_CONSTRUCTOR_TEAR_OFF,
+
   /// Left: unresolved member name.
   ///   Is read at.
   /// Right: location.
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 9e72b6c..6549f37 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -707,6 +707,7 @@
       );
       element.linkFragments(fragments);
       element.readModifiers(_reader);
+      element.typeInferenceError = _readTopLevelInferenceError();
 
       element.deferReadResolution(
         _createDeferredReadResolutionCallback((reader) {
@@ -742,6 +743,9 @@
     });
   }
 
+  /// Read the resolution for a formal parameter list fragment for a
+  /// top-level function, method, constructor, getter, or setter
+  /// declaration.
   void _readFormalParameters2(
     LibraryFragmentImpl unitElement,
     ResolutionReader reader,
@@ -1050,6 +1054,8 @@
     return _reader.readOptionalObject(() => _readReference());
   }
 
+  /// Read the formal parameter list for a top-level function, method,
+  /// constructor, getter, or setter declaration.
   // TODO(scheglov): Deduplicate parameter reading implementation.
   List<FormalParameterFragmentImpl> _readParameters() {
     return _reader.readTypedList(() {
@@ -1063,10 +1069,12 @@
 
       FormalParameterFragmentImpl element;
       if (isInitializingFormal) {
+        var privateName = _reader.readOptionalStringReference();
         element = FieldFormalParameterFragmentImpl(
           name: fragmentName,
           nameOffset: null,
           parameterKind: kind,
+          privateName: privateName,
         );
       } else if (isSuperFormal) {
         element = SuperFormalParameterFragmentImpl(
@@ -1253,6 +1261,7 @@
       var element = TopLevelVariableElementImpl(reference, fragments.first);
       element.linkFragments(fragments);
       element.readModifiers(_reader);
+      element.typeInferenceError = _readTopLevelInferenceError();
 
       element.deferReadResolution(
         _createDeferredReadResolutionCallback((reader) {
@@ -1778,6 +1787,8 @@
     return type;
   }
 
+  /// Read the formal parameter list for a function type annotation or type
+  /// alias of a function type.
   List<FormalParameterFragmentImpl> _readFormalParameters(
     LibraryFragmentImpl? unitElement,
   ) {
@@ -1791,10 +1802,12 @@
       var name = _readFragmentName();
       FormalParameterFragmentImpl element;
       if (isInitializingFormal) {
+        var privateName = _reader.readOptionalStringReference();
         element = FieldFormalParameterFragmentImpl(
           name: name,
           nameOffset: null,
           parameterKind: kind,
+          privateName: privateName,
         );
         element.element.type = type;
       } else {
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 871a55e..9dfaf69 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -411,6 +411,7 @@
       _writeReference(element.reference);
       _writeFragments(element.fragments);
       element.writeModifiers(_sink);
+      _sink._writeTopLevelInferenceError(element.typeInferenceError);
 
       _writeElementResolution(() {
         _resolutionSink.writeType(element.type);
@@ -625,6 +626,8 @@
     _sink.writeOptionalObject(reference, _writeReference);
   }
 
+  /// Write a formal parameter fragment in the signature of a top-level
+  /// function, constructor, method, getter, or setter declaration.
   // TODO(scheglov): Deduplicate parameter writing implementation.
   void _writeParameterElement(FormalParameterFragmentImpl element) {
     _writeFragmentId(element);
@@ -632,6 +635,11 @@
     _sink.writeBool(element.isInitializingFormal);
     _sink.writeBool(element.isSuperFormal);
     _sink._writeFormalParameterKind(element);
+
+    if (element is FieldFormalParameterFragmentImpl) {
+      _sink.writeOptionalStringReference(element.privateName);
+    }
+
     element.writeModifiers(_sink);
 
     _resolutionSink._writeMetadata(element.metadata);
@@ -739,6 +747,7 @@
       _writeReference(element.reference);
       _writeFragments(element.fragments);
       element.writeModifiers(_sink);
+      _sink._writeTopLevelInferenceError(element.typeInferenceError);
       _writeElementResolution(() {
         _resolutionSink.writeType(element.type);
       });
@@ -1017,6 +1026,7 @@
     writeOptionalStringReference(element.name);
   }
 
+  /// Write the formal parameter list for a function type alias.
   void _writeFormalParameters(
     List<FormalParameterFragmentImpl> parameters, {
     required bool withAnnotations,
@@ -1028,6 +1038,9 @@
       _writeTypeParameters(parameter.typeParameters, () {
         writeType(parameter.element.type);
         _writeFragmentName(parameter);
+        if (parameter case FieldFormalParameterElementImpl fieldFormal) {
+          writeOptionalStringReference(fieldFormal.privateName);
+        }
         _writeFormalParameters(
           parameter.formalParameters,
           withAnnotations: withAnnotations,
@@ -1039,6 +1052,7 @@
     });
   }
 
+  /// Write the formal parameter list for a function type annotation.
   void _writeFormalParameters2(
     List<InternalFormalParameterElement> parameters, {
     required bool withAnnotations,
@@ -1050,6 +1064,10 @@
       _writeTypeParameters2(parameter.typeParameters, () {
         writeType(parameter.type);
         _writeElementName(parameter);
+        if (parameter.baseElement
+            case FieldFormalParameterElementImpl fieldFormal) {
+          writeOptionalStringReference(fieldFormal.privateName);
+        }
         _writeFormalParameters2(
           parameter.formalParameters.cast(),
           withAnnotations: withAnnotations,
diff --git a/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart b/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
index 8756c0b..9bfb7a9 100644
--- a/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
@@ -36,7 +36,7 @@
     InterfaceElementImpl interfaceElement,
     ConstructorElementImpl element,
   ) {
-    if (element.isSynthetic) return;
+    if (!element.isOriginDeclaration) return;
 
     for (var fragment in element.fragments) {
       var node = _linker.getLinkingNode2(fragment);
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index 5045b06..5f9a846 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/types/shared_type.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';
@@ -34,9 +33,7 @@
     for (var node in nodes) {
       if (node is ClassDeclarationImpl) {
         var element = node.declaredFragment!.element;
-        var typeParameters = useDeclaringConstructorsAst
-            ? node.namePart.typeParameters
-            : node.typeParameters;
+        var typeParameters = node.namePart.typeParameters;
         _breakSelfCycles(typeParameters);
         _breakRawTypeCycles(element, typeParameters);
         _computeBounds(element, typeParameters);
@@ -47,9 +44,7 @@
         _computeBounds(element, node.typeParameters);
       } else if (node is EnumDeclarationImpl) {
         var element = node.declaredFragment!.element;
-        var typeParameters = useDeclaringConstructorsAst
-            ? node.namePart.typeParameters
-            : node.typeParameters;
+        var typeParameters = node.namePart.typeParameters;
         _breakSelfCycles(typeParameters);
         _breakRawTypeCycles(element, typeParameters);
         _computeBounds(element, typeParameters);
@@ -60,9 +55,7 @@
         _computeBounds(element, node.typeParameters);
       } else if (node is ExtensionTypeDeclarationImpl) {
         var element = node.declaredFragment!.element;
-        var typeParameters = useDeclaringConstructorsAst
-            ? node.namePart.typeParameters
-            : node.typeParameters;
+        var typeParameters = node.primaryConstructor.typeParameters;
         _breakSelfCycles(typeParameters);
         _breakRawTypeCycles(element, typeParameters);
         _computeBounds(element, typeParameters);
@@ -100,27 +93,15 @@
     }
     for (var node in nodes) {
       if (node is ClassDeclarationImpl) {
-        _build(
-          useDeclaringConstructorsAst
-              ? node.namePart.typeParameters
-              : node.typeParameters,
-        );
+        _build(node.namePart.typeParameters);
       } else if (node is ClassTypeAliasImpl) {
         _build(node.typeParameters);
       } else if (node is EnumDeclarationImpl) {
-        _build(
-          useDeclaringConstructorsAst
-              ? node.namePart.typeParameters
-              : node.typeParameters,
-        );
+        _build(node.namePart.typeParameters);
       } else if (node is ExtensionDeclarationImpl) {
         _build(node.typeParameters);
       } else if (node is ExtensionTypeDeclarationImpl) {
-        _build(
-          useDeclaringConstructorsAst
-              ? node.namePart.typeParameters
-              : node.typeParameters,
-        );
+        _build(node.primaryConstructor.typeParameters);
       } else if (node is FunctionTypeAliasImpl) {
         _build(node.typeParameters);
       } else if (node is GenericTypeAliasImpl) {
diff --git a/pkg/analyzer/lib/src/summary2/detach_nodes.dart b/pkg/analyzer/lib/src/summary2/detach_nodes.dart
index 8422c0c..bf3dedd 100644
--- a/pkg/analyzer/lib/src/summary2/detach_nodes.dart
+++ b/pkg/analyzer/lib/src/summary2/detach_nodes.dart
@@ -87,12 +87,10 @@
   }
 
   @override
-  void visitPropertyInducingElement(PropertyInducingElement element) {
-    for (var fragment in element.fragments) {
-      if (fragment is PropertyInducingFragmentImpl) {
-        fragment.typeInference = null;
-      }
-    }
+  void visitPropertyInducingElement(
+    covariant PropertyInducingElementImpl element,
+  ) {
+    element.typeInference = null;
     _detachConstVariable(element);
     super.visitPropertyInducingElement(element);
   }
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index b5f11b3..9116a38 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
+import 'package:_fe_analyzer_shared/src/scanner/token_impl.dart';
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -383,6 +384,7 @@
 
     {
       var getterFragment = GetterFragmentImpl(name: fieldFragment.name)
+        ..isOriginVariable = true
         ..isSynthetic = true
         ..isAbstract = fieldFragment.isAbstract
         ..isStatic = fieldFragment.isStatic;
@@ -400,6 +402,7 @@
 
     if (fieldFragment.hasSetter) {
       var setterFragment = SetterFragmentImpl(name: fieldFragment.name)
+        ..isOriginVariable = true
         ..isSynthetic = true
         ..isAbstract = fieldFragment.isAbstract
         ..isStatic = fieldFragment.isStatic;
@@ -472,6 +475,7 @@
 
     if (lastFieldElement == null) {
       var fieldFragment = FieldFragmentImpl(name: getterFragment.name)
+        ..isOriginGetterSetter = true
         ..isSynthetic = true
         ..isStatic = getterFragment.isStatic;
       instanceFragment.addField(fieldFragment);
@@ -571,6 +575,7 @@
 
     if (lastFieldElement == null) {
       var fieldFragment = FieldFragmentImpl(name: setterFragment.name)
+        ..isOriginGetterSetter = true
         ..isSynthetic = true
         ..isStatic = setterFragment.isStatic;
       instanceFragment.addField(fieldFragment);
@@ -688,9 +693,10 @@
     }
 
     if (lastVariableElement == null) {
-      var variableFragment = TopLevelVariableFragmentImpl(
-        name: getterFragment.name,
-      )..isSynthetic = true;
+      var variableFragment =
+          TopLevelVariableFragmentImpl(name: getterFragment.name)
+            ..isOriginGetterSetter = true
+            ..isSynthetic = true;
       libraryFragment.addTopLevelVariable(variableFragment);
 
       lastVariableElement = TopLevelVariableElementImpl(
@@ -738,9 +744,10 @@
     }
 
     if (lastVariableElement == null) {
-      var variableFragment = TopLevelVariableFragmentImpl(
-        name: setterFragment.name,
-      )..isSynthetic = true;
+      var variableFragment =
+          TopLevelVariableFragmentImpl(name: setterFragment.name)
+            ..isOriginGetterSetter = true
+            ..isSynthetic = true;
       libraryFragment.addTopLevelVariable(variableFragment);
 
       lastVariableElement = TopLevelVariableElementImpl(
@@ -777,6 +784,7 @@
 
     {
       var getterFragment = GetterFragmentImpl(name: variableFragment.name)
+        ..isOriginVariable = true
         ..isSynthetic = true
         ..isStatic = true;
       libraryFragment.addGetter(getterFragment);
@@ -794,6 +802,7 @@
 
     if (variableFragment.hasSetter) {
       var setterFragment = SetterFragmentImpl(name: variableFragment.name)
+        ..isOriginVariable = true
         ..isSynthetic = true
         ..isStatic = true;
       libraryFragment.addSetter(setterFragment);
@@ -850,6 +859,7 @@
             name: previousParameter.name,
             nameOffset: null,
             parameterKind: previousParameter.parameterKind,
+            privateName: previousParameter.privateName,
           )..isSynthetic = true;
         case SuperFormalParameterFragmentImpl():
           return SuperFormalParameterFragmentImpl(
@@ -1040,10 +1050,7 @@
 
   @override
   void visitClassDeclaration(covariant ClassDeclarationImpl node) {
-    var nameToken = useDeclaringConstructorsAst
-        ? node.namePart.typeName
-        : node.name;
-
+    var nameToken = node.namePart.typeName;
     var fragmentName = _getFragmentName(nameToken);
     var fragment = ClassFragmentImpl(name: fragmentName);
     fragment.isAbstract = node.abstractKeyword != null;
@@ -1066,13 +1073,8 @@
 
     var holder = _EnclosingContext(fragment: fragment);
     _withEnclosing(holder, () {
-      if (useDeclaringConstructorsAst) {
-        node.namePart.accept(this);
-        node.body.accept(this);
-      } else {
-        node.typeParameters?.accept(this);
-        node.members.accept(this);
-      }
+      node.namePart.accept(this);
+      node.body.accept(this);
     });
     fragment.typeParameters = holder.typeParameters;
 
@@ -1120,25 +1122,15 @@
 
   @override
   void visitConstructorDeclaration(covariant ConstructorDeclarationImpl node) {
-    var name = node.name?.lexeme ?? '';
-    if (name == 'new') {
-      // A constructor declared as `C.new` is unnamed, and is modeled as such.
-      name = '';
-    }
-    String fragmentName;
-    if ((node.period, node.name) case (var _?, var name?)) {
-      fragmentName = _getFragmentName(name) ?? 'new';
-    } else {
-      fragmentName = 'new';
-    }
-
+    var fragmentName = _getFragmentName(node.name) ?? 'new';
     var fragment = ConstructorFragmentImpl(name: fragmentName);
+    fragment.isOriginDeclaration = true;
     fragment.isAugmentation = node.augmentKeyword != null;
     fragment.isConst = node.constKeyword != null;
     fragment.isExternal = node.externalKeyword != null;
     fragment.isFactory = node.factoryKeyword != null;
     fragment.metadata = _buildMetadata(node.metadata);
-    fragment.typeName = node.returnType.name;
+    fragment.typeName = node.typeName?.name;
 
     if (fragment.isConst || fragment.isFactory) {
       fragment.constantInitializers = node.initializers;
@@ -1165,9 +1157,7 @@
 
   @override
   void visitEnumDeclaration(covariant EnumDeclarationImpl node) {
-    var nameToken = useDeclaringConstructorsAst
-        ? node.namePart.typeName
-        : node.name;
+    var nameToken = node.namePart.typeName;
     var fragmentName = _getFragmentName(nameToken);
 
     var fragment = EnumFragmentImpl(name: fragmentName);
@@ -1185,9 +1175,7 @@
     var holder = _EnclosingContext(fragment: fragment);
     _withEnclosing(holder, () {
       // Build fields for all enum constants.
-      var constants = useDeclaringConstructorsAst
-          ? node.body.constants
-          : node.constants;
+      var constants = node.body.constants;
       var valuesElements = <SimpleIdentifierImpl>[];
       var valuesNames = <String>{};
       for (var i = 0; i < constants.length; ++i) {
@@ -1200,6 +1188,7 @@
           ..isAugmentation = constant.augmentKeyword != null
           ..isConst = true
           ..isEnumConstant = true
+          ..isOriginDeclaration = true
           ..isStatic = true;
         field.metadata = _buildMetadata(constant.metadata);
 
@@ -1267,6 +1256,7 @@
       var valuesField = FieldFragmentImpl(name: 'values')
         ..isConst = true
         ..isStatic = true
+        ..isOriginEnumValues = true
         ..isSynthetic = true;
       var initializer = ListLiteralImpl(
         constKeyword: null,
@@ -1323,13 +1313,8 @@
         valuesInitializer: initializer,
       );
 
-      if (useDeclaringConstructorsAst) {
-        node.namePart.typeParameters?.accept(this);
-        node.body.members.accept(this);
-      } else {
-        node.typeParameters?.accept(this);
-        node.members.accept(this);
-      }
+      node.namePart.accept(this);
+      node.body.members.accept(this);
     });
 
     fragment.typeParameters = holder.typeParameters;
@@ -1365,11 +1350,7 @@
     var holder = _EnclosingContext(fragment: fragment);
     _withEnclosing(holder, () {
       node.typeParameters?.accept(this);
-      if (useDeclaringConstructorsAst) {
-        node.body.members.accept(this);
-      } else {
-        node.members.accept(this);
-      }
+      node.body.members.accept(this);
     });
     fragment.typeParameters = holder.typeParameters;
 
@@ -1385,9 +1366,7 @@
   void visitExtensionTypeDeclaration(
     covariant ExtensionTypeDeclarationImpl node,
   ) {
-    var nameToken = useDeclaringConstructorsAst
-        ? node.namePart.typeName
-        : node.name;
+    var nameToken = node.primaryConstructor.typeName;
     var fragmentName = _getFragmentName(nameToken);
 
     var fragment = ExtensionTypeFragmentImpl(name: fragmentName);
@@ -1401,24 +1380,12 @@
 
     var holder = _EnclosingContext(fragment: fragment);
     _withEnclosing(holder, () {
-      if (useDeclaringConstructorsAst) {
-        node.namePart.typeParameters?.accept(this);
-        _buildExtensionTypePrimaryConstructor(
-          // TODO(scheglov): support for absence of primary constructor
-          primaryConstructor:
-              node.namePart as PrimaryConstructorDeclarationImpl,
-          extensionFragment: fragment,
-        );
-        node.body.accept(this);
-      } else {
-        node.typeParameters?.accept(this);
-        _builtRepresentationDeclaration(
-          extensionNode: node,
-          representation: node.representation,
-          extensionFragment: fragment,
-        );
-        node.members.accept(this);
-      }
+      node.primaryConstructor.typeParameters?.accept(this);
+      _buildExtensionTypePrimaryConstructor(
+        primaryConstructor: node.primaryConstructor,
+        extensionFragment: fragment,
+      );
+      node.body.accept(this);
     });
 
     fragment.typeParameters = holder.typeParameters;
@@ -1441,6 +1408,7 @@
       fragment.isExternal = node.externalKeyword != null;
       fragment.isFinal = node.fields.isFinal;
       fragment.isLate = node.fields.isLate;
+      fragment.isOriginDeclaration = true;
       fragment.isStatic = node.isStatic;
       fragment.metadata = metadata;
 
@@ -1470,10 +1438,26 @@
     var nameToken = node.name;
     var name2 = _getFragmentName(nameToken);
 
+    // If this is a private named parameter, then use the corresponding public
+    // name as the element name and store the original private name separately.
+    String? privateName;
+    if (name2 != null &&
+        node.isNamed &&
+        _libraryBuilder.element.featureSet.isEnabled(
+          Feature.private_named_parameters,
+        )) {
+      var publicName = correspondingPublicName(name2);
+      if (publicName != null) {
+        privateName = name2;
+        name2 = publicName;
+      }
+    }
+
     var fragment = FieldFormalParameterFragmentImpl(
       name: name2,
       nameOffset: null,
       parameterKind: node.kind,
+      privateName: privateName,
     );
     _linker.elementNodes[fragment] = node;
     _enclosingContext.addParameter(fragment);
@@ -1523,6 +1507,7 @@
     if (node.isGetter) {
       var getterFragment = GetterFragmentImpl(name: name2);
       getterFragment.isAugmentation = node.augmentKeyword != null;
+      getterFragment.isOriginDeclaration = true;
       getterFragment.isStatic = true;
 
       getterFragment.enclosingFragment = _unitElement;
@@ -1532,6 +1517,7 @@
     } else if (node.isSetter) {
       var setterFragment = SetterFragmentImpl(name: name2);
       setterFragment.isAugmentation = node.augmentKeyword != null;
+      setterFragment.isOriginDeclaration = true;
       setterFragment.isStatic = true;
 
       setterFragment.enclosingFragment = _unitElement;
@@ -1722,6 +1708,7 @@
       var fragment = GetterFragmentImpl(name: _getFragmentName(nameToken));
       fragment.isAbstract = node.isAbstract;
       fragment.isAugmentation = node.augmentKeyword != null;
+      fragment.isOriginDeclaration = true;
       fragment.isStatic = node.isStatic;
       _addChildFragment(fragment);
       executableFragment = fragment;
@@ -1729,6 +1716,7 @@
       var fragment = SetterFragmentImpl(name: _getFragmentName(nameToken));
       fragment.isAbstract = node.isAbstract;
       fragment.isAugmentation = node.augmentKeyword != null;
+      fragment.isOriginDeclaration = true;
       fragment.isStatic = node.isStatic;
       _addChildFragment(fragment);
       executableFragment = fragment;
@@ -1778,11 +1766,7 @@
     var holder = _EnclosingContext(fragment: fragment);
     _withEnclosing(holder, () {
       node.typeParameters?.accept(this);
-      if (useDeclaringConstructorsAst) {
-        node.body.members.accept(this);
-      } else {
-        node.members.accept(this);
-      }
+      node.body.members.accept(this);
     });
     fragment.typeParameters = holder.typeParameters;
 
@@ -1828,7 +1812,11 @@
     }
 
     var fragment = ConstructorFragmentImpl(name: fragmentName);
-    fragment.isConst = node.constKeyword != null;
+    fragment.isOriginDeclaration = true;
+    fragment.isConst =
+        node.constKeyword != null || node.parent is EnumDeclarationImpl;
+    fragment.isDeclaring = true;
+    fragment.isPrimary = true;
     fragment.typeName = node.typeName.lexeme;
     _linker.elementNodes[fragment] = node;
 
@@ -1840,7 +1828,9 @@
         var name = _getFragmentName(formalParameter.name);
         var fieldFragment = FieldFragmentImpl(name: name);
         fieldFragment.isFinal = formalParameter.isFinal;
+        fieldFragment.isOriginDeclaringFormalParameter = true;
         fieldFragment.isSynthetic = true;
+        fieldFragment.hasImplicitType = !formalParameter.isExplicitlyTyped;
         _linker.elementNodes[fieldFragment] = formalParameter;
         _addChildFragment(fieldFragment);
 
@@ -1848,7 +1838,11 @@
           name: name,
           nameOffset: null,
           parameterKind: formalParameter.kind,
+          // TODO(rnystrom): Support private named parameters for declaring
+          // formals.
+          privateName: null,
         );
+        formalFragment.isDeclaring = true;
 
         _linker.declaringFormalParameters[formalParameter] =
             DeclaringFormalParameterInfo(
@@ -1984,6 +1978,7 @@
       fragment.isExternal = node.externalKeyword != null;
       fragment.isFinal = node.variables.isFinal;
       fragment.isLate = node.variables.isLate;
+      fragment.isOriginDeclaration = true;
       fragment.metadata = metadata;
       if (fragment.isConst) {
         fragment.constantInitializer = variable.initializer;
@@ -2071,17 +2066,24 @@
     );
     fieldFragment.isAugmentation = extensionFragment.isAugmentation;
     fieldFragment.isFinal = true;
+    fieldFragment.isOriginDeclaringFormalParameter = true;
     fieldFragment.metadata = _buildMetadata(formalParameter.metadata);
     _linker.elementNodes[fieldFragment] = primaryConstructor;
 
     _addChildFragment(fieldFragment);
 
-    var formalParameterFragment = FieldFormalParameterFragmentImpl(
-      name: _getFragmentName(fieldNameToken),
-      nameOffset: null,
-      parameterKind: ParameterKind.REQUIRED,
-    )..hasImplicitType = true;
-
+    var formalParameterFragment =
+        FieldFormalParameterFragmentImpl(
+            name: _getFragmentName(fieldNameToken),
+            nameOffset: null,
+            parameterKind: ParameterKind.REQUIRED,
+            // An extension type's representation object parameter is never
+            // named, so can't be a private named parameter.
+            privateName: null,
+          )
+          ..isDeclaring = true
+          ..hasImplicitType = true;
+    formalParameterFragment.metadata = _buildMetadata(formalParameter.metadata);
     formalParameter.declaredFragment = formalParameterFragment;
 
     {
@@ -2089,8 +2091,11 @@
           ConstructorFragmentImpl(
               name: primaryConstructor.constructorName?.name.lexeme ?? 'new',
             )
+            ..isOriginDeclaration = true
             ..isAugmentation = extensionFragment.isAugmentation
             ..isConst = primaryConstructor.constKeyword != null
+            ..isDeclaring = true
+            ..isPrimary = true
             ..formalParameters = [formalParameterFragment];
       constructorFragment.typeName = extensionFragment.name;
       _linker.elementNodes[constructorFragment] = primaryConstructor;
@@ -2113,50 +2118,6 @@
     );
   }
 
-  void _builtRepresentationDeclaration({
-    required ExtensionTypeFragmentImpl extensionFragment,
-    required ExtensionTypeDeclarationImpl extensionNode,
-    required RepresentationDeclarationImpl representation,
-  }) {
-    var fieldNameToken = representation.fieldName;
-
-    var fieldFragment = FieldFragmentImpl(
-      name: _getFragmentName(fieldNameToken),
-    );
-    fieldFragment.isAugmentation = extensionFragment.isAugmentation;
-    fieldFragment.isFinal = true;
-    fieldFragment.metadata = _buildMetadata(representation.fieldMetadata);
-
-    representation.fieldFragment = fieldFragment;
-    _linker.elementNodes[fieldFragment] = representation;
-
-    _addChildFragment(fieldFragment);
-
-    var formalParameterFragment = FieldFormalParameterFragmentImpl(
-      name: _getFragmentName(fieldNameToken),
-      nameOffset: null,
-      parameterKind: ParameterKind.REQUIRED,
-    )..hasImplicitType = true;
-
-    {
-      var constructorFragment =
-          ConstructorFragmentImpl(
-              name: representation.constructorName?.name.lexeme ?? 'new',
-            )
-            ..isAugmentation = extensionFragment.isAugmentation
-            ..isConst = extensionNode.constKeyword != null
-            ..formalParameters = [formalParameterFragment];
-      constructorFragment.typeName = extensionFragment.name;
-
-      representation.constructorFragment = constructorFragment;
-      _linker.elementNodes[constructorFragment] = representation;
-
-      _addChildFragment(constructorFragment);
-    }
-
-    representation.fieldType.accept(this);
-  }
-
   String? _getFragmentName(Token? nameToken) {
     if (nameToken == null || nameToken.isSynthetic) {
       return null;
diff --git a/pkg/analyzer/lib/src/summary2/extension_type.dart b/pkg/analyzer/lib/src/summary2/extension_type.dart
index 1cc3fa8..d739c62 100644
--- a/pkg/analyzer/lib/src/summary2/extension_type.dart
+++ b/pkg/analyzer/lib/src/summary2/extension_type.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/util/dependency_walker.dart' as graph;
-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/ast/extensions.dart';
@@ -61,14 +60,7 @@
   _Node(this.walker, this.node, this.element);
 
   TypeImpl get _fieldType {
-    if (useDeclaringConstructorsAst) {
-      // TODO(scheglov): support for absence of primary constructor
-      var constructor = node.namePart as PrimaryConstructorDeclarationImpl;
-      var formal = constructor.formalParameters.parameters.first;
-      return (formal as SimpleFormalParameterImpl).type!.typeOrThrow;
-    } else {
-      return node.representation.fieldType.typeOrThrow;
-    }
+    return node.fieldType.typeOrThrow;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 132bca7..874647a 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -4,7 +4,6 @@
 
 import 'dart:typed_data';
 
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -261,6 +260,8 @@
   ) {
     forCorrespondingPairs(elementList, infoList, (element, info) {
       element.setCodeRange(info.codeOffset, info.codeLength);
+      element.newKeywordOffset = info.newKeywordOffset;
+      element.factoryKeywordOffset = info.factoryKeywordOffset;
       element.typeNameOffset = info.typeNameOffset;
       element.periodOffset = info.periodOffset;
       element.firstTokenOffset = info.firstTokenOffset;
@@ -361,33 +362,9 @@
     });
 
     DeferredResolutionReadingHelper.withoutLoadingResolution(() {
-      if (!useDeclaringConstructorsAst) {
-        var primaryConstructor = element.constructors.first;
-        primaryConstructor.setCodeRange(infoRep.codeOffset, infoRep.codeLength);
-        primaryConstructor.typeNameOffset = info.nameOffset;
-        primaryConstructor.periodOffset = infoRep.constructorPeriodOffset;
-        primaryConstructor.firstTokenOffset = infoRep.firstTokenOffset;
-        primaryConstructor.nameOffset = infoRep.constructorNameOffset;
-        primaryConstructor.nameEnd = infoRep.constructorNameEnd;
-
-        DeferredResolutionReadingHelper.withoutLoadingResolution(() {
-          var representation = primaryConstructor.formalParameters.first;
-          representation.firstTokenOffset = infoRep.fieldFirstTokenOffset;
-          representation.nameOffset = infoRep.fieldNameOffset;
-          representation.setCodeRange(infoRep.codeOffset, infoRep.codeLength);
-        });
-      }
-
       var restFields = element.fields.skip(1).toList();
       _applyToFields(restFields, info.fields);
-
-      if (useDeclaringConstructorsAst) {
-        _applyToConstructors(element.constructors, info.constructors);
-      } else {
-        var restConstructors = element.constructors.skip(1).toList();
-        _applyToConstructors(restConstructors, info.constructors);
-      }
-
+      _applyToConstructors(element.constructors, info.constructors);
       _applyToAccessors(element.getters, info.getters);
       _applyToAccessors(element.setters, info.setters);
       _applyToMethods(element.methods, info.methods);
@@ -676,26 +653,15 @@
   }
 
   _InfoClassDeclaration _buildClass(ClassDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      return _InfoClassDeclaration(
-        data: _buildInterfaceData(
-          node,
-          name: node.namePart.typeName,
-          typeParameters: node.namePart.typeParameters,
-          primaryConstructor: node.namePart.ifTypeOrNull(),
-          members: node.body.ifTypeOrNull<BlockClassBody>()?.members ?? [],
-        ),
-      );
-    } else {
-      return _InfoClassDeclaration(
-        data: _buildInterfaceData(
-          node,
-          name: node.name,
-          typeParameters: node.typeParameters,
-          members: node.members,
-        ),
-      );
-    }
+    return _InfoClassDeclaration(
+      data: _buildInterfaceData(
+        node,
+        name: node.namePart.typeName,
+        typeParameters: node.namePart.typeParameters,
+        primaryConstructor: node.namePart.ifTypeOrNull(),
+        members: node.body.ifTypeOrNull<BlockClassBody>()?.members ?? [],
+      ),
+    );
   }
 
   List<_InfoClassDeclaration> _buildClasses(CompilationUnit unit) {
@@ -818,47 +784,31 @@
         formalParameters: node.parameters,
         constructorInitializers: node.initializers,
       ),
-      typeNameOffset: node.returnType.offset,
+      newKeywordOffset: node.newKeyword?.offset,
+      factoryKeywordOffset: node.factoryKeyword?.offset,
+      typeNameOffset: node.typeName?.offset,
       periodOffset: node.period?.offset,
-      nameEnd: (node.name ?? node.returnType).end,
+      nameEnd: (node.name ?? node.typeName)?.end,
     );
   }
 
   _InfoEnumDeclaration _buildEnum(EnumDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      return _InfoEnumDeclaration(
-        data: _buildInterfaceData(
-          node,
-          name: node.namePart.typeName,
-          typeParameters: node.namePart.typeParameters,
-          primaryConstructor: node.namePart.ifTypeOrNull(),
-          members: node.body.members,
-          fields: [
-            ...node.body.constants.map(_buildEnumConstant),
-            ...node.body.members
-                .whereType<FieldDeclaration>()
-                .expand((node) => node.fields.variables)
-                .map((node) => _buildField(node)),
-          ],
-        ),
-      );
-    } else {
-      return _InfoEnumDeclaration(
-        data: _buildInterfaceData(
-          node,
-          name: node.name,
-          typeParameters: node.typeParameters,
-          members: node.members,
-          fields: [
-            ...node.constants.map(_buildEnumConstant),
-            ...node.members
-                .whereType<FieldDeclaration>()
-                .expand((node) => node.fields.variables)
-                .map((node) => _buildField(node)),
-          ],
-        ),
-      );
-    }
+    return _InfoEnumDeclaration(
+      data: _buildInterfaceData(
+        node,
+        name: node.namePart.typeName,
+        typeParameters: node.namePart.typeParameters,
+        primaryConstructor: node.namePart.ifTypeOrNull(),
+        members: node.body.members,
+        fields: [
+          ...node.body.constants.map(_buildEnumConstant),
+          ...node.body.members
+              .whereType<FieldDeclaration>()
+              .expand((node) => node.fields.variables)
+              .map((node) => _buildField(node)),
+        ],
+      ),
+    );
   }
 
   _InfoFieldDeclaration _buildEnumConstant(EnumConstantDeclaration node) {
@@ -903,7 +853,7 @@
         node,
         name: node.name,
         typeParameters: node.typeParameters,
-        members: useDeclaringConstructorsAst ? node.body.members : node.members,
+        members: node.body.members,
       ),
     );
   }
@@ -918,31 +868,18 @@
   _InfoExtensionTypeDeclaration _buildExtensionType(
     ExtensionTypeDeclaration node,
   ) {
-    if (useDeclaringConstructorsAst) {
-      return _InfoExtensionTypeDeclaration(
-        data: _buildInterfaceData(
-          node,
-          name: node.namePart.typeName,
-          typeParameters: node.namePart.typeParameters,
-          primaryConstructor: node.namePart.ifTypeOrNull(),
-          members: node.body.ifTypeOrNull<BlockClassBody>()?.members ?? [],
-        ),
-        // TODO(scheglov): support for absence of primary constructor
-        representation: _buildExtensionTypeRepresentationFromPrimaryConstructor(
-          node.namePart as PrimaryConstructorDeclaration,
-        ),
-      );
-    } else {
-      return _InfoExtensionTypeDeclaration(
-        data: _buildInterfaceData(
-          node,
-          name: node.name,
-          typeParameters: node.typeParameters,
-          members: node.members,
-        ),
-        representation: _buildRepresentation(node, node.representation),
-      );
-    }
+    return _InfoExtensionTypeDeclaration(
+      data: _buildInterfaceData(
+        node,
+        name: node.primaryConstructor.typeName,
+        typeParameters: node.primaryConstructor.typeParameters,
+        primaryConstructor: node.primaryConstructor.ifTypeOrNull(),
+        members: node.body.ifTypeOrNull<BlockClassBody>()?.members ?? [],
+      ),
+      representation: _buildExtensionTypeRepresentationFromPrimaryConstructor(
+        node.primaryConstructor,
+      ),
+    );
   }
 
   _InfoExtensionTypeRepresentation
@@ -1218,7 +1155,7 @@
         node,
         name: node.name,
         typeParameters: node.typeParameters,
-        members: useDeclaringConstructorsAst ? node.body.members : node.members,
+        members: node.body.members,
       ),
     );
   }
@@ -1252,34 +1189,14 @@
       constantOffsets: _buildConstantOffsets(
         formalParameters: node.formalParameters,
       ),
+      newKeywordOffset: null,
+      factoryKeywordOffset: null,
       typeNameOffset: node.typeName.offset,
       periodOffset: node.constructorName?.period.offset,
       nameEnd: (node.constructorName?.name ?? node.typeName).end,
     );
   }
 
-  _InfoExtensionTypeRepresentation _buildRepresentation(
-    ExtensionTypeDeclaration extension,
-    RepresentationDeclaration node,
-  ) {
-    var constructorName = node.constructorName;
-    var firstTokenOffset =
-        extension.constKeyword?.offset ?? extension.name.offset;
-    var endOffset = node.end;
-    return _InfoExtensionTypeRepresentation(
-      firstTokenOffset: firstTokenOffset,
-      codeOffset: firstTokenOffset,
-      codeLength: endOffset - firstTokenOffset,
-      constructorPeriodOffset: constructorName?.period.offset,
-      constructorNameOffset: constructorName?.name.offsetIfNotEmpty,
-      constructorNameEnd: node.leftParenthesis.offset,
-      fieldFirstTokenOffset:
-          node.fieldMetadata.firstOrNull?.offset ?? node.fieldType.offset,
-      fieldNameOffset: node.fieldName.offsetIfNotEmpty,
-      fieldConstantOffsets: _buildConstantOffsets(metadata: node.fieldMetadata),
-    );
-  }
-
   _InfoExecutableDeclaration _buildTopLevelFunction(FunctionDeclaration node) {
     return _InfoExecutableDeclaration(
       firstTokenOffset: node.offset,
@@ -1437,7 +1354,9 @@
 }
 
 class _InfoConstructorDeclaration extends _InfoExecutableDeclaration {
-  final int typeNameOffset;
+  final int? newKeywordOffset;
+  final int? factoryKeywordOffset;
+  final int? typeNameOffset;
   final int? periodOffset;
   final int? nameEnd;
 
@@ -1450,20 +1369,26 @@
     required super.typeParameters,
     required super.parameters,
     required super.constantOffsets,
+    required this.newKeywordOffset,
+    required this.factoryKeywordOffset,
     required this.typeNameOffset,
     required this.periodOffset,
     required this.nameEnd,
   });
 
   _InfoConstructorDeclaration.read(super.reader)
-    : typeNameOffset = reader.readUint30(),
+    : newKeywordOffset = reader.readOptionalUint30(),
+      factoryKeywordOffset = reader.readOptionalUint30(),
+      typeNameOffset = reader.readOptionalUint30(),
       periodOffset = reader.readOptionalUint30(),
       nameEnd = reader.readOptionalUint30(),
       super.read();
 
   @override
   void write(BinaryWriter writer) {
-    writer.writeUint30(typeNameOffset);
+    writer.writeOptionalUint30(newKeywordOffset);
+    writer.writeOptionalUint30(factoryKeywordOffset);
+    writer.writeOptionalUint30(typeNameOffset);
     writer.writeOptionalUint30(periodOffset);
     writer.writeOptionalUint30(nameEnd);
     super.write(writer);
diff --git a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
index 9ae9399..abfb212 100644
--- a/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
+++ b/pkg/analyzer/lib/src/summary2/instance_member_inferrer.dart
@@ -102,19 +102,22 @@
     String elementName;
 
     if (getter != null) {
-      if (getter.isSynthetic || getter.isStatic) {
+      if (getter.isOriginVariable || getter.isStatic) {
         return;
       }
       elementLibraryUri = getter.library.uri;
       elementName = getter.displayName;
     } else if (setter != null) {
-      if (setter.isSynthetic || setter.isStatic) {
+      if (setter.isOriginVariable || setter.isStatic) {
         return;
       }
       elementLibraryUri = setter.library.uri;
       elementName = setter.displayName;
     } else if (field != null) {
-      if (field.isSynthetic || field.isStatic) {
+      if (field.isStatic) {
+        return;
+      }
+      if (field.isOriginGetterSetter) {
         return;
       }
       elementLibraryUri = field.library.uri;
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index cad395d..59165b7 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -4,7 +4,6 @@
 
 import 'package:_fe_analyzer_shared/src/field_promotability.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/src/dart/analysis/file_state.dart' as file_state;
 import 'package:analyzer/src/dart/analysis/file_state.dart' hide DirectiveUri;
@@ -156,7 +155,8 @@
       if (classElement.isMixinApplication) continue;
       if (classElement.constructors.isNotEmpty) continue;
 
-      var fragment = ConstructorFragmentImpl(name: 'new')..isSynthetic = true;
+      var fragment = ConstructorFragmentImpl(name: 'new');
+      fragment.isOriginImplicitDefault = true;
       fragment.typeName = classElement.name;
       classElement.firstFragment.constructors = [fragment].toFixedList();
 
@@ -234,8 +234,8 @@
       if (hasConstructor(enumElement)) continue;
 
       var constructorFragment = ConstructorFragmentImpl(name: 'new')
+        ..isOriginImplicitDefault = true
         ..isConst = true
-        ..isSynthetic = true
         ..typeName = enumElement.name;
       enumElement.firstFragment.addConstructor(constructorFragment);
 
@@ -265,10 +265,7 @@
         if (declaration is ast.MixinDeclarationImpl) {
           var names = <String>{};
           var collector = MixinSuperInvokedNamesCollector(names);
-          for (var executable
-              in useDeclaringConstructorsAst
-                  ? declaration.body.members
-                  : declaration.members) {
+          for (var executable in declaration.body.members) {
             if (executable is ast.MethodDeclarationImpl) {
               executable.body.accept(collector);
             }
@@ -335,7 +332,9 @@
       for (var constructor in interfaceElement.constructors) {
         for (var parameter in constructor.formalParameters) {
           if (parameter is FieldFormalParameterElementImpl) {
-            parameter.field = interfaceElement.getField(parameter.name ?? '');
+            parameter.field = interfaceElement.getField(
+              parameter.privateName ?? parameter.name ?? '',
+            );
           }
         }
       }
@@ -924,7 +923,7 @@
     InterfaceElementImpl class_,
   ) {
     for (var field in class_.fields) {
-      if (field.isStatic || field.isSynthetic) {
+      if (field.isStatic || field.isOriginGetterSetter) {
         continue;
       }
 
@@ -945,7 +944,7 @@
     }
 
     for (var getter in class_.getters) {
-      if (getter.isStatic || getter.isSynthetic) {
+      if (getter.isStatic || getter.isOriginVariable) {
         continue;
       }
 
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 6c63ab7..2647463 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -304,12 +304,18 @@
         ...element.mixins,
       ].nonNulls.any((type) => computeFor(type.element));
 
-      hasNonFinalField |= element.fields.any((field) {
-        return !field.isFinal &&
-            !field.isConst &&
-            !field.isStatic &&
-            !field.isSynthetic;
-      });
+      hasNonFinalField |= !element.fields
+          .where((field) => field.isInstanceField)
+          .every((field) {
+            // If has storage...
+            if (field.isOriginDeclaration ||
+                field.isOriginDeclaringFormalParameter) {
+              // ...then must be final
+              return field.isFinal || field.isConst;
+            }
+            // Otherwise we don't care.
+            return true;
+          });
 
       return element.hasNonFinalField = hasNonFinalField;
     }
diff --git a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
index a221aae..0fd6ed3 100644
--- a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/metadata_resolver.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/ast/visitor.dart';
 import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
@@ -47,19 +46,11 @@
   @override
   void visitClassDeclaration(ClassDeclaration node) {
     node.metadata.accept(this);
-    if (useDeclaringConstructorsAst) {
-      node.namePart.typeParameters?.accept(this);
-    } else {
-      node.typeParameters?.accept(this);
-    }
+    node.namePart.typeParameters?.accept(this);
 
     _scope = LinkingNodeContext.get(node).scope;
     try {
-      if (useDeclaringConstructorsAst) {
-        node.body.accept(this);
-      } else {
-        node.members.accept(this);
-      }
+      node.body.accept(this);
     } finally {
       _scope = _containerScope;
     }
@@ -99,21 +90,12 @@
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
     node.metadata.accept(this);
-    if (useDeclaringConstructorsAst) {
-      node.namePart.typeParameters?.accept(this);
-    } else {
-      node.typeParameters?.accept(this);
-    }
+    node.namePart.typeParameters?.accept(this);
 
     _scope = LinkingNodeContext.get(node).scope;
     try {
-      if (useDeclaringConstructorsAst) {
-        node.body.constants.accept(this);
-        node.body.members.accept(this);
-      } else {
-        node.constants.accept(this);
-        node.members.accept(this);
-      }
+      node.body.constants.accept(this);
+      node.body.members.accept(this);
     } finally {
       _scope = _containerScope;
     }
@@ -136,11 +118,7 @@
 
     _scope = LinkingNodeContext.get(node).scope;
     try {
-      if (useDeclaringConstructorsAst) {
-        node.body.members.accept(this);
-      } else {
-        node.members.accept(this);
-      }
+      node.body.members.accept(this);
     } finally {
       _scope = _containerScope;
     }
@@ -149,20 +127,11 @@
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
     node.metadata.accept(this);
-    if (useDeclaringConstructorsAst) {
-      node.namePart.accept(this);
-    } else {
-      node.typeParameters?.accept(this);
-      node.representation.accept(this);
-    }
+    node.primaryConstructor.accept(this);
 
     _scope = LinkingNodeContext.get(node).scope;
     try {
-      if (useDeclaringConstructorsAst) {
-        node.body.accept(this);
-      } else {
-        node.members.accept(this);
-      }
+      node.body.accept(this);
     } finally {
       _scope = _containerScope;
     }
@@ -250,11 +219,7 @@
 
     _scope = LinkingNodeContext.get(node).scope;
     try {
-      if (useDeclaringConstructorsAst) {
-        node.body.members.accept(this);
-      } else {
-        node.members.accept(this);
-      }
+      node.body.members.accept(this);
     } finally {
       _scope = _containerScope;
     }
@@ -277,11 +242,6 @@
   }
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    node.fieldMetadata.accept(this);
-  }
-
-  @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
     node.metadata.accept(this);
   }
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 622dee3..66a4618 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.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/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
@@ -85,11 +84,7 @@
     );
 
     node.metadata.accept(this);
-    if (useDeclaringConstructorsAst) {
-      node.namePart.accept(this);
-    } else {
-      node.typeParameters?.accept(this);
-    }
+    node.namePart.accept(this);
     node.extendsClause?.accept(this);
     node.withClause?.accept(this);
     node.implementsClause?.accept(this);
@@ -97,11 +92,7 @@
     scope = InstanceScope(scope, element.asElement2);
     LinkingNodeContext(node, scope);
 
-    if (useDeclaringConstructorsAst) {
-      node.body.accept(this);
-    } else {
-      node.members.accept(this);
-    }
+    node.body.accept(this);
     nodesToBuildType.addDeclaration(node);
 
     scope = outerScope;
@@ -172,22 +163,14 @@
     );
 
     node.metadata.accept(this);
-    if (useDeclaringConstructorsAst) {
-      node.namePart.typeParameters?.accept(this);
-    } else {
-      node.typeParameters?.accept(this);
-    }
+    node.namePart.accept(this);
     node.implementsClause?.accept(this);
     node.withClause?.accept(this);
 
     scope = InstanceScope(scope, element);
     LinkingNodeContext(node, scope);
 
-    if (useDeclaringConstructorsAst) {
-      node.body.members.accept(this);
-    } else {
-      node.members.accept(this);
-    }
+    node.body.members.accept(this);
     nodesToBuildType.addDeclaration(node);
 
     for (var field in fragment.fields) {
@@ -226,11 +209,7 @@
     scope = ExtensionScope(scope, fragment.asElement2);
     LinkingNodeContext(node, scope);
 
-    if (useDeclaringConstructorsAst) {
-      node.body.members.accept(this);
-    } else {
-      node.members.accept(this);
-    }
+    node.body.members.accept(this);
     nodesToBuildType.addDeclaration(node);
 
     scope = outerScope;
@@ -255,23 +234,13 @@
     );
 
     node.metadata.accept(this);
-    if (useDeclaringConstructorsAst) {
-      node.namePart.accept(this);
-    } else {
-      node.typeParameters?.accept(this);
-      node.representation.accept(this);
-    }
+    node.primaryConstructor.accept(this);
     node.implementsClause?.accept(this);
 
     scope = InstanceScope(scope, fragment.asElement2);
     LinkingNodeContext(node, scope);
-    if (useDeclaringConstructorsAst) {
-      node.body.accept(this);
-    } else {
-      LinkingNodeContext(node.representation, scope);
-      node.members.accept(this);
-    }
 
+    node.body.accept(this);
     nodesToBuildType.addDeclaration(node);
 
     scope = outerScope;
@@ -468,11 +437,7 @@
     scope = InstanceScope(scope, fragment.asElement2);
     LinkingNodeContext(node, scope);
 
-    if (useDeclaringConstructorsAst) {
-      node.body.members.accept(this);
-    } else {
-      node.members.accept(this);
-    }
+    node.body.members.accept(this);
     nodesToBuildType.addDeclaration(node);
 
     scope = outerScope;
@@ -577,11 +542,6 @@
   }
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    node.fieldType.accept(this);
-  }
-
-  @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
     node.type?.accept(this);
     nodesToBuildType.addDeclaration(node);
diff --git a/pkg/analyzer/lib/src/summary2/simply_bounded.dart b/pkg/analyzer/lib/src/summary2/simply_bounded.dart
index 02fe352..7b16397 100644
--- a/pkg/analyzer/lib/src/summary2/simply_bounded.dart
+++ b/pkg/analyzer/lib/src/summary2/simply_bounded.dart
@@ -5,7 +5,6 @@
 import 'package:_fe_analyzer_shared/src/util/dependency_walker.dart'
     as graph
     show DependencyWalker, Node;
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
@@ -96,9 +95,7 @@
     if (graphNode == null) {
       var node = linker.getLinkingNode2(element.firstFragment);
       if (node is ClassDeclaration) {
-        var parameters = useDeclaringConstructorsAst
-            ? node.namePart.typeParameters?.typeParameters
-            : node.typeParameters?.typeParameters;
+        var parameters = node.namePart.typeParameters?.typeParameters;
         graphNode = SimplyBoundedNode(
           this,
           node,
@@ -114,9 +111,7 @@
           const <TypeAnnotation>[],
         );
       } else if (node is EnumDeclaration) {
-        var parameters = useDeclaringConstructorsAst
-            ? node.namePart.typeParameters?.typeParameters
-            : node.typeParameters?.typeParameters;
+        var parameters = node.namePart.typeParameters?.typeParameters;
         graphNode = SimplyBoundedNode(
           this,
           node,
@@ -124,9 +119,7 @@
           const <TypeAnnotation>[],
         );
       } else if (node is ExtensionTypeDeclaration) {
-        var parameters = useDeclaringConstructorsAst
-            ? node.namePart.typeParameters?.typeParameters
-            : node.typeParameters?.typeParameters;
+        var parameters = node.primaryConstructor.typeParameters?.typeParameters;
         graphNode = SimplyBoundedNode(
           this,
           node,
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 7417d75..7930b39 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.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/dart/element/scope.dart';
 import 'package:analyzer/src/dart/analysis/analysis_options.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
@@ -153,16 +154,29 @@
   }
 
   void _addVariableNode(PropertyInducingElementImpl element) {
-    if (element.isSynthetic &&
-        !(element is FieldElementImpl && element.isSyntheticEnumField)) {
-      return;
+    if (element.isSynthetic) {
+      var shouldInfer = false;
+      if (element is FieldElementImpl) {
+        // For enums `values` is purely synthetic.
+        if (element.isEnumValues) {
+          shouldInfer = true;
+        }
+        // For declaring formal parameters the field is synthetic.
+        // But we want to infer the type from the default value.
+        if (element.declaringFormalParameter != null) {
+          shouldInfer = true;
+        }
+      }
+      if (!shouldInfer) {
+        return;
+      }
     }
 
     if (!element.hasImplicitType) return;
 
     _toInfer.add(element);
 
-    element.firstFragment.typeInference = _PropertyInducingElementTypeInference(
+    element.typeInference = _PropertyInducingElementTypeInference(
       _linker,
       _inferring,
       element,
@@ -195,17 +209,33 @@
 
   @override
   TypeImpl perform() {
-    PropertyInducingFragmentImpl? initializerFragment;
-    VariableDeclarationImpl? variableDeclaration;
+    LibraryFragmentImpl? initializerLibraryFragment;
+    Scope? scope;
+    ExpressionImpl Function()? getInitializer;
     for (var fragment in _element.fragments) {
-      var node = _linker.elementNodes[fragment] as VariableDeclarationImpl;
-      if (node.initializer != null) {
-        initializerFragment = fragment;
-        variableDeclaration = node;
+      var node = _linker.elementNodes[fragment];
+      switch (node) {
+        case VariableDeclarationImpl():
+          if (node.initializer != null) {
+            initializerLibraryFragment = fragment.libraryFragment;
+            scope = LinkingNodeContext.get(node).scope;
+            getInitializer = () => node.initializer!;
+          }
+        case DefaultFormalParameterImpl():
+          if (node.defaultValue != null) {
+            initializerLibraryFragment = fragment.libraryFragment;
+            scope = LinkingNodeContext.get(node).scope;
+            getInitializer = () => node.defaultValue!;
+          } else {
+            _status = _InferenceStatus.inferred;
+            return _element.library.typeSystem.objectQuestion;
+          }
       }
     }
 
-    if (initializerFragment == null || variableDeclaration == null) {
+    if (initializerLibraryFragment == null ||
+        scope == null ||
+        getInitializer == null) {
       _status = _InferenceStatus.inferred;
       return DynamicTypeImpl.instance;
     }
@@ -228,7 +258,7 @@
       for (var inference in cycle) {
         if (inference._status == _InferenceStatus.beingInferred) {
           var element = inference._element;
-          element.firstFragment.typeInferenceError = inferenceError;
+          element.typeInferenceError = inferenceError;
           element.type = DynamicTypeImpl.instance;
           inference._status = _InferenceStatus.inferred;
         }
@@ -246,17 +276,15 @@
     var enclosingInterfaceElement = enclosingElement
         .ifTypeOrNull<InterfaceElementImpl>();
 
-    var scope = LinkingNodeContext.get(variableDeclaration).scope;
-
     var analysisOptions = _libraryBuilder.kind.file.analysisOptions;
     var astResolver = AstResolver(
       _linker,
-      initializerFragment.libraryFragment,
+      initializerLibraryFragment,
       scope,
       analysisOptions,
       enclosingClassElement: enclosingInterfaceElement,
     );
-    astResolver.resolveExpression(() => variableDeclaration!.initializer!);
+    astResolver.resolveExpression(getInitializer);
 
     // Pop self from the stack.
     var self = _inferring.removeLast();
@@ -270,12 +298,19 @@
       _status = _InferenceStatus.inferred;
     }
 
-    var initializerType = variableDeclaration.initializer!.typeOrThrow;
+    var initializerType = getInitializer().typeOrThrow;
     return _refineType(initializerType);
   }
 
   TypeImpl _refineType(TypeImpl type) {
     if (type.isDartCoreNull) {
+      // When `T` is `Null`, `p` has declared type `Object?`.
+      if (_element case FieldElementImpl field) {
+        if (field.declaringFormalParameter != null) {
+          return _element.library.typeSystem.objectQuestion;
+        }
+      }
+      // Logic for older language versions.
       return DynamicTypeImpl.instance;
     }
 
diff --git a/pkg/analyzer/lib/src/summary2/type_alias.dart b/pkg/analyzer/lib/src/summary2/type_alias.dart
index 80ad1ac..ffacdf9 100644
--- a/pkg/analyzer/lib/src/summary2/type_alias.dart
+++ b/pkg/analyzer/lib/src/summary2/type_alias.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/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -102,11 +101,7 @@
           }
           if (typeNode is ClassDeclaration) {
             if (visited.add(typeNode)) {
-              _typeParameterList(
-                useDeclaringConstructorsAst
-                    ? typeNode.namePart.typeParameters
-                    : typeNode.typeParameters,
-              );
+              _typeParameterList(typeNode.namePart.typeParameters);
             }
           } else if (typeNode is ClassTypeAlias) {
             if (visited.add(typeNode)) {
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 92b224d..d5fd610 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -397,8 +397,22 @@
 
   void _simpleFormalParameter(SimpleFormalParameterImpl node) {
     var fragment = node.declaredFragment!;
-    if (fragment.previousFragment == null) {
-      fragment.element.type = node.type?.type ?? _dynamicType;
+    if (fragment.previousFragment != null) {
+      return;
+    }
+
+    var element = fragment.element;
+
+    var typeAnnotation = node.type;
+    if (typeAnnotation == null) {
+      // For a declaring formal parameter the type will be inferred from
+      // the field type via instance inference, or from the default value.
+      if (element is FieldFormalParameterElementImpl && element.isDeclaring) {
+        return;
+      }
+      element.type = _dynamicType;
+    } else {
+      element.type = typeAnnotation.typeOrThrow;
     }
   }
 
diff --git a/pkg/analyzer/lib/src/summary2/variance_builder.dart b/pkg/analyzer/lib/src/summary2/variance_builder.dart
index 504b210..d7e17c7 100644
--- a/pkg/analyzer/lib/src/summary2/variance_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/variance_builder.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/types/shared_type.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';
@@ -40,17 +39,9 @@
           if (node is ClassTypeAliasImpl) {
             _typeParameters(node.typeParameters);
           } else if (node is ClassDeclarationImpl) {
-            if (useDeclaringConstructorsAst) {
-              _typeParameters(node.namePart.typeParameters);
-            } else {
-              _typeParameters(node.typeParameters);
-            }
+            _typeParameters(node.namePart.typeParameters);
           } else if (node is EnumDeclarationImpl) {
-            if (useDeclaringConstructorsAst) {
-              _typeParameters(node.namePart.typeParameters);
-            } else {
-              _typeParameters(node.typeParameters);
-            }
+            _typeParameters(node.namePart.typeParameters);
           } else if (node is FunctionTypeAliasImpl) {
             _functionTypeAlias(node);
           } else if (node is GenericTypeAliasImpl) {
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 8914d82..1c25de3 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -156,6 +156,11 @@
 
   PrefixExpression get singlePrefixExpression => _single();
 
+  PrimaryConstructorBody get singlePrimaryConstructorBody => _single();
+
+  PrimaryConstructorDeclaration get singlePrimaryConstructorDeclaration =>
+      _single();
+
   PropertyAccess get singlePropertyAccess => _single();
 
   RecordLiteral get singleRecordLiteral => _single();
@@ -163,9 +168,7 @@
   RedirectingConstructorInvocation get singleRedirectingConstructorInvocation =>
       _single();
 
-  RepresentationConstructorName get singleRepresentationConstructorName =>
-      _single();
-
+  @Deprecated('Use primaryConstructor instead')
   RepresentationDeclaration get singleRepresentationDeclaration => _single();
 
   RethrowExpression get singleRethrowExpression => _single();
@@ -751,6 +754,10 @@
     return _node(search, (n) => n is RelationalPattern);
   }
 
+  RestPatternElement restPatternElement(String search) {
+    return _node(search, (n) => n is RestPatternElement);
+  }
+
   RethrowExpression rethrow_(String search) {
     return _node(search, (n) => n is RethrowExpression);
   }
diff --git a/pkg/analyzer/lib/src/test_utilities/lint_registration_mixin.dart b/pkg/analyzer/lib/src/test_utilities/lint_registration_mixin.dart
index 09cb513..fec8cbf 100644
--- a/pkg/analyzer/lib/src/test_utilities/lint_registration_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/lint_registration_mixin.dart
@@ -7,18 +7,18 @@
 /// A mixin for test classes that interact with the global lint
 /// [Registry.ruleRegistry].
 mixin LintRegistrationMixin {
-  final _registeredRules = <AnalysisRule>{};
+  final _registeredRules = <AbstractAnalysisRule>{};
 
   /// Register the given [rule] with the global lint [Registry.ruleRegistry],
   /// caching it so that it can be unregistered by a call to [unregisterLintRules].
-  void registerLintRule(AnalysisRule rule) {
+  void registerLintRule(AbstractAnalysisRule rule) {
     _registeredRules.add(rule);
     Registry.ruleRegistry.registerLintRule(rule);
   }
 
   /// Register the given [rules] with the global lint [Registry.ruleRegistry],
   /// caching each so that it can be unregistered by a call to [unregisterLintRules].
-  void registerLintRules(List<AnalysisRule> rules) {
+  void registerLintRules(List<AbstractAnalysisRule> rules) {
     rules.forEach(registerLintRule);
   }
 
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index 30ac9a3..996b7bf 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -9,8 +9,8 @@
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:meta/meta.dart';
 
-final MockSdkLibrary _LIB_ASYNC = MockSdkLibrary('async', [
-  MockSdkLibraryUnit('async/async.dart', '''
+final _asyncLibrary = MockSdkLibrary('async', [
+  MockSdkLibraryUnit('async/async.dart', r'''
 library dart.async;
 
 import 'dart:_internal' show Since;
@@ -18,26 +18,17 @@
 
 part 'stream.dart';
 
-abstract class Future<T> {
-  factory Future(FutureOr<T> computation()) {
-    throw 0;
-  }
+abstract interface class Future<T> {
+  factory Future(FutureOr<T> computation()) => throw 0;
 
-  factory Future.delayed(Duration duration, [FutureOr<T> computation()?]) {
-    throw 0;
-  }
+  factory Future.delayed(Duration duration, [FutureOr<T> computation()?]) =>
+      throw 0;
 
-  factory Future.error(Object error, [StackTrace? stackTrace]) {
-    throw 0;
-  }
+  factory Future.error(Object error, [StackTrace? stackTrace]) => throw 0;
 
-  factory Future.microtask(FutureOr<T> computation()) {
-    throw 0;
-  }
+  factory Future.microtask(FutureOr<T> computation()) => throw 0;
 
-  factory Future.value([FutureOr<T>? value]) {
-    throw 0;
-  }
+  factory Future.value([FutureOr<T>? value]) => throw 0;
 
   Future<T> catchError(Function onError, {bool test(Object error)?});
 
@@ -46,49 +37,47 @@
   Future<T> whenComplete(FutureOr<void> action());
 
   static Future<List<T>> wait<T>(
-    Iterable<Future<T>> futures, {void cleanUp(T successValue)?,}) => throw 0;
+    Iterable<Future<T>> futures, {
+    bool eagerError = false,
+    void cleanUp(T successValue)?,
+  }) => throw 0;
 }
 
 abstract class FutureOr<T> {}
 
 abstract interface class Completer<T> {
-  factory Completer() {
-    throw 0;
-  }
+  factory Completer() => throw 0;
 
-  factory Completer.sync() {
-    throw 0;
-  }
+  factory Completer.sync() => throw 0;
 
   Future<T> get future;
+
   bool get isCompleted;
 
   void complete([FutureOr<T>? value]);
+
   void completeError(Object error, [StackTrace? stackTrace]);
 }
 
 abstract interface class Timer {
-  factory Timer(Duration duration, void Function() callback) {
-    throw 0;
-  }
+  factory Timer(Duration duration, void Function() callback) => throw 0;
+
   static void run(void Function() callback) {}
 }
 
 @Since("2.15")
 void unawaited(Future<void>? future) {}
 '''),
+
   MockSdkLibraryUnit('async/stream.dart', r'''
 part of dart.async;
 
 abstract mixin class Stream<T> {
   const Stream();
-  factory Stream.fromIterable(Iterable<T> elements) {
-    throw 0;
-  }
 
-  factory Stream.value(T value) {
-    throw 0;
-  }
+  factory Stream.fromIterable(Iterable<T> elements) => throw 0;
+
+  factory Stream.value(T value) => throw 0;
 
   Future<T> get first;
 
@@ -108,22 +97,35 @@
   bool get isPaused;
 
   Future<E> asFuture<E>([E? futureValue]);
+
   Future<void> cancel();
+
   void onData(void handleData(T data)?);
+
   void onError(Function? handleError);
+
   void onDone(void handleDone()?);
+
   void pause([Future<void>? resumeSignal]);
+
   void resume();
 }
 
+abstract interface class EventSink<T> implements Sink<T> {}
+
+abstract interface class StreamConsumer<S> {}
+
+abstract interface class StreamSink<S>
+    implements EventSink<S>, StreamConsumer<S> {}
+
 abstract interface class StreamTransformer<S, T> {}
 
 abstract class StreamTransformerBase<S, T> implements StreamTransformer<S, T> {}
 '''),
 ]);
 
-final MockSdkLibrary _LIB_COLLECTION = MockSdkLibrary('collection', [
-  MockSdkLibraryUnit('collection/collection.dart', '''
+final _collectionLibrary = MockSdkLibrary('collection', [
+  MockSdkLibraryUnit('collection/collection.dart', r'''
 library dart.collection;
 
 abstract final class HashMap<K, V> implements Map<K, V> {
@@ -135,13 +137,9 @@
 
   external factory HashMap.identity();
 
-  factory HashMap.from(Map<dynamic, dynamic> other) {
-    throw 0;
-  }
+  factory HashMap.from(Map<dynamic, dynamic> other) => throw 0;
 
-  factory HashMap.of(Map<K, V> other) {
-    throw 0;
-  }
+  factory HashMap.of(Map<K, V> other) => throw 0;
 
   factory HashMap.fromIterable(
     Iterable iterable, {
@@ -149,14 +147,10 @@
     V Function(dynamic element)? value,
   }) => throw 0;
 
-  factory HashMap.fromIterables(Iterable<K> keys, Iterable<V> values) {
-    throw 0;
-  }
+  factory HashMap.fromIterables(Iterable<K> keys, Iterable<V> values) =>
+      throw 0;
 
-  @Since("2.1")
-  factory HashMap.fromEntries(Iterable<MapEntry<K, V>> entries) {
-    throw 0;
-  }
+  factory HashMap.fromEntries(Iterable<MapEntry<K, V>> entries) => throw 0;
 }
 
 abstract mixin class IterableMixin<E> implements Iterable<E> { }
@@ -170,13 +164,9 @@
 
   external factory LinkedHashMap.identity();
 
-  factory LinkedHashMap.from(Map<dynamic, dynamic> other) {
-    throw 0;
-  }
+  factory LinkedHashMap.from(Map<dynamic, dynamic> other) => throw 0;
 
-  factory LinkedHashMap.of(Map<K, V> other) {
-    throw 0;
-  }
+  factory LinkedHashMap.of(Map<K, V> other) => throw 0;
 
   factory LinkedHashMap.fromIterable(
     Iterable iterable, {
@@ -184,14 +174,11 @@
     V Function(dynamic element)? value,
   }) => throw 0;
 
-  factory LinkedHashMap.fromIterables(Iterable<K> keys, Iterable<V> values) {
-    throw 0;
-  }
+  factory LinkedHashMap.fromIterables(Iterable<K> keys, Iterable<V> values) =>
+      throw 0;
 
-  @Since("2.1")
-  factory LinkedHashMap.fromEntries(Iterable<MapEntry<K, V>> entries) {
-    throw 0;
-  }
+  factory LinkedHashMap.fromEntries(Iterable<MapEntry<K, V>> entries) =>
+      throw 0;
 }
 
 abstract final class LinkedHashSet<E> implements Set<E> {
@@ -203,13 +190,9 @@
 
   external factory LinkedHashSet.identity();
 
-  factory LinkedHashSet.from(Iterable<dynamic> elements) {
-    throw 0;
-  }
+  factory LinkedHashSet.from(Iterable<dynamic> elements) => throw 0;
 
-  factory LinkedHashSet.of(Iterable<E> elements) {
-    throw 0;
-  }
+  factory LinkedHashSet.of(Iterable<E> elements) => throw 0;
 }
 
 abstract base mixin class LinkedListEntry<E extends LinkedListEntry<E>> {}
@@ -226,8 +209,8 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_CONVERT = MockSdkLibrary('convert', [
-  MockSdkLibraryUnit('convert/convert.dart', '''
+final _convertLibrary = MockSdkLibrary('convert', [
+  MockSdkLibraryUnit('convert/convert.dart', r'''
 library dart.convert;
 
 import 'dart:async';
@@ -241,8 +224,13 @@
 const JsonCodec json = JsonCodec();
 
 final class JsonCodec {
-  const JsonCodec();
-  String encode(Object? value, {Object? toEncodable(dynamic object)?}) => '';
+  const JsonCodec({
+    Object? reviver(Object? key, Object? value)?,
+    Object? toEncodable(dynamic object)?,
+  });
+
+  String encode(Object? value, {Object? toEncodable(dynamic object)?}) =>
+      throw 0;
 }
 
 abstract mixin class StringConversionSink {}
@@ -252,14 +240,15 @@
 String jsonEncode(
   Object? object, {
   Object? toEncodable(Object? nonEncodable)?,
-}) => '';
+}) => throw 0;
 '''),
 ]);
 
-final MockSdkLibrary _LIB_CORE = MockSdkLibrary('core', [
-  MockSdkLibraryUnit('core/core.dart', '''
+final _coreLibrary = MockSdkLibrary('core', [
+  MockSdkLibraryUnit('core/core.dart', r'''
 library dart.core;
 
+import "dart:collection";
 import "dart:_internal" hide Symbol;
 import "dart:_internal" as internal show Symbol;
 
@@ -277,11 +266,12 @@
 class ArgumentError extends Error {
   ArgumentError([dynamic message, @Since("2.14") String? name]);
 
-  static T checkNotNull<T>(T? argument, [String? name]) => argument!;
+  static T checkNotNull<T>(T? argument, [String? name]) => throw 0;
 }
 
 abstract final class BigInt implements Comparable<BigInt> {
   int compareTo(BigInt other);
+
   external static BigInt parse(String source, {int? radix});
 }
 
@@ -302,30 +292,43 @@
 
 abstract interface class Comparable<T> {
   int compareTo(T other);
-  static int compare(Comparable a, Comparable b) => a.compareTo(b);
+
+  static int compare(Comparable a, Comparable b) => throw 0;
 }
 
 typedef Comparator<T> = int Function(T a, T b);
 
 class DateTime implements Comparable<DateTime> {
   external DateTime._now();
+
   DateTime.now() : this._now();
+
   external int compareTo(DateTime other);
+
   external bool isBefore(DateTime other);
+
   external int get millisecondsSinceEpoch;
 }
 
 class Deprecated {
   final String? message;
+
   final _DeprecationKind _kind;
+
   const Deprecated(this.message) : _kind = _DeprecationKind.use;
+
   const Deprecated.implement([this.message])
     : _kind = _DeprecationKind.implement;
+
   const Deprecated.extend([this.message]) : _kind = _DeprecationKind.extend;
+
   const Deprecated.subclass([this.message]) : _kind = _DeprecationKind.subclass;
+
   const Deprecated.instantiate([this.message])
     : _kind = _DeprecationKind.instantiate;
+
   const Deprecated.mixin([this.message]) : _kind = _DeprecationKind.mixin;
+
   const Deprecated.optional([this.message]) : _kind = _DeprecationKind.optional;
 }
 
@@ -341,35 +344,59 @@
 
 final class pragma {
   final String name;
+
   final Object? options;
-  const pragma(this.name, [this.options]);
+
+  const factory pragma(String name, [Object? options]) = pragma._;
+
+  const pragma._(this.name, [this.options]);
 }
 
 abstract final class double extends num {
   static const double nan = 0.0 / 0.0;
+
   static const double infinity = 1.0 / 0.0;
+
   static const double negativeInfinity = -infinity;
+
   static const double minPositive = 5e-324;
+
   static const double maxFinite = 1.7976931348623157e+308;
 
   double get sign;
+
   double operator %(num other);
+
   double operator *(num other);
+
   double operator +(num other);
+
   double operator -(num other);
+
   double operator -();
+
   double operator /(num other);
+
   int operator ~/(num other);
 
   double abs();
+
   int ceil();
+
   double ceilToDouble();
+
   int floor();
+
   double floorToDouble();
+
   double remainder(num other);
+
   int round();
+
   double roundToDouble();
+
   int truncate();
+
   double truncateToDouble();
 
   external static double parse(String source);
@@ -404,20 +431,22 @@
 
 abstract class _Enum implements Enum {
   final int index;
+
   final String _name;
+
   const _Enum(this.index, this._name);
 }
 
 class Error {
   Error();
-  static String safeToString(Object? object) => '';
+
+  static String safeToString(Object? object) => throw 0;
+
   external StackTrace? get stackTrace;
 }
 
 abstract interface class Exception {
-  factory Exception([var message]) {
-    throw 0;
-  }
+  factory Exception([var message]) => throw 0;
 }
 
 class FormatException implements Exception {}
@@ -431,22 +460,35 @@
   });
 
   bool get isEven;
+
   bool get isOdd;
+
   int get sign;
 
   int operator &(int other);
+
   int operator -();
+
   int operator <<(int shiftAmount);
+
   int operator >>(int shiftAmount);
+
   int operator >>>(int shiftAmount);
+
   int operator ^(int other);
+
   int operator |(int other);
+
   int operator ~();
 
   int abs();
+
   int ceil();
+
   int gcd(int other);
+
   String toString();
+
   int truncate();
 
   external static int parse(String source, {int? radix});
@@ -458,9 +500,13 @@
 
 abstract mixin class Iterable<E> {
   E get first;
+
   bool get isEmpty;
+
   bool get isNotEmpty;
+
   Iterator<E> get iterator;
+
   int get length;
 
   const Iterable();
@@ -488,37 +534,52 @@
   Set<E> toSet();
 
   Iterable<E> where(bool test(E element));
+
   Iterable<T> whereType<T>();
 }
 
 abstract interface class Iterator<E> {
   E get current;
+
   bool moveNext();
 }
 
 abstract interface class List<E> implements Iterable<E> {
   external factory List.filled(int length, E fill, {bool growable = false});
+
   external factory List.empty({bool growable = false});
+
   external factory List.from(Iterable elements, {bool growable = true});
+
   external factory List.of(Iterable<E> elements, {bool growable = true});
+
   external factory List.generate(
     int length,
     E generator(int index), {
     bool growable = true,
   });
+
   external factory List.unmodifiable(Iterable elements);
 
   E get last => throw 0;
   set length(int newLength) {}
+
   E operator [](int index);
+
   void operator []=(int index, E value);
+
   void set first(E value);
 
   void add(E value);
+
   void addAll(Iterable<E> iterable);
+
   Map<int, E> asMap();
+
   void clear();
+
   int indexOf(E element, [int start = 0]);
+
   bool remove(Object? value);
 
   E removeLast();
@@ -526,74 +587,112 @@
 
 abstract interface class Map<K, V> {
   external factory Map();
-  external factory Map.from(Map other);
-  external Map.of(Map<K, V> other);
-  external factory Map.unmodifiable(Map<dynamic, dynamic> other);
-  external factory Map.identity();
 
-  external factory Map.fromIterable(
+  factory Map.from(Map other) = LinkedHashMap<K, V>.from;
+
+  factory Map.of(Map<K, V> other) = LinkedHashMap<K, V>.of;
+
+  external factory Map.unmodifiable(Map<dynamic, dynamic> other);
+
+  factory Map.identity() = LinkedHashMap<K, V>.identity;
+
+  factory Map.fromIterable(
     Iterable iterable, {
     K key(dynamic element)?,
     V value(dynamic element)?,
-  });
+  }) = LinkedHashMap<K, V>.fromIterable;
 
-  external factory Map.fromIterables(Iterable<K> keys, Iterable<V> values);
-  external factory Map.fromEntries(Iterable<MapEntry<K, V>> entries);
+  factory Map.fromIterables(Iterable<K> keys, Iterable<V> values) =
+      LinkedHashMap<K, V>.fromIterables;
+
+  factory Map.fromEntries(Iterable<MapEntry<K, V>> entries) => throw 0;
 
   Iterable<K> get keys;
+
   bool get isEmpty;
+
   bool get isNotEmpty;
+
   int get length;
+
   Iterable<V> get values;
+
   Iterable<MapEntry<K, V>> get entries;
 
   V? operator [](Object? key);
+
   void operator []=(K key, V value);
 
   void addAll(Map<K, V> other);
+
   Map<RK, RV> cast<RK, RV>();
+
   bool containsKey(Object? key);
+
   bool containsValue(Object? value);
+
   void forEach(void action(K key, V value));
+
   V putIfAbsent(K key, V ifAbsent());
+
   V? remove(Object? key);
 }
 
 final class Null {
-  factory Null._uninstantiable() {
-    throw 0;
-  }
+  factory Null._uninstantiable() => throw 0;
 }
 
 final class MapEntry<K, V> {
   final K key;
+
   final V value;
+
   const factory MapEntry(K key, V value) = MapEntry<K, V>._;
+
   const MapEntry._(this.key, this.value);
 }
 
 sealed class num implements Comparable<num> {
   num operator %(num other);
+
   num operator *(num other);
+
   num operator +(num other);
+
   num operator -(num other);
+
   num operator -();
+
   double operator /(num other);
+
   bool operator <(num other);
+
   bool operator <=(num other);
+
   bool operator ==(Object other);
+
   bool operator >(num other);
+
   bool operator >=(num other);
+
   int operator ~/(num other);
 
   num abs();
+
   num clamp(num lowerLimit, num upperLimit);
+
   int floor();
+
   bool get isNaN;
+
   bool get isNegative;
+
   num remainder(num other);
+
   int round();
+
   double toDouble();
+
   int toInt();
 }
 
@@ -605,21 +704,44 @@
   const Object();
 
   external int get hashCode;
+
   external Type get runtimeType;
 
   external bool operator ==(Object other);
 
   external String toString();
+
   external dynamic noSuchMethod(Invocation invocation);
 
   @Since("2.14")
-  static int hash(Object? object1, Object? object2) => 0;
+  static int hash(
+    Object? object1,
+    Object? object2, [
+    Object? object3 = sentinelValue,
+    Object? object4 = sentinelValue,
+    Object? object5 = sentinelValue,
+    Object? object6 = sentinelValue,
+    Object? object7 = sentinelValue,
+    Object? object8 = sentinelValue,
+    Object? object9 = sentinelValue,
+    Object? object10 = sentinelValue,
+    Object? object11 = sentinelValue,
+    Object? object12 = sentinelValue,
+    Object? object13 = sentinelValue,
+    Object? object14 = sentinelValue,
+    Object? object15 = sentinelValue,
+    Object? object16 = sentinelValue,
+    Object? object17 = sentinelValue,
+    Object? object18 = sentinelValue,
+    Object? object19 = sentinelValue,
+    Object? object20 = sentinelValue,
+  ]) => throw 0;
 
   @Since("2.14")
-  static int hashAll(Iterable<Object?> objects) => 0;
+  static int hashAll(Iterable<Object?> objects) => throw 0;
 
   @Since("2.14")
-  static int hashAllUnordered(Iterable<Object?> objects) => 0;
+  static int hashAllUnordered(Iterable<Object?> objects) => throw 0;
 }
 
 abstract interface class Pattern {
@@ -633,29 +755,46 @@
   "'Pattern' may be a more appropriate interface to implement.",
 )
 abstract interface class RegExp implements Pattern {
-  external factory RegExp(String source, {bool unicode = false});
+  external factory RegExp(
+    String source, {
+    bool multiLine = false,
+    bool caseSensitive = true,
+    bool unicode = false,
+    bool dotAll = false,
+  });
 }
 
 abstract interface class Set<E> implements Iterable<E> {
-  external factory Set();
-  external factory Set.identity();
-  external factory Set.from(Iterable elements);
-  external factory Set.of(Iterable<E> elements);
+  factory Set() = LinkedHashSet<E>;
+
+  factory Set.identity() = LinkedHashSet<E>.identity;
+
+  factory Set.from(Iterable elements) = LinkedHashSet<E>.from;
+
+  factory Set.of(Iterable<E> elements) = LinkedHashSet<E>.of;
 
   Set<R> cast<R>();
 
   bool add(E value);
+
   void addAll(Iterable<E> elements);
+
   bool containsAll(Iterable<Object?> other);
+
   Set<E> difference(Set<Object?> other);
+
   Set<E> intersection(Set<Object?> other);
+
   E? lookup(Object? object);
+
   bool remove(Object? value);
+
   void removeAll(Iterable<Object?> elements);
+
   void retainAll(Iterable<Object?> elements);
 
   static Set<T> castFrom<S, T>(Set<S> source, {Set<R> Function<R>()? newSet}) =>
-      throw '';
+      throw 0;
 }
 
 abstract interface class Sink<T> {
@@ -681,26 +820,43 @@
   });
 
   List<int> get codeUnits;
+
   bool get isEmpty;
+
   bool get isNotEmpty;
+
   int get length;
+
   bool operator ==(Object other);
+
   String operator [](int index);
+
   String operator +(String other);
+
   String operator *(int times);
+
   int codeUnitAt(int index);
+
   bool contains(Pattern other, [int startIndex = 0]);
+
   int indexOf(Pattern pattern, [int start = 0]);
+
   int lastIndexOf(Pattern pattern, [int? start]);
+
   bool startsWith(Pattern pattern, [int index = 0]);
+
   List<String> split(Pattern pattern);
+
   String splitMapJoin(
     Pattern pattern, {
     String Function(Match)? onMatch,
     String Function(String)? onNonMatch,
   });
+
   String substring(int start, [int? end]);
+
   String toLowerCase();
+
   String toUpperCase();
 }
 
@@ -737,9 +893,8 @@
     throw 0;
   }
 
-  static List<int> parseIPv6Address(String host, [int start = 0, int? end]) {
-    throw 0;
-  }
+  static List<int> parseIPv6Address(String host, [int start = 0, int? end]) =>
+      throw 0;
 }
 
 class _Override {
@@ -748,18 +903,25 @@
 
 @Since("2.15")
 extension EnumName on Enum {
-  String get name => _name;
+  String get name => throw 0;
 }
 '''),
 ]);
 
-final MockSdkLibrary _LIB_FFI = MockSdkLibrary('ffi', [
-  MockSdkLibraryUnit('ffi/ffi.dart', '''
+final _ffiLibrary = MockSdkLibrary('ffi', [
+  MockSdkLibraryUnit('ffi/ffi.dart', r'''
 @Since('2.6')
 library dart.ffi;
 
 import 'dart:typed_data';
 
+@Since('2.12')
+abstract class Allocator {
+  Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment});
+
+  void free(Pointer pointer);
+}
+
 abstract final class NativeType {}
 
 @Since('3.4')
@@ -770,45 +932,49 @@
 
 abstract base class Opaque implements NativeType {}
 
+abstract final class _NativeInteger implements SizedNativeType {}
+
+abstract final class _NativeDouble implements SizedNativeType {}
+
 abstract final class Void implements NativeType {}
 
-final class Int8 implements SizedNativeType {
+final class Int8 implements _NativeInteger {
   const Int8();
 }
 
-final class Uint8 implements SizedNativeType {
+final class Uint8 implements _NativeInteger {
   const Uint8();
 }
 
-final class Int16 implements SizedNativeType {
+final class Int16 implements _NativeInteger {
   const Int16();
 }
 
-final class Uint16 implements SizedNativeType {
+final class Uint16 implements _NativeInteger {
   const Uint16();
 }
 
-final class Int32 implements SizedNativeType {
+final class Int32 implements _NativeInteger {
   const Int32();
 }
 
-final class Uint32 implements SizedNativeType {
+final class Uint32 implements _NativeInteger {
   const Uint32();
 }
 
-final class Int64 implements SizedNativeType {
+final class Int64 implements _NativeInteger {
   const Int64();
 }
 
-final class Uint64 implements SizedNativeType {
+final class Uint64 implements _NativeInteger {
   const Uint64();
 }
 
-final class Float implements SizedNativeType {
+final class Float implements _NativeDouble {
   const Float();
 }
 
-final class Double implements SizedNativeType {
+final class Double implements _NativeDouble {
   const Double();
 }
 
@@ -901,6 +1067,7 @@
 
 final class DynamicLibrary {
   external factory DynamicLibrary.open(String path);
+
   external Pointer<T> lookup<T extends NativeType>(String symbolName);
 }
 
@@ -955,9 +1122,13 @@
 
 final class _ArraySize<T extends NativeType> implements Array<T> {
   final int? dimension1;
+
   final int? dimension2;
+
   final int? dimension3;
+
   final int? dimension4;
+
   final int? dimension5;
 
   final List<int>? dimensions;
@@ -1013,7 +1184,9 @@
 
 extension StructPointer<T extends Struct> on Pointer<T> {
   external T get ref;
+
   external T operator [](int index);
+
   @Since('3.7')
   external T refWithFinalizer(
     Pointer<NativeFinalizerFunction> finalizer, {
@@ -1024,7 +1197,9 @@
 @Since('2.19')
 final class Native<T> {
   final String? symbol;
+
   final String? assetId;
+
   final bool isLeaf;
 
   const Native({this.assetId, this.isLeaf = false, this.symbol});
@@ -1038,21 +1213,30 @@
 @Since('2.19')
 final class DefaultAsset {
   final String id;
+
   const DefaultAsset(this.id);
 }
 
 @Since('2.16')
 class Abi {
   static const androidArm = _androidArm;
+
   static const androidArm64 = _androidArm64;
+
   static const androidIA32 = _androidIA32;
+
   static const linuxX64 = _linuxX64;
+
   static const macosX64 = _macosX64;
 
   static const _androidArm = Abi._(_Architecture.arm, _OS.android);
+
   static const _androidArm64 = Abi._(_Architecture.arm64, _OS.android);
+
   static const _androidIA32 = Abi._(_Architecture.ia32, _OS.android);
+
   static const _linuxX64 = Abi._(_Architecture.x64, _OS.linux);
+
   static const _macosX64 = Abi._(_Architecture.x64, _OS.macos);
 
   final _OS _os;
@@ -1086,7 +1270,7 @@
 
 @Since('2.17')
 abstract interface class Finalizable {
-  factory Finalizable._() => throw UnsupportedError("");
+  factory Finalizable._() => throw 0;
 }
 
 typedef NativeFinalizerFunction =
@@ -1112,8 +1296,8 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_HTML_DART2JS = MockSdkLibrary('html', [
-  MockSdkLibraryUnit('html/dart2js/html_dart2js.dart', '''
+final _htmlDart2jsLibrary = MockSdkLibrary('html', [
+  MockSdkLibraryUnit('html/dart2js/html_dart2js.dart', r'''
 library dart.dom.html;
 
 import 'dart:async';
@@ -1122,29 +1306,34 @@
 
 class Event {}
 
-class MouseEvent extends Event {}
+class UIEvent extends Event {}
 
-class FocusEvent extends Event {}
+class MouseEvent extends UIEvent {}
 
-class KeyboardEvent extends Event {}
+class FocusEvent extends UIEvent {}
+
+class KeyboardEvent extends UIEvent {}
 
 class KeyEvent implements KeyboardEvent {}
 
 abstract class ElementStream<T extends Event> implements Stream<T> {}
 
-class Element {
+class EventTarget {}
+
+class Node extends EventTarget {}
+
+class Element extends Node {
   factory Element.html(
     String? html, {
     NodeValidator? validator,
     NodeTreeSanitizer? treeSanitizer,
-  }) => new HtmlElement();
+  }) => throw 0;
 
-  /// Stream of `cut` events handled by this [Element].
   ElementStream<ClipboardEvent> get onCut => throw 0;
 
   String get id => throw 0;
 
-  set id(String value) => throw 0;
+  set id(String value) {}
 
   DocumentFragment createFragment(
     String? html, {
@@ -1159,16 +1348,25 @@
   }) {}
 
   int? get tabIndex => throw 0;
+
   ElementStream<Event> get onChange => throw 0;
+
   ElementStream<MouseEvent> get onClick => throw 0;
+
   ElementStream<KeyboardEvent> get onKeyUp => throw 0;
+
   ElementStream<KeyboardEvent> get onKeyDown => throw 0;
+
   bool get hidden => throw 0;
+
   set hidden(bool value) {}
+
   set className(String value) {}
+
   set tabIndex(int? value) {}
 
   String? get _innerHtml => throw 0;
+
   String? get innerHtml => throw 0;
 
   set innerHtml(String? html) {}
@@ -1180,61 +1378,69 @@
   factory AnchorElement({String? href}) => throw 0;
 
   String? get href => throw 0;
+
   set href(String? value) {}
 }
 
 class BodyElement extends HtmlElement {
-  factory BodyElement() => document.createElement("body");
+  factory BodyElement() => throw 0;
 
   ElementStream<Event> get onUnload => throw 0;
 }
 
 class ButtonElement extends HtmlElement {
-  factory ButtonElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-  factory ButtonElement() => document.createElement("button");
+  factory ButtonElement._() => throw 0;
+
+  factory ButtonElement() => throw 0;
 
   bool get autofocus => throw 0;
+
   set autofocus(bool value) {}
 }
 
 class EmbedElement extends HtmlElement {
   String get src => throw 0;
+
   set src(String value) {}
 }
 
 class HeadingElement extends HtmlElement {
-  factory HeadingElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-  factory HeadingElement.h1() => document.createElement("h1");
-  factory HeadingElement.h2() => document.createElement("h2");
-  factory HeadingElement.h3() => document.createElement("h3");
+  factory HeadingElement._() => throw 0;
+
+  factory HeadingElement.h1() => throw 0;
+
+  factory HeadingElement.h2() => throw 0;
+
+  factory HeadingElement.h3() => throw 0;
 }
 
 class ImageElement extends HtmlElement {
   String? get src => throw 0;
+
   set src(String? value) {}
 }
 
 class InputElement extends HtmlElement {
-  factory InputElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-  factory InputElement() => document.createElement("input");
+  factory InputElement._() => throw 0;
+
+  factory InputElement({String? type}) => throw 0;
+
   String? get value => throw 0;
+
   set value(String? value) {}
+
   String get validationMessage => throw 0;
 }
 
 class IFrameElement extends HtmlElement {
-  factory IFrameElement._() {
-    throw new UnsupportedError("Not supported");
-  }
+  factory IFrameElement._() => throw 0;
+
   factory IFrameElement() => throw 0;
+
   String? get src => throw 0;
-  set src(Stirng? value) {}
+
+  set src(String? value) {}
+
   set srcdoc(String? value) {}
 }
 
@@ -1255,9 +1461,11 @@
 
 class ScriptElement extends HtmlElement {
   String get src => throw 0;
+
   set src(String value) {}
 
   String get type => throw 0;
+
   set type(String value) {}
 }
 
@@ -1268,22 +1476,20 @@
 
   TableRowElement insertRow(int index) => throw 0;
 
-  factory TableSectionElement._() {
-    throw new UnsupportedError("Not supported");
-  }
+  factory TableSectionElement._() => throw 0;
 }
 
 class TemplateElement extends HtmlElement {
-  factory TemplateElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-  factory TemplateElement() => document.createElement("template");
+  factory TemplateElement._() => throw 0;
+
+  factory TemplateElement() => throw 0;
 }
 
 class AudioElement extends MediaElement {
   factory AudioElement._([String? src]) => throw 0;
 
   static AudioElement _create_1(src) => throw 0;
+
   static AudioElement _create_2() => throw 0;
 
   factory AudioElement([String? src]) => throw 0;
@@ -1315,30 +1521,46 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_INTERCEPTORS = MockSdkLibrary('_interceptors', [
-  MockSdkLibraryUnit('_internal/js_runtime/lib/interceptors.dart', '''
+final _interceptorsLibrary = MockSdkLibrary('_interceptors', [
+  MockSdkLibraryUnit('_internal/js_runtime/lib/interceptors.dart', r'''
 library dart._interceptors;
 '''),
 ]);
 
-final MockSdkLibrary _LIB_INTERNAL = MockSdkLibrary('_internal', [
-  MockSdkLibraryUnit('_internal/internal.dart', '''
+final _internalLibrary = MockSdkLibrary('_internal', [
+  MockSdkLibraryUnit('_internal/internal.dart', r'''
 library dart._internal;
 
 import 'dart:core' hide Symbol;
 import 'dart:core' as core show Symbol;
 
-class EmptyIterable<E> implements Iterable<E> {
+abstract class EfficientLengthIterable<T> extends Iterable<T> {}
+
+abstract interface class HideEfficientLengthIterable<T>
+    implements Iterable<T> {}
+
+class EmptyIterable<E> extends EfficientLengthIterable<E>
+    implements HideEfficientLengthIterable<E> {
   const EmptyIterable();
 }
 
 class ExternalName {
   final String name;
+
   const ExternalName(this.name);
 }
 
+class SentinelValue {
+  final int id;
+
+  const SentinelValue(this.id);
+}
+
+const Object sentinelValue = SentinelValue(0);
+
 class Since {
   final String version;
+
   const Since(this.version);
 }
 
@@ -1346,13 +1568,15 @@
   external const Symbol(String name);
 }
 '''),
-], categories: '');
+]);
 
-final MockSdkLibrary _LIB_IO = MockSdkLibrary('io', [
-  MockSdkLibraryUnit('io/io.dart', '''
+final _ioLibrary = MockSdkLibrary('io', [
+  MockSdkLibraryUnit('io/io.dart', r'''
 library dart.io;
 
+import 'dart:async';
 import 'dart:convert';
+import 'dart:typed_data';
 
 Never exit(int code) => throw code;
 
@@ -1361,48 +1585,62 @@
 void set exitCode(int code) {}
 
 abstract interface class Directory implements FileSystemEntity {
-  factory Directory(String path) {
-    throw 0;
-  }
+  factory Directory(String path) => throw 0;
+}
+
+class FileMode {
+  static const write = FileMode._internal(1);
+
+  final int _mode;
+
+  const FileMode._internal(this._mode);
 }
 
 abstract interface class File implements FileSystemEntity {
-  factory File(String path) {
-    throw 0;
-  }
+  factory File(String path) => throw 0;
+
   Future<DateTime> lastModified();
+
   DateTime lastModifiedSync();
-  IOSink openWrite();
+
+  IOSink openWrite({FileMode mode = FileMode.write, Encoding encoding = utf8});
 }
 
 abstract class FileSystemEntity {
-  static Future<bool> isDirectory(String path) async => true;
-  static bool isDirectorySync(String path) => true;
+  static Future<bool> isDirectory(String path) => throw 0;
 
-  static Future<bool> isFile(String path) async => true;
-  static bool isFileSync(String path) => true;
+  static bool isDirectorySync(String path) => throw 0;
 
-  static Future<bool> isLink(String path) async => true;
-  static bool isLinkSync(String path) => true;
+  static Future<bool> isFile(String path) => throw 0;
+
+  static bool isFileSync(String path) => throw 0;
+
+  static Future<bool> isLink(String path) => throw 0;
+
+  static bool isLinkSync(String path) => throw 0;
 
   static Future<FileSystemEntityType> type(
     String path, {
     bool followLinks = true,
   }) => throw 0;
+
   static FileSystemEntityType typeSync(
     String path, {
     bool followLinks = true,
   }) => throw 0;
 
   Future<bool> exists();
+
   bool existsSync();
 
   Future<FileStat> stat();
+
   FileStat statSync();
 }
 
-abstract interface class IOSink implements Sink<List<int>> {
+abstract interface class IOSink implements StreamSink<List<int>>, StringSink {
   Future<dynamic> close();
+
   void write(Object? object);
 }
 
@@ -1416,6 +1654,7 @@
 
 final class ProcessStartMode {
   static const normal = const ProcessStartMode._internal(0);
+
   const ProcessStartMode._internal(int _mode);
 }
 
@@ -1442,7 +1681,7 @@
   });
 }
 
-abstract interface class Socket implements IOSink {
+abstract interface class Socket implements Stream<Uint8List>, IOSink {
   void destroy();
 
   static Future<Socket> connect(
@@ -1456,8 +1695,8 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_ISOLATE = MockSdkLibrary('isolate', [
-  MockSdkLibraryUnit('isolate/isolate.dart', '''
+final _isolateLibrary = MockSdkLibrary('isolate', [
+  MockSdkLibraryUnit('isolate/isolate.dart', r'''
 library dart.isolate;
 
 abstract interface class SendPort {}
@@ -1473,6 +1712,8 @@
     bool errorsAreFatal = true,
     bool? checked,
     Map<String, String>? environment,
+    @Deprecated('The packages/ dir is not supported in Dart 2')
+    Uri? packageRoot,
     Uri? packageConfig,
     bool automaticPackageResolution = false,
     String? debugName,
@@ -1481,16 +1722,8 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_JS = MockSdkLibrary('js', [
-  MockSdkLibraryUnit('js/js.dart', '''
-library dart.js;
-
-class JsObject {}
-'''),
-]);
-
-final MockSdkLibrary _LIB_JS_ANNOTATIONS = MockSdkLibrary('_js_annotations', [
-  MockSdkLibraryUnit('js/_js_annotations.dart', '''
+final MockSdkLibrary _jsAnnotationsLibrary = MockSdkLibrary('_js_annotations', [
+  MockSdkLibraryUnit('js/_js_annotations.dart', r'''
 library _js_annotations;
 
 export 'dart:js_interop' show staticInterop;
@@ -1502,14 +1735,15 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_JS_INTEROP = MockSdkLibrary('js_interop', [
-  MockSdkLibraryUnit('js/js_interop.dart', '''
+final _jsInteropLibrary = MockSdkLibrary('js_interop', [
+  MockSdkLibraryUnit('js/js_interop.dart', r'''
 library;
 
 import 'dart:typed_data';
 
 class JS {
   final String? name;
+
   const JS([this.name]);
 }
 
@@ -1540,7 +1774,7 @@
 
   external bool instanceof(JSFunction constructor);
 
-  bool instanceOfString(String constructorName) => false;
+  bool instanceOfString(String constructorName) => throw 0;
 
   @Since('3.4')
   external bool isA<T extends JSAny?>();
@@ -1554,8 +1788,35 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_MATH = MockSdkLibrary('math', [
-  MockSdkLibraryUnit('math/math.dart', '''
+final _jsLibrary = MockSdkLibrary('js', [
+  MockSdkLibraryUnit('js/js.dart', r'''
+library dart.js;
+
+class JsObject {}
+'''),
+]);
+
+final List<MockSdkLibrary> _libraries = [
+  _asyncLibrary,
+  _collectionLibrary,
+  _convertLibrary,
+  _coreLibrary,
+  _ffiLibrary,
+  _htmlDart2jsLibrary,
+  _interceptorsLibrary,
+  _internalLibrary,
+  _ioLibrary,
+  _isolateLibrary,
+  _jsLibrary,
+  _jsAnnotationsLibrary,
+  _jsInteropLibrary,
+  _mathLibrary,
+  _typedDataLibrary,
+  _wasmLibrary,
+];
+
+final _mathLibrary = MockSdkLibrary('math', [
+  MockSdkLibraryUnit('math/math.dart', r'''
 library dart.math;
 
 const double e = 2.718281828459045;
@@ -1563,17 +1824,24 @@
 const double ln10 = 2.302585092994046;
 
 external T min<T extends num>(T a, T b);
+
 external T max<T extends num>(T a, T b);
 
 external double cos(num radians);
+
 external double sin(num radians);
+
 external double sqrt(num x);
+
 external double tan(num radians);
 
 abstract interface class Random {
   external factory Random([int? seed]);
+
   bool nextBool();
+
   double nextDouble();
+
   int nextInt(int max);
 }
 
@@ -1581,8 +1849,8 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_TYPED_DATA = MockSdkLibrary('typed_data', [
-  MockSdkLibraryUnit('typed_data/typed_data.dart', '''
+final _typedDataLibrary = MockSdkLibrary('typed_data', [
+  MockSdkLibraryUnit('typed_data/typed_data.dart', r'''
 library dart.typed_data;
 
 abstract final class Uint8List {
@@ -1603,29 +1871,11 @@
 '''),
 ]);
 
-final MockSdkLibrary _LIB_WASM = MockSdkLibrary('_wasm', [
-  MockSdkLibraryUnit('_wasm/wasm.dart', ''),
+final _wasmLibrary = MockSdkLibrary('_wasm', [
+  MockSdkLibraryUnit('_wasm/wasm.dart', r'''
+'''),
 ]);
 
-final List<MockSdkLibrary> _LIBRARIES = [
-  _LIB_ASYNC,
-  _LIB_COLLECTION,
-  _LIB_CONVERT,
-  _LIB_CORE,
-  _LIB_FFI,
-  _LIB_HTML_DART2JS,
-  _LIB_INTERCEPTORS,
-  _LIB_INTERNAL,
-  _LIB_IO,
-  _LIB_ISOLATE,
-  _LIB_JS,
-  _LIB_JS_ANNOTATIONS,
-  _LIB_JS_INTEROP,
-  _LIB_MATH,
-  _LIB_TYPED_DATA,
-  _LIB_WASM,
-];
-
 /// Creates a reduced approximation of Dart SDK in the [root].
 ///
 /// It has enough libraries to run analyzer and analysis server tests,
@@ -1645,14 +1895,14 @@
   var librariesBuffer = StringBuffer();
   librariesBuffer.writeln('const Map<String, LibraryInfo> libraries = const {');
 
-  for (var library in [..._LIBRARIES, ...additionalLibraries]) {
+  for (var library in [..._libraries, ...additionalLibraries]) {
     for (var unit in library.units) {
       var file = lib.getChildAssumingFile(unit.path);
       file.writeAsStringSync(unit.content);
     }
     librariesBuffer.writeln(
       '  "${library.name}": const LibraryInfo("${library.path}", '
-      'categories: "${library.categories}"),',
+      'categories: "Shared"),',
     );
   }
 
@@ -1679,16 +1929,9 @@
 
 class MockSdkLibrary implements SdkLibrary {
   final String name;
-  final String categories;
   final List<MockSdkLibraryUnit> units;
 
-  MockSdkLibrary(this.name, this.units, {this.categories = 'Shared'});
-
-  @override
-  String get category => throw UnimplementedError();
-
-  @override
-  bool get isDart2JsLibrary => throw UnimplementedError();
+  MockSdkLibrary(this.name, this.units);
 
   @override
   bool get isDocumented => throw UnimplementedError();
@@ -1700,12 +1943,6 @@
   bool get isInternal => shortName.startsWith('dart:_');
 
   @override
-  bool get isShared => throw UnimplementedError();
-
-  @override
-  bool get isVmLibrary => throw UnimplementedError();
-
-  @override
   String get path => units[0].path;
 
   @override
diff --git a/pkg/analyzer/lib/src/test_utilities/test_library_builder.dart b/pkg/analyzer/lib/src/test_utilities/test_library_builder.dart
index c7c3563..514e955 100644
--- a/pkg/analyzer/lib/src/test_utilities/test_library_builder.dart
+++ b/pkg/analyzer/lib/src/test_utilities/test_library_builder.dart
@@ -187,6 +187,7 @@
     required _Scope classScope,
   }) {
     var fragment = ConstructorFragmentImpl(name: spec.name);
+    fragment.isOriginDeclaration = true;
     fragment.isConst = spec.isConst;
     fragment.isFactory = spec.isFactory;
 
diff --git a/pkg/analyzer/lib/src/utilities/extensions/ast.dart b/pkg/analyzer/lib/src/utilities/extensions/ast.dart
index dca7a96..c1c6942 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/ast.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/ast.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/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/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
 
@@ -123,11 +123,13 @@
   List<ClassMember> get classMembers {
     var self = this;
     return switch (self) {
-      ClassDeclaration() => self.members,
-      EnumDeclaration() => self.members,
-      ExtensionDeclaration() => self.members,
-      ExtensionTypeDeclaration() => self.members,
-      MixinDeclaration() => self.members,
+      BlockClassBody() => self.members,
+      ClassDeclarationImpl() => self.body.members,
+      EnumBody() => self.members,
+      EnumDeclaration() => self.body.members,
+      ExtensionDeclaration() => self.body.members,
+      ExtensionTypeDeclarationImpl() => self.body.members,
+      MixinDeclaration() => self.body.members,
       _ => throw UnimplementedError('(${self.runtimeType}) $self'),
     };
   }
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index e5a7d04..e1e64e8 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -62,6 +62,7 @@
 
 AnalysisOptionsErrorCode:
   INCLUDED_FILE_PARSE_ERROR:
+    type: compileTimeError
     parameters:
       Object p0: the path of the file containing the error
       Object p1: the starting offset of the text in the file that contains the error
@@ -73,6 +74,7 @@
       An error code indicating that there is a syntactic error in the included
       file.
   PARSE_ERROR:
+    type: compileTimeError
     parameters:
       Object p0: the error message from the parse error
     problemMessage: "#p0"
@@ -81,6 +83,7 @@
       An error code indicating that there is a syntactic error in the file.
 AnalysisOptionsWarningCode:
   ANALYSIS_OPTION_DEPRECATED:
+    type: staticWarning
     parameters:
       Object p0: the option name
     problemMessage: "The option '#p0' is no longer supported."
@@ -88,6 +91,7 @@
     comment: |-
       An error code indicating that the given option is deprecated.
   ANALYSIS_OPTION_DEPRECATED_WITH_REPLACEMENT:
+    type: staticWarning
     parameters:
       Object p0: the option name
       Object p1: the replacement option name
@@ -98,6 +102,7 @@
     comment: |-
       An error code indicating that the given option is deprecated.
   DEPRECATED_LINT:
+    type: staticWarning
     parameters:
       String p0: the rule name
     problemMessage: "'#p0' is a deprecated lint rule and should not be used."
@@ -106,6 +111,7 @@
     comment: |-
       A hint code indicating reference to a deprecated lint.
   DEPRECATED_LINT_WITH_REPLACEMENT:
+    type: staticWarning
     parameters:
       String p0: the deprecated lint name
       String p1: the replacing rule name
@@ -115,6 +121,7 @@
     comment: |-
       A hint code indicating reference to a deprecated lint.
   DUPLICATE_RULE:
+    type: staticWarning
     parameters:
       String p0: the rule name
     problemMessage: "The rule #p0 is already specified and doesn't need to be specified again."
@@ -123,6 +130,7 @@
     comment: |-
       Duplicate rules.
   INCLUDED_FILE_WARNING:
+    type: staticWarning
     parameters:
       Object p0: the path of the file containing the warnings
       Object p1: the starting offset of the text in the file that contains the warning
@@ -133,6 +141,7 @@
     comment: |-
       An error code indicating a specified include file has a warning.
   INCLUDE_FILE_NOT_FOUND:
+    type: staticWarning
     parameters:
       Object p0: the URI of the file to be included
       Object p1: the path of the file containing the include directive
@@ -142,6 +151,7 @@
     comment: |-
       An error code indicating a specified include file could not be found.
   INCOMPATIBLE_LINT:
+    type: staticWarning
     parameters:
       String p0: the rule name
       String p1: the incompatible rules
@@ -153,6 +163,7 @@
 
       The incompatible rules must be included by context messages.
   INCOMPATIBLE_LINT_FILES:
+    type: staticWarning
     parameters:
       String p0: the rule name
       String p1: the incompatible rules
@@ -165,6 +176,7 @@
 
       The files that enable the referenced rules must be included by context messages.
   INCOMPATIBLE_LINT_INCLUDED:
+    type: staticWarning
     parameters:
       String p0: the rule name
       String p1: the incompatible rules
@@ -178,6 +190,7 @@
       An error code indicating an incompatible rule.
 
   INVALID_OPTION:
+    type: staticWarning
     parameters:
       String p0: the option name
       String p1: the detail message
@@ -187,6 +200,7 @@
       An error code indicating that a plugin is being configured with an invalid
       value for an option and a detail message is provided.
   INVALID_SECTION_FORMAT:
+    type: staticWarning
     parameters:
       String p0: the section name
     problemMessage: "Invalid format for the '#p0' section."
@@ -194,6 +208,7 @@
     comment: |-
       An error code indicating an invalid format for an options file section.
   MULTIPLE_PLUGINS:
+    type: staticWarning
     parameters:
       String p0: the name of the first plugin
     problemMessage: "Multiple plugins can't be enabled."
@@ -202,6 +217,7 @@
     comment: |-
       An error code indicating multiple plugins have been specified as enabled.
   PLUGINS_IN_INNER_OPTIONS:
+    type: staticWarning
     parameters:
       String contextRoot: the root of the analysis context
     problemMessage: "Plugins can only be specified in the root of a pub workspace or the root of a package that isn't in a workspace."
@@ -211,6 +227,7 @@
       An error code indicating plugins have been specified in an "inner"
       analysis options file.
   RECURSIVE_INCLUDE_FILE:
+    type: staticWarning
     parameters:
       Object p0: the URI of the file to be included
       Object p1: the path of the file containing the include directive
@@ -220,6 +237,7 @@
     comment: |-
       An error code indicating a specified include file includes itself recursively.
   REMOVED_LINT:
+    type: staticWarning
     parameters:
       String p0: the rule name
       String p1: the SDK version in which the lint was removed
@@ -229,6 +247,7 @@
     comment: |-
       An error code indicating a removed lint rule.
   REPLACED_LINT:
+    type: staticWarning
     parameters:
       String p0: the rule name
       String p1: the SDK version in which the lint was removed
@@ -239,6 +258,7 @@
     comment: |-
       An error code indicating a removed lint rule.
   UNDEFINED_LINT:
+    type: staticWarning
     parameters:
       String p0: the rule name
     problemMessage: "'#p0' is not a recognized lint rule."
@@ -247,6 +267,7 @@
     comment: |-
       An error code indicating an undefined lint rule.
   UNRECOGNIZED_ERROR_CODE:
+    type: staticWarning
     parameters:
       String p0: the unrecognized error code
     problemMessage: "'#p0' isn't a recognized error code."
@@ -255,6 +276,7 @@
       An error code indicating that an unrecognized error code is being used to
       specify an error filter.
   UNSUPPORTED_OPTION_WITHOUT_VALUES:
+    type: staticWarning
     parameters:
       String p0: the plugin name
       String p1: the unsupported option key
@@ -264,6 +286,7 @@
       An error code indicating that a plugin is being configured with an
       unsupported option and legal options are provided.
   UNSUPPORTED_OPTION_WITH_LEGAL_VALUE:
+    type: staticWarning
     parameters:
       String p0: the section name
       String p1: the unsupported option key
@@ -274,6 +297,7 @@
       An error code indicating that a YAML section is being configured with an
       unsupported option where there is just one legal value.
   UNSUPPORTED_OPTION_WITH_LEGAL_VALUES:
+    type: staticWarning
     parameters:
       String p0: the section name
       String p1: the unsupported option key
@@ -285,6 +309,7 @@
       An error code indicating that a YAML section is being configured with an
       unsupported option and legal options are provided.
   UNSUPPORTED_VALUE:
+    type: staticWarning
     parameters:
       String p0: the option name
       Object p1: the unsupported value
@@ -297,6 +322,7 @@
       unsupported value.
 CompileTimeErrorCode:
   ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER:
+    type: compileTimeError
     parameters: none
     sharedName: ABSTRACT_FIELD_INITIALIZER
     problemMessage: "Abstract fields can't have initializers."
@@ -348,11 +374,13 @@
       }
       ```
   ABSTRACT_FIELD_INITIALIZER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Abstract fields can't have initializers."
     correctionMessage: "Try removing the initializer or the 'abstract' keyword."
     hasPublishedDocs: true
   ABSTRACT_SUPER_MEMBER_REFERENCE:
+    type: compileTimeError
     parameters:
       String memberKind: the display name for the kind of the found abstract member
       String name: the name of the member
@@ -386,6 +414,7 @@
       TODO(brianwilkerson): This either needs to be generalized (use 'member'
        rather than '{0}') or split into multiple codes.
   AMBIGUOUS_EXPORT:
+    type: compileTimeError
     parameters:
       String p0: the name of the ambiguous element
       Uri p1: the name of the first library in which the type is found
@@ -440,6 +469,7 @@
       export 'b.dart' hide C;
       ```
   AMBIGUOUS_EXTENSION_MEMBER_ACCESS_TWO:
+    type: compileTimeError
     parameters:
       String p0: the name of the member
       Element p1: the name of the first declaring extension
@@ -504,6 +534,7 @@
       }
       ```
   AMBIGUOUS_EXTENSION_MEMBER_ACCESS_THREE_OR_MORE:
+    type: compileTimeError
     parameters:
       String p0: the name of the member
       String p1: the names of the declaring extensions
@@ -512,6 +543,7 @@
     correctionMessage: Try using an extension override to specify the extension you want to be chosen.
     hasPublishedDocs: true
   AMBIGUOUS_IMPORT:
+    type: compileTimeError
     parameters:
       String p0: the name of the ambiguous type
       String p1: the names of the libraries that the type is found
@@ -583,6 +615,7 @@
       void f(a.C c1, b.C c2) {}
       ```
   AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH:
+    type: compileTimeError
     parameters: none
     problemMessage: "The literal can't be either a map or a set because it contains at least one literal map entry or a spread operator spreading a 'Map', and at least one element which is neither of these."
     correctionMessage: Try removing or changing some of the elements so that all of the elements are consistent.
@@ -637,6 +670,7 @@
           {...a, for (String s in b) s: s, ...c};
       ```
   AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER:
+    type: compileTimeError
     parameters: none
     problemMessage: "This literal must be either a map or a set, but the elements don't have enough information for type inference to work."
     correctionMessage: Try adding type arguments to the literal (one for sets, two for maps).
@@ -711,6 +745,7 @@
       }
       ```
   ARGUMENT_TYPE_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the name of the actual argument type
       Type p1: the name of the expected type
@@ -768,6 +803,7 @@
       String g(num y) => f(y as String);
       ```
   ASSERT_IN_REDIRECTING_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "A redirecting constructor can't have an 'assert' initializer."
     hasPublishedDocs: true
@@ -815,6 +851,7 @@
       }
       ```
   ASSIGNMENT_TO_CONST:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant variables can't be assigned a value after initialization."
     correctionMessage: "Try removing the assignment, or remove the modifier 'const' from the variable."
@@ -866,6 +903,7 @@
       }
       ```
   ASSIGNMENT_TO_FINAL:
+    type: compileTimeError
     parameters:
       String p0: the name of the final variable
     problemMessage: "'#p0' can't be used as a setter because it's final."
@@ -907,6 +945,7 @@
       }
       ```
   ASSIGNMENT_TO_FINAL_LOCAL:
+    type: compileTimeError
     parameters:
       String p0: the name of the variable
     problemMessage: "The final variable '#p0' can only be set once."
@@ -944,6 +983,7 @@
       }
       ```
   ASSIGNMENT_TO_FINAL_NO_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the reference
       String p1: the name of the class
@@ -1003,6 +1043,7 @@
       }
       ```
   ASSIGNMENT_TO_FUNCTION:
+    type: compileTimeError
     parameters: none
     problemMessage: "Functions can't be assigned a value."
     hasPublishedDocs: true
@@ -1050,6 +1091,7 @@
       }
       ```
   ASSIGNMENT_TO_METHOD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Methods can't be assigned a value."
     hasPublishedDocs: true
@@ -1078,6 +1120,7 @@
 
       Rewrite the code so that there isn't an assignment to a method.
   ASSIGNMENT_TO_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Types can't be assigned a value."
     hasPublishedDocs: true
@@ -1114,6 +1157,7 @@
       }
       ```
   ASYNC_FOR_IN_WRONG_CONTEXT:
+    type: compileTimeError
     parameters: none
     problemMessage: The async for-in loop can only be used in an async function.
     correctionMessage: Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for-in loop.
@@ -1173,12 +1217,14 @@
       }
       ```
   AUGMENTATION_EXTENDS_CLAUSE_ALREADY_PRESENT:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The augmentation has an 'extends' clause, but an augmentation target already includes an 'extends' clause and it isn't allowed to be repeated or changed.
     correctionMessage: Try removing the 'extends' clause, either here or in the augmentation target.
     hasPublishedDocs: false
   AUGMENTATION_MODIFIER_EXTRA:
+    type: compileTimeError
     parameters:
       Object p0: the lexeme of the modifier.
     experiment: augmentations
@@ -1186,6 +1232,7 @@
     correctionMessage: Try removing the '#p0' modifier, or adding it to the declaration.
     hasPublishedDocs: false
   AUGMENTATION_MODIFIER_MISSING:
+    type: compileTimeError
     parameters:
       Object p0: the lexeme of the modifier.
     experiment: augmentations
@@ -1193,6 +1240,7 @@
     correctionMessage: Try adding the '#p0' modifier, or removing it from the declaration.
     hasPublishedDocs: false
   AUGMENTATION_OF_DIFFERENT_DECLARATION_KIND:
+    type: compileTimeError
     parameters:
       Object p0: the name of the declaration kind.
       Object p1: the name of the augmentation kind.
@@ -1201,42 +1249,49 @@
     correctionMessage: Try changing the augmentation to match the declaration kind.
     hasPublishedDocs: false
   AUGMENTATION_TYPE_PARAMETER_BOUND:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The augmentation type parameter must have the same bound as the corresponding type parameter of the declaration.
     correctionMessage: Try changing the augmentation to match the declaration type parameters.
     hasPublishedDocs: false
   AUGMENTATION_TYPE_PARAMETER_COUNT:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The augmentation must have the same number of type parameters as the declaration.
     correctionMessage: Try changing the augmentation to match the declaration type parameters.
     hasPublishedDocs: false
   AUGMENTATION_TYPE_PARAMETER_NAME:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The augmentation type parameter must have the same name as the corresponding type parameter of the declaration.
     correctionMessage: Try changing the augmentation to match the declaration type parameters.
     hasPublishedDocs: false
   AUGMENTATION_WITHOUT_DECLARATION:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The declaration being augmented doesn't exist.
     correctionMessage: Try changing the augmentation to match an existing declaration.
     hasPublishedDocs: false
   AUGMENTED_EXPRESSION_IS_NOT_SETTER:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The augmented declaration is not a setter, it can't be used to write a value.
     correctionMessage: Try assigning a value to a setter.
     hasPublishedDocs: false
   AUGMENTED_EXPRESSION_IS_SETTER:
+    type: compileTimeError
     parameters: none
     experiment: augmentations
     problemMessage: The augmented declaration is a setter, it can't be used to read a value.
     correctionMessage: Try assigning a value to the augmented setter.
     hasPublishedDocs: false
   AUGMENTED_EXPRESSION_NOT_OPERATOR:
+    type: compileTimeError
     parameters:
       Object p0: the lexeme of the operator.
     experiment: augmentations
@@ -1244,6 +1299,7 @@
     correctionMessage: Try augmenting or invoking the correct operator.
     hasPublishedDocs: false
   AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER:
+    type: compileTimeError
     parameters: none
     problemMessage: "The 'await' expression can't be used in a 'late' local variable's initializer."
     correctionMessage: "Try removing the 'late' modifier, or rewriting the initializer without using the 'await' expression."
@@ -1286,6 +1342,7 @@
       }
       ```
   AWAIT_IN_WRONG_CONTEXT:
+    type: compileTimeError
     parameters: none
     problemMessage: The await expression can only be used in an async function.
     correctionMessage: Try marking the function body with either 'async' or 'async*'.
@@ -1295,6 +1352,7 @@
       immediately enclosing _a_ is not declared asynchronous. (Where _a_ is the
       await expression.)
   AWAIT_OF_INCOMPATIBLE_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "The 'await' expression can't be used for an expression with an extension type that is not a subtype of 'Future'."
     correctionMessage: Try removing the `await`, or updating the extension type to implement 'Future'.
@@ -1344,6 +1402,7 @@
       }
       ```
   BASE_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String implementedClassName: the name of the base class being implemented
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
@@ -1396,12 +1455,14 @@
       class B {}
       ```
   BASE_MIXIN_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String implementedMixinName: the name of the base mixin being implemented
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
     problemMessage: "The mixin '#implementedMixinName' can't be implemented outside of its library because it's a base mixin."
     hasPublishedDocs: true
   BODY_MIGHT_COMPLETE_NORMALLY:
+    type: compileTimeError
     parameters:
       Type p0: the name of the return type
     problemMessage: The body might complete normally, causing 'null' to be returned, but the return type, '#p0', is a potentially non-nullable type.
@@ -1480,6 +1541,7 @@
       }
       ```
   BREAK_LABEL_ON_SWITCH_MEMBER:
+    type: compileTimeError
     parameters: none
     problemMessage: A break label resolves to the 'case' or 'default' statement.
     hasPublishedDocs: true
@@ -1537,6 +1599,7 @@
       }
       ```
   BUILT_IN_IDENTIFIER_AS_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     problemMessage: The built-in identifier '#p0' can't be used as a type.
@@ -1565,6 +1628,7 @@
       List<int> x;
       ```
   BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -1592,6 +1656,7 @@
 
       Choose a different name for the declaration.
   BUILT_IN_IDENTIFIER_AS_EXTENSION_TYPE_NAME:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -1599,6 +1664,7 @@
     correctionMessage: Try choosing a different name for the extension type.
     hasPublishedDocs: true
   BUILT_IN_IDENTIFIER_AS_PREFIX_NAME:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -1606,6 +1672,7 @@
     correctionMessage: Try choosing a different name for the prefix.
     hasPublishedDocs: true
   BUILT_IN_IDENTIFIER_AS_TYPE_NAME:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -1613,6 +1680,7 @@
     correctionMessage: Try choosing a different name for the type.
     hasPublishedDocs: true
   BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -1620,6 +1688,7 @@
     correctionMessage: Try choosing a different name for the type parameter.
     hasPublishedDocs: true
   BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME:
+    type: compileTimeError
     parameters:
       String p0: the built-in identifier that is being used
     sharedName: BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -1627,6 +1696,7 @@
     correctionMessage: Try choosing a different name for the typedef.
     hasPublishedDocs: true
   CASE_BLOCK_NOT_TERMINATED:
+    type: compileTimeError
     parameters: none
     removedIn: "3.0"
     problemMessage: "The last statement of the 'case' should be 'break', 'continue', 'rethrow', 'return', or 'throw'."
@@ -1673,6 +1743,7 @@
       }
       ```
   CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS:
+    type: compileTimeError
     parameters:
       Type p0: the this of the switch case expression
     problemMessage: "The switch case expression type '#p0' can't override the '==' operator."
@@ -1775,6 +1846,7 @@
       }
       ```
   CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the case expression
       Type p1: the type of the switch expression
@@ -1828,6 +1900,7 @@
       }
       ```
   CAST_TO_NON_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the type
     problemMessage: "The name '#p0' isn't a type, so it can't be used in an 'as' expression."
@@ -1858,6 +1931,7 @@
       int y = x as int;
       ```
   CLASS_USED_AS_MIXIN:
+    type: compileTimeError
     parameters:
       String p0: the name of the class being used as a mixin
     problemMessage: "The class '#p0' can't be used as a mixin because it's neither a mixin class nor a mixin."
@@ -1894,6 +1968,7 @@
       class C with M {}
       ```
   CLASS_INSTANTIATION_ACCESS_TO_INSTANCE_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the member
     sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
@@ -1901,6 +1976,7 @@
     correctionMessage: Try changing the member name to the name of a constructor.
     hasPublishedDocs: false
   CLASS_INSTANTIATION_ACCESS_TO_UNKNOWN_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the class
       String p1: the name of the member
@@ -1909,6 +1985,7 @@
     correctionMessage: "Try invoking a different constructor, or defining a constructor named '#p1'."
     hasPublishedDocs: false
   CLASS_INSTANTIATION_ACCESS_TO_STATIC_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the member
     sharedName: CLASS_INSTANTIATION_ACCESS_TO_MEMBER
@@ -1916,6 +1993,7 @@
     correctionMessage: Try removing the type arguments from the class name, or changing the member name to the name of a constructor.
     hasPublishedDocs: false
   NON_CONST_GENERATIVE_ENUM_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: Generative enum constructors must be 'const'.
     correctionMessage: Try adding the keyword 'const'.
@@ -1951,6 +2029,7 @@
       }
       ```
   NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
     problemMessage: "Constant values from a deferred library can't be used as values in a 'const' list literal."
@@ -2014,23 +2093,27 @@
       var l = const [0];
       ```
   NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
     problemMessage: "Constant values from a deferred library can't be used as keys in a 'const' map literal."
     correctionMessage: "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import."
     hasPublishedDocs: true
   NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
     problemMessage: "Constant values from a deferred library can't be used as values in a 'const' map literal."
     correctionMessage: "Try removing the keyword 'const' from the map literal or removing the keyword 'deferred' from the import."
     hasPublishedDocs: true
   NON_CONSTANT_RECORD_FIELD_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used as fields in a 'const' record literal."
     correctionMessage: "Try removing the keyword 'const' from the record literal or removing the keyword 'deferred' from the import."
     hasPublishedDocs: false
   PATTERN_CONSTANT_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: Constant values from a deferred library can't be used in patterns.
     correctionMessage: Try removing the keyword 'deferred' from the import.
@@ -2114,6 +2197,7 @@
       }
       ```
   RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA_BY_TYPE:
+    type: compileTimeError
     parameters: none
     sharedName: RECORD_LITERAL_ONE_POSITIONAL_NO_TRAILING_COMMA
     problemMessage: "A record literal with exactly one positional field requires a trailing comma."
@@ -2125,12 +2209,14 @@
       it is reported at type analysis time, based on a type
       incompatibility, rather than at parse time.
   SET_ELEMENT_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
     problemMessage: "Constant values from a deferred library can't be used as values in a 'const' set literal."
     correctionMessage: "Try removing the keyword 'const' from the set literal or removing the keyword 'deferred' from the import."
     hasPublishedDocs: true
   CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Concrete classes can't have 'Enum' as a superinterface."
     correctionMessage: Try specifying a different interface, or remove it from the list.
@@ -2183,6 +2269,7 @@
       class B {}
       ```
   CONCRETE_CLASS_WITH_ABSTRACT_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the abstract method
       String p1: the name of the enclosing class
@@ -2227,6 +2314,7 @@
       }
       ```
   CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor and field
     sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
@@ -2267,6 +2355,7 @@
 
       Rename either the member or the constructor.
   CONFLICTING_CONSTRUCTOR_AND_STATIC_GETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor and getter
     sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
@@ -2274,6 +2363,7 @@
     correctionMessage: Try renaming either the constructor or the getter.
     hasPublishedDocs: true
   CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor
     sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
@@ -2281,6 +2371,7 @@
     correctionMessage: Try renaming either the constructor or the method.
     hasPublishedDocs: true
   CONFLICTING_CONSTRUCTOR_AND_STATIC_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor and setter
     sharedName: CONFLICTING_CONSTRUCTOR_AND_STATIC_MEMBER
@@ -2288,6 +2379,7 @@
     correctionMessage: Try renaming either the constructor or the setter.
     hasPublishedDocs: true
   CONFLICTING_FIELD_AND_METHOD:
+    type: compileTimeError
     parameters:
       String p0: the name of the class defining the conflicting field
       String p1: the name of the conflicting field
@@ -2300,6 +2392,7 @@
       error if `C` declares a getter or a setter with basename `n`, and has a
       method named `n`.
   CONFLICTING_GENERIC_INTERFACES:
+    type: compileTimeError
     parameters:
       String p0: the name of the kind of the element implementing the conflicting interface
       String p1: the name of the element implementing the conflicting interface
@@ -2340,6 +2433,7 @@
       class C extends A<String> implements B {}
       ```
   CONFLICTING_INHERITED_METHOD_AND_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the enclosing element kind - class, extension type, etc
       String p1: the name of the enclosing element
@@ -2351,6 +2445,7 @@
       error if the interface of `C` has an instance method named `n` and an
       instance setter with basename `n`.
   CONFLICTING_METHOD_AND_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the class defining the conflicting method
       String p1: the name of the conflicting method
@@ -2363,6 +2458,7 @@
       error if `C` declares a method named `n`, and has a getter or a setter
       with basename `n`.
   CONFLICTING_STATIC_AND_INSTANCE:
+    type: compileTimeError
     parameters:
       String p0: the name of the class defining the conflicting member
       String p1: the name of the conflicting static member
@@ -2375,6 +2471,7 @@
       error if `C` declares a static member with basename `n`, and has an
       instance member with basename `n`.
   CONFLICTING_TYPE_VARIABLE_AND_CLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
@@ -2405,6 +2502,7 @@
       class C<T> {}
       ```
   CONFLICTING_TYPE_VARIABLE_AND_ENUM:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
@@ -2412,6 +2510,7 @@
     correctionMessage: Try renaming either the type parameter or the enum.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_EXTENSION:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
@@ -2419,6 +2518,7 @@
     correctionMessage: Try renaming either the type parameter or the extension.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_EXTENSION_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
@@ -2426,6 +2526,7 @@
     correctionMessage: Try renaming either the type parameter or the extension.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_MIXIN:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_CONTAINER
@@ -2433,6 +2534,7 @@
     correctionMessage: Try renaming either the type parameter or the mixin.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
@@ -2467,6 +2569,7 @@
       }
       ```
   CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
@@ -2474,6 +2577,7 @@
     correctionMessage: Try renaming either the type parameter or the member.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_MEMBER_ENUM:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
@@ -2481,6 +2585,7 @@
     correctionMessage: Try renaming either the type parameter or the member.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
@@ -2488,6 +2593,7 @@
     correctionMessage: Try renaming either the type parameter or the member.
     hasPublishedDocs: true
   CONFLICTING_TYPE_VARIABLE_AND_MEMBER_EXTENSION_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
@@ -2495,27 +2601,30 @@
     correctionMessage: Try renaming either the type parameter or the member.
     hasPublishedDocs: true
   CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH:
+    type: compileTimeError
     parameters:
-      Object p0: the type of the runtime value of the argument
-      Object p1: the name of the field
-      Object p2: the type of the field
-    problemMessage: "In a const constructor, a value of type '#p0' can't be assigned to the field '#p1', which has type '#p2'."
+      Object valueType: the type of the runtime value of the argument
+      Object fieldName: the name of the field
+      Object fieldType: the type of the field
+    problemMessage: "In a const constructor, a value of type '#valueType' can't be assigned to the field '#fieldName', which has type '#fieldType'."
     correctionMessage: "Try using a subtype, or removing the keyword 'const'."
     hasPublishedDocs: false
     comment: |-
       16.12.2 Const: It is a compile-time error if evaluation of a constant
       object results in an uncaught exception being thrown.
   CONST_CONSTRUCTOR_CONSTANT_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     sharedName: COLLECTION_ELEMENT_FROM_DEFERRED_LIBRARY
     problemMessage: "Constant values from a deferred library can't be used as values in a 'const' constructor."
     correctionMessage: "Try removing the keyword 'const' from the constructor or removing the keyword 'deferred' from the import."
     hasPublishedDocs: true
   CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH:
+    type: compileTimeError
     parameters:
-      String p0: the type of the runtime value of the argument
-      String p1: the static type of the parameter
-    problemMessage: "A value of type '#p0' can't be assigned to a parameter of type '#p1' in a const constructor."
+      String valueType: the type of the runtime value of the argument
+      String parameterType: the static type of the parameter
+    problemMessage: "A value of type '#valueType' can't be assigned to a parameter of type '#parameterType' in a const constructor."
     correctionMessage: "Try using a subtype, or removing the keyword 'const'."
     hasPublishedDocs: true
     documentation: |-
@@ -2562,6 +2671,7 @@
       }
       ```
   CONST_CONSTRUCTOR_THROWS_EXCEPTION:
+    type: compileTimeError
     parameters: none
     problemMessage: "Const constructors can't throw exceptions."
     correctionMessage: "Try removing the throw statement, or removing the keyword 'const'."
@@ -2570,6 +2680,7 @@
       16.12.2 Const: It is a compile-time error if evaluation of a constant
       object results in an uncaught exception being thrown.
   CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST:
+    type: compileTimeError
     parameters:
       String p0: the name of the field
     problemMessage: "Can't define the 'const' constructor because the field '#p0' is initialized with a non-constant value."
@@ -2617,6 +2728,7 @@
       }
       ```
   CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the instance field.
     problemMessage: "This constructor can't be declared 'const' because a mixin adds the instance field: #p0."
@@ -2633,6 +2745,7 @@
       generative const constructor, and M does not declare any fields, Cq is
       also a const constructor.
   CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS:
+    type: compileTimeError
     parameters:
       String p0: the names of the instance fields.
     sharedName: CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD
@@ -2650,6 +2763,7 @@
       generative const constructor, and M does not declare any fields, Cq is
       also a const constructor.
   CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER:
+    type: compileTimeError
     parameters:
       String p0: the name of the superclass
     problemMessage: "A constant constructor can't call a non-constant super constructor of '#p0'."
@@ -2724,6 +2838,7 @@
       }
       ```
   CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Can't define a const constructor for a class with non-final fields."
     correctionMessage: "Try making all of the fields final, or removing the keyword 'const' from the constructor."
@@ -2771,6 +2886,7 @@
       }
       ```
   CONST_DEFERRED_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: "Deferred classes can't be created with 'const'."
     correctionMessage: "Try using 'new' to create the instance, or changing the import to not be deferred."
@@ -2817,38 +2933,46 @@
       const json2 = convert.JsonCodec();
       ```
   CONST_EVAL_ASSERTION_FAILURE:
+    type: compileTimeError
     parameters: none
     problemMessage: "The assertion in this constant expression failed."
     hasPublishedDocs: false
   CONST_EVAL_ASSERTION_FAILURE_WITH_MESSAGE:
+    type: compileTimeError
     parameters:
-      Object p0: the message of the assertion
-    problemMessage: "An assertion failed with message '#p0'."
+      Object message: the message of the assertion
+    problemMessage: "An assertion failed with message '#message'."
     hasPublishedDocs: false
   CONST_EVAL_EXTENSION_METHOD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension methods can't be used in constant expressions."
     hasPublishedDocs: false
   CONST_EVAL_EXTENSION_TYPE_METHOD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension type methods can't be used in constant expressions."
     hasPublishedDocs: false
   CONST_EVAL_FOR_ELEMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant expressions don't support 'for' elements."
     correctionMessage: "Try replacing the 'for' element with a spread, or removing 'const'."
     hasPublishedDocs: false
   CONST_EVAL_PROPERTY_ACCESS:
+    type: compileTimeError
     parameters:
-      String p0: the name of the property being accessed
-      String p1: the type with the property being accessed
-    problemMessage: "The property '#p0' can't be accessed on the type '#p1' in a constant expression."
+      String propertyName: the name of the property being accessed
+      String type: the type with the property being accessed
+    problemMessage: "The property '#propertyName' can't be accessed on the type '#type' in a constant expression."
     hasPublishedDocs: false
   CONST_EVAL_METHOD_INVOCATION:
+    type: compileTimeError
     parameters: none
     problemMessage: "Methods can't be invoked in constant expressions."
     hasPublishedDocs: false
   CONST_EVAL_THROWS_EXCEPTION:
+    type: compileTimeError
     parameters: none
     problemMessage: Evaluation of this constant expression throws an exception.
     hasPublishedDocs: false
@@ -2856,6 +2980,7 @@
       16.12.2 Const: It is a compile-time error if evaluation of a constant
       object results in an uncaught exception being thrown.
   CONST_EVAL_THROWS_IDBZE:
+    type: compileTimeError
     parameters: none
     problemMessage: Evaluation of this constant expression throws an IntegerDivisionByZeroException.
     hasPublishedDocs: false
@@ -2863,6 +2988,7 @@
       16.12.2 Const: It is a compile-time error if evaluation of a constant
       object results in an uncaught exception being thrown.
   CONST_EVAL_TYPE_BOOL:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'bool'."
     hasPublishedDocs: false
@@ -2871,6 +2997,7 @@
       for text about "An expression of the form !e1", "An expression of the form
       e1 && e2", and "An expression of the form e1 || e2".
   CONST_EVAL_TYPE_BOOL_INT:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'bool' or 'int'."
     hasPublishedDocs: false
@@ -2878,6 +3005,7 @@
       See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
       for text about "An expression of the form e1 & e2".
   CONST_EVAL_TYPE_BOOL_NUM_STRING:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'bool', 'num', 'String' or 'null'."
     hasPublishedDocs: false
@@ -2885,6 +3013,7 @@
       See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
       for text about "A literal string".
   CONST_EVAL_PRIMITIVE_EQUALITY:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of the equality operator must have primitive equality."
     hasPublishedDocs: false
@@ -2892,6 +3021,7 @@
       See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
       for text about "An expression of the form e1 == e2".
   CONST_EVAL_TYPE_INT:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'int'."
     hasPublishedDocs: false
@@ -2900,6 +3030,7 @@
       for text about "An expression of the form ~e1", "An expression of one of
       the forms e1 >> e2".
   CONST_EVAL_TYPE_NUM:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'num'."
     hasPublishedDocs: false
@@ -2907,6 +3038,7 @@
       See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
       for text about "An expression of the form e1 - e2".
   CONST_EVAL_TYPE_NUM_STRING:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'num' or 'String'."
     hasPublishedDocs: false
@@ -2914,14 +3046,17 @@
       See https://spec.dart.dev/DartLangSpecDraft.pdf#constants, "Constants",
       for text about "An expression of the form e1 + e2".
   CONST_EVAL_TYPE_STRING:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'String'."
     hasPublishedDocs: false
   CONST_EVAL_TYPE_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "In constant expressions, operands of this operator must be of type 'Type'."
     hasPublishedDocs: false
   CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE:
+    type: compileTimeError
     parameters: none
     problemMessage: Const variables must be initialized with a constant value.
     correctionMessage: Try changing the initializer to be a constant expression.
@@ -2961,6 +3096,7 @@
       final y = x;
       ```
   CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used to initialize a 'const' variable."
     correctionMessage: Try initializing the variable without referencing members of the deferred library, or changing the import to not be deferred.
@@ -3006,6 +3142,7 @@
       const pi = 3.14;
       ```
   CONST_INSTANCE_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: Only static fields can be declared as const.
     correctionMessage: "Try declaring the field as final, or adding the keyword 'static'."
@@ -3046,6 +3183,7 @@
       }
       ```
   CONST_MAP_KEY_NOT_PRIMITIVE_EQUALITY:
+    type: compileTimeError
     parameters:
       Type p0: the type of the entry's key
     problemMessage: "The type of a key in a constant map can't override the '==' operator, or 'hashCode', but the class '#p0' does."
@@ -3117,6 +3255,7 @@
       final map = {C() : 0};
       ```
   CONST_NOT_INITIALIZED:
+    type: compileTimeError
     parameters:
       String p0: the name of the uninitialized final variable
     problemMessage: "The constant '#p0' must be initialized."
@@ -3144,6 +3283,7 @@
       const c = 'c';
       ```
   CONST_SET_ELEMENT_NOT_PRIMITIVE_EQUALITY:
+    type: compileTimeError
     parameters:
       Type p0: the type of the element
     problemMessage: "An element in a constant set can't override the '==' operator, or 'hashCode', but the type '#p0' does."
@@ -3216,6 +3356,7 @@
       final set = {C()};
       ```
   CONST_SPREAD_EXPECTED_LIST_OR_SET:
+    type: compileTimeError
     parameters: none
     problemMessage: A list or a set is expected in this spread.
     hasPublishedDocs: true
@@ -3246,6 +3387,7 @@
       const List<int> list2 = [...list1];
       ```
   CONST_SPREAD_EXPECTED_MAP:
+    type: compileTimeError
     parameters: none
     problemMessage: A map is expected in this spread.
     hasPublishedDocs: true
@@ -3274,11 +3416,13 @@
       const Map<String, int> map2 = {...map1};
       ```
   CONST_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Type parameters can't be used in a constant expression."
     correctionMessage: Try replacing the type parameter with a different type.
     hasPublishedDocs: false
   CONST_WITH_NON_CONST:
+    type: compileTimeError
     parameters: none
     problemMessage: "The constructor being called isn't a const constructor."
     correctionMessage: "Try removing 'const' from the constructor invocation."
@@ -3326,6 +3470,7 @@
       A f() => A();
       ```
   CONST_WITH_NON_CONSTANT_ARGUMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: Arguments of a constant creation must be constant expressions.
     correctionMessage: "Try making the argument a valid constant, or use 'new' to call the constructor."
@@ -3361,6 +3506,7 @@
       C f(int i) => C(i);
       ```
   CONST_WITH_TYPE_PARAMETERS:
+    type: compileTimeError
     parameters: none
     problemMessage: "A constant creation can't use a type parameter as a type argument."
     correctionMessage: Try replacing the type parameter with a different type.
@@ -3410,18 +3556,21 @@
       C<T> newC<T>() => C<T>();
       ```
   CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF:
+    type: compileTimeError
     parameters: none
     sharedName: CONST_WITH_TYPE_PARAMETERS
     problemMessage: "A constant constructor tearoff can't use a type parameter as a type argument."
     correctionMessage: Try replacing the type parameter with a different type.
     hasPublishedDocs: true
   CONST_WITH_TYPE_PARAMETERS_FUNCTION_TEAROFF:
+    type: compileTimeError
     parameters: none
     sharedName: CONST_WITH_TYPE_PARAMETERS
     problemMessage: "A constant function tearoff can't use a type parameter as a type argument."
     correctionMessage: Try replacing the type parameter with a different type.
     hasPublishedDocs: true
   CONST_WITH_UNDEFINED_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       Object p0: the name of the type
       String p1: the name of the requested constant constructor
@@ -3432,6 +3581,7 @@
       16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
       a constant constructor declared by the type <i>T</i>.
   CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+    type: compileTimeError
     parameters:
       String p0: the name of the type
     problemMessage: "The class '#p0' doesn't have an unnamed constant constructor."
@@ -3441,6 +3591,7 @@
       16.12.2 Const: It is a compile-time error if <i>T.id</i> is not the name of
       a constant constructor declared by the type <i>T</i>.
   CONSTANT_PATTERN_WITH_NON_CONSTANT_EXPRESSION:
+    type: compileTimeError
     parameters: none
     problemMessage: The expression of a constant pattern must be a valid constant.
     correctionMessage: Try making the expression a valid constant.
@@ -3488,6 +3639,7 @@
       }
       ```
   CONTINUE_LABEL_INVALID:
+    type: compileTimeError
     parameters: none
     previousName: CONTINUE_LABEL_ON_SWITCH
     hasPublishedDocs: true
@@ -3517,12 +3669,14 @@
       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:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
       String p1: detail text explaining why the type could not be inferred
     problemMessage: "Couldn't infer type parameter '#p0'.#p1"
     hasPublishedDocs: false
   NEW_WITH_NON_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the non-type element
     sharedName: CREATION_WITH_NON_TYPE
@@ -3573,6 +3727,7 @@
       }
       ```
   CONST_WITH_NON_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the non-type element
     sharedName: CREATION_WITH_NON_TYPE
@@ -3581,6 +3736,7 @@
     isUnresolvedIdentifier: true
     hasPublishedDocs: true
   DEFAULT_LIST_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     removedIn: "3.2"
     problemMessage: "The default 'List' constructor isn't available when null safety is enabled."
@@ -3624,6 +3780,7 @@
       var l = List.generate(3, (i) => i);
       ```
   DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Default values aren't allowed in factory constructors that redirect to another constructor."
     correctionMessage: Try removing the default value.
@@ -3678,6 +3835,7 @@
       }
       ```
   DEFAULT_VALUE_ON_REQUIRED_PARAMETER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Required named parameters can't have a default value."
     correctionMessage: "Try removing either the default value or the 'required' modifier."
@@ -3713,6 +3871,7 @@
       void log({String message = 'no message'}) {}
       ```
   DEFERRED_IMPORT_OF_EXTENSION:
+    type: compileTimeError
     parameters: none
     problemMessage: Imports of deferred libraries must hide all extensions.
     correctionMessage: Try adding either a show combinator listing the names you need to reference or a hide combinator listing all of the extensions.
@@ -3792,6 +3951,7 @@
       }
       ```
   DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE:
+    type: compileTimeError
     parameters:
       String p0: the name of the variable that is invalid
     problemMessage: "The late local variable '#p0' is definitely unassigned at this point."
@@ -3828,6 +3988,7 @@
       }
       ```
   DISALLOWED_TYPE_INSTANTIATION_EXPRESSION:
+    type: compileTimeError
     parameters: none
     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.
@@ -3868,6 +4029,7 @@
       }
       ```
   DUPLICATE_CONSTRUCTOR_NAME:
+    type: compileTimeError
     parameters:
       String p0: the name of the duplicate entity
     sharedName: DUPLICATE_CONSTRUCTOR
@@ -3875,6 +4037,7 @@
     correctionMessage: Try renaming one of the constructors.
     hasPublishedDocs: true
   DOT_SHORTHAND_MISSING_CONTEXT:
+    type: compileTimeError
     parameters: none
     experiment: dot-shorthands
     problemMessage: "A dot shorthand can't be used where there is no context type."
@@ -3925,6 +4088,7 @@
       enum E {a, b}
       ```
   DOT_SHORTHAND_UNDEFINED_GETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the static getter
       String p1: the name of the enclosing type where the getter is being looked for
@@ -3979,6 +4143,7 @@
       enum E {a, b}
       ```
   DOT_SHORTHAND_UNDEFINED_INVOCATION:
+    type: compileTimeError
     parameters:
       String p0: the name of the static method or constructor
       String p1: the name of the enclosing type where the method or constructor is being looked for
@@ -3988,6 +4153,7 @@
     correctionMessage: "Try correcting the name to the name of an existing static method or constructor, or defining a static method or constructor named '#p0'."
     hasPublishedDocs: true
   DUPLICATE_CONSTRUCTOR_DEFAULT:
+    type: compileTimeError
     parameters: none
     sharedName: DUPLICATE_CONSTRUCTOR
     problemMessage: The unnamed constructor is already defined.
@@ -4066,6 +4232,7 @@
       }
       ```
   DUPLICATE_DEFINITION:
+    type: compileTimeError
     parameters:
       Object p0: the name of the duplicate entity
     problemMessage: "The name '#p0' is already defined."
@@ -4096,6 +4263,7 @@
       int y = 1;
       ```
   DUPLICATE_FIELD_NAME:
+    type: compileTimeError
     parameters:
       Object p0: the duplicated name
     problemMessage: The field name '#p0' is already used in this record.
@@ -4133,6 +4301,7 @@
       var r = (a: 1, b: 2);
       ```
   DUPLICATE_FIELD_FORMAL_PARAMETER:
+    type: compileTimeError
     parameters:
       Object p0: the name of the field
     problemMessage: "The field '#p0' can't be initialized by multiple parameters in the same constructor."
@@ -4171,6 +4340,7 @@
       }
       ```
   DUPLICATE_NAMED_ARGUMENT:
+    type: compileTimeError
     parameters:
       String p0: the name of the parameter that was duplicated
     problemMessage: "The argument for the named parameter '#p0' was already specified."
@@ -4223,6 +4393,7 @@
       }
       ```
   DUPLICATE_PART:
+    type: compileTimeError
     parameters:
       Uri p0: the URI of the duplicate part
     problemMessage: "The library already contains a part with the URI '#p0'."
@@ -4259,6 +4430,7 @@
       part 'part.dart';
       ```
   DUPLICATE_PATTERN_ASSIGNMENT_VARIABLE:
+    type: compileTimeError
     parameters:
       Object p0: the name of the variable
     problemMessage: The variable '#p0' is already assigned in this pattern.
@@ -4307,6 +4479,7 @@
       }
       ```
   DUPLICATE_PATTERN_FIELD:
+    type: compileTimeError
     parameters:
       Object p0: the name of the field
     problemMessage: The field '#p0' is already matched in this pattern.
@@ -4374,6 +4547,7 @@
       }
       ```
   DUPLICATE_REST_ELEMENT_IN_PATTERN:
+    type: compileTimeError
     parameters: none
     problemMessage: At most one rest element is allowed in a list or map pattern.
     correctionMessage: Try removing the duplicate rest element.
@@ -4407,6 +4581,7 @@
       }
       ```
   DUPLICATE_VARIABLE_PATTERN:
+    type: compileTimeError
     parameters:
       Object p0: the name of the variable
     problemMessage: The variable '#p0' is already defined in this pattern.
@@ -4456,6 +4631,7 @@
       }
       ```
   EMPTY_MAP_PATTERN:
+    type: compileTimeError
     parameters: none
     problemMessage: A map pattern must have at least one entry.
     correctionMessage: Try replacing it with an object pattern 'Map()'.
@@ -4496,11 +4672,13 @@
       }
       ```
   ENUM_CONSTANT_INVOKES_FACTORY_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "An enum value can't invoke a factory constructor."
     correctionMessage: Try using a generative constructor.
     hasPublishedDocs: false
   ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING:
+    type: compileTimeError
     parameters: none
     problemMessage: "The name of the enum value can't be the same as the enum's name."
     correctionMessage: Try renaming the constant.
@@ -4540,6 +4718,7 @@
       }
       ```
   ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     removedIn: "3.3"
     problemMessage: The invoked constructor isn't a 'const' constructor.
@@ -4579,11 +4758,13 @@
       }
       ```
   ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED:
+    type: compileTimeError
     parameters: none
     problemMessage: The result of instantiating the enum to bounds is not well-bounded.
     correctionMessage: Try using different bounds for type parameters.
     hasPublishedDocs: false
   ENUM_MIXIN_WITH_INSTANCE_VARIABLE:
+    type: compileTimeError
     parameters: none
     problemMessage: Mixins applied to enums can't have instance variables.
     correctionMessage: Try replacing the instance variables with getters.
@@ -4634,6 +4815,7 @@
       }
       ```
   ENUM_WITH_ABSTRACT_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the abstract method
       String p1: the name of the enclosing enum
@@ -4672,6 +4854,7 @@
       }
       ```
   ENUM_WITH_NAME_VALUES:
+    type: compileTimeError
     parameters: none
     problemMessage: The name 'values' is not a valid name for an enum.
     correctionMessage: Try using a different name.
@@ -4698,11 +4881,13 @@
 
       Rename the enum to something other than `values`.
   ENUM_WITHOUT_CONSTANTS:
+    type: compileTimeError
     parameters: none
     problemMessage: The enum must have at least one enum constant.
     correctionMessage: Try declaring an enum constant.
     hasPublishedDocs: false
   EQUAL_ELEMENTS_IN_CONST_SET:
+    type: compileTimeError
     parameters: none
     problemMessage: "Two elements in a constant set literal can't be equal."
     correctionMessage: Change or remove the duplicate element.
@@ -4735,6 +4920,7 @@
       of which element to remove might affect the order in which elements are
       returned by an iterator.
   EQUAL_KEYS_IN_CONST_MAP:
+    type: compileTimeError
     parameters: none
     problemMessage: "Two keys in a constant map literal can't be equal."
     correctionMessage: Change or remove the duplicate key.
@@ -4776,6 +4962,7 @@
       of which entry to remove might affect the order in which keys and values
       are returned by an iterator.
   EQUAL_KEYS_IN_MAP_PATTERN:
+    type: compileTimeError
     parameters: none
     problemMessage: Two keys in a map pattern can't be equal.
     correctionMessage: Change or remove the duplicate key.
@@ -4817,6 +5004,7 @@
       }
       ```
   EXPECTED_ONE_LIST_PATTERN_TYPE_ARGUMENTS:
+    type: compileTimeError
     parameters:
       int p0: the number of provided type arguments
     problemMessage: "List patterns require one type argument or none, but #p0 found."
@@ -4850,6 +5038,7 @@
       }
       ```
   EXPECTED_ONE_LIST_TYPE_ARGUMENTS:
+    type: compileTimeError
     parameters:
       int p0: the number of provided type arguments
     problemMessage: "List literals require one type argument or none, but #p0 found."
@@ -4878,6 +5067,7 @@
       var l = <int>[];
       ```
   EXPECTED_ONE_SET_TYPE_ARGUMENTS:
+    type: compileTimeError
     parameters:
       int p0: the number of provided type arguments
     problemMessage: "Set literals require one type argument or none, but #p0 were found."
@@ -4906,6 +5096,7 @@
       var s = <int>{0, 1};
       ```
   EXPECTED_TWO_MAP_TYPE_ARGUMENTS:
+    type: compileTimeError
     parameters:
       int p0: the number of provided type arguments
     problemMessage: "Map literals require two type arguments or none, but #p0 found."
@@ -4934,6 +5125,7 @@
       var m = <int, String>{};
       ```
   EXPECTED_TWO_MAP_PATTERN_TYPE_ARGUMENTS:
+    type: compileTimeError
     parameters:
       int p0: the number of provided type arguments
     problemMessage: "Map patterns require two type arguments or none, but #p0 found."
@@ -4968,6 +5160,7 @@
       }
       ```
   EXPORT_INTERNAL_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a library
     problemMessage: "The library '#p0' is internal and can't be exported."
@@ -4991,6 +5184,7 @@
 
       Remove the export directive.
   EXPORT_LEGACY_SYMBOL:
+    type: compileTimeError
     parameters:
       Object p0: the name of a symbol defined in a legacy library
     removedIn: "3.0"
@@ -5044,6 +5238,7 @@
       combinator to the export directive in your library that hides all of the
       names declared in the opted-out library.
   EXPORT_OF_NON_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a non-library declaration
     problemMessage: "The exported library '#p0' can't have a part-of directive."
@@ -5078,6 +5273,7 @@
       Either remove the export directive, or change the URI to be the URI of the
       library containing the part.
   EXPRESSION_IN_MAP:
+    type: compileTimeError
     parameters: none
     problemMessage: "Expressions can't be used in a map literal."
     correctionMessage: Try removing the expression or converting it to be a map entry.
@@ -5106,6 +5302,7 @@
       var map = <String, int>{'a': 0, 'b': 1, 'c': 2};
       ```
   EXTENDS_NON_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: Classes can only extend other classes.
     correctionMessage: Try specifying a different superclass, or removing the extends clause.
@@ -5149,6 +5346,7 @@
       class C {}
       ```
   EXTENSION_AS_EXPRESSION:
+    type: compileTimeError
     parameters:
       String p0: the name of the extension
     problemMessage: "Extension '#p0' can't be used as an expression."
@@ -5189,6 +5387,7 @@
       var x = E.m();
       ```
   EXTENSION_CONFLICTING_STATIC_AND_INSTANCE:
+    type: compileTimeError
     parameters:
       String p0: the name of the conflicting static member
     problemMessage: "An extension can't define static member '#p0' and an instance member with the same name."
@@ -5226,6 +5425,7 @@
       }
       ```
   EXTENSION_DECLARES_INSTANCE_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extensions can't declare instance fields."
     correctionMessage: Try replacing the field with a getter.
@@ -5284,6 +5484,7 @@
       ```
 
   EXTENSION_DECLARES_MEMBER_OF_OBJECT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extensions can't declare members with the same name as a member declared by 'Object'."
     correctionMessage: Try specifying a different name for the member.
@@ -5318,6 +5519,7 @@
       }
       ```
   EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER:
+    type: compileTimeError
     parameters: none
     problemMessage: "An extension override can't be used to access a static member from an extension."
     correctionMessage: Try using just the name of the extension.
@@ -5358,6 +5560,7 @@
       }
       ```
   EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the argument
       Type p1: the extended type
@@ -5402,6 +5605,7 @@
       then either replace the name of the extension or unwrap the argument so
       that the correct extension is found.
   EXTENSION_OVERRIDE_WITHOUT_ACCESS:
+    type: compileTimeError
     parameters: none
     problemMessage: An extension override can only be used to access instance members.
     correctionMessage: Consider adding an access to an instance member.
@@ -5456,6 +5660,7 @@
       }
       ```
   EXTENSION_OVERRIDE_WITH_CASCADE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension overrides have no value so they can't be used as the receiver of a cascade expression."
     correctionMessage: "Try using '.' instead of '..'."
@@ -5498,6 +5703,7 @@
       If there are multiple cascaded accesses, you'll need to duplicate the
       extension override for each one.
   EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_FORMAL_PARAMETER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension type constructors can't declare super formal parameters."
     correctionMessage: Try removing the super formal parameter declaration.
@@ -5539,6 +5745,7 @@
       }
       ```
   EXTENSION_TYPE_CONSTRUCTOR_WITH_SUPER_INVOCATION:
+    type: compileTimeError
     parameters: none
     problemMessage: Extension type constructors can't include super initializers.
     correctionMessage: Try removing the super constructor invocation.
@@ -5572,6 +5779,7 @@
       }
       ```
   EXTENSION_TYPE_DECLARES_INSTANCE_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension types can't declare instance fields."
     correctionMessage: Try replacing the field with a getter.
@@ -5616,6 +5824,7 @@
       }
       ```
   EXTENSION_TYPE_DECLARES_MEMBER_OF_OBJECT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension types can't declare members with the same name as a member declared by 'Object'."
     correctionMessage: Try specifying a different name for the member.
@@ -5656,6 +5865,7 @@
       extension type E(int i) {}
       ```
   EXTENSION_TYPE_IMPLEMENTS_DISALLOWED_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the display string of the disallowed type
     problemMessage: "Extension types can't implement '#p0'."
@@ -5684,6 +5894,7 @@
       extension type A(int i) {}
       ```
   EXTENSION_TYPE_IMPLEMENTS_ITSELF:
+    type: compileTimeError
     parameters: none
     problemMessage: "The extension type can't implement itself."
     correctionMessage: Try removing the superinterface that references this extension type.
@@ -5723,6 +5934,7 @@
       extension type B(int i) {}
       ```
   EXTENSION_TYPE_IMPLEMENTS_NOT_SUPERTYPE:
+    type: compileTimeError
     parameters:
       Type p0: the implemented not extension type
       Type p1: the ultimate representation type
@@ -5761,6 +5973,7 @@
       extension type A(String s) implements String {}
       ```
   EXTENSION_TYPE_IMPLEMENTS_REPRESENTATION_NOT_SUPERTYPE:
+    type: compileTimeError
     parameters:
       Type p0: the representation type of the implemented extension type
       String p1: the name of the implemented extension type
@@ -5809,6 +6022,7 @@
       extension type B(String s) {}
       ```
   EXTENSION_TYPE_INHERITED_MEMBER_CONFLICT:
+    type: compileTimeError
     parameters:
       String p0: the name of the extension type
       String p1: the name of the conflicting member
@@ -5872,6 +6086,7 @@
       extension type C(A a) implements A, B {}
       ```
   EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF:
+    type: compileTimeError
     parameters: none
     problemMessage: "The extension type representation can't depend on itself."
     correctionMessage: Try specifying a different type.
@@ -5917,6 +6132,7 @@
       extension type A(String s) {}
       ```
   EXTENSION_TYPE_REPRESENTATION_TYPE_BOTTOM:
+    type: compileTimeError
     parameters: none
     problemMessage: "The representation type can't be a bottom type."
     correctionMessage: Try specifying a different type.
@@ -5946,6 +6162,7 @@
       extension type E(String s) {}
       ```
   EXTENSION_TYPE_WITH_ABSTRACT_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the abstract method
       String p1: the name of the enclosing extension type
@@ -5988,6 +6205,7 @@
       extension type E(String s) {}
       ```
   EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER:
+    type: compileTimeError
     parameters: none
     sharedName: EXTERNAL_WITH_INITIALIZER
     problemMessage: External fields can't have initializers.
@@ -6038,18 +6256,21 @@
       }
       ```
   EXTERNAL_FIELD_INITIALIZER:
+    type: compileTimeError
     parameters: none
     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:
+    type: compileTimeError
     parameters: none
     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:
+    type: compileTimeError
     parameters:
       int p0: the maximum number of positional arguments
       int p1: the actual number of positional arguments given
@@ -6085,6 +6306,7 @@
       }
       ```
   EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED:
+    type: compileTimeError
     parameters:
       int p0: the maximum number of positional arguments
       int p1: the actual number of positional arguments given
@@ -6133,6 +6355,7 @@
       }
       ```
   FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS:
+    type: compileTimeError
     parameters:
       String p0: the name of the field being initialized multiple times
     problemMessage: "The field '#p0' can't be initialized twice in the same constructor."
@@ -6170,6 +6393,7 @@
       }
       ```
   FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION:
+    type: compileTimeError
     parameters: none
     problemMessage: "Fields can't be initialized in the constructor if they are final and were already initialized at their declaration."
     correctionMessage: Try removing one of the initializations.
@@ -6217,6 +6441,7 @@
       }
       ```
   FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Fields can't be initialized in both the parameter list and the initializers."
     correctionMessage: Try removing one of the initializations.
@@ -6276,6 +6501,7 @@
       }
       ```
   FIELD_INITIALIZER_FACTORY_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Initializing formal parameters can't be used in factory constructors."
     correctionMessage: Try using a normal parameter.
@@ -6312,6 +6538,7 @@
       }
       ```
   FIELD_INITIALIZER_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the name of the type of the initializer expression
       Type p1: the name of the type of the field
@@ -6361,6 +6588,7 @@
       }
       ```
   CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the name of the type of the initializer expression
       Type p1: the name of the type of the field
@@ -6369,6 +6597,7 @@
     correctionMessage: "Try using a subtype, or removing the 'const' keyword"
     hasPublishedDocs: true
   FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "The redirecting constructor can't have a field initializer."
     correctionMessage: Try initializing the field in the constructor being redirected to.
@@ -6439,6 +6668,7 @@
       }
       ```
   FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the name of the type of the field formal parameter
       Type p1: the name of the type of the field
@@ -6504,24 +6734,28 @@
       }
       ```
   FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the name of the final class being extended.
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
     problemMessage: "The class '#p0' can't be extended outside of its library because it's a final class."
     hasPublishedDocs: true
   FINAL_CLASS_IMPLEMENTED_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the name of the final class being implemented.
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
     problemMessage: "The class '#p0' can't be implemented outside of its library because it's a final class."
     hasPublishedDocs: true
   FINAL_CLASS_USED_AS_MIXIN_CONSTRAINT_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the name of the final class being used as a mixin superclass constraint.
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
     problemMessage: "The class '#p0' can't be used as a mixin superclass constraint outside of its library because it's a final class."
     hasPublishedDocs: true
   FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the field in question
     problemMessage: "'#p0' is final and was given a value when it was declared, so it can't be set to a new value."
@@ -6570,6 +6804,7 @@
       }
       ```
   FINAL_NOT_INITIALIZED:
+    type: compileTimeError
     parameters:
       String p0: the name of the uninitialized final variable
     problemMessage: "The final variable '#p0' must be initialized."
@@ -6619,6 +6854,7 @@
       }
       ```
   FINAL_NOT_INITIALIZED_CONSTRUCTOR_1:
+    type: compileTimeError
     parameters:
       String p0: the name of the uninitialized final variable
     sharedName: FINAL_NOT_INITIALIZED_CONSTRUCTOR
@@ -6708,6 +6944,7 @@
       }
       ```
   FINAL_NOT_INITIALIZED_CONSTRUCTOR_2:
+    type: compileTimeError
     parameters:
       String p0: the name of the uninitialized final variable
       String p1: the name of the uninitialized final variable
@@ -6716,6 +6953,7 @@
     correctionMessage: Try adding initializers for the fields.
     hasPublishedDocs: true
   FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS:
+    type: compileTimeError
     parameters:
       String p0: the name of the uninitialized final variable
       String p1: the name of the uninitialized final variable
@@ -6725,6 +6963,7 @@
     correctionMessage: Try adding initializers for the fields.
     hasPublishedDocs: true
   FOR_IN_OF_INVALID_ELEMENT_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the iterable expression.
       String p1: the sequence type -- Iterable for `for` or Stream for `await for`.
@@ -6776,6 +7015,7 @@
       }
       ```
   FOR_IN_OF_INVALID_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the iterable expression.
       String p1: the sequence type -- Iterable for `for` or Stream for `await for`.
@@ -6812,6 +7052,7 @@
       }
       ```
   FOR_IN_WITH_CONST_VARIABLE:
+    type: compileTimeError
     parameters: none
     problemMessage: "A for-in loop variable can't be a 'const'."
     correctionMessage: "Try removing the 'const' modifier from the variable, or use a different variable."
@@ -6852,6 +7093,7 @@
       }
       ```
   GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND:
+    type: compileTimeError
     parameters: none
     problemMessage: "Generic function types can't be used as type parameter bounds."
     correctionMessage: Try making the free variable in the function type part of the larger declaration signature.
@@ -6860,6 +7102,7 @@
       It is a compile-time error if a generic function type is used as a bound
       for a formal type parameter of a class or a function.
   GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: "A generic function type can't be a type argument."
     correctionMessage: "Try removing type parameters from the generic function type, or using 'dynamic' as the type argument here."
@@ -6868,6 +7111,7 @@
       It is a compile-time error if a generic function type is used as an actual
       type argument.
   GENERIC_METHOD_TYPE_INSTANTIATION_ON_DYNAMIC:
+    type: compileTimeError
     parameters: none
     problemMessage: "A method tear-off on a receiver whose type is 'dynamic' can't have type arguments."
     correctionMessage: Specify the type of the receiver, or remove the type arguments from the method tear-off.
@@ -6912,6 +7156,7 @@
       }
       ```
   GETTER_NOT_ASSIGNABLE_SETTER_TYPES:
+    type: compileTimeError
     parameters:
       Object p0: the name of the getter
       Object p1: the type of the getter
@@ -6921,6 +7166,7 @@
     correctionMessage: Try changing the types so that they are compatible.
     hasPublishedDocs: false
   GETTER_NOT_SUBTYPE_SETTER_TYPES:
+    type: compileTimeError
     parameters:
       Object p0: the name of the getter
       Object p1: the type of the getter
@@ -6975,11 +7221,13 @@
       }
       ```
   IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used as values in an if condition inside a const collection literal."
     correctionMessage: Try making the deferred import non-deferred.
     hasPublishedDocs: false
   ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Functions marked 'async*' must have a return type that is a supertype of 'Stream<T>' for some type 'T'."
     correctionMessage: "Try fixing the return type of the function, or removing the modifier 'async*' from the function body."
@@ -7016,6 +7264,7 @@
       int f() => 0;
       ```
   ILLEGAL_ASYNC_RETURN_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Functions marked 'async' must have a return type which is a supertype of 'Future'."
     correctionMessage: "Try fixing the return type of the function, or removing the modifier 'async' from the function body."
@@ -7056,6 +7305,7 @@
       int f() => 0;
       ```
   ILLEGAL_ENUM_VALUES_DECLARATION:
+    type: compileTimeError
     parameters: none
     sharedName: ILLEGAL_ENUM_VALUES
     problemMessage: An instance member named 'values' can't be declared in a class that implements 'Enum'.
@@ -7100,6 +7350,7 @@
       }
       ```
   ILLEGAL_ENUM_VALUES_INHERITANCE:
+    type: compileTimeError
     parameters:
       String p0: the name of the class that declares 'values'
     sharedName: ILLEGAL_ENUM_VALUES
@@ -7107,12 +7358,14 @@
     correctionMessage: Try using a different name.
     hasPublishedDocs: true
   ILLEGAL_LANGUAGE_VERSION_OVERRIDE:
+    type: compileTimeError
     parameters:
       String p0: the required language version
     problemMessage: "The language version must be #p0."
     correctionMessage: Try removing the language version override and migrating the code.
     hasPublishedDocs: false
   ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION:
+    type: compileTimeError
     parameters:
       String p0: the name of member that cannot be declared
     sharedName: ILLEGAL_CONCRETE_ENUM_MEMBER
@@ -7182,6 +7435,7 @@
       }
       ```
   ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE:
+    type: compileTimeError
     parameters:
       String p0: the name of member that cannot be inherited
       String p1: the name of the class that declares the member
@@ -7190,6 +7444,7 @@
     correctionMessage: Try using a different name.
     hasPublishedDocs: true
   ILLEGAL_SYNC_GENERATOR_RETURN_TYPE:
+    type: compileTimeError
     parameters: none
     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."
@@ -7227,6 +7482,7 @@
       int f() => 0;
       ```
   IMPLEMENTS_NON_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: Classes and mixins can only implement other classes and mixins.
     correctionMessage: Try specifying a class or mixin, or remove the name from the list.
@@ -7262,6 +7518,7 @@
       of an existing class or mixin, or remove the name from the `implements`
       clause.
   IMPLEMENTS_REPEATED:
+    type: compileTimeError
     parameters:
       String p0: the name of the interface that is implemented more than once
     problemMessage: "'#p0' can only be implemented once."
@@ -7292,6 +7549,7 @@
       class B implements A {}
       ```
   IMPLEMENTS_SUPER_CLASS:
+    type: compileTimeError
     parameters:
       Element p0: the name of the class that appears in both "extends" and "implements" clauses
     problemMessage: "'#p0' can't be used in both the 'extends' and 'implements' clauses."
@@ -7344,6 +7602,7 @@
       class B implements A {}
       ```
   IMPLICIT_THIS_REFERENCE_IN_INITIALIZER:
+    type: compileTimeError
     parameters:
       String p0: the name of the instance member
     problemMessage: "The instance member '#p0' can't be accessed in an initializer."
@@ -7397,6 +7656,7 @@
       }
       ```
   IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS:
+    type: compileTimeError
     parameters:
       Type p0: the name of the superclass
     problemMessage: The implicitly invoked unnamed constructor from '#p0' has required parameters.
@@ -7483,6 +7743,7 @@
       }
       ```
   IMPORT_INTERNAL_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a library
     problemMessage: "The library '#p0' is internal and can't be imported."
@@ -7506,6 +7767,7 @@
 
       Remove the import directive.
   IMPORT_OF_NON_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a non-library declaration
     problemMessage: "The imported library '#p0' can't have a part-of directive."
@@ -7540,6 +7802,7 @@
       Import the library that contains the [part file][] rather than the
       [part file][] itself.
   INCONSISTENT_CASE_EXPRESSION_TYPES:
+    type: compileTimeError
     parameters:
       Object p0: the expression source code that is the unexpected type
       Object p1: the name of the expected type
@@ -7550,6 +7813,7 @@
       <i>e<sub>k</sub></i> are not instances of the same class <i>C</i>, for all
       <i>1 &lt;= k &lt;= n</i>.
   INCONSISTENT_INHERITANCE:
+    type: compileTimeError
     parameters:
       String p0: the name of the instance member with inconsistent inheritance.
       String p1: the list of all inherited signatures for this member.
@@ -7601,6 +7865,7 @@
       }
       ```
   INCONSISTENT_INHERITANCE_GETTER_AND_METHOD:
+    type: compileTimeError
     parameters:
       String p0: the name of the instance member with inconsistent inheritance.
       String p1: the name of the superinterface that declares the name as a getter.
@@ -7615,6 +7880,7 @@
       a compile-time error if `m` is a method and `m'` is a getter, or if `m`
       is a getter and `m'` is a method.
   INCONSISTENT_LANGUAGE_VERSION_OVERRIDE:
+    type: compileTimeError
     parameters: none
     problemMessage: Parts must have exactly the same language version override as the library.
     hasPublishedDocs: true
@@ -7658,6 +7924,7 @@
       the code in the [part file][] to be consistent with the new language
       version.
   INCONSISTENT_PATTERN_VARIABLE_LOGICAL_OR:
+    type: compileTimeError
     parameters:
       String p0: the name of the pattern variable
     problemMessage: "The variable '#p0' has a different type and/or finality in this branch of the logical-or pattern."
@@ -7737,6 +8004,7 @@
       }
       ```
   INITIALIZER_FOR_NON_EXISTENT_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the initializing formal that is not an instance variable in the immediately enclosing class
     problemMessage: "'#p0' isn't a field in the enclosing class."
@@ -7787,6 +8055,7 @@
       }
       ```
   INITIALIZER_FOR_STATIC_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the initializing formal that is a static variable in the immediately enclosing class
     problemMessage: "'#p0' is a static field in the enclosing class. Fields initialized in a constructor can't be static."
@@ -7845,6 +8114,7 @@
       }
       ```
   INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the initializing formal that is not an instance variable in the immediately enclosing class
     problemMessage: "'#p0' isn't a field in the enclosing class."
@@ -7917,6 +8187,7 @@
       }
       ```
   INSTANCE_ACCESS_TO_STATIC_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the static member
       String p1: the kind of the static member (field, getter, setter, or method)
@@ -7960,6 +8231,7 @@
       }
       ```
   INSTANCE_ACCESS_TO_STATIC_MEMBER_OF_UNNAMED_EXTENSION:
+    type: compileTimeError
     parameters:
       Object p0: the name of the static member
       Object p1: the kind of the static member (field, getter, setter, or method)
@@ -7967,6 +8239,7 @@
     problemMessage: "The static #p1 '#p0' can't be accessed through an instance."
     hasPublishedDocs: true
   INSTANCE_MEMBER_ACCESS_FROM_FACTORY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Instance members can't be accessed from a factory constructor."
     correctionMessage: Try removing the reference to the instance member.
@@ -8011,6 +8284,7 @@
       }
       ```
   INSTANCE_MEMBER_ACCESS_FROM_STATIC:
+    type: compileTimeError
     parameters: none
     problemMessage: "Instance members can't be accessed from a static method."
     correctionMessage: "Try removing the reference to the instance member, or removing the keyword 'static' from the method."
@@ -8064,6 +8338,7 @@
       }
       ```
   INSTANTIATE_ABSTRACT_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: "Abstract classes can't be instantiated."
     correctionMessage: Try creating an instance of a concrete subtype.
@@ -8092,6 +8367,7 @@
       If there's a concrete subclass of the abstract class that can be used, then
       create an instance of the concrete subclass.
   INSTANTIATE_ENUM:
+    type: compileTimeError
     parameters: none
     problemMessage: "Enums can't be instantiated."
     correctionMessage: Try using one of the defined constants.
@@ -8129,6 +8405,7 @@
 
       If you intend to use an instance of a class, then use the name of that class in place of the name of the enum.
   INSTANTIATE_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Type aliases that expand to a type parameter can't be instantiated."
     correctionMessage: Try replacing it with a class.
@@ -8172,6 +8449,7 @@
       }
       ```
   INTEGER_LITERAL_IMPRECISE_AS_DOUBLE:
+    type: compileTimeError
     parameters:
       String p0: the lexeme of the integer
       String p1: the closest valid double
@@ -8211,6 +8489,7 @@
       double x = 9223372036854775808;
       ```
   INTEGER_LITERAL_OUT_OF_RANGE:
+    type: compileTimeError
     parameters:
       String p0: the value of the literal
     problemMessage: "The integer literal #p0 can't be represented in 64 bits."
@@ -8241,12 +8520,14 @@
       var x = BigInt.parse('9223372036854775810');
       ```
   INTERFACE_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the name of the interface class being extended.
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
     problemMessage: "The class '#p0' can't be extended outside of its library because it's an interface class."
     hasPublishedDocs: true
   INVALID_ANNOTATION:
+    type: compileTimeError
     parameters: none
     problemMessage: Annotation must be either a const variable reference or const constructor invocation.
     hasPublishedDocs: true
@@ -8318,6 +8599,7 @@
       }
       ```
   INVALID_ANNOTATION_CONSTANT_VALUE_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used in annotations."
     correctionMessage: "Try moving the constant from the deferred library, or removing 'deferred' from the import."
@@ -8370,6 +8652,7 @@
       is appropriate, then use that constant in place of the constant from the
       deferred library.
   INVALID_ANNOTATION_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used as annotations."
     correctionMessage: Try removing the annotation, or changing the import to not be deferred.
@@ -8418,6 +8701,7 @@
       void f() {}
       ```
   INVALID_ASSIGNMENT:
+    type: compileTimeError
     parameters:
       Type p0: the name of the right hand side type
       Type p1: the name of the left hand side type
@@ -8463,6 +8747,7 @@
       int s = i;
       ```
   INVALID_CAST_FUNCTION:
+    type: compileTimeError
     parameters:
       Object p0: the name of the function
       Object p1: the type of the function
@@ -8472,6 +8757,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_FUNCTION_EXPR:
+    type: compileTimeError
     parameters:
       Object p0: the type of the torn-off function expression
       Object p1: the expected function type
@@ -8480,6 +8766,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_LITERAL:
+    type: compileTimeError
     parameters:
       Object p0: the lexeme of the literal
       Object p1: the type of the literal
@@ -8489,6 +8776,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_LITERAL_LIST:
+    type: compileTimeError
     parameters:
       Object p0: the type of the list literal
       Object p1: the expected type
@@ -8497,6 +8785,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_LITERAL_MAP:
+    type: compileTimeError
     parameters:
       Object p0: the type of the map literal
       Object p1: the expected type
@@ -8505,6 +8794,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_LITERAL_SET:
+    type: compileTimeError
     parameters:
       Object p0: the type of the set literal
       Object p1: the expected type
@@ -8513,6 +8803,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_METHOD:
+    type: compileTimeError
     parameters:
       Object p0: the name of the torn-off method
       Object p1: the type of the torn-off method
@@ -8522,6 +8813,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CAST_NEW_EXPR:
+    type: compileTimeError
     parameters:
       Object p0: the type of the instantiated object
       Object p1: the expected type
@@ -8530,6 +8822,7 @@
     comment: |-
       This error is only reported in libraries which are not null safe.
   INVALID_CONSTANT:
+    type: compileTimeError
     parameters: none
     problemMessage: Invalid constant value.
     hasPublishedDocs: false
@@ -8540,6 +8833,7 @@
 
       See TODOs in ConstantVisitor
   INVALID_EXTENSION_ARGUMENT_COUNT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Extension overrides must have exactly one argument: the value of 'this' in the extension method."
     correctionMessage: Try specifying exactly one argument.
@@ -8593,6 +8887,7 @@
       }
       ```
   INVALID_FACTORY_NAME_NOT_A_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: The name of a factory constructor must be the same as the name of the immediately enclosing class.
     hasPublishedDocs: true
@@ -8608,6 +8903,7 @@
       constructor (`A`) isn't the same as the surrounding class (`C`):
 
       ```dart
+      // @dart = 3.10
       class A {}
 
       class C {
@@ -8663,6 +8959,7 @@
       }
       ```
   INVALID_FIELD_NAME_FROM_OBJECT:
+    type: compileTimeError
     parameters: none
     sharedName: INVALID_FIELD_NAME
     problemMessage: Record field names can't be the same as a member from 'Object'.
@@ -8734,18 +9031,21 @@
       var r = (a: 1, d: 4);
       ```
   INVALID_FIELD_NAME_PRIVATE:
+    type: compileTimeError
     parameters: none
     sharedName: INVALID_FIELD_NAME
     problemMessage: Record field names can't be private.
     correctionMessage: Try removing the leading underscore.
     hasPublishedDocs: true
   INVALID_FIELD_NAME_POSITIONAL:
+    type: compileTimeError
     parameters: none
     sharedName: INVALID_FIELD_NAME
     problemMessage: Record field names can't be a dollar sign followed by an integer when the integer is the index of a positional field.
     correctionMessage: Try using a different name for the field.
     hasPublishedDocs: true
   INVALID_IMPLEMENTATION_OVERRIDE:
+    type: compileTimeError
     parameters:
       Object p0: the name of the declared member that is not a valid override.
       Object p1: the name of the interface that declares the member.
@@ -8756,7 +9056,7 @@
     hasPublishedDocs: true
     comment: |-
       The parameters of this error code must be kept in sync with those of
-      [CompileTimeErrorCode.invalidOverride].
+      [diag.invalidOverride].
     documentation: |-
       #### Description
 
@@ -8840,6 +9140,7 @@
       }
       ```
   INVALID_IMPLEMENTATION_OVERRIDE_SETTER:
+    type: compileTimeError
     parameters:
       Object p0: the name of the declared setter that is not a valid override.
       Object p1: the name of the interface that declares the setter.
@@ -8851,8 +9152,9 @@
     hasPublishedDocs: true
     comment: |-
       The parameters of this error code must be kept in sync with those of
-      [CompileTimeErrorCode.invalidOverride].
+      [diag.invalidOverride].
   INVALID_INLINE_FUNCTION_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Inline function types can't be used for parameters in a generic function type."
     correctionMessage: "Try using a generic function type (returnType 'Function(' parameters ')')."
@@ -8882,6 +9184,7 @@
       typedef F = int Function(int Function(String));
       ```
   INVALID_MODIFIER_ON_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the invalid modifier
     problemMessage: "The modifier '#p0' can't be applied to the body of a constructor."
@@ -8927,6 +9230,7 @@
       }
       ```
   INVALID_MODIFIER_ON_SETTER:
+    type: compileTimeError
     parameters: none
     problemMessage: "Setters can't use 'async', 'async*', or 'sync*'."
     correctionMessage: Try removing the modifier.
@@ -8968,6 +9272,7 @@
       }
       ```
   INVALID_OVERRIDE:
+    type: compileTimeError
     parameters:
       String p0: the name of the declared member that is not a valid override.
       String p1: the name of the interface that declares the member.
@@ -9034,6 +9339,7 @@
       }
       ```
   INVALID_OVERRIDE_SETTER:
+    type: compileTimeError
     parameters:
       Object p0: the name of the declared setter that is not a valid override.
       Object p1: the name of the interface that declares the setter.
@@ -9044,6 +9350,7 @@
     problemMessage: "The setter '#p1.#p0' ('#p2') isn't a valid override of '#p3.#p0' ('#p4')."
     hasPublishedDocs: true
   INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: Generative enum constructors can only be used to create an enum constant.
     correctionMessage: Try using an enum value, or a factory constructor.
@@ -9101,12 +9408,14 @@
       E f() => E.c(2);
       ```
   INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR_TEAROFF:
+    type: compileTimeError
     sharedName: INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR
     parameters: none
     problemMessage: Generative enum constructors can't be torn off.
     correctionMessage: Try using an enum value, or a factory constructor.
     hasPublishedDocs: true
   INVALID_REFERENCE_TO_THIS:
+    type: compileTimeError
     parameters: none
     problemMessage: "Invalid reference to 'this' expression."
     hasPublishedDocs: true
@@ -9140,6 +9449,7 @@
       class C {}
       ```
   INVALID_SUPER_FORMAL_PARAMETER_LOCATION:
+    type: compileTimeError
     parameters: none
     problemMessage: Super parameters can only be used in non-redirecting generative constructors.
     correctionMessage: Try removing the 'super' modifier, or changing the constructor to be non-redirecting and generative.
@@ -9225,6 +9535,7 @@
       }
       ```
   INVALID_TYPE_ARGUMENT_IN_CONST_LIST:
+    type: compileTimeError
     parameters:
       Object p0: the name of the type parameter
     sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
@@ -9278,6 +9589,7 @@
       List<T> newList<T>() => <T>[];
       ```
   INVALID_TYPE_ARGUMENT_IN_CONST_MAP:
+    type: compileTimeError
     parameters:
       Object p0: the name of the type parameter
     sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
@@ -9285,6 +9597,7 @@
     correctionMessage: Try replacing the type parameter with a different type.
     hasPublishedDocs: true
   INVALID_TYPE_ARGUMENT_IN_CONST_SET:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
     sharedName: INVALID_TYPE_ARGUMENT_IN_CONST_LITERAL
@@ -9292,6 +9605,7 @@
     correctionMessage: Try replacing the type parameter with a different type.
     hasPublishedDocs: true
   INVALID_URI:
+    type: compileTimeError
     parameters:
       String p0: the URI that is invalid
     problemMessage: "Invalid URI syntax: '#p0'."
@@ -9315,12 +9629,14 @@
 
       Replace the invalid URI with a valid URI.
   INVALID_USE_OF_COVARIANT:
+    type: compileTimeError
     parameters: none
     problemMessage: "The 'covariant' keyword can only be used for parameters in instance methods or before non-final instance fields."
     correctionMessage: "Try removing the 'covariant' keyword."
     hasPublishedDocs: false
     comment: "The 'covariant' keyword was found in an inappropriate location."
   INVALID_USE_OF_NULL_VALUE:
+    type: compileTimeError
     parameters: none
     problemMessage: "An expression whose value is always 'null' can't be dereferenced."
     correctionMessage: Try changing the type of the expression.
@@ -9353,6 +9669,7 @@
       }
       ```
   INVOCATION_OF_EXTENSION_WITHOUT_CALL:
+    type: compileTimeError
     parameters:
       String p0: the name of the extension
     problemMessage: "The extension '#p0' doesn't define a 'call' method so the override can't be used in an invocation."
@@ -9396,6 +9713,7 @@
       If the `call` method isn't defined, then rewrite the code so that it
       doesn't invoke the `call` method.
   INVOCATION_OF_NON_FUNCTION:
+    type: compileTimeError
     parameters:
       String p0: the name of the identifier that is not a function type
     problemMessage: "'#p0' isn't a function."
@@ -9425,6 +9743,7 @@
 
       Replace the name with the name of a function.
   INVOCATION_OF_NON_FUNCTION_EXPRESSION:
+    type: compileTimeError
     parameters: none
     problemMessage: "The expression doesn't evaluate to a function, so it can't be invoked."
     hasPublishedDocs: true
@@ -9472,6 +9791,7 @@
       var y = f();
       ```
   LABEL_IN_OUTER_SCOPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the unresolvable label
     problemMessage: "Can't reference label '#p0' declared in an outer method."
@@ -9536,6 +9856,7 @@
       }
       ```
   LABEL_UNDEFINED:
+    type: compileTimeError
     parameters:
       String p0: the name of the unresolvable label
     problemMessage: "Can't reference an undefined label '#p0'."
@@ -9596,6 +9917,7 @@
       }
       ```
   LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Can't have a late final field in a class with a generative const constructor."
     correctionMessage: "Try removing the 'late' modifier, or don't declare 'const' constructors."
@@ -9643,6 +9965,7 @@
       }
       ```
   LATE_FINAL_LOCAL_ALREADY_ASSIGNED:
+    type: compileTimeError
     parameters: none
     problemMessage: The late final local variable is already assigned.
     correctionMessage: "Try removing the 'final' modifier, or don't reassign the value."
@@ -9696,6 +10019,7 @@
       }
       ```
   LIST_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+    type: compileTimeError
     parameters:
       Type p0: the actual type of the list element
       Type p1: the expected type of the list element
@@ -9703,6 +10027,7 @@
     problemMessage: "The element type '#p0' can't be assigned to the list type '#p1'."
     hasPublishedDocs: true
   LIST_ELEMENT_TYPE_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the actual type of the list element
       Type p1: the expected type of the list element
@@ -9745,6 +10070,7 @@
       List<num> x = [1, 2.5, 3];
       ```
   MAIN_FIRST_POSITIONAL_PARAMETER_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "The type of the first positional parameter of the 'main' function must be a supertype of 'List<String>'."
     correctionMessage: Try changing the type of the parameter.
@@ -9779,6 +10105,7 @@
       void f(List<int> args) {}
       ```
   MAIN_HAS_REQUIRED_NAMED_PARAMETERS:
+    type: compileTimeError
     parameters: none
     problemMessage: "The function 'main' can't have any required named parameters."
     correctionMessage: "Try using a different name for the function, or removing the 'required' modifier."
@@ -9812,6 +10139,7 @@
       void f({required int x}) {}
       ```
   MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS:
+    type: compileTimeError
     parameters: none
     problemMessage: "The function 'main' can't have more than two required positional parameters."
     correctionMessage: Try using a different name for the function, or removing extra parameters.
@@ -9854,6 +10182,7 @@
       void f(List<String> args, int x, int y) {}
       ```
   MAIN_IS_NOT_FUNCTION:
+    type: compileTimeError
     parameters: none
     problemMessage: "The declaration named 'main' must be a function."
     correctionMessage: Try using a different name for this declaration.
@@ -9881,6 +10210,7 @@
       var mainIndex = 3;
       ```
   MAP_ENTRY_NOT_IN_MAP:
+    type: compileTimeError
     parameters: none
     problemMessage: Map entries can only be used in a map literal.
     correctionMessage: Try converting the collection to a map or removing the map entry.
@@ -9921,6 +10251,7 @@
       var collection = <String>{'a', 'b'};
       ```
   MAP_KEY_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression being used as a key
       Type p1: the type of keys declared for the map
@@ -9928,6 +10259,7 @@
     problemMessage: "The element type '#p0' can't be assigned to the map key type '#p1'."
     hasPublishedDocs: true
   MAP_KEY_TYPE_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression being used as a key
       Type p1: the type of keys declared for the map
@@ -9963,6 +10295,7 @@
       var m = <int, String>{2 : 'a'};
       ```
   MAP_VALUE_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression being used as a value
       Type p1: the type of values declared for the map
@@ -9970,6 +10303,7 @@
     problemMessage: "The element type '#p0' can't be assigned to the map value type '#p1'."
     hasPublishedDocs: true
   MAP_VALUE_TYPE_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression being used as a value
       Type p1: the type of values declared for the map
@@ -10006,6 +10340,7 @@
       var m = <String, int>{'a' : 2};
       ```
   MISSING_CONST_IN_LIST_LITERAL:
+    type: compileTimeError
     parameters: none
     problemMessage: Seeing this message constitutes a bug. Please report it.
     hasPublishedDocs: false
@@ -10015,6 +10350,7 @@
       Note: This diagnostic is never displayed to the user, so it doesn't need
       to be documented.
   MISSING_CONST_IN_MAP_LITERAL:
+    type: compileTimeError
     parameters: none
     problemMessage: Seeing this message constitutes a bug. Please report it.
     hasPublishedDocs: false
@@ -10024,6 +10360,7 @@
       Note: This diagnostic is never displayed to the user, so it doesn't need
       to be documented.
   MISSING_CONST_IN_SET_LITERAL:
+    type: compileTimeError
     parameters: none
     problemMessage: Seeing this message constitutes a bug. Please report it.
     hasPublishedDocs: false
@@ -10033,6 +10370,7 @@
       Note: This diagnostic is never displayed to the user, so it doesn't need
       to be documented.
   MISSING_DART_LIBRARY:
+    type: compileTimeError
     parameters:
       Object p0: the name of the library
     problemMessage: "Required library '#p0' is missing."
@@ -10049,6 +10387,7 @@
 
       Reinstall the Dart or Flutter SDK.
   MISSING_DEFAULT_VALUE_FOR_PARAMETER:
+    type: compileTimeError
     parameters:
       String p0: the name of the parameter
     problemMessage: "The parameter '#p0' can't have a value of 'null' because of its type, but the implicit default value is 'null'."
@@ -10103,6 +10442,7 @@
       void g({required int x}) {}
       ```
   MISSING_DEFAULT_VALUE_FOR_PARAMETER_POSITIONAL:
+    type: compileTimeError
     parameters:
       String p0: the name of the parameter
     sharedName: MISSING_DEFAULT_VALUE_FOR_PARAMETER
@@ -10110,12 +10450,14 @@
     correctionMessage: "Try adding an explicit non-'null' default value."
     hasPublishedDocs: true
   MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION:
+    type: compileTimeError
     parameters: none
     sharedName: MISSING_DEFAULT_VALUE_FOR_PARAMETER
     problemMessage: "With null safety, use the 'required' keyword, not the '@required' annotation."
     correctionMessage: "Try removing the '@'."
     hasPublishedDocs: true
   MISSING_NAMED_PATTERN_FIELD_NAME:
+    type: compileTimeError
     parameters: none
     problemMessage: The getter name is not specified explicitly, and the pattern is not a variable.
     correctionMessage: Try specifying the getter name explicitly, or using a variable pattern.
@@ -10185,6 +10527,7 @@
       }
       ```
   MISSING_REQUIRED_ARGUMENT:
+    type: compileTimeError
     parameters:
       String p0: the name of the parameter
     problemMessage: "The named parameter '#p0' is required, but there's no corresponding argument."
@@ -10219,6 +10562,7 @@
       }
       ```
   MISSING_VARIABLE_PATTERN:
+    type: compileTimeError
     parameters:
       String p0: the name of the variable pattern
     problemMessage: "Variable pattern '#p0' is missing in this branch of the logical-or pattern."
@@ -10285,6 +10629,7 @@
       }
       ```
   MIXINS_SUPER_CLASS:
+    type: compileTimeError
     parameters:
       Element p0: the name of the class that appears in both "extends" and "with" clauses
     sharedName: IMPLEMENTS_SUPER_CLASS
@@ -10292,6 +10637,7 @@
     correctionMessage: Try removing one of the occurrences.
     hasPublishedDocs: true
   MIXIN_APPLICATION_CONCRETE_SUPER_INVOKED_MEMBER_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the super-invoked member
       Type p1: the display name of the type of the super-invoked member in the mixin
@@ -10395,6 +10741,7 @@
       abstract class C extends B with M {}
       ```
   MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE:
+    type: compileTimeError
     parameters:
       Type p0: the display name of the mixin
       Type p1: the display name of the superclass
@@ -10436,12 +10783,14 @@
       class X = A with M;
       ```
   MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the display name of the setter without a concrete implementation
     sharedName: MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
     problemMessage: "The class doesn't have a concrete implementation of the super-invoked setter '#p0'."
     hasPublishedDocs: true
   MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the display name of the member without a concrete implementation
     problemMessage: "The class doesn't have a concrete implementation of the super-invoked member '#p0'."
@@ -10515,6 +10864,7 @@
       abstract class B extends A with M {}
       ```
   MIXIN_CLASS_DECLARATION_EXTENDS_NOT_OBJECT:
+    type: compileTimeError
     parameters:
       String p0: the name of the mixin class that is invalid
     problemMessage: "The class '#p0' can't be declared a mixin because it extends a class other than 'Object'."
@@ -10573,6 +10923,7 @@
       Depending on the members of the subclass this might require adding an `on`
       clause to the mixin.
   MIXIN_CLASS_DECLARES_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the mixin that is invalid
     problemMessage: "The class '#p0' can't be used as a mixin because it declares a constructor."
@@ -10630,6 +10981,7 @@
       class B extends A {}
       ```
   MIXIN_INHERITS_FROM_NOT_OBJECT:
+    type: compileTimeError
     parameters:
       String p0: the name of the mixin that is invalid
     problemMessage: "The class '#p0' can't be used as a mixin because it extends a class other than 'Object'."
@@ -10692,6 +11044,7 @@
       class C extends A with M {}
       ```
   MIXIN_INSTANTIATE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Mixins can't be instantiated."
     hasPublishedDocs: true
@@ -10716,6 +11069,7 @@
       If you intend to use an instance of a class, then use the name of that
       class in place of the name of the mixin.
   MIXIN_OF_NON_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: Classes can only mix in mixins and classes.
     hasPublishedDocs: true
@@ -10747,6 +11101,7 @@
       class C {}
       ```
   MIXIN_SUBTYPE_OF_BASE_IS_NOT_BASE:
+    type: compileTimeError
     parameters:
       String p0: the name of the mixin that is not 'base'
       String p1: the name of the 'base' supertype
@@ -10754,6 +11109,7 @@
     problemMessage: "The mixin '#p0' must be 'base' because the supertype '#p1' is 'base'."
     hasPublishedDocs: true
   MIXIN_SUBTYPE_OF_FINAL_IS_NOT_BASE:
+    type: compileTimeError
     parameters:
       String p0: the name of the mixin that is not 'final'
       String p1: the name of the 'final' supertype
@@ -10761,6 +11117,7 @@
     problemMessage: "The mixin '#p0' must be 'base' because the supertype '#p1' is 'final'."
     hasPublishedDocs: true
   MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: "Deferred classes can't be used as superclass constraints."
     correctionMessage: Try changing the import to not be deferred.
@@ -10800,6 +11157,7 @@
       mixin M<T> {}
       ```
   MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE:
+    type: compileTimeError
     parameters: none
     problemMessage: Only classes and mixins can be used as superclass constraints.
     hasPublishedDocs: true
@@ -10827,6 +11185,7 @@
 
       Otherwise, remove the type from the `on` clause.
   MIXIN_WITH_NON_CLASS_SUPERCLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: Mixin can only be applied to class.
     hasPublishedDocs: false
@@ -10834,6 +11193,7 @@
       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:
+    type: compileTimeError
     parameters: none
     problemMessage: Constructors can have only one 'this' redirection, at most.
     correctionMessage: Try removing all but one of the redirections.
@@ -10869,6 +11229,7 @@
       }
       ```
   MULTIPLE_SUPER_INITIALIZERS:
+    type: compileTimeError
     parameters: none
     problemMessage: "A constructor can have at most one 'super' initializer."
     correctionMessage: "Try removing all but one of the 'super' initializers."
@@ -10956,6 +11317,7 @@
       }
       ```
   NEW_WITH_UNDEFINED_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the class being instantiated
       String p1: the name of the constructor
@@ -10975,6 +11337,7 @@
       a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not
       declare a constructor with the same name as the declaration of <i>T</i>.
   NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT:
+    type: compileTimeError
     parameters:
       String p0: the name of the class being instantiated
     problemMessage: "The class '#p0' doesn't have an unnamed constructor."
@@ -11024,6 +11387,7 @@
       A f() => A();
       ```
   NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
+    type: compileTimeError
     parameters:
       String p0: the name of the first member
       String p1: the name of the second member
@@ -11035,6 +11399,7 @@
     correctionMessage: Try implementing the missing methods, or make the class abstract.
     hasPublishedDocs: true
   NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR:
+    type: compileTimeError
     parameters:
       String p0: the name of the first member
       String p1: the name of the second member
@@ -11045,6 +11410,7 @@
     correctionMessage: Try implementing the missing methods, or make the class abstract.
     hasPublishedDocs: true
   NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE:
+    type: compileTimeError
     parameters:
       String p0: the name of the member
     sharedName: NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
@@ -11112,6 +11478,7 @@
       abstract class B extends A {}
       ```
   NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE:
+    type: compileTimeError
     parameters:
       String p0: the name of the first member
       String p1: the name of the second member
@@ -11121,6 +11488,7 @@
     correctionMessage: Try implementing the missing methods, or make the class abstract.
     hasPublishedDocs: true
   NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO:
+    type: compileTimeError
     parameters:
       String p0: the name of the first member
       String p1: the name of the second member
@@ -11129,6 +11497,7 @@
     correctionMessage: Try implementing the missing methods, or make the class abstract.
     hasPublishedDocs: true
   NON_BOOL_CONDITION:
+    type: compileTimeError
     parameters: none
     problemMessage: "Conditions must have a static type of 'bool'."
     correctionMessage: Try changing the condition.
@@ -11164,6 +11533,7 @@
       }
       ```
   NON_BOOL_EXPRESSION:
+    type: compileTimeError
     parameters: none
     problemMessage: "The expression in an assert must be of type 'bool'."
     correctionMessage: Try changing the expression.
@@ -11195,6 +11565,7 @@
       }
       ```
   NON_BOOL_NEGATION_EXPRESSION:
+    type: compileTimeError
     parameters: none
     problemMessage: "A negation operand must have a static type of 'bool'."
     correctionMessage: "Try changing the operand to the '!' operator."
@@ -11224,6 +11595,7 @@
       bool y = !(x > 0);
       ```
   NON_BOOL_OPERAND:
+    type: compileTimeError
     parameters:
       String p0: the lexeme of the logical operator
     problemMessage: "The operands of the operator '#p0' must be assignable to 'bool'."
@@ -11253,6 +11625,7 @@
       bool b = a == 0 || a > 1;
       ```
   NON_CONSTANT_ANNOTATION_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: Annotation creation can only call a const constructor.
     hasPublishedDocs: true
@@ -11296,6 +11669,7 @@
       If it isn't valid for the class to have a const constructor, then either
       remove the annotation or use a different class for the annotation.
   NON_CONSTANT_CASE_EXPRESSION:
+    type: compileTimeError
     parameters: none
     problemMessage: Case expressions must be constant.
     hasPublishedDocs: true
@@ -11333,6 +11707,7 @@
       }
       ```
   NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used as a case expression."
     correctionMessage: Try re-writing the switch as a series of if statements, or changing the import to not be deferred.
@@ -11419,6 +11794,7 @@
       }
       ```
   NON_CONSTANT_DEFAULT_VALUE:
+    type: compileTimeError
     parameters: none
     problemMessage: The default value of an optional parameter must be constant.
     hasPublishedDocs: true
@@ -11460,6 +11836,7 @@
       }
       ```
   NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be used as a default parameter value."
     correctionMessage: Try leaving the default as 'null' and initializing the parameter inside the function body.
@@ -11511,6 +11888,7 @@
       void f({int x = 0}) {}
       ```
   NON_CONSTANT_LIST_ELEMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: The values in a const list literal must be constants.
     correctionMessage: "Try removing the keyword 'const' from the list literal."
@@ -11554,6 +11932,7 @@
       var y = <int>[0, 1, x];
       ```
   NON_CONSTANT_MAP_ELEMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: The elements in a const map literal must be constant.
     correctionMessage: "Try removing the keyword 'const' from the map literal."
@@ -11601,6 +11980,7 @@
       var map = <int, int>{if (notConst) 1 : 2};
       ```
   NON_CONSTANT_MAP_KEY:
+    type: compileTimeError
     parameters: none
     problemMessage: The keys in a const map literal must be constant.
     correctionMessage: "Try removing the keyword 'const' from the map literal."
@@ -11637,6 +12017,7 @@
       var m = {a: 0};
       ```
   NON_CONSTANT_MAP_PATTERN_KEY:
+    type: compileTimeError
     parameters: none
     problemMessage: Key expressions in map patterns must be constants.
     correctionMessage: Try using constants instead.
@@ -11676,6 +12057,7 @@
       }
       ```
   NON_CONSTANT_MAP_VALUE:
+    type: compileTimeError
     parameters: none
     problemMessage: The values in a const map literal must be constant.
     correctionMessage: "Try removing the keyword 'const' from the map literal."
@@ -11712,11 +12094,13 @@
       var m = {0: a};
       ```
   NON_CONSTANT_RECORD_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: The fields in a const record literal must be constants.
     correctionMessage: "Try removing the keyword 'const' from the record literal."
     hasPublishedDocs: false
   NON_CONSTANT_RELATIONAL_PATTERN_EXPRESSION:
+    type: compileTimeError
     parameters: none
     problemMessage: The relational pattern expression must be a constant.
     correctionMessage: Try using a constant instead.
@@ -11752,6 +12136,7 @@
       }
       ```
   NON_CONSTANT_SET_ELEMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: The values in a const set literal must be constants.
     correctionMessage: "Try removing the keyword 'const' from the set literal."
@@ -11790,6 +12175,7 @@
       var s = {i};
       ```
   NON_CONST_MAP_AS_EXPRESSION_STATEMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: "A non-constant map or set literal without type arguments can't be used as an expression statement."
     hasPublishedDocs: false
@@ -11798,6 +12184,7 @@
       map literal that has no explicit type arguments appears in a place where a
       statement is expected.
   NON_COVARIANT_TYPE_PARAMETER_POSITION_IN_REPRESENTATION_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "An extension type parameter can't be used in a non-covariant position of its representation type."
     correctionMessage: "Try removing the type parameters from function parameter types and type parameter bounds."
@@ -11827,12 +12214,13 @@
       extension type A(void Function(String) f) {}
       ```
   NON_EXHAUSTIVE_SWITCH_EXPRESSION:
+    type: compileTimeError
     parameters:
-      Type p0: the type of the switch scrutinee
-      String p1: the witness pattern for the unmatched value
-      String p2: the suggested pattern for the unmatched value
-    problemMessage: "The type '#p0' isn't exhaustively matched by the switch cases since it doesn't match the pattern '#p1'."
-    correctionMessage: "Try adding a wildcard pattern or cases that match '#p2'."
+      Type type: the type of the switch scrutinee
+      String unmatchedPattern: the witness pattern for the unmatched value
+      String suggestedPattern: the suggested pattern for the unmatched value
+    problemMessage: "The type '#type' isn't exhaustively matched by the switch cases since it doesn't match the pattern '#unmatchedPattern'."
+    correctionMessage: "Try adding a wildcard pattern or cases that match '#suggestedPattern'."
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -11886,13 +12274,22 @@
       Be aware that a wildcard pattern will handle any values added to the type
       in the future. You will lose the ability to have the compiler warn you if
       the `switch` needs to be updated to account for newly added types.
-  NON_EXHAUSTIVE_SWITCH_STATEMENT:
+  NON_EXHAUSTIVE_SWITCH_EXPRESSION_PRIVATE:
+    type: compileTimeError
+    sharedName: NON_EXHAUSTIVE_SWITCH_EXPRESSION
     parameters:
-      Type p0: the type of the switch scrutinee
-      String p1: the witness pattern for the unmatched value
-      String p2: the suggested pattern for the unmatched value
-    problemMessage: "The type '#p0' isn't exhaustively matched by the switch cases since it doesn't match the pattern '#p1'."
-    correctionMessage: "Try adding a default case or cases that match '#p2'."
+      Type type: the type of the switch scrutinee
+    problemMessage: "The enum '#type' isn't exhaustively matched by the switch cases because some of the enum constants are private."
+    correctionMessage: "Try adding a wildcard pattern."
+    hasPublishedDocs: true
+  NON_EXHAUSTIVE_SWITCH_STATEMENT:
+    type: compileTimeError
+    parameters:
+      Type type: the type of the switch scrutinee
+      String unmatchedPattern: the witness pattern for the unmatched value
+      String suggestedPattern: the suggested pattern for the unmatched value
+    problemMessage: "The type '#type' isn't exhaustively matched by the switch cases since it doesn't match the pattern '#unmatchedPattern'."
+    correctionMessage: "Try adding a default case or cases that match '#suggestedPattern'."
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -11955,7 +12352,16 @@
       any future values of the exhaustive type to also be handled, so you will
       have lost the ability for the compiler to warn you if the `switch` needs
       to be updated.
+  NON_EXHAUSTIVE_SWITCH_STATEMENT_PRIVATE:
+    type: compileTimeError
+    sharedName: NON_EXHAUSTIVE_SWITCH_STATEMENT
+    parameters:
+      Type type: the type of the switch scrutinee
+    problemMessage: "The enum '#type' isn't exhaustively matched by the switch cases because some of the enum constants are private."
+    correctionMessage: "Try adding a default case."
+    hasPublishedDocs: true
   NON_FINAL_FIELD_IN_ENUM:
+    type: compileTimeError
     parameters: none
     problemMessage: Enums can only declare final fields.
     correctionMessage: Try making the field final.
@@ -12000,6 +12406,7 @@
       }
       ```
   NON_GENERATIVE_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       Element p0: the non-generative constructor
     problemMessage: "The generative constructor '#p0' is expected, but a factory was found."
@@ -12047,6 +12454,7 @@
       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:
+    type: compileTimeError
     parameters:
       String p0: the name of the superclass
       String p1: the name of the current class
@@ -12119,7 +12527,14 @@
 
       class B implements A {}
       ```
+  NON_REDIRECTING_GENERATIVE_CONSTRUCTOR_WITH_PRIMARY:
+    type: compileTimeError
+    parameters: none
+    problemMessage: "Classes with primary constructors can't have non-redirecting generative constructors."
+    correctionMessage: "Try making the constructor redirect to the primary constructor, or remove the primary constructor."
+    hasPublishedDocs: false
   NON_SYNC_FACTORY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Factory bodies can't use 'async', 'async*', or 'sync*'."
     hasPublishedDocs: true
@@ -12171,6 +12586,7 @@
       }
       ```
   NON_TYPE_AS_TYPE_ARGUMENT:
+    type: compileTimeError
     parameters:
       String p0: the name appearing where a type is expected
     problemMessage: "The name '#p0' isn't a type, so it can't be used as a type argument."
@@ -12202,6 +12618,7 @@
       List<int> xList = [];
       ```
   NON_TYPE_IN_CATCH_CLAUSE:
+    type: compileTimeError
     parameters:
       String p0: the name of the non-type element
     problemMessage: "The name '#p0' isn't a type and can't be used in an on-catch clause."
@@ -12242,6 +12659,7 @@
       }
       ```
   NON_VOID_RETURN_FOR_OPERATOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "The return type of the operator []= must be 'void'."
     correctionMessage: "Try changing the return type to 'void'."
@@ -12273,6 +12691,7 @@
       }
       ```
   NON_VOID_RETURN_FOR_SETTER:
+    type: compileTimeError
     parameters: none
     problemMessage: "The return type of the setter must be 'void' or absent."
     correctionMessage: Try removing the return type, or define a method rather than a setter.
@@ -12304,6 +12723,7 @@
       }
       ```
   NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE:
+    type: compileTimeError
     parameters:
       String p0: the name of the variable that is invalid
     problemMessage: "The non-nullable local variable '#p0' must be assigned before it can be used."
@@ -12420,6 +12840,7 @@
       }
       ```
   NOT_A_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name that is not a type
     problemMessage: "#p0 isn't a type."
@@ -12444,6 +12865,7 @@
 
       Replace the name with the name of a type.
   NOT_BINARY_OPERATOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the operator that is not a binary operator.
     problemMessage: "'#p0' isn't a binary operator."
@@ -12471,6 +12893,7 @@
       var a = 5 - 3;
       ```
   NOT_ENOUGH_POSITIONAL_ARGUMENTS_SINGULAR:
+    type: compileTimeError
     parameters: none
     sharedName: NOT_ENOUGH_POSITIONAL_ARGUMENTS
     problemMessage: "1 positional argument expected, but 0 found."
@@ -12506,6 +12929,7 @@
       }
       ```
   NOT_ENOUGH_POSITIONAL_ARGUMENTS_PLURAL:
+    type: compileTimeError
     parameters:
       int p0: the expected number of required arguments
       int p1: the actual number of positional arguments given
@@ -12514,6 +12938,7 @@
     correctionMessage: Try adding the missing arguments.
     hasPublishedDocs: true
   NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_SINGULAR:
+    type: compileTimeError
     parameters:
       String p0: name of the function or method
     sharedName: NOT_ENOUGH_POSITIONAL_ARGUMENTS
@@ -12521,6 +12946,7 @@
     correctionMessage: Try adding the missing argument.
     hasPublishedDocs: true
   NOT_ENOUGH_POSITIONAL_ARGUMENTS_NAME_PLURAL:
+    type: compileTimeError
     parameters:
       int p0: the expected number of required arguments
       int p1: the actual number of positional arguments given
@@ -12530,6 +12956,7 @@
     correctionMessage: Try adding the missing arguments.
     hasPublishedDocs: true
   NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD:
+    type: compileTimeError
     parameters:
       String p0: the name of the field that is not initialized
     problemMessage: "Non-nullable instance field '#p0' must be initialized."
@@ -12566,7 +12993,7 @@
 
         C(this.x);
 
-        [!C!].n();
+        [!C.n!]();
       }
       ```
 
@@ -12604,6 +13031,7 @@
       }
       ```
   NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the field that is not initialized
     sharedName: NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD
@@ -12611,6 +13039,7 @@
     correctionMessage: "Try adding an initializer expression, or add a field initializer in this constructor, or mark it 'late'."
     hasPublishedDocs: true
   NOT_INITIALIZED_NON_NULLABLE_VARIABLE:
+    type: compileTimeError
     parameters:
       String p0: the name of the variable that is invalid
     problemMessage: "The non-nullable variable '#p0' must be initialized."
@@ -12670,11 +13099,13 @@
       }
       ```
   NOT_INSTANTIATED_BOUND:
+    type: compileTimeError
     parameters: none
     problemMessage: Type parameter bound types must be instantiated.
     correctionMessage: Try adding type arguments to the type parameter bound.
     hasPublishedDocs: false
   NOT_ITERABLE_SPREAD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Spread elements in list or set literals must implement 'Iterable'."
     hasPublishedDocs: true
@@ -12704,6 +13135,7 @@
       var s = <String>{...m.keys};
       ```
   NOT_MAP_SPREAD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Spread elements in map literals must implement 'Map'."
     hasPublishedDocs: true
@@ -12733,10 +13165,12 @@
       var m = <int, String>{...l.asMap()};
       ```
   NOT_NULL_AWARE_NULL_SPREAD:
+    type: compileTimeError
     parameters: none
     problemMessage: "The Null-typed expression can't be used with a non-null-aware spread."
     hasPublishedDocs: false
   NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS:
+    type: compileTimeError
     parameters: none
     problemMessage: Annotation creation must have arguments.
     correctionMessage: Try adding an empty argument list.
@@ -12777,6 +13211,7 @@
       var x;
       ```
   NO_COMBINED_SUPER_SIGNATURE:
+    type: compileTimeError
     parameters:
       String p0: the name of the class where override error was detected
       String p1: the list of candidate signatures which cannot be combined
@@ -12836,6 +13271,7 @@
       }
       ```
   NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT:
+    type: compileTimeError
     parameters:
       Object p0: the name of the superclass that does not define an implicitly invoked constructor
     sharedName: NO_DEFAULT_SUPER_CONSTRUCTOR
@@ -12843,6 +13279,7 @@
     correctionMessage: "Try declaring a zero argument constructor in '#p0', or explicitly invoking a different constructor in '#p0'."
     hasPublishedDocs: false
   NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT:
+    type: compileTimeError
     parameters:
       Type p0: the name of the superclass that does not define an implicitly invoked constructor
       String p1: the name of the subclass that does not contain any explicit constructors
@@ -12851,6 +13288,7 @@
     correctionMessage: "Try declaring a zero argument constructor in '#p0', or declaring a constructor in #p1 that explicitly invokes a constructor in '#p0'."
     hasPublishedDocs: false
   NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the subclass
       String p1: the name of the superclass
@@ -12918,6 +13356,7 @@
       class B implements A {}
       ```
   NULLABLE_TYPE_IN_EXTENDS_CLAUSE:
+    type: compileTimeError
     parameters: none
     problemMessage: "A class can't extend a nullable type."
     correctionMessage: Try removing the question mark.
@@ -12955,6 +13394,7 @@
       class B extends A {}
       ```
   NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE:
+    type: compileTimeError
     parameters: none
     problemMessage: "A class, mixin, or extension type can't implement a nullable type."
     correctionMessage: Try removing the question mark.
@@ -12993,6 +13433,7 @@
       class B implements A {}
       ```
   NULLABLE_TYPE_IN_ON_CLAUSE:
+    type: compileTimeError
     parameters: none
     problemMessage: "A mixin can't have a nullable type as a superclass constraint."
     correctionMessage: Try removing the question mark.
@@ -13031,6 +13472,7 @@
       mixin M on C {}
       ```
   NULLABLE_TYPE_IN_WITH_CLAUSE:
+    type: compileTimeError
     parameters: none
     problemMessage: "A class or mixin can't mix in a nullable type."
     correctionMessage: Try removing the question mark.
@@ -13067,6 +13509,7 @@
       class C with M {}
       ```
   OBJECT_CANNOT_EXTEND_ANOTHER_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: "The class 'Object' can't extend any other class."
     hasPublishedDocs: false
@@ -13074,6 +13517,7 @@
       7.9 Superclasses: It is a compile-time error to specify an extends clause
       for class Object.
   OBSOLETE_COLON_FOR_DEFAULT_VALUE:
+    type: compileTimeError
     parameters: none
     problemMessage: Using a colon as the separator before a default value is no longer supported.
     correctionMessage: Try replacing the colon with an equal sign.
@@ -13103,6 +13547,7 @@
       void f({int i = 0}) {}
       ```
   ON_REPEATED:
+    type: compileTimeError
     parameters:
       String p0: the name of the interface that is implemented more than once
     problemMessage: "The type '#p0' can be included in the superclass constraints only once."
@@ -13150,6 +13595,7 @@
       class B {}
       ```
   OPTIONAL_PARAMETER_IN_OPERATOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Optional parameters aren't allowed when defining an operator."
     correctionMessage: Try removing the optional parameters.
@@ -13181,6 +13627,7 @@
       }
       ```
   PART_OF_DIFFERENT_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the name of expected library name
       String p1: the non-matching actual library name from the "part of" declaration
@@ -13220,6 +13667,7 @@
       (or library name) in the part-of directive to be the URI (or name) of the
       correct library.
   PART_OF_NON_PART:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a non-library declaration
     problemMessage: "The included part '#p0' must have a part-of directive."
@@ -13265,6 +13713,7 @@
       import 'a.dart';
       ```
   PART_OF_UNNAMED_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the non-matching actual library name from the "part of" declaration
     problemMessage: "The library is unnamed. A URI is expected, not a library name '#p0', in the part-of directive."
@@ -13309,6 +13758,7 @@
       part of 'test.dart';
       ```
   PATTERN_ASSIGNMENT_NOT_LOCAL_VARIABLE:
+    type: compileTimeError
     parameters: none
     problemMessage: Only local variables can be assigned in pattern assignments.
     correctionMessage: Try assigning to a local variable.
@@ -13366,6 +13816,7 @@
       }
       ```
   PATTERN_TYPE_MISMATCH_IN_IRREFUTABLE_CONTEXT:
+    type: compileTimeError
     parameters:
       Type p0: the matched type
       Type p1: the required type
@@ -13403,6 +13854,7 @@
       }
       ```
   PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD:
+    type: compileTimeError
     parameters: none
     problemMessage: Pattern variables can't be assigned inside the guard of the enclosing guarded pattern.
     correctionMessage: Try assigning to a different variable.
@@ -13450,6 +13902,7 @@
       }
       ```
   PATTERN_VARIABLE_SHARED_CASE_SCOPE_DIFFERENT_FINALITY_OR_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the pattern variable
     sharedName: INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE
@@ -13603,6 +14056,7 @@
       }
       ```
   PATTERN_VARIABLE_SHARED_CASE_SCOPE_HAS_LABEL:
+    type: compileTimeError
     parameters:
       String p0: the name of the pattern variable
     sharedName: INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE
@@ -13610,6 +14064,7 @@
     correctionMessage: Try removing the label, or providing the 'default' case with its own body.
     hasPublishedDocs: true
   PATTERN_VARIABLE_SHARED_CASE_SCOPE_NOT_ALL_CASES:
+    type: compileTimeError
     parameters:
       String p0: the name of the pattern variable
     sharedName: INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE
@@ -13617,6 +14072,7 @@
     correctionMessage: Try declaring the variable pattern with the same type and finality in all cases.
     hasPublishedDocs: true
   POSITIONAL_FIELD_IN_OBJECT_PATTERN:
+    type: compileTimeError
     parameters: none
     problemMessage: Object patterns can only use named fields.
     correctionMessage: Try specifying the field name.
@@ -13652,6 +14108,7 @@
       }
       ```
   POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT:
+    type: compileTimeError
     parameters: none
     problemMessage: Positional super parameters can't be used when the super constructor invocation has a positional argument.
     correctionMessage: Try making all the positional parameters passed to the super constructor be either all super parameters or all normal parameters.
@@ -13716,6 +14173,7 @@
       }
       ```
   PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER:
+    type: compileTimeError
     parameters:
       Object p0: the name of the prefix
     problemMessage: "The name '#p0' is already used as an import prefix and can't be used to name a top-level element."
@@ -13758,6 +14216,7 @@
       int f() => math.min(0, 1);
       ```
   PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT:
+    type: compileTimeError
     parameters:
       String p0: the name of the prefix
     problemMessage: "The name '#p0' refers to an import prefix, so it must be followed by '.'."
@@ -13799,6 +14258,7 @@
 
       If the name is wrong, then correct the name.
   PREFIX_SHADOWED_BY_LOCAL_DECLARATION:
+    type: compileTimeError
     parameters:
       String p0: the prefix being shadowed
     problemMessage: "The prefix '#p0' can't be used here because it's shadowed by a local declaration."
@@ -13850,6 +14310,7 @@
       }
       ```
   PRIVATE_COLLISION_IN_MIXIN_APPLICATION:
+    type: compileTimeError
     parameters:
       String p0: the private name that collides
       String p1: the name of the first mixin
@@ -13901,7 +14362,39 @@
 
       If you need both of the mixins, then rename the conflicting member in one
       of the two mixins.
+  PRIVATE_NAMED_PARAMETER_DUPLICATE_PUBLIC_NAME:
+    type: compileTimeError
+    parameters:
+      String publicName: the corresponding public name of private named parameter
+    problemMessage: "The corresponding public name '#publicName' is already the name of another parameter."
+    correctionMessage: "Try renaming one of the parameters."
+    hasPublishedDocs: false
+    documentation: |-
+      #### Description
+
+      The analyzer produces this diagnostic when a private named parameter
+      (leading `_`) has a corresponding public name that conflicts with an
+      existing parameter name in the same parameter list.
+
+      #### Example
+
+      The following code produces this diagnostic because the private named
+      parameter `_x`'s public name is `x`, which conflicts with the existing
+      parameter named `x`:
+
+      ```dart
+      class C {
+        int? _x;
+        C({int? x, this.[!_x!]});
+        int? get x => _x;
+      }
+      ```
+
+      #### Common fixes
+
+      Rename one of the two parameters.
   PRIVATE_NAMED_PARAMETER_WITHOUT_PUBLIC_NAME:
+    type: compileTimeError
     parameters: none
     problemMessage: "A private named parameter must be a public identifier after removing the leading underscore."
     hasPublishedDocs: false
@@ -13931,6 +14424,7 @@
       Rename the parameter so that the character following the leading
       underscore is a letter.
   PRIVATE_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the setter
     problemMessage: "The setter '#p0' is private and can't be accessed outside the library that declares it."
@@ -13978,6 +14472,7 @@
       If you aren't able to make the setter public, then find a different way to
       implement the code.
   READ_POTENTIALLY_UNASSIGNED_FINAL:
+    type: compileTimeError
     parameters:
       String p0: the name of the variable
     problemMessage: "The final variable '#p0' can't be read because it's potentially unassigned at this point."
@@ -14020,6 +14515,7 @@
       }
       ```
   RECURSIVE_COMPILE_TIME_CONSTANT:
+    type: compileTimeError
     parameters: none
     problemMessage: The compile-time constant expression depends on itself.
     hasPublishedDocs: true
@@ -14050,10 +14546,12 @@
       const minutesPerHour = 60;
       ```
   RECURSIVE_CONSTANT_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "The constant constructor depends on itself."
     hasPublishedDocs: false
   RECURSIVE_CONSTRUCTOR_REDIRECT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constructors can't redirect to themselves either directly or indirectly."
     correctionMessage: Try changing one of the constructors in the loop to not redirect.
@@ -14149,12 +14647,14 @@
       }
       ```
   RECURSIVE_FACTORY_REDIRECT:
+    type: compileTimeError
     parameters: none
     sharedName: RECURSIVE_CONSTRUCTOR_REDIRECT
     problemMessage: "Constructors can't redirect to themselves either directly or indirectly."
     correctionMessage: Try changing one of the constructors in the loop to not redirect.
     hasPublishedDocs: true
   RECURSIVE_INTERFACE_INHERITANCE:
+    type: compileTimeError
     parameters:
       String p0: the name of the class that implements itself recursively
       String p1: a string representation of the implements loop
@@ -14181,6 +14681,7 @@
 
       Change the type hierarchy so that there's no circularity.
   RECURSIVE_INTERFACE_INHERITANCE_EXTENDS:
+    type: compileTimeError
     parameters:
       String p0: the name of the class that implements itself recursively
     sharedName: RECURSIVE_INTERFACE_INHERITANCE
@@ -14196,6 +14697,7 @@
       7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
       superclass of itself.
   RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS:
+    type: compileTimeError
     parameters:
       String p0: the name of the class that implements itself recursively
     sharedName: RECURSIVE_INTERFACE_INHERITANCE
@@ -14211,12 +14713,14 @@
       7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
       superclass of itself.
   RECURSIVE_INTERFACE_INHERITANCE_ON:
+    type: compileTimeError
     parameters:
       String p0: the name of the mixin that constraints itself recursively
     sharedName: RECURSIVE_INTERFACE_INHERITANCE
     problemMessage: "'#p0' can't use itself as a superclass constraint."
     hasPublishedDocs: true
   RECURSIVE_INTERFACE_INHERITANCE_WITH:
+    type: compileTimeError
     parameters:
       String p0: the name of the class that implements itself recursively
     sharedName: RECURSIVE_INTERFACE_INHERITANCE
@@ -14232,6 +14736,7 @@
       7.9 Superclasses: It is a compile-time error if a class <i>C</i> is a
       superclass of itself.
   REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor
       String p1: the name of the class
@@ -14275,6 +14780,7 @@
       }
       ```
   REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Generative constructors can't redirect to a factory constructor."
     correctionMessage: Try redirecting to a different constructor.
@@ -14319,6 +14825,7 @@
       }
       ```
   REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the redirecting constructor
       String p1: the name of the abstract class defining the constructor being redirected to
@@ -14361,6 +14868,7 @@
       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:
+    type: compileTimeError
     parameters:
       Type p0: the name of the redirected constructor
       Type p1: the name of the redirecting constructor
@@ -14435,6 +14943,7 @@
       }
       ```
   REDIRECT_TO_INVALID_RETURN_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the name of the redirected constructor's return type
       Type p1: the name of the redirecting constructor's return type
@@ -14493,6 +15002,7 @@
       }
       ```
   REDIRECT_TO_MISSING_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor
       Type p1: the name of the class containing the constructor
@@ -14548,6 +15058,7 @@
       }
       ```
   REDIRECT_TO_NON_CLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the non-type referenced in the redirect
     problemMessage: "The name '#p0' isn't a type and can't be used in a redirected constructor."
@@ -14592,6 +15103,7 @@
       }
       ```
   REDIRECT_TO_NON_CONST_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "A constant redirecting constructor can't redirect to a non-constant constructor."
     correctionMessage: Try redirecting to a different constructor.
@@ -14636,6 +15148,7 @@
       }
       ```
   REDIRECT_TO_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     problemMessage: "A redirecting constructor can't redirect to a type alias that expands to a type parameter."
     correctionMessage: Try replacing it with a class.
@@ -14677,6 +15190,7 @@
       }
       ```
   REFERENCED_BEFORE_DECLARATION:
+    type: compileTimeError
     parameters:
       Object p0: the name of the variable
     problemMessage: "Local variable '#p0' can't be referenced before it is declared."
@@ -14732,6 +15246,7 @@
       }
       ```
   REFUTABLE_PATTERN_IN_IRREFUTABLE_CONTEXT:
+    type: compileTimeError
     parameters: none
     problemMessage: Refutable patterns can't be used in an irrefutable context.
     correctionMessage: Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
@@ -14769,6 +15284,7 @@
 
       Rewrite the code to not use a refutable pattern in an irrefutable context.
   RELATIONAL_PATTERN_OPERAND_TYPE_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the operand type
       Type p1: the parameter type of the invoked operator
@@ -14844,6 +15360,7 @@
       ```
 
   RELATIONAL_PATTERN_OPERATOR_RETURN_TYPE_NOT_ASSIGNABLE_TO_BOOL:
+    type: compileTimeError
     parameters: none
     problemMessage: The return type of operators used in relational patterns must be assignable to 'bool'.
     correctionMessage: Try updating the operator declaration to return 'bool'.
@@ -14916,6 +15433,7 @@
       }
       ```
   REST_ELEMENT_IN_MAP_PATTERN:
+    type: compileTimeError
     parameters: none
     problemMessage: A map pattern can't contain a rest pattern.
     correctionMessage: Try removing the rest pattern.
@@ -14949,6 +15467,7 @@
       }
       ```
   RETHROW_OUTSIDE_CATCH:
+    type: compileTimeError
     parameters: none
     problemMessage: A rethrow must be inside of a catch clause.
     correctionMessage: "Try moving the expression into a catch clause, or using a 'throw' expression."
@@ -14996,6 +15515,7 @@
       }
       ```
   RETURN_IN_GENERATIVE_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constructors can't return values."
     correctionMessage: Try removing the return statement or using a factory constructor.
@@ -15047,6 +15567,7 @@
       }
       ```
   RETURN_IN_GENERATOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Can't return a value from a generator function that uses the 'async*' or 'sync*' modifier."
     correctionMessage: "Try replacing 'return' with 'yield', using a block function body, or changing the method body modifier."
@@ -15106,6 +15627,7 @@
       }
       ```
   RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       Type p0: the return type as declared in the return statement
       Type p1: the expected return type as defined by the enclosing class
@@ -15114,6 +15636,7 @@
     problemMessage: "A value of type '#p0' can't be returned from the constructor '#p2' because it has a return type of '#p1'."
     hasPublishedDocs: true
   RETURN_OF_INVALID_TYPE_FROM_FUNCTION:
+    type: compileTimeError
     parameters:
       Type p0: the return type as declared in the return statement
       Type p1: the expected return type as defined by the method
@@ -15151,6 +15674,7 @@
       int f() => 3;
       ```
   RETURN_OF_INVALID_TYPE_FROM_METHOD:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression in the return statement
       Type p1: the expected return type as defined by the method
@@ -15159,6 +15683,7 @@
     problemMessage: "A value of type '#p0' can't be returned from the method '#p2' because it has a return type of '#p1'."
     hasPublishedDocs: true
   RETURN_OF_INVALID_TYPE_FROM_CLOSURE:
+    type: compileTimeError
     parameters:
       Type p0: the return type as declared in the return statement
       Type p1: the expected return type as defined by the method
@@ -15190,6 +15715,7 @@
       String Function(String) f = (s) => 3.toString();
       ```
   RETURN_WITHOUT_VALUE:
+    type: compileTimeError
     parameters: none
     problemMessage: "The return value is missing after 'return'."
     hasPublishedDocs: true
@@ -15220,12 +15746,14 @@
       }
       ```
   SEALED_CLASS_SUBTYPE_OUTSIDE_OF_LIBRARY:
+    type: compileTimeError
     parameters:
       String p0: the name of the sealed class being extended, implemented, or mixed in
     sharedName: INVALID_USE_OF_TYPE_OUTSIDE_LIBRARY
     problemMessage: "The class '#p0' can't be extended, implemented, or mixed in outside of its library because it's a sealed class."
     hasPublishedDocs: true
   SET_ELEMENT_TYPE_NOT_ASSIGNABLE_NULLABILITY:
+    type: compileTimeError
     parameters:
       Type p0: the actual type of the set element
       Type p1: the expected type of the set element
@@ -15233,6 +15761,7 @@
     problemMessage: "The element type '#p0' can't be assigned to the set type '#p1'."
     hasPublishedDocs: true
   SET_ELEMENT_TYPE_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Type p0: the actual type of the set element
       Type p1: the expected type of the set element
@@ -15269,6 +15798,7 @@
       var s = <int>{'0'.length};
       ```
   SHARED_DEFERRED_PREFIX:
+    type: compileTimeError
     parameters: none
     problemMessage: "The prefix of a deferred import can't be used in other import directives."
     correctionMessage: Try renaming one of the prefixes.
@@ -15313,11 +15843,13 @@
       var y = convert.json.encode(x.min(0, 1));
       ```
   SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY:
+    type: compileTimeError
     parameters: none
     problemMessage: "Constant values from a deferred library can't be spread into a const literal."
     correctionMessage: Try making the deferred import non-deferred.
     hasPublishedDocs: false
   STATIC_ACCESS_TO_INSTANCE_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the instance member
     problemMessage: "Instance member '#p0' can't be accessed using static access."
@@ -15372,6 +15904,7 @@
       int f(C c) => c.b;
       ```
   SUBTYPE_OF_BASE_IS_NOT_BASE_FINAL_OR_SEALED:
+    type: compileTimeError
     parameters:
       String p0: the name of the subtype that is not 'base', 'final', or 'sealed'
       String p1: the name of the 'base' supertype
@@ -15405,6 +15938,7 @@
       final class B extends A {}
       ```
   SUBTYPE_OF_FINAL_IS_NOT_BASE_FINAL_OR_SEALED:
+    type: compileTimeError
     parameters:
       String p0: the name of the subtype that is not 'base', 'final', or 'sealed'
       String p1: the name of the 'final' supertype
@@ -15412,6 +15946,7 @@
     problemMessage: "The type '#p0' must be 'base', 'final' or 'sealed' because the supertype '#p1' is 'final'."
     hasPublishedDocs: true
   SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED:
+    type: compileTimeError
     parameters:
       Type p0: the type of super-parameter
       Type p1: the type of associated super-constructor parameter
@@ -15483,6 +16018,7 @@
       }
       ```
   SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED:
+    type: compileTimeError
     parameters: none
     problemMessage: No associated named super constructor parameter.
     correctionMessage: Try changing the name to the name of an existing named super constructor parameter, or creating such named parameter.
@@ -15554,6 +16090,7 @@
       }
       ```
   SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL:
+    type: compileTimeError
     parameters: none
     problemMessage: No associated positional super constructor parameter.
     correctionMessage: Try using a normal parameter, or adding more positional parameters to the super constructor.
@@ -15630,18 +16167,21 @@
       }
       ```
   IMPLEMENTS_DEFERRED_CLASS:
+    type: compileTimeError
     parameters: none
     sharedName: SUBTYPE_OF_DEFERRED_CLASS
     problemMessage: "Classes and mixins can't implement deferred classes."
     correctionMessage: Try specifying a different interface, removing the class from the list, or changing the import to not be deferred.
     hasPublishedDocs: true
   MIXIN_DEFERRED_CLASS:
+    type: compileTimeError
     parameters: none
     sharedName: SUBTYPE_OF_DEFERRED_CLASS
     problemMessage: "Classes can't mixin deferred classes."
     correctionMessage: Try changing the import to not be deferred.
     hasPublishedDocs: true
   EXTENDS_DEFERRED_CLASS:
+    type: compileTimeError
     parameters: none
     sharedName: SUBTYPE_OF_DEFERRED_CLASS
     problemMessage: "Classes can't extend deferred classes."
@@ -15688,6 +16228,7 @@
       class B extends a.A {}
       ```
   EXTENDS_DISALLOWED_CLASS:
+    type: compileTimeError
     parameters:
       Type p0: the name of the disallowed type
     sharedName: SUBTYPE_OF_DISALLOWED_TYPE
@@ -15748,6 +16289,7 @@
       class B {}
       ```
   MIXIN_OF_DISALLOWED_CLASS:
+    type: compileTimeError
     parameters:
       Type p0: the name of the disallowed type
     sharedName: SUBTYPE_OF_DISALLOWED_TYPE
@@ -15755,6 +16297,7 @@
     correctionMessage: Try specifying a different class or mixin, or remove the class or mixin from the list.
     hasPublishedDocs: true
   MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS:
+    type: compileTimeError
     parameters:
       Type p0: the name of the disallowed type
     sharedName: SUBTYPE_OF_DISALLOWED_TYPE
@@ -15762,6 +16305,7 @@
     correctionMessage: "Try specifying a different super-class constraint, or remove the 'on' clause."
     hasPublishedDocs: true
   IMPLEMENTS_DISALLOWED_CLASS:
+    type: compileTimeError
     parameters:
       Type p0: the name of the disallowed type
     sharedName: SUBTYPE_OF_DISALLOWED_TYPE
@@ -15769,6 +16313,7 @@
     correctionMessage: Try specifying a different interface, or remove the class from the list.
     hasPublishedDocs: true
   EXTENDS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
     problemMessage: "A type alias that expands to a type parameter can't be used as a superclass."
@@ -15803,22 +16348,26 @@
       class C extends Object {}
       ```
   MIXIN_ON_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
     problemMessage: "A type alias that expands to a type parameter can't be used as a superclass constraint."
     hasPublishedDocs: true
   MIXIN_OF_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
     problemMessage: "A type alias that expands to a type parameter can't be mixed in."
     hasPublishedDocs: true
   IMPLEMENTS_TYPE_ALIAS_EXPANDS_TO_TYPE_PARAMETER:
+    type: compileTimeError
     parameters: none
     sharedName: SUPERTYPE_EXPANDS_TO_TYPE_PARAMETER
     problemMessage: "A type alias that expands to a type parameter can't be implemented."
     correctionMessage: Try specifying a class or mixin, or removing the list.
     hasPublishedDocs: true
   SUPER_INITIALIZER_IN_OBJECT:
+    type: compileTimeError
     parameters: none
     problemMessage: "The class 'Object' can't invoke a constructor from a superclass."
     hasPublishedDocs: false
@@ -15827,6 +16376,7 @@
       is a compile-time error if a generative constructor of class Object
       includes a superinitializer.
   SUPER_INVOCATION_NOT_LAST:
+    type: compileTimeError
     parameters:
       String p0: the superinitializer
     previousName: INVALID_SUPER_INVOCATION
@@ -15869,6 +16419,7 @@
       }
       ```
   SUPER_IN_ENUM_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: The enum constructor can't have a 'super' initializer.
     correctionMessage: Try removing the 'super' invocation.
@@ -15904,6 +16455,7 @@
       }
       ```
   SUPER_IN_EXTENSION:
+    type: compileTimeError
     parameters: none
     problemMessage: "The 'super' keyword can't be used in an extension because an extension doesn't have a superclass."
     hasPublishedDocs: true
@@ -15935,6 +16487,7 @@
       }
       ```
   SUPER_IN_EXTENSION_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "The 'super' keyword can't be used in an extension type because an extension type doesn't have a superclass."
     hasPublishedDocs: true
@@ -15969,6 +16522,7 @@
       }
       ```
   SUPER_IN_INVALID_CONTEXT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Invalid context for 'super' invocation."
     hasPublishedDocs: true
@@ -15993,6 +16547,7 @@
 
       Rewrite the code to not use `super`.
   SUPER_IN_REDIRECTING_CONSTRUCTOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "The redirecting constructor can't have a 'super' initializer."
     hasPublishedDocs: true
@@ -16027,6 +16582,7 @@
       }
       ```
   SWITCH_CASE_COMPLETES_NORMALLY:
+    type: compileTimeError
     parameters: none
     problemMessage: "The 'case' shouldn't complete normally."
     correctionMessage: "Try adding 'break', 'return', or 'throw'."
@@ -16066,6 +16622,7 @@
       - a `continue`, or
       - an invocation of a function or method whose return type is `Never`.
   SWITCH_EXPRESSION_NOT_ASSIGNABLE:
+    type: compileTimeError
     parameters:
       Object p0: the static type of the switch expression
       Object p1: the static type of the case expressions
@@ -16122,6 +16679,7 @@
       }
       ```
   TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS:
+    type: compileTimeError
     parameters: none
     problemMessage: "A generative constructor of an abstract class can't be torn off."
     correctionMessage: Try tearing off a constructor of a concrete class, or a non-generative constructor.
@@ -16153,6 +16711,7 @@
 
       Tear off the constructor of a concrete class.
   THROW_OF_INVALID_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type that can't be thrown
     problemMessage: "The type '#p0' of the thrown expression must be assignable to 'Object'."
@@ -16185,6 +16744,7 @@
       }
       ```
   TOP_LEVEL_CYCLE:
+    type: compileTimeError
     parameters:
       String p0: the element whose type could not be inferred.
       String p1: The [TopLevelInferenceError]'s arguments that led to the cycle.
@@ -16232,6 +16792,7 @@
       variables is assigned a value that doesn't depend on the other variables
       before any of the variables in the cycle are referenced.
   TYPE_ALIAS_CANNOT_REFERENCE_ITSELF:
+    type: compileTimeError
     parameters: none
     problemMessage: "Typedefs can't reference themselves directly or recursively via another typedef."
     hasPublishedDocs: true
@@ -16261,6 +16822,7 @@
       typedef G = void Function(int);
       ```
   TYPE_ANNOTATION_DEFERRED_CLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the type that is deferred and being used in a type annotation
     problemMessage: "The deferred type '#p0' can't be used in a declaration, cast, or type test."
@@ -16303,6 +16865,7 @@
       appropriate, then use that type in place of the type from the deferred
       library.
   TYPE_ARGUMENT_NOT_MATCHING_BOUNDS:
+    type: compileTimeError
     parameters:
       Type p0: the name of the type used in the instance creation that should be limited by the bound as specified in the class declaration
       String p1: the name of the type parameter
@@ -16337,6 +16900,7 @@
       var a = A<int>();
       ```
   TYPE_PARAMETER_REFERENCED_BY_STATIC:
+    type: compileTimeError
     parameters: none
     problemMessage: "Static members can't reference type parameters of the class."
     correctionMessage: Try removing the reference to the type parameter, or making the member an instance member.
@@ -16380,6 +16944,7 @@
       Note, however, that there isn't a relationship between `T` and `S`, so this
       second option changes the semantics from what was likely to be intended.
   TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
       Type p1: the name of the bounding type
@@ -16387,7 +16952,7 @@
     correctionMessage: "Try using a type that is the same as or a subclass of '#p1'."
     hasPublishedDocs: true
     comment: |-
-      See [CompileTimeErrorCode.typeArgumentNotMatchingBounds].
+      See [diag.typeArgumentNotMatchingBounds].
     documentation: |-
       #### Description
 
@@ -16429,6 +16994,7 @@
       class C<T> {}
       ```
   TYPE_TEST_WITH_NON_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the type
     problemMessage: "The name '#p0' isn't a type and can't be used in an 'is' expression."
@@ -16482,6 +17048,7 @@
       }
       ```
   TYPE_TEST_WITH_UNDEFINED_NAME:
+    type: compileTimeError
     parameters:
       String p0: the name of the type
     problemMessage: "The name '#p0' isn't defined, so it can't be used in an 'is' expression."
@@ -16518,18 +17085,21 @@
       }
       ```
   UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD:
+    type: compileTimeError
     parameters: none
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
     problemMessage: "A nullable expression can't be used in a spread."
     correctionMessage: "Try checking that the value isn't 'null' before using it in a spread, or use a null-aware spread."
     hasPublishedDocs: true
   UNCHECKED_INVOCATION_OF_NULLABLE_VALUE:
+    type: compileTimeError
     parameters: none
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
     problemMessage: "The function can't be unconditionally invoked because it can be 'null'."
     correctionMessage: "Try adding a null check ('!')."
     hasPublishedDocs: true
   UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE:
+    type: compileTimeError
     parameters:
       String p0: the name of the method
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
@@ -16537,6 +17107,7 @@
     correctionMessage: "Try making the call conditional (using '?.') or adding a null check to the target ('!')."
     hasPublishedDocs: true
   UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE:
+    type: compileTimeError
     parameters:
       String p0: the name of the operator
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
@@ -16544,12 +17115,14 @@
     correctionMessage: "Try adding a null check to the target ('!')."
     hasPublishedDocs: true
   UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH:
+    type: compileTimeError
     parameters: none
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
     problemMessage: "A nullable expression can't be used in a yield-each statement."
     correctionMessage: "Try checking that the value isn't 'null' before using it in a yield-each statement."
     hasPublishedDocs: true
   UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION:
+    type: compileTimeError
     parameters: none
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
     problemMessage: "A nullable expression can't be used as a condition."
@@ -16612,12 +17185,14 @@
       }
       ```
   UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR:
+    type: compileTimeError
     parameters: none
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
     problemMessage: "A nullable expression can't be used as an iterator in a for-in loop."
     correctionMessage: "Try checking that the value isn't 'null' before using it as an iterator."
     hasPublishedDocs: true
   UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE:
+    type: compileTimeError
     parameters:
       String p0: the name of the property
     sharedName: UNCHECKED_USE_OF_NULLABLE_VALUE
@@ -16625,6 +17200,7 @@
     correctionMessage: "Try making the access conditional (using '?.') or adding a null check to the target ('!')."
     hasPublishedDocs: true
   UNDEFINED_ANNOTATION:
+    type: compileTimeError
     parameters:
       String p0: the name of the annotation
     problemMessage: "Undefined name '#p0' used as an annotation."
@@ -16668,6 +17244,7 @@
 
       Otherwise, remove the annotation.
   UNDEFINED_CLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the undefined class
     problemMessage: "Undefined class '#p0'."
@@ -16706,6 +17283,7 @@
       If the class is defined but isn't visible, then you probably need to add an
       import.
   UNDEFINED_CLASS_BOOLEAN:
+    type: compileTimeError
     parameters:
       String p0: the name of the undefined class
     sharedName: UNDEFINED_CLASS
@@ -16714,9 +17292,10 @@
     isUnresolvedIdentifier: true
     hasPublishedDocs: true
     comment: |-
-      Same as [CompileTimeErrorCode.undefinedClass], but to catch using
+      Same as [diag.undefinedClass], but to catch using
       "boolean" instead of "bool" in order to improve the correction message.
   UNDEFINED_CONSTRUCTOR_IN_INITIALIZER:
+    type: compileTimeError
     parameters:
       Type p0: the name of the superclass that does not define the invoked constructor
       String p1: the name of the constructor being invoked
@@ -16783,6 +17362,7 @@
       }
       ```
   UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT:
+    type: compileTimeError
     parameters:
       Object p0: the name of the superclass that does not define the invoked constructor
     sharedName: UNDEFINED_CONSTRUCTOR_IN_INITIALIZER
@@ -16790,6 +17370,7 @@
     correctionMessage: "Try defining an unnamed constructor in '#p0', or invoking a different constructor."
     hasPublishedDocs: true
   UNDEFINED_ENUM_CONSTANT:
+    type: compileTimeError
     parameters:
       String p0: the name of the enum value that is not defined
       String p1: the name of the enum used to access the constant
@@ -16834,6 +17415,7 @@
       var e = E.b;
       ```
   UNDEFINED_ENUM_CONSTRUCTOR_NAMED:
+    type: compileTimeError
     parameters:
       String p0: the name of the constructor that is undefined
     sharedName: UNDEFINED_ENUM_CONSTRUCTOR
@@ -16924,12 +17506,14 @@
       }
       ```
   UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED:
+    type: compileTimeError
     parameters: none
     sharedName: UNDEFINED_ENUM_CONSTRUCTOR
     problemMessage: The enum doesn't have an unnamed constructor.
     correctionMessage: Try adding the name of an existing constructor, or defining an unnamed constructor.
     hasPublishedDocs: true
   UNDEFINED_EXTENSION_GETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the getter that is undefined
       String p1: the name of the extension that was explicitly specified
@@ -17026,6 +17610,7 @@
       }
       ```
   UNDEFINED_EXTENSION_METHOD:
+    type: compileTimeError
     parameters:
       String p0: the name of the method that is undefined
       String p1: the name of the extension that was explicitly specified
@@ -17122,6 +17707,7 @@
       }
       ```
   UNDEFINED_EXTENSION_OPERATOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the operator that is undefined
       String p1: the name of the extension that was explicitly specified
@@ -17170,6 +17756,7 @@
       extension E on String {}
       ```
   UNDEFINED_EXTENSION_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the setter that is undefined
       String p1: the name of the extension that was explicitly specified
@@ -17268,6 +17855,7 @@
       }
       ```
   UNDEFINED_FUNCTION:
+    type: compileTimeError
     parameters:
       String p0: the name of the method that is undefined
     problemMessage: "The function '#p0' isn't defined."
@@ -17311,6 +17899,7 @@
       If the function is defined but isn't visible, then you probably need to add
       an import or re-arrange your code to make the function visible.
   UNDEFINED_GETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the getter
       Object p1: the name of the enclosing type where the getter is being looked for
@@ -17343,6 +17932,7 @@
       int f(String s) => s.length;
       ```
   UNDEFINED_GETTER_ON_FUNCTION_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the getter
       String p1: the name of the function type alias
@@ -17351,6 +17941,7 @@
     correctionMessage: "Try wrapping the function type alias in parentheses in order to access '#p0' as an extension getter on 'Type'."
     hasPublishedDocs: true
   UNDEFINED_IDENTIFIER:
+    type: compileTimeError
     parameters:
       String p0: the name of the identifier
     problemMessage: "Undefined name '#p0'."
@@ -17386,6 +17977,7 @@
       If the identifier is defined but isn't visible, then you probably need to
       add an import or re-arrange your code to make the identifier visible.
   UNDEFINED_IDENTIFIER_AWAIT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Undefined name 'await' in function body not marked with 'async'."
     correctionMessage: "Try correcting the name to one that is defined, defining the name, or adding 'async' to the enclosing function body."
@@ -17416,6 +18008,7 @@
       void f(p) async { await p; }
       ```
   UNDEFINED_METHOD:
+    type: compileTimeError
     parameters:
       String p0: the name of the method that is undefined
       Object p1: the resolved type name that the method lookup is happening on
@@ -17448,6 +18041,7 @@
       int f(List<int> l) => l.removeLast();
       ```
   UNDEFINED_METHOD_ON_FUNCTION_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the method
       String p1: the name of the function type alias
@@ -17456,6 +18050,7 @@
     correctionMessage: "Try wrapping the function type alias in parentheses in order to access '#p0' as an extension method on 'Type'."
     hasPublishedDocs: true
   UNDEFINED_NAMED_PARAMETER:
+    type: compileTimeError
     parameters:
       String p0: the name of the requested named parameter
     problemMessage: "The named parameter '#p0' isn't defined."
@@ -17527,6 +18122,7 @@
       }
       ```
   UNDEFINED_OPERATOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the operator
       Type p1: the name of the enclosing type where the operator is being looked for
@@ -17562,6 +18158,7 @@
       C f(C c) => c + 2;
       ```
   UNDEFINED_PREFIXED_NAME:
+    type: compileTimeError
     parameters:
       String p0: the name of the reference
       String p1: the name of the prefix
@@ -17596,6 +18193,7 @@
       If the name is wrong, then change it to one of the names that's declared in
       the imported libraries.
   UNDEFINED_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the setter
       Type p1: the name of the enclosing type where the setter is being looked for
@@ -17638,6 +18236,7 @@
       }
       ```
   UNDEFINED_SETTER_ON_FUNCTION_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the setter
       String p1: the name of the function type alias
@@ -17646,6 +18245,7 @@
     correctionMessage: "Try wrapping the function type alias in parentheses in order to access '#p0' as an extension getter on 'Type'."
     hasPublishedDocs: true
   UNDEFINED_SUPER_GETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the getter
       Type p1: the name of the enclosing type where the getter is being looked for
@@ -17654,6 +18254,7 @@
     correctionMessage: "Try correcting the name to the name of an existing getter, or defining a getter or field named '#p0' in a superclass."
     hasPublishedDocs: true
   UNDEFINED_SUPER_METHOD:
+    type: compileTimeError
     parameters:
       String p0: the name of the method that is undefined
       String p1: the resolved type name that the method lookup is happening on
@@ -17704,6 +18305,7 @@
       If the member isn't defined, then either add the member to one of the
       superclasses or remove the invocation.
   UNDEFINED_SUPER_OPERATOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the operator
       Type p1: the name of the enclosing type where the operator is being looked for
@@ -17712,6 +18314,7 @@
     correctionMessage: "Try defining the operator '#p0' in a superclass."
     hasPublishedDocs: true
   UNDEFINED_SUPER_SETTER:
+    type: compileTimeError
     parameters:
       String p0: the name of the setter
       Type p1: the name of the enclosing type where the setter is being looked for
@@ -17720,6 +18323,7 @@
     correctionMessage: "Try correcting the name to the name of an existing setter, or defining a setter or field named '#p0' in a superclass."
     hasPublishedDocs: true
   UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER:
+    type: compileTimeError
     parameters:
       String p0: the name of the defining type
     problemMessage: Static members from supertypes must be qualified by the name of the defining type.
@@ -17767,6 +18371,7 @@
       }
       ```
   UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE:
+    type: compileTimeError
     parameters:
       String p0: the name of the defining type
     problemMessage: Static members from the extended type or one of its superclasses must be qualified by the name of the defining type.
@@ -17830,6 +18435,7 @@
       }
       ```
   URI_DOES_NOT_EXIST:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a nonexistent file
     problemMessage: "Target of URI doesn't exist: '#p0'."
@@ -17856,6 +18462,7 @@
 
       If the URI is correct, then create the file.
   URI_HAS_NOT_BEEN_GENERATED:
+    type: compileTimeError
     parameters:
       String p0: the URI pointing to a nonexistent file
     problemMessage: "Target of URI hasn't been generated: '#p0'."
@@ -17892,6 +18499,7 @@
       If the file isn't a generated file, then check the spelling of the URI or
       create the file.
   URI_WITH_INTERPOLATION:
+    type: compileTimeError
     parameters: none
     problemMessage: "URIs can't use string interpolation."
     hasPublishedDocs: true
@@ -17925,6 +18533,7 @@
       var zero = min(0, 0);
       ```
   USE_OF_NATIVE_EXTENSION:
+    type: compileTimeError
     parameters: none
     problemMessage: Dart native extensions are deprecated and aren't available in Dart 2.15.
     correctionMessage: "Try using dart:ffi for C interop."
@@ -17949,6 +18558,7 @@
       Rewrite the code to use `dart:ffi` as a way of invoking the contents of the
       native library.
   USE_OF_VOID_RESULT:
+    type: compileTimeError
     parameters: none
     problemMessage: "This expression has a type of 'void' so its value can't be used."
     correctionMessage: "Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void."
@@ -17979,6 +18589,7 @@
       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:
+    type: compileTimeError
     parameters: none
     problemMessage: A member named 'values' can't be declared in an enum.
     correctionMessage: Try using a different name.
@@ -18017,10 +18628,11 @@
       }
       ```
   VARIABLE_TYPE_MISMATCH:
+    type: compileTimeError
     parameters:
-      Object p0: the type of the object being assigned.
-      Object p1: the type of the variable being assigned to
-    problemMessage: "A value of type '#p0' can't be assigned to a const variable of type '#p1'."
+      Object valueType: the type of the object being assigned.
+      Object variableType: the type of the variable being assigned to
+    problemMessage: "A value of type '#valueType' can't be assigned to a const variable of type '#variableType'."
     correctionMessage: "Try using a subtype, or removing the 'const' keyword"
     hasPublishedDocs: true
     documentation: |-
@@ -18057,6 +18669,7 @@
       const int y = x;
       ```
   WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+    type: compileTimeError
     parameters:
       Object p0: the name of the type parameter
       Object p1: the variance modifier defined for {0}
@@ -18075,6 +18688,7 @@
       or 'out' type parameter and `X` occurs in a non-contravariant position in
       `T`.
   WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the declared operator
       int p1: the number of parameters expected
@@ -18113,6 +18727,7 @@
       TODO(brianwilkerson): Another reasonable fix is to convert the operator to
        be a normal method.
   WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS:
+    type: compileTimeError
     parameters:
       int p0: the number of parameters found in the operator declaration
     sharedName: WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
@@ -18122,6 +18737,7 @@
       7.1.1 Operators: It is a compile time error if the arity of the
       user-declared operator - is not 0 or 1.
   WRONG_NUMBER_OF_TYPE_ARGUMENTS:
+    type: compileTimeError
     parameters:
       Object p0: the name of the type being referenced (<i>G</i>)
       int p1: the number of type parameters that were declared
@@ -18172,6 +18788,7 @@
       void f(C<int> x) {}
       ```
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the class being instantiated
       String p1: the name of the constructor being invoked
@@ -18222,6 +18839,7 @@
       C f() => C.named();
       ```
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_DOT_SHORTHAND_CONSTRUCTOR:
+    type: compileTimeError
     parameters:
       String p0: the name of the class being instantiated
       String p1: the name of the constructor being invoked
@@ -18231,6 +18849,7 @@
     correctionMessage: Try removing the type arguments, or adding a class name, followed by the type arguments, then the constructor name.
     hasPublishedDocs: true
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_ENUM:
+    type: compileTimeError
     parameters:
       int p0: the number of type parameters that were declared
       int p1: the number of type arguments provided
@@ -18277,6 +18896,7 @@
       }
       ```
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION:
+    type: compileTimeError
     parameters:
       String p0: the name of the extension being referenced
       int p1: the number of type parameters that were declared
@@ -18322,22 +18942,25 @@
       }
       ```
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_ANONYMOUS_FUNCTION:
+    type: compileTimeError
     parameters:
-      int p0: the number of type parameters that were declared
-      int p1: the number of type arguments provided
+      int typeParameterCount: the number of type parameters that were declared
+      int typeArgumentCount: the number of type arguments provided
     sharedName: WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION
-    problemMessage: "This function is declared with #p0 type parameters, but #p1 type arguments were given."
+    problemMessage: "This function is declared with #typeParameterCount type parameters, but #typeArgumentCount type arguments were given."
     correctionMessage: Try adjusting the number of type arguments to match the number of type parameters.
     hasPublishedDocs: false
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_FUNCTION:
+    type: compileTimeError
     parameters:
-      String p0: the name of the function being referenced
-      int p1: the number of type parameters that were declared
-      int p2: the number of type arguments provided
-    problemMessage: "The function '#p0' is declared with #p1 type parameters, but #p2 type arguments were given."
+      String functionName: the name of the function being referenced
+      int typeParameterCount: the number of type parameters that were declared
+      int typeArgumentCount: the number of type arguments provided
+    problemMessage: "The function '#functionName' is declared with #typeParameterCount type parameters, but #typeArgumentCount type arguments were given."
     correctionMessage: Try adjusting the number of type arguments to match the number of type parameters.
     hasPublishedDocs: false
   WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD:
+    type: compileTimeError
     parameters:
       Type p0: the name of the method being referenced (<i>G</i>)
       int p1: the number of type parameters that were declared
@@ -18390,6 +19013,7 @@
       int f(C c) => c.m(2);
       ```
   WRONG_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE:
+    type: compileTimeError
     parameters:
       String p0: the name of the type parameter
       Type p1: the name of the super interface
@@ -18401,6 +19025,7 @@
       assume that `T` is a direct superinterface of `C`. It is a compile-time
       error if `X` occurs contravariantly or invariantly in `T`.
   WRONG_TYPE_PARAMETER_VARIANCE_POSITION:
+    type: compileTimeError
     parameters:
       Object p0: the variance modifier defined for {0}
       Object p1: the name of the type parameter
@@ -18421,6 +19046,7 @@
       body of `C`, except when `X` is in a covariant position in the type
       annotation of a covariant formal parameter.
   YIELD_EACH_IN_NON_GENERATOR:
+    type: compileTimeError
     parameters: none
     sharedName: YIELD_IN_NON_GENERATOR
     problemMessage: "Yield-each statements must be in a generator function (one marked with either 'async*' or 'sync*')."
@@ -18465,6 +19091,7 @@
       }
       ```
   YIELD_IN_NON_GENERATOR:
+    type: compileTimeError
     parameters: none
     problemMessage: "Yield statements must be in a generator function (one marked with either 'async*' or 'sync*')."
     correctionMessage: "Try adding 'async*' or 'sync*' to the enclosing function."
@@ -18473,6 +19100,7 @@
       ?? Yield: It is a compile-time error if a yield statement appears in a
       function that is not a generator function.
   YIELD_EACH_OF_INVALID_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression after `yield*`
       Type p1: the return type of the function containing the `yield*`
@@ -18480,6 +19108,7 @@
     problemMessage: "The type '#p0' implied by the 'yield*' expression must be assignable to '#p1'."
     hasPublishedDocs: true
   YIELD_OF_INVALID_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type of the expression after `yield`
       Type p1: the return type of the function containing the `yield`
@@ -18527,6 +19156,7 @@
       ```
 FfiCode:
   ABI_SPECIFIC_INTEGER_INVALID:
+    type: compileTimeError
     parameters: none
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one const constructor, no other members, and no type parameters."
     correctionMessage: Try removing all type parameters, removing all members, and adding one const constructor.
@@ -18619,6 +19249,7 @@
       }
       ```
   ABI_SPECIFIC_INTEGER_MAPPING_EXTRA:
+    type: compileTimeError
     parameters: none
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
     correctionMessage: Try removing the extra annotation.
@@ -18659,6 +19290,7 @@
       }
       ```
   ABI_SPECIFIC_INTEGER_MAPPING_MISSING:
+    type: compileTimeError
     parameters: none
     problemMessage: "Classes extending 'AbiSpecificInteger' must have exactly one 'AbiSpecificIntegerMapping' annotation specifying the mapping from ABI to a 'NativeType' integer with a fixed size."
     correctionMessage: Try adding an annotation.
@@ -18696,6 +19328,7 @@
       }
       ```
   ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED:
+    type: compileTimeError
     parameters:
       String p0: the value of the invalid mapping
     problemMessage: "Invalid mapping to '#p0'; only mappings to 'Int8', 'Int16', 'Int32', 'Int64', 'Uint8', 'Uint16', 'UInt32', and 'Uint64' are supported."
@@ -18743,6 +19376,7 @@
       }
       ```
   ADDRESS_POSITION:
+    type: compileTimeError
     parameters: none
     problemMessage: "The '.address' expression can only be used as argument to a leaf native external call."
     hasPublishedDocs: true
@@ -18794,6 +19428,7 @@
       }
       ```
   ADDRESS_RECEIVER:
+    type: compileTimeError
     parameters: none
     problemMessage: "The receiver of '.address' must be a concrete 'TypedData', a concrete 'TypedData' '[]', an 'Array', an 'Array' '[]', a Struct field, or a Union field."
     correctionMessage: Change the receiver of '.address' to one of the allowed kinds.
@@ -18868,6 +19503,7 @@
       }
       ```
   ANNOTATION_ON_POINTER_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: "Fields in a struct class whose type is 'Pointer' shouldn't have any annotations."
     correctionMessage: Try removing the annotation.
@@ -18908,6 +19544,7 @@
       }
       ```
   ARGUMENT_MUST_BE_A_CONSTANT:
+    type: compileTimeError
     parameters:
       String p0: the name of the argument
     problemMessage: "Argument '#p0' must be a constant."
@@ -18966,6 +19603,7 @@
       }
       ```
   ARGUMENT_MUST_BE_NATIVE:
+    type: compileTimeError
     parameters: none
     problemMessage: "Argument to 'Native.addressOf' must be annotated with @Native"
     correctionMessage: "Try passing a static function or field annotated with '@Native'"
@@ -19035,6 +19673,7 @@
       }
       ```
   NATIVE_FIELD_INVALID_TYPE:
+    type: compileTimeError
     parameters:
       Type p0: The invalid type.
     problemMessage: "'#p0' is an unsupported type for native fields. Native fields only support pointers, arrays or numeric and compound types."
@@ -19092,6 +19731,7 @@
       external Pointer<NativeFunction<Void Function(Pointer<Void>)>> free;
       ```
   NATIVE_FIELD_MISSING_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: "The native type of this field could not be inferred and must be specified in the annotation."
     correctionMessage: "Try adding a type parameter extending `NativeType` to the `@Native` annotation."
@@ -19136,6 +19776,7 @@
 
       For more information about FFI, see [C interop using dart:ffi][ffi].
   NATIVE_FIELD_NOT_STATIC:
+    type: compileTimeError
     parameters: none
     problemMessage: "Native fields must be static."
     correctionMessage: "Try adding the modifier 'static' to this field."
@@ -19203,6 +19844,7 @@
       }
       ```
   NATIVE_FUNCTION_MISSING_TYPE:
+    type: compileTimeError
     parameters: none
     problemMessage: The native type of this function couldn't be inferred so it must be specified in the annotation.
     correctionMessage: Try adding a type parameter extending `NativeType` to the `@Native` annotation.
@@ -19246,6 +19888,7 @@
       external int f();
       ```
   COMPOUND_IMPLEMENTS_FINALIZABLE:
+    type: compileTimeError
     parameters:
       String p0: the name of the struct or union class
     problemMessage: "The class '#p0' can't implement Finalizable."
@@ -19284,6 +19927,7 @@
       }
       ```
   CREATION_OF_STRUCT_OR_UNION:
+    type: compileTimeError
     parameters: none
     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'."
@@ -19336,6 +19980,7 @@
       }
       ```
   EMPTY_STRUCT:
+    type: compileTimeError
     parameters:
       String p0: the name of the subclass
       String p1: the name of the superclass
@@ -19391,6 +20036,7 @@
       class C {}
       ```
   EXTRA_ANNOTATION_ON_STRUCT_FIELD:
+    type: compileTimeError
     parameters: none
     problemMessage: Fields in a struct class must have exactly one annotation indicating the native type.
     correctionMessage: Try removing the extra annotation.
@@ -19431,6 +20077,7 @@
       }
       ```
   EXTRA_SIZE_ANNOTATION_CARRAY:
+    type: compileTimeError
     parameters: none
     problemMessage: "'Array's must have exactly one 'Array' annotation."
     correctionMessage: Try removing the extra annotation.
@@ -19472,6 +20119,7 @@
       }
       ```
   FFI_NATIVE_MUST_BE_EXTERNAL:
+    type: compileTimeError
     parameters: none
     problemMessage: Native functions must be declared external.
     correctionMessage: Add the `external` keyword to the function.
@@ -19507,6 +20155,7 @@
       ```
       TODO(brianwilkerson): Fix error range
   FFI_NATIVE_ONLY_CLASSES_EXTENDING_NATIVEFIELDWRAPPERCLASS1_CAN_BE_POINTER:
+    type: compileTimeError
     parameters: none
     problemMessage: Only classes extending NativeFieldWrapperClass1 can be passed as Pointer.
     correctionMessage: Pass as Handle instead.
@@ -19563,6 +20212,7 @@
           }
           ```
   FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS:
+    type: compileTimeError
     parameters:
       int p0: the expected number of parameters
       int p1: the actual number of parameters
@@ -19613,6 +20263,7 @@
       ```
       TODO(brianwilkerson): Fix error range
   FFI_NATIVE_UNEXPECTED_NUMBER_OF_PARAMETERS_WITH_RECEIVER:
+    type: compileTimeError
     parameters:
       int p0: the expected number of parameters
       int p1: the actual number of parameters
@@ -19655,6 +20306,7 @@
       }
       ```
   FFI_NATIVE_INVALID_DUPLICATE_DEFAULT_ASSET:
+    type: compileTimeError
     parameters: none
     problemMessage: "There may be at most one @DefaultAsset annotation on a library."
     correctionMessage: "Try removing the extra annotation."
@@ -19689,6 +20341,7 @@
       import 'dart:ffi';
       ```
   FFI_NATIVE_INVALID_MULTIPLE_ANNOTATIONS:
+    type: compileTimeError
     parameters: none
     problemMessage: "Native functions and fields must have exactly one `@Native` annotation."
     correctionMessage: "Try removing the extra annotation."
@@ -19723,6 +20376,7 @@
       external int f(int v);
       ```
   FIELD_INITIALIZER_IN_STRUCT:
+    type: compileTimeError
     parameters: none
     removedIn: "3.0"
     problemMessage: "Constructors in subclasses of 'Struct' and 'Union' can't have field initializers."
@@ -19769,6 +20423,7 @@
       }
       ```
   FIELD_IN_STRUCT_WITH_INITIALIZER:
+    type: compileTimeError
     parameters: none
     removedIn: "3.0"
     problemMessage: "Fields in subclasses of 'Struct' and 'Union' can't have initializers."
@@ -19809,6 +20464,7 @@
       }
       ```
   FIELD_MUST_BE_EXTERNAL_IN_STRUCT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Fields of 'Struct' and 'Union' subclasses must be marked external."
     correctionMessage: "Try adding the 'external' modifier."
@@ -19848,6 +20504,7 @@
       }
       ```
   GENERIC_STRUCT_SUBCLASS:
+    type: compileTimeError
     parameters:
       String p0: the name of the struct class
     problemMessage: "The class '#p0' can't extend 'Struct' or 'Union' because '#p0' is generic."
@@ -19886,6 +20543,7 @@
       }
       ```
   INVALID_EXCEPTION_VALUE:
+    type: compileTimeError
     parameters:
       String p0: the name of the method
     problemMessage: "The method #p0 can't have an exceptional return value (the second argument) when the return type of the function is either 'void', 'Handle' or 'Pointer'."
@@ -19935,6 +20593,7 @@
       }
       ```
   INVALID_FIELD_TYPE_IN_STRUCT:
+    type: compileTimeError
     parameters:
       String p0: the type of the field
     problemMessage: "Fields in struct classes can't have the type '#p0'. They can only be declared as 'int', 'double', 'Array', 'Pointer', or subtype of 'Struct' or 'Union'."
@@ -19982,6 +20641,7 @@
       }
       ```
   LEAF_CALL_MUST_NOT_RETURN_HANDLE:
+    type: compileTimeError
     parameters: none
     problemMessage: "FFI leaf call can't return a 'Handle'."
     correctionMessage: Try changing the return type to primitive or struct.
@@ -20039,6 +20699,7 @@
       }
       ```
   LEAF_CALL_MUST_NOT_TAKE_HANDLE:
+    type: compileTimeError
     parameters: none
     problemMessage: "FFI leaf call can't take arguments of type 'Handle'."
     correctionMessage: Try changing the argument type to primitive or struct.
@@ -20090,6 +20751,7 @@
       }
       ```
   MISMATCHED_ANNOTATION_ON_STRUCT_FIELD:
+    type: compileTimeError
     parameters: none
     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.
@@ -20140,6 +20802,7 @@
       }
       ```
   MISSING_ANNOTATION_ON_STRUCT_FIELD:
+    type: compileTimeError
     parameters:
       Type p0: the type that is missing a native type annotation
       String p1: the superclass which is extended by this field's class
@@ -20183,6 +20846,7 @@
       }
       ```
   MISSING_EXCEPTION_VALUE:
+    type: compileTimeError
     parameters:
       String p0: the name of the method
     problemMessage: "The method #p0 must have an exceptional return value (the second argument) when the return type of the function is neither 'void', 'Handle', nor 'Pointer'."
@@ -20229,6 +20893,7 @@
       }
       ```
   MISSING_FIELD_TYPE_IN_STRUCT:
+    type: compileTimeError
     parameters: none
     problemMessage: "Fields in struct classes must have an explicitly declared type of 'int', 'double' or 'Pointer'."
     correctionMessage: "Try using 'int', 'double' or 'Pointer'."
@@ -20275,6 +20940,7 @@
       }
       ```
   MISSING_SIZE_ANNOTATION_CARRAY:
+    type: compileTimeError
     parameters: none
     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."
@@ -20314,6 +20980,7 @@
       }
       ```
   MUST_BE_A_NATIVE_FUNCTION_TYPE:
+    type: compileTimeError
     parameters:
       Object p0: the type that should be a valid dart:ffi native type.
       String p1: the name of the function whose invocation depends on this relationship
@@ -20364,6 +21031,7 @@
       }
       ```
   MUST_BE_A_SUBTYPE:
+    type: compileTimeError
     parameters:
       Type p0: the type that should be a subtype
       Type p1: the supertype that the subtype is compared to
@@ -20432,6 +21100,7 @@
       }
       ```
   MUST_RETURN_VOID:
+    type: compileTimeError
     parameters:
       Type p0: the return type that should be 'void'.
     problemMessage: "The return type of the function passed to 'NativeCallable.listener' must be 'void' rather than '#p0'."
@@ -20479,6 +21148,7 @@
       }
       ```
   NEGATIVE_VARIABLE_DIMENSION:
+    type: compileTimeError
     parameters: none
     problemMessage: The variable dimension of a variable-length array must be non-negative.
     correctionMessage: Try using a value that is zero or greater.
@@ -20549,6 +21219,7 @@
       }
       ```
   NON_CONSTANT_TYPE_ARGUMENT:
+    type: compileTimeError
     parameters:
       String p0: the name of the function, method, or constructor having type arguments
     problemMessage: "The type arguments to '#p0' must be known at compile time, so they can't be type parameters."
@@ -20596,6 +21267,7 @@
       }
       ```
   NON_NATIVE_FUNCTION_TYPE_ARGUMENT_TO_POINTER:
+    type: compileTimeError
     parameters:
       Type p0: the type that should be a valid dart:ffi native type.
     problemMessage: "Can't invoke 'asFunction' because the function signature '#p0' for the pointer isn't a valid C function signature."
@@ -20646,6 +21318,7 @@
       }
       ```
   NON_POSITIVE_ARRAY_DIMENSION:
+    type: compileTimeError
     parameters: none
     problemMessage: Array dimensions must be positive numbers.
     correctionMessage: Try changing the input to a positive number.
@@ -20697,6 +21370,7 @@
       }
       ```
   NON_SIZED_TYPE_ARGUMENT:
+    type: compileTimeError
     parameters:
       String p0: the name of the field
       Type p1: the type of the field
@@ -20740,6 +21414,7 @@
       }
       ```
   PACKED_ANNOTATION:
+    type: compileTimeError
     parameters: none
     problemMessage: "Structs must have at most one 'Packed' annotation."
     correctionMessage: "Try removing extra 'Packed' annotations."
@@ -20780,6 +21455,7 @@
       }
       ```
   PACKED_ANNOTATION_ALIGNMENT:
+    type: compileTimeError
     parameters: none
     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."
@@ -20819,6 +21495,7 @@
       }
       ```
   VARIABLE_LENGTH_ARRAY_NOT_LAST:
+    type: compileTimeError
     parameters: none
     problemMessage: "Variable length 'Array's must only occur as the last field of Structs."
     correctionMessage: "Try adjusting the arguments in the 'Array' annotation."
@@ -20879,6 +21556,7 @@
       }
       ```
   SIZE_ANNOTATION_DIMENSIONS:
+    type: compileTimeError
     parameters: none
     problemMessage: "'Array's must have an 'Array' annotation that matches the dimensions."
     correctionMessage: "Try adjusting the arguments in the 'Array' annotation."
@@ -20932,6 +21610,7 @@
       }
       ```
   SUBTYPE_OF_FFI_CLASS_IN_EXTENDS:
+    type: compileTimeError
     parameters:
       Object p0: the name of the subclass
       Object p1: the name of the class being extended, implemented, or mixed in
@@ -20982,6 +21661,7 @@
       final class C {}
       ```
   SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS:
+    type: compileTimeError
     parameters:
       Object p0: the name of the subclass
       Object p1: the name of the class being extended, implemented, or mixed in
@@ -20991,6 +21671,7 @@
     correctionMessage: "Try implementing 'Allocator' or 'Finalizable'."
     hasPublishedDocs: true
   SUBTYPE_OF_FFI_CLASS_IN_WITH:
+    type: compileTimeError
     parameters:
       Object p0: the name of the subclass
       Object p1: the name of the class being extended, implemented, or mixed in
@@ -21000,6 +21681,7 @@
     correctionMessage: "Try extending 'Struct' or 'Union'."
     hasPublishedDocs: true
   SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS:
+    type: compileTimeError
     parameters:
       String p0: the name of the subclass
       String p1: the name of the class being extended, implemented, or mixed in
@@ -21053,6 +21735,7 @@
       }
       ```
   SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS:
+    type: compileTimeError
     parameters:
       String p0: the name of the subclass
       String p1: the name of the class being extended, implemented, or mixed in
@@ -21061,6 +21744,7 @@
     correctionMessage: "Try extending 'Struct', 'Union', or 'AbiSpecificInteger' directly."
     hasPublishedDocs: true
   SUBTYPE_OF_STRUCT_CLASS_IN_WITH:
+    type: compileTimeError
     parameters:
       String p0: the name of the subclass
       String p1: the name of the class being extended, implemented, or mixed in
@@ -21070,6 +21754,7 @@
     hasPublishedDocs: true
 HintCode:
   DEPRECATED_COLON_FOR_DEFAULT_VALUE:
+    type: hint
     parameters: none
     problemMessage: Using a colon as the separator before a default value is deprecated and will not be supported in language version 3.0 and later.
     correctionMessage: Try replacing the colon with an equal sign.
@@ -21102,6 +21787,7 @@
       void f({int i = 0}) {}
       ```
   DEPRECATED_MEMBER_USE:
+    type: hint
     parameters:
       String p0: the name of the member
     problemMessage: "'#p0' is deprecated and shouldn't be used."
@@ -21129,6 +21815,7 @@
       The documentation for declarations that are annotated with `@deprecated`
       should indicate what code to use in place of the deprecated code.
   DEPRECATED_MEMBER_USE_WITH_MESSAGE:
+    type: hint
     parameters:
       String p0: the name of the member
       String p1: message details
@@ -21137,6 +21824,7 @@
     correctionMessage: Try replacing the use of the deprecated member with the replacement.
     hasPublishedDocs: true
   DIVISION_OPTIMIZATION:
+    type: hint
     parameters: none
     removedIn: "3.5"
     problemMessage: The operator x ~/ y is more efficient than (x / y).toInt().
@@ -21166,6 +21854,7 @@
       int divide(int x, int y) => x ~/ y;
       ```
   IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION:
+    type: hint
     parameters: none
     problemMessage: "The imported library defines a top-level function named 'loadLibrary' that is hidden by deferring this library."
     correctionMessage: Try changing the import to not be deferred, or rename the function in the imported library.
@@ -21239,6 +21928,7 @@
       }
       ```
   IMPORT_OF_LEGACY_LIBRARY_INTO_NULL_SAFE:
+    type: hint
     parameters:
       Object p0: the name of the library
     removedIn: "3.0"
@@ -21282,6 +21972,7 @@
       needs to have a language version that is before 2.12, when null safety was
       enabled by default.
   UNNECESSARY_IMPORT:
+    type: hint
     parameters:
       String p0: the URI that is not necessary
       String p1: the URI that makes it unnecessary
@@ -21333,6 +22024,7 @@
       the missing references to those names.
 ManifestWarningCode:
   CAMERA_PERMISSIONS_INCOMPATIBLE:
+    type: staticWarning
     parameters: none
     problemMessage: Camera permissions make app incompatible for Chrome OS, consider adding optional features "android.hardware.camera" and "android.hardware.camera.autofocus".
     correctionMessage: 'Try adding `<uses-feature android:name="android.hardware.camera"  android:required="false">` `<uses-feature android:name="android.hardware.camera.autofocus"  android:required="false">`.'
@@ -21341,12 +22033,14 @@
       A code indicating that the camera permissions is not supported on Chrome
       OS.
   NON_RESIZABLE_ACTIVITY:
+    type: staticWarning
     parameters: none
     problemMessage: The `<activity>` element should be allowed to be resized to allow users to take advantage of the multi-window environment on Chrome OS
     correctionMessage: Consider declaring the corresponding activity element with `resizableActivity="true"` attribute.
     hasPublishedDocs: false
     comment: A code indicating that the activity is set to be non resizable.
   NO_TOUCHSCREEN_FEATURE:
+    type: staticWarning
     parameters: none
     problemMessage: 'The default "android.hardware.touchscreen" needs to be optional for Chrome OS. '
     correctionMessage: 'Consider adding <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> to the manifest.'
@@ -21355,6 +22049,7 @@
       A code indicating that the touchscreen feature is not specified in the
       manifest.
   PERMISSION_IMPLIES_UNSUPPORTED_HARDWARE:
+    type: staticWarning
     parameters:
       Object p0: the name of the feature tag
     problemMessage: "Permission makes app incompatible for Chrome OS, consider adding optional #p0 feature tag, "
@@ -21364,12 +22059,14 @@
       A code indicating that a specified permission is not supported on Chrome
       OS.
   SETTING_ORIENTATION_ON_ACTIVITY:
+    type: staticWarning
     parameters: none
     problemMessage: The `<activity>` element should not be locked to any orientation so that users can take advantage of the multi-window environments and larger screens on Chrome OS
     correctionMessage: Consider declaring the corresponding activity element with `screenOrientation="unspecified"` or `"fullSensor"` attribute.
     hasPublishedDocs: false
     comment: A code indicating that the activity is locked to an orientation.
   UNSUPPORTED_CHROME_OS_FEATURE:
+    type: staticWarning
     parameters:
       String p0: the name of the feature
     problemMessage: "The feature #p0 isn't supported on Chrome OS, consider making it optional."
@@ -21378,6 +22075,7 @@
     comment: |-
       A code indicating that a specified feature is not supported on Chrome OS.
   UNSUPPORTED_CHROME_OS_HARDWARE:
+    type: staticWarning
     parameters:
       String p0: the name of the feature
     problemMessage: "The feature #p0 isn't supported on Chrome OS, consider making it optional."
@@ -21388,11 +22086,13 @@
       Chrome OS.
 ParserErrorCode:
   ABSTRACT_STATIC_METHOD:
+    type: syntacticError
     parameters: none
     problemMessage: "Static methods can't be declared to be 'abstract'."
     correctionMessage: "Try removing the keyword 'abstract'."
     hasPublishedDocs: false
   ASYNC_KEYWORD_USED_AS_IDENTIFIER:
+    type: syntacticError
     parameters: none
     problemMessage: "The keywords 'await' and 'yield' can't be used as identifiers in an asynchronous or generator function."
     hasPublishedDocs: false
@@ -21401,16 +22101,19 @@
       identifiers async, await, or yield is used as an identifier in a function
       body marked with either async, async, or sync.
   CONST_CONSTRUCTOR_WITH_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "Const constructors can't have a body."
     correctionMessage: "Try removing either the 'const' keyword or the body."
     hasPublishedDocs: false
   COVARIANT_CONSTRUCTOR:
+    type: syntacticError
     parameters: none
     problemMessage: "A constructor can't be declared to be 'covariant'."
     correctionMessage: "Try removing the keyword 'covariant'."
     hasPublishedDocs: false
   DEFAULT_VALUE_IN_FUNCTION_TYPE:
+    type: syntacticError
     parameters: none
     problemMessage: "Parameters in a function type can't have default values."
     correctionMessage: Try removing the default value.
@@ -21442,142 +22145,170 @@
       }
       ```
   EMPTY_ENUM_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: An enum must declare at least one constant name.
     correctionMessage: Try declaring a constant.
     hasPublishedDocs: false
   EXPECTED_CASE_OR_DEFAULT:
+    type: syntacticError
     parameters: none
     problemMessage: "Expected 'case' or 'default'."
     correctionMessage: Try placing this code inside a case clause.
     hasPublishedDocs: false
   EXPECTED_CLASS_MEMBER:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a class member.
     correctionMessage: Try placing this code inside a class member.
     hasPublishedDocs: false
   EXPECTED_EXECUTABLE:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a method, getter, setter or operator declaration.
     correctionMessage: This appears to be incomplete code. Try removing it or completing it.
     hasPublishedDocs: false
   EXPECTED_LIST_OR_MAP_LITERAL:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a list or map literal.
     correctionMessage: Try inserting a list or map literal, or remove the type arguments.
     hasPublishedDocs: false
   EXPECTED_NAMED_TYPE_EXTENDS:
+    type: syntacticError
     parameters: none
     sharedName: EXPECTED_NAMED_TYPE
     problemMessage: Expected a class name.
     correctionMessage: Try using a class name, possibly with type arguments.
     hasPublishedDocs: false
   EXPECTED_NAMED_TYPE_IMPLEMENTS:
+    type: syntacticError
     parameters: none
     sharedName: EXPECTED_NAMED_TYPE
     problemMessage: Expected the name of a class or mixin.
     correctionMessage: Try using a class or mixin name, possibly with type arguments.
     hasPublishedDocs: false
   EXPECTED_NAMED_TYPE_ON:
+    type: syntacticError
     parameters: none
     sharedName: EXPECTED_NAMED_TYPE
     problemMessage: Expected the name of a class or mixin.
     correctionMessage: Try using a class or mixin name, possibly with type arguments.
     hasPublishedDocs: false
   EXPECTED_NAMED_TYPE_WITH:
+    type: syntacticError
     parameters: none
     sharedName: EXPECTED_NAMED_TYPE
     problemMessage: Expected a mixin name.
     correctionMessage: Try using a mixin name, possibly with type arguments.
     hasPublishedDocs: false
   EXPECTED_REPRESENTATION_FIELD:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a representation field.
     correctionMessage: Try providing the representation field for this extension type.
     hasPublishedDocs: false
   EXPECTED_REPRESENTATION_TYPE:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a representation type.
     correctionMessage: Try providing the representation type for this extension type.
     hasPublishedDocs: false
   EXPECTED_STRING_LITERAL:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a string literal.
     hasPublishedDocs: false
   EXPECTED_TOKEN:
+    type: syntacticError
     parameters:
       String p0: the token that was expected but not found
     problemMessage: "Expected to find '#p0'."
     hasPublishedDocs: false
   EXPECTED_TYPE_NAME:
+    type: syntacticError
     parameters: none
     problemMessage: Expected a type name.
     hasPublishedDocs: false
   EXTERNAL_GETTER_WITH_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "External getters can't have a body."
     correctionMessage: "Try removing the body of the getter, or removing the keyword 'external'."
     hasPublishedDocs: false
   EXTERNAL_OPERATOR_WITH_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "External operators can't have a body."
     correctionMessage: "Try removing the body of the operator, or removing the keyword 'external'."
     hasPublishedDocs: false
   EXTERNAL_SETTER_WITH_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "External setters can't have a body."
     correctionMessage: "Try removing the body of the setter, or removing the keyword 'external'."
     hasPublishedDocs: false
   FACTORY_WITHOUT_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "A non-redirecting 'factory' constructor must have a body."
     correctionMessage: Try adding a body to the constructor.
     hasPublishedDocs: false
   FACTORY_WITH_INITIALIZERS:
+    type: syntacticError
     parameters: none
     problemMessage: "A 'factory' constructor can't have initializers."
     correctionMessage: "Try removing the 'factory' keyword to make this a generative constructor, or removing the initializers."
     hasPublishedDocs: false
   FINAL_CONSTRUCTOR:
+    type: syntacticError
     parameters: none
     problemMessage: "A constructor can't be declared to be 'final'."
     correctionMessage: "Try removing the keyword 'final'."
     hasPublishedDocs: false
   FINAL_METHOD:
+    type: syntacticError
     parameters: none
     problemMessage: "Getters, setters and methods can't be declared to be 'final'."
     correctionMessage: "Try removing the keyword 'final'."
     hasPublishedDocs: false
   GETTER_IN_FUNCTION:
+    type: syntacticError
     parameters: none
     problemMessage: "Getters can't be defined within methods or functions."
     correctionMessage: Try moving the getter outside the method or function, or converting the getter to a function.
     hasPublishedDocs: false
   GETTER_WITH_PARAMETERS:
+    type: syntacticError
     parameters: none
     problemMessage: Getters must be declared without a parameter list.
     correctionMessage: "Try removing the parameter list, or removing the keyword 'get' to define a method rather than a getter."
     hasPublishedDocs: false
   INVALID_CODE_POINT:
+    type: syntacticError
     parameters:
       String p0: the invalid escape sequence
     problemMessage: "The escape sequence '#p0' isn't a valid code point."
     hasPublishedDocs: false
   INVALID_COMMENT_REFERENCE:
+    type: syntacticError
     parameters: none
     problemMessage: "Comment references should contain a possibly prefixed identifier and can start with 'new', but shouldn't contain anything else."
     hasPublishedDocs: false
   INVALID_GENERIC_FUNCTION_TYPE:
+    type: syntacticError
     parameters: none
     problemMessage: Invalid generic function type.
     correctionMessage: "Try using a generic function type (returnType 'Function(' parameters ')')."
     hasPublishedDocs: false
   INVALID_LITERAL_IN_CONFIGURATION:
+    type: syntacticError
     parameters: none
     problemMessage: "The literal in a configuration can't contain interpolation."
     correctionMessage: Try removing the interpolation expressions.
     hasPublishedDocs: false
   INVALID_OPERATOR_FOR_SUPER:
+    type: syntacticError
     parameters:
       Object p0: the operator being applied to 'super'
     problemMessage: "The operator '#p0' can't be used with 'super'."
@@ -21586,208 +22317,249 @@
       Only generated by the old parser.
       Replaced by INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER.
   INVALID_STAR_AFTER_ASYNC:
+    type: syntacticError
     parameters: none
     problemMessage: "The modifier 'async*' isn't allowed for an expression function body."
     correctionMessage: Try converting the body to a block.
     hasPublishedDocs: false
   INVALID_SYNC:
+    type: syntacticError
     parameters: none
     problemMessage: "The modifier 'sync' isn't allowed for an expression function body."
     correctionMessage: Try converting the body to a block.
     hasPublishedDocs: false
   INVALID_USE_OF_IDENTIFIER_AUGMENTED:
+    type: syntacticError
     parameters: none
     experiment: augmentations
     problemMessage: The identifier 'augmented' can only be used to reference the augmented declaration inside an augmentation.
     correctionMessage: Try using a different identifier.
     hasPublishedDocs: false
   LOCAL_FUNCTION_DECLARATION_MODIFIER:
+    type: syntacticError
     parameters: none
     problemMessage: "Local function declarations can't specify any modifiers."
     correctionMessage: Try removing the modifier.
     hasPublishedDocs: false
   MISSING_CLOSING_PARENTHESIS:
+    type: syntacticError
     parameters: none
     problemMessage: The closing parenthesis is missing.
     correctionMessage: Try adding the closing parenthesis.
     hasPublishedDocs: false
   MISSING_ENUM_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: An enum definition must have a body with at least one constant name.
     correctionMessage: Try adding a body and defining at least one constant.
     hasPublishedDocs: false
   MISSING_EXPRESSION_IN_INITIALIZER:
+    type: syntacticError
     parameters: none
     problemMessage: Expected an expression after the assignment operator.
     correctionMessage: Try adding the value to be assigned, or remove the assignment operator.
     hasPublishedDocs: false
   MISSING_FUNCTION_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: A function body must be provided.
     correctionMessage: Try adding a function body.
     hasPublishedDocs: false
   MISSING_FUNCTION_KEYWORD:
+    type: syntacticError
     parameters: none
     problemMessage: "Function types must have the keyword 'Function' before the parameter list."
     correctionMessage: "Try adding the keyword 'Function'."
     hasPublishedDocs: false
   MISSING_FUNCTION_PARAMETERS:
+    type: syntacticError
     parameters: none
     problemMessage: Functions must have an explicit list of parameters.
     correctionMessage: Try adding a parameter list.
     hasPublishedDocs: false
   MISSING_GET:
+    type: syntacticError
     parameters: none
     problemMessage: "Getters must have the keyword 'get' before the getter name."
     correctionMessage: "Try adding the keyword 'get'."
     hasPublishedDocs: false
   MISSING_IDENTIFIER:
+    type: syntacticError
     parameters: none
     problemMessage: Expected an identifier.
     hasPublishedDocs: false
   MISSING_METHOD_PARAMETERS:
+    type: syntacticError
     parameters: none
     problemMessage: Methods must have an explicit list of parameters.
     correctionMessage: Try adding a parameter list.
     hasPublishedDocs: false
   MISSING_NAME_FOR_NAMED_PARAMETER:
+    type: syntacticError
     parameters: none
     problemMessage: Named parameters in a function type must have a name
     correctionMessage: Try providing a name for the parameter or removing the curly braces.
     hasPublishedDocs: false
   MISSING_NAME_IN_LIBRARY_DIRECTIVE:
+    type: syntacticError
     parameters: none
     problemMessage: Library directives must include a library name.
     correctionMessage: "Try adding a library name after the keyword 'library', or remove the library directive if the library doesn't have any parts."
     hasPublishedDocs: false
   MISSING_NAME_IN_PART_OF_DIRECTIVE:
+    type: syntacticError
     parameters: none
     problemMessage: Part-of directives must include a library name.
     correctionMessage: "Try adding a library name after the 'of'."
     hasPublishedDocs: false
   MISSING_STAR_AFTER_SYNC:
+    type: syntacticError
     parameters: none
     problemMessage: "The modifier 'sync' must be followed by a star ('*')."
     correctionMessage: Try removing the modifier, or add a star.
     hasPublishedDocs: false
   MISSING_TERMINATOR_FOR_PARAMETER_GROUP:
+    type: syntacticError
     parameters:
       Object p0: the terminator that is missing
     problemMessage: "There is no '#p0' to close the parameter group."
     correctionMessage: "Try inserting a '#p0' at the end of the group."
     hasPublishedDocs: false
   MISSING_TYPEDEF_PARAMETERS:
+    type: syntacticError
     parameters: none
     problemMessage: Typedefs must have an explicit list of parameters.
     correctionMessage: Try adding a parameter list.
     hasPublishedDocs: false
   MISSING_VARIABLE_IN_FOR_EACH:
+    type: syntacticError
     parameters: none
     problemMessage: "A loop variable must be declared in a for-each loop before the 'in', but none was found."
     correctionMessage: Try declaring a loop variable.
     hasPublishedDocs: false
   MIXED_PARAMETER_GROUPS:
+    type: syntacticError
     parameters: none
     problemMessage: "Can't have both positional and named parameters in a single parameter list."
     correctionMessage: Try choosing a single style of optional parameters.
     hasPublishedDocs: false
   MULTIPLE_IMPLEMENTS_CLAUSES:
+    type: syntacticError
     parameters: none
     problemMessage: Each class or mixin definition can have at most one implements clause.
     correctionMessage: Try combining all of the implements clauses into a single clause.
     hasPublishedDocs: false
   MULTIPLE_NAMED_PARAMETER_GROUPS:
+    type: syntacticError
     parameters: none
     problemMessage: "Can't have multiple groups of named parameters in a single parameter list."
     correctionMessage: Try combining all of the groups into a single group.
     hasPublishedDocs: false
   MULTIPLE_POSITIONAL_PARAMETER_GROUPS:
+    type: syntacticError
     parameters: none
     problemMessage: "Can't have multiple groups of positional parameters in a single parameter list."
     correctionMessage: Try combining all of the groups into a single group.
     hasPublishedDocs: false
   MULTIPLE_REPRESENTATION_FIELDS:
+    type: syntacticError
     parameters: none
     problemMessage: Each extension type should have exactly one representation field.
     correctionMessage: Try combining fields into a record, or removing extra fields.
     hasPublishedDocs: false
   MULTIPLE_VARIABLES_IN_FOR_EACH:
+    type: syntacticError
     parameters:
       Object p0: the number of variables being declared
     problemMessage: "A single loop variable must be declared in a for-each loop before the 'in', but #p0 were found."
     correctionMessage: Try moving all but one of the declarations inside the loop body.
     hasPublishedDocs: false
   NAMED_FUNCTION_EXPRESSION:
+    type: syntacticError
     parameters: none
     problemMessage: "Function expressions can't be named."
     correctionMessage: Try removing the name, or moving the function expression to a function declaration statement.
     hasPublishedDocs: false
   NAMED_FUNCTION_TYPE:
+    type: syntacticError
     parameters: none
     problemMessage: "Function types can't be named."
     correctionMessage: "Try replacing the name with the keyword 'Function'."
     hasPublishedDocs: false
   NAMED_PARAMETER_OUTSIDE_GROUP:
+    type: syntacticError
     parameters: none
     problemMessage: "Named parameters must be enclosed in curly braces ('{' and '}')."
     correctionMessage: Try surrounding the named parameters in curly braces.
     hasPublishedDocs: false
   NATIVE_CLAUSE_IN_NON_SDK_CODE:
+    type: syntacticError
     parameters: none
     problemMessage: Native clause can only be used in the SDK and code that is loaded through native extensions.
     correctionMessage: Try removing the native clause.
     hasPublishedDocs: false
   NATIVE_FUNCTION_BODY_IN_NON_SDK_CODE:
+    type: syntacticError
     parameters: none
     problemMessage: Native functions can only be declared in the SDK and code that is loaded through native extensions.
     correctionMessage: "Try removing the word 'native'."
     hasPublishedDocs: false
   NON_CONSTRUCTOR_FACTORY:
+    type: syntacticError
     parameters: none
     problemMessage: Only a constructor can be declared to be a factory.
     correctionMessage: "Try removing the keyword 'factory'."
     hasPublishedDocs: false
   NON_IDENTIFIER_LIBRARY_NAME:
+    type: syntacticError
     parameters: none
     problemMessage: The name of a library must be an identifier.
     correctionMessage: Try using an identifier as the name of the library.
     hasPublishedDocs: false
   NON_PART_OF_DIRECTIVE_IN_PART:
+    type: syntacticError
     parameters: none
     problemMessage: The part-of directive must be the only directive in a part.
     correctionMessage: Try removing the other directives, or moving them to the library for which this is a part.
     hasPublishedDocs: false
   NON_STRING_LITERAL_AS_URI:
+    type: syntacticError
     parameters: none
     problemMessage: The URI must be a string literal.
     correctionMessage: Try enclosing the URI in either single or double quotes.
     hasPublishedDocs: false
   NON_USER_DEFINABLE_OPERATOR:
+    type: syntacticError
     parameters:
       Object p0: the operator that the user is trying to define
     problemMessage: "The operator '#p0' isn't user definable."
     hasPublishedDocs: false
   NORMAL_BEFORE_OPTIONAL_PARAMETERS:
+    type: syntacticError
     parameters: none
     problemMessage: Normal parameters must occur before optional parameters.
     correctionMessage: Try moving all of the normal parameters before the optional parameters.
     hasPublishedDocs: false
   PART_OF_NAME:
+    type: syntacticError
     parameters: none
     problemMessage: "The 'part of' directive can't use a name with the enhanced-parts feature."
     correctionMessage: "Try using 'part of' with a URI instead."
     hasPublishedDocs: false
   POSITIONAL_AFTER_NAMED_ARGUMENT:
+    type: syntacticError
     parameters: none
     problemMessage: Positional arguments must occur before named arguments.
     correctionMessage: Try moving all of the positional arguments before the named arguments.
     hasPublishedDocs: false
   POSITIONAL_PARAMETER_OUTSIDE_GROUP:
+    type: syntacticError
     parameters: none
     problemMessage: "Positional parameters must be enclosed in square brackets ('[' and ']')."
     correctionMessage: Try surrounding the positional parameters in square brackets.
     hasPublishedDocs: false
   PRIVATE_OPTIONAL_PARAMETER:
+    type: syntacticError
     parameters: none
     problemMessage: "Named parameters can't start with an underscore."
     hasPublishedDocs: true
@@ -21818,9 +22590,10 @@
       }
       ```
   PRIVATE_NAMED_NON_FIELD_PARAMETER:
+    type: syntacticError
     parameters: none
     problemMessage: "Named parameters that don't refer to instance variables can't start with underscore."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -21859,60 +22632,70 @@
         C({int x = 0});
       }
       ```
-
   REPRESENTATION_FIELD_MODIFIER:
+    type: syntacticError
     parameters: none
     problemMessage: "Representation fields can't have modifiers."
     correctionMessage: Try removing the modifier.
     hasPublishedDocs: false
   REPRESENTATION_FIELD_TRAILING_COMMA:
+    type: syntacticError
     parameters: none
     problemMessage: The representation field can't have a trailing comma.
     correctionMessage: Try removing the trailing comma.
     hasPublishedDocs: false
   SETTER_IN_FUNCTION:
+    type: syntacticError
     parameters: none
     problemMessage: "Setters can't be defined within methods or functions."
     correctionMessage: Try moving the setter outside the method or function.
     hasPublishedDocs: false
   STATIC_GETTER_WITHOUT_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "A 'static' getter must have a body."
     correctionMessage: "Try adding a body to the getter, or removing the keyword 'static'."
     hasPublishedDocs: false
   STATIC_SETTER_WITHOUT_BODY:
+    type: syntacticError
     parameters: none
     problemMessage: "A 'static' setter must have a body."
     correctionMessage: "Try adding a body to the setter, or removing the keyword 'static'."
     hasPublishedDocs: false
   UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
+    type: syntacticError
     parameters:
       Object p0: the starting character that was missing
     problemMessage: "There is no '#p0' to open a parameter group."
     correctionMessage: "Try inserting the '#p0' at the appropriate location."
     hasPublishedDocs: false
   UNEXPECTED_TOKEN:
+    type: syntacticError
     parameters:
       String p0: the unexpected text that was found
     problemMessage: "Unexpected text '#p0'."
     correctionMessage: Try removing the text.
     hasPublishedDocs: false
   VAR_CLASS:
+    type: syntacticError
     parameters: none
     problemMessage: "Classes can't be declared to be 'var'."
     correctionMessage: "Try removing the keyword 'var'."
     hasPublishedDocs: false
   VAR_ENUM:
+    type: syntacticError
     parameters: none
     problemMessage: "Enums can't be declared to be 'var'."
     correctionMessage: "Try removing the keyword 'var'."
     hasPublishedDocs: false
   VAR_TYPEDEF:
+    type: syntacticError
     parameters: none
     problemMessage: "Typedefs can't be declared to be 'var'."
     correctionMessage: "Try removing the keyword 'var', or replacing it with the name of the return type."
     hasPublishedDocs: false
   WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER:
+    type: syntacticError
     parameters: none
     problemMessage: Setters must declare exactly one required positional parameter.
     hasPublishedDocs: true
@@ -21953,11 +22736,13 @@
       }
       ```
   WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER:
+    type: syntacticError
     parameters: none
     problemMessage: "The default value of a positional parameter should be preceded by '='."
     correctionMessage: "Try replacing the ':' with '='."
     hasPublishedDocs: false
   WRONG_TERMINATOR_FOR_PARAMETER_GROUP:
+    type: syntacticError
     parameters:
       Object p0: the terminator that was expected
       Object p1: the terminator that was found
@@ -21966,6 +22751,7 @@
     hasPublishedDocs: false
 PubspecWarningCode:
   ASSET_DIRECTORY_DOES_NOT_EXIST:
+    type: staticWarning
     parameters:
       String p0: the path to the asset directory as given in the file.
     problemMessage: "The asset directory '#p0' doesn't exist."
@@ -21998,6 +22784,7 @@
       If the path isn't correct, then change the path to match the path of the
       directory containing the assets.
   ASSET_DOES_NOT_EXIST:
+    type: staticWarning
     parameters:
       String p0: the path to the asset as given in the file.
     problemMessage: "The asset file '#p0' doesn't exist."
@@ -22029,6 +22816,7 @@
       If the path isn't correct, then change the path to match the path of the
       file containing the asset.
   ASSET_FIELD_NOT_LIST:
+    type: staticWarning
     parameters: none
     problemMessage: "The value of the 'assets' field is expected to be a list of relative file paths."
     correctionMessage: Try converting the value to be a list of relative file paths.
@@ -22063,6 +22851,7 @@
           - assets/
       ```
   ASSET_MISSING_PATH:
+    type: staticWarning
     parameters: none
     problemMessage: "Asset map entry must contain a 'path' field."
     correctionMessage: "Try adding a 'path' field."
@@ -22102,6 +22891,7 @@
             - premium
       ```
   ASSET_NOT_STRING:
+    type: staticWarning
     parameters: none
     problemMessage: Assets are required to be file paths (strings).
     correctionMessage: Try converting the value to be a string.
@@ -22141,6 +22931,7 @@
           - assets/image.gif
       ```
   ASSET_NOT_STRING_OR_MAP:
+    type: staticWarning
     parameters: none
     problemMessage: An asset value is required to be a file path (string) or map.
     correctionMessage: Try converting the value to be a string or map.
@@ -22190,6 +22981,7 @@
           - assets/image.gif
       ```
   ASSET_PATH_NOT_STRING:
+    type: staticWarning
     parameters: none
     problemMessage: Asset paths are required to be file paths (strings).
     correctionMessage: Try converting the value to be a string.
@@ -22230,6 +23022,7 @@
             - premium
       ```
   DEPENDENCIES_FIELD_NOT_MAP:
+    type: staticWarning
     parameters:
       String p0: the name of the field
     problemMessage: "The value of the '#p0' field is expected to be a map."
@@ -22264,6 +23057,7 @@
         meta: ^1.0.2
       ```
   DEPRECATED_FIELD:
+    type: staticWarning
     parameters:
       String p0: the name of the field
     problemMessage: "The '#p0' field is no longer used and can be removed."
@@ -22296,6 +23090,7 @@
       name: example
       ```
   FLUTTER_FIELD_NOT_MAP:
+    type: staticWarning
     parameters: none
     problemMessage: "The value of the 'flutter' field is expected to be a map."
     correctionMessage: Try converting the value to be a map.
@@ -22337,6 +23132,7 @@
       name: example
       ```
   INVALID_DEPENDENCY:
+    type: staticWarning
     parameters:
       String p0: the kind of dependency.
     problemMessage: "Publishable packages can't have '#p0' dependencies."
@@ -22383,6 +23179,7 @@
           path: ../transmogrify
       ```
   INVALID_PLATFORMS_FIELD:
+    type: staticWarning
     parameters: none
     problemMessage: "The 'platforms' field must be a map with platforms as keys."
     correctionMessage: "Try changing the 'platforms' field to a map with platforms as keys."
@@ -22431,6 +23228,7 @@
         ios:
       ```
   UNKNOWN_PLATFORM:
+    type: staticWarning
     parameters:
       Object p0: the unknown platform.
     problemMessage: "The platform '#p0' is not a recognized platform."
@@ -22482,6 +23280,7 @@
         windows:
       ```
   PLATFORM_VALUE_DISALLOWED:
+    type: staticWarning
     parameters: none
     problemMessage: "Keys in the `platforms` field can't have values."
     correctionMessage: "Try removing the value, while keeping the key."
@@ -22520,6 +23319,7 @@
       Values for keys in the `platforms` field are currently reserved for
       potential future behavior.
   MISSING_NAME:
+    type: staticWarning
     parameters: none
     problemMessage: "The 'name' field is required but missing."
     correctionMessage: "Try adding a field named 'name'."
@@ -22552,6 +23352,7 @@
         meta: ^1.0.2
       ```
   MISSING_DEPENDENCY:
+    type: staticWarning
     parameters:
       String p0: the list of packages missing from the dependencies and the list of packages missing from the dev_dependencies (if any) in the pubspec file.
     problemMessage: "Missing a dependency on imported package '#p0'."
@@ -22589,6 +23390,7 @@
         path: any
       ```
   NAME_NOT_STRING:
+    type: staticWarning
     parameters: none
     problemMessage: "The value of the 'name' field is required to be a string."
     correctionMessage: Try converting the value to be a string.
@@ -22619,6 +23421,7 @@
       name: example
       ```
   PATH_DOES_NOT_EXIST:
+    type: staticWarning
     parameters:
       String p0: the path to the dependency as given in the file.
     problemMessage: "The path '#p0' doesn't exist."
@@ -22650,6 +23453,7 @@
       If the path isn't correct, then change the path to match the path to the
       root of the package.
   PATH_NOT_POSIX:
+    type: staticWarning
     parameters:
       String p0: the path as given in the file.
     problemMessage: "The path '#p0' isn't a POSIX-style path."
@@ -22678,6 +23482,7 @@
 
       Convert the path to a POSIX path.
   PATH_PUBSPEC_DOES_NOT_EXIST:
+    type: staticWarning
     parameters:
       String p0: the path to the dependency as given in the file.
     problemMessage: "The directory '#p0' doesn't contain a pubspec."
@@ -22715,6 +23520,7 @@
 
       If the path is wrong, then replace it with the correct path.
   UNNECESSARY_DEV_DEPENDENCY:
+    type: staticWarning
     parameters:
       String p0: the name of the package in the dev_dependency list.
     problemMessage: "The dev dependency on #p0 is unnecessary because there is also a normal dependency on that package."
@@ -22754,6 +23560,7 @@
         meta: ^1.0.2
       ```
   WORKSPACE_FIELD_NOT_LIST:
+    type: staticWarning
     parameters: none
     problemMessage: "The value of the 'workspace' field is required to be a list of relative file paths."
     correctionMessage: Try converting the value to be a list of relative file paths.
@@ -22788,6 +23595,7 @@
       ```
 
   WORKSPACE_VALUE_NOT_STRING:
+    type: staticWarning
     parameters: none
     problemMessage: Workspace entries are required to be directory paths (strings).
     correctionMessage: Try converting the value to be a string.
@@ -22824,6 +23632,7 @@
       ```
 
   WORKSPACE_VALUE_NOT_SUBDIRECTORY:
+    type: staticWarning
     parameters:
       String p0: the path of the directory that contains the pubspec.yaml file.
     problemMessage: Workspace values must be a relative path of a subdirectory of '#p0'.
@@ -22861,57 +23670,69 @@
       ```
 ScannerErrorCode:
   ENCODING:
+    type: syntacticError
     parameters: none
     problemMessage: Unable to decode bytes as UTF-8.
     hasPublishedDocs: false
   ILLEGAL_CHARACTER:
+    type: syntacticError
     parameters:
       Object p0: the illegal character
     problemMessage: Illegal character '#p0'.
     hasPublishedDocs: false
   MISSING_DIGIT:
+    type: syntacticError
     parameters: none
     problemMessage: Decimal digit expected.
     hasPublishedDocs: false
   MISSING_HEX_DIGIT:
+    type: syntacticError
     parameters: none
     problemMessage: Hexadecimal digit expected.
     hasPublishedDocs: false
   MISSING_QUOTE:
+    type: syntacticError
     parameters: none
     problemMessage: Expected quote (' or ").
     hasPublishedDocs: false
   UNABLE_GET_CONTENT:
+    type: syntacticError
     parameters:
       Object p0: the path of the file that cannot be read
     problemMessage: Unable to get content of '#p0'.
     hasPublishedDocs: false
   UNEXPECTED_DOLLAR_IN_STRING:
+    type: syntacticError
     parameters: none
     problemMessage: A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).
     hasPublishedDocs: false
     correctionMessage: Try adding a backslash (\) to escape the '$'.
   UNEXPECTED_SEPARATOR_IN_NUMBER:
+    type: syntacticError
     parameters: none
     problemMessage: Digit separators ('_') in a number literal can only be placed between two digits.
     hasPublishedDocs: false
     correctionMessage: Try removing the '_'.
   UNSUPPORTED_OPERATOR:
+    type: syntacticError
     parameters:
       String p0: the unsupported operator
     problemMessage: The '#p0' operator is not supported.
     hasPublishedDocs: false
   UNTERMINATED_MULTI_LINE_COMMENT:
+    type: syntacticError
     parameters: none
     problemMessage: Unterminated multi-line comment.
     hasPublishedDocs: false
     correctionMessage: Try terminating the comment with '*/', or removing any unbalanced occurrences of '/*' (because comments nest in Dart).
   UNTERMINATED_STRING_LITERAL:
+    type: syntacticError
     parameters: none
     problemMessage: Unterminated string literal.
     hasPublishedDocs: false
 StaticWarningCode:
   DEAD_NULL_AWARE_EXPRESSION:
+    type: staticWarning
     parameters: none
     problemMessage: "The left operand can't be null, so the right operand is never executed."
     correctionMessage: Try removing the operator and the right operand.
@@ -22991,6 +23812,7 @@
       }
       ```
   INVALID_NULL_AWARE_OPERATOR:
+    type: staticWarning
     parameters:
       String p0: the null-aware operator that is invalid
       String p1: the non-null-aware operator that can replace the invalid operator
@@ -23075,6 +23897,7 @@
       (Note that the return type was also changed to be non-nullable, which might
       not be appropriate in some cases.)
   INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT:
+    type: staticWarning
     parameters:
       Object p0: the null-aware operator that is invalid
       Object p1: the non-null-aware operator that can replace the invalid operator
@@ -23083,24 +23906,28 @@
     correctionMessage: "Try replacing the operator '#p0' with '#p1'."
     hasPublishedDocs: true
   INVALID_NULL_AWARE_ELEMENT:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_NULL_AWARE_OPERATOR
     problemMessage: "The element can't be null, so the null-aware operator '?' is unnecessary."
     correctionMessage: "Try removing the operator '?'."
     hasPublishedDocs: true
   INVALID_NULL_AWARE_MAP_ENTRY_KEY:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_NULL_AWARE_OPERATOR
     problemMessage: "The map entry key can't be null, so the null-aware operator '?' is unnecessary."
     correctionMessage: "Try removing the operator '?'."
     hasPublishedDocs: true
   INVALID_NULL_AWARE_MAP_ENTRY_VALUE:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_NULL_AWARE_OPERATOR
     problemMessage: "The map entry value can't be null, so the null-aware operator '?' is unnecessary."
     correctionMessage: "Try removing the operator '?'."
     hasPublishedDocs: true
   MISSING_ENUM_CONSTANT_IN_SWITCH:
+    type: staticWarning
     parameters:
       String p0: the name of the constant that is missing
     problemMessage: "Missing case clause for '#p0'."
@@ -23168,6 +23995,7 @@
       TODO(brianwilkerson): This documentation will need to be updated when NNBD
        ships.
   UNNECESSARY_NON_NULL_ASSERTION:
+    type: staticWarning
     parameters: none
     problemMessage: "The '!' will have no effect because the receiver can't be null."
     correctionMessage: "Try removing the '!' operator."
@@ -23198,6 +24026,7 @@
       }
       ```
   UNNECESSARY_NULL_ASSERT_PATTERN:
+    type: staticWarning
     parameters: none
     problemMessage: The null-assert pattern will have no effect because the matched type isn't nullable.
     correctionMessage: Try replacing the null-assert pattern with its nested pattern.
@@ -23229,6 +24058,7 @@
       }
       ```
   UNNECESSARY_NULL_CHECK_PATTERN:
+    type: staticWarning
     parameters: none
     problemMessage: The null-check pattern will have no effect because the matched type isn't nullable.
     correctionMessage: Try replacing the null-check pattern with its nested pattern.
@@ -23261,6 +24091,7 @@
       ```
 TodoCode:
   FIXME:
+    type: todo
     parameters:
       String message: the user-supplied problem message
     problemMessage: "#message"
@@ -23268,6 +24099,7 @@
     comment: |-
       A TODO comment marked as FIXME.
   HACK:
+    type: todo
     parameters:
       String message: the user-supplied problem message
     problemMessage: "#message"
@@ -23275,6 +24107,7 @@
     comment: |-
       A TODO comment marked as HACK.
   TODO:
+    type: todo
     parameters:
       String message: the user-supplied problem message
     problemMessage: "#message"
@@ -23282,131 +24115,16 @@
     comment: |-
       A standard TODO comment marked as TODO.
   UNDONE:
+    type: todo
     parameters:
       String message: the user-supplied problem message
     problemMessage: "#message"
     hasPublishedDocs: false
     comment: |-
       A TODO comment marked as UNDONE.
-TransformSetErrorCode:
-  conflicting_key:
-    parameters:
-      Object p0: the conflicting key
-      Object p1: the key that it conflicts with
-    problemMessage: "The key '#p0' can't be used when '#p1' is also used."
-    hasPublishedDocs: false
-  expected_primary:
-    parameters: none
-    problemMessage: "Expected either an identifier or a string literal."
-    hasPublishedDocs: false
-  incompatible_element_kind:
-    parameters:
-      Object p0: the old kind
-      Object p1: the new kind
-    problemMessage: "An element of kind '#p0' can't be replaced by an element of kind '#p1'."
-    hasPublishedDocs: false
-  invalid_change_for_kind:
-    parameters:
-      Object p0: the change kind that is invalid
-      Object p1: the element kind for the transform
-    problemMessage: "A change of type '#p0' can't be used for an element of kind '#p1'."
-    hasPublishedDocs: false
-  invalid_character:
-    parameters:
-      Object p0: the character that is invalid
-    problemMessage: "Invalid character '#p0'."
-    hasPublishedDocs: false
-  invalid_key:
-    parameters:
-      Object p0: the actual type of the key
-    problemMessage: "Keys must be of type 'String' but found the type '#p0'."
-    hasPublishedDocs: false
-  invalid_required_if:
-    parameters: none
-    problemMessage: "The key 'requiredIf' can only be used with optional named parameters."
-    hasPublishedDocs: false
-  invalid_value:
-    parameters:
-      Object p0: the key with which the value is associated
-      Object p1: the expected type of the value
-      Object p2: the actual type of the value
-    problemMessage: "The value of '#p0' should be of type '#p1' but is of type '#p2'."
-    hasPublishedDocs: false
-  invalid_parameter_style:
-    parameters:
-      Object p0: the list of valid parameter styles
-    problemMessage: "The parameter style must be one of the following: #p0."
-    hasPublishedDocs: false
-  invalid_value_one_of:
-    parameters:
-      Object p0: the key with which the value is associated
-      Object p1: the allowed values as a comma-separated list
-    problemMessage: "The value of '#p0' must be one of the following: '#p1'."
-    hasPublishedDocs: false
-  missing_key:
-    parameters:
-      Object p0: the missing key
-    problemMessage: "Missing the required key '#p0'."
-    hasPublishedDocs: false
-  missing_one_of_multiple_keys:
-    parameters:
-      Object p0: the list of valid keys
-    problemMessage: "Exactly one of the following keys must be provided: #p0."
-    hasPublishedDocs: false
-  missing_template_end:
-    parameters: none
-    problemMessage: "Missing the end brace for the template."
-    hasPublishedDocs: false
-  missing_token:
-    parameters:
-      Object p0: a description of the expected kinds of tokens
-    problemMessage: "Expected to find #p0."
-    hasPublishedDocs: false
-  missing_uri:
-    parameters: none
-    problemMessage: "At least one URI must be provided."
-    hasPublishedDocs: false
-  undefined_variable:
-    parameters:
-      Object p0: the missing key
-    problemMessage: "The variable '#p0' isn't defined."
-    hasPublishedDocs: false
-  unexpected_transform_set_token:
-    parameters:
-      Object p0: the token that was unexpectedly found
-    problemMessage: "Didn't expect to find #p0."
-    hasPublishedDocs: false
-  unknown_accessor:
-    parameters:
-      Object p0: a description of the expected kind of token
-    problemMessage: "The accessor '#p0' is invalid."
-    hasPublishedDocs: false
-  unsupported_key:
-    parameters:
-      Object p0: the unsupported key
-    problemMessage: "The key '#p0' isn't supported."
-    hasPublishedDocs: false
-  unsupported_static:
-    parameters: none
-    problemMessage: "The key 'static' is only supported for elements in a class, enum, extension, or mixin."
-    hasPublishedDocs: false
-  unsupported_version:
-    parameters: none
-    problemMessage: "Only version '1' is supported at this time."
-    hasPublishedDocs: false
-  wrong_token:
-    parameters:
-      Object p0: a description of the expected kind of token
-      Object p1: a description of the actual kind of token
-    problemMessage: "Expected to find #p0, but found #p1."
-    hasPublishedDocs: false
-  yaml_syntax_error:
-    parameters:
-      Object p0: the message produced by the YAML parser
-    problemMessage: "Parse error: #p0"
-    hasPublishedDocs: false
 WarningCode:
   ARGUMENT_TYPE_NOT_ASSIGNABLE_TO_ERROR_HANDLER:
+    type: staticWarning
     parameters:
       Type p0: the name of the actual argument type
       Type p1: the name of the expected function return type
@@ -23466,6 +24184,7 @@
       }
       ```
   ASSIGNMENT_OF_DO_NOT_STORE:
+    type: staticWarning
     parameters:
       String p0: the name of the field or variable
     problemMessage: "'#p0' is marked 'doNotStore' and shouldn't be assigned to a field or top-level variable."
@@ -23500,6 +24219,7 @@
       Replace references to the field or variable with invocations of the
       function producing the value.
   BODY_MIGHT_COMPLETE_NORMALLY_CATCH_ERROR:
+    type: staticWarning
     parameters:
       Type p0: the return type as derived by the type of the [Future].
     problemMessage: "This 'onError' handler must return a value assignable to '#p0', but ends without returning a value."
@@ -23547,6 +24267,7 @@
       }
       ```
   BODY_MIGHT_COMPLETE_NORMALLY_NULLABLE:
+    type: staticWarning
     parameters:
       Type p0: the name of the declared return type
     problemMessage: "This function has a nullable return type of '#p0', but ends without returning a value."
@@ -23587,6 +24308,7 @@
       }
       ```
   CAST_FROM_NULL_ALWAYS_FAILS:
+    type: staticWarning
     parameters: none
     problemMessage: "This cast always throws an exception because the expression always evaluates to 'null'."
     hasPublishedDocs: true
@@ -23617,6 +24339,7 @@
       }
       ```
   CAST_FROM_NULLABLE_ALWAYS_FAILS:
+    type: staticWarning
     parameters:
       String p0: the name of the unassigned variable
     problemMessage: "This cast will always throw an exception because the nullable local variable '#p0' is not assigned."
@@ -23666,6 +24389,7 @@
       }
       ```
   CONSTANT_PATTERN_NEVER_MATCHES_VALUE_TYPE:
+    type: staticWarning
     parameters:
       Type p0: the matched value type
       Type p1: the constant value type
@@ -23711,6 +24435,7 @@
       }
       ```
   DEAD_CODE:
+    type: staticWarning
     parameters: none
     problemMessage: Dead code.
     correctionMessage: Try removing the code, or fixing the code before it so that it can be reached.
@@ -23767,6 +24492,7 @@
       }
       ```
   DEAD_CODE_CATCH_FOLLOWING_CATCH:
+    type: staticWarning
     parameters: none
     problemMessage: "Dead code: Catch clauses after a 'catch (e)' or an 'on Object catch (e)' are never reached."
     correctionMessage: Try reordering the catch clauses so that they can be reached, or removing the unreachable catch clauses.
@@ -23820,12 +24546,14 @@
       }
       ```
   DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER:
+    type: staticWarning
     parameters: none
     problemMessage: "Dead code: The assigned-to wildcard variable is marked late and can never be referenced so this initializer will never be evaluated."
     correctionMessage: Try removing the code, removing the late modifier or changing the variable to a non-wildcard.
     sharedName: DEAD_CODE
     hasPublishedDocs: true
   DEAD_CODE_ON_CATCH_SUBTYPE:
+    type: staticWarning
     parameters:
       Type p0: name of the subtype
       Type p1: name of the supertype
@@ -23883,6 +24611,7 @@
       }
       ```
   DEPRECATED_EXPORT_USE:
+    type: staticWarning
     parameters:
       String p0: the name of the element
     problemMessage: "The ability to import '#p0' indirectly is deprecated."
@@ -23940,6 +24669,7 @@
       If the name isn't available, then look for instructions from the library
       author or contact them directly to find out how to update your code.
   DEPRECATED_EXTEND:
+    type: staticWarning
     parameters:
       Object typeName: the name of the type
     problemMessage: "Extending '#typeName' is deprecated."
@@ -23984,6 +24714,7 @@
       class D {}
       ```
   DEPRECATED_EXTENDS_FUNCTION:
+    type: staticWarning
     parameters: none
     sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
     problemMessage: "Extending 'Function' is deprecated."
@@ -24015,6 +24746,7 @@
       class F {}
       ```
   DEPRECATED_IMPLEMENT:
+    type: staticWarning
     parameters:
       Object typeName: the name of the type
     problemMessage: "Implementing '#typeName' is deprecated."
@@ -24058,12 +24790,14 @@
       class D {}
       ```
   DEPRECATED_IMPLEMENTS_FUNCTION:
+    type: staticWarning
     parameters: none
     sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
     problemMessage: "Implementing 'Function' has no effect."
     correctionMessage: "Try removing 'Function' from the 'implements' clause."
     hasPublishedDocs: true
   DEPRECATED_INSTANTIATE:
+    type: staticWarning
     parameters:
       Object typeName: the name of the type
     problemMessage: "Instantiating '#typeName' is deprecated."
@@ -24102,11 +24836,12 @@
 
       Follow any directions found in the `Deprecation.instantiate` annotation.
   DEPRECATED_MIXIN:
+    type: staticWarning
     parameters:
       Object typeName: the name of the type
     problemMessage: "Mixing in '#typeName' is deprecated."
     correctionMessage: Try removing '#typeName' from the 'with' clause.
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -24144,17 +24879,19 @@
       class D {}
       ```
   DEPRECATED_MIXIN_FUNCTION:
+    type: staticWarning
     parameters: none
     sharedName: DEPRECATED_SUBTYPE_OF_FUNCTION
     problemMessage: "Mixing in 'Function' is deprecated."
     correctionMessage: "Try removing 'Function' from the 'with' clause."
     hasPublishedDocs: true
   DEPRECATED_OPTIONAL:
+    type: staticWarning
     parameters:
       Object parameterName: the name of the parameter
     problemMessage: "Omitting an argument for the '#parameterName' parameter is deprecated."
     correctionMessage: Try passing an argument for '#parameterName'.
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -24203,6 +24940,7 @@
 
       Using the default value will preserve the current behavior of the code.
   DEPRECATED_NEW_IN_COMMENT_REFERENCE:
+    type: staticWarning
     parameters: none
     problemMessage: "Using the 'new' keyword in a comment reference is deprecated."
     correctionMessage: Try referring to a constructor by its name.
@@ -24257,6 +24995,7 @@
       }
       ```
   DEPRECATED_SUBCLASS:
+    type: staticWarning
     parameters:
       Object typeName: the name of the type
     problemMessage: "Subclassing '#typeName' is deprecated."
@@ -24302,6 +25041,7 @@
       class D {}
       ```
   DOC_DIRECTIVE_HAS_EXTRA_ARGUMENTS:
+    type: staticWarning
     parameters:
       String p0: the name of the doc directive
       int p1: the actual number of arguments
@@ -24310,6 +25050,7 @@
     correctionMessage: Try removing the extra arguments.
     hasPublishedDocs: false
   DOC_DIRECTIVE_HAS_UNEXPECTED_NAMED_ARGUMENT:
+    type: staticWarning
     parameters:
       String p0: the name of the doc directive
       String p1: the name of the unexpected argument
@@ -24317,17 +25058,20 @@
     correctionMessage: "Try removing the unexpected argument."
     hasPublishedDocs: false
   DOC_DIRECTIVE_MISSING_CLOSING_BRACE:
+    type: staticWarning
     parameters: none
     problemMessage: "Doc directive is missing a closing curly brace ('}')."
     correctionMessage: "Try closing the directive with a curly brace."
     hasPublishedDocs: false
   DOC_DIRECTIVE_MISSING_CLOSING_TAG:
+    type: staticWarning
     parameters:
       String p0: the name of the corresponding doc directive tag
     problemMessage: "Doc directive is missing a closing tag."
     correctionMessage: "Try closing the directive with the appropriate closing tag, '#p0'."
     hasPublishedDocs: false
   DOC_DIRECTIVE_MISSING_ONE_ARGUMENT:
+    type: staticWarning
     parameters:
       String p0: the name of the doc directive
       String p1: the name of the missing argument
@@ -24336,6 +25080,7 @@
     correctionMessage: "Try adding a '#p1' argument before the closing '}'."
     hasPublishedDocs: false
   DOC_DIRECTIVE_ARGUMENT_WRONG_FORMAT:
+    type: staticWarning
     parameters:
       String p0: the name of the doc directive argument
       String p1: the expected format
@@ -24343,12 +25088,14 @@
     correctionMessage: "Try formatting '#p0' as #p1."
     hasPublishedDocs: false
   DOC_DIRECTIVE_MISSING_OPENING_TAG:
+    type: staticWarning
     parameters:
       String p0: the name of the corresponding doc directive tag
     problemMessage: "Doc directive is missing an opening tag."
     correctionMessage: "Try opening the directive with the appropriate opening tag, '#p0'."
     hasPublishedDocs: false
   DOC_DIRECTIVE_MISSING_THREE_ARGUMENTS:
+    type: staticWarning
     parameters:
       String p0: the name of the doc directive
       String p1: the name of the first missing argument
@@ -24359,6 +25106,7 @@
     correctionMessage: "Try adding the missing arguments before the closing '}'."
     hasPublishedDocs: false
   DOC_DIRECTIVE_MISSING_TWO_ARGUMENTS:
+    type: staticWarning
     parameters:
       String p0: the name of the doc directive
       String p1: the name of the first missing argument
@@ -24368,12 +25116,14 @@
     correctionMessage: "Try adding the missing arguments before the closing '}'."
     hasPublishedDocs: false
   DOC_DIRECTIVE_UNKNOWN:
+    type: staticWarning
     parameters:
       String p0: the name of the unknown doc directive.
     problemMessage: "Doc directive '#p0' is unknown."
     correctionMessage: "Try using one of the supported doc directives."
     hasPublishedDocs: false
   DOC_IMPORT_CANNOT_BE_DEFERRED:
+    type: staticWarning
     parameters: none
     problemMessage: "Doc imports can't be deferred."
     correctionMessage: Try removing the 'deferred' keyword.
@@ -24407,6 +25157,7 @@
       library;
       ```
   DOC_IMPORT_CANNOT_HAVE_COMBINATORS:
+    type: staticWarning
     parameters: none
     problemMessage: "Doc imports can't have show or hide combinators."
     correctionMessage: Try removing the combinator.
@@ -24438,6 +25189,7 @@
       library;
       ```
   DOC_IMPORT_CANNOT_HAVE_CONFIGURATIONS:
+    type: staticWarning
     parameters: none
     problemMessage: "Doc imports can't have configurations."
     correctionMessage: Try removing the configurations.
@@ -24469,6 +25221,7 @@
       library;
       ```
   DOC_IMPORT_CANNOT_HAVE_PREFIX:
+    type: staticWarning
     parameters: none
     problemMessage: "Doc imports can't have prefixes."
     correctionMessage: Try removing the prefix.
@@ -24500,6 +25253,7 @@
       library;
       ```
   DUPLICATE_EXPORT:
+    type: staticWarning
     parameters: none
     problemMessage: Duplicate export.
     correctionMessage: Try removing all but one export of the library.
@@ -24531,6 +25285,7 @@
       export 'package:meta/meta.dart';
       ```
   DUPLICATE_HIDDEN_NAME:
+    type: staticWarning
     parameters: none
     problemMessage: Duplicate hidden name.
     correctionMessage: Try removing the repeated name from the list of hidden members.
@@ -24572,6 +25327,7 @@
       var x = pi;
       ```
   DUPLICATE_IGNORE:
+    type: staticWarning
     parameters:
       String p0: the name of the diagnostic being ignored
     problemMessage: "The diagnostic '#p0' doesn't need to be ignored here because it's already being ignored."
@@ -24621,6 +25377,7 @@
       }
       ```
   DUPLICATE_IMPORT:
+    type: staticWarning
     parameters: none
     problemMessage: Duplicate import.
     correctionMessage: Try removing all but one import of the library.
@@ -24655,6 +25412,7 @@
       @sealed class C {}
       ```
   DUPLICATE_SHOWN_NAME:
+    type: staticWarning
     parameters: none
     problemMessage: Duplicate shown name.
     correctionMessage: Try removing the repeated name from the list of shown members.
@@ -24696,6 +25454,7 @@
       var x = min(2, min(0, 1));
       ```
   EQUAL_ELEMENTS_IN_SET:
+    type: staticWarning
     parameters: none
     problemMessage: "Two elements in a set literal shouldn't be equal."
     correctionMessage: Change or remove the duplicate element.
@@ -24742,6 +25501,7 @@
       of which element to remove might affect the order in which elements are
       returned by an iterator.
   EQUAL_KEYS_IN_MAP:
+    type: staticWarning
     parameters: none
     problemMessage: "Two keys in a map literal shouldn't be equal."
     correctionMessage: Change or remove the duplicate key.
@@ -24787,16 +25547,18 @@
       of which entry to remove might affect the order in which the keys and
       values are returned by an iterator.
   EXPERIMENTAL_MEMBER_USE:
+    type: staticWarning
     parameters:
       String member: the name of the member
     problemMessage: "'#member' is experimental and could be removed or changed at any time."
     hasPublishedDocs: false
   INFERENCE_FAILURE_ON_COLLECTION_LITERAL:
+    type: staticWarning
     parameters:
       String p0: the name of the collection
     problemMessage: "The type argument(s) of '#p0' can't be inferred."
     correctionMessage: "Use explicit type argument(s) for '#p0'."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       When "strict-inference" is enabled, collection literal types must be
       inferred via the context type, or have type arguments.
@@ -24840,11 +25602,12 @@
       }
       ```
   INFERENCE_FAILURE_ON_FUNCTION_INVOCATION:
+    type: staticWarning
     parameters:
       String p0: the name of the function
     problemMessage: "The type argument(s) of the function '#p0' can't be inferred."
     correctionMessage: "Use explicit type argument(s) for '#p0'."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       When "strict-inference" is enabled, types in function invocations must be
       inferred via the context type, or have type arguments.
@@ -24894,12 +25657,13 @@
       }
       ```
   INFERENCE_FAILURE_ON_FUNCTION_RETURN_TYPE:
+    type: staticWarning
     parameters:
       String p0: the name of the function or method whose return type can't be
                  inferred
     problemMessage: "The return type of '#p0' can't be inferred."
     correctionMessage: "Declare the return type of '#p0'."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       When "strict-inference" is enabled, recursive local functions, top-level
       functions, methods, and function-typed function parameters must all
@@ -24944,30 +25708,33 @@
       }
       ```
   INFERENCE_FAILURE_ON_GENERIC_INVOCATION:
+    type: staticWarning
     parameters:
       String p0: the name of the type
     problemMessage: "The type argument(s) of the generic function type '#p0' can't be inferred."
     correctionMessage: "Use explicit type argument(s) for '#p0'."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       When "strict-inference" is enabled, types in function invocations must be
       inferred via the context type, or have type arguments.
   INFERENCE_FAILURE_ON_INSTANCE_CREATION:
+    type: staticWarning
     parameters:
       String p0: the name of the constructor
     problemMessage: "The type argument(s) of the constructor '#p0' can't be inferred."
     correctionMessage: "Use explicit type argument(s) for '#p0'."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       When "strict-inference" is enabled, types in instance creation
       (constructor calls) must be inferred via the context type, or have type
       arguments.
   INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE:
+    type: staticWarning
     parameters:
       String p0: the name of the variable
     problemMessage: "The type of #p0 can't be inferred without either a type or initializer."
     correctionMessage: Try specifying the type of the variable.
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       When "strict-inference" in enabled, uninitialized variables must be
       declared with a specific type.
@@ -25006,6 +25773,7 @@
       String? s;
       ```
   INFERENCE_FAILURE_ON_UNTYPED_PARAMETER:
+    type: staticWarning
     parameters:
       String p0: the name of the parameter
     problemMessage: "The type of #p0 can't be inferred; a type must be explicitly provided."
@@ -25051,6 +25819,7 @@
       void f(int p) => print(p);
       ```
   INVALID_ANNOTATION_TARGET:
+    type: staticWarning
     parameters:
       String p0: the name of the annotation
       String p1: the list of valid targets
@@ -25078,6 +25847,7 @@
 
       Remove the annotation from the declaration.
   INVALID_AWAIT_NOT_REQUIRED_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation 'awaitNotRequired' can only be applied to a Future-returning function, or a Future-typed field."
     hasPublishedDocs: true
@@ -25108,6 +25878,7 @@
       void f() {}
       ```
   INVALID_DEPRECATED_EXTEND_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@Deprecated.extend' can only be applied to extendable classes."
     correctionMessage: Try removing the '@Deprecated.extend' annotation.
@@ -25141,6 +25912,7 @@
       sealed class C {}
       ```
   INVALID_DEPRECATED_IMPLEMENT_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@Deprecated.implement' can only be applied to implementable classes."
     correctionMessage: Try removing the '@Deprecated.implement' annotation.
@@ -25173,6 +25945,7 @@
       sealed class C {}
       ```
   INVALID_DEPRECATED_INSTANTIATE_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@Deprecated.instantiate' can only be applied to classes."
     correctionMessage: Try removing the '@Deprecated.instantiate' annotation.
@@ -25203,10 +25976,11 @@
       sealed class C {}
       ```
   INVALID_DEPRECATED_MIXIN_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@Deprecated.mixin' can only be applied to classes."
     correctionMessage: Try removing the '@Deprecated.mixin' annotation.
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       This warning is generated anywhere where `@Deprecated.mixin` annotates
       something other than a mixin class.
@@ -25236,6 +26010,7 @@
       class C {}
       ```
   INVALID_DEPRECATED_OPTIONAL_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@Deprecated.optional' can only be applied to optional parameters."
     correctionMessage: Try removing the '@Deprecated.optional' annotation.
@@ -25272,6 +26047,7 @@
       void f(int p) {}
       ```
   INVALID_DEPRECATED_SUBCLASS_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@Deprecated.subclass' can only be applied to subclassable classes and mixins."
     correctionMessage: Try removing the '@Deprecated.subclass' annotation.
@@ -25305,6 +26081,7 @@
       sealed class C {}
       ```
   INVALID_EXPORT_OF_INTERNAL_ELEMENT:
+    type: staticWarning
     parameters:
       String p0: the name of the element
     problemMessage: "The member '#p0' can't be exported as a part of a package's public API."
@@ -25347,6 +26124,7 @@
 
       If the export isn't needed, then remove it.
   INVALID_EXPORT_OF_INTERNAL_ELEMENT_INDIRECTLY:
+    type: staticWarning
     parameters:
       String p0: the name of the internal element
       String p1: the name of the exported element that indirectly exposes the internal element
@@ -25392,6 +26170,7 @@
       either by removing it from the `show` clause, adding it to the `hide`
       clause, or by removing the export.
   INVALID_FACTORY_METHOD_DECL:
+    type: staticWarning
     parameters:
       String p0: The name of the method
     problemMessage: "Factory method '#p0' must have a return type."
@@ -25434,6 +26213,7 @@
       class C {}
       ```
   INVALID_FACTORY_METHOD_IMPL:
+    type: staticWarning
     parameters:
       String p0: the name of the method
     problemMessage: "Factory method '#p0' doesn't return a newly allocated object."
@@ -25478,6 +26258,7 @@
       class C {}
       ```
   INVALID_INTERNAL_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "Only public elements in a package's private API can be annotated as being internal."
     hasPublishedDocs: true
@@ -25534,6 +26315,7 @@
       class C {}
       ```
   INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER:
+    type: staticWarning
     parameters:
       Object p0: the latest major version
       Object p1: the latest minor version
@@ -25542,6 +26324,7 @@
     correctionMessage: Try removing the language version override.
     hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     problemMessage: "The Dart language version override number must begin with '@dart'."
@@ -25574,48 +26357,56 @@
       // @dart = 2.13
       ```
   INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     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:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     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'."
     hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER:
+    type: staticWarning
     parameters: none
     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'."
     hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     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'."
     hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     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'."
     hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES:
+    type: staticWarning
     parameters: none
     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'."
     hasPublishedDocs: true
   INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS:
+    type: staticWarning
     parameters: none
     sharedName: INVALID_LANGUAGE_VERSION_OVERRIDE
     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'."
     hasPublishedDocs: true
   INVALID_LITERAL_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: Only const constructors can have the `@literal` annotation.
     hasPublishedDocs: true
@@ -25673,6 +26464,7 @@
       var x;
       ```
   INVALID_NON_VIRTUAL_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@nonVirtual' can only be applied to a concrete instance member."
     correctionMessage: Try removing '@nonVirtual'.
@@ -25753,6 +26545,7 @@
       }
       ```
   INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
       String p1: the name of the defining class
@@ -25818,6 +26611,7 @@
       }
       ```
   INVALID_USE_OF_DO_NOT_SUBMIT_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
     problemMessage: "Uses of '#p0' should not be submitted to source control."
@@ -25874,6 +26668,7 @@
       }
       ```
   INVALID_USE_OF_INTERNAL_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
     problemMessage: "The member '#p0' can only be used within its package."
@@ -25911,6 +26706,7 @@
 
       Remove the reference to the internal declaration.
   INVALID_USE_OF_PROTECTED_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
       String p1: the name of the defining class
@@ -25961,6 +26757,7 @@
       If it isn't reasonable for the member to be marked as `@protected`, and
       you have the ability to do so, remove the annotation.
   INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
     problemMessage: "The member '#p0' can only be used for overriding."
@@ -26005,6 +26802,7 @@
 
       Remove the invalid use of the member.
   INVALID_USE_OF_VISIBLE_FOR_TEMPLATE_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
       Uri p1: the name of the defining class
@@ -26014,6 +26812,7 @@
       This warning is generated anywhere where a member annotated with
       `@visibleForTemplate` is used outside of a "template" Dart file.
   INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the name of the member
       Uri p1: the name of the defining class
@@ -26075,6 +26874,7 @@
       }
       ```
   INVALID_VISIBILITY_ANNOTATION:
+    type: staticWarning
     parameters:
       String p0: the name of the member
       String p1: the name of the annotation
@@ -26125,6 +26925,7 @@
       void f() => someFunction();
       ```
   INVALID_VISIBLE_FOR_OVERRIDING_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation 'visibleForOverriding' can only be applied to a public instance member that can be overridden."
     hasPublishedDocs: true
@@ -26157,6 +26958,7 @@
       class C {}
       ```
   INVALID_VISIBLE_OUTSIDE_TEMPLATE_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation 'visibleOutsideTemplate' can only be applied to a member of a class, enum, or mixin that is annotated with 'visibleForTemplate'."
     hasPublishedDocs: true
@@ -26220,6 +27022,7 @@
       class C {}
       ```
   RETURN_TYPE_INVALID_FOR_CATCH_ERROR:
+    type: staticWarning
     parameters:
       Type p0: the return type of the function
       Type p1: the expected return type as defined by the type of the Future
@@ -26227,6 +27030,7 @@
     problemMessage: "The return type '#p0' isn't assignable to '#p1', as required by 'Future.catchError'."
     hasPublishedDocs: true
   RETURN_OF_INVALID_TYPE_FROM_CATCH_ERROR:
+    type: staticWarning
     parameters:
       Type p0: the return type as declared in the return statement
       Type p1: the expected return type as defined by the type of the Future
@@ -26284,6 +27088,7 @@
       }
       ```
   INVALID_REOPEN_ANNOTATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The annotation '@reopen' can only be applied to a class that opens capabilities that the supertype intentionally disallows."
     correctionMessage: Try removing the '@reopen' annotation.
@@ -26335,6 +27140,7 @@
       class B extends A {}
       ```
   INVALID_SEALED_ANNOTATION:
+    type: staticWarning
     parameters: none
     removedIn: "3.5"
     problemMessage: "The annotation '@sealed' can only be applied to classes."
@@ -26373,6 +27179,7 @@
       }
       ```
   INVALID_WIDGET_PREVIEW_APPLICATION:
+    type: staticWarning
     parameters: none
     problemMessage: "The '@Preview(...)' annotation can only be applied to public, statically accessible constructors and functions."
     hasPublishedDocs: true
@@ -26505,6 +27312,7 @@
       constructor, top-level function, or class member for use as a preview:
 
   INVALID_WIDGET_PREVIEW_PRIVATE_ARGUMENT:
+    type: staticWarning
     parameters:
       String p0: the name of the private symbol
       String p1: the name of the proposed public symbol equivalent
@@ -26556,10 +27364,11 @@
       Widget myPreview() => Text('Foo');
       ```
   MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE:
+    type: staticWarning
     parameters:
-      String p0: the name of the member
+      String member: the name of the member
     sharedName: MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN
-    problemMessage: "Missing concrete implementation of '#p0'."
+    problemMessage: "Missing a required override of '#member'."
     correctionMessage: Try overriding the missing member.
     hasPublishedDocs: true
     documentation: |-
@@ -26615,23 +27424,26 @@
       class B extends A {}
       ```
   MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO:
+    type: staticWarning
     parameters:
-      String p0: the name of the first member
-      String p1: the name of the second member
+      String firstMember: the name of the first member
+      String secondMember: the name of the second member
     sharedName: MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN
-    problemMessage: "Missing concrete implementations of '#p0' and '#p1'."
+    problemMessage: "Missing a required override of '#firstMember' and '#secondMember'."
     correctionMessage: Try overriding the missing members.
     hasPublishedDocs: true
   MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS:
+    type: staticWarning
     parameters:
-      String p0: the name of the first member
-      String p1: the name of the second member
-      String p2: the number of additional missing members that aren't listed
+      String firstMember: the name of the first member
+      String secondMember: the name of the second member
+      String additionalCount: the number of additional missing members that aren't listed
     sharedName: MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN
-    problemMessage: "Missing concrete implementations of '#p0', '#p1', and #p2 more."
+    problemMessage: "Missing a required override of '#firstMember', '#secondMember', and #additionalCount more."
     correctionMessage: Try overriding the missing members.
     hasPublishedDocs: true
   MISSING_REQUIRED_PARAM:
+    type: staticWarning
     parameters:
       String p0: the name of the parameter
     problemMessage: "The parameter '#p0' is required."
@@ -26654,6 +27466,7 @@
       ```dart
       import 'package:meta/meta.dart';
 
+      // ignore: deprecated_member_use
       void f({@required int? x}) {}
 
       void g() {
@@ -26668,6 +27481,7 @@
       ```dart
       import 'package:meta/meta.dart';
 
+      // ignore: deprecated_member_use
       void f({@required int? x}) {}
 
       void g() {
@@ -26675,6 +27489,7 @@
       }
       ```
   MISSING_REQUIRED_PARAM_WITH_DETAILS:
+    type: staticWarning
     parameters:
       String p0: the name of the parameter
       String p1: message details
@@ -26685,6 +27500,7 @@
       Generates a warning for a constructor, function or method invocation where
       a required parameter is missing.
   MISSING_RETURN:
+    type: staticWarning
     parameters:
       Object p0: the name of the declared return type
     removedIn: "3.0"
@@ -26717,6 +27533,7 @@
       Add a `return` statement that makes the return value explicit, even if
       `null` is the appropriate value.
   MIXIN_ON_SEALED_CLASS:
+    type: staticWarning
     parameters:
       String p0: the name of the sealed class
     problemMessage: "The class '#p0' shouldn't be used as a mixin constraint because it is sealed, and any class mixing in this mixin must have '#p0' as a superclass."
@@ -26760,6 +27577,7 @@
       class, then consider adding a field and delegating to the wrapped instance
       of the sealed class.
   MUST_BE_IMMUTABLE:
+    type: staticWarning
     parameters:
       String p0: the name of the class
     problemMessage: "This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: #p0"
@@ -26819,6 +27637,7 @@
       }
       ```
   MUST_CALL_SUPER:
+    type: staticWarning
     parameters:
       String p0: the name of the class declaring the overridden method
     problemMessage: "This method overrides a method annotated as '@mustCallSuper' in '#p0', but doesn't invoke the overridden method."
@@ -26869,6 +27688,7 @@
       }
       ```
   NON_CONST_ARGUMENT_FOR_CONST_PARAMETER:
+    type: staticWarning
     parameters:
       String p0: the name of the argument
     problemMessage: "Argument '#p0' must be a constant."
@@ -26910,6 +27730,7 @@
       int g(@mustBeConst int value) => value + 1;
       ```
   NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR_USING_NEW:
+    type: staticWarning
     parameters:
       String p0: the name of the class defining the annotated constructor
     sharedName: NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR
@@ -26920,6 +27741,7 @@
       Generate a warning for non-const instance creation (with the `new` keyword)
       using a constructor annotated with `@literal`.
   NON_CONST_CALL_TO_LITERAL_CONSTRUCTOR:
+    type: staticWarning
     parameters:
       String p0: the name of the class defining the annotated constructor
     problemMessage: "This instance creation must be 'const', because the #p0 constructor is marked as '@literal'."
@@ -26967,6 +27789,7 @@
       void f() => const C();
       ```
   NON_NULLABLE_EQUALS_PARAMETER:
+    type: staticWarning
     parameters: none
     problemMessage: "The parameter type of '==' operators should be non-nullable."
     correctionMessage: Try using a non-nullable type.
@@ -27002,6 +27825,7 @@
       }
       ```
   NULLABLE_TYPE_IN_CATCH_CLAUSE:
+    type: staticWarning
     parameters: none
     problemMessage: "A potentially nullable type can't be used in an 'on' clause because it isn't valid to throw a nullable expression."
     correctionMessage: Try using a non-nullable type.
@@ -27041,6 +27865,7 @@
       }
       ```
   NULL_ARGUMENT_TO_NON_NULL_TYPE:
+    type: staticWarning
     parameters:
       String p0: the name of the method being invoked
       String p1: the type argument associated with the method
@@ -27078,6 +27903,7 @@
       }
       ```
   NULL_CHECK_ALWAYS_FAILS:
+    type: staticWarning
     parameters: none
     problemMessage: "This null-check will always throw an exception because the expression will always evaluate to 'null'."
     hasPublishedDocs: true
@@ -27117,6 +27943,7 @@
       Null g() => null;
       ```
   OVERRIDE_ON_NON_OVERRIDING_FIELD:
+    type: staticWarning
     parameters: none
     sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
     problemMessage: "The field doesn't override an inherited getter or setter."
@@ -27125,6 +27952,7 @@
     comment: |-
       A field with the override annotation does not override a getter or setter.
   OVERRIDE_ON_NON_OVERRIDING_GETTER:
+    type: staticWarning
     parameters: none
     sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
     problemMessage: "The getter doesn't override an inherited getter."
@@ -27133,6 +27961,7 @@
     comment: |-
       A getter with the override annotation does not override an existing getter.
   OVERRIDE_ON_NON_OVERRIDING_METHOD:
+    type: staticWarning
     parameters: none
     sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
     problemMessage: "The method doesn't override an inherited method."
@@ -27176,6 +28005,7 @@
 
       If the member can't be removed, then remove the annotation.
   OVERRIDE_ON_NON_OVERRIDING_SETTER:
+    type: staticWarning
     parameters: none
     sharedName: OVERRIDE_ON_NON_OVERRIDING_MEMBER
     problemMessage: "The setter doesn't override an inherited setter."
@@ -27184,12 +28014,13 @@
     comment: |-
       A setter with the override annotation does not override an existing setter.
   PATTERN_NEVER_MATCHES_VALUE_TYPE:
+    type: staticWarning
     parameters:
       Type p0: the matched value type
       Type p1: the required pattern type
     problemMessage: "The matched value type '#p0' can never match the required type '#p1'."
     correctionMessage: "Try using a different pattern."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -27224,6 +28055,7 @@
       void f(double x) {}
       ```
   RECEIVER_OF_TYPE_NEVER:
+    type: staticWarning
     parameters: none
     problemMessage: "The receiver is of type 'Never', and will never complete with a value."
     correctionMessage: Try checking for throw expressions or type errors in the receiver
@@ -27240,6 +28072,7 @@
       dead or unreachable code are encouraged to indicate that any arguments to
       the call are unreachable.
   REDECLARE_ON_NON_REDECLARING_MEMBER:
+    type: staticWarning
     parameters:
       String p0: the kind of member
     problemMessage: "The #p0 doesn't redeclare a #p0 declared in a superinterface."
@@ -27304,12 +28137,13 @@
       }
       ```
   REMOVED_LINT_USE:
+    type: staticWarning
     parameters:
       Object p0: the rule name
       Object p1: the SDK version in which the lint was removed
     problemMessage: "'#p0' was removed in Dart '#p1'"
     correctionMessage: "Remove the reference to '#p0'."
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     comment: |-
       An error code indicating use of a removed lint rule.
     documentation: |-
@@ -27343,6 +28177,7 @@
         - always_put_required_named_parameters_first
       ```
   REPLACED_LINT_USE:
+    type: staticWarning
     parameters:
       Object p0: the rule name
       Object p1: the SDK version in which the lint was removed
@@ -27353,6 +28188,7 @@
     comment: |-
       An error code indicating use of a removed lint rule.
   RETURN_OF_DO_NOT_STORE:
+    type: staticWarning
     parameters:
       String p0: the name of the annotated function being invoked
       String p1: the name of the function containing the return
@@ -27407,6 +28243,7 @@
       int g() => 0;
       ```
   SDK_VERSION_ASYNC_EXPORTED_FROM_CORE:
+    type: staticWarning
     parameters:
       Object p0: the name of the class
     removedIn: "3.2"
@@ -27459,6 +28296,7 @@
       void f(Future f) {}
       ```
   SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "The use of an as expression in a constant expression wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
@@ -27511,6 +28349,7 @@
       int y = x as int;
       ```
   SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT:
+    type: staticWarning
     parameters:
       Object p0: the name of the operator
     removedIn: "3.2"
@@ -27567,12 +28406,13 @@
       bool c = a & b;
       ```
   SDK_VERSION_CONSTRUCTOR_TEAROFFS:
+    type: staticWarning
     parameters: none
     problemMessage: "Tearing off a constructor requires the 'constructor-tearoffs' language feature."
     correctionMessage: "Try updating your 'pubspec.yaml' to set the minimum SDK constraint to 2.15 or higher, and running 'pub get'."
     hasPublishedDocs: true
     comment: |-
-      There is also a [ParserErrorCode.experimentNotEnabled] code which
+      There is also a [diag.experimentNotEnabled] code which
       catches some cases of constructor tearoff features (like
       `List<int>.filled;`). Other constructor tearoff cases are not realized
       until resolution (like `List.filled;`).
@@ -27621,6 +28461,7 @@
       var setConstructor = () => Set.identity();
       ```
   SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "Using the operator '==' for non-primitive types wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
@@ -27679,6 +28520,7 @@
       bool same = a == b;
       ```
   SDK_VERSION_EXTENSION_METHODS:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "Extension methods weren't supported until version 2.6.0, but this code is required to be able to run on earlier versions."
@@ -27736,6 +28578,7 @@
       }
       ```
   SDK_VERSION_GT_GT_GT_OPERATOR:
+    type: staticWarning
     parameters: none
     problemMessage: "The operator '>>>' wasn't supported until version 2.14.0, but this code is required to be able to run on earlier versions."
     correctionMessage: Try updating the SDK constraints.
@@ -27791,6 +28634,7 @@
       }
       ```
   SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "The use of an is expression in a constant context wasn't supported until version 2.3.2, but this code is required to be able to run on earlier versions."
@@ -27844,6 +28688,7 @@
       var y = x is int ? 0 : 1;
       ```
   SDK_VERSION_NEVER:
+    type: staticWarning
     parameters: none
     removedIn: "3.0"
     problemMessage: "The type 'Never' wasn't supported until version 2.12.0, but this code is required to be able to run on earlier versions."
@@ -27893,6 +28738,7 @@
       dynamic x;
       ```
   SDK_VERSION_SET_LITERAL:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "Set literals weren't supported until version 2.2, but this code is required to be able to run on earlier versions."
@@ -27941,6 +28787,7 @@
       var s = new Set<int>();
       ```
   SDK_VERSION_SINCE:
+    type: staticWarning
     parameters:
       String p0: the version specified in the `@Since()` annotation
       String p1: the SDK version constraints
@@ -27948,6 +28795,7 @@
     correctionMessage: Try updating the SDK constraints.
     hasPublishedDocs: false
   SDK_VERSION_UI_AS_CODE:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "The for, if, and spread elements weren't supported until version 2.3.0, but this code is required to be able to run on earlier versions."
@@ -28005,6 +28853,7 @@
       }
       ```
   SDK_VERSION_UI_AS_CODE_IN_CONST_CONTEXT:
+    type: staticWarning
     parameters: none
     removedIn: "3.2"
     problemMessage: "The if and spread elements weren't supported in constant expressions until version 2.5.0, but this code is required to be able to run on earlier versions."
@@ -28064,6 +28913,7 @@
       var b = [...a];
       ```
   STRICT_RAW_TYPE:
+    type: staticWarning
     parameters:
       Type p0: the name of the generic type
     problemMessage: "The generic type '#p0' should have explicit type arguments but doesn't."
@@ -28075,6 +28925,7 @@
       A "raw type" is a type name that does not use inference to fill in missing
       type arguments; instead, each type argument is instantiated to its bound.
   SUBTYPE_OF_SEALED_CLASS:
+    type: staticWarning
     parameters:
       String p0: the name of the sealed class
     problemMessage: "The class '#p0' shouldn't be extended, mixed in, or implemented because it's sealed."
@@ -28128,6 +28979,7 @@
       the sealed class so that it's no longer sealed or move the subclass into
       the same package as the sealed class.
   TEXT_DIRECTION_CODE_POINT_IN_COMMENT:
+    type: staticWarning
     parameters:
       String p0: the unicode sequence of the code point.
     problemMessage: The Unicode code point 'U+#p0' changes the appearance of text from how it's interpreted by the compiler.
@@ -28167,6 +29019,7 @@
       var label = 'Interactive text';
       ```
   TEXT_DIRECTION_CODE_POINT_IN_LITERAL:
+    type: staticWarning
     parameters:
       String p0: the unicode sequence of the code point.
     problemMessage: The Unicode code point 'U+#p0' changes the appearance of text from how it's interpreted by the compiler.
@@ -28206,6 +29059,7 @@
       var label = 'Interactive text';
       ```
   TYPE_CHECK_IS_NOT_NULL:
+    type: staticWarning
     parameters: none
     sharedName: TYPE_CHECK_WITH_NULL
     problemMessage: "Tests for non-null should be done with '!= null'."
@@ -28258,12 +29112,14 @@
       }
       ```
   TYPE_CHECK_IS_NULL:
+    type: staticWarning
     parameters: none
     sharedName: TYPE_CHECK_WITH_NULL
     problemMessage: "Tests for null should be done with '== null'."
     correctionMessage: "Try replacing the 'is Null' check with '== null'."
     hasPublishedDocs: true
   UNDEFINED_HIDDEN_NAME:
+    type: staticWarning
     parameters:
       String p0: the name of the library being imported
       String p1: the name in the hide clause that isn't defined in the library
@@ -28298,6 +29154,7 @@
       var x = min(0, 1);
       ```
   UNDEFINED_REFERENCED_PARAMETER:
+    type: staticWarning
     parameters:
       String p0: the name of the undefined parameter
       String p1: the name of the targeted member
@@ -28334,6 +29191,7 @@
       int f([int? a]) => a ?? 0;
       ```
   UNDEFINED_SHOWN_NAME:
+    type: staticWarning
     parameters:
       String p0: the name of the library being imported
       String p1: the name in the show clause that isn't defined in the library
@@ -28368,12 +29226,14 @@
       var x = min(0, 1);
       ```
   UNIGNORABLE_IGNORE:
+    type: staticWarning
     parameters:
       Object p0: the name of the non-diagnostic being ignored
     problemMessage: "The diagnostic '#p0' can't be ignored."
     correctionMessage: Try removing the name from the list, or removing the whole comment if this is the only name in the list.
     hasPublishedDocs: false
   UNNECESSARY_CAST:
+    type: staticWarning
     parameters: none
     problemMessage: Unnecessary cast.
     correctionMessage: Try removing the cast.
@@ -28409,10 +29269,11 @@
       }
       ```
   UNNECESSARY_CAST_PATTERN:
+    type: staticWarning
     parameters: none
     problemMessage: Unnecessary cast pattern.
     correctionMessage: Try removing the cast pattern.
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -28444,6 +29305,7 @@
       }
       ```
   UNNECESSARY_FINAL:
+    type: staticWarning
     parameters: none
     problemMessage: The keyword 'final' isn't necessary because the parameter is implicitly 'final'.
     correctionMessage: Try removing the 'final'.
@@ -28496,6 +29358,7 @@
       }
       ```
   UNNECESSARY_NAN_COMPARISON_FALSE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_NAN_COMPARISON
     problemMessage: A double can't equal 'double.nan', so the condition is always 'false'.
@@ -28533,12 +29396,14 @@
       bool isNaN(double d) => d.isNaN;
       ```
   UNNECESSARY_NAN_COMPARISON_TRUE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_NAN_COMPARISON
     problemMessage: A double can't equal 'double.nan', so the condition is always 'true'.
     correctionMessage: Try using 'double.isNan', or removing the condition.
     hasPublishedDocs: true
   UNNECESSARY_NO_SUCH_METHOD:
+    type: staticWarning
     parameters: none
     problemMessage: "Unnecessary 'noSuchMethod' declaration."
     correctionMessage: "Try removing the declaration of 'noSuchMethod'."
@@ -28588,18 +29453,21 @@
       class B extends A {}
       ```
   UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_FALSE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_NULL_COMPARISON
     problemMessage: "The operand must be 'null', so the condition is always 'false'."
     correctionMessage: Remove the condition.
     hasPublishedDocs: true
   UNNECESSARY_NULL_COMPARISON_ALWAYS_NULL_TRUE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_NULL_COMPARISON
     problemMessage: "The operand must be 'null', so the condition is always 'true'."
     correctionMessage: Remove the condition.
     hasPublishedDocs: true
   UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_NULL_COMPARISON
     problemMessage: "The operand can't be 'null', so the condition is always 'false'."
@@ -28658,12 +29526,14 @@
       }
       ```
   UNNECESSARY_NULL_COMPARISON_NEVER_NULL_TRUE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_NULL_COMPARISON
     problemMessage: "The operand can't be 'null', so the condition is always 'true'."
     correctionMessage: Remove the condition.
     hasPublishedDocs: true
   UNNECESSARY_QUESTION_MARK:
+    type: staticWarning
     parameters:
       String p0: the name of the type
     problemMessage: "The '?' is unnecessary because '#p0' is nullable without it."
@@ -28692,6 +29562,7 @@
       dynamic x;
       ```
   UNNECESSARY_SET_LITERAL:
+    type: staticWarning
     parameters: none
     problemMessage: Braces unnecessarily wrap this expression in a set literal.
     correctionMessage: Try removing the set literal around the expression.
@@ -28734,6 +29605,7 @@
       void g(void Function() p) {}
       ```
   UNNECESSARY_TYPE_CHECK_FALSE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_TYPE_CHECK
     problemMessage: "Unnecessary type check; the result is always 'false'."
@@ -28770,12 +29642,14 @@
       bool f<T>(T a) => true;
       ```
   UNNECESSARY_TYPE_CHECK_TRUE:
+    type: staticWarning
     parameters: none
     sharedName: UNNECESSARY_TYPE_CHECK
     problemMessage: "Unnecessary type check; the result is always 'true'."
     correctionMessage: Try correcting the type check, or removing the type check.
     hasPublishedDocs: true
   UNNECESSARY_WILDCARD_PATTERN:
+    type: staticWarning
     parameters: none
     problemMessage: Unnecessary wildcard pattern.
     correctionMessage: Try removing the wildcard pattern.
@@ -28807,6 +29681,7 @@
       }
       ```
   UNREACHABLE_SWITCH_CASE:
+    type: staticWarning
     parameters: none
     problemMessage: "This case is covered by the previous cases."
     correctionMessage: Try removing the case clause, or restructuring the preceding patterns.
@@ -28849,6 +29724,7 @@
       }
       ```
   UNREACHABLE_SWITCH_DEFAULT:
+    type: staticWarning
     parameters: none
     problemMessage: "This default clause is covered by the previous cases."
     correctionMessage: Try removing the default clause, or restructuring the preceding patterns.
@@ -28896,6 +29772,7 @@
       }
       ```
   UNUSED_CATCH_CLAUSE:
+    type: staticWarning
     parameters:
       Object p0: the name of the exception variable
     problemMessage: "The exception variable '#p0' isn't used, so the 'catch' clause can be removed."
@@ -28936,6 +29813,7 @@
       }
       ```
   UNUSED_CATCH_STACK:
+    type: staticWarning
     parameters:
       Object p0: the name of the stack trace variable
     problemMessage: "The stack trace variable '#p0' isn't used and can be removed."
@@ -28977,6 +29855,7 @@
       }
       ```
   UNUSED_ELEMENT:
+    type: staticWarning
     parameters:
       Object p0: the name that is declared but not referenced
     problemMessage: "The declaration '#p0' isn't referenced."
@@ -29015,6 +29894,7 @@
 
       If the declaration is intended to be used, then add the code to use it.
   UNUSED_ELEMENT_PARAMETER:
+    type: staticWarning
     parameters:
       Object p0: the name of the parameter that is declared but not used
     problemMessage: "A value for optional parameter '#p0' isn't ever given."
@@ -29053,6 +29933,7 @@
 
       If the declaration is intended to be used, then add the code to use it.
   UNUSED_FIELD:
+    type: staticWarning
     parameters:
       Object p0: the name of the unused field
     problemMessage: "The value of the field '#p0' isn't used."
@@ -29090,6 +29971,7 @@
 
       If the field was intended to be used, then add the missing code.
   UNUSED_IMPORT:
+    type: staticWarning
     parameters:
       String p0: the content of the unused import's URI
     problemMessage: "Unused import: '#p0'."
@@ -29120,6 +30002,7 @@
       If some of the imported names are intended to be used, then add the missing
       code.
   UNUSED_LABEL:
+    type: staticWarning
     parameters:
       String p0: the label that isn't used
     problemMessage: "The label '#p0' isn't used."
@@ -29170,6 +30053,7 @@
       ```
       TODO(brianwilkerson): Highlight the identifier without the colon.
   MULTIPLE_COMBINATORS:
+    type: staticWarning
     parameters: none
     problemMessage: "Using multiple 'hide' or 'show' combinators is never necessary and often produces surprising results."
     correctionMessage: "Try using a single combinator."
@@ -29240,6 +30124,7 @@
       var x = pi;
       ```
   UNUSED_LOCAL_VARIABLE:
+    type: staticWarning
     parameters:
       Object p0: the name of the unused variable
     problemMessage: "The value of the local variable '#p0' isn't used."
@@ -29268,6 +30153,7 @@
 
       If the variable was intended to be used, then add the missing code.
   UNUSED_RESULT:
+    type: staticWarning
     parameters:
       String p0: the name of the annotated method, property or function
     problemMessage: "The value of '#p0' should be used."
@@ -29341,6 +30227,7 @@
       }
       ```
   UNUSED_RESULT_WITH_MESSAGE:
+    type: staticWarning
     parameters:
       Object p0: the name of the annotated method, property or function
       Object p1: message details
@@ -29353,6 +30240,7 @@
       `@useResult` must be used (assigned, passed to a function as an argument,
       or returned by a function).
   UNUSED_SHOWN_NAME:
+    type: staticWarning
     parameters:
       String p0: the name that is shown but not used
     problemMessage: "The name #p0 is shown, but isn't used."
@@ -29386,6 +30274,7 @@
       var x = min(0, 1);
       ```
   URI_DOES_NOT_EXIST_IN_DOC_IMPORT:
+    type: staticWarning
     parameters:
       String p0: the URI pointing to a nonexistent file
     problemMessage: "Target of URI doesn't exist: '#p0'."
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 8d018f6..6be54c5 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 9.0.0
+version: 10.0.0-dev
 description: >-
   This package provides a library that performs static analysis of Dart code.
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index ba285298..3231486 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -52,8 +52,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.modifierOutOfOrder, 20, 5),
-      error(ParserErrorCode.modifierOutOfOrder, 26, 8),
+      error(diag.modifierOutOfOrder, 20, 5),
+      error(diag.modifierOutOfOrder, 26, 8),
     ]);
 
     var node = parseResult.findNode.constructor('A()');
@@ -537,7 +537,8 @@
   void _checkExplicitlyTyped(String input, bool expected) {
     var parseResult = parseString(content: input);
     var class_ = parseResult.unit.declarations[0] as ClassDeclaration;
-    var constructor = class_.members[0] as ConstructorDeclaration;
+    var body = class_.body as BlockClassBody;
+    var constructor = body.members[0] as ConstructorDeclaration;
     var parameter = constructor.parameters.parameters[0];
     expect(parameter.isExplicitlyTyped, expected);
   }
@@ -1151,13 +1152,15 @@
 
   void test_findPrevious_basic_method() {
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var method = clazz.members[0] as MethodDeclaration;
+    var body = clazz.body as BlockClassBody;
+    var method = body.members[0] as MethodDeclaration;
     expect(method.findPrevious(findToken('foo'))!.lexeme, 'B');
   }
 
   void test_findPrevious_basic_statement() {
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var method = clazz.members[0] as MethodDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     var body = method.body as BlockFunctionBody;
     Statement statement = body.block.statements[0];
     expect(statement.findPrevious(findToken('bar'))!.lexeme, 'return');
@@ -1166,7 +1169,8 @@
 
   void test_findPrevious_missing() {
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var method = clazz.members[0] as MethodDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     var body = method.body as BlockFunctionBody;
     Statement statement = body.block.statements[0];
 
@@ -1179,13 +1183,15 @@
 
   void test_findPrevious_parent_method() {
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var method = clazz.members[0] as MethodDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     expect(method.findPrevious(findToken('B'))!.lexeme, '{');
   }
 
   void test_findPrevious_parent_statement() {
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var method = clazz.members[0] as MethodDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     var body = method.body as BlockFunctionBody;
     Statement statement = body.block.statements[0];
     expect(statement.findPrevious(findToken('return'))!.lexeme, '{');
@@ -1198,7 +1204,8 @@
 
   void test_findPrevious_sibling_method() {
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var method = clazz.members[1] as MethodDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var method = classBody.members[1] as MethodDeclaration;
     expect(method.findPrevious(findToken('D'))!.lexeme, '}');
   }
 }
diff --git a/pkg/analyzer/test/dart/ast/visitor_test.dart b/pkg/analyzer/test/dart/ast/visitor_test.dart
index 6c7c691..2bbaa17 100644
--- a/pkg/analyzer/test/dart/ast/visitor_test.dart
+++ b/pkg/analyzer/test/dart/ast/visitor_test.dart
@@ -44,12 +44,12 @@
       nodes,
     );
     visitor.visitAllNodes(unit);
-    expect(nodes, hasLength(47));
+    expect(nodes, hasLength(51));
     expect(nodes[0], isCompilationUnit);
     expect(nodes[2], isClassDeclaration);
     expect(nodes[3], isFunctionDeclaration);
-    expect(nodes[19], isFunctionDeclarationStatement);
-    expect(nodes[46], isIntegerLiteral); // 3
+    expect(nodes[24], isFunctionDeclarationStatement);
+    expect(nodes[50], isIntegerLiteral); // 3
   }
 }
 
diff --git a/pkg/analyzer/test/dart/element/fragment_offset_test.dart b/pkg/analyzer/test/dart/element/fragment_offset_test.dart
index 5e12025..600b6a9 100644
--- a/pkg/analyzer/test/dart/element/fragment_offset_test.dart
+++ b/pkg/analyzer/test/dart/element/fragment_offset_test.dart
@@ -4,8 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -67,7 +66,7 @@
     checkOffset<ClassFragment>(
       classDeclaration,
       classDeclaration.declaredFragment!,
-      classDeclaration.name.offset,
+      classDeclaration.namePart.typeName.offset,
     );
   }
 
@@ -90,7 +89,7 @@
 mixin M {}
 class = Object with M;
 ''',
-      [error(ParserErrorCode.missingIdentifier, 17, 1)],
+      [error(diag.missingIdentifier, 17, 1)],
     );
     var classTypeAlias = findNode.classTypeAlias('Object with M');
     checkOffsetInRange<ClassFragment>(
@@ -106,7 +105,7 @@
 
 class {}
 ''',
-      [error(ParserErrorCode.missingIdentifier, 72, 1)],
+      [error(diag.missingIdentifier, 72, 1)],
     );
     var classDeclaration = findNode.classDeclaration('class {}');
     checkOffsetInRange<ClassFragment>(
@@ -127,7 +126,7 @@
           .element
           .unnamedConstructor!
           .firstFragment,
-      classDeclaration.name.offset,
+      classDeclaration.namePart.typeName.offset,
     );
   }
 
@@ -138,7 +137,7 @@
   C.();
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 14, 1)],
+      [error(diag.missingIdentifier, 14, 1)],
     );
     var constructorDeclaration = findNode.constructor('C.()');
     checkOffsetInRange<ConstructorFragment>(
@@ -171,7 +170,7 @@
     checkOffset<ConstructorFragment>(
       constructorDeclaration,
       constructorDeclaration.declaredFragment!,
-      constructorDeclaration.returnType.offset,
+      constructorDeclaration.typeName!.offset,
     );
   }
 
@@ -195,7 +194,7 @@
     checkOffset<EnumFragment>(
       enumDeclaration,
       enumDeclaration.declaredFragment!,
-      enumDeclaration.name.offset,
+      enumDeclaration.namePart.typeName.offset,
     );
   }
 
@@ -206,7 +205,7 @@
 
 enum { e1 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 70, 1)],
+      [error(diag.missingIdentifier, 70, 1)],
     );
     var enumDeclaration = findNode.enumDeclaration('enum { e1 }');
     checkOffsetInRange<EnumFragment>(
@@ -250,7 +249,7 @@
     checkOffset<ExtensionTypeFragment>(
       extensionTypeDeclaration,
       extensionTypeDeclaration.declaredFragment!,
-      extensionTypeDeclaration.name.offset,
+      extensionTypeDeclaration.primaryConstructor.typeName.offset,
     );
   }
 
@@ -261,7 +260,7 @@
 
 extension type(int i) {}
 ''',
-      [error(ParserErrorCode.missingIdentifier, 89, 1)],
+      [error(diag.missingIdentifier, 89, 1)],
     );
     var extensionTypeDeclaration = findNode.extensionTypeDeclaration(
       'extension type(int i)',
@@ -296,12 +295,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          24,
-          5,
-        ),
-        error(ParserErrorCode.missingIdentifier, 29, 1),
+        error(diag.initializingFormalForNonExistentField, 24, 5),
+        error(diag.missingIdentifier, 29, 1),
       ],
     );
     var parameter = findNode.fieldFormalParameter('this.');
@@ -376,21 +371,7 @@
       enumDeclaration.declaredFragment!.element
           .getField('values')!
           .firstFragment,
-      enumDeclaration.name.offset,
-    );
-  }
-
-  test_fieldFragment_extensionTypeRepresentationField() async {
-    await assertNoErrorsInCode(r'''
-extension type E(int i) {}
-''');
-    var representationDeclaration = findNode
-        .extensionTypeDeclaration('int i')
-        .representation;
-    checkOffset<FieldFragment>(
-      representationDeclaration,
-      representationDeclaration.fieldFragment!,
-      representationDeclaration.fieldName.offset,
+      enumDeclaration.namePart.typeName.offset,
     );
   }
 
@@ -411,7 +392,7 @@
       r'''
 void f((int x)) {}
 ''',
-      [error(ParserErrorCode.missingIdentifier, 7, 1)],
+      [error(diag.missingIdentifier, 7, 1)],
     );
     var function = findNode.functionDeclaration('f(');
     var parameter =
@@ -429,7 +410,7 @@
       r'''
 void f(void (int x)) {}
 ''',
-      [error(ParserErrorCode.missingIdentifier, 12, 1)],
+      [error(diag.missingIdentifier, 12, 1)],
     );
     var function = findNode.functionDeclaration('f(');
     var parameter =
@@ -770,7 +751,7 @@
 
 mixin {}
 ''',
-      [error(ParserErrorCode.missingIdentifier, 72, 1)],
+      [error(diag.missingIdentifier, 72, 1)],
     );
     var mixinDeclaration = findNode.mixinDeclaration('mixin {}');
     checkOffsetInRange<MixinFragment>(
@@ -825,7 +806,7 @@
 // ignore: unused_import
 import 'dart:async' as;
 ''',
-      [error(ParserErrorCode.missingIdentifier, 47, 1)],
+      [error(diag.missingIdentifier, 47, 1)],
     );
     var importDirective = findNode.import('as;');
     checkOffsetInRange<PrefixFragment>(
@@ -924,7 +905,7 @@
   C(super.);
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 58, 1)],
+      [error(diag.missingIdentifier, 58, 1)],
     );
     var parameter = findNode.superFormalParameter('super.');
     checkOffsetInRange<SuperFormalParameterFragment>(
@@ -1012,10 +993,7 @@
 
 typedef void();
 ''',
-      [
-        error(WarningCode.unusedElement, 0, 0),
-        error(ParserErrorCode.missingIdentifier, 92, 1),
-      ],
+      [error(diag.unusedElement, 0, 0), error(diag.missingIdentifier, 92, 1)],
     );
     var functionTypeAlias = findNode.functionTypeAlias('void()');
     checkOffsetInRange<TypeAliasFragment>(
@@ -1043,10 +1021,7 @@
 
 typedef = int;
 ''',
-      [
-        error(WarningCode.unusedElement, 0, 0),
-        error(ParserErrorCode.missingIdentifier, 87, 1),
-      ],
+      [error(diag.unusedElement, 0, 0), error(diag.missingIdentifier, 87, 1)],
     );
     var genericTypeAlias = findNode.genericTypeAlias('= int');
     checkOffsetInRange<TypeAliasFragment>(
diff --git a/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart b/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart
index 6b3c7ae..17009ea 100644
--- a/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart
+++ b/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart
@@ -73,6 +73,7 @@
       librarySummaryPaths: [],
       resourceProvider: resourceProvider,
       sdkSummaryPath: sdkSummaryFile.path,
+      withFineDependencies: true,
     );
 
     var analysisContext = collection.contextFor(myPackageRoot.path);
@@ -117,6 +118,7 @@
       librarySummaryPaths: [],
       resourceProvider: resourceProvider,
       sdkSummaryPath: sdkSummaryFile.path,
+      withFineDependencies: true,
     );
 
     var analysisContext = collection.contextFor(myPackageRoot.path);
diff --git a/pkg/analyzer/test/error/error_reporter_test.dart b/pkg/analyzer/test/error/error_reporter_test.dart
index 5ad5a42..ba6a078 100644
--- a/pkg/analyzer/test/error/error_reporter_test.dart
+++ b/pkg/analyzer/test/error/error_reporter_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:source_span/source_span.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -30,11 +30,7 @@
       listener,
       firstFragment.libraryFragment.source,
     );
-    reporter.atElement2(
-      element,
-      CompileTimeErrorCode.castToNonType,
-      arguments: ['A'],
-    );
+    reporter.atElement2(element, diag.castToNonType, arguments: ['A']);
 
     var diagnostic = listener.diagnostics[0];
     expect(diagnostic.offset, firstFragment.nameOffset);
@@ -51,11 +47,7 @@
       listener,
       firstFragment.libraryFragment.source,
     );
-    reporter.atElement2(
-      element,
-      CompileTimeErrorCode.castToNonType,
-      arguments: ['A'],
-    );
+    reporter.atElement2(element, diag.castToNonType, arguments: ['A']);
 
     var diagnostic = listener.diagnostics[0];
     expect(diagnostic.offset, -1);
@@ -95,7 +87,7 @@
 
     reporter.atNode(
       findNode.simple('x'),
-      CompileTimeErrorCode.argumentTypeNotAssignable,
+      diag.argumentTypeNotAssignable,
       arguments: [firstType, secondType, ''],
     );
 
@@ -136,7 +128,7 @@
     );
     reporter.atNode(
       findNode.simple('x'),
-      CompileTimeErrorCode.argumentTypeNotAssignable,
+      diag.argumentTypeNotAssignable,
       arguments: [firstType, secondType, ''],
     );
 
@@ -165,7 +157,7 @@
     var reporter = DiagnosticReporter(listener, source);
     reporter.atNode(
       findNode.simple('x'),
-      CompileTimeErrorCode.argumentTypeNotAssignable,
+      diag.argumentTypeNotAssignable,
       arguments: [fa.variables.type!.type!, fb.variables.type!.type!, ''],
     );
 
@@ -196,7 +188,7 @@
     var reporter = DiagnosticReporter(listener, source);
     reporter.atNode(
       findNode.simple('x'),
-      CompileTimeErrorCode.argumentTypeNotAssignable,
+      diag.argumentTypeNotAssignable,
       arguments: [ba.variables.type!.type!, bb.variables.type!.type!, ''],
     );
 
@@ -225,7 +217,7 @@
 
     reporter.atSourceSpan(
       span,
-      AnalysisOptionsWarningCode.unsupportedOptionWithLegalValue,
+      diag.unsupportedOptionWithLegalValue,
       arguments: ['test', 'zip', 'zap'],
     );
     expect(listener.diagnostics, hasLength(1));
diff --git a/pkg/analyzer/test/generated/class_member_parser_test.dart b/pkg/analyzer/test/generated/class_member_parser_test.dart
index 36c9cf4..e95f8d4 100644
--- a/pkg/analyzer/test/generated/class_member_parser_test.dart
+++ b/pkg/analyzer/test/generated/class_member_parser_test.dart
@@ -4,8 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -42,7 +41,7 @@
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.period, isNull);
-    expect(constructor.returnType, isNotNull);
+    expect(constructor.typeName, isNotNull);
     expect(constructor.initializers, hasLength(2));
 
     {
@@ -89,7 +88,8 @@
       'class C { void late() { new C().late(); } }',
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var method = declaration.members[0] as MethodDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
 
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNull);
@@ -144,8 +144,8 @@
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
     listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 13, 5),
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 23, 5),
+      expectedError(diag.awaitInWrongContext, 13, 5),
+      expectedError(diag.awaitInWrongContext, 23, 5),
     ]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
@@ -161,9 +161,7 @@
     createParser('m() { await returnsFuture(); }');
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
-    listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 6, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.awaitInWrongContext, 6, 5)]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
     Statement statement = (body as BlockFunctionBody).block.statements[0];
@@ -180,8 +178,8 @@
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
     listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 16, 5),
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 58, 5),
+      expectedError(diag.awaitInWrongContext, 16, 5),
+      expectedError(diag.awaitInWrongContext, 58, 5),
     ]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
@@ -203,9 +201,7 @@
     createParser('m() { print(await returnsFuture()); }');
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
-    listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 12, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.awaitInWrongContext, 12, 5)]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
     Statement statement = (body as BlockFunctionBody).block.statements[0];
@@ -223,9 +219,9 @@
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
     listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 16, 5),
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 39, 5),
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 62, 5),
+      expectedError(diag.awaitInWrongContext, 16, 5),
+      expectedError(diag.awaitInWrongContext, 39, 5),
+      expectedError(diag.awaitInWrongContext, 62, 5),
     ]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
@@ -246,8 +242,8 @@
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
     listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 12, 5),
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 36, 5),
+      expectedError(diag.awaitInWrongContext, 12, 5),
+      expectedError(diag.awaitInWrongContext, 36, 5),
     ]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
@@ -267,8 +263,8 @@
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expect(method, isNotNull);
     listener.assertErrors([
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 18, 5),
-      expectedError(CompileTimeErrorCode.awaitInWrongContext, 42, 5),
+      expectedError(diag.awaitInWrongContext, 18, 5),
+      expectedError(diag.awaitInWrongContext, 42, 5),
     ]);
     FunctionBody body = method.body;
     expect(body, isBlockFunctionBody);
@@ -298,7 +294,7 @@
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.period, isNull);
-    expect(constructor.returnType, isNotNull);
+    expect(constructor.typeName, isNotNull);
     expect(constructor.initializers, hasLength(1));
 
     var x = constructor.initializers[0] as ConstructorFieldInitializer;
@@ -392,7 +388,7 @@
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.period, isNull);
-    expect(constructor.returnType, isNotNull);
+    expect(constructor.typeName, isNotNull);
     expect(constructor.initializers, hasLength(1));
   }
 
@@ -608,7 +604,7 @@
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 4, 3),
+      expectedError(diag.expectedIdentifierButGotKeyword, 4, 3),
     ]);
   }
 
@@ -616,18 +612,14 @@
     createParser('var ;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 4, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 4, 1)]);
   }
 
   void test_parseClassMember_field_nameMissing2() {
     createParser('var "";');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 4, 2),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 4, 2)]);
   }
 
   void test_parseClassMember_field_static() {
@@ -660,11 +652,7 @@
     parser.parseClassMember('C');
     assertErrors(
       diagnostics: [
-        expectedError(
-          ParserErrorCode.finalAndCovariantLateWithInitializer,
-          0,
-          9,
-        ),
+        expectedError(diag.finalAndCovariantLateWithInitializer, 0, 9),
       ],
     );
   }
@@ -926,9 +914,7 @@
     createParser('static int get C => 0;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.memberWithClassName, 15, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.memberWithClassName, 15, 1)]);
     expect(member, isMethodDeclaration);
     var method = member as MethodDeclaration;
     expect(method.documentationComment, isNull);
@@ -1017,7 +1003,7 @@
     allowNativeClause = false;
     _parseClassMember_method_native_missing_literal();
     listener.assertErrors([
-      expectedError(ParserErrorCode.nativeClauseShouldBeAnnotation, 4, 6),
+      expectedError(diag.nativeClauseShouldBeAnnotation, 4, 6),
     ]);
   }
 
@@ -1025,7 +1011,7 @@
     allowNativeClause = false;
     _parseClassMember_method_native();
     listener.assertErrors([
-      expectedError(ParserErrorCode.nativeClauseShouldBeAnnotation, 4, 6),
+      expectedError(diag.nativeClauseShouldBeAnnotation, 4, 6),
     ]);
   }
 
@@ -1033,7 +1019,7 @@
     allowNativeClause = true;
     _parseClassMember_method_native_with_body();
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+    assertErrorsWithCodes([diag.externalMethodWithBody]);
     //      listener.assertErrors([
     //        expectedError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, 17, 2),
     //      ]);
@@ -1044,8 +1030,8 @@
     _parseClassMember_method_native_with_body();
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
     assertErrorsWithCodes([
-      ParserErrorCode.nativeClauseShouldBeAnnotation,
-      ParserErrorCode.externalMethodWithBody,
+      diag.nativeClauseShouldBeAnnotation,
+      diag.externalMethodWithBody,
     ]);
     //      listener.assertErrors([
     //        expectedError(ParserErrorCode.NATIVE_CLAUSE_SHOULD_BE_ANNOTATION, 4, 6),
@@ -1172,9 +1158,7 @@
     createParser('static void set C(_) {}');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.memberWithClassName, 16, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.memberWithClassName, 16, 1)]);
     expect(member, isMethodDeclaration);
     var method = member as MethodDeclaration;
     expect(method.documentationComment, isNull);
@@ -1231,7 +1215,8 @@
     var unit = parseCompilationUnit('class C { static void m() {} }');
 
     var c = unit.declarations[0] as ClassDeclaration;
-    var method = c.members[0] as MethodDeclaration;
+    var classBody = c.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNotNull);
@@ -1247,7 +1232,7 @@
   void test_parseClassMember_method_static_mixin() {
     var unit = parseCompilationUnit('mixin C { static void m() {} }');
     var c = unit.declarations[0] as MixinDeclaration;
-    var method = c.members[0] as MethodDeclaration;
+    var method = c.body.members[0] as MethodDeclaration;
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNotNull);
@@ -1309,7 +1294,8 @@
       'class C { bool operator >>>(other) => false; }',
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var method = declaration.members[0] as MethodDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
 
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNull);
@@ -1328,7 +1314,8 @@
       'class C { foo(int value) { x >>>= value; } }',
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var method = declaration.members[0] as MethodDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     var blockFunctionBody = method.body as BlockFunctionBody;
     NodeList<Statement> statements = blockFunctionBody.block.statements;
     expect(statements, hasLength(1));
@@ -1406,7 +1393,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword!.keyword, Keyword.CONST);
     expect(constructor.factoryKeyword!.keyword, Keyword.FACTORY);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.period, isNull);
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
@@ -1432,7 +1419,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword!.keyword, Keyword.FACTORY);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.period, isNull);
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
@@ -1459,7 +1446,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword!.keyword, Keyword.FACTORY);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.period, isNull);
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
@@ -1507,7 +1494,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNotNull);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.period!.type, TokenType.PERIOD);
     expect(constructor.name!.lexeme, 'foo');
     expect(constructor.parameters, isNotNull);
@@ -1549,7 +1536,7 @@
     // https://github.com/dart-lang/sdk/issues/37693
     parseCompilationUnit(
       'class C{ C() : super() * (); }',
-      diagnostics: [expectedError(ParserErrorCode.invalidInitializer, 15, 12)],
+      diagnostics: [expectedError(diag.invalidInitializer, 15, 12)],
     );
   }
 
@@ -1561,7 +1548,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.period!.type, TokenType.PERIOD);
     expect(constructor.name!.lexeme, 'foo');
     expect(constructor.parameters, isNotNull);
@@ -1577,19 +1564,20 @@
     var unit = parseCompilationUnit(
       'class{const():super.{n',
       diagnostics: [
-        expectedError(ParserErrorCode.missingIdentifier, 5, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 11, 1),
-        expectedError(ParserErrorCode.invalidConstructorName, 11, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 20, 1),
-        expectedError(ParserErrorCode.expectedToken, 20, 1),
-        expectedError(ParserErrorCode.constConstructorWithBody, 20, 1),
-        expectedError(ParserErrorCode.expectedToken, 21, 1),
-        expectedError(ParserErrorCode.expectedToken, 22, 1),
-        expectedError(ParserErrorCode.expectedToken, 22, 1),
+        expectedError(diag.missingIdentifier, 5, 1),
+        expectedError(diag.missingIdentifier, 11, 1),
+        expectedError(diag.invalidConstructorName, 11, 1),
+        expectedError(diag.missingIdentifier, 20, 1),
+        expectedError(diag.expectedToken, 20, 1),
+        expectedError(diag.constConstructorWithBody, 20, 1),
+        expectedError(diag.expectedToken, 21, 1),
+        expectedError(diag.expectedToken, 22, 1),
+        expectedError(diag.expectedToken, 22, 1),
       ],
     );
     var classDeclaration = unit.declarations[0] as ClassDeclaration;
-    var constructor = classDeclaration.members[0] as ConstructorDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     var invocation = constructor.initializers[0] as SuperConstructorInvocation;
     expect(invocation.argumentList.arguments, hasLength(0));
   }
@@ -1597,12 +1585,11 @@
   void test_parseConstructor_operator_name() {
     var unit = parseCompilationUnit(
       'class A { operator/() : super(); }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidConstructorName, 10, 8),
-      ],
+      diagnostics: [expectedError(diag.invalidConstructorName, 10, 8)],
     );
     var classDeclaration = unit.declarations[0] as ClassDeclaration;
-    var constructor = classDeclaration.members[0] as ConstructorDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     var invocation = constructor.initializers[0] as SuperConstructorInvocation;
     expect(invocation.argumentList.arguments, hasLength(0));
   }
@@ -1611,14 +1598,14 @@
     createParser('C() : super()[];');
     var constructor = parser.parseClassMember('C') as ConstructorDeclaration;
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidSuperInInitializer, 6, 5),
-      expectedError(ParserErrorCode.missingIdentifier, 14, 1),
+      expectedError(diag.invalidSuperInInitializer, 6, 5),
+      expectedError(diag.missingIdentifier, 14, 1),
     ]);
     expect(constructor, isNotNull);
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
@@ -1634,14 +1621,14 @@
     createParser('C() : this()[];');
     var constructor = parser.parseClassMember('C') as ConstructorDeclaration;
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidThisInInitializer, 6, 4),
-      expectedError(ParserErrorCode.missingIdentifier, 13, 1),
+      expectedError(diag.invalidThisInInitializer, 6, 4),
+      expectedError(diag.missingIdentifier, 13, 1),
     ]);
     expect(constructor, isNotNull);
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
@@ -1662,7 +1649,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.returnType.name, 'C');
+    expect(constructor.typeName!.name, 'C');
     expect(constructor.period, isNull);
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
@@ -1733,7 +1720,7 @@
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.abstractExternalField, 0, 8)],
+      diagnostics: [expectedError(diag.abstractExternalField, 0, 8)],
     );
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
@@ -1745,9 +1732,7 @@
     createParser('abstract late int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.abstractLateField, 0, 8)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.abstractLateField, 0, 8)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.abstractKeyword, isNotNull);
@@ -1757,9 +1742,7 @@
     createParser('abstract late final int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.abstractLateField, 0, 8)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.abstractLateField, 0, 8)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.abstractKeyword, isNotNull);
@@ -1769,9 +1752,7 @@
     createParser('abstract static int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.abstractStaticField, 0, 8)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.abstractStaticField, 0, 8)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.abstractKeyword, isNotNull);
@@ -1781,9 +1762,7 @@
     createParser('const late T f = 0;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.conflictingModifiers, 6, 4)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.conflictingModifiers, 6, 4)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.covariantKeyword, isNull);
@@ -1818,7 +1797,7 @@
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
     assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.abstractExternalField, 9, 8)],
+      diagnostics: [expectedError(diag.abstractExternalField, 9, 8)],
     );
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
@@ -1830,9 +1809,7 @@
     createParser('external late int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.externalLateField, 0, 8)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.externalLateField, 0, 8)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.externalKeyword, isNotNull);
@@ -1842,9 +1819,7 @@
     createParser('external late final int? i;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.externalLateField, 0, 8)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.externalLateField, 0, 8)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.externalKeyword, isNotNull);
@@ -1863,9 +1838,7 @@
   void test_parseField_final_late() {
     createParser('final late T f;');
     ClassMember member = parser.parseClassMember('C');
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 6, 4)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.modifierOutOfOrder, 6, 4)]);
     expect(member, isNotNull);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
@@ -1914,9 +1887,7 @@
     createParser('late const T f = 0;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.conflictingModifiers, 5, 5)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.conflictingModifiers, 5, 5)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.covariantKeyword, isNull);
@@ -2007,9 +1978,7 @@
     createParser('var late f;');
     ClassMember member = parser.parseClassMember('C');
     expect(member, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 4, 4)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.modifierOutOfOrder, 4, 4)]);
     expect(member, isFieldDeclaration);
     var field = member as FieldDeclaration;
     expect(field.covariantKeyword, isNull);
@@ -2034,18 +2003,18 @@
     var constructor = parser.parseClassMember('C') as ConstructorDeclaration;
     expect(constructor, isNotNull);
     listener.assertErrors([
-      expectedError(ParserErrorCode.getterConstructor, 0, 3),
-      expectedError(ParserErrorCode.missingMethodParameters, 4, 1),
-      expectedError(ParserErrorCode.invalidConstructorName, 4, 1),
-      expectedError(ParserErrorCode.missingInitializer, 5, 1),
-      expectedError(ParserErrorCode.missingFunctionBody, 6, 0),
+      expectedError(diag.getterConstructor, 0, 3),
+      expectedError(diag.missingMethodParameters, 4, 1),
+      expectedError(diag.invalidConstructorName, 4, 1),
+      expectedError(diag.missingInitializer, 5, 1),
+      expectedError(diag.missingFunctionBody, 6, 0),
     ]);
     expect(constructor.body, isNotNull);
     expect(constructor.documentationComment, isNull);
     expect(constructor.externalKeyword, isNull);
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
-    expect(constructor.returnType, isNotNull);
+    expect(constructor.typeName, isNotNull);
   }
 
   void test_parseGetter_nonStatic() {
diff --git a/pkg/analyzer/test/generated/complex_parser_test.dart b/pkg/analyzer/test/generated/complex_parser_test.dart
index 52724d0..4868ebe 100644
--- a/pkg/analyzer/test/generated/complex_parser_test.dart
+++ b/pkg/analyzer/test/generated/complex_parser_test.dart
@@ -7,7 +7,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -124,9 +124,7 @@
     var expression =
         parseExpression(
               'x xor y',
-              diagnostics: [
-                expectedError(ParserErrorCode.binaryOperatorWrittenOut, 2, 3),
-              ],
+              diagnostics: [expectedError(diag.binaryOperatorWrittenOut, 2, 3)],
             )
             as BinaryExpression;
     var lhs = expression.leftOperand as SimpleIdentifier;
@@ -140,9 +138,7 @@
     var expression =
         parseExpression(
               'x > 0 and y > 1',
-              diagnostics: [
-                expectedError(ParserErrorCode.binaryOperatorWrittenOut, 6, 3),
-              ],
+              diagnostics: [expectedError(diag.binaryOperatorWrittenOut, 6, 3)],
             )
             as BinaryExpression;
     var lhs = expression.leftOperand as BinaryExpression;
@@ -420,7 +416,7 @@
     var expression =
         parseExpression(
               "x == y != z",
-              codes: [ParserErrorCode.equalityCannotBeEqualityOperand],
+              codes: [diag.equalityCannotBeEqualityOperand],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
@@ -440,7 +436,7 @@
     var expression =
         parseExpression(
               "super == y != z",
-              codes: [ParserErrorCode.equalityCannotBeEqualityOperand],
+              codes: [diag.equalityCannotBeEqualityOperand],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 8db9695..a01dd1a 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -212,7 +212,9 @@
   }
 
   FieldFragmentImpl enumConstant_(String name) {
-    return FieldFragmentImpl(name: name)..isEnumConstant = true;
+    return FieldFragmentImpl(name: name)
+      ..isEnumConstant = true
+      ..isOriginDeclaration = true;
   }
 
   ExtensionFragmentImpl extension({
@@ -243,7 +245,8 @@
     fragment.enclosingFragment = testLibrary.firstFragment;
     fragment.typeParameters = typeParameters.map((e) => e.asElement).toList();
 
-    var fieldFragment = FieldFragmentImpl(name: representationName);
+    var fieldFragment = FieldFragmentImpl(name: representationName)
+      ..isOriginDeclaringFormalParameter = true;
     var fieldElement = FieldElementImpl(
       reference: Reference.root(),
       firstFragment: fieldFragment,
@@ -269,19 +272,20 @@
     fragment.enclosingFragment = testLibrary.firstFragment;
     fragment.typeParameters = typeParameters.map((e) => e.asElement).toList();
 
-    var fieldFragment = FieldFragmentImpl(name: representationName);
+    var fieldFragment = FieldFragmentImpl(name: representationName)
+      ..isOriginDeclaringFormalParameter = true;
     fragment.fields = [fieldFragment];
 
+    var element = ExtensionTypeElementImpl(Reference.root(), fragment);
+    element.typeErasure = representationType;
+    element.interfaces = interfaces;
+
     var fieldElement = FieldElementImpl(
       reference: Reference.root(),
       firstFragment: fieldFragment,
     );
-    fieldElement.type = representationType;
-
-    var element = ExtensionTypeElementImpl(Reference.root(), fragment);
-    element.typeErasure = representationType;
-    element.interfaces = interfaces;
     element.fields = [fieldElement];
+    fieldElement.type = representationType;
 
     return element;
   }
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index 5cb8691..08f58c4 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -5,8 +5,7 @@
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as fasta;
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,9 +27,7 @@
     createParser('abstract C.c();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.abstractClassMember, 0, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.abstractClassMember, 0, 8)]);
   }
 
   void test_abstractClassMember_field() {
@@ -44,68 +41,62 @@
     createParser('abstract get m;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.abstractClassMember, 0, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.abstractClassMember, 0, 8)]);
   }
 
   void test_abstractClassMember_method() {
     createParser('abstract m();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.abstractClassMember, 0, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.abstractClassMember, 0, 8)]);
   }
 
   void test_abstractClassMember_setter() {
     createParser('abstract set m(v);');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.abstractClassMember, 0, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.abstractClassMember, 0, 8)]);
   }
 
   void test_abstractEnum() {
     parseCompilationUnit(
       "abstract enum E {ONE}",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 8)],
     );
   }
 
   void test_abstractTopLevelFunction_function() {
     parseCompilationUnit(
       "abstract f(v) {}",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 8)],
     );
   }
 
   void test_abstractTopLevelFunction_getter() {
     parseCompilationUnit(
       "abstract get m {}",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 8)],
     );
   }
 
   void test_abstractTopLevelFunction_setter() {
     parseCompilationUnit(
       "abstract set m(v) {}",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 8)],
     );
   }
 
   void test_abstractTopLevelVariable() {
     parseCompilationUnit(
       "abstract C f;",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 8)],
     );
   }
 
   void test_abstractTypeDef() {
     parseCompilationUnit(
       "abstract typedef F();",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 8)],
     );
   }
 
@@ -116,9 +107,7 @@
   await foo.bar();
 }
 ''',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.awaitInWrongContext, 28, 5),
-      ],
+      diagnostics: [expectedError(diag.awaitInWrongContext, 28, 5)],
     );
   }
 
@@ -129,9 +118,7 @@
   (await foo);
 }
 ''',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.awaitInWrongContext, 29, 5),
-      ],
+      diagnostics: [expectedError(diag.awaitInWrongContext, 29, 5)],
     );
   }
 
@@ -142,9 +129,7 @@
   [await foo];
 }
 ''',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.awaitInWrongContext, 29, 5),
-      ],
+      diagnostics: [expectedError(diag.awaitInWrongContext, 29, 5)],
     );
   }
 
@@ -155,9 +140,7 @@
   await foo();
 }
 ''',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.awaitInWrongContext, 28, 5),
-      ],
+      diagnostics: [expectedError(diag.awaitInWrongContext, 28, 5)],
     );
   }
 
@@ -176,9 +159,7 @@
   void test_breakOutsideOfLoop_breakInIfStatement() {
     var statement = parseStatement('if (x) {break;}') as IfStatement;
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.breakOutsideOfLoop, 8, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.breakOutsideOfLoop, 8, 5)]);
   }
 
   void test_breakOutsideOfLoop_breakInSwitchStatement() {
@@ -196,9 +177,7 @@
 
   void test_breakOutsideOfLoop_functionExpression_inALoop() {
     parseStatement("for(; x;) {() {break;};}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.breakOutsideOfLoop, 15, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.breakOutsideOfLoop, 15, 5)]);
   }
 
   void test_breakOutsideOfLoop_functionExpression_withALoop() {
@@ -209,8 +188,8 @@
     parseCompilationUnit(
       "class C { abstract class B {} }",
       diagnostics: [
-        expectedError(ParserErrorCode.abstractClassMember, 10, 8),
-        expectedError(ParserErrorCode.classInClass, 19, 5),
+        expectedError(diag.abstractClassMember, 10, 8),
+        expectedError(diag.classInClass, 19, 5),
       ],
     );
   }
@@ -218,7 +197,7 @@
   void test_classInClass_nonAbstract() {
     parseCompilationUnit(
       "class C { class B {} }",
-      diagnostics: [expectedError(ParserErrorCode.classInClass, 10, 5)],
+      diagnostics: [expectedError(diag.classInClass, 10, 5)],
     );
   }
 
@@ -229,48 +208,42 @@
     CompilationUnitMember member = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(CompileTimeErrorCode.builtInIdentifierAsType, 10, 8),
-      expectedError(ParserErrorCode.expectedToken, 19, 1),
-      expectedError(ParserErrorCode.expectedToken, 19, 1),
+      expectedError(diag.builtInIdentifierAsType, 10, 8),
+      expectedError(diag.expectedToken, 19, 1),
+      expectedError(diag.expectedToken, 19, 1),
     ]);
   }
 
   void test_colonInPlaceOfIn() {
     parseStatement("for (var x : list) {}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.colonInPlaceOfIn, 11, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.colonInPlaceOfIn, 11, 1)]);
   }
 
   void test_constAndCovariant() {
     createParser('covariant const C f = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.conflictingModifiers, 10, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.conflictingModifiers, 10, 5)]);
   }
 
   void test_constAndFinal() {
     createParser('const final int x = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.constAndFinal, 6, 5)]);
+    listener.assertErrors([expectedError(diag.constAndFinal, 6, 5)]);
   }
 
   void test_constAndVar() {
     createParser('const var x = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.conflictingModifiers, 6, 3),
-    ]);
+    listener.assertErrors([expectedError(diag.conflictingModifiers, 6, 3)]);
   }
 
   void test_constClass() {
     parseCompilationUnit(
       "const class C {}",
-      diagnostics: [expectedError(ParserErrorCode.constClass, 0, 5)],
+      diagnostics: [expectedError(diag.constClass, 0, 5)],
     );
   }
 
@@ -279,7 +252,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.constConstructorWithBody, 10, 1),
+      expectedError(diag.constConstructorWithBody, 10, 1),
     ]);
   }
 
@@ -289,8 +262,8 @@
       diagnostics: [
         // Fasta interprets the `const` as a malformed top level const
         // and `enum` as the start of an enum declaration.
-        expectedError(ParserErrorCode.expectedToken, 0, 5),
-        expectedError(ParserErrorCode.missingIdentifier, 6, 4),
+        expectedError(diag.expectedToken, 0, 5),
+        expectedError(diag.missingIdentifier, 6, 4),
       ],
     );
   }
@@ -299,28 +272,28 @@
     createParser('const factory C() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.constFactory, 0, 5)]);
+    listener.assertErrors([expectedError(diag.constFactory, 0, 5)]);
   }
 
   void test_constMethod() {
     createParser('const int m() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.constMethod, 0, 5)]);
+    listener.assertErrors([expectedError(diag.constMethod, 0, 5)]);
   }
 
   void test_constMethod_noReturnType() {
     createParser('const m() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.constMethod, 0, 5)]);
+    listener.assertErrors([expectedError(diag.constMethod, 0, 5)]);
   }
 
   void test_constMethod_noReturnType2() {
     createParser('const m();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.constMethod, 0, 5)]);
+    listener.assertErrors([expectedError(diag.constMethod, 0, 5)]);
   }
 
   void test_constructor_super_cascade_synthetic() {
@@ -328,9 +301,9 @@
     parseCompilationUnit(
       'class B extends A { B(): super.. {} }',
       diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-        expectedError(ParserErrorCode.expectedToken, 30, 2),
-        expectedError(ParserErrorCode.missingIdentifier, 33, 1),
+        expectedError(diag.invalidSuperInInitializer, 25, 5),
+        expectedError(diag.expectedToken, 30, 2),
+        expectedError(diag.missingIdentifier, 33, 1),
       ],
     );
   }
@@ -340,9 +313,7 @@
     // https://github.com/dart-lang/sdk/issues/31198
     parseCompilationUnit(
       'class B extends A { B(): super().foo {} }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-      ],
+      diagnostics: [expectedError(diag.invalidSuperInInitializer, 25, 5)],
     );
   }
 
@@ -351,9 +322,7 @@
     // https://github.com/dart-lang/sdk/issues/31198
     parseCompilationUnit(
       'class B extends A { B(): super().foo() {} }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-      ],
+      diagnostics: [expectedError(diag.invalidSuperInInitializer, 25, 5)],
     );
   }
 
@@ -361,9 +330,7 @@
     // https://github.com/dart-lang/sdk/issues/37600
     parseCompilationUnit(
       'class B extends A { B(): super.c().create() {} }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-      ],
+      diagnostics: [expectedError(diag.invalidSuperInInitializer, 25, 5)],
     );
   }
 
@@ -371,9 +338,7 @@
     // https://github.com/dart-lang/sdk/issues/37600
     parseCompilationUnit(
       'class B extends A { B(): super.c().create().x() {} }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-      ],
+      diagnostics: [expectedError(diag.invalidSuperInInitializer, 25, 5)],
     );
   }
 
@@ -382,9 +347,9 @@
     parseCompilationUnit(
       'class B extends A { B(): this.. {} }',
       diagnostics: [
-        expectedError(ParserErrorCode.missingAssignmentInInitializer, 25, 4),
-        expectedError(ParserErrorCode.expectedToken, 29, 2),
-        expectedError(ParserErrorCode.missingIdentifier, 32, 1),
+        expectedError(diag.missingAssignmentInInitializer, 25, 4),
+        expectedError(diag.expectedToken, 29, 2),
+        expectedError(diag.missingIdentifier, 32, 1),
       ],
     );
   }
@@ -394,9 +359,7 @@
     // https://github.com/dart-lang/sdk/issues/31198
     parseCompilationUnit(
       'class B extends A { B(): this().foo; }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidThisInInitializer, 25, 4),
-      ],
+      diagnostics: [expectedError(diag.invalidThisInInitializer, 25, 4)],
     );
   }
 
@@ -405,9 +368,7 @@
     // https://github.com/dart-lang/sdk/issues/31198
     parseCompilationUnit(
       'class B extends A { B(): this().foo(); }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidThisInInitializer, 25, 4),
-      ],
+      diagnostics: [expectedError(diag.invalidThisInInitializer, 25, 4)],
     );
   }
 
@@ -415,9 +376,7 @@
     // https://github.com/dart-lang/sdk/issues/37600
     parseCompilationUnit(
       'class B extends A { B(): super.c().create() {} }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-      ],
+      diagnostics: [expectedError(diag.invalidSuperInInitializer, 25, 5)],
     );
   }
 
@@ -425,9 +384,7 @@
     // https://github.com/dart-lang/sdk/issues/37600
     parseCompilationUnit(
       'class B extends A { B(): super.c().create().x {} }',
-      diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 25, 5),
-      ],
+      diagnostics: [expectedError(diag.invalidSuperInInitializer, 25, 5)],
     );
   }
 
@@ -435,9 +392,9 @@
     createParser('class C { C< }');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 11, 1),
-      expectedError(ParserErrorCode.expectedTypeName, 13, 1),
-      expectedError(ParserErrorCode.missingIdentifier, 13, 1),
+      expectedError(diag.expectedToken, 11, 1),
+      expectedError(diag.expectedTypeName, 13, 1),
+      expectedError(diag.missingIdentifier, 13, 1),
     ]);
   }
 
@@ -445,10 +402,10 @@
     createParser('class C { C<@Foo }');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.annotationOnTypeArgument, 12, 4),
-      expectedError(ParserErrorCode.expectedToken, 13, 3),
-      expectedError(ParserErrorCode.expectedTypeName, 17, 1),
-      expectedError(ParserErrorCode.missingIdentifier, 17, 1),
+      expectedError(diag.annotationOnTypeArgument, 12, 4),
+      expectedError(diag.expectedToken, 13, 3),
+      expectedError(diag.expectedTypeName, 17, 1),
+      expectedError(diag.missingIdentifier, 17, 1),
     ]);
   }
 
@@ -456,11 +413,11 @@
     createParser('class C { C<@Foo @Bar() }');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.annotationOnTypeArgument, 12, 4),
-      expectedError(ParserErrorCode.annotationOnTypeArgument, 17, 6),
-      expectedError(ParserErrorCode.expectedToken, 22, 1),
-      expectedError(ParserErrorCode.expectedTypeName, 24, 1),
-      expectedError(ParserErrorCode.missingIdentifier, 24, 1),
+      expectedError(diag.annotationOnTypeArgument, 12, 4),
+      expectedError(diag.annotationOnTypeArgument, 17, 6),
+      expectedError(diag.expectedToken, 22, 1),
+      expectedError(diag.expectedTypeName, 24, 1),
+      expectedError(diag.missingIdentifier, 24, 1),
     ]);
   }
 
@@ -469,7 +426,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.constructorWithReturnType, 0, 1),
+      expectedError(diag.constructorWithReturnType, 0, 1),
     ]);
   }
 
@@ -477,7 +434,7 @@
     createParser('var C() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.varReturnType, 0, 3)]);
+    listener.assertErrors([expectedError(diag.varReturnType, 0, 3)]);
   }
 
   void test_constTypedef() {
@@ -486,8 +443,8 @@
       diagnostics: [
         // Fasta interprets the `const` as a malformed top level const
         // and `typedef` as the start of an typedef declaration.
-        expectedError(ParserErrorCode.expectedToken, 0, 5),
-        expectedError(ParserErrorCode.missingIdentifier, 6, 7),
+        expectedError(diag.expectedToken, 0, 5),
+        expectedError(diag.missingIdentifier, 6, 7),
       ],
     );
   }
@@ -507,9 +464,7 @@
   void test_continueOutsideOfLoop_continueInIfStatement() {
     var statement = parseStatement('if (x) {continue;}') as IfStatement;
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.continueOutsideOfLoop, 8, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.continueOutsideOfLoop, 8, 8)]);
   }
 
   void test_continueOutsideOfLoop_continueInSwitchStatement() {
@@ -527,9 +482,7 @@
 
   void test_continueOutsideOfLoop_functionExpression_inALoop() {
     parseStatement("for(; x;) {() {continue;};}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.continueOutsideOfLoop, 15, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.continueOutsideOfLoop, 15, 8)]);
   }
 
   void test_continueOutsideOfLoop_functionExpression_withALoop() {
@@ -541,7 +494,7 @@
         parseStatement('switch (x) {case 1: continue;}') as SwitchStatement;
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.continueWithoutLabelInCase, 20, 8),
+      expectedError(diag.continueWithoutLabelInCase, 20, 8),
     ]);
   }
 
@@ -564,94 +517,76 @@
     createParser('var covariant f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 4, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.modifierOutOfOrder, 4, 9)]);
   }
 
   void test_covariantAndFinal() {
     createParser('covariant final f = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrorsWithCodes([ParserErrorCode.finalAndCovariant]);
+    listener.assertErrorsWithCodes([diag.finalAndCovariant]);
   }
 
   void test_covariantAndStatic() {
     createParser('covariant static A f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.covariantAndStatic, 10, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.covariantAndStatic, 10, 6)]);
   }
 
   void test_covariantAndType_local() {
     // This is currently reporting EXPECTED_TOKEN for a missing semicolon, but
     // this would be a better error message.
     parseStatement("covariant int x;");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.extraneousModifier, 0, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.extraneousModifier, 0, 9)]);
   }
 
   void test_covariantConstructor() {
     createParser('class C { covariant C(); }');
     var member = parseFullCompilationUnitMember() as ClassDeclaration;
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.covariantMember, 10, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.covariantMember, 10, 9)]);
   }
 
   void test_covariantMember_getter_noReturnType() {
     createParser('static covariant get x => 0;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.covariantAndStatic, 7, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.covariantAndStatic, 7, 9)]);
   }
 
   void test_covariantMember_getter_returnType() {
     createParser('static covariant int get x => 0;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.covariantAndStatic, 7, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.covariantAndStatic, 7, 9)]);
   }
 
   void test_covariantMember_method() {
     createParser('covariant int m() => 0;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.covariantMember, 0, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.covariantMember, 0, 9)]);
   }
 
   void test_covariantTopLevelDeclaration_class() {
     createParser('covariant class C {}');
     var member = parseFullCompilationUnitMember() as ClassDeclaration;
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.extraneousModifier, 0, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.extraneousModifier, 0, 9)]);
   }
 
   void test_covariantTopLevelDeclaration_enum() {
     createParser('covariant enum E { v }');
     var member = parseFullCompilationUnitMember() as EnumDeclaration;
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.extraneousModifier, 0, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.extraneousModifier, 0, 9)]);
   }
 
   void test_covariantTopLevelDeclaration_typedef() {
     parseCompilationUnit(
       "covariant typedef F();",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 9)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 9)],
     );
   }
 
@@ -662,7 +597,7 @@
         .parameters[0];
     expectNotNullIfNoErrors(parameter);
     listener.assertErrors([
-      expectedError(ParserErrorCode.defaultValueInFunctionType, 8, 1),
+      expectedError(diag.defaultValueInFunctionType, 8, 1),
     ]);
   }
 
@@ -673,7 +608,7 @@
         .parameters[0];
     expectNotNullIfNoErrors(parameter);
     listener.assertErrors([
-      expectedError(ParserErrorCode.defaultValueInFunctionType, 8, 1),
+      expectedError(diag.defaultValueInFunctionType, 8, 1),
     ]);
   }
 
@@ -684,7 +619,7 @@
         .parameters[0];
     expectNotNullIfNoErrors(parameter);
     listener.assertErrors([
-      expectedError(ParserErrorCode.defaultValueInFunctionType, 8, 1),
+      expectedError(diag.defaultValueInFunctionType, 8, 1),
     ]);
   }
 
@@ -692,10 +627,8 @@
     // TODO(brianwilkerson): Remove codes when highlighting is fixed.
     CompilationUnit unit = parseCompilationUnit(
       "class Foo{} library l;",
-      codes: [ParserErrorCode.libraryDirectiveNotFirst],
-      diagnostics: [
-        expectedError(ParserErrorCode.libraryDirectiveNotFirst, 12, 10),
-      ],
+      codes: [diag.libraryDirectiveNotFirst],
+      diagnostics: [expectedError(diag.libraryDirectiveNotFirst, 12, 10)],
     );
     expect(unit, isNotNull);
   }
@@ -704,10 +637,8 @@
     // TODO(brianwilkerson): Remove codes when highlighting is fixed.
     CompilationUnit unit = parseCompilationUnit(
       "library l;\nclass Foo{}\npart 'a.dart';",
-      codes: [ParserErrorCode.directiveAfterDeclaration],
-      diagnostics: [
-        expectedError(ParserErrorCode.directiveAfterDeclaration, 23, 14),
-      ],
+      codes: [diag.directiveAfterDeclaration],
+      diagnostics: [expectedError(diag.directiveAfterDeclaration, 23, 14)],
     );
     expect(unit, isNotNull);
   }
@@ -716,54 +647,42 @@
     createParser('const const m = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.duplicatedModifier, 6, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.duplicatedModifier, 6, 5)]);
   }
 
   void test_duplicatedModifier_external() {
     createParser('external external f();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.duplicatedModifier, 9, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.duplicatedModifier, 9, 8)]);
   }
 
   void test_duplicatedModifier_factory() {
     createParser('factory factory C() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.duplicatedModifier, 8, 7),
-    ]);
+    listener.assertErrors([expectedError(diag.duplicatedModifier, 8, 7)]);
   }
 
   void test_duplicatedModifier_final() {
     createParser('final final m = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.duplicatedModifier, 6, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.duplicatedModifier, 6, 5)]);
   }
 
   void test_duplicatedModifier_static() {
     createParser('static static var m;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.duplicatedModifier, 7, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.duplicatedModifier, 7, 6)]);
   }
 
   void test_duplicatedModifier_var() {
     createParser('var var m;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.duplicatedModifier, 4, 3),
-    ]);
+    listener.assertErrors([expectedError(diag.duplicatedModifier, 4, 3)]);
   }
 
   void test_duplicateLabelInSwitchStatement() {
@@ -772,7 +691,7 @@
             as SwitchStatement;
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.duplicateLabelInSwitchStatement, 31, 2),
+      expectedError(diag.duplicateLabelInSwitchStatement, 31, 2),
     ]);
   }
 
@@ -795,61 +714,53 @@
   }
 }
 ''',
-      diagnostics: [expectedError(ParserErrorCode.enumInClass, 14, 4)],
+      diagnostics: [expectedError(diag.enumInClass, 14, 4)],
     );
   }
 
   void test_equalityCannotBeEqualityOperand_eq_eq() {
     parseExpression(
       "1 == 2 == 3",
-      diagnostics: [
-        expectedError(ParserErrorCode.equalityCannotBeEqualityOperand, 7, 2),
-      ],
+      diagnostics: [expectedError(diag.equalityCannotBeEqualityOperand, 7, 2)],
     );
   }
 
   void test_equalityCannotBeEqualityOperand_eq_neq() {
     parseExpression(
       "1 == 2 != 3",
-      diagnostics: [
-        expectedError(ParserErrorCode.equalityCannotBeEqualityOperand, 7, 2),
-      ],
+      diagnostics: [expectedError(diag.equalityCannotBeEqualityOperand, 7, 2)],
     );
   }
 
   void test_equalityCannotBeEqualityOperand_neq_eq() {
     parseExpression(
       "1 != 2 == 3",
-      diagnostics: [
-        expectedError(ParserErrorCode.equalityCannotBeEqualityOperand, 7, 2),
-      ],
+      diagnostics: [expectedError(diag.equalityCannotBeEqualityOperand, 7, 2)],
     );
   }
 
   void test_expectedBody_class() {
     parseCompilationUnit(
       "class A class B {}",
-      diagnostics: [expectedError(ParserErrorCode.expectedClassBody, 6, 1)],
+      diagnostics: [expectedError(diag.expectedClassBody, 6, 1)],
     );
   }
 
   void test_expectedCaseOrDefault() {
     var statement = parseStatement('switch (e) {break;}') as SwitchStatement;
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 12, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 12, 5)]);
   }
 
   void test_expectedClassMember_inClass_afterType() {
     parseCompilationUnit(
       'class C{ heart 2 heart }',
       diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 9, 5),
-        expectedError(ParserErrorCode.expectedToken, 9, 5),
-        expectedError(ParserErrorCode.expectedClassMember, 15, 1),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 17, 5),
-        expectedError(ParserErrorCode.expectedToken, 17, 5),
+        expectedError(diag.missingConstFinalVarOrType, 9, 5),
+        expectedError(diag.expectedToken, 9, 5),
+        expectedError(diag.expectedClassMember, 15, 1),
+        expectedError(diag.missingConstFinalVarOrType, 17, 5),
+        expectedError(diag.expectedToken, 17, 5),
       ],
     );
   }
@@ -858,9 +769,9 @@
     parseCompilationUnit(
       'class C { 4 score }',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedClassMember, 10, 1),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 12, 5),
-        expectedError(ParserErrorCode.expectedToken, 12, 5),
+        expectedError(diag.expectedClassMember, 10, 1),
+        expectedError(diag.missingConstFinalVarOrType, 12, 5),
+        expectedError(diag.expectedToken, 12, 5),
       ],
     );
   }
@@ -869,8 +780,8 @@
     // TODO(brianwilkerson): Remove codes when highlighting is fixed.
     parseCompilationUnit(
       '@A',
-      codes: [ParserErrorCode.expectedExecutable],
-      diagnostics: [expectedError(ParserErrorCode.expectedExecutable, 1, 1)],
+      codes: [diag.expectedExecutable],
+      diagnostics: [expectedError(diag.expectedExecutable, 1, 1)],
     );
   }
 
@@ -878,10 +789,10 @@
     parseCompilationUnit(
       'class C { void 2 void }',
       diagnostics: [
-        expectedError(ParserErrorCode.missingIdentifier, 15, 1),
-        expectedError(ParserErrorCode.expectedToken, 15, 1),
-        expectedError(ParserErrorCode.expectedToken, 17, 4),
-        expectedError(ParserErrorCode.missingIdentifier, 22, 1),
+        expectedError(diag.missingIdentifier, 15, 1),
+        expectedError(diag.expectedToken, 15, 1),
+        expectedError(diag.expectedToken, 17, 4),
+        expectedError(diag.missingIdentifier, 22, 1),
       ],
     );
   }
@@ -890,11 +801,11 @@
     CompilationUnit unit = parseCompilationUnit(
       'heart 2 heart',
       diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 0, 5),
-        expectedError(ParserErrorCode.expectedToken, 0, 5),
-        expectedError(ParserErrorCode.expectedExecutable, 6, 1),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 8, 5),
-        expectedError(ParserErrorCode.expectedToken, 8, 5),
+        expectedError(diag.missingConstFinalVarOrType, 0, 5),
+        expectedError(diag.expectedToken, 0, 5),
+        expectedError(diag.expectedExecutable, 6, 1),
+        expectedError(diag.missingConstFinalVarOrType, 8, 5),
+        expectedError(diag.expectedToken, 8, 5),
       ],
     );
     expect(unit, isNotNull);
@@ -904,11 +815,11 @@
     CompilationUnit unit = parseCompilationUnit(
       'void 2 void',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 0, 4),
-        expectedError(ParserErrorCode.missingIdentifier, 5, 1),
-        expectedError(ParserErrorCode.expectedExecutable, 5, 1),
-        expectedError(ParserErrorCode.expectedToken, 7, 4),
-        expectedError(ParserErrorCode.missingIdentifier, 11, 0),
+        expectedError(diag.expectedToken, 0, 4),
+        expectedError(diag.missingIdentifier, 5, 1),
+        expectedError(diag.expectedExecutable, 5, 1),
+        expectedError(diag.expectedToken, 7, 4),
+        expectedError(diag.missingIdentifier, 11, 0),
       ],
     );
     expect(unit, isNotNull);
@@ -918,9 +829,9 @@
     parseCompilationUnit(
       '4 score',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedExecutable, 0, 1),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 2, 5),
-        expectedError(ParserErrorCode.expectedToken, 2, 5),
+        expectedError(diag.expectedExecutable, 0, 1),
+        expectedError(diag.missingConstFinalVarOrType, 2, 5),
+        expectedError(diag.expectedToken, 2, 5),
       ],
     );
   }
@@ -929,8 +840,8 @@
     parseCompilationUnit(
       'x',
       diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 0, 1),
-        expectedError(ParserErrorCode.expectedToken, 0, 1),
+        expectedError(diag.missingConstFinalVarOrType, 0, 1),
+        expectedError(diag.expectedToken, 0, 1),
       ],
     );
   }
@@ -939,9 +850,7 @@
     var literal =
         parseExpression(
               "'\$x\$'",
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 4, 1),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 4, 1)],
             )
             as StringLiteral;
     expectNotNullIfNoErrors(literal);
@@ -954,9 +863,7 @@
     var literal =
         parseExpression(
               "'\$\$foo'",
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 2, 1),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 2, 1)],
             )
             as StringLiteral;
     expectNotNullIfNoErrors(literal);
@@ -966,14 +873,14 @@
     createParser('(x, y z)');
     ArgumentList list = parser.parseArgumentList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 6, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 6, 1)]);
   }
 
   void test_expectedToken_parseStatement_afterVoid() {
     parseStatement("void}", expectedEndOffset: 4);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 0, 4),
-      expectedError(ParserErrorCode.missingIdentifier, 4, 1),
+      expectedError(diag.expectedToken, 0, 4),
+      expectedError(diag.missingIdentifier, 4, 1),
     ]);
   }
 
@@ -981,8 +888,8 @@
     // TODO(brianwilkerson): Remove codes when highlighting is fixed.
     CompilationUnit unit = parseCompilationUnit(
       "export '' class A {}",
-      codes: [ParserErrorCode.expectedToken],
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 7, 2)],
+      codes: [diag.expectedToken],
+      diagnostics: [expectedError(diag.expectedToken, 7, 2)],
     );
     ExportDirective directive = unit.directives[0] as ExportDirective;
     expect(directive.uri, isNotNull);
@@ -993,13 +900,13 @@
     expect(semicolon, isNotNull);
     expect(semicolon.isSynthetic, isTrue);
     ClassDeclaration clazz = unit.declarations[0] as ClassDeclaration;
-    expect(clazz.name.lexeme, 'A');
+    expect(clazz.namePart.typeName.lexeme, 'A');
   }
 
   void test_expectedToken_semicolonMissingAfterExpression() {
     parseStatement("x");
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.expectedToken]);
+    listener.assertErrorsWithCodes([diag.expectedToken]);
     //    listener
     //        .assertErrors([expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 1)]);
   }
@@ -1008,8 +915,8 @@
     // TODO(brianwilkerson): Remove codes when highlighting is fixed.
     CompilationUnit unit = parseCompilationUnit(
       "import '' class A {}",
-      codes: [ParserErrorCode.expectedToken],
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 7, 2)],
+      codes: [diag.expectedToken],
+      diagnostics: [expectedError(diag.expectedToken, 7, 2)],
     );
     ImportDirective directive = unit.directives[0] as ImportDirective;
     Token semicolon = directive.semicolon;
@@ -1021,8 +928,8 @@
     CompilationUnit unit = parseCompilationUnit(
       "export class A {}",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 0, 6),
-        expectedError(ParserErrorCode.expectedStringLiteral, 7, 5),
+        expectedError(diag.expectedToken, 0, 6),
+        expectedError(diag.expectedStringLiteral, 7, 5),
       ],
     );
     ExportDirective directive = unit.directives[0] as ExportDirective;
@@ -1034,18 +941,18 @@
     expect(semicolon, isNotNull);
     expect(semicolon.isSynthetic, isTrue);
     ClassDeclaration clazz = unit.declarations[0] as ClassDeclaration;
-    expect(clazz.name.lexeme, 'A');
+    expect(clazz.namePart.typeName.lexeme, 'A');
   }
 
   void test_expectedToken_whileMissingInDoStatement() {
     parseStatement("do {} (x);");
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 6, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 6, 1)]);
   }
 
   void test_expectedTypeName_as() {
     parseExpression(
       "x as",
-      diagnostics: [expectedError(ParserErrorCode.expectedTypeName, 4, 0)],
+      diagnostics: [expectedError(diag.expectedTypeName, 4, 0)],
     );
   }
 
@@ -1053,14 +960,14 @@
     parseExpression(
       "x as void)",
       expectedEndOffset: 9,
-      diagnostics: [expectedError(ParserErrorCode.expectedTypeName, 5, 4)],
+      diagnostics: [expectedError(diag.expectedTypeName, 5, 4)],
     );
   }
 
   void test_expectedTypeName_is() {
     parseExpression(
       "x is",
-      diagnostics: [expectedError(ParserErrorCode.expectedTypeName, 4, 0)],
+      diagnostics: [expectedError(diag.expectedTypeName, 4, 0)],
     );
   }
 
@@ -1068,25 +975,21 @@
     parseExpression(
       "x is void)",
       expectedEndOffset: 9,
-      diagnostics: [expectedError(ParserErrorCode.expectedTypeName, 5, 4)],
+      diagnostics: [expectedError(diag.expectedTypeName, 5, 4)],
     );
   }
 
   void test_exportAsType() {
     parseCompilationUnit(
       'export<dynamic> foo;',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.builtInIdentifierAsType, 0, 6),
-      ],
+      diagnostics: [expectedError(diag.builtInIdentifierAsType, 0, 6)],
     );
   }
 
   void test_exportAsType_inClass() {
     parseCompilationUnit(
       'class C { export<dynamic> foo; }',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.builtInIdentifierAsType, 10, 6),
-      ],
+      diagnostics: [expectedError(diag.builtInIdentifierAsType, 10, 6)],
     );
   }
 
@@ -1094,33 +997,27 @@
     createParser('const external C();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 6, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.modifierOutOfOrder, 6, 8)]);
   }
 
   void test_externalAfterFactory() {
     createParser('factory external C();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 8, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.modifierOutOfOrder, 8, 8)]);
   }
 
   void test_externalAfterStatic() {
     createParser('static external int m();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 7, 8),
-    ]);
+    listener.assertErrors([expectedError(diag.modifierOutOfOrder, 7, 8)]);
   }
 
   void test_externalClass() {
     parseCompilationUnit(
       "external class C {}",
-      diagnostics: [expectedError(ParserErrorCode.externalClass, 0, 8)],
+      diagnostics: [expectedError(diag.externalClass, 0, 8)],
     );
   }
 
@@ -1128,9 +1025,7 @@
     createParser('external factory C() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.externalFactoryWithBody, 21, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.externalFactoryWithBody, 21, 1)]);
   }
 
   void test_externalConstructorWithBody_named() {
@@ -1138,7 +1033,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+    listener.assertErrorsWithCodes([diag.externalMethodWithBody]);
     //      listener.assertErrors(
     //          [expectedError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, 15, 2)]);
   }
@@ -1146,7 +1041,7 @@
   void test_externalEnum() {
     parseCompilationUnit(
       "external enum E {ONE}",
-      diagnostics: [expectedError(ParserErrorCode.externalEnum, 0, 8)],
+      diagnostics: [expectedError(diag.externalEnum, 0, 8)],
     );
   }
 
@@ -1154,9 +1049,7 @@
     createParser('external const A f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(CompileTimeErrorCode.constNotInitialized, 17, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.constNotInitialized, 17, 1)]);
   }
 
   void test_externalField_final() {
@@ -1192,7 +1085,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+    listener.assertErrorsWithCodes([diag.externalMethodWithBody]);
     //      listener.assertErrors(
     //          [expectedError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, 19, 2)]);
   }
@@ -1202,7 +1095,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+    listener.assertErrorsWithCodes([diag.externalMethodWithBody]);
     //    listener.assertErrors(
     //        [expectedError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, 13, 2)]);
   }
@@ -1212,7 +1105,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+    listener.assertErrorsWithCodes([diag.externalMethodWithBody]);
     //      listener.assertErrors(
     //          [expectedError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, 31, 2)]);
   }
@@ -1222,7 +1115,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+    listener.assertErrorsWithCodes([diag.externalMethodWithBody]);
     //      listener.assertErrors(
     //          [expectedError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, 26, 2)]);
   }
@@ -1230,7 +1123,7 @@
   void test_externalTypedef() {
     parseCompilationUnit(
       "external typedef F();",
-      diagnostics: [expectedError(ParserErrorCode.externalTypedef, 0, 8)],
+      diagnostics: [expectedError(diag.externalTypedef, 0, 8)],
     );
   }
 
@@ -1238,65 +1131,55 @@
     createParser('(int a, , int b)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 8, 1)]);
   }
 
   void test_extraCommaTrailingNamedParameterGroup() {
     createParser('({int b},)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 8, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 8, 1)]);
   }
 
   void test_extraCommaTrailingPositionalParameterGroup() {
     createParser('([int b],)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 8, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 8, 1)]);
   }
 
   void test_extraTrailingCommaInParameterList() {
     createParser('(a,,)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 3, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 3, 1)]);
   }
 
   void test_factory_issue_36400() {
     parseCompilationUnit(
       'class T { T factory T() { return null; } }',
-      diagnostics: [expectedError(ParserErrorCode.typeBeforeFactory, 10, 1)],
+      diagnostics: [expectedError(diag.typeBeforeFactory, 10, 1)],
     );
   }
 
   void test_factoryTopLevelDeclaration_class() {
     parseCompilationUnit(
       "factory class C {}",
-      diagnostics: [
-        expectedError(ParserErrorCode.factoryTopLevelDeclaration, 0, 7),
-      ],
+      diagnostics: [expectedError(diag.factoryTopLevelDeclaration, 0, 7)],
     );
   }
 
   void test_factoryTopLevelDeclaration_enum() {
     parseCompilationUnit(
       "factory enum E { v }",
-      diagnostics: [
-        expectedError(ParserErrorCode.factoryTopLevelDeclaration, 0, 7),
-      ],
+      diagnostics: [expectedError(diag.factoryTopLevelDeclaration, 0, 7)],
     );
   }
 
   void test_factoryTopLevelDeclaration_typedef() {
     parseCompilationUnit(
       "factory typedef F();",
-      diagnostics: [
-        expectedError(ParserErrorCode.factoryTopLevelDeclaration, 0, 7),
-      ],
+      diagnostics: [expectedError(diag.factoryTopLevelDeclaration, 0, 7)],
     );
   }
 
@@ -1304,18 +1187,14 @@
     createParser('factory C() : x = 3 {}', expectedEndOffset: 12);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionBody, 12, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingFunctionBody, 12, 1)]);
   }
 
   void test_factoryWithoutBody() {
     createParser('factory C();');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionBody, 11, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingFunctionBody, 11, 1)]);
   }
 
   void test_fieldInitializerOutsideConstructor() {
@@ -1331,8 +1210,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 6, 9),
-      expectedError(ParserErrorCode.finalAndCovariant, 6, 9),
+      expectedError(diag.modifierOutOfOrder, 6, 9),
+      expectedError(diag.finalAndCovariant, 6, 9),
     ]);
   }
 
@@ -1340,7 +1219,7 @@
     createParser('final var x = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.finalAndVar, 6, 3)]);
+    listener.assertErrors([expectedError(diag.finalAndVar, 6, 3)]);
   }
 
   void test_finalClassMember_modifierOnly() {
@@ -1348,8 +1227,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 0, 5),
-      expectedError(ParserErrorCode.missingIdentifier, 5, 0),
+      expectedError(diag.expectedToken, 0, 5),
+      expectedError(diag.missingIdentifier, 5, 0),
     ]);
   }
 
@@ -1357,15 +1236,13 @@
     createParser('final C() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.extraneousModifier, 0, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.extraneousModifier, 0, 5)]);
   }
 
   void test_finalEnum() {
     parseCompilationUnit(
       "final enum E {ONE}",
-      diagnostics: [error(ParserErrorCode.finalEnum, 0, 5)],
+      diagnostics: [error(diag.finalEnum, 0, 5)],
     );
   }
 
@@ -1373,9 +1250,7 @@
     createParser('final int m() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.extraneousModifier, 0, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.extraneousModifier, 0, 5)]);
   }
 
   void test_finalTypedef() {
@@ -1384,8 +1259,8 @@
       diagnostics: [
         // Fasta interprets the `final` as a malformed top level final
         // and `typedef` as the start of an typedef declaration.
-        expectedError(ParserErrorCode.expectedToken, 0, 5),
-        expectedError(ParserErrorCode.missingIdentifier, 6, 7),
+        expectedError(diag.expectedToken, 0, 5),
+        expectedError(diag.missingIdentifier, 6, 7),
       ],
     );
   }
@@ -1393,9 +1268,7 @@
   void test_functionTypedField_invalidType_abstract() {
     parseCompilationUnit(
       "Function(abstract) x = null;",
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.builtInIdentifierAsType, 9, 8),
-      ],
+      diagnostics: [expectedError(diag.builtInIdentifierAsType, 9, 8)],
     );
   }
 
@@ -1403,8 +1276,8 @@
     parseCompilationUnit(
       "Function(class) x = null;",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedTypeName, 9, 5),
-        expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 9, 5),
+        expectedError(diag.expectedTypeName, 9, 5),
+        expectedError(diag.expectedIdentifierButGotKeyword, 9, 5),
       ],
     );
   }
@@ -1413,8 +1286,8 @@
     parseCompilationUnit(
       "void f(const x()) {}",
       diagnostics: [
-        expectedError(ParserErrorCode.extraneousModifier, 7, 5),
-        expectedError(ParserErrorCode.functionTypedParameterVar, 7, 5),
+        expectedError(diag.extraneousModifier, 7, 5),
+        expectedError(diag.functionTypedParameterVar, 7, 5),
       ],
     );
   }
@@ -1422,9 +1295,7 @@
   void test_functionTypedParameter_final() {
     parseCompilationUnit(
       "void f(final x()) {}",
-      diagnostics: [
-        expectedError(ParserErrorCode.functionTypedParameterVar, 7, 5),
-      ],
+      diagnostics: [expectedError(diag.functionTypedParameterVar, 7, 5)],
     );
   }
 
@@ -1432,9 +1303,9 @@
     parseCompilationUnit(
       "void f(int Function(",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 20, 1),
-        expectedError(ParserErrorCode.expectedToken, 20, 1),
-        expectedError(ParserErrorCode.missingFunctionBody, 20, 0),
+        expectedError(diag.expectedToken, 20, 1),
+        expectedError(diag.expectedToken, 20, 1),
+        expectedError(diag.missingFunctionBody, 20, 0),
       ],
     );
   }
@@ -1442,9 +1313,7 @@
   void test_functionTypedParameter_var() {
     parseCompilationUnit(
       "void f(var x()) {}",
-      diagnostics: [
-        expectedError(ParserErrorCode.functionTypedParameterVar, 7, 3),
-      ],
+      diagnostics: [expectedError(diag.functionTypedParameterVar, 7, 3)],
     );
   }
 
@@ -1477,8 +1346,8 @@
     CompilationUnit unit = parser.parseCompilationUnit2();
     expectNotNullIfNoErrors(unit);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedTypeName, 30, 1),
-      expectedError(ParserErrorCode.expectedToken, 30, 1),
+      expectedError(diag.expectedTypeName, 30, 1),
+      expectedError(diag.expectedToken, 30, 1),
     ]);
   }
 
@@ -1490,26 +1359,26 @@
     // Fasta considers `get` to be an identifier in this situation.
     // TODO(danrubel): Investigate better recovery.
     var statement = result as ExpressionStatement;
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 0, 3)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 0, 3)]);
     expect(statement.expression.toSource(), 'get');
   }
 
   void test_getterInFunction_block_returnType() {
     // Fasta considers `get` to be an identifier in this situation.
     parseStatement("int get x { return _x; }", expectedEndOffset: 8);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 4, 3)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 4, 3)]);
   }
 
   void test_getterInFunction_expression_noReturnType() {
     // Fasta considers `get` to be an identifier in this situation.
     parseStatement("get x => _x;", expectedEndOffset: 4);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 0, 3)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 0, 3)]);
   }
 
   void test_getterInFunction_expression_returnType() {
     // Fasta considers `get` to be an identifier in this situation.
     parseStatement("int get x => _x;", expectedEndOffset: 8);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 4, 3)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 4, 3)]);
   }
 
   void test_getterNativeWithBody() {
@@ -1517,11 +1386,11 @@
     parser.parseClassMember('C') as MethodDeclaration;
     if (!allowNativeClause) {
       assertErrorsWithCodes([
-        ParserErrorCode.nativeClauseShouldBeAnnotation,
-        ParserErrorCode.externalMethodWithBody,
+        diag.nativeClauseShouldBeAnnotation,
+        diag.externalMethodWithBody,
       ]);
     } else {
-      assertErrorsWithCodes([ParserErrorCode.externalMethodWithBody]);
+      assertErrorsWithCodes([diag.externalMethodWithBody]);
     }
   }
 
@@ -1530,7 +1399,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.getterWithParameters]);
+    listener.assertErrorsWithCodes([diag.getterWithParameters]);
     //    listener.assertErrors(
     //        [expectedError(ParserErrorCode.GETTER_WITH_PARAMETERS, 9, 2)]);
   }
@@ -1538,76 +1407,66 @@
   void test_illegalAssignmentToNonAssignable_assign_int() {
     parseStatement("0 = 1;");
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignableSelector, 0, 1),
-      expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 0, 1),
+      expectedError(diag.missingAssignableSelector, 0, 1),
+      expectedError(diag.illegalAssignmentToNonAssignable, 0, 1),
     ]);
   }
 
   void test_illegalAssignmentToNonAssignable_assign_this() {
     parseStatement("this = 1;");
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignableSelector, 0, 4),
-      expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 0, 4),
+      expectedError(diag.missingAssignableSelector, 0, 4),
+      expectedError(diag.illegalAssignmentToNonAssignable, 0, 4),
     ]);
   }
 
   void test_illegalAssignmentToNonAssignable_postfix_minusMinus_literal() {
     parseExpression(
       "0--",
-      diagnostics: [
-        expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 1, 2),
-      ],
+      diagnostics: [expectedError(diag.illegalAssignmentToNonAssignable, 1, 2)],
     );
   }
 
   void test_illegalAssignmentToNonAssignable_postfix_plusPlus_literal() {
     parseExpression(
       "0++",
-      diagnostics: [
-        expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 1, 2),
-      ],
+      diagnostics: [expectedError(diag.illegalAssignmentToNonAssignable, 1, 2)],
     );
   }
 
   void test_illegalAssignmentToNonAssignable_postfix_plusPlus_parenthesized() {
     parseExpression(
       "(x)++",
-      diagnostics: [
-        expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 3, 2),
-      ],
+      diagnostics: [expectedError(diag.illegalAssignmentToNonAssignable, 3, 2)],
     );
   }
 
   void test_illegalAssignmentToNonAssignable_primarySelectorPostfix() {
     parseExpression(
       "x(y)(z)++",
-      diagnostics: [
-        expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 7, 2),
-      ],
+      diagnostics: [expectedError(diag.illegalAssignmentToNonAssignable, 7, 2)],
     );
   }
 
   void test_illegalAssignmentToNonAssignable_superAssigned() {
     parseStatement("super = x;");
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignableSelector, 0, 5),
-      expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 0, 5),
+      expectedError(diag.missingAssignableSelector, 0, 5),
+      expectedError(diag.illegalAssignmentToNonAssignable, 0, 5),
     ]);
   }
 
   void test_implementsBeforeExtends() {
     parseCompilationUnit(
       "class A implements B extends C {}",
-      diagnostics: [
-        expectedError(ParserErrorCode.implementsBeforeExtends, 21, 7),
-      ],
+      diagnostics: [expectedError(diag.implementsBeforeExtends, 21, 7)],
     );
   }
 
   void test_implementsBeforeWith() {
     parseCompilationUnit(
       "class A extends B implements C with D {}",
-      diagnostics: [expectedError(ParserErrorCode.implementsBeforeWith, 31, 4)],
+      diagnostics: [expectedError(diag.implementsBeforeWith, 31, 4)],
     );
   }
 
@@ -1615,7 +1474,7 @@
     var statement = parseStatement('for (int a = 0 in foo) {}');
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.initializedVariableInForEach, 11, 1),
+      expectedError(diag.initializedVariableInForEach, 11, 1),
     ]);
   }
 
@@ -1623,7 +1482,7 @@
     var statement = parseStatement('for (@Foo var a = 0 in foo) {}');
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.initializedVariableInForEach, 16, 1),
+      expectedError(diag.initializedVariableInForEach, 16, 1),
     ]);
   }
 
@@ -1631,9 +1490,9 @@
     var statement = parseStatement('for (f()) {}');
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 7, 1),
-      expectedError(ParserErrorCode.expectedToken, 7, 1),
-      expectedError(ParserErrorCode.missingIdentifier, 8, 1),
+      expectedError(diag.expectedToken, 7, 1),
+      expectedError(diag.expectedToken, 7, 1),
+      expectedError(diag.missingIdentifier, 8, 1),
     ]);
   }
 
@@ -1641,8 +1500,8 @@
     var statement = parseStatement('for (T f()) {}');
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 7, 1),
-      expectedError(ParserErrorCode.expectedToken, 9, 1),
+      expectedError(diag.expectedToken, 7, 1),
+      expectedError(diag.expectedToken, 9, 1),
     ]);
   }
 
@@ -1650,25 +1509,21 @@
     var statement = parseStatement('for (var a = 0 in foo) {}');
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.initializedVariableInForEach, 11, 1),
+      expectedError(diag.initializedVariableInForEach, 11, 1),
     ]);
   }
 
   void test_invalidAwaitInFor() {
     var statement = parseStatement('await for (; ;) {}');
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidAwaitInFor, 0, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidAwaitInFor, 0, 5)]);
   }
 
   void test_invalidCodePoint() {
     var literal =
         parseExpression(
               "'begin \\u{110000}'",
-              diagnostics: [
-                expectedError(ParserErrorCode.invalidCodePoint, 7, 9),
-              ],
+              diagnostics: [expectedError(diag.invalidCodePoint, 7, 9)],
             )
             as StringLiteral;
     expectNotNullIfNoErrors(literal);
@@ -1680,9 +1535,7 @@
     createParser('');
     var reference = parseCommentReference('new 42', 0) as CommentReference;
     expectNotNullIfNoErrors(reference);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidCommentReference, 0, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidCommentReference, 0, 6)]);
   }
 
   @failingTest
@@ -1690,9 +1543,7 @@
     createParser('');
     var reference = parseCommentReference('new a.b.c.d', 0) as CommentReference;
     expectNotNullIfNoErrors(reference);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidCommentReference, 0, 11),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidCommentReference, 0, 11)]);
   }
 
   @failingTest
@@ -1701,9 +1552,7 @@
     createParser('');
     var reference = parseCommentReference('42', 0) as CommentReference;
     expectNotNullIfNoErrors(reference);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidCommentReference, 0, 2),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidCommentReference, 0, 2)]);
   }
 
   @failingTest
@@ -1711,18 +1560,14 @@
     createParser('');
     var reference = parseCommentReference('a.b.c.d', 0) as CommentReference;
     expectNotNullIfNoErrors(reference);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidCommentReference, 0, 7),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidCommentReference, 0, 7)]);
   }
 
   void test_invalidConstructorName_star() {
     createParser("C.*();");
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 2, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 2, 1)]);
   }
 
   void test_invalidConstructorName_with() {
@@ -1730,7 +1575,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 2, 4),
+      expectedError(diag.expectedIdentifierButGotKeyword, 2, 4),
     ]);
   }
 
@@ -1739,8 +1584,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      error(ParserErrorCode.missingAssignableSelector, 6, 5),
-      error(ParserErrorCode.invalidInitializer, 6, 10),
+      error(diag.missingAssignableSelector, 6, 5),
+      error(diag.invalidInitializer, 6, 10),
     ]);
   }
 
@@ -1749,11 +1594,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(
-        ParserErrorCode.fieldInitializedOutsideDeclaringClass,
-        12,
-        1,
-      ),
+      expectedError(diag.fieldInitializedOutsideDeclaringClass, 12, 1),
     ]);
   }
 
@@ -1761,9 +1602,7 @@
     var literal =
         parseExpression(
               "'not \\x0 a'",
-              diagnostics: [
-                expectedError(ParserErrorCode.invalidHexEscape, 5, 3),
-              ],
+              diagnostics: [expectedError(diag.invalidHexEscape, 5, 3)],
             )
             as StringLiteral;
     expectNotNullIfNoErrors(literal);
@@ -1773,9 +1612,7 @@
     var literal =
         parseExpression(
               "'\\x0'",
-              diagnostics: [
-                expectedError(ParserErrorCode.invalidHexEscape, 1, 3),
-              ],
+              diagnostics: [expectedError(diag.invalidHexEscape, 1, 3)],
             )
             as StringLiteral;
     expectNotNullIfNoErrors(literal);
@@ -1784,9 +1621,7 @@
   void test_invalidInlineFunctionType() {
     parseCompilationUnit(
       'typedef F = int Function(int a());',
-      diagnostics: [
-        expectedError(CompileTimeErrorCode.invalidInlineFunctionType, 30, 1),
-      ],
+      diagnostics: [expectedError(diag.invalidInlineFunctionType, 30, 1)],
     );
   }
 
@@ -1794,11 +1629,11 @@
     parseCompilationUnit(
       r"main () { print('${x' '); }",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 23, 1),
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 26, 1),
-        expectedError(ParserErrorCode.expectedToken, 20, 3),
-        expectedError(ParserErrorCode.expectedStringLiteral, 23, 1),
-        expectedError(ParserErrorCode.expectedExecutable, 27, 0),
+        expectedError(diag.expectedToken, 23, 1),
+        expectedError(diag.unterminatedStringLiteral, 26, 1),
+        expectedError(diag.expectedToken, 20, 3),
+        expectedError(diag.expectedStringLiteral, 23, 1),
+        expectedError(diag.expectedExecutable, 27, 0),
       ],
     );
   }
@@ -1807,9 +1642,7 @@
     var literal =
         parseExpression(
               "'\$1'",
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 2, 1),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 2, 1)],
             )
             as StringLiteral;
     expectNotNullIfNoErrors(literal);
@@ -1820,14 +1653,14 @@
     Configuration configuration = parser.parseConfiguration();
     expectNotNullIfNoErrors(configuration);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidLiteralInConfiguration, 12, 2),
+      expectedError(diag.invalidLiteralInConfiguration, 12, 2),
     ]);
   }
 
   void test_invalidOperator() {
     CompilationUnit unit = parseCompilationUnit(
       'class C { void operator ===(x) { } }',
-      diagnostics: [expectedError(ScannerErrorCode.unsupportedOperator, 24, 1)],
+      diagnostics: [expectedError(diag.unsupportedOperator, 24, 1)],
     );
     expect(unit, isNotNull);
   }
@@ -1837,8 +1670,8 @@
     CompilationUnit unit = parser.parseCompilationUnit2();
     expectNotNullIfNoErrors(unit);
     listener.assertErrors([
-      expectedError(ParserErrorCode.unexpectedToken, 23, 5),
-      expectedError(ParserErrorCode.missingMethodParameters, 28, 1),
+      expectedError(diag.unexpectedToken, 23, 5),
+      expectedError(diag.missingMethodParameters, 28, 1),
     ]);
   }
 
@@ -1846,11 +1679,7 @@
     Expression expression = parseAssignableExpression('super?.v', false);
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(
-        ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
-        5,
-        2,
-      ),
+      expectedError(diag.invalidOperatorQuestionmarkPeriodForSuper, 5, 2),
     ]);
   }
 
@@ -1858,11 +1687,7 @@
     parseCompilationUnit(
       'class C { C() : super?.namedConstructor(); }',
       diagnostics: [
-        expectedError(
-          ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
-          21,
-          2,
-        ),
+        expectedError(diag.invalidOperatorQuestionmarkPeriodForSuper, 21, 2),
       ],
     );
   }
@@ -1871,11 +1696,7 @@
     Expression expression = parseExpression(
       'super?.v',
       diagnostics: [
-        expectedError(
-          ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
-          5,
-          2,
-        ),
+        expectedError(diag.invalidOperatorQuestionmarkPeriodForSuper, 5, 2),
       ],
     );
     expectNotNullIfNoErrors(expression);
@@ -1886,14 +1707,14 @@
     Expression expression = parser.parseUnaryExpression();
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignableSelector, 2, 5),
+      expectedError(diag.missingAssignableSelector, 2, 5),
     ]);
   }
 
   void test_invalidPropertyAccess_this() {
     parseExpression(
       'x.this',
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 2, 4)],
+      diagnostics: [expectedError(diag.missingIdentifier, 2, 4)],
     );
   }
 
@@ -1901,27 +1722,23 @@
     createParser('foo() async* => 0;');
     CompilationUnit unit = parser.parseCompilationUnit2();
     expectNotNullIfNoErrors(unit);
-    listener.assertErrors([
-      expectedError(CompileTimeErrorCode.returnInGenerator, 13, 2),
-    ]);
+    listener.assertErrors([expectedError(diag.returnInGenerator, 13, 2)]);
   }
 
   void test_invalidSync() {
     createParser('foo() sync* => 0;');
     CompilationUnit unit = parser.parseCompilationUnit2();
     expectNotNullIfNoErrors(unit);
-    listener.assertErrors([
-      expectedError(CompileTimeErrorCode.returnInGenerator, 12, 2),
-    ]);
+    listener.assertErrors([expectedError(diag.returnInGenerator, 12, 2)]);
   }
 
   void test_invalidTopLevelSetter() {
     parseCompilationUnit(
       "var set foo; main(){}",
       diagnostics: [
-        expectedError(ParserErrorCode.varReturnType, 0, 3),
-        expectedError(ParserErrorCode.missingFunctionParameters, 8, 3),
-        expectedError(ParserErrorCode.missingFunctionBody, 11, 1),
+        expectedError(diag.varReturnType, 0, 3),
+        expectedError(diag.missingFunctionParameters, 8, 3),
+        expectedError(diag.missingFunctionBody, 11, 1),
       ],
     );
   }
@@ -1930,8 +1747,8 @@
     parseCompilationUnit(
       "var Function(var arg);",
       diagnostics: [
-        expectedError(ParserErrorCode.varReturnType, 0, 3),
-        expectedError(ParserErrorCode.missingFunctionBody, 21, 1),
+        expectedError(diag.varReturnType, 0, 3),
+        expectedError(diag.missingFunctionBody, 21, 1),
       ],
     );
   }
@@ -1940,11 +1757,11 @@
     parseCompilationUnit(
       "typedef var Function(var arg);",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 0, 7),
-        expectedError(ParserErrorCode.missingIdentifier, 8, 3),
-        expectedError(ParserErrorCode.missingTypedefParameters, 8, 3),
-        expectedError(ParserErrorCode.varReturnType, 8, 3),
-        expectedError(ParserErrorCode.missingFunctionBody, 29, 1),
+        expectedError(diag.expectedToken, 0, 7),
+        expectedError(diag.missingIdentifier, 8, 3),
+        expectedError(diag.missingTypedefParameters, 8, 3),
+        expectedError(diag.varReturnType, 8, 3),
+        expectedError(diag.missingFunctionBody, 29, 1),
       ],
     );
   }
@@ -1954,8 +1771,8 @@
     parseCompilationUnit(
       "typedef T = typedef F = Map<String, dynamic> Function();",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 10, 1),
-        expectedError(ParserErrorCode.expectedTypeName, 12, 7),
+        expectedError(diag.expectedToken, 10, 1),
+        expectedError(diag.expectedTypeName, 12, 7),
       ],
     );
   }
@@ -1964,7 +1781,7 @@
     Expression expression = parseStringLiteral("'\\u{'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUBracket, 1, 3),
+      expectedError(diag.invalidUnicodeEscapeUBracket, 1, 3),
     ]);
   }
 
@@ -1972,7 +1789,7 @@
     Expression expression = parseStringLiteral("'\\u'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUStarted, 1, 2),
+      expectedError(diag.invalidUnicodeEscapeUStarted, 1, 2),
     ]);
   }
 
@@ -1980,7 +1797,7 @@
     Expression expression = parseStringLiteral("'\\u{0A'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUBracket, 1, 5),
+      expectedError(diag.invalidUnicodeEscapeUBracket, 1, 5),
     ]);
   }
 
@@ -1988,23 +1805,21 @@
     Expression expression = parseStringLiteral("'\\u0 and some more'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUNoBracket, 1, 3),
+      expectedError(diag.invalidUnicodeEscapeUNoBracket, 1, 3),
     ]);
   }
 
   void test_invalidUnicodeEscape_too_high_number_variable() {
     Expression expression = parseStringLiteral("'\\u{110000}'");
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidCodePoint, 1, 9),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidCodePoint, 1, 9)]);
   }
 
   void test_invalidUnicodeEscape_tooFewDigits_fixed() {
     Expression expression = parseStringLiteral("'\\u04'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUNoBracket, 1, 4),
+      expectedError(diag.invalidUnicodeEscapeUNoBracket, 1, 4),
     ]);
   }
 
@@ -2012,7 +1827,7 @@
     Expression expression = parseStringLiteral("'\\u{}'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUBracket, 1, 4),
+      expectedError(diag.invalidUnicodeEscapeUBracket, 1, 4),
     ]);
   }
 
@@ -2020,25 +1835,21 @@
     Expression expression = parseStringLiteral("'\\u{0000000001}'");
     expectNotNullIfNoErrors(expression);
     listener.assertErrors([
-      expectedError(ParserErrorCode.invalidUnicodeEscapeUBracket, 1, 9),
+      expectedError(diag.invalidUnicodeEscapeUBracket, 1, 9),
     ]);
   }
 
   void test_libraryDirectiveNotFirst() {
     parseCompilationUnit(
       "import 'x.dart'; library l;",
-      diagnostics: [
-        expectedError(ParserErrorCode.libraryDirectiveNotFirst, 17, 7),
-      ],
+      diagnostics: [expectedError(diag.libraryDirectiveNotFirst, 17, 7)],
     );
   }
 
   void test_libraryDirectiveNotFirst_afterPart() {
     CompilationUnit unit = parseCompilationUnit(
       "part 'a.dart';\nlibrary l;",
-      diagnostics: [
-        expectedError(ParserErrorCode.libraryDirectiveNotFirst, 15, 7),
-      ],
+      diagnostics: [expectedError(diag.libraryDirectiveNotFirst, 15, 7)],
     );
     expect(unit, isNotNull);
   }
@@ -2049,8 +1860,9 @@
     );
     expect(unit.declarations, hasLength(1));
     var declaration = unit.declarations[0] as ClassDeclaration;
-    expect(declaration.members, hasLength(1));
-    var member = declaration.members[0] as MethodDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.members, hasLength(1));
+    var member = classBody.members[0] as MethodDeclaration;
     var body = member.body as BlockFunctionBody;
     expect(body.block.statements, hasLength(1));
     var statement = body.block.statements[0] as FunctionDeclarationStatement;
@@ -2062,28 +1874,28 @@
   void test_localFunctionDeclarationModifier_abstract() {
     parseCompilationUnit(
       "class C { m() { abstract f() {} } }",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 16, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 16, 8)],
     );
   }
 
   void test_localFunctionDeclarationModifier_external() {
     parseCompilationUnit(
       "class C { m() { external f() {} } }",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 16, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 16, 8)],
     );
   }
 
   void test_localFunctionDeclarationModifier_factory() {
     parseCompilationUnit(
       "class C { m() { factory f() {} } }",
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 16, 7)],
+      diagnostics: [expectedError(diag.expectedToken, 16, 7)],
     );
   }
 
   void test_localFunctionDeclarationModifier_static() {
     parseCompilationUnit(
       "class C { m() { static f() {} } }",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 16, 6)],
+      diagnostics: [expectedError(diag.extraneousModifier, 16, 6)],
     );
   }
 
@@ -2094,7 +1906,7 @@
     createParser('f<E>(E extends num p);');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 7)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 7)]);
     expect(member, isMethodDeclaration);
     var method = member as MethodDeclaration;
     expect(
@@ -2108,9 +1920,7 @@
     createParser('void m<E, hello!>() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 10, 5),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 10, 5)]);
     expect(member, isMethodDeclaration);
     var method = member as MethodDeclaration;
     expect(
@@ -2143,18 +1953,14 @@
   void test_missingAssignableSelector_prefix_minusMinus_literal() {
     parseExpression(
       "--0",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 2, 1),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 2, 1)],
     );
   }
 
   void test_missingAssignableSelector_prefix_plusPlus_literal() {
     parseExpression(
       "++0",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 2, 1),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 2, 1)],
     );
   }
 
@@ -2165,7 +1971,7 @@
   void test_missingAssignableSelector_superAsExpressionFunctionBody() {
     CompilationUnit unit = parseCompilationUnit(
       'main() => super;',
-      diagnostics: [error(ParserErrorCode.missingAssignableSelector, 10, 5)],
+      diagnostics: [error(diag.missingAssignableSelector, 10, 5)],
     );
     var declaration = unit.declarations.first as FunctionDeclaration;
     var body = declaration.functionExpression.body as ExpressionFunctionBody;
@@ -2178,9 +1984,7 @@
   void test_missingAssignableSelector_superPrimaryExpression() {
     CompilationUnit unit = parseCompilationUnit(
       'main() {super;}',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 8, 5),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 8, 5)],
     );
     var declaration = unit.declarations.first as FunctionDeclaration;
     var blockBody = declaration.functionExpression.body as BlockFunctionBody;
@@ -2198,9 +2002,7 @@
   void test_missingCatchOrFinally() {
     var statement = parseStatement('try {}') as TryStatement;
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingCatchOrFinally, 0, 3),
-    ]);
+    listener.assertErrors([expectedError(diag.missingCatchOrFinally, 0, 3)]);
     expect(statement, isNotNull);
   }
 
@@ -2211,26 +2013,20 @@
     );
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 14, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 14, 1)]);
   }
 
   void test_missingConstFinalVarOrType_static() {
     parseCompilationUnit(
       "class A { static f; }",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 17, 1),
-      ],
+      diagnostics: [expectedError(diag.missingConstFinalVarOrType, 17, 1)],
     );
   }
 
   void test_missingConstFinalVarOrType_topLevel() {
     parseCompilationUnit(
       'a;',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 0, 1),
-      ],
+      diagnostics: [expectedError(diag.missingConstFinalVarOrType, 0, 1)],
     );
   }
 
@@ -2238,18 +2034,14 @@
     createParser('enum E;', expectedEndOffset: 6);
     var declaration = parseFullCompilationUnitMember() as EnumDeclaration;
     expectNotNullIfNoErrors(declaration);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingEnumBody, 6, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingEnumBody, 6, 1)]);
   }
 
   void test_missingEnumComma() {
     createParser('enum E {one two}');
     var declaration = parseFullCompilationUnitMember() as EnumDeclaration;
     expectNotNullIfNoErrors(declaration);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 12, 3),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 12, 3)]);
   }
 
   void test_missingExpressionInThrow() {
@@ -2257,35 +2049,29 @@
         (parseStatement('throw;') as ExpressionStatement).expression
             as ThrowExpression;
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingExpressionInThrow, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingExpressionInThrow, 5, 1)]);
   }
 
   void test_missingFunctionBody_emptyNotAllowed() {
     createParser(';');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionBody, 0, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingFunctionBody, 0, 1)]);
   }
 
   void test_missingFunctionBody_invalid() {
     createParser('return 0;');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionBody, 0, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.missingFunctionBody, 0, 6)]);
   }
 
   void test_missingFunctionParameters_local_nonVoid_block() {
@@ -2293,7 +2079,7 @@
     // to parse it as an expression statement. It isn't clear what the best
     // error message is in this case.
     parseStatement("int f { return x;}", expectedEndOffset: 6);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 4, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 4, 1)]);
   }
 
   void test_missingFunctionParameters_local_nonVoid_expression() {
@@ -2302,46 +2088,40 @@
     // error message is in this case.
     parseStatement("int f => x;");
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionParameters, 6, 2),
+      expectedError(diag.missingFunctionParameters, 6, 2),
     ]);
   }
 
   void test_missingFunctionParameters_local_void_block() {
     parseStatement("void f { return x;}", expectedEndOffset: 7);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 5, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 5, 1)]);
   }
 
   void test_missingFunctionParameters_local_void_expression() {
     parseStatement("void f => x;");
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionParameters, 7, 2),
+      expectedError(diag.missingFunctionParameters, 7, 2),
     ]);
   }
 
   void test_missingFunctionParameters_topLevel_nonVoid_block() {
     parseCompilationUnit(
       "int f { return x;}",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingFunctionParameters, 4, 1),
-      ],
+      diagnostics: [expectedError(diag.missingFunctionParameters, 4, 1)],
     );
   }
 
   void test_missingFunctionParameters_topLevel_nonVoid_expression() {
     parseCompilationUnit(
       "int f => x;",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingFunctionParameters, 4, 1),
-      ],
+      diagnostics: [expectedError(diag.missingFunctionParameters, 4, 1)],
     );
   }
 
   void test_missingFunctionParameters_topLevel_void_block() {
     CompilationUnit unit = parseCompilationUnit(
       "void f { return x;}",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingFunctionParameters, 5, 1),
-      ],
+      diagnostics: [expectedError(diag.missingFunctionParameters, 5, 1)],
     );
     var funct = unit.declarations[0] as FunctionDeclaration;
     expect(funct.functionExpression.parameters, hasLength(0));
@@ -2350,9 +2130,7 @@
   void test_missingFunctionParameters_topLevel_void_expression() {
     CompilationUnit unit = parseCompilationUnit(
       "void f => x;",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingFunctionParameters, 5, 1),
-      ],
+      diagnostics: [expectedError(diag.missingFunctionParameters, 5, 1)],
     );
     var funct = unit.declarations[0] as FunctionDeclaration;
     expect(funct.functionExpression.parameters, hasLength(0));
@@ -2362,9 +2140,7 @@
     createParser('1 *');
     var expression = parser.parseMultiplicativeExpression() as BinaryExpression;
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 3, 0),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 3, 0)]);
   }
 
   void test_missingIdentifier_beforeClosingCurly() {
@@ -2372,8 +2148,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingConstFinalVarOrType, 0, 3),
-      expectedError(ParserErrorCode.expectedToken, 0, 3),
+      expectedError(diag.missingConstFinalVarOrType, 0, 3),
+      expectedError(diag.expectedToken, 0, 3),
     ]);
   }
 
@@ -2381,97 +2157,75 @@
     createParser('enum E {, TWO}');
     var declaration = parseFullCompilationUnitMember() as EnumDeclaration;
     expectNotNullIfNoErrors(declaration);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 8, 1)]);
   }
 
   void test_missingIdentifier_inParameterGroupNamed() {
     createParser('(a, {})');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 5, 1)]);
   }
 
   void test_missingIdentifier_inParameterGroupOptional() {
     createParser('(a, [])');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 5, 1)]);
   }
 
   void test_missingIdentifier_inSymbol_afterPeriod() {
     SymbolLiteral literal = parseSymbolLiteral('#a.');
     expectNotNullIfNoErrors(literal);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 3, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 3, 1)]);
   }
 
   void test_missingIdentifier_inSymbol_first() {
     SymbolLiteral literal = parseSymbolLiteral('#');
     expectNotNullIfNoErrors(literal);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 1, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 1, 1)]);
   }
 
   void test_missingIdentifierForParameterGroup() {
     createParser('(,)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 1, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 1, 1)]);
   }
 
   void test_missingKeywordOperator() {
     createParser('+(x) {}');
     var method = parser.parseClassMember('C') as MethodDeclaration;
     expectNotNullIfNoErrors(method);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingKeywordOperator, 0, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingKeywordOperator, 0, 1)]);
   }
 
   void test_missingKeywordOperator_parseClassMember() {
     createParser('+() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingKeywordOperator, 0, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingKeywordOperator, 0, 1)]);
   }
 
   void test_missingKeywordOperator_parseClassMember_afterTypeName() {
     createParser('int +() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingKeywordOperator, 4, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingKeywordOperator, 4, 1)]);
   }
 
   void test_missingKeywordOperator_parseClassMember_afterVoid() {
     createParser('void +() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingKeywordOperator, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingKeywordOperator, 5, 1)]);
   }
 
   void test_missingMethodParameters_void_block() {
     createParser('void m {} }', expectedEndOffset: 10);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingMethodParameters, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingMethodParameters, 5, 1)]);
     expect(member, isMethodDeclaration);
     var method = member as MethodDeclaration;
     expect(method.parameters, hasLength(0));
@@ -2481,9 +2235,7 @@
     createParser('void m => null; }', expectedEndOffset: 16);
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingMethodParameters, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingMethodParameters, 5, 1)]);
   }
 
   void test_missingNameForNamedParameter_colon() {
@@ -2493,8 +2245,8 @@
         .parameters[0];
     expectNotNullIfNoErrors(parameter);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 6, 1),
-      expectedError(ParserErrorCode.defaultValueInFunctionType, 6, 1),
+      expectedError(diag.missingIdentifier, 6, 1),
+      expectedError(diag.defaultValueInFunctionType, 6, 1),
     ]);
     expect(parameter.name, isNotNull);
   }
@@ -2506,8 +2258,8 @@
         .parameters[0];
     expectNotNullIfNoErrors(parameter);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 6, 1),
-      expectedError(ParserErrorCode.defaultValueInFunctionType, 6, 1),
+      expectedError(diag.missingIdentifier, 6, 1),
+      expectedError(diag.defaultValueInFunctionType, 6, 1),
     ]);
     expect(parameter.name, isNotNull);
   }
@@ -2518,16 +2270,14 @@
         .parseFormalParameterList(inFunctionType: true)
         .parameters[0];
     expectNotNullIfNoErrors(parameter);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 5, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 5, 1)]);
     expect(parameter.name, isNotNull);
   }
 
   void test_missingNameInPartOfDirective() {
     CompilationUnit unit = parseCompilationUnit(
       "part of;",
-      diagnostics: [expectedError(ParserErrorCode.expectedStringLiteral, 7, 1)],
+      diagnostics: [expectedError(diag.expectedStringLiteral, 7, 1)],
     );
     expect(unit, isNotNull);
   }
@@ -2535,9 +2285,7 @@
   void test_missingPrefixInDeferredImport() {
     parseCompilationUnit(
       "import 'foo.dart' deferred;",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingPrefixInDeferredImport, 18, 8),
-      ],
+      diagnostics: [expectedError(diag.missingPrefixInDeferredImport, 18, 8)],
     );
   }
 
@@ -2545,127 +2293,107 @@
     createParser('sync {}');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingStarAfterSync, 0, 4),
-    ]);
+    listener.assertErrors([expectedError(diag.missingStarAfterSync, 0, 4)]);
   }
 
   void test_missingStatement() {
     parseStatement("is");
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 0, 2),
-      expectedError(ParserErrorCode.missingIdentifier, 0, 2),
-      expectedError(ParserErrorCode.expectedTypeName, 2, 0),
+      expectedError(diag.expectedToken, 0, 2),
+      expectedError(diag.missingIdentifier, 0, 2),
+      expectedError(diag.expectedTypeName, 2, 0),
     ]);
   }
 
   void test_missingStatement_afterVoid() {
     parseStatement("void;");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 4, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 4, 1)]);
   }
 
   void test_missingTerminatorForParameterGroup_named() {
     createParser('(a, {b: 0)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 9, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 9, 1)]);
   }
 
   void test_missingTerminatorForParameterGroup_optional() {
     createParser('(a, [b = 0)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 10, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 10, 1)]);
   }
 
   void test_missingTypedefParameters_nonVoid() {
     parseCompilationUnit(
       "typedef int F;",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingTypedefParameters, 13, 1),
-      ],
+      diagnostics: [expectedError(diag.missingTypedefParameters, 13, 1)],
     );
   }
 
   void test_missingTypedefParameters_typeParameters() {
     parseCompilationUnit(
       "typedef F<E>;",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingTypedefParameters, 12, 1),
-      ],
+      diagnostics: [expectedError(diag.missingTypedefParameters, 12, 1)],
     );
   }
 
   void test_missingTypedefParameters_void() {
     parseCompilationUnit(
       "typedef void F;",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingTypedefParameters, 14, 1),
-      ],
+      diagnostics: [expectedError(diag.missingTypedefParameters, 14, 1)],
     );
   }
 
   void test_missingVariableInForEach() {
     var statement = parseStatement('for (a < b in foo) {}');
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.unexpectedToken, 7, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.unexpectedToken, 7, 1)]);
   }
 
   void test_mixedParameterGroups_namedPositional() {
     createParser('(a, {b}, [c])');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
   }
 
   void test_mixedParameterGroups_positionalNamed() {
     createParser('(a, [b], {c})');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
   }
 
   void test_mixin_application_lacks_with_clause() {
     parseCompilationUnit(
       "class Foo = Bar;",
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 15, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 15, 1)],
     );
   }
 
   void test_multipleExtendsClauses() {
     parseCompilationUnit(
       "class A extends B extends C {}",
-      diagnostics: [
-        expectedError(ParserErrorCode.multipleExtendsClauses, 18, 7),
-      ],
+      diagnostics: [expectedError(diag.multipleExtendsClauses, 18, 7)],
     );
   }
 
   void test_multipleImplementsClauses() {
     parseCompilationUnit(
       "class A implements B implements C {}",
-      diagnostics: [
-        expectedError(ParserErrorCode.multipleImplementsClauses, 21, 10),
-      ],
+      diagnostics: [expectedError(diag.multipleImplementsClauses, 21, 10)],
     );
   }
 
   void test_multipleLibraryDirectives() {
     parseCompilationUnit(
       "library l; library m;",
-      diagnostics: [
-        expectedError(ParserErrorCode.multipleLibraryDirectives, 11, 7),
-      ],
+      diagnostics: [expectedError(diag.multipleLibraryDirectives, 11, 7)],
     );
   }
 
@@ -2673,15 +2401,13 @@
     createParser('(a, {b}, {c})');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
   }
 
   void test_multiplePartOfDirectives() {
     parseCompilationUnit(
       "part of l; part of m;",
-      diagnostics: [
-        expectedError(ParserErrorCode.multiplePartOfDirectives, 11, 4),
-      ],
+      diagnostics: [expectedError(diag.multiplePartOfDirectives, 11, 4)],
     );
   }
 
@@ -2689,21 +2415,19 @@
     createParser('(a, [b], [c])');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
   }
 
   void test_multipleVariablesInForEach() {
     var statement = parseStatement('for (int a, b in foo) {}');
     expectNotNullIfNoErrors(statement);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.unexpectedToken, 10, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.unexpectedToken, 10, 1)]);
   }
 
   void test_multipleWithClauses() {
     parseCompilationUnit(
       "class A extends B with C with D {}",
-      diagnostics: [expectedError(ParserErrorCode.multipleWithClauses, 25, 4)],
+      diagnostics: [expectedError(diag.multipleWithClauses, 25, 4)],
     );
   }
 
@@ -2711,9 +2435,7 @@
     Expression expression;
     createParser('f() {}');
     expression = parser.parsePrimaryExpression();
-    listener.assertErrors([
-      expectedError(ParserErrorCode.namedFunctionExpression, 0, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.namedFunctionExpression, 0, 1)]);
     expect(expression, isFunctionExpression);
   }
 
@@ -2722,7 +2444,7 @@
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
     listener.assertErrors([
-      expectedError(ParserErrorCode.namedParameterOutsideGroup, 6, 1),
+      expectedError(diag.namedParameterOutsideGroup, 6, 1),
     ]);
     expect(list.parameters[0].isRequired, isTrue);
     expect(list.parameters[1].isNamed, isTrue);
@@ -2733,8 +2455,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionParameters, 12, 1),
-      expectedError(ParserErrorCode.missingFunctionBody, 12, 1),
+      expectedError(diag.missingFunctionParameters, 12, 1),
+      expectedError(diag.missingFunctionBody, 12, 1),
     ]);
   }
 
@@ -2743,15 +2465,15 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionParameters, 12, 1),
-      expectedError(ParserErrorCode.missingFunctionBody, 12, 1),
+      expectedError(diag.missingFunctionParameters, 12, 1),
+      expectedError(diag.missingFunctionBody, 12, 1),
     ]);
   }
 
   void test_nonIdentifierLibraryName_library() {
     CompilationUnit unit = parseCompilationUnit(
       "library 'lib';",
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 8, 5)],
+      diagnostics: [expectedError(diag.missingIdentifier, 8, 5)],
     );
     expect(unit, isNotNull);
   }
@@ -2760,10 +2482,10 @@
     CompilationUnit unit = parseCompilationUnit(
       "part of 3;",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 5, 2),
-        expectedError(ParserErrorCode.expectedStringLiteral, 8, 1),
-        expectedError(ParserErrorCode.expectedExecutable, 8, 1),
-        expectedError(ParserErrorCode.unexpectedToken, 9, 1),
+        expectedError(diag.expectedToken, 5, 2),
+        expectedError(diag.expectedStringLiteral, 8, 1),
+        expectedError(diag.expectedExecutable, 8, 1),
+        expectedError(diag.unexpectedToken, 9, 1),
       ],
     );
     expect(unit, isNotNull);
@@ -2773,22 +2495,20 @@
     createParser('operator +=(int x) => x + 1;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.invalidOperator, 9, 2),
-    ]);
+    listener.assertErrors([expectedError(diag.invalidOperator, 9, 2)]);
   }
 
   void test_optionalAfterNormalParameters_named() {
     parseCompilationUnit(
       "f({a}, b) {}",
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 5, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 5, 1)],
     );
   }
 
   void test_optionalAfterNormalParameters_positional() {
     parseCompilationUnit(
       "f([a], b) {}",
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 5, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 5, 1)],
     );
   }
 
@@ -2798,7 +2518,7 @@
     listener.assertErrors([
       // Cascade section is preceded by `null` in this test
       // and error is reported on '('.
-      expectedError(ParserErrorCode.missingIdentifier, 6, 1),
+      expectedError(diag.missingIdentifier, 6, 1),
     ]);
     expect(methodInvocation.target, isNull);
     expect(methodInvocation.methodName.name, "");
@@ -2812,7 +2532,7 @@
     listener.assertErrors([
       // Cascade section is preceded by `null` in this test
       // and error is reported on '<'.
-      expectedError(ParserErrorCode.missingIdentifier, 6, 1),
+      expectedError(diag.missingIdentifier, 6, 1),
     ]);
     expect(methodInvocation.target, isNull);
     expect(methodInvocation.methodName.name, "");
@@ -2824,9 +2544,9 @@
     parseCompilationUnit(
       'class C { C. }',
       diagnostics: [
-        expectedError(ParserErrorCode.missingIdentifier, 13, 1),
-        expectedError(ParserErrorCode.missingMethodParameters, 10, 1),
-        expectedError(ParserErrorCode.missingFunctionBody, 13, 1),
+        expectedError(diag.missingIdentifier, 13, 1),
+        expectedError(diag.missingMethodParameters, 10, 1),
+        expectedError(diag.missingFunctionBody, 13, 1),
       ],
     );
   }
@@ -2836,7 +2556,7 @@
     ArgumentList list = parser.parseArgumentList();
     expectNotNullIfNoErrors(list);
     listener.assertErrors([
-      expectedError(ParserErrorCode.positionalAfterNamedArgument, 7, 1),
+      expectedError(diag.positionalAfterNamedArgument, 7, 1),
     ]);
   }
 
@@ -2845,7 +2565,7 @@
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
     listener.assertErrors([
-      expectedError(ParserErrorCode.namedParameterOutsideGroup, 6, 1),
+      expectedError(diag.namedParameterOutsideGroup, 6, 1),
     ]);
     expect(list.parameters[0].isRequired, isTrue);
     expect(list.parameters[1].isNamed, isTrue);
@@ -2856,7 +2576,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.redirectingConstructorWithBody, 15, 1),
+      expectedError(diag.redirectingConstructorWithBody, 15, 1),
     ]);
   }
 
@@ -2865,7 +2585,7 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.redirectingConstructorWithBody, 15, 1),
+      expectedError(diag.redirectingConstructorWithBody, 15, 1),
     ]);
   }
 
@@ -2874,31 +2594,25 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.redirectionInNonFactoryConstructor, 4, 1),
+      expectedError(diag.redirectionInNonFactoryConstructor, 4, 1),
     ]);
   }
 
   void test_setterInFunction_block() {
     parseStatement("set x(v) {_x = v;}");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.unexpectedToken, 0, 3),
-    ]);
+    listener.assertErrors([expectedError(diag.unexpectedToken, 0, 3)]);
   }
 
   void test_setterInFunction_expression() {
     parseStatement("set x(v) => _x = v;");
-    listener.assertErrors([
-      expectedError(ParserErrorCode.unexpectedToken, 0, 3),
-    ]);
+    listener.assertErrors([expectedError(diag.unexpectedToken, 0, 3)]);
   }
 
   void test_staticAfterConst() {
     createParser('final static int f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 6, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.modifierOutOfOrder, 6, 6)]);
   }
 
   void test_staticAfterFinal() {
@@ -2906,8 +2620,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 6, 6),
-      expectedError(CompileTimeErrorCode.constNotInitialized, 17, 1),
+      expectedError(diag.modifierOutOfOrder, 6, 6),
+      expectedError(diag.constNotInitialized, 17, 1),
     ]);
   }
 
@@ -2915,45 +2629,35 @@
     createParser('var static f;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.modifierOutOfOrder, 4, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.modifierOutOfOrder, 4, 6)]);
   }
 
   void test_staticConstructor() {
     createParser('static C.m() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.staticConstructor, 0, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.staticConstructor, 0, 6)]);
   }
 
   void test_staticGetterWithoutBody() {
     createParser('static get m;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionBody, 12, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingFunctionBody, 12, 1)]);
   }
 
   void test_staticOperator_noReturnType() {
     createParser('static operator +(int x) => x + 1;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.staticOperator, 0, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.staticOperator, 0, 6)]);
   }
 
   void test_staticOperator_returnType() {
     createParser('static int operator +(int x) => x + 1;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.staticOperator, 0, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.staticOperator, 0, 6)]);
   }
 
   void test_staticOperatorNamedMethod() {
@@ -2965,43 +2669,41 @@
     createParser('static set m(x);');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingFunctionBody, 15, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingFunctionBody, 15, 1)]);
   }
 
   void test_staticTopLevelDeclaration_class() {
     parseCompilationUnit(
       "static class C {}",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 6)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 6)],
     );
   }
 
   void test_staticTopLevelDeclaration_enum() {
     parseCompilationUnit(
       "static enum E { v }",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 6)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 6)],
     );
   }
 
   void test_staticTopLevelDeclaration_function() {
     parseCompilationUnit(
       "static f() {}",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 6)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 6)],
     );
   }
 
   void test_staticTopLevelDeclaration_typedef() {
     parseCompilationUnit(
       "static typedef F();",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 6)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 6)],
     );
   }
 
   void test_staticTopLevelDeclaration_variable() {
     parseCompilationUnit(
       "static var x;",
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 6)],
+      diagnostics: [expectedError(diag.extraneousModifier, 0, 6)],
     );
   }
 
@@ -3013,13 +2715,13 @@
  '${${
 ''',
       codes: [
-        ScannerErrorCode.unterminatedStringLiteral,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
+        diag.unterminatedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
       ],
     );
   }
@@ -3028,18 +2730,14 @@
     var statement =
         parseStatement('switch (a) {case 1 return 0;}') as SwitchStatement;
     expect(statement, isNotNull);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 19, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 19, 6)]);
   }
 
   void test_switchDefault_missingColon() {
     var statement =
         parseStatement('switch (a) {default return 0;}') as SwitchStatement;
     expect(statement, isNotNull);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 20, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 20, 6)]);
   }
 
   void test_switchHasCaseAfterDefaultCase() {
@@ -3048,7 +2746,7 @@
             as SwitchStatement;
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.switchHasCaseAfterDefaultCase, 31, 4),
+      expectedError(diag.switchHasCaseAfterDefaultCase, 31, 4),
     ]);
   }
 
@@ -3060,8 +2758,8 @@
             as SwitchStatement;
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.switchHasCaseAfterDefaultCase, 31, 4),
-      expectedError(ParserErrorCode.switchHasCaseAfterDefaultCase, 49, 4),
+      expectedError(diag.switchHasCaseAfterDefaultCase, 31, 4),
+      expectedError(diag.switchHasCaseAfterDefaultCase, 49, 4),
     ]);
   }
 
@@ -3071,7 +2769,7 @@
             as SwitchStatement;
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.switchHasMultipleDefaultCases, 31, 7),
+      expectedError(diag.switchHasMultipleDefaultCases, 31, 7),
     ]);
   }
 
@@ -3083,8 +2781,8 @@
             as SwitchStatement;
     expectNotNullIfNoErrors(statement);
     listener.assertErrors([
-      expectedError(ParserErrorCode.switchHasMultipleDefaultCases, 31, 7),
-      expectedError(ParserErrorCode.switchHasMultipleDefaultCases, 50, 7),
+      expectedError(diag.switchHasMultipleDefaultCases, 31, 7),
+      expectedError(diag.switchHasMultipleDefaultCases, 50, 7),
     ]);
   }
 
@@ -3094,7 +2792,7 @@
             as SwitchStatement;
     expect(statement, isNotNull);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedSwitchStatementBody, 9, 1),
+      expectedError(diag.expectedSwitchStatementBody, 9, 1),
     ]);
   }
 
@@ -3111,16 +2809,14 @@
   void test_topLevelFactory_withFunction() {
     parseCompilationUnit(
       'factory Function() x = null;',
-      diagnostics: [
-        expectedError(ParserErrorCode.factoryTopLevelDeclaration, 0, 7),
-      ],
+      diagnostics: [expectedError(diag.factoryTopLevelDeclaration, 0, 7)],
     );
   }
 
   void test_topLevelOperator_withFunction() {
     parseCompilationUnit(
       'operator Function() x = null;',
-      diagnostics: [expectedError(ParserErrorCode.topLevelOperator, 0, 8)],
+      diagnostics: [expectedError(diag.topLevelOperator, 0, 8)],
     );
   }
 
@@ -3128,29 +2824,27 @@
     createParser('+(bool x, bool y) => x | y;');
     CompilationUnitMember member = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.topLevelOperator, 0, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.topLevelOperator, 0, 1)]);
   }
 
   void test_topLevelOperator_withoutType() {
     parseCompilationUnit(
       'operator +(bool x, bool y) => x | y;',
-      diagnostics: [expectedError(ParserErrorCode.topLevelOperator, 0, 8)],
+      diagnostics: [expectedError(diag.topLevelOperator, 0, 8)],
     );
   }
 
   void test_topLevelOperator_withType() {
     parseCompilationUnit(
       'bool operator +(bool x, bool y) => x | y;',
-      diagnostics: [expectedError(ParserErrorCode.topLevelOperator, 5, 8)],
+      diagnostics: [expectedError(diag.topLevelOperator, 5, 8)],
     );
   }
 
   void test_topLevelOperator_withVoid() {
     parseCompilationUnit(
       'void operator +(bool x, bool y) => x | y;',
-      diagnostics: [expectedError(ParserErrorCode.topLevelOperator, 5, 8)],
+      diagnostics: [expectedError(diag.topLevelOperator, 5, 8)],
     );
   }
 
@@ -3158,9 +2852,9 @@
     parseCompilationUnit(
       "String @A string;",
       codes: [
-        ParserErrorCode.missingConstFinalVarOrType,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingConstFinalVarOrType,
+        diag.missingConstFinalVarOrType,
+        diag.expectedToken,
+        diag.missingConstFinalVarOrType,
       ],
     );
   }
@@ -3179,8 +2873,8 @@
 }
 ''',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 49, 1),
-        expectedError(ParserErrorCode.expectedExecutable, 51, 1),
+        expectedError(diag.expectedToken, 49, 1),
+        expectedError(diag.expectedExecutable, 51, 1),
       ],
     );
   }
@@ -3188,21 +2882,21 @@
   void test_typedef_namedFunction() {
     parseCompilationUnit(
       'typedef void Function();',
-      codes: [ParserErrorCode.expectedIdentifierButGotKeyword],
+      codes: [diag.expectedIdentifierButGotKeyword],
     );
   }
 
   void test_typedefInClass_withoutReturnType() {
     parseCompilationUnit(
       "class C { typedef F(x); }",
-      diagnostics: [expectedError(ParserErrorCode.typedefInClass, 10, 7)],
+      diagnostics: [expectedError(diag.typedefInClass, 10, 7)],
     );
   }
 
   void test_typedefInClass_withReturnType() {
     parseCompilationUnit(
       "class C { typedef int F(int x); }",
-      diagnostics: [expectedError(ParserErrorCode.typedefInClass, 10, 7)],
+      diagnostics: [expectedError(diag.typedefInClass, 10, 7)],
     );
   }
 
@@ -3211,8 +2905,8 @@
     parseCompilationUnit(
       r"main() { String s = 'a' 'b', 'c$foo'; return s; }",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 27, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 29, 2),
+        expectedError(diag.expectedToken, 27, 1),
+        expectedError(diag.missingIdentifier, 29, 2),
       ],
     );
   }
@@ -3221,45 +2915,39 @@
     createParser('(a, b})');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 5, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 5, 1)]);
   }
 
   void test_unexpectedTerminatorForParameterGroup_optional() {
     createParser('(a, b])');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 5, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 5, 1)]);
   }
 
   void test_unexpectedToken_endOfFieldDeclarationStatement() {
     parseStatement("String s = (null));", expectedEndOffset: 17);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 16, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 16, 1)]);
   }
 
   void test_unexpectedToken_invalidPostfixExpression() {
     parseExpression(
       "f()++",
-      diagnostics: [
-        expectedError(ParserErrorCode.illegalAssignmentToNonAssignable, 3, 2),
-      ],
+      diagnostics: [expectedError(diag.illegalAssignmentToNonAssignable, 3, 2)],
     );
   }
 
   void test_unexpectedToken_invalidPrefixExpression() {
     parseExpression(
       "++f()",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 4, 1),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 4, 1)],
     );
   }
 
   void test_unexpectedToken_returnInExpressionFunctionBody() {
     parseCompilationUnit(
       "f() => return null;",
-      diagnostics: [expectedError(ParserErrorCode.unexpectedToken, 7, 6)],
+      diagnostics: [expectedError(diag.unexpectedToken, 7, 6)],
     );
   }
 
@@ -3267,15 +2955,13 @@
     createParser('class C { int x; ; int y;}');
     var declaration = parseFullCompilationUnitMember() as ClassDeclaration;
     expectNotNullIfNoErrors(declaration);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedClassMember, 17, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedClassMember, 17, 1)]);
   }
 
   void test_unexpectedToken_semicolonBetweenCompilationUnitMembers() {
     parseCompilationUnit(
       "int x; ; int y;",
-      diagnostics: [expectedError(ParserErrorCode.unexpectedToken, 7, 1)],
+      diagnostics: [expectedError(diag.unexpectedToken, 7, 1)],
     );
   }
 
@@ -3283,7 +2969,7 @@
     CompilationUnit unit = parseCompilationUnit(
       "library;",
       featureSet: FeatureSets.language_2_18,
-      diagnostics: [expectedError(ParserErrorCode.experimentNotEnabled, 0, 7)],
+      diagnostics: [expectedError(diag.experimentNotEnabled, 0, 7)],
     );
     expect(unit, isNotNull);
   }
@@ -3302,9 +2988,9 @@
 void main() {
   var x = "''',
       diagnostics: [
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 24, 1),
-        expectedError(ParserErrorCode.expectedToken, 25, 1),
-        expectedError(ParserErrorCode.expectedToken, 24, 1),
+        expectedError(diag.unterminatedStringLiteral, 24, 1),
+        expectedError(diag.expectedToken, 25, 1),
+        expectedError(diag.expectedToken, 24, 1),
       ],
     );
   }
@@ -3320,9 +3006,7 @@
 ;
 }
 ''',
-      diagnostics: [
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 24, 1),
-      ],
+      diagnostics: [expectedError(diag.unterminatedStringLiteral, 24, 1)],
     );
   }
 
@@ -3336,14 +3020,14 @@
 void main() {
   var x = """''',
       codes: [
-        ScannerErrorCode.unterminatedStringLiteral,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
+        diag.unterminatedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
       ],
       diagnostics: [
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 24, 1),
-        expectedError(ParserErrorCode.expectedToken, 30, 0),
-        expectedError(ParserErrorCode.expectedToken, 30, 0),
+        expectedError(diag.unterminatedStringLiteral, 24, 1),
+        expectedError(diag.expectedToken, 30, 0),
+        expectedError(diag.expectedToken, 30, 0),
       ],
     );
   }
@@ -3358,14 +3042,14 @@
 void main() {
   var x = """"''',
       codes: [
-        ScannerErrorCode.unterminatedStringLiteral,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
+        diag.unterminatedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
       ],
       diagnostics: [
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 24, 1),
-        expectedError(ParserErrorCode.expectedToken, 31, 0),
-        expectedError(ParserErrorCode.expectedToken, 31, 0),
+        expectedError(diag.unterminatedStringLiteral, 24, 1),
+        expectedError(diag.expectedToken, 31, 0),
+        expectedError(diag.expectedToken, 31, 0),
       ],
     );
   }
@@ -3380,14 +3064,14 @@
 void main() {
   var x = """""''',
       codes: [
-        ScannerErrorCode.unterminatedStringLiteral,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
+        diag.unterminatedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
       ],
       diagnostics: [
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 28, 1),
-        expectedError(ParserErrorCode.expectedToken, 32, 0),
-        expectedError(ParserErrorCode.expectedToken, 32, 0),
+        expectedError(diag.unterminatedStringLiteral, 28, 1),
+        expectedError(diag.expectedToken, 32, 0),
+        expectedError(diag.expectedToken, 32, 0),
       ],
     );
   }
@@ -3396,9 +3080,7 @@
     createParser('+x');
     Expression expression = parser.parseUnaryExpression();
     expectNotNullIfNoErrors(expression);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 0, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 0, 1)]);
     var binaryExpression = expression as BinaryExpression;
     expect(binaryExpression.leftOperand.isSynthetic, isTrue);
     expect(binaryExpression.rightOperand.isSynthetic, isFalse);
@@ -3409,7 +3091,7 @@
   void test_varAndType_field() {
     parseCompilationUnit(
       "class C { var int x; }",
-      diagnostics: [expectedError(ParserErrorCode.varAndType, 10, 3)],
+      diagnostics: [expectedError(diag.varAndType, 10, 3)],
     );
   }
 
@@ -3417,7 +3099,7 @@
     // This is currently reporting EXPECTED_TOKEN for a missing semicolon, but
     // this would be a better error message.
     parseStatement("var int x;");
-    listener.assertErrors([expectedError(ParserErrorCode.varAndType, 0, 3)]);
+    listener.assertErrors([expectedError(diag.varAndType, 0, 3)]);
   }
 
   void test_varAndType_parameter() {
@@ -3426,13 +3108,13 @@
     createParser('(var int x)');
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
-    listener.assertErrors([expectedError(ParserErrorCode.varAndType, 1, 3)]);
+    listener.assertErrors([expectedError(diag.varAndType, 1, 3)]);
   }
 
   void test_varAndType_topLevelVariable() {
     parseCompilationUnit(
       "var int x;",
-      diagnostics: [expectedError(ParserErrorCode.varAndType, 0, 3)],
+      diagnostics: [expectedError(diag.varAndType, 0, 3)],
     );
   }
 
@@ -3440,7 +3122,7 @@
     parseExpression(
       "x as var",
       expectedEndOffset: 5,
-      diagnostics: [expectedError(ParserErrorCode.expectedTypeName, 5, 3)],
+      diagnostics: [expectedError(diag.expectedTypeName, 5, 3)],
     );
   }
 
@@ -3450,8 +3132,8 @@
       diagnostics: [
         // Fasta interprets the `var` as a malformed top level var
         // and `class` as the start of a class declaration.
-        expectedError(ParserErrorCode.expectedToken, 0, 3),
-        expectedError(ParserErrorCode.missingIdentifier, 4, 5),
+        expectedError(diag.expectedToken, 0, 3),
+        expectedError(diag.missingIdentifier, 4, 5),
       ],
     );
   }
@@ -3462,8 +3144,8 @@
       diagnostics: [
         // Fasta interprets the `var` as a malformed top level var
         // and `enum` as the start of an enum declaration.
-        expectedError(ParserErrorCode.expectedToken, 0, 3),
-        expectedError(ParserErrorCode.missingIdentifier, 4, 4),
+        expectedError(diag.expectedToken, 0, 3),
+        expectedError(diag.missingIdentifier, 4, 4),
       ],
     );
   }
@@ -3472,7 +3154,7 @@
     createParser('var m() {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([expectedError(ParserErrorCode.varReturnType, 0, 3)]);
+    listener.assertErrors([expectedError(diag.varReturnType, 0, 3)]);
   }
 
   void test_varTypedef() {
@@ -3481,8 +3163,8 @@
       diagnostics: [
         // Fasta interprets the `var` as a malformed top level var
         // and `typedef` as the start of an typedef declaration.
-        expectedError(ParserErrorCode.expectedToken, 0, 3),
-        expectedError(ParserErrorCode.missingIdentifier, 4, 7),
+        expectedError(diag.expectedToken, 0, 3),
+        expectedError(diag.missingIdentifier, 4, 7),
       ],
     );
   }
@@ -3544,7 +3226,7 @@
   void test_withBeforeExtends() {
     parseCompilationUnit(
       "class A with B extends C {}",
-      diagnostics: [expectedError(ParserErrorCode.withBeforeExtends, 15, 7)],
+      diagnostics: [expectedError(diag.withBeforeExtends, 15, 7)],
     );
   }
 
@@ -3560,7 +3242,7 @@
     FormalParameterList list = parser.parseFormalParameterList();
     expectNotNullIfNoErrors(list);
     listener.assertErrors([
-      expectedError(ParserErrorCode.wrongSeparatorForPositionalParameter, 7, 1),
+      expectedError(diag.wrongSeparatorForPositionalParameter, 7, 1),
     ]);
   }
 
@@ -3570,8 +3252,8 @@
     expectNotNullIfNoErrors(list);
     // fasta scanner generates '(a, {b, c]})' where '}' is synthetic
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 9, 1),
-      expectedError(ParserErrorCode.expectedToken, 10, 1),
+      expectedError(diag.expectedToken, 9, 1),
+      expectedError(diag.expectedToken, 10, 1),
     ]);
   }
 
@@ -3581,8 +3263,8 @@
     expectNotNullIfNoErrors(list);
     // fasta scanner generates '(a, [b, c}])' where ']' is synthetic
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 9, 1),
-      expectedError(ParserErrorCode.expectedToken, 10, 1),
+      expectedError(diag.expectedToken, 9, 1),
+      expectedError(diag.expectedToken, 10, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/generated/expression_parser_test.dart b/pkg/analyzer/test/generated/expression_parser_test.dart
index e11cc9d..7f9ad9c 100644
--- a/pkg/analyzer/test/generated/expression_parser_test.dart
+++ b/pkg/analyzer/test/generated/expression_parser_test.dart
@@ -8,7 +8,7 @@
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/testing/token_factory.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -45,9 +45,9 @@
     parseExpression(
       '<b?c>()',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 1, 1),
-        expectedError(ParserErrorCode.unexpectedToken, 7, 0),
-        expectedError(ParserErrorCode.missingFunctionBody, 7, 0),
+        expectedError(diag.expectedToken, 1, 1),
+        expectedError(diag.unexpectedToken, 7, 0),
+        expectedError(diag.missingFunctionBody, 7, 0),
       ],
     );
   }
@@ -57,11 +57,11 @@
     parseExpression(
       'n=<.["\$assert',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedTypeName, 3, 1),
-        expectedError(ParserErrorCode.expectedTypeName, 4, 1),
-        expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 7, 6),
-        expectedError(ScannerErrorCode.unterminatedStringLiteral, 12, 1),
-        expectedError(ParserErrorCode.expectedToken, 13, 1),
+        expectedError(diag.expectedTypeName, 3, 1),
+        expectedError(diag.expectedTypeName, 4, 1),
+        expectedError(diag.expectedIdentifierButGotKeyword, 7, 6),
+        expectedError(diag.unterminatedStringLiteral, 12, 1),
+        expectedError(diag.expectedToken, 13, 1),
       ],
     );
   }
@@ -71,8 +71,8 @@
     parseExpression(
       '[<y.<z>(){}]',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedTypeName, 4, 1),
-        expectedError(ParserErrorCode.expectedToken, 6, 1),
+        expectedError(diag.expectedTypeName, 4, 1),
+        expectedError(diag.expectedToken, 6, 1),
       ],
     );
   }
@@ -83,10 +83,10 @@
         parseExpression(
               '<.["',
               diagnostics: [
-                expectedError(ParserErrorCode.expectedTypeName, 1, 1),
-                expectedError(ParserErrorCode.expectedTypeName, 2, 1),
-                expectedError(ScannerErrorCode.unterminatedStringLiteral, 3, 1),
-                expectedError(ParserErrorCode.expectedToken, 4, 1),
+                expectedError(diag.expectedTypeName, 1, 1),
+                expectedError(diag.expectedTypeName, 2, 1),
+                expectedError(diag.unterminatedStringLiteral, 3, 1),
+                expectedError(diag.expectedToken, 4, 1),
               ],
             )
             as ListLiteral;
@@ -101,8 +101,8 @@
         parseExpression(
               '<.[]',
               diagnostics: [
-                expectedError(ParserErrorCode.expectedTypeName, 1, 1),
-                expectedError(ParserErrorCode.expectedTypeName, 2, 2),
+                expectedError(diag.expectedTypeName, 1, 1),
+                expectedError(diag.expectedTypeName, 2, 2),
               ],
             )
             as ListLiteral;
@@ -143,7 +143,7 @@
                 // type arguments, but the parser could report this.
                 expectedError(
                   /* ParserErrorCode.EXPECTED_ONE_OR_TWO_TYPE_VARIABLES */
-                  ParserErrorCode.expectedToken,
+                  diag.expectedToken,
                   11,
                   3,
                 ),
@@ -164,7 +164,7 @@
                 // type arguments, but the parser could report this.
                 expectedError(
                   /* ParserErrorCode.EXPECTED_ONE_OR_TWO_TYPE_VARIABLES */
-                  ParserErrorCode.expectedToken,
+                  diag.expectedToken,
                   11,
                   3,
                 ),
@@ -796,7 +796,7 @@
   void test_parseConstExpression_mapLiteral_typed_missingGt() {
     Expression expression = parseExpression(
       'const <A, B {}',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 10, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 10, 1)],
     );
     expect(expression, isNotNull);
     var literal = expression as SetOrMapLiteral;
@@ -821,7 +821,7 @@
     // https://github.com/dart-lang/sdk/issues/37414
     parseCompilationUnit(
       'class C { C.n() : this()(); }',
-      diagnostics: [expectedError(ParserErrorCode.invalidInitializer, 18, 8)],
+      diagnostics: [expectedError(diag.invalidInitializer, 18, 8)],
     );
   }
 
@@ -880,7 +880,7 @@
       'const <E>',
       codes: [
         // TODO(danrubel): Improve this error message.
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ],
     );
     expect(expression, isNotNull);
@@ -1098,7 +1098,7 @@
       'const <E>(E i) => i++',
     );
     expect(expression, isNotNull);
-    assertErrorsWithCodes([ParserErrorCode.unexpectedToken]);
+    assertErrorsWithCodes([diag.unexpectedToken]);
     expect(expression.body, isNotNull);
     expect(expression.typeParameters, isNotNull);
     expect(expression.parameters, isNotNull);
@@ -1109,7 +1109,7 @@
     Expression expression = parseExpression(
       '<test('
       ', (){});>[0, 1, 2]',
-      codes: [ParserErrorCode.expectedToken],
+      codes: [diag.expectedToken],
     );
     expect(expression, isNotNull);
     var literal = expression as ListLiteral;
@@ -1266,11 +1266,7 @@
         parseExpression(
               'new a.b.c<C>()',
               diagnostics: [
-                expectedError(
-                  ParserErrorCode.constructorWithTypeArguments,
-                  8,
-                  1,
-                ),
+                expectedError(diag.constructorWithTypeArguments, 8, 1),
               ],
             )
             as InstanceCreationExpressionImpl;
@@ -1896,9 +1892,7 @@
     var asExpression =
         parseExpression(
               'x as Y as Z',
-              diagnostics: [
-                expectedError(ParserErrorCode.unexpectedToken, 7, 2),
-              ],
+              diagnostics: [expectedError(diag.unexpectedToken, 7, 2)],
             )
             as AsExpression;
     expect(asExpression, isNotNull);
@@ -1976,9 +1970,7 @@
     var isExpression =
         parseExpression(
               'x is Y is! Z',
-              diagnostics: [
-                expectedError(ParserErrorCode.unexpectedToken, 7, 2),
-              ],
+              diagnostics: [expectedError(diag.unexpectedToken, 7, 2)],
             )
             as IsExpression;
     expect(isExpression, isNotNull);
@@ -2126,9 +2118,7 @@
     Expression expression = parseStringLiteral(r"'<html>$void</html>'");
     expect(expression, isNotNull);
     assertErrors(
-      diagnostics: [
-        expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 8, 4),
-      ],
+      diagnostics: [expectedError(diag.expectedIdentifierButGotKeyword, 8, 4)],
     );
     expect(expression, isStringInterpolation);
     var literal = expression as StringInterpolation;
@@ -2596,9 +2586,7 @@
   void test_parseUnaryExpression_not_super() {
     PrefixExpression expression = parseUnaryExpression('!super');
     expect(expression, isNotNull);
-    assertErrors(
-      diagnostics: [error(ParserErrorCode.missingAssignableSelector, 1, 5)],
-    );
+    assertErrors(diagnostics: [error(diag.missingAssignableSelector, 1, 5)]);
     expect(expression.operator, isNotNull);
     expect(expression.operator.type, TokenType.BANG);
     expect(expression.operand, isNotNull);
diff --git a/pkg/analyzer/test/generated/extension_methods_parser_test.dart b/pkg/analyzer/test/generated/extension_methods_parser_test.dart
index 2ba7217..71b386e 100644
--- a/pkg/analyzer/test/generated/extension_methods_parser_test.dart
+++ b/pkg/analyzer/test/generated/extension_methods_parser_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -21,10 +21,10 @@
     var unit = parseCompilationUnit(
       'extension E extends A with B, C implements D { }',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedInstead, 12, 7),
-        expectedError(ParserErrorCode.unexpectedToken, 22, 4),
-        expectedError(ParserErrorCode.unexpectedToken, 28, 1),
-        expectedError(ParserErrorCode.unexpectedToken, 32, 10),
+        expectedError(diag.expectedInstead, 12, 7),
+        expectedError(diag.unexpectedToken, 22, 4),
+        expectedError(diag.unexpectedToken, 28, 1),
+        expectedError(diag.unexpectedToken, 32, 10),
       ],
     );
     expect(unit.declarations, hasLength(1));
@@ -32,15 +32,15 @@
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'extends');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'A');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_complex_implements() {
     var unit = parseCompilationUnit(
       'extension E implements C, D { }',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedInstead, 12, 10),
-        expectedError(ParserErrorCode.unexpectedToken, 24, 1),
+        expectedError(diag.expectedInstead, 12, 10),
+        expectedError(diag.unexpectedToken, 24, 1),
       ],
     );
     expect(unit.declarations, hasLength(1));
@@ -48,7 +48,7 @@
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'implements');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'C');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_complex_type() {
@@ -60,7 +60,7 @@
     var namedType = extension.onClause!.extendedType as NamedType;
     expect(namedType.name.lexeme, 'C');
     expect(namedType.typeArguments!.arguments, hasLength(1));
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_complex_type2() {
@@ -72,7 +72,7 @@
     var namedType = extension.onClause!.extendedType as NamedType;
     expect(namedType.name.lexeme, 'C');
     expect(namedType.typeArguments!.arguments, hasLength(1));
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_complex_type2_no_name() {
@@ -84,7 +84,7 @@
     var namedType = extension.onClause!.extendedType as NamedType;
     expect(namedType.name.lexeme, 'C');
     expect(namedType.typeArguments!.arguments, hasLength(1));
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_constructor_named() {
@@ -95,13 +95,11 @@
 }
 class C {}
 ''',
-      diagnostics: [
-        expectedError(ParserErrorCode.extensionDeclaresConstructor, 21, 1),
-      ],
+      diagnostics: [expectedError(diag.extensionDeclaresConstructor, 21, 1)],
     );
     expect(unit.declarations, hasLength(2));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_constructor_unnamed() {
@@ -112,22 +110,20 @@
 }
 class C {}
 ''',
-      diagnostics: [
-        expectedError(ParserErrorCode.extensionDeclaresConstructor, 21, 1),
-      ],
+      diagnostics: [expectedError(diag.extensionDeclaresConstructor, 21, 1)],
     );
     expect(unit.declarations, hasLength(2));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_missing_on() {
     var unit = parseCompilationUnit(
       'extension E',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 10, 1),
-        expectedError(ParserErrorCode.expectedTypeName, 11, 0),
-        expectedError(ParserErrorCode.expectedExtensionBody, 11, 0),
+        expectedError(diag.expectedToken, 10, 1),
+        expectedError(diag.expectedTypeName, 11, 0),
+        expectedError(diag.expectedExtensionBody, 11, 0),
       ],
     );
     expect(unit.declarations, hasLength(1));
@@ -135,15 +131,15 @@
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'on');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, '');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_missing_on_withBlock() {
     var unit = parseCompilationUnit(
       'extension E {}',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 10, 1),
-        expectedError(ParserErrorCode.expectedTypeName, 12, 1),
+        expectedError(diag.expectedToken, 10, 1),
+        expectedError(diag.expectedTypeName, 12, 1),
       ],
     );
     expect(unit.declarations, hasLength(1));
@@ -151,20 +147,20 @@
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'on');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, '');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_missing_on_withClassAndBlock() {
     var unit = parseCompilationUnit(
       'extension E C {}',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 10, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 10, 1)],
     );
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'on');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'C');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_parse_toplevel_member_called_late_calling_self() {
@@ -195,33 +191,33 @@
     var namedType = extension.onClause!.extendedType as NamedType;
     expect(namedType.name.lexeme, 'C');
     expect(namedType.typeArguments, isNull);
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_simple_extends() {
     var unit = parseCompilationUnit(
       'extension E extends C { }',
-      diagnostics: [expectedError(ParserErrorCode.expectedInstead, 12, 7)],
+      diagnostics: [expectedError(diag.expectedInstead, 12, 7)],
     );
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'extends');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'C');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_simple_implements() {
     var unit = parseCompilationUnit(
       'extension E implements C { }',
-      diagnostics: [expectedError(ParserErrorCode.expectedInstead, 12, 10)],
+      diagnostics: [expectedError(diag.expectedInstead, 12, 10)],
     );
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'implements');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'C');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_simple_no_name() {
@@ -234,20 +230,20 @@
     var namedType = extension.onClause!.extendedType as NamedType;
     expect(namedType.name.lexeme, 'C');
     expect(namedType.typeArguments, isNull);
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_simple_with() {
     var unit = parseCompilationUnit(
       'extension E with C { }',
-      diagnostics: [expectedError(ParserErrorCode.expectedInstead, 12, 4)],
+      diagnostics: [expectedError(diag.expectedInstead, 12, 4)],
     );
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'with');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'C');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 
   void test_void_type() {
@@ -257,6 +253,6 @@
     expect(extension.name!.lexeme, 'E');
     expect(extension.onClause!.onKeyword.lexeme, 'on');
     expect((extension.onClause!.extendedType as NamedType).name.lexeme, 'void');
-    expect(extension.members, hasLength(0));
+    expect(extension.body.members, hasLength(0));
   }
 }
diff --git a/pkg/analyzer/test/generated/formal_parameter_parser_test.dart b/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
index 765b048..e2184d0 100644
--- a/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
+++ b/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:test/test.dart';
@@ -232,7 +232,7 @@
     FormalParameter parameter = parseNNBDFormalParameter(
       'covariant required A a : null',
       kind,
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 12, 8)],
+      diagnostics: [expectedError(diag.modifierOutOfOrder, 12, 8)],
     );
     expect(parameter, isNotNull);
     expect(parameter, isDefaultFormalParameter);
@@ -397,7 +397,7 @@
     parseNNBDFormalParameter(
       'external int i',
       ParameterKind.REQUIRED,
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 1, 8)],
+      diagnostics: [expectedError(diag.extraneousModifier, 1, 8)],
     );
   }
 
@@ -461,7 +461,7 @@
     FormalParameter parameter = parseNNBDFormalParameter(
       'final required a : null',
       kind,
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 8, 8)],
+      diagnostics: [expectedError(diag.modifierOutOfOrder, 8, 8)],
     );
     expect(parameter, isNotNull);
     expect(parameter, isDefaultFormalParameter);
@@ -795,7 +795,7 @@
     FormalParameter parameter = parseNNBDFormalParameter(
       'var required a : null',
       kind,
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 6, 8)],
+      diagnostics: [expectedError(diag.modifierOutOfOrder, 6, 8)],
     );
     expect(parameter, isNotNull);
     expect(parameter, isDefaultFormalParameter);
@@ -1004,7 +1004,7 @@
   void test_parseFormalParameterList_prefixedType_missingName() {
     FormalParameterList list = parseFormalParameterList(
       '(io.File)',
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 8, 1)],
+      diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
     );
     expect(list, isNotNull);
     expect(list.leftParenthesis, isNotNull);
@@ -1025,8 +1025,8 @@
     FormalParameterList list = parseFormalParameterList(
       '(io.)',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedTypeName, 4, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 4, 1),
+        expectedError(diag.expectedTypeName, 4, 1),
+        expectedError(diag.missingIdentifier, 4, 1),
       ],
     );
     expect(list, isNotNull);
@@ -1048,8 +1048,8 @@
     FormalParameterList list = parseFormalParameterList(
       '(io.,a)',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedTypeName, 4, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 4, 1),
+        expectedError(diag.expectedTypeName, 4, 1),
+        expectedError(diag.missingIdentifier, 4, 1),
       ],
     );
     expect(list, isNotNull);
@@ -1065,7 +1065,7 @@
   void test_parseNormalFormalParameter_field_const_noType() {
     NormalFormalParameter parameter = parseNormalFormalParameter(
       'const this.a',
-      diagnosticCodes: [ParserErrorCode.extraneousModifier],
+      diagnosticCodes: [diag.extraneousModifier],
     );
     expect(parameter, isNotNull);
     expect(parameter, isFieldFormalParameter);
@@ -1079,7 +1079,7 @@
   void test_parseNormalFormalParameter_field_const_type() {
     NormalFormalParameter parameter = parseNormalFormalParameter(
       'const A this.a',
-      diagnosticCodes: [ParserErrorCode.extraneousModifier],
+      diagnosticCodes: [diag.extraneousModifier],
     );
     expect(parameter, isNotNull);
     expect(parameter, isFieldFormalParameter);
@@ -1347,7 +1347,7 @@
   void test_parseNormalFormalParameter_simple_const_noType() {
     NormalFormalParameter parameter = parseNormalFormalParameter(
       'const a',
-      diagnosticCodes: [ParserErrorCode.extraneousModifier],
+      diagnosticCodes: [diag.extraneousModifier],
     );
     expect(parameter, isNotNull);
     expect(parameter, isSimpleFormalParameter);
@@ -1360,7 +1360,7 @@
   void test_parseNormalFormalParameter_simple_const_type() {
     NormalFormalParameter parameter = parseNormalFormalParameter(
       'const A a',
-      diagnosticCodes: [ParserErrorCode.extraneousModifier],
+      diagnosticCodes: [diag.extraneousModifier],
     );
     expect(parameter, isNotNull);
     expect(parameter, isSimpleFormalParameter);
diff --git a/pkg/analyzer/test/generated/function_reference_parser_test.dart b/pkg/analyzer/test/generated/function_reference_parser_test.dart
index e6a15971..dafc051 100644
--- a/pkg/analyzer/test/generated/function_reference_parser_test.dart
+++ b/pkg/analyzer/test/generated/function_reference_parser_test.dart
@@ -3,7 +3,7 @@
 // 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/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -42,9 +42,7 @@
               as ExpressionStatement)
           .expression,
     );
-    listener.assertErrors([
-      expectedError(ParserErrorCode.experimentNotEnabled, 1, 6),
-    ]);
+    listener.assertErrors([expectedError(diag.experimentNotEnabled, 1, 6)]);
   }
 
   void test_followingToken_accepted_closeBrace() {
@@ -140,9 +138,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>&d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -156,9 +152,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>*d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -176,9 +170,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>|d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -188,9 +180,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>^d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -200,9 +190,7 @@
     var methodInvocation =
         parseExpression(
               'f(a<b,c> is int)',
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 9, 2),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 9, 2)],
             )
             as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
@@ -218,8 +206,8 @@
     parseExpression(
       'f<a><b>',
       diagnostics: [
-        expectedError(ParserErrorCode.equalityCannotBeEqualityOperand, 3, 1),
-        expectedError(ParserErrorCode.expectedToken, 7, 0),
+        expectedError(diag.equalityCannotBeEqualityOperand, 3, 1),
+        expectedError(diag.expectedToken, 7, 0),
       ],
     );
   }
@@ -241,11 +229,7 @@
       parseExpression(
             'f(a<b,c>[d]>e)',
             diagnostics: [
-              expectedError(
-                ParserErrorCode.equalityCannotBeEqualityOperand,
-                11,
-                1,
-              ),
+              expectedError(diag.equalityCannotBeEqualityOperand, 11, 1),
             ],
           )
           as MethodInvocation,
@@ -260,9 +244,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>%d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -272,9 +254,7 @@
     var methodInvocation =
         parseExpression(
               'f(a<b,c>..toString())',
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 8, 2),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 8, 2)],
             )
             as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
@@ -287,9 +267,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>+d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -299,9 +277,7 @@
     var methodInvocation =
         parseExpression(
               'f(a<b,c> ? null : null)',
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 9, 1),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 9, 1)],
             )
             as MethodInvocation;
     var arguments = methodInvocation.argumentList.arguments;
@@ -314,9 +290,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>?.toString())',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 2),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 2)],
           )
           as MethodInvocation,
     );
@@ -326,9 +300,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>?.foo<c>())',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 2),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 2)],
           )
           as MethodInvocation,
     );
@@ -339,8 +311,8 @@
         parseExpression(
               'f(a<b,c>?..toString())',
               diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 8, 3),
-                expectedError(ParserErrorCode.expectedToken, 11, 8),
+                expectedError(diag.missingIdentifier, 8, 3),
+                expectedError(diag.expectedToken, 11, 8),
               ],
             )
             as MethodInvocation;
@@ -355,9 +327,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>?.hashCode)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 2),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 2)],
           )
           as MethodInvocation,
     );
@@ -367,9 +337,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c> ?? d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 9, 2),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 9, 2)],
           )
           as MethodInvocation,
     );
@@ -379,9 +347,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>/d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 1),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 1)],
           )
           as MethodInvocation,
     );
@@ -391,9 +357,7 @@
     expect_two_args(
       parseExpression(
             'f(a<b,c>~/d)',
-            diagnostics: [
-              expectedError(ParserErrorCode.missingIdentifier, 8, 2),
-            ],
+            diagnostics: [expectedError(diag.missingIdentifier, 8, 2)],
           )
           as MethodInvocation,
     );
diff --git a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
index b1052fe..77fa04c 100644
--- a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
+++ b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart
@@ -3,7 +3,7 @@
 // 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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -53,11 +53,7 @@
   void test_className_prefixed_constructorName_absent() {
     var compilationUnit = _parseCompilationUnit(
       '@p.A<B>() class C {}',
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        4,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 4, 1),
     );
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
@@ -73,11 +69,7 @@
   void test_className_prefixed_constructorName_present() {
     var compilationUnit = _parseCompilationUnit(
       '@p.A<B>.ctor() class C {}',
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        4,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 4, 1),
     );
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
@@ -93,11 +85,7 @@
   void test_className_unprefixed_constructorName_absent() {
     var compilationUnit = _parseCompilationUnit(
       '@A<B>() class C {}',
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        2,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 2, 1),
     );
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
@@ -112,11 +100,7 @@
   void test_className_unprefixed_constructorName_present() {
     var compilationUnit = _parseCompilationUnit(
       '@A<B>.ctor() class C {}',
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        2,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 2, 1),
     );
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
@@ -132,17 +116,9 @@
     var compilationUnit = _parseCompilationUnit(
       '@p.x<A> class C {}',
       diagnostics: [
-        expectedError(
-          ParserErrorCode.annotationWithTypeArgumentsUninstantiated,
-          6,
-          1,
-        ),
+        expectedError(diag.annotationWithTypeArgumentsUninstantiated, 6, 1),
       ],
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        4,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 4, 1),
     );
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
@@ -159,17 +135,9 @@
     var compilationUnit = _parseCompilationUnit(
       '@x<A> class C {}',
       diagnostics: [
-        expectedError(
-          ParserErrorCode.annotationWithTypeArgumentsUninstantiated,
-          4,
-          1,
-        ),
+        expectedError(diag.annotationWithTypeArgumentsUninstantiated, 4, 1),
       ],
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        2,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 2, 1),
     );
     var classDeclaration =
         compilationUnit.declarations.single as ClassDeclaration;
@@ -185,11 +153,11 @@
     _parseCompilationUnit(
       '@p.A.ctor<B>() class C {}',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedExecutable, 9, 1),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 10, 1),
-        expectedError(ParserErrorCode.expectedToken, 10, 1),
-        expectedError(ParserErrorCode.topLevelOperator, 11, 1),
-        expectedError(ParserErrorCode.missingFunctionBody, 15, 5),
+        expectedError(diag.expectedExecutable, 9, 1),
+        expectedError(diag.missingConstFinalVarOrType, 10, 1),
+        expectedError(diag.expectedToken, 10, 1),
+        expectedError(diag.topLevelOperator, 11, 1),
+        expectedError(diag.missingFunctionBody, 15, 5),
       ],
       disabledDiagnostics: null,
     );
@@ -199,19 +167,11 @@
     _parseCompilationUnit(
       '@p<A>.B.ctor() class C {}',
       diagnostics: [
-        expectedError(
-          ParserErrorCode.annotationWithTypeArgumentsUninstantiated,
-          6,
-          1,
-        ),
-        expectedError(ParserErrorCode.expectedExecutable, 7, 1),
-        expectedError(ParserErrorCode.missingFunctionBody, 15, 5),
+        expectedError(diag.annotationWithTypeArgumentsUninstantiated, 6, 1),
+        expectedError(diag.expectedExecutable, 7, 1),
+        expectedError(diag.missingFunctionBody, 15, 5),
       ],
-      disabledDiagnostics: expectedError(
-        ParserErrorCode.experimentNotEnabled,
-        2,
-        1,
-      ),
+      disabledDiagnostics: expectedError(diag.experimentNotEnabled, 2, 1),
     );
   }
 
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index 35c8399..b4902f2 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/element/nullability_suffix.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../src/dart/resolution/context_collection_resolution.dart';
@@ -353,9 +353,7 @@
   }
 
   test_invalid_unicode() async {
-    await assertErrorsInCode('\uFFFD', [
-      error(ScannerErrorCode.encoding, 0, 1),
-    ]);
+    await assertErrorsInCode('\uFFFD', [error(diag.encoding, 0, 1)]);
   }
 
   test_invalidPart_withPart() async {
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 33c97b2..90d1c4b 100644
--- a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
+++ b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
@@ -3,7 +3,7 @@
 // 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/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -29,16 +29,13 @@
 }
 ''',
       diagnostics: [
-        expectedError(ParserErrorCode.missingAssignmentInInitializer, 18, 4),
-        expectedError(ParserErrorCode.missingIdentifier, 23, 3),
-        expectedError(ParserErrorCode.missingFunctionBody, 23, 3),
-        expectedError(ParserErrorCode.expectedClassMember, 23, 3),
-        expectedError(ParserErrorCode.missingKeywordOperator, 27, 1),
-        expectedError(ParserErrorCode.invalidOperator, 27, 1),
-        expectedError(ParserErrorCode.missingMethodParameters, 27, 1),
-        expectedError(ParserErrorCode.missingFunctionBody, 29, 4),
-        expectedError(ParserErrorCode.expectedClassMember, 29, 4),
-        expectedError(ParserErrorCode.expectedClassMember, 33, 1),
+        error(diag.missingAssignmentInInitializer, 18, 4),
+        error(diag.missingIdentifier, 23, 3),
+        error(diag.missingFunctionBody, 23, 3),
+        error(diag.experimentNotEnabledOffByDefault, 23, 3),
+        error(diag.missingMethodParameters, 23, 3),
+        error(diag.redirectionInNonFactoryConstructor, 27, 1),
+        error(diag.expectedIdentifierButGotKeyword, 29, 4),
       ],
     );
   }
@@ -195,8 +192,9 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.name!.lexeme, 'new');
   }
 
@@ -208,8 +206,8 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
-    var constructorDeclaration =
-        classDeclaration.members[0] as ConstructorDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructorDeclaration = classBody.members[0] as ConstructorDeclaration;
     expect(constructorDeclaration.name!.lexeme, 'new');
   }
 
@@ -315,11 +313,12 @@
 }
 ''',
       featureSet: FeatureSets.language_2_13,
-      diagnostics: [expectedError(ParserErrorCode.experimentNotEnabled, 14, 3)],
+      diagnostics: [expectedError(diag.experimentNotEnabled, 14, 3)],
     );
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.name!.lexeme, 'new');
   }
 
@@ -330,8 +329,9 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     // 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
@@ -351,8 +351,9 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
     var type = redirectedConstructor.type;
@@ -368,8 +369,9 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
     var type = redirectedConstructor.type;
@@ -386,8 +388,9 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
     var type = redirectedConstructor.type;
@@ -404,8 +407,9 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
     var constructorDeclaration =
-        classDeclaration.members.single as ConstructorDeclaration;
+        classBody.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.redirectedConstructor, isNull);
     var superConstructorInvocation =
         constructorDeclaration.initializers.single
@@ -421,8 +425,8 @@
 }
 ''');
     var classDeclaration = unit.declarations.single as ClassDeclaration;
-    var constructorDeclaration =
-        classDeclaration.members[0] as ConstructorDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructorDeclaration = classBody.members[0] as ConstructorDeclaration;
     expect(constructorDeclaration.redirectedConstructor, isNull);
     var redirectingConstructorInvocation =
         constructorDeclaration.initializers.single
diff --git a/pkg/analyzer/test/generated/nnbd_parser_test.dart b/pkg/analyzer/test/generated/nnbd_parser_test.dart
index 348ce5f..a09137f 100644
--- a/pkg/analyzer/test/generated/nnbd_parser_test.dart
+++ b/pkg/analyzer/test/generated/nnbd_parser_test.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/ast/token.dart' show TokenType;
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -155,9 +155,7 @@
   void test_cascade_withNullCheck_invalid() {
     parseCompilationUnit(
       'main() { a..[27]?..x; }',
-      diagnostics: [
-        expectedError(ParserErrorCode.nullAwareCascadeOutOfOrder, 16, 3),
-      ],
+      diagnostics: [expectedError(diag.nullAwareCascadeOutOfOrder, 16, 3)],
     );
   }
 
@@ -195,9 +193,9 @@
     parseCompilationUnit(
       'D? foo(X? x) { X ? ? x2 = x + bar(7) : y; }',
       diagnostics: [
-        expectedError(ParserErrorCode.missingIdentifier, 19, 1),
-        expectedError(ParserErrorCode.expectedToken, 40, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 40, 1),
+        expectedError(diag.missingIdentifier, 19, 1),
+        expectedError(diag.expectedToken, 40, 1),
+        expectedError(diag.missingIdentifier, 40, 1),
       ],
     );
   }
@@ -231,11 +229,11 @@
     parseCompilationUnit(
       r'+t{{r?this}}',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedExecutable, 0, 1),
-        expectedError(ParserErrorCode.missingFunctionParameters, 1, 1),
-        expectedError(ParserErrorCode.expectedToken, 6, 4),
-        expectedError(ParserErrorCode.expectedToken, 10, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 10, 1),
+        expectedError(diag.expectedExecutable, 0, 1),
+        expectedError(diag.missingFunctionParameters, 1, 1),
+        expectedError(diag.expectedToken, 6, 4),
+        expectedError(diag.expectedToken, 10, 1),
+        expectedError(diag.missingIdentifier, 10, 1),
       ],
     );
   }
@@ -360,7 +358,8 @@
 }
 ''');
     var classDeclaration = unit.declarations.first as ClassDeclaration;
-    var constructor = classDeclaration.members
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructor = classBody.members
         .whereType<ConstructorDeclaration>()
         .single;
 
@@ -407,7 +406,8 @@
 }
 ''');
     var classDeclaration = unit.declarations.first as ClassDeclaration;
-    var constructor = classDeclaration.members
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructor = classBody.members
         .whereType<ConstructorDeclaration>()
         .single;
 
@@ -461,7 +461,8 @@
 }
 ''');
     var classDeclaration = unit.declarations.first as ClassDeclaration;
-    var constructor = classDeclaration.members
+    var classBody = classDeclaration.body as BlockClassBody;
+    var constructor = classBody.members
         .whereType<ConstructorDeclaration>()
         .single;
 
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index f038bd7..b1a1100 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -5,8 +5,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:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -83,7 +82,7 @@
 export 'lib.dart';
 export 'lib.dart';
 ''',
-      [error(WarningCode.duplicateExport, 37, 10)],
+      [error(diag.duplicateExport, 37, 10)],
     );
   }
 
@@ -149,7 +148,7 @@
   new N2();
 }
 ''',
-      [error(WarningCode.unusedShownName, 44, 1)],
+      [error(diag.unusedShownName, 44, 1)],
     );
   }
 
@@ -350,7 +349,7 @@
   -x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 14, 1)],
+      [error(diag.unusedLocalVariable, 14, 1)],
     );
   }
 
@@ -436,7 +435,7 @@
   F f = (int i) async => i;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 43, 1)],
+      [error(diag.unusedLocalVariable, 43, 1)],
     );
   }
 
@@ -564,7 +563,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 33, 1)],
+      [error(diag.unusedLocalVariable, 33, 1)],
     );
   }
 
@@ -576,7 +575,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
   }
 
@@ -670,7 +669,7 @@
   dynamic x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 16, 1)],
+      [error(diag.unusedLocalVariable, 16, 1)],
     );
   }
 
@@ -689,7 +688,7 @@
       newSet: <T>() => customNewSet = new Set<T>());
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 51, 12)],
+      [error(diag.unusedLocalVariable, 51, 12)],
     );
   }
 
@@ -812,13 +811,7 @@
   const B(): super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-          54,
-          7,
-        ),
-      ],
+      [error(diag.undefinedConstructorInInitializerDefault, 54, 7)],
     );
   }
 
@@ -995,7 +988,7 @@
   const int x = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 21, 1)],
+      [error(diag.unusedLocalVariable, 21, 1)],
     );
   }
 
@@ -1113,7 +1106,7 @@
   var v = dynamic;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
   }
 
@@ -1301,7 +1294,7 @@
   A() {}
 }
 ''',
-      [error(ParserErrorCode.nativeClauseInNonSdkCode, 8, 18)],
+      [error(diag.nativeClauseInNonSdkCode, 8, 18)],
     );
   }
 
@@ -1312,7 +1305,7 @@
   final int x;
 }
 ''',
-      [error(ParserErrorCode.nativeClauseInNonSdkCode, 8, 18)],
+      [error(diag.nativeClauseInNonSdkCode, 8, 18)],
     );
   }
 
@@ -1663,9 +1656,9 @@
 import 'lib.dart';
 ''',
       [
-        error(WarningCode.unusedImport, 21, 10),
-        error(WarningCode.unusedImport, 40, 10),
-        error(WarningCode.duplicateImport, 40, 10),
+        error(diag.unusedImport, 21, 10),
+        error(diag.unusedImport, 40, 10),
+        error(diag.duplicateImport, 40, 10),
       ],
     );
   }
@@ -1680,10 +1673,7 @@
 import 'lib1.dart';
 import 'lib2.dart';
 ''',
-      [
-        error(WarningCode.unusedImport, 21, 11),
-        error(WarningCode.unusedImport, 41, 11),
-      ],
+      [error(diag.unusedImport, 21, 11), error(diag.unusedImport, 41, 11)],
     );
   }
 
@@ -1883,7 +1873,7 @@
   _m() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 41, 2)],
+      [error(diag.unusedElement, 41, 2)],
     );
   }
 
@@ -1901,7 +1891,7 @@
   _m() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 41, 2)],
+      [error(diag.unusedElement, 41, 2)],
     );
   }
 
@@ -2055,9 +2045,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 26, 5),
-        error(WarningCode.unusedLocalVariable, 41, 5),
-        error(WarningCode.unusedLocalVariable, 56, 5),
+        error(diag.unusedLocalVariable, 26, 5),
+        error(diag.unusedLocalVariable, 41, 5),
+        error(diag.unusedLocalVariable, 56, 5),
       ],
     );
   }
@@ -2254,8 +2244,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 93, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 97, 1),
+        error(diag.unusedLocalVariable, 93, 1),
+        error(diag.invalidAssignment, 97, 1),
       ],
     );
     var z = result.unit.declaredFragment!.element.topLevelVariables
@@ -2313,7 +2303,7 @@
   Map<num, String> m = (b ? f : g)('x');
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 104, 1)],
+      [error(diag.unusedLocalVariable, 104, 1)],
     );
     var parameter = findNode.stringLiteral("'x'").correspondingParameter;
     expect(parameter!.library, isNull);
@@ -2570,7 +2560,7 @@
   !dynamic;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 7)],
+      [error(diag.unusedLocalVariable, 47, 7)],
     );
   }
 
@@ -2703,7 +2693,7 @@
   var m = {'a' : 0, 'b' : 1};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -2734,7 +2724,7 @@
   const A.b2(bool p) : v = true || p;
 }
 ''',
-      [error(WarningCode.deadCode, 167, 4)],
+      [error(diag.deadCode, 167, 4)],
     );
   }
 
@@ -2862,10 +2852,7 @@
   null[0];
 }
 ''',
-      [
-        error(CompileTimeErrorCode.undefinedMethod, 0, 0),
-        error(CompileTimeErrorCode.undefinedMethod, 0, 0),
-      ],
+      [error(diag.undefinedMethod, 0, 0), error(diag.undefinedMethod, 0, 0)],
     );
   }
 
@@ -2987,7 +2974,7 @@
 }
 h(x) {}
 ''',
-      [error(WarningCode.unusedElement, 8, 1)],
+      [error(diag.unusedElement, 8, 1)],
     );
   }
 
@@ -3060,7 +3047,7 @@
   var x = new A.x();
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 1)],
+      [error(diag.unusedLocalVariable, 35, 1)],
     );
   }
 
@@ -3074,7 +3061,7 @@
   var x = a.x();
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 36, 1)],
+      [error(diag.unusedLocalVariable, 36, 1)],
     );
   }
 
@@ -3088,7 +3075,7 @@
   var x = a.x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 36, 1)],
+      [error(diag.unusedLocalVariable, 36, 1)],
     );
   }
 
@@ -3307,7 +3294,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedElement, 11, 1)],
+      [error(diag.unusedElement, 11, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index e10e4ce..a8ec3e3 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../src/dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   int s = message;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 94, 1)],
+      [error(diag.unusedLocalVariable, 94, 1)],
     );
   }
 
@@ -45,7 +45,7 @@
   int s = message;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 119, 1)],
+      [error(diag.unusedLocalVariable, 119, 1)],
     );
   }
 
@@ -62,7 +62,7 @@
   String s = message;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 100, 1)],
+      [error(diag.unusedLocalVariable, 100, 1)],
     );
   }
 
@@ -152,7 +152,7 @@
       '''
 import 'package:somepackage/other.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 0, 0)],
+      [error(diag.uriDoesNotExist, 0, 0)],
     );
   }
 
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index c5d4940..08219c1 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -164,6 +164,34 @@
   }
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    super.beginConstructor(
+      declarationKind,
+      augmentToken,
+      externalToken,
+      staticToken,
+      covariantToken,
+      varFinalOrConst,
+      getOrSet,
+      newToken,
+      name,
+      enclosingDeclarationName,
+    );
+    begin('Method');
+  }
+
+  @override
   void beginConstructorReference(Token start) {
     super.beginConstructorReference(start);
     begin('ConstructorReference');
@@ -216,19 +244,19 @@
   }
 
   @override
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
     Token? constToken,
   ) {
-    super.beginFactoryMethod(
+    super.beginFactory(
       declarationKind,
       lastConsumed,
       externalToken,
       constToken,
     );
-    begin('FactoryMethod');
+    begin('Factory');
   }
 
   @override
@@ -708,24 +736,6 @@
   }
 
   @override
-  void endClassConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endClassConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     end('ClassDeclaration');
     end('ClassOrNamedMixinApplication');
@@ -733,63 +743,6 @@
   }
 
   @override
-  void endClassFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    end('FactoryMethod');
-    super.endClassFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endClassFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    // beginMember --> endClassFields, endMember
-    expectIn('Member');
-    super.endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endClassMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endClassOrMixinOrExtensionBody(
     DeclarationKind kind,
     int memberCount,
@@ -843,6 +796,26 @@
   }
 
   @override
+  void endConstructor(
+    DeclarationKind kind,
+    Token beginToken,
+    Token? newToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    end('Method');
+    super.endConstructor(
+      kind,
+      beginToken,
+      newToken,
+      beginParam,
+      beginInitializers,
+      endToken,
+    );
+  }
+
+  @override
   void endConstructorReference(
     Token start,
     Token? periodBeforeName,
@@ -881,24 +854,6 @@
   }
 
   @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endEnumConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endEnumDeclaration(
     Token beginToken,
     Token enumKeyword,
@@ -917,86 +872,12 @@
   }
 
   @override
-  void endEnumFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    end('FactoryMethod');
-    super.endEnumFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    expectIn('Member');
-    super.endEnumFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endEnumMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endExport(Token exportKeyword, Token semicolon) {
     end('Export');
     super.endExport(exportKeyword, semicolon);
   }
 
   @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endExtensionConstructor(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endExtensionDeclaration(
     Token beginToken,
     Token extensionKeyword,
@@ -1013,17 +894,25 @@
   }
 
   @override
-  void endExtensionFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
   ) {
-    end('FactoryMethod');
-    super.endExtensionFactoryMethod(beginToken, factoryKeyword, endToken);
+    end('Factory');
+    super.endFactory(kind, beginToken, factoryKeyword, endToken);
   }
 
   @override
-  void endExtensionFields(
+  void endFieldInitializer(Token assignment, Token endToken) {
+    end('FieldInitializer');
+    super.endFieldInitializer(assignment, endToken);
+  }
+
+  @override
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -1035,9 +924,10 @@
     Token beginToken,
     Token endToken,
   ) {
-    // beginMember --> endExtensionFields, endMember
+    // beginMember --> endFields, endMember
     expectIn('Member');
-    super.endExtensionFields(
+    super.endFields(
+      kind,
       abstractToken,
       augmentToken,
       externalToken,
@@ -1052,30 +942,6 @@
   }
 
   @override
-  void endExtensionMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endExtensionMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
-  void endFieldInitializer(Token assignment, Token endToken) {
-    end('FieldInitializer');
-    super.endFieldInitializer(assignment, endToken);
-  }
-
-  @override
   void endForControlFlow(Token token) {
     end('ForControlFlow');
     super.endForControlFlow(token);
@@ -1301,7 +1167,8 @@
   }
 
   @override
-  void endMixinConstructor(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
@@ -1309,7 +1176,8 @@
     Token endToken,
   ) {
     end('Method');
-    super.endMixinConstructor(
+    super.endMethod(
+      kind,
       getOrSet,
       beginToken,
       beginParam,
@@ -1326,63 +1194,6 @@
   }
 
   @override
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    end('FactoryMethod');
-    super.endMixinFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endMixinFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    // beginMember --> endMixinFields, endMember
-    expectIn('Member');
-    super.endMixinFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endMixinMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    end('Method');
-    super.endMixinMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-    );
-  }
-
-  @override
   void endNamedFunctionExpression(Token endToken) {
     end('NamedFunctionExpression');
     super.endNamedFunctionExpression(endToken);
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index 82c3fe9..c40feb7 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -501,7 +501,8 @@
     CompilationUnit unit = parserProxy.parseCompilationUnit2();
     assertNoErrors();
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var constructor = clazz.members[0] as ConstructorDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     return constructor.initializers.single;
   }
 
@@ -1336,7 +1337,8 @@
     createParser('class __Test { __Test() : $code; }');
     CompilationUnit unit = parser.parseCompilationUnit2();
     var clazz = unit.declarations[0] as ClassDeclaration;
-    var constructor = clazz.members[0] as ConstructorDeclaration;
+    var classBody = clazz.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     return constructor.initializers.single;
   }
 
diff --git a/pkg/analyzer/test/generated/patterns_parser_test.dart b/pkg/analyzer/test/generated/patterns_parser_test.dart
index 5373b09..b3e3267 100644
--- a/pkg/analyzer/test/generated/patterns_parser_test.dart
+++ b/pkg/analyzer/test/generated/patterns_parser_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -29,9 +29,7 @@
   (as) = x;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.illegalPatternAssignmentVariableName, 29, 2),
-      ],
+      diagnostics: [error(diag.illegalPatternAssignmentVariableName, 29, 2)],
     );
     var node = findNode.singlePatternAssignment.pattern;
     assertParsedNodeText(node, r'''
@@ -51,9 +49,7 @@
   (when) = x;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.illegalPatternAssignmentVariableName, 31, 4),
-      ],
+      diagnostics: [error(diag.illegalPatternAssignmentVariableName, 31, 4)],
     );
     var node = findNode.singlePatternAssignment.pattern;
     assertParsedNodeText(node, r'''
@@ -77,8 +73,8 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.missingIdentifier, 41, 1),
-        error(ParserErrorCode.expectedToken, 41, 1),
+        error(diag.missingIdentifier, 41, 1),
+        error(diag.expectedToken, 41, 1),
       ],
     );
     var node = findNode.switchPatternCase('case');
@@ -644,7 +640,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 8)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 8)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -901,7 +897,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 8)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 8)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -928,7 +924,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 9)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 9)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -1325,7 +1321,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.illegalPatternIdentifierName, 36, 2)],
+      diagnostics: [error(diag.illegalPatternIdentifierName, 36, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -1344,7 +1340,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.illegalPatternIdentifierName, 36, 4)],
+      diagnostics: [error(diag.illegalPatternIdentifierName, 36, 4)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -3061,9 +3057,7 @@
   [a, final d] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 23, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 23, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -3090,9 +3084,7 @@
   [a, final int d] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 27, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 27, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -3121,9 +3113,7 @@
   [a, int d] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 21, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 21, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -3151,9 +3141,7 @@
   [a, var d] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 21, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 21, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -3180,9 +3168,7 @@
   [a, var int d] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 25, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 25, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -3217,7 +3203,7 @@
   } catch (e) {}
 }
 ''',
-      diagnostics: [error(ParserErrorCode.missingIdentifier, 26, 1)],
+      diagnostics: [error(diag.missingIdentifier, 26, 1)],
     );
   }
 
@@ -4226,7 +4212,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 43, 1)],
+      diagnostics: [error(diag.expectedToken, 43, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -4255,7 +4241,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 59, 1)],
+      diagnostics: [error(diag.expectedToken, 59, 1)],
     );
     var node = findNode.switchStatement('switch').members.single;
     assertParsedNodeText(node, r'''
@@ -4291,7 +4277,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 43, 3)],
+      diagnostics: [error(diag.expectedToken, 43, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -5345,7 +5331,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 50, 1)],
+      diagnostics: [error(diag.expectedToken, 50, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -5378,8 +5364,8 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.expectedToken, 59, 1),
-        error(ParserErrorCode.missingIdentifier, 59, 1),
+        error(diag.expectedToken, 59, 1),
+        error(diag.missingIdentifier, 59, 1),
       ],
     );
     var node = findNode.switchPatternCase('case');
@@ -5419,7 +5405,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 50, 1)],
+      diagnostics: [error(diag.expectedToken, 50, 1)],
     );
     var node = findNode.switchStatement('switch').members.single;
     assertParsedNodeText(node, r'''
@@ -5462,7 +5448,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 50, 5)],
+      diagnostics: [error(diag.expectedToken, 50, 5)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -5522,7 +5508,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 2)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -5714,7 +5700,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 2)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -5739,7 +5725,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 2)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -5958,7 +5944,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 2)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -6150,7 +6136,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 2)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -6175,7 +6161,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 51, 2)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 51, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -6805,7 +6791,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 55, 1)],
+      diagnostics: [error(diag.expectedToken, 55, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -6840,7 +6826,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 71, 1)],
+      diagnostics: [error(diag.expectedToken, 71, 1)],
     );
     var node = findNode.switchStatement('switch').members.single;
     assertParsedNodeText(node, r'''
@@ -6882,7 +6868,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 55, 3)],
+      diagnostics: [error(diag.expectedToken, 55, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -7585,9 +7571,9 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 33, 1),
-        error(ParserErrorCode.missingIdentifier, 42, 1),
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 42, 1),
+        error(diag.patternAssignmentDeclaresVariable, 33, 1),
+        error(diag.missingIdentifier, 42, 1),
+        error(diag.patternAssignmentDeclaresVariable, 42, 1),
       ],
     );
     // No assertion on the parsed node text; all we are concerned with is that
@@ -7605,37 +7591,35 @@
 }
 ''',
       diagnostics: [
-        error(
-          ParserErrorCode.patternVariableDeclarationOutsideFunctionOrMethod,
-          16,
-          6,
-        ),
+        error(diag.patternVariableDeclarationOutsideFunctionOrMethod, 16, 6),
       ],
     );
     var node = findNode.classDeclaration('class');
     assertParsedNodeText(node, r'''
 ClassDeclaration
   classKeyword: class
-  name: C
-  leftBracket: {
-  members
-    FieldDeclaration
-      fields: VariableDeclarationList
-        keyword: var
-        variables
-          VariableDeclaration
-            name: <empty> <synthetic>
-            equals: =
-            initializer: RecordLiteral
-              leftParenthesis: (
-              fields
-                IntegerLiteral
-                  literal: 0
-                IntegerLiteral
-                  literal: 1
-              rightParenthesis: )
-      semicolon: ;
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: C
+  body: BlockClassBody
+    leftBracket: {
+    members
+      FieldDeclaration
+        fields: VariableDeclarationList
+          keyword: var
+          variables
+            VariableDeclaration
+              name: <empty> <synthetic>
+              equals: =
+              initializer: RecordLiteral
+                leftParenthesis: (
+                fields
+                  IntegerLiteral
+                    literal: 0
+                  IntegerLiteral
+                    literal: 1
+                rightParenthesis: )
+        semicolon: ;
+    rightBracket: }
 ''');
   }
 
@@ -7648,11 +7632,7 @@
 var (a, b) = (0, 1);
 ''',
       diagnostics: [
-        error(
-          ParserErrorCode.patternVariableDeclarationOutsideFunctionOrMethod,
-          4,
-          6,
-        ),
+        error(diag.patternVariableDeclarationOutsideFunctionOrMethod, 4, 6),
       ],
     );
     var node = findNode.unit;
@@ -7687,9 +7667,9 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.missingAssignableSelector, 9, 9),
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 9, 9),
-        error(ParserErrorCode.recordLiteralOnePositionalNoTrailingComma, 17, 1),
+        error(diag.missingAssignableSelector, 9, 9),
+        error(diag.illegalAssignmentToNonAssignable, 9, 9),
+        error(diag.recordLiteralOnePositionalNoTrailingComma, 17, 1),
       ],
     );
   }
@@ -7701,9 +7681,7 @@
   late var (_) = x;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.latePatternVariableDeclaration, 9, 4),
-      ],
+      diagnostics: [error(diag.latePatternVariableDeclaration, 9, 4)],
     );
     var node = findNode.patternVariableDeclarationStatement('= x');
     assertParsedNodeText(node, r'''
@@ -8654,7 +8632,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 36, 5)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 36, 5)],
     );
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
@@ -10061,11 +10039,11 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.expectedToken, 41, 1),
-        error(ParserErrorCode.missingIdentifier, 41, 1),
-        error(ParserErrorCode.expectedToken, 43, 1),
-        error(ParserErrorCode.missingIdentifier, 44, 1),
-        error(ParserErrorCode.unexpectedToken, 44, 1),
+        error(diag.expectedToken, 41, 1),
+        error(diag.missingIdentifier, 41, 1),
+        error(diag.expectedToken, 43, 1),
+        error(diag.missingIdentifier, 44, 1),
+        error(diag.unexpectedToken, 44, 1),
       ],
     );
     // We don't care what the parsed AST is, just that there are errors.
@@ -10085,11 +10063,11 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.expectedToken, 40, 1),
-        error(ParserErrorCode.missingIdentifier, 40, 1),
-        error(ParserErrorCode.expectedToken, 42, 1),
-        error(ParserErrorCode.missingIdentifier, 43, 1),
-        error(ParserErrorCode.unexpectedToken, 43, 1),
+        error(diag.expectedToken, 40, 1),
+        error(diag.missingIdentifier, 40, 1),
+        error(diag.expectedToken, 42, 1),
+        error(diag.missingIdentifier, 43, 1),
+        error(diag.unexpectedToken, 43, 1),
       ],
     );
     // We don't care what the parsed AST is, just that there are errors.
@@ -10395,7 +10373,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 36, 4)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 36, 4)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -10418,7 +10396,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.invalidInsideUnaryPattern, 36, 3)],
+      diagnostics: [error(diag.invalidInsideUnaryPattern, 36, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -10683,9 +10661,9 @@
   int var = 0;
 ''',
       diagnostics: [
-        error(ParserErrorCode.expectedToken, 11, 3),
-        error(ParserErrorCode.missingIdentifier, 19, 1),
-        error(ParserErrorCode.expectedToken, 24, 1),
+        error(diag.expectedToken, 11, 3),
+        error(diag.missingIdentifier, 19, 1),
+        error(diag.expectedToken, 24, 1),
       ],
     );
   }
@@ -10805,7 +10783,7 @@
   int() => 0 : 1
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 33, 1)],
+      diagnostics: [error(diag.expectedToken, 33, 1)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -10841,7 +10819,7 @@
   int() => 0 : 1
 }, 0];
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 34, 1)],
+      diagnostics: [error(diag.expectedToken, 34, 1)],
     );
     var node = findNode.listLiteral('[');
     assertParsedNodeText(node, r'''
@@ -10883,7 +10861,7 @@
   int() => 0 : (1, 2)
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 33, 1)],
+      diagnostics: [error(diag.expectedToken, 33, 1)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -10918,8 +10896,8 @@
 };
 ''',
       diagnostics: [
-        error(ParserErrorCode.unexpectedToken, 23, 4),
-        error(ParserErrorCode.unexpectedToken, 42, 4),
+        error(diag.unexpectedToken, 23, 4),
+        error(diag.unexpectedToken, 42, 4),
       ],
     );
     var node = findNode.switchExpression('switch');
@@ -10961,8 +10939,8 @@
 };
 ''',
       diagnostics: [
-        error(ParserErrorCode.expectedToken, 24, 1),
-        error(ParserErrorCode.expectedToken, 36, 1),
+        error(diag.expectedToken, 24, 1),
+        error(diag.expectedToken, 36, 1),
       ],
     );
     var node = findNode.switchExpression('switch');
@@ -11003,7 +10981,7 @@
   default => 'other'
 };
 ''',
-      diagnostics: [error(ParserErrorCode.defaultInSwitchExpression, 37, 7)],
+      diagnostics: [error(diag.defaultInSwitchExpression, 37, 7)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -11044,7 +11022,7 @@
   _ => 2
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 41, 2)],
+      diagnostics: [error(diag.expectedToken, 41, 2)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -11091,7 +11069,7 @@
   _ => 2
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 41, 2)],
+      diagnostics: [error(diag.expectedToken, 41, 2)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -11136,7 +11114,7 @@
   double() => 1
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 35, 6)],
+      diagnostics: [error(diag.expectedToken, 35, 6)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -11180,7 +11158,7 @@
   2 => 'two'
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 33, 1)],
+      diagnostics: [error(diag.expectedToken, 33, 1)],
     );
     var node = findNode.switchExpression('switch');
     assertParsedNodeText(node, r'''
@@ -11222,7 +11200,7 @@
     < 1 => 0
 };
 ''',
-      diagnostics: [error(ParserErrorCode.expectedToken, 40, 2)],
+      diagnostics: [error(diag.expectedToken, 40, 2)],
     );
     // No assertion on the parsed node text; all we are concerned with is that
     // the parser doesn't crash.
@@ -11274,7 +11252,7 @@
   };
 }
 ''',
-      diagnostics: [error(ParserErrorCode.missingIdentifier, 45, 2)],
+      diagnostics: [error(diag.missingIdentifier, 45, 2)],
     );
     var node = findNode.switchPatternCase('case');
     assertParsedNodeText(node, r'''
@@ -11302,9 +11280,9 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.missingIdentifier, 48, 2),
-        error(ParserErrorCode.expectedToken, 48, 2),
-        error(ParserErrorCode.expectedToken, 48, 2),
+        error(diag.missingIdentifier, 48, 2),
+        error(diag.expectedToken, 48, 2),
+        error(diag.expectedToken, 48, 2),
       ],
     );
     var node = findNode.switchPatternCase('case');
@@ -11344,8 +11322,8 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.missingIdentifier, 45, 2),
-        error(ParserErrorCode.expectedToken, 45, 2),
+        error(diag.missingIdentifier, 45, 2),
+        error(diag.expectedToken, 45, 2),
       ],
     );
     var node = findNode.switchPatternCase('case');
@@ -11373,8 +11351,8 @@
 }
 ''',
       diagnostics: [
-        error(ParserErrorCode.missingIdentifier, 48, 2),
-        error(ParserErrorCode.expectedToken, 48, 2),
+        error(diag.missingIdentifier, 48, 2),
+        error(diag.expectedToken, 48, 2),
       ],
     );
     var node = findNode.switchPatternCase('case');
@@ -11403,9 +11381,9 @@
 void f(Object? x) => switch (x) {if};
 ''',
       diagnostics: [
-        error(ParserErrorCode.missingIdentifier, 33, 2),
-        error(ParserErrorCode.expectedToken, 33, 2),
-        error(ParserErrorCode.expectedToken, 33, 2),
+        error(diag.missingIdentifier, 33, 2),
+        error(diag.expectedToken, 33, 2),
+        error(diag.expectedToken, 33, 2),
       ],
     );
     var node = findNode.switchExpression('if');
@@ -11523,11 +11501,7 @@
 }
 ''',
       diagnostics: [
-        error(
-          ParserErrorCode.variablePatternKeywordInDeclarationContext,
-          19,
-          5,
-        ),
+        error(diag.variablePatternKeywordInDeclarationContext, 19, 5),
       ],
     );
     var node = findNode.patternVariableDeclaration('= x').pattern;
@@ -11605,7 +11579,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.illegalPatternVariableName, 40, 2)],
+      diagnostics: [error(diag.illegalPatternVariableName, 40, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -11624,7 +11598,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.illegalPatternVariableName, 40, 4)],
+      diagnostics: [error(diag.illegalPatternVariableName, 40, 4)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertParsedNodeText(node, r'''
@@ -11849,11 +11823,7 @@
 }
 ''',
       diagnostics: [
-        error(
-          ParserErrorCode.variablePatternKeywordInDeclarationContext,
-          19,
-          3,
-        ),
+        error(diag.variablePatternKeywordInDeclarationContext, 19, 3),
       ],
     );
     var node = findNode.patternVariableDeclaration('= x').pattern;
@@ -11968,11 +11938,7 @@
 }
 ''',
       diagnostics: [
-        error(
-          ParserErrorCode.variablePatternKeywordInDeclarationContext,
-          23,
-          3,
-        ),
+        error(diag.variablePatternKeywordInDeclarationContext, 23, 3),
       ],
     );
     var node = findNode.patternVariableDeclaration('= x').pattern;
@@ -11996,11 +11962,7 @@
 }
 ''',
       diagnostics: [
-        error(
-          ParserErrorCode.variablePatternKeywordInDeclarationContext,
-          19,
-          3,
-        ),
+        error(diag.variablePatternKeywordInDeclarationContext, 19, 3),
       ],
     );
     var node = findNode.patternVariableDeclaration('= x').pattern;
@@ -12026,7 +11988,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.varAndType, 36, 3)],
+      diagnostics: [error(diag.varAndType, 36, 3)],
     );
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
@@ -12049,7 +12011,7 @@
   }
 }
 ''',
-      diagnostics: [error(ParserErrorCode.varAndType, 36, 3)],
+      diagnostics: [error(diag.varAndType, 36, 3)],
     );
     var node = findNode.singleGuardedPattern;
     assertParsedNodeText(node, r'''
@@ -12397,9 +12359,7 @@
   [a, final _] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 23, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 23, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -12426,9 +12386,7 @@
   [a, final int _] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 27, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 27, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -12457,9 +12415,7 @@
   [a, int _] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 21, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 21, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -12487,9 +12443,7 @@
   [a, var _] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 21, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 21, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
@@ -12516,9 +12470,7 @@
   [a, var int _] = y;
 }
 ''',
-      diagnostics: [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 25, 1),
-      ],
+      diagnostics: [error(diag.patternAssignmentDeclaresVariable, 25, 1)],
     );
     var node = findNode.patternAssignment('=');
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/generated/recovery_parser_test.dart b/pkg/analyzer/test/generated/recovery_parser_test.dart
index 661b6a0..093e710 100644
--- a/pkg/analyzer/test/generated/recovery_parser_test.dart
+++ b/pkg/analyzer/test/generated/recovery_parser_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -24,7 +24,7 @@
 class RecoveryParserTest extends FastaParserTestCase {
   void test_additiveExpression_missing_LHS() {
     var expression =
-        parseExpression("+ y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("+ y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -34,10 +34,7 @@
     var expression =
         parseExpression(
               "+",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -48,7 +45,7 @@
 
   void test_additiveExpression_missing_RHS() {
     var expression =
-        parseExpression("x +", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x +", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -56,7 +53,7 @@
 
   void test_additiveExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super +", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super +", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -67,9 +64,9 @@
         parseExpression(
               "* +",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -81,9 +78,9 @@
         parseExpression(
               "+ *",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -94,10 +91,7 @@
     var expression =
         parseExpression(
               "super + +",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
@@ -105,7 +99,7 @@
 
   void test_assignableSelector() {
     var expression =
-        parseExpression("a.b[]", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("a.b[]", codes: [diag.missingIdentifier])
             as IndexExpression;
     var index = expression.index;
     expect(index, isSimpleIdentifier);
@@ -114,7 +108,7 @@
 
   void test_assignmentExpression_missing_compound1() {
     var expression =
-        parseExpression("= y = 0", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("= y = 0", codes: [diag.missingIdentifier])
             as AssignmentExpression;
     Expression syntheticExpression = expression.leftHandSide;
     expect(syntheticExpression, isSimpleIdentifier);
@@ -123,7 +117,7 @@
 
   void test_assignmentExpression_missing_compound2() {
     var expression =
-        parseExpression("x = = 0", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x = = 0", codes: [diag.missingIdentifier])
             as AssignmentExpression;
     Expression syntheticExpression =
         (expression.rightHandSide as AssignmentExpression).leftHandSide;
@@ -133,7 +127,7 @@
 
   void test_assignmentExpression_missing_compound3() {
     var expression =
-        parseExpression("x = y =", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x = y =", codes: [diag.missingIdentifier])
             as AssignmentExpression;
     Expression syntheticExpression =
         (expression.rightHandSide as AssignmentExpression).rightHandSide;
@@ -143,7 +137,7 @@
 
   void test_assignmentExpression_missing_LHS() {
     var expression =
-        parseExpression("= 0", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("= 0", codes: [diag.missingIdentifier])
             as AssignmentExpression;
     expect(expression.leftHandSide, isSimpleIdentifier);
     expect(expression.leftHandSide.isSynthetic, isTrue);
@@ -151,7 +145,7 @@
 
   void test_assignmentExpression_missing_RHS() {
     var expression =
-        parseExpression("x =", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x =", codes: [diag.missingIdentifier])
             as AssignmentExpression;
     expect(expression.leftHandSide, isSimpleIdentifier);
     expect(expression.rightHandSide.isSynthetic, isTrue);
@@ -159,7 +153,7 @@
 
   void test_bitwiseAndExpression_missing_LHS() {
     var expression =
-        parseExpression("& y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("& y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -169,10 +163,7 @@
     var expression =
         parseExpression(
               "&",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -183,7 +174,7 @@
 
   void test_bitwiseAndExpression_missing_RHS() {
     var expression =
-        parseExpression("x &", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x &", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -191,7 +182,7 @@
 
   void test_bitwiseAndExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super &", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super &", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -202,9 +193,9 @@
         parseExpression(
               "== &&",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -216,9 +207,9 @@
         parseExpression(
               "&& ==",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -229,10 +220,7 @@
     var expression =
         parseExpression(
               "super &  &",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
@@ -240,7 +228,7 @@
 
   void test_bitwiseOrExpression_missing_LHS() {
     var expression =
-        parseExpression("| y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("| y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -250,10 +238,7 @@
     var expression =
         parseExpression(
               "|",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -264,7 +249,7 @@
 
   void test_bitwiseOrExpression_missing_RHS() {
     var expression =
-        parseExpression("x |", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x |", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -272,7 +257,7 @@
 
   void test_bitwiseOrExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super |", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super |", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -283,9 +268,9 @@
         parseExpression(
               "^ |",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -297,9 +282,9 @@
         parseExpression(
               "| ^",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -310,10 +295,7 @@
     var expression =
         parseExpression(
               "super |  |",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
@@ -321,7 +303,7 @@
 
   void test_bitwiseXorExpression_missing_LHS() {
     var expression =
-        parseExpression("^ y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("^ y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -331,10 +313,7 @@
     var expression =
         parseExpression(
               "^",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -345,7 +324,7 @@
 
   void test_bitwiseXorExpression_missing_RHS() {
     var expression =
-        parseExpression("x ^", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x ^", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -353,7 +332,7 @@
 
   void test_bitwiseXorExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super ^", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super ^", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -364,9 +343,9 @@
         parseExpression(
               "& ^",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -378,9 +357,9 @@
         parseExpression(
               "^ &",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -391,10 +370,7 @@
     var expression =
         parseExpression(
               "super ^  ^",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
@@ -407,7 +383,7 @@
 class B = Object with A {}''',
       codes:
           // TODO(danrubel): Consolidate and improve error message.
-          [ParserErrorCode.expectedExecutable, ParserErrorCode.expectedToken],
+          [diag.expectedExecutable, diag.expectedToken],
     );
   }
 
@@ -415,25 +391,23 @@
     createParser('import "/testB.dart" show @');
     parser.parseCompilationUnit2();
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 26, 1),
-      expectedError(ParserErrorCode.expectedToken, 26, 1),
-      expectedError(ParserErrorCode.expectedToken, 26, 1),
-      expectedError(ParserErrorCode.missingConstFinalVarOrType, 27, 0),
+      expectedError(diag.missingIdentifier, 26, 1),
+      expectedError(diag.expectedToken, 26, 1),
+      expectedError(diag.expectedToken, 26, 1),
+      expectedError(diag.missingConstFinalVarOrType, 27, 0),
     ]);
   }
 
   void test_combinator_missingIdentifier() {
     createParser('import "/testB.dart" show ;');
     parser.parseCompilationUnit2();
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 26, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingIdentifier, 26, 1)]);
   }
 
   void test_conditionalExpression_missingElse() {
     Expression expression = parseExpression(
       'x ? y :',
-      codes: [ParserErrorCode.missingIdentifier],
+      codes: [diag.missingIdentifier],
     );
     expectNotNullIfNoErrors(expression);
     expect(expression, isConditionalExpression);
@@ -445,7 +419,7 @@
   void test_conditionalExpression_missingThen() {
     Expression expression = parseExpression(
       'x ? : z',
-      codes: [ParserErrorCode.missingIdentifier],
+      codes: [diag.missingIdentifier],
     );
     expectNotNullIfNoErrors(expression);
     expect(expression, isConditionalExpression);
@@ -457,38 +431,31 @@
   void test_conditionalExpression_super() {
     parseExpression(
       'x ? super : z',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 4, 5),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 4, 5)],
     );
   }
 
   void test_conditionalExpression_super2() {
     parseExpression(
       'x ? z : super',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 8, 5),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 8, 5)],
     );
   }
 
   void test_declarationBeforeDirective() {
     CompilationUnit unit = parseCompilationUnit(
       "class foo { } import 'bar.dart';",
-      codes: [ParserErrorCode.directiveAfterDeclaration],
+      codes: [diag.directiveAfterDeclaration],
     );
     expect(unit.directives, hasLength(1));
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.childEntities.first as ClassDeclaration;
     expect(classDecl, isNotNull);
-    expect(classDecl.name.lexeme, 'foo');
+    expect(classDecl.namePart.typeName.lexeme, 'foo');
   }
 
   void test_dotShorthand_missing_identifier() {
-    var result = parseExpression(
-      ".",
-      codes: [ParserErrorCode.missingIdentifier],
-    );
+    var result = parseExpression(".", codes: [diag.missingIdentifier]);
     var expression = result as DotShorthandPropertyAccess;
     expect(expression.period.lexeme, '.');
     expect(expression.propertyName.isSynthetic, isTrue);
@@ -496,7 +463,7 @@
 
   void test_equalityExpression_missing_LHS() {
     var expression =
-        parseExpression("== y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("== y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -506,10 +473,7 @@
     var expression =
         parseExpression(
               "==",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -520,7 +484,7 @@
 
   void test_equalityExpression_missing_RHS() {
     var expression =
-        parseExpression("x ==", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x ==", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -528,7 +492,7 @@
 
   void test_equalityExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super ==", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super ==", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -538,9 +502,9 @@
     parseExpression(
       "== is",
       codes: [
-        ParserErrorCode.expectedTypeName,
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.missingIdentifier,
+        diag.expectedTypeName,
+        diag.missingIdentifier,
+        diag.missingIdentifier,
       ],
     );
   }
@@ -550,9 +514,9 @@
         parseExpression(
               "super ==  ==",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.equalityCannotBeEqualityOperand,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.equalityCannotBeEqualityOperand,
               ],
             )
             as BinaryExpression;
@@ -562,9 +526,7 @@
   void test_equalityExpression_superRHS() {
     parseExpression(
       "1 == super",
-      diagnostics: [
-        expectedError(ParserErrorCode.missingAssignableSelector, 5, 5),
-      ],
+      diagnostics: [expectedError(diag.missingAssignableSelector, 5, 5)],
     );
   }
 
@@ -572,7 +534,7 @@
     List<Expression> result = parseExpressionList(', 2, 3, 4');
     expectNotNullIfNoErrors(result);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.missingIdentifier]);
+    listener.assertErrorsWithCodes([diag.missingIdentifier]);
     //    listener.assertErrors(
     //        [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 1)]);
     expect(result, hasLength(4));
@@ -585,7 +547,7 @@
     List<Expression> result = parseExpressionList('1, 2, , 4');
     expectNotNullIfNoErrors(result);
     // TODO(brianwilkerson): Convert codes to errors when highlighting is fixed.
-    listener.assertErrorsWithCodes([ParserErrorCode.missingIdentifier]);
+    listener.assertErrorsWithCodes([diag.missingIdentifier]);
     //    listener.assertErrors(
     //        [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 1)]);
     expect(result, hasLength(4));
@@ -607,11 +569,12 @@
   void test_functionExpression_in_ConstructorFieldInitializer() {
     CompilationUnit unit = parseCompilationUnit(
       "class A { A() : a = (){}; var v; }",
-      codes: [ParserErrorCode.expectedClassMember],
+      codes: [diag.expectedClassMember],
     );
     // Make sure we recovered and parsed "var v" correctly
     ClassDeclaration declaration = unit.declarations[0] as ClassDeclaration;
-    NodeList<ClassMember> members = declaration.members;
+    var classBody = declaration.body as BlockClassBody;
+    NodeList<ClassMember> members = classBody.members;
     ClassMember fieldDecl = members[1];
     expect(fieldDecl, isFieldDeclaration);
     NodeList<VariableDeclaration> vars =
@@ -624,19 +587,19 @@
     parseExpression(
       "m(f() => 0);",
       expectedEndOffset: 11,
-      codes: [ParserErrorCode.namedFunctionExpression],
+      codes: [diag.namedFunctionExpression],
     );
   }
 
   void test_ifStatement_noElse_statement() {
     parseStatement('if (x v) f(x);');
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 6, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 6, 1)]);
   }
 
   void test_importDirectivePartial_as() {
     CompilationUnit unit = parseCompilationUnit(
       "import 'b.dart' d as b;",
-      codes: [ParserErrorCode.unexpectedToken],
+      codes: [diag.unexpectedToken],
     );
     var importDirective = unit.childEntities.first as ImportDirective;
     expect(importDirective.asKeyword, isNotNull);
@@ -647,7 +610,7 @@
   void test_importDirectivePartial_hide() {
     CompilationUnit unit = parseCompilationUnit(
       "import 'b.dart' d hide foo;",
-      codes: [ParserErrorCode.unexpectedToken],
+      codes: [diag.unexpectedToken],
     );
     var importDirective = unit.childEntities.first as ImportDirective;
     expect(importDirective.combinators, hasLength(1));
@@ -658,7 +621,7 @@
   void test_importDirectivePartial_show() {
     CompilationUnit unit = parseCompilationUnit(
       "import 'b.dart' d show foo;",
-      codes: [ParserErrorCode.unexpectedToken],
+      codes: [diag.unexpectedToken],
     );
     var importDirective = unit.childEntities.first as ImportDirective;
     expect(importDirective.combinators, hasLength(1));
@@ -669,7 +632,7 @@
   void test_incomplete_conditionalExpression() {
     parseExpression(
       "x ? 0",
-      codes: [ParserErrorCode.expectedToken, ParserErrorCode.missingIdentifier],
+      codes: [diag.expectedToken, diag.missingIdentifier],
     );
   }
 
@@ -677,9 +640,7 @@
     createParser('C() : {}');
     var member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.missingInitializer, 4, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.missingInitializer, 4, 1)]);
   }
 
   void test_incomplete_constructorInitializers_missingEquals() {
@@ -687,7 +648,7 @@
     var member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignmentInInitializer, 6, 1),
+      expectedError(diag.missingAssignmentInInitializer, 6, 1),
     ]);
     expect(member, isConstructorDeclaration);
     NodeList<ConstructorInitializer> initializers =
@@ -706,8 +667,8 @@
     var member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 11, 1),
-      expectedError(ParserErrorCode.missingAssignmentInInitializer, 6, 4),
+      expectedError(diag.expectedToken, 11, 1),
+      expectedError(diag.missingAssignmentInInitializer, 6, 4),
     ]);
   }
 
@@ -716,7 +677,7 @@
     var member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignmentInInitializer, 6, 4),
+      expectedError(diag.missingAssignmentInInitializer, 6, 4),
     ]);
   }
 
@@ -725,8 +686,8 @@
     var member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingIdentifier, 12, 1),
-      expectedError(ParserErrorCode.missingAssignmentInInitializer, 6, 4),
+      expectedError(diag.missingIdentifier, 12, 1),
+      expectedError(diag.missingAssignmentInInitializer, 6, 4),
     ]);
   }
 
@@ -735,14 +696,14 @@
     var member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.missingAssignmentInInitializer, 6, 1),
+      expectedError(diag.missingAssignmentInInitializer, 6, 1),
     ]);
   }
 
   void test_incomplete_functionExpression() {
     var expression = parseExpression(
       "() a => null",
-      diagnostics: [expectedError(ParserErrorCode.unexpectedToken, 3, 1)],
+      diagnostics: [expectedError(diag.unexpectedToken, 3, 1)],
     );
     var functionExpression = expression as FunctionExpression;
     expect(functionExpression.parameters!.parameters, hasLength(0));
@@ -751,7 +712,7 @@
   void test_incomplete_functionExpression2() {
     var expression = parseExpression(
       "() a {}",
-      diagnostics: [expectedError(ParserErrorCode.unexpectedToken, 3, 1)],
+      diagnostics: [expectedError(diag.unexpectedToken, 3, 1)],
     );
     var functionExpression = expression as FunctionExpression;
     expect(functionExpression.parameters!.parameters, hasLength(0));
@@ -769,25 +730,22 @@
   return result;
 }''',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 12, 24),
-        expectedError(ParserErrorCode.missingFunctionParameters, 0, 3),
+        expectedError(diag.expectedToken, 12, 24),
+        expectedError(diag.missingFunctionParameters, 0, 3),
       ],
     );
   }
 
   void test_incomplete_topLevelFunction() {
-    parseCompilationUnit(
-      "foo();",
-      codes: [ParserErrorCode.missingFunctionBody],
-    );
+    parseCompilationUnit("foo();", codes: [diag.missingFunctionBody]);
   }
 
   void test_incomplete_topLevelVariable() {
     CompilationUnit unit = parseCompilationUnit(
       "String",
       diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 0, 6),
-        expectedError(ParserErrorCode.expectedToken, 0, 6),
+        expectedError(diag.missingConstFinalVarOrType, 0, 6),
+        expectedError(diag.expectedToken, 0, 6),
       ],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
@@ -804,7 +762,7 @@
   void test_incomplete_topLevelVariable_const() {
     CompilationUnit unit = parseCompilationUnit(
       "const ",
-      codes: [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      codes: [diag.missingIdentifier, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
@@ -820,7 +778,7 @@
   void test_incomplete_topLevelVariable_final() {
     CompilationUnit unit = parseCompilationUnit(
       "final ",
-      codes: [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      codes: [diag.missingIdentifier, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
@@ -836,7 +794,7 @@
   void test_incomplete_topLevelVariable_var() {
     CompilationUnit unit = parseCompilationUnit(
       "var ",
-      codes: [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      codes: [diag.missingIdentifier, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
@@ -855,13 +813,14 @@
 class C {
   const
 }''',
-      codes: [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      codes: [diag.missingIdentifier, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
     expect(unitMember, isClassDeclaration);
-    NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
+    NodeList<ClassMember> members =
+        ((unitMember as ClassDeclaration).body as BlockClassBody).members;
     expect(members, hasLength(1));
     ClassMember classMember = members[0];
     expect(classMember, isFieldDeclaration);
@@ -880,13 +839,14 @@
 class C {
   final
 }''',
-      codes: [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      codes: [diag.missingIdentifier, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
     expect(unitMember, isClassDeclaration);
-    NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
+    NodeList<ClassMember> members =
+        ((unitMember as ClassDeclaration).body as BlockClassBody).members;
     expect(members, hasLength(1));
     ClassMember classMember = members[0];
     expect(classMember, isFieldDeclaration);
@@ -905,16 +865,14 @@
 class C {
   static c
 }''',
-      codes: [
-        ParserErrorCode.missingConstFinalVarOrType,
-        ParserErrorCode.expectedToken,
-      ],
+      codes: [diag.missingConstFinalVarOrType, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
     expect(unitMember, isClassDeclaration);
-    NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
+    NodeList<ClassMember> members =
+        ((unitMember as ClassDeclaration).body as BlockClassBody).members;
     expect(members, hasLength(1));
     ClassMember classMember = members[0];
     expect(classMember, isFieldDeclaration);
@@ -934,13 +892,14 @@
 class C {
   static c x
 }''',
-      codes: [ParserErrorCode.expectedToken],
+      codes: [diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
     expect(unitMember, isClassDeclaration);
-    NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
+    NodeList<ClassMember> members =
+        ((unitMember as ClassDeclaration).body as BlockClassBody).members;
     expect(members, hasLength(1));
     ClassMember classMember = members[0];
     expect(classMember, isFieldDeclaration);
@@ -960,16 +919,14 @@
 class C {
   A
 }''',
-      codes: [
-        ParserErrorCode.missingConstFinalVarOrType,
-        ParserErrorCode.expectedToken,
-      ],
+      codes: [diag.missingConstFinalVarOrType, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
     expect(unitMember, isClassDeclaration);
-    NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
+    NodeList<ClassMember> members =
+        ((unitMember as ClassDeclaration).body as BlockClassBody).members;
     expect(members, hasLength(1));
     ClassMember classMember = members[0];
     expect(classMember, isFieldDeclaration);
@@ -989,13 +946,14 @@
 class C {
   var
 }''',
-      codes: [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      codes: [diag.missingIdentifier, diag.expectedToken],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember unitMember = declarations[0];
     expect(unitMember, isClassDeclaration);
-    NodeList<ClassMember> members = (unitMember as ClassDeclaration).members;
+    NodeList<ClassMember> members =
+        ((unitMember as ClassDeclaration).body as BlockClassBody).members;
     expect(members, hasLength(1));
     ClassMember classMember = members[0];
     expect(classMember, isFieldDeclaration);
@@ -1013,8 +971,8 @@
     // entry parsing is enabled by default
     var statement = parseStatement('for (String item i) {}') as ForStatement;
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 12, 4),
-      expectedError(ParserErrorCode.expectedToken, 17, 1),
+      expectedError(diag.expectedToken, 12, 4),
+      expectedError(diag.expectedToken, 17, 1),
     ]);
     expect(statement, isForStatement);
     expect(statement.toSource(), 'for (String item; i;) {}');
@@ -1028,8 +986,8 @@
   void test_incompleteForEach2() {
     var statement = parseStatement('for (String item i) {}') as ForStatement;
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 12, 4),
-      expectedError(ParserErrorCode.expectedToken, 17, 1),
+      expectedError(diag.expectedToken, 12, 4),
+      expectedError(diag.expectedToken, 17, 1),
     ]);
     expect(statement.toSource(), 'for (String item; i;) {}');
     var forLoopParts = statement.forLoopParts as ForPartsWithDeclarations;
@@ -1041,7 +999,7 @@
 
   void test_incompleteLocalVariable_atTheEndOfBlock() {
     Statement statement = parseStatement('String v }', expectedEndOffset: 9);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'String v;');
   }
@@ -1049,8 +1007,8 @@
   void test_incompleteLocalVariable_atTheEndOfBlock_modifierOnly() {
     Statement statement = parseStatement('final }', expectedEndOffset: 6);
     listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 0, 5),
-      expectedError(ParserErrorCode.missingIdentifier, 6, 1),
+      expectedError(diag.expectedToken, 0, 5),
+      expectedError(diag.missingIdentifier, 6, 1),
     ]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'final ;');
@@ -1061,7 +1019,7 @@
       'String v String v2;',
       expectedEndOffset: 9,
     );
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'String v;');
   }
@@ -1071,14 +1029,14 @@
       'String v if (true) {}',
       expectedEndOffset: 9,
     );
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'String v;');
   }
 
   void test_incompleteLocalVariable_beforeNextBlock() {
     Statement statement = parseStatement('String v {}', expectedEndOffset: 9);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 7, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 7, 1)]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'String v;');
   }
@@ -1088,9 +1046,7 @@
       'List<String> v {}',
       expectedEndOffset: 15,
     );
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedToken, 13, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedToken, 13, 1)]);
     expect(statement, isVariableDeclarationStatement);
     expect(statement.toSource(), 'List<String> v;');
   }
@@ -1101,14 +1057,14 @@
 class C {
   final List<int f;
 }''',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 23, 3)],
+      diagnostics: [expectedError(diag.expectedToken, 23, 3)],
     );
     // one class
     List<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     ClassDeclaration classDecl = declarations[0] as ClassDeclaration;
     // one field declaration
-    List<ClassMember> members = classDecl.members;
+    List<ClassMember> members = (classDecl.body as BlockClassBody).members;
     expect(members, hasLength(1));
     FieldDeclaration fieldDecl = members[0] as FieldDeclaration;
     // one field
@@ -1131,14 +1087,14 @@
       r'''
 class C<K {
 }''',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 8, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 8, 1)],
     );
     // one class
     List<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     ClassDeclaration classDecl = declarations[0] as ClassDeclaration;
     // validate the type parameters
-    var typeParameters = classDecl.typeParameters!;
+    var typeParameters = classDecl.namePart.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
     // synthetic '>'
     Token token = typeParameters.endToken;
@@ -1151,14 +1107,14 @@
       r'''
 class C<K extends L<T> {
 }''',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 21, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 21, 1)],
     );
     // one class
     List<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     ClassDeclaration classDecl = declarations[0] as ClassDeclaration;
     // validate the type parameters
-    var typeParameters = classDecl.typeParameters!;
+    var typeParameters = classDecl.namePart.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
     // synthetic '>'
     Token token = typeParameters.endToken;
@@ -1171,14 +1127,14 @@
       r'''
 class C<K extends L<T {
 }''',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 20, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 20, 1)],
     );
     // one class
     List<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     ClassDeclaration classDecl = declarations[0] as ClassDeclaration;
     // validate the type parameters
-    var typeParameters = classDecl.typeParameters!;
+    var typeParameters = classDecl.namePart.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
     // synthetic '>'
     Token token = typeParameters.endToken;
@@ -1187,24 +1143,21 @@
   }
 
   void test_invalidFunctionBodyModifier() {
-    parseCompilationUnit(
-      "f() sync {}",
-      codes: [ParserErrorCode.missingStarAfterSync],
-    );
+    parseCompilationUnit("f() sync {}", codes: [diag.missingStarAfterSync]);
   }
 
   void test_invalidMapLiteral() {
     parseCompilationUnit(
       "class C { var f = Map<A, B> {}; }",
-      codes: [ParserErrorCode.literalWithClass],
+      codes: [diag.literalWithClass],
     );
     parseCompilationUnit(
       "class C { var f = new Map<A, B> {}; }",
-      codes: [ParserErrorCode.literalWithClassAndNew],
+      codes: [diag.literalWithClassAndNew],
     );
     parseCompilationUnit(
       "class C { var f = new <A, B> {}; }",
-      codes: [ParserErrorCode.literalWithNew],
+      codes: [diag.literalWithNew],
     );
   }
 
@@ -1214,15 +1167,16 @@
 class C {
   G<int double> g;
 }''',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 18, 6)],
+      diagnostics: [expectedError(diag.expectedToken, 18, 6)],
     );
     // one class
     List<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     // validate members
     ClassDeclaration classDecl = declarations[0] as ClassDeclaration;
-    expect(classDecl.members, hasLength(1));
-    var fields = classDecl.members.first as FieldDeclaration;
+    var classBody = classDecl.body as BlockClassBody;
+    expect(classBody.members, hasLength(1));
+    var fields = classBody.members.first as FieldDeclaration;
     expect(fields.fields.variables, hasLength(1));
     VariableDeclaration field = fields.fields.variables.first;
     expect(field.name.lexeme, 'g');
@@ -1231,7 +1185,7 @@
   void test_invalidTypeParameters_super() {
     parseCompilationUnit(
       'class C<X super Y> {}',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 8, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 8, 1)],
     );
   }
 
@@ -1239,14 +1193,15 @@
     CompilationUnit unit = parseCompilationUnit(
       "class Bar<T extends Foo> {m(x){if (x is ) return;if (x is !)}}",
       codes: [
-        ParserErrorCode.expectedTypeName,
-        ParserErrorCode.expectedTypeName,
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.expectedToken,
+        diag.expectedTypeName,
+        diag.expectedTypeName,
+        diag.missingIdentifier,
+        diag.expectedToken,
       ],
     );
     ClassDeclaration declaration = unit.declarations[0] as ClassDeclaration;
-    MethodDeclaration method = declaration.members[0] as MethodDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    MethodDeclaration method = classBody.members[0] as MethodDeclaration;
     BlockFunctionBody body = method.body as BlockFunctionBody;
     IfStatement ifStatement = body.block.statements[1] as IfStatement;
     IsExpression expression = ifStatement.expression as IsExpression;
@@ -1266,12 +1221,13 @@
     var unit = parseCompilationUnit(
       'class C { get C.named => null; }',
       diagnostics: [
-        expectedError(ParserErrorCode.getterConstructor, 10, 3),
-        expectedError(ParserErrorCode.missingMethodParameters, 14, 1),
+        expectedError(diag.getterConstructor, 10, 3),
+        expectedError(diag.missingMethodParameters, 14, 1),
       ],
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var method = declaration.members[0] as ConstructorDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var method = classBody.members[0] as ConstructorDeclaration;
     expect(method.name!.lexeme, 'named');
     expect(method.parameters, isNotNull);
   }
@@ -1279,12 +1235,11 @@
   void test_issue_34610_initializers() {
     var unit = parseCompilationUnit(
       'class C { C.named : super(); }',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingMethodParameters, 10, 1),
-      ],
+      diagnostics: [expectedError(diag.missingMethodParameters, 10, 1)],
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var constructor = declaration.members[0] as ConstructorDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     expect(constructor.name!.lexeme, 'named');
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, hasLength(0));
@@ -1293,12 +1248,11 @@
   void test_issue_34610_missing_param() {
     var unit = parseCompilationUnit(
       'class C { C => null; }',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingMethodParameters, 10, 1),
-      ],
+      diagnostics: [expectedError(diag.missingMethodParameters, 10, 1)],
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var constructor = declaration.members[0] as ConstructorDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     expect(constructor.name, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, hasLength(0));
@@ -1307,12 +1261,11 @@
   void test_issue_34610_named_missing_param() {
     var unit = parseCompilationUnit(
       'class C { C.named => null; }',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingMethodParameters, 10, 1),
-      ],
+      diagnostics: [expectedError(diag.missingMethodParameters, 10, 1)],
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var constructor = declaration.members[0] as ConstructorDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var constructor = classBody.members[0] as ConstructorDeclaration;
     expect(constructor.name!.lexeme, 'named');
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, hasLength(0));
@@ -1322,12 +1275,13 @@
     var unit = parseCompilationUnit(
       'class C { set C.named => null; }',
       diagnostics: [
-        expectedError(ParserErrorCode.setterConstructor, 10, 3),
-        expectedError(ParserErrorCode.missingMethodParameters, 14, 1),
+        expectedError(diag.setterConstructor, 10, 3),
+        expectedError(diag.missingMethodParameters, 14, 1),
       ],
     );
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var method = declaration.members[0] as ConstructorDeclaration;
+    var classBody = declaration.body as BlockClassBody;
+    var method = classBody.members[0] as ConstructorDeclaration;
     expect(method.name!.lexeme, 'named');
     expect(method.parameters, isNotNull);
     expect(method.parameters.parameters, hasLength(0));
@@ -1337,13 +1291,13 @@
     // TODO(brianwilkerson): We could do better with this.
     parseCompilationUnit(
       "do() {}",
-      codes: [ParserErrorCode.expectedIdentifierButGotKeyword],
+      codes: [diag.expectedIdentifierButGotKeyword],
     );
   }
 
   void test_logicalAndExpression_missing_LHS() {
     var expression =
-        parseExpression("&& y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("&& y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -1353,10 +1307,7 @@
     var expression =
         parseExpression(
               "&&",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -1367,7 +1318,7 @@
 
   void test_logicalAndExpression_missing_RHS() {
     var expression =
-        parseExpression("x &&", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x &&", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -1378,9 +1329,9 @@
         parseExpression(
               "| &&",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -1392,9 +1343,9 @@
         parseExpression(
               "&& |",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -1403,7 +1354,7 @@
 
   void test_logicalOrExpression_missing_LHS() {
     var expression =
-        parseExpression("|| y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("|| y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -1413,10 +1364,7 @@
     var expression =
         parseExpression(
               "||",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -1427,7 +1375,7 @@
 
   void test_logicalOrExpression_missing_RHS() {
     var expression =
-        parseExpression("x ||", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x ||", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -1438,9 +1386,9 @@
         parseExpression(
               "&& ||",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -1452,9 +1400,9 @@
         parseExpression(
               "|| &&",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -1464,7 +1412,7 @@
   void test_method_missingBody() {
     parseCompilationUnit(
       "class C { b() }",
-      diagnostics: [expectedError(ParserErrorCode.missingFunctionBody, 14, 1)],
+      diagnostics: [expectedError(diag.missingFunctionBody, 14, 1)],
     );
   }
 
@@ -1472,7 +1420,7 @@
     var expression =
         parseExpression(
               "f(x: 1 y: 2)",
-              diagnostics: [expectedError(ParserErrorCode.expectedToken, 7, 1)],
+              diagnostics: [expectedError(diag.expectedToken, 7, 1)],
             )
             as MethodInvocation;
     NodeList<Expression> arguments = expression.argumentList.arguments;
@@ -1483,7 +1431,7 @@
     createParser('(a b: c)');
     ArgumentList argumentList = parser.parseArgumentList();
     expectNotNullIfNoErrors(argumentList);
-    listener.assertErrors([expectedError(ParserErrorCode.expectedToken, 3, 1)]);
+    listener.assertErrors([expectedError(diag.expectedToken, 3, 1)]);
     expect(argumentList.arguments, hasLength(2));
   }
 
@@ -1494,14 +1442,13 @@
   int length {}
   void foo() {}
 }''',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingMethodParameters, 16, 6),
-      ],
+      diagnostics: [expectedError(diag.missingMethodParameters, 16, 6)],
     );
     expect(unit, isNotNull);
     ClassDeclaration classDeclaration =
         unit.declarations[0] as ClassDeclaration;
-    NodeList<ClassMember> members = classDeclaration.members;
+    var classBody = classDeclaration.body as BlockClassBody;
+    NodeList<ClassMember> members = classBody.members;
     expect(members, hasLength(2));
     expect(members[0], isMethodDeclaration);
     ClassMember member = members[1];
@@ -1513,9 +1460,7 @@
     createParser('@override }', expectedEndOffset: 10);
     var member = parser.parseClassMemberOrNull('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors([
-      expectedError(ParserErrorCode.expectedClassMember, 10, 1),
-    ]);
+    listener.assertErrors([expectedError(diag.expectedClassMember, 10, 1)]);
     // TODO(danrubel): Consider generating a sub method so that the
     // existing annotation can be associated with a class member.
     expect(member, isNull);
@@ -1550,10 +1495,7 @@
     // would be to insert a synthetic comma after the `n`.
     CompilationUnit unit = parseCompilationUnit(
       'String n x = "";',
-      codes: [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingConstFinalVarOrType,
-      ],
+      codes: [diag.expectedToken, diag.missingConstFinalVarOrType],
     );
     expect(unit, isNotNull);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
@@ -1564,7 +1506,7 @@
 
   void test_multiplicativeExpression_missing_LHS() {
     var expression =
-        parseExpression("* y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("* y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -1574,10 +1516,7 @@
     var expression =
         parseExpression(
               "*",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -1588,7 +1527,7 @@
 
   void test_multiplicativeExpression_missing_RHS() {
     var expression =
-        parseExpression("x *", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x *", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -1596,7 +1535,7 @@
 
   void test_multiplicativeExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super *", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super *", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -1604,14 +1543,14 @@
 
   void test_multiplicativeExpression_precedence_unary_left() {
     var expression =
-        parseExpression("-x *", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("-x *", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isPrefixExpression);
   }
 
   void test_multiplicativeExpression_precedence_unary_right() {
     var expression =
-        parseExpression("* -y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("* -y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isPrefixExpression);
   }
@@ -1621,9 +1560,9 @@
         parseExpression(
               "super ==  ==",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.equalityCannotBeEqualityOperand,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.equalityCannotBeEqualityOperand,
               ],
             )
             as BinaryExpression;
@@ -1634,14 +1573,15 @@
     CompilationUnit unit = parseCompilationUnit(
       'class A { b(c: 0, Foo d: 0, e){} }',
       diagnostics: [
-        expectedError(ParserErrorCode.namedParameterOutsideGroup, 13, 1),
-        expectedError(ParserErrorCode.namedParameterOutsideGroup, 23, 1),
+        expectedError(diag.namedParameterOutsideGroup, 13, 1),
+        expectedError(diag.namedParameterOutsideGroup, 23, 1),
       ],
     );
     expect(unit.declarations, hasLength(1));
     var classA = unit.declarations[0] as ClassDeclaration;
-    expect(classA.members, hasLength(1));
-    var method = classA.members[0] as MethodDeclaration;
+    var classBody = classA.body as BlockClassBody;
+    expect(classBody.members, hasLength(1));
+    var method = classBody.members[0] as MethodDeclaration;
     List<FormalParameter> parameters = method.parameters!.parameters;
     expect(parameters, hasLength(3));
     expect(parameters[0].isNamed, isTrue);
@@ -1653,19 +1593,19 @@
     parseCompilationUnit(
       "import dart:io; class C {}",
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 0, 6),
-        expectedError(ParserErrorCode.expectedStringLiteral, 7, 4),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 7, 4),
-        expectedError(ParserErrorCode.expectedToken, 7, 4),
-        expectedError(ParserErrorCode.expectedExecutable, 11, 1),
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 12, 2),
+        expectedError(diag.expectedToken, 0, 6),
+        expectedError(diag.expectedStringLiteral, 7, 4),
+        expectedError(diag.missingConstFinalVarOrType, 7, 4),
+        expectedError(diag.expectedToken, 7, 4),
+        expectedError(diag.expectedExecutable, 11, 1),
+        expectedError(diag.missingConstFinalVarOrType, 12, 2),
       ],
     );
   }
 
   void test_prefixExpression_missing_operand_minus() {
     var expression =
-        parseExpression("-", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("-", codes: [diag.missingIdentifier])
             as PrefixExpression;
     expect(expression.operand, isSimpleIdentifier);
     expect(expression.operand.isSynthetic, isTrue);
@@ -1677,9 +1617,7 @@
         parsePrimaryExpression(
               '?a',
               expectedEndOffset: 0,
-              diagnostics: [
-                expectedError(ParserErrorCode.missingIdentifier, 0, 1),
-              ],
+              diagnostics: [expectedError(diag.missingIdentifier, 0, 1)],
             )
             as SimpleIdentifier;
     expectNotNullIfNoErrors(expression);
@@ -1688,7 +1626,7 @@
 
   void test_relationalExpression_missing_LHS() {
     var expression =
-        parseExpression("is y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("is y", codes: [diag.missingIdentifier])
             as IsExpression;
     expect(expression.expression, isSimpleIdentifier);
     expect(expression.expression.isSynthetic, isTrue);
@@ -1697,17 +1635,13 @@
   void test_relationalExpression_missing_LHS_RHS() {
     parseExpression(
       "is",
-      codes: [
-        ParserErrorCode.expectedTypeName,
-        ParserErrorCode.missingIdentifier,
-      ],
+      codes: [diag.expectedTypeName, diag.missingIdentifier],
     );
   }
 
   void test_relationalExpression_missing_RHS() {
     var expression =
-        parseExpression("x is", codes: [ParserErrorCode.expectedTypeName])
-            as IsExpression;
+        parseExpression("x is", codes: [diag.expectedTypeName]) as IsExpression;
     expect(expression.type, isNamedType);
     expect(expression.type.isSynthetic, isTrue);
   }
@@ -1716,16 +1650,16 @@
     parseExpression(
       "<< is",
       codes: [
-        ParserErrorCode.expectedTypeName,
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.missingIdentifier,
+        diag.expectedTypeName,
+        diag.missingIdentifier,
+        diag.missingIdentifier,
       ],
     );
   }
 
   void test_shiftExpression_missing_LHS() {
     var expression =
-        parseExpression("<< y", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("<< y", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
     expect(expression.leftOperand.isSynthetic, isTrue);
@@ -1735,10 +1669,7 @@
     var expression =
         parseExpression(
               "<<",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isSimpleIdentifier);
@@ -1749,7 +1680,7 @@
 
   void test_shiftExpression_missing_RHS() {
     var expression =
-        parseExpression("x <<", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("x <<", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -1757,7 +1688,7 @@
 
   void test_shiftExpression_missing_RHS_super() {
     var expression =
-        parseExpression("super <<", codes: [ParserErrorCode.missingIdentifier])
+        parseExpression("super <<", codes: [diag.missingIdentifier])
             as BinaryExpression;
     expect(expression.rightOperand, isSimpleIdentifier);
     expect(expression.rightOperand.isSynthetic, isTrue);
@@ -1768,9 +1699,9 @@
         parseExpression(
               "+ <<",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -1782,9 +1713,9 @@
         parseExpression(
               "<< +",
               codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
+                diag.missingIdentifier,
               ],
             )
             as BinaryExpression;
@@ -1795,10 +1726,7 @@
     var expression =
         parseExpression(
               "super << <<",
-              codes: [
-                ParserErrorCode.missingIdentifier,
-                ParserErrorCode.missingIdentifier,
-              ],
+              codes: [diag.missingIdentifier, diag.missingIdentifier],
             )
             as BinaryExpression;
     expect(expression.leftOperand, isBinaryExpression);
@@ -1807,10 +1735,7 @@
   void test_typedef_eof() {
     CompilationUnit unit = parseCompilationUnit(
       "typedef n",
-      codes: [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingTypedefParameters,
-      ],
+      codes: [diag.expectedToken, diag.missingTypedefParameters],
     );
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
@@ -1819,6 +1744,6 @@
   }
 
   void test_unaryPlus() {
-    parseExpression("+2", codes: [ParserErrorCode.missingIdentifier]);
+    parseExpression("+2", codes: [diag.missingIdentifier]);
   }
 }
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 51f9912..94cb7a5 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../src/dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   assert (n is int);
   return n & 0x0F;
 }''',
-      [error(CompileTimeErrorCode.undefinedOperator, 47, 1)],
+      [error(diag.undefinedOperator, 47, 1)],
     );
   }
 
@@ -80,7 +80,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 110, 1)],
+      [error(diag.undefinedOperator, 110, 1)],
     );
   }
 
@@ -146,7 +146,7 @@
   num n = 1234;
   return n & 0x0F;
 }''',
-      [error(CompileTimeErrorCode.undefinedOperator, 37, 1)],
+      [error(diag.undefinedOperator, 37, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index ff3d9ce..e3a7dee 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -8,8 +8,7 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -111,9 +110,10 @@
 class C<@Foo.bar(const [], const [1], const{"":r""}, 0xFF + 2, .3, 4.5) T> {}
 ''');
     var clazz = unit.declarations[0] as ClassDeclaration;
-    expect(clazz.name.lexeme, 'C');
-    expect(clazz.typeParameters!.typeParameters, hasLength(1));
-    TypeParameter typeParameter = clazz.typeParameters!.typeParameters[0];
+    expect(clazz.namePart.typeName.lexeme, 'C');
+    expect(clazz.namePart.typeParameters!.typeParameters, hasLength(1));
+    TypeParameter typeParameter =
+        clazz.namePart.typeParameters!.typeParameters[0];
     expect(typeParameter.name.lexeme, 'T');
     expect(typeParameter.metadata, hasLength(1));
     Annotation metadata = typeParameter.metadata[0];
@@ -128,9 +128,9 @@
 }
 ''',
       diagnostics: [
-        expectedError(ParserErrorCode.invalidSuperInInitializer, 18, 5),
-        expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 24, 5),
-        expectedError(ParserErrorCode.missingIdentifier, 24, 5),
+        expectedError(diag.invalidSuperInInitializer, 18, 5),
+        expectedError(diag.expectedIdentifierButGotKeyword, 24, 5),
+        expectedError(diag.missingIdentifier, 24, 5),
       ],
     );
   }
@@ -143,11 +143,11 @@
 }
 ''',
       diagnostics: [
-        expectedError(ParserErrorCode.missingAssignmentInInitializer, 18, 4),
-        expectedError(ParserErrorCode.missingIdentifier, 23, 5),
-        expectedError(ParserErrorCode.missingFunctionBody, 23, 5),
-        expectedError(ParserErrorCode.constMethod, 23, 5),
-        expectedError(ParserErrorCode.missingIdentifier, 28, 1),
+        expectedError(diag.missingAssignmentInInitializer, 18, 4),
+        expectedError(diag.missingIdentifier, 23, 5),
+        expectedError(diag.missingFunctionBody, 23, 5),
+        expectedError(diag.constMethod, 23, 5),
+        expectedError(diag.missingIdentifier, 28, 1),
       ],
     );
   }
@@ -156,10 +156,11 @@
     // https://github.com/dart-lang/sdk/issues/37733
     var unit = parseCompilationUnit(
       r'class C { f(<T>()); }',
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 12, 1)],
+      diagnostics: [expectedError(diag.missingIdentifier, 12, 1)],
     );
     var classDeclaration = unit.declarations[0] as ClassDeclaration;
-    var method = classDeclaration.members[0] as MethodDeclaration;
+    var classBody = classDeclaration.body as BlockClassBody;
+    var method = classBody.members[0] as MethodDeclaration;
     expect(method.parameters!.parameters, hasLength(1));
     var parameter =
         method.parameters!.parameters[0] as FunctionTypedFormalParameter;
@@ -736,7 +737,7 @@
     createParser('{}');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -755,7 +756,7 @@
     createParser('async {}');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -775,7 +776,7 @@
     createParser('async* {}');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -795,7 +796,7 @@
     createParser('sync* {}');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -815,7 +816,7 @@
     createParser(';');
     FunctionBody functionBody = parser.parseFunctionBody(
       true,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -829,7 +830,7 @@
     createParser('=> y;');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -849,7 +850,7 @@
     createParser('async => y;');
     FunctionBody functionBody = parser.parseFunctionBody(
       false,
-      ParserErrorCode.missingFunctionBody,
+      diag.missingFunctionBody,
       false,
     );
     expectNotNullIfNoErrors(functionBody);
@@ -1000,8 +1001,8 @@
     parseCompilationUnit(
       'library <myLibId>;',
       diagnostics: [
-        expectedError(ParserErrorCode.missingFunctionParameters, 0, 7),
-        expectedError(ParserErrorCode.missingFunctionBody, 17, 1),
+        expectedError(diag.missingFunctionParameters, 0, 7),
+        expectedError(diag.missingFunctionBody, 17, 1),
       ],
     );
   }
@@ -1260,7 +1261,7 @@
     createParser('<>');
     TypeArgumentList argumentList = parser.parseTypeArgumentList();
     expectNotNullIfNoErrors(argumentList);
-    listener.assertErrorsWithCodes([ParserErrorCode.expectedTypeName]);
+    listener.assertErrorsWithCodes([diag.expectedTypeName]);
     expect(argumentList.leftBracket, isNotNull);
     expect(argumentList.arguments, hasLength(1));
     expect(argumentList.rightBracket, isNotNull);
@@ -1490,9 +1491,7 @@
     var statement =
         parseStatement('final late a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 6, 4)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.modifierOutOfOrder, 6, 4)]);
     expect(declarationList.keyword!.lexeme, 'final');
     expect(declarationList.type, isNull);
     expect(declarationList.variables, hasLength(1));
@@ -1502,9 +1501,7 @@
     var statement = parseStatement('late a;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertErrors(
-      diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 5, 1),
-      ],
+      diagnostics: [expectedError(diag.missingConstFinalVarOrType, 5, 1)],
     );
     expect(declarationList.keyword, isNull);
     expect(declarationList.type, isNull);
@@ -1526,9 +1523,7 @@
         parseStatement('late a = 0;') as VariableDeclarationStatement;
     var declarationList = statement.variables;
     assertErrors(
-      diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 5, 1),
-      ],
+      diagnostics: [expectedError(diag.missingConstFinalVarOrType, 5, 1)],
     );
     expect(declarationList.keyword, isNull);
     expect(declarationList.type, isNull);
@@ -1597,12 +1592,12 @@
     var unit = parseCompilationUnit(
       r'typedef K=Function(<>($',
       diagnostics: [
-        expectedError(CompileTimeErrorCode.invalidInlineFunctionType, 19, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 19, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 20, 1),
-        expectedError(ParserErrorCode.expectedToken, 22, 1),
-        expectedError(ParserErrorCode.expectedToken, 23, 1),
-        expectedError(ParserErrorCode.expectedToken, 23, 1),
+        expectedError(diag.invalidInlineFunctionType, 19, 1),
+        expectedError(diag.missingIdentifier, 19, 1),
+        expectedError(diag.missingIdentifier, 20, 1),
+        expectedError(diag.expectedToken, 22, 1),
+        expectedError(diag.expectedToken, 23, 1),
+        expectedError(diag.expectedToken, 23, 1),
       ],
     );
     var typeAlias = unit.declarations[0] as GenericTypeAlias;
@@ -1618,8 +1613,8 @@
     var unit = parseCompilationUnit(
       r'typedef T=Function(<S>());',
       diagnostics: [
-        expectedError(CompileTimeErrorCode.invalidInlineFunctionType, 19, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 19, 1),
+        expectedError(diag.invalidInlineFunctionType, 19, 1),
+        expectedError(diag.missingIdentifier, 19, 1),
       ],
     );
     var typeAlias = unit.declarations[0] as GenericTypeAlias;
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 9cef647..75a0229 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -529,8 +529,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 40, 1),
-        error(WarningCode.unusedLocalVariable, 65, 1),
+        error(diag.unusedLocalVariable, 40, 1),
+        error(diag.unusedLocalVariable, 65, 1),
       ],
     );
   }
@@ -597,7 +597,7 @@
   var y = new C().x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 124, 1)],
+      [error(diag.unusedLocalVariable, 124, 1)],
     );
 
     // Verify that the getter for "x" in "new C().x" refers to the getter
@@ -665,7 +665,7 @@
   H(int i) : super(i);
 }
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 14)],
+      [error(diag.uriDoesNotExist, 7, 14)],
     );
   }
 
@@ -693,7 +693,7 @@
   H(int i) : super(i);
 }
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 14)],
+      [error(diag.uriDoesNotExist, 7, 14)],
     );
   }
 
@@ -728,7 +728,7 @@
   List<List<int>> b = [];
   b[0][0] = 'hi';
 }''',
-      [error(CompileTimeErrorCode.invalidAssignment, 44, 4)],
+      [error(diag.invalidAssignment, 44, 4)],
     );
   }
 
@@ -767,7 +767,7 @@
 class A extends B {}
 class B {}
 class C = Object with A;''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 54, 1)],
+      [error(diag.mixinInheritsFromNotObject, 54, 1)],
     );
 
     var a = findElement2.class_('A');
@@ -781,7 +781,7 @@
   A() {}
 }
 class C = Object with A;''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 43, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 43, 1)],
     );
 
     var a = findElement2.class_('A');
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index 09640c9..ce6c4bb 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart' as analyzer;
 import 'package:analyzer/dart/ast/token.dart' show TokenType;
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -44,9 +44,9 @@
     var unit = parseCompilationUnit(
       'foo Future<List<int>> bar() {}',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 11, 4),
-        expectedError(ParserErrorCode.missingFunctionParameters, 4, 6),
-        expectedError(ParserErrorCode.missingFunctionBody, 22, 3),
+        expectedError(diag.expectedToken, 11, 4),
+        expectedError(diag.missingFunctionParameters, 4, 6),
+        expectedError(diag.missingFunctionBody, 22, 3),
       ],
     );
     // Validate that recovery has properly updated the token stream.
@@ -62,18 +62,14 @@
   void test_invalid_typeParamAnnotation() {
     parseCompilationUnit(
       'main() { C<@Foo T> v; }',
-      diagnostics: [
-        expectedError(ParserErrorCode.annotationOnTypeArgument, 11, 4),
-      ],
+      diagnostics: [expectedError(diag.annotationOnTypeArgument, 11, 4)],
     );
   }
 
   void test_invalid_typeParamAnnotation2() {
     parseCompilationUnit(
       'main() { C<@Foo.bar(1) T> v; }',
-      diagnostics: [
-        expectedError(ParserErrorCode.annotationOnTypeArgument, 11, 11),
-      ],
+      diagnostics: [expectedError(diag.annotationOnTypeArgument, 11, 11)],
     );
   }
 
@@ -88,9 +84,7 @@
     W<X<Y<Z>>>
   > v;
 }''',
-      diagnostics: [
-        expectedError(ParserErrorCode.annotationOnTypeArgument, 13, 63),
-      ],
+      diagnostics: [expectedError(diag.annotationOnTypeArgument, 13, 63)],
     );
   }
 
@@ -238,9 +232,9 @@
     parseCompilationUnit(
       'main() { else return 0; } ',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 7, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 9, 4),
-        expectedError(ParserErrorCode.unexpectedToken, 9, 4),
+        expectedError(diag.expectedToken, 7, 1),
+        expectedError(diag.missingIdentifier, 9, 4),
+        expectedError(diag.unexpectedToken, 9, 4),
       ],
     );
   }
@@ -934,9 +928,7 @@
 
   void test_parseLocalVariable_external() {
     parseStatement('external int i;');
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.extraneousModifier, 0, 8)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.extraneousModifier, 0, 8)]);
   }
 
   void test_parseNonLabeledStatement_const_list_empty() {
@@ -978,7 +970,7 @@
 
   void test_parseNonLabeledStatement_const_object_named_typeParameters_34403() {
     var statement = parseStatement('const A<B>.c<C>();') as ExpressionStatement;
-    assertErrorsWithCodes([ParserErrorCode.constructorWithTypeArguments]);
+    assertErrorsWithCodes([diag.constructorWithTypeArguments]);
     expect(statement.expression, isNotNull);
   }
 
@@ -1213,7 +1205,7 @@
 
   void test_parseStatement_emptyTypeArgumentList() {
     var declaration = parseStatement('C<> c;') as VariableDeclarationStatement;
-    assertErrorsWithCodes([ParserErrorCode.expectedTypeName]);
+    assertErrorsWithCodes([diag.expectedTypeName]);
     VariableDeclarationList variables = declaration.variables;
     var type = variables.type as NamedType;
     var argumentList = type.typeArguments!;
@@ -1431,7 +1423,7 @@
   void test_parseTryStatement_catch_error_invalidCatchParam() {
     CompilationUnit unit = parseCompilationUnit(
       'main() { try {} catch (int e) { } }',
-      diagnostics: [expectedError(ParserErrorCode.catchSyntax, 27, 1)],
+      diagnostics: [expectedError(diag.catchSyntax, 27, 1)],
     );
     var method = unit.declarations[0] as FunctionDeclaration;
     var body = method.functionExpression.body as BlockFunctionBody;
@@ -1454,7 +1446,7 @@
 
   void test_parseTryStatement_catch_error_missingCatchParam() {
     var statement = parseStatement('try {} catch () {}') as TryStatement;
-    listener.assertErrors([expectedError(ParserErrorCode.catchSyntax, 14, 1)]);
+    listener.assertErrors([expectedError(diag.catchSyntax, 14, 1)]);
     expect(statement.tryKeyword, isNotNull);
     expect(statement.body, isNotNull);
     NodeList<CatchClause> catchClauses = statement.catchClauses;
@@ -1473,7 +1465,7 @@
 
   void test_parseTryStatement_catch_error_missingCatchParen() {
     var statement = parseStatement('try {} catch {}') as TryStatement;
-    listener.assertErrors([expectedError(ParserErrorCode.catchSyntax, 13, 1)]);
+    listener.assertErrors([expectedError(diag.catchSyntax, 13, 1)]);
     expect(statement.tryKeyword, isNotNull);
     expect(statement.body, isNotNull);
     NodeList<CatchClause> catchClauses = statement.catchClauses;
@@ -1492,7 +1484,7 @@
 
   void test_parseTryStatement_catch_error_missingCatchTrace() {
     var statement = parseStatement('try {} catch (e,) {}') as TryStatement;
-    listener.assertErrors([expectedError(ParserErrorCode.catchSyntax, 16, 1)]);
+    listener.assertErrors([expectedError(diag.catchSyntax, 16, 1)]);
     expect(statement.tryKeyword, isNotNull);
     expect(statement.body, isNotNull);
     NodeList<CatchClause> catchClauses = statement.catchClauses;
@@ -1738,11 +1730,11 @@
     var unit = parseCompilationUnit(
       '<bar<',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedExecutable, 0, 1),
-        expectedError(ParserErrorCode.expectedToken, 4, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 5, 0),
-        expectedError(ParserErrorCode.expectedTypeName, 5, 0),
-        expectedError(ParserErrorCode.missingIdentifier, 5, 0),
+        expectedError(diag.expectedExecutable, 0, 1),
+        expectedError(diag.expectedToken, 4, 1),
+        expectedError(diag.missingIdentifier, 5, 0),
+        expectedError(diag.expectedTypeName, 5, 0),
+        expectedError(diag.missingIdentifier, 5, 0),
       ],
     );
     // Validate that recovery has properly updated the token stream.
@@ -1759,10 +1751,10 @@
     var unit = parseCompilationUnit(
       'foo <bar<',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedToken, 8, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 9, 0),
-        expectedError(ParserErrorCode.expectedTypeName, 9, 0),
-        expectedError(ParserErrorCode.missingIdentifier, 9, 0),
+        expectedError(diag.expectedToken, 8, 1),
+        expectedError(diag.missingIdentifier, 9, 0),
+        expectedError(diag.expectedTypeName, 9, 0),
+        expectedError(diag.missingIdentifier, 9, 0),
       ],
     );
     // Validate that recovery has properly updated the token stream.
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index 56636e8..e2c57f3 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -20,9 +20,7 @@
 class StaticTypeAnalyzerTest extends PubPackageResolutionTest {
   test_flatten_derived() async {
     await assertNoErrorsInCode('''
-abstract class Derived<T> extends Future<T> {
-  factory Derived() => throw 'foo';
-}
+abstract class Derived<T> implements Future<T> {}
 late Derived<dynamic> derivedDynamic;
 late Derived<int> derivedInt;
 late Derived<Derived> derivedDerived;
@@ -53,8 +51,8 @@
 late B b;
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
     var aType = findElement2.topVar('a').type;
@@ -69,24 +67,18 @@
   test_flatten_related_derived_types() async {
     await assertErrorsInCode(
       '''
-abstract class Derived<T> extends Future<T> {
-  factory Derived() => throw 'foo';
-}
-abstract class A extends Derived<int> implements Derived<num> {
-  factory A() => throw 'foo';
-}
-abstract class B extends Future<num> implements Future<int> {
-  factory B() => throw 'foo';
-}
+abstract class Derived<T> implements Future<T> {}
+abstract class A extends Derived<int> implements Derived<num> {}
+abstract class B1 implements Future<num> {}
+abstract class B2 extends B1 implements Future<int> {}
 late A a;
-late B b;
+late B2 b;
 ''',
       [
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 99, 1),
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 99, 1),
-        error(CompileTimeErrorCode.implementsSuperClass, 133, 12),
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 195, 1),
-        error(CompileTimeErrorCode.implementsSuperClass, 228, 11),
+        error(diag.conflictingGenericInterfaces, 65, 1),
+        error(diag.conflictingGenericInterfaces, 65, 1),
+        error(diag.implementsSuperClass, 99, 12),
+        error(diag.conflictingGenericInterfaces, 174, 2),
       ],
     );
     InterfaceType intType = typeProvider.intType;
@@ -102,20 +94,16 @@
   test_flatten_related_types() async {
     await assertErrorsInCode(
       '''
-abstract class A extends Future<int> implements Future<num> {
-  factory A() => throw 'foo';
-}
-abstract class B extends Future<num> implements Future<int> {
-  factory B() => throw 'foo';
-}
-late A a;
-late B b;
+abstract class A1 implements Future<int> {}
+abstract class A2 extends A1 implements Future<num> {}
+abstract class B1 implements Future<num> {}
+abstract class B2 extends B1 implements Future<int> {}
+late A2 a;
+late B2 b;
 ''',
       [
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 15, 1),
-        error(CompileTimeErrorCode.implementsSuperClass, 48, 11),
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 109, 1),
-        error(CompileTimeErrorCode.implementsSuperClass, 142, 11),
+        error(diag.conflictingGenericInterfaces, 59, 2),
+        error(diag.conflictingGenericInterfaces, 158, 2),
       ],
     );
     InterfaceType intType = typeProvider.intType;
@@ -153,26 +141,22 @@
   test_flatten_unrelated_types() async {
     await assertErrorsInCode(
       '''
-abstract class A extends Future<int> implements Future<String> {
-  factory A() => throw 'foo';
-}
-abstract class B extends Future<String> implements Future<int> {
-  factory B() => throw 'foo';
-}
-late A a;
-late B b;
+abstract class A1 implements Future<int> {}
+abstract class A2 extends A1 implements Future<String> {}
+abstract class B1 implements Future<String> {}
+abstract class B2 extends B1 implements Future<int> {}
+late A2 a;
+late B2 b;
 ''',
       [
-        error(CompileTimeErrorCode.inconsistentInheritance, 15, 1),
-        error(CompileTimeErrorCode.inconsistentInheritance, 15, 1),
-        error(CompileTimeErrorCode.inconsistentInheritance, 15, 1),
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 15, 1),
-        error(CompileTimeErrorCode.implementsSuperClass, 48, 14),
-        error(CompileTimeErrorCode.inconsistentInheritance, 112, 1),
-        error(CompileTimeErrorCode.inconsistentInheritance, 112, 1),
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 112, 1),
-        error(CompileTimeErrorCode.inconsistentInheritance, 112, 1),
-        error(CompileTimeErrorCode.implementsSuperClass, 148, 11),
+        error(diag.inconsistentInheritance, 59, 2),
+        error(diag.inconsistentInheritance, 59, 2),
+        error(diag.inconsistentInheritance, 59, 2),
+        error(diag.conflictingGenericInterfaces, 59, 2),
+        error(diag.inconsistentInheritance, 164, 2),
+        error(diag.inconsistentInheritance, 164, 2),
+        error(diag.inconsistentInheritance, 164, 2),
+        error(diag.conflictingGenericInterfaces, 164, 2),
       ],
     );
     var aType = findElement2.topVar('a').type;
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index ff6a726..0c7437b 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../src/dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   Future<int> b = await ffi();
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
   }
 
@@ -40,8 +40,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 58, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 62, 10),
+        error(diag.unusedLocalVariable, 58, 1),
+        error(diag.invalidAssignment, 62, 10),
       ],
     );
   }
@@ -53,7 +53,7 @@
   await for (int i in stream) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 1)],
+      [error(diag.unusedLocalVariable, 47, 1)],
     );
   }
 
@@ -65,8 +65,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 50, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 55, 6),
+        error(diag.unusedLocalVariable, 50, 1),
+        error(diag.forInOfInvalidElementType, 55, 6),
       ],
     );
   }
@@ -79,8 +79,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 47, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 52, 6),
+        error(diag.unusedLocalVariable, 47, 1),
+        error(diag.forInOfInvalidElementType, 52, 6),
       ],
     );
   }
@@ -92,7 +92,7 @@
   await for (var i in stream) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 1)],
+      [error(diag.unusedLocalVariable, 47, 1)],
     );
   }
 
@@ -104,7 +104,7 @@
   await for (i in stream) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 41, 1)],
+      [error(diag.unusedLocalVariable, 41, 1)],
     );
   }
 
@@ -117,8 +117,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 44, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 65, 6),
+        error(diag.unusedLocalVariable, 44, 1),
+        error(diag.forInOfInvalidElementType, 65, 6),
       ],
     );
   }
@@ -130,7 +130,7 @@
   await for (int i in stream) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 42, 1)],
+      [error(diag.unusedLocalVariable, 42, 1)],
     );
   }
 
@@ -141,7 +141,7 @@
   await for (num i in stream) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 1)],
+      [error(diag.unusedLocalVariable, 47, 1)],
     );
   }
 
@@ -168,9 +168,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 263, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 281, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 296, 2),
+        error(diag.unusedLocalVariable, 263, 4),
+        error(diag.invalidAssignment, 281, 2),
+        error(diag.invalidAssignment, 296, 2),
       ],
     );
   }
@@ -182,7 +182,7 @@
   for (int i in <int>[]) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -194,8 +194,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 22, 10),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.forInOfInvalidElementType, 22, 10),
       ],
     );
   }
@@ -208,7 +208,7 @@
   for (var i in d) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 1)],
+      [error(diag.unusedLocalVariable, 46, 1)],
     );
   }
 
@@ -220,7 +220,7 @@
   for (int i in iterable) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 37, 1)],
+      [error(diag.unusedLocalVariable, 37, 1)],
     );
   }
 
@@ -231,7 +231,7 @@
   for (var i in <int>[]) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -243,7 +243,7 @@
   for (i in <int>[]) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -256,8 +256,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 12, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 27, 10),
+        error(diag.unusedLocalVariable, 12, 1),
+        error(diag.forInOfInvalidElementType, 27, 10),
       ],
     );
   }
@@ -269,7 +269,7 @@
   for (int i in []) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -280,7 +280,7 @@
   for (var i in o) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 39, 1)],
+      [error(diag.unusedLocalVariable, 39, 1)],
     );
   }
 
@@ -294,8 +294,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 81, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 86, 8),
+        error(diag.unusedLocalVariable, 81, 1),
+        error(diag.forInOfInvalidElementType, 86, 8),
       ],
     );
   }
@@ -309,7 +309,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 78, 1)],
+      [error(diag.unusedLocalVariable, 78, 1)],
     );
   }
 
@@ -320,7 +320,7 @@
   for (num i in <int>[]) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -333,7 +333,7 @@
   p = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 68, 6)],
+      [error(diag.undefinedGetter, 68, 6)],
     );
   }
 
@@ -344,7 +344,7 @@
   ((p is String) && ((p = 42) == 42)) && p.length != 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 57, 6)],
+      [error(diag.undefinedGetter, 57, 6)],
     );
   }
 
@@ -355,7 +355,7 @@
   (p is String) && (((p = 42) == 42) && p.length != 0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 56, 6)],
+      [error(diag.undefinedGetter, 56, 6)],
     );
   }
 
@@ -368,7 +368,7 @@
   p = 42;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 65, 6)],
+      [error(diag.undefinedGetter, 65, 6)],
     );
   }
 
@@ -381,7 +381,7 @@
   p is String ? callMe(() { p.length; }) : 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 75, 6)],
+      [error(diag.undefinedGetter, 75, 6)],
     );
   }
 
@@ -398,7 +398,7 @@
   p = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 80, 6)],
+      [error(diag.undefinedGetter, 80, 6)],
     );
   }
 
@@ -417,7 +417,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 97, 1)],
+      [error(diag.undefinedGetter, 97, 1)],
     );
   }
 
@@ -436,7 +436,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 102, 1)],
+      [error(diag.undefinedGetter, 102, 1)],
     );
   }
 
@@ -450,7 +450,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 52, 6)],
+      [error(diag.undefinedGetter, 52, 6)],
     );
   }
 
@@ -464,7 +464,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 56, 6)],
+      [error(diag.undefinedGetter, 56, 6)],
     );
   }
 
@@ -478,10 +478,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 16, 1),
-        error(CompileTimeErrorCode.undefinedGetter, 57, 6),
-      ],
+      [error(diag.unusedElement, 16, 1), error(diag.undefinedGetter, 57, 6)],
     );
   }
 
@@ -500,7 +497,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 100, 1)],
+      [error(diag.undefinedGetter, 100, 1)],
     );
   }
 
@@ -519,7 +516,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 109, 1)],
+      [error(diag.undefinedGetter, 109, 1)],
     );
   }
 
@@ -533,7 +530,7 @@
   a.element.anyGetterExistsInDynamic;
 }
 ''',
-      [error(CompileTimeErrorCode.nonTypeAsTypeArgument, 37, 10)],
+      [error(diag.nonTypeAsTypeArgument, 37, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index 09f0391..a39e55f 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../src/dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
   foo(x, [y]);
 }
 class E extends C implements D {}''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 73, 1)],
+      [error(diag.invalidImplementationOverride, 73, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 2171877..5908942 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -255,8 +255,8 @@
     void test() { var x = f(3); }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 32, 4),
-      error(WarningCode.unusedLocalVariable, 60, 1),
+      error(diag.returnOfInvalidTypeFromFunction, 32, 4),
+      error(diag.unusedLocalVariable, 60, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -278,8 +278,8 @@
     void test() { var x = f(3); }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 32, 4),
-      error(WarningCode.unusedLocalVariable, 60, 1),
+      error(diag.returnOfInvalidTypeFromFunction, 32, 4),
+      error(diag.unusedLocalVariable, 60, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -298,8 +298,8 @@
       void test() { var x = f(3); }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 46, 4),
-      error(WarningCode.unusedLocalVariable, 76, 1),
+      error(diag.returnOfInvalidTypeFromFunction, 46, 4),
+      error(diag.unusedLocalVariable, 76, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -323,8 +323,8 @@
     void test() { var x = f(3)(4); }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 82, 4),
-      error(WarningCode.unusedLocalVariable, 110, 1),
+      error(diag.returnOfInvalidTypeFromFunction, 82, 4),
+      error(diag.unusedLocalVariable, 110, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -349,10 +349,10 @@
     void test() { var x = f(3)(null); }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 82, 4),
-      error(WarningCode.unusedLocalVariable, 110, 1),
-      error(CompileTimeErrorCode.couldNotInfer, 114, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 119, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 82, 4),
+      error(diag.unusedLocalVariable, 110, 1),
+      error(diag.couldNotInfer, 114, 1),
+      error(diag.argumentTypeNotAssignable, 119, 4),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -391,7 +391,7 @@
       class B<S> extends A<S> {}
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.noGenerativeConstructorsInSuperclass, 92, 4),
+      error(diag.noGenerativeConstructorsInSuperclass, 92, 4),
     ]);
 
     ConstructorDeclaration constructor = AstFinder.getConstructorInClass(
@@ -447,7 +447,7 @@
         return (x) => x;
      }
    ''';
-    await assertErrorsInCode(code, [error(WarningCode.unusedElement, 144, 5)]);
+    await assertErrorsInCode(code, [error(diag.unusedElement, 144, 5)]);
 
     Asserter<InterfaceType> assertListOfInt = _isListOf(_isInt);
 
@@ -489,15 +489,15 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 91, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 107, 4),
-      error(WarningCode.unusedLocalVariable, 144, 2),
-      error(WarningCode.unusedLocalVariable, 200, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 205, 21),
-      error(WarningCode.unusedLocalVariable, 259, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 275, 1),
-      error(WarningCode.unusedLocalVariable, 309, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 330, 1),
+      error(diag.unusedLocalVariable, 91, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 107, 4),
+      error(diag.unusedLocalVariable, 144, 2),
+      error(diag.unusedLocalVariable, 200, 2),
+      error(diag.invalidAssignment, 205, 21),
+      error(diag.unusedLocalVariable, 259, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 275, 1),
+      error(diag.unusedLocalVariable, 309, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 330, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -531,14 +531,14 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 91, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 103, 4),
-      error(WarningCode.unusedLocalVariable, 140, 2),
-      error(WarningCode.unusedLocalVariable, 192, 2),
-      error(WarningCode.unusedLocalVariable, 244, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 256, 1),
-      error(WarningCode.unusedLocalVariable, 290, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 307, 1),
+      error(diag.unusedLocalVariable, 91, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 103, 4),
+      error(diag.unusedLocalVariable, 140, 2),
+      error(diag.unusedLocalVariable, 192, 2),
+      error(diag.unusedLocalVariable, 244, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 256, 1),
+      error(diag.unusedLocalVariable, 290, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 307, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -571,13 +571,13 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 97, 2),
-      error(WarningCode.unusedLocalVariable, 161, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 166, 23),
-      error(WarningCode.unusedLocalVariable, 228, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 245, 1),
-      error(WarningCode.unusedLocalVariable, 286, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 308, 1),
+      error(diag.unusedLocalVariable, 97, 2),
+      error(diag.unusedLocalVariable, 161, 2),
+      error(diag.invalidAssignment, 166, 23),
+      error(diag.unusedLocalVariable, 228, 2),
+      error(diag.listElementTypeNotAssignable, 245, 1),
+      error(diag.unusedLocalVariable, 286, 2),
+      error(diag.listElementTypeNotAssignable, 308, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -619,11 +619,11 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 66, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 154, 4),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 262, 21),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 337, 1),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 397, 1),
+      error(diag.argumentTypeNotAssignable, 66, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 154, 4),
+      error(diag.argumentTypeNotAssignable, 262, 21),
+      error(diag.returnOfInvalidTypeFromClosure, 337, 1),
+      error(diag.returnOfInvalidTypeFromClosure, 397, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -659,10 +659,10 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 66, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 150, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 318, 1),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 374, 1),
+      error(diag.argumentTypeNotAssignable, 66, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 150, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 318, 1),
+      error(diag.returnOfInvalidTypeFromClosure, 374, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -696,11 +696,11 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 49, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 101, 4),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 153, 21),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 200, 1),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 232, 1),
+      error(diag.argumentTypeNotAssignable, 49, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 101, 4),
+      error(diag.argumentTypeNotAssignable, 153, 21),
+      error(diag.returnOfInvalidTypeFromClosure, 200, 1),
+      error(diag.returnOfInvalidTypeFromClosure, 232, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -734,10 +734,10 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 49, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 97, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 181, 1),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 209, 1),
+      error(diag.argumentTypeNotAssignable, 49, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 97, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 181, 1),
+      error(diag.returnOfInvalidTypeFromClosure, 209, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -773,11 +773,11 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 66, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 152, 4),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 256, 21),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 329, 1),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 387, 1),
+      error(diag.argumentTypeNotAssignable, 66, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 152, 4),
+      error(diag.argumentTypeNotAssignable, 256, 21),
+      error(diag.returnOfInvalidTypeFromClosure, 329, 1),
+      error(diag.returnOfInvalidTypeFromClosure, 387, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -813,10 +813,10 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 66, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 148, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 310, 1),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 364, 1),
+      error(diag.argumentTypeNotAssignable, 66, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 148, 4),
+      error(diag.returnOfInvalidTypeFromClosure, 310, 1),
+      error(diag.returnOfInvalidTypeFromClosure, 364, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -850,13 +850,13 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 88, 2),
-      error(WarningCode.unusedLocalVariable, 131, 2),
-      error(WarningCode.unusedLocalVariable, 179, 2),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 191, 1),
-      error(WarningCode.unusedLocalVariable, 225, 2),
-      error(CompileTimeErrorCode.undefinedMethod, 239, 11),
-      error(WarningCode.unusedLocalVariable, 288, 2),
+      error(diag.unusedLocalVariable, 88, 2),
+      error(diag.unusedLocalVariable, 131, 2),
+      error(diag.unusedLocalVariable, 179, 2),
+      error(diag.returnOfInvalidTypeFromClosure, 191, 1),
+      error(diag.unusedLocalVariable, 225, 2),
+      error(diag.undefinedMethod, 239, 11),
+      error(diag.unusedLocalVariable, 288, 2),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -936,9 +936,7 @@
     Future<T> mk<T>(FutureOr<T> x) => null;
     Future<int> test() => mk(new Future<int>.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 60, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
   }
@@ -951,9 +949,7 @@
     Future<T> mk<T>(FutureOr<T> x) => null;
     FutureOr<int> test() => mk(new Future<int>.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 60, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
   }
@@ -966,9 +962,7 @@
     Future<T> mk<T>(FutureOr<T> x) => null;
     Future<int> test() => mk(new Future.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 60, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
     _isFutureOfInt(
@@ -984,9 +978,7 @@
     Future<T> mk<T>(FutureOr<T> x) => null;
     FutureOr<int> test() => mk(new Future.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 60, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
     _isFutureOfInt(
@@ -1002,9 +994,7 @@
     Future<T> mk<T>(FutureOr<T> x) => null;
     FutureOr<num> test() => mk(new Future.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 60, 4)],
     );
     _isFutureOf([_isNum])(invoke.staticType as InterfaceType);
     _isFutureOf([_isNum])(
@@ -1020,9 +1010,7 @@
     T mk<T>(T x) => null;
     FutureOr<int> test() => mk(new Future.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 42, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 42, 4)],
     );
     _isFutureOrOfInt(invoke.staticType as InterfaceType);
     _isFutureOfInt(
@@ -1038,9 +1026,7 @@
       T mk<T extends Future<int>>(T x) => null;
       FutureOr<int> test() => mk(new Future.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 64, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 64, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
     _isFutureOfInt(
@@ -1058,9 +1044,7 @@
     T mk<T extends Future<Object>>(T x) => null;
     FutureOr<int> test() => mk(new Future.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 65, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 65, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
     _isFutureOfInt(
@@ -1076,9 +1060,7 @@
     List<T> mk<T>(T x) => null;
     FutureOr<List<int>> test() => mk(3);
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 48, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 48, 4)],
     );
     _isListOf(_isInt)(invoke.staticType as InterfaceType);
     _isInt(invoke.argumentList.arguments[0].typeOrThrow);
@@ -1098,7 +1080,7 @@
       r'''
     dynamic test(FutureOr<int> x) => x.abs();
     ''',
-      expectedDiagnostics: [error(CompileTimeErrorCode.undefinedMethod, 61, 3)],
+      expectedDiagnostics: [error(diag.undefinedMethod, 61, 3)],
     );
     _isInvalidType(invoke.typeOrThrow);
   }
@@ -1109,7 +1091,7 @@
       r'''
     dynamic test(FutureOr<int> x) => x.then((x) => x);
     ''',
-      expectedDiagnostics: [error(CompileTimeErrorCode.undefinedMethod, 61, 4)],
+      expectedDiagnostics: [error(diag.undefinedMethod, 61, 4)],
     );
     _isInvalidType(invoke.typeOrThrow);
   }
@@ -1121,11 +1103,7 @@
     dynamic test(FutureOr<dynamic> x) => x.abs();
     ''',
       expectedDiagnostics: [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          65,
-          3,
-        ),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 65, 3),
       ],
     );
     _isInvalidType(invoke.typeOrThrow);
@@ -1139,7 +1117,7 @@
     test() => f.then((int x) {});
     ''',
       expectedDiagnostics: [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 79, 1),
+        error(diag.notInitializedNonNullableVariable, 79, 1),
       ],
     );
     _isFunction2Of(_isInt, _isNull)(
@@ -1156,7 +1134,7 @@
     test() => f.then((int x) {return;});
     ''',
       expectedDiagnostics: [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 79, 1),
+        error(diag.notInitializedNonNullableVariable, 79, 1),
       ],
     );
     _isFunction2Of(_isInt, _isNull)(
@@ -1173,7 +1151,7 @@
     test() => f.then((int x) {return null;});
     ''',
       expectedDiagnostics: [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 79, 1),
+        error(diag.notInitializedNonNullableVariable, 79, 1),
       ],
     );
     _isFunction2Of(_isInt, _isNull)(
@@ -1190,9 +1168,7 @@
     Future<T> mk<T>(FutureOr<T> x) => null;
     dynamic test() => mk(new Future<int>.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 60, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
   }
@@ -1205,9 +1181,7 @@
     T mk<T extends Future<Object>>(FutureOr<T> x) => null;
     dynamic test() => mk(new Future<int>.value(42));
     ''',
-      expectedDiagnostics: [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 75, 4),
-      ],
+      expectedDiagnostics: [error(diag.returnOfInvalidTypeFromFunction, 75, 4)],
     );
     _isFutureOfInt(invoke.staticType as InterfaceType);
   }
@@ -1220,7 +1194,7 @@
     test() => f.then<Null>((int x) {});
     ''',
       expectedDiagnostics: [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 79, 1),
+        error(diag.notInitializedNonNullableVariable, 79, 1),
       ],
     );
     _isFunction2Of(_isInt, _isNull)(
@@ -1237,7 +1211,7 @@
     test() => f.then<Null>((int x) {return;});
     ''',
       expectedDiagnostics: [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 79, 1),
+        error(diag.notInitializedNonNullableVariable, 79, 1),
       ],
     );
     _isFunction2Of(_isInt, _isNull)(
@@ -1254,7 +1228,7 @@
     test() => f.then<Null>((int x) { return null;});
     ''',
       expectedDiagnostics: [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 79, 1),
+        error(diag.notInitializedNonNullableVariable, 79, 1),
       ],
     );
     _isFunction2Of(_isInt, _isNull)(
@@ -1291,11 +1265,11 @@
 }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 205, 2),
-      error(WarningCode.unusedLocalVariable, 241, 2),
-      error(WarningCode.unusedLocalVariable, 284, 2),
-      error(WarningCode.unusedLocalVariable, 318, 2),
-      error(WarningCode.unusedLocalVariable, 347, 2),
+      error(diag.unusedLocalVariable, 205, 2),
+      error(diag.unusedLocalVariable, 241, 2),
+      error(diag.unusedLocalVariable, 284, 2),
+      error(diag.unusedLocalVariable, 318, 2),
+      error(diag.unusedLocalVariable, 347, 2),
     ]);
 
     Element elementA = AstFinder.getClass(unit, "A").declaredFragment!.element;
@@ -1326,9 +1300,7 @@
           var c = new C((items) {});
         }
         ''';
-    await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 225, 1),
-    ]);
+    await assertErrorsInCode(code, [error(diag.unusedLocalVariable, 225, 1)]);
 
     DartType cType = findElement2.localVar('c').type;
     Element elementC = AstFinder.getClass(unit, "C").declaredFragment!.element;
@@ -1347,9 +1319,9 @@
 }
  ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 84, 1),
-      error(CompileTimeErrorCode.couldNotInfer, 88, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 90, 15),
+      error(diag.unusedLocalVariable, 84, 1),
+      error(diag.couldNotInfer, 88, 1),
+      error(diag.argumentTypeNotAssignable, 90, 15),
     ]);
     _expectInferenceError(r'''
 Couldn't infer type parameter 'T'.
@@ -1374,10 +1346,10 @@
 }
  ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 95, 1),
-      error(CompileTimeErrorCode.couldNotInfer, 99, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 101, 15),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 118, 16),
+      error(diag.unusedLocalVariable, 95, 1),
+      error(diag.couldNotInfer, 99, 1),
+      error(diag.argumentTypeNotAssignable, 101, 15),
+      error(diag.argumentTypeNotAssignable, 118, 16),
     ]);
     _expectInferenceError(r'''
 Couldn't infer type parameter 'T'.
@@ -1403,9 +1375,9 @@
 }
  ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 56, 5),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 68, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 71, 1),
+      error(diag.unusedLocalVariable, 56, 5),
+      error(diag.argumentTypeNotAssignable, 68, 1),
+      error(diag.argumentTypeNotAssignable, 71, 1),
     ]);
 
     var node = findNode.singleMethodInvocation;
@@ -1448,8 +1420,8 @@
 }
  ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 94, 5),
-      error(CompileTimeErrorCode.invalidAssignment, 102, 3),
+      error(diag.unusedLocalVariable, 94, 5),
+      error(diag.invalidAssignment, 102, 3),
     ]);
   }
 
@@ -1465,8 +1437,8 @@
 }
  ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 158, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 195, 3),
+      error(diag.unusedLocalVariable, 158, 1),
+      error(diag.argumentTypeNotAssignable, 195, 3),
     ]);
   }
 
@@ -1481,9 +1453,9 @@
 }
  ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 80, 1),
-      error(CompileTimeErrorCode.couldNotInfer, 84, 1),
-      error(CompileTimeErrorCode.invalidAssignment, 84, 5),
+      error(diag.unusedLocalVariable, 80, 1),
+      error(diag.couldNotInfer, 84, 1),
+      error(diag.invalidAssignment, 84, 5),
     ]);
     _expectInferenceError(r'''
 Couldn't infer type parameter 'T'.
@@ -1505,8 +1477,8 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 33, 1),
-      error(WarningCode.unusedLocalVariable, 58, 2),
+      error(diag.unusedLocalVariable, 33, 1),
+      error(diag.unusedLocalVariable, 58, 2),
     ]);
   }
 
@@ -1522,7 +1494,7 @@
   _mergeSort(target, compare, list);
 }
     ''';
-    await assertErrorsInCode(code, [error(WarningCode.unusedElement, 5, 10)]);
+    await assertErrorsInCode(code, [error(diag.unusedElement, 5, 10)]);
 
     var node = findNode.singleBlock;
     assertResolvedNodeText(node, r'''
@@ -1689,7 +1661,7 @@
   _mergeSort(target, compare, list);
 }
     ''';
-    await assertErrorsInCode(code, [error(WarningCode.unusedElement, 5, 10)]);
+    await assertErrorsInCode(code, [error(diag.unusedElement, 5, 10)]);
 
     var node = findNode.singleBlock;
     assertResolvedNodeText(node, r'''
@@ -1856,7 +1828,7 @@
   _mergeSort(target, compare, list);
 }
     ''';
-    await assertErrorsInCode(code, [error(WarningCode.unusedElement, 5, 10)]);
+    await assertErrorsInCode(code, [error(diag.unusedElement, 5, 10)]);
 
     var node = findNode.singleBlock;
     assertResolvedNodeText(node, r'''
@@ -2021,8 +1993,8 @@
 }
     ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 22, 4),
-      error(WarningCode.unusedLocalVariable, 61, 1),
+      error(diag.argumentTypeNotAssignable, 22, 4),
+      error(diag.unusedLocalVariable, 61, 1),
     ]);
 
     var node = findNode.methodInvocation('f(g)');
@@ -2066,7 +2038,7 @@
 num test(Iterable values) => values.fold(values.first as num, max);
     ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 190, 3),
+      error(diag.argumentTypeNotAssignable, 190, 3),
     ]);
 
     var node = findNode.methodInvocation('values.fold');
@@ -2268,83 +2240,75 @@
         A<int, String> a5 = new F.named(3, "hello", "hello");
       }''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 547, 4),
-      error(CompileTimeErrorCode.missingDefaultValueForParameter, 633, 1),
-      error(CompileTimeErrorCode.missingDefaultValueForParameter, 644, 1),
-      error(
-        CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-        692,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-        697,
-        1,
-      ),
-      error(WarningCode.unusedLocalVariable, 769, 2),
-      error(WarningCode.unusedLocalVariable, 816, 2),
-      error(WarningCode.unusedLocalVariable, 869, 2),
-      error(WarningCode.unusedLocalVariable, 929, 2),
-      error(WarningCode.unusedLocalVariable, 995, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 1000, 31),
-      error(WarningCode.unusedLocalVariable, 1056, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 1061, 41),
-      error(WarningCode.unusedLocalVariable, 1157, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1168, 7),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1177, 1),
-      error(WarningCode.unusedLocalVariable, 1204, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1221, 7),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1230, 1),
-      error(WarningCode.unusedLocalVariable, 1286, 2),
-      error(WarningCode.unusedLocalVariable, 1333, 2),
-      error(WarningCode.unusedLocalVariable, 1386, 2),
-      error(WarningCode.unusedLocalVariable, 1446, 2),
-      error(WarningCode.unusedLocalVariable, 1512, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 1517, 34),
-      error(WarningCode.unusedLocalVariable, 1576, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 1581, 41),
-      error(WarningCode.unusedLocalVariable, 1676, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1687, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1690, 7),
-      error(WarningCode.unusedLocalVariable, 1723, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1740, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 1743, 7),
-      error(WarningCode.unusedLocalVariable, 1802, 2),
-      error(WarningCode.unusedLocalVariable, 1837, 2),
-      error(WarningCode.unusedLocalVariable, 1878, 2),
-      error(WarningCode.unusedLocalVariable, 1918, 2),
-      error(WarningCode.unusedLocalVariable, 1964, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 1969, 17),
-      error(WarningCode.unusedLocalVariable, 2008, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 2013, 23),
-      error(WarningCode.unusedLocalVariable, 2087, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 2098, 7),
-      error(WarningCode.unusedLocalVariable, 2128, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 2145, 7),
-      error(WarningCode.unusedLocalVariable, 2208, 2),
-      error(WarningCode.unusedLocalVariable, 2252, 2),
-      error(WarningCode.unusedLocalVariable, 2302, 2),
-      error(WarningCode.unusedLocalVariable, 2359, 2),
-      error(WarningCode.unusedLocalVariable, 2425, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 2430, 28),
-      error(WarningCode.unusedLocalVariable, 2483, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 2488, 38),
-      error(WarningCode.unusedLocalVariable, 2580, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 2591, 1),
-      error(WarningCode.unusedLocalVariable, 2618, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 2635, 1),
-      error(WarningCode.unusedLocalVariable, 2694, 2),
-      error(WarningCode.unusedLocalVariable, 2805, 2),
-      error(WarningCode.unusedLocalVariable, 2874, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 2901, 7),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 2914, 1),
-      error(WarningCode.unusedLocalVariable, 2942, 2),
-      error(WarningCode.unusedLocalVariable, 3007, 2),
-      error(WarningCode.unusedLocalVariable, 3060, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 3089, 7),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 3098, 1),
-      error(WarningCode.unusedLocalVariable, 3125, 2),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 3154, 7),
+      error(diag.argumentTypeNotAssignable, 547, 4),
+      error(diag.missingDefaultValueForParameter, 633, 1),
+      error(diag.missingDefaultValueForParameter, 644, 1),
+      error(diag.missingDefaultValueForParameterPositional, 692, 1),
+      error(diag.missingDefaultValueForParameterPositional, 697, 1),
+      error(diag.unusedLocalVariable, 769, 2),
+      error(diag.unusedLocalVariable, 816, 2),
+      error(diag.unusedLocalVariable, 869, 2),
+      error(diag.unusedLocalVariable, 929, 2),
+      error(diag.unusedLocalVariable, 995, 2),
+      error(diag.invalidAssignment, 1000, 31),
+      error(diag.unusedLocalVariable, 1056, 2),
+      error(diag.invalidAssignment, 1061, 41),
+      error(diag.unusedLocalVariable, 1157, 2),
+      error(diag.argumentTypeNotAssignable, 1168, 7),
+      error(diag.argumentTypeNotAssignable, 1177, 1),
+      error(diag.unusedLocalVariable, 1204, 2),
+      error(diag.argumentTypeNotAssignable, 1221, 7),
+      error(diag.argumentTypeNotAssignable, 1230, 1),
+      error(diag.unusedLocalVariable, 1286, 2),
+      error(diag.unusedLocalVariable, 1333, 2),
+      error(diag.unusedLocalVariable, 1386, 2),
+      error(diag.unusedLocalVariable, 1446, 2),
+      error(diag.unusedLocalVariable, 1512, 2),
+      error(diag.invalidAssignment, 1517, 34),
+      error(diag.unusedLocalVariable, 1576, 2),
+      error(diag.invalidAssignment, 1581, 41),
+      error(diag.unusedLocalVariable, 1676, 2),
+      error(diag.argumentTypeNotAssignable, 1687, 1),
+      error(diag.argumentTypeNotAssignable, 1690, 7),
+      error(diag.unusedLocalVariable, 1723, 2),
+      error(diag.argumentTypeNotAssignable, 1740, 1),
+      error(diag.argumentTypeNotAssignable, 1743, 7),
+      error(diag.unusedLocalVariable, 1802, 2),
+      error(diag.unusedLocalVariable, 1837, 2),
+      error(diag.unusedLocalVariable, 1878, 2),
+      error(diag.unusedLocalVariable, 1918, 2),
+      error(diag.unusedLocalVariable, 1964, 2),
+      error(diag.invalidAssignment, 1969, 17),
+      error(diag.unusedLocalVariable, 2008, 2),
+      error(diag.invalidAssignment, 2013, 23),
+      error(diag.unusedLocalVariable, 2087, 2),
+      error(diag.argumentTypeNotAssignable, 2098, 7),
+      error(diag.unusedLocalVariable, 2128, 2),
+      error(diag.argumentTypeNotAssignable, 2145, 7),
+      error(diag.unusedLocalVariable, 2208, 2),
+      error(diag.unusedLocalVariable, 2252, 2),
+      error(diag.unusedLocalVariable, 2302, 2),
+      error(diag.unusedLocalVariable, 2359, 2),
+      error(diag.unusedLocalVariable, 2425, 2),
+      error(diag.invalidAssignment, 2430, 28),
+      error(diag.unusedLocalVariable, 2483, 2),
+      error(diag.invalidAssignment, 2488, 38),
+      error(diag.unusedLocalVariable, 2580, 2),
+      error(diag.argumentTypeNotAssignable, 2591, 1),
+      error(diag.unusedLocalVariable, 2618, 2),
+      error(diag.argumentTypeNotAssignable, 2635, 1),
+      error(diag.unusedLocalVariable, 2694, 2),
+      error(diag.unusedLocalVariable, 2805, 2),
+      error(diag.unusedLocalVariable, 2874, 2),
+      error(diag.listElementTypeNotAssignable, 2901, 7),
+      error(diag.listElementTypeNotAssignable, 2914, 1),
+      error(diag.unusedLocalVariable, 2942, 2),
+      error(diag.unusedLocalVariable, 3007, 2),
+      error(diag.unusedLocalVariable, 3060, 2),
+      error(diag.argumentTypeNotAssignable, 3089, 7),
+      error(diag.argumentTypeNotAssignable, 3098, 1),
+      error(diag.unusedLocalVariable, 3125, 2),
+      error(diag.argumentTypeNotAssignable, 3154, 7),
     ]);
 
     Expression rhs(AstNode stmt) {
@@ -2502,11 +2466,11 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 45, 2),
-      error(WarningCode.unusedLocalVariable, 84, 2),
-      error(WarningCode.unusedLocalVariable, 124, 2),
-      error(WarningCode.unusedLocalVariable, 165, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 172, 7),
+      error(diag.unusedLocalVariable, 45, 2),
+      error(diag.unusedLocalVariable, 84, 2),
+      error(diag.unusedLocalVariable, 124, 2),
+      error(diag.unusedLocalVariable, 165, 2),
+      error(diag.listElementTypeNotAssignable, 172, 7),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2551,12 +2515,12 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 39, 2),
-      error(WarningCode.unusedLocalVariable, 66, 2),
-      error(WarningCode.unusedLocalVariable, 94, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 100, 7),
-      error(WarningCode.unusedLocalVariable, 128, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 134, 7),
+      error(diag.unusedLocalVariable, 39, 2),
+      error(diag.unusedLocalVariable, 66, 2),
+      error(diag.unusedLocalVariable, 94, 2),
+      error(diag.listElementTypeNotAssignable, 100, 7),
+      error(diag.unusedLocalVariable, 128, 2),
+      error(diag.listElementTypeNotAssignable, 134, 7),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2588,12 +2552,12 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 45, 2),
-      error(WarningCode.unusedLocalVariable, 84, 2),
-      error(WarningCode.unusedLocalVariable, 124, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 136, 7),
-      error(WarningCode.unusedLocalVariable, 170, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 182, 7),
+      error(diag.unusedLocalVariable, 45, 2),
+      error(diag.unusedLocalVariable, 84, 2),
+      error(diag.unusedLocalVariable, 124, 2),
+      error(diag.listElementTypeNotAssignable, 136, 7),
+      error(diag.unusedLocalVariable, 170, 2),
+      error(diag.listElementTypeNotAssignable, 182, 7),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2625,14 +2589,14 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 39, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 44, 7),
-      error(WarningCode.unusedLocalVariable, 71, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 76, 8),
-      error(WarningCode.unusedLocalVariable, 104, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 109, 17),
-      error(WarningCode.unusedLocalVariable, 146, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 151, 21),
+      error(diag.unusedLocalVariable, 39, 2),
+      error(diag.invalidAssignment, 44, 7),
+      error(diag.unusedLocalVariable, 71, 2),
+      error(diag.invalidAssignment, 76, 8),
+      error(diag.unusedLocalVariable, 104, 2),
+      error(diag.invalidAssignment, 109, 17),
+      error(diag.unusedLocalVariable, 146, 2),
+      error(diag.invalidAssignment, 151, 21),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2662,12 +2626,12 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 43, 2),
-      error(WarningCode.unusedLocalVariable, 74, 2),
-      error(WarningCode.unusedLocalVariable, 106, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 112, 7),
-      error(WarningCode.unusedLocalVariable, 144, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 150, 7),
+      error(diag.unusedLocalVariable, 43, 2),
+      error(diag.unusedLocalVariable, 74, 2),
+      error(diag.unusedLocalVariable, 106, 2),
+      error(diag.listElementTypeNotAssignable, 112, 7),
+      error(diag.unusedLocalVariable, 144, 2),
+      error(diag.listElementTypeNotAssignable, 150, 7),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2700,15 +2664,15 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 52, 2),
-      error(WarningCode.unusedLocalVariable, 92, 2),
-      error(WarningCode.unusedLocalVariable, 144, 2),
-      error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 150, 7),
-      error(WarningCode.unusedLocalVariable, 202, 2),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 212, 1),
-      error(WarningCode.unusedLocalVariable, 248, 2),
-      error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 267, 7),
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 277, 1),
+      error(diag.unusedLocalVariable, 52, 2),
+      error(diag.unusedLocalVariable, 92, 2),
+      error(diag.unusedLocalVariable, 144, 2),
+      error(diag.mapKeyTypeNotAssignable, 150, 7),
+      error(diag.unusedLocalVariable, 202, 2),
+      error(diag.listElementTypeNotAssignable, 212, 1),
+      error(diag.unusedLocalVariable, 248, 2),
+      error(diag.mapKeyTypeNotAssignable, 267, 7),
+      error(diag.listElementTypeNotAssignable, 277, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2763,15 +2727,15 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 46, 2),
-      error(WarningCode.unusedLocalVariable, 80, 2),
-      error(WarningCode.unusedLocalVariable, 124, 2),
-      error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 130, 7),
-      error(WarningCode.unusedLocalVariable, 174, 2),
-      error(CompileTimeErrorCode.mapValueTypeNotAssignable, 183, 1),
-      error(WarningCode.unusedLocalVariable, 212, 2),
-      error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 229, 7),
-      error(CompileTimeErrorCode.mapValueTypeNotAssignable, 238, 1),
+      error(diag.unusedLocalVariable, 46, 2),
+      error(diag.unusedLocalVariable, 80, 2),
+      error(diag.unusedLocalVariable, 124, 2),
+      error(diag.mapKeyTypeNotAssignable, 130, 7),
+      error(diag.unusedLocalVariable, 174, 2),
+      error(diag.mapValueTypeNotAssignable, 183, 1),
+      error(diag.unusedLocalVariable, 212, 2),
+      error(diag.mapKeyTypeNotAssignable, 229, 7),
+      error(diag.mapValueTypeNotAssignable, 238, 1),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2806,15 +2770,15 @@
      }
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unusedLocalVariable, 46, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 51, 16),
-      error(WarningCode.unusedLocalVariable, 94, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 99, 26),
-      error(WarningCode.unusedLocalVariable, 152, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 157, 32),
-      error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 172, 7),
-      error(WarningCode.unusedLocalVariable, 216, 2),
-      error(CompileTimeErrorCode.invalidAssignment, 221, 20),
+      error(diag.unusedLocalVariable, 46, 2),
+      error(diag.invalidAssignment, 51, 16),
+      error(diag.unusedLocalVariable, 94, 2),
+      error(diag.invalidAssignment, 99, 26),
+      error(diag.unusedLocalVariable, 152, 2),
+      error(diag.invalidAssignment, 157, 32),
+      error(diag.mapKeyTypeNotAssignable, 172, 7),
+      error(diag.unusedLocalVariable, 216, 2),
+      error(diag.invalidAssignment, 221, 20),
     ]);
 
     List<Statement> statements = AstFinder.getStatementsInTopLevelFunction(
@@ -2847,7 +2811,7 @@
       }
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.listElementTypeNotAssignable, 101, 1),
+      error(diag.listElementTypeNotAssignable, 101, 1),
     ]);
 
     Expression methodReturnValue(String methodName) {
@@ -2880,7 +2844,7 @@
     String test() => f((l) => l.length);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 72, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 72, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -2906,9 +2870,9 @@
     A<int, String> test() => new B(3);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 126, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.argumentTypeNotAssignable, 126, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -2932,8 +2896,8 @@
     A<num, num> test() => new B(3);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -2958,9 +2922,9 @@
     A<int, double> test() => new B(3);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
-      error(CompileTimeErrorCode.argumentTypeNotAssignable, 126, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.argumentTypeNotAssignable, 126, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -2985,8 +2949,8 @@
     A<int, num> test() => new B();
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3013,8 +2977,8 @@
     Contra1<A<int, String>> test() => mkA();
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3041,8 +3005,8 @@
     Contra1<A<num, num>> test() => mkA();
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3070,8 +3034,8 @@
     Contra1<A<int, double>> test() => mkA();
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3099,8 +3063,8 @@
     Contra1<A<int, num>> test() => mkA();
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 28, 1),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 39, 1),
+      error(diag.notInitializedNonNullableInstanceField, 28, 1),
+      error(diag.notInitializedNonNullableInstanceField, 39, 1),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3126,7 +3090,8 @@
     await assertNoErrorsInCode(code);
 
     var b = unit.declarations[1] as ClassDeclaration;
-    var bConstructor = b.members[0] as ConstructorDeclaration;
+    var classBody = b.body as BlockClassBody;
+    var bConstructor = classBody.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
     var typeName = redirected.type;
@@ -3159,7 +3124,8 @@
 ''');
 
     var b = result.unit.declarations[1] as ClassDeclaration;
-    var bConstructor = b.members[0] as ConstructorDeclaration;
+    var classBody = b.body as BlockClassBody;
+    var bConstructor = classBody.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
     var typeName = redirected.type;
@@ -3199,7 +3165,7 @@
     Func1<num, String> test() => f(42);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 74, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 74, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3219,7 +3185,7 @@
     Func1<String, num> test() => f(42);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 74, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 74, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3240,7 +3206,7 @@
     dynamic test() => f(42, (num x) => x);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 82, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 82, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3260,7 +3226,7 @@
     dynamic test() => f(42, (num x) => x);
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 82, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 82, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3280,8 +3246,8 @@
     num test() => g(f(3));
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 74, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 112, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 74, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 112, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3303,8 +3269,8 @@
     num test() => g(f(3));
    ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 74, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 112, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 74, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 112, 4),
     ]);
 
     FunctionDeclaration test = AstFinder.getTopLevelFunction(unit, "test");
@@ -3337,11 +3303,11 @@
     _isListOf(_isString)(exp.staticType as InterfaceType);
   }
 
-  /// Verifies the result has [CompileTimeErrorCode.couldNotInfer] with
+  /// Verifies the result has [diag.couldNotInfer] with
   /// the expected [errorMessage].
   void _expectInferenceError(String errorMessage) {
     var errors = result.diagnostics
-        .where((e) => e.diagnosticCode == CompileTimeErrorCode.couldNotInfer)
+        .where((e) => e.diagnosticCode == diag.couldNotInfer)
         .map((e) => e.message)
         .toList();
     expect(errors.length, 1);
@@ -3386,7 +3352,7 @@
   var foo = a.hashCode;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 3)],
+      [error(diag.unusedLocalVariable, 35, 3)],
     );
     expectInitializerType('foo', 'int');
   }
@@ -3409,7 +3375,7 @@
                                      (x.then((x) => x) == null);
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unnecessaryNullComparisonNeverNullFalse, 139, 7),
+      error(diag.unnecessaryNullComparisonNeverNullFalse, 139, 7),
     ]);
   }
 
@@ -3433,7 +3399,7 @@
                                                   (x.then((x) => x) == null);
    ''';
     await assertErrorsInCode(code, [
-      error(WarningCode.unnecessaryNullComparisonNeverNullFalse, 163, 7),
+      error(diag.unnecessaryNullComparisonNeverNullFalse, 163, 7),
     ]);
   }
 
@@ -3445,13 +3411,13 @@
   x = 42;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 21, 1)],
+      [error(diag.unusedLocalVariable, 21, 1)],
     );
   }
 
   test_genericFunction() async {
     await assertErrorsInCode(r'T f<T>(T x) => null;', [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 15, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 15, 4),
     ]);
 
     var node = findNode.functionDeclaration('f<T>');
@@ -3468,7 +3434,7 @@
       typeParameters
         TypeParameter
           name: T
-          declaredElement: <testLibraryFragment> T@4
+          declaredFragment: <testLibraryFragment> T@4
             defaultType: dynamic
       rightBracket: >
     parameters: FormalParameterList
@@ -3479,7 +3445,7 @@
           element: #E0 T
           type: T
         name: x
-        declaredElement: <testLibraryFragment> x@9
+        declaredFragment: <testLibraryFragment> x@9
           element: isPublic
             type: T
       rightParenthesis: )
@@ -3489,11 +3455,11 @@
         literal: null
         staticType: Null
       semicolon: ;
-    declaredElement: <testLibraryFragment> f@2
+    declaredFragment: <testLibraryFragment> f@2
       element: <testLibrary>::@function::f
         type: T Function<T>(T)
     staticType: T Function<T>(T)
-  declaredElement: <testLibraryFragment> f@2
+  declaredFragment: <testLibraryFragment> f@2
     element: <testLibrary>::@function::f
       type: T Function<T>(T)
 ''');
@@ -3501,7 +3467,7 @@
 
   test_genericFunction_bounds() async {
     await assertErrorsInCode(r'T f<T extends num>(T x) => null;', [
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 27, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 27, 4),
     ]);
 
     var node = findNode.functionDeclaration('f<T');
@@ -3523,7 +3489,7 @@
             name: num
             element: dart:core::@class::num
             type: num
-          declaredElement: <testLibraryFragment> T@4
+          declaredFragment: <testLibraryFragment> T@4
             defaultType: num
       rightBracket: >
     parameters: FormalParameterList
@@ -3534,7 +3500,7 @@
           element: #E0 T
           type: T
         name: x
-        declaredElement: <testLibraryFragment> x@21
+        declaredFragment: <testLibraryFragment> x@21
           element: isPublic
             type: T
       rightParenthesis: )
@@ -3544,11 +3510,11 @@
         literal: null
         staticType: Null
       semicolon: ;
-    declaredElement: <testLibraryFragment> f@2
+    declaredFragment: <testLibraryFragment> f@2
       element: <testLibrary>::@function::f
         type: T Function<T extends num>(T)
     staticType: T Function<T extends num>(T)
-  declaredElement: <testLibraryFragment> f@2
+  declaredFragment: <testLibraryFragment> f@2
     element: <testLibrary>::@function::f
       type: T Function<T extends num>(T)
 ''');
@@ -3571,7 +3537,7 @@
   static T f<T>(T x) => null;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 37, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 37, 4)],
     );
 
     var node = findNode.methodDeclaration('f<T>');
@@ -3588,7 +3554,7 @@
     typeParameters
       TypeParameter
         name: T
-        declaredElement: <testLibraryFragment> T@26
+        declaredFragment: <testLibraryFragment> T@26
           defaultType: dynamic
     rightBracket: >
   parameters: FormalParameterList
@@ -3599,7 +3565,7 @@
         element: #E0 T
         type: T
       name: x
-      declaredElement: <testLibraryFragment> x@31
+      declaredFragment: <testLibraryFragment> x@31
         element: isPublic
           type: T
     rightParenthesis: )
@@ -3609,7 +3575,7 @@
       literal: null
       staticType: Null
     semicolon: ;
-  declaredElement: <testLibraryFragment> f@24
+  declaredFragment: <testLibraryFragment> f@24
     element: <testLibrary>::@class::C::@method::f
       type: T Function<T>(T)
 ''');
@@ -3647,25 +3613,13 @@
 }
 ''';
     await assertErrorsInCode(code, [
-      error(CompileTimeErrorCode.notInitializedNonNullableVariable, 23, 2),
-      error(CompileTimeErrorCode.notInitializedNonNullableVariable, 49, 2),
-      error(CompileTimeErrorCode.notInitializedNonNullableInstanceField, 57, 2),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        141,
-        2,
-      ),
-      error(CompileTimeErrorCode.notInitializedNonNullableVariable, 179, 2),
-      error(
-        CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-        187,
-        2,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        271,
-        2,
-      ),
+      error(diag.notInitializedNonNullableVariable, 23, 2),
+      error(diag.notInitializedNonNullableVariable, 49, 2),
+      error(diag.notInitializedNonNullableInstanceField, 57, 2),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 141, 2),
+      error(diag.notInitializedNonNullableVariable, 179, 2),
+      error(diag.notInitializedNonNullableInstanceField, 187, 2),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 271, 2),
     ]);
 
     checkBody(String className) {
@@ -3697,13 +3651,7 @@
 List<Object> ddd = [1 as dynamic];
 List<Object> eee = [new Object()];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-          73,
-          4,
-        ),
-      ],
+      [error(diag.listElementTypeNotAssignableNullability, 73, 4)],
     );
     expectInitializerType('aaa', 'List<Object>');
     expectInitializerType('bbb', 'List<Object>');
@@ -3723,8 +3671,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 36, 4),
-        error(WarningCode.unusedLocalVariable, 65, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 36, 4),
+        error(diag.unusedLocalVariable, 65, 9),
       ],
     );
     assertType(findElement2.method('f').type, 'List<T> Function<T>(E)');
@@ -3752,13 +3700,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 36, 4),
-        error(WarningCode.unusedLocalVariable, 82, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          86,
-          9,
-        ),
+        error(diag.returnOfInvalidTypeFromMethod, 36, 4),
+        error(diag.unusedLocalVariable, 82, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 86, 9),
       ],
     );
     var f = findNode.simple('f<int>').parent as MethodInvocation;
@@ -3795,19 +3739,19 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 30, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 60, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 123, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 224, 4),
-        error(WarningCode.unusedLocalVariable, 237, 10),
-        error(WarningCode.unusedLocalVariable, 281, 10),
-        error(WarningCode.unusedLocalVariable, 315, 10),
-        error(WarningCode.unusedLocalVariable, 349, 15),
-        error(WarningCode.unusedLocalVariable, 388, 10),
-        error(WarningCode.unusedLocalVariable, 423, 12),
-        error(WarningCode.unusedLocalVariable, 460, 9),
-        error(WarningCode.unusedLocalVariable, 492, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 30, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 60, 4),
+        error(diag.invalidAssignment, 96, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 123, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 224, 4),
+        error(diag.unusedLocalVariable, 237, 10),
+        error(diag.unusedLocalVariable, 281, 10),
+        error(diag.unusedLocalVariable, 315, 10),
+        error(diag.unusedLocalVariable, 349, 15),
+        error(diag.unusedLocalVariable, 388, 10),
+        error(diag.unusedLocalVariable, 423, 12),
+        error(diag.unusedLocalVariable, 460, 9),
+        error(diag.unusedLocalVariable, 492, 9),
       ],
     );
     _assertLocalVarType('lambdaCall', "int");
@@ -3827,7 +3771,7 @@
   var paramCall = (pf)<int>(3);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 9)],
+      [error(diag.unusedLocalVariable, 35, 9)],
     );
     _assertLocalVarType('paramCall', "int");
   }
@@ -3839,7 +3783,7 @@
   var paramCall = (pf)(3);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 9)],
+      [error(diag.unusedLocalVariable, 35, 9)],
     );
     _assertLocalVarType('paramCall', "int");
   }
@@ -3870,19 +3814,19 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 30, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 60, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 123, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 224, 4),
-        error(WarningCode.unusedLocalVariable, 237, 10),
-        error(WarningCode.unusedLocalVariable, 276, 10),
-        error(WarningCode.unusedLocalVariable, 305, 10),
-        error(WarningCode.unusedLocalVariable, 334, 15),
-        error(WarningCode.unusedLocalVariable, 368, 10),
-        error(WarningCode.unusedLocalVariable, 398, 12),
-        error(WarningCode.unusedLocalVariable, 430, 9),
-        error(WarningCode.unusedLocalVariable, 457, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 30, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 60, 4),
+        error(diag.invalidAssignment, 96, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 123, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 224, 4),
+        error(diag.unusedLocalVariable, 237, 10),
+        error(diag.unusedLocalVariable, 276, 10),
+        error(diag.unusedLocalVariable, 305, 10),
+        error(diag.unusedLocalVariable, 334, 15),
+        error(diag.unusedLocalVariable, 368, 10),
+        error(diag.unusedLocalVariable, 398, 12),
+        error(diag.unusedLocalVariable, 430, 9),
+        error(diag.unusedLocalVariable, 457, 9),
       ],
     );
     _assertLocalVarType('lambdaCall', "int");
@@ -3919,18 +3863,18 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 30, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 60, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 123, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 224, 4),
-        error(WarningCode.unusedLocalVariable, 236, 10),
-        error(WarningCode.unusedLocalVariable, 268, 10),
-        error(WarningCode.unusedLocalVariable, 300, 15),
-        error(WarningCode.unusedLocalVariable, 337, 10),
-        error(WarningCode.unusedLocalVariable, 370, 12),
-        error(WarningCode.unusedLocalVariable, 405, 9),
-        error(WarningCode.unusedLocalVariable, 435, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 30, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 60, 4),
+        error(diag.invalidAssignment, 96, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 123, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 224, 4),
+        error(diag.unusedLocalVariable, 236, 10),
+        error(diag.unusedLocalVariable, 268, 10),
+        error(diag.unusedLocalVariable, 300, 15),
+        error(diag.unusedLocalVariable, 337, 10),
+        error(diag.unusedLocalVariable, 370, 12),
+        error(diag.unusedLocalVariable, 405, 9),
+        error(diag.unusedLocalVariable, 435, 9),
       ],
     );
     _assertLocalVarType('methodCall', "int");
@@ -3949,7 +3893,7 @@
   var paramCall = pf<int>(3);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 9)],
+      [error(diag.unusedLocalVariable, 35, 9)],
     );
     _assertLocalVarType('paramCall', "int");
   }
@@ -3961,7 +3905,7 @@
   var paramCall = pf(3);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 9)],
+      [error(diag.unusedLocalVariable, 35, 9)],
     );
     _assertLocalVarType('paramCall', "int");
   }
@@ -3990,18 +3934,18 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 30, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 60, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 123, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 224, 4),
-        error(WarningCode.unusedLocalVariable, 236, 10),
-        error(WarningCode.unusedLocalVariable, 263, 10),
-        error(WarningCode.unusedLocalVariable, 290, 15),
-        error(WarningCode.unusedLocalVariable, 322, 10),
-        error(WarningCode.unusedLocalVariable, 350, 12),
-        error(WarningCode.unusedLocalVariable, 380, 9),
-        error(WarningCode.unusedLocalVariable, 405, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 30, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 60, 4),
+        error(diag.invalidAssignment, 96, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 123, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 224, 4),
+        error(diag.unusedLocalVariable, 236, 10),
+        error(diag.unusedLocalVariable, 263, 10),
+        error(diag.unusedLocalVariable, 290, 15),
+        error(diag.unusedLocalVariable, 322, 10),
+        error(diag.unusedLocalVariable, 350, 12),
+        error(diag.unusedLocalVariable, 380, 9),
+        error(diag.unusedLocalVariable, 405, 9),
       ],
     );
     _assertLocalVarType('methodCall', "int");
@@ -4024,8 +3968,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 41, 4),
-        error(WarningCode.unusedLocalVariable, 70, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 41, 4),
+        error(diag.unusedLocalVariable, 70, 9),
       ],
     );
     assertType(
@@ -4051,7 +3995,7 @@
   var paramTearOff = pf;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 12)],
+      [error(diag.unusedLocalVariable, 35, 12)],
     );
     _assertLocalVarType('paramTearOff', "T Function<T>(T)");
   }
@@ -4071,8 +4015,8 @@
   list.map((e) => 3);
 }''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 40, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 75, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 40, 4),
+        error(diag.invalidAssignment, 75, 4),
       ],
     );
 
@@ -4098,7 +4042,7 @@
           leftParenthesis: (
           parameter: SimpleFormalParameter
             name: e
-            declaredElement: <testLibraryFragment> e@93
+            declaredFragment: <testLibraryFragment> e@93
               element: hasImplicitType isPublic
                 type: dynamic
           rightParenthesis: )
@@ -4108,7 +4052,7 @@
             token: e
             element: e@93
             staticType: dynamic
-        declaredElement: <testLibraryFragment> null@null
+        declaredFragment: <testLibraryFragment> null@null
           element: null@null
             type: dynamic Function(dynamic)
         correspondingParameter: ParameterMember
@@ -4144,7 +4088,7 @@
           leftParenthesis: (
           parameter: SimpleFormalParameter
             name: e
-            declaredElement: <testLibraryFragment> e@115
+            declaredFragment: <testLibraryFragment> e@115
               element: hasImplicitType isPublic
                 type: dynamic
           rightParenthesis: )
@@ -4153,7 +4097,7 @@
           expression: IntegerLiteral
             literal: 3
             staticType: int
-        declaredElement: <testLibraryFragment> null@null
+        declaredFragment: <testLibraryFragment> null@null
           element: null@null
             type: int Function(dynamic)
         correspondingParameter: ParameterMember
@@ -4176,7 +4120,7 @@
   var foo = max(1.0, 2.0);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 3)],
+      [error(diag.unusedLocalVariable, 35, 3)],
     );
     expectInitializerType('foo', 'double');
   }
@@ -4189,7 +4133,7 @@
   var foo = math.max(1.0, 2.0);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 43, 3)],
+      [error(diag.unusedLocalVariable, 43, 3)],
     );
     expectInitializerType('foo', 'double');
   }
@@ -4202,7 +4146,7 @@
   var foo = max(1.0, 2);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 3)],
+      [error(diag.unusedLocalVariable, 35, 3)],
     );
     expectInitializerType('foo', 'num');
   }
@@ -4215,7 +4159,7 @@
   var foo = max(1, 2.0);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 3)],
+      [error(diag.unusedLocalVariable, 35, 3)],
     );
     expectInitializerType('foo', 'num');
   }
@@ -4228,7 +4172,7 @@
   var foo = max(1, 2);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 3)],
+      [error(diag.unusedLocalVariable, 35, 3)],
     );
     expectInitializerType('foo', 'int');
   }
@@ -4255,7 +4199,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 96, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 96, 4)],
     );
 
     var node1 = findNode.methodInvocation('f<int>(3);');
@@ -4327,8 +4271,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 56, 3),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 106, 4),
+        error(diag.typeArgumentNotMatchingBounds, 56, 3),
+        error(diag.returnOfInvalidTypeFromMethod, 106, 4),
       ],
     );
 
@@ -4408,8 +4352,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 16, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 41, 4),
+        error(diag.unusedElement, 16, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 41, 4),
       ],
     );
     assertType(findElement2.topFunction('f').type, 'S Function<S>(S)');
@@ -4430,8 +4374,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 27, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 72, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 27, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 72, 4),
       ],
     );
 
@@ -4448,7 +4392,7 @@
     typeParameters
       TypeParameter
         name: T
-        declaredElement: <testLibraryFragment> T@61
+        declaredFragment: <testLibraryFragment> T@61
           defaultType: dynamic
     rightBracket: >
   parameters: FormalParameterList
@@ -4459,7 +4403,7 @@
         element: #E0 T
         type: T
       name: y
-      declaredElement: <testLibraryFragment> y@66
+      declaredFragment: <testLibraryFragment> y@66
         element: isPublic
           type: T
     rightParenthesis: )
@@ -4469,7 +4413,7 @@
       literal: null
       staticType: Null
     semicolon: ;
-  declaredElement: <testLibraryFragment> f@59
+  declaredFragment: <testLibraryFragment> f@59
     element: <testLibrary>::@class::D::@method::f
       type: T Function<T>(T)
 ''');
@@ -4492,9 +4436,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 48, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 141, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 247, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 48, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 141, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 247, 4),
       ],
     );
   }
@@ -4511,13 +4455,7 @@
   int x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          87,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 87, 1)],
     );
   }
 
@@ -4550,14 +4488,14 @@
   T f<T extends B>(T x) => null;
 }''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 69, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 69, 4),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           101,
           1,
           contextMessages: [message(testFile, 46, 1)],
         ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 124, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 124, 4),
       ],
     );
   }
@@ -4574,14 +4512,14 @@
   T f<T extends A>(T x) => null;
 }''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 69, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 69, 4),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           101,
           1,
           contextMessages: [message(testFile, 46, 1)],
         ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 124, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 124, 4),
       ],
     );
   }
@@ -4596,14 +4534,14 @@
   String f<S>(S x) => null;
 }''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 37, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 37, 4),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           74,
           1,
           contextMessages: [message(testFile, 24, 1)],
         ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 87, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 87, 4),
       ],
     );
   }
@@ -4618,14 +4556,14 @@
   S f<T, S>(T x) => null;
 }''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 27, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 27, 4),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           59,
           1,
           contextMessages: [message(testFile, 14, 1)],
         ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 75, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 75, 4),
       ],
     );
   }
@@ -4652,8 +4590,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 122, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 160, 4),
+        error(diag.unusedLocalVariable, 122, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 160, 4),
       ],
     );
     _assertLocalVarType('y', 'List<C>');
@@ -4683,18 +4621,18 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 30, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 60, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 123, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 224, 4),
-        error(WarningCode.unusedLocalVariable, 236, 13),
-        error(WarningCode.unusedLocalVariable, 263, 13),
-        error(WarningCode.unusedLocalVariable, 290, 18),
-        error(WarningCode.unusedLocalVariable, 322, 13),
-        error(WarningCode.unusedLocalVariable, 350, 15),
-        error(WarningCode.unusedLocalVariable, 380, 12),
-        error(WarningCode.unusedLocalVariable, 405, 12),
+        error(diag.returnOfInvalidTypeFromMethod, 30, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 60, 4),
+        error(diag.invalidAssignment, 96, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 123, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 224, 4),
+        error(diag.unusedLocalVariable, 236, 13),
+        error(diag.unusedLocalVariable, 263, 13),
+        error(diag.unusedLocalVariable, 290, 18),
+        error(diag.unusedLocalVariable, 322, 13),
+        error(diag.unusedLocalVariable, 350, 15),
+        error(diag.unusedLocalVariable, 380, 12),
+        error(diag.unusedLocalVariable, 405, 12),
       ],
     );
     _assertLocalVarType('methodTearOff', "T Function<T>(int)");
@@ -4748,8 +4686,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 69, 4),
-        error(WarningCode.unusedLocalVariable, 81, 3),
+        error(diag.invalidAssignment, 69, 4),
+        error(diag.unusedLocalVariable, 81, 3),
       ],
     );
 
@@ -4767,8 +4705,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 105, 4),
-        error(WarningCode.unusedLocalVariable, 117, 3),
+        error(diag.invalidAssignment, 105, 4),
+        error(diag.unusedLocalVariable, 117, 3),
       ],
     );
     expectInitializerType('foo', 'Future<String>');
@@ -4784,13 +4722,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 40, 3),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          46,
-          1,
-        ),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 85, 1),
+        error(diag.unusedLocalVariable, 40, 3),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 46, 1),
+        error(diag.argumentTypeNotAssignable, 85, 1),
       ],
     );
     // Note: this correctly reports the error
@@ -4813,9 +4747,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 37, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 73, 4),
-        error(WarningCode.unusedLocalVariable, 102, 9),
+        error(diag.returnOfInvalidTypeFromMethod, 37, 4),
+        error(diag.invalidAssignment, 73, 4),
+        error(diag.unusedLocalVariable, 102, 9),
       ],
     );
     _assertLocalVarType('fieldRead', "T Function<T>(T)");
@@ -4840,12 +4774,12 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 116, 2),
-        error(WarningCode.unusedLocalVariable, 124, 2),
-        error(WarningCode.unusedLocalVariable, 132, 2),
-        error(WarningCode.unusedLocalVariable, 142, 2),
-        error(WarningCode.unusedLocalVariable, 162, 2),
-        error(WarningCode.unusedLocalVariable, 182, 2),
+        error(diag.unusedLocalVariable, 116, 2),
+        error(diag.unusedLocalVariable, 124, 2),
+        error(diag.unusedLocalVariable, 132, 2),
+        error(diag.unusedLocalVariable, 142, 2),
+        error(diag.unusedLocalVariable, 162, 2),
+        error(diag.unusedLocalVariable, 182, 2),
       ],
     );
     _assertLocalVarType('ai', "A<dynamic>");
@@ -4866,13 +4800,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           69,
           1,
           contextMessages: [message(testFile, 69, 1)],
         ),
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           69,
           1,
           contextMessages: [message(testFile, 69, 1)],
@@ -4892,10 +4826,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 73, 1),
-        error(CompileTimeErrorCode.couldNotInfer, 81, 1),
+        error(diag.unusedLocalVariable, 73, 1),
+        error(diag.couldNotInfer, 81, 1),
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           81,
           1,
           contextMessages: [message(testFile, 81, 1)],
@@ -4911,7 +4845,7 @@
 class C<T0 extends List<T1>, T1 extends List<T0>> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 55, 1)],
+      [error(diag.notInitializedNonNullableVariable, 55, 1)],
     );
     _assertTopVarType('c', 'C<List<dynamic>, List<dynamic>>');
   }
@@ -4922,7 +4856,7 @@
 class C<T extends C<T>> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 29, 1)],
+      [error(diag.notInitializedNonNullableVariable, 29, 1)],
     );
     _assertTopVarType('c', 'C<C<dynamic>>');
   }
@@ -4934,7 +4868,7 @@
 class C<T extends A<T>> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 43, 1)],
+      [error(diag.notInitializedNonNullableVariable, 43, 1)],
     );
     _assertTopVarType('c', 'C<A<dynamic>>');
   }
@@ -4948,12 +4882,12 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           48,
           1,
           contextMessages: [message(testFile, 48, 1), message(testFile, 48, 1)],
         ),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 50, 1),
+        error(diag.notInitializedNonNullableVariable, 50, 1),
       ],
     );
     _assertTopVarType('c', 'C<dynamic Function(dynamic)>');
@@ -4965,7 +4899,7 @@
 class C<T0 extends Map<T1, T2>, T1 extends List, T2 extends int> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 70, 1)],
+      [error(diag.notInitializedNonNullableVariable, 70, 1)],
     );
     _assertTopVarType('c', 'C<Map<List<dynamic>, int>, List<dynamic>, int>');
   }
@@ -4976,7 +4910,7 @@
 class C<T0 extends T1, T1 extends int> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 44, 1)],
+      [error(diag.notInitializedNonNullableVariable, 44, 1)],
     );
     _assertTopVarType('c', 'C<int, int>');
   }
@@ -4987,7 +4921,7 @@
 class C<T0 extends Map<T1, T1>, T1 extends int> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 53, 1)],
+      [error(diag.notInitializedNonNullableVariable, 53, 1)],
     );
     _assertTopVarType('c', 'C<Map<int, int>, int>');
   }
@@ -4998,7 +4932,7 @@
 class C<T0 extends int, T1 extends T0> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 44, 1)],
+      [error(diag.notInitializedNonNullableVariable, 44, 1)],
     );
     _assertTopVarType('c', 'C<int, int>');
   }
@@ -5009,7 +4943,7 @@
 class C<T0 extends Map<T1, T2>, T1 extends List<T2>, T2 extends int> {}
 C c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 74, 1)],
+      [error(diag.notInitializedNonNullableVariable, 74, 1)],
     );
     _assertTopVarType('c', 'C<Map<List<int>, int>, List<int>, int>');
   }
@@ -5029,10 +4963,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 114, 1),
-        error(WarningCode.unusedLocalVariable, 121, 1),
-        error(WarningCode.unusedLocalVariable, 128, 1),
-        error(WarningCode.unusedLocalVariable, 135, 1),
+        error(diag.unusedLocalVariable, 114, 1),
+        error(diag.unusedLocalVariable, 121, 1),
+        error(diag.unusedLocalVariable, 128, 1),
+        error(diag.unusedLocalVariable, 135, 1),
       ],
     );
     _assertLocalVarType('a', 'A<dynamic>');
@@ -5053,9 +4987,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.bodyMightCompleteNormally, 3, 1),
-        error(WarningCode.unusedLocalVariable, 69, 1),
-        error(CompileTimeErrorCode.couldNotInfer, 73, 1),
+        error(diag.bodyMightCompleteNormally, 3, 1),
+        error(diag.unusedLocalVariable, 69, 1),
+        error(diag.couldNotInfer, 73, 1),
       ],
     );
     _assertLocalVarType('c', 'List<Object?>');
@@ -5073,8 +5007,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 97, 4),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 103, 4),
+        error(diag.argumentTypeNotAssignable, 97, 4),
+        error(diag.argumentTypeNotAssignable, 103, 4),
       ],
     );
 
@@ -5083,7 +5017,9 @@
 MethodInvocation
   methodName: SimpleIdentifier
     token: m
-    element: <testLibrary>::@class::C::@method::m
+    element: MethodMember
+      baseElement: <testLibrary>::@class::C::@method::m
+      substitution: {T: T, S0: S0, S1: S1}
     staticType: void Function<S0 extends T, S1 extends List<S0>>(S0, S1)
   argumentList: ArgumentList
     leftParenthesis: (
@@ -5091,13 +5027,13 @@
       NullLiteral
         literal: null
         correspondingParameter: ParameterMember
-          baseElement: <testLibrary>::@class::C::@method::m::@formalParameter::p0
+          baseElement: p0@null
           substitution: {S0: T, S1: List<T>}
         staticType: Null
       NullLiteral
         literal: null
         correspondingParameter: ParameterMember
-          baseElement: <testLibrary>::@class::C::@method::m::@formalParameter::p1
+          baseElement: p1@null
           substitution: {S0: T, S1: List<T>}
         staticType: Null
     rightParenthesis: )
@@ -5120,7 +5056,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 69, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 69, 4)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -5128,7 +5064,9 @@
 MethodInvocation
   methodName: SimpleIdentifier
     token: m
-    element: <testLibrary>::@class::C::@method::m
+    element: MethodMember
+      baseElement: <testLibrary>::@class::C::@method::m
+      substitution: {T: T, S0: S0, S1: S1}
     staticType: Map<S0, S1> Function<S0 extends T, S1 extends List<S0>>()
   argumentList: ArgumentList
     leftParenthesis: (
@@ -5152,7 +5090,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 67, 4)],
+      [error(diag.argumentTypeNotAssignable, 67, 4)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -5160,7 +5098,9 @@
 MethodInvocation
   methodName: SimpleIdentifier
     token: m
-    element: <testLibrary>::@class::C::@method::m
+    element: MethodMember
+      baseElement: <testLibrary>::@class::C::@method::m
+      substitution: {T: T, S: S}
     staticType: void Function<S extends T>(S)
   argumentList: ArgumentList
     leftParenthesis: (
@@ -5168,7 +5108,7 @@
       NullLiteral
         literal: null
         correspondingParameter: ParameterMember
-          baseElement: <testLibrary>::@class::C::@method::m::@formalParameter::p0
+          baseElement: p0@null
           substitution: {S: T}
         staticType: Null
     rightParenthesis: )
@@ -5190,7 +5130,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 37, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 37, 4)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -5198,7 +5138,9 @@
 MethodInvocation
   methodName: SimpleIdentifier
     token: m
-    element: <testLibrary>::@class::C::@method::m
+    element: MethodMember
+      baseElement: <testLibrary>::@class::C::@method::m
+      substitution: {T: T, S: S}
     staticType: S Function<S extends T>()
   argumentList: ArgumentList
     leftParenthesis: (
@@ -5218,7 +5160,7 @@
   static final h = g;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 37, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 37, 4)],
     );
   }
 
@@ -5249,12 +5191,12 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 69, 2),
-        error(WarningCode.unusedLocalVariable, 94, 2),
-        error(WarningCode.unusedLocalVariable, 117, 2),
-        error(WarningCode.unusedLocalVariable, 183, 2),
-        error(WarningCode.unusedLocalVariable, 210, 2),
-        error(WarningCode.unusedLocalVariable, 235, 2),
+        error(diag.unusedLocalVariable, 69, 2),
+        error(diag.unusedLocalVariable, 94, 2),
+        error(diag.unusedLocalVariable, 117, 2),
+        error(diag.unusedLocalVariable, 183, 2),
+        error(diag.unusedLocalVariable, 210, 2),
+        error(diag.unusedLocalVariable, 235, 2),
       ],
     );
   }
@@ -5286,72 +5228,24 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 63, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          68,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 88, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          93,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 111, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          116,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 177, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          183,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 204, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          210,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 229, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          235,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          276,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          293,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          308,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          361,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          380,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          397,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 63, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 68, 1),
+        error(diag.unusedLocalVariable, 88, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 93, 1),
+        error(diag.unusedLocalVariable, 111, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 116, 1),
+        error(diag.unusedLocalVariable, 177, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 183, 1),
+        error(diag.unusedLocalVariable, 204, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 210, 1),
+        error(diag.unusedLocalVariable, 229, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 235, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 276, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 293, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 308, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 361, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 380, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 397, 1),
       ],
     );
   }
@@ -5383,13 +5277,13 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 16, 4),
-        error(WarningCode.unusedLocalVariable, 71, 2),
-        error(WarningCode.unusedLocalVariable, 96, 2),
-        error(WarningCode.unusedLocalVariable, 119, 2),
-        error(WarningCode.unusedLocalVariable, 185, 2),
-        error(WarningCode.unusedLocalVariable, 212, 2),
-        error(WarningCode.unusedLocalVariable, 237, 2),
+        error(diag.returnOfInvalidTypeFromFunction, 16, 4),
+        error(diag.unusedLocalVariable, 71, 2),
+        error(diag.unusedLocalVariable, 96, 2),
+        error(diag.unusedLocalVariable, 119, 2),
+        error(diag.unusedLocalVariable, 185, 2),
+        error(diag.unusedLocalVariable, 212, 2),
+        error(diag.unusedLocalVariable, 237, 2),
       ],
     );
   }
@@ -5423,72 +5317,24 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 107, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          112,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 132, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          137,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 155, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          160,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 221, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          227,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 248, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          254,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 273, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          279,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          320,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          337,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          352,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          405,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          424,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          441,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 107, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 112, 1),
+        error(diag.unusedLocalVariable, 132, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 137, 1),
+        error(diag.unusedLocalVariable, 155, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 160, 1),
+        error(diag.unusedLocalVariable, 221, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 227, 1),
+        error(diag.unusedLocalVariable, 248, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 254, 1),
+        error(diag.unusedLocalVariable, 273, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 279, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 320, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 337, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 352, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 405, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 424, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 441, 1),
       ],
     );
   }
@@ -5496,7 +5342,7 @@
   test_returnOfInvalidType_object_void() async {
     await assertErrorsInCode(
       "Object f() { void voidFn() => null; return voidFn(); }",
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 43, 8)],
+      [error(diag.returnOfInvalidTypeFromFunction, 43, 8)],
     );
   }
 
@@ -5509,8 +5355,8 @@
 dynamic set g(int x) => null;
 ''',
       [
-        error(CompileTimeErrorCode.nonVoidReturnForSetter, 12, 7),
-        error(CompileTimeErrorCode.nonVoidReturnForSetter, 47, 7),
+        error(diag.nonVoidReturnForSetter, 12, 7),
+        error(diag.nonVoidReturnForSetter, 47, 7),
       ],
     );
   }
@@ -5535,7 +5381,7 @@
 }
 set g(int x) => 42;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 41, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 41, 4)],
     );
   }
 
@@ -5558,10 +5404,10 @@
 Object set g(x) => null;
 ''',
       [
-        error(CompileTimeErrorCode.nonVoidReturnForSetter, 12, 6),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 38, 4),
-        error(CompileTimeErrorCode.nonVoidReturnForSetter, 46, 6),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 65, 4),
+        error(diag.nonVoidReturnForSetter, 12, 6),
+        error(diag.returnOfInvalidTypeFromFunction, 38, 4),
+        error(diag.nonVoidReturnForSetter, 46, 6),
+        error(diag.returnOfInvalidTypeFromFunction, 65, 4),
       ],
     );
   }
@@ -5573,10 +5419,7 @@
   var foo = (true) ? null : 3;
 }
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 15, 3),
-        error(WarningCode.deadCode, 37, 1),
-      ],
+      [error(diag.unusedLocalVariable, 15, 3), error(diag.deadCode, 37, 1)],
     );
     expectInitializerType('foo', 'int?');
   }
@@ -5588,10 +5431,7 @@
   var foo = (true) ? 3 : null;
 }
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 15, 3),
-        error(WarningCode.deadCode, 34, 4),
-      ],
+      [error(diag.unusedLocalVariable, 15, 3), error(diag.deadCode, 34, 4)],
     );
     expectInitializerType('foo', 'int?');
   }
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index 6478169..e43c3a9 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -499,10 +499,6 @@
   /// to change test expectations to match the current behavior.
   ///
   /// For example, if the unique name is `TestClass.MY_ERROR`, this method will
-  /// return `TestClass.myError`.
-  String get constantName => switch (uniqueName.split('.')) {
-    [var className, var snakeCaseName] =>
-      '$className.${snakeCaseName.toCamelCase()}',
-    _ => throw StateError('Malformed DiagnosticCode: $uniqueName'),
-  };
+  /// return `diag.myError`.
+  String get constantName => 'diag.${uniqueName.toCamelCase()}';
 }
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index 257d2c2..b5d1e4a 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -5,8 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -80,10 +79,10 @@
     expect(member, isNotNull);
     assertErrors(
       diagnostics: [
-        expectedError(ParserErrorCode.expectedTypeName, 12, 2),
-        expectedError(ParserErrorCode.expectedToken, 13, 1),
-        expectedError(ParserErrorCode.missingIdentifier, 14, 0),
-        expectedError(ParserErrorCode.missingIdentifier, 14, 0),
+        expectedError(diag.expectedTypeName, 12, 2),
+        expectedError(diag.expectedToken, 13, 1),
+        expectedError(diag.missingIdentifier, 14, 0),
+        expectedError(diag.missingIdentifier, 14, 0),
       ],
     );
 
@@ -121,11 +120,14 @@
     expect(declaration.extendsClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_empty() {
@@ -140,11 +142,14 @@
     expect(declaration.extendsClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_extends() {
@@ -159,11 +164,14 @@
     expect(declaration.extendsClause, isNotNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_extendsAndImplements() {
@@ -178,11 +186,14 @@
     expect(declaration.extendsClause, isNotNull);
     expect(declaration.implementsClause, isNotNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_extendsAndWith() {
@@ -195,14 +206,17 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.abstractKeyword, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.typeParameters, isNull);
     expect(declaration.extendsClause, isNotNull);
     expect(declaration.withClause, isNotNull);
     expect(declaration.implementsClause, isNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_extendsAndWithAndImplements() {
@@ -215,14 +229,17 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.abstractKeyword, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.typeParameters, isNull);
     expect(declaration.extendsClause, isNotNull);
     expect(declaration.withClause, isNotNull);
     expect(declaration.implementsClause, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_implements() {
@@ -237,11 +254,14 @@
     expect(declaration.extendsClause, isNull);
     expect(declaration.implementsClause, isNotNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_metadata() {
@@ -299,7 +319,7 @@
     CompilationUnitMember member = parseFullCompilationUnitMember();
     expect(member, isNotNull);
     if (!allowNativeClause) {
-      assertErrorsWithCodes([ParserErrorCode.nativeClauseShouldBeAnnotation]);
+      assertErrorsWithCodes([diag.nativeClauseShouldBeAnnotation]);
     } else {
       assertNoErrors();
     }
@@ -338,7 +358,7 @@
     if (allowNativeClause) {
       assertNoErrors();
     } else {
-      assertErrorsWithCodes([ParserErrorCode.nativeClauseShouldBeAnnotation]);
+      assertErrorsWithCodes([diag.nativeClauseShouldBeAnnotation]);
     }
     expect(member, TypeMatcher<ClassDeclaration>());
     var declaration = member as ClassDeclaration;
@@ -375,11 +395,14 @@
     expect(declaration.extendsClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(1));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNull);
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(1));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_typeAlias_implementsC() {
@@ -428,18 +451,20 @@
     expect(declaration.extendsClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
-    expect(declaration.typeParameters, isNotNull);
-    expect(declaration.typeParameters!.typeParameters, hasLength(1));
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters!.typeParameters, hasLength(1));
+
+    var classBody = declaration.body as BlockClassBody;
+    expect(classBody.leftBracket, isNotNull);
+    expect(classBody.members, hasLength(0));
+    expect(classBody.rightBracket, isNotNull);
   }
 
   void test_parseClassDeclaration_typeParameters_extends_void() {
     parseCompilationUnit(
       'class C<T extends void>{}',
-      diagnostics: [expectedError(ParserErrorCode.expectedTypeName, 18, 4)],
+      diagnostics: [expectedError(diag.expectedTypeName, 18, 4)],
     );
   }
 
@@ -459,7 +484,7 @@
     var diagnosticCodes = <DiagnosticCode>[];
     // This used to be deferred to later in the pipeline, but is now being
     // reported by the parser.
-    diagnosticCodes.add(CompileTimeErrorCode.builtInIdentifierAsType);
+    diagnosticCodes.add(diag.builtInIdentifierAsType);
     CompilationUnit unit = parseCompilationUnit(
       'abstract<dynamic> _abstract = new abstract.A();',
       codes: diagnosticCodes,
@@ -552,7 +577,7 @@
     expect(unit, isNotNull);
     // This used to be deferred to later in the pipeline, but is now being
     // reported by the parser.
-    assertErrorsWithCodes([CompileTimeErrorCode.builtInIdentifierAsType]);
+    assertErrorsWithCodes([diag.builtInIdentifierAsType]);
     expect(unit.scriptTag, isNull);
     expect(unit.directives, hasLength(0));
     expect(unit.declarations, hasLength(1));
@@ -564,7 +589,7 @@
     expect(unit, isNotNull);
     // This used to be deferred to later in the pipeline, but is now being
     // reported by the parser.
-    assertErrorsWithCodes([CompileTimeErrorCode.builtInIdentifierAsType]);
+    assertErrorsWithCodes([diag.builtInIdentifierAsType]);
     expect(unit.scriptTag, isNull);
     expect(unit.directives, hasLength(0));
     expect(unit.declarations, hasLength(1));
@@ -654,8 +679,9 @@
     assertNoErrors();
     expect(member, isClassDeclaration);
     var declaration = member as ClassDeclaration;
-    expect(declaration.name.lexeme, "A");
-    expect(declaration.members, hasLength(0));
+
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.namePart.typeParameters, isNull);
   }
 
   void test_parseCompilationUnitMember_classTypeAlias() {
@@ -1315,10 +1341,10 @@
     assertNoErrors();
     expect(declaration.documentationComment, isNull);
     expect(declaration.enumKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.constants, hasLength(1));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.body.constants, hasLength(1));
+    expect(declaration.body.rightBracket, isNotNull);
   }
 
   void test_parseEnumDeclaration_trailingComma() {
@@ -1328,10 +1354,10 @@
     assertNoErrors();
     expect(declaration.documentationComment, isNull);
     expect(declaration.enumKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.constants, hasLength(1));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.body.constants, hasLength(1));
+    expect(declaration.body.rightBracket, isNotNull);
   }
 
   void test_parseEnumDeclaration_two() {
@@ -1341,10 +1367,10 @@
     assertNoErrors();
     expect(declaration.documentationComment, isNull);
     expect(declaration.enumKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    expect(declaration.constants, hasLength(2));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
+    expect(declaration.namePart.typeName, isNotNull);
+    expect(declaration.body.constants, hasLength(2));
+    expect(declaration.body.rightBracket, isNotNull);
   }
 
   void test_parseEnumDeclaration_withDocComment_onEnum() {
@@ -1360,7 +1386,7 @@
   ONE
 }''');
     var declaration = parseFullCompilationUnitMember() as EnumDeclaration;
-    var value = declaration.constants[0];
+    var value = declaration.body.constants[0];
     expectCommentText(value.documentationComment, '/// Doc');
   }
 
@@ -1373,7 +1399,7 @@
 }
 ''');
     var declaration = parseFullCompilationUnitMember() as EnumDeclaration;
-    var value = declaration.constants[0];
+    var value = declaration.body.constants[0];
     expectCommentText(value.documentationComment, '/// Doc');
     expect(value.metadata, hasLength(1));
   }
@@ -1731,9 +1757,7 @@
     GenericTypeAlias alias =
         parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 11, 1)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.missingIdentifier, 11, 1)]);
     expect(alias.name, isNotNull);
     expect(alias.name.lexeme, 'F');
     expect(alias.typeParameters, isNotNull);
@@ -1749,9 +1773,7 @@
     GenericTypeAlias alias =
         parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 10, 2)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.missingIdentifier, 10, 2)]);
     expect(alias.name, isNotNull);
     expect(alias.name.lexeme, 'F');
     expect(alias.typeParameters, isNotNull);
@@ -1767,9 +1789,7 @@
     GenericTypeAlias alias =
         parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
-    assertErrors(
-      diagnostics: [expectedError(ParserErrorCode.missingIdentifier, 10, 1)],
-    );
+    assertErrors(diagnostics: [expectedError(diag.missingIdentifier, 10, 1)]);
     expect(alias.name, isNotNull);
     expect(alias.name.lexeme, 'F');
     expect(alias.typeParameters, isNotNull);
@@ -1931,10 +1951,10 @@
     expect(declaration.onClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -1953,10 +1973,10 @@
     expect(interfaces[0].name.lexeme, 'B');
     expect(interfaces[0].typeArguments, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -1977,10 +1997,10 @@
     expect(interfaces[1].name.lexeme, 'C');
     expect(interfaces[1].typeArguments, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -1996,10 +2016,10 @@
     expect(declaration.onClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -2018,10 +2038,10 @@
     expect(constraints[0].typeArguments, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -2042,10 +2062,10 @@
     expect(constraints[1].typeArguments!.arguments, hasLength(1));
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -2069,10 +2089,10 @@
     expect(interfaces[0].name.lexeme, 'C');
     expect(interfaces[0].typeArguments, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(0));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(0));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -2092,10 +2112,10 @@
     expect(declaration.onClause, isNull);
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
-    expect(declaration.leftBracket, isNotNull);
+    expect(declaration.body.leftBracket, isNotNull);
     expect(declaration.name.lexeme, 'A');
-    expect(declaration.members, hasLength(4));
-    expect(declaration.rightBracket, isNotNull);
+    expect(declaration.body.members, hasLength(4));
+    expect(declaration.body.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
   }
 
@@ -2144,7 +2164,7 @@
   void test_parseTopLevelVariable_external_late() {
     var unit = parseCompilationUnit(
       'external late int? i;',
-      diagnostics: [expectedError(ParserErrorCode.externalLateField, 0, 8)],
+      diagnostics: [expectedError(diag.externalLateField, 0, 8)],
     );
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     expect(declaration.externalKeyword, isNotNull);
@@ -2153,7 +2173,7 @@
   void test_parseTopLevelVariable_external_late_final() {
     var unit = parseCompilationUnit(
       'external late final int? i;',
-      diagnostics: [expectedError(ParserErrorCode.externalLateField, 0, 8)],
+      diagnostics: [expectedError(diag.externalLateField, 0, 8)],
     );
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     expect(declaration.externalKeyword, isNotNull);
@@ -2162,7 +2182,7 @@
   void test_parseTopLevelVariable_final_late() {
     var unit = parseCompilationUnit(
       'final late a;',
-      diagnostics: [expectedError(ParserErrorCode.modifierOutOfOrder, 6, 4)],
+      diagnostics: [expectedError(diag.modifierOutOfOrder, 6, 4)],
     );
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
@@ -2174,9 +2194,7 @@
   void test_parseTopLevelVariable_late() {
     var unit = parseCompilationUnit(
       'late a;',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 5, 1),
-      ],
+      diagnostics: [expectedError(diag.missingConstFinalVarOrType, 5, 1)],
     );
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
@@ -2197,9 +2215,7 @@
   void test_parseTopLevelVariable_late_init() {
     var unit = parseCompilationUnit(
       'late a = 0;',
-      diagnostics: [
-        expectedError(ParserErrorCode.missingConstFinalVarOrType, 5, 1),
-      ],
+      diagnostics: [expectedError(diag.missingConstFinalVarOrType, 5, 1)],
     );
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     var declarationList = declaration.variables;
@@ -2508,7 +2524,8 @@
     B> {}
 ''');
     var classDeclaration = parseFullCompilationUnitMember() as ClassDeclaration;
-    var typeVariable = classDeclaration.typeParameters!.typeParameters[0];
+    var typeVariable =
+        classDeclaration.namePart.typeParameters!.typeParameters[0];
     expectCommentText(typeVariable.documentationComment, '/// Doc');
   }
 }
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 64c2fb6..0c45a9b 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -472,11 +472,7 @@
     _assertReplacementForChildren<ConstructorDeclaration>(
       destination: findNode.constructor('A.named'),
       source: findNode.constructor('B.named'),
-      childAccessors: [
-        (node) => node.body,
-        (node) => node.parameters,
-        (node) => node.returnType,
-      ],
+      childAccessors: [(node) => node.body, (node) => node.parameters],
     );
     _assertAnnotatedNode(findNode.constructor('A.named'));
   }
@@ -577,6 +573,30 @@
     );
   }
 
+  void test_enumBody_constants() {
+    var findNode = _parseStringToFindNode(r'''
+enum E1 {one}
+enum E2 {two}
+''');
+    _assertReplaceInList(
+      destination: findNode.enumDeclaration('enum E1').body,
+      child: findNode.enumConstantDeclaration('one'),
+      replacement: findNode.enumConstantDeclaration('two'),
+    );
+  }
+
+  void test_enumBody_members() {
+    var findNode = _parseStringToFindNode(r'''
+enum E1 {one; void foo() {}}
+enum E2 {two; void bar() {}}
+''');
+    _assertReplaceInList(
+      destination: findNode.enumDeclaration('enum E1').body,
+      child: findNode.methodDeclaration('foo'),
+      replacement: findNode.methodDeclaration('bar'),
+    );
+  }
+
   void test_enumConstantDeclaration() {
     var findNode = _parseStringToFindNode(r'''
 enum E {
@@ -598,37 +618,12 @@
       destination: findNode.enumDeclaration('enum E1'),
       source: findNode.enumDeclaration('enum E2'),
       childAccessors: [
-        (node) => node.typeParameters!,
         (node) => node.withClause!,
         (node) => node.implementsClause!,
       ],
     );
   }
 
-  void test_enumDeclaration_constants() {
-    var findNode = _parseStringToFindNode(r'''
-enum E1 {one}
-enum E2 {two}
-''');
-    _assertReplaceInList(
-      destination: findNode.enumDeclaration('enum E1'),
-      child: findNode.enumConstantDeclaration('one'),
-      replacement: findNode.enumConstantDeclaration('two'),
-    );
-  }
-
-  void test_enumDeclaration_members() {
-    var findNode = _parseStringToFindNode(r'''
-enum E1 {one; void foo() {}}
-enum E2 {two; void bar() {}}
-''');
-    _assertReplaceInList(
-      destination: findNode.enumDeclaration('enum E1'),
-      child: findNode.methodDeclaration('foo'),
-      replacement: findNode.methodDeclaration('bar'),
-    );
-  }
-
   void test_exportDirective() {
     var findNode = _parseStringToFindNode(r'''
 @myA1
diff --git a/pkg/analyzer/test/generated/variance_parser_test.dart b/pkg/analyzer/test/generated/variance_parser_test.dart
index 0d666ad..540582c 100644
--- a/pkg/analyzer/test/generated/variance_parser_test.dart
+++ b/pkg/analyzer/test/generated/variance_parser_test.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -47,9 +47,9 @@
     parseCompilationUnit(
       'class A<in T, inout U, out V> { }',
       diagnostics: [
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 8, 2),
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 14, 5),
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 23, 3),
+        expectedError(diag.experimentNotEnabledOffByDefault, 8, 2),
+        expectedError(diag.experimentNotEnabledOffByDefault, 14, 5),
+        expectedError(diag.experimentNotEnabledOffByDefault, 23, 3),
       ],
       featureSet: _disabledFeatureSet,
     );
@@ -58,9 +58,7 @@
   void test_class_disabled_single() {
     parseCompilationUnit(
       'class A<out T> { }',
-      diagnostics: [
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 8, 3),
-      ],
+      diagnostics: [expectedError(diag.experimentNotEnabledOffByDefault, 8, 3)],
       featureSet: _disabledFeatureSet,
     );
   }
@@ -69,9 +67,9 @@
     var unit = parseCompilationUnit('class A<in T, inout U, out V, W> { }');
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.declarations[0] as ClassDeclaration;
-    expect(classDecl.name.lexeme, 'A');
+    expect(classDecl.namePart.typeName.lexeme, 'A');
 
-    var typeParameters = classDecl.typeParameters!;
+    var typeParameters = classDecl.namePart.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(4));
     expect(typeParameters.typeParameters[0].name.lexeme, 'T');
     expect(typeParameters.typeParameters[1].name.lexeme, 'U');
@@ -113,15 +111,15 @@
     var unit = parseCompilationUnit(
       'class A<in out inout T> { }',
       diagnostics: [
-        expectedError(ParserErrorCode.multipleVarianceModifiers, 11, 3),
-        expectedError(ParserErrorCode.multipleVarianceModifiers, 15, 5),
+        expectedError(diag.multipleVarianceModifiers, 11, 3),
+        expectedError(diag.multipleVarianceModifiers, 15, 5),
       ],
     );
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.declarations[0] as ClassDeclaration;
-    expect(classDecl.name.lexeme, 'A');
+    expect(classDecl.namePart.typeName.lexeme, 'A');
 
-    var typeParameters = classDecl.typeParameters!;
+    var typeParameters = classDecl.namePart.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
     expect(typeParameters.typeParameters[0].name.lexeme, 'T');
   }
@@ -130,9 +128,9 @@
     var unit = parseCompilationUnit('class A<in T> { }');
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.declarations[0] as ClassDeclaration;
-    expect(classDecl.name.lexeme, 'A');
+    expect(classDecl.namePart.typeName.lexeme, 'A');
 
-    var typeParameters = classDecl.typeParameters!;
+    var typeParameters = classDecl.namePart.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
     expect(typeParameters.typeParameters[0].name.lexeme, 'T');
 
@@ -146,8 +144,8 @@
     parseCompilationUnit(
       'void A(in int value) {}',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 7, 2),
-        expectedError(ParserErrorCode.expectedToken, 10, 3),
+        expectedError(diag.expectedIdentifierButGotKeyword, 7, 2),
+        expectedError(diag.expectedToken, 10, 3),
       ],
       featureSet: _disabledFeatureSet,
     );
@@ -157,8 +155,8 @@
     parseCompilationUnit(
       'void A(in int value) {}',
       diagnostics: [
-        expectedError(ParserErrorCode.expectedIdentifierButGotKeyword, 7, 2),
-        expectedError(ParserErrorCode.expectedToken, 10, 3),
+        expectedError(diag.expectedIdentifierButGotKeyword, 7, 2),
+        expectedError(diag.expectedToken, 10, 3),
       ],
     );
   }
@@ -166,7 +164,7 @@
   void test_list_disabled() {
     parseCompilationUnit(
       'List<out String> stringList = [];',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 9, 6)],
+      diagnostics: [expectedError(diag.expectedToken, 9, 6)],
       featureSet: _disabledFeatureSet,
     );
   }
@@ -174,7 +172,7 @@
   void test_list_enabled() {
     parseCompilationUnit(
       'List<out String> stringList = [];',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 9, 6)],
+      diagnostics: [expectedError(diag.expectedToken, 9, 6)],
     );
   }
 
@@ -182,8 +180,8 @@
     parseCompilationUnit(
       'mixin A<inout T, out U> { }',
       diagnostics: [
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 8, 5),
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 17, 3),
+        expectedError(diag.experimentNotEnabledOffByDefault, 8, 5),
+        expectedError(diag.experimentNotEnabledOffByDefault, 17, 3),
       ],
       featureSet: _disabledFeatureSet,
     );
@@ -192,9 +190,7 @@
   void test_mixin_disabled_single() {
     parseCompilationUnit(
       'mixin A<inout T> { }',
-      diagnostics: [
-        expectedError(ParserErrorCode.experimentNotEnabledOffByDefault, 8, 5),
-      ],
+      diagnostics: [expectedError(diag.experimentNotEnabledOffByDefault, 8, 5)],
       featureSet: _disabledFeatureSet,
     );
   }
@@ -213,7 +209,7 @@
   void test_typedef_disabled() {
     parseCompilationUnit(
       'typedef A<inout X> = X Function(X);',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 16, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 16, 1)],
       featureSet: _disabledFeatureSet,
     );
   }
@@ -221,7 +217,7 @@
   void test_typedef_enabled() {
     parseCompilationUnit(
       'typedef A<inout X> = X Function(X);',
-      diagnostics: [expectedError(ParserErrorCode.expectedToken, 16, 1)],
+      diagnostics: [expectedError(diag.expectedToken, 16, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/id_tests/constant_test.dart b/pkg/analyzer/test/id_tests/constant_test.dart
index e2e7d9a..7ffbb42 100644
--- a/pkg/analyzer/test/id_tests/constant_test.dart
+++ b/pkg/analyzer/test/id_tests/constant_test.dart
@@ -14,7 +14,7 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/analysis/testing_data.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/util/ast_data_extractor.dart';
 
 import '../util/id_testing_helper.dart';
@@ -59,9 +59,7 @@
   ) {
     var diagnosticCodes = diagnostics
         .map((e) => e.diagnosticCode)
-        .where(
-          (c) => c != CompileTimeErrorCode.constInitializedWithNonConstantValue,
-        );
+        .where((c) => c != diag.constInitializedWithNonConstantValue);
     return diagnosticCodes.isNotEmpty ? diagnosticCodes.join(',') : null;
   }
 
@@ -83,9 +81,9 @@
   String? computeNodeValue(Id id, AstNode node) {
     if (node is Identifier) {
       var element = node.element;
-      if (element is PropertyAccessorElement && element.isSynthetic) {
+      if (element is PropertyAccessorElement && element.isOriginVariable) {
         var variable = element.variable;
-        if (!variable.isSynthetic && variable.isConst) {
+        if (variable.isOriginDeclaration && variable.isConst) {
           var value = variable.computeConstantValue();
           if (value != null) return _stringify(value);
         }
diff --git a/pkg/analyzer/test/id_tests/definite_assignment_test.dart b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
index 97cde8d..3320d4a 100644
--- a/pkg/analyzer/test/id_tests/definite_assignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/src/dart/analysis/testing_data.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/util/ast_data_extractor.dart';
 
 import '../util/id_testing_helper.dart';
@@ -53,10 +53,7 @@
   ) {
     var diagnosticCodes = diagnostics
         .map((e) => e.diagnosticCode)
-        .where(
-          (c) =>
-              c != CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-        );
+        .where((c) => c != diag.definitelyUnassignedLateLocalVariable);
     return diagnosticCodes.isNotEmpty ? diagnosticCodes.join(',') : null;
   }
 
diff --git a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
index edca4d3..1f4c4f8 100644
--- a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/src/dart/analysis/testing_data.dart';
 import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/util/ast_data_extractor.dart';
 
 import '../util/id_testing_helper.dart';
@@ -53,10 +53,7 @@
   ) {
     var diagnosticCodes = diagnostics
         .map((e) => e.diagnosticCode)
-        .where(
-          (c) =>
-              c != CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-        );
+        .where((c) => c != diag.definitelyUnassignedLateLocalVariable);
     return diagnosticCodes.isNotEmpty ? diagnosticCodes.join(',') : null;
   }
 
diff --git a/pkg/analyzer/test/source/error_processor_test.dart b/pkg/analyzer/test/source/error_processor_test.dart
index 948827c..5d48e2d 100644
--- a/pkg/analyzer/test/source/error_processor_test.dart
+++ b/pkg/analyzer/test/source/error_processor_test.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
 import 'package:analyzer/src/dart/analysis/analysis_options.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:collection/collection.dart';
 import 'package:test/test.dart';
 import 'package:yaml/yaml.dart';
@@ -21,7 +21,7 @@
     source: TestSource(),
     offset: 0,
     length: 1,
-    diagnosticCode: CompileTimeErrorCode.invalidAssignment,
+    diagnosticCode: diag.invalidAssignment,
     arguments: [
       ['x'],
       ['y'],
@@ -32,7 +32,7 @@
     source: TestSource(),
     offset: 0,
     length: 1,
-    diagnosticCode: WarningCode.assignmentOfDoNotStore,
+    diagnosticCode: diag.assignmentOfDoNotStore,
     arguments: [
       ['x'],
     ],
@@ -42,7 +42,7 @@
     source: TestSource(),
     offset: 0,
     length: 1,
-    diagnosticCode: WarningCode.unusedLocalVariable,
+    diagnosticCode: diag.unusedLocalVariable,
     arguments: [
       ['x'],
     ],
@@ -52,7 +52,7 @@
     source: TestSource(),
     offset: 0,
     length: 1,
-    diagnosticCode: CompileTimeErrorCode.useOfVoidResult,
+    diagnosticCode: diag.useOfVoidResult,
   );
 
   // We in-line a lint code here in order to avoid adding a dependency on the
@@ -64,8 +64,7 @@
     diagnosticCode: LintCode(
       'annotate_overrides',
       '',
-      // ignore: deprecated_member_use_from_same_package
-      uniqueNameCheck: 'LintCode.annotate_overrides',
+      uniqueName: 'LintCode.annotate_overrides',
     ),
   );
 
@@ -104,6 +103,21 @@
 ''');
       expect(context.getProcessor(unused_local_variable), isNull);
     });
+
+    test('applies to analyzer warning even if lower case', () {
+      var errorProcessor = ErrorProcessor('cast_from_null_always_fails');
+      expect(
+        errorProcessor.appliesTo(
+          Diagnostic.tmp(
+            source: TestSource(),
+            offset: 0,
+            length: 1,
+            diagnosticCode: diag.castFromNullAlwaysFails,
+          ),
+        ),
+        true,
+      );
+    });
   });
 
   group('ErrorConfig', () {
diff --git a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
index 6a631b8..a34178e 100644
--- a/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart
@@ -124,7 +124,10 @@
 
   test_new_includedPaths_notAbsolute() {
     expect(
-      () => AnalysisContextCollectionImpl(includedPaths: ['root']),
+      () => AnalysisContextCollectionImpl(
+        includedPaths: ['root'],
+        withFineDependencies: true,
+      ),
       throwsArgumentError,
     );
   }
@@ -133,6 +136,7 @@
     expect(
       () => AnalysisContextCollectionImpl(
         includedPaths: [convertPath('/root/lib/../lib')],
+        withFineDependencies: true,
       ),
       throwsArgumentError,
     );
@@ -155,6 +159,7 @@
       () => AnalysisContextCollectionImpl(
         includedPaths: ['/root'],
         sdkPath: 'sdk',
+        withFineDependencies: true,
       ),
       throwsArgumentError,
     );
@@ -165,6 +170,7 @@
       () => AnalysisContextCollectionImpl(
         includedPaths: [convertPath('/root')],
         sdkPath: '/home/sdk/../sdk',
+        withFineDependencies: true,
       ),
       throwsArgumentError,
     );
@@ -177,6 +183,7 @@
       resourceProvider: resourceProvider,
       includedPaths: includedPaths,
       sdkPath: sdkRoot.path,
+      withFineDependencies: true,
     );
   }
 }
@@ -328,7 +335,7 @@
         workspacePackage_0_0
       /home/test/lib/nestedNoYaml/a.dart
         uri: package:test/nestedNoYaml/a.dart
-        analysisOptions_0
+        analysisOptions_1
         workspacePackage_0_0
   /home/test/lib/nested
     packagesFile: /home/test/lib/nested/.dart_tool/package_config.json
@@ -337,11 +344,12 @@
     analyzedFiles
       /home/test/lib/nested/lib/c.dart
         uri: package:nested/c.dart
-        analysisOptions_1
+        analysisOptions_2
         workspacePackage_1_0
 analysisOptions
   analysisOptions_0: /home/test/lib/analysis_options.yaml
   analysisOptions_1: /home/test/lib/analysis_options.yaml
+  analysisOptions_2: /home/test/lib/analysis_options.yaml
 workspaces
   workspace_0: PackageConfigWorkspace
     root: /home/test
@@ -1126,6 +1134,7 @@
       resourceProvider: resourceProvider,
       sdkPath: sdkRoot.path,
       includedPaths: [getFolder(package1RootPath).path],
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, r'''
@@ -1194,6 +1203,7 @@
         getFolder(package1RootPath).path,
         getFolder(package2RootPath).path,
       ],
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, r'''
@@ -1279,6 +1289,7 @@
         getFolder(package1RootPath).path,
         getFolder(package2RootPath).path,
       ],
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, r'''
@@ -1353,6 +1364,7 @@
       resourceProvider: resourceProvider,
       sdkPath: sdkRoot.path,
       includedPaths: [getFolder(workspaceRootPath).path],
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, r'''
@@ -1432,6 +1444,7 @@
         getFolder(workspaceRootPath).path,
         getFolder(package1RootPath).path,
       ],
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, r'''
@@ -1507,6 +1520,7 @@
         getFolder(package1RootPath).path,
         getFolder(package2RootPath).path,
       ],
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, r'''
@@ -1534,6 +1548,126 @@
 ''');
   }
 
+  test_resolutionWorkspace_singlePackage_analysisOptions_intermediate() async {
+    var workspaceRootPath = '/home';
+    var package1RootPath = '$workspaceRootPath/packages/package1';
+
+    newPubspecYamlFile(workspaceRootPath, r'''
+name: root_package
+environment:
+  sdk: ^3.6.0
+workspace:
+  - packages/package1
+''');
+    newAnalysisOptionsYamlFile('$workspaceRootPath/packages', r'''
+linter:
+  rules:
+    - prefer_final_locals
+''');
+    newFile('$workspaceRootPath/lib/main.dart', '');
+
+    newPubspecYamlFile(package1RootPath, r'''
+name: package1
+environment:
+  sdk: ^3.6.0
+resolution: workspace
+''');
+    newFile('$package1RootPath/lib/package1.dart', '');
+
+    newPackageConfigJsonFileFromBuilder(
+      workspaceRootPath,
+      PackageConfigFileBuilder()
+        ..add(name: 'root_package', rootPath: workspaceRootPath)
+        ..add(name: 'package1', rootPath: package1RootPath),
+    );
+
+    var collection = AnalysisContextCollectionImpl(
+      resourceProvider: resourceProvider,
+      sdkPath: sdkRoot.path,
+      includedPaths: [getFolder(package1RootPath).path],
+      withFineDependencies: true,
+    );
+
+    configuration.withLintRules = true;
+    _assertCollectionText(collection, r'''
+contexts
+  /home
+    packagesFile: /home/.dart_tool/package_config.json
+    workspace: workspace_0
+    analyzedFiles
+      /home/packages/package1/lib/package1.dart
+        uri: package:package1/package1.dart
+        analysisOptions_0
+        workspacePackage_0_0
+analysisOptions
+  analysisOptions_0: /home/packages/analysis_options.yaml
+    lintRules
+      prefer_final_locals
+workspaces
+  workspace_0: PackageConfigWorkspace
+    root: /home
+    pubPackages
+      workspacePackage_0_0: PubPackage
+        root: /home/packages/package1
+        sdkVersionConstraint: ^3.6.0
+''');
+  }
+
+  test_resolutionWorkspace_singlePackage_nestedInLib() async {
+    var workspaceRootPath = '/home';
+    var package1RootPath = '$workspaceRootPath/lib/package1';
+
+    newPubspecYamlFile(workspaceRootPath, r'''
+name: root_package
+environment:
+  sdk: ^3.6.0
+workspace:
+  - lib/package1
+''');
+    newFile('$workspaceRootPath/lib/main.dart', '');
+
+    newPubspecYamlFile(package1RootPath, r'''
+name: package1
+environment:
+  sdk: ^3.6.0
+resolution: workspace
+''');
+    newFile('$package1RootPath/lib/package1.dart', '');
+
+    newPackageConfigJsonFileFromBuilder(
+      workspaceRootPath,
+      PackageConfigFileBuilder()
+        ..add(name: 'root_package', rootPath: workspaceRootPath)
+        ..add(name: 'package1', rootPath: package1RootPath),
+    );
+
+    var collection = AnalysisContextCollectionImpl(
+      resourceProvider: resourceProvider,
+      sdkPath: sdkRoot.path,
+      includedPaths: [getFolder(package1RootPath).path],
+      withFineDependencies: true,
+    );
+
+    // Note: `package:package1/package1.dart` URI.
+    _assertCollectionText(collection, r'''
+contexts
+  /home
+    packagesFile: /home/.dart_tool/package_config.json
+    workspace: workspace_0
+    analyzedFiles
+      /home/lib/package1/lib/package1.dart
+        uri: package:package1/package1.dart
+        workspacePackage_0_0
+workspaces
+  workspace_0: PackageConfigWorkspace
+    root: /home
+    pubPackages
+      workspacePackage_0_0: PubPackage
+        root: /home/lib/package1
+        sdkVersionConstraint: ^3.6.0
+''');
+  }
+
   void _assertCollectionText(
     AnalysisContextCollectionImpl collection,
     String expected,
@@ -1565,6 +1699,7 @@
       includedPaths: [getFolder(workspaceRootPath).path],
       optionsFile: optionsFile?.path,
       updateAnalysisOptions4: updateAnalysisOptions,
+      withFineDependencies: true,
     );
 
     _assertCollectionText(collection, expected);
diff --git a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
index cda434a..062d43e 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
@@ -75,7 +75,10 @@
     var projectPath = convertPath('/home/test');
     var optionsFile = newAnalysisOptionsYamlFile(
       projectPath,
-      analysisOptionsContent(strictRawTypes: true),
+      analysisOptionsContent(
+        strictRawTypes: true,
+        propagateLinterExceptions: false,
+      ),
     );
 
     var analysisContext = _createSingleAnalysisContext(projectPath);
diff --git a/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart b/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart
index 9bcdac5..3be898b 100644
--- a/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart
@@ -39,6 +39,19 @@
     );
   }
 
+  test_classMemberNames_extension() {
+    DefinedNames names = _computeDefinedNames('''
+extension E on int {
+  int a;
+  void b() {}
+  int get c => 0;
+  set d(int _) {}
+}
+''');
+    expect(names.topLevelNames, unorderedEquals(['E']));
+    expect(names.classMemberNames, unorderedEquals(['a', 'b', 'c', 'd']));
+  }
+
   test_classMemberNames_extensionType() {
     DefinedNames names = _computeDefinedNames('''
 extension type A.named(int it) {
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
index 2bdcb5f..c53f0ad 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_testing/utilities/utilities.dart';
@@ -62,7 +63,7 @@
 
     // `strict-cast: true`, so has errors.
     assertErrorsInList(await _computeTestFileDiagnostics(), [
-      error(CompileTimeErrorCode.invalidAssignment, 23, 1),
+      error(diag.invalidAssignment, 23, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 501a7fd..6ecf1cf 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -20,7 +20,7 @@
 import 'package:analyzer/src/dart/analysis/status.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/lint_registration_mixin.dart';
 import 'package:analyzer/src/utilities/extensions/async.dart';
 import 'package:analyzer/utilities/package_config_file_builder.dart';
@@ -2948,7 +2948,7 @@
 library my.lib;
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 21, 8)],
+      [error(diag.uriDoesNotExist, 21, 8)],
     );
   }
 
@@ -2966,7 +2966,7 @@
 library my.lib;
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfNonPart, 21, 8)],
+      [error(diag.partOfNonPart, 21, 8)],
     );
   }
 
@@ -2986,7 +2986,7 @@
 library my.lib;
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfDifferentLibrary, 21, 8)],
+      [error(diag.partOfDifferentLibrary, 21, 8)],
     );
   }
 
@@ -3006,7 +3006,7 @@
 library my.lib;
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfDifferentLibrary, 21, 8)],
+      [error(diag.partOfDifferentLibrary, 21, 8)],
     );
   }
 
@@ -3588,13 +3588,13 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_6
+      kind: library_7
         libraryImports
           library_1 dart:core synthetic
-        fileKinds: library_6
+        fileKinds: library_7
         cycle_2
           dependencies: dart:core
-          libraries: library_6
+          libraries: library_7
           apiSignature_1
       unlinkedKey: k02
 libraryCycles
@@ -3724,9 +3724,11 @@
   declarations
     ClassDeclaration
       classKeyword: class
-      name: A
-      leftBracket: {
-      rightBracket: }
+      namePart: NameWithTypeParameters
+        typeName: A
+      body: BlockClassBody
+        leftBracket: {
+        rightBracket: }
 ''');
     }
   }
@@ -3771,9 +3773,11 @@
   declarations
     ClassDeclaration
       classKeyword: class
-      name: A
-      leftBracket: {
-      rightBracket: }
+      namePart: NameWithTypeParameters
+        typeName: A
+      body: BlockClassBody
+        leftBracket: {
+        rightBracket: }
 ''');
 
     expect(driver.knownFiles.resources, unorderedEquals([a]));
@@ -7175,7 +7179,7 @@
       class B
         supertype: A
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
 ''',
       updatedA: r'''
 class A {
@@ -7258,7 +7262,7 @@
       class B
         supertype: A
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
 ''',
     );
   }
@@ -9315,7 +9319,7 @@
       class B
         supertype: A
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
 ''',
       updatedA: r'''
 class A {
@@ -9395,7 +9399,7 @@
       class B
         supertype: A
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
 ''',
     );
   }
@@ -22786,10 +22790,10 @@
     classes
       class B
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
       class C
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
     exportedReferences
       exported[(0, 0)] package:test/a.dart::@class::A
       declared <testLibrary>::@class::B
@@ -22833,10 +22837,10 @@
     classes
       class B
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
       class C
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
     exportedReferences
       exported[(0, 0)] package:test/a.dart::@class::A
       declared <testLibrary>::@class::B
@@ -22905,7 +22909,7 @@
     classes
       class B
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
     exportedReferences
       exported[(0, 0)] package:test/a.dart::@class::A
       declared <testLibrary>::@class::B
@@ -22976,7 +22980,7 @@
     classes
       class B
         constructors
-          synthetic new
+          synthetic isOriginImplicitDefault new
     exportedReferences
       exported[(0, 0)] package:test/a.dart::@class::A
       exported[(0, 0)] package:test/a.dart::@class::C
@@ -26517,7 +26521,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
     exportedReferences
       declared <testLibrary>::@getter::x
@@ -26598,7 +26602,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: double
     exportedReferences
       declared <testLibrary>::@getter::x
@@ -34902,6 +34906,7 @@
 [status] working
 [operation] linkLibraryCycle SDK
 [operation] linkLibraryCycle SDK
+[operation] linkLibraryCycle SDK
 [operation] linkLibraryCycle
   package:test/a.dart
     hashForRequirements: #H2
@@ -42147,7 +42152,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       updatedA: r'''
@@ -42194,7 +42199,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: double
 ''',
     );
@@ -42248,7 +42253,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       updatedA: r'''
@@ -42274,7 +42279,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
     );
@@ -42327,7 +42332,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       updatedA: r'''
@@ -42376,7 +42381,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: double
 ''',
     );
@@ -42433,7 +42438,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       updatedA: r'''
@@ -42462,7 +42467,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
     );
@@ -42537,7 +42542,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       // Change the initializer, now `double`.
@@ -42614,7 +42619,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: double
 ''',
     );
@@ -42667,7 +42672,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       // Change the initializer, now `double`.
@@ -42718,7 +42723,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: double
 ''',
     );
@@ -69067,6 +69072,136 @@
     );
   }
 
+  test_manifest_class_method_topMerge_mixins_interfaces() async {
+    await _runLibraryManifestScenario(
+      initialCode: r'''
+abstract class A {
+  Future<void> foo();
+}
+
+abstract mixin class B implements A {
+  Future<dynamic> foo() async {}
+}
+
+abstract mixin class C implements A {}
+
+class D with B, C implements A {}
+''',
+      expectedInitialEvents: r'''
+[operation] linkLibraryCycle SDK
+[operation] linkLibraryCycle
+  package:test/test.dart
+    hashForRequirements: #H0
+    declaredClasses
+      A: #M0
+        declaredMethods
+          foo: #M1
+        interface: #M2
+          map
+            foo: #M1
+      B: #M3
+        declaredMethods
+          foo: #M4
+        interface: #M5
+          map
+            foo: #M4
+          implemented
+            foo: #M4
+          inherited
+            foo: #M1
+      C: #M6
+        interface: #M7
+          map
+            foo: #M1
+          inherited
+            foo: #M1
+      D: #M8
+        interface: #M9
+          map
+            foo: #M10
+          combinedIds
+            [#M4, #M1]: #M10
+          implemented
+            foo: #M4
+          superImplemented
+            [1]
+              foo: #M4
+            [2]
+              foo: #M4
+          inherited
+            foo: #M10
+    exportMapId: #M11
+    exportMap
+      A: #M0
+      B: #M3
+      C: #M6
+      D: #M8
+''',
+      updatedCode: r'''
+abstract class A {
+  Future<void> foo();
+}
+
+abstract mixin class B implements A {
+  Future<int> foo() async {} // was Future<dynamic>
+}
+
+abstract mixin class C implements A {}
+
+class D with B, C implements A {}
+''',
+      expectedUpdatedEvents: r'''
+[operation] linkLibraryCycle
+  package:test/test.dart
+    hashForRequirements: #H1
+    declaredClasses
+      A: #M0
+        declaredMethods
+          foo: #M1
+        interface: #M2
+          map
+            foo: #M1
+      B: #M3
+        declaredMethods
+          foo: #M12
+        interface: #M13
+          map
+            foo: #M12
+          implemented
+            foo: #M12
+          inherited
+            foo: #M1
+      C: #M6
+        interface: #M7
+          map
+            foo: #M1
+          inherited
+            foo: #M1
+      D: #M8
+        interface: #M14
+          map
+            foo: #M15
+          combinedIds
+            [#M12, #M1]: #M15
+          implemented
+            foo: #M12
+          superImplemented
+            [1]
+              foo: #M12
+            [2]
+              foo: #M12
+          inherited
+            foo: #M12
+    exportMapId: #M11
+    exportMap
+      A: #M0
+      B: #M3
+      C: #M6
+      D: #M8
+''',
+    );
+  }
+
   test_manifest_class_method_typeParameter() async {
     configuration.withElementManifests = true;
     await _runLibraryManifestScenario(
@@ -98997,7 +99132,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       updatedA: r'''
@@ -99046,7 +99181,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: double
 ''',
     );
@@ -99155,7 +99290,7 @@
 [future] getLibraryByUri T1
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
       updatedA: r'''
@@ -99187,7 +99322,7 @@
 [future] getLibraryByUri T2
   library
     topLevelVariables
-      final hasInitializer x
+      final hasImplicitType hasInitializer isOriginDeclaration x
         type: int
 ''',
     );
@@ -101310,8 +101445,7 @@
   static const LintCode code = LintCode(
     'always_reported_lint',
     'This lint is reported for all files',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.always_reported_lint',
+    uniqueName: 'LintCode.always_reported_lint',
   );
 
   _AlwaysReportedLint() : super(name: 'always_reported_lint', description: '');
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 0af47b8..8be24e7 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -574,14 +574,14 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_9
+      kind: library_10
         libraryImports
           library_1
           library_4 dart:core synthetic
-        fileKinds: library_9
+        fileKinds: library_10
         cycle_5
           dependencies: cycle_1 dart:core
-          libraries: library_9
+          libraries: library_10
           apiSignature_4
       unlinkedKey: k01
   /home/test/lib/b.dart
@@ -640,28 +640,28 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_9
+      kind: library_10
         libraryImports
-          library_10
+          library_11
           library_4 dart:core synthetic
-        fileKinds: library_9
+        fileKinds: library_10
         cycle_6
           dependencies: cycle_7 dart:core
-          libraries: library_9
+          libraries: library_10
           apiSignature_5
       unlinkedKey: k01
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
       id: file_1
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2
           library_4 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_7
           dependencies: cycle_2 dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_6
           users: cycle_6
       referencingFiles: file_0
@@ -709,29 +709,29 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_9
+      kind: library_10
         libraryImports
-          library_11
+          library_12
           library_4 dart:core synthetic
-        fileKinds: library_9
+        fileKinds: library_10
         cycle_8
           dependencies: cycle_9 dart:core
-          libraries: library_9
+          libraries: library_10
           apiSignature_7
       unlinkedKey: k01
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
       id: file_1
-      kind: library_11
+      kind: library_12
         libraryImports
           library_4 dart:core synthetic
         libraryExports
           library_3
-        fileKinds: library_11
+        fileKinds: library_12
         cycle_9
           dependencies: cycle_3 dart:core
-          libraries: library_11
+          libraries: library_12
           apiSignature_8
           users: cycle_8
       referencingFiles: file_0
@@ -779,28 +779,28 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_12
+      kind: library_13
         libraryImports
           library_4 dart:core synthetic
-        fileKinds: library_12
+        fileKinds: library_13
         cycle_10
           dependencies: dart:core
-          libraries: library_12
+          libraries: library_13
           apiSignature_0
       unlinkedKey: k00
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
       id: file_1
-      kind: library_11
+      kind: library_12
         libraryImports
           library_4 dart:core synthetic
         libraryExports
           library_3
-        fileKinds: library_11
+        fileKinds: library_12
         cycle_9
           dependencies: cycle_3 dart:core
-          libraries: library_11
+          libraries: library_12
           apiSignature_8
       unlinkedKey: k03
   /home/test/lib/c.dart
@@ -891,13 +891,13 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
           users: cycle_3
       referencingFiles: file_1
@@ -910,7 +910,7 @@
         libraryImports
           library_2 dart:core synthetic
         libraryExports
-          library_7
+          library_8
         fileKinds: library_1
         cycle_3
           dependencies: cycle_2 dart:core
@@ -975,13 +975,13 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
           users: cycle_3
       referencingFiles: file_1
@@ -992,7 +992,7 @@
       id: file_1
       kind: library_1
         libraryImports
-          library_7
+          library_8
           library_2 dart:core synthetic
         fileKinds: library_1
         cycle_3
@@ -1127,7 +1127,7 @@
           library_1 dart:core synthetic
         docLibraryImports
           library_3 dart:async
-          library_5 dart:math
+          library_6 dart:math
         fileKinds: library_0
         cycle_0
           dependencies: dart:core
@@ -1158,7 +1158,7 @@
           library_1 dart:core synthetic
         libraryExports
           library_3 dart:async
-          library_5 dart:math
+          library_6 dart:math
         fileKinds: library_0
         cycle_0
           dependencies: dart:core
@@ -1548,7 +1548,7 @@
       kind: library_0
         libraryImports
           library_3 dart:async
-          library_5 dart:math
+          library_6 dart:math
           library_1 dart:core synthetic
         fileKinds: library_0
         cycle_0
@@ -1578,7 +1578,7 @@
       kind: library_0
         libraryImports
           library_1 dart:core
-          library_5 dart:math
+          library_6 dart:math
         fileKinds: library_0
         cycle_0
           dependencies: dart:core
@@ -1989,15 +1989,15 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_3
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_0
       unlinkedKey: k00
   /home/test/lib/b.dart
@@ -2206,7 +2206,7 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: partOfUriKnown_8
+      kind: partOfUriKnown_9
         uriFile: file_2
         library: library_2
       referencingFiles: file_2
@@ -2228,9 +2228,9 @@
         libraryImports
           library_3 dart:core synthetic
         partIncludes
-          partOfUriKnown_8
+          partOfUriKnown_9
           partOfUriKnown_1
-        fileKinds: library_2 partOfUriKnown_8 partOfUriKnown_1
+        fileKinds: library_2 partOfUriKnown_9 partOfUriKnown_1
         cycle_2
           dependencies: dart:core
           libraries: library_2
@@ -2252,7 +2252,7 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: partOfUriKnown_8
+      kind: partOfUriKnown_9
         uriFile: file_2
         library: library_2
       referencingFiles: file_2
@@ -2261,7 +2261,7 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfUriKnown_9
+      kind: partOfUriKnown_10
         uriFile: file_2
         library: library_2
       referencingFiles: file_2
@@ -2274,9 +2274,9 @@
         libraryImports
           library_3 dart:core synthetic
         partIncludes
-          partOfUriKnown_8
           partOfUriKnown_9
-        fileKinds: library_2 partOfUriKnown_8 partOfUriKnown_9
+          partOfUriKnown_10
+        fileKinds: library_2 partOfUriKnown_9 partOfUriKnown_10
         cycle_3
           dependencies: dart:core
           libraries: library_2
@@ -2603,17 +2603,17 @@
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         name: my.lib
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfName_1
-        fileKinds: library_7 partOfName_1
+        fileKinds: library_8 partOfName_1
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -2621,9 +2621,9 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_0 library_7
+        libraries: library_0 library_8
         library: library_0
-      referencingFiles: file_0 file_7
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -2652,17 +2652,17 @@
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_8
+      id: file_8
+      kind: library_9
         name: my.lib
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfName_1
-        fileKinds: library_8 partOfName_1
+        fileKinds: library_9 partOfName_1
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -2670,9 +2670,9 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_0 library_8
+        libraries: library_0 library_9
         library: library_0
-      referencingFiles: file_0 file_7
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -2686,6 +2686,22 @@
     uri: package:test/a.dart
     current
       id: file_0
+      kind: library_10
+        name: my.lib
+        libraryImports
+          library_2 dart:core synthetic
+        partIncludes
+          partOfName_1
+        fileKinds: library_10 partOfName_1
+        cycle_4
+          dependencies: dart:core
+          libraries: library_10
+          apiSignature_0
+      unlinkedKey: k00
+  /home/test/lib/b.dart
+    uri: package:test/b.dart
+    current
+      id: file_8
       kind: library_9
         name: my.lib
         libraryImports
@@ -2693,25 +2709,9 @@
         partIncludes
           partOfName_1
         fileKinds: library_9 partOfName_1
-        cycle_4
-          dependencies: dart:core
-          libraries: library_9
-          apiSignature_0
-      unlinkedKey: k00
-  /home/test/lib/b.dart
-    uri: package:test/b.dart
-    current
-      id: file_7
-      kind: library_8
-        name: my.lib
-        libraryImports
-          library_2 dart:core synthetic
-        partIncludes
-          partOfName_1
-        fileKinds: library_8 partOfName_1
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -2719,9 +2719,9 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_8 library_9
-        library: library_9
-      referencingFiles: file_0 file_7
+        libraries: library_9 library_10
+        library: library_10
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -2736,29 +2736,29 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_5
           dependencies: dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_2
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_8
+      id: file_8
+      kind: library_9
         name: my.lib
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfName_1
-        fileKinds: library_8 partOfName_1
+        fileKinds: library_9 partOfName_1
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -2766,9 +2766,9 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_8
-        library: library_8
-      referencingFiles: file_7
+        libraries: library_9
+        library: library_9
+      referencingFiles: file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -2783,26 +2783,26 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_5
           dependencies: dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_2
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_11
+      id: file_8
+      kind: library_12
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_11
+        fileKinds: library_12
         cycle_6
           dependencies: dart:core
-          libraries: library_11
+          libraries: library_12
           apiSignature_3
       unlinkedKey: k02
   /home/test/lib/c.dart
@@ -2828,29 +2828,29 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_5
           dependencies: dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_2
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_12
+      id: file_8
+      kind: library_13
         name: my.lib
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfName_1
-        fileKinds: library_12 partOfName_1
+        fileKinds: library_13 partOfName_1
         cycle_7
           dependencies: dart:core
-          libraries: library_12
+          libraries: library_13
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -2858,9 +2858,9 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_12
-        library: library_12
-      referencingFiles: file_7
+        libraries: library_13
+        library: library_13
+      referencingFiles: file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -2878,6 +2878,22 @@
     uri: package:test/a.dart
     current
       id: file_0
+      kind: library_14
+        name: my.lib
+        libraryImports
+          library_2 dart:core synthetic
+        partIncludes
+          partOfName_1
+        fileKinds: library_14 partOfName_1
+        cycle_8
+          dependencies: dart:core
+          libraries: library_14
+          apiSignature_0
+      unlinkedKey: k00
+  /home/test/lib/b.dart
+    uri: package:test/b.dart
+    current
+      id: file_8
       kind: library_13
         name: my.lib
         libraryImports
@@ -2885,25 +2901,9 @@
         partIncludes
           partOfName_1
         fileKinds: library_13 partOfName_1
-        cycle_8
-          dependencies: dart:core
-          libraries: library_13
-          apiSignature_0
-      unlinkedKey: k00
-  /home/test/lib/b.dart
-    uri: package:test/b.dart
-    current
-      id: file_7
-      kind: library_12
-        name: my.lib
-        libraryImports
-          library_2 dart:core synthetic
-        partIncludes
-          partOfName_1
-        fileKinds: library_12 partOfName_1
         cycle_7
           dependencies: dart:core
-          libraries: library_12
+          libraries: library_13
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -2911,9 +2911,9 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_12 library_13
-        library: library_13
-      referencingFiles: file_0 file_7
+        libraries: library_13 library_14
+        library: library_14
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -3131,15 +3131,15 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfUriKnown_1
-        fileKinds: library_7 partOfUriKnown_1
+        fileKinds: library_8 partOfUriKnown_1
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k02
   /home/test/lib/b.dart
@@ -3148,7 +3148,7 @@
       id: file_1
       kind: partOfUriKnown_1
         uriFile: file_0
-        library: library_7
+        library: library_8
       referencingFiles: file_0
       unlinkedKey: k01
 libraryCycles
@@ -3163,24 +3163,24 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfUriKnown_8
-        fileKinds: library_7 partOfUriKnown_8
+          partOfUriKnown_9
+        fileKinds: library_8 partOfUriKnown_9
         cycle_3
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfUriKnown_8
+      kind: partOfUriKnown_9
         uriFile: file_0
-        library: library_7
+        library: library_8
       referencingFiles: file_0
       unlinkedKey: k01
 libraryCycles
@@ -3403,13 +3403,13 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_0
       unlinkedKey: k00
   /home/test/lib/b.dart
@@ -3691,16 +3691,16 @@
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -3710,7 +3710,7 @@
       kind: partOfUriKnown_1
         uriFile: file_0
         library: library_0
-      referencingFiles: file_0 file_7
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -3738,16 +3738,16 @@
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_8
+      id: file_8
+      kind: library_9
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_8
+        fileKinds: library_9
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -3757,7 +3757,7 @@
       kind: partOfUriKnown_1
         uriFile: file_0
         library: library_0
-      referencingFiles: file_0 file_7
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -3771,30 +3771,30 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_9
+      kind: library_10
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfUriKnown_1
-        fileKinds: library_9 partOfUriKnown_1
+        fileKinds: library_10 partOfUriKnown_1
         cycle_4
           dependencies: dart:core
-          libraries: library_9
+          libraries: library_10
           apiSignature_0
       unlinkedKey: k00
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_8
+      id: file_8
+      kind: library_9
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_8
+        fileKinds: library_9
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -3803,8 +3803,8 @@
       id: file_1
       kind: partOfUriKnown_1
         uriFile: file_0
-        library: library_9
-      referencingFiles: file_0 file_7
+        library: library_10
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -3820,28 +3820,28 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_5
           dependencies: dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_2
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_8
+      id: file_8
+      kind: library_9
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_8
+        fileKinds: library_9
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -3850,7 +3850,7 @@
       id: file_1
       kind: partOfUriKnown_1
         uriFile: file_0
-      referencingFiles: file_7
+      referencingFiles: file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -3865,26 +3865,26 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_5
           dependencies: dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_2
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_11
+      id: file_8
+      kind: library_12
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_11
+        fileKinds: library_12
         cycle_6
           dependencies: dart:core
-          libraries: library_11
+          libraries: library_12
           apiSignature_3
       unlinkedKey: k02
   /home/test/lib/c.dart
@@ -3909,28 +3909,28 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_10
+      kind: library_11
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_5
           dependencies: dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_2
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_12
+      id: file_8
+      kind: library_13
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_12
+        fileKinds: library_13
         cycle_7
           dependencies: dart:core
-          libraries: library_12
+          libraries: library_13
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -3939,7 +3939,7 @@
       id: file_1
       kind: partOfUriKnown_1
         uriFile: file_0
-      referencingFiles: file_7
+      referencingFiles: file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -3956,30 +3956,30 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: library_13
+      kind: library_14
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfUriKnown_1
-        fileKinds: library_13 partOfUriKnown_1
+        fileKinds: library_14 partOfUriKnown_1
         cycle_8
           dependencies: dart:core
-          libraries: library_13
+          libraries: library_14
           apiSignature_0
       unlinkedKey: k00
   /home/test/lib/b.dart
     uri: package:test/b.dart
     current
-      id: file_7
-      kind: library_12
+      id: file_8
+      kind: library_13
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_1
-        fileKinds: library_12
+        fileKinds: library_13
         cycle_7
           dependencies: dart:core
-          libraries: library_12
+          libraries: library_13
           apiSignature_1
       unlinkedKey: k00
   /home/test/lib/c.dart
@@ -3988,8 +3988,8 @@
       id: file_1
       kind: partOfUriKnown_1
         uriFile: file_0
-        library: library_13
-      referencingFiles: file_0 file_7
+        library: library_14
+      referencingFiles: file_0 file_8
       unlinkedKey: k01
 libraryCycles
 elementFactory
@@ -4035,7 +4035,7 @@
         library: library_0
         docLibraryImports
           library_4 dart:async
-          library_6 dart:math
+          library_7 dart:math
       referencingFiles: file_0
       unlinkedKey: k01
 libraryCycles
@@ -4060,8 +4060,8 @@
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfUriKnown_7
-        fileKinds: library_0 partOfUriKnown_7
+          partOfUriKnown_8
+        fileKinds: library_0 partOfUriKnown_8
         cycle_2
           dependencies: dart:core
           libraries: library_0
@@ -4071,7 +4071,7 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfUriKnown_7
+      kind: partOfUriKnown_8
         uriFile: file_0
         library: library_0
         docLibraryImports
@@ -4111,7 +4111,7 @@
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1
         cycle_0
-          dependencies: dart:collection dart:core
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4153,8 +4153,8 @@
         partIncludes
           partOfUriKnown_8
         fileKinds: library_0 partOfUriKnown_8
-        cycle_3
-          dependencies: dart:collection dart:core
+        cycle_2
+          dependencies: dart:core
           libraries: library_0
           apiSignature_1
       unlinkedKey: k00
@@ -4196,8 +4196,8 @@
         partIncludes
           partOfUriKnown_9
         fileKinds: library_0 partOfUriKnown_9
-        cycle_4
-          dependencies: dart:collection dart:core
+        cycle_3
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4250,7 +4250,7 @@
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_2
         cycle_0
-          dependencies: dart:collection dart:core
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4303,8 +4303,8 @@
         partIncludes
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_9
-        cycle_3
-          dependencies: dart:collection dart:core
+        cycle_2
+          dependencies: dart:core
           libraries: library_0
           apiSignature_1
       unlinkedKey: k00
@@ -4357,8 +4357,8 @@
         partIncludes
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_10
-        cycle_4
-          dependencies: dart:collection dart:core
+        cycle_3
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4416,7 +4416,7 @@
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1
         cycle_0
-          dependencies: dart:collection dart:core
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4457,8 +4457,8 @@
         partIncludes
           partOfUriKnown_8
         fileKinds: library_0 partOfUriKnown_8
-        cycle_3
-          dependencies: dart:collection dart:core
+        cycle_2
+          dependencies: dart:core
           libraries: library_0
           apiSignature_1
       unlinkedKey: k00
@@ -4499,8 +4499,8 @@
         partIncludes
           partOfUriKnown_9
         fileKinds: library_0 partOfUriKnown_9
-        cycle_4
-          dependencies: dart:collection dart:core
+        cycle_3
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4552,7 +4552,7 @@
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_2
         cycle_0
-          dependencies: dart:collection dart:core
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4604,8 +4604,8 @@
         partIncludes
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_9
-        cycle_3
-          dependencies: dart:collection dart:core
+        cycle_2
+          dependencies: dart:core
           libraries: library_0
           apiSignature_1
       unlinkedKey: k00
@@ -4657,8 +4657,8 @@
         partIncludes
           partOfUriKnown_1
         fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_10
-        cycle_4
-          dependencies: dart:collection dart:core
+        cycle_3
+          dependencies: dart:core
           libraries: library_0
           apiSignature_0
       unlinkedKey: k00
@@ -4742,7 +4742,7 @@
         uriFile: file_1
         library: library_0
         libraryImports
-          library_8 dart:io
+          library_9 dart:io
       referencingFiles: file_1
       unlinkedKey: k02
 libraryCycles
@@ -4771,9 +4771,9 @@
         libraryImports
           library_3 dart:core synthetic
         partIncludes
-          partOfUriKnown_10
-        fileKinds: library_0 partOfUriKnown_10 partOfUriKnown_2 partOfUriKnown_11
-        cycle_4
+          partOfUriKnown_12
+        fileKinds: library_0 partOfUriKnown_12 partOfUriKnown_2 partOfUriKnown_13
+        cycle_5
           dependencies: dart:core dart:io
           libraries: library_0
           apiSignature_1
@@ -4782,12 +4782,12 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfUriKnown_10
+      kind: partOfUriKnown_12
         uriFile: file_0
         library: library_0
         partIncludes
           partOfUriKnown_2
-          partOfUriKnown_11
+          partOfUriKnown_13
       referencingFiles: file_0
       unlinkedKey: k03
   /home/test/lib/c.dart
@@ -4798,14 +4798,14 @@
         uriFile: file_1
         library: library_0
         libraryImports
-          library_8 dart:io
+          library_9 dart:io
       referencingFiles: file_1
       unlinkedKey: k02
   /home/test/lib/d.dart
     uri: package:test/d.dart
     current
-      id: file_10
-      kind: partOfUriKnown_11
+      id: file_12
+      kind: partOfUriKnown_13
         uriFile: file_1
         library: library_0
       referencingFiles: file_1
@@ -4831,9 +4831,9 @@
         libraryImports
           library_3 dart:core synthetic
         partIncludes
-          partOfUriKnown_12
-        fileKinds: library_0 partOfUriKnown_12 partOfUriKnown_11
-        cycle_5
+          partOfUriKnown_14
+        fileKinds: library_0 partOfUriKnown_14 partOfUriKnown_13
+        cycle_6
           dependencies: dart:core
           libraries: library_0
           apiSignature_2
@@ -4842,11 +4842,11 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfUriKnown_12
+      kind: partOfUriKnown_14
         uriFile: file_0
         library: library_0
         partIncludes
-          partOfUriKnown_11
+          partOfUriKnown_13
       referencingFiles: file_0
       unlinkedKey: k05
   /home/test/lib/c.dart
@@ -4856,13 +4856,13 @@
       kind: partOfUriKnown_2
         uriFile: file_1
         libraryImports
-          library_8 dart:io
+          library_9 dart:io
       unlinkedKey: k02
   /home/test/lib/d.dart
     uri: package:test/d.dart
     current
-      id: file_10
-      kind: partOfUriKnown_11
+      id: file_12
+      kind: partOfUriKnown_13
         uriFile: file_1
         library: library_0
       referencingFiles: file_1
@@ -4968,20 +4968,20 @@
         uriFile: file_0
         library: library_0
         libraryImports
-          library_8
+          library_9
       referencingFiles: file_0
       unlinkedKey: k01
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
       id: file_2
-      kind: library_8
+      kind: library_9
         libraryImports
           library_3 dart:core synthetic
-        fileKinds: library_8
+        fileKinds: library_9
         cycle_4
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_3
           users: cycle_3
       referencingFiles: file_1
@@ -5064,7 +5064,7 @@
     current
       id: file_0
       kind: partOfName_0
-        libraries: library_8
+        libraries: library_9
         name: my
       unlinkedKey: k00
   /home/test/lib/b.dart
@@ -5072,24 +5072,24 @@
     current
       id: file_1
       kind: partOfName_1
-        libraries: library_8
-        library: library_8
+        libraries: library_9
+        library: library_9
       referencingFiles: file_2
       unlinkedKey: k00
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
       id: file_2
-      kind: library_8
+      kind: library_9
         name: my
         libraryImports
           library_3 dart:core synthetic
         partIncludes
           partOfName_1
-        fileKinds: library_8 partOfName_1
+        fileKinds: library_9 partOfName_1
         cycle_2
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k02
 libraryCycles
@@ -5176,23 +5176,23 @@
       id: file_1
       kind: partOfUriKnown_1
         uriFile: file_2
-        library: library_8
+        library: library_9
       referencingFiles: file_2
       unlinkedKey: k00
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
       id: file_2
-      kind: library_8
+      kind: library_9
         name: my
         libraryImports
           library_3 dart:core synthetic
         partIncludes
           partOfUriKnown_1
-        fileKinds: library_8 partOfUriKnown_1
+        fileKinds: library_9 partOfUriKnown_1
         cycle_2
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_1
       unlinkedKey: k02
 libraryCycles
@@ -5264,8 +5264,8 @@
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfName_7
-        fileKinds: library_0 partOfName_7
+          partOfName_8
+        fileKinds: library_0 partOfName_8
         cycle_3
           dependencies: dart:core
           libraries: library_0
@@ -5275,7 +5275,7 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfName_7
+      kind: partOfName_8
         libraries: library_0
         library: library_0
       referencingFiles: file_0
@@ -5325,7 +5325,7 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: partOfName_6
+      kind: partOfName_7
         name: my
       unlinkedKey: k01
 libraryCycles
@@ -5397,8 +5397,8 @@
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfUriKnown_7
-        fileKinds: library_0 partOfUriKnown_7
+          partOfUriKnown_8
+        fileKinds: library_0 partOfUriKnown_8
         cycle_3
           dependencies: dart:core
           libraries: library_0
@@ -5408,7 +5408,7 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: partOfUriKnown_7
+      kind: partOfUriKnown_8
         uriFile: file_0
         library: library_0
       referencingFiles: file_0
@@ -5476,9 +5476,9 @@
     current
       id: file_0
       kind: partOfName_0
-        libraries: library_1 library_7
+        libraries: library_1 library_8
         library: library_1
-      referencingFiles: file_1 file_7
+      referencingFiles: file_1 file_8
       unlinkedKey: k00
   /home/test/lib/b.dart
     uri: package:test/b.dart
@@ -5499,17 +5499,17 @@
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         name: my.lib
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           partOfName_0
-        fileKinds: library_7 partOfName_0
+        fileKinds: library_8 partOfName_0
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k01
 libraryCycles
@@ -5526,16 +5526,15 @@
     // `a.dart` is still a part.
     // ...but the unlinked signature of `a.dart` is different.
     // API signatures of both `b.dart` and `c.dart` changed.
-    assertDriverStateString(testFile, r'''
-files
+    assertDriverStateString(testFile, r'''files
   /home/test/lib/a.dart
     uri: package:test/a.dart
     current
       id: file_0
-      kind: partOfName_8
-        libraries: library_1 library_7
+      kind: partOfName_9
+        libraries: library_1 library_8
         library: library_1
-      referencingFiles: file_1 file_7
+      referencingFiles: file_1 file_8
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
@@ -5546,8 +5545,8 @@
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfName_8
-        fileKinds: library_1 partOfName_8
+          partOfName_9
+        fileKinds: library_1 partOfName_9
         cycle_3
           dependencies: dart:core
           libraries: library_1
@@ -5556,17 +5555,17 @@
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         name: my.lib
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfName_8
-        fileKinds: library_7 partOfName_8
+          partOfName_9
+        fileKinds: library_8 partOfName_9
         cycle_4
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_3
       unlinkedKey: k01
 libraryCycles
@@ -5648,7 +5647,7 @@
           library_3 dart:core synthetic
         partIncludes
           partOfUriKnown_1
-        fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_8
+        fileKinds: library_0 partOfUriKnown_1 partOfUriKnown_9
         cycle_2
           dependencies: dart:core
           libraries: library_0
@@ -5662,14 +5661,14 @@
         uriFile: file_0
         library: library_0
         partIncludes
-          partOfUriKnown_8
+          partOfUriKnown_9
       referencingFiles: file_0
       unlinkedKey: k01
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
       id: file_2
-      kind: partOfUriKnown_8
+      kind: partOfUriKnown_9
         uriFile: file_1
         library: library_0
       referencingFiles: file_1
@@ -5750,13 +5749,13 @@
     uri: package:test/b.dart
     current
       id: file_1
-      kind: library_7
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_3
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_2
       referencingFiles: file_0
       unlinkedKey: k02
@@ -5820,7 +5819,7 @@
       kind: partOfUriKnown_0
         uriFile: file_1
         library: library_1
-      referencingFiles: file_1 file_7
+      referencingFiles: file_1 file_8
       unlinkedKey: k00
   /home/test/lib/b.dart
     uri: package:test/b.dart
@@ -5840,16 +5839,16 @@
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_0
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k01
 libraryCycles
@@ -5873,10 +5872,10 @@
     uri: package:test/a.dart
     current
       id: file_0
-      kind: partOfUriKnown_8
+      kind: partOfUriKnown_9
         uriFile: file_1
         library: library_1
-      referencingFiles: file_1 file_7
+      referencingFiles: file_1 file_8
       unlinkedKey: k02
   /home/test/lib/b.dart
     uri: package:test/b.dart
@@ -5886,8 +5885,8 @@
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfUriKnown_8
-        fileKinds: library_1 partOfUriKnown_8
+          partOfUriKnown_9
+        fileKinds: library_1 partOfUriKnown_9
         cycle_3
           dependencies: dart:core
           libraries: library_1
@@ -5896,16 +5895,16 @@
   /home/test/lib/c.dart
     uri: package:test/c.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
           notPart file_0
-        fileKinds: library_7
+        fileKinds: library_8
         cycle_4
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_1
       unlinkedKey: k01
 libraryCycles
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 6ea6075..a6527cd 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -58,7 +58,47 @@
     expect(actual, expected);
   }
 
-  test_class_constructorElement_unnamed_implicitInvocation() async {
+  test_class_constructorElement_methodElement_sameName() async {
+    await _indexTestUnit('''
+class A {
+  A.base() {
+    base();
+  }
+
+  A base() => A.base();
+}
+''');
+
+    var constructor = findElement2.constructor('base');
+    assertElementIndexText(constructor, r'''
+55 6:16 |.base| IS_INVOKED_BY qualified
+''');
+    var method = findElement2.method('base');
+    assertElementIndexText(method, r'''
+27 3:5 |base| IS_INVOKED_BY
+''');
+  }
+
+  test_class_constructorElement_newHead_implicitInvocation() async {
+    await _indexTestUnit('''
+class A {
+  A();
+}
+
+class B extends A {
+  new ();
+  new named();
+}
+''');
+
+    var element = findElement2.unnamedConstructor('A');
+    assertElementIndexText(element, r'''
+42 6:3 |new| IS_INVOKED_BY qualified
+52 7:3 |new named| IS_INVOKED_BY qualified
+''');
+  }
+
+  test_class_constructorElement_typeName_implicitInvocation() async {
     await _indexTestUnit('''
 class A {
   A();
@@ -803,8 +843,8 @@
 ''');
     var element = findElement2.getter('foo');
     assertElementIndexText(element, r'''
-35 2:16 |foo| IS_REFERENCED_BY qualified
-62 3:16 || IS_REFERENCED_BY qualified
+35 2:16 |foo| IS_REFERENCED_BY_PATTERN_FIELD qualified
+62 3:16 || IS_REFERENCED_BY_PATTERN_FIELD qualified
 ''');
   }
 
@@ -821,8 +861,8 @@
 ''');
     var element = findElement2.method('foo');
     assertElementIndexText(element, r'''
-35 2:16 |foo| IS_REFERENCED_BY qualified
-62 3:16 || IS_REFERENCED_BY qualified
+35 2:16 |foo| IS_REFERENCED_BY_PATTERN_FIELD qualified
+62 3:16 || IS_REFERENCED_BY_PATTERN_FIELD qualified
 ''');
   }
 
@@ -1290,8 +1330,8 @@
 ''');
     var element = findElement2.unnamedConstructor('A');
     assertElementIndexText(element, r'''
-31 3:10 |new| IS_INVOKED_BY qualified
-58 4:16 |new| IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF qualified
+31 3:10 |new| IS_INVOKED_BY_DOT_SHORTHANDS_CONSTRUCTOR qualified
+58 4:16 |new| IS_REFERENCED_BY_DOT_SHORTHAND_CONSTRUCTOR_TEAR_OFF qualified
 ''');
   }
 
@@ -1736,6 +1776,22 @@
 ''');
   }
 
+  test_isReferencedBy_FieldElement_dotSorthandConstructorInvocation() async {
+    await _indexTestUnit('''
+class A {
+  A({this.field});
+  var field;
+}
+void foo() {
+  A _ = .new(field: 42);
+}
+''');
+    var element = findElement2.fieldFormalParameter('field');
+    assertElementIndexText(element, r'''
+70 6:14 |field| IS_REFERENCED_BY qualified
+''');
+  }
+
   test_isReferencedBy_FieldElement_enum() async {
     await _indexTestUnit('''
 enum E {
@@ -2073,6 +2129,21 @@
 ''');
   }
 
+  test_isReferencedBy_ParameterElement_dotSorthandConstructorInvocation() async {
+    await _indexTestUnit('''
+class A {
+  A({p});
+}
+void foo() {
+  A _ = .new(p: 42);
+}
+''');
+    var element = findElement2.parameter('p');
+    assertElementIndexText(element, r'''
+48 5:14 |p| IS_REFERENCED_BY qualified
+''');
+  }
+
   test_isReferencedBy_ParameterElement_genericFunctionType() async {
     await _indexTestUnit('''
 typedef F = void Function({int? p});
diff --git a/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart b/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart
index c0c5c3f..b89b293 100644
--- a/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/referenced_names_test.dart
@@ -256,6 +256,16 @@
     expect(names, unorderedEquals(['A', 'B', 'C', 'D']));
   }
 
+  test_unit_extension() {
+    Set<String> names = _computeReferencedNames('''
+extension E on int {}
+f() {
+  E;
+}
+''');
+    expect(names, unorderedEquals(['int']));
+  }
+
   test_unit_function() {
     Set<String> names = _computeReferencedNames('''
 A f(B b) {
diff --git a/pkg/analyzer/test/src/dart/analysis/result_printer.dart b/pkg/analyzer/test/src/dart/analysis/result_printer.dart
index be8e3fd..871c970 100644
--- a/pkg/analyzer/test/src/dart/analysis/result_printer.dart
+++ b/pkg/analyzer/test/src/dart/analysis/result_printer.dart
@@ -1420,6 +1420,7 @@
       _writeMetadata(item);
       _writeNamedType('type', item.type);
       _writeNode('constInitializer', item.constInitializer);
+      _writeTopLevelInferenceError('inferenceError', item.typeInferenceError);
     });
 
     writeDeclaredItems('declaredGetters', item.declaredGetters, (item) {
@@ -1713,6 +1714,7 @@
         _writeMetadata(item);
         _writeNamedType('type', item.type);
         _writeNode('constInitializer', item.constInitializer);
+        _writeTopLevelInferenceError('inferenceError', item.typeInferenceError);
       });
     }
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
index 85835c7..fd391ae 100644
--- a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
@@ -28,7 +28,7 @@
     var fragment = findNode.classDeclaration('A').declaredFragment!;
     var result = await getFragmentDeclaration(fragment);
     var node = result!.node as ClassDeclaration;
-    expect(node.name.lexeme, 'A');
+    expect(node.namePart.typeName.lexeme, 'A');
   }
 
   test_class_duplicate() async {
@@ -40,16 +40,22 @@
       var fragment = findNode.classDeclaration('A {} // 1').declaredFragment!;
       var result = await getFragmentDeclaration(fragment);
       var node = result!.node as ClassDeclaration;
-      expect(node.name.lexeme, 'A');
-      expect(node.name.offset, this.result.content.indexOf('A {} // 1'));
+      expect(node.namePart.typeName.lexeme, 'A');
+      expect(
+        node.namePart.typeName.offset,
+        this.result.content.indexOf('A {} // 1'),
+      );
     }
 
     {
       var fragment = findNode.classDeclaration('A {} // 2').declaredFragment!;
       var result = await getFragmentDeclaration(fragment);
       var node = result!.node as ClassDeclaration;
-      expect(node.name.lexeme, 'A');
-      expect(node.name.offset, this.result.content.indexOf('A {} // 2'));
+      expect(node.namePart.typeName.lexeme, 'A');
+      expect(
+        node.namePart.typeName.offset,
+        this.result.content.indexOf('A {} // 2'),
+      );
     }
   }
 
@@ -64,7 +70,7 @@
     var fragment = findElement2.class_('A').firstFragment;
     var result = await getFragmentDeclaration(fragment);
     var node = result!.node as ClassDeclaration;
-    expect(node.name.lexeme, 'A');
+    expect(node.namePart.typeName.lexeme, 'A');
   }
 
   test_class_missingName() async {
@@ -147,7 +153,7 @@
       var result = await getFragmentDeclaration(element);
       var node = result!.node as ConstructorDeclaration;
       expect(node.name, isNull);
-      expect(node.returnType.offset, this.result.content.indexOf('A(); // 1'));
+      expect(node.typeName!.offset, this.result.content.indexOf('A(); // 1'));
     }
 
     {
@@ -155,7 +161,7 @@
       var result = await getFragmentDeclaration(element);
       var node = result!.node as ConstructorDeclaration;
       expect(node.name, isNull);
-      expect(node.returnType.offset, this.result.content.indexOf('A(); // 2'));
+      expect(node.typeName!.offset, this.result.content.indexOf('A(); // 2'));
     }
   }
 
@@ -163,10 +169,11 @@
     await resolveTestCode(r'''
 class A {}
 ''');
-    var element = findElement2.unnamedConstructor('A').firstFragment;
-    expect(element.isSynthetic, isTrue);
+    var element = findElement2.unnamedConstructor('A');
+    expect(element.isOriginImplicitDefault, isTrue);
 
-    var result = await getFragmentDeclaration(element);
+    var fragment = element.firstFragment;
+    var result = await getFragmentDeclaration(fragment);
     expect(result, isNull);
   }
 
@@ -177,7 +184,7 @@
     var fragment = findElement2.enum_('MyEnum').firstFragment;
     var result = await getFragmentDeclaration(fragment);
     var node = result!.node as EnumDeclaration;
-    expect(node.name.lexeme, 'MyEnum');
+    expect(node.namePart.typeName.lexeme, 'MyEnum');
   }
 
   test_enum_constant() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index a2d0ccb..96eb519 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -474,10 +474,6 @@
     codeOffset: 15 + 9
     className: E
     parameters: (int it)
-  FIELD it
-    offset: 21 1:22
-    codeOffset: 15 + 9
-    className: E
   GETTER g
     offset: 37 2:11
     codeOffset: 29 + 15
@@ -833,6 +829,56 @@
     }
   }
 
+  test_sameNameDeclarations_class() async {
+    await resolveTestCode('''
+class Foo {
+  Foo.bar() {
+    bar();
+  }
+  void bar() => Foo.bar();
+}
+''');
+    var results = WorkspaceSymbols();
+    await FindDeclarations(
+      [driver],
+      results,
+      '',
+      null,
+      ownedFiles: analysisContextCollection.ownedFiles,
+      performance: performance,
+    ).compute();
+    assertDeclarationsText(
+      results,
+      {testFile: 'testFile'},
+      r'''
+testFile
+  CLASS Foo
+    offset: 6 1:7
+    codeOffset: 0 + 69
+  CONSTRUCTOR bar
+    offset: 18 2:7
+    codeOffset: 14 + 26
+    className: Foo
+    parameters: ()
+  METHOD bar
+    offset: 48 5:8
+    codeOffset: 43 + 24
+    className: Foo
+    parameters: ()
+''',
+    );
+    Element element = findElement2.constructor('bar');
+    await assertElementReferencesText(element, '''
+<testLibraryFragment> bar@48
+  60 5:20 |.bar| INVOCATION qualified
+''');
+    element = findElement2.method('bar');
+    await assertElementReferencesText(element, r'''
+<testLibraryFragment> bar@18
+  30 3:5 |bar| INVOCATION
+''');
+  }
+
   test_searchMemberReferences_qualified_resolved() async {
     await resolveTestCode('''
 class C {
@@ -955,8 +1001,8 @@
     var element = findElement2.getter('foo');
     await assertElementReferencesText(element, r'''
 <testLibraryFragment> f@5
-  35 2:16 |foo| REFERENCE qualified
-  62 3:16 || REFERENCE qualified
+  35 2:16 |foo| REFERENCE_IN_PATTERN_FIELD qualified
+  62 3:16 || REFERENCE_IN_PATTERN_FIELD qualified
 ''');
   }
 
@@ -993,7 +1039,7 @@
 <testLibraryFragment> v2@38
   31 3:1 |Random| REFERENCE
 dart:math new@null
-  402 16:20 |Random| REFERENCE
+  406 20:20 |Random| REFERENCE
 ''');
   }
 
@@ -1318,8 +1364,8 @@
     var element = findElement2.unnamedConstructor('A');
     await assertElementReferencesText(element, r'''
 <testLibraryFragment> main@16
-  34 3:10 |new| INVOCATION qualified
-  61 4:16 |new| REFERENCE_BY_CONSTRUCTOR_TEAR_OFF qualified
+  34 3:10 |new| DOT_SHORTHANDS_CONSTRUCTOR_INVOCATION qualified
+  61 4:16 |new| DOT_SHORTHANDS_CONSTRUCTOR_TEAR_OFF qualified
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
index 2985ebc..23edaa2 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
@@ -81,7 +81,7 @@
     var element = findElement2.class_('A');
     var result = (await helper.getFragmentDeclaration(element.firstFragment))!;
     var node = result.node as ClassDeclaration;
-    expect(node.name.lexeme, 'A');
+    expect(node.namePart.typeName.lexeme, 'A');
   }
 
   test_getResolvedUnitByElement() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 07e203a..b7f78a1 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -321,7 +321,7 @@
       element.firstFragment,
     )!;
     var node = declaration.node as ClassDeclaration;
-    expect(node.name.lexeme, 'A');
+    expect(node.namePart.typeName.lexeme, 'A');
     expect(node.offset, 0);
     expect(node.length, 10);
   }
@@ -586,7 +586,7 @@
       aClass.firstFragment,
     )!;
     var aNode = aDeclaration.node as ClassDeclaration;
-    expect(aNode.name.lexeme, 'A');
+    expect(aNode.namePart.typeName.lexeme, 'A');
     expect(aNode.offset, 16);
     expect(aNode.length, 16);
     expect(aNode.declaredFragment!.name, 'A');
@@ -595,7 +595,7 @@
       bClass.firstFragment,
     )!;
     var bNode = bDeclaration.node as ClassDeclaration;
-    expect(bNode.name.lexeme, 'B');
+    expect(bNode.namePart.typeName.lexeme, 'B');
     expect(bNode.offset, 19);
     expect(bNode.length, 16);
     expect(bNode.declaredFragment!.name, 'B');
diff --git a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
index 10c642e..c6c1e0c 100644
--- a/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/unlinked_api_signature_test.dart
@@ -503,6 +503,54 @@
     );
   }
 
+  test_class_primaryConstructorBody_body() {
+    _assertSameSignature(
+      r'''
+class C() {
+  this { 0; }
+}
+''',
+      r'''
+class C() {
+  this { 1; }
+}
+''',
+    );
+  }
+
+  test_class_primaryConstructorBody_initializer_const() {
+    _assertNotSameSignature(
+      r'''
+class const C() {
+  final int f;
+  this: f = 1;
+}
+''',
+      r'''
+class const C() {
+  final int f;
+  this: f = 2;
+}
+''',
+    );
+  }
+
+  test_class_primaryConstructorBody_metadata() {
+    _assertNotSameSignature(
+      r'''
+class C() {
+  this;
+}
+''',
+      r'''
+class C() {
+  @deprecated
+  this;
+}
+''',
+    );
+  }
+
   test_class_with() {
     _assertNotSameSignature(
       r'''
diff --git a/pkg/analyzer/test/src/dart/ast/ast_test.dart b/pkg/analyzer/test/src/dart/ast/ast_test.dart
index 926e521..6089bb9 100644
--- a/pkg/analyzer/test/src/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/ast_test.dart
@@ -1428,7 +1428,7 @@
   void b() {}
 }
 ''');
-    node as ClassDeclaration;
+    node as ClassBody;
   }
 
   Future<void> test_between_colonAndIdentifier_namedExpression() async {
@@ -1599,7 +1599,7 @@
     var node = await coveringNode('''
 class C^<T> {}
 ''');
-    node as ClassDeclaration;
+    node as NameWithTypeParameters;
   }
 
   Future<void> test_between_modifierAndFunctionBody() async {
@@ -1679,7 +1679,7 @@
     var node = await coveringNode('''
 class A^B {}
 ''');
-    node as ClassDeclaration;
+    node as NameWithTypeParameters;
   }
 
   Future<void> test_inName_function() async {
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 1431ea1..6bbaceb 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -648,18 +648,18 @@
 ''');
   }
 
-  test_locate_RepresentationDeclaration() async {
+  test_locate_PrimaryConstructorDeclaration() async {
     await resolveTestCode('extension type A(int it) {}');
-    var node = findNode.singleRepresentationDeclaration;
+    var node = findNode.singlePrimaryConstructorDeclaration;
     var element = ElementLocator.locate(node);
     _assertElement(element, r'''
-<testLibrary>::@extensionType::A::@field::it
+<testLibrary>::@extensionType::A
 ''');
   }
 
-  test_locate_RepresentationDeclaration2() async {
+  test_locate_PrimaryConstructorDeclaration2() async {
     await resolveTestCode('extension type A.named(int it) {}');
-    var node = findNode.singleRepresentationConstructorName;
+    var node = findNode.singlePrimaryConstructorDeclaration;
     var element = ElementLocator.locate(node);
     _assertElement(element, r'''
 <testLibrary>::@extensionType::A::@constructor::named
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 264aa55..1c8f050 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
@@ -21,12 +21,82 @@
 
 @reflectiveTest
 class ToSourceVisitorTest extends ParserDiagnosticsTest {
-  void test_representationDeclaration() {
-    var code = '(@foo int it)';
-    var findNode = _parseStringToFindNode('''
-extension type E$code {}
-''');
-    _assertSource(code, findNode.singleRepresentationDeclaration);
+  test_class_emptyBody() {
+    var code = 'class A;';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_const_named() {
+    var code = 'class const A<T>.named() {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_const_unnamed() {
+    var code = 'class A() {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_declaringFormalParameter_optionalNamed() {
+    var code = 'class A({final int a = 0}) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_declaringFormalParameter_requiredPositional() {
+    var code = 'class A(final int a) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_fieldFormalParameter() {
+    var code = 'class A(int this.a) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_notConst_named() {
+    var code = 'class A<T>.named() {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_class_primaryConstructor_superFormalParameter() {
+    var code = 'class A(int super.a) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.classDeclaration(code));
+  }
+
+  test_enum_primaryConstructor_named() {
+    var code = 'enum const E<T>.named(final int a) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.enumDeclaration(code));
+  }
+
+  test_enum_primaryConstructor_unnamed() {
+    var code = 'enum E<T>(final int a) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.enumDeclaration(code));
+  }
+
+  test_extensionType_emptyBody() {
+    var code = 'extension type A(int it);';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.extensionTypeDeclaration(code));
+  }
+
+  test_extensionType_primaryConstructor_named() {
+    var code = 'extension type const A<T>.named(int it) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.extensionTypeDeclaration(code));
+  }
+
+  test_extensionType_primaryConstructor_unnamed() {
+    var code = 'extension type A<T>(int it) {}';
+    var findNode = _parseStringToFindNode(code);
+    _assertSource(code, findNode.extensionTypeDeclaration(code));
   }
 
   void test_visitAdjacentStrings() {
@@ -718,7 +788,57 @@
     _assertSource('true', findNode.constantPattern('true'));
   }
 
-  void test_visitConstructorDeclaration_const() {
+  void test_visitConstructorDeclaration_factoryHead_named() {
+    var code = 'factory named() {}';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
+  void test_visitConstructorDeclaration_factoryHead_unnamed() {
+    var code = 'factory () {}';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
+  void test_visitConstructorDeclaration_newHead_named() {
+    var code = 'new named();';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
+  void test_visitConstructorDeclaration_newHead_unnamed() {
+    var code = 'new ();';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor('new'));
+  }
+
+  void test_visitConstructorDeclaration_singleInitializer() {
+    var code = 'A() : a = b;';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
+  void test_visitConstructorDeclaration_typeName_const() {
     var code = 'const A();';
     var findNode = _parseStringToFindNode('''
 class A {
@@ -728,7 +848,7 @@
     _assertSource(code, findNode.constructor(code));
   }
 
-  void test_visitConstructorDeclaration_external() {
+  void test_visitConstructorDeclaration_typeName_external() {
     var code = 'external A();';
     var findNode = _parseStringToFindNode('''
 class A {
@@ -738,8 +858,8 @@
     _assertSource(code, findNode.constructor(code));
   }
 
-  void test_visitConstructorDeclaration_minimal() {
-    var code = 'A();';
+  void test_visitConstructorDeclaration_typeName_factory_named() {
+    var code = 'factory A.named() {}';
     var findNode = _parseStringToFindNode('''
 class A {
   $code
@@ -748,8 +868,8 @@
     _assertSource(code, findNode.constructor(code));
   }
 
-  void test_visitConstructorDeclaration_multipleInitializers() {
-    var code = 'A() : a = b, c = d {}';
+  void test_visitConstructorDeclaration_typeName_factory_unnamed() {
+    var code = 'factory A() {}';
     var findNode = _parseStringToFindNode('''
 class A {
   $code
@@ -758,7 +878,19 @@
     _assertSource(code, findNode.constructor(code));
   }
 
-  void test_visitConstructorDeclaration_multipleParameters() {
+  void
+  test_visitConstructorDeclaration_typeName_formalParameters_optionalPositional() {
+    var code = 'A(int a, [int b = 0]);';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
+  void
+  test_visitConstructorDeclaration_typeName_formalParameters_requiredPositional() {
     var code = 'A(int a, double b);';
     var findNode = _parseStringToFindNode('''
 class A {
@@ -768,7 +900,17 @@
     _assertSource(code, findNode.constructor(code));
   }
 
-  void test_visitConstructorDeclaration_named() {
+  void test_visitConstructorDeclaration_typeName_multipleInitializers() {
+    var code = 'A() : a = b, c = d {}';
+    var findNode = _parseStringToFindNode('''
+class A {
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
+  void test_visitConstructorDeclaration_typeName_named() {
     var code = 'A.foo();';
     var findNode = _parseStringToFindNode('''
 class A {
@@ -778,8 +920,8 @@
     _assertSource(code, findNode.constructor(code));
   }
 
-  void test_visitConstructorDeclaration_singleInitializer() {
-    var code = 'A() : a = b;';
+  void test_visitConstructorDeclaration_typeName_unnamed() {
+    var code = 'A();';
     var findNode = _parseStringToFindNode('''
 class A {
   $code
@@ -788,6 +930,17 @@
     _assertSource(code, findNode.constructor(code));
   }
 
+  void test_visitConstructorDeclaration_typeName_withInitializers() {
+    var code = 'A() : a = 0, super();';
+    var findNode = _parseStringToFindNode('''
+class A {
+  int a;
+  $code
+}
+''');
+    _assertSource(code, findNode.constructor(code));
+  }
+
   void test_visitConstructorDeclaration_withMetadata() {
     var code = '@deprecated C() {}';
     var findNode = _parseStringToFindNode('''
@@ -1560,10 +1713,14 @@
     _assertSource(code, findNode.forPartsWithExpression(code));
   }
 
-  @failingTest
   void test_visitForPartsWithPattern() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = 'var (a, b) = (0, 1); a < 10; a++, b++';
+    var findNode = _parseStringToFindNode('''
+void f() {
+  for ($code) {}
+}
+''');
+    _assertSource(code, findNode.forPartsWithPattern(code));
   }
 
   void test_visitForStatement() {
@@ -1892,6 +2049,19 @@
     _assertSource(code, findNode.genericTypeAlias(code));
   }
 
+  void test_visitGuardedPattern() {
+    var code = 'var y when y > 0';
+    var findNode = _parseStringToFindNode('''
+void f() {
+  switch (x) {
+    case var y when y > 0:
+      break;
+  }
+}
+''');
+    _assertSource(code, findNode.singleGuardedPattern);
+  }
+
   void test_visitIfElement_else() {
     var code = 'if (b) 1 else 0';
     var findNode = _parseStringToFindNode('''
@@ -2698,6 +2868,26 @@
     _assertSource(code, findNode.nativeFunctionBody(code));
   }
 
+  void test_visitNullAssertPattern() {
+    var code = 'y!';
+    var findNode = _parseStringToFindNode('''
+void f(x) {
+  if (x case $code) {}
+}
+''');
+    _assertSource(code, findNode.nullAssertPattern(code));
+  }
+
+  void test_visitNullCheckPattern() {
+    var code = '_?';
+    var findNode = _parseStringToFindNode('''
+void f(x) {
+  if (x case $code) {}
+}
+''');
+    _assertSource(code, findNode.nullCheckPattern(code));
+  }
+
   void test_visitNullLiteral() {
     var code = 'null';
     var findNode = _parseStringToFindNode('''
@@ -2771,16 +2961,26 @@
     _assertSource(code, findNode.partOf(code));
   }
 
-  @failingTest
   void test_visitPatternAssignment() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = '(a, b) = (3, 4)';
+    var findNode = _parseStringToFindNode('''
+void f() {
+  var a = 0, b = 0;
+  $code;
+}
+''');
+    _assertSource(code, findNode.patternAssignment(code));
   }
 
-  @failingTest
   void test_visitPatternAssignmentStatement() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = '(a, b) = (3, 4);';
+    var findNode = _parseStringToFindNode('''
+void f() {
+  var a = 0, b = 0;
+  $code
+}
+''');
+    _assertSource(code, findNode.statement(code));
   }
 
   void test_visitPatternField_named() {
@@ -2819,16 +3019,24 @@
     _assertSource('b:', findNode.patternFieldName('b:'));
   }
 
-  @failingTest
   void test_visitPatternVariableDeclaration() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = 'var (a, b) = (0, 1)';
+    var findNode = _parseStringToFindNode('''
+void f() {
+  $code;
+}
+''');
+    _assertSource(code, findNode.patternVariableDeclaration(code));
   }
 
-  @failingTest
   void test_visitPatternVariableDeclarationStatement() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = 'var (a, b) = (0, 1);';
+    var findNode = _parseStringToFindNode('''
+void f() {
+  $code
+}
+''');
+    _assertSource(code, findNode.patternVariableDeclarationStatement(code));
   }
 
   void test_visitPositionalFormalParameter() {
@@ -2888,6 +3096,48 @@
     _assertSource('!(a == b)', findNode.prefix('!'));
   }
 
+  void test_visitPrimaryConstructorBody_block() {
+    var code = 'this {foo();}';
+    var findNode = _parseStringToFindNode('''
+class A() {
+  $code
+}
+''');
+    _assertSource(code, findNode.singlePrimaryConstructorBody);
+  }
+
+  void test_visitPrimaryConstructorBody_initializers() {
+    var code = 'this : x = 0, y = 1;';
+    var findNode = _parseStringToFindNode('''
+class A() {
+  final int x;
+  final int y;
+  $code
+}
+''');
+    _assertSource(code, findNode.singlePrimaryConstructorBody);
+  }
+
+  void test_visitPrimaryConstructorBody_metadata() {
+    var code = '@deprecated this;';
+    var findNode = _parseStringToFindNode('''
+class A() {
+  $code
+}
+''');
+    _assertSource(code, findNode.singlePrimaryConstructorBody);
+  }
+
+  void test_visitPrimaryConstructorBody_simple() {
+    var code = 'this;';
+    var findNode = _parseStringToFindNode('''
+class A() {
+  $code
+}
+''');
+    _assertSource(code, findNode.singlePrimaryConstructorBody);
+  }
+
   void test_visitPropertyAccess() {
     var code = '(foo).bar';
     var findNode = _parseStringToFindNode('''
@@ -3004,6 +3254,16 @@
     _assertSource('> 3', findNode.relationalPattern('>'));
   }
 
+  void test_visitRestPatternElement() {
+    var code = '...rest';
+    var findNode = _parseStringToFindNode('''
+void f(x) {
+  if (x case [0, $code]) {}
+}
+''');
+    _assertSource(code, findNode.restPatternElement(code));
+  }
+
   void test_visitRethrowExpression() {
     var code = 'rethrow';
     var findNode = _parseStringToFindNode('''
@@ -3400,28 +3660,23 @@
     _assertSource(code, findNode.switchDefault(code));
   }
 
-  @failingTest
   void test_visitSwitchExpression() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = 'switch (x) {0 => 1, _ => 2}';
+    var findNode = _parseStringToFindNode('''
+var result = $code;
+''');
+    _assertSource(code, findNode.switchExpression('switch'));
   }
 
-  @failingTest
   void test_visitSwitchExpressionCase() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
-  }
-
-  @failingTest
-  void test_visitSwitchExpressionDefault() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
-  }
-
-  @failingTest
-  void test_visitSwitchGuard() {
-    // TODO(brianwilkerson): Test this when the parser allows.
-    fail('Unable to parse patterns');
+    var code = '0 => 1';
+    var findNode = _parseStringToFindNode('''
+var result = switch (x) {
+  $code,
+  _ => 2,
+};
+''');
+    _assertSource(code, findNode.switchExpressionCase(code));
   }
 
   void test_visitSwitchPatternCase_multipleLabels() {
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index f8bf87b5..3057845 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -10,8 +10,7 @@
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/constant/value.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -91,7 +90,7 @@
       '''
 const int x = 'foo';
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 14, 5)],
+      [error(diag.invalidAssignment, 14, 5)],
     );
   }
 
@@ -144,8 +143,8 @@
 const v = .new() == A();
 ''',
       [
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 36, 6),
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 37, 3),
+        error(diag.constInitializedWithNonConstantValue, 36, 6),
+        error(diag.dotShorthandUndefinedInvocation, 37, 3),
       ],
     );
   }
@@ -176,8 +175,8 @@
 const v = A() == .method();
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConst, 51, 3),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 51, 3),
+        error(diag.constWithNonConst, 51, 3),
+        error(diag.constInitializedWithNonConstantValue, 51, 3),
       ],
     );
   }
@@ -190,7 +189,7 @@
 }
 const A a = .method();
 ''',
-      [error(CompileTimeErrorCode.constEvalMethodInvocation, 52, 9)],
+      [error(diag.constEvalMethodInvocation, 52, 9)],
     );
   }
 
@@ -200,8 +199,8 @@
 const a = .new();
 ''',
       [
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 10, 6),
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 11, 3),
+        error(diag.constInitializedWithNonConstantValue, 10, 6),
+        error(diag.dotShorthandUndefinedInvocation, 11, 3),
       ],
     );
   }
@@ -212,8 +211,8 @@
 const a = .id;
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandMissingContext, 10, 3),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 10, 3),
+        error(diag.dotShorthandMissingContext, 10, 3),
+        error(diag.constInitializedWithNonConstantValue, 10, 3),
       ],
     );
   }
@@ -262,7 +261,7 @@
   final Iterable<String> strings;
 }
 ''',
-      [error(CompileTimeErrorCode.constEvalMethodInvocation, 21, 22)],
+      [error(diag.constEvalMethodInvocation, 21, 22)],
     );
   }
 
@@ -522,8 +521,8 @@
 const v = a == 1;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 10, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 10, 1),
+        error(diag.undefinedIdentifier, 10, 1),
+        error(diag.constInitializedWithNonConstantValue, 10, 1),
       ],
     );
   }
@@ -534,8 +533,8 @@
 const v = 1 == a;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 15, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 15, 1),
+        error(diag.undefinedIdentifier, 15, 1),
+        error(diag.constInitializedWithNonConstantValue, 15, 1),
       ],
     );
   }
@@ -672,7 +671,7 @@
 
 const v = A() == 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 72, 8)],
+      [error(diag.constEvalPrimitiveEquality, 72, 8)],
     );
     var result = _topLevelVar('v');
     _assertNull(result);
@@ -688,7 +687,7 @@
 
 const v = A() == 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 61, 8)],
+      [error(diag.constEvalPrimitiveEquality, 61, 8)],
     );
     var result = _topLevelVar('v');
     _assertNull(result);
@@ -720,7 +719,7 @@
 
 const v = A() == 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalTypeBoolNumString, 52, 8)],
+      [error(diag.constEvalTypeBoolNumString, 52, 8)],
     );
     var result = _topLevelVar('v');
     _assertNull(result);
@@ -752,7 +751,7 @@
 
 const v = A() == A();
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 72, 10)],
+      [error(diag.constEvalPrimitiveEquality, 72, 10)],
     );
   }
 
@@ -1399,8 +1398,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 49, 1),
-        error(CompileTimeErrorCode.constTypeParameter, 53, 1),
+        error(diag.unusedLocalVariable, 49, 1),
+        error(diag.constTypeParameter, 53, 1),
       ],
     );
     var result = _localVar('x');
@@ -1417,7 +1416,7 @@
 const Object v1 = 0;
 const v2 = v1 + v1;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionMethod, 94, 7)],
+      [error(diag.constEvalExtensionMethod, 94, 7)],
     );
     var result = _topLevelVar('v2');
     _assertNull(result);
@@ -1433,7 +1432,7 @@
 const v1 = A(1);
 const v2 = v1 + 2;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionTypeMethod, 101, 6)],
+      [error(diag.constEvalExtensionTypeMethod, 101, 6)],
     );
     var result = _topLevelVar('v2');
     _assertNull(result);
@@ -1514,7 +1513,7 @@
       '''
 const c = 0xFFFFFFFF >>> -2;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 10, 17)],
+      [error(diag.constEvalThrowsException, 10, 17)],
     );
     var result = _topLevelVar('c');
     _assertNull(result);
@@ -1571,7 +1570,7 @@
       '''
 const c = 0xFF >>> -2;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 10, 11)],
+      [error(diag.constEvalThrowsException, 10, 11)],
     );
     var result = _topLevelVar('c');
     _assertNull(result);
@@ -1618,9 +1617,9 @@
 const c = x ?? 1;
 ''',
       [
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 23, 1),
-        error(WarningCode.deadCode, 25, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 28, 1),
+        error(diag.constInitializedWithNonConstantValue, 23, 1),
+        error(diag.deadCode, 25, 4),
+        error(diag.deadNullAwareExpression, 28, 1),
       ],
     );
   }
@@ -1632,9 +1631,9 @@
 const c = 0 ?? x;
 ''',
       [
-        error(WarningCode.deadCode, 25, 4),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 28, 1),
-        error(StaticWarningCode.deadNullAwareExpression, 28, 1),
+        error(diag.deadCode, 25, 4),
+        error(diag.constInitializedWithNonConstantValue, 28, 1),
+        error(diag.deadNullAwareExpression, 28, 1),
       ],
     );
   }
@@ -1645,8 +1644,8 @@
 const c = null ? 1 : 0;
 ''',
       [
-        error(CompileTimeErrorCode.nonBoolCondition, 10, 4),
-        error(CompileTimeErrorCode.constEvalTypeBool, 10, 4),
+        error(diag.nonBoolCondition, 10, 4),
+        error(diag.constEvalTypeBool, 10, 4),
       ],
     );
   }
@@ -1695,8 +1694,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidConstant, 76, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 76, 1),
+        error(diag.invalidConstant, 76, 1),
+        error(diag.constInitializedWithNonConstantValue, 76, 1),
       ],
     );
     var result = _topLevelVar('x');
@@ -1710,9 +1709,9 @@
 const x = kIsWeb ? a : b;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 58, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 58, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 62, 1),
+        error(diag.undefinedIdentifier, 58, 1),
+        error(diag.constInitializedWithNonConstantValue, 58, 1),
+        error(diag.undefinedIdentifier, 62, 1),
       ],
     );
     var result = _topLevelVar('x');
@@ -1728,7 +1727,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.recursiveConstantConstructor, 31, 1)],
+      [error(diag.recursiveConstantConstructor, 31, 1)],
     );
   }
 
@@ -1755,8 +1754,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 110, 12),
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 344, 13),
+        error(diag.recursiveConstantConstructor, 110, 12),
+        error(diag.recursiveConstantConstructor, 344, 13),
       ],
     );
   }
@@ -1770,13 +1769,7 @@
   final x = y as num;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-          27,
-          5,
-        ),
-      ],
+      [error(diag.constConstructorWithFieldInitializedByNonConst, 27, 5)],
     );
   }
 
@@ -2133,13 +2126,7 @@
   const C({this.p = f});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          83,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 83, 1)],
     );
   }
 
@@ -2198,7 +2185,7 @@
 void f<T extends num>(T a) {}
 const g = f<String>;
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 42, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 42, 6)],
     );
     var result = _topLevelVar('g');
     assertDartObjectText(result, r'''
@@ -2217,10 +2204,10 @@
 const g = foo<true>;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeNum, 30, 8),
-        error(CompileTimeErrorCode.undefinedOperator, 33, 1),
-        error(ParserErrorCode.equalityCannotBeEqualityOperand, 38, 1),
-        error(ParserErrorCode.missingIdentifier, 39, 1),
+        error(diag.constEvalTypeNum, 30, 8),
+        error(diag.undefinedOperator, 33, 1),
+        error(diag.equalityCannotBeEqualityOperand, 38, 1),
+        error(diag.missingIdentifier, 39, 1),
       ],
     );
     var result = _topLevelVar('g');
@@ -2233,7 +2220,7 @@
 void foo<T, U>(T a, U b) {}
 const g = foo<int>;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 41, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 41, 5)],
     );
     var result = _topLevelVar('g');
     _assertNull(result);
@@ -2245,7 +2232,7 @@
 void foo<T>(T a) {}
 const g = foo<int, String>;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 33, 13)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 33, 13)],
     );
     var result = _topLevelVar('g');
     _assertNull(result);
@@ -2263,12 +2250,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 55, 1),
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          61,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 55, 1),
+        error(diag.constWithTypeParametersFunctionTearoff, 61, 1),
       ],
     );
   }
@@ -2515,9 +2498,9 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 11, 11),
-        error(CompileTimeErrorCode.undefinedIdentifier, 35, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 35, 1),
+        error(diag.deadCode, 11, 11),
+        error(diag.undefinedIdentifier, 35, 1),
+        error(diag.constInitializedWithNonConstantValue, 35, 1),
       ],
     );
   }
@@ -2538,8 +2521,8 @@
 const a = A(x: false);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 58, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 55, 8),
+        error(diag.argumentTypeNotAssignable, 58, 5),
+        error(diag.constConstructorParamTypeMismatch, 55, 8),
       ],
     );
   }
@@ -2556,8 +2539,8 @@
 const a = B(x: false);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 113, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 110, 8),
+        error(diag.argumentTypeNotAssignable, 113, 5),
+        error(diag.constConstructorParamTypeMismatch, 110, 8),
       ],
     );
   }
@@ -2571,8 +2554,8 @@
 const a = A(false);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 42, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 42, 5),
+        error(diag.argumentTypeNotAssignable, 42, 5),
+        error(diag.constConstructorParamTypeMismatch, 42, 5),
       ],
     );
   }
@@ -2589,8 +2572,8 @@
 const a = B(false);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 84, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 84, 5),
+        error(diag.argumentTypeNotAssignable, 84, 5),
+        error(diag.constConstructorParamTypeMismatch, 84, 5),
       ],
     );
   }
@@ -2603,7 +2586,7 @@
 }
 const a = A();
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 52, 1)],
+      [error(diag.missingRequiredArgument, 52, 1)],
     );
   }
 
@@ -2619,14 +2602,10 @@
 const a = B();
 ''',
       [
-        error(CompileTimeErrorCode.missingRequiredArgument, 106, 1),
+        error(diag.missingRequiredArgument, 106, 1),
+        error(diag.constInitializedWithNonConstantValue, 106, 3),
         error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          106,
-          3,
-        ),
-        error(
-          CompileTimeErrorCode.invalidConstant,
+          diag.invalidConstant,
           106,
           3,
           contextMessages: [message(testFile, 88, 1)],
@@ -2643,13 +2622,7 @@
 }
 const a = A();
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.notEnoughPositionalArgumentsNameSingular, 42, 1)],
     );
   }
 
@@ -2665,14 +2638,10 @@
 const a = B();
 ''',
       [
+        error(diag.notEnoughPositionalArgumentsNameSingular, 84, 1),
+        error(diag.constInitializedWithNonConstantValue, 82, 3),
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
-          84,
-          1,
-        ),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 82, 3),
-        error(
-          CompileTimeErrorCode.invalidConstant,
+          diag.invalidConstant,
           82,
           3,
           contextMessages: [message(testFile, 66, 1)],
@@ -2704,8 +2673,8 @@
 const a = A();
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConst, 21, 3),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 21, 3),
+        error(diag.constWithNonConst, 21, 3),
+        error(diag.constInitializedWithNonConstantValue, 21, 3),
       ],
     );
   }
@@ -2740,13 +2709,9 @@
       [
         // TODO(kallentu): This should not be reported.
         // https://github.com/dart-lang/sdk/issues/50441
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToUnknownMember,
-          45,
-          8,
-        ),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 45, 8),
-        error(ParserErrorCode.missingIdentifier, 52, 1),
+        error(diag.classInstantiationAccessToUnknownMember, 45, 8),
+        error(diag.constInitializedWithNonConstantValue, 45, 8),
+        error(diag.missingIdentifier, 52, 1),
       ],
     );
   }
@@ -2756,7 +2721,7 @@
       r'''
 const x = '${const [2]}';
 ''',
-      [error(CompileTimeErrorCode.constEvalTypeBoolNumString, 11, 12)],
+      [error(diag.constEvalTypeBoolNumString, 11, 12)],
     );
   }
 
@@ -2766,7 +2731,7 @@
 void foo(int a) {}
 const c = foo is void Function(int);
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 29, 25)],
+      [error(diag.unnecessaryTypeCheckTrue, 29, 25)],
     );
     var result = _topLevelVar('c');
     assertDartObjectText(result, r'''
@@ -2784,7 +2749,7 @@
   const A();
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 31, 6)],
+      [error(diag.unnecessaryTypeCheckTrue, 31, 6)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, r'''
@@ -2805,7 +2770,7 @@
   const B();
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 31, 6)],
+      [error(diag.unnecessaryTypeCheckTrue, 31, 6)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, r'''
@@ -2861,7 +2826,7 @@
   const A();
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 31, 7)],
+      [error(diag.unnecessaryTypeCheckFalse, 31, 7)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, r'''
@@ -2882,7 +2847,7 @@
   const B();
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 31, 7)],
+      [error(diag.unnecessaryTypeCheckFalse, 31, 7)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, r'''
@@ -2910,12 +2875,8 @@
 const x = [for (int i = 0; i < 3; i++) i];
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          10,
-          31,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 11, 29),
+        error(diag.constInitializedWithNonConstantValue, 10, 31),
+        error(diag.constEvalForElement, 11, 29),
       ],
     );
     var result = _topLevelVar('x');
@@ -2928,7 +2889,7 @@
 const dynamic c = 2;
 const x = [1, if (c) 2 else 3, 4];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 39, 1)],
+      [error(diag.nonBoolCondition, 39, 1)],
     );
     var result = _topLevelVar('x');
     _assertNull(result);
@@ -2939,7 +2900,7 @@
       r'''
 const x = [1, if (1) 2 else 3, 4];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 18, 1)],
+      [error(diag.nonBoolCondition, 18, 1)],
     );
     var result = _topLevelVar('x');
     _assertNull(result);
@@ -2982,7 +2943,7 @@
   List<String> foo() => const [bar];
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 79, 3)],
+      [error(diag.nonConstantListElement, 79, 3)],
     );
   }
 
@@ -3038,7 +2999,7 @@
 const dynamic a = 5;
 const x = <int>[...a];
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 40, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 40, 1)],
     );
     var result = _topLevelVar('x');
     _assertNull(result);
@@ -3089,7 +3050,7 @@
 }
 const a = f();
 ''',
-      [error(CompileTimeErrorCode.constEvalMethodInvocation, 34, 3)],
+      [error(diag.constEvalMethodInvocation, 34, 3)],
     );
   }
 
@@ -3100,7 +3061,7 @@
   if (x case const (T)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.constTypeParameter, 43, 1)],
+      [error(diag.constTypeParameter, 43, 1)],
     );
   }
 
@@ -3111,7 +3072,7 @@
   if (x case const (List<T>)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.constTypeParameter, 43, 7)],
+      [error(diag.constTypeParameter, 43, 7)],
     );
   }
 
@@ -3208,7 +3169,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalPropertyAccess,
+          diag.constEvalPropertyAccess,
           16,
           31,
           contextMessages: [
@@ -3247,7 +3208,7 @@
 const Object v1 = 1;
 const v2 = -v1;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionMethod, 82, 3)],
+      [error(diag.constEvalExtensionMethod, 82, 3)],
     );
     var result = _topLevelVar('v2');
     _assertNull(result);
@@ -3263,7 +3224,7 @@
 const v1 = A(1);
 const v2 = -v1;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionTypeMethod, 89, 3)],
+      [error(diag.constEvalExtensionTypeMethod, 89, 3)],
     );
     var result = _topLevelVar('v2');
     _assertNull(result);
@@ -3300,8 +3261,8 @@
 const c = -true;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedOperator, 10, 1),
-        error(CompileTimeErrorCode.constEvalTypeNum, 10, 5),
+        error(diag.undefinedOperator, 10, 1),
+        error(diag.constEvalTypeNum, 10, 5),
       ],
     );
   }
@@ -3461,7 +3422,7 @@
 final bar = '';
 ({String bar, }) foo() => const (bar: bar, );
 ''',
-      [error(CompileTimeErrorCode.nonConstantRecordField, 54, 3)],
+      [error(diag.nonConstantRecordField, 54, 3)],
     );
   }
 
@@ -3512,7 +3473,7 @@
 final bar = '';
 (String, ) foo() => const (bar, );
 ''',
-      [error(CompileTimeErrorCode.nonConstantRecordField, 43, 3)],
+      [error(diag.nonConstantRecordField, 43, 3)],
     );
   }
 
@@ -3538,7 +3499,7 @@
 const l = [];
 const ambiguous = {...l, 1: 2};
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth, 32, 12)],
+      [error(diag.ambiguousSetOrMapLiteralBoth, 32, 12)],
     );
   }
 
@@ -3548,7 +3509,7 @@
 const int? i = 1;
 const res  = {...?i};
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 31, 7)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 31, 7)],
     );
   }
 
@@ -3558,7 +3519,7 @@
 const m = {1: 1};
 const res = {...m, 2};
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth, 30, 9)],
+      [error(diag.ambiguousSetOrMapLiteralBoth, 30, 9)],
     );
   }
 
@@ -3569,7 +3530,7 @@
 const ambiguous = {...l, 1: 2};
 const anotherList = [...ambiguous];
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth, 32, 12)],
+      [error(diag.ambiguousSetOrMapLiteralBoth, 32, 12)],
     );
   }
 
@@ -3608,12 +3569,8 @@
 const x = {1: null, for (final i in const []) i: null};
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          10,
-          44,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 20, 33),
+        error(diag.constInitializedWithNonConstantValue, 10, 44),
+        error(diag.constEvalForElement, 20, 33),
       ],
     );
     var result = _topLevelVar('x');
@@ -3626,12 +3583,8 @@
 const x = {1: null, if (true) for (final i in const []) i: null};
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          10,
-          54,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 30, 33),
+        error(diag.constInitializedWithNonConstantValue, 10, 54),
+        error(diag.constEvalForElement, 30, 33),
       ],
     );
     var result = _topLevelVar('x');
@@ -3644,7 +3597,7 @@
 const dynamic nonBool = null;
 const c = const {if (nonBool) 'a' : 1};
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 51, 7)],
+      [error(diag.nonBoolCondition, 51, 7)],
     );
     var result = _topLevelVar('c');
     _assertNull(result);
@@ -3700,8 +3653,8 @@
 };
 ''',
       [
-        error(CompileTimeErrorCode.constSpreadExpectedMap, 90, 1),
-        error(CompileTimeErrorCode.notMapSpread, 90, 1),
+        error(diag.constSpreadExpectedMap, 90, 1),
+        error(diag.notMapSpread, 90, 1),
       ],
     );
   }
@@ -3766,12 +3719,8 @@
 const x = {for (final i in set) i};
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          30,
-          24,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 31, 22),
+        error(diag.constInitializedWithNonConstantValue, 30, 24),
+        error(diag.constEvalForElement, 31, 22),
       ],
     );
     var result = _topLevelVar('x');
@@ -3784,7 +3733,7 @@
 const dynamic nonBool = 'a';
 const c = const {if (nonBool) 3};
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 50, 7)],
+      [error(diag.nonBoolCondition, 50, 7)],
     );
     var result = _topLevelVar('c');
     _assertNull(result);
@@ -3982,7 +3931,7 @@
 const v1 = A(1);
 const v2 = -v1;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionTypeMethod, 89, 3)],
+      [error(diag.constEvalExtensionTypeMethod, 89, 3)],
     );
     var result = _topLevelVar('v2');
     _assertNull(result);
@@ -4274,7 +4223,7 @@
   const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 31, 6)],
+      [error(diag.constEvalThrowsException, 31, 6)],
     );
     var result = _topLevelVar('b');
     _assertNull(result);
@@ -4292,7 +4241,7 @@
   const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 31, 6)],
+      [error(diag.constEvalThrowsException, 31, 6)],
     );
     var result = _topLevelVar('b');
     _assertNull(result);
@@ -4333,8 +4282,8 @@
 const c = C() + 1;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeNumString, 80, 7),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 86, 1),
+        error(diag.constEvalTypeNumString, 80, 7),
+        error(diag.argumentTypeNotAssignable, 86, 1),
       ],
     );
   }
@@ -4379,8 +4328,8 @@
 const c = false && a;
 ''',
       [
-        error(WarningCode.deadCode, 33, 4),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 36, 1),
+        error(diag.deadCode, 33, 4),
+        error(diag.constInitializedWithNonConstantValue, 36, 1),
       ],
     );
   }
@@ -4391,7 +4340,7 @@
 final a = false;
 const c = a && false;
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 27, 1)],
+      [error(diag.constInitializedWithNonConstantValue, 27, 1)],
     );
   }
 
@@ -4401,7 +4350,7 @@
 final a = false;
 const c = a && true;
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 27, 1)],
+      [error(diag.constInitializedWithNonConstantValue, 27, 1)],
     );
   }
 
@@ -4428,7 +4377,7 @@
 final a = false;
 const c = true && a;
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 27, 9)],
+      [error(diag.constInitializedWithNonConstantValue, 27, 9)],
     );
   }
 
@@ -4468,8 +4417,8 @@
 const c = 3 & false;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeBoolInt, 10, 9),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 14, 5),
+        error(diag.constEvalTypeBoolInt, 10, 9),
+        error(diag.argumentTypeNotAssignable, 14, 5),
       ],
     );
   }
@@ -4523,7 +4472,7 @@
       '''
 const c = double.nan == 2.3;
 ''',
-      [error(WarningCode.unnecessaryNanComparisonFalse, 10, 13)],
+      [error(diag.unnecessaryNanComparisonFalse, 10, 13)],
     );
     // This test case produces a warning, but the value of the constant should
     // be `false`.
@@ -4539,7 +4488,7 @@
       '''
 const c = 2.3 == double.nan;
 ''',
-      [error(WarningCode.unnecessaryNanComparisonFalse, 14, 13)],
+      [error(diag.unnecessaryNanComparisonFalse, 14, 13)],
     );
     // This test case produces a warning, but the value of the constant should
     // be `false`.
@@ -4600,8 +4549,8 @@
 const c = a != 3;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 10, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 10, 1),
+        error(diag.undefinedIdentifier, 10, 1),
+        error(diag.constInitializedWithNonConstantValue, 10, 1),
       ],
     );
   }
@@ -4612,8 +4561,8 @@
 const c = 2 != a;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 15, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 15, 1),
+        error(diag.undefinedIdentifier, 15, 1),
+        error(diag.constInitializedWithNonConstantValue, 15, 1),
       ],
     );
   }
@@ -4635,13 +4584,7 @@
 final a = false;
 const c = false || a;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          27,
-          10,
-        ),
-      ],
+      [error(diag.constInitializedWithNonConstantValue, 27, 10)],
     );
   }
 
@@ -4651,7 +4594,7 @@
 final a = false;
 const c = a || false;
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 27, 1)],
+      [error(diag.constInitializedWithNonConstantValue, 27, 1)],
     );
   }
 
@@ -4661,7 +4604,7 @@
 final a = false;
 const c = a || true;
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 27, 1)],
+      [error(diag.constInitializedWithNonConstantValue, 27, 1)],
     );
   }
 
@@ -4689,8 +4632,8 @@
 const c = true || a;
 ''',
       [
-        error(WarningCode.deadCode, 32, 4),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 35, 1),
+        error(diag.deadCode, 32, 4),
+        error(diag.constInitializedWithNonConstantValue, 35, 1),
       ],
     );
   }
@@ -4727,7 +4670,7 @@
       '''
 const c = true || false;
 ''',
-      [error(WarningCode.deadCode, 15, 8)],
+      [error(diag.deadCode, 15, 8)],
     );
     var result = _topLevelVar('c');
     assertDartObjectText(result, r'''
@@ -4742,8 +4685,8 @@
 const c = 3 | false;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeBoolInt, 10, 9),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 14, 5),
+        error(diag.constEvalTypeBoolInt, 10, 9),
+        error(diag.argumentTypeNotAssignable, 14, 5),
       ],
     );
   }
@@ -4763,7 +4706,7 @@
 const c = null ?? new C();
 class C {}
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 18, 7)],
+      [error(diag.constInitializedWithNonConstantValue, 18, 7)],
     );
   }
 
@@ -4834,8 +4777,8 @@
 const c = 3 ^ false;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeBoolInt, 10, 9),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 14, 5),
+        error(diag.constEvalTypeBoolInt, 10, 9),
+        error(diag.argumentTypeNotAssignable, 14, 5),
       ],
     );
   }
@@ -4869,7 +4812,7 @@
       '''
 const c = false ? 1 : 0;
 ''',
-      [error(WarningCode.deadCode, 18, 1)],
+      [error(diag.deadCode, 18, 1)],
     );
     var result = _topLevelVar('c');
     assertDartObjectText(result, r'''
@@ -4883,7 +4826,7 @@
       '''
 const c = true ? 1 : 0;
 ''',
-      [error(WarningCode.deadCode, 21, 1)],
+      [error(diag.deadCode, 21, 1)],
     );
     var result = _topLevelVar('c');
     assertDartObjectText(result, r'''
@@ -4898,9 +4841,9 @@
 const c = true ? 1 : x;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 21, 1),
-        error(WarningCode.deadCode, 21, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 21, 1),
+        error(diag.undefinedIdentifier, 21, 1),
+        error(diag.deadCode, 21, 1),
+        error(diag.constInitializedWithNonConstantValue, 21, 1),
       ],
     );
   }
@@ -4911,9 +4854,9 @@
 const c = true ? x : 0;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 17, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 17, 1),
-        error(WarningCode.deadCode, 21, 1),
+        error(diag.undefinedIdentifier, 17, 1),
+        error(diag.constInitializedWithNonConstantValue, 17, 1),
+        error(diag.deadCode, 21, 1),
       ],
     );
   }
@@ -4923,7 +4866,7 @@
       '''
 const c = false ? 1 : 0;
 ''',
-      [error(WarningCode.deadCode, 18, 1)],
+      [error(diag.deadCode, 18, 1)],
     );
     var result = _topLevelVar('c');
     assertDartObjectText(result, r'''
@@ -4938,9 +4881,9 @@
 const c = false ? 1 : new C();
 ''',
       [
-        error(WarningCode.deadCode, 18, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 22, 7),
-        error(CompileTimeErrorCode.newWithNonType, 26, 1),
+        error(diag.deadCode, 18, 1),
+        error(diag.constInitializedWithNonConstantValue, 22, 7),
+        error(diag.newWithNonType, 26, 1),
       ],
     );
   }
@@ -4951,9 +4894,9 @@
 const c = false ? new C() : 0;
 ''',
       [
-        error(WarningCode.deadCode, 18, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 18, 7),
-        error(CompileTimeErrorCode.newWithNonType, 22, 1),
+        error(diag.deadCode, 18, 7),
+        error(diag.constInitializedWithNonConstantValue, 18, 7),
+        error(diag.newWithNonType, 22, 1),
       ],
     );
   }
@@ -4964,8 +4907,8 @@
 const c = 3 ? 1 : 0;
 ''',
       [
-        error(CompileTimeErrorCode.nonBoolCondition, 10, 1),
-        error(CompileTimeErrorCode.constEvalTypeBool, 10, 1),
+        error(diag.nonBoolCondition, 10, 1),
+        error(diag.constEvalTypeBool, 10, 1),
       ],
     );
   }
@@ -4975,7 +4918,7 @@
       '''
 const c = true ? 1 : 0;
 ''',
-      [error(WarningCode.deadCode, 21, 1)],
+      [error(diag.deadCode, 21, 1)],
     );
     var result = _topLevelVar('c');
     assertDartObjectText(result, r'''
@@ -4990,9 +4933,9 @@
 const c = true ? 1: new C();
 ''',
       [
-        error(WarningCode.deadCode, 20, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 20, 7),
-        error(CompileTimeErrorCode.newWithNonType, 24, 1),
+        error(diag.deadCode, 20, 7),
+        error(diag.constInitializedWithNonConstantValue, 20, 7),
+        error(diag.newWithNonType, 24, 1),
       ],
     );
   }
@@ -5004,8 +4947,8 @@
 class C {}
 ''',
       [
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 17, 7),
-        error(WarningCode.deadCode, 27, 1),
+        error(diag.constInitializedWithNonConstantValue, 17, 7),
+        error(diag.deadCode, 27, 1),
       ],
     );
   }
@@ -5015,13 +4958,7 @@
       '''
 const c = identical(0, 0.0) ? 1 : new Object();
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          34,
-          12,
-        ),
-      ],
+      [error(diag.constInitializedWithNonConstantValue, 34, 12)],
     );
   }
 
@@ -5030,13 +4967,7 @@
       '''
 const c = identical(0, 0.0) ? 1 : new Object();
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          34,
-          12,
-        ),
-      ],
+      [error(diag.constInitializedWithNonConstantValue, 34, 12)],
     );
   }
 
@@ -5137,7 +5068,7 @@
 const b = a is dynamic;
 class A {}
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 26, 12)],
+      [error(diag.unnecessaryTypeCheckTrue, 26, 12)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, r'''
@@ -5153,7 +5084,7 @@
 const b = a is Null;
 class A {}
 ''',
-      [error(WarningCode.typeCheckIsNull, 26, 9)],
+      [error(diag.typeCheckIsNull, 26, 9)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, r'''
@@ -5256,7 +5187,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalExtensionMethod,
+          diag.constEvalExtensionMethod,
           128,
           5,
           contextMessages: [
@@ -5284,7 +5215,7 @@
 const v1 = A('');
 const v2 = v1.length;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionTypeMethod, 91, 9)],
+      [error(diag.constEvalExtensionTypeMethod, 91, 9)],
     );
     var result = _topLevelVar('v2');
     _assertNull(result);
@@ -5316,7 +5247,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalTypeString,
+          diag.constEvalTypeString,
           70,
           4,
           contextMessages: [
@@ -5330,8 +5261,8 @@
             ),
           ],
         ),
-        error(CompileTimeErrorCode.undefinedIdentifier, 72, 1),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 72, 1),
+        error(diag.undefinedIdentifier, 72, 1),
+        error(diag.constWithNonConstantArgument, 72, 1),
       ],
     );
   }
@@ -5393,14 +5324,9 @@
 }
 ''',
       [
-        error(
-          WarningCode.unusedLocalVariable,
-          35,
-          1,
-          messageContainsAll: ["'c'"],
-        ),
-        error(CompileTimeErrorCode.undefinedIdentifier, 39, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 39, 1),
+        error(diag.unusedLocalVariable, 35, 1, messageContainsAll: ["'c'"]),
+        error(diag.undefinedIdentifier, 39, 1),
+        error(diag.constInitializedWithNonConstantValue, 39, 1),
       ],
     );
   }
@@ -5440,8 +5366,8 @@
 const c = 'a${f()}c';
 ''',
       [
-        error(CompileTimeErrorCode.undefinedFunction, 14, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 14, 3),
+        error(diag.undefinedFunction, 14, 1),
+        error(diag.constInitializedWithNonConstantValue, 14, 3),
       ],
     );
   }
@@ -5552,9 +5478,9 @@
 const a = const A(null);
 ''',
       [
-        error(WarningCode.unnecessaryTypeCheckFalse, 31, 9),
+        error(diag.unnecessaryTypeCheckFalse, 31, 9),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           56,
           13,
           contextMessages: [
@@ -5568,7 +5494,7 @@
             ),
           ],
         ),
-        error(CompileTimeErrorCode.extraPositionalArguments, 64, 4),
+        error(diag.extraPositionalArguments, 64, 4),
       ],
     );
   }
@@ -5584,7 +5510,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           60,
           15,
           contextMessages: [
@@ -5611,7 +5537,7 @@
 
 const a = const A(null);
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 67, 4)],
+      [error(diag.extraPositionalArguments, 67, 4)],
     );
     var result = _topLevelVar('a');
     assertDartObjectText(result, '''
@@ -5635,7 +5561,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           73,
           12,
           contextMessages: [
@@ -5693,7 +5619,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           124,
           10,
           contextMessages: [
@@ -5727,7 +5653,7 @@
 }
 const a = const A(0);
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 38, 11)],
+      [error(diag.unnecessaryTypeCheckTrue, 38, 11)],
     );
     var result = _topLevelVar('a');
     assertDartObjectText(result, '''
@@ -5750,7 +5676,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           71,
           10,
           contextMessages: [
@@ -5796,7 +5722,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           56,
           9,
           contextMessages: [
@@ -5822,7 +5748,7 @@
 }
 const a = const A();
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 30, 8)],
+      [error(diag.unnecessaryTypeCheckTrue, 30, 8)],
     );
     var result = _topLevelVar('a');
     assertDartObjectText(result, '''
@@ -5846,7 +5772,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           101,
           9,
           contextMessages: [
@@ -5883,7 +5809,7 @@
 }
 const b = const B();
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 30, 8)],
+      [error(diag.unnecessaryTypeCheckTrue, 30, 8)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, '''
@@ -5907,7 +5833,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           55,
           10,
           contextMessages: [
@@ -5935,7 +5861,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           84,
           10,
           contextMessages: [
@@ -5962,11 +5888,11 @@
 const a = const A(0);
 ''',
       [
-        error(CompileTimeErrorCode.invalidConstant, 45, 8),
-        error(CompileTimeErrorCode.constConstructorThrowsException, 45, 8),
-        error(WarningCode.deadCode, 54, 3),
+        error(diag.invalidConstant, 45, 8),
+        error(diag.constConstructorThrowsException, 45, 8),
+        error(diag.deadCode, 54, 3),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           70,
           10,
           contextMessages: [
@@ -6157,7 +6083,7 @@
   const A(List<int> p);
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 91, 1)],
+      [error(diag.nonConstantListElement, 91, 1)],
     );
   }
 
@@ -6222,7 +6148,7 @@
   const A(List<int> p);
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 98, 1)],
+      [error(diag.nonConstantListElement, 98, 1)],
     );
   }
 
@@ -6249,7 +6175,7 @@
   const A((int, ) p);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 84, 1)],
+      [error(diag.invalidConstant, 84, 1)],
     );
   }
 
@@ -6279,9 +6205,9 @@
 const A a = .new();
 ''',
       [
-        error(WarningCode.unnecessaryTypeCheckFalse, 31, 9),
+        error(diag.unnecessaryTypeCheckFalse, 31, 9),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           58,
           6,
           contextMessages: [
@@ -6327,7 +6253,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           74,
           8,
           contextMessages: [
@@ -6380,7 +6306,7 @@
 }
 const B b = .new();
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 30, 8)],
+      [error(diag.unnecessaryTypeCheckTrue, 30, 8)],
     );
     var result = _topLevelVar('b');
     assertDartObjectText(result, '''
@@ -6518,7 +6444,7 @@
 import 'a.dart';
 const C c = .new();
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 30, 3)],
+      [error(diag.missingRequiredArgument, 30, 3)],
     );
   }
 
@@ -6534,12 +6460,8 @@
 const B b = .new(A());
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConst, 108, 3),
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          108,
-          3,
-        ),
+        error(diag.constWithNonConst, 108, 3),
+        error(diag.constInitializedWithNonConstantValue, 108, 3),
       ],
     );
   }
@@ -6565,13 +6487,7 @@
   print(const B(a.aa));
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constConstructorConstantFromDeferredLibrary,
-          93,
-          2,
-        ),
-      ],
+      [error(diag.constConstructorConstantFromDeferredLibrary, 93, 2)],
     );
   }
 
@@ -6690,9 +6606,9 @@
 const a = const A<int>();
 ''',
       [
-        error(CompileTimeErrorCode.invalidConstant, 62, 1),
+        error(diag.invalidConstant, 62, 1),
         error(
-          CompileTimeErrorCode.invalidConstant,
+          diag.invalidConstant,
           77,
           14,
           contextMessages: [
@@ -6706,11 +6622,7 @@
             ),
           ],
         ),
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          77,
-          14,
-        ),
+        error(diag.constInitializedWithNonConstantValue, 77, 14),
       ],
     );
     var result = _topLevelVar('a');
@@ -6777,8 +6689,8 @@
 const a = const Foo(bar);
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 88, 3),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 88, 3),
+        error(diag.constWithNonConstantArgument, 88, 3),
+        error(diag.constInitializedWithNonConstantValue, 88, 3),
       ],
     );
   }
@@ -6795,7 +6707,7 @@
   const C(() {});
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConstantArgument, 83, 5)],
+      [error(diag.constWithNonConstantArgument, 83, 5)],
     );
   }
 
@@ -6815,7 +6727,7 @@
       [
         // TODO(kallentu): Fix [InvalidConstant.genericError] to handle
         // NamedExpressions.
-        error(CompileTimeErrorCode.invalidConstant, 148, 4),
+        error(diag.invalidConstant, 148, 4),
       ],
     );
   }
@@ -6831,7 +6743,7 @@
   const A(List<int> p);
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 28, 1)],
+      [error(diag.nonConstantListElement, 28, 1)],
     );
   }
 
@@ -7250,7 +7162,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           153,
           14,
           contextMessages: [
@@ -7373,8 +7285,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidConstant, 63, 1),
-        error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 63, 1),
+        error(diag.invalidConstant, 63, 1),
+        error(diag.implicitThisReferenceInInitializer, 63, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/dart/element/class_element_test.dart b/pkg/analyzer/test/src/dart/element/class_element_test.dart
index d48a702..ef3eef4 100644
--- a/pkg/analyzer/test/src/dart/element/class_element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/class_element_test.dart
@@ -4,7 +4,7 @@
 
 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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../resolution/context_collection_resolution.dart';
@@ -292,8 +292,8 @@
 class B extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
     var B = findElement2.class_('B');
@@ -583,8 +583,8 @@
 class B extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
     var B = findElement2.class_('B');
@@ -874,8 +874,8 @@
 class B extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
     var B = findElement2.class_('B');
@@ -1135,8 +1135,8 @@
 class B extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
     var B = findElement2.class_('B');
diff --git a/pkg/analyzer/test/src/dart/element/display_string_test.dart b/pkg/analyzer/test/src/dart/element/display_string_test.dart
index 76f19df..47f43a6 100644
--- a/pkg/analyzer/test/src/dart/element/display_string_test.dart
+++ b/pkg/analyzer/test/src/dart/element/display_string_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -307,7 +307,7 @@
       r'''
 import 'src/f.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 12)],
+      [error(diag.uriDoesNotExist, 7, 12)],
     );
     var import =
         findElement2.libraryFragment.libraryImports[0] as LibraryImportImpl;
@@ -410,7 +410,7 @@
   f: 0;
 }
 ''',
-      [error(WarningCode.unusedLabel, 13, 2)],
+      [error(diag.unusedLabel, 13, 2)],
     );
     var element = findElement2.label('f');
     expect(element.displayString(), 'f');
@@ -429,7 +429,7 @@
       r'''
 export 'src/f.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 12)],
+      [error(diag.uriDoesNotExist, 7, 12)],
     );
     var export =
         findElement2.libraryFragment.libraryExports.single as LibraryExportImpl;
@@ -441,7 +441,7 @@
       r'''
 import 'src/f.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 12)],
+      [error(diag.uriDoesNotExist, 7, 12)],
     );
     var import =
         findElement2.libraryFragment.libraryImports[0] as LibraryImportImpl;
@@ -455,7 +455,7 @@
   void g() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
     var element = findElement2.localFunction('g');
     expect(element.displayString(), "void g()");
@@ -468,7 +468,7 @@
   void g(int a, bool b, {String? c}) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
     var element = findElement2.localFunction('g');
     expect(element.displayString(), "void g(int a, bool b, {String? c})");
@@ -481,7 +481,7 @@
   void g<T, S extends num>() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
     var element = findElement2.localFunction('g');
     expect(element.displayString(), "void g<T, S extends num>()");
@@ -530,7 +530,7 @@
       r'''
 Never a;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 6, 1)],
+      [error(diag.notInitializedNonNullableVariable, 6, 1)],
     );
     var element = findElement2.topVar('a');
     expect(element.displayString(), "Never a");
@@ -541,7 +541,7 @@
       r'''
 part 'src/f.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 5, 12)],
+      [error(diag.uriDoesNotExist, 5, 12)],
     );
     var element =
         findElement2.libraryFragment.partIncludes.single as PartIncludeImpl;
@@ -554,10 +554,7 @@
 import 'src/f.dart' as a;
 import 'src/bar.dart' as a;
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 7, 12),
-        error(CompileTimeErrorCode.uriDoesNotExist, 33, 14),
-      ],
+      [error(diag.uriDoesNotExist, 7, 12), error(diag.uriDoesNotExist, 33, 14)],
     );
     var prefix = findElement2.prefix('a');
     expect(
@@ -571,7 +568,7 @@
       r'''
 import 'src/f.dart' as a;
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 12)],
+      [error(diag.uriDoesNotExist, 7, 12)],
     );
     var prefix = findElement2.prefix('a');
     expect(prefix.displayString(), "import 'src/f.dart' as a;");
diff --git a/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart b/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
index bdfa36a..b15806d 100644
--- a/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
+++ b/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
@@ -10,7 +10,7 @@
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/type_schema.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/source.dart';
 import 'package:path/path.dart' show toUri;
 import 'package:test/test.dart';
@@ -600,7 +600,7 @@
     if (expectError) {
       expect(
         listener.diagnostics.map((e) => e.diagnosticCode).toList(),
-        [CompileTimeErrorCode.couldNotInfer],
+        [diag.couldNotInfer],
         reason: 'expected exactly 1 could not infer error.',
       );
     } else {
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 470ad22..28ea131 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
@@ -6,11 +6,10 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 import 'package:analyzer/src/dart/micro/utils.dart';
-import 'package:analyzer/src/error/codes.dart';
-import 'package:linter/src/lint_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
+import 'package:linter/src/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -119,9 +118,9 @@
     package:dart.test/b.dart
     package:dart.test/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12]
 ''');
 
     // Without changes we refresh nothing.
@@ -201,9 +200,9 @@
     package:dart.test/b.dart
     package:dart.test/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12]
 ''');
 
     // We already know a.dart, refresh nothing.
@@ -283,9 +282,9 @@
     package:dart.test/b.dart
     package:dart.test/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12]
 ''');
 
     // Change a.dart, discard data for a.dart and c.dart, but not b.dart
@@ -331,9 +330,9 @@
   hasElement
     package:dart.test/b.dart
 unlinkedUnitStore
-  1: [k01, k06, k07, k08, k09, k10]
+  1: [k01, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k01, k04, k06, k07, k08, k09, k10, k11]
+  1: [k01, k04, k06, k07, k08, k09, k10, k11, k12]
 ''');
 
     // Resolve, read again a.dart and c.dart
@@ -343,17 +342,17 @@
   /workspace/dart/test/lib/a.dart
     uri: package:dart.test/a.dart
     current
-      id: file_8
-      kind: library_8
+      id: file_9
+      kind: library_9
         libraryImports
           library_3 dart:core synthetic
-        fileKinds: library_8
+        fileKinds: library_9
         cycle_4
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_0
           users: cycle_5
-      referencingFiles: file_9
+      referencingFiles: file_10
       unlinkedKey: k00
     unlinkedGet: []
     unlinkedPut: [k00, k00]
@@ -370,23 +369,23 @@
           libraries: library_1
           apiSignature_1
           users: cycle_5
-      referencingFiles: file_9
+      referencingFiles: file_10
       unlinkedKey: k01
     unlinkedGet: []
     unlinkedPut: [k01]
   /workspace/dart/test/lib/c.dart
     uri: package:dart.test/c.dart
     current
-      id: file_9
-      kind: library_9
+      id: file_10
+      kind: library_10
         libraryImports
-          library_8
+          library_9
           library_1
           library_3 dart:core synthetic
-        fileKinds: library_9
+        fileKinds: library_10
         cycle_5
           dependencies: cycle_1 cycle_4 dart:core
-          libraries: library_9
+          libraries: library_10
           apiSignature_2
       unlinkedKey: k02
     unlinkedGet: []
@@ -413,9 +412,9 @@
     package:dart.test/b.dart
     package:dart.test/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12]
 ''');
   }
 
@@ -430,9 +429,7 @@
 ''');
 
     result = await resolveFile(b);
-    assertErrorsInResolvedUnit(result, [
-      error(CompileTimeErrorCode.undefinedClass, 29, 1),
-    ]);
+    assertErrorsInResolvedUnit(result, [error(diag.undefinedClass, 29, 1)]);
 
     newFile(a.path, r'''
 class A {}
@@ -460,9 +457,7 @@
 ''');
 
     result = await resolveFile(b);
-    assertErrorsInResolvedUnit(result, [
-      error(CompileTimeErrorCode.assignmentToFinal, 36, 3),
-    ]);
+    assertErrorsInResolvedUnit(result, [error(diag.assignmentToFinal, 36, 3)]);
 
     newFile(a.path, r'''
 class A {
@@ -487,9 +482,7 @@
 ''');
 
     result = await resolveFile(a);
-    assertErrorsInResolvedUnit(result, [
-      error(CompileTimeErrorCode.undefinedFunction, 24, 1),
-    ]);
+    assertErrorsInResolvedUnit(result, [error(diag.undefinedFunction, 24, 1)]);
 
     // Update a.dart, and notify the resolver. We need this to have at least
     // one change, so that we decided to rebuild the library summary.
@@ -578,9 +571,9 @@
   hasElement
     package:dart.test/a.dart
 unlinkedUnitStore
-  1: [k00, k01, k03, k04, k05, k06, k07]
+  1: [k00, k01, k03, k04, k05, k06, k07, k08]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09]
 ''');
 
     // Change b.dart, discard both b.dart and a.dart
@@ -601,9 +594,9 @@
     put: [k02]
 elementFactory
 unlinkedUnitStore
-  1: [k03, k04, k05, k06, k07]
-byteStore
   1: [k03, k04, k05, k06, k07, k08]
+byteStore
+  1: [k03, k04, k05, k06, k07, k08, k09]
 ''');
 
     // Resolve, read a.dart and b.dart
@@ -613,16 +606,16 @@
   /workspace/dart/test/lib/a.dart
     uri: package:dart.test/a.dart
     current
-      id: file_7
-      kind: library_7
+      id: file_8
+      kind: library_8
         libraryImports
           library_2 dart:core synthetic
         partIncludes
-          partOfUriKnown_8
-        fileKinds: library_7 partOfUriKnown_8
+          partOfUriKnown_9
+        fileKinds: library_8 partOfUriKnown_9
         cycle_2
           dependencies: dart:core
-          libraries: library_7
+          libraries: library_8
           apiSignature_0
       unlinkedKey: k00
     unlinkedGet: []
@@ -630,11 +623,11 @@
   /workspace/dart/test/lib/b.dart
     uri: package:dart.test/b.dart
     current
-      id: file_8
-      kind: partOfUriKnown_8
-        uriFile: file_7
-        library: library_7
-      referencingFiles: file_7
+      id: file_9
+      kind: partOfUriKnown_9
+        uriFile: file_8
+        library: library_8
+      referencingFiles: file_8
       unlinkedKey: k01
     unlinkedGet: []
     unlinkedPut: [k01, k01]
@@ -648,9 +641,9 @@
   hasElement
     package:dart.test/a.dart
 unlinkedUnitStore
-  1: [k00, k01, k03, k04, k05, k06, k07]
+  1: [k00, k01, k03, k04, k05, k06, k07, k08]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09]
 ''');
   }
 
@@ -736,9 +729,9 @@
     package:dart.test/a.dart
     package:dart.test/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k05, k06, k07, k08, k09]
+  1: [k00, k01, k02, k05, k06, k07, k08, k09, k10]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
 ''');
 
     // Should invalidate a.dart, b.dart, c.dart
@@ -766,9 +759,9 @@
     put: [k04]
 elementFactory
 unlinkedUnitStore
-  1: [k05, k06, k07, k08, k09]
-byteStore
   1: [k05, k06, k07, k08, k09, k10]
+byteStore
+  1: [k05, k06, k07, k08, k09, k10, k11]
 ''');
 
     // Read again a.dart, b.dart, c.dart
@@ -778,45 +771,45 @@
   /workspace/dart/test/lib/a.dart
     uri: package:dart.test/a.dart
     current
-      id: file_8
-      kind: library_8
+      id: file_9
+      kind: library_9
         libraryImports
           library_3 dart:core synthetic
         partIncludes
-          partOfUriKnown_9
-        fileKinds: library_8 partOfUriKnown_9
+          partOfUriKnown_10
+        fileKinds: library_9 partOfUriKnown_10
         cycle_3
           dependencies: dart:core
-          libraries: library_8
+          libraries: library_9
           apiSignature_0
           users: cycle_4
-      referencingFiles: file_10
+      referencingFiles: file_11
       unlinkedKey: k00
     unlinkedGet: []
     unlinkedPut: [k00, k00]
   /workspace/dart/test/lib/b.dart
     uri: package:dart.test/b.dart
     current
-      id: file_9
-      kind: partOfUriKnown_9
-        uriFile: file_8
-        library: library_8
-      referencingFiles: file_8
+      id: file_10
+      kind: partOfUriKnown_10
+        uriFile: file_9
+        library: library_9
+      referencingFiles: file_9
       unlinkedKey: k01
     unlinkedGet: []
     unlinkedPut: [k01, k01]
   /workspace/dart/test/lib/c.dart
     uri: package:dart.test/c.dart
     current
-      id: file_10
-      kind: library_10
+      id: file_11
+      kind: library_11
         libraryImports
-          library_8
+          library_9
           library_3 dart:core synthetic
-        fileKinds: library_10
+        fileKinds: library_11
         cycle_4
           dependencies: cycle_3 dart:core
-          libraries: library_10
+          libraries: library_11
           apiSignature_1
       unlinkedKey: k02
     unlinkedGet: []
@@ -837,9 +830,9 @@
     package:dart.test/a.dart
     package:dart.test/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k05, k06, k07, k08, k09]
+  1: [k00, k01, k02, k05, k06, k07, k08, k09, k10]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
 ''');
   }
 }
@@ -858,7 +851,7 @@
 num a = 0;
 int b = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 19, 1)],
+      [error(diag.invalidAssignment, 19, 1)],
     );
   }
 
@@ -874,7 +867,7 @@
 num a = 0;
 int b = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 19, 1)],
+      [error(diag.invalidAssignment, 19, 1)],
     );
   }
 
@@ -898,7 +891,7 @@
 num a = 0;
 int b = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 19, 1)],
+      [error(diag.invalidAssignment, 19, 1)],
     );
   }
 
@@ -922,7 +915,7 @@
 num a = 0;
 int b = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 19, 1)],
+      [error(diag.invalidAssignment, 19, 1)],
     );
   }
 
@@ -940,7 +933,7 @@
   a;
 }
 ''',
-      [error(LinterLintCode.omitLocalVariableTypes, 11, 3)],
+      [error(diag.omitLocalVariableTypes, 11, 3)],
     );
   }
 
@@ -990,9 +983,9 @@
   hasElement
     package:dart.test/a.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08]
 ''');
 
     fileResolver.dispose();
@@ -1011,7 +1004,7 @@
     put: [k01]
 elementFactory
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
 ''');
   }
@@ -1047,7 +1040,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.returnOfInvalidTypeFromFunction,
+          diag.returnOfInvalidTypeFromFunction,
           40,
           4,
           messageContains: ["'String'", 'String?'],
@@ -1372,7 +1365,7 @@
     expect(result.path, convertPath('/workspace/dart/test/lib/test.dart'));
     expect(result.uri.toString(), 'package:dart.test/test.dart');
     assertErrorsInList(result.diagnostics, [
-      error(CompileTimeErrorCode.undefinedIdentifier, 8, 1),
+      error(diag.undefinedIdentifier, 8, 1),
     ]);
     expect(result.lineInfo.lineStarts, [0, 11, 24]);
   }
@@ -1396,7 +1389,7 @@
 
     var errorsResult = await fileResolver.getErrors2(path: a.path);
     assertErrorsInList(errorsResult.diagnostics, [
-      error(ParserErrorCode.expectedToken, 8, 2),
+      error(diag.expectedToken, 8, 2),
     ]);
   }
 
@@ -1412,7 +1405,7 @@
 
     var errorsResult = await fileResolver.getErrors2(path: b.path);
     assertErrorsInList(errorsResult.diagnostics, [
-      error(ParserErrorCode.expectedToken, 26, 2),
+      error(diag.expectedToken, 26, 2),
     ]);
   }
 
@@ -1574,9 +1567,9 @@
   hasReader
     package:dart.test/a.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 ''');
 
     await fileResolver.getLibraryByUri2(uriStr: 'package:dart.test/a.dart');
@@ -1609,9 +1602,9 @@
   hasReader
     package:dart.test/a.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 ''');
 
     await fileResolver.linkLibraries2(path: b.path);
@@ -1634,26 +1627,26 @@
           libraries: library_0
           apiSignature_0
           users: cycle_2
-      referencingFiles: file_6
+      referencingFiles: file_7
       unlinkedKey: k00
     unlinkedGet: []
     unlinkedPut: [k00]
   /workspace/dart/test/lib/b.dart
     uri: package:dart.test/b.dart
     current
-      id: file_6
-      kind: library_6
+      id: file_7
+      kind: library_7
         libraryImports
           library_0
           library_1 dart:core synthetic
-        fileKinds: library_6
+        fileKinds: library_7
         cycle_2
           dependencies: cycle_0 dart:core
-          libraries: library_6
+          libraries: library_7
           apiSignature_1
-      unlinkedKey: k07
+      unlinkedKey: k08
     unlinkedGet: []
-    unlinkedPut: [k07]
+    unlinkedPut: [k08]
 libraryCycles
   /workspace/dart/test/lib/a.dart
     current: cycle_0
@@ -1662,18 +1655,18 @@
     put: [k01, k01]
   /workspace/dart/test/lib/b.dart
     current: cycle_2
-      key: k08
-    get: [k08]
-    put: [k08]
+      key: k09
+    get: [k09]
+    put: [k09]
 elementFactory
   hasElement
     package:dart.test/a.dart
   hasReader
     package:dart.test/b.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06, k07]
+  1: [k00, k02, k03, k04, k05, k06, k07, k08]
 byteStore
-  1: [k00, k02, k03, k04, k05, k06, k07]
+  1: [k00, k02, k03, k04, k05, k06, k07, k08]
 ''');
 
     var b_library = await fileResolver.getLibraryByUri2(
@@ -1702,26 +1695,26 @@
           libraries: library_0
           apiSignature_0
           users: cycle_2
-      referencingFiles: file_6
+      referencingFiles: file_7
       unlinkedKey: k00
     unlinkedGet: []
     unlinkedPut: [k00]
   /workspace/dart/test/lib/b.dart
     uri: package:dart.test/b.dart
     current
-      id: file_6
-      kind: library_6
+      id: file_7
+      kind: library_7
         libraryImports
           library_0
           library_1 dart:core synthetic
-        fileKinds: library_6
+        fileKinds: library_7
         cycle_2
           dependencies: cycle_0 dart:core
-          libraries: library_6
+          libraries: library_7
           apiSignature_1
-      unlinkedKey: k07
+      unlinkedKey: k08
     unlinkedGet: []
-    unlinkedPut: [k07]
+    unlinkedPut: [k08]
 libraryCycles
   /workspace/dart/test/lib/a.dart
     current: cycle_0
@@ -1730,9 +1723,9 @@
     put: [k01, k01]
   /workspace/dart/test/lib/b.dart
     current: cycle_2
-      key: k08
-    get: [k08]
-    put: [k08]
+      key: k09
+    get: [k09]
+    put: [k09]
 elementFactory
   hasElement
     package:dart.test/a.dart
@@ -1740,9 +1733,9 @@
   hasReader
     package:dart.test/b.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06, k07]
+  1: [k00, k02, k03, k04, k05, k06, k07, k08]
 byteStore
-  1: [k00, k02, k03, k04, k05, k06, k07]
+  1: [k00, k02, k03, k04, k05, k06, k07, k08]
 ''');
   }
 
@@ -1786,16 +1779,16 @@
   hasReader
     package:dart.test/test.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 ''');
 
     var result = await getTestErrors();
     expect(result.path, testFile.path);
     expect(result.uri.toString(), 'package:dart.test/test.dart');
     assertErrorsInList(result.diagnostics, [
-      error(CompileTimeErrorCode.undefinedIdentifier, 8, 1),
+      error(diag.undefinedIdentifier, 8, 1),
     ]);
     expect(result.lineInfo.lineStarts, [0, 11, 24]);
 
@@ -1829,9 +1822,9 @@
   hasReader
     package:dart.test/test.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 ''');
   }
 
@@ -1989,9 +1982,9 @@
     package:dart.aaa/b.dart
     package:dart.aaa/c.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k06, k07, k08, k09, k10]
+  1: [k00, k01, k02, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12]
 ''');
 
     fileResolver.removeFilesNotNecessaryForAnalysisOf([c.path]);
@@ -2055,9 +2048,9 @@
     package:dart.aaa/a.dart
     package:dart.aaa/c.dart
 unlinkedUnitStore
-  1: [k00, k02, k06, k07, k08, k09, k10]
+  1: [k00, k02, k06, k07, k08, k09, k10, k11]
 byteStore
-  1: [k00, k02, k03, k05, k06, k07, k08, k09, k10, k11]
+  1: [k00, k02, k03, k05, k06, k07, k08, k09, k10, k11, k12]
 ''');
   }
 
@@ -2232,9 +2225,9 @@
     package:dart.aaa/e.dart
     package:dart.aaa/f.dart
 unlinkedUnitStore
-  1: [k00, k01, k02, k03, k04, k05, k12, k13, k14, k15, k16]
+  1: [k00, k01, k02, k03, k04, k05, k12, k13, k14, k15, k16, k17]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, k15, k16, k17]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, k14, k15, k16, k17, k18]
 ''');
 
     fileResolver.removeFilesNotNecessaryForAnalysisOf([d.path, f.path]);
@@ -2349,9 +2342,9 @@
     package:dart.aaa/d.dart
     package:dart.aaa/f.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k05, k12, k13, k14, k15, k16]
+  1: [k00, k02, k03, k05, k12, k13, k14, k15, k16, k17]
 byteStore
-  1: [k00, k02, k03, k05, k06, k08, k09, k11, k12, k13, k14, k15, k16, k17]
+  1: [k00, k02, k03, k05, k06, k08, k09, k11, k12, k13, k14, k15, k16, k17, k18]
 ''');
   }
 
@@ -2393,9 +2386,9 @@
   hasElement
     package:dart.aaa/a.dart
 unlinkedUnitStore
-  1: [k00, k02, k03, k04, k05, k06]
+  1: [k00, k02, k03, k04, k05, k06, k07]
 byteStore
-  1: [k00, k01, k02, k03, k04, k05, k06, k07]
+  1: [k00, k01, k02, k03, k04, k05, k06, k07, k08]
 ''');
   }
 
@@ -2583,7 +2576,7 @@
       r'''
 import 'foo:bar';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 9)],
+      [error(diag.uriDoesNotExist, 7, 9)],
     );
   }
 
@@ -2592,7 +2585,7 @@
       r'''
 import 'dart:math';
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/parser/class_test.dart b/pkg/analyzer/test/src/dart/parser/class_test.dart
index a41aa0d..805bfc5 100644
--- a/pkg/analyzer/test/src/dart/parser/class_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/class_test.dart
@@ -2,21 +2,397 @@
 // for details. 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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
+import '../resolution/node_text_expectations.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ClassDeclarationParserTest);
+    defineReflectiveTests(UpdateNodeTextExpectations);
   });
 }
 
 @reflectiveTest
 class ClassDeclarationParserTest extends ParserDiagnosticsTest {
-  test_augment_constructor_named() {
+  test_body_empty() {
+    var parseResult = parseStringWithErrors(r'''
+class A;
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleClassDeclaration;
+    assertParsedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: EmptyClassBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_named() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  factory named() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_factoryHead_named_const() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  const factory named() = B;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  factoryKeyword: factory
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: =
+  redirectedConstructor: ConstructorName
+    type: NamedType
+      name: B
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_new() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  factory new() {}
+}
+''');
+    parseResult.assertErrors([error(diag.factoryConstructorNewName, 20, 3)]);
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  name: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_factoryHead_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  factory () {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_factoryHead_unnamed_const() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  const factory () = B;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  factoryKeyword: factory
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: =
+  redirectedConstructor: ConstructorName
+    type: NamedType
+      name: B
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new named();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named_blockBody() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new named() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_newHead_named_const() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  const new named();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named_fieldInitializer() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new named() : x = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      fieldName: SimpleIdentifier
+        token: x
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_new() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new new();
+}
+''');
+    parseResult.assertErrors([error(diag.newConstructorNewName, 16, 3)]);
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  name: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new ();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed_blockBody() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new () {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_newHead_unnamed_const() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  const new ();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed_fieldInitializer() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new () : x = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      fieldName: SimpleIdentifier
+        token: x
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed_formalParameters() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  new (int x, {required String y});
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    parameter: SimpleFormalParameter
+      type: NamedType
+        name: int
+      name: x
+    leftDelimiter: {
+    parameter: DefaultFormalParameter
+      parameter: SimpleFormalParameter
+        requiredKeyword: required
+        type: NamedType
+          name: String
+        name: y
+    rightDelimiter: }
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_augment_named() {
     var parseResult = parseStringWithErrors(r'''
 augment class A {
   augment A.named();
@@ -24,30 +400,23 @@
 ''');
     parseResult.assertNoErrors();
 
-    var node = parseResult.findNode.singleClassDeclaration;
+    var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
-ClassDeclaration
+ConstructorDeclaration
   augmentKeyword: augment
-  classKeyword: class
-  name: A
-  leftBracket: {
-  members
-    ConstructorDeclaration
-      augmentKeyword: augment
-      returnType: SimpleIdentifier
-        token: A
-      period: .
-      name: named
-      parameters: FormalParameterList
-        leftParenthesis: (
-        rightParenthesis: )
-      body: EmptyFunctionBody
-        semicolon: ;
-  rightBracket: }
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
 ''');
   }
 
-  test_constructor_external_fieldFormalParameter_optionalPositional() {
+  test_constructor_typeName_external_fieldFormalParameter_optionalPositional() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   final int f;
@@ -55,14 +424,14 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.externalConstructorWithFieldInitializers, 39, 4),
+      error(diag.externalConstructorWithFieldInitializers, 39, 4),
     ]);
 
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
   externalKeyword: external
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -82,7 +451,7 @@
 ''');
   }
 
-  test_constructor_external_fieldFormalParameter_requiredPositional() {
+  test_constructor_typeName_external_fieldFormalParameter_requiredPositional() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   final int f;
@@ -90,14 +459,14 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.externalConstructorWithFieldInitializers, 38, 4),
+      error(diag.externalConstructorWithFieldInitializers, 38, 4),
     ]);
 
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
   externalKeyword: external
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -111,7 +480,7 @@
 ''');
   }
 
-  test_constructor_external_fieldInitializer() {
+  test_constructor_typeName_external_fieldInitializer() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   final int f;
@@ -119,14 +488,14 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.externalConstructorWithInitializer, 40, 1),
+      error(diag.externalConstructorWithInitializer, 40, 1),
     ]);
 
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
   externalKeyword: external
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -144,21 +513,148 @@
 ''');
   }
 
-  test_constructor_formalParameter_functionTyped_const() {
+  test_constructor_typeName_factory_named() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  factory A.named() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_factory_named_withoutPrimaryConstructors() {
+    var parseResult = parseStringWithErrors(r'''
+// @dart = 3.10
+class A {
+  factory A.named() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_factory_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  factory A() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: A
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_factory_unnamed_withoutPrimaryConstructors() {
+    var parseResult = parseStringWithErrors(r'''
+// @dart = 3.10
+class A {
+  factory A() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: A
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_factory_unnamed_withoutPrimaryConstructors_notEnclosingClass() {
+    var parseResult = parseStringWithErrors(r'''
+// @dart = 3.10
+class A {
+  factory B() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: B
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_formalParameter_functionTyped_const() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   A(const int a(String x));
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 14, 5),
-      error(ParserErrorCode.functionTypedParameterVar, 14, 5),
+      error(diag.extraneousModifier, 14, 5),
+      error(diag.functionTypedParameterVar, 14, 5),
     ]);
 
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -179,20 +675,18 @@
 ''');
   }
 
-  test_constructor_formalParameter_functionTyped_final() {
+  test_constructor_typeName_formalParameter_functionTyped_final() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   A(final int a(String x));
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.functionTypedParameterVar, 14, 5),
-    ]);
+    parseResult.assertErrors([error(diag.functionTypedParameterVar, 14, 5)]);
 
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -214,20 +708,18 @@
 ''');
   }
 
-  test_constructor_formalParameter_simple_const() {
+  test_constructor_typeName_formalParameter_simple_const() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   A(const int a);
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 14, 5),
-    ]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 14, 5)]);
 
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -242,7 +734,7 @@
 ''');
   }
 
-  test_constructor_formalParameter_simple_final() {
+  test_constructor_typeName_formalParameter_simple_final() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   A(final int a);
@@ -253,7 +745,7 @@
     var node = parseResult.findNode.singleConstructorDeclaration;
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -268,8 +760,74 @@
 ''');
   }
 
+  test_constructor_typeName_named() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  A.named();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_named_missingName() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  A.();
+}
+''');
+    parseResult.assertErrors([error(diag.missingIdentifier, 14, 1)]);
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: <empty> <synthetic>
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+class A {
+  A();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: A
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
   test_nameWithTypeParameters_hasTypeParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A<T, U> {}
 ''');
@@ -293,35 +851,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-class A<T, U> {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleClassDeclaration;
-      assertParsedNodeText(node, r'''
-ClassDeclaration
-  classKeyword: class
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-      TypeParameter
-        name: U
-    rightBracket: >
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_nameWithTypeParameters_noTypeParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A {}
 ''');
@@ -337,27 +869,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-class A {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleClassDeclaration;
-      assertParsedNodeText(node, r'''
-ClassDeclaration
-  classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_const_hasTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class const A<T, U>.named() {}
 ''');
@@ -391,7 +905,6 @@
   }
 
   test_primaryConstructor_const_hasTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class const A<T, U>() {}
 ''');
@@ -422,18 +935,16 @@
   }
 
   test_primaryConstructor_const_namedMixinApplication() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 mixin M {}
 class const C = Object with M;
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.constWithoutPrimaryConstructor, 17, 5),
+      error(diag.constWithoutPrimaryConstructor, 17, 5),
     ]);
   }
 
   test_primaryConstructor_const_noTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class const A.named() {}
 ''');
@@ -459,7 +970,6 @@
   }
 
   test_primaryConstructor_const_noTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class const A() {}
 ''');
@@ -482,12 +992,11 @@
   }
 
   test_primaryConstructor_const_typeName_noFormalParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class const A {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.constWithoutPrimaryConstructor, 6, 5),
+      error(diag.constWithoutPrimaryConstructor, 6, 5),
     ]);
 
     var node = parseResult.findNode.singleClassDeclaration;
@@ -503,7 +1012,6 @@
   }
 
   test_primaryConstructor_const_typeName_periodName_noFormalParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class const A.named {}
 ''');
@@ -530,7 +1038,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_namedOptional_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A({final int a = 0}) {}
 ''');
@@ -563,7 +1070,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_namedOptional_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A({var int a = 0}) {}
 ''');
@@ -596,7 +1102,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_namedRequired_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A({required final int a = 0}) {}
 ''');
@@ -630,7 +1135,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_namedRequired_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A({required var int a = 0}) {}
 ''');
@@ -664,7 +1168,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_positional_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A([final int a = 0]) {}
 ''');
@@ -697,7 +1200,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_positional_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A([var int a = 0]) {}
 ''');
@@ -730,11 +1232,10 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_functionTyped_const() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(const int a(String x)) {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.extraneousModifier, 8, 5)]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 8, 5)]);
 
     var node = parseResult.findNode.singleClassDeclaration;
     assertParsedNodeText(node, r'''
@@ -763,7 +1264,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_functionTyped_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(final int a(String x)) {}
 ''');
@@ -797,7 +1297,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_functionTyped_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(var int a(String x)) {}
 ''');
@@ -831,11 +1330,10 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_simple_const() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(const int a) {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.extraneousModifier, 8, 5)]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 8, 5)]);
 
     var node = parseResult.findNode.singleClassDeclaration;
     assertParsedNodeText(node, r'''
@@ -858,7 +1356,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_simple_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(final int a) {}
 ''');
@@ -885,7 +1382,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_simple_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(var int a) {}
 ''');
@@ -912,7 +1408,6 @@
   }
 
   test_primaryConstructor_fieldFormalParameter_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(final int this.a) {}
 ''');
@@ -941,7 +1436,6 @@
   }
 
   test_primaryConstructor_fieldFormalParameter_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(var int this.a) {}
 ''');
@@ -970,7 +1464,6 @@
   }
 
   test_primaryConstructor_notConst_hasTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A<T, U>.named() {}
 ''');
@@ -1003,7 +1496,6 @@
   }
 
   test_primaryConstructor_notConst_hasTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A<T, U>() {}
 ''');
@@ -1033,7 +1525,6 @@
   }
 
   test_primaryConstructor_notConst_noTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A.named() {}
 ''');
@@ -1058,7 +1549,6 @@
   }
 
   test_primaryConstructor_notConst_noTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A() {}
 ''');
@@ -1080,7 +1570,6 @@
   }
 
   test_primaryConstructor_superFormalParameter_final_namedType() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(final int super.a) {}
 ''');
@@ -1110,11 +1599,10 @@
   }
 
   test_primaryConstructor_superFormalParameter_var_namedType() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 class A(var int super.a) {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.extraneousModifier, 8, 3)]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 8, 3)]);
 
     var node = parseResult.findNode.singleClassDeclaration;
     assertParsedNodeText(node, r'''
@@ -1138,15 +1626,111 @@
 ''');
   }
 
+  test_primaryConstructorBody_body_blockFunctionBody() {
+    var parseResult = parseStringWithErrors(r'''
+class A() {
+  this {
+    0;
+  }
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singlePrimaryConstructorBody;
+    assertParsedNodeText(node, r'''
+PrimaryConstructorBody
+  thisKeyword: this
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      statements
+        ExpressionStatement
+          expression: IntegerLiteral
+            literal: 0
+          semicolon: ;
+      rightBracket: }
+''');
+  }
+
+  test_primaryConstructorBody_comment() {
+    var parseResult = parseStringWithErrors(r'''
+class A() {
+  /// foo
+  /// bar
+  this;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singlePrimaryConstructorBody;
+    assertParsedNodeText(node, r'''
+PrimaryConstructorBody
+  documentationComment: Comment
+    tokens
+      /// foo
+      /// bar
+  thisKeyword: this
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_primaryConstructorBody_fieldInitializer() {
+    var parseResult = parseStringWithErrors(r'''
+class A() {
+  final int x;
+  this : x = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singlePrimaryConstructorBody;
+    assertParsedNodeText(node, r'''
+PrimaryConstructorBody
+  thisKeyword: this
+  colon: :
+  initializers
+    ConstructorFieldInitializer
+      fieldName: SimpleIdentifier
+        token: x
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_primaryConstructorBody_metadata() {
+    var parseResult = parseStringWithErrors(r'''
+class A() {
+  @deprecated
+  this;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singlePrimaryConstructorBody;
+    assertParsedNodeText(node, r'''
+PrimaryConstructorBody
+  metadata
+    Annotation
+      atSign: @
+      name: SimpleIdentifier
+        token: deprecated
+  thisKeyword: this
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
   test_setter_formalParameters_absent() {
     var parseResult = parseStringWithErrors(r'''
 class A {
   set foo {}
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.missingMethodParameters, 16, 3),
-    ]);
+    parseResult.assertErrors([error(diag.missingMethodParameters, 16, 3)]);
 
     var node = parseResult.findNode.singleMethodDeclaration;
     assertParsedNodeText(node, withOffsets: true, r'''
@@ -1172,7 +1756,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 16, 3),
+      error(diag.wrongNumberOfParametersForSetter, 16, 3),
     ]);
 
     var node = parseResult.findNode.singleMethodDeclaration;
@@ -1199,7 +1783,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 16, 3),
+      error(diag.wrongNumberOfParametersForSetter, 16, 3),
     ]);
 
     var node = parseResult.findNode.singleMethodDeclaration;
@@ -1226,7 +1810,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 16, 3),
+      error(diag.wrongNumberOfParametersForSetter, 16, 3),
     ]);
 
     var node = parseResult.findNode.singleMethodDeclaration;
@@ -1253,7 +1837,7 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 16, 3),
+      error(diag.wrongNumberOfParametersForSetter, 16, 3),
     ]);
 
     var node = parseResult.findNode.singleMethodDeclaration;
diff --git a/pkg/analyzer/test/src/dart/parser/doc_comment_test.dart b/pkg/analyzer/test/src/dart/parser/doc_comment_test.dart
index 5d7431f..e9a9013 100644
--- a/pkg/analyzer/test/src/dart/parser/doc_comment_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/doc_comment_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -55,7 +54,7 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingBrace, 73, 1),
+      error(diag.docDirectiveMissingClosingBrace, 73, 1),
     ]);
 
     var node = parseResult.findNode.comment('animation');
@@ -87,7 +86,7 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingBrace, 68, 1),
+      error(diag.docDirectiveMissingClosingBrace, 68, 1),
     ]);
 
     var node = parseResult.findNode.comment('animation');
@@ -522,7 +521,7 @@
 /// @docImport 'dart:html'
 class A {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 15, 11)]);
+    parseResult.assertErrors([error(diag.expectedToken, 15, 11)]);
 
     var node = parseResult.findNode.comment('docImport');
     assertParsedNodeText(node, r'''
@@ -546,10 +545,10 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedToken, 8, 6),
-      error(ParserErrorCode.expectedStringLiteral, 15, 4),
-      error(ParserErrorCode.missingConstFinalVarOrType, 15, 4),
-      error(ParserErrorCode.expectedToken, 15, 4),
+      error(diag.expectedToken, 8, 6),
+      error(diag.expectedStringLiteral, 15, 4),
+      error(diag.missingConstFinalVarOrType, 15, 4),
+      error(diag.expectedToken, 15, 4),
     ]);
 
     var node = parseResult.findNode.comment('docImport');
@@ -631,8 +630,8 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedToken, 15, 11),
-      error(ScannerErrorCode.unterminatedStringLiteral, 17, 1),
+      error(diag.expectedToken, 15, 11),
+      error(diag.unterminatedStringLiteral, 17, 1),
     ]);
 
     var node = parseResult.findNode.comment('docImport');
@@ -723,7 +722,7 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingOpeningTag, 26, 15),
+      error(diag.docDirectiveMissingOpeningTag, 26, 15),
     ]);
 
     var node = parseResult.findNode.comment('endtemplate');
@@ -1577,7 +1576,7 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingTag, 26, 17),
+      error(diag.docDirectiveMissingClosingTag, 26, 17),
     ]);
 
     var node = parseResult.findNode.comment('template name');
@@ -1609,8 +1608,8 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingTag, 26, 17),
-      error(WarningCode.docDirectiveMissingClosingTag, 62, 18),
+      error(diag.docDirectiveMissingClosingTag, 26, 17),
+      error(diag.docDirectiveMissingClosingTag, 62, 18),
     ]);
 
     var node = parseResult.findNode.comment('template name2');
@@ -1649,7 +1648,7 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingTag, 26, 17),
+      error(diag.docDirectiveMissingClosingTag, 26, 17),
     ]);
 
     var node = parseResult.findNode.comment('template name');
@@ -1692,8 +1691,8 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingTag, 62, 15),
-      error(WarningCode.docDirectiveMissingOpeningTag, 110, 19),
+      error(diag.docDirectiveMissingClosingTag, 62, 15),
+      error(diag.docDirectiveMissingOpeningTag, 110, 19),
     ]);
 
     var node = parseResult.findNode.comment('template name');
@@ -1772,7 +1771,7 @@
 /// {@yotube 123}
 class A {}
 ''');
-    parseResult.assertErrors([error(WarningCode.docDirectiveUnknown, 28, 6)]);
+    parseResult.assertErrors([error(diag.docDirectiveUnknown, 28, 6)]);
 
     var node = parseResult.findNode.comment('yotube');
     assertParsedNodeText(node, r'''
@@ -1817,7 +1816,7 @@
 class A {}
 ''');
     parseResult.assertErrors([
-      error(WarningCode.docDirectiveMissingClosingBrace, 39, 1),
+      error(diag.docDirectiveMissingClosingBrace, 39, 1),
     ]);
 
     var node = parseResult.findNode.comment('youtube');
diff --git a/pkg/analyzer/test/src/dart/parser/enum_test.dart b/pkg/analyzer/test/src/dart/parser/enum_test.dart
index 7c7267b..d98ef78 100644
--- a/pkg/analyzer/test/src/dart/parser/enum_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/enum_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -29,12 +28,14 @@
 EnumDeclaration
   augmentKeyword: augment
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -51,13 +52,15 @@
 EnumDeclaration
   augmentKeyword: augment
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      augmentKeyword: augment
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        augmentKeyword: augment
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -74,21 +77,23 @@
 EnumDeclaration
   augmentKeyword: augment
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      augmentKeyword: augment
-      name: v
-      arguments: EnumConstantArguments
-        constructorSelector: ConstructorSelector
-          period: .
-          name: SimpleIdentifier
-            token: foo
-        argumentList: ArgumentList
-          leftParenthesis: (
-          rightParenthesis: )
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        augmentKeyword: augment
+        name: v
+        arguments: EnumConstantArguments
+          constructorSelector: ConstructorSelector
+            period: .
+            name: SimpleIdentifier
+              token: foo
+          argumentList: ArgumentList
+            leftParenthesis: (
+            rightParenthesis: )
+    rightBracket: }
 ''');
   }
 
@@ -105,22 +110,310 @@
 EnumDeclaration
   augmentKeyword: augment
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  semicolon: ;
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    semicolon: ;
+    members
+      MethodDeclaration
+        returnType: NamedType
+          name: void
+        name: foo
+        parameters: FormalParameterList
+          leftParenthesis: (
+          rightParenthesis: )
+        body: BlockFunctionBody
+          block: Block
+            leftBracket: {
+            rightBracket: }
+    rightBracket: }
+''');
+  }
+
+  test_constructor_factoryHead_named() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  factory named() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_factoryHead_named_const() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  const factory named() = B;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  factoryKeyword: factory
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: =
+  redirectedConstructor: ConstructorName
+    type: NamedType
+      name: B
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  factory () {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_factoryHead_unnamed_const() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  const factory () = B;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  factoryKeyword: factory
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: =
+  redirectedConstructor: ConstructorName
+    type: NamedType
+      name: B
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  new named();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named_const() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  const new named();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  new ();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed_const() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  const new ();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_factory_named() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  factory E.named() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: E
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_factory_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  factory E() {}
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: E
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: BlockFunctionBody
+    block: Block
+      leftBracket: {
+      rightBracket: }
+''');
+  }
+
+  test_constructor_typeName_named() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  E.named();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: E
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+enum E {
+  v;
+  E();
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: E
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
 ''');
   }
 
@@ -134,9 +427,11 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -150,10 +445,12 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  semicolon: ;
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    semicolon: ;
+    rightBracket: }
 ''');
   }
 
@@ -169,27 +466,28 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  semicolon: ;
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    semicolon: ;
+    members
+      MethodDeclaration
+        returnType: NamedType
+          name: void
+        name: foo
+        parameters: FormalParameterList
+          leftParenthesis: (
+          rightParenthesis: )
+        body: BlockFunctionBody
+          block: Block
+            leftBracket: {
+            rightBracket: }
+    rightBracket: }
 ''');
   }
 
   test_nameWithTypeParameters_hasTypeParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum E<T, U> {v}
 ''');
@@ -216,38 +514,9 @@
         name: v
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-enum E<T, U> {v}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleEnumDeclaration;
-      assertParsedNodeText(node, r'''
-EnumDeclaration
-  enumKeyword: enum
-  name: E
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-      TypeParameter
-        name: U
-    rightBracket: >
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
-''');
-    }
   }
 
   test_nameWithTypeParameters_noTypeParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum E {v}
 ''');
@@ -266,30 +535,9 @@
         name: v
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-enum E {v}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleEnumDeclaration;
-      assertParsedNodeText(node, r'''
-EnumDeclaration
-  enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_const_hasTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E<T, U>.named() {v}
 ''');
@@ -326,7 +574,6 @@
   }
 
   test_primaryConstructor_const_hasTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E<T, U>() {v}
 ''');
@@ -360,7 +607,6 @@
   }
 
   test_primaryConstructor_const_noTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E.named() {v}
 ''');
@@ -389,7 +635,6 @@
   }
 
   test_primaryConstructor_const_noTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E() {v}
 ''');
@@ -415,12 +660,11 @@
   }
 
   test_primaryConstructor_const_typeName_noFormalParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E {v}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.constWithoutPrimaryConstructor, 5, 5),
+      error(diag.constWithoutPrimaryConstructor, 5, 5),
     ]);
 
     var node = parseResult.findNode.singleEnumDeclaration;
@@ -439,7 +683,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_default_namedRequired_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E({required final int a = 0}) {v}
 ''');
@@ -477,7 +720,6 @@
   }
 
   test_primaryConstructor_declaringFormalParameter_simple_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum const E(final int a) {v}
 ''');
@@ -508,7 +750,6 @@
   }
 
   test_primaryConstructor_notConst_hasTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum E<T, U>.named() {v}
 ''');
@@ -544,7 +785,6 @@
   }
 
   test_primaryConstructor_notConst_hasTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum E<T, U>() {v}
 ''');
@@ -577,7 +817,6 @@
   }
 
   test_primaryConstructor_notConst_noTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum E.named() {v}
 ''');
@@ -605,7 +844,6 @@
   }
 
   test_primaryConstructor_notConst_noTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 enum E() {v}
 ''');
@@ -628,4 +866,22 @@
     rightBracket: }
 ''');
   }
+
+  test_primaryConstructorBody() {
+    var parseResult = parseStringWithErrors(r'''
+enum E() {
+  v;
+  this;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singlePrimaryConstructorBody;
+    assertParsedNodeText(node, r'''
+PrimaryConstructorBody
+  thisKeyword: this
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/parser/export_directive_test.dart b/pkg/analyzer/test/src/dart/parser/export_directive_test.dart
index 1428f09..4492d0a 100644
--- a/pkg/analyzer/test/src/dart/parser/export_directive_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/export_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -21,7 +21,7 @@
 export 'b.dart';
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.exportDirectiveAfterPartDirective, 15, 6),
+      error(diag.exportDirectiveAfterPartDirective, 15, 6),
     ]);
 
     var node = parseResult.findNode.singleExportDirective;
@@ -106,9 +106,7 @@
 part of 'a.dart';
 export 'b.dart';
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.nonPartOfDirectiveInPart, 33, 6),
-    ]);
+    parseResult.assertErrors([error(diag.nonPartOfDirectiveInPart, 33, 6)]);
 
     var node = parseResult.findNode.singleExportDirective;
     assertParsedNodeText(node, r'''
@@ -126,9 +124,7 @@
 export 'b.dart';
 part of 'a.dart';
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.nonPartOfDirectiveInPart, 32, 4),
-    ]);
+    parseResult.assertErrors([error(diag.nonPartOfDirectiveInPart, 32, 4)]);
 
     var node = parseResult.findNode.singleExportDirective;
     assertParsedNodeText(node, r'''
@@ -144,7 +140,7 @@
     var parseResult = parseStringWithErrors(r'''
 export 'a.dart'
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 7, 8)]);
+    parseResult.assertErrors([error(diag.expectedToken, 7, 8)]);
 
     var node = parseResult.findNode.singleExportDirective;
     assertParsedNodeText(node, r'''
@@ -160,9 +156,7 @@
     var parseResult = parseStringWithErrors(r'''
 export ;
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedStringLiteral, 7, 1),
-    ]);
+    parseResult.assertErrors([error(diag.expectedStringLiteral, 7, 1)]);
 
     var node = parseResult.findNode.singleExportDirective;
     assertParsedNodeText(node, r'''
@@ -179,8 +173,8 @@
 export
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedToken, 0, 6),
-      error(ParserErrorCode.expectedStringLiteral, 7, 0),
+      error(diag.expectedToken, 0, 6),
+      error(diag.expectedStringLiteral, 7, 0),
     ]);
 
     var node = parseResult.findNode.singleExportDirective;
diff --git a/pkg/analyzer/test/src/dart/parser/extension_test.dart b/pkg/analyzer/test/src/dart/parser/extension_test.dart
index 13e983c..44787d9 100644
--- a/pkg/analyzer/test/src/dart/parser/extension_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/extension_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -28,8 +27,9 @@
   augmentKeyword: augment
   extensionKeyword: extension
   name: E
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -51,8 +51,9 @@
       TypeParameter
         name: T
     rightBracket: >
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -61,7 +62,7 @@
 augment extension E on int {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.extensionAugmentationHasOnClause, 20, 2),
+      error(diag.extensionAugmentationHasOnClause, 20, 2),
     ]);
 
     var node = parseResult.findNode.singleExtensionDeclaration;
@@ -74,13 +75,13 @@
     onKeyword: on
     extendedType: NamedType
       name: int
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
   test_body_getter() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension E on int {
   int get foo => 0;
@@ -111,43 +112,9 @@
           semicolon: ;
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension E on int {
-  int get foo => 0;
-}
-''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleExtensionDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionDeclaration
-  extensionKeyword: extension
-  name: E
-  onClause: ExtensionOnClause
-    onKeyword: on
-    extendedType: NamedType
-      name: int
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: int
-      propertyKeyword: get
-      name: foo
-      body: ExpressionFunctionBody
-        functionDefinition: =>
-        expression: IntegerLiteral
-          literal: 0
-        semicolon: ;
-  rightBracket: }
-''');
-    }
   }
 
   test_body_method() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension E on int {
   void foo() {}
@@ -179,44 +146,9 @@
             rightBracket: }
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension E on int {
-  void foo() {}
-}
-''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleExtensionDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionDeclaration
-  extensionKeyword: extension
-  name: E
-  onClause: ExtensionOnClause
-    onKeyword: on
-    extendedType: NamedType
-      name: int
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
-''');
-    }
   }
 
   test_body_setter() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension E on int {
   set foo(int _) {}
@@ -251,42 +183,33 @@
             rightBracket: }
     rightBracket: }
 ''');
+  }
 
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension E on int {
-  set foo(int _) {}
+  test_primaryConstructorBody() {
+    var parseResult = parseStringWithErrors(r'''
+extension A on int {
+  this;
 }
 ''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleExtensionDeclaration;
-      assertParsedNodeText(node, r'''
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleExtensionDeclaration;
+    assertParsedNodeText(node, r'''
 ExtensionDeclaration
   extensionKeyword: extension
-  name: E
+  name: A
   onClause: ExtensionOnClause
     onKeyword: on
     extendedType: NamedType
       name: int
-  leftBracket: {
-  members
-    MethodDeclaration
-      propertyKeyword: set
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: SimpleFormalParameter
-          type: NamedType
-            name: int
-          name: _
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    members
+      PrimaryConstructorBody
+        thisKeyword: this
+        body: EmptyFunctionBody
+          semicolon: ;
+    rightBracket: }
 ''');
-    }
   }
 }
diff --git a/pkg/analyzer/test/src/dart/parser/extension_type_test.dart b/pkg/analyzer/test/src/dart/parser/extension_type_test.dart
index e0df667..749a4cd 100644
--- a/pkg/analyzer/test/src/dart/parser/extension_type_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/extension_type_test.dart
@@ -2,15 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
+import '../resolution/node_text_expectations.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionTypeDeclarationParserTest);
+    defineReflectiveTests(UpdateNodeTextExpectations);
   });
 }
 
@@ -28,33 +29,424 @@
   augmentKeyword: augment
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+''');
+  }
+
+  test_body_empty() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it);
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleExtensionTypeDeclaration;
+    assertParsedNodeText(node, r'''
+ExtensionTypeDeclaration
+  extensionKeyword: extension
+  typeKeyword: type
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: EmptyClassBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_named() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  factory named() => A(0);
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  name: named
+  parameters: FormalParameterList
     leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
     rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: MethodInvocation
+      methodName: SimpleIdentifier
+        token: A
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          IntegerLiteral
+            literal: 0
+        rightParenthesis: )
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_named_const() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  const factory named() = B;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  factoryKeyword: factory
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: =
+  redirectedConstructor: ConstructorName
+    type: NamedType
+      name: B
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  factory () => A(0);
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: MethodInvocation
+      methodName: SimpleIdentifier
+        token: A
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          IntegerLiteral
+            literal: 0
+        rightParenthesis: )
+    semicolon: ;
+''');
+  }
+
+  test_constructor_factoryHead_unnamed_const() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  const factory () = B;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  factoryKeyword: factory
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: =
+  redirectedConstructor: ConstructorName
+    type: NamedType
+      name: B
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  new named() : this.it = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      thisKeyword: this
+      period: .
+      fieldName: SimpleIdentifier
+        token: it
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_named_const() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  const new named() : this.it = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  newKeyword: new
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      thisKeyword: this
+      period: .
+      fieldName: SimpleIdentifier
+        token: it
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  new () : this.it = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      thisKeyword: this
+      period: .
+      fieldName: SimpleIdentifier
+        token: it
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_newHead_unnamed_const() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  const new () : this.it = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  constKeyword: const
+  newKeyword: new
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      thisKeyword: this
+      period: .
+      fieldName: SimpleIdentifier
+        token: it
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_factory_named() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  factory A.named() => A(0);
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: MethodInvocation
+      methodName: SimpleIdentifier
+        token: A
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          IntegerLiteral
+            literal: 0
+        rightParenthesis: )
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_factory_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  factory A() => A(0);
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  factoryKeyword: factory
+  typeName: SimpleIdentifier
+    token: A
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: MethodInvocation
+      methodName: SimpleIdentifier
+        token: A
+      argumentList: ArgumentList
+        leftParenthesis: (
+        arguments
+          IntegerLiteral
+            literal: 0
+        rightParenthesis: )
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_named() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  A.named() : this.it = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: A
+  period: .
+  name: named
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      thisKeyword: this
+      period: .
+      fieldName: SimpleIdentifier
+        token: it
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
+''');
+  }
+
+  test_constructor_typeName_unnamed() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  A() : this.it = 0;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleConstructorDeclaration;
+    assertParsedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: A
+  parameters: FormalParameterList
+    leftParenthesis: (
+    rightParenthesis: )
+  separator: :
+  initializers
+    ConstructorFieldInitializer
+      thisKeyword: this
+      period: .
+      fieldName: SimpleIdentifier
+        token: it
+      equals: =
+      expression: IntegerLiteral
+        literal: 0
+  body: EmptyFunctionBody
+    semicolon: ;
 ''');
   }
 
   test_error_fieldModifier_const() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(const int it) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 17, 5),
-    ]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 17, 5)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -67,41 +459,14 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(const int it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifier, 17, 5),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldModifier_covariant() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(covariant int it) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifierInPrimaryConstructor, 17, 9),
+      error(diag.extraneousModifierInPrimaryConstructor, 17, 9),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -109,7 +474,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -122,41 +487,14 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(covariant int it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifierInPrimaryConstructor, 17, 9),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldModifier_covariant_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(covariant final int it) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifierInPrimaryConstructor, 17, 9),
+      error(diag.extraneousModifierInPrimaryConstructor, 17, 9),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -164,7 +502,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -177,36 +515,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(covariant final int it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifierInPrimaryConstructor, 17, 9),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldModifier_final() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(final int it) {}
 ''');
@@ -217,7 +528,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -230,48 +541,21 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(final int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldModifier_final_language310() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 // @dart = 3.10
 extension type A(final int it) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.representationFieldModifier, 33, 5),
-    ]);
+    parseResult.assertErrors([error(diag.representationFieldModifier, 33, 5)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -284,50 +568,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-// @dart = 3.10
-extension type A(final int it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.representationFieldModifier, 33, 5),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldModifier_required() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(required int it) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 17, 8),
-    ]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 17, 8)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -340,49 +594,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(required int it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifier, 17, 8),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldModifier_static() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(static int it) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 17, 6),
-    ]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 17, 6)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -395,49 +620,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(static int it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifier, 17, 6),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_fieldName_asDeclaration() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int A) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.memberWithClassName, 21, 1),
-    ]);
+    parseResult.assertErrors([error(diag.memberWithClassName, 21, 1)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -450,43 +646,16 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int A) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.memberWithClassName, 21, 1),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: A
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_formalParameterModifier_covariant_method_instance() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int it) {
   void foo(covariant int a) {}
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifierInExtensionType, 38, 9),
+      error(diag.extraneousModifierInExtensionType, 38, 9),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -494,7 +663,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -524,62 +693,16 @@
             rightBracket: }
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int it) {
-  void foo(covariant int a) {}
-}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifierInExtensionType, 38, 9),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: SimpleFormalParameter
-          covariantKeyword: covariant
-          type: NamedType
-            name: int
-          name: a
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
-''');
-    }
   }
 
   test_error_formalParameterModifier_covariant_method_static() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int it) {
   static void foo(covariant int a) {}
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifierInExtensionType, 45, 9),
+      error(diag.extraneousModifierInExtensionType, 45, 9),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -587,7 +710,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -618,69 +741,20 @@
             rightBracket: }
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int it) {
-  static void foo(covariant int a) {}
-}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.extraneousModifierInExtensionType, 45, 9),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    MethodDeclaration
-      modifierKeyword: static
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: SimpleFormalParameter
-          covariantKeyword: covariant
-          type: NamedType
-            name: int
-          name: a
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
-''');
-    }
   }
 
   test_error_multipleFields() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int a, String b) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.multipleRepresentationFields, 22, 1),
-    ]);
+    parseResult.assertErrors([error(diag.multipleRepresentationFields, 22, 1)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -693,49 +767,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int a, String b) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.multipleRepresentationFields, 22, 1),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: a
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_noField() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A() {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedRepresentationField, 17, 1),
-    ]);
+    parseResult.assertErrors([error(diag.expectedRepresentationField, 17, 1)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -748,49 +793,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A() {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.expectedRepresentationField, 17, 1),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: <empty> <synthetic>
-    fieldName: <empty> <synthetic>
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_noFieldType() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(it) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedRepresentationType, 17, 2),
-    ]);
+    parseResult.assertErrors([error(diag.expectedRepresentationType, 17, 2)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -803,42 +819,15 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.expectedRepresentationType, 17, 2),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: <empty> <synthetic>
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_noFieldType_var() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(var it) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedRepresentationType, 17, 3),
-      error(ParserErrorCode.representationFieldModifier, 17, 3),
+      error(diag.expectedRepresentationType, 17, 3),
+      error(diag.representationFieldModifier, 17, 3),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -846,7 +835,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -859,50 +848,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(var it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.expectedRepresentationType, 17, 3),
-        error(ParserErrorCode.representationFieldModifier, 17, 3),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: <empty> <synthetic>
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_superFormalParameter() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(super.it) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedRepresentationField, 17, 5),
-    ]);
+    parseResult.assertErrors([error(diag.expectedRepresentationField, 17, 5)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -915,41 +874,14 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(super.it) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.expectedRepresentationField, 17, 5),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: <empty> <synthetic>
-    fieldName: <empty> <synthetic>
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_trailingComma() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int it,) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.representationFieldTrailingComma, 23, 1),
+      error(diag.representationFieldTrailingComma, 23, 1),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -957,7 +889,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -970,47 +902,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int it,) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.representationFieldTrailingComma, 23, 1),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_error_typeParameters_afterConstructorName() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A._<T>(T _) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedRepresentationField, 16, 0),
-      error(ParserErrorCode.missingPrimaryConstructorParameters, 17, 1),
-      error(ParserErrorCode.expectedExtensionTypeBody, 17, 1),
-      error(ParserErrorCode.expectedExecutable, 18, 1),
-      error(ParserErrorCode.missingConstFinalVarOrType, 19, 1),
-      error(ParserErrorCode.expectedToken, 19, 1),
-      error(ParserErrorCode.topLevelOperator, 20, 1),
+      error(diag.expectedRepresentationField, 16, 0),
+      error(diag.missingPrimaryConstructorParameters, 17, 1),
+      error(diag.expectedExtensionTypeBody, 17, 1),
+      error(diag.expectedExecutable, 18, 1),
+      error(diag.missingConstFinalVarOrType, 19, 1),
+      error(diag.expectedToken, 19, 1),
+      error(diag.topLevelOperator, 20, 1),
     ]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
@@ -1018,7 +923,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     constructorName: PrimaryConstructorName
       period: .
@@ -1034,41 +939,6 @@
     leftBracket: { <synthetic>
     rightBracket: } <synthetic>
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A._<T>(T _) {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.expectedRepresentationField, 16, 0),
-        error(ParserErrorCode.missingPrimaryConstructorParameters, 17, 1),
-        error(ParserErrorCode.expectedExtensionTypeBody, 17, 1),
-        error(ParserErrorCode.expectedExecutable, 18, 1),
-        error(ParserErrorCode.missingConstFinalVarOrType, 19, 1),
-        error(ParserErrorCode.expectedToken, 19, 1),
-        error(ParserErrorCode.topLevelOperator, 20, 1),
-      ]);
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    constructorName: RepresentationConstructorName
-      period: .
-      name: _
-    leftParenthesis: ( <synthetic>
-    fieldType: NamedType
-      name: <empty> <synthetic>
-    fieldName: <empty> <synthetic>
-    rightParenthesis: ) <synthetic>
-  leftBracket: { <synthetic>
-  rightBracket: } <synthetic>
-''');
-    }
   }
 
   test_featureNotEnabled() {
@@ -1078,9 +948,7 @@
 extension type B(int it) {}
 class C {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.experimentNotEnabled, 36, 4),
-    ]);
+    parseResult.assertErrors([error(diag.experimentNotEnabled, 36, 4)]);
 
     var node = parseResult.findNode.unit;
     assertParsedNodeText(node, r'''
@@ -1088,19 +956,22 @@
   declarations
     ClassDeclaration
       classKeyword: class
-      name: A
-      leftBracket: {
-      rightBracket: }
+      namePart: NameWithTypeParameters
+        typeName: A
+      body: BlockClassBody
+        leftBracket: {
+        rightBracket: }
     ClassDeclaration
       classKeyword: class
-      name: C
-      leftBracket: {
-      rightBracket: }
+      namePart: NameWithTypeParameters
+        typeName: C
+      body: BlockClassBody
+        leftBracket: {
+        rightBracket: }
 ''');
   }
 
   test_field_metadata() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(@foo int it) {}
 ''');
@@ -1111,7 +982,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -1129,39 +1000,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(@foo int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldMetadata
-      Annotation
-        atSign: @
-        name: SimpleIdentifier
-          token: foo
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_members_constructor() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int it) {
   A.named(this.it);
@@ -1174,7 +1015,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -1187,7 +1028,7 @@
     leftBracket: {
     members
       ConstructorDeclaration
-        returnType: SimpleIdentifier
+        typeName: SimpleIdentifier
           token: A
         period: .
         name: named
@@ -1202,51 +1043,9 @@
           semicolon: ;
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int it) {
-  A.named(this.it);
-}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    ConstructorDeclaration
-      returnType: SimpleIdentifier
-        token: A
-      period: .
-      name: named
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: FieldFormalParameter
-          thisKeyword: this
-          period: .
-          name: it
-        rightParenthesis: )
-      body: EmptyFunctionBody
-        semicolon: ;
-  rightBracket: }
-''');
-    }
   }
 
   test_members_field_instance() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int it) {
   final int foo = 0;
@@ -1259,7 +1058,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -1285,45 +1084,6 @@
         semicolon: ;
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int it) {
-  final int foo = 0;
-}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    FieldDeclaration
-      fields: VariableDeclarationList
-        keyword: final
-        type: NamedType
-          name: int
-        variables
-          VariableDeclaration
-            name: foo
-            equals: =
-            initializer: IntegerLiteral
-              literal: 0
-      semicolon: ;
-  rightBracket: }
-''');
-    }
   }
 
   test_members_field_static() {
@@ -1339,28 +1099,31 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    FieldDeclaration
-      staticKeyword: static
-      fields: VariableDeclarationList
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
         type: NamedType
           name: int
-        variables
-          VariableDeclaration
-            name: foo
-            equals: =
-            initializer: IntegerLiteral
-              literal: 0
-      semicolon: ;
-  rightBracket: }
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    members
+      FieldDeclaration
+        staticKeyword: static
+        fields: VariableDeclarationList
+          type: NamedType
+            name: int
+          variables
+            VariableDeclaration
+              name: foo
+              equals: =
+              initializer: IntegerLiteral
+                literal: 0
+        semicolon: ;
+    rightBracket: }
 ''');
   }
 
@@ -1377,26 +1140,29 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: int
-      propertyKeyword: get
-      name: foo
-      body: ExpressionFunctionBody
-        functionDefinition: =>
-        expression: IntegerLiteral
-          literal: 0
-        semicolon: ;
-  rightBracket: }
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    members
+      MethodDeclaration
+        returnType: NamedType
+          name: int
+        propertyKeyword: get
+        name: foo
+        body: ExpressionFunctionBody
+          functionDefinition: =>
+          expression: IntegerLiteral
+            literal: 0
+          semicolon: ;
+    rightBracket: }
 ''');
   }
 
@@ -1413,27 +1179,30 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    members
+      MethodDeclaration
+        returnType: NamedType
+          name: void
+        name: foo
+        parameters: FormalParameterList
+          leftParenthesis: (
+          rightParenthesis: )
+        body: BlockFunctionBody
+          block: Block
+            leftBracket: {
+            rightBracket: }
+    rightBracket: }
 ''');
   }
 
@@ -1450,30 +1219,33 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  members
-    MethodDeclaration
-      propertyKeyword: set
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: SimpleFormalParameter
-          type: NamedType
-            name: int
-          name: _
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    members
+      MethodDeclaration
+        propertyKeyword: set
+        name: foo
+        parameters: FormalParameterList
+          leftParenthesis: (
+          parameter: SimpleFormalParameter
+            type: NamedType
+              name: int
+            name: _
+          rightParenthesis: )
+        body: BlockFunctionBody
+          block: Block
+            leftBracket: {
+            rightBracket: }
+    rightBracket: }
 ''');
   }
 
@@ -1494,20 +1266,22 @@
         token: foo
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
   test_primaryConstructor_const_hasTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type const A<T, U>.named(int it) {}
 ''');
@@ -1518,7 +1292,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     constKeyword: const
     typeName: A
     typeParameters: TypeParameterList
@@ -1543,46 +1317,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type const A<T, U>.named(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  constKeyword: const
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-      TypeParameter
-        name: U
-    rightBracket: >
-  representation: RepresentationDeclaration
-    constructorName: RepresentationConstructorName
-      period: .
-      name: named
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_const_hasTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type const A<T, U>(int it) {}
 ''');
@@ -1593,7 +1330,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     constKeyword: const
     typeName: A
     typeParameters: TypeParameterList
@@ -1615,43 +1352,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type const A<T, U>(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  constKeyword: const
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-      TypeParameter
-        name: U
-    rightBracket: >
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_const_noTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type const A.named(int it) {}
 ''');
@@ -1662,7 +1365,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     constKeyword: const
     typeName: A
     constructorName: PrimaryConstructorName
@@ -1679,38 +1382,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type const A.named(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  constKeyword: const
-  name: A
-  representation: RepresentationDeclaration
-    constructorName: RepresentationConstructorName
-      period: .
-      name: named
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_const_noTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type const A(int it) {}
 ''');
@@ -1721,7 +1395,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     constKeyword: const
     typeName: A
     formalParameters: FormalParameterList
@@ -1735,48 +1409,20 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type const A(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  constKeyword: const
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_const_typeName_noFormalParameters() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type const E {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.missingPrimaryConstructor, 21, 1),
-    ]);
+    parseResult.assertErrors([error(diag.missingPrimaryConstructor, 21, 1)]);
 
     var node = parseResult.findNode.singleExtensionTypeDeclaration;
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     constKeyword: const
     typeName: E
     formalParameters: FormalParameterList
@@ -1793,20 +1439,17 @@
   }
 
   void test_primaryConstructor_missing() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type E {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.missingPrimaryConstructor, 15, 1),
-    ]);
+    parseResult.assertErrors([error(diag.missingPrimaryConstructor, 15, 1)]);
 
     var node = parseResult.findNode.extensionTypeDeclaration('E');
     assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension @0
   typeKeyword: type @10
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: E @15
     formalParameters: FormalParameterList
       leftParenthesis: ( @17 <synthetic>
@@ -1819,36 +1462,9 @@
     leftBracket: { @17
     rightBracket: } @18
 ''', withOffsets: true);
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type E {}
-''');
-      parseResult.assertErrors([
-        error(ParserErrorCode.missingPrimaryConstructor, 15, 1),
-      ]);
-
-      var node = parseResult.findNode.extensionTypeDeclaration('E');
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension @0
-  typeKeyword: type @10
-  name: E @15
-  representation: RepresentationDeclaration
-    leftParenthesis: ( @17 <synthetic>
-    fieldType: NamedType
-      name: <empty> @17 <synthetic>
-    fieldName: <empty> @17 <synthetic>
-    rightParenthesis: ) @17 <synthetic>
-  leftBracket: { @17
-  rightBracket: } @18
-''', withOffsets: true);
-    }
   }
 
   test_primaryConstructor_notConst_hasTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A<T, U>.named(int it) {}
 ''');
@@ -1859,7 +1475,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     typeParameters: TypeParameterList
       leftBracket: <
@@ -1883,45 +1499,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A<T, U>.named(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-      TypeParameter
-        name: U
-    rightBracket: >
-  representation: RepresentationDeclaration
-    constructorName: RepresentationConstructorName
-      period: .
-      name: named
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_notConst_hasTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A<T, U>(int it) {}
 ''');
@@ -1932,7 +1512,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     typeParameters: TypeParameterList
       leftBracket: <
@@ -1953,42 +1533,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A<T, U>(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-      TypeParameter
-        name: U
-    rightBracket: >
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_notConst_noTypeParameters_named() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A.named(int it) {}
 ''');
@@ -1999,7 +1546,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     constructorName: PrimaryConstructorName
       period: .
@@ -2015,37 +1562,9 @@
     leftBracket: {
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A.named(int it) {}
-''');
-      parseResult.assertNoErrors();
-
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
-ExtensionTypeDeclaration
-  extensionKeyword: extension
-  typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    constructorName: RepresentationConstructorName
-      period: .
-      name: named
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
-''');
-    }
   }
 
   test_primaryConstructor_notConst_noTypeParameters_unnamed() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 extension type A(int it) {}
 ''');
@@ -2056,7 +1575,7 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  namePart: PrimaryConstructorDeclaration
+  primaryConstructor: PrimaryConstructorDeclaration
     typeName: A
     formalParameters: FormalParameterList
       leftParenthesis: (
@@ -2069,30 +1588,39 @@
     leftBracket: {
     rightBracket: }
 ''');
+  }
 
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-extension type A(int it) {}
+  test_primaryConstructorBody() {
+    var parseResult = parseStringWithErrors(r'''
+extension type A(int it) {
+  this;
+}
 ''');
-      parseResult.assertNoErrors();
+    parseResult.assertNoErrors();
 
-      var node = parseResult.findNode.singleExtensionTypeDeclaration;
-      assertParsedNodeText(node, r'''
+    var node = parseResult.findNode.singleExtensionTypeDeclaration;
+    assertParsedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    members
+      PrimaryConstructorBody
+        thisKeyword: this
+        body: EmptyFunctionBody
+          semicolon: ;
+    rightBracket: }
 ''');
-    }
   }
 
   test_withImplementsClause() {
@@ -2106,13 +1634,15 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
   implementsClause: ImplementsClause
     implementsKeyword: implements
     interfaces
@@ -2120,8 +1650,9 @@
         name: B
       NamedType
         name: C
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -2136,21 +1667,24 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-    rightBracket: >
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-    fieldName: it
-    rightParenthesis: )
-  leftBracket: {
-  rightBracket: }
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+      rightBracket: >
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+        name: it
+      rightParenthesis: )
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/parser/import_directive_test.dart b/pkg/analyzer/test/src/dart/parser/import_directive_test.dart
index 64384c5..4d0c20d 100644
--- a/pkg/analyzer/test/src/dart/parser/import_directive_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/import_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -21,7 +21,7 @@
 import 'b.dart';
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.importDirectiveAfterPartDirective, 15, 6),
+      error(diag.importDirectiveAfterPartDirective, 15, 6),
     ]);
 
     var node = parseResult.findNode.singleImportDirective;
@@ -106,9 +106,7 @@
 part of 'a.dart';
 import 'b.dart';
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.nonPartOfDirectiveInPart, 33, 6),
-    ]);
+    parseResult.assertErrors([error(diag.nonPartOfDirectiveInPart, 33, 6)]);
 
     var node = parseResult.findNode.singleImportDirective;
     assertParsedNodeText(node, r'''
@@ -126,9 +124,7 @@
 import 'b.dart';
 part of 'a.dart';
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.nonPartOfDirectiveInPart, 32, 4),
-    ]);
+    parseResult.assertErrors([error(diag.nonPartOfDirectiveInPart, 32, 4)]);
 
     var node = parseResult.findNode.singleImportDirective;
     assertParsedNodeText(node, r'''
@@ -144,7 +140,7 @@
     var parseResult = parseStringWithErrors(r'''
 import 'a.dart'
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 7, 8)]);
+    parseResult.assertErrors([error(diag.expectedToken, 7, 8)]);
 
     var node = parseResult.findNode.singleImportDirective;
     assertParsedNodeText(node, r'''
@@ -160,9 +156,7 @@
     var parseResult = parseStringWithErrors(r'''
 import ;
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedStringLiteral, 7, 1),
-    ]);
+    parseResult.assertErrors([error(diag.expectedStringLiteral, 7, 1)]);
 
     var node = parseResult.findNode.singleImportDirective;
     assertParsedNodeText(node, r'''
@@ -179,8 +173,8 @@
 import
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedToken, 0, 6),
-      error(ParserErrorCode.expectedStringLiteral, 7, 0),
+      error(diag.expectedToken, 0, 6),
+      error(diag.expectedStringLiteral, 7, 0),
     ]);
 
     var node = parseResult.findNode.singleImportDirective;
diff --git a/pkg/analyzer/test/src/dart/parser/mixin_test.dart b/pkg/analyzer/test/src/dart/parser/mixin_test.dart
index 1966f62..30f9c19 100644
--- a/pkg/analyzer/test/src/dart/parser/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/mixin_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -17,7 +16,6 @@
 @reflectiveTest
 class MixinDeclarationParserTest extends ParserDiagnosticsTest {
   test_body_field() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 mixin M {
   static final int F = 0;
@@ -47,42 +45,9 @@
         semicolon: ;
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-mixin M {
-  static final int F = 0;
-}
-''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleMixinDeclaration;
-      assertParsedNodeText(node, r'''
-MixinDeclaration
-  mixinKeyword: mixin
-  name: M
-  leftBracket: {
-  members
-    FieldDeclaration
-      staticKeyword: static
-      fields: VariableDeclarationList
-        keyword: final
-        type: NamedType
-          name: int
-        variables
-          VariableDeclaration
-            name: F
-            equals: =
-            initializer: IntegerLiteral
-              literal: 0
-      semicolon: ;
-  rightBracket: }
-''');
-    }
   }
 
   test_body_getter() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 mixin M {
   int get foo => 0;
@@ -109,39 +74,9 @@
           semicolon: ;
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-mixin M {
-  int get foo => 0;
-}
-''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleMixinDeclaration;
-      assertParsedNodeText(node, r'''
-MixinDeclaration
-  mixinKeyword: mixin
-  name: M
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: int
-      propertyKeyword: get
-      name: foo
-      body: ExpressionFunctionBody
-        functionDefinition: =>
-        expression: IntegerLiteral
-          literal: 0
-        semicolon: ;
-  rightBracket: }
-''');
-    }
   }
 
   test_body_method() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 mixin M {
   void foo() {}
@@ -169,40 +104,9 @@
             rightBracket: }
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-mixin M {
-  void foo() {}
-}
-''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleMixinDeclaration;
-      assertParsedNodeText(node, r'''
-MixinDeclaration
-  mixinKeyword: mixin
-  name: M
-  leftBracket: {
-  members
-    MethodDeclaration
-      returnType: NamedType
-        name: void
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
-''');
-    }
   }
 
   test_body_setter() {
-    useDeclaringConstructorsAst = true;
     var parseResult = parseStringWithErrors(r'''
 mixin M {
   set foo(int _) {}
@@ -233,39 +137,6 @@
             rightBracket: }
     rightBracket: }
 ''');
-
-    {
-      useDeclaringConstructorsAst = false;
-      var parseResult = parseStringWithErrors(r'''
-mixin M {
-  set foo(int _) {}
-}
-''');
-      parseResult.assertNoErrors();
-      var node = parseResult.findNode.singleMixinDeclaration;
-      assertParsedNodeText(node, r'''
-MixinDeclaration
-  mixinKeyword: mixin
-  name: M
-  leftBracket: {
-  members
-    MethodDeclaration
-      propertyKeyword: set
-      name: foo
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: SimpleFormalParameter
-          type: NamedType
-            name: int
-          name: _
-        rightParenthesis: )
-      body: BlockFunctionBody
-        block: Block
-          leftBracket: {
-          rightBracket: }
-  rightBracket: }
-''');
-    }
   }
 
   test_constructor_named() {
@@ -274,9 +145,7 @@
   A.named();
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.mixinDeclaresConstructor, 12, 1),
-    ]);
+    parseResult.assertErrors([error(diag.mixinDeclaresConstructor, 12, 1)]);
 
     // Mixins cannot have constructors.
     // So, we don't put them into AST at all.
@@ -285,8 +154,33 @@
 MixinDeclaration
   mixinKeyword: mixin
   name: A
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+''');
+  }
+
+  test_primaryConstructorBody() {
+    var parseResult = parseStringWithErrors(r'''
+mixin A {
+  this;
+}
+''');
+    parseResult.assertNoErrors();
+
+    var node = parseResult.findNode.singleMixinDeclaration;
+    assertParsedNodeText(node, r'''
+MixinDeclaration
+  mixinKeyword: mixin
+  name: A
+  body: BlockClassBody
+    leftBracket: {
+    members
+      PrimaryConstructorBody
+        thisKeyword: this
+        body: EmptyFunctionBody
+          semicolon: ;
+    rightBracket: }
 ''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/parser/part_directive_test.dart b/pkg/analyzer/test/src/dart/parser/part_directive_test.dart
index cecaa22..c065b73 100644
--- a/pkg/analyzer/test/src/dart/parser/part_directive_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/part_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -54,9 +54,7 @@
 part of 'a.dart';
 part 'b.dart';
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.nonPartOfDirectiveInPart, 33, 4),
-    ]);
+    parseResult.assertErrors([error(diag.nonPartOfDirectiveInPart, 33, 4)]);
 
     var node = parseResult.findNode.singlePartDirective;
     assertParsedNodeText(node, r'''
@@ -74,9 +72,7 @@
 part 'b.dart';
 part of 'a.dart';
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.nonPartOfDirectiveInPart, 30, 4),
-    ]);
+    parseResult.assertErrors([error(diag.nonPartOfDirectiveInPart, 30, 4)]);
 
     var node = parseResult.findNode.singlePartDirective;
     assertParsedNodeText(node, r'''
@@ -92,7 +88,7 @@
     var parseResult = parseStringWithErrors(r'''
 part 'a.dart'
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 5, 8)]);
+    parseResult.assertErrors([error(diag.expectedToken, 5, 8)]);
 
     var node = parseResult.findNode.singlePartDirective;
     assertParsedNodeText(node, r'''
@@ -108,9 +104,7 @@
     var parseResult = parseStringWithErrors(r'''
 part ;
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedStringLiteral, 5, 1),
-    ]);
+    parseResult.assertErrors([error(diag.expectedStringLiteral, 5, 1)]);
 
     var node = parseResult.findNode.singlePartDirective;
     assertParsedNodeText(node, r'''
@@ -127,8 +121,8 @@
 part
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedToken, 0, 4),
-      error(ParserErrorCode.expectedStringLiteral, 5, 0),
+      error(diag.expectedToken, 0, 4),
+      error(diag.expectedStringLiteral, 5, 0),
     ]);
 
     var node = parseResult.findNode.singlePartDirective;
diff --git a/pkg/analyzer/test/src/dart/parser/part_of_directive_test.dart b/pkg/analyzer/test/src/dart/parser/part_of_directive_test.dart
index fe6abd2..7284710 100644
--- a/pkg/analyzer/test/src/dart/parser/part_of_directive_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/part_of_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -19,7 +19,7 @@
     var parseResult = parseStringWithErrors(r'''
 part of my.library;
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.partOfName, 8, 10)]);
+    parseResult.assertErrors([error(diag.partOfName, 8, 10)]);
 
     var node = parseResult.findNode.singlePartOfDirective;
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/parser/top_level_function_test.dart b/pkg/analyzer/test/src/dart/parser/top_level_function_test.dart
index d8d895c..f5badfc 100644
--- a/pkg/analyzer/test/src/dart/parser/top_level_function_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/top_level_function_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -152,9 +152,7 @@
     var parseResult = parseStringWithErrors(r'''
 set foo {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.missingFunctionParameters, 4, 3),
-    ]);
+    parseResult.assertErrors([error(diag.missingFunctionParameters, 4, 3)]);
 
     var node = parseResult.findNode.singleFunctionDeclaration;
     assertParsedNodeText(node, withOffsets: true, r'''
@@ -179,7 +177,7 @@
 set foo({a}) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 4, 3),
+      error(diag.wrongNumberOfParametersForSetter, 4, 3),
     ]);
 
     var node = parseResult.findNode.singleFunctionDeclaration;
@@ -205,7 +203,7 @@
 set foo([a]) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 4, 3),
+      error(diag.wrongNumberOfParametersForSetter, 4, 3),
     ]);
 
     var node = parseResult.findNode.singleFunctionDeclaration;
@@ -231,7 +229,7 @@
 set foo(a, b, c) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 4, 3),
+      error(diag.wrongNumberOfParametersForSetter, 4, 3),
     ]);
 
     var node = parseResult.findNode.singleFunctionDeclaration;
@@ -257,7 +255,7 @@
 set foo() {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.wrongNumberOfParametersForSetter, 4, 3),
+      error(diag.wrongNumberOfParametersForSetter, 4, 3),
     ]);
 
     var node = parseResult.findNode.singleFunctionDeclaration;
diff --git a/pkg/analyzer/test/src/dart/parser/type_alias_test.dart b/pkg/analyzer/test/src/dart/parser/type_alias_test.dart
index 6382758..1991108 100644
--- a/pkg/analyzer/test/src/dart/parser/type_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/type_alias_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -61,7 +61,7 @@
     var parseResult = parseStringWithErrors(r'''
 typedef = int;
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.missingIdentifier, 8, 1)]);
+    parseResult.assertErrors([error(diag.missingIdentifier, 8, 1)]);
 
     var node = parseResult.findNode.unit;
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/parser/variable_declaration_statement_test.dart b/pkg/analyzer/test/src/dart/parser/variable_declaration_statement_test.dart
index 984301d..0a23ebc 100644
--- a/pkg/analyzer/test/src/dart/parser/variable_declaration_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/parser/variable_declaration_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../diagnostics/parser_diagnostics.dart';
@@ -23,8 +23,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 27, 5),
-      error(ParserErrorCode.expectedToken, 27, 5),
+      error(diag.asyncKeywordUsedAsIdentifier, 27, 5),
+      error(diag.expectedToken, 27, 5),
     ]);
 
     var node = parseResult.findNode.singleBlock;
@@ -62,7 +62,7 @@
   await y.foo();
 }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 30, 1)]);
+    parseResult.assertErrors([error(diag.expectedToken, 30, 1)]);
 
     var node = parseResult.findNode.singleBlock;
     assertParsedNodeText(node, r'''
@@ -101,7 +101,7 @@
   bar();
 }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 21, 3)]);
+    parseResult.assertErrors([error(diag.expectedToken, 21, 3)]);
 
     var node = parseResult.findNode.singleBlock;
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/as_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/as_expression_test.dart
index cd2fe1e..bc0d19f 100644
--- a/pkg/analyzer/test/src/dart/resolution/as_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/as_expression_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -22,7 +21,7 @@
 const num a = 1.2;
 const int b = a as int;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 33, 8)],
+      [error(diag.constEvalThrowsException, 33, 8)],
     );
 
     var node = findNode.asExpression('as int');
@@ -74,7 +73,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 30, 5)],
+      [error(diag.missingAssignableSelector, 30, 5)],
     );
 
     var node = findNode.singleAsExpression;
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 6d8cded..f8f7f41 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -701,7 +700,7 @@
   a?.b[s] = null;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 121, 4)],
+      [error(diag.invalidAssignment, 121, 4)],
     );
 
     var node = findNode.assignment('= null');
@@ -836,8 +835,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 18, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 20, 1),
+        error(diag.undefinedIdentifier, 18, 1),
+        error(diag.undefinedIdentifier, 20, 1),
       ],
     );
 
@@ -882,8 +881,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedOperator, 26, 3),
-        error(CompileTimeErrorCode.undefinedIdentifier, 27, 1),
+        error(diag.undefinedOperator, 26, 3),
+        error(diag.undefinedIdentifier, 27, 1),
       ],
     );
 
@@ -931,7 +930,7 @@
   a[b] = c;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 73, 1)],
+      [error(diag.undefinedIdentifier, 73, 1)],
     );
 
     var assignment = findNode.assignment('a[b] = c');
@@ -978,8 +977,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingIdentifier, 30, 7),
-        error(CompileTimeErrorCode.undefinedOperator, 67, 3),
+        error(diag.missingIdentifier, 30, 7),
+        error(diag.undefinedOperator, 67, 3),
       ],
     );
   }
@@ -991,7 +990,7 @@
   a[0] += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 1)],
+      [error(diag.undefinedIdentifier, 13, 1)],
     );
 
     var node = findNode.singleAssignmentExpression;
@@ -1034,8 +1033,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingAssignableSelector, 27, 5),
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 27, 5),
+        error(diag.missingAssignableSelector, 27, 5),
+        error(diag.illegalAssignmentToNonAssignable, 27, 5),
       ],
     );
 
@@ -1067,8 +1066,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 35, 5),
-        error(ParserErrorCode.missingAssignableSelector, 35, 5),
+        error(diag.illegalAssignmentToNonAssignable, 35, 5),
+        error(diag.missingAssignableSelector, 35, 5),
       ],
     );
 
@@ -1113,8 +1112,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 35, 7),
-        error(ParserErrorCode.missingAssignableSelector, 35, 7),
+        error(diag.illegalAssignmentToNonAssignable, 35, 7),
+        error(diag.missingAssignableSelector, 35, 7),
       ],
     );
 
@@ -1163,12 +1162,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          29,
-          1,
-        ),
-        error(ParserErrorCode.expectedToken, 31, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 29, 1),
+        error(diag.expectedToken, 31, 1),
       ],
     );
 
@@ -1202,8 +1197,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 44, 7),
-        error(ParserErrorCode.missingAssignableSelector, 44, 7),
+        error(diag.illegalAssignmentToNonAssignable, 44, 7),
+        error(diag.missingAssignableSelector, 44, 7),
       ],
     );
 
@@ -1250,8 +1245,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 25, 3),
-        error(ParserErrorCode.missingAssignableSelector, 25, 3),
+        error(diag.illegalAssignmentToNonAssignable, 25, 3),
+        error(diag.missingAssignableSelector, 25, 3),
       ],
     );
 
@@ -1294,8 +1289,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 25, 3),
-        error(ParserErrorCode.missingAssignableSelector, 25, 3),
+        error(diag.illegalAssignmentToNonAssignable, 25, 3),
+        error(diag.missingAssignableSelector, 25, 3),
       ],
     );
 
@@ -1338,8 +1333,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 25, 3),
-        error(ParserErrorCode.missingAssignableSelector, 25, 3),
+        error(diag.illegalAssignmentToNonAssignable, 25, 3),
+        error(diag.missingAssignableSelector, 25, 3),
       ],
     );
 
@@ -1382,8 +1377,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 25, 3),
-        error(ParserErrorCode.missingAssignableSelector, 25, 3),
+        error(diag.illegalAssignmentToNonAssignable, 25, 3),
+        error(diag.missingAssignableSelector, 25, 3),
       ],
     );
 
@@ -1426,8 +1421,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 25, 3),
-        error(ParserErrorCode.missingAssignableSelector, 25, 3),
+        error(diag.illegalAssignmentToNonAssignable, 25, 3),
+        error(diag.missingAssignableSelector, 25, 3),
       ],
     );
 
@@ -1470,8 +1465,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 25, 3),
-        error(ParserErrorCode.missingAssignableSelector, 25, 3),
+        error(diag.illegalAssignmentToNonAssignable, 25, 3),
+        error(diag.missingAssignableSelector, 25, 3),
       ],
     );
 
@@ -1517,7 +1512,7 @@
   C = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 47, 1)],
+      [error(diag.ambiguousImport, 47, 1)],
     );
 
     var assignment = findNode.assignment('C = 0');
@@ -1553,7 +1548,7 @@
   C = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 25, 1)],
+      [error(diag.assignmentToType, 25, 1)],
     );
 
     var assignment = findNode.assignment('C = 0');
@@ -1752,7 +1747,7 @@
   a.x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 49, 1)],
+      [error(diag.assignmentToFinalNoSetter, 49, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -1805,7 +1800,7 @@
   a.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 46, 3)],
+      [error(diag.assignmentToFinalNoSetter, 46, 3)],
     );
 
     var node = findNode.singleAssignmentExpression;
@@ -1974,7 +1969,7 @@
   A.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 43, 3)],
+      [error(diag.assignmentToFinalNoSetter, 43, 3)],
     );
 
     var node = findNode.singleAssignmentExpression;
@@ -2276,7 +2271,7 @@
   A.x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 53, 1)],
+      [error(diag.assignmentToFinalNoSetter, 53, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -2403,7 +2398,7 @@
   a.b = c;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 18, 1)],
+      [error(diag.undefinedIdentifier, 18, 1)],
     );
 
     var assignment = findNode.assignment('a.b = c');
@@ -2444,10 +2439,7 @@
   a.b += c;
 }
 ''',
-      [
-        error(CompileTimeErrorCode.undefinedGetter, 27, 1),
-        error(CompileTimeErrorCode.undefinedSetter, 27, 1),
-      ],
+      [error(diag.undefinedGetter, 27, 1), error(diag.undefinedSetter, 27, 1)],
     );
 
     var assignment = findNode.assignment('a.b += c');
@@ -2817,7 +2809,7 @@
   a?.b.setter = null;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 103, 4)],
+      [error(diag.invalidAssignment, 103, 4)],
     );
 
     var node = findNode.assignment('= null');
@@ -2981,10 +2973,7 @@
   r.foo += 0;
 }
 ''',
-      [
-        error(CompileTimeErrorCode.undefinedGetter, 28, 3),
-        error(CompileTimeErrorCode.undefinedSetter, 28, 3),
-      ],
+      [error(diag.undefinedGetter, 28, 3), error(diag.undefinedSetter, 28, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3026,7 +3015,7 @@
   r.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 28, 3)],
+      [error(diag.undefinedSetter, 28, 3)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3072,7 +3061,7 @@
   r.foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 80, 3)],
+      [error(diag.undefinedGetter, 80, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3161,7 +3150,7 @@
   r.foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 80, 3)],
+      [error(diag.assignmentToFinalNoSetter, 80, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3207,7 +3196,7 @@
   r.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 80, 3)],
+      [error(diag.assignmentToFinalNoSetter, 80, 3)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3337,7 +3326,7 @@
   r.foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 40, 3)],
+      [error(diag.undefinedSetter, 40, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3379,7 +3368,7 @@
   r.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 40, 3)],
+      [error(diag.undefinedSetter, 40, 3)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3425,7 +3414,7 @@
   r.foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 104, 3)],
+      [error(diag.undefinedSetter, 104, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3471,7 +3460,7 @@
   r.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 104, 3)],
+      [error(diag.undefinedSetter, 104, 3)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3517,7 +3506,7 @@
   r.foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 104, 3)],
+      [error(diag.undefinedSetter, 104, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3563,7 +3552,7 @@
   r.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 104, 3)],
+      [error(diag.undefinedSetter, 104, 3)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3610,7 +3599,7 @@
   r.foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 124, 3)],
+      [error(diag.undefinedSetter, 124, 3)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3657,7 +3646,7 @@
   r.foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 124, 3)],
+      [error(diag.undefinedSetter, 124, 3)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3699,10 +3688,7 @@
   r.$4 += 0;
 }
 ''',
-      [
-        error(CompileTimeErrorCode.undefinedGetter, 30, 2),
-        error(CompileTimeErrorCode.undefinedSetter, 30, 2),
-      ],
+      [error(diag.undefinedGetter, 30, 2), error(diag.undefinedSetter, 30, 2)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3744,7 +3730,7 @@
   r.$4 = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 30, 2)],
+      [error(diag.undefinedSetter, 30, 2)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3790,7 +3776,7 @@
   r.$3 += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 83, 2)],
+      [error(diag.assignmentToFinalNoSetter, 83, 2)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3836,7 +3822,7 @@
   r.$3 = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 83, 2)],
+      [error(diag.assignmentToFinalNoSetter, 83, 2)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3878,7 +3864,7 @@
   r.$1 += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 30, 2)],
+      [error(diag.undefinedSetter, 30, 2)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -3920,7 +3906,7 @@
   r.$1 = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 30, 2)],
+      [error(diag.undefinedSetter, 30, 2)],
     );
 
     var node = findNode.assignment('= 0');
@@ -3966,7 +3952,7 @@
   r.$1 += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 83, 2)],
+      [error(diag.undefinedSetter, 83, 2)],
     );
 
     var node = findNode.assignment('+= 0');
@@ -4012,7 +3998,7 @@
   r.$1 = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 83, 2)],
+      [error(diag.undefinedSetter, 83, 2)],
     );
 
     var node = findNode.assignment('= 0');
@@ -4135,7 +4121,7 @@
   (a).b = c;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 19, 1)],
+      [error(diag.undefinedIdentifier, 19, 1)],
     );
 
     var assignment = findNode.assignment('(a).b = c');
@@ -4179,7 +4165,7 @@
   (a).b = c;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 29, 1)],
+      [error(diag.undefinedSetter, 29, 1)],
     );
 
     var assignment = findNode.assignment('(a).b = c');
@@ -4225,7 +4211,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 39, 5)],
+      [error(diag.missingAssignableSelector, 39, 5)],
     );
 
     var node = findNode.singleAssignmentExpression;
@@ -4325,7 +4311,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 46, 1)],
+      [error(diag.assignmentToFinalNoSetter, 46, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4361,7 +4347,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 53, 1)],
+      [error(diag.assignmentToFinalNoSetter, 53, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4395,7 +4381,7 @@
   x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinal, 30, 1)],
+      [error(diag.assignmentToFinal, 30, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4435,7 +4421,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 85, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 85, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4469,7 +4455,7 @@
   x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 37, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 37, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4565,7 +4551,7 @@
   x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToConst, 66, 1)],
+      [error(diag.assignmentToConst, 66, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4599,7 +4585,7 @@
   x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 66, 1)],
+      [error(diag.assignmentToFinalLocal, 66, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4664,7 +4650,7 @@
   x ??= C();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 77, 3)],
+      [error(diag.invalidAssignment, 77, 3)],
     );
 
     var assignment = findNode.assignment('x ??=');
@@ -4704,7 +4690,7 @@
   a ??= b;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 35, 1)],
+      [error(diag.invalidAssignment, 35, 1)],
     );
 
     var assignment = findNode.assignment('a ??=');
@@ -4741,10 +4727,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 23, 3),
-        error(CompileTimeErrorCode.invalidAssignment, 35, 3),
-        error(CompileTimeErrorCode.invalidAssignment, 47, 3),
-        error(CompileTimeErrorCode.invalidAssignment, 59, 3),
+        error(diag.invalidAssignment, 23, 3),
+        error(diag.invalidAssignment, 35, 3),
+        error(diag.invalidAssignment, 47, 3),
+        error(diag.invalidAssignment, 59, 3),
       ],
     );
     assertType(findNode.assignment('+='), 'double');
@@ -4837,7 +4823,7 @@
   x = true;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 22, 4)],
+      [error(diag.invalidAssignment, 22, 4)],
     );
 
     var assignment = findNode.assignment('x = true');
@@ -4869,7 +4855,7 @@
   x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 24, 1)],
+      [error(diag.assignmentToFinalLocal, 24, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -4910,8 +4896,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.conflictingStaticAndInstance, 68, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 94, 1),
+        error(diag.conflictingStaticAndInstance, 68, 1),
+        error(diag.assignmentToFinalNoSetter, 94, 1),
       ],
     );
 
@@ -4953,8 +4939,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.conflictingStaticAndInstance, 65, 1),
-        error(CompileTimeErrorCode.assignmentToMethod, 90, 1),
+        error(diag.conflictingStaticAndInstance, 65, 1),
+        error(diag.assignmentToMethod, 90, 1),
       ],
     );
 
@@ -5022,7 +5008,7 @@
   = y;
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 18, 1)],
+      [error(diag.missingIdentifier, 18, 1)],
     );
 
     var assignment = findNode.assignment('= y');
@@ -5210,7 +5196,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinal, 86, 1)],
+      [error(diag.assignmentToFinal, 86, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -5281,7 +5267,7 @@
 B? get x => B();
 set x(B? _) {}
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 19, 3)],
+      [error(diag.invalidAssignment, 19, 3)],
     );
 
     var assignment = findNode.assignment('x ??=');
@@ -5388,7 +5374,7 @@
   x = true;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 29, 4)],
+      [error(diag.invalidAssignment, 29, 4)],
     );
 
     var assignment = findNode.assignment('x = true');
@@ -5422,7 +5408,7 @@
   x = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinal, 31, 1)],
+      [error(diag.assignmentToFinal, 31, 1)],
     );
 
     var assignment = findNode.assignment('x = 2');
@@ -5454,7 +5440,7 @@
   int += 3;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 13, 3)],
+      [error(diag.assignmentToType, 13, 3)],
     );
 
     var assignment = findNode.assignment('int += 3');
@@ -5486,7 +5472,7 @@
   int = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 13, 3)],
+      [error(diag.assignmentToType, 13, 3)],
     );
 
     var assignment = findNode.assignment('int = 0');
@@ -5518,7 +5504,7 @@
   x += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 1)],
+      [error(diag.undefinedIdentifier, 13, 1)],
     );
 
     var assignment = findNode.assignment('x += 1');
@@ -5550,7 +5536,7 @@
   x = a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 18, 1)],
+      [error(diag.undefinedIdentifier, 18, 1)],
     );
 
     var assignment = findNode.assignment('x = a');
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 d1c1cd6..fa5675c 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -186,8 +186,8 @@
 void Function() f(A a, bool b, C c, dynamic d) => b ? d : c ?? a;
 ''',
       [
-        error(WarningCode.deadCode, 127, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 130, 1),
+        error(diag.deadCode, 127, 4),
+        error(diag.deadNullAwareExpression, 130, 1),
       ],
     );
     // `c` is on the LHS of an if-null expression, so implicit call tearoff
@@ -616,7 +616,7 @@
 }
 Function f<X extends A, Y extends X?>(Y y) => y;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 75, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 75, 1)],
     );
 
     // Verify that no ImplicitCallReference was inserted.
@@ -637,7 +637,7 @@
 }
 Function f<X extends A>(X? x) => x;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 62, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 62, 1)],
     );
 
     // Verify that no ImplicitCallReference was inserted.
@@ -878,7 +878,7 @@
   X(0);
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunction, 33, 1)],
+      [error(diag.invocationOfNonFunction, 33, 1)],
     );
 
     // Not rewritten.
@@ -953,7 +953,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           50,
           5,
           messageContains: ["The constructor 'prefix.A.named'"],
@@ -1022,7 +1022,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           48,
           5,
           messageContains: ["The constructor 'prefix.A.new'"],
@@ -1233,7 +1233,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           52,
           13,
           messageContains: ["The constructor 'A.named'"],
@@ -1299,7 +1299,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           48,
           13,
           messageContains: ["The constructor 'A.new'"],
@@ -1606,7 +1606,7 @@
   C.new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 27, 3)],
+      [error(diag.undefinedSetter, 27, 3)],
     );
 
     var identifier = findNode.prefixed('C.new');
diff --git a/pkg/analyzer/test/src/dart/resolution/augmented_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/augmented_expression_test.dart
index e4625a7..a24d1e9 100644
--- a/pkg/analyzer/test/src/dart/resolution/augmented_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/augmented_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -146,7 +146,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionIsNotSetter, 65, 9)],
+      [error(diag.augmentedExpressionIsNotSetter, 65, 9)],
     );
 
     var node = findNode.singleAssignmentExpression;
@@ -193,7 +193,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionIsNotSetter, 64, 9)],
+      [error(diag.augmentedExpressionIsNotSetter, 64, 9)],
     );
 
     var node = findNode.singleAssignmentExpression;
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 ada5c96..0c519af 100644
--- a/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -69,7 +68,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 39, 5)],
+      [error(diag.missingAssignableSelector, 39, 5)],
     );
 
     var node = findNode.singleAwaitExpression;
@@ -117,7 +116,7 @@
   await unresolved;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 25, 10)],
+      [error(diag.undefinedIdentifier, 25, 10)],
     );
 
     var node = findNode.singleAwaitExpression;
@@ -141,7 +140,7 @@
   await prefix.unresolved;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 63, 10)],
+      [error(diag.undefinedPrefixedName, 63, 10)],
     );
 
     var node = findNode.singleAwaitExpression;
@@ -171,7 +170,7 @@
   await 0.isEven.unresolved;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 34, 10)],
+      [error(diag.undefinedGetter, 34, 10)],
     );
 
     var node = findNode.singleAwaitExpression;
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 771a72b..b6bc5d5 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -175,7 +174,7 @@
   a + 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 26, 1)],
+      [error(diag.undefinedOperator, 26, 1)],
     );
 
     var node = findNode.binary('+ 0');
@@ -382,7 +381,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 50, 9)],
+      [error(diag.undefinedIdentifier, 50, 9)],
     );
 
     var node = findNode.singleBinaryExpression;
@@ -464,7 +463,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionNotOperator, 76, 9)],
+      [error(diag.augmentedExpressionNotOperator, 76, 9)],
     );
 
     var node = findNode.singleBinaryExpression;
@@ -585,7 +584,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionIsSetter, 68, 9)],
+      [error(diag.augmentedExpressionIsSetter, 68, 9)],
     );
 
     var node = findNode.singleBinaryExpression;
@@ -672,10 +671,7 @@
   a + b;
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 22, 1),
-        error(WarningCode.deadCode, 24, 3),
-      ],
+      [error(diag.receiverOfTypeNever, 22, 1), error(diag.deadCode, 24, 3)],
     );
 
     assertResolvedNodeText(findNode.binary('a + b'), r'''
@@ -792,9 +788,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 19, 1),
-        error(ParserErrorCode.missingIdentifier, 23, 1),
-        error(ParserErrorCode.missingIdentifier, 25, 1),
+        error(diag.unusedLocalVariable, 19, 1),
+        error(diag.missingIdentifier, 23, 1),
+        error(diag.missingIdentifier, 25, 1),
       ],
     );
 
@@ -825,8 +821,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 19, 1),
-        error(ParserErrorCode.missingIdentifier, 23, 1),
+        error(diag.unusedLocalVariable, 19, 1),
+        error(diag.missingIdentifier, 23, 1),
       ],
     );
 
@@ -856,8 +852,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 19, 1),
-        error(ParserErrorCode.missingIdentifier, 27, 1),
+        error(diag.unusedLocalVariable, 19, 1),
+        error(diag.missingIdentifier, 27, 1),
       ],
     );
 
@@ -975,7 +971,7 @@
   E(a) != 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 46, 2)],
+      [error(diag.undefinedExtensionOperator, 46, 2)],
     );
 
     assertResolvedNodeText(findNode.binary('!= 0'), r'''
@@ -1012,7 +1008,7 @@
   a !== b;
 }
 ''',
-      [error(ScannerErrorCode.unsupportedOperator, 22, 1)],
+      [error(diag.unsupportedOperator, 22, 1)],
     );
 
     assertResolvedNodeText(findNode.binary('a !== b'), r'''
@@ -1067,7 +1063,7 @@
   E(a) == 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 46, 2)],
+      [error(diag.undefinedExtensionOperator, 46, 2)],
     );
 
     assertResolvedNodeText(findNode.binary('== 0'), r'''
@@ -1130,7 +1126,7 @@
   a == 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 7, 1)],
+      [error(diag.undefinedClass, 7, 1)],
     );
 
     var node = findNode.binary('a == 0');
@@ -1158,7 +1154,7 @@
   a === b;
 }
 ''',
-      [error(ScannerErrorCode.unsupportedOperator, 22, 1)],
+      [error(diag.unsupportedOperator, 22, 1)],
     );
 
     assertResolvedNodeText(findNode.binary('a === b'), r'''
@@ -1444,7 +1440,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 45, 7)],
+      [error(diag.argumentTypeNotAssignable, 45, 7)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -1609,7 +1605,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 98, 10)],
+      [error(diag.argumentTypeNotAssignable, 98, 10)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -1862,7 +1858,7 @@
   x + 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 1)],
+      [error(diag.undefinedIdentifier, 13, 1)],
     );
 
     var node = findNode.binary('x + 0');
@@ -1892,7 +1888,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 42, 7)],
+      [error(diag.argumentTypeNotAssignable, 42, 7)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -1925,7 +1921,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 88, 7)],
+      [error(diag.argumentTypeNotAssignable, 88, 7)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -1959,7 +1955,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 105, 10)],
+      [error(diag.argumentTypeNotAssignable, 105, 10)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -1993,7 +1989,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 105, 7)],
+      [error(diag.argumentTypeNotAssignable, 105, 7)],
     );
 
     var node = findNode.methodInvocation('f()');
diff --git a/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart
index 3510a93..90be9d7 100644
--- a/pkg/analyzer/test/src/dart/resolution/cast_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/cast_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (x case var y as int) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 29, 1)],
+      [error(diag.unusedLocalVariable, 29, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -78,7 +78,7 @@
   var (a as int) = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 19, 1)],
+      [error(diag.unusedLocalVariable, 19, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index a9f5a4c..e7fe5fb 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -58,7 +58,7 @@
         element: <testLibrary>::@class::C
         type: C
   semicolon: ;
-  declaredElement: <testLibraryFragment> X@46
+  declaredFragment: <testLibraryFragment> X@46
 ''');
   }
 
@@ -68,7 +68,7 @@
 mixin class A {}
 class X = Function with A;
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 27, 8)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 27, 8)],
     );
     var x = findElement2.class_('X');
     assertType(x.supertype, 'Object');
@@ -81,13 +81,7 @@
 class B {}
 class X = Object with A implements A, Function, B;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          66,
-          8,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 66, 8)],
     );
     var x = findElement2.class_('X');
     assertElementTypes(x.interfaces, ['A', 'B']);
@@ -100,7 +94,7 @@
 mixin class B {}
 class X = Object with A, Function, B;
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 59, 8)],
+      [error(diag.classUsedAsMixin, 59, 8)],
     );
     var x = findElement2.class_('X');
     assertElementTypes(x.mixins, ['A', 'B']);
@@ -136,8 +130,8 @@
 const x = const C();
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConst, 83, 5),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 83, 5),
+        error(diag.constWithNonConst, 83, 5),
+        error(diag.constInitializedWithNonConstantValue, 83, 5),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 3e017d5..42c39a2 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -2,14 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
+import 'node_text_expectations.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ClassDeclarationResolutionTest);
+    defineReflectiveTests(UpdateNodeTextExpectations);
   });
 }
 
@@ -95,9 +97,9 @@
 class X extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 48, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 48, 1),
       ],
     );
 
@@ -109,7 +111,7 @@
       r'''
 class A extends Function {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 16, 8)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 16, 8)],
     );
     var a = findElement2.class_('A');
     assertType(a.supertype, 'Object');
@@ -121,7 +123,7 @@
 // @dart = 2.19
 class A extends Function {}
 ''',
-      [error(WarningCode.deprecatedExtendsFunction, 32, 8)],
+      [error(diag.deprecatedExtendsFunction, 32, 8)],
     );
     var a = findElement2.class_('A');
     assertType(a.supertype, 'Object');
@@ -134,7 +136,7 @@
 mixin B {}
 class C extends Object with A, Function, B {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 53, 8)],
+      [error(diag.classUsedAsMixin, 53, 8)],
     );
 
     assertElementTypes(findElement2.class_('C').mixins, ['A', 'B']);
@@ -148,7 +150,7 @@
 mixin B {}
 class C extends Object with A, Function, B {}
 ''',
-      [error(WarningCode.deprecatedMixinFunction, 69, 8)],
+      [error(diag.deprecatedMixinFunction, 69, 8)],
     );
 
     assertElementTypes(findElement2.class_('C').mixins, ['A', 'B']);
@@ -168,10 +170,595 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 33, 1),
-        error(WarningCode.unusedLocalVariable, 150, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 33, 1),
+        error(diag.unusedLocalVariable, 150, 1),
       ],
     );
   }
+
+  test_nameWithTypeParameters_hasTypeParameters() async {
+    var code = r'''
+class A<T extends int> {}
+''';
+
+    await assertNoErrorsInCode(code);
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: NameWithTypeParameters
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          extendsKeyword: extends
+          bound: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          declaredFragment: <testLibraryFragment> T@8
+            defaultType: int
+      rightBracket: >
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_nameWithTypeParameters_noTypeParameters() async {
+    var code = r'''
+class A {}
+''';
+
+    await assertNoErrorsInCode(code);
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_default_namedOptional_final() async {
+    await assertNoErrorsInCode(r'''
+class A({final int a = 0});
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      leftDelimiter: {
+      parameter: DefaultFormalParameter
+        parameter: SimpleFormalParameter
+          keyword: final
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          name: a
+          declaredFragment: <testLibraryFragment> a@19
+            element: isFinal isPublic
+              type: int
+              field: <testLibrary>::@class::A::@field::a
+        separator: =
+        defaultValue: IntegerLiteral
+          literal: 0
+          staticType: int
+        declaredFragment: <testLibraryFragment> a@19
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@class::A::@field::a
+      rightDelimiter: }
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function({int a})
+  body: EmptyClassBody
+    semicolon: ;
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_default_namedRequired_final() async {
+    await assertNoErrorsInCode(r'''
+class A({required final int a});
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      leftDelimiter: {
+      parameter: DefaultFormalParameter
+        parameter: SimpleFormalParameter
+          requiredKeyword: required
+          keyword: final
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          name: a
+          declaredFragment: <testLibraryFragment> a@28
+            element: isFinal isPublic
+              type: int
+              field: <testLibrary>::@class::A::@field::a
+        declaredFragment: <testLibraryFragment> a@28
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@class::A::@field::a
+      rightDelimiter: }
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function({required int a})
+  body: EmptyClassBody
+    semicolon: ;
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_functionTyped_final() async {
+    await assertNoErrorsInCode(r'''
+class A(final int a(String x));
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: FunctionTypedFormalParameter
+        keyword: final
+        returnType: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        parameters: FormalParameterList
+          leftParenthesis: (
+          parameter: SimpleFormalParameter
+            type: NamedType
+              name: String
+              element: dart:core::@class::String
+              type: String
+            name: x
+            declaredFragment: <testLibraryFragment> x@27
+              element: isPublic
+                type: String
+          rightParenthesis: )
+        declaredFragment: <testLibraryFragment> a@18
+          element: isFinal isPublic
+            type: int Function(String)
+            field: <testLibrary>::@class::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function(int Function(String))
+  body: EmptyClassBody
+    semicolon: ;
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_simple_final() async {
+    await assertNoErrorsInCode(r'''
+class A(final int a) {}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        keyword: final
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@18
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@class::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_simple_var() async {
+    await assertNoErrorsInCode(r'''
+class A(var int a) {}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        keyword: var
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@16
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@class::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_field_staticConst() async {
+    await assertNoErrorsInCode(r'''
+class A(final String a, final bool b) {
+  static const int foo = 0;
+  static const int bar = 1;
+}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        keyword: final
+        type: NamedType
+          name: String
+          element: dart:core::@class::String
+          type: String
+        name: a
+        declaredFragment: <testLibraryFragment> a@21
+          element: isFinal isPublic
+            type: String
+            field: <testLibrary>::@class::A::@field::a
+      parameter: SimpleFormalParameter
+        keyword: final
+        type: NamedType
+          name: bool
+          element: dart:core::@class::bool
+          type: bool
+        name: b
+        declaredFragment: <testLibraryFragment> b@35
+          element: isFinal isPublic
+            type: bool
+            field: <testLibrary>::@class::A::@field::b
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function(String, bool)
+  body: BlockClassBody
+    leftBracket: {
+    members
+      FieldDeclaration
+        staticKeyword: static
+        fields: VariableDeclarationList
+          keyword: const
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          variables
+            VariableDeclaration
+              name: foo
+              equals: =
+              initializer: IntegerLiteral
+                literal: 0
+                staticType: int
+              declaredFragment: <testLibraryFragment> foo@59
+        semicolon: ;
+        declaredFragment: <null>
+      FieldDeclaration
+        staticKeyword: static
+        fields: VariableDeclarationList
+          keyword: const
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          variables
+            VariableDeclaration
+              name: bar
+              equals: =
+              initializer: IntegerLiteral
+                literal: 1
+                staticType: int
+              declaredFragment: <testLibraryFragment> bar@87
+        semicolon: ;
+        declaredFragment: <null>
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_fieldFormalParameter() async {
+    await assertNoErrorsInCode(r'''
+class A(int this.a) {
+  final int a;
+}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: FieldFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        thisKeyword: this
+        period: .
+        name: a
+        declaredFragment: <testLibraryFragment> a@17
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@class::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    members
+      FieldDeclaration
+        fields: VariableDeclarationList
+          keyword: final
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          variables
+            VariableDeclaration
+              name: a
+              declaredFragment: <testLibraryFragment> a@34
+        semicolon: ;
+        declaredFragment: <null>
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_hasTypeParameters_named() async {
+    await assertNoErrorsInCode(r'''
+class A<T>.named(T t) {}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          declaredFragment: <testLibraryFragment> T@8
+            defaultType: dynamic
+      rightBracket: >
+    constructorName: PrimaryConstructorName
+      period: .
+      name: named
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: T
+          element: #E0 T
+          type: T
+        name: t
+        declaredFragment: <testLibraryFragment> t@19
+          element: isPublic
+            type: T
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> named@11
+      element: <testLibrary>::@class::A::@constructor::named
+        type: A<T> Function(T)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_hasTypeParameters_unnamed() async {
+    await assertNoErrorsInCode(r'''
+class A<T>(T t) {}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          declaredFragment: <testLibraryFragment> T@8
+            defaultType: dynamic
+      rightBracket: >
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: T
+          element: #E0 T
+          type: T
+        name: t
+        declaredFragment: <testLibraryFragment> t@13
+          element: isPublic
+            type: T
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A<T> Function(T)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_noTypeParameters_named() async {
+    await assertNoErrorsInCode(r'''
+class A.named(int a) {}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    constructorName: PrimaryConstructorName
+      period: .
+      name: named
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@18
+          element: isPublic
+            type: int
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> named@8
+      element: <testLibrary>::@class::A::@constructor::named
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_noTypeParameters_unnamed() async {
+    await assertNoErrorsInCode(r'''
+class A(int a) {}
+''');
+
+    var node = findNode.singleClassDeclaration;
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@12
+          element: isPublic
+            type: int
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@6
+''');
+  }
+
+  test_primaryConstructor_superFormalParameter() async {
+    await assertNoErrorsInCode(r'''
+class A(final int a);
+class B(super.a) extends A;
+''');
+
+    var node = findNode.classDeclaration('class B');
+    assertResolvedNodeText(node, r'''
+ClassDeclaration
+  classKeyword: class
+  namePart: PrimaryConstructorDeclaration
+    typeName: B
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SuperFormalParameter
+        superKeyword: super
+        period: .
+        name: a
+        declaredFragment: <testLibraryFragment> a@36
+          element: hasImplicitType isFinal isPublic
+            type: int
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@class::B::@constructor::new
+        type: B Function(int)
+  extendsClause: ExtendsClause
+    extendsKeyword: extends
+    superclass: NamedType
+      name: A
+      element: <testLibrary>::@class::A
+      type: A
+  body: EmptyClassBody
+    semicolon: ;
+  declaredFragment: <testLibraryFragment> B@28
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/comment_test.dart b/pkg/analyzer/test/src/dart/resolution/comment_test.dart
index 062fa9e..e4bd5f9 100644
--- a/pkg/analyzer/test/src/dart/resolution/comment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/comment_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -1861,8 +1861,8 @@
 main() {}
 ''',
       [
-        error(WarningCode.deprecatedNewInCommentReference, 42, 3),
-        error(WarningCode.deprecatedNewInCommentReference, 53, 3),
+        error(diag.deprecatedNewInCommentReference, 42, 3),
+        error(diag.deprecatedNewInCommentReference, 53, 3),
       ],
     );
 
@@ -2054,8 +2054,8 @@
 main() {}
 ''',
       [
-        error(WarningCode.deprecatedNewInCommentReference, 38, 3),
-        error(WarningCode.deprecatedNewInCommentReference, 49, 3),
+        error(diag.deprecatedNewInCommentReference, 38, 3),
+        error(diag.deprecatedNewInCommentReference, 49, 3),
       ],
     );
 
diff --git a/pkg/analyzer/test/src/dart/resolution/conditional_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/conditional_expression_test.dart
index da3de8b..e3d43a8 100644
--- a/pkg/analyzer/test/src/dart/resolution/conditional_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/conditional_expression_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -28,7 +27,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 27, 5)],
+      [error(diag.nonBoolCondition, 27, 5)],
     );
 
     var node = findNode.singleConditionalExpression;
@@ -84,7 +83,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 41, 5)],
+      [error(diag.missingAssignableSelector, 41, 5)],
     );
 
     var node = findNode.singleConditionalExpression;
@@ -154,7 +153,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 79, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 79, 1)],
     );
 
     var node = findNode.conditionalExpression('b ?');
@@ -242,7 +241,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 37, 5)],
+      [error(diag.missingAssignableSelector, 37, 5)],
     );
 
     var node = findNode.singleConditionalExpression;
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_pattern_test.dart
index 7c602c7..9cbdf67 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -396,7 +396,7 @@
   if (x case T) {}
 }
 ''',
-      [error(CompileTimeErrorCode.constTypeParameter, 36, 1)],
+      [error(diag.constTypeParameter, 36, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 1ca2db7..9001c28 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/src/dart/constant/value.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -29,7 +29,7 @@
 import 'a.dart';
 const a = const A();
 ''',
-      [error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 27, 9)],
+      [error(diag.constConstructorParamTypeMismatch, 27, 9)],
     );
 
     var aLib = findElement2.import('package:test/a.dart').importedLibrary!;
@@ -77,7 +77,7 @@
   }
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareElement, 51, 1)],
+      [error(diag.invalidNullAwareElement, 51, 1)],
     );
     assertType(findNode.listLiteral('const ['), 'List<A>');
   }
@@ -92,7 +92,7 @@
   }
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareMapEntryKey, 51, 1)],
+      [error(diag.invalidNullAwareMapEntryKey, 51, 1)],
     );
     assertType(findNode.setOrMapLiteral('const {'), 'Map<A, int>');
   }
@@ -107,7 +107,7 @@
   }
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareMapEntryValue, 54, 1)],
+      [error(diag.invalidNullAwareMapEntryValue, 54, 1)],
     );
     assertType(findNode.setOrMapLiteral('const {'), 'Map<int, A>');
   }
@@ -124,7 +124,7 @@
   const C() : super(a);
 }
 ''',
-      [error(CompileTimeErrorCode.constNotInitialized, 62, 1)],
+      [error(diag.constNotInitialized, 62, 1)],
     );
   }
 
@@ -138,7 +138,7 @@
   }
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareElement, 51, 1)],
+      [error(diag.invalidNullAwareElement, 51, 1)],
     );
     assertType(findNode.setOrMapLiteral('const {'), 'Set<A>');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_field_initializer_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_field_initializer_test.dart
index d62842b..f7cbaea 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_field_initializer_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_field_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -120,7 +120,7 @@
                   staticType: int
                 semicolon: ;
             rightBracket: }
-        declaredElement: <testLibraryFragment> null@null
+        declaredFragment: <testLibraryFragment> null@null
           element: null@null
             type: int Function()
         staticType: int Function()
@@ -173,7 +173,7 @@
             element: dart:core::@class::num::@method::+
             staticInvokeType: num Function(num)
             staticType: int
-        declaredElement: <testLibraryFragment> null@null
+        declaredFragment: <testLibraryFragment> null@null
           element: null@null
             type: int Function()
         staticType: int Function()
@@ -197,13 +197,7 @@
 }
 const a = 0;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializedInInitializerAndDeclaration,
-          39,
-          1,
-        ),
-      ],
+      [error(diag.fieldInitializedInInitializerAndDeclaration, 39, 1)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -230,7 +224,7 @@
 const a = 0;
 class X {}
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 24, 5)],
+      [error(diag.initializerForNonExistentField, 24, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -257,7 +251,7 @@
 }
 const a = 0;
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -285,8 +279,8 @@
 const a = 0;
 ''',
       [
-        error(WarningCode.unusedImport, 7, 12),
-        error(CompileTimeErrorCode.initializerForNonExistentField, 44, 5),
+        error(diag.unusedImport, 7, 12),
+        error(diag.initializerForNonExistentField, 44, 5),
       ],
     );
 
@@ -314,7 +308,7 @@
 }
 const a = 0;
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -341,7 +335,7 @@
 }
 const a = 0;
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -368,7 +362,7 @@
 const a = 0;
 void x() {}
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -395,7 +389,7 @@
 const a = 0;
 var x = 0;
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -421,7 +415,7 @@
 }
 const a = 0;
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 21, 5)],
+      [error(diag.initializerForNonExistentField, 21, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
@@ -447,7 +441,7 @@
 }
 const a = 0;
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
 
     var node = findNode.singleConstructorFieldInitializer;
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 8a97cc2..7f967c3 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -62,13 +61,7 @@
   A.new;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.tearoffOfGenerativeConstructorOfAbstractClass,
-          39,
-          5,
-        ),
-      ],
+      [error(diag.tearoffOfGenerativeConstructorOfAbstractClass, 39, 5)],
     );
 
     var node = findNode.constructorReference('A.new;');
@@ -102,13 +95,7 @@
   A.new;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.tearoffOfGenerativeConstructorOfAbstractClass,
-          63,
-          5,
-        ),
-      ],
+      [error(diag.tearoffOfGenerativeConstructorOfAbstractClass, 63, 5)],
     );
 
     var node = findNode.constructorReference('A.new;');
@@ -142,7 +129,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           41,
           6,
           contextMessages: [message(testFile, 39, 9)],
@@ -826,7 +813,7 @@
   var x = const <C<int> Function(int)>[Direct.new];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 87, 1)],
+      [error(diag.unusedLocalVariable, 87, 1)],
     );
   }
 
@@ -884,7 +871,7 @@
   TA<String>.new;
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 75, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 75, 6)],
     );
 
     var node = findNode.constructorReference('TA<String>.new;');
@@ -1009,9 +996,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedOperator, 43, 1),
-        error(ParserErrorCode.equalityCannotBeEqualityOperand, 47, 1),
-        error(ParserErrorCode.missingIdentifier, 48, 2),
+        error(diag.undefinedOperator, 43, 1),
+        error(diag.equalityCannotBeEqualityOperand, 47, 1),
+        error(diag.missingIdentifier, 48, 2),
       ],
     );
     // The parser produces nonsense here because the `<` disambiguates as a
@@ -1031,9 +1018,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedOperator, 43, 1),
-        error(ParserErrorCode.equalityCannotBeEqualityOperand, 47, 1),
-        error(ParserErrorCode.missingIdentifier, 48, 2),
+        error(diag.undefinedOperator, 43, 1),
+        error(diag.equalityCannotBeEqualityOperand, 47, 1),
+        error(diag.missingIdentifier, 48, 2),
       ],
     );
     // The parser produces nonsense here because the `<` disambiguates as a
@@ -1054,7 +1041,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           52,
           5,
           messageContains: ["The constructor 'A.foo'"],
@@ -1105,7 +1092,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           52,
           5,
           messageContains: ["The constructor 'A.new'"],
@@ -1154,13 +1141,7 @@
   A<int>.i;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToStaticMember,
-          51,
-          8,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToStaticMember, 51, 8)],
     );
 
     var node = findNode.constructorReference('A<int>.i;');
@@ -1200,7 +1181,7 @@
   A<int>.;
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 49, 1)],
+      [error(diag.missingIdentifier, 49, 1)],
     );
 
     var node = findNode.constructorReference('A<int>.;');
@@ -1363,7 +1344,7 @@
   A<String>.new;
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 52, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 52, 6)],
     );
 
     var node = findNode.constructorReference('A<String>.new;');
@@ -1604,7 +1585,7 @@
   A<int>.i;
 }
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 52, 5)],
+      [error(diag.experimentNotEnabled, 52, 5)],
     );
 
     var node = findNode.constructorReference('A<int>.i;');
@@ -1644,7 +1625,7 @@
   A.foo;
 }
 ''',
-      [error(WarningCode.sdkVersionConstructorTearoffs, 39, 5)],
+      [error(diag.sdkVersionConstructorTearoffs, 39, 5)],
     );
 
     var node = findNode.constructorReference('A.foo;');
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_test.dart
index a495f40..ed1d433 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -55,7 +55,7 @@
   A(var _) : v = _;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 45, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 45, 1)],
     );
 
     var node = findNode.constructorFieldInitializer('v = _');
@@ -87,7 +87,7 @@
     var node = findNode.constructorDeclaration('B(');
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -99,7 +99,7 @@
         element: <testLibrary>::@class::a
         type: a
       name: a
-      declaredElement: <testLibraryFragment> a@28
+      declaredFragment: <testLibraryFragment> a@28
         element: isPublic
           type: a
     rightParenthesis: )
@@ -114,12 +114,129 @@
             staticType: a
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> new@null
+  declaredFragment: <testLibraryFragment> new@null
     element: <testLibrary>::@class::B::@constructor::new
       type: B Function(a)
 ''');
   }
 
+  test_privateNamedParameter_accessInInitializer() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  int? _x;
+  int? _y;
+  C({this._x}) : _y = _x;
+}
+''',
+      [error(diag.unusedField, 17, 2), error(diag.unusedField, 28, 2)],
+    );
+
+    var node = findNode.singleConstructorFieldInitializer;
+    assertResolvedNodeText(node, r'''
+ConstructorFieldInitializer
+  fieldName: SimpleIdentifier
+    token: _y
+    element: <testLibrary>::@class::C::@field::_y
+    staticType: null
+  equals: =
+  expression: SimpleIdentifier
+    token: _x
+    element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
+    staticType: int?
+''');
+  }
+
+  test_privateNamedParameter_fieldFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  int? _x;
+  C({this._x});
+}
+''',
+      [error(diag.unusedField, 17, 2)],
+    );
+
+    var node = findNode.singleConstructorDeclaration;
+    assertResolvedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: C
+    element: <testLibrary>::@class::C
+    staticType: null
+  parameters: FormalParameterList
+    leftParenthesis: (
+    leftDelimiter: {
+    parameter: DefaultFormalParameter
+      parameter: FieldFormalParameter
+        thisKeyword: this
+        period: .
+        name: _x
+        declaredFragment: <testLibraryFragment> x@31
+          element: hasImplicitType isFinal isPublic
+            type: int?
+            field: <testLibrary>::@class::C::@field::_x
+      declaredFragment: <testLibraryFragment> x@31
+        element: hasImplicitType isFinal isPublic
+          type: int?
+          field: <testLibrary>::@class::C::@field::_x
+    rightDelimiter: }
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+  declaredFragment: <testLibraryFragment> new@null
+    element: <testLibrary>::@class::C::@constructor::new
+      type: C Function({int? x})
+''');
+  }
+
+  test_privateNamedParameter_nonFieldFormal() async {
+    // The user is incorrectly using a private named parameter for a non-field
+    // parameter. This is erroneous, but resolve using the private name.
+    await assertErrorsInCode(
+      r'''
+class C {
+  C({int? _x});
+}
+''',
+      [error(diag.privateNamedNonFieldParameter, 20, 2)],
+    );
+
+    var node = findNode.singleConstructorDeclaration;
+    assertResolvedNodeText(node, r'''
+ConstructorDeclaration
+  typeName: SimpleIdentifier
+    token: C
+    element: <testLibrary>::@class::C
+    staticType: null
+  parameters: FormalParameterList
+    leftParenthesis: (
+    leftDelimiter: {
+    parameter: DefaultFormalParameter
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          question: ?
+          element: dart:core::@class::int
+          type: int?
+        name: _x
+        declaredFragment: <testLibraryFragment> _x@20
+          element: isPrivate
+            type: int?
+      declaredFragment: <testLibraryFragment> _x@20
+        element: isPrivate
+          type: int?
+    rightDelimiter: }
+    rightParenthesis: )
+  body: EmptyFunctionBody
+    semicolon: ;
+  declaredFragment: <testLibraryFragment> new@null
+    element: <testLibrary>::@class::C::@constructor::new
+      type: C Function({int? _x})
+''');
+  }
+
   test_redirectedConstructor_named() async {
     await assertNoErrorsInCode(r'''
 class A implements B {
@@ -135,7 +252,7 @@
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -156,7 +273,7 @@
     element: <testLibrary>::@class::A::@constructor::named
   body: EmptyFunctionBody
     semicolon: ;
-  declaredElement: <testLibraryFragment> new@null
+  declaredFragment: <testLibraryFragment> new@null
     element: <testLibrary>::@class::B::@constructor::new
       type: B Function()
 ''');
@@ -177,7 +294,7 @@
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -210,7 +327,7 @@
       substitution: {T: U}
   body: EmptyFunctionBody
     semicolon: ;
-  declaredElement: <testLibraryFragment> new@null
+  declaredFragment: <testLibraryFragment> new@null
     element: <testLibrary>::@class::B::@constructor::new
       type: B<U> Function()
 ''');
@@ -227,14 +344,14 @@
   factory B() = A.named;
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToMissingConstructor, 59, 7)],
+      [error(diag.redirectToMissingConstructor, 59, 7)],
     );
 
     var node = findNode.constructorDeclaration('factory B');
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -255,7 +372,7 @@
     element: <null>
   body: EmptyFunctionBody
     semicolon: ;
-  declaredElement: <testLibraryFragment> new@null
+  declaredFragment: <testLibraryFragment> new@null
     element: <testLibrary>::@class::B::@constructor::new
       type: B Function()
 ''');
@@ -276,7 +393,7 @@
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -294,7 +411,7 @@
     element: <testLibrary>::@class::A::@constructor::new
   body: EmptyFunctionBody
     semicolon: ;
-  declaredElement: <testLibraryFragment> named@55
+  declaredFragment: <testLibraryFragment> named@55
     element: <testLibrary>::@class::B::@constructor::named
       type: B Function()
 ''');
@@ -315,7 +432,7 @@
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -343,7 +460,7 @@
       substitution: {T: U}
   body: EmptyFunctionBody
     semicolon: ;
-  declaredElement: <testLibraryFragment> named@64
+  declaredFragment: <testLibraryFragment> named@64
     element: <testLibrary>::@class::B::@constructor::named
       type: B<U> Function()
 ''');
@@ -360,14 +477,14 @@
   factory B.named() = A;
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToMissingConstructor, 71, 1)],
+      [error(diag.redirectToMissingConstructor, 71, 1)],
     );
 
     var node = findNode.constructorDeclaration('factory B');
     assertResolvedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
     element: <testLibrary>::@class::B
     staticType: null
@@ -385,7 +502,7 @@
     element: <null>
   body: EmptyFunctionBody
     semicolon: ;
-  declaredElement: <testLibraryFragment> named@61
+  declaredFragment: <testLibraryFragment> named@61
     element: <testLibrary>::@class::B::@constructor::named
       type: B 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 c3d7495..cd1d965 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/analysis/results.dart';
 import 'package:analyzer/src/dart/analysis/unlinked_unit_store.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/workspace/basic.dart';
@@ -73,8 +74,6 @@
 /// [AnalysisContextCollection] based implementation of [ResolutionTest].
 abstract class ContextResolutionTest
     with ResourceProviderMixin, ResolutionTest {
-  static bool _lintRulesAreRegistered = false;
-
   /// The byte store that is reused between tests. This allows reusing all
   /// unlinked and linked summaries for SDK, so that tests run much faster.
   /// However nothing is preserved between Dart VM runs, so changes to the
@@ -246,14 +245,14 @@
 
   @mustCallSuper
   void setUp() {
-    if (!_lintRulesAreRegistered) {
-      registerLintRules();
-      _lintRulesAreRegistered = true;
-    }
+    registerLintRules();
   }
 
   @mustCallSuper
   Future<void> tearDown() async {
+    for (var rule in Registry.ruleRegistry.rules) {
+      Registry.ruleRegistry.unregisterLintRule(rule);
+    }
     await disposeAnalysisContextCollection();
   }
 
@@ -367,7 +366,6 @@
     bool angularMeta = false,
     bool ffi = false,
     bool flutter = false,
-    bool js = false,
     bool meta = false,
   }) {
     config = config.copy();
@@ -379,8 +377,24 @@
     );
 
     if (angularMeta) {
-      var angularMetaPath = addAngularMeta().parent.path;
-      config.add(name: 'angular_meta', rootPath: angularMetaPath);
+      var angularMetaRootPath = '/packages/angular_meta';
+      newFile('$angularMetaRootPath/lib/angular_meta.dart', r'''
+library angular.meta;
+
+const _VisibleForTemplate visibleForTemplate = const _VisibleForTemplate();
+
+const _VisibleOutsideTemplate visibleOutsideTemplate =
+    const _VisibleOutsideTemplate();
+
+class _VisibleForTemplate {
+  const _VisibleForTemplate();
+}
+
+class _VisibleOutsideTemplate {
+  const _VisibleOutsideTemplate();
+}
+''');
+      config.add(name: 'angular_meta', rootPath: angularMetaRootPath);
     }
 
     if (ffi) {
@@ -396,11 +410,6 @@
       config.add(name: 'flutter', rootPath: flutterPath);
     }
 
-    if (js) {
-      var jsPath = addJs().parent.path;
-      config.add(name: 'js', rootPath: jsPath);
-    }
-
     if (meta || flutter) {
       var metaPath = addMeta().parent.path;
       config.add(name: 'meta', rootPath: metaPath);
@@ -433,6 +442,11 @@
   String? get testPackageLanguageVersion => '2.16';
 }
 
+mixin WithoutPrivateNamedParametersMixin on PubPackageResolutionTest {
+  @override
+  String? get testPackageLanguageVersion => '3.9';
+}
+
 mixin WithStrictCastsMixin on PubPackageResolutionTest {
   /// Asserts that no errors are reported in [code] when implicit casts are
   /// allowed, and that [expectedErrors] are reported for the same [code] when
diff --git a/pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_test.dart
index 4f1c684..0a0270e 100644
--- a/pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/declared_variable_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 1)],
+      [error(diag.unusedLocalVariable, 46, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -49,7 +49,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 1)],
+      [error(diag.unusedLocalVariable, 46, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -235,7 +235,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 40, 1)],
+      [error(diag.unusedLocalVariable, 40, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -261,7 +261,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 1)],
+      [error(diag.unusedLocalVariable, 54, 1)],
     );
 
     var node = findNode.singleGuardedPattern.pattern;
@@ -283,7 +283,7 @@
   if (x case var y) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 33, 1)],
+      [error(diag.unusedLocalVariable, 33, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -304,7 +304,7 @@
   if (x case var y) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 36, 1)],
+      [error(diag.unusedLocalVariable, 36, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -325,7 +325,7 @@
   if (x case var y) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -349,7 +349,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 44, 1)],
+      [error(diag.unusedLocalVariable, 44, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -373,7 +373,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 44, 1)],
+      [error(diag.unusedLocalVariable, 44, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/dot_shorthand_constructor_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/dot_shorthand_constructor_invocation_test.dart
index 24cbf0f..cd8a9b1 100644
--- a/pkg/analyzer/test/src/dart/resolution/dot_shorthand_constructor_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/dot_shorthand_constructor_invocation_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -19,18 +18,67 @@
 @reflectiveTest
 class DotShorthandConstructorInvocationResolutionTest
     extends PubPackageResolutionTest {
-  test_abstract_instantiation() async {
+  test_abstractClass() async {
     await assertErrorsInCode(
       r'''
-Function getFunction() {
-  return .new();
+abstract class Foo<T> {
+  Foo();
+}
+
+void main() {
+  Foo _ = .new();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 34, 6)],
+      [error(diag.instantiateAbstractClass, 60, 6)],
     );
   }
 
-  test_abstract_instantiation_factory() async {
+  test_abstractClass_const() async {
+    await assertErrorsInCode(
+      r'''
+abstract class C {
+  static C fn() => CB.named(1);
+}
+
+class CB implements C {
+  final int x;
+  CB.named(this.x);
+}
+
+void main() {
+  C c = const .fn(1);
+  print(c);
+}
+''',
+      [error(diag.constWithUndefinedConstructor, 145, 2)],
+    );
+  }
+
+  test_abstractClass_const_typeArguments() async {
+    await assertErrorsInCode(
+      r'''
+abstract class C {
+  static C fn() => CB.named(1);
+}
+
+class CB implements C {
+  final int x;
+  CB.named(this.x);
+}
+
+void main() {
+  C c = const .fn<int>(1);
+  print(c);
+}
+''',
+      [
+        error(diag.constWithUndefinedConstructor, 145, 2),
+        error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 147, 5),
+      ],
+    );
+  }
+
+  test_abstractClass_factory() async {
     await assertNoErrorsInCode(r'''
 void main() async {
   var iter = [1, 2];
@@ -66,6 +114,104 @@
 ''');
   }
 
+  test_abstractClass_factory_const() async {
+    await assertNoErrorsInCode(r'''
+abstract class Foo<T> {
+  const factory Foo.a() = _Foo;
+
+  const Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  const _Foo();
+}
+
+Foo<T> bar<T>() => const .a();
+''');
+
+    var node = findNode.singleDotShorthandConstructorInvocation;
+    assertResolvedNodeText(node, r'''
+DotShorthandConstructorInvocation
+  constKeyword: const
+  period: .
+  constructorName: SimpleIdentifier
+    token: a
+    element: ConstructorMember
+      baseElement: <testLibrary>::@class::Foo::@constructor::a
+      substitution: {T: Never}
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  isDotShorthand: true
+  staticType: Foo<Never>
+''');
+  }
+
+  test_abstractClass_factory_const_typeArguments() async {
+    await assertErrorsInCode(
+      r'''
+abstract class Foo<T> {
+  const factory Foo.a() = _Foo;
+
+  const Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  const _Foo();
+}
+
+Foo<int> bar<T>() => const .a<int>();
+''',
+      [error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 154, 5)],
+    );
+  }
+
+  test_abstractClass_factory_typeArguments() async {
+    await assertErrorsInCode(
+      r'''
+abstract class Foo<T> {
+  factory Foo.a() = _Foo;
+
+  Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  _Foo();
+}
+
+Foo<T> bar<T>() => .a<T>();
+''',
+      [error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 128, 3)],
+    );
+  }
+
+  test_abstractClass_function() async {
+    await assertErrorsInCode(
+      r'''
+Function getFunction() {
+  return .new();
+}
+''',
+      [error(diag.instantiateAbstractClass, 34, 6)],
+    );
+  }
+
+  test_abstractClass_typeArguments() async {
+    await assertErrorsInCode(
+      r'''
+abstract class Foo<T> {
+  Foo();
+}
+
+void main() {
+  Foo _ = .new<int>();
+}
+''',
+      [error(diag.instantiateAbstractClass, 60, 11)],
+    );
+  }
+
   test_chain_method() async {
     await assertNoErrorsInCode(r'''
 class C {
@@ -254,7 +400,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConst, 69, 5)],
+      [error(diag.constWithNonConst, 69, 5)],
     );
   }
 
@@ -272,7 +418,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.constWithUndefinedConstructor, 107, 2)],
+      [error(diag.constWithUndefinedConstructor, 107, 2)],
     );
   }
 
@@ -364,13 +510,7 @@
   print(e);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          65,
-          5,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructor, 65, 5)],
     );
   }
 
@@ -481,6 +621,111 @@
 ''');
   }
 
+  test_factory() async {
+    await assertNoErrorsInCode(r'''
+class Foo<T> {
+  factory Foo.a() = _Foo;
+
+  Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  _Foo();
+}
+
+Foo<T> bar<T>() => .a();
+''');
+
+    var node = findNode.singleDotShorthandConstructorInvocation;
+    assertResolvedNodeText(node, r'''
+DotShorthandConstructorInvocation
+  period: .
+  constructorName: SimpleIdentifier
+    token: a
+    element: ConstructorMember
+      baseElement: <testLibrary>::@class::Foo::@constructor::a
+      substitution: {T: T}
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  isDotShorthand: true
+  staticType: Foo<T>
+''');
+  }
+
+  test_factory_const() async {
+    await assertNoErrorsInCode(r'''
+class Foo<T> {
+  const factory Foo.a() = _Foo;
+
+  const Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  const _Foo();
+}
+
+Foo<T> bar<T>() => const .a();
+''');
+
+    var node = findNode.singleDotShorthandConstructorInvocation;
+    assertResolvedNodeText(node, r'''
+DotShorthandConstructorInvocation
+  constKeyword: const
+  period: .
+  constructorName: SimpleIdentifier
+    token: a
+    element: ConstructorMember
+      baseElement: <testLibrary>::@class::Foo::@constructor::a
+      substitution: {T: Never}
+    staticType: null
+  argumentList: ArgumentList
+    leftParenthesis: (
+    rightParenthesis: )
+  isDotShorthand: true
+  staticType: Foo<Never>
+''');
+  }
+
+  test_factory_const_typeArguments() async {
+    await assertErrorsInCode(
+      r'''
+class Foo<T> {
+  const factory Foo.a() = _Foo;
+
+  const Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  const _Foo();
+}
+
+Foo<int> bar<T>() => const .a<int>();
+''',
+      [error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 145, 5)],
+    );
+  }
+
+  test_factory_typeArguments() async {
+    await assertErrorsInCode(
+      r'''
+class Foo<T> {
+  factory Foo.a() = _Foo;
+
+  Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  _Foo();
+}
+
+Foo<T> bar<T>() => .a<T>();
+''',
+      [error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 119, 3)],
+    );
+  }
+
   test_nested_invocation() async {
     await assertNoErrorsInCode(r'''
 class C<T> {
@@ -618,8 +863,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 35, 3),
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 40, 2),
+        error(diag.dotShorthandUndefinedInvocation, 35, 3),
+        error(diag.illegalAssignmentToNonAssignable, 40, 2),
       ],
     );
   }
@@ -635,8 +880,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 37, 3),
-        error(ParserErrorCode.missingAssignableSelector, 41, 1),
+        error(diag.dotShorthandUndefinedInvocation, 37, 3),
+        error(diag.missingAssignableSelector, 41, 1),
       ],
     );
   }
@@ -654,7 +899,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 69, 3)],
+      [error(diag.missingRequiredArgument, 69, 3)],
     );
   }
 
@@ -670,14 +915,7 @@
   print(c);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .wrongNumberOfTypeArgumentsDotShorthandConstructor,
-          46,
-          5,
-        ),
-      ],
+      [error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 46, 5)],
     );
   }
 
@@ -693,14 +931,7 @@
   print(c);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .wrongNumberOfTypeArgumentsDotShorthandConstructor,
-          58,
-          5,
-        ),
-      ],
+      [error(diag.wrongNumberOfTypeArgumentsDotShorthandConstructor, 58, 5)],
     );
   }
 
@@ -712,7 +943,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandMissingContext, 24, 17)],
+      [error(diag.dotShorthandMissingContext, 24, 17)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/dot_shorthand_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/dot_shorthand_invocation_test.dart
index 5f7f7c8..0352581 100644
--- a/pkg/analyzer/test/src/dart/resolution/dot_shorthand_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/dot_shorthand_invocation_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -31,7 +30,7 @@
     : assert(const .named(1) == ctor);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandMissingContext, 114, 15)],
+      [error(diag.dotShorthandMissingContext, 114, 15)],
     );
   }
 
@@ -199,7 +198,7 @@
   print(c1);
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 77, 4)],
+      [error(diag.invocationOfNonFunctionExpression, 77, 4)],
     );
   }
 
@@ -381,7 +380,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 47, 6)],
+      [error(diag.dotShorthandUndefinedInvocation, 47, 6)],
     );
   }
 
@@ -393,7 +392,23 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 25, 6)],
+      [error(diag.dotShorthandUndefinedInvocation, 25, 6)],
+    );
+  }
+
+  test_error_notStatic() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C foo() => C();
+}
+
+void main() {
+  final C c = .foo();
+  print(c);
+}
+''',
+      [error(diag.dotShorthandUndefinedInvocation, 60, 3)],
     );
   }
 
@@ -407,7 +422,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 36, 6)],
+      [error(diag.dotShorthandUndefinedInvocation, 36, 6)],
     );
   }
 
@@ -423,7 +438,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 49, 3)],
+      [error(diag.dotShorthandUndefinedInvocation, 49, 3)],
     );
   }
 
@@ -645,8 +660,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 87, 6),
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 95, 2),
+        error(diag.dotShorthandUndefinedInvocation, 87, 6),
+        error(diag.illegalAssignmentToNonAssignable, 95, 2),
       ],
     );
   }
@@ -666,8 +681,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 89, 6),
-        error(ParserErrorCode.missingAssignableSelector, 96, 1),
+        error(diag.dotShorthandUndefinedInvocation, 89, 6),
+        error(diag.missingAssignableSelector, 96, 1),
       ],
     );
   }
@@ -686,7 +701,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 103, 6)],
+      [error(diag.missingRequiredArgument, 103, 6)],
     );
   }
 
@@ -740,7 +755,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 105, 9)],
+      [error(diag.invalidAssignment, 105, 9)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/dot_shorthand_property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/dot_shorthand_property_access_test.dart
index 4659d6c..500139d 100644
--- a/pkg/analyzer/test/src/dart/resolution/dot_shorthand_property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/dot_shorthand_property_access_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -394,7 +393,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandMissingContext, 46, 7)],
+      [error(diag.dotShorthandMissingContext, 46, 7)],
     );
   }
 
@@ -406,7 +405,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandMissingContext, 24, 7)],
+      [error(diag.dotShorthandMissingContext, 24, 7)],
     );
   }
 
@@ -420,7 +419,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandUndefinedGetter, 36, 6)],
+      [error(diag.dotShorthandUndefinedGetter, 36, 6)],
     );
   }
 
@@ -436,7 +435,7 @@
   print(c);
 }
 ''',
-      [error(CompileTimeErrorCode.dotShorthandUndefinedGetter, 49, 3)],
+      [error(diag.dotShorthandUndefinedGetter, 49, 3)],
     );
   }
 
@@ -598,8 +597,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandMissingContext, 88, 7),
-        error(ParserErrorCode.illegalAssignmentToNonAssignable, 95, 2),
+        error(diag.dotShorthandMissingContext, 88, 7),
+        error(diag.illegalAssignmentToNonAssignable, 95, 2),
       ],
     );
   }
@@ -619,8 +618,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.dotShorthandMissingContext, 90, 7),
-        error(ParserErrorCode.missingAssignableSelector, 91, 6),
+        error(diag.dotShorthandMissingContext, 90, 7),
+        error(diag.missingAssignableSelector, 91, 6),
       ],
     );
   }
@@ -661,13 +660,7 @@
   return .new;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.tearoffOfGenerativeConstructorOfAbstractClass,
-          25,
-          4,
-        ),
-      ],
+      [error(diag.tearoffOfGenerativeConstructorOfAbstractClass, 25, 4)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/enum_test.dart b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
index bb954a9..a248eac 100644
--- a/pkg/analyzer/test/src/dart/resolution/enum_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
@@ -2,15 +2,17 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
+import 'node_text_expectations.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EnumDeclarationResolutionTest);
+    defineReflectiveTests(UpdateNodeTextExpectations);
   });
 }
 
@@ -57,11 +59,11 @@
         name: double
         element: dart:core::@class::double
         type: double
-      declaredElement: <testLibraryFragment> null@null
+      declaredFragment: <testLibraryFragment> null@null
         element: isPrivate
           type: double
     rightParenthesis: )
-  declaredElement: GenericFunctionTypeElement
+  declaredFragment: GenericFunctionTypeElement
     parameters
       <empty>
         kind: required positional
@@ -105,7 +107,7 @@
   constructorElement: ConstructorMember
     baseElement: <testLibrary>::@enum::E::@constructor::named
     substitution: {T: int}
-  declaredElement: <testLibraryFragment> v@14
+  declaredFragment: <testLibraryFragment> v@14
 ''');
   }
 
@@ -135,7 +137,7 @@
   constructorElement: ConstructorMember
     baseElement: <testLibrary>::@enum::E::@constructor::new
     substitution: {T: int}
-  declaredElement: <testLibraryFragment> v@14
+  declaredFragment: <testLibraryFragment> v@14
 ''');
   }
 
@@ -179,7 +181,7 @@
   constructorElement: ConstructorMember
     baseElement: <testLibrary>::@enum::E::@constructor::named
     substitution: {T: double}
-  declaredElement: <testLibraryFragment> v@14
+  declaredFragment: <testLibraryFragment> v@14
 ''');
   }
 
@@ -211,7 +213,7 @@
           staticType: int
       rightParenthesis: )
   constructorElement: <testLibrary>::@enum::E::@constructor::named
-  declaredElement: <testLibraryFragment> v@11
+  declaredFragment: <testLibraryFragment> v@11
 ''');
   }
 
@@ -237,7 +239,7 @@
           staticType: int
       rightParenthesis: )
   constructorElement: <testLibrary>::@enum::E::@constructor::new
-  declaredElement: <testLibraryFragment> v@11
+  declaredFragment: <testLibraryFragment> v@11
 ''');
   }
 
@@ -253,7 +255,7 @@
 EnumConstantDeclaration
   name: v
   constructorElement: <testLibrary>::@enum::E::@constructor::new
-  declaredElement: <testLibraryFragment> v@11
+  declaredFragment: <testLibraryFragment> v@11
 ''');
   }
 
@@ -265,7 +267,7 @@
   const E(int a);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedEnumConstructorNamed, 13, 5)],
+      [error(diag.undefinedEnumConstructorNamed, 13, 5)],
     );
 
     var node = findNode.enumConstantDeclaration('v.');
@@ -288,7 +290,7 @@
           staticType: int
       rightParenthesis: )
   constructorElement: <null>
-  declaredElement: <testLibraryFragment> v@11
+  declaredFragment: <testLibraryFragment> v@11
 ''');
   }
 
@@ -300,7 +302,7 @@
   const E.named(int a);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedEnumConstructorUnnamed, 11, 1)],
+      [error(diag.undefinedEnumConstructorUnnamed, 11, 1)],
     );
 
     var node = findNode.enumConstantDeclaration('v(');
@@ -317,7 +319,7 @@
           staticType: int
       rightParenthesis: )
   constructorElement: <null>
-  declaredElement: <testLibraryFragment> v@11
+  declaredFragment: <testLibraryFragment> v@11
 ''');
   }
 
@@ -341,9 +343,9 @@
         initializer: IntegerLiteral
           literal: 42
           staticType: int
-        declaredElement: <testLibraryFragment> foo@22
+        declaredFragment: <testLibraryFragment> foo@22
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -373,7 +375,7 @@
         staticType: int
       staticType: Never
     semicolon: ;
-  declaredElement: <testLibraryFragment> foo@25
+  declaredFragment: <testLibraryFragment> foo@25
     element: <testLibrary>::@enum::E::@getter::foo
       type: T Function()
 ''');
@@ -445,7 +447,7 @@
     typeParameters
       TypeParameter
         name: U
-        declaredElement: <testLibraryFragment> U@27
+        declaredFragment: <testLibraryFragment> U@27
           defaultType: dynamic
     rightBracket: >
   parameters: FormalParameterList
@@ -456,7 +458,7 @@
         element: #E0 T
         type: T
       name: t
-      declaredElement: <testLibraryFragment> t@32
+      declaredFragment: <testLibraryFragment> t@32
         element: isPublic
           type: T
     parameter: SimpleFormalParameter
@@ -465,7 +467,7 @@
         element: #E1 U
         type: U
       name: u
-      declaredElement: <testLibraryFragment> u@37
+      declaredFragment: <testLibraryFragment> u@37
         element: isPublic
           type: U
     rightParenthesis: )
@@ -475,7 +477,7 @@
       literal: 0
       staticType: int
     semicolon: ;
-  declaredElement: <testLibraryFragment> foo@23
+  declaredFragment: <testLibraryFragment> foo@23
     element: <testLibrary>::@enum::E::@method::foo
       type: int Function<U>(T, U)
 ''');
@@ -505,7 +507,7 @@
     expression: SimpleStringLiteral
       literal: 'E'
     semicolon: ;
-  declaredElement: <testLibraryFragment> toString@23
+  declaredFragment: <testLibraryFragment> toString@23
     element: <testLibrary>::@enum::E::@method::toString
       type: String Function()
 ''');
@@ -564,6 +566,612 @@
 ''');
   }
 
+  test_nameWithTypeParameters_hasTypeParameters() async {
+    var code = r'''
+enum A<T extends int> {v}
+''';
+
+    await assertNoErrorsInCode(code);
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: NameWithTypeParameters
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          extendsKeyword: extends
+          bound: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          declaredFragment: <testLibraryFragment> T@7
+            defaultType: int
+      rightBracket: >
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        constructorElement: ConstructorMember
+          baseElement: <testLibrary>::@enum::A::@constructor::new
+          substitution: {T: int}
+        declaredFragment: <testLibraryFragment> v@23
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_nameWithTypeParameters_noTypeParameters() async {
+    var code = r'''
+enum A {v}
+''';
+
+    await assertNoErrorsInCode(code);
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@8
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_default_namedOptional_final() async {
+    await assertNoErrorsInCode(r'''
+enum A({final int a = 0}) { v(a: 1) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      leftDelimiter: {
+      parameter: DefaultFormalParameter
+        parameter: SimpleFormalParameter
+          keyword: final
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          name: a
+          declaredFragment: <testLibraryFragment> a@18
+            element: isFinal isPublic
+              type: int
+              field: <testLibrary>::@enum::A::@field::a
+        separator: =
+        defaultValue: IntegerLiteral
+          literal: 0
+          staticType: int
+        declaredFragment: <testLibraryFragment> a@18
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@enum::A::@field::a
+      rightDelimiter: }
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A Function({int a})
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              NamedExpression
+                name: Label
+                  label: SimpleIdentifier
+                    token: a
+                    element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+                    staticType: null
+                  colon: :
+                expression: IntegerLiteral
+                  literal: 1
+                  staticType: int
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@28
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_default_namedRequired_final() async {
+    await assertNoErrorsInCode(r'''
+enum A({required final int a}) { v(a: 0) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      leftDelimiter: {
+      parameter: DefaultFormalParameter
+        parameter: SimpleFormalParameter
+          requiredKeyword: required
+          keyword: final
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          name: a
+          declaredFragment: <testLibraryFragment> a@27
+            element: isFinal isPublic
+              type: int
+              field: <testLibrary>::@enum::A::@field::a
+        declaredFragment: <testLibraryFragment> a@27
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@enum::A::@field::a
+      rightDelimiter: }
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A Function({required int a})
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              NamedExpression
+                name: Label
+                  label: SimpleIdentifier
+                    token: a
+                    element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+                    staticType: null
+                  colon: :
+                expression: IntegerLiteral
+                  literal: 0
+                  staticType: int
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@33
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_functionTyped_final() async {
+    await assertNoErrorsInCode(r'''
+enum A(final int a(String x)) { v(foo) }
+int foo(String _) => 0;
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: FunctionTypedFormalParameter
+        keyword: final
+        returnType: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        parameters: FormalParameterList
+          leftParenthesis: (
+          parameter: SimpleFormalParameter
+            type: NamedType
+              name: String
+              element: dart:core::@class::String
+              type: String
+            name: x
+            declaredFragment: <testLibraryFragment> x@26
+              element: isPublic
+                type: String
+          rightParenthesis: )
+        declaredFragment: <testLibraryFragment> a@17
+          element: isFinal isPublic
+            type: int Function(String)
+            field: <testLibrary>::@enum::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A Function(int Function(String))
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              SimpleIdentifier
+                token: foo
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+                element: <testLibrary>::@function::foo
+                staticType: int Function(String)
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@32
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_simple_final() async {
+    await assertNoErrorsInCode(r'''
+enum A(final int a) { v(0) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        keyword: final
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@17
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@enum::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A Function(int)
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              IntegerLiteral
+                literal: 0
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+                staticType: int
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@22
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_fieldFormalParameter() async {
+    await assertNoErrorsInCode(r'''
+enum A(int this.a) {
+  v(0);
+  final int a;
+}
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: FieldFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        thisKeyword: this
+        period: .
+        name: a
+        declaredFragment: <testLibraryFragment> a@16
+          element: isFinal isPublic
+            type: int
+            field: <testLibrary>::@enum::A::@field::a
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A Function(int)
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              IntegerLiteral
+                literal: 0
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+                staticType: int
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@23
+    semicolon: ;
+    members
+      FieldDeclaration
+        fields: VariableDeclarationList
+          keyword: final
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          variables
+            VariableDeclaration
+              name: a
+              declaredFragment: <testLibraryFragment> a@41
+        semicolon: ;
+        declaredFragment: <null>
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_hasTypeParameters_named() async {
+    await assertNoErrorsInCode(r'''
+enum A<T>.named(T t) { v.named(0) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          declaredFragment: <testLibraryFragment> T@7
+            defaultType: dynamic
+      rightBracket: >
+    constructorName: PrimaryConstructorName
+      period: .
+      name: named
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: T
+          element: #E0 T
+          type: T
+        name: t
+        declaredFragment: <testLibraryFragment> t@18
+          element: isPublic
+            type: T
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> named@10
+      element: <testLibrary>::@enum::A::@constructor::named
+        type: A<T> Function(T)
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          constructorSelector: ConstructorSelector
+            period: .
+            name: SimpleIdentifier
+              token: named
+              element: <null>
+              staticType: null
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              IntegerLiteral
+                literal: 0
+                correspondingParameter: ParameterMember
+                  baseElement: <testLibrary>::@enum::A::@constructor::named::@formalParameter::t
+                  substitution: {T: int}
+                staticType: int
+            rightParenthesis: )
+        constructorElement: ConstructorMember
+          baseElement: <testLibrary>::@enum::A::@constructor::named
+          substitution: {T: int}
+        declaredFragment: <testLibraryFragment> v@23
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_hasTypeParameters_unnamed() async {
+    await assertNoErrorsInCode(r'''
+enum A<T>(T t) { v(0) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          declaredFragment: <testLibraryFragment> T@7
+            defaultType: dynamic
+      rightBracket: >
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: T
+          element: #E0 T
+          type: T
+        name: t
+        declaredFragment: <testLibraryFragment> t@12
+          element: isPublic
+            type: T
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A<T> Function(T)
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              IntegerLiteral
+                literal: 0
+                correspondingParameter: ParameterMember
+                  baseElement: <testLibrary>::@enum::A::@constructor::new::@formalParameter::t
+                  substitution: {T: int}
+                staticType: int
+            rightParenthesis: )
+        constructorElement: ConstructorMember
+          baseElement: <testLibrary>::@enum::A::@constructor::new
+          substitution: {T: int}
+        declaredFragment: <testLibraryFragment> v@17
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_noTypeParameters_named() async {
+    await assertNoErrorsInCode(r'''
+enum A.named(int a) { v.named(0) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    constructorName: PrimaryConstructorName
+      period: .
+      name: named
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@17
+          element: isPublic
+            type: int
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> named@7
+      element: <testLibrary>::@enum::A::@constructor::named
+        type: A Function(int)
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          constructorSelector: ConstructorSelector
+            period: .
+            name: SimpleIdentifier
+              token: named
+              element: <null>
+              staticType: null
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              IntegerLiteral
+                literal: 0
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::named::@formalParameter::a
+                staticType: int
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::named
+        declaredFragment: <testLibraryFragment> v@22
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
+  test_primaryConstructor_noTypeParameters_unnamed() async {
+    await assertNoErrorsInCode(r'''
+enum A(int a) { v(0) }
+''');
+
+    var node = findNode.singleEnumDeclaration;
+    assertResolvedNodeText(node, r'''
+EnumDeclaration
+  enumKeyword: enum
+  namePart: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: a
+        declaredFragment: <testLibraryFragment> a@11
+          element: isPublic
+            type: int
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@enum::A::@constructor::new
+        type: A Function(int)
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+        arguments: EnumConstantArguments
+          argumentList: ArgumentList
+            leftParenthesis: (
+            arguments
+              IntegerLiteral
+                literal: 0
+                correspondingParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::a
+                staticType: int
+            rightParenthesis: )
+        constructorElement: <testLibrary>::@enum::A::@constructor::new
+        declaredFragment: <testLibraryFragment> v@16
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@5
+''');
+  }
+
   test_setter() async {
     await assertNoErrorsInCode(r'''
 enum E<T> {
@@ -585,7 +1193,7 @@
         element: #E0 T
         type: T
       name: a
-      declaredElement: <testLibraryFragment> a@29
+      declaredFragment: <testLibraryFragment> a@29
         element: isPublic
           type: T
     rightParenthesis: )
@@ -593,7 +1201,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> foo@23
+  declaredFragment: <testLibraryFragment> foo@23
     element: <testLibrary>::@enum::E::@setter::foo
       type: void Function(T)
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
index a98b2a2..17a5865 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -50,9 +49,9 @@
 }
 ''',
       [
-        error(ParserErrorCode.expectedToken, 10, 1),
-        error(ParserErrorCode.expectedTypeName, 12, 1),
-        error(ParserErrorCode.extensionDeclaresConstructor, 16, 1),
+        error(diag.expectedToken, 10, 1),
+        error(diag.expectedTypeName, 12, 1),
+        error(diag.extensionDeclaresConstructor, 16, 1),
       ],
     );
   }
@@ -65,9 +64,9 @@
 }
 ''',
       [
-        error(ParserErrorCode.expectedToken, 10, 1),
-        error(ParserErrorCode.expectedTypeName, 12, 1),
-        error(ParserErrorCode.extensionDeclaresConstructor, 16, 7),
+        error(diag.expectedToken, 10, 1),
+        error(diag.expectedTypeName, 12, 1),
+        error(diag.extensionDeclaresConstructor, 16, 7),
       ],
     );
   }
@@ -172,7 +171,7 @@
   c.a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 40, 1)],
+      [error(diag.undefinedGetter, 40, 1)],
     );
   }
 
@@ -191,7 +190,7 @@
   c.a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 40, 1)],
+      [error(diag.undefinedGetter, 40, 1)],
     );
   }
 
@@ -210,7 +209,7 @@
   c._a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 33, 2)],
+      [error(diag.undefinedGetter, 33, 2)],
     );
   }
 
@@ -297,7 +296,7 @@
   c.a;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 38, 1)],
+      [error(diag.unusedLocalVariable, 38, 1)],
     );
     var access = findNode.prefixed('c.a');
     assertResolvedNodeText(access, r'''
@@ -328,7 +327,7 @@
   c.a;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 68, 1)],
+      [error(diag.unusedLocalVariable, 68, 1)],
     );
     var access = findNode.prefixed('c.a');
     assertResolvedNodeText(access, r'''
@@ -483,11 +482,11 @@
         name: int
         element: dart:core::@class::int
         type: int
-      declaredElement: <testLibraryFragment> null@null
+      declaredFragment: <testLibraryFragment> null@null
         element: isPrivate
           type: int
     rightParenthesis: )
-  declaredElement: GenericFunctionTypeElement
+  declaredFragment: GenericFunctionTypeElement
     parameters
       <empty>
         kind: required positional
@@ -500,10 +499,13 @@
   }
 
   test_named_onInterface() async {
-    await assertNoErrorsInCode('''
+    var code = '''
 class C { }
 extension E on C {}
-''');
+''';
+
+    await assertNoErrorsInCode(code);
+
     var extendedType = findNode.typeAnnotation('C {}');
     assertResolvedNodeText(extendedType, r'''
 NamedType
@@ -596,11 +598,11 @@
         name: String
         element: dart:core::@class::String
         type: String
-      declaredElement: <testLibraryFragment> null@null
+      declaredFragment: <testLibraryFragment> null@null
         element: isPrivate
           type: String
     rightParenthesis: )
-  declaredElement: GenericFunctionTypeElement
+  declaredFragment: GenericFunctionTypeElement
     parameters
       <empty>
         kind: required positional
@@ -1004,7 +1006,7 @@
   a.foo;
 }
 ''',
-      [error(WarningCode.deadCode, 63, 4)],
+      [error(diag.deadCode, 63, 4)],
     );
     var access = findNode.prefixed('a.foo');
     assertResolvedNodeText(access, r'''
@@ -1433,10 +1435,7 @@
   a.foo();
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 57, 1),
-        error(WarningCode.deadCode, 62, 3),
-      ],
+      [error(diag.receiverOfTypeNever, 57, 1), error(diag.deadCode, 62, 3)],
     );
 
     var node = findNode.methodInvocation('a.foo()');
@@ -1850,8 +1849,8 @@
 var a = b + c;
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 31, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 35, 1),
+        error(diag.undefinedIdentifier, 31, 1),
+        error(diag.undefinedIdentifier, 35, 1),
       ],
     );
   }
@@ -2762,7 +2761,7 @@
   dynamic.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 76, 3)],
+      [error(diag.undefinedGetter, 76, 3)],
     );
   }
 
@@ -2771,7 +2770,7 @@
       '''
 import 'dart:async';
 
-extension E on FutureOr<dynamic> {
+extension E on FutureOr<int> {
   static int get foo => 0;
 }
 
@@ -2779,7 +2778,7 @@
   FutureOr.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 109, 3)],
+      [error(diag.undefinedGetter, 105, 3)],
     );
   }
 
@@ -2794,7 +2793,7 @@
   Never.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 72, 3)],
+      [error(diag.undefinedGetter, 72, 3)],
     );
   }
 
@@ -2809,27 +2808,7 @@
   String.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 87, 3)],
-    );
-  }
-
-  test_static_getter_failure_onVoid() async {
-    await assertErrorsInCode(
-      '''
-extension E on void {
-  static int get foo => 0;
-}
-
-void f() {
-  void.foo;
-}
-''',
-      [
-        error(WarningCode.unusedLocalVariable, 57, 0),
-        error(ParserErrorCode.missingIdentifier, 69, 1),
-        error(ParserErrorCode.expectedToken, 69, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 70, 3),
-      ],
+      [error(diag.undefinedGetter, 87, 3)],
     );
   }
 
@@ -2913,6 +2892,7 @@
   A.foo;
 }
 ''');
+
     var node = findNode.prefixed('A.foo');
     assertResolvedNodeText(node, r'''
 PrefixedIdentifier
@@ -2959,6 +2939,70 @@
 ''');
   }
 
+  test_static_getter_success_onClass_viaTypedef_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+class A {}
+
+typedef T = A;
+
+extension E on T {
+  static int get foo => 0;
+}
+
+void f() {
+  A.foo;
+}
+''');
+
+    var node = findNode.prefixed('A.foo');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: A
+    element: <testLibrary>::@class::A
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: foo
+    element: <testLibrary>::@extension::E::@getter::foo
+    staticType: int
+  element: <testLibrary>::@extension::E::@getter::foo
+  staticType: int
+''');
+  }
+
+  test_static_getter_success_onClass_viaTypedef_typeArguments() async {
+    await assertNoErrorsInCode('''
+class A<X> {}
+
+typedef T<Y> = A<Y>;
+
+extension E on T<String> {
+  static int get foo => 0;
+}
+
+void f() {
+  A.foo;
+}
+''');
+
+    var node = findNode.prefixed('A.foo');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: A
+    element: <testLibrary>::@class::A
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: foo
+    element: <testLibrary>::@extension::E::@getter::foo
+    staticType: int
+  element: <testLibrary>::@extension::E::@getter::foo
+  staticType: int
+''');
+  }
+
   test_static_getter_success_onEnum_noTypeArguments() async {
     await assertNoErrorsInCode('''
 enum A { element; }
@@ -3133,7 +3177,7 @@
 ''');
   }
 
-  test_static_getter_success_viaTypedef_noTypeArguments() async {
+  test_static_getter_success_onTypedef_noTypeArguments() async {
     await assertNoErrorsInCode('''
 class A {}
 
@@ -3144,16 +3188,16 @@
 }
 
 void f() {
-  A.foo;
   T.foo;
 }
 ''');
-    var node = findNode.prefixed('A.foo');
+
+    var node = findNode.prefixed('T.foo');
     assertResolvedNodeText(node, r'''
 PrefixedIdentifier
   prefix: SimpleIdentifier
-    token: A
-    element: <testLibrary>::@class::A
+    token: T
+    element: <testLibrary>::@typeAlias::T
     staticType: null
   period: .
   identifier: SimpleIdentifier
@@ -3165,7 +3209,7 @@
 ''');
   }
 
-  test_static_getter_success_viaTypedef_typeArguments() async {
+  test_static_getter_success_onTypedef_typeArguments() async {
     await assertNoErrorsInCode('''
 class A<X> {}
 
@@ -3176,16 +3220,16 @@
 }
 
 void f() {
-  A.foo;
   T.foo;
 }
 ''');
-    var node = findNode.prefixed('A.foo');
+
+    var node = findNode.prefixed('T.foo');
     assertResolvedNodeText(node, r'''
 PrefixedIdentifier
   prefix: SimpleIdentifier
-    token: A
-    element: <testLibrary>::@class::A
+    token: T
+    element: <testLibrary>::@typeAlias::T
     staticType: null
   period: .
   identifier: SimpleIdentifier
@@ -3272,6 +3316,68 @@
 ''');
   }
 
+  test_static_setter_failure_onDynamic() async {
+    await assertErrorsInCode(
+      '''
+extension E on dynamic {
+  static void set foo(int value) {}
+}
+
+void f() {
+  dynamic.foo = 0;
+}
+''',
+      [error(diag.undefinedSetter, 85, 3)],
+    );
+  }
+
+  test_static_setter_failure_onFutureOr() async {
+    await assertErrorsInCode(
+      '''
+import 'dart:async';
+
+extension E on FutureOr<int> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  FutureOr.foo = 0;
+}
+''',
+      [error(diag.undefinedSetter, 114, 3)],
+    );
+  }
+
+  test_static_setter_failure_onNever() async {
+    await assertErrorsInCode(
+      '''
+extension E on Never {
+  static void set foo(int value) {}
+}
+
+void f() {
+  Never.foo = 0;
+}
+''',
+      [error(diag.undefinedSetter, 81, 3)],
+    );
+  }
+
+  test_static_setter_failure_onTypeVariable() async {
+    await assertErrorsInCode(
+      '''
+extension E<X extends String> on X {
+  static void set foo(int value) {}
+}
+
+void f() {
+  String.foo = 0;
+}
+''',
+      [error(diag.undefinedSetter, 96, 3)],
+    );
+  }
+
   test_static_setter_importedWithPrefix() async {
     newFile('$testPackageLibPath/lib.dart', '''
 class C {}
@@ -3364,6 +3470,512 @@
 ''');
   }
 
+  test_static_setter_success_onClass_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+class A {}
+
+extension E on A {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onClass_typeArguments() async {
+    await assertNoErrorsInCode('''
+class A<X> {}
+
+extension E on A<String> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onClass_viaTypedef_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+class A {}
+
+typedef T = A;
+
+extension E on T {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onClass_viaTypedef_typeArguments() async {
+    await assertNoErrorsInCode('''
+class A<X> {}
+
+typedef T<Y> = A<Y>;
+
+extension E on T<String> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@class::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onEnum_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+enum A { element; }
+
+extension E on A {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@enum::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onEnum_typeArguments() async {
+    await assertNoErrorsInCode('''
+enum A<X> { element; }
+
+extension E on A<String> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@enum::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onExtensionType_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+extension type A(Object? it) {}
+
+extension E on A {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@extensionType::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onExtensionType_typeArguments() async {
+    await assertNoErrorsInCode('''
+extension type A<X>(Object? it) {}
+
+extension E on A<String> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@extensionType::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onMixin_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+mixin A {}
+
+extension E on A {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@mixin::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onMixin_typeArguments() async {
+    await assertNoErrorsInCode('''
+mixin A<X> {}
+
+extension E on A<String> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  A.foo = 0;
+}
+''');
+
+    var node = findNode.assignment('A.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: A
+      element: <testLibrary>::@mixin::A
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onTypedef_noTypeArguments() async {
+    await assertNoErrorsInCode('''
+class A {}
+
+typedef T = A;
+
+extension E on T {
+  static void set foo(int value) {}
+}
+
+void f() {
+  T.foo = 0;
+}
+''');
+
+    var node = findNode.assignment('T.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: T
+      element: <testLibrary>::@typeAlias::T
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
+  test_static_setter_success_onTypedef_typeArguments() async {
+    await assertNoErrorsInCode('''
+class A<X> {}
+
+typedef T<Y> = A<Y>;
+
+extension E on T<String> {
+  static void set foo(int value) {}
+}
+
+void f() {
+  T.foo = 0;
+}
+''');
+
+    var node = findNode.assignment('T.foo = 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: T
+      element: <testLibrary>::@typeAlias::T
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: foo
+      element: <null>
+      staticType: null
+    element: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    correspondingParameter: <testLibrary>::@extension::E::@setter::foo::@formalParameter::value
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: <testLibrary>::@extension::E::@setter::foo
+  writeType: int
+  element: <null>
+  staticType: int
+''');
+  }
+
   test_static_tearoff() async {
     await assertNoErrorsInCode('''
 class C {}
@@ -3466,7 +4078,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalNoSetter, 104, 3)],
+      [error(diag.assignmentToFinalNoSetter, 104, 3)],
     );
     var assignment = findNode.assignment('foo = 0');
     assertResolvedNodeText(assignment, r'''
@@ -3877,7 +4489,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 104, 3)],
+      [error(diag.undefinedIdentifier, 104, 3)],
     );
     var node = findNode.simple('foo;');
     assertResolvedNodeText(node, r'''
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 7abbf7d..f0400a9 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_override_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_override_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -879,7 +879,7 @@
   E(0).v++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionSetter, 45, 1)],
+      [error(diag.undefinedExtensionSetter, 45, 1)],
     );
 
     var node = findNode.postfix('++;');
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart
index 44ec603..4ae8bb9 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_type_test.dart
@@ -5,188 +5,353 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
+import 'node_text_expectations.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionTypeResolutionTest);
+    defineReflectiveTests(UpdateNodeTextExpectations);
   });
 }
 
 @reflectiveTest
 class ExtensionTypeResolutionTest extends PubPackageResolutionTest {
-  test_constructor_named() async {
-    await assertNoErrorsInCode(r'''
-extension type A.named(int it) {}
-''');
+  test_constructor_formalParameter_metadata() async {
+    var code = r'''
+extension type A(@deprecated int it) {}
+''';
+
+    await assertNoErrorsInCode(code);
 
     var node = findNode.singleExtensionTypeDeclaration;
     assertResolvedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    constructorName: RepresentationConstructorName
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        metadata
+          Annotation
+            atSign: @
+            name: SimpleIdentifier
+              token: deprecated
+              element: dart:core::@getter::deprecated
+              staticType: null
+            element: dart:core::@getter::deprecated
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: it
+        declaredFragment: <testLibraryFragment> it@33
+          element: hasImplicitType isFinal isPublic
+            type: int
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
+''');
+  }
+
+  test_constructor_named() async {
+    var code = r'''
+extension type A.named(int it) {}
+''';
+
+    await assertNoErrorsInCode(code);
+
+    var node = findNode.singleExtensionTypeDeclaration;
+    assertResolvedNodeText(node, r'''
+ExtensionTypeDeclaration
+  extensionKeyword: extension
+  typeKeyword: type
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    constructorName: PrimaryConstructorName
       period: .
       name: named
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-      element: dart:core::@class::int
-      type: int
-    fieldName: it
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> it@27
-    constructorFragment: <testLibraryFragment> named@17
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> A@15
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: it
+        declaredFragment: <testLibraryFragment> it@27
+          element: hasImplicitType isFinal isPublic
+            type: int
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> named@17
+      element: <testLibrary>::@extensionType::A::@constructor::named
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
 ''');
   }
 
   test_constructor_secondary_fieldFormalParameter() async {
-    await assertNoErrorsInCode(r'''
+    var code = r'''
 extension type A(int it) {
   A.named(this.it);
 }
-''');
+''';
+
+    await assertNoErrorsInCode(code);
 
     var node = findNode.singleExtensionTypeDeclaration;
     assertResolvedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-      element: dart:core::@class::int
-      type: int
-    fieldName: it
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> it@21
-    constructorFragment: <testLibraryFragment> new@null
-  leftBracket: {
-  members
-    ConstructorDeclaration
-      returnType: SimpleIdentifier
-        token: A
-        element: <testLibrary>::@extensionType::A
-        staticType: null
-      period: .
-      name: named
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: FieldFormalParameter
-          thisKeyword: this
-          period: .
-          name: it
-          declaredElement: <testLibraryFragment> it@42
-            element: hasImplicitType isFinal isPublic
-              type: int
-        rightParenthesis: )
-      body: EmptyFunctionBody
-        semicolon: ;
-      declaredElement: <testLibraryFragment> named@31
-        element: <testLibrary>::@extensionType::A::@constructor::named
-          type: A Function(int)
-  rightBracket: }
-  declaredElement: <testLibraryFragment> A@15
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: it
+        declaredFragment: <testLibraryFragment> it@21
+          element: hasImplicitType isFinal isPublic
+            type: int
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    members
+      ConstructorDeclaration
+        typeName: SimpleIdentifier
+          token: A
+          element: <testLibrary>::@extensionType::A
+          staticType: null
+        period: .
+        name: named
+        parameters: FormalParameterList
+          leftParenthesis: (
+          parameter: FieldFormalParameter
+            thisKeyword: this
+            period: .
+            name: it
+            declaredFragment: <testLibraryFragment> it@42
+              element: hasImplicitType isFinal isPublic
+                type: int
+                field: <testLibrary>::@extensionType::A::@field::it
+          rightParenthesis: )
+        body: EmptyFunctionBody
+          semicolon: ;
+        declaredFragment: <testLibraryFragment> named@31
+          element: <testLibrary>::@extensionType::A::@constructor::named
+            type: A Function(int)
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
 ''');
   }
 
   test_constructor_secondary_fieldInitializer() async {
-    await assertNoErrorsInCode(r'''
+    var code = r'''
 extension type A(num it) {
   const A.named(int a) : it = a;
 }
-''');
+''';
+
+    await assertNoErrorsInCode(code);
 
     var node = findNode.singleExtensionTypeDeclaration;
     assertResolvedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: num
-      element: dart:core::@class::num
-      type: num
-    fieldName: it
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> it@21
-    constructorFragment: <testLibraryFragment> new@null
-  leftBracket: {
-  members
-    ConstructorDeclaration
-      constKeyword: const
-      returnType: SimpleIdentifier
-        token: A
-        element: <testLibrary>::@extensionType::A
-        staticType: null
-      period: .
-      name: named
-      parameters: FormalParameterList
-        leftParenthesis: (
-        parameter: SimpleFormalParameter
-          type: NamedType
-            name: int
-            element: dart:core::@class::int
-            type: int
-          name: a
-          declaredElement: <testLibraryFragment> a@47
-            element: isPublic
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: num
+          element: dart:core::@class::num
+          type: num
+        name: it
+        declaredFragment: <testLibraryFragment> it@21
+          element: hasImplicitType isFinal isPublic
+            type: num
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A Function(num)
+  body: BlockClassBody
+    leftBracket: {
+    members
+      ConstructorDeclaration
+        constKeyword: const
+        typeName: SimpleIdentifier
+          token: A
+          element: <testLibrary>::@extensionType::A
+          staticType: null
+        period: .
+        name: named
+        parameters: FormalParameterList
+          leftParenthesis: (
+          parameter: SimpleFormalParameter
+            type: NamedType
+              name: int
+              element: dart:core::@class::int
               type: int
-        rightParenthesis: )
-      separator: :
-      initializers
-        ConstructorFieldInitializer
-          fieldName: SimpleIdentifier
-            token: it
-            element: <testLibrary>::@extensionType::A::@field::it
-            staticType: null
-          equals: =
-          expression: SimpleIdentifier
-            token: a
-            element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::a
-            staticType: int
-      body: EmptyFunctionBody
-        semicolon: ;
-      declaredElement: <testLibraryFragment> named@37
-        element: <testLibrary>::@extensionType::A::@constructor::named
-          type: A Function(int)
-  rightBracket: }
-  declaredElement: <testLibraryFragment> A@15
+            name: a
+            declaredFragment: <testLibraryFragment> a@47
+              element: isPublic
+                type: int
+          rightParenthesis: )
+        separator: :
+        initializers
+          ConstructorFieldInitializer
+            fieldName: SimpleIdentifier
+              token: it
+              element: <testLibrary>::@extensionType::A::@field::it
+              staticType: null
+            equals: =
+            expression: SimpleIdentifier
+              token: a
+              element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::a
+              staticType: int
+        body: EmptyFunctionBody
+          semicolon: ;
+        declaredFragment: <testLibraryFragment> named@37
+          element: <testLibrary>::@extensionType::A::@constructor::named
+            type: A Function(int)
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
 ''');
   }
 
   test_constructor_unnamed() async {
-    await assertNoErrorsInCode(r'''
+    var code = r'''
 extension type A(int it) {}
-''');
+''';
+
+    await assertNoErrorsInCode(code);
 
     var node = findNode.singleExtensionTypeDeclaration;
     assertResolvedNodeText(node, r'''
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-      element: dart:core::@class::int
-      type: int
-    fieldName: it
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> it@21
-    constructorFragment: <testLibraryFragment> new@null
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> A@15
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: it
+        declaredFragment: <testLibraryFragment> it@21
+          element: hasImplicitType isFinal isPublic
+            type: int
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
+''');
+  }
+
+  test_field_staticConst() async {
+    var code = r'''
+extension type A(String it) {
+  static const int foo = 0;
+  static const int bar = 1;
+}
+''';
+
+    await assertNoErrorsInCode(code);
+
+    var node = findNode.singleExtensionTypeDeclaration;
+    assertResolvedNodeText(node, r'''
+ExtensionTypeDeclaration
+  extensionKeyword: extension
+  typeKeyword: type
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: String
+          element: dart:core::@class::String
+          type: String
+        name: it
+        declaredFragment: <testLibraryFragment> it@24
+          element: hasImplicitType isFinal isPublic
+            type: String
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A Function(String)
+  body: BlockClassBody
+    leftBracket: {
+    members
+      FieldDeclaration
+        staticKeyword: static
+        fields: VariableDeclarationList
+          keyword: const
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          variables
+            VariableDeclaration
+              name: foo
+              equals: =
+              initializer: IntegerLiteral
+                literal: 0
+                staticType: int
+              declaredFragment: <testLibraryFragment> foo@49
+        semicolon: ;
+        declaredFragment: <null>
+      FieldDeclaration
+        staticKeyword: static
+        fields: VariableDeclarationList
+          keyword: const
+          type: NamedType
+            name: int
+            element: dart:core::@class::int
+            type: int
+          variables
+            VariableDeclaration
+              name: bar
+              equals: =
+              initializer: IntegerLiteral
+                literal: 1
+                staticType: int
+              declaredFragment: <testLibraryFragment> bar@77
+        semicolon: ;
+        declaredFragment: <null>
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
 ''');
   }
 
@@ -200,17 +365,24 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-      element: dart:core::@class::int
-      type: int
-    fieldName: it
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> it@21
-    constructorFragment: <testLibraryFragment> new@null
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
+        name: it
+        declaredFragment: <testLibraryFragment> it@21
+          element: hasImplicitType isFinal isPublic
+            type: int
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A Function(int)
   implementsClause: ImplementsClause
     implementsKeyword: implements
     interfaces
@@ -218,9 +390,10 @@
         name: num
         element: dart:core::@class::num
         type: num
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> A@15
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
 ''');
   }
 
@@ -247,7 +420,7 @@
     typeParameters
       TypeParameter
         name: U
-        declaredElement: <testLibraryFragment> U@41
+        declaredFragment: <testLibraryFragment> U@41
           defaultType: dynamic
     rightBracket: >
   parameters: FormalParameterList
@@ -258,7 +431,7 @@
         element: #E0 T
         type: T
       name: t
-      declaredElement: <testLibraryFragment> t@46
+      declaredFragment: <testLibraryFragment> t@46
         element: isPublic
           type: T
     parameter: SimpleFormalParameter
@@ -267,7 +440,7 @@
         element: #E1 U
         type: U
       name: u
-      declaredElement: <testLibraryFragment> u@51
+      declaredFragment: <testLibraryFragment> u@51
         element: isPublic
           type: U
     rightParenthesis: )
@@ -288,7 +461,7 @@
             staticType: Type
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> foo@37
+  declaredFragment: <testLibraryFragment> foo@37
     element: <testLibrary>::@extensionType::A::@method::foo
       type: void Function<U>(T, U)
 ''');
@@ -304,44 +477,52 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: A
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
-        name: T
-        declaredElement: <testLibraryFragment> T@17
-          defaultType: dynamic
-      TypeParameter
-        name: U
-        declaredElement: <testLibraryFragment> U@20
-          defaultType: dynamic
-    rightBracket: >
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: Map
-      typeArguments: TypeArgumentList
-        leftBracket: <
-        arguments
-          NamedType
-            name: T
-            element: #E0 T
-            type: T
-          NamedType
-            name: U
-            element: #E1 U
-            type: U
-        rightBracket: >
-      element: dart:core::@class::Map
-      type: Map<T, U>
-    fieldName: it
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> it@33
-    constructorFragment: <testLibraryFragment> new@null
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> A@15
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: A
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          declaredFragment: <testLibraryFragment> T@17
+            defaultType: dynamic
+        TypeParameter
+          name: U
+          declaredFragment: <testLibraryFragment> U@20
+            defaultType: dynamic
+      rightBracket: >
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: Map
+          typeArguments: TypeArgumentList
+            leftBracket: <
+            arguments
+              NamedType
+                name: T
+                element: #E0 T
+                type: T
+              NamedType
+                name: U
+                element: #E1 U
+                type: U
+            rightBracket: >
+          element: dart:core::@class::Map
+          type: Map<T, U>
+        name: it
+        declaredFragment: <testLibraryFragment> it@33
+          element: hasImplicitType isFinal isPublic
+            type: Map<T, U>
+            field: <testLibrary>::@extensionType::A::@field::it
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::A::@constructor::new
+        type: A<T, U> Function(Map<T, U>)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> A@15
 ''');
   }
 
@@ -355,41 +536,49 @@
 ExtensionTypeDeclaration
   extensionKeyword: extension
   typeKeyword: type
-  name: ET
-  typeParameters: TypeParameterList
-    leftBracket: <
-    typeParameters
-      TypeParameter
+  primaryConstructor: PrimaryConstructorDeclaration
+    typeName: ET
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: _
+          declaredFragment: <testLibraryFragment> _@18
+            defaultType: dynamic
+        TypeParameter
+          name: _
+          declaredFragment: <testLibraryFragment> _@21
+            defaultType: dynamic
+        TypeParameter
+          name: _
+          extendsKeyword: extends
+          bound: NamedType
+            name: num
+            element: dart:core::@class::num
+            type: num
+          declaredFragment: <testLibraryFragment> _@24
+            defaultType: num
+      rightBracket: >
+    formalParameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: int
+          element: dart:core::@class::int
+          type: int
         name: _
-        declaredElement: <testLibraryFragment> _@18
-          defaultType: dynamic
-      TypeParameter
-        name: _
-        declaredElement: <testLibraryFragment> _@21
-          defaultType: dynamic
-      TypeParameter
-        name: _
-        extendsKeyword: extends
-        bound: NamedType
-          name: num
-          element: dart:core::@class::num
-          type: num
-        declaredElement: <testLibraryFragment> _@24
-          defaultType: num
-    rightBracket: >
-  representation: RepresentationDeclaration
-    leftParenthesis: (
-    fieldType: NamedType
-      name: int
-      element: dart:core::@class::int
-      type: int
-    fieldName: _
-    rightParenthesis: )
-    fieldFragment: <testLibraryFragment> _@43
-    constructorFragment: <testLibraryFragment> new@null
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> ET@15
+        declaredFragment: <testLibraryFragment> _@43
+          element: hasImplicitType isFinal isPrivate
+            type: int
+            field: <testLibrary>::@extensionType::ET::@field::_
+      rightParenthesis: )
+    declaredFragment: <testLibraryFragment> new@null
+      element: <testLibrary>::@extensionType::ET::@constructor::new
+        type: ET<_, _, _> Function(int)
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> ET@15
 ''');
   }
 }
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 286f9c5..dc7da34 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
@@ -40,13 +40,14 @@
         element: dart:core::@class::int
         type: int
       name: a
-      declaredElement: <testLibraryFragment> a@44
+      declaredFragment: <testLibraryFragment> a@44
         element: isPublic
           type: int
     rightParenthesis: )
-  declaredElement: <testLibraryFragment> f@38
+  declaredFragment: <testLibraryFragment> f@38
     element: isFinal isPublic
       type: void Function(int)
+      field: <testLibrary>::@class::A::@field::f
 ''');
   }
 
@@ -75,7 +76,7 @@
     typeParameters
       TypeParameter
         name: U
-        declaredElement: <testLibraryFragment> U@45
+        declaredFragment: <testLibraryFragment> U@45
           defaultType: null
     rightBracket: >
   parameters: FormalParameterList
@@ -86,13 +87,14 @@
         element: #E0 U
         type: U
       name: a
-      declaredElement: <testLibraryFragment> a@50
+      declaredFragment: <testLibraryFragment> a@50
         element: isPublic
           type: U
     rightParenthesis: )
-  declaredElement: <testLibraryFragment> f@43
+  declaredFragment: <testLibraryFragment> f@43
     element: isFinal isPublic
       type: U Function<U>(U)
+      field: <testLibrary>::@class::A::@field::f
 ''');
   }
 
@@ -119,11 +121,11 @@
     typeParameters
       TypeParameter
         name: T
-        declaredElement: <testLibraryFragment> T@54
+        declaredFragment: <testLibraryFragment> T@54
           defaultType: null
       TypeParameter
         name: U
-        declaredElement: <testLibraryFragment> U@57
+        declaredFragment: <testLibraryFragment> U@57
           defaultType: null
     rightBracket: >
   parameters: FormalParameterList
@@ -134,7 +136,7 @@
         element: #E1 U
         type: U
       name: a
-      declaredElement: <testLibraryFragment> a@62
+      declaredFragment: <testLibraryFragment> a@62
         element: isPublic
           type: U
     parameter: SimpleFormalParameter
@@ -143,13 +145,14 @@
         element: #E2 V
         type: V
       name: b
-      declaredElement: <testLibraryFragment> b@67
+      declaredFragment: <testLibraryFragment> b@67
         element: isPublic
           type: V
     rightParenthesis: )
-  declaredElement: <testLibraryFragment> f@52
+  declaredFragment: <testLibraryFragment> f@52
     element: isFinal isPublic
       type: T Function<T, U>(U, V)
+      field: <testLibrary>::@class::A::@field::f
 ''');
   }
 
@@ -167,9 +170,10 @@
   thisKeyword: this
   period: .
   name: f
-  declaredElement: <testLibraryFragment> f@28
+  declaredFragment: <testLibraryFragment> f@28
     element: hasImplicitType isFinal isPublic
       type: int
+      field: <testLibrary>::@class::A::@field::f
 ''');
   }
 
@@ -191,9 +195,10 @@
   thisKeyword: this
   period: .
   name: f
-  declaredElement: <testLibraryFragment> f@32
+  declaredFragment: <testLibraryFragment> f@32
     element: isFinal isPublic
       type: int
+      field: <testLibrary>::@class::A::@field::f
 ''');
   }
 
@@ -212,9 +217,10 @@
   thisKeyword: this
   period: .
   name: f
-  declaredElement: <testLibraryFragment> f@47
+  declaredFragment: <testLibraryFragment> f@47
     element: hasImplicitType isFinal isPublic
       type: int
+      field: <testLibrary>::@enum::E::@field::f
 ''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/field_promotion_test.dart b/pkg/analyzer/test/src/dart/resolution/field_promotion_test.dart
index 3059193..dfe979e 100644
--- a/pkg/analyzer/test/src/dart/resolution/field_promotion_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/field_promotion_test.dart
@@ -1043,7 +1043,9 @@
     ExpressionStatement
       expression: SimpleIdentifier
         token: _t
-        element: <testLibrary>::@class::C::@getter::_t
+        element: GetterMember
+          baseElement: <testLibrary>::@class::C::@getter::_t
+          substitution: {T: T}
         staticType: T
       semicolon: ;
     ExpressionStatement
@@ -1070,7 +1072,9 @@
     ExpressionStatement
       expression: SimpleIdentifier
         token: _t
-        element: <testLibrary>::@class::C::@getter::_t
+        element: GetterMember
+          baseElement: <testLibrary>::@class::C::@getter::_t
+          substitution: {T: T}
         staticType: T?
       semicolon: ;
     ExpressionStatement
@@ -1224,7 +1228,9 @@
       expression: FunctionExpressionInvocation
         function: SimpleIdentifier
           token: _f
-          element: <testLibrary>::@class::C::@getter::_f
+          element: GetterMember
+            baseElement: <testLibrary>::@class::C::@getter::_f
+            substitution: {T: T}
           staticType: T Function()
         argumentList: ArgumentList
           leftParenthesis: (
@@ -1265,7 +1271,9 @@
       expression: FunctionExpressionInvocation
         function: SimpleIdentifier
           token: _f
-          element: <testLibrary>::@class::C::@getter::_f
+          element: GetterMember
+            baseElement: <testLibrary>::@class::C::@getter::_f
+            substitution: {T: T}
           staticType: T? Function()
         argumentList: ArgumentList
           leftParenthesis: (
diff --git a/pkg/analyzer/test/src/dart/resolution/field_test.dart b/pkg/analyzer/test/src/dart/resolution/field_test.dart
index d873ea2..675d5df 100644
--- a/pkg/analyzer/test/src/dart/resolution/field_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/field_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -24,7 +23,7 @@
   late Object f = super;
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 28, 5)],
+      [error(diag.missingAssignableSelector, 28, 5)],
     );
 
     var node = findNode.singleFieldDeclaration;
@@ -43,9 +42,9 @@
         initializer: SuperExpression
           superKeyword: super
           staticType: A
-        declaredElement: <testLibraryFragment> f@24
+        declaredFragment: <testLibraryFragment> f@24
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -72,9 +71,9 @@
         initializer: ThisExpression
           thisKeyword: this
           staticType: A
-        declaredElement: <testLibraryFragment> f@24
+        declaredFragment: <testLibraryFragment> f@24
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -86,7 +85,7 @@
   final int b = a;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 45, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 45, 1)],
     );
 
     var node = findNode.fieldDeclaration('b =');
@@ -106,9 +105,9 @@
           token: a
           element: <testLibrary>::@class::A::@getter::a
           staticType: int
-        declaredElement: <testLibraryFragment> b@41
+        declaredFragment: <testLibraryFragment> b@41
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -120,7 +119,7 @@
   final int b = a;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 44, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 44, 1)],
     );
 
     var node = findNode.fieldDeclaration('b =');
@@ -140,9 +139,9 @@
           token: a
           element: <testLibrary>::@class::A::@getter::a
           staticType: int
-        declaredElement: <testLibraryFragment> b@40
+        declaredFragment: <testLibraryFragment> b@40
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -154,7 +153,7 @@
   final int b = a();
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 42, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 42, 1)],
     );
 
     var node = findNode.fieldDeclaration('b =');
@@ -180,9 +179,9 @@
             rightParenthesis: )
           staticInvokeType: int Function()
           staticType: int
-        declaredElement: <testLibraryFragment> b@38
+        declaredFragment: <testLibraryFragment> b@38
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -193,7 +192,7 @@
   final a = this;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 22, 4)],
+      [error(diag.invalidReferenceToThis, 22, 4)],
     );
 
     var node = findNode.singleFieldDeclaration;
@@ -208,9 +207,9 @@
         initializer: ThisExpression
           thisKeyword: this
           staticType: A
-        declaredElement: <testLibraryFragment> a@18
+        declaredFragment: <testLibraryFragment> a@18
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -291,9 +290,9 @@
           leftBracket: [
           rightBracket: ]
           staticType: List<T>
-        declaredElement: <testLibraryFragment> f@19
+        declaredFragment: <testLibraryFragment> f@19
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
index 98ac776..10bf7a1 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_element_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -147,7 +147,7 @@
   [for (var (a) in x) a];
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 38, 1)],
+      [error(diag.forInOfInvalidType, 38, 1)],
     );
     var node = findNode.forElement('for');
     assertResolvedNodeText(node, r'''
@@ -469,7 +469,7 @@
   [await for (var (a) in x) a];
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 50, 1)],
+      [error(diag.forInOfInvalidType, 50, 1)],
     );
     var node = findNode.forElement('for');
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
index 8c38b54b..343c408 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -81,7 +80,7 @@
   for (var v in values) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 36, 1)],
+      [error(diag.unusedLocalVariable, 36, 1)],
     );
 
     var node = findNode.singleForStatement;
@@ -117,7 +116,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 26, 1)],
+      [error(diag.missingIdentifier, 26, 1)],
     );
 
     var node = findNode.forStatement('for');
@@ -161,8 +160,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 70, 1),
-        error(ParserErrorCode.missingAssignableSelector, 75, 5),
+        error(diag.unusedLocalVariable, 70, 1),
+        error(diag.missingAssignableSelector, 75, 5),
       ],
     );
 
@@ -502,7 +501,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 76, 5)],
+      [error(diag.missingAssignableSelector, 76, 5)],
     );
     var node = findNode.singleForStatement;
     assertResolvedNodeText(node, r'''
@@ -626,7 +625,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 37, 1)],
+      [error(diag.forInOfInvalidType, 37, 1)],
     );
     var node = findNode.forStatement('for');
     assertResolvedNodeText(node, r'''
@@ -674,8 +673,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 71, 1),
-        error(ParserErrorCode.missingAssignableSelector, 77, 5),
+        error(diag.unusedLocalVariable, 71, 1),
+        error(diag.missingAssignableSelector, 77, 5),
       ],
     );
     var node = findNode.singleForStatement;
@@ -715,7 +714,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 27, 1)],
+      [error(diag.unusedLocalVariable, 27, 1)],
     );
     var node = findNode.forStatement('for');
     assertResolvedNodeText(node, r'''
@@ -767,7 +766,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 23, 1)],
+      [error(diag.unusedLocalVariable, 23, 1)],
     );
     var node = findNode.forStatement('for');
     assertResolvedNodeText(node, r'''
@@ -956,7 +955,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 49, 1)],
+      [error(diag.forInOfInvalidType, 49, 1)],
     );
     var node = findNode.singleForStatement;
     assertResolvedNodeText(node, r'''
@@ -1341,7 +1340,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 35, 5)],
+      [error(diag.missingAssignableSelector, 35, 5)],
     );
 
     var node = findNode.singleForStatement;
diff --git a/pkg/analyzer/test/src/dart/resolution/function_declaration_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/function_declaration_statement_test.dart
index 8cdb30d..5b111c5 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_declaration_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_declaration_statement_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   T g<T, U>(T a, U b) => a;
 }
 ''',
-      [error(WarningCode.unusedElement, 15, 1)],
+      [error(diag.unusedElement, 15, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -41,11 +41,11 @@
         typeParameters
           TypeParameter
             name: T
-            declaredElement: <testLibraryFragment> T@17
+            declaredFragment: <testLibraryFragment> T@17
               defaultType: dynamic
           TypeParameter
             name: U
-            declaredElement: <testLibraryFragment> U@20
+            declaredFragment: <testLibraryFragment> U@20
               defaultType: dynamic
         rightBracket: >
       parameters: FormalParameterList
@@ -56,7 +56,7 @@
             element: #E0 T
             type: T
           name: a
-          declaredElement: <testLibraryFragment> a@25
+          declaredFragment: <testLibraryFragment> a@25
             element: isPublic
               type: T
         parameter: SimpleFormalParameter
@@ -65,7 +65,7 @@
             element: #E1 U
             type: U
           name: b
-          declaredElement: <testLibraryFragment> b@30
+          declaredFragment: <testLibraryFragment> b@30
             element: isPublic
               type: U
         rightParenthesis: )
@@ -76,11 +76,11 @@
           element: a@25
           staticType: T
         semicolon: ;
-      declaredElement: <testLibraryFragment> g@15
+      declaredFragment: <testLibraryFragment> g@15
         element: g@15
           type: T Function<T, U>(T, U)
       staticType: T Function<T, U>(T, U)
-    declaredElement: <testLibraryFragment> g@15
+    declaredFragment: <testLibraryFragment> g@15
       element: g@15
         type: T Function<T, U>(T, U)
 ''');
@@ -93,7 +93,7 @@
   void g<T extends U, U, V extends U>(T x, U y, V z) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -116,11 +116,11 @@
               name: U
               element: #E0 U
               type: U
-            declaredElement: <testLibraryFragment> T@20
+            declaredFragment: <testLibraryFragment> T@20
               defaultType: dynamic
           TypeParameter
             name: U
-            declaredElement: <testLibraryFragment> U@33
+            declaredFragment: <testLibraryFragment> U@33
               defaultType: dynamic
           TypeParameter
             name: V
@@ -129,7 +129,7 @@
               name: U
               element: #E0 U
               type: U
-            declaredElement: <testLibraryFragment> V@36
+            declaredFragment: <testLibraryFragment> V@36
               defaultType: dynamic
         rightBracket: >
       parameters: FormalParameterList
@@ -140,7 +140,7 @@
             element: #E1 T
             type: T
           name: x
-          declaredElement: <testLibraryFragment> x@51
+          declaredFragment: <testLibraryFragment> x@51
             element: isPublic
               type: T
         parameter: SimpleFormalParameter
@@ -149,7 +149,7 @@
             element: #E0 U
             type: U
           name: y
-          declaredElement: <testLibraryFragment> y@56
+          declaredFragment: <testLibraryFragment> y@56
             element: isPublic
               type: U
         parameter: SimpleFormalParameter
@@ -158,7 +158,7 @@
             element: #E2 V
             type: V
           name: z
-          declaredElement: <testLibraryFragment> z@61
+          declaredFragment: <testLibraryFragment> z@61
             element: isPublic
               type: V
         rightParenthesis: )
@@ -166,11 +166,11 @@
         block: Block
           leftBracket: {
           rightBracket: }
-      declaredElement: <testLibraryFragment> g@18
+      declaredFragment: <testLibraryFragment> g@18
         element: g@18
           type: void Function<T extends U, U, V extends U>(T, U, V)
       staticType: void Function<T extends U, U, V extends U>(T, U, V)
-    declaredElement: <testLibraryFragment> g@18
+    declaredFragment: <testLibraryFragment> g@18
       element: g@18
         type: void Function<T extends U, U, V extends U>(T, U, V)
 ''');
@@ -183,7 +183,7 @@
   void g<T>({T? a}) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -201,7 +201,7 @@
         typeParameters
           TypeParameter
             name: T
-            declaredElement: <testLibraryFragment> T@20
+            declaredFragment: <testLibraryFragment> T@20
               defaultType: dynamic
         rightBracket: >
       parameters: FormalParameterList
@@ -215,10 +215,10 @@
               element: #E0 T
               type: T?
             name: a
-            declaredElement: <testLibraryFragment> a@27
+            declaredFragment: <testLibraryFragment> a@27
               element: isPublic
                 type: T?
-          declaredElement: <testLibraryFragment> a@27
+          declaredFragment: <testLibraryFragment> a@27
             element: isPublic
               type: T?
         rightDelimiter: }
@@ -227,11 +227,11 @@
         block: Block
           leftBracket: {
           rightBracket: }
-      declaredElement: <testLibraryFragment> g@18
+      declaredFragment: <testLibraryFragment> g@18
         element: g@18
           type: void Function<T>({T? a})
       staticType: void Function<T>({T? a})
-    declaredElement: <testLibraryFragment> g@18
+    declaredFragment: <testLibraryFragment> g@18
       element: g@18
         type: void Function<T>({T? a})
 ''');
@@ -244,7 +244,7 @@
   void g<T>([T? a]) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -262,7 +262,7 @@
         typeParameters
           TypeParameter
             name: T
-            declaredElement: <testLibraryFragment> T@20
+            declaredFragment: <testLibraryFragment> T@20
               defaultType: dynamic
         rightBracket: >
       parameters: FormalParameterList
@@ -276,10 +276,10 @@
               element: #E0 T
               type: T?
             name: a
-            declaredElement: <testLibraryFragment> a@27
+            declaredFragment: <testLibraryFragment> a@27
               element: isPublic
                 type: T?
-          declaredElement: <testLibraryFragment> a@27
+          declaredFragment: <testLibraryFragment> a@27
             element: isPublic
               type: T?
         rightDelimiter: ]
@@ -288,11 +288,11 @@
         block: Block
           leftBracket: {
           rightBracket: }
-      declaredElement: <testLibraryFragment> g@18
+      declaredFragment: <testLibraryFragment> g@18
         element: g@18
           type: void Function<T>([T?])
       staticType: void Function<T>([T?])
-    declaredElement: <testLibraryFragment> g@18
+    declaredFragment: <testLibraryFragment> g@18
       element: g@18
         type: void Function<T>([T?])
 ''');
@@ -305,7 +305,7 @@
   void g<T>({required T? a}) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -323,7 +323,7 @@
         typeParameters
           TypeParameter
             name: T
-            declaredElement: <testLibraryFragment> T@20
+            declaredFragment: <testLibraryFragment> T@20
               defaultType: dynamic
         rightBracket: >
       parameters: FormalParameterList
@@ -338,10 +338,10 @@
               element: #E0 T
               type: T?
             name: a
-            declaredElement: <testLibraryFragment> a@36
+            declaredFragment: <testLibraryFragment> a@36
               element: isPublic
                 type: T?
-          declaredElement: <testLibraryFragment> a@36
+          declaredFragment: <testLibraryFragment> a@36
             element: isPublic
               type: T?
         rightDelimiter: }
@@ -350,11 +350,11 @@
         block: Block
           leftBracket: {
           rightBracket: }
-      declaredElement: <testLibraryFragment> g@18
+      declaredFragment: <testLibraryFragment> g@18
         element: g@18
           type: void Function<T>({required T? a})
       staticType: void Function<T>({required T? a})
-    declaredElement: <testLibraryFragment> g@18
+    declaredFragment: <testLibraryFragment> g@18
       element: g@18
         type: void Function<T>({required T? a})
 ''');
@@ -367,7 +367,7 @@
   void g<T>(T a) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -385,7 +385,7 @@
         typeParameters
           TypeParameter
             name: T
-            declaredElement: <testLibraryFragment> T@20
+            declaredFragment: <testLibraryFragment> T@20
               defaultType: dynamic
         rightBracket: >
       parameters: FormalParameterList
@@ -396,7 +396,7 @@
             element: #E0 T
             type: T
           name: a
-          declaredElement: <testLibraryFragment> a@25
+          declaredFragment: <testLibraryFragment> a@25
             element: isPublic
               type: T
         rightParenthesis: )
@@ -404,11 +404,11 @@
         block: Block
           leftBracket: {
           rightBracket: }
-      declaredElement: <testLibraryFragment> g@18
+      declaredFragment: <testLibraryFragment> g@18
         element: g@18
           type: void Function<T>(T)
       staticType: void Function<T>(T)
-    declaredElement: <testLibraryFragment> g@18
+    declaredFragment: <testLibraryFragment> g@18
       element: g@18
         type: void Function<T>(T)
 ''');
@@ -421,7 +421,7 @@
   g() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 13, 1)],
+      [error(diag.unusedElement, 13, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -437,11 +437,11 @@
         block: Block
           leftBracket: {
           rightBracket: }
-      declaredElement: <testLibraryFragment> g@13
+      declaredFragment: <testLibraryFragment> g@13
         element: g@13
           type: Null Function()
       staticType: Null Function()
-    declaredElement: <testLibraryFragment> g@13
+    declaredFragment: <testLibraryFragment> g@13
       element: g@13
         type: Null Function()
 ''');
@@ -454,7 +454,7 @@
   g() => 0;
 }
 ''',
-      [error(WarningCode.unusedElement, 13, 1)],
+      [error(diag.unusedElement, 13, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement;
@@ -472,11 +472,11 @@
           literal: 0
           staticType: int
         semicolon: ;
-      declaredElement: <testLibraryFragment> g@13
+      declaredFragment: <testLibraryFragment> g@13
         element: g@13
           type: int Function()
       staticType: int Function()
-    declaredElement: <testLibraryFragment> g@13
+    declaredFragment: <testLibraryFragment> g@13
       element: g@13
         type: int Function()
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/function_declaration_test.dart b/pkg/analyzer/test/src/dart/resolution/function_declaration_test.dart
index 018fb57..450d677 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_declaration_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -25,7 +24,7 @@
   return 0;
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 49, 6)],
+      [error(diag.returnInGenerator, 49, 6)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -61,11 +60,11 @@
               staticType: int
             semicolon: ;
         rightBracket: }
-    declaredElement: <testLibraryFragment> f@34
+    declaredFragment: <testLibraryFragment> f@34
       element: <testLibrary>::@function::f
         type: Stream<int> Function()
     staticType: Stream<int> Function()
-  declaredElement: <testLibraryFragment> f@34
+  declaredFragment: <testLibraryFragment> f@34
     element: <testLibrary>::@function::f
       type: Stream<int> Function()
 ''');
@@ -78,7 +77,7 @@
 
 Stream<int> f() async* => 0;
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 45, 2)],
+      [error(diag.returnInGenerator, 45, 2)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -109,11 +108,11 @@
         literal: 0
         staticType: int
       semicolon: ;
-    declaredElement: <testLibraryFragment> f@34
+    declaredFragment: <testLibraryFragment> f@34
       element: <testLibrary>::@function::f
         type: Stream<int> Function()
     staticType: Stream<int> Function()
-  declaredElement: <testLibraryFragment> f@34
+  declaredFragment: <testLibraryFragment> f@34
     element: <testLibrary>::@function::f
       type: Stream<int> Function()
 ''');
@@ -194,7 +193,7 @@
               rightBracket: >
             element: dart:core::@class::List
             type: List<T>
-          declaredElement: <testLibraryFragment> T@7
+          declaredFragment: <testLibraryFragment> T@7
             defaultType: List<dynamic>
       rightBracket: >
     parameters: FormalParameterList
@@ -204,11 +203,11 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> m@5
+    declaredFragment: <testLibraryFragment> m@5
       element: <testLibrary>::@function::m
         type: void Function<T extends List<T>>()
     staticType: void Function<T extends List<T>>()
-  declaredElement: <testLibraryFragment> m@5
+  declaredFragment: <testLibraryFragment> m@5
     element: <testLibrary>::@function::m
       type: void Function<T extends List<T>>()
 ''');
@@ -238,7 +237,7 @@
             name: num
             element: dart:core::@class::num
             type: num
-          declaredElement: <testLibraryFragment> T@7
+          declaredFragment: <testLibraryFragment> T@7
             defaultType: num
       rightBracket: >
     parameters: FormalParameterList
@@ -248,11 +247,11 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> m@5
+    declaredFragment: <testLibraryFragment> m@5
       element: <testLibrary>::@function::m
         type: void Function<T extends num>()
     staticType: void Function<T extends num>()
-  declaredElement: <testLibraryFragment> m@5
+  declaredFragment: <testLibraryFragment> m@5
     element: <testLibrary>::@function::m
       type: void Function<T extends num>()
 ''');
@@ -265,7 +264,7 @@
   void m<T extends List<T>>() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement.functionDeclaration;
@@ -295,7 +294,7 @@
               rightBracket: >
             element: dart:core::@class::List
             type: List<T>
-          declaredElement: <testLibraryFragment> T@20
+          declaredFragment: <testLibraryFragment> T@20
             defaultType: List<dynamic>
       rightBracket: >
     parameters: FormalParameterList
@@ -305,11 +304,11 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> m@18
+    declaredFragment: <testLibraryFragment> m@18
       element: m@18
         type: void Function<T extends List<T>>()
     staticType: void Function<T extends List<T>>()
-  declaredElement: <testLibraryFragment> m@18
+  declaredFragment: <testLibraryFragment> m@18
     element: m@18
       type: void Function<T extends List<T>>()
 ''');
@@ -322,7 +321,7 @@
   void m<T extends num>() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 18, 1)],
+      [error(diag.unusedElement, 18, 1)],
     );
 
     var node = findNode.singleFunctionDeclarationStatement.functionDeclaration;
@@ -344,7 +343,7 @@
             name: num
             element: dart:core::@class::num
             type: num
-          declaredElement: <testLibraryFragment> T@20
+          declaredFragment: <testLibraryFragment> T@20
             defaultType: num
       rightBracket: >
     parameters: FormalParameterList
@@ -354,11 +353,11 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> m@18
+    declaredFragment: <testLibraryFragment> m@18
       element: m@18
         type: void Function<T extends num>()
     staticType: void Function<T extends num>()
-  declaredElement: <testLibraryFragment> m@18
+  declaredFragment: <testLibraryFragment> m@18
     element: m@18
       type: void Function<T extends num>()
 ''');
@@ -369,7 +368,7 @@
       '''
 int get foo(double a) => 0;
 ''',
-      [error(ParserErrorCode.getterWithParameters, 11, 1)],
+      [error(diag.getterWithParameters, 11, 1)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -390,7 +389,7 @@
           element: dart:core::@class::double
           type: double
         name: a
-        declaredElement: <testLibraryFragment> a@19
+        declaredFragment: <testLibraryFragment> a@19
           element: isPublic
             type: double
       rightParenthesis: )
@@ -400,11 +399,11 @@
         literal: 0
         staticType: int
       semicolon: ;
-    declaredElement: <testLibraryFragment> foo@8
+    declaredFragment: <testLibraryFragment> foo@8
       element: <testLibrary>::@getter::foo
         type: int Function(double)
     staticType: int Function(double)
-  declaredElement: <testLibraryFragment> foo@8
+  declaredFragment: <testLibraryFragment> foo@8
     element: <testLibrary>::@getter::foo
       type: int Function(double)
 ''');
@@ -417,7 +416,7 @@
   return 0;
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 28, 6)],
+      [error(diag.returnInGenerator, 28, 6)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -453,11 +452,11 @@
               staticType: int
             semicolon: ;
         rightBracket: }
-    declaredElement: <testLibraryFragment> f@14
+    declaredFragment: <testLibraryFragment> f@14
       element: <testLibrary>::@function::f
         type: Iterable<int> Function()
     staticType: Iterable<int> Function()
-  declaredElement: <testLibraryFragment> f@14
+  declaredFragment: <testLibraryFragment> f@14
     element: <testLibrary>::@function::f
       type: Iterable<int> Function()
 ''');
@@ -468,7 +467,7 @@
       '''
 Iterable<int> f() sync* => 0;
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 24, 2)],
+      [error(diag.returnInGenerator, 24, 2)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -499,11 +498,11 @@
         literal: 0
         staticType: int
       semicolon: ;
-    declaredElement: <testLibraryFragment> f@14
+    declaredFragment: <testLibraryFragment> f@14
       element: <testLibrary>::@function::f
         type: Iterable<int> Function()
     staticType: Iterable<int> Function()
-  declaredElement: <testLibraryFragment> f@14
+  declaredFragment: <testLibraryFragment> f@14
     element: <testLibrary>::@function::f
       type: Iterable<int> Function()
 ''');
@@ -514,7 +513,7 @@
       '''
 _() {}
 ''',
-      [error(WarningCode.unusedElement, 0, 1)],
+      [error(diag.unusedElement, 0, 1)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -529,11 +528,11 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> _@0
+    declaredFragment: <testLibraryFragment> _@0
       element: <testLibrary>::@function::_
         type: dynamic Function()
     staticType: dynamic Function()
-  declaredElement: <testLibraryFragment> _@0
+  declaredFragment: <testLibraryFragment> _@0
     element: <testLibrary>::@function::_
       type: dynamic Function()
 ''');
@@ -547,7 +546,7 @@
 
 _() {}
 ''',
-      [error(WarningCode.unusedElement, 44, 1)],
+      [error(diag.unusedElement, 44, 1)],
     );
 
     var node = findNode.singleFunctionDeclaration;
@@ -562,11 +561,11 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> _@44
+    declaredFragment: <testLibraryFragment> _@44
       element: <testLibrary>::@function::_
         type: dynamic Function()
     staticType: dynamic Function()
-  declaredElement: <testLibraryFragment> _@44
+  declaredFragment: <testLibraryFragment> _@44
     element: <testLibrary>::@function::_
       type: dynamic Function()
 ''');
@@ -580,10 +579,7 @@
       r'''
 void f<_ extends void Function<_>(_, _), _>() {}
 ''',
-      [
-        error(CompileTimeErrorCode.undefinedClass, 34, 1),
-        error(CompileTimeErrorCode.undefinedClass, 37, 1),
-      ],
+      [error(diag.undefinedClass, 34, 1), error(diag.undefinedClass, 37, 1)],
     );
 
     var node = findNode.typeParameter('<_>');
@@ -602,7 +598,7 @@
       typeParameters
         TypeParameter
           name: _
-          declaredElement: <testLibraryFragment> _@31
+          declaredFragment: <testLibraryFragment> _@31
             defaultType: null
       rightBracket: >
     parameters: FormalParameterList
@@ -612,7 +608,7 @@
           name: _
           element: <null>
           type: InvalidType
-        declaredElement: <testLibraryFragment> null@null
+        declaredFragment: <testLibraryFragment> null@null
           element: isPrivate
             type: InvalidType
       parameter: SimpleFormalParameter
@@ -620,11 +616,11 @@
           name: _
           element: <null>
           type: InvalidType
-        declaredElement: <testLibraryFragment> null@null
+        declaredFragment: <testLibraryFragment> null@null
           element: isPrivate
             type: InvalidType
       rightParenthesis: )
-    declaredElement: GenericFunctionTypeElement
+    declaredFragment: GenericFunctionTypeElement
       parameters
         <empty>
           kind: required positional
@@ -637,7 +633,7 @@
       returnType: void
       type: void Function<_>(InvalidType, InvalidType)
     type: void Function<_>(InvalidType, InvalidType)
-  declaredElement: <testLibraryFragment> _@7
+  declaredFragment: <testLibraryFragment> _@7
     defaultType: void Function<_>(InvalidType, InvalidType)
 ''');
   }
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 5f01bc8..e4e7a34 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -318,7 +318,7 @@
   a();
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 24, 1)],
+      [error(diag.invocationOfNonFunctionExpression, 24, 1)],
     );
     var node = findNode.functionExpressionInvocation('();');
     assertResolvedNodeText(node, r'''
@@ -416,7 +416,7 @@
   g(a);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 38, 1)],
+      [error(diag.extraPositionalArguments, 38, 1)],
     );
 
     var node = findNode.singleFunctionExpressionInvocation;
@@ -526,7 +526,7 @@
 const b = 0;
 const c = id(a, b);
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 58, 8)],
+      [error(diag.constInitializedWithNonConstantValue, 58, 8)],
     );
 
     var node = findNode.singleFunctionExpressionInvocation;
@@ -563,10 +563,7 @@
   x<int>(1 + 2);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 26, 8),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 26, 8)],
     );
 
     var node = findNode.functionExpressionInvocation('x<int>(1 + 2)');
@@ -616,7 +613,7 @@
   x<int>(1 + 2);
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 21, 1)],
+      [error(diag.uncheckedInvocationOfNullableValue, 21, 1)],
     );
 
     var node = findNode.functionExpressionInvocation('x<int>(1 + 2)');
diff --git a/pkg/analyzer/test/src/dart/resolution/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/function_expression_test.dart
index b51e4d7..a8e6e80 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -43,7 +43,7 @@
             rightBracket: >
           element: dart:core::@class::List
           type: List<T>
-        declaredElement: <testLibraryFragment> T@14
+        declaredFragment: <testLibraryFragment> T@14
           defaultType: List<dynamic>
     rightBracket: >
   parameters: FormalParameterList
@@ -53,7 +53,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Null Function<T extends List<T>>()
   staticType: Null Function<T extends List<T>>()
@@ -80,7 +80,7 @@
           name: num
           element: dart:core::@class::num
           type: num
-        declaredElement: <testLibraryFragment> T@14
+        declaredFragment: <testLibraryFragment> T@14
           defaultType: num
     rightBracket: >
   parameters: FormalParameterList
@@ -90,7 +90,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Null Function<T extends num>()
   staticType: Null Function<T extends num>()
@@ -102,7 +102,7 @@
       '''
 var f = ({int x = x}) {};
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 18, 1)],
+      [error(diag.undefinedIdentifier, 18, 1)],
     );
 
     var node = findNode.singleFormalParameterList;
@@ -117,7 +117,7 @@
         element: dart:core::@class::int
         type: int
       name: x
-      declaredElement: <testLibraryFragment> x@14
+      declaredFragment: <testLibraryFragment> x@14
         element: isPublic
           type: int
     separator: =
@@ -125,7 +125,7 @@
       token: x
       element: <null>
       staticType: InvalidType
-    declaredElement: <testLibraryFragment> x@14
+    declaredFragment: <testLibraryFragment> x@14
       element: isPublic
         type: int
   rightDelimiter: }
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 1a6828e..151111a 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -117,7 +116,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           42,
           5,
           messageContains: ["'A.foo'"],
@@ -160,7 +159,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           50,
           5,
           messageContains: ["'a.Future.delayed'"],
@@ -210,13 +209,7 @@
   i<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          31,
-          1,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 31, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('i<int>;'), r'''
@@ -246,13 +239,7 @@
   i<int>.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          31,
-          1,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 31, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('i<int>.foo();'), r'''
@@ -282,13 +269,7 @@
   f().instanceMethod<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericMethodTypeInstantiationOnDynamic,
-          29,
-          23,
-        ),
-      ],
+      [error(diag.genericMethodTypeInstantiationOnDynamic, 29, 23)],
     );
 
     assertResolvedNodeText(
@@ -332,7 +313,7 @@
   a.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 10, 1)],
+      [error(diag.undefinedIdentifier, 10, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -341,12 +322,12 @@
     prefix: SimpleIdentifier
       token: a
       element: <null>
-      staticType: null
+      staticType: InvalidType
     period: .
     identifier: SimpleIdentifier
       token: foo
       element: <null>
-      staticType: null
+      staticType: InvalidType
     element: <null>
     staticType: InvalidType
   typeArguments: TypeArgumentList
@@ -368,7 +349,7 @@
   a.b.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 10, 1)],
+      [error(diag.undefinedIdentifier, 10, 1)],
     );
 
     var node = findNode.functionReference('foo<int>;');
@@ -414,13 +395,7 @@
   E<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          44,
-          1,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 44, 1)],
     );
 
     var reference = findNode.functionReference('E<int>;');
@@ -454,13 +429,7 @@
   a.E<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          38,
-          3,
-        ),
-      ],
+      [error(diag.extensionAsExpression, 38, 3)],
     );
 
     var reference = findNode.functionReference('E<int>;');
@@ -475,9 +444,9 @@
     identifier: SimpleIdentifier
       token: E
       element: package:test/a.dart::@extension::E
-      staticType: InvalidType
+      staticType: dynamic
     element: package:test/a.dart::@extension::E
-    staticType: InvalidType
+    staticType: dynamic
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -503,13 +472,7 @@
   E(a).foo<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          67,
-          8,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 67, 8)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -689,7 +652,7 @@
   E(a)..foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionOverrideWithCascade, 85, 1)],
+      [error(diag.extensionOverrideWithCascade, 85, 1)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
@@ -729,13 +692,7 @@
   E(a).foo<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-          81,
-          3,
-        ),
-      ],
+      [error(diag.extensionOverrideAccessToStaticMember, 81, 3)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
@@ -787,7 +744,7 @@
   E(a).foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionGetter, 51, 3)],
+      [error(diag.undefinedExtensionGetter, 51, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -869,9 +826,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 24, 3),
+        error(diag.unusedElement, 24, 3),
         error(
-          CompileTimeErrorCode.undefinedMethod,
+          diag.undefinedMethod,
           36,
           3,
           messageContains: ["for the type 'double'"],
@@ -917,9 +874,9 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function<T>(T)
     element: <null>
-    staticType: null
+    staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -943,7 +900,7 @@
   foo.call<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 52, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 52, 5)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo.call<int>;'), r'''
@@ -957,9 +914,9 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function<T, U>(T, U)
     element: <null>
-    staticType: null
+    staticType: void Function<T, U>(T, U)
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -984,7 +941,7 @@
   foo.call<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 46, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 46, 5)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo.call<int>;'), r'''
@@ -998,9 +955,9 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function(String)
     element: <null>
-    staticType: null
+    staticType: void Function(String)
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -1014,13 +971,16 @@
   }
 
   test_function_call_typeArgNotMatchingBound() async {
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode(
+      '''
 void foo<T extends num>(T a) {}
 
 void bar() {
   foo.call<String>;
 }
-''');
+''',
+      [error(diag.typeArgumentNotMatchingBounds, 57, 6)],
+    );
 
     assertResolvedNodeText(findNode.functionReference('foo.call<String>;'), r'''
 FunctionReference
@@ -1033,9 +993,9 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function<T extends num>(T)
     element: <null>
-    staticType: null
+    staticType: void Function<T extends num>(T)
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -1076,7 +1036,7 @@
     identifier: SimpleIdentifier
       token: m
       element: <testLibrary>::@extension::0::@method::m
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@extension::0::@method::m
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -1106,7 +1066,7 @@
   static void m<T>(T t) {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 40, 1)],
+      [error(diag.undefinedGetter, 40, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo.m<int>;'), r'''
@@ -1200,9 +1160,9 @@
     identifier: SimpleIdentifier
       token: v
       element: <testLibrary>::@class::C::@getter::v
-      staticType: null
+      staticType: C
     element: <testLibrary>::@class::C::@getter::v
-    staticType: null
+    staticType: C
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -1393,7 +1353,7 @@
   C()<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 57, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 57, 5)],
     );
 
     var node = findNode.implicitCallReference('C()<int>;');
@@ -1437,7 +1397,7 @@
   C()<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 50, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 50, 5)],
     );
 
     var node = findNode.implicitCallReference('C()<int>;');
@@ -1489,7 +1449,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@getter::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@getter::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -1582,13 +1542,7 @@
   a.f<String>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          61,
-          1,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 61, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('f<String>'), r'''
@@ -1628,13 +1582,7 @@
   (a).f<String>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          63,
-          1,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 63, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('f<String>'), r'''
@@ -1724,7 +1672,7 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function<T>(T)
     element: <null>
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -1818,7 +1766,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@method::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@method::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -1847,13 +1795,7 @@
   ((a).foo<double>);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          97,
-          3,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 97, 3)],
     );
 
     var reference = findNode.functionReference('foo<double>');
@@ -1973,7 +1915,7 @@
       element: MethodMember
         baseElement: <testLibrary>::@extension::StaticType::@method::expectStaticType
         substitution: {T: int, X: X}
-      staticType: null
+      staticType: void Function<X extends int Function(int)>()
     element: MethodMember
       baseElement: <testLibrary>::@extension::StaticType::@method::expectStaticType
       substitution: {T: int, X: X}
@@ -2101,7 +2043,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperGetter, 30, 3)],
+      [error(diag.undefinedSuperGetter, 30, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -2135,7 +2077,7 @@
   super.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 10, 5)],
+      [error(diag.superInInvalidContext, 10, 5)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -2188,7 +2130,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@method::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@method::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -2267,7 +2209,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@method::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@method::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -2348,7 +2290,7 @@
   prefix.a.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 47, 3)],
+      [error(diag.undefinedGetter, 47, 3)],
     );
 
     var node = findNode.functionReference('foo<int>;');
@@ -2392,7 +2334,7 @@
   T.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 15, 3)],
+      [error(diag.undefinedGetter, 15, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -2444,7 +2386,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@method::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@method::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -2529,7 +2471,7 @@
       element: MethodMember
         baseElement: <testLibrary>::@extension::StaticType::@method::expectStaticType
         substitution: {T: int, X: X}
-      staticType: null
+      staticType: void Function<X extends int Function(int)>()
     element: MethodMember
       baseElement: <testLibrary>::@extension::StaticType::@method::expectStaticType
       substitution: {T: int, X: X}
@@ -2596,6 +2538,141 @@
 ''');
   }
 
+  test_instanceMethod_prefixedIdentifier_fromExtension() async {
+    await assertNoErrorsInCode('''
+class A {
+  void bar<T>() {}
+}
+
+extension on B {
+  A get foo => A();
+}
+
+abstract class B {
+  void f() {
+    foo.bar<int>;
+  }
+}
+''');
+
+    var node = findNode.singleFunctionReference;
+    assertResolvedNodeText(node, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      element: <testLibrary>::@extension::0::@getter::foo
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: bar
+      element: <testLibrary>::@class::A::@method::bar
+      staticType: void Function<T>()
+    element: <testLibrary>::@class::A::@method::bar
+    staticType: void Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: int
+        element: dart:core::@class::int
+        type: int
+    rightBracket: >
+  staticType: void Function()
+  typeArgumentTypes
+    int
+''');
+  }
+
+  test_instanceMethod_prefixedIdentifier_fromSuper() async {
+    await assertNoErrorsInCode('''
+class A {
+  void bar<T>() {}
+}
+
+abstract class B {
+  A get foo;
+}
+
+abstract class C extends B {
+  void f() {
+    foo.bar<int>;
+  }
+}
+''');
+
+    var node = findNode.singleFunctionReference;
+    assertResolvedNodeText(node, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      element: <testLibrary>::@class::B::@getter::foo
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: bar
+      element: <testLibrary>::@class::A::@method::bar
+      staticType: void Function<T>()
+    element: <testLibrary>::@class::A::@method::bar
+    staticType: void Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: int
+        element: dart:core::@class::int
+        type: int
+    rightBracket: >
+  staticType: void Function()
+  typeArgumentTypes
+    int
+''');
+  }
+
+  test_instanceMethod_prefixedIdentifier_fromThis() async {
+    await assertNoErrorsInCode('''
+class A {
+  void bar<T>() {}
+}
+
+abstract class B {
+  A get foo;
+  void f() {
+    foo.bar<int>;
+  }
+}
+''');
+
+    var node = findNode.singleFunctionReference;
+    assertResolvedNodeText(node, r'''
+FunctionReference
+  function: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: foo
+      element: <testLibrary>::@class::B::@getter::foo
+      staticType: A
+    period: .
+    identifier: SimpleIdentifier
+      token: bar
+      element: <testLibrary>::@class::A::@method::bar
+      staticType: void Function<T>()
+    element: <testLibrary>::@class::A::@method::bar
+    staticType: void Function<T>()
+  typeArguments: TypeArgumentList
+    leftBracket: <
+    arguments
+      NamedType
+        name: int
+        element: dart:core::@class::int
+        type: int
+    rightBracket: >
+  staticType: void Function()
+  typeArgumentTypes
+    int
+''');
+  }
+
   test_instanceMethod_targetOfFunctionCall() async {
     await assertNoErrorsInCode('''
 extension on Function {
@@ -2642,7 +2719,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedMethod,
+          diag.undefinedMethod,
           24,
           3,
           messageContains: ["for the type 'A'"],
@@ -2679,7 +2756,7 @@
   prefix.loadLibrary;
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 8)],
+      [error(diag.unusedImport, 7, 8)],
     );
 
     var node = findNode.expressionStatement('prefix.loadLibrary');
@@ -2784,7 +2861,7 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function<T>(T)
     element: <null>
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -2811,7 +2888,7 @@
   fn.call<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 74, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 74, 5)],
     );
 
     var reference = findNode.functionReference('fn.call<int>;');
@@ -2829,7 +2906,7 @@
     identifier: SimpleIdentifier
       token: call
       element: <null>
-      staticType: null
+      staticType: void Function(int)
     element: <null>
     staticType: void Function(int)
   typeArguments: TypeArgumentList
@@ -2851,13 +2928,7 @@
   foo<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          40,
-          3,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 40, 3)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
@@ -2914,13 +2985,7 @@
   foo<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          23,
-          3,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 23, 3)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
@@ -2951,13 +3016,7 @@
   i<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          38,
-          1,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 38, 1)],
     );
 
     assertResolvedNodeText(findNode.functionReference('i<int>;'), r'''
@@ -2989,7 +3048,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 44, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 44, 5)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
@@ -3030,13 +3089,7 @@
   (1 == 2 ? foo : bar)<int, String>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction,
-          85,
-          13,
-        ),
-      ],
+      [error(diag.wrongNumberOfTypeArgumentsAnonymousFunction, 85, 13)],
     );
 
     var reference = findNode.functionReference(
@@ -3053,13 +3106,7 @@
   a.foo<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericMethodTypeInstantiationOnDynamic,
-          19,
-          5,
-        ),
-      ],
+      [error(diag.genericMethodTypeInstantiationOnDynamic, 19, 5)],
     );
 
     assertResolvedNodeText(findNode.functionReference('a.foo<int>;'), r'''
@@ -3073,9 +3120,9 @@
     identifier: SimpleIdentifier
       token: foo
       element: <null>
-      staticType: null
+      staticType: dynamic
     element: <null>
-    staticType: null
+    staticType: dynamic
   typeArguments: TypeArgumentList
     leftBracket: <
     arguments
@@ -3095,7 +3142,7 @@
   int Function(int) v = r.f1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 67, 1)],
+      [error(diag.unusedLocalVariable, 67, 1)],
     );
 
     var node = findNode.functionReference(r'.f1;');
@@ -3125,7 +3172,7 @@
   int Function(int) v = r.$1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 59, 1)],
+      [error(diag.unusedLocalVariable, 59, 1)],
     );
 
     var node = findNode.functionReference(r'.$1;');
@@ -3202,7 +3249,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@method::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@method::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -3394,7 +3441,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <testLibrary>::@class::A::@method::foo
-      staticType: null
+      staticType: void Function<T>(T)
     element: <testLibrary>::@class::A::@method::foo
     staticType: void Function<T>(T)
   typeArguments: TypeArgumentList
@@ -3424,7 +3471,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 70, 5)],
+      [error(diag.missingAssignableSelector, 70, 5)],
     );
 
     var node = findNode.singleImplicitCallReference;
@@ -3459,7 +3506,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 58, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 58, 5)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
@@ -3495,7 +3542,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 50, 10)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 50, 10)],
     );
 
     var reference = findNode.functionReference('foo<int, int>;');
@@ -3645,7 +3692,7 @@
   prefix.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 10, 6)],
+      [error(diag.undefinedIdentifier, 10, 6)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -3654,12 +3701,12 @@
     prefix: SimpleIdentifier
       token: prefix
       element: <null>
-      staticType: null
+      staticType: InvalidType
     period: .
     identifier: SimpleIdentifier
       token: foo
       element: <null>
-      staticType: null
+      staticType: InvalidType
     element: <null>
     staticType: InvalidType
   typeArguments: TypeArgumentList
@@ -3794,7 +3841,7 @@
   prefix.a.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 45, 1)],
+      [error(diag.undefinedPrefixedName, 45, 1)],
     );
 
     var node = findNode.functionReference('foo<int>;');
@@ -3838,7 +3885,7 @@
 
 var a = Cb.foo<int>;
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 42, 3)],
+      [error(diag.undefinedGetter, 42, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -3874,7 +3921,7 @@
 
 var a = T.foo<int>;
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 29, 3)],
+      [error(diag.undefinedGetter, 29, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -3910,7 +3957,7 @@
   foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 15, 3)],
+      [error(diag.undefinedIdentifier, 15, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -3942,7 +3989,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 41, 3)],
+      [error(diag.undefinedGetter, 41, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -3981,7 +4028,7 @@
   a.foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 40, 3)],
+      [error(diag.undefinedPrefixedName, 40, 3)],
     );
 
     assertResolvedNodeText(findNode.functionReference('foo<int>;'), r'''
@@ -3995,7 +4042,7 @@
     identifier: SimpleIdentifier
       token: foo
       element: <null>
-      staticType: null
+      staticType: InvalidType
     element: <null>
     staticType: InvalidType
   typeArguments: TypeArgumentList
@@ -4053,7 +4100,7 @@
         typeParameters
           TypeParameter
             name: T
-            declaredElement: <testLibraryFragment> T@89
+            declaredFragment: <testLibraryFragment> T@89
               defaultType: null
         rightBracket: >
       parameters: FormalParameterList
@@ -4063,11 +4110,11 @@
             name: T
             element: #E0 T
             type: T
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: isPrivate
               type: T
         rightParenthesis: )
-      declaredElement: GenericFunctionTypeElement
+      declaredFragment: GenericFunctionTypeElement
         parameters
           <empty>
             kind: required positional
@@ -4275,7 +4322,7 @@
       typeParameters
         TypeParameter
           name: T
-          declaredElement: <testLibraryFragment> T@37
+          declaredFragment: <testLibraryFragment> T@37
             defaultType: dynamic
       rightBracket: >
     parameters: FormalParameterList
@@ -4286,7 +4333,7 @@
           element: #E0 T
           type: T
         name: a
-        declaredElement: <testLibraryFragment> a@42
+        declaredFragment: <testLibraryFragment> a@42
           element: isPublic
             type: T
       rightParenthesis: )
@@ -4294,7 +4341,7 @@
       block: Block
         leftBracket: {
         rightBracket: }
-    declaredElement: <testLibraryFragment> null@null
+    declaredFragment: <testLibraryFragment> null@null
       element: null@null
         type: Null Function<T>(T)
     staticType: Null Function<T>(T)
@@ -4613,7 +4660,7 @@
   foo<int>;
 }
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 43, 5)],
+      [error(diag.experimentNotEnabled, 43, 5)],
     );
 
     var reference = findNode.functionReference('foo<int>;');
diff --git a/pkg/analyzer/test/src/dart/resolution/function_typed_formal_parameter_test.dart b/pkg/analyzer/test/src/dart/resolution/function_typed_formal_parameter_test.dart
index ecd1148..92e5325 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_typed_formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_typed_formal_parameter_test.dart
@@ -33,11 +33,11 @@
     typeParameters
       TypeParameter
         name: T
-        declaredElement: <testLibraryFragment> T@14
+        declaredFragment: <testLibraryFragment> T@14
           defaultType: null
       TypeParameter
         name: U
-        declaredElement: <testLibraryFragment> U@17
+        declaredFragment: <testLibraryFragment> U@17
           defaultType: null
     rightBracket: >
   parameters: FormalParameterList
@@ -48,7 +48,7 @@
         element: #E1 U
         type: U
       name: a
-      declaredElement: <testLibraryFragment> a@22
+      declaredFragment: <testLibraryFragment> a@22
         element: isPublic
           type: U
     parameter: SimpleFormalParameter
@@ -57,11 +57,11 @@
         element: #E2 V
         type: V
       name: b
-      declaredElement: <testLibraryFragment> b@27
+      declaredFragment: <testLibraryFragment> b@27
         element: isPublic
           type: V
     rightParenthesis: )
-  declaredElement: <testLibraryFragment> p@12
+  declaredFragment: <testLibraryFragment> p@12
     element: isPublic
       type: T Function<T, U>(U, V)
 ''');
@@ -88,11 +88,11 @@
         element: dart:core::@class::int
         type: int
       name: a
-      declaredElement: <testLibraryFragment> a@18
+      declaredFragment: <testLibraryFragment> a@18
         element: isPublic
           type: int
     rightParenthesis: )
-  declaredElement: <testLibraryFragment> p@12
+  declaredFragment: <testLibraryFragment> p@12
     element: isPublic
       type: void Function(int)
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart
index b1b45ef..878961a 100644
--- a/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/generic_function_type_test.dart
@@ -79,7 +79,7 @@
         staticType: null
       element: <testLibrary>::@getter::a
   name: T
-  declaredElement: <testLibraryFragment> T@27
+  declaredFragment: <testLibraryFragment> T@27
     defaultType: null
 ''');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
index 1a05ed8..0382c7d 100644
--- a/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/generic_type_alias_test.dart
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -91,13 +90,7 @@
 class C<T> {}
 C<G>? x;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          47,
-          1,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 47, 1)],
     );
   }
 }
@@ -116,13 +109,7 @@
 
 C<G>? x;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          59,
-          1,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 59, 1)],
     );
   }
 
@@ -134,13 +121,7 @@
 
 C<Function<S>()>? x;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          31,
-          13,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 31, 13)],
     );
   }
 
@@ -154,13 +135,7 @@
   f<Function<S>()>(null);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          44,
-          13,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 44, 13)],
     );
   }
 
@@ -174,13 +149,7 @@
   f<Function<S>()>(null);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          54,
-          13,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 54, 13)],
     );
   }
 
@@ -196,13 +165,7 @@
   new C().f<Function<S>()>(null);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          66,
-          13,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 66, 13)],
     );
   }
 
@@ -214,13 +177,7 @@
 
 F<Function<S>()>? x;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.genericFunctionTypeCannotBeTypeArgument,
-          38,
-          13,
-        ),
-      ],
+      [error(diag.genericFunctionTypeCannotBeTypeArgument, 38, 13)],
     );
   }
 }
@@ -253,10 +210,7 @@
   F.a;
 }
 ''',
-      [
-        error(ParserErrorCode.expectedTypeName, 15, 1),
-        error(CompileTimeErrorCode.undefinedGetter, 33, 1),
-      ],
+      [error(diag.expectedTypeName, 15, 1), error(diag.undefinedGetter, 33, 1)],
     );
   }
 
@@ -272,7 +226,7 @@
   p.F.a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 40, 1)],
+      [error(diag.undefinedGetter, 40, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
index 05e37c6..5003fe1 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -104,13 +103,9 @@
 }
 ''',
       [
+        error(diag.nonConstantRelationalPatternExpression, 62, 1),
         error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          62,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           62,
           1,
           contextMessages: [message(testFile, 56, 1)],
@@ -194,7 +189,7 @@
   ];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 79, 1)],
+      [error(diag.undefinedIdentifier, 79, 1)],
     );
 
     var node = findNode.ifElement('if');
@@ -257,8 +252,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingAssignableSelector, 32, 5),
-        error(CompileTimeErrorCode.nonBoolCondition, 32, 5),
+        error(diag.missingAssignableSelector, 32, 5),
+        error(diag.nonBoolCondition, 32, 5),
       ],
     );
 
diff --git a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
index 61e371b..6a2b700 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_statement_test.dart
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -137,7 +136,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 45, 8)],
+      [error(diag.deadCode, 45, 8)],
     );
 
     var node = findNode.ifStatement('if');
@@ -221,7 +220,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.inconsistentPatternVariableLogicalOr, 53, 1)],
+      [error(diag.inconsistentPatternVariableLogicalOr, 53, 1)],
     );
 
     var node = findNode.ifStatement('if');
@@ -304,7 +303,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.inconsistentPatternVariableLogicalOr, 50, 1)],
+      [error(diag.inconsistentPatternVariableLogicalOr, 50, 1)],
     );
 
     var node = findNode.ifStatement('if');
@@ -387,8 +386,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 42, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 47, 1),
+        error(diag.missingVariablePattern, 42, 1),
+        error(diag.missingVariablePattern, 47, 1),
       ],
     );
 
@@ -468,7 +467,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.missingVariablePattern, 51, 1)],
+      [error(diag.missingVariablePattern, 51, 1)],
     );
 
     var node = findNode.ifStatement('if');
@@ -638,7 +637,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.missingVariablePattern, 42, 1)],
+      [error(diag.missingVariablePattern, 42, 1)],
     );
 
     var node = findNode.ifStatement('if');
@@ -723,8 +722,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 33, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 47, 1),
+        error(diag.missingVariablePattern, 33, 1),
+        error(diag.missingVariablePattern, 47, 1),
       ],
     );
 
@@ -804,7 +803,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.missingVariablePattern, 33, 1)],
+      [error(diag.missingVariablePattern, 33, 1)],
     );
 
     var node = findNode.ifStatement('if');
@@ -898,13 +897,9 @@
 }
 ''',
       [
+        error(diag.nonConstantRelationalPatternExpression, 57, 1),
         error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          57,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           57,
           1,
           contextMessages: [message(testFile, 51, 1)],
@@ -1001,8 +996,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 56, 1),
-        error(CompileTimeErrorCode.referencedBeforeDeclaration, 56, 1),
+        error(diag.missingVariablePattern, 56, 1),
+        error(diag.referencedBeforeDeclaration, 56, 1),
       ],
     );
 
@@ -1079,7 +1074,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 75, 1)],
+      [error(diag.undefinedIdentifier, 75, 1)],
     );
 
     var node = findNode.ifStatement('if');
@@ -1154,8 +1149,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingAssignableSelector, 31, 5),
-        error(CompileTimeErrorCode.nonBoolCondition, 31, 5),
+        error(diag.missingAssignableSelector, 31, 5),
+        error(diag.nonBoolCondition, 31, 5),
       ],
     );
 
@@ -1427,7 +1422,7 @@
                 staticType: bool
               element: dart:core::@class::int::@getter::isEven
               staticType: bool
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: null@null
               type: bool Function()
           staticType: bool Function()
@@ -1489,7 +1484,7 @@
                 staticType: bool
               element: dart:core::@class::int::@getter::isEven
               staticType: bool
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: null@null
               type: bool Function()
           staticType: bool Function()
@@ -1553,7 +1548,7 @@
                 staticType: bool
               element: dart:core::@class::int::@getter::isEven
               staticType: bool
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: null@null
               type: bool Function()
           staticType: bool Function()
@@ -1617,7 +1612,7 @@
                 staticType: bool
               element: dart:core::@class::int::@getter::isEven
               staticType: bool
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: null@null
               type: bool Function()
           staticType: bool Function()
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 127ed1f..bb7a75f 100644
--- a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -96,7 +95,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 107, 3)],
+      [error(diag.argumentTypeNotAssignable, 107, 3)],
     );
 
     var node = findNode.methodInvocation('g()');
@@ -309,7 +308,7 @@
   int operator[](Object index) => 0;
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 32, 5)],
+      [error(diag.missingAssignableSelector, 32, 5)],
     );
 
     var node = findNode.singleIndexExpression;
@@ -335,7 +334,7 @@
   a[b];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 26, 1)],
+      [error(diag.undefinedIdentifier, 26, 1)],
     );
 
     var node = findNode.singleIndexExpression;
@@ -545,7 +544,7 @@
   a[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 1)],
+      [error(diag.undefinedIdentifier, 13, 1)],
     );
 
     var node = findNode.singleIndexExpression;
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index 12fe9f7..f96e411 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -14,6 +13,9 @@
     defineReflectiveTests(
       InstanceCreationExpressionResolutionTest_WithoutConstructorTearoffs,
     );
+    defineReflectiveTests(
+      InstanceCreationExpressionResolutionTest_WithoutPrivateNamedParameters,
+    );
   });
 }
 
@@ -36,7 +38,7 @@
   A.new(0);
 }
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 40, 3)],
+      [error(diag.experimentNotEnabled, 40, 3)],
     );
 
     // Resolution should continue even though the experiment is not enabled.
@@ -67,6 +69,58 @@
   }
 }
 
+@reflectiveTest
+class InstanceCreationExpressionResolutionTest_WithoutPrivateNamedParameters
+    extends PubPackageResolutionTest
+    with WithoutPrivateNamedParametersMixin {
+  test_preFeature() async {
+    await assertErrorsInCode(
+      '''
+class C {
+  int? _x;
+  C({this._x});
+}
+
+main() {
+  C(x: 123);
+}
+''',
+      [
+        error(diag.unusedField, 17, 2),
+        error(diag.experimentNotEnabledOffByDefault, 31, 2),
+        error(diag.undefinedNamedParameter, 53, 1),
+      ],
+    );
+
+    var node = findNode.singleInstanceCreationExpression;
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: C
+      element: <testLibrary>::@class::C
+      type: C
+    element: <testLibrary>::@class::C::@constructor::new
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: x
+            element: <null>
+            staticType: null
+          colon: :
+        expression: IntegerLiteral
+          literal: 123
+          staticType: int
+        correspondingParameter: <null>
+    rightParenthesis: )
+  staticType: C
+''');
+  }
+}
+
 mixin InstanceCreationTestCases on PubPackageResolutionTest {
   test_arguments_named() async {
     await assertNoErrorsInCode(r'''
@@ -201,7 +255,7 @@
   A(0);
 }
 ''',
-      [error(WarningCode.unusedElement, 33, 1)],
+      [error(diag.unusedElement, 33, 1)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -539,7 +593,7 @@
   A();
 }
 ''',
-      [error(WarningCode.unusedElement, 30, 1)],
+      [error(diag.unusedElement, 30, 1)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -640,7 +694,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructor, 31, 10)],
+      [error(diag.newWithUndefinedConstructor, 31, 10)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -715,7 +769,7 @@
       r'''
 final foo = Map<int>();
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 12, 8)],
+      [error(diag.wrongNumberOfTypeArguments, 12, 8)],
     );
 
     var node = findNode.instanceCreation('Map<int>');
@@ -757,7 +811,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           53,
           5,
           messageContains: ["The constructor 'Foo.bar'"],
@@ -812,7 +866,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
+          diag.wrongNumberOfTypeArgumentsConstructor,
           53,
           5,
           messageContains: ["The constructor 'Foo.new'"],
@@ -868,7 +922,7 @@
   new p.Foo.bar<int>();
 }
 ''',
-      [error(ParserErrorCode.constructorWithTypeArguments, 44, 3)],
+      [error(diag.constructorWithTypeArguments, 44, 3)],
     );
 
     // TODO(brianwilkerson): Test this more carefully after we can re-write the
@@ -922,13 +976,7 @@
   Foo.bar<int>();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
-          49,
-          5,
-        ),
-      ],
+      [error(diag.wrongNumberOfTypeArgumentsConstructor, 49, 5)],
     );
 
     var node = findNode.instanceCreation('Foo.bar<int>');
@@ -978,13 +1026,7 @@
   p.Foo.bar<int>();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsConstructor,
-          43,
-          5,
-        ),
-      ],
+      [error(diag.wrongNumberOfTypeArgumentsConstructor, 43, 5)],
     );
 
     var node = findNode.instanceCreation('Foo.bar<int>');
@@ -1237,7 +1279,7 @@
   new A.named(0);
 }
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructor, 48, 5)],
+      [error(diag.newWithUndefinedConstructor, 48, 5)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -1277,7 +1319,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 48, 6)],
+      [error(diag.newWithNonType, 48, 6)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -1746,7 +1788,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructor, 54, 3)],
+      [error(diag.newWithUndefinedConstructor, 54, 3)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -1790,7 +1832,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 55, 3)],
+      [error(diag.newWithNonType, 55, 3)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -1928,6 +1970,95 @@
 ''');
   }
 
+  test_privateNamedParameter_privateNamedArgument() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  int? _x;
+  C({this._x});
+}
+
+main() {
+  C(_x: 123);
+}
+''',
+      [
+        error(diag.unusedField, 17, 2),
+        error(diag.undefinedNamedParameter, 53, 2),
+      ],
+    );
+
+    var node = findNode.instanceCreation('C(_x');
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: C
+      element: <testLibrary>::@class::C
+      type: C
+    element: <testLibrary>::@class::C::@constructor::new
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: _x
+            element: <null>
+            staticType: null
+          colon: :
+        expression: IntegerLiteral
+          literal: 123
+          staticType: int
+        correspondingParameter: <null>
+    rightParenthesis: )
+  staticType: C
+''');
+  }
+
+  test_privateNamedParameter_publicNamedArgument() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  int? _x;
+  C({this._x});
+}
+
+main() {
+  C(x: 123);
+}
+''',
+      [error(diag.unusedField, 17, 2)],
+    );
+
+    var node = findNode.singleInstanceCreationExpression;
+    assertResolvedNodeText(node, r'''
+InstanceCreationExpression
+  constructorName: ConstructorName
+    type: NamedType
+      name: C
+      element: <testLibrary>::@class::C
+      type: C
+    element: <testLibrary>::@class::C::@constructor::new
+  argumentList: ArgumentList
+    leftParenthesis: (
+    arguments
+      NamedExpression
+        name: Label
+          label: SimpleIdentifier
+            token: x
+            element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
+            staticType: null
+          colon: :
+        expression: IntegerLiteral
+          literal: 123
+          staticType: int
+        correspondingParameter: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
+    rightParenthesis: )
+  staticType: C
+''');
+  }
+
   @SkippedTest() // TODO(scheglov): implement augmentation
   test_typeAlias_generic_class_generic_constructor_named_augmentationDeclares() async {
     newFile('$testPackageLibPath/a.dart', r'''
@@ -2010,7 +2141,7 @@
   X(0);
 }
 ''',
-      [error(WarningCode.unusedElement, 33, 1)],
+      [error(diag.unusedElement, 33, 1)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -2225,7 +2356,7 @@
   B.named(0);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 77, 1)],
+      [error(diag.argumentTypeNotAssignable, 77, 1)],
     );
 
     var node = findNode.instanceCreation('B.named(0)');
@@ -2273,7 +2404,7 @@
   B(0);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 65, 1)],
+      [error(diag.argumentTypeNotAssignable, 65, 1)],
     );
 
     var node = findNode.instanceCreation('B(0)');
@@ -2369,7 +2500,7 @@
   X();
 }
 ''',
-      [error(WarningCode.unusedElement, 30, 1)],
+      [error(diag.unusedElement, 30, 1)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -2507,7 +2638,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 17, 10)],
+      [error(diag.newWithNonType, 17, 10)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -2540,7 +2671,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 17, 16)],
+      [error(diag.undefinedIdentifier, 17, 16)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -2577,7 +2708,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 17, 14)],
+      [error(diag.undefinedIdentifier, 17, 14)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
index 8b5a6bf..11ef617 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_member_inference_class_test.dart
@@ -922,7 +922,7 @@
     String type, {
     bool isCovariant = false,
   }) {
-    expect(field.isSynthetic, isFalse);
+    expect(field.isOriginDeclaration, isTrue);
 
     _assertGetterType(field.getter, type);
 
@@ -933,7 +933,7 @@
   }
 
   void _assertFieldTypeDynamic(FieldElement field) {
-    expect(field.isSynthetic, isFalse);
+    expect(field.isOriginDeclaration, isTrue);
 
     _assertGetterTypeDynamic(field.getter);
 
diff --git a/pkg/analyzer/test/src/dart/resolution/interpolation_string_test.dart b/pkg/analyzer/test/src/dart/resolution/interpolation_string_test.dart
index e06a717..23f50b5 100644
--- a/pkg/analyzer/test/src/dart/resolution/interpolation_string_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/interpolation_string_test.dart
@@ -3,7 +3,7 @@
 // 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/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -76,7 +76,7 @@
 ;
 ''';
     await assertErrorsInCode(code, [
-      error(ScannerErrorCode.unterminatedStringLiteral, code.indexOf('}'), 1),
+      error(diag.unterminatedStringLiteral, code.indexOf('}'), 1),
     ]);
     var string = findNode.stringInterpolation(r'"foo${bar}');
     expect(string.elements, hasLength(3));
@@ -96,7 +96,7 @@
 ;
 ''';
     await assertErrorsInCode(code, [
-      error(ScannerErrorCode.unterminatedStringLiteral, code.indexOf("'"), 1),
+      error(diag.unterminatedStringLiteral, code.indexOf("'"), 1),
     ]);
     var string = findNode.stringInterpolation('"foo\${bar}\'');
     expect(string.elements, hasLength(3));
diff --git a/pkg/analyzer/test/src/dart/resolution/is_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/is_expression_test.dart
index 1b2c174..207b9fd 100644
--- a/pkg/analyzer/test/src/dart/resolution/is_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/is_expression_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 30, 5)],
+      [error(diag.missingAssignableSelector, 30, 5)],
     );
 
     var node = findNode.singleIsExpression;
diff --git a/pkg/analyzer/test/src/dart/resolution/library_export_test.dart b/pkg/analyzer/test/src/dart/resolution/library_export_test.dart
index 8f22e0d..0c97ea6 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_export_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_export_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -47,7 +47,7 @@
       r'''
 export 'dart:math' hide Unresolved;
 ''',
-      [error(WarningCode.undefinedHiddenName, 24, 10)],
+      [error(diag.undefinedHiddenName, 24, 10)],
     );
 
     var node = findNode.singleExportDirective;
@@ -102,7 +102,7 @@
       r'''
 export 'dart:math' show Unresolved;
 ''',
-      [error(WarningCode.undefinedShownName, 24, 10)],
+      [error(diag.undefinedShownName, 24, 10)],
     );
 
     var node = findNode.singleExportDirective;
@@ -373,7 +373,7 @@
       r'''
 export 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
 
     var node = findNode.export('a.dart');
@@ -431,7 +431,7 @@
       r'''
 export ':net';
 ''',
-      [error(CompileTimeErrorCode.invalidUri, 7, 6)],
+      [error(diag.invalidUri, 7, 6)],
     );
 
     var node = findNode.export('export');
@@ -452,7 +452,7 @@
       r'''
 export '${'foo'}.dart';
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 7, 15)],
+      [error(diag.uriWithInterpolation, 7, 15)],
     );
 
     var node = findNode.export('export');
@@ -483,7 +483,7 @@
       r'''
 export 'foo:bar';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 9)],
+      [error(diag.uriDoesNotExist, 7, 9)],
     );
 
     var node = findNode.export('export');
@@ -508,7 +508,7 @@
       r'''
 export 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.exportOfNonLibrary, 7, 8)],
+      [error(diag.exportOfNonLibrary, 7, 8)],
     );
 
     var node = findNode.export('a.dart');
@@ -533,7 +533,7 @@
       r'''
 export 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.exportOfNonLibrary, 7, 8)],
+      [error(diag.exportOfNonLibrary, 7, 8)],
     );
 
     var node = findNode.export('a.dart');
@@ -564,7 +564,7 @@
       r'''
 export 'package:foo/foo2.dart';
 ''',
-      [error(CompileTimeErrorCode.exportOfNonLibrary, 7, 23)],
+      [error(diag.exportOfNonLibrary, 7, 23)],
     );
 
     var node = findNode.export('package:foo');
@@ -619,7 +619,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 25, 8)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 25, 8)]);
 
     var node = findNode.export('c.dart');
     assertResolvedNodeText(node, r'''
@@ -645,7 +645,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.invalidUri, 25, 6)]);
+    assertErrorsInResult([error(diag.invalidUri, 25, 6)]);
 
     var node = findNode.export('export');
     assertResolvedNodeText(node, r'''
@@ -671,9 +671,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.uriWithInterpolation, 25, 15),
-    ]);
+    assertErrorsInResult([error(diag.uriWithInterpolation, 25, 15)]);
 
     var node = findNode.export('export');
     assertResolvedNodeText(node, r'''
@@ -709,7 +707,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 25, 9)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 25, 9)]);
 
     var node = findNode.export('export');
     assertResolvedNodeText(node, r'''
@@ -739,9 +737,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.exportOfNonLibrary, 25, 8),
-    ]);
+    assertErrorsInResult([error(diag.exportOfNonLibrary, 25, 8)]);
 
     var node = findNode.export('c.dart');
     assertResolvedNodeText(node, r'''
@@ -771,9 +767,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.exportOfNonLibrary, 25, 8),
-    ]);
+    assertErrorsInResult([error(diag.exportOfNonLibrary, 25, 8)]);
 
     var node = findNode.export('c.dart');
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/library_import_prefix_test.dart b/pkg/analyzer/test/src/dart/resolution/library_import_prefix_test.dart
index bca3a485..c4a2efa 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_import_prefix_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_import_prefix_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   p; // use
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 38, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 38, 1)],
     );
 
     var node = findNode.simple('p; // use');
@@ -46,8 +46,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 47, 1),
-        error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 52, 1),
+        error(diag.unusedLocalVariable, 47, 1),
+        error(diag.prefixIdentifierNotFollowedByDot, 52, 1),
       ],
     );
 
@@ -89,8 +89,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 66, 1),
-        error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 76, 1),
+        error(diag.unusedLocalVariable, 66, 1),
+        error(diag.prefixIdentifierNotFollowedByDot, 76, 1),
       ],
     );
 
@@ -187,7 +187,7 @@
 ''',
       [
         // String extensions are found but `_` is not bound.
-        error(CompileTimeErrorCode.undefinedIdentifier, 86, 1),
+        error(diag.undefinedIdentifier, 86, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
index 83441a9..36883b8 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_import_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       r'''
 import 'dart:math' hide Random;
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
 
     var node = findNode.singleImportDirective;
@@ -50,8 +50,8 @@
 import 'dart:math' hide Unresolved;
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
-        error(WarningCode.undefinedHiddenName, 24, 10),
+        error(diag.unusedImport, 7, 11),
+        error(diag.undefinedHiddenName, 24, 10),
       ],
     );
 
@@ -81,7 +81,7 @@
       r'''
 import 'dart:math' show Random;
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
 
     var node = findNode.singleImportDirective;
@@ -110,10 +110,7 @@
       r'''
 import 'dart:math' show Unresolved;
 ''',
-      [
-        error(WarningCode.unusedImport, 7, 11),
-        error(WarningCode.undefinedShownName, 24, 10),
-      ],
+      [error(diag.unusedImport, 7, 11), error(diag.undefinedShownName, 24, 10)],
     );
 
     var node = findNode.singleImportDirective;
@@ -231,9 +228,9 @@
                 leftParenthesis: (
                 rightParenthesis: )
               staticType: A
-            declaredElement: <testLibraryFragment> a@96
+            declaredFragment: <testLibraryFragment> a@96
       semicolon: ;
-      declaredElement: <null>
+      declaredFragment: <null>
 ''');
   }
 
@@ -331,9 +328,9 @@
                 leftParenthesis: (
                 rightParenthesis: )
               staticType: A
-            declaredElement: <testLibraryFragment> a@96
+            declaredFragment: <testLibraryFragment> a@96
       semicolon: ;
-      declaredElement: <null>
+      declaredFragment: <null>
 ''');
   }
 
@@ -553,9 +550,9 @@
                 leftParenthesis: (
                 rightParenthesis: )
               staticType: A
-            declaredElement: <testLibraryFragment> a@96
+            declaredFragment: <testLibraryFragment> a@96
       semicolon: ;
-      declaredElement: <null>
+      declaredFragment: <null>
 ''');
   }
 
@@ -585,7 +582,7 @@
       r'''
 import 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
 
     var node = findNode.import('import');
@@ -630,7 +627,7 @@
       r'''
 import ':net';
 ''',
-      [error(CompileTimeErrorCode.invalidUri, 7, 6)],
+      [error(diag.invalidUri, 7, 6)],
     );
 
     var node = findNode.import('import');
@@ -651,7 +648,7 @@
       r'''
 import '${'foo'}.dart';
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 7, 15)],
+      [error(diag.uriWithInterpolation, 7, 15)],
     );
 
     var node = findNode.import('import');
@@ -682,7 +679,7 @@
       r'''
 import 'foo:bar';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 9)],
+      [error(diag.uriDoesNotExist, 7, 9)],
     );
 
     var node = findNode.import('import');
@@ -707,7 +704,7 @@
       r'''
 import 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.importOfNonLibrary, 7, 8)],
+      [error(diag.importOfNonLibrary, 7, 8)],
     );
 
     var node = findNode.import('a.dart');
@@ -732,7 +729,7 @@
       r'''
 import 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.importOfNonLibrary, 7, 8)],
+      [error(diag.importOfNonLibrary, 7, 8)],
     );
 
     var node = findNode.import('a.dart');
@@ -763,7 +760,7 @@
       r'''
 import 'package:foo/foo2.dart';
 ''',
-      [error(CompileTimeErrorCode.importOfNonLibrary, 7, 23)],
+      [error(diag.importOfNonLibrary, 7, 23)],
     );
 
     var node = findNode.import('package:foo');
@@ -821,7 +818,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 25, 8)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 25, 8)]);
 
     var node = findNode.import('c.dart');
     assertResolvedNodeText(node, r'''
@@ -847,7 +844,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.invalidUri, 25, 6)]);
+    assertErrorsInResult([error(diag.invalidUri, 25, 6)]);
 
     var node = findNode.import('import');
     assertResolvedNodeText(node, r'''
@@ -873,9 +870,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.uriWithInterpolation, 25, 15),
-    ]);
+    assertErrorsInResult([error(diag.uriWithInterpolation, 25, 15)]);
 
     var node = findNode.import('import');
     assertResolvedNodeText(node, r'''
@@ -911,7 +906,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 25, 9)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 25, 9)]);
 
     var node = findNode.import('import');
     assertResolvedNodeText(node, r'''
@@ -941,9 +936,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.importOfNonLibrary, 25, 8),
-    ]);
+    assertErrorsInResult([error(diag.importOfNonLibrary, 25, 8)]);
 
     var node = findNode.import('c.dart');
     assertResolvedNodeText(node, r'''
@@ -973,9 +966,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.importOfNonLibrary, 25, 8),
-    ]);
+    assertErrorsInResult([error(diag.importOfNonLibrary, 25, 8)]);
 
     var node = findNode.import('c.dart');
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/list_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/list_literal_test.dart
index 31ea7a5..d8b7b88 100644
--- a/pkg/analyzer/test/src/dart/resolution/list_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/list_literal_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -46,7 +46,7 @@
   <int, double>[];
 }
 ''',
-      [error(CompileTimeErrorCode.expectedOneListTypeArguments, 13, 13)],
+      [error(diag.expectedOneListTypeArguments, 13, 13)],
     );
 
     var node = findNode.singleListLiteral;
diff --git a/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart
index 981ed5a..0ec73f7 100644
--- a/pkg/analyzer/test/src/dart/resolution/list_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/list_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 41, 1)],
+      [error(diag.unusedLocalVariable, 41, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -58,7 +58,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 41, 1)],
+      [error(diag.unusedLocalVariable, 41, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -88,7 +88,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 1)],
+      [error(diag.unusedLocalVariable, 46, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -147,7 +147,7 @@
   if (x case [0, ...var rest]) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 4)],
+      [error(diag.unusedLocalVariable, 46, 4)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -184,7 +184,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 51, 1)],
+      [error(diag.unusedLocalVariable, 51, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -214,7 +214,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 56, 1)],
+      [error(diag.unusedLocalVariable, 56, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -296,7 +296,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 48, 1)],
+      [error(diag.unusedLocalVariable, 48, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -329,7 +329,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 48, 1)],
+      [error(diag.unusedLocalVariable, 48, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -392,7 +392,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 53, 1)],
+      [error(diag.unusedLocalVariable, 53, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -433,7 +433,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 53, 1)],
+      [error(diag.unusedLocalVariable, 53, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -468,7 +468,7 @@
   var [a] = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 29, 1)],
+      [error(diag.unusedLocalVariable, 29, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
@@ -504,7 +504,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 23, 1)],
+      [error(diag.unusedLocalVariable, 23, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
@@ -556,7 +556,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1)],
+      [error(diag.unusedLocalVariable, 22, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/local_function_test.dart b/pkg/analyzer/test/src/dart/resolution/local_function_test.dart
index 5dbee0a..a0f6de6 100644
--- a/pkg/analyzer/test/src/dart/resolution/local_function_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/local_function_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -53,7 +53,7 @@
     g() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 23, 1)],
+      [error(diag.unusedElement, 23, 1)],
     );
     var node = findNode.functionDeclaration('g() {}');
     var fragment = node.declaredFragment!;
diff --git a/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
index 82dd775..8e5c919 100644
--- a/pkg/analyzer/test/src/dart/resolution/local_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/local_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -60,7 +60,7 @@
   int x = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
 
     var x = findElement2.localVar('x');
@@ -77,7 +77,7 @@
   const int x = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 23, 1)],
+      [error(diag.unusedLocalVariable, 23, 1)],
     );
 
     var x = findElement2.localVar('x');
@@ -94,7 +94,7 @@
   final int x = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 23, 1)],
+      [error(diag.unusedLocalVariable, 23, 1)],
     );
 
     var x = findElement2.localVar('x');
@@ -112,7 +112,7 @@
     int x = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 32, 1)],
+      [error(diag.unusedLocalVariable, 32, 1)],
     );
 
     var x = findElement2.localVar('x');
@@ -129,7 +129,7 @@
   late int x = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1)],
+      [error(diag.unusedLocalVariable, 22, 1)],
     );
 
     var x = findElement2.localVar('x');
@@ -147,10 +147,7 @@
   _();
 }
 ''',
-      [
-        error(WarningCode.deadCode, 8, 6),
-        error(CompileTimeErrorCode.undefinedFunction, 17, 1),
-      ],
+      [error(diag.deadCode, 8, 6), error(diag.undefinedFunction, 17, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/logical_and_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/logical_and_pattern_test.dart
index 0a4674b..758bf7d 100644
--- a/pkg/analyzer/test/src/dart/resolution/logical_and_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/logical_and_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -82,8 +82,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(WarningCode.unusedLocalVariable, 23, 1),
+        error(diag.unusedLocalVariable, 18, 1),
+        error(diag.unusedLocalVariable, 23, 1),
       ],
     );
     var node = findNode.singlePatternVariableDeclarationStatement;
diff --git a/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart
index d802499..aabab9a 100644
--- a/pkg/analyzer/test/src/dart/resolution/map_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/map_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 1)],
+      [error(diag.unusedLocalVariable, 47, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -63,7 +63,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 44, 1)],
+      [error(diag.unusedLocalVariable, 44, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -98,7 +98,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 57, 1)],
+      [error(diag.unusedLocalVariable, 57, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -142,7 +142,7 @@
   if (x case {}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.emptyMapPattern, 42, 2)],
+      [error(diag.emptyMapPattern, 42, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -161,7 +161,7 @@
   if (x case {..., 0: ''}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.restElementInMapPattern, 43, 3)],
+      [error(diag.restElementInMapPattern, 43, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -192,7 +192,7 @@
   if (x case {0: '', ...}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.restElementInMapPattern, 50, 3)],
+      [error(diag.restElementInMapPattern, 50, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -224,8 +224,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.restElementInMapPattern, 43, 3),
-        error(CompileTimeErrorCode.restElementInMapPattern, 55, 3),
+        error(diag.restElementInMapPattern, 43, 3),
+        error(diag.restElementInMapPattern, 55, 3),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -260,8 +260,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.restElementInMapPattern, 50, 11),
-        error(WarningCode.unusedLocalVariable, 57, 4),
+        error(diag.restElementInMapPattern, 50, 11),
+        error(diag.unusedLocalVariable, 57, 4),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -300,7 +300,7 @@
   if (x case {0: var a}) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 50, 1)],
+      [error(diag.unusedLocalVariable, 50, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -332,7 +332,7 @@
   if (x case <bool, int>{true: var a}) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -403,7 +403,7 @@
   if (x case {}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.emptyMapPattern, 32, 2)],
+      [error(diag.emptyMapPattern, 32, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -422,7 +422,7 @@
   if (x case {true: int a}) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 43, 1)],
+      [error(diag.unusedLocalVariable, 43, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -457,7 +457,7 @@
   if (x case {true: var a}) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 43, 1)],
+      [error(diag.unusedLocalVariable, 43, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -528,7 +528,7 @@
   if (x case <bool, int>{true: var a}) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 1)],
+      [error(diag.unusedLocalVariable, 54, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -572,7 +572,7 @@
   if (x case {a(): 0}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapPatternKey, 45, 3)],
+      [error(diag.nonConstantMapPatternKey, 45, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -610,7 +610,7 @@
   var {true: a} = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 40, 1)],
+      [error(diag.unusedLocalVariable, 40, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
@@ -651,7 +651,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 35, 1)],
+      [error(diag.unusedLocalVariable, 35, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
@@ -712,7 +712,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 28, 1)],
+      [error(diag.unusedLocalVariable, 28, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index bcd15b9..5347dd7 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -326,7 +326,7 @@
 part 'a.dart';
 const foo = 42;
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 10, 8)],
+      [error(diag.uriDoesNotExist, 10, 8)],
     );
 
     _assertAtFoo42();
diff --git a/pkg/analyzer/test/src/dart/resolution/method_declaration_test.dart b/pkg/analyzer/test/src/dart/resolution/method_declaration_test.dart
index 93cdb7f..9f97cef 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_declaration_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -88,7 +88,7 @@
   _() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 12, 1)],
+      [error(diag.unusedElement, 12, 1)],
     );
 
     var node = findNode.methodDeclaration('_');
@@ -102,7 +102,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> _@12
+  declaredFragment: <testLibraryFragment> _@12
     element: <testLibrary>::@class::C::@method::_
       type: dynamic Function()
 ''');
@@ -118,7 +118,7 @@
   _() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 56, 1)],
+      [error(diag.unusedElement, 56, 1)],
     );
 
     var node = findNode.methodDeclaration('_');
@@ -132,7 +132,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> _@56
+  declaredFragment: <testLibraryFragment> _@56
     element: <testLibrary>::@class::C::@method::_
       type: dynamic Function()
 ''');
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 4ff109d..0785670 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -3,8 +3,7 @@
 // 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:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/expect.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -31,7 +30,7 @@
 
 void g(Object a) {}
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 29, 5)],
+      [error(diag.missingAssignableSelector, 29, 5)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -63,8 +62,8 @@
 void g(int a, int b) {}
 ''',
       [
-        error(ParserErrorCode.missingIdentifier, 15, 1),
-        error(ParserErrorCode.missingIdentifier, 16, 1),
+        error(diag.missingIdentifier, 15, 1),
+        error(diag.missingIdentifier, 16, 1),
       ],
     );
 
@@ -217,7 +216,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 45, 17)],
+      [error(diag.argumentTypeNotAssignable, 45, 17)],
     );
 
     var node = findNode.methodInvocation('h(a');
@@ -495,7 +494,7 @@
 }
 h(double x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 42, 17)],
+      [error(diag.argumentTypeNotAssignable, 42, 17)],
     );
 
     var node = findNode.methodInvocation('h(a');
@@ -1114,7 +1113,7 @@
   a.clamp(b, c);
 }
 ''',
-      [error(WarningCode.deadCode, 40, 3)],
+      [error(diag.deadCode, 40, 3)],
     );
 
     var node = findNode.methodInvocation('clamp');
@@ -1155,10 +1154,7 @@
   a.clamp(b, c);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 29, 1),
-        error(WarningCode.deadCode, 36, 7),
-      ],
+      [error(diag.receiverOfTypeNever, 29, 1), error(diag.deadCode, 36, 7)],
     );
 
     var node = findNode.methodInvocation('clamp');
@@ -1204,7 +1200,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 94, 17)],
+      [error(diag.argumentTypeNotAssignable, 94, 17)],
     );
 
     var node = findNode.methodInvocation('h(a');
@@ -1650,7 +1646,7 @@
   foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 46, 3)],
+      [error(diag.ambiguousImport, 46, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0)');
@@ -1692,7 +1688,7 @@
   p.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 58, 3)],
+      [error(diag.ambiguousImport, 58, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0)');
@@ -1733,7 +1729,7 @@
   a.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.instanceAccessToStaticMember, 59, 3)],
+      [error(diag.instanceAccessToStaticMember, 59, 3)],
     );
 
     var node = findNode.methodInvocation('a.foo(0)');
@@ -1772,7 +1768,7 @@
   c();
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 69, 1)],
+      [error(diag.invocationOfNonFunctionExpression, 69, 1)],
     );
 
     var node = findNode.functionExpressionInvocation('c();');
@@ -1932,7 +1928,9 @@
 FunctionExpressionInvocation
   function: SimpleIdentifier
     token: foo
-    element: <testLibrary>::@class::C::@getter::foo
+    element: GetterMember
+      baseElement: <testLibrary>::@class::C::@getter::foo
+      substitution: {T: T}
     staticType: T
   argumentList: ArgumentList
     leftParenthesis: (
@@ -1956,7 +1954,7 @@
   foo();
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 21, 3)],
+      [error(diag.invocationOfNonFunctionExpression, 21, 3)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2009,7 +2007,7 @@
   C.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 46, 5)],
+      [error(diag.invocationOfNonFunctionExpression, 46, 5)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2046,7 +2044,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 48, 3)],
+      [error(diag.invocationOfNonFunctionExpression, 48, 3)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2078,7 +2076,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 68, 9)],
+      [error(diag.invocationOfNonFunctionExpression, 68, 9)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2116,7 +2114,7 @@
   prefix?.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 39, 6)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 39, 6)],
     );
 
     var node = findNode.methodInvocation('foo();');
@@ -2148,7 +2146,7 @@
   math?.loadLibrary();
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 49, 4)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 49, 4)],
     );
 
     var node = findNode.methodInvocation('loadLibrary()');
@@ -2180,7 +2178,7 @@
   foo();
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 39, 3)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 39, 3)],
     );
 
     var node = findNode.methodInvocation('foo()');
@@ -2205,7 +2203,7 @@
   foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedFunction, 11, 3)],
+      [error(diag.undefinedFunction, 11, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0)');
@@ -2237,7 +2235,7 @@
   math.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedFunction, 45, 3)],
+      [error(diag.undefinedFunction, 45, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2272,7 +2270,7 @@
   bar.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 11, 3)],
+      [error(diag.undefinedIdentifier, 11, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2308,7 +2306,7 @@
   C.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 24, 3)],
+      [error(diag.undefinedMethod, 24, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2346,7 +2344,7 @@
   C.foo(x);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 36, 3)],
+      [error(diag.undefinedMethod, 36, 3)],
     );
 
     var node = findNode.methodInvocation('foo(x);');
@@ -2388,7 +2386,7 @@
   C.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 76, 3)],
+      [error(diag.undefinedMethod, 76, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2425,7 +2423,7 @@
   C.foo<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 25, 3)],
+      [error(diag.undefinedMethod, 25, 3)],
     );
 
     var node = findNode.methodInvocation('foo<int>();');
@@ -2465,7 +2463,7 @@
   static main() => C.T();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 34, 1)],
+      [error(diag.undefinedMethod, 34, 1)],
     );
 
     var node = findNode.methodInvocation('C.T();');
@@ -2495,7 +2493,7 @@
   42.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 14, 3)],
+      [error(diag.undefinedMethod, 14, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2530,7 +2528,7 @@
   v.foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 30, 3)],
+      [error(diag.undefinedMethod, 30, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2567,7 +2565,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 25, 3)],
+      [error(diag.undefinedMethod, 25, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2599,7 +2597,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 6, 1)],
+      [error(diag.missingIdentifier, 6, 1)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -2629,7 +2627,7 @@
   null.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfNullValue, 16, 3)],
+      [error(diag.invalidUseOfNullValue, 16, 3)],
     );
 
     var node = findNode.methodInvocation('foo();');
@@ -2658,7 +2656,7 @@
   o.call();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 21, 4)],
+      [error(diag.undefinedMethod, 21, 4)],
     );
   }
 
@@ -2678,7 +2676,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 53, 4)],
+      [error(diag.undefinedMethod, 53, 4)],
     );
 
     var node = findNode.methodInvocation('_foo(0);');
@@ -2712,7 +2710,7 @@
   C..foo();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 50, 3)],
+      [error(diag.undefinedMethod, 50, 3)],
     );
   }
 
@@ -2725,8 +2723,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 23, 2),
-        error(CompileTimeErrorCode.undefinedMethod, 25, 8),
+        error(diag.invalidNullAwareOperator, 23, 2),
+        error(diag.undefinedMethod, 25, 8),
       ],
     );
   }
@@ -2745,12 +2743,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember,
-          71,
-          3,
-        ),
-        error(CompileTimeErrorCode.extraPositionalArguments, 75, 1),
+        error(diag.unqualifiedReferenceToNonLocalStaticMember, 71, 3),
+        error(diag.extraPositionalArguments, 75, 1),
       ],
     );
 
@@ -2787,7 +2781,7 @@
   p.bar(2);
 }
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 14)],
+      [error(diag.uriDoesNotExist, 7, 14)],
     );
 
     var node = findNode.methodInvocation('foo(1);');
@@ -2828,7 +2822,7 @@
   bar(2);
 }
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 14)],
+      [error(diag.uriDoesNotExist, 7, 14)],
     );
 
     var node = findNode.methodInvocation('foo(1);');
@@ -2863,7 +2857,7 @@
   c.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 61, 5)],
+      [error(diag.useOfVoidResult, 61, 5)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2899,7 +2893,7 @@
   foo();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 23, 3)],
+      [error(diag.useOfVoidResult, 23, 3)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2927,7 +2921,7 @@
   foo()();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 26, 3)],
+      [error(diag.useOfVoidResult, 26, 3)],
     );
 
     var node = findNode.methodInvocation('foo()()');
@@ -2954,7 +2948,7 @@
   foo();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 22, 3)],
+      [error(diag.useOfVoidResult, 22, 3)],
     );
 
     var node = findNode.functionExpressionInvocation('foo();');
@@ -2981,7 +2975,7 @@
   foo.toString();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 23, 3)],
+      [error(diag.useOfVoidResult, 23, 3)],
     );
 
     var node = findNode.methodInvocation('toString()');
@@ -3012,7 +3006,7 @@
   foo..toString();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 23, 3)],
+      [error(diag.useOfVoidResult, 23, 3)],
     );
 
     var node = findNode.methodInvocation('toString()');
@@ -3039,7 +3033,7 @@
   foo?.toString();
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 23, 3)],
+      [error(diag.useOfVoidResult, 23, 3)],
     );
 
     var node = findNode.methodInvocation('toString()');
@@ -3071,7 +3065,7 @@
   foo<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 29, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 29, 5)],
     );
 
     var node = findNode.methodInvocation('foo<int>()');
@@ -3106,7 +3100,7 @@
   foo<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 67, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 67, 5)],
     );
 
     var node = findNode.methodInvocation('foo<int>()');
@@ -3427,7 +3421,7 @@
   math.loadLibrary();
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
 
     var node = findNode.methodInvocation('loadLibrary()');
@@ -3460,8 +3454,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
-        error(CompileTimeErrorCode.extraPositionalArguments, 66, 5),
+        error(diag.unusedImport, 7, 11),
+        error(diag.extraPositionalArguments, 66, 5),
       ],
     );
 
@@ -4225,7 +4219,9 @@
 MethodInvocation
   target: SimpleIdentifier
     token: a
-    element: <testLibrary>::@class::C::@getter::a
+    element: GetterMember
+      baseElement: <testLibrary>::@class::C::@getter::a
+      substitution: {T: T}
     staticType: T
   operator: .
   methodName: SimpleIdentifier
@@ -4279,13 +4275,7 @@
   foo.call();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          30,
-          4,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 30, 4)],
     );
 
     var node = findNode.methodInvocation('foo.call()');
@@ -4615,13 +4605,7 @@
   a.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          67,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 67, 3)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -4725,7 +4709,7 @@
   x.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 109, 3)],
+      [error(diag.undefinedMethod, 109, 3)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -5062,13 +5046,7 @@
   a.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          48,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 48, 3)],
     );
 
     var node = findNode.methodInvocation('a.foo()');
@@ -5106,13 +5084,7 @@
   a.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          86,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 86, 3)],
     );
 
     var node = findNode.methodInvocation('a.foo()');
@@ -5212,13 +5184,7 @@
   a.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          31,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 31, 3)],
     );
 
     var node = findNode.methodInvocation('a.foo()');
@@ -5254,13 +5220,7 @@
   a.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          69,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 69, 3)],
     );
 
     var node = findNode.methodInvocation('a.foo()');
@@ -5498,13 +5458,7 @@
   r.foo(0);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          86,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 86, 3)],
     );
 
     var node = findNode.methodInvocation('r.foo(0)');
@@ -5975,7 +5929,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 45, 3)],
+      [error(diag.invocationOfNonFunctionExpression, 45, 3)],
     );
 
     var node = findNode.functionExpressionInvocation('foo(0)');
@@ -6102,7 +6056,7 @@
   foo(p: 0, p: a);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateNamedArgument, 60, 1)],
+      [error(diag.duplicateNamedArgument, 60, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -6153,7 +6107,7 @@
   foo(0);
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 29, 3)],
+      [error(diag.invocationOfNonFunctionExpression, 29, 3)],
     );
 
     var node = findNode.functionExpressionInvocation('foo(0)');
@@ -6395,7 +6349,7 @@
 const a = 0;
 const b = A.foo(a);
 ''',
-      [error(CompileTimeErrorCode.constEvalMethodInvocation, 66, 8)],
+      [error(diag.constEvalMethodInvocation, 66, 8)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -6430,7 +6384,7 @@
 const a = 0;
 const b = 'abc'.codeUnitAt(a);
 ''',
-      [error(CompileTimeErrorCode.constEvalMethodInvocation, 23, 19)],
+      [error(diag.constEvalMethodInvocation, 23, 19)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -6944,7 +6898,7 @@
   math();
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 40, 4)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 40, 4)],
     );
 
     var node = findNode.methodInvocation('math()');
@@ -7636,7 +7590,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 98, 19)],
+      [error(diag.argumentTypeNotAssignable, 98, 19)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -7802,7 +7756,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 105, 19)],
+      [error(diag.argumentTypeNotAssignable, 105, 19)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -7836,7 +7790,7 @@
 }
 h(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 105, 16)],
+      [error(diag.argumentTypeNotAssignable, 105, 16)],
     );
 
     var node = findNode.methodInvocation('f()');
@@ -8017,7 +7971,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperMethod, 62, 3)],
+      [error(diag.undefinedSuperMethod, 62, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -8054,7 +8008,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperMethod, 37, 3)],
+      [error(diag.undefinedSuperMethod, 37, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -8092,7 +8046,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperMethod, 52, 3)],
+      [error(diag.undefinedSuperMethod, 52, 3)],
     );
 
     var node = findNode.methodInvocation('foo(0);');
@@ -8130,8 +8084,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingAssignmentInInitializer, 18, 1),
-        error(CompileTimeErrorCode.initializerForNonExistentField, 18, 13),
+        error(diag.missingAssignmentInInitializer, 18, 1),
+        error(diag.initializerForNonExistentField, 18, 13),
       ],
     );
 
@@ -8225,7 +8179,7 @@
   bool v = foo(0);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 52, 1)],
+      [error(diag.unusedLocalVariable, 52, 1)],
     );
 
     var node = findNode.methodInvocation('foo(0)');
@@ -8356,7 +8310,7 @@
   foo<bool>();
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 45, 4)],
+      [error(diag.typeArgumentNotMatchingBounds, 45, 4)],
     );
 
     var node = findNode.methodInvocation('foo<bool>();');
@@ -8393,7 +8347,7 @@
   foo<int, double>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 32, 13)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 32, 13)],
     );
 
     var node = findNode.methodInvocation('foo<int, double>();');
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 5d33aa1..5577ace 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -88,9 +88,9 @@
     variables
       VariableDeclaration
         name: f
-        declaredElement: <testLibraryFragment> f@22
+        declaredFragment: <testLibraryFragment> f@22
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -116,7 +116,7 @@
       literal: 0
       staticType: int
     semicolon: ;
-  declaredElement: <testLibraryFragment> foo@20
+  declaredFragment: <testLibraryFragment> foo@20
     element: <testLibrary>::@mixin::M::@getter::foo
       type: int Function()
 ''');
@@ -162,13 +162,9 @@
 abstract class X extends A with U1, U2, M {}
 ''',
       [
-        error(CompileTimeErrorCode.mixinOfNonClass, 121, 2),
-        error(CompileTimeErrorCode.mixinOfNonClass, 125, 2),
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          129,
-          1,
-        ),
+        error(diag.mixinOfNonClass, 121, 2),
+        error(diag.mixinOfNonClass, 125, 2),
+        error(diag.mixinApplicationNoConcreteSuperInvokedMember, 129, 1),
       ],
     );
   }
@@ -204,11 +200,13 @@
   }
 
   test_method() async {
-    await assertNoErrorsInCode(r'''
+    var code = r'''
 mixin M {
   void foo() {}
 }
-''');
+''';
+
+    await assertNoErrorsInCode(code);
 
     var node = findNode.singleMethodDeclaration;
     assertResolvedNodeText(node, r'''
@@ -225,7 +223,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> foo@17
+  declaredFragment: <testLibraryFragment> foo@17
     element: <testLibrary>::@mixin::M::@method::foo
       type: void Function()
 ''');
@@ -242,7 +240,7 @@
 
 mixin M<T> on C<T> {}
 ''',
-      [error(WarningCode.unusedLocalVariable, 26, 1)],
+      [error(diag.unusedLocalVariable, 26, 1)],
     );
 
     var node = findNode.functionExpressionInvocation('f()');
@@ -311,7 +309,7 @@
         element: dart:core::@class::int
         type: int
       name: _
-      declaredElement: <testLibraryFragment> _@29
+      declaredFragment: <testLibraryFragment> _@29
         element: isPrivate
           type: int
     rightParenthesis: )
@@ -319,7 +317,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> foo@21
+  declaredFragment: <testLibraryFragment> foo@21
     element: <testLibrary>::@mixin::M::@setter::foo
       type: void Function(int)
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/named_type_test.dart b/pkg/analyzer/test/src/dart/resolution/named_type_test.dart
index 33605aa..280b5f0 100644
--- a/pkg/analyzer/test/src/dart/resolution/named_type_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/named_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -130,7 +130,7 @@
 
 dynamic a;
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 31, 7)],
+      [error(diag.undefinedClass, 31, 7)],
     );
 
     var node = findNode.namedType('dynamic a;');
@@ -187,7 +187,7 @@
 
 class B extends A<int> {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 34, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 34, 6)],
     );
 
     var node = findNode.namedType('A<int>');
@@ -214,7 +214,7 @@
 
 class B extends A<int, String> {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 31, 14)],
+      [error(diag.wrongNumberOfTypeArguments, 31, 14)],
     );
 
     var node = findNode.namedType('A<int, String>');
@@ -244,8 +244,8 @@
 class A<T> extends T<int> {}
 ''',
       [
-        error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 19, 6),
-        error(CompileTimeErrorCode.extendsNonClass, 19, 1),
+        error(diag.wrongNumberOfTypeArguments, 19, 6),
+        error(diag.extendsNonClass, 19, 1),
       ],
     );
 
@@ -436,7 +436,7 @@
 
 void f(math.Unresolved<int> a) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 36, 15)],
+      [error(diag.undefinedClass, 36, 15)],
     );
 
     var node = findNode.namedType('math.Unresolved');
@@ -469,7 +469,7 @@
   new math.A();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 49, 1)],
+      [error(diag.newWithNonType, 49, 1)],
     );
 
     var node = findNode.namedType('A();');
@@ -510,7 +510,7 @@
   new A();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 15, 1)],
+      [error(diag.newWithNonType, 15, 1)],
     );
 
     var node = findNode.namedType('A();');
@@ -532,8 +532,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeAnnotationDeferredClass, 53, 17),
-        error(WarningCode.unusedLocalVariable, 71, 1),
+        error(diag.typeAnnotationDeferredClass, 53, 17),
+        error(diag.unusedLocalVariable, 71, 1),
       ],
     );
 
@@ -567,7 +567,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notAType,
+          diag.notAType,
           38,
           6,
           contextMessages: [message(testFile, 22, 6)],
@@ -593,7 +593,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notAType,
+          diag.notAType,
           38,
           6,
           contextMessages: [message(testFile, 22, 6)],
@@ -625,7 +625,7 @@
   new int.double.other();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 17, 10)],
+      [error(diag.newWithNonType, 17, 10)],
     );
 
     var node = findNode.namedType('int.double');
@@ -648,7 +648,7 @@
   0 as int.double;
 }
 ''',
-      [error(CompileTimeErrorCode.notAType, 18, 10)],
+      [error(diag.notAType, 18, 10)],
     );
 
     var node = findNode.namedType('int.double');
@@ -672,12 +672,7 @@
 void T() {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAType,
-          7,
-          1,
-          contextMessages: [message(testFile, 21, 1)],
-        ),
+        error(diag.notAType, 7, 1, contextMessages: [message(testFile, 21, 1)]),
       ],
     );
 
@@ -698,12 +693,7 @@
 void T() {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAType,
-          7,
-          1,
-          contextMessages: [message(testFile, 26, 1)],
-        ),
+        error(diag.notAType, 7, 1, contextMessages: [message(testFile, 26, 1)]),
       ],
     );
 
@@ -729,7 +719,7 @@
       r'''
 void f<T>(T.name<int> a) {}
 ''',
-      [error(CompileTimeErrorCode.prefixShadowedByLocalDeclaration, 10, 1)],
+      [error(diag.prefixShadowedByLocalDeclaration, 10, 1)],
     );
 
     var node = findNode.namedType('T.name<int>');
@@ -769,7 +759,7 @@
 
 void f(A a) {}
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 42, 1)],
+      [error(diag.ambiguousImport, 42, 1)],
     );
 
     var node = findNode.namedType('A a');
@@ -1085,7 +1075,7 @@
       r'''
 void f(Unresolved<int> a) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 7, 10)],
+      [error(diag.undefinedClass, 7, 10)],
     );
 
     var node = findNode.namedType('Unresolved');
@@ -1110,7 +1100,7 @@
       r'''
 void f(unresolved.List<int> a) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 7, 15)],
+      [error(diag.undefinedClass, 7, 15)],
     );
 
     var node = findNode.namedType('unresolved.List');
diff --git a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
index bcb9d78..5d9e201 100644
--- a/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
+++ b/pkg/analyzer/test/src/dart/resolution/node_text_expectations.dart
@@ -19,7 +19,11 @@
   /// This should only happen locally, to update tests or implementation.
   ///
   /// This flag should be `false` during code review.
-  static const updatingIsEnabled = false;
+  static bool updatingIsEnabled = bool.fromEnvironment(
+    'updateExpectations',
+    // ignore: avoid_redundant_argument_values
+    defaultValue: false,
+  );
 
   static final assertMethods = [
     _AssertMethod.forFunction(
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 2546a6b..1c0af23 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -67,9 +67,9 @@
     variables
       VariableDeclaration
         name: f
-        declaredElement: <testLibraryFragment> f@51
+        declaredFragment: <testLibraryFragment> f@51
   semicolon: ;
-  declaredElement: <null>
+  declaredFragment: <null>
 ''');
   }
 
@@ -92,8 +92,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 16, 1),
-        error(WarningCode.unusedLocalVariable, 29, 1),
+        error(diag.unusedLocalVariable, 16, 1),
+        error(diag.unusedLocalVariable, 29, 1),
       ],
     );
 
@@ -112,10 +112,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 23, 1),
-        error(WarningCode.unusedLocalVariable, 44, 1),
-        error(WarningCode.unusedLocalVariable, 65, 1),
-        error(WarningCode.unusedLocalVariable, 85, 1),
+        error(diag.unusedLocalVariable, 23, 1),
+        error(diag.unusedLocalVariable, 44, 1),
+        error(diag.unusedLocalVariable, 65, 1),
+        error(diag.unusedLocalVariable, 85, 1),
       ],
     );
 
@@ -169,8 +169,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 21, 1),
-        error(WarningCode.unusedLocalVariable, 33, 1),
+        error(diag.unusedLocalVariable, 21, 1),
+        error(diag.unusedLocalVariable, 33, 1),
       ],
     );
 
@@ -185,7 +185,7 @@
   int? Function(bool, String?)? a;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 41, 1)],
+      [error(diag.unusedLocalVariable, 41, 1)],
     );
 
     assertType(
@@ -201,7 +201,7 @@
   f(int? a, int b) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 11, 1)],
+      [error(diag.unusedElement, 11, 1)],
     );
 
     assertType(findNode.namedType('int? a'), 'int?');
@@ -216,10 +216,7 @@
   int g() => 0;
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 16, 1),
-        error(WarningCode.unusedElement, 32, 1),
-      ],
+      [error(diag.unusedElement, 16, 1), error(diag.unusedElement, 32, 1)],
     );
 
     assertType(findNode.namedType('int? f'), 'int?');
@@ -270,7 +267,7 @@
     parameters: FormalParameterList
       leftParenthesis: (
       rightParenthesis: )
-    declaredElement: <testLibraryFragment> p1@13
+    declaredFragment: <testLibraryFragment> p1@13
       element: isPublic
         type: void Function()
   rightParenthesis: )
@@ -290,7 +287,7 @@
       leftParenthesis: (
       rightParenthesis: )
     question: ?
-    declaredElement: <testLibraryFragment> p2@35
+    declaredFragment: <testLibraryFragment> p2@35
       element: isPublic
         type: void Function()?
   rightParenthesis: )
@@ -312,10 +309,10 @@
         leftParenthesis: (
         rightParenthesis: )
       question: ?
-      declaredElement: <testLibraryFragment> p3@59
+      declaredFragment: <testLibraryFragment> p3@59
         element: isPublic
           type: void Function()?
-    declaredElement: <testLibraryFragment> p3@59
+    declaredFragment: <testLibraryFragment> p3@59
       element: isPublic
         type: void Function()?
   rightDelimiter: }
@@ -350,9 +347,10 @@
     parameters: FormalParameterList
       leftParenthesis: (
       rightParenthesis: )
-    declaredElement: <testLibraryFragment> f1@57
+    declaredFragment: <testLibraryFragment> f1@57
       element: isFinal isPublic
         type: void Function()
+        field: <testLibrary>::@class::A::@field::f1
   rightParenthesis: )
 ''');
 
@@ -372,9 +370,10 @@
       leftParenthesis: (
       rightParenthesis: )
     question: ?
-    declaredElement: <testLibraryFragment> f2@81
+    declaredFragment: <testLibraryFragment> f2@81
       element: isFinal isPublic
         type: void Function()?
+        field: <testLibrary>::@class::A::@field::f2
   rightParenthesis: )
 ''');
 
@@ -396,12 +395,14 @@
         leftParenthesis: (
         rightParenthesis: )
       question: ?
-      declaredElement: <testLibraryFragment> f3@107
+      declaredFragment: <testLibraryFragment> f3@107
         element: isFinal isPublic
           type: void Function()?
-    declaredElement: <testLibraryFragment> f3@107
+          field: <testLibrary>::@class::A::@field::f3
+    declaredFragment: <testLibraryFragment> f3@107
       element: isFinal isPublic
         type: void Function()?
+        field: <testLibrary>::@class::A::@field::f3
   rightDelimiter: }
   rightParenthesis: )
 ''');
@@ -417,9 +418,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 13, 2),
-        error(WarningCode.unusedElement, 37, 2),
-        error(WarningCode.unusedElement, 62, 2),
+        error(diag.unusedElement, 13, 2),
+        error(diag.unusedElement, 37, 2),
+        error(diag.unusedElement, 62, 2),
       ],
     );
 
@@ -436,7 +437,7 @@
     parameters: FormalParameterList
       leftParenthesis: (
       rightParenthesis: )
-    declaredElement: <testLibraryFragment> p1@21
+    declaredFragment: <testLibraryFragment> p1@21
       element: isPublic
         type: void Function()
   rightParenthesis: )
@@ -456,7 +457,7 @@
       leftParenthesis: (
       rightParenthesis: )
     question: ?
-    declaredElement: <testLibraryFragment> p2@45
+    declaredFragment: <testLibraryFragment> p2@45
       element: isPublic
         type: void Function()?
   rightParenthesis: )
@@ -478,10 +479,10 @@
         leftParenthesis: (
         rightParenthesis: )
       question: ?
-      declaredElement: <testLibraryFragment> p3@71
+      declaredFragment: <testLibraryFragment> p3@71
         element: isPublic
           type: void Function()?
-    declaredElement: <testLibraryFragment> p3@71
+    declaredFragment: <testLibraryFragment> p3@71
       element: isPublic
         type: void Function()?
   rightDelimiter: }
@@ -584,7 +585,7 @@
   F? a;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 50, 1)],
+      [error(diag.unusedLocalVariable, 50, 1)],
     );
 
     assertType(findNode.namedType('F? a'), 'int? Function(bool, String?)?');
@@ -599,7 +600,7 @@
   F<String>? a;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 66, 1)],
+      [error(diag.unusedLocalVariable, 66, 1)],
     );
 
     assertType(
@@ -630,8 +631,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 52, 1),
-        error(WarningCode.unusedLocalVariable, 68, 1),
+        error(diag.unusedLocalVariable, 52, 1),
+        error(diag.unusedLocalVariable, 68, 1),
       ],
     );
 
diff --git a/pkg/analyzer/test/src/dart/resolution/null_assert_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/null_assert_pattern_test.dart
index 28c0914..08d7551 100644
--- a/pkg/analyzer/test/src/dart/resolution/null_assert_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/null_assert_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (x case var y!) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -49,7 +49,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 45, 1)],
+      [error(diag.unusedLocalVariable, 45, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -73,7 +73,7 @@
   var (a!) = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 24, 1)],
+      [error(diag.unusedLocalVariable, 24, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/null_check_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/null_check_pattern_test.dart
index 355d2a4..e99b11a 100644
--- a/pkg/analyzer/test/src/dart/resolution/null_check_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/null_check_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (x case var y?) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -49,7 +49,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 45, 1)],
+      [error(diag.unusedLocalVariable, 45, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -74,8 +74,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.refutablePatternInIrrefutableContext, 24, 2),
-        error(WarningCode.unusedLocalVariable, 24, 1),
+        error(diag.refutablePatternInIrrefutableContext, 24, 2),
+        error(diag.unusedLocalVariable, 24, 1),
       ],
     );
     var node = findNode.singlePatternVariableDeclaration;
diff --git a/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart
index bc35558..1cace9f 100644
--- a/pkg/analyzer/test/src/dart/resolution/object_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/object_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -155,7 +155,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 90, 4)],
+      [error(diag.unusedLocalVariable, 90, 4)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -283,7 +283,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 83, 1)],
+      [error(diag.unusedLocalVariable, 83, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -327,7 +327,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 97, 1)],
+      [error(diag.unusedLocalVariable, 97, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -369,7 +369,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 84, 4)],
+      [error(diag.unusedLocalVariable, 84, 4)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -411,7 +411,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.missingNamedPatternFieldName, 75, 3)],
+      [error(diag.missingNamedPatternFieldName, 75, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -450,7 +450,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 81, 3)],
+      [error(diag.unusedLocalVariable, 81, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -491,7 +491,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 82, 3)],
+      [error(diag.unusedLocalVariable, 82, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -539,7 +539,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 82, 3)],
+      [error(diag.unusedLocalVariable, 82, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -583,7 +583,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 82, 3)],
+      [error(diag.unusedLocalVariable, 82, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -627,7 +627,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 82, 3)],
+      [error(diag.unusedLocalVariable, 82, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -665,7 +665,7 @@
   if (x case Object(0)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.positionalFieldInObjectPattern, 40, 1)],
+      [error(diag.positionalFieldInObjectPattern, 40, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -700,7 +700,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 59, 3)],
+      [error(diag.undefinedGetter, 59, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -739,8 +739,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedGetter, 65, 3),
-        error(WarningCode.unusedLocalVariable, 65, 3),
+        error(diag.undefinedGetter, 65, 3),
+        error(diag.unusedLocalVariable, 65, 3),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -819,7 +819,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 96, 3)],
+      [error(diag.unusedLocalVariable, 96, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -858,7 +858,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 67, 3)],
+      [error(diag.undefinedGetter, 67, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -896,13 +896,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 55, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -941,7 +935,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 77, 1)],
+      [error(diag.unusedLocalVariable, 77, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -985,7 +979,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 145, 1)],
+      [error(diag.unusedLocalVariable, 145, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -1040,7 +1034,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 141, 1)],
+      [error(diag.unusedLocalVariable, 141, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -1081,7 +1075,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 90, 1)],
+      [error(diag.unusedLocalVariable, 90, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -1123,8 +1117,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedGetter, 76, 3),
-        error(WarningCode.unusedLocalVariable, 85, 1),
+        error(diag.undefinedGetter, 76, 3),
+        error(diag.unusedLocalVariable, 85, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -1166,7 +1160,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 73, 1)],
+      [error(diag.unusedLocalVariable, 73, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -1207,7 +1201,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 71, 1)],
+      [error(diag.unusedLocalVariable, 71, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -1247,7 +1241,7 @@
   T get foo => throw 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 32, 1)],
+      [error(diag.unusedLocalVariable, 32, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
@@ -1296,7 +1290,7 @@
   T get foo => throw 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 29, 1)],
+      [error(diag.unusedLocalVariable, 29, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
@@ -1363,7 +1357,7 @@
   T get foo => throw 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 28, 1)],
+      [error(diag.unusedLocalVariable, 28, 1)],
     );
     var node = findNode.singlePatternVariableDeclaration;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/parenthesized_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/parenthesized_expression_test.dart
index a4e0702..5d985ee 100644
--- a/pkg/analyzer/test/src/dart/resolution/parenthesized_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/parenthesized_expression_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 28, 5)],
+      [error(diag.missingAssignableSelector, 28, 5)],
     );
 
     var node = findNode.singleParenthesizedExpression;
diff --git a/pkg/analyzer/test/src/dart/resolution/part_test.dart b/pkg/analyzer/test/src/dart/resolution/part_test.dart
index a036169..7154f9e 100644
--- a/pkg/analyzer/test/src/dart/resolution/part_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/part_test.dart
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -37,7 +36,7 @@
       r'''
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 5, 8)],
+      [error(diag.uriDoesNotExist, 5, 8)],
     );
 
     var node = findNode.singlePartDirective;
@@ -58,7 +57,7 @@
       '''
 part 'part.g.dart';
 ''',
-      [error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 13)],
+      [error(diag.uriHasNotBeenGenerated, 5, 13)],
     );
   }
 
@@ -67,7 +66,7 @@
       r'''
 part ':net';
 ''',
-      [error(CompileTimeErrorCode.invalidUri, 5, 6)],
+      [error(diag.invalidUri, 5, 6)],
     );
 
     var node = findNode.singlePartDirective;
@@ -88,7 +87,7 @@
       r'''
 part '${'foo'}.dart';
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 5, 15)],
+      [error(diag.uriWithInterpolation, 5, 15)],
     );
 
     var node = findNode.singlePartDirective;
@@ -119,7 +118,7 @@
       r'''
 part 'foo:bar';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 5, 9)],
+      [error(diag.uriDoesNotExist, 5, 9)],
     );
 
     var node = findNode.singlePartDirective;
@@ -213,9 +212,7 @@
     assertNoErrorsInResult();
 
     await resolveFile2(a);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.partOfDifferentLibrary, 33, 8),
-    ]);
+    assertErrorsInResult([error(diag.partOfDifferentLibrary, 33, 8)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
@@ -261,7 +258,7 @@
       r'''
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfDifferentLibrary, 5, 8)],
+      [error(diag.partOfDifferentLibrary, 5, 8)],
     );
 
     var node = findNode.singlePartDirective;
@@ -314,7 +311,7 @@
       r'''
 part 'a.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfNonPart, 5, 8)],
+      [error(diag.partOfNonPart, 5, 8)],
     );
 
     var node = findNode.singlePartDirective;
@@ -341,7 +338,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 23, 8)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 23, 8)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
@@ -367,7 +364,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.invalidUri, 23, 6)]);
+    assertErrorsInResult([error(diag.invalidUri, 23, 6)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
@@ -393,9 +390,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.uriWithInterpolation, 23, 15),
-    ]);
+    assertErrorsInResult([error(diag.uriWithInterpolation, 23, 15)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
@@ -431,7 +426,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 23, 9)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 23, 9)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
@@ -461,7 +456,7 @@
 ''');
 
     await resolveFile2(c);
-    assertErrorsInResult([error(ParserErrorCode.partOfName, 8, 6)]);
+    assertErrorsInResult([error(diag.partOfName, 8, 6)]);
 
     // We already reported an error above.
     await resolveFile2(b);
@@ -525,9 +520,7 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.partOfDifferentLibrary, 23, 8),
-    ]);
+    assertErrorsInResult([error(diag.partOfDifferentLibrary, 23, 8)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
@@ -555,7 +548,7 @@
     newFile('$testPackageLibPath/c.dart', '');
 
     await resolveFile2(b);
-    assertErrorsInResult([error(CompileTimeErrorCode.partOfNonPart, 23, 8)]);
+    assertErrorsInResult([error(diag.partOfNonPart, 23, 8)]);
 
     var node = findNode.singlePartDirective;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/pattern_assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/pattern_assignment_test.dart
index b53168a..13fbf1c 100644
--- a/pkg/analyzer/test/src/dart/resolution/pattern_assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/pattern_assignment_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -26,7 +25,7 @@
   a;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 38, 1)],
+      [error(diag.assignmentToFinalLocal, 38, 1)],
     );
   }
 
@@ -52,7 +51,7 @@
   a;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 67, 1)],
+      [error(diag.assignmentToFinalLocal, 67, 1)],
     );
   }
 
@@ -66,7 +65,7 @@
   a;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 43, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 43, 1)],
     );
   }
 
@@ -353,9 +352,9 @@
       [
         // The reference doesn't resolve so the errors include
         // UNUSED_LOCAL_VARIABLE and UNDEFINED_IDENTIFIER.
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 25, 1),
-        error(WarningCode.unusedLocalVariable, 25, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 35, 1),
+        error(diag.patternAssignmentDeclaresVariable, 25, 1),
+        error(diag.unusedLocalVariable, 25, 1),
+        error(diag.undefinedIdentifier, 35, 1),
       ],
     );
   }
@@ -371,8 +370,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.patternAssignmentDeclaresVariable, 25, 1),
-        error(WarningCode.unusedLocalVariable, 25, 1),
+        error(diag.patternAssignmentDeclaresVariable, 25, 1),
+        error(diag.unusedLocalVariable, 25, 1),
       ],
     );
   }
@@ -387,7 +386,7 @@
   a = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 44, 1)],
+      [error(diag.assignmentToFinalLocal, 44, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart
index 239c20e..5a1ed62 100644
--- a/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/pattern_variable_declaration_statement_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -92,7 +91,7 @@
 
 class A {}
 ''',
-      [error(WarningCode.unusedLocalVariable, 18, 1)],
+      [error(diag.unusedLocalVariable, 18, 1)],
     );
     var node = findNode.singlePatternVariableDeclarationStatement;
     assertResolvedNodeText(node, r'''
@@ -170,7 +169,7 @@
 
 T g<T>() => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1)],
+      [error(diag.unusedLocalVariable, 22, 1)],
     );
     var node = findNode.singlePatternVariableDeclarationStatement;
     assertResolvedNodeText(node, r'''
@@ -248,8 +247,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(WarningCode.unusedLocalVariable, 36, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.unusedLocalVariable, 36, 1),
       ],
     );
     var node = findNode.singlePatternVariableDeclarationStatement;
@@ -297,7 +296,7 @@
 
 T g<T>(T a) => throw 0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 18, 1)],
+      [error(diag.unusedLocalVariable, 18, 1)],
     );
     var node = findNode.singlePatternVariableDeclarationStatement;
     assertResolvedNodeText(node, r'''
@@ -352,13 +351,7 @@
   a;
 }
 ''',
-      [
-        error(
-          ParserErrorCode.variablePatternKeywordInDeclarationContext,
-          18,
-          5,
-        ),
-      ],
+      [error(diag.variablePatternKeywordInDeclarationContext, 18, 5)],
     );
   }
 
@@ -370,13 +363,7 @@
   a;
 }
 ''',
-      [
-        error(
-          ParserErrorCode.variablePatternKeywordInDeclarationContext,
-          18,
-          3,
-        ),
-      ],
+      [error(diag.variablePatternKeywordInDeclarationContext, 18, 3)],
     );
   }
 }
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 84c6bc9..37af0d4 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -3,8 +3,7 @@
 // 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:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -71,7 +70,7 @@
   x ++ ++;
 }
 ''',
-      [error(ParserErrorCode.illegalAssignmentToNonAssignable, 23, 2)],
+      [error(diag.illegalAssignmentToNonAssignable, 23, 2)],
     );
 
     var node = findNode.postfix('++;');
@@ -108,7 +107,7 @@
   a++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 29, 2)],
+      [error(diag.undefinedOperator, 29, 2)],
     );
 
     var node = findNode.postfix('++;');
@@ -159,7 +158,7 @@
   ++x++;
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 21, 2)],
+      [error(diag.missingAssignableSelector, 21, 2)],
     );
 
     var node = findNode.prefix('++x');
@@ -308,7 +307,7 @@
   (0)++;
 }
 ''',
-      [error(ParserErrorCode.illegalAssignmentToNonAssignable, 16, 2)],
+      [error(diag.illegalAssignmentToNonAssignable, 16, 2)],
     );
 
     var node = findNode.postfix('(0)++');
@@ -338,7 +337,7 @@
   int++;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 13, 3)],
+      [error(diag.assignmentToType, 13, 3)],
     );
 
     var node = findNode.postfix('int++');
@@ -365,7 +364,7 @@
   T++;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 16, 1)],
+      [error(diag.assignmentToType, 16, 1)],
     );
 
     var node = findNode.postfix('T++');
@@ -848,7 +847,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.illegalAssignmentToNonAssignable, 32, 2)],
+      [error(diag.illegalAssignmentToNonAssignable, 32, 2)],
     );
 
     var node = findNode.singlePostfixExpression;
@@ -876,7 +875,7 @@
   }++);
 }
 ''',
-      [error(ParserErrorCode.illegalAssignmentToNonAssignable, 51, 2)],
+      [error(diag.illegalAssignmentToNonAssignable, 51, 2)],
     );
 
     var node = findNode.postfix('++');
@@ -920,7 +919,7 @@
   x++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 1)],
+      [error(diag.undefinedIdentifier, 13, 1)],
     );
 
     var node = findNode.singlePostfixExpression;
@@ -1043,7 +1042,7 @@
   x!;
 }
 ''',
-      [error(WarningCode.nullCheckAlwaysFails, 19, 2)],
+      [error(diag.nullCheckAlwaysFails, 19, 2)],
     );
 
     assertType(findNode.postfix('x!'), 'Never');
@@ -1124,8 +1123,8 @@
 void test10(Foo? foo, int? a, int b) => foo?[a]![b];
 ''',
       [
-        error(StaticWarningCode.unnecessaryNonNullAssertion, 107, 1),
-        error(StaticWarningCode.unnecessaryNonNullAssertion, 173, 1),
+        error(diag.unnecessaryNonNullAssertion, 107, 1),
+        error(diag.unnecessaryNonNullAssertion, 173, 1),
       ],
     );
 
@@ -1185,7 +1184,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 70, 6)],
+      [error(diag.missingAssignableSelector, 70, 6)],
     );
 
     var node = findNode.methodInvocation('foo();');
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 fb94d9d..c0e3a48 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -71,7 +70,7 @@
   !x;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolNegationExpression, 19, 1)],
+      [error(diag.nonBoolNegationExpression, 19, 1)],
     );
 
     var node = findNode.prefix('!x');
@@ -98,13 +97,7 @@
   !a?.foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          55,
-          6,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 55, 6)],
     );
 
     assertResolvedNodeText(findNode.prefix('!a'), r'''
@@ -136,8 +129,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingAssignableSelector, 28, 5),
-        error(CompileTimeErrorCode.nonBoolNegationExpression, 28, 5),
+        error(diag.missingAssignableSelector, 28, 5),
+        error(diag.nonBoolNegationExpression, 28, 5),
       ],
     );
 
@@ -160,7 +153,7 @@
   ++ ++ x;
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 24, 1)],
+      [error(diag.missingAssignableSelector, 24, 1)],
     );
 
     var node = findNode.prefix('++ ++ x');
@@ -197,7 +190,7 @@
   ++a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 28, 2)],
+      [error(diag.undefinedOperator, 28, 2)],
     );
 
     var node = findNode.prefix('++a');
@@ -338,7 +331,7 @@
   ++x;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 15, 1)],
+      [error(diag.undefinedIdentifier, 15, 1)],
     );
 
     var node = findNode.prefix('++x');
@@ -446,7 +439,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionNotOperator, 65, 9)],
+      [error(diag.augmentedExpressionNotOperator, 65, 9)],
     );
 
     var node = findNode.singlePrefixExpression;
@@ -484,7 +477,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionIsSetter, 69, 9)],
+      [error(diag.augmentedExpressionIsSetter, 69, 9)],
     );
 
     var node = findNode.singlePrefixExpression;
@@ -568,13 +561,7 @@
   -a?.foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 50, 1)],
     );
 
     assertResolvedNodeText(findNode.prefix('-a'), r'''
@@ -660,7 +647,7 @@
   ++Ext(c);
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 103, 1)],
+      [error(diag.missingAssignableSelector, 103, 1)],
     );
 
     var node = findNode.prefix('++Ext');
@@ -697,7 +684,7 @@
   ++int;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 15, 3)],
+      [error(diag.assignmentToType, 15, 3)],
     );
 
     var node = findNode.prefix('++int');
@@ -1057,7 +1044,7 @@
   ++x;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 31, 3)],
+      [error(diag.invalidAssignment, 31, 3)],
     );
 
     var node = findNode.prefix('++x');
@@ -1203,7 +1190,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 29, 5)],
+      [error(diag.missingAssignableSelector, 29, 5)],
     );
 
     var node = findNode.singlePrefixExpression;
@@ -1231,7 +1218,7 @@
   };
 }
 ''',
-      [error(ParserErrorCode.missingAssignableSelector, 51, 1)],
+      [error(diag.missingAssignableSelector, 51, 1)],
     );
 
     var node = findNode.prefix('++switch');
@@ -1316,7 +1303,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.augmentedExpressionNotOperator, 77, 9)],
+      [error(diag.augmentedExpressionNotOperator, 77, 9)],
     );
 
     var node = findNode.singlePrefixExpression;
@@ -1345,13 +1332,7 @@
   ~a?.foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 50, 1)],
     );
 
     assertResolvedNodeText(findNode.prefix('~a'), r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index 8c84dcd..b5490ce 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -424,7 +424,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 50, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 50, 1)],
     );
 
     var node = findNode.simple('a;');
@@ -569,7 +569,7 @@
   prefix.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 48, 3)],
+      [error(diag.undefinedPrefixedName, 48, 3)],
     );
 
     var node = findNode.prefixed('prefix.');
@@ -885,13 +885,7 @@
   a.foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          69,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 69, 3)],
     );
 
     var node = findNode.singlePrefixedIdentifier;
@@ -1150,7 +1144,7 @@
   a.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 20, 3)],
+      [error(diag.undefinedGetter, 20, 3)],
     );
 
     var node = findNode.prefixed('foo;');
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 91d4917..23af716 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -201,7 +201,7 @@
   return B().a; // ref
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 85, 5)],
+      [error(diag.returnOfInvalidTypeFromFunction, 85, 5)],
     );
 
     var identifier = findNode.simple('a; // ref');
@@ -335,7 +335,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperGetter, 54, 3)],
+      [error(diag.undefinedSuperGetter, 54, 3)],
     );
 
     var node = findNode.propertyAccess('foo;');
@@ -428,7 +428,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperGetter, 97, 3)],
+      [error(diag.undefinedSuperGetter, 97, 3)],
     );
 
     var node = findNode.propertyAccess('foo;');
@@ -732,7 +732,7 @@
 DefaultFormalParameter
   parameter: SimpleFormalParameter
     name: a
-    declaredElement: <testLibraryFragment> a@8
+    declaredFragment: <testLibraryFragment> a@8
       element: hasImplicitType isPublic
         type: dynamic
   separator: =
@@ -750,7 +750,7 @@
           staticType: InvalidType
         staticType: InvalidType
     staticType: InvalidType
-  declaredElement: <testLibraryFragment> a@8
+  declaredFragment: <testLibraryFragment> a@8
     element: hasImplicitType isPublic
       type: dynamic
 ''');
@@ -1749,7 +1749,7 @@
   (a).foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 49, 3)],
+      [error(diag.undefinedGetter, 49, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -2154,7 +2154,7 @@
   r.$3;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 30, 2)],
+      [error(diag.undefinedGetter, 30, 2)],
     );
 
     var node = findNode.propertyAccess(r'$3;');
@@ -2180,7 +2180,7 @@
   r.$0a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 30, 3)],
+      [error(diag.undefinedGetter, 30, 3)],
     );
 
     var node = findNode.propertyAccess(r'$0a;');
@@ -2206,7 +2206,7 @@
   r.$zero;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 30, 5)],
+      [error(diag.undefinedGetter, 30, 5)],
     );
 
     var node = findNode.propertyAccess(r'$zero;');
@@ -2261,7 +2261,7 @@
   r.a$0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 30, 3)],
+      [error(diag.undefinedGetter, 30, 3)],
     );
 
     var node = findNode.propertyAccess(r'a$0;');
@@ -2310,7 +2310,7 @@
   r.bar;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 28, 3)],
+      [error(diag.undefinedGetter, 28, 3)],
     );
 
     var node = findNode.propertyAccess('bar;');
@@ -2338,7 +2338,7 @@
   r.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 34, 3)],
+      [error(diag.undefinedGetter, 34, 3)],
     );
 
     var node = findNode.propertyAccess('foo;');
@@ -2582,13 +2582,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          37,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 37, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -2638,7 +2632,7 @@
   (a).foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 14, 1)],
+      [error(diag.undefinedIdentifier, 14, 1)],
     );
 
     var node = findNode.singlePropertyAccess;
diff --git a/pkg/analyzer/test/src/dart/resolution/record_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/record_literal_test.dart
index b234623..0f69e8b 100644
--- a/pkg/analyzer/test/src/dart/resolution/record_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/record_literal_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -914,7 +913,7 @@
       staticType: int
     rightParenthesis: )
     staticType: int
-  declaredElement: <testLibraryFragment> x@22
+  declaredFragment: <testLibraryFragment> x@22
 ''');
   }
 
@@ -925,8 +924,8 @@
 final x = const (0);
 ''',
       [
-        error(ParserErrorCode.experimentNotEnabled, 32, 1),
-        error(ParserErrorCode.recordLiteralOnePositionalNoTrailingComma, 34, 1),
+        error(diag.experimentNotEnabled, 32, 1),
+        error(diag.recordLiteralOnePositionalNoTrailingComma, 34, 1),
       ],
     );
 
@@ -942,7 +941,7 @@
       staticType: int
     rightParenthesis: )
     staticType: int
-  declaredElement: <testLibraryFragment> x@22
+  declaredFragment: <testLibraryFragment> x@22
 ''');
   }
 
@@ -952,7 +951,7 @@
 // @dart = 2.19
 final x = (0,);
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 26, 1)],
+      [error(diag.experimentNotEnabled, 26, 1)],
     );
 
     var node = findNode.singleVariableDeclaration;
@@ -967,7 +966,7 @@
       staticType: int
     rightParenthesis: )
     staticType: int
-  declaredElement: <testLibraryFragment> x@22
+  declaredFragment: <testLibraryFragment> x@22
 ''');
   }
 
@@ -977,7 +976,7 @@
 // @dart = 2.19
 final x = (0, 1);
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 26, 1)],
+      [error(diag.experimentNotEnabled, 26, 1)],
     );
 
     var node = findNode.singleVariableDeclaration;
@@ -992,7 +991,7 @@
       staticType: int
     rightParenthesis: )
     staticType: int
-  declaredElement: <testLibraryFragment> x@22
+  declaredFragment: <testLibraryFragment> x@22
 ''');
   }
 
@@ -1002,7 +1001,7 @@
 // @dart = 2.19
 final x = ();
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 26, 1)],
+      [error(diag.experimentNotEnabled, 26, 1)],
     );
 
     var node = findNode.singleVariableDeclaration;
@@ -1018,7 +1017,7 @@
       staticType: InvalidType
     rightParenthesis: )
     staticType: InvalidType
-  declaredElement: <testLibraryFragment> x@22
+  declaredFragment: <testLibraryFragment> x@22
 ''');
   }
 
@@ -1143,7 +1142,7 @@
 
 g() => (f(),);
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 21, 3)],
+      [error(diag.useOfVoidResult, 21, 3)],
     );
 
     var node = findNode.recordLiteral('(f(),');
diff --git a/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart
index f5a4b4f..0408919 100644
--- a/pkg/analyzer/test/src/dart/resolution/record_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/record_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -43,7 +43,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 1)],
+      [error(diag.unusedLocalVariable, 46, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -77,7 +77,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 41, 1)],
+      [error(diag.unusedLocalVariable, 41, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -155,7 +155,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 1)],
+      [error(diag.unusedLocalVariable, 54, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -192,7 +192,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 1)],
+      [error(diag.unusedLocalVariable, 54, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -252,7 +252,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 49, 1)],
+      [error(diag.unusedLocalVariable, 49, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -286,7 +286,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 49, 1)],
+      [error(diag.unusedLocalVariable, 49, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -319,8 +319,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 39, 10),
-        error(WarningCode.unusedLocalVariable, 47, 1),
+        error(diag.patternNeverMatchesValueType, 39, 10),
+        error(diag.unusedLocalVariable, 47, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -357,8 +357,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 39, 9),
-        error(WarningCode.unusedLocalVariable, 46, 1),
+        error(diag.patternNeverMatchesValueType, 39, 9),
+        error(diag.unusedLocalVariable, 46, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -393,8 +393,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 46, 9),
-        error(WarningCode.unusedLocalVariable, 53, 1),
+        error(diag.patternNeverMatchesValueType, 46, 9),
+        error(diag.unusedLocalVariable, 53, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -429,8 +429,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 53, 9),
-        error(WarningCode.unusedLocalVariable, 60, 1),
+        error(diag.patternNeverMatchesValueType, 53, 9),
+        error(diag.unusedLocalVariable, 60, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -466,8 +466,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 39, 8),
-        error(WarningCode.unusedLocalVariable, 44, 1),
+        error(diag.patternNeverMatchesValueType, 39, 8),
+        error(diag.unusedLocalVariable, 44, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -500,8 +500,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 50, 8),
-        error(WarningCode.unusedLocalVariable, 55, 1),
+        error(diag.patternNeverMatchesValueType, 50, 8),
+        error(diag.unusedLocalVariable, 55, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -535,8 +535,8 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 60, 7),
-        error(WarningCode.unreachableSwitchDefault, 60, 7),
+        error(diag.deadCode, 60, 7),
+        error(diag.unreachableSwitchDefault, 60, 7),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -559,9 +559,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 69, 1),
-        error(WarningCode.unusedLocalVariable, 81, 1),
-        error(WarningCode.unusedLocalVariable, 88, 1),
+        error(diag.unusedLocalVariable, 69, 1),
+        error(diag.unusedLocalVariable, 81, 1),
+        error(diag.unusedLocalVariable, 88, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -615,8 +615,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 48, 12),
-        error(WarningCode.unusedLocalVariable, 58, 1),
+        error(diag.patternNeverMatchesValueType, 48, 12),
+        error(diag.unusedLocalVariable, 58, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -651,7 +651,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 58, 1)],
+      [error(diag.unusedLocalVariable, 58, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -686,8 +686,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 48, 5),
-        error(CompileTimeErrorCode.missingNamedPatternFieldName, 49, 3),
+        error(diag.patternNeverMatchesValueType, 48, 5),
+        error(diag.missingNamedPatternFieldName, 49, 3),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -719,7 +719,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 55, 3)],
+      [error(diag.unusedLocalVariable, 55, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -752,7 +752,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 56, 3)],
+      [error(diag.unusedLocalVariable, 56, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -792,7 +792,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 56, 3)],
+      [error(diag.unusedLocalVariable, 56, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -828,7 +828,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 56, 3)],
+      [error(diag.unusedLocalVariable, 56, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -864,7 +864,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 48, 1)],
+      [error(diag.unusedLocalVariable, 48, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -893,8 +893,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(WarningCode.unusedLocalVariable, 36, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.unusedLocalVariable, 36, 1),
       ],
     );
     var node = findNode.singlePatternVariableDeclaration;
@@ -941,8 +941,8 @@
 (T, U) g<T, U>() => throw 0;
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 22, 1),
-        error(WarningCode.unusedLocalVariable, 32, 1),
+        error(diag.unusedLocalVariable, 22, 1),
+        error(diag.unusedLocalVariable, 32, 1),
       ],
     );
     var node = findNode.singlePatternVariableDeclaration;
diff --git a/pkg/analyzer/test/src/dart/resolution/record_type_annotation_test.dart b/pkg/analyzer/test/src/dart/resolution/record_type_annotation_test.dart
index 7e470e0..b86958c 100644
--- a/pkg/analyzer/test/src/dart/resolution/record_type_annotation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/record_type_annotation_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -75,7 +75,7 @@
 // @dart = 2.19
 void f(({int f1, String f2}) x) {}
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 23, 1)],
+      [error(diag.experimentNotEnabled, 23, 1)],
     );
 
     var node = findNode.singleFormalParameterList;
@@ -88,7 +88,7 @@
       element: <null>
       type: InvalidType
     name: x
-    declaredElement: <testLibraryFragment> x@45
+    declaredFragment: <testLibraryFragment> x@45
       element: isPublic
         type: InvalidType
   rightParenthesis: )
@@ -101,7 +101,7 @@
 // @dart = 2.19
 void f((int, String) x) {}
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 23, 1)],
+      [error(diag.experimentNotEnabled, 23, 1)],
     );
 
     var node = findNode.singleFormalParameterList;
@@ -114,7 +114,7 @@
       element: <null>
       type: InvalidType
     name: x
-    declaredElement: <testLibraryFragment> x@37
+    declaredFragment: <testLibraryFragment> x@37
       element: isPublic
         type: InvalidType
   rightParenthesis: )
diff --git a/pkg/analyzer/test/src/dart/resolution/redirecting_constructor_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/redirecting_constructor_invocation_test.dart
index b3050fa..284be05 100644
--- a/pkg/analyzer/test/src/dart/resolution/redirecting_constructor_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/redirecting_constructor_invocation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -52,13 +52,7 @@
   C.other() : this.named(0);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-          24,
-          13,
-        ),
-      ],
+      [error(diag.redirectGenerativeToMissingConstructor, 24, 13)],
     );
 
     var node = findNode.singleRedirectingConstructorInvocation;
@@ -114,13 +108,7 @@
   C.other() : this(0);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-          37,
-          7,
-        ),
-      ],
+      [error(diag.redirectGenerativeToMissingConstructor, 37, 7)],
     );
 
     var node = findNode.singleRedirectingConstructorInvocation;
diff --git a/pkg/analyzer/test/src/dart/resolution/relational_pattern_test.dart b/pkg/analyzer/test/src/dart/resolution/relational_pattern_test.dart
index 8903d58..06ebfee 100644
--- a/pkg/analyzer/test/src/dart/resolution/relational_pattern_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/relational_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -127,7 +127,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 50, 1)],
+      [error(diag.undefinedOperator, 50, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -205,7 +205,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 50, 2)],
+      [error(diag.undefinedOperator, 50, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -305,7 +305,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 50, 1)],
+      [error(diag.undefinedOperator, 50, 1)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -383,7 +383,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 50, 2)],
+      [error(diag.undefinedOperator, 50, 2)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
@@ -455,13 +455,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          57,
-          3,
-        ),
-      ],
+      [error(diag.nonConstantRelationalPatternExpression, 57, 3)],
     );
     var node = findNode.singleGuardedPattern.pattern;
     assertResolvedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/scope_test.dart b/pkg/analyzer/test/src/dart/resolution/scope_test.dart
index e8c1013..3a8507b1 100644
--- a/pkg/analyzer/test/src/dart/resolution/scope_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/scope_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/resolver/scope.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -22,7 +22,7 @@
       r'''
 import 'dart:math' as prefix;
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
     var namespace = findElement2.import('dart:math').namespace;
     return namespace as PrefixedNamespace;
diff --git a/pkg/analyzer/test/src/dart/resolution/set_or_map_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/set_or_map_literal_test.dart
index 55ef825..51b2263 100644
--- a/pkg/analyzer/test/src/dart/resolution/set_or_map_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/set_or_map_literal_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -76,7 +76,7 @@
   var v = {0};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
 
     var node = findNode.singleSetOrMapLiteral;
@@ -100,7 +100,7 @@
   var v = {0: ''};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
 
     var node = findNode.singleSetOrMapLiteral;
@@ -128,7 +128,7 @@
   var v = {};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
 
     var node = findNode.singleSetOrMapLiteral;
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 c486350..ff80def 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -197,7 +197,7 @@
   dynamic;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 42, 7)],
+      [error(diag.undefinedIdentifier, 42, 7)],
     );
 
     var node = findNode.simple('dynamic;');
@@ -273,7 +273,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerativeConstructor, 43, 1)],
+      [error(diag.returnInGenerativeConstructor, 43, 1)],
     );
 
     var node = findNode.simple('a;');
@@ -295,8 +295,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnInGenerativeConstructor, 30, 5),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromConstructor, 33, 1),
+        error(diag.returnInGenerativeConstructor, 30, 5),
+        error(diag.returnOfInvalidTypeFromConstructor, 33, 1),
       ],
     );
 
@@ -361,7 +361,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 68, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 68, 1)],
     );
 
     var identifier = findNode.simple('a;');
@@ -548,7 +548,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 46, 3)],
+      [error(diag.undefinedIdentifier, 46, 3)],
     );
 
     var node = findNode.simple('bar;');
@@ -625,7 +625,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 48, 2)],
+      [error(diag.undefinedIdentifier, 48, 2)],
     );
 
     var node = findNode.simple(r'$3;');
diff --git a/pkg/analyzer/test/src/dart/resolution/super_constructor_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/super_constructor_invocation_test.dart
index 5899d6d..ab21ef5 100644
--- a/pkg/analyzer/test/src/dart/resolution/super_constructor_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/super_constructor_invocation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -59,7 +59,7 @@
   B() : super.named(0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedConstructorInInitializer, 53, 14)],
+      [error(diag.undefinedConstructorInInitializer, 53, 14)],
     );
 
     var node = findNode.singleSuperConstructorInvocation;
@@ -95,7 +95,7 @@
   const B() : super(5);
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithNonConstSuper, 71, 8)],
+      [error(diag.constConstructorWithNonConstSuper, 71, 8)],
     );
 
     var node = findNode.singleSuperConstructorInvocation;
@@ -152,13 +152,7 @@
   B() : super(0);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-          59,
-          8,
-        ),
-      ],
+      [error(diag.undefinedConstructorInInitializerDefault, 59, 8)],
     );
 
     var node = findNode.singleSuperConstructorInvocation;
diff --git a/pkg/analyzer/test/src/dart/resolution/super_formal_parameter_test.dart b/pkg/analyzer/test/src/dart/resolution/super_formal_parameter_test.dart
index 8d853c0..395e1b6 100644
--- a/pkg/analyzer/test/src/dart/resolution/super_formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/super_formal_parameter_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/element/member.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_element2.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -76,7 +76,7 @@
     typeParameters
       TypeParameter
         name: T
-        declaredElement: <testLibraryFragment> T@62
+        declaredFragment: <testLibraryFragment> T@62
           defaultType: null
     rightBracket: >
   parameters: FormalParameterList
@@ -87,11 +87,11 @@
         element: dart:core::@class::int
         type: int
       name: b
-      declaredElement: <testLibraryFragment> b@69
+      declaredFragment: <testLibraryFragment> b@69
         element: isPublic
           type: int
     rightParenthesis: )
-  declaredElement: <testLibraryFragment> a@60
+  declaredFragment: <testLibraryFragment> a@60
     element: isFinal isPublic
       type: T Function<T>(int)
 ''');
@@ -102,7 +102,7 @@
       r'''
 void f(super.a) {}
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 7, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 7, 5)],
     );
 
     var node = findNode.superFormalParameter('super.');
@@ -111,7 +111,7 @@
   superKeyword: super
   period: .
   name: a
-  declaredElement: <testLibraryFragment> a@13
+  declaredFragment: <testLibraryFragment> a@13
     element: hasImplicitType isFinal isPublic
       type: dynamic
 ''');
@@ -134,7 +134,7 @@
   superKeyword: super
   period: .
   name: a
-  declaredElement: <testLibraryFragment> a@59
+  declaredFragment: <testLibraryFragment> a@59
     element: hasImplicitType isFinal isPublic
       type: int?
 ''');
@@ -157,7 +157,7 @@
   superKeyword: super
   period: .
   name: a
-  declaredElement: <testLibraryFragment> a@59
+  declaredFragment: <testLibraryFragment> a@59
     element: hasImplicitType isFinal isPublic
       type: int?
 ''');
@@ -181,7 +181,7 @@
   superKeyword: super
   period: .
   name: a
-  declaredElement: <testLibraryFragment> a@76
+  declaredFragment: <testLibraryFragment> a@76
     element: hasImplicitType isFinal isPublic
       type: int
 ''');
@@ -204,7 +204,7 @@
   superKeyword: super
   period: .
   name: a
-  declaredElement: <testLibraryFragment> a@55
+  declaredFragment: <testLibraryFragment> a@55
     element: hasImplicitType isFinal isPublic
       type: int
 ''');
diff --git a/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
index a34e0ae..a0f3ccf 100644
--- a/pkg/analyzer/test/src/dart/resolution/switch_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/switch_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -78,7 +78,7 @@
       r'''
 final a = switch (0) {};
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchExpression, 10, 6)],
+      [error(diag.nonExhaustiveSwitchExpression, 10, 6)],
     );
 
     var node = findNode.singleSwitchExpression;
@@ -153,7 +153,7 @@
   });
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 27, 1)],
+      [error(diag.useOfVoidResult, 27, 1)],
     );
 
     var node = findNode.singleSwitchExpression;
@@ -532,7 +532,7 @@
   });
 }
 ''',
-      [error(WarningCode.deadCode, 52, 8)],
+      [error(diag.deadCode, 52, 8)],
     );
 
     var node = findNode.switchExpression('switch');
@@ -611,13 +611,9 @@
 }
 ''',
       [
+        error(diag.nonConstantRelationalPatternExpression, 64, 1),
         error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          64,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           64,
           1,
           contextMessages: [message(testFile, 58, 1)],
@@ -707,7 +703,7 @@
   });
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 72, 1)],
+      [error(diag.undefinedIdentifier, 72, 1)],
     );
 
     var node = findNode.switchExpression('switch');
diff --git a/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart
index 33dc05d..c8d0a79 100644
--- a/pkg/analyzer/test/src/dart/resolution/switch_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/switch_statement_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -603,8 +603,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .patternVariableSharedCaseScopeDifferentFinalityOrType,
+          diag.patternVariableSharedCaseScopeDifferentFinalityOrType,
           101,
           1,
         ),
@@ -706,8 +705,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .patternVariableSharedCaseScopeDifferentFinalityOrType,
+          diag.patternVariableSharedCaseScopeDifferentFinalityOrType,
           101,
           1,
         ),
@@ -809,8 +807,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .patternVariableSharedCaseScopeDifferentFinalityOrType,
+          diag.patternVariableSharedCaseScopeDifferentFinalityOrType,
           95,
           1,
         ),
@@ -909,13 +906,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-          80,
-          1,
-        ),
-      ],
+      [error(diag.patternVariableSharedCaseScopeNotAllCases, 80, 1)],
     );
 
     var node = findNode.switchStatement('switch');
@@ -990,13 +981,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-          80,
-          1,
-        ),
-      ],
+      [error(diag.patternVariableSharedCaseScopeNotAllCases, 80, 1)],
     );
 
     var node = findNode.switchStatement('switch');
@@ -1071,13 +1056,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeHasLabel,
-          81,
-          1,
-        ),
-      ],
+      [error(diag.patternVariableSharedCaseScopeHasLabel, 81, 1)],
     );
 
     var node = findNode.switchStatement('switch');
@@ -1148,14 +1127,10 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 55, 4),
-        error(WarningCode.unreachableSwitchCase, 55, 4),
-        error(WarningCode.deadCode, 71, 7),
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeHasLabel,
-          86,
-          1,
-        ),
+        error(diag.deadCode, 55, 4),
+        error(diag.unreachableSwitchCase, 55, 4),
+        error(diag.deadCode, 71, 7),
+        error(diag.patternVariableSharedCaseScopeHasLabel, 86, 1),
       ],
     );
 
@@ -1219,12 +1194,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLabel, 39, 8),
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeHasLabel,
-          81,
-          1,
-        ),
+        error(diag.unusedLabel, 39, 8),
+        error(diag.patternVariableSharedCaseScopeHasLabel, 81, 1),
       ],
     );
 
@@ -1302,21 +1273,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-          95,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-          104,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-          113,
-          1,
-        ),
+        error(diag.patternVariableSharedCaseScopeNotAllCases, 95, 1),
+        error(diag.patternVariableSharedCaseScopeNotAllCases, 104, 1),
+        error(diag.patternVariableSharedCaseScopeNotAllCases, 113, 1),
       ],
     );
 
@@ -1407,7 +1366,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 56, 8)],
+      [error(diag.deadCode, 56, 8)],
     );
 
     var node = findNode.switchStatement('switch');
@@ -1480,13 +1439,9 @@
 }
 ''',
       [
+        error(diag.nonConstantRelationalPatternExpression, 68, 1),
         error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          68,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           68,
           1,
           contextMessages: [message(testFile, 62, 1)],
diff --git a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
index 9a293f8..6639c73 100644
--- a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -25,13 +25,7 @@
 String g() => '';
 final x = f(g, (z) => z.length);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          108,
-          6,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 108, 6)],
     );
     var node = findNode.variableDeclaration('x =');
     assertResolvedNodeText(node, r'''
@@ -58,7 +52,7 @@
             leftParenthesis: (
             parameter: SimpleFormalParameter
               name: z
-              declaredElement: <testLibraryFragment> z@100
+              declaredFragment: <testLibraryFragment> z@100
                 element: hasImplicitType isPublic
                   type: Object?
             rightParenthesis: )
@@ -76,7 +70,7 @@
                 staticType: InvalidType
               element: <null>
               staticType: InvalidType
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: null@null
               type: InvalidType Function(Object?)
           correspondingParameter: ParameterMember
@@ -88,7 +82,7 @@
     staticType: String?
     typeArgumentTypes
       String
-  declaredElement: <testLibraryFragment> x@90
+  declaredFragment: <testLibraryFragment> x@90
 ''');
   }
 
@@ -125,7 +119,7 @@
             leftParenthesis: (
             parameter: SimpleFormalParameter
               name: z
-              declaredElement: <testLibraryFragment> z@108
+              declaredFragment: <testLibraryFragment> z@108
                 element: hasImplicitType isPublic
                   type: String
             rightParenthesis: )
@@ -143,7 +137,7 @@
                 staticType: int
               element: dart:core::@class::String::@getter::length
               staticType: int
-          declaredElement: <testLibraryFragment> null@null
+          declaredFragment: <testLibraryFragment> null@null
             element: null@null
               type: int Function(String)
           correspondingParameter: ParameterMember
@@ -155,7 +149,7 @@
     staticType: String?
     typeArgumentTypes
       String
-  declaredElement: <testLibraryFragment> x@98
+  declaredFragment: <testLibraryFragment> x@98
 ''');
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/top_type_inference_test.dart b/pkg/analyzer/test/src/dart/resolution/top_type_inference_test.dart
index aab41c5..7788a6b 100644
--- a/pkg/analyzer/test/src/dart/resolution/top_type_inference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/top_type_inference_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -35,10 +35,7 @@
 }
 final b = new A().a;
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 18, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 37, 1),
-      ],
+      [error(diag.topLevelCycle, 18, 1), error(diag.topLevelCycle, 37, 1)],
     );
 
     assertTypeDynamic(findElement2.field('a').type);
diff --git a/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
index 15d0d3b..a9f8b14 100644
--- a/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/try_statement_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -23,7 +22,7 @@
   try {} catch () {}
 }
 ''',
-      [error(ParserErrorCode.catchSyntax, 27, 1)],
+      [error(diag.catchSyntax, 27, 1)],
     );
 
     var node = findNode.singleTryStatement;
@@ -57,8 +56,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedCatchStack, 30, 1),
-        error(ParserErrorCode.catchSyntaxExtraParameters, 31, 1),
+        error(diag.unusedCatchStack, 30, 1),
+        error(diag.catchSyntaxExtraParameters, 31, 1),
       ],
     );
 
@@ -98,10 +97,7 @@
   try {} catch (x, {st}) {}
 }
 ''',
-      [
-        error(ParserErrorCode.catchSyntax, 30, 1),
-        error(WarningCode.unusedCatchStack, 31, 2),
-      ],
+      [error(diag.catchSyntax, 30, 1), error(diag.unusedCatchStack, 31, 2)],
     );
 
     var node = findNode.singleTryStatement;
@@ -140,10 +136,7 @@
   try {} catch (x, [st]) {}
 }
 ''',
-      [
-        error(ParserErrorCode.catchSyntax, 30, 1),
-        error(WarningCode.unusedCatchStack, 31, 2),
-      ],
+      [error(diag.catchSyntax, 30, 1), error(diag.unusedCatchStack, 31, 2)],
     );
 
     var node = findNode.singleTryStatement;
@@ -182,7 +175,7 @@
   try {} catch (e, st) {}
 }
 ''',
-      [error(WarningCode.unusedCatchStack, 30, 2)],
+      [error(diag.unusedCatchStack, 30, 2)],
     );
 
     var node = findNode.singleTryStatement;
@@ -221,7 +214,7 @@
   try {} on int catch (e, st) {}
 }
 ''',
-      [error(WarningCode.unusedCatchStack, 37, 2)],
+      [error(diag.unusedCatchStack, 37, 2)],
     );
 
     var node = findNode.singleTryStatement;
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 77ef269..e1d5a26 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 
 T a<T>() => throw '';
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 50, 1)],
+      [error(diag.listElementTypeNotAssignable, 50, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -107,7 +107,7 @@
 
 T a<T>() => throw '';
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 38, 1)],
+      [error(diag.listElementTypeNotAssignable, 38, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -163,8 +163,8 @@
 T a<T>() => throw '';
 ''',
       [
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 55, 1),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 59, 1),
+        error(diag.mapKeyTypeNotAssignable, 55, 1),
+        error(diag.mapValueTypeNotAssignable, 59, 1),
       ],
     );
 
@@ -247,8 +247,8 @@
 T a<T>() => throw '';
 ''',
       [
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 43, 1),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 47, 1),
+        error(diag.mapKeyTypeNotAssignable, 43, 1),
+        error(diag.mapValueTypeNotAssignable, 47, 1),
       ],
     );
 
@@ -304,7 +304,7 @@
 
 T a<T>() => throw '';
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 50, 1)],
+      [error(diag.setElementTypeNotAssignable, 50, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -385,7 +385,7 @@
 
 T a<T>() => throw '';
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 38, 1)],
+      [error(diag.setElementTypeNotAssignable, 38, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
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 0cc20d3..b0cef49 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -393,7 +393,7 @@
   E<int, bool>({}).foo();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension, 58, 11)],
+      [error(diag.wrongNumberOfTypeArgumentsExtension, 58, 11)],
     );
     var literal = findNode.setOrMapLiteral('{}).');
     assertType(literal, 'Set<dynamic>');
@@ -655,13 +655,7 @@
   E(s).foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
-          71,
-          1,
-        ),
-      ],
+      [error(diag.extensionOverrideArgumentNotAssignable, 71, 1)],
     );
     var override = findNode.extensionOverride('E(s)');
     assertElementTypes(override.typeArgumentTypes, ['num']);
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
index fa1517f..d7814fe 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   return 0;
 };
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 72, 1)],
+      [error(diag.returnOfInvalidTypeFromClosure, 72, 1)],
     );
     _assertReturnType('() async {', 'Future<void>');
   }
@@ -38,7 +38,7 @@
   return 0;
 };
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 48, 1)],
+      [error(diag.returnOfInvalidTypeFromClosure, 48, 1)],
     );
     _assertReturnType('() async {', 'Future<void>');
   }
@@ -79,7 +79,7 @@
               FutureOr<Object?>
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Future<Object?> Function()
   staticType: Future<Object?> Function()
@@ -132,7 +132,7 @@
       staticType: FutureOr<int>
       typeArgumentTypes
         FutureOr<int>
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Future<int> Function()
   staticType: Future<int> Function()
@@ -174,7 +174,7 @@
       staticType: FutureOr<Object?>
       typeArgumentTypes
         FutureOr<Object?>
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Future<Object?> Function()
   staticType: Future<Object?> Function()
@@ -209,7 +209,7 @@
       staticType: FutureOr<Object?>
       typeArgumentTypes
         FutureOr<Object?>
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Future<Object?> Function()
   staticType: Future<Object?> Function()
@@ -262,7 +262,7 @@
               int
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Stream<int> Function()
   staticType: Stream<int> Function()
@@ -313,7 +313,7 @@
               int
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: int Function()
   staticType: int Function()
@@ -327,7 +327,7 @@
   return 0;
 };
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 34, 1)],
+      [error(diag.returnOfInvalidTypeFromClosure, 34, 1)],
     );
     _assertReturnType('() {', 'void');
   }
@@ -366,7 +366,7 @@
       staticType: int
       typeArgumentTypes
         int
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: int Function()
   staticType: int Function()
@@ -419,7 +419,7 @@
               int
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: Iterable<int> Function()
   staticType: Iterable<int> Function()
@@ -442,7 +442,7 @@
     leftParenthesis: (
     parameter: SimpleFormalParameter
       name: item
-      declaredElement: <testLibraryFragment> item@43
+      declaredFragment: <testLibraryFragment> item@43
         element: hasImplicitType isPublic
           type: int
     rightParenthesis: )
@@ -457,7 +457,7 @@
             staticType: int
           semicolon: ;
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: void Function(int)
   correspondingParameter: action@null
@@ -481,7 +481,7 @@
     leftParenthesis: (
     parameter: SimpleFormalParameter
       name: x
-      declaredElement: <testLibraryFragment> x@53
+      declaredFragment: <testLibraryFragment> x@53
         element: hasImplicitType isPublic
           type: Object?
     rightParenthesis: )
@@ -489,7 +489,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: void Function(Object?)
   correspondingParameter: <testLibrary>::@function::foo::@formalParameter::a
@@ -513,7 +513,7 @@
     leftParenthesis: (
     parameter: SimpleFormalParameter
       name: x
-      declaredElement: <testLibraryFragment> x@52
+      declaredFragment: <testLibraryFragment> x@52
         element: hasImplicitType isPublic
           type: Object?
     rightParenthesis: )
@@ -521,7 +521,7 @@
     block: Block
       leftBracket: {
       rightBracket: }
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: void Function(Object?)
   correspondingParameter: <testLibrary>::@function::foo::@formalParameter::a
@@ -536,7 +536,7 @@
   final v = <T>(T a) => <T>[a];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 19, 1)],
+      [error(diag.unusedLocalVariable, 19, 1)],
     );
 
     var node = findNode.functionExpression('<T>(');
@@ -547,7 +547,7 @@
     typeParameters
       TypeParameter
         name: T
-        declaredElement: <testLibraryFragment> T@24
+        declaredFragment: <testLibraryFragment> T@24
           defaultType: dynamic
     rightBracket: >
   parameters: FormalParameterList
@@ -558,7 +558,7 @@
         element: #E0 T
         type: T
       name: a
-      declaredElement: <testLibraryFragment> a@29
+      declaredFragment: <testLibraryFragment> a@29
         element: isPublic
           type: T
     rightParenthesis: )
@@ -581,7 +581,7 @@
           staticType: T
       rightBracket: ]
       staticType: List<T>
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: List<T> Function<T>(T)
   staticType: List<T> Function<T>(T)
@@ -606,7 +606,7 @@
     expression: IntegerLiteral
       literal: 42
       staticType: int
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: int Function()
   staticType: int Function()
@@ -629,7 +629,7 @@
     expression: IntegerLiteral
       literal: 42
       staticType: int
-  declaredElement: <testLibraryFragment> null@null
+  declaredFragment: <testLibraryFragment> null@null
     element: null@null
       type: int Function()
   staticType: int Function()
@@ -980,7 +980,7 @@
   return createT()('');
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 81, 2)],
+      [error(diag.argumentTypeNotAssignable, 81, 2)],
     );
 
     var node = findNode.functionExpressionInvocation("('')");
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_test.dart
index 5a85757..fdb7d0c 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -63,7 +63,7 @@
   foo(x: 1);
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 54, 3)],
+      [error(diag.missingRequiredArgument, 54, 3)],
     );
 
     var node = findNode.methodInvocation('foo(');
@@ -108,13 +108,7 @@
   foo(1);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural,
-          39,
-          1,
-        ),
-      ],
+      [error(diag.notEnoughPositionalArgumentsNamePlural, 39, 1)],
     );
 
     var node = findNode.methodInvocation('foo(');
@@ -150,7 +144,7 @@
   foo(1, 2, 3);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 44, 1)],
+      [error(diag.extraPositionalArguments, 44, 1)],
     );
 
     var node = findNode.methodInvocation('foo(');
@@ -196,7 +190,7 @@
   foo(1, 2, z: 3);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedNamedParameter, 44, 1)],
+      [error(diag.undefinedNamedParameter, 44, 1)],
     );
 
     var node = findNode.methodInvocation('foo(');
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
index 91e8b10..68c87c8 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -87,21 +87,15 @@
 }
 ''';
     if (_isEnabled) {
-      await assertErrorsInCode(code, [
-        error(WarningCode.unusedLocalVariable, 32, 1),
-      ]);
+      await assertErrorsInCode(code, [error(diag.unusedLocalVariable, 32, 1)]);
       assertType(findElement2.localVar('a').type, 'int');
       assertType(findElement2.parameter('x').type, 'int');
       assertType(findElement2.parameter('y').type, 'int');
       expect(findNode.binary('x + y').element!.enclosingElement!.name, 'num');
     } else {
       await assertErrorsInCode(code, [
-        error(WarningCode.unusedLocalVariable, 32, 1),
-        error(
-          CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-          61,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 32, 1),
+        error(diag.uncheckedOperatorInvocationOfNullableValue, 61, 1),
       ]);
     }
   }
@@ -118,9 +112,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 60, 1),
-        if (!_isEnabled)
-          error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 83, 1),
+        error(diag.unusedLocalVariable, 60, 1),
+        if (!_isEnabled) error(diag.uncheckedInvocationOfNullableValue, 83, 1),
       ],
     );
     assertType(
@@ -160,13 +153,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 29, 1),
+        error(diag.unusedLocalVariable, 29, 1),
         if (!_isEnabled)
-          error(
-            CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-            62,
-            1,
-          ),
+          error(diag.uncheckedOperatorInvocationOfNullableValue, 62, 1),
       ],
     );
     assertType(
@@ -192,7 +181,7 @@
   var a = f((x) => [x], () => 0);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 71, 1)],
+      [error(diag.unusedLocalVariable, 71, 1)],
     );
     assertType(findNode.methodInvocation('f(').typeArgumentTypes![0], 'int');
     assertType(
@@ -223,7 +212,7 @@
   var a = f(() => 0, (x) => [x]);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 71, 1)],
+      [error(diag.unusedLocalVariable, 71, 1)],
     );
     assertType(findNode.methodInvocation('f(').typeArgumentTypes![0], 'int');
     assertType(
@@ -254,7 +243,7 @@
   var a = f(0, (x) => [x]);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 60, 1)],
+      [error(diag.unusedLocalVariable, 60, 1)],
     );
     assertType(findNode.methodInvocation('f(').typeArgumentTypes![0], 'int');
     assertType(
@@ -400,7 +389,7 @@
   var a = list.fold(null, (int? x, y) => (x ?? 0) + y);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 29, 1)],
+      [error(diag.unusedLocalVariable, 29, 1)],
     );
     assertType(findElement2.localVar('a').type, 'int?');
     assertType(findElement2.parameter('x').type, 'int?');
@@ -418,7 +407,7 @@
   var a = f(null, ({int? x, required y}) => (x ?? 0) + y);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 86, 1)],
+      [error(diag.unusedLocalVariable, 86, 1)],
     );
     assertType(findElement2.localVar('a').type, 'int?');
     assertType(findElement2.parameter('x').type, 'int?');
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
index 42aa10b..9a44f29 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 List<int> a = ['a'];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 15, 3)],
+      [error(diag.listElementTypeNotAssignable, 15, 3)],
     );
     assertType(findNode.listLiteral('['), 'List<int>');
   }
@@ -55,7 +55,7 @@
   E a = [];
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 39, 2)],
+      [error(diag.invalidAssignment, 39, 2)],
     );
     assertType(findNode.listLiteral('['), 'List<dynamic>');
   }
@@ -67,7 +67,7 @@
   E a = [];
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 43, 2)],
+      [error(diag.invalidAssignment, 43, 2)],
     );
     assertType(findNode.listLiteral('['), 'List<dynamic>');
   }
@@ -110,7 +110,7 @@
       '''
 List<String> a = <int>[0];
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 17, 8)],
+      [error(diag.invalidAssignment, 17, 8)],
     );
     assertType(findNode.listLiteral('['), 'List<int>');
   }
@@ -120,7 +120,7 @@
       '''
 List<String> a = <String>[0];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 26, 1)],
+      [error(diag.listElementTypeNotAssignable, 26, 1)],
     );
     assertType(findNode.listLiteral('['), 'List<String>');
   }
@@ -147,7 +147,7 @@
       '''
 List<String> a = <int>[];
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 17, 7)],
+      [error(diag.invalidAssignment, 17, 7)],
     );
     assertType(findNode.listLiteral('['), 'List<int>');
   }
@@ -206,7 +206,7 @@
       '''
 var a = [x];
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 9, 1)],
+      [error(diag.undefinedIdentifier, 9, 1)],
     );
     assertType(findNode.listLiteral('['), 'List<InvalidType>');
   }
@@ -216,7 +216,7 @@
       '''
 var a = [0, x, 2];
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 12, 1)],
+      [error(diag.undefinedIdentifier, 12, 1)],
     );
     assertType(findNode.listLiteral('['), 'List<InvalidType>');
   }
@@ -366,7 +366,7 @@
   var v = [...?a];
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 69, 4)],
+      [error(diag.invalidNullAwareOperator, 69, 4)],
     );
     assertType(findNode.listLiteral('['), 'List<Never>');
   }
@@ -399,7 +399,7 @@
   var v = [...?a];
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 82, 4)],
+      [error(diag.invalidNullAwareOperator, 82, 4)],
     );
     assertType(findNode.listLiteral('['), 'List<Never>');
   }
@@ -442,7 +442,7 @@
   var v = [...a];
 }
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 77, 1)],
+      [error(diag.notIterableSpread, 77, 1)],
     );
     assertType(findNode.listLiteral('[...'), 'List<dynamic>');
   }
@@ -455,7 +455,7 @@
   var v = [...a, 0];
 }
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 77, 1)],
+      [error(diag.notIterableSpread, 77, 1)],
     );
     assertType(findNode.listLiteral('[...'), 'List<dynamic>');
   }
@@ -465,7 +465,7 @@
       '''
 var a = <String>[1];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 17, 1)],
+      [error(diag.listElementTypeNotAssignable, 17, 1)],
     );
     assertType(findNode.listLiteral('['), 'List<String>');
   }
@@ -475,13 +475,7 @@
       '''
 var a = <String>[(null as String?)];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-          17,
-          17,
-        ),
-      ],
+      [error(diag.listElementTypeNotAssignableNullability, 17, 17)],
     );
     assertType(findNode.listLiteral('['), 'List<String>');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
index bbfe043..030cb0e0 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -23,7 +23,7 @@
       '''
 Map<int, int> a = {'a' : 1};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 19, 3)],
+      [error(diag.mapKeyTypeNotAssignable, 19, 3)],
     );
     assertType(setOrMapLiteral('{'), 'Map<int, int>');
   }
@@ -33,7 +33,7 @@
       '''
 Map<int, int> a = {1 : 'a'};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 23, 3)],
+      [error(diag.mapValueTypeNotAssignable, 23, 3)],
     );
     assertType(setOrMapLiteral('{'), 'Map<int, int>');
   }
@@ -95,7 +95,7 @@
   E a = {};
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 46, 2)],
+      [error(diag.invalidAssignment, 46, 2)],
     );
     assertType(setOrMapLiteral('{}'), 'Map<dynamic, dynamic>');
   }
@@ -107,7 +107,7 @@
   E a = {};
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 51, 2)],
+      [error(diag.invalidAssignment, 51, 2)],
     );
     assertType(setOrMapLiteral('{}'), 'Map<dynamic, dynamic>');
   }
@@ -150,7 +150,7 @@
       '''
 Map<String, String> a = <String, String>{0 : 'a'};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 41, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 41, 1)],
     );
     assertType(setOrMapLiteral('{'), 'Map<String, String>');
   }
@@ -160,7 +160,7 @@
       '''
 Map<String, String> a = <String, String>{'a' : 1};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 47, 1)],
+      [error(diag.mapValueTypeNotAssignable, 47, 1)],
     );
     assertType(setOrMapLiteral('{'), 'Map<String, String>');
   }
@@ -177,7 +177,7 @@
       '''
 Map<String, String> a = <int, int>{};
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 24, 12)],
+      [error(diag.invalidAssignment, 24, 12)],
     );
     assertType(setOrMapLiteral('{'), 'Map<int, int>');
   }
@@ -369,7 +369,7 @@
   var v = {...a, if (b) throw 0: throw 0};
 }
 ''',
-      [error(WarningCode.deadCode, 87, 21)],
+      [error(diag.deadCode, 87, 21)],
     );
     assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
   }
@@ -383,8 +383,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 77, 4),
-        error(WarningCode.deadCode, 88, 21),
+        error(diag.invalidNullAwareOperator, 77, 4),
+        error(diag.deadCode, 88, 21),
       ],
     );
     assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
@@ -398,7 +398,7 @@
   var v = {...?a, if (b) throw 0: throw 0};
 }
 ''',
-      [error(WarningCode.deadCode, 99, 7)],
+      [error(diag.deadCode, 99, 7)],
     );
     assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
   }
@@ -431,7 +431,7 @@
   var v = {...?a};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 61, 7)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 61, 7)],
     );
     assertType(setOrMapLiteral('{...'), 'dynamic');
   }
@@ -445,8 +445,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 90, 4),
-        error(WarningCode.deadCode, 101, 21),
+        error(diag.invalidNullAwareOperator, 90, 4),
+        error(diag.deadCode, 101, 21),
       ],
     );
     assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
@@ -460,7 +460,7 @@
   var v = {...?a, if (b) throw 0: throw 0};
 }
 ''',
-      [error(WarningCode.deadCode, 112, 7)],
+      [error(diag.deadCode, 112, 7)],
     );
     assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
   }
@@ -483,7 +483,7 @@
   var v = {...a, if (b) throw 0: throw 0};
 }
 ''',
-      [error(WarningCode.deadCode, 100, 21)],
+      [error(diag.deadCode, 100, 21)],
     );
     assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
   }
@@ -497,7 +497,7 @@
   var v = {...a};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 73, 6)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 73, 6)],
     );
     assertType(setOrMapLiteral('{...'), 'dynamic');
   }
@@ -511,7 +511,7 @@
   var v = {...a, 0: 1};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 73, 12)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 73, 12)],
     );
     assertType(setOrMapLiteral('{...'), 'dynamic');
   }
@@ -521,7 +521,7 @@
       '''
 var a = <String, int>{1 : 2};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 22, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 22, 1)],
     );
     assertType(setOrMapLiteral('{'), 'Map<String, int>');
   }
@@ -531,7 +531,7 @@
       '''
 var a = <String, int>{'a' : 'b'};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 28, 3)],
+      [error(diag.mapValueTypeNotAssignable, 28, 3)],
     );
     assertType(setOrMapLiteral('{'), 'Map<String, int>');
   }
@@ -548,7 +548,7 @@
       '''
 var a = <int, String>{1};
 ''',
-      [error(CompileTimeErrorCode.expressionInMap, 22, 1)],
+      [error(diag.expressionInMap, 22, 1)],
     );
     assertType(setOrMapLiteral('{'), 'Map<int, String>');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
index 4fb598d..80bd7f0 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -25,7 +25,7 @@
       '''
 Set<int> a = {'a'};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 14, 3)],
+      [error(diag.setElementTypeNotAssignable, 14, 3)],
     );
     assertType(setLiteral('{'), 'Set<int>');
   }
@@ -80,7 +80,7 @@
   E a = {};
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 38, 2)],
+      [error(diag.invalidAssignment, 38, 2)],
     );
     assertType(setLiteral('{}'), 'Set<dynamic>');
   }
@@ -92,7 +92,7 @@
   E a = {};
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 42, 2)],
+      [error(diag.invalidAssignment, 42, 2)],
     );
     assertType(setLiteral('{}'), 'Set<dynamic>');
   }
@@ -124,7 +124,7 @@
       '''
 Set<String> a = <String>{0};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 25, 1)],
+      [error(diag.setElementTypeNotAssignable, 25, 1)],
     );
     assertType(setLiteral('{'), 'Set<String>');
   }
@@ -149,7 +149,7 @@
       '''
 Set<String> a = <int>{};
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 16, 7)],
+      [error(diag.invalidAssignment, 16, 7)],
     );
     assertType(setLiteral('{'), 'Set<int>');
   }
@@ -310,7 +310,7 @@
   var v = {...a, if (b) throw 0};
 }
 ''',
-      [error(WarningCode.deadCode, 87, 12)],
+      [error(diag.deadCode, 87, 12)],
     );
     assertType(setLiteral('{...'), 'Set<Never>');
   }
@@ -324,8 +324,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 77, 4),
-        error(WarningCode.deadCode, 88, 12),
+        error(diag.invalidNullAwareOperator, 77, 4),
+        error(diag.deadCode, 88, 12),
       ],
     );
     assertType(setLiteral('{...'), 'Set<Never>');
@@ -360,8 +360,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 90, 4),
-        error(WarningCode.deadCode, 101, 12),
+        error(diag.invalidNullAwareOperator, 90, 4),
+        error(diag.deadCode, 101, 12),
       ],
     );
     assertType(setLiteral('{...'), 'Set<Never>');
@@ -395,7 +395,7 @@
   var v = {...a, if (b) throw 0};
 }
 ''',
-      [error(WarningCode.deadCode, 100, 12)],
+      [error(diag.deadCode, 100, 12)],
     );
     assertType(setLiteral('{...'), 'Set<Never>');
   }
@@ -408,7 +408,7 @@
   var v = {...a};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 73, 6)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 73, 6)],
     );
     assertType(setLiteral('{...'), 'dynamic');
   }
@@ -421,7 +421,7 @@
   var v = {...a, 0};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 73, 9)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 73, 9)],
     );
     assertType(setLiteral('{...'), 'dynamic');
   }
@@ -431,7 +431,7 @@
       '''
 var a = <String>{1};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 17, 1)],
+      [error(diag.setElementTypeNotAssignable, 17, 1)],
     );
     assertType(setLiteral('{'), 'Set<String>');
   }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
index f213b46..7722290 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/statements_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -83,7 +83,7 @@
 }
 T a<T>() => throw '';
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -111,7 +111,7 @@
 }
 T a<T>() => throw '';
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -175,7 +175,7 @@
 }
 T a<T>() => throw '';
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1)],
+      [error(diag.unusedLocalVariable, 22, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -203,7 +203,7 @@
 }
 T a<T>() => throw '';
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1)],
+      [error(diag.unusedLocalVariable, 22, 1)],
     );
 
     var node = findNode.singleMethodInvocation;
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
index c525eb0..7c85484 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   context = f; // 1
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 52, 7)],
+      [error(diag.unusedLocalVariable, 52, 7)],
     );
 
     var node = findNode.simple('f; // 1');
@@ -48,7 +48,7 @@
   context = f; // 1
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 7)],
+      [error(diag.unusedLocalVariable, 54, 7)],
     );
 
     var node = findNode.simple('f; // 1');
diff --git a/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
index 824479c..838335b 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_literal_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -81,7 +80,7 @@
 class C<T, U> {}
 var t = C<int>;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 26, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 26, 5)],
     );
 
     var node = findNode.typeLiteral('C<int>;');
@@ -109,7 +108,7 @@
 class C<T> {}
 var t = C<int, int>;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 23, 10)],
+      [error(diag.wrongNumberOfTypeArguments, 23, 10)],
     );
 
     var node = findNode.typeLiteral('C<int, int>;');
@@ -143,7 +142,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           36,
           6,
           contextMessages: [message(testFile, 34, 9)],
@@ -252,7 +251,7 @@
           parameters: FormalParameterList
             leftParenthesis: (
             rightParenthesis: )
-          declaredElement: GenericFunctionTypeElement
+          declaredFragment: GenericFunctionTypeElement
             parameters
             returnType: void
             type: void Function()
@@ -312,7 +311,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           59,
           6,
           contextMessages: [message(testFile, 56, 10)],
@@ -476,7 +475,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethodOnFunctionType, 58, 3)],
+      [error(diag.undefinedMethodOnFunctionType, 58, 3)],
     );
 
     var node = findNode.typeLiteral('Fn<int>');
@@ -517,7 +516,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethodOnFunctionType, 48, 3)],
+      [error(diag.undefinedMethodOnFunctionType, 48, 3)],
     );
 
     var node = findNode.typeLiteral('Fn<int>');
@@ -594,7 +593,7 @@
   int get foo => 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetterOnFunctionType, 58, 3)],
+      [error(diag.undefinedGetterOnFunctionType, 58, 3)],
     );
 
     var node = findNode.typeLiteral('Fn<int>');
@@ -667,7 +666,7 @@
   set foo(int value) {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetterOnFunctionType, 58, 3)],
+      [error(diag.undefinedSetterOnFunctionType, 58, 3)],
     );
 
     var node = findNode.typeLiteral('Fn<int>');
@@ -733,7 +732,7 @@
 typedef Fn<T, U> = void Function(T, U);
 var t = Fn<int>;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 50, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 50, 5)],
     );
 
     var node = findNode.typeLiteral('Fn<int>;');
@@ -765,7 +764,7 @@
 typedef Fn<T> = void Function(T);
 var t = Fn<int, String>;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 44, 13)],
+      [error(diag.wrongNumberOfTypeArguments, 44, 13)],
     );
 
     var node = findNode.typeLiteral('Fn<int, String>;');
@@ -802,7 +801,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           57,
           6,
           contextMessages: [message(testFile, 54, 10)],
@@ -908,7 +907,7 @@
           parameters: FormalParameterList
             leftParenthesis: (
             rightParenthesis: )
-          declaredElement: GenericFunctionTypeElement
+          declaredFragment: GenericFunctionTypeElement
             parameters
             returnType: void
             type: void Function()
@@ -934,7 +933,7 @@
 class C<T> {}
 var t = C<int>;
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 23, 5)],
+      [error(diag.experimentNotEnabled, 23, 5)],
     );
   }
 
@@ -947,7 +946,7 @@
 import 'a.dart' as a;
 var t = a.C<int>;
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 33, 5)],
+      [error(diag.experimentNotEnabled, 33, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/variable_declaration_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/variable_declaration_statement_test.dart
index d4f3f7b..619347b 100644
--- a/pkg/analyzer/test/src/dart/resolution/variable_declaration_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/variable_declaration_statement_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -27,8 +26,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(ParserErrorCode.missingAssignableSelector, 37, 5),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.missingAssignableSelector, 37, 5),
       ],
     );
 
@@ -60,7 +59,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 33, 1)],
+      [error(diag.unusedLocalVariable, 33, 1)],
     );
 
     var node = findNode.singleVariableDeclarationStatement;
diff --git a/pkg/analyzer/test/src/dart/resolution/variance_test.dart b/pkg/analyzer/test/src/dart/resolution/variance_test.dart
index d462fd5..ce9da0f 100644
--- a/pkg/analyzer/test/src/dart/resolution/variance_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/variance_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -59,7 +59,7 @@
   B<int> b = B(<num>[])..x=2.2;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 76, 1)],
+      [error(diag.unusedLocalVariable, 76, 1)],
     );
 
     var node = findNode.instanceCreation('B(<num>');
@@ -92,9 +92,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.couldNotInfer, 147, 11),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 159, 19),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 180, 16),
+        error(diag.couldNotInfer, 147, 11),
+        error(diag.argumentTypeNotAssignable, 159, 19),
+        error(diag.argumentTypeNotAssignable, 180, 16),
       ],
     );
 
diff --git a/pkg/analyzer/test/src/dart/resolution/while_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/while_statement_test.dart
index 1a22158..796b379 100644
--- a/pkg/analyzer/test/src/dart/resolution/while_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/while_statement_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'context_collection_resolution.dart';
@@ -93,7 +92,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.labelUndefined, 38, 1)],
+      [error(diag.labelUndefined, 38, 1)],
     );
 
     var node = findNode.singleWhileStatement;
@@ -129,8 +128,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingAssignableSelector, 34, 5),
-        error(CompileTimeErrorCode.nonBoolCondition, 34, 5),
+        error(diag.missingAssignableSelector, 34, 5),
+        error(diag.nonBoolCondition, 34, 5),
       ],
     );
 
@@ -226,7 +225,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.labelUndefined, 41, 1)],
+      [error(diag.labelUndefined, 41, 1)],
     );
 
     var node = findNode.singleWhileStatement;
diff --git a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
index bb77a503..baa608f 100644
--- a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
+++ b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart
@@ -315,21 +315,15 @@
     expect(libraryMap.size(), 2);
     var first = libraryMap.getLibrary("dart:first")!;
     expect(first, isNotNull);
-    expect(first.category, "Client");
     expect(first.path, "first/first.dart");
     expect(first.shortName, "dart:first");
-    expect(first.isDart2JsLibrary, false);
     expect(first.isDocumented, true);
     expect(first.isImplementation, false);
-    expect(first.isVmLibrary, true);
     var second = libraryMap.getLibrary("dart:second")!;
     expect(second, isNotNull);
-    expect(second.category, "Server");
     expect(second.path, "second/second.dart");
     expect(second.shortName, "dart:second");
-    expect(second.isDart2JsLibrary, false);
     expect(second.isDocumented, false);
     expect(second.isImplementation, true);
-    expect(second.isVmLibrary, false);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/abi_specific_integer_mapping_test.dart b/pkg/analyzer/test/src/diagnostics/abi_specific_integer_mapping_test.dart
index 4f32c4a..e4153db 100644
--- a/pkg/analyzer/test/src/diagnostics/abi_specific_integer_mapping_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/abi_specific_integer_mapping_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   const UintPtr();
 }
 ''',
-      [error(FfiCode.abiSpecificIntegerMappingExtra, 51, 25)],
+      [error(diag.abiSpecificIntegerMappingExtra, 51, 25)],
     );
   }
 
@@ -44,13 +44,13 @@
 ''',
       [
         error(
-          FfiCode.abiSpecificIntegerMappingUnsupported,
+          diag.abiSpecificIntegerMappingUnsupported,
           96,
           8,
           messageContains: ["Invalid mapping to 'IntPtr'"],
         ),
         error(
-          FfiCode.abiSpecificIntegerMappingUnsupported,
+          diag.abiSpecificIntegerMappingUnsupported,
           125,
           9,
           messageContains: ["Invalid mapping to 'UintPtr'"],
@@ -75,13 +75,13 @@
 ''',
       [
         error(
-          FfiCode.abiSpecificIntegerMappingUnsupported,
+          diag.abiSpecificIntegerMappingUnsupported,
           149,
           1,
           messageContains: ["Invalid mapping to 'IntPtr'"],
         ),
         error(
-          FfiCode.abiSpecificIntegerMappingUnsupported,
+          diag.abiSpecificIntegerMappingUnsupported,
           149,
           1,
           messageContains: ["Invalid mapping to 'UintPtr'"],
@@ -98,7 +98,7 @@
   const UintPtr();
 }
 ''',
-      [error(FfiCode.abiSpecificIntegerMappingMissing, 31, 7)],
+      [error(diag.abiSpecificIntegerMappingMissing, 31, 7)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/abstract_field_constructor_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/abstract_field_constructor_initializer_test.dart
index b5e81eb..3652752 100644
--- a/pkg/analyzer/test/src/diagnostics/abstract_field_constructor_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/abstract_field_constructor_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A() : x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.abstractFieldConstructorInitializer, 45, 1)],
+      [error(diag.abstractFieldConstructorInitializer, 45, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
   A() : x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.abstractFieldConstructorInitializer, 51, 1)],
+      [error(diag.abstractFieldConstructorInitializer, 51, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
   A(this.x);
 }
 ''',
-      [error(CompileTimeErrorCode.abstractFieldConstructorInitializer, 52, 1)],
+      [error(diag.abstractFieldConstructorInitializer, 52, 1)],
     );
   }
 
@@ -68,7 +68,7 @@
   A(this.x);
 }
 ''',
-      [error(CompileTimeErrorCode.abstractFieldConstructorInitializer, 46, 1)],
+      [error(diag.abstractFieldConstructorInitializer, 46, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/abstract_field_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/abstract_field_initializer_test.dart
index 84f1674..8971a01 100644
--- a/pkg/analyzer/test/src/diagnostics/abstract_field_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/abstract_field_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   abstract final int x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.abstractFieldInitializer, 40, 1)],
+      [error(diag.abstractFieldInitializer, 40, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
   abstract int x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.abstractFieldInitializer, 34, 1)],
+      [error(diag.abstractFieldInitializer, 34, 1)],
     );
   }
 
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 e89bf8b..669d924 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 82, 3)],
+      [error(diag.abstractSuperMemberReference, 82, 3)],
     );
 
     var node = findNode.methodInvocation('super.foo(0)');
@@ -104,7 +104,7 @@
   noSuchMethod(im) => 87;
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 107, 3)],
+      [error(diag.abstractSuperMemberReference, 107, 3)],
     );
 
     var node = findNode.methodInvocation('super.foo()');
@@ -141,7 +141,7 @@
   void foo(int _) {} // does not matter
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 95, 3)],
+      [error(diag.abstractSuperMemberReference, 95, 3)],
     );
 
     var node = findNode.methodInvocation('super.foo(0)');
@@ -285,7 +285,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 86, 3)],
+      [error(diag.abstractSuperMemberReference, 86, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -316,7 +316,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 81, 3)],
+      [error(diag.abstractSuperMemberReference, 81, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -347,7 +347,7 @@
   noSuchMethod(im) => 2;
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 108, 3)],
+      [error(diag.abstractSuperMemberReference, 108, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -407,7 +407,7 @@
   int get foo => super.foo; // ref
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 111, 3)],
+      [error(diag.abstractSuperMemberReference, 111, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -468,7 +468,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 90, 3)],
+      [error(diag.abstractSuperMemberReference, 90, 3)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -499,7 +499,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 94, 3)],
+      [error(diag.abstractSuperMemberReference, 94, 3)],
     );
 
     assertResolvedNodeText(findNode.assignment('foo ='), r'''
@@ -541,7 +541,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 81, 3)],
+      [error(diag.abstractSuperMemberReference, 81, 3)],
     );
 
     assertResolvedNodeText(findNode.assignment('foo ='), r'''
@@ -583,7 +583,7 @@
   noSuchMethod(im) {}
 }
 ''',
-      [error(CompileTimeErrorCode.abstractSuperMemberReference, 111, 3)],
+      [error(diag.abstractSuperMemberReference, 111, 3)],
     );
 
     assertResolvedNodeText(findNode.assignment('foo ='), r'''
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart
index 1e13cb8..7acbd37 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_export_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_export_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 export 'lib1.dart';
 export 'lib2.dart';
 ''',
-      [error(CompileTimeErrorCode.ambiguousExport, 27, 11)],
+      [error(diag.ambiguousExport, 27, 11)],
     );
   }
 
@@ -43,7 +43,7 @@
 export 'lib1.dart';
 export 'lib2.dart';
 ''',
-      [error(CompileTimeErrorCode.ambiguousExport, 27, 11)],
+      [error(diag.ambiguousExport, 27, 11)],
     );
   }
 
@@ -79,9 +79,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.ambiguousExport, 25, 11),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.ambiguousExport, 25, 11)]);
   }
 
   test_part_part() async {
@@ -112,8 +110,6 @@
 
     await assertErrorsInFile2(b, []);
 
-    await assertErrorsInFile2(c, [
-      error(CompileTimeErrorCode.ambiguousExport, 25, 11),
-    ]);
+    await assertErrorsInFile2(c, [error(diag.ambiguousExport, 25, 11)]);
   }
 }
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 fc694e3..604273d 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
 
 int f(A a) => a();
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 110, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 110, 1)],
     );
   }
 
@@ -49,7 +49,7 @@
   0.a;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 98, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 98, 1)],
     );
 
     var node = findNode.propertyAccess('0.a');
@@ -112,7 +112,7 @@
   0.a;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 91, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 91, 1)],
     );
 
     var node = findNode.propertyAccess('0.a');
@@ -145,7 +145,7 @@
   0.a;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 96, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 96, 1)],
     );
 
     var node = findNode.propertyAccess('0.a');
@@ -175,7 +175,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          diag.ambiguousExtensionMemberAccessTwo,
           129,
           3,
           messageContains: [
@@ -204,7 +204,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          diag.ambiguousExtensionMemberAccessTwo,
           87,
           3,
           messageContains: [
@@ -229,7 +229,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          diag.ambiguousExtensionMemberAccessTwo,
           66,
           3,
           messageContains: [
@@ -240,8 +240,8 @@
           ],
           contextMessages: [message(testFile, -1, 0), message(testFile, -1, 0)],
         ),
-        error(CompileTimeErrorCode.nonTypeAsTypeArgument, 97, 6),
-        error(CompileTimeErrorCode.nonTypeAsTypeArgument, 145, 6),
+        error(diag.nonTypeAsTypeArgument, 97, 6),
+        error(diag.nonTypeAsTypeArgument, 145, 6),
       ],
     );
   }
@@ -269,7 +269,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          diag.ambiguousExtensionMemberAccessTwo,
           129,
           3,
           messageContains: [
@@ -306,7 +306,7 @@
   0.a();
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 88, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 88, 1)],
     );
 
     var node = findNode.methodInvocation('0.a()');
@@ -340,7 +340,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          diag.ambiguousExtensionMemberAccessTwo,
           129,
           3,
           messageContains: [
@@ -364,7 +364,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessThreeOrMore,
+          diag.ambiguousExtensionMemberAccessThreeOrMore,
           167,
           3,
           messageContains: [
@@ -408,7 +408,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessThreeOrMore,
+          diag.ambiguousExtensionMemberAccessThreeOrMore,
           108,
           3,
           contextMessages: [message(one, 10, 1), message(two, 10, 1)],
@@ -439,7 +439,7 @@
   t.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 396, 3)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 396, 3)],
     );
   }
 
@@ -458,7 +458,7 @@
 
 A f(A a) => a + a;
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 122, 5)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 122, 5)],
     );
   }
 
@@ -479,7 +479,7 @@
   a += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 130, 2)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 130, 2)],
     );
   }
 
@@ -498,7 +498,7 @@
 
 int f(A a) => a[0];
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 134, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 134, 1)],
     );
   }
 
@@ -517,7 +517,7 @@
   0[1] += 2;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 136, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 136, 1)],
     );
   }
 
@@ -536,7 +536,7 @@
 
 int f(A a) => -a;
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 123, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 123, 1)],
     );
   }
 
@@ -555,7 +555,7 @@
   0.a = 3;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo, 88, 1)],
+      [error(diag.ambiguousExtensionMemberAccessTwo, 88, 1)],
     );
 
     assertResolvedNodeText(findNode.assignment('= 3'), r'''
@@ -607,7 +607,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.ambiguousExtensionMemberAccessTwo,
+          diag.ambiguousExtensionMemberAccessTwo,
           167,
           1,
           messageContains: [
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
index ffcaa9b..c7f1d79 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:matcher/src/core_matchers.dart';
 import 'package:test/test.dart' show expect;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -37,8 +37,8 @@
 class A {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidAnnotation, 35, 4),
-        error(CompileTimeErrorCode.ambiguousImport, 36, 3),
+        error(diag.invalidAnnotation, 35, 4),
+        error(diag.ambiguousImport, 36, 3),
       ],
     );
   }
@@ -55,7 +55,7 @@
 import 'lib1.dart';
 import 'lib2.dart';
 f(p) {p as N;}''',
-      [error(CompileTimeErrorCode.ambiguousImport, 51, 1)],
+      [error(diag.ambiguousImport, 51, 1)],
     );
   }
 
@@ -71,10 +71,7 @@
 import 'lib1.dart';
 import 'lib2.dart';
 class A extends N {}''',
-      [
-        error(CompileTimeErrorCode.ambiguousImport, 56, 1),
-        error(CompileTimeErrorCode.extendsNonClass, 56, 1),
-      ],
+      [error(diag.ambiguousImport, 56, 1), error(diag.extendsNonClass, 56, 1)],
     );
   }
 
@@ -91,8 +88,8 @@
 import 'lib2.dart';
 class A implements N {}''',
       [
-        error(CompileTimeErrorCode.implementsNonClass, 59, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 59, 1),
+        error(diag.implementsNonClass, 59, 1),
+        error(diag.ambiguousImport, 59, 1),
       ],
     );
   }
@@ -119,8 +116,8 @@
     GatheringDiagnosticListener()
       ..addAll(partResult.diagnostics)
       ..assertErrors([
-        error(CompileTimeErrorCode.extendsNonClass, 36, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 36, 1),
+        error(diag.extendsNonClass, 36, 1),
+        error(diag.ambiguousImport, 36, 1),
       ]);
   }
 
@@ -137,7 +134,7 @@
 import 'lib1.dart';
 import 'lib2.dart';
 f() {new N();}''',
-      [error(CompileTimeErrorCode.ambiguousImport, 60, 1)],
+      [error(diag.ambiguousImport, 60, 1)],
     );
   }
 
@@ -158,8 +155,8 @@
   print(n);
 }''',
       [
-        error(CompileTimeErrorCode.ambiguousImport, 59, 1),
-        error(CompileTimeErrorCode.dotShorthandUndefinedInvocation, 66, 3),
+        error(diag.ambiguousImport, 59, 1),
+        error(diag.dotShorthandUndefinedInvocation, 66, 3),
       ],
     );
   }
@@ -176,7 +173,7 @@
 import 'lib1.dart';
 import 'lib2.dart';
 f(p) {p is N;}''',
-      [error(CompileTimeErrorCode.ambiguousImport, 51, 1)],
+      [error(diag.ambiguousImport, 51, 1)],
     );
   }
 
@@ -192,7 +189,7 @@
 import 'lib1.dart';
 import 'lib2.dart';
 g() { N.FOO; }''',
-      [error(CompileTimeErrorCode.ambiguousImport, 46, 1)],
+      [error(diag.ambiguousImport, 46, 1)],
     );
   }
 
@@ -217,7 +214,7 @@
 import 'dart:io';
 g(File f) {}
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 40, 4)],
+      [error(diag.ambiguousImport, 40, 4)],
     );
   }
 
@@ -242,14 +239,14 @@
 }
 class B<T extends N> {}''',
       [
-        error(CompileTimeErrorCode.ambiguousImport, 48, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 53, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 59, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 63, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 72, 1),
-        error(WarningCode.unusedLocalVariable, 74, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 106, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 149, 1),
+        error(diag.ambiguousImport, 48, 1),
+        error(diag.ambiguousImport, 53, 1),
+        error(diag.ambiguousImport, 59, 1),
+        error(diag.ambiguousImport, 63, 1),
+        error(diag.ambiguousImport, 72, 1),
+        error(diag.unusedLocalVariable, 74, 1),
+        error(diag.ambiguousImport, 106, 1),
+        error(diag.ambiguousImport, 149, 1),
       ],
     );
   }
@@ -267,7 +264,7 @@
 import 'lib2.dart';
 class A<T> {}
 A<N>? f() { return null; }''',
-      [error(CompileTimeErrorCode.ambiguousImport, 56, 1)],
+      [error(diag.ambiguousImport, 56, 1)],
     );
   }
 
@@ -284,7 +281,7 @@
 import 'lib2.dart';
 class A<T> {}
 f() {new A<N>();}''',
-      [error(CompileTimeErrorCode.ambiguousImport, 65, 1)],
+      [error(diag.ambiguousImport, 65, 1)],
     );
   }
 
@@ -306,7 +303,7 @@
   x;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 48, 1)],
+      [error(diag.ambiguousImport, 48, 1)],
     );
   }
 
@@ -328,7 +325,7 @@
   p.x;
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousImport, 60, 1)],
+      [error(diag.ambiguousImport, 60, 1)],
     );
   }
 
@@ -354,15 +351,10 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.ambiguousImport,
-          48,
-          1,
-          messageContains: ["'x'"],
-        ),
-        error(CompileTimeErrorCode.ambiguousImport, 57, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 69, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 74, 1),
+        error(diag.ambiguousImport, 48, 1, messageContains: ["'x'"]),
+        error(diag.ambiguousImport, 57, 1),
+        error(diag.ambiguousImport, 69, 1),
+        error(diag.ambiguousImport, 74, 1),
       ],
     );
   }
@@ -389,10 +381,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.ambiguousImport, 60, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 71, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 85, 1),
-        error(CompileTimeErrorCode.ambiguousImport, 92, 1),
+        error(diag.ambiguousImport, 60, 1),
+        error(diag.ambiguousImport, 71, 1),
+        error(diag.ambiguousImport, 85, 1),
+        error(diag.ambiguousImport, 92, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
index 6bfb78f..94da085 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -87,7 +87,7 @@
   return {...set, ...map};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth, 46, 16)],
+      [error(diag.ambiguousSetOrMapLiteralBoth, 46, 16)],
     );
   }
 
@@ -98,7 +98,7 @@
   return {...set, ...map};
 }
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth, 48, 16)],
+      [error(diag.ambiguousSetOrMapLiteralBoth, 48, 16)],
     );
   }
 }
@@ -111,7 +111,7 @@
       '''
 union(a, b) => !{...a, ...b};
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 16, 12)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 16, 12)],
     );
   }
 
@@ -122,7 +122,7 @@
 var set;
 var c = {...set, ...map};
 ''',
-      [error(CompileTimeErrorCode.ambiguousSetOrMapLiteralEither, 26, 16)],
+      [error(diag.ambiguousSetOrMapLiteralEither, 26, 16)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
index ffc021b..f1ce9fe 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_not_found_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.
 
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'analysis_options_test_support.dart';
@@ -20,7 +20,7 @@
       '''
 include: "./analysis_options.yaml"
 ''',
-      [error(AnalysisOptionsWarningCode.recursiveIncludeFile, 9, 25)],
+      [error(diag.recursiveIncludeFile, 9, 25)],
     );
   }
 
@@ -32,7 +32,7 @@
   - ./analysis_options.yaml
   - included1.yaml
 ''',
-      [error(AnalysisOptionsWarningCode.recursiveIncludeFile, 13, 23)],
+      [error(diag.recursiveIncludeFile, 13, 23)],
     );
   }
 
@@ -44,7 +44,7 @@
   - included1.yaml
   - ./analysis_options.yaml
 ''',
-      [error(AnalysisOptionsWarningCode.recursiveIncludeFile, 32, 23)],
+      [error(diag.recursiveIncludeFile, 32, 23)],
     );
   }
 
@@ -53,7 +53,7 @@
       '''
 include: ./analysis_options.yaml
 ''',
-      [error(AnalysisOptionsWarningCode.recursiveIncludeFile, 9, 23)],
+      [error(diag.recursiveIncludeFile, 9, 23)],
     );
   }
 
@@ -62,7 +62,7 @@
       '''
 include: './analysis_options.yaml'
 ''',
-      [error(AnalysisOptionsWarningCode.recursiveIncludeFile, 9, 25)],
+      [error(diag.recursiveIncludeFile, 9, 25)],
     );
   }
 
@@ -74,7 +74,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includeFileNotFound,
+          diag.includeFileNotFound,
           74,
           40,
           text:
@@ -97,7 +97,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includeFileNotFound,
+          diag.includeFileNotFound,
           78,
           38,
           text:
@@ -120,7 +120,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includeFileNotFound,
+          diag.includeFileNotFound,
           97,
           38,
           text:
@@ -140,7 +140,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includeFileNotFound,
+          diag.includeFileNotFound,
           74,
           38,
           text:
@@ -160,7 +160,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includeFileNotFound,
+          diag.includeFileNotFound,
           74,
           40,
           text:
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart
index 2f88cca..510bc06 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/include_file_warning_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.
 
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'analysis_options_test_support.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includedFileWarning,
+          diag.includedFileWarning,
           9,
           6,
           messageContains: [
diff --git a/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart b/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart
index 80ccecb..c6318a1 100644
--- a/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/analysis_options/recursive_include_file_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.
 
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'analysis_options_test_support.dart';
@@ -22,7 +22,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.recursiveIncludeFile,
+          diag.recursiveIncludeFile,
           9,
           21,
           text:
@@ -42,7 +42,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.recursiveIncludeFile,
+          diag.recursiveIncludeFile,
           13,
           21,
           text:
@@ -79,7 +79,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.recursiveIncludeFile,
+          diag.recursiveIncludeFile,
           9,
           6,
           text:
@@ -100,7 +100,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includedFileWarning,
+          diag.includedFileWarning,
           9,
           6,
           messageContains: [
@@ -129,7 +129,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.recursiveIncludeFile,
+          diag.recursiveIncludeFile,
           28,
           6,
           text:
@@ -157,7 +157,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.recursiveIncludeFile,
+          diag.recursiveIncludeFile,
           9,
           6,
           text:
@@ -181,7 +181,7 @@
 ''',
       [
         error(
-          AnalysisOptionsWarningCode.includedFileWarning,
+          diag.includedFileWarning,
           9,
           6,
           messageContains: [
diff --git a/pkg/analyzer/test/src/diagnostics/annotation_on_pointer_field_test.dart b/pkg/analyzer/test/src/diagnostics/annotation_on_pointer_field_test.dart
index 9bceb4d..ccf9d3d 100644
--- a/pkg/analyzer/test/src/diagnostics/annotation_on_pointer_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/annotation_on_pointer_field_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   external Pointer<Int8> x;
 }
 ''',
-      [error(FfiCode.annotationOnPointerField, 52, 9)],
+      [error(diag.annotationOnPointerField, 52, 9)],
     );
   }
 
@@ -37,7 +37,7 @@
   external Pointer<Float> x;
 }
 ''',
-      [error(FfiCode.annotationOnPointerField, 52, 8)],
+      [error(diag.annotationOnPointerField, 52, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/annotation_syntax_test.dart b/pkg/analyzer/test/src/diagnostics/annotation_syntax_test.dart
index e59ab43..6c025ff 100644
--- a/pkg/analyzer/test/src/diagnostics/annotation_syntax_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/annotation_syntax_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,8 +32,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.annotationOnTypeArgument, 146, 11),
-        error(ParserErrorCode.annotationOnTypeArgument, 158, 19),
+        error(diag.annotationOnTypeArgument, 146, 11),
+        error(diag.annotationOnTypeArgument, 158, 19),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart b/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
index 1e16215..665c0eb 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   f(8);
 }
 ''',
-      [error(FfiCode.argumentMustBeAConstant, 231, 6)],
+      [error(diag.argumentMustBeAConstant, 231, 6)],
     );
   }
 
@@ -45,7 +45,7 @@
   f(8);
 }
 ''',
-      [error(FfiCode.argumentMustBeAConstant, 233, 6)],
+      [error(diag.argumentMustBeAConstant, 233, 6)],
     );
   }
 
@@ -61,7 +61,7 @@
   f(8);
 }
 ''',
-      [error(FfiCode.argumentMustBeAConstant, 221, 6)],
+      [error(diag.argumentMustBeAConstant, 221, 6)],
     );
   }
 
@@ -76,7 +76,7 @@
   Pointer.fromFunction<NativeDoubleUnOp>(myTimesThree, notAConst);
 }
 ''',
-      [error(FfiCode.argumentMustBeAConstant, 250, 9)],
+      [error(diag.argumentMustBeAConstant, 250, 9)],
     );
   }
 
@@ -91,7 +91,7 @@
   l.lookupFunction<Int8UnOp, IntUnOp>("timesFour", isLeaf:isLeaf);
 }
 ''',
-      [error(FfiCode.argumentMustBeAConstant, 230, 6)],
+      [error(diag.argumentMustBeAConstant, 230, 6)],
     );
   }
 }
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 6461afc..1a236b7 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -29,7 +29,7 @@
 f() {
   g((_A a) {});
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 42, 9)],
+      [error(diag.argumentTypeNotAssignable, 42, 9)],
     );
     // The name _A is private to the library it's defined in, so this is a type
     // mismatch. Furthermore, the error message should mention both _A and the
@@ -46,7 +46,7 @@
 @A(0)
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 40, 1)],
+      [error(diag.argumentTypeNotAssignable, 40, 1)],
     );
   }
 
@@ -59,7 +59,7 @@
 @A.fromInt('0')
 main() {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 49, 3)],
+      [error(diag.argumentTypeNotAssignable, 49, 3)],
     );
   }
 
@@ -72,7 +72,7 @@
 @A<int>.fromInt('0')
 main() {
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 55, 3)],
+      [error(diag.argumentTypeNotAssignable, 55, 3)],
     );
   }
 
@@ -96,7 +96,7 @@
 @A('0')
 main() {
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 33, 3)],
+      [error(diag.argumentTypeNotAssignable, 33, 3)],
     );
   }
 
@@ -109,7 +109,7 @@
 f(A a) {
   a + '0';
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 50, 3)],
+      [error(diag.argumentTypeNotAssignable, 50, 3)],
     );
   }
 
@@ -128,8 +128,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 88, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 99, 1),
+        error(diag.argumentTypeNotAssignable, 88, 1),
+        error(diag.argumentTypeNotAssignable, 99, 1),
       ],
     );
   }
@@ -144,7 +144,7 @@
 void main() {
   f().call(3);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 110, 1)],
+      [error(diag.argumentTypeNotAssignable, 110, 1)],
     );
   }
 
@@ -163,7 +163,7 @@
   A a = new A();
   a..  ma().mb(0);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 186, 1)],
+      [error(diag.argumentTypeNotAssignable, 186, 1)],
     );
   }
 
@@ -177,8 +177,8 @@
   const A(42);
 }''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 52, 2),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 52, 2),
+        error(diag.argumentTypeNotAssignable, 52, 2),
+        error(diag.constConstructorParamTypeMismatch, 52, 2),
       ],
     );
   }
@@ -192,7 +192,7 @@
 class B extends A {
   const B() : super(42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 73, 2)],
+      [error(diag.argumentTypeNotAssignable, 73, 2)],
     );
   }
 
@@ -205,7 +205,7 @@
 }
 n(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 23, 1)],
+      [error(diag.argumentTypeNotAssignable, 23, 1)],
     );
   }
 
@@ -218,7 +218,7 @@
 }
 n(int x) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 20, 1)],
+      [error(diag.argumentTypeNotAssignable, 20, 1)],
     );
   }
 
@@ -241,8 +241,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 13, 1),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 13, 1),
+        error(diag.argumentTypeNotAssignable, 13, 1),
+        error(diag.constConstructorParamTypeMismatch, 13, 1),
       ],
     );
   }
@@ -288,7 +288,7 @@
 var g = C<int>.new;
 var x = g('Hello');
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 56, 7)],
+      [error(diag.argumentTypeNotAssignable, 56, 7)],
     );
   }
 
@@ -318,7 +318,7 @@
 var g = f<int>;
 var x = g('Hello');
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 45, 7)],
+      [error(diag.argumentTypeNotAssignable, 45, 7)],
     );
   }
 
@@ -350,7 +350,7 @@
 main() {
   (int x) {} ('');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 23, 2)],
+      [error(diag.argumentTypeNotAssignable, 23, 2)],
     );
   }
 
@@ -365,7 +365,7 @@
   n(void f(int i)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 31, 7)],
+      [error(diag.argumentTypeNotAssignable, 31, 7)],
     );
   }
 
@@ -428,7 +428,7 @@
 f(A a) {
   a['0'];
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 60, 3)],
+      [error(diag.argumentTypeNotAssignable, 60, 3)],
     );
   }
 
@@ -445,9 +445,9 @@
   a['0']++;
 }''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 103, 3),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 120, 3),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 130, 3),
+        error(diag.argumentTypeNotAssignable, 103, 3),
+        error(diag.argumentTypeNotAssignable, 120, 3),
+        error(diag.argumentTypeNotAssignable, 130, 3),
       ],
     );
   }
@@ -461,7 +461,7 @@
 f(A a) {
   a['0'] = 0;
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 65, 3)],
+      [error(diag.argumentTypeNotAssignable, 65, 3)],
     );
   }
 
@@ -478,9 +478,9 @@
   a['0']++;
 }''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 103, 3),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 120, 3),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 130, 3),
+        error(diag.argumentTypeNotAssignable, 103, 3),
+        error(diag.argumentTypeNotAssignable, 120, 3),
+        error(diag.argumentTypeNotAssignable, 130, 3),
       ],
     );
   }
@@ -494,7 +494,7 @@
 }
 n(int i) {}
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 24, 1)],
+      [error(diag.argumentTypeNotAssignable, 24, 1)],
     );
   }
 
@@ -507,7 +507,7 @@
 f(A a) {
   a('0');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 42, 3)],
+      [error(diag.argumentTypeNotAssignable, 42, 3)],
     );
   }
 
@@ -521,7 +521,7 @@
   A a = new A();
   a('0');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 59, 3)],
+      [error(diag.argumentTypeNotAssignable, 59, 3)],
     );
   }
 
@@ -531,7 +531,7 @@
 a(b(int p)) {
   b('0');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 18, 3)],
+      [error(diag.argumentTypeNotAssignable, 18, 3)],
     );
   }
 
@@ -543,7 +543,7 @@
     f(v);
   }
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 41, 1)],
+      [error(diag.argumentTypeNotAssignable, 41, 1)],
     );
   }
 
@@ -555,7 +555,7 @@
 main() {
   acceptFunOptBool(funBool);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 107, 7)],
+      [error(diag.argumentTypeNotAssignable, 107, 7)],
     );
   }
 
@@ -569,7 +569,7 @@
 main() {
   acceptFunOptBool(C.funBool);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 125, 9)],
+      [error(diag.argumentTypeNotAssignable, 125, 9)],
     );
   }
 
@@ -582,7 +582,7 @@
 f(A<String> a) {
   a.m(1);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 50, 1)],
+      [error(diag.argumentTypeNotAssignable, 50, 1)],
     );
   }
 
@@ -593,7 +593,7 @@
 main() {
   f(p: 42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 38, 2)],
+      [error(diag.argumentTypeNotAssignable, 38, 2)],
     );
   }
 
@@ -604,7 +604,7 @@
 main() {
   f(42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 35, 2)],
+      [error(diag.argumentTypeNotAssignable, 35, 2)],
     );
   }
 
@@ -615,7 +615,7 @@
 main() {
   f(42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 28, 2)],
+      [error(diag.argumentTypeNotAssignable, 28, 2)],
     );
   }
 
@@ -626,7 +626,7 @@
 f(A<int> a) {
   a('1');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 37, 3)],
+      [error(diag.argumentTypeNotAssignable, 37, 3)],
     );
   }
 
@@ -639,7 +639,7 @@
   A a = getA();
   a('1');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 69, 3)],
+      [error(diag.argumentTypeNotAssignable, 69, 3)],
     );
   }
 
@@ -650,7 +650,7 @@
 f(A a) {
   a('1');
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 31, 3)],
+      [error(diag.argumentTypeNotAssignable, 31, 3)],
     );
   }
 
@@ -673,7 +673,7 @@
   m['x'] = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 47, 3)],
+      [error(diag.argumentTypeNotAssignable, 47, 3)],
     );
   }
 
@@ -686,7 +686,7 @@
   m['x'] ??= 0;
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 47, 3)],
+      [error(diag.argumentTypeNotAssignable, 47, 3)],
     );
   }
 
@@ -699,7 +699,7 @@
 main() {
   new A<String>(42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 52, 2)],
+      [error(diag.argumentTypeNotAssignable, 52, 2)],
     );
   }
 
@@ -712,7 +712,7 @@
 main() {
   new A(42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 53, 2)],
+      [error(diag.argumentTypeNotAssignable, 53, 2)],
     );
   }
 
@@ -725,7 +725,7 @@
 main() {
   new A(42);
 }''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 46, 2)],
+      [error(diag.argumentTypeNotAssignable, 46, 2)],
     );
   }
 
@@ -740,7 +740,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.argumentTypeNotAssignable,
+          diag.argumentTypeNotAssignable,
           44,
           12,
           messageContains: [
@@ -767,7 +767,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.argumentTypeNotAssignable,
+          diag.argumentTypeNotAssignable,
           74,
           11,
           messageContains: ['Unexpected named argument `bb` with type `int`.'],
@@ -792,7 +792,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.argumentTypeNotAssignable,
+          diag.argumentTypeNotAssignable,
           74,
           5,
           messageContains: ['Expected 2 named arguments, but got 1 instead.'],
@@ -817,7 +817,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.argumentTypeNotAssignable,
+          diag.argumentTypeNotAssignable,
           72,
           9,
           messageContains: [
@@ -840,7 +840,7 @@
   print(h('s'));
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 99, 1)],
+      [error(diag.argumentTypeNotAssignable, 99, 1)],
     );
   }
 }
@@ -857,7 +857,7 @@
 dynamic a;
 var e = E(a);
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 49, 1)],
+      [error(diag.argumentTypeNotAssignable, 49, 1)],
     );
   }
 
@@ -869,7 +869,7 @@
   f(a);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 43, 1)],
+      [error(diag.argumentTypeNotAssignable, 43, 1)],
     );
   }
 
@@ -880,7 +880,7 @@
   i + a;
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 35, 1)],
+      [error(diag.argumentTypeNotAssignable, 35, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_to_error_handler_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_to_error_handler_test.dart
index d2b8add..2e3a2415f 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_to_error_handler_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_to_error_handler_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -45,7 +45,7 @@
   future.catchError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 92, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 92, 8)],
     );
   }
 
@@ -80,7 +80,7 @@
   future.catchError(({Object a = 1}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 50, 19)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 50, 19)],
     );
   }
 
@@ -115,7 +115,7 @@
   future.catchError(() {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 50, 5)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 50, 5)],
     );
   }
 
@@ -142,7 +142,7 @@
   future.catchError((Object a, {required StackTrace b}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 50, 38)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 50, 38)],
     );
   }
 
@@ -169,7 +169,7 @@
   future.catchError((a, b, c) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 50, 12)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 50, 12)],
     );
   }
 
@@ -180,7 +180,7 @@
   future.catchError((String a) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 50, 13)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 50, 13)],
     );
   }
 
@@ -191,7 +191,7 @@
   future.catchError((Object a, String b) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 50, 23)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 50, 23)],
     );
   }
 
@@ -202,7 +202,7 @@
   future.catchError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 82, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 82, 8)],
     );
   }
 
@@ -229,7 +229,7 @@
   future.catchError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 106, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 106, 8)],
     );
   }
 
@@ -240,7 +240,7 @@
   future.catchError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 95, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 95, 8)],
     );
   }
 
@@ -251,7 +251,7 @@
   future.catchError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 88, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 88, 8)],
     );
   }
 
@@ -262,7 +262,7 @@
   future.catchError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 96, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 96, 8)],
     );
   }
 }
@@ -285,7 +285,7 @@
   future.then((_) {}, onError: callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 95, 17)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 95, 17)],
     );
   }
 
@@ -296,7 +296,7 @@
   future.then((_) {}, onError: ({Object a = 1}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 52, 28)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 52, 28)],
     );
   }
 
@@ -315,7 +315,7 @@
   future.then((_) {}, onError: () {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 52, 14)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 52, 14)],
     );
   }
 
@@ -326,7 +326,7 @@
   future.then((_) {}, onError: (Object a, {StackTrace? b}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 52, 39)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 52, 39)],
     );
   }
 
@@ -345,7 +345,7 @@
   future.then((_) {}, onError: (String a) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 52, 22)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 52, 22)],
     );
   }
 
@@ -376,7 +376,7 @@
   stream.handleError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 94, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 94, 8)],
     );
   }
 
@@ -387,7 +387,7 @@
   stream.handleError(({Object a = 1}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 51, 19)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 51, 19)],
     );
   }
 
@@ -406,7 +406,7 @@
   stream.handleError(() {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 51, 5)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 51, 5)],
     );
   }
 
@@ -417,7 +417,7 @@
   stream.handleError((Object a, {StackTrace? b}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 51, 30)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 51, 30)],
     );
   }
 
@@ -436,7 +436,7 @@
   stream.handleError((String a) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 51, 13)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 51, 13)],
     );
   }
 }
@@ -459,7 +459,7 @@
   stream.listen((_) {}, onError: callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 97, 17)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 97, 17)],
     );
   }
 
@@ -470,7 +470,7 @@
   stream.listen((_) {}, onError: ({Object a = 1}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 54, 28)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 54, 28)],
     );
   }
 
@@ -489,7 +489,7 @@
   stream.listen((_) {}, onError: () {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 54, 14)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 54, 14)],
     );
   }
 
@@ -500,7 +500,7 @@
   stream.listen((_) {}, onError: (Object a, {StackTrace? b}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 54, 39)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 54, 39)],
     );
   }
 
@@ -519,7 +519,7 @@
   stream.listen((_) {}, onError: (String a) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 54, 22)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 54, 22)],
     );
   }
 }
@@ -547,7 +547,7 @@
   subscription.onError(callback);
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 144, 8)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 144, 8)],
     );
   }
 
@@ -559,7 +559,7 @@
   subscription.onError(({Object a = 1}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 92, 19)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 92, 19)],
     );
   }
 
@@ -580,7 +580,7 @@
   subscription.onError(() {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 92, 5)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 92, 5)],
     );
   }
 
@@ -592,7 +592,7 @@
   subscription.onError((Object a, {StackTrace? b}) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 92, 30)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 92, 30)],
     );
   }
 
@@ -613,7 +613,7 @@
   subscription.onError((String a) {});
 }
 ''',
-      [error(WarningCode.argumentTypeNotAssignableToErrorHandler, 92, 13)],
+      [error(diag.argumentTypeNotAssignableToErrorHandler, 92, 13)],
     );
   }
 }
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 7997a0d..2c3c9a6 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A.name() {}
 }
 ''',
-      [error(CompileTimeErrorCode.assertInRedirectingConstructor, 23, 13)],
+      [error(diag.assertInRedirectingConstructor, 23, 13)],
     );
   }
 
@@ -53,7 +53,7 @@
   A.name() {}
 }
 ''',
-      [error(CompileTimeErrorCode.assertInRedirectingConstructor, 36, 13)],
+      [error(diag.assertInRedirectingConstructor, 36, 13)],
     );
   }
 
@@ -66,7 +66,7 @@
   const E.name();
 }
 ''',
-      [error(CompileTimeErrorCode.assertInRedirectingConstructor, 37, 13)],
+      [error(diag.assertInRedirectingConstructor, 37, 13)],
     );
   }
 
@@ -98,7 +98,7 @@
   const E.name();
 }
 ''',
-      [error(CompileTimeErrorCode.assertInRedirectingConstructor, 50, 13)],
+      [error(diag.assertInRedirectingConstructor, 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 c21e83c..2208a94 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -64,7 +64,7 @@
 
 String f = A().v;
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 91, 5)],
+      [error(diag.assignmentOfDoNotStore, 91, 5)],
     );
   }
 
@@ -79,7 +79,7 @@
 
 String f = A().v();
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 89, 7)],
+      [error(diag.assignmentOfDoNotStore, 89, 7)],
     );
   }
 
@@ -94,7 +94,7 @@
 
 String f = A.v;
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 98, 3)],
+      [error(diag.assignmentOfDoNotStore, 98, 3)],
     );
   }
 
@@ -109,7 +109,7 @@
 
 String f = A.v();
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 96, 5)],
+      [error(diag.assignmentOfDoNotStore, 96, 5)],
     );
   }
 
@@ -128,12 +128,7 @@
 }
 ''',
       [
-        error(
-          WarningCode.assignmentOfDoNotStore,
-          106,
-          5,
-          messageContains: ["'v'"],
-        ),
+        error(diag.assignmentOfDoNotStore, 106, 5, messageContains: ["'v'"]),
       ],
     );
   }
@@ -152,7 +147,7 @@
   String f = A.v;
 }
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 113, 3)],
+      [error(diag.assignmentOfDoNotStore, 113, 3)],
     );
   }
 
@@ -181,7 +176,7 @@
   final f = getV();
 }
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 90, 6)],
+      [error(diag.assignmentOfDoNotStore, 90, 6)],
     );
   }
 
@@ -199,7 +194,7 @@
   final f = A().getV();
 }
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 106, 10)],
+      [error(diag.assignmentOfDoNotStore, 106, 10)],
     );
   }
 
@@ -217,7 +212,7 @@
   late String f = m.v();
 }
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 126, 5)],
+      [error(diag.assignmentOfDoNotStore, 126, 5)],
     );
   }
 
@@ -246,7 +241,7 @@
   final f = v;
 }
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 89, 1)],
+      [error(diag.assignmentOfDoNotStore, 89, 1)],
     );
   }
 
@@ -263,8 +258,8 @@
 }
 ''',
       [
-        error(WarningCode.assignmentOfDoNotStore, 90, 1),
-        error(WarningCode.assignmentOfDoNotStore, 95, 1),
+        error(diag.assignmentOfDoNotStore, 90, 1),
+        error(diag.assignmentOfDoNotStore, 95, 1),
       ],
     );
   }
@@ -280,12 +275,7 @@
 String get v => '';
 ''',
       [
-        error(
-          WarningCode.assignmentOfDoNotStore,
-          47,
-          1,
-          messageContains: ["'v'"],
-        ),
+        error(diag.assignmentOfDoNotStore, 47, 1, messageContains: ["'v'"]),
       ],
     );
   }
@@ -303,12 +293,7 @@
 }
 ''',
       [
-        error(
-          WarningCode.assignmentOfDoNotStore,
-          47,
-          5,
-          messageContains: ["'f'"],
-        ),
+        error(diag.assignmentOfDoNotStore, 47, 5, messageContains: ["'f'"]),
       ],
     );
   }
@@ -325,7 +310,7 @@
 
 String v = c();
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 82, 2)],
+      [error(diag.assignmentOfDoNotStore, 82, 2)],
     );
   }
 
@@ -342,12 +327,7 @@
 }
 ''',
       [
-        error(
-          WarningCode.assignmentOfDoNotStore,
-          47,
-          7,
-          messageContains: ["'v'"],
-        ),
+        error(diag.assignmentOfDoNotStore, 47, 7, messageContains: ["'v'"]),
       ],
     );
   }
@@ -370,7 +350,7 @@
   final f = v;
 }
 ''',
-      [error(WarningCode.assignmentOfDoNotStore, 46, 1)],
+      [error(diag.assignmentOfDoNotStore, 46, 1)],
     );
   }
 
@@ -388,8 +368,8 @@
 }
 ''',
       [
-        error(WarningCode.assignmentOfDoNotStore, 118, 1),
-        error(WarningCode.assignmentOfDoNotStore, 122, 1),
+        error(diag.assignmentOfDoNotStore, 118, 1),
+        error(diag.assignmentOfDoNotStore, 122, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
index 7bd97ce..8530108 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_const_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 f() {
   A.v = 1;
 }''',
-      [error(CompileTimeErrorCode.assignmentToConst, 44, 1)],
+      [error(diag.assignmentToConst, 44, 1)],
     );
   }
 
@@ -37,7 +37,7 @@
 f() {
   A.v += 1;
 }''',
-      [error(CompileTimeErrorCode.assignmentToConst, 44, 1)],
+      [error(diag.assignmentToConst, 44, 1)],
     );
   }
 
@@ -49,8 +49,8 @@
   x = 1;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToConst, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToConst, 23, 1),
       ],
     );
   }
@@ -64,7 +64,7 @@
     print(x);
   }
 }''',
-      [error(CompileTimeErrorCode.assignmentToConst, 28, 1)],
+      [error(diag.assignmentToConst, 28, 1)],
     );
   }
 
@@ -76,8 +76,8 @@
   x += 1;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToConst, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToConst, 23, 1),
       ],
     );
   }
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 8ce9459..c97163e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,8 +23,8 @@
   x = 1;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 23, 1),
       ],
     );
   }
@@ -39,7 +39,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 24, 1)],
+      [error(diag.assignmentToFinalLocal, 24, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
     print(x);
   }
 }''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 28, 1)],
+      [error(diag.assignmentToFinalLocal, 28, 1)],
     );
   }
 
@@ -64,8 +64,8 @@
   x += 1;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 23, 1),
       ],
     );
   }
@@ -76,7 +76,7 @@
 f(final x) {
   x = 1;
 }''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 15, 1)],
+      [error(diag.assignmentToFinalLocal, 15, 1)],
     );
   }
 
@@ -101,7 +101,7 @@
   });
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 65, 1)],
+      [error(diag.assignmentToFinalLocal, 65, 1)],
     );
   }
 
@@ -116,7 +116,7 @@
   B(super.a) : x = (() { a = 0; });
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 78, 1)],
+      [error(diag.assignmentToFinalLocal, 78, 1)],
     );
   }
 
@@ -129,7 +129,7 @@
   a;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 30, 1)],
+      [error(diag.assignmentToFinalLocal, 30, 1)],
     );
   }
 
@@ -141,8 +141,8 @@
   x--;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 23, 1),
       ],
     );
   }
@@ -155,8 +155,8 @@
   x++;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 23, 1),
       ],
     );
   }
@@ -169,8 +169,8 @@
   --x;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 25, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 25, 1),
       ],
     );
   }
@@ -183,8 +183,8 @@
   ++x;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 25, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 25, 1),
       ],
     );
   }
@@ -197,8 +197,8 @@
   x--;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 23, 1),
       ],
     );
   }
@@ -211,8 +211,8 @@
   x++;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 14, 1),
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 23, 1),
+        error(diag.unusedLocalVariable, 14, 1),
+        error(diag.assignmentToFinalLocal, 23, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart
index 290d256..e2ea5f6 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,10 +30,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 49, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 60, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 74, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 81, 1),
+        error(diag.assignmentToFinalNoSetter, 49, 1),
+        error(diag.assignmentToFinalNoSetter, 60, 1),
+        error(diag.assignmentToFinalNoSetter, 74, 1),
+        error(diag.assignmentToFinalNoSetter, 81, 1),
       ],
     );
   }
@@ -53,10 +53,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 51, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 64, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 80, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 89, 1),
+        error(diag.assignmentToFinalNoSetter, 51, 1),
+        error(diag.assignmentToFinalNoSetter, 64, 1),
+        error(diag.assignmentToFinalNoSetter, 80, 1),
+        error(diag.assignmentToFinalNoSetter, 89, 1),
       ],
     );
   }
@@ -76,10 +76,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 57, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 68, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 82, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 89, 1),
+        error(diag.assignmentToFinalNoSetter, 57, 1),
+        error(diag.assignmentToFinalNoSetter, 68, 1),
+        error(diag.assignmentToFinalNoSetter, 82, 1),
+        error(diag.assignmentToFinalNoSetter, 89, 1),
       ],
     );
   }
@@ -99,10 +99,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 46, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 57, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 71, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 78, 1),
+        error(diag.assignmentToFinalNoSetter, 46, 1),
+        error(diag.assignmentToFinalNoSetter, 57, 1),
+        error(diag.assignmentToFinalNoSetter, 71, 1),
+        error(diag.assignmentToFinalNoSetter, 78, 1),
       ],
     );
   }
@@ -122,10 +122,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 53, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 64, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 78, 1),
-        error(CompileTimeErrorCode.assignmentToFinalNoSetter, 85, 1),
+        error(diag.assignmentToFinalNoSetter, 53, 1),
+        error(diag.assignmentToFinalNoSetter, 64, 1),
+        error(diag.assignmentToFinalNoSetter, 78, 1),
+        error(diag.assignmentToFinalNoSetter, 85, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
index 78d226d..5437997 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -60,10 +60,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 64, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 75, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 89, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 96, 1),
+        error(diag.assignmentToFinal, 64, 1),
+        error(diag.assignmentToFinal, 75, 1),
+        error(diag.assignmentToFinal, 89, 1),
+        error(diag.assignmentToFinal, 96, 1),
       ],
     );
   }
@@ -98,10 +98,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 64, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 75, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 89, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 96, 1),
+        error(diag.assignmentToFinal, 64, 1),
+        error(diag.assignmentToFinal, 75, 1),
+        error(diag.assignmentToFinal, 89, 1),
+        error(diag.assignmentToFinal, 96, 1),
       ],
     );
   }
@@ -121,10 +121,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 46, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 57, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 71, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 78, 1),
+        error(diag.assignmentToFinal, 46, 1),
+        error(diag.assignmentToFinal, 57, 1),
+        error(diag.assignmentToFinal, 71, 1),
+        error(diag.assignmentToFinal, 78, 1),
       ],
     );
   }
@@ -159,10 +159,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 64, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 75, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 89, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 96, 1),
+        error(diag.assignmentToFinal, 64, 1),
+        error(diag.assignmentToFinal, 75, 1),
+        error(diag.assignmentToFinal, 89, 1),
+        error(diag.assignmentToFinal, 96, 1),
       ],
     );
   }
@@ -182,10 +182,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 68, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 79, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 93, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 100, 1),
+        error(diag.assignmentToFinal, 68, 1),
+        error(diag.assignmentToFinal, 79, 1),
+        error(diag.assignmentToFinal, 93, 1),
+        error(diag.assignmentToFinal, 100, 1),
       ],
     );
   }
@@ -220,10 +220,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 68, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 79, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 93, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 100, 1),
+        error(diag.assignmentToFinal, 68, 1),
+        error(diag.assignmentToFinal, 79, 1),
+        error(diag.assignmentToFinal, 93, 1),
+        error(diag.assignmentToFinal, 100, 1),
       ],
     );
   }
@@ -258,10 +258,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 66, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 79, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 95, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 104, 1),
+        error(diag.assignmentToFinal, 66, 1),
+        error(diag.assignmentToFinal, 79, 1),
+        error(diag.assignmentToFinal, 95, 1),
+        error(diag.assignmentToFinal, 104, 1),
       ],
     );
   }
@@ -281,7 +281,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinal, 96, 3)],
+      [error(diag.assignmentToFinal, 96, 3)],
     );
   }
 
@@ -315,10 +315,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 61, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 72, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 86, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 93, 1),
+        error(diag.assignmentToFinal, 61, 1),
+        error(diag.assignmentToFinal, 72, 1),
+        error(diag.assignmentToFinal, 86, 1),
+        error(diag.assignmentToFinal, 93, 1),
       ],
     );
   }
@@ -353,10 +353,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 68, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 79, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 93, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 100, 1),
+        error(diag.assignmentToFinal, 68, 1),
+        error(diag.assignmentToFinal, 79, 1),
+        error(diag.assignmentToFinal, 93, 1),
+        error(diag.assignmentToFinal, 100, 1),
       ],
     );
   }
@@ -374,10 +374,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 30, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 39, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 51, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 56, 1),
+        error(diag.assignmentToFinal, 30, 1),
+        error(diag.assignmentToFinal, 39, 1),
+        error(diag.assignmentToFinal, 51, 1),
+        error(diag.assignmentToFinal, 56, 1),
       ],
     );
   }
@@ -421,10 +421,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 32, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 41, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 53, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 58, 1),
+        error(diag.assignmentToFinal, 32, 1),
+        error(diag.assignmentToFinal, 41, 1),
+        error(diag.assignmentToFinal, 53, 1),
+        error(diag.assignmentToFinal, 58, 1),
       ],
     );
   }
@@ -442,10 +442,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 27, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 36, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 48, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 53, 1),
+        error(diag.assignmentToFinal, 27, 1),
+        error(diag.assignmentToFinal, 36, 1),
+        error(diag.assignmentToFinal, 48, 1),
+        error(diag.assignmentToFinal, 53, 1),
       ],
     );
   }
@@ -476,10 +476,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinal, 36, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 45, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 57, 1),
-        error(CompileTimeErrorCode.assignmentToFinal, 62, 1),
+        error(diag.assignmentToFinal, 36, 1),
+        error(diag.assignmentToFinal, 45, 1),
+        error(diag.assignmentToFinal, 57, 1),
+        error(diag.assignmentToFinal, 62, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart
index 84c0d29..b436bf9 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_function_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 main() {
   f = null;
 }''',
-      [error(CompileTimeErrorCode.assignmentToFunction, 18, 1)],
+      [error(diag.assignmentToFunction, 18, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart
index cd37f25..761baf9e 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,10 +34,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToMethod, 94, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 107, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 121, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 134, 3),
+        error(diag.assignmentToMethod, 94, 3),
+        error(diag.assignmentToMethod, 107, 3),
+        error(diag.assignmentToMethod, 121, 3),
+        error(diag.assignmentToMethod, 134, 3),
       ],
     );
   }
@@ -57,10 +57,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToMethod, 47, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 60, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 74, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 87, 3),
+        error(diag.assignmentToMethod, 47, 3),
+        error(diag.assignmentToMethod, 60, 3),
+        error(diag.assignmentToMethod, 74, 3),
+        error(diag.assignmentToMethod, 87, 3),
       ],
     );
   }
@@ -80,10 +80,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToMethod, 49, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 64, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 80, 3),
-        error(CompileTimeErrorCode.assignmentToMethod, 95, 3),
+        error(diag.assignmentToMethod, 49, 3),
+        error(diag.assignmentToMethod, 64, 3),
+        error(diag.assignmentToMethod, 80, 3),
+        error(diag.assignmentToMethod, 95, 3),
       ],
     );
   }
@@ -103,7 +103,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToMethod, 91, 3)],
+      [error(diag.assignmentToMethod, 91, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart
index deb772b..2174103 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   C = null;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 22, 1)],
+      [error(diag.assignmentToType, 22, 1)],
     );
   }
 
@@ -34,7 +34,7 @@
   dynamic = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 13, 7)],
+      [error(diag.assignmentToType, 13, 7)],
     );
   }
 
@@ -46,7 +46,7 @@
   E = null;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 24, 1)],
+      [error(diag.assignmentToType, 24, 1)],
     );
   }
 
@@ -58,7 +58,7 @@
   F = null;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 29, 1)],
+      [error(diag.assignmentToType, 29, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
   F = null;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 37, 1)],
+      [error(diag.assignmentToType, 37, 1)],
     );
   }
 
@@ -84,7 +84,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToType, 25, 1)],
+      [error(diag.assignmentToType, 25, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/async_for_in_wrong_context_test.dart b/pkg/analyzer/test/src/diagnostics/async_for_in_wrong_context_test.dart
index 9f692a9..8c1195d 100644
--- a/pkg/analyzer/test/src/diagnostics/async_for_in_wrong_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/async_for_in_wrong_context_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,8 +24,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.asyncForInWrongContext, 12, 5),
-        error(WarningCode.unusedLocalVariable, 27, 1),
+        error(diag.asyncForInWrongContext, 12, 5),
+        error(diag.unusedLocalVariable, 27, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/async_keyword_used_as_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/async_keyword_used_as_identifier_test.dart
index 188c75a..77146ed 100644
--- a/pkg/analyzer/test/src/diagnostics/async_keyword_used_as_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/async_keyword_used_as_identifier_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +24,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 32, 5)],
+      [error(diag.unusedLocalVariable, 32, 5)],
     );
   }
 
@@ -37,8 +36,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 18, 5),
-        error(WarningCode.unusedLocalVariable, 18, 5),
+        error(diag.asyncKeywordUsedAsIdentifier, 18, 5),
+        error(diag.unusedLocalVariable, 18, 5),
       ],
     );
   }
@@ -51,8 +50,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 19, 5),
-        error(WarningCode.unusedLocalVariable, 19, 5),
+        error(diag.asyncKeywordUsedAsIdentifier, 19, 5),
+        error(diag.unusedLocalVariable, 19, 5),
       ],
     );
   }
@@ -65,8 +64,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 18, 5),
-        error(WarningCode.unusedLocalVariable, 18, 5),
+        error(diag.asyncKeywordUsedAsIdentifier, 18, 5),
+        error(diag.unusedLocalVariable, 18, 5),
       ],
     );
   }
@@ -79,8 +78,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 18, 5),
-        error(WarningCode.unusedLocalVariable, 18, 5),
+        error(diag.asyncKeywordUsedAsIdentifier, 18, 5),
+        error(diag.unusedLocalVariable, 18, 5),
       ],
     );
   }
@@ -93,8 +92,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 19, 5),
-        error(WarningCode.unusedLocalVariable, 19, 5),
+        error(diag.asyncKeywordUsedAsIdentifier, 19, 5),
+        error(diag.unusedLocalVariable, 19, 5),
       ],
     );
   }
@@ -107,8 +106,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.asyncKeywordUsedAsIdentifier, 18, 5),
-        error(WarningCode.unusedLocalVariable, 18, 5),
+        error(diag.asyncKeywordUsedAsIdentifier, 18, 5),
+        error(diag.unusedLocalVariable, 18, 5),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_extends_clause_already_present_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_extends_clause_already_present_test.dart
index b726211..6170239 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_extends_clause_already_present_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_extends_clause_already_present_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.augmentationExtendsClauseAlreadyPresent,
+          diag.augmentationExtendsClauseAlreadyPresent,
           35,
           7,
           contextMessages: [message(a, 37, 1)],
@@ -67,7 +67,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.augmentationExtendsClauseAlreadyPresent,
+          diag.augmentationExtendsClauseAlreadyPresent,
           35,
           7,
           contextMessages: [message(a, 52, 1)],
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_modifier_extra_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_modifier_extra_test.dart
index 16e3ad3..78c4133 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_modifier_extra_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_modifier_extra_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 
 augment abstract class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 8)],
+      [error(diag.augmentationModifierExtra, 27, 8)],
     );
   }
 
@@ -47,8 +47,8 @@
 augment abstract base class A {}
 ''',
       [
-        error(CompileTimeErrorCode.augmentationModifierExtra, 27, 8),
-        error(CompileTimeErrorCode.augmentationModifierExtra, 36, 4),
+        error(diag.augmentationModifierExtra, 27, 8),
+        error(diag.augmentationModifierExtra, 36, 4),
       ],
     );
   }
@@ -66,7 +66,7 @@
 
 augment base class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 4)],
+      [error(diag.augmentationModifierExtra, 27, 4)],
     );
   }
 
@@ -83,7 +83,7 @@
 
 augment final class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 5)],
+      [error(diag.augmentationModifierExtra, 27, 5)],
     );
   }
 
@@ -100,7 +100,7 @@
 
 augment interface class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 9)],
+      [error(diag.augmentationModifierExtra, 27, 9)],
     );
   }
 
@@ -117,7 +117,7 @@
 
 augment mixin class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 5)],
+      [error(diag.augmentationModifierExtra, 27, 5)],
     );
   }
 
@@ -134,7 +134,7 @@
 
 augment sealed class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 6)],
+      [error(diag.augmentationModifierExtra, 27, 6)],
     );
   }
 
@@ -151,7 +151,7 @@
 
 augment base mixin A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierExtra, 27, 4)],
+      [error(diag.augmentationModifierExtra, 27, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_modifier_missing_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_modifier_missing_test.dart
index 0b2d91e..1baacb1 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_modifier_missing_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_modifier_missing_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 
@@ -47,8 +47,8 @@
 augment class A {}
 ''',
       [
-        error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7),
-        error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7),
+        error(diag.augmentationModifierMissing, 19, 7),
+        error(diag.augmentationModifierMissing, 19, 7),
       ],
     );
   }
@@ -66,7 +66,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 
@@ -83,7 +83,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 
@@ -100,7 +100,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 
@@ -117,7 +117,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 
@@ -134,7 +134,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 
@@ -151,7 +151,7 @@
 
 augment mixin A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationModifierMissing, 19, 7)],
+      [error(diag.augmentationModifierMissing, 19, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_of_different_declaration_kind_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_of_different_declaration_kind_test.dart
index 8f006d4..84bb44c 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_of_different_declaration_kind_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_of_different_declaration_kind_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,13 +30,7 @@
 
 augment enum A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -53,13 +47,7 @@
 
 augment extension A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -76,13 +64,7 @@
 
 augment extension type A(int it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -99,13 +81,7 @@
 
 augment void A() {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -122,13 +98,7 @@
 
 augment mixin A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -145,13 +115,7 @@
 
 augment typedef A = int;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -168,13 +132,7 @@
 
 augment int A = 0;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -213,13 +171,7 @@
   augment int foo = 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -240,13 +192,7 @@
   augment int get foo => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -267,13 +213,7 @@
   augment void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -294,13 +234,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -321,13 +255,7 @@
   augment A.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -384,13 +312,7 @@
   augment void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -429,13 +351,7 @@
   augment void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -456,13 +372,7 @@
   augment A.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -483,13 +393,7 @@
   augment int foo = 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -510,13 +414,7 @@
   augment int get foo => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -555,13 +453,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -582,13 +474,7 @@
   augment void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -605,13 +491,7 @@
 
 augment class A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -650,13 +530,7 @@
   augment static void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          39,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 39, 7)],
     );
   }
 
@@ -678,13 +552,7 @@
   augment foo(),
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          38,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 38, 7)],
     );
   }
 
@@ -701,13 +569,7 @@
 
 augment class A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -724,13 +586,7 @@
 
 augment class A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -747,13 +603,7 @@
 
 augment class A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -770,13 +620,7 @@
 
 augment class foo {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -793,13 +637,7 @@
 
 augment class foo {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.augmentationOfDifferentDeclarationKind,
-          19,
-          7,
-        ),
-      ],
+      [error(diag.augmentationOfDifferentDeclarationKind, 19, 7)],
     );
   }
 
@@ -816,7 +654,7 @@
 
 augment class foo {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_bound_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_bound_test.dart
index 937bdc8..6ec7cf9 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_bound_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 
 augment class A<T extends num> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 45, 3)],
+      [error(diag.augmentationTypeParameterBound, 45, 3)],
     );
   }
 
@@ -46,7 +46,7 @@
 
 augment class A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 35, 1)],
+      [error(diag.augmentationTypeParameterBound, 35, 1)],
     );
   }
 
@@ -77,7 +77,7 @@
 
 augment class A<T extends Object> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 45, 6)],
+      [error(diag.augmentationTypeParameterBound, 45, 6)],
     );
   }
 
@@ -94,7 +94,7 @@
 
 augment enum A<T extends num> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 44, 3)],
+      [error(diag.augmentationTypeParameterBound, 44, 3)],
     );
   }
 
@@ -111,7 +111,7 @@
 
 augment extension A<T extends num> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 49, 3)],
+      [error(diag.augmentationTypeParameterBound, 49, 3)],
     );
   }
 
@@ -128,7 +128,7 @@
 
 augment extension type A<T extends num>(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 54, 3)],
+      [error(diag.augmentationTypeParameterBound, 54, 3)],
     );
   }
 
@@ -145,7 +145,7 @@
 
 augment mixin A<T extends num> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterBound, 45, 3)],
+      [error(diag.augmentationTypeParameterBound, 45, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_count_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_count_test.dart
index 26c0a1e..b66b3b2 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_count_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_count_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 class A {}
 augment class A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 26, 1)],
+      [error(diag.augmentationTypeParameterCount, 26, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
 class A<T> {}
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 29, 1)],
+      [error(diag.augmentationTypeParameterCount, 29, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
 class A<T> {}
 augment class A<T, U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 29, 1)],
+      [error(diag.augmentationTypeParameterCount, 29, 1)],
     );
   }
 
@@ -62,7 +62,7 @@
 class A<T, U> {}
 augment class A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 32, 1)],
+      [error(diag.augmentationTypeParameterCount, 32, 1)],
     );
   }
 
@@ -73,7 +73,7 @@
 enum A {v}
 augment enum A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 25, 1)],
+      [error(diag.augmentationTypeParameterCount, 25, 1)],
     );
   }
 
@@ -84,7 +84,7 @@
 enum A<T> {v}
 augment enum A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 28, 1)],
+      [error(diag.augmentationTypeParameterCount, 28, 1)],
     );
   }
 
@@ -102,7 +102,7 @@
 enum A<T> {v}
 augment enum A<T, U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 28, 1)],
+      [error(diag.augmentationTypeParameterCount, 28, 1)],
     );
   }
 
@@ -113,7 +113,7 @@
 enum A<T, U> {v}
 augment enum A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 31, 1)],
+      [error(diag.augmentationTypeParameterCount, 31, 1)],
     );
   }
 
@@ -124,7 +124,7 @@
 extension A on int {}
 augment extension A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 41, 1)],
+      [error(diag.augmentationTypeParameterCount, 41, 1)],
     );
   }
 
@@ -135,7 +135,7 @@
 extension A<T> on int {}
 augment extension A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 44, 1)],
+      [error(diag.augmentationTypeParameterCount, 44, 1)],
     );
   }
 
@@ -153,7 +153,7 @@
 extension A<T> on int {}
 augment extension A<T, U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 44, 1)],
+      [error(diag.augmentationTypeParameterCount, 44, 1)],
     );
   }
 
@@ -164,7 +164,7 @@
 extension A<T, U> on int {}
 augment extension A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 47, 1)],
+      [error(diag.augmentationTypeParameterCount, 47, 1)],
     );
   }
 
@@ -175,7 +175,7 @@
 extension type A(int it) {}
 augment extension type A<T>(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 52, 1)],
+      [error(diag.augmentationTypeParameterCount, 52, 1)],
     );
   }
 
@@ -186,7 +186,7 @@
 extension type A<T>(int it) {}
 augment extension type A(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 55, 1)],
+      [error(diag.augmentationTypeParameterCount, 55, 1)],
     );
   }
 
@@ -204,7 +204,7 @@
 extension type A<T>(int it) {}
 augment extension type A<T, U>(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 55, 1)],
+      [error(diag.augmentationTypeParameterCount, 55, 1)],
     );
   }
 
@@ -215,7 +215,7 @@
 extension type A<T, U>(int it) {}
 augment extension type A<T>(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 58, 1)],
+      [error(diag.augmentationTypeParameterCount, 58, 1)],
     );
   }
 
@@ -226,7 +226,7 @@
 mixin A {}
 augment mixin A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 26, 1)],
+      [error(diag.augmentationTypeParameterCount, 26, 1)],
     );
   }
 
@@ -237,7 +237,7 @@
 mixin A<T> {}
 augment mixin A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 29, 1)],
+      [error(diag.augmentationTypeParameterCount, 29, 1)],
     );
   }
 
@@ -255,7 +255,7 @@
 mixin A<T> {}
 augment mixin A<T, U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 29, 1)],
+      [error(diag.augmentationTypeParameterCount, 29, 1)],
     );
   }
 
@@ -266,7 +266,7 @@
 mixin A<T, U> {}
 augment mixin A<T> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 32, 1)],
+      [error(diag.augmentationTypeParameterCount, 32, 1)],
     );
   }
 
@@ -281,7 +281,7 @@
   augment void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterCount, 43, 1)],
+      [error(diag.augmentationTypeParameterCount, 43, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_name_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_name_test.dart
index 57a4ea8..c9564c4 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_type_parameter_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 
 augment class A<U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterName, 35, 1)],
+      [error(diag.augmentationTypeParameterName, 35, 1)],
     );
   }
 
@@ -46,7 +46,7 @@
 
 augment enum A<U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterName, 34, 1)],
+      [error(diag.augmentationTypeParameterName, 34, 1)],
     );
   }
 
@@ -63,7 +63,7 @@
 
 augment extension A<U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterName, 39, 1)],
+      [error(diag.augmentationTypeParameterName, 39, 1)],
     );
   }
 
@@ -80,7 +80,7 @@
 
 augment extension type A<U>(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterName, 44, 1)],
+      [error(diag.augmentationTypeParameterName, 44, 1)],
     );
   }
 
@@ -97,7 +97,7 @@
 
 augment mixin A<U> {}
 ''',
-      [error(CompileTimeErrorCode.augmentationTypeParameterName, 35, 1)],
+      [error(diag.augmentationTypeParameterName, 35, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/augmentation_without_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/augmentation_without_declaration_test.dart
index 3d30e19..0e7545d 100644
--- a/pkg/analyzer/test/src/diagnostics/augmentation_without_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/augmentation_without_declaration_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 
 augment class A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -46,7 +46,7 @@
   augment A.named();
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -65,7 +65,7 @@
   augment int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -84,7 +84,7 @@
   augment static int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -103,7 +103,7 @@
   augment int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -122,7 +122,7 @@
   augment static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -141,7 +141,7 @@
   augment void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -160,7 +160,7 @@
   augment static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -197,7 +197,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -216,7 +216,7 @@
   augment static set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -231,7 +231,7 @@
 
 augment enum A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -250,7 +250,7 @@
   augment const A.named();
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -269,7 +269,7 @@
   augment final int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -288,7 +288,7 @@
   augment int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -307,7 +307,7 @@
   augment void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -326,7 +326,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -341,7 +341,7 @@
 
 augment extension A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -360,7 +360,7 @@
   augment int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 43, 7)],
+      [error(diag.augmentationWithoutDeclaration, 43, 7)],
     );
   }
 
@@ -379,7 +379,7 @@
   augment void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 43, 7)],
+      [error(diag.augmentationWithoutDeclaration, 43, 7)],
     );
   }
 
@@ -398,7 +398,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 43, 7)],
+      [error(diag.augmentationWithoutDeclaration, 43, 7)],
     );
   }
 
@@ -413,7 +413,7 @@
 
 augment extension type A(int it) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -432,7 +432,7 @@
   augment A.named() : this(0);
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 56, 7)],
+      [error(diag.augmentationWithoutDeclaration, 56, 7)],
     );
   }
 
@@ -451,7 +451,7 @@
   augment int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 56, 7)],
+      [error(diag.augmentationWithoutDeclaration, 56, 7)],
     );
   }
 
@@ -470,7 +470,7 @@
   augment void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 56, 7)],
+      [error(diag.augmentationWithoutDeclaration, 56, 7)],
     );
   }
 
@@ -489,7 +489,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 56, 7)],
+      [error(diag.augmentationWithoutDeclaration, 56, 7)],
     );
   }
 
@@ -504,7 +504,7 @@
 
 augment mixin A {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -523,7 +523,7 @@
   augment int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -542,7 +542,7 @@
   augment int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -561,7 +561,7 @@
   augment void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -598,7 +598,7 @@
   augment set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 39, 7)],
+      [error(diag.augmentationWithoutDeclaration, 39, 7)],
     );
   }
 
@@ -613,7 +613,7 @@
 
 augment void foo() {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -642,7 +642,7 @@
 
 augment int get foo => 0;
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -657,7 +657,7 @@
 
 augment set foo(int _) {}
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -672,7 +672,7 @@
 
 augment int foo = 0;
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 
@@ -687,7 +687,7 @@
 
 augment typedef A = int;
 ''',
-      [error(CompileTimeErrorCode.augmentationWithoutDeclaration, 19, 7)],
+      [error(diag.augmentationWithoutDeclaration, 19, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/await_in_late_local_variable_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/await_in_late_local_variable_initializer_test.dart
index 5cbf784..6fa0221 100644
--- a/pkg/analyzer/test/src/diagnostics/await_in_late_local_variable_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/await_in_late_local_variable_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -15,8 +15,7 @@
 
 @reflectiveTest
 class AwaitInLateLocalVariableInitializerTest extends PubPackageResolutionTest {
-  static const _errorCode =
-      CompileTimeErrorCode.awaitInLateLocalVariableInitializer;
+  static const _errorCode = diag.awaitInLateLocalVariableInitializer;
 
   test_closure_late_await() async {
     await assertErrorsInCode(
diff --git a/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart b/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart
index d5e0c1d..a9d267b 100644
--- a/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/await_in_wrong_context_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return await x;
 }
 ''',
-      [error(CompileTimeErrorCode.awaitInWrongContext, 16, 5)],
+      [error(diag.awaitInWrongContext, 16, 5)],
     );
   }
 
@@ -33,7 +33,7 @@
   yield await x;
 }
 ''',
-      [error(CompileTimeErrorCode.awaitInWrongContext, 21, 5)],
+      [error(diag.awaitInWrongContext, 21, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/await_of_incompatible_type_test.dart b/pkg/analyzer/test/src/diagnostics/await_of_incompatible_type_test.dart
index 0365e9c..dfe0fe3 100644
--- a/pkg/analyzer/test/src/diagnostics/await_of_incompatible_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/await_of_incompatible_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   await a;
 }
 ''',
-      [error(CompileTimeErrorCode.awaitOfIncompatibleType, 51, 5)],
+      [error(diag.awaitOfIncompatibleType, 51, 5)],
     );
   }
 
@@ -57,7 +57,7 @@
   await a;
 }
 ''',
-      [error(CompileTimeErrorCode.awaitOfIncompatibleType, 72, 5)],
+      [error(diag.awaitOfIncompatibleType, 72, 5)],
     );
   }
 
@@ -84,7 +84,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.awaitOfIncompatibleType, 80, 5)],
+      [error(diag.awaitOfIncompatibleType, 80, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/base_class_implemented_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/base_class_implemented_outside_of_library_test.dart
index c28004b..65889ea 100644
--- a/pkg/analyzer/test/src/diagnostics/base_class_implemented_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/base_class_implemented_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -34,7 +34,7 @@
 import 'foo.dart';
 base class Bar implements Foo {}
 ''',
-      [error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 45, 3)],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 45, 3)],
     );
   }
 
@@ -51,7 +51,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
+          diag.baseClassImplementedOutsideOfLibrary,
           69,
           1,
           text:
@@ -86,7 +86,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
+          diag.baseClassImplementedOutsideOfLibrary,
           64,
           1,
           text:
@@ -117,7 +117,7 @@
 base class B extends A {}
 base class C implements B {}
 ''',
-      [error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 67, 1)],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 67, 1)],
     );
   }
 
@@ -132,13 +132,7 @@
 import 'foo.dart';
 base class Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          45,
-          10,
-        ),
-      ],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 45, 10)],
     );
   }
 
@@ -153,13 +147,7 @@
 typedef FooTypedef = Foo;
 base class Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          71,
-          10,
-        ),
-      ],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 71, 10)],
     );
   }
 
@@ -186,7 +174,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
+          diag.baseClassImplementedOutsideOfLibrary,
           96,
           1,
           text:
@@ -223,7 +211,7 @@
 import 'foo.dart';
 enum Bar implements Foo { bar }
 ''',
-      [error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 39, 3)],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 39, 3)],
     );
   }
 
@@ -238,13 +226,7 @@
 import 'foo.dart';
 enum Bar implements FooTypedef { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          39,
-          10,
-        ),
-      ],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 39, 10)],
     );
   }
 
@@ -259,13 +241,7 @@
 typedef FooTypedef = Foo;
 enum Bar implements FooTypedef { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          65,
-          10,
-        ),
-      ],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 65, 10)],
     );
   }
 
@@ -286,7 +262,7 @@
 import 'foo.dart';
 base mixin Bar implements Foo {}
 ''',
-      [error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 45, 3)],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 45, 3)],
     );
   }
 
@@ -301,13 +277,7 @@
 import 'foo.dart';
 base mixin Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          45,
-          10,
-        ),
-      ],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 45, 10)],
     );
   }
 
@@ -322,13 +292,7 @@
 typedef FooTypedef = Foo;
 base mixin Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          71,
-          10,
-        ),
-      ],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 71, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/base_mixin_implemented_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/base_mixin_implemented_outside_of_library_test.dart
index a50a028..580c482 100644
--- a/pkg/analyzer/test/src/diagnostics/base_mixin_implemented_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/base_mixin_implemented_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,7 +33,7 @@
 import 'foo.dart';
 base class Bar implements Foo {}
 ''',
-      [error(CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary, 45, 3)],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 45, 3)],
     );
   }
 
@@ -51,7 +51,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
+          diag.baseMixinImplementedOutsideOfLibrary,
           77,
           1,
           contextMessages: [message(a, 11, 1)],
@@ -71,13 +71,7 @@
 import 'foo.dart';
 base class Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-          45,
-          10,
-        ),
-      ],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 45, 10)],
     );
   }
 
@@ -92,13 +86,7 @@
 typedef FooTypedef = Foo;
 base class Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-          71,
-          10,
-        ),
-      ],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 71, 10)],
     );
   }
 
@@ -119,7 +107,7 @@
 import 'foo.dart';
 enum Bar implements Foo { bar }
 ''',
-      [error(CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary, 39, 3)],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 39, 3)],
     );
   }
 
@@ -134,13 +122,7 @@
 import 'foo.dart';
 enum Bar implements FooTypedef { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-          39,
-          10,
-        ),
-      ],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 39, 10)],
     );
   }
 
@@ -155,13 +137,7 @@
 typedef FooTypedef = Foo;
 enum Bar implements FooTypedef { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-          65,
-          10,
-        ),
-      ],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 65, 10)],
     );
   }
 
@@ -182,7 +158,7 @@
 import 'foo.dart';
 base mixin Bar implements Foo {}
 ''',
-      [error(CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary, 45, 3)],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 45, 3)],
     );
   }
 
@@ -197,13 +173,7 @@
 import 'foo.dart';
 base mixin Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-          45,
-          10,
-        ),
-      ],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 45, 10)],
     );
   }
 
@@ -218,13 +188,7 @@
 typedef FooTypedef = Foo;
 base mixin Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.baseMixinImplementedOutsideOfLibrary,
-          71,
-          10,
-        ),
-      ],
+      [error(diag.baseMixinImplementedOutsideOfLibrary, 71, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/binary_operator_written_out_test.dart b/pkg/analyzer/test/src/diagnostics/binary_operator_written_out_test.dart
index 2e1ae1f..d48b685 100644
--- a/pkg/analyzer/test/src/diagnostics/binary_operator_written_out_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/binary_operator_written_out_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return x and y;
 }
 ''',
-      [error(ParserErrorCode.binaryOperatorWrittenOut, 29, 3)],
+      [error(diag.binaryOperatorWrittenOut, 29, 3)],
     );
   }
 
@@ -41,7 +41,7 @@
   return x or y;
 }
 ''',
-      [error(ParserErrorCode.binaryOperatorWrittenOut, 29, 2)],
+      [error(diag.binaryOperatorWrittenOut, 29, 2)],
     );
   }
 
@@ -60,7 +60,7 @@
   return x shl 2;
 }
 ''',
-      [error(ParserErrorCode.binaryOperatorWrittenOut, 22, 3)],
+      [error(diag.binaryOperatorWrittenOut, 22, 3)],
     );
   }
 
@@ -79,7 +79,7 @@
   return x shr 2;
 }
 ''',
-      [error(ParserErrorCode.binaryOperatorWrittenOut, 22, 3)],
+      [error(diag.binaryOperatorWrittenOut, 22, 3)],
     );
   }
 
@@ -98,7 +98,7 @@
   return x xor y;
 }
 ''',
-      [error(ParserErrorCode.binaryOperatorWrittenOut, 29, 3)],
+      [error(diag.binaryOperatorWrittenOut, 29, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_catch_error_test.dart
index 80ff3aa..fc7f7c3 100644
--- a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_catch_error_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -41,7 +41,7 @@
   future.catchError(test: (_) => false, (e, st) {});
 }
 ''',
-      [error(WarningCode.bodyMightCompleteNormallyCatchError, 77, 1)],
+      [error(diag.bodyMightCompleteNormallyCatchError, 77, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
   future.catchError((e, st) {});
 }
 ''',
-      [error(WarningCode.bodyMightCompleteNormallyCatchError, 57, 1)],
+      [error(diag.bodyMightCompleteNormallyCatchError, 57, 1)],
     );
   }
 
@@ -63,7 +63,7 @@
   future.catchError((e, st) {});
 }
 ''',
-      [error(WarningCode.bodyMightCompleteNormallyCatchError, 58, 1)],
+      [error(diag.bodyMightCompleteNormallyCatchError, 58, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_nullable_test.dart b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_nullable_test.dart
index 79eba62..eb1cf01 100644
--- a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_nullable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_nullable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 import 'dart:async';
 FutureOr<int?> f(Future f) async {}
 ''',
-      [error(WarningCode.bodyMightCompleteNormallyNullable, 36, 1)],
+      [error(diag.bodyMightCompleteNormallyNullable, 36, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
       '''
 int? f() {}
 ''',
-      [error(WarningCode.bodyMightCompleteNormallyNullable, 5, 1)],
+      [error(diag.bodyMightCompleteNormallyNullable, 5, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart
index 52f58ff..15ed41a 100644
--- a/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/body_might_complete_normally_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -65,10 +65,10 @@
 ''',
       [
         if (!_arePatternsEnabled) ...[
-          error(CompileTimeErrorCode.bodyMightCompleteNormally, 28, 5),
-          error(StaticWarningCode.missingEnumConstantInSwitch, 40, 13),
+          error(diag.bodyMightCompleteNormally, 28, 5),
+          error(diag.missingEnumConstantInSwitch, 40, 13),
         ] else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 40, 6),
+          error(diag.nonExhaustiveSwitchStatement, 40, 6),
       ],
     );
   }
@@ -80,7 +80,7 @@
   factory A.named() {}
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 20, 7)],
+      [error(diag.bodyMightCompleteNormally, 20, 7)],
     );
   }
 
@@ -91,7 +91,7 @@
   factory A() {}
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 20, 1)],
+      [error(diag.bodyMightCompleteNormally, 20, 1)],
     );
   }
 
@@ -100,7 +100,7 @@
       r'''
 Future<int> foo() async {}
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 12, 3)],
+      [error(diag.bodyMightCompleteNormally, 12, 3)],
     );
   }
 
@@ -109,7 +109,7 @@
       r'''
 Future<void> foo() {}
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 13, 3)],
+      [error(diag.bodyMightCompleteNormally, 13, 3)],
     );
   }
 
@@ -124,7 +124,7 @@
       r'''
 int foo() {}
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 4, 3)],
+      [error(diag.bodyMightCompleteNormally, 4, 3)],
     );
   }
 
@@ -204,10 +204,10 @@
 ''',
       [
         if (!_arePatternsEnabled) ...[
-          error(CompileTimeErrorCode.bodyMightCompleteNormally, 23, 1),
-          error(StaticWarningCode.missingEnumConstantInSwitch, 38, 12),
+          error(diag.bodyMightCompleteNormally, 23, 1),
+          error(diag.missingEnumConstantInSwitch, 38, 12),
         ] else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 38, 6),
+          error(diag.nonExhaustiveSwitchStatement, 38, 6),
       ],
     );
   }
@@ -230,10 +230,10 @@
 ''',
       [
         if (!_arePatternsEnabled) ...[
-          error(CompileTimeErrorCode.bodyMightCompleteNormally, 47, 1),
-          error(StaticWarningCode.missingEnumConstantInSwitch, 58, 10),
+          error(diag.bodyMightCompleteNormally, 47, 1),
+          error(diag.missingEnumConstantInSwitch, 58, 10),
         ] else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 58, 6),
+          error(diag.nonExhaustiveSwitchStatement, 58, 6),
       ],
     );
   }
@@ -288,10 +288,10 @@
 ''',
       [
         if (!_arePatternsEnabled) ...[
-          error(CompileTimeErrorCode.bodyMightCompleteNormally, 23, 1),
-          error(StaticWarningCode.missingEnumConstantInSwitch, 39, 12),
+          error(diag.bodyMightCompleteNormally, 23, 1),
+          error(diag.missingEnumConstantInSwitch, 39, 12),
         ] else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 39, 6),
+          error(diag.nonExhaustiveSwitchStatement, 39, 6),
       ],
     );
   }
@@ -312,7 +312,7 @@
   foo;
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 51, 1)],
+      [error(diag.bodyMightCompleteNormally, 51, 1)],
     );
   }
 
@@ -324,7 +324,7 @@
   foo;
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 46, 1)],
+      [error(diag.bodyMightCompleteNormally, 46, 1)],
     );
   }
 
@@ -346,7 +346,7 @@
   foo;
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 37, 1)],
+      [error(diag.bodyMightCompleteNormally, 37, 1)],
     );
   }
 
@@ -384,7 +384,7 @@
   Future<int> foo() async {}
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 24, 3)],
+      [error(diag.bodyMightCompleteNormally, 24, 3)],
     );
   }
 
@@ -395,7 +395,7 @@
   Future<void> foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 25, 3)],
+      [error(diag.bodyMightCompleteNormally, 25, 3)],
     );
   }
 
@@ -414,7 +414,7 @@
   int foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.bodyMightCompleteNormally, 16, 3)],
+      [error(diag.bodyMightCompleteNormally, 16, 3)],
     );
   }
 
@@ -500,7 +500,7 @@
       r'''
 bool set s(int value) {}
 ''',
-      [error(CompileTimeErrorCode.nonVoidReturnForSetter, 0, 4)],
+      [error(diag.nonVoidReturnForSetter, 0, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/break_label_on_switch_member_test.dart b/pkg/analyzer/test/src/diagnostics/break_label_on_switch_member_test.dart
index 5abd794..fbefbe5 100644
--- a/pkg/analyzer/test/src/diagnostics/break_label_on_switch_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/break_label_on_switch_member_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.breakLabelOnSwitchMember, 83, 1)],
+      [error(diag.breakLabelOnSwitchMember, 83, 1)],
     );
   }
 
@@ -44,7 +44,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.breakLabelOnSwitchMember, 99, 1)],
+      [error(diag.breakLabelOnSwitchMember, 99, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_test.dart
index 6d76c2a..279ee6a 100644
--- a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       r'''
 extension as on Object {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsExtensionName, 10, 2)],
+      [error(diag.builtInIdentifierAsExtensionName, 10, 2)],
     );
   }
 
@@ -29,7 +29,7 @@
       r'''
 extension Function on Object {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsExtensionName, 10, 8)],
+      [error(diag.builtInIdentifierAsExtensionName, 10, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_type_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_type_name_test.dart
index 5c0691e..0e11fc1 100644
--- a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_type_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_extension_type_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       r'''
 extension type as(int it) {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsExtensionTypeName, 15, 2)],
+      [error(diag.builtInIdentifierAsExtensionTypeName, 15, 2)],
     );
   }
 
@@ -30,7 +30,7 @@
       r'''
 extension type Function(int it) {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsExtensionTypeName, 15, 8)],
+      [error(diag.builtInIdentifierAsExtensionTypeName, 15, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_test.dart
index e509c3b..df413e2 100644
--- a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_prefix_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,8 +21,8 @@
 import 'dart:async' as abstract;
 ''',
       [
-        error(WarningCode.unusedImport, 7, 12),
-        error(CompileTimeErrorCode.builtInIdentifierAsPrefixName, 23, 8),
+        error(diag.unusedImport, 7, 12),
+        error(diag.builtInIdentifierAsPrefixName, 23, 8),
       ],
     );
   }
@@ -33,8 +33,8 @@
 import 'dart:async' as Function;
 ''',
       [
-        error(WarningCode.unusedImport, 7, 12),
-        error(CompileTimeErrorCode.builtInIdentifierAsPrefixName, 23, 8),
+        error(diag.unusedImport, 7, 12),
+        error(diag.builtInIdentifierAsPrefixName, 23, 8),
       ],
     );
   }
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 aba89c6..8570ad5 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class as {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 6, 2)],
+      [error(diag.builtInIdentifierAsTypeName, 6, 2)],
     );
   }
 
@@ -29,7 +29,7 @@
       '''
 class Function {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 6, 8)],
+      [error(diag.builtInIdentifierAsTypeName, 6, 8)],
     );
   }
 
@@ -40,7 +40,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 5, 2)],
+      [error(diag.builtInIdentifierAsTypeName, 5, 2)],
     );
   }
 
@@ -49,7 +49,7 @@
       '''
 mixin as {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 6, 2)],
+      [error(diag.builtInIdentifierAsTypeName, 6, 2)],
     );
   }
 
@@ -58,7 +58,7 @@
       '''
 mixin Function {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 6, 8)],
+      [error(diag.builtInIdentifierAsTypeName, 6, 8)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_test.dart
index 185321c..22ed9a4 100644
--- a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_type_parameter_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       '''
 class A<as> {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeParameterName, 8, 2)],
+      [error(diag.builtInIdentifierAsTypeParameterName, 8, 2)],
     );
   }
 
@@ -30,7 +30,7 @@
       '''
 class A<Function> {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeParameterName, 8, 8)],
+      [error(diag.builtInIdentifierAsTypeParameterName, 8, 8)],
     );
   }
 
@@ -39,7 +39,7 @@
       '''
 extension <as> on List {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeParameterName, 11, 2)],
+      [error(diag.builtInIdentifierAsTypeParameterName, 11, 2)],
     );
   }
 
@@ -48,7 +48,7 @@
       '''
 void f<as>() {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeParameterName, 7, 2)],
+      [error(diag.builtInIdentifierAsTypeParameterName, 7, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart
index 7a654af..89a2668 100644
--- a/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/built_in_identifier_as_typedef_name_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +22,7 @@
 mixin B {}
 class as = A with B;
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypedefName, 28, 2)],
+      [error(diag.builtInIdentifierAsTypedefName, 28, 2)],
     );
   }
 
@@ -33,8 +32,8 @@
 typedef void as();
 ''',
       [
-        error(ParserErrorCode.expectedIdentifierButGotKeyword, 13, 2),
-        error(CompileTimeErrorCode.builtInIdentifierAsTypedefName, 13, 2),
+        error(diag.expectedIdentifierButGotKeyword, 13, 2),
+        error(diag.builtInIdentifierAsTypedefName, 13, 2),
       ],
     );
   }
@@ -45,8 +44,8 @@
 typedef void as();
 ''',
       [
-        error(ParserErrorCode.expectedIdentifierButGotKeyword, 13, 2),
-        error(CompileTimeErrorCode.builtInIdentifierAsTypedefName, 13, 2),
+        error(diag.expectedIdentifierButGotKeyword, 13, 2),
+        error(diag.builtInIdentifierAsTypedefName, 13, 2),
       ],
     );
   }
@@ -57,8 +56,8 @@
 typedef as = void Function();
 ''',
       [
-        error(CompileTimeErrorCode.builtInIdentifierAsTypedefName, 8, 2),
-        error(ParserErrorCode.expectedIdentifierButGotKeyword, 8, 2),
+        error(diag.builtInIdentifierAsTypedefName, 8, 2),
+        error(diag.expectedIdentifierButGotKeyword, 8, 2),
       ],
     );
   }
@@ -69,8 +68,8 @@
 typedef as = List<int>;
 ''',
       [
-        error(CompileTimeErrorCode.builtInIdentifierAsTypedefName, 8, 2),
-        error(ParserErrorCode.expectedIdentifierButGotKeyword, 8, 2),
+        error(diag.builtInIdentifierAsTypedefName, 8, 2),
+        error(diag.expectedIdentifierButGotKeyword, 8, 2),
       ],
     );
   }
@@ -81,8 +80,8 @@
 typedef Function = List<int>;
 ''',
       [
-        error(CompileTimeErrorCode.builtInIdentifierAsTypedefName, 8, 8),
-        error(ParserErrorCode.expectedIdentifierButGotKeyword, 8, 8),
+        error(diag.builtInIdentifierAsTypedefName, 8, 8),
+        error(diag.expectedIdentifierButGotKeyword, 8, 8),
       ],
     );
   }
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 96271a8..b71517c 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -74,11 +74,7 @@
     switch (_variant) {
       case _Variants.nullSafe:
         expectedDiagnostics = [
-          error(
-            CompileTimeErrorCode.caseExpressionTypeImplementsEquals,
-            150,
-            10,
-          ),
+          error(diag.caseExpressionTypeImplementsEquals, 150, 10),
         ];
       case _Variants.patterns:
         expectedDiagnostics = [];
diff --git a/pkg/analyzer/test/src/diagnostics/case_expression_type_is_not_switch_expression_subtype_test.dart b/pkg/analyzer/test/src/diagnostics/case_expression_type_is_not_switch_expression_subtype_test.dart
index f2e1d70..e31782d 100644
--- a/pkg/analyzer/test/src/diagnostics/case_expression_type_is_not_switch_expression_subtype_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/case_expression_type_is_not_switch_expression_subtype_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -43,26 +43,10 @@
     switch (_variant) {
       case _Variant.nullSafe:
         expectedDiagnosticss = [
-          error(
-            CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
-            180,
-            2,
-          ),
-          error(
-            CompileTimeErrorCode.caseExpressionTypeImplementsEquals,
-            180,
-            2,
-          ),
-          error(
-            CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
-            206,
-            10,
-          ),
-          error(
-            CompileTimeErrorCode.caseExpressionTypeImplementsEquals,
-            206,
-            10,
-          ),
+          error(diag.caseExpressionTypeIsNotSwitchExpressionSubtype, 180, 2),
+          error(diag.caseExpressionTypeImplementsEquals, 180, 2),
+          error(diag.caseExpressionTypeIsNotSwitchExpressionSubtype, 206, 10),
+          error(diag.caseExpressionTypeImplementsEquals, 206, 10),
         ];
       case _Variant.patterns:
         expectedDiagnosticss = [];
@@ -97,21 +81,13 @@
     switch (_variant) {
       case _Variant.nullSafe:
         expectedDiagnostics = [
-          error(
-            CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
-            145,
-            2,
-          ),
-          error(
-            CompileTimeErrorCode.caseExpressionTypeIsNotSwitchExpressionSubtype,
-            171,
-            10,
-          ),
+          error(diag.caseExpressionTypeIsNotSwitchExpressionSubtype, 145, 2),
+          error(diag.caseExpressionTypeIsNotSwitchExpressionSubtype, 171, 10),
         ];
       case _Variant.patterns:
         expectedDiagnostics = [
-          error(WarningCode.constantPatternNeverMatchesValueType, 145, 2),
-          error(WarningCode.constantPatternNeverMatchesValueType, 171, 10),
+          error(diag.constantPatternNeverMatchesValueType, 145, 2),
+          error(diag.constantPatternNeverMatchesValueType, 171, 10),
         ];
     }
 
diff --git a/pkg/analyzer/test/src/diagnostics/cast_from_null_always_fails_test.dart b/pkg/analyzer/test/src/diagnostics/cast_from_null_always_fails_test.dart
index 6a3517d..957bd1d 100644
--- a/pkg/analyzer/test/src/diagnostics/cast_from_null_always_fails_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/cast_from_null_always_fails_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   (m as int) = n;
 }
 ''',
-      [error(WarningCode.castFromNullAlwaysFails, 27, 8)],
+      [error(diag.castFromNullAlwaysFails, 27, 8)],
     );
   }
 
@@ -33,7 +33,7 @@
   (m as int?) = n;
 }
 ''',
-      [error(WarningCode.unnecessaryCastPattern, 30, 2)],
+      [error(diag.unnecessaryCastPattern, 30, 2)],
     );
   }
 
@@ -60,7 +60,7 @@
   n as Never;
 }
 ''',
-      [error(WarningCode.castFromNullAlwaysFails, 19, 10)],
+      [error(diag.castFromNullAlwaysFails, 19, 10)],
     );
   }
 
@@ -71,7 +71,7 @@
   n as int;
 }
 ''',
-      [error(WarningCode.castFromNullAlwaysFails, 19, 8)],
+      [error(diag.castFromNullAlwaysFails, 19, 8)],
     );
   }
 
@@ -82,7 +82,7 @@
   n as T;
 }
 ''',
-      [error(WarningCode.castFromNullAlwaysFails, 37, 6)],
+      [error(diag.castFromNullAlwaysFails, 37, 6)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart
index aaee956..f8107f0 100644
--- a/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/cast_to_non_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,8 +21,8 @@
 var A = 0;
 f(String s) { var x = s as A; }''',
       [
-        error(WarningCode.unusedLocalVariable, 29, 1),
-        error(CompileTimeErrorCode.castToNonType, 38, 1),
+        error(diag.unusedLocalVariable, 29, 1),
+        error(diag.castToNonType, 38, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart b/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart
index da7b78b..442c0c9 100644
--- a/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/class_instantiation_access_to_member_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +26,7 @@
 
 var x = TA<int>.i;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToInstanceMember,
-          60,
-          9,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToInstanceMember, 60, 9)],
     );
   }
 
@@ -48,13 +41,7 @@
 
 var x = A<int>.i;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToUnknownMember,
-          63,
-          8,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToUnknownMember, 63, 8)],
     );
   }
 
@@ -67,13 +54,7 @@
 
 var x = A<int>.i;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToInstanceMember,
-          37,
-          8,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToInstanceMember, 37, 8)],
     );
   }
 
@@ -88,13 +69,7 @@
   A<int>.i = 7;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToInstanceMember,
-          53,
-          8,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToInstanceMember, 53, 8)],
     );
   }
 
@@ -107,13 +82,7 @@
 
 var x = A<int>.i;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToStaticMember,
-          44,
-          8,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToStaticMember, 44, 8)],
     );
   }
 
@@ -128,13 +97,7 @@
   A<int>.i = 7;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.classInstantiationAccessToStaticMember,
-          60,
-          8,
-        ),
-      ],
+      [error(diag.classInstantiationAccessToStaticMember, 60, 8)],
     );
   }
 
@@ -147,7 +110,7 @@
 
 var x = A<int>.;
 ''',
-      [error(ParserErrorCode.missingIdentifier, 42, 1)],
+      [error(diag.missingIdentifier, 42, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/class_used_as_mixin_test.dart b/pkg/analyzer/test/src/diagnostics/class_used_as_mixin_test.dart
index ea33138..fa56be0 100644
--- a/pkg/analyzer/test/src/diagnostics/class_used_as_mixin_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/class_used_as_mixin_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   int compareTo(int x) => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 15, 15)],
+      [error(diag.classUsedAsMixin, 15, 15)],
     );
   }
 
@@ -41,7 +41,7 @@
 class Foo {}
 class Bar with Foo {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 28, 3)],
+      [error(diag.classUsedAsMixin, 28, 3)],
     );
   }
 
@@ -70,7 +70,7 @@
 import 'foo.dart';
 class Bar with Foo {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 34, 3)],
+      [error(diag.classUsedAsMixin, 34, 3)],
     );
   }
 
@@ -97,7 +97,7 @@
 import 'foo.dart';
 class Bar with Foo {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 50, 3)],
+      [error(diag.classUsedAsMixin, 50, 3)],
     );
   }
 
@@ -123,7 +123,7 @@
 import 'foo.dart';
 class Bar with FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 34, 10)],
+      [error(diag.classUsedAsMixin, 34, 10)],
     );
   }
 
@@ -163,7 +163,7 @@
 typedef FooTypedef = Foo;
 class Bar with FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 60, 10)],
+      [error(diag.classUsedAsMixin, 60, 10)],
     );
   }
 
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
index 8366447..a695a46 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
       '''
 class A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.concreteClassHasEnumSuperinterface, 19, 4)],
+      [error(diag.concreteClassHasEnumSuperinterface, 19, 4)],
     );
   }
 
@@ -37,7 +37,7 @@
 abstract class A implements Enum {}
 class B implements A {}
 ''',
-      [error(CompileTimeErrorCode.concreteClassHasEnumSuperinterface, 42, 1)],
+      [error(diag.concreteClassHasEnumSuperinterface, 42, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
 class M {}
 class A = Object with M implements Enum;
 ''',
-      [error(CompileTimeErrorCode.concreteClassHasEnumSuperinterface, 46, 4)],
+      [error(diag.concreteClassHasEnumSuperinterface, 46, 4)],
     );
   }
 
@@ -58,7 +58,7 @@
 abstract class A implements Enum {}
 class B = Object with M implements A;
 ''',
-      [error(CompileTimeErrorCode.concreteClassHasEnumSuperinterface, 53, 1)],
+      [error(diag.concreteClassHasEnumSuperinterface, 53, 1)],
     );
   }
 
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 8fa67bb..b57840b 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.concreteClassWithAbstractMember,
+          diag.concreteClassWithAbstractMember,
           12,
           16,
           text: "'x' must have a method body because 'A' isn't abstract.",
@@ -42,7 +42,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.concreteClassWithAbstractMember,
+          diag.concreteClassWithAbstractMember,
           12,
           22,
           text: "'x' must have a method body because 'A' isn't abstract.",
@@ -57,7 +57,7 @@
 class A {
   m();
 }''',
-      [error(CompileTimeErrorCode.concreteClassWithAbstractMember, 12, 4)],
+      [error(diag.concreteClassWithAbstractMember, 12, 4)],
     );
   }
 
@@ -86,7 +86,7 @@
 class A implements I {
   m();
 }''',
-      [error(CompileTimeErrorCode.concreteClassWithAbstractMember, 62, 4)],
+      [error(diag.concreteClassWithAbstractMember, 62, 4)],
     );
   }
 
@@ -99,7 +99,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.concreteClassWithAbstractMember,
+          diag.concreteClassWithAbstractMember,
           12,
           13,
           text: "'s' must have a method body because 'A' isn't abstract.",
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
index 759f4eb..b6d552d 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,7 +33,7 @@
   static int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingConstructorAndStaticField, 14, 3)],
+      [error(diag.conflictingConstructorAndStaticField, 14, 3)],
     );
   }
 
@@ -45,13 +45,7 @@
   static int get foo => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
-          14,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticGetter, 14, 3)],
     );
   }
 
@@ -64,13 +58,7 @@
   static set foo(_) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
-          14,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticGetter, 14, 3)],
     );
   }
 
@@ -93,13 +81,7 @@
   static void set foo(_) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticSetter,
-          14,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticSetter, 14, 3)],
     );
   }
 
@@ -111,7 +93,7 @@
   const E.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingConstructorAndStaticField, 32, 3)],
+      [error(diag.conflictingConstructorAndStaticField, 32, 3)],
     );
   }
 
@@ -134,7 +116,7 @@
   static int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingConstructorAndStaticField, 30, 3)],
+      [error(diag.conflictingConstructorAndStaticField, 30, 3)],
     );
   }
 
@@ -147,13 +129,7 @@
   static int get foo => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
-          30,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticGetter, 30, 3)],
     );
   }
 
@@ -166,13 +142,7 @@
   static void set foo(_) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticSetter,
-          30,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticSetter, 30, 3)],
     );
   }
 
@@ -191,7 +161,7 @@
   static int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingConstructorAndStaticField, 17, 3)],
+      [error(diag.conflictingConstructorAndStaticField, 17, 3)],
     );
   }
 
@@ -203,7 +173,7 @@
   static int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingConstructorAndStaticField, 31, 3)],
+      [error(diag.conflictingConstructorAndStaticField, 31, 3)],
     );
   }
 
@@ -214,13 +184,7 @@
   static int get foo => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticGetter,
-          17,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticGetter, 17, 3)],
     );
   }
 
@@ -231,13 +195,7 @@
   static void set foo(_) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticSetter,
-          17,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticSetter, 17, 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
index a4accf7..fa98348 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -44,13 +44,7 @@
   static void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticMethod,
-          14,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticMethod, 14, 3)],
     );
   }
 
@@ -73,13 +67,7 @@
   static void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticMethod,
-          30,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticMethod, 30, 3)],
     );
   }
 
@@ -98,13 +86,7 @@
   static void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingConstructorAndStaticMethod,
-          17,
-          3,
-        ),
-      ],
+      [error(diag.conflictingConstructorAndStaticMethod, 17, 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
index b57e840..50b16c2 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_field_and_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_field_and_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 49, 3)],
+      [error(diag.conflictingFieldAndMethod, 49, 3)],
     );
   }
 
@@ -39,7 +39,7 @@
   get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 49, 3)],
+      [error(diag.conflictingFieldAndMethod, 49, 3)],
     );
   }
 
@@ -66,7 +66,7 @@
     await assertErrorsInFile2(a, []);
 
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.conflictingFieldAndMethod, 47, 3),
+      error(diag.conflictingFieldAndMethod, 47, 3),
     ]);
   }
 
@@ -91,7 +91,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.conflictingFieldAndMethod, 65, 3),
+      error(diag.conflictingFieldAndMethod, 65, 3),
     ]);
 
     await assertErrorsInFile2(b, []);
@@ -107,7 +107,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 49, 3)],
+      [error(diag.conflictingFieldAndMethod, 49, 3)],
     );
   }
 
@@ -123,7 +123,7 @@
   final int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 62, 3)],
+      [error(diag.conflictingFieldAndMethod, 62, 3)],
     );
   }
 
@@ -139,7 +139,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 60, 3)],
+      [error(diag.conflictingFieldAndMethod, 60, 3)],
     );
   }
 
@@ -166,7 +166,7 @@
     await assertErrorsInFile2(a, []);
 
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.conflictingFieldAndMethod, 47, 3),
+      error(diag.conflictingFieldAndMethod, 47, 3),
     ]);
   }
 
@@ -192,7 +192,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.conflictingFieldAndMethod, 69, 3),
+      error(diag.conflictingFieldAndMethod, 69, 3),
     ]);
 
     await assertErrorsInFile2(b, []);
@@ -210,7 +210,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 56, 3)],
+      [error(diag.conflictingFieldAndMethod, 56, 3)],
     );
   }
 
@@ -261,7 +261,7 @@
     await assertErrorsInFile2(a, []);
 
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.conflictingFieldAndMethod, 47, 3),
+      error(diag.conflictingFieldAndMethod, 47, 3),
     ]);
   }
 
@@ -286,7 +286,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.conflictingFieldAndMethod, 65, 3),
+      error(diag.conflictingFieldAndMethod, 65, 3),
     ]);
 
     await assertErrorsInFile2(b, []);
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 6f31a4f..e8b1f7d 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
     await assertErrorsInFile2(a, []);
 
     await assertErrorsInFile2(testFile, [
-      error(CompileTimeErrorCode.conflictingGenericInterfaces, 65, 1),
+      error(diag.conflictingGenericInterfaces, 65, 1),
     ]);
   }
 
@@ -46,7 +46,7 @@
 class B implements I<String> {}
 class C extends A implements B {}
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 81, 1)],
+      [error(diag.conflictingGenericInterfaces, 81, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
 class B implements I<int?> {}
 class C extends A implements B {}
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 79, 1)],
+      [error(diag.conflictingGenericInterfaces, 79, 1)],
     );
   }
 
@@ -79,7 +79,7 @@
 class C implements A<Object?> {}
 class D extends B implements C {}
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 85, 1)],
+      [error(diag.conflictingGenericInterfaces, 85, 1)],
     );
   }
 
@@ -91,7 +91,7 @@
 mixin B implements I<String> {}
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 81, 1)],
+      [error(diag.conflictingGenericInterfaces, 81, 1)],
     );
   }
 
@@ -115,7 +115,7 @@
 mixin M implements I<String> {}
 class C = A with M;
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 72, 1)],
+      [error(diag.conflictingGenericInterfaces, 72, 1)],
     );
   }
 
@@ -136,7 +136,7 @@
 mixin M implements I<String> {}
 class C = A with M;
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 81, 1)],
+      [error(diag.conflictingGenericInterfaces, 81, 1)],
     );
   }
 
@@ -150,7 +150,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 80, 1)],
+      [error(diag.conflictingGenericInterfaces, 80, 1)],
     );
   }
 
@@ -164,7 +164,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 82, 1)],
+      [error(diag.conflictingGenericInterfaces, 82, 1)],
     );
   }
 
@@ -177,12 +177,8 @@
 extension type C(Never it) implements A, B {}
 ''',
       [
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 87, 1),
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationTypeBottom,
-          89,
-          5,
-        ),
+        error(diag.conflictingGenericInterfaces, 87, 1),
+        error(diag.extensionTypeRepresentationTypeBottom, 89, 5),
       ],
     );
   }
@@ -195,7 +191,7 @@
 class B implements I<String> {}
 mixin M on A implements B {}
 ''',
-      [error(CompileTimeErrorCode.conflictingGenericInterfaces, 81, 1)],
+      [error(diag.conflictingGenericInterfaces, 81, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_inherited_method_and_setter_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_inherited_method_and_setter_test.dart
index 1d6bae8..c1ea061 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_inherited_method_and_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_inherited_method_and_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 103, 3)],
+      [error(diag.conflictingFieldAndMethod, 103, 3)],
     );
   }
 
@@ -49,7 +49,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
+          diag.conflictingInheritedMethodAndSetter,
           77,
           1,
           contextMessages: [message(testFile, 17, 3), message(testFile, 45, 3)],
@@ -73,7 +73,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
+          diag.conflictingInheritedMethodAndSetter,
           77,
           1,
           contextMessages: [message(testFile, 17, 3), message(testFile, 45, 3)],
@@ -97,7 +97,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
+          diag.conflictingInheritedMethodAndSetter,
           77,
           1,
           contextMessages: [message(testFile, 17, 3), message(testFile, 45, 3)],
@@ -121,7 +121,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
+          diag.conflictingInheritedMethodAndSetter,
           77,
           1,
           contextMessages: [message(testFile, 17, 3), message(testFile, 45, 3)],
@@ -145,7 +145,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.conflictingInheritedMethodAndSetter,
+          diag.conflictingInheritedMethodAndSetter,
           119,
           1,
           contextMessages: [message(testFile, 38, 3), message(testFile, 87, 3)],
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
index 6dd9002..49f1183 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_method_and_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_method_and_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingMethodAndField, 49, 3)],
+      [error(diag.conflictingMethodAndField, 49, 3)],
     );
   }
 
@@ -39,7 +39,7 @@
   foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingMethodAndField, 50, 3)],
+      [error(diag.conflictingMethodAndField, 50, 3)],
     );
   }
 
@@ -66,7 +66,7 @@
     await assertErrorsInFile2(a, []);
 
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.conflictingMethodAndField, 44, 3),
+      error(diag.conflictingMethodAndField, 44, 3),
     ]);
   }
 
@@ -91,7 +91,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.conflictingMethodAndField, 76, 3),
+      error(diag.conflictingMethodAndField, 76, 3),
     ]);
 
     await assertErrorsInFile2(b, []);
@@ -107,7 +107,7 @@
   foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingMethodAndField, 50, 3)],
+      [error(diag.conflictingMethodAndField, 50, 3)],
     );
   }
 
@@ -123,7 +123,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingMethodAndField, 61, 3)],
+      [error(diag.conflictingMethodAndField, 61, 3)],
     );
   }
 
@@ -150,7 +150,7 @@
     await assertErrorsInFile2(a, []);
 
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.conflictingMethodAndField, 44, 3),
+      error(diag.conflictingMethodAndField, 44, 3),
     ]);
   }
 
@@ -176,7 +176,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.conflictingMethodAndField, 77, 3),
+      error(diag.conflictingMethodAndField, 77, 3),
     ]);
 
     await assertErrorsInFile2(b, []);
@@ -194,7 +194,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingMethodAndField, 61, 3)],
+      [error(diag.conflictingMethodAndField, 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 5e379b7..8cdcb1b 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 40, 3)],
+      [error(diag.conflictingStaticAndInstance, 40, 3)],
     );
   }
 
@@ -42,7 +42,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 61, 3)],
+      [error(diag.conflictingStaticAndInstance, 61, 3)],
     );
   }
 
@@ -54,7 +54,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 
@@ -66,7 +66,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 
@@ -78,7 +78,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 
@@ -90,7 +90,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -102,7 +102,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -118,7 +118,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -130,7 +130,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -142,7 +142,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 23, 3)],
+      [error(diag.conflictingStaticAndInstance, 23, 3)],
     );
   }
 
@@ -154,7 +154,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 23, 3)],
+      [error(diag.conflictingStaticAndInstance, 23, 3)],
     );
   }
 
@@ -166,7 +166,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 23, 3)],
+      [error(diag.conflictingStaticAndInstance, 23, 3)],
     );
   }
 
@@ -180,7 +180,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 81, 3)],
+      [error(diag.conflictingStaticAndInstance, 81, 3)],
     );
   }
 
@@ -194,7 +194,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 78, 3)],
+      [error(diag.conflictingStaticAndInstance, 78, 3)],
     );
   }
 
@@ -208,7 +208,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 74, 3)],
+      [error(diag.conflictingStaticAndInstance, 74, 3)],
     );
   }
 
@@ -222,7 +222,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 73, 3)],
+      [error(diag.conflictingStaticAndInstance, 73, 3)],
     );
   }
 
@@ -236,7 +236,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 77, 3)],
+      [error(diag.conflictingStaticAndInstance, 77, 3)],
     );
   }
 
@@ -250,7 +250,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 74, 3)],
+      [error(diag.conflictingStaticAndInstance, 74, 3)],
     );
   }
 
@@ -264,7 +264,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 73, 3)],
+      [error(diag.conflictingStaticAndInstance, 73, 3)],
     );
   }
 
@@ -278,7 +278,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 81, 3)],
+      [error(diag.conflictingStaticAndInstance, 81, 3)],
     );
   }
 
@@ -292,7 +292,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 78, 3)],
+      [error(diag.conflictingStaticAndInstance, 78, 3)],
     );
   }
 
@@ -306,7 +306,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 74, 3)],
+      [error(diag.conflictingStaticAndInstance, 74, 3)],
     );
   }
 
@@ -322,7 +322,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 61, 3)],
+      [error(diag.conflictingStaticAndInstance, 61, 3)],
     );
   }
 
@@ -336,7 +336,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 73, 3)],
+      [error(diag.conflictingStaticAndInstance, 73, 3)],
     );
   }
 
@@ -350,7 +350,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 77, 3)],
+      [error(diag.conflictingStaticAndInstance, 77, 3)],
     );
   }
 
@@ -364,7 +364,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 74, 3)],
+      [error(diag.conflictingStaticAndInstance, 74, 3)],
     );
   }
 
@@ -378,7 +378,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 73, 3)],
+      [error(diag.conflictingStaticAndInstance, 73, 3)],
     );
   }
 
@@ -394,7 +394,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -405,7 +405,7 @@
   static String runtimeType() => 'x';
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 26, 11)],
+      [error(diag.conflictingStaticAndInstance, 26, 11)],
     );
   }
 
@@ -416,7 +416,7 @@
   static String toString() => 'x';
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 26, 8)],
+      [error(diag.conflictingStaticAndInstance, 26, 8)],
     );
   }
 
@@ -430,7 +430,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 69, 3)],
+      [error(diag.conflictingStaticAndInstance, 69, 3)],
     );
   }
 
@@ -444,7 +444,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 66, 3)],
+      [error(diag.conflictingStaticAndInstance, 66, 3)],
     );
   }
 
@@ -458,7 +458,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 66, 3)],
+      [error(diag.conflictingStaticAndInstance, 66, 3)],
     );
   }
 
@@ -472,7 +472,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 62, 3)],
+      [error(diag.conflictingStaticAndInstance, 62, 3)],
     );
   }
 
@@ -486,7 +486,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 61, 3)],
+      [error(diag.conflictingStaticAndInstance, 61, 3)],
     );
   }
 
@@ -500,7 +500,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 65, 3)],
+      [error(diag.conflictingStaticAndInstance, 65, 3)],
     );
   }
 
@@ -514,7 +514,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 62, 3)],
+      [error(diag.conflictingStaticAndInstance, 62, 3)],
     );
   }
 
@@ -528,7 +528,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 61, 3)],
+      [error(diag.conflictingStaticAndInstance, 61, 3)],
     );
   }
 }
@@ -542,7 +542,7 @@
   a, hashCode, b
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 14, 8)],
+      [error(diag.conflictingStaticAndInstance, 14, 8)],
     );
   }
 
@@ -553,7 +553,7 @@
   a, index, b
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 14, 5)],
+      [error(diag.conflictingStaticAndInstance, 14, 5)],
     );
   }
 
@@ -565,7 +565,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 11, 3)],
+      [error(diag.conflictingStaticAndInstance, 11, 3)],
     );
   }
 
@@ -576,7 +576,7 @@
   a, noSuchMethod, b
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 14, 12)],
+      [error(diag.conflictingStaticAndInstance, 14, 12)],
     );
   }
 
@@ -587,7 +587,7 @@
   a, runtimeType, b
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 14, 11)],
+      [error(diag.conflictingStaticAndInstance, 14, 11)],
     );
   }
 
@@ -599,7 +599,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 11, 3)],
+      [error(diag.conflictingStaticAndInstance, 11, 3)],
     );
   }
 
@@ -610,7 +610,7 @@
   a, toString, b
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 14, 8)],
+      [error(diag.conflictingStaticAndInstance, 14, 8)],
     );
   }
 
@@ -622,7 +622,7 @@
   static final int hashCode = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 33, 8)],
+      [error(diag.conflictingStaticAndInstance, 33, 8)],
     );
   }
 
@@ -638,7 +638,7 @@
   static final int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 73, 3)],
+      [error(diag.conflictingStaticAndInstance, 73, 3)],
     );
   }
 
@@ -654,7 +654,7 @@
   static final int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 69, 3)],
+      [error(diag.conflictingStaticAndInstance, 69, 3)],
     );
   }
 
@@ -670,7 +670,7 @@
   static final int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 73, 3)],
+      [error(diag.conflictingStaticAndInstance, 73, 3)],
     );
   }
 
@@ -682,7 +682,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 11, 3)],
+      [error(diag.conflictingStaticAndInstance, 11, 3)],
     );
   }
 
@@ -695,7 +695,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 33, 3)],
+      [error(diag.conflictingStaticAndInstance, 33, 3)],
     );
   }
 
@@ -708,7 +708,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 33, 3)],
+      [error(diag.conflictingStaticAndInstance, 33, 3)],
     );
   }
 
@@ -721,7 +721,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 33, 3)],
+      [error(diag.conflictingStaticAndInstance, 33, 3)],
     );
   }
 
@@ -733,7 +733,7 @@
   static int hashCode() => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 8)],
+      [error(diag.conflictingStaticAndInstance, 27, 8)],
     );
   }
 
@@ -749,7 +749,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 68, 3)],
+      [error(diag.conflictingStaticAndInstance, 68, 3)],
     );
   }
 
@@ -765,7 +765,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 64, 3)],
+      [error(diag.conflictingStaticAndInstance, 64, 3)],
     );
   }
 
@@ -781,7 +781,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 68, 3)],
+      [error(diag.conflictingStaticAndInstance, 68, 3)],
     );
   }
 
@@ -794,7 +794,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 31, 3)],
+      [error(diag.conflictingStaticAndInstance, 31, 3)],
     );
   }
 
@@ -807,7 +807,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 28, 3)],
+      [error(diag.conflictingStaticAndInstance, 28, 3)],
     );
   }
 
@@ -820,7 +820,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 28, 3)],
+      [error(diag.conflictingStaticAndInstance, 28, 3)],
     );
   }
 
@@ -833,7 +833,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 28, 3)],
+      [error(diag.conflictingStaticAndInstance, 28, 3)],
     );
   }
 
@@ -846,7 +846,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 }
@@ -862,7 +862,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 44, 3)],
+      [error(diag.conflictingStaticAndInstance, 44, 3)],
     );
   }
 
@@ -874,7 +874,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 43, 3)],
+      [error(diag.conflictingStaticAndInstance, 43, 3)],
     );
   }
 
@@ -886,7 +886,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 44, 3)],
+      [error(diag.conflictingStaticAndInstance, 44, 3)],
     );
   }
 
@@ -898,7 +898,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 41, 3)],
+      [error(diag.conflictingStaticAndInstance, 41, 3)],
     );
   }
 
@@ -910,7 +910,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 41, 3)],
+      [error(diag.conflictingStaticAndInstance, 41, 3)],
     );
   }
 
@@ -922,7 +922,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 41, 3)],
+      [error(diag.conflictingStaticAndInstance, 41, 3)],
     );
   }
 
@@ -934,7 +934,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 40, 3)],
+      [error(diag.conflictingStaticAndInstance, 40, 3)],
     );
   }
 
@@ -946,7 +946,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 40, 3)],
+      [error(diag.conflictingStaticAndInstance, 40, 3)],
     );
   }
 
@@ -958,7 +958,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 40, 3)],
+      [error(diag.conflictingStaticAndInstance, 40, 3)],
     );
   }
 
@@ -973,7 +973,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 107, 3)],
+      [error(diag.conflictingStaticAndInstance, 107, 3)],
     );
   }
 
@@ -988,7 +988,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 104, 3)],
+      [error(diag.conflictingStaticAndInstance, 104, 3)],
     );
   }
 
@@ -1003,7 +1003,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 104, 3)],
+      [error(diag.conflictingStaticAndInstance, 104, 3)],
     );
   }
 
@@ -1018,7 +1018,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 100, 3)],
+      [error(diag.conflictingStaticAndInstance, 100, 3)],
     );
   }
 
@@ -1033,7 +1033,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 99, 3)],
+      [error(diag.conflictingStaticAndInstance, 99, 3)],
     );
   }
 
@@ -1048,7 +1048,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 103, 3)],
+      [error(diag.conflictingStaticAndInstance, 103, 3)],
     );
   }
 
@@ -1063,7 +1063,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 100, 3)],
+      [error(diag.conflictingStaticAndInstance, 100, 3)],
     );
   }
 
@@ -1078,7 +1078,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 99, 3)],
+      [error(diag.conflictingStaticAndInstance, 99, 3)],
     );
   }
 }
@@ -1092,7 +1092,7 @@
   static int index = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 31, 5)],
+      [error(diag.conflictingStaticAndInstance, 31, 5)],
     );
   }
 
@@ -1103,7 +1103,7 @@
   static int get index => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 35, 5)],
+      [error(diag.conflictingStaticAndInstance, 35, 5)],
     );
   }
 
@@ -1114,7 +1114,7 @@
   static int index() => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 31, 5)],
+      [error(diag.conflictingStaticAndInstance, 31, 5)],
     );
   }
 
@@ -1125,7 +1125,7 @@
   static set index(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 31, 5)],
+      [error(diag.conflictingStaticAndInstance, 31, 5)],
     );
   }
 
@@ -1136,7 +1136,7 @@
   static String runtimeType() => 'x';
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 26, 11)],
+      [error(diag.conflictingStaticAndInstance, 26, 11)],
     );
   }
 
@@ -1147,7 +1147,7 @@
   static String toString() => 'x';
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 26, 8)],
+      [error(diag.conflictingStaticAndInstance, 26, 8)],
     );
   }
 
@@ -1161,7 +1161,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 64, 3)],
+      [error(diag.conflictingStaticAndInstance, 64, 3)],
     );
   }
 
@@ -1175,7 +1175,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 61, 3)],
+      [error(diag.conflictingStaticAndInstance, 61, 3)],
     );
   }
 
@@ -1189,7 +1189,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 57, 3)],
+      [error(diag.conflictingStaticAndInstance, 57, 3)],
     );
   }
 
@@ -1203,7 +1203,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 56, 3)],
+      [error(diag.conflictingStaticAndInstance, 56, 3)],
     );
   }
 
@@ -1217,7 +1217,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 60, 3)],
+      [error(diag.conflictingStaticAndInstance, 60, 3)],
     );
   }
 
@@ -1231,7 +1231,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 57, 3)],
+      [error(diag.conflictingStaticAndInstance, 57, 3)],
     );
   }
 
@@ -1245,7 +1245,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 56, 3)],
+      [error(diag.conflictingStaticAndInstance, 56, 3)],
     );
   }
 
@@ -1259,7 +1259,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 72, 3)],
+      [error(diag.conflictingStaticAndInstance, 72, 3)],
     );
   }
 
@@ -1273,7 +1273,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 69, 3)],
+      [error(diag.conflictingStaticAndInstance, 69, 3)],
     );
   }
 
@@ -1287,7 +1287,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 69, 3)],
+      [error(diag.conflictingStaticAndInstance, 69, 3)],
     );
   }
 
@@ -1301,7 +1301,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 65, 3)],
+      [error(diag.conflictingStaticAndInstance, 65, 3)],
     );
   }
 
@@ -1315,7 +1315,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 64, 3)],
+      [error(diag.conflictingStaticAndInstance, 64, 3)],
     );
   }
 
@@ -1329,7 +1329,7 @@
   static int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 68, 3)],
+      [error(diag.conflictingStaticAndInstance, 68, 3)],
     );
   }
 
@@ -1343,7 +1343,7 @@
   static void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 65, 3)],
+      [error(diag.conflictingStaticAndInstance, 65, 3)],
     );
   }
 
@@ -1357,7 +1357,7 @@
   static set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 64, 3)],
+      [error(diag.conflictingStaticAndInstance, 64, 3)],
     );
   }
 
@@ -1369,7 +1369,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 
@@ -1381,7 +1381,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 
@@ -1393,7 +1393,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 27, 3)],
+      [error(diag.conflictingStaticAndInstance, 27, 3)],
     );
   }
 
@@ -1405,7 +1405,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -1417,7 +1417,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -1429,7 +1429,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 24, 3)],
+      [error(diag.conflictingStaticAndInstance, 24, 3)],
     );
   }
 
@@ -1441,7 +1441,7 @@
   int get foo => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 23, 3)],
+      [error(diag.conflictingStaticAndInstance, 23, 3)],
     );
   }
 
@@ -1453,7 +1453,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 23, 3)],
+      [error(diag.conflictingStaticAndInstance, 23, 3)],
     );
   }
 
@@ -1465,7 +1465,7 @@
   set foo(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingStaticAndInstance, 23, 3)],
+      [error(diag.conflictingStaticAndInstance, 23, 3)],
     );
   }
 }
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 2999037..f989b27 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
       r'''
 class T<T> {}
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndClass, 8, 1)],
     );
   }
 }
@@ -38,7 +38,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndEnum, 7, 1)],
+      [error(diag.conflictingTypeVariableAndEnum, 7, 1)],
     );
   }
 }
@@ -50,7 +50,7 @@
       r'''
 extension T<T> on String {}
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndExtension, 12, 1)],
+      [error(diag.conflictingTypeVariableAndExtension, 12, 1)],
     );
   }
 }
@@ -63,13 +63,7 @@
       r'''
 extension type T<T>(int it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndExtensionType,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndExtensionType, 17, 1)],
     );
   }
 }
@@ -81,7 +75,7 @@
       r'''
 mixin T<T> {}
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMixin, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMixin, 8, 1)],
     );
   }
 }
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 97ce3e1..30b58f6 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   A.T();
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberClass, 8, 1)],
     );
   }
 
@@ -38,7 +38,7 @@
   var T;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberClass, 8, 1)],
     );
   }
 
@@ -49,7 +49,7 @@
   get T => null;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberClass, 8, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   T() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberClass, 8, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
   static T() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberClass, 8, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
   _() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 15, 1)],
+      [error(diag.unusedElement, 15, 1)],
     );
   }
 
@@ -97,12 +97,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberClass,
-          52,
-          1,
-        ),
-        error(WarningCode.unusedElement, 59, 1),
+        error(diag.conflictingTypeVariableAndMemberClass, 52, 1),
+        error(diag.unusedElement, 59, 1),
       ],
     );
   }
@@ -114,7 +110,7 @@
   set T(x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberClass, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberClass, 8, 1)],
     );
   }
 }
@@ -130,7 +126,7 @@
   get T => null;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberEnum, 7, 1)],
+      [error(diag.conflictingTypeVariableAndMemberEnum, 7, 1)],
     );
   }
 
@@ -142,7 +138,7 @@
   void T() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberEnum, 7, 1)],
+      [error(diag.conflictingTypeVariableAndMemberEnum, 7, 1)],
     );
   }
 
@@ -154,7 +150,7 @@
   set T(x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberEnum, 7, 1)],
+      [error(diag.conflictingTypeVariableAndMemberEnum, 7, 1)],
     );
   }
 }
@@ -169,13 +165,7 @@
   get T => null;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension,
-          12,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtension, 12, 1)],
     );
   }
 
@@ -186,13 +176,7 @@
   T() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension,
-          12,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtension, 12, 1)],
     );
   }
 
@@ -203,13 +187,7 @@
   set T(x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtension,
-          12,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtension, 12, 1)],
     );
   }
 }
@@ -224,13 +202,7 @@
   A.T(int it) : this(it);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtensionType, 17, 1)],
     );
   }
 
@@ -239,13 +211,7 @@
       r'''
 extension type A<T>.T(int it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtensionType, 17, 1)],
     );
   }
 
@@ -256,13 +222,7 @@
   get T => null;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtensionType, 17, 1)],
     );
   }
 
@@ -273,13 +233,7 @@
   T() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtensionType, 17, 1)],
     );
   }
 
@@ -290,13 +244,7 @@
   set T(x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.conflictingTypeVariableAndMemberExtensionType,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.conflictingTypeVariableAndMemberExtensionType, 17, 1)],
     );
   }
 }
@@ -311,7 +259,7 @@
   var T;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberMixin, 8, 1)],
     );
   }
 
@@ -322,7 +270,7 @@
   get T => null;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberMixin, 8, 1)],
     );
   }
 
@@ -333,7 +281,7 @@
   T() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberMixin, 8, 1)],
     );
   }
 
@@ -344,7 +292,7 @@
   static T() {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberMixin, 8, 1)],
     );
   }
 
@@ -355,7 +303,7 @@
   set T(x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingTypeVariableAndMemberMixin, 8, 1)],
+      [error(diag.conflictingTypeVariableAndMemberMixin, 8, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart
index e531c3c..2ead520 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_field_type_mismatch_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 const int y = 1;
 var v = const C<int>();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 27, 1)],
+      [error(diag.invalidAssignment, 27, 1)],
     );
   }
 
@@ -38,7 +38,7 @@
 }
 var v = const A(0);
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 40, 10)],
+      [error(diag.undefinedClass, 40, 10)],
     );
   }
 
@@ -51,7 +51,7 @@
 }
 var v = const A(null);
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 40, 10)],
+      [error(diag.undefinedClass, 40, 10)],
     );
   }
 }
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 80955b6..136515f 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -57,8 +57,8 @@
 var v = const A(foo);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 116, 3),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 116, 3),
+        error(diag.argumentTypeNotAssignable, 116, 3),
+        error(diag.constConstructorParamTypeMismatch, 116, 3),
       ],
     );
   }
@@ -89,7 +89,7 @@
 }
 var v = const A('foo');
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 20, 10)],
+      [error(diag.undefinedClass, 20, 10)],
     );
   }
 
@@ -103,7 +103,7 @@
 }
 var v = const A(null);
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 20, 10)],
+      [error(diag.undefinedClass, 20, 10)],
     );
   }
 
@@ -198,8 +198,8 @@
 var v = const A();
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 45, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 64, 9),
+        error(diag.invalidAssignment, 45, 5),
+        error(diag.constConstructorParamTypeMismatch, 64, 9),
       ],
     );
   }
@@ -221,8 +221,8 @@
 var v = const C(u);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 143, 1),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 143, 1),
+        error(diag.argumentTypeNotAssignable, 143, 1),
+        error(diag.constConstructorParamTypeMismatch, 143, 1),
       ],
     );
   }
@@ -241,8 +241,8 @@
 var v = const A(foo);
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 127, 3),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 127, 3),
+        error(diag.argumentTypeNotAssignable, 127, 3),
+        error(diag.constConstructorParamTypeMismatch, 127, 3),
       ],
     );
   }
@@ -257,8 +257,8 @@
 var v = const A('foo');
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 62, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 62, 5),
+        error(diag.argumentTypeNotAssignable, 62, 5),
+        error(diag.constConstructorParamTypeMismatch, 62, 5),
       ],
     );
   }
@@ -272,7 +272,7 @@
 }
 var v = const A('foo');
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 18, 10)],
+      [error(diag.undefinedClass, 18, 10)],
     );
   }
 
@@ -285,8 +285,8 @@
 var v = const A<int>('foo');
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 52, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 52, 5),
+        error(diag.argumentTypeNotAssignable, 52, 5),
+        error(diag.constConstructorParamTypeMismatch, 52, 5),
       ],
     );
   }
@@ -300,8 +300,8 @@
 var v = const A('foo');
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 46, 5),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 46, 5),
+        error(diag.argumentTypeNotAssignable, 46, 5),
+        error(diag.constConstructorParamTypeMismatch, 46, 5),
       ],
     );
   }
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 3168e00..a04007e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -44,12 +44,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constEvalMethodInvocation, 26, 3),
-        error(
-          CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-          33,
-          5,
-        ),
+        error(diag.constEvalMethodInvocation, 26, 3),
+        error(diag.constConstructorWithFieldInitializedByNonConst, 33, 5),
       ],
     );
   }
@@ -63,13 +59,7 @@
   final x = y as num;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-          27,
-          5,
-        ),
-      ],
+      [error(diag.constConstructorWithFieldInitializedByNonConst, 27, 5)],
     );
   }
 
@@ -114,12 +104,8 @@
 int f() => 0;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalMethodInvocation, 30, 3),
-        error(
-          CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-          37,
-          5,
-        ),
+        error(diag.constEvalMethodInvocation, 30, 3),
+        error(diag.constConstructorWithFieldInitializedByNonConst, 37, 5),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart
index 0c4b0a9..33fb112 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_mixin_with_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   const B(this.a);
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithMixinWithField, 77, 1)],
+      [error(diag.constConstructorWithMixinWithField, 77, 1)],
     );
   }
 
@@ -57,7 +57,7 @@
   const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithMixinWithField, 68, 1)],
+      [error(diag.constConstructorWithMixinWithField, 68, 1)],
     );
   }
 
@@ -96,7 +96,7 @@
   const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithMixinWithField, 62, 1)],
+      [error(diag.constConstructorWithMixinWithField, 62, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
   const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithMixinWithFields, 71, 1)],
+      [error(diag.constConstructorWithMixinWithFields, 71, 1)],
     );
   }
 
@@ -149,7 +149,7 @@
   const X();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithMixinWithField, 62, 1)],
+      [error(diag.constConstructorWithMixinWithField, 62, 1)],
     );
   }
 
@@ -164,7 +164,7 @@
   const X();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithMixinWithField, 68, 1)],
+      [error(diag.constConstructorWithMixinWithField, 68, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_const_super_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_const_super_test.dart
index 778f110..c3937a8 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_const_super_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_const_super_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   const B(): super();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithNonConstSuper, 52, 7)],
+      [error(diag.constConstructorWithNonConstSuper, 52, 7)],
     );
   }
 
@@ -39,7 +39,7 @@
   const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithNonConstSuper, 47, 1)],
+      [error(diag.constConstructorWithNonConstSuper, 47, 1)],
     );
   }
 
@@ -70,7 +70,7 @@
   const B.bar() : super._();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithNonConstSuper, 111, 9)],
+      [error(diag.constConstructorWithNonConstSuper, 111, 9)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
index 0801c2c..51969c2 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_non_final_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -53,7 +53,7 @@
   const A.a();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithNonFinalField, 31, 3)],
+      [error(diag.constConstructorWithNonFinalField, 31, 3)],
     );
   }
 
@@ -65,7 +65,7 @@
   const A();
 }
 ''',
-      [error(CompileTimeErrorCode.constConstructorWithNonFinalField, 31, 1)],
+      [error(diag.constConstructorWithNonFinalField, 31, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart
index dd0bb5d..44a22b6 100644
--- a/pkg/analyzer/test/src/diagnostics/const_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_deferred_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 main() {
   const a.A.b();
 }''',
-      [error(CompileTimeErrorCode.constDeferredClass, 65, 5)],
+      [error(diag.constDeferredClass, 65, 5)],
     );
   }
 
@@ -48,7 +48,7 @@
   const a.B();
 }
 ''',
-      [error(CompileTimeErrorCode.constDeferredClass, 65, 3)],
+      [error(diag.constDeferredClass, 65, 3)],
     );
   }
 
@@ -67,7 +67,7 @@
   const a.A();
 }
 ''',
-      [error(CompileTimeErrorCode.constDeferredClass, 65, 3)],
+      [error(diag.constDeferredClass, 65, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_extension_method_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_extension_method_test.dart
index b384957..41e6d98 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_extension_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_extension_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 const Object v1 = 0;
 const v2 = v1 + v1;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionMethod, 94, 7)],
+      [error(diag.constEvalExtensionMethod, 94, 7)],
     );
   }
 
@@ -39,7 +39,7 @@
 const Object v1 = 1;
 const v2 = -v1;
 ''',
-      [error(CompileTimeErrorCode.constEvalExtensionMethod, 82, 3)],
+      [error(diag.constEvalExtensionMethod, 82, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_for_element_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_for_element_test.dart
index d25ead4..e2be6df 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_for_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_for_element_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,12 +21,8 @@
 const x = [for (int i = 0; i < 3; i++) i];
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          10,
-          31,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 11, 29),
+        error(diag.constInitializedWithNonConstantValue, 10, 31),
+        error(diag.constEvalForElement, 11, 29),
       ],
     );
   }
@@ -38,12 +34,8 @@
 const x = [for(final i in set) i];
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          30,
-          23,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 31, 21),
+        error(diag.constInitializedWithNonConstantValue, 30, 23),
+        error(diag.constEvalForElement, 31, 21),
       ],
     );
   }
@@ -54,12 +46,8 @@
 const x = {for (final i in const []) i: null};
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          10,
-          35,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 11, 33),
+        error(diag.constInitializedWithNonConstantValue, 10, 35),
+        error(diag.constEvalForElement, 11, 33),
       ],
     );
   }
@@ -70,12 +58,8 @@
 const x = {if (true) for (final i in const []) i: null};
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          10,
-          45,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 21, 33),
+        error(diag.constInitializedWithNonConstantValue, 10, 45),
+        error(diag.constEvalForElement, 21, 33),
       ],
     );
   }
@@ -87,12 +71,8 @@
 const x = {for (final i in set) i};
 ''',
       [
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          30,
-          24,
-        ),
-        error(CompileTimeErrorCode.constEvalForElement, 31, 22),
+        error(diag.constInitializedWithNonConstantValue, 30, 24),
+        error(diag.constEvalForElement, 31, 22),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_method_invocation_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_method_invocation_test.dart
index 2b9eb07..4be1c2f 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_method_invocation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_method_invocation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
 }
 const a = f();
 ''',
-      [error(CompileTimeErrorCode.constEvalMethodInvocation, 34, 3)],
+      [error(diag.constEvalMethodInvocation, 34, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_primitive_equality_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_primitive_equality_test.dart
index 87ccabc..18fffa6 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_primitive_equality_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_primitive_equality_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -86,7 +86,7 @@
 const a = A();
 const b = a == 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 87, 6)],
+      [error(diag.constEvalPrimitiveEquality, 87, 6)],
     );
   }
 
@@ -101,7 +101,7 @@
 const a = A();
 const b = a == 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 76, 6)],
+      [error(diag.constEvalPrimitiveEquality, 76, 6)],
     );
   }
 
@@ -166,7 +166,7 @@
 const a = A();
 const b = a != 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 87, 6)],
+      [error(diag.constEvalPrimitiveEquality, 87, 6)],
     );
   }
 
@@ -181,7 +181,7 @@
 const a = A();
 const b = a != 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalPrimitiveEquality, 76, 6)],
+      [error(diag.constEvalPrimitiveEquality, 76, 6)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_property_access_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_property_access_test.dart
index 75deecd..eca75c6 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_property_access_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_property_access_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -16,6 +16,26 @@
 
 @reflectiveTest
 class ConstEvalPropertyAccessTest extends PubPackageResolutionTest {
+  test_constructorArgument_rhsOfLogicalOperation() async {
+    // Note: prior to the fix for https://github.com/dart-lang/sdk/issues/61761,
+    // this caused an exception to be thrown during constant evaluation.
+    await assertErrorsInCode(
+      r'''
+class C {
+  final bool x;
+  const C(this.x);
+}
+const C a = C(true);
+const C b = C(false || a.x);
+''',
+      [
+        // TODO(paulberry): this error range covers the whole subexpression
+        // `false || a.x`. Probably it's better to just cover `a.x`.
+        error(diag.constEvalPropertyAccess, 82, 12),
+      ],
+    );
+  }
+
   test_constructorFieldInitializer_fromSeparateLibrary() async {
     var lib = newFile('$testPackageLibPath/lib.dart', r'''
 class A<T> {
@@ -30,7 +50,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalPropertyAccess,
+          diag.constEvalPropertyAccess,
           29,
           9,
           contextMessages: [
@@ -59,7 +79,7 @@
       r'''
 const dynamic d = null;
 const int? c = d.length;''',
-      [error(CompileTimeErrorCode.constEvalPropertyAccess, 39, 8)],
+      [error(diag.constEvalPropertyAccess, 39, 8)],
     );
   }
 
@@ -76,7 +96,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalPropertyAccess,
+          diag.constEvalPropertyAccess,
           16,
           31,
           contextMessages: [
@@ -104,7 +124,7 @@
 
 const x = const C().t;
 ''',
-      [error(CompileTimeErrorCode.constEvalPropertyAccess, 59, 11)],
+      [error(diag.constEvalPropertyAccess, 59, 11)],
     );
   }
 
@@ -113,7 +133,7 @@
       r'''
 const int? s = null;
 const bool? c = s?.isEven;''',
-      [error(CompileTimeErrorCode.constEvalPropertyAccess, 37, 9)],
+      [error(diag.constEvalPropertyAccess, 37, 9)],
     );
   }
 
@@ -128,7 +148,7 @@
       r'''
 const List? l = [];
 const int? c = l?.length;''',
-      [error(CompileTimeErrorCode.constEvalPropertyAccess, 35, 9)],
+      [error(diag.constEvalPropertyAccess, 35, 9)],
     );
   }
 
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 5a9d0fa..aedfd56 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -30,9 +30,9 @@
 var v = const C<String>();
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 27, 1),
+        error(diag.invalidAssignment, 27, 1),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           70,
           17,
           contextMessages: [
@@ -61,7 +61,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           57,
           14,
           contextMessages: [
@@ -82,7 +82,7 @@
   test_notGeneric_int_null() async {
     var errors = [
       error(
-        CompileTimeErrorCode.constEvalThrowsException,
+        diag.constEvalThrowsException,
         57,
         13,
         contextMessages: [
@@ -118,7 +118,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           60,
           13,
           contextMessages: [
@@ -155,7 +155,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           92,
           19,
           contextMessages: [
@@ -170,7 +170,7 @@
           ],
         ),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           115,
           18,
           contextMessages: [
@@ -204,7 +204,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           104,
           21,
           contextMessages: [
@@ -219,7 +219,7 @@
           ],
         ),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           129,
           18,
           contextMessages: [
@@ -247,7 +247,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           61,
           13,
           contextMessages: [
@@ -281,7 +281,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           124,
           10,
           contextMessages: [
@@ -317,7 +317,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           84,
           10,
           contextMessages: [
@@ -344,11 +344,11 @@
 const a = const A(0);
 ''',
       [
-        error(CompileTimeErrorCode.invalidConstant, 45, 8),
-        error(CompileTimeErrorCode.constConstructorThrowsException, 45, 8),
-        error(WarningCode.deadCode, 54, 3),
+        error(diag.invalidConstant, 45, 8),
+        error(diag.constConstructorThrowsException, 45, 8),
+        error(diag.deadCode, 54, 3),
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           70,
           10,
           contextMessages: [
@@ -372,7 +372,7 @@
 const dynamic D = null;
 const C = D - 5;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 5)],
+      [error(diag.constEvalThrowsException, 34, 5)],
     );
 
     await assertErrorsInCode(
@@ -380,7 +380,7 @@
 const dynamic D = null;
 const C = 5 - D;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 5)],
+      [error(diag.constEvalThrowsException, 34, 5)],
     );
   }
 
@@ -390,7 +390,7 @@
 const dynamic D = null;
 const C = D + 5;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 5)],
+      [error(diag.constEvalThrowsException, 34, 5)],
     );
 
     await assertErrorsInCode(
@@ -398,7 +398,7 @@
 const dynamic D = null;
 const C = 5 + D;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 5)],
+      [error(diag.constEvalThrowsException, 34, 5)],
     );
   }
 
@@ -476,11 +476,11 @@
   var c = const C();
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 37, 1)],
+      [error(diag.unusedLocalVariable, 37, 1)],
     );
     var otherFileResult = await resolveFile(other);
     assertErrorsInList(otherFileResult.diagnostics, [
-      error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 97, 7),
+      error(diag.unnecessaryNullComparisonNeverNullTrue, 97, 7),
     ]);
   }
 
@@ -495,7 +495,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           11,
           3,
           contextMessages: [
@@ -525,7 +525,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           36,
           4,
           contextMessages: [
@@ -555,7 +555,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           35,
           4,
           contextMessages: [
@@ -597,12 +597,8 @@
 var x = const C();
 ''',
       [
-        error(
-          CompileTimeErrorCode.fieldInitializedInInitializerAndDeclaration,
-          39,
-          1,
-        ),
-        error(CompileTimeErrorCode.constEvalThrowsException, 56, 9),
+        error(diag.fieldInitializedInInitializerAndDeclaration, 39, 1),
+        error(diag.constEvalThrowsException, 56, 9),
       ],
     );
   }
@@ -622,12 +618,8 @@
 var x = const C(2);
 ''',
       [
-        error(
-          CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
-          40,
-          1,
-        ),
-        error(CompileTimeErrorCode.constEvalThrowsException, 54, 10),
+        error(diag.finalInitializedInDeclarationAndConstructor, 40, 1),
+        error(diag.constEvalThrowsException, 54, 10),
       ],
     );
   }
@@ -652,10 +644,10 @@
 var b2 = const bool.fromEnvironment('x', defaultValue: 1);
 ''',
       [
-        error(CompileTimeErrorCode.constEvalThrowsException, 9, 29),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 36, 1),
-        error(CompileTimeErrorCode.constEvalThrowsException, 49, 48),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 95, 1),
+        error(diag.constEvalThrowsException, 9, 29),
+        error(diag.argumentTypeNotAssignable, 36, 1),
+        error(diag.constEvalThrowsException, 49, 48),
+        error(diag.argumentTypeNotAssignable, 95, 1),
       ],
     );
   }
@@ -669,8 +661,8 @@
 var b = const bool.fromEnvironment('x', defaultValue: 1);
 ''',
       [
-        error(CompileTimeErrorCode.constEvalThrowsException, 8, 48),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 54, 1),
+        error(diag.constEvalThrowsException, 8, 48),
+        error(diag.argumentTypeNotAssignable, 54, 1),
       ],
     );
   }
@@ -712,7 +704,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           74,
           13,
           contextMessages: [
@@ -744,7 +736,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalThrowsException,
+          diag.constEvalThrowsException,
           106,
           14,
           contextMessages: [
@@ -776,8 +768,8 @@
 var s2 = const Symbol(3);
 ''',
       [
-        error(CompileTimeErrorCode.constEvalThrowsException, 9, 15),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 22, 1),
+        error(diag.constEvalThrowsException, 9, 15),
+        error(diag.argumentTypeNotAssignable, 22, 1),
       ],
     );
   }
@@ -800,7 +792,7 @@
 const dynamic D = null;
 const C = ~D;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 2)],
+      [error(diag.constEvalThrowsException, 34, 2)],
     );
   }
 
@@ -810,7 +802,7 @@
 const dynamic D = null;
 const C = -D;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 2)],
+      [error(diag.constEvalThrowsException, 34, 2)],
     );
   }
 
@@ -820,7 +812,7 @@
 const dynamic D = null;
 const C = !D;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsException, 34, 2)],
+      [error(diag.constEvalThrowsException, 34, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_throws_idbze_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_throws_idbze_test.dart
index c0cc59c..d796c2e 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_throws_idbze_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_throws_idbze_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 const C = 1 ~/ 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalThrowsIdbze, 10, 6)],
+      [error(diag.constEvalThrowsIdbze, 10, 6)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_int_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_int_test.dart
index 15006bd..3b0421f 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_int_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_int_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,8 +30,8 @@
 const b = $expr;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeBoolInt, 27, 6),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 31, 2),
+        error(diag.constEvalTypeBoolInt, 27, 6),
+        error(diag.argumentTypeNotAssignable, 31, 2),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_num_string_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_num_string_test.dart
index 0afc005..ace834b 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_num_string_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_num_string_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
 const a = A();
 const b = a == 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalTypeBoolNumString, 67, 6)],
+      [error(diag.constEvalTypeBoolNumString, 67, 6)],
     );
   }
 
@@ -57,7 +57,7 @@
 const a = A();
 const b = a != 0;
 ''',
-      [error(CompileTimeErrorCode.constEvalTypeBoolNumString, 67, 6)],
+      [error(diag.constEvalTypeBoolNumString, 67, 6)],
     );
   }
 
@@ -66,7 +66,7 @@
       r'''
 const x = '${const [2]}';
 ''',
-      [error(CompileTimeErrorCode.constEvalTypeBoolNumString, 11, 12)],
+      [error(diag.constEvalTypeBoolNumString, 11, 12)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart
index 0c3cb45..f2c403a 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_type_bool_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,8 +21,8 @@
 const c = true && '';
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeBool, 10, 10),
-        error(CompileTimeErrorCode.nonBoolOperand, 18, 2),
+        error(diag.constEvalTypeBool, 10, 10),
+        error(diag.nonBoolOperand, 18, 2),
       ],
     );
   }
@@ -32,10 +32,7 @@
       '''
 const c = (true || 0);
 ''',
-      [
-        error(WarningCode.deadCode, 16, 4),
-        error(CompileTimeErrorCode.nonBoolOperand, 19, 1),
-      ],
+      [error(diag.deadCode, 16, 4), error(diag.nonBoolOperand, 19, 1)],
     );
   }
 
@@ -45,8 +42,8 @@
 const c = false || '';
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeBool, 10, 11),
-        error(CompileTimeErrorCode.nonBoolOperand, 19, 2),
+        error(diag.constEvalTypeBool, 10, 11),
+        error(diag.nonBoolOperand, 19, 2),
       ],
     );
   }
@@ -59,8 +56,8 @@
 const int i = (1 ? 'alpha' : 'beta').length;
 ''',
       [
-        error(CompileTimeErrorCode.nonBoolCondition, 15, 1),
-        error(CompileTimeErrorCode.constEvalTypeBool, 15, 1),
+        error(diag.nonBoolCondition, 15, 1),
+        error(diag.constEvalTypeBool, 15, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_type_num_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_type_num_test.dart
index b2a8a96..59b2518 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_type_num_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_type_num_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,8 +35,8 @@
 const b = $expr;
 ''',
       [
-        error(CompileTimeErrorCode.constEvalTypeNum, 27, 6),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 31, 2),
+        error(diag.constEvalTypeNum, 27, 6),
+        error(diag.argumentTypeNotAssignable, 31, 2),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_type_string_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_type_string_test.dart
index 6cd45fd..7690ae9 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_type_string_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_type_string_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,7 +28,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constEvalTypeString,
+          diag.constEvalTypeString,
           70,
           4,
           contextMessages: [
@@ -42,8 +42,8 @@
             ),
           ],
         ),
-        error(CompileTimeErrorCode.undefinedIdentifier, 72, 1),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 72, 1),
+        error(diag.undefinedIdentifier, 72, 1),
+        error(diag.constWithNonConstantArgument, 72, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/const_field_initializer_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/const_field_initializer_not_assignable_test.dart
index 0edbe53..66fa153 100644
--- a/pkg/analyzer/test/src/diagnostics/const_field_initializer_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_field_initializer_not_assignable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,8 +34,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constConstructorFieldTypeMismatch, 11, 1),
-        error(CompileTimeErrorCode.constFieldInitializerNotAssignable, 47, 2),
+        error(diag.constConstructorFieldTypeMismatch, 11, 1),
+        error(diag.constFieldInitializerNotAssignable, 47, 2),
       ],
     );
   }
@@ -48,7 +48,7 @@
   const A() : x = '';
 }
 ''',
-      [error(CompileTimeErrorCode.constFieldInitializerNotAssignable, 43, 2)],
+      [error(diag.constFieldInitializerNotAssignable, 43, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart
index 0c67cf3..3a0d9f4 100644
--- a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,8 +31,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary,
+          diag.constInitializedWithNonConstantValueFromDeferredLibrary,
           60,
           1,
         ),
@@ -53,8 +52,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary,
+          diag.constInitializedWithNonConstantValueFromDeferredLibrary,
           60,
           1,
         ),
@@ -72,10 +70,9 @@
 const g = self.E.f;
 ''',
       [
-        error(CompileTimeErrorCode.deferredImportOfExtension, 7, 2),
+        error(diag.deferredImportOfExtension, 7, 2),
         error(
-          CompileTimeErrorCode
-              .constInitializedWithNonConstantValueFromDeferredLibrary,
+          diag.constInitializedWithNonConstantValueFromDeferredLibrary,
           97,
           1,
         ),
diff --git a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
index b9ea671c2..b8605d3 100644
--- a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,8 +24,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 15, 1),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 19, 1),
+        error(diag.unusedLocalVariable, 15, 1),
+        error(diag.constInitializedWithNonConstantValue, 19, 1),
       ],
     );
   }
@@ -39,7 +39,7 @@
   foo([int x = field]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 46, 5)],
+      [error(diag.nonConstantDefaultValue, 46, 5)],
     );
   }
 
@@ -48,7 +48,7 @@
       '''
 const a = () {};
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 10, 5)],
+      [error(diag.constInitializedWithNonConstantValue, 10, 5)],
     );
   }
 
@@ -72,7 +72,7 @@
 }
 const a = new A();
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 35, 7)],
+      [error(diag.constInitializedWithNonConstantValue, 35, 7)],
     );
   }
 
@@ -97,7 +97,7 @@
 final a = const A();
 const c = a.m;
 ''',
-      [error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 72, 1)],
+      [error(diag.constInitializedWithNonConstantValue, 72, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_instance_field_test.dart b/pkg/analyzer/test/src/diagnostics/const_instance_field_test.dart
index 1475319..47dabeb 100644
--- a/pkg/analyzer/test/src/diagnostics/const_instance_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_instance_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   const int f = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.constInstanceField, 12, 5)],
+      [error(diag.constInstanceField, 12, 5)],
     );
   }
 
@@ -33,7 +33,7 @@
   const int f = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.constInstanceField, 12, 5)],
+      [error(diag.constInstanceField, 12, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_map_key_not_primitive_equality_test.dart b/pkg/analyzer/test/src/diagnostics/const_map_key_not_primitive_equality_test.dart
index 9244268..9e49b85 100644
--- a/pkg/analyzer/test/src/diagnostics/const_map_key_not_primitive_equality_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_map_key_not_primitive_equality_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -40,7 +40,7 @@
   const {const A() : 0};
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 75, 9)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 75, 9)],
     );
   }
 
@@ -51,7 +51,7 @@
   const {double.infinity: 0};
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 18, 15)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 18, 15)],
     );
   }
 
@@ -74,7 +74,7 @@
   const {B.a : 0};
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 118, 3)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 118, 3)],
     );
   }
 
@@ -94,7 +94,7 @@
   const {const A(): 42};
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 121, 9)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 121, 9)],
     );
   }
 
@@ -115,7 +115,7 @@
   const B({A(): 0});
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 110, 3)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 110, 3)],
     );
   }
 
@@ -131,7 +131,7 @@
   (a: 0, b: const A()): 0,
 };
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 71, 20)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 71, 20)],
     );
   }
 
@@ -147,7 +147,7 @@
   (0, const A()): 0,
 };
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 71, 14)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 71, 14)],
     );
   }
 
@@ -167,7 +167,7 @@
   const {const B() : 0};
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 111, 9)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 111, 9)],
     );
   }
 
@@ -181,7 +181,7 @@
   int get hashCode => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.constMapKeyNotPrimitiveEquality, 11, 3)],
+      [error(diag.constMapKeyNotPrimitiveEquality, 11, 3)],
     );
   }
 
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 c9cc04a..916c028 100644
--- a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_not_initialized_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   static const F;
 }
 ''',
-      [error(CompileTimeErrorCode.constNotInitialized, 25, 1)],
+      [error(diag.constNotInitialized, 25, 1)],
     );
   }
 
@@ -34,7 +34,7 @@
   static const F;
 }
 ''',
-      [error(CompileTimeErrorCode.constNotInitialized, 29, 1)],
+      [error(diag.constNotInitialized, 29, 1)],
     );
   }
 
@@ -45,7 +45,7 @@
   static const F;
 }
 ''',
-      [error(CompileTimeErrorCode.constNotInitialized, 39, 1)],
+      [error(diag.constNotInitialized, 39, 1)],
     );
   }
 
@@ -57,8 +57,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(CompileTimeErrorCode.constNotInitialized, 18, 1),
+        error(diag.unusedLocalVariable, 18, 1),
+        error(diag.constNotInitialized, 18, 1),
       ],
     );
   }
@@ -68,7 +68,7 @@
       '''
 const F;
 ''',
-      [error(CompileTimeErrorCode.constNotInitialized, 6, 1)],
+      [error(diag.constNotInitialized, 6, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_set_element_not_primitive_equality_test.dart b/pkg/analyzer/test/src/diagnostics/const_set_element_not_primitive_equality_test.dart
index 33d6e12..b5d5392 100644
--- a/pkg/analyzer/test/src/diagnostics/const_set_element_not_primitive_equality_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_set_element_not_primitive_equality_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   const {A.a};
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 104, 3)],
+      [error(diag.constSetElementNotPrimitiveEquality, 104, 3)],
     );
   }
 
@@ -42,7 +42,7 @@
   const {const A()};
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 74, 9)],
+      [error(diag.constSetElementNotPrimitiveEquality, 74, 9)],
     );
   }
 
@@ -63,7 +63,7 @@
   const {B.a};
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 116, 3)],
+      [error(diag.constSetElementNotPrimitiveEquality, 116, 3)],
     );
   }
 
@@ -83,7 +83,7 @@
   print(m);
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 128, 9)],
+      [error(diag.constSetElementNotPrimitiveEquality, 128, 9)],
     );
   }
 
@@ -104,7 +104,7 @@
   const B({A()});
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 110, 3)],
+      [error(diag.constSetElementNotPrimitiveEquality, 110, 3)],
     );
   }
 
@@ -120,7 +120,7 @@
   (a: 0, b: const A()),
 };
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 71, 20)],
+      [error(diag.constSetElementNotPrimitiveEquality, 71, 20)],
     );
   }
 
@@ -136,7 +136,7 @@
   (0, const A()),
 };
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 71, 14)],
+      [error(diag.constSetElementNotPrimitiveEquality, 71, 14)],
     );
   }
 
@@ -152,7 +152,7 @@
   const [...{A()}];
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 79, 3)],
+      [error(diag.constSetElementNotPrimitiveEquality, 79, 3)],
     );
   }
 
@@ -168,7 +168,7 @@
   const {...[A()]};
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 75, 8)],
+      [error(diag.constSetElementNotPrimitiveEquality, 75, 8)],
     );
   }
 
@@ -184,7 +184,7 @@
   const {...{A()}};
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 79, 3)],
+      [error(diag.constSetElementNotPrimitiveEquality, 79, 3)],
     );
   }
 
@@ -202,7 +202,7 @@
   const {const B()};
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 109, 9)],
+      [error(diag.constSetElementNotPrimitiveEquality, 109, 9)],
     );
   }
 
@@ -216,7 +216,7 @@
   int get hashCode => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.constSetElementNotPrimitiveEquality, 11, 3)],
+      [error(diag.constSetElementNotPrimitiveEquality, 11, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart b/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart
index 2463f25..c64d5e7 100644
--- a/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 const dynamic a = 5;
 var b = const <int>[...a];
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 44, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 44, 1)],
     );
   }
 
@@ -34,7 +34,7 @@
 const dynamic a = 5;
 const x = <int>[...a];
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 40, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 40, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
 const dynamic a = <int, int>{0: 1};
 var b = const <int>[...a];
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 59, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 59, 1)],
     );
   }
 
@@ -61,7 +61,7 @@
 const dynamic a = null;
 var b = const <int>[...a];
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 47, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 47, 1)],
     );
   }
 
@@ -85,7 +85,7 @@
 const dynamic a = 5;
 var b = const <int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 44, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 44, 1)],
     );
   }
 
@@ -102,7 +102,7 @@
 const dynamic a = <int, int>{1: 2};
 var b = const <int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 59, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 59, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
 const dynamic a = null;
 var b = const <int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedListOrSet, 47, 1)],
+      [error(diag.constSpreadExpectedListOrSet, 47, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart b/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart
index 777a69d..ff8bec6 100644
--- a/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 const dynamic a = 5;
 var b = const <int, int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedMap, 49, 1)],
+      [error(diag.constSpreadExpectedMap, 49, 1)],
     );
   }
 
@@ -34,7 +34,7 @@
 const dynamic a = <int>[5];
 var b = const <int, int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedMap, 56, 1)],
+      [error(diag.constSpreadExpectedMap, 56, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
 const dynamic a = null;
 var b = const <int, int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedMap, 52, 1)],
+      [error(diag.constSpreadExpectedMap, 52, 1)],
     );
   }
 
@@ -68,7 +68,7 @@
 const dynamic a = <int>{5};
 var b = const <int, int>{...a};
 ''',
-      [error(CompileTimeErrorCode.constSpreadExpectedMap, 56, 1)],
+      [error(diag.constSpreadExpectedMap, 56, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/const_type_parameter_test.dart
index 35ef056..a5ae350 100644
--- a/pkg/analyzer/test/src/diagnostics/const_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_type_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (x case T) {}
 }
 ''',
-      [error(CompileTimeErrorCode.constTypeParameter, 28, 1)],
+      [error(diag.constTypeParameter, 28, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   if (x case const (T)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.constTypeParameter, 43, 1)],
+      [error(diag.constTypeParameter, 43, 1)],
     );
   }
 
@@ -44,7 +44,7 @@
   if (x case const (List<T>)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.constTypeParameter, 43, 7)],
+      [error(diag.constTypeParameter, 43, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_non_const_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_non_const_test.dart
index 7f8bbd5..44ceff3 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_non_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_non_const_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   const A(B());
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConst, 57, 3)],
+      [error(diag.constWithNonConst, 57, 3)],
     );
   }
 
@@ -54,7 +54,7 @@
 class B = A with M;
 var b = const B();
 ''',
-      [error(CompileTimeErrorCode.constWithNonConst, 78, 5)],
+      [error(diag.constWithNonConst, 78, 5)],
     );
   }
 
@@ -95,7 +95,7 @@
   const A(0);
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConst, 57, 5)],
+      [error(diag.constWithNonConst, 57, 5)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
@@ -131,7 +131,7 @@
   const A(0);
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConst, 38, 5)],
+      [error(diag.constWithNonConst, 38, 5)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
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 6eaf121..2362fb5 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConstantArgument, 45, 1)],
+      [error(diag.constWithNonConstantArgument, 45, 1)],
     );
   }
 
@@ -45,8 +45,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 94, 3),
-        error(CompileTimeErrorCode.undefinedIdentifier, 94, 3),
+        error(diag.constWithNonConstantArgument, 94, 3),
+        error(diag.undefinedIdentifier, 94, 3),
       ],
     );
   }
@@ -61,7 +61,7 @@
   const E(_);
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConstantArgument, 26, 1)],
+      [error(diag.constWithNonConstantArgument, 26, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
 }
 f(p) { return const A(p); }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConstantArgument, 48, 1)],
+      [error(diag.constWithNonConstantArgument, 48, 1)],
     );
   }
 
@@ -98,7 +98,7 @@
   const C(() {});
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonConstantArgument, 83, 5)],
+      [error(diag.constWithNonConstantArgument, 83, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
index d39188f..e614722 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   const lib.A();
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonType, 50, 1)],
+      [error(diag.constWithNonType, 50, 1)],
     );
   }
 
@@ -36,7 +36,7 @@
   return const A();
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonType, 32, 1)],
+      [error(diag.constWithNonType, 32, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_test.dart
index e85fc8a..f235bf4 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   const [f as void Function<T>(T, [int])];
 }
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 38, 31)],
+      [error(diag.listElementTypeNotAssignable, 38, 31)],
     );
   }
 
@@ -37,13 +37,7 @@
   void m([var fn = A<T>.new]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersConstructorTearoff, 34, 1)],
     );
   }
 
@@ -55,13 +49,7 @@
   A([this.fn = A<T>.new]);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
-          52,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersConstructorTearoff, 52, 1)],
     );
   }
 
@@ -75,7 +63,7 @@
       [
         // `A<dynamic> Function()` cannot be assigned to `A<T> Function()`, but
         // there should not be any other error reported here.
-        error(CompileTimeErrorCode.invalidAssignment, 44, 5),
+        error(diag.invalidAssignment, 44, 5),
       ],
     );
   }
@@ -90,12 +78,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 36, 1),
-        error(
-          CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
-          42,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 36, 1),
+        error(diag.constWithTypeParametersConstructorTearoff, 42, 1),
       ],
     );
   }
@@ -108,13 +92,7 @@
   final x = A<T>.new;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
-          40,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersConstructorTearoff, 40, 1)],
     );
   }
 
@@ -128,12 +106,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 36, 1),
-        error(
-          CompileTimeErrorCode.constWithTypeParametersConstructorTearoff,
-          47,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 36, 1),
+        error(diag.constWithTypeParametersConstructorTearoff, 47, 1),
       ],
     );
   }
@@ -147,7 +121,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.constWithTypeParameters, 60, 1)],
+      [error(diag.constWithTypeParameters, 60, 1)],
     );
   }
 
@@ -175,13 +149,7 @@
   const C({this.p = f});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          83,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 83, 1)],
     );
   }
 
@@ -192,13 +160,7 @@
 
 void bar<T>([void Function(T) p = f]) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          56,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 56, 1)],
     );
   }
 
@@ -211,13 +173,7 @@
   void foo([void Function(T) p = f]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          68,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 68, 1)],
     );
   }
 
@@ -228,13 +184,7 @@
 
 void bar<T>([void Function(List<T>) p = f]) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          62,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 62, 1)],
     );
   }
 
@@ -245,13 +195,7 @@
 
 void bar<T>([void Function(T Function()) p = f]) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          67,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 67, 1)],
     );
   }
 
@@ -263,13 +207,7 @@
   void m([void Function(U) fn = f<U>]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          65,
-          1,
-        ),
-      ],
+      [error(diag.constWithTypeParametersFunctionTearoff, 65, 1)],
     );
   }
 
@@ -284,12 +222,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 54, 1),
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          60,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 54, 1),
+        error(diag.constWithTypeParametersFunctionTearoff, 60, 1),
       ],
     );
   }
@@ -304,16 +238,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.constConstructorWithFieldInitializedByNonConst,
-          33,
-          5,
-        ),
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          58,
-          1,
-        ),
+        error(diag.constConstructorWithFieldInitializedByNonConst, 33, 5),
+        error(diag.constWithTypeParametersFunctionTearoff, 58, 1),
       ],
     );
   }
@@ -330,7 +256,7 @@
       [
         // An instance field is illegal, but we should not also report an
         // additional error for the type variable.
-        error(CompileTimeErrorCode.extensionDeclaresInstanceField, 63, 1),
+        error(diag.extensionDeclaresInstanceField, 63, 1),
       ],
     );
   }
@@ -355,12 +281,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 54, 1),
-        error(
-          CompileTimeErrorCode.constWithTypeParametersFunctionTearoff,
-          65,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 54, 1),
+        error(diag.constWithTypeParametersFunctionTearoff, 65, 1),
       ],
     );
   }
@@ -389,7 +311,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.constWithTypeParameters, 51, 1)],
+      [error(diag.constWithTypeParameters, 51, 1)],
     );
   }
 
@@ -403,7 +325,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.constWithTypeParameters, 56, 1)],
+      [error(diag.constWithTypeParameters, 56, 1)],
     );
   }
 
@@ -417,7 +339,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.constWithTypeParameters, 51, 1)],
+      [error(diag.constWithTypeParameters, 51, 1)],
     );
   }
 
@@ -431,7 +353,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.constWithTypeParameters, 65, 1)],
+      [error(diag.constWithTypeParameters, 65, 1)],
     );
   }
 
@@ -489,7 +411,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.constWithTypeParameters, 75, 1)],
+      [error(diag.constWithTypeParameters, 75, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
index 28c7c7b..7cbafaf 100644
--- a/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithUndefinedConstructor,
+          diag.constWithUndefinedConstructor,
           48,
           17,
           messageContains: ["class 'A'", "constructor 'noSuchConstructor'"],
@@ -46,7 +46,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithUndefinedConstructor,
+          diag.constWithUndefinedConstructor,
           56,
           17,
           messageContains: [
@@ -69,7 +69,7 @@
   return const B();
 }
 ''',
-      [error(CompileTimeErrorCode.constWithUndefinedConstructorDefault, 66, 1)],
+      [error(diag.constWithUndefinedConstructorDefault, 66, 1)],
     );
   }
 
@@ -85,7 +85,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithUndefinedConstructorDefault,
+          diag.constWithUndefinedConstructorDefault,
           51,
           1,
           messageContains: ["'A'"],
@@ -109,7 +109,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithUndefinedConstructorDefault,
+          diag.constWithUndefinedConstructorDefault,
           49,
           6,
           messageContains: ["'lib1.A'"],
@@ -129,7 +129,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.constWithUndefinedConstructor, 21, 1)],
+      [error(diag.constWithUndefinedConstructor, 21, 1)],
     );
   }
 
@@ -146,7 +146,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.constWithUndefinedConstructor, 21, 3)],
+      [error(diag.constWithUndefinedConstructor, 21, 3)],
     );
   }
 
@@ -161,7 +161,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.constWithUndefinedConstructor, 21, 3)],
+      [error(diag.constWithUndefinedConstructor, 21, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/constant_pattern_never_matches_value_type_test.dart b/pkg/analyzer/test/src/diagnostics/constant_pattern_never_matches_value_type_test.dart
index 3eb3d97..106ca77 100644
--- a/pkg/analyzer/test/src/diagnostics/constant_pattern_never_matches_value_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/constant_pattern_never_matches_value_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
   if (x case (true)) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 30, 4)],
+      [error(diag.constantPatternNeverMatchesValueType, 30, 4)],
     );
   }
 
@@ -42,7 +42,7 @@
   if (x case (true)) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 37, 4)],
+      [error(diag.constantPatternNeverMatchesValueType, 37, 4)],
     );
   }
 
@@ -69,7 +69,7 @@
   if (x case (true)) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 43, 4)],
+      [error(diag.constantPatternNeverMatchesValueType, 43, 4)],
     );
   }
 
@@ -80,7 +80,7 @@
   if (x case [true]) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 49, 4)],
+      [error(diag.constantPatternNeverMatchesValueType, 49, 4)],
     );
   }
 
@@ -103,7 +103,7 @@
   }
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 51, 4)],
+      [error(diag.constantPatternNeverMatchesValueType, 51, 4)],
     );
   }
 
@@ -184,7 +184,7 @@
   const B();
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 27, 9)],
+      [error(diag.constantPatternNeverMatchesValueType, 27, 9)],
     );
   }
 
@@ -219,7 +219,7 @@
   const B();
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 27, 14)],
+      [error(diag.constantPatternNeverMatchesValueType, 27, 14)],
     );
   }
 
@@ -258,7 +258,7 @@
   const A();
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 32, 14)],
+      [error(diag.constantPatternNeverMatchesValueType, 32, 14)],
     );
   }
 
@@ -293,7 +293,7 @@
   if (x case (0)) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 31, 1)],
+      [error(diag.constantPatternNeverMatchesValueType, 31, 1)],
     );
   }
 
@@ -316,7 +316,7 @@
   if (x case (0)) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 58, 1)],
+      [error(diag.constantPatternNeverMatchesValueType, 58, 1)],
     );
   }
 
@@ -339,7 +339,7 @@
 
 class A {}
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 42, 1)],
+      [error(diag.constantPatternNeverMatchesValueType, 42, 1)],
     );
   }
 
@@ -376,7 +376,7 @@
 
 class A {}
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 28, 1)],
+      [error(diag.constantPatternNeverMatchesValueType, 28, 1)],
     );
   }
 
@@ -387,7 +387,7 @@
   if (x case (0)) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 33, 1)],
+      [error(diag.constantPatternNeverMatchesValueType, 33, 1)],
     );
   }
 
@@ -399,8 +399,8 @@
 }
 ''',
       [
-        error(WarningCode.constantPatternNeverMatchesValueType, 42, 4),
-        error(WarningCode.deadCode, 49, 2),
+        error(diag.constantPatternNeverMatchesValueType, 42, 4),
+        error(diag.deadCode, 49, 2),
       ],
     );
   }
@@ -421,8 +421,8 @@
 }
 ''',
       [
-        error(WarningCode.constantPatternNeverMatchesValueType, 30, 4),
-        error(WarningCode.deadCode, 37, 2),
+        error(diag.constantPatternNeverMatchesValueType, 30, 4),
+        error(diag.deadCode, 37, 2),
       ],
     );
   }
@@ -443,8 +443,8 @@
 }
 ''',
       [
-        error(WarningCode.constantPatternNeverMatchesValueType, 45, 4),
-        error(WarningCode.deadCode, 51, 2),
+        error(diag.constantPatternNeverMatchesValueType, 45, 4),
+        error(diag.deadCode, 51, 2),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart b/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart
index 71bbac3..b2acf4c 100644
--- a/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/constant_pattern_with_non_constant_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -76,13 +76,7 @@
   if (x case A.a) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          60,
-          3,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 60, 3)],
     );
   }
 
@@ -295,13 +289,7 @@
   if (x case const [a]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          47,
-          1,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 47, 1)],
     );
   }
 
@@ -333,13 +321,7 @@
   if (x case a) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          38,
-          1,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 38, 1)],
     );
   }
 
@@ -413,13 +395,7 @@
   if (x case const {a: 1}) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          47,
-          1,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 47, 1)],
     );
   }
 
@@ -463,13 +439,7 @@
   if (x case const {0: a}) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 50, 1)],
     );
   }
 
@@ -535,13 +505,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          58,
-          1,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 58, 1)],
     );
   }
 
@@ -575,13 +539,7 @@
   if (x case a) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.constantPatternWithNonConstantExpression,
-          39,
-          1,
-        ),
-      ],
+      [error(diag.constantPatternWithNonConstantExpression, 39, 1)],
     );
 
     var node = findNode.singleGuardedPattern;
@@ -603,7 +561,7 @@
   if (x case foo) {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 33, 3)],
+      [error(diag.undefinedIdentifier, 33, 3)],
     );
 
     var node = findNode.singleGuardedPattern;
diff --git a/pkg/analyzer/test/src/diagnostics/continue_label_invalid_test.dart b/pkg/analyzer/test/src/diagnostics/continue_label_invalid_test.dart
index b5988f2..f3c1413 100644
--- a/pkg/analyzer/test/src/diagnostics/continue_label_invalid_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/continue_label_invalid_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,8 +28,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(CompileTimeErrorCode.continueLabelInvalid, 50, 11),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.continueLabelInvalid, 50, 11),
       ],
     );
   }
@@ -44,7 +44,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.continueLabelInvalid, 52, 11)],
+      [error(diag.continueLabelInvalid, 52, 11)],
     );
   }
 
@@ -59,7 +59,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.continueLabelInvalid, 68, 11)],
+      [error(diag.continueLabelInvalid, 68, 11)],
     );
   }
 }
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 68e33a6..1bf3946 100644
--- a/pkg/analyzer/test/src/diagnostics/could_not_infer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/could_not_infer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,28 +35,18 @@
 }
 ''',
       [
+        error(diag.notInitializedNonNullableInstanceFieldConstructor, 94, 3),
+        error(diag.notInitializedNonNullableInstanceFieldConstructor, 94, 3),
+        error(diag.couldNotInfer, 154, 3),
+        error(diag.couldNotInfer, 154, 3),
         error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          94,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          94,
-          1,
-        ),
-        error(CompileTimeErrorCode.couldNotInfer, 154, 3),
-        error(CompileTimeErrorCode.couldNotInfer, 154, 3),
-        error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           154,
           1,
           contextMessages: [message(testFile, 154, 1)],
         ),
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           154,
           1,
           contextMessages: [message(testFile, 154, 1)],
@@ -84,9 +74,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 98, 4),
-        error(WarningCode.unusedLocalVariable, 120, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 126, 3),
+        error(diag.returnOfInvalidTypeFromFunction, 98, 4),
+        error(diag.unusedLocalVariable, 120, 1),
+        error(diag.argumentTypeNotAssignable, 126, 3),
       ],
     );
   }
@@ -107,30 +97,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 93, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          101,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 117, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          125,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 142, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          150,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 163, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          171,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 93, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 101, 1),
+        error(diag.unusedLocalVariable, 117, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 125, 1),
+        error(diag.unusedLocalVariable, 142, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 150, 1),
+        error(diag.unusedLocalVariable, 163, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 171, 1),
       ],
     );
   }
@@ -141,7 +115,7 @@
 T f<T>(T t) => null;
 main() { f(<S>(S s) => s); }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 15, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 15, 4)],
     );
   }
 
@@ -154,7 +128,7 @@
   foo(x);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 40, 1)],
+      [error(diag.undefinedClass, 40, 1)],
     );
   }
 
@@ -189,7 +163,7 @@
   foo();
 }
 ''',
-      [error(CompileTimeErrorCode.couldNotInfer, 85, 3)],
+      [error(diag.couldNotInfer, 85, 3)],
     );
   }
 
@@ -205,7 +179,7 @@
   [f];
 }
 ''',
-      [error(CompileTimeErrorCode.couldNotInfer, 42, 3)],
+      [error(diag.couldNotInfer, 42, 3)],
     );
   }
 
@@ -228,7 +202,7 @@
   g(f);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 95, 1)],
+      [error(diag.argumentTypeNotAssignable, 95, 1)],
     );
   }
 
@@ -244,7 +218,7 @@
   g(a.f);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 78, 3)],
+      [error(diag.argumentTypeNotAssignable, 78, 3)],
     );
   }
 
@@ -257,7 +231,7 @@
   g(f);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 95, 1)],
+      [error(diag.argumentTypeNotAssignable, 95, 1)],
     );
   }
 
@@ -274,7 +248,7 @@
   g(C().m);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 124, 5)],
+      [error(diag.argumentTypeNotAssignable, 124, 5)],
     );
   }
 
@@ -318,8 +292,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.couldNotInfer, 92, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 92, 1),
+        error(diag.couldNotInfer, 92, 1),
+        error(diag.argumentTypeNotAssignable, 92, 1),
       ],
     );
   }
@@ -335,7 +309,7 @@
   new Foo<String>().method(42);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 104, 2)],
+      [error(diag.argumentTypeNotAssignable, 104, 2)],
     );
   }
 
@@ -357,9 +331,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.couldNotInfer, 152, 1),
-        error(CompileTimeErrorCode.couldNotInfer, 169, 5),
-        error(CompileTimeErrorCode.couldNotInfer, 190, 5),
+        error(diag.couldNotInfer, 152, 1),
+        error(diag.couldNotInfer, 169, 5),
+        error(diag.couldNotInfer, 190, 5),
       ],
     );
   }
@@ -372,7 +346,7 @@
 }
 main() { new C().f(<S>(S s) => s); }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 27, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 27, 4)],
     );
   }
 
@@ -386,7 +360,7 @@
 
 var c = C([]);
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 84, 2)],
+      [error(diag.argumentTypeNotAssignable, 84, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/creation_of_struct_or_union_test.dart b/pkg/analyzer/test/src/diagnostics/creation_of_struct_or_union_test.dart
index 0b66cf4..af1fbac 100644
--- a/pkg/analyzer/test/src/diagnostics/creation_of_struct_or_union_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/creation_of_struct_or_union_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
   A();
 }
 ''',
-      [error(FfiCode.creationOfStructOrUnion, 96, 1)],
+      [error(diag.creationOfStructOrUnion, 96, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
   A();
 }
 ''',
-      [error(FfiCode.creationOfStructOrUnion, 95, 1)],
+      [error(diag.creationOfStructOrUnion, 95, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/creation_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/creation_with_non_type_test.dart
index 5496e4d8..4a73024 100644
--- a/pkg/analyzer/test/src/diagnostics/creation_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/creation_with_non_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           34,
           9,
           messageContains: ["'nonPrefix'"],
@@ -44,7 +44,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           34,
           9,
           messageContains: ["'nonPrefix'"],
@@ -63,7 +63,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           34,
           9,
           messageContains: ["'nonPrefix'"],
@@ -82,7 +82,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           34,
           9,
           messageContains: ["'nonPrefix"],
@@ -101,7 +101,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           35,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -120,7 +120,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           35,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -139,7 +139,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           32,
           7,
           messageContains: ["'NonType"],
@@ -160,7 +160,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           70,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -181,7 +181,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           73,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -202,7 +202,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           73,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -223,7 +223,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           70,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -242,7 +242,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           32,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -260,7 +260,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           14,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -278,7 +278,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           14,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -296,7 +296,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           14,
           21,
           text: "Undefined name 'UnresolvedClass'.",
@@ -316,7 +316,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           52,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -336,7 +336,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           52,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -356,7 +356,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           52,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -376,7 +376,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           52,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -394,7 +394,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.constWithNonType,
+          diag.constWithNonType,
           14,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -412,7 +412,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           14,
           16,
           text: "Undefined name 'unresolved'.",
@@ -432,7 +432,7 @@
         error(
           // TODO(johnniwinther): This could be
           //  "Undefined prefix 'unresolved'.".
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           14,
           16,
           text: "Undefined name 'unresolved'.",
@@ -452,7 +452,7 @@
         error(
           // TODO(johnniwinther): This could be
           //  "Undefined prefix 'unresolved'.".
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           14,
           16,
           text: "Undefined name 'unresolved'.",
@@ -470,7 +470,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           14,
           16,
           text: "Undefined name 'unresolved'.",
@@ -488,12 +488,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          38,
-          5,
-          messageContains: ["'Class'"],
-        ),
+        error(diag.undefinedMethod, 38, 5, messageContains: ["'Class'"]),
       ],
     );
   }
@@ -507,12 +502,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedGetter,
-          38,
-          5,
-          messageContains: ["'Class'"],
-        ),
+        error(diag.undefinedGetter, 38, 5, messageContains: ["'Class'"]),
       ],
     );
   }
@@ -526,12 +516,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedGetter,
-          38,
-          5,
-          messageContains: ["'Class'"],
-        ),
+        error(diag.undefinedGetter, 38, 5, messageContains: ["'Class'"]),
       ],
     );
   }
@@ -545,12 +530,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          38,
-          5,
-          messageContains: ["'Class'"],
-        ),
+        error(diag.undefinedMethod, 38, 5, messageContains: ["'Class'"]),
       ],
     );
   }
@@ -573,12 +553,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          42,
-          5,
-          messageContains: ["'named"],
-        ),
+        error(diag.undefinedMethod, 42, 5, messageContains: ["'named"]),
       ],
     );
   }
@@ -592,12 +567,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          34,
-          5,
-          messageContains: ["'named'"],
-        ),
+        error(diag.undefinedMethod, 34, 5, messageContains: ["'named'"]),
       ],
     );
   }
@@ -635,12 +605,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          80,
-          5,
-          messageContains: ["'named'"],
-        ),
+        error(diag.undefinedMethod, 80, 5, messageContains: ["'named'"]),
       ],
     );
   }
@@ -656,12 +621,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          72,
-          5,
-          messageContains: ["'named'"],
-        ),
+        error(diag.undefinedMethod, 72, 5, messageContains: ["'named'"]),
       ],
     );
   }
@@ -684,7 +644,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedFunction,
+          diag.undefinedFunction,
           8,
           15,
           text: "The function 'UnresolvedClass' isn't defined.",
@@ -702,7 +662,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           8,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -720,7 +680,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           8,
           15,
           text: "Undefined name 'UnresolvedClass'.",
@@ -740,7 +700,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedFunction,
+          diag.undefinedFunction,
           46,
           15,
           text: "The function 'UnresolvedClass' isn't defined.",
@@ -760,7 +720,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedFunction,
+          diag.undefinedFunction,
           46,
           15,
           text: "The function 'UnresolvedClass' isn't defined.",
@@ -780,7 +740,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           46,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -800,7 +760,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedPrefixedName,
+          diag.undefinedPrefixedName,
           46,
           15,
           messageContains: ["'UnresolvedClass'"],
@@ -818,7 +778,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedFunction,
+          diag.undefinedFunction,
           8,
           15,
           text: "The function 'UnresolvedClass' isn't defined.",
@@ -836,7 +796,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           8,
           10,
           text: "Undefined name 'unresolved'.",
@@ -854,10 +814,10 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           8,
           10,
-          text: "Undefined name 'unresolved.Class'.",
+          text: "Undefined name 'unresolved'.",
         ),
       ],
     );
@@ -872,7 +832,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           8,
           10,
           text: "Undefined name 'unresolved'.",
@@ -890,7 +850,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           8,
           10,
           text: "Undefined name 'unresolved'.",
@@ -909,7 +869,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           32,
           9,
           messageContains: ["'nonPrefix'"],
@@ -928,7 +888,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           32,
           9,
           messageContains: ["'nonPrefix'"],
@@ -947,7 +907,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           32,
           9,
           messageContains: ["'nonPrefix'"],
@@ -966,7 +926,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           32,
           9,
           messageContains: ["nonPrefix"],
@@ -985,7 +945,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           32,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1004,7 +964,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           33,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1023,7 +983,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.prefixShadowedByLocalDeclaration,
+          diag.prefixShadowedByLocalDeclaration,
           30,
           7,
           messageContains: ["'NonType'"],
@@ -1044,7 +1004,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           68,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1065,7 +1025,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           71,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1086,7 +1046,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           71,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1107,7 +1067,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           68,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1126,7 +1086,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           30,
           7,
           text: "The name 'NonType' isn't a class.",
@@ -1144,7 +1104,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           12,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1162,7 +1122,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           12,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1180,7 +1140,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           12,
           21,
           text: "Undefined name 'UnresolvedClass'.",
@@ -1200,7 +1160,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           50,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1220,7 +1180,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           50,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1240,7 +1200,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           50,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1260,7 +1220,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           50,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1278,7 +1238,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithNonType,
+          diag.newWithNonType,
           12,
           15,
           text: "The name 'UnresolvedClass' isn't a class.",
@@ -1296,7 +1256,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           12,
           16,
           text: "Undefined name 'unresolved'.",
@@ -1314,7 +1274,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           12,
           16,
           // TODO(johnniwinther): This could be
@@ -1334,7 +1294,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           12,
           16,
           // TODO(johnniwinther): This could be
@@ -1354,7 +1314,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedIdentifier,
+          diag.undefinedIdentifier,
           12,
           16,
           text: "Undefined name 'unresolved'.",
diff --git a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart b/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
index d319407..904bc24 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_code_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 
 test() => doNotReturn() as int;
 ''',
-      [error(WarningCode.deadCode, 60, 4)],
+      [error(diag.deadCode, 60, 4)],
     );
   }
 
@@ -35,7 +35,7 @@
   true ? p.x : p.y;
 }
 ''',
-      [error(WarningCode.deadCode, 44, 3)],
+      [error(diag.deadCode, 44, 3)],
     );
   }
 
@@ -46,7 +46,7 @@
   if (true || r.b) {}
 }
 ''',
-      [error(WarningCode.deadCode, 36, 6)],
+      [error(diag.deadCode, 36, 6)],
     );
   }
 
@@ -57,7 +57,7 @@
   if (x case int() || 0) {}
 }
 ''',
-      [error(WarningCode.deadCode, 35, 4)],
+      [error(diag.deadCode, 35, 4)],
     );
   }
 
@@ -68,7 +68,7 @@
   if (x case (int() || 0) && 1) {}
 }
 ''',
-      [error(WarningCode.deadCode, 36, 4)],
+      [error(diag.deadCode, 36, 4)],
     );
   }
 
@@ -79,7 +79,7 @@
   if (x case <int>[int() || 0, 1]) {}
 }
 ''',
-      [error(WarningCode.deadCode, 45, 4)],
+      [error(diag.deadCode, 45, 4)],
     );
   }
 
@@ -92,7 +92,7 @@
   };
 }
 ''',
-      [error(WarningCode.deadCode, 50, 4)],
+      [error(diag.deadCode, 50, 4)],
     );
   }
 
@@ -108,11 +108,11 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 50, 4),
-        error(WarningCode.deadCode, 65, 10),
-        error(WarningCode.unreachableSwitchCase, 71, 2),
-        error(WarningCode.deadCode, 81, 6),
-        error(WarningCode.unreachableSwitchCase, 83, 2),
+        error(diag.deadCode, 50, 4),
+        error(diag.deadCode, 65, 10),
+        error(diag.unreachableSwitchCase, 71, 2),
+        error(diag.deadCode, 81, 6),
+        error(diag.unreachableSwitchCase, 83, 2),
       ],
     );
   }
@@ -127,7 +127,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 46, 4)],
+      [error(diag.deadCode, 46, 4)],
     );
   }
 
@@ -144,10 +144,10 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 46, 4),
-        error(WarningCode.deadCode, 56, 4),
-        error(WarningCode.unreachableSwitchCase, 56, 4),
-        error(WarningCode.deadCode, 68, 7),
+        error(diag.deadCode, 46, 4),
+        error(diag.deadCode, 56, 4),
+        error(diag.unreachableSwitchCase, 56, 4),
+        error(diag.deadCode, 68, 7),
       ],
     );
   }
@@ -165,11 +165,11 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 46, 5),
-        error(WarningCode.deadCode, 57, 4),
-        error(WarningCode.unreachableSwitchCase, 57, 4),
-        error(WarningCode.deadCode, 78, 4),
-        error(WarningCode.unreachableSwitchCase, 78, 4),
+        error(diag.deadCode, 46, 5),
+        error(diag.deadCode, 57, 4),
+        error(diag.unreachableSwitchCase, 57, 4),
+        error(diag.deadCode, 78, 4),
+        error(diag.unreachableSwitchCase, 78, 4),
       ],
     );
   }
@@ -179,10 +179,7 @@
       r'''
 f() => [for (var (i) = throw 0; true; 1) 0];
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(WarningCode.deadCode, 32, 7),
-      ],
+      [error(diag.unusedLocalVariable, 18, 1), error(diag.deadCode, 32, 7)],
     );
   }
 
@@ -193,10 +190,7 @@
   for (var (i) = throw 0; true; 1) {}
 }
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 23, 1),
-        error(WarningCode.deadCode, 37, 7),
-      ],
+      [error(diag.unusedLocalVariable, 23, 1), error(diag.deadCode, 37, 7)],
     );
   }
 
@@ -211,7 +205,7 @@
   return i;
 }
 ''',
-      [error(WarningCode.deadCode, 67, 29)],
+      [error(diag.deadCode, 67, 29)],
     );
   }
 
@@ -222,7 +216,7 @@
   [if (false) (a) = 0];
 }
 ''',
-      [error(WarningCode.deadCode, 30, 7)],
+      [error(diag.deadCode, 30, 7)],
     );
   }
 
@@ -234,8 +228,8 @@
 test() => doNotReturn() is int;
 ''',
       [
-        error(WarningCode.unnecessaryTypeCheckTrue, 43, 20),
-        error(WarningCode.deadCode, 60, 4),
+        error(diag.unnecessaryTypeCheckTrue, 43, 20),
+        error(diag.deadCode, 60, 4),
       ],
     );
   }
@@ -247,7 +241,7 @@
   _(){}
 }
 ''',
-      [error(WarningCode.deadCode, 13, 5)],
+      [error(diag.deadCode, 13, 5)],
     );
   }
 
@@ -263,7 +257,7 @@
 ''',
       [
         // No dead code.
-        error(WarningCode.unusedElement, 57, 1),
+        error(diag.unusedElement, 57, 1),
       ],
     );
   }
@@ -278,7 +272,7 @@
 ''',
       [
         // Dead range: `i]`
-        error(WarningCode.deadCode, 29, 2),
+        error(diag.deadCode, 29, 2),
       ],
     );
   }
@@ -293,7 +287,7 @@
 ''',
       [
         // Dead range: `i] = j`
-        error(WarningCode.deadCode, 36, 6),
+        error(diag.deadCode, 36, 6),
       ],
     );
   }
@@ -308,7 +302,7 @@
 ''',
       [
         // Dead range: `foo(i)`
-        error(WarningCode.deadCode, 29, 6),
+        error(diag.deadCode, 29, 6),
       ],
     );
   }
@@ -323,7 +317,7 @@
 ''',
       [
         // Dead range: `p`
-        error(WarningCode.deadCode, 22, 1),
+        error(diag.deadCode, 22, 1),
       ],
     );
   }
@@ -338,7 +332,7 @@
 ''',
       [
         // Dead range: `p = i`
-        error(WarningCode.deadCode, 29, 5),
+        error(diag.deadCode, 29, 5),
       ],
     );
   }
@@ -354,7 +348,7 @@
   if (x case A(foo: _)) {}
 }
 ''',
-      [error(WarningCode.deadCode, 84, 2)],
+      [error(diag.deadCode, 84, 2)],
     );
   }
 
@@ -365,7 +359,7 @@
 
 test() => doNotReturn.hashCode;
 ''',
-      [error(WarningCode.deadCode, 57, 9)],
+      [error(diag.deadCode, 57, 9)],
     );
   }
 
@@ -376,7 +370,7 @@
 
 test() => doNotReturn().hashCode;
 ''',
-      [error(WarningCode.deadCode, 57, 9)],
+      [error(diag.deadCode, 57, 9)],
     );
   }
 }
@@ -457,7 +451,7 @@
   assert (true);
 }
 ''',
-      [error(WarningCode.deadCode, 23, 14)],
+      [error(diag.deadCode, 23, 14)],
     );
   }
 
@@ -472,7 +466,7 @@
   assert(waldo != null, "Where's Waldo?");
 }
 ''',
-      [error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 38, 7)],
+      [error(diag.unnecessaryNullComparisonNeverNullTrue, 38, 7)],
     );
   }
 
@@ -484,7 +478,7 @@
   i?.truncate();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 28, 2)],
+      [error(diag.invalidNullAwareOperator, 28, 2)],
     );
   }
 
@@ -498,7 +492,7 @@
   static final x = [1, 2, f(), 4];
 }
 ''',
-      [error(WarningCode.deadCode, 66, 2)],
+      [error(diag.deadCode, 66, 2)],
     );
   }
 
@@ -512,7 +506,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 39, 12)],
+      [error(diag.deadCode, 39, 12)],
     );
   }
 
@@ -542,7 +536,7 @@
   A() : x = [7, throw 8, 9];
 }
 ''',
-      [error(WarningCode.deadCode, 50, 3)],
+      [error(diag.deadCode, 50, 3)],
     );
   }
 
@@ -557,7 +551,7 @@
         y = 7;
 }
 ''',
-      [error(WarningCode.deadCode, 63, 5)],
+      [error(diag.deadCode, 63, 5)],
     );
   }
 
@@ -581,7 +575,7 @@
   true ? 1 : 2;
 }
 ''',
-      [error(WarningCode.deadCode, 19, 1)],
+      [error(diag.deadCode, 19, 1)],
     );
   }
 
@@ -602,7 +596,7 @@
   true ? true : false && false;
 }
 ''',
-      [error(WarningCode.deadCode, 22, 14)],
+      [error(diag.deadCode, 22, 14)],
     );
   }
 
@@ -613,7 +607,7 @@
   false ? 1 : 2;
 }
 ''',
-      [error(WarningCode.deadCode, 16, 1)],
+      [error(diag.deadCode, 16, 1)],
     );
   }
 
@@ -634,7 +628,7 @@
   false ? false && false : true;
 }
 ''',
-      [error(WarningCode.deadCode, 16, 14)],
+      [error(diag.deadCode, 16, 14)],
     );
   }
 
@@ -645,7 +639,7 @@
   if(true) {} else {}
 }
 ''',
-      [error(WarningCode.deadCode, 25, 2)],
+      [error(diag.deadCode, 25, 2)],
     );
   }
 
@@ -666,7 +660,7 @@
   if(true) {} else {if (false) {}}
 }
 ''',
-      [error(WarningCode.deadCode, 25, 15)],
+      [error(diag.deadCode, 25, 15)],
     );
   }
 
@@ -677,7 +671,7 @@
   if(false) {}
 }
 ''',
-      [error(WarningCode.deadCode, 18, 2)],
+      [error(diag.deadCode, 18, 2)],
     );
   }
 
@@ -736,7 +730,7 @@
   if(false) {if(false) {}}
 }
 ''',
-      [error(WarningCode.deadCode, 18, 14)],
+      [error(diag.deadCode, 18, 14)],
     );
   }
 
@@ -749,7 +743,7 @@
   ];
 }
 ''',
-      [error(WarningCode.deadCode, 25, 1)],
+      [error(diag.deadCode, 25, 1)],
     );
   }
 
@@ -763,7 +757,7 @@
   ];
 }
 ''',
-      [error(WarningCode.deadCode, 35, 1)],
+      [error(diag.deadCode, 35, 1)],
     );
   }
 
@@ -774,7 +768,7 @@
   while(false) {}
 }
 ''',
-      [error(WarningCode.deadCode, 21, 2)],
+      [error(diag.deadCode, 21, 2)],
     );
   }
 
@@ -795,7 +789,7 @@
   while(false) {if(false) {}}
 }
 ''',
-      [error(WarningCode.deadCode, 21, 14)],
+      [error(diag.deadCode, 21, 14)],
     );
   }
 
@@ -807,7 +801,7 @@
   try {} catch (e) {} catch (e) {}
 }
 ''',
-      [error(WarningCode.deadCodeCatchFollowingCatch, 39, 12)],
+      [error(diag.deadCodeCatchFollowingCatch, 39, 12)],
     );
   }
 
@@ -820,7 +814,7 @@
   try {} catch (e) {} catch (e) {if(false) {}}
 }
 ''',
-      [error(WarningCode.deadCodeCatchFollowingCatch, 39, 24)],
+      [error(diag.deadCodeCatchFollowingCatch, 39, 24)],
     );
   }
 
@@ -832,8 +826,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedCatchClause, 32, 1),
-        error(WarningCode.deadCodeCatchFollowingCatch, 38, 12),
+        error(diag.unusedCatchClause, 32, 1),
+        error(diag.deadCodeCatchFollowingCatch, 38, 12),
       ],
     );
   }
@@ -847,8 +841,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedCatchClause, 32, 1),
-        error(WarningCode.deadCodeCatchFollowingCatch, 38, 24),
+        error(diag.unusedCatchClause, 32, 1),
+        error(diag.deadCodeCatchFollowingCatch, 38, 24),
       ],
     );
   }
@@ -863,9 +857,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedCatchClause, 59, 1),
-        error(WarningCode.deadCodeOnCatchSubtype, 65, 17),
-        error(WarningCode.unusedCatchClause, 77, 1),
+        error(diag.unusedCatchClause, 59, 1),
+        error(diag.deadCodeOnCatchSubtype, 65, 17),
+        error(diag.unusedCatchClause, 77, 1),
       ],
     );
   }
@@ -881,9 +875,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedCatchClause, 59, 1),
-        error(WarningCode.deadCodeOnCatchSubtype, 65, 29),
-        error(WarningCode.unusedCatchClause, 77, 1),
+        error(diag.unusedCatchClause, 59, 1),
+        error(diag.deadCodeOnCatchSubtype, 65, 29),
+        error(diag.unusedCatchClause, 77, 1),
       ],
     );
   }
@@ -898,8 +892,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedCatchClause, 59, 1),
-        error(WarningCode.unusedCatchClause, 77, 1),
+        error(diag.unusedCatchClause, 59, 1),
+        error(diag.unusedCatchClause, 77, 1),
       ],
     );
   }
@@ -912,7 +906,7 @@
   print(b);
 }
 ''',
-      [error(WarningCode.deadCode, 23, 8)],
+      [error(diag.deadCode, 23, 8)],
     );
   }
 
@@ -934,7 +928,7 @@
   print(b);
 }
 ''',
-      [error(WarningCode.deadCode, 23, 19)],
+      [error(diag.deadCode, 23, 19)],
     );
   }
 
@@ -946,7 +940,7 @@
   print(b);
 }
 ''',
-      [error(WarningCode.deadCode, 22, 7)],
+      [error(diag.deadCode, 22, 7)],
     );
   }
 
@@ -958,7 +952,7 @@
   bool b = DEBUG || true;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 38, 1)],
+      [error(diag.unusedLocalVariable, 38, 1)],
     );
   }
 
@@ -970,7 +964,7 @@
   print(b);
 }
 ''',
-      [error(WarningCode.deadCode, 22, 19)],
+      [error(diag.deadCode, 22, 19)],
     );
   }
 
@@ -991,7 +985,7 @@
   } while (c);
 }
 ''',
-      [error(WarningCode.deadCode, 52, 12)],
+      [error(diag.deadCode, 52, 12)],
     );
   }
 
@@ -1008,7 +1002,7 @@
   print('');
 }
 ''',
-      [error(WarningCode.deadCode, 69, 12)],
+      [error(diag.deadCode, 69, 12)],
     );
   }
 
@@ -1026,7 +1020,7 @@
   print('');
 }
 ''',
-      [error(WarningCode.deadCode, 85, 12)],
+      [error(diag.deadCode, 85, 12)],
     );
   }
 
@@ -1043,10 +1037,7 @@
   print('');
 }
 ''',
-      [
-        error(WarningCode.deadCode, 73, 12),
-        error(WarningCode.deadCode, 88, 10),
-      ],
+      [error(diag.deadCode, 73, 12), error(diag.deadCode, 88, 10)],
     );
   }
 
@@ -1067,10 +1058,7 @@
   print('');
 }
 ''',
-      [
-        error(WarningCode.deadCode, 104, 12),
-        error(WarningCode.deadCode, 121, 38),
-      ],
+      [error(diag.deadCode, 104, 12), error(diag.deadCode, 121, 38)],
     );
   }
 
@@ -1089,10 +1077,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.deadCode, 98, 12),
-        error(WarningCode.deadCode, 115, 14),
-      ],
+      [error(diag.deadCode, 98, 12), error(diag.deadCode, 115, 14)],
     );
   }
 
@@ -1107,10 +1092,7 @@
   print('2');
 }
 ''',
-      [
-        error(WarningCode.deadCode, 52, 12),
-        error(WarningCode.deadCode, 67, 11),
-      ],
+      [error(diag.deadCode, 52, 12), error(diag.deadCode, 67, 11)],
     );
   }
 
@@ -1124,7 +1106,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 21, 1), error(WarningCode.deadCode, 42, 2)],
+      [error(diag.deadCode, 21, 1), error(diag.deadCode, 42, 2)],
     );
   }
 
@@ -1137,7 +1119,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 21, 4)],
+      [error(diag.deadCode, 21, 4)],
     );
   }
 
@@ -1146,7 +1128,7 @@
       r'''
 f() => [for (; throw 0; 1) 0];
 ''',
-      [error(WarningCode.deadCode, 24, 1), error(WarningCode.deadCode, 27, 3)],
+      [error(diag.deadCode, 24, 1), error(diag.deadCode, 27, 3)],
     );
   }
 
@@ -1155,7 +1137,7 @@
       r'''
 f(bool Function(Object?, Object?) g) => [for (; g(throw 0, 1); 2) 0];
 ''',
-      [error(WarningCode.deadCode, 59, 10)],
+      [error(diag.deadCode, 59, 10)],
     );
   }
 
@@ -1164,10 +1146,7 @@
       r'''
 f() => [for (var i = throw 0; true; 1) 0];
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(WarningCode.deadCode, 30, 7),
-      ],
+      [error(diag.unusedLocalVariable, 17, 1), error(diag.deadCode, 30, 7)],
     );
   }
 
@@ -1176,7 +1155,7 @@
       r'''
 f() => [for (throw 0; true; 1) 0];
 ''',
-      [error(WarningCode.deadCode, 22, 7)],
+      [error(diag.deadCode, 22, 7)],
     );
   }
 
@@ -1185,7 +1164,7 @@
       r'''
 f() => [for (var i = 0;; i = i + 1) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 9)],
+      [error(diag.deadCode, 25, 9)],
     );
   }
 
@@ -1194,7 +1173,7 @@
       r'''
 f() => [for (var i = 0;; i + 1) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 5)],
+      [error(diag.deadCode, 25, 5)],
     );
   }
 
@@ -1203,7 +1182,7 @@
       r'''
 f() => [for (var i = 0;; i..sign) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 7)],
+      [error(diag.deadCode, 25, 7)],
     );
   }
 
@@ -1212,7 +1191,7 @@
       r'''
 f() => [for (var i = 0;; i > 1 ? i : i) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 13)],
+      [error(diag.deadCode, 25, 13)],
     );
   }
 
@@ -1221,7 +1200,7 @@
       r'''
 f(List<int> values) => [for (;; values[0]) throw ''];
 ''',
-      [error(WarningCode.deadCode, 32, 9)],
+      [error(diag.deadCode, 32, 9)],
     );
   }
 
@@ -1231,7 +1210,7 @@
 class C {}
 f() => [for (;; C()) throw ''];
 ''',
-      [error(WarningCode.deadCode, 27, 3)],
+      [error(diag.deadCode, 27, 3)],
     );
   }
 
@@ -1240,7 +1219,7 @@
       r'''
 f() => [for (var i = 0;; i.toString()) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 12)],
+      [error(diag.deadCode, 25, 12)],
     );
   }
 
@@ -1249,7 +1228,7 @@
       r'''
 f() => [for (var i = 0;; i++) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 3)],
+      [error(diag.deadCode, 25, 3)],
     );
   }
 
@@ -1260,7 +1239,7 @@
 
 f() => [for (;; m.Point) throw ''];
 ''',
-      [error(WarningCode.deadCode, 42, 7)],
+      [error(diag.deadCode, 42, 7)],
     );
   }
 
@@ -1269,7 +1248,7 @@
       r'''
 f() => [for (var i = 0;; ++i) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 3)],
+      [error(diag.deadCode, 25, 3)],
     );
   }
 
@@ -1278,7 +1257,7 @@
       r'''
 f() => [for (var i = 0;; (i).sign) throw ''];
 ''',
-      [error(WarningCode.deadCode, 25, 8)],
+      [error(diag.deadCode, 25, 8)],
     );
   }
 
@@ -1287,7 +1266,7 @@
       r'''
 f() => [for (;; 0, throw 1, 2) 0];
 ''',
-      [error(WarningCode.deadCode, 28, 1)],
+      [error(diag.deadCode, 28, 1)],
     );
   }
 
@@ -1298,7 +1277,7 @@
   for (; throw 0; 1) {}
 }
 ''',
-      [error(WarningCode.deadCode, 29, 1), error(WarningCode.deadCode, 32, 2)],
+      [error(diag.deadCode, 29, 1), error(diag.deadCode, 32, 2)],
     );
   }
 
@@ -1309,7 +1288,7 @@
   for (; g(throw 0, 1); 2) {}
 }
 ''',
-      [error(WarningCode.deadCode, 64, 9)],
+      [error(diag.deadCode, 64, 9)],
     );
   }
 
@@ -1320,10 +1299,7 @@
   for (var i = throw 0; true; 1) {}
 }
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 22, 1),
-        error(WarningCode.deadCode, 35, 7),
-      ],
+      [error(diag.unusedLocalVariable, 22, 1), error(diag.deadCode, 35, 7)],
     );
   }
 
@@ -1334,7 +1310,7 @@
   for (throw 0; true; 1) {}
 }
 ''',
-      [error(WarningCode.deadCode, 27, 7)],
+      [error(diag.deadCode, 27, 7)],
     );
   }
 
@@ -1347,7 +1323,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 9)],
+      [error(diag.deadCode, 30, 9)],
     );
   }
 
@@ -1360,7 +1336,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 5)],
+      [error(diag.deadCode, 30, 5)],
     );
   }
 
@@ -1373,7 +1349,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 7)],
+      [error(diag.deadCode, 30, 7)],
     );
   }
 
@@ -1386,7 +1362,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 13)],
+      [error(diag.deadCode, 30, 13)],
     );
   }
 
@@ -1399,7 +1375,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 37, 9)],
+      [error(diag.deadCode, 37, 9)],
     );
   }
 
@@ -1413,7 +1389,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 32, 3)],
+      [error(diag.deadCode, 32, 3)],
     );
   }
 
@@ -1426,7 +1402,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 12)],
+      [error(diag.deadCode, 30, 12)],
     );
   }
 
@@ -1439,7 +1415,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 3)],
+      [error(diag.deadCode, 30, 3)],
     );
   }
 
@@ -1454,7 +1430,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 47, 7)],
+      [error(diag.deadCode, 47, 7)],
     );
   }
 
@@ -1467,7 +1443,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 3)],
+      [error(diag.deadCode, 30, 3)],
     );
   }
 
@@ -1480,7 +1456,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 30, 8)],
+      [error(diag.deadCode, 30, 8)],
     );
   }
 
@@ -1491,7 +1467,7 @@
   for (;; 0, throw 1, 2) {}
 }
 ''',
-      [error(WarningCode.deadCode, 33, 1)],
+      [error(diag.deadCode, 33, 1)],
     );
   }
 
@@ -1507,7 +1483,7 @@
   2;
 }
 ''',
-      [error(WarningCode.deadCode, 61, 2)],
+      [error(diag.deadCode, 61, 2)],
     );
   }
 
@@ -1522,7 +1498,7 @@
   2;
 }
 ''',
-      [error(WarningCode.deadCode, 44, 2)],
+      [error(diag.deadCode, 44, 2)],
     );
   }
 
@@ -1531,7 +1507,7 @@
       r'''
 f() => [for (;; 1) ...[throw '', 2]];
 ''',
-      [error(WarningCode.deadCode, 16, 1), error(WarningCode.deadCode, 33, 4)],
+      [error(diag.deadCode, 16, 1), error(diag.deadCode, 33, 4)],
     );
   }
 
@@ -1540,7 +1516,7 @@
       r'''
 f() => [for (;; 1, 2) ...[throw '']];
 ''',
-      [error(WarningCode.deadCode, 16, 4)],
+      [error(diag.deadCode, 16, 4)],
     );
   }
 
@@ -1556,7 +1532,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 21, 1), error(WarningCode.deadCode, 52, 8)],
+      [error(diag.deadCode, 21, 1), error(diag.deadCode, 52, 8)],
     );
   }
 
@@ -1571,7 +1547,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 21, 4)],
+      [error(diag.deadCode, 21, 4)],
     );
   }
 
@@ -1590,7 +1566,7 @@
   3;
 }
 ''',
-      [error(WarningCode.deadCode, 57, 2)],
+      [error(diag.deadCode, 57, 2)],
     );
   }
 
@@ -1607,7 +1583,7 @@
   3;
 }
 ''',
-      [error(WarningCode.deadCode, 56, 2)],
+      [error(diag.deadCode, 56, 2)],
     );
   }
 
@@ -1625,7 +1601,7 @@
   4;
 }
 ''',
-      [error(WarningCode.deadCode, 61, 11)],
+      [error(diag.deadCode, 61, 11)],
     );
   }
 
@@ -1637,7 +1613,7 @@
   for (;;) {}
 }
 ''',
-      [error(WarningCode.deadCode, 23, 11)],
+      [error(diag.deadCode, 23, 11)],
     );
   }
 
@@ -1653,7 +1629,7 @@
   3;
 }
 ''',
-      [error(WarningCode.deadCode, 24, 12)],
+      [error(diag.deadCode, 24, 12)],
     );
   }
 
@@ -1669,7 +1645,7 @@
   3;
 }
 ''',
-      [error(WarningCode.deadCode, 41, 12)],
+      [error(diag.deadCode, 41, 12)],
     );
   }
 
@@ -1684,10 +1660,7 @@
   print(1);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 54, 3),
-        error(WarningCode.deadCode, 57, 16),
-      ],
+      [error(diag.receiverOfTypeNever, 54, 3), error(diag.deadCode, 57, 16)],
     );
   }
 
@@ -1699,10 +1672,7 @@
   print(1);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 3),
-        error(WarningCode.deadCode, 23, 16),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 3), error(diag.deadCode, 23, 16)],
     );
   }
 
@@ -1714,10 +1684,7 @@
   print(1);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 21, 16),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 21, 16)],
     );
   }
 
@@ -1728,7 +1695,7 @@
   late var _ = 0;
 }
 ''',
-      [error(WarningCode.deadCodeLateWildcardVariableInitializer, 21, 1)],
+      [error(diag.deadCodeLateWildcardVariableInitializer, 21, 1)],
     );
   }
 
@@ -1770,7 +1737,7 @@
   1;
 }
 ''',
-      [error(WarningCode.deadCode, 45, 2)],
+      [error(diag.deadCode, 45, 2)],
     );
   }
 
@@ -1784,7 +1751,7 @@
   2;
 }
 ''',
-      [error(WarningCode.deadCode, 45, 2)],
+      [error(diag.deadCode, 45, 2)],
     );
   }
 
@@ -1806,7 +1773,7 @@
   print(2);
 }
 ''',
-      [error(WarningCode.deadCode, 129, 9)],
+      [error(diag.deadCode, 129, 9)],
     );
   }
 
@@ -1822,7 +1789,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 65, 9)],
+      [error(diag.deadCode, 65, 9)],
     );
   }
 
@@ -1837,7 +1804,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 56, 9)],
+      [error(diag.deadCode, 56, 9)],
     );
   }
 
@@ -1851,7 +1818,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 33, 9)],
+      [error(diag.deadCode, 33, 9)],
     );
   }
 
@@ -1866,7 +1833,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 52, 9)],
+      [error(diag.deadCode, 52, 9)],
     );
   }
 
@@ -1880,7 +1847,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 35, 9)],
+      [error(diag.deadCode, 35, 9)],
     );
   }
 
@@ -1895,7 +1862,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 59, 9)],
+      [error(diag.deadCode, 59, 9)],
     );
   }
 
@@ -1909,7 +1876,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 36, 9)],
+      [error(diag.deadCode, 36, 9)],
     );
   }
 
@@ -1923,7 +1890,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 38, 9)],
+      [error(diag.deadCode, 38, 9)],
     );
   }
 
@@ -1939,7 +1906,7 @@
   print(1);
 }
 ''',
-      [error(WarningCode.deadCode, 62, 9)],
+      [error(diag.deadCode, 62, 9)],
     );
   }
 
@@ -1966,7 +1933,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 61, 9)],
+      [error(diag.deadCode, 61, 9)],
     );
   }
 
@@ -1979,7 +1946,7 @@
   print(2);
 }
 ''',
-      [error(WarningCode.deadCode, 30, 9)],
+      [error(diag.deadCode, 30, 9)],
     );
   }
 
@@ -1995,7 +1962,7 @@
   g();
 }
 ''',
-      [error(WarningCode.deadCode, 49, 9)],
+      [error(diag.deadCode, 49, 9)],
     );
   }
 
@@ -2010,7 +1977,7 @@
   };
 }
 ''',
-      [error(WarningCode.deadCode, 43, 9)],
+      [error(diag.deadCode, 43, 9)],
     );
   }
 
@@ -2025,7 +1992,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 52, 9)],
+      [error(diag.deadCode, 52, 9)],
     );
   }
 
@@ -2040,7 +2007,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 48, 9)],
+      [error(diag.deadCode, 48, 9)],
     );
   }
 
@@ -2053,7 +2020,7 @@
   if(false) {}
 }
 ''',
-      [error(WarningCode.deadCode, 30, 12)],
+      [error(diag.deadCode, 30, 12)],
     );
   }
 
@@ -2068,7 +2035,7 @@
   print(3);
 }
 ''',
-      [error(WarningCode.deadCode, 30, 31)],
+      [error(diag.deadCode, 30, 31)],
     );
   }
 
@@ -2081,7 +2048,7 @@
   print(2);
 }
 ''',
-      [error(WarningCode.deadCode, 41, 9)],
+      [error(diag.deadCode, 41, 9)],
     );
   }
 
@@ -2098,7 +2065,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 96, 6)],
+      [error(diag.deadCode, 96, 6)],
     );
   }
 
@@ -2117,7 +2084,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 140, 9)],
+      [error(diag.deadCode, 140, 9)],
     );
   }
 
@@ -2138,7 +2105,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 142, 8)],
+      [error(diag.deadCode, 142, 8)],
     );
   }
 
@@ -2155,7 +2122,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 96, 7)],
+      [error(diag.deadCode, 96, 7)],
     );
   }
 
@@ -2172,7 +2139,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 96, 8)],
+      [error(diag.deadCode, 96, 8)],
     );
   }
 
@@ -2189,7 +2156,7 @@
   return -1;
 }
 ''',
-      [error(WarningCode.deadCode, 111, 10)],
+      [error(diag.deadCode, 111, 10)],
     );
   }
 
@@ -2201,7 +2168,7 @@
 
 var x = [1, 2, f(), 4];
 ''',
-      [error(WarningCode.deadCode, 45, 2)],
+      [error(diag.deadCode, 45, 2)],
     );
   }
 
@@ -2219,10 +2186,7 @@
 }
 Never foo() => throw 'exception';
 ''',
-      [
-        error(WarningCode.deadCode, 32, 14),
-        error(WarningCode.deadCode, 87, 14),
-      ],
+      [error(diag.deadCode, 32, 14), error(diag.deadCode, 87, 14)],
     );
   }
 
@@ -2234,7 +2198,7 @@
   l?..[0]..length;
 }
 ''',
-      [error(WarningCode.deadCode, 30, 14)],
+      [error(diag.deadCode, 30, 14)],
     );
   }
 
@@ -2246,7 +2210,7 @@
   i?..toInt()..isEven;
 }
 ''',
-      [error(WarningCode.deadCode, 24, 18)],
+      [error(diag.deadCode, 24, 18)],
     );
   }
 
@@ -2258,7 +2222,7 @@
   i?..sign..isEven;
 }
 ''',
-      [error(WarningCode.deadCode, 24, 15)],
+      [error(diag.deadCode, 24, 15)],
     );
   }
 
@@ -2270,7 +2234,7 @@
   l?[0];
 }
 ''',
-      [error(WarningCode.deadCode, 30, 4)],
+      [error(diag.deadCode, 30, 4)],
     );
   }
 
@@ -2282,7 +2246,7 @@
   l?[0][0];
 }
 ''',
-      [error(WarningCode.deadCode, 36, 7)],
+      [error(diag.deadCode, 36, 7)],
     );
   }
 
@@ -2294,7 +2258,7 @@
   i?.truncate();
 }
 ''',
-      [error(WarningCode.deadCode, 24, 12)],
+      [error(diag.deadCode, 24, 12)],
     );
   }
 
@@ -2306,7 +2270,7 @@
   i?.truncate().truncate();
 }
 ''',
-      [error(WarningCode.deadCode, 24, 23)],
+      [error(diag.deadCode, 24, 23)],
     );
   }
 
@@ -2318,7 +2282,7 @@
   i?.truncate().sign;
 }
 ''',
-      [error(WarningCode.deadCode, 24, 17)],
+      [error(diag.deadCode, 24, 17)],
     );
   }
 
@@ -2330,7 +2294,7 @@
   (i)?.sign;
 }
 ''',
-      [error(WarningCode.deadCode, 26, 6)],
+      [error(diag.deadCode, 26, 6)],
     );
   }
 
@@ -2342,7 +2306,7 @@
   (i)?.sign.sign;
 }
 ''',
-      [error(WarningCode.deadCode, 26, 11)],
+      [error(diag.deadCode, 26, 11)],
     );
   }
 
@@ -2354,7 +2318,7 @@
   yield 1;
 }
 ''',
-      [error(WarningCode.deadCode, 38, 8)],
+      [error(diag.deadCode, 38, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart b/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
index 38d49f0..d02713c 100644
--- a/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/dead_null_aware_expression_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,10 +35,7 @@
   x ??= 0;
 }
 ''',
-      [
-        error(WarningCode.deadCode, 19, 2),
-        error(StaticWarningCode.deadNullAwareExpression, 19, 1),
-      ],
+      [error(diag.deadCode, 19, 2), error(diag.deadNullAwareExpression, 19, 1)],
     );
   }
 
@@ -57,10 +54,7 @@
   x ?? 0;
 }
 ''',
-      [
-        error(WarningCode.deadCode, 15, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 18, 1),
-      ],
+      [error(diag.deadCode, 15, 4), error(diag.deadNullAwareExpression, 18, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/default_value_in_function_type_test.dart b/pkg/analyzer/test/src/diagnostics/default_value_in_function_type_test.dart
index 9d4465a..a1dd3a6 100644
--- a/pkg/analyzer/test/src/diagnostics/default_value_in_function_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/default_value_in_function_type_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +20,7 @@
       '''
 typedef F = int Function({Map<String, String> m = const {}});
 ''',
-      [error(ParserErrorCode.defaultValueInFunctionType, 48, 1)],
+      [error(diag.defaultValueInFunctionType, 48, 1)],
     );
   }
 
@@ -33,8 +32,8 @@
 typedef F = int Function({Object m = const {1, 2: 3}});
 ''',
       [
-        error(ParserErrorCode.defaultValueInFunctionType, 35, 1),
-        error(CompileTimeErrorCode.ambiguousSetOrMapLiteralBoth, 37, 15),
+        error(diag.defaultValueInFunctionType, 35, 1),
+        error(diag.ambiguousSetOrMapLiteralBoth, 37, 15),
       ],
     );
   }
@@ -44,7 +43,7 @@
       '''
 typedef F = int Function([Map<String, String> m = const {}]);
 ''',
-      [error(ParserErrorCode.defaultValueInFunctionType, 48, 1)],
+      [error(diag.defaultValueInFunctionType, 48, 1)],
     );
   }
 
@@ -53,7 +52,7 @@
       '''
 typedef F([x = 0]);
 ''',
-      [error(ParserErrorCode.defaultValueInFunctionType, 13, 1)],
+      [error(diag.defaultValueInFunctionType, 13, 1)],
     );
   }
 
@@ -62,7 +61,7 @@
       '''
 typedef F([x = 0]);
 ''',
-      [error(ParserErrorCode.defaultValueInFunctionType, 13, 1)],
+      [error(diag.defaultValueInFunctionType, 13, 1)],
     );
   }
 
@@ -75,7 +74,7 @@
   A<void Function([int x = 42])>();
 }
 ''',
-      [error(ParserErrorCode.defaultValueInFunctionType, 51, 1)],
+      [error(diag.defaultValueInFunctionType, 51, 1)],
     );
     // The expression is resolved, even if it is invalid.
     assertType(findNode.integerLiteral('42'), 'int');
diff --git a/pkg/analyzer/test/src/diagnostics/default_value_in_redirecting_factory_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/default_value_in_redirecting_factory_constructor_test.dart
index 6824bfe..4697b58 100644
--- a/pkg/analyzer/test/src/diagnostics/default_value_in_redirecting_factory_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/default_value_in_redirecting_factory_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +27,7 @@
   B([int x = 1]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.defaultValueInRedirectingFactoryConstructor,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.defaultValueInRedirectingFactoryConstructor, 27, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/default_value_on_required_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/default_value_on_required_parameter_test.dart
index bbe8c6e..0e2336e 100644
--- a/pkg/analyzer/test/src/diagnostics/default_value_on_required_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/default_value_on_required_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
       '''
 void log({required String? message = 'no message'}) {}
 ''',
-      [error(CompileTimeErrorCode.defaultValueOnRequiredParameter, 27, 7)],
+      [error(diag.defaultValueOnRequiredParameter, 27, 7)],
     );
   }
 
@@ -49,7 +49,7 @@
   void foo({required int? a = 0});
 }
 ''',
-      [error(CompileTimeErrorCode.defaultValueOnRequiredParameter, 45, 1)],
+      [error(diag.defaultValueOnRequiredParameter, 45, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   void foo({required int? a = 0}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.defaultValueOnRequiredParameter, 36, 1)],
+      [error(diag.defaultValueOnRequiredParameter, 36, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart b/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
index fdc2d80..a9b2678 100644
--- a/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deferred_import_of_extension_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   foo.C();
 }
 ''',
-      [error(CompileTimeErrorCode.deferredImportOfExtension, 7, 10)],
+      [error(diag.deferredImportOfExtension, 7, 10)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/definitely_unassigned_late_local_variable_test.dart b/pkg/analyzer/test/src/diagnostics/definitely_unassigned_late_local_variable_test.dart
index 66a856c..be29699 100644
--- a/pkg/analyzer/test/src/diagnostics/definitely_unassigned_late_local_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/definitely_unassigned_late_local_variable_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -18,7 +18,7 @@
 class DefinitelyUnassignedLateLocalVariableTest
     extends PubPackageResolutionTest {
   DiagnosticCode get _errorCode {
-    return CompileTimeErrorCode.definitelyUnassignedLateLocalVariable;
+    return diag.definitelyUnassignedLateLocalVariable;
   }
 
   test_definitelyAssigned_after_compoundAssignment() async {
@@ -105,7 +105,7 @@
   v += 1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1), error(_errorCode, 27, 1)],
+      [error(diag.unusedLocalVariable, 22, 1), error(_errorCode, 27, 1)],
     );
   }
 
@@ -117,7 +117,7 @@
   v = 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1)],
+      [error(diag.unusedLocalVariable, 22, 1)],
     );
   }
 
@@ -141,7 +141,7 @@
   ++v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1), error(_errorCode, 29, 1)],
+      [error(diag.unusedLocalVariable, 22, 1), error(_errorCode, 29, 1)],
     );
   }
 
@@ -165,7 +165,7 @@
   v++;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 22, 1), error(_errorCode, 27, 1)],
+      [error(diag.unusedLocalVariable, 22, 1), error(_errorCode, 27, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_colon_for_default_value_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_colon_for_default_value_test.dart
index 9ea549f..ef828b4 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_colon_for_default_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_colon_for_default_value_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.
 
-import 'package:analyzer/src/dart/error/hint_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,7 +36,7 @@
   B({super.a : ''});
 }
 ''',
-      [error(HintCode.deprecatedColonForDefaultValue, 74, 1)],
+      [error(diag.deprecatedColonForDefaultValue, 74, 1)],
     );
   }
 
@@ -45,7 +45,7 @@
       '''
 void f({int x : 0}) {}
 ''',
-      [error(HintCode.deprecatedColonForDefaultValue, 14, 1)],
+      [error(diag.deprecatedColonForDefaultValue, 14, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_export_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_export_use_test.dart
index 08282f5..0972696 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_export_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_export_use_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   A;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 31, 1)],
+      [error(diag.deprecatedExportUse, 31, 1)],
     );
   }
 
@@ -59,7 +59,7 @@
   prefix.A;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 48, 1)],
+      [error(diag.deprecatedExportUse, 48, 1)],
     );
   }
 
@@ -81,7 +81,7 @@
 
 void f(A a) {}
 ''',
-      [error(WarningCode.deprecatedExportUse, 25, 1)],
+      [error(diag.deprecatedExportUse, 25, 1)],
     );
   }
 
@@ -103,7 +103,7 @@
 
 void f(prefix.A a) {}
 ''',
-      [error(WarningCode.deprecatedExportUse, 42, 1)],
+      [error(diag.deprecatedExportUse, 42, 1)],
     );
   }
 
@@ -125,7 +125,7 @@
 
 void f(A a) {}
 ''',
-      [error(WarningCode.deprecatedExportUse, 32, 1)],
+      [error(diag.deprecatedExportUse, 32, 1)],
     );
   }
 
@@ -149,7 +149,7 @@
   foo();
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 31, 3)],
+      [error(diag.deprecatedExportUse, 31, 3)],
     );
   }
 
@@ -173,7 +173,7 @@
   prefix.foo();
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 48, 3)],
+      [error(diag.deprecatedExportUse, 48, 3)],
     );
   }
 
@@ -200,7 +200,7 @@
   foo;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 31, 3)],
+      [error(diag.deprecatedExportUse, 31, 3)],
     );
   }
 
@@ -227,7 +227,7 @@
   prefix.foo;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 48, 3)],
+      [error(diag.deprecatedExportUse, 48, 3)],
     );
   }
 
@@ -261,7 +261,7 @@
   foo();
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 31, 3)],
+      [error(diag.deprecatedExportUse, 31, 3)],
     );
   }
 
@@ -288,7 +288,7 @@
   foo = 0;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 31, 3)],
+      [error(diag.deprecatedExportUse, 31, 3)],
     );
   }
 
@@ -315,7 +315,7 @@
   prefix.foo = 0;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 48, 3)],
+      [error(diag.deprecatedExportUse, 48, 3)],
     );
   }
 
@@ -339,7 +339,7 @@
   foo;
 }
 ''',
-      [error(WarningCode.deprecatedExportUse, 31, 3)],
+      [error(diag.deprecatedExportUse, 31, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_extend_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_extend_test.dart
index 9b9c8f4..54f13f8 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_extend_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_extend_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 import 'foo.dart';
 class Bar extends Foo {}
 ''',
-      [error(WarningCode.deprecatedExtend, 37, 3)],
+      [error(diag.deprecatedExtend, 37, 3)],
     );
   }
 
@@ -68,7 +68,7 @@
 import 'foo.dart';
 class Bar extends Foo {}
 ''',
-      [error(WarningCode.deprecatedExtend, 37, 3)],
+      [error(diag.deprecatedExtend, 37, 3)],
     );
   }
 
@@ -84,7 +84,7 @@
 mixin M {}
 class Bar = Foo with M;
 ''',
-      [error(WarningCode.deprecatedExtend, 42, 3)],
+      [error(diag.deprecatedExtend, 42, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_extends_function_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_extends_function_test.dart
index c966bd0..8369401 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_extends_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_extends_function_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A extends Function {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 16, 8)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 16, 8)],
     );
   }
 
@@ -30,7 +30,7 @@
 // @dart = 2.19
 class A extends Function {}
 ''',
-      [error(WarningCode.deprecatedExtendsFunction, 32, 8)],
+      [error(diag.deprecatedExtendsFunction, 32, 8)],
     );
   }
 
@@ -41,7 +41,7 @@
 typedef F = Function;
 class A extends F {}
 ''',
-      [error(WarningCode.deprecatedExtendsFunction, 54, 1)],
+      [error(diag.deprecatedExtendsFunction, 54, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
 class Function {}
 class A extends Function {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 22, 8)],
+      [error(diag.builtInIdentifierAsTypeName, 22, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_implement_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_implement_test.dart
index 8510cd5..e952b69 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_implement_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_implement_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 import 'foo.dart';
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.deprecatedImplement, 40, 3)],
+      [error(diag.deprecatedImplement, 40, 3)],
     );
   }
 
@@ -68,7 +68,7 @@
 import 'foo.dart';
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.deprecatedImplement, 40, 3)],
+      [error(diag.deprecatedImplement, 40, 3)],
     );
   }
 
@@ -84,7 +84,7 @@
 mixin M {}
 class Bar = Object with M implements Foo;
 ''',
-      [error(WarningCode.deprecatedImplement, 67, 3)],
+      [error(diag.deprecatedImplement, 67, 3)],
     );
   }
 
@@ -99,7 +99,7 @@
 import 'foo.dart';
 enum Bar implements Foo { one; }
 ''',
-      [error(WarningCode.deprecatedImplement, 39, 3)],
+      [error(diag.deprecatedImplement, 39, 3)],
     );
   }
 
@@ -122,7 +122,7 @@
 import 'foo.dart';
 mixin Bar implements Foo {}
 ''',
-      [error(WarningCode.deprecatedImplement, 40, 3)],
+      [error(diag.deprecatedImplement, 40, 3)],
     );
   }
 
@@ -137,7 +137,7 @@
 import 'foo.dart';
 mixin Bar on Foo {}
 ''',
-      [error(WarningCode.deprecatedImplement, 32, 3)],
+      [error(diag.deprecatedImplement, 32, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_implements_function_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_implements_function_test.dart
index ee36aab..34b0d3b 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_implements_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_implements_function_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,13 +20,7 @@
       '''
 class A implements Function {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          19,
-          8,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 19, 8)],
     );
   }
 
@@ -36,17 +30,9 @@
 class A implements Function, Function {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          19,
-          8,
-        ),
-        error(CompileTimeErrorCode.implementsRepeated, 29, 8),
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          29,
-          8,
-        ),
+        error(diag.finalClassImplementedOutsideOfLibrary, 19, 8),
+        error(diag.implementsRepeated, 29, 8),
+        error(diag.finalClassImplementedOutsideOfLibrary, 29, 8),
       ],
     );
   }
@@ -58,8 +44,8 @@
 class A implements Function, Function {}
 ''',
       [
-        error(WarningCode.deprecatedImplementsFunction, 35, 8),
-        error(CompileTimeErrorCode.implementsRepeated, 45, 8),
+        error(diag.deprecatedImplementsFunction, 35, 8),
+        error(diag.implementsRepeated, 45, 8),
       ],
     );
   }
@@ -70,7 +56,7 @@
 // @dart = 2.19
 class A implements Function {}
 ''',
-      [error(WarningCode.deprecatedImplementsFunction, 35, 8)],
+      [error(diag.deprecatedImplementsFunction, 35, 8)],
     );
   }
 
@@ -81,7 +67,7 @@
 typedef F = Function;
 class A implements F {}
 ''',
-      [error(WarningCode.deprecatedImplementsFunction, 57, 1)],
+      [error(diag.deprecatedImplementsFunction, 57, 1)],
     );
   }
 
@@ -91,7 +77,7 @@
 class Function {}
 class A implements Function {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 6, 8)],
+      [error(diag.builtInIdentifierAsTypeName, 6, 8)],
     );
   }
 
@@ -102,7 +88,7 @@
 mixin M {}
 class A = Object with M implements Function;
 ''',
-      [error(WarningCode.deprecatedImplementsFunction, 62, 8)],
+      [error(diag.deprecatedImplementsFunction, 62, 8)],
     );
   }
 
@@ -114,7 +100,7 @@
 typedef F = Function;
 class A = Object with M implements F;
 ''',
-      [error(WarningCode.deprecatedImplementsFunction, 84, 1)],
+      [error(diag.deprecatedImplementsFunction, 84, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_instantiate_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_instantiate_test.dart
index 06fffbe..c30fcc5 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_instantiate_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_instantiate_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 import 'foo.dart';
 var x = Foo();
 ''',
-      [error(WarningCode.deprecatedInstantiate, 27, 3)],
+      [error(diag.deprecatedInstantiate, 27, 3)],
     );
   }
 
@@ -40,7 +40,7 @@
 import 'foo.dart';
 Foo x = .new();
 ''',
-      [error(WarningCode.deprecatedInstantiate, 28, 3)],
+      [error(diag.deprecatedInstantiate, 28, 3)],
     );
   }
 
@@ -56,7 +56,7 @@
 import 'foo.dart';
 Foo x = .named();
 ''',
-      [error(WarningCode.deprecatedInstantiate, 28, 5)],
+      [error(diag.deprecatedInstantiate, 28, 5)],
     );
   }
 
@@ -77,7 +77,7 @@
   factory Bar.one() = Foo.two;
 }
 ''',
-      [error(WarningCode.deprecatedInstantiate, 62, 7)],
+      [error(diag.deprecatedInstantiate, 62, 7)],
     );
   }
 
@@ -98,7 +98,7 @@
   factory Bar.one() = Foo;
 }
 ''',
-      [error(WarningCode.deprecatedInstantiate, 62, 3)],
+      [error(diag.deprecatedInstantiate, 62, 3)],
     );
   }
 
@@ -142,7 +142,7 @@
 import 'foo.dart';
 var x = Foo.new;
 ''',
-      [error(WarningCode.deprecatedInstantiate, 27, 7)],
+      [error(diag.deprecatedInstantiate, 27, 7)],
     );
   }
 
@@ -171,7 +171,7 @@
 import 'foo.dart';
 Foo2 x = .new();
 ''',
-      [error(WarningCode.deprecatedInstantiate, 29, 3)],
+      [error(diag.deprecatedInstantiate, 29, 3)],
     );
   }
 
@@ -200,7 +200,7 @@
 import 'foo.dart';
 var x = Foo();
 ''',
-      [error(WarningCode.deprecatedInstantiate, 27, 3)],
+      [error(diag.deprecatedInstantiate, 27, 3)],
     );
   }
 
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 64697a2..c488deb 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -3,8 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -34,7 +33,7 @@
 
 void f(A a) {}
 ''',
-      [error(HintCode.deprecatedMemberUse, 41, 1)],
+      [error(diag.deprecatedMemberUse, 41, 1)],
     );
   }
 
@@ -52,7 +51,7 @@
 
 void f(A a) {}
 ''',
-      [error(HintCode.deprecatedMemberUse, 37, 1)],
+      [error(diag.deprecatedMemberUse, 37, 1)],
     );
   }
 }
@@ -109,7 +108,7 @@
 
 void f(A a) {}
 ''',
-      [error(HintCode.deprecatedMemberUse, 37, 1)],
+      [error(diag.deprecatedMemberUse, 37, 1)],
     );
   }
 
@@ -165,7 +164,7 @@
 
 void f(A a) {}
 ''',
-      [error(HintCode.deprecatedMemberUse, 37, 1)],
+      [error(diag.deprecatedMemberUse, 37, 1)],
     );
   }
 
@@ -189,7 +188,7 @@
 
 void f(A a) {}
 ''',
-      [error(HintCode.deprecatedMemberUse, 37, 1)],
+      [error(diag.deprecatedMemberUse, 37, 1)],
     );
   }
 }
@@ -249,7 +248,7 @@
   x += 2;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -266,7 +265,7 @@
   x += 2;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -297,7 +296,7 @@
   x = 0;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -314,7 +313,7 @@
   x = 0;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -331,7 +330,7 @@
   a();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 45, 3)],
+      [error(diag.deprecatedMemberUse, 45, 3)],
     );
   }
 
@@ -344,7 +343,7 @@
       code: r'''
 void f(A a) {}
 ''',
-      [error(HintCode.deprecatedMemberUse, 36, 1)],
+      [error(diag.deprecatedMemberUse, 36, 1)],
     );
   }
 
@@ -389,7 +388,7 @@
   a += b;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 45, 6)],
+      [error(diag.deprecatedMemberUse, 45, 6)],
     );
   }
 
@@ -408,7 +407,7 @@
     _ => 7,
   };
 ''',
-      [error(HintCode.deprecatedMemberUse, 69, 3)],
+      [error(diag.deprecatedMemberUse, 69, 3)],
     );
   }
 
@@ -427,7 +426,7 @@
     _ => 7,
   };
 ''',
-      [error(HintCode.deprecatedMemberUse, 74, 3)],
+      [error(diag.deprecatedMemberUse, 74, 3)],
     );
   }
 
@@ -449,9 +448,9 @@
 }
 ''',
       [
-        error(HintCode.deprecatedMemberUse, 43, 1),
-        error(WarningCode.unusedLocalVariable, 45, 1),
-        error(HintCode.deprecatedMemberUse, 50, 3),
+        error(diag.deprecatedMemberUse, 43, 1),
+        error(diag.unusedLocalVariable, 45, 1),
+        error(diag.deprecatedMemberUse, 50, 3),
       ],
     );
   }
@@ -473,8 +472,8 @@
 }
 ''',
       [
-        error(HintCode.deprecatedMemberUse, 43, 1),
-        error(WarningCode.unusedLocalVariable, 45, 1),
+        error(diag.deprecatedMemberUse, 43, 1),
+        error(diag.unusedLocalVariable, 45, 1),
       ],
     );
   }
@@ -496,8 +495,8 @@
 }
 ''',
       [
-        error(HintCode.deprecatedMemberUse, 43, 1),
-        error(WarningCode.unusedLocalVariable, 45, 1),
+        error(diag.deprecatedMemberUse, 43, 1),
+        error(diag.unusedLocalVariable, 45, 1),
       ],
     );
   }
@@ -516,9 +515,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 39, 1),
+        error(diag.unusedLocalVariable, 39, 1),
         error(
-          HintCode.deprecatedMemberUse,
+          diag.deprecatedMemberUse,
           44,
           5,
           messageContains: ["'A.named' is deprecated and shouldn't be used."],
@@ -544,8 +543,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 45, 1),
-        error(HintCode.deprecatedMemberUse, 50, 3),
+        error(diag.unusedLocalVariable, 45, 1),
+        error(diag.deprecatedMemberUse, 50, 3),
       ],
     );
   }
@@ -567,8 +566,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 45, 1),
-        error(HintCode.deprecatedMemberUse, 50, 1),
+        error(diag.unusedLocalVariable, 45, 1),
+        error(diag.deprecatedMemberUse, 50, 1),
       ],
     );
   }
@@ -583,7 +582,7 @@
       '''
 export 'package:aaa/a.dart';
 ''',
-      [error(HintCode.deprecatedMemberUse, 0, 28)],
+      [error(diag.deprecatedMemberUse, 0, 28)],
     );
   }
 
@@ -611,7 +610,7 @@
   E(0).foo;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -631,7 +630,7 @@
   a.foo;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 3)],
+      [error(diag.deprecatedMemberUse, 48, 3)],
     );
   }
 
@@ -651,7 +650,7 @@
   a.foo = 0;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 3)],
+      [error(diag.deprecatedMemberUse, 48, 3)],
     );
   }
 
@@ -700,7 +699,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUse,
+          diag.deprecatedMemberUse,
           24,
           28,
           messageContains: ['package:aaa/a.dart'],
@@ -727,9 +726,9 @@
 const z = C(x: '');
 ''',
       [
-        error(CompileTimeErrorCode.finalNotInitializedConstructor1, 53, 1),
-        error(ParserErrorCode.missingIdentifier, 82, 1),
-        error(ParserErrorCode.expectedToken, 82, 1),
+        error(diag.finalNotInitializedConstructor1, 53, 1),
+        error(diag.missingIdentifier, 82, 1),
+        error(diag.expectedToken, 82, 1),
       ],
     );
   }
@@ -1002,7 +1001,7 @@
   return a[1];
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 52, 4)],
+      [error(diag.deprecatedMemberUse, 52, 4)],
     );
   }
 
@@ -1021,7 +1020,7 @@
   }
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 68, 1)],
+      [error(diag.deprecatedMemberUse, 68, 1)],
     );
   }
 
@@ -1038,7 +1037,7 @@
   }
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 67, 1)],
+      [error(diag.deprecatedMemberUse, 67, 1)],
     );
   }
 
@@ -1059,7 +1058,7 @@
   A();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 43, 1)],
+      [error(diag.deprecatedMemberUse, 43, 1)],
     );
   }
 
@@ -1079,7 +1078,7 @@
   A();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 43, 1)],
+      [error(diag.deprecatedMemberUse, 43, 1)],
     );
   }
 
@@ -1102,7 +1101,7 @@
       [
         // https://github.com/dart-lang/linter/issues/4752
         // Highlights `A`.
-        error(HintCode.deprecatedMemberUse, 43, 1),
+        error(diag.deprecatedMemberUse, 43, 1),
       ],
     );
   }
@@ -1122,7 +1121,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUse,
+          diag.deprecatedMemberUse,
           48,
           7,
           messageContains: ["'A.named' is deprecated and shouldn't be used."],
@@ -1147,7 +1146,7 @@
   A();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 43, 1)],
+      [error(diag.deprecatedMemberUse, 43, 1)],
     );
   }
 
@@ -1164,7 +1163,7 @@
   return new A(1);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 1)],
+      [error(diag.deprecatedMemberUse, 48, 1)],
     );
   }
 
@@ -1184,7 +1183,7 @@
   a.foo();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 3)],
+      [error(diag.deprecatedMemberUse, 48, 3)],
     );
   }
 
@@ -1197,7 +1196,7 @@
       code: r'''
 var x = f();
 ''',
-      [error(HintCode.deprecatedMemberUse, 37, 1)],
+      [error(diag.deprecatedMemberUse, 37, 1)],
     );
   }
 
@@ -1212,7 +1211,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUseWithMessage,
+          diag.deprecatedMemberUseWithMessage,
           37,
           1,
           text: "'f' is deprecated and shouldn't be used. 0.9.",
@@ -1232,7 +1231,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUseWithMessage,
+          diag.deprecatedMemberUseWithMessage,
           37,
           1,
           text: "'f' is deprecated and shouldn't be used. 0.9.",
@@ -1252,7 +1251,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUseWithMessage,
+          diag.deprecatedMemberUseWithMessage,
           37,
           1,
           text: "'f' is deprecated and shouldn't be used. Really!",
@@ -1272,7 +1271,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUse,
+          diag.deprecatedMemberUse,
           37,
           1,
           text: "'f' is deprecated and shouldn't be used.",
@@ -1292,7 +1291,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUseWithMessage,
+          diag.deprecatedMemberUseWithMessage,
           37,
           1,
           text: "'f' is deprecated and shouldn't be used. Are you sure?",
@@ -1384,7 +1383,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUseWithMessage,
+          diag.deprecatedMemberUseWithMessage,
           48,
           3,
           text: "'foo' is deprecated and shouldn't be used. 0.9.",
@@ -1418,13 +1417,9 @@
 var z = C(x: '');
 ''',
       [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          21,
-          5,
-        ),
-        error(ParserErrorCode.missingIdentifier, 26, 1),
-        error(CompileTimeErrorCode.undefinedNamedParameter, 42, 1),
+        error(diag.initializingFormalForNonExistentField, 21, 5),
+        error(diag.missingIdentifier, 26, 1),
+        error(diag.undefinedNamedParameter, 42, 1),
       ],
     );
   }
@@ -1442,7 +1437,7 @@
   return a + b;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 52, 5)],
+      [error(diag.deprecatedMemberUse, 52, 5)],
     );
   }
 
@@ -1454,7 +1449,7 @@
       code: r'''
 void g() => f(x: 1);
 ''',
-      [error(HintCode.deprecatedMemberUse, 43, 1)],
+      [error(diag.deprecatedMemberUse, 43, 1)],
     );
   }
 
@@ -1502,7 +1497,7 @@
   C({B this.a = instance});
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 57, 1)],
+      [error(diag.deprecatedMemberUse, 57, 1)],
     );
   }
 
@@ -1561,7 +1556,7 @@
   foo(a: 0);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 47, 1)],
+      [error(diag.deprecatedMemberUse, 47, 1)],
     );
   }
 
@@ -1580,7 +1575,7 @@
   a.foo(a: 0);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 52, 1)],
+      [error(diag.deprecatedMemberUse, 52, 1)],
     );
   }
 
@@ -1596,7 +1591,7 @@
   a.foo(0);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 51, 1)],
+      [error(diag.deprecatedMemberUse, 51, 1)],
     );
   }
 
@@ -1662,7 +1657,7 @@
   B() : super(7);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 64, 1)],
+      [error(diag.deprecatedMemberUse, 64, 1)],
     );
   }
 
@@ -1681,7 +1676,7 @@
   B() : super(p: 7);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 64, 1)],
+      [error(diag.deprecatedMemberUse, 64, 1)],
     );
   }
 
@@ -1700,7 +1695,7 @@
   B([super.p]);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 55, 7)],
+      [error(diag.deprecatedMemberUse, 55, 7)],
     );
   }
 
@@ -1735,7 +1730,7 @@
   B([super.p]) : super.named();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 55, 7)],
+      [error(diag.deprecatedMemberUse, 55, 7)],
     );
   }
 
@@ -1754,7 +1749,7 @@
   B({super.p});
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 55, 7)],
+      [error(diag.deprecatedMemberUse, 55, 7)],
     );
   }
 
@@ -1771,7 +1766,7 @@
   x++;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -1803,7 +1798,7 @@
   x++;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -1820,7 +1815,7 @@
   A.foo;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 44, 3)],
+      [error(diag.deprecatedMemberUse, 44, 3)],
     );
   }
 
@@ -1837,7 +1832,7 @@
   A.foo;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -1854,7 +1849,7 @@
   ++x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 44, 1)],
+      [error(diag.deprecatedMemberUse, 44, 1)],
     );
   }
 
@@ -1871,7 +1866,7 @@
   ++x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 44, 1)],
+      [error(diag.deprecatedMemberUse, 44, 1)],
     );
   }
 
@@ -1890,7 +1885,7 @@
   }
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 74, 3)],
+      [error(diag.deprecatedMemberUse, 74, 3)],
     );
   }
 
@@ -1908,7 +1903,7 @@
   factory A.two() = B;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 59, 1)],
+      [error(diag.deprecatedMemberUse, 59, 1)],
     );
   }
 
@@ -1925,7 +1920,7 @@
   factory A.two([int? p]) = B;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 56, 6)],
+      [error(diag.deprecatedMemberUse, 56, 6)],
     );
   }
 
@@ -1974,7 +1969,7 @@
   factory A.two([void p()?]) = B;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 56, 9)],
+      [error(diag.deprecatedMemberUse, 56, 9)],
     );
   }
 
@@ -1991,7 +1986,7 @@
   factory A.two({int? p}) = B;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 56, 6)],
+      [error(diag.deprecatedMemberUse, 56, 6)],
     );
   }
 
@@ -2020,7 +2015,7 @@
   a.foo = 0;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 3)],
+      [error(diag.deprecatedMemberUse, 48, 3)],
     );
   }
 
@@ -2034,7 +2029,7 @@
 // ignore: unused_import
 import '$externalLibUri' show A;
 ''',
-      [error(HintCode.deprecatedMemberUse, 58, 1)],
+      [error(diag.deprecatedMemberUse, 58, 1)],
     );
   }
 
@@ -2069,7 +2064,7 @@
   B();
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 51, 4)],
+      [error(diag.deprecatedMemberUse, 51, 4)],
     );
   }
 
@@ -2088,7 +2083,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUse,
+          diag.deprecatedMemberUse,
           57,
           13,
           text: "'A.named' is deprecated and shouldn't be used.",
@@ -2130,7 +2125,7 @@
 ''',
       [
         error(
-          HintCode.deprecatedMemberUse,
+          diag.deprecatedMemberUse,
           57,
           7,
           text: "'A' is deprecated and shouldn't be used.",
@@ -2150,7 +2145,7 @@
   print(x);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 1)],
+      [error(diag.deprecatedMemberUse, 48, 1)],
     );
   }
 
@@ -2165,7 +2160,7 @@
   a = x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 51, 1)],
+      [error(diag.deprecatedMemberUse, 51, 1)],
     );
   }
 
@@ -2180,7 +2175,7 @@
   x + 1;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -2196,7 +2191,7 @@
   A() : f = x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 66, 1)],
+      [error(diag.deprecatedMemberUse, 66, 1)],
     );
   }
 
@@ -2209,7 +2204,7 @@
       code: r'''
 int f() => x;
 ''',
-      [error(HintCode.deprecatedMemberUse, 40, 1)],
+      [error(diag.deprecatedMemberUse, 40, 1)],
     );
   }
 
@@ -2224,7 +2219,7 @@
   x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 42, 1)],
+      [error(diag.deprecatedMemberUse, 42, 1)],
     );
   }
 
@@ -2239,7 +2234,7 @@
   [for (;x;) 0];
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 49, 1)],
+      [error(diag.deprecatedMemberUse, 49, 1)],
     );
   }
 
@@ -2254,7 +2249,7 @@
   for (;x;) {}
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 1)],
+      [error(diag.deprecatedMemberUse, 48, 1)],
     );
   }
 
@@ -2269,7 +2264,7 @@
   [if (x) 0];
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 47, 1)],
+      [error(diag.deprecatedMemberUse, 47, 1)],
     );
   }
 
@@ -2284,7 +2279,7 @@
   if (x) {}
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 46, 1)],
+      [error(diag.deprecatedMemberUse, 46, 1)],
     );
   }
 
@@ -2299,7 +2294,7 @@
   [x];
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 43, 1)],
+      [error(diag.deprecatedMemberUse, 43, 1)],
     );
   }
 
@@ -2315,8 +2310,8 @@
 }
 ''',
       [
-        error(HintCode.deprecatedMemberUse, 47, 1),
-        error(HintCode.deprecatedMemberUse, 50, 1),
+        error(diag.deprecatedMemberUse, 47, 1),
+        error(diag.deprecatedMemberUse, 50, 1),
       ],
     );
   }
@@ -2333,7 +2328,7 @@
   g(a: x);
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 70, 1)],
+      [error(diag.deprecatedMemberUse, 70, 1)],
     );
   }
 
@@ -2348,7 +2343,7 @@
   return x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 48, 1)],
+      [error(diag.deprecatedMemberUse, 48, 1)],
     );
   }
 
@@ -2363,7 +2358,7 @@
   ({x});
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 44, 1)],
+      [error(diag.deprecatedMemberUse, 44, 1)],
     );
   }
 
@@ -2378,7 +2373,7 @@
   [...x];
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 46, 1)],
+      [error(diag.deprecatedMemberUse, 46, 1)],
     );
   }
 
@@ -2396,7 +2391,7 @@
   }
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 69, 1)],
+      [error(diag.deprecatedMemberUse, 69, 1)],
     );
   }
 
@@ -2416,7 +2411,7 @@
   }
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 85, 1)],
+      [error(diag.deprecatedMemberUse, 85, 1)],
     );
   }
 
@@ -2431,7 +2426,7 @@
   switch (x) {}
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 50, 1)],
+      [error(diag.deprecatedMemberUse, 50, 1)],
     );
   }
 
@@ -2448,7 +2443,7 @@
   switch (x) {}
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 66, 1)],
+      [error(diag.deprecatedMemberUse, 66, 1)],
     );
   }
 
@@ -2463,7 +2458,7 @@
   -x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 43, 1)],
+      [error(diag.deprecatedMemberUse, 43, 1)],
     );
   }
 
@@ -2479,7 +2474,7 @@
   var v = x;
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 85, 1)],
+      [error(diag.deprecatedMemberUse, 85, 1)],
     );
   }
 
@@ -2494,7 +2489,7 @@
   while (x) {}
 }
 ''',
-      [error(HintCode.deprecatedMemberUse, 49, 1)],
+      [error(diag.deprecatedMemberUse, 49, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_mixin_function_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_mixin_function_test.dart
index b37b87b..f940e4c 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_mixin_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_mixin_function_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A extends Object with Function {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 28, 8)],
+      [error(diag.classUsedAsMixin, 28, 8)],
     );
   }
 
@@ -30,7 +30,7 @@
 // @dart = 2.19
 class A extends Object with Function {}
 ''',
-      [error(WarningCode.deprecatedMixinFunction, 44, 8)],
+      [error(diag.deprecatedMixinFunction, 44, 8)],
     );
   }
 
@@ -41,7 +41,7 @@
 typedef F = Function;
 class A extends Object with F {}
 ''',
-      [error(WarningCode.deprecatedMixinFunction, 66, 1)],
+      [error(diag.deprecatedMixinFunction, 66, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
 mixin Function {}
 class A extends Object with Function {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 6, 8)],
+      [error(diag.builtInIdentifierAsTypeName, 6, 8)],
     );
   }
 
@@ -62,7 +62,7 @@
 mixin Function {}
 class A extends Object with Function {}
 ''',
-      [error(CompileTimeErrorCode.builtInIdentifierAsTypeName, 22, 8)],
+      [error(diag.builtInIdentifierAsTypeName, 22, 8)],
     );
   }
 
@@ -72,7 +72,7 @@
 // @dart = 2.19
 class A = Object with Function;
 ''',
-      [error(WarningCode.deprecatedMixinFunction, 38, 8)],
+      [error(diag.deprecatedMixinFunction, 38, 8)],
     );
   }
 
@@ -83,7 +83,7 @@
 typedef F = Function;
 class A = Object with F;
 ''',
-      [error(WarningCode.deprecatedMixinFunction, 60, 1)],
+      [error(diag.deprecatedMixinFunction, 60, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_mixin_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_mixin_test.dart
index 5363587..7839632 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_mixin_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_mixin_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 import 'foo.dart';
 class Bar with Foo {}
 ''',
-      [error(WarningCode.deprecatedMixin, 34, 3)],
+      [error(diag.deprecatedMixin, 34, 3)],
     );
   }
 
@@ -43,7 +43,7 @@
 import 'foo.dart';
 class Bar with Foo {}
 ''',
-      [error(WarningCode.deprecatedMixin, 34, 3)],
+      [error(diag.deprecatedMixin, 34, 3)],
     );
   }
 
@@ -58,7 +58,7 @@
 import 'foo.dart';
 class Bar with Foo {}
 ''',
-      [error(WarningCode.deprecatedMixin, 34, 3)],
+      [error(diag.deprecatedMixin, 34, 3)],
     );
   }
 
@@ -73,7 +73,7 @@
 import 'foo.dart';
 class Bar = Object with Foo;
 ''',
-      [error(WarningCode.deprecatedMixin, 43, 3)],
+      [error(diag.deprecatedMixin, 43, 3)],
     );
   }
 
@@ -90,7 +90,7 @@
   one, two;
 }
 ''',
-      [error(WarningCode.deprecatedMixin, 33, 3)],
+      [error(diag.deprecatedMixin, 33, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_optional_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_optional_test.dart
index 8d8f43e..cd11569 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_optional_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_optional_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -154,7 +154,7 @@
   f();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 57, 1)],
+      [error(diag.deprecatedOptional, 57, 1)],
     );
   }
 
@@ -169,7 +169,7 @@
   return .m();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 85, 1)],
+      [error(diag.deprecatedOptional, 85, 1)],
     );
   }
 
@@ -184,7 +184,7 @@
   return .new();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 69, 3)],
+      [error(diag.deprecatedOptional, 69, 3)],
     );
   }
 
@@ -199,7 +199,7 @@
   D();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 73, 1)],
+      [error(diag.deprecatedOptional, 73, 1)],
     );
   }
 
@@ -214,7 +214,7 @@
   D();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 73, 1)],
+      [error(diag.deprecatedOptional, 73, 1)],
     );
   }
 
@@ -229,7 +229,7 @@
   C();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 64, 1)],
+      [error(diag.deprecatedOptional, 64, 1)],
     );
   }
 
@@ -244,7 +244,7 @@
   c.m();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 76, 1)],
+      [error(diag.deprecatedOptional, 76, 1)],
     );
   }
 
@@ -257,7 +257,7 @@
   f();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 57, 1)],
+      [error(diag.deprecatedOptional, 57, 1)],
     );
   }
 
@@ -286,7 +286,7 @@
   C.two() : this();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 60, 4)],
+      [error(diag.deprecatedOptional, 60, 4)],
     );
   }
 
@@ -306,7 +306,7 @@
   C.three() : this.two();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 60, 4)],
+      [error(diag.deprecatedOptional, 60, 4)],
     );
   }
 
@@ -318,7 +318,7 @@
   C.two() : this.one();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 69, 3)],
+      [error(diag.deprecatedOptional, 69, 3)],
     );
   }
 
@@ -334,7 +334,7 @@
   D({@Deprecated.optional() int? p});
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 27, 5)],
+      [error(diag.deprecatedOptional, 27, 5)],
     );
   }
 
@@ -350,7 +350,7 @@
   D([@Deprecated.optional() int? p]);
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 27, 5)],
+      [error(diag.deprecatedOptional, 27, 5)],
     );
   }
 
@@ -379,7 +379,7 @@
   E({@Deprecated.optional() int? p});
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 84, 5)],
+      [error(diag.deprecatedOptional, 84, 5)],
     );
   }
 
@@ -394,7 +394,7 @@
   D() : super();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 79, 5)],
+      [error(diag.deprecatedOptional, 79, 5)],
     );
   }
 
@@ -419,7 +419,7 @@
   E() : super();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 79, 5)],
+      [error(diag.deprecatedOptional, 79, 5)],
     );
   }
 
@@ -434,7 +434,7 @@
   D() : super();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 79, 5)],
+      [error(diag.deprecatedOptional, 79, 5)],
     );
   }
 
@@ -449,7 +449,7 @@
   D() : super.named();
 }
 ''',
-      [error(WarningCode.deprecatedOptional, 91, 5)],
+      [error(diag.deprecatedOptional, 91, 5)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_subclass_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_subclass_test.dart
index 057e12a..b461435 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_subclass_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_subclass_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 import 'foo.dart';
 enum Bar implements Foo { one; }
 ''',
-      [error(WarningCode.deprecatedSubclass, 39, 3)],
+      [error(diag.deprecatedSubclass, 39, 3)],
     );
   }
 
@@ -41,7 +41,7 @@
 import 'foo.dart';
 class Bar extends Foo {}
 ''',
-      [error(WarningCode.deprecatedSubclass, 37, 3)],
+      [error(diag.deprecatedSubclass, 37, 3)],
     );
   }
 
@@ -56,7 +56,7 @@
 import 'foo.dart';
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.deprecatedSubclass, 40, 3)],
+      [error(diag.deprecatedSubclass, 40, 3)],
     );
   }
 
@@ -71,7 +71,7 @@
 import 'foo.dart';
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.deprecatedSubclass, 40, 3)],
+      [error(diag.deprecatedSubclass, 40, 3)],
     );
   }
 
@@ -96,7 +96,7 @@
 import 'foo.dart';
 class Bar extends Object with Foo {}
 ''',
-      [error(WarningCode.deprecatedSubclass, 65, 3)],
+      [error(diag.deprecatedSubclass, 65, 3)],
     );
   }
 
@@ -111,7 +111,7 @@
 import 'foo.dart';
 mixin Bar implements Foo {}
 ''',
-      [error(WarningCode.deprecatedSubclass, 40, 3)],
+      [error(diag.deprecatedSubclass, 40, 3)],
     );
   }
 
@@ -126,7 +126,7 @@
 import 'foo.dart';
 mixin Bar on Foo {}
 ''',
-      [error(WarningCode.deprecatedSubclass, 32, 3)],
+      [error(diag.deprecatedSubclass, 32, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/doc_directive_argument_wrong_format_test.dart b/pkg/analyzer/test/src/diagnostics/doc_directive_argument_wrong_format_test.dart
index 6304a8a..f78e639 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_directive_argument_wrong_format_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_directive_argument_wrong_format_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// {@animation 600 nan http://google.com}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveArgumentWrongFormat, 20, 3)],
+      [error(diag.docDirectiveArgumentWrongFormat, 20, 3)],
     );
   }
 
@@ -38,7 +38,7 @@
 /// {@animation nan 400 http://google.com}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveArgumentWrongFormat, 16, 3)],
+      [error(diag.docDirectiveArgumentWrongFormat, 16, 3)],
     );
   }
 
@@ -48,7 +48,7 @@
 /// {@youtube 600 nan https://www.youtube.com/watch?v=123}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveArgumentWrongFormat, 18, 3)],
+      [error(diag.docDirectiveArgumentWrongFormat, 18, 3)],
     );
   }
 
@@ -58,7 +58,7 @@
 /// {@youtube 600 400 http://google.com}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveArgumentWrongFormat, 22, 17)],
+      [error(diag.docDirectiveArgumentWrongFormat, 22, 17)],
     );
   }
 
@@ -68,7 +68,7 @@
 /// {@youtube nan 400 https://www.youtube.com/watch?v=123}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveArgumentWrongFormat, 14, 3)],
+      [error(diag.docDirectiveArgumentWrongFormat, 14, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/doc_directive_has_extra_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/doc_directive_has_extra_arguments_test.dart
index 3393f8c..f814d31 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_directive_has_extra_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_directive_has_extra_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// {@animation 600 400 http://google.com foo}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveHasExtraArguments, 42, 3)],
+      [error(diag.docDirectiveHasExtraArguments, 42, 3)],
     );
   }
 
@@ -45,7 +45,7 @@
 /// {@macro one two}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveHasExtraArguments, 16, 3)],
+      [error(diag.docDirectiveHasExtraArguments, 16, 3)],
     );
   }
 
@@ -55,7 +55,7 @@
 /// {@youtube 600 400 https://www.youtube.com/watch?v=123 foo}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveHasExtraArguments, 58, 3)],
+      [error(diag.docDirectiveHasExtraArguments, 58, 3)],
     );
   }
 
@@ -65,7 +65,7 @@
 /// {@youtube 600 400 https://www.youtube.com/watch?v=123 foo }
 class C {}
 ''',
-      [error(WarningCode.docDirectiveHasExtraArguments, 58, 3)],
+      [error(diag.docDirectiveHasExtraArguments, 58, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/doc_directive_has_unexpected_named_argument_test.dart b/pkg/analyzer/test/src/diagnostics/doc_directive_has_unexpected_named_argument_test.dart
index 21a27f3..5396d6f 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_directive_has_unexpected_named_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_directive_has_unexpected_named_argument_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 /// {@animation 600 400 http://google.com foo=bar}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveHasUnexpectedNamedArgument, 42, 7)],
+      [error(diag.docDirectiveHasUnexpectedNamedArgument, 42, 7)],
     );
   }
 
@@ -32,7 +32,7 @@
 /// {@macro name foo=bar}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveHasUnexpectedNamedArgument, 17, 7)],
+      [error(diag.docDirectiveHasUnexpectedNamedArgument, 17, 7)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/doc_directive_missing_one_argument_test.dart b/pkg/analyzer/test/src/diagnostics/doc_directive_missing_one_argument_test.dart
index c080fea..7694ed5 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_directive_missing_one_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_directive_missing_one_argument_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
 /// {@canonicalFor}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingOneArgument, 4, 16)],
+      [error(diag.docDirectiveMissingOneArgument, 4, 16)],
     );
   }
 
@@ -52,7 +52,7 @@
 /// {@macro}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingOneArgument, 4, 9)],
+      [error(diag.docDirectiveMissingOneArgument, 4, 9)],
     );
   }
 
@@ -69,7 +69,7 @@
 /// {@youtube 600 400}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingOneArgument, 4, 19)],
+      [error(diag.docDirectiveMissingOneArgument, 4, 19)],
     );
   }
 
@@ -80,8 +80,8 @@
 class C {}
 ''',
       [
-        error(WarningCode.docDirectiveMissingOneArgument, 4, 18),
-        error(WarningCode.docDirectiveMissingClosingBrace, 21, 1),
+        error(diag.docDirectiveMissingOneArgument, 4, 18),
+        error(diag.docDirectiveMissingClosingBrace, 21, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/doc_directive_missing_three_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/doc_directive_missing_three_arguments_test.dart
index 3f127b8..dd601bc 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_directive_missing_three_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_directive_missing_three_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 /// {@animation}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingThreeArguments, 4, 13)],
+      [error(diag.docDirectiveMissingThreeArguments, 4, 13)],
     );
   }
 
@@ -45,7 +45,7 @@
 /// {@youtube}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingThreeArguments, 4, 11)],
+      [error(diag.docDirectiveMissingThreeArguments, 4, 11)],
     );
   }
 
@@ -55,7 +55,7 @@
 /// {@youtube
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingThreeArguments, 4, 10)],
+      [error(diag.docDirectiveMissingThreeArguments, 4, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/doc_directive_missing_two_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/doc_directive_missing_two_arguments_test.dart
index 5f501eb..a5f6f70 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_directive_missing_two_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_directive_missing_two_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
 /// {@animation 600}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingTwoArguments, 4, 17)],
+      [error(diag.docDirectiveMissingTwoArguments, 4, 17)],
     );
   }
 
@@ -52,7 +52,7 @@
 /// {@youtube 600}
 class C {}
 ''',
-      [error(WarningCode.docDirectiveMissingTwoArguments, 4, 15)],
+      [error(diag.docDirectiveMissingTwoArguments, 4, 15)],
     );
   }
 
@@ -63,8 +63,8 @@
 class C {}
 ''',
       [
-        error(WarningCode.docDirectiveMissingTwoArguments, 4, 14),
-        error(WarningCode.docDirectiveMissingClosingBrace, 17, 1),
+        error(diag.docDirectiveMissingTwoArguments, 4, 14),
+        error(diag.docDirectiveMissingClosingBrace, 17, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_be_deferred_test.dart b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_be_deferred_test.dart
index 24ff25d..8e4be3b 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_be_deferred_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_be_deferred_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,8 +22,8 @@
 class C {}
 ''',
       [
-        error(WarningCode.docImportCannotBeDeferred, 27, 8),
-        error(WarningCode.docImportCannotHavePrefix, 39, 4),
+        error(diag.docImportCannotBeDeferred, 27, 8),
+        error(diag.docImportCannotHavePrefix, 39, 4),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_combinators_test.dart b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_combinators_test.dart
index cd7ffaf..520658b 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_combinators_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_combinators_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// @docImport 'dart:math' show max;
 class C {}
 ''',
-      [error(WarningCode.docImportCannotHaveCombinators, 27, 8)],
+      [error(diag.docImportCannotHaveCombinators, 27, 8)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_configurations_test.dart b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_configurations_test.dart
index 45a1933..af9db9c 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_configurations_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_configurations_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// @docImport 'dart:math' if (dart.library.html) 'dart:html';
 class C {}
 ''',
-      [error(WarningCode.docImportCannotHaveConfigurations, 27, 34)],
+      [error(diag.docImportCannotHaveConfigurations, 27, 34)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_prefix_test.dart b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_prefix_test.dart
index 5bcf48f..f143e95 100644
--- a/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_prefix_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/doc_import_cannot_have_prefix_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// @docImport 'dart:math' as math;
 class C {}
 ''',
-      [error(WarningCode.docImportCannotHavePrefix, 30, 4)],
+      [error(diag.docImportCannotHavePrefix, 30, 4)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_test.dart
index d78edf3..8d72b27 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_default_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -62,48 +62,10 @@
     assertNoErrorsInResult();
 
     await resolveFile2(a);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.duplicateConstructorDefault, 42, 1),
-    ]);
+    assertErrorsInResult([error(diag.duplicateConstructorDefault, 42, 1)]);
   }
 
-  test_class_empty_empty() async {
-    await assertErrorsInCode(
-      r'''
-class C {
-  C();
-  C();
-}
-''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 19, 1)],
-    );
-  }
-
-  test_class_empty_new() async {
-    await assertErrorsInCode(
-      r'''
-class C {
-  C();
-  C.new();
-}
-''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 19, 5)],
-    );
-  }
-
-  test_class_new_empty() async {
-    await assertErrorsInCode(
-      r'''
-class C {
-  C.new();
-  C();
-}
-''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 23, 1)],
-    );
-  }
-
-  test_class_new_new() async {
+  test_class_typeName_new_typeName_new() async {
     await assertErrorsInCode(
       r'''
 class C {
@@ -111,53 +73,96 @@
   C.new();
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 23, 5)],
+      [error(diag.duplicateConstructorDefault, 23, 5)],
     );
   }
 
-  test_enum_empty_empty() async {
+  test_class_typeName_new_typeName_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C.new();
+  C();
+}
+''',
+      [error(diag.duplicateConstructorDefault, 23, 1)],
+    );
+  }
+
+  test_class_typeName_unnamed_factoryHead_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  factory C() => throw 0;
+  factory () => throw 0;
+}
+''',
+      [error(diag.duplicateConstructorDefault, 38, 7)],
+    );
+  }
+
+  test_class_typeName_unnamed_newHead_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C();
+  new ();
+}
+''',
+      [error(diag.duplicateConstructorDefault, 19, 3)],
+    );
+  }
+
+  test_class_typeName_unnamed_typeName_new() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C();
+  C.new();
+}
+''',
+      [error(diag.duplicateConstructorDefault, 19, 5)],
+    );
+  }
+
+  test_class_typeName_unnamed_typeName_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C();
+  C();
+}
+''',
+      [error(diag.duplicateConstructorDefault, 19, 1)],
+    );
+  }
+
+  test_class_wrongTypeName_unnamed_typeName_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+class A {
+  factory B.new() => throw 0;
+  A();
+}
+''',
+      [error(diag.invalidFactoryNameNotAClass, 20, 1)],
+    );
+  }
+
+  test_enum_newHead_unnamed_newHead_unnamed() async {
     await assertErrorsInCode(
       r'''
 enum E {
   v;
-  const E();
-  const E();
+  const new ();
+  const new ();
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 35, 1)],
+      [error(diag.duplicateConstructorDefault, 38, 3)],
     );
   }
 
-  test_enum_empty_new() async {
-    await assertErrorsInCode(
-      r'''
-enum E {
-  v;
-  const E();
-  const E.new();
-}
-''',
-      [
-        error(CompileTimeErrorCode.duplicateConstructorDefault, 35, 5),
-        error(WarningCode.unusedElement, 37, 3),
-      ],
-    );
-  }
-
-  test_enum_new_empty() async {
-    await assertErrorsInCode(
-      r'''
-enum E {
-  v;
-  const E.new();
-  const E();
-}
-''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 39, 1)],
-    );
-  }
-
-  test_enum_new_new() async {
+  test_enum_typeName_new_typeName_new() async {
     await assertErrorsInCode(
       r'''
 enum E {
@@ -167,53 +172,156 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.duplicateConstructorDefault, 39, 5),
-        error(WarningCode.unusedElement, 41, 3),
+        error(diag.duplicateConstructorDefault, 39, 5),
+        error(diag.unusedElement, 41, 3),
       ],
     );
   }
 
-  test_extensionType_empty_empty() async {
+  test_enum_typeName_new_typeName_unnamed() async {
     await assertErrorsInCode(
       r'''
-extension type A(int it) {
-  A(this.it);
+enum E {
+  v;
+  const E.new();
+  const E();
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 29, 1)],
+      [error(diag.duplicateConstructorDefault, 39, 1)],
     );
   }
 
-  test_extensionType_empty_new() async {
+  test_enum_typeName_unnamed_factoryHead_unnamed() async {
     await assertErrorsInCode(
       r'''
-extension type A(int it) {
-  A.new(this.it);
+enum E {
+  v;
+  const E();
+  factory () => v;
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 29, 5)],
+      [error(diag.duplicateConstructorDefault, 29, 7)],
     );
   }
 
-  test_extensionType_new_empty() async {
+  test_enum_typeName_unnamed_newHead_unnamed() async {
     await assertErrorsInCode(
       r'''
-extension type A.new(int it) {
-  A(this.it);
+enum E {
+  v;
+  const E();
+  const new ();
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 33, 1)],
+      [error(diag.duplicateConstructorDefault, 35, 3)],
     );
   }
 
-  test_extensionType_new_new() async {
+  test_enum_typeName_unnamed_typeName_new() async {
+    await assertErrorsInCode(
+      r'''
+enum E {
+  v;
+  const E();
+  const E.new();
+}
+''',
+      [
+        error(diag.duplicateConstructorDefault, 35, 5),
+        error(diag.unusedElement, 37, 3),
+      ],
+    );
+  }
+
+  test_enum_typeName_unnamed_typeName_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+enum E {
+  v;
+  const E();
+  const E();
+}
+''',
+      [error(diag.duplicateConstructorDefault, 35, 1)],
+    );
+  }
+
+  test_extensionType_primary_new_secondary_typeName_new() async {
     await assertErrorsInCode(
       r'''
 extension type A.new(int it) {
   A.new(this.it);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorDefault, 33, 5)],
+      [error(diag.duplicateConstructorDefault, 33, 5)],
+    );
+  }
+
+  test_extensionType_primary_new_secondary_typeName_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+extension type A.new(int it) {
+  A(this.it);
+}
+''',
+      [error(diag.duplicateConstructorDefault, 33, 1)],
+    );
+  }
+
+  test_extensionType_primary_unnamed_secondary_newHead_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+extension type A(int it) {
+  new(this.it);
+}
+''',
+      [error(diag.duplicateConstructorDefault, 29, 3)],
+    );
+  }
+
+  test_extensionType_primary_unnamed_secondary_typeName_new() async {
+    await assertErrorsInCode(
+      r'''
+extension type A(int it) {
+  A.new(this.it);
+}
+''',
+      [error(diag.duplicateConstructorDefault, 29, 5)],
+    );
+  }
+
+  test_extensionType_primary_unnamed_secondary_typeName_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+extension type A(int it) {
+  A(this.it);
+}
+''',
+      [error(diag.duplicateConstructorDefault, 29, 1)],
+    );
+  }
+
+  test_extensionType_secondary_factoryHead_unnamed_factoryHead_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+extension type A.named(int it) {
+  factory (int it) => A.named(it);
+  factory (int it) => A.named(it);
+}
+''',
+      [error(diag.duplicateConstructorDefault, 70, 7)],
+    );
+  }
+
+  test_extensionType_secondary_newHead_unnamed_newHead_unnamed() async {
+    await assertErrorsInCode(
+      r'''
+extension type A.named(int it) {
+  new(this.it);
+  new(this.it);
+}
+''',
+      [error(diag.duplicateConstructorDefault, 51, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_test.dart
index 90ecd53..8c6dec1 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_constructor_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -15,18 +15,6 @@
 
 @reflectiveTest
 class DuplicateConstructorNameTest extends PubPackageResolutionTest {
-  test_class() async {
-    await assertErrorsInCode(
-      r'''
-class C {
-  C.foo();
-  C.foo();
-}
-''',
-      [error(CompileTimeErrorCode.duplicateConstructorName, 23, 5)],
-    );
-  }
-
   @SkippedTest() // TODO(scheglov): implement augmentation
   test_class_augmentation_augments() async {
     newFile(testFile.path, r'''
@@ -100,12 +88,70 @@
     assertNoErrorsInResult();
 
     await resolveFile2(a);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.duplicateConstructorName, 42, 7),
-    ]);
+    assertErrorsInResult([error(diag.duplicateConstructorName, 42, 7)]);
   }
 
-  test_enum() async {
+  test_class_newHead_named_newHead_named() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  new foo();
+  new foo();
+}
+''',
+      [error(diag.duplicateConstructorName, 25, 7)],
+    );
+  }
+
+  test_class_typeName_named_factoryHead_named() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  factory C.foo() => throw 0;
+  factory foo() => throw 0;
+}
+''',
+      [error(diag.duplicateConstructorName, 42, 11)],
+    );
+  }
+
+  test_class_typeName_named_newHead_named() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C.foo();
+  new foo();
+}
+''',
+      [error(diag.duplicateConstructorName, 23, 7)],
+    );
+  }
+
+  test_class_typeName_named_typeName_named() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  C.foo();
+  C.foo();
+}
+''',
+      [error(diag.duplicateConstructorName, 23, 5)],
+    );
+  }
+
+  test_class_wrongTypeName_named_typeName_named() async {
+    await assertErrorsInCode(
+      r'''
+class A {
+  factory B.foo() => throw 0;
+  A.foo();
+}
+''',
+      [error(diag.invalidFactoryNameNotAClass, 20, 1)],
+    );
+  }
+
+  test_enum_typeName_named_typeName_named() async {
     await assertErrorsInCode(
       r'''
 enum E {
@@ -115,13 +161,48 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.duplicateConstructorName, 45, 5),
-        error(WarningCode.unusedElement, 47, 3),
+        error(diag.duplicateConstructorName, 45, 5),
+        error(diag.unusedElement, 47, 3),
       ],
     );
   }
 
-  test_extensionType_secondary() async {
+  test_extensionType_primary_typeName_named_secondary_typeName_named() async {
+    await assertErrorsInCode(
+      r'''
+extension type A.foo(int it) {
+  A.foo(this.it);
+}
+''',
+      [error(diag.duplicateConstructorName, 33, 5)],
+    );
+  }
+
+  test_extensionType_secondary_typeName_named_factoryHead_named() async {
+    await assertErrorsInCode(
+      r'''
+extension type A(int it) {
+  factory A.foo(int it) => A(it);
+  factory foo(int it) => A(it);
+}
+''',
+      [error(diag.duplicateConstructorName, 63, 11)],
+    );
+  }
+
+  test_extensionType_secondary_typeName_named_newHead_named() async {
+    await assertErrorsInCode(
+      r'''
+extension type A(int it) {
+  A.foo(this.it);
+  new foo(this.it);
+}
+''',
+      [error(diag.duplicateConstructorName, 47, 7)],
+    );
+  }
+
+  test_extensionType_secondary_typeName_named_secondary_typeName_named() async {
     await assertErrorsInCode(
       r'''
 extension type A(int it) {
@@ -129,18 +210,7 @@
   A.foo(this.it);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateConstructorName, 47, 5)],
-    );
-  }
-
-  test_extensionType_withPrimary() async {
-    await assertErrorsInCode(
-      r'''
-extension type A.foo(int it) {
-  A.foo(this.it);
-}
-''',
-      [error(CompileTimeErrorCode.duplicateConstructorName, 33, 5)],
+      [error(diag.duplicateConstructorName, 47, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index 126b815..8db3b2d 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../generated/test_support.dart';
@@ -33,7 +32,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           31,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -78,13 +77,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           31,
           3,
           contextMessages: [message(testFile, 16, 3)],
         ),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           46,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -117,7 +116,7 @@
     await resolveFile2(a);
     assertErrorsInResult([
       error(
-        CompileTimeErrorCode.duplicateDefinition,
+        diag.duplicateDefinition,
         46,
         3,
         contextMessages: [message(testFile, 32, 3)],
@@ -135,7 +134,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           35,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -154,7 +153,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           32,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -173,7 +172,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           41,
           3,
           contextMessages: [message(testFile, 22, 3)],
@@ -210,7 +209,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           38,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -229,7 +228,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           40,
           3,
           contextMessages: [message(testFile, 20, 3)],
@@ -265,7 +264,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           61,
           3,
           contextMessages: [message(testFile, 20, 3)],
@@ -285,7 +284,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           43,
           1,
           contextMessages: [message(testFile, 21, 1)],
@@ -304,7 +303,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           37,
           3,
           contextMessages: [message(testFile, 20, 3)],
@@ -333,7 +332,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           1,
           contextMessages: [message(testFile, 21, 1)],
@@ -353,7 +352,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           1,
           contextMessages: [message(testFile, 43, 1)],
@@ -372,7 +371,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           36,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -391,7 +390,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           33,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -427,7 +426,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -446,7 +445,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           32,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -469,7 +468,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           53,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -505,7 +504,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           76,
           1,
           contextMessages: [message(testFile, 25, 1)],
@@ -534,7 +533,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           1,
           contextMessages: [message(testFile, 49, 1)],
@@ -554,7 +553,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           1,
           contextMessages: [message(testFile, 21, 1)],
@@ -573,7 +572,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           33,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -596,7 +595,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -615,7 +614,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           42,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -648,7 +647,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           49,
           1,
           contextMessages: [message(testFile, 21, 1)],
@@ -671,7 +670,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           63,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -690,7 +689,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           45,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -709,7 +708,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           49,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -728,7 +727,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           46,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -747,7 +746,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           55,
           3,
           contextMessages: [message(testFile, 29, 3)],
@@ -784,7 +783,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           52,
           3,
           contextMessages: [message(testFile, 34, 3)],
@@ -803,7 +802,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -839,7 +838,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           75,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -858,7 +857,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           51,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -886,7 +885,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           50,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -905,7 +904,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           47,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -941,7 +940,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           68,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -960,7 +959,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           46,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -988,7 +987,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           47,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -1007,7 +1006,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           56,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -1043,7 +1042,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           77,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -1064,7 +1063,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           16,
           3,
           contextMessages: [message(testFile, 11, 3)],
@@ -1084,7 +1083,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           47,
           3,
           contextMessages: [message(testFile, 26, 3)],
@@ -1104,7 +1103,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           45,
           3,
           contextMessages: [message(testFile, 26, 3)],
@@ -1124,7 +1123,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           42,
           3,
           contextMessages: [message(testFile, 26, 3)],
@@ -1144,7 +1143,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           45,
           3,
           contextMessages: [message(testFile, 26, 3)],
@@ -1174,7 +1173,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           44,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -1212,7 +1211,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           65,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -1232,7 +1231,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           41,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -1262,7 +1261,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           40,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -1282,7 +1281,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           37,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -1320,7 +1319,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           58,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -1340,7 +1339,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           36,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -1370,7 +1369,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           37,
           3,
           contextMessages: [message(testFile, 20, 3)],
@@ -1390,7 +1389,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           46,
           3,
           contextMessages: [message(testFile, 25, 3)],
@@ -1428,7 +1427,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           67,
           3,
           contextMessages: [message(testFile, 25, 3)],
@@ -1447,7 +1446,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           29,
           3,
           contextMessages: [message(testFile, 11, 3)],
@@ -1466,7 +1465,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           33,
           3,
           contextMessages: [message(testFile, 11, 3)],
@@ -1485,7 +1484,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           30,
           3,
           contextMessages: [message(testFile, 11, 3)],
@@ -1514,7 +1513,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           49,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -1534,7 +1533,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           53,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -1554,7 +1553,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           50,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -1574,7 +1573,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           59,
           3,
           contextMessages: [message(testFile, 33, 3)],
@@ -1604,7 +1603,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           58,
           3,
           contextMessages: [message(testFile, 31, 3)],
@@ -1642,7 +1641,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           79,
           3,
           contextMessages: [message(testFile, 31, 3)],
@@ -1662,7 +1661,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           55,
           3,
           contextMessages: [message(testFile, 31, 3)],
@@ -1692,7 +1691,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -1712,7 +1711,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           51,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -1750,7 +1749,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           72,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -1770,7 +1769,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           50,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -1800,7 +1799,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           51,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -1820,7 +1819,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           60,
           3,
           contextMessages: [message(testFile, 32, 3)],
@@ -1858,7 +1857,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           81,
           3,
           contextMessages: [message(testFile, 32, 3)],
@@ -1913,7 +1912,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           60,
           3,
           contextMessages: [message(testFile, 40, 3)],
@@ -1949,7 +1948,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           76,
           3,
           contextMessages: [message(testFile, 31, 3)],
@@ -1969,7 +1968,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           57,
           3,
           contextMessages: [message(testFile, 40, 3)],
@@ -1999,7 +1998,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           56,
           3,
           contextMessages: [message(testFile, 37, 3)],
@@ -2019,7 +2018,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           53,
           3,
           contextMessages: [message(testFile, 37, 3)],
@@ -2055,7 +2054,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           69,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -2075,7 +2074,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           52,
           3,
           contextMessages: [message(testFile, 37, 3)],
@@ -2105,7 +2104,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           53,
           3,
           contextMessages: [message(testFile, 36, 3)],
@@ -2125,7 +2124,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           62,
           3,
           contextMessages: [message(testFile, 41, 3)],
@@ -2161,7 +2160,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           78,
           3,
           contextMessages: [message(testFile, 32, 3)],
@@ -2181,7 +2180,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           65,
           3,
           contextMessages: [message(testFile, 43, 3)],
@@ -2201,7 +2200,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           69,
           3,
           contextMessages: [message(testFile, 43, 3)],
@@ -2221,7 +2220,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           66,
           3,
           contextMessages: [message(testFile, 43, 3)],
@@ -2241,7 +2240,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           75,
           3,
           contextMessages: [message(testFile, 49, 3)],
@@ -2271,7 +2270,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           74,
           3,
           contextMessages: [message(testFile, 47, 3)],
@@ -2307,7 +2306,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           90,
           3,
           contextMessages: [message(testFile, 38, 3)],
@@ -2327,7 +2326,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           3,
           contextMessages: [message(testFile, 47, 3)],
@@ -2357,7 +2356,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           70,
           3,
           contextMessages: [message(testFile, 44, 3)],
@@ -2377,7 +2376,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           67,
           3,
           contextMessages: [message(testFile, 44, 3)],
@@ -2413,7 +2412,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           83,
           3,
           contextMessages: [message(testFile, 35, 3)],
@@ -2433,7 +2432,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           66,
           3,
           contextMessages: [message(testFile, 44, 3)],
@@ -2462,7 +2461,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           67,
           3,
           contextMessages: [message(testFile, 43, 3)],
@@ -2482,7 +2481,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           76,
           3,
           contextMessages: [message(testFile, 48, 3)],
@@ -2518,7 +2517,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           92,
           3,
           contextMessages: [message(testFile, 39, 3)],
@@ -2536,7 +2535,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           41,
           1,
           contextMessages: [message(testFile, 21, 1)],
@@ -2558,7 +2557,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           57,
           3,
           contextMessages: [message(testFile, 37, 3)],
@@ -2577,7 +2576,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           3,
           contextMessages: [message(testFile, 37, 3)],
@@ -2605,7 +2604,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           53,
           3,
           contextMessages: [message(testFile, 34, 3)],
@@ -2624,7 +2623,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           50,
           3,
           contextMessages: [message(testFile, 34, 3)],
@@ -2643,7 +2642,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           49,
           3,
           contextMessages: [message(testFile, 34, 3)],
@@ -2661,7 +2660,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           37,
           2,
           contextMessages: [message(testFile, 21, 2)],
@@ -2679,7 +2678,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           34,
           2,
           contextMessages: [message(testFile, 21, 2)],
@@ -2715,7 +2714,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           50,
           3,
           contextMessages: [message(testFile, 33, 3)],
@@ -2734,7 +2733,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           59,
           3,
           contextMessages: [message(testFile, 38, 3)],
@@ -2753,7 +2752,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           62,
           3,
           contextMessages: [message(testFile, 40, 3)],
@@ -2772,7 +2771,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           66,
           3,
           contextMessages: [message(testFile, 40, 3)],
@@ -2791,7 +2790,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           63,
           3,
           contextMessages: [message(testFile, 40, 3)],
@@ -2810,7 +2809,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           72,
           3,
           contextMessages: [message(testFile, 46, 3)],
@@ -2838,7 +2837,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           3,
           contextMessages: [message(testFile, 44, 3)],
@@ -2857,7 +2856,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           68,
           3,
           contextMessages: [message(testFile, 44, 3)],
@@ -2885,7 +2884,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           67,
           3,
           contextMessages: [message(testFile, 41, 3)],
@@ -2904,7 +2903,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           64,
           3,
           contextMessages: [message(testFile, 41, 3)],
@@ -2923,7 +2922,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           63,
           3,
           contextMessages: [message(testFile, 41, 3)],
@@ -2951,7 +2950,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           64,
           3,
           contextMessages: [message(testFile, 40, 3)],
@@ -2970,7 +2969,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           73,
           3,
           contextMessages: [message(testFile, 45, 3)],
@@ -2987,7 +2986,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           43,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -3009,7 +3008,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           31,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -3028,7 +3027,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           35,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -3047,7 +3046,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           32,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -3066,7 +3065,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           41,
           3,
           contextMessages: [message(testFile, 22, 3)],
@@ -3094,7 +3093,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           40,
           3,
           contextMessages: [message(testFile, 20, 3)],
@@ -3113,7 +3112,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           37,
           3,
           contextMessages: [message(testFile, 20, 3)],
@@ -3141,7 +3140,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           36,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -3160,7 +3159,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           33,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -3218,7 +3217,7 @@
     await resolveFile2(a);
     assertErrorsInResult([
       error(
-        CompileTimeErrorCode.duplicateDefinition,
+        diag.duplicateDefinition,
         47,
         3,
         contextMessages: [message(testFile, 33, 3)],
@@ -3236,7 +3235,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           32,
           3,
           contextMessages: [message(testFile, 17, 3)],
@@ -3264,7 +3263,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           33,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -3283,7 +3282,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           42,
           3,
           contextMessages: [message(testFile, 21, 3)],
@@ -3302,7 +3301,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           45,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -3321,7 +3320,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           49,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -3340,7 +3339,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           46,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -3359,7 +3358,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           55,
           3,
           contextMessages: [message(testFile, 29, 3)],
@@ -3387,7 +3386,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -3406,7 +3405,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           51,
           3,
           contextMessages: [message(testFile, 27, 3)],
@@ -3434,7 +3433,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           50,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -3453,7 +3452,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           47,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -3472,7 +3471,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           46,
           3,
           contextMessages: [message(testFile, 24, 3)],
@@ -3500,7 +3499,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           47,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -3519,7 +3518,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           56,
           3,
           contextMessages: [message(testFile, 28, 3)],
@@ -3541,9 +3540,9 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 13, 11),
-        error(WarningCode.deadCode, 27, 19),
-        error(WarningCode.deadCode, 49, 24),
+        error(diag.deadCode, 13, 11),
+        error(diag.deadCode, 27, 19),
+        error(diag.deadCode, 49, 24),
       ],
     );
   }
@@ -3561,21 +3560,21 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 62, 1),
+        error(diag.unusedElement, 62, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           75,
           1,
           contextMessages: [message(testFile, 62, 1)],
         ),
-        error(WarningCode.unusedElement, 75, 1),
+        error(diag.unusedElement, 75, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           100,
           1,
           contextMessages: [message(testFile, 62, 1)],
         ),
-        error(WarningCode.unusedElement, 100, 1),
+        error(diag.unusedElement, 100, 1),
       ],
     );
   }
@@ -3589,10 +3588,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(WarningCode.unusedLocalVariable, 30, 1),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.unusedLocalVariable, 30, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           30,
           1,
           contextMessages: [message(testFile, 17, 1)],
@@ -3623,7 +3622,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           74,
           1,
           contextMessages: [message(testFile, 61, 1)],
@@ -3641,14 +3640,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
+        error(diag.unusedLocalVariable, 17, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           31,
           1,
           contextMessages: [message(testFile, 17, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 31, 1),
+        error(diag.unusedLocalVariable, 31, 1),
       ],
     );
   }
@@ -3683,14 +3682,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
+        error(diag.unusedLocalVariable, 18, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           32,
           1,
           contextMessages: [message(testFile, 18, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 32, 1),
+        error(diag.unusedLocalVariable, 32, 1),
       ],
     );
   }
@@ -3704,14 +3703,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
+        error(diag.unusedLocalVariable, 18, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           33,
           1,
           contextMessages: [message(testFile, 18, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 33, 1),
+        error(diag.unusedLocalVariable, 33, 1),
       ],
     );
   }
@@ -3723,9 +3722,9 @@
   try {} catch (e, e) {}
 }''',
       [
-        error(WarningCode.unusedCatchStack, 28, 1),
+        error(diag.unusedCatchStack, 28, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           28,
           1,
           contextMessages: [message(testFile, 25, 1)],
@@ -3752,7 +3751,7 @@
 }''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           69,
           1,
           contextMessages: [message(testFile, 66, 1)],
@@ -3771,7 +3770,7 @@
   'b' : () {}
 };
 ''',
-      [error(WarningCode.unusedElement, 4, 10)],
+      [error(diag.unusedElement, 4, 10)],
     );
   }
 
@@ -3784,12 +3783,12 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           24,
           1,
           contextMessages: [message(testFile, 17, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 24, 1),
+        error(diag.unusedLocalVariable, 24, 1),
       ],
     );
   }
@@ -3814,7 +3813,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           68,
           1,
           contextMessages: [message(testFile, 61, 1)],
@@ -3839,7 +3838,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           36,
           1,
           contextMessages: [message(testFile, 29, 1)],
@@ -3856,7 +3855,7 @@
   A(this._, int _);
 }
 ''',
-      [error(WarningCode.unusedField, 17, 1)],
+      [error(diag.unusedField, 17, 1)],
     );
   }
 
@@ -3872,9 +3871,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 61, 1),
+        error(diag.unusedField, 61, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           80,
           1,
           contextMessages: [message(testFile, 73, 1)],
@@ -3893,7 +3892,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           36,
           1,
           contextMessages: [message(testFile, 28, 1)],
@@ -3910,7 +3909,7 @@
   A(int _, this._);
 }
 ''',
-      [error(WarningCode.unusedField, 17, 1)],
+      [error(diag.unusedField, 17, 1)],
     );
   }
 
@@ -3926,9 +3925,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 61, 1),
+        error(diag.unusedField, 61, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           80,
           1,
           contextMessages: [message(testFile, 72, 1)],
@@ -3949,12 +3948,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 17, 1),
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          74,
-          1,
-        ),
+        error(diag.unusedField, 17, 1),
+        error(diag.superFormalParameterWithoutAssociatedPositional, 74, 1),
       ],
     );
   }
@@ -3974,18 +3969,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 61, 1),
+        error(diag.unusedField, 61, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           118,
           1,
           contextMessages: [message(testFile, 109, 1)],
         ),
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          118,
-          1,
-        ),
+        error(diag.superFormalParameterWithoutAssociatedPositional, 118, 1),
       ],
     );
   }
@@ -4004,7 +3995,7 @@
   C(this._, super._, [super._]);
 }
 ''',
-      [error(WarningCode.unusedField, 90, 1)],
+      [error(diag.unusedField, 90, 1)],
     );
   }
 
@@ -4015,7 +4006,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           29,
           1,
           contextMessages: [message(testFile, 19, 1)],
@@ -4040,7 +4031,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           73,
           1,
           contextMessages: [message(testFile, 63, 1)],
@@ -4056,7 +4047,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           40,
           1,
           contextMessages: [message(testFile, 30, 1)],
@@ -4081,7 +4072,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           84,
           1,
           contextMessages: [message(testFile, 74, 1)],
@@ -4099,9 +4090,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 11, 1),
+        error(diag.unusedElement, 11, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           27,
           1,
           contextMessages: [message(testFile, 17, 1)],
@@ -4117,7 +4108,7 @@
   g(int _, double _) {};
 }
 ''',
-      [error(WarningCode.unusedElement, 8, 1)],
+      [error(diag.unusedElement, 8, 1)],
     );
   }
 
@@ -4132,9 +4123,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 52, 1),
+        error(diag.unusedElement, 52, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           68,
           1,
           contextMessages: [message(testFile, 58, 1)],
@@ -4153,7 +4144,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           28,
           1,
           contextMessages: [message(testFile, 18, 1)],
@@ -4184,7 +4175,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           72,
           1,
           contextMessages: [message(testFile, 62, 1)],
@@ -4200,7 +4191,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           16,
           1,
           contextMessages: [message(testFile, 6, 1)],
@@ -4215,8 +4206,8 @@
 f(,[]) {}
 ''',
       [
-        error(ParserErrorCode.missingIdentifier, 2, 1),
-        error(ParserErrorCode.missingIdentifier, 4, 1),
+        error(diag.missingIdentifier, 2, 1),
+        error(diag.missingIdentifier, 4, 1),
       ],
     );
   }
@@ -4237,7 +4228,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           60,
           1,
           contextMessages: [message(testFile, 50, 1)],
@@ -4259,14 +4250,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 64, 1),
+        error(diag.unusedLocalVariable, 64, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           77,
           1,
           contextMessages: [message(testFile, 64, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 77, 1),
+        error(diag.unusedLocalVariable, 77, 1),
       ],
     );
   }
@@ -4283,14 +4274,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 49, 1),
+        error(diag.unusedLocalVariable, 49, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           62,
           1,
           contextMessages: [message(testFile, 49, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 62, 1),
+        error(diag.unusedLocalVariable, 62, 1),
       ],
     );
   }
@@ -4311,7 +4302,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           106,
           1,
           contextMessages: [message(testFile, 93, 1)],
@@ -4344,14 +4335,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 48, 1),
+        error(diag.unusedLocalVariable, 48, 1),
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           61,
           1,
           contextMessages: [message(testFile, 48, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 61, 1),
+        error(diag.unusedLocalVariable, 61, 1),
       ],
     );
   }
@@ -4384,7 +4375,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           105,
           1,
           contextMessages: [message(testFile, 92, 1)],
@@ -4401,7 +4392,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           15,
           1,
           contextMessages: [message(testFile, 4, 1)],
@@ -4418,7 +4409,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           19,
           1,
           contextMessages: [message(testFile, 4, 1)],
@@ -4435,7 +4426,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           15,
           1,
           contextMessages: [message(testFile, 4, 1)],
@@ -4473,7 +4464,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           18,
           1,
           contextMessages: [message(testFile, 11, 1)],
@@ -4490,7 +4481,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           24,
           1,
           contextMessages: [message(testFile, 4, 1)],
@@ -4512,7 +4503,7 @@
 
     await assertErrorsInFile2(a, [
       error(
-        CompileTimeErrorCode.duplicateDefinition,
+        diag.duplicateDefinition,
         25,
         1,
         contextMessages: [message(testFile, 19, 1)],
@@ -4527,7 +4518,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           11,
           1,
           contextMessages: [message(testFile, 8, 1)],
@@ -4552,7 +4543,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           55,
           1,
           contextMessages: [message(testFile, 52, 1)],
@@ -4568,7 +4559,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           18,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -4593,7 +4584,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           62,
           1,
           contextMessages: [message(testFile, 59, 1)],
@@ -4609,7 +4600,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           29,
           1,
           contextMessages: [message(testFile, 26, 1)],
@@ -4634,7 +4625,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           73,
           1,
           contextMessages: [message(testFile, 70, 1)],
@@ -4650,7 +4641,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           13,
           1,
           contextMessages: [message(testFile, 10, 1)],
@@ -4675,7 +4666,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           57,
           1,
           contextMessages: [message(testFile, 54, 1)],
@@ -4691,7 +4682,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           13,
           1,
           contextMessages: [message(testFile, 10, 1)],
@@ -4716,7 +4707,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           57,
           1,
           contextMessages: [message(testFile, 54, 1)],
@@ -4734,7 +4725,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           22,
           1,
           contextMessages: [message(testFile, 19, 1)],
@@ -4763,7 +4754,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           66,
           1,
           contextMessages: [message(testFile, 63, 1)],
@@ -4779,7 +4770,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           10,
           1,
           contextMessages: [message(testFile, 7, 1)],
@@ -4804,7 +4795,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           1,
           contextMessages: [message(testFile, 51, 1)],
@@ -4825,7 +4816,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           28,
           1,
           contextMessages: [message(testFile, 6, 1)],
@@ -4875,7 +4866,7 @@
       ..addAll(aResult.diagnostics)
       ..assertErrors([
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           27,
           1,
           contextMessages: [message(lib, 22, 1)],
@@ -4913,7 +4904,7 @@
       ..addAll(bResult.diagnostics)
       ..assertErrors([
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           27,
           1,
           contextMessages: [message(a, 27, 1)],
@@ -4930,7 +4921,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           54,
           1,
           contextMessages: [message(testFile, 10, 1)],
@@ -4959,7 +4950,7 @@
       ..addAll(aResult.diagnostics)
       ..assertErrors([
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           31,
           1,
           contextMessages: [message(lib, 26, 1)],
@@ -4976,7 +4967,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           71,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -5005,7 +4996,7 @@
       ..addAll(aResult.diagnostics)
       ..assertErrors([
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           36,
           1,
           contextMessages: [message(lib, 31, 1)],
@@ -5022,7 +5013,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           28,
           1,
           contextMessages: [message(testFile, 6, 1)],
@@ -5072,7 +5063,7 @@
       ..addAll(aResult.diagnostics)
       ..assertErrors([
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           27,
           1,
           contextMessages: [message(lib, 22, 1)],
@@ -5088,7 +5079,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateDefinition,
+          diag.duplicateDefinition,
           31,
           1,
           contextMessages: [message(testFile, 8, 1)],
@@ -5138,7 +5129,7 @@
     await resolveFile2(a);
     assertErrorsInResult([
       error(
-        CompileTimeErrorCode.duplicateDefinition,
+        diag.duplicateDefinition,
         26,
         3,
         contextMessages: [message(testFile, 20, 3)],
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_field_formal_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_field_formal_parameter_test.dart
index 9438220..2a45eba 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_field_formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_field_formal_parameter_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           41,
           1,
           contextMessages: [message(testFile, 29, 1)],
@@ -44,23 +43,15 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 16, 1),
+        error(diag.unusedField, 16, 1),
+        error(diag.privateNamedParameterWithoutPublicName, 29, 1),
         error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          29,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           41,
           1,
           contextMessages: [message(testFile, 29, 1)],
         ),
-        error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          41,
-          1,
-        ),
+        error(diag.privateNamedParameterWithoutPublicName, 41, 1),
       ],
     );
   }
@@ -77,11 +68,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 60, 1),
-        error(ParserErrorCode.experimentNotEnabledOffByDefault, 73, 1),
-        error(ParserErrorCode.experimentNotEnabledOffByDefault, 85, 1),
+        error(diag.unusedField, 60, 1),
+        error(diag.experimentNotEnabledOffByDefault, 73, 1),
+        error(diag.experimentNotEnabledOffByDefault, 85, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           85,
           1,
           contextMessages: [message(testFile, 73, 1)],
@@ -100,7 +91,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           41,
           1,
           contextMessages: [message(testFile, 29, 1)],
@@ -119,7 +110,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           43,
           1,
           contextMessages: [message(testFile, 31, 1)],
@@ -137,9 +128,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 18, 1),
+        error(diag.unusedField, 18, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           43,
           1,
           contextMessages: [message(testFile, 31, 1)],
@@ -160,9 +151,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 62, 1),
+        error(diag.unusedField, 62, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           87,
           1,
           contextMessages: [message(testFile, 75, 1)],
@@ -180,9 +171,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 16, 1),
+        error(diag.unusedField, 16, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           41,
           1,
           contextMessages: [message(testFile, 29, 1)],
@@ -203,9 +194,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 60, 1),
+        error(diag.unusedField, 60, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           85,
           1,
           contextMessages: [message(testFile, 73, 1)],
@@ -224,7 +215,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           55,
           1,
           contextMessages: [message(testFile, 38, 1)],
@@ -242,23 +233,15 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 16, 1),
+        error(diag.unusedField, 16, 1),
+        error(diag.privateNamedParameterWithoutPublicName, 38, 1),
         error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          38,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           55,
           1,
           contextMessages: [message(testFile, 38, 1)],
         ),
-        error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          55,
-          1,
-        ),
+        error(diag.privateNamedParameterWithoutPublicName, 55, 1),
       ],
     );
   }
@@ -275,11 +258,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 60, 1),
-        error(ParserErrorCode.experimentNotEnabledOffByDefault, 82, 1),
-        error(ParserErrorCode.experimentNotEnabledOffByDefault, 99, 1),
+        error(diag.unusedField, 60, 1),
+        error(diag.experimentNotEnabledOffByDefault, 82, 1),
+        error(diag.experimentNotEnabledOffByDefault, 99, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           99,
           1,
           contextMessages: [message(testFile, 82, 1)],
@@ -298,7 +281,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           36,
           1,
           contextMessages: [message(testFile, 28, 1)],
@@ -317,7 +300,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           38,
           1,
           contextMessages: [message(testFile, 30, 1)],
@@ -335,9 +318,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 18, 1),
+        error(diag.unusedField, 18, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           38,
           1,
           contextMessages: [message(testFile, 30, 1)],
@@ -358,9 +341,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 62, 1),
+        error(diag.unusedField, 62, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           82,
           1,
           contextMessages: [message(testFile, 74, 1)],
@@ -381,9 +364,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 61, 1),
+        error(diag.unusedField, 61, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           81,
           1,
           contextMessages: [message(testFile, 73, 1)],
@@ -402,9 +385,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 17, 1),
+        error(diag.unusedField, 17, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldFormalParameter,
+          diag.duplicateFieldFormalParameter,
           37,
           1,
           contextMessages: [message(testFile, 29, 1)],
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_field_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_field_name_test.dart
index 1e046b4..63c321c 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_field_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_field_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldName,
+          diag.duplicateFieldName,
           15,
           1,
           contextMessages: [message(testFile, 9, 1)],
@@ -49,7 +49,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldName,
+          diag.duplicateFieldName,
           20,
           1,
           contextMessages: [message(testFile, 13, 1)],
@@ -65,7 +65,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldName,
+          diag.duplicateFieldName,
           19,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -81,7 +81,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateFieldName,
+          diag.duplicateFieldName,
           20,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -97,14 +97,14 @@
 ''',
       [
         // Only positional wildcard fields can be duplicated.
-        error(CompileTimeErrorCode.invalidFieldNamePrivate, 13, 1),
+        error(diag.invalidFieldNamePrivate, 13, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldName,
+          diag.duplicateFieldName,
           20,
           1,
           contextMessages: [message(testFile, 13, 1)],
         ),
-        error(CompileTimeErrorCode.invalidFieldNamePrivate, 20, 1),
+        error(diag.invalidFieldNamePrivate, 20, 1),
       ],
     );
   }
@@ -124,14 +124,14 @@
 void f((int _, int _) r) {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidFieldNamePrivate, 56, 1),
+        error(diag.invalidFieldNamePrivate, 56, 1),
         error(
-          CompileTimeErrorCode.duplicateFieldName,
+          diag.duplicateFieldName,
           63,
           1,
           contextMessages: [message(testFile, 56, 1)],
         ),
-        error(CompileTimeErrorCode.invalidFieldNamePrivate, 63, 1),
+        error(diag.invalidFieldNamePrivate, 63, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart
index a2697ed..f4abb94 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_hidden_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
       '''
 export 'lib1.dart' hide A, B, A;
 ''',
-      [error(WarningCode.duplicateHiddenName, 30, 1)],
+      [error(diag.duplicateHiddenName, 30, 1)],
     );
   }
 
@@ -40,8 +40,6 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(WarningCode.duplicateHiddenName, 54, 2),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.duplicateHiddenName, 54, 2)]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_ignore_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_ignore_test.dart
index 925d59c..2570dda 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_ignore_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_ignore_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -35,7 +35,7 @@
   var x = 0;
 }
 ''',
-      [error(WarningCode.duplicateIgnore, 43, 21)],
+      [error(diag.duplicateIgnore, 43, 21)],
     );
   }
 
@@ -47,7 +47,7 @@
   var x = 0;
 }
 ''',
-      [error(WarningCode.duplicateIgnore, 47, 21)],
+      [error(diag.duplicateIgnore, 47, 21)],
     );
   }
 
@@ -60,7 +60,7 @@
   var x = 0;
 }
 ''',
-      [error(WarningCode.duplicateIgnore, 66, 21)],
+      [error(diag.duplicateIgnore, 66, 21)],
     );
   }
 
@@ -70,7 +70,7 @@
 // ignore_for_file: type=lint, TYPE=LINT
 void f(arg1(int)) {} // AVOID_TYPES_AS_PARAMETER_NAMES
 ''',
-      [error(WarningCode.duplicateIgnore, 31, 9)],
+      [error(diag.duplicateIgnore, 31, 9)],
     );
   }
 
@@ -81,7 +81,7 @@
 // ignore: type=lint, TYPE=LINT
 void g(arg1(int)) {} // AVOID_TYPES_AS_PARAMETER_NAMES
 ''',
-      [error(WarningCode.duplicateIgnore, 34, 9)],
+      [error(diag.duplicateIgnore, 34, 9)],
     );
   }
 
@@ -93,7 +93,7 @@
 // ignore: type=lint
 void g(arg1(int)) {} // AVOID_TYPES_AS_PARAMETER_NAMES
 ''',
-      [error(WarningCode.duplicateIgnore, 53, 9)],
+      [error(diag.duplicateIgnore, 53, 9)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
index a31e35d..3d739c7 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_import_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 export 'lib1.dart';
 export 'lib1.dart';
 ''',
-      [error(WarningCode.duplicateExport, 27, 11)],
+      [error(diag.duplicateExport, 27, 11)],
     );
   }
 
@@ -51,7 +51,7 @@
 export 'lib1.dart' show A;
 export 'lib1.dart' show A;
 ''',
-      [error(WarningCode.duplicateExport, 34, 11)],
+      [error(diag.duplicateExport, 34, 11)],
     );
   }
 
@@ -68,7 +68,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [error(WarningCode.duplicateExport, 45, 11)]);
+    await assertErrorsInFile2(b, [error(diag.duplicateExport, 45, 11)]);
   }
 }
 
@@ -86,7 +86,7 @@
 
 final a = A();
 ''',
-      [error(WarningCode.duplicateImport, 37, 21)],
+      [error(diag.duplicateImport, 37, 21)],
     );
   }
 
@@ -102,7 +102,7 @@
 
 final a = A();
 ''',
-      [error(WarningCode.duplicateImport, 24, 21)],
+      [error(diag.duplicateImport, 24, 21)],
     );
   }
 
@@ -118,7 +118,7 @@
 
 final a = A();
 ''',
-      [error(WarningCode.duplicateImport, 24, 8)],
+      [error(diag.duplicateImport, 24, 8)],
     );
   }
 
@@ -138,9 +138,9 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.multipleCombinators, 35, 13),
-      error(WarningCode.duplicateImport, 57, 11),
-      error(WarningCode.multipleCombinators, 74, 13),
+      error(diag.multipleCombinators, 35, 13),
+      error(diag.duplicateImport, 57, 11),
+      error(diag.multipleCombinators, 74, 13),
     ]);
   }
 
@@ -212,8 +212,8 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.duplicateImport, 38, 11),
-      error(WarningCode.duplicateImport, 58, 11),
+      error(diag.duplicateImport, 38, 11),
+      error(diag.duplicateImport, 58, 11),
     ]);
   }
 
@@ -231,6 +231,6 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [error(WarningCode.duplicateImport, 45, 11)]);
+    await assertErrorsInFile2(b, [error(diag.duplicateImport, 45, 11)]);
   }
 }
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 95391a8..8a36ddb 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_named_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_named_argument_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   C(a: 1, a: 2);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateNamedArgument, 54, 1)],
+      [error(diag.duplicateNamedArgument, 54, 1)],
     );
   }
 
@@ -40,7 +40,7 @@
   D(a: 1, a: 2);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateNamedArgument, 69, 1)],
+      [error(diag.duplicateNamedArgument, 69, 1)],
     );
   }
 
@@ -55,7 +55,7 @@
   B({required super.a}) : super(a: 0);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateNamedArgument, 88, 1)],
+      [error(diag.duplicateNamedArgument, 88, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
   const E({required int a});
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateNamedArgument, 19, 1)],
+      [error(diag.duplicateNamedArgument, 19, 1)],
     );
   }
 
@@ -79,7 +79,7 @@
   f(a: 1, a: 2);
 }
 ''',
-      [error(CompileTimeErrorCode.duplicateNamedArgument, 32, 1)],
+      [error(diag.duplicateNamedArgument, 32, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart
index 5c82622..c4a9930 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_part_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_part_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 part 'part.dart';
 part 'foo/../part.dart';
 ''',
-      [error(CompileTimeErrorCode.duplicatePart, 23, 18)],
+      [error(diag.duplicatePart, 23, 18)],
     );
   }
 
@@ -39,7 +39,7 @@
 part 'part.dart';
 part 'part.dart';
 ''',
-      [error(CompileTimeErrorCode.duplicatePart, 23, 11)],
+      [error(diag.duplicatePart, 23, 11)],
     );
   }
 
@@ -70,8 +70,6 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.duplicatePart, 23, 8),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.duplicatePart, 23, 8)]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_pattern_assignment_variable_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_pattern_assignment_variable_test.dart
index 817bc33..49ebaf6 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_pattern_assignment_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_pattern_assignment_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternAssignmentVariable,
+          diag.duplicatePatternAssignmentVariable,
           38,
           1,
           contextMessages: [message(testFile, 23, 1)],
@@ -46,7 +46,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternAssignmentVariable,
+          diag.duplicatePatternAssignmentVariable,
           26,
           1,
           contextMessages: [message(testFile, 23, 1)],
@@ -66,13 +66,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternAssignmentVariable,
+          diag.duplicatePatternAssignmentVariable,
           26,
           1,
           contextMessages: [message(testFile, 23, 1)],
         ),
         error(
-          CompileTimeErrorCode.duplicatePatternAssignmentVariable,
+          diag.duplicatePatternAssignmentVariable,
           29,
           1,
           contextMessages: [message(testFile, 23, 1)],
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_pattern_field_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_pattern_field_test.dart
index 67ba0be..eb570f3 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_pattern_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_pattern_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternField,
+          diag.duplicatePatternField,
           57,
           4,
           contextMessages: [message(testFile, 48, 4)],
@@ -48,7 +48,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternField,
+          diag.duplicatePatternField,
           45,
           3,
           contextMessages: [message(testFile, 37, 3)],
@@ -69,12 +69,12 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternField,
+          diag.duplicatePatternField,
           45,
           1,
           contextMessages: [message(testFile, 37, 3)],
         ),
-        error(WarningCode.unusedLocalVariable, 50, 3),
+        error(diag.unusedLocalVariable, 50, 3),
       ],
     );
   }
@@ -90,9 +90,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 42, 3),
+        error(diag.unusedLocalVariable, 42, 3),
         error(
-          CompileTimeErrorCode.duplicatePatternField,
+          diag.duplicatePatternField,
           47,
           3,
           contextMessages: [message(testFile, 37, 1)],
@@ -113,7 +113,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternField,
+          diag.duplicatePatternField,
           53,
           3,
           contextMessages: [message(testFile, 45, 3)],
@@ -134,7 +134,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicatePatternField,
+          diag.duplicatePatternField,
           57,
           3,
           contextMessages: [message(testFile, 49, 3)],
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_private_named_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_private_named_parameter_test.dart
new file mode 100644
index 0000000..926e50f7
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_private_named_parameter_test.dart
@@ -0,0 +1,180 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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/diagnostic/diagnostic.dart' as diag;
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DuplicatePrivateNamedParameterTest);
+  });
+}
+
+@reflectiveTest
+class DuplicatePrivateNamedParameterTest extends PubPackageResolutionTest {
+  test_initializingFormal_initializingFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C({required this._foo, required this._foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(
+          diag.duplicateFieldFormalParameter,
+          71,
+          4,
+          contextMessages: [message(testFile, 51, 4)],
+        ),
+      ],
+    );
+  }
+
+  test_initializingFormal_privateNamed() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C({required this._foo, String? _foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(diag.privateNamedNonFieldParameter, 65, 4),
+        error(
+          diag.duplicateDefinition,
+          65,
+          4,
+          contextMessages: [message(testFile, 51, 4)],
+        ),
+      ],
+    );
+  }
+
+  test_initializingFormal_publicNamed() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C({required this._foo, String? foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(
+          diag.privateNamedParameterDuplicatePublicName,
+          51,
+          4,
+          contextMessages: [message(testFile, 65, 3)],
+        ),
+      ],
+    );
+  }
+
+  test_privateNamed_initializingFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C({String? _foo, required this._foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(diag.privateNamedNonFieldParameter, 45, 4),
+        error(
+          diag.duplicateDefinition,
+          65,
+          4,
+          contextMessages: [message(testFile, 45, 4)],
+        ),
+      ],
+    );
+  }
+
+  test_privatePositional_initializingFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C(String _foo, {required this._foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(
+          diag.duplicateDefinition,
+          64,
+          4,
+          contextMessages: [message(testFile, 43, 4)],
+        ),
+      ],
+    );
+  }
+
+  test_publicInitializingFormal_privateInitializingFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? foo;
+  final String? _foo;
+  C({required this.foo, required this._foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 47, 4),
+        error(
+          diag.privateNamedParameterDuplicatePublicName,
+          91,
+          4,
+          contextMessages: [message(testFile, 72, 3)],
+        ),
+      ],
+    );
+  }
+
+  test_publicNamed_initializingFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C({String? foo, required this._foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(
+          diag.privateNamedParameterDuplicatePublicName,
+          64,
+          4,
+          contextMessages: [message(testFile, 45, 3)],
+        ),
+      ],
+    );
+  }
+
+  test_publicPositional_initializingFormal() async {
+    await assertErrorsInCode(
+      r'''
+class C {
+  final String? _foo;
+  C(String? foo, {required this._foo}) {}
+}
+''',
+      [
+        error(diag.unusedField, 26, 4),
+        error(
+          diag.privateNamedParameterDuplicatePublicName,
+          64,
+          4,
+          contextMessages: [message(testFile, 44, 3)],
+        ),
+      ],
+    );
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_rest_element_in_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_rest_element_in_pattern_test.dart
index efbf207..a451e7e 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_rest_element_in_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_rest_element_in_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateRestElementInPattern,
+          diag.duplicateRestElementInPattern,
           41,
           3,
           contextMessages: [message(testFile, 36, 3)],
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart
index 0882b4d..9566164 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_shown_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
       '''
 export 'lib1.dart' show A, B, A;
 ''',
-      [error(WarningCode.duplicateShownName, 30, 1)],
+      [error(diag.duplicateShownName, 30, 1)],
     );
   }
 
@@ -40,8 +40,6 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(WarningCode.duplicateShownName, 54, 2),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.duplicateShownName, 54, 2)]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart
index 2fcc77e..f7c98ff 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_variable_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateVariablePattern,
+          diag.duplicateVariablePattern,
           42,
           1,
           contextMessages: [message(testFile, 33, 1)],
@@ -88,7 +88,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateVariablePattern,
+          diag.duplicateVariablePattern,
           53,
           1,
           contextMessages: [message(testFile, 44, 1)],
@@ -138,7 +138,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.duplicateVariablePattern,
+          diag.duplicateVariablePattern,
           21,
           1,
           contextMessages: [message(testFile, 18, 1)],
diff --git a/pkg/analyzer/test/src/diagnostics/enum_constant_invokes_factory_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/enum_constant_invokes_factory_constructor_test.dart
index 999d0eb..a50bc63 100644
--- a/pkg/analyzer/test/src/diagnostics/enum_constant_invokes_factory_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/enum_constant_invokes_factory_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
   const ET.named() : this(E.e1);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.enumConstantInvokesFactoryConstructor,
-          20,
-          5,
-        ),
-      ],
+      [error(diag.enumConstantInvokesFactoryConstructor, 20, 5)],
     );
   }
 
@@ -56,13 +50,7 @@
   const ET.named() : this(E.e1);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.enumConstantInvokesFactoryConstructor,
-          27,
-          2,
-        ),
-      ],
+      [error(diag.enumConstantInvokesFactoryConstructor, 27, 2)],
     );
   }
 
@@ -81,13 +69,7 @@
   const ET.named() : this(E.e1);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.enumConstantInvokesFactoryConstructor,
-          27,
-          2,
-        ),
-      ],
+      [error(diag.enumConstantInvokesFactoryConstructor, 27, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/enum_constant_same_name_as_enclosing_test.dart b/pkg/analyzer/test/src/diagnostics/enum_constant_same_name_as_enclosing_test.dart
index cc074eb..e6f0967 100644
--- a/pkg/analyzer/test/src/diagnostics/enum_constant_same_name_as_enclosing_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/enum_constant_same_name_as_enclosing_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   E
 }
 ''',
-      [error(CompileTimeErrorCode.enumConstantSameNameAsEnclosing, 11, 1)],
+      [error(diag.enumConstantSameNameAsEnclosing, 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
index 1feee8a..b90b811 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,13 +25,7 @@
   v<Never, int>()
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.enumInstantiatedToBoundsIsNotWellBounded,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.enumInstantiatedToBoundsIsNotWellBounded, 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
index 4117b5d..d4a9ad7 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.enumMixinWithInstanceVariable, 40, 1)],
+      [error(diag.enumMixinWithInstanceVariable, 40, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.enumMixinWithInstanceVariable, 42, 1)],
+      [error(diag.enumMixinWithInstanceVariable, 42, 1)],
     );
   }
 
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
index 6d73cfa..53a4fc5 100644
--- a/pkg/analyzer/test/src/diagnostics/enum_with_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/enum_with_abstract_member_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   int get foo;
 }
 ''',
-      [error(CompileTimeErrorCode.enumWithAbstractMember, 16, 12)],
+      [error(diag.enumWithAbstractMember, 16, 12)],
     );
   }
 
@@ -35,7 +35,7 @@
   void foo();
 }
 ''',
-      [error(CompileTimeErrorCode.enumWithAbstractMember, 16, 11)],
+      [error(diag.enumWithAbstractMember, 16, 11)],
     );
   }
 
@@ -47,7 +47,7 @@
   set foo(int _);
 }
 ''',
-      [error(CompileTimeErrorCode.enumWithAbstractMember, 16, 15)],
+      [error(diag.enumWithAbstractMember, 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
index 22d9628..5a3f859 100644
--- a/pkg/analyzer/test/src/diagnostics/enum_with_name_values_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/enum_with_name_values_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.enumWithNameValues, 5, 6)],
+      [error(diag.enumWithNameValues, 5, 6)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/enum_without_constants_test.dart b/pkg/analyzer/test/src/diagnostics/enum_without_constants_test.dart
index 876d4e3..9c43948 100644
--- a/pkg/analyzer/test/src/diagnostics/enum_without_constants_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/enum_without_constants_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
       '''
 enum E {}
 ''',
-      [error(CompileTimeErrorCode.enumWithoutConstants, 5, 1)],
+      [error(diag.enumWithoutConstants, 5, 1)],
     );
   }
 
@@ -51,9 +51,7 @@
 augment enum E {}
 ''');
 
-    await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.enumWithoutConstants, 20, 1),
-    ]);
+    await assertErrorsInFile2(a, [error(diag.enumWithoutConstants, 20, 1)]);
 
     await assertErrorsInFile2(b, []);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart b/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart
index 0a339b1..7d01fab 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           21,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -42,7 +42,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           16,
           1,
           contextMessages: [message(testFile, 11, 3)],
@@ -58,7 +58,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           36,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -98,7 +98,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           29,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -118,7 +118,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           60,
           14,
           contextMessages: [message(testFile, 44, 14)],
@@ -145,7 +145,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           16,
           3,
           contextMessages: [message(testFile, 11, 3)],
@@ -167,7 +167,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           19,
           6,
           contextMessages: [message(testFile, 11, 6)],
@@ -195,7 +195,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           21,
           3,
           contextMessages: [message(testFile, 15, 1)],
@@ -210,7 +210,7 @@
       '''
 var c = {1, 2, 1};
 ''',
-      [error(WarningCode.equalElementsInSet, 15, 1)],
+      [error(diag.equalElementsInSet, 15, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/equal_elements_in_set_test.dart b/pkg/analyzer/test/src/diagnostics/equal_elements_in_set_test.dart
index c457ef5..897542c 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_elements_in_set_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_elements_in_set_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 const b = 1;
 var s = {a, b};
 ''',
-      [error(WarningCode.equalElementsInSet, 38, 1)],
+      [error(diag.equalElementsInSet, 38, 1)],
     );
   }
 
@@ -32,7 +32,7 @@
 const one = 1;
 var s = {1, one};
 ''',
-      [error(WarningCode.equalElementsInSet, 27, 3)],
+      [error(diag.equalElementsInSet, 27, 3)],
     );
   }
 
@@ -41,7 +41,7 @@
       '''
 var s = {1, 1};
 ''',
-      [error(WarningCode.equalElementsInSet, 12, 1)],
+      [error(diag.equalElementsInSet, 12, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart b/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart
index 8beeeec..a105a2b 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           33,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -42,7 +42,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           19,
           1,
           contextMessages: [message(testFile, 11, 3)],
@@ -58,7 +58,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           48,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -98,7 +98,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           35,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -118,7 +118,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           66,
           14,
           contextMessages: [message(testFile, 44, 14)],
@@ -145,7 +145,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           22,
           3,
           contextMessages: [message(testFile, 11, 3)],
@@ -167,7 +167,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           25,
           6,
           contextMessages: [message(testFile, 11, 6)],
@@ -195,7 +195,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           27,
           9,
           contextMessages: [message(testFile, 15, 1)],
@@ -210,7 +210,7 @@
       '''
 var c = {1: null, 2: null, 1: null};
 ''',
-      [error(WarningCode.equalKeysInMap, 27, 1)],
+      [error(diag.equalKeysInMap, 27, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart
index 63038e7..fa08170 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           35,
           4,
           contextMessages: [message(testFile, 26, 4)],
@@ -42,7 +42,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           32,
           1,
           contextMessages: [message(testFile, 26, 1)],
@@ -63,7 +63,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           59,
           1,
           contextMessages: [message(testFile, 53, 1)],
@@ -81,7 +81,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           34,
           3,
           contextMessages: [message(testFile, 26, 3)],
@@ -100,7 +100,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           34,
           1,
           contextMessages: [message(testFile, 26, 3)],
@@ -182,7 +182,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           33,
           2,
           contextMessages: [message(testFile, 26, 2)],
@@ -200,7 +200,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           37,
           6,
           contextMessages: [message(testFile, 26, 6)],
@@ -226,7 +226,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInMapPattern,
+          diag.equalKeysInMapPattern,
           35,
           4,
           contextMessages: [message(testFile, 26, 4)],
diff --git a/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_test.dart b/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_test.dart
index 7d4bc89..910a9d9 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_keys_in_map_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 const b = 1;
 var s = {a: 2, b: 3};
 ''',
-      [error(WarningCode.equalKeysInMap, 41, 1)],
+      [error(diag.equalKeysInMap, 41, 1)],
     );
   }
 
@@ -32,7 +32,7 @@
 const one = 1;
 var s = {1: 2, one: 3};
 ''',
-      [error(WarningCode.equalKeysInMap, 30, 3)],
+      [error(diag.equalKeysInMap, 30, 3)],
     );
   }
 
@@ -41,7 +41,7 @@
       '''
 var s = {1: 2, 1: 3};
 ''',
-      [error(WarningCode.equalKeysInMap, 15, 1)],
+      [error(diag.equalKeysInMap, 15, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/expected_one_list_pattern_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/expected_one_list_pattern_type_arguments_test.dart
index 77be0c5..9567975 100644
--- a/pkg/analyzer/test/src/diagnostics/expected_one_list_pattern_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/expected_one_list_pattern_type_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   if (x case <int, int>[0]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.expectedOneListPatternTypeArguments, 25, 10)],
+      [error(diag.expectedOneListPatternTypeArguments, 25, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/expected_one_list_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/expected_one_list_type_arguments_test.dart
index edcbb1d..856429d 100644
--- a/pkg/analyzer/test/src/diagnostics/expected_one_list_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/expected_one_list_type_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 main() {
   <int, int>[];
 }''',
-      [error(CompileTimeErrorCode.expectedOneListTypeArguments, 11, 10)],
+      [error(diag.expectedOneListTypeArguments, 11, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/expected_one_set_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/expected_one_set_type_arguments_test.dart
index cb56bb2..cf485be 100644
--- a/pkg/analyzer/test/src/diagnostics/expected_one_set_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/expected_one_set_type_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 main() {
   <int, int, int>{2, 3};
 }''',
-      [error(CompileTimeErrorCode.expectedOneSetTypeArguments, 11, 15)],
+      [error(diag.expectedOneSetTypeArguments, 11, 15)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/expected_two_map_pattern_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/expected_two_map_pattern_type_arguments_test.dart
index 0693931..055a692 100644
--- a/pkg/analyzer/test/src/diagnostics/expected_two_map_pattern_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/expected_two_map_pattern_type_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   if (x case <int>{0: _}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.expectedTwoMapPatternTypeArguments, 25, 5)],
+      [error(diag.expectedTwoMapPatternTypeArguments, 25, 5)],
     );
   }
 
@@ -49,7 +49,7 @@
   if (x case <bool, int, String>{0: _}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.expectedTwoMapPatternTypeArguments, 25, 19)],
+      [error(diag.expectedTwoMapPatternTypeArguments, 25, 19)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/expected_two_map_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/expected_two_map_type_arguments_test.dart
index d5d8477..ea6271f 100644
--- a/pkg/analyzer/test/src/diagnostics/expected_two_map_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/expected_two_map_type_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
 main() {
   <int, int, int>{};
 }''',
-      [error(CompileTimeErrorCode.expectedTwoMapTypeArguments, 11, 15)],
+      [error(diag.expectedTwoMapTypeArguments, 11, 15)],
     );
   }
 
@@ -33,7 +33,7 @@
 main() {
   <int, int, int>{1: 2};
 }''',
-      [error(CompileTimeErrorCode.expectedTwoMapTypeArguments, 11, 15)],
+      [error(diag.expectedTwoMapTypeArguments, 11, 15)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart b/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart
index b7db9fd..7b8eb41 100644
--- a/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/experiment_not_enabled_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,8 +28,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.experimentNotEnabled, 86, 5),
-        error(CompileTimeErrorCode.undefinedMethod, 96, 3),
+        error(diag.experimentNotEnabled, 86, 5),
+        error(diag.undefinedMethod, 96, 3),
       ],
     );
   }
@@ -44,7 +43,7 @@
   print(c);
 }
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 42, 1)],
+      [error(diag.experimentNotEnabled, 42, 1)],
     );
   }
 
@@ -54,7 +53,7 @@
 // @dart = 2.12
 typedef A = int;
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 26, 1)],
+      [error(diag.experimentNotEnabled, 26, 1)],
     );
   }
 
@@ -64,7 +63,7 @@
 // @dart = 2.12
 typedef A = int?;
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 26, 1)],
+      [error(diag.experimentNotEnabled, 26, 1)],
     );
   }
 
@@ -78,8 +77,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 32, 2),
-        error(ParserErrorCode.experimentNotEnabledOffByDefault, 46, 2),
+        error(diag.unusedField, 32, 2),
+        error(diag.experimentNotEnabledOffByDefault, 46, 2),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart
index d3035cc..9f06d61 100644
--- a/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -32,7 +31,7 @@
       code: r'''
 class Bar extends Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 47, 3)],
+      [error(diag.experimentalMemberUse, 47, 3)],
     );
   }
 
@@ -78,7 +77,7 @@
       code: r'''
 class Bar extends Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 47, 3)],
+      [error(diag.experimentalMemberUse, 47, 3)],
     );
   }
 
@@ -94,7 +93,7 @@
 mixin M {}
 class Bar = Foo with M;
 ''',
-      [error(WarningCode.experimentalMemberUse, 52, 3)],
+      [error(diag.experimentalMemberUse, 52, 3)],
     );
   }
 
@@ -137,7 +136,7 @@
       code: r'''
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 50, 3)],
+      [error(diag.experimentalMemberUse, 50, 3)],
     );
   }
 
@@ -183,7 +182,7 @@
       code: r'''
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 50, 3)],
+      [error(diag.experimentalMemberUse, 50, 3)],
     );
   }
 
@@ -199,7 +198,7 @@
 mixin M {}
 class Bar = Object with M implements Foo;
 ''',
-      [error(WarningCode.experimentalMemberUse, 77, 3)],
+      [error(diag.experimentalMemberUse, 77, 3)],
     );
   }
 
@@ -214,7 +213,7 @@
       code: r'''
 enum Bar implements Foo { one; }
 ''',
-      [error(WarningCode.experimentalMemberUse, 49, 3)],
+      [error(diag.experimentalMemberUse, 49, 3)],
     );
   }
 
@@ -239,7 +238,7 @@
       code: r'''
 mixin Bar implements Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 50, 3)],
+      [error(diag.experimentalMemberUse, 50, 3)],
     );
   }
 
@@ -254,7 +253,7 @@
       code: r'''
 mixin Bar on Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 3)],
+      [error(diag.experimentalMemberUse, 42, 3)],
     );
   }
 
@@ -283,7 +282,7 @@
       code: r'''
 var x = Foo();
 ''',
-      [error(WarningCode.experimentalMemberUse, 37, 3)],
+      [error(diag.experimentalMemberUse, 37, 3)],
     );
   }
 
@@ -298,7 +297,7 @@
       code: r'''
 var x = Foo.new;
 ''',
-      [error(WarningCode.experimentalMemberUse, 37, 3)],
+      [error(diag.experimentalMemberUse, 37, 3)],
     );
   }
 
@@ -344,7 +343,7 @@
       code: r'''
 var x = Foo();
 ''',
-      [error(WarningCode.experimentalMemberUse, 37, 3)],
+      [error(diag.experimentalMemberUse, 37, 3)],
     );
   }
 
@@ -385,7 +384,7 @@
   x += 2;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -404,7 +403,7 @@
   x += 2;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -439,7 +438,7 @@
   x = 0;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -458,7 +457,7 @@
   x = 0;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -477,7 +476,7 @@
   a();
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 45, 3)],
+      [error(diag.experimentalMemberUse, 45, 3)],
     );
   }
 
@@ -492,7 +491,7 @@
       code: r'''
 void f(A a) {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 36, 1)],
+      [error(diag.experimentalMemberUse, 36, 1)],
     );
   }
 
@@ -545,7 +544,7 @@
   a += b;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 45, 6)],
+      [error(diag.experimentalMemberUse, 45, 6)],
     );
   }
 
@@ -569,9 +568,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 43, 1),
-        error(WarningCode.unusedLocalVariable, 45, 1),
-        error(WarningCode.experimentalMemberUse, 50, 3),
+        error(diag.experimentalMemberUse, 43, 1),
+        error(diag.unusedLocalVariable, 45, 1),
+        error(diag.experimentalMemberUse, 50, 3),
       ],
     );
   }
@@ -595,8 +594,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 43, 1),
-        error(WarningCode.unusedLocalVariable, 45, 1),
+        error(diag.experimentalMemberUse, 43, 1),
+        error(diag.unusedLocalVariable, 45, 1),
       ],
     );
   }
@@ -620,8 +619,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 43, 1),
-        error(WarningCode.unusedLocalVariable, 45, 1),
+        error(diag.experimentalMemberUse, 43, 1),
+        error(diag.unusedLocalVariable, 45, 1),
       ],
     );
   }
@@ -642,9 +641,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 39, 1),
+        error(diag.unusedLocalVariable, 39, 1),
         error(
-          WarningCode.experimentalMemberUse,
+          diag.experimentalMemberUse,
           44,
           5,
           messageContains: [
@@ -674,8 +673,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 45, 1),
-        error(WarningCode.experimentalMemberUse, 50, 3),
+        error(diag.unusedLocalVariable, 45, 1),
+        error(diag.experimentalMemberUse, 50, 3),
       ],
     );
   }
@@ -697,7 +696,7 @@
     _ => 7,
   };
 ''',
-      [error(WarningCode.experimentalMemberUse, 69, 3)],
+      [error(diag.experimentalMemberUse, 69, 3)],
     );
   }
 
@@ -718,7 +717,7 @@
     _ => 7,
   };
 ''',
-      [error(WarningCode.experimentalMemberUse, 74, 3)],
+      [error(diag.experimentalMemberUse, 74, 3)],
     );
   }
 
@@ -734,7 +733,7 @@
       '''
 export 'package:aaa/a.dart';
 ''',
-      [error(WarningCode.experimentalMemberUse, 0, 28)],
+      [error(diag.experimentalMemberUse, 0, 28)],
     );
   }
 
@@ -766,7 +765,7 @@
   E(0).foo;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -788,7 +787,7 @@
   a.foo;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 3)],
+      [error(diag.experimentalMemberUse, 48, 3)],
     );
   }
 
@@ -810,7 +809,7 @@
   a.foo = 0;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 3)],
+      [error(diag.experimentalMemberUse, 48, 3)],
     );
   }
 
@@ -866,7 +865,7 @@
 ''',
       [
         error(
-          WarningCode.experimentalMemberUse,
+          diag.experimentalMemberUse,
           24,
           28,
           messageContains: ['package:aaa/a.dart'],
@@ -893,9 +892,9 @@
 const z = C(x: '');
 ''',
       [
-        error(CompileTimeErrorCode.finalNotInitializedConstructor1, 53, 1),
-        error(ParserErrorCode.missingIdentifier, 82, 1),
-        error(ParserErrorCode.expectedToken, 82, 1),
+        error(diag.finalNotInitializedConstructor1, 53, 1),
+        error(diag.missingIdentifier, 82, 1),
+        error(diag.expectedToken, 82, 1),
       ],
     );
   }
@@ -915,7 +914,7 @@
   return a[1];
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 52, 4)],
+      [error(diag.experimentalMemberUse, 52, 4)],
     );
   }
 
@@ -936,7 +935,7 @@
   }
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 68, 1)],
+      [error(diag.experimentalMemberUse, 68, 1)],
     );
   }
 
@@ -1273,7 +1272,7 @@
   }
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 67, 1)],
+      [error(diag.experimentalMemberUse, 67, 1)],
     );
   }
 
@@ -1296,7 +1295,7 @@
   A();
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 1)],
+      [error(diag.experimentalMemberUse, 43, 1)],
     );
   }
 
@@ -1318,7 +1317,7 @@
   A();
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 1)],
+      [error(diag.experimentalMemberUse, 43, 1)],
     );
   }
 
@@ -1343,7 +1342,7 @@
       [
         // https://github.com/dart-lang/linter/issues/4752
         // Highlights `A`.
-        error(WarningCode.experimentalMemberUse, 43, 1),
+        error(diag.experimentalMemberUse, 43, 1),
       ],
     );
   }
@@ -1365,7 +1364,7 @@
 ''',
       [
         error(
-          WarningCode.experimentalMemberUse,
+          diag.experimentalMemberUse,
           48,
           7,
           messageContains: [
@@ -1394,7 +1393,7 @@
   A();
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 1)],
+      [error(diag.experimentalMemberUse, 43, 1)],
     );
   }
 
@@ -1413,7 +1412,7 @@
   return new A(1);
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 1)],
+      [error(diag.experimentalMemberUse, 48, 1)],
     );
   }
 
@@ -1435,7 +1434,7 @@
   a.foo();
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 3)],
+      [error(diag.experimentalMemberUse, 48, 3)],
     );
   }
 
@@ -1450,7 +1449,7 @@
       code: r'''
 var x = f();
 ''',
-      [error(WarningCode.experimentalMemberUse, 37, 1)],
+      [error(diag.experimentalMemberUse, 37, 1)],
     );
   }
 
@@ -1467,7 +1466,7 @@
 ''',
       [
         error(
-          WarningCode.experimentalMemberUse,
+          diag.experimentalMemberUse,
           37,
           1,
           text:
@@ -1540,13 +1539,9 @@
 var z = C(x: '');
 ''',
       [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          21,
-          5,
-        ),
-        error(ParserErrorCode.missingIdentifier, 26, 1),
-        error(CompileTimeErrorCode.undefinedNamedParameter, 42, 1),
+        error(diag.initializingFormalForNonExistentField, 21, 5),
+        error(diag.missingIdentifier, 26, 1),
+        error(diag.undefinedNamedParameter, 42, 1),
       ],
     );
   }
@@ -1566,7 +1561,7 @@
   return a + b;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 52, 5)],
+      [error(diag.experimentalMemberUse, 52, 5)],
     );
   }
 
@@ -1580,7 +1575,7 @@
       code: r'''
 void g() => f(x: 1);
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 1)],
+      [error(diag.experimentalMemberUse, 43, 1)],
     );
   }
 
@@ -1636,7 +1631,7 @@
   C({B this.a = instance});
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 57, 1)],
+      [error(diag.experimentalMemberUse, 57, 1)],
     );
   }
 
@@ -1705,7 +1700,7 @@
   foo(a: 0);
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 47, 1)],
+      [error(diag.experimentalMemberUse, 47, 1)],
     );
   }
 
@@ -1726,7 +1721,7 @@
   a.foo(a: 0);
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 52, 1)],
+      [error(diag.experimentalMemberUse, 52, 1)],
     );
   }
 
@@ -1744,7 +1739,7 @@
   a.foo(0);
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 51, 1)],
+      [error(diag.experimentalMemberUse, 51, 1)],
     );
   }
 
@@ -1820,7 +1815,7 @@
   x++;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -1854,7 +1849,7 @@
   x++;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -1873,7 +1868,7 @@
   A.foo;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 3)],
+      [error(diag.experimentalMemberUse, 44, 3)],
     );
   }
 
@@ -1892,7 +1887,7 @@
   A.foo;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -1911,7 +1906,7 @@
   ++x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 1)],
+      [error(diag.experimentalMemberUse, 44, 1)],
     );
   }
 
@@ -1930,7 +1925,7 @@
   ++x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 1)],
+      [error(diag.experimentalMemberUse, 44, 1)],
     );
   }
 
@@ -1951,7 +1946,7 @@
   }
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 74, 3)],
+      [error(diag.experimentalMemberUse, 74, 3)],
     );
   }
 
@@ -1984,7 +1979,7 @@
   a.foo = 0;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 3)],
+      [error(diag.experimentalMemberUse, 48, 3)],
     );
   }
 
@@ -2000,7 +1995,7 @@
 // ignore: unused_import
 import '$externalLibUri' show A;
 ''',
-      [error(WarningCode.experimentalMemberUse, 58, 1)],
+      [error(diag.experimentalMemberUse, 58, 1)],
     );
   }
 
@@ -2021,7 +2016,7 @@
 ''',
       [
         error(
-          WarningCode.experimentalMemberUse,
+          diag.experimentalMemberUse,
           57,
           13,
           text:
@@ -2048,7 +2043,7 @@
 ''',
       [
         error(
-          WarningCode.experimentalMemberUse,
+          diag.experimentalMemberUse,
           57,
           7,
           text:
@@ -2071,7 +2066,7 @@
   print(x);
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 1)],
+      [error(diag.experimentalMemberUse, 48, 1)],
     );
   }
 
@@ -2088,7 +2083,7 @@
   a = x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 51, 1)],
+      [error(diag.experimentalMemberUse, 51, 1)],
     );
   }
 
@@ -2105,7 +2100,7 @@
   x + 1;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -2123,7 +2118,7 @@
   A() : f = x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 66, 1)],
+      [error(diag.experimentalMemberUse, 66, 1)],
     );
   }
 
@@ -2138,7 +2133,7 @@
       code: r'''
 int f() => x;
 ''',
-      [error(WarningCode.experimentalMemberUse, 40, 1)],
+      [error(diag.experimentalMemberUse, 40, 1)],
     );
   }
 
@@ -2155,7 +2150,7 @@
   x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 42, 1)],
+      [error(diag.experimentalMemberUse, 42, 1)],
     );
   }
 
@@ -2172,7 +2167,7 @@
   [for (;x;) 0];
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 49, 1)],
+      [error(diag.experimentalMemberUse, 49, 1)],
     );
   }
 
@@ -2189,7 +2184,7 @@
   for (;x;) {}
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 1)],
+      [error(diag.experimentalMemberUse, 48, 1)],
     );
   }
 
@@ -2206,7 +2201,7 @@
   [if (x) 0];
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 47, 1)],
+      [error(diag.experimentalMemberUse, 47, 1)],
     );
   }
 
@@ -2223,7 +2218,7 @@
   if (x) {}
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 46, 1)],
+      [error(diag.experimentalMemberUse, 46, 1)],
     );
   }
 
@@ -2240,7 +2235,7 @@
   [x];
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 1)],
+      [error(diag.experimentalMemberUse, 43, 1)],
     );
   }
 
@@ -2258,8 +2253,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 47, 1),
-        error(WarningCode.experimentalMemberUse, 50, 1),
+        error(diag.experimentalMemberUse, 47, 1),
+        error(diag.experimentalMemberUse, 50, 1),
       ],
     );
   }
@@ -2278,7 +2273,7 @@
   g(a: x);
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 70, 1)],
+      [error(diag.experimentalMemberUse, 70, 1)],
     );
   }
 
@@ -2295,7 +2290,7 @@
   return x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 48, 1)],
+      [error(diag.experimentalMemberUse, 48, 1)],
     );
   }
 
@@ -2312,7 +2307,7 @@
   ({x});
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 1)],
+      [error(diag.experimentalMemberUse, 44, 1)],
     );
   }
 
@@ -2329,7 +2324,7 @@
   [...x];
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 46, 1)],
+      [error(diag.experimentalMemberUse, 46, 1)],
     );
   }
 
@@ -2349,7 +2344,7 @@
   }
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 69, 1)],
+      [error(diag.experimentalMemberUse, 69, 1)],
     );
   }
 
@@ -2371,7 +2366,7 @@
   }
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 85, 1)],
+      [error(diag.experimentalMemberUse, 85, 1)],
     );
   }
 
@@ -2388,7 +2383,7 @@
   switch (x) {}
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 50, 1)],
+      [error(diag.experimentalMemberUse, 50, 1)],
     );
   }
 
@@ -2407,7 +2402,7 @@
   switch (x) {}
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 66, 1)],
+      [error(diag.experimentalMemberUse, 66, 1)],
     );
   }
 
@@ -2424,7 +2419,7 @@
   -x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 1)],
+      [error(diag.experimentalMemberUse, 43, 1)],
     );
   }
 
@@ -2442,7 +2437,7 @@
   var v = x;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 85, 1)],
+      [error(diag.experimentalMemberUse, 85, 1)],
     );
   }
 
@@ -2459,7 +2454,7 @@
   while (x) {}
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 49, 1)],
+      [error(diag.experimentalMemberUse, 49, 1)],
     );
   }
 
@@ -2484,7 +2479,7 @@
       code: r'''
 class Bar with Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 3)],
+      [error(diag.experimentalMemberUse, 44, 3)],
     );
   }
 
@@ -2500,7 +2495,7 @@
       code: r'''
 class Bar with Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 3)],
+      [error(diag.experimentalMemberUse, 44, 3)],
     );
   }
 
@@ -2515,7 +2510,7 @@
       code: r'''
 class Bar with Foo {}
 ''',
-      [error(WarningCode.experimentalMemberUse, 44, 3)],
+      [error(diag.experimentalMemberUse, 44, 3)],
     );
   }
 
@@ -2530,7 +2525,7 @@
       code: r'''
 class Bar = Object with Foo;
 ''',
-      [error(WarningCode.experimentalMemberUse, 53, 3)],
+      [error(diag.experimentalMemberUse, 53, 3)],
     );
   }
 
@@ -2547,7 +2542,7 @@
   one, two;
 }
 ''',
-      [error(WarningCode.experimentalMemberUse, 43, 3)],
+      [error(diag.experimentalMemberUse, 43, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart b/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart
index f4fc158..16173c0 100644
--- a/pkg/analyzer/test/src/diagnostics/export_internal_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/export_internal_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.exportInternalLibrary,
+          diag.exportInternalLibrary,
           0,
           24,
           messageContains: ["library 'dart:_internal' "],
diff --git a/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
index 2fbdbf6..6f51ac5 100644
--- a/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/export_of_non_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.exportOfNonLibrary,
+          diag.exportOfNonLibrary,
           18,
           11,
           messageContains: ["library 'lib1.dart' "],
diff --git a/pkg/analyzer/test/src/diagnostics/expression_in_map_test.dart b/pkg/analyzer/test/src/diagnostics/expression_in_map_test.dart
index 11213ee..96be76e 100644
--- a/pkg/analyzer/test/src/diagnostics/expression_in_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/expression_in_map_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 var m = <String, int>{'a', 'b' : 2};
 ''',
-      [error(CompileTimeErrorCode.expressionInMap, 22, 3)],
+      [error(diag.expressionInMap, 22, 3)],
     );
   }
 
@@ -29,7 +29,7 @@
       '''
 const m = <String, int>{'a', 'b' : 2};
 ''',
-      [error(CompileTimeErrorCode.expressionInMap, 24, 3)],
+      [error(diag.expressionInMap, 24, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart
index 4bc1298..5151a32 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_deferred_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 mixin M {}
 class C = a.A with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDeferredClass, 69, 3)],
+      [error(diag.extendsDeferredClass, 69, 3)],
     );
   }
 
@@ -42,7 +42,7 @@
 import 'lib1.dart' deferred as a;
 class B extends a.A {}
 ''',
-      [error(CompileTimeErrorCode.extendsDeferredClass, 64, 3)],
+      [error(diag.extendsDeferredClass, 64, 3)],
     );
   }
 
@@ -58,7 +58,7 @@
 import 'lib1.dart' deferred as a;
 class B extends a.B {}
 ''',
-      [error(CompileTimeErrorCode.extendsDeferredClass, 64, 3)],
+      [error(diag.extendsDeferredClass, 64, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extends_disallowed_class_test.dart b/pkg/analyzer/test/src/diagnostics/extends_disallowed_class_test.dart
index 090db10..5e7c715b 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_disallowed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_disallowed_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A extends bool {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 4)],
+      [error(diag.extendsDisallowedClass, 16, 4)],
     );
   }
 
@@ -29,7 +29,7 @@
       '''
 class A extends double {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 6)],
+      [error(diag.extendsDisallowedClass, 16, 6)],
     );
   }
 
@@ -39,7 +39,7 @@
 import 'dart:async';
 class A extends FutureOr {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 37, 8)],
+      [error(diag.extendsDisallowedClass, 37, 8)],
     );
   }
 
@@ -49,7 +49,7 @@
 import 'dart:async';
 class A extends FutureOr<int> {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 37, 13)],
+      [error(diag.extendsDisallowedClass, 37, 13)],
     );
   }
 
@@ -60,7 +60,7 @@
 typedef F = FutureOr<void>;
 class A extends F {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 65, 1)],
+      [error(diag.extendsDisallowedClass, 65, 1)],
     );
   }
 
@@ -70,7 +70,7 @@
 import 'dart:async';
 class A<T> extends FutureOr<T> {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 40, 11)],
+      [error(diag.extendsDisallowedClass, 40, 11)],
     );
   }
 
@@ -79,7 +79,7 @@
       '''
 class A extends int {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 3)],
+      [error(diag.extendsDisallowedClass, 16, 3)],
     );
   }
 
@@ -88,7 +88,7 @@
       '''
 class A extends Null {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 4)],
+      [error(diag.extendsDisallowedClass, 16, 4)],
     );
   }
 
@@ -97,7 +97,7 @@
       '''
 class A extends num {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 3)],
+      [error(diag.extendsDisallowedClass, 16, 3)],
     );
   }
 
@@ -106,7 +106,7 @@
       '''
 class A extends Record {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 6)],
+      [error(diag.extendsDisallowedClass, 16, 6)],
     );
   }
 
@@ -115,7 +115,7 @@
       '''
 class A extends String {}
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 16, 6)],
+      [error(diag.extendsDisallowedClass, 16, 6)],
     );
   }
 
@@ -132,9 +132,7 @@
 ''');
 
     await assertErrorsInFile2(a, []);
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.extendsDisallowedClass, 42, 6),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.extendsDisallowedClass, 42, 6)]);
   }
 
   test_classTypeAlias_bool() async {
@@ -143,7 +141,7 @@
 class M {}
 class C = bool with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 21, 4)],
+      [error(diag.extendsDisallowedClass, 21, 4)],
     );
   }
 
@@ -153,7 +151,7 @@
 class M {}
 class C = double with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 21, 6)],
+      [error(diag.extendsDisallowedClass, 21, 6)],
     );
   }
 
@@ -164,7 +162,7 @@
 class M {}
 class C = FutureOr with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 42, 8)],
+      [error(diag.extendsDisallowedClass, 42, 8)],
     );
   }
 
@@ -174,7 +172,7 @@
 class M {}
 class C = int with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 21, 3)],
+      [error(diag.extendsDisallowedClass, 21, 3)],
     );
   }
 
@@ -184,7 +182,7 @@
 class M {}
 class C = Null with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 21, 4)],
+      [error(diag.extendsDisallowedClass, 21, 4)],
     );
   }
 
@@ -194,7 +192,7 @@
 class M {}
 class C = num with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 21, 3)],
+      [error(diag.extendsDisallowedClass, 21, 3)],
     );
   }
 
@@ -204,7 +202,7 @@
 class M {}
 class C = String with M;
 ''',
-      [error(CompileTimeErrorCode.extendsDisallowedClass, 21, 6)],
+      [error(diag.extendsDisallowedClass, 21, 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 b38b56e..73aeec7 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_non_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       r'''
 class A extends dynamic {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 16, 7)],
+      [error(diag.extendsNonClass, 16, 7)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -40,7 +40,7 @@
 enum E { ONE }
 class A extends E {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 31, 1)],
+      [error(diag.extendsNonClass, 31, 1)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -60,7 +60,7 @@
 extension type A(int it) {}
 class B extends A {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 44, 1)],
+      [error(diag.extendsNonClass, 44, 1)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -80,7 +80,7 @@
 mixin M {}
 class A extends M {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 27, 1)],
+      [error(diag.extendsNonClass, 27, 1)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -100,7 +100,7 @@
 int v = 0;
 class A extends v {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 27, 1)],
+      [error(diag.extendsNonClass, 27, 1)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -120,7 +120,7 @@
 int v = 0;
 class A extends v<int> {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 27, 1)],
+      [error(diag.extendsNonClass, 27, 1)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -147,7 +147,7 @@
       '''
 class A extends Never {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 16, 5)],
+      [error(diag.extendsNonClass, 16, 5)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -166,7 +166,7 @@
       r'''
 class C extends A {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 16, 1)],
+      [error(diag.extendsNonClass, 16, 1)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -187,7 +187,7 @@
 
 class C extends p.A {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -242,7 +242,7 @@
 import 'x.dart' as p;
 class C extends p.A {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 25, 8)],
+      [error(diag.uriDoesNotExist, 25, 8)],
     );
 
     var node = findNode.singleExtendsClause;
@@ -267,7 +267,7 @@
 
 class C extends A {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
   }
 
@@ -294,7 +294,7 @@
 import 'x.dart' show A;
 class C extends A {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 25, 8)],
+      [error(diag.uriDoesNotExist, 25, 8)],
     );
   }
 
@@ -333,7 +333,7 @@
 part of 'a.dart';
 class C extends A {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 34, 1)],
+      [error(diag.extendsNonClass, 34, 1)],
     );
   }
 
@@ -344,10 +344,7 @@
 
 class C extends A {}
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 7, 8),
-        error(CompileTimeErrorCode.extendsNonClass, 41, 1),
-      ],
+      [error(diag.uriDoesNotExist, 7, 8), error(diag.extendsNonClass, 41, 1)],
     );
   }
 
@@ -362,7 +359,7 @@
 
 class C extends _$A {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 34, 3)],
+      [error(diag.extendsNonClass, 34, 3)],
     );
   }
 
@@ -373,7 +370,7 @@
 
 class C extends _$A {}
 ''',
-      [error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 10)],
+      [error(diag.uriHasNotBeenGenerated, 5, 10)],
     );
   }
 
@@ -385,8 +382,8 @@
 class C extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 10),
-        error(CompileTimeErrorCode.extendsNonClass, 34, 1),
+        error(diag.uriHasNotBeenGenerated, 5, 10),
+        error(diag.extendsNonClass, 34, 1),
       ],
     );
   }
@@ -398,10 +395,7 @@
 
 class C extends _$A {}
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 5, 8),
-        error(CompileTimeErrorCode.extendsNonClass, 32, 3),
-      ],
+      [error(diag.uriDoesNotExist, 5, 8), error(diag.extendsNonClass, 32, 3)],
     );
   }
 
@@ -412,10 +406,7 @@
 
 class C extends A {}
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 5, 8),
-        error(CompileTimeErrorCode.extendsNonClass, 32, 1),
-      ],
+      [error(diag.uriDoesNotExist, 5, 8), error(diag.extendsNonClass, 32, 1)],
     );
   }
 
@@ -426,7 +417,7 @@
 
 class C extends p.A {}
 ''',
-      [error(CompileTimeErrorCode.extendsNonClass, 42, 3)],
+      [error(diag.extendsNonClass, 42, 3)],
     );
 
     var node = findNode.singleExtendsClause;
diff --git a/pkg/analyzer/test/src/diagnostics/extends_type_alias_expands_to_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/extends_type_alias_expands_to_type_parameter_test.dart
index ceb7869..d4ba184 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_type_alias_expands_to_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_type_alias_expands_to_type_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
 typedef T<X extends A> = X;
 class B extends T {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extendsTypeAliasExpandsToTypeParameter,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.extendsTypeAliasExpandsToTypeParameter, 55, 1)],
     );
   }
 
@@ -48,13 +42,7 @@
 typedef T<X extends A> = X;
 class B extends T<A> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extendsTypeAliasExpandsToTypeParameter,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.extendsTypeAliasExpandsToTypeParameter, 55, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart b/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart
index 881b0c9..cf1fe03 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_as_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_as_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 import 'a.dart' as p;
 var v = p.E;
 ''',
-      [error(CompileTimeErrorCode.extensionAsExpression, 30, 3)],
+      [error(diag.extensionAsExpression, 30, 3)],
     );
     assertTypeDynamic(findNode.simple('E;'));
     assertTypeDynamic(findNode.prefixed('p.E;'));
@@ -36,7 +36,7 @@
 extension E on int {}
 var v = E;
 ''',
-      [error(CompileTimeErrorCode.extensionAsExpression, 30, 1)],
+      [error(diag.extensionAsExpression, 30, 1)],
     );
     assertTypeDynamic(findNode.simple('E;'));
   }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart b/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart
index aaee43d..dbe4f72 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_conflicting_static_and_instance_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -17,8 +17,7 @@
 @reflectiveTest
 class ExtensionConflictingStaticAndInstanceTest
     extends PubPackageResolutionTest {
-  DiagnosticCode get _errorCode =>
-      CompileTimeErrorCode.extensionConflictingStaticAndInstance;
+  DiagnosticCode get _errorCode => diag.extensionConflictingStaticAndInstance;
 
   test_extendedType_staticField() async {
     await assertNoErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/extension_declares_abstract_method_test.dart b/pkg/analyzer/test/src/diagnostics/extension_declares_abstract_method_test.dart
index 8d28b7b..e6f428b 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_declares_abstract_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_declares_abstract_method_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   bool get isPalindrome;
 }
 ''',
-      [error(ParserErrorCode.extensionDeclaresAbstractMember, 35, 12)],
+      [error(diag.extensionDeclaresAbstractMember, 35, 12)],
     );
   }
 
@@ -33,7 +33,7 @@
   String reversed();
 }
 ''',
-      [error(ParserErrorCode.extensionDeclaresAbstractMember, 33, 8)],
+      [error(diag.extensionDeclaresAbstractMember, 33, 8)],
     );
   }
 
@@ -50,7 +50,7 @@
   String operator -(String otherString);
 }
 ''',
-      [error(ParserErrorCode.extensionDeclaresAbstractMember, 42, 1)],
+      [error(diag.extensionDeclaresAbstractMember, 42, 1)],
     );
   }
 
@@ -61,7 +61,7 @@
   set length(int newLength);
 }
 ''',
-      [error(ParserErrorCode.extensionDeclaresAbstractMember, 30, 6)],
+      [error(diag.extensionDeclaresAbstractMember, 30, 6)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_declares_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/extension_declares_constructor_test.dart
index 10e3165..6b23341 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_declares_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_declares_constructor_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   E.named() : super();
 }
 ''',
-      [error(ParserErrorCode.extensionDeclaresConstructor, 26, 1)],
+      [error(diag.extensionDeclaresConstructor, 26, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   E() : super();
 }
 ''',
-      [error(ParserErrorCode.extensionDeclaresConstructor, 26, 1)],
+      [error(diag.extensionDeclaresConstructor, 26, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart b/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart
index b50cb7c..8f35ce5 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_declares_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_declares_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,9 +23,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extensionDeclaresInstanceField, 34, 3),
-        error(CompileTimeErrorCode.extensionDeclaresInstanceField, 39, 3),
-        error(CompileTimeErrorCode.extensionDeclaresInstanceField, 44, 5),
+        error(diag.extensionDeclaresInstanceField, 34, 3),
+        error(diag.extensionDeclaresInstanceField, 39, 3),
+        error(diag.extensionDeclaresInstanceField, 44, 5),
       ],
     );
   }
@@ -43,7 +43,7 @@
   String? s;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionDeclaresInstanceField, 34, 1)],
+      [error(diag.extensionDeclaresInstanceField, 34, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/extension_declares_member_of_object_test.dart b/pkg/analyzer/test/src/diagnostics/extension_declares_member_of_object_test.dart
index 357b048..a1b2bbc 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_declares_member_of_object_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_declares_member_of_object_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   void hashCode() {}
 }
 ''',
-      [error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 31, 8)],
+      [error(diag.extensionDeclaresMemberOfObject, 31, 8)],
     );
   }
 
@@ -38,11 +38,11 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 39, 2),
-        error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 72, 8),
-        error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 96, 8),
-        error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 128, 11),
-        error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 159, 12),
+        error(diag.extensionDeclaresMemberOfObject, 39, 2),
+        error(diag.extensionDeclaresMemberOfObject, 72, 8),
+        error(diag.extensionDeclaresMemberOfObject, 96, 8),
+        error(diag.extensionDeclaresMemberOfObject, 128, 11),
+        error(diag.extensionDeclaresMemberOfObject, 159, 12),
       ],
     );
   }
@@ -54,7 +54,7 @@
   static void hashCode() {}
 }
 ''',
-      [error(CompileTimeErrorCode.extensionDeclaresMemberOfObject, 38, 8)],
+      [error(diag.extensionDeclaresMemberOfObject, 38, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart
index 711609f..0f55846 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_access_to_static_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +27,7 @@
   E(0)();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-          65,
-          2,
-        ),
-      ],
+      [error(diag.extensionOverrideAccessToStaticMember, 65, 2)],
     );
 
     var node = findNode.functionExpressionInvocation('();');
@@ -71,13 +65,7 @@
   E('a').empty;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-          79,
-          5,
-        ),
-      ],
+      [error(diag.extensionOverrideAccessToStaticMember, 79, 5)],
     );
   }
 
@@ -92,13 +80,7 @@
   E('a').empty += 'b';
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-          116,
-          5,
-        ),
-      ],
+      [error(diag.extensionOverrideAccessToStaticMember, 116, 5)],
     );
   }
 
@@ -112,13 +94,7 @@
   E('a').empty();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-          77,
-          5,
-        ),
-      ],
+      [error(diag.extensionOverrideAccessToStaticMember, 77, 5)],
     );
 
     var node = findNode.methodInvocation('empty();');
@@ -158,13 +134,7 @@
   E('a').empty = 'b';
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideAccessToStaticMember,
-          83,
-          5,
-        ),
-      ],
+      [error(diag.extensionOverrideAccessToStaticMember, 83, 5)],
     );
   }
 }
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 425b4a9..51f5adc 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,13 +26,7 @@
   E(null).m();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
-          50,
-          4,
-        ),
-      ],
+      [error(diag.extensionOverrideArgumentNotAssignable, 50, 4)],
     );
   }
 
@@ -72,13 +66,7 @@
   E(a).m();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
-          85,
-          1,
-        ),
-      ],
+      [error(diag.extensionOverrideArgumentNotAssignable, 85, 1)],
     );
   }
 
@@ -94,13 +82,7 @@
   E(b).m();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionOverrideArgumentNotAssignable,
-          75,
-          1,
-        ),
-      ],
+      [error(diag.extensionOverrideArgumentNotAssignable, 75, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_with_cascade_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_with_cascade_test.dart
index c9cfa84..bfd2c09 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_with_cascade_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_with_cascade_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   E(3)..g..g;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionOverrideWithCascade, 49, 1)],
+      [error(diag.extensionOverrideWithCascade, 49, 1)],
     );
     assertTypeDynamic(findNode.extensionOverride('E('));
   }
@@ -40,7 +40,7 @@
   E(3)..m()..m();
 }
 ''',
-      [error(CompileTimeErrorCode.extensionOverrideWithCascade, 45, 1)],
+      [error(diag.extensionOverrideWithCascade, 45, 1)],
     );
     assertTypeDynamic(findNode.extensionOverride('E('));
   }
@@ -55,7 +55,7 @@
   E(3)..s = 1..s = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionOverrideWithCascade, 49, 1)],
+      [error(diag.extensionOverrideWithCascade, 49, 1)],
     );
     assertTypeDynamic(findNode.extensionOverride('E('));
   }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_without_access_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_without_access_test.dart
index fadf9bd..11e356c 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_without_access_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_without_access_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -52,7 +52,7 @@
   E(c);
 }
 ''',
-      [error(CompileTimeErrorCode.extensionOverrideWithoutAccess, 57, 4)],
+      [error(diag.extensionOverrideWithoutAccess, 57, 4)],
     );
     assertTypeDynamic(findNode.extensionOverride('E(c)'));
   }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_formal_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_formal_parameter_test.dart
index 972b17c..a88db5f 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_formal_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,16 +23,10 @@
   E.named(this.it, {super.foo});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeConstructorWithSuperFormalParameter,
-          47,
-          5,
-        ),
-      ],
+      [error(diag.extensionTypeConstructorWithSuperFormalParameter, 47, 5)],
     );
 
-    var node = findNode.singleFormalParameterList;
+    var node = findNode.formalParameterList('super.foo');
     assertResolvedNodeText(node, r'''
 FormalParameterList
   leftParenthesis: (
@@ -40,19 +34,20 @@
     thisKeyword: this
     period: .
     name: it
-    declaredElement: <testLibraryFragment> it@42
+    declaredFragment: <testLibraryFragment> it@42
       element: hasImplicitType isFinal isPublic
         type: int
+        field: <testLibrary>::@extensionType::E::@field::it
   leftDelimiter: {
   parameter: DefaultFormalParameter
     parameter: SuperFormalParameter
       superKeyword: super
       period: .
       name: foo
-      declaredElement: <testLibraryFragment> foo@53
+      declaredFragment: <testLibraryFragment> foo@53
         element: hasImplicitType isFinal isPublic
           type: dynamic
-    declaredElement: <testLibraryFragment> foo@53
+    declaredFragment: <testLibraryFragment> foo@53
       element: hasImplicitType isFinal isPublic
         type: dynamic
   rightDelimiter: }
@@ -67,16 +62,10 @@
   E.named(this.it, super.foo);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeConstructorWithSuperFormalParameter,
-          46,
-          5,
-        ),
-      ],
+      [error(diag.extensionTypeConstructorWithSuperFormalParameter, 46, 5)],
     );
 
-    var node = findNode.singleFormalParameterList;
+    var node = findNode.formalParameterList('super.foo');
     assertResolvedNodeText(node, r'''
 FormalParameterList
   leftParenthesis: (
@@ -84,14 +73,15 @@
     thisKeyword: this
     period: .
     name: it
-    declaredElement: <testLibraryFragment> it@42
+    declaredFragment: <testLibraryFragment> it@42
       element: hasImplicitType isFinal isPublic
         type: int
+        field: <testLibrary>::@extensionType::E::@field::it
   parameter: SuperFormalParameter
     superKeyword: super
     period: .
     name: foo
-    declaredElement: <testLibraryFragment> foo@52
+    declaredFragment: <testLibraryFragment> foo@52
       element: hasImplicitType isFinal isPublic
         type: dynamic
   rightParenthesis: )
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_invocation_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_invocation_test.dart
index c671832..eadb556e 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_invocation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_constructor_with_super_invocation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,13 +23,7 @@
   E.named() : it = 0, super.named();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeConstructorWithSuperInvocation,
-          49,
-          5,
-        ),
-      ],
+      [error(diag.extensionTypeConstructorWithSuperInvocation, 49, 5)],
     );
 
     var node = findNode.singleSuperConstructorInvocation;
@@ -56,12 +50,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.finalNotInitializedConstructor1, 43, 1),
-        error(
-          CompileTimeErrorCode.extensionTypeConstructorWithSuperInvocation,
-          55,
-          5,
-        ),
+        error(diag.finalNotInitializedConstructor1, 43, 1),
+        error(diag.extensionTypeConstructorWithSuperInvocation, 55, 5),
       ],
     );
   }
@@ -73,13 +63,7 @@
   E.named() : it = 0, super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeConstructorWithSuperInvocation,
-          49,
-          5,
-        ),
-      ],
+      [error(diag.extensionTypeConstructorWithSuperInvocation, 49, 5)],
     );
 
     var node = findNode.singleSuperConstructorInvocation;
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_declares_instance_field_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_declares_instance_field_test.dart
index bd73549..69d9ddc 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_declares_instance_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_declares_instance_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   final int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 39, 3)],
+      [error(diag.extensionTypeDeclaresInstanceField, 39, 3)],
     );
   }
 
@@ -58,9 +58,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 37, 3),
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 42, 3),
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 47, 5),
+        error(diag.extensionTypeDeclaresInstanceField, 37, 3),
+        error(diag.extensionTypeDeclaresInstanceField, 42, 3),
+        error(diag.extensionTypeDeclaresInstanceField, 47, 5),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_declares_member_of_object_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_declares_member_of_object_test.dart
index 454989b..8143a9cf 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_declares_member_of_object_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_declares_member_of_object_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   int get hashCode => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject, 37, 8)],
+      [error(diag.extensionTypeDeclaresMemberOfObject, 37, 8)],
     );
   }
 
@@ -38,19 +38,11 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject, 42, 2),
-        error(CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject, 75, 8),
-        error(CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject, 99, 8),
-        error(
-          CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject,
-          131,
-          11,
-        ),
-        error(
-          CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject,
-          162,
-          12,
-        ),
+        error(diag.extensionTypeDeclaresMemberOfObject, 42, 2),
+        error(diag.extensionTypeDeclaresMemberOfObject, 75, 8),
+        error(diag.extensionTypeDeclaresMemberOfObject, 99, 8),
+        error(diag.extensionTypeDeclaresMemberOfObject, 131, 11),
+        error(diag.extensionTypeDeclaresMemberOfObject, 162, 12),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_implements_disallowed_type_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_implements_disallowed_type_test.dart
index c1e2e54..700031d 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_implements_disallowed_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_implements_disallowed_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,13 +22,7 @@
 extension type A(int it) implements X {}
 typedef X = dynamic;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 36, 1)],
     );
   }
 
@@ -38,13 +32,7 @@
 extension type A(int it) implements X {}
 typedef X = void Function();
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 36, 1)],
     );
   }
 
@@ -60,13 +48,7 @@
       '''
 extension type A(int it) implements Function {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          36,
-          8,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 36, 8)],
     );
   }
 
@@ -75,13 +57,7 @@
       '''
 extension type A(int it) implements FutureOr<int> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          36,
-          13,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 36, 13)],
     );
   }
 
@@ -91,7 +67,7 @@
 extension type A(int it) implements X {}
 typedef X = num?;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 36, 1)],
+      [error(diag.nullableTypeInImplementsClause, 36, 1)],
     );
   }
 
@@ -107,13 +83,7 @@
 extension type A(int it) implements X {}
 typedef X = (int, String);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 36, 1)],
     );
   }
 
@@ -122,13 +92,7 @@
       '''
 extension type A<T>(int it) implements T {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          39,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 39, 1)],
     );
   }
 
@@ -138,13 +102,7 @@
 extension type A(int it) implements X {}
 typedef X = void;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeImplementsDisallowedType,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsDisallowedType, 36, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_implements_itself_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_implements_itself_test.dart
index 9d939e4..a72115e 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_implements_itself_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_implements_itself_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,8 +22,8 @@
 extension type B(int it) implements A {}
 ''',
       [
-        error(CompileTimeErrorCode.extensionTypeImplementsItself, 15, 1),
-        error(CompileTimeErrorCode.extensionTypeImplementsItself, 56, 1),
+        error(diag.extensionTypeImplementsItself, 15, 1),
+        error(diag.extensionTypeImplementsItself, 56, 1),
       ],
     );
   }
@@ -33,7 +33,7 @@
       '''
 extension type A(int it) implements A {}
 ''',
-      [error(CompileTimeErrorCode.extensionTypeImplementsItself, 15, 1)],
+      [error(diag.extensionTypeImplementsItself, 15, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_implements_not_supertype_of_erasure_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_implements_not_supertype_of_erasure_test.dart
index 6441e36..36e628b 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_implements_not_supertype_of_erasure_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_implements_not_supertype_of_erasure_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 extension type A(int it) {}
 extension type B(A it) implements num {}
 ''',
-      [error(CompileTimeErrorCode.extensionTypeImplementsNotSupertype, 62, 3)],
+      [error(diag.extensionTypeImplementsNotSupertype, 62, 3)],
     );
   }
 
@@ -30,7 +30,7 @@
       '''
 extension type A(int it) implements String {}
 ''',
-      [error(CompileTimeErrorCode.extensionTypeImplementsNotSupertype, 36, 6)],
+      [error(diag.extensionTypeImplementsNotSupertype, 36, 6)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_implements_representation_not_supertype_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_implements_representation_not_supertype_test.dart
index c2124cf..e0c7e36 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_implements_representation_not_supertype_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_implements_representation_not_supertype_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,14 +24,7 @@
 extension type A(String it) {}
 extension type B(int it) implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .extensionTypeImplementsRepresentationNotSupertype,
-          67,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeImplementsRepresentationNotSupertype, 67, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_inherited_member_conflict_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_inherited_member_conflict_test.dart
index e4e745f..89f8e86 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_inherited_member_conflict_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_inherited_member_conflict_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -37,7 +37,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
+          diag.extensionTypeInheritedMemberConflict,
           109,
           1,
           contextMessages: [message(testFile, 35, 3), message(testFile, 82, 3)],
@@ -57,7 +57,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
+          diag.extensionTypeInheritedMemberConflict,
           81,
           1,
           contextMessages: [message(testFile, 24, 3), message(testFile, 57, 3)],
@@ -115,7 +115,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
+          diag.extensionTypeInheritedMemberConflict,
           88,
           1,
           contextMessages: [message(testFile, 17, 3), message(testFile, 61, 3)],
@@ -163,7 +163,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.extensionTypeInheritedMemberConflict,
+          diag.extensionTypeInheritedMemberConflict,
           139,
           1,
           contextMessages: [message(testFile, 17, 3), message(testFile, 51, 3)],
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_representation_depends_on_itself_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_representation_depends_on_itself_test.dart
index 76a061d..6eb5d63 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_representation_depends_on_itself_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_representation_depends_on_itself_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,16 +24,8 @@
 extension type B(A it) {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-          15,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-          42,
-          1,
-        ),
+        error(diag.extensionTypeRepresentationDependsOnItself, 15, 1),
+        error(diag.extensionTypeRepresentationDependsOnItself, 42, 1),
       ],
     );
   }
@@ -46,16 +38,8 @@
 extension type B(List<A> it) {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-          15,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-          48,
-          1,
-        ),
+        error(diag.extensionTypeRepresentationDependsOnItself, 15, 1),
+        error(diag.extensionTypeRepresentationDependsOnItself, 48, 1),
       ],
     );
   }
@@ -65,13 +49,7 @@
       '''
 extension type A(A it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-          15,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeRepresentationDependsOnItself, 15, 1)],
     );
   }
 
@@ -80,13 +58,7 @@
       '''
 extension type A(List<A> it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationDependsOnItself,
-          15,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeRepresentationDependsOnItself, 15, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_representation_type_bottom_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_representation_type_bottom_test.dart
index 4fc9ad7..37b712c 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_representation_type_bottom_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_representation_type_bottom_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,13 +21,7 @@
       '''
 extension type A(Never it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationTypeBottom,
-          17,
-          5,
-        ),
-      ],
+      [error(diag.extensionTypeRepresentationTypeBottom, 17, 5)],
     );
   }
 
@@ -42,13 +36,7 @@
       '''
 extension type A<T extends Never>(T it) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.extensionTypeRepresentationTypeBottom,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.extensionTypeRepresentationTypeBottom, 34, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/extension_type_with_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/extension_type_with_abstract_member_test.dart
index 6ec51e5..8031e8d 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_type_with_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_type_with_abstract_member_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +22,7 @@
   int get foo;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionTypeWithAbstractMember, 29, 12)],
+      [error(diag.extensionTypeWithAbstractMember, 29, 12)],
     );
   }
 
@@ -42,7 +41,7 @@
   static int get foo;
 }
 ''',
-      [error(ParserErrorCode.missingFunctionBody, 47, 1)],
+      [error(diag.missingFunctionBody, 47, 1)],
     );
   }
 
@@ -53,7 +52,7 @@
   void foo();
 }
 ''',
-      [error(CompileTimeErrorCode.extensionTypeWithAbstractMember, 29, 11)],
+      [error(diag.extensionTypeWithAbstractMember, 29, 11)],
     );
   }
 
@@ -72,7 +71,7 @@
   static void foo();
 }
 ''',
-      [error(ParserErrorCode.missingFunctionBody, 46, 1)],
+      [error(diag.missingFunctionBody, 46, 1)],
     );
   }
 
@@ -83,7 +82,7 @@
   set foo(int _);
 }
 ''',
-      [error(CompileTimeErrorCode.extensionTypeWithAbstractMember, 29, 15)],
+      [error(diag.extensionTypeWithAbstractMember, 29, 15)],
     );
   }
 
@@ -102,7 +101,7 @@
   static set foo(int _);
 }
 ''',
-      [error(ParserErrorCode.missingFunctionBody, 50, 1)],
+      [error(diag.missingFunctionBody, 50, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/external_field_constructor_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/external_field_constructor_initializer_test.dart
index 9712456..46b2908 100644
--- a/pkg/analyzer/test/src/diagnostics/external_field_constructor_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/external_field_constructor_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A() : x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldConstructorInitializer, 36, 1)],
+      [error(diag.externalFieldConstructorInitializer, 36, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
   A() : x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldConstructorInitializer, 42, 1)],
+      [error(diag.externalFieldConstructorInitializer, 42, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
   A(this.x);
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldConstructorInitializer, 43, 1)],
+      [error(diag.externalFieldConstructorInitializer, 43, 1)],
     );
   }
 
@@ -68,7 +68,7 @@
   A(this.x);
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldConstructorInitializer, 37, 1)],
+      [error(diag.externalFieldConstructorInitializer, 37, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/external_field_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/external_field_initializer_test.dart
index 8fea48b..17da7da 100644
--- a/pkg/analyzer/test/src/diagnostics/external_field_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/external_field_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   external final int x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldInitializer, 31, 1)],
+      [error(diag.externalFieldInitializer, 31, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
   external int x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldInitializer, 25, 1)],
+      [error(diag.externalFieldInitializer, 25, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   external static final int x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldInitializer, 38, 1)],
+      [error(diag.externalFieldInitializer, 38, 1)],
     );
   }
 
@@ -79,7 +79,7 @@
   external static int x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.externalFieldInitializer, 32, 1)],
+      [error(diag.externalFieldInitializer, 32, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/external_variable_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/external_variable_initializer_test.dart
index de80bd6..d8e3b06 100644
--- a/pkg/analyzer/test/src/diagnostics/external_variable_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/external_variable_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 external final int x = 0;
 ''',
-      [error(CompileTimeErrorCode.externalVariableInitializer, 19, 1)],
+      [error(diag.externalVariableInitializer, 19, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
       '''
 external int x = 0;
 ''',
-      [error(CompileTimeErrorCode.externalVariableInitializer, 13, 1)],
+      [error(diag.externalVariableInitializer, 13, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/extra_annotation_on_struct_field_test.dart b/pkg/analyzer/test/src/diagnostics/extra_annotation_on_struct_field_test.dart
index 9653cd5..791dbcb 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_annotation_on_struct_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_annotation_on_struct_field_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   external int x;
 }
 ''',
-      [error(FfiCode.extraAnnotationOnStructField, 63, 8)],
+      [error(diag.extraAnnotationOnStructField, 63, 8)],
     );
   }
 }
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 c9436d9..8e62f7a9 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   const A(0);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 55, 1)],
+      [error(diag.extraPositionalArgumentsCouldBeNamed, 55, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
   const B() : super(0);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 76, 1)],
+      [error(diag.extraPositionalArgumentsCouldBeNamed, 76, 1)],
     );
   }
 
@@ -56,7 +56,7 @@
   const B(0);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 70, 1)],
+      [error(diag.extraPositionalArgumentsCouldBeNamed, 70, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
   g(f());
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 56, 3)],
+      [error(diag.extraPositionalArgumentsCouldBeNamed, 56, 3)],
     );
     assertType(
       findNode.methodInvocation('f()').typeArgumentTypes!.single,
@@ -86,7 +86,7 @@
   (int x, {int y = 0}) {} (0, 1);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 39, 1)],
+      [error(diag.extraPositionalArgumentsCouldBeNamed, 39, 1)],
     );
   }
 
@@ -99,8 +99,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 13, 1),
-        error(WarningCode.unusedElementParameter, 33, 1),
+        error(diag.extraPositionalArgumentsCouldBeNamed, 13, 1),
+        error(diag.unusedElementParameter, 33, 1),
       ],
     );
   }
@@ -113,7 +113,7 @@
 @A(0, 1)
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 41, 1)],
+      [error(diag.extraPositionalArguments, 41, 1)],
     );
   }
 
@@ -125,7 +125,7 @@
   f(0, 1, '2');
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 26, 1)],
+      [error(diag.extraPositionalArgumentsCouldBeNamed, 26, 1)],
     );
   }
 
@@ -139,8 +139,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extraPositionalArgumentsCouldBeNamed, 71, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 71, 1),
+        error(diag.extraPositionalArgumentsCouldBeNamed, 71, 1),
+        error(diag.undefinedIdentifier, 71, 1),
       ],
     );
   }
@@ -158,7 +158,7 @@
   const A(0);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 44, 1)],
+      [error(diag.extraPositionalArguments, 44, 1)],
     );
   }
 
@@ -172,7 +172,7 @@
   const B() : super(0);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 65, 1)],
+      [error(diag.extraPositionalArguments, 65, 1)],
     );
   }
 
@@ -183,7 +183,7 @@
   v(0)
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 13, 1)],
+      [error(diag.extraPositionalArguments, 13, 1)],
     );
   }
 
@@ -194,7 +194,7 @@
   (int x) {} (0, 1);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 26, 1)],
+      [error(diag.extraPositionalArguments, 26, 1)],
     );
   }
 
@@ -206,7 +206,7 @@
   f(0, 1, '2');
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 20, 1)],
+      [error(diag.extraPositionalArguments, 20, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extra_size_annotation_carray_test.dart b/pkg/analyzer/test/src/diagnostics/extra_size_annotation_carray_test.dart
index 9742763..3895846 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_size_annotation_carray_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_size_annotation_carray_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -50,7 +50,7 @@
   external Array<Uint8> a0;
 }
 ''',
-      [error(FfiCode.extraSizeAnnotationCarray, 65, 9)],
+      [error(diag.extraSizeAnnotationCarray, 65, 9)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart b/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
index 3bb88c4..0a205ec 100644
--- a/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extraneous_modifier_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'parser_diagnostics.dart';
@@ -21,9 +21,7 @@
   A(const a);
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 14, 5),
-    ]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 14, 5)]);
 
     var node = parseResult.findNode.simpleFormalParameter('a);');
     assertParsedNodeText(node, r'''
@@ -55,9 +53,7 @@
   A(var super.a);
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.extraneousModifier, 14, 3),
-    ]);
+    parseResult.assertErrors([error(diag.extraneousModifier, 14, 3)]);
 
     var node = parseResult.findNode.superFormalParameter('super.a');
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_address_of_cast_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_address_of_cast_test.dart
index 37629d5..2008efe 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_address_of_cast_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_address_of_cast_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   external Array<Int8> arr;
 }
 ''',
-      [error(FfiCode.addressPosition, 200, 7)],
+      [error(diag.addressPosition, 200, 7)],
     );
   }
 
@@ -59,7 +59,7 @@
   external Array<Int8> arr;
 }
 ''',
-      [error(FfiCode.addressPosition, 202, 7)],
+      [error(diag.addressPosition, 202, 7)],
     );
   }
 
@@ -99,7 +99,7 @@
   myNonLeafNative(buffer.address.cast());
 }
 ''',
-      [error(FfiCode.addressPosition, 204, 7)],
+      [error(diag.addressPosition, 204, 7)],
     );
   }
 
@@ -138,7 +138,7 @@
   external Array<Int8> arr;
 }
 ''',
-      [error(FfiCode.addressPosition, 196, 7)],
+      [error(diag.addressPosition, 196, 7)],
     );
   }
 
@@ -161,7 +161,7 @@
   external Array<Int8> arr;
       }
 ''',
-      [error(FfiCode.addressPosition, 198, 7)],
+      [error(diag.addressPosition, 198, 7)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_array_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_array_test.dart
index 80660b0..4879d2e 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_array_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_array_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   external Array<Int8> arr;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 67, 2)],
+      [error(diag.nonPositiveArrayDimension, 67, 2)],
     );
   }
 
@@ -50,7 +50,7 @@
   external Array<Int8> arr;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 67, 1)],
+      [error(diag.nonPositiveArrayDimension, 67, 1)],
     );
   }
 
@@ -64,7 +64,7 @@
   external Array<Array<Int8>> arr;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 74, 2)],
+      [error(diag.nonPositiveArrayDimension, 74, 2)],
     );
   }
 
@@ -89,7 +89,7 @@
   external Array<Array<Int8>> arr;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 74, 1)],
+      [error(diag.nonPositiveArrayDimension, 74, 1)],
     );
   }
 
@@ -103,7 +103,7 @@
   external Array<Array<Int8>> arr;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 76, 2)],
+      [error(diag.nonPositiveArrayDimension, 76, 2)],
     );
   }
 
@@ -139,7 +139,7 @@
   external Array<Array<Int8>> arr;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 76, 1)],
+      [error(diag.nonPositiveArrayDimension, 76, 1)],
     );
   }
 
@@ -153,7 +153,7 @@
   external Array<Array<Array<Int8>>> arr;
 }
 ''',
-      [error(FfiCode.negativeVariableDimension, 100, 2)],
+      [error(diag.negativeVariableDimension, 100, 2)],
     );
   }
 
@@ -200,7 +200,7 @@
   external Array<Int8> arr;
 }
 ''',
-      [error(FfiCode.negativeVariableDimension, 97, 2)],
+      [error(diag.negativeVariableDimension, 97, 2)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_async_callback_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_async_callback_test.dart
index 1e1df49..c8ed92d 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_async_callback_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_async_callback_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   NativeCallable<Int32 Function(Int32)>.isolateLocal(f, exceptionalReturn: e);
 }
 ''',
-      [error(FfiCode.argumentMustBeAConstant, 143, 1)],
+      [error(diag.argumentMustBeAConstant, 143, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   NativeCallable<Int32 Function(Int32)>.isolateLocal(f, exceptionalReturn: '?');
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 128, 3)],
+      [error(diag.mustBeASubtype, 128, 3)],
     );
   }
 
@@ -64,7 +64,7 @@
   NativeCallable<Void Function(Int32)>.isolateLocal(f, exceptionalReturn: 4);
 }
 ''',
-      [error(FfiCode.invalidExceptionValue, 109, 20)],
+      [error(diag.invalidExceptionValue, 109, 20)],
     );
   }
 
@@ -77,7 +77,7 @@
   NativeCallable<Int32 Function(Int32)>.isolateLocal(f);
 }
 ''',
-      [error(FfiCode.missingExceptionValue, 55, 53)],
+      [error(diag.missingExceptionValue, 55, 53)],
     );
   }
 
@@ -90,7 +90,7 @@
   NativeCallable<int Function(int)>.isolateLocal(f, exceptionalReturn: 4);
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 55, 46)],
+      [error(diag.mustBeANativeFunctionType, 55, 46)],
     );
   }
 
@@ -103,7 +103,7 @@
   NativeCallable<Int32 Function(Double)>.isolateLocal(f, exceptionalReturn: 4);
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 107, 1)],
+      [error(diag.mustBeASubtype, 107, 1)],
     );
   }
 
@@ -116,7 +116,7 @@
   NativeCallable.isolateLocal(f, exceptionalReturn: 4);
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 55, 27)],
+      [error(diag.mustBeANativeFunctionType, 55, 27)],
     );
   }
 
@@ -171,7 +171,7 @@
   NativeCallable<void Function(int)>.listener(f);
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 56, 43)],
+      [error(diag.mustBeANativeFunctionType, 56, 43)],
     );
   }
 
@@ -184,7 +184,7 @@
   NativeCallable<Void Function(Double)>.listener(f);
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 103, 1)],
+      [error(diag.mustBeASubtype, 103, 1)],
     );
   }
 
@@ -197,7 +197,7 @@
   NativeCallable.listener(f);
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 55, 23)],
+      [error(diag.mustBeANativeFunctionType, 55, 23)],
     );
   }
 
@@ -210,7 +210,7 @@
   NativeCallable<Int32 Function(Int32)>.listener(f);
 }
 ''',
-      [error(FfiCode.mustReturnVoid, 102, 1)],
+      [error(diag.mustReturnVoid, 102, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_leaf_call_must_not_use_handle_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_leaf_call_must_not_use_handle_test.dart
index 28a7ccc..f15407f 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_leaf_call_must_not_use_handle_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_leaf_call_must_not_use_handle_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   f();
 }
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 224, 10)],
+      [error(diag.leafCallMustNotReturnHandle, 224, 10)],
     );
   }
 
@@ -44,7 +44,7 @@
   f(MyClass());
 }
 ''',
-      [error(FfiCode.leafCallMustNotTakeHandle, 241, 10)],
+      [error(diag.leafCallMustNotTakeHandle, 241, 10)],
     );
   }
 
@@ -60,7 +60,7 @@
   external Object get foo;
 }
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 200, 3)],
+      [error(diag.leafCallMustNotReturnHandle, 200, 3)],
     );
   }
 
@@ -75,7 +75,7 @@
   l.lookupFunction<NativeReturnsHandle, ReturnsHandle>("timesFour", isLeaf:true);
 }
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 195, 19)],
+      [error(diag.leafCallMustNotReturnHandle, 195, 19)],
     );
   }
 
@@ -91,7 +91,7 @@
   l.lookupFunction<NativeTakesHandle, TakesHandle>("timesFour", isLeaf:true);
 }
 ''',
-      [error(FfiCode.leafCallMustNotTakeHandle, 216, 17)],
+      [error(diag.leafCallMustNotTakeHandle, 216, 17)],
     );
   }
 
@@ -103,7 +103,7 @@
 @Native<Handle Function()>(symbol: 'foo', isLeaf:true)
 external Object get foo;
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 95, 3)],
+      [error(diag.leafCallMustNotReturnHandle, 95, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart b/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart
index 61303da..dc4631d 100644
--- a/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ffi_native_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +26,7 @@
 
 void main() => print(Native.addressOf(() => 3));
 ''',
-      [error(FfiCode.argumentMustBeNative, 58, 7)],
+      [error(diag.argumentMustBeNative, 58, 7)],
     );
   }
 
@@ -41,7 +40,7 @@
 
 void main() => print(Native.addressOf<Pointer<Double>>(global));
 ''',
-      [error(FfiCode.mustBeASubtype, 85, 41)],
+      [error(diag.mustBeASubtype, 85, 41)],
     );
   }
 
@@ -57,7 +56,7 @@
   print(Native.addressOf<NativeFunction<Int8 Function()>>(foo));
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 91, 54)],
+      [error(diag.mustBeASubtype, 91, 54)],
     );
   }
 
@@ -73,7 +72,7 @@
   print(Native.addressOf(foo));
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 91, 21)],
+      [error(diag.mustBeANativeFunctionType, 91, 21)],
     );
   }
 
@@ -89,7 +88,7 @@
   print(Native.addressOf(foo));
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 74, 21)],
+      [error(diag.mustBeANativeFunctionType, 74, 21)],
     );
   }
 
@@ -103,7 +102,7 @@
 
 void main() => print(Native.addressOf(global));
 ''',
-      [error(FfiCode.mustBeASubtype, 85, 24)],
+      [error(diag.mustBeASubtype, 85, 24)],
     );
   }
 
@@ -121,7 +120,7 @@
   print(Native.addressOf(condition ? foo : bar));
 }
 ''',
-      [error(FfiCode.argumentMustBeNative, 171, 21)],
+      [error(diag.argumentMustBeNative, 171, 21)],
     );
   }
 
@@ -135,7 +134,7 @@
 
 void main() => print(Native.addressOf<NativeFunction>(foo));
 ''',
-      [error(FfiCode.mustBeASubtype, 90, 37)],
+      [error(diag.mustBeASubtype, 90, 37)],
     );
   }
 
@@ -149,7 +148,7 @@
 
 void main() => print(Native.addressOf<NativeFunction>(foo));
 ''',
-      [error(FfiCode.mustBeASubtype, 73, 37)],
+      [error(diag.mustBeASubtype, 73, 37)],
     );
   }
 
@@ -160,7 +159,7 @@
 
 void main() => print(Native.addressOf('malloc'));
 ''',
-      [error(FfiCode.argumentMustBeNative, 58, 8)],
+      [error(diag.argumentMustBeNative, 58, 8)],
     );
   }
 
@@ -197,7 +196,7 @@
 
 import 'dart:ffi';
 ''',
-      [error(FfiCode.ffiNativeInvalidDuplicateDefaultAsset, 22, 12)],
+      [error(diag.ffiNativeInvalidDuplicateDefaultAsset, 22, 12)],
     );
   }
 
@@ -212,7 +211,7 @@
 
 const defaults = DefaultAsset('foo');
 ''',
-      [error(FfiCode.ffiNativeInvalidDuplicateDefaultAsset, 22, 8)],
+      [error(diag.ffiNativeInvalidDuplicateDefaultAsset, 22, 8)],
     );
   }
 
@@ -269,7 +268,7 @@
 @Native
 external int foo();
 ''',
-      [error(CompileTimeErrorCode.noAnnotationConstructorArguments, 20, 7)],
+      [error(diag.noAnnotationConstructorArguments, 20, 7)],
     );
   }
 
@@ -281,7 +280,7 @@
 @Native()
 external int foo();
 ''',
-      [error(FfiCode.nativeFunctionMissingType, 43, 3)],
+      [error(diag.nativeFunctionMissingType, 43, 3)],
     );
   }
 
@@ -310,13 +309,7 @@
   external void doesntMatter(double x);
 }
 ''',
-      [
-        error(
-          FfiCode.ffiNativeUnexpectedNumberOfParametersWithReceiver,
-          102,
-          12,
-        ),
-      ],
+      [error(diag.ffiNativeUnexpectedNumberOfParametersWithReceiver, 102, 12)],
     );
   }
 
@@ -327,7 +320,7 @@
 @Native<Handle Function()>(symbol: 'DoesntMatter', isLeaf:true)
 external Object doesntMatter();
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 99, 12)],
+      [error(diag.leafCallMustNotReturnHandle, 99, 12)],
     );
   }
 
@@ -338,7 +331,7 @@
 @Native<Void Function(Handle)>(symbol: 'DoesntMatter', isLeaf:true)
 external void doesntMatter(Object o);
 ''',
-      [error(FfiCode.leafCallMustNotTakeHandle, 101, 12)],
+      [error(diag.leafCallMustNotTakeHandle, 101, 12)],
     );
   }
 
@@ -349,7 +342,7 @@
 @Native<IntPtr Function(int)>(symbol: 'doesntmatter')
 external int nonFfiParameter(int v);
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 86, 15)],
+      [error(diag.mustBeANativeFunctionType, 86, 15)],
     );
   }
 
@@ -360,7 +353,7 @@
 @Native<double Function(IntPtr)>(symbol: 'doesntmatter')
 external double nonFfiReturnType(int v);
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 92, 16)],
+      [error(diag.mustBeANativeFunctionType, 92, 16)],
     );
   }
 
@@ -379,7 +372,7 @@
 @Native<Void Function(Double)>(symbol: 'DoesntMatter')
 external void doesntMatter(double x, double y);
 ''',
-      [error(FfiCode.ffiNativeUnexpectedNumberOfParameters, 88, 12)],
+      [error(diag.ffiNativeUnexpectedNumberOfParameters, 88, 12)],
     );
   }
 
@@ -390,7 +383,7 @@
 @Native<Void Function(Double, Double)>(symbol: 'DoesntMatter')
 external void doesntMatter(double x);
 ''',
-      [error(FfiCode.ffiNativeUnexpectedNumberOfParameters, 96, 12)],
+      [error(diag.ffiNativeUnexpectedNumberOfParameters, 96, 12)],
     );
   }
 
@@ -401,7 +394,7 @@
 @Native<Handle Function(Uint32, Uint32, Handle)>(symbol: 'doesntmatter')
 external void voidReturn(int width, int height, Object outImage);
 ''',
-      [error(FfiCode.mustBeASubtype, 106, 10)],
+      [error(diag.mustBeASubtype, 106, 10)],
     );
   }
 
@@ -412,7 +405,7 @@
 @Native<IntPtr Function(Double)>(symbol: 'doesntmatter')
 external int wrongFfiParameter(int v);
 ''',
-      [error(FfiCode.mustBeASubtype, 89, 17)],
+      [error(diag.mustBeASubtype, 89, 17)],
     );
   }
 
@@ -423,7 +416,7 @@
 @Native<IntPtr Function(IntPtr)>(symbol: 'doesntmatter')
 external double wrongFfiReturnType(int v);
 ''',
-      [error(FfiCode.mustBeASubtype, 92, 18)],
+      [error(diag.mustBeASubtype, 92, 18)],
     );
   }
 }
@@ -460,7 +453,7 @@
 @Array(0)
 external Array<IntPtr> field;
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 37, 1)],
+      [error(diag.nonPositiveArrayDimension, 37, 1)],
     );
   }
 
@@ -473,7 +466,7 @@
 @Array(10, 20)
 external Array<IntPtr> field;
 ''',
-      [error(FfiCode.sizeAnnotationDimensions, 30, 14)],
+      [error(diag.sizeAnnotationDimensions, 30, 14)],
     );
   }
 
@@ -485,7 +478,7 @@
 @Native()
 external Array<IntPtr> field;
 ''',
-      [error(FfiCode.missingSizeAnnotationCarray, 53, 5)],
+      [error(diag.missingSizeAnnotationCarray, 53, 5)],
     );
   }
 
@@ -527,7 +520,7 @@
 @Native<IntPtr Function(IntPtr)>()
 external int field;
 ''',
-      [error(FfiCode.nativeFieldInvalidType, 67, 5)],
+      [error(diag.nativeFieldInvalidType, 67, 5)],
     );
   }
 
@@ -541,7 +534,7 @@
   external int field;
 }
 ''',
-      [error(FfiCode.nativeFieldNotStatic, 67, 5)],
+      [error(diag.nativeFieldNotStatic, 67, 5)],
     );
   }
 
@@ -554,8 +547,8 @@
 int field;
 ''',
       [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 42, 5),
-        error(FfiCode.ffiNativeMustBeExternal, 42, 5),
+        error(diag.notInitializedNonNullableVariable, 42, 5),
+        error(diag.ffiNativeMustBeExternal, 42, 5),
       ],
     );
   }
@@ -568,7 +561,7 @@
 @Native<NativeFunction<Double Function()>>()
 external int Function() field;
 ''',
-      [error(FfiCode.mustBeASubtype, 89, 5)],
+      [error(diag.mustBeASubtype, 89, 5)],
     );
   }
 
@@ -580,7 +573,7 @@
 @Native<Double>()
 external int field;
 ''',
-      [error(FfiCode.mustBeASubtype, 51, 5)],
+      [error(diag.mustBeASubtype, 51, 5)],
     );
   }
 
@@ -595,7 +588,7 @@
 @Native()
 external Pointer<IntPtr> valid;
 ''',
-      [error(FfiCode.nativeFieldMissingType, 43, 7)],
+      [error(diag.nativeFieldMissingType, 43, 7)],
     );
   }
 
@@ -607,7 +600,7 @@
 @Native<NativeFunction<Void Function()>>()
 external void Function() field;
 ''',
-      [error(FfiCode.nativeFieldInvalidType, 88, 5)],
+      [error(diag.nativeFieldInvalidType, 88, 5)],
     );
   }
 
@@ -619,7 +612,7 @@
 @Native<Handle>()
 external Object field;
 ''',
-      [error(FfiCode.nativeFieldInvalidType, 54, 5)],
+      [error(diag.nativeFieldInvalidType, 54, 5)],
     );
   }
 }
@@ -634,7 +627,7 @@
 @Native<IntPtr>()
 external int foo();
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 51, 3)],
+      [error(diag.mustBeANativeFunctionType, 51, 3)],
     );
   }
 
@@ -646,7 +639,7 @@
 @Native()
 external int foo();
 ''',
-      [error(FfiCode.nativeFunctionMissingType, 43, 3)],
+      [error(diag.nativeFunctionMissingType, 43, 3)],
     );
   }
 
@@ -660,7 +653,7 @@
 @a
 external int foo();
 ''',
-      [error(FfiCode.nativeFunctionMissingType, 57, 3)],
+      [error(diag.nativeFunctionMissingType, 57, 3)],
     );
   }
 
@@ -688,7 +681,7 @@
 @Native
 external int foo();
 ''',
-      [error(CompileTimeErrorCode.noAnnotationConstructorArguments, 20, 7)],
+      [error(diag.noAnnotationConstructorArguments, 20, 7)],
     );
   }
 
@@ -944,7 +937,7 @@
 @Native<Int32 Function(Int32)>(isLeaf: true)
 external int foo(int v);
 ''',
-      [error(FfiCode.ffiNativeInvalidMultipleAnnotations, 53, 6)],
+      [error(diag.ffiNativeInvalidMultipleAnnotations, 53, 6)],
     );
   }
 
@@ -959,7 +952,7 @@
 @duplicate
 external int foo(int v);
 ''',
-      [error(FfiCode.ffiNativeInvalidMultipleAnnotations, 118, 9)],
+      [error(diag.ffiNativeInvalidMultipleAnnotations, 118, 9)],
     );
   }
 
@@ -983,13 +976,7 @@
   external void doesntMatter(double x);
 }
 ''',
-      [
-        error(
-          FfiCode.ffiNativeUnexpectedNumberOfParametersWithReceiver,
-          80,
-          12,
-        ),
-      ],
+      [error(diag.ffiNativeUnexpectedNumberOfParametersWithReceiver, 80, 12)],
     );
   }
 
@@ -1000,7 +987,7 @@
 @Native<Handle Function()>(isLeaf:true)
 external Object doesntMatter();
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 75, 12)],
+      [error(diag.leafCallMustNotReturnHandle, 75, 12)],
     );
   }
 
@@ -1013,7 +1000,7 @@
 @annotation
 external Object doesntMatter();
 ''',
-      [error(FfiCode.leafCallMustNotReturnHandle, 107, 12)],
+      [error(diag.leafCallMustNotReturnHandle, 107, 12)],
     );
   }
 
@@ -1024,7 +1011,7 @@
 @Native<Void Function(Handle)>(symbol: 'DoesntMatter', isLeaf:true)
 external void doesntMatter(Object o);
 ''',
-      [error(FfiCode.leafCallMustNotTakeHandle, 101, 12)],
+      [error(diag.leafCallMustNotTakeHandle, 101, 12)],
     );
   }
 
@@ -1037,7 +1024,7 @@
 @annotation
 external void doesntMatter(Object o);
 ''',
-      [error(FfiCode.leafCallMustNotTakeHandle, 133, 12)],
+      [error(diag.leafCallMustNotTakeHandle, 133, 12)],
     );
   }
 
@@ -1048,7 +1035,7 @@
 @Native<IntPtr Function(int)>()
 external int nonFfiParameter(int v);
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 64, 15)],
+      [error(diag.mustBeANativeFunctionType, 64, 15)],
     );
   }
 
@@ -1059,7 +1046,7 @@
 @Native<double Function(IntPtr)>()
 external double nonFfiReturnType(int v);
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 70, 16)],
+      [error(diag.mustBeANativeFunctionType, 70, 16)],
     );
   }
 
@@ -1078,7 +1065,7 @@
 @Native<Void Function(Double)>()
 external void doesntMatter(double x, double y);
 ''',
-      [error(FfiCode.ffiNativeUnexpectedNumberOfParameters, 66, 12)],
+      [error(diag.ffiNativeUnexpectedNumberOfParameters, 66, 12)],
     );
   }
 
@@ -1089,7 +1076,7 @@
 @Native<Void Function(Double, Double)>()
 external void doesntMatter(double x);
 ''',
-      [error(FfiCode.ffiNativeUnexpectedNumberOfParameters, 74, 12)],
+      [error(diag.ffiNativeUnexpectedNumberOfParameters, 74, 12)],
     );
   }
 
@@ -1108,7 +1095,7 @@
 @Native<Int8 Function(Int64, VarArgs<(Int32, Double)>)>()
 external int doesntMatter(int x, int y);
 ''',
-      [error(FfiCode.ffiNativeUnexpectedNumberOfParameters, 90, 12)],
+      [error(diag.ffiNativeUnexpectedNumberOfParameters, 90, 12)],
     );
   }
 
@@ -1119,7 +1106,7 @@
 @Native<Int8 Function(Int64, VarArgs<(Int32, Double)>)>()
 external int doesntMatter(int x, int y, double z, int superfluous);
 ''',
-      [error(FfiCode.ffiNativeUnexpectedNumberOfParameters, 90, 12)],
+      [error(diag.ffiNativeUnexpectedNumberOfParameters, 90, 12)],
     );
   }
 
@@ -1130,7 +1117,7 @@
 @Native<Handle Function(Uint32, Uint32, Handle)>()
 external void voidReturn(int width, int height, Object outImage);
 ''',
-      [error(FfiCode.mustBeASubtype, 84, 10)],
+      [error(diag.mustBeASubtype, 84, 10)],
     );
   }
 
@@ -1141,7 +1128,7 @@
 @Native<IntPtr Function(Double)>()
 external int wrongFfiParameter(int v);
 ''',
-      [error(FfiCode.mustBeASubtype, 67, 17)],
+      [error(diag.mustBeASubtype, 67, 17)],
     );
   }
 
@@ -1152,7 +1139,7 @@
 @Native<IntPtr Function(IntPtr)>()
 external double wrongFfiReturnType(int v);
 ''',
-      [error(FfiCode.mustBeASubtype, 70, 18)],
+      [error(diag.mustBeASubtype, 70, 18)],
     );
   }
 }
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 6e20089..d5acd80 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -16,8 +16,7 @@
 @reflectiveTest
 class FinalInitializedByMultipleInitializersTest
     extends PubPackageResolutionTest {
-  static const _errorCode =
-      CompileTimeErrorCode.fieldInitializedByMultipleInitializers;
+  static const _errorCode = diag.fieldInitializedByMultipleInitializers;
 
   @SkippedTest() // TODO(scheglov): implement augmentation
   test_class_augmentation2_bothInitialize() async {
@@ -170,7 +169,19 @@
 ''');
   }
 
-  test_class_two_initializers() async {
+  test_class_two_initializers_initInDeclaration() async {
+    await assertErrorsInCode(
+      r'''
+class A {
+  int x = 0;
+  A() : x = 0, x = 1 {}
+}
+''',
+      [error(_errorCode, 38, 1)],
+    );
+  }
+
+  test_class_two_initializers_noInitInDeclaration() async {
     await assertErrorsInCode(
       r'''
 class A {
@@ -202,10 +213,7 @@
   const E() : x = 0, x = 1;
 }
 ''',
-      [
-        error(CompileTimeErrorCode.constEvalThrowsException, 11, 1),
-        error(_errorCode, 50, 1),
-      ],
+      [error(diag.constEvalThrowsException, 11, 1), error(_errorCode, 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 96e61db..db66a8e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -40,11 +40,7 @@
 
     await resolveFile2(a);
     assertErrorsInResult([
-      error(
-        CompileTimeErrorCode.fieldInitializedInInitializerAndDeclaration,
-        56,
-        1,
-      ),
+      error(diag.fieldInitializedInInitializerAndDeclaration, 56, 1),
     ]);
   }
 
@@ -56,13 +52,7 @@
   A() : x = 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializedInInitializerAndDeclaration,
-          37,
-          1,
-        ),
-      ],
+      [error(diag.fieldInitializedInInitializerAndDeclaration, 37, 1)],
     );
   }
 
@@ -76,12 +66,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constEvalThrowsException, 11, 1),
-        error(
-          CompileTimeErrorCode.fieldInitializedInInitializerAndDeclaration,
-          47,
-          1,
-        ),
+        error(diag.constEvalThrowsException, 11, 1),
+        error(diag.fieldInitializedInInitializerAndDeclaration, 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 b2b143a..1789b62 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -40,15 +40,23 @@
 
     await resolveFile2(a);
     assertErrorsInResult([
-      error(
-        CompileTimeErrorCode.fieldInitializedInParameterAndInitializer,
-        62,
-        1,
-      ),
+      error(diag.fieldInitializedInParameterAndInitializer, 62, 1),
     ]);
   }
 
-  test_class_fieldFormalParameter_initializer() async {
+  test_class_fieldFormalParameter_initializer_initInDeclaration() async {
+    await assertErrorsInCode(
+      r'''
+class A {
+  int x = 0;
+  A(this.x) : x = 1 {}
+}
+''',
+      [error(diag.fieldInitializedInParameterAndInitializer, 37, 1)],
+    );
+  }
+
+  test_class_fieldFormalParameter_initializer_noInitInDeclaration() async {
     await assertErrorsInCode(
       r'''
 class A {
@@ -56,13 +64,7 @@
   A(this.x) : x = 1 {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializedInParameterAndInitializer,
-          33,
-          1,
-        ),
-      ],
+      [error(diag.fieldInitializedInParameterAndInitializer, 33, 1)],
     );
   }
 
@@ -76,12 +78,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constEvalThrowsException, 11, 4),
-        error(
-          CompileTimeErrorCode.fieldInitializedInParameterAndInitializer,
-          52,
-          1,
-        ),
+        error(diag.constEvalThrowsException, 11, 4),
+        error(diag.fieldInitializedInParameterAndInitializer, 52, 1),
       ],
     );
   }
@@ -93,13 +91,7 @@
   A.named(this.it) : it = 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializedInParameterAndInitializer,
-          48,
-          2,
-        ),
-      ],
+      [error(diag.fieldInitializedInParameterAndInitializer, 48, 2)],
     );
   }
 }
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 7fc9b02..207a447 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
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +23,7 @@
   factory A(this.x) => throw 0;
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerFactoryConstructor, 35, 6)],
+      [error(diag.fieldInitializerFactoryConstructor, 35, 6)],
     );
   }
 
@@ -39,8 +38,8 @@
       [
         // TODO(srawlins): Only report one error. Theoretically change Fasta to
         // report "Field initializer in factory constructor" as a parse error.
-        error(CompileTimeErrorCode.fieldInitializerFactoryConstructor, 43, 12),
-        error(ParserErrorCode.missingFunctionBody, 56, 1),
+        error(diag.fieldInitializerFactoryConstructor, 43, 12),
+        error(diag.missingFunctionBody, 56, 1),
       ],
     );
   }
@@ -59,7 +58,7 @@
   E._(0);
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerFactoryConstructor, 60, 6)],
+      [error(diag.fieldInitializerFactoryConstructor, 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 91d636e..40e205a 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -48,7 +48,7 @@
   A() : x = '';
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerNotAssignable, 31, 2)],
+      [error(diag.fieldInitializerNotAssignable, 31, 2)],
     );
   }
 }
@@ -65,7 +65,7 @@
   A(dynamic a) : i = a;
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerNotAssignable, 40, 1)],
+      [error(diag.fieldInitializerNotAssignable, 40, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
index 686bdc1..4d6ac2d 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_outside_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   dynamic field = ({this.field}) {};
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerOutsideConstructor, 30, 10)],
+      [error(diag.fieldInitializerOutsideConstructor, 30, 10)],
     );
   }
 
@@ -34,7 +34,7 @@
   m([this.x = 0]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerOutsideConstructor, 28, 6)],
+      [error(diag.fieldInitializerOutsideConstructor, 28, 6)],
     );
   }
 
@@ -47,7 +47,7 @@
   m(int this.x()) {}
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerOutsideConstructor, 35, 12)],
+      [error(diag.fieldInitializerOutsideConstructor, 35, 12)],
     );
   }
 
@@ -59,7 +59,7 @@
   A(int p(this.x));
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerOutsideConstructor, 30, 6)],
+      [error(diag.fieldInitializerOutsideConstructor, 30, 6)],
     );
   }
 
@@ -72,7 +72,7 @@
   m(this.x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerOutsideConstructor, 24, 6)],
+      [error(diag.fieldInitializerOutsideConstructor, 24, 6)],
     );
   }
 
@@ -81,7 +81,7 @@
       r'''
 f(this.x(y)) {}
 ''',
-      [error(CompileTimeErrorCode.fieldInitializerOutsideConstructor, 2, 9)],
+      [error(diag.fieldInitializerOutsideConstructor, 2, 9)],
     );
   }
 }
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 5d6c155..2553e4e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,13 +25,7 @@
   A() : this.named(), x = 42;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-          60,
-          6,
-        ),
-      ],
+      [error(diag.fieldInitializerRedirectingConstructor, 60, 6)],
     );
   }
 
@@ -44,13 +38,7 @@
   A() : x = 42, this.named();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-          46,
-          6,
-        ),
-      ],
+      [error(diag.fieldInitializerRedirectingConstructor, 46, 6)],
     );
   }
 
@@ -63,13 +51,7 @@
   A(this.x) : this.named();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-          42,
-          6,
-        ),
-      ],
+      [error(diag.fieldInitializerRedirectingConstructor, 42, 6)],
     );
   }
 
@@ -83,13 +65,7 @@
   const E() : this.named(), x = 42;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-          84,
-          6,
-        ),
-      ],
+      [error(diag.fieldInitializerRedirectingConstructor, 84, 6)],
     );
   }
 
@@ -103,13 +79,7 @@
   const E() : x = 42, this.named();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-          70,
-          6,
-        ),
-      ],
+      [error(diag.fieldInitializerRedirectingConstructor, 70, 6)],
     );
   }
 
@@ -123,13 +93,7 @@
   const E(this.x) : this.named();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializerRedirectingConstructor,
-          69,
-          6,
-        ),
-      ],
+      [error(diag.fieldInitializerRedirectingConstructor, 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 94b1f13..b41b6db 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,13 +24,7 @@
   A(dynamic this.x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-          23,
-          14,
-        ),
-      ],
+      [error(diag.fieldInitializingFormalNotAssignable, 23, 14)],
     );
   }
 
@@ -42,13 +36,7 @@
   A(String this.x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-          23,
-          13,
-        ),
-      ],
+      [error(diag.fieldInitializingFormalNotAssignable, 23, 13)],
     );
   }
 
@@ -61,13 +49,7 @@
   const E(dynamic this.x);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-          42,
-          14,
-        ),
-      ],
+      [error(diag.fieldInitializingFormalNotAssignable, 42, 14)],
     );
   }
 
@@ -81,12 +63,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 13, 2),
-        error(
-          CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-          43,
-          13,
-        ),
+        error(diag.constConstructorParamTypeMismatch, 13, 2),
+        error(diag.fieldInitializingFormalNotAssignable, 43, 13),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/field_must_be_external_in_struct_test.dart b/pkg/analyzer/test/src/diagnostics/field_must_be_external_in_struct_test.dart
index e5de471..a2611ce 100644
--- a/pkg/analyzer/test/src/diagnostics/field_must_be_external_in_struct_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_must_be_external_in_struct_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   int a;
 }
 ''',
-      [error(FfiCode.fieldMustBeExternalInStruct, 68, 1)],
+      [error(diag.fieldMustBeExternalInStruct, 68, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   int a;
 }
 ''',
-      [error(FfiCode.fieldMustBeExternalInStruct, 67, 1)],
+      [error(diag.fieldMustBeExternalInStruct, 67, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/final_class_extended_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/final_class_extended_outside_of_library_test.dart
index 5316964..82964e9 100644
--- a/pkg/analyzer/test/src/diagnostics/final_class_extended_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_class_extended_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
 import 'foo.dart';
 final class Bar extends Foo {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 43, 3)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 43, 3)],
     );
   }
 
@@ -71,7 +71,7 @@
 import 'foo.dart';
 final class Bar extends FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 43, 10)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 43, 10)],
     );
   }
 
@@ -86,7 +86,7 @@
 typedef FooTypedef = Foo;
 final class Bar extends FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 69, 10)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 69, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/final_class_implemented_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/final_class_implemented_outside_of_library_test.dart
index d5d4d27..9c305fc 100644
--- a/pkg/analyzer/test/src/diagnostics/final_class_implemented_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_class_implemented_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,13 +33,7 @@
 import 'foo.dart';
 final class Bar implements Foo {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          46,
-          3,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 46, 3)],
     );
   }
 
@@ -64,13 +58,7 @@
   int get value => 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 42, 1)],
     );
   }
 
@@ -85,13 +73,7 @@
 import 'foo.dart';
 final class Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          46,
-          10,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 46, 10)],
     );
   }
 
@@ -106,13 +88,7 @@
 typedef FooTypedef = Foo;
 final class Bar implements FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          72,
-          10,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 72, 10)],
     );
   }
 
@@ -133,13 +109,7 @@
 import 'foo.dart';
 enum Bar implements Foo { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          39,
-          3,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 39, 3)],
     );
   }
 
@@ -154,13 +124,7 @@
 import 'foo.dart';
 enum Bar implements FooTypedef { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          39,
-          10,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 39, 10)],
     );
   }
 
@@ -175,13 +139,7 @@
 typedef FooTypedef = Foo;
 enum Bar implements FooTypedef { bar }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          65,
-          10,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 65, 10)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/final_class_used_as_mixin_constraint_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/final_class_used_as_mixin_constraint_outside_of_library_test.dart
index a358b93..12be8e3 100644
--- a/pkg/analyzer/test/src/diagnostics/final_class_used_as_mixin_constraint_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_class_used_as_mixin_constraint_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,13 +33,7 @@
 import 'a.dart';
 base mixin B on A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          33,
-          1,
-        ),
-      ],
+      [error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 33, 1)],
     );
   }
 
@@ -55,16 +49,8 @@
 base mixin C on A, B {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          33,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          36,
-          1,
-        ),
+        error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 33, 1),
+        error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 36, 1),
       ],
     );
   }
@@ -81,13 +67,7 @@
 import 'a.dart';
 mixin B on A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 28, 1)],
     );
   }
 
@@ -102,13 +82,7 @@
 import 'a.dart';
 base mixin B on ATypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          33,
-          8,
-        ),
-      ],
+      [error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 33, 8)],
     );
   }
 
@@ -123,13 +97,7 @@
 typedef ATypedef = A;
 base mixin B on ATypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          55,
-          8,
-        ),
-      ],
+      [error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 55, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/final_initialized_in_declaration_and_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/final_initialized_in_declaration_and_constructor_test.dart
index 4f35099..2b3e4a1 100644
--- a/pkg/analyzer/test/src/diagnostics/final_initialized_in_declaration_and_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_initialized_in_declaration_and_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -37,11 +37,7 @@
 
     await resolveFile2(testFile);
     assertErrorsInResult([
-      error(
-        CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
-        54,
-        1,
-      ),
+      error(diag.finalInitializedInDeclarationAndConstructor, 54, 1),
     ]);
 
     await resolveFile2(a);
@@ -56,13 +52,7 @@
   A(this.x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.finalInitializedInDeclarationAndConstructor, 34, 1)],
     );
   }
 
@@ -76,12 +66,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constEvalThrowsException, 11, 4),
-        error(
-          CompileTimeErrorCode.finalInitializedInDeclarationAndConstructor,
-          47,
-          1,
-        ),
+        error(diag.constEvalThrowsException, 11, 4),
+        error(diag.finalInitializedInDeclarationAndConstructor, 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 07949c5..1738181 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A() {}
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor1, 27, 1)],
+      [error(diag.finalNotInitializedConstructor1, 27, 1)],
     );
   }
 
@@ -36,7 +36,7 @@
   A() {}
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor2, 42, 1)],
+      [error(diag.finalNotInitializedConstructor2, 42, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
   A() {}
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor3Plus, 57, 1)],
+      [error(diag.finalNotInitializedConstructor3Plus, 57, 1)],
     );
   }
 
@@ -142,7 +142,7 @@
     await resolveFile2(testFile);
     assertErrorsInResult([
       error(
-        CompileTimeErrorCode.finalNotInitializedConstructor1,
+        diag.finalNotInitializedConstructor1,
         60,
         1,
         messageContains: ['f2'],
@@ -201,9 +201,7 @@
     assertNoErrorsInResult();
 
     await resolveFile2(a);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.finalNotInitializedConstructor1, 42, 1),
-    ]);
+    assertErrorsInResult([error(diag.finalNotInitializedConstructor1, 42, 1)]);
   }
 
   Future<void> test_class_redirecting_error() async {
@@ -215,7 +213,7 @@
   A._();
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor1, 45, 1)],
+      [error(diag.finalNotInitializedConstructor1, 45, 3)],
     );
   }
 
@@ -248,7 +246,7 @@
   const E();
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor1, 37, 1)],
+      [error(diag.finalNotInitializedConstructor1, 37, 1)],
     );
   }
 
@@ -262,7 +260,7 @@
   const E();
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor2, 52, 1)],
+      [error(diag.finalNotInitializedConstructor2, 52, 1)],
     );
   }
 
@@ -277,7 +275,7 @@
   const E();
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor3Plus, 67, 1)],
+      [error(diag.finalNotInitializedConstructor3Plus, 67, 1)],
     );
   }
 
@@ -291,7 +289,7 @@
   const E._();
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor1, 70, 1)],
+      [error(diag.finalNotInitializedConstructor1, 70, 3)],
     );
   }
 
@@ -324,7 +322,7 @@
   A.named();
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitializedConstructor1, 29, 1)],
+      [error(diag.finalNotInitializedConstructor1, 29, 7)],
     );
   }
 
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 3f4e8a9..0707a07 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -89,7 +89,7 @@
   final int x;
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 31, 1)],
+      [error(diag.finalNotInitialized, 31, 1)],
     );
   }
 
@@ -147,7 +147,7 @@
 
   factory A() => throw 0;
 }''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 22, 1)],
+      [error(diag.finalNotInitialized, 22, 1)],
     );
   }
 
@@ -188,7 +188,7 @@
   final int x;
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 26, 1)],
+      [error(diag.finalNotInitialized, 26, 1)],
     );
   }
 
@@ -198,7 +198,7 @@
 extension E on String {
   static final F;
 }''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 39, 1)],
+      [error(diag.finalNotInitialized, 39, 1)],
     );
   }
 
@@ -208,7 +208,7 @@
 class A {
   final F;
 }''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 18, 1)],
+      [error(diag.finalNotInitialized, 18, 1)],
     );
   }
 
@@ -218,7 +218,7 @@
 class A {
   static final F;
 }''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 25, 1)],
+      [error(diag.finalNotInitialized, 25, 1)],
     );
   }
 
@@ -227,7 +227,7 @@
       '''
 final F;
 ''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 6, 1)],
+      [error(diag.finalNotInitialized, 6, 1)],
     );
   }
 
@@ -237,7 +237,7 @@
 f() {
   final int x;
 }''',
-      [error(WarningCode.unusedLocalVariable, 18, 1)],
+      [error(diag.unusedLocalVariable, 18, 1)],
     );
   }
 
@@ -248,7 +248,7 @@
   late final x = 1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 19, 1)],
+      [error(diag.unusedLocalVariable, 19, 1)],
     );
   }
 
@@ -259,7 +259,7 @@
   late final x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 19, 1)],
+      [error(diag.unusedLocalVariable, 19, 1)],
     );
   }
 
@@ -270,7 +270,7 @@
   final int x;
 }
 ''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 22, 1)],
+      [error(diag.finalNotInitialized, 22, 1)],
     );
   }
 
@@ -293,7 +293,7 @@
       '''
 final int x;
 ''',
-      [error(CompileTimeErrorCode.finalNotInitialized, 10, 1)],
+      [error(diag.finalNotInitialized, 10, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
index 1b5fc17..54fd89b 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_element_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidElementType, 55, 6)],
+      [error(diag.forInOfInvalidElementType, 55, 6)],
     );
   }
 
@@ -48,7 +48,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidElementType, 60, 6)],
+      [error(diag.forInOfInvalidElementType, 60, 6)],
     );
   }
 
@@ -63,7 +63,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidElementType, 86, 8)],
+      [error(diag.forInOfInvalidElementType, 86, 8)],
     );
   }
 
@@ -133,7 +133,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidElementType, 22, 10)],
+      [error(diag.forInOfInvalidElementType, 22, 10)],
     );
   }
 
@@ -147,7 +147,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidElementType, 27, 10)],
+      [error(diag.forInOfInvalidElementType, 27, 10)],
     );
   }
 
@@ -192,7 +192,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidElementType, 106, 8)],
+      [error(diag.forInOfInvalidElementType, 106, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
index 44c0bc6..cf1196d 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 41, 1)],
+      [error(diag.forInOfInvalidType, 41, 1)],
     );
   }
 
@@ -48,7 +48,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 32, 26)],
+      [error(diag.deadCode, 32, 26)],
     );
     // TODO(scheglov): extract for-in resolution and implement
     //    assertType(findNode.simple('id;'), 'Never');
@@ -63,7 +63,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 43, 1)],
+      [error(diag.forInOfInvalidType, 43, 1)],
     );
   }
 
@@ -119,7 +119,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 29, 1)],
+      [error(diag.forInOfInvalidType, 29, 1)],
     );
   }
 
@@ -143,7 +143,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 20, 26)],
+      [error(diag.deadCode, 20, 26)],
     );
     // TODO(scheglov): extract for-in resolution and implement
     //    assertType(findNode.simple('id;'), 'Never');
@@ -158,7 +158,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 37, 1)],
+      [error(diag.forInOfInvalidType, 37, 1)],
     );
   }
 }
@@ -175,7 +175,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInOfInvalidType, 32, 1)],
+      [error(diag.forInOfInvalidType, 32, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_with_const_variable_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_with_const_variable_test.dart
index 1f041f5..f7a1593 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_with_const_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_with_const_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.forInWithConstVariable, 13, 5)],
+      [error(diag.forInWithConstVariable, 13, 5)],
     );
   }
 }
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 7b7fd04..b96e91a 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
@@ -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:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'parser_diagnostics.dart';
@@ -21,9 +21,7 @@
   A(var super.a<T>());
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.functionTypedParameterVar, 14, 3),
-    ]);
+    parseResult.assertErrors([error(diag.functionTypedParameterVar, 14, 3)]);
 
     var node = parseResult.findNode.superFormalParameter('super.a');
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
index 76b047d..b5a5ba4 100644
--- a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -41,7 +41,7 @@
 import 'a.dart';
 late T Function<T extends F>(T) fun;
 ''',
-      [error(CompileTimeErrorCode.genericFunctionTypeCannotBeBound, 57, 1)],
+      [error(diag.genericFunctionTypeCannotBeBound, 57, 1)],
     );
   }
 
@@ -74,7 +74,7 @@
 class C<T extends S Function<S>(S)> {
 }
 ''',
-      [error(CompileTimeErrorCode.genericFunctionTypeCannotBeBound, 32, 16)],
+      [error(diag.genericFunctionTypeCannotBeBound, 32, 16)],
     );
   }
 
@@ -84,7 +84,7 @@
 // @dart=2.12
 late T Function<T extends S Function<S>(S)>(T) fun;
 ''',
-      [error(CompileTimeErrorCode.genericFunctionTypeCannotBeBound, 40, 16)],
+      [error(diag.genericFunctionTypeCannotBeBound, 40, 16)],
     );
   }
 
@@ -94,7 +94,7 @@
 // @dart=2.12
 typedef foo = T Function<T extends S Function<S>(S)>(T t);
 ''',
-      [error(CompileTimeErrorCode.genericFunctionTypeCannotBeBound, 49, 16)],
+      [error(diag.genericFunctionTypeCannotBeBound, 49, 16)],
     );
   }
 
@@ -110,7 +110,7 @@
 // @dart=2.12
 typedef T foo<T extends S Function<S>(S)>(T t);
 ''',
-      [error(CompileTimeErrorCode.genericFunctionTypeCannotBeBound, 38, 16)],
+      [error(diag.genericFunctionTypeCannotBeBound, 38, 16)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/generic_struct_subclass_test.dart b/pkg/analyzer/test/src/diagnostics/generic_struct_subclass_test.dart
index 26f2c76..7adf8d3 100644
--- a/pkg/analyzer/test/src/diagnostics/generic_struct_subclass_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/generic_struct_subclass_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 }
 ''',
       [
-        error(FfiCode.genericStructSubclass, 31, 1, messageContains: ["'S'"]),
+        error(diag.genericStructSubclass, 31, 1, messageContains: ["'S'"]),
       ],
     );
   }
@@ -38,7 +38,7 @@
 }
 ''',
       [
-        error(FfiCode.genericStructSubclass, 31, 1, messageContains: ["'S'"]),
+        error(diag.genericStructSubclass, 31, 1, messageContains: ["'S'"]),
       ],
     );
   }
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 f6cb2d2..c6b997c 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -91,7 +91,7 @@
   set _foo(String _) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 44, 4)],
+      [error(diag.unusedElement, 44, 4)],
     );
   }
 
@@ -145,7 +145,7 @@
   int get _foo => 0;
 }
 ''',
-      [error(WarningCode.unusedElement, 48, 4)],
+      [error(diag.unusedElement, 48, 4)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
index 5a01745..92d17f4 100644
--- a/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,13 +28,7 @@
 f() {
   return const [if(a.c) 0];
 }''',
-      [
-        error(
-          CompileTimeErrorCode.ifElementConditionFromDeferredLibrary,
-          61,
-          1,
-        ),
-      ],
+      [error(diag.ifElementConditionFromDeferredLibrary, 61, 1)],
     );
   }
 
@@ -67,13 +61,7 @@
 f() {
   return const {if(a.c) 0 : 0};
 }''',
-      [
-        error(
-          CompileTimeErrorCode.ifElementConditionFromDeferredLibrary,
-          61,
-          1,
-        ),
-      ],
+      [error(diag.ifElementConditionFromDeferredLibrary, 61, 1)],
     );
   }
 
@@ -106,13 +94,7 @@
 f() {
   return const {if(a.c) 0};
 }''',
-      [
-        error(
-          CompileTimeErrorCode.ifElementConditionFromDeferredLibrary,
-          61,
-          1,
-        ),
-      ],
+      [error(diag.ifElementConditionFromDeferredLibrary, 61, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_async_generator_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_async_generator_return_type_test.dart
index 8a81449..e235c08 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_async_generator_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_async_generator_return_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 int f() async* {}
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 0, 3)],
+      [error(diag.illegalAsyncGeneratorReturnType, 0, 3)],
     );
   }
 
@@ -36,7 +36,7 @@
 abstract class SubStream<T> implements Stream<T> {}
 SubStream<int> f() async* {}
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 52, 14)],
+      [error(diag.illegalAsyncGeneratorReturnType, 52, 14)],
     );
   }
 
@@ -45,7 +45,7 @@
       '''
 void f() async* {}
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 0, 4)],
+      [error(diag.illegalAsyncGeneratorReturnType, 0, 4)],
     );
   }
 
@@ -56,7 +56,7 @@
   int f() async* {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 12, 3)],
+      [error(diag.illegalAsyncGeneratorReturnType, 12, 3)],
     );
   }
 
@@ -68,7 +68,7 @@
   SubStream<int> f() async* {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 64, 14)],
+      [error(diag.illegalAsyncGeneratorReturnType, 64, 14)],
     );
   }
 
@@ -79,7 +79,7 @@
   void f() async* {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 12, 4)],
+      [error(diag.illegalAsyncGeneratorReturnType, 12, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart
index 8b8de89..d6c4c5d 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_async_return_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return 1;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncReturnType, 0, 3)],
+      [error(diag.illegalAsyncReturnType, 0, 3)],
     );
   }
 
@@ -39,7 +39,7 @@
   return 2;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncReturnType, 0, 3)],
+      [error(diag.illegalAsyncReturnType, 0, 3)],
     );
   }
 
@@ -51,7 +51,7 @@
   return 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncReturnType, 52, 14)],
+      [error(diag.illegalAsyncReturnType, 52, 14)],
     );
   }
 
@@ -64,7 +64,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncReturnType, 12, 3)],
+      [error(diag.illegalAsyncReturnType, 12, 3)],
     );
   }
 
@@ -86,7 +86,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncReturnType, 64, 14)],
+      [error(diag.illegalAsyncReturnType, 64, 14)],
     );
   }
 }
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
index a175f26..d98429a 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   int hashCode = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 41, 8)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 41, 8)],
     );
   }
 
@@ -36,7 +36,7 @@
   int get hashCode => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 45, 8)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 45, 8)],
     );
   }
 
@@ -63,7 +63,7 @@
   int index = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 41, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 41, 5)],
     );
   }
 
@@ -74,7 +74,7 @@
   int get index => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 45, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 45, 5)],
     );
   }
 
@@ -101,7 +101,7 @@
   bool operator ==(Object other) => false;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 51, 2)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 51, 2)],
     );
   }
 }
@@ -117,7 +117,7 @@
   final int index = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 26, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 26, 5)],
     );
   }
 
@@ -130,7 +130,7 @@
   const E();
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 26, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 26, 5)],
     );
   }
 
@@ -142,7 +142,7 @@
   int get index => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 24, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 24, 5)],
     );
   }
 
@@ -172,7 +172,7 @@
   bool operator ==(Object other) => false;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 30, 2)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 30, 2)],
     );
   }
 }
@@ -187,7 +187,7 @@
   int index = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 24, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 24, 5)],
     );
   }
 
@@ -198,7 +198,7 @@
   int get index => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 28, 5)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 28, 5)],
     );
   }
 
@@ -225,7 +225,7 @@
   bool operator ==(Object other) => false;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 34, 2)],
+      [error(diag.illegalConcreteEnumMemberDeclaration, 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
index c9e4a73..4b799a1 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 48, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 48, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
 
 abstract class B with M implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 48, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 48, 1)],
     );
   }
 
@@ -63,7 +63,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 53, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 53, 1)],
     );
   }
 
@@ -96,7 +96,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 71, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 71, 1)],
     );
   }
 
@@ -119,7 +119,7 @@
 
 abstract class B with M implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 71, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 71, 1)],
     );
   }
 }
@@ -150,7 +150,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 43, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 43, 1)],
     );
   }
 
@@ -189,7 +189,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 40, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 40, 1)],
     );
   }
 
@@ -228,7 +228,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalConcreteEnumMemberInheritance, 61, 1)],
+      [error(diag.illegalConcreteEnumMemberInheritance, 61, 1)],
     );
   }
 }
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
index 1855521..952c1ad 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_enum_values_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_declaration_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   int values = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 41, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 41, 6)],
     );
   }
 
@@ -41,7 +41,7 @@
   int get values => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 45, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 45, 6)],
     );
   }
 
@@ -60,7 +60,7 @@
   void values() {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 42, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 42, 6)],
     );
   }
 
@@ -79,7 +79,7 @@
   set values(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 41, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 41, 6)],
     );
   }
 
@@ -98,7 +98,7 @@
   int values = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 24, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 24, 6)],
     );
   }
 
@@ -117,7 +117,7 @@
   int get values => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 28, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 28, 6)],
     );
   }
 
@@ -136,7 +136,7 @@
   void values() {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 25, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 25, 6)],
     );
   }
 
@@ -155,7 +155,7 @@
   set values(int _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesDeclaration, 24, 6)],
+      [error(diag.illegalEnumValuesDeclaration, 24, 6)],
     );
   }
 
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
index 7da9148..2a35796 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 46, 1)],
+      [error(diag.illegalEnumValuesInheritance, 46, 1)],
     );
   }
 
@@ -37,7 +37,7 @@
 
 abstract class B implements A, Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 46, 1)],
+      [error(diag.illegalEnumValuesInheritance, 46, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
 
 abstract class B with M implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 46, 1)],
+      [error(diag.illegalEnumValuesInheritance, 46, 1)],
     );
   }
 
@@ -63,7 +63,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 51, 1)],
+      [error(diag.illegalEnumValuesInheritance, 51, 1)],
     );
   }
 
@@ -76,7 +76,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 47, 1)],
+      [error(diag.illegalEnumValuesInheritance, 47, 1)],
     );
   }
 
@@ -89,7 +89,7 @@
 
 abstract class B extends A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 51, 1)],
+      [error(diag.illegalEnumValuesInheritance, 51, 1)],
     );
   }
 
@@ -104,7 +104,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 41, 1)],
+      [error(diag.illegalEnumValuesInheritance, 41, 1)],
     );
   }
 
@@ -119,7 +119,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 39, 1)],
+      [error(diag.illegalEnumValuesInheritance, 39, 1)],
     );
   }
 
@@ -134,7 +134,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 39, 1)],
+      [error(diag.illegalEnumValuesInheritance, 39, 1)],
     );
   }
 
@@ -149,7 +149,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 41, 1)],
+      [error(diag.illegalEnumValuesInheritance, 41, 1)],
     );
   }
 
@@ -164,7 +164,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 41, 1)],
+      [error(diag.illegalEnumValuesInheritance, 41, 1)],
     );
   }
 
@@ -177,7 +177,7 @@
 
 mixin M on A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 37, 1)],
+      [error(diag.illegalEnumValuesInheritance, 37, 1)],
     );
   }
 
@@ -190,7 +190,7 @@
 
 mixin M on A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 42, 1)],
+      [error(diag.illegalEnumValuesInheritance, 42, 1)],
     );
   }
 
@@ -203,7 +203,7 @@
 
 mixin M on A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 40, 1)],
+      [error(diag.illegalEnumValuesInheritance, 40, 1)],
     );
   }
 
@@ -216,7 +216,7 @@
 
 mixin M on A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.illegalEnumValuesInheritance, 42, 1)],
+      [error(diag.illegalEnumValuesInheritance, 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
index a38fc6c..a5a1c2c 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_language_version_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_language_version_override_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
 // @dart = 2.9
 int a = 0;
 ''',
-      [error(CompileTimeErrorCode.illegalLanguageVersionOverride, 0, 14)],
+      [error(diag.illegalLanguageVersionOverride, 0, 14)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart
index 9415c50..af31fe5 100644
--- a/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/illegal_sync_generator_return_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 Iterable<void> f() sync* => [];
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 25, 2)],
+      [error(diag.returnInGenerator, 25, 2)],
     );
   }
 
@@ -35,7 +35,7 @@
       '''
 int f() sync* {}
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 0, 3)],
+      [error(diag.illegalSyncGeneratorReturnType, 0, 3)],
     );
   }
 
@@ -45,7 +45,7 @@
 abstract class SubIterator<T> implements Iterator<T> {}
 SubIterator<int> f() sync* {}
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 56, 16)],
+      [error(diag.illegalSyncGeneratorReturnType, 56, 16)],
     );
   }
 
@@ -54,7 +54,7 @@
       '''
 void f() sync* {}
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 0, 4)],
+      [error(diag.illegalSyncGeneratorReturnType, 0, 4)],
     );
   }
 
@@ -65,7 +65,7 @@
   int f() sync* {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 12, 3)],
+      [error(diag.illegalSyncGeneratorReturnType, 12, 3)],
     );
   }
 
@@ -77,7 +77,7 @@
   SubIterator<int> f() sync* {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 68, 16)],
+      [error(diag.illegalSyncGeneratorReturnType, 68, 16)],
     );
   }
 
@@ -88,7 +88,7 @@
   void f() sync* {}
 }
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 12, 4)],
+      [error(diag.illegalSyncGeneratorReturnType, 12, 4)],
     );
   }
 }
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 f345f24..2001c18 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_deferred_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 import 'lib1.dart' deferred as a;
 class B implements a.A {}
 ''',
-      [error(CompileTimeErrorCode.implementsDeferredClass, 67, 3)],
+      [error(diag.implementsDeferredClass, 67, 3)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -57,7 +57,7 @@
 import 'lib1.dart' deferred as a;
 class C implements a.B {}
 ''',
-      [error(CompileTimeErrorCode.implementsDeferredClass, 67, 3)],
+      [error(diag.implementsDeferredClass, 67, 3)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -90,7 +90,7 @@
 class M {}
 class C = B with M implements a.A;
 ''',
-      [error(CompileTimeErrorCode.implementsDeferredClass, 100, 3)],
+      [error(diag.implementsDeferredClass, 100, 3)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -119,7 +119,10 @@
 import 'a.dart' deferred as a;
 extension type B(a.A it) implements a.A {}
 ''',
-      [error(CompileTimeErrorCode.implementsDeferredClass, 67, 3)],
+      [
+        error(diag.typeAnnotationDeferredClass, 48, 3),
+        error(diag.implementsDeferredClass, 67, 3),
+      ],
     );
 
     var node = findNode.singleImplementsClause;
@@ -148,7 +151,7 @@
 import 'a.dart' deferred as a;
 extension type B(int it) implements a.A {}
 ''',
-      [error(CompileTimeErrorCode.implementsDeferredClass, 67, 3)],
+      [error(diag.implementsDeferredClass, 67, 3)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -173,7 +176,7 @@
 import 'dart:math' deferred as math;
 mixin M implements math.Random {}
 ''',
-      [error(CompileTimeErrorCode.implementsDeferredClass, 56, 11)],
+      [error(diag.implementsDeferredClass, 56, 11)],
     );
 
     var node = findNode.singleImplementsClause;
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 e40f499..e7cc7f3 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_disallowed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_disallowed_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A implements bool {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 4)],
+      [error(diag.implementsDisallowedClass, 19, 4)],
     );
   }
 
@@ -36,7 +36,7 @@
 // @dart = 2.16
 abstract class A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 44, 4)],
+      [error(diag.implementsDisallowedClass, 44, 4)],
     );
   }
 
@@ -46,7 +46,7 @@
 // @dart = 2.16
 class A implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 35, 4)],
+      [error(diag.implementsDisallowedClass, 35, 4)],
     );
   }
 
@@ -55,7 +55,7 @@
       '''
 class A implements double {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 6)],
+      [error(diag.implementsDisallowedClass, 19, 6)],
     );
   }
 
@@ -65,7 +65,7 @@
 import 'dart:async';
 class A implements FutureOr {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 40, 8)],
+      [error(diag.implementsDisallowedClass, 40, 8)],
     );
   }
 
@@ -75,7 +75,7 @@
 import 'dart:async';
 class A implements FutureOr<int> {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 40, 13)],
+      [error(diag.implementsDisallowedClass, 40, 13)],
     );
   }
 
@@ -86,7 +86,7 @@
 typedef F = FutureOr<void>;
 class A implements F {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 68, 1)],
+      [error(diag.implementsDisallowedClass, 68, 1)],
     );
   }
 
@@ -96,7 +96,7 @@
 import 'dart:async';
 class A<T> implements FutureOr<T> {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 43, 11)],
+      [error(diag.implementsDisallowedClass, 43, 11)],
     );
   }
 
@@ -105,7 +105,7 @@
       '''
 class A implements int {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 3)],
+      [error(diag.implementsDisallowedClass, 19, 3)],
     );
   }
 
@@ -114,7 +114,7 @@
       '''
 class A implements Null {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 4)],
+      [error(diag.implementsDisallowedClass, 19, 4)],
     );
   }
 
@@ -123,7 +123,7 @@
       '''
 class A implements num {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 3)],
+      [error(diag.implementsDisallowedClass, 19, 3)],
     );
   }
 
@@ -132,7 +132,7 @@
       '''
 class A implements Record {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 6)],
+      [error(diag.implementsDisallowedClass, 19, 6)],
     );
   }
 
@@ -141,7 +141,7 @@
       '''
 class A implements String {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 6)],
+      [error(diag.implementsDisallowedClass, 19, 6)],
     );
   }
 
@@ -159,7 +159,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.implementsDisallowedClass, 45, 6),
+      error(diag.implementsDisallowedClass, 45, 6),
     ]);
   }
 
@@ -169,8 +169,8 @@
 class A implements String, num {}
 ''',
       [
-        error(CompileTimeErrorCode.implementsDisallowedClass, 19, 6),
-        error(CompileTimeErrorCode.implementsDisallowedClass, 27, 3),
+        error(diag.implementsDisallowedClass, 19, 6),
+        error(diag.implementsDisallowedClass, 27, 3),
       ],
     );
   }
@@ -182,7 +182,7 @@
 class M {}
 class C = A with M implements bool;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 52, 4)],
+      [error(diag.implementsDisallowedClass, 52, 4)],
     );
   }
 
@@ -200,7 +200,7 @@
 mixin M {}
 abstract class A = Object with M implements Enum;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 71, 4)],
+      [error(diag.implementsDisallowedClass, 71, 4)],
     );
   }
 
@@ -211,7 +211,7 @@
 mixin M {}
 class A = Object with M implements Enum;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 62, 4)],
+      [error(diag.implementsDisallowedClass, 62, 4)],
     );
   }
 
@@ -222,7 +222,7 @@
 class M {}
 class C = A with M implements double;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 52, 6)],
+      [error(diag.implementsDisallowedClass, 52, 6)],
     );
   }
 
@@ -234,7 +234,7 @@
 class M {}
 class C = A with M implements FutureOr;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 73, 8)],
+      [error(diag.implementsDisallowedClass, 73, 8)],
     );
   }
 
@@ -245,7 +245,7 @@
 class M {}
 class C = A with M implements int;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 52, 3)],
+      [error(diag.implementsDisallowedClass, 52, 3)],
     );
   }
 
@@ -256,7 +256,7 @@
 class M {}
 class C = A with M implements Null;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 52, 4)],
+      [error(diag.implementsDisallowedClass, 52, 4)],
     );
   }
 
@@ -267,7 +267,7 @@
 class M {}
 class C = A with M implements num;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 52, 3)],
+      [error(diag.implementsDisallowedClass, 52, 3)],
     );
   }
 
@@ -278,7 +278,7 @@
 class M {}
 class C = A with M implements String;
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 52, 6)],
+      [error(diag.implementsDisallowedClass, 52, 6)],
     );
   }
 
@@ -290,8 +290,8 @@
 class C = A with M implements String, num;
 ''',
       [
-        error(CompileTimeErrorCode.implementsDisallowedClass, 52, 6),
-        error(CompileTimeErrorCode.implementsDisallowedClass, 60, 3),
+        error(diag.implementsDisallowedClass, 52, 6),
+        error(diag.implementsDisallowedClass, 60, 3),
       ],
     );
   }
@@ -303,7 +303,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 18, 3)],
+      [error(diag.implementsDisallowedClass, 18, 3)],
     );
   }
 
@@ -319,7 +319,7 @@
 // @dart = 2.16
 mixin M implements Enum {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 35, 4)],
+      [error(diag.implementsDisallowedClass, 35, 4)],
     );
   }
 
@@ -328,7 +328,7 @@
       r'''
 mixin M implements int {}
 ''',
-      [error(CompileTimeErrorCode.implementsDisallowedClass, 19, 3)],
+      [error(diag.implementsDisallowedClass, 19, 3)],
     );
 
     var node = findNode.singleImplementsClause;
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 b72fb8f..20adccb 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_non_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A implements dynamic {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 19, 7)],
+      [error(diag.implementsNonClass, 19, 7)],
     );
   }
 
@@ -30,7 +30,7 @@
 enum E { ONE }
 class A implements E {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 34, 1)],
+      [error(diag.implementsNonClass, 34, 1)],
     );
   }
 
@@ -40,7 +40,7 @@
 extension type A(int it) {}
 class B implements A {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 47, 1)],
+      [error(diag.implementsNonClass, 47, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
 int A = 7;
 class B implements A {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 30, 1)],
+      [error(diag.implementsNonClass, 30, 1)],
     );
   }
 
@@ -62,7 +62,7 @@
 int B = 7;
 class C = A with M implements B;
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 63, 1)],
+      [error(diag.implementsNonClass, 63, 1)],
     );
   }
 
@@ -74,7 +74,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 29, 1)],
+      [error(diag.implementsNonClass, 29, 1)],
     );
   }
 
@@ -83,7 +83,7 @@
       r'''
 mixin M implements dynamic {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 19, 7)],
+      [error(diag.implementsNonClass, 19, 7)],
     );
   }
 
@@ -93,7 +93,7 @@
 extension type A(int it) {}
 mixin M implements A {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 47, 1)],
+      [error(diag.implementsNonClass, 47, 1)],
     );
   }
 
@@ -102,7 +102,7 @@
       '''
 class A implements Never {}
 ''',
-      [error(CompileTimeErrorCode.implementsNonClass, 19, 5)],
+      [error(diag.implementsNonClass, 19, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart b/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
index 6199aea..90c7192 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_repeated_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 class A {}
 class B implements A, A {}
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 33, 1)],
+      [error(diag.implementsRepeated, 33, 1)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -57,9 +57,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.implementsRepeated, 46, 1),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.implementsRepeated, 46, 1)]);
   }
 
   test_class_implements_2times_viaTypeAlias() async {
@@ -69,7 +67,7 @@
 typedef B = A;
 class C implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 48, 1)],
+      [error(diag.implementsRepeated, 48, 1)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -96,9 +94,9 @@
 class B implements A, A, A, A {}
 ''',
       [
-        error(CompileTimeErrorCode.implementsRepeated, 43, 1),
-        error(CompileTimeErrorCode.implementsRepeated, 46, 1),
-        error(CompileTimeErrorCode.implementsRepeated, 49, 1),
+        error(diag.implementsRepeated, 43, 1),
+        error(diag.implementsRepeated, 46, 1),
+        error(diag.implementsRepeated, 49, 1),
       ],
     );
   }
@@ -111,7 +109,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 32, 1)],
+      [error(diag.implementsRepeated, 32, 1)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -147,9 +145,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.implementsRepeated, 45, 1),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.implementsRepeated, 45, 1)]);
   }
 
   test_enum_implements_2times_viaTypeAlias() async {
@@ -161,7 +157,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 47, 1)],
+      [error(diag.implementsRepeated, 47, 1)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -190,9 +186,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.implementsRepeated, 42, 1),
-        error(CompileTimeErrorCode.implementsRepeated, 45, 1),
-        error(CompileTimeErrorCode.implementsRepeated, 48, 1),
+        error(diag.implementsRepeated, 42, 1),
+        error(diag.implementsRepeated, 45, 1),
+        error(diag.implementsRepeated, 48, 1),
       ],
     );
   }
@@ -202,7 +198,7 @@
       r'''
 extension type A(int it) implements int, int {}
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 41, 3)],
+      [error(diag.implementsRepeated, 41, 3)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -237,9 +233,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.implementsRepeated, 63, 3),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.implementsRepeated, 63, 3)]);
   }
 
   test_extensionType_implements_2times_viaTypeAlias() async {
@@ -248,7 +242,7 @@
 typedef A = int;
 extension type B(int it) implements int, A {}
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 58, 1)],
+      [error(diag.implementsRepeated, 58, 1)],
     );
 
     var node = findNode.singleImplementsClause;
@@ -274,9 +268,9 @@
 extension type A(int it) implements int, int, int, int {}
 ''',
       [
-        error(CompileTimeErrorCode.implementsRepeated, 41, 3),
-        error(CompileTimeErrorCode.implementsRepeated, 46, 3),
-        error(CompileTimeErrorCode.implementsRepeated, 51, 3),
+        error(diag.implementsRepeated, 41, 3),
+        error(diag.implementsRepeated, 46, 3),
+        error(diag.implementsRepeated, 51, 3),
       ],
     );
   }
@@ -287,7 +281,7 @@
 class A {}
 mixin M implements A, A {}
 ''',
-      [error(CompileTimeErrorCode.implementsRepeated, 33, 1)],
+      [error(diag.implementsRepeated, 33, 1)],
     );
   }
 
@@ -308,9 +302,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.implementsRepeated, 46, 1),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.implementsRepeated, 46, 1)]);
   }
 
   test_mixin_implements_4times() async {
@@ -320,9 +312,9 @@
 mixin M implements A, A, A, A {}
 ''',
       [
-        error(CompileTimeErrorCode.implementsRepeated, 33, 1),
-        error(CompileTimeErrorCode.implementsRepeated, 36, 1),
-        error(CompileTimeErrorCode.implementsRepeated, 39, 1),
+        error(diag.implementsRepeated, 33, 1),
+        error(diag.implementsRepeated, 36, 1),
+        error(diag.implementsRepeated, 39, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/implements_super_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_super_class_test.dart
index 9efd33c..b9235ea 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_super_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_super_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 class A {}
 class B extends A implements A {}
 ''',
-      [error(CompileTimeErrorCode.implementsSuperClass, 40, 1)],
+      [error(diag.implementsSuperClass, 40, 1)],
     );
   }
 
@@ -30,7 +30,7 @@
       '''
 class A implements Object {}
 ''',
-      [error(CompileTimeErrorCode.implementsSuperClass, 19, 6)],
+      [error(diag.implementsSuperClass, 19, 6)],
     );
   }
 
@@ -41,7 +41,7 @@
 typedef B = A;
 class C extends A implements B {}
 ''',
-      [error(CompileTimeErrorCode.implementsSuperClass, 55, 1)],
+      [error(diag.implementsSuperClass, 55, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
 mixin M {}
 class B = A with M implements A;
 ''',
-      [error(CompileTimeErrorCode.implementsSuperClass, 52, 1)],
+      [error(diag.implementsSuperClass, 52, 1)],
     );
   }
 
@@ -62,7 +62,7 @@
 mixin M {}
 class A = Object with M implements Object;
 ''',
-      [error(CompileTimeErrorCode.implementsSuperClass, 46, 6)],
+      [error(diag.implementsSuperClass, 46, 6)],
     );
   }
 
@@ -74,7 +74,7 @@
 typedef B = A;
 class C = A with M implements B;
 ''',
-      [error(CompileTimeErrorCode.implementsSuperClass, 67, 1)],
+      [error(diag.implementsSuperClass, 67, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/implements_type_alias_expands_to_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/implements_type_alias_expands_to_type_parameter_test.dart
index a6a3bb8..c470e64 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_type_alias_expands_to_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_type_alias_expands_to_type_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
 typedef T<X extends A> = X;
 class B implements T {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.implementsTypeAliasExpandsToTypeParameter,
-          58,
-          1,
-        ),
-      ],
+      [error(diag.implementsTypeAliasExpandsToTypeParameter, 58, 1)],
     );
 
     var node = findNode.namedType('T {}');
@@ -56,13 +50,7 @@
 typedef T<X extends A> = X;
 class B implements T<A> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.implementsTypeAliasExpandsToTypeParameter,
-          58,
-          1,
-        ),
-      ],
+      [error(diag.implementsTypeAliasExpandsToTypeParameter, 58, 1)],
     );
 
     var node = findNode.namedType('T<A> {}');
@@ -89,13 +77,7 @@
 typedef T<X extends A> = X;
 mixin M implements T {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.implementsTypeAliasExpandsToTypeParameter,
-          58,
-          1,
-        ),
-      ],
+      [error(diag.implementsTypeAliasExpandsToTypeParameter, 58, 1)],
     );
 
     var node = findNode.namedType('T {}');
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
index e688359..9a448f4 100644
--- a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -82,7 +82,7 @@
   B() : assert(f != 0);
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 66, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 66, 1)],
     );
   }
 
@@ -94,7 +94,7 @@
   int get f => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 25, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 25, 1)],
     );
   }
 
@@ -107,7 +107,7 @@
   var f;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 31, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 31, 1)],
     );
   }
 
@@ -131,7 +131,7 @@
   final y = x;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 37, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 37, 1)],
     );
   }
 
@@ -143,7 +143,7 @@
   final y = x<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 39, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 39, 1)],
     );
   }
 
@@ -163,7 +163,7 @@
   void _foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 87, 4)],
+      [error(diag.implicitThisReferenceInInitializer, 87, 4)],
     );
   }
 
@@ -176,7 +176,7 @@
   f() {}
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 31, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 31, 1)],
     );
   }
 
@@ -188,7 +188,7 @@
   int m() => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 27, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 27, 1)],
     );
   }
 
@@ -246,7 +246,7 @@
   var f;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 39, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 39, 1)],
     );
   }
 
@@ -291,7 +291,7 @@
   var f;
 }
 ''',
-      [error(CompileTimeErrorCode.implicitThisReferenceInInitializer, 56, 1)],
+      [error(diag.implicitThisReferenceInInitializer, 56, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart b/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart
index 9a4d93c..cad0dd5 100644
--- a/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_deferred_library_with_load_function_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
   p.f();
 }
 ''',
-      [error(HintCode.importDeferredLibraryWithLoadFunction, 0, 30)],
+      [error(diag.importDeferredLibraryWithLoadFunction, 0, 30)],
     );
   }
 
@@ -61,7 +61,7 @@
   p.f();
 }
 ''',
-      [error(HintCode.importDeferredLibraryWithLoadFunction, 0, 38)],
+      [error(diag.importDeferredLibraryWithLoadFunction, 0, 38)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart
index 448d837..8bff5df 100644
--- a/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_internal_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -27,8 +27,8 @@
 import 'dart:_internal';
 ''',
       [
-        error(CompileTimeErrorCode.importInternalLibrary, 7, 16),
-        error(WarningCode.unusedImport, 7, 16),
+        error(diag.importInternalLibrary, 7, 16),
+        error(diag.unusedImport, 7, 16),
       ],
     );
   }
@@ -39,9 +39,7 @@
 import 'dart:_wasm';
 ''');
     await resolveFile2(file);
-    assertErrorsInResolvedUnit(result, [
-      error(WarningCode.unusedImport, 7, 12),
-    ]);
+    assertErrorsInResolvedUnit(result, [error(diag.unusedImport, 7, 12)]);
   }
 
   test_wasm_fromTest() async {
@@ -50,8 +48,8 @@
 import 'dart:_wasm';
 ''',
       [
-        error(CompileTimeErrorCode.importInternalLibrary, 7, 12),
-        error(WarningCode.unusedImport, 7, 12),
+        error(diag.importInternalLibrary, 7, 12),
+        error(diag.unusedImport, 7, 12),
       ],
     );
   }
@@ -62,9 +60,7 @@
 import 'dart:_wasm';
 ''');
     await resolveFile2(file);
-    assertErrorsInResolvedUnit(result, [
-      error(WarningCode.unusedImport, 7, 12),
-    ]);
+    assertErrorsInResolvedUnit(result, [error(diag.unusedImport, 7, 12)]);
   }
 
   String _newPackage(String packageName) {
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
index cd17fbb..6acb6b4 100644
--- a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.importOfNonLibrary,
+          diag.importOfNonLibrary,
           20,
           11,
           messageContains: ["library 'lib1.dart' "],
@@ -46,7 +46,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.importOfNonLibrary,
+          diag.importOfNonLibrary,
           20,
           11,
           messageContains: ["library 'part.dart' "],
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_getter_and_method_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_getter_and_method_test.dart
index 548c17a..7bd0819 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_getter_and_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_getter_and_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +27,7 @@
 }
 abstract class C implements A, B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          85,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 85, 1)],
     );
   }
 
@@ -52,13 +46,7 @@
   String foo() => 'C';
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          97,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 97, 1)],
     );
   }
 
@@ -73,13 +61,7 @@
 }
 abstract class C implements A, B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          85,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 85, 1)],
     );
   }
 
@@ -96,13 +78,7 @@
 
 class C = S with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          70,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 70, 1)],
     );
   }
 
@@ -124,16 +100,8 @@
 class C = S with M1, M2;
 ''',
       [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          105,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          105,
-          1,
-        ),
+        error(diag.inconsistentInheritanceGetterAndMethod, 105, 1),
+        error(diag.inconsistentInheritanceGetterAndMethod, 105, 1),
       ],
     );
   }
@@ -149,13 +117,7 @@
 }
 mixin M implements A, B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          76,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 76, 1)],
     );
   }
 
@@ -170,13 +132,7 @@
 }
 mixin M implements A, B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          76,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 76, 1)],
     );
   }
 
@@ -191,13 +147,7 @@
 }
 mixin M on A, B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          76,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 76, 1)],
     );
   }
 
@@ -212,13 +162,7 @@
 }
 mixin M on A, B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.inconsistentInheritanceGetterAndMethod,
-          76,
-          1,
-        ),
-      ],
+      [error(diag.inconsistentInheritanceGetterAndMethod, 76, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
index 01e252a..89ee7c6 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_inheritance_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -44,9 +44,7 @@
 augment abstract class C with A {}
 ''');
 
-    await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.inconsistentInheritance, 122, 1),
-    ]);
+    await assertErrorsInFile2(a, [error(diag.inconsistentInheritance, 122, 1)]);
     await assertErrorsInFile2(b, []);
     await assertErrorsInFile2(c, []);
   }
@@ -80,9 +78,7 @@
 augment abstract class C implements B {}
 ''');
 
-    await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.inconsistentInheritance, 122, 1),
-    ]);
+    await assertErrorsInFile2(a, [error(diag.inconsistentInheritance, 122, 1)]);
     await assertErrorsInFile2(b, []);
     await assertErrorsInFile2(c, []);
   }
@@ -100,7 +96,7 @@
 abstract class B2 { void m(D2 d2); }
 class C extends A implements B1, B2 {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 171, 1)],
+      [error(diag.inconsistentInheritance, 171, 1)],
     );
   }
 
@@ -115,7 +111,7 @@
 }
 abstract class C implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 94, 1)],
+      [error(diag.inconsistentInheritance, 94, 1)],
     );
   }
 
@@ -130,7 +126,7 @@
 }
 abstract class C extends B implements A {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 94, 1)],
+      [error(diag.inconsistentInheritance, 94, 1)],
     );
   }
 
@@ -146,7 +142,7 @@
 abstract class B2 extends B {}
 abstract class C implements A, B2 {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 125, 1)],
+      [error(diag.inconsistentInheritance, 125, 1)],
     );
   }
 
@@ -162,7 +158,7 @@
 abstract class B2 extends B {}
 abstract class C extends Object with A implements B2 {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 116, 1)],
+      [error(diag.inconsistentInheritance, 116, 1)],
     );
   }
 
@@ -178,7 +174,7 @@
 abstract class B2 extends B {}
 abstract class C = Object with A implements B2;
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 116, 1)],
+      [error(diag.inconsistentInheritance, 116, 1)],
     );
   }
 
@@ -194,7 +190,7 @@
 abstract class B2 extends Object with B {}
 abstract class C implements A, B2 {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 128, 1)],
+      [error(diag.inconsistentInheritance, 128, 1)],
     );
   }
 
@@ -210,7 +206,7 @@
 abstract class B2 extends Object with B {}
 abstract class C extends Object with A implements B2 {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 119, 1)],
+      [error(diag.inconsistentInheritance, 119, 1)],
     );
   }
 
@@ -228,7 +224,7 @@
 }
 abstract class D implements A, B, C {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 135, 1)],
+      [error(diag.inconsistentInheritance, 135, 1)],
     );
   }
 
@@ -243,7 +239,7 @@
 }
 abstract class C implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 86, 1)],
+      [error(diag.inconsistentInheritance, 86, 1)],
     );
   }
 
@@ -258,7 +254,7 @@
 }
 abstract class C implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 82, 1)],
+      [error(diag.inconsistentInheritance, 82, 1)],
     );
   }
 
@@ -275,7 +271,7 @@
 
 enum E implements A, B {v}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 78, 1)],
+      [error(diag.inconsistentInheritance, 78, 1)],
     );
   }
 
@@ -297,7 +293,7 @@
   augment v;
 }
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 78, 1)],
+      [error(diag.inconsistentInheritance, 78, 1)],
     );
   }
 
@@ -312,7 +308,7 @@
 }
 mixin M implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 85, 1)],
+      [error(diag.inconsistentInheritance, 85, 1)],
     );
   }
 
@@ -327,7 +323,7 @@
 }
 mixin M implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 77, 1)],
+      [error(diag.inconsistentInheritance, 77, 1)],
     );
   }
 
@@ -342,7 +338,7 @@
 }
 mixin M implements A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 73, 1)],
+      [error(diag.inconsistentInheritance, 73, 1)],
     );
   }
 
@@ -357,7 +353,7 @@
 }
 mixin M on A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 85, 1)],
+      [error(diag.inconsistentInheritance, 85, 1)],
     );
   }
 
@@ -372,7 +368,7 @@
 }
 mixin M on A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 77, 1)],
+      [error(diag.inconsistentInheritance, 77, 1)],
     );
   }
 
@@ -387,7 +383,7 @@
 }
 mixin M on A, B {}
 ''',
-      [error(CompileTimeErrorCode.inconsistentInheritance, 73, 1)],
+      [error(diag.inconsistentInheritance, 73, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart b/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
index 495302b..5f182f6 100644
--- a/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inconsistent_language_version_override_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -56,7 +56,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.inconsistentLanguageVersionOverride, 39, 8),
+      error(diag.inconsistentLanguageVersionOverride, 39, 8),
     ]);
     await assertErrorsInFile2(c, []);
   }
@@ -79,7 +79,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.inconsistentLanguageVersionOverride, 39, 8),
+      error(diag.inconsistentLanguageVersionOverride, 39, 8),
     ]);
     await assertErrorsInFile2(c, []);
   }
@@ -102,7 +102,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.inconsistentLanguageVersionOverride, 21, 8),
+      error(diag.inconsistentLanguageVersionOverride, 21, 8),
     ]);
     await assertErrorsInFile2(b, []);
     await assertErrorsInFile2(c, []);
@@ -125,7 +125,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.inconsistentLanguageVersionOverride, 5, 8),
+      error(diag.inconsistentLanguageVersionOverride, 5, 8),
     ]);
     await assertErrorsInFile2(b, []);
     await assertErrorsInFile2(c, []);
@@ -158,7 +158,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.inconsistentLanguageVersionOverride, 20, 8),
+      error(diag.inconsistentLanguageVersionOverride, 20, 8),
     ]);
     await assertErrorsInFile2(b, []);
   }
@@ -174,7 +174,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(CompileTimeErrorCode.inconsistentLanguageVersionOverride, 5, 8),
+      error(diag.inconsistentLanguageVersionOverride, 5, 8),
     ]);
     await assertErrorsInFile2(b, []);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
index 3a08d8d..f29aeb0 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_collection_literal_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -38,13 +38,13 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 20, 1),
-        error(WarningCode.unusedLocalVariable, 35, 1),
-        error(WarningCode.unusedLocalVariable, 61, 1),
-        error(WarningCode.unusedLocalVariable, 76, 1),
-        error(WarningCode.unusedLocalVariable, 102, 1),
-        error(WarningCode.unusedLocalVariable, 121, 1),
-        error(WarningCode.unusedLocalVariable, 151, 1),
+        error(diag.unusedLocalVariable, 20, 1),
+        error(diag.unusedLocalVariable, 35, 1),
+        error(diag.unusedLocalVariable, 61, 1),
+        error(diag.unusedLocalVariable, 76, 1),
+        error(diag.unusedLocalVariable, 102, 1),
+        error(diag.unusedLocalVariable, 121, 1),
+        error(diag.unusedLocalVariable, 151, 1),
       ],
     );
   }
@@ -57,8 +57,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 20, 1),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 49, 2),
+        error(diag.unusedLocalVariable, 20, 1),
+        error(diag.inferenceFailureOnCollectionLiteral, 49, 2),
       ],
     );
   }
@@ -69,8 +69,8 @@
 void f([list = const []]) => print(list);
 ''',
       [
-        error(WarningCode.inferenceFailureOnUntypedParameter, 8, 4),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 15, 8),
+        error(diag.inferenceFailureOnUntypedParameter, 8, 4),
+        error(diag.inferenceFailureOnCollectionLiteral, 15, 8),
       ],
     );
   }
@@ -81,8 +81,8 @@
 void f([map = const {}]) => print(map);
 ''',
       [
-        error(WarningCode.inferenceFailureOnUntypedParameter, 8, 3),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 14, 8),
+        error(diag.inferenceFailureOnUntypedParameter, 8, 3),
+        error(diag.inferenceFailureOnCollectionLiteral, 14, 8),
       ],
     );
   }
@@ -104,12 +104,12 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 30, 1),
-        error(WarningCode.unusedLocalVariable, 53, 1),
-        error(WarningCode.unusedLocalVariable, 85, 1),
-        error(WarningCode.unusedElement, 172, 1),
-        error(WarningCode.unusedElement, 194, 1),
-        error(WarningCode.unusedElement, 221, 1),
+        error(diag.unusedLocalVariable, 30, 1),
+        error(diag.unusedLocalVariable, 53, 1),
+        error(diag.unusedLocalVariable, 85, 1),
+        error(diag.unusedElement, 172, 1),
+        error(diag.unusedElement, 194, 1),
+        error(diag.unusedElement, 221, 1),
       ],
     );
   }
@@ -124,9 +124,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 20, 1),
-        error(WarningCode.unusedLocalVariable, 43, 1),
-        error(WarningCode.unusedLocalVariable, 66, 1),
+        error(diag.unusedLocalVariable, 20, 1),
+        error(diag.unusedLocalVariable, 43, 1),
+        error(diag.unusedLocalVariable, 66, 1),
       ],
     );
   }
@@ -136,7 +136,7 @@
       r'''
 dynamic f() => [];
 ''',
-      [error(WarningCode.inferenceFailureOnCollectionLiteral, 15, 2)],
+      [error(diag.inferenceFailureOnCollectionLiteral, 15, 2)],
     );
   }
 
@@ -159,7 +159,7 @@
   var x = a ?? [];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 29, 1)],
+      [error(diag.unusedLocalVariable, 29, 1)],
     );
   }
 
@@ -171,8 +171,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 22, 1),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 26, 2),
+        error(diag.unusedLocalVariable, 22, 1),
+        error(diag.inferenceFailureOnCollectionLiteral, 26, 2),
       ],
     );
   }
@@ -185,8 +185,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 22, 1),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 26, 2),
+        error(diag.unusedLocalVariable, 22, 1),
+        error(diag.inferenceFailureOnCollectionLiteral, 26, 2),
       ],
     );
   }
@@ -199,8 +199,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 20, 1),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 24, 2),
+        error(diag.unusedLocalVariable, 20, 1),
+        error(diag.inferenceFailureOnCollectionLiteral, 24, 2),
       ],
     );
   }
@@ -213,8 +213,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 20, 1),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 24, 2),
+        error(diag.unusedLocalVariable, 20, 1),
+        error(diag.inferenceFailureOnCollectionLiteral, 24, 2),
       ],
     );
   }
@@ -227,9 +227,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 20, 1),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 25, 2),
-        error(WarningCode.inferenceFailureOnCollectionLiteral, 29, 2),
+        error(diag.unusedLocalVariable, 20, 1),
+        error(diag.inferenceFailureOnCollectionLiteral, 25, 2),
+        error(diag.inferenceFailureOnCollectionLiteral, 29, 2),
       ],
     );
   }
@@ -239,7 +239,7 @@
       r'''
 var x = [];
 ''',
-      [error(WarningCode.inferenceFailureOnCollectionLiteral, 8, 2)],
+      [error(diag.inferenceFailureOnCollectionLiteral, 8, 2)],
     );
   }
 
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 5439b0d..93f74eb 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -35,7 +35,7 @@
   m();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 33, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 33, 1)],
     );
   }
 
@@ -102,7 +102,7 @@
   c.m();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 55, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 55, 1)],
     );
   }
 
@@ -143,7 +143,7 @@
   return .m();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 57, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 57, 1)],
     );
   }
 
@@ -170,7 +170,7 @@
   C.m();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 52, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 52, 1)],
     );
   }
 
@@ -182,7 +182,7 @@
   fn();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 51, 2)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 51, 2)],
     );
   }
 
@@ -205,7 +205,7 @@
   g();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 30, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 30, 1)],
     );
   }
 
@@ -217,7 +217,7 @@
   m();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 33, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 33, 1)],
     );
   }
 
@@ -242,7 +242,7 @@
   f();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 29, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 29, 1)],
     );
   }
 
@@ -257,7 +257,7 @@
   a.f();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionInvocation, 37, 1)],
+      [error(diag.inferenceFailureOnFunctionInvocation, 37, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_return_type_test.dart
index 6b807cd..81c156d 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_function_return_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -34,7 +34,7 @@
   get f => 7;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 16, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 16, 1)],
     );
   }
 
@@ -45,7 +45,7 @@
   f() => 7;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 12, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 12, 1)],
     );
   }
 
@@ -96,7 +96,7 @@
   operator +(int x) => print(x);
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 21, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 21, 1)],
     );
   }
 
@@ -115,7 +115,7 @@
   static f() => 7;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 19, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 19, 1)],
     );
   }
 
@@ -136,7 +136,7 @@
   }
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 24, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 24, 1)],
     );
   }
 
@@ -147,7 +147,7 @@
   callback();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 7, 10)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 7, 10)],
     );
   }
 
@@ -158,7 +158,7 @@
   callback(() => print('hey'));
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 21, 11)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 21, 11)],
     );
   }
 
@@ -177,7 +177,7 @@
   print(n);
 };
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 0, 13)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 0, 13)],
     );
   }
 
@@ -198,7 +198,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 27, 1)],
+      [error(diag.unusedElement, 27, 1)],
     );
   }
 
@@ -209,7 +209,7 @@
   f() => 7;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 12, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 12, 1)],
     );
   }
 
@@ -224,7 +224,7 @@
       r'''
 f() => 7;
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 0, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 0, 1)],
     );
   }
 
@@ -235,7 +235,7 @@
   return 7;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 0, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 0, 1)],
     );
   }
 
@@ -246,7 +246,7 @@
   return 7;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 0, 1)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 0, 1)],
     );
   }
 
@@ -261,7 +261,7 @@
       r'''
 typedef Callback(int i);
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 0, 24)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 0, 24)],
     );
   }
 
@@ -276,7 +276,7 @@
       r'''
 typedef Callback = Function(int i);
 ''',
-      [error(WarningCode.inferenceFailureOnFunctionReturnType, 0, 35)],
+      [error(diag.inferenceFailureOnFunctionReturnType, 0, 35)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_generic_invocation_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_generic_invocation_test.dart
index 7e3ba54..81303cd 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_generic_invocation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_generic_invocation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -50,7 +50,7 @@
   (m ?? n)();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnGenericInvocation, 56, 8)],
+      [error(diag.inferenceFailureOnGenericInvocation, 56, 8)],
     );
   }
 
@@ -69,7 +69,7 @@
   (<T>() {})();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnGenericInvocation, 13, 10)],
+      [error(diag.inferenceFailureOnGenericInvocation, 13, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_instance_creation_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_instance_creation_test.dart
index 2c76a99..afe3bff 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_instance_creation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_instance_creation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test/test.dart';
@@ -34,7 +34,7 @@
   HashMap.from({1: 1, 2: 2, 3: 3});
 }
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 39, 12)],
+      [error(diag.inferenceFailureOnInstanceCreation, 39, 12)],
     );
     expect(result.diagnostics[0].message, contains("'HashMap.from'"));
   }
@@ -47,7 +47,7 @@
   c.HashMap.from({1: 1, 2: 2, 3: 3});
 }
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 44, 14)],
+      [error(diag.inferenceFailureOnInstanceCreation, 44, 14)],
     );
     expect(result.diagnostics[0].message, contains("'c.HashMap.from'"));
   }
@@ -60,7 +60,7 @@
   HashMap();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 39, 7)],
+      [error(diag.inferenceFailureOnInstanceCreation, 39, 7)],
     );
     expect(result.diagnostics[0].message, contains("'HashMap'"));
   }
@@ -73,7 +73,7 @@
   c.HashMap();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 44, 9)],
+      [error(diag.inferenceFailureOnInstanceCreation, 44, 9)],
     );
     expect(result.diagnostics[0].message, contains("'c.HashMap'"));
   }
@@ -95,7 +95,7 @@
   E(1);
 }
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 43, 1)],
+      [error(diag.inferenceFailureOnInstanceCreation, 43, 1)],
     );
   }
 
@@ -109,7 +109,7 @@
 @C()
 void f() {}
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 29, 4)],
+      [error(diag.inferenceFailureOnInstanceCreation, 29, 4)],
     );
   }
 
@@ -177,7 +177,7 @@
   HashMap();
 }
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 39, 7)],
+      [error(diag.inferenceFailureOnInstanceCreation, 39, 7)],
     );
   }
 
@@ -199,7 +199,7 @@
 import 'dart:collection';
 var m = HashMap();
 ''',
-      [error(WarningCode.inferenceFailureOnInstanceCreation, 34, 7)],
+      [error(diag.inferenceFailureOnInstanceCreation, 34, 7)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart
index 0803cac..b6165bd 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_uninitialized_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -34,7 +34,7 @@
   var a;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUninitializedVariable, 16, 1)],
+      [error(diag.inferenceFailureOnUninitializedVariable, 16, 1)],
     );
   }
 
@@ -72,7 +72,7 @@
   C(this.a);
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUninitializedVariable, 18, 1)],
+      [error(diag.inferenceFailureOnUninitializedVariable, 18, 1)],
     );
   }
 
@@ -84,8 +84,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(WarningCode.inferenceFailureOnUninitializedVariable, 17, 1),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.inferenceFailureOnUninitializedVariable, 17, 1),
       ],
     );
   }
@@ -97,7 +97,7 @@
   var a = 7;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -112,10 +112,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(WarningCode.unusedLocalVariable, 34, 1),
-        error(WarningCode.unusedLocalVariable, 46, 1),
-        error(WarningCode.unusedLocalVariable, 67, 1),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.unusedLocalVariable, 34, 1),
+        error(diag.unusedLocalVariable, 46, 1),
+        error(diag.unusedLocalVariable, 67, 1),
       ],
     );
   }
@@ -127,7 +127,7 @@
   static var a;
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUninitializedVariable, 23, 1)],
+      [error(diag.inferenceFailureOnUninitializedVariable, 23, 1)],
     );
   }
 
@@ -136,7 +136,7 @@
       r'''
 var a;
 ''',
-      [error(WarningCode.inferenceFailureOnUninitializedVariable, 4, 1)],
+      [error(diag.inferenceFailureOnUninitializedVariable, 4, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart
index 7fcfcf2..ad81e56 100644
--- a/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/inference_failure_on_untyped_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -46,7 +46,7 @@
       r'''
 void fn(String cb(var x)) => print(cb(7));
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 18, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 18, 5)],
     );
   }
 
@@ -61,7 +61,7 @@
       r'''
 void fn({var a}) => print(a);
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 9, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 9, 5)],
     );
   }
 
@@ -76,7 +76,7 @@
       r'''
 void fn(a) => print(a);
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 8, 1)],
+      [error(diag.inferenceFailureOnUntypedParameter, 8, 1)],
     );
   }
 
@@ -89,7 +89,7 @@
   }
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 14, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 14, 5)],
     );
   }
 
@@ -122,7 +122,7 @@
   C(var a) : assert(a != null);
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 14, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 14, 5)],
     );
   }
 
@@ -150,8 +150,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(WarningCode.inferenceFailureOnUntypedParameter, 23, 5),
+        error(diag.unusedLocalVariable, 18, 1),
+        error(diag.inferenceFailureOnUntypedParameter, 23, 5),
       ],
     );
   }
@@ -193,7 +193,7 @@
   void fn(var a) => print(a);
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 20, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 20, 5)],
     );
   }
 
@@ -204,7 +204,7 @@
   void fn(var a);
 }
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 29, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 29, 5)],
     );
   }
 
@@ -286,7 +286,7 @@
       r'''
 typedef void cb(a);
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 16, 1)],
+      [error(diag.inferenceFailureOnUntypedParameter, 16, 1)],
     );
   }
 
@@ -301,7 +301,7 @@
       r'''
 void fn(a) => print(a);
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 8, 1)],
+      [error(diag.inferenceFailureOnUntypedParameter, 8, 1)],
     );
   }
 
@@ -322,7 +322,7 @@
       r'''
 void fn(var a) => print(a);
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 8, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 8, 5)],
     );
   }
 
@@ -331,7 +331,7 @@
       r'''
 void fn([var a = 7]) => print(a);
 ''',
-      [error(WarningCode.inferenceFailureOnUntypedParameter, 9, 5)],
+      [error(diag.inferenceFailureOnUntypedParameter, 9, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/initializer_for_non_existent_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializer_for_non_existent_field_test.dart
index df99f38d6..d7aa565 100644
--- a/pkg/analyzer/test/src/diagnostics/initializer_for_non_existent_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializer_for_non_existent_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.initializerForNonExistentField,
+          diag.initializerForNonExistentField,
           24,
           9,
           messageContains: ["'x'"],
@@ -46,7 +46,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.initializerForNonExistentField,
+          diag.initializerForNonExistentField,
           36,
           5,
           messageContains: ["'x'"],
@@ -62,7 +62,7 @@
   A() : x = 0 {}
 }
 ''',
-      [error(CompileTimeErrorCode.initializerForNonExistentField, 18, 5)],
+      [error(diag.initializerForNonExistentField, 18, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart b/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart
index 46ab266..502fcf9 100644
--- a/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/initializer_for_static_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A([this.x = 0]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.initializerForStaticField, 32, 6)],
+      [error(diag.initializerForStaticField, 32, 6)],
     );
   }
 
@@ -36,12 +36,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.initializerForStaticField,
-          38,
-          5,
-          messageContains: ["'x'"],
-        ),
+        error(diag.initializerForStaticField, 38, 5, messageContains: ["'x'"]),
       ],
     );
   }
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 f1082a3..e38f442 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,13 +23,7 @@
   A(this.x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          14,
-          6,
-        ),
-      ],
+      [error(diag.initializingFormalForNonExistentField, 14, 6)],
     );
   }
 
@@ -43,13 +37,7 @@
   B(this.x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          49,
-          6,
-        ),
-      ],
+      [error(diag.initializingFormalForNonExistentField, 49, 6)],
     );
   }
 
@@ -60,13 +48,7 @@
   A([this.x]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          15,
-          6,
-        ),
-      ],
+      [error(diag.initializingFormalForNonExistentField, 15, 6)],
     );
   }
 
@@ -78,13 +60,7 @@
   A(this.x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          32,
-          6,
-        ),
-      ],
+      [error(diag.initializingFormalForNonExistentField, 32, 6)],
     );
   }
 
@@ -107,12 +83,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          25,
-          6,
-        ),
-        error(WarningCode.unusedElementParameter, 30, 1),
+        error(diag.initializingFormalForNonExistentField, 25, 6),
+        error(diag.unusedElementParameter, 30, 1),
       ],
     );
   }
@@ -125,13 +97,7 @@
   const E(this.x);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          27,
-          6,
-        ),
-      ],
+      [error(diag.initializingFormalForNonExistentField, 27, 6)],
     );
   }
 
@@ -144,13 +110,7 @@
   int get x => 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          27,
-          6,
-        ),
-      ],
+      [error(diag.initializingFormalForNonExistentField, 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 51efe86..9f0e9ad 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           47,
           1,
           correctionContains: "class 'C'",
@@ -73,7 +73,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           71,
           1,
           correctionContains: "class 'C'",
@@ -94,7 +94,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           41,
           1,
           correctionContains: "class 'A'",
@@ -113,7 +113,7 @@
   a.m<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 57, 1)],
+      [error(diag.undefinedGetter, 57, 1)],
     );
   }
 
@@ -129,7 +129,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           41,
           1,
           correctionContains: "mixin 'A'",
@@ -150,7 +150,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           44,
           1,
           correctionContains: "class 'A'",
@@ -171,7 +171,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           44,
           1,
           correctionContains: "mixin 'A'",
@@ -193,7 +193,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.instanceAccessToStaticMember,
+          diag.instanceAccessToStaticMember,
           47,
           1,
           correctionContains: "mixin 'A'",
@@ -231,7 +231,7 @@
   a.f;
 }
 ''',
-      [error(CompileTimeErrorCode.instanceAccessToStaticMember, 41, 1)],
+      [error(diag.instanceAccessToStaticMember, 41, 1)],
     );
   }
 
@@ -245,7 +245,7 @@
   a.f;
 }
 ''',
-      [error(CompileTimeErrorCode.instanceAccessToStaticMember, 47, 1)],
+      [error(diag.instanceAccessToStaticMember, 47, 1)],
     );
   }
 
@@ -259,7 +259,7 @@
   a.f = 42;
 }
 ''',
-      [error(CompileTimeErrorCode.instanceAccessToStaticMember, 46, 1)],
+      [error(diag.instanceAccessToStaticMember, 46, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instance_member_access_from_factory_test.dart b/pkg/analyzer/test/src/diagnostics/instance_member_access_from_factory_test.dart
index feec686..917e108 100644
--- a/pkg/analyzer/test/src/diagnostics/instance_member_access_from_factory_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instance_member_access_from_factory_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromFactory, 56, 3)],
+      [error(diag.instanceMemberAccessFromFactory, 56, 3)],
     );
   }
 
@@ -46,7 +46,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromFactory, 73, 3)],
+      [error(diag.instanceMemberAccessFromFactory, 73, 3)],
     );
   }
 
@@ -62,7 +62,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromFactory, 52, 3)],
+      [error(diag.instanceMemberAccessFromFactory, 52, 3)],
     );
   }
 
@@ -78,7 +78,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromFactory, 58, 3)],
+      [error(diag.instanceMemberAccessFromFactory, 58, 3)],
     );
   }
 
@@ -95,7 +95,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromFactory, 102, 3)],
+      [error(diag.instanceMemberAccessFromFactory, 102, 3)],
     );
   }
 
@@ -111,7 +111,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromFactory, 47, 3)],
+      [error(diag.instanceMemberAccessFromFactory, 47, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instance_member_access_from_static_test.dart b/pkg/analyzer/test/src/diagnostics/instance_member_access_from_static_test.dart
index 5ed1216..cdeadaa 100644
--- a/pkg/analyzer/test/src/diagnostics/instance_member_access_from_static_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instance_member_access_from_static_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 75, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 75, 3)],
     );
   }
 
@@ -43,7 +43,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 57, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 57, 3)],
     );
   }
 
@@ -60,7 +60,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 77, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 77, 3)],
     );
   }
 
@@ -75,7 +75,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 63, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 63, 3)],
     );
   }
 
@@ -91,7 +91,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 107, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 107, 3)],
     );
   }
 
@@ -106,7 +106,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 53, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 53, 3)],
     );
   }
 
@@ -121,7 +121,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 57, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 57, 3)],
     );
   }
 
@@ -138,7 +138,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 78, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 78, 3)],
     );
   }
 
@@ -155,7 +155,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 74, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 74, 3)],
     );
   }
 
@@ -172,7 +172,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 78, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 78, 3)],
     );
   }
 
@@ -187,7 +187,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 68, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 68, 3)],
     );
   }
 
@@ -202,7 +202,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 64, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 64, 3)],
     );
   }
 
@@ -217,7 +217,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.instanceMemberAccessFromStatic, 68, 3)],
+      [error(diag.instanceMemberAccessFromStatic, 68, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart b/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart
index 016484e..1b0c7ce 100644
--- a/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,8 +25,8 @@
   var a = const A<int>();
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 54, 1),
-        error(CompileTimeErrorCode.instantiateAbstractClass, 64, 6),
+        error(diag.unusedLocalVariable, 54, 1),
+        error(diag.instantiateAbstractClass, 64, 6),
       ],
     );
 
@@ -43,8 +43,8 @@
   A a = const A();
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 49, 1),
-        error(CompileTimeErrorCode.instantiateAbstractClass, 59, 1),
+        error(diag.unusedLocalVariable, 49, 1),
+        error(diag.instantiateAbstractClass, 59, 1),
       ],
     );
   }
@@ -57,7 +57,7 @@
   new A<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 40, 6)],
+      [error(diag.instantiateAbstractClass, 40, 6)],
     );
 
     assertType(findNode.instanceCreation('new A<int>'), 'A<int>');
@@ -72,7 +72,7 @@
   new B();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 52, 1)],
+      [error(diag.instantiateAbstractClass, 52, 1)],
     );
   }
 
@@ -84,7 +84,7 @@
   new A();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 37, 1)],
+      [error(diag.instantiateAbstractClass, 37, 1)],
     );
   }
 
@@ -96,7 +96,7 @@
   A<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 36, 6)],
+      [error(diag.instantiateAbstractClass, 36, 6)],
     );
 
     assertType(findNode.instanceCreation('A<int>'), 'A<int>');
@@ -111,7 +111,7 @@
   B();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 48, 1)],
+      [error(diag.instantiateAbstractClass, 48, 1)],
     );
   }
 
@@ -123,7 +123,7 @@
   A();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateAbstractClass, 33, 1)],
+      [error(diag.instantiateAbstractClass, 33, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart b/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart
index 71ee270..9a74111 100644
--- a/pkg/analyzer/test/src/diagnostics/instantiate_enum_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instantiate_enum_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   return const E();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateEnum, 49, 1)],
+      [error(diag.instantiateEnum, 49, 1)],
     );
   }
 
@@ -36,7 +36,7 @@
   return new E();
 }
 ''',
-      [error(CompileTimeErrorCode.instantiateEnum, 47, 1)],
+      [error(diag.instantiateEnum, 47, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/instantiate_type_alias_expands_to_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/instantiate_type_alias_expands_to_type_parameter_test.dart
index 786eca5..399c4ff 100644
--- a/pkg/analyzer/test/src/diagnostics/instantiate_type_alias_expands_to_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instantiate_type_alias_expands_to_type_parameter_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -18,7 +18,7 @@
 class InstantiateTypeAliasExpandsToTypeParameterTest
     extends PubPackageResolutionTest {
   DiagnosticCode get _errorCode =>
-      CompileTimeErrorCode.instantiateTypeAliasExpandsToTypeParameter;
+      diag.instantiateTypeAliasExpandsToTypeParameter;
 
   test_const_generic_noArguments_unnamed_typeParameter() async {
     await assertErrorsInCode(
diff --git a/pkg/analyzer/test/src/diagnostics/integer_literal_imprecise_as_double_test.dart b/pkg/analyzer/test/src/diagnostics/integer_literal_imprecise_as_double_test.dart
index bb52a37..fdba894 100644
--- a/pkg/analyzer/test/src/diagnostics/integer_literal_imprecise_as_double_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/integer_literal_imprecise_as_double_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
       '000000000000000000000000000000000000000000000000000000;',
       [
         error(
-          CompileTimeErrorCode.integerLiteralImpreciseAsDouble,
+          diag.integerLiteralImpreciseAsDouble,
           11,
           259,
           correctionContains:
@@ -45,7 +45,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.integerLiteralImpreciseAsDouble,
+          diag.integerLiteralImpreciseAsDouble,
           11,
           19,
           // We suggest a valid double instead.
@@ -62,7 +62,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.integerLiteralImpreciseAsDouble,
+          diag.integerLiteralImpreciseAsDouble,
           11,
           25,
           // We suggest a valid double instead.
diff --git a/pkg/analyzer/test/src/diagnostics/integer_literal_out_of_range_test.dart b/pkg/analyzer/test/src/diagnostics/integer_literal_out_of_range_test.dart
index ac1a81b..68c0b86 100644
--- a/pkg/analyzer/test/src/diagnostics/integer_literal_out_of_range_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/integer_literal_out_of_range_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.integerLiteralOutOfRange,
+          diag.integerLiteralOutOfRange,
           8,
           26,
           messageContains: [RegExp('0xFFFF_FFFF_FFFF_FFFF_FFFF')],
@@ -36,7 +36,7 @@
       '''
 int x = -9223372036854775809;
 ''',
-      [error(CompileTimeErrorCode.integerLiteralOutOfRange, 9, 19)],
+      [error(diag.integerLiteralOutOfRange, 9, 19)],
     );
   }
 
@@ -45,7 +45,7 @@
       '''
 int x = 9223372036854775808;
 ''',
-      [error(CompileTimeErrorCode.integerLiteralOutOfRange, 8, 19)],
+      [error(diag.integerLiteralOutOfRange, 8, 19)],
     );
   }
 
@@ -56,7 +56,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.integerLiteralOutOfRange,
+          diag.integerLiteralOutOfRange,
           8,
           25,
           messageContains: [RegExp('9_223_372_036_854_775_808')],
diff --git a/pkg/analyzer/test/src/diagnostics/interface_class_extended_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/interface_class_extended_outside_of_library_test.dart
index bc20e23..910a1e2 100644
--- a/pkg/analyzer/test/src/diagnostics/interface_class_extended_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/interface_class_extended_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,13 +33,7 @@
 import 'foo.dart';
 class Bar extends Foo {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
-          37,
-          3,
-        ),
-      ],
+      [error(diag.interfaceClassExtendedOutsideOfLibrary, 37, 3)],
     );
   }
 
@@ -54,13 +48,7 @@
 import 'foo.dart';
 class Bar extends FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
-          37,
-          10,
-        ),
-      ],
+      [error(diag.interfaceClassExtendedOutsideOfLibrary, 37, 10)],
     );
   }
 
@@ -75,13 +63,7 @@
 typedef FooTypedef = Foo;
 class Bar extends FooTypedef {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
-          63,
-          10,
-        ),
-      ],
+      [error(diag.interfaceClassExtendedOutsideOfLibrary, 63, 10)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
index 028e182..a85cd38 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 import 'lib1.dart' deferred as a;
 @a.C() main () {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotationFromDeferredLibrary, 49, 3)],
+      [error(diag.invalidAnnotationFromDeferredLibrary, 49, 3)],
     );
   }
 
@@ -42,14 +42,7 @@
 class C { const C(int i); }
 @C(a.x) main () {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .invalidAnnotationConstantValueFromDeferredLibrary,
-          81,
-          1,
-        ),
-      ],
+      [error(diag.invalidAnnotationConstantValueFromDeferredLibrary, 81, 1)],
     );
   }
 
@@ -65,7 +58,7 @@
 import 'lib1.dart' deferred as a;
 @a.v main () {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotationFromDeferredLibrary, 49, 3)],
+      [error(diag.invalidAnnotationFromDeferredLibrary, 49, 3)],
     );
   }
 
@@ -80,7 +73,7 @@
 import 'lib1.dart' deferred as a;
 @a.C.name() main () {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotationFromDeferredLibrary, 49, 3)],
+      [error(diag.invalidAnnotationFromDeferredLibrary, 49, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_target_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_target_test.dart
index 34ff913..4250dd1 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_target_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_target_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -78,7 +78,7 @@
   static int f = 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 16)],
+      [error(diag.invalidAnnotationTarget, 46, 16)],
     );
   }
 
@@ -91,7 +91,7 @@
   static int get f => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 16)],
+      [error(diag.invalidAnnotationTarget, 46, 16)],
     );
   }
 
@@ -104,7 +104,7 @@
   static void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 16)],
+      [error(diag.invalidAnnotationTarget, 46, 16)],
     );
   }
 
@@ -117,7 +117,7 @@
   static void set f(int value) {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 16)],
+      [error(diag.invalidAnnotationTarget, 46, 16)],
     );
   }
 
@@ -131,7 +131,7 @@
   C();
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 47, 16)],
+      [error(diag.invalidAnnotationTarget, 47, 16)],
     );
   }
 
@@ -146,7 +146,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 58, 16)],
+      [error(diag.invalidAnnotationTarget, 58, 16)],
     );
   }
 
@@ -160,7 +160,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 61, 16)],
+      [error(diag.invalidAnnotationTarget, 61, 16)],
     );
   }
 
@@ -183,7 +183,7 @@
 @mustBeOverridden
 void m() {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 35, 16)],
+      [error(diag.invalidAnnotationTarget, 35, 16)],
     );
   }
 }
@@ -250,7 +250,7 @@
   static int f = 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 13)],
+      [error(diag.invalidAnnotationTarget, 46, 13)],
     );
   }
 
@@ -263,7 +263,7 @@
   static int get f => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 13)],
+      [error(diag.invalidAnnotationTarget, 46, 13)],
     );
   }
 
@@ -276,7 +276,7 @@
   static void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 13)],
+      [error(diag.invalidAnnotationTarget, 46, 13)],
     );
   }
 
@@ -289,7 +289,7 @@
   static void set f(int value) {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 13)],
+      [error(diag.invalidAnnotationTarget, 46, 13)],
     );
   }
 
@@ -303,7 +303,7 @@
   C();
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 47, 13)],
+      [error(diag.invalidAnnotationTarget, 47, 13)],
     );
   }
 
@@ -318,7 +318,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 58, 13)],
+      [error(diag.invalidAnnotationTarget, 58, 13)],
     );
   }
 
@@ -332,7 +332,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 61, 13)],
+      [error(diag.invalidAnnotationTarget, 61, 13)],
     );
   }
 
@@ -355,7 +355,7 @@
 @mustCallSuper
 void m() {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 35, 13)],
+      [error(diag.invalidAnnotationTarget, 35, 13)],
     );
   }
 }
@@ -378,7 +378,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 47, 9)],
+      [error(diag.invalidAnnotationTarget, 47, 9)],
     );
   }
 
@@ -441,7 +441,7 @@
   static int get g => 0; 
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 100, 9)],
+      [error(diag.invalidAnnotationTarget, 100, 9)],
     );
   }
 
@@ -459,7 +459,7 @@
   static void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 95, 9)],
+      [error(diag.invalidAnnotationTarget, 95, 9)],
     );
   }
 
@@ -477,7 +477,7 @@
   static set g(int i) {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 99, 9)],
+      [error(diag.invalidAnnotationTarget, 99, 9)],
     );
   }
 }
@@ -535,7 +535,7 @@
 @A()
 mixin M {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 98, 1)],
+      [error(diag.invalidAnnotationTarget, 98, 1)],
     );
   }
 
@@ -552,7 +552,7 @@
 @A()
 int x = 0;
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 98, 1)],
+      [error(diag.invalidAnnotationTarget, 98, 1)],
     );
   }
 
@@ -571,7 +571,7 @@
 @a
 int x = 0;
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 114, 1)],
+      [error(diag.invalidAnnotationTarget, 114, 1)],
     );
   }
 
@@ -604,7 +604,7 @@
   @A() void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 112, 1)],
+      [error(diag.invalidAnnotationTarget, 112, 1)],
     );
   }
 
@@ -621,7 +621,7 @@
 @A()
 class C {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 98, 1)],
+      [error(diag.invalidAnnotationTarget, 98, 1)],
     );
   }
 
@@ -652,7 +652,7 @@
 @A()
 class C {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 97, 1)],
+      [error(diag.invalidAnnotationTarget, 97, 1)],
     );
   }
 
@@ -699,7 +699,7 @@
   @A() int f = 7;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 110, 1)],
+      [error(diag.invalidAnnotationTarget, 110, 1)],
     );
   }
 
@@ -716,7 +716,7 @@
 @A()
 class C {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 98, 1)],
+      [error(diag.invalidAnnotationTarget, 98, 1)],
     );
   }
 
@@ -793,7 +793,7 @@
   int M(int x) => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 109, 1)],
+      [error(diag.invalidAnnotationTarget, 109, 1)],
     );
   }
 
@@ -810,7 +810,7 @@
 @A()
 int get x => 0;
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 97, 1)],
+      [error(diag.invalidAnnotationTarget, 97, 1)],
     );
   }
 
@@ -827,7 +827,7 @@
 @A()
 set x(_x) {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 97, 1)],
+      [error(diag.invalidAnnotationTarget, 97, 1)],
     );
   }
 
@@ -862,7 +862,7 @@
   int m(int x) => x;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 107, 1)],
+      [error(diag.invalidAnnotationTarget, 107, 1)],
     );
   }
 
@@ -881,7 +881,7 @@
   set x(int _x) {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 107, 1)],
+      [error(diag.invalidAnnotationTarget, 107, 1)],
     );
   }
 
@@ -912,7 +912,7 @@
 @A()
 class C {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 96, 1)],
+      [error(diag.invalidAnnotationTarget, 96, 1)],
     );
   }
 
@@ -957,7 +957,7 @@
   int get x => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 107, 1)],
+      [error(diag.invalidAnnotationTarget, 107, 1)],
     );
   }
 
@@ -1008,7 +1008,7 @@
   set x(int _x) {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 107, 1)],
+      [error(diag.invalidAnnotationTarget, 107, 1)],
     );
   }
 
@@ -1025,7 +1025,7 @@
 @A()
 int f(int x) => x;
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 95, 1)],
+      [error(diag.invalidAnnotationTarget, 95, 1)],
     );
   }
 
@@ -1042,7 +1042,7 @@
 @A()
 class C {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 98, 1)],
+      [error(diag.invalidAnnotationTarget, 98, 1)],
     );
   }
 
@@ -1073,7 +1073,7 @@
 @A()
 int x = 0;
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 117, 1)],
+      [error(diag.invalidAnnotationTarget, 117, 1)],
     );
   }
 
@@ -1132,7 +1132,7 @@
 
 void f({@A() required int x}) {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 114, 1)],
+      [error(diag.invalidAnnotationTarget, 114, 1)],
     );
   }
 
@@ -1148,7 +1148,7 @@
 
 void f(@A() int x) {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 113, 1)],
+      [error(diag.invalidAnnotationTarget, 113, 1)],
     );
   }
 
@@ -1167,7 +1167,7 @@
   C();
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 118, 1)],
+      [error(diag.invalidAnnotationTarget, 118, 1)],
     );
   }
 
@@ -1219,7 +1219,7 @@
   int x() => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 129, 1)],
+      [error(diag.invalidAnnotationTarget, 129, 1)],
     );
   }
 
@@ -1238,7 +1238,7 @@
   int x() => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 129, 1)],
+      [error(diag.invalidAnnotationTarget, 129, 1)],
     );
   }
 
@@ -1305,7 +1305,7 @@
   static int x() => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 118, 1)],
+      [error(diag.invalidAnnotationTarget, 118, 1)],
     );
   }
 
@@ -1322,7 +1322,7 @@
 @A()
 void f(int x) {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 98, 1)],
+      [error(diag.invalidAnnotationTarget, 98, 1)],
     );
   }
 
@@ -1354,7 +1354,7 @@
   int get x => 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 107, 1)],
+      [error(diag.invalidAnnotationTarget, 107, 1)],
     );
   }
 
@@ -1373,7 +1373,7 @@
   int m(int x) => x;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 107, 1)],
+      [error(diag.invalidAnnotationTarget, 107, 1)],
     );
   }
 
@@ -1422,7 +1422,7 @@
   int f = 0;
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 117, 1)],
+      [error(diag.invalidAnnotationTarget, 117, 1)],
     );
   }
 
@@ -1498,7 +1498,7 @@
 extension on C {}
 class C {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 93, 1)],
+      [error(diag.invalidAnnotationTarget, 93, 1)],
     );
   }
 
@@ -1556,7 +1556,7 @@
 
 void f(@A() p) {}
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 109, 1)],
+      [error(diag.invalidAnnotationTarget, 109, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart
index d062848..b982874 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 @A
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 32, 2)],
+      [error(diag.invalidAnnotation, 32, 2)],
     );
   }
 
@@ -39,7 +39,7 @@
 @A.foo
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 38, 6)],
+      [error(diag.invalidAnnotation, 38, 6)],
     );
   }
 
@@ -53,7 +53,7 @@
 @A.foo()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 38, 8)],
+      [error(diag.invalidAnnotation, 38, 8)],
     );
   }
 
@@ -65,7 +65,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 12, 2)],
+      [error(diag.invalidAnnotation, 12, 2)],
     );
   }
 
@@ -81,7 +81,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 24, 4)],
+      [error(diag.invalidAnnotation, 24, 4)],
     );
   }
 
@@ -97,7 +97,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 24, 4)],
+      [error(diag.invalidAnnotation, 24, 4)],
     );
   }
 
@@ -113,7 +113,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 24, 4)],
+      [error(diag.invalidAnnotation, 24, 4)],
     );
   }
 
@@ -136,7 +136,7 @@
   var b; // ignore:unused_local_variable
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 28, 5)],
+      [error(diag.invalidAnnotation, 28, 5)],
     );
   }
 
@@ -149,7 +149,7 @@
   var b; // ignore:unused_local_variable
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 28, 2)],
+      [error(diag.invalidAnnotation, 28, 2)],
     );
   }
 
@@ -169,7 +169,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 35, 19)],
+      [error(diag.invalidAnnotation, 35, 19)],
     );
   }
 
@@ -187,7 +187,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 116, 14)],
+      [error(diag.invalidAnnotation, 116, 14)],
     );
   }
 
@@ -199,7 +199,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 13, 2)],
+      [error(diag.invalidAnnotation, 13, 2)],
     );
   }
 
@@ -211,7 +211,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 13, 2)],
+      [error(diag.invalidAnnotation, 13, 2)],
     );
   }
 
@@ -223,7 +223,7 @@
 @p.sin(0)
 class B {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 26, 9)],
+      [error(diag.invalidAnnotation, 26, 9)],
     );
   }
 
@@ -235,7 +235,7 @@
 @p.sin.cos(0)
 class B {}
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 26, 13)],
+      [error(diag.invalidAnnotation, 26, 13)],
     );
   }
 
@@ -249,7 +249,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAnnotation, 28, 4)],
+      [error(diag.invalidAnnotation, 28, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
index ffeb603..a79a361 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_assignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_assignment_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 
 String Function(String) f = C();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 76, 3)],
+      [error(diag.invalidAssignment, 76, 3)],
     );
   }
 
@@ -45,7 +45,7 @@
         // The type arguments of the instance of `C` should be accurate and be
         // taken into account when evaluating the assignment of the implicit call
         // reference.
-        error(CompileTimeErrorCode.invalidAssignment, 86, 4),
+        error(diag.invalidAssignment, 86, 4),
       ],
     );
   }
@@ -59,7 +59,7 @@
 
 void Function() f = C();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 56, 3)],
+      [error(diag.invalidAssignment, 56, 3)],
     );
   }
 
@@ -73,7 +73,7 @@
 
 int Function(int) f = C();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 72, 3)],
+      [error(diag.invalidAssignment, 72, 3)],
     );
   }
 
@@ -87,7 +87,7 @@
 }
 I x = E.v;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 56, 3)],
+      [error(diag.invalidAssignment, 56, 3)],
     );
   }
 
@@ -101,9 +101,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 61, 1),
+        error(diag.unusedLocalVariable, 61, 1),
         error(
-          CompileTimeErrorCode.invalidAssignment,
+          diag.invalidAssignment,
           65,
           1,
           messageContains: ['A<int>', 'A<String>'],
@@ -122,9 +122,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 56, 1),
+        error(diag.unusedLocalVariable, 56, 1),
         error(
-          CompileTimeErrorCode.invalidAssignment,
+          diag.invalidAssignment,
           60,
           1,
           messageContains: ['A<int>', 'A<String>'],
@@ -143,9 +143,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 55, 1),
+        error(diag.unusedLocalVariable, 55, 1),
         error(
-          CompileTimeErrorCode.invalidAssignment,
+          diag.invalidAssignment,
           59,
           1,
           messageContains: ['A<int>', 'A<String>'],
@@ -161,7 +161,7 @@
 
 Function f = C();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 25, 3)],
+      [error(diag.invalidAssignment, 25, 3)],
     );
   }
 
@@ -172,7 +172,7 @@
 
 String Function(String) f = C();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 40, 3)],
+      [error(diag.invalidAssignment, 40, 3)],
     );
   }
 
@@ -185,7 +185,7 @@
 
 void Function(String) f = C();
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 61, 3)],
+      [error(diag.invalidAssignment, 61, 3)],
     );
   }
 
@@ -199,7 +199,7 @@
   U f = C();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 72, 3)],
+      [error(diag.invalidAssignment, 72, 3)],
     );
   }
 
@@ -213,7 +213,7 @@
   U f = C();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 82, 3)],
+      [error(diag.invalidAssignment, 82, 3)],
     );
   }
 
@@ -423,7 +423,7 @@
   g = () => 0;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -435,7 +435,7 @@
   String v = (a)..isEven;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 64, 1)],
+      [error(diag.invalidAssignment, 64, 1)],
     );
   }
 
@@ -453,10 +453,7 @@
   b += 3;
 }
 ''',
-      [
-        error(WarningCode.unusedField, 19, 6),
-        error(WarningCode.unusedLocalVariable, 116, 1),
-      ],
+      [error(diag.unusedField, 19, 6), error(diag.unusedLocalVariable, 116, 1)],
     );
   }
 
@@ -489,7 +486,7 @@
 
 C Function(String) g = C<int>.new;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 49, 10)],
+      [error(diag.invalidAssignment, 49, 10)],
     );
   }
 
@@ -499,7 +496,7 @@
 f({String x = 0}) {
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 14, 1)],
+      [error(diag.invalidAssignment, 14, 1)],
     );
   }
 
@@ -514,7 +511,7 @@
       r'''
 f([String x = 0]) {
 }''',
-      [error(CompileTimeErrorCode.invalidAssignment, 14, 1)],
+      [error(diag.invalidAssignment, 14, 1)],
     );
   }
 
@@ -532,7 +529,7 @@
   String x = (() => 5)();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 23, 11)],
+      [error(diag.invalidAssignment, 23, 11)],
     );
   }
 
@@ -549,7 +546,7 @@
 T f<T>(T a) => a;
 U Function<U>(U, int) foo = f;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 46, 1)],
+      [error(diag.invalidAssignment, 46, 1)],
     );
   }
 
@@ -566,7 +563,7 @@
 T f<T>(T a) => a;
 int Function(int, int) foo = f;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 47, 1)],
+      [error(diag.invalidAssignment, 47, 1)],
     );
   }
 
@@ -612,7 +609,7 @@
 
 void Function(String) g = f<int>;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 45, 6)],
+      [error(diag.invalidAssignment, 45, 6)],
     );
   }
 
@@ -624,7 +621,7 @@
   d ??= i;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 37, 1)],
+      [error(diag.invalidAssignment, 37, 1)],
     );
   }
 
@@ -736,7 +733,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 80, 1)],
+      [error(diag.invalidAssignment, 80, 1)],
     );
   }
 
@@ -749,7 +746,7 @@
   x = y;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -760,7 +757,7 @@
   x = null;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 24, 4)],
+      [error(diag.invalidAssignment, 24, 4)],
     );
   }
 
@@ -773,8 +770,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 12, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 21, 3),
+        error(diag.unusedLocalVariable, 12, 1),
+        error(diag.invalidAssignment, 21, 3),
       ],
     );
   }
@@ -789,7 +786,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 44, 1)],
+      [error(diag.invalidAssignment, 44, 1)],
     );
   }
 
@@ -801,7 +798,7 @@
   String v = (a);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 64, 1)],
+      [error(diag.invalidAssignment, 64, 1)],
     );
   }
 
@@ -818,7 +815,7 @@
   a++;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 65, 3)],
+      [error(diag.invalidAssignment, 65, 3)],
     );
   }
 
@@ -851,7 +848,7 @@
   c.a++;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 91, 5)],
+      [error(diag.invalidAssignment, 91, 5)],
     );
   }
 
@@ -884,7 +881,7 @@
   ++a;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 65, 3)],
+      [error(diag.invalidAssignment, 65, 3)],
     );
   }
 
@@ -917,7 +914,7 @@
   ++c.a;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 91, 5)],
+      [error(diag.invalidAssignment, 91, 5)],
     );
   }
 
@@ -955,10 +952,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 127, 1),
-        error(WarningCode.unusedLocalVariable, 140, 1),
-        error(WarningCode.unusedLocalVariable, 153, 2),
-        error(WarningCode.unusedLocalVariable, 167, 1),
+        error(diag.unusedLocalVariable, 127, 1),
+        error(diag.unusedLocalVariable, 140, 1),
+        error(diag.unusedLocalVariable, 153, 2),
+        error(diag.unusedLocalVariable, 167, 1),
       ],
     );
   }
@@ -971,7 +968,7 @@
   print(r);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 28, 12)],
+      [error(diag.invalidAssignment, 28, 12)],
     );
   }
 
@@ -982,7 +979,7 @@
   r = (a: 1, b: 2);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 33, 12)],
+      [error(diag.invalidAssignment, 33, 12)],
     );
   }
 
@@ -996,7 +993,7 @@
   (int, int)? r;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 22, 12)],
+      [error(diag.invalidAssignment, 22, 12)],
     );
   }
 
@@ -1008,7 +1005,7 @@
   T t = int;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 21, 3)],
+      [error(diag.invalidAssignment, 21, 3)],
     );
   }
 
@@ -1022,7 +1019,7 @@
   A.x = '0';
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 46, 3)],
+      [error(diag.invalidAssignment, 46, 3)],
     );
   }
 
@@ -1038,7 +1035,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 74, 1)],
+      [error(diag.invalidAssignment, 74, 1)],
     );
   }
 
@@ -1051,7 +1048,7 @@
   x = null;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 37, 4)],
+      [error(diag.invalidAssignment, 37, 4)],
     );
   }
 
@@ -1060,7 +1057,7 @@
       '''
 int x = 'string';
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 8, 8)],
+      [error(diag.invalidAssignment, 8, 8)],
     );
   }
 
@@ -1075,7 +1072,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 58, 1)],
+      [error(diag.invalidAssignment, 58, 1)],
     );
   }
 
@@ -1094,7 +1091,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 131, 1)],
+      [error(diag.invalidAssignment, 131, 1)],
     );
   }
 
@@ -1105,7 +1102,7 @@
   int x = 'string';
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 20, 8)],
+      [error(diag.invalidAssignment, 20, 8)],
     );
   }
 
@@ -1127,7 +1124,7 @@
   print(n);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 218, 7)],
+      [error(diag.invalidAssignment, 218, 7)],
     );
   }
 }
@@ -1141,7 +1138,7 @@
 dynamic a;
 void Function(int i) f = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 36, 1)],
+      [error(diag.invalidAssignment, 36, 1)],
     );
   }
 
@@ -1151,7 +1148,7 @@
 dynamic a;
 int b = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 19, 1)],
+      [error(diag.invalidAssignment, 19, 1)],
     );
   }
 
@@ -1161,7 +1158,7 @@
 dynamic a;
 (int i, ) r = a;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 25, 1)],
+      [error(diag.invalidAssignment, 25, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_await_not_required_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_await_not_required_annotation_test.dart
index 0669b6d..6cd02a4 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_await_not_required_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_await_not_required_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   var x = 0;
 }
 ''',
-      [error(WarningCode.invalidAwaitNotRequiredAnnotation, 69, 5)],
+      [error(diag.invalidAwaitNotRequiredAnnotation, 69, 5)],
     );
   }
 
@@ -43,7 +43,7 @@
   int x = 0;
 }
 ''',
-      [error(WarningCode.invalidAwaitNotRequiredAnnotation, 69, 5)],
+      [error(diag.invalidAwaitNotRequiredAnnotation, 69, 5)],
     );
   }
 
@@ -54,7 +54,7 @@
 @awaitNotRequired
 void f() {}
 ''',
-      [error(WarningCode.invalidAwaitNotRequiredAnnotation, 34, 16)],
+      [error(diag.invalidAwaitNotRequiredAnnotation, 34, 16)],
     );
   }
 
@@ -67,7 +67,7 @@
   void f() {}
 }
 ''',
-      [error(WarningCode.invalidAwaitNotRequiredAnnotation, 46, 16)],
+      [error(diag.invalidAwaitNotRequiredAnnotation, 46, 16)],
     );
   }
 
@@ -84,7 +84,7 @@
   f() {}
 }
 ''',
-      [error(WarningCode.invalidAwaitNotRequiredAnnotation, 82, 16)],
+      [error(diag.invalidAwaitNotRequiredAnnotation, 82, 16)],
     );
   }
 
@@ -95,7 +95,7 @@
 @awaitNotRequired
 int x = 0;
 ''',
-      [error(WarningCode.invalidAwaitNotRequiredAnnotation, 55, 5)],
+      [error(diag.invalidAwaitNotRequiredAnnotation, 55, 5)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
index 2839d96..b48ccce 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_constant_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -44,7 +44,7 @@
   const A(int _);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 87, 1)],
+      [error(diag.invalidConstant, 87, 1)],
     );
   }
 
@@ -55,7 +55,7 @@
   const A(int i) : assert(i.isNegative);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 36, 12)],
+      [error(diag.invalidConstant, 36, 12)],
     );
   }
 
@@ -66,7 +66,7 @@
   const A(int i) : assert(i < 0, 'isNegative = ${i.isNegative}');
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 59, 12)],
+      [error(diag.invalidConstant, 59, 12)],
     );
   }
 
@@ -79,7 +79,7 @@
   const A() : a = C;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 63, 1)],
+      [error(diag.invalidConstant, 63, 1)],
     );
   }
 
@@ -105,7 +105,7 @@
   const A() : x = a.c;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 91, 3)],
+      [error(diag.invalidConstant, 91, 3)],
     );
   }
 
@@ -123,7 +123,7 @@
   const A() : x = a.c + 1;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 91, 3)],
+      [error(diag.invalidConstant, 91, 3)],
     );
   }
 
@@ -141,7 +141,7 @@
   const A() : this.named(a.c);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 103, 3)],
+      [error(diag.invalidConstant, 103, 3)],
     );
   }
 
@@ -161,7 +161,7 @@
   const B() : super(a.c);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 114, 3)],
+      [error(diag.invalidConstant, 114, 3)],
     );
   }
 
@@ -178,9 +178,9 @@
 var b = const B();
 ''',
       [
-        error(CompileTimeErrorCode.invalidConstant, 47, 7),
+        error(diag.invalidConstant, 47, 7),
         error(
-          CompileTimeErrorCode.invalidConstant,
+          diag.invalidConstant,
           77,
           9,
           contextMessages: [
@@ -207,7 +207,7 @@
   const A() : this.named(C);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 71, 1)],
+      [error(diag.invalidConstant, 71, 1)],
     );
   }
 
@@ -222,7 +222,7 @@
   const B() : super(C);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 82, 1)],
+      [error(diag.invalidConstant, 82, 1)],
     );
   }
 
@@ -239,7 +239,7 @@
   const Foo(bar: data);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidConstant, 148, 4)],
+      [error(diag.invalidConstant, 148, 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 0a832dc..6b52469 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_constructor_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_constructor_name_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +23,7 @@
 }
 class B {}
 ''',
-      [error(ParserErrorCode.invalidConstructorName, 12, 1)],
+      [error(diag.invalidConstructorName, 12, 1)],
     );
   }
 
@@ -37,7 +36,7 @@
   B.foo();
 }
 ''',
-      [error(ParserErrorCode.invalidConstructorName, 23, 1)],
+      [error(diag.invalidConstructorName, 23, 1)],
     );
   }
 
@@ -51,7 +50,7 @@
   B();
 }
 ''',
-      [error(ParserErrorCode.invalidConstructorName, 24, 1)],
+      [error(diag.invalidConstructorName, 24, 1)],
     );
   }
 
@@ -62,7 +61,7 @@
   B() : super();
 }
 ''',
-      [error(ParserErrorCode.invalidConstructorName, 12, 1)],
+      [error(diag.invalidConstructorName, 12, 1)],
     );
   }
 
@@ -78,8 +77,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.invalidConstructorName, 40, 1),
-        error(WarningCode.unusedElement, 59, 3),
+        error(diag.invalidConstructorName, 40, 1),
+        error(diag.unusedElement, 59, 3),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_extend_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_extend_annotation_test.dart
index f4a6469..142927e 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_extend_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_extend_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 @Deprecated.extend()
 final class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedExtendAnnotation, 1, 17)],
+      [error(diag.invalidDeprecatedExtendAnnotation, 1, 17)],
     );
   }
 
@@ -38,7 +38,7 @@
 @Deprecated.extend()
 interface class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedExtendAnnotation, 1, 17)],
+      [error(diag.invalidDeprecatedExtendAnnotation, 1, 17)],
     );
   }
 
@@ -50,7 +50,7 @@
   C._();
 }
 ''',
-      [error(WarningCode.invalidDeprecatedExtendAnnotation, 1, 17)],
+      [error(diag.invalidDeprecatedExtendAnnotation, 1, 17)],
     );
   }
 
@@ -61,8 +61,8 @@
 class _C {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedExtendAnnotation, 1, 17),
-        error(WarningCode.unusedElement, 27, 2),
+        error(diag.invalidDeprecatedExtendAnnotation, 1, 17),
+        error(diag.unusedElement, 27, 2),
       ],
     );
   }
@@ -73,7 +73,7 @@
 @Deprecated.extend()
 sealed class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedExtendAnnotation, 1, 17)],
+      [error(diag.invalidDeprecatedExtendAnnotation, 1, 17)],
     );
   }
 
@@ -91,7 +91,7 @@
 @Deprecated.extend()
 mixin M {}
 ''',
-      [error(WarningCode.invalidDeprecatedExtendAnnotation, 1, 17)],
+      [error(diag.invalidDeprecatedExtendAnnotation, 1, 17)],
     );
   }
 
@@ -110,7 +110,7 @@
 @Deprecated.extend()
 typedef F = E;
 ''',
-      [error(WarningCode.invalidDeprecatedExtendAnnotation, 17, 17)],
+      [error(diag.invalidDeprecatedExtendAnnotation, 17, 17)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_implement_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_implement_annotation_test.dart
index 1a9d8fd..9ba0c8f 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_implement_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_implement_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 @Deprecated.implement()
 base class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20)],
+      [error(diag.invalidDeprecatedImplementAnnotation, 1, 20)],
     );
   }
 
@@ -39,7 +39,7 @@
 @Deprecated.implement()
 final class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20)],
+      [error(diag.invalidDeprecatedImplementAnnotation, 1, 20)],
     );
   }
 
@@ -50,8 +50,8 @@
 class _C {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20),
-        error(WarningCode.unusedElement, 30, 2),
+        error(diag.invalidDeprecatedImplementAnnotation, 1, 20),
+        error(diag.unusedElement, 30, 2),
       ],
     );
   }
@@ -62,7 +62,7 @@
 @Deprecated.implement()
 sealed class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20)],
+      [error(diag.invalidDeprecatedImplementAnnotation, 1, 20)],
     );
   }
 
@@ -80,7 +80,7 @@
 @Deprecated.implement()
 void f() {}
 ''',
-      [error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20)],
+      [error(diag.invalidDeprecatedImplementAnnotation, 1, 20)],
     );
   }
 
@@ -97,7 +97,7 @@
 @Deprecated.implement()
 base mixin M {}
 ''',
-      [error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20)],
+      [error(diag.invalidDeprecatedImplementAnnotation, 1, 20)],
     );
   }
 
@@ -108,8 +108,8 @@
 mixin _M {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedImplementAnnotation, 1, 20),
-        error(WarningCode.unusedElement, 30, 2),
+        error(diag.invalidDeprecatedImplementAnnotation, 1, 20),
+        error(diag.unusedElement, 30, 2),
       ],
     );
   }
@@ -129,7 +129,7 @@
 @Deprecated.implement()
 typedef F = E;
 ''',
-      [error(WarningCode.invalidDeprecatedImplementAnnotation, 17, 20)],
+      [error(diag.invalidDeprecatedImplementAnnotation, 17, 20)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_instantiate_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_instantiate_annotation_test.dart
index c6162c7c..3c48131 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_instantiate_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_instantiate_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 @Deprecated.instantiate()
 abstract class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedInstantiateAnnotation, 1, 22)],
+      [error(diag.invalidDeprecatedInstantiateAnnotation, 1, 22)],
     );
   }
 
@@ -40,8 +40,8 @@
 class _C {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedInstantiateAnnotation, 1, 22),
-        error(WarningCode.unusedElement, 32, 2),
+        error(diag.invalidDeprecatedInstantiateAnnotation, 1, 22),
+        error(diag.unusedElement, 32, 2),
       ],
     );
   }
@@ -54,7 +54,7 @@
   C._();
 }
 ''',
-      [error(WarningCode.invalidDeprecatedInstantiateAnnotation, 1, 22)],
+      [error(diag.invalidDeprecatedInstantiateAnnotation, 1, 22)],
     );
   }
 
@@ -64,7 +64,7 @@
 @Deprecated.instantiate()
 sealed class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedInstantiateAnnotation, 1, 22)],
+      [error(diag.invalidDeprecatedInstantiateAnnotation, 1, 22)],
     );
   }
 
@@ -82,7 +82,7 @@
 @Deprecated.instantiate()
 enum E { one; }
 ''',
-      [error(WarningCode.invalidDeprecatedInstantiateAnnotation, 1, 22)],
+      [error(diag.invalidDeprecatedInstantiateAnnotation, 1, 22)],
     );
   }
 
@@ -92,7 +92,7 @@
 @Deprecated.instantiate()
 void f() {}
 ''',
-      [error(WarningCode.invalidDeprecatedInstantiateAnnotation, 1, 22)],
+      [error(diag.invalidDeprecatedInstantiateAnnotation, 1, 22)],
     );
   }
 
@@ -111,7 +111,7 @@
 @Deprecated.instantiate()
 typedef F = E;
 ''',
-      [error(WarningCode.invalidDeprecatedInstantiateAnnotation, 17, 22)],
+      [error(diag.invalidDeprecatedInstantiateAnnotation, 17, 22)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_mixin_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_mixin_annotation_test.dart
index f05fed0..6f3a463 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_mixin_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_mixin_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,8 +29,8 @@
 mixin class _C {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedMixinAnnotation, 1, 16),
-        error(WarningCode.unusedElement, 32, 2),
+        error(diag.invalidDeprecatedMixinAnnotation, 1, 16),
+        error(diag.unusedElement, 32, 2),
       ],
     );
   }
@@ -41,7 +41,7 @@
 @Deprecated.mixin()
 class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedMixinAnnotation, 1, 16)],
+      [error(diag.invalidDeprecatedMixinAnnotation, 1, 16)],
     );
   }
 
@@ -51,7 +51,7 @@
 @Deprecated.mixin()
 mixin M {}
 ''',
-      [error(WarningCode.invalidDeprecatedMixinAnnotation, 1, 16)],
+      [error(diag.invalidDeprecatedMixinAnnotation, 1, 16)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_optional_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_optional_annotation_test.dart
index 0b3cbac..5bed462 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_optional_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_optional_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 @Deprecated.optional()
 void f([int p = 0]) {}
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 1, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 1, 19)],
     );
   }
 
@@ -40,7 +40,7 @@
   cb();
 }
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 17, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 17, 19)],
     );
   }
 
@@ -51,7 +51,7 @@
   cb();
 }
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 23, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 23, 19)],
     );
   }
 
@@ -63,7 +63,7 @@
   g();
 }
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 22, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 22, 19)],
     );
   }
 
@@ -83,7 +83,7 @@
   cb();
 }
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 29, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 29, 19)],
     );
   }
 
@@ -126,7 +126,7 @@
   {@Deprecated.optional() required int? p}
 ) {}
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 12, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 12, 19)],
     );
   }
 
@@ -137,7 +137,7 @@
   @Deprecated.optional() int? p
 ) {}
 ''',
-      [error(WarningCode.invalidDeprecatedOptionalAnnotation, 11, 19)],
+      [error(diag.invalidDeprecatedOptionalAnnotation, 11, 19)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_subclass_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_subclass_annotation_test.dart
index 6bac937..9338518 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_deprecated_subclass_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_deprecated_subclass_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 @Deprecated.subclass()
 final class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedSubclassAnnotation, 1, 19)],
+      [error(diag.invalidDeprecatedSubclassAnnotation, 1, 19)],
     );
   }
 
@@ -39,8 +39,8 @@
 class _C {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedSubclassAnnotation, 1, 19),
-        error(WarningCode.unusedElement, 29, 2),
+        error(diag.invalidDeprecatedSubclassAnnotation, 1, 19),
+        error(diag.unusedElement, 29, 2),
       ],
     );
   }
@@ -51,7 +51,7 @@
 @Deprecated.subclass()
 sealed class C {}
 ''',
-      [error(WarningCode.invalidDeprecatedSubclassAnnotation, 1, 19)],
+      [error(diag.invalidDeprecatedSubclassAnnotation, 1, 19)],
     );
   }
 
@@ -61,7 +61,7 @@
 @Deprecated.subclass()
 enum E { one; }
 ''',
-      [error(WarningCode.invalidDeprecatedSubclassAnnotation, 1, 19)],
+      [error(diag.invalidDeprecatedSubclassAnnotation, 1, 19)],
     );
   }
 
@@ -78,7 +78,7 @@
 @Deprecated.subclass()
 base mixin M {}
 ''',
-      [error(WarningCode.invalidDeprecatedSubclassAnnotation, 1, 19)],
+      [error(diag.invalidDeprecatedSubclassAnnotation, 1, 19)],
     );
   }
 
@@ -89,8 +89,8 @@
 mixin _M {}
 ''',
       [
-        error(WarningCode.invalidDeprecatedSubclassAnnotation, 1, 19),
-        error(WarningCode.unusedElement, 29, 2),
+        error(diag.invalidDeprecatedSubclassAnnotation, 1, 19),
+        error(diag.unusedElement, 29, 2),
       ],
     );
   }
@@ -110,7 +110,7 @@
 @Deprecated.subclass()
 typedef D = C;
 ''',
-      [error(WarningCode.invalidDeprecatedSubclassAnnotation, 18, 19)],
+      [error(diag.invalidDeprecatedSubclassAnnotation, 18, 19)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_do_not_submit_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_do_not_submit_test.dart
index 15dbfc2..1151721 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_do_not_submit_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_do_not_submit_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -44,7 +44,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 31, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 31, 1),
     ]);
   }
 
@@ -69,7 +69,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 31, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 31, 1),
     ]);
   }
 
@@ -169,7 +169,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 39, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 39, 1),
     ]);
   }
 
@@ -193,7 +193,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 33, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 33, 1),
     ]);
   }
 
@@ -217,7 +217,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 33, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 33, 1),
     ]);
   }
 
@@ -237,7 +237,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 30, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 30, 1),
     ]);
   }
 
@@ -262,7 +262,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 54, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 54, 1),
     ]);
   }
 
@@ -282,9 +282,7 @@
 }
 ''');
 
-    await assertErrorsInFile2(a, [
-      error(WarningCode.invalidAnnotationTarget, 35, 11),
-    ]);
+    await assertErrorsInFile2(a, [error(diag.invalidAnnotationTarget, 35, 11)]);
     await assertErrorsInFile2(b, []);
   }
 
@@ -309,7 +307,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 48, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 48, 1),
     ]);
   }
 
@@ -330,7 +328,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 33, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 33, 1),
     ]);
   }
 
@@ -351,7 +349,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 33, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 33, 1),
     ]);
   }
 
@@ -366,7 +364,7 @@
 ''');
 
     await assertErrorsInFile2(a, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 72, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 72, 1),
     ]);
   }
 
@@ -391,7 +389,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 48, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 48, 1),
     ]);
   }
 
@@ -411,7 +409,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(WarningCode.invalidUseOfDoNotSubmitMember, 36, 1),
+      error(diag.invalidUseOfDoNotSubmitMember, 36, 1),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_exception_value_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_exception_value_test.dart
index 7c5e431..856c06d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_exception_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_exception_value_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   Pointer.fromFunction<T>(f, 42);
 }
 ''',
-      [error(FfiCode.invalidExceptionValue, 109, 2)],
+      [error(diag.invalidExceptionValue, 109, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart
index e0b7b1f..93078b1 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_export_of_internal_element_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/mock_packages/mock_packages.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -51,9 +51,7 @@
 export 'src/foo.dart';
 ''');
 
-    assertErrorsInResult([
-      error(WarningCode.invalidExportOfInternalElement, 0, 22),
-    ]);
+    assertErrorsInResult([error(diag.invalidExportOfInternalElement, 0, 22)]);
   }
 
   void test_exporterIsInBlazeBinLibSrc() async {
@@ -79,9 +77,7 @@
 export 'src/foo.dart';
 ''');
 
-    assertErrorsInResult([
-      error(WarningCode.invalidExportOfInternalElement, 0, 22),
-    ]);
+    assertErrorsInResult([error(diag.invalidExportOfInternalElement, 0, 22)]);
   }
 
   void test_exporterIsInGenfilesLibSrc() async {
@@ -107,9 +103,7 @@
 export 'src/foo.dart';
 ''');
 
-    assertErrorsInResult([
-      error(WarningCode.invalidExportOfInternalElement, 0, 22),
-    ]);
+    assertErrorsInResult([error(diag.invalidExportOfInternalElement, 0, 22)]);
   }
 
   void test_exporterIsInLibSrc() async {
@@ -148,7 +142,7 @@
       r'''
 export 'package:dart.my/src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 38)],
+      [error(diag.invalidExportOfInternalElement, 0, 38)],
     );
   }
 
@@ -162,7 +156,7 @@
       r'''
 export 'package:dart.my/src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 38)],
+      [error(diag.invalidExportOfInternalElement, 0, 38)],
     );
   }
 
@@ -176,7 +170,7 @@
       r'''
 export 'package:dart.my/src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 38)],
+      [error(diag.invalidExportOfInternalElement, 0, 38)],
     );
   }
 }
@@ -203,9 +197,7 @@
 export 'package:test/src/foo.dart';
 ''');
 
-    assertErrorsInResult([
-      error(WarningCode.invalidExportOfInternalElement, 0, 35),
-    ]);
+    assertErrorsInResult([error(diag.invalidExportOfInternalElement, 0, 35)]);
   }
 
   @FailingTest(
@@ -237,9 +229,7 @@
 export 'package:test/src/foo.dart';
 ''');
 
-    assertErrorsInResult([
-      error(WarningCode.invalidExportOfInternalElement, 0, 35),
-    ]);
+    assertErrorsInResult([error(diag.invalidExportOfInternalElement, 0, 35)]);
   }
 
   void test_exporterInLibSrc() async {
@@ -265,7 +255,7 @@
       r'''
 export 'package:test/src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 35)],
+      [error(diag.invalidExportOfInternalElement, 0, 35)],
     );
   }
 
@@ -280,7 +270,7 @@
       r'''
 export 'package:test/src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 35)],
+      [error(diag.invalidExportOfInternalElement, 0, 35)],
     );
   }
 }
@@ -309,9 +299,7 @@
 export 'src/foo.dart';
 ''');
 
-    assertErrorsInResult([
-      error(WarningCode.invalidExportOfInternalElement, 0, 22),
-    ]);
+    assertErrorsInResult([error(diag.invalidExportOfInternalElement, 0, 22)]);
   }
 
   void test_exporterIsInLibSrc() async {
@@ -350,7 +338,7 @@
       r'''
 export 'package:test/src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 35)],
+      [error(diag.invalidExportOfInternalElement, 0, 35)],
     );
   }
 }
@@ -384,7 +372,7 @@
       r'''
 export 'src/foo.dart' hide Two;
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 31)],
+      [error(diag.invalidExportOfInternalElement, 0, 31)],
     );
   }
 
@@ -399,7 +387,7 @@
       r'''
 export 'src/foo.dart' show func;
 ''',
-      [error(WarningCode.invalidExportOfInternalElementIndirectly, 0, 32)],
+      [error(diag.invalidExportOfInternalElementIndirectly, 0, 32)],
     );
   }
 
@@ -414,7 +402,7 @@
       r'''
 export 'src/foo.dart' show func;
 ''',
-      [error(WarningCode.invalidExportOfInternalElementIndirectly, 0, 32)],
+      [error(diag.invalidExportOfInternalElementIndirectly, 0, 32)],
     );
   }
 
@@ -429,7 +417,7 @@
       r'''
 export 'src/foo.dart' show func;
 ''',
-      [error(WarningCode.invalidExportOfInternalElementIndirectly, 0, 32)],
+      [error(diag.invalidExportOfInternalElementIndirectly, 0, 32)],
     );
   }
 
@@ -444,7 +432,7 @@
       r'''
 export 'src/foo.dart' show func;
 ''',
-      [error(WarningCode.invalidExportOfInternalElementIndirectly, 0, 32)],
+      [error(diag.invalidExportOfInternalElementIndirectly, 0, 32)],
     );
   }
 
@@ -459,7 +447,7 @@
       r'''
 export 'src/foo.dart' show func;
 ''',
-      [error(WarningCode.invalidExportOfInternalElementIndirectly, 0, 32)],
+      [error(diag.invalidExportOfInternalElementIndirectly, 0, 32)],
     );
   }
 
@@ -485,7 +473,7 @@
       r'''
 export 'src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 22)],
+      [error(diag.invalidExportOfInternalElement, 0, 22)],
     );
   }
 
@@ -503,7 +491,7 @@
       r'''
 export 'src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 22)],
+      [error(diag.invalidExportOfInternalElement, 0, 22)],
     );
   }
 
@@ -519,7 +507,7 @@
       r'''
 export 'src/foo.dart';
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 22)],
+      [error(diag.invalidExportOfInternalElement, 0, 22)],
     );
   }
 
@@ -566,7 +554,7 @@
       r'''
 export 'src/foo.dart' show One;
 ''',
-      [error(WarningCode.invalidExportOfInternalElement, 0, 31)],
+      [error(diag.invalidExportOfInternalElement, 0, 31)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_extension_argument_count_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_extension_argument_count_test.dart
index 6ef1450..7ab1fbf 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_extension_argument_count_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_extension_argument_count_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   E('a', 'b', 'c').m();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidExtensionArgumentCount, 49, 15)],
+      [error(diag.invalidExtensionArgumentCount, 49, 15)],
     );
     assertTypeDynamic(findNode.extensionOverride('E(').extendedType);
   }
@@ -51,7 +51,7 @@
   E().m();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidExtensionArgumentCount, 49, 2)],
+      [error(diag.invalidExtensionArgumentCount, 49, 2)],
     );
     assertTypeDynamic(findNode.extensionOverride('E(').extendedType);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart
index 2efaa97..8f52220 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_factory_method_impl_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -44,7 +44,7 @@
 }
 class State { }
 ''',
-      [error(WarningCode.invalidFactoryMethodImpl, 96, 11)],
+      [error(diag.invalidFactoryMethodImpl, 96, 11)],
     );
   }
 
@@ -59,7 +59,7 @@
   }  
 }
 ''',
-      [error(WarningCode.invalidFactoryMethodImpl, 79, 6)],
+      [error(diag.invalidFactoryMethodImpl, 79, 6)],
     );
   }
 
@@ -165,7 +165,7 @@
   void createState() {}
 }
 ''',
-      [error(WarningCode.invalidFactoryMethodDecl, 69, 11)],
+      [error(diag.invalidFactoryMethodDecl, 69, 11)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart
index e63db7a..ed0ba71 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_factory_name_not_a_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -15,26 +15,16 @@
 
 @reflectiveTest
 class InvalidFactoryNameNotAClassTest extends PubPackageResolutionTest {
-  test_notClassName() async {
+  test_notClassName_withoutPrimaryConstructors() async {
     await assertErrorsInCode(
       r'''
+// @dart = 3.10
 int B = 0;
 class A {
   factory B() => throw 0;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidFactoryNameNotAClass, 31, 1)],
-    );
-  }
-
-  test_notEnclosingClassName() async {
-    await assertErrorsInCode(
-      r'''
-class A {
-  factory B() => throw 0;
-}
-''',
-      [error(CompileTimeErrorCode.invalidFactoryNameNotAClass, 20, 1)],
+      [error(diag.invalidFactoryNameNotAClass, 47, 1)],
     );
   }
 
@@ -55,9 +45,19 @@
 ''');
 
     await resolveFile2(b);
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.invalidFactoryNameNotAClass, 47, 1),
-    ]);
+    assertErrorsInResult([error(diag.invalidFactoryNameNotAClass, 47, 1)]);
+  }
+
+  test_notEnclosingClassName_withoutPrimaryConstructors() async {
+    await assertErrorsInCode(
+      r'''
+// @dart = 3.10
+class A {
+  factory B() => throw 0;
+}
+''',
+      [error(diag.invalidFactoryNameNotAClass, 36, 1)],
+    );
   }
 
   test_valid() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_field_name_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_field_name_test.dart
index 0574cb3..f4b3414 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_field_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_field_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,10 +22,10 @@
 var r = (hashCode: 1, noSuchMethod: 2, runtimeType: 3, toString: 4);
 ''',
       [
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 9, 8),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 22, 12),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 39, 11),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 55, 8),
+        error(diag.invalidFieldNameFromObject, 9, 8),
+        error(diag.invalidFieldNameFromObject, 22, 12),
+        error(diag.invalidFieldNameFromObject, 39, 11),
+        error(diag.invalidFieldNameFromObject, 55, 8),
       ],
     );
   }
@@ -42,10 +42,10 @@
 var r = (0, hashCode: 1, noSuchMethod: 2, runtimeType: 3, toString: 4);
 ''',
       [
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 12, 8),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 25, 12),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 42, 11),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 58, 8),
+        error(diag.invalidFieldNameFromObject, 12, 8),
+        error(diag.invalidFieldNameFromObject, 25, 12),
+        error(diag.invalidFieldNameFromObject, 42, 11),
+        error(diag.invalidFieldNameFromObject, 58, 8),
       ],
     );
   }
@@ -55,7 +55,7 @@
       r'''
 var r = (0, $1: 2);
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePositional, 12, 2)],
+      [error(diag.invalidFieldNamePositional, 12, 2)],
     );
   }
 
@@ -64,7 +64,7 @@
       r'''
 var r = ($1: 2, 1);
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePositional, 9, 2)],
+      [error(diag.invalidFieldNamePositional, 9, 2)],
     );
   }
 
@@ -85,7 +85,7 @@
       r'''
 var r = (_a: 1, b: 2);
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePrivate, 9, 2)],
+      [error(diag.invalidFieldNamePrivate, 9, 2)],
     );
   }
 }
@@ -99,10 +99,10 @@
 void f(({int hashCode, int noSuchMethod, int runtimeType, int toString}) r) {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 13, 8),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 27, 12),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 45, 11),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 62, 8),
+        error(diag.invalidFieldNameFromObject, 13, 8),
+        error(diag.invalidFieldNameFromObject, 27, 12),
+        error(diag.invalidFieldNameFromObject, 45, 11),
+        error(diag.invalidFieldNameFromObject, 62, 8),
       ],
     );
   }
@@ -120,10 +120,10 @@
 void f((int hashCode, int noSuchMethod, int runtimeType, int toString) r) {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 12, 8),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 26, 12),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 44, 11),
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 61, 8),
+        error(diag.invalidFieldNameFromObject, 12, 8),
+        error(diag.invalidFieldNameFromObject, 26, 12),
+        error(diag.invalidFieldNameFromObject, 44, 11),
+        error(diag.invalidFieldNameFromObject, 61, 8),
       ],
     );
   }
@@ -133,7 +133,7 @@
       r'''
 void f((int, String, {int $2}) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePositional, 26, 2)],
+      [error(diag.invalidFieldNamePositional, 26, 2)],
     );
   }
 
@@ -154,7 +154,7 @@
       r'''
 void f((int $2, int b) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePositional, 12, 2)],
+      [error(diag.invalidFieldNamePositional, 12, 2)],
     );
   }
 
@@ -175,7 +175,7 @@
       r'''
 void f(({int _a}) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePrivate, 13, 2)],
+      [error(diag.invalidFieldNamePrivate, 13, 2)],
     );
   }
 
@@ -184,7 +184,7 @@
       r'''
 void f((int _a, int b) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePrivate, 12, 2)],
+      [error(diag.invalidFieldNamePrivate, 12, 2)],
     );
   }
 
@@ -193,7 +193,7 @@
       r'''
 void f(({int _, int b}) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePrivate, 13, 1)],
+      [error(diag.invalidFieldNamePrivate, 13, 1)],
     );
   }
 
@@ -205,7 +205,7 @@
 
 void f(({int _, int b}) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePrivate, 57, 1)],
+      [error(diag.invalidFieldNamePrivate, 57, 1)],
     );
   }
 
@@ -223,7 +223,7 @@
 
 void f((int _, int b) r) {}
 ''',
-      [error(CompileTimeErrorCode.invalidFieldNamePrivate, 56, 1)],
+      [error(diag.invalidFieldNamePrivate, 56, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart
index f572fb8..9ca0f41 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_field_type_in_struct_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   external Pointer notEmpty;
 }
 ''',
-      [error(FfiCode.invalidFieldTypeInStruct, 61, 6)],
+      [error(diag.invalidFieldTypeInStruct, 61, 6)],
     );
   }
 
@@ -43,7 +43,7 @@
   external Pointer notEmpty;
 }
 ''',
-      [error(FfiCode.invalidFieldTypeInStruct, 60, 6)],
+      [error(diag.invalidFieldTypeInStruct, 60, 6)],
     );
   }
 
@@ -55,7 +55,7 @@
   external Pointer? p;
 }
 ''',
-      [error(FfiCode.invalidFieldTypeInStruct, 61, 8)],
+      [error(diag.invalidFieldTypeInStruct, 61, 8)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_immutable_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_immutable_annotation_test.dart
index 2ec29b9..20dccfd 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_immutable_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_immutable_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -48,7 +48,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 46, 9)],
+      [error(diag.invalidAnnotationTarget, 46, 9)],
     );
   }
 }
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 3c9105f..8141a8f 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_implementation_override_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   int get g;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 36, 1)],
+      [error(diag.invalidImplementationOverride, 36, 1)],
     );
   }
 
@@ -49,9 +49,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidImplementationOverride, 52, 1),
+        error(diag.invalidImplementationOverride, 52, 1),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           72,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -70,7 +70,7 @@
   int add(num a);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 41, 1)],
+      [error(diag.invalidImplementationOverride, 41, 1)],
     );
   }
 
@@ -95,7 +95,7 @@
   int add([int a = 0, int b = 0]);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 36, 1)],
+      [error(diag.invalidImplementationOverride, 36, 1)],
     );
   }
 
@@ -110,9 +110,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidImplementationOverride, 52, 1),
+        error(diag.invalidImplementationOverride, 52, 1),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           69,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -133,9 +133,9 @@
 class B	extends A with M {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidImplementationOverride, 77, 1),
+        error(diag.invalidImplementationOverride, 77, 1),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           94,
           1,
           contextMessages: [message(testFile, 16, 3)],
@@ -177,7 +177,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidImplementationOverrideSetter,
+          diag.invalidImplementationOverrideSetter,
           37,
           1,
           messageContains: ["'A.c'", "'B.c'"],
@@ -197,7 +197,7 @@
   int get foo;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 37, 1)],
+      [error(diag.invalidImplementationOverride, 37, 1)],
     );
   }
 
@@ -212,7 +212,7 @@
   int foo();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 35, 1)],
+      [error(diag.invalidImplementationOverride, 35, 1)],
     );
   }
 
@@ -232,7 +232,7 @@
   String toString([int? value]) => '';
 }
 ''',
-      [error(CompileTimeErrorCode.invalidImplementationOverride, 60, 2)],
+      [error(diag.invalidImplementationOverride, 60, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart
index 70a97cd..d0c56fc 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_internal_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,7 +33,7 @@
 @internal class One {}
 ''');
 
-    assertErrorsInResult([error(WarningCode.invalidInternalAnnotation, 34, 8)]);
+    assertErrorsInResult([error(diag.invalidInternalAnnotation, 34, 8)]);
   }
 
   void test_annotationInLib_onLibrary() async {
@@ -43,7 +43,7 @@
 import 'package:meta/meta.dart';
 ''');
 
-    assertErrorsInResult([error(WarningCode.invalidInternalAnnotation, 1, 8)]);
+    assertErrorsInResult([error(diag.invalidInternalAnnotation, 1, 8)]);
   }
 
   void test_annotationInLibSrc() async {
@@ -70,7 +70,7 @@
 @internal class One {}
 ''');
 
-    assertErrorsInResult([error(WarningCode.invalidInternalAnnotation, 34, 8)]);
+    assertErrorsInResult([error(diag.invalidInternalAnnotation, 34, 8)]);
   }
 
   void test_annotationInTest() async {
@@ -98,8 +98,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 34, 8),
-      error(WarningCode.unusedElement, 49, 4),
+      error(diag.invalidInternalAnnotation, 34, 8),
+      error(diag.unusedElement, 49, 4),
     ]);
   }
 
@@ -112,8 +112,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.unusedElement, 39, 2),
-      error(WarningCode.invalidInternalAnnotation, 47, 8),
+      error(diag.unusedElement, 39, 2),
+      error(diag.invalidInternalAnnotation, 47, 8),
     ]);
   }
 
@@ -126,8 +126,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.unusedElement, 39, 2),
-      error(WarningCode.invalidInternalAnnotation, 47, 8),
+      error(diag.unusedElement, 39, 2),
+      error(diag.invalidInternalAnnotation, 47, 8),
     ]);
   }
 
@@ -139,7 +139,7 @@
 }
 ''');
 
-    assertErrorsInResult([error(WarningCode.invalidInternalAnnotation, 46, 8)]);
+    assertErrorsInResult([error(diag.invalidInternalAnnotation, 46, 8)]);
   }
 
   void test_privateEnum() async {
@@ -149,9 +149,9 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 34, 8),
-      error(WarningCode.unusedElement, 48, 2),
-      error(WarningCode.unusedField, 52, 3),
+      error(diag.invalidInternalAnnotation, 34, 8),
+      error(diag.unusedElement, 48, 2),
+      error(diag.unusedField, 52, 3),
     ]);
   }
 
@@ -162,8 +162,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 42, 8),
-      error(WarningCode.unusedField, 51, 4),
+      error(diag.invalidInternalAnnotation, 42, 8),
+      error(diag.unusedField, 51, 4),
     ]);
   }
 
@@ -173,7 +173,7 @@
 @internal extension _One on String {}
 ''');
 
-    assertErrorsInResult([error(WarningCode.invalidInternalAnnotation, 34, 8)]);
+    assertErrorsInResult([error(diag.invalidInternalAnnotation, 34, 8)]);
   }
 
   void test_privateExtension_unnamed() async {
@@ -182,7 +182,7 @@
 @internal extension on String {}
 ''');
 
-    assertErrorsInResult([error(WarningCode.invalidInternalAnnotation, 34, 8)]);
+    assertErrorsInResult([error(diag.invalidInternalAnnotation, 34, 8)]);
   }
 
   void test_privateExtensionType() async {
@@ -192,8 +192,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 34, 8),
-      error(WarningCode.unusedElement, 58, 2),
+      error(diag.invalidInternalAnnotation, 34, 8),
+      error(diag.unusedElement, 58, 2),
     ]);
   }
 
@@ -206,8 +206,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.unusedField, 59, 2),
-      error(WarningCode.invalidInternalAnnotation, 59, 6),
+      error(diag.unusedField, 59, 2),
+      error(diag.invalidInternalAnnotation, 59, 6),
     ]);
   }
 
@@ -220,8 +220,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.unusedField, 66, 2),
-      error(WarningCode.invalidInternalAnnotation, 66, 6),
+      error(diag.unusedField, 66, 2),
+      error(diag.invalidInternalAnnotation, 66, 6),
     ]);
   }
 
@@ -234,8 +234,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 46, 8),
-      error(WarningCode.unusedElement, 63, 2),
+      error(diag.invalidInternalAnnotation, 46, 8),
+      error(diag.unusedElement, 63, 2),
     ]);
   }
 
@@ -248,8 +248,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 46, 8),
-      error(WarningCode.unusedElement, 60, 2),
+      error(diag.invalidInternalAnnotation, 46, 8),
+      error(diag.unusedElement, 60, 2),
     ]);
   }
 
@@ -262,8 +262,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 46, 8),
-      error(WarningCode.unusedElement, 67, 2),
+      error(diag.invalidInternalAnnotation, 46, 8),
+      error(diag.unusedElement, 67, 2),
     ]);
   }
 
@@ -274,8 +274,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 34, 8),
-      error(WarningCode.unusedElement, 49, 4),
+      error(diag.invalidInternalAnnotation, 34, 8),
+      error(diag.unusedElement, 49, 4),
     ]);
   }
 
@@ -286,8 +286,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 34, 8),
-      error(WarningCode.unusedElement, 48, 2),
+      error(diag.invalidInternalAnnotation, 34, 8),
+      error(diag.unusedElement, 48, 2),
     ]);
   }
 
@@ -298,8 +298,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 47, 6),
-      error(WarningCode.unusedElement, 47, 2),
+      error(diag.invalidInternalAnnotation, 47, 6),
+      error(diag.unusedElement, 47, 2),
     ]);
   }
 
@@ -310,8 +310,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.invalidInternalAnnotation, 34, 8),
-      error(WarningCode.unusedElement, 51, 2),
+      error(diag.invalidInternalAnnotation, 34, 8),
+      error(diag.unusedElement, 51, 2),
     ]);
   }
 
@@ -323,7 +323,7 @@
 }
 ''');
 
-    assertErrorsInResult([error(WarningCode.unusedElement, 39, 2)]);
+    assertErrorsInResult([error(diag.unusedElement, 39, 2)]);
   }
 
   void test_publicMethod_privateClass_static() async {
@@ -335,8 +335,8 @@
 ''');
 
     assertErrorsInResult([
-      error(WarningCode.unusedElement, 39, 2),
-      error(WarningCode.unusedElement, 68, 1),
+      error(diag.unusedElement, 39, 2),
+      error(diag.unusedElement, 68, 1),
     ]);
   }
 
@@ -348,6 +348,6 @@
 }
 ''');
 
-    assertErrorsInResult([error(WarningCode.unusedElement, 48, 2)]);
+    assertErrorsInResult([error(diag.unusedElement, 48, 2)]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart
index 6d4b28d..faed68e 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_language_override_greater_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:pub_semver/pub_semver.dart';
 import 'package:test/test.dart';
@@ -29,7 +29,7 @@
 // @dart = ${latestVersion.major}.${latestVersion.minor + 1}
 class A {}
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideGreater, 0, 15)],
+      [error(diag.invalidLanguageVersionOverrideGreater, 0, 15)],
     );
     _assertUnitLanguageVersion(package: latestVersion, override: null);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_language_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_language_override_test.dart
index 798a762..5947c5c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_language_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_language_override_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 // @dart = 11.12
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideGreater, 0, 16)],
+      [error(diag.invalidLanguageVersionOverrideGreater, 0, 16)],
     );
   }
 
@@ -31,7 +31,7 @@
 // @dart = 3.190
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideGreater, 0, 16)],
+      [error(diag.invalidLanguageVersionOverrideGreater, 0, 16)],
     );
   }
 
@@ -91,7 +91,7 @@
   void test() {}
 }
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLocation, 15, 11)],
+      [error(diag.invalidLanguageVersionOverrideLocation, 15, 11)],
     );
   }
 
@@ -101,7 +101,7 @@
 class A {}
 // @dart = 3.0
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLocation, 14, 11)],
+      [error(diag.invalidLanguageVersionOverrideLocation, 14, 11)],
     );
   }
 
@@ -111,7 +111,7 @@
 class A {}
 // @dart = 3.0
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLocation, 14, 11)],
+      [error(diag.invalidLanguageVersionOverrideLocation, 14, 11)],
     );
   }
 
@@ -122,7 +122,7 @@
 // @dart = 3.0
 class A {}
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLocation, 23, 11)],
+      [error(diag.invalidLanguageVersionOverrideLocation, 23, 11)],
     );
   }
 
@@ -150,7 +150,7 @@
 // dart = 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideAtSign, 0, 13)],
+      [error(diag.invalidLanguageVersionOverrideAtSign, 0, 13)],
     );
   }
 
@@ -160,7 +160,7 @@
 // @dart 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideEquals, 0, 12)],
+      [error(diag.invalidLanguageVersionOverrideEquals, 0, 12)],
     );
   }
 
@@ -227,7 +227,7 @@
 // @dart >= 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideEquals, 0, 15)],
+      [error(diag.invalidLanguageVersionOverrideEquals, 0, 15)],
     );
   }
 
@@ -246,7 +246,7 @@
 // @Dart = 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLowerCase, 16, 14)],
+      [error(diag.invalidLanguageVersionOverrideLowerCase, 16, 14)],
     );
   }
 
@@ -256,7 +256,7 @@
 /// @dart = 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideTwoSlashes, 0, 15)],
+      [error(diag.invalidLanguageVersionOverrideTwoSlashes, 0, 15)],
     );
   }
 
@@ -266,7 +266,7 @@
 // dart @ 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideAtSign, 0, 13)],
+      [error(diag.invalidLanguageVersionOverrideAtSign, 0, 13)],
     );
   }
 
@@ -276,7 +276,7 @@
 // @Dart = 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLowerCase, 0, 14)],
+      [error(diag.invalidLanguageVersionOverrideLowerCase, 0, 14)],
     );
   }
 
@@ -287,7 +287,7 @@
 // @Dart = 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLowerCase, 13, 14)],
+      [error(diag.invalidLanguageVersionOverrideLowerCase, 13, 14)],
     );
   }
 
@@ -299,7 +299,7 @@
 // @Dart = 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideLowerCase, 14, 14)],
+      [error(diag.invalidLanguageVersionOverrideLowerCase, 14, 14)],
     );
   }
 
@@ -309,7 +309,7 @@
 // @dart:2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideEquals, 0, 12)],
+      [error(diag.invalidLanguageVersionOverrideEquals, 0, 12)],
     );
   }
 
@@ -319,7 +319,7 @@
 // @dart : 2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideEquals, 0, 14)],
+      [error(diag.invalidLanguageVersionOverrideEquals, 0, 14)],
     );
   }
 
@@ -329,13 +329,7 @@
 // @dart = 2.0.0
 int i = 0;
 ''',
-      [
-        error(
-          WarningCode.invalidLanguageVersionOverrideTrailingCharacters,
-          0,
-          16,
-        ),
-      ],
+      [error(diag.invalidLanguageVersionOverrideTrailingCharacters, 0, 16)],
     );
   }
 
@@ -345,7 +339,7 @@
 // @dart = 2
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverrideNumber, 0, 12)],
+      [error(diag.invalidLanguageVersionOverrideNumber, 0, 12)],
     );
   }
 
@@ -355,7 +349,7 @@
 // @dart = v2.0
 int i = 0;
 ''',
-      [error(WarningCode.invalidLanguageVersionOverridePrefix, 0, 15)],
+      [error(diag.invalidLanguageVersionOverridePrefix, 0, 15)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_literal_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_literal_annotation_test.dart
index 653c830..0210e56 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_literal_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_literal_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -48,7 +48,7 @@
 @literal
 extension type const E(int i) { }
 ''',
-      [error(WarningCode.invalidLiteralAnnotation, 34, 7)],
+      [error(diag.invalidLiteralAnnotation, 34, 7)],
     );
   }
 
@@ -61,7 +61,7 @@
   A() {}
 }
 ''',
-      [error(WarningCode.invalidLiteralAnnotation, 46, 7)],
+      [error(diag.invalidLiteralAnnotation, 46, 7)],
     );
   }
 
@@ -74,7 +74,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidLiteralAnnotation, 46, 7)],
+      [error(diag.invalidLiteralAnnotation, 46, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_constructor_test.dart
index 07730c9..ea97c27 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   A() async {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnConstructor, 16, 5)],
+      [error(diag.invalidModifierOnConstructor, 16, 5)],
     );
   }
 
@@ -33,7 +33,7 @@
   A() async* {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnConstructor, 16, 5)],
+      [error(diag.invalidModifierOnConstructor, 16, 5)],
     );
   }
 
@@ -44,7 +44,7 @@
   A() sync* {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnConstructor, 16, 4)],
+      [error(diag.invalidModifierOnConstructor, 16, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_setter_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_setter_test.dart
index b64cda8..f683ed5 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_modifier_on_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   set x(v) async {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnSetter, 21, 5)],
+      [error(diag.invalidModifierOnSetter, 21, 5)],
     );
   }
 
@@ -33,7 +33,7 @@
   set x(v) async* {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnSetter, 21, 5)],
+      [error(diag.invalidModifierOnSetter, 21, 5)],
     );
   }
 
@@ -44,7 +44,7 @@
   set x(v) sync* {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnSetter, 21, 4)],
+      [error(diag.invalidModifierOnSetter, 21, 4)],
     );
   }
 
@@ -53,7 +53,7 @@
       '''
 set x(v) async {}
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnSetter, 9, 5)],
+      [error(diag.invalidModifierOnSetter, 9, 5)],
     );
   }
 
@@ -62,7 +62,7 @@
       '''
 set x(v) async* {}
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnSetter, 9, 5)],
+      [error(diag.invalidModifierOnSetter, 9, 5)],
     );
   }
 
@@ -71,7 +71,7 @@
       '''
 set x(v) sync* {}
 ''',
-      [error(CompileTimeErrorCode.invalidModifierOnSetter, 9, 4)],
+      [error(diag.invalidModifierOnSetter, 9, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart
index c5e8508..c798eae 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_non_virtual_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 @nonVirtual
 class C {}
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -43,7 +43,7 @@
   void m();
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 56, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 56, 10)],
     );
   }
 
@@ -102,7 +102,7 @@
    static int f = 0;
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 48, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 48, 10)],
     );
   }
 
@@ -116,7 +116,7 @@
    static void m() {}
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 48, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 48, 10)],
     );
   }
 
@@ -130,7 +130,7 @@
   a, b, c
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -145,7 +145,7 @@
   b, c
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 46, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 46, 10)],
     );
   }
 
@@ -157,7 +157,7 @@
 @nonVirtual
 extension E on Object {}
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -171,7 +171,7 @@
    void m() {}
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 62, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 62, 10)],
     );
   }
 
@@ -185,7 +185,7 @@
   void m() { }
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 63, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 63, 10)],
     );
   }
 
@@ -195,7 +195,7 @@
 @nonVirtual
 import 'package:meta/meta.dart';
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 1, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 1, 10)],
     );
   }
 
@@ -207,7 +207,7 @@
 @nonVirtual
 mixin M {}
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -232,7 +232,7 @@
   static int f = 0;
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 47, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 47, 10)],
     );
   }
 
@@ -246,7 +246,7 @@
   static void m() {}
 }
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 47, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 47, 10)],
     );
   }
 
@@ -258,7 +258,7 @@
 @nonVirtual
 m() {}
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -270,7 +270,7 @@
 @nonVirtual
 int get g =>  0;
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -282,7 +282,7 @@
 @nonVirtual
 set s(int v) {}
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -294,7 +294,7 @@
 @nonVirtual
 int x = 0;
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 
@@ -306,7 +306,7 @@
 @nonVirtual
 typedef bool predicate(Object o);
 ''',
-      [error(WarningCode.invalidNonVirtualAnnotation, 35, 10)],
+      [error(diag.invalidNonVirtualAnnotation, 35, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_elements_error_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_elements_error_test.dart
index 3aa1533..1ffce44 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_elements_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_elements_error_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 const stringConst = "";
 const list = [0, ?stringConst];
 ''',
-      [error(StaticWarningCode.invalidNullAwareElement, 41, 1)],
+      [error(diag.invalidNullAwareElement, 41, 1)],
     );
   }
 
@@ -31,7 +31,7 @@
 const stringConst = "";
 const set = {0, ?stringConst};
 ''',
-      [error(StaticWarningCode.invalidNullAwareElement, 40, 1)],
+      [error(diag.invalidNullAwareElement, 40, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
 const intConst = 0;
 const map = {?0: intConst};
 ''',
-      [error(StaticWarningCode.invalidNullAwareMapEntryKey, 33, 1)],
+      [error(diag.invalidNullAwareMapEntryKey, 33, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
 const intConst = 0;
 const map = {0: ?intConst};
 ''',
-      [error(StaticWarningCode.invalidNullAwareMapEntryValue, 36, 1)],
+      [error(diag.invalidNullAwareMapEntryValue, 36, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
index d01e479..7a520b3 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_null_aware_operator_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +26,7 @@
 ''',
       [
         error(
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+          diag.invalidNullAwareOperatorAfterShortCircuit,
           31,
           2,
           contextMessages: [message(testFile, 23, 2)],
@@ -45,7 +44,7 @@
 ''',
       [
         error(
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+          diag.invalidNullAwareOperatorAfterShortCircuit,
           27,
           2,
           contextMessages: [message(testFile, 23, 1)],
@@ -67,7 +66,7 @@
 ''',
       [
         error(
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+          diag.invalidNullAwareOperatorAfterShortCircuit,
           75,
           2,
           contextMessages: [message(testFile, 69, 2)],
@@ -85,7 +84,7 @@
 ''',
       [
         error(
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+          diag.invalidNullAwareOperatorAfterShortCircuit,
           40,
           2,
           contextMessages: [message(testFile, 23, 2)],
@@ -103,13 +102,13 @@
 ''',
       [
         error(
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+          diag.invalidNullAwareOperatorAfterShortCircuit,
           40,
           2,
           contextMessages: [message(testFile, 23, 2)],
         ),
         error(
-          StaticWarningCode.invalidNullAwareOperatorAfterShortCircuit,
+          diag.invalidNullAwareOperatorAfterShortCircuit,
           55,
           2,
           contextMessages: [message(testFile, 23, 2)],
@@ -133,7 +132,7 @@
   E(b)?[0] = true;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 109, 2)],
+      [error(diag.invalidNullAwareOperator, 109, 2)],
     );
   }
 
@@ -149,7 +148,7 @@
   E(b)?.foo = true;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 95, 2)],
+      [error(diag.invalidNullAwareOperator, 95, 2)],
     );
   }
 
@@ -165,7 +164,7 @@
   E(b)?[0];
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 104, 2)],
+      [error(diag.invalidNullAwareOperator, 104, 2)],
     );
     assertType(findNode.index('E(a)'), 'bool?');
     assertType(findNode.index('E(b)'), 'bool?');
@@ -183,7 +182,7 @@
   E(b)?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 91, 2)],
+      [error(diag.invalidNullAwareOperator, 91, 2)],
     );
 
     assertType(findNode.methodInvocation('E(a)'), 'bool?');
@@ -202,7 +201,7 @@
   E(b)?.foo;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 91, 2)],
+      [error(diag.invalidNullAwareOperator, 91, 2)],
     );
     assertType(findNode.propertyAccess('E(a)'), 'bool?');
     assertType(findNode.propertyAccess('E(b)'), 'bool?');
@@ -219,7 +218,7 @@
   C?.x;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 42, 2)],
+      [error(diag.invalidNullAwareOperator, 42, 2)],
     );
   }
 
@@ -234,7 +233,7 @@
   E?.x;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 53, 2)],
+      [error(diag.invalidNullAwareOperator, 53, 2)],
     );
   }
 
@@ -249,7 +248,7 @@
   M?.x;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 42, 2)],
+      [error(diag.invalidNullAwareOperator, 42, 2)],
     );
   }
 
@@ -262,8 +261,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 14, 2),
-        error(StaticWarningCode.invalidNullAwareOperator, 27, 3),
+        error(diag.invalidNullAwareOperator, 14, 2),
+        error(diag.invalidNullAwareOperator, 27, 3),
       ],
     );
   }
@@ -278,7 +277,7 @@
   }
 
   /// Here we test that analysis does not crash while checking whether to
-  /// report [StaticWarningCode.invalidNullAwareOperator]. But we also
+  /// report [diag.invalidNullAwareOperator]. But we also
   /// report another error.
   test_getter_prefix() async {
     newFile('$testPackageLibPath/a.dart', r'''
@@ -292,7 +291,7 @@
   p?.x;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 31, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 31, 1)],
     );
   }
 
@@ -305,8 +304,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 20, 2),
-        error(StaticWarningCode.invalidNullAwareOperator, 29, 3),
+        error(diag.invalidNullAwareOperator, 20, 2),
+        error(diag.invalidNullAwareOperator, 29, 3),
       ],
     );
   }
@@ -329,12 +328,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedClass, 2, 10),
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          44,
-          6,
-        ),
+        error(diag.undefinedClass, 2, 10),
+        error(diag.uncheckedPropertyAccessOfNullableValue, 44, 6),
       ],
     );
   }
@@ -347,7 +342,7 @@
   i?.isEven;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 2, 10)],
+      [error(diag.undefinedClass, 2, 10)],
     );
   }
 
@@ -362,7 +357,7 @@
   C?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 45, 2)],
+      [error(diag.invalidNullAwareOperator, 45, 2)],
     );
   }
 
@@ -381,7 +376,7 @@
   prefix.C?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 49, 2)],
+      [error(diag.invalidNullAwareOperator, 49, 2)],
     );
   }
 
@@ -396,7 +391,7 @@
   E?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 56, 2)],
+      [error(diag.invalidNullAwareOperator, 56, 2)],
     );
   }
 
@@ -415,7 +410,7 @@
   prefix.E?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 44, 2)],
+      [error(diag.invalidNullAwareOperator, 44, 2)],
     );
   }
 
@@ -430,7 +425,7 @@
   M?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 45, 2)],
+      [error(diag.invalidNullAwareOperator, 45, 2)],
     );
   }
 
@@ -449,7 +444,7 @@
   prefix.M?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 44, 2)],
+      [error(diag.invalidNullAwareOperator, 44, 2)],
     );
   }
 
@@ -462,8 +457,8 @@
 }
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 14, 2),
-        error(StaticWarningCode.invalidNullAwareOperator, 28, 3),
+        error(diag.invalidNullAwareOperator, 14, 2),
+        error(diag.invalidNullAwareOperator, 28, 3),
       ],
     );
   }
@@ -490,7 +485,7 @@
   B?.foo();
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 62, 2)],
+      [error(diag.invalidNullAwareOperator, 62, 2)],
     );
   }
 
@@ -509,7 +504,7 @@
   [...?x];
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 20, 4)],
+      [error(diag.invalidNullAwareOperator, 20, 4)],
     );
   }
 
@@ -532,7 +527,7 @@
   C?.x = 0;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 42, 2)],
+      [error(diag.invalidNullAwareOperator, 42, 2)],
     );
   }
 
@@ -547,7 +542,7 @@
   E?.x = 0;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 53, 2)],
+      [error(diag.invalidNullAwareOperator, 53, 2)],
     );
   }
 
@@ -562,12 +557,12 @@
   M?.x = 0;
 }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 42, 2)],
+      [error(diag.invalidNullAwareOperator, 42, 2)],
     );
   }
 
   /// Here we test that analysis does not crash while checking whether to
-  /// report [StaticWarningCode.invalidNullAwareOperator]. But we also
+  /// report [diag.invalidNullAwareOperator]. But we also
   /// report another error.
   test_setter_prefix() async {
     newFile('$testPackageLibPath/a.dart', r'''
@@ -581,7 +576,7 @@
   p?.x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 31, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 31, 1)],
     );
   }
 
@@ -598,7 +593,7 @@
   }
 }
 ''',
-      [error(ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper, 73, 2)],
+      [error(diag.invalidOperatorQuestionmarkPeriodForSuper, 73, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_of_non_virtual_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_of_non_virtual_member_test.dart
index 6504885..53f438c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_of_non_virtual_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_of_non_virtual_member_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -38,7 +38,7 @@
 ''',
       [
         error(
-          WarningCode.invalidOverrideOfNonVirtualMember,
+          diag.invalidOverrideOfNonVirtualMember,
           113,
           1,
           messageContains: ["member 'g'", "in 'C'"],
@@ -61,7 +61,7 @@
   int g = 0, h = 1;
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 101, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 101, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
 ''',
       [
         error(
-          WarningCode.invalidOverrideOfNonVirtualMember,
+          diag.invalidOverrideOfNonVirtualMember,
           117,
           1,
           messageContains: ["member 'g'", "in 'C'"],
@@ -106,7 +106,7 @@
   set g(int v) {}
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 113, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 113, 1)],
     );
   }
 
@@ -125,7 +125,7 @@
   int get g => 0;
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 122, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 122, 1)],
     );
   }
 
@@ -144,7 +144,7 @@
   int g = 0;
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 118, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 118, 1)],
     );
   }
 
@@ -195,7 +195,7 @@
   void f() {}
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 115, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 115, 1)],
     );
   }
 
@@ -214,7 +214,7 @@
   set g(int v) {}
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 118, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 118, 1)],
     );
   }
 
@@ -233,7 +233,7 @@
   int g = 0;
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 118, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 118, 1)],
     );
   }
 
@@ -254,7 +254,7 @@
 ''',
       [
         error(
-          WarningCode.invalidOverrideOfNonVirtualMember,
+          diag.invalidOverrideOfNonVirtualMember,
           111,
           1,
           messageContains: ["member 'f'", "in 'M'"],
@@ -278,7 +278,7 @@
   set g(int v) {}
 }
 ''',
-      [error(WarningCode.invalidOverrideOfNonVirtualMember, 114, 1)],
+      [error(diag.invalidOverrideOfNonVirtualMember, 114, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index 99a38124..23d920c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -58,7 +58,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           91,
           1,
           contextMessages: [message(testFile, 44, 1)],
@@ -91,7 +91,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           87,
           1,
           contextMessages: [message(testFile, 40, 1)],
@@ -124,7 +124,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           81,
           1,
           contextMessages: [message(testFile, 34, 1)],
@@ -157,7 +157,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           82,
           1,
           contextMessages: [message(testFile, 35, 1)],
@@ -190,7 +190,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           78,
           1,
           contextMessages: [message(testFile, 31, 1)],
@@ -223,7 +223,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           72,
           1,
           contextMessages: [message(testFile, 25, 1)],
@@ -255,7 +255,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           71,
           1,
           contextMessages: [message(testFile, 20, 1)],
@@ -276,13 +276,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           52,
           1,
           contextMessages: [message(testFile, 20, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           52,
           1,
           contextMessages: [message(testFile, 20, 1)],
@@ -308,7 +308,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           157,
           6,
           contextMessages: [message(testFile, 29, 6)],
@@ -332,13 +332,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           144,
           1,
           contextMessages: [message(testFile, 30, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           144,
           1,
           contextMessages: [message(testFile, 76, 1)],
@@ -370,9 +370,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidImplementationOverride, 52, 1),
+        error(diag.invalidImplementationOverride, 52, 1),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           72,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -392,9 +392,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidImplementationOverride, 52, 1),
+        error(diag.invalidImplementationOverride, 52, 1),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           69,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -415,9 +415,9 @@
 class B	extends A with M {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidImplementationOverride, 77, 1),
+        error(diag.invalidImplementationOverride, 77, 1),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           94,
           1,
           contextMessages: [message(testFile, 16, 3)],
@@ -469,7 +469,7 @@
   void foo(covariant String a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidOverride, 109, 3)],
+      [error(diag.invalidOverride, 109, 3)],
     );
   }
 
@@ -485,7 +485,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           49,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -506,7 +506,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           49,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -527,7 +527,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           54,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -548,7 +548,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           51,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -569,7 +569,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           48,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -593,13 +593,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           147,
           1,
           contextMessages: [message(testFile, 76, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           147,
           1,
           contextMessages: [message(testFile, 29, 1)],
@@ -624,7 +624,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           124,
           1,
           contextMessages: [message(testFile, 54, 1)],
@@ -649,13 +649,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           140,
           1,
           contextMessages: [message(testFile, 29, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           140,
           1,
           contextMessages: [message(testFile, 76, 1)],
@@ -676,7 +676,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           54,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -701,7 +701,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           130,
           1,
           contextMessages: [message(testFile, 57, 1)],
@@ -722,7 +722,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           49,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -743,7 +743,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           55,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -764,7 +764,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           55,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -785,7 +785,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           44,
           1,
           contextMessages: [message(testFile, 12, 1)],
@@ -806,7 +806,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           68,
           1,
           contextMessages: [message(testFile, 16, 1)],
@@ -831,7 +831,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           50,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -854,7 +854,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           98,
           1,
           contextMessages: [message(testFile, 25, 1)],
@@ -875,7 +875,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           83,
           1,
           contextMessages: [message(testFile, 22, 1)],
@@ -896,7 +896,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           65,
           1,
           contextMessages: [message(testFile, 16, 1)],
@@ -921,7 +921,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           50,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -944,7 +944,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           87,
           1,
           contextMessages: [message(testFile, 16, 1)],
@@ -969,7 +969,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           129,
           1,
           contextMessages: [message(testFile, 25, 1)],
@@ -990,7 +990,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           63,
           1,
           contextMessages: [message(testFile, 16, 1)],
@@ -1012,13 +1012,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           53,
           3,
           contextMessages: [message(testFile, 19, 3)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           53,
           3,
           contextMessages: [message(testFile, 19, 3)],
@@ -1040,7 +1040,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           62,
           3,
           contextMessages: [message(testFile, 23, 3)],
@@ -1062,7 +1062,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           56,
           3,
           contextMessages: [message(testFile, 19, 3)],
@@ -1087,7 +1087,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           50,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -1109,7 +1109,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           57,
           3,
           contextMessages: [message(testFile, 16, 3)],
@@ -1130,7 +1130,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           66,
           1,
           contextMessages: [message(testFile, 21, 1)],
@@ -1155,7 +1155,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           173,
           8,
           contextMessages: [message(testFile, 77, 8)],
@@ -1181,7 +1181,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           166,
           8,
           contextMessages: [message(testFile, 77, 8)],
@@ -1205,13 +1205,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           125,
           1,
           contextMessages: [message(testFile, 28, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           125,
           1,
           contextMessages: [message(testFile, 68, 1)],
@@ -1257,7 +1257,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           95,
           1,
           contextMessages: [message(testFile, 34, 1)],
@@ -1315,7 +1315,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           86,
           1,
           contextMessages: [message(testFile, 25, 1)],
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
index 5c4312e..f54ce20 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -60,14 +60,7 @@
   E.named;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .invalidReferenceToGenerativeEnumConstructorTearoff,
-          58,
-          7,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 58, 7)],
     );
   }
 
@@ -84,13 +77,7 @@
   E.named();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          58,
-          7,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructor, 58, 7)],
     );
   }
 
@@ -116,16 +103,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.enumConstantInvokesFactoryConstructor,
-          11,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          37,
-          7,
-        ),
+        error(diag.enumConstantInvokesFactoryConstructor, 11, 1),
+        error(diag.invalidReferenceToGenerativeEnumConstructor, 37, 7),
       ],
     );
   }
@@ -141,14 +120,7 @@
   E.new;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .invalidReferenceToGenerativeEnumConstructorTearoff,
-          29,
-          5,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructorTearoff, 29, 5)],
     );
   }
 
@@ -163,13 +135,7 @@
   const E();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          35,
-          1,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructor, 35, 1)],
     );
   }
 
@@ -184,13 +150,7 @@
   new E();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          33,
-          1,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructor, 33, 1)],
     );
   }
 
@@ -205,13 +165,7 @@
   E();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          29,
-          1,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructor, 29, 1)],
     );
   }
 
@@ -237,13 +191,7 @@
   const E();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.invalidReferenceToGenerativeEnumConstructor,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.invalidReferenceToGenerativeEnumConstructor, 43, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
index ebf7636..d071d7d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 26, 1)],
+      [error(diag.unusedLocalVariable, 26, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
   factory A() { return this; }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 33, 4)],
+      [error(diag.invalidReferenceToThis, 33, 4)],
     );
   }
 
@@ -57,7 +57,7 @@
   A() : f = this;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 31, 4)],
+      [error(diag.invalidReferenceToThis, 31, 4)],
     );
   }
 
@@ -68,7 +68,7 @@
   var f = this;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 20, 4)],
+      [error(diag.invalidReferenceToThis, 20, 4)],
     );
   }
 
@@ -79,7 +79,7 @@
   static m() { return this; }
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 32, 4)],
+      [error(diag.invalidReferenceToThis, 32, 4)],
     );
   }
 
@@ -90,7 +90,7 @@
   static A f = this;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 25, 4)],
+      [error(diag.invalidReferenceToThis, 25, 4)],
     );
   }
 
@@ -104,7 +104,7 @@
   B() : super(this);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 60, 4)],
+      [error(diag.invalidReferenceToThis, 60, 4)],
     );
   }
 
@@ -129,7 +129,7 @@
       '''
 f() { return this; }
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 13, 4)],
+      [error(diag.invalidReferenceToThis, 13, 4)],
     );
   }
 
@@ -138,7 +138,7 @@
       '''
 int x = this;
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 8, 4)],
+      [error(diag.invalidReferenceToThis, 8, 4)],
     );
   }
 
@@ -147,7 +147,7 @@
       '''
 late var x = this;
 ''',
-      [error(CompileTimeErrorCode.invalidReferenceToThis, 13, 4)],
+      [error(diag.invalidReferenceToThis, 13, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_reopen_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_reopen_annotation_test.dart
index b18f3c9..c357d79 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_reopen_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_reopen_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
 @reopen
 base class B with M {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 52, 6)],
+      [error(diag.invalidReopenAnnotation, 52, 6)],
     );
   }
 
@@ -45,7 +45,7 @@
 @reopen
 base class B extends A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 47, 6)],
+      [error(diag.invalidReopenAnnotation, 47, 6)],
     );
   }
 
@@ -59,7 +59,7 @@
 @reopen
 base class B extends A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 52, 6)],
+      [error(diag.invalidReopenAnnotation, 52, 6)],
     );
   }
 
@@ -95,7 +95,7 @@
 @reopen
 base class B extends A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 54, 6)],
+      [error(diag.invalidReopenAnnotation, 54, 6)],
     );
   }
 
@@ -109,7 +109,7 @@
 @reopen
 base mixin class B implements A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 53, 6)],
+      [error(diag.invalidReopenAnnotation, 53, 6)],
     );
   }
 
@@ -123,7 +123,7 @@
   void m() { }
 }
 ''',
-      [error(WarningCode.invalidAnnotationTarget, 35, 6)],
+      [error(diag.invalidAnnotationTarget, 35, 6)],
     );
   }
 
@@ -137,7 +137,7 @@
 @reopen
 final class B extends A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 53, 6)],
+      [error(diag.invalidReopenAnnotation, 53, 6)],
     );
   }
 
@@ -152,7 +152,7 @@
 @reopen
 final class B = A with M;
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 64, 6)],
+      [error(diag.invalidReopenAnnotation, 64, 6)],
     );
   }
 
@@ -164,7 +164,7 @@
 @reopen
 class A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 35, 6)],
+      [error(diag.invalidReopenAnnotation, 35, 6)],
     );
   }
 
@@ -180,7 +180,7 @@
 @reopen
 class B implements A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 54, 6)],
+      [error(diag.invalidReopenAnnotation, 54, 6)],
     );
   }
 
@@ -205,7 +205,7 @@
 @reopen
 sealed class B with M {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 52, 6)],
+      [error(diag.invalidReopenAnnotation, 52, 6)],
     );
   }
 
@@ -219,7 +219,7 @@
 @reopen
 sealed class B extends A {}
 ''',
-      [error(WarningCode.invalidReopenAnnotation, 53, 6)],
+      [error(diag.invalidReopenAnnotation, 53, 6)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_super_formal_parameter_location_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_super_formal_parameter_location_test.dart
index cb65fa4..dcb641d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_super_formal_parameter_location_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_super_formal_parameter_location_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   external A(super.a);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 23, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 23, 5)],
     );
   }
 
@@ -36,7 +36,7 @@
   A._();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 22, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 22, 5)],
     );
   }
 
@@ -48,7 +48,7 @@
   A._();
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 14, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 14, 5)],
     );
   }
 
@@ -59,7 +59,7 @@
   void foo(super.a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 21, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 21, 5)],
     );
   }
 
@@ -70,7 +70,7 @@
   void foo(super.a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 32, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 32, 5)],
     );
   }
 
@@ -82,7 +82,7 @@
   void g(super.a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 47, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 47, 5)],
     );
   }
 
@@ -93,7 +93,7 @@
   void foo(super.a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 21, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 21, 5)],
     );
   }
 
@@ -102,7 +102,7 @@
       r'''
 void f(super.a) {}
 ''',
-      [error(CompileTimeErrorCode.invalidSuperFormalParameterLocation, 7, 5)],
+      [error(diag.invalidSuperFormalParameterLocation, 7, 5)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_super_in_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_super_in_initializer_test.dart
index e4c7908..c420057 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_super_in_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_super_in_initializer_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,9 +23,9 @@
 }
 ''',
       [
-        error(ParserErrorCode.invalidSuperInInitializer, 18, 5),
-        error(ParserErrorCode.expectedIdentifierButGotKeyword, 24, 5),
-        error(ParserErrorCode.missingIdentifier, 24, 5),
+        error(diag.invalidSuperInInitializer, 18, 5),
+        error(diag.expectedIdentifierButGotKeyword, 24, 5),
+        error(diag.missingIdentifier, 24, 5),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_list_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_list_test.dart
index ddf3afb..29ac3c1 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_list_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_list_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,7 +36,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstList,
+          diag.invalidTypeArgumentInConstList,
           37,
           1,
           messageContains: ["'E'"],
@@ -56,7 +56,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstList,
+          diag.invalidTypeArgumentInConstList,
           51,
           1,
           messageContains: ["'E'"],
@@ -76,7 +76,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstList,
+          diag.invalidTypeArgumentInConstList,
           37,
           1,
           messageContains: ["'E'"],
@@ -96,7 +96,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstList,
+          diag.invalidTypeArgumentInConstList,
           42,
           1,
           messageContains: ["'E'"],
@@ -116,7 +116,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstList,
+          diag.invalidTypeArgumentInConstList,
           38,
           1,
           messageContains: ["'E'"],
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_map_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_map_test.dart
index 23ee942..7daec0c 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_map_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstMap,
+          diag.invalidTypeArgumentInConstMap,
           96,
           1,
           messageContains: ["'E'"],
@@ -55,7 +55,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstMap,
+          diag.invalidTypeArgumentInConstMap,
           37,
           1,
           messageContains: ["'E'"],
@@ -75,7 +75,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstMap,
+          diag.invalidTypeArgumentInConstMap,
           56,
           1,
           messageContains: ["'E'"],
@@ -95,7 +95,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstMap,
+          diag.invalidTypeArgumentInConstMap,
           45,
           1,
           messageContains: ["'E'"],
@@ -115,7 +115,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstMap,
+          diag.invalidTypeArgumentInConstMap,
           50,
           1,
           messageContains: ["'E'"],
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_set_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_set_test.dart
index 9dc97df..71396e2 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_set_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_type_argument_in_const_set_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,7 +36,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidTypeArgumentInConstSet,
+          diag.invalidTypeArgumentInConstSet,
           37,
           1,
           messageContains: ["'E'"],
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart
index 9163ae4..e51802b 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_in_extension_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.
 
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   void foo({covariant int a = 0}) {}
 }
 ''',
-      [error(ParserErrorCode.invalidUseOfCovariantInExtension, 36, 9)],
+      [error(diag.invalidUseOfCovariantInExtension, 36, 9)],
     );
   }
 
@@ -33,7 +33,7 @@
   void foo([covariant int a = 0]) {}
 }
 ''',
-      [error(ParserErrorCode.invalidUseOfCovariantInExtension, 36, 9)],
+      [error(diag.invalidUseOfCovariantInExtension, 36, 9)],
     );
   }
 
@@ -44,7 +44,7 @@
   void foo(covariant int a) {}
 }
 ''',
-      [error(ParserErrorCode.invalidUseOfCovariantInExtension, 35, 9)],
+      [error(diag.invalidUseOfCovariantInExtension, 35, 9)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_test.dart
index 140d100..b272e56 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_covariant_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +20,7 @@
       '''
 Function f = (covariant int x) {};
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfCovariant, 14, 9)],
+      [error(diag.invalidUseOfCovariant, 14, 9)],
     );
   }
 
@@ -32,7 +31,7 @@
   void m(void p(covariant int)) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfCovariant, 26, 9)],
+      [error(diag.invalidUseOfCovariant, 26, 9)],
     );
   }
 
@@ -43,7 +42,7 @@
   void m(void Function(covariant int) p) {}
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfCovariant, 33, 9)],
+      [error(diag.invalidUseOfCovariant, 33, 9)],
     );
   }
 
@@ -52,7 +51,7 @@
       '''
 typedef F = void Function(covariant int);
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfCovariant, 26, 9)],
+      [error(diag.invalidUseOfCovariant, 26, 9)],
     );
   }
 
@@ -63,10 +62,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfCovariant, 19, 9),
+        error(diag.invalidUseOfCovariant, 19, 9),
         // TODO(srawlins): Recover better from this situation (`covariant` in
         // parameter in type argument).
-        error(ParserErrorCode.expectedExecutable, 43, 1),
+        error(diag.expectedExecutable, 43, 1),
       ],
     );
   }
@@ -78,10 +77,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfCovariant, 33, 9),
+        error(diag.invalidUseOfCovariant, 33, 9),
         // TODO(srawlins): Recover better from this situation (`covariant` in
         // parameter in bound).
-        error(ParserErrorCode.expectedExecutable, 54, 1),
+        error(diag.expectedExecutable, 54, 1),
       ],
     );
   }
@@ -94,8 +93,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 20, 1),
-        error(CompileTimeErrorCode.invalidUseOfCovariant, 22, 9),
+        error(diag.unusedElement, 20, 1),
+        error(diag.invalidUseOfCovariant, 22, 9),
       ],
     );
   }
@@ -109,7 +108,7 @@
 ''',
       [
         // INVALID_USE_OF_COVARIANT is not reported here; it would be redundant.
-        error(ParserErrorCode.extraneousModifier, 26, 9),
+        error(diag.extraneousModifier, 26, 9),
       ],
     );
   }
@@ -123,7 +122,7 @@
 ''',
       [
         // INVALID_USE_OF_COVARIANT is not reported here; it would be redundant.
-        error(ParserErrorCode.extraneousModifier, 26, 9),
+        error(diag.extraneousModifier, 26, 9),
       ],
     );
   }
@@ -135,7 +134,7 @@
 ''',
       [
         // INVALID_USE_OF_COVARIANT is not reported here; it would be redundant.
-        error(ParserErrorCode.extraneousModifier, 7, 9),
+        error(diag.extraneousModifier, 7, 9),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart
index cfd59ff..60d5f77 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_internal_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -81,7 +81,7 @@
 
 A a = A();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 34, 1)],
+      [error(diag.invalidUseOfInternalMember, 34, 1)],
     );
   }
 
@@ -100,7 +100,7 @@
   o as A;
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 60, 1)],
+      [error(diag.invalidUseOfInternalMember, 60, 1)],
     );
   }
 
@@ -119,7 +119,7 @@
   (b as A, ) = (a, );
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 71, 1)],
+      [error(diag.invalidUseOfInternalMember, 71, 1)],
     );
   }
 
@@ -138,7 +138,7 @@
   o is A;
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 60, 1)],
+      [error(diag.invalidUseOfInternalMember, 60, 1)],
     );
   }
 
@@ -159,7 +159,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 87, 1)],
+      [error(diag.invalidUseOfInternalMember, 87, 1)],
     );
   }
 
@@ -176,7 +176,7 @@
 
 A? a;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 34, 1)],
+      [error(diag.invalidUseOfInternalMember, 34, 1)],
     );
   }
 
@@ -195,7 +195,7 @@
 
 C a = C.named();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 40, 7)],
+      [error(diag.invalidUseOfInternalMember, 40, 7)],
     );
   }
 
@@ -214,7 +214,7 @@
 
 C a = C();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 40, 1)],
+      [error(diag.invalidUseOfInternalMember, 40, 1)],
     );
   }
 
@@ -231,7 +231,7 @@
 
 void f(E value) {}
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 41, 1)],
+      [error(diag.invalidUseOfInternalMember, 41, 1)],
     );
   }
 
@@ -247,7 +247,7 @@
 
 E f() => E.one;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 45, 3)],
+      [error(diag.invalidUseOfInternalMember, 45, 3)],
     );
   }
 
@@ -266,7 +266,7 @@
 
 int a = 'hello'.f();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 50, 1)],
+      [error(diag.invalidUseOfInternalMember, 50, 1)],
     );
   }
 
@@ -283,7 +283,7 @@
 
 E e = E(1);
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 34, 1)],
+      [error(diag.invalidUseOfInternalMember, 34, 1)],
     );
   }
 
@@ -306,7 +306,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 79, 1)],
+      [error(diag.invalidUseOfInternalMember, 79, 1)],
     );
   }
 
@@ -323,7 +323,7 @@
 
 int b = a() + 1;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 42, 1)],
+      [error(diag.invalidUseOfInternalMember, 42, 1)],
     );
   }
 
@@ -340,7 +340,7 @@
 
 int b = a<void>() + 1;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 42, 1)],
+      [error(diag.invalidUseOfInternalMember, 42, 1)],
     );
   }
 
@@ -357,7 +357,7 @@
 
 int Function() b = a;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 53, 1)],
+      [error(diag.invalidUseOfInternalMember, 53, 1)],
     );
   }
 
@@ -374,7 +374,7 @@
 
 int Function() b = a;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 53, 1)],
+      [error(diag.invalidUseOfInternalMember, 53, 1)],
     );
   }
 
@@ -419,8 +419,8 @@
 import 'package:foo/src/a.dart';
 ''',
       [
-        error(WarningCode.invalidUseOfInternalMember, 0, 32),
-        error(WarningCode.unusedImport, 7, 24),
+        error(diag.invalidUseOfInternalMember, 0, 32),
+        error(diag.unusedImport, 7, 24),
       ],
     );
   }
@@ -440,7 +440,7 @@
 
 int a = C().m();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 46, 1)],
+      [error(diag.invalidUseOfInternalMember, 46, 1)],
     );
   }
 
@@ -459,7 +459,7 @@
 
 int a = C().m<void>();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 46, 1)],
+      [error(diag.invalidUseOfInternalMember, 46, 1)],
     );
   }
 
@@ -479,7 +479,7 @@
 
 int a = D().f();
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 46, 1)],
+      [error(diag.invalidUseOfInternalMember, 46, 1)],
     );
   }
 
@@ -517,7 +517,7 @@
 
 int Function() a = C().m;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 57, 1)],
+      [error(diag.invalidUseOfInternalMember, 57, 1)],
     );
   }
 
@@ -535,7 +535,7 @@
 
 int a = C().m(a: 5);
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 48, 1)],
+      [error(diag.invalidUseOfInternalMember, 48, 1)],
     );
   }
 
@@ -554,7 +554,7 @@
 
 int a = C().m(5);
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 48, 1)],
+      [error(diag.invalidUseOfInternalMember, 48, 1)],
     );
   }
 
@@ -571,7 +571,7 @@
 
 class C with A {}
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 47, 1)],
+      [error(diag.invalidUseOfInternalMember, 47, 1)],
     );
   }
 
@@ -593,7 +593,7 @@
   void g() => f();
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 68, 1)],
+      [error(diag.invalidUseOfInternalMember, 68, 1)],
     );
   }
 
@@ -614,7 +614,7 @@
   factory C() = D;
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 60, 1)],
+      [error(diag.invalidUseOfInternalMember, 60, 1)],
     );
   }
 
@@ -635,7 +635,7 @@
   C().s = 7;
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 46, 1)],
+      [error(diag.invalidUseOfInternalMember, 46, 1)],
     );
   }
 
@@ -658,7 +658,7 @@
   C().s += 7;
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 46, 1)],
+      [error(diag.invalidUseOfInternalMember, 46, 1)],
     );
   }
 
@@ -681,7 +681,7 @@
   C().s ??= 7;
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 46, 1)],
+      [error(diag.invalidUseOfInternalMember, 46, 1)],
     );
   }
 
@@ -701,7 +701,7 @@
   D() : super();
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 62, 7)],
+      [error(diag.invalidUseOfInternalMember, 62, 7)],
     );
   }
 
@@ -721,7 +721,7 @@
   D() : super.named();
 }
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 68, 5)],
+      [error(diag.invalidUseOfInternalMember, 68, 5)],
     );
   }
 
@@ -738,7 +738,7 @@
 
 int b = a + 1;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 42, 1)],
+      [error(diag.invalidUseOfInternalMember, 42, 1)],
     );
   }
 
@@ -755,7 +755,7 @@
 
 t func = () {};
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 34, 1)],
+      [error(diag.invalidUseOfInternalMember, 34, 1)],
     );
   }
 
@@ -772,7 +772,7 @@
 
 void f(T t) => t(a: 5);
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 42, 1)],
+      [error(diag.invalidUseOfInternalMember, 42, 1)],
     );
   }
 
@@ -789,7 +789,7 @@
 
 int b = a + 1;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 42, 1)],
+      [error(diag.invalidUseOfInternalMember, 42, 1)],
     );
   }
 
@@ -806,7 +806,7 @@
 
 int b = foo.a + 1;
 ''',
-      [error(WarningCode.invalidUseOfInternalMember, 53, 1)],
+      [error(diag.invalidUseOfInternalMember, 53, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
index 4bf3f7f..2cd4b71 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_protected_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -42,7 +42,7 @@
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
       error(
-        WarningCode.invalidUseOfProtectedMember,
+        diag.invalidUseOfProtectedMember,
         56,
         1,
         text:
@@ -82,7 +82,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 51, 1),
+      error(diag.invalidUseOfProtectedMember, 51, 1),
     ]);
   }
 
@@ -118,7 +118,7 @@
 ''');
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 43, 1),
+      error(diag.invalidUseOfProtectedMember, 43, 1),
     ]);
   }
 
@@ -151,7 +151,7 @@
 ''');
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 41, 1),
+      error(diag.invalidUseOfProtectedMember, 41, 1),
     ]);
   }
 
@@ -185,7 +185,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 60, 1),
+      error(diag.invalidUseOfProtectedMember, 60, 1),
     ]);
   }
 
@@ -241,7 +241,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 40, 1),
+      error(diag.invalidUseOfProtectedMember, 40, 1),
     ]);
   }
 
@@ -301,7 +301,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 58, 1),
+      error(diag.invalidUseOfProtectedMember, 58, 1),
     ]);
   }
 
@@ -324,7 +324,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 65, 1),
+      error(diag.invalidUseOfProtectedMember, 65, 1),
     ]);
   }
 
@@ -383,7 +383,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 53, 1),
+      error(diag.invalidUseOfProtectedMember, 53, 1),
     ]);
   }
 
@@ -471,7 +471,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfProtectedMember, 62, 1),
+      error(diag.invalidUseOfProtectedMember, 62, 1),
     ]);
   }
 
@@ -488,7 +488,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedField, 49, 2)],
+      [error(diag.unusedField, 49, 2)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
index f0e0e62..77cbd4d 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -41,7 +41,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 63, 3)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 63, 3)],
     );
   }
 
@@ -109,7 +109,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 56, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 56, 1)],
     );
   }
 
@@ -133,7 +133,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 63, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 63, 1)],
     );
   }
 
@@ -155,7 +155,7 @@
   void m(A a) => a > A();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 47, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 47, 1)],
     );
   }
 
@@ -180,7 +180,7 @@
   int get x => super.g + 1;
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 100, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 100, 1)],
     );
   }
 
@@ -205,7 +205,7 @@
   void x() => super.m();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 96, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 96, 1)],
     );
   }
 
@@ -230,7 +230,7 @@
   void m() => super > A();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 111, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 111, 1)],
     );
   }
 
@@ -255,7 +255,7 @@
   set x(int i) => super.s = i;
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 106, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 106, 1)],
     );
   }
 
@@ -296,7 +296,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForOverridingMember, 50, 1)],
+      [error(diag.invalidUseOfVisibleForOverridingMember, 50, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart
index 1d1a230..ec4d1b7 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_template_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -47,9 +47,9 @@
 }
 ''');
 
-    await assertErrorsInFile2(lib1, [error(WarningCode.unusedField, 66, 2)]);
+    await assertErrorsInFile2(lib1, [error(diag.unusedField, 66, 2)]);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 38, 13),
+      error(diag.invalidUseOfVisibleForTemplateMember, 38, 13),
     ]);
   }
 
@@ -72,9 +72,9 @@
 }
 ''');
 
-    await assertErrorsInFile2(lib1, [error(WarningCode.unusedField, 66, 2)]);
+    await assertErrorsInFile2(lib1, [error(diag.unusedField, 66, 2)]);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 38, 1),
+      error(diag.invalidUseOfVisibleForTemplateMember, 38, 1),
     ]);
   }
 
@@ -116,7 +116,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 39, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 39, 3),
     ]);
   }
 
@@ -164,7 +164,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 39, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 39, 3),
     ]);
   }
 
@@ -209,7 +209,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 39, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 39, 3),
     ]);
   }
 
@@ -303,7 +303,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 39, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 39, 3),
     ]);
   }
 
@@ -349,7 +349,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 36, 1),
+      error(diag.invalidUseOfVisibleForTemplateMember, 36, 1),
     ]);
   }
 
@@ -434,7 +434,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 73, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 73, 3),
     ]);
   }
 
@@ -457,7 +457,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 63, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 63, 3),
     ]);
   }
 
@@ -534,7 +534,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 40, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 40, 3),
     ]);
   }
 
@@ -664,7 +664,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 34, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 34, 3),
     ]);
   }
 
@@ -685,7 +685,7 @@
 
     await assertErrorsInFile2(lib1, []);
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTemplateMember, 34, 3),
+      error(diag.invalidUseOfVisibleForTemplateMember, 34, 3),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
index 9d1c4f0..6bd1a17 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_testing_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -133,7 +133,7 @@
   E([]).m();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 39, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 39, 1)],
     );
   }
 
@@ -170,7 +170,7 @@
   A().a;
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 37, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 37, 1)],
     );
   }
 
@@ -192,7 +192,7 @@
 ''');
 
     await assertErrorsInFile2(lib2, [
-      error(WarningCode.invalidUseOfVisibleForTestingMember, 65, 1),
+      error(diag.invalidUseOfVisibleForTestingMember, 65, 1),
     ]);
   }
 
@@ -230,8 +230,8 @@
 void f(A _) {}
 ''',
       [
-        error(WarningCode.invalidUseOfVisibleForTestingMember, 21, 1),
-        error(WarningCode.invalidUseOfVisibleForTestingMember, 32, 1),
+        error(diag.invalidUseOfVisibleForTestingMember, 21, 1),
+        error(diag.invalidUseOfVisibleForTestingMember, 32, 1),
       ],
     );
   }
@@ -250,7 +250,7 @@
 import 'lib1.dart';
 void f() => A().a();
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 36, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 36, 1)],
     );
   }
 
@@ -288,7 +288,7 @@
   E(1).m();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 38, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 38, 1)],
     );
   }
 
@@ -327,7 +327,7 @@
   a.m();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 38, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 38, 1)],
     );
   }
 
@@ -349,7 +349,7 @@
 ''',
       [
         error(
-          WarningCode.invalidUseOfVisibleForTestingMember,
+          diag.invalidUseOfVisibleForTestingMember,
           33,
           12,
           messageContains: ['A.forTesting'],
@@ -412,7 +412,7 @@
   A().b = 6;
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 37, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 37, 1)],
     );
   }
 
@@ -430,7 +430,7 @@
   f();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 33, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 33, 1)],
     );
   }
 
@@ -448,7 +448,7 @@
   a;
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 33, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 33, 1)],
     );
   }
 
@@ -468,7 +468,7 @@
   A();
 }
 ''',
-      [error(WarningCode.invalidUseOfVisibleForTestingMember, 33, 1)],
+      [error(diag.invalidUseOfVisibleForTestingMember, 33, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart
index 5c98ade..ae67405 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_visibility_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,8 +30,8 @@
 }
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 46, 17),
-        error(WarningCode.unusedField, 68, 2),
+        error(diag.invalidVisibilityAnnotation, 46, 17),
+        error(diag.unusedField, 68, 2),
       ],
     );
   }
@@ -45,10 +45,10 @@
 }
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 46, 17),
-        error(WarningCode.invalidVisibilityAnnotation, 46, 17),
-        error(WarningCode.unusedField, 68, 2),
-        error(WarningCode.unusedField, 76, 2),
+        error(diag.invalidVisibilityAnnotation, 46, 17),
+        error(diag.invalidVisibilityAnnotation, 46, 17),
+        error(diag.unusedField, 68, 2),
+        error(diag.unusedField, 76, 2),
       ],
     );
   }
@@ -69,8 +69,8 @@
 @visibleForTesting class _C {}
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 58, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 58, 2),
       ],
     );
   }
@@ -83,7 +83,7 @@
   @visibleForTesting C._() {}
 }
 ''',
-      [error(WarningCode.invalidVisibilityAnnotation, 46, 17)],
+      [error(diag.invalidVisibilityAnnotation, 46, 17)],
     );
   }
 
@@ -94,7 +94,7 @@
 @visibleForTesting enum _E {a, b}
 void f(_E e) => e == _E.a || e == _E.b;
 ''',
-      [error(WarningCode.invalidVisibilityAnnotation, 34, 17)],
+      [error(diag.invalidVisibilityAnnotation, 34, 17)],
     );
   }
 
@@ -105,8 +105,8 @@
 @visibleForTesting extension type _E(int i) {}
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 67, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 67, 2),
       ],
     );
   }
@@ -120,8 +120,8 @@
 }
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 46, 17),
-        error(WarningCode.unusedField, 68, 2),
+        error(diag.invalidVisibilityAnnotation, 46, 17),
+        error(diag.unusedField, 68, 2),
       ],
     );
   }
@@ -135,8 +135,8 @@
 }
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 46, 17),
-        error(WarningCode.unusedElement, 69, 2),
+        error(diag.invalidVisibilityAnnotation, 46, 17),
+        error(diag.unusedElement, 69, 2),
       ],
     );
   }
@@ -148,8 +148,8 @@
 @visibleForTesting mixin _M {}
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 58, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 58, 2),
       ],
     );
   }
@@ -161,8 +161,8 @@
 @visibleForTesting void _f() {}
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 57, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 57, 2),
       ],
     );
   }
@@ -174,8 +174,8 @@
 @visibleForTesting final _a = 1;
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 58, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 58, 2),
       ],
     );
   }
@@ -187,8 +187,8 @@
 @visibleForTesting typedef _T = Function();
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 60, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 60, 2),
       ],
     );
   }
@@ -200,8 +200,8 @@
 @visibleForTesting final _a = 1, b = 2;
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 58, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 58, 2),
       ],
     );
   }
@@ -213,10 +213,10 @@
 @visibleForTesting final _a = 1, _b = 2;
 ''',
       [
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.invalidVisibilityAnnotation, 34, 17),
-        error(WarningCode.unusedElement, 58, 2),
-        error(WarningCode.unusedElement, 66, 2),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.invalidVisibilityAnnotation, 34, 17),
+        error(diag.unusedElement, 58, 2),
+        error(diag.unusedElement, 66, 2),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart
index 161a64e..2249d83 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_visible_for_overriding_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 @visibleForOverriding
 class C {}
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 34, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 34, 20)],
     );
   }
 
@@ -42,7 +42,7 @@
   C();
 }
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 46, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 46, 20)],
     );
   }
 
@@ -53,7 +53,7 @@
 @visibleForOverriding
 extension on double {}
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 34, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 34, 20)],
     );
   }
 
@@ -66,7 +66,7 @@
   void foo() {}
 }
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 60, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 60, 20)],
     );
   }
 
@@ -77,7 +77,7 @@
 @visibleForOverriding
 extension type E(int i) {}
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 34, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 34, 20)],
     );
   }
 
@@ -91,7 +91,7 @@
   void f() { }
 }
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 64, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 64, 20)],
     );
   }
 
@@ -104,7 +104,7 @@
   static void m() {}
 }
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 46, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 46, 20)],
     );
   }
 
@@ -114,7 +114,7 @@
 import 'package:meta/meta.dart';
 @visibleForOverriding void foo() {}
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 34, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 34, 20)],
     );
   }
 
@@ -124,7 +124,7 @@
 import 'package:meta/meta.dart';
 @visibleForOverriding final a = 1;
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 34, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 34, 20)],
     );
   }
 
@@ -134,7 +134,7 @@
 import 'package:meta/meta.dart';
 @visibleForOverriding var a = 1, b;
 ''',
-      [error(WarningCode.invalidVisibleForOverridingAnnotation, 34, 20)],
+      [error(diag.invalidVisibleForOverridingAnnotation, 34, 20)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_visible_outside_template_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_visible_outside_template_annotation_test.dart
index 05bf3c2..49f05fb 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_visible_outside_template_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_visible_outside_template_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -38,7 +38,7 @@
   C();
 }
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
     );
   }
 
@@ -50,7 +50,7 @@
 @visibleOutsideTemplate
 class C {}
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
     );
   }
 
@@ -64,7 +64,7 @@
   int a = 0;
 }
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
     );
   }
 
@@ -78,7 +78,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
     );
   }
 
@@ -93,7 +93,7 @@
   void test() {}
 }
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 67, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 67, 22)],
     );
   }
 
@@ -108,7 +108,7 @@
   b,
 }
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 62, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 62, 22)],
     );
   }
 
@@ -120,7 +120,7 @@
 @visibleOutsideTemplate
 mixin class M2 {}
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
     );
   }
 
@@ -134,7 +134,7 @@
   int m() => 1;
 }
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 70, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 70, 22)],
     );
   }
 
@@ -147,7 +147,7 @@
 mixin M {}
 class C2 with M {}
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
     );
   }
 
@@ -162,7 +162,7 @@
 }
 class C2 with M {}
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 63, 22)],
     );
   }
 
@@ -174,7 +174,7 @@
 @visibleOutsideTemplate
 void foo() {}
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
     );
   }
 
@@ -186,7 +186,7 @@
 @visibleOutsideTemplate
 final a = 1;
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
     );
   }
 
@@ -198,7 +198,7 @@
 @visibleOutsideTemplate
 var a = 1, b;
 ''',
-      [error(WarningCode.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
+      [error(diag.invalidVisibleOutsideTemplateAnnotation, 51, 22)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_application_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_application_test.dart
index e224585..f84a8d3 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_application_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_application_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -39,7 +39,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidWidgetPreviewApplication, 133, 7)],
+      [error(diag.invalidWidgetPreviewApplication, 133, 7)],
     );
   }
 
@@ -55,7 +55,7 @@
   B();
 }
 ''',
-      [error(CompileTimeErrorCode.noAnnotationConstructorArguments, 123, 8)],
+      [error(diag.noAnnotationConstructorArguments, 123, 8)],
     );
   }
 
@@ -78,9 +78,9 @@
 }
 ''',
       [
-        error(WarningCode.invalidWidgetPreviewApplication, 88, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 159, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 189, 7),
+        error(diag.invalidWidgetPreviewApplication, 88, 7),
+        error(diag.invalidWidgetPreviewApplication, 159, 7),
+        error(diag.invalidWidgetPreviewApplication, 189, 7),
       ],
     );
   }
@@ -99,7 +99,7 @@
   }
 }
 ''',
-      [error(WarningCode.invalidWidgetPreviewApplication, 100, 7)],
+      [error(diag.invalidWidgetPreviewApplication, 100, 7)],
     );
   }
 
@@ -129,8 +129,8 @@
 }
 ''',
       [
-        error(WarningCode.invalidWidgetPreviewApplication, 105, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 223, 7),
+        error(diag.invalidWidgetPreviewApplication, 105, 7),
+        error(diag.invalidWidgetPreviewApplication, 223, 7),
       ],
     );
   }
@@ -177,11 +177,11 @@
 }
 ''',
       [
-        error(WarningCode.invalidWidgetPreviewApplication, 219, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 267, 7),
-        error(WarningCode.unusedElement, 286, 23),
-        error(WarningCode.invalidWidgetPreviewApplication, 359, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 469, 7),
+        error(diag.invalidWidgetPreviewApplication, 219, 7),
+        error(diag.invalidWidgetPreviewApplication, 267, 7),
+        error(diag.unusedElement, 286, 23),
+        error(diag.invalidWidgetPreviewApplication, 359, 7),
+        error(diag.invalidWidgetPreviewApplication, 469, 7),
       ],
     );
   }
@@ -210,12 +210,12 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 93, 2),
-        error(WarningCode.invalidWidgetPreviewApplication, 125, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 147, 7),
-        error(WarningCode.unusedElement, 170, 3),
-        error(WarningCode.invalidWidgetPreviewApplication, 189, 7),
-        error(WarningCode.unusedElement, 215, 3),
+        error(diag.unusedElement, 93, 2),
+        error(diag.invalidWidgetPreviewApplication, 125, 7),
+        error(diag.invalidWidgetPreviewApplication, 147, 7),
+        error(diag.unusedElement, 170, 3),
+        error(diag.invalidWidgetPreviewApplication, 189, 7),
+        error(diag.unusedElement, 215, 3),
       ],
     );
   }
@@ -243,10 +243,10 @@
 }
 ''',
       [
-        error(WarningCode.invalidWidgetPreviewApplication, 124, 7),
-        error(WarningCode.unusedElement, 138, 1),
-        error(WarningCode.invalidWidgetPreviewApplication, 147, 7),
-        error(WarningCode.unusedElement, 169, 4),
+        error(diag.invalidWidgetPreviewApplication, 124, 7),
+        error(diag.unusedElement, 138, 1),
+        error(diag.invalidWidgetPreviewApplication, 147, 7),
+        error(diag.unusedElement, 169, 4),
       ],
     );
   }
@@ -271,8 +271,8 @@
 }
 ''',
       [
-        error(WarningCode.invalidWidgetPreviewApplication, 124, 7),
-        error(WarningCode.unusedElement, 150, 4),
+        error(diag.invalidWidgetPreviewApplication, 124, 7),
+        error(diag.unusedElement, 150, 4),
       ],
     );
   }
@@ -290,8 +290,8 @@
 }
 ''',
       [
-        error(WarningCode.invalidWidgetPreviewApplication, 88, 7),
-        error(WarningCode.unusedElement, 105, 4),
+        error(diag.invalidWidgetPreviewApplication, 88, 7),
+        error(diag.unusedElement, 105, 4),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_private_argument_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_private_argument_test.dart
index c8a1cf5..26ed968 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_private_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_widget_preview_private_argument_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -77,7 +77,7 @@
 ''',
       [
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           388,
           18,
           correctionContains: correctionMessageBuilder(
@@ -86,7 +86,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           455,
           21,
           correctionContains: correctionMessageBuilder(
@@ -95,7 +95,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           537,
           24,
           correctionContains: correctionMessageBuilder(
@@ -104,7 +104,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           615,
           20,
           correctionContains: correctionMessageBuilder(
@@ -113,7 +113,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           645,
           22,
           correctionContains: correctionMessageBuilder(
@@ -122,7 +122,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           677,
           33,
           correctionContains: correctionMessageBuilder(
@@ -131,7 +131,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           762,
           25,
           correctionContains: correctionMessageBuilder(
@@ -140,7 +140,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           859,
           24,
           correctionContains: correctionMessageBuilder(
@@ -149,7 +149,7 @@
           ),
         ),
         error(
-          WarningCode.invalidWidgetPreviewPrivateArgument,
+          diag.invalidWidgetPreviewPrivateArgument,
           935,
           20,
           correctionContains: correctionMessageBuilder(
diff --git a/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart b/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart
index 03f62e8..ede8cf4 100644
--- a/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invocation_of_extension_without_call_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   E(0)();
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfExtensionWithoutCall, 33, 4)],
+      [error(diag.invocationOfExtensionWithoutCall, 33, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/invocation_of_non_function_expression_test.dart b/pkg/analyzer/test/src/diagnostics/invocation_of_non_function_expression_test.dart
index d588da9..bb71dac 100644
--- a/pkg/analyzer/test/src/diagnostics/invocation_of_non_function_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invocation_of_non_function_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   3(5);
 }
 ''',
-      [error(CompileTimeErrorCode.invocationOfNonFunctionExpression, 13, 1)],
+      [error(diag.invocationOfNonFunctionExpression, 13, 1)],
     );
 
     var node = findNode.singleFunctionExpressionInvocation;
diff --git a/pkg/analyzer/test/src/diagnostics/label_in_outer_scope_test.dart b/pkg/analyzer/test/src/diagnostics/label_in_outer_scope_test.dart
index 725897e..a7b1e93 100644
--- a/pkg/analyzer/test/src/diagnostics/label_in_outer_scope_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/label_in_outer_scope_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,10 +28,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 62, 1),
-        error(CompileTimeErrorCode.labelInOuterScope, 82, 1),
-      ],
+      [error(diag.unusedElement, 62, 1), error(diag.labelInOuterScope, 82, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart b/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
index 98f466b..a4f6236 100644
--- a/pkg/analyzer/test/src/diagnostics/label_undefined_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/label_undefined_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,10 +24,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedLabel, 8, 2),
-        error(CompileTimeErrorCode.labelUndefined, 36, 1),
-      ],
+      [error(diag.unusedLabel, 8, 2), error(diag.labelUndefined, 36, 1)],
     );
   }
 
@@ -40,7 +37,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.labelUndefined, 38, 1)],
+      [error(diag.labelUndefined, 38, 1)],
     );
   }
 
@@ -53,10 +50,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedLabel, 8, 2),
-        error(CompileTimeErrorCode.labelUndefined, 39, 1),
-      ],
+      [error(diag.unusedLabel, 8, 2), error(diag.labelUndefined, 39, 1)],
     );
   }
 
@@ -69,7 +63,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.labelUndefined, 41, 1)],
+      [error(diag.labelUndefined, 41, 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 02f4b99..bfa68ef 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -15,8 +15,7 @@
 
 @reflectiveTest
 class LateFinalFieldWithConstConstructorTest extends PubPackageResolutionTest {
-  static const _errorCode =
-      CompileTimeErrorCode.lateFinalFieldWithConstConstructor;
+  static const _errorCode = diag.lateFinalFieldWithConstConstructor;
 
   test_class_hasConstConstructor_instance_hasInitializer() async {
     await assertErrorsInCode(
@@ -121,7 +120,7 @@
   late final int i;
 }
 ''',
-      [error(CompileTimeErrorCode.extensionDeclaresInstanceField, 38, 1)],
+      [error(diag.extensionDeclaresInstanceField, 38, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/late_final_local_already_assigned_test.dart b/pkg/analyzer/test/src/diagnostics/late_final_local_already_assigned_test.dart
index bd48447..a55f056 100644
--- a/pkg/analyzer/test/src/diagnostics/late_final_local_already_assigned_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/late_final_local_already_assigned_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 40, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 40, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 40, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 40, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 35, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 35, 1)],
     );
   }
 
@@ -76,7 +76,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 33, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 33, 1)],
     );
   }
 
@@ -89,7 +89,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 35, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 35, 1)],
     );
   }
 
@@ -102,7 +102,7 @@
   v;
 }
 ''',
-      [error(StaticWarningCode.unnecessaryNonNullAssertion, 36, 1)],
+      [error(diag.unnecessaryNonNullAssertion, 36, 1)],
     );
   }
 
@@ -115,7 +115,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 37, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 37, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
index b464f95..b23c65d 100644
--- a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
 const dynamic b = 'b';
 var v = const <int>[if (1 < 0) a else b];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 82, 1)],
+      [error(diag.listElementTypeNotAssignable, 82, 1)],
     );
   }
 
@@ -40,7 +40,7 @@
       '''
 var v = const <int>[if (1 < 0) 'a'];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 31, 3)],
+      [error(diag.listElementTypeNotAssignable, 31, 3)],
     );
   }
 
@@ -64,7 +64,7 @@
 const dynamic a = 'a';
 var v = const <int>[if (true) a];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 53, 1)],
+      [error(diag.listElementTypeNotAssignable, 53, 1)],
     );
   }
 
@@ -81,13 +81,7 @@
 const a = null;
 var v = const <int>[a];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.listElementTypeNotAssignableNullability, 36, 1)],
     );
   }
 
@@ -96,13 +90,7 @@
       '''
 var v = const <int>[null];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-          20,
-          4,
-        ),
-      ],
+      [error(diag.listElementTypeNotAssignableNullability, 20, 4)],
     );
   }
 
@@ -117,7 +105,7 @@
       '''
 var v = const <String>[42];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 23, 2)],
+      [error(diag.listElementTypeNotAssignable, 23, 2)],
     );
   }
 
@@ -127,7 +115,7 @@
 const dynamic x = 42;
 var v = const <String>[x];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 45, 1)],
+      [error(diag.listElementTypeNotAssignable, 45, 1)],
     );
   }
 
@@ -158,7 +146,7 @@
   return [f];
 }
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 66, 1)],
+      [error(diag.listElementTypeNotAssignable, 66, 1)],
     );
   }
 
@@ -177,7 +165,7 @@
   return [f];
 }
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 67, 1)],
+      [error(diag.listElementTypeNotAssignable, 67, 1)],
     );
   }
 
@@ -202,7 +190,7 @@
       '''
 var v = <int>[if (1 < 0) 'a'];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 25, 3)],
+      [error(diag.listElementTypeNotAssignable, 25, 3)],
     );
   }
 
@@ -231,7 +219,7 @@
       '''
 var v = <String>[42];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 17, 2)],
+      [error(diag.listElementTypeNotAssignable, 17, 2)],
     );
   }
 
@@ -260,7 +248,7 @@
   <int>[if (c) 0 else a];
 }
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 50, 1)],
+      [error(diag.listElementTypeNotAssignable, 50, 1)],
     );
   }
 
@@ -271,7 +259,7 @@
   <int>[if (c) a];
 }
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 43, 1)],
+      [error(diag.listElementTypeNotAssignable, 43, 1)],
     );
   }
 
@@ -282,7 +270,7 @@
   <int>[...a];
 }
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 41, 1)],
+      [error(diag.listElementTypeNotAssignable, 41, 1)],
     );
   }
 }
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 3e3fc94..4bb7f4d 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -19,9 +19,7 @@
     await resolveTestCode('''
 void main([List<int> args = const []]) {}
 ''');
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.mainFirstPositionalParameterType, 11, 9),
-    ]);
+    assertErrorsInResult([error(diag.mainFirstPositionalParameterType, 11, 9)]);
   }
 
   test_positionalRequired_dynamic() async {
@@ -35,7 +33,7 @@
 void main(void args()) {}
 ''');
     assertErrorsInResult([
-      error(CompileTimeErrorCode.mainFirstPositionalParameterType, 10, 11),
+      error(diag.mainFirstPositionalParameterType, 10, 11),
     ]);
   }
 
@@ -49,9 +47,7 @@
     await resolveTestCode('''
 void main(List<int> args) {}
 ''');
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.mainFirstPositionalParameterType, 10, 9),
-    ]);
+    assertErrorsInResult([error(diag.mainFirstPositionalParameterType, 10, 9)]);
   }
 
   test_positionalRequired_listOfString() async {
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 c157dae..944b3dc 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
       '''
 void main({required List<String> a}) {}
 ''',
-      [error(CompileTimeErrorCode.mainHasRequiredNamedParameters, 5, 4)],
+      [error(diag.mainHasRequiredNamedParameters, 5, 4)],
     );
   }
 }
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 568b8ab..00fafe7 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -63,11 +63,7 @@
 void main(args, int a, int b) {}
 ''');
     assertErrorsInResult([
-      error(
-        CompileTimeErrorCode.mainHasTooManyRequiredPositionalParameters,
-        5,
-        4,
-      ),
+      error(diag.mainHasTooManyRequiredPositionalParameters, 5, 4),
     ]);
   }
 
@@ -76,11 +72,7 @@
 void main(args, int a, int b, {int c = 0}) {}
 ''');
     assertErrorsInResult([
-      error(
-        CompileTimeErrorCode.mainHasTooManyRequiredPositionalParameters,
-        5,
-        4,
-      ),
+      error(diag.mainHasTooManyRequiredPositionalParameters, 5, 4),
     ]);
   }
 
@@ -89,12 +81,8 @@
 void main(args, int a, int b, {required int c}) {}
 ''');
     assertErrorsInResult([
-      error(CompileTimeErrorCode.mainHasRequiredNamedParameters, 5, 4),
-      error(
-        CompileTimeErrorCode.mainHasTooManyRequiredPositionalParameters,
-        5,
-        4,
-      ),
+      error(diag.mainHasRequiredNamedParameters, 5, 4),
+      error(diag.mainHasTooManyRequiredPositionalParameters, 5, 4),
     ]);
   }
 }
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 869143c..38334170 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -19,7 +19,7 @@
     await resolveTestCode('''
 class main {}
 ''');
-    assertErrorsInResult([error(CompileTimeErrorCode.mainIsNotFunction, 6, 4)]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 6, 4)]);
   }
 
   test_classAlias() async {
@@ -28,9 +28,7 @@
 mixin M {}
 class main = A with M;
 ''');
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.mainIsNotFunction, 28, 4),
-    ]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 28, 4)]);
   }
 
   test_enum() async {
@@ -39,7 +37,7 @@
   v
 }
 ''');
-    assertErrorsInResult([error(CompileTimeErrorCode.mainIsNotFunction, 5, 4)]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 5, 4)]);
   }
 
   test_function() async {
@@ -52,7 +50,7 @@
     await resolveTestCode('''
 int get main => 0;
 ''');
-    assertErrorsInResult([error(CompileTimeErrorCode.mainIsNotFunction, 8, 4)]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 8, 4)]);
   }
 
   test_mixin() async {
@@ -60,31 +58,27 @@
 class A {}
 mixin main on A {}
 ''');
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.mainIsNotFunction, 17, 4),
-    ]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 17, 4)]);
   }
 
   test_typedef() async {
     await resolveTestCode('''
 typedef main = void Function();
 ''');
-    assertErrorsInResult([error(CompileTimeErrorCode.mainIsNotFunction, 8, 4)]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 8, 4)]);
   }
 
   test_typedef_legacy() async {
     await resolveTestCode('''
 typedef void main();
 ''');
-    assertErrorsInResult([
-      error(CompileTimeErrorCode.mainIsNotFunction, 13, 4),
-    ]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 13, 4)]);
   }
 
   test_variable() async {
     await resolveTestCode('''
 var main = 0;
 ''');
-    assertErrorsInResult([error(CompileTimeErrorCode.mainIsNotFunction, 4, 4)]);
+    assertErrorsInResult([error(diag.mainIsNotFunction, 4, 4)]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/map_entry_not_in_map_test.dart b/pkg/analyzer/test/src/diagnostics/map_entry_not_in_map_test.dart
index 9c9097c..d7f9318 100644
--- a/pkg/analyzer/test/src/diagnostics/map_entry_not_in_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_entry_not_in_map_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 var c = <int>{1:2};
 ''',
-      [error(CompileTimeErrorCode.mapEntryNotInMap, 14, 3)],
+      [error(diag.mapEntryNotInMap, 14, 3)],
     );
   }
 
@@ -29,7 +29,7 @@
       '''
 var c = const <int>{1:2};
 ''',
-      [error(CompileTimeErrorCode.mapEntryNotInMap, 20, 3)],
+      [error(diag.mapEntryNotInMap, 20, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
index d011710..5bf4935 100644
--- a/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
 const dynamic b = 'b';
 var v = const <int, bool>{if (1 < 0) a: true else b: false};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 94, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 94, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
       '''
 var v = const <int, bool>{if (1 < 0) 'a': true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 37, 3)],
+      [error(diag.mapKeyTypeNotAssignable, 37, 3)],
     );
   }
 
@@ -64,7 +64,7 @@
 const dynamic a = 'a';
 var v = const <int, bool>{if (true) a: true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 59, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 59, 1)],
     );
   }
 
@@ -74,7 +74,7 @@
 final a = 0;
 var v = const <int, bool>{if (1 < 2) a: true};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 50, 1)],
+      [error(diag.nonConstantMapKey, 50, 1)],
     );
   }
 
@@ -91,7 +91,7 @@
 const dynamic a = null;
 var v = const <int, bool>{a : true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignableNullability, 50, 1)],
+      [error(diag.mapKeyTypeNotAssignableNullability, 50, 1)],
     );
   }
 
@@ -100,7 +100,7 @@
       '''
 var v = const <int, bool>{null : true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignableNullability, 26, 4)],
+      [error(diag.mapKeyTypeNotAssignableNullability, 26, 4)],
     );
   }
 
@@ -123,7 +123,7 @@
 const dynamic a = 'a';
 var v = const <int, bool>{a : true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 49, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 49, 1)],
     );
   }
 
@@ -132,7 +132,7 @@
       '''
 var v = const <int, bool>{'a' : true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 26, 3)],
+      [error(diag.mapKeyTypeNotAssignable, 26, 3)],
     );
   }
 
@@ -148,7 +148,7 @@
 const dynamic a = 'a';
 var v = const <int, String>{...{a: 'a'}};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 55, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 55, 1)],
     );
   }
 
@@ -179,7 +179,7 @@
       '''
 var v = <int, bool>{if (1 < 0) 'a': true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 31, 3)],
+      [error(diag.mapKeyTypeNotAssignable, 31, 3)],
     );
   }
 
@@ -216,7 +216,7 @@
       '''
 var v = <int, bool>{'a' : true};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 20, 3)],
+      [error(diag.mapKeyTypeNotAssignable, 20, 3)],
     );
   }
 
@@ -231,7 +231,7 @@
       '''
 var v = <int, String>{...{'a': 'a'}};
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 26, 3)],
+      [error(diag.mapKeyTypeNotAssignable, 26, 3)],
     );
   }
 
@@ -254,7 +254,7 @@
   <int, int>{if (c) 0: 0 else a: 0};
 }
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 58, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 58, 1)],
     );
   }
 
@@ -265,7 +265,7 @@
   <int, int>{if (c) a: 0 };
 }
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 48, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 48, 1)],
     );
   }
 
@@ -276,7 +276,7 @@
   <int, int>{...a};
 }
 ''',
-      [error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 46, 1)],
+      [error(diag.mapKeyTypeNotAssignable, 46, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
index 44f118d..0ebeff4 100644
--- a/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
 const dynamic b = 'b';
 var v = const <bool, int>{if (1 < 0) true: a else false: b};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 101, 1)],
+      [error(diag.mapValueTypeNotAssignable, 101, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
       '''
 var v = const <bool, int>{if (1 < 0) true: 'a'};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 43, 3)],
+      [error(diag.mapValueTypeNotAssignable, 43, 3)],
     );
   }
 
@@ -64,7 +64,7 @@
 const dynamic a = 'a';
 var v = const <bool, int>{if (true) true: a};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 65, 1)],
+      [error(diag.mapValueTypeNotAssignable, 65, 1)],
     );
   }
 
@@ -74,7 +74,7 @@
 final a = 0;
 var v = const <bool, int>{if (1 < 2) true: a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 56, 1)],
+      [error(diag.nonConstantMapValue, 56, 1)],
     );
   }
 
@@ -91,7 +91,7 @@
 const dynamic a = null;
 var v = const <bool, int>{true: a};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignableNullability, 56, 1)],
+      [error(diag.mapValueTypeNotAssignableNullability, 56, 1)],
     );
   }
 
@@ -100,7 +100,7 @@
       '''
 var v = const <bool, int>{true: null};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignableNullability, 32, 4)],
+      [error(diag.mapValueTypeNotAssignableNullability, 32, 4)],
     );
   }
 
@@ -123,7 +123,7 @@
 const dynamic a = 'a';
 var v = const <bool, int>{true: a};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 55, 1)],
+      [error(diag.mapValueTypeNotAssignable, 55, 1)],
     );
   }
 
@@ -132,7 +132,7 @@
       '''
 var v = const <bool, int>{true: 'a'};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 32, 3)],
+      [error(diag.mapValueTypeNotAssignable, 32, 3)],
     );
   }
 
@@ -148,7 +148,7 @@
 const dynamic a = 'a';
 var v = const <bool, int>{...{true: a}};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 59, 1)],
+      [error(diag.mapValueTypeNotAssignable, 59, 1)],
     );
   }
 
@@ -173,7 +173,7 @@
       '''
 var v = <bool, int>{if (1 < 0) true: 'a'};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 37, 3)],
+      [error(diag.mapValueTypeNotAssignable, 37, 3)],
     );
   }
 
@@ -210,7 +210,7 @@
       '''
 var v = <bool, int>{true: 'a'};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 26, 3)],
+      [error(diag.mapValueTypeNotAssignable, 26, 3)],
     );
   }
 
@@ -225,7 +225,7 @@
       '''
 var v = <bool, int>{...{true: 'a'}};
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 30, 3)],
+      [error(diag.mapValueTypeNotAssignable, 30, 3)],
     );
   }
 
@@ -248,7 +248,7 @@
   <int, int>{if (c) 0: 0 else 0: a};
 }
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 61, 1)],
+      [error(diag.mapValueTypeNotAssignable, 61, 1)],
     );
   }
 
@@ -259,7 +259,7 @@
   <int, int>{if (c) 0: a};
 }
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 51, 1)],
+      [error(diag.mapValueTypeNotAssignable, 51, 1)],
     );
   }
 
@@ -270,7 +270,7 @@
   <int, int>{...a};
 }
 ''',
-      [error(CompileTimeErrorCode.mapValueTypeNotAssignable, 46, 1)],
+      [error(diag.mapValueTypeNotAssignable, 46, 1)],
     );
   }
 }
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 10940a5..fc66811 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
@@ -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:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   int A = 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 16, 1)],
+      [error(diag.memberWithClassName, 16, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   int z = 0, A = 0, b = 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 23, 1)],
+      [error(diag.memberWithClassName, 23, 1)],
     );
   }
 
@@ -44,7 +44,7 @@
   get A => 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 16, 1)],
+      [error(diag.memberWithClassName, 16, 1)],
     );
   }
 
@@ -55,7 +55,7 @@
   static int get A => 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 27, 1)],
+      [error(diag.memberWithClassName, 27, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
   set A(_) {}
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 16, 1)],
+      [error(diag.memberWithClassName, 16, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
   static set A(_) {}
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 23, 1)],
+      [error(diag.memberWithClassName, 23, 1)],
     );
   }
 
@@ -94,7 +94,7 @@
   final int E = 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 26, 1)],
+      [error(diag.memberWithClassName, 26, 1)],
     );
   }
 
@@ -106,7 +106,7 @@
   int get E => 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 24, 1)],
+      [error(diag.memberWithClassName, 24, 1)],
     );
   }
 
@@ -118,7 +118,7 @@
   static int get E => 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 31, 1)],
+      [error(diag.memberWithClassName, 31, 1)],
     );
   }
 
@@ -130,7 +130,7 @@
   set E(int _) {}
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 20, 1)],
+      [error(diag.memberWithClassName, 20, 1)],
     );
   }
 
@@ -142,7 +142,7 @@
   static set E(int _) {}
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 27, 1)],
+      [error(diag.memberWithClassName, 27, 1)],
     );
   }
 
@@ -153,7 +153,7 @@
   int get M => 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 20, 1)],
+      [error(diag.memberWithClassName, 20, 1)],
     );
   }
 
@@ -164,7 +164,7 @@
   static int get M => 0;
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 27, 1)],
+      [error(diag.memberWithClassName, 27, 1)],
     );
   }
 
@@ -175,7 +175,7 @@
   void set M(_) {}
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 21, 1)],
+      [error(diag.memberWithClassName, 21, 1)],
     );
   }
 
@@ -186,7 +186,7 @@
   static void set M(_) {}
 }
 ''',
-      [error(ParserErrorCode.memberWithClassName, 28, 1)],
+      [error(diag.memberWithClassName, 28, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mismatched_annotation_on_struct_field_test.dart b/pkg/analyzer/test/src/diagnostics/mismatched_annotation_on_struct_field_test.dart
index 21d5b99..908d2dc 100644
--- a/pkg/analyzer/test/src/diagnostics/mismatched_annotation_on_struct_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mismatched_annotation_on_struct_field_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   external int x;
 }
 ''',
-      [error(FfiCode.mismatchedAnnotationOnStructField, 52, 9)],
+      [error(diag.mismatchedAnnotationOnStructField, 52, 9)],
     );
   }
 
@@ -37,7 +37,7 @@
   external double x;
 }
 ''',
-      [error(FfiCode.mismatchedAnnotationOnStructField, 52, 8)],
+      [error(diag.mismatchedAnnotationOnStructField, 52, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_annotation_on_struct_field_test.dart b/pkg/analyzer/test/src/diagnostics/missing_annotation_on_struct_field_test.dart
index c98b9df..2dc5aa7 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_annotation_on_struct_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_annotation_on_struct_field_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   external int x;
 }
 ''',
-      [error(FfiCode.missingAnnotationOnStructField, 61, 3)],
+      [error(diag.missingAnnotationOnStructField, 61, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart
index 29a2c10..563eccc 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_default_value_for_parameter_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +27,7 @@
       '''
 var f = ({int a}) {};
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 14, 1)],
+      [error(diag.missingDefaultValueForParameter, 14, 1)],
     );
   }
 
@@ -43,13 +42,7 @@
       '''
 var f = ([int a]) {};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          14,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 14, 1)],
     );
   }
 
@@ -85,7 +78,7 @@
   C._();
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 27, 1)],
+      [error(diag.missingDefaultValueForParameter, 27, 1)],
     );
   }
 
@@ -97,13 +90,7 @@
   C._();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 27, 1)],
     );
   }
 
@@ -123,7 +110,7 @@
   C({int a});
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 19, 1)],
+      [error(diag.missingDefaultValueForParameter, 19, 1)],
     );
   }
 
@@ -173,7 +160,7 @@
   B({int super.a});
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 61, 1)],
+      [error(diag.missingDefaultValueForParameter, 61, 1)],
     );
   }
 
@@ -187,7 +174,7 @@
   B({int super.a});
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 66, 1)],
+      [error(diag.missingDefaultValueForParameter, 66, 1)],
     );
   }
 
@@ -198,13 +185,7 @@
   C([int a]);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          19,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 19, 1)],
     );
   }
 
@@ -240,13 +221,7 @@
   B([int super.a]);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          61,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 61, 1)],
     );
   }
 
@@ -260,13 +235,7 @@
   B([int super.a]);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          66,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 66, 1)],
     );
   }
 
@@ -303,7 +272,7 @@
   C({super.a});
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 126, 1)],
+      [error(diag.missingDefaultValueForParameter, 126, 1)],
     );
   }
 
@@ -431,7 +400,7 @@
       '''
 void f({int a = 0}) native;
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 20, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 20, 7)],
     );
   }
 
@@ -440,7 +409,7 @@
       '''
 void f({int a}) native;
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 16, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 16, 7)],
     );
   }
 
@@ -449,7 +418,7 @@
       '''
 void f([int a = 0]) native;
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 20, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 20, 7)],
     );
   }
 
@@ -458,7 +427,7 @@
       '''
 void f([int a]) native;
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 16, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 16, 7)],
     );
   }
 
@@ -473,7 +442,7 @@
       '''
 void f({int a}) {}
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 12, 1)],
+      [error(diag.missingDefaultValueForParameter, 12, 1)],
     );
   }
 
@@ -494,13 +463,7 @@
       '''
 void f([int a]) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          12,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 12, 1)],
     );
   }
 
@@ -675,7 +638,7 @@
   void foo({int a}) native;
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 30, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 30, 7)],
     );
   }
 
@@ -686,7 +649,7 @@
   void foo([int a]) native;
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 30, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 30, 7)],
     );
   }
 
@@ -697,7 +660,7 @@
   void foo({int? a}) native;
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 31, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 31, 7)],
     );
   }
 
@@ -708,7 +671,7 @@
   void foo({T a}) native;
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 31, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 31, 7)],
     );
   }
 
@@ -719,7 +682,7 @@
   void foo([T a]) native;
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 47, 7)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 47, 7)],
     );
   }
 
@@ -730,7 +693,7 @@
   void foo({int a}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 26, 1)],
+      [error(diag.missingDefaultValueForParameter, 26, 1)],
     );
   }
 
@@ -741,13 +704,7 @@
   void foo([int a]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          26,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 26, 1)],
     );
   }
 
@@ -766,7 +723,7 @@
   void foo({T a}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 43, 1)],
+      [error(diag.missingDefaultValueForParameter, 43, 1)],
     );
   }
 
@@ -777,13 +734,7 @@
   void foo([T a]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterPositional, 43, 1)],
     );
   }
 
@@ -812,16 +763,11 @@
 import 'package:meta/meta.dart';
 
 class C {
+  // ignore: deprecated_member_use
   void foo({@required int a}) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterWithAnnotation,
-          70,
-          1,
-        ),
-      ],
+      [error(diag.missingDefaultValueForParameterWithAnnotation, 105, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
index 3fccf12..f298086 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -81,9 +81,9 @@
 ''',
       [
         if (!_arePatternsEnabled)
-          error(StaticWarningCode.missingEnumConstantInSwitch, 44, 10)
+          error(diag.missingEnumConstantInSwitch, 44, 10)
         else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 44, 6),
+          error(diag.nonExhaustiveSwitchStatement, 44, 6),
       ],
     );
   }
@@ -103,9 +103,9 @@
 ''',
       [
         if (!_arePatternsEnabled)
-          error(StaticWarningCode.missingEnumConstantInSwitch, 44, 10)
+          error(diag.missingEnumConstantInSwitch, 44, 10)
         else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 44, 6),
+          error(diag.nonExhaustiveSwitchStatement, 44, 6),
       ],
     );
   }
@@ -125,9 +125,9 @@
 ''',
       [
         if (!_arePatternsEnabled)
-          error(StaticWarningCode.missingEnumConstantInSwitch, 44, 10)
+          error(diag.missingEnumConstantInSwitch, 44, 10)
         else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 44, 6),
+          error(diag.nonExhaustiveSwitchStatement, 44, 6),
       ],
     );
   }
@@ -147,9 +147,9 @@
 ''',
       [
         if (!_arePatternsEnabled)
-          error(StaticWarningCode.missingEnumConstantInSwitch, 38, 10)
+          error(diag.missingEnumConstantInSwitch, 38, 10)
         else
-          error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 38, 6),
+          error(diag.nonExhaustiveSwitchStatement, 38, 6),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_exception_value_test.dart b/pkg/analyzer/test/src/diagnostics/missing_exception_value_test.dart
index a5374fc..ab5aeabd 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_exception_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_exception_value_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   Pointer.fromFunction<T>(f);
 }
 ''',
-      [error(FfiCode.missingExceptionValue, 96, 12)],
+      [error(diag.missingExceptionValue, 96, 12)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_field_type_in_struct_test.dart b/pkg/analyzer/test/src/diagnostics/missing_field_type_in_struct_test.dart
index dc51c6c..44767ca 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_field_type_in_struct_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_field_type_in_struct_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   external Pointer notEmpty;
 }
 ''',
-      [error(FfiCode.missingFieldTypeInStruct, 65, 3)],
+      [error(diag.missingFieldTypeInStruct, 65, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/missing_override_of_must_be_overridden_test.dart b/pkg/analyzer/test/src/diagnostics/missing_override_of_must_be_overridden_test.dart
index d32bd4f..55aee29 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_override_of_must_be_overridden_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_override_of_must_be_overridden_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,7 +33,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 86, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 86, 1)],
     );
   }
 
@@ -54,7 +54,7 @@
 ''',
       [
         error(
-          WarningCode.missingOverrideOfMustBeOverriddenTwo,
+          diag.missingOverrideOfMustBeOverriddenTwo,
           121,
           1,
           messageContains: ["'f'", "'m'"],
@@ -109,7 +109,7 @@
   int get f => 0;
 }
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 86, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 86, 1)],
     );
   }
 
@@ -140,7 +140,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 91, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 91, 1)],
     );
   }
 
@@ -186,7 +186,7 @@
 
 class A with M {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 87, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 87, 1)],
     );
   }
 
@@ -202,7 +202,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 87, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 87, 1)],
     );
   }
 
@@ -224,7 +224,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenThreePlus, 157, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenThreePlus, 157, 1)],
     );
   }
 
@@ -243,7 +243,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenTwo, 122, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenTwo, 122, 1)],
     );
   }
 
@@ -308,7 +308,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 121, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 121, 1)],
     );
   }
 
@@ -328,7 +328,7 @@
 
 class C extends B {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 124, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 124, 1)],
     );
   }
 
@@ -349,7 +349,7 @@
 
 class C extends B {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 144, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 144, 1)],
     );
   }
 
@@ -365,7 +365,7 @@
 
 class B = Object with A;
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 87, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 87, 1)],
     );
   }
 
@@ -459,7 +459,7 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 107, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 107, 1)],
     );
   }
 
@@ -475,7 +475,38 @@
 
 class B extends A {}
 ''',
-      [error(WarningCode.missingOverrideOfMustBeOverriddenOne, 100, 1)],
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 100, 1)],
     );
   }
+
+  test_unary_operator() async {
+    await assertErrorsInCode(
+      '''
+import 'package:meta/meta.dart';
+
+class A {
+  @mustBeOverridden
+  void operator -() {}
+}
+
+class B extends A {}
+''',
+      [error(diag.missingOverrideOfMustBeOverriddenOne, 96, 1)],
+    );
+  }
+
+  test_unary_operator_overriden() async {
+    await assertNoErrorsInCode('''
+import 'package:meta/meta.dart';
+class A {
+  @mustBeOverridden
+  void operator -() {}
+}
+
+class B extends A {
+  @override
+  void operator -() {}
+}
+''');
+  }
 }
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 87bba452..524b751 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +25,7 @@
 @A.named()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 51, 5)],
+      [error(diag.missingRequiredArgument, 51, 5)],
     );
   }
 
@@ -40,7 +39,7 @@
 @A()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 43, 1)],
+      [error(diag.missingRequiredArgument, 43, 1)],
     );
   }
 
@@ -58,7 +57,7 @@
 @a.A.named()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 28, 5)],
+      [error(diag.missingRequiredArgument, 28, 5)],
     );
   }
 
@@ -76,7 +75,7 @@
 @a.A()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 26, 1)],
+      [error(diag.missingRequiredArgument, 26, 1)],
     );
   }
 
@@ -104,13 +103,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          15,
-          14,
-        ),
-        error(ParserErrorCode.missingIdentifier, 29, 1),
-        error(ParserErrorCode.missingFunctionBody, 32, 1),
+        error(diag.initializingFormalForNonExistentField, 15, 14),
+        error(diag.missingIdentifier, 29, 1),
+        error(diag.missingFunctionBody, 32, 1),
       ],
     );
   }
@@ -125,7 +120,7 @@
   new C();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 52, 1)],
+      [error(diag.missingRequiredArgument, 52, 1)],
     );
   }
 
@@ -137,7 +132,7 @@
   C.named() : this();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 47, 6)],
+      [error(diag.missingRequiredArgument, 47, 6)],
     );
   }
 
@@ -152,7 +147,7 @@
   D() : super();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 66, 7)],
+      [error(diag.missingRequiredArgument, 66, 7)],
     );
   }
 
@@ -176,7 +171,7 @@
   const E({required int a});
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 11, 1)],
+      [error(diag.missingRequiredArgument, 11, 1)],
     );
   }
 
@@ -188,7 +183,7 @@
   const E({required int a});
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 11, 1)],
+      [error(diag.missingRequiredArgument, 11, 1)],
     );
   }
 
@@ -201,7 +196,7 @@
   f();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 40, 1)],
+      [error(diag.missingRequiredArgument, 40, 1)],
     );
   }
 
@@ -214,7 +209,7 @@
   f.call();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 46, 2)],
+      [error(diag.missingRequiredArgument, 46, 2)],
     );
   }
 
@@ -226,7 +221,7 @@
   f()();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 57, 5)],
+      [error(diag.missingRequiredArgument, 57, 5)],
     );
   }
 
@@ -240,7 +235,7 @@
   new A().m();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 58, 1)],
+      [error(diag.missingRequiredArgument, 58, 1)],
     );
   }
 
@@ -257,7 +252,7 @@
   new A().m();
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 37, 1)],
+      [error(diag.missingRequiredArgument, 37, 1)],
     );
   }
 
@@ -272,7 +267,7 @@
   F m() => ({required String x}) => throw '';
 }
 ''',
-      [error(CompileTimeErrorCode.missingRequiredArgument, 20, 7)],
+      [error(diag.missingRequiredArgument, 20, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_size_annotation_carray_test.dart b/pkg/analyzer/test/src/diagnostics/missing_size_annotation_carray_test.dart
index 890cd34..9852130 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_size_annotation_carray_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_size_annotation_carray_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   external Array<Uint8> a0;
 }
 ''',
-      [error(FfiCode.missingSizeAnnotationCarray, 62, 12)],
+      [error(diag.missingSizeAnnotationCarray, 62, 12)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart
index 289575f..5af1810 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_variable_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,8 +25,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 35, 1),
-        error(WarningCode.unusedLocalVariable, 61, 1),
+        error(diag.unusedLocalVariable, 35, 1),
+        error(diag.unusedLocalVariable, 61, 1),
       ],
     );
 
@@ -64,8 +64,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 35, 1),
-        error(WarningCode.unusedLocalVariable, 60, 1),
+        error(diag.unusedLocalVariable, 35, 1),
+        error(diag.unusedLocalVariable, 60, 1),
       ],
     );
 
@@ -102,9 +102,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 35, 1),
-        error(WarningCode.deadCode, 37, 10),
-        error(WarningCode.unusedLocalVariable, 46, 1),
+        error(diag.unusedLocalVariable, 35, 1),
+        error(diag.deadCode, 37, 10),
+        error(diag.unusedLocalVariable, 46, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -137,8 +137,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 40, 1),
-        error(WarningCode.unusedLocalVariable, 51, 1),
+        error(diag.unusedLocalVariable, 40, 1),
+        error(diag.unusedLocalVariable, 51, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -179,8 +179,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 39, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 44, 1),
+        error(diag.unusedLocalVariable, 39, 1),
+        error(diag.missingVariablePattern, 44, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -215,8 +215,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 29, 1),
-        error(WarningCode.unusedLocalVariable, 40, 1),
+        error(diag.missingVariablePattern, 29, 1),
+        error(diag.unusedLocalVariable, 40, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -247,9 +247,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 39, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 44, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 49, 1),
+        error(diag.unusedLocalVariable, 39, 1),
+        error(diag.missingVariablePattern, 44, 1),
+        error(diag.missingVariablePattern, 49, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -292,9 +292,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 39, 1),
-        error(WarningCode.unusedLocalVariable, 54, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 59, 1),
+        error(diag.unusedLocalVariable, 39, 1),
+        error(diag.unusedLocalVariable, 54, 1),
+        error(diag.missingVariablePattern, 59, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -343,11 +343,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 35, 1),
-        error(WarningCode.deadCode, 37, 10),
-        error(WarningCode.unusedLocalVariable, 46, 1),
-        error(WarningCode.deadCode, 48, 10),
-        error(WarningCode.unusedLocalVariable, 57, 1),
+        error(diag.unusedLocalVariable, 35, 1),
+        error(diag.deadCode, 37, 10),
+        error(diag.unusedLocalVariable, 46, 1),
+        error(diag.deadCode, 48, 10),
+        error(diag.unusedLocalVariable, 57, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -390,9 +390,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 39, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 44, 1),
-        error(WarningCode.unusedLocalVariable, 59, 1),
+        error(diag.unusedLocalVariable, 39, 1),
+        error(diag.missingVariablePattern, 44, 1),
+        error(diag.unusedLocalVariable, 59, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -441,9 +441,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 29, 1),
-        error(WarningCode.unusedLocalVariable, 44, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 49, 1),
+        error(diag.missingVariablePattern, 29, 1),
+        error(diag.unusedLocalVariable, 44, 1),
+        error(diag.missingVariablePattern, 49, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -486,10 +486,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 29, 1),
-        error(WarningCode.unusedLocalVariable, 40, 1),
-        error(WarningCode.deadCode, 42, 10),
-        error(WarningCode.unusedLocalVariable, 51, 1),
+        error(diag.missingVariablePattern, 29, 1),
+        error(diag.unusedLocalVariable, 40, 1),
+        error(diag.deadCode, 42, 10),
+        error(diag.unusedLocalVariable, 51, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -530,8 +530,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 29, 6),
-        error(WarningCode.unusedLocalVariable, 45, 1),
+        error(diag.missingVariablePattern, 29, 6),
+        error(diag.unusedLocalVariable, 45, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -573,9 +573,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 46, 1),
-        error(WarningCode.deadCode, 48, 10),
-        error(WarningCode.unusedLocalVariable, 57, 1),
+        error(diag.unusedLocalVariable, 46, 1),
+        error(diag.deadCode, 48, 10),
+        error(diag.unusedLocalVariable, 57, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -613,8 +613,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 50, 1),
-        error(CompileTimeErrorCode.missingVariablePattern, 55, 1),
+        error(diag.unusedLocalVariable, 50, 1),
+        error(diag.missingVariablePattern, 55, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -652,8 +652,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingVariablePattern, 40, 1),
-        error(WarningCode.unusedLocalVariable, 51, 1),
+        error(diag.missingVariablePattern, 40, 1),
+        error(diag.unusedLocalVariable, 51, 1),
       ],
     );
     var node = findNode.singleGuardedPattern.pattern;
@@ -688,10 +688,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 52, 1),
-        error(WarningCode.deadCode, 59, 4),
-        error(WarningCode.unreachableSwitchCase, 59, 4),
-        error(WarningCode.unusedLocalVariable, 76, 1),
+        error(diag.unusedLocalVariable, 52, 1),
+        error(diag.deadCode, 59, 4),
+        error(diag.unreachableSwitchCase, 59, 4),
+        error(diag.unusedLocalVariable, 76, 1),
       ],
     );
 
@@ -733,7 +733,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 53, 1)],
+      [error(diag.unusedLocalVariable, 53, 1)],
     );
   }
 
@@ -748,7 +748,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 58, 1)],
+      [error(diag.unusedLocalVariable, 58, 1)],
     );
   }
 
@@ -766,7 +766,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 1)],
+      [error(diag.unusedLocalVariable, 46, 1)],
     );
   }
 
@@ -784,7 +784,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 53, 1)],
+      [error(diag.unusedLocalVariable, 53, 1)],
     );
   }
 }
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
index 0220b68..7ebb5c3 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -39,13 +39,7 @@
 
 abstract class X extends B with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationConcreteSuperInvokedMemberType,
-          227,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationConcreteSuperInvokedMemberType, 227, 1)],
     );
   }
 
@@ -89,13 +83,7 @@
   void foo([int? p]) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationConcreteSuperInvokedMemberType,
-          183,
-          2,
-        ),
-      ],
+      [error(diag.mixinApplicationConcreteSuperInvokedMemberType, 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
index b4048b3..2e11105 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
 
 abstract class X extends A with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          121,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedMember, 121, 1)],
     );
   }
 
@@ -60,13 +54,7 @@
 
 class X extends A with M1, M2 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          149,
-          2,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedMember, 149, 2)],
     );
   }
 
@@ -85,13 +73,7 @@
 
 class X extends A with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          113,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedMember, 113, 1)],
     );
   }
 
@@ -110,13 +92,7 @@
 
 abstract class X extends A with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          122,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedMember, 122, 1)],
     );
   }
 
@@ -253,13 +229,7 @@
 
 abstract class X extends A with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedSetter,
-          129,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedSetter, 129, 1)],
     );
   }
 
@@ -281,13 +251,7 @@
   int get foo => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          99,
-          2,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedMember, 99, 2)],
     );
   }
 
@@ -341,13 +305,7 @@
   void foo() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedMember,
-          100,
-          2,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedMember, 100, 2)],
     );
   }
 
@@ -405,13 +363,7 @@
   set foo(int _) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNoConcreteSuperInvokedSetter,
-          106,
-          2,
-        ),
-      ],
+      [error(diag.mixinApplicationNoConcreteSuperInvokedSetter, 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 58356cc..82ad6d1 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,9 +26,9 @@
 mixin CycleWithX on X {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 26, 1),
-        error(CompileTimeErrorCode.mixinOfNonClass, 33, 10),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 84, 10),
+        error(diag.recursiveInterfaceInheritance, 26, 1),
+        error(diag.mixinOfNonClass, 33, 10),
+        error(diag.recursiveInterfaceInheritance, 84, 10),
       ],
     );
   }
@@ -60,13 +60,7 @@
 mixin M<T> on A<T> {}
 class C extends Object with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          84,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 84, 1)],
     );
   }
 
@@ -79,13 +73,7 @@
 class A {}
 augment mixin M on A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          13,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 13, 1)],
     );
   }
 
@@ -97,13 +85,7 @@
 mixin M<T> on A<T> {}
 class C extends Object with M<int> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          84,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 84, 1)],
     );
   }
 
@@ -126,13 +108,7 @@
 
 class X = C with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          134,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 134, 1)],
     );
   }
 
@@ -175,8 +151,8 @@
 mixin DirectoryAddOnsMixin implements Directory {}
 ''',
       [
-        error(CompileTimeErrorCode.conflictingGenericInterfaces, 96, 15),
-        error(WarningCode.unusedElement, 96, 15),
+        error(diag.conflictingGenericInterfaces, 96, 15),
+        error(diag.unusedElement, 96, 15),
       ],
     );
 
@@ -193,13 +169,7 @@
 
 class X = A<double> with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          62,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 62, 1)],
     );
   }
 
@@ -211,13 +181,7 @@
 mixin M<T> on A<T> {}
 class C = Object with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          78,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 78, 1)],
     );
   }
 
@@ -230,13 +194,7 @@
 
 class X = Object with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          51,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 51, 1)],
     );
   }
 
@@ -293,13 +251,7 @@
 
 class X = C with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          71,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 71, 1)],
     );
   }
 
@@ -328,13 +280,7 @@
   v
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinApplicationNotImplementedInterface,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.mixinApplicationNotImplementedInterface, 50, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_class_declaration_extends_not_object_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_class_declaration_extends_not_object_test.dart
index 72ea0ed..6d9a9bb 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_class_declaration_extends_not_object_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_class_declaration_extends_not_object_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,13 +22,7 @@
 class A {}
 mixin class B extends A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          33,
-          1,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 33, 1)],
     );
   }
 
@@ -44,13 +38,7 @@
 mixin M {}
 mixin class A extends Object with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          40,
-          6,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 40, 6)],
     );
   }
 
@@ -68,13 +56,7 @@
 mixin M2 {}
 mixin class A = Object with M1, M2;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          47,
-          11,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 47, 11)],
     );
   }
 }
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 09ab270..d32fd44 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
 }
 class B extends Object with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 49, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 49, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
 }
 class B = Object with A;
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 43, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 43, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 34, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 34, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
 }
 class B with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 18, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 18, 1)],
     );
   }
 
@@ -94,7 +94,7 @@
 }
 class B with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 27, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 27, 1)],
     );
   }
 
@@ -107,7 +107,7 @@
 }
 class B with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 35, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 35, 1)],
     );
   }
 
@@ -119,7 +119,7 @@
 }
 class B with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 18, 1)],
+      [error(diag.mixinClassDeclaresConstructor, 18, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
index f4cf94f..ebb0088 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   factory M.named() => throw 0;
 }
 ''',
-      [error(ParserErrorCode.mixinDeclaresConstructor, 12, 7)],
+      [error(diag.mixinDeclaresConstructor, 12, 7)],
     );
 
     var node = findNode.singleMixinDeclaration;
@@ -30,9 +30,10 @@
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> M@6
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> M@6
 ''');
   }
 
@@ -43,7 +44,7 @@
   factory M() => throw 0;
 }
 ''',
-      [error(ParserErrorCode.mixinDeclaresConstructor, 12, 7)],
+      [error(diag.mixinDeclaresConstructor, 12, 7)],
     );
 
     var node = findNode.singleMixinDeclaration;
@@ -51,9 +52,10 @@
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> M@6
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> M@6
 ''');
   }
 
@@ -64,7 +66,7 @@
   M.named();
 }
 ''',
-      [error(ParserErrorCode.mixinDeclaresConstructor, 12, 1)],
+      [error(diag.mixinDeclaresConstructor, 12, 1)],
     );
 
     var node = findNode.singleMixinDeclaration;
@@ -72,9 +74,10 @@
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> M@6
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> M@6
 ''');
   }
 
@@ -85,7 +88,7 @@
   M();
 }
 ''',
-      [error(ParserErrorCode.mixinDeclaresConstructor, 12, 1)],
+      [error(diag.mixinDeclaresConstructor, 12, 1)],
     );
 
     var node = findNode.singleMixinDeclaration;
@@ -93,9 +96,10 @@
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
-  declaredElement: <testLibraryFragment> M@6
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
+  declaredFragment: <testLibraryFragment> M@6
 ''');
   }
 }
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 b6e4fd5..b5f8042 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_deferred_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 class B {}
 class C = B with a.A;
 ''',
-      [error(CompileTimeErrorCode.mixinDeferredClass, 76, 3)],
+      [error(diag.mixinDeferredClass, 76, 3)],
     );
   }
 
@@ -42,7 +42,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.mixinDeferredClass, 43, 3)],
+      [error(diag.mixinDeferredClass, 43, 3)],
     );
   }
 
@@ -57,7 +57,7 @@
 import 'lib1.dart' deferred as a;
 class B extends Object with a.A {}
 ''',
-      [error(CompileTimeErrorCode.mixinDeferredClass, 76, 3)],
+      [error(diag.mixinDeferredClass, 76, 3)],
     );
   }
 }
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 4771d99..0280914 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,12 +23,8 @@
 class C extends Object with B {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          33,
-          1,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 66, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 33, 1),
+        error(diag.mixinInheritsFromNotObject, 66, 1),
       ],
     );
   }
@@ -41,7 +37,7 @@
 class B extends A {}
 class C extends Object with B {}
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 74, 1)],
+      [error(diag.mixinInheritsFromNotObject, 74, 1)],
     );
   }
 
@@ -70,12 +66,8 @@
 class C extends Object with B {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          46,
-          6,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 84, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 46, 6),
+        error(diag.mixinInheritsFromNotObject, 84, 1),
       ],
     );
   }
@@ -88,7 +80,7 @@
 class B extends Object with A {}
 class C extends Object with B {}
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 86, 1)],
+      [error(diag.mixinInheritsFromNotObject, 86, 1)],
     );
   }
 
@@ -109,12 +101,8 @@
 class D extends Object with C {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          57,
-          9,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 96, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 57, 9),
+        error(diag.mixinInheritsFromNotObject, 96, 1),
       ],
     );
   }
@@ -128,7 +116,7 @@
 class C = Object with A, B;
 class D extends Object with C {}
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 92, 1)],
+      [error(diag.mixinInheritsFromNotObject, 92, 1)],
     );
   }
 
@@ -157,12 +145,8 @@
 class C = Object with B;
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          33,
-          1,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 60, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 33, 1),
+        error(diag.mixinInheritsFromNotObject, 60, 1),
       ],
     );
   }
@@ -175,7 +159,7 @@
 class B extends A {}
 class C = Object with B;
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 68, 1)],
+      [error(diag.mixinInheritsFromNotObject, 68, 1)],
     );
   }
 
@@ -187,12 +171,8 @@
 class C = Object with B;
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          46,
-          6,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 78, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 46, 6),
+        error(diag.mixinInheritsFromNotObject, 78, 1),
       ],
     );
   }
@@ -205,7 +185,7 @@
 class B extends Object with A {}
 class C = Object with B;
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 80, 1)],
+      [error(diag.mixinInheritsFromNotObject, 80, 1)],
     );
   }
 
@@ -226,12 +206,8 @@
 class D = Object with C;
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          57,
-          9,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 90, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 57, 9),
+        error(diag.mixinInheritsFromNotObject, 90, 1),
       ],
     );
   }
@@ -245,7 +221,7 @@
 class C = Object with A, B;
 class D = Object with C;
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 86, 1)],
+      [error(diag.mixinInheritsFromNotObject, 86, 1)],
     );
   }
 
@@ -276,12 +252,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          33,
-          1,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 50, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 33, 1),
+        error(diag.mixinInheritsFromNotObject, 50, 1),
       ],
     );
   }
@@ -296,7 +268,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 58, 1)],
+      [error(diag.mixinInheritsFromNotObject, 58, 1)],
     );
   }
 
@@ -331,12 +303,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          46,
-          6,
-        ),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 68, 1),
+        error(diag.mixinClassDeclarationExtendsNotObject, 46, 6),
+        error(diag.mixinInheritsFromNotObject, 68, 1),
       ],
     );
   }
@@ -351,7 +319,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 70, 1)],
+      [error(diag.mixinInheritsFromNotObject, 70, 1)],
     );
   }
 
@@ -375,7 +343,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 74, 1)],
+      [error(diag.mixinInheritsFromNotObject, 74, 1)],
     );
   }
 
@@ -390,7 +358,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 76, 1)],
+      [error(diag.mixinInheritsFromNotObject, 76, 1)],
     );
   }
 
@@ -411,13 +379,7 @@
 mixin class A {}
 mixin class B extends A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          39,
-          1,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 39, 1)],
     );
   }
 
@@ -433,13 +395,7 @@
 mixin class A {}
 mixin class B extends Object with A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          46,
-          6,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 46, 6)],
     );
   }
 
@@ -449,13 +405,7 @@
 mixin M {}
 mixin class A with M {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          25,
-          6,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 25, 6)],
     );
   }
 
@@ -473,13 +423,7 @@
 mixin class B {}
 mixin class C = Object with A, B;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          57,
-          9,
-        ),
-      ],
+      [error(diag.mixinClassDeclarationExtendsNotObject, 57, 9)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
index 805866e..e44d554 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,8 +27,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.mixinDeclaresConstructor, 12, 1),
-        error(CompileTimeErrorCode.mixinInstantiate, 45, 1),
+        error(diag.mixinDeclaresConstructor, 12, 1),
+        error(diag.mixinInstantiate, 45, 1),
       ],
     );
 
@@ -64,7 +63,7 @@
   new M();
 }
 ''',
-      [error(CompileTimeErrorCode.mixinInstantiate, 29, 1)],
+      [error(diag.mixinInstantiate, 29, 1)],
     );
 
     var node = findNode.singleInstanceCreationExpression;
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 49bf56b..cc1d7fa 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A extends Object with bool {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 4)],
+      [error(diag.mixinOfDisallowedClass, 28, 4)],
     );
   }
 
@@ -29,7 +29,7 @@
       '''
 class A extends Object with double {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 6)],
+      [error(diag.mixinOfDisallowedClass, 28, 6)],
     );
   }
 
@@ -39,7 +39,7 @@
 import 'dart:async';
 class A extends Object with FutureOr {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 49, 8)],
+      [error(diag.mixinOfDisallowedClass, 49, 8)],
     );
   }
 
@@ -49,7 +49,7 @@
 import 'dart:async';
 class A extends Object with FutureOr<int> {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 49, 13)],
+      [error(diag.mixinOfDisallowedClass, 49, 13)],
     );
   }
 
@@ -59,7 +59,7 @@
 import 'dart:async';
 class A<T> extends Object with FutureOr<T> {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 52, 11)],
+      [error(diag.mixinOfDisallowedClass, 52, 11)],
     );
   }
 
@@ -68,7 +68,7 @@
       '''
 class A extends Object with int {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 3)],
+      [error(diag.mixinOfDisallowedClass, 28, 3)],
     );
   }
 
@@ -85,9 +85,7 @@
 ''');
 
     await assertErrorsInFile2(a, []);
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.mixinOfDisallowedClass, 39, 3),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.mixinOfDisallowedClass, 39, 3)]);
   }
 
   test_class_Null() async {
@@ -95,7 +93,7 @@
       '''
 class A extends Object with Null {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 4)],
+      [error(diag.mixinOfDisallowedClass, 28, 4)],
     );
   }
 
@@ -104,7 +102,7 @@
       '''
 class A extends Object with num {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 3)],
+      [error(diag.mixinOfDisallowedClass, 28, 3)],
     );
   }
 
@@ -113,7 +111,7 @@
       '''
 class A extends Object with Record {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 6)],
+      [error(diag.mixinOfDisallowedClass, 28, 6)],
     );
   }
 
@@ -122,7 +120,7 @@
       '''
 class A extends Object with String {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 6)],
+      [error(diag.mixinOfDisallowedClass, 28, 6)],
     );
   }
 
@@ -132,7 +130,7 @@
 class A {}
 class C = A with bool;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 4)],
+      [error(diag.mixinOfDisallowedClass, 28, 4)],
     );
   }
 
@@ -142,7 +140,7 @@
 class A {}
 class C = A with double;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 6)],
+      [error(diag.mixinOfDisallowedClass, 28, 6)],
     );
   }
 
@@ -153,7 +151,7 @@
 class A {}
 class C = A with FutureOr;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 49, 8)],
+      [error(diag.mixinOfDisallowedClass, 49, 8)],
     );
   }
 
@@ -163,7 +161,7 @@
 class A {}
 class C = A with int;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 3)],
+      [error(diag.mixinOfDisallowedClass, 28, 3)],
     );
   }
 
@@ -173,7 +171,7 @@
 class A {}
 class C = A with Null;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 4)],
+      [error(diag.mixinOfDisallowedClass, 28, 4)],
     );
   }
 
@@ -183,7 +181,7 @@
 class A {}
 class C = A with num;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 3)],
+      [error(diag.mixinOfDisallowedClass, 28, 3)],
     );
   }
 
@@ -193,7 +191,7 @@
 class A {}
 class C = A with String;
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 6)],
+      [error(diag.mixinOfDisallowedClass, 28, 6)],
     );
   }
 
@@ -204,8 +202,8 @@
 class C = A with String, num;
 ''',
       [
-        error(CompileTimeErrorCode.mixinOfDisallowedClass, 28, 6),
-        error(CompileTimeErrorCode.mixinOfDisallowedClass, 36, 3),
+        error(diag.mixinOfDisallowedClass, 28, 6),
+        error(diag.mixinOfDisallowedClass, 36, 3),
       ],
     );
   }
@@ -217,7 +215,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinOfDisallowedClass, 12, 3)],
+      [error(diag.mixinOfDisallowedClass, 12, 3)],
     );
   }
 
@@ -234,8 +232,6 @@
 ''');
 
     await assertErrorsInFile2(a, []);
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.mixinOfDisallowedClass, 38, 3),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.mixinOfDisallowedClass, 38, 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 896afe4..2cbd182 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 enum E { ONE }
 class A extends Object with E {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 43, 1)],
+      [error(diag.mixinOfNonClass, 43, 1)],
     );
   }
 
@@ -31,7 +31,7 @@
 extension type A(int it) {}
 class B with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 41, 1)],
+      [error(diag.mixinOfNonClass, 41, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
 int A = 7;
 class B extends Object with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 39, 1)],
+      [error(diag.mixinOfNonClass, 39, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
 int B = 7;
 class C = A with B;
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 39, 1)],
+      [error(diag.mixinOfNonClass, 39, 1)],
     );
   }
 
@@ -61,7 +61,7 @@
       r'''
 class C with M {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 13, 1)],
+      [error(diag.mixinOfNonClass, 13, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
 enum E1 { v }
 enum E2 with E1 { v }
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 27, 2)],
+      [error(diag.mixinOfNonClass, 27, 2)],
     );
   }
 
@@ -81,7 +81,7 @@
 extension type A(int it) {}
 enum E with A { v }
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 40, 1)],
+      [error(diag.mixinOfNonClass, 40, 1)],
     );
   }
 
@@ -93,7 +93,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 23, 1)],
+      [error(diag.mixinOfNonClass, 23, 1)],
     );
   }
 
@@ -104,7 +104,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 12, 1)],
+      [error(diag.mixinOfNonClass, 12, 1)],
     );
   }
 
@@ -113,7 +113,7 @@
       '''
 class A with Never {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 13, 5)],
+      [error(diag.mixinOfNonClass, 13, 5)],
     );
   }
 
@@ -124,7 +124,7 @@
 
 class C with p.M {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
   }
 
@@ -135,7 +135,7 @@
 
 class C with M {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
   }
 
@@ -146,10 +146,7 @@
 
 class C with M {}
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 7, 8),
-        error(CompileTimeErrorCode.mixinOfNonClass, 38, 1),
-      ],
+      [error(diag.uriDoesNotExist, 7, 8), error(diag.mixinOfNonClass, 38, 1)],
     );
   }
 
@@ -164,7 +161,7 @@
 
 class C with _$M {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 31, 3)],
+      [error(diag.mixinOfNonClass, 31, 3)],
     );
   }
 
@@ -175,7 +172,7 @@
 
 class C with _$M {}
 ''',
-      [error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 10)],
+      [error(diag.uriHasNotBeenGenerated, 5, 10)],
     );
   }
 
@@ -187,8 +184,8 @@
 class C with M {}
 ''',
       [
-        error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 10),
-        error(CompileTimeErrorCode.mixinOfNonClass, 31, 1),
+        error(diag.uriHasNotBeenGenerated, 5, 10),
+        error(diag.mixinOfNonClass, 31, 1),
       ],
     );
   }
@@ -200,10 +197,7 @@
 
 class C with _$M {}
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 5, 8),
-        error(CompileTimeErrorCode.mixinOfNonClass, 29, 3),
-      ],
+      [error(diag.uriDoesNotExist, 5, 8), error(diag.mixinOfNonClass, 29, 3)],
     );
   }
 
@@ -214,10 +208,7 @@
 
 class C with M {}
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 5, 8),
-        error(CompileTimeErrorCode.mixinOfNonClass, 29, 1),
-      ],
+      [error(diag.uriDoesNotExist, 5, 8), error(diag.mixinOfNonClass, 29, 1)],
     );
   }
 
@@ -228,7 +219,7 @@
 
 class C with p.M {}
 ''',
-      [error(CompileTimeErrorCode.mixinOfNonClass, 39, 3)],
+      [error(diag.mixinOfNonClass, 39, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_of_type_alias_expands_to_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_of_type_alias_expands_to_type_parameter_test.dart
index dbe995c..1b2ca5c 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_of_type_alias_expands_to_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_of_type_alias_expands_to_type_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
 typedef T<X extends A> = X;
 class B with T {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinOfTypeAliasExpandsToTypeParameter,
-          52,
-          1,
-        ),
-      ],
+      [error(diag.mixinOfTypeAliasExpandsToTypeParameter, 52, 1)],
     );
   }
 
@@ -48,13 +42,7 @@
 typedef T<X extends A> = X;
 class B with T<A> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinOfTypeAliasExpandsToTypeParameter,
-          52,
-          1,
-        ),
-      ],
+      [error(diag.mixinOfTypeAliasExpandsToTypeParameter, 52, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart
index 108c17b..efd2cdc 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_on_sealed_class_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -39,7 +39,7 @@
 import 'package:foo/foo.dart';
 mixin Bar on Foo {}
 ''',
-      [error(WarningCode.mixinOnSealedClass, 31, 19)],
+      [error(diag.mixinOnSealedClass, 31, 19)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_on_type_alias_expands_to_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_on_type_alias_expands_to_type_parameter_test.dart
index 0386a9a..caa853a 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_on_type_alias_expands_to_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_on_type_alias_expands_to_type_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
 typedef T<X extends A> = X;
 mixin M on T {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinOnTypeAliasExpandsToTypeParameter,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.mixinOnTypeAliasExpandsToTypeParameter, 50, 1)],
     );
   }
 
@@ -48,13 +42,7 @@
 typedef T<X extends A> = X;
 mixin M on T<A> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinOnTypeAliasExpandsToTypeParameter,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.mixinOnTypeAliasExpandsToTypeParameter, 50, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_base_is_not_base_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_base_is_not_base_test.dart
index 66977c7..26bae64 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_base_is_not_base_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_base_is_not_base_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -24,7 +24,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase,
+          diag.mixinSubtypeOfBaseIsNotBase,
           22,
           1,
           text:
@@ -43,7 +43,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase,
+          diag.mixinSubtypeOfBaseIsNotBase,
           53,
           1,
           text:
@@ -71,7 +71,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase,
+          diag.mixinSubtypeOfBaseIsNotBase,
           22,
           1,
           text:
@@ -89,7 +89,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfBaseIsNotBase,
+          diag.mixinSubtypeOfBaseIsNotBase,
           22,
           1,
           text:
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_final_is_not_base_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_final_is_not_base_test.dart
index 2b20e0f..d370274 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_final_is_not_base_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_subtype_of_final_is_not_base_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -24,7 +24,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase,
+          diag.mixinSubtypeOfFinalIsNotBase,
           23,
           1,
           text:
@@ -43,7 +43,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase,
+          diag.mixinSubtypeOfFinalIsNotBase,
           54,
           1,
           text:
@@ -71,7 +71,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.mixinSubtypeOfFinalIsNotBase,
+          diag.mixinSubtypeOfFinalIsNotBase,
           23,
           1,
           text:
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
index 1f02d53..fc5a25c 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,13 +22,7 @@
 import 'dart:math' deferred as math;
 mixin M on math.Random {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintDeferredClass,
-          48,
-          11,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintDeferredClass, 48, 11)],
     );
 
     var node = findNode.singleMixinOnClause;
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
index 8a8427f..ecb97c4 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,13 +28,7 @@
 // @dart = 2.16
 mixin M on Enum {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
-          27,
-          4,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintDisallowedClass, 27, 4)],
     );
 
     var node = findNode.singleMixinOnClause;
@@ -63,11 +57,7 @@
 
     await assertErrorsInFile2(a, []);
     await assertErrorsInFile2(b, [
-      error(
-        CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
-        37,
-        3,
-      ),
+      error(diag.mixinSuperClassConstraintDisallowedClass, 37, 3),
     ]);
   }
 
@@ -76,13 +66,7 @@
       r'''
 mixin M on int {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintDisallowedClass,
-          11,
-          3,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintDisallowedClass, 11, 3)],
     );
 
     var node = findNode.singleMixinOnClause;
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 731f08c..e55736c2 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,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,13 +21,7 @@
       r'''
 mixin M on dynamic {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintNonInterface,
-          11,
-          7,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintNonInterface, 11, 7)],
     );
 
     var node = findNode.singleMixinOnClause;
@@ -49,13 +42,7 @@
 enum E { v }
 mixin M on E {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintNonInterface,
-          24,
-          1,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintNonInterface, 24, 1)],
     );
 
     var node = findNode.singleMixinOnClause;
@@ -76,13 +63,7 @@
 extension type A(int it) {}
 mixin M on A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintNonInterface,
-          39,
-          1,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintNonInterface, 39, 1)],
     );
 
     var node = findNode.singleMixinOnClause;
@@ -102,13 +83,7 @@
       '''
 mixin M on Never {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintNonInterface,
-          11,
-          5,
-        ),
-      ],
+      [error(diag.mixinSuperClassConstraintNonInterface, 11, 5)],
     );
 
     var node = findNode.singleMixinOnClause;
@@ -129,12 +104,8 @@
 mixin M on void {}
 ''',
       [
-        error(ParserErrorCode.expectedTypeName, 11, 4),
-        error(
-          CompileTimeErrorCode.mixinSuperClassConstraintNonInterface,
-          11,
-          4,
-        ),
+        error(diag.expectedTypeName, 11, 4),
+        error(diag.mixinSuperClassConstraintNonInterface, 11, 4),
       ],
     );
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart
index cb2f271..12b28e9 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_with_non_class_superclass_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 mixin B {}
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.mixinWithNonClassSuperclass, 38, 1)],
+      [error(diag.mixinWithNonClassSuperclass, 38, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
 mixin B {}
 class C = A with B;
 ''',
-      [error(CompileTimeErrorCode.mixinWithNonClassSuperclass, 32, 1)],
+      [error(diag.mixinWithNonClassSuperclass, 32, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/mixins_super_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixins_super_class_test.dart
index 3bf709b..1f95fd5 100644
--- a/pkg/analyzer/test/src/diagnostics/mixins_super_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixins_super_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 mixin class A {}
 class B extends A with A {}
 ''',
-      [error(CompileTimeErrorCode.mixinsSuperClass, 40, 1)],
+      [error(diag.mixinsSuperClass, 40, 1)],
     );
   }
 
@@ -32,7 +32,7 @@
 typedef B = A;
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.mixinsSuperClass, 55, 1)],
+      [error(diag.mixinsSuperClass, 55, 1)],
     );
   }
 
@@ -42,7 +42,7 @@
 mixin class A {}
 class B = A with A;
 ''',
-      [error(CompileTimeErrorCode.mixinsSuperClass, 34, 1)],
+      [error(diag.mixinsSuperClass, 34, 1)],
     );
   }
 
@@ -53,7 +53,7 @@
 typedef B = A;
 class C = A with B;
 ''',
-      [error(CompileTimeErrorCode.mixinsSuperClass, 49, 1)],
+      [error(diag.mixinsSuperClass, 49, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/multiple_combinators_test.dart b/pkg/analyzer/test/src/diagnostics/multiple_combinators_test.dart
index ed54c2a..cea1c97 100644
--- a/pkg/analyzer/test/src/diagnostics/multiple_combinators_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/multiple_combinators_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
       r'''
 export 'dart:async' hide Future, Stream hide Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 20, 31)],
+      [error(diag.multipleCombinators, 20, 31)],
     );
   }
 
@@ -36,7 +36,7 @@
       r'''
 export 'dart:async' hide Future, Stream show Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 20, 31)],
+      [error(diag.multipleCombinators, 20, 31)],
     );
   }
 
@@ -57,7 +57,7 @@
       r'''
 export 'dart:async' show Future, Stream hide Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 20, 31)],
+      [error(diag.multipleCombinators, 20, 31)],
     );
   }
 
@@ -66,7 +66,7 @@
       r'''
 export 'dart:async' show Future, Stream show Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 20, 31)],
+      [error(diag.multipleCombinators, 20, 31)],
     );
   }
 }
@@ -86,7 +86,7 @@
 //ignore: unused_import
 import 'dart:async' hide Future, Stream hide Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 44, 31)],
+      [error(diag.multipleCombinators, 44, 31)],
     );
   }
 
@@ -96,7 +96,7 @@
 //ignore: unused_import
 import 'dart:async' hide Future, Stream show Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 44, 31)],
+      [error(diag.multipleCombinators, 44, 31)],
     );
   }
 
@@ -113,7 +113,7 @@
 //ignore: unused_import
 import 'dart:async' as async hide Future, Stream show Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 53, 31)],
+      [error(diag.multipleCombinators, 53, 31)],
     );
   }
 
@@ -130,7 +130,7 @@
 //ignore: unused_import
 import 'dart:async' show Future, Stream hide Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 44, 31)],
+      [error(diag.multipleCombinators, 44, 31)],
     );
   }
 
@@ -140,7 +140,7 @@
 //ignore: unused_import
 import 'dart:async' show Future, Stream show Stream;
 ''',
-      [error(WarningCode.multipleCombinators, 44, 31)],
+      [error(diag.multipleCombinators, 44, 31)],
     );
   }
 }
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 1f36709..9358b7b 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,13 +25,7 @@
   A.b() {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.multipleRedirectingConstructorInvocations,
-          28,
-          8,
-        ),
-      ],
+      [error(diag.multipleRedirectingConstructorInvocations, 28, 8)],
     );
   }
 
@@ -45,13 +39,7 @@
   const E.bar();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.multipleRedirectingConstructorInvocations,
-          40,
-          10,
-        ),
-      ],
+      [error(diag.multipleRedirectingConstructorInvocations, 40, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart b/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart
index 2dfe343..ecb5262 100644
--- a/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
   B() : super(), super() {}
 }
 ''',
-      [error(CompileTimeErrorCode.multipleSuperInitializers, 48, 7)],
+      [error(diag.multipleSuperInitializers, 48, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/must_be_a_native_function_type_test.dart b/pkg/analyzer/test/src/diagnostics/must_be_a_native_function_type_test.dart
index 810bfcd..5e9983f 100644
--- a/pkg/analyzer/test/src/diagnostics/must_be_a_native_function_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/must_be_a_native_function_type_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   }
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 110, 1)],
+      [error(diag.mustBeANativeFunctionType, 110, 1)],
     );
   }
 
@@ -40,7 +40,7 @@
   lib.lookupFunction<S, F>('g');
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 137, 1)],
+      [error(diag.mustBeANativeFunctionType, 137, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
   lib.lookupFunction<S, F>('g');
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 173, 1)],
+      [error(diag.mustBeANativeFunctionType, 173, 1)],
     );
   }
 
@@ -104,7 +104,7 @@
   }
 }
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 152, 1)],
+      [error(diag.mustBeANativeFunctionType, 152, 1)],
     );
   }
 
@@ -151,7 +151,7 @@
     isLeaf:true
   );
 ''',
-      [error(FfiCode.mustBeASubtype, 187, 40)],
+      [error(diag.mustBeASubtype, 187, 40)],
     );
   }
 
@@ -169,7 +169,7 @@
     isLeaf:true
   );
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 121, 68)],
+      [error(diag.mustBeANativeFunctionType, 121, 68)],
     );
   }
 
@@ -187,7 +187,7 @@
     isLeaf:true
   );
 ''',
-      [error(FfiCode.mustBeANativeFunctionType, 121, 60)],
+      [error(diag.mustBeANativeFunctionType, 121, 60)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/must_be_a_subtype_test.dart b/pkg/analyzer/test/src/diagnostics/must_be_a_subtype_test.dart
index 6225e5f..8083afb 100644
--- a/pkg/analyzer/test/src/diagnostics/must_be_a_subtype_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/must_be_a_subtype_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   Pointer.fromFunction<T>(f, 5);
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 122, 1)],
+      [error(diag.mustBeASubtype, 122, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   Pointer.fromFunction<T>(f, '');
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 115, 2)],
+      [error(diag.mustBeASubtype, 115, 2)],
     );
   }
 
@@ -87,7 +87,7 @@
   }
 }
 ''',
-      [error(FfiCode.mustBeASubtype, 166, 1)],
+      [error(diag.mustBeASubtype, 166, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart b/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart
index 0ea2986..3cb24f3 100644
--- a/pkg/analyzer/test/src/diagnostics/must_be_immutable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/must_be_immutable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   int x = 0;
 }
 ''',
-      [error(WarningCode.mustBeImmutable, 50, 1)],
+      [error(diag.mustBeImmutable, 50, 1)],
     );
   }
 
@@ -43,7 +43,7 @@
   int x = 0;
 }
 ''',
-      [error(WarningCode.mustBeImmutable, 50, 1)],
+      [error(diag.mustBeImmutable, 50, 1)],
     );
   }
 
@@ -57,7 +57,7 @@
   int x = 0;
 }
 ''',
-      [error(WarningCode.mustBeImmutable, 61, 1)],
+      [error(diag.mustBeImmutable, 61, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
 }
 class C extends A with B {}
 ''',
-      [error(WarningCode.mustBeImmutable, 86, 1)],
+      [error(diag.mustBeImmutable, 86, 1)],
     );
   }
 
@@ -97,7 +97,7 @@
 }
 class C = A with B;
 ''',
-      [error(WarningCode.mustBeImmutable, 86, 1)],
+      [error(diag.mustBeImmutable, 86, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
 @immutable
 class C = A with B;
 ''',
-      [error(WarningCode.mustBeImmutable, 86, 1)],
+      [error(diag.mustBeImmutable, 86, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart b/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart
index 9ab3728..e99253f 100644
--- a/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/must_call_super_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -50,7 +50,7 @@
   void a() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 115, 1)],
+      [error(diag.mustCallSuper, 115, 1)],
     );
   }
 
@@ -95,7 +95,7 @@
   void a() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 123, 1)],
+      [error(diag.mustCallSuper, 123, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
   void a<T>() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 118, 1)],
+      [error(diag.mustCallSuper, 118, 1)],
     );
   }
 
@@ -129,7 +129,7 @@
   int get a => 2;
 }
 ''',
-      [error(WarningCode.mustCallSuper, 122, 1)],
+      [error(diag.mustCallSuper, 122, 1)],
     );
   }
 
@@ -169,7 +169,7 @@
   }
 }
 ''',
-      [error(WarningCode.mustCallSuper, 135, 3)],
+      [error(diag.mustCallSuper, 135, 3)],
     );
   }
 
@@ -186,7 +186,7 @@
   operator ==(Object o) => o is B;
 }
 ''',
-      [error(WarningCode.mustCallSuper, 140, 2)],
+      [error(diag.mustCallSuper, 140, 2)],
     );
   }
 
@@ -217,7 +217,7 @@
   set a(int value) {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 122, 1)],
+      [error(diag.mustCallSuper, 122, 1)],
     );
   }
 
@@ -255,7 +255,7 @@
   }
 }
 ''',
-      [error(WarningCode.mustCallSuper, 131, 3)],
+      [error(diag.mustCallSuper, 131, 3)],
     );
   }
 
@@ -286,7 +286,7 @@
   void a() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 120, 1)],
+      [error(diag.mustCallSuper, 120, 1)],
     );
   }
 
@@ -303,7 +303,7 @@
   void set a(int value) {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 137, 1)],
+      [error(diag.mustCallSuper, 137, 1)],
     );
   }
 
@@ -321,7 +321,7 @@
   void a() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 133, 1)],
+      [error(diag.mustCallSuper, 133, 1)],
     );
   }
 
@@ -344,7 +344,7 @@
   void a() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 181, 1)],
+      [error(diag.mustCallSuper, 181, 1)],
     );
   }
 
@@ -362,7 +362,7 @@
   void b() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 156, 1)],
+      [error(diag.mustCallSuper, 156, 1)],
     );
   }
 
@@ -379,7 +379,7 @@
   void a() {}
 }
 ''',
-      [error(WarningCode.mustCallSuper, 110, 1)],
+      [error(diag.mustCallSuper, 110, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/native_clause_in_non_sdk_code_test.dart b/pkg/analyzer/test/src/diagnostics/native_clause_in_non_sdk_code_test.dart
index 3649cea..7925802 100644
--- a/pkg/analyzer/test/src/diagnostics/native_clause_in_non_sdk_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/native_clause_in_non_sdk_code_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.
 
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 class A native 'string' {}
 ''',
-      [error(ParserErrorCode.nativeClauseInNonSdkCode, 8, 15)],
+      [error(diag.nativeClauseInNonSdkCode, 8, 15)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/native_function_body_in_non_sdk_code_test.dart b/pkg/analyzer/test/src/diagnostics/native_function_body_in_non_sdk_code_test.dart
index 3e33251..d77e2fe 100644
--- a/pkg/analyzer/test/src/diagnostics/native_function_body_in_non_sdk_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/native_function_body_in_non_sdk_code_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.
 
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 int m(a) native 'string';
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 9, 16)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 9, 16)],
     );
   }
 
@@ -31,7 +31,7 @@
   static int m(a) native 'string';
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 28, 16)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 28, 16)],
     );
   }
 
@@ -42,7 +42,7 @@
   static int m(a) native 'string';
 }
 ''',
-      [error(ParserErrorCode.nativeFunctionBodyInNonSdkCode, 28, 16)],
+      [error(diag.nativeFunctionBodyInNonSdkCode, 28, 16)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
index 8142392..f804446 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   new F();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 49, 1)],
+      [error(diag.newWithNonType, 49, 1)],
     );
 
     var node = findNode.namedType('F()');
@@ -48,7 +48,7 @@
 }
 lib.B b = lib.B();
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 47, 1)],
+      [error(diag.newWithNonType, 47, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   new A();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 28, 1)],
+      [error(diag.newWithNonType, 28, 1)],
     );
 
     var node = findNode.namedType('A()');
@@ -80,7 +80,7 @@
   new A<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 28, 1)],
+      [error(diag.newWithNonType, 28, 1)],
     );
 
     var node = findNode.namedType('A<int>()');
@@ -110,7 +110,7 @@
   new C.x.y();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 36, 3)],
+      [error(diag.newWithNonType, 36, 3)],
     );
   }
 
@@ -121,7 +121,7 @@
   new T();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 22, 1)],
+      [error(diag.newWithNonType, 22, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
index 6161d93..7a33b97 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +33,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithUndefinedConstructorDefault,
+          diag.newWithUndefinedConstructorDefault,
           38,
           1,
           messageContains: ["'A'"],
@@ -53,7 +52,7 @@
   A();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructorDefault, 34, 1)],
+      [error(diag.newWithUndefinedConstructorDefault, 34, 1)],
     );
   }
 
@@ -73,7 +72,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithUndefinedConstructorDefault,
+          diag.newWithUndefinedConstructorDefault,
           41,
           6,
           messageContains: ["'lib1.A'"],
@@ -92,7 +91,7 @@
   A.new();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructorDefault, 36, 3)],
+      [error(diag.newWithUndefinedConstructorDefault, 36, 3)],
     );
   }
 
@@ -141,7 +140,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithUndefinedConstructor,
+          diag.newWithUndefinedConstructor,
           35,
           4,
           messageContains: ["class 'A'", "named 'name'"],
@@ -165,7 +164,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.newWithUndefinedConstructor,
+          diag.newWithUndefinedConstructor,
           47,
           4,
           messageContains: ["class 'lib1.A'", "named 'name'"],
@@ -187,7 +186,7 @@
   new A._named();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructor, 36, 6)],
+      [error(diag.newWithUndefinedConstructor, 36, 6)],
     );
   }
 
@@ -204,7 +203,7 @@
   new A._named();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructor, 36, 6)],
+      [error(diag.newWithUndefinedConstructor, 36, 6)],
     );
   }
 
@@ -221,7 +220,7 @@
   new A<int>._named();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithUndefinedConstructor, 41, 6)],
+      [error(diag.newWithUndefinedConstructor, 41, 6)],
     );
   }
 }
@@ -240,7 +239,7 @@
   A();
 }
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 14, 3)],
+      [error(diag.experimentNotEnabled, 14, 3)],
     );
   }
 
@@ -254,7 +253,7 @@
   A.new();
 }
 ''',
-      [error(ParserErrorCode.experimentNotEnabled, 37, 3)],
+      [error(diag.experimentNotEnabled, 37, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/no_annotation_constructor_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/no_annotation_constructor_arguments_test.dart
index fef14e8..e0f7230 100644
--- a/pkg/analyzer/test/src/diagnostics/no_annotation_constructor_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/no_annotation_constructor_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.noAnnotationConstructorArguments, 25, 2)],
+      [error(diag.noAnnotationConstructorArguments, 25, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/no_combined_super_signature_test.dart b/pkg/analyzer/test/src/diagnostics/no_combined_super_signature_test.dart
index 968af94..0958922 100644
--- a/pkg/analyzer/test/src/diagnostics/no_combined_super_signature_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/no_combined_super_signature_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   foo(num x);
 }
 ''',
-      [error(CompileTimeErrorCode.noCombinedSuperSignature, 122, 3)],
+      [error(diag.noCombinedSuperSignature, 122, 3)],
     );
   }
 
@@ -54,7 +54,7 @@
   Never foo(x);
 }
 ''',
-      [error(CompileTimeErrorCode.noCombinedSuperSignature, 126, 3)],
+      [error(diag.noCombinedSuperSignature, 126, 3)],
     );
   }
 
@@ -73,7 +73,7 @@
   foo(a);
 }
 ''',
-      [error(CompileTimeErrorCode.noCombinedSuperSignature, 123, 3)],
+      [error(diag.noCombinedSuperSignature, 123, 3)],
     );
   }
 }
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 6cde7b5..2c76819 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -114,13 +114,7 @@
   B();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.implicitSuperInitializerMissingArguments,
-          58,
-          1,
-        ),
-      ],
+      [error(diag.implicitSuperInitializerMissingArguments, 58, 1)],
     );
   }
 
@@ -132,7 +126,7 @@
 }
 class B extends A {}
 ''',
-      [error(CompileTimeErrorCode.noDefaultSuperConstructorImplicit, 42, 1)],
+      [error(diag.noDefaultSuperConstructorImplicit, 42, 1)],
     );
   }
 
@@ -157,13 +151,7 @@
   B({required super.a});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.implicitSuperInitializerMissingArguments,
-          75,
-          1,
-        ),
-      ],
+      [error(diag.implicitSuperInitializerMissingArguments, 75, 1)],
     );
   }
 
@@ -199,13 +187,7 @@
   B();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.implicitSuperInitializerMissingArguments,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.implicitSuperInitializerMissingArguments, 42, 1)],
     );
   }
 
@@ -228,7 +210,7 @@
 }
 class B extends A {}
 ''',
-      [error(CompileTimeErrorCode.noDefaultSuperConstructorImplicit, 26, 1)],
+      [error(diag.noDefaultSuperConstructorImplicit, 26, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/no_generative_constructors_in_superclass_test.dart b/pkg/analyzer/test/src/diagnostics/no_generative_constructors_in_superclass_test.dart
index fc7e190..d8aca4f 100644
--- a/pkg/analyzer/test/src/diagnostics/no_generative_constructors_in_superclass_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/no_generative_constructors_in_superclass_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   B() : super();
 }
 ''',
-      [error(CompileTimeErrorCode.noGenerativeConstructorsInSuperclass, 55, 1)],
+      [error(diag.noGenerativeConstructorsInSuperclass, 55, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
   factory B.second() => throw '';
 }
 ''',
-      [error(CompileTimeErrorCode.noGenerativeConstructorsInSuperclass, 55, 1)],
+      [error(diag.noGenerativeConstructorsInSuperclass, 55, 1)],
     );
   }
 
@@ -78,7 +78,7 @@
   B();
 }
 ''',
-      [error(CompileTimeErrorCode.noGenerativeConstructorsInSuperclass, 55, 1)],
+      [error(diag.noGenerativeConstructorsInSuperclass, 55, 1)],
     );
   }
 
@@ -91,7 +91,7 @@
 class B extends A {
 }
 ''',
-      [error(CompileTimeErrorCode.noGenerativeConstructorsInSuperclass, 55, 1)],
+      [error(diag.noGenerativeConstructorsInSuperclass, 55, 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 cb35413..e132c9e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,13 +35,7 @@
 }
 class B implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          51,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 51, 1)],
     );
   }
 
@@ -55,13 +49,7 @@
   int get x => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          45,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 45, 1)],
     );
   }
 
@@ -85,13 +73,7 @@
 }
 class B implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
-          45,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberTwo, 45, 1)],
     );
   }
 
@@ -105,13 +87,7 @@
   void set x(int value) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          45,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 45, 1)],
     );
   }
 
@@ -164,13 +140,7 @@
 
 class D extends C {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 42, 1)],
     );
   }
 
@@ -222,13 +192,7 @@
   v;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          38,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 38, 1)],
     );
   }
 
@@ -243,13 +207,7 @@
   v;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          33,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 33, 1)],
     );
   }
 
@@ -264,13 +222,7 @@
   v;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 34, 1)],
     );
   }
 
@@ -285,13 +237,7 @@
   v;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          32,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 32, 1)],
     );
   }
 
@@ -306,13 +252,7 @@
   v;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          38,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 38, 1)],
     );
   }
 
@@ -327,13 +267,7 @@
   v;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 36, 1)],
     );
   }
 
@@ -356,13 +290,7 @@
 }
 class B implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 42, 1)],
     );
   }
 
@@ -376,13 +304,7 @@
   int get x => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 36, 1)],
     );
   }
 
@@ -406,13 +328,7 @@
 }
 class B implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberTwo, 36, 1)],
     );
   }
 
@@ -426,13 +342,7 @@
   void set x(int value) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 36, 1)],
     );
   }
 
@@ -449,13 +359,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFivePlus,
-          62,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberFivePlus, 62, 1)],
     );
   }
 
@@ -471,13 +375,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberFour,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberFour, 55, 1)],
     );
   }
 
@@ -581,13 +479,7 @@
 }
 class B = A with M implements I;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          87,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 87, 1)],
     );
   }
 
@@ -602,13 +494,7 @@
 abstract class A {}
 class B = A with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          67,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 67, 1)],
     );
   }
 
@@ -623,13 +509,7 @@
 }
 class B = A with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          58,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 58, 1)],
     );
   }
 
@@ -642,13 +522,7 @@
 class C implements I {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 42, 1)],
     );
   }
 
@@ -661,13 +535,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          40,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 40, 1)],
     );
   }
 
@@ -680,13 +548,7 @@
 class C implements I {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 28, 1)],
     );
   }
 
@@ -700,13 +562,7 @@
   noSuchMethod(v);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 28, 1)],
     );
   }
 
@@ -734,13 +590,7 @@
 class C implements I {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 55, 1)],
     );
   }
 
@@ -753,13 +603,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          35,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 35, 1)],
     );
   }
 
@@ -776,13 +620,7 @@
 class C implements A, B {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          89,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 89, 1)],
     );
   }
 
@@ -795,13 +633,7 @@
 abstract class B implements A { get g1 => 1; }
 class C extends Object with B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          103,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 103, 1)],
     );
   }
 
@@ -814,13 +646,7 @@
 abstract class B implements A { m1() => 1; }
 class C extends Object with B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          97,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 97, 1)],
     );
   }
 
@@ -833,13 +659,7 @@
 abstract class B implements A { set s1(v) {} }
 class C extends Object with B {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          109,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 109, 1)],
     );
   }
 
@@ -856,13 +676,7 @@
 class B extends A implements I {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          71,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 71, 1)],
     );
   }
 
@@ -880,13 +694,7 @@
   get field => 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          77,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 77, 1)],
     );
   }
 
@@ -899,13 +707,7 @@
 class C implements I {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 36, 1)],
     );
   }
 
@@ -918,13 +720,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 43, 1)],
     );
   }
 
@@ -941,13 +737,7 @@
 class C extends B {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          84,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 84, 1)],
     );
   }
 
@@ -962,13 +752,7 @@
   set v(_) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 27, 1)],
     );
   }
 
@@ -983,13 +767,7 @@
   get v => 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberOne, 27, 1)],
     );
   }
 
@@ -1015,13 +793,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberThree,
-          48,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberThree, 48, 1)],
     );
   }
 
@@ -1035,13 +807,7 @@
 class C extends A {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
-          41,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberTwo, 41, 1)],
     );
   }
 
@@ -1055,13 +821,7 @@
 class C implements I {
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberTwo,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.nonAbstractClassInheritsAbstractMemberTwo, 27, 1)],
     );
   }
 }
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 2af9815..5af4a54 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_condition_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       '''
 f() { return 3 ? 2 : 1; }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 13, 1)],
+      [error(diag.nonBoolCondition, 13, 1)],
     );
   }
 
@@ -30,7 +30,7 @@
       '''
 f() { return [1, 2, 3] ? 2 : 1; }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 13, 9)],
+      [error(diag.nonBoolCondition, 13, 9)],
     );
   }
 
@@ -39,7 +39,7 @@
       '''
 f(Object o) { return o ? 2 : 1; }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 21, 1)],
+      [error(diag.nonBoolCondition, 21, 1)],
     );
   }
 
@@ -49,7 +49,7 @@
 const dynamic c = 2;
 const x = [1, if (c) 2 else 3, 4];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 39, 1)],
+      [error(diag.nonBoolCondition, 39, 1)],
     );
   }
 
@@ -58,7 +58,7 @@
       r'''
 const x = [1, if (1) 2 else 3, 4];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 18, 1)],
+      [error(diag.nonBoolCondition, 18, 1)],
     );
   }
 
@@ -69,7 +69,7 @@
   do {} while (3);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 21, 1)],
+      [error(diag.nonBoolCondition, 21, 1)],
     );
   }
 
@@ -80,7 +80,7 @@
   do {} while ([1, 2, 3]);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 29, 9)],
+      [error(diag.nonBoolCondition, 29, 9)],
     );
   }
 
@@ -91,7 +91,7 @@
   do {} while (o);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 29, 1)],
+      [error(diag.nonBoolCondition, 29, 1)],
     );
   }
 
@@ -103,7 +103,7 @@
   for (;3;) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 14, 1)],
+      [error(diag.nonBoolCondition, 14, 1)],
     );
   }
 
@@ -116,8 +116,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(CompileTimeErrorCode.nonBoolCondition, 24, 1),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.nonBoolCondition, 24, 1),
       ],
     );
   }
@@ -131,8 +131,8 @@
   for (i = 0; 3;) {}
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 12, 1),
-        error(CompileTimeErrorCode.nonBoolCondition, 29, 1),
+        error(diag.unusedLocalVariable, 12, 1),
+        error(diag.nonBoolCondition, 29, 1),
       ],
     );
   }
@@ -144,7 +144,7 @@
   for (;[1, 2, 3];) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 14, 9)],
+      [error(diag.nonBoolCondition, 14, 9)],
     );
   }
 
@@ -155,7 +155,7 @@
   for (;o;) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 22, 1)],
+      [error(diag.nonBoolCondition, 22, 1)],
     );
   }
 
@@ -164,7 +164,7 @@
       '''
 var v = [for (; 0;) 1];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 16, 1)],
+      [error(diag.nonBoolCondition, 16, 1)],
     );
   }
 
@@ -175,7 +175,7 @@
   if (0 case _ when 1) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 31, 1)],
+      [error(diag.nonBoolCondition, 31, 1)],
     );
   }
 
@@ -186,7 +186,7 @@
   if (3) return 2; else return 1;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 12, 1)],
+      [error(diag.nonBoolCondition, 12, 1)],
     );
   }
 
@@ -197,7 +197,7 @@
   if ([1, 2, 3]) return 2; else return 1;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 12, 9)],
+      [error(diag.nonBoolCondition, 12, 9)],
     );
   }
 
@@ -208,7 +208,7 @@
   if (o) return 2; else return 1;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 20, 1)],
+      [error(diag.nonBoolCondition, 20, 1)],
     );
   }
 
@@ -218,7 +218,7 @@
 const dynamic nonBool = null;
 const c = const {if (nonBool) 'a' : 1};
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 51, 7)],
+      [error(diag.nonBoolCondition, 51, 7)],
     );
   }
 
@@ -229,7 +229,7 @@
   if (a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 23, 1)],
+      [error(diag.nonBoolCondition, 23, 1)],
     );
   }
 
@@ -239,7 +239,7 @@
 const dynamic nonBool = 'a';
 const c = const {if (nonBool) 3};
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 50, 7)],
+      [error(diag.nonBoolCondition, 50, 7)],
     );
   }
 
@@ -248,7 +248,7 @@
       '''
 var v = [if (3) 1];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 13, 1)],
+      [error(diag.nonBoolCondition, 13, 1)],
     );
   }
 
@@ -257,7 +257,7 @@
       '''
 var v = [if ([1, 2, 3]) 'x'];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 13, 9)],
+      [error(diag.nonBoolCondition, 13, 9)],
     );
   }
 
@@ -267,7 +267,7 @@
 final o = Object();
 var v = [if (o) 'x'];
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 33, 1)],
+      [error(diag.nonBoolCondition, 33, 1)],
     );
   }
 
@@ -278,7 +278,7 @@
   a ? 0 : 1;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 19, 1)],
+      [error(diag.nonBoolCondition, 19, 1)],
     );
   }
 
@@ -289,7 +289,7 @@
   while (3) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 15, 1)],
+      [error(diag.nonBoolCondition, 15, 1)],
     );
   }
 
@@ -300,7 +300,7 @@
   while ([1, 2, 3]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 15, 9)],
+      [error(diag.nonBoolCondition, 15, 9)],
     );
   }
 
@@ -311,7 +311,7 @@
   while (o) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 23, 1)],
+      [error(diag.nonBoolCondition, 23, 1)],
     );
   }
 }
@@ -326,7 +326,7 @@
   <int, int>{if (c) 0: 0};
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 37, 1)],
+      [error(diag.nonBoolCondition, 37, 1)],
     );
   }
 
@@ -337,7 +337,7 @@
   <int>{if (c) 0};
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolCondition, 32, 1)],
+      [error(diag.nonBoolCondition, 32, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_expression_test.dart
index d471691..d80ad63 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   assert(makeAssertion);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolExpression, 45, 13)],
+      [error(diag.nonBoolExpression, 45, 13)],
     );
   }
 
@@ -36,7 +36,7 @@
   assert(makeAssertion);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolExpression, 41, 13)],
+      [error(diag.nonBoolExpression, 41, 13)],
     );
   }
 
@@ -47,7 +47,7 @@
   assert(0);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolExpression, 15, 1)],
+      [error(diag.nonBoolExpression, 15, 1)],
     );
   }
 }
@@ -62,7 +62,7 @@
   assert(a);
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolExpression, 29, 1)],
+      [error(diag.nonBoolExpression, 29, 1)],
     );
   }
 }
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 f135b3f..c293e8b 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   !42;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolNegationExpression, 9, 2)],
+      [error(diag.nonBoolNegationExpression, 9, 2)],
     );
   }
 
@@ -34,7 +34,7 @@
   ![1, 2, 3];
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolNegationExpression, 9, 9)],
+      [error(diag.nonBoolNegationExpression, 9, 9)],
     );
   }
 
@@ -45,7 +45,7 @@
   !o;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolNegationExpression, 17, 1)],
+      [error(diag.nonBoolNegationExpression, 17, 1)],
     );
   }
 
@@ -56,7 +56,7 @@
   !x;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolNegationExpression, 20, 1)],
+      [error(diag.nonBoolNegationExpression, 20, 1)],
     );
   }
 }
@@ -72,7 +72,7 @@
   !a;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolNegationExpression, 23, 1)],
+      [error(diag.nonBoolNegationExpression, 23, 1)],
     );
   }
 }
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 85d8055..2414778 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_operand_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   return left && right;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 40, 4)],
+      [error(diag.nonBoolOperand, 40, 4)],
     );
   }
 
@@ -34,7 +34,7 @@
   new Object() && true;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 11, 12)],
+      [error(diag.nonBoolOperand, 11, 12)],
     );
   }
 
@@ -45,7 +45,7 @@
   return left && right;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 46, 4)],
+      [error(diag.nonBoolOperand, 46, 4)],
     );
   }
 
@@ -56,7 +56,7 @@
   return left && right;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 43, 4)],
+      [error(diag.nonBoolOperand, 43, 4)],
     );
   }
 
@@ -68,7 +68,7 @@
   if(x && true) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 21, 1)],
+      [error(diag.nonBoolOperand, 21, 1)],
     );
   }
 
@@ -79,7 +79,7 @@
   return left && right;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 51, 5)],
+      [error(diag.nonBoolOperand, 51, 5)],
     );
   }
 
@@ -90,7 +90,7 @@
   return left || right;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 46, 4)],
+      [error(diag.nonBoolOperand, 46, 4)],
     );
   }
 
@@ -102,7 +102,7 @@
   if(x || false) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 21, 1)],
+      [error(diag.nonBoolOperand, 21, 1)],
     );
   }
 
@@ -113,7 +113,7 @@
   return left || right;
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 51, 5)],
+      [error(diag.nonBoolOperand, 51, 5)],
     );
   }
 }
@@ -128,7 +128,7 @@
   if(a && true) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonBoolOperand, 25, 1)],
+      [error(diag.nonBoolOperand, 25, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart
index d1f513e..1d5b31d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,8 +33,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 92, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 92, 11),
       ],
     );
   }
@@ -54,9 +54,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 86, 1),
-        error(WarningCode.experimentalMemberUse, 121, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 86, 1),
+        error(diag.experimentalMemberUse, 121, 11),
       ],
     );
   }
@@ -78,8 +78,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 137, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 137, 11),
       ],
     );
   }
@@ -100,8 +100,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 89, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 89, 11),
       ],
     );
   }
@@ -118,8 +118,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 83, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 83, 11),
       ],
     );
   }
@@ -138,9 +138,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 77, 1),
-        error(WarningCode.experimentalMemberUse, 97, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 77, 1),
+        error(diag.experimentalMemberUse, 97, 11),
       ],
     );
   }
@@ -156,8 +156,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 74, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 74, 11),
       ],
     );
   }
@@ -173,9 +173,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 79, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 106, 1),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 79, 11),
+        error(diag.nonConstArgumentForConstParameter, 106, 1),
       ],
     );
   }
@@ -190,8 +190,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 66, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 66, 11),
       ],
     );
   }
@@ -206,9 +206,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 66, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 99, 1),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 66, 11),
+        error(diag.nonConstArgumentForConstParameter, 99, 1),
       ],
     );
   }
@@ -230,9 +230,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 142, 11),
-        error(WarningCode.experimentalMemberUse, 162, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 142, 11),
+        error(diag.experimentalMemberUse, 162, 11),
       ],
     );
   }
@@ -253,10 +253,10 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 74, 3),
-        error(WarningCode.experimentalMemberUse, 127, 11),
-        error(WarningCode.experimentalMemberUse, 147, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 74, 3),
+        error(diag.experimentalMemberUse, 127, 11),
+        error(diag.experimentalMemberUse, 147, 11),
       ],
     );
   }
@@ -275,9 +275,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 82, 5),
-        error(WarningCode.experimentalMemberUse, 106, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 82, 5),
+        error(diag.experimentalMemberUse, 106, 11),
       ],
     );
   }
@@ -293,8 +293,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 72, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 72, 11),
       ],
     );
   }
@@ -310,9 +310,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 77, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 103, 1),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 77, 11),
+        error(diag.nonConstArgumentForConstParameter, 103, 1),
       ],
     );
   }
@@ -329,8 +329,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 96, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 96, 11),
       ],
     );
   }
@@ -349,9 +349,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 84, 1),
-        error(WarningCode.experimentalMemberUse, 110, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 84, 1),
+        error(diag.experimentalMemberUse, 110, 11),
       ],
     );
   }
@@ -368,8 +368,8 @@
 void g({@mustBeConst int? value}) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 100, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 100, 11),
       ],
     );
   }
@@ -384,8 +384,8 @@
 void g({@mustBeConst int? value}) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 78, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 78, 11),
       ],
     );
   }
@@ -402,9 +402,9 @@
 void g({@mustBeConst int? value}) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 79, 8),
-        error(WarningCode.experimentalMemberUse, 100, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 79, 8),
+        error(diag.experimentalMemberUse, 100, 11),
       ],
     );
   }
@@ -421,8 +421,8 @@
 void g([@mustBeConst int? value]) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 93, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 93, 11),
       ],
     );
   }
@@ -437,8 +437,8 @@
 void g([@mustBeConst int? value]) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 78, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 78, 11),
       ],
     );
   }
@@ -455,9 +455,9 @@
 void g([@mustBeConst int? value]) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 79, 1),
-        error(WarningCode.experimentalMemberUse, 93, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 79, 1),
+        error(diag.experimentalMemberUse, 93, 11),
       ],
     );
   }
@@ -473,9 +473,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 66, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 110, 1),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 66, 11),
+        error(diag.nonConstArgumentForConstParameter, 110, 1),
       ],
     );
   }
@@ -499,8 +499,8 @@
 var a = A.named(v);
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 66, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 66, 11),
       ],
     );
   }
@@ -515,8 +515,8 @@
 void g({@mustBeConst required int value}) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 86, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 86, 11),
       ],
     );
   }
@@ -533,8 +533,8 @@
 void g({@mustBeConst required int value}) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 100, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 100, 11),
       ],
     );
   }
@@ -551,8 +551,8 @@
 void g(@mustBeConst int value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 92, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 92, 11),
       ],
     );
   }
@@ -569,8 +569,8 @@
 void g(@mustBeConst List<int> value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 96, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 96, 11),
       ],
     );
   }
@@ -585,9 +585,9 @@
 void g(@mustBeConst int value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 74, 5),
-        error(WarningCode.experimentalMemberUse, 91, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 74, 5),
+        error(diag.experimentalMemberUse, 91, 11),
       ],
     );
   }
@@ -604,8 +604,8 @@
 void g(@mustBeConst Map<String, int> value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 109, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 109, 11),
       ],
     );
   }
@@ -622,9 +622,9 @@
 void g(@mustBeConst int value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 79, 1),
-        error(WarningCode.experimentalMemberUse, 92, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 79, 1),
+        error(diag.experimentalMemberUse, 92, 11),
       ],
     );
   }
@@ -642,9 +642,9 @@
 set i(@mustBeConst int? value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 83, 1),
-        error(WarningCode.experimentalMemberUse, 96, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 83, 1),
+        error(diag.experimentalMemberUse, 96, 11),
       ],
     );
   }
@@ -661,8 +661,8 @@
 set i(@mustBeConst int? value) {}
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 81, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 81, 11),
       ],
     );
   }
@@ -686,8 +686,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 115, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 115, 11),
       ],
     );
   }
@@ -711,8 +711,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 174, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 174, 11),
       ],
     );
   }
@@ -736,9 +736,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 81, 1),
-        error(WarningCode.experimentalMemberUse, 167, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.nonConstArgumentForConstParameter, 81, 1),
+        error(diag.experimentalMemberUse, 167, 11),
       ],
     );
   }
@@ -757,9 +757,9 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 66, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 128, 1),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 66, 11),
+        error(diag.nonConstArgumentForConstParameter, 128, 1),
       ],
     );
   }
@@ -779,8 +779,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 66, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 66, 11),
       ],
     );
   }
@@ -797,8 +797,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 79, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 79, 11),
       ],
     );
   }
@@ -816,8 +816,8 @@
 }
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 79, 11),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 79, 11),
       ],
     );
   }
@@ -836,9 +836,9 @@
 void g(int x) => T(x);
 ''',
       [
-        error(WarningCode.experimentalMemberUse, 37, 11),
-        error(WarningCode.experimentalMemberUse, 82, 11),
-        error(WarningCode.nonConstArgumentForConstParameter, 124, 1),
+        error(diag.experimentalMemberUse, 37, 11),
+        error(diag.experimentalMemberUse, 82, 11),
+        error(diag.nonConstArgumentForConstParameter, 124, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart
index c963fbb..47d5576 100644
--- a/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_const_call_to_literal_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -74,7 +74,7 @@
 }
 A a = .named();
 ''',
-      [error(WarningCode.nonConstCallToLiteralConstructor, 81, 8)],
+      [error(diag.nonConstCallToLiteralConstructor, 81, 8)],
     );
   }
 
@@ -88,7 +88,7 @@
 }
 A a = .new();
 ''',
-      [error(WarningCode.nonConstCallToLiteralConstructor, 75, 6)],
+      [error(diag.nonConstCallToLiteralConstructor, 75, 6)],
     );
   }
 
@@ -102,7 +102,7 @@
 }
 var a = A.named();
 ''',
-      [error(WarningCode.nonConstCallToLiteralConstructor, 83, 9)],
+      [error(diag.nonConstCallToLiteralConstructor, 83, 9)],
     );
   }
 
@@ -116,7 +116,7 @@
 }
 var a = A();
 ''',
-      [error(WarningCode.nonConstCallToLiteralConstructor, 77, 3)],
+      [error(diag.nonConstCallToLiteralConstructor, 77, 3)],
     );
   }
 
@@ -141,7 +141,7 @@
 }
 var a = new A();
 ''',
-      [error(WarningCode.nonConstCallToLiteralConstructorUsingNew, 77, 7)],
+      [error(diag.nonConstCallToLiteralConstructorUsingNew, 77, 7)],
     );
   }
 
@@ -155,7 +155,7 @@
 }
 E e = E.zero();
 ''',
-      [error(WarningCode.nonConstCallToLiteralConstructor, 112, 8)],
+      [error(diag.nonConstCallToLiteralConstructor, 112, 8)],
     );
   }
 }
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
index 5db5ca6..96018a9 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
   E.named();
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstGenerativeEnumConstructor, 24, 7)],
+      [error(diag.nonConstGenerativeEnumConstructor, 24, 7)],
     );
   }
 
@@ -44,7 +44,7 @@
   E();
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstGenerativeEnumConstructor, 16, 1)],
+      [error(diag.nonConstGenerativeEnumConstructor, 16, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_const_map_as_expression_statement_test.dart b/pkg/analyzer/test/src/diagnostics/non_const_map_as_expression_statement_test.dart
index 3200357..e8bf4da 100644
--- a/pkg/analyzer/test/src/diagnostics/non_const_map_as_expression_statement_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_const_map_as_expression_statement_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -29,7 +29,7 @@
     await resolveTestFile();
     expect(
       result.diagnostics[0].diagnosticCode,
-      CompileTimeErrorCode.nonConstMapAsExpressionStatement,
+      diag.nonConstMapAsExpressionStatement,
     );
   }
 
@@ -46,7 +46,7 @@
     await resolveTestFile();
     expect(
       result.diagnostics[0].diagnosticCode,
-      CompileTimeErrorCode.nonConstMapAsExpressionStatement,
+      diag.nonConstMapAsExpressionStatement,
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_annotation_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_annotation_constructor_test.dart
index a5d50dc..ed8024f 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_annotation_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_annotation_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantAnnotationConstructor, 29, 12)],
+      [error(diag.nonConstantAnnotationConstructor, 29, 12)],
     );
   }
 
@@ -39,7 +39,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantAnnotationConstructor, 21, 4)],
+      [error(diag.nonConstantAnnotationConstructor, 21, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart
index e860842..9f1008b 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_from_deferred_library_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -40,7 +40,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.patternConstantFromDeferredLibrary, 81, 1)],
+      [error(diag.patternConstantFromDeferredLibrary, 81, 1)],
     );
   }
 }
@@ -70,13 +70,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantCaseExpressionFromDeferredLibrary,
-          74,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantCaseExpressionFromDeferredLibrary, 74, 1)],
     );
   }
 }
@@ -94,10 +88,9 @@
     switch (_variant) {
       case _Variant.nullSafe:
         expectedDiagnosticCode =
-            CompileTimeErrorCode.nonConstantCaseExpressionFromDeferredLibrary;
+            diag.nonConstantCaseExpressionFromDeferredLibrary;
       case _Variant.patterns:
-        expectedDiagnosticCode =
-            CompileTimeErrorCode.patternConstantFromDeferredLibrary;
+        expectedDiagnosticCode = diag.patternConstantFromDeferredLibrary;
     }
 
     await assertErrorsInCode(
@@ -124,10 +117,9 @@
     switch (_variant) {
       case _Variant.nullSafe:
         expectedDiagnosticCode =
-            CompileTimeErrorCode.nonConstantCaseExpressionFromDeferredLibrary;
+            diag.nonConstantCaseExpressionFromDeferredLibrary;
       case _Variant.patterns:
-        expectedDiagnosticCode =
-            CompileTimeErrorCode.patternConstantFromDeferredLibrary;
+        expectedDiagnosticCode = diag.patternConstantFromDeferredLibrary;
     }
 
     await assertErrorsInCode(
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
index 26a6ddd..182a865 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantCaseExpression, 51, 1)],
+      [error(diag.nonConstantCaseExpression, 51, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart
index 63b6a1a..c975122 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +27,7 @@
 import 'lib1.dart' deferred as a;
 f({x = a.V}) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantDefaultValueFromDeferredLibrary,
-          57,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantDefaultValueFromDeferredLibrary, 57, 1)],
     );
   }
 
@@ -48,13 +42,7 @@
 import 'lib1.dart' deferred as a;
 f({x = a.V + 1}) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantDefaultValueFromDeferredLibrary,
-          57,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantDefaultValueFromDeferredLibrary, 57, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
index 44939c2..5d1416c 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_default_value_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A({x = y}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 32, 1)],
+      [error(diag.nonConstantDefaultValue, 32, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
   A([x = y]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 32, 1)],
+      [error(diag.nonConstantDefaultValue, 32, 1)],
     );
   }
 
@@ -48,7 +48,7 @@
 
 void f([A a = .new()]) {}
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 40, 6)],
+      [error(diag.nonConstantDefaultValue, 40, 6)],
     );
   }
 
@@ -77,7 +77,7 @@
 int y = 0;
 f({x = y}) {}
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 18, 1)],
+      [error(diag.nonConstantDefaultValue, 18, 1)],
     );
   }
 
@@ -122,7 +122,7 @@
       r'''
 void f({x = (a: 0, b: [1])}) {}
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 22, 3)],
+      [error(diag.nonConstantDefaultValue, 22, 3)],
     );
   }
 
@@ -143,7 +143,7 @@
       r'''
 void f({x = (0, [1])}) {}
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 16, 3)],
+      [error(diag.nonConstantDefaultValue, 16, 3)],
     );
   }
 
@@ -158,7 +158,7 @@
       r'''
 void f({int x = X}) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 16, 1)],
+      [error(diag.undefinedIdentifier, 16, 1)],
     );
   }
 
@@ -168,7 +168,7 @@
 int y = 0;
 f([x = y]) {}
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 18, 1)],
+      [error(diag.nonConstantDefaultValue, 18, 1)],
     );
   }
 
@@ -177,7 +177,7 @@
       r'''
 void f([int x = X]) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 16, 1)],
+      [error(diag.undefinedIdentifier, 16, 1)],
     );
   }
 
@@ -189,7 +189,7 @@
   m({x = y}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 32, 1)],
+      [error(diag.nonConstantDefaultValue, 32, 1)],
     );
   }
 
@@ -201,7 +201,7 @@
   m([x = y]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantDefaultValue, 32, 1)],
+      [error(diag.nonConstantDefaultValue, 32, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
index 01d885d..5965d58 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,13 +28,7 @@
 const cond = true;
 var v = const [ if (cond) 'a' else a.c ];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary,
-          0,
-          0,
-        ),
-      ],
+      [error(diag.nonConstantListElementFromDeferredLibrary, 0, 0)],
     );
   }
 
@@ -48,13 +42,7 @@
 const cond = true;
 var v = const [ if (cond) a.c ];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary,
-          81,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantListElementFromDeferredLibrary, 81, 1)],
     );
   }
 
@@ -67,13 +55,7 @@
 import 'lib1.dart' deferred as a;
 var v = const [a.c];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary,
-          51,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantListElementFromDeferredLibrary, 51, 1)],
     );
   }
 
@@ -86,13 +68,7 @@
 import 'lib1.dart' deferred as a;
 var v = const [a.c + 1];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantListElementFromDeferredLibrary,
-          51,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantListElementFromDeferredLibrary, 51, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart
index dda1d6cd..200fcc8 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 final dynamic a = 0;
 var v = const [if (1 < 0) 0 else a];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 54, 1)],
+      [error(diag.nonConstantListElement, 54, 1)],
     );
   }
 
@@ -34,7 +34,7 @@
 final dynamic a = 0;
 var v = const [if (1 < 0) a else 0];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 47, 1)],
+      [error(diag.nonConstantListElement, 47, 1)],
     );
   }
 
@@ -44,7 +44,7 @@
 final dynamic a = 0;
 var v = const [if (1 > 0) 0 else a];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 54, 1)],
+      [error(diag.nonConstantListElement, 54, 1)],
     );
   }
 
@@ -54,7 +54,7 @@
 final dynamic a = 0;
 var v = const [if (1 > 0) a else 0];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 47, 1)],
+      [error(diag.nonConstantListElement, 47, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
 final dynamic a = 0;
 var v = const [if (1 < 0) a];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 47, 1)],
+      [error(diag.nonConstantListElement, 47, 1)],
     );
   }
 
@@ -88,7 +88,7 @@
 final dynamic a = 0;
 var v = const [if (1 > 0) a];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 47, 1)],
+      [error(diag.nonConstantListElement, 47, 1)],
     );
   }
 
@@ -98,7 +98,7 @@
 final dynamic a = 0;
 var v = const [a];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 36, 1)],
+      [error(diag.nonConstantListElement, 36, 1)],
     );
   }
 
@@ -108,7 +108,7 @@
 final dynamic a = 0;
 var v = const [a + 1];
 ''',
-      [error(CompileTimeErrorCode.nonConstantListElement, 36, 1)],
+      [error(diag.nonConstantListElement, 36, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
index 4c54ae6..be00436 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -53,7 +53,7 @@
   const {1: null, if (notConst) null: null};
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapElement, 60, 8)],
+      [error(diag.nonConstantMapElement, 60, 8)],
     );
   }
 
@@ -65,7 +65,7 @@
   const {1: null, if (isTrue) null: null else null: null};
 }
 ''',
-      [error(WarningCode.deadCode, 83, 10)],
+      [error(diag.deadCode, 83, 10)],
     );
   }
 
@@ -85,7 +85,7 @@
   const {1: null, ...notConst};
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapElement, 56, 8)],
+      [error(diag.nonConstantMapElement, 56, 8)],
     );
   }
 }
@@ -102,7 +102,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 < 0) 0: 0 else a: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 67, 1)],
+      [error(diag.nonConstantMapKey, 67, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 < 0) a: 0 else 0: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 57, 1)],
+      [error(diag.nonConstantMapKey, 57, 1)],
     );
   }
 
@@ -122,7 +122,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 > 0) 0: 0 else a: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 67, 1)],
+      [error(diag.nonConstantMapKey, 67, 1)],
     );
   }
 
@@ -132,7 +132,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 > 0) a: 0 else 0: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 57, 1)],
+      [error(diag.nonConstantMapKey, 57, 1)],
     );
   }
 
@@ -149,7 +149,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 < 0) a: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 57, 1)],
+      [error(diag.nonConstantMapKey, 57, 1)],
     );
   }
 
@@ -166,7 +166,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 > 0) a: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 57, 1)],
+      [error(diag.nonConstantMapKey, 57, 1)],
     );
   }
 
@@ -176,7 +176,7 @@
 final dynamic a = 0;
 var v = const <int, int>{a: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 46, 1)],
+      [error(diag.nonConstantMapKey, 46, 1)],
     );
   }
 
@@ -199,7 +199,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 < 0) 0: 0 else 0: a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 70, 1)],
+      [error(diag.nonConstantMapValue, 70, 1)],
     );
   }
 
@@ -209,7 +209,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 < 0) 0: a else 0: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 60, 1)],
+      [error(diag.nonConstantMapValue, 60, 1)],
     );
   }
 
@@ -219,7 +219,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 > 0) 0: 0 else 0: a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 70, 1)],
+      [error(diag.nonConstantMapValue, 70, 1)],
     );
   }
 
@@ -229,7 +229,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 > 0) 0: a else 0: 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 60, 1)],
+      [error(diag.nonConstantMapValue, 60, 1)],
     );
   }
 
@@ -246,7 +246,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 < 0) 0: a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 60, 1)],
+      [error(diag.nonConstantMapValue, 60, 1)],
     );
   }
 
@@ -263,7 +263,7 @@
 final dynamic a = 0;
 var v = const <int, int>{if (1 > 0) 0: a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 60, 1)],
+      [error(diag.nonConstantMapValue, 60, 1)],
     );
   }
 
@@ -273,7 +273,7 @@
 final dynamic a = 0;
 var v = const <int, int>{0: a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 49, 1)],
+      [error(diag.nonConstantMapValue, 49, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
index 61f5354..c328e99 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
 const cond = true;
 var v = const { if (cond) 0: 1 else a.c : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary, 0, 0)],
+      [error(diag.nonConstantMapKeyFromDeferredLibrary, 0, 0)],
     );
   }
 
@@ -43,7 +43,7 @@
 const cond = true;
 var v = const { if (cond) a.c : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary, 81, 1)],
+      [error(diag.nonConstantMapKeyFromDeferredLibrary, 81, 1)],
     );
   }
 
@@ -55,7 +55,7 @@
 import 'lib1.dart' deferred as a;
 var v = const {a.c : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary, 51, 1)],
+      [error(diag.nonConstantMapKeyFromDeferredLibrary, 51, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
 import 'lib1.dart' deferred as a;
 var v = const {a.c + 1 : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKeyFromDeferredLibrary, 51, 1)],
+      [error(diag.nonConstantMapKeyFromDeferredLibrary, 51, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
index cb1cfe0..37b2da4 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 const cond = true;
 var v = const {if (cond) 0: 1 else a : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 75, 1)],
+      [error(diag.nonConstantMapKey, 75, 1)],
     );
   }
 
@@ -36,7 +36,7 @@
 const cond = true;
 var v = const {if (cond) a : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 65, 1)],
+      [error(diag.nonConstantMapKey, 65, 1)],
     );
   }
 
@@ -46,7 +46,7 @@
 final dynamic a = 0;
 var v = const {a : 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapKey, 36, 1)],
+      [error(diag.nonConstantMapKey, 36, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_pattern_key_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_pattern_key_test.dart
index 1a3fca1..ffd8a0a 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_pattern_key_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_pattern_key_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (x case {a: 0}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapPatternKey, 33, 1)],
+      [error(diag.nonConstantMapPatternKey, 33, 1)],
     );
   }
 
@@ -37,7 +37,7 @@
   const A();
 }
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapPatternKey, 26, 3)],
+      [error(diag.nonConstantMapPatternKey, 26, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
index 02a7c50..dc9292c 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,13 +31,7 @@
 const cond = true;
 var v = const { if (cond) 'a': 'b' else 'c' : a.c};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary,
-          99,
-          3,
-        ),
-      ],
+      [error(diag.nonConstantMapValueFromDeferredLibrary, 99, 3)],
     );
   }
 
@@ -50,13 +44,7 @@
 const cond = true;
 var v = const { if (cond) 'a' : a.c};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary,
-          87,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantMapValueFromDeferredLibrary, 87, 1)],
     );
   }
 
@@ -68,13 +56,7 @@
 import 'lib1.dart' deferred as a;
 var v = const {'a' : a.c};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary,
-          57,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantMapValueFromDeferredLibrary, 57, 1)],
     );
   }
 
@@ -86,13 +68,7 @@
 import 'lib1.dart' deferred as a;
 var v = const {'a' : a.c + 1};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantMapValueFromDeferredLibrary,
-          57,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantMapValueFromDeferredLibrary, 57, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
index d930e72..fbd181c 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 const cond = true;
 var v = const {if (cond) 'a': 'b', 'c' : a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 81, 1)],
+      [error(diag.nonConstantMapValue, 81, 1)],
     );
   }
 
@@ -36,7 +36,7 @@
 const cond = true;
 var v = const {if (cond) 'a' : a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 71, 1)],
+      [error(diag.nonConstantMapValue, 71, 1)],
     );
   }
 
@@ -46,7 +46,7 @@
 final dynamic a = 0;
 var v = const {'a' : a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantMapValue, 42, 1)],
+      [error(diag.nonConstantMapValue, 42, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_record_field_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_record_field_from_deferred_library_test.dart
index 3306c3c..7bbd835 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_record_field_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_record_field_from_deferred_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,13 +25,7 @@
 import 'lib1.dart' deferred as a;
 var v = const (a.c, );
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantRecordFieldFromDeferredLibrary,
-          51,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantRecordFieldFromDeferredLibrary, 51, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_record_field_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_record_field_test.dart
index f3260d5..12fedf8 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_record_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_record_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 final a = 0;
 var v = const (a: a);
 ''',
-      [error(CompileTimeErrorCode.nonConstantRecordField, 31, 1)],
+      [error(diag.nonConstantRecordField, 31, 1)],
     );
   }
 
@@ -31,7 +31,7 @@
 final a = 0;
 var v = const (a, );
 ''',
-      [error(CompileTimeErrorCode.nonConstantRecordField, 28, 1)],
+      [error(diag.nonConstantRecordField, 28, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_relational_pattern_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_relational_pattern_expression_test.dart
index 13df5f1..782a4ac 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_relational_pattern_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_relational_pattern_expression_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -66,13 +66,7 @@
   if (x case > a) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantRelationalPatternExpression, 34, 1)],
     );
   }
 
@@ -85,13 +79,7 @@
   if (x case > a) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.nonConstantRelationalPatternExpression,
-          41,
-          1,
-        ),
-      ],
+      [error(diag.nonConstantRelationalPatternExpression, 41, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
index d063757..dfc9bf3 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 final dynamic a = 0;
 var v = const <int>{if (1 < 0) 0 else a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 59, 1)],
+      [error(diag.nonConstantSetElement, 59, 1)],
     );
   }
 
@@ -34,7 +34,7 @@
 final dynamic a = 0;
 var v = const <int>{if (1 < 0) a else 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 52, 1)],
+      [error(diag.nonConstantSetElement, 52, 1)],
     );
   }
 
@@ -44,7 +44,7 @@
 final dynamic a = 0;
 var v = const <int>{if (1 > 0) 0 else a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 59, 1)],
+      [error(diag.nonConstantSetElement, 59, 1)],
     );
   }
 
@@ -54,7 +54,7 @@
 final dynamic a = 0;
 var v = const <int>{if (1 > 0) a else 0};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 52, 1)],
+      [error(diag.nonConstantSetElement, 52, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
 final dynamic a = 0;
 var v = const <int>{if (1 < 0) a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 52, 1)],
+      [error(diag.nonConstantSetElement, 52, 1)],
     );
   }
 
@@ -88,7 +88,7 @@
 final dynamic a = 0;
 var v = const <int>{if (1 > 0) a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 52, 1)],
+      [error(diag.nonConstantSetElement, 52, 1)],
     );
   }
 
@@ -98,7 +98,7 @@
 f(a) {
   return const {a};
 }''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 23, 1)],
+      [error(diag.nonConstantSetElement, 23, 1)],
     );
   }
 
@@ -108,7 +108,7 @@
 final Set x = {};
 var v = const {...x};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 36, 1)],
+      [error(diag.nonConstantSetElement, 36, 1)],
     );
   }
 
@@ -118,7 +118,7 @@
 final dynamic a = 0;
 var v = const <int>{a};
 ''',
-      [error(CompileTimeErrorCode.nonConstantSetElement, 41, 1)],
+      [error(diag.nonConstantSetElement, 41, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_type_argument_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_type_argument_test.dart
index d677525..6fbf427 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_type_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_type_argument_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   }
 }
 ''',
-      [error(FfiCode.nonConstantTypeArgument, 147, 1)],
+      [error(diag.nonConstantTypeArgument, 147, 1)],
     );
   }
 }
@@ -75,7 +75,7 @@
 T genericRef<T extends Struct>(Pointer<T> p) =>
     p.ref;
 ''',
-      [error(FfiCode.nonConstantTypeArgument, 72, 5)],
+      [error(diag.nonConstantTypeArgument, 72, 5)],
     );
   }
 
@@ -120,7 +120,7 @@
 T genericRefWithFinalizer<T extends Struct>(Pointer<T> p) =>
     p.refWithFinalizer(nullptr);
 ''',
-      [error(FfiCode.nonConstantTypeArgument, 85, 27)],
+      [error(diag.nonConstantTypeArgument, 85, 27)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_covariant_type_parameter_position_in_representation_type_test.dart b/pkg/analyzer/test/src/diagnostics/non_covariant_type_parameter_position_in_representation_type_test.dart
index da4038c..c54aa84 100644
--- a/pkg/analyzer/test/src/diagnostics/non_covariant_type_parameter_position_in_representation_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_covariant_type_parameter_position_in_representation_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,8 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .nonCovariantTypeParameterPositionInRepresentationType,
+          diag.nonCovariantTypeParameterPositionInRepresentationType,
           17,
           1,
         ),
@@ -47,8 +46,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .nonCovariantTypeParameterPositionInRepresentationType,
+          diag.nonCovariantTypeParameterPositionInRepresentationType,
           17,
           1,
         ),
diff --git a/pkg/analyzer/test/src/diagnostics/non_exhaustive_switch_test.dart b/pkg/analyzer/test/src/diagnostics/non_exhaustive_switch_test.dart
index c260e36..f99d597 100644
--- a/pkg/analyzer/test/src/diagnostics/non_exhaustive_switch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_exhaustive_switch_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchExpression, 28, 6)],
+      [error(diag.nonExhaustiveSwitchExpression, 28, 6)],
     );
   }
 
@@ -78,7 +78,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.nonExhaustiveSwitchExpression,
+          diag.nonExhaustiveSwitchExpression,
           44,
           6,
           correctionContains: 'E.a',
@@ -92,7 +92,117 @@
       r'''
 void f(Unresolved x) => switch (x) {};
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 7, 10)],
+      [error(diag.undefinedClass, 7, 10)],
+    );
+  }
+
+  test_private_enum() async {
+    newFile(join(testPackageLibPath, 'private_enum.dart'), r'''
+enum _E { a, b }
+_E e() => _E.a;
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_enum.dart';
+
+Object f() {
+  return switch (e()) {
+  };
+}
+''',
+      [error(diag.nonExhaustiveSwitchExpressionPrivate, 51, 6)],
+    );
+  }
+
+  test_private_enum_sameLibrary() async {
+    await assertErrorsInCode(
+      '''
+enum _E { a, b }
+
+Object f(_E e) {
+  return switch (e) {
+  };
+}
+''',
+      [
+        error(diag.unusedField, 10, 1),
+        error(diag.unusedField, 13, 1),
+        error(diag.nonExhaustiveSwitchExpression, 44, 6),
+      ],
+    );
+  }
+
+  test_private_enumConstant() async {
+    newFile(join(testPackageLibPath, 'private_enum.dart'), r'''
+enum E { a, b, _c }
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_enum.dart';
+
+Object f(E e) {
+  return switch (e) {
+    E.a => 0,
+  };
+}
+''',
+      [error(diag.nonExhaustiveSwitchExpression, 54, 6)],
+    );
+  }
+
+  test_private_enumConstant_only() async {
+    newFile(join(testPackageLibPath, 'private_enum.dart'), r'''
+enum E { a, b, _c }
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_enum.dart';
+
+Object f(E e) {
+  return switch (e) {
+    E.a => 0,
+    E.b => 1,
+  };
+}
+''',
+      [error(diag.nonExhaustiveSwitchExpressionPrivate, 54, 6)],
+    );
+  }
+
+  test_private_enumConstant_sameLibrary() async {
+    await assertErrorsInCode(
+      '''
+enum E { a, b, _c }
+Object f(E e) {
+  return switch (e) {
+    E.a => 0,
+    E.b => 1,
+  };
+}
+''',
+      [
+        error(diag.unusedField, 15, 2),
+        error(diag.nonExhaustiveSwitchExpression, 45, 6),
+      ],
+    );
+  }
+
+  test_private_sealed() async {
+    newFile(join(testPackageLibPath, 'private_sealed.dart'), r'''
+sealed class _A {}
+class B extends _A {}
+_A a() => B();
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_sealed.dart';
+
+Object f() {
+  return switch (a()) {
+  };
+}
+''',
+      [error(diag.nonExhaustiveSwitchExpression, 53, 6)],
     );
   }
 }
@@ -109,7 +219,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 19, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 19, 6)],
     );
   }
 
@@ -147,8 +257,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 19, 6),
-        error(WarningCode.patternNeverMatchesValueType, 41, 3),
+        error(diag.nonExhaustiveSwitchStatement, 19, 6),
+        error(diag.patternNeverMatchesValueType, 41, 3),
       ],
     );
   }
@@ -175,7 +285,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 20, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 20, 6)],
     );
   }
 
@@ -206,7 +316,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 35, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 35, 6)],
     );
   }
 
@@ -243,7 +353,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.nonExhaustiveSwitchStatement,
+          diag.nonExhaustiveSwitchStatement,
           35,
           6,
           correctionContains: 'E.a',
@@ -284,8 +394,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 11, 2),
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 19, 2),
+        error(diag.recursiveCompileTimeConstant, 11, 2),
+        error(diag.recursiveCompileTimeConstant, 19, 2),
       ],
     );
   }
@@ -297,7 +407,7 @@
   switch (x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 19, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 19, 6)],
     );
   }
 
@@ -340,7 +450,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 77, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 77, 6)],
     );
   }
 
@@ -394,7 +504,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 74, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 74, 6)],
     );
   }
 
@@ -428,7 +538,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 117, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 117, 6)],
     );
   }
 
@@ -451,7 +561,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 92, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 92, 6)],
     );
   }
 
@@ -492,7 +602,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 85, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 85, 6)],
     );
   }
 
@@ -527,7 +637,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 78, 10)],
+      [error(diag.undefinedIdentifier, 78, 10)],
     );
   }
 
@@ -544,7 +654,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 78, 10)],
+      [error(diag.undefinedClass, 78, 10)],
     );
   }
 
@@ -558,7 +668,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 32, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 32, 6)],
     );
   }
 
@@ -586,7 +696,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 40, 6)],
+      [error(diag.nonExhaustiveSwitchStatement, 40, 6)],
     );
   }
 
@@ -611,7 +721,7 @@
   switch (x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 7, 10)],
+      [error(diag.undefinedClass, 7, 10)],
     );
   }
 
@@ -625,4 +735,80 @@
 }
 ''');
   }
+
+  test_private_enum() async {
+    newFile(join(testPackageLibPath, 'private_enum.dart'), r'''
+enum _E { a, b }
+_E e() => _E.a;
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_enum.dart';
+
+void f() {
+  switch (e()) {
+  }
+}
+''',
+      [error(diag.nonExhaustiveSwitchStatementPrivate, 42, 6)],
+    );
+  }
+
+  test_private_enumConstant() async {
+    newFile(join(testPackageLibPath, 'private_enum.dart'), r'''
+enum E { a, b, _c }
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_enum.dart';
+
+void f(E e) {
+  switch (e) {
+    case E.a:
+      break;
+  }
+}
+''',
+      [error(diag.nonExhaustiveSwitchStatement, 45, 6)],
+    );
+  }
+
+  test_private_enumConstant_only() async {
+    newFile(join(testPackageLibPath, 'private_enum.dart'), r'''
+enum E { a, b, _c }
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_enum.dart';
+
+void f(E e) {
+  switch (e) {
+    case E.a:
+    case E.b:
+      break;
+  }
+}
+''',
+      [error(diag.nonExhaustiveSwitchStatementPrivate, 45, 6)],
+    );
+  }
+
+  test_private_sealed() async {
+    newFile(join(testPackageLibPath, 'private_sealed.dart'), r'''
+sealed class _A {}
+class B extends _A {}
+_A a() => B();
+''');
+    await assertErrorsInCode(
+      '''
+import 'private_sealed.dart';
+
+Object f() {
+  switch (a()) {
+  }
+}
+''',
+      [error(diag.nonExhaustiveSwitchStatement, 46, 6)],
+    );
+  }
 }
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
index 82c17a5..38a6fad 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   int foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.nonFinalFieldInEnum, 20, 3)],
+      [error(diag.nonFinalFieldInEnum, 20, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_generative_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/non_generative_constructor_test.dart
index 9a336c0..5f3ee26 100644
--- a/pkg/analyzer/test/src/diagnostics/non_generative_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_generative_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   B() : super.named();
 }
 ''',
-      [error(CompileTimeErrorCode.nonGenerativeConstructor, 90, 13)],
+      [error(diag.nonGenerativeConstructor, 90, 13)],
     );
   }
 
@@ -65,7 +65,7 @@
   B();
 }
 ''',
-      [error(CompileTimeErrorCode.nonGenerativeConstructor, 73, 1)],
+      [error(diag.nonGenerativeConstructor, 73, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_generative_implicit_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/non_generative_implicit_constructor_test.dart
index 6e85cf1..4c74a20 100644
--- a/pkg/analyzer/test/src/diagnostics/non_generative_implicit_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_generative_implicit_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -43,7 +43,7 @@
 class B extends A {
 }
 ''',
-      [error(CompileTimeErrorCode.nonGenerativeImplicitConstructor, 57, 1)],
+      [error(diag.nonGenerativeImplicitConstructor, 57, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart b/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart
index 0f5c7bf..55a6d97 100644
--- a/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_native_function_type_argument_to_pointer_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +30,7 @@
       [
         // This changed from a method to a extension method, uses Dart semantics
         // instead of manual check now.
-        error(CompileTimeErrorCode.undefinedMethod, 98, 10),
+        error(diag.undefinedMethod, 98, 10),
       ],
     );
   }
@@ -48,7 +47,7 @@
   }
 }
 ''',
-      [error(FfiCode.nonNativeFunctionTypeArgumentToPointer, 165, 1)],
+      [error(diag.nonNativeFunctionTypeArgumentToPointer, 165, 1)],
     );
   }
 
@@ -63,7 +62,7 @@
   }
 }
 ''',
-      [error(FfiCode.nonConstantTypeArgument, 125, 1)],
+      [error(diag.nonConstantTypeArgument, 125, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_nullable_equals_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/non_nullable_equals_parameter_test.dart
index 4321937..fddea8d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_nullable_equals_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_nullable_equals_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   bool operator ==(dynamic other) => false;
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 38, 2)],
+      [error(diag.nonNullableEqualsParameter, 38, 2)],
     );
   }
 
@@ -40,8 +40,8 @@
 }
 ''',
       [
-        error(WarningCode.nonNullableEqualsParameter, 38, 2),
-        error(WarningCode.nonNullableEqualsParameter, 116, 2),
+        error(diag.nonNullableEqualsParameter, 38, 2),
+        error(diag.nonNullableEqualsParameter, 116, 2),
       ],
     );
   }
@@ -72,7 +72,7 @@
   bool operator ==(Object? other) => false;
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 38, 2)],
+      [error(diag.nonNullableEqualsParameter, 38, 2)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_positive_array_dimension_test.dart b/pkg/analyzer/test/src/diagnostics/non_positive_array_dimension_test.dart
index 48ae51e..54c01cb 100644
--- a/pkg/analyzer/test/src/diagnostics/non_positive_array_dimension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_positive_array_dimension_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   external Array<Uint8> a0;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 74, 2)],
+      [error(diag.nonPositiveArrayDimension, 74, 2)],
     );
   }
 
@@ -39,7 +39,7 @@
   external Array<Array<Array<Array<Array<Array<Uint8>>>>>> a0;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 83, 2)],
+      [error(diag.nonPositiveArrayDimension, 83, 2)],
     );
   }
 
@@ -64,7 +64,7 @@
   external Array<Uint8> a0;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 74, 1)],
+      [error(diag.nonPositiveArrayDimension, 74, 1)],
     );
   }
 
@@ -78,7 +78,7 @@
   external Array<Uint8> a0;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 67, 3)],
+      [error(diag.nonPositiveArrayDimension, 67, 3)],
     );
   }
 
@@ -103,7 +103,7 @@
   external Array<Uint8> a0;
 }
 ''',
-      [error(FfiCode.nonPositiveArrayDimension, 67, 1)],
+      [error(diag.nonPositiveArrayDimension, 67, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_redirecting_generative_constructor_with_primary_test.dart b/pkg/analyzer/test/src/diagnostics/non_redirecting_generative_constructor_with_primary_test.dart
new file mode 100644
index 0000000..a58429d
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/non_redirecting_generative_constructor_with_primary_test.dart
@@ -0,0 +1,119 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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/diagnostic/diagnostic.dart' as diag;
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/context_collection_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(NonRedirectingGenerativeConstructorWithPrimaryTest);
+  });
+}
+
+@reflectiveTest
+class NonRedirectingGenerativeConstructorWithPrimaryTest
+    extends PubPackageResolutionTest {
+  test_class_factory() async {
+    await assertNoErrorsInCode(r'''
+class C(int x) {
+  factory C.named() => C(0);
+}
+''');
+  }
+
+  test_class_generative_nonRedirecting() async {
+    await assertErrorsInCode(
+      r'''
+class C(int x) {
+  C.named();
+}
+''',
+      [error(diag.nonRedirectingGenerativeConstructorWithPrimary, 19, 7)],
+    );
+  }
+
+  test_class_generative_redirectingToNonPrimary() async {
+    await assertErrorsInCode(
+      r'''
+class C(int x) {
+  C.named1() : this.named2();
+  C.named2();
+}
+''',
+      [error(diag.nonRedirectingGenerativeConstructorWithPrimary, 49, 8)],
+    );
+  }
+
+  test_class_generative_redirectingToPrimary() async {
+    await assertNoErrorsInCode(r'''
+class C(int x) {
+  C.named() : this(0);
+}
+''');
+  }
+
+  test_class_noPrimaryConstructor() async {
+    await assertNoErrorsInCode(r'''
+class C {
+  C.named();
+}
+''');
+  }
+
+  test_enum_factory() async {
+    await assertNoErrorsInCode(r'''
+enum E(int x) {
+  v(0);
+  factory E.named() => E.v;
+}
+''');
+  }
+
+  test_enum_generative_nonRedirecting() async {
+    await assertErrorsInCode(
+      r'''
+enum E(int x) {
+  v(0);
+  const E.named();
+}
+''',
+      [
+        error(diag.nonRedirectingGenerativeConstructorWithPrimary, 32, 7),
+        error(diag.unusedElement, 34, 5),
+      ],
+    );
+  }
+
+  test_enum_generative_redirectingToPrimary() async {
+    await assertErrorsInCode(
+      r'''
+enum E(int x) {
+  v(0);
+  const E.named(int x) : this(x);
+}
+''',
+      [error(diag.unusedElement, 34, 5)],
+    );
+  }
+
+  test_enum_noPrimaryConstructor() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  const E();
+}
+''');
+  }
+
+  test_extensionType_generative_nonRedirecting() async {
+    // Extension types can have non-redirecting generative constructors.
+    await assertNoErrorsInCode(r'''
+extension type E(int x) {
+  E.named(this.x);
+}
+''');
+  }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart b/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart
index 14e6368..e2c9a3b 100644
--- a/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_sized_type_argument_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   external Array<Void> a0;
 }
 ''',
-      [error(FfiCode.nonSizedTypeArgument, 80, 4)],
+      [error(diag.nonSizedTypeArgument, 80, 4)],
     );
   }
 
@@ -39,7 +39,7 @@
   external Array<Void> a0;
 }
 ''',
-      [error(FfiCode.nonSizedTypeArgument, 79, 4)],
+      [error(diag.nonSizedTypeArgument, 79, 4)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart b/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart
index c464b67..33fb597 100644
--- a/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_type_as_type_argument_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   );
 }
 ''',
-      [error(CompileTimeErrorCode.nonTypeAsTypeArgument, 62, 1)],
+      [error(diag.nonTypeAsTypeArgument, 62, 1)],
     );
   }
 
@@ -45,7 +45,7 @@
 class B<E> {}
 f(B<A> b) {}
 ''',
-      [error(CompileTimeErrorCode.nonTypeAsTypeArgument, 29, 1)],
+      [error(diag.nonTypeAsTypeArgument, 29, 1)],
     );
   }
 
@@ -55,7 +55,7 @@
 class B<E> {}
 f(B<A> b) {}
 ''',
-      [error(CompileTimeErrorCode.nonTypeAsTypeArgument, 18, 1)],
+      [error(diag.nonTypeAsTypeArgument, 18, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
index 0e4ba15..b153d75 100644
--- a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -85,7 +85,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonTypeInCatchClause, 21, 1)],
+      [error(diag.nonTypeInCatchClause, 21, 1)],
     );
   }
 
@@ -100,7 +100,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.nonTypeInCatchClause, 32, 1)],
+      [error(diag.nonTypeInCatchClause, 32, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart b/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart
index c36d399..e8a2bb6 100644
--- a/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 class A {
   int operator []=(a, b) { return a; }
 }''',
-      [error(CompileTimeErrorCode.nonVoidReturnForOperator, 12, 3)],
+      [error(diag.nonVoidReturnForOperator, 12, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart b/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart
index 90cc03e..60874d5 100644
--- a/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 int set x(int v) {
   return 42;
 }''',
-      [error(CompileTimeErrorCode.nonVoidReturnForSetter, 0, 3)],
+      [error(diag.nonVoidReturnForSetter, 0, 3)],
     );
   }
 
@@ -45,7 +45,7 @@
     return 42;
   }
 }''',
-      [error(CompileTimeErrorCode.nonVoidReturnForSetter, 12, 3)],
+      [error(diag.nonVoidReturnForSetter, 12, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart b/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
index af0394a..015e9f3 100644
--- a/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_a_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notAType,
+          diag.notAType,
           24,
           5,
           contextMessages: [message(testFile, 14, 3)],
@@ -46,7 +46,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notAType,
+          diag.notAType,
           36,
           5,
           contextMessages: [message(testFile, 24, 3)],
@@ -63,7 +63,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notAType,
+          diag.notAType,
           22,
           1,
           contextMessages: [message(testFile, 10, 1)],
@@ -88,13 +88,8 @@
   f v = null;
 }''',
       [
-        error(
-          CompileTimeErrorCode.notAType,
-          18,
-          1,
-          contextMessages: [message(testFile, 0, 1)],
-        ),
-        error(WarningCode.unusedLocalVariable, 20, 1),
+        error(diag.notAType, 18, 1, contextMessages: [message(testFile, 0, 1)]),
+        error(diag.unusedLocalVariable, 20, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/not_assigned_potentially_non_nullable_local_variable_test.dart b/pkg/analyzer/test/src/diagnostics/not_assigned_potentially_non_nullable_local_variable_test.dart
index ee41c45..7d86468 100644
--- a/pkg/analyzer/test/src/diagnostics/not_assigned_potentially_non_nullable_local_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_assigned_potentially_non_nullable_local_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -88,8 +88,8 @@
 ''',
       [
         _notAssignedError(22, 1),
-        error(WarningCode.deadCode, 28, 2),
-        error(StaticWarningCode.deadNullAwareExpression, 28, 1),
+        error(diag.deadCode, 28, 2),
+        error(diag.deadNullAwareExpression, 28, 1),
       ],
     );
   }
@@ -104,8 +104,8 @@
 ''',
       [
         _notAssignedError(22, 1),
-        error(WarningCode.deadCode, 28, 2),
-        error(StaticWarningCode.deadNullAwareExpression, 28, 1),
+        error(diag.deadCode, 28, 2),
+        error(diag.deadNullAwareExpression, 28, 1),
         _notAssignedError(28, 1),
       ],
     );
@@ -130,10 +130,7 @@
   v;
 }
 ''',
-      [
-        error(WarningCode.deadCode, 30, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 33, 1),
-      ],
+      [error(diag.deadCode, 30, 4), error(diag.deadNullAwareExpression, 33, 1)],
     );
   }
 
@@ -147,8 +144,8 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 29, 10),
-        error(StaticWarningCode.deadNullAwareExpression, 32, 7),
+        error(diag.deadCode, 29, 10),
+        error(diag.deadNullAwareExpression, 32, 7),
         _notAssignedError(43, 1),
       ],
     );
@@ -561,7 +558,7 @@
   v;
 }
 ''',
-      [error(WarningCode.deadCode, 51, 2)],
+      [error(diag.deadCode, 51, 2)],
     );
   }
 
@@ -576,10 +573,7 @@
   v;
 }
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 31, 1),
-        error(WarningCode.deadCode, 61, 2),
-      ],
+      [error(diag.unusedLocalVariable, 31, 1), error(diag.deadCode, 61, 2)],
     );
   }
 
@@ -595,7 +589,7 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 31, 2),
+        error(diag.unusedLocalVariable, 31, 2),
         _notAssignedError(75, 2),
         _notAssignedError(85, 2),
         _notAssignedError(95, 2),
@@ -717,8 +711,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(WarningCode.unusedElement, 38, 1),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.unusedElement, 38, 1),
         _notAssignedError(64, 1),
       ],
     );
@@ -741,7 +735,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 40, 1), _notAssignedError(94, 2)],
+      [error(diag.unusedElement, 40, 1), _notAssignedError(94, 2)],
     );
   }
 
@@ -761,7 +755,7 @@
   v2 = 0;
 }
 ''',
-      [error(WarningCode.unusedElement, 44, 1), _notAssignedError(62, 2)],
+      [error(diag.unusedElement, 44, 1), _notAssignedError(62, 2)],
     );
   }
 
@@ -778,7 +772,7 @@
   v;
 }
 ''',
-      [error(WarningCode.unusedElement, 28, 1), _notAssignedError(52, 1)],
+      [error(diag.unusedElement, 28, 1), _notAssignedError(52, 1)],
     );
   }
 
@@ -791,7 +785,7 @@
   FutureOr<int?> v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 45, 1)],
+      [error(diag.unusedLocalVariable, 45, 1)],
     );
   }
 
@@ -831,7 +825,7 @@
   v;
 }
 ''',
-      [error(WarningCode.deadCode, 33, 25)],
+      [error(diag.deadCode, 33, 25)],
     );
   }
 
@@ -894,7 +888,7 @@
   v;
 }
 ''',
-      [error(WarningCode.deadCode, 33, 25)],
+      [error(diag.deadCode, 33, 25)],
     );
   }
 
@@ -1021,7 +1015,7 @@
   int v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -1287,7 +1281,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 45, 8)],
+      [error(diag.deadCode, 45, 8)],
     );
   }
 
@@ -1301,7 +1295,7 @@
   });
 }
 ''',
-      [error(WarningCode.deadCode, 52, 8)],
+      [error(diag.deadCode, 52, 8)],
     );
   }
 
@@ -1315,7 +1309,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 56, 8)],
+      [error(diag.deadCode, 56, 8)],
     );
   }
 
@@ -1506,7 +1500,7 @@
   dynamic v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 16, 1)],
+      [error(diag.unusedLocalVariable, 16, 1)],
     );
   }
 
@@ -1517,7 +1511,7 @@
   var v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -1528,7 +1522,7 @@
   void v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 13, 1)],
+      [error(diag.unusedLocalVariable, 13, 1)],
     );
   }
 
@@ -1612,7 +1606,7 @@
   v;
 }
 ''',
-      [error(WarningCode.deadCode, 131, 2)],
+      [error(diag.deadCode, 131, 2)],
     );
   }
 
@@ -1692,12 +1686,8 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 81, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          81,
-          1,
-        ),
+        error(diag.deadCode, 81, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 81, 1),
       ],
     );
   }
@@ -1715,19 +1705,15 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 114, 2),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          114,
-          1,
-        ),
+        error(diag.deadCode, 114, 2),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 114, 1),
       ],
     );
   }
 
   ExpectedDiagnostic _notAssignedError(int offset, int length) {
     return error(
-      CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
+      diag.notAssignedPotentiallyNonNullableLocalVariable,
       offset,
       length,
     );
diff --git a/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart b/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart
index c2656e4..2cdfa08 100644
--- a/pkg/analyzer/test/src/diagnostics/not_binary_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_binary_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -17,7 +17,7 @@
 class NonBinaryOperatorTest extends PubPackageResolutionTest {
   test_unaryTilde() async {
     await assertErrorsInCode('var a = 5 ~ 3;', [
-      error(CompileTimeErrorCode.notBinaryOperator, 10, 1),
+      error(diag.notBinaryOperator, 10, 1),
     ]);
   }
 }
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 7a21ad8..831db27 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           45,
           1,
           messageContains: ["expected by 'named'"],
@@ -48,7 +48,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           33,
           1,
           messageContains: ["expected by 'A.new'"],
@@ -70,7 +70,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           42,
           1,
           messageContains: ["expected by 'A.new'"],
@@ -89,7 +89,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           13,
           1,
           messageContains: ["expected by 'E'"],
@@ -108,7 +108,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           11,
           1,
           messageContains: ["expected by 'E'"],
@@ -127,7 +127,7 @@
 }''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           66,
           1,
           messageContains: ["expected by 'getter'"],
@@ -142,7 +142,7 @@
 main() {
   (int x, int y) {} ();
 }''',
-      [error(CompileTimeErrorCode.notEnoughPositionalArgumentsPlural, 30, 1)],
+      [error(diag.notEnoughPositionalArgumentsPlural, 30, 1)],
     );
   }
 
@@ -152,7 +152,7 @@
 main() {
   (int x) {} ();
 }''',
-      [error(CompileTimeErrorCode.notEnoughPositionalArgumentsSingular, 23, 1)],
+      [error(diag.notEnoughPositionalArgumentsSingular, 23, 1)],
     );
   }
 
@@ -168,7 +168,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           49,
           1,
           messageContains: ["expected by 'A.new'"],
@@ -188,12 +188,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
-          49,
-          1,
-        ),
-        error(CompileTimeErrorCode.undefinedNamedParameter, 49, 1),
+        error(diag.notEnoughPositionalArgumentsNameSingular, 49, 1),
+        error(diag.undefinedNamedParameter, 49, 1),
       ],
     );
   }
@@ -211,7 +207,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural,
+          diag.notEnoughPositionalArgumentsNamePlural,
           70,
           1,
           messageContains: ["expected by 'named'"],
@@ -233,7 +229,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural,
+          diag.notEnoughPositionalArgumentsNamePlural,
           58,
           1,
           messageContains: [
@@ -253,7 +249,7 @@
 }''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNamePlural,
+          diag.notEnoughPositionalArgumentsNamePlural,
           35,
           1,
           messageContains: ["expected by 'f'"],
@@ -272,7 +268,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           58,
           1,
           messageContains: ["expected by 'A.new'"],
@@ -291,7 +287,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           64,
           1,
           messageContains: ["expected by 'named'"],
@@ -312,7 +308,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           70,
           1,
           messageContains: ["expected by 'A.new'"],
@@ -333,7 +329,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
+          diag.notEnoughPositionalArgumentsNameSingular,
           82,
           1,
           messageContains: ["expected by 'named'"],
diff --git a/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_instance_field_test.dart b/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_instance_field_test.dart
index 998dbf5..70eae83 100644
--- a/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_instance_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_instance_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -65,13 +65,7 @@
   factory A() => throw 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          16,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 16, 1)],
     );
   }
 
@@ -149,13 +143,7 @@
   var x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          61,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 61, 1)],
     );
   }
 
@@ -166,13 +154,7 @@
   int x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          16,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 16, 1)],
     );
   }
 
@@ -195,14 +177,7 @@
   A.b();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          38,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceFieldConstructor, 38, 3)],
     );
   }
 
@@ -215,14 +190,7 @@
   A() : x = 0, z = 2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceFieldConstructor, 28, 1)],
     );
   }
 
@@ -257,13 +225,7 @@
   Never x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          18,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 18, 1)],
     );
   }
 
@@ -282,13 +244,7 @@
   T x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          17,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 17, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart b/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart
index 9c3491a..2275e17 100644
--- a/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_initialized_non_nullable_variable_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -62,7 +62,7 @@
   static int x = 0, y, z = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 30, 1)],
+      [error(diag.notInitializedNonNullableVariable, 30, 1)],
     );
   }
 
@@ -74,7 +74,7 @@
   A();
 }
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 30, 1)],
+      [error(diag.notInitializedNonNullableVariable, 30, 1)],
     );
   }
 
@@ -86,7 +86,7 @@
   A();
 }
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 36, 1)],
+      [error(diag.notInitializedNonNullableVariable, 36, 1)],
     );
   }
 
@@ -121,7 +121,7 @@
   static Never v;
 }
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 25, 1)],
+      [error(diag.notInitializedNonNullableVariable, 25, 1)],
     );
   }
 
@@ -152,7 +152,7 @@
       '''
 int x = 0, y, z = 2;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 11, 1)],
+      [error(diag.notInitializedNonNullableVariable, 11, 1)],
     );
   }
 
@@ -179,7 +179,7 @@
       '''
 Never v;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 6, 1)],
+      [error(diag.notInitializedNonNullableVariable, 6, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/not_instantiated_bound_test.dart b/pkg/analyzer/test/src/diagnostics/not_instantiated_bound_test.dart
index 548eb79..55b1607 100644
--- a/pkg/analyzer/test/src/diagnostics/not_instantiated_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_instantiated_bound_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 class A<K, V extends List<K>> {}
 class C<T extends A> {}
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 51, 1)],
+      [error(diag.notInstantiatedBound, 51, 1)],
     );
   }
 
@@ -31,7 +31,7 @@
 class A<K, V extends List<List<K>>> {}
 class C<T extends A> {}
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 57, 1)],
+      [error(diag.notInstantiatedBound, 57, 1)],
     );
   }
 
@@ -81,8 +81,8 @@
 class B<T extends A<B>> {}
 ''',
       [
-        error(CompileTimeErrorCode.notInstantiatedBound, 20, 1),
-        error(CompileTimeErrorCode.notInstantiatedBound, 47, 1),
+        error(diag.notInstantiatedBound, 20, 1),
+        error(diag.notInstantiatedBound, 47, 1),
       ],
     );
   }
@@ -95,9 +95,9 @@
 class C<T extends A> {} // points to a cyclical type
 ''',
       [
-        error(CompileTimeErrorCode.notInstantiatedBound, 18, 1),
-        error(CompileTimeErrorCode.notInstantiatedBound, 57, 1),
-        error(CompileTimeErrorCode.notInstantiatedBound, 96, 1),
+        error(diag.notInstantiatedBound, 18, 1),
+        error(diag.notInstantiatedBound, 57, 1),
+        error(diag.notInstantiatedBound, 96, 1),
       ],
     );
   }
@@ -107,7 +107,7 @@
       r'''
 class A<T extends void Function(A)> {}
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 32, 1)],
+      [error(diag.notInstantiatedBound, 32, 1)],
     );
   }
 
@@ -116,7 +116,7 @@
       r'''
 class A<T extends void Function<U extends A>()> {}
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 42, 1)],
+      [error(diag.notInstantiatedBound, 42, 1)],
     );
   }
 
@@ -128,9 +128,9 @@
 class D<T extends C> {}
 ''',
       [
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1),
-        error(CompileTimeErrorCode.notInstantiatedBound, 38, 1),
-        error(CompileTimeErrorCode.notInstantiatedBound, 62, 1),
+        error(diag.typeAliasCannotReferenceItself, 8, 1),
+        error(diag.notInstantiatedBound, 38, 1),
+        error(diag.notInstantiatedBound, 62, 1),
       ],
     );
   }
@@ -148,7 +148,7 @@
 class A<K, V extends K> {}
 class C<T extends A> {}
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 45, 1)],
+      [error(diag.notInstantiatedBound, 45, 1)],
     );
   }
 
@@ -161,8 +161,8 @@
 class D<T extends B> {}
 ''',
       [
-        error(CompileTimeErrorCode.notInstantiatedBound, 87, 1),
-        error(CompileTimeErrorCode.notInstantiatedBound, 111, 1),
+        error(diag.notInstantiatedBound, 87, 1),
+        error(diag.notInstantiatedBound, 111, 1),
       ],
     );
   }
@@ -173,7 +173,7 @@
 class A<K, V extends K> {}
 class C<T extends List<A>> {}
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 50, 1)],
+      [error(diag.notInstantiatedBound, 50, 1)],
     );
   }
 
@@ -183,7 +183,7 @@
 class A<K, V extends List<K>> {}
 typedef void F<T extends A>();
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 58, 1)],
+      [error(diag.notInstantiatedBound, 58, 1)],
     );
   }
 
@@ -193,7 +193,7 @@
 class A<K, V extends List<List<K>>> {}
 typedef void F<T extends A>();
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 64, 1)],
+      [error(diag.notInstantiatedBound, 64, 1)],
     );
   }
 
@@ -210,7 +210,7 @@
 class A<K, V extends K> {}
 typedef void F<T extends A>();
 ''',
-      [error(CompileTimeErrorCode.notInstantiatedBound, 52, 1)],
+      [error(diag.notInstantiatedBound, 52, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
index 0cf4238..5b97f9d 100644
--- a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -63,7 +63,7 @@
 var a = 0;
 var v = [...a];
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 23, 1)],
+      [error(diag.notIterableSpread, 23, 1)],
     );
   }
 
@@ -74,8 +74,8 @@
 var v = [for (var i in []) ...a];
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 29, 1),
-        error(CompileTimeErrorCode.notIterableSpread, 41, 1),
+        error(diag.unusedLocalVariable, 29, 1),
+        error(diag.notIterableSpread, 41, 1),
       ],
     );
   }
@@ -86,7 +86,7 @@
 var a = 0;
 var v = [if (1 > 0) ...[] else ...a];
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 45, 1)],
+      [error(diag.notIterableSpread, 45, 1)],
     );
   }
 
@@ -96,7 +96,7 @@
 var a = 0;
 var v = [if (1 > 0) ...a];
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 34, 1)],
+      [error(diag.notIterableSpread, 34, 1)],
     );
   }
 
@@ -108,7 +108,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 43, 1)],
+      [error(diag.notIterableSpread, 43, 1)],
     );
   }
 
@@ -117,7 +117,7 @@
       '''
 List<int> f() => [...{1: 2, 3: 4}];
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 21, 12)],
+      [error(diag.notIterableSpread, 21, 12)],
     );
   }
 }
@@ -132,7 +132,7 @@
   [...a];
 }
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 26, 1)],
+      [error(diag.notIterableSpread, 26, 1)],
     );
   }
 
@@ -143,7 +143,7 @@
   <int>{...a};
 }
 ''',
-      [error(CompileTimeErrorCode.notIterableSpread, 31, 1)],
+      [error(diag.notIterableSpread, 31, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
index 8b60e23..8b012ad 100644
--- a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_map_spread_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -53,7 +53,7 @@
 var a = 0;
 var v = <int, int>{...a};
 ''',
-      [error(CompileTimeErrorCode.notMapSpread, 33, 1)],
+      [error(diag.notMapSpread, 33, 1)],
     );
   }
 
@@ -63,10 +63,7 @@
 var a = 0;
 var v = <int, int>{for (var i in []) ...a};
 ''',
-      [
-        error(WarningCode.unusedLocalVariable, 39, 1),
-        error(CompileTimeErrorCode.notMapSpread, 51, 1),
-      ],
+      [error(diag.unusedLocalVariable, 39, 1), error(diag.notMapSpread, 51, 1)],
     );
   }
 
@@ -76,7 +73,7 @@
 var a = 0;
 var v = <int, int>{if (1 > 0) ...<int, int>{} else ...a};
 ''',
-      [error(CompileTimeErrorCode.notMapSpread, 65, 1)],
+      [error(diag.notMapSpread, 65, 1)],
     );
   }
 
@@ -86,7 +83,7 @@
 var a = 0;
 var v = <int, int>{if (1 > 0) ...a};
 ''',
-      [error(CompileTimeErrorCode.notMapSpread, 44, 1)],
+      [error(diag.notMapSpread, 44, 1)],
     );
   }
 
@@ -98,7 +95,7 @@
   v;
 }
 ''',
-      [error(CompileTimeErrorCode.notMapSpread, 53, 1)],
+      [error(diag.notMapSpread, 53, 1)],
     );
   }
 }
@@ -113,7 +110,7 @@
   <int, String>{...a};
 }
 ''',
-      [error(CompileTimeErrorCode.notMapSpread, 39, 1)],
+      [error(diag.notMapSpread, 39, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
index ca774d6..e14b85d 100644
--- a/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,8 +21,8 @@
 var v = [...null];
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 12, 4),
-        error(CompileTimeErrorCode.notNullAwareNullSpread, 12, 4),
+        error(diag.invalidUseOfNullValue, 12, 4),
+        error(diag.notNullAwareNullSpread, 12, 4),
       ],
     );
   }
@@ -34,8 +34,8 @@
 var v = [...a];
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 27, 1),
-        error(CompileTimeErrorCode.notNullAwareNullSpread, 27, 1),
+        error(diag.invalidUseOfNullValue, 27, 1),
+        error(diag.notNullAwareNullSpread, 27, 1),
       ],
     );
   }
@@ -59,8 +59,8 @@
 var v = <int, int>{...null};
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 22, 4),
-        error(CompileTimeErrorCode.notNullAwareNullSpread, 22, 4),
+        error(diag.invalidUseOfNullValue, 22, 4),
+        error(diag.notNullAwareNullSpread, 22, 4),
       ],
     );
   }
@@ -72,8 +72,8 @@
 var v = <int, int>{...a};
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 37, 1),
-        error(CompileTimeErrorCode.notNullAwareNullSpread, 37, 1),
+        error(diag.invalidUseOfNullValue, 37, 1),
+        error(diag.notNullAwareNullSpread, 37, 1),
       ],
     );
   }
@@ -97,8 +97,8 @@
 var v = <int>{...null};
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 17, 4),
-        error(CompileTimeErrorCode.notNullAwareNullSpread, 17, 4),
+        error(diag.invalidUseOfNullValue, 17, 4),
+        error(diag.notNullAwareNullSpread, 17, 4),
       ],
     );
   }
@@ -110,8 +110,8 @@
 var v = <int>{...a};
 ''',
       [
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 32, 1),
-        error(CompileTimeErrorCode.notNullAwareNullSpread, 32, 1),
+        error(diag.invalidUseOfNullValue, 32, 1),
+        error(diag.notNullAwareNullSpread, 32, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/null_argument_to_non_null_type_test.dart b/pkg/analyzer/test/src/diagnostics/null_argument_to_non_null_type_test.dart
index 6a7453b..850f301 100644
--- a/pkg/analyzer/test/src/diagnostics/null_argument_to_non_null_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_argument_to_non_null_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
 import 'dart:async';
 void f() => Completer<int>().complete();
 ''',
-      [error(WarningCode.nullArgumentToNonNullType, 33, 27)],
+      [error(diag.nullArgumentToNonNullType, 33, 27)],
     );
   }
 
@@ -42,7 +42,7 @@
 import 'dart:async';
 void f() => Completer<int>().complete(null);
 ''',
-      [error(WarningCode.nullArgumentToNonNullType, 59, 4)],
+      [error(diag.nullArgumentToNonNullType, 59, 4)],
     );
   }
 
@@ -63,7 +63,7 @@
 import 'dart:async';
 void f(Null a) => Completer<int>().complete(a);
 ''',
-      [error(WarningCode.nullArgumentToNonNullType, 65, 1)],
+      [error(diag.nullArgumentToNonNullType, 65, 1)],
     );
   }
 }
@@ -75,7 +75,7 @@
       '''
 void foo() => Future<int>.value();
 ''',
-      [error(WarningCode.nullArgumentToNonNullType, 14, 19)],
+      [error(diag.nullArgumentToNonNullType, 14, 19)],
     );
   }
 
@@ -93,7 +93,7 @@
       '''
 void foo() => Future<int>.value(null);
 ''',
-      [error(WarningCode.nullArgumentToNonNullType, 32, 4)],
+      [error(diag.nullArgumentToNonNullType, 32, 4)],
     );
   }
 
@@ -111,7 +111,7 @@
       '''
 void foo(Null a) => Future<int>.value(a);
 ''',
-      [error(WarningCode.nullArgumentToNonNullType, 38, 1)],
+      [error(diag.nullArgumentToNonNullType, 38, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_elements_const_literals_error_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_elements_const_literals_error_test.dart
index ee4eede..d33a1ad 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_elements_const_literals_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_elements_const_literals_error_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           86,
           1,
           contextMessages: [message(testFile, 70, 8)],
@@ -42,7 +42,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           74,
           8,
           contextMessages: [message(testFile, 70, 1)],
@@ -60,7 +60,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           87,
           11,
           contextMessages: [message(testFile, 70, 8)],
@@ -79,7 +79,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           110,
           4,
           contextMessages: [message(testFile, 99, 9)],
@@ -98,7 +98,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           103,
           9,
           contextMessages: [message(testFile, 94, 4)],
@@ -117,7 +117,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalKeysInConstMap,
+          diag.equalKeysInConstMap,
           103,
           9,
           contextMessages: [message(testFile, 94, 4)],
@@ -135,7 +135,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.equalElementsInConstSet,
+          diag.equalElementsInConstSet,
           91,
           11,
           contextMessages: [message(testFile, 86, 2)],
@@ -153,8 +153,8 @@
 const list = [?null, ?nullVar, intConst, stringConst];
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantListElement, 99, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 99, 7),
+        error(diag.nonConstantListElement, 99, 7),
+        error(diag.constInitializedWithNonConstantValue, 99, 7),
       ],
     );
   }
@@ -167,8 +167,8 @@
 const map = {null: 1, ?intVar: 1, stringConst: 1};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantMapKey, 72, 6),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 72, 6),
+        error(diag.nonConstantMapKey, 72, 6),
+        error(diag.constInitializedWithNonConstantValue, 72, 6),
       ],
     );
   }
@@ -182,8 +182,8 @@
 const set = {nullConst, ?intVar, stringConst};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantSetElement, 98, 6),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 98, 6),
+        error(diag.nonConstantSetElement, 98, 6),
+        error(diag.constInitializedWithNonConstantValue, 98, 6),
       ],
     );
   }
@@ -196,8 +196,8 @@
 const map = {null: 1, 0: ?intVar, stringConst: 1};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantMapValue, 75, 6),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 75, 6),
+        error(diag.nonConstantMapValue, 75, 6),
+        error(diag.constInitializedWithNonConstantValue, 75, 6),
       ],
     );
   }
@@ -211,8 +211,8 @@
 const map = {?nullVar: 1, intConst: 1, stringConst: 1};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantMapKey, 91, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 91, 7),
+        error(diag.nonConstantMapKey, 91, 7),
+        error(diag.constInitializedWithNonConstantValue, 91, 7),
       ],
     );
   }
@@ -226,8 +226,8 @@
 const set = {?nullVar, intConst, stringConst};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantSetElement, 91, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 91, 7),
+        error(diag.nonConstantSetElement, 91, 7),
+        error(diag.constInitializedWithNonConstantValue, 91, 7),
       ],
     );
   }
@@ -241,8 +241,8 @@
 const map = {null: ?nullVar, intConst: 1, stringConst: 1};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantMapValue, 97, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 97, 7),
+        error(diag.nonConstantMapValue, 97, 7),
+        error(diag.constInitializedWithNonConstantValue, 97, 7),
       ],
     );
   }
@@ -254,8 +254,8 @@
 const map = {null: 1, 0: 1, ?stringVar: 1};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantMapKey, 53, 9),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 53, 9),
+        error(diag.nonConstantMapKey, 53, 9),
+        error(diag.constInitializedWithNonConstantValue, 53, 9),
       ],
     );
   }
@@ -269,12 +269,8 @@
 const set = {nullConst, intConst, ?stringVar};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantSetElement, 108, 9),
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          108,
-          9,
-        ),
+        error(diag.nonConstantSetElement, 108, 9),
+        error(diag.constInitializedWithNonConstantValue, 108, 9),
       ],
     );
   }
@@ -286,8 +282,8 @@
 const map = {null: 1, 0: 1, "": ?stringVar};
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantMapValue, 57, 9),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 57, 9),
+        error(diag.nonConstantMapValue, 57, 9),
+        error(diag.constInitializedWithNonConstantValue, 57, 9),
       ],
     );
   }
@@ -301,8 +297,8 @@
 const list = [?nullVar, intConst, stringConst];
 ''',
       [
-        error(CompileTimeErrorCode.nonConstantListElement, 92, 7),
-        error(CompileTimeErrorCode.constInitializedWithNonConstantValue, 92, 7),
+        error(diag.nonConstantListElement, 92, 7),
+        error(diag.constInitializedWithNonConstantValue, 92, 7),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/null_check_always_fails_test.dart b/pkg/analyzer/test/src/diagnostics/null_check_always_fails_test.dart
index aea858f..5408e9b 100644
--- a/pkg/analyzer/test/src/diagnostics/null_check_always_fails_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_check_always_fails_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   null!;
 }
 ''',
-      [error(WarningCode.nullCheckAlwaysFails, 13, 5)],
+      [error(diag.nullCheckAlwaysFails, 13, 5)],
     );
   }
 
@@ -41,7 +41,7 @@
   (null)!;
 }
 ''',
-      [error(WarningCode.nullCheckAlwaysFails, 13, 7)],
+      [error(diag.nullCheckAlwaysFails, 13, 7)],
     );
   }
 
@@ -53,7 +53,7 @@
 }
 Null g() => null;
 ''',
-      [error(WarningCode.nullCheckAlwaysFails, 13, 4)],
+      [error(diag.nullCheckAlwaysFails, 13, 4)],
     );
   }
 
@@ -65,7 +65,7 @@
 }
 Future<Null> g() async => null;
 ''',
-      [error(WarningCode.nullCheckAlwaysFails, 19, 12)],
+      [error(diag.nullCheckAlwaysFails, 19, 12)],
     );
   }
 
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 68275fc..c1fffc0 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -44,7 +44,7 @@
   x += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 20, 1)],
+      [error(diag.assignmentToFinalLocal, 20, 1)],
     );
     _assertAssigned('x +=', assigned: true, unassigned: false);
   }
@@ -56,7 +56,7 @@
   x++;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 20, 1)],
+      [error(diag.assignmentToFinalLocal, 20, 1)],
     );
     _assertAssigned('x++', assigned: true, unassigned: false);
   }
@@ -68,7 +68,7 @@
   ++x;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 22, 1)],
+      [error(diag.assignmentToFinalLocal, 22, 1)],
     );
     _assertAssigned('x;', assigned: true, unassigned: false);
   }
@@ -80,7 +80,7 @@
   x = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 20, 1)],
+      [error(diag.assignmentToFinalLocal, 20, 1)],
     );
     _assertAssigned('x =', assigned: true, unassigned: false);
   }
@@ -94,7 +94,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 25, 1)],
+      [error(diag.assignmentToFinalLocal, 25, 1)],
     );
     _assertAssigned('x in', assigned: true, unassigned: false);
   }
@@ -109,8 +109,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 24, 1),
-        error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 34, 1),
+        error(diag.readPotentiallyUnassignedFinal, 24, 1),
+        error(diag.readPotentiallyUnassignedFinal, 34, 1),
       ],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
@@ -126,7 +126,7 @@
   x += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 58, 1)],
+      [error(diag.readPotentiallyUnassignedFinal, 58, 1)],
     );
     _assertAssigned('x +=', assigned: false, unassigned: true);
   }
@@ -140,7 +140,7 @@
   x++;
 }
 ''',
-      [error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 58, 1)],
+      [error(diag.readPotentiallyUnassignedFinal, 58, 1)],
     );
     _assertAssigned('x++', assigned: false, unassigned: true);
   }
@@ -154,7 +154,7 @@
   ++x; // 0
 }
 ''',
-      [error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 60, 1)],
+      [error(diag.readPotentiallyUnassignedFinal, 60, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -179,7 +179,7 @@
   x; // 0
 }
 ''',
-      [error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 46, 1)],
+      [error(diag.readPotentiallyUnassignedFinal, 46, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: false);
   }
@@ -195,8 +195,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 80, 1),
-        error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 80, 1),
+        error(diag.assignmentToFinalLocal, 80, 1),
+        error(diag.readPotentiallyUnassignedFinal, 80, 1),
       ],
     );
     _assertAssigned('x +=', assigned: false, unassigned: false);
@@ -213,8 +213,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 80, 1),
-        error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 80, 1),
+        error(diag.assignmentToFinalLocal, 80, 1),
+        error(diag.readPotentiallyUnassignedFinal, 80, 1),
       ],
     );
     _assertAssigned('x++', assigned: false, unassigned: false);
@@ -231,8 +231,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.assignmentToFinalLocal, 82, 1),
-        error(CompileTimeErrorCode.readPotentiallyUnassignedFinal, 82, 1),
+        error(diag.assignmentToFinalLocal, 82, 1),
+        error(diag.readPotentiallyUnassignedFinal, 82, 1),
       ],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: false);
@@ -248,7 +248,7 @@
   x = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.assignmentToFinalLocal, 80, 1)],
+      [error(diag.assignmentToFinalLocal, 80, 1)],
     );
     _assertAssigned('x = 1', assigned: false, unassigned: false);
   }
@@ -274,7 +274,7 @@
   x += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 72, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 72, 1)],
     );
     _assertAssigned('x +=', assigned: true, unassigned: false);
   }
@@ -289,7 +289,7 @@
   x++;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 72, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 72, 1)],
     );
     _assertAssigned('x++', assigned: true, unassigned: false);
   }
@@ -304,7 +304,7 @@
   ++x; // 0
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 74, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 74, 1)],
     );
     _assertAssigned('x; // 0', assigned: true, unassigned: false);
   }
@@ -319,7 +319,7 @@
   x = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 72, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 72, 1)],
     );
     _assertAssigned('x = 1', assigned: true, unassigned: false);
   }
@@ -332,13 +332,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          29,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 29, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -352,13 +346,7 @@
   x += 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          63,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 63, 1)],
     );
     _assertAssigned('x +=', assigned: false, unassigned: true);
   }
@@ -372,13 +360,7 @@
   x++;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          63,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 63, 1)],
     );
     _assertAssigned('x++', assigned: false, unassigned: true);
   }
@@ -392,13 +374,7 @@
   ++x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          65,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 65, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -494,7 +470,7 @@
   x += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 77, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 77, 1)],
     );
     _assertAssigned('x +=', assigned: true, unassigned: false);
   }
@@ -509,7 +485,7 @@
   x++;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 77, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 77, 1)],
     );
     _assertAssigned('x++', assigned: true, unassigned: false);
   }
@@ -524,7 +500,7 @@
   ++x; // 0
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 79, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 79, 1)],
     );
     _assertAssigned('x; // 0', assigned: true, unassigned: false);
   }
@@ -539,7 +515,7 @@
   x = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 77, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 77, 1)],
     );
     _assertAssigned('x = 1', assigned: true, unassigned: false);
   }
@@ -552,13 +528,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 34, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -573,16 +543,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          68,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          70,
-          2,
-        ),
+        error(diag.definitelyUnassignedLateLocalVariable, 68, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 70, 2),
       ],
     );
     _assertAssigned('x +=', assigned: false, unassigned: true);
@@ -598,16 +560,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          68,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          69,
-          2,
-        ),
+        error(diag.definitelyUnassignedLateLocalVariable, 68, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 69, 2),
       ],
     );
     _assertAssigned('x++', assigned: false, unassigned: true);
@@ -623,16 +577,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          70,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          68,
-          2,
-        ),
+        error(diag.definitelyUnassignedLateLocalVariable, 70, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 68, 2),
       ],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
@@ -670,13 +616,7 @@
   x += 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          92,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 92, 2)],
     );
     _assertAssigned('x +=', assigned: false, unassigned: false);
   }
@@ -691,13 +631,7 @@
   x++;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          91,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 91, 2)],
     );
     _assertAssigned('x++', assigned: false, unassigned: false);
   }
@@ -712,13 +646,7 @@
   ++x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          90,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 90, 2)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: false);
   }
@@ -756,7 +684,7 @@
   x = t2;
 }
 ''',
-      [error(CompileTimeErrorCode.lateFinalLocalAlreadyAssigned, 86, 1)],
+      [error(diag.lateFinalLocalAlreadyAssigned, 86, 1)],
     );
     _assertAssigned('x = t2', assigned: true, unassigned: false);
   }
@@ -769,13 +697,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          34,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 34, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -833,13 +755,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 28, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -874,13 +790,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 28, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -963,13 +873,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.definitelyUnassignedLateLocalVariable,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.definitelyUnassignedLateLocalVariable, 27, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -1134,13 +1038,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          23,
-          1,
-        ),
-      ],
+      [error(diag.notAssignedPotentiallyNonNullableLocalVariable, 23, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: true);
   }
@@ -1165,13 +1063,7 @@
   x; // 0
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          50,
-          1,
-        ),
-      ],
+      [error(diag.notAssignedPotentiallyNonNullableLocalVariable, 50, 1)],
     );
     _assertAssigned('x; // 0', assigned: false, unassigned: false);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_catch_clause_test.dart
index a7f374e..6d7d644 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_catch_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   }
 }
 ''',
-      [error(WarningCode.nullableTypeInCatchClause, 32, 7)],
+      [error(diag.nullableTypeInCatchClause, 32, 7)],
     );
   }
 
@@ -58,7 +58,7 @@
   }
 }
 ''',
-      [error(WarningCode.nullableTypeInCatchClause, 21, 16)],
+      [error(diag.nullableTypeInCatchClause, 21, 16)],
     );
   }
 
@@ -81,7 +81,7 @@
   }
 }
 ''',
-      [error(WarningCode.nullableTypeInCatchClause, 21, 4)],
+      [error(diag.nullableTypeInCatchClause, 21, 4)],
     );
   }
 
@@ -108,7 +108,7 @@
   }
 }
 ''',
-      [error(WarningCode.nullableTypeInCatchClause, 40, 1)],
+      [error(diag.nullableTypeInCatchClause, 40, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart
index 87252de..e367233 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 class A {}
 class B extends A? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 27, 2)],
+      [error(diag.nullableTypeInExtendsClause, 27, 2)],
     );
   }
 
@@ -39,7 +39,7 @@
 typedef B = A;
 class C extends B? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 42, 2)],
+      [error(diag.nullableTypeInExtendsClause, 42, 2)],
     );
   }
 
@@ -50,7 +50,7 @@
 typedef B = A?;
 class C extends B {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 43, 1)],
+      [error(diag.nullableTypeInExtendsClause, 43, 1)],
     );
   }
 
@@ -69,7 +69,7 @@
 mixin B {}
 class C = A? with B;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 32, 2)],
+      [error(diag.nullableTypeInExtendsClause, 32, 2)],
     );
   }
 
@@ -81,7 +81,7 @@
 typedef C = A;
 class D = C? with B;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 47, 2)],
+      [error(diag.nullableTypeInExtendsClause, 47, 2)],
     );
   }
 
@@ -93,7 +93,7 @@
 typedef C = A?;
 class D = C with B;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 48, 1)],
+      [error(diag.nullableTypeInExtendsClause, 48, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
 mixin B {}
 class C = A? with B;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 32, 2)],
+      [error(diag.nullableTypeInExtendsClause, 32, 2)],
     );
   }
 
@@ -124,7 +124,7 @@
 typedef C = A;
 class D = C? with B;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 47, 2)],
+      [error(diag.nullableTypeInExtendsClause, 47, 2)],
     );
   }
 
@@ -136,7 +136,7 @@
 typedef C = A?;
 class D = C with B;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInExtendsClause, 48, 1)],
+      [error(diag.nullableTypeInExtendsClause, 48, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart
index 0c70671..a429fb7 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 class A {}
 class B implements A? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 30, 2)],
+      [error(diag.nullableTypeInImplementsClause, 30, 2)],
     );
   }
 
@@ -39,7 +39,7 @@
 typedef B = A;
 class C implements B? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 45, 2)],
+      [error(diag.nullableTypeInImplementsClause, 45, 2)],
     );
   }
 
@@ -50,7 +50,7 @@
 typedef B = A?;
 class C implements B {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 46, 1)],
+      [error(diag.nullableTypeInImplementsClause, 46, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
 class A {}
 extension type E(A _) implements A? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 44, 2)],
+      [error(diag.nullableTypeInImplementsClause, 44, 2)],
     );
   }
 
@@ -78,7 +78,7 @@
 typedef B = A;
 extension type E(A _) implements B? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 59, 2)],
+      [error(diag.nullableTypeInImplementsClause, 59, 2)],
     );
   }
 
@@ -89,7 +89,7 @@
 typedef B = A?;
 extension type E(A _) implements B {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 60, 1)],
+      [error(diag.nullableTypeInImplementsClause, 60, 1)],
     );
   }
 
@@ -106,7 +106,7 @@
 class A {}
 mixin B implements A? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 30, 2)],
+      [error(diag.nullableTypeInImplementsClause, 30, 2)],
     );
   }
 
@@ -117,7 +117,7 @@
 typedef B = A;
 mixin C implements B? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 45, 2)],
+      [error(diag.nullableTypeInImplementsClause, 45, 2)],
     );
   }
 
@@ -128,7 +128,7 @@
 typedef B = A?;
 mixin C implements B {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInImplementsClause, 46, 1)],
+      [error(diag.nullableTypeInImplementsClause, 46, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart
index d04f710..fef46ea 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 class A {}
 mixin B on A? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInOnClause, 22, 2)],
+      [error(diag.nullableTypeInOnClause, 22, 2)],
     );
   }
 
@@ -39,7 +39,7 @@
 typedef B = A;
 mixin C on B? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInOnClause, 37, 2)],
+      [error(diag.nullableTypeInOnClause, 37, 2)],
     );
   }
 
@@ -50,7 +50,7 @@
 typedef B = A?;
 mixin C on B {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInOnClause, 38, 1)],
+      [error(diag.nullableTypeInOnClause, 38, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart
index 4c750f0..a4c8159 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 mixin A {}
 class B with A? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 24, 2)],
+      [error(diag.nullableTypeInWithClause, 24, 2)],
     );
   }
 
@@ -39,7 +39,7 @@
 typedef B = A;
 class C with B? {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 39, 2)],
+      [error(diag.nullableTypeInWithClause, 39, 2)],
     );
   }
 
@@ -50,7 +50,7 @@
 typedef B = A?;
 class C with B {}
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 40, 1)],
+      [error(diag.nullableTypeInWithClause, 40, 1)],
     );
   }
 
@@ -69,7 +69,7 @@
 mixin B {}
 class C = A with B?;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 39, 2)],
+      [error(diag.nullableTypeInWithClause, 39, 2)],
     );
   }
 
@@ -81,7 +81,7 @@
 typedef C = B;
 class D = A with C?;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 54, 2)],
+      [error(diag.nullableTypeInWithClause, 54, 2)],
     );
   }
 
@@ -93,7 +93,7 @@
 typedef C = B?;
 class D = A with C;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 55, 1)],
+      [error(diag.nullableTypeInWithClause, 55, 1)],
     );
   }
 
@@ -112,7 +112,7 @@
 mixin B {}
 class C = A with B?;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 39, 2)],
+      [error(diag.nullableTypeInWithClause, 39, 2)],
     );
   }
 
@@ -124,7 +124,7 @@
 typedef C = B;
 class D = A with C?;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 54, 2)],
+      [error(diag.nullableTypeInWithClause, 54, 2)],
     );
   }
 
@@ -136,7 +136,7 @@
 typedef C = B?;
 class D = A with C;
 ''',
-      [error(CompileTimeErrorCode.nullableTypeInWithClause, 55, 1)],
+      [error(diag.nullableTypeInWithClause, 55, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/number_literals_with_separators_test.dart b/pkg/analyzer/test/src/diagnostics/number_literals_with_separators_test.dart
index fdd2347..501aa40 100644
--- a/pkg/analyzer/test/src/diagnostics/number_literals_with_separators_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/number_literals_with_separators_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -28,13 +28,13 @@
 
   Future<void> test_missing_number_after_e_1() async {
     await assertErrorsInCode('dynamic x = 1_234_567e;', [
-      error(ScannerErrorCode.missingDigit, 21, 1),
+      error(diag.missingDigit, 21, 1),
     ]);
   }
 
   Future<void> test_missing_number_after_e_2() async {
     await assertErrorsInCode('dynamic x = 1.234_567e;', [
-      error(ScannerErrorCode.missingDigit, 21, 1),
+      error(diag.missingDigit, 21, 1),
     ]);
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/object_cannot_extend_another_class_test.dart b/pkg/analyzer/test/src/diagnostics/object_cannot_extend_another_class_test.dart
index 40673d8..7aeb3c8 100644
--- a/pkg/analyzer/test/src/diagnostics/object_cannot_extend_another_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/object_cannot_extend_another_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
       r'''
 class Object extends List {}
 ''',
-      [error(CompileTimeErrorCode.objectCannotExtendAnotherClass, 0, 0)],
+      [error(diag.objectCannotExtendAnotherClass, 0, 0)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/obsolete_colon_for_default_value_test.dart b/pkg/analyzer/test/src/diagnostics/obsolete_colon_for_default_value_test.dart
index dc7d440..9329d01 100644
--- a/pkg/analyzer/test/src/diagnostics/obsolete_colon_for_default_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/obsolete_colon_for_default_value_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -33,7 +33,7 @@
   B({super.a : ''});
 }
 ''',
-      [error(CompileTimeErrorCode.obsoleteColonForDefaultValue, 74, 1)],
+      [error(diag.obsoleteColonForDefaultValue, 74, 1)],
     );
   }
 
@@ -42,7 +42,7 @@
       '''
 void f({int x : 0}) {}
 ''',
-      [error(CompileTimeErrorCode.obsoleteColonForDefaultValue, 14, 1)],
+      [error(diag.obsoleteColonForDefaultValue, 14, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/on_repeated_test.dart b/pkg/analyzer/test/src/diagnostics/on_repeated_test.dart
index ea8174b..83bd9cf 100644
--- a/pkg/analyzer/test/src/diagnostics/on_repeated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/on_repeated_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 class A {}
 mixin M on A, A {}
 ''',
-      [error(CompileTimeErrorCode.onRepeated, 25, 1)],
+      [error(diag.onRepeated, 25, 1)],
     );
   }
 
@@ -42,9 +42,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [
-      error(CompileTimeErrorCode.onRepeated, 38, 1),
-    ]);
+    await assertErrorsInFile2(b, [error(diag.onRepeated, 38, 1)]);
   }
 
   test_2times_viaTypeAlias() async {
@@ -54,7 +52,7 @@
 typedef B = A;
 mixin M on A, B {}
 ''',
-      [error(CompileTimeErrorCode.onRepeated, 40, 1)],
+      [error(diag.onRepeated, 40, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/optional_parameter_in_operator_test.dart b/pkg/analyzer/test/src/diagnostics/optional_parameter_in_operator_test.dart
index 4a64e58..1dd7b1e 100644
--- a/pkg/analyzer/test/src/diagnostics/optional_parameter_in_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/optional_parameter_in_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   operator +({p}) {}
 }
 ''',
-      [error(CompileTimeErrorCode.optionalParameterInOperator, 24, 1)],
+      [error(diag.optionalParameterInOperator, 24, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   operator +([p]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.optionalParameterInOperator, 24, 1)],
+      [error(diag.optionalParameterInOperator, 24, 1)],
     );
   }
 
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 2915292..25d9b0e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   int? foo;
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingField, 29, 3)],
+      [error(diag.overrideOnNonOverridingField, 29, 3)],
     );
   }
 
@@ -45,7 +45,7 @@
 }''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           131,
           1,
           contextMessages: [message(testFile, 39, 1)],
@@ -72,7 +72,7 @@
 }''',
       [
         error(
-          CompileTimeErrorCode.invalidOverrideSetter,
+          diag.invalidOverrideSetter,
           134,
           1,
           contextMessages: [message(testFile, 39, 1)],
@@ -90,7 +90,7 @@
   final int foo = 0;
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingField, 38, 3)],
+      [error(diag.overrideOnNonOverridingField, 38, 3)],
     );
   }
 
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 fa8e1ad..0240eb1 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   int get foo => 0;
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingGetter, 32, 3)],
+      [error(diag.overrideOnNonOverridingGetter, 32, 3)],
     );
   }
 
@@ -62,7 +62,7 @@
   int get foo => 0;
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingGetter, 36, 3)],
+      [error(diag.overrideOnNonOverridingGetter, 36, 3)],
     );
   }
 
@@ -102,7 +102,7 @@
   int get foo => 1;
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingGetter, 43, 3)],
+      [error(diag.overrideOnNonOverridingGetter, 43, 3)],
     );
   }
 
@@ -114,7 +114,7 @@
   int get foo => 0;
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingGetter, 32, 3)],
+      [error(diag.overrideOnNonOverridingGetter, 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 6298d9b..19b8dff 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
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +25,7 @@
   void foo() {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingMethod, 51, 3)],
+      [error(diag.overrideOnNonOverridingMethod, 51, 3)],
     );
   }
 
@@ -90,9 +89,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 6, 0),
-        error(WarningCode.overrideOnNonOverridingField, 32, 3),
-        error(ParserErrorCode.missingIdentifier, 36, 1),
+        error(diag.unusedField, 6, 0),
+        error(diag.overrideOnNonOverridingField, 32, 3),
+        error(diag.missingIdentifier, 36, 1),
       ],
     );
   }
@@ -134,7 +133,7 @@
   void foo() {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingMethod, 33, 3)],
+      [error(diag.overrideOnNonOverridingMethod, 33, 3)],
     );
   }
 
@@ -146,7 +145,7 @@
   void foo() {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingMethod, 40, 3)],
+      [error(diag.overrideOnNonOverridingMethod, 40, 3)],
     );
   }
 
@@ -160,7 +159,7 @@
   void foo() {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingMethod, 46, 3)],
+      [error(diag.overrideOnNonOverridingMethod, 46, 3)],
     );
   }
 
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 5f464b5..9b2c734e 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingSetter, 50, 3)],
+      [error(diag.overrideOnNonOverridingSetter, 50, 3)],
     );
   }
 
@@ -60,7 +60,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingSetter, 32, 3)],
+      [error(diag.overrideOnNonOverridingSetter, 32, 3)],
     );
   }
 
@@ -100,7 +100,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingSetter, 39, 3)],
+      [error(diag.overrideOnNonOverridingSetter, 39, 3)],
     );
   }
 
@@ -114,7 +114,7 @@
   set foo(int _) {}
 }
 ''',
-      [error(WarningCode.overrideOnNonOverridingSetter, 45, 3)],
+      [error(diag.overrideOnNonOverridingSetter, 45, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/packed_annotation_alignment_test.dart b/pkg/analyzer/test/src/diagnostics/packed_annotation_alignment_test.dart
index 5f873ac..790bd13 100644
--- a/pkg/analyzer/test/src/diagnostics/packed_annotation_alignment_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/packed_annotation_alignment_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   external Pointer<Uint8> notEmpty;
 }
 ''',
-      [error(FfiCode.packedAnnotationAlignment, 28, 1)],
+      [error(diag.packedAnnotationAlignment, 28, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/packed_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/packed_annotation_test.dart
index d63b1b2..43f6c67 100644
--- a/pkg/analyzer/test/src/diagnostics/packed_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/packed_annotation_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +26,7 @@
   external Pointer<Uint8> notEmpty;
 }
 ''',
-      [error(FfiCode.packedAnnotation, 31, 10)],
+      [error(diag.packedAnnotation, 31, 10)],
     );
   }
 
@@ -43,12 +42,8 @@
 }
 ''',
       [
-        error(FfiCode.packedAnnotationAlignment, 20, 9),
-        error(
-          CompileTimeErrorCode.notEnoughPositionalArgumentsNameSingular,
-          28,
-          1,
-        ),
+        error(diag.packedAnnotationAlignment, 20, 9),
+        error(diag.notEnoughPositionalArgumentsNameSingular, 28, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart b/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart
index 713042e..c515561 100644
--- a/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart
+++ b/pkg/analyzer/test/src/diagnostics/parser_diagnostics.dart
@@ -71,14 +71,6 @@
     );
   }
 
-  void setUp() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-  }
-
-  void tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-  }
-
   String _parsedNodeText(
     AstNode node, {
     required bool withOffsets,
diff --git a/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart b/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart
index 2ed2aa3..3f9fd3a 100644
--- a/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/part_of_non_part_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 library l1;
 part 'l2.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfNonPart, 17, 9)],
+      [error(diag.partOfNonPart, 17, 9)],
     );
   }
 
@@ -46,7 +46,7 @@
 library lib;
 part 'test.dart';
 ''',
-      [error(CompileTimeErrorCode.partOfNonPart, 18, 11)],
+      [error(diag.partOfNonPart, 18, 11)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/pattern_assignment_not_local_variable_test.dart b/pkg/analyzer/test/src/diagnostics/pattern_assignment_not_local_variable_test.dart
index e37fa60..811f437 100644
--- a/pkg/analyzer/test/src/diagnostics/pattern_assignment_not_local_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/pattern_assignment_not_local_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   (int) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 14, 3)],
+      [error(diag.patternAssignmentNotLocalVariable, 14, 3)],
     );
   }
 
@@ -37,7 +37,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 42, 1)],
+      [error(diag.patternAssignmentNotLocalVariable, 42, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 31, 1)],
+      [error(diag.patternAssignmentNotLocalVariable, 31, 1)],
     );
   }
 
@@ -61,7 +61,7 @@
   (dynamic) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 14, 7)],
+      [error(diag.patternAssignmentNotLocalVariable, 14, 7)],
     );
   }
 
@@ -72,7 +72,7 @@
   (f) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 14, 1)],
+      [error(diag.patternAssignmentNotLocalVariable, 14, 1)],
     );
   }
 
@@ -85,7 +85,7 @@
   (x) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 26, 1)],
+      [error(diag.patternAssignmentNotLocalVariable, 26, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/pattern_never_matches_value_type_test.dart b/pkg/analyzer/test/src/diagnostics/pattern_never_matches_value_type_test.dart
index 839e07c..07400df 100644
--- a/pkg/analyzer/test/src/diagnostics/pattern_never_matches_value_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/pattern_never_matches_value_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (x case int _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 41, 3)],
+      [error(diag.patternNeverMatchesValueType, 41, 3)],
     );
   }
 
@@ -57,7 +57,7 @@
   if (x case (int,) _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 41, 6)],
+      [error(diag.patternNeverMatchesValueType, 41, 6)],
     );
   }
 
@@ -98,7 +98,7 @@
 final class A {}
 final class B {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 33, 7)],
+      [error(diag.patternNeverMatchesValueType, 33, 7)],
     );
   }
 
@@ -143,7 +143,7 @@
 
 final class C {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -172,7 +172,7 @@
 final class A3 implements A {}
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -246,7 +246,7 @@
 final class A extends R<num> {}
 class R<T> {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 6)],
+      [error(diag.patternNeverMatchesValueType, 27, 6)],
     );
   }
 
@@ -296,7 +296,7 @@
   if (x case FutureOr<B> _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 78, 11)],
+      [error(diag.patternNeverMatchesValueType, 78, 11)],
     );
   }
 
@@ -310,7 +310,7 @@
 final class A {}
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -481,7 +481,7 @@
 final class A3 implements A {}
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -497,7 +497,7 @@
 final class A3 implements A {}
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -546,7 +546,7 @@
 final class B {}
 final class C {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 30, 4)],
+      [error(diag.patternNeverMatchesValueType, 30, 4)],
     );
   }
 
@@ -573,7 +573,7 @@
 final class C {}
 final class D {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 4)],
+      [error(diag.patternNeverMatchesValueType, 27, 4)],
     );
   }
 
@@ -612,7 +612,7 @@
 final class C {}
 final class D {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 30, 1)],
+      [error(diag.patternNeverMatchesValueType, 30, 1)],
     );
   }
 
@@ -637,7 +637,7 @@
 class A {}
 final class B {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -666,7 +666,7 @@
 final class R1 extends R {}
 final class R2 extends R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -690,7 +690,7 @@
   if (x case void Function() _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 29, 15)],
+      [error(diag.patternNeverMatchesValueType, 29, 15)],
     );
   }
 
@@ -719,7 +719,7 @@
 
 class A {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 4)],
+      [error(diag.patternNeverMatchesValueType, 27, 4)],
     );
   }
 
@@ -749,7 +749,7 @@
 enum A { v }
 enum R { v }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -763,7 +763,7 @@
 enum A { v }
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 1)],
+      [error(diag.patternNeverMatchesValueType, 27, 1)],
     );
   }
 
@@ -814,7 +814,7 @@
 enum A implements R<num> { v }
 class R<T> {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 6)],
+      [error(diag.patternNeverMatchesValueType, 27, 6)],
     );
   }
 
@@ -832,7 +832,7 @@
 
 class R<T> {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 9)],
+      [error(diag.patternNeverMatchesValueType, 27, 9)],
     );
   }
 
@@ -876,7 +876,7 @@
 
 enum E<T> { v1<int>(), v2<double>() }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 34, 9)],
+      [error(diag.patternNeverMatchesValueType, 34, 9)],
     );
   }
 
@@ -899,7 +899,7 @@
   if (x case Future<(String,)> _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 64, 17)],
+      [error(diag.patternNeverMatchesValueType, 64, 17)],
     );
   }
 
@@ -922,7 +922,7 @@
   if (x case (String,) _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 64, 9)],
+      [error(diag.patternNeverMatchesValueType, 64, 9)],
     );
   }
 
@@ -945,7 +945,7 @@
   if (x case FutureOr<(String,)> _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 62, 19)],
+      [error(diag.patternNeverMatchesValueType, 62, 19)],
     );
   }
 
@@ -959,8 +959,8 @@
 class A {}
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 30, 1),
-        error(WarningCode.deadCode, 35, 2),
+        error(diag.patternNeverMatchesValueType, 30, 1),
+        error(diag.deadCode, 35, 2),
       ],
     );
   }
@@ -981,8 +981,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 30, 6),
-        error(WarningCode.deadCode, 40, 2),
+        error(diag.patternNeverMatchesValueType, 30, 6),
+        error(diag.deadCode, 40, 2),
       ],
     );
   }
@@ -1006,7 +1006,7 @@
   if (x case FutureOr<(String,)> _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 54, 19)],
+      [error(diag.patternNeverMatchesValueType, 54, 19)],
     );
   }
 
@@ -1017,7 +1017,7 @@
   if (x case ({int f1, int f2,}) _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 37, 19)],
+      [error(diag.patternNeverMatchesValueType, 37, 19)],
     );
   }
 
@@ -1028,7 +1028,7 @@
   if (x case ({int f1, int f2,}) _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 42, 19)],
+      [error(diag.patternNeverMatchesValueType, 42, 19)],
     );
   }
 
@@ -1042,7 +1042,7 @@
 final class A {}
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 35, 9)],
+      [error(diag.patternNeverMatchesValueType, 35, 9)],
     );
   }
 
@@ -1064,7 +1064,7 @@
   if (x case (int, String) _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 32, 13)],
+      [error(diag.patternNeverMatchesValueType, 32, 13)],
     );
   }
 
@@ -1078,7 +1078,7 @@
 final class A {}
 class R {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 30, 4)],
+      [error(diag.patternNeverMatchesValueType, 30, 4)],
     );
   }
 
@@ -1089,7 +1089,7 @@
   if (x case void Function() _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 32, 15)],
+      [error(diag.patternNeverMatchesValueType, 32, 15)],
     );
   }
 
@@ -1102,7 +1102,7 @@
 
 class A {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 30, 1)],
+      [error(diag.patternNeverMatchesValueType, 30, 1)],
     );
   }
 
@@ -1137,7 +1137,7 @@
   if (x case _ as int) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 37, 3)],
+      [error(diag.patternNeverMatchesValueType, 37, 3)],
     );
   }
 
@@ -1148,7 +1148,7 @@
   if (x case int a) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 33, 1)],
+      [error(diag.unusedLocalVariable, 33, 1)],
     );
   }
 
@@ -1160,8 +1160,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 32, 3),
-        error(WarningCode.unusedLocalVariable, 36, 1),
+        error(diag.patternNeverMatchesValueType, 32, 3),
+        error(diag.unusedLocalVariable, 36, 1),
       ],
     );
   }
@@ -1181,7 +1181,7 @@
   if (x case <int>[]) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 29, 7)],
+      [error(diag.patternNeverMatchesValueType, 29, 7)],
     );
   }
 
@@ -1200,7 +1200,7 @@
   if (x case <int, String>{0: _}) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 29, 19)],
+      [error(diag.patternNeverMatchesValueType, 29, 19)],
     );
   }
 
@@ -1219,7 +1219,7 @@
   if (x case int()) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 32, 3)],
+      [error(diag.patternNeverMatchesValueType, 32, 3)],
     );
   }
 
@@ -1233,7 +1233,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 48, 1)],
+      [error(diag.unusedLocalVariable, 48, 1)],
     );
   }
 
@@ -1248,9 +1248,9 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 43, 16),
-        error(WarningCode.unusedLocalVariable, 48, 2),
-        error(WarningCode.unusedLocalVariable, 56, 2),
+        error(diag.patternNeverMatchesValueType, 43, 16),
+        error(diag.unusedLocalVariable, 48, 2),
+        error(diag.unusedLocalVariable, 56, 2),
       ],
     );
   }
@@ -1270,7 +1270,7 @@
   if (x case int _) {}
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 32, 3)],
+      [error(diag.patternNeverMatchesValueType, 32, 3)],
     );
   }
 
@@ -1284,8 +1284,8 @@
 class A {}
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 27, 4),
-        error(WarningCode.deadCode, 35, 2),
+        error(diag.patternNeverMatchesValueType, 27, 4),
+        error(diag.deadCode, 35, 2),
       ],
     );
   }
@@ -1298,8 +1298,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 41, 4),
-        error(WarningCode.deadCode, 49, 2),
+        error(diag.patternNeverMatchesValueType, 41, 4),
+        error(diag.deadCode, 49, 2),
       ],
     );
   }
@@ -1312,8 +1312,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 32, 4),
-        error(WarningCode.deadCode, 40, 2),
+        error(diag.patternNeverMatchesValueType, 32, 4),
+        error(diag.deadCode, 40, 2),
       ],
     );
   }
@@ -1326,8 +1326,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 42, 4),
-        error(WarningCode.deadCode, 50, 2),
+        error(diag.patternNeverMatchesValueType, 42, 4),
+        error(diag.deadCode, 50, 2),
       ],
     );
   }
@@ -1389,7 +1389,7 @@
 final class A {}
 final class B {}
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 27, 2)],
+      [error(diag.patternNeverMatchesValueType, 27, 2)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/pattern_type_mismatch_in_irrefutable_context_test.dart b/pkg/analyzer/test/src/diagnostics/pattern_type_mismatch_in_irrefutable_context_test.dart
index c6f4c97..550d15c 100644
--- a/pkg/analyzer/test/src/diagnostics/pattern_type_mismatch_in_irrefutable_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/pattern_type_mismatch_in_irrefutable_context_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +27,7 @@
   int call(int x) => x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          41,
-          1,
-        ),
-      ],
+      [error(diag.patternTypeMismatchInIrrefutableContext, 41, 1)],
     );
   }
 
@@ -60,13 +54,7 @@
   (a) = x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          26,
-          1,
-        ),
-      ],
+      [error(diag.patternTypeMismatchInIrrefutableContext, 26, 1)],
     );
   }
 
@@ -82,12 +70,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          24,
-          19,
-        ),
-        error(WarningCode.unusedLocalVariable, 42, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 24, 19),
+        error(diag.unusedLocalVariable, 42, 1),
       ],
     );
   }
@@ -99,7 +83,7 @@
   var (int a) = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 31, 1)],
+      [error(diag.unusedLocalVariable, 31, 1)],
     );
   }
 
@@ -110,7 +94,7 @@
   var (num a) = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 27, 1)],
+      [error(diag.unusedLocalVariable, 27, 1)],
     );
   }
 
@@ -122,12 +106,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          23,
-          5,
-        ),
-        error(WarningCode.unusedLocalVariable, 27, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 23, 5),
+        error(diag.unusedLocalVariable, 27, 1),
       ],
     );
   }
@@ -140,12 +120,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          31,
-          8,
-        ),
-        error(WarningCode.unusedLocalVariable, 37, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 31, 8),
+        error(diag.unusedLocalVariable, 37, 1),
       ],
     );
   }
@@ -158,12 +134,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          25,
-          3,
-        ),
-        error(WarningCode.unusedLocalVariable, 26, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 25, 3),
+        error(diag.unusedLocalVariable, 26, 1),
       ],
     );
   }
@@ -176,12 +148,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          25,
-          19,
-        ),
-        error(WarningCode.unusedLocalVariable, 42, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 25, 19),
+        error(diag.unusedLocalVariable, 42, 1),
       ],
     );
   }
@@ -194,12 +162,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          25,
-          17,
-        ),
-        error(WarningCode.unusedLocalVariable, 40, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 25, 17),
+        error(diag.unusedLocalVariable, 40, 1),
       ],
     );
   }
@@ -211,13 +175,7 @@
   (a) = 1.2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          19,
-          1,
-        ),
-      ],
+      [error(diag.patternTypeMismatchInIrrefutableContext, 19, 1)],
     );
   }
 
@@ -229,12 +187,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          25,
-          4,
-        ),
-        error(WarningCode.unusedLocalVariable, 26, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 25, 4),
+        error(diag.unusedLocalVariable, 26, 1),
       ],
     );
   }
@@ -247,12 +201,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.patternTypeMismatchInIrrefutableContext,
-          30,
-          4,
-        ),
-        error(WarningCode.unusedLocalVariable, 31, 1),
+        error(diag.patternTypeMismatchInIrrefutableContext, 30, 4),
+        error(diag.unusedLocalVariable, 31, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/pattern_variable_assignment_inside_guard_test.dart b/pkg/analyzer/test/src/diagnostics/pattern_variable_assignment_inside_guard_test.dart
index f432447..438a3d6 100644
--- a/pkg/analyzer/test/src/diagnostics/pattern_variable_assignment_inside_guard_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/pattern_variable_assignment_inside_guard_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,8 +27,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 68, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.patternVariableAssignmentInsideGuard, 68, 1),
       ],
     );
   }
@@ -44,8 +44,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 49, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.patternVariableAssignmentInsideGuard, 49, 1),
       ],
     );
   }
@@ -58,8 +58,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 41, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.patternVariableAssignmentInsideGuard, 41, 1),
       ],
     );
   }
@@ -71,7 +71,7 @@
   if (x case var a when (a += 1) > 0) {}
 }
 ''',
-      [error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 41, 1)],
+      [error(diag.patternVariableAssignmentInsideGuard, 41, 1)],
     );
   }
 
@@ -83,10 +83,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(WarningCode.deadCode, 35, 8),
-        error(WarningCode.unusedLocalVariable, 42, 1),
-        error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 50, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.deadCode, 35, 8),
+        error(diag.unusedLocalVariable, 42, 1),
+        error(diag.patternVariableAssignmentInsideGuard, 50, 1),
       ],
     );
   }
@@ -98,7 +98,7 @@
   if (x case var a when (a++) > 0) {}
 }
 ''',
-      [error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 41, 1)],
+      [error(diag.patternVariableAssignmentInsideGuard, 41, 1)],
     );
   }
 
@@ -109,7 +109,7 @@
   if (x case var a when (++a) > 0) {}
 }
 ''',
-      [error(CompileTimeErrorCode.patternVariableAssignmentInsideGuard, 43, 1)],
+      [error(diag.patternVariableAssignmentInsideGuard, 43, 1)],
     );
   }
 
@@ -132,7 +132,7 @@
   if (x case var a when (b = 1) > 0) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 80, 1)],
+      [error(diag.unusedLocalVariable, 80, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/positional_super_formal_parameter_with_positional_argument_test.dart b/pkg/analyzer/test/src/diagnostics/positional_super_formal_parameter_with_positional_argument_test.dart
index da70784..bf33e19 100644
--- a/pkg/analyzer/test/src/diagnostics/positional_super_formal_parameter_with_positional_argument_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/positional_super_formal_parameter_with_positional_argument_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -41,14 +41,7 @@
   B(super.b) : super(0);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .positionalSuperFormalParameterWithPositionalArgument,
-          62,
-          1,
-        ),
-      ],
+      [error(diag.positionalSuperFormalParameterWithPositionalArgument, 62, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
index 3432983..4e082c9 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_collides_with_top_level_member_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,9 +22,9 @@
 typedef foo = void Function();
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
+        error(diag.unusedImport, 7, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           22,
           3,
           contextMessages: [message(testFile, 35, 3)],
@@ -39,7 +39,7 @@
 import 'dart:math' as foo;
 void bar() {}
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
@@ -50,9 +50,9 @@
 void foo() {}
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
+        error(diag.unusedImport, 7, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           22,
           3,
           contextMessages: [message(testFile, 32, 3)],
@@ -68,9 +68,9 @@
 int get foo => 0;
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
+        error(diag.unusedImport, 7, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           22,
           3,
           contextMessages: [message(testFile, 35, 3)],
@@ -86,9 +86,9 @@
 set foo(int _) {}
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
+        error(diag.unusedImport, 7, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           22,
           3,
           contextMessages: [message(testFile, 31, 3)],
@@ -104,9 +104,9 @@
 var foo = 0;
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
+        error(diag.unusedImport, 7, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           22,
           3,
           contextMessages: [message(testFile, 31, 3)],
@@ -122,9 +122,9 @@
 class foo {}
 ''',
       [
-        error(WarningCode.unusedImport, 7, 11),
+        error(diag.unusedImport, 7, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           22,
           3,
           contextMessages: [message(testFile, 33, 3)],
@@ -145,9 +145,9 @@
 import 'dart:math' as foo;
 ''',
       [
-        error(WarningCode.unusedImport, 25, 11),
+        error(diag.unusedImport, 25, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           40,
           3,
           contextMessages: [message(a, 23, 3)],
@@ -168,9 +168,9 @@
 void foo() {}
 ''',
       [
-        error(WarningCode.unusedImport, 25, 11),
+        error(diag.unusedImport, 25, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           40,
           3,
           contextMessages: [message(testFile, 50, 3)],
@@ -196,9 +196,9 @@
 import 'dart:math' as foo;
 ''',
       [
-        error(WarningCode.unusedImport, 25, 11),
+        error(diag.unusedImport, 25, 11),
         error(
-          CompileTimeErrorCode.prefixCollidesWithTopLevelMember,
+          diag.prefixCollidesWithTopLevelMember,
           40,
           3,
           contextMessages: [message(b, 23, 3)],
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart
index 42c1cdb..52cceb5 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_identifier_not_followed_by_dot_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 46, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 46, 1)],
     );
   }
 
@@ -43,7 +43,7 @@
   p += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 32, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 32, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 46, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 46, 1)],
     );
   }
 
@@ -79,7 +79,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 85, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 85, 1)],
     );
   }
 
@@ -94,7 +94,7 @@
   p = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 32, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 32, 1)],
     );
   }
 
@@ -109,7 +109,7 @@
   p += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 32, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 32, 1)],
     );
   }
 
@@ -125,7 +125,7 @@
   p?.g();
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 32, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 32, 1)],
     );
   }
 
@@ -140,7 +140,7 @@
   p?.loadLibrary();
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 41, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 41, 1)],
     );
   }
 
@@ -156,7 +156,7 @@
   return p?.x;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 39, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 39, 1)],
     );
   }
 
@@ -171,7 +171,7 @@
   return p?.loadLibrary;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 48, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 48, 1)],
     );
   }
 
@@ -187,7 +187,7 @@
   p?.x = null;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 32, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 32, 1)],
     );
   }
 
@@ -202,7 +202,7 @@
   p?.loadLibrary = null;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 41, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 41, 1)],
     );
   }
 
@@ -217,7 +217,7 @@
   return p;
 }
 ''',
-      [error(CompileTimeErrorCode.prefixIdentifierNotFollowedByDot, 39, 1)],
+      [error(diag.prefixIdentifierNotFollowedByDot, 39, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart
index 87e9103..e3a6a56 100644
--- a/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/prefix_shadowed_by_local_declaration_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,8 +34,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedImport, 7, 12),
-        error(CompileTimeErrorCode.prefixShadowedByLocalDeclaration, 39, 1),
+        error(diag.unusedImport, 7, 12),
+        error(diag.prefixShadowedByLocalDeclaration, 39, 1),
       ],
     );
   }
@@ -51,14 +51,14 @@
 }
 ''',
       [
-        error(WarningCode.unusedImport, 7, 12),
+        error(diag.unusedImport, 7, 12),
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           34,
           1,
           contextMessages: [message(testFile, 60, 1)],
         ),
-        error(CompileTimeErrorCode.prefixShadowedByLocalDeclaration, 34, 1),
+        error(diag.prefixShadowedByLocalDeclaration, 34, 1),
       ],
     );
   }
@@ -74,8 +74,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedImport, 7, 12),
-        error(CompileTimeErrorCode.prefixShadowedByLocalDeclaration, 47, 1),
+        error(diag.unusedImport, 7, 12),
+        error(diag.prefixShadowedByLocalDeclaration, 47, 1),
       ],
     );
   }
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 b512a9a..766e841 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -62,7 +62,7 @@
 
 class C extends Object with A, B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 49, 1)],
+      [error(diag.privateCollisionInMixinApplication, 49, 1)],
     );
   }
 
@@ -84,7 +84,7 @@
 class C extends Object with A {}
 class D extends C with B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 74, 1)],
+      [error(diag.privateCollisionInMixinApplication, 74, 1)],
     );
   }
 
@@ -106,7 +106,7 @@
 class C extends Object with A {}
 class D extends C with B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 74, 1)],
+      [error(diag.privateCollisionInMixinApplication, 74, 1)],
     );
   }
 
@@ -127,7 +127,7 @@
 
 class C extends Object with A, B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 49, 1)],
+      [error(diag.privateCollisionInMixinApplication, 49, 1)],
     );
   }
 
@@ -148,7 +148,7 @@
 
 class C with A, B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 34, 1)],
+      [error(diag.privateCollisionInMixinApplication, 34, 1)],
     );
   }
 
@@ -169,7 +169,7 @@
 
 class C with A, B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 34, 1)],
+      [error(diag.privateCollisionInMixinApplication, 34, 1)],
     );
   }
 
@@ -262,7 +262,7 @@
 
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 41, 1)],
+      [error(diag.privateCollisionInMixinApplication, 41, 1)],
     );
   }
 
@@ -283,7 +283,7 @@
 
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 41, 1)],
+      [error(diag.privateCollisionInMixinApplication, 41, 1)],
     );
   }
 
@@ -304,7 +304,7 @@
 
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 41, 1)],
+      [error(diag.privateCollisionInMixinApplication, 41, 1)],
     );
   }
 
@@ -325,7 +325,7 @@
 
 class C extends A with B {}
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 41, 1)],
+      [error(diag.privateCollisionInMixinApplication, 41, 1)],
     );
   }
 
@@ -342,10 +342,7 @@
 
 class C extends Object with A, B {}
 ''',
-      [
-        error(WarningCode.unusedElement, 17, 4),
-        error(WarningCode.unusedElement, 47, 4),
-      ],
+      [error(diag.unusedElement, 17, 4), error(diag.unusedElement, 47, 4)],
     );
   }
 
@@ -362,10 +359,7 @@
 
 class C extends Object with A, B {}
 ''',
-      [
-        error(WarningCode.unusedElement, 23, 4),
-        error(WarningCode.unusedElement, 59, 4),
-      ],
+      [error(diag.unusedElement, 23, 4), error(diag.unusedElement, 59, 4)],
     );
   }
 
@@ -388,7 +382,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.privateCollisionInMixinApplication,
+          diag.privateCollisionInMixinApplication,
           41,
           1,
           messageContains: ["'_foo'"],
@@ -416,7 +410,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.privateCollisionInMixinApplication,
+          diag.privateCollisionInMixinApplication,
           41,
           1,
           messageContains: ["'_foo'"],
@@ -442,7 +436,7 @@
 
 class C = Object with A, B;
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 43, 1)],
+      [error(diag.privateCollisionInMixinApplication, 43, 1)],
     );
   }
 
@@ -464,7 +458,7 @@
 class C = Object with A;
 class D = C with B;
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 60, 1)],
+      [error(diag.privateCollisionInMixinApplication, 60, 1)],
     );
   }
 
@@ -486,7 +480,7 @@
 class C = Object with A;
 class D = C with B;
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 60, 1)],
+      [error(diag.privateCollisionInMixinApplication, 60, 1)],
     );
   }
 
@@ -507,7 +501,7 @@
 
 class C = Object with A, B;
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 43, 1)],
+      [error(diag.privateCollisionInMixinApplication, 43, 1)],
     );
   }
 
@@ -528,7 +522,7 @@
 
 class C = A with B;
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 35, 1)],
+      [error(diag.privateCollisionInMixinApplication, 35, 1)],
     );
   }
 
@@ -549,7 +543,7 @@
 
 class C = A with B;
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 35, 1)],
+      [error(diag.privateCollisionInMixinApplication, 35, 1)],
     );
   }
 
@@ -572,7 +566,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 33, 1)],
+      [error(diag.privateCollisionInMixinApplication, 33, 1)],
     );
   }
 
@@ -612,7 +606,7 @@
   v
 }
 ''',
-      [error(CompileTimeErrorCode.privateCollisionInMixinApplication, 33, 1)],
+      [error(diag.privateCollisionInMixinApplication, 33, 1)],
     );
   }
 
@@ -657,7 +651,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.privateCollisionInMixinApplication,
+          diag.privateCollisionInMixinApplication,
           33,
           1,
           messageContains: ["'_foo'"],
diff --git a/pkg/analyzer/test/src/diagnostics/private_optional_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/private_optional_parameter_test.dart
index 4cbacc5..34b76fd 100644
--- a/pkg/analyzer/test/src/diagnostics/private_optional_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/private_optional_parameter_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +23,7 @@
   A({this._p = 0});
 }
 ''',
-      [error(WarningCode.unusedField, 17, 2)],
+      [error(diag.unusedField, 17, 2)],
     );
   }
 
@@ -33,7 +32,7 @@
       '''
 f({var _p}) {}
 ''',
-      [error(ParserErrorCode.privateNamedNonFieldParameter, 7, 2)],
+      [error(diag.privateNamedNonFieldParameter, 7, 2)],
     );
   }
 
@@ -44,7 +43,7 @@
   C({int? _notField});
 }
 ''',
-      [error(ParserErrorCode.privateNamedNonFieldParameter, 20, 9)],
+      [error(diag.privateNamedNonFieldParameter, 20, 9)],
     );
   }
 
@@ -57,12 +56,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 17, 4),
-        error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          33,
-          4,
-        ),
+        error(diag.unusedField, 17, 4),
+        error(diag.privateNamedParameterWithoutPublicName, 33, 4),
       ],
     );
   }
@@ -77,8 +72,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 31, 4),
-        error(ParserErrorCode.experimentNotEnabledOffByDefault, 47, 4),
+        error(diag.unusedField, 31, 4),
+        error(diag.experimentNotEnabledOffByDefault, 47, 4),
       ],
     );
   }
@@ -92,12 +87,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 17, 4),
-        error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          33,
-          4,
-        ),
+        error(diag.unusedField, 17, 4),
+        error(diag.privateNamedParameterWithoutPublicName, 33, 4),
       ],
     );
   }
@@ -111,12 +102,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 17, 14),
-        error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          43,
-          14,
-        ),
+        error(diag.unusedField, 17, 14),
+        error(diag.privateNamedParameterWithoutPublicName, 43, 14),
       ],
     );
   }
@@ -130,12 +117,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedField, 17, 1),
-        error(
-          CompileTimeErrorCode.privateNamedParameterWithoutPublicName,
-          30,
-          1,
-        ),
+        error(diag.unusedField, 17, 1),
+        error(diag.privateNamedParameterWithoutPublicName, 30, 1),
       ],
     );
   }
@@ -145,7 +128,7 @@
       '''
 f({_p = 0}) {}
 ''',
-      [error(ParserErrorCode.privateNamedNonFieldParameter, 3, 2)],
+      [error(diag.privateNamedNonFieldParameter, 3, 2)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/private_setter_test.dart b/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
index 67e6107..655741f 100644
--- a/pkg/analyzer/test/src/diagnostics/private_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/private_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
   A._foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.privateSetter, 31, 4)],
+      [error(diag.privateSetter, 31, 4)],
     );
 
     var assignment = findNode.assignment('_foo =');
@@ -90,7 +90,7 @@
   A._foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.privateSetter, 31, 4)],
+      [error(diag.privateSetter, 31, 4)],
     );
 
     var assignment = findNode.assignment('_foo =');
@@ -136,7 +136,7 @@
   A._foo = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.privateSetter, 31, 4)],
+      [error(diag.privateSetter, 31, 4)],
     );
 
     var assignment = findNode.assignment('_foo =');
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 e530f8d..8efae1d 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,10 +22,7 @@
   (throw '') == 1 + 2;
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 13, 10),
-        error(WarningCode.deadCode, 24, 8),
-      ],
+      [error(diag.receiverOfTypeNever, 13, 10), error(diag.deadCode, 24, 8)],
     );
 
     assertResolvedNodeText(findNode.binary('=='), r'''
@@ -66,10 +63,7 @@
   x == 1 + 2;
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 22, 8),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 22, 8)],
     );
 
     assertResolvedNodeText(findNode.binary('x =='), r'''
@@ -105,10 +99,7 @@
   x + (1 + 2);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 22, 9),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 22, 9)],
     );
 
     assertResolvedNodeText(findNode.binary('x +'), r'''
@@ -181,13 +172,7 @@
   x + (1 + 2);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-          23,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedOperatorInvocationOfNullableValue, 23, 1)],
     );
 
     assertResolvedNodeText(findNode.binary('x +'), r'''
@@ -227,10 +212,7 @@
   (throw '') + (1 + 2);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 13, 10),
-        error(WarningCode.deadCode, 24, 9),
-      ],
+      [error(diag.receiverOfTypeNever, 13, 10), error(diag.deadCode, 24, 9)],
     );
 
     assertResolvedNodeText(findNode.binary('+ ('), r'''
@@ -293,10 +275,7 @@
   x();
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 21, 3),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 21, 3)],
     );
   }
 
@@ -307,7 +286,7 @@
   x();
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 21, 1)],
+      [error(diag.uncheckedInvocationOfNullableValue, 21, 1)],
     );
   }
 
@@ -318,10 +297,7 @@
   x[0];
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 22, 3),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 22, 3)],
     );
 
     assertResolvedNodeText(findNode.index('x[0]'), r'''
@@ -348,10 +324,7 @@
   x[0] += 1 + 2;
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 22, 12),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 22, 12)],
     );
 
     var assignment = findNode.assignment('[0] +=');
@@ -400,10 +373,7 @@
   x[0] = 1 + 2;
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 22, 11),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 22, 11)],
     );
 
     assertResolvedNodeText(findNode.assignment('x[0]'), r'''
@@ -451,13 +421,7 @@
   x[0];
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          22,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 22, 1)],
     );
 
     assertResolvedNodeText(findNode.index('x[0]'), r'''
@@ -484,13 +448,7 @@
   x[0] += 1 + 2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          22,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 22, 1)],
     );
 
     var assignment = findNode.assignment('[0] +=');
@@ -539,13 +497,7 @@
   x[0] = 1 + 2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          22,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 22, 1)],
     );
 
     assertResolvedNodeText(findNode.assignment('x[0]'), r'''
@@ -601,10 +553,7 @@
   x.foo(1 + 2);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 25, 8),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 25, 8)],
     );
 
     var node = findNode.methodInvocation('.foo(1 + 2)');
@@ -648,10 +597,7 @@
   x.toString(1 + 2);
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 20, 1),
-        error(WarningCode.deadCode, 30, 8),
-      ],
+      [error(diag.receiverOfTypeNever, 20, 1), error(diag.deadCode, 30, 8)],
     );
 
     var node = findNode.methodInvocation('.toString(1 + 2)');
@@ -695,7 +641,7 @@
   x.toString(1 + 2);
 }
 ''',
-      [error(CompileTimeErrorCode.extraPositionalArguments, 32, 5)],
+      [error(diag.extraPositionalArguments, 32, 5)],
     );
 
     var node = findNode.methodInvocation('.toString(1 + 2)');
@@ -739,10 +685,7 @@
   (throw '').toString();
 }
 ''',
-      [
-        error(WarningCode.receiverOfTypeNever, 13, 10),
-        error(WarningCode.deadCode, 32, 3),
-      ],
+      [error(diag.receiverOfTypeNever, 13, 10), error(diag.deadCode, 32, 3)],
     );
 
     var node = findNode.methodInvocation('toString()');
@@ -777,7 +720,7 @@
   x++;
 }
 ''',
-      [error(WarningCode.receiverOfTypeNever, 20, 1)],
+      [error(diag.receiverOfTypeNever, 20, 1)],
     );
 
     assertResolvedNodeText(findNode.postfix('x++'), r'''
@@ -803,13 +746,7 @@
   x++;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          22,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 22, 2)],
     );
 
     assertResolvedNodeText(findNode.postfix('x++'), r'''
@@ -836,7 +773,7 @@
   ++x;
 }
 ''',
-      [error(WarningCode.receiverOfTypeNever, 22, 1)],
+      [error(diag.receiverOfTypeNever, 22, 1)],
     );
 
     assertResolvedNodeText(findNode.prefix('++x'), r'''
@@ -862,13 +799,7 @@
   ++x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          21,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 21, 2)],
     );
 
     assertResolvedNodeText(findNode.prefix('++x'), r'''
@@ -894,7 +825,7 @@
   x.foo;
 }
 ''',
-      [error(WarningCode.deadCode, 22, 4)],
+      [error(diag.deadCode, 22, 4)],
     );
 
     var node = findNode.singlePrefixedIdentifier;
@@ -921,7 +852,7 @@
   x.hashCode;
 }
 ''',
-      [error(WarningCode.deadCode, 22, 9)],
+      [error(diag.deadCode, 22, 9)],
     );
 
     var node = findNode.singlePrefixedIdentifier;
@@ -948,7 +879,7 @@
   x.foo += 0;
 }
 ''',
-      [error(WarningCode.deadCode, 29, 2)],
+      [error(diag.deadCode, 29, 2)],
     );
 
     var assignment = findNode.assignment('foo += 0');
@@ -987,7 +918,7 @@
   x.toString;
 }
 ''',
-      [error(WarningCode.deadCode, 22, 9)],
+      [error(diag.deadCode, 22, 9)],
     );
 
     var node = findNode.singlePrefixedIdentifier;
@@ -1014,7 +945,7 @@
   x.foo = 0;
 }
 ''',
-      [error(WarningCode.deadCode, 28, 2)],
+      [error(diag.deadCode, 28, 2)],
     );
 
     var assignment = findNode.assignment('foo = 0');
@@ -1053,13 +984,7 @@
   x.foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          23,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 23, 3)],
     );
 
     var node = findNode.singlePrefixedIdentifier;
@@ -1134,7 +1059,7 @@
   (throw '').toString;
 }
 ''',
-      [error(WarningCode.deadCode, 24, 9)],
+      [error(diag.deadCode, 24, 9)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -1165,7 +1090,7 @@
   (throw '').hashCode;
 }
 ''',
-      [error(WarningCode.deadCode, 24, 9)],
+      [error(diag.deadCode, 24, 9)],
     );
 
     var node = findNode.singlePropertyAccess;
diff --git a/pkg/analyzer/test/src/diagnostics/record_literal_one_positional_no_trailing_comma_test.dart b/pkg/analyzer/test/src/diagnostics/record_literal_one_positional_no_trailing_comma_test.dart
index 7bc23df..bda20eb 100644
--- a/pkg/analyzer/test/src/diagnostics/record_literal_one_positional_no_trailing_comma_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/record_literal_one_positional_no_trailing_comma_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   f((''));
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 24, 2)],
+      [error(diag.argumentTypeNotAssignable, 24, 2)],
     );
   }
 
@@ -34,7 +34,7 @@
   f(1);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 23, 1)],
+      [error(diag.argumentTypeNotAssignable, 23, 1)],
     );
   }
 
@@ -45,13 +45,7 @@
   f((1));
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          23,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 23, 3)],
     );
   }
 
@@ -70,7 +64,7 @@
   r = ('');
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 25, 4)],
+      [error(diag.invalidAssignment, 25, 4)],
     );
   }
 
@@ -81,7 +75,7 @@
   r = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 25, 1)],
+      [error(diag.invalidAssignment, 25, 1)],
     );
   }
 
@@ -92,13 +86,7 @@
   r = (1);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          25,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 25, 3)],
     );
   }
 
@@ -115,13 +103,7 @@
       '''
 (int,) r = (1);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          11,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 11, 3)],
     );
   }
 
@@ -130,7 +112,7 @@
       '''
 (int,) r = ('');
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 12, 2)],
+      [error(diag.invalidAssignment, 12, 2)],
     );
   }
 
@@ -147,7 +129,7 @@
   return 1;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 22, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 22, 1)],
     );
   }
 
@@ -158,13 +140,7 @@
   return (1);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          22,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 22, 3)],
     );
   }
 
@@ -173,7 +149,7 @@
       '''
 (int,) f() => ('');
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 14, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 14, 4)],
     );
   }
 
@@ -182,7 +158,7 @@
       '''
 (int,) f() => 1;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 14, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 14, 1)],
     );
   }
 
@@ -191,13 +167,7 @@
       '''
 (int,) f() => (1);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          14,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 14, 3)],
     );
   }
 
@@ -206,7 +176,7 @@
       '''
 (int,) f() { return (''); }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 20, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 20, 4)],
     );
   }
 
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 149b476f..2309d7b 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,8 +22,8 @@
 const y = x + 1;
 ''',
       [
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 6, 1),
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 23, 1),
+        error(diag.recursiveCompileTimeConstant, 6, 1),
+        error(diag.recursiveCompileTimeConstant, 23, 1),
       ],
     );
   }
@@ -36,7 +36,7 @@
   const E(Object a);
 }
 ''',
-      [error(CompileTimeErrorCode.recursiveCompileTimeConstant, 11, 1)],
+      [error(diag.recursiveCompileTimeConstant, 11, 1)],
     );
   }
 
@@ -49,8 +49,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 11, 2),
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 19, 2),
+        error(diag.recursiveCompileTimeConstant, 11, 2),
+        error(diag.recursiveCompileTimeConstant, 19, 2),
       ],
     );
   }
@@ -65,8 +65,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 29, 1),
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 55, 1),
+        error(diag.recursiveCompileTimeConstant, 29, 1),
+        error(diag.recursiveCompileTimeConstant, 55, 1),
       ],
     );
   }
@@ -88,7 +88,7 @@
       r'''
 const x = x;
 ''',
-      [error(CompileTimeErrorCode.recursiveCompileTimeConstant, 6, 1)],
+      [error(diag.recursiveCompileTimeConstant, 6, 1)],
     );
   }
 
@@ -101,7 +101,7 @@
   ],
 ];
 ''',
-      [error(CompileTimeErrorCode.recursiveCompileTimeConstant, 6, 5)],
+      [error(diag.recursiveCompileTimeConstant, 6, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_constant_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_constant_constructor_test.dart
index 97fb8f7..aee5e39 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_constant_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_constant_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,8 +24,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 18, 1),
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 31, 1),
+        error(diag.recursiveConstantConstructor, 18, 1),
+        error(diag.recursiveCompileTimeConstant, 31, 1),
       ],
     );
   }
@@ -40,8 +40,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveCompileTimeConstant, 6, 1),
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 39, 1),
+        error(diag.recursiveCompileTimeConstant, 6, 1),
+        error(diag.recursiveConstantConstructor, 39, 1),
       ],
     );
   }
@@ -54,7 +54,7 @@
   const A() : a = const A();
 }
 ''',
-      [error(CompileTimeErrorCode.recursiveConstantConstructor, 31, 1)],
+      [error(diag.recursiveConstantConstructor, 31, 1)],
     );
   }
 
@@ -71,8 +71,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 31, 1),
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 85, 1),
+        error(diag.recursiveConstantConstructor, 31, 1),
+        error(diag.recursiveConstantConstructor, 85, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_constructor_redirect_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_constructor_redirect_test.dart
index 2549aed..15b3aac 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_constructor_redirect_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_constructor_redirect_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   A() : this();
 }
 ''',
-      [error(CompileTimeErrorCode.recursiveConstructorRedirect, 18, 6)],
+      [error(diag.recursiveConstructorRedirect, 18, 6)],
     );
   }
 
@@ -35,8 +35,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveConstructorRedirect, 20, 8),
-        error(CompileTimeErrorCode.recursiveConstructorRedirect, 40, 8),
+        error(diag.recursiveConstructorRedirect, 20, 8),
+        error(diag.recursiveConstructorRedirect, 40, 8),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_factory_redirect_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_factory_redirect_test.dart
index 2ee51bd..eb1eebc 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_factory_redirect_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_factory_redirect_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   factory A() = A;
 }
 ''',
-      [error(CompileTimeErrorCode.recursiveFactoryRedirect, 26, 1)],
+      [error(diag.recursiveFactoryRedirect, 26, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   const C<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.recursiveFactoryRedirect, 35, 7)],
+      [error(diag.recursiveFactoryRedirect, 35, 7)],
     );
   }
 
@@ -57,12 +57,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 45, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 56, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 95, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 106, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 145, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveFactoryRedirect, 45, 1),
+        error(diag.recursiveInterfaceInheritance, 56, 1),
+        error(diag.recursiveFactoryRedirect, 95, 1),
+        error(diag.recursiveInterfaceInheritance, 106, 1),
+        error(diag.recursiveFactoryRedirect, 145, 1),
       ],
     );
   }
@@ -81,12 +81,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 39, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 50, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 83, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 94, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 127, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveFactoryRedirect, 39, 1),
+        error(diag.recursiveInterfaceInheritance, 50, 1),
+        error(diag.recursiveFactoryRedirect, 83, 1),
+        error(diag.recursiveInterfaceInheritance, 94, 1),
+        error(diag.recursiveFactoryRedirect, 127, 1),
       ],
     );
   }
@@ -105,12 +105,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 45, 7),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 62, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 101, 7),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 118, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 157, 7),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveFactoryRedirect, 45, 7),
+        error(diag.recursiveInterfaceInheritance, 62, 1),
+        error(diag.recursiveFactoryRedirect, 101, 7),
+        error(diag.recursiveInterfaceInheritance, 118, 1),
+        error(diag.recursiveFactoryRedirect, 157, 7),
       ],
     );
   }
@@ -131,11 +131,11 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.redirectToInvalidReturnType, 26, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 37, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 70, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 81, 1),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 117, 1),
+        error(diag.redirectToInvalidReturnType, 26, 1),
+        error(diag.recursiveInterfaceInheritance, 37, 1),
+        error(diag.recursiveFactoryRedirect, 70, 1),
+        error(diag.recursiveInterfaceInheritance, 81, 1),
+        error(diag.recursiveFactoryRedirect, 117, 1),
       ],
     );
   }
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
index 5545b93..6283925 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_extends_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_extends_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       r'''
 class A extends A {}
 ''',
-      [error(CompileTimeErrorCode.recursiveInterfaceInheritanceExtends, 6, 1)],
+      [error(diag.recursiveInterfaceInheritanceExtends, 6, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   bar();
 }
 ''',
-      [error(CompileTimeErrorCode.recursiveInterfaceInheritanceExtends, 6, 1)],
+      [error(diag.recursiveInterfaceInheritanceExtends, 6, 1)],
     );
   }
 
@@ -44,7 +44,7 @@
 class A {}
 augment class A extends A {}
 ''',
-      [error(CompileTimeErrorCode.recursiveInterfaceInheritanceExtends, 6, 1)],
+      [error(diag.recursiveInterfaceInheritanceExtends, 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
index eab23c1..9489ebe 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_implements_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_implements_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,13 +21,7 @@
       '''
 class A implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
-          6,
-          1,
-        ),
-      ],
+      [error(diag.recursiveInterfaceInheritanceImplements, 6, 1)],
     );
   }
 
@@ -38,13 +32,7 @@
 class A {}
 augment class A implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
-          6,
-          1,
-        ),
-      ],
+      [error(diag.recursiveInterfaceInheritanceImplements, 6, 1)],
     );
   }
 
@@ -54,13 +42,7 @@
 abstract class A implements A {}
 class B implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
-          15,
-          1,
-        ),
-      ],
+      [error(diag.recursiveInterfaceInheritanceImplements, 15, 1)],
     );
   }
 
@@ -71,13 +53,7 @@
 mixin M {}
 class B = A with M implements B;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recursiveInterfaceInheritanceImplements,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.recursiveInterfaceInheritanceImplements, 28, 1)],
     );
   }
 
@@ -87,8 +63,8 @@
 mixin A implements B {}
 mixin B implements A {}''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 30, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 30, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_on_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_on_test.dart
index 296297b..8e75a06 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_on_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_on_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       r'''
 mixin A on A {}
 ''',
-      [error(CompileTimeErrorCode.recursiveInterfaceInheritanceOn, 6, 1)],
+      [error(diag.recursiveInterfaceInheritanceOn, 6, 1)],
     );
   }
 
@@ -31,7 +31,7 @@
 mixin A {}
 augment mixin A on A {}
 ''',
-      [error(CompileTimeErrorCode.recursiveInterfaceInheritanceOn, 6, 1)],
+      [error(diag.recursiveInterfaceInheritanceOn, 6, 1)],
     );
   }
 
@@ -42,8 +42,8 @@
 mixin B on A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 22, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 22, 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 8ff03ac..ccc7c0f 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,8 +22,8 @@
 class B extends A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
   }
@@ -35,8 +35,8 @@
 class B implements A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
   }
@@ -48,8 +48,8 @@
 class B implements A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 30, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 30, 1),
       ],
     );
   }
@@ -61,8 +61,8 @@
 class B<T> implements A<T> {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 36, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 36, 1),
       ],
     );
   }
@@ -74,8 +74,8 @@
 class B<T> implements A<List<T>> {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 42, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 42, 1),
       ],
     );
   }
@@ -88,8 +88,8 @@
 class C implements A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 15, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 48, 1),
+        error(diag.recursiveInterfaceInheritance, 15, 1),
+        error(diag.recursiveInterfaceInheritance, 48, 1),
       ],
     );
   }
@@ -103,9 +103,9 @@
 class D implements A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 15, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 48, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 81, 1),
+        error(diag.recursiveInterfaceInheritance, 15, 1),
+        error(diag.recursiveInterfaceInheritance, 48, 1),
+        error(diag.recursiveInterfaceInheritance, 81, 1),
       ],
     );
   }
@@ -117,8 +117,8 @@
 mixin class M2 = Object with M1;
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 12, 2),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 45, 2),
+        error(diag.recursiveInterfaceInheritance, 12, 2),
+        error(diag.recursiveInterfaceInheritance, 45, 2),
       ],
     );
   }
@@ -133,8 +133,8 @@
 mixin M {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 26, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 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
index fc9ffbe..849e1e8 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_with_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_interface_inheritance_with_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,8 +23,8 @@
 augment class A with A {}
 ''',
       [
-        error(CompileTimeErrorCode.recursiveInterfaceInheritanceWith, 6, 1),
-        error(CompileTimeErrorCode.classUsedAsMixin, 47, 1),
+        error(diag.recursiveInterfaceInheritanceWith, 6, 1),
+        error(diag.classUsedAsMixin, 47, 1),
       ],
     );
   }
@@ -34,7 +34,7 @@
       r'''
 mixin class M = Object with M;
 ''',
-      [error(CompileTimeErrorCode.recursiveInterfaceInheritanceWith, 12, 1)],
+      [error(diag.recursiveInterfaceInheritanceWith, 12, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/redeclare_on_non_redeclaring_member_test.dart b/pkg/analyzer/test/src/diagnostics/redeclare_on_non_redeclaring_member_test.dart
index d386288..4d5bca8 100644
--- a/pkg/analyzer/test/src/diagnostics/redeclare_on_non_redeclaring_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redeclare_on_non_redeclaring_member_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -34,7 +34,7 @@
   int get i => 0;
 }
 ''',
-      [error(WarningCode.redeclareOnNonRedeclaringMember, 106, 1)],
+      [error(diag.redeclareOnNonRedeclaringMember, 106, 1)],
     );
   }
 
@@ -65,7 +65,7 @@
   void n() {}
 }
 ''',
-      [error(WarningCode.redeclareOnNonRedeclaringMember, 103, 1)],
+      [error(diag.redeclareOnNonRedeclaringMember, 103, 1)],
     );
   }
 
@@ -83,7 +83,7 @@
 ''',
       [
         // No REDECLARE_ON_NON_REDECLARING_MEMBER warning.
-        error(WarningCode.invalidAnnotationTarget, 72, 9),
+        error(diag.invalidAnnotationTarget, 72, 9),
       ],
     );
   }
@@ -117,10 +117,7 @@
   void _foo() {}
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 51, 4),
-        error(WarningCode.unusedElement, 122, 4),
-      ],
+      [error(diag.unusedElement, 51, 4), error(diag.unusedElement, 122, 4)],
     );
   }
 
@@ -138,7 +135,7 @@
 ''',
       [
         // No REDECLARE_ON_NON_REDECLARING_MEMBER warning.
-        error(WarningCode.invalidAnnotationTarget, 86, 9),
+        error(diag.invalidAnnotationTarget, 86, 9),
       ],
     );
   }
@@ -155,7 +152,7 @@
   set i(int i) {}
 }
 ''',
-      [error(WarningCode.redeclareOnNonRedeclaringMember, 102, 1)],
+      [error(diag.redeclareOnNonRedeclaringMember, 102, 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 aa8f77c..031f1ec 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,13 +23,7 @@
   A() : this.noSuchConstructor();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-          18,
-          24,
-        ),
-      ],
+      [error(diag.redirectGenerativeToMissingConstructor, 18, 24)],
     );
   }
 
@@ -41,13 +35,7 @@
   const E() : this.noSuchConstructor();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-          28,
-          24,
-        ),
-      ],
+      [error(diag.redirectGenerativeToMissingConstructor, 28, 24)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_generative_to_non_generative_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_generative_to_non_generative_constructor_test.dart
index 89bcd55..b2047f3 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_generative_to_non_generative_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_generative_to_non_generative_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,13 +24,7 @@
   factory A.x() => throw 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectGenerativeToNonGenerativeConstructor,
-          18,
-          8,
-        ),
-      ],
+      [error(diag.redirectGenerativeToNonGenerativeConstructor, 18, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_abstract_class_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_abstract_class_constructor_test.dart
index 5ea1706..5120ca6 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_abstract_class_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_abstract_class_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A._();
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToAbstractClassConstructor, 35, 3)],
+      [error(diag.redirectToAbstractClassConstructor, 35, 3)],
     );
   }
 
@@ -37,7 +37,7 @@
 
 abstract class B extends A {}
 ''',
-      [error(CompileTimeErrorCode.redirectToAbstractClassConstructor, 32, 1)],
+      [error(diag.redirectToAbstractClassConstructor, 32, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart
index 8bec8b5..fedb82a 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 class B {
   factory B() = A;
 }''',
-      [error(CompileTimeErrorCode.redirectToInvalidFunctionType, 65, 1)],
+      [error(diag.redirectToInvalidFunctionType, 65, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart
index 568fbd2..b9c3c64 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 class B {
   factory B() = A;
 }''',
-      [error(CompileTimeErrorCode.redirectToInvalidReturnType, 47, 1)],
+      [error(diag.redirectToInvalidReturnType, 47, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_missing_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_missing_constructor_test.dart
index 6e1773e..0299887 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_missing_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_missing_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 class B {
   factory B() = A.name;
 }''',
-      [error(CompileTimeErrorCode.redirectToMissingConstructor, 59, 6)],
+      [error(diag.redirectToMissingConstructor, 59, 6)],
     );
   }
 
@@ -37,7 +37,7 @@
 class B {
   factory B() = A;
 }''',
-      [error(CompileTimeErrorCode.redirectToMissingConstructor, 64, 1)],
+      [error(diag.redirectToMissingConstructor, 64, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart
index 951eb5f..747a99f 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_non_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   int A = 0;
   factory B() = A;
 }''',
-      [error(CompileTimeErrorCode.redirectToNonClass, 39, 1)],
+      [error(diag.redirectToNonClass, 39, 1)],
     );
   }
 
@@ -32,7 +32,7 @@
 class B {
   factory B() = A;
 }''',
-      [error(CompileTimeErrorCode.redirectToNonClass, 26, 1)],
+      [error(diag.redirectToNonClass, 26, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_non_const_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_non_const_constructor_test.dart
index 5f51be6..adf7636 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_non_const_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_non_const_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   const factory A.b() = A.a;
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToMissingConstructor, 34, 3)],
+      [error(diag.redirectToMissingConstructor, 34, 3)],
     );
   }
 
@@ -67,7 +67,7 @@
   const factory A.b() = A.a;
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToNonConstConstructor, 43, 3)],
+      [error(diag.redirectToNonConstConstructor, 43, 3)],
     );
   }
 
@@ -79,7 +79,7 @@
   const A.b() : this.a();
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToNonConstConstructor, 40, 1)],
+      [error(diag.redirectToNonConstConstructor, 40, 1)],
     );
   }
 
@@ -91,7 +91,7 @@
   const A.named() : this();
 }
 ''',
-      [error(CompileTimeErrorCode.redirectToNonConstConstructor, 37, 4)],
+      [error(diag.redirectToNonConstConstructor, 37, 4)],
     );
   }
 
@@ -103,13 +103,7 @@
   const A.b() : this.a();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectGenerativeToMissingConstructor,
-          26,
-          8,
-        ),
-      ],
+      [error(diag.redirectGenerativeToMissingConstructor, 26, 8)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_type_alias_expands_to_type_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_type_alias_expands_to_type_parameter_test.dart
index c9518ff..81c271a 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_type_alias_expands_to_type_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_type_alias_expands_to_type_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,13 +29,7 @@
   factory C() = B<A>.named;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectToTypeAliasExpandsToTypeParameter,
-          84,
-          1,
-        ),
-      ],
+      [error(diag.redirectToTypeAliasExpandsToTypeParameter, 84, 1)],
     );
   }
 
@@ -50,13 +44,7 @@
   factory C() = B<A>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectToTypeAliasExpandsToTypeParameter,
-          70,
-          1,
-        ),
-      ],
+      [error(diag.redirectToTypeAliasExpandsToTypeParameter, 70, 1)],
     );
   }
 
@@ -71,13 +59,7 @@
   factory C() = B;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.redirectToTypeAliasExpandsToTypeParameter,
-          70,
-          1,
-        ),
-      ],
+      [error(diag.redirectToTypeAliasExpandsToTypeParameter, 70, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart
index b11c384..aa1eee2 100644
--- a/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           24,
           1,
           contextMessages: [message(testFile, 34, 1)],
@@ -76,7 +76,7 @@
 }
 print(x) {}
 ''',
-      [error(WarningCode.unusedLocalVariable, 40, 1)],
+      [error(diag.unusedLocalVariable, 40, 1)],
     );
   }
 
@@ -92,7 +92,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           28,
           1,
           contextMessages: [message(testFile, 34, 1)],
@@ -113,7 +113,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           28,
           1,
           contextMessages: [message(testFile, 38, 1)],
@@ -136,7 +136,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           34,
           1,
           contextMessages: [message(testFile, 48, 1)],
@@ -160,7 +160,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           61,
           1,
           contextMessages: [message(testFile, 75, 1)],
@@ -193,7 +193,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           77,
           1,
           contextMessages: [message(testFile, 91, 1)],
@@ -225,7 +225,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           61,
           1,
           contextMessages: [message(testFile, 74, 1)],
@@ -258,7 +258,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           77,
           1,
           contextMessages: [message(testFile, 90, 1)],
@@ -290,7 +290,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           62,
           1,
           contextMessages: [message(testFile, 76, 1)],
@@ -323,7 +323,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           78,
           1,
           contextMessages: [message(testFile, 92, 1)],
@@ -355,7 +355,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           62,
           1,
           contextMessages: [message(testFile, 75, 1)],
@@ -388,7 +388,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           78,
           1,
           contextMessages: [message(testFile, 91, 1)],
@@ -414,7 +414,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           25,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -432,7 +432,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           19,
           1,
           contextMessages: [message(testFile, 15, 1)],
@@ -488,7 +488,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           23,
           6,
           contextMessages: [message(testFile, 44, 6)],
@@ -508,7 +508,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           23,
           6,
           contextMessages: [message(testFile, 44, 6)],
diff --git a/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart b/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart
index 008cfb6..08cb5a6 100644
--- a/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/refutable_pattern_in_irrefutable_context_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   var (0) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.refutablePatternInIrrefutableContext, 18, 1)],
+      [error(diag.refutablePatternInIrrefutableContext, 18, 1)],
     );
 
     var node = findNode.singlePatternVariableDeclaration;
@@ -55,8 +55,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.refutablePatternInIrrefutableContext, 18, 6),
-        error(WarningCode.deadCode, 20, 4),
+        error(diag.refutablePatternInIrrefutableContext, 18, 6),
+        error(diag.deadCode, 20, 4),
       ],
     );
 
@@ -92,7 +92,7 @@
   var (_?) = x;
 }
 ''',
-      [error(CompileTimeErrorCode.refutablePatternInIrrefutableContext, 24, 2)],
+      [error(diag.refutablePatternInIrrefutableContext, 24, 2)],
     );
 
     var node = findNode.singlePatternVariableDeclaration;
@@ -125,7 +125,7 @@
   var (> 0) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.refutablePatternInIrrefutableContext, 18, 3)],
+      [error(diag.refutablePatternInIrrefutableContext, 18, 3)],
     );
 
     var node = findNode.singlePatternVariableDeclaration;
diff --git a/pkg/analyzer/test/src/diagnostics/relational_pattern_operand_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/relational_pattern_operand_type_not_assignable_test.dart
index 90fd8fe..578db25 100644
--- a/pkg/analyzer/test/src/diagnostics/relational_pattern_operand_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/relational_pattern_operand_type_not_assignable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -84,13 +84,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.relationalPatternOperandTypeNotAssignable,
-          101,
-          1,
-        ),
-      ],
+      [error(diag.relationalPatternOperandTypeNotAssignable, 101, 1)],
     );
   }
 
@@ -133,7 +127,7 @@
   }
 }
 ''',
-      [error(WarningCode.deadCode, 65, 6)],
+      [error(diag.deadCode, 65, 6)],
     );
   }
 
@@ -166,13 +160,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.relationalPatternOperandTypeNotAssignable,
-          89,
-          1,
-        ),
-      ],
+      [error(diag.relationalPatternOperandTypeNotAssignable, 89, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/relational_pattern_operator_return_type_not_assignable_to_bool_test.dart b/pkg/analyzer/test/src/diagnostics/relational_pattern_operator_return_type_not_assignable_to_bool_test.dart
index 6f7bff9..0cb0a14 100644
--- a/pkg/analyzer/test/src/diagnostics/relational_pattern_operator_return_type_not_assignable_to_bool_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/relational_pattern_operator_return_type_not_assignable_to_bool_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -43,8 +43,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .relationalPatternOperatorReturnTypeNotAssignableToBool,
+          diag.relationalPatternOperatorReturnTypeNotAssignableToBool,
           67,
           1,
         ),
@@ -65,8 +64,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode
-              .relationalPatternOperatorReturnTypeNotAssignableToBool,
+          diag.relationalPatternOperatorReturnTypeNotAssignableToBool,
           70,
           1,
         ),
diff --git a/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart b/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart
index a68ec38..ccb3251 100644
--- a/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart
@@ -2,10 +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/analysis_rule/analysis_rule.dart';
-import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/lint_registration_mixin.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -13,63 +10,44 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ReplacedLintUseTest);
+    defineReflectiveTests(RemovedLintUseTest);
   });
 }
 
-class RemovedLint extends AnalysisRule {
-  RemovedLint()
-    : super(
-        name: 'removed_lint',
-        state: RuleState.removed(since: dart3),
-        description: '',
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => throw UnimplementedError();
-}
-
 @reflectiveTest
-class ReplacedLintUseTest extends PubPackageResolutionTest
+class RemovedLintUseTest extends PubPackageResolutionTest
     with LintRegistrationMixin {
   @override
   void setUp() {
     super.setUp();
-    registerLintRule(RemovedLint());
+
+    // TODO(paulberry): remove as part of fixing
+    // https://github.com/dart-lang/sdk/issues/62040.
+    writeTestPackageAnalysisOptionsFile('''
+linter:
+  rules:
+    - unnecessary_ignore
+''');
   }
 
-  @override
-  Future<void> tearDown() {
-    unregisterLintRules();
-    return super.tearDown();
-  }
-
-  @FailingTest(
-    reason: 'Diagnostic reporting disabled',
-    issue: 'https://github.com/dart-lang/sdk/issues/51214',
-  )
   test_file() async {
     await assertErrorsInCode(
       r'''
-// ignore_for_file: removed_lint
+// ignore_for_file: super_goes_last
 
 void f() { }
 ''',
-      [error(WarningCode.removedLintUse, 20, 12)],
+      [error(diag.removedLintUse, 20, 15)],
     );
   }
 
-  @FailingTest(
-    reason: 'Diagnostic reporting disabled',
-    issue: 'https://github.com/dart-lang/sdk/issues/51214',
-  )
   test_line() async {
     await assertErrorsInCode(
       r'''
-// ignore: removed_lint
+// ignore: super_goes_last
 void f() { }
 ''',
-      [error(WarningCode.removedLintUse, 11, 12)],
+      [error(diag.removedLintUse, 11, 15)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart b/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart
index 310f5fd..9b4a9d1 100644
--- a/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart
@@ -4,8 +4,9 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart'
+    as diag
+    hide removedLint;
 import 'package:analyzer/src/test_utilities/lint_registration_mixin.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -17,38 +18,38 @@
   });
 }
 
-class RemovedLint extends AnalysisRule {
-  RemovedLint()
-    : super(
-        name: 'removed_lint',
-        state: RuleState.removed(since: dart3, replacedBy: 'replacing_lint'),
-        description: '',
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => throw UnimplementedError();
-}
-
 @reflectiveTest
 class ReplacedLintUseTest extends PubPackageResolutionTest
     with LintRegistrationMixin {
   @override
   void setUp() {
     super.setUp();
-    registerLintRule(RemovedLint());
-    registerLintRule(ReplacingLint());
+
+    // TODO(paulberry): remove as part of fixing
+    // https://github.com/dart-lang/sdk/issues/62040.
+    writeTestPackageAnalysisOptionsFile('''
+linter:
+  rules:
+    - unnecessary_ignore
+''');
+
+    registerLintRule(
+      RemovedAnalysisRule(
+        name: 'removed_lint',
+        since: dart3,
+        replacedBy: 'replacing_lint',
+        description: '',
+      ),
+    );
+    registerLintRule(
+      RemovedAnalysisRule(
+        name: 'replacing_lint',
+        since: dart3,
+        description: '',
+      ),
+    );
   }
 
-  @override
-  Future<void> tearDown() {
-    unregisterLintRules();
-    return super.tearDown();
-  }
-
-  @FailingTest(
-    reason: 'Diagnostic reporting disabled',
-    issue: 'https://github.com/dart-lang/sdk/issues/51214',
-  )
   test_file() async {
     await assertErrorsInCode(
       r'''
@@ -56,33 +57,17 @@
 
 void f() { }
 ''',
-      [error(WarningCode.replacedLintUse, 20, 12)],
+      [error(diag.replacedLintUse, 20, 12)],
     );
   }
 
-  @FailingTest(
-    reason: 'Diagnostic reporting disabled',
-    issue: 'https://github.com/dart-lang/sdk/issues/51214',
-  )
   test_line() async {
     await assertErrorsInCode(
       r'''
 // ignore: removed_lint
 void f() { }
 ''',
-      [error(WarningCode.replacedLintUse, 11, 12)],
+      [error(diag.replacedLintUse, 11, 12)],
     );
   }
 }
-
-class ReplacingLint extends AnalysisRule {
-  ReplacingLint()
-    : super(
-        name: 'replacing_lint',
-        state: RuleState.removed(since: dart3),
-        description: '',
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => throw UnimplementedError();
-}
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 30522d6..abc7d1c 100644
--- a/pkg/analyzer/test/src/diagnostics/rethrow_outside_catch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/rethrow_outside_catch_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,7 +36,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.rethrowOutsideCatch, 47, 7)],
+      [error(diag.rethrowOutsideCatch, 47, 7)],
     );
   }
 
@@ -61,7 +61,7 @@
   rethrow;
 }
 ''',
-      [error(CompileTimeErrorCode.rethrowOutsideCatch, 13, 7)],
+      [error(diag.rethrowOutsideCatch, 13, 7)],
     );
 
     var node = findNode.singleRethrowExpression;
diff --git a/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart
index a434158..2f59470 100644
--- a/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_in_generative_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   A() { return 0; }
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerativeConstructor, 25, 1)],
+      [error(diag.returnInGenerativeConstructor, 25, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   A() => A();
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerativeConstructor, 16, 7)],
+      [error(diag.returnInGenerativeConstructor, 16, 7)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart b/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart
index e4c826d..82b6502 100644
--- a/pkg/analyzer/test/src/diagnostics/return_in_generator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_in_generator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   return 0;
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 15, 6)],
+      [error(diag.returnInGenerator, 15, 6)],
     );
   }
 
@@ -47,7 +47,7 @@
       r'''
 f() async* => 0;
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 11, 2)],
+      [error(diag.returnInGenerator, 11, 2)],
     );
   }
 
@@ -66,7 +66,7 @@
   return 0;
 }
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 14, 6)],
+      [error(diag.returnInGenerator, 14, 6)],
     );
   }
 
@@ -83,7 +83,7 @@
       r'''
 f() sync* => 0;
 ''',
-      [error(CompileTimeErrorCode.returnInGenerator, 10, 2)],
+      [error(diag.returnInGenerator, 10, 2)],
     );
   }
 }
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 30d69f8..a093656 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -70,7 +70,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 95, 3)],
+      [error(diag.returnOfInvalidTypeFromMethod, 95, 3)],
     );
   }
 
@@ -87,7 +87,7 @@
   return v();
 }
 ''',
-      [error(WarningCode.returnOfDoNotStore, 97, 2)],
+      [error(diag.returnOfDoNotStore, 97, 2)],
     );
   }
 
@@ -109,13 +109,8 @@
 String getV3() => v;
 ''',
       [
-        error(WarningCode.returnOfDoNotStore, 92, 1, messageContains: ['getV']),
-        error(
-          WarningCode.returnOfDoNotStore,
-          116,
-          1,
-          messageContains: ['getV2'],
-        ),
+        error(diag.returnOfDoNotStore, 92, 1, messageContains: ['getV']),
+        error(diag.returnOfDoNotStore, 116, 1, messageContains: ['getV2']),
       ],
     );
   }
@@ -138,8 +133,8 @@
 String get v3 => _v;
 ''',
       [
-        error(WarningCode.returnOfDoNotStore, 92, 2, messageContains: ['v']),
-        error(WarningCode.returnOfDoNotStore, 116, 2, messageContains: ['v2']),
+        error(diag.returnOfDoNotStore, 92, 2, messageContains: ['v']),
+        error(diag.returnOfDoNotStore, 116, 2, messageContains: ['v2']),
       ],
     );
   }
@@ -158,8 +153,8 @@
 String? get v => _v ?? _v2;
 ''',
       [
-        error(WarningCode.returnOfDoNotStore, 122, 2, messageContains: ['_v']),
-        error(WarningCode.returnOfDoNotStore, 128, 3, messageContains: ['_v2']),
+        error(diag.returnOfDoNotStore, 122, 2, messageContains: ['_v']),
+        error(diag.returnOfDoNotStore, 128, 3, messageContains: ['_v2']),
       ],
     );
   }
@@ -189,8 +184,8 @@
 String get v => b ? _v : _v2;
 ''',
       [
-        error(WarningCode.returnOfDoNotStore, 138, 2),
-        error(WarningCode.returnOfDoNotStore, 143, 3),
+        error(diag.returnOfDoNotStore, 138, 2),
+        error(diag.returnOfDoNotStore, 143, 3),
       ],
     );
   }
@@ -215,18 +210,8 @@
 }
 ''',
       [
-        error(
-          WarningCode.returnOfDoNotStore,
-          111,
-          2,
-          messageContains: ['getV'],
-        ),
-        error(
-          WarningCode.returnOfDoNotStore,
-          140,
-          2,
-          messageContains: ['getV2'],
-        ),
+        error(diag.returnOfDoNotStore, 111, 2, messageContains: ['getV']),
+        error(diag.returnOfDoNotStore, 140, 2, messageContains: ['getV2']),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
index 0a271e3..9cd34b5 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_from_catch_error_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
   });
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 69, 6)],
+      [error(diag.returnWithoutValue, 69, 6)],
     );
   }
 
@@ -65,7 +65,7 @@
   });
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 63, 6)],
+      [error(diag.returnWithoutValue, 63, 6)],
     );
   }
 
@@ -92,7 +92,7 @@
   });
 }
 ''',
-      [error(WarningCode.returnOfInvalidTypeFromCatchError, 119, 3)],
+      [error(diag.returnOfInvalidTypeFromCatchError, 119, 3)],
     );
   }
 
@@ -129,7 +129,7 @@
   future.catchError((e, st) => 'c');
 }
 ''',
-      [error(WarningCode.returnOfInvalidTypeFromCatchError, 60, 3)],
+      [error(diag.returnOfInvalidTypeFromCatchError, 60, 3)],
     );
   }
 
@@ -150,7 +150,7 @@
   });
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 64, 6)],
+      [error(diag.returnWithoutValue, 64, 6)],
     );
   }
 
@@ -161,7 +161,7 @@
   future.catchError((e, st) => '');
 }
 ''',
-      [error(WarningCode.returnOfInvalidTypeFromCatchError, 61, 2)],
+      [error(diag.returnOfInvalidTypeFromCatchError, 61, 2)],
     );
   }
 
@@ -188,7 +188,7 @@
   future.catchError((e, st) => g());
 }
 ''',
-      [error(WarningCode.returnOfInvalidTypeFromCatchError, 79, 3)],
+      [error(diag.returnOfInvalidTypeFromCatchError, 79, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
index 1e93dc1..f29167f 100644
--- a/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_of_invalid_type_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   return () => "hello";
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 53, 7)],
+      [error(diag.returnOfInvalidTypeFromClosure, 53, 7)],
     );
   }
 
@@ -35,7 +35,7 @@
   factory C.named() => 7;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromConstructor, 33, 1)],
+      [error(diag.returnOfInvalidTypeFromConstructor, 33, 1)],
     );
   }
 
@@ -46,7 +46,7 @@
   factory C() => 7;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromConstructor, 27, 1)],
+      [error(diag.returnOfInvalidTypeFromConstructor, 27, 1)],
     );
   }
 
@@ -69,7 +69,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 54, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 54, 1)],
     );
   }
 
@@ -80,7 +80,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 49, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 49, 1)],
     );
   }
 
@@ -98,7 +98,7 @@
   return 5;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncReturnType, 0, 3)],
+      [error(diag.illegalAsyncReturnType, 0, 3)],
     );
   }
 
@@ -125,7 +125,7 @@
   return 5;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 36, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 36, 1)],
     );
   }
 
@@ -136,7 +136,7 @@
   return 0;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 34, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 34, 1)],
     );
   }
 
@@ -147,7 +147,7 @@
   return 5;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 26, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 26, 1)],
     );
   }
 
@@ -166,7 +166,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 39, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 39, 1)],
     );
   }
 
@@ -177,7 +177,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 40, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 40, 1)],
     );
   }
 
@@ -190,7 +190,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 67, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 67, 1)],
     );
   }
 
@@ -215,7 +215,7 @@
 ''',
       [
         // RETURN_OF_INVALID_TYPE shouldn't be reported in addition to this error.
-        error(CompileTimeErrorCode.returnInGenerator, 23, 2),
+        error(diag.returnInGenerator, 23, 2),
       ],
     );
   }
@@ -227,7 +227,7 @@
   return new X();
 }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 24, 1)],
+      [error(diag.newWithNonType, 24, 1)],
     );
   }
 
@@ -270,7 +270,7 @@
   return f;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 59, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 59, 1)],
     );
   }
 
@@ -289,7 +289,7 @@
   return f;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 60, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 60, 1)],
     );
   }
 
@@ -308,7 +308,7 @@
   return 42;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 20, 2)],
+      [error(diag.returnOfInvalidTypeFromFunction, 20, 2)],
     );
   }
 
@@ -319,7 +319,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 24, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 24, 1)],
     );
   }
 
@@ -330,7 +330,7 @@
   return '0';
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 19, 3)],
+      [error(diag.returnOfInvalidTypeFromFunction, 19, 3)],
     );
   }
 
@@ -367,7 +367,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 25, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 25, 1)],
     );
   }
 
@@ -378,7 +378,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 26, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 26, 1)],
     );
   }
 
@@ -401,7 +401,7 @@
       '''
 U Function<U>(U, int) foo(T Function<T>(T a) f) => f;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 51, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 51, 1)],
     );
   }
 
@@ -416,7 +416,7 @@
       '''
 int Function(int, int) foo(T Function<T>(T a) f) => f;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 52, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 52, 1)],
     );
   }
 
@@ -431,7 +431,7 @@
       '''
 int f() => '0';
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 11, 3)],
+      [error(diag.returnOfInvalidTypeFromFunction, 11, 3)],
     );
   }
 
@@ -442,7 +442,7 @@
 ''',
       [
         // RETURN_OF_INVALID_TYPE shouldn't be reported in addition to this error.
-        error(CompileTimeErrorCode.returnInGenerator, 24, 2),
+        error(diag.returnInGenerator, 24, 2),
       ],
     );
   }
@@ -486,7 +486,7 @@
   return '0';
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 21, 3)],
+      [error(diag.returnOfInvalidTypeFromFunction, 21, 3)],
     );
   }
 
@@ -495,7 +495,7 @@
       '''
 int get g => '0';
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 13, 3)],
+      [error(diag.returnOfInvalidTypeFromFunction, 13, 3)],
     );
   }
 
@@ -509,7 +509,7 @@
   g();
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 34, 3)],
+      [error(diag.returnOfInvalidTypeFromFunction, 34, 3)],
     );
   }
 
@@ -523,7 +523,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 38, 3)],
+      [error(diag.returnOfInvalidTypeFromFunction, 38, 3)],
     );
   }
 
@@ -550,7 +550,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 33, 3)],
+      [error(diag.returnOfInvalidTypeFromMethod, 33, 3)],
     );
   }
 
@@ -573,7 +573,7 @@
   int f() => '0';
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 23, 3)],
+      [error(diag.returnOfInvalidTypeFromMethod, 23, 3)],
     );
   }
 
@@ -582,7 +582,7 @@
       '''
 Map<int, int> f() => {...[1, 2, 3, 4]};
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 21, 17)],
+      [error(diag.returnOfInvalidTypeFromFunction, 21, 17)],
     );
   }
 }
@@ -595,7 +595,7 @@
       '''
 int f(dynamic a) => a;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 20, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 20, 1)],
     );
   }
 
@@ -606,7 +606,7 @@
   return a;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 42, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 42, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart b/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
index d3fd2b0..f5dab85 100644
--- a/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_type_invalid_for_catch_error_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -39,7 +39,7 @@
   future.catchError(cb);
 }
 ''',
-      [error(WarningCode.returnTypeInvalidForCatchError, 90, 2)],
+      [error(diag.returnTypeInvalidForCatchError, 90, 2)],
     );
   }
 
@@ -50,7 +50,7 @@
   future.catchError(cb);
 }
 ''',
-      [error(WarningCode.returnTypeInvalidForCatchError, 91, 2)],
+      [error(diag.returnTypeInvalidForCatchError, 91, 2)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
index e1cb014..03b8024 100644
--- a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_without_value_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return;
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 26, 6)],
+      [error(diag.returnWithoutValue, 26, 6)],
     );
   }
 
@@ -33,7 +33,7 @@
   return;
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 29, 6)],
+      [error(diag.returnWithoutValue, 29, 6)],
     );
   }
 
@@ -56,7 +56,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 30, 6)],
+      [error(diag.returnWithoutValue, 30, 6)],
     );
   }
 
@@ -67,7 +67,7 @@
   return;
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 12, 6)],
+      [error(diag.returnWithoutValue, 12, 6)],
     );
   }
 
@@ -125,7 +125,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 48, 6)],
+      [error(diag.returnWithoutValue, 48, 6)],
     );
   }
 
@@ -146,7 +146,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 26, 6)],
+      [error(diag.returnWithoutValue, 26, 6)],
     );
   }
 
@@ -162,7 +162,7 @@
   return;
 }
 ''',
-      [error(CompileTimeErrorCode.returnWithoutValue, 50, 6)],
+      [error(diag.returnWithoutValue, 50, 6)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart
index f0962fd..83d2a9f 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'sdk_constraint_verifier_support.dart';
@@ -33,7 +33,7 @@
       '''
 const a = 42 >>> 3;
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionGtGtGtOperator, 13, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionGtGtGtOperator, 13, 3)],
     );
   }
 
@@ -53,7 +53,7 @@
   A operator >>>(A a) => this;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionGtGtGtOperator, 23, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionGtGtGtOperator, 23, 3)],
     );
   }
 
@@ -69,7 +69,7 @@
       '''
 var a = 42 >>> 3;
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionGtGtGtOperator, 11, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionGtGtGtOperator, 11, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_since_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_since_test.dart
index 1aacb48..5edc344 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_since_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_since_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -37,7 +37,7 @@
   A(foo: 0);
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 3)],
     );
   }
 
@@ -59,7 +59,7 @@
   A(42);
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 2)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 2)],
     );
   }
 
@@ -82,7 +82,7 @@
   A<int>.named();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 40, 5)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 40, 5)],
     );
   }
 
@@ -105,7 +105,7 @@
   A<int>.named;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 40, 5)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 40, 5)],
     );
   }
 
@@ -128,7 +128,7 @@
   A<int>();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 33, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 33, 1)],
     );
   }
 
@@ -153,8 +153,8 @@
 }
 ''',
       expectedDiagnostics: [
-        error(WarningCode.sdkVersionSince, 40, 3),
-        error(WarningCode.sdkVersionSince, 49, 3),
+        error(diag.sdkVersionSince, 40, 3),
+        error(diag.sdkVersionSince, 49, 3),
       ],
     );
   }
@@ -180,8 +180,8 @@
 }
 ''',
       expectedDiagnostics: [
-        error(WarningCode.sdkVersionSince, 40, 3),
-        error(WarningCode.sdkVersionSince, 54, 3),
+        error(diag.sdkVersionSince, 40, 3),
+        error(diag.sdkVersionSince, 54, 3),
       ],
     );
   }
@@ -207,8 +207,8 @@
 }
 ''',
       expectedDiagnostics: [
-        error(WarningCode.sdkVersionSince, 40, 3),
-        error(WarningCode.sdkVersionSince, 53, 3),
+        error(diag.sdkVersionSince, 40, 3),
+        error(diag.sdkVersionSince, 53, 3),
       ],
     );
   }
@@ -234,8 +234,8 @@
 }
 ''',
       expectedDiagnostics: [
-        error(WarningCode.sdkVersionSince, 40, 3),
-        error(WarningCode.sdkVersionSince, 49, 3),
+        error(diag.sdkVersionSince, 40, 3),
+        error(diag.sdkVersionSince, 49, 3),
       ],
     );
   }
@@ -261,7 +261,7 @@
   a.foo += 0;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 3)],
     );
   }
 
@@ -285,7 +285,7 @@
   a.foo += 0;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 3)],
     );
   }
 
@@ -309,7 +309,7 @@
   a.foo += 0;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 3)],
     );
   }
 
@@ -332,7 +332,7 @@
   a[0];
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 37, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 37, 1)],
     );
   }
 
@@ -355,7 +355,7 @@
   a[0] = 0;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 37, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 37, 1)],
     );
   }
 
@@ -376,7 +376,7 @@
   foo.A<int>();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 44, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 44, 1)],
     );
   }
 
@@ -397,7 +397,7 @@
   A<int>();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 33, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 33, 1)],
     );
   }
 
@@ -420,7 +420,7 @@
   a();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 37, 2)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 37, 2)],
     );
   }
 
@@ -444,7 +444,7 @@
   foo(0, bar: 1);
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 40, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 40, 3)],
     );
   }
 
@@ -468,7 +468,7 @@
   foo(0, 42);
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 40, 2)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 40, 2)],
     );
   }
 
@@ -491,7 +491,7 @@
   a.foo();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 3)],
     );
   }
 
@@ -514,7 +514,7 @@
   a.foo;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 3)],
     );
 
     var node = findNode.prefixed('.foo');
@@ -553,7 +553,7 @@
   (a).foo;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 40, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 40, 3)],
     );
 
     var node = findNode.propertyAccess('.foo');
@@ -597,8 +597,8 @@
 }
 ''',
       expectedDiagnostics: [
-        error(WarningCode.sdkVersionSince, 40, 3),
-        error(WarningCode.sdkVersionSince, 53, 3),
+        error(diag.sdkVersionSince, 40, 3),
+        error(diag.sdkVersionSince, 53, 3),
       ],
     );
   }
@@ -618,7 +618,7 @@
 
 void f(foo.A<int> a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 1)],
     );
   }
 
@@ -637,7 +637,7 @@
 
 void f(A<int> a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -686,7 +686,7 @@
 
 void f(A a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -765,7 +765,7 @@
 
 void f(A a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -789,7 +789,7 @@
   E.v2;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 2)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 2)],
     );
   }
 
@@ -812,8 +812,8 @@
 }
 ''',
       expectedDiagnostics: [
-        error(WarningCode.sdkVersionSince, 7, 4),
-        error(WarningCode.sdkVersionSince, 21, 5),
+        error(diag.sdkVersionSince, 7, 4),
+        error(diag.sdkVersionSince, 21, 5),
       ],
     );
   }
@@ -832,7 +832,7 @@
   myEnum.index;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 5)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 5)],
     );
   }
 
@@ -853,7 +853,7 @@
 
 void f(E a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -876,7 +876,7 @@
   0.foo;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 3)],
     );
   }
 
@@ -899,7 +899,7 @@
   E(0).foo();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 38, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 38, 3)],
     );
   }
 
@@ -922,7 +922,7 @@
   0.foo();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 3)],
     );
   }
 
@@ -945,7 +945,7 @@
   0.foo();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 3)],
     );
   }
 
@@ -968,7 +968,7 @@
   0.foo = 1;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 35, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 35, 3)],
     );
   }
 
@@ -987,7 +987,7 @@
 
 void f(X a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -1006,7 +1006,7 @@
 
 void f(X a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -1025,7 +1025,7 @@
 
 void f(M<int> a) {}
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 27, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 27, 1)],
     );
   }
 
@@ -1046,7 +1046,7 @@
   foo.bar();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 44, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 44, 3)],
     );
   }
 
@@ -1067,7 +1067,7 @@
   foo();
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 33, 3)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 33, 3)],
     );
   }
 
@@ -1088,7 +1088,7 @@
   foo.v;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 44, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 44, 1)],
     );
   }
 
@@ -1109,7 +1109,7 @@
   v;
 }
 ''',
-      expectedDiagnostics: [error(WarningCode.sdkVersionSince, 33, 1)],
+      expectedDiagnostics: [error(diag.sdkVersionSince, 33, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_test.dart b/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_test.dart
index 11b3055..e557824 100644
--- a/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sealed_class_subtype_outside_of_library_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
 import 'foo.dart';
 class Bar extends Foo {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 37, 3)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 37, 3)],
     );
   }
 
@@ -47,7 +47,7 @@
 import 'foo.dart';
 class Bar extends FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 37, 10)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 37, 10)],
     );
   }
 
@@ -62,7 +62,7 @@
 typedef FooTypedef = Foo;
 class Bar extends FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 63, 10)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 63, 10)],
     );
   }
 
@@ -95,7 +95,7 @@
 import 'foo.dart';
 class Bar implements Foo {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 40, 3)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 40, 3)],
     );
   }
 
@@ -109,7 +109,7 @@
 import 'foo.dart';
 mixin Bar implements Foo {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 40, 3)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 40, 3)],
     );
   }
 
@@ -124,7 +124,7 @@
 import 'foo.dart';
 class Bar implements FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 40, 10)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 40, 10)],
     );
   }
 
@@ -139,7 +139,7 @@
 typedef FooTypedef = Foo;
 class Bar implements FooTypedef {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 66, 10)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 66, 10)],
     );
   }
 
@@ -166,7 +166,7 @@
 import 'foo.dart';
 base class Bar extends B {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 42, 1)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 42, 1)],
     );
   }
 
@@ -181,7 +181,7 @@
 import 'foo.dart';
 final class Bar extends B {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 43, 1)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 43, 1)],
     );
   }
 
@@ -196,7 +196,7 @@
 import 'foo.dart';
 final class Bar implements B {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 46, 1)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 46, 1)],
     );
   }
 
@@ -211,7 +211,7 @@
 import 'foo.dart';
 class Bar extends B {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 37, 1)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 37, 1)],
     );
   }
 
@@ -240,7 +240,7 @@
 import 'a.dart';
 mixin B on A {}
 ''',
-      [error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 28, 1)],
+      [error(diag.sealedClassSubtypeOutsideOfLibrary, 28, 1)],
     );
   }
 
@@ -256,8 +256,8 @@
 mixin C on A, B {}
 ''',
       [
-        error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 28, 1),
-        error(CompileTimeErrorCode.sealedClassSubtypeOutsideOfLibrary, 31, 1),
+        error(diag.sealedClassSubtypeOutsideOfLibrary, 28, 1),
+        error(diag.sealedClassSubtypeOutsideOfLibrary, 31, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
index b0027f5..baac40b 100644
--- a/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -29,7 +29,7 @@
 const cond = true;
 var v = const {if (cond) null else a.c};
 ''',
-      [error(CompileTimeErrorCode.setElementFromDeferredLibrary, 88, 3)],
+      [error(diag.setElementFromDeferredLibrary, 88, 3)],
     );
   }
 
@@ -42,7 +42,7 @@
 const cond = true;
 var v = const {if (cond) a.c};
 ''',
-      [error(CompileTimeErrorCode.setElementFromDeferredLibrary, 80, 1)],
+      [error(diag.setElementFromDeferredLibrary, 80, 1)],
     );
   }
 
@@ -54,7 +54,7 @@
 import 'lib1.dart' deferred as a;
 var v = const {a.c};
 ''',
-      [error(CompileTimeErrorCode.setElementFromDeferredLibrary, 51, 1)],
+      [error(diag.setElementFromDeferredLibrary, 51, 1)],
     );
   }
 
@@ -66,7 +66,7 @@
 import 'lib1.dart' deferred as a;
 var v = const {a.c + 1};
 ''',
-      [error(CompileTimeErrorCode.setElementFromDeferredLibrary, 51, 1)],
+      [error(diag.setElementFromDeferredLibrary, 51, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
index ecdb921..14dd689 100644
--- a/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
 const dynamic b = 'b';
 var v = const <int>{if (1 < 0) a else b};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 82, 1)],
+      [error(diag.setElementTypeNotAssignable, 82, 1)],
     );
   }
 
@@ -40,7 +40,7 @@
       '''
 var v = const <int>{if (1 < 0) 'a'};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 31, 3)],
+      [error(diag.setElementTypeNotAssignable, 31, 3)],
     );
   }
 
@@ -64,7 +64,7 @@
 const dynamic a = 'a';
 var v = const <int>{if (true) a};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 53, 1)],
+      [error(diag.setElementTypeNotAssignable, 53, 1)],
     );
   }
 
@@ -87,13 +87,7 @@
 const a = null;
 var v = const <int>{a};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.setElementTypeNotAssignableNullability,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.setElementTypeNotAssignableNullability, 36, 1)],
     );
   }
 
@@ -102,13 +96,7 @@
       '''
 var v = const <int>{null};
 ''',
-      [
-        error(
-          CompileTimeErrorCode.setElementTypeNotAssignableNullability,
-          20,
-          4,
-        ),
-      ],
+      [error(diag.setElementTypeNotAssignableNullability, 20, 4)],
     );
   }
 
@@ -118,7 +106,7 @@
 const dynamic x = 'abc';
 var v = const <int>{x};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 45, 1)],
+      [error(diag.setElementTypeNotAssignable, 45, 1)],
     );
   }
 
@@ -127,7 +115,7 @@
       '''
 var v = const <int>{'abc'};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 20, 5)],
+      [error(diag.setElementTypeNotAssignable, 20, 5)],
     );
   }
 
@@ -171,7 +159,7 @@
       '''
 var v = <int>[if (1 < 0) 'a'];
 ''',
-      [error(CompileTimeErrorCode.listElementTypeNotAssignable, 25, 3)],
+      [error(diag.listElementTypeNotAssignable, 25, 3)],
     );
   }
 
@@ -207,7 +195,7 @@
       '''
 var v = <int>{'abc'};
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 14, 5)],
+      [error(diag.setElementTypeNotAssignable, 14, 5)],
     );
   }
 }
@@ -223,7 +211,7 @@
   <int>{if (c) 0 else a};
 }
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 50, 1)],
+      [error(diag.setElementTypeNotAssignable, 50, 1)],
     );
   }
 
@@ -234,7 +222,7 @@
   <int>{if (c) a};
 }
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 43, 1)],
+      [error(diag.setElementTypeNotAssignable, 43, 1)],
     );
   }
 
@@ -245,7 +233,7 @@
   <int>{...a};
 }
 ''',
-      [error(CompileTimeErrorCode.setElementTypeNotAssignable, 41, 1)],
+      [error(diag.setElementTypeNotAssignable, 41, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart b/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart
index d768cf8..062e654 100644
--- a/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/shared_deferred_prefix_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
 import 'lib2.dart' as lib;
 main() { lib.f1(); lib.f2(); }
 ''',
-      [error(CompileTimeErrorCode.sharedDeferredPrefix, 33, 8)],
+      [error(diag.sharedDeferredPrefix, 33, 8)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/size_annotation_dimensions_test.dart b/pkg/analyzer/test/src/diagnostics/size_annotation_dimensions_test.dart
index 81b1da6..81f1ecd 100644
--- a/pkg/analyzer/test/src/diagnostics/size_annotation_dimensions_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/size_annotation_dimensions_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.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   external Array<Array<Array<Uint8>>> a0;
 }
 ''',
-      [error(FfiCode.sizeAnnotationDimensions, 53, 12)],
+      [error(diag.sizeAnnotationDimensions, 53, 12)],
     );
   }
 
@@ -39,7 +39,7 @@
   external Array<Array<Uint8>> a0;
 }
 ''',
-      [error(FfiCode.sizeAnnotationDimensions, 53, 15)],
+      [error(diag.sizeAnnotationDimensions, 53, 15)],
     );
   }
 
@@ -53,7 +53,7 @@
   external Array<Array<Array<Uint8>>> a0;
 }
 ''',
-      [error(FfiCode.sizeAnnotationDimensions, 53, 20)],
+      [error(diag.sizeAnnotationDimensions, 53, 20)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
index 7936248..dce9061 100644
--- a/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
 f() {
   return const [...a.c];
 }''',
-      [error(CompileTimeErrorCode.spreadExpressionFromDeferredLibrary, 61, 1)],
+      [error(diag.spreadExpressionFromDeferredLibrary, 61, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
 f() {
   return const {...a.c};
 }''',
-      [error(CompileTimeErrorCode.spreadExpressionFromDeferredLibrary, 61, 1)],
+      [error(diag.spreadExpressionFromDeferredLibrary, 61, 1)],
     );
   }
 
@@ -93,7 +93,7 @@
 f() {
   return const {...a.c};
 }''',
-      [error(CompileTimeErrorCode.spreadExpressionFromDeferredLibrary, 61, 1)],
+      [error(diag.spreadExpressionFromDeferredLibrary, 61, 1)],
     );
   }
 
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 26e1302..78d6072 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,7 +36,7 @@
   E.g;
 }
 ''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 51, 1)],
+      [error(diag.staticAccessToInstanceMember, 51, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
   E.m();
 }
 ''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 47, 1)],
+      [error(diag.staticAccessToInstanceMember, 47, 1)],
     );
   }
 
@@ -64,7 +64,7 @@
   E.s = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 56, 1)],
+      [error(diag.staticAccessToInstanceMember, 56, 1)],
     );
   }
 
@@ -77,7 +77,7 @@
 main() {
   A.m();
 }''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 34, 1)],
+      [error(diag.staticAccessToInstanceMember, 34, 1)],
     );
   }
 
@@ -90,7 +90,7 @@
 main() {
   A.m;
 }''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 34, 1)],
+      [error(diag.staticAccessToInstanceMember, 34, 1)],
     );
   }
 
@@ -103,7 +103,7 @@
 main() {
   A.f;
 }''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 34, 1)],
+      [error(diag.staticAccessToInstanceMember, 34, 1)],
     );
   }
 
@@ -115,7 +115,7 @@
 }
 var x = C.t;
 ''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 43, 1)],
+      [error(diag.staticAccessToInstanceMember, 43, 1)],
     );
   }
 
@@ -128,7 +128,7 @@
 main() {
   A.f;
 }''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 40, 1)],
+      [error(diag.staticAccessToInstanceMember, 40, 1)],
     );
   }
 
@@ -141,7 +141,7 @@
 main() {
   A.f = 42;
 }''',
-      [error(CompileTimeErrorCode.staticAccessToInstanceMember, 39, 1)],
+      [error(diag.staticAccessToInstanceMember, 39, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart b/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart
index 4364fbe..d5b52e1 100644
--- a/pkg/analyzer/test/src/diagnostics/strict_raw_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/strict_raw_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -92,7 +92,7 @@
   <List<E>>[];
 }
 ''',
-      [error(WarningCode.strictRawType, 50, 1)],
+      [error(diag.strictRawType, 50, 1)],
     );
   }
 
@@ -111,7 +111,7 @@
       r'''
 extension type E(List<int> i) implements Iterable {}
 ''',
-      [error(WarningCode.strictRawType, 41, 8)],
+      [error(diag.strictRawType, 41, 8)],
     );
   }
 
@@ -123,7 +123,7 @@
 
 extension type F(List<int> j) implements E {}
 ''',
-      [error(WarningCode.strictRawType, 81, 1)],
+      [error(diag.strictRawType, 81, 1)],
     );
   }
 
@@ -132,7 +132,7 @@
       r'''
 extension type E(List i) {}
 ''',
-      [error(WarningCode.strictRawType, 17, 4)],
+      [error(diag.strictRawType, 17, 4)],
     );
   }
 
@@ -144,8 +144,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(WarningCode.strictRawType, 22, 4),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.strictRawType, 22, 4),
       ],
     );
   }
@@ -157,7 +157,7 @@
   var a = <List<int>>[];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 17, 1)],
+      [error(diag.unusedLocalVariable, 17, 1)],
     );
   }
 
@@ -189,8 +189,8 @@
 }
 ''',
       [
-        error(WarningCode.strictRawType, 48, 1),
-        error(WarningCode.unusedLocalVariable, 50, 1),
+        error(diag.strictRawType, 48, 1),
+        error(diag.unusedLocalVariable, 50, 1),
       ],
     );
   }
@@ -204,7 +204,7 @@
   E<int> e = E<int>(1);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 55, 1)],
+      [error(diag.unusedLocalVariable, 55, 1)],
     );
   }
 
@@ -216,8 +216,8 @@
 }
 ''',
       [
-        error(WarningCode.strictRawType, 13, 4),
-        error(WarningCode.unusedLocalVariable, 18, 1),
+        error(diag.strictRawType, 13, 4),
+        error(diag.unusedLocalVariable, 18, 1),
       ],
     );
   }
@@ -237,7 +237,7 @@
 mixin class C<T> {}
 class D = Object with C;
 ''',
-      [error(WarningCode.strictRawType, 42, 1)],
+      [error(diag.strictRawType, 42, 1)],
     );
   }
 
@@ -263,7 +263,7 @@
 typedef List2<T> = List<T>;
 void f(List2 a) {}
 ''',
-      [error(WarningCode.strictRawType, 35, 5)],
+      [error(diag.strictRawType, 35, 5)],
     );
   }
 
@@ -294,7 +294,7 @@
       r'''
 void f(List a) {}
 ''',
-      [error(WarningCode.strictRawType, 7, 4)],
+      [error(diag.strictRawType, 7, 4)],
     );
   }
 
@@ -303,7 +303,7 @@
       r'''
 List f(int a) => [1, 2, 3];
 ''',
-      [error(WarningCode.strictRawType, 0, 4)],
+      [error(diag.strictRawType, 0, 4)],
     );
   }
 
@@ -313,7 +313,7 @@
 mixin class C<T> {}
 class D extends Object with C {}
 ''',
-      [error(WarningCode.strictRawType, 48, 1)],
+      [error(diag.strictRawType, 48, 1)],
     );
   }
 
@@ -329,7 +329,7 @@
       r'''
 List a = [];
 ''',
-      [error(WarningCode.strictRawType, 0, 4)],
+      [error(diag.strictRawType, 0, 4)],
     );
   }
 
@@ -358,7 +358,7 @@
       r'''
 List get g => [];
 ''',
-      [error(WarningCode.strictRawType, 0, 4)],
+      [error(diag.strictRawType, 0, 4)],
     );
   }
 
@@ -367,7 +367,7 @@
       r'''
 void set s(List a) {}
 ''',
-      [error(WarningCode.strictRawType, 11, 4)],
+      [error(diag.strictRawType, 11, 4)],
     );
   }
 
@@ -377,7 +377,7 @@
 typedef T F1<T>(T _);
 F1 func = (a) => a;
 ''',
-      [error(WarningCode.strictRawType, 22, 2)],
+      [error(diag.strictRawType, 22, 2)],
     );
   }
 
@@ -387,7 +387,7 @@
 typedef F1<T> = T Function(T);
 F1 func = (a) => a;
 ''',
-      [error(WarningCode.strictRawType, 31, 2)],
+      [error(diag.strictRawType, 31, 2)],
     );
   }
 
@@ -445,7 +445,7 @@
       r'''
 extension on List {}
 ''',
-      [error(WarningCode.strictRawType, 13, 4)],
+      [error(diag.strictRawType, 13, 4)],
     );
   }
 
@@ -454,7 +454,7 @@
       r'''
 extension E on List {}
 ''',
-      [error(WarningCode.strictRawType, 15, 4)],
+      [error(diag.strictRawType, 15, 4)],
     );
   }
 
@@ -482,7 +482,7 @@
 class C<T> {}
 class D implements C {}
 ''',
-      [error(WarningCode.strictRawType, 33, 1)],
+      [error(diag.strictRawType, 33, 1)],
     );
   }
 
@@ -499,7 +499,7 @@
 class C<T> {}
 class D extends C {}
 ''',
-      [error(WarningCode.strictRawType, 30, 1)],
+      [error(diag.strictRawType, 30, 1)],
     );
   }
 
@@ -516,7 +516,7 @@
 class C<T> {}
 class D<T extends C> {}
 ''',
-      [error(WarningCode.strictRawType, 32, 1)],
+      [error(diag.strictRawType, 32, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_base_is_not_base_final_or_sealed_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_base_is_not_base_final_or_sealed_test.dart
index c505bbe..bd980c1 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_base_is_not_base_final_or_sealed_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_base_is_not_base_final_or_sealed_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -24,7 +24,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           22,
           1,
           text:
@@ -43,7 +43,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           48,
           1,
           text:
@@ -65,7 +65,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           23,
           1,
           text:
@@ -92,7 +92,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           32,
           1,
           text:
@@ -110,7 +110,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           22,
           1,
           text:
@@ -132,17 +132,13 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           23,
           1,
           text:
               "The type 'B' must be 'base', 'final' or 'sealed' because the supertype 'A' is 'base'.",
         ),
-        this.error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          36,
-          1,
-        ),
+        this.error(diag.baseClassImplementedOutsideOfLibrary, 36, 1),
       ],
     );
   }
@@ -164,17 +160,13 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           32,
           1,
           text:
               "The type 'B' must be 'base', 'final' or 'sealed' because the supertype 'LinkedListEntry' is 'base'.",
         ),
-        this.error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          45,
-          1,
-        ),
+        this.error(diag.baseClassImplementedOutsideOfLibrary, 45, 1),
       ],
     );
   }
@@ -188,7 +180,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           50,
           1,
           text:
@@ -218,7 +210,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           84,
           1,
           text:
@@ -248,7 +240,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           78,
           1,
           text:
@@ -278,7 +270,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           78,
           1,
           text:
@@ -311,7 +303,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           51,
           1,
           text:
@@ -340,7 +332,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           6,
           1,
           text:
@@ -369,7 +361,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           53,
           1,
           text:
@@ -398,7 +390,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           33,
           1,
           text:
@@ -417,7 +409,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           43,
           1,
           text:
@@ -437,7 +429,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           62,
           1,
           text:
@@ -467,7 +459,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           72,
           1,
           text:
@@ -496,7 +488,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           53,
           1,
           text:
@@ -529,7 +521,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           48,
           1,
           text:
@@ -557,7 +549,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           28,
           1,
           text:
@@ -579,7 +571,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed,
+          diag.subtypeOfBaseIsNotBaseFinalOrSealed,
           23,
           1,
           text:
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_ffi_class_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_ffi_class_test.dart
index 2300d5b..d2db7a0 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_ffi_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_ffi_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
 import 'dart:ffi';
 final class C extends Double {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 41, 6)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 41, 6)],
     );
   }
 
@@ -34,7 +34,7 @@
 import 'dart:ffi';
 class C extends Double {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 49, 6)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 49, 6)],
     );
   }
 
@@ -44,13 +44,7 @@
 import 'dart:ffi';
 class C extends Finalizable {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.noGenerativeConstructorsInSuperclass,
-          35,
-          11,
-        ),
-      ],
+      [error(diag.noGenerativeConstructorsInSuperclass, 35, 11)],
     );
   }
 
@@ -60,7 +54,7 @@
 import 'dart:ffi';
 class C extends Float {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 5)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 5)],
     );
   }
 
@@ -70,7 +64,7 @@
 import 'dart:ffi';
 class C extends Int16 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 5)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 5)],
     );
   }
 
@@ -80,7 +74,7 @@
 import 'dart:ffi';
 class C extends Int32 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 5)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 5)],
     );
   }
 
@@ -90,7 +84,7 @@
 import 'dart:ffi';
 class C extends Int64 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 5)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 5)],
     );
   }
 
@@ -100,7 +94,7 @@
 import 'dart:ffi';
 class C extends Int8 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 4)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 4)],
     );
   }
 
@@ -112,7 +106,7 @@
   external factory C();
 }
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 7)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 7)],
     );
   }
 
@@ -131,7 +125,7 @@
 import 'dart:ffi';
 class C extends Uint16 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 6)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 6)],
     );
   }
 
@@ -141,7 +135,7 @@
 import 'dart:ffi';
 class C extends Uint32 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 6)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 6)],
     );
   }
 
@@ -151,7 +145,7 @@
 import 'dart:ffi';
 class C extends Uint64 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 6)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 6)],
     );
   }
 
@@ -161,7 +155,7 @@
 import 'dart:ffi';
 class C extends Uint8 {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 5)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 5)],
     );
   }
 
@@ -180,7 +174,7 @@
 import 'dart:ffi';
 class C extends Void {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 35, 4)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 35, 4)],
     );
   }
 }
@@ -193,13 +187,7 @@
 import 'dart:ffi';
 class C implements Double {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          6,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 6)],
     );
   }
 
@@ -210,13 +198,7 @@
 import 'dart:ffi';
 class C implements Double {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          52,
-          6,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 52, 6)],
     );
   }
 
@@ -226,13 +208,7 @@
 import 'dart:ffi' as ffi;
 class C implements ffi.Double {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          45,
-          10,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 45, 10)],
     );
   }
 
@@ -249,13 +225,7 @@
 import 'dart:ffi';
 class C implements Float {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          5,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 5)],
     );
   }
 
@@ -265,13 +235,7 @@
 import 'dart:ffi';
 class C implements Int16 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          5,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 5)],
     );
   }
 
@@ -281,13 +245,7 @@
 import 'dart:ffi';
 class C implements Int32 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          5,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 5)],
     );
   }
 
@@ -297,13 +255,7 @@
 import 'dart:ffi';
 class C implements Int64 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          5,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 5)],
     );
   }
 
@@ -313,13 +265,7 @@
 import 'dart:ffi';
 class C implements Int8 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          4,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 4)],
     );
   }
 
@@ -330,16 +276,8 @@
 class C implements Pointer {}
 ''',
       [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          7,
-        ),
-        error(
-          CompileTimeErrorCode.nonAbstractClassInheritsAbstractMemberOne,
-          25,
-          1,
-        ),
+        error(diag.finalClassImplementedOutsideOfLibrary, 38, 7),
+        error(diag.nonAbstractClassInheritsAbstractMemberOne, 25, 1),
       ],
     );
   }
@@ -350,7 +288,7 @@
 import 'dart:ffi';
 final class C implements Struct {}
 ''',
-      [error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 44, 6)],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 44, 6)],
     );
   }
 
@@ -360,13 +298,7 @@
 import 'dart:ffi';
 class C implements Uint16 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          6,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 6)],
     );
   }
 
@@ -376,13 +308,7 @@
 import 'dart:ffi';
 class C implements Uint32 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          6,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 6)],
     );
   }
 
@@ -392,13 +318,7 @@
 import 'dart:ffi';
 class C implements Uint64 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          6,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 6)],
     );
   }
 
@@ -408,13 +328,7 @@
 import 'dart:ffi';
 class C implements Uint8 {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          5,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 5)],
     );
   }
 
@@ -424,7 +338,7 @@
 import 'dart:ffi';
 final class C implements Union {}
 ''',
-      [error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 44, 5)],
+      [error(diag.baseClassImplementedOutsideOfLibrary, 44, 5)],
     );
   }
 
@@ -434,13 +348,7 @@
 import 'dart:ffi';
 class C implements Void {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          38,
-          4,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 38, 4)],
     );
   }
 }
@@ -453,7 +361,7 @@
 import 'dart:ffi';
 class C with Double {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 6)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 6)],
     );
   }
 
@@ -464,7 +372,7 @@
 import 'dart:ffi';
 class C with Double {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 46, 6)],
+      [error(diag.mixinClassDeclaresConstructor, 46, 6)],
     );
   }
 
@@ -474,7 +382,7 @@
 import 'dart:ffi' as ffi;
 class C with ffi.Double {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 39, 10)],
+      [error(diag.mixinClassDeclaresConstructor, 39, 10)],
     );
   }
 
@@ -484,7 +392,7 @@
 import 'dart:ffi';
 class C with Float {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 5)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 5)],
     );
   }
 
@@ -494,7 +402,7 @@
 import 'dart:ffi';
 class C with Int16 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 5)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 5)],
     );
   }
 
@@ -504,7 +412,7 @@
 import 'dart:ffi';
 class C with Int32 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 5)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 5)],
     );
   }
 
@@ -514,7 +422,7 @@
 import 'dart:ffi';
 class C with Int64 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 5)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 5)],
     );
   }
 
@@ -524,7 +432,7 @@
 import 'dart:ffi';
 class C with Int8 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 4)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 4)],
     );
   }
 
@@ -534,7 +442,7 @@
 import 'dart:ffi';
 class C with Pointer {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 32, 7)],
+      [error(diag.classUsedAsMixin, 32, 7)],
     );
   }
 
@@ -544,7 +452,7 @@
 import 'dart:ffi';
 final class C with Struct {}
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 38, 6)],
+      [error(diag.mixinInheritsFromNotObject, 38, 6)],
     );
   }
 
@@ -554,7 +462,7 @@
 import 'dart:ffi';
 class C with Uint16 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 6)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 6)],
     );
   }
 
@@ -564,7 +472,7 @@
 import 'dart:ffi';
 class C with Uint32 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 6)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 6)],
     );
   }
 
@@ -574,7 +482,7 @@
 import 'dart:ffi';
 class C with Uint64 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 6)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 6)],
     );
   }
 
@@ -584,7 +492,7 @@
 import 'dart:ffi';
 class C with Uint8 {}
 ''',
-      [error(CompileTimeErrorCode.mixinClassDeclaresConstructor, 32, 5)],
+      [error(diag.mixinClassDeclaresConstructor, 32, 5)],
     );
   }
 
@@ -594,7 +502,7 @@
 import 'dart:ffi';
 final class C with Union {}
 ''',
-      [error(CompileTimeErrorCode.mixinInheritsFromNotObject, 38, 5)],
+      [error(diag.mixinInheritsFromNotObject, 38, 5)],
     );
   }
 
@@ -604,7 +512,7 @@
 import 'dart:ffi';
 class C with Void {}
 ''',
-      [error(CompileTimeErrorCode.classUsedAsMixin, 32, 4)],
+      [error(diag.classUsedAsMixin, 32, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_final_is_not_base_final_or_sealed_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_final_is_not_base_final_or_sealed_test.dart
index e8f9a28..8515d3b 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_final_is_not_base_final_or_sealed_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_final_is_not_base_final_or_sealed_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -25,7 +25,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           23,
           1,
           text:
@@ -50,7 +50,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           38,
           1,
           text:
@@ -72,7 +72,7 @@
 import 'a.dart';
 class B extends A {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 33, 1)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 33, 1)],
     );
   }
 
@@ -99,7 +99,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           23,
           1,
           text:
@@ -117,7 +117,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           23,
           1,
           text:
@@ -139,13 +139,7 @@
 import 'a.dart';
 class B implements A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 36, 1)],
     );
   }
 
@@ -173,13 +167,7 @@
   int get value => 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          36,
-          1,
-        ),
-      ],
+      [error(diag.finalClassImplementedOutsideOfLibrary, 36, 1)],
     );
   }
 
@@ -195,13 +183,7 @@
 import 'a.dart';
 mixin B on A {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.finalClassUsedAsMixinConstraintOutsideOfLibrary,
-          28,
-          1,
-        ),
-      ],
+      [error(diag.finalClassUsedAsMixinConstraintOutsideOfLibrary, 28, 1)],
     );
   }
 
@@ -214,7 +196,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           51,
           1,
           text:
@@ -244,7 +226,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           79,
           1,
           text:
@@ -277,7 +259,7 @@
 sealed class B extends A {}
 class C extends B {}
 ''',
-      [error(CompileTimeErrorCode.finalClassExtendedOutsideOfLibrary, 40, 1)],
+      [error(diag.finalClassExtendedOutsideOfLibrary, 40, 1)],
     );
   }
 
@@ -290,7 +272,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           6,
           1,
           text:
@@ -319,7 +301,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           54,
           1,
           text:
@@ -349,7 +331,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           69,
           1,
           text:
@@ -378,7 +360,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           34,
           1,
           text:
@@ -397,7 +379,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           44,
           1,
           text:
@@ -417,7 +399,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           63,
           1,
           text:
@@ -447,7 +429,7 @@
 ''',
       [
         this.error(
-          CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed,
+          diag.subtypeOfFinalIsNotBaseFinalOrSealed,
           73,
           1,
           text:
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart
index a2294e7..5a6f5d5 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_sealed_class_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -39,7 +39,7 @@
 import 'package:foo/foo.dart';
 class Bar extends Foo {}
 ''',
-      [error(WarningCode.subtypeOfSealedClass, 31, 24)],
+      [error(diag.subtypeOfSealedClass, 31, 24)],
     );
   }
 
@@ -60,7 +60,7 @@
 import 'package:foo/foo.dart';
 class Bar implements Foo {}
 ''',
-      [error(WarningCode.subtypeOfSealedClass, 31, 27)],
+      [error(diag.subtypeOfSealedClass, 31, 27)],
     );
   }
 
@@ -83,7 +83,7 @@
 class Bar1 {}
 class Bar2 = Bar1 with Foo;
 ''',
-      [error(WarningCode.subtypeOfSealedClass, 45, 27)],
+      [error(diag.subtypeOfSealedClass, 45, 27)],
     );
   }
 
@@ -105,7 +105,7 @@
 class Bar1 {}
 class Bar2 = Bar1 with Foo;
 ''',
-      [error(WarningCode.subtypeOfSealedClass, 45, 27)],
+      [error(diag.subtypeOfSealedClass, 45, 27)],
     );
   }
 
@@ -126,7 +126,7 @@
 import 'package:foo/foo.dart';
 class Bar extends Object with Foo {}
 ''',
-      [error(WarningCode.subtypeOfSealedClass, 31, 36)],
+      [error(diag.subtypeOfSealedClass, 31, 36)],
     );
   }
 
@@ -147,7 +147,7 @@
 import 'package:foo/foo.dart';
 mixin Bar implements Foo {}
 ''',
-      [error(WarningCode.subtypeOfSealedClass, 31, 27)],
+      [error(diag.subtypeOfSealedClass, 31, 27)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart b/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart
index 61a4972..0451f92 100644
--- a/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/subtype_of_struct_class_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/ffi_code.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +26,7 @@
 }
 final class C extends S {}
 ''',
-      [error(FfiCode.subtypeOfStructClassInExtends, 103, 1)],
+      [error(diag.subtypeOfStructClassInExtends, 103, 1)],
     );
   }
 
@@ -40,7 +39,7 @@
 }
 final class C extends S {}
 ''',
-      [error(FfiCode.subtypeOfStructClassInExtends, 102, 1)],
+      [error(diag.subtypeOfStructClassInExtends, 102, 1)],
     );
   }
 }
@@ -62,12 +61,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary,
-          216,
-          19,
-        ),
-        error(FfiCode.subtypeOfStructClassInImplements, 216, 19),
+        error(diag.baseClassImplementedOutsideOfLibrary, 216, 19),
+        error(diag.subtypeOfStructClassInImplements, 216, 19),
       ],
     );
   }
@@ -80,9 +75,9 @@
 final class C implements S {}
 ''',
       [
-        error(FfiCode.emptyStruct, 31, 1),
-        error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 76, 1),
-        error(FfiCode.subtypeOfStructClassInImplements, 76, 1),
+        error(diag.emptyStruct, 31, 1),
+        error(diag.baseClassImplementedOutsideOfLibrary, 76, 1),
+        error(diag.subtypeOfStructClassInImplements, 76, 1),
       ],
     );
   }
@@ -98,13 +93,9 @@
 class C implements lib1.S {}
 ''',
       [
-        error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 47, 6),
-        error(
-          CompileTimeErrorCode.finalClassImplementedOutsideOfLibrary,
-          47,
-          6,
-        ),
-        error(FfiCode.subtypeOfStructClassInImplements, 47, 6),
+        error(diag.baseClassImplementedOutsideOfLibrary, 47, 6),
+        error(diag.finalClassImplementedOutsideOfLibrary, 47, 6),
+        error(diag.subtypeOfStructClassInImplements, 47, 6),
       ],
     );
   }
@@ -117,9 +108,9 @@
 final class C implements S {}
 ''',
       [
-        error(FfiCode.emptyStruct, 31, 1),
-        error(CompileTimeErrorCode.baseClassImplementedOutsideOfLibrary, 75, 1),
-        error(FfiCode.subtypeOfStructClassInImplements, 75, 1),
+        error(diag.emptyStruct, 31, 1),
+        error(diag.baseClassImplementedOutsideOfLibrary, 75, 1),
+        error(diag.subtypeOfStructClassInImplements, 75, 1),
       ],
     );
   }
@@ -135,10 +126,10 @@
 final class C with S {}
 ''',
       [
-        error(FfiCode.emptyStruct, 31, 1),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 70, 1),
+        error(diag.emptyStruct, 31, 1),
+        error(diag.mixinInheritsFromNotObject, 70, 1),
         error(
-          FfiCode.subtypeOfStructClassInWith,
+          diag.subtypeOfStructClassInWith,
           70,
           1,
           messageContains: ["class 'C'", "mix in 'S'"],
@@ -159,9 +150,9 @@
 class C with lib1.S {}
 ''',
       [
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 42, 6),
+        error(diag.mixinInheritsFromNotObject, 42, 6),
         error(
-          FfiCode.subtypeOfStructClassInWith,
+          diag.subtypeOfStructClassInWith,
           42,
           6,
           messageContains: ["class 'C'", "mix in 'S'"],
@@ -178,9 +169,9 @@
 final class C with S {}
 ''',
       [
-        error(FfiCode.emptyStruct, 31, 1),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 69, 1),
-        error(FfiCode.subtypeOfStructClassInWith, 69, 1),
+        error(diag.emptyStruct, 31, 1),
+        error(diag.mixinInheritsFromNotObject, 69, 1),
+        error(diag.subtypeOfStructClassInWith, 69, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/super_formal_parameter_type_is_not_subtype_of_associated_test.dart b/pkg/analyzer/test/src/diagnostics/super_formal_parameter_type_is_not_subtype_of_associated_test.dart
index f2ec6b1..adf6eed 100644
--- a/pkg/analyzer/test/src/diagnostics/super_formal_parameter_type_is_not_subtype_of_associated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_formal_parameter_type_is_not_subtype_of_associated_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,13 +27,7 @@
   B(num super.a);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
-          65,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterTypeIsNotSubtypeOfAssociated, 65, 1)],
     );
   }
 
@@ -72,13 +66,7 @@
   B({required num super.a});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
-          80,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterTypeIsNotSubtypeOfAssociated, 80, 1)],
     );
   }
 
@@ -129,13 +117,7 @@
   B(num super.a);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
-          59,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterTypeIsNotSubtypeOfAssociated, 59, 1)],
     );
   }
 
@@ -151,13 +133,7 @@
   B(dynamic super.a);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterTypeIsNotSubtypeOfAssociated,
-          63,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterTypeIsNotSubtypeOfAssociated, 63, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_named_test.dart b/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_named_test.dart
index 24dc4c4..8945dfc4 100644
--- a/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_named_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_named_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,13 +25,7 @@
   B({super.a}) : super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedNamed, 43, 1)],
     );
   }
 
@@ -44,13 +38,7 @@
   B({required super.a}) : super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed,
-          52,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedNamed, 52, 1)],
     );
   }
 
@@ -63,13 +51,7 @@
   B({super.a});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedNamed, 43, 1)],
     );
   }
 
@@ -82,13 +64,7 @@
   B({required super.a});
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedNamed,
-          52,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedNamed, 52, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_positional_test.dart b/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_positional_test.dart
index b3d247e..4c1a2b2 100644
--- a/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_positional_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_formal_parameter_without_associated_positional_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,13 +25,7 @@
   B([super.a]) : super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedPositional, 43, 1)],
     );
   }
 
@@ -44,13 +38,7 @@
   B(super.a) : super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedPositional, 42, 1)],
     );
   }
 
@@ -63,13 +51,7 @@
   B([super.a]);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          43,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedPositional, 43, 1)],
     );
   }
 
@@ -82,13 +64,7 @@
   B(super.a);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          42,
-          1,
-        ),
-      ],
+      [error(diag.superFormalParameterWithoutAssociatedPositional, 42, 1)],
     );
   }
 }
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
index f387d8a..fbb85d6 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_enum_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_enum_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   const E() : this.named(), super();
 }
 ''',
-      [error(CompileTimeErrorCode.superInEnumConstructor, 61, 5)],
+      [error(diag.superInEnumConstructor, 61, 5)],
     );
   }
 
@@ -36,7 +36,7 @@
   const E() : super();
 }
 ''',
-      [error(CompileTimeErrorCode.superInEnumConstructor, 28, 5)],
+      [error(diag.superInEnumConstructor, 28, 5)],
     );
   }
 
@@ -49,8 +49,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.superInEnumConstructor, 28, 5),
-        error(CompileTimeErrorCode.superInEnumConstructor, 37, 5),
+        error(diag.superInEnumConstructor, 28, 5),
+        error(diag.superInEnumConstructor, 37, 5),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_extension_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_extension_test.dart
index d3c165f..0d9f40a 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_extension_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   int plusOne() => super + 1;
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtension, 40, 5)],
+      [error(diag.superInExtension, 40, 5)],
     );
   }
 
@@ -35,10 +35,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 23, 1),
-        error(CompileTimeErrorCode.superInExtension, 33, 5),
-      ],
+      [error(diag.unusedElement, 23, 1), error(diag.superInExtension, 33, 5)],
     );
   }
 
@@ -55,7 +52,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtension, 117, 5)],
+      [error(diag.superInExtension, 117, 5)],
     );
   }
 
@@ -69,7 +66,7 @@
   int at(int i) => super[i];
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtension, 80, 5)],
+      [error(diag.superInExtension, 80, 5)],
     );
   }
 
@@ -80,7 +77,7 @@
   String get displayText => super.toString();
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtension, 49, 5)],
+      [error(diag.superInExtension, 49, 5)],
     );
   }
 
@@ -92,8 +89,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.extensionDeclaresInstanceField, 34, 1),
-        error(CompileTimeErrorCode.superInExtension, 38, 5),
+        error(diag.extensionDeclaresInstanceField, 34, 1),
+        error(diag.superInExtension, 38, 5),
       ],
     );
   }
@@ -107,7 +104,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtension, 40, 5)],
+      [error(diag.superInExtension, 40, 5)],
     );
   }
 
@@ -121,7 +118,7 @@
   C get negated => -super;
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtension, 76, 5)],
+      [error(diag.superInExtension, 76, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_extension_type_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_extension_type_test.dart
index 44cda5f..ea6c6e6 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_extension_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_extension_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtensionType, 44, 5)],
+      [error(diag.superInExtensionType, 44, 5)],
     );
 
     var node = findNode.singleBinaryExpression;
@@ -53,7 +53,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtensionType, 44, 5)],
+      [error(diag.superInExtensionType, 44, 5)],
     );
 
     var node = findNode.singleMethodInvocation;
@@ -84,7 +84,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.superInExtensionType, 44, 5)],
+      [error(diag.superInExtensionType, 44, 5)],
     );
 
     var node = findNode.singlePropertyAccess;
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
index e77a6cd..47c5f80 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_invalid_context_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 var v = super + 0;
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 8, 5)],
+      [error(diag.superInInvalidContext, 8, 5)],
     );
   }
 
@@ -35,7 +35,7 @@
   var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 63, 5)],
+      [error(diag.superInInvalidContext, 63, 5)],
     );
   }
 
@@ -62,7 +62,7 @@
   static var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 70, 5)],
+      [error(diag.superInInvalidContext, 70, 5)],
     );
   }
 
@@ -77,7 +77,7 @@
   static late var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 75, 5)],
+      [error(diag.superInInvalidContext, 75, 5)],
     );
   }
 
@@ -92,7 +92,7 @@
   B() : f = super.m();
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 62, 5)],
+      [error(diag.superInInvalidContext, 62, 5)],
     );
   }
 
@@ -108,7 +108,7 @@
   C() : super(super.f);
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 75, 5)],
+      [error(diag.superInInvalidContext, 75, 5)],
     );
   }
 
@@ -125,7 +125,7 @@
   C.other(int a) : super(a);
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 80, 5)],
+      [error(diag.superInInvalidContext, 80, 5)],
     );
   }
 
@@ -143,7 +143,7 @@
   B._();
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 61, 5)],
+      [error(diag.superInInvalidContext, 61, 5)],
     );
   }
 
@@ -157,7 +157,7 @@
  var b = super.a;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 50, 5)],
+      [error(diag.superInInvalidContext, 50, 5)],
     );
   }
 
@@ -168,7 +168,7 @@
   static final v = super.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 40, 5)],
+      [error(diag.superInInvalidContext, 40, 5)],
     );
   }
 
@@ -181,7 +181,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 47, 5)],
+      [error(diag.superInInvalidContext, 47, 5)],
     );
   }
 
@@ -196,7 +196,7 @@
   var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 58, 5)],
+      [error(diag.superInInvalidContext, 58, 5)],
     );
   }
 
@@ -223,7 +223,7 @@
   static var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 65, 5)],
+      [error(diag.superInInvalidContext, 65, 5)],
     );
   }
 
@@ -238,7 +238,7 @@
   static late var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 70, 5)],
+      [error(diag.superInInvalidContext, 70, 5)],
     );
   }
 
@@ -253,7 +253,7 @@
   static var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 71, 5)],
+      [error(diag.superInInvalidContext, 71, 5)],
     );
   }
 
@@ -268,7 +268,7 @@
   static late var f = super.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 76, 5)],
+      [error(diag.superInInvalidContext, 76, 5)],
     );
   }
 
@@ -282,7 +282,7 @@
   static n() { return super.m(); }
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 70, 5)],
+      [error(diag.superInInvalidContext, 70, 5)],
     );
 
     var node = findNode.methodInvocation('super.m()');
@@ -314,7 +314,7 @@
   static int b = super.a;
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 69, 5)],
+      [error(diag.superInInvalidContext, 69, 5)],
     );
 
     var node = findNode.singlePropertyAccess;
@@ -339,7 +339,7 @@
   super.f();
 }
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 8, 5)],
+      [error(diag.superInInvalidContext, 8, 5)],
     );
   }
 
@@ -348,7 +348,7 @@
       '''
 var v = super.y;
 ''',
-      [error(CompileTimeErrorCode.superInInvalidContext, 8, 5)],
+      [error(diag.superInInvalidContext, 8, 5)],
     );
   }
 
@@ -368,8 +368,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 57, 1),
-        error(WarningCode.unusedLocalVariable, 92, 1),
+        error(diag.unusedLocalVariable, 57, 1),
+        error(diag.unusedLocalVariable, 92, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart
index 8efa6cd..f6f6feb 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   A.name() {}
 }
 ''',
-      [error(CompileTimeErrorCode.superInRedirectingConstructor, 31, 7)],
+      [error(diag.superInRedirectingConstructor, 31, 7)],
     );
   }
 
@@ -35,7 +35,7 @@
   A.name() {}
 }
 ''',
-      [error(CompileTimeErrorCode.superInRedirectingConstructor, 18, 7)],
+      [error(diag.superInRedirectingConstructor, 18, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/super_initializer_in_object_test.dart b/pkg/analyzer/test/src/diagnostics/super_initializer_in_object_test.dart
index accd6df..d163846 100644
--- a/pkg/analyzer/test/src/diagnostics/super_initializer_in_object_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_initializer_in_object_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   Object() : super();
 }
 ''',
-      [error(CompileTimeErrorCode.superInitializerInObject, 0, 0)],
+      [error(diag.superInitializerInObject, 0, 0)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/super_invocation_not_last_test.dart b/pkg/analyzer/test/src/diagnostics/super_invocation_not_last_test.dart
index 71e6e05..17a3883 100644
--- a/pkg/analyzer/test/src/diagnostics/super_invocation_not_last_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_invocation_not_last_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   A(int? x) : super(), assert(x != null);
 }
 ''',
-      [error(CompileTimeErrorCode.superInvocationNotLast, 24, 5)],
+      [error(diag.superInvocationNotLast, 24, 5)],
     );
   }
 
@@ -34,7 +34,7 @@
   A() : super(), x = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.superInvocationNotLast, 33, 5)],
+      [error(diag.superInvocationNotLast, 33, 5)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/switch_case_completes_normally_test.dart b/pkg/analyzer/test/src/diagnostics/switch_case_completes_normally_test.dart
index 839b8c0..38f654e 100644
--- a/pkg/analyzer/test/src/diagnostics/switch_case_completes_normally_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/switch_case_completes_normally_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -56,10 +56,7 @@
       return;
   }
 }''',
-      [
-        if (!_patternsEnabled)
-          error(CompileTimeErrorCode.switchCaseCompletesNormally, 35, 4),
-      ],
+      [if (!_patternsEnabled) error(diag.switchCaseCompletesNormally, 35, 4)],
     );
   }
 
@@ -133,10 +130,7 @@
       return;
   }
 }''',
-      [
-        if (!_patternsEnabled)
-          error(CompileTimeErrorCode.switchCaseCompletesNormally, 35, 4),
-      ],
+      [if (!_patternsEnabled) error(diag.switchCaseCompletesNormally, 35, 4)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_test.dart b/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_test.dart
index ede2545..ca117de 100644
--- a/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/tearoff_of_generative_constructor_of_abstract_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -55,13 +55,7 @@
   A.new;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.tearoffOfGenerativeConstructorOfAbstractClass,
-          44,
-          5,
-        ),
-      ],
+      [error(diag.tearoffOfGenerativeConstructorOfAbstractClass, 44, 5)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 02a7ab4..adc26e3 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -227,6 +227,8 @@
 import 'duplicate_pattern_assignment_variable_test.dart'
     as duplicate_pattern_assignment_variable;
 import 'duplicate_pattern_field_test.dart' as duplicate_pattern_field;
+import 'duplicate_private_named_parameter_test.dart'
+    as duplicate_private_named_parameter;
 import 'duplicate_rest_element_in_pattern_test.dart'
     as duplicate_rest_element_in_pattern;
 import 'duplicate_shown_name_test.dart' as duplicate_shown_name;
@@ -672,6 +674,8 @@
     as non_native_function_type_argument_to_pointer;
 import 'non_nullable_equals_parameter_test.dart' as non_null_equals_parameters;
 import 'non_positive_array_dimension_test.dart' as non_positive_array_dimension;
+import 'non_redirecting_generative_constructor_with_primary_test.dart'
+    as non_redirecting_generative_constructor_with_primary;
 import 'non_sized_type_argument_test.dart' as non_sized_type_argument;
 import 'non_type_as_type_argument_test.dart' as non_type_as_type_argument;
 import 'non_type_in_catch_clause_test.dart' as non_type_in_catch_clause;
@@ -1105,6 +1109,7 @@
     duplicate_part.main();
     duplicate_pattern_assignment_variable.main();
     duplicate_pattern_field.main();
+    duplicate_private_named_parameter.main();
     duplicate_rest_element_in_pattern.main();
     duplicate_shown_name.main();
     duplicate_variable_pattern.main();
@@ -1384,6 +1389,7 @@
     non_native_function_type_argument_to_pointer.main();
     non_null_equals_parameters.main();
     non_positive_array_dimension.main();
+    non_redirecting_generative_constructor_with_primary.main();
     non_sized_type_argument.main();
     non_type_as_type_argument.main();
     non_type_in_catch_clause.main();
diff --git a/pkg/analyzer/test/src/diagnostics/text_direction_code_point_test.dart b/pkg/analyzer/test/src/diagnostics/text_direction_code_point_test.dart
index cbd07ac..c041319 100644
--- a/pkg/analyzer/test/src/diagnostics/text_direction_code_point_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/text_direction_code_point_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,10 +25,10 @@
 }
 ''',
       [
-        error(WarningCode.textDirectionCodePointInComment, 3, 1),
-        error(WarningCode.textDirectionCodePointInComment, 9, 1),
-        error(WarningCode.textDirectionCodePointInComment, 25, 1),
-        error(WarningCode.textDirectionCodePointInComment, 32, 1),
+        error(diag.textDirectionCodePointInComment, 3, 1),
+        error(diag.textDirectionCodePointInComment, 9, 1),
+        error(diag.textDirectionCodePointInComment, 25, 1),
+        error(diag.textDirectionCodePointInComment, 32, 1),
       ],
     );
   }
@@ -48,7 +48,7 @@
 ''',
       [
         error(
-          WarningCode.textDirectionCodePointInLiteral,
+          diag.textDirectionCodePointInLiteral,
           13,
           1,
           messageContains: ['U+202A'],
@@ -64,7 +64,7 @@
         Multiline!
 """;
 ''',
-      [error(WarningCode.textDirectionCodePointInLiteral, 12, 1)],
+      [error(diag.textDirectionCodePointInLiteral, 12, 1)],
     );
   }
 
@@ -82,15 +82,15 @@
 var u2069 = '\u2069';
 ''',
       [
-        error(WarningCode.textDirectionCodePointInLiteral, 13, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 30, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 47, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 64, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 81, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 98, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 115, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 132, 1),
-        error(WarningCode.textDirectionCodePointInLiteral, 149, 1),
+        error(diag.textDirectionCodePointInLiteral, 13, 1),
+        error(diag.textDirectionCodePointInLiteral, 30, 1),
+        error(diag.textDirectionCodePointInLiteral, 47, 1),
+        error(diag.textDirectionCodePointInLiteral, 64, 1),
+        error(diag.textDirectionCodePointInLiteral, 81, 1),
+        error(diag.textDirectionCodePointInLiteral, 98, 1),
+        error(diag.textDirectionCodePointInLiteral, 115, 1),
+        error(diag.textDirectionCodePointInLiteral, 132, 1),
+        error(diag.textDirectionCodePointInLiteral, 149, 1),
       ],
     );
   }
@@ -101,7 +101,7 @@
 var x = 'x';
 var u202a = '\u202A\$x';
 ''',
-      [error(WarningCode.textDirectionCodePointInLiteral, 26, 1)],
+      [error(diag.textDirectionCodePointInLiteral, 26, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
index 6f7a7e3..ca3e5d5 100644
--- a/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/throw_of_invalid_type_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -38,7 +38,7 @@
   throw a;
 }
 ''',
-      [error(CompileTimeErrorCode.throwOfInvalidType, 20, 1)],
+      [error(diag.throwOfInvalidType, 20, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/todo_test.dart b/pkg/analyzer/test/src/diagnostics/todo_test.dart
index 4adb956..592bdb3 100644
--- a/pkg/analyzer/test/src/diagnostics/todo_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/todo_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -15,6 +15,16 @@
 
 @reflectiveTest
 class TodoTest extends PubPackageResolutionTest {
+  test_eof() async {
+    await assertErrorsInCode(
+      r'''
+main() {}
+// TODO: Implement something else
+''',
+      [error(diag.todo, 13, 30, text: 'TODO: Implement something else')],
+    );
+  }
+
   test_fixme() async {
     await assertErrorsInCode(
       r'''
@@ -22,7 +32,7 @@
   // FIXME: Implement
 }
 ''',
-      [error(TodoCode.fixme, 14, 16, text: 'FIXME: Implement')],
+      [error(diag.fixme, 14, 16, text: 'FIXME: Implement')],
     );
   }
 
@@ -33,7 +43,7 @@
   // HACK: This is a hack
 }
 ''',
-      [error(TodoCode.hack, 14, 20, text: 'HACK: This is a hack')],
+      [error(diag.hack, 14, 20, text: 'HACK: This is a hack')],
     );
   }
 
@@ -46,8 +56,8 @@
 }
 ''',
       [
-        error(TodoCode.todo, 14, 15, text: 'TODO: Implement'),
-        error(TodoCode.todo, 38, 15, text: 'TODO: Implement'),
+        error(diag.todo, 14, 15, text: 'TODO: Implement'),
+        error(diag.todo, 38, 15, text: 'TODO: Implement'),
       ],
     );
   }
@@ -78,25 +88,25 @@
 ''',
       [
         error(
-          TodoCode.todo,
+          diag.todo,
           14,
           64,
           text: 'TODO(a): Implement something that is too long for one line',
         ),
         error(
-          TodoCode.todo,
+          diag.todo,
           129,
           61,
           text: 'TODO: Implement something that is too long for one line',
         ),
         error(
-          TodoCode.todo,
+          diag.todo,
           241,
           64,
           text: 'TODO(a): Implement something that is too long for one line',
         ),
         error(
-          TodoCode.todo,
+          diag.todo,
           362,
           61,
           text: 'TODO: Implement something that is too long for one line',
@@ -112,7 +122,7 @@
   // TODO: Implement
 }
 ''',
-      [error(TodoCode.todo, 14, 15, text: 'TODO: Implement')],
+      [error(diag.todo, 14, 15, text: 'TODO: Implement')],
     );
   }
 
@@ -136,13 +146,13 @@
 ''',
       [
         error(
-          TodoCode.todo,
+          diag.todo,
           20,
           67,
           text: 'TODO: Implement something that is too long for one line',
         ),
-        error(TodoCode.todo, 117, 25, text: 'TODO: Implement something'),
-        error(TodoCode.todo, 202, 25, text: 'TODO: Implement something'),
+        error(diag.todo, 117, 25, text: 'TODO: Implement something'),
+        error(diag.todo, 202, 25, text: 'TODO: Implement something'),
       ],
     );
   }
@@ -154,7 +164,7 @@
 /// This is the function documentation
 void f() {}
 ''',
-      [error(TodoCode.todo, 3, 25, text: 'TODO: Implement something')],
+      [error(diag.todo, 3, 25, text: 'TODO: Implement something')],
     );
   }
 
@@ -169,7 +179,7 @@
 ''',
       [
         error(
-          TodoCode.todo,
+          diag.todo,
           14,
           61,
           text: 'TODO: Implement something that is too long for one line',
@@ -189,7 +199,7 @@
 ''',
       [
         error(
-          TodoCode.todo,
+          diag.todo,
           14,
           61,
           text: 'TODO: Implement something that is too long for one line',
@@ -209,13 +219,13 @@
 ''',
       [
         error(
-          TodoCode.todo,
+          diag.todo,
           14,
           61,
           text: 'TODO: Implement something that is too long for one line',
         ),
         error(
-          TodoCode.todo,
+          diag.todo,
           82,
           59,
           text: 'TODO: This is a separate todo that is accidentally indented',
@@ -245,19 +255,19 @@
 ''',
       [
         error(
-          TodoCode.todo,
+          diag.todo,
           14,
           61,
           text: 'TODO: Implement something that is too long for one line',
         ),
         error(
-          TodoCode.todo,
+          diag.todo,
           116,
           61,
           text: 'TODO: Implement something that is too long for one line',
         ),
         error(
-          TodoCode.todo,
+          diag.todo,
           220,
           61,
           text: 'TODO: Implement something that is too long for one line',
@@ -273,7 +283,7 @@
   // UNDONE: This was undone
 }
 ''',
-      [error(TodoCode.undone, 14, 23, text: 'UNDONE: This was undone')],
+      [error(diag.undone, 14, 23, text: 'UNDONE: This was undone')],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/top_level_cycle_test.dart b/pkg/analyzer/test/src/diagnostics/top_level_cycle_test.dart
index de7f6a5..899dc4a 100644
--- a/pkg/analyzer/test/src/diagnostics/top_level_cycle_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/top_level_cycle_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,10 +23,7 @@
   static final y = x + 1;
 }
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 25, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 51, 1),
-      ],
+      [error(diag.topLevelCycle, 25, 1), error(diag.topLevelCycle, 51, 1)],
     );
   }
 
@@ -39,10 +36,7 @@
   final c = a;
 }
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 25, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 66, 1),
-      ],
+      [error(diag.topLevelCycle, 25, 1), error(diag.topLevelCycle, 66, 1)],
     );
   }
 
@@ -52,10 +46,7 @@
 var x = y + 1;
 var y = x + 1;
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 4, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 19, 1),
-      ],
+      [error(diag.topLevelCycle, 4, 1), error(diag.topLevelCycle, 19, 1)],
     );
   }
 
@@ -64,7 +55,7 @@
       r'''
 var x = x;
 ''',
-      [error(CompileTimeErrorCode.topLevelCycle, 4, 1)],
+      [error(diag.topLevelCycle, 4, 1)],
     );
   }
 
@@ -77,7 +68,7 @@
   ],
 ];
 ''',
-      [error(CompileTimeErrorCode.topLevelCycle, 4, 5)],
+      [error(diag.topLevelCycle, 4, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart b/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart
index 331497d..94803d1 100644
--- a/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_alias_cannot_reference_itself_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 typedef A<T extends A<int>>();
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -29,7 +29,7 @@
       '''
 typedef A(A b());
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -44,8 +44,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1),
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 46, 1),
+        error(diag.typeAliasCannotReferenceItself, 8, 1),
+        error(diag.typeAliasCannotReferenceItself, 46, 1),
       ],
     );
   }
@@ -55,7 +55,7 @@
       '''
 typedef A<T extends A<int>> = void Function();
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -64,7 +64,7 @@
       r'''
 typedef F<X extends F<X>> = F Function();
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -79,8 +79,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 13, 1),
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 40, 1),
+        error(diag.typeAliasCannotReferenceItself, 13, 1),
+        error(diag.typeAliasCannotReferenceItself, 40, 1),
       ],
     );
   }
@@ -105,8 +105,8 @@
 typedef T2 = T1;
 ''',
       [
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 2),
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 25, 2),
+        error(diag.typeAliasCannotReferenceItself, 8, 2),
+        error(diag.typeAliasCannotReferenceItself, 25, 2),
       ],
     );
   }
@@ -116,7 +116,7 @@
       '''
 typedef T = void Function(T);
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -125,7 +125,7 @@
       '''
 typedef T = T;
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -134,7 +134,7 @@
       '''
 typedef T = T?;
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -143,7 +143,7 @@
       '''
 typedef T = List<T>;
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -152,7 +152,7 @@
       '''
 typedef T<X extends T<Never>> = List<X>;
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -161,7 +161,7 @@
       '''
 typedef A({A a});
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -170,7 +170,7 @@
       '''
 typedef A([A a]);
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -179,7 +179,7 @@
       '''
 typedef A(A a);
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -188,7 +188,7 @@
       '''
 typedef A(List<A> a);
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 
@@ -217,7 +217,7 @@
       '''
 typedef A A();
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 10, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 10, 1)],
     );
   }
 
@@ -228,8 +228,8 @@
 typedef A B();
 ''',
       [
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 10, 1),
-        error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 25, 1),
+        error(diag.typeAliasCannotReferenceItself, 10, 1),
+        error(diag.typeAliasCannotReferenceItself, 25, 1),
       ],
     );
   }
@@ -239,7 +239,7 @@
       r'''
 typedef F = (F, int) Function();
 ''',
-      [error(CompileTimeErrorCode.typeAliasCannotReferenceItself, 8, 1)],
+      [error(diag.typeAliasCannotReferenceItself, 8, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
index 8c95dc1..7c930f6 100644
--- a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeAnnotationDeferredClass,
+          diag.typeAnnotationDeferredClass,
           77,
           3,
           messageContains: ["'a.D'"],
@@ -48,7 +48,7 @@
 f(var v) {
   v as a.A;
 }''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 66, 3)],
+      [error(diag.typeAnnotationDeferredClass, 66, 3)],
     );
   }
 
@@ -65,7 +65,7 @@
   } on a.A {
   }
 }''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 74, 3)],
+      [error(diag.typeAnnotationDeferredClass, 74, 3)],
     );
   }
 
@@ -81,7 +81,7 @@
   var v;
   C(a.A this.v);
 }''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 71, 3)],
+      [error(diag.typeAnnotationDeferredClass, 71, 3)],
     );
   }
 
@@ -95,7 +95,7 @@
 import 'lib1.dart' deferred as a;
 a.A? f() { return null; }
 ''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 48, 4)],
+      [error(diag.typeAnnotationDeferredClass, 48, 4)],
     );
   }
 
@@ -108,7 +108,7 @@
 library root;
 import 'lib1.dart' deferred as a;
 f(a.A g()) {}''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 50, 3)],
+      [error(diag.typeAnnotationDeferredClass, 50, 3)],
     );
   }
 
@@ -124,8 +124,8 @@
   bool b = v is a.A;
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 66, 1),
-        error(CompileTimeErrorCode.typeAnnotationDeferredClass, 75, 3),
+        error(diag.unusedLocalVariable, 66, 1),
+        error(diag.typeAnnotationDeferredClass, 75, 3),
       ],
     );
   }
@@ -141,7 +141,7 @@
 class C {
   a.A? m() { return null; }
 }''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 60, 4)],
+      [error(diag.typeAnnotationDeferredClass, 60, 4)],
     );
   }
 
@@ -154,7 +154,7 @@
 library root;
 import 'lib1.dart' deferred as a;
 f(a.A v) {}''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 50, 3)],
+      [error(diag.typeAnnotationDeferredClass, 50, 3)],
     );
   }
 
@@ -169,7 +169,7 @@
 class C<E> {}
 C<a.A> c = C();
 ''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 64, 3)],
+      [error(diag.typeAnnotationDeferredClass, 64, 3)],
     );
   }
 
@@ -185,8 +185,8 @@
 C<a.A, a.A> c = C();
 ''',
       [
-        error(CompileTimeErrorCode.typeAnnotationDeferredClass, 67, 3),
-        error(CompileTimeErrorCode.typeAnnotationDeferredClass, 72, 3),
+        error(diag.typeAnnotationDeferredClass, 67, 3),
+        error(diag.typeAnnotationDeferredClass, 72, 3),
       ],
     );
   }
@@ -200,7 +200,7 @@
 library root;
 import 'lib1.dart' deferred as a;
 class C<E extends a.A> {}''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 66, 3)],
+      [error(diag.typeAnnotationDeferredClass, 66, 3)],
     );
   }
 
@@ -214,7 +214,7 @@
 import 'lib1.dart' deferred as a;
 a.A v = a.A();
 ''',
-      [error(CompileTimeErrorCode.typeAnnotationDeferredClass, 48, 3)],
+      [error(diag.typeAnnotationDeferredClass, 48, 3)],
     );
   }
 }
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 178faa8..5e0f41f 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
 class G<E extends A> {}
 class D = G<B> with C;
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 69, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 69, 1)],
     );
   }
 
@@ -38,7 +38,7 @@
 }
 f() { return const G<B>(); }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 81, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 81, 1)],
     );
   }
 
@@ -62,8 +62,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 28, 2),
-        error(CompileTimeErrorCode.constConstructorParamTypeMismatch, 28, 2),
+        error(diag.argumentTypeNotAssignable, 28, 2),
+        error(diag.constConstructorParamTypeMismatch, 28, 2),
       ],
     );
   }
@@ -83,7 +83,7 @@
   v<String>()
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 28, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 28, 6)],
     );
   }
 
@@ -95,7 +95,7 @@
 class G<E extends A> {}
 class C extends G<B>{}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 64, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 64, 1)],
     );
   }
 
@@ -106,7 +106,7 @@
 class X<T extends Type> {}
 class Y<U> extends X<U> {}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 48, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 48, 1)],
     );
   }
 
@@ -121,7 +121,7 @@
   E<String>(0).foo();
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 70, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 70, 6)],
     );
   }
 
@@ -136,7 +136,7 @@
   E<String>(0)();
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 71, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 71, 6)],
     );
   }
 
@@ -149,7 +149,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           52,
           1,
           contextMessages: [message(testFile, 52, 1)],
@@ -165,7 +165,7 @@
 
 void f(A<String> a) {}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 53, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 53, 6)],
     );
   }
 
@@ -182,7 +182,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           71,
           1,
           contextMessages: [message(testFile, 69, 4)],
@@ -198,7 +198,7 @@
   (<T extends num>() {})<String>();
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 36, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 36, 6)],
     );
   }
 
@@ -213,7 +213,7 @@
   c<String>();
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 63, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 63, 6)],
     );
   }
 
@@ -225,7 +225,7 @@
   foo<String>;
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 51, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 51, 6)],
     );
   }
 
@@ -257,7 +257,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           48,
           1,
           contextMessages: [message(testFile, 46, 4)],
@@ -276,7 +276,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           56,
           1,
           contextMessages: [message(testFile, 54, 4)],
@@ -295,7 +295,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           50,
           1,
           contextMessages: [message(testFile, 48, 4)],
@@ -314,7 +314,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           119,
           5,
           contextMessages: [message(testFile, 116, 9)],
@@ -340,7 +340,7 @@
 class G<E extends A> {}
 class C implements G<B>{}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 67, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 67, 1)],
     );
   }
 
@@ -354,7 +354,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           61,
           1,
           contextMessages: [message(testFile, 59, 4)],
@@ -384,7 +384,7 @@
 @A<String>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 44, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 44, 6)],
     );
   }
 
@@ -400,7 +400,7 @@
 @B<String>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 66, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 66, 6)],
     );
   }
 
@@ -425,7 +425,7 @@
   f<F>();
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 131, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 131, 1)],
     );
   }
 
@@ -443,7 +443,7 @@
   print(f<String>('hello', 'world'));
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 145, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 145, 6)],
     );
   }
 
@@ -464,7 +464,7 @@
   print(factory.point<String>('hello', 'world'));
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 202, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 202, 6)],
     );
   }
 
@@ -483,7 +483,7 @@
   print(f<String>('hello', 'world'));
 }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 140, 6)],
+      [error(diag.typeArgumentNotMatchingBounds, 140, 6)],
     );
   }
 
@@ -499,7 +499,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           60,
           1,
           contextMessages: [message(testFile, 58, 4)],
@@ -516,7 +516,7 @@
 class G<E extends A> {}
 f() { return new G<B>(); }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 65, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 65, 1)],
     );
   }
 
@@ -538,7 +538,7 @@
 class G<E extends B> {}
 f() { return new G<A>(); }
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 96, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 96, 1)],
     );
   }
 
@@ -550,7 +550,7 @@
 class G<T extends A> {}
 typedef X = G<B>;
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 60, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 60, 1)],
     );
   }
 
@@ -578,7 +578,7 @@
 class G<T extends A> {}
 typedef X = G<B>;
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 60, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 60, 1)],
     );
   }
 
@@ -597,7 +597,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           42,
           1,
           contextMessages: [message(testFile, 42, 1)],
@@ -615,7 +615,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           58,
           6,
           contextMessages: [message(testFile, 56, 9)],
@@ -645,8 +645,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 94, 1),
-        error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 104, 1),
+        error(diag.unusedLocalVariable, 94, 1),
+        error(diag.typeArgumentNotMatchingBounds, 104, 1),
       ],
     );
   }
@@ -663,7 +663,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           65,
           3,
           contextMessages: [message(testFile, 65, 3)],
@@ -683,7 +683,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           92,
           1,
           contextMessages: [message(testFile, 92, 1), message(testFile, 92, 1)],
@@ -702,7 +702,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           50,
           1,
           contextMessages: [message(testFile, 48, 4)],
@@ -749,7 +749,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           50,
           1,
           contextMessages: [message(testFile, 48, 4)],
@@ -769,8 +769,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.redirectToInvalidReturnType, 99, 4),
-        error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 101, 1),
+        error(diag.redirectToInvalidReturnType, 99, 4),
+        error(diag.typeArgumentNotMatchingBounds, 101, 1),
       ],
     );
   }
@@ -833,7 +833,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           64,
           1,
           contextMessages: [message(testFile, 62, 4)],
@@ -850,7 +850,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           36,
           6,
           contextMessages: [message(testFile, 34, 9)],
@@ -867,7 +867,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           56,
           6,
           contextMessages: [message(testFile, 53, 10)],
@@ -885,7 +885,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           51,
           6,
           contextMessages: [message(testFile, 49, 9)],
@@ -905,7 +905,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           77,
           1,
           contextMessages: [message(testFile, 75, 4)],
@@ -924,7 +924,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.typeArgumentNotMatchingBounds,
+          diag.typeArgumentNotMatchingBounds,
           48,
           1,
           contextMessages: [message(testFile, 46, 4)],
@@ -941,7 +941,7 @@
 mixin G<E extends A> {}
 class C extends Object with G<B>{}
 ''',
-      [error(CompileTimeErrorCode.typeArgumentNotMatchingBounds, 76, 1)],
+      [error(diag.typeArgumentNotMatchingBounds, 76, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart b/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart
index ef62d7b..9f74dcd 100644
--- a/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return i is! Null;
 }
 ''',
-      [error(WarningCode.typeCheckIsNotNull, 21, 10)],
+      [error(diag.typeCheckIsNotNull, 21, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart b/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart
index 3467f60..04b5965 100644
--- a/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_check_is_null_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return i is Null;
 }
 ''',
-      [error(WarningCode.typeCheckIsNull, 21, 9)],
+      [error(diag.typeCheckIsNull, 21, 9)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart b/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
index 4a443ba..bc5334b 100644
--- a/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   static T? foo;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 22, 1)],
+      [error(diag.typeParameterReferencedByStatic, 22, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   static T? get foo => null;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 22, 1)],
+      [error(diag.typeParameterReferencedByStatic, 22, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 70, 1)],
+      [error(diag.typeParameterReferencedByStatic, 70, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 49, 1)],
+      [error(diag.typeParameterReferencedByStatic, 49, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
   static foo(T a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 26, 1)],
+      [error(diag.typeParameterReferencedByStatic, 26, 1)],
     );
   }
 
@@ -84,7 +84,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 22, 1)],
+      [error(diag.typeParameterReferencedByStatic, 22, 1)],
     );
   }
 
@@ -95,7 +95,7 @@
   static set foo(T _) {}
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 30, 1)],
+      [error(diag.typeParameterReferencedByStatic, 30, 1)],
     );
   }
 
@@ -108,7 +108,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 34, 1)],
+      [error(diag.typeParameterReferencedByStatic, 34, 1)],
     );
   }
 
@@ -119,7 +119,7 @@
   static T? foo;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 33, 1)],
+      [error(diag.typeParameterReferencedByStatic, 33, 1)],
     );
   }
 
@@ -130,7 +130,7 @@
   static T foo() => throw 0;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 33, 1)],
+      [error(diag.typeParameterReferencedByStatic, 33, 1)],
     );
   }
 
@@ -141,7 +141,7 @@
   static T? foo;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterReferencedByStatic, 22, 1)],
+      [error(diag.typeParameterReferencedByStatic, 22, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart b/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
index f7d257c..77928e4 100644
--- a/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_parameter_supertype_of_its_bound_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 class A<T extends T> {
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 8, 1)],
+      [error(diag.typeParameterSupertypeOfItsBound, 8, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   local;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 24, 1)],
+      [error(diag.typeParameterSupertypeOfItsBound, 24, 1)],
     );
   }
 
@@ -47,7 +47,7 @@
   local;
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 54, 1)],
+      [error(diag.typeParameterSupertypeOfItsBound, 54, 1)],
     );
   }
 
@@ -60,7 +60,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 8, 1)],
+      [error(diag.typeParameterSupertypeOfItsBound, 8, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
 
 class B<U extends A<U>> {}
 ''',
-      [error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 38, 1)],
+      [error(diag.typeParameterSupertypeOfItsBound, 38, 1)],
     );
   }
 
@@ -86,8 +86,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 54, 2),
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 72, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 54, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 72, 2),
       ],
     );
   }
@@ -100,8 +100,8 @@
 class B<T1 extends A<T2>, T2 extends T1> {}
 ''',
       [
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 38, 2),
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 56, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 38, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 56, 2),
       ],
     );
   }
@@ -113,8 +113,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 8, 2),
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 27, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 8, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 27, 2),
       ],
     );
   }
@@ -128,8 +128,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 24, 2),
-        error(CompileTimeErrorCode.typeParameterSupertypeOfItsBound, 43, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 24, 2),
+        error(diag.typeParameterSupertypeOfItsBound, 43, 2),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart
index f0c5ef8..04301a4 100644
--- a/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   if (p is A) {
   }
 }''',
-      [error(CompileTimeErrorCode.typeTestWithNonType, 33, 1)],
+      [error(diag.typeTestWithNonType, 33, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart b/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart
index c43714e..71f9a19 100644
--- a/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   if (p is A) {
   }
 }''',
-      [error(CompileTimeErrorCode.typeTestWithUndefinedName, 22, 1)],
+      [error(diag.typeTestWithUndefinedName, 22, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_annotation_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_annotation_test.dart
index 77335f9..273d3e4 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_annotation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_annotation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 0, 11)],
+      [error(diag.undefinedAnnotation, 0, 11)],
     );
   }
 
@@ -43,7 +43,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 0, 13)],
+      [error(diag.undefinedAnnotation, 0, 13)],
     );
   }
 
@@ -53,7 +53,7 @@
 @p.A(0)
 class B {}
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 0, 7)],
+      [error(diag.undefinedAnnotation, 0, 7)],
     );
   }
 
@@ -65,7 +65,7 @@
 @p.A(0)
 class B {}
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 26, 7)],
+      [error(diag.undefinedAnnotation, 26, 7)],
     );
   }
 
@@ -77,7 +77,7 @@
 main() {
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 25, 13)],
+      [error(diag.undefinedAnnotation, 25, 13)],
     );
   }
 
@@ -89,7 +89,7 @@
   static const foo = null;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 0, 4)],
+      [error(diag.undefinedAnnotation, 0, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart
index 3c4e15b..303d0ad3 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,8 +21,8 @@
 f() { boolean v; }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedClassBoolean, 6, 7),
-        error(WarningCode.unusedLocalVariable, 14, 1),
+        error(diag.undefinedClassBoolean, 6, 7),
+        error(diag.unusedLocalVariable, 14, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
index 0e6b338..1bc8ef5 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_class_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   return const A();
 }
 ''',
-      [error(CompileTimeErrorCode.constWithNonType, 21, 1)],
+      [error(diag.constWithNonType, 21, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
 
 dynamic x;
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 29, 7)],
+      [error(diag.undefinedClass, 29, 7)],
     );
   }
 
@@ -44,7 +44,7 @@
 
 p.A a;
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
   }
 
@@ -55,7 +55,7 @@
 
 A a;
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 8)],
+      [error(diag.uriDoesNotExist, 7, 8)],
     );
   }
 
@@ -66,10 +66,7 @@
 
 A a;
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 7, 8),
-        error(CompileTimeErrorCode.undefinedClass, 25, 1),
-      ],
+      [error(diag.uriDoesNotExist, 7, 8), error(diag.undefinedClass, 25, 1)],
     );
   }
 
@@ -84,7 +81,7 @@
 
 _$A a;
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 18, 3)],
+      [error(diag.undefinedClass, 18, 3)],
     );
   }
 
@@ -95,7 +92,7 @@
 
 _$A a;
 ''',
-      [error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 17)],
+      [error(diag.uriHasNotBeenGenerated, 5, 17)],
     );
   }
 
@@ -106,7 +103,7 @@
 
 _$A a;
 ''',
-      [error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 10)],
+      [error(diag.uriHasNotBeenGenerated, 5, 10)],
     );
   }
 
@@ -118,8 +115,8 @@
 A a;
 ''',
       [
-        error(CompileTimeErrorCode.uriHasNotBeenGenerated, 5, 10),
-        error(CompileTimeErrorCode.undefinedClass, 18, 1),
+        error(diag.uriHasNotBeenGenerated, 5, 10),
+        error(diag.undefinedClass, 18, 1),
       ],
     );
   }
@@ -131,10 +128,7 @@
 
 _$A a;
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 5, 8),
-        error(CompileTimeErrorCode.undefinedClass, 16, 3),
-      ],
+      [error(diag.uriDoesNotExist, 5, 8), error(diag.undefinedClass, 16, 3)],
     );
   }
 
@@ -145,10 +139,7 @@
 
 A a;
 ''',
-      [
-        error(CompileTimeErrorCode.uriDoesNotExist, 5, 8),
-        error(CompileTimeErrorCode.undefinedClass, 16, 1),
-      ],
+      [error(diag.uriDoesNotExist, 5, 8), error(diag.undefinedClass, 16, 1)],
     );
   }
 
@@ -159,7 +150,7 @@
 
 p.A a;
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 26, 3)],
+      [error(diag.undefinedClass, 26, 3)],
     );
   }
 
@@ -168,7 +159,7 @@
       '''
 f() { new C(); }
 ''',
-      [error(CompileTimeErrorCode.newWithNonType, 10, 1)],
+      [error(diag.newWithNonType, 10, 1)],
     );
   }
 
@@ -184,7 +175,7 @@
 // @dart = 2.19
 void f(Record r) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 23, 6)],
+      [error(diag.undefinedClass, 23, 6)],
     );
   }
 
@@ -205,10 +196,7 @@
       '''
 f() { C c; }
 ''',
-      [
-        error(CompileTimeErrorCode.undefinedClass, 6, 1),
-        error(WarningCode.unusedLocalVariable, 8, 1),
-      ],
+      [error(diag.undefinedClass, 6, 1), error(diag.unusedLocalVariable, 8, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_default_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_default_test.dart
index 3c02bbe..e335d37 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_default_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_default_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -37,13 +37,7 @@
   B();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-          49,
-          1,
-        ),
-      ],
+      [error(diag.undefinedConstructorInInitializerDefault, 49, 1)],
     );
   }
 
@@ -68,13 +62,7 @@
   B() : super();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-          55,
-          7,
-        ),
-      ],
+      [error(diag.undefinedConstructorInInitializerDefault, 55, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_test.dart
index ac946ce..30a2d22 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_constructor_in_initializer_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.undefinedConstructorInInitializer,
+          diag.undefinedConstructorInInitializer,
           39,
           13,
           messageContains: ["class 'A'", "named 'named'"],
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_test.dart
index 362c3ea..78d41ee 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_enum_constant_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -32,7 +32,7 @@
   return E.TWO;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedEnumConstant, 34, 3)],
+      [error(diag.undefinedEnumConstant, 34, 3)],
     );
   }
 }
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
index dfc323b..410c369 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_named_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_named_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   v.named()
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedEnumConstructorNamed, 13, 5)],
+      [error(diag.undefinedEnumConstructorNamed, 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
index e256029..8169d43 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_unnamed_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_enum_constructor_unnamed_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,7 +23,7 @@
   const E.named();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedEnumConstructorUnnamed, 11, 1)],
+      [error(diag.undefinedEnumConstructorUnnamed, 11, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
   const E.named();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedEnumConstructorUnnamed, 11, 1)],
+      [error(diag.undefinedEnumConstructorUnnamed, 11, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_extension_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_extension_getter_test.dart
index 2d11134..2d72739 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_extension_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_extension_getter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   E('a').g;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionGetter, 40, 1)],
+      [error(diag.undefinedExtensionGetter, 40, 1)],
     );
   }
 
@@ -48,7 +48,7 @@
   E(0).foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionGetter, 56, 3)],
+      [error(diag.undefinedExtensionGetter, 56, 3)],
     );
   }
 
@@ -62,7 +62,7 @@
   E(0).foo += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionGetter, 56, 3)],
+      [error(diag.undefinedExtensionGetter, 56, 3)],
     );
   }
 
@@ -72,7 +72,7 @@
 extension E on Object {}
 var a = E.v;
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionGetter, 35, 1)],
+      [error(diag.undefinedExtensionGetter, 35, 1)],
     );
   }
 
@@ -84,7 +84,7 @@
   E.v;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionGetter, 40, 1)],
+      [error(diag.undefinedExtensionGetter, 40, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart
index b9fbb07..387a47f 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_extension_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   E('a').m();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionMethod, 40, 1)],
+      [error(diag.undefinedExtensionMethod, 40, 1)],
     );
 
     var node = findNode.methodInvocation('m();');
@@ -70,7 +70,7 @@
 extension E on Object {}
 var a = E.m();
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionMethod, 35, 1)],
+      [error(diag.undefinedExtensionMethod, 35, 1)],
     );
   }
 
@@ -82,7 +82,7 @@
   E.m();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionMethod, 40, 1)],
+      [error(diag.undefinedExtensionMethod, 40, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_extension_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_extension_operator_test.dart
index e834484..839bad3 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_extension_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_extension_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   E('a') + 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 40, 1)],
+      [error(diag.undefinedExtensionOperator, 40, 1)],
     );
 
     var node = findNode.binary('+ 1');
@@ -87,7 +87,7 @@
   E(a)[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 48, 3)],
+      [error(diag.undefinedExtensionOperator, 48, 3)],
     );
   }
 
@@ -104,7 +104,7 @@
   E(a)[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 93, 3)],
+      [error(diag.undefinedExtensionOperator, 93, 3)],
     );
   }
 
@@ -136,7 +136,7 @@
   E(a)[0] += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 83, 3)],
+      [error(diag.undefinedExtensionOperator, 83, 3)],
     );
   }
 
@@ -152,8 +152,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedExtensionOperator, 48, 3),
-        error(CompileTimeErrorCode.undefinedExtensionOperator, 48, 3),
+        error(diag.undefinedExtensionOperator, 48, 3),
+        error(diag.undefinedExtensionOperator, 48, 3),
       ],
     );
   }
@@ -171,7 +171,7 @@
   E(a)[0] += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 93, 3)],
+      [error(diag.undefinedExtensionOperator, 93, 3)],
     );
   }
 
@@ -188,7 +188,7 @@
   E(a)[0] = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 83, 3)],
+      [error(diag.undefinedExtensionOperator, 83, 3)],
     );
   }
 
@@ -203,7 +203,7 @@
   E(a)[0] = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 48, 3)],
+      [error(diag.undefinedExtensionOperator, 48, 3)],
     );
   }
 
@@ -240,7 +240,7 @@
   -E('a');
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionOperator, 33, 1)],
+      [error(diag.undefinedExtensionOperator, 33, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_extension_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_extension_setter_test.dart
index ba9a540..3937c96 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_extension_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_extension_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   E(0).foo = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionSetter, 35, 3)],
+      [error(diag.undefinedExtensionSetter, 35, 3)],
     );
   }
 
@@ -48,7 +48,7 @@
   E(0).foo = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionSetter, 56, 3)],
+      [error(diag.undefinedExtensionSetter, 56, 3)],
     );
   }
 
@@ -62,7 +62,7 @@
   E(0).foo += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionSetter, 56, 3)],
+      [error(diag.undefinedExtensionSetter, 56, 3)],
     );
   }
 
@@ -82,7 +82,7 @@
   Ext(c).id++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionSetter, 117, 2)],
+      [error(diag.undefinedExtensionSetter, 117, 2)],
     );
   }
 
@@ -94,7 +94,7 @@
   E.foo = 3;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedExtensionSetter, 37, 3)],
+      [error(diag.undefinedExtensionSetter, 37, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index b2c5cbc..f1a4367 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +26,7 @@
   c.foo += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 46, 3)],
+      [error(diag.undefinedGetter, 46, 3)],
     );
   }
 
@@ -42,7 +41,7 @@
   C.foo += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 50, 3)],
+      [error(diag.undefinedGetter, 50, 3)],
     );
   }
 
@@ -55,7 +54,7 @@
   print(A().);
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 33, 1)],
+      [error(diag.missingIdentifier, 33, 1)],
     );
   }
 
@@ -74,7 +73,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 95, 3)],
+      [error(diag.undefinedGetter, 95, 3)],
     );
   }
 
@@ -88,7 +87,7 @@
   0.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 58, 3)],
+      [error(diag.undefinedGetter, 58, 3)],
     );
   }
 
@@ -98,7 +97,7 @@
 extension E on int {}
 var a = 3.v;
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 32, 1)],
+      [error(diag.undefinedGetter, 32, 1)],
     );
   }
 
@@ -113,7 +112,7 @@
   c.a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 46, 1)],
+      [error(diag.undefinedGetter, 46, 1)],
     );
   }
 
@@ -132,7 +131,7 @@
   c.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 93, 3)],
+      [error(diag.undefinedGetter, 93, 3)],
     );
   }
 
@@ -149,7 +148,7 @@
   int get foo => 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetterOnFunctionType, 58, 3)],
+      [error(diag.undefinedGetterOnFunctionType, 58, 3)],
     );
   }
 
@@ -239,7 +238,7 @@
   return [if (x is String) x.length];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 40, 6)],
+      [error(diag.undefinedGetter, 40, 6)],
     );
   }
 
@@ -258,7 +257,7 @@
   return {if (x is String) x : x.length};
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 44, 6)],
+      [error(diag.undefinedGetter, 44, 6)],
     );
   }
 
@@ -277,7 +276,7 @@
   return {if (x is String) x.length};
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 40, 6)],
+      [error(diag.undefinedGetter, 40, 6)],
     );
   }
 
@@ -298,7 +297,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 38, 6)],
+      [error(diag.undefinedGetter, 38, 6)],
     );
   }
 
@@ -318,7 +317,7 @@
 class T {}
 f(T e) { return e.m; }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 29, 1)],
+      [error(diag.undefinedGetter, 29, 1)],
     );
   }
 
@@ -329,7 +328,7 @@
   f() { return this.m; }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 30, 1)],
+      [error(diag.undefinedGetter, 30, 1)],
     );
   }
 
@@ -342,7 +341,7 @@
   c..new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 27, 3)],
+      [error(diag.undefinedGetter, 27, 3)],
     );
   }
 
@@ -353,7 +352,7 @@
   d.new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 19, 3)],
+      [error(diag.undefinedGetter, 19, 3)],
     );
   }
 
@@ -366,7 +365,7 @@
   (c1 ?? c2).new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 42, 3)],
+      [error(diag.undefinedGetter, 42, 3)],
     );
   }
 
@@ -379,7 +378,7 @@
   c?.new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 27, 3)],
+      [error(diag.undefinedGetter, 27, 3)],
     );
   }
 
@@ -396,7 +395,7 @@
   d.c.new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 60, 3)],
+      [error(diag.undefinedGetter, 60, 3)],
     );
   }
 
@@ -409,7 +408,7 @@
   c.new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 25, 3)],
+      [error(diag.undefinedGetter, 25, 3)],
     );
   }
 
@@ -420,7 +419,7 @@
   t.new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 16, 3)],
+      [error(diag.undefinedGetter, 16, 3)],
     );
   }
 
@@ -432,7 +431,7 @@
   _null.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfNullValue, 28, 3)],
+      [error(diag.invalidUseOfNullValue, 28, 3)],
     );
   }
 
@@ -443,7 +442,7 @@
   return o.call;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 25, 4)],
+      [error(diag.undefinedGetter, 25, 4)],
     );
   }
 
@@ -456,7 +455,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 66, 6)],
+      [error(diag.undefinedGetter, 66, 6)],
     );
   }
 
@@ -467,7 +466,7 @@
   return (a).call;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 30, 8)],
+      [error(diag.returnOfInvalidTypeFromFunction, 30, 8)],
     );
   }
 
@@ -491,7 +490,7 @@
 }
 var a = A?.x;
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 37, 2)],
+      [error(diag.invalidNullAwareOperator, 37, 2)],
     );
   }
 
@@ -505,7 +504,7 @@
 f(var p) {
   f(C.g);
 }''',
-      [error(CompileTimeErrorCode.undefinedGetter, 75, 1)],
+      [error(diag.undefinedGetter, 75, 1)],
     );
   }
 
@@ -523,7 +522,7 @@
   g(c).a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 92, 1)],
+      [error(diag.undefinedGetter, 92, 1)],
     );
   }
 
@@ -534,7 +533,7 @@
 f(var p) {
   f(C.m);
 }''',
-      [error(CompileTimeErrorCode.undefinedGetter, 28, 1)],
+      [error(diag.undefinedGetter, 28, 1)],
     );
   }
 
@@ -548,7 +547,7 @@
   T..foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedGetter, 54, 3)],
+      [error(diag.undefinedGetter, 54, 3)],
     );
   }
 
@@ -559,8 +558,8 @@
 f() => A?.hashCode;
 ''',
       [
-        error(StaticWarningCode.invalidNullAwareOperator, 19, 2),
-        error(CompileTimeErrorCode.undefinedGetter, 21, 8),
+        error(diag.invalidNullAwareOperator, 19, 2),
+        error(diag.undefinedGetter, 21, 8),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
index 3f03abe..3398ab0 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       r'''
 export 'lib1.dart' hide a;
 ''',
-      [error(WarningCode.undefinedHiddenName, 24, 1)],
+      [error(diag.undefinedHiddenName, 24, 1)],
     );
   }
 
@@ -31,10 +31,7 @@
       r'''
 import 'lib1.dart' hide a;
 ''',
-      [
-        error(WarningCode.unusedImport, 7, 11),
-        error(WarningCode.undefinedHiddenName, 24, 1),
-      ],
+      [error(diag.unusedImport, 7, 11), error(diag.undefinedHiddenName, 24, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart
index 20e400a..6347187 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -20,7 +20,7 @@
       '''
 void a() { await; }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifierAwait, 11, 5)],
+      [error(diag.undefinedIdentifierAwait, 11, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index c890516..b67c4d8 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
-import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,8 +27,8 @@
 }
     ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 12, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 12, 3),
+        error(diag.undefinedIdentifier, 12, 3),
+        error(diag.constWithNonConstantArgument, 12, 3),
       ],
     );
   }
@@ -47,8 +46,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 20, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 20, 3),
+        error(diag.undefinedIdentifier, 20, 3),
+        error(diag.constWithNonConstantArgument, 20, 3),
       ],
     );
   }
@@ -65,8 +64,8 @@
 }
     ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 12, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 12, 3),
+        error(diag.undefinedIdentifier, 12, 3),
+        error(diag.constWithNonConstantArgument, 12, 3),
       ],
     );
   }
@@ -84,8 +83,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 24, 3),
-        error(CompileTimeErrorCode.undefinedIdentifier, 24, 3),
+        error(diag.constWithNonConstantArgument, 24, 3),
+        error(diag.undefinedIdentifier, 24, 3),
       ],
     );
   }
@@ -102,8 +101,8 @@
 }
     ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 12, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 12, 3),
+        error(diag.undefinedIdentifier, 12, 3),
+        error(diag.constWithNonConstantArgument, 12, 3),
       ],
     );
   }
@@ -121,8 +120,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 20, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 20, 3),
+        error(diag.undefinedIdentifier, 20, 3),
+        error(diag.constWithNonConstantArgument, 20, 3),
       ],
     );
   }
@@ -144,8 +143,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 29, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 29, 3),
+        error(diag.undefinedIdentifier, 29, 3),
+        error(diag.constWithNonConstantArgument, 29, 3),
       ],
     );
   }
@@ -168,8 +167,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 33, 3),
-        error(CompileTimeErrorCode.undefinedIdentifier, 33, 3),
+        error(diag.constWithNonConstantArgument, 33, 3),
+        error(diag.undefinedIdentifier, 33, 3),
       ],
     );
   }
@@ -191,8 +190,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 29, 3),
-        error(CompileTimeErrorCode.constWithNonConstantArgument, 29, 3),
+        error(diag.undefinedIdentifier, 29, 3),
+        error(diag.constWithNonConstantArgument, 29, 3),
       ],
     );
   }
@@ -204,7 +203,7 @@
   (x) = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 14, 1)],
+      [error(diag.undefinedIdentifier, 14, 1)],
     );
   }
 
@@ -216,8 +215,8 @@
 class A {
 }''',
       [
-        error(CompileTimeErrorCode.undefinedIdentifier, 5, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 17, 1),
+        error(diag.undefinedIdentifier, 5, 1),
+        error(diag.undefinedIdentifier, 17, 1),
       ],
     );
   }
@@ -231,7 +230,7 @@
   foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 32, 3)],
+      [error(diag.undefinedIdentifier, 32, 3)],
     );
   }
 
@@ -242,7 +241,7 @@
   foo += 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 3)],
+      [error(diag.undefinedIdentifier, 13, 3)],
     );
   }
 
@@ -253,7 +252,7 @@
   for (e in l) {
   }
 }''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 18, 1)],
+      [error(diag.undefinedIdentifier, 18, 1)],
     );
   }
 
@@ -273,8 +272,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 25, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 40, 1),
+        error(diag.unusedLocalVariable, 25, 1),
+        error(diag.undefinedIdentifier, 40, 1),
       ],
     );
   }
@@ -288,7 +287,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 26, 1)],
+      [error(diag.undefinedIdentifier, 26, 1)],
     );
   }
 
@@ -311,8 +310,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 17, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 31, 1),
+        error(diag.unusedLocalVariable, 17, 1),
+        error(diag.undefinedIdentifier, 31, 1),
       ],
     );
   }
@@ -322,7 +321,7 @@
       '''
 int a() => b;
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 11, 1)],
+      [error(diag.undefinedIdentifier, 11, 1)],
     );
   }
 
@@ -348,7 +347,7 @@
   List;
   String;
 }''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 49, 6)],
+      [error(diag.undefinedIdentifier, 49, 6)],
     );
   }
 
@@ -367,7 +366,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 96, 3)],
+      [error(diag.undefinedIdentifier, 96, 3)],
     );
   }
 
@@ -376,7 +375,7 @@
       '''
 var a = b;
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 8, 1)],
+      [error(diag.undefinedIdentifier, 8, 1)],
     );
   }
 
@@ -385,7 +384,7 @@
       '''
 f() { C.m(); }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 6, 1)],
+      [error(diag.undefinedIdentifier, 6, 1)],
     );
   }
 
@@ -398,7 +397,7 @@
   foo++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 32, 3)],
+      [error(diag.undefinedIdentifier, 32, 3)],
     );
   }
 
@@ -411,7 +410,7 @@
   ++foo;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 34, 3)],
+      [error(diag.undefinedIdentifier, 34, 3)],
     );
   }
 
@@ -430,8 +429,8 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 58, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 62, 4),
+        error(diag.unusedLocalVariable, 58, 1),
+        error(diag.undefinedIdentifier, 62, 4),
       ],
     );
   }
@@ -450,7 +449,7 @@
     _foo = 42;
   }
 }''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 54, 4)],
+      [error(diag.undefinedIdentifier, 54, 4)],
     );
   }
 
@@ -471,7 +470,7 @@
   print(is String);
 }
 ''',
-      [error(ParserErrorCode.missingIdentifier, 29, 2)],
+      [error(diag.missingIdentifier, 29, 2)],
     );
   }
 
@@ -484,8 +483,8 @@
 }
 ''',
       [
-        error(ParserErrorCode.missingIdentifier, 32, 1),
-        error(CompileTimeErrorCode.undefinedGetter, 32, 1),
+        error(diag.missingIdentifier, 32, 1),
+        error(diag.undefinedGetter, 32, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
index 0f5183f..82b9610 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,12 +25,7 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedMethod,
-          76,
-          8,
-          messageContains: ["type 'bool'"],
-        ),
+        error(diag.undefinedMethod, 76, 8, messageContains: ["type 'bool'"]),
       ],
     );
   }
@@ -60,7 +55,7 @@
   b.a();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 33, 1)],
+      [error(diag.undefinedMethod, 33, 1)],
     );
   }
 
@@ -80,7 +75,7 @@
   c.a();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 33, 1)],
+      [error(diag.undefinedMethod, 33, 1)],
     );
   }
 
@@ -99,7 +94,7 @@
 }
 
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 27, 3)],
+      [error(diag.undefinedMethod, 27, 3)],
     );
   }
 
@@ -118,7 +113,7 @@
 
 set foo(int x) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 27, 3)],
+      [error(diag.undefinedMethod, 27, 3)],
     );
   }
 
@@ -149,7 +144,7 @@
   void foo() {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethodOnFunctionType, 58, 3)],
+      [error(diag.undefinedMethodOnFunctionType, 58, 3)],
     );
   }
 
@@ -197,7 +192,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 85, 1)],
+      [error(diag.undefinedMethod, 85, 1)],
     );
   }
 
@@ -218,7 +213,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 123, 3)],
+      [error(diag.undefinedMethod, 123, 3)],
     );
   }
 
@@ -231,7 +226,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 22, 3)],
+      [error(diag.undefinedMethod, 22, 3)],
     );
   }
 
@@ -243,7 +238,7 @@
   c..abs();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 25, 3)],
+      [error(diag.undefinedMethod, 25, 3)],
     );
   }
 
@@ -253,7 +248,7 @@
 enum E { A }
 f() => E.abs();
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 22, 3)],
+      [error(diag.undefinedMethod, 22, 3)],
     );
   }
 
@@ -265,7 +260,7 @@
   m.abs();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 24, 3)],
+      [error(diag.undefinedMethod, 24, 3)],
     );
   }
 
@@ -277,7 +272,7 @@
   m..abs();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 25, 3)],
+      [error(diag.undefinedMethod, 25, 3)],
     );
   }
 
@@ -289,7 +284,7 @@
 }
 f() { A?.m(); }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 40, 2)],
+      [error(diag.invalidNullAwareOperator, 40, 2)],
     );
   }
 
@@ -306,7 +301,7 @@
   c.a();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 68, 1)],
+      [error(diag.undefinedMethod, 68, 1)],
     );
   }
 
@@ -326,7 +321,7 @@
   B.named();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 96, 5)],
+      [error(diag.undefinedMethod, 96, 5)],
     );
   }
 
@@ -339,7 +334,7 @@
   A.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 45, 3)],
+      [error(diag.undefinedMethod, 45, 3)],
     );
   }
 
@@ -352,7 +347,7 @@
   A.foo();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 39, 3)],
+      [error(diag.undefinedMethod, 39, 3)],
     );
   }
 
@@ -369,7 +364,7 @@
   c.c();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedMethod, 61, 1)],
+      [error(diag.undefinedMethod, 61, 1)],
     );
   }
 }
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 da743f9..96bf652 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_named_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_named_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   const A(p: 0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedNamedParameter, 44, 1)],
+      [error(diag.undefinedNamedParameter, 44, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   A(p: 0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedNamedParameter, 32, 1)],
+      [error(diag.undefinedNamedParameter, 32, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
   const E();
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedNamedParameter, 13, 1)],
+      [error(diag.undefinedNamedParameter, 13, 1)],
     );
   }
 
@@ -62,7 +62,7 @@
 main() {
   f(c: 1);
 }''',
-      [error(CompileTimeErrorCode.undefinedNamedParameter, 26, 1)],
+      [error(diag.undefinedNamedParameter, 26, 1)],
     );
   }
 
@@ -76,7 +76,7 @@
   A().m(p: 0);
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedNamedParameter, 38, 1)],
+      [error(diag.undefinedNamedParameter, 38, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
index 44140c4..2cf6bb8 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 58, 2)],
+      [error(diag.undefinedOperator, 58, 2)],
     );
   }
 
@@ -40,7 +40,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 44, 1)],
+      [error(diag.undefinedOperator, 44, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
 enum E { A }
 f(E e) => e + 1;
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 25, 1)],
+      [error(diag.undefinedOperator, 25, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 87, 1)],
+      [error(diag.undefinedOperator, 87, 1)],
     );
   }
 
@@ -77,7 +77,7 @@
 mixin M {}
 f(M m) => m + 1;
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 23, 1)],
+      [error(diag.undefinedOperator, 23, 1)],
     );
   }
 
@@ -91,8 +91,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedOperator, 24, 3),
-        error(CompileTimeErrorCode.undefinedOperator, 24, 3),
+        error(diag.undefinedOperator, 24, 3),
+        error(diag.undefinedOperator, 24, 3),
       ],
     );
   }
@@ -118,7 +118,7 @@
   e[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 25, 3)],
+      [error(diag.undefinedOperator, 25, 3)],
     );
   }
 
@@ -151,7 +151,7 @@
   a[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 125, 3)],
+      [error(diag.undefinedOperator, 125, 3)],
     );
   }
 
@@ -164,7 +164,7 @@
   a[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 24, 3)],
+      [error(diag.undefinedOperator, 24, 3)],
     );
   }
 
@@ -176,7 +176,7 @@
   m[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 23, 3)],
+      [error(diag.undefinedOperator, 23, 3)],
     );
   }
 
@@ -187,7 +187,7 @@
   x[0];
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfNullValue, 15, 1)],
+      [error(diag.invalidUseOfNullValue, 15, 1)],
     );
   }
 
@@ -206,7 +206,7 @@
   a[0] = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 125, 3)],
+      [error(diag.undefinedOperator, 125, 3)],
     );
   }
 
@@ -233,7 +233,7 @@
   a[0] = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 24, 3)],
+      [error(diag.undefinedOperator, 24, 3)],
     );
   }
 
@@ -246,8 +246,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedOperator, 23, 3),
-        error(CompileTimeErrorCode.undefinedOperator, 23, 3),
+        error(diag.undefinedOperator, 23, 3),
+        error(diag.undefinedOperator, 23, 3),
       ],
     );
   }
@@ -260,7 +260,7 @@
   a[0];
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 23, 3)],
+      [error(diag.undefinedOperator, 23, 3)],
     );
   }
 
@@ -272,7 +272,7 @@
   a[0] = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 23, 3)],
+      [error(diag.undefinedOperator, 23, 3)],
     );
   }
 
@@ -284,7 +284,7 @@
   x - 3;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfNullValue, 20, 1)],
+      [error(diag.invalidUseOfNullValue, 20, 1)],
     );
   }
 
@@ -297,8 +297,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 20, 2),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 20, 2),
       ],
     );
   }
@@ -311,7 +311,7 @@
   x + 3;
 }
 ''',
-      [error(CompileTimeErrorCode.invalidUseOfNullValue, 20, 1)],
+      [error(diag.invalidUseOfNullValue, 20, 1)],
     );
   }
 
@@ -323,7 +323,7 @@
   a + 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 24, 1)],
+      [error(diag.undefinedOperator, 24, 1)],
     );
   }
 
@@ -336,8 +336,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 20, 2),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 20, 2),
       ],
     );
   }
@@ -351,8 +351,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 19, 2),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 19, 2),
       ],
     );
   }
@@ -367,7 +367,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 43, 2)],
+      [error(diag.undefinedOperator, 43, 2)],
     );
   }
 
@@ -384,7 +384,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 101, 2)],
+      [error(diag.undefinedOperator, 101, 2)],
     );
   }
 
@@ -396,7 +396,7 @@
   m++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 23, 2)],
+      [error(diag.undefinedOperator, 23, 2)],
     );
   }
 
@@ -408,7 +408,7 @@
   a++;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 23, 2)],
+      [error(diag.undefinedOperator, 23, 2)],
     );
   }
 
@@ -421,8 +421,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 19, 2),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 19, 2),
       ],
     );
   }
@@ -436,8 +436,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 18, 2),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 18, 2),
       ],
     );
   }
@@ -452,7 +452,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 42, 2)],
+      [error(diag.undefinedOperator, 42, 2)],
     );
   }
 
@@ -469,7 +469,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 100, 2)],
+      [error(diag.undefinedOperator, 100, 2)],
     );
   }
 
@@ -481,7 +481,7 @@
   -m;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 22, 1)],
+      [error(diag.undefinedOperator, 22, 1)],
     );
   }
 
@@ -493,7 +493,7 @@
   ++a;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedOperator, 22, 2)],
+      [error(diag.undefinedOperator, 22, 2)],
     );
   }
 
@@ -506,8 +506,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 18, 2),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 18, 2),
       ],
     );
   }
@@ -528,8 +528,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 18, 1),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.invalidUseOfNullValue, 18, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
index d9953f0..1ec428d 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 import 'lib.dart' as p;
 f() => p.c;
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 33, 1)],
+      [error(diag.undefinedPrefixedName, 33, 1)],
     );
   }
 
@@ -35,7 +35,7 @@
   p.new;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 39, 3)],
+      [error(diag.undefinedPrefixedName, 39, 3)],
     );
   }
 
@@ -48,7 +48,7 @@
   p.c = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedPrefixedName, 34, 1)],
+      [error(diag.undefinedPrefixedName, 34, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_test.dart
index afc4421..1037328 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_referenced_parameter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
   int foo([int? value]) => value ?? 0;
 }
 ''',
-      [error(WarningCode.undefinedReferencedParameter, 84, 7)],
+      [error(diag.undefinedReferencedParameter, 84, 7)],
     );
   }
 
@@ -54,7 +54,7 @@
 @UseResult.unless(parameterDefined: 'undef')
 int foo([int? value]) => value ?? 0;
 ''',
-      [error(WarningCode.undefinedReferencedParameter, 70, 7)],
+      [error(diag.undefinedReferencedParameter, 70, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index e6a460d..8eb77fc 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   set foo(int value) {}
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetterOnFunctionType, 58, 3)],
+      [error(diag.undefinedSetterOnFunctionType, 58, 3)],
     );
   }
 
@@ -65,12 +65,7 @@
 f(T e1) { e1.m = 0; }
 ''',
       [
-        error(
-          CompileTimeErrorCode.undefinedSetter,
-          24,
-          1,
-          messageContains: ["the type 'T'"],
-        ),
+        error(diag.undefinedSetter, 24, 1, messageContains: ["the type 'T'"]),
       ],
     );
   }
@@ -82,7 +77,7 @@
   f() { this.m = 0; }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 23, 1)],
+      [error(diag.undefinedSetter, 23, 1)],
     );
   }
 
@@ -99,7 +94,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 80, 1)],
+      [error(diag.undefinedSetter, 80, 1)],
     );
   }
 
@@ -113,7 +108,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 43, 1)],
+      [error(diag.undefinedSetter, 43, 1)],
     );
   }
 
@@ -126,7 +121,7 @@
   c..new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 27, 3)],
+      [error(diag.undefinedSetter, 27, 3)],
     );
   }
 
@@ -137,7 +132,7 @@
   d.new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 19, 3)],
+      [error(diag.undefinedSetter, 19, 3)],
     );
   }
 
@@ -150,7 +145,7 @@
   c.new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 25, 3)],
+      [error(diag.undefinedSetter, 25, 3)],
     );
   }
 
@@ -163,7 +158,7 @@
   C.new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 22, 3)],
+      [error(diag.undefinedSetter, 22, 3)],
     );
   }
 
@@ -176,7 +171,7 @@
   c?.new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 27, 3)],
+      [error(diag.undefinedSetter, 27, 3)],
     );
   }
 
@@ -187,7 +182,7 @@
   t.new = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 16, 3)],
+      [error(diag.undefinedSetter, 16, 3)],
     );
   }
 
@@ -232,7 +227,7 @@
 }
 f() { A?.x = 1; }
 ''',
-      [error(StaticWarningCode.invalidNullAwareOperator, 35, 2)],
+      [error(diag.invalidNullAwareOperator, 35, 2)],
     );
   }
 
@@ -247,12 +242,7 @@
   f(C.s = 1);
 }''',
       [
-        error(
-          CompileTimeErrorCode.undefinedSetter,
-          75,
-          1,
-          messageContains: ["type 'C'"],
-        ),
+        error(diag.undefinedSetter, 75, 1, messageContains: ["type 'C'"]),
       ],
     );
   }
@@ -270,7 +260,7 @@
   c.a = 2;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 72, 1)],
+      [error(diag.undefinedSetter, 72, 1)],
     );
 
     assertResolvedNodeText(findNode.assignment('a ='), r'''
@@ -307,7 +297,7 @@
 class A {}
 f() { A.B = 0;}
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 19, 1)],
+      [error(diag.undefinedSetter, 19, 1)],
     );
   }
 
@@ -321,7 +311,7 @@
   T..foo = 42;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 54, 3)],
+      [error(diag.undefinedSetter, 54, 3)],
     );
   }
 
@@ -336,7 +326,7 @@
   c.a = 1;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSetter, 46, 1)],
+      [error(diag.undefinedSetter, 46, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
index bed3f1b..be315cc 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       r'''
 export 'lib1.dart' show a;
 ''',
-      [error(WarningCode.undefinedShownName, 24, 1)],
+      [error(diag.undefinedShownName, 24, 1)],
     );
   }
 
@@ -31,10 +31,7 @@
       r'''
 import 'lib1.dart' show a;
 ''',
-      [
-        error(WarningCode.unusedImport, 7, 11),
-        error(WarningCode.undefinedShownName, 24, 1),
-      ],
+      [error(diag.unusedImport, 7, 11), error(diag.undefinedShownName, 24, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_super_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_super_getter_test.dart
index 98bd44d..d930f79 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_super_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_getter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperGetter, 58, 1)],
+      [error(diag.undefinedSuperGetter, 58, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperGetter, 37, 3)],
+      [error(diag.undefinedSuperGetter, 37, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_super_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_super_operator_test.dart
index bdc75d5..4b11968 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_super_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperOperator, 70, 1)],
+      [error(diag.undefinedSuperOperator, 70, 1)],
     );
   }
 
@@ -40,8 +40,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedSuperOperator, 70, 7),
-        error(CompileTimeErrorCode.undefinedSuperOperator, 70, 7),
+        error(diag.undefinedSuperOperator, 70, 7),
+        error(diag.undefinedSuperOperator, 70, 7),
       ],
     );
   }
@@ -56,7 +56,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperOperator, 70, 11)],
+      [error(diag.undefinedSuperOperator, 70, 11)],
     );
   }
 
@@ -70,7 +70,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperOperator, 71, 7)],
+      [error(diag.undefinedSuperOperator, 71, 7)],
     );
   }
 
@@ -84,7 +84,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperOperator, 37, 1)],
+      [error(diag.undefinedSuperOperator, 37, 1)],
     );
   }
 
@@ -114,8 +114,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedSuperOperator, 36, 3),
-        error(CompileTimeErrorCode.undefinedSuperOperator, 36, 3),
+        error(diag.undefinedSuperOperator, 36, 3),
+        error(diag.undefinedSuperOperator, 36, 3),
       ],
     );
   }
@@ -146,7 +146,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperOperator, 36, 3)],
+      [error(diag.undefinedSuperOperator, 36, 3)],
     );
   }
 
@@ -160,7 +160,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperOperator, 36, 3)],
+      [error(diag.undefinedSuperOperator, 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
index 74a32b2..13f1ad2 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_super_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_super_setter_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,7 +25,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperSetter, 49, 1)],
+      [error(diag.undefinedSuperSetter, 49, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedSuperSetter, 37, 3)],
+      [error(diag.undefinedSuperSetter, 37, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart b/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart
index c9d0322..82a3010 100644
--- a/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart
@@ -8,9 +8,11 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
+import 'package:analyzer/src/error/ignore_validator.dart';
 import 'package:analyzer/src/test_utilities/lint_registration_mixin.dart';
 import 'package:analyzer_testing/utilities/utilities.dart';
+import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -25,6 +27,16 @@
 class UnignorableIgnoreTest extends PubPackageResolutionTest
     with LintRegistrationMixin {
   @override
+  void setUp() {
+    var enableUnignorableIgnore = IgnoreValidator.enableUnignorableIgnore;
+    addTearDown(() {
+      IgnoreValidator.enableUnignorableIgnore = enableUnignorableIgnore;
+    });
+    IgnoreValidator.enableUnignorableIgnore = true;
+    super.setUp();
+  }
+
+  @override
   Future<void> tearDown() {
     unregisterLintRules();
     return super.tearDown();
@@ -39,7 +51,10 @@
 // ignore_for_file: undefined_annotation
 @x int a = 0;
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 41, 2)],
+      [
+        error(diag.unignorableIgnore, 20, 20),
+        error(diag.undefinedAnnotation, 41, 2),
+      ],
     );
   }
 
@@ -52,7 +67,10 @@
 // ignore_for_file: UNDEFINED_ANNOTATION
 @x int a = 0;
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 41, 2)],
+      [
+        error(diag.unignorableIgnore, 20, 20),
+        error(diag.undefinedAnnotation, 41, 2),
+      ],
     );
   }
 
@@ -65,7 +83,10 @@
 // ignore: undefined_annotation
 @x int a = 0;
 ''',
-      [error(CompileTimeErrorCode.undefinedAnnotation, 32, 2)],
+      [
+        error(diag.unignorableIgnore, 11, 20),
+        error(diag.undefinedAnnotation, 32, 2),
+      ],
     );
   }
 
@@ -83,7 +104,10 @@
 // ignore: avoid_int
 int a = 0;
 ''',
-      [error(avoidIntRule.diagnosticCode, 21, 3)],
+      [
+        error(diag.unignorableIgnore, 11, 9),
+        error(avoidIntRule.diagnosticCode, 21, 3),
+      ],
     );
   }
 }
@@ -93,8 +117,7 @@
     'avoid_int',
     'Avoid int.',
     correctionMessage: 'Try avoiding int.',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.avoid_int',
+    uniqueName: 'LintCode.avoid_int',
   );
 
   _AvoidIntRule() : super(name: 'avoid_int', description: '');
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_pattern_test.dart
index 1d5ac90..ee0f3b5 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,8 +23,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(WarningCode.unnecessaryCastPattern, 35, 2),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.unnecessaryCastPattern, 35, 2),
       ],
     );
   }
@@ -37,8 +37,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(WarningCode.unnecessaryCastPattern, 35, 2),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.unnecessaryCastPattern, 35, 2),
       ],
     );
   }
@@ -50,7 +50,7 @@
   if (x case var z as int) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 33, 1)],
+      [error(diag.unusedLocalVariable, 33, 1)],
     );
   }
 
@@ -64,7 +64,7 @@
   if (x case var z as B) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 1)],
+      [error(diag.unusedLocalVariable, 54, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
index ffa0661..d51007e 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -45,7 +45,7 @@
   return c ? a : b as int;
 }
 ''',
-      [error(WarningCode.unnecessaryCast, 51, 8)],
+      [error(diag.unnecessaryCast, 51, 8)],
     );
   }
 
@@ -56,7 +56,7 @@
   return c ? a as int : b;
 }
 ''',
-      [error(WarningCode.unnecessaryCast, 47, 8)],
+      [error(diag.unnecessaryCast, 47, 8)],
     );
   }
 
@@ -67,7 +67,7 @@
   return c ? a as int : b;
 }
 ''',
-      [error(WarningCode.unnecessaryCast, 51, 8)],
+      [error(diag.unnecessaryCast, 51, 8)],
     );
   }
 
@@ -78,10 +78,7 @@
   return c ? a as int : b as int;
 }
 ''',
-      [
-        error(WarningCode.unnecessaryCast, 47, 8),
-        error(WarningCode.unnecessaryCast, 58, 8),
-      ],
+      [error(diag.unnecessaryCast, 47, 8), error(diag.unnecessaryCast, 58, 8)],
     );
   }
 
@@ -92,7 +89,7 @@
   return c ? a : b as int;
 }
 ''',
-      [error(WarningCode.unnecessaryCast, 51, 8)],
+      [error(diag.unnecessaryCast, 51, 8)],
     );
   }
 
@@ -111,7 +108,7 @@
   x as int;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 13, 1)],
+      [error(diag.undefinedIdentifier, 13, 1)],
     );
   }
 
@@ -194,7 +191,7 @@
   a as num;
 }
 ''',
-      [error(WarningCode.unnecessaryCast, 18, 8)],
+      [error(diag.unnecessaryCast, 18, 8)],
     );
   }
 
@@ -206,7 +203,7 @@
   a as N;
 }
 ''',
-      [error(WarningCode.unnecessaryCast, 35, 6)],
+      [error(diag.unnecessaryCast, 35, 6)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_final_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_final_test.dart
index b52d517..610e07c 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_final_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_final_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
   int value;
 }
 ''',
-      [error(WarningCode.unnecessaryFinal, 15, 5)],
+      [error(diag.unnecessaryFinal, 15, 5)],
     );
   }
 
@@ -47,7 +47,7 @@
   B(final super.value);
 }
 ''',
-      [error(WarningCode.unnecessaryFinal, 67, 5)],
+      [error(diag.unnecessaryFinal, 67, 5)],
     );
   }
 
@@ -59,7 +59,7 @@
   int value;
 }
 ''',
-      [error(WarningCode.unnecessaryFinal, 14, 5)],
+      [error(diag.unnecessaryFinal, 14, 5)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
index b058e19..fedcedf 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_import_test.dart
@@ -2,7 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
+import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -168,7 +169,7 @@
 import 'lib2.dart' as p;
 f(p.A a, p.B b) {}
 ''',
-      [error(HintCode.unnecessaryImport, 7, 11)],
+      [error(diag.unnecessaryImport, 7, 11)],
     );
   }
 
@@ -184,6 +185,35 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/61877')
+  test_library_export_and_export() async {
+    var a = newFile('$testPackageLibPath/a.dart', r'''
+class C {}
+''');
+
+    var b = newFile('$testPackageLibPath/b.dart', r'''
+export 'a.dart';
+''');
+
+    var c = newFile('$testPackageLibPath/c.dart', r'''
+export 'a.dart';
+''');
+
+    var d = newFile('$testPackageLibPath/d.dart', r'''
+import 'b.dart';
+import 'c.dart';
+
+method() => C();
+''');
+    await assertErrorsInFile2(a, []);
+    await assertErrorsInFile2(b, []);
+    await assertErrorsInFile2(c, []);
+    // Import of 'c.dart' is not marked as unused even though it could be
+    // removed.
+    var result = await resolveFile(d);
+    expect(result.diagnostics, isNotEmpty);
+  }
+
   test_library_extension_equalPrefixes_unnecessary() async {
     newFile('$testPackageLibPath/lib1.dart', '''
 extension E1 on int {
@@ -205,7 +235,7 @@
   0.bar();
 }
 ''',
-      [error(HintCode.unnecessaryImport, 7, 11)],
+      [error(diag.unnecessaryImport, 7, 11)],
     );
   }
 
@@ -251,7 +281,7 @@
   0.bar();
 }
 ''',
-      [error(HintCode.unnecessaryImport, 7, 11)],
+      [error(diag.unnecessaryImport, 7, 11)],
     );
   }
 
@@ -309,7 +339,7 @@
 
 void f(A _, B _) {}
 ''',
-      [error(HintCode.unnecessaryImport, 41, 8)],
+      [error(diag.unnecessaryImport, 41, 8)],
     );
   }
 
@@ -338,7 +368,7 @@
 
 void f(A _, B _) {}
 ''',
-      [error(WarningCode.deprecatedExportUse, 47, 1)],
+      [error(diag.deprecatedExportUse, 47, 1)],
     );
   }
 
@@ -357,6 +387,30 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/61877')
+  test_library_import_and_export() async {
+    var a = newFile('$testPackageLibPath/a.dart', r'''
+class C {}
+''');
+
+    var b = newFile('$testPackageLibPath/b.dart', r'''
+export 'a.dart';
+''');
+
+    var c = newFile('$testPackageLibPath/c.dart', r'''
+import 'a.dart';
+import 'b.dart';
+
+method() => C();
+''');
+    await assertErrorsInFile2(a, []);
+    await assertErrorsInFile2(b, []);
+    // Import of 'b.dart' is not marked as unused even though it could be
+    // removed.
+    var result = await resolveFile(c);
+    expect(result.diagnostics, isNotEmpty);
+  }
+
   test_library_systemShadowing() async {
     newFile('$testPackageLibPath/lib1.dart', '''
 class File {}
@@ -384,7 +438,7 @@
 import 'b.dart';
 void f(A _, B _, C _) {}
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 51, 1)],
+      [error(diag.undefinedClass, 51, 1)],
     );
   }
 
@@ -402,7 +456,7 @@
 import 'lib2.dart';
 f(A a, B b) {}
 ''',
-      [error(HintCode.unnecessaryImport, 7, 11)],
+      [error(diag.unnecessaryImport, 7, 11)],
     );
   }
 
@@ -420,7 +474,7 @@
 import 'dart:async' show Completer;
 f(FutureOr<int> a, Completer<int> b) {}
 ''',
-      [error(HintCode.unnecessaryImport, 28, 12)],
+      [error(diag.unnecessaryImport, 28, 12)],
     );
   }
 
@@ -435,7 +489,7 @@
 import 'b.dart';
 void f(A _) {}
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 24, 8)],
+      [error(diag.uriDoesNotExist, 24, 8)],
     );
   }
 
@@ -458,7 +512,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [error(HintCode.unnecessaryImport, 25, 8)]);
+    await assertErrorsInFile2(b, [error(diag.unnecessaryImport, 25, 8)]);
   }
 
   test_part_inside_unnecessary_prefixed() async {
@@ -480,6 +534,6 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [error(HintCode.unnecessaryImport, 25, 8)]);
+    await assertErrorsInFile2(b, [error(diag.unnecessaryImport, 25, 8)]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart
index ce9da27..9cc51da 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_nan_comparison_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(WarningCode.unnecessaryNanComparisonFalse, 56, 10)],
+      [error(diag.unnecessaryNanComparisonFalse, 56, 10)],
     );
   }
 
@@ -35,7 +35,7 @@
   d == double.nan;
 }
 ''',
-      [error(WarningCode.unnecessaryNanComparisonFalse, 23, 13)],
+      [error(diag.unnecessaryNanComparisonFalse, 23, 13)],
     );
   }
 
@@ -46,7 +46,7 @@
   double.nan == d;
 }
 ''',
-      [error(WarningCode.unnecessaryNanComparisonFalse, 21, 13)],
+      [error(diag.unnecessaryNanComparisonFalse, 21, 13)],
     );
   }
 
@@ -57,7 +57,7 @@
   d != double.nan;
 }
 ''',
-      [error(WarningCode.unnecessaryNanComparisonTrue, 23, 13)],
+      [error(diag.unnecessaryNanComparisonTrue, 23, 13)],
     );
   }
 
@@ -68,7 +68,7 @@
   double.nan != d;
 }
 ''',
-      [error(WarningCode.unnecessaryNanComparisonTrue, 21, 13)],
+      [error(diag.unnecessaryNanComparisonTrue, 21, 13)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart
index 003aa3e..a993939 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   }
 }
 ''',
-      [error(WarningCode.unnecessaryNoSuchMethod, 87, 12)],
+      [error(diag.unnecessaryNoSuchMethod, 87, 12)],
     );
   }
 
@@ -72,7 +72,7 @@
   noSuchMethod(y) => super.noSuchMethod(y);
 }
 ''',
-      [error(WarningCode.unnecessaryNoSuchMethod, 87, 12)],
+      [error(diag.unnecessaryNoSuchMethod, 87, 12)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
index b1f2880..f0b6f3d 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_non_null_assertion_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   g!();
 }
 ''',
-      [error(StaticWarningCode.unnecessaryNonNullAssertion, 27, 1)],
+      [error(diag.unnecessaryNonNullAssertion, 27, 1)],
     );
   }
 
@@ -39,7 +39,7 @@
   A.foo!();
 }
 ''',
-      [error(StaticWarningCode.unnecessaryNonNullAssertion, 54, 1)],
+      [error(diag.unnecessaryNonNullAssertion, 54, 1)],
     );
   }
 
@@ -50,7 +50,7 @@
   x!;
 }
 ''',
-      [error(StaticWarningCode.unnecessaryNonNullAssertion, 14, 1)],
+      [error(diag.unnecessaryNonNullAssertion, 14, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_null_assert_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_null_assert_pattern_test.dart
index e04c2c3..f94a9ae 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_null_assert_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_null_assert_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,8 +23,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(StaticWarningCode.unnecessaryNullAssertPattern, 34, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.unnecessaryNullAssertPattern, 34, 1),
       ],
     );
   }
@@ -36,7 +36,7 @@
   if (x case var a!) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
   }
 
@@ -51,8 +51,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedClass, 0, 11),
-        error(CompileTimeErrorCode.undefinedFunction, 26, 11),
+        error(diag.undefinedClass, 0, 11),
+        error(diag.undefinedFunction, 26, 11),
       ],
     );
   }
@@ -67,7 +67,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 0, 11)],
+      [error(diag.undefinedClass, 0, 11)],
     );
   }
 
@@ -81,8 +81,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 60, 1),
-        error(StaticWarningCode.unnecessaryNullAssertPattern, 61, 1),
+        error(diag.unusedLocalVariable, 60, 1),
+        error(diag.unnecessaryNullAssertPattern, 61, 1),
       ],
     );
   }
@@ -96,7 +96,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 48, 1)],
+      [error(diag.unusedLocalVariable, 48, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_null_check_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_null_check_pattern_test.dart
index e47dabf..c11cf77 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_null_check_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_null_check_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,8 +23,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 33, 1),
-        error(StaticWarningCode.unnecessaryNullCheckPattern, 34, 1),
+        error(diag.unusedLocalVariable, 33, 1),
+        error(diag.unnecessaryNullCheckPattern, 34, 1),
       ],
     );
   }
@@ -36,7 +36,7 @@
   if (x case var a?) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 34, 1)],
+      [error(diag.unusedLocalVariable, 34, 1)],
     );
   }
 
@@ -51,8 +51,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.undefinedClass, 0, 11),
-        error(CompileTimeErrorCode.undefinedFunction, 26, 11),
+        error(diag.undefinedClass, 0, 11),
+        error(diag.undefinedFunction, 26, 11),
       ],
     );
   }
@@ -67,7 +67,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 0, 11)],
+      [error(diag.undefinedClass, 0, 11)],
     );
   }
 
@@ -81,8 +81,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 60, 1),
-        error(StaticWarningCode.unnecessaryNullCheckPattern, 61, 1),
+        error(diag.unusedLocalVariable, 60, 1),
+        error(diag.unnecessaryNullCheckPattern, 61, 1),
       ],
     );
   }
@@ -96,7 +96,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 48, 1)],
+      [error(diag.unusedLocalVariable, 48, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
index 8236114..05134bf 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_null_comparison_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,8 +36,8 @@
 }
 ''',
       [
-        error(WarningCode.unnecessaryNullComparisonNeverNullFalse, 15, 7),
-        error(WarningCode.unnecessaryNullComparisonNeverNullFalse, 26, 7),
+        error(diag.unnecessaryNullComparisonNeverNullFalse, 15, 7),
+        error(diag.unnecessaryNullComparisonNeverNullFalse, 26, 7),
       ],
     );
   }
@@ -61,8 +61,8 @@
 }
 ''',
       [
-        error(WarningCode.unnecessaryNullComparisonAlwaysNullFalse, 18, 4),
-        error(WarningCode.unnecessaryNullComparisonAlwaysNullFalse, 36, 4),
+        error(diag.unnecessaryNullComparisonAlwaysNullFalse, 18, 4),
+        error(diag.unnecessaryNullComparisonAlwaysNullFalse, 36, 4),
       ],
     );
   }
@@ -77,8 +77,8 @@
 }
 ''',
       [
-        error(WarningCode.unnecessaryNullComparisonAlwaysNullTrue, 18, 4),
-        error(WarningCode.unnecessaryNullComparisonAlwaysNullTrue, 36, 4),
+        error(diag.unnecessaryNullComparisonAlwaysNullTrue, 18, 4),
+        error(diag.unnecessaryNullComparisonAlwaysNullTrue, 36, 4),
       ],
     );
   }
@@ -95,7 +95,7 @@
   null == i;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 2, 10)],
+      [error(diag.undefinedClass, 2, 10)],
     );
   }
 
@@ -108,7 +108,7 @@
   null == i;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 2, 10)],
+      [error(diag.undefinedClass, 2, 10)],
     );
   }
 
@@ -132,7 +132,7 @@
   null != i;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 2, 10)],
+      [error(diag.undefinedClass, 2, 10)],
     );
   }
 
@@ -145,7 +145,7 @@
   null != i;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 2, 10)],
+      [error(diag.undefinedClass, 2, 10)],
     );
   }
 
@@ -158,8 +158,8 @@
 }
 ''',
       [
-        error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 15, 7),
-        error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 26, 7),
+        error(diag.unnecessaryNullComparisonNeverNullTrue, 15, 7),
+        error(diag.unnecessaryNullComparisonNeverNullTrue, 26, 7),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
index 8917801..c3e4c86 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_question_mark_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
       '''
 dynamic? a;
 ''',
-      [error(WarningCode.unnecessaryQuestionMark, 7, 1)],
+      [error(diag.unnecessaryQuestionMark, 7, 1)],
     );
   }
 
@@ -37,7 +37,7 @@
   var [dynamic? _] = a;
 }
 ''',
-      [error(WarningCode.unnecessaryQuestionMark, 39, 1)],
+      [error(diag.unnecessaryQuestionMark, 39, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
       '''
 Null? a;
 ''',
-      [error(WarningCode.unnecessaryQuestionMark, 4, 1)],
+      [error(diag.unnecessaryQuestionMark, 4, 1)],
     );
   }
 
@@ -66,8 +66,8 @@
 }
 ''',
       [
-        error(WarningCode.patternNeverMatchesValueType, 52, 5),
-        error(WarningCode.unnecessaryQuestionMark, 56, 1),
+        error(diag.patternNeverMatchesValueType, 52, 5),
+        error(diag.unnecessaryQuestionMark, 56, 1),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_set_literal_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_set_literal_test.dart
index 841295b..aa4e9c7 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_set_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_set_literal_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -64,7 +64,7 @@
   g(() async => {1});
 }
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 67, 3)],
+      [error(diag.unnecessarySetLiteral, 67, 3)],
     );
   }
 
@@ -103,7 +103,7 @@
   g(() async => {1});
 }
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 91, 3)],
+      [error(diag.unnecessarySetLiteral, 91, 3)],
     );
   }
 
@@ -126,7 +126,7 @@
   g(() => {1, 2});
 }
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 53, 6)],
+      [error(diag.unnecessarySetLiteral, 53, 6)],
     );
   }
 
@@ -139,7 +139,7 @@
   g(() => {1, if (b) 2 else 3, 4, for (;;) 5},);
 }
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 59, 35)],
+      [error(diag.unnecessarySetLiteral, 59, 35)],
     );
   }
 
@@ -162,7 +162,7 @@
   g((value) => {if (value) print('')});
 }
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 62, 22)],
+      [error(diag.unnecessarySetLiteral, 62, 22)],
     );
   }
 
@@ -175,7 +175,7 @@
   g(() => {1});
 }
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 53, 3)],
+      [error(diag.unnecessarySetLiteral, 53, 3)],
     );
   }
 
@@ -212,7 +212,7 @@
       r'''
 Future<void> f() async => {1};
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 26, 3)],
+      [error(diag.unnecessarySetLiteral, 26, 3)],
     );
   }
 
@@ -239,7 +239,7 @@
 
 FutureOr<void> f() async => {1};
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 50, 3)],
+      [error(diag.unnecessarySetLiteral, 50, 3)],
     );
   }
 
@@ -254,7 +254,7 @@
       r'''
 void f() => {1, 2};
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 12, 6)],
+      [error(diag.unnecessarySetLiteral, 12, 6)],
     );
   }
 
@@ -263,7 +263,7 @@
       r'''
 void f(bool b) => {1, if (b) 2 else 3, 4, for (;;) 5};
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 18, 35)],
+      [error(diag.unnecessarySetLiteral, 18, 35)],
     );
   }
 
@@ -278,7 +278,7 @@
       r'''
 void f(bool value) => {if (value) print('')};
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 22, 22)],
+      [error(diag.unnecessarySetLiteral, 22, 22)],
     );
   }
 
@@ -287,7 +287,7 @@
       r'''
 void f() => {1};
 ''',
-      [error(WarningCode.unnecessarySetLiteral, 12, 3)],
+      [error(diag.unnecessarySetLiteral, 12, 3)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
index 21f0ed4..1cc7565 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
       r'''
 var b = null is! Null;
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 8, 13)],
+      [error(diag.unnecessaryTypeCheckFalse, 8, 13)],
     );
   }
 
@@ -32,7 +32,7 @@
   a is! int;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 18, 9)],
+      [error(diag.unnecessaryTypeCheckFalse, 18, 9)],
     );
   }
 
@@ -51,7 +51,7 @@
   a is! num;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 18, 9)],
+      [error(diag.unnecessaryTypeCheckFalse, 18, 9)],
     );
   }
 
@@ -62,7 +62,7 @@
   a is! int?;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 19, 10)],
+      [error(diag.unnecessaryTypeCheckFalse, 19, 10)],
     );
   }
 
@@ -97,7 +97,7 @@
   a is! num?;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 19, 10)],
+      [error(diag.unnecessaryTypeCheckFalse, 19, 10)],
     );
   }
 
@@ -116,7 +116,7 @@
   a is! dynamic;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 19, 13)],
+      [error(diag.unnecessaryTypeCheckFalse, 19, 13)],
     );
   }
 
@@ -135,7 +135,7 @@
   a is! Object?;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 19, 13)],
+      [error(diag.unnecessaryTypeCheckFalse, 19, 13)],
     );
   }
 }
@@ -149,7 +149,7 @@
   a is num;
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 7, 1)],
+      [error(diag.undefinedClass, 7, 1)],
     );
   }
 
@@ -158,7 +158,7 @@
       r'''
 var b = null is Null;
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 8, 12)],
+      [error(diag.unnecessaryTypeCheckTrue, 8, 12)],
     );
   }
 
@@ -169,7 +169,7 @@
   a is dynamic;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 18, 12)],
+      [error(diag.unnecessaryTypeCheckTrue, 18, 12)],
     );
   }
 
@@ -180,7 +180,7 @@
   a is Unresolved;
 }
 ''',
-      [error(CompileTimeErrorCode.typeTestWithUndefinedName, 23, 10)],
+      [error(diag.typeTestWithUndefinedName, 23, 10)],
     );
   }
 
@@ -191,7 +191,7 @@
   a is int;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 18, 8)],
+      [error(diag.unnecessaryTypeCheckTrue, 18, 8)],
     );
   }
 
@@ -210,7 +210,7 @@
   a is num;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 18, 8)],
+      [error(diag.unnecessaryTypeCheckTrue, 18, 8)],
     );
   }
 
@@ -221,7 +221,7 @@
   a is int?;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 19, 9)],
+      [error(diag.unnecessaryTypeCheckTrue, 19, 9)],
     );
   }
 
@@ -256,7 +256,7 @@
   a is num?;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 19, 9)],
+      [error(diag.unnecessaryTypeCheckTrue, 19, 9)],
     );
   }
 
@@ -275,7 +275,7 @@
   a is dynamic;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 19, 12)],
+      [error(diag.unnecessaryTypeCheckTrue, 19, 12)],
     );
   }
 
@@ -294,7 +294,7 @@
   a is Object?;
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 19, 12)],
+      [error(diag.unnecessaryTypeCheckTrue, 19, 12)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_wildcard_pattern_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_wildcard_pattern_test.dart
index b9cbc0a..d1dc107 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_wildcard_pattern_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_wildcard_pattern_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -30,7 +30,7 @@
   if (x case _ && 0) {}
 }
 ''',
-      [error(WarningCode.unnecessaryWildcardPattern, 33, 1)],
+      [error(diag.unnecessaryWildcardPattern, 33, 1)],
     );
   }
 
@@ -41,7 +41,7 @@
   if (x case 0 && _) {}
 }
 ''',
-      [error(WarningCode.unnecessaryWildcardPattern, 38, 1)],
+      [error(diag.unnecessaryWildcardPattern, 38, 1)],
     );
   }
 
@@ -52,7 +52,7 @@
   if (x case (_) && 0) {}
 }
 ''',
-      [error(WarningCode.unnecessaryWildcardPattern, 34, 1)],
+      [error(diag.unnecessaryWildcardPattern, 34, 1)],
     );
   }
 
@@ -71,7 +71,7 @@
   if (x case int _ && > 0) {}
 }
 ''',
-      [error(WarningCode.unnecessaryWildcardPattern, 29, 5)],
+      [error(diag.unnecessaryWildcardPattern, 29, 5)],
     );
   }
 
@@ -98,7 +98,7 @@
   if (x case _ || 0) {}
 }
 ''',
-      [error(WarningCode.deadCode, 35, 4)],
+      [error(diag.deadCode, 35, 4)],
     );
   }
 
@@ -167,7 +167,7 @@
   });
 }
 ''',
-      [error(WarningCode.unnecessaryWildcardPattern, 45, 1)],
+      [error(diag.unnecessaryWildcardPattern, 45, 1)],
     );
   }
 
@@ -191,7 +191,7 @@
   }
 }
 ''',
-      [error(WarningCode.unnecessaryWildcardPattern, 49, 1)],
+      [error(diag.unnecessaryWildcardPattern, 49, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart b/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart
index 0063968..10feda0 100644
--- a/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_non_local_static_member_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -18,7 +18,7 @@
 class UnqualifiedReferenceToNonLocalStaticMemberTest
     extends PubPackageResolutionTest {
   DiagnosticCode get _errorCode =>
-      CompileTimeErrorCode.unqualifiedReferenceToNonLocalStaticMember;
+      diag.unqualifiedReferenceToNonLocalStaticMember;
 
   test_getter() async {
     await assertErrorsInCode(
diff --git a/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_static_member_of_extended_type_test.dart b/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_static_member_of_extended_type_test.dart
index c8a7c80..5bec74b 100644
--- a/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_static_member_of_extended_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unqualified_reference_to_static_member_of_extended_type_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -18,8 +18,7 @@
 class UnqualifiedReferenceToStaticMemberOfExtendedTypeTest
     extends PubPackageResolutionTest {
   DiagnosticCode get _errorCode {
-    return CompileTimeErrorCode
-        .unqualifiedReferenceToStaticMemberOfExtendedType;
+    return diag.unqualifiedReferenceToStaticMemberOfExtendedType;
   }
 
   test_getter() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart b/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart
index 6b059d5..2710ce7 100644
--- a/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unreachable_switch_case_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -28,7 +28,7 @@
   };
 }
 ''',
-      [error(WarningCode.unreachableSwitchCase, 82, 2)],
+      [error(diag.unreachableSwitchCase, 82, 2)],
     );
   }
 
@@ -44,10 +44,10 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 57, 9),
-        error(WarningCode.unreachableSwitchCase, 62, 2),
-        error(WarningCode.deadCode, 72, 10),
-        error(WarningCode.unreachableSwitchCase, 78, 2),
+        error(diag.deadCode, 57, 9),
+        error(diag.unreachableSwitchCase, 62, 2),
+        error(diag.deadCode, 72, 10),
+        error(diag.unreachableSwitchCase, 78, 2),
       ],
     );
   }
@@ -73,7 +73,7 @@
   E.e1 when b => 2,
 };
 ''',
-      [error(WarningCode.unreachableSwitchCase, 96, 2)],
+      [error(diag.unreachableSwitchCase, 96, 2)],
     );
   }
 
@@ -87,7 +87,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 45, 10)],
+      [error(diag.undefinedClass, 45, 10)],
     );
   }
 }
@@ -107,7 +107,7 @@
   }
 }
 ''',
-      [error(WarningCode.unreachableSwitchCase, 67, 4)],
+      [error(diag.unreachableSwitchCase, 67, 4)],
     );
   }
 
@@ -125,7 +125,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedIdentifier, 69, 10)],
+      [error(diag.undefinedIdentifier, 69, 10)],
     );
   }
 
@@ -143,7 +143,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 69, 10)],
+      [error(diag.undefinedClass, 69, 10)],
     );
   }
 
@@ -178,7 +178,7 @@
   }
 }
 ''',
-      [error(WarningCode.unreachableSwitchCase, 115, 4)],
+      [error(diag.unreachableSwitchCase, 115, 4)],
     );
   }
 
@@ -196,11 +196,11 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 64, 4),
-        error(WarningCode.unreachableSwitchCase, 64, 4),
-        error(WarningCode.deadCode, 80, 4),
-        error(WarningCode.unreachableSwitchCase, 80, 4),
-        error(WarningCode.deadCode, 98, 6),
+        error(diag.deadCode, 64, 4),
+        error(diag.unreachableSwitchCase, 64, 4),
+        error(diag.deadCode, 80, 4),
+        error(diag.unreachableSwitchCase, 80, 4),
+        error(diag.deadCode, 98, 6),
       ],
     );
   }
diff --git a/pkg/analyzer/test/src/diagnostics/unreachable_switch_default_test.dart b/pkg/analyzer/test/src/diagnostics/unreachable_switch_default_test.dart
index 79fb159..231b963 100644
--- a/pkg/analyzer/test/src/diagnostics/unreachable_switch_default_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unreachable_switch_default_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -27,7 +27,7 @@
   }
 }
 ''',
-      [error(WarningCode.unreachableSwitchDefault, 67, 7)],
+      [error(diag.unreachableSwitchDefault, 67, 7)],
     );
   }
 
@@ -47,7 +47,7 @@
   }
 }
 ''',
-      [error(WarningCode.unreachableSwitchDefault, 122, 7)],
+      [error(diag.unreachableSwitchDefault, 122, 7)],
     );
   }
 
@@ -88,7 +88,7 @@
   }
 }
 ''',
-      [error(WarningCode.unreachableSwitchDefault, 160, 7)],
+      [error(diag.unreachableSwitchDefault, 160, 7)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart
index 7d42527..0553ef2 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_catch_clause_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedCatchClause, 35, 9)],
+      [error(diag.unusedCatchClause, 35, 9)],
     );
   }
 
@@ -37,7 +37,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedCatchStack, 46, 2)],
+      [error(diag.unusedCatchStack, 46, 2)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart b/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart
index 68d4c6f..083e7b2 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_catch_stack_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -24,7 +24,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedCatchStack, 49, 10)],
+      [error(diag.unusedCatchStack, 49, 10)],
     );
   }
 
@@ -48,7 +48,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedCatchStack, 39, 10)],
+      [error(diag.unusedCatchStack, 39, 10)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index 7847f98..ce470fe 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:test/expect.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -197,10 +197,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 6, 2),
-        error(WarningCode.unusedElement, 20, 12),
-      ],
+      [error(diag.unusedElement, 6, 2), error(diag.unusedElement, 20, 12)],
     );
   }
 
@@ -212,10 +209,7 @@
   _A.named() {}
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 6, 2),
-        error(WarningCode.unusedElement, 26, 5),
-      ],
+      [error(diag.unusedElement, 6, 2), error(diag.unusedElement, 26, 5)],
     );
   }
 
@@ -228,7 +222,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -241,7 +235,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -254,7 +248,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -267,7 +261,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -278,7 +272,7 @@
 main() {
 }
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -292,7 +286,7 @@
 }
 print(x) {}
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -306,7 +300,7 @@
 }
 print(x) {}
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -382,7 +376,7 @@
   A();
 }
 ''',
-      [error(WarningCode.unusedElement, 14, 12)],
+      [error(diag.unusedElement, 14, 12)],
     );
   }
 
@@ -406,7 +400,7 @@
   B._named() : super._constructor();
 }
 ''',
-      [error(WarningCode.unusedElement, 87, 6)],
+      [error(diag.unusedElement, 87, 6)],
     );
   }
 
@@ -428,7 +422,7 @@
 }
 var a = _A();
 ''',
-      [error(WarningCode.unusedElement, 16, 5)],
+      [error(diag.unusedElement, 16, 5)],
     );
   }
 
@@ -449,7 +443,7 @@
   const E({int? a});
 }
 ''',
-      [error(WarningCode.unusedElementParameter, 37, 1)],
+      [error(diag.unusedElementParameter, 37, 1)],
     );
   }
 
@@ -470,7 +464,7 @@
   const E([int? a]);
 }
 ''',
-      [error(WarningCode.unusedElementParameter, 37, 1)],
+      [error(diag.unusedElementParameter, 37, 1)],
     );
   }
 
@@ -492,7 +486,7 @@
   d.B;
 }
 ''',
-      [error(WarningCode.unusedElement, 5, 7)],
+      [error(diag.unusedElement, 5, 7)],
     );
   }
 
@@ -553,7 +547,7 @@
   void _f() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 33, 2)],
+      [error(diag.unusedElement, 33, 2)],
     );
   }
 
@@ -562,7 +556,7 @@
       r'''
 extension type _E(int i) {}
 ''',
-      [error(WarningCode.unusedElement, 15, 2)],
+      [error(diag.unusedElement, 15, 2)],
     );
   }
 
@@ -576,7 +570,7 @@
   print(v);
 }
 ''',
-      [error(WarningCode.unusedElement, 15, 2)],
+      [error(diag.unusedElement, 15, 2)],
     );
   }
 
@@ -590,7 +584,7 @@
   print(v);
 }
 ''',
-      [error(WarningCode.unusedElement, 15, 2)],
+      [error(diag.unusedElement, 15, 2)],
     );
   }
 
@@ -601,7 +595,7 @@
   E._named(this.i);
 }
 ''',
-      [error(WarningCode.unusedElement, 30, 6)],
+      [error(diag.unusedElement, 30, 6)],
     );
   }
 
@@ -613,7 +607,7 @@
 }
 typedef A = E;
 ''',
-      [error(WarningCode.unusedElement, 30, 6)],
+      [error(diag.unusedElement, 30, 6)],
     );
   }
 
@@ -624,7 +618,7 @@
   _E.named(this.i);
 }
 ''',
-      [error(WarningCode.unusedElement, 32, 5)],
+      [error(diag.unusedElement, 32, 5)],
     );
   }
 
@@ -655,7 +649,7 @@
   A();
 }
 ''',
-      [error(WarningCode.unusedElement, 22, 8)],
+      [error(diag.unusedElement, 22, 8)],
     );
   }
 
@@ -681,7 +675,7 @@
       r'''
 _(){}
 ''',
-      [error(WarningCode.unusedElement, 0, 1)],
+      [error(diag.unusedElement, 0, 1)],
     );
   }
 
@@ -690,7 +684,7 @@
       r'''
 __(){}
 ''',
-      [error(WarningCode.unusedElement, 0, 2)],
+      [error(diag.unusedElement, 0, 2)],
     );
   }
 
@@ -729,7 +723,7 @@
   f() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 11, 1)],
+      [error(diag.unusedElement, 11, 1)],
     );
   }
 
@@ -742,7 +736,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 11, 2)],
+      [error(diag.unusedElement, 11, 2)],
     );
   }
 
@@ -791,7 +785,7 @@
 main() {
 }
 ''',
-      [error(WarningCode.unusedElement, 8, 2)],
+      [error(diag.unusedElement, 8, 2)],
     );
   }
 
@@ -826,7 +820,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 52, 1)],
+      [error(diag.unusedLocalVariable, 52, 1)],
     );
   }
 
@@ -876,7 +870,7 @@
   var v = a._g;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 50, 1)],
+      [error(diag.unusedLocalVariable, 50, 1)],
     );
   }
 
@@ -890,7 +884,7 @@
   var v = new A()._g;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 45, 1)],
+      [error(diag.unusedLocalVariable, 45, 1)],
     );
   }
 
@@ -927,10 +921,7 @@
   int get _a => 3;
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 35, 2),
-        error(WarningCode.unusedElement, 155, 2),
-      ],
+      [error(diag.unusedElement, 35, 2), error(diag.unusedElement, 155, 2)],
     );
   }
 
@@ -941,7 +932,7 @@
   get _g => null;
 }
 ''',
-      [error(WarningCode.unusedElement, 16, 2)],
+      [error(diag.unusedElement, 16, 2)],
     );
   }
 
@@ -954,7 +945,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 16, 2)],
+      [error(diag.unusedElement, 16, 2)],
     );
   }
 
@@ -967,7 +958,7 @@
 ''',
       [
         // Code is dead but not unused.
-        error(WarningCode.deadCode, 8, 5),
+        error(diag.deadCode, 8, 5),
       ],
     );
   }
@@ -982,7 +973,7 @@
   _(){}
 }
 ''',
-      [error(WarningCode.unusedElement, 55, 1)],
+      [error(diag.unusedElement, 55, 1)],
     );
   }
 
@@ -995,7 +986,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 22, 2)],
+      [error(diag.unusedElement, 22, 2)],
     );
   }
 
@@ -1010,7 +1001,7 @@
 ''',
       [
         // Code is dead but not unused.
-        error(WarningCode.deadCode, 22, 5),
+        error(diag.deadCode, 22, 5),
       ],
     );
   }
@@ -1027,7 +1018,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 66, 1)],
+      [error(diag.unusedElement, 66, 1)],
     );
   }
 
@@ -1038,7 +1029,7 @@
   __(){}
 }
 ''',
-      [error(WarningCode.unusedElement, 11, 2)],
+      [error(diag.unusedElement, 11, 2)],
     );
   }
 
@@ -1436,7 +1427,7 @@
   void call() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 27, 4)],
+      [error(diag.unusedElement, 27, 4)],
     );
   }
 
@@ -1451,7 +1442,7 @@
   void _m1() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 17, 3)],
+      [error(diag.unusedElement, 17, 3)],
     );
   }
 
@@ -1462,7 +1453,7 @@
   static _m() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 19, 2)],
+      [error(diag.unusedElement, 19, 2)],
     );
   }
 
@@ -1473,7 +1464,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 32, 1)],
+      [error(diag.unusedElement, 32, 1)],
     );
   }
 
@@ -1486,7 +1477,7 @@
   operator []=(int index, int value) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 34, 3)],
+      [error(diag.unusedElement, 34, 3)],
     );
   }
 
@@ -1497,7 +1488,7 @@
   int operator [](int index) => 7;
 }
 ''',
-      [error(WarningCode.unusedElement, 38, 2)],
+      [error(diag.unusedElement, 38, 2)],
     );
   }
 
@@ -1508,7 +1499,7 @@
   void call() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 29, 4)],
+      [error(diag.unusedElement, 29, 4)],
     );
   }
 
@@ -1521,7 +1512,7 @@
   int operator -(int other) => other;
 }
 ''',
-      [error(WarningCode.unusedElement, 40, 1)],
+      [error(diag.unusedElement, 40, 1)],
     );
   }
 
@@ -1532,7 +1523,7 @@
   int operator ~() => 7;
 }
 ''',
-      [error(WarningCode.unusedElement, 40, 1)],
+      [error(diag.unusedElement, 40, 1)],
     );
   }
 
@@ -1545,7 +1536,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 19, 2)],
+      [error(diag.unusedElement, 19, 2)],
     );
   }
 
@@ -1557,7 +1548,7 @@
   int _f(int p) => 7;
 }
 ''',
-      [error(WarningCode.unusedElement, 44, 2)],
+      [error(diag.unusedElement, 44, 2)],
     );
   }
 
@@ -1570,7 +1561,7 @@
 /// This is similar to [A._f].
 int g() => 7;
 ''',
-      [error(WarningCode.unusedElement, 16, 2)],
+      [error(diag.unusedElement, 16, 2)],
     );
   }
 
@@ -1581,7 +1572,7 @@
   void m() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 29, 1)],
+      [error(diag.unusedElement, 29, 1)],
     );
   }
 
@@ -1592,7 +1583,7 @@
   int operator -(int other) => other;
 }
 ''',
-      [error(WarningCode.unusedElement, 37, 1)],
+      [error(diag.unusedElement, 37, 1)],
     );
   }
 
@@ -1608,7 +1599,7 @@
       r'''
 mixin _M {}
 ''',
-      [error(WarningCode.unusedElement, 6, 2)],
+      [error(diag.unusedElement, 6, 2)],
     );
   }
 
@@ -1702,7 +1693,7 @@
   B()._m(0);
 }
 ''',
-      [error(WarningCode.unusedElementParameter, 26, 1)],
+      [error(diag.unusedElementParameter, 26, 1)],
     );
   }
 
@@ -1827,7 +1818,7 @@
 }
 f() => A._();
 ''',
-      [error(WarningCode.unusedElementParameter, 22, 1)],
+      [error(diag.unusedElementParameter, 22, 1)],
     );
   }
 
@@ -1839,7 +1830,7 @@
 }
 f() => _A();
 ''',
-      [error(WarningCode.unusedElementParameter, 22, 1)],
+      [error(diag.unusedElementParameter, 22, 1)],
     );
   }
 
@@ -1851,7 +1842,7 @@
 }
 f() => "hello"._m();
 ''',
-      [error(WarningCode.unusedElementParameter, 40, 1)],
+      [error(diag.unusedElementParameter, 40, 1)],
     );
   }
 
@@ -1906,7 +1897,7 @@
 }
 f() => A()._m();
 ''',
-      [error(WarningCode.unusedElementParameter, 26, 1)],
+      [error(diag.unusedElementParameter, 26, 1)],
     );
   }
 
@@ -1921,31 +1912,23 @@
 }
 f() => A()._m();
 ''',
-      [error(WarningCode.unusedElementParameter, 66, 1)],
+      [error(diag.unusedElementParameter, 66, 1)],
     );
   }
 
   test_optionalParameter_notUsed_overrideRequired() async {
     await assertNoErrorsInCode(r'''
 class A {
-  const A({
-    required this.a,
-    required this.b,
-  });
+  A({required this.a, required this.b});
   final String a;
   final String b;
 }
 
 class _B extends A {
-  const _B({
-    required super.a,
-    super.b = 'b',
-  });
+  _B({required super.a, super.b = 'b'});
 }
 
-const foo = _B(
-  a: 'a',
-);
+var foo = _B(a: 'a');
 ''');
   }
 
@@ -1957,7 +1940,7 @@
 }
 f() => A()._m();
 ''',
-      [error(WarningCode.unusedElementParameter, 26, 1)],
+      [error(diag.unusedElementParameter, 26, 1)],
     );
   }
 
@@ -1969,7 +1952,7 @@
 }
 f() => "hello".m();
 ''',
-      [error(WarningCode.unusedElementParameter, 40, 1)],
+      [error(diag.unusedElementParameter, 40, 1)],
     );
   }
 
@@ -1981,7 +1964,7 @@
 }
 f() => "hello".m();
 ''',
-      [error(WarningCode.unusedElementParameter, 37, 1)],
+      [error(diag.unusedElementParameter, 37, 1)],
     );
   }
 
@@ -1993,7 +1976,7 @@
 }
 f() => A._m();
 ''',
-      [error(WarningCode.unusedElementParameter, 33, 1)],
+      [error(diag.unusedElementParameter, 33, 1)],
     );
   }
 
@@ -2005,7 +1988,7 @@
 }
 f() => _A.m();
 ''',
-      [error(WarningCode.unusedElementParameter, 33, 1)],
+      [error(diag.unusedElementParameter, 33, 1)],
     );
   }
 
@@ -2022,7 +2005,7 @@
 void _m([int? a]) {}
 f() => _m();
 ''',
-      [error(WarningCode.unusedElementParameter, 14, 1)],
+      [error(diag.unusedElementParameter, 14, 1)],
     );
   }
 
@@ -2067,14 +2050,30 @@
   test_parameter_optionalNamed_fieldFormal_isUsed_superInvocation() async {
     await assertNoErrorsInCode(r'''
 class _A {
-  final int e;
-  final int? f;
-  _A(this.e, {this.f});
+  final int? e;
+  _A({this.e});
 }
 
-class B extends _A {
-  B(int e) : super(e, f: 1);
+class _B extends _A {
+  _B([int? e]) : super(e: 1);
 }
+
+var b = _B(1);
+''');
+  }
+
+  test_parameter_optionalNamed_fieldFormal_isUsed_superParameter() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  final int? e;
+  _A({this.e});
+}
+
+class _B extends _A {
+  _B({super.e});
+}
+
+var b = _B(e: 2);
 ''');
   }
 
@@ -2087,7 +2086,7 @@
 }
 f() => _A();
 ''',
-      [error(WarningCode.unusedElementParameter, 38, 1)],
+      [error(diag.unusedElementParameter, 38, 1)],
     );
   }
 
@@ -2101,7 +2100,7 @@
 }
 f() => _A.named();
 ''',
-      [error(WarningCode.unusedElementParameter, 38, 1)],
+      [error(diag.unusedElementParameter, 38, 1)],
     );
   }
 
@@ -2141,14 +2140,30 @@
   test_parameter_optionalPositional_fieldFormal_isUsed_superInvocation() async {
     await assertNoErrorsInCode(r'''
 class _A {
-  final int e;
-  final int? f;
-  _A(this.e, [this.f]);
+  final int? e;
+  _A([this.e]);
 }
 
-class B extends _A {
-  B(int e) : super(e, 1);
+class _B extends _A {
+  _B(int e) : super(e);
 }
+
+var b = _B(1);
+''');
+  }
+
+  test_parameter_optionalPositional_fieldFormal_isUsed_superParameter() async {
+    await assertNoErrorsInCode(r'''
+class _A {
+  final int? e;
+  _A([this.e]);
+}
+
+class _B extends _A {
+  _B(super.e);
+}
+
+var b = _B(2);
 ''');
   }
 
@@ -2161,7 +2176,7 @@
 }
 f() => _A();
 ''',
-      [error(WarningCode.unusedElementParameter, 38, 1)],
+      [error(diag.unusedElementParameter, 38, 1)],
     );
   }
 
@@ -2175,7 +2190,7 @@
 }
 f() => _A.named();
 ''',
-      [error(WarningCode.unusedElementParameter, 38, 1)],
+      [error(diag.unusedElementParameter, 38, 1)],
     );
   }
 
@@ -2218,7 +2233,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 52, 4)],
+      [error(diag.unusedElement, 52, 4)],
     );
   }
 
@@ -2247,7 +2262,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 25, 4)],
+      [error(diag.unusedElement, 25, 4)],
     );
   }
 
@@ -2276,7 +2291,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 22, 4)],
+      [error(diag.unusedElement, 22, 4)],
     );
   }
 
@@ -2305,7 +2320,7 @@
   _E.v._foo();
 }
 ''',
-      [error(WarningCode.unusedElementParameter, 33, 1)],
+      [error(diag.unusedElementParameter, 33, 1)],
     );
   }
 
@@ -2334,7 +2349,7 @@
   _E.v._foo();
 }
 ''',
-      [error(WarningCode.unusedElementParameter, 33, 1)],
+      [error(diag.unusedElementParameter, 33, 1)],
     );
   }
 
@@ -2363,7 +2378,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 21, 4)],
+      [error(diag.unusedElement, 21, 4)],
     );
   }
 
@@ -2393,7 +2408,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 32, 4)],
+      [error(diag.unusedElement, 32, 4)],
     );
   }
 
@@ -2423,7 +2438,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 29, 4)],
+      [error(diag.unusedElement, 29, 4)],
     );
   }
 
@@ -2453,7 +2468,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 28, 4)],
+      [error(diag.unusedElement, 28, 4)],
     );
   }
 
@@ -2470,7 +2485,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 50, 3)],
+      [error(diag.unusedElement, 50, 3)],
     );
   }
 
@@ -2565,7 +2580,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 32, 3)],
+      [error(diag.unusedElement, 32, 3)],
     );
   }
 
@@ -2595,7 +2610,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 29, 3)],
+      [error(diag.unusedElement, 29, 3)],
     );
   }
 
@@ -2625,7 +2640,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedElement, 28, 3)],
+      [error(diag.unusedElement, 28, 3)],
     );
   }
 
@@ -2663,7 +2678,7 @@
   const E._bar();
 }
 ''',
-      [error(WarningCode.unusedElement, 49, 4)],
+      [error(diag.unusedElement, 49, 4)],
     );
   }
 
@@ -2688,7 +2703,7 @@
   static int get _foo => 0;
 }
 ''',
-      [error(WarningCode.unusedElement, 31, 4)],
+      [error(diag.unusedElement, 31, 4)],
     );
   }
 
@@ -2713,7 +2728,7 @@
   static void _foo() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 28, 4)],
+      [error(diag.unusedElement, 28, 4)],
     );
   }
 
@@ -2738,7 +2753,7 @@
   static set _foo(int _) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 27, 4)],
+      [error(diag.unusedElement, 27, 4)],
     );
   }
 
@@ -2773,7 +2788,7 @@
   const E.bar();
 }
 ''',
-      [error(WarningCode.unusedElement, 47, 3)],
+      [error(diag.unusedElement, 47, 3)],
     );
   }
 
@@ -2823,7 +2838,7 @@
 }
 void f(_A a) {}
 ''',
-      [error(WarningCode.unusedElement, 25, 1)],
+      [error(diag.unusedElement, 25, 1)],
     );
   }
 
@@ -2845,7 +2860,7 @@
   static void m() {}
 }
 ''',
-      [error(WarningCode.unusedElement, 39, 1)],
+      [error(diag.unusedElement, 39, 1)],
     );
   }
 
@@ -2870,7 +2885,7 @@
   _A;
 }
 ''',
-      [error(WarningCode.unusedElement, 25, 1)],
+      [error(diag.unusedElement, 25, 1)],
     );
   }
 
@@ -2920,7 +2935,7 @@
   set _s(x) {}
 }
 ''',
-      [error(WarningCode.unusedElement, 16, 2)],
+      [error(diag.unusedElement, 16, 2)],
     );
   }
 
@@ -2935,7 +2950,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedElement, 16, 2)],
+      [error(diag.unusedElement, 16, 2)],
     );
   }
 
@@ -2982,7 +2997,7 @@
 main() {
 }
 ''',
-      [error(WarningCode.unusedElement, 0, 2)],
+      [error(diag.unusedElement, 0, 2)],
     );
   }
 
@@ -2995,7 +3010,7 @@
 main() {
 }
 ''',
-      [error(WarningCode.unusedElement, 0, 2)],
+      [error(diag.unusedElement, 0, 2)],
     );
   }
 
@@ -3005,7 +3020,7 @@
 /// [_f] is a great function.
 _f(int p) => 7;
 ''',
-      [error(WarningCode.unusedElement, 30, 2)],
+      [error(diag.unusedElement, 30, 2)],
     );
   }
 
@@ -3057,7 +3072,7 @@
       r'''
 set _foo(int _) {}
 ''',
-      [error(WarningCode.unusedElement, 4, 4)],
+      [error(diag.unusedElement, 4, 4)],
     );
   }
 
@@ -3097,7 +3112,7 @@
   _a = 2;
 }
 ''',
-      [error(WarningCode.unusedElement, 4, 2)],
+      [error(diag.unusedElement, 4, 2)],
     );
   }
 
@@ -3109,7 +3124,7 @@
   _a += 1;
 }
 ''',
-      [error(WarningCode.unusedElement, 4, 2)],
+      [error(diag.unusedElement, 4, 2)],
     );
   }
 
@@ -3119,7 +3134,7 @@
 /// [_a] is a great variable.
 int _a = 7;
 ''',
-      [error(WarningCode.unusedElement, 34, 2)],
+      [error(diag.unusedElement, 34, 2)],
     );
   }
 
@@ -3168,7 +3183,7 @@
 main() {
 }
 ''',
-      [error(WarningCode.unusedElement, 8, 2)],
+      [error(diag.unusedElement, 8, 2)],
     );
   }
 
@@ -3205,7 +3220,7 @@
       r'''
 typedef _A = List<int>;
 ''',
-      [error(WarningCode.unusedElement, 8, 2)],
+      [error(diag.unusedElement, 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 0ca57c5..b5e4f6b 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_field_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -220,7 +220,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -232,7 +232,7 @@
   A() : _f = 0;
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -244,7 +244,7 @@
   static final _baz = 7;
 }
 ''',
-      [error(WarningCode.unusedField, 51, 4)],
+      [error(diag.unusedField, 51, 4)],
     );
   }
 
@@ -256,7 +256,7 @@
   A(this._f);
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -268,7 +268,7 @@
 }
 class Bar with M {}
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -280,7 +280,7 @@
 }
 mixin M on Foo {}
 ''',
-      [error(WarningCode.unusedField, 18, 2)],
+      [error(diag.unusedField, 18, 2)],
     );
   }
 
@@ -291,7 +291,7 @@
   int _f = 0;
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -302,7 +302,7 @@
   int _ = 0;
 }
 ''',
-      [error(WarningCode.unusedField, 16, 1)],
+      [error(diag.unusedField, 16, 1)],
     );
   }
 
@@ -316,7 +316,7 @@
   int _ = 0;
 }
 ''',
-      [error(WarningCode.unusedField, 60, 1)],
+      [error(diag.unusedField, 60, 1)],
     );
   }
 
@@ -342,7 +342,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -356,7 +356,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -368,7 +368,7 @@
 }
 void main() => print(_A);
 ''',
-      [error(WarningCode.unusedField, 27, 2)],
+      [error(diag.unusedField, 27, 2)],
     );
   }
 
@@ -379,7 +379,7 @@
   static String f1 = "x";
 }
 ''',
-      [error(WarningCode.unusedField, 41, 2)],
+      [error(diag.unusedField, 41, 2)],
     );
   }
 
@@ -391,7 +391,7 @@
 }
 void main() => print(_A);
 ''',
-      [error(WarningCode.unusedField, 27, 2)],
+      [error(diag.unusedField, 27, 2)],
     );
   }
 
@@ -403,7 +403,7 @@
   int _f = 0;
 }
 ''',
-      [error(WarningCode.unusedField, 37, 2)],
+      [error(diag.unusedField, 37, 2)],
     );
   }
 
@@ -420,7 +420,7 @@
   a._f = 2;
 }
 ''',
-      [error(WarningCode.unusedField, 16, 2)],
+      [error(diag.unusedField, 16, 2)],
     );
   }
 
@@ -447,7 +447,7 @@
   _E;
 }
 ''',
-      [error(WarningCode.unusedField, 12, 1)],
+      [error(diag.unusedField, 12, 1)],
     );
   }
 
@@ -490,7 +490,7 @@
   _E.v;
 }
 ''',
-      [error(WarningCode.unusedField, 34, 3)],
+      [error(diag.unusedField, 34, 3)],
     );
   }
 
@@ -538,7 +538,7 @@
   _v
 }
 ''',
-      [error(WarningCode.unusedField, 11, 2)],
+      [error(diag.unusedField, 11, 2)],
     );
   }
 
@@ -563,7 +563,7 @@
   final int _foo = 0;
 }
 ''',
-      [error(WarningCode.unusedField, 26, 4)],
+      [error(diag.unusedField, 26, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
index 8036a43..4752da1 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -65,33 +65,6 @@
 ''');
   }
 
-  test_library_export_and_export() async {
-    var a = newFile('$testPackageLibPath/a.dart', r'''
-class C {}
-''');
-
-    var b = newFile('$testPackageLibPath/b.dart', r'''
-export 'a.dart';
-''');
-
-    var c = newFile('$testPackageLibPath/c.dart', r'''
-export 'a.dart';
-''');
-
-    var d = newFile('$testPackageLibPath/d.dart', r'''
-import 'b.dart';
-import 'c.dart';
-
-method() => C();
-''');
-    await assertErrorsInFile2(a, []);
-    await assertErrorsInFile2(b, []);
-    await assertErrorsInFile2(c, []);
-    // Import of 'c.dart' is not marked as unused even though it could be
-    // removed.
-    await assertErrorsInFile2(d, []);
-  }
-
   test_library_export_infiniteLoop() async {
     newFile('$testPackageLibPath/lib1.dart', r'''
 export 'lib2.dart';
@@ -327,7 +300,7 @@
       '''
 import 'lib1.dart' as lib1;
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
@@ -356,32 +329,10 @@
 import 'lib1.dart' hide A;
 A? a;
 ''',
-      [error(WarningCode.unusedImport, 27, 11)],
+      [error(diag.unusedImport, 27, 11)],
     );
   }
 
-  test_library_import_and_export() async {
-    var a = newFile('$testPackageLibPath/a.dart', r'''
-class C {}
-''');
-
-    var b = newFile('$testPackageLibPath/b.dart', r'''
-export 'a.dart';
-''');
-
-    var c = newFile('$testPackageLibPath/c.dart', r'''
-import 'a.dart';
-import 'b.dart';
-
-method() => C();
-''');
-    await assertErrorsInFile2(a, []);
-    await assertErrorsInFile2(b, []);
-    // Import of 'b.dart' is not marked as unused even though it could be
-    // removed.
-    await assertErrorsInFile2(c, []);
-  }
-
   test_library_inComment_libraryDirective() async {
     await assertNoErrorsInCode(r'''
 /// Use [Future] class.
@@ -423,7 +374,7 @@
   ''.b();
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
@@ -440,7 +391,7 @@
   A.foo();
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 12)],
+      [error(diag.unusedImport, 7, 12)],
     );
   }
 
@@ -453,7 +404,7 @@
   Duration(seconds: 0);
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
@@ -467,7 +418,7 @@
 import 'lib1.dart' as one;
 one.A a = one.A();
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
@@ -502,7 +453,7 @@
 import 'lib2.dart' as one;
 one.A a = one.A();
 ''',
-      [error(WarningCode.unusedImport, 34, 11)],
+      [error(diag.unusedImport, 34, 11)],
     );
   }
 
@@ -567,7 +518,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 129, 1)],
+      [error(diag.unusedLocalVariable, 129, 1)],
     );
   }
 
@@ -599,7 +550,7 @@
 import 'a.dart' as prefix;
 prefix.File? f;
 ''',
-      [error(WarningCode.unusedImport, 7, 9)],
+      [error(diag.unusedImport, 7, 9)],
     );
   }
 
@@ -614,7 +565,7 @@
 import 'lib1.dart' show B;
 A a = A();
 ''',
-      [error(WarningCode.unusedImport, 34, 11)],
+      [error(diag.unusedImport, 34, 11)],
     );
   }
 
@@ -628,7 +579,7 @@
 import 'lib1.dart';
 File? f;
 ''',
-      [error(WarningCode.unusedImport, 7, 9)],
+      [error(diag.unusedImport, 7, 9)],
     );
   }
 
@@ -638,7 +589,7 @@
       r'''
 import 'lib1.dart';
 ''',
-      [error(WarningCode.unusedImport, 7, 11)],
+      [error(diag.unusedImport, 7, 11)],
     );
   }
 
@@ -729,7 +680,7 @@
 
     await assertErrorsInFile2(a, []);
 
-    await assertErrorsInFile2(b, [error(WarningCode.unusedImport, 25, 11)]);
+    await assertErrorsInFile2(b, [error(diag.unusedImport, 25, 11)]);
   }
 
   test_part_usedLibraryImport() async {
@@ -811,7 +762,7 @@
 void f(Random _) {}
 ''');
 
-    await assertErrorsInFile2(a, [error(WarningCode.unusedImport, 7, 11)]);
+    await assertErrorsInFile2(a, [error(diag.unusedImport, 7, 11)]);
 
     await assertErrorsInFile2(b, []);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_label_test.dart b/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
index e4a34a2..82b5eb4 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_label_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -35,7 +35,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLabel, 26, 6)],
+      [error(diag.unusedLabel, 26, 6)],
     );
   }
 
@@ -48,7 +48,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLabel, 19, 6)],
+      [error(diag.unusedLabel, 19, 6)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart b/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
index 142366a..00a0c18 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_local_variable_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   for (var (a,) in x) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 37, 1)],
+      [error(diag.unusedLocalVariable, 37, 1)],
     );
   }
 
@@ -51,7 +51,7 @@
   for (var (a,) = (0,);;) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 23, 1)],
+      [error(diag.unusedLocalVariable, 23, 1)],
     );
   }
 
@@ -81,8 +81,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 37, 1),
-        error(WarningCode.unusedLocalVariable, 47, 1),
+        error(diag.unusedLocalVariable, 37, 1),
+        error(diag.unusedLocalVariable, 47, 1),
       ],
     );
   }
@@ -104,7 +104,7 @@
   if (x case int a) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 37, 1)],
+      [error(diag.unusedLocalVariable, 37, 1)],
     );
   }
 
@@ -145,7 +145,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 46, 2)],
+      [error(diag.unusedLocalVariable, 46, 2)],
     );
   }
 
@@ -172,7 +172,7 @@
     ];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 27, 2)],
+      [error(diag.unusedLocalVariable, 27, 2)],
     );
   }
 
@@ -185,8 +185,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 12, 2),
-        error(WarningCode.unusedLocalVariable, 26, 3),
+        error(diag.unusedLocalVariable, 12, 2),
+        error(diag.unusedLocalVariable, 26, 3),
       ],
     );
   }
@@ -206,7 +206,7 @@
   var [__] = [1];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 13, 2)],
+      [error(diag.unusedLocalVariable, 13, 2)],
     );
   }
 
@@ -225,7 +225,7 @@
   var (__) = (1);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 13, 2)],
+      [error(diag.unusedLocalVariable, 13, 2)],
     );
   }
 
@@ -246,7 +246,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 2)],
+      [error(diag.unusedLocalVariable, 47, 2)],
     );
   }
 
@@ -268,8 +268,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(WarningCode.unusedLocalVariable, 21, 1),
+        error(diag.unusedLocalVariable, 18, 1),
+        error(diag.unusedLocalVariable, 21, 1),
       ],
     );
   }
@@ -282,8 +282,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(WarningCode.unusedLocalVariable, 22, 1),
+        error(diag.unusedLocalVariable, 18, 1),
+        error(diag.unusedLocalVariable, 22, 1),
       ],
     );
   }
@@ -299,8 +299,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 18, 1),
-        error(WarningCode.unusedLocalVariable, 21, 1),
+        error(diag.unusedLocalVariable, 18, 1),
+        error(diag.unusedLocalVariable, 21, 1),
       ],
     );
   }
@@ -312,7 +312,7 @@
   var (a,) = (0,);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 18, 1)],
+      [error(diag.unusedLocalVariable, 18, 1)],
     );
   }
 
@@ -362,7 +362,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 54, 1)],
+      [error(diag.unusedLocalVariable, 54, 1)],
     );
   }
 
@@ -398,7 +398,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 49, 1)],
+      [error(diag.unusedLocalVariable, 49, 1)],
     );
   }
 
@@ -436,8 +436,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 49, 1),
-        error(WarningCode.unusedLocalVariable, 68, 1),
+        error(diag.unusedLocalVariable, 49, 1),
+        error(diag.unusedLocalVariable, 68, 1),
       ],
     );
   }
@@ -465,7 +465,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 61, 1)],
+      [error(diag.unusedLocalVariable, 61, 1)],
     );
   }
 
@@ -480,13 +480,7 @@
   };
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.patternVariableSharedCaseScopeNotAllCases,
-          71,
-          1,
-        ),
-      ],
+      [error(diag.patternVariableSharedCaseScopeNotAllCases, 71, 1)],
     );
   }
 
@@ -501,7 +495,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 49, 1)],
+      [error(diag.unusedLocalVariable, 49, 1)],
     );
   }
 
@@ -528,7 +522,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 79, 1)],
+      [error(diag.unusedLocalVariable, 79, 1)],
     );
   }
 
@@ -552,7 +546,7 @@
   v = 2;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
   }
 
@@ -566,7 +560,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 28, 1)],
+      [error(diag.unusedLocalVariable, 28, 1)],
     );
   }
 
@@ -599,7 +593,7 @@
   v += 2;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
   }
 
@@ -611,7 +605,7 @@
   v++;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
   }
 
@@ -623,7 +617,7 @@
   ++v;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart b/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
index 6958663..4858f16 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_result_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -56,7 +56,7 @@
   return B();
 }
 ''',
-      [error(WarningCode.unusedResult, 83, 7)],
+      [error(diag.unusedResult, 83, 7)],
     );
   }
 
@@ -77,7 +77,7 @@
 ''',
       [
         error(
-          WarningCode.unusedResult,
+          diag.unusedResult,
           96,
           1,
           text: "The value of 'a' should be used.",
@@ -105,7 +105,7 @@
 ''',
       [
         error(
-          WarningCode.unusedResult,
+          diag.unusedResult,
           130,
           1,
           text: "The value of 'b' should be used.",
@@ -133,7 +133,7 @@
 ''',
       [
         error(
-          WarningCode.unusedResult,
+          diag.unusedResult,
           127,
           1,
           text: "The value of 'b' should be used.",
@@ -163,7 +163,7 @@
 ''',
       [
         error(
-          WarningCode.unusedResult,
+          diag.unusedResult,
           170,
           1,
           text: "The value of 'a' should be used.",
@@ -202,7 +202,7 @@
   A();
 }
 ''',
-      [error(WarningCode.unusedResult, 80, 3)],
+      [error(diag.unusedResult, 80, 3)],
     );
   }
 
@@ -300,7 +300,7 @@
   A().foo;
 }
 ''',
-      [error(WarningCode.unusedResult, 104, 3)],
+      [error(diag.unusedResult, 104, 3)],
     );
   }
 
@@ -394,7 +394,7 @@
   A().foo;
 }
 ''',
-      [error(WarningCode.unusedResult, 95, 3)],
+      [error(diag.unusedResult, 95, 3)],
     );
   }
 
@@ -412,7 +412,7 @@
   b ? A().foo : 0;
 }
 ''',
-      [error(WarningCode.unusedResult, 102, 3)],
+      [error(diag.unusedResult, 102, 3)],
     );
   }
 
@@ -430,7 +430,7 @@
   b ? (A().foo) : 0;
 }
 ''',
-      [error(WarningCode.unusedResult, 103, 3)],
+      [error(diag.unusedResult, 103, 3)],
     );
   }
 
@@ -452,7 +452,7 @@
   });
 }
 ''',
-      [error(WarningCode.unusedResult, 130, 3)],
+      [error(diag.unusedResult, 130, 3)],
     );
   }
 
@@ -550,7 +550,7 @@
   A.foo;
 }
 ''',
-      [error(WarningCode.unusedResult, 100, 3)],
+      [error(diag.unusedResult, 100, 3)],
     );
   }
 
@@ -581,7 +581,7 @@
   foo;
 }
 ''',
-      [error(WarningCode.unusedResult, 77, 3)],
+      [error(diag.unusedResult, 77, 3)],
     );
   }
 
@@ -686,7 +686,7 @@
   A().foo;
 }
 ''',
-      [error(WarningCode.unusedResult, 100, 3)],
+      [error(diag.unusedResult, 100, 3)],
     );
   }
 
@@ -927,7 +927,7 @@
   for (var i = 1; i < 7; a.foo()) {}
 }
 ''',
-      [error(WarningCode.unusedResult, 119, 3)],
+      [error(diag.unusedResult, 119, 3)],
     );
   }
 
@@ -1071,7 +1071,7 @@
   a.foo()!;
 }
 ''',
-      [error(WarningCode.unusedResult, 97, 3)],
+      [error(diag.unusedResult, 97, 3)],
     );
   }
 
@@ -1120,7 +1120,7 @@
 @useResult
 (int, int) g() => (0, 0);
 ''',
-      [error(WarningCode.unusedResult, 42, 1)],
+      [error(diag.unusedResult, 42, 1)],
     );
   }
 
@@ -1282,7 +1282,7 @@
 ''',
       [
         error(
-          WarningCode.unusedResult,
+          diag.unusedResult,
           98,
           3,
           text: "The value of 'foo' should be used.",
@@ -1309,7 +1309,7 @@
 ''',
       [
         error(
-          WarningCode.unusedResult,
+          diag.unusedResult,
           127,
           2,
           text: "The value of 'm1' should be used.",
@@ -1670,7 +1670,7 @@
   baz(); // OK
 }
 ''',
-      [error(WarningCode.unusedResult, 108, 3)],
+      [error(diag.unusedResult, 108, 3)],
     );
   }
 
@@ -1699,7 +1699,7 @@
   foo();
 }
 ''',
-      [error(WarningCode.unusedResult, 133, 3)],
+      [error(diag.unusedResult, 133, 3)],
     );
   }
 
@@ -1715,7 +1715,7 @@
   foo('none');
 }
 ''',
-      [error(WarningCode.unusedResult, 146, 3)],
+      [error(diag.unusedResult, 146, 3)],
     );
   }
 
@@ -1798,7 +1798,7 @@
   foo;
 }
 ''',
-      [error(WarningCode.unusedResult, 75, 3)],
+      [error(diag.unusedResult, 75, 3)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
index b5a4035..54b070f 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_shown_name_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -36,7 +36,7 @@
   s.length;
 }
 ''',
-      [error(WarningCode.unusedShownName, 24, 1)],
+      [error(diag.unusedShownName, 24, 1)],
     );
   }
 
@@ -149,7 +149,7 @@
 import 'lib1.dart' show A, B;
 A a = A();
 ''',
-      [error(WarningCode.unusedShownName, 27, 1)],
+      [error(diag.unusedShownName, 27, 1)],
     );
   }
 
@@ -161,7 +161,7 @@
   print(max(1, 2));
 }
 ''',
-      [error(WarningCode.undefinedShownName, 29, 6)],
+      [error(diag.undefinedShownName, 29, 6)],
     );
   }
 
@@ -175,7 +175,7 @@
 import 'lib1.dart' as p show A, B;
 p.A a = p.A();
 ''',
-      [error(WarningCode.unusedShownName, 32, 1)],
+      [error(diag.unusedShownName, 32, 1)],
     );
   }
 
@@ -193,10 +193,7 @@
 A a = A();
 C c = C();
 ''',
-      [
-        error(WarningCode.unusedShownName, 27, 1),
-        error(WarningCode.unusedShownName, 57, 1),
-      ],
+      [error(diag.unusedShownName, 27, 1), error(diag.unusedShownName, 57, 1)],
     );
   }
 
@@ -215,7 +212,7 @@
 int b = var2;
 int c = var3;
 ''',
-      [error(WarningCode.unusedShownName, 66, 4)],
+      [error(diag.unusedShownName, 66, 4)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_in_doc_import_test.dart b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_in_doc_import_test.dart
index a2c32b50..57bdd0a 100644
--- a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_in_doc_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_in_doc_import_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// @docImport 'dart:foo';
 library;
 ''',
-      [error(WarningCode.uriDoesNotExistInDocImport, 15, 10)],
+      [error(diag.uriDoesNotExistInDocImport, 15, 10)],
     );
   }
 
@@ -31,7 +31,7 @@
 /// @docImport 'foo.dart';
 library;
 ''',
-      [error(WarningCode.uriDoesNotExistInDocImport, 15, 10)],
+      [error(diag.uriDoesNotExistInDocImport, 15, 10)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
index 7d31d7a..b98f610 100644
--- a/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/uri_does_not_exist_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -34,7 +34,7 @@
   g(D());
 }
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 24, 11)],
+      [error(diag.uriDoesNotExist, 24, 11)],
     );
   }
 
@@ -43,7 +43,7 @@
       '''
 export 'unknown.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 14)],
+      [error(diag.uriDoesNotExist, 7, 14)],
     );
   }
 
@@ -52,7 +52,7 @@
       r'''
 export 'dart:foo';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 10)],
+      [error(diag.uriDoesNotExist, 7, 10)],
     );
   }
 
@@ -61,7 +61,7 @@
       '''
 export 'dart:math/bar.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 20)],
+      [error(diag.uriDoesNotExist, 7, 20)],
     );
   }
 
@@ -70,7 +70,7 @@
       '''
 import 'unknown.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 14)],
+      [error(diag.uriDoesNotExist, 7, 14)],
     );
   }
 
@@ -81,7 +81,7 @@
       '''
 import 'target.dart';
 ''',
-      [error(WarningCode.unusedImport, 7, 13)],
+      [error(diag.unusedImport, 7, 13)],
     );
 
     // Remove the overlay in the same way as AnalysisServer.
@@ -92,7 +92,7 @@
     await analysisDriver.applyPendingFileChanges();
 
     await resolveTestFile();
-    assertErrorsInResult([error(CompileTimeErrorCode.uriDoesNotExist, 7, 13)]);
+    assertErrorsInResult([error(diag.uriDoesNotExist, 7, 13)]);
   }
 
   test_libraryImport_cannotResolve() async {
@@ -100,7 +100,7 @@
       r'''
 import 'dart:foo';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 10)],
+      [error(diag.uriDoesNotExist, 7, 10)],
     );
   }
 
@@ -109,7 +109,7 @@
       '''
 import 'dart:math/bar.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 20)],
+      [error(diag.uriDoesNotExist, 7, 20)],
     );
   }
 
@@ -121,7 +121,7 @@
   p.loadLibrary();
 }
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 15)],
+      [error(diag.uriDoesNotExist, 7, 15)],
     );
   }
 
@@ -131,7 +131,7 @@
       '''
 import 'target.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 7, 13)],
+      [error(diag.uriDoesNotExist, 7, 13)],
     );
 
     newFile('$testPackageLibPath/target.dart', '');
@@ -140,7 +140,7 @@
     // TODO(brianwilkerson): The error does not go away, possibly because the
     //  file is not being reanalyzed.
     await resolveTestFile();
-    assertErrorsInResult([error(WarningCode.unusedImport, 0, 0)]);
+    assertErrorsInResult([error(diag.unusedImport, 0, 0)]);
   }
 
   test_part() async {
@@ -149,7 +149,7 @@
 library lib;
 part 'unknown.dart';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 18, 14)],
+      [error(diag.uriDoesNotExist, 18, 14)],
     );
   }
 
@@ -158,7 +158,7 @@
       r'''
 part 'dart:foo';
 ''',
-      [error(CompileTimeErrorCode.uriDoesNotExist, 5, 10)],
+      [error(diag.uriDoesNotExist, 5, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart b/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart
index d7cbf0f..0d8595d 100644
--- a/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// @docImport '${'foo'}.dart';
 library;
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 15, 15)],
+      [error(diag.uriWithInterpolation, 15, 15)],
     );
   }
 
@@ -30,7 +30,7 @@
       r'''
 export '${'foo'}.dart';
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 7, 15)],
+      [error(diag.uriWithInterpolation, 7, 15)],
     );
   }
 
@@ -39,7 +39,7 @@
       r'''
 import '${'foo'}.dart';
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 7, 15)],
+      [error(diag.uriWithInterpolation, 7, 15)],
     );
   }
 
@@ -48,7 +48,7 @@
       r'''
 part '${'foo'}.dart';
 ''',
-      [error(CompileTimeErrorCode.uriWithInterpolation, 5, 15)],
+      [error(diag.uriWithInterpolation, 5, 15)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart
index 3b12b67..4c15b98 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_native_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_native_extension_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -21,7 +21,7 @@
 /// @docImport 'dart-ext:x';
 library;
 ''',
-      [error(CompileTimeErrorCode.useOfNativeExtension, 15, 12)],
+      [error(diag.useOfNativeExtension, 15, 12)],
     );
   }
 
@@ -30,7 +30,7 @@
       r'''
 export 'dart-ext:x';
 ''',
-      [error(CompileTimeErrorCode.useOfNativeExtension, 7, 12)],
+      [error(diag.useOfNativeExtension, 7, 12)],
     );
   }
 
@@ -39,7 +39,7 @@
       r'''
 import 'dart-ext:x';
 ''',
-      [error(CompileTimeErrorCode.useOfNativeExtension, 7, 12)],
+      [error(diag.useOfNativeExtension, 7, 12)],
     );
   }
 }
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 9f2ed93..f1e251a 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
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   x as int;
 }
 ''',
-      [error(WarningCode.castFromNullAlwaysFails, 18, 8)],
+      [error(diag.castFromNullAlwaysFails, 18, 8)],
     );
   }
 
@@ -56,7 +56,7 @@
   x == null;
 }
 ''',
-      [error(WarningCode.unnecessaryNullComparisonAlwaysNullTrue, 18, 4)],
+      [error(diag.unnecessaryNullComparisonAlwaysNullTrue, 18, 4)],
     );
   }
 
@@ -69,8 +69,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 27, 1),
-        error(CompileTimeErrorCode.invalidUseOfNullValue, 32, 1),
+        error(diag.unusedLocalVariable, 27, 1),
+        error(diag.invalidUseOfNullValue, 32, 1),
       ],
     );
   }
@@ -110,7 +110,7 @@
   x != null;
 }
 ''',
-      [error(WarningCode.unnecessaryNullComparisonAlwaysNullFalse, 18, 4)],
+      [error(diag.unnecessaryNullComparisonAlwaysNullFalse, 18, 4)],
     );
   }
 
@@ -174,16 +174,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          130,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          158,
-          1,
-        ),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 130, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 158, 1),
       ],
     );
   }
@@ -226,16 +218,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          68,
-          3,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          84,
-          3,
-        ),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 68, 3),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 84, 3),
       ],
     );
   }
@@ -279,13 +263,7 @@
   }
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          77,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 77, 1)],
     );
   }
 
@@ -331,16 +309,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          93,
-          3,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          107,
-          3,
-        ),
+        error(diag.uncheckedPropertyAccessOfNullableValue, 93, 3),
+        error(diag.uncheckedPropertyAccessOfNullableValue, 107, 3),
       ],
     );
   }
@@ -387,16 +357,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          93,
-          3,
-        ),
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          111,
-          3,
-        ),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 93, 3),
+        error(diag.uncheckedPropertyAccessOfNullableValue, 111, 3),
       ],
     );
   }
@@ -421,13 +383,7 @@
   if(x && true) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          22,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 22, 1)],
     );
   }
 
@@ -439,7 +395,7 @@
   x as int;
 }
 ''',
-      [error(WarningCode.castFromNullableAlwaysFails, 23, 1)],
+      [error(diag.castFromNullableAlwaysFails, 23, 1)],
     );
   }
 
@@ -469,13 +425,7 @@
   assert(x);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          26,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 26, 1)],
     );
   }
 
@@ -497,13 +447,7 @@
   b.a.x = 2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          104,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 104, 1)],
     );
 
     assertResolvedNodeText(findNode.assignment('x = 1'), r'''
@@ -641,13 +585,7 @@
   b.a.y += 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          115,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 115, 2)],
     );
 
     assertResolvedNodeText(findNode.assignment('x +='), r'''
@@ -737,13 +675,7 @@
   b.a.x += 2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          105,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 105, 1)],
     );
 
     assertResolvedNodeText(findNode.assignment('x += 1'), r'''
@@ -823,13 +755,7 @@
   y += 0;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          33,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 33, 2)],
     );
 
     assertResolvedNodeText(findNode.assignment('x +='), r'''
@@ -905,13 +831,7 @@
   x..[0] = 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          23,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 23, 1)],
     );
   }
 
@@ -931,13 +851,7 @@
   x..abs();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          21,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 21, 3)],
     );
   }
 
@@ -956,13 +870,7 @@
   x..isEven;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          17,
-          6,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 17, 6)],
     );
   }
 
@@ -982,7 +890,7 @@
   x == null;
 }
 ''',
-      [error(WarningCode.unnecessaryNullComparisonAlwaysNullTrue, 18, 4)],
+      [error(diag.unnecessaryNullComparisonAlwaysNullTrue, 18, 4)],
     );
   }
 
@@ -994,7 +902,7 @@
   for (var y in x) {}
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 32, 1)],
+      [error(diag.unusedLocalVariable, 32, 1)],
     );
   }
 
@@ -1007,12 +915,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 28, 1),
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
-          33,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 28, 1),
+        error(diag.uncheckedUseOfNullableValueAsIterator, 33, 1),
       ],
     );
   }
@@ -1026,12 +930,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 29, 1),
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
-          35,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 29, 1),
+        error(diag.uncheckedUseOfNullableValueAsIterator, 35, 1),
       ],
     );
   }
@@ -1047,13 +947,7 @@
   x.foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          60,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 60, 3)],
     );
   }
 
@@ -1074,13 +968,7 @@
   if (x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          23,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 23, 1)],
     );
   }
 
@@ -1101,13 +989,7 @@
   x[0];
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          20,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 20, 1)],
     );
   }
 
@@ -1128,7 +1010,7 @@
   x();
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 23, 1)],
+      [error(diag.uncheckedInvocationOfNullableValue, 23, 1)],
     );
   }
 
@@ -1139,7 +1021,7 @@
   funcList[0]();
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 50, 11)],
+      [error(diag.uncheckedInvocationOfNullableValue, 50, 11)],
     );
   }
 
@@ -1160,7 +1042,7 @@
   x();
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 25, 1)],
+      [error(diag.uncheckedInvocationOfNullableValue, 25, 1)],
     );
   }
 
@@ -1217,13 +1099,7 @@
   x.isEven;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          20,
-          6,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 20, 6)],
     );
 
     var node = findNode.simple('isEven');
@@ -1252,13 +1128,7 @@
   (x).isEven;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          22,
-          6,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 22, 6)],
     );
   }
 
@@ -1278,13 +1148,7 @@
   x.isEven;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          29,
-          6,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 29, 6)],
     );
   }
 
@@ -1295,7 +1159,7 @@
   x.first();
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedInvocationOfNullableValue, 38, 7)],
+      [error(diag.uncheckedInvocationOfNullableValue, 38, 7)],
     );
   }
 
@@ -1341,13 +1205,7 @@
   x.round();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          20,
-          5,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 20, 5)],
     );
   }
 
@@ -1362,13 +1220,7 @@
   x.foo();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          56,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 56, 3)],
     );
   }
 
@@ -1403,13 +1255,7 @@
   x.call();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          21,
-          4,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 21, 4)],
     );
   }
 
@@ -1421,7 +1267,7 @@
   x -= 1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -1434,12 +1280,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          20,
-          2,
-        ),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 20, 2),
       ],
     );
   }
@@ -1452,7 +1294,7 @@
   if(!x) {}
 }
 ''',
-      [error(WarningCode.deadCode, 32, 2)],
+      [error(diag.deadCode, 32, 2)],
     );
   }
 
@@ -1464,13 +1306,7 @@
   if(!x) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          23,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 23, 1)],
     );
   }
 
@@ -1482,7 +1318,7 @@
   x != null;
 }
 ''',
-      [error(WarningCode.unnecessaryNullComparisonAlwaysNullFalse, 18, 4)],
+      [error(diag.unnecessaryNullComparisonAlwaysNullFalse, 18, 4)],
     );
   }
 
@@ -1531,13 +1367,7 @@
   x - 3;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-          20,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedOperatorInvocationOfNullableValue, 20, 1)],
     );
   }
 
@@ -1558,13 +1388,7 @@
   x + 3;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-          20,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedOperatorInvocationOfNullableValue, 20, 1)],
     );
   }
 
@@ -1576,7 +1400,7 @@
   x--;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -1589,12 +1413,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          19,
-          2,
-        ),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 19, 2),
       ],
     );
   }
@@ -1614,13 +1434,7 @@
   x++;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          15,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 15, 2)],
     );
   }
 
@@ -1637,13 +1451,7 @@
   x++;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          78,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 78, 2)],
     );
   }
 
@@ -1655,7 +1463,7 @@
   --x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -1668,12 +1476,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          18,
-          2,
-        ),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 18, 2),
       ],
     );
   }
@@ -1693,13 +1497,7 @@
   ++x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          14,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 14, 2)],
     );
   }
 
@@ -1711,7 +1509,7 @@
   -x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 12, 1)],
+      [error(diag.unusedLocalVariable, 12, 1)],
     );
   }
 
@@ -1724,12 +1522,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 13, 1),
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          18,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 13, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 18, 1),
       ],
     );
   }
@@ -1747,13 +1541,7 @@
   -x;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          72,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 72, 1)],
     );
   }
 
@@ -1765,7 +1553,7 @@
   if(x || false) {}
 }
 ''',
-      [error(WarningCode.deadCode, 30, 8)],
+      [error(diag.deadCode, 30, 8)],
     );
   }
 
@@ -1777,13 +1565,7 @@
   if(x || false) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          22,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 22, 1)],
     );
   }
 
@@ -1802,13 +1584,7 @@
   x += 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          16,
-          2,
-        ),
-      ],
+      [error(diag.uncheckedMethodInvocationOfNullableValue, 16, 2)],
     );
   }
 
@@ -1825,13 +1601,7 @@
   a.x; // 2
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          68,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 68, 1)],
     );
     var propertyAccess1 = findNode.propertyAccess('a?.x; // 1');
     var propertyAccess2 = findNode.prefixed('a.x; // 2');
@@ -1863,13 +1633,7 @@
   b.a.x; // 2
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          105,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 105, 1)],
     );
     var propertyAccess1 = findNode.propertyAccess('b.a?.x; // 1');
     var propertyAccess2 = findNode.propertyAccess('b.a.x; // 2');
@@ -1901,13 +1665,7 @@
   b.a.x; // 2
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          103,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 103, 1)],
     );
     var propertyAccess1 = findNode.propertyAccess('x; // 1');
     var propertyAccess2 = findNode.propertyAccess('x; // 2');
@@ -1944,13 +1702,7 @@
   c.b.a.x; // 2
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          148,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 148, 1)],
     );
     var propertyAccess1 = findNode.propertyAccess('x; // 1');
     var propertyAccess2 = findNode.propertyAccess('x; // 2');
@@ -1987,13 +1739,7 @@
   c.b.a.x; // 2
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedPropertyAccessOfNullableValue,
-          152,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedPropertyAccessOfNullableValue, 152, 1)],
     );
     var propertyAccess1 = findNode.propertyAccess('x; // 1');
     var propertyAccess2 = findNode.propertyAccess('x; // 2');
@@ -2028,7 +1774,7 @@
   [...list];
 }
 ''',
-      [error(CompileTimeErrorCode.uncheckedUseOfNullableValueInSpread, 26, 4)],
+      [error(diag.uncheckedUseOfNullableValueInSpread, 26, 4)],
     );
   }
 
@@ -2049,13 +1795,7 @@
   x ? 0 : 1;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsCondition,
-          19,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedUseOfNullableValueAsCondition, 19, 1)],
     );
   }
 
@@ -2084,13 +1824,7 @@
   s?.length >>> 2;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-          27,
-          3,
-        ),
-      ],
+      [error(diag.uncheckedOperatorInvocationOfNullableValue, 27, 3)],
     );
   }
 
@@ -2101,13 +1835,7 @@
   if (x case > 0) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.uncheckedOperatorInvocationOfNullableValue,
-          30,
-          1,
-        ),
-      ],
+      [error(diag.uncheckedOperatorInvocationOfNullableValue, 30, 1)],
     );
   }
 
@@ -2141,12 +1869,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.yieldEachOfInvalidType, 37, 1),
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach,
-          37,
-          1,
-        ),
+        error(diag.yieldEachOfInvalidType, 37, 1),
+        error(diag.uncheckedUseOfNullableValueInYieldEach, 37, 1),
       ],
     );
   }
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 9fc69ac..26052b2 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   x && true;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 19, 1)],
+      [error(diag.useOfVoidResult, 19, 1)],
     );
   }
 
@@ -33,7 +33,7 @@
   true && x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 27, 1)],
+      [error(diag.useOfVoidResult, 27, 1)],
     );
   }
 
@@ -45,7 +45,7 @@
   dynamic v = x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 65, 1)],
+      [error(diag.useOfVoidResult, 65, 1)],
     );
   }
 
@@ -69,8 +69,8 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 38, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 49, 1),
+        error(diag.unusedLocalVariable, 38, 1),
+        error(diag.useOfVoidResult, 49, 1),
       ],
     );
   }
@@ -86,8 +86,8 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 40, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 51, 1),
+        error(diag.unusedLocalVariable, 40, 1),
+        error(diag.useOfVoidResult, 51, 1),
       ],
     );
   }
@@ -108,7 +108,7 @@
   await x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 31, 1)],
+      [error(diag.useOfVoidResult, 31, 1)],
     );
   }
 
@@ -120,7 +120,7 @@
   A(void x) : f = x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 41, 1)],
+      [error(diag.useOfVoidResult, 41, 1)],
     );
   }
 
@@ -146,7 +146,7 @@
   E(f()).g;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 73, 3)],
+      [error(diag.useOfVoidResult, 73, 3)],
     );
   }
 
@@ -160,7 +160,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 33, 1)],
+      [error(diag.unusedLocalVariable, 33, 1)],
     );
   }
 
@@ -174,8 +174,8 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 47, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 51, 1),
+        error(diag.unusedLocalVariable, 47, 1),
+        error(diag.useOfVoidResult, 51, 1),
       ],
     );
   }
@@ -190,7 +190,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 45, 1)],
+      [error(diag.unusedLocalVariable, 45, 1)],
     );
   }
 
@@ -201,7 +201,7 @@
   "$x";
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 21, 1)],
+      [error(diag.useOfVoidResult, 21, 1)],
     );
   }
 
@@ -212,7 +212,7 @@
   !x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 20, 1)],
+      [error(diag.useOfVoidResult, 20, 1)],
     );
   }
 
@@ -224,7 +224,7 @@
   var a = f();
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 26, 1)],
+      [error(diag.unusedLocalVariable, 26, 1)],
     );
   }
 
@@ -235,7 +235,7 @@
   x!;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 14, 2)],
+      [error(diag.useOfVoidResult, 14, 2)],
     );
 
     assertType(findNode.postfix('x!'), 'void');
@@ -248,7 +248,7 @@
   x || true;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 19, 1)],
+      [error(diag.useOfVoidResult, 19, 1)],
     );
   }
 
@@ -259,7 +259,7 @@
   false || x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 28, 1)],
+      [error(diag.useOfVoidResult, 28, 1)],
     );
   }
 
@@ -270,7 +270,7 @@
   (one: x,);
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 20, 6)],
+      [error(diag.useOfVoidResult, 20, 6)],
     );
   }
 
@@ -281,7 +281,7 @@
   (x,);
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 20, 1)],
+      [error(diag.useOfVoidResult, 20, 1)],
     );
   }
 
@@ -292,7 +292,7 @@
   switch(x) {}
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 26, 1)],
+      [error(diag.useOfVoidResult, 26, 1)],
     );
   }
 
@@ -304,8 +304,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.useOfVoidResult, 25, 1),
-        error(CompileTimeErrorCode.throwOfInvalidType, 25, 1),
+        error(diag.useOfVoidResult, 25, 1),
+        error(diag.throwOfInvalidType, 25, 1),
       ],
     );
   }
@@ -318,12 +318,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          24,
-          1,
-        ),
-        error(CompileTimeErrorCode.useOfVoidResult, 25, 3),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 24, 1),
+        error(diag.useOfVoidResult, 25, 3),
       ],
     );
   }
@@ -336,12 +332,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedMethodInvocationOfNullableValue,
-          19,
-          1,
-        ),
-        error(CompileTimeErrorCode.useOfVoidResult, 20, 1),
+        error(diag.uncheckedMethodInvocationOfNullableValue, 19, 1),
+        error(diag.useOfVoidResult, 20, 1),
       ],
     );
   }
@@ -353,7 +345,7 @@
   list[x] = null;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 35, 1)],
+      [error(diag.useOfVoidResult, 35, 1)],
     );
   }
 
@@ -364,7 +356,7 @@
   list[x];
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 35, 1)],
+      [error(diag.useOfVoidResult, 35, 1)],
     );
   }
 
@@ -376,8 +368,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 27, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 31, 1),
+        error(diag.unusedLocalVariable, 27, 1),
+        error(diag.useOfVoidResult, 31, 1),
       ],
     );
   }
@@ -389,7 +381,7 @@
   x[0];
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 20, 3)],
+      [error(diag.useOfVoidResult, 20, 3)],
     );
   }
 
@@ -400,7 +392,7 @@
   x.foo = null;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 21, 3)],
+      [error(diag.useOfVoidResult, 21, 3)],
     );
   }
 
@@ -421,7 +413,7 @@
   x ? null : null;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 19, 1)],
+      [error(diag.useOfVoidResult, 19, 1)],
     );
   }
 
@@ -450,7 +442,7 @@
   do {} while (x);
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 32, 1)],
+      [error(diag.useOfVoidResult, 32, 1)],
     );
   }
 
@@ -470,12 +462,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
-          36,
-          1,
-        ),
-        error(CompileTimeErrorCode.useOfVoidResult, 36, 1),
+        error(diag.uncheckedUseOfNullableValueAsIterator, 36, 1),
+        error(diag.useOfVoidResult, 36, 1),
       ],
     );
   }
@@ -488,13 +476,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 28, 1),
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueAsIterator,
-          33,
-          1,
-        ),
-        error(CompileTimeErrorCode.useOfVoidResult, 33, 1),
+        error(diag.unusedLocalVariable, 28, 1),
+        error(diag.uncheckedUseOfNullableValueAsIterator, 33, 1),
+        error(diag.useOfVoidResult, 33, 1),
       ],
     );
   }
@@ -507,7 +491,7 @@
   for (x in [1, 2]) {}
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 24, 1)],
+      [error(diag.useOfVoidResult, 24, 1)],
     );
   }
 
@@ -526,7 +510,7 @@
   x is int;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 19, 1)],
+      [error(diag.useOfVoidResult, 19, 1)],
     );
   }
 
@@ -537,7 +521,7 @@
   <dynamic>[x];
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 29, 1)],
+      [error(diag.useOfVoidResult, 29, 1)],
     );
   }
 
@@ -556,7 +540,7 @@
   <dynamic, int>{x : 4};
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 34, 1)],
+      [error(diag.useOfVoidResult, 34, 1)],
     );
   }
 
@@ -575,7 +559,7 @@
   <int, dynamic>{4: x};
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 37, 1)],
+      [error(diag.useOfVoidResult, 37, 1)],
     );
   }
 
@@ -594,7 +578,7 @@
   x ?? 1;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 19, 1)],
+      [error(diag.useOfVoidResult, 19, 1)],
     );
   }
 
@@ -613,7 +597,7 @@
   x += 1;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 21, 2)],
+      [error(diag.useOfVoidResult, 21, 2)],
     );
   }
 
@@ -624,7 +608,7 @@
   while (x) {};
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 26, 1)],
+      [error(diag.useOfVoidResult, 26, 1)],
     );
   }
 
@@ -635,7 +619,7 @@
   x?.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 22, 3)],
+      [error(diag.useOfVoidResult, 22, 3)],
     );
   }
 
@@ -646,7 +630,7 @@
   x.foo;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 21, 3)],
+      [error(diag.useOfVoidResult, 21, 3)],
     );
   }
 
@@ -660,10 +644,7 @@
   }
 }
 ''',
-      [
-        error(WarningCode.unusedElement, 22, 8),
-        error(CompileTimeErrorCode.useOfVoidResult, 96, 4),
-      ],
+      [error(diag.unusedElement, 22, 8), error(diag.useOfVoidResult, 96, 4)],
     );
   }
 
@@ -676,7 +657,7 @@
   return x;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 36, 1)],
+      [error(diag.returnOfInvalidTypeFromFunction, 36, 1)],
     );
   }
 
@@ -696,7 +677,7 @@
 }
 void g(dynamic x) { }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 21, 1)],
+      [error(diag.useOfVoidResult, 21, 1)],
     );
   }
 
@@ -707,7 +688,7 @@
   void y = x;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 24, 1)],
+      [error(diag.unusedLocalVariable, 24, 1)],
     );
   }
 
@@ -721,8 +702,8 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 41, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 45, 1),
+        error(diag.unusedLocalVariable, 41, 1),
+        error(diag.useOfVoidResult, 45, 1),
       ],
     );
   }
@@ -737,7 +718,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 39, 1)],
+      [error(diag.unusedLocalVariable, 39, 1)],
     );
   }
 
@@ -751,10 +732,10 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 43, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 47, 1),
-        error(WarningCode.unusedLocalVariable, 52, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 56, 1),
+        error(diag.unusedLocalVariable, 43, 1),
+        error(diag.useOfVoidResult, 47, 1),
+        error(diag.unusedLocalVariable, 52, 1),
+        error(diag.useOfVoidResult, 56, 1),
       ],
     );
   }
@@ -769,8 +750,8 @@
   }
 }''',
       [
-        error(WarningCode.unusedLocalVariable, 43, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 47, 1),
+        error(diag.unusedLocalVariable, 43, 1),
+        error(diag.useOfVoidResult, 47, 1),
       ],
     );
   }
@@ -785,7 +766,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 41, 1)],
+      [error(diag.unusedLocalVariable, 41, 1)],
     );
   }
 
@@ -797,13 +778,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach,
-          36,
-          1,
-        ),
-        error(CompileTimeErrorCode.yieldEachOfInvalidType, 36, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 36, 1),
+        error(diag.uncheckedUseOfNullableValueInYieldEach, 36, 1),
+        error(diag.yieldEachOfInvalidType, 36, 1),
+        error(diag.useOfVoidResult, 36, 1),
       ],
     );
   }
@@ -816,13 +793,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.uncheckedUseOfNullableValueInYieldEach,
-          35,
-          1,
-        ),
-        error(CompileTimeErrorCode.yieldEachOfInvalidType, 35, 1),
-        error(CompileTimeErrorCode.useOfVoidResult, 35, 1),
+        error(diag.uncheckedUseOfNullableValueInYieldEach, 35, 1),
+        error(diag.yieldEachOfInvalidType, 35, 1),
+        error(diag.useOfVoidResult, 35, 1),
       ],
     );
   }
@@ -834,7 +807,7 @@
   yield x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 35, 1)],
+      [error(diag.useOfVoidResult, 35, 1)],
     );
   }
 
@@ -845,7 +818,7 @@
   yield x;
 }
 ''',
-      [error(CompileTimeErrorCode.useOfVoidResult, 34, 1)],
+      [error(diag.useOfVoidResult, 34, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
index b1bbb790..bc6940b 100644
--- a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   values
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 11, 6)],
+      [error(diag.valuesDeclarationInEnum, 11, 6)],
     );
   }
 
@@ -34,7 +34,7 @@
   final int values = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 26, 6)],
+      [error(diag.valuesDeclarationInEnum, 26, 6)],
     );
   }
 
@@ -46,7 +46,7 @@
   static int values = 0;
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 27, 6)],
+      [error(diag.valuesDeclarationInEnum, 27, 6)],
     );
   }
 
@@ -59,7 +59,7 @@
   const E();
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 22, 6)],
+      [error(diag.valuesDeclarationInEnum, 22, 6)],
     );
   }
 
@@ -71,7 +71,7 @@
   int get values => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 24, 6)],
+      [error(diag.valuesDeclarationInEnum, 24, 6)],
     );
   }
 
@@ -83,7 +83,7 @@
   static int get values => 0;
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 31, 6)],
+      [error(diag.valuesDeclarationInEnum, 31, 6)],
     );
   }
 
@@ -95,7 +95,7 @@
   void values() {}
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 21, 6)],
+      [error(diag.valuesDeclarationInEnum, 21, 6)],
     );
   }
 
@@ -107,7 +107,7 @@
   static void values() {}
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 28, 6)],
+      [error(diag.valuesDeclarationInEnum, 28, 6)],
     );
   }
 
@@ -119,7 +119,7 @@
   set values(_) {}
 }
 ''',
-      [error(CompileTimeErrorCode.valuesDeclarationInEnum, 20, 6)],
+      [error(diag.valuesDeclarationInEnum, 20, 6)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart
index adf02db..90b0bb4 100644
--- a/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/variable_type_mismatch_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
       '''
 const Unresolved x = null;
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 6, 10)],
+      [error(diag.undefinedClass, 6, 10)],
     );
   }
 
@@ -35,7 +35,7 @@
       '''
 const int x = 'foo';
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 14, 5)],
+      [error(diag.invalidAssignment, 14, 5)],
     );
   }
 
@@ -44,7 +44,7 @@
       '''
 const Unresolved x = 'foo';
 ''',
-      [error(CompileTimeErrorCode.undefinedClass, 6, 10)],
+      [error(diag.undefinedClass, 6, 10)],
     );
   }
 
@@ -57,7 +57,7 @@
 const dynamic x = 0;
 const double y = x;
 ''',
-      [error(CompileTimeErrorCode.variableTypeMismatch, 38, 1)],
+      [error(diag.variableTypeMismatch, 38, 1)],
     );
   }
 
@@ -67,7 +67,7 @@
 const dynamic x = [1];
 const List<String> y = x;
 ''',
-      [error(CompileTimeErrorCode.variableTypeMismatch, 46, 1)],
+      [error(diag.variableTypeMismatch, 46, 1)],
     );
   }
 
@@ -77,7 +77,7 @@
 const dynamic x = {1: 1};
 const Map<String, dynamic> y = x;
 ''',
-      [error(CompileTimeErrorCode.variableTypeMismatch, 57, 1)],
+      [error(diag.variableTypeMismatch, 57, 1)],
     );
   }
 
@@ -87,7 +87,7 @@
 const dynamic x = {1: 1};
 const Map<dynamic, String> y = x;
 ''',
-      [error(CompileTimeErrorCode.variableTypeMismatch, 57, 1)],
+      [error(diag.variableTypeMismatch, 57, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart
index a50e442..f3b9086 100644
--- a/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
       '''
 void<int> f() {}
 ''',
-      [error(ParserErrorCode.voidWithTypeArguments, 4, 1)],
+      [error(diag.voidWithTypeArguments, 4, 1)],
     );
 
     var node = findNode.namedType('void<int>');
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_parameters_for_operator_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_parameters_for_operator_test.dart
index ed2fc29..5f13b51 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_parameters_for_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_parameters_for_operator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -73,13 +73,7 @@
   operator -(a, b) {}
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongNumberOfParametersForOperatorMinus,
-          21,
-          1,
-        ),
-      ],
+      [error(diag.wrongNumberOfParametersForOperatorMinus, 21, 1)],
     );
   }
 
@@ -97,7 +91,7 @@
   operator $name($parameters) {}
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfParametersForOperator, 21, 1)],
+      [error(diag.wrongNumberOfParametersForOperator, 21, 1)],
     );
   }
 
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
index 4655bb8..4ff85d2 100644
--- 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   v<int>()
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsEnum, 18, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsEnum, 18, 5)],
     );
   }
 
@@ -33,7 +33,7 @@
   v<int, int>()
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsEnum, 15, 10)],
+      [error(diag.wrongNumberOfTypeArgumentsEnum, 15, 10)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_extension_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_extension_test.dart
index c4b0180..ab95161 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_extension_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_extension_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -26,7 +26,7 @@
   E<int>(0).foo();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension, 54, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsExtension, 54, 5)],
     );
 
     var node = findNode.extensionOverride('E<int>');
@@ -66,7 +66,7 @@
   E<bool>(0).foo();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension, 60, 6)],
+      [error(diag.wrongNumberOfTypeArgumentsExtension, 60, 6)],
     );
 
     var node = findNode.extensionOverride('E<bool>');
@@ -109,7 +109,7 @@
   E<bool, int>(0).foo();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsExtension, 57, 11)],
+      [error(diag.wrongNumberOfTypeArgumentsExtension, 57, 11)],
     );
 
     var node = findNode.extensionOverride('E<bool, int>');
diff --git a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
index effa070..eb1a012 100644
--- a/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/wrong_number_of_type_arguments_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
 class A<E, F> {}
 A<A>? a;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 17, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 17, 5)],
     );
   }
 
@@ -32,7 +32,7 @@
 class A<E> {}
 A<A, A>? a;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 14, 8)],
+      [error(diag.wrongNumberOfTypeArguments, 14, 8)],
     );
   }
 
@@ -43,7 +43,7 @@
 mixin M {}
 class B<F extends num> = A<F> with M;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 47, 4)],
+      [error(diag.wrongNumberOfTypeArguments, 47, 4)],
     );
   }
 
@@ -58,7 +58,7 @@
   return const C<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 47, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 47, 6)],
     );
   }
 
@@ -73,7 +73,7 @@
   return const C<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 53, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 53, 6)],
     );
   }
 
@@ -88,7 +88,7 @@
   return const C<int, int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 50, 11)],
+      [error(diag.wrongNumberOfTypeArguments, 50, 11)],
     );
   }
 
@@ -97,7 +97,7 @@
       r'''
 dynamic<int> v;
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 0, 12)],
+      [error(diag.wrongNumberOfTypeArguments, 0, 12)],
     );
   }
 
@@ -109,7 +109,7 @@
 }
 void g<T, U>() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 14, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 14, 5)],
     );
   }
 
@@ -121,7 +121,7 @@
 }
 void g<T>() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 14, 13)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 14, 13)],
     );
   }
 
@@ -135,7 +135,7 @@
   void call<T, U>() {}
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 12, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 12, 5)],
     );
   }
 
@@ -149,7 +149,7 @@
   void call<T>() {}
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 12, 13)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 12, 13)],
     );
   }
 
@@ -161,7 +161,7 @@
   foo<int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 33, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 33, 5)],
     );
   }
 
@@ -173,7 +173,7 @@
   foo<int, int>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsFunction, 30, 10)],
+      [error(diag.wrongNumberOfTypeArgumentsFunction, 30, 10)],
     );
   }
 
@@ -184,13 +184,7 @@
   (1 == 2 ? foo : bar)<int>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongNumberOfTypeArgumentsAnonymousFunction,
-          80,
-          5,
-        ),
-      ],
+      [error(diag.wrongNumberOfTypeArgumentsAnonymousFunction, 80, 5)],
     );
   }
 
@@ -201,13 +195,7 @@
   (1 == 2 ? foo : bar)<int, String>;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.disallowedTypeInstantiationExpression,
-          57,
-          20,
-        ),
-      ],
+      [error(diag.disallowedTypeInstantiationExpression, 57, 20)],
     );
   }
 
@@ -221,7 +209,7 @@
 @A<int>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 28, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 28, 5)],
     );
   }
 
@@ -237,7 +225,7 @@
 @B<int>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 44, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 44, 5)],
     );
   }
 
@@ -251,7 +239,7 @@
 @A<int>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 34, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 34, 5)],
     );
   }
 
@@ -267,7 +255,7 @@
 @B<int>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 50, 5)],
+      [error(diag.wrongNumberOfTypeArguments, 50, 5)],
     );
   }
 
@@ -281,7 +269,7 @@
 @A<int, String>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 31, 13)],
+      [error(diag.wrongNumberOfTypeArguments, 31, 13)],
     );
   }
 
@@ -297,7 +285,7 @@
 @B<int, String>()
 void f() {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 47, 13)],
+      [error(diag.wrongNumberOfTypeArguments, 47, 13)],
     );
   }
 
@@ -311,7 +299,7 @@
   void g<T, U>() {}
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 19, 5)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 19, 5)],
     );
   }
 
@@ -325,7 +313,7 @@
   void g<T>() {}
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 19, 13)],
+      [error(diag.wrongNumberOfTypeArgumentsMethod, 19, 13)],
     );
   }
 
@@ -338,7 +326,7 @@
   return new C<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 31, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 31, 6)],
     );
   }
 
@@ -351,7 +339,7 @@
   return new C<int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 37, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 37, 6)],
     );
   }
 
@@ -364,7 +352,7 @@
   return new C<int, int>();
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 34, 11)],
+      [error(diag.wrongNumberOfTypeArguments, 34, 11)],
     );
   }
 
@@ -382,7 +370,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 79, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 79, 6)],
     );
   }
 
@@ -400,7 +388,7 @@
   }
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 73, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 73, 6)],
     );
   }
 
@@ -414,7 +402,7 @@
   a.element.anyGetterExistsInDynamic;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 38, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 38, 6)],
     );
   }
 
@@ -428,7 +416,7 @@
   a.element.anyGetterExistsInDynamic;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 35, 11)],
+      [error(diag.wrongNumberOfTypeArguments, 35, 11)],
     );
   }
 
@@ -439,7 +427,7 @@
   late T<int> f;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 20, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 20, 6)],
     );
   }
 
@@ -452,7 +440,7 @@
   return p is C<A>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 49, 4)],
+      [error(diag.wrongNumberOfTypeArguments, 49, 4)],
     );
   }
 
@@ -465,7 +453,7 @@
   return p is C<A, A>;
 }
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 46, 7)],
+      [error(diag.wrongNumberOfTypeArguments, 46, 7)],
     );
   }
 }
@@ -480,7 +468,7 @@
 
 void f(A<int> a) {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 36, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 36, 6)],
     );
 
     var node = findNode.namedType('A<int>');
@@ -507,7 +495,7 @@
 
 void f(A<int> a) {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 42, 6)],
+      [error(diag.wrongNumberOfTypeArguments, 42, 6)],
     );
 
     var node = findNode.namedType('A<int>');
@@ -534,7 +522,7 @@
 
 void f(A<int, String> a) {}
 ''',
-      [error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 39, 14)],
+      [error(diag.wrongNumberOfTypeArguments, 39, 14)],
     );
 
     var node = findNode.namedType('A<int, String>');
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 4f45830..f5dcbcd 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
@@ -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:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -23,13 +23,7 @@
 class A<X> {}
 class B<X> extends A<F<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 55, 1)],
     );
   }
 
@@ -50,13 +44,7 @@
 class A<X> {}
 class B<X> extends A<F2<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          90,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 90, 1)],
     );
   }
 
@@ -76,13 +64,7 @@
 class A<X> {}
 class B<X> extends A<F2<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          90,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 90, 1)],
     );
   }
 
@@ -100,13 +82,7 @@
 class A<X> {}
 class B<X> implements A<F<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 55, 1)],
     );
   }
 
@@ -132,13 +108,7 @@
 mixin A<X> {}
 class B<X> extends Object with A<F<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 55, 1)],
     );
   }
 
@@ -165,13 +135,7 @@
 mixin M {}
 class B<X> = A<F<X>> with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          63,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 63, 1)],
     );
   }
 
@@ -183,13 +147,7 @@
 mixin M {}
 class B<X> = A<F<X>> with M;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          66,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 66, 1)],
     );
   }
 
@@ -218,13 +176,7 @@
 mixin M {}
 class B<X> = Object with M implements A<F<X>>;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          66,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 66, 1)],
     );
   }
 
@@ -252,13 +204,7 @@
 mixin M<X> {}
 class B<X> = Object with M<F<X>>;
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 55, 1)],
     );
   }
 
@@ -286,13 +232,7 @@
   v
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          54,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 54, 1)],
     );
   }
 
@@ -324,13 +264,7 @@
   v
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          54,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 54, 1)],
     );
   }
 
@@ -360,13 +294,7 @@
 extension type B<T>(A<void Function(Object?)> it)
   implements A<void Function(T)> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          31,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 31, 1)],
     );
   }
 
@@ -385,13 +313,7 @@
 extension type B<T>(A<Never Function(Object?)> it)
   implements A<T Function(T)> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          31,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 31, 1)],
     );
   }
 
@@ -402,13 +324,7 @@
 class A<X> {}
 mixin B<X> implements A<F<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 55, 1)],
     );
   }
 
@@ -434,13 +350,7 @@
 class A<X> {}
 mixin B<X> on A<F<X>> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          55,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 55, 1)],
     );
   }
 
@@ -465,13 +375,7 @@
 class A<X> {}
 class B<X> extends A<void Function<Y extends X>()> {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.wrongTypeParameterVarianceInSuperinterface,
-          22,
-          1,
-        ),
-      ],
+      [error(diag.wrongTypeParameterVarianceInSuperinterface, 22, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/yield_each_in_non_generator_test.dart b/pkg/analyzer/test/src/diagnostics/yield_each_in_non_generator_test.dart
index 84974af..e9f5bd5 100644
--- a/pkg/analyzer/test/src/diagnostics/yield_each_in_non_generator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/yield_each_in_non_generator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   yield* 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachInNonGenerator, 14, 9)],
+      [error(diag.yieldEachInNonGenerator, 14, 9)],
     );
   }
 
@@ -38,7 +38,7 @@
   yield* 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachInNonGenerator, 0, 0)],
+      [error(diag.yieldEachInNonGenerator, 0, 0)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/yield_in_non_generator_test.dart b/pkg/analyzer/test/src/diagnostics/yield_in_non_generator_test.dart
index eac09df..6085cc1 100644
--- a/pkg/analyzer/test/src/diagnostics/yield_in_non_generator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/yield_in_non_generator_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -22,7 +22,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldInNonGenerator, 14, 8)],
+      [error(diag.yieldInNonGenerator, 14, 8)],
     );
   }
 
@@ -46,7 +46,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldInNonGenerator, 0, 0)],
+      [error(diag.yieldInNonGenerator, 0, 0)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
index cfeeb7f..23d6653 100644
--- a/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/yield_of_invalid_type_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.
 
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/context_collection_resolution.dart';
@@ -31,7 +31,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 0, 3)],
+      [error(diag.illegalAsyncGeneratorReturnType, 0, 3)],
     );
   }
 
@@ -50,7 +50,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalAsyncGeneratorReturnType, 0, 13)],
+      [error(diag.illegalAsyncGeneratorReturnType, 0, 13)],
     );
   }
 
@@ -77,7 +77,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldOfInvalidType, 36, 1)],
+      [error(diag.yieldOfInvalidType, 36, 1)],
     );
   }
 
@@ -91,7 +91,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.yieldOfInvalidType, 99, 1)],
+      [error(diag.yieldOfInvalidType, 99, 1)],
     );
   }
 
@@ -110,7 +110,7 @@
   yield null;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldOfInvalidType, 33, 4)],
+      [error(diag.yieldOfInvalidType, 33, 4)],
     );
   }
 
@@ -129,7 +129,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 0, 3)],
+      [error(diag.illegalSyncGeneratorReturnType, 0, 3)],
     );
   }
 
@@ -164,7 +164,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldOfInvalidType, 37, 1)],
+      [error(diag.yieldOfInvalidType, 37, 1)],
     );
   }
 
@@ -178,7 +178,7 @@
   };
 }
 ''',
-      [error(CompileTimeErrorCode.yieldOfInvalidType, 100, 1)],
+      [error(diag.yieldOfInvalidType, 100, 1)],
     );
   }
 
@@ -189,7 +189,7 @@
   yield 0;
 }
 ''',
-      [error(CompileTimeErrorCode.illegalSyncGeneratorReturnType, 0, 11)],
+      [error(diag.illegalSyncGeneratorReturnType, 0, 11)],
     );
   }
 
@@ -238,7 +238,7 @@
   yield* 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 22, 1)],
+      [error(diag.yieldEachOfInvalidType, 22, 1)],
     );
   }
 
@@ -250,7 +250,7 @@
   yield* a;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 41, 1)],
+      [error(diag.yieldEachOfInvalidType, 41, 1)],
     );
   }
 
@@ -262,7 +262,7 @@
   yield* a;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 53, 1)],
+      [error(diag.yieldEachOfInvalidType, 53, 1)],
     );
   }
 
@@ -274,7 +274,7 @@
   yield* a;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 56, 1)],
+      [error(diag.yieldEachOfInvalidType, 56, 1)],
     );
   }
 
@@ -297,7 +297,7 @@
 
 Stream g() => throw 0;
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 34, 3)],
+      [error(diag.yieldEachOfInvalidType, 34, 3)],
     );
   }
 
@@ -330,7 +330,7 @@
 
 Stream<String> g() => throw 0;
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 34, 3)],
+      [error(diag.yieldEachOfInvalidType, 34, 3)],
     );
   }
 
@@ -371,7 +371,7 @@
   yield* 0;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 21, 1)],
+      [error(diag.yieldEachOfInvalidType, 21, 1)],
     );
   }
 
@@ -385,7 +385,7 @@
   f;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 41, 1)],
+      [error(diag.yieldEachOfInvalidType, 41, 1)],
     );
   }
 
@@ -408,7 +408,7 @@
 
 Iterable g() => throw 0;
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 35, 3)],
+      [error(diag.yieldEachOfInvalidType, 35, 3)],
     );
   }
 
@@ -441,7 +441,7 @@
 
 Iterable<String> g() => throw 0;
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 35, 3)],
+      [error(diag.yieldEachOfInvalidType, 35, 3)],
     );
   }
 }
@@ -456,7 +456,7 @@
   yield* a;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 31, 1)],
+      [error(diag.yieldEachOfInvalidType, 31, 1)],
     );
   }
 
@@ -467,7 +467,7 @@
   yield* a;
 }
 ''',
-      [error(CompileTimeErrorCode.yieldEachOfInvalidType, 30, 1)],
+      [error(diag.yieldEachOfInvalidType, 30, 1)],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/fasta/ast_builder_test.dart b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
index bb751d5..8fd97db 100644
--- a/pkg/analyzer/test/src/fasta/ast_builder_test.dart
+++ b/pkg/analyzer/test/src/fasta/ast_builder_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/node_text_expectations.dart';
@@ -22,9 +22,7 @@
 /// text
 abstract final base class A {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.abstractFinalBaseClass, 18, 10),
-    ]);
+    parseResult.assertErrors([error(diag.abstractFinalBaseClass, 18, 10)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -36,9 +34,11 @@
   baseKeyword: base
   finalKeyword: final
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -47,9 +47,7 @@
 /// text
 abstract final interface class A {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.abstractFinalInterfaceClass, 18, 15),
-    ]);
+    parseResult.assertErrors([error(diag.abstractFinalInterfaceClass, 18, 15)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -61,9 +59,11 @@
   interfaceKeyword: interface
   finalKeyword: final
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -72,9 +72,7 @@
 /// text
 abstract sealed class A {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.abstractSealedClass, 18, 6),
-    ]);
+    parseResult.assertErrors([error(diag.abstractSealedClass, 18, 6)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -85,9 +83,11 @@
   abstractKeyword: abstract
   sealedKeyword: sealed
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -106,9 +106,11 @@
       /// text
   baseKeyword: base
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -131,9 +133,11 @@
         offset: 0
   abstractKeyword: abstract @16
   classKeyword: class @25
-  name: A @31
-  leftBracket: { @33
-  rightBracket: } @34
+  namePart: NameWithTypeParameters
+    typeName: A @31
+  body: BlockClassBody
+    leftBracket: { @33
+    rightBracket: } @34
 ''', withOffsets: true);
   }
 
@@ -172,9 +176,11 @@
         token: Annotation @46
   abstractKeyword: abstract @57
   classKeyword: class @66
-  name: A @72
-  leftBracket: { @74
-  rightBracket: } @75
+  namePart: NameWithTypeParameters
+    typeName: A @72
+  body: BlockClassBody
+    leftBracket: { @74
+    rightBracket: } @75
 ''', withOffsets: true);
   }
 
@@ -244,9 +250,11 @@
         token: Annotation @46
   abstractKeyword: abstract @249
   classKeyword: class @258
-  name: A @264
-  leftBracket: { @266
-  rightBracket: } @267
+  namePart: NameWithTypeParameters
+    typeName: A @264
+  body: BlockClassBody
+    leftBracket: { @266
+    rightBracket: } @267
 ''', withOffsets: true);
   }
 
@@ -261,7 +269,7 @@
     var node = parseResult.findNode.constructor('A.named()');
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   period: .
   name: named
@@ -284,7 +292,7 @@
     var node = parseResult.findNode.constructor('A()');
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -298,17 +306,17 @@
     var parseResult = parseStringWithErrors(r'''
 class C extends (int, int) {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeExtends, 16, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeExtends, 16, 10)]);
 
     var node = parseResult.findNode.classDeclaration('class C');
     assertParsedNodeText(node, r'''
 ClassDeclaration
   classKeyword: class @0
-  name: C @6
-  leftBracket: { @27
-  rightBracket: } @28
+  namePart: NameWithTypeParameters
+    typeName: C @6
+  body: BlockClassBody
+    leftBracket: { @27
+    rightBracket: } @28
 ''', withOffsets: true);
   }
 
@@ -327,9 +335,11 @@
       /// text
   finalKeyword: final
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -337,7 +347,7 @@
     var parseResult = parseStringWithErrors(r'''
 final mixin class A {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.finalMixinClass, 0, 5)]);
+    parseResult.assertErrors([error(diag.finalMixinClass, 0, 5)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -345,9 +355,11 @@
   finalKeyword: final
   mixinKeyword: mixin
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -355,15 +367,14 @@
     var parseResult = parseStringWithErrors(r'''
 class C implements A, (int, int), B {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeImplements, 22, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeImplements, 22, 10)]);
 
     var node = parseResult.findNode.classDeclaration('class C');
     assertParsedNodeText(node, r'''
 ClassDeclaration
   classKeyword: class @0
-  name: C @6
+  namePart: NameWithTypeParameters
+    typeName: C @6
   implementsClause: ImplementsClause
     implementsKeyword: implements @8
     interfaces
@@ -371,8 +382,9 @@
         name: A @19
       NamedType
         name: B @34
-  leftBracket: { @36
-  rightBracket: } @37
+  body: BlockClassBody
+    leftBracket: { @36
+    rightBracket: } @37
 ''', withOffsets: true);
   }
 
@@ -391,9 +403,11 @@
       /// text
   interfaceKeyword: interface
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -401,9 +415,7 @@
     var parseResult = parseStringWithErrors(r'''
 interface mixin class A {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.interfaceMixinClass, 0, 9),
-    ]);
+    parseResult.assertErrors([error(diag.interfaceMixinClass, 0, 9)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -411,9 +423,11 @@
   interfaceKeyword: interface
   mixinKeyword: mixin
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -432,9 +446,11 @@
       /// text
   mixinKeyword: mixin
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -453,9 +469,11 @@
       /// text
   sealedKeyword: sealed
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -464,9 +482,7 @@
 /// text
 sealed abstract class A {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.abstractSealedClass, 9, 6),
-    ]);
+    parseResult.assertErrors([error(diag.abstractSealedClass, 9, 6)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -477,9 +493,11 @@
   abstractKeyword: abstract
   sealedKeyword: sealed
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -487,7 +505,7 @@
     var parseResult = parseStringWithErrors(r'''
 sealed mixin class A {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.sealedMixinClass, 0, 6)]);
+    parseResult.assertErrors([error(diag.sealedMixinClass, 0, 6)]);
 
     var node = parseResult.findNode.classDeclaration('class A {}');
     assertParsedNodeText(node, r'''
@@ -495,9 +513,11 @@
   sealedKeyword: sealed
   mixinKeyword: mixin
   classKeyword: class
-  name: A
-  leftBracket: {
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: A
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -505,15 +525,14 @@
     var parseResult = parseStringWithErrors(r'''
 class C with A, (int, int), B {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeWith, 16, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeWith, 16, 10)]);
 
     var node = parseResult.findNode.classDeclaration('class C');
     assertParsedNodeText(node, r'''
 ClassDeclaration
   classKeyword: class
-  name: C
+  namePart: NameWithTypeParameters
+    typeName: C
   withClause: WithClause
     withKeyword: with
     mixinTypes
@@ -521,8 +540,9 @@
         name: A
       NamedType
         name: B
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -559,9 +579,7 @@
     var parseResult = parseStringWithErrors(r'''
 class C = A Function() with M;
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeExtends, 10, 12),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeExtends, 10, 12)]);
     var node = parseResult.findNode.classTypeAlias('class');
     assertParsedNodeText(node, r'''
 ClassTypeAlias
@@ -642,9 +660,7 @@
 class C = Object with M implements A, (int, int), B;
 mixin M {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeImplements, 38, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeImplements, 38, 10)]);
 
     var node = parseResult.findNode.classTypeAlias('class C');
     assertParsedNodeText(node, r'''
@@ -732,9 +748,7 @@
     var parseResult = parseStringWithErrors(r'''
 class C = Object with A, (int, int), B;
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeWith, 25, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeWith, 25, 10)]);
 
     var node = parseResult.findNode.classTypeAlias('class C');
     assertParsedNodeText(node, r'''
@@ -755,8 +769,9 @@
 ''', withOffsets: true);
   }
 
-  void test_constructor_factory_misnamed() {
+  void test_constructor_factory_misnamed_withoutPrimaryConstructors() {
     var parseResult = parseStringWithErrors(r'''
+// @dart = 3.10
 class A {
   factory B() => null;
 }
@@ -767,7 +782,7 @@
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
   factoryKeyword: factory
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
   parameters: FormalParameterList
     leftParenthesis: (
@@ -787,14 +802,14 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.missingAssignableSelector, 18, 7),
-      error(ParserErrorCode.invalidInitializer, 18, 11),
+      error(diag.missingAssignableSelector, 18, 7),
+      error(diag.invalidInitializer, 18, 11),
     ]);
 
     var node = parseResult.findNode.constructor('A()');
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: A
   parameters: FormalParameterList
     leftParenthesis: (
@@ -825,7 +840,7 @@
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
   constKeyword: const
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
   parameters: FormalParameterList
     leftParenthesis: (
@@ -855,14 +870,12 @@
   B() : super();
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.invalidConstructorName, 12, 1),
-    ]);
+    parseResult.assertErrors([error(diag.invalidConstructorName, 12, 1)]);
 
     var node = parseResult.findNode.constructor('B()');
     assertParsedNodeText(node, r'''
 ConstructorDeclaration
-  returnType: SimpleIdentifier
+  typeName: SimpleIdentifier
     token: B
   parameters: FormalParameterList
     leftParenthesis: (
@@ -926,18 +939,20 @@
     var parseResult = parseStringWithErrors(r'''
 base enum E { v }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.baseEnum, 0, 4)]);
+    parseResult.assertErrors([error(diag.baseEnum, 0, 4)]);
 
     var node = parseResult.findNode.enumDeclaration('enum E');
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -948,8 +963,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.missingIdentifier, 14, 1),
-      error(ParserErrorCode.expectedToken, 14, 1),
+      error(diag.missingIdentifier, 14, 1),
+      error(diag.expectedToken, 14, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v.');
@@ -973,7 +988,7 @@
   v.named;
 }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 13, 5)]);
+    parseResult.assertErrors([error(diag.expectedToken, 13, 5)]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v.');
     assertParsedNodeText(node, r'''
@@ -997,8 +1012,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.expectedToken, 13, 1),
-      error(ParserErrorCode.missingIdentifier, 13, 1),
+      error(diag.expectedToken, 13, 1),
+      error(diag.missingIdentifier, 13, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v.');
@@ -1023,8 +1038,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.missingIdentifier, 19, 1),
-      error(ParserErrorCode.expectedToken, 19, 1),
+      error(diag.missingIdentifier, 19, 1),
+      error(diag.expectedToken, 19, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v<int>.');
@@ -1055,8 +1070,8 @@
 }
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.missingIdentifier, 18, 1),
-      error(ParserErrorCode.expectedToken, 18, 1),
+      error(diag.missingIdentifier, 18, 1),
+      error(diag.expectedToken, 18, 1),
     ]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v<int>');
@@ -1086,7 +1101,7 @@
   v<int>;
 }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 19, 1)]);
+    parseResult.assertErrors([error(diag.expectedToken, 19, 1)]);
 
     var node = parseResult.findNode.enumConstantDeclaration('v<int>');
     assertParsedNodeText(node, r'''
@@ -1109,18 +1124,20 @@
     var parseResult = parseStringWithErrors(r'''
 final enum E { v }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.finalEnum, 0, 5)]);
+    parseResult.assertErrors([error(diag.finalEnum, 0, 5)]);
 
     var node = parseResult.findNode.enumDeclaration('enum E');
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -1128,18 +1145,20 @@
     var parseResult = parseStringWithErrors(r'''
 interface enum E { v }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.interfaceEnum, 0, 9)]);
+    parseResult.assertErrors([error(diag.interfaceEnum, 0, 9)]);
 
     var node = parseResult.findNode.enumDeclaration('enum E');
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -1147,18 +1166,20 @@
     var parseResult = parseStringWithErrors(r'''
 sealed enum E { v }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.sealedEnum, 0, 6)]);
+    parseResult.assertErrors([error(diag.sealedEnum, 0, 6)]);
 
     var node = parseResult.findNode.enumDeclaration('enum E');
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -1174,12 +1195,14 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    rightBracket: }
 ''');
   }
 
@@ -1195,13 +1218,15 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: E
-  leftBracket: {
-  constants
-    EnumConstantDeclaration
-      name: v
-  semicolon: ;
-  rightBracket: }
+  namePart: NameWithTypeParameters
+    typeName: E
+  body: EnumBody
+    leftBracket: {
+    constants
+      EnumConstantDeclaration
+        name: v
+    semicolon: ;
+    rightBracket: }
 ''');
   }
 
@@ -1228,8 +1253,9 @@
           type: NamedType
             name: int @21
       rightParenthesis: ) @24
-  leftBracket: { @26
-  rightBracket: } @27
+  body: BlockClassBody
+    leftBracket: { @26
+    rightBracket: } @27
 ''', withOffsets: true);
   }
 
@@ -1239,9 +1265,7 @@
   get A => 0;
 }
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.memberWithClassName, 16, 1),
-    ]);
+    parseResult.assertErrors([error(diag.memberWithClassName, 16, 1)]);
 
     var node = parseResult.findNode.methodDeclaration('get A');
     assertParsedNodeText(node, r'''
@@ -1308,8 +1332,9 @@
   baseKeyword: base
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -1317,15 +1342,16 @@
     var parseResult = parseStringWithErrors(r'''
 final mixin M {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.finalMixin, 0, 5)]);
+    parseResult.assertErrors([error(diag.finalMixin, 0, 5)]);
 
     var node = parseResult.findNode.mixinDeclaration('mixin M');
     assertParsedNodeText(node, r'''
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -1334,9 +1360,7 @@
 class C {}
 mixin M on C implements A, (int, int), B {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeImplements, 38, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeImplements, 38, 10)]);
 
     var node = parseResult.findNode.mixinDeclaration('mixin M');
     assertParsedNodeText(node, r'''
@@ -1355,8 +1379,9 @@
         name: A @35
       NamedType
         name: B @50
-  leftBracket: { @52
-  rightBracket: } @53
+  body: BlockClassBody
+    leftBracket: { @52
+    rightBracket: } @53
 ''', withOffsets: true);
   }
 
@@ -1364,15 +1389,16 @@
     var parseResult = parseStringWithErrors(r'''
 interface mixin M {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.interfaceMixin, 0, 9)]);
+    parseResult.assertErrors([error(diag.interfaceMixin, 0, 9)]);
 
     var node = parseResult.findNode.mixinDeclaration('mixin M');
     assertParsedNodeText(node, r'''
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -1380,9 +1406,7 @@
     var parseResult = parseStringWithErrors(r'''
 mixin M on A, (int, int), B {}
 ''');
-    parseResult.assertErrors([
-      error(ParserErrorCode.expectedNamedTypeOn, 14, 10),
-    ]);
+    parseResult.assertErrors([error(diag.expectedNamedTypeOn, 14, 10)]);
 
     var node = parseResult.findNode.mixinDeclaration('mixin M');
     assertParsedNodeText(node, r'''
@@ -1396,8 +1420,9 @@
         name: A @11
       NamedType
         name: B @26
-  leftBracket: { @28
-  rightBracket: } @29
+  body: BlockClassBody
+    leftBracket: { @28
+    rightBracket: } @29
 ''', withOffsets: true);
   }
 
@@ -1405,15 +1430,16 @@
     var parseResult = parseStringWithErrors(r'''
 sealed mixin M {}
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.sealedMixin, 0, 6)]);
+    parseResult.assertErrors([error(diag.sealedMixin, 0, 6)]);
 
     var node = parseResult.findNode.mixinDeclaration('mixin M');
     assertParsedNodeText(node, r'''
 MixinDeclaration
   mixinKeyword: mixin
   name: M
-  leftBracket: {
-  rightBracket: }
+  body: BlockClassBody
+    leftBracket: {
+    rightBracket: }
 ''');
   }
 
@@ -1648,7 +1674,7 @@
 void f((int) r) {}
 ''');
     parseResult.assertErrors([
-      error(ParserErrorCode.recordTypeOnePositionalNoTrailingComma, 11, 1),
+      error(diag.recordTypeOnePositionalNoTrailingComma, 11, 1),
     ]);
 
     var node = parseResult.findNode.recordTypeAnnotation('(int');
@@ -1749,7 +1775,7 @@
   }
 }
 ''');
-    parseResult.assertErrors([error(ParserErrorCode.expectedToken, 72, 1)]);
+    parseResult.assertErrors([error(diag.expectedToken, 72, 1)]);
 
     var node = parseResult.findNode.switchCase('case');
     assertParsedNodeText(node, r'''
diff --git a/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart b/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
index bfb1ab7..96c2f57 100644
--- a/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'recovery_test_support.dart';
@@ -28,7 +28,7 @@
       '''
 class A implements B extends C {}
 ''',
-      [ParserErrorCode.implementsBeforeExtends],
+      [diag.implementsBeforeExtends],
       '''
 class A extends C implements B {}
 ''',
@@ -40,7 +40,7 @@
       '''
 class A extends B implements C with D {}
 ''',
-      [ParserErrorCode.implementsBeforeWith],
+      [diag.implementsBeforeWith],
       '''
 class A extends B with D implements C {}
 ''',
@@ -52,7 +52,7 @@
       '''
 class A implements B with C extends D {}
 ''',
-      [ParserErrorCode.implementsBeforeWith, ParserErrorCode.withBeforeExtends],
+      [diag.implementsBeforeWith, diag.withBeforeExtends],
       '''
 class A extends D with C implements B {}
 ''',
@@ -64,7 +64,7 @@
       '''
 class A extends B extends C {}
 ''',
-      [ParserErrorCode.multipleExtendsClauses],
+      [diag.multipleExtendsClauses],
       '''
 class A extends B {}
 ''',
@@ -76,7 +76,7 @@
       '''
 class A implements B implements C, D {}
 ''',
-      [ParserErrorCode.multipleImplementsClauses],
+      [diag.multipleImplementsClauses],
       '''
 class A implements B, C, D {}
 ''',
@@ -88,7 +88,7 @@
       '''
 class A extends B with C, D with E {}
 ''',
-      [ParserErrorCode.multipleWithClauses],
+      [diag.multipleWithClauses],
       '''
 class A extends B with C, D, E {}
 ''',
@@ -102,7 +102,7 @@
 class Foo exte
 class UnrelatedClass extends Bar {}
 ''',
-      [ParserErrorCode.multipleWithClauses],
+      [diag.multipleWithClauses],
       '''
 class Foo {}
 class UnrelatedClass extends Bar {}
@@ -116,7 +116,7 @@
 class Foo extends CurrentlyTypingHere
 class UnrelatedClass extends Bar {}
 ''',
-      [ParserErrorCode.expectedClassBody],
+      [diag.expectedClassBody],
       '''
 class Foo extends CurrentlyTypingHere {}
 class UnrelatedClass extends Bar {}
@@ -129,7 +129,7 @@
       '''
 class A with B extends C {}
 ''',
-      [ParserErrorCode.withBeforeExtends],
+      [diag.withBeforeExtends],
       '''
 class A extends C with B {}
 ''',
@@ -147,7 +147,7 @@
 class C { }
 export 'bar.dart';
 ''',
-      [ParserErrorCode.directiveAfterDeclaration],
+      [diag.directiveAfterDeclaration],
       '''
 export 'bar.dart';
 class C { }
@@ -161,7 +161,7 @@
 class C { }
 import 'bar.dart';
 ''',
-      [ParserErrorCode.directiveAfterDeclaration],
+      [diag.directiveAfterDeclaration],
       '''
 import 'bar.dart';
 class C { }
@@ -175,7 +175,7 @@
 class C { }
 part 'bar.dart';
 ''',
-      [ParserErrorCode.directiveAfterDeclaration],
+      [diag.directiveAfterDeclaration],
       '''
 part 'bar.dart';
 class C { }
@@ -189,7 +189,7 @@
 class C { }
 part of foo;
 ''',
-      [ParserErrorCode.directiveAfterDeclaration],
+      [diag.directiveAfterDeclaration],
       '''
 part of foo;
 class C { }
@@ -203,7 +203,7 @@
 export 'bar.dart';
 library l;
 ''',
-      [ParserErrorCode.libraryDirectiveNotFirst],
+      [diag.libraryDirectiveNotFirst],
       '''
 library l;
 export 'bar.dart';
@@ -218,7 +218,7 @@
 import 'bar.dart';
 library l;
 ''',
-      [ParserErrorCode.libraryDirectiveNotFirst],
+      [diag.libraryDirectiveNotFirst],
       '''
 library l;
 import 'bar.dart';
@@ -233,7 +233,7 @@
 part 'foo.dart';
 library l;
 ''',
-      [ParserErrorCode.libraryDirectiveNotFirst],
+      [diag.libraryDirectiveNotFirst],
       '''
 library l;
 part 'foo.dart';
@@ -266,7 +266,7 @@
       '''
 import 'bar.dart' show A as p show B;
 ''',
-      [ParserErrorCode.prefixAfterCombinator],
+      [diag.prefixAfterCombinator],
       '''
 import 'bar.dart' as p show A show B;
 ''',
@@ -278,7 +278,7 @@
       '''
 import 'bar.dart' show A as p;
 ''',
-      [ParserErrorCode.prefixAfterCombinator],
+      [diag.prefixAfterCombinator],
       '''
 import 'bar.dart' as p show A;
 ''',
@@ -290,7 +290,7 @@
       '''
 import 'bar.dart' deferred show A as p;
 ''',
-      [ParserErrorCode.prefixAfterCombinator],
+      [diag.prefixAfterCombinator],
       '''
 import 'bar.dart' deferred as p show A;
 ''',
@@ -302,7 +302,7 @@
       '''
 import 'bar.dart' as p deferred;
 ''',
-      [ParserErrorCode.deferredAfterPrefix],
+      [diag.deferredAfterPrefix],
       '''
 import 'bar.dart' deferred as p;
 ''',
@@ -314,7 +314,7 @@
       '''
 import 'bar.dart' as p as q;
 ''',
-      [ParserErrorCode.duplicatePrefix],
+      [diag.duplicatePrefix],
       '''
 import 'bar.dart' as p;
 ''',
@@ -326,7 +326,7 @@
       '''
 import 'bar.dart' as p sh;
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 import 'bar.dart' as p;
 ''',
@@ -338,7 +338,7 @@
       '''
 import 'bar.dart' d as p;
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 import 'bar.dart' as p;
 ''',
@@ -351,11 +351,7 @@
 import 'bar.dart' d show A as p
 import 'b.dart';
 ''',
-      [
-        ParserErrorCode.unexpectedToken,
-        ParserErrorCode.prefixAfterCombinator,
-        ParserErrorCode.expectedToken,
-      ],
+      [diag.unexpectedToken, diag.prefixAfterCombinator, diag.expectedToken],
       '''
 import 'bar.dart' as p show A;
 import 'b.dart';
@@ -368,7 +364,7 @@
       '''
 import 'bar.dart' deferred s as p;
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 import 'bar.dart' deferred as p;
 ''',
@@ -393,7 +389,7 @@
   dynamic @A(const A()) x;
 }
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 class A {
   const A([x]);
@@ -415,7 +411,7 @@
       '''
 mixin A implements B on C {}
 ''',
-      [ParserErrorCode.implementsBeforeOn],
+      [diag.implementsBeforeOn],
       '''
 mixin A on C implements B {}
 ''',
@@ -427,7 +423,7 @@
       '''
 mixin A implements B implements C, D {}
 ''',
-      [ParserErrorCode.multipleImplementsClauses],
+      [diag.multipleImplementsClauses],
       '''
 mixin A implements B, C, D {}
 ''',
@@ -439,7 +435,7 @@
       '''
 mixin A on B on C {}
 ''',
-      [ParserErrorCode.multipleOnClauses],
+      [diag.multipleOnClauses],
       '''
 mixin A on B, C {}
 ''',
@@ -453,7 +449,7 @@
 mixin Foo imple
 mixin UnrelatedMixin on Bar {}
 ''',
-      [ParserErrorCode.multipleWithClauses],
+      [diag.multipleWithClauses],
       '''
 mixin Foo {}
 mixin UnrelatedMixin on Bar {}
@@ -467,7 +463,7 @@
 mixin Foo implements CurrentlyTypingHere
 mixin UnrelatedMixin on Bar {}
 ''',
-      [ParserErrorCode.expectedMixinBody],
+      [diag.expectedMixinBody],
       '''
 mixin Foo implements CurrentlyTypingHere {}
 mixin UnrelatedMixin on Bar {}
diff --git a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
index ed14bc2..936dfda 100644
--- a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -35,7 +35,7 @@
   m() => new A<@annotation C>();
 }
 ''',
-      [ParserErrorCode.annotationOnTypeArgument],
+      [diag.annotationOnTypeArgument],
       '''
 const annotation = null;
 class A<E> {}
@@ -56,7 +56,7 @@
 class B = Object with A {}
 ''',
       // TODO(danrubel): Consolidate and improve error message.
-      [ParserErrorCode.expectedExecutable, ParserErrorCode.expectedToken],
+      [diag.expectedExecutable, diag.expectedToken],
       '''
 class B = Object with A;
 ''',
@@ -69,7 +69,7 @@
 ''';
     var unit = parseCompilationUnit(
       content,
-      codes: [ParserErrorCode.getterWithParameters],
+      codes: [diag.getterWithParameters],
     );
     validateTokenStream(unit.beginToken);
 
@@ -103,7 +103,7 @@
   while (1 < x < 3) {}
 }
 ''',
-      codes: [ParserErrorCode.equalityCannotBeEqualityOperand],
+      codes: [diag.equalityCannotBeEqualityOperand],
     );
   }
 
@@ -141,7 +141,7 @@
 mixin M {}
 mixin N with M {}
 ''',
-      [ParserErrorCode.mixinWithClause],
+      [diag.mixinWithClause],
       '''
 mixin M {}
 mixin N {}
@@ -181,7 +181,7 @@
   'c': () => new C(),
 };
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 class C {}
 final Map v = {
@@ -202,7 +202,7 @@
       '''
 static class A {}
 ''',
-      [ParserErrorCode.extraneousModifier],
+      [diag.extraneousModifier],
       '''
 class A {}
 ''',
@@ -215,7 +215,7 @@
 main() {}
 const int get foo => 499;
 ''',
-      [ParserErrorCode.extraneousModifier],
+      [diag.extraneousModifier],
       '''
 main() {}
 int get foo => 499;
@@ -229,7 +229,7 @@
 main() {}
 const int foo() => 499;
 ''',
-      [ParserErrorCode.extraneousModifier],
+      [diag.extraneousModifier],
       '''
 main() {}
 int foo() => 499;
@@ -243,7 +243,7 @@
 main() {}
 const set foo(v) => 499;
 ''',
-      [ParserErrorCode.extraneousModifier],
+      [diag.extraneousModifier],
       '''
 main() {}
 set foo(v) => 499;
@@ -265,7 +265,7 @@
       '''
 String void bar() { }
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 String bar() { }
 ''',
@@ -287,7 +287,7 @@
   Foo() { }
 }
 ''',
-      [ParserErrorCode.unexpectedToken, ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken, diag.unexpectedToken],
       '''
 class A { }
 class B { }
@@ -305,7 +305,7 @@
   foo() {};
 }
 ''',
-      [ParserErrorCode.expectedClassMember],
+      [diag.expectedClassMember],
       '''
 class C {
   foo() {}
@@ -319,7 +319,7 @@
       '''
 foo() {};
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 foo() {}
 ''',
@@ -333,7 +333,7 @@
   ;foo() {}
 }
 ''',
-      [ParserErrorCode.expectedClassMember],
+      [diag.expectedClassMember],
       '''
 class C {
   foo() {}
@@ -350,7 +350,7 @@
       '''
 ;foo() {}
 ''',
-      [ParserErrorCode.expectedExecutable],
+      [diag.expectedExecutable],
       '''
 foo() {}
 ''',
@@ -365,7 +365,7 @@
   bar() {}
 }
 ''',
-      [ParserErrorCode.expectedClassMember],
+      [diag.expectedClassMember],
       '''
 class C {
   foo() {}
@@ -381,7 +381,7 @@
 foo() {};
 bar() {}
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 foo() {}
 bar() {}
@@ -398,7 +398,7 @@
       '''
 class A<in out X> {}
 ''',
-      [ParserErrorCode.multipleVarianceModifiers],
+      [diag.multipleVarianceModifiers],
       '''
 class A<in X> {}
 ''',
diff --git a/pkg/analyzer/test/src/fasta/recovery/invalid_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/invalid_code_test.dart
index cd6cff5..1f763a9 100644
--- a/pkg/analyzer/test/src/fasta/recovery/invalid_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/invalid_code_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'recovery_test_support.dart';
@@ -35,13 +35,11 @@
       '''
 const default = const Object();
 ''',
-      [ParserErrorCode.expectedIdentifierButGotKeyword],
+      [diag.expectedIdentifierButGotKeyword],
       '''
 const default = const Object();
 ''',
-      expectedDiagnosticsInValidCode: [
-        ParserErrorCode.expectedIdentifierButGotKeyword,
-      ],
+      expectedDiagnosticsInValidCode: [diag.expectedIdentifierButGotKeyword],
     );
   }
 
@@ -53,7 +51,7 @@
   return <g('')>[0, 1, 2];
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f() {
   return <g>[0, 1, 2];
@@ -70,7 +68,7 @@
   return <test('', (){})>[0, 1, 2];
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f() {
   return <test>[0, 1, 2];
@@ -90,7 +88,7 @@
   return <test('', (){});>[0, 1, 2];
 }
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 f() {
   return _s_ < test('', (){}); _s_ > [0, 1, 2];
@@ -107,16 +105,14 @@
   f(with: 3);
 }
 ''',
-      [ParserErrorCode.expectedIdentifierButGotKeyword],
+      [diag.expectedIdentifierButGotKeyword],
       '''
 f() {}
 g() {
   f(with: 3);
 }
 ''',
-      expectedDiagnosticsInValidCode: [
-        ParserErrorCode.expectedIdentifierButGotKeyword,
-      ],
+      expectedDiagnosticsInValidCode: [diag.expectedIdentifierButGotKeyword],
     );
   }
 
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 369f336..1a52f8c 100644
--- a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/missing_code_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'recovery_test_support.dart';
@@ -25,7 +25,7 @@
       '''
 f() => [a, , b];
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f() => [a, _s_, b];
 ''',
@@ -37,7 +37,7 @@
       '''
 f() => [a, b c];
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f() => [a, b, c];
 ''',
@@ -49,7 +49,7 @@
       '''
 f() => [a, if (x) b c];
 ''',
-      [ParserErrorCode.expectedElseOrComma],
+      [diag.expectedElseOrComma],
       '''
 f() => [a, if (x) b, c];
 ''',
@@ -61,7 +61,7 @@
       '''
 f() => [a, if (x) b else y c];
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f() => [a, if (x) b else y, c];
 ''',
@@ -77,7 +77,7 @@
       '''
 f() => {a: b, c: d e: f};
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f() => {a: b, c: d, e: f};
 ''',
@@ -89,7 +89,7 @@
       '''
 f() => {a: b, if (x) c: d e: f};
 ''',
-      [ParserErrorCode.expectedElseOrComma],
+      [diag.expectedElseOrComma],
       '''
 f() => {a: b, if (x) c: d, e: f};
 ''',
@@ -101,7 +101,7 @@
       '''
 f() => {a: b, if (x) c: d else y: z e: f};
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f() => {a: b, if (x) c: d else y: z, e: f};
 ''',
@@ -113,7 +113,7 @@
       '''
 f() => {: b};
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f() => {_s_: b};
 ''',
@@ -125,7 +125,7 @@
       '''
 f() => {a: };
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f() => {a: _s_};
 ''',
@@ -137,7 +137,7 @@
       '''
 f() => {a: , b: c};
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f() => {a: _s_, b: c};
 ''',
@@ -162,7 +162,7 @@
       '''
 convert(x) => as T;
 ''',
-      [ParserErrorCode.expectedTypeName],
+      [diag.expectedTypeName],
       '''
 convert(x) => _s_ as T;
 ''',
@@ -174,7 +174,7 @@
       '''
 convert(x) => x as ;
 ''',
-      [ParserErrorCode.expectedTypeName],
+      [diag.expectedTypeName],
       '''
 convert(x) => x as _s_;
 ''',
@@ -189,7 +189,7 @@
   x =
 }
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 f() {
   var x;
@@ -214,7 +214,7 @@
   x..
 }
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 f(x) {
   x.. _s_;
@@ -228,7 +228,7 @@
       '''
 class {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 class _s_ {}
 ''',
@@ -242,7 +242,7 @@
       '''
 import 'bar.dart' deferred;
 ''',
-      [ParserErrorCode.missingPrefixInDeferredImport],
+      [diag.missingPrefixInDeferredImport],
       '''
 import 'bar.dart' deferred as _s_;
 ''',
@@ -254,7 +254,7 @@
       '''
 f(int a int b) { }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(int a, int b) { }
 ''',
@@ -266,7 +266,7 @@
       '''
 f() => x ? y :
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 f() => x ? y : _s_;
 ''',
@@ -278,7 +278,7 @@
       '''
 f() => x ? : z
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 f() => x ? _s_ : z;
 ''',
@@ -298,7 +298,7 @@
       '''
 f(x) = x;
 ''',
-      [ParserErrorCode.missingFunctionBody],
+      [diag.missingFunctionBody],
       '''
 f(x) => x;
 ''',
@@ -310,7 +310,7 @@
       '''
 f(x) return x;
 ''',
-      [ParserErrorCode.missingFunctionBody],
+      [diag.missingFunctionBody],
       '''
 f(x) => x;
 ''',
@@ -359,7 +359,7 @@
       assert(true);
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 class Test {
   Test()
@@ -380,7 +380,7 @@
       x = 2;
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 class Test {
   Test()
@@ -401,7 +401,7 @@
       this.x = 2;
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 class Test {
   Test()
@@ -420,7 +420,7 @@
   }
 }
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f() {
   if (_s_ is String) {
@@ -437,7 +437,7 @@
   if (x is ) {}
 }
 ''',
-      [ParserErrorCode.expectedTypeName],
+      [diag.expectedTypeName],
       '''
 f(x) {
   if (x is _s_) {}
@@ -486,7 +486,7 @@
   int foo => 0;
 }
 ''',
-      [ParserErrorCode.missingGet],
+      [diag.missingGet],
       '''
 class Bar {
   int get foo => 0;
@@ -502,7 +502,7 @@
       '''
 int f int x, int y) {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 int f (int x, int y) {}
 ''',
@@ -516,7 +516,7 @@
       '''
 f(x) => x ?? throw 0;
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+      [diag.expectedToken, diag.expectedToken],
       '''
 f(x) => x ?? (throw 0);
 ''',
@@ -547,7 +547,7 @@
   v.
 }
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 f() {
   var v = 'String';
@@ -589,12 +589,12 @@
 }
 ''',
       [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ScannerErrorCode.unterminatedStringLiteral,
-        ScannerErrorCode.unterminatedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.unterminatedStringLiteral,
+        diag.unterminatedStringLiteral,
       ],
       r'''
 f() {
@@ -617,7 +617,7 @@
       '''
 f() => x $operator
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 f() => x $operator _s_;
 ''',
@@ -631,7 +631,7 @@
   int operator $operator(x) => super $operator
 }
 ''',
-      [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+      [diag.missingIdentifier, diag.expectedToken],
       '''
 class C {
   int operator $operator(x) => super $operator _s_;
@@ -651,7 +651,7 @@
       '''
 f({a, }) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f({a, _s_}) {}
 ''',
@@ -663,13 +663,13 @@
       '''
 f({a, , b}) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f({a, _s_, b}) {}
 ''',
       expectedDiagnosticsInValidCode: [
         // The synthesized identifier has a private name which isn't valid here.
-        ParserErrorCode.privateOptionalParameter,
+        diag.privateOptionalParameter,
       ],
     );
   }
@@ -680,7 +680,7 @@
       '''
 f([a, ]) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f([a, _s_]) {}
 ''',
@@ -692,7 +692,7 @@
       '''
 f([a, , b]) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f([a, _s_, b]) {}
 ''',
@@ -705,7 +705,7 @@
       '''
 f(a, ) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f(a, _s_) {}
 ''',
@@ -717,7 +717,7 @@
       '''
 f(a, , b) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f(a, _s_, b) {}
 ''',
@@ -732,7 +732,7 @@
   C(this);
 }
 ''',
-      [ParserErrorCode.expectedIdentifierButGotKeyword],
+      [diag.expectedIdentifierButGotKeyword],
       '''
 class C {
   int f;
@@ -750,7 +750,7 @@
   C(this, p);
 }
 ''',
-      [ParserErrorCode.expectedIdentifierButGotKeyword],
+      [diag.expectedIdentifierButGotKeyword],
       '''
 class C {
   int f;
@@ -768,7 +768,7 @@
   C(this.);
 }
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 class C {
   int f;
@@ -786,7 +786,7 @@
   C(this., p);
 }
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 class C {
   int f;
@@ -801,7 +801,7 @@
       '''
 f({a: 0) {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f({a: 0}) {}
 ''',
@@ -813,7 +813,7 @@
       '''
 f({a: 0]) {}
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+      [diag.expectedToken, diag.expectedToken],
       '''
 f({a: 0}) {}
 ''',
@@ -825,7 +825,7 @@
       '''
 f(a}) {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(a) {}
 ''',
@@ -837,7 +837,7 @@
       '''
 f(a]) {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(a) {}
 ''',
@@ -849,7 +849,7 @@
       '''
 f([a = 0}) {}
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+      [diag.expectedToken, diag.expectedToken],
       '''
 f([a = 0]) {}
 ''',
@@ -862,7 +862,7 @@
       '''
 f([a = 0) {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f([a = 0]) {}
 ''',
@@ -878,7 +878,7 @@
   g(v1 == v2 || v1 == v 3, true);
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 g(a, b, c) {}
 h(v1, v2, v) {
@@ -893,7 +893,7 @@
       '''
 f({a: }) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f({a: _s_}) {}
 ''',
@@ -905,7 +905,7 @@
       '''
 f({a: , b}) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f({a: _s_, b}) {}
 ''',
@@ -917,7 +917,7 @@
       '''
 f([a = ]) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f([a = _s_]) {}
 ''',
@@ -929,7 +929,7 @@
       '''
 f([a = , b]) {}
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 f([a = _s_, b]) {}
 ''',
@@ -942,7 +942,7 @@
       '''
 f([a = 0], {b: 1}) {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f([a = 0]) {}
 ''',
@@ -956,7 +956,7 @@
       '''
 f([a = 0], {b: 1}, [c = 2]) {}
 ''',
-      [ParserErrorCode.mixedParameterGroups],
+      [diag.mixedParameterGroups],
       '''
 f([a = 0, c = 2]) {}
 ''',
@@ -969,7 +969,7 @@
       '''
 f({a: 0}, {b: 1}) {}
 ''',
-      [ParserErrorCode.multipleNamedParameterGroups],
+      [diag.multipleNamedParameterGroups],
       '''
 f({a: 0, b: 1}) {}
 ''',
@@ -982,7 +982,7 @@
       '''
 f([a = 0], [b = 1]) {}
 ''',
-      [ParserErrorCode.multiplePositionalParameterGroups],
+      [diag.multiplePositionalParameterGroups],
       '''
 f([a = 0, b = 1]) {}
 ''',
@@ -995,7 +995,7 @@
       '''
 f(a: 0) {}
 ''',
-      [ParserErrorCode.namedParameterOutsideGroup],
+      [diag.namedParameterOutsideGroup],
       '''
 f({a: 0}) {}
 ''',
@@ -1008,7 +1008,7 @@
       '''
 f(a = 0) {}
 ''',
-      [ParserErrorCode.positionalParameterOutsideGroup],
+      [diag.positionalParameterOutsideGroup],
       '''
 f([a = 0]) {}
 ''',
@@ -1025,7 +1025,7 @@
       '''
 typedef Predicate = bool <E>(E element);
 ''',
-      [ParserErrorCode.missingIdentifier],
+      [diag.missingIdentifier],
       '''
 typedef Predicate = bool Function<E>(E element);
 ''',
diff --git a/pkg/analyzer/test/src/fasta/recovery/paired_tokens_test.dart b/pkg/analyzer/test/src/fasta/recovery/paired_tokens_test.dart
index d41ed0e..954218c7 100644
--- a/pkg/analyzer/test/src/fasta/recovery/paired_tokens_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/paired_tokens_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'recovery_test_support.dart';
@@ -26,7 +26,7 @@
       '''
 List<List<int>
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 List<List<int>> _s_;
 ''',
@@ -38,7 +38,7 @@
       '''
 List<List<int> f;
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 List<List<int>> f;
 ''',
@@ -51,7 +51,7 @@
       '''
 Map<List<int, List<String>>
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 Map<List<int>, List<String>> _s_;
 ''',
@@ -64,7 +64,7 @@
       '''
 Map<List<int, List<String>> f;
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 Map<List<int, List<String>>> f;
 ''',
@@ -76,7 +76,7 @@
       '''
 List<int double> f;
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 List<int, double> f;
 ''',
@@ -89,7 +89,7 @@
       '''
 List<int
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 List<int> _s_;
 ''',
@@ -101,7 +101,7 @@
       '''
 List<int f;
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 List<int> f;
 ''',
@@ -114,17 +114,17 @@
 f<T>>() => null;
 ''',
       [
-        ParserErrorCode.topLevelOperator,
-        ParserErrorCode.missingFunctionParameters,
-        ParserErrorCode.missingFunctionBody,
+        diag.topLevelOperator,
+        diag.missingFunctionParameters,
+        diag.missingFunctionBody,
       ],
       '''
 f<T> > () => null;
 ''',
       expectedDiagnosticsInValidCode: [
-        ParserErrorCode.topLevelOperator,
-        ParserErrorCode.missingFunctionParameters,
-        ParserErrorCode.missingFunctionBody,
+        diag.topLevelOperator,
+        diag.missingFunctionParameters,
+        diag.missingFunctionBody,
       ],
     );
   }
@@ -134,10 +134,7 @@
       '''
 f<T extends Function()() => null;
 ''',
-      [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingFunctionParameters,
-      ],
+      [diag.expectedToken, diag.missingFunctionParameters],
       '''
 f<T extends Function()>() => null;
 ''',
@@ -149,10 +146,7 @@
       '''
 f<T extends Function<X>()() => null;
 ''',
-      [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingFunctionParameters,
-      ],
+      [diag.expectedToken, diag.missingFunctionParameters],
       '''
 f<T extends Function<X>()>() => null;
 ''',
@@ -164,7 +158,7 @@
       '''
 f<T>=() => null;
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 f<T>() => null;
 ''',
@@ -176,7 +170,7 @@
       '''
 f<T extends List<int>>=() => null;
 ''',
-      [ParserErrorCode.unexpectedToken],
+      [diag.unexpectedToken],
       '''
 f<T extends List<int>>() => null;
 ''',
@@ -188,10 +182,7 @@
       '''
 f<T() => null;
 ''',
-      [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingFunctionParameters,
-      ],
+      [diag.expectedToken, diag.missingFunctionParameters],
       '''
 f<T>() => null;
 ''',
@@ -203,10 +194,7 @@
       '''
 f<T extends List<int>() => null;
 ''',
-      [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.missingFunctionParameters,
-      ],
+      [diag.expectedToken, diag.missingFunctionParameters],
       '''
 f<T extends List<int>>() => null;
 ''',
@@ -224,7 +212,7 @@
   if (x != null) {
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {
   if (x != null) {}
@@ -243,7 +231,7 @@
   while (x == null) {}
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {
   if (x != null) {}
@@ -261,7 +249,7 @@
 f(x) {
 class C {}
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {}
 class C {}
@@ -277,7 +265,7 @@
 f(x) {
 g(y) => y;
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {}
 g(y) => y;
@@ -290,7 +278,7 @@
       '''
 f(x) {
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {}
 ''',
@@ -305,7 +293,7 @@
 f(x) {
 int y = 0;
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {}
 int y = 0;
@@ -322,7 +310,7 @@
       '''
 f(x) => l[x
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+      [diag.expectedToken, diag.expectedToken],
       '''
 f(x) => l[x];
 ''',
@@ -334,7 +322,7 @@
       '''
 f(x) => l?[x
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+      [diag.expectedToken, diag.expectedToken],
       '''
 f(x) => l?[x];
 ''',
@@ -346,7 +334,7 @@
       '''
 var x = [[0], [1];
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 var x = [[0], [1]];
 ''',
@@ -358,7 +346,7 @@
       '''
 var x = [[0], [1, [2]];
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 var x = [[0], [1, [2]]];
 ''',
@@ -370,7 +358,7 @@
       '''
 var x = [0 1];
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 var x = [0, 1];
 ''',
@@ -382,7 +370,7 @@
       '''
 var x = [0, 1
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+      [diag.expectedToken, diag.expectedToken],
       '''
 var x = [0, 1];
 ''',
@@ -402,7 +390,7 @@
   if (x
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {
   if (x);
@@ -421,7 +409,7 @@
   while(x != null) {}
 }
 ''',
-      [ParserErrorCode.expectedToken],
+      [diag.expectedToken],
       '''
 f(x) {
   if (x);
@@ -438,7 +426,7 @@
 f(x
 class C {}
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+      [diag.expectedToken, diag.missingFunctionBody],
       '''
 f(x) {}
 class C {}
@@ -451,7 +439,7 @@
       '''
 f(x
 ''',
-      [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+      [diag.expectedToken, diag.missingFunctionBody],
       '''
 f(x) {}
 ''',
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/annotation_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/annotation_test.dart
index 9c6e1bd..cdae527 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/annotation_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/annotation_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,16 +16,16 @@
       TestDescriptor(
         'ampersand',
         '@',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedExecutable],
+        [diag.missingIdentifier, diag.expectedExecutable],
         '@_s_',
-        expectedDiagnosticsInValidCode: [ParserErrorCode.expectedExecutable],
+        expectedDiagnosticsInValidCode: [diag.expectedExecutable],
       ),
       TestDescriptor(
         'leftParen',
         '@a(',
-        [ParserErrorCode.expectedToken, ParserErrorCode.expectedExecutable],
+        [diag.expectedToken, diag.expectedExecutable],
         '@a()',
-        expectedDiagnosticsInValidCode: [ParserErrorCode.expectedExecutable],
+        expectedDiagnosticsInValidCode: [diag.expectedExecutable],
       ),
     ], []);
     buildTests(
@@ -34,14 +34,14 @@
         TestDescriptor(
           'ampersand',
           '@',
-          [ParserErrorCode.missingIdentifier],
+          [diag.missingIdentifier],
           '@_s_',
           failing: ['typedef', 'functionNonVoid', 'getter', 'mixin', 'setter'],
         ),
         TestDescriptor(
           'leftParen',
           '@a(',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           '@a()',
           allFailing: true,
         ),
@@ -56,19 +56,16 @@
         TestDescriptor(
           'ampersand',
           '@',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedClassMember,
-          ],
+          [diag.missingIdentifier, diag.expectedClassMember],
           '@_s_',
-          expectedDiagnosticsInValidCode: [ParserErrorCode.expectedClassMember],
+          expectedDiagnosticsInValidCode: [diag.expectedClassMember],
         ),
         TestDescriptor(
           'leftParen',
           '@a(',
-          [ParserErrorCode.expectedToken, ParserErrorCode.expectedClassMember],
+          [diag.expectedToken, diag.expectedClassMember],
           '@a()',
-          expectedDiagnosticsInValidCode: [ParserErrorCode.expectedClassMember],
+          expectedDiagnosticsInValidCode: [diag.expectedClassMember],
         ),
       ],
       [],
@@ -81,14 +78,14 @@
         TestDescriptor(
           'ampersand',
           '@',
-          [ParserErrorCode.missingIdentifier],
+          [diag.missingIdentifier],
           '@_s_',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'leftParen',
           '@a(',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           '@a()',
           allFailing: true,
         ),
@@ -105,29 +102,21 @@
         TestDescriptor(
           'ampersand',
           '@',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-          ],
+          [diag.missingIdentifier, diag.expectedToken, diag.missingIdentifier],
           '@_s_',
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
         ),
         TestDescriptor(
           'leftParen',
           '@a(',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-          ],
+          [diag.expectedToken, diag.expectedToken, diag.missingIdentifier],
           '@a()',
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
         ),
       ],
@@ -158,14 +147,14 @@
         TestDescriptor(
           'ampersand',
           '@',
-          [ParserErrorCode.missingIdentifier],
+          [diag.missingIdentifier],
           '@_s_',
           failing: ['localFunctionNonVoid'],
         ),
         TestDescriptor(
           'leftParen',
           '@a(',
-          [ParserErrorCode.missingIdentifier],
+          [diag.missingIdentifier],
           '@a()',
           allFailing: true,
         ),
@@ -181,30 +170,22 @@
         TestDescriptor(
           'ampersand',
           '@',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-          ],
+          [diag.missingIdentifier, diag.expectedToken, diag.missingIdentifier],
           '@_s_',
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           failing: ['labeled'],
         ),
         TestDescriptor(
           'leftParen',
           '@a(',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-          ],
+          [diag.expectedToken, diag.expectedToken, diag.missingIdentifier],
           '@a()',
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           allFailing: true,
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/assert_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/assert_statement_test.dart
index 9ba34ab..3d2f821 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/assert_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/assert_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -19,17 +19,13 @@
       'assert_statement',
       [
         TestDescriptor('keyword', 'assert', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
+          diag.expectedToken,
         ], "assert (_s_);"),
         TestDescriptor(
           'leftParen',
           'assert (',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.missingIdentifier, diag.expectedToken, diag.expectedToken],
           "assert (_s_);",
           failing: [
             'assert',
@@ -42,26 +38,26 @@
           ],
         ),
         TestDescriptor('condition', 'assert (a', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
+          diag.expectedToken,
         ], "assert (a);"),
         TestDescriptor(
           'comma',
           'assert (a,',
-          [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+          [diag.expectedToken, diag.expectedToken],
           "assert (a,);",
           failing: allExceptEof,
         ),
         TestDescriptor('message', 'assert (a, b', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
+          diag.expectedToken,
         ], "assert (a, b);"),
         TestDescriptor('trailingComma', 'assert (a, b,', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
+          diag.expectedToken,
         ], "assert (a, b,);"),
         TestDescriptor('rightParen', 'assert (a, b)', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "assert (a, b);"),
       ],
       PartialCodeTest.statementSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/break_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/break_statement_test.dart
index b2e21d9..91bfecb 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/break_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/break_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -18,14 +18,12 @@
         TestDescriptor(
           'keyword',
           'break',
-          [ParserErrorCode.expectedToken, ParserErrorCode.breakOutsideOfLoop],
+          [diag.expectedToken, diag.breakOutsideOfLoop],
           "break;",
-          expectedDiagnosticsInValidCode: [ParserErrorCode.breakOutsideOfLoop],
+          expectedDiagnosticsInValidCode: [diag.breakOutsideOfLoop],
           failing: ['labeled', 'localFunctionNonVoid'],
         ),
-        TestDescriptor('label', 'break a', [
-          ParserErrorCode.expectedToken,
-        ], "break a;"),
+        TestDescriptor('label', 'break a', [diag.expectedToken], "break a;"),
       ],
       PartialCodeTest.statementSuffixes,
       head: 'f() { ',
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart
index 3834e02..96848e4 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/class_declaration_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,150 +16,138 @@
       TestDescriptor(
         'keyword',
         'class',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedClassBody],
+        [diag.missingIdentifier, diag.expectedClassBody],
         'class _s_ {}',
         failing: ['const', 'functionNonVoid', 'getter'],
       ),
       TestDescriptor('named', 'class A', [
-        ParserErrorCode.expectedClassBody,
+        diag.expectedClassBody,
       ], 'class A {}'),
       TestDescriptor(
         'extend',
         'class A extend',
-        [
-          ParserErrorCode.expectedInstead,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedClassBody,
-        ],
+        [diag.expectedInstead, diag.expectedTypeName, diag.expectedClassBody],
         'class A extend _s_ {}',
-        expectedDiagnosticsInValidCode: [ParserErrorCode.expectedInstead],
+        expectedDiagnosticsInValidCode: [diag.expectedInstead],
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'extends',
         'class A extends',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedClassBody],
+        [diag.expectedTypeName, diag.expectedClassBody],
         'class A extends _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'on',
         'class A on',
-        [
-          ParserErrorCode.expectedInstead,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedClassBody,
-        ],
+        [diag.expectedInstead, diag.expectedTypeName, diag.expectedClassBody],
         'class A on _s_ {}',
-        expectedDiagnosticsInValidCode: [ParserErrorCode.expectedInstead],
+        expectedDiagnosticsInValidCode: [diag.expectedInstead],
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor('extendsBody', 'class A extends {}', [
-        ParserErrorCode.expectedTypeName,
+        diag.expectedTypeName,
       ], 'class A extends _s_ {}'),
       TestDescriptor(
         'extendsWithNameBody',
         'class A extends with B {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'class A extends _s_ with B {}',
       ),
       TestDescriptor(
         'extendsImplementsNameBody',
         'class A extends implements B {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'class A extends _s_ implements B {}',
         allFailing: true,
       ),
       TestDescriptor(
         'extendsNameWith',
         'class A extends B with',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedClassBody],
+        [diag.expectedTypeName, diag.expectedClassBody],
         'class A extends B with _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'extendsNameWithBody',
         'class A extends B with {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'class A extends B with _s_ {}',
       ),
       TestDescriptor(
         'extendsNameImplements',
         'class A extends B implements',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedClassBody],
+        [diag.expectedTypeName, diag.expectedClassBody],
         'class A extends B implements _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'extendsNameImplementsBody',
         'class A extends B implements {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'class A extends B implements _s_ {}',
       ),
       TestDescriptor(
         'extendsNameWithNameImplements',
         'class A extends B with C implements',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedClassBody],
+        [diag.expectedTypeName, diag.expectedClassBody],
         'class A extends B with C implements _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'extendsNameWithNameImplementsBody',
         'class A extends B with C implements {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'class A extends B with C implements _s_ {}',
       ),
       TestDescriptor(
         'implements',
         'class A implements',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedClassBody],
+        [diag.expectedTypeName, diag.expectedClassBody],
         'class A implements _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor('implementsBody', 'class A implements {}', [
-        ParserErrorCode.expectedTypeName,
+        diag.expectedTypeName,
       ], 'class A implements _s_ {}'),
       TestDescriptor(
         'implementsNameComma',
         'class A implements B,',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedClassBody],
+        [diag.expectedTypeName, diag.expectedClassBody],
         'class A implements B, _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'implementsNameCommaBody',
         'class A implements B, {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'class A implements B, _s_ {}',
       ),
       TestDescriptor(
         'equals',
         'class A =',
-        [
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedToken,
-        ],
+        [diag.expectedTypeName, diag.expectedToken, diag.expectedToken],
         'class A = _s_ with _s_;',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'equalsName',
         'class A = B',
-        [ParserErrorCode.expectedToken, ParserErrorCode.expectedToken],
+        [diag.expectedToken, diag.expectedToken],
         'class A = B with _s_;',
         failing: ['functionVoid', 'functionNonVoid', 'getter'],
       ),
       TestDescriptor(
         'equalsNameWith',
         'class A = B with',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedToken],
+        [diag.expectedTypeName, diag.expectedToken],
         'class A = B with _s_;',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor('equalsNameName', 'class A = B C', [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
+        diag.expectedToken,
       ], 'class A = B with C;'),
     ], PartialCodeTest.declarationSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_declaration_test.dart
index 9eea2d3..c0b9db7 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_declaration_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -20,10 +20,7 @@
         TestDescriptor(
           'colon',
           'C() :',
-          [
-            ParserErrorCode.missingInitializer,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingInitializer, diag.missingFunctionBody],
           'C() : _s_ = _s_ {}',
           adjustValidUnitBeforeComparison: setSeparator,
           failing: ['methodNonVoid', 'getter', 'setter'],
@@ -31,30 +28,21 @@
         TestDescriptor(
           'colon_field',
           'C() : f',
-          [
-            ParserErrorCode.missingAssignmentInInitializer,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingAssignmentInInitializer, diag.missingFunctionBody],
           'C() : f = _s_ {}',
           adjustValidUnitBeforeComparison: setSeparator,
         ),
         TestDescriptor(
           'colon_field_increment',
           'C() : f++',
-          [
-            ParserErrorCode.missingAssignmentInInitializer,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingAssignmentInInitializer, diag.missingFunctionBody],
           'C() : _s_ = f++ {}',
           adjustValidUnitBeforeComparison: setSeparator,
         ),
         TestDescriptor(
           'colon_field_comma',
           'C() : f = 0,',
-          [
-            ParserErrorCode.missingInitializer,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingInitializer, diag.missingFunctionBody],
           'C() : f = 0, _s_ = _s_ {}',
           adjustValidUnitBeforeComparison: setSeparator,
           failing: ['methodNonVoid', 'getter', 'setter'],
@@ -62,28 +50,28 @@
         TestDescriptor(
           'colon_block',
           'C() : {}',
-          [ParserErrorCode.missingInitializer],
+          [diag.missingInitializer],
           'C() : _s_ = _s_ {}',
           adjustValidUnitBeforeComparison: setSeparator,
         ),
         TestDescriptor(
           'colon_semicolon',
           'C() : ;',
-          [ParserErrorCode.missingInitializer],
+          [diag.missingInitializer],
           'C() : _s_ = _s_ ;',
           adjustValidUnitBeforeComparison: setSeparator,
         ),
         TestDescriptor('super', 'C() : super', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.missingFunctionBody,
+          diag.expectedToken,
+          diag.missingFunctionBody,
         ], 'C() : super() {}'),
         TestDescriptor(
           'super_dot',
           'C() : super.',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingFunctionBody,
           ],
           'C() : super._s_() {}',
           failing: ['fieldConst', 'methodNonVoid', 'getter', 'setter'],
@@ -92,13 +80,13 @@
           'super_qdot',
           'C() : super?.',
           [
-            ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingFunctionBody,
+            diag.invalidOperatorQuestionmarkPeriodForSuper,
+            diag.expectedToken,
+            diag.missingFunctionBody,
           ],
           'C() : super?._s_() {}',
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.invalidOperatorQuestionmarkPeriodForSuper,
+            diag.invalidOperatorQuestionmarkPeriodForSuper,
           ],
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
@@ -111,7 +99,8 @@
 
   CompilationUnitImpl setSeparator(CompilationUnitImpl unit) {
     var declaration = unit.declarations[0] as ClassDeclaration;
-    var member = declaration.members[0] as ConstructorDeclarationImpl;
+    var classBody = declaration.body as BlockClassBody;
+    var member = classBody.members[0] as ConstructorDeclarationImpl;
     member.separator = Token(
       TokenType.COLON,
       member.parameters.endToken.charOffset + 1,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/continue_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/continue_statement_test.dart
index db24b98..11a9d3d 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/continue_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/continue_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -18,27 +18,17 @@
         TestDescriptor(
           'keyword',
           'continue',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.continueOutsideOfLoop,
-          ],
+          [diag.expectedToken, diag.continueOutsideOfLoop],
           "continue;",
-          expectedDiagnosticsInValidCode: [
-            ParserErrorCode.continueOutsideOfLoop,
-          ],
+          expectedDiagnosticsInValidCode: [diag.continueOutsideOfLoop],
           failing: ['labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor(
           'label',
           'continue a',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.continueOutsideOfLoop,
-          ],
+          [diag.expectedToken, diag.continueOutsideOfLoop],
           "continue a;",
-          expectedDiagnosticsInValidCode: [
-            ParserErrorCode.continueOutsideOfLoop,
-          ],
+          expectedDiagnosticsInValidCode: [diag.continueOutsideOfLoop],
         ),
       ],
       PartialCodeTest.statementSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/do_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/do_statement_test.dart
index 04cb7c1a..0761d6b 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/do_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/do_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -22,13 +22,13 @@
           'keyword',
           'do',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "do {} while (_s_);",
           allFailing: true,
@@ -37,11 +37,11 @@
           'leftBrace',
           'do {',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "do {} while (_s_);",
           failing: allExceptEof,
@@ -50,27 +50,23 @@
           'rightBrace',
           'do {}',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "do {} while (_s_);",
           failing: ['while'],
         ),
         TestDescriptor('while', 'do {} while', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
+          diag.missingIdentifier,
+          diag.expectedToken,
         ], "do {} while (_s_);"),
         TestDescriptor(
           'leftParen',
           'do {} while (',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.missingIdentifier, diag.expectedToken, diag.expectedToken],
           "do {} while (_s_);",
           failing: [
             'assert',
@@ -83,11 +79,11 @@
           ],
         ),
         TestDescriptor('condition', 'do {} while (a', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
+          diag.expectedToken,
         ], "do {} while (a);"),
         TestDescriptor('rightParen', 'do {} while (a)', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "do {} while (a);"),
       ],
       PartialCodeTest.statementSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/enum_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/enum_declaration_test.dart
index cc28afe..7bd41f0 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/enum_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/enum_declaration_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,7 +16,7 @@
       TestDescriptor(
         'keyword',
         'enum',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.missingEnumBody],
+        [diag.missingIdentifier, diag.missingEnumBody],
         'enum _s_ {}',
         expectedDiagnosticsInValidCode: [],
         failing: ['const', 'functionNonVoid', 'getter'],
@@ -24,21 +24,21 @@
       TestDescriptor(
         'name',
         'enum E',
-        [ParserErrorCode.missingEnumBody],
+        [diag.missingEnumBody],
         'enum E {}',
         expectedDiagnosticsInValidCode: [],
       ),
       TestDescriptor(
         'missingName',
         'enum {}',
-        [ParserErrorCode.missingIdentifier],
+        [diag.missingIdentifier],
         'enum _s_ {}',
         expectedDiagnosticsInValidCode: [],
       ),
       TestDescriptor(
         'leftBrace',
         'enum E {',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         'enum E {_s_}',
         failing: [
           'eof' /* tested separately below */,
@@ -52,11 +52,7 @@
       TestDescriptor(
         'comma',
         'enum E {,',
-        [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedToken,
-        ],
+        [diag.missingIdentifier, diag.missingIdentifier, diag.expectedToken],
         'enum E {_s_,_s_}',
         failing: [
           'eof' /* tested separately below */,
@@ -67,31 +63,29 @@
           'setter',
         ],
       ),
-      TestDescriptor('value', 'enum E {a', [
-        ParserErrorCode.expectedToken,
-      ], 'enum E {a}'),
+      TestDescriptor('value', 'enum E {a', [diag.expectedToken], 'enum E {a}'),
       TestDescriptor('commaValue', 'enum E {,a', [
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.expectedToken,
+        diag.missingIdentifier,
+        diag.expectedToken,
       ], 'enum E {_s_, a}'),
       TestDescriptor('commaRightBrace', 'enum E {,}', [
-        ParserErrorCode.missingIdentifier,
+        diag.missingIdentifier,
       ], 'enum E {_s_}'),
       TestDescriptor('commaValueRightBrace', 'enum E {, a}', [
-        ParserErrorCode.missingIdentifier,
+        diag.missingIdentifier,
       ], 'enum E {_s_, a}'),
     ], PartialCodeTest.declarationSuffixes);
     buildTests('enum_eof', [
       TestDescriptor(
         'leftBrace',
         'enum E {',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         'enum E {}',
         expectedDiagnosticsInValidCode: [],
       ),
       TestDescriptor('comma', 'enum E {,', [
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.expectedToken,
+        diag.missingIdentifier,
+        diag.expectedToken,
       ], 'enum E {_s_}'),
     ], []);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart
index d7985e9..a6b0db5 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/export_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,66 +16,66 @@
       TestDescriptor('keyword', 'export', [
         // TODO(danrubel): Consider an improved error message
         // ParserErrorCode.MISSING_URI,
-        ParserErrorCode.expectedStringLiteral,
-        ParserErrorCode.expectedToken,
+        diag.expectedStringLiteral,
+        diag.expectedToken,
       ], "export '';"),
       TestDescriptor('emptyUri', "export ''", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "export '';"),
       TestDescriptor('uri', "export 'a.dart'", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "export 'a.dart';"),
       TestDescriptor(
         'hide',
         "export 'a.dart' hide",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "export 'a.dart' hide _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('hideName', "export 'a.dart' hide A", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "export 'a.dart' hide A;"),
       TestDescriptor(
         'hideComma',
         "export 'a.dart' hide A,",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "export 'a.dart' hide A, _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('hideCommaName', "export 'a.dart' hide A, B", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "export 'a.dart' hide A, B;"),
       TestDescriptor(
         'hideShow',
         "export 'a.dart' hide A show",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "export 'a.dart' hide A show _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor(
         'show',
         "export 'a.dart' show",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "export 'a.dart' show _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('showName', "export 'a.dart' show A", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "export 'a.dart' show A;"),
       TestDescriptor(
         'showComma',
         "export 'a.dart' show A,",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "export 'a.dart' show A, _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('showCommaName', "export 'a.dart' show A, B", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "export 'a.dart' show A, B;"),
       TestDescriptor(
         'showHide',
         "export 'a.dart' show A hide",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "export 'a.dart' show A hide _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_test.dart
index b78dca0..799af36 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/extension_declaration_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,11 +16,7 @@
       TestDescriptor(
         'keyword',
         'extension',
-        [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedExtensionBody,
-        ],
+        [diag.expectedToken, diag.expectedTypeName, diag.expectedExtensionBody],
         'extension on _s_ {}',
         failing: [
           'getter',
@@ -34,26 +30,19 @@
       TestDescriptor(
         'named',
         'extension E',
-        [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedExtensionBody,
-        ],
+        [diag.expectedToken, diag.expectedTypeName, diag.expectedExtensionBody],
         'extension E on _s_ {}',
         failing: ['getter', 'functionNonVoid', 'functionVoid', 'mixin'],
       ),
       TestDescriptor(
         'on',
         'extension E on',
-        [
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedExtensionBody,
-        ],
+        [diag.expectedTypeName, diag.expectedExtensionBody],
         'extension E on _s_ {}',
         failing: ['getter', 'functionNonVoid', 'functionVoid', 'mixin'],
       ),
       TestDescriptor('extendedType', 'extension E on String', [
-        ParserErrorCode.expectedExtensionBody,
+        diag.expectedExtensionBody,
       ], 'extension E on String {}'),
       // Most of the failing tests are because the following text could be
       // a member of the class, so the parser adds the closing brace _after_
@@ -63,7 +52,7 @@
       TestDescriptor(
         'partialBody',
         'extension E on String {',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         'extension E on String {}',
         failing: [
           'class',
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
index 94db48f..233b5cc 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
@@ -2,8 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -31,30 +30,23 @@
         TestDescriptor(
           'const_noName',
           'const',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'const _s_;',
           failing: allExceptAnnotationAndEof,
-          expectedDiagnosticsInValidCode: [
-            CompileTimeErrorCode.constNotInitialized,
-          ],
+          expectedDiagnosticsInValidCode: [diag.constNotInitialized],
         ),
         TestDescriptor(
           'const_name',
           'const f',
-          [
-            ParserErrorCode.expectedToken,
-            CompileTimeErrorCode.constNotInitialized,
-          ],
+          [diag.expectedToken, diag.constNotInitialized],
           'const f;',
           failing: ['methodNonVoid', 'getter', 'setter'],
-          expectedDiagnosticsInValidCode: [
-            CompileTimeErrorCode.constNotInitialized,
-          ],
+          expectedDiagnosticsInValidCode: [diag.constNotInitialized],
         ),
         TestDescriptor(
           'const_equals',
           'const f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'const f = _s_;',
           failing: [
             'fieldConst',
@@ -65,7 +57,7 @@
           ],
         ),
         TestDescriptor('const_initializer', 'const f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'const f = 0;'),
         //
         // Instance field, final.
@@ -73,21 +65,21 @@
         TestDescriptor(
           'final_noName',
           'final',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'final _s_;',
           failing: allExceptAnnotationAndEof,
         ),
         TestDescriptor(
           'final_name',
           'final f',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           'final f;',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'final_equals',
           'final f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'final f = _s_;',
           failing: [
             'fieldConst',
@@ -98,7 +90,7 @@
           ],
         ),
         TestDescriptor('final_initializer', 'final f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'final f = 0;'),
         //
         // Instance field, var.
@@ -106,28 +98,28 @@
         TestDescriptor(
           'var_noName',
           'var',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'var _s_;',
           failing: allExceptAnnotationAndEof,
         ),
         TestDescriptor(
           'var_name',
           'var f',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           'var f;',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'var_name_comma',
           'var f,',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'var f, _s_;',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'var_equals',
           'var f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'var f = _s_;',
           failing: [
             'fieldConst',
@@ -138,7 +130,7 @@
           ],
         ),
         TestDescriptor('var_initializer', 'var f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'var f = 0;'),
         //
         // Instance field, type.
@@ -146,27 +138,22 @@
         TestDescriptor(
           'type_noName',
           'A',
-          [
-            ParserErrorCode.missingConstFinalVarOrType,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.missingConstFinalVarOrType, diag.expectedToken],
           'A _s_;',
           allFailing: true,
         ),
-        TestDescriptor('type_name', 'A f', [
-          ParserErrorCode.expectedToken,
-        ], 'A f;'),
+        TestDescriptor('type_name', 'A f', [diag.expectedToken], 'A f;'),
         TestDescriptor(
           'type_name_comma',
           'A f,',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'A f, _s_;',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'type_equals',
           'A f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'A f = _s_;',
           failing: [
             'fieldConst',
@@ -177,7 +164,7 @@
           ],
         ),
         TestDescriptor('type_initializer', 'A f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'A f = 0;'),
         //
         // Static field, const.
@@ -185,30 +172,23 @@
         TestDescriptor(
           'static_const_noName',
           'static const',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static const _s_;',
           failing: allExceptAnnotationAndEof,
-          expectedDiagnosticsInValidCode: [
-            CompileTimeErrorCode.constNotInitialized,
-          ],
+          expectedDiagnosticsInValidCode: [diag.constNotInitialized],
         ),
         TestDescriptor(
           'static_const_name',
           'static const f',
-          [
-            ParserErrorCode.expectedToken,
-            CompileTimeErrorCode.constNotInitialized,
-          ],
+          [diag.expectedToken, diag.constNotInitialized],
           'static const f;',
           failing: ['methodNonVoid', 'getter', 'setter'],
-          expectedDiagnosticsInValidCode: [
-            CompileTimeErrorCode.constNotInitialized,
-          ],
+          expectedDiagnosticsInValidCode: [diag.constNotInitialized],
         ),
         TestDescriptor(
           'static_const_equals',
           'static const f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static const f = _s_;',
           failing: [
             'fieldConst',
@@ -219,7 +199,7 @@
           ],
         ),
         TestDescriptor('static_const_initializer', 'static const f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'static const f = 0;'),
         //
         // Static field, final.
@@ -227,21 +207,21 @@
         TestDescriptor(
           'static_final_noName',
           'static final',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static final _s_;',
           failing: allExceptAnnotationAndEof,
         ),
         TestDescriptor(
           'static_final_name',
           'static final f',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           'static final f;',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'static_final_equals',
           'static final f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static final f = _s_;',
           failing: [
             'fieldConst',
@@ -252,7 +232,7 @@
           ],
         ),
         TestDescriptor('static_final_initializer', 'static final f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'static final f = 0;'),
         //
         // Static field, var.
@@ -260,21 +240,21 @@
         TestDescriptor(
           'static_var_noName',
           'static var',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static var _s_;',
           failing: allExceptAnnotationAndEof,
         ),
         TestDescriptor(
           'static_var_name',
           'static var f',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           'static var f;',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor(
           'static_var_equals',
           'static var f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static var f = _s_;',
           failing: [
             'fieldConst',
@@ -285,7 +265,7 @@
           ],
         ),
         TestDescriptor('static_var_initializer', 'static var f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'static var f = 0;'),
         //
         // Static field, type.
@@ -293,20 +273,17 @@
         TestDescriptor(
           'static_type_noName',
           'static A',
-          [
-            ParserErrorCode.missingConstFinalVarOrType,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.missingConstFinalVarOrType, diag.expectedToken],
           'static A _s_;',
           allFailing: true,
         ),
         TestDescriptor('static_type_name', 'static A f', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'static A f;'),
         TestDescriptor(
           'static_type_equals',
           'static A f =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'static A f = _s_;',
           failing: [
             'fieldConst',
@@ -317,7 +294,7 @@
           ],
         ),
         TestDescriptor('static_type_initializer', 'static A f = 0', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'static A f = 0;'),
       ],
       PartialCodeTest.classMemberSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/for_each_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/for_each_statement_test.dart
index 5ba0b52..a3e2ce5 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/for_each_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/for_each_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -26,10 +26,10 @@
           'in',
           'for (var a in',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           'for (var a in _s_) _s_;',
           failing: allExceptEof,
@@ -37,11 +37,7 @@
         TestDescriptor(
           'iterator',
           'for (var a in b',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedToken, diag.missingIdentifier, diag.expectedToken],
           'for (var a in b) _s_;',
           failing: allExceptEof,
         ),
@@ -58,20 +54,20 @@
       'forEach_statement',
       [
         TestDescriptor('await_keyword', 'await for', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'await for (_s_ in _s_) _s_;'),
         TestDescriptor(
           'await_leftParen',
           'await for (',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
             // TODO(danrubel): investigate why 4 missing identifier errors
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "await for (_s_ in _s_) _s_;",
           failing: allExceptEof,
@@ -80,11 +76,11 @@
           'await_variableName',
           'await for (a',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "await for (a in _s_) _s_;",
           failing: allExceptEof,
@@ -93,11 +89,11 @@
           'await_typeAndVariableName',
           'await for (A a',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "await for (A a in _s_) _s_;",
           failing: allExceptEof,
@@ -106,10 +102,10 @@
           'await_in',
           'await for (A a in',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "await for (A a in _s_) _s_;",
           failing: allExceptEof,
@@ -117,11 +113,7 @@
         TestDescriptor(
           'await_stream',
           'await for (A a in b',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedToken, diag.missingIdentifier, diag.expectedToken],
           "await for (A a in b) _s_;",
           failing: allExceptEof,
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/for_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/for_statement_test.dart
index 77c3ec3..545fbaf 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/for_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/for_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -18,19 +18,17 @@
     buildTests(
       'for_statement',
       [
-        TestDescriptor('keyword', 'for', [
-          ParserErrorCode.expectedToken,
-        ], 'for (;;) _s_;'),
+        TestDescriptor('keyword', 'for', [diag.expectedToken], 'for (;;) _s_;'),
         TestDescriptor(
           'emptyParen',
           'for ()',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "for (_s_;_s_;) _s_;",
           failing: allExceptEof,
@@ -39,13 +37,13 @@
           'leftParen',
           'for (',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "for (_s_;_s_;) _s_;",
           failing: allExceptEof,
@@ -54,11 +52,11 @@
           'var',
           'for (var',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           "for (var _s_;;) _s_;",
           allFailing: true,
@@ -67,12 +65,12 @@
           'varAndIdentifier',
           'for (var i',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "for (var i;_s_;) _s_;",
           failing: allExceptEof,
@@ -81,13 +79,13 @@
           'equals',
           'for (var i =',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "for (var i = _s_;_s_;) _s_;",
           failing: allExceptEof,
@@ -96,12 +94,12 @@
           'initializer',
           'for (var i = 0',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "for (var i = 0;_s_;) _s_;",
           failing: allExceptEof,
@@ -110,11 +108,11 @@
           'firstSemicolon',
           'for (var i = 0;',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "for (var i = 0;_s_;) _s_;",
           failing: allExceptEof,
@@ -122,18 +120,14 @@
         TestDescriptor(
           'secondSemicolon',
           'for (var i = 0;;',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedToken, diag.missingIdentifier, diag.expectedToken],
           "for (var i = 0;;) _s_;",
           failing: allExceptEof,
         ),
         TestDescriptor(
           'rightParen',
           'for (var i = 0;;)',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "for (var i = 0;;) _s_;",
           failing: allExceptEof,
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/if_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/if_statement_test.dart
index e7316c0..6d77ba3 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/if_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/if_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,13 +16,13 @@
       'if_statement',
       [
         TestDescriptor('keyword', 'if', [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedToken,
+          diag.missingIdentifier,
+          diag.expectedToken,
         ], "if (_s_)"),
         TestDescriptor(
           'leftParen',
           'if (',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "if (_s_)",
           failing: [
             'assert',
@@ -34,9 +34,7 @@
             'switch',
           ],
         ),
-        TestDescriptor('condition', 'if (a', [
-          ParserErrorCode.expectedToken,
-        ], "if (a)"),
+        TestDescriptor('condition', 'if (a', [diag.expectedToken], "if (a)"),
       ],
       PartialCodeTest.statementSuffixes,
       head: 'f() { ',
@@ -49,25 +47,21 @@
         TestDescriptor(
           'keyword',
           'if',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedToken, diag.missingIdentifier, diag.expectedToken],
           "if (_s_);",
           allFailing: true,
         ),
         TestDescriptor(
           'leftParen',
           'if (',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "if (_s_);",
           allFailing: true,
         ),
         TestDescriptor(
           'condition',
           'if (a',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "if (a);",
           allFailing: true,
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart
index 1fca512..a7af5eb 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/import_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,58 +16,58 @@
       TestDescriptor('keyword', 'import', [
         // TODO(danrubel): Consider an improved error message
         // ParserErrorCode.MISSING_URI,
-        ParserErrorCode.expectedStringLiteral,
-        ParserErrorCode.expectedToken,
+        diag.expectedStringLiteral,
+        diag.expectedToken,
       ], "import '';"),
       TestDescriptor('emptyUri', "import ''", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "import '';"),
       TestDescriptor('fullUri', "import 'a.dart'", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "import 'a.dart';"),
       TestDescriptor('if', "import 'a.dart' if", [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedStringLiteral,
       ], "import 'a.dart' if (_s_) '';"),
       TestDescriptor(
         'ifParen',
         "import 'a.dart' if (",
         [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.expectedStringLiteral,
-          ParserErrorCode.expectedToken,
+          diag.missingIdentifier,
+          diag.expectedToken,
+          diag.expectedStringLiteral,
+          diag.expectedToken,
         ],
         "import 'a.dart' if (_s_) '';",
         failing: ['functionNonVoid', 'getter', 'setter'],
       ),
       TestDescriptor('ifId', "import 'a.dart' if (b", [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedStringLiteral,
       ], "import 'a.dart' if (b) '';"),
       TestDescriptor('ifEquals', "import 'a.dart' if (b ==", [
-        ParserErrorCode.expectedStringLiteral,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedStringLiteral,
+        diag.expectedStringLiteral,
+        diag.expectedToken,
+        diag.expectedToken,
+        diag.expectedStringLiteral,
       ], "import 'a.dart' if (b == '') '';"),
       TestDescriptor('ifCondition', "import 'a.dart' if (b)", [
-        ParserErrorCode.expectedToken,
-        ParserErrorCode.expectedStringLiteral,
+        diag.expectedToken,
+        diag.expectedStringLiteral,
       ], "import 'a.dart' if (b) '';"),
       TestDescriptor(
         'as',
         "import 'a.dart' as",
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "import 'a.dart' as _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor(
         'show',
         "import 'a.dart' show",
-        [ParserErrorCode.expectedToken, ParserErrorCode.missingIdentifier],
+        [diag.expectedToken, diag.missingIdentifier],
         "import 'a.dart' show _s_;",
         failing: ['functionNonVoid', 'getter'],
       ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/index_expression_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/index_expression_test.dart
index a49f958..bafc555 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/index_expression_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/index_expression_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,19 +16,19 @@
       'index_assignment',
       [
         TestDescriptor('missing_index_no_space', 'intList[] = 0;', [
-          ParserErrorCode.missingIdentifier,
+          diag.missingIdentifier,
         ], 'intList[_s_] = 0;'),
         TestDescriptor('missing_index_with_space', 'intList[ ] = 0;', [
-          ParserErrorCode.missingIdentifier,
+          diag.missingIdentifier,
         ], 'intList[_s_] = 0;'),
         TestDescriptor('trailing_comma', 'intList[x,] = 0;', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'intList[x] = 0;'),
         TestDescriptor('trailing_comma_and_identifier', 'intList[x,y] = 0;', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'intList[x] = 0;'),
         TestDescriptor('trailing_identifier_no_comma', 'intList[x y] = 0;', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], 'intList[x] = 0;'),
       ],
       [], //PartialCodeTest.statementSuffixes,
@@ -42,10 +42,10 @@
           'open',
           'intList[',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
+            diag.expectedToken,
+            diag.expectedToken,
           ],
           'intList[_s_];',
           failing: [
@@ -62,11 +62,7 @@
         TestDescriptor(
           'identifier',
           'intList[x',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedToken, diag.expectedToken, diag.expectedToken],
           'intList[x];',
           failing: ['eof'],
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
index 00d5dda..eacd4df 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/instance_creation_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -24,30 +24,30 @@
   List<TestDescriptor> forKeyword(String keyword) {
     return <TestDescriptor>[
       TestDescriptor('${keyword}_keyword', keyword, [
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.expectedToken,
+        diag.missingIdentifier,
+        diag.expectedToken,
       ], "$keyword _s_()"),
       TestDescriptor('${keyword}_name_unnamed', '$keyword A', [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "$keyword A()"),
       TestDescriptor('${keyword}_name_named', '$keyword A.b', [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "$keyword A.b()"),
       TestDescriptor('${keyword}_name_dot', '$keyword A.', [
-        ParserErrorCode.missingIdentifier,
-        ParserErrorCode.expectedToken,
+        diag.missingIdentifier,
+        diag.expectedToken,
       ], "$keyword A._s_()"),
       TestDescriptor(
         '${keyword}_leftParen_unnamed',
         '$keyword A(',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         "$keyword A()",
         allFailing: true,
       ),
       TestDescriptor(
         '${keyword}_leftParen_named',
         '$keyword A.b(',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         "$keyword A.b()",
         allFailing: true,
       ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart
index 774833d..360ef46 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/library_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,22 +16,22 @@
       TestDescriptor(
         'keyword',
         'library',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         'library _s_;',
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('name', 'library lib', [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], 'library lib;'),
       TestDescriptor(
         'nameDot',
         'library lib.',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         'library lib._s_;',
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('nameDotName', 'library lib.a', [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], 'library lib.a;'),
     ], PartialCodeTest.prePartSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/local_variable_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/local_variable_test.dart
index f40efed..2e90c5a 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/local_variable_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/local_variable_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -18,44 +18,44 @@
         TestDescriptor(
           'const',
           'const',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "const _s_;",
           allFailing: true,
         ),
         TestDescriptor(
           'constName',
           'const a',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "const a;",
           failing: <String>['eof', 'labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor('constTypeName', 'const int a', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "const int a;"),
         TestDescriptor(
           'constNameComma',
           'const a,',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "const a, _s_;",
           failing: <String>['labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor(
           'constTypeNameComma',
           'const int a,',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "const int a, _s_;",
           failing: ['labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor('constNameCommaName', 'const a, b', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "const a, b;"),
         TestDescriptor('constTypeNameCommaName', 'const int a, b', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "const int a, b;"),
         TestDescriptor(
           'final',
           'final',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "final _s_;",
           failing: [
             'labeled',
@@ -67,27 +67,25 @@
         TestDescriptor(
           'finalName',
           'final a',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "final a;",
           failing: ['labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor('finalTypeName', 'final int a', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "final int a;"),
         TestDescriptor(
           'type',
           'int',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "int _s_;",
           allFailing: true,
         ),
-        TestDescriptor('typeName', 'int a', [
-          ParserErrorCode.expectedToken,
-        ], "int a;"),
+        TestDescriptor('typeName', 'int a', [diag.expectedToken], "int a;"),
         TestDescriptor(
           'var',
           'var',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "var _s_;",
           failing: [
             'labeled',
@@ -99,14 +97,14 @@
         TestDescriptor(
           'varName',
           'var a',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "var a;",
           failing: ['labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor(
           'varNameEquals',
           'var a =',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "var a = _s_;",
           failing: [
             'block',
@@ -119,7 +117,7 @@
           ],
         ),
         TestDescriptor('varNameEqualsExpression', 'var a = b', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "var a = b;"),
       ],
       PartialCodeTest.statementSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
index 4c2ee37..b4abb03 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/method_declaration_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -31,49 +31,44 @@
         TestDescriptor(
           'noType_leftParen',
           'm(',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'm() {}',
           failing: allExceptEof,
         ),
         TestDescriptor(
           'noType_paramName',
           'm(B',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'm(B) {}',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor('noType_paramTypeAndName', 'm(B b', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.missingFunctionBody,
+          diag.expectedToken,
+          diag.missingFunctionBody,
         ], 'm(B b) {}'),
         TestDescriptor(
           'noType_paramAndComma',
           'm(B b,',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'm(B b) {}',
           failing: allExceptEof,
         ),
         TestDescriptor('noType_noParams', 'm()', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'm() {}'),
         TestDescriptor('noType_params', 'm(b, c)', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'm(b, c) {}'),
         TestDescriptor('noType_emptyOptional', 'm(B b, [])', [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.missingFunctionBody,
+          diag.missingIdentifier,
+          diag.missingFunctionBody,
         ], 'm(B b, [_s_]){}'),
         TestDescriptor(
           'noType_emptyNamed',
           'm(B b, {})',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingIdentifier, diag.missingFunctionBody],
           'm(B b, {_s_}){}',
-          expectedDiagnosticsInValidCode: [
-            ParserErrorCode.privateOptionalParameter,
-          ],
+          expectedDiagnosticsInValidCode: [diag.privateOptionalParameter],
         ),
         //
         // Instance method, with simple return type.
@@ -81,49 +76,44 @@
         TestDescriptor(
           'type_leftParen',
           'A m(',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'A m() {}',
           failing: allExceptEof,
         ),
         TestDescriptor(
           'type_paramName',
           'A m(B',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'A m(B) {}',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor('type_paramTypeAndName', 'A m(B b', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.missingFunctionBody,
+          diag.expectedToken,
+          diag.missingFunctionBody,
         ], 'A m(B b) {}'),
         TestDescriptor(
           'type_paramAndComma',
           'A m(B b,',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'A m(B b) {}',
           failing: allExceptEof,
         ),
         TestDescriptor('type_noParams', 'A m()', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'A m() {}'),
         TestDescriptor('type_params', 'A m(b, c)', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'A m(b, c) {}'),
         TestDescriptor('type_emptyOptional', 'A m(B b, [])', [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.missingFunctionBody,
+          diag.missingIdentifier,
+          diag.missingFunctionBody,
         ], 'A m(B b, [_s_]){}'),
         TestDescriptor(
           'type_emptyNamed',
           'A m(B b, {})',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingIdentifier, diag.missingFunctionBody],
           'A m(B b, {_s_}){}',
-          expectedDiagnosticsInValidCode: [
-            ParserErrorCode.privateOptionalParameter,
-          ],
+          expectedDiagnosticsInValidCode: [diag.privateOptionalParameter],
         ),
         //
         // Static method, no return type.
@@ -131,54 +121,46 @@
         TestDescriptor(
           'static_noType_leftParen',
           'static m(',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'static m() {}',
           failing: allExceptEof,
         ),
         TestDescriptor(
           'static_noType_paramName',
           'static m(B',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'static m(B) {}',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor('static_noType_paramTypeAndName', 'static m(B b', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.missingFunctionBody,
+          diag.expectedToken,
+          diag.missingFunctionBody,
         ], 'static m(B b) {}'),
         TestDescriptor(
           'static_noType_paramAndComma',
           'static m(B b,',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'static m(B b) {}',
           failing: allExceptEof,
         ),
         TestDescriptor('static_noType_noParams', 'static m()', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'static m() {}'),
         TestDescriptor('static_noType_params', 'static m(b, c)', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'static m(b, c) {}'),
         TestDescriptor(
           'static_noType_emptyOptional',
           'static m(B b, [])',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingIdentifier, diag.missingFunctionBody],
           'static m(B b, [_s_]){}',
         ),
         TestDescriptor(
           'static_noType_emptyNamed',
           'static m(B b, {})',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingIdentifier, diag.missingFunctionBody],
           'static m(B b, {_s_}){}',
-          expectedDiagnosticsInValidCode: [
-            ParserErrorCode.privateOptionalParameter,
-          ],
+          expectedDiagnosticsInValidCode: [diag.privateOptionalParameter],
         ),
         //
         // Static method, with simple return type.
@@ -186,54 +168,46 @@
         TestDescriptor(
           'static_type_leftParen',
           'static A m(',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'static A m() {}',
           failing: allExceptEof,
         ),
         TestDescriptor(
           'static_type_paramName',
           'static A m(B',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'static A m(B) {}',
           failing: ['methodNonVoid', 'getter', 'setter'],
         ),
         TestDescriptor('static_type_paramTypeAndName', 'static A m(B b', [
-          ParserErrorCode.expectedToken,
-          ParserErrorCode.missingFunctionBody,
+          diag.expectedToken,
+          diag.missingFunctionBody,
         ], 'static A m(B b) {}'),
         TestDescriptor(
           'static_type_paramAndComma',
           'static A m(B b,',
-          [ParserErrorCode.expectedToken, ParserErrorCode.missingFunctionBody],
+          [diag.expectedToken, diag.missingFunctionBody],
           'static A m(B b) {}',
           failing: allExceptEof,
         ),
         TestDescriptor('static_type_noParams', 'static A m()', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'static A m() {}'),
         TestDescriptor('static_type_params', 'static A m(b, c)', [
-          ParserErrorCode.missingFunctionBody,
+          diag.missingFunctionBody,
         ], 'static A m(b, c) {}'),
         TestDescriptor(
           'static_type_emptyOptional',
           'static A m(B b, [])',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingIdentifier, diag.missingFunctionBody],
           'static A m(B b, [_s_]){}',
         ),
         TestDescriptor(
           'static_type_emptyNamed',
           'static A m(B b, {})',
-          [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingFunctionBody,
-          ],
+          [diag.missingIdentifier, diag.missingFunctionBody],
           'static A m(B b, {_s_}){}',
-          expectedDiagnosticsInValidCode: [
-            ParserErrorCode.privateOptionalParameter,
-          ],
+          expectedDiagnosticsInValidCode: [diag.privateOptionalParameter],
         ),
       ],
       PartialCodeTest.classMemberSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_test.dart
index eb2d728..9aac9ff 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,98 +16,90 @@
       TestDescriptor(
         'keyword',
         'mixin',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedMixinBody],
+        [diag.missingIdentifier, diag.expectedMixinBody],
         'mixin _s_ {}',
         failing: ['class', 'functionNonVoid', 'getter'],
       ),
       TestDescriptor('named', 'mixin A', [
-        ParserErrorCode.expectedMixinBody,
+        diag.expectedMixinBody,
       ], 'mixin A {}'),
       TestDescriptor(
         'on',
         'mixin A on',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedMixinBody],
+        [diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A on _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'extend',
         'mixin A extend',
-        [
-          ParserErrorCode.expectedInstead,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedMixinBody,
-        ],
+        [diag.expectedInstead, diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A extend _s_ {}',
-        expectedDiagnosticsInValidCode: [ParserErrorCode.expectedInstead],
+        expectedDiagnosticsInValidCode: [diag.expectedInstead],
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'extends',
         'mixin A extends',
-        [
-          ParserErrorCode.expectedInstead,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedMixinBody,
-        ],
+        [diag.expectedInstead, diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A extends _s_ {}',
-        expectedDiagnosticsInValidCode: [ParserErrorCode.expectedInstead],
+        expectedDiagnosticsInValidCode: [diag.expectedInstead],
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor('onBody', 'mixin A on {}', [
-        ParserErrorCode.expectedTypeName,
+        diag.expectedTypeName,
       ], 'mixin A on _s_ {}'),
       TestDescriptor(
         'onNameComma',
         'mixin A on B,',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedMixinBody],
+        [diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A on B, _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor('onNameCommaBody', 'mixin A on B, {}', [
-        ParserErrorCode.expectedTypeName,
+        diag.expectedTypeName,
       ], 'mixin A on B, _s_ {}'),
       TestDescriptor(
         'onImplementsNameBody',
         'mixin A on implements B {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'mixin A on _s_ implements B {}',
         allFailing: true,
       ),
       TestDescriptor(
         'onNameImplements',
         'mixin A on B implements',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedMixinBody],
+        [diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A on B implements _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'onNameImplementsBody',
         'mixin A on B implements {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'mixin A on B implements _s_ {}',
       ),
       TestDescriptor(
         'implements',
         'mixin A implements',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedMixinBody],
+        [diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A implements _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor('implementsBody', 'mixin A implements {}', [
-        ParserErrorCode.expectedTypeName,
+        diag.expectedTypeName,
       ], 'mixin A implements _s_ {}'),
       TestDescriptor(
         'implementsNameComma',
         'mixin A implements B,',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedMixinBody],
+        [diag.expectedTypeName, diag.expectedMixinBody],
         'mixin A implements B, _s_ {}',
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'implementsNameCommaBody',
         'mixin A implements B, {}',
-        [ParserErrorCode.expectedTypeName],
+        [diag.expectedTypeName],
         'mixin A implements B, _s_ {}',
       ),
     ], PartialCodeTest.declarationSuffixes);
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/parameter_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/parameter_test.dart
index 9f05345..0bf465d 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/parameter_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/parameter_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,7 +16,7 @@
       TestDescriptor(
         'functionType_noIdentifier',
         'f(Function(void)) {}',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         'f(Function(void) _s_) {}',
         failing: ['eof'],
       ),
@@ -26,7 +26,7 @@
           class C<E> {}
           f(C<int Function(int, int) c) {}
           ''',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         '''
           class C<E> {}
           f(C<int Function(int, int)> c) {}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart
index 2d2e7fa..e34ceea 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,14 +16,12 @@
       TestDescriptor('keyword', 'part', [
         // TODO(danrubel): Consider an improved error message
         // ParserErrorCode.MISSING_URI,
-        ParserErrorCode.expectedStringLiteral,
-        ParserErrorCode.expectedToken,
+        diag.expectedStringLiteral,
+        diag.expectedToken,
       ], "part '';"),
-      TestDescriptor('emptyUri', "part ''", [
-        ParserErrorCode.expectedToken,
-      ], "part '';"),
+      TestDescriptor('emptyUri', "part ''", [diag.expectedToken], "part '';"),
       TestDescriptor('uri', "part 'a.dart'", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "part 'a.dart';"),
     ], PartialCodeTest.postPartSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart
index 7b2bb1f..43aa7a1d 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/part_of_directive_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -28,7 +28,7 @@
       TestDescriptor(
         'keyword',
         'part of',
-        [ParserErrorCode.expectedStringLiteral, ParserErrorCode.expectedToken],
+        [diag.expectedStringLiteral, diag.expectedToken],
         'part of "";',
         failing: ['mixin'],
       ),
@@ -39,7 +39,7 @@
         TestDescriptor(
           'keyword',
           'part of',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           'part of _s_;',
           failing: ['functionNonVoid', 'getter'],
         ),
@@ -51,25 +51,25 @@
       TestDescriptor(
         'name',
         'part of lib',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         'library lib;',
         allFailing: true,
       ),
       TestDescriptor(
         'nameDot',
         'part of lib.',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         'part of lib._s_;',
         failing: ['functionNonVoid', 'getter'],
       ),
       TestDescriptor('nameDotName', 'part of lib.a', [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], 'part of lib.a;'),
       TestDescriptor('emptyUri', "part of ''", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "part of '';"),
       TestDescriptor('uri', "part of 'a.dart'", [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "part of 'a.dart';"),
     ], PartialCodeTest.declarationSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
index e13a2fa..7d913a6 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 
 import '../../../../generated/test_support.dart';
@@ -191,11 +191,9 @@
       parseCompilationUnit2(base.toString(), listener, featureSet: featureSet);
       var baseDiagnosticCodes = <DiagnosticCode>[];
       for (var diagnostic in listener.diagnostics) {
-        if (diagnostic.diagnosticCode == ParserErrorCode.breakOutsideOfLoop ||
-            diagnostic.diagnosticCode ==
-                ParserErrorCode.continueOutsideOfLoop ||
-            diagnostic.diagnosticCode ==
-                ParserErrorCode.continueWithoutLabelInCase) {
+        if (diagnostic.diagnosticCode == diag.breakOutsideOfLoop ||
+            diagnostic.diagnosticCode == diag.continueOutsideOfLoop ||
+            diagnostic.diagnosticCode == diag.continueWithoutLabelInCase) {
           baseDiagnosticCodes.add(diagnostic.diagnosticCode);
         }
       }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/return_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/return_statement_test.dart
index 3cedd65..adc1b3d 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/return_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/return_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -18,12 +18,12 @@
         TestDescriptor(
           'keyword',
           'return',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "return;",
           allFailing: true,
         ),
         TestDescriptor('expression', 'return a', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "return a;"),
       ],
       PartialCodeTest.statementSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/switch_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/switch_statement_test.dart
index 8a4d115..72c54f4 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/switch_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/switch_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -22,9 +22,9 @@
           'keyword',
           'switch',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedSwitchStatementBody,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedSwitchStatementBody,
+            diag.expectedToken,
           ],
           "switch (_s_) {}",
           failing: ['block'],
@@ -33,9 +33,9 @@
           'leftParen',
           'switch (',
           [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedSwitchStatementBody,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedSwitchStatementBody,
+            diag.expectedToken,
           ],
           "switch (_s_) {}",
           failing: [
@@ -51,24 +51,21 @@
         TestDescriptor(
           'expression',
           'switch (a',
-          [
-            ParserErrorCode.expectedSwitchStatementBody,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedSwitchStatementBody, diag.expectedToken],
           "switch (a) {}",
           failing: ['block'],
         ),
         TestDescriptor(
           'rightParen',
           'switch (a)',
-          [ParserErrorCode.expectedSwitchStatementBody],
+          [diag.expectedSwitchStatementBody],
           "switch (a) {}",
           failing: ['block'],
         ),
         TestDescriptor(
           'leftBrace',
           'switch (a) {',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "switch (a) {}",
           failing: allExceptEof,
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
index 062491a..b9f895d 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
@@ -1,8 +1,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:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -16,7 +15,7 @@
       TestDescriptor(
         'const',
         'const',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "const _s_;",
         failing: [
           'class',
@@ -25,97 +24,77 @@
           'getter',
           'setter',
         ],
-        expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        expectedDiagnosticsInValidCode: [diag.constNotInitialized],
       ),
       TestDescriptor(
         'constName',
         'const a',
-        [
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        [diag.expectedToken, diag.constNotInitialized],
         "const a;",
         failing: ['functionNonVoid', 'getter', 'setter', 'mixin'],
-        expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        expectedDiagnosticsInValidCode: [diag.constNotInitialized],
       ),
       TestDescriptor(
         'constTypeName',
         'const int a',
-        [
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        [diag.expectedToken, diag.constNotInitialized],
         "const int a;",
-        expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        expectedDiagnosticsInValidCode: [diag.constNotInitialized],
       ),
       TestDescriptor(
         'constNameComma',
         'const a,',
-        [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        [diag.missingIdentifier, diag.expectedToken, diag.constNotInitialized],
         "const a, _s_;",
         failing: ['functionNonVoid', 'getter'],
         expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-          CompileTimeErrorCode.constNotInitialized,
+          diag.constNotInitialized,
+          diag.constNotInitialized,
         ],
       ),
       TestDescriptor(
         'constTypeNameComma',
         'const int a,',
-        [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.constNotInitialized,
-        ],
+        [diag.missingIdentifier, diag.expectedToken, diag.constNotInitialized],
         "const int a, _s_;",
         failing: ['functionNonVoid', 'getter'],
         expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-          CompileTimeErrorCode.constNotInitialized,
+          diag.constNotInitialized,
+          diag.constNotInitialized,
         ],
       ),
       TestDescriptor(
         'constNameCommaName',
         'const a, b',
         [
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.constNotInitialized,
-          CompileTimeErrorCode.constNotInitialized,
+          diag.expectedToken,
+          diag.constNotInitialized,
+          diag.constNotInitialized,
         ],
         "const a, b;",
         expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-          CompileTimeErrorCode.constNotInitialized,
+          diag.constNotInitialized,
+          diag.constNotInitialized,
         ],
       ),
       TestDescriptor(
         'constTypeNameCommaName',
         'const int a, b',
         [
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.constNotInitialized,
-          CompileTimeErrorCode.constNotInitialized,
+          diag.expectedToken,
+          diag.constNotInitialized,
+          diag.constNotInitialized,
         ],
         "const int a, b;",
         expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.constNotInitialized,
-          CompileTimeErrorCode.constNotInitialized,
+          diag.constNotInitialized,
+          diag.constNotInitialized,
         ],
       ),
       TestDescriptor(
         'final',
         'final',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "final _s_;",
         failing: [
           'class',
@@ -126,66 +105,49 @@
           'mixin',
           'setter',
         ],
-        expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.finalNotInitialized,
-        ],
+        expectedDiagnosticsInValidCode: [diag.finalNotInitialized],
       ),
       TestDescriptor(
         'finalName',
         'final a',
-        [
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.finalNotInitialized,
-        ],
+        [diag.expectedToken, diag.finalNotInitialized],
         "final a;",
         failing: ['functionNonVoid', 'getter', 'setter', 'mixin'],
-        expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.finalNotInitialized,
-        ],
+        expectedDiagnosticsInValidCode: [diag.finalNotInitialized],
       ),
       TestDescriptor(
         'finalTypeName',
         'final int a',
-        [
-          ParserErrorCode.expectedToken,
-          CompileTimeErrorCode.finalNotInitialized,
-        ],
+        [diag.expectedToken, diag.finalNotInitialized],
         "final int a;",
-        expectedDiagnosticsInValidCode: [
-          CompileTimeErrorCode.finalNotInitialized,
-        ],
+        expectedDiagnosticsInValidCode: [diag.finalNotInitialized],
       ),
       TestDescriptor(
         'type',
         'int',
-        [
-          ParserErrorCode.missingConstFinalVarOrType,
-          ParserErrorCode.expectedToken,
-        ],
+        [diag.missingConstFinalVarOrType, diag.expectedToken],
         "int _s_;",
         allFailing: true,
       ),
-      TestDescriptor('typeName', 'int a', [
-        ParserErrorCode.expectedToken,
-      ], "int a;"),
+      TestDescriptor('typeName', 'int a', [diag.expectedToken], "int a;"),
       TestDescriptor(
         'var',
         'var',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "var _s_;",
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'setter'],
       ),
       TestDescriptor(
         'varName',
         'var a',
-        [ParserErrorCode.expectedToken],
+        [diag.expectedToken],
         "var a;",
         failing: ['functionNonVoid', 'getter', 'mixin', 'setter'],
       ),
       TestDescriptor(
         'varNameEquals',
         'var a =',
-        [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+        [diag.missingIdentifier, diag.expectedToken],
         "var a = _s_;",
         failing: [
           'class',
@@ -200,7 +162,7 @@
         ],
       ),
       TestDescriptor('varNameEqualsExpression', 'var a = b', [
-        ParserErrorCode.expectedToken,
+        diag.expectedToken,
       ], "var a = b;"),
     ], PartialCodeTest.declarationSuffixes);
   }
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/try_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/try_statement_test.dart
index a00776f..606fcf8 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/try_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/try_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -21,17 +21,14 @@
         TestDescriptor(
           'keyword',
           'try',
-          [
-            ParserErrorCode.expectedTryStatementBody,
-            ParserErrorCode.missingCatchOrFinally,
-          ],
+          [diag.expectedTryStatementBody, diag.missingCatchOrFinally],
           "try {} finally {}",
           allFailing: true,
         ),
         TestDescriptor(
           'noCatchOrFinally',
           'try {}',
-          [ParserErrorCode.missingCatchOrFinally],
+          [diag.missingCatchOrFinally],
           "try {} finally {}",
           allFailing: true,
         ),
@@ -41,10 +38,7 @@
         TestDescriptor(
           'on',
           'try {} on',
-          [
-            ParserErrorCode.expectedTypeName,
-            ParserErrorCode.expectedCatchClauseBody,
-          ],
+          [diag.expectedTypeName, diag.expectedCatchClauseBody],
           "try {} on _s_ {}",
           failing: [
             'block',
@@ -56,7 +50,7 @@
         TestDescriptor(
           'on_identifier',
           'try {} on A',
-          [ParserErrorCode.expectedCatchClauseBody],
+          [diag.expectedCatchClauseBody],
           "try {} on A {}",
           failing: ['block'],
         ),
@@ -66,43 +60,28 @@
         TestDescriptor(
           'catch',
           'try {} catch',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody],
           "try {} catch (_s_) {}",
           failing: ['block'],
         ),
         TestDescriptor(
           'catch_leftParen',
           'try {} catch (',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-          ],
+          [diag.expectedToken, diag.catchSyntax, diag.expectedCatchClauseBody],
           "try {} catch (_s_) {}",
           failing: ['block', 'labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor(
           'catch_identifier',
           'try {} catch (e',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody, diag.expectedToken],
           "try {} catch (e) {}",
           failing: ['eof', 'block'],
         ),
         TestDescriptor(
           'catch_identifierComma',
           'try {} catch (e, ',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody, diag.expectedToken],
           "try {} catch (e, _s_) {}",
           failing: ['block', 'labeled', 'localFunctionNonVoid'],
         ),
@@ -112,9 +91,9 @@
           [
             // TODO(danrubel): Update parser to generate CATCH_SYNTAX
             // because in this situation there are not any extra parameters.
-            ParserErrorCode.catchSyntaxExtraParameters,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
+            diag.catchSyntaxExtraParameters,
+            diag.expectedCatchClauseBody,
+            diag.expectedToken,
           ],
           "try {} catch (e, s) {}",
           failing: ['eof', 'block'],
@@ -122,7 +101,7 @@
         TestDescriptor(
           'catch_rightParen',
           'try {} catch (e, s)',
-          [ParserErrorCode.expectedCatchClauseBody],
+          [diag.expectedCatchClauseBody],
           "try {} catch (e, s) {}",
           failing: ['block'],
         ),
@@ -132,43 +111,28 @@
         TestDescriptor(
           'on_catch',
           'try {} on A catch',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody],
           "try {} on A catch (_s_) {}",
           failing: ['block'],
         ),
         TestDescriptor(
           'on_catch_leftParen',
           'try {} on A catch (',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody, diag.expectedToken],
           "try {} on A catch (_s_) {}",
           failing: ['block', 'labeled', 'localFunctionNonVoid'],
         ),
         TestDescriptor(
           'on_catch_identifier',
           'try {} on A catch (e',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody, diag.expectedToken],
           "try {} on A catch (e) {}",
           failing: ['eof', 'block'],
         ),
         TestDescriptor(
           'on_catch_identifierComma',
           'try {} on A catch (e, ',
-          [
-            ParserErrorCode.catchSyntax,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.catchSyntax, diag.expectedCatchClauseBody, diag.expectedToken],
           "try {} on A catch (e, _s_) {}",
           failing: ['block', 'labeled', 'localFunctionNonVoid'],
         ),
@@ -178,9 +142,9 @@
           [
             // TODO(danrubel): Update parser to generate CATCH_SYNTAX
             // because in this situation there are not any extra parameters.
-            ParserErrorCode.catchSyntaxExtraParameters,
-            ParserErrorCode.expectedCatchClauseBody,
-            ParserErrorCode.expectedToken,
+            diag.catchSyntaxExtraParameters,
+            diag.expectedCatchClauseBody,
+            diag.expectedToken,
           ],
           "try {} on A catch (e, s) {}",
           failing: ['eof', 'block'],
@@ -188,7 +152,7 @@
         TestDescriptor(
           'on_catch_rightParen',
           'try {} on A catch (e, s)',
-          [ParserErrorCode.expectedCatchClauseBody],
+          [diag.expectedCatchClauseBody],
           "try {} on A catch (e, s) {}",
           failing: ['block'],
         ),
@@ -198,7 +162,7 @@
         TestDescriptor(
           'finally_noCatch_noBlock',
           'try {} finally',
-          [ParserErrorCode.expectedFinallyClauseBody],
+          [diag.expectedFinallyClauseBody],
           "try {} finally {}",
           failing: ['block'],
         ),
@@ -208,7 +172,7 @@
         TestDescriptor(
           'finally_catch_noBlock',
           'try {} catch (e) {} finally',
-          [ParserErrorCode.expectedFinallyClauseBody],
+          [diag.expectedFinallyClauseBody],
           "try {} catch (e) {} finally {}",
           failing: ['block'],
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart
index 0d2c745..8a04443 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/typedef_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -17,9 +17,9 @@
         'keyword',
         'typedef',
         [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.missingTypedefParameters,
-          ParserErrorCode.expectedToken,
+          diag.missingIdentifier,
+          diag.missingTypedefParameters,
+          diag.expectedToken,
         ],
         "typedef _s_();",
         failing: ['functionVoid', 'functionNonVoid', 'getter'],
@@ -27,28 +27,21 @@
       TestDescriptor(
         'name',
         'typedef T',
-        [
-          ParserErrorCode.missingTypedefParameters,
-          ParserErrorCode.expectedToken,
-        ],
+        [diag.missingTypedefParameters, diag.expectedToken],
         "typedef T();",
         failing: ['functionNonVoid', 'getter', 'mixin', 'setter'],
       ),
       TestDescriptor(
         'keywordEquals',
         'typedef =',
-        [
-          ParserErrorCode.missingIdentifier,
-          ParserErrorCode.expectedTypeName,
-          ParserErrorCode.expectedToken,
-        ],
+        [diag.missingIdentifier, diag.expectedTypeName, diag.expectedToken],
         "typedef _s_ = _s_;",
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
       TestDescriptor(
         'equals',
         'typedef T =',
-        [ParserErrorCode.expectedTypeName, ParserErrorCode.expectedToken],
+        [diag.expectedTypeName, diag.expectedToken],
         "typedef T = _s_;",
         failing: ['functionVoid', 'functionNonVoid', 'getter', 'mixin'],
       ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/while_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/while_statement_test.dart
index 85b7af7..49c8478 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/while_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/while_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -19,44 +19,40 @@
           'keyword',
           'while',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "while (_s_)",
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
         ),
         TestDescriptor(
           'leftParen',
           'while (',
           [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.expectedToken,
+            diag.missingIdentifier,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
           "while (_s_)",
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
         ),
         TestDescriptor(
           'condition',
           'while (a',
-          [
-            ParserErrorCode.expectedToken,
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
-          ],
+          [diag.expectedToken, diag.missingIdentifier, diag.expectedToken],
           "while (a)",
           expectedDiagnosticsInValidCode: [
-            ParserErrorCode.missingIdentifier,
-            ParserErrorCode.expectedToken,
+            diag.missingIdentifier,
+            diag.expectedToken,
           ],
         ),
       ],
@@ -70,14 +66,14 @@
         TestDescriptor(
           'keyword',
           'while',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "while (_s_)",
           failing: ['break', 'continue'],
         ),
         TestDescriptor(
           'leftParen',
           'while (',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "while (_s_)",
           failing: [
             'assert',
@@ -94,7 +90,7 @@
         TestDescriptor(
           'condition',
           'while (a',
-          [ParserErrorCode.expectedToken],
+          [diag.expectedToken],
           "while (a)",
           failing: ['break', 'continue'],
         ),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/yield_statement_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/yield_statement_test.dart
index dc6ca6d..775f4c7 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/yield_statement_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/yield_statement_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 
 import 'partial_code_support.dart';
 
@@ -18,7 +18,7 @@
         TestDescriptor(
           'keyword',
           'yield',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "yield _s_;",
           failing: [
             'assert',
@@ -31,12 +31,12 @@
           ],
         ),
         TestDescriptor('expression', 'yield a', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "yield a;"),
         TestDescriptor(
           'star',
           'yield *',
-          [ParserErrorCode.missingIdentifier, ParserErrorCode.expectedToken],
+          [diag.missingIdentifier, diag.expectedToken],
           "yield * _s_;",
           failing: [
             'assert',
@@ -49,7 +49,7 @@
           ],
         ),
         TestDescriptor('star_expression', 'yield * a', [
-          ParserErrorCode.expectedToken,
+          diag.expectedToken,
         ], "yield * a;"),
       ],
       PartialCodeTest.statementSuffixes,
diff --git a/pkg/analyzer/test/src/fasta/recovery/result_comparator_test.dart b/pkg/analyzer/test/src/fasta/recovery/result_comparator_test.dart
index 06f13d5..995e5b2 100644
--- a/pkg/analyzer/test/src/fasta/recovery/result_comparator_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/result_comparator_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -22,7 +22,7 @@
     _assertMismatched(
       actual: parseExpression(
         'f(+x)',
-        diagnostics: [error(ParserErrorCode.missingIdentifier, 2, 1)],
+        diagnostics: [error(diag.missingIdentifier, 2, 1)],
       ),
       expected: parseExpression('f(foo+x)'),
       expectedFailureMessage: '''
@@ -54,7 +54,7 @@
     _assertMatched(
       actual: parseExpression(
         'f(+x)',
-        diagnostics: [error(ParserErrorCode.missingIdentifier, 2, 1)],
+        diagnostics: [error(diag.missingIdentifier, 2, 1)],
       ),
       expected: parseExpression('f(_s_+x)'),
     );
@@ -123,7 +123,7 @@
 Expected a keyword
 But found token "C"
   type=IDENTIFIER, length=1
-  path: ((root as CompilationUnit).declarations[0] as ClassDeclaration).name
+  path: (((root as CompilationUnit).declarations[0] as ClassDeclaration).namePart as NameWithTypeParameters).typeName
 ''',
     );
   }
@@ -133,9 +133,7 @@
     _assertMatched(
       actual: parseCompilationUnit(
         'class C { C(this); }',
-        diagnostics: [
-          error(ParserErrorCode.expectedIdentifierButGotKeyword, 12, 4),
-        ],
+        diagnostics: [error(diag.expectedIdentifierButGotKeyword, 12, 4)],
       ),
       expected: parseCompilationUnit('class C { C(_k_); }'),
     );
@@ -145,9 +143,7 @@
     _assertMismatched(
       actual: parseCompilationUnit(
         'class C { C(this); }',
-        diagnostics: [
-          error(ParserErrorCode.expectedIdentifierButGotKeyword, 12, 4),
-        ],
+        diagnostics: [error(diag.expectedIdentifierButGotKeyword, 12, 4)],
       ),
       expected: parseCompilationUnit('class C { C(foo); }'),
       expectedFailureMessage: '''
@@ -155,7 +151,7 @@
   type=IDENTIFIER, length=3
 But found token "this"
   type=THIS, length=4
-  path: (((((root as CompilationUnit).declarations[0] as ClassDeclaration).members[0] as ConstructorDeclaration).parameters as FormalParameterList).parameters[0] as SimpleFormalParameter).name
+  path: ((((((root as CompilationUnit).declarations[0] as ClassDeclaration).body as BlockClassBody).members[0] as ConstructorDeclaration).parameters as FormalParameterList).parameters[0] as SimpleFormalParameter).name
 ''',
     );
   }
@@ -369,7 +365,7 @@
   type=IDENTIFIER, length=1
 But found token "C"
   type=IDENTIFIER, length=1
-  path: ((root as CompilationUnit).declarations[0] as ClassDeclaration).name
+  path: (((root as CompilationUnit).declarations[0] as ClassDeclaration).namePart as NameWithTypeParameters).typeName
 ''',
     );
   }
@@ -388,8 +384,8 @@
       actual: parseCompilationUnit(
         'export',
         diagnostics: [
-          error(ParserErrorCode.expectedToken, 0, 6),
-          error(ParserErrorCode.expectedStringLiteral, 6, 0),
+          error(diag.expectedToken, 0, 6),
+          error(diag.expectedStringLiteral, 6, 0),
         ],
       ),
       expected: parseCompilationUnit("export '';"),
@@ -398,8 +394,8 @@
       actual: parseCompilationUnit(
         'export',
         diagnostics: [
-          error(ParserErrorCode.expectedToken, 0, 6),
-          error(ParserErrorCode.expectedStringLiteral, 6, 0),
+          error(diag.expectedToken, 0, 6),
+          error(diag.expectedStringLiteral, 6, 0),
         ],
       ),
       expected: parseCompilationUnit('export "";'),
@@ -418,9 +414,9 @@
 f<T>> () => null;
 ''',
         diagnostics: [
-          error(ParserErrorCode.missingFunctionParameters, 0, 1),
-          error(ParserErrorCode.missingFunctionBody, 4, 1),
-          error(ParserErrorCode.topLevelOperator, 4, 1),
+          error(diag.missingFunctionParameters, 0, 1),
+          error(diag.missingFunctionBody, 4, 1),
+          error(diag.topLevelOperator, 4, 1),
         ],
       ),
       expected: parseCompilationUnit(
@@ -428,9 +424,9 @@
 f<T> >() => null;
 ''',
         diagnostics: [
-          error(ParserErrorCode.missingFunctionParameters, 0, 1),
-          error(ParserErrorCode.missingFunctionBody, 5, 1),
-          error(ParserErrorCode.topLevelOperator, 5, 1),
+          error(diag.missingFunctionParameters, 0, 1),
+          error(diag.missingFunctionBody, 5, 1),
+          error(diag.topLevelOperator, 5, 1),
         ],
       ),
     );
@@ -443,15 +439,15 @@
 mixin Foo implements
 ''',
         diagnostics: [
-          error(ParserErrorCode.expectedTypeName, 21, 0),
-          error(ParserErrorCode.expectedMixinBody, 21, 0),
+          error(diag.expectedTypeName, 21, 0),
+          error(diag.expectedMixinBody, 21, 0),
         ],
       ),
       expected: parseCompilationUnit(
         '''
 mixin Foo implements {}
 ''',
-        diagnostics: [error(ParserErrorCode.expectedTypeName, 21, 1)],
+        diagnostics: [error(diag.expectedTypeName, 21, 1)],
       ),
     );
   }
diff --git a/pkg/analyzer/test/src/ignore_comments/diagnostic_suppression_test.dart b/pkg/analyzer/test/src/ignore_comments/diagnostic_suppression_test.dart
index a4373ae..cedc272 100644
--- a/pkg/analyzer/test/src/ignore_comments/diagnostic_suppression_test.dart
+++ b/pkg/analyzer/test/src/ignore_comments/diagnostic_suppression_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/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/utilities/utilities.dart';
-import 'package:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../src/dart/resolution/context_collection_resolution.dart';
@@ -37,10 +37,7 @@
 int x = '';
 int _y = 0; //INVALID_ASSIGNMENT
 ''',
-      [
-        error(CompileTimeErrorCode.invalidAssignment, 34, 2),
-        error(WarningCode.unusedElement, 42, 2),
-      ],
+      [error(diag.invalidAssignment, 34, 2), error(diag.unusedElement, 42, 2)],
     );
   }
 
@@ -52,7 +49,7 @@
 // ... but no ignore here ...
 var y = x + ''; //ARGUMENT_TYPE_NOT_ASSIGNABLE
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 90, 2)],
+      [error(diag.argumentTypeNotAssignable, 90, 2)],
     );
   }
 
@@ -63,7 +60,7 @@
 // ... but no ignore here ...
 var y = x + ''; //ARGUMENT_TYPE_NOT_ASSIGNABLE
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 90, 2)],
+      [error(diag.argumentTypeNotAssignable, 90, 2)],
     );
   }
 
@@ -74,7 +71,7 @@
 var y = x + ''; //ARGUMENT_TYPE_NOT_ASSIGNABLE
 // ignore_for_file: unnecessary_cast
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 51, 2)],
+      [error(diag.argumentTypeNotAssignable, 51, 2)],
     );
   }
 
@@ -116,7 +113,7 @@
 int a = 0;
 int _x = 1;
 ''',
-      [error(WarningCode.unusedElement, 45, 2)],
+      [error(diag.unusedElement, 45, 2)],
     );
   }
 
@@ -134,7 +131,7 @@
 // ignore: unused_element
 String _foo = ''; //UNUSED_ELEMENT
 ''',
-      [error(WarningCode.unnecessaryCast, 28, 8)],
+      [error(diag.unnecessaryCast, 28, 8)],
     );
   }
 
@@ -145,7 +142,7 @@
 int x = (0 as int);
 String _foo = ''; // ignore: $ignoredCode
 ''',
-      [error(WarningCode.unnecessaryCast, 28, 8)],
+      [error(diag.unnecessaryCast, 28, 8)],
     );
   }
 
@@ -162,7 +159,7 @@
 // ignore: type=lint
 int _x = 1;
 ''',
-      [error(WarningCode.unusedElement, 25, 2)],
+      [error(diag.unusedElement, 25, 2)],
     );
   }
 
@@ -172,7 +169,7 @@
 // ignore: type=wrong
 void f(arg1(int)) {} // AVOID_TYPES_AS_PARAMETER_NAMES
 ''',
-      [error(LinterLintCode.avoidTypesAsParameterNamesFormalParameter, 34, 3)],
+      [error(diag.avoidTypesAsParameterNamesFormalParameter, 34, 3)],
     );
   }
 
@@ -181,6 +178,7 @@
     await assertNoErrorsInCode('''
 import 'package:meta/meta.dart';
 
+// ignore: deprecated_member_use
 int f({@Required('x') int? a}) => 0;
 
 // ignore: missing_required_param_with_details
@@ -202,8 +200,8 @@
 var y = x + ''; //ARGUMENT_TYPE_NOT_ASSIGNABLE
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 43, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 59, 2),
+        error(diag.invalidAssignment, 43, 2),
+        error(diag.argumentTypeNotAssignable, 59, 2),
       ],
     );
   }
@@ -216,8 +214,8 @@
 String y = x + ''; //INVALID_ASSIGNMENT, ARGUMENT_TYPE_NOT_ASSIGNABLE
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 33, 6),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 37, 2),
+        error(diag.invalidAssignment, 33, 6),
+        error(diag.argumentTypeNotAssignable, 37, 2),
       ],
     );
   }
@@ -228,7 +226,7 @@
 // ignore invalid_assignment
 String y = 3; //INVALID_ASSIGNMENT
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 40, 1)],
+      [error(diag.invalidAssignment, 40, 1)],
     );
   }
 
@@ -262,7 +260,7 @@
 // ignore: $ignoredCode
 String _foo = ''; //UNUSED_ELEMENT
 ''',
-      [error(WarningCode.unnecessaryCast, 9, 8)],
+      [error(diag.unnecessaryCast, 9, 8)],
     );
   }
 
@@ -273,8 +271,8 @@
 var y = x + ''; //ARGUMENT_TYPE_NOT_ASSIGNABLE
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 8, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 45, 2),
+        error(diag.invalidAssignment, 8, 2),
+        error(diag.argumentTypeNotAssignable, 45, 2),
       ],
     );
   }
@@ -285,7 +283,7 @@
 int x = (0 as int); // ignore: unnecessary_cast
 int y = (0 as int);
 ''',
-      [error(WarningCode.unnecessaryCast, 57, 8)],
+      [error(diag.unnecessaryCast, 57, 8)],
     );
   }
 
@@ -302,7 +300,7 @@
       '''
 f() => g();
 ''',
-      [error(CompileTimeErrorCode.undefinedFunction, 7, 1)],
+      [error(diag.undefinedFunction, 7, 1)],
     );
   }
 
diff --git a/pkg/analyzer/test/src/ignore_comments/test_all.dart b/pkg/analyzer/test/src/ignore_comments/test_all.dart
index 7db1109..500a308 100644
--- a/pkg/analyzer/test/src/ignore_comments/test_all.dart
+++ b/pkg/analyzer/test/src/ignore_comments/test_all.dart
@@ -11,5 +11,5 @@
   defineReflectiveSuite(() {
     diagnostic_suppression_test.main();
     ignore_info.main();
-  }, name: 'src');
+  }, name: 'ignore_comments');
 }
diff --git a/pkg/analyzer/test/src/lint/lint_rule_test.dart b/pkg/analyzer/test/src/lint/lint_rule_test.dart
index 9304701..f25004d 100644
--- a/pkg/analyzer/test/src/lint/lint_rule_test.dart
+++ b/pkg/analyzer/test/src/lint/lint_rule_test.dart
@@ -73,16 +73,14 @@
     'test_rule',
     'Test rule.',
     correctionMessage: 'Try test rule.',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.test_rule',
+    uniqueName: 'LintCode.test_rule',
   );
 
   static const LintCode customCode = LintCode(
     'hash_and_equals',
     'Override `==` if overriding `hashCode`.',
     correctionMessage: 'Implement `==`.',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.hash_and_equals',
+    uniqueName: 'LintCode.hash_and_equals',
   );
 
   TestRule() : super(name: 'test_rule', description: '');
diff --git a/pkg/analyzer/test/src/manifest/manifest_validator_test.dart b/pkg/analyzer/test/src/manifest/manifest_validator_test.dart
index d160b31..6813ea9 100644
--- a/pkg/analyzer/test/src/manifest/manifest_validator_test.dart
+++ b/pkg/analyzer/test/src/manifest/manifest_validator_test.dart
@@ -5,9 +5,9 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/file_source.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/manifest/manifest_validator.dart';
 import 'package:analyzer/src/manifest/manifest_values.dart';
-import 'package:analyzer/src/manifest/manifest_warning_code.dart';
 import 'package:analyzer_testing/resource_provider_mixin.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -467,7 +467,7 @@
     <uses-permission android:name="android.permission.CAMERA" />
 </manifest>
 ''',
-      [ManifestWarningCode.cameraPermissionsIncompatible],
+      [diag.cameraPermissionsIncompatible],
     );
   }
 
@@ -491,7 +491,7 @@
     <uses-feature android:name="android.hardware.touchscreen" />
 </manifest>
 ''',
-      [ManifestWarningCode.unsupportedChromeOsHardware],
+      [diag.unsupportedChromeOsHardware],
     );
   }
 
@@ -504,7 +504,7 @@
     <uses-feature android:name="android.software.home_screen" />
 </manifest>
 ''',
-      [ManifestWarningCode.unsupportedChromeOsHardware],
+      [diag.unsupportedChromeOsHardware],
     );
   }
 
@@ -528,7 +528,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android">
 </manifest>
 ''',
-      [ManifestWarningCode.noTouchscreenFeature],
+      [diag.noTouchscreenFeature],
     );
   }
 
@@ -546,7 +546,7 @@
   </application>
 </manifest>
 ''',
-      [ManifestWarningCode.nonResizableActivity],
+      [diag.nonResizableActivity],
     );
   }
 
@@ -564,7 +564,7 @@
   </application>
 </manifest>
 ''',
-      [ManifestWarningCode.settingOrientationOnActivity],
+      [diag.settingOrientationOnActivity],
     );
   }
 
@@ -576,7 +576,7 @@
     <uses-feature android:name="android.hardware.touchscreen" android:required="true"/>
 </manifest>
 ''',
-      [ManifestWarningCode.unsupportedChromeOsFeature],
+      [diag.unsupportedChromeOsFeature],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/options/analysis_options_test.dart b/pkg/analyzer/test/src/options/analysis_options_test.dart
index ea41f94..d237573 100644
--- a/pkg/analyzer/test/src/options/analysis_options_test.dart
+++ b/pkg/analyzer/test/src/options/analysis_options_test.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
 import 'package:analyzer/src/dart/analysis/analysis_options.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/lint/registry.dart';
@@ -56,7 +56,7 @@
     var unignorableCodeNames = analysisOptions.unignorableDiagnosticCodeNames;
     expect(
       unignorableCodeNames,
-      unorderedEquals(['ONE_ERROR_CODE', 'ANOTHER']),
+      unorderedEquals(['one_error_code', 'another']),
     );
   }
 
@@ -68,7 +68,7 @@
 ''');
 
     var unignorableCodeNames = analysisOptions.unignorableDiagnosticCodeNames;
-    expect(unignorableCodeNames, contains('INVALID_ANNOTATION'));
+    expect(unignorableCodeNames, contains('invalid_annotation'));
     expect(unignorableCodeNames.length, greaterThan(500));
   }
 
@@ -82,7 +82,22 @@
 ''');
 
     var unignorableCodeNames = analysisOptions.unignorableDiagnosticCodeNames;
-    expect(unignorableCodeNames, contains('UNUSED_IMPORT'));
+    expect(unignorableCodeNames, contains('unused_import'));
+  }
+
+  test_analyzer_cannotIgnore_severity_withProcessor_oldSeverity() {
+    var analysisOptions = parseOptions('''
+analyzer:
+  errors:
+    unused_import: error
+  cannot-ignore:
+    - warning
+''');
+
+    // Since `unused_import` has been reclassified as an error,
+    // `cannot-ignore: - warning` should not apply to it.
+    var unignorableCodeNames = analysisOptions.unignorableDiagnosticCodeNames;
+    expect(unignorableCodeNames, isNot(contains('unused_import')));
   }
 
   test_analyzer_chromeos_checks() {
@@ -117,7 +132,7 @@
       source: TestSource(),
       offset: 0,
       length: 1,
-      diagnosticCode: WarningCode.returnTypeInvalidForCatchError,
+      diagnosticCode: diag.returnTypeInvalidForCatchError,
       arguments: [
         ['x'],
         ['y'],
@@ -142,7 +157,7 @@
       source: TestSource(),
       offset: 0,
       length: 1,
-      diagnosticCode: WarningCode.unusedLocalVariable,
+      diagnosticCode: diag.unusedLocalVariable,
       arguments: [
         ['x'],
       ],
@@ -167,7 +182,7 @@
       source: TestSource(),
       offset: 0,
       length: 1,
-      diagnosticCode: CompileTimeErrorCode.invalidAssignment,
+      diagnosticCode: diag.invalidAssignment,
       arguments: [
         ['x'],
         ['y'],
@@ -193,7 +208,7 @@
       source: TestSource(),
       offset: 0,
       length: 1,
-      diagnosticCode: WarningCode.returnTypeInvalidForCatchError,
+      diagnosticCode: diag.returnTypeInvalidForCatchError,
       arguments: [
         ['x'],
         ['y'],
diff --git a/pkg/analyzer/test/src/options/options_file_validator_test.dart b/pkg/analyzer/test/src/options/options_file_validator_test.dart
index dd529ee..90b7d2b 100644
--- a/pkg/analyzer/test/src/options/options_file_validator_test.dart
+++ b/pkg/analyzer/test/src/options/options_file_validator_test.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
 import 'package:analyzer/src/analysis_options/options_file_validator.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/test_utilities/lint_registration_mixin.dart';
@@ -97,7 +97,7 @@
   cannot-ignore:
     - not_an_error_code
 ''',
-      [AnalysisOptionsWarningCode.unrecognizedErrorCode],
+      [diag.unrecognizedErrorCode],
     );
   }
 
@@ -125,7 +125,7 @@
   cannot-ignore:
     one_error_code: true
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -145,7 +145,7 @@
     one_error_code:
       foo: bar
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -163,7 +163,7 @@
   enable-experiment:
     - not-an-experiment
     ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithoutValues],
+      [diag.unsupportedOptionWithoutValues],
     );
   }
 
@@ -174,7 +174,7 @@
   enable-experiment:
     experiment: true
     ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -184,7 +184,7 @@
 analyzer:
   enable-experiment: 7
     ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -206,7 +206,7 @@
   errors:
     unused_local_variable: ftw
     ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues],
+      [diag.unsupportedOptionWithLegalValues],
     );
     expect(
       diagnostics.single.problemMessage.messageText(includeUrl: false),
@@ -221,7 +221,7 @@
   errors:
     unused_local_variable: null
     ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues],
+      [diag.unsupportedOptionWithLegalValues],
     );
     expect(
       diagnostics.single.problemMessage.messageText(includeUrl: false),
@@ -236,7 +236,7 @@
   errors:
     not_supported: ignore
     ''',
-      [AnalysisOptionsWarningCode.unrecognizedErrorCode],
+      [diag.unrecognizedErrorCode],
     );
     expect(
       diagnostics.single.problemMessage.messageText(includeUrl: false),
@@ -251,7 +251,7 @@
   errors:
     null: ignore
     ''',
-      [AnalysisOptionsWarningCode.unrecognizedErrorCode],
+      [diag.unrecognizedErrorCode],
     );
     expect(
       diagnostics.single.problemMessage.messageText(includeUrl: false),
@@ -267,7 +267,7 @@
     - invalid_annotation
     - unused_import
     ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -279,7 +279,7 @@
     invalid_annotation: ignore
     unused_import: [1, 2, 3]
     ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -290,7 +290,7 @@
   language:
     - notAnOption: true
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -300,7 +300,7 @@
 analyzer:
   language: true
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -318,7 +318,7 @@
   language:
     unsupported: true
 ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues],
+      [diag.unsupportedOptionWithLegalValues],
     );
   }
 
@@ -336,7 +336,7 @@
       '''
 analyzer: 7
     ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -354,7 +354,7 @@
 analyzer:
   not_supported: true
 ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues],
+      [diag.unsupportedOptionWithLegalValues],
     );
   }
 
@@ -373,7 +373,7 @@
   optional-checks:
     chromeos-manifest
 ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithLegalValues],
+      [diag.unsupportedOptionWithLegalValues],
     );
   }
 
@@ -384,7 +384,7 @@
   optional-checks:
     - chrome-os-manifest-checks
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -401,7 +401,7 @@
 code-style:
   format: 80
 ''',
-      [AnalysisOptionsWarningCode.unsupportedValue],
+      [diag.unsupportedValue],
     );
   }
 
@@ -417,7 +417,7 @@
       '''
 code-style: 7
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -427,7 +427,7 @@
 code-style:
   - format
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -436,7 +436,7 @@
       '''
 code-style: format
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -446,7 +446,7 @@
 code-style:
   not_supported: true
 ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithoutValues],
+      [diag.unsupportedOptionWithoutValues],
     );
   }
 
@@ -456,7 +456,7 @@
 formatter:
   wrong: 123
 ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithoutValues],
+      [diag.unsupportedOptionWithoutValues],
     );
   }
 
@@ -468,8 +468,8 @@
   wrong2: 123
 ''',
       [
-        AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
-        AnalysisOptionsWarningCode.unsupportedOptionWithoutValues,
+        diag.unsupportedOptionWithoutValues,
+        diag.unsupportedOptionWithoutValues,
       ],
     );
   }
@@ -480,7 +480,7 @@
 formatter:
   page_width: 123.45
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -490,7 +490,7 @@
 formatter:
   page_width: -123
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -500,7 +500,7 @@
 formatter:
   page_width: "123"
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -510,7 +510,7 @@
 formatter:
   page_width: 0
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -528,7 +528,7 @@
   trailing_commas:
     a: b
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -538,7 +538,7 @@
 formatter:
   trailing_commas: 1
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -548,7 +548,7 @@
 formatter:
   trailing_commas: foo
 ''',
-      [AnalysisOptionsWarningCode.invalidOption],
+      [diag.invalidOption],
     );
   }
 
@@ -580,7 +580,7 @@
 linter:
   unsupported: true
     ''',
-      [AnalysisOptionsWarningCode.unsupportedOptionWithLegalValue],
+      [diag.unsupportedOptionWithLegalValue],
     );
   }
 
@@ -612,7 +612,7 @@
       '''
 plugins: 7
 ''',
-      [AnalysisOptionsWarningCode.invalidSectionFormat],
+      [diag.invalidSectionFormat],
     );
   }
 
@@ -622,6 +622,22 @@
 ''', []);
   }
 
+  test_propagate_linter_exceptions() {
+    validate('''
+analyzer:
+  optional-checks:
+    propagate-linter-exceptions
+''', []);
+  }
+
+  test_propagate_linter_exceptions_mapKey() {
+    validate('''
+analyzer:
+  optional-checks:
+    propagate-linter-exceptions: true
+''', []);
+  }
+
   List<Diagnostic> validate(String source, List<DiagnosticCode> expected) {
     var options = optionsProvider.getOptionsFromString(source);
     var diagnostics = validator.validate(options);
@@ -711,7 +727,7 @@
   plugins:
     - plugin_two
 ''',
-      [error(AnalysisOptionsWarningCode.multiplePlugins, 55, 10)],
+      [error(diag.multiplePlugins, 55, 10)],
     );
   }
 
@@ -729,7 +745,7 @@
     plugin_two:
       foo: bar
 ''',
-      [error(AnalysisOptionsWarningCode.multiplePlugins, 53, 10)],
+      [error(diag.multiplePlugins, 53, 10)],
     );
   }
 
@@ -745,7 +761,7 @@
 analyzer:
   plugins: plugin_two
 ''',
-      [error(AnalysisOptionsWarningCode.multiplePlugins, 49, 10)],
+      [error(diag.multiplePlugins, 49, 10)],
     );
   }
 
@@ -765,7 +781,7 @@
   plugins:
     - plugin_two
 ''',
-      [error(AnalysisOptionsWarningCode.multiplePlugins, 55, 10)],
+      [error(diag.multiplePlugins, 55, 10)],
     );
   }
 
@@ -785,7 +801,7 @@
       r'''
 include: other_options.yaml
 ''',
-      [error(AnalysisOptionsWarningCode.includedFileWarning, 9, 18)],
+      [error(diag.includedFileWarning, 9, 18)],
     );
   }
 
@@ -799,8 +815,8 @@
     - plugin_three
 ''',
       [
-        error(AnalysisOptionsWarningCode.multiplePlugins, 44, 10),
-        error(AnalysisOptionsWarningCode.multiplePlugins, 61, 12),
+        error(diag.multiplePlugins, 44, 10),
+        error(diag.multiplePlugins, 61, 12),
       ],
     );
   }
@@ -831,7 +847,7 @@
     plugin_one: yes
     plugin_two: sure
 ''',
-      [error(AnalysisOptionsWarningCode.multiplePlugins, 45, 10)],
+      [error(diag.multiplePlugins, 45, 10)],
     );
   }
 
@@ -843,7 +859,7 @@
     plugin_one: yes
     plugin_one: sure
 ''',
-      [error(AnalysisOptionsErrorCode.parseError, 45, 10)],
+      [error(diag.parseError, 45, 10)],
     );
   }
 
@@ -868,7 +884,7 @@
     );
 
     assertErrorsInList(diagnostics, [
-      error(AnalysisOptionsWarningCode.pluginsInInnerOptions, 11, 12),
+      error(diag.pluginsInInnerOptions, 11, 12),
     ]);
   }
 
@@ -921,8 +937,7 @@
     'fantastic_test_rule',
     'Fantastic test rule.',
     correctionMessage: 'Try fantastic test rule.',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.fantastic_test_rule',
+    uniqueName: 'LintCode.fantastic_test_rule',
   );
 
   TestRule() : super(name: 'fantastic_test_rule', description: '');
diff --git a/pkg/analyzer/test/src/options/options_provider_test.dart b/pkg/analyzer/test/src/options/options_provider_test.dart
index 184aa97..49dbf6e 100644
--- a/pkg/analyzer/test/src/options/options_provider_test.dart
+++ b/pkg/analyzer/test/src/options/options_provider_test.dart
@@ -37,7 +37,7 @@
   @override
   bool matches(dynamic o, Map<dynamic, dynamic> options) {
     return o is ErrorProcessor &&
-        o.code.toUpperCase() == required.code.toUpperCase() &&
+        o.code == required.code &&
         o.severity == required.severity;
   }
 }
@@ -400,8 +400,7 @@
     'fantastic_test_rule',
     'Fantastic test rule.',
     correctionMessage: 'Try fantastic test rule.',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.fantastic_test_rule',
+    uniqueName: 'LintCode.fantastic_test_rule',
   );
 
   TestRule() : super(name: 'fantastic_test_rule', description: '');
diff --git a/pkg/analyzer/test/src/options/options_rule_validator_test.dart b/pkg/analyzer/test/src/options/options_rule_validator_test.dart
index f18b175..ac34b02 100644
--- a/pkg/analyzer/test/src/options/options_rule_validator_test.dart
+++ b/pkg/analyzer/test/src/options/options_rule_validator_test.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/analysis_options/error/option_codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/lint/options_rule_validator.dart';
 import 'package:analyzer/src/string_source.dart';
 import 'package:analyzer/src/test_utilities/test_code_format.dart';
@@ -106,7 +106,7 @@
 ''');
     await assertErrorsInCode(testCode.code, [
       error(
-        AnalysisOptionsWarningCode.incompatibleLintIncluded,
+        diag.incompatibleLintIncluded,
         testCode.range.sourceRange.offset,
         testCode.range.sourceRange.length,
         contextMessages: [
@@ -167,7 +167,7 @@
 ''');
     await assertErrorsInCode(testCode.code, [
       error(
-        AnalysisOptionsWarningCode.incompatibleLintIncluded,
+        diag.incompatibleLintIncluded,
         testCode.range.sourceRange.offset,
         testCode.range.sourceRange.length,
         contextMessages: [
@@ -206,7 +206,7 @@
 linter:
   rules:
 ''',
-      [AnalysisOptionsWarningCode.incompatibleLintIncluded],
+      [diag.incompatibleLintIncluded],
     );
   }
 
@@ -242,7 +242,7 @@
 ''');
     await assertErrorsInCode(testCode.code, [
       error(
-        AnalysisOptionsWarningCode.incompatibleLintFiles,
+        diag.incompatibleLintFiles,
         testCode.range.sourceRange.offset,
         testCode.range.sourceRange.length,
         contextMessages: [
@@ -287,7 +287,7 @@
     rule_neg:
     rule_pos: true
 ''',
-      [AnalysisOptionsWarningCode.incompatibleLintFiles],
+      [diag.incompatibleLintFiles],
     );
   }
 
@@ -305,7 +305,7 @@
   rules:
     rule_pos: invalid_value
 ''',
-      [AnalysisOptionsWarningCode.unsupportedValue],
+      [diag.unsupportedValue],
     );
   }
 
@@ -325,7 +325,7 @@
   rules:
     rule_neg: true
 ''',
-      [AnalysisOptionsWarningCode.incompatibleLintFiles],
+      [diag.incompatibleLintFiles],
     );
   }
 
@@ -348,7 +348,7 @@
   rules:
     - removed_in_2_12_lint
 ''',
-      [AnalysisOptionsWarningCode.removedLint],
+      [diag.removedLint],
       sdk: dart3_3,
     );
   }
@@ -364,7 +364,7 @@
   rules:
     - deprecated_lint
 ''',
-      [AnalysisOptionsWarningCode.deprecatedLint],
+      [diag.deprecatedLint],
     );
   }
 
@@ -375,7 +375,7 @@
   rules:
     deprecated_lint: false
 ''',
-      [AnalysisOptionsWarningCode.deprecatedLint],
+      [diag.deprecatedLint],
     );
   }
 
@@ -386,7 +386,7 @@
   rules:
     - deprecated_since_3_lint
 ''',
-      [AnalysisOptionsWarningCode.deprecatedLint],
+      [diag.deprecatedLint],
       sdk: dart3_3,
     );
   }
@@ -398,7 +398,7 @@
   rules:
     - deprecated_lint_with_replacement
 ''',
-      [AnalysisOptionsWarningCode.deprecatedLintWithReplacement],
+      [diag.deprecatedLintWithReplacement],
     );
   }
 
@@ -409,7 +409,7 @@
   rules:
     - deprecated_since_3_lint
 ''',
-      [AnalysisOptionsWarningCode.deprecatedLint],
+      [diag.deprecatedLint],
       sdk: dart3,
     );
   }
@@ -438,7 +438,7 @@
     - stable_lint
     - stable_lint
 ''',
-      [AnalysisOptionsWarningCode.duplicateRule],
+      [diag.duplicateRule],
     );
   }
 
@@ -451,7 +451,7 @@
 ''');
     await assertErrorsInCode(testCode.code, [
       error(
-        AnalysisOptionsWarningCode.incompatibleLint,
+        diag.incompatibleLint,
         testCode.ranges.last.sourceRange.offset,
         testCode.ranges.last.sourceRange.length,
         contextMessages: [
@@ -474,7 +474,7 @@
 ''');
     await assertErrorsInCode(testCode.code, [
       error(
-        AnalysisOptionsWarningCode.incompatibleLint,
+        diag.incompatibleLint,
         testCode.ranges.last.sourceRange.offset,
         testCode.ranges.last.sourceRange.length,
         contextMessages: [
@@ -519,7 +519,7 @@
   rules:
     - removed_in_2_12_lint
 ''',
-      [AnalysisOptionsWarningCode.removedLint],
+      [diag.removedLint],
       sdk: dart2_12,
     );
   }
@@ -539,7 +539,7 @@
   rules:
     - replaced_lint
 ''',
-      [AnalysisOptionsWarningCode.replacedLint],
+      [diag.replacedLint],
       sdk: dart3,
     );
   }
@@ -567,7 +567,7 @@
   rules:
     - this_rule_does_not_exist
 ''',
-      [AnalysisOptionsWarningCode.undefinedLint],
+      [diag.undefinedLint],
     );
   }
 
@@ -578,7 +578,7 @@
   rules:
     this_rule_does_not_exist: false
 ''',
-      [AnalysisOptionsWarningCode.undefinedLint],
+      [diag.undefinedLint],
     );
   }
 }
@@ -627,8 +627,17 @@
       StableLint(),
       RuleNeg(),
       RulePos(),
-      RemovedIn2_12Lint(),
-      ReplacedLint(),
+      RemovedAnalysisRule(
+        name: 'removed_in_2_12_lint',
+        since: dart2_12,
+        description: '',
+      ),
+      RemovedAnalysisRule(
+        name: 'replaced_lint',
+        since: dart3,
+        replacedBy: 'replacing_lint',
+        description: '',
+      ),
       ReplacingLint(),
     ]);
     super.setUp();
@@ -645,7 +654,7 @@
   rules:
     rule_pos: invalid_value
 ''',
-      [AnalysisOptionsWarningCode.unsupportedValue],
+      [diag.unsupportedValue],
     );
   }
 
@@ -710,22 +719,6 @@
   }
 }
 
-class RemovedIn2_12Lint extends TestLintRule {
-  RemovedIn2_12Lint()
-    : super(
-        name: 'removed_in_2_12_lint',
-        state: RuleState.removed(since: dart2_12),
-      );
-}
-
-class ReplacedLint extends TestLintRule {
-  ReplacedLint()
-    : super(
-        name: 'replaced_lint',
-        state: RuleState.removed(since: dart3, replacedBy: 'replacing_lint'),
-      );
-}
-
 class ReplacingLint extends TestLintRule {
   ReplacingLint() : super(name: 'replacing_lint');
 }
@@ -753,8 +746,7 @@
     'lint_code',
     'Lint code.',
     correctionMessage: 'Lint code.',
-    // ignore: deprecated_member_use_from_same_package
-    uniqueNameCheck: 'LintCode.lint_code',
+    uniqueName: 'LintCode.lint_code',
   );
 
   TestLintRule({required super.name, super.state}) : super(description: '');
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_test.dart
index d4e65d9..f4e4961 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_directory_does_not_exist_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -33,7 +33,7 @@
   assets:
     - assets/logos/
 ''',
-      [PubspecWarningCode.assetDirectoryDoesNotExist],
+      [diag.assetDirectoryDoesNotExist],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
index e0fed4a..5f0bc86 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_does_not_exist_test.dart
@@ -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:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -23,7 +23,7 @@
   assets:
     - assets/my_icon.png
 ''',
-      [PubspecWarningCode.assetDoesNotExist],
+      [diag.assetDoesNotExist],
     );
   }
 
@@ -56,7 +56,7 @@
   assets:
     - packages/icons/my_icon.png
 ''',
-      [PubspecWarningCode.assetDoesNotExist],
+      [diag.assetDoesNotExist],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
index 6a658c4..7291568 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_field_not_list_test.dart
@@ -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:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -22,7 +22,7 @@
 flutter:
   assets:
 ''',
-      [PubspecWarningCode.assetFieldNotList],
+      [diag.assetFieldNotList],
     );
   }
 
@@ -33,7 +33,7 @@
 flutter:
   assets: assets/my_icon.png
 ''',
-      [PubspecWarningCode.assetFieldNotList],
+      [diag.assetFieldNotList],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_missing_path_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_missing_path_test.dart
index 232fa08..b8ab4fa 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_missing_path_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_missing_path_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -36,7 +36,7 @@
     - flavors:
         - premium
 ''',
-      [PubspecWarningCode.assetMissingPath],
+      [diag.assetMissingPath],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_or_map_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_or_map_test.dart
index 0745b6c..d163565 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_or_map_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_not_string_or_map_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -23,7 +23,7 @@
   assets:
     - 23
 ''',
-      [PubspecWarningCode.assetNotStringOrMap],
+      [diag.assetNotStringOrMap],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/asset_path_not_string_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/asset_path_not_string_test.dart
index cf1ca8a..3cc2c32 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/asset_path_not_string_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/asset_path_not_string_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -23,7 +23,7 @@
   assets:
     - path: [one, two, three]
 ''',
-      [PubspecWarningCode.assetPathNotString],
+      [diag.assetPathNotString],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_test.dart
index be6e605..b0473fb 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/dependencies_field_not_map_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -28,7 +28,7 @@
 name: sample
 dependencies: true
 ''',
-      [PubspecWarningCode.dependenciesFieldNotMap],
+      [diag.dependenciesFieldNotMap],
     );
   }
 
@@ -46,7 +46,7 @@
 name: sample
 dev_dependencies: true
 ''',
-      [PubspecWarningCode.dependenciesFieldNotMap],
+      [diag.dependenciesFieldNotMap],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/deprecated_field_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/deprecated_field_test.dart
index 29d3b5c..49467e4 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/deprecated_field_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/deprecated_field_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -21,7 +21,7 @@
 name: sample
 author: foo
 ''',
-      [PubspecWarningCode.deprecatedField],
+      [diag.deprecatedField],
     );
   }
 
@@ -33,7 +33,7 @@
   - foo
   - bar
 ''',
-      [PubspecWarningCode.deprecatedField],
+      [diag.deprecatedField],
     );
   }
 
@@ -44,7 +44,7 @@
 transformers:
   - foo
 ''',
-      [PubspecWarningCode.deprecatedField],
+      [diag.deprecatedField],
     );
   }
 
@@ -54,7 +54,7 @@
 name: sample
 web: foo
 ''',
-      [PubspecWarningCode.deprecatedField],
+      [diag.deprecatedField],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
index 5073881..6077719 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/flutter_field_not_map_test.dart
@@ -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:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -34,7 +34,7 @@
 name: sample
 flutter: true
 ''',
-      [PubspecWarningCode.flutterFieldNotMap],
+      [diag.flutterFieldNotMap],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/ignore_diagnostic_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/ignore_diagnostic_test.dart
index b676d63..545e118 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/ignore_diagnostic_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/ignore_diagnostic_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -27,7 +27,7 @@
   bar:
     git: git@github.com:foo/bar.git
 ''',
-      [PubspecWarningCode.invalidDependency],
+      [diag.invalidDependency],
     );
   }
 
@@ -56,7 +56,7 @@
   bar:
     git: git@github.com:foo/bar.git
 ''',
-      [PubspecWarningCode.invalidDependency],
+      [diag.invalidDependency],
     );
   }
 
@@ -71,7 +71,7 @@
   bar:
     git: git@github.com:foo/bar.git # ignore: invalid_dependency
 ''',
-      [PubspecWarningCode.invalidDependency],
+      [diag.invalidDependency],
     );
   }
 
@@ -86,10 +86,7 @@
   bar:
     git: git@github.com:foo/bar.git
 ''',
-      [
-        PubspecWarningCode.invalidDependency,
-        PubspecWarningCode.invalidDependency,
-      ],
+      [diag.invalidDependency, diag.invalidDependency],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_test.dart
index e8bba9a..257b422 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/invalid_dependency_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -68,7 +68,7 @@
       url: git@github.com:foo/foo.git
       path: path/to/foo
 ''',
-      [PubspecWarningCode.invalidDependency],
+      [diag.invalidDependency],
     );
   }
 
@@ -170,7 +170,7 @@
   foo:
     path: /foo
 ''',
-      [PubspecWarningCode.invalidDependency],
+      [diag.invalidDependency],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/invalid_platforms_field_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/invalid_platforms_field_test.dart
index e76e31a..c29960e 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/invalid_platforms_field_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/invalid_platforms_field_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -33,7 +33,7 @@
   - ios
   - web
 ''',
-      [PubspecWarningCode.invalidPlatformsField],
+      [diag.invalidPlatformsField],
     );
   }
 
@@ -44,7 +44,7 @@
 version: 1.0.0
 platforms: true
 ''',
-      [PubspecWarningCode.invalidPlatformsField],
+      [diag.invalidPlatformsField],
     );
   }
 
@@ -55,7 +55,7 @@
 version: 1.0.0
 platforms: []
 ''',
-      [PubspecWarningCode.invalidPlatformsField],
+      [diag.invalidPlatformsField],
     );
   }
 
@@ -66,7 +66,7 @@
 version: 1.0.0
 platforms: 42
 ''',
-      [PubspecWarningCode.invalidPlatformsField],
+      [diag.invalidPlatformsField],
     );
   }
 
@@ -103,7 +103,7 @@
 platforms:
   windåse:
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 
@@ -115,7 +115,7 @@
 platforms:
   Windows:
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/missing_dependency_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/missing_dependency_test.dart
index 556c561..74d6be6 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/missing_dependency_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/missing_dependency_test.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/source/file_source.dart';
 import 'package:analyzer/source/source.dart';
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/pubspec/validators/missing_dependency_validator.dart';
 import 'package:analyzer_testing/resource_provider_mixin.dart';
 import 'package:matcher/expect.dart';
@@ -24,7 +24,7 @@
   late Source _source;
 
   /// Asserts that when the validator is used on the given [content], a
-  /// [PubspecWarningCode.missingDependency] warning is produced.
+  /// [diag.missingDependency] warning is produced.
   void assertErrors(
     String content, {
     required Set<String> usedDeps,
@@ -35,7 +35,7 @@
   }) {
     var error = _runValidator(content, usedDeps, usedDevDeps).first;
     var data = MissingDependencyData.byDiagnostic[error]!;
-    expect(error.diagnosticCode, PubspecWarningCode.missingDependency);
+    expect(error.diagnosticCode, diag.missingDependency);
     expect(data.addDeps, addDeps);
     expect(data.addDevDeps, addDevDeps);
     expect(data.removeDevDeps, removeDevDeps);
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/missing_name_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/missing_name_test.dart
index 251bd47..0e05778 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/missing_name_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/missing_name_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -16,7 +16,7 @@
 @reflectiveTest
 class MissingNameTest extends PubspecDiagnosticTest {
   test_missingName_error() {
-    assertErrors('', [PubspecWarningCode.missingName]);
+    assertErrors('', [diag.missingName]);
   }
 
   test_missingName_noError() {
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_test.dart
index 8748e11..1fb6fb2 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/name_not_string_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -20,7 +20,7 @@
       '''
 name: 42
 ''',
-      [PubspecWarningCode.nameNotString],
+      [diag.nameNotString],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_test.dart
index 3f3d03d..2385755 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/path_does_not_exist_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -23,7 +23,7 @@
   foo:
     path: does/not/exist
 ''',
-      [PubspecWarningCode.pathDoesNotExist],
+      [diag.pathDoesNotExist],
     );
   }
 
@@ -35,7 +35,7 @@
   foo:
     path: does/not/exist
 ''',
-      [PubspecWarningCode.pathDoesNotExist],
+      [diag.pathDoesNotExist],
     );
   }
 
@@ -60,7 +60,7 @@
   - description: '...'
     path: example/screenshots/no.webp
 ''',
-      [PubspecWarningCode.pathDoesNotExist],
+      [diag.pathDoesNotExist],
     );
   }
 
@@ -74,10 +74,7 @@
   - description: '...'
     path: example/screenshots/no.webp
 ''',
-      [
-        PubspecWarningCode.pathDoesNotExist,
-        PubspecWarningCode.pathDoesNotExist,
-      ],
+      [diag.pathDoesNotExist, diag.pathDoesNotExist],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_test.dart
index 4930b34..5257cb1 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/path_not_posix_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -29,7 +29,7 @@
   foo:
     path: \foo
 ''',
-      [PubspecWarningCode.pathNotPosix],
+      [diag.pathNotPosix],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_test.dart
index 5db3eb5..01df59f 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/path_pubspec_does_not_exist_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -24,7 +24,7 @@
   foo:
     path: /foo
 ''',
-      [PubspecWarningCode.pathPubspecDoesNotExist],
+      [diag.pathPubspecDoesNotExist],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/platform_value_disallowed_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/platform_value_disallowed_test.dart
index fbf4233..d9689c2 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/platform_value_disallowed_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/platform_value_disallowed_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -36,7 +36,7 @@
   ios:
   web: "chrome" # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -50,7 +50,7 @@
   ios:
   web: []  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -64,7 +64,7 @@
   ios:
   web: {}  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -78,7 +78,7 @@
   ios:
   web: False  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -92,7 +92,7 @@
   ios:
   web: 42  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -106,7 +106,7 @@
   ios:
   web: [1,2,3]  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -122,7 +122,7 @@
    - foo
    - bar  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -137,7 +137,7 @@
   web:
     foo: bar  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 
@@ -151,7 +151,7 @@
   ios:
   web: True  # <-- this is not allowed
 ''',
-      [PubspecWarningCode.platformValueDisallowed],
+      [diag.platformValueDisallowed],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/unknown_platforms_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/unknown_platforms_test.dart
index ee95057..fdd7e51 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/unknown_platforms_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/unknown_platforms_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -48,7 +48,7 @@
 platforms:
   True:
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 
@@ -60,7 +60,7 @@
 platforms:
   browser: # the correct platform is "web"
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 
@@ -72,7 +72,7 @@
 platforms:
   33:
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 
@@ -84,7 +84,7 @@
 platforms:
   [1, 2]:
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 
@@ -96,7 +96,7 @@
 platforms:
   null:
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 
@@ -108,7 +108,7 @@
 platforms:
   win32: # the correct platform is "windows"
 ''',
-      [PubspecWarningCode.unknownPlatform],
+      [diag.unknownPlatform],
     );
   }
 }
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_test.dart
index db0afd8..e917524 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/unnecessary_dev_dependency_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -24,7 +24,7 @@
 dev_dependencies:
   a: any
 ''',
-      [PubspecWarningCode.unnecessaryDevDependency],
+      [diag.unnecessaryDevDependency],
     );
   }
 
diff --git a/pkg/analyzer/test/src/pubspec/diagnostics/workspace_field_test.dart b/pkg/analyzer/test/src/pubspec/diagnostics/workspace_field_test.dart
index b01f592..174cabc 100644
--- a/pkg/analyzer/test/src/pubspec/diagnostics/workspace_field_test.dart
+++ b/pkg/analyzer/test/src/pubspec/diagnostics/workspace_field_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.
 
-import 'package:analyzer/src/pubspec/pubspec_warning_code.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../pubspec_test_support.dart';
@@ -21,7 +21,7 @@
 name: sample
 workspace: package1
 ''',
-      [PubspecWarningCode.workspaceFieldNotList],
+      [diag.workspaceFieldNotList],
     );
   }
 
@@ -33,7 +33,7 @@
 workspace:
     - 23
 ''',
-      [PubspecWarningCode.workspaceValueNotString],
+      [diag.workspaceValueNotString],
     );
   }
 
@@ -45,7 +45,7 @@
 workspace:
     - /sample2
 ''',
-      [PubspecWarningCode.workspaceValueNotSubdirectory],
+      [diag.workspaceValueNotSubdirectory],
     );
   }
 
diff --git a/pkg/analyzer/test/src/source/package_map_resolver_test.dart b/pkg/analyzer/test/src/source/package_map_resolver_test.dart
index 377fa47..966726a 100644
--- a/pkg/analyzer/test/src/source/package_map_resolver_test.dart
+++ b/pkg/analyzer/test/src/source/package_map_resolver_test.dart
@@ -71,6 +71,25 @@
     }
   }
 
+  void test_pathToUri_nestedInLib() {
+    String rootPkgLib = convertPath('/root/lib');
+    String nestedPkgLib = convertPath('/root/lib/nested/lib');
+    String nestedPkgFile = convertPath('/root/lib/nested/lib/nested.dart');
+
+    provider.newFile(nestedPkgFile, '');
+
+    PackageMapUriResolver resolver = PackageMapUriResolver(
+      provider,
+      <String, List<Folder>>{
+        'root': <Folder>[provider.getFolder(rootPkgLib)],
+        'nested': <Folder>[provider.getFolder(nestedPkgLib)],
+      },
+    );
+
+    var uri = resolver.pathToUri(nestedPkgFile);
+    expect(uri, Uri.parse('package:nested/nested.dart'));
+  }
+
   void test_resolve_multiple_folders() {
     var a = provider.newFile(convertPath('/aaa/a.dart'), '');
     var b = provider.newFile(convertPath('/bbb/b.dart'), '');
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index d3b8031..05c9207 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -7,7 +7,9 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/field_name_non_promotability_info.dart';
+import 'package:analyzer/src/error/inference_error.dart';
 import 'package:analyzer/src/summary2/export.dart';
+import 'package:analyzer/src/utilities/extensions/string.dart';
 import 'package:analyzer_utilities/testing/tree_string_sink.dart';
 import 'package:collection/collection.dart';
 import 'package:test/test.dart';
@@ -292,7 +294,7 @@
         'getters',
         e,
         e.getters.where((getter) {
-          if (!configuration.withSyntheticGetters && getter.isSynthetic) {
+          if (!configuration.withSyntheticGetters && getter.isOriginVariable) {
             return false;
           }
           return true;
@@ -323,6 +325,10 @@
     });
   }
 
+  void _assertHasExactlyOneTrue(List<bool> flags) {
+    expect(flags.where((flag) => flag).length, 1);
+  }
+
   void _assertNonSyntheticElementSelf(Element element) {
     expect(element.isSynthetic, isFalse);
     expect(element.nonSynthetic, same(element));
@@ -350,11 +356,24 @@
     // }
 
     _sink.writeIndentedLine(() {
+      // ignore: deprecated_member_use_from_same_package
       _sink.writeIf(e.isSynthetic, 'synthetic ');
       _sink.writeIf(e.isExternal, 'external ');
       _sink.writeIf(e.isConst, 'const ');
+      _sink.writeIf(e.isDeclaring, 'declaring ');
       _sink.writeIf(e.isFactory, 'factory ');
       _sink.writeIf(e.isExtensionTypeMember, 'isExtensionTypeMember ');
+
+      _assertHasExactlyOneTrue([
+        e.isOriginDeclaration,
+        e.isOriginImplicitDefault,
+        e.isOriginMixinApplication,
+      ]);
+      _sink.writeIf(e.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(e.isOriginImplicitDefault, 'isOriginImplicitDefault ');
+      _sink.writeIf(e.isOriginMixinApplication, 'isOriginMixinApplication ');
+
+      _sink.writeIf(e.isPrimary, 'isPrimary ');
       expect(e.isAbstract, isFalse);
       _writeElementName(e);
     });
@@ -407,10 +426,22 @@
     _sink.writeIndentedLine(() {
       _writeObjectId(f);
       _sink.writeIf(f.isAugmentation, 'augment ');
+      // ignore: deprecated_member_use_from_same_package
       _sink.writeIf(f.isSynthetic, 'synthetic ');
       _sink.writeIf(f.isExternal, 'external ');
       _sink.writeIf(f.isConst, 'const ');
       _sink.writeIf(f.isFactory, 'factory ');
+
+      _assertHasExactlyOneTrue([
+        f.isOriginDeclaration,
+        f.isOriginImplicitDefault,
+        f.isOriginMixinApplication,
+      ]);
+      _sink.writeIf(f.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(f.isOriginImplicitDefault, 'isOriginImplicitDefault ');
+      _sink.writeIf(f.isOriginMixinApplication, 'isOriginMixinApplication ');
+
+      _sink.writeIf(f.isPrimary, 'isPrimary ');
       expect(f.isAbstract, isFalse);
       _writeFragmentName(f);
     });
@@ -422,6 +453,14 @@
       _writeFragmentCodeRange(f);
       // _writeDisplayName(f);
 
+      if (f.newKeywordOffset case var newKeywordOffset?) {
+        _sink.writelnWithIndent('newKeywordOffset: $newKeywordOffset');
+      }
+
+      if (f.factoryKeywordOffset case var factoryKeywordOffset?) {
+        _sink.writelnWithIndent('factoryKeywordOffset: $factoryKeywordOffset');
+      }
+
       _sink.writelnWithIndent('typeName: ${f.typeName}');
       if (f.typeNameOffset case var typeNameOffset?) {
         _sink.writelnWithIndent('typeNameOffset: $typeNameOffset');
@@ -533,6 +572,7 @@
     // }
 
     _sink.writeIndentedLine(() {
+      // ignore: deprecated_member_use_from_same_package
       _sink.writeIf(e.isSynthetic, 'synthetic ');
       _sink.writeIf(e.isStatic, 'static ');
       _sink.writeIf(e.isAbstract, 'abstract ');
@@ -543,8 +583,23 @@
       _sink.writeIf(e.isConst, 'const ');
       _sink.writeIf(e.isEnumConstant, 'enumConstant ');
       _sink.writeIf(e.isPromotable, 'promotable ');
+      _sink.writeIf(e.hasImplicitType, 'hasImplicitType ');
       _sink.writeIf(e.hasInitializer, 'hasInitializer ');
 
+      _assertHasExactlyOneTrue([
+        e.isOriginDeclaration,
+        e.isOriginDeclaringFormalParameter,
+        e.isOriginEnumValues,
+        e.isOriginGetterSetter,
+      ]);
+      _sink.writeIf(e.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(
+        e.isOriginDeclaringFormalParameter,
+        'isOriginDeclaringFormalParameter ',
+      );
+      _sink.writeIf(e.isOriginEnumValues, 'isOriginEnumValues ');
+      _sink.writeIf(e.isOriginGetterSetter, 'isOriginGetterSetter ');
+
       _writeElementName(e);
     });
 
@@ -571,10 +626,10 @@
         _sink.writelnWithIndent('hasEnclosingTypeParameterReference: true');
       }
       // _writeDocumentation(e.documentationComment);
-      // _writeMetadata(e.metadata);
+      _writeMetadata(e.metadata);
       _writeSinceSdkVersion(e);
       // _writeCodeRange(e);
-      // _writeTypeInferenceError(e);
+      _writeTypeInferenceError(e.typeInferenceError);
       _writeType('type', e.type);
       // _writeShouldUseTypeForInitializerInference(e);
       _writeVariableElementConstantInitializer(e);
@@ -582,6 +637,10 @@
       // writeLinking();
       _writeElementReference('getter', e.getter);
       _writeElementReference('setter', e.setter);
+      _writeElementReference(
+        'declaringFormalParameter',
+        e.declaringFormalParameter,
+      );
     });
   }
 
@@ -607,6 +666,20 @@
       _sink.writeIf(f.isSynthetic, 'synthetic ');
       _sink.writeIf(f.hasInitializer, 'hasInitializer ');
 
+      _assertHasExactlyOneTrue([
+        f.isOriginDeclaration,
+        f.isOriginDeclaringFormalParameter,
+        f.isOriginEnumValues,
+        f.isOriginGetterSetter,
+      ]);
+      _sink.writeIf(f.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(
+        f.isOriginDeclaringFormalParameter,
+        'isOriginDeclaringFormalParameter ',
+      );
+      _sink.writeIf(f.isOriginEnumValues, 'isOriginEnumValues ');
+      _sink.writeIf(f.isOriginGetterSetter, 'isOriginGetterSetter ');
+
       _writeFragmentName(f);
     });
 
@@ -629,10 +702,9 @@
     _sink.withIndent(() {
       _writeElementReference('element', f.element);
       // _writeDocumentation(f.documentationComment);
-      // _writeMetadata(f.metadata);
+      _writeMetadata(f.metadata);
       // _writeSinceSdkVersion(f.sinceSdkVersion);
       // _writeCodeRange(f);
-      // _writeTypeInferenceError(f);
       // _writeType('type', f.type);
       // _writeShouldUseTypeForInitializerInference(f);
       _writeVariableFragmentInitializer(f);
@@ -667,6 +739,7 @@
 
       switch (e) {
         case FieldFormalParameterElementImpl():
+          _sink.writeIf(e.isDeclaring, 'declaring ');
           _sink.write('this.');
         case SuperFormalParameterElementImpl():
           _sink.write('super.');
@@ -696,6 +769,9 @@
 
       switch (e) {
         case FieldFormalParameterElementImpl():
+          if (e.privateName case var privateName?) {
+            _sink.writelnWithIndent('privateName: $privateName');
+          }
           _elementPrinter.writeNamedElement2('field', e.field);
         case SuperFormalParameterElementImpl():
           _elementPrinter.writeNamedElement2(
@@ -866,12 +942,17 @@
     // }
 
     _sink.writeIndentedLine(() {
+      // ignore: deprecated_member_use_from_same_package
       _sink.writeIf(e.isSynthetic, 'synthetic ');
       _sink.writeIf(e.isStatic, 'static ');
       _sink.writeIf(e.isAbstract, 'abstract ');
       _sink.writeIf(e.isExternal, 'external ');
       _sink.writeIf(e.isExtensionTypeMember, 'isExtensionTypeMember ');
 
+      _assertHasExactlyOneTrue([e.isOriginDeclaration, e.isOriginVariable]);
+      _sink.writeIf(e.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(e.isOriginVariable, 'isOriginVariable ');
+
       _writeElementName(e);
     });
 
@@ -923,6 +1004,10 @@
       _sink.writeIf(f.isAugmentation, 'augment ');
       _sink.writeIf(f.isSynthetic, 'synthetic ');
 
+      _assertHasExactlyOneTrue([f.isOriginDeclaration, f.isOriginVariable]);
+      _sink.writeIf(f.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(f.isOriginVariable, 'isOriginVariable ');
+
       _writeFragmentName(f);
       // _writeBodyModifiers(e);
     });
@@ -1305,7 +1390,7 @@
       _writeDocumentation(e.documentationComment);
       _writeMetadata(e.metadata);
       _writeSinceSdkVersion(e);
-      // _writeTypeInferenceError(e);
+      _writeTypeInferenceError(e.typeInferenceError);
 
       _writeElementList(
         'typeParameters',
@@ -1351,7 +1436,6 @@
       _writeDocumentation(f.documentationComment);
       _writeMetadata(f.metadata);
       _writeFragmentCodeRange(f);
-      // _writeTypeInferenceError(f);
 
       _writeFragmentList(
         'typeParameters',
@@ -1464,12 +1548,22 @@
     // }
 
     _sink.writeIndentedLine(() {
+      // ignore: deprecated_member_use_from_same_package
       _sink.writeIf(e.isSynthetic, 'synthetic ');
       _sink.writeIf(e.isStatic, 'static ');
       _sink.writeIf(e.isAbstract, 'abstract ');
       _sink.writeIf(e.isExternal, 'external ');
       _sink.writeIf(e.isExtensionTypeMember, 'isExtensionTypeMember ');
 
+      _assertHasExactlyOneTrue([
+        e.isOriginDeclaration,
+        e.isOriginInterface,
+        e.isOriginVariable,
+      ]);
+      _sink.writeIf(e.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(e.isOriginInterface, 'isOriginInterface ');
+      _sink.writeIf(e.isOriginVariable, 'isOriginVariable ');
+
       _writeElementName(e);
     });
 
@@ -1521,6 +1615,15 @@
       _sink.writeIf(f.isAugmentation, 'augment ');
       _sink.writeIf(f.isSynthetic, 'synthetic ');
 
+      _assertHasExactlyOneTrue([
+        f.isOriginDeclaration,
+        f.isOriginInterface,
+        f.isOriginVariable,
+      ]);
+      _sink.writeIf(f.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(f.isOriginInterface, 'isOriginInterface ');
+      _sink.writeIf(f.isOriginVariable, 'isOriginVariable ');
+
       _writeFragmentName(f);
       // _writeBodyModifiers(f);
     });
@@ -1642,18 +1745,20 @@
     DartType type = e.type;
     expect(type, isNotNull);
 
-    if (!e.isSynthetic) {
-      // expect(e.getter2, isNotNull);
-      _assertNonSyntheticElementSelf(e);
-    }
-
     _sink.writeIndentedLine(() {
+      // ignore: deprecated_member_use_from_same_package
       _sink.writeIf(e.isSynthetic, 'synthetic ');
+      _sink.writeIf(e.isExternal, 'external ');
       _sink.writeIf(e.isLate, 'late ');
       _sink.writeIf(e.isFinal, 'final ');
       _sink.writeIf(e.isConst, 'const ');
+      _sink.writeIf(e.hasImplicitType, 'hasImplicitType ');
       _sink.writeIf(e.hasInitializer, 'hasInitializer ');
 
+      _assertHasExactlyOneTrue([e.isOriginDeclaration, e.isOriginGetterSetter]);
+      _sink.writeIf(e.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(e.isOriginGetterSetter, 'isOriginGetterSetter ');
+
       _writeElementName(e);
     });
 
@@ -1679,7 +1784,7 @@
       _writeDocumentation(e.documentationComment);
       _writeMetadata(e.metadata);
       _writeSinceSdkVersion(e);
-      // _writeTypeInferenceError(e);
+      _writeTypeInferenceError(e.typeInferenceError);
       _writeType('type', e.type);
       // _writeShouldUseTypeForInitializerInference(e);
       _writeVariableElementConstantInitializer(e);
@@ -1711,6 +1816,10 @@
       _sink.writeIf(f.isSynthetic, 'synthetic ');
       _sink.writeIf(f.hasInitializer, 'hasInitializer ');
 
+      _assertHasExactlyOneTrue([f.isOriginDeclaration, f.isOriginGetterSetter]);
+      _sink.writeIf(f.isOriginDeclaration, 'isOriginDeclaration ');
+      _sink.writeIf(f.isOriginGetterSetter, 'isOriginGetterSetter ');
+
       _writeFragmentName(f);
     });
 
@@ -1735,7 +1844,6 @@
       _writeDocumentation(f.documentationComment);
       _writeMetadata(f.metadata);
       // _writeCodeRange(f);
-      // _writeTypeInferenceError(f);
       // _writeType('type', f.type);
       // _writeShouldUseTypeForInitializerInference(f);
       _writeVariableFragmentInitializer(f);
@@ -1843,6 +1951,19 @@
     // _assertNonSyntheticElementSelf(e);
   }
 
+  void _writeTypeInferenceError(TopLevelInferenceError? error) {
+    if (error != null) {
+      String kindName = error.kind.toString();
+      kindName = kindName.removePrefixOrSelf('TopLevelInferenceErrorKind.');
+      _sink.writelnWithIndent('typeInferenceError: $kindName');
+      _sink.withIndent(() {
+        if (kindName == 'dependencyCycle') {
+          _sink.writelnWithIndent('arguments: ${error.arguments}');
+        }
+      });
+    }
+  }
+
   void _writeTypeParameterElement(TypeParameterElement e) {
     _sink.writeIndentedLine(() {
       _writeObjectId(e);
diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart
index 0a4ddcb..ac9d537 100644
--- a/pkg/analyzer/test/src/summary/elements/class_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/class_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.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -14,8 +12,6 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(ClassElementTest_keepLinking);
     defineReflectiveTests(ClassElementTest_fromBytes);
-    defineReflectiveTests(ClassElementTest_declaringConstructors_keepLinking);
-    defineReflectiveTests(ClassElementTest_declaringConstructors_fromBytes);
     defineReflectiveTests(ClassElementTest_augmentation_keepLinking);
     defineReflectiveTests(ClassElementTest_augmentation_fromBytes);
     defineReflectiveTests(UpdateNodeTextExpectations);
@@ -35,7 +31,7 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -43,7 +39,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -61,7 +57,7 @@
         #F1 class C (nameOffset:11) (firstTokenOffset:0) (offset:11)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -69,7 +65,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -87,7 +83,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:10) (offset:16)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:16)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 16
@@ -96,7 +92,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -114,7 +110,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 external const new (nameOffset:<null>) (firstTokenOffset:10) (offset:25)
+            #F2 external const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:25)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 25
@@ -123,7 +119,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        external const new
+        external const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -147,7 +143,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:34)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               documentationComment: /**\n   * Docs\n   */
               typeName: C
@@ -157,7 +153,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           documentationComment: /**\n   * Docs\n   */
@@ -176,7 +172,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 foo (nameOffset:12) (firstTokenOffset:10) (offset:12)
+            #F2 isOriginDeclaration foo (nameOffset:12) (firstTokenOffset:10) (offset:12)
               element: <testLibrary>::@class::C::@constructor::foo
               typeName: C
               typeNameOffset: 10
@@ -186,7 +182,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@constructor::foo
           firstFragment: #F2
 ''');
@@ -209,7 +205,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:16) (offset:16)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 16
@@ -223,7 +219,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
 ''');
@@ -241,7 +237,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 10
@@ -250,7 +246,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -268,7 +264,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 external new (nameOffset:<null>) (firstTokenOffset:10) (offset:19)
+            #F2 external isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 19
@@ -277,7 +273,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        external new
+        external isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -295,8 +291,9 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:10) (offset:18)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 10
               typeName: C
               typeNameOffset: 18
   classes
@@ -304,12 +301,137 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
   }
 
+  test_class_constructor_factoryHead_named() async {
+    var library = await buildLibrary(r'''
+class C {
+  factory named() => throw 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 factory isOriginDeclaration named (nameOffset:20) (firstTokenOffset:12) (offset:20)
+              element: <testLibrary>::@class::C::@constructor::named
+              factoryKeywordOffset: 12
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        factory isOriginDeclaration named
+          reference: <testLibrary>::@class::C::@constructor::named
+          firstFragment: #F2
+''');
+  }
+
+  test_class_constructor_factoryHead_named_const() async {
+    var library = await buildLibrary(r'''
+class C {
+  const factory named() = C;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 const factory isOriginDeclaration named (nameOffset:26) (firstTokenOffset:12) (offset:26)
+              element: <testLibrary>::@class::C::@constructor::named
+              factoryKeywordOffset: 18
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        const factory isOriginDeclaration named
+          reference: <testLibrary>::@class::C::@constructor::named
+          firstFragment: #F2
+''');
+  }
+
+  test_class_constructor_factoryHead_unnamed() async {
+    var library = await buildLibrary(r'''
+class C {
+  factory () => throw 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+              element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 12
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        factory isOriginDeclaration new
+          reference: <testLibrary>::@class::C::@constructor::new
+          firstFragment: #F2
+''');
+  }
+
+  test_class_constructor_factoryHead_unnamed_const() async {
+    var library = await buildLibrary(r'''
+class C {
+  const factory () = C;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 const factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+              element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 18
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        const factory isOriginDeclaration new
+          reference: <testLibrary>::@class::C::@constructor::new
+          firstFragment: #F2
+          redirectedConstructor: <testLibrary>::@class::C::@constructor::new
+''');
+  }
+
   test_class_constructor_field_formal_dynamic_dynamic() async {
     var library = await buildLibrary(
       'class C { dynamic x; C(dynamic this.x); }',
@@ -324,10 +446,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 21
@@ -335,10 +457,10 @@
                 #F4 requiredPositional final this.x (nameOffset:36) (firstTokenOffset:23) (offset:36)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
@@ -348,14 +470,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -364,13 +486,13 @@
               type: dynamic
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -394,10 +516,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 21
@@ -405,10 +527,10 @@
                 #F4 requiredPositional final this.x (nameOffset:32) (firstTokenOffset:23) (offset:32)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
@@ -418,14 +540,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -434,13 +556,13 @@
               type: int
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -464,10 +586,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 21
@@ -475,10 +597,10 @@
                 #F4 requiredPositional final this.x (nameOffset:28) (firstTokenOffset:23) (offset:28)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
@@ -488,14 +610,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -504,13 +626,13 @@
               type: dynamic
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -539,10 +661,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration x (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 21
@@ -553,10 +675,10 @@
                     #F5 requiredPositional b (nameOffset:37) (firstTokenOffset:30) (offset:37)
                       element: b@37
           getters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -566,14 +688,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -586,13 +708,13 @@
                   type: double
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F6
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F7
           formalParameters
@@ -621,10 +743,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration x (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 21
@@ -635,10 +757,10 @@
                     #F5 requiredPositional b (nameOffset:41) (firstTokenOffset:34) (offset:41)
                       element: b@41
           getters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -648,14 +770,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -668,13 +790,13 @@
                   type: double
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F6
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F7
           formalParameters
@@ -703,10 +825,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 f (nameOffset:23) (firstTokenOffset:23) (offset:23)
+            #F2 isOriginDeclaration f (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:28) (offset:28)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:28)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 28
@@ -722,10 +844,10 @@
                     #F7 requiredPositional t (nameOffset:53) (firstTokenOffset:51) (offset:53)
                       element: t@53
           getters
-            #F8 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F8 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@getter::f
           setters
-            #F9 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F9 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@setter::f
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
@@ -735,14 +857,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: dynamic Function()
           getter: <testLibrary>::@class::C::@getter::f
           setter: <testLibrary>::@class::C::@setter::f
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -760,13 +882,13 @@
                   type: T
               field: <testLibrary>::@class::C::@field::f
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F8
           returnType: dynamic Function()
           variable: <testLibrary>::@class::C::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@setter::f
           firstFragment: #F9
           formalParameters
@@ -792,12 +914,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::x::@def::0
-            #F3 x (nameOffset:35) (firstTokenOffset:35) (offset:35)
+            #F3 isOriginDeclaration x (nameOffset:35) (firstTokenOffset:35) (offset:35)
               element: <testLibrary>::@class::C::@field::x::@def::1
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 10
@@ -805,17 +927,17 @@
                 #F5 requiredPositional final this.x (nameOffset:17) (firstTokenOffset:12) (offset:17)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::x::@def::0
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::C::@getter::x::@def::1
           setters
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@setter::x::@def::0
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
                   element: <testLibrary>::@class::C::@setter::x::@def::0::@formalParameter::value
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::C::@setter::x::@def::1
               formalParameters
                 #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
@@ -825,20 +947,20 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x::@def::0
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x::@def::0
           setter: <testLibrary>::@class::C::@setter::x::@def::0
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x::@def::1
           firstFragment: #F3
           type: String
           getter: <testLibrary>::@class::C::@getter::x::@def::1
           setter: <testLibrary>::@class::C::@setter::x::@def::1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -847,18 +969,18 @@
               type: int
               field: <testLibrary>::@class::C::@field::x::@def::0
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x::@def::0
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::C::@field::x::@def::0
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x::@def::1
           firstFragment: #F7
           returnType: String
           variable: <testLibrary>::@class::C::@field::x::@def::1
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x::@def::0
           firstFragment: #F8
           formalParameters
@@ -867,7 +989,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::x::@def::0
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x::@def::1
           firstFragment: #F10
           formalParameters
@@ -879,6 +1001,155 @@
 ''');
   }
 
+  test_class_constructor_field_formal_named_private() async {
+    var library = await buildLibrary('class C { int? _x; C({this._x}); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          fields
+            #F2 isOriginDeclaration _x (nameOffset:15) (firstTokenOffset:15) (offset:15)
+              element: <testLibrary>::@class::C::@field::_x
+          constructors
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:19) (offset:19)
+              element: <testLibrary>::@class::C::@constructor::new
+              typeName: C
+              typeNameOffset: 19
+              formalParameters
+                #F4 optionalNamed final this.x (nameOffset:27) (firstTokenOffset:22) (offset:27)
+                  element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
+          getters
+            #F5 synthetic isOriginVariable _x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+              element: <testLibrary>::@class::C::@getter::_x
+          setters
+            #F6 synthetic isOriginVariable _x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+              element: <testLibrary>::@class::C::@setter::_x
+              formalParameters
+                #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+                  element: <testLibrary>::@class::C::@setter::_x::@formalParameter::value
+  classes
+    hasNonFinalField class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      fields
+        isOriginDeclaration _x
+          reference: <testLibrary>::@class::C::@field::_x
+          firstFragment: #F2
+          type: int?
+          getter: <testLibrary>::@class::C::@getter::_x
+          setter: <testLibrary>::@class::C::@setter::_x
+      constructors
+        isOriginDeclaration new
+          reference: <testLibrary>::@class::C::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final hasImplicitType this.x
+              firstFragment: #F4
+              type: int?
+              privateName: _x
+              field: <testLibrary>::@class::C::@field::_x
+      getters
+        synthetic isOriginVariable _x
+          reference: <testLibrary>::@class::C::@getter::_x
+          firstFragment: #F5
+          returnType: int?
+          variable: <testLibrary>::@class::C::@field::_x
+      setters
+        synthetic isOriginVariable _x
+          reference: <testLibrary>::@class::C::@setter::_x
+          firstFragment: #F6
+          formalParameters
+            #E1 requiredPositional value
+              firstFragment: #F7
+              type: int?
+          returnType: void
+          variable: <testLibrary>::@class::C::@field::_x
+  fieldNameNonPromotabilityInfo
+    _x
+      conflictingFields
+        <testLibrary>::@class::C::@field::_x
+''');
+  }
+
+  test_class_constructor_field_formal_named_privateNoCorrespondingPublic() async {
+    var library = await buildLibrary('class C { int? _123; C({this._123}); }');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          fields
+            #F2 isOriginDeclaration _123 (nameOffset:15) (firstTokenOffset:15) (offset:15)
+              element: <testLibrary>::@class::C::@field::_123
+          constructors
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+              element: <testLibrary>::@class::C::@constructor::new
+              typeName: C
+              typeNameOffset: 21
+              formalParameters
+                #F4 optionalNamed final this._123 (nameOffset:29) (firstTokenOffset:24) (offset:29)
+                  element: <testLibrary>::@class::C::@constructor::new::@formalParameter::_123
+          getters
+            #F5 synthetic isOriginVariable _123 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+              element: <testLibrary>::@class::C::@getter::_123
+          setters
+            #F6 synthetic isOriginVariable _123 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+              element: <testLibrary>::@class::C::@setter::_123
+              formalParameters
+                #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+                  element: <testLibrary>::@class::C::@setter::_123::@formalParameter::value
+  classes
+    hasNonFinalField class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      fields
+        isOriginDeclaration _123
+          reference: <testLibrary>::@class::C::@field::_123
+          firstFragment: #F2
+          type: int?
+          getter: <testLibrary>::@class::C::@getter::_123
+          setter: <testLibrary>::@class::C::@setter::_123
+      constructors
+        isOriginDeclaration new
+          reference: <testLibrary>::@class::C::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final hasImplicitType this._123
+              firstFragment: #F4
+              type: int?
+              field: <testLibrary>::@class::C::@field::_123
+      getters
+        synthetic isOriginVariable _123
+          reference: <testLibrary>::@class::C::@getter::_123
+          firstFragment: #F5
+          returnType: int?
+          variable: <testLibrary>::@class::C::@field::_123
+      setters
+        synthetic isOriginVariable _123
+          reference: <testLibrary>::@class::C::@setter::_123
+          firstFragment: #F6
+          formalParameters
+            #E1 requiredPositional value
+              firstFragment: #F7
+              type: int?
+          returnType: void
+          variable: <testLibrary>::@class::C::@field::_123
+  fieldNameNonPromotabilityInfo
+    _123
+      conflictingFields
+        <testLibrary>::@class::C::@field::_123
+''');
+  }
+
   test_class_constructor_field_formal_no_matching_field() async {
     // This is a compile-time error but it should still analyze consistently.
     var library = await buildLibrary('class C { C(this.x); }');
@@ -892,7 +1163,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 10
@@ -904,7 +1175,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -927,10 +1198,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -938,10 +1209,10 @@
                 #F4 requiredPositional final this.x (nameOffset:32) (firstTokenOffset:19) (offset:32)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -951,14 +1222,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -967,13 +1238,13 @@
               type: dynamic
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: num
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -997,10 +1268,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1008,10 +1279,10 @@
                 #F4 requiredPositional final this.x (nameOffset:28) (firstTokenOffset:19) (offset:28)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1021,14 +1292,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1037,13 +1308,13 @@
               type: int
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: num
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1067,10 +1338,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1078,10 +1349,10 @@
                 #F4 requiredPositional final this.x (nameOffset:24) (firstTokenOffset:19) (offset:24)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1091,14 +1362,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1107,13 +1378,13 @@
               type: num
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: num
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1137,10 +1408,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1148,10 +1419,10 @@
                 #F4 requiredPositional final this.x (nameOffset:32) (firstTokenOffset:19) (offset:32)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1161,14 +1432,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1177,13 +1448,13 @@
               type: dynamic
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1207,10 +1478,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1218,10 +1489,10 @@
                 #F4 requiredPositional final this.x (nameOffset:28) (firstTokenOffset:19) (offset:28)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1231,14 +1502,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1247,13 +1518,13 @@
               type: int
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1277,10 +1548,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1288,10 +1559,10 @@
                 #F4 requiredPositional final this.x (nameOffset:24) (firstTokenOffset:19) (offset:24)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1301,14 +1572,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1317,13 +1588,13 @@
               type: dynamic
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1347,10 +1618,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1358,10 +1629,10 @@
                 #F4 optionalNamed final this.x (nameOffset:25) (firstTokenOffset:20) (offset:25)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1371,14 +1642,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1387,13 +1658,13 @@
               type: int
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1417,10 +1688,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1432,10 +1703,10 @@
                       literal: 42 @28
                       staticType: int
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1445,14 +1716,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1464,13 +1735,13 @@
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1494,10 +1765,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1505,10 +1776,10 @@
                 #F4 optionalPositional final this.x (nameOffset:25) (firstTokenOffset:20) (offset:25)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1518,14 +1789,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1534,13 +1805,13 @@
               type: int
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1564,10 +1835,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 17
@@ -1579,10 +1850,10 @@
                       literal: 42 @29
                       staticType: int
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -1592,14 +1863,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1611,13 +1882,13 @@
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1646,7 +1917,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1659,7 +1930,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
 ''');
@@ -1681,7 +1952,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 18
@@ -1693,7 +1964,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -1736,7 +2007,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 18
@@ -1748,7 +2019,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -1795,28 +2066,28 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -1830,7 +2101,7 @@
                 literal: 42 @39
                 staticType: int
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
@@ -1857,15 +2128,15 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
       functions
         #F5 foo (nameOffset:52) (firstTokenOffset:48) (offset:52)
@@ -1875,13 +2146,13 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -1902,7 +2173,7 @@
                 staticInvokeType: int Function()
                 staticType: int
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
@@ -1932,10 +2203,10 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 _f (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F2 isOriginDeclaration _f (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::A::@field::_f
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 34
@@ -1947,20 +2218,20 @@
                       literal: 0 @45
                       staticType: int
           getters
-            #F5 synthetic _f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F5 synthetic isOriginVariable _f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@getter::_f
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final promotable _f
+        final promotable isOriginDeclaration _f
           reference: <testLibrary>::@class::A::@field::_f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::_f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1982,7 +2253,7 @@
                 element: <testLibrary>::@class::A::@constructor::new::@formalParameter::f
                 staticType: int
       getters
-        synthetic _f
+        synthetic isOriginVariable _f
           reference: <testLibrary>::@class::A::@getter::_f
           firstFragment: #F5
           returnType: int
@@ -2007,10 +2278,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:30) (offset:36)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:30) (offset:36)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 36
@@ -2018,20 +2289,20 @@
                 #F4 requiredPositional a (nameOffset:42) (firstTokenOffset:38) (offset:42)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::a
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: Object
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -2058,7 +2329,7 @@
                 rightParenthesis: ) @56
                 staticType: (int, int)
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: Object
@@ -2083,28 +2354,28 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 f (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration f (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::f
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final f
+        final hasImplicitType isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -2129,7 +2400,7 @@
                 staticType: String
                 stringValue: null
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: dynamic
@@ -2154,10 +2425,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 f (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration f (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
@@ -2165,20 +2436,20 @@
                 #F4 requiredPositional x (nameOffset:35) (firstTokenOffset:31) (offset:35)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::x
           getters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::f
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final f
+        final hasImplicitType isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -2207,7 +2478,7 @@
                 staticType: String
                 stringValue: null
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F5
           returnType: dynamic
@@ -2232,10 +2503,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
@@ -2243,20 +2514,20 @@
                 #F4 requiredPositional p (nameOffset:35) (firstTokenOffset:31) (offset:35)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::p
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -2283,7 +2554,7 @@
                 staticInvokeType: num Function(num)
                 staticType: int
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
@@ -2315,21 +2586,21 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
         #F4 class B (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::B
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:40) (offset:46)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:40) (offset:46)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 46
               formalParameters
                 #F6 requiredPositional x (nameOffset:56) (firstTokenOffset:48) (offset:56)
                   element: <testLibrary>::@class::B::@constructor::new::@formalParameter::x
-            #F7 const f (nameOffset:70) (firstTokenOffset:62) (offset:70)
+            #F7 const isOriginDeclaration f (nameOffset:70) (firstTokenOffset:62) (offset:70)
               element: <testLibrary>::@class::B::@constructor::f
               typeName: B
               typeNameOffset: 68
@@ -2342,21 +2613,21 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
             #E1 requiredPositional x
               firstFragment: #F6
               type: dynamic
-        const f
+        const isOriginDeclaration f
           reference: <testLibrary>::@class::B::@constructor::f
           firstFragment: #F7
           constantInitializers
@@ -2377,7 +2648,7 @@
                               parameters: FormalParameterList
                                 leftParenthesis: ( @94
                                 rightParenthesis: ) @95
-                              declaredElement: GenericFunctionTypeElement
+                              declaredFragment: GenericFunctionTypeElement
                                 parameters
                                 returnType: dynamic
                                 type: dynamic Function()
@@ -2417,7 +2688,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -2427,7 +2698,7 @@
         #F4 class B (nameOffset:50) (firstTokenOffset:44) (offset:50)
           element: <testLibrary>::@class::B
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:66) (offset:72)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:66) (offset:72)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 72
@@ -2436,7 +2707,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -2448,7 +2719,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           constantInitializers
@@ -2487,7 +2758,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const aaa (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration aaa (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@constructor::aaa
               typeName: A
               typeNameOffset: 18
@@ -2498,7 +2769,7 @@
         #F4 class C (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::C
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:56) (offset:62)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:56) (offset:62)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 62
@@ -2507,7 +2778,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const aaa
+        const isOriginDeclaration aaa
           reference: <testLibrary>::@class::A::@constructor::aaa
           firstFragment: #F2
           formalParameters
@@ -2519,7 +2790,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           constantInitializers
@@ -2561,7 +2832,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const _ (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration _ (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@constructor::_
               typeName: A
               typeNameOffset: 18
@@ -2569,7 +2840,7 @@
         #F3 class B (nameOffset:33) (firstTokenOffset:27) (offset:33)
           element: <testLibrary>::@class::B
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:49) (offset:55)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:49) (offset:55)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 55
@@ -2578,7 +2849,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const _
+        const isOriginDeclaration _
           reference: <testLibrary>::@class::A::@constructor::_
           firstFragment: #F2
     class B
@@ -2586,7 +2857,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           constantInitializers
@@ -2624,7 +2895,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const aaa (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration aaa (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@constructor::aaa
               typeName: A
               typeNameOffset: 18
@@ -2637,7 +2908,7 @@
         #F5 class C (nameOffset:45) (firstTokenOffset:39) (offset:45)
           element: <testLibrary>::@class::C
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:61) (offset:67)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:61) (offset:67)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 67
@@ -2646,7 +2917,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const aaa
+        const isOriginDeclaration aaa
           reference: <testLibrary>::@class::A::@constructor::aaa
           firstFragment: #F2
           formalParameters
@@ -2661,7 +2932,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
           constantInitializers
@@ -2713,7 +2984,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -2723,7 +2994,7 @@
         #F4 class C (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::C
           constructors
-            #F5 const ccc (nameOffset:60) (firstTokenOffset:52) (offset:60)
+            #F5 const isOriginDeclaration ccc (nameOffset:60) (firstTokenOffset:52) (offset:60)
               element: <testLibrary>::@class::C::@constructor::ccc
               typeName: C
               typeNameOffset: 58
@@ -2733,7 +3004,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -2745,7 +3016,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        const ccc
+        const isOriginDeclaration ccc
           reference: <testLibrary>::@class::C::@constructor::ccc
           firstFragment: #F5
           constantInitializers
@@ -2780,14 +3051,14 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
               formalParameters
                 #F3 requiredPositional values (nameOffset:33) (firstTokenOffset:20) (offset:33)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::values
-            #F4 const empty (nameOffset:52) (firstTokenOffset:44) (offset:52)
+            #F4 const isOriginDeclaration empty (nameOffset:52) (firstTokenOffset:44) (offset:52)
               element: <testLibrary>::@class::A::@constructor::empty
               typeName: A
               typeNameOffset: 50
@@ -2797,14 +3068,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
             #E0 requiredPositional values
               firstFragment: #F3
               type: List<String>
-        const empty
+        const isOriginDeclaration empty
           reference: <testLibrary>::@class::A::@constructor::empty
           firstFragment: #F4
           constantInitializers
@@ -2841,11 +3112,11 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 18
-            #F3 const named (nameOffset:56) (firstTokenOffset:48) (offset:56)
+            #F3 const isOriginDeclaration named (nameOffset:56) (firstTokenOffset:48) (offset:56)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 54
@@ -2860,7 +3131,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -2882,7 +3153,7 @@
                 rightParenthesis: ) @43
               element: <testLibrary>::@class::C::@constructor::named
           redirectedConstructor: <testLibrary>::@class::C::@constructor::named
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -2912,11 +3183,11 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 18
-            #F3 const named (nameOffset:55) (firstTokenOffset:47) (offset:55)
+            #F3 const isOriginDeclaration named (nameOffset:55) (firstTokenOffset:47) (offset:55)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 53
@@ -2931,7 +3202,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -2961,7 +3232,7 @@
                 rightParenthesis: ) @42
               element: <testLibrary>::@class::C::@constructor::named
           redirectedConstructor: <testLibrary>::@class::C::@constructor::named
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -2991,12 +3262,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const named (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration named (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 18
               periodOffset: 19
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:48) (offset:54)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:48) (offset:54)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 54
@@ -3010,7 +3281,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F2
           constantInitializers
@@ -3027,7 +3298,7 @@
                 rightParenthesis: ) @43
               element: <testLibrary>::@class::C::@constructor::new
           redirectedConstructor: <testLibrary>::@class::C::@constructor::new
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -3040,6 +3311,130 @@
 ''');
   }
 
+  test_class_constructor_newHead_named() async {
+    var library = await buildLibrary(r'''
+class C {
+  new named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 isOriginDeclaration named (nameOffset:16) (firstTokenOffset:12) (offset:16)
+              element: <testLibrary>::@class::C::@constructor::named
+              newKeywordOffset: 12
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        isOriginDeclaration named
+          reference: <testLibrary>::@class::C::@constructor::named
+          firstFragment: #F2
+''');
+  }
+
+  test_class_constructor_newHead_named_const() async {
+    var library = await buildLibrary(r'''
+class C {
+  const new named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 const isOriginDeclaration named (nameOffset:22) (firstTokenOffset:12) (offset:22)
+              element: <testLibrary>::@class::C::@constructor::named
+              newKeywordOffset: 18
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        const isOriginDeclaration named
+          reference: <testLibrary>::@class::C::@constructor::named
+          firstFragment: #F2
+''');
+  }
+
+  test_class_constructor_newHead_unnamed() async {
+    var library = await buildLibrary(r'''
+class C {
+  new ();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+              element: <testLibrary>::@class::C::@constructor::new
+              newKeywordOffset: 12
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        isOriginDeclaration new
+          reference: <testLibrary>::@class::C::@constructor::new
+          firstFragment: #F2
+''');
+  }
+
+  test_class_constructor_newHead_unnamed_const() async {
+    var library = await buildLibrary(r'''
+class C {
+  const new ();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::C
+          constructors
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+              element: <testLibrary>::@class::C::@constructor::new
+              newKeywordOffset: 18
+              typeName: null
+  classes
+    class C
+      reference: <testLibrary>::@class::C
+      firstFragment: #F1
+      constructors
+        const isOriginDeclaration new
+          reference: <testLibrary>::@class::C::@constructor::new
+          firstFragment: #F2
+''');
+  }
+
   test_class_constructor_parameters_super_explicitType_function() async {
     var library = await buildLibrary('''
 class A {
@@ -3060,7 +3455,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3070,7 +3465,7 @@
         #F4 class B (nameOffset:35) (firstTokenOffset:29) (offset:35)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:51) (offset:51)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:51) (offset:51)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 51
@@ -3088,7 +3483,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3100,7 +3495,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3140,7 +3535,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3150,7 +3545,7 @@
         #F4 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:47) (offset:47)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:47) (offset:47)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 47
@@ -3162,7 +3557,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3174,7 +3569,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3206,7 +3601,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3216,7 +3611,7 @@
         #F4 class B (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:48) (offset:48)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:48) (offset:48)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 48
@@ -3228,7 +3623,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3240,7 +3635,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3301,7 +3696,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3313,7 +3708,7 @@
         #F5 class B (nameOffset:61) (firstTokenOffset:55) (offset:61)
           element: <testLibrary>::@class::B
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:77) (offset:77)
+            #F6 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:77) (offset:77)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 77
@@ -3331,7 +3726,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3346,7 +3741,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -3389,7 +3784,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3403,7 +3798,7 @@
         #F4 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:53) (offset:53)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:53) (offset:53)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 53
@@ -3415,7 +3810,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3430,7 +3825,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3462,7 +3857,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3472,7 +3867,7 @@
         #F4 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:58) (offset:58)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:58) (offset:58)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 58
@@ -3484,7 +3879,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3496,7 +3891,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3528,7 +3923,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3538,7 +3933,7 @@
         #F4 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:47) (offset:47)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:47) (offset:47)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 47
@@ -3550,7 +3945,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3562,7 +3957,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3594,7 +3989,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3606,7 +4001,7 @@
         #F5 class B (nameOffset:41) (firstTokenOffset:35) (offset:41)
           element: <testLibrary>::@class::B
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
+            #F6 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 57
@@ -3624,7 +4019,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3639,7 +4034,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -3686,7 +4081,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3698,7 +4093,7 @@
         #F5 class B (nameOffset:61) (firstTokenOffset:55) (offset:61)
           element: <testLibrary>::@class::B
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:77) (offset:77)
+            #F6 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:77) (offset:77)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 77
@@ -3716,7 +4111,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3731,7 +4126,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -3774,7 +4169,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3788,7 +4183,7 @@
         #F4 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:53) (offset:53)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:53) (offset:53)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 53
@@ -3800,7 +4195,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3815,7 +4210,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3847,7 +4242,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -3859,7 +4254,7 @@
         #F5 class B (nameOffset:41) (firstTokenOffset:35) (offset:41)
           element: <testLibrary>::@class::B
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
+            #F6 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 57
@@ -3877,7 +4272,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3892,7 +4287,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -3940,7 +4335,7 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
@@ -3950,7 +4345,7 @@
         #F4 class C (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::C
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:56) (offset:56)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:56) (offset:56)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 56
@@ -3960,7 +4355,7 @@
         #F7 class B (nameOffset:77) (firstTokenOffset:71) (offset:77)
           element: <testLibrary>::@class::B
           constructors
-            #F8 new (nameOffset:<null>) (firstTokenOffset:93) (offset:93)
+            #F8 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:93) (offset:93)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 93
@@ -3972,7 +4367,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -3984,7 +4379,7 @@
       firstFragment: #F4
       supertype: B
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -3998,7 +4393,7 @@
       firstFragment: #F7
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           formalParameters
@@ -4036,7 +4431,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -4046,7 +4441,7 @@
         #F4 class C (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::C
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:55) (offset:55)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:55) (offset:55)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 55
@@ -4059,7 +4454,7 @@
             #F8 T (nameOffset:78) (firstTokenOffset:78) (offset:78)
               element: #E0 T
           constructors
-            #F9 new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
+            #F9 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 95
@@ -4071,7 +4466,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -4083,7 +4478,7 @@
       firstFragment: #F4
       supertype: B<String>
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -4104,7 +4499,7 @@
           firstFragment: #F8
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
           formalParameters
@@ -4134,13 +4529,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:18) (firstTokenOffset:12) (offset:18)
           element: <testLibrary>::@class::B
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:34) (offset:34)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 34
@@ -4152,7 +4547,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -4160,7 +4555,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -4192,7 +4587,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -4202,7 +4597,7 @@
         #F4 class B (nameOffset:41) (firstTokenOffset:35) (offset:41)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 57
@@ -4214,7 +4609,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -4226,7 +4621,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -4250,7 +4645,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 10
@@ -4264,7 +4659,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -4297,11 +4692,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 12
               typeName: C
               typeNameOffset: 20
-            #F3 _ (nameOffset:39) (firstTokenOffset:37) (offset:39)
+            #F3 isOriginDeclaration _ (nameOffset:39) (firstTokenOffset:37) (offset:39)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 37
@@ -4309,7 +4705,7 @@
         #F4 class D (nameOffset:52) (firstTokenOffset:46) (offset:52)
           element: <testLibrary>::@class::D
           constructors
-            #F5 named (nameOffset:70) (firstTokenOffset:68) (offset:70)
+            #F5 isOriginDeclaration named (nameOffset:70) (firstTokenOffset:68) (offset:70)
               element: <testLibrary>::@class::D::@constructor::named
               typeName: D
               typeNameOffset: 68
@@ -4319,11 +4715,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: <testLibrary>::@class::D::@constructor::named
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
     class D
@@ -4331,7 +4727,7 @@
       firstFragment: #F4
       supertype: C
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::D::@constructor::named
           firstFragment: #F5
           superConstructor: <testLibrary>::@class::C::@constructor::_
@@ -4363,11 +4759,12 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:18) (offset:26)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:18) (offset:26)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 18
               typeName: C
               typeNameOffset: 26
-            #F5 _ (nameOffset:51) (firstTokenOffset:49) (offset:51)
+            #F5 isOriginDeclaration _ (nameOffset:51) (firstTokenOffset:49) (offset:51)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 49
@@ -4380,7 +4777,7 @@
             #F8 U (nameOffset:69) (firstTokenOffset:69) (offset:69)
               element: #E3 U
           constructors
-            #F9 named (nameOffset:94) (firstTokenOffset:92) (offset:94)
+            #F9 isOriginDeclaration named (nameOffset:94) (firstTokenOffset:92) (offset:94)
               element: <testLibrary>::@class::D::@constructor::named
               typeName: D
               typeNameOffset: 92
@@ -4395,13 +4792,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::D::@constructor::named
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
     class D
@@ -4414,7 +4811,7 @@
           firstFragment: #F8
       supertype: C<U, T>
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::D::@constructor::named
           firstFragment: #F9
           superConstructor: ConstructorMember
@@ -4448,7 +4845,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 named (nameOffset:39) (firstTokenOffset:37) (offset:39)
+            #F4 isOriginDeclaration named (nameOffset:39) (firstTokenOffset:37) (offset:39)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 37
@@ -4461,8 +4858,9 @@
             #F7 U2 (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: #E3 U2
           constructors
-            #F8 factory new (nameOffset:<null>) (firstTokenOffset:71) (offset:79)
+            #F8 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:71) (offset:79)
               element: <testLibrary>::@class::B::@constructor::new
+              factoryKeywordOffset: 71
               typeName: B
               typeNameOffset: 79
   classes
@@ -4477,7 +4875,7 @@
       interfaces
         B<T, U>
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F4
     class B
@@ -4489,7 +4887,7 @@
         #E3 U2
           firstFragment: #F7
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           redirectedConstructor: ConstructorMember
@@ -4524,11 +4922,12 @@
             #F3 U (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:45) (offset:53)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:45) (offset:53)
               element: <testLibrary>::@class::B::@constructor::new
+              factoryKeywordOffset: 45
               typeName: B
               typeNameOffset: 53
-            #F5 _ (nameOffset:78) (firstTokenOffset:76) (offset:78)
+            #F5 isOriginDeclaration _ (nameOffset:78) (firstTokenOffset:76) (offset:78)
               element: <testLibrary>::@class::B::@constructor::_
               typeName: B
               typeNameOffset: 76
@@ -4541,7 +4940,7 @@
             #F8 U (nameOffset:96) (firstTokenOffset:96) (offset:96)
               element: #E3 U
           constructors
-            #F9 named (nameOffset:121) (firstTokenOffset:119) (offset:121)
+            #F9 isOriginDeclaration named (nameOffset:121) (firstTokenOffset:119) (offset:121)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 119
@@ -4564,13 +4963,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::C::@constructor::named
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::B::@constructor::_
           firstFragment: #F5
     class C
@@ -4582,7 +4981,7 @@
         #E3 U
           firstFragment: #F8
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F9
   typeAliases
@@ -4624,11 +5023,12 @@
         #F1 class C (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:31) (offset:39)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 31
               typeName: C
               typeNameOffset: 39
-            #F3 _ (nameOffset:58) (firstTokenOffset:56) (offset:58)
+            #F3 isOriginDeclaration _ (nameOffset:58) (firstTokenOffset:56) (offset:58)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 56
@@ -4638,11 +5038,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: package:test/foo.dart::@class::D::@constructor::named
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
 ''');
@@ -4679,11 +5079,12 @@
             #F3 U (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:37) (offset:45)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:45)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 37
               typeName: C
               typeNameOffset: 45
-            #F5 _ (nameOffset:70) (firstTokenOffset:68) (offset:70)
+            #F5 isOriginDeclaration _ (nameOffset:70) (firstTokenOffset:68) (offset:70)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 68
@@ -4698,13 +5099,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: package:test/foo.dart::@class::D::@constructor::named
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
 ''');
@@ -4739,11 +5140,12 @@
         #F1 class C (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:38) (offset:46)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:38) (offset:46)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 38
               typeName: C
               typeNameOffset: 46
-            #F3 _ (nameOffset:69) (firstTokenOffset:67) (offset:69)
+            #F3 isOriginDeclaration _ (nameOffset:69) (firstTokenOffset:67) (offset:69)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 67
@@ -4753,11 +5155,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: package:test/foo.dart::@class::D::@constructor::named
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
 ''');
@@ -4797,11 +5199,12 @@
             #F3 U (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:44) (offset:52)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:44) (offset:52)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 44
               typeName: C
               typeNameOffset: 52
-            #F5 _ (nameOffset:81) (firstTokenOffset:79) (offset:81)
+            #F5 isOriginDeclaration _ (nameOffset:81) (firstTokenOffset:79) (offset:81)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 79
@@ -4816,13 +5219,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: package:test/foo.dart::@class::D::@constructor::named
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
 ''');
@@ -4847,8 +5250,9 @@
             #F2 E (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 E
           constructors
-            #F3 factory new (nameOffset:<null>) (firstTokenOffset:15) (offset:23)
+            #F3 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 15
               typeName: C
               typeNameOffset: 23
   classes
@@ -4859,7 +5263,7 @@
         #E0 E
           firstFragment: #F2
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -4882,7 +5286,7 @@
         #F1 class D (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::D
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F3 class C (nameOffset:17) (firstTokenOffset:11) (offset:17)
@@ -4891,8 +5295,9 @@
             #F4 E (nameOffset:19) (firstTokenOffset:19) (offset:19)
               element: #E0 E
           constructors
-            #F5 factory new (nameOffset:<null>) (firstTokenOffset:26) (offset:34)
+            #F5 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:26) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 26
               typeName: C
               typeNameOffset: 34
   classes
@@ -4900,7 +5305,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F2
     class C
@@ -4910,7 +5315,7 @@
         #E0 E
           firstFragment: #F4
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -4936,11 +5341,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 12
               typeName: C
               typeNameOffset: 20
-            #F3 _ (nameOffset:33) (firstTokenOffset:31) (offset:33)
+            #F3 isOriginDeclaration _ (nameOffset:33) (firstTokenOffset:31) (offset:33)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 31
@@ -4948,7 +5354,7 @@
         #F4 class D (nameOffset:46) (firstTokenOffset:40) (offset:46)
           element: <testLibrary>::@class::D
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:62) (offset:62)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:62) (offset:62)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
               typeNameOffset: 62
@@ -4957,11 +5363,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: <testLibrary>::@class::D::@constructor::new
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
     class D
@@ -4969,7 +5375,7 @@
       firstFragment: #F4
       supertype: C
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
           superConstructor: <testLibrary>::@class::C::@constructor::_
@@ -5001,11 +5407,12 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:18) (offset:26)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:18) (offset:26)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 18
               typeName: C
               typeNameOffset: 26
-            #F5 _ (nameOffset:45) (firstTokenOffset:43) (offset:45)
+            #F5 isOriginDeclaration _ (nameOffset:45) (firstTokenOffset:43) (offset:45)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 43
@@ -5018,7 +5425,7 @@
             #F8 U (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: #E3 U
           constructors
-            #F9 new (nameOffset:<null>) (firstTokenOffset:86) (offset:86)
+            #F9 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:86) (offset:86)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
               typeNameOffset: 86
@@ -5032,13 +5439,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::D::@constructor::new
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
     class D
@@ -5051,7 +5458,7 @@
           firstFragment: #F8
       supertype: C<U, T>
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F9
           superConstructor: ConstructorMember
@@ -5085,7 +5492,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 37
@@ -5097,8 +5504,9 @@
             #F7 U2 (nameOffset:57) (firstTokenOffset:57) (offset:57)
               element: #E3 U2
           constructors
-            #F8 factory new (nameOffset:<null>) (firstTokenOffset:65) (offset:73)
+            #F8 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:65) (offset:73)
               element: <testLibrary>::@class::B::@constructor::new
+              factoryKeywordOffset: 65
               typeName: B
               typeNameOffset: 73
   classes
@@ -5113,7 +5521,7 @@
       interfaces
         B<T, U>
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
     class B
@@ -5125,7 +5533,7 @@
         #E3 U2
           firstFragment: #F7
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           redirectedConstructor: ConstructorMember
@@ -5154,12 +5562,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 15
-            #F4 factory redirected (nameOffset:32) (firstTokenOffset:22) (offset:32)
+            #F4 factory isOriginDeclaration redirected (nameOffset:32) (firstTokenOffset:22) (offset:32)
               element: <testLibrary>::@class::A::@constructor::redirected
+              factoryKeywordOffset: 22
               typeName: A
               typeNameOffset: 30
               periodOffset: 31
@@ -5171,10 +5580,10 @@
         #E0 T
           firstFragment: #F2
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
-        factory redirected
+        factory isOriginDeclaration redirected
           reference: <testLibrary>::@class::A::@constructor::redirected
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
@@ -5209,8 +5618,9 @@
             #F3 U (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:45) (offset:53)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:45) (offset:53)
               element: <testLibrary>::@class::B::@constructor::new
+              factoryKeywordOffset: 45
               typeName: B
               typeNameOffset: 53
           methods
@@ -5224,7 +5634,7 @@
             #F8 U (nameOffset:89) (firstTokenOffset:89) (offset:89)
               element: #E3 U
           constructors
-            #F9 new (nameOffset:<null>) (firstTokenOffset:112) (offset:112)
+            #F9 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:112) (offset:112)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 112
@@ -5246,7 +5656,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
@@ -5267,7 +5677,7 @@
           firstFragment: #F8
       supertype: B<U, T>
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F9
   typeAliases
@@ -5309,11 +5719,12 @@
         #F1 class C (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:31) (offset:39)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 31
               typeName: C
               typeNameOffset: 39
-            #F3 _ (nameOffset:52) (firstTokenOffset:50) (offset:52)
+            #F3 isOriginDeclaration _ (nameOffset:52) (firstTokenOffset:50) (offset:52)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 50
@@ -5323,11 +5734,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: package:test/foo.dart::@class::D::@constructor::new
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
 ''');
@@ -5364,11 +5775,12 @@
             #F3 U (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:37) (offset:45)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:45)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 37
               typeName: C
               typeNameOffset: 45
-            #F5 _ (nameOffset:64) (firstTokenOffset:62) (offset:64)
+            #F5 isOriginDeclaration _ (nameOffset:64) (firstTokenOffset:62) (offset:64)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 62
@@ -5383,13 +5795,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: package:test/foo.dart::@class::D::@constructor::new
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
 ''');
@@ -5422,11 +5834,12 @@
         #F1 class C (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:31) (offset:39)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 31
               typeName: C
               typeNameOffset: 39
-            #F3 _ (nameOffset:52) (firstTokenOffset:50) (offset:52)
+            #F3 isOriginDeclaration _ (nameOffset:52) (firstTokenOffset:50) (offset:52)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 50
@@ -5436,11 +5849,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: package:test/foo.dart::@class::B::@constructor::new
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
 ''');
@@ -5475,11 +5888,12 @@
         #F1 class C (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:38) (offset:46)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:38) (offset:46)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 38
               typeName: C
               typeNameOffset: 46
-            #F3 _ (nameOffset:63) (firstTokenOffset:61) (offset:63)
+            #F3 isOriginDeclaration _ (nameOffset:63) (firstTokenOffset:61) (offset:63)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 61
@@ -5489,11 +5903,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: package:test/foo.dart::@class::D::@constructor::new
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
 ''');
@@ -5533,11 +5947,12 @@
             #F3 U (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: #E1 U
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:44) (offset:52)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:44) (offset:52)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 44
               typeName: C
               typeNameOffset: 52
-            #F5 _ (nameOffset:75) (firstTokenOffset:73) (offset:75)
+            #F5 isOriginDeclaration _ (nameOffset:75) (firstTokenOffset:73) (offset:75)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 73
@@ -5552,13 +5967,13 @@
         #E1 U
           firstFragment: #F3
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           redirectedConstructor: ConstructorMember
             baseElement: package:test/foo.dart::@class::D::@constructor::new
             substitution: {T: U, U: T}
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
 ''');
@@ -5594,11 +6009,12 @@
         #F1 class C (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:38) (offset:46)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:38) (offset:46)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 38
               typeName: C
               typeNameOffset: 46
-            #F3 _ (nameOffset:63) (firstTokenOffset:61) (offset:63)
+            #F3 isOriginDeclaration _ (nameOffset:63) (firstTokenOffset:61) (offset:63)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 61
@@ -5608,11 +6024,11 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: package:test/foo.dart::@class::B::@constructor::new
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F3
 ''');
@@ -5637,8 +6053,9 @@
             #F2 E (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 E
           constructors
-            #F3 factory new (nameOffset:<null>) (firstTokenOffset:15) (offset:23)
+            #F3 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 15
               typeName: C
               typeNameOffset: 23
   classes
@@ -5649,7 +6066,7 @@
         #E0 E
           firstFragment: #F2
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -5676,11 +6093,12 @@
         #F1 class B (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::B
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:27) (offset:35)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:35)
               element: <testLibrary>::@class::B::@constructor::new
+              factoryKeywordOffset: 27
               typeName: B
               typeNameOffset: 35
-            #F3 _ (nameOffset:48) (firstTokenOffset:46) (offset:48)
+            #F3 isOriginDeclaration _ (nameOffset:48) (firstTokenOffset:46) (offset:48)
               element: <testLibrary>::@class::B::@constructor::_
               typeName: B
               typeNameOffset: 46
@@ -5688,7 +6106,7 @@
         #F4 class C (nameOffset:61) (firstTokenOffset:55) (offset:61)
           element: <testLibrary>::@class::C
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:77) (offset:77)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:77) (offset:77)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 77
@@ -5700,11 +6118,11 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           redirectedConstructor: <testLibrary>::@class::C::@constructor::new
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::B::@constructor::_
           firstFragment: #F3
     class C
@@ -5712,7 +6130,7 @@
       firstFragment: #F4
       supertype: B
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           superConstructor: <testLibrary>::@class::B::@constructor::_
@@ -5741,12 +6159,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const named (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration named (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 18
               periodOffset: 19
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 37
@@ -5755,10 +6173,10 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F2
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -5797,12 +6215,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const named (nameOffset:23) (firstTokenOffset:15) (offset:23)
+            #F3 const isOriginDeclaration named (nameOffset:23) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 21
               periodOffset: 22
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 40
@@ -5814,10 +6232,10 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F3
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           constantInitializers
@@ -5853,12 +6271,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 12
               periodOffset: 13
-            #F3 new (nameOffset:<null>) (firstTokenOffset:25) (offset:25)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 25
@@ -5867,10 +6285,10 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F2
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           redirectedConstructor: <testLibrary>::@class::C::@constructor::named
@@ -5894,11 +6312,11 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 18
-            #F3 const named (nameOffset:33) (firstTokenOffset:25) (offset:33)
+            #F3 const isOriginDeclaration named (nameOffset:33) (firstTokenOffset:25) (offset:33)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 31
@@ -5908,10 +6326,10 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F3
           constantInitializers
@@ -5945,11 +6363,11 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 21
-            #F4 const named (nameOffset:36) (firstTokenOffset:28) (offset:36)
+            #F4 const isOriginDeclaration named (nameOffset:36) (firstTokenOffset:28) (offset:36)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 34
@@ -5962,10 +6380,10 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F4
           constantInitializers
@@ -5996,11 +6414,11 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 12
-            #F3 named (nameOffset:21) (firstTokenOffset:19) (offset:21)
+            #F3 isOriginDeclaration named (nameOffset:21) (firstTokenOffset:19) (offset:21)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 19
@@ -6010,10 +6428,10 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F3
           redirectedConstructor: <testLibrary>::@class::C::@constructor::new
@@ -6049,8 +6467,9 @@
         #F1 class C (nameOffset:87) (firstTokenOffset:81) (offset:87)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:96) (offset:104)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:96) (offset:104)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 96
               typeName: C
               typeNameOffset: 104
   classes
@@ -6058,7 +6477,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: ConstructorMember
@@ -6094,8 +6513,9 @@
         #F1 class C (nameOffset:91) (firstTokenOffset:85) (offset:91)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:100) (offset:108)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:100) (offset:108)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 100
               typeName: C
               typeNameOffset: 108
   classes
@@ -6103,7 +6523,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           redirectedConstructor: ConstructorMember
@@ -6136,7 +6556,7 @@
         #F1 class C (nameOffset:41) (firstTokenOffset:35) (offset:41)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -6145,7 +6565,7 @@
       firstFragment: #F1
       supertype: B<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: ConstructorMember
@@ -6175,7 +6595,7 @@
         #F1 class C (nameOffset:52) (firstTokenOffset:46) (offset:52)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -6184,7 +6604,7 @@
       firstFragment: #F1
       supertype: B<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: ConstructorMember
@@ -6219,7 +6639,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 named (nameOffset:17) (firstTokenOffset:15) (offset:17)
+            #F3 isOriginDeclaration named (nameOffset:17) (firstTokenOffset:15) (offset:17)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 15
@@ -6230,7 +6650,7 @@
         #F5 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:58) (offset:58)
+            #F6 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:58) (offset:58)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 58
@@ -6242,7 +6662,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -6254,7 +6674,7 @@
       firstFragment: #F5
       supertype: A<int>
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: ConstructorMember
@@ -6282,7 +6702,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -6290,7 +6710,7 @@
         #F3 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:47) (offset:47)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:47) (offset:47)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 47
@@ -6299,7 +6719,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F2
     class B
@@ -6307,7 +6727,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::named
@@ -6331,13 +6751,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:33) (offset:33)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:33) (offset:33)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 33
@@ -6346,7 +6766,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -6354,7 +6774,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -6378,13 +6798,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:33) (offset:33)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:33) (offset:33)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 33
@@ -6393,7 +6813,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -6401,7 +6821,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -6423,13 +6843,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -6437,7 +6857,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -6445,7 +6865,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -6465,7 +6885,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -6473,7 +6893,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -6500,41 +6920,41 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
         #F5 class D (nameOffset:58) (firstTokenOffset:52) (offset:58)
           element: <testLibrary>::@class::D
           fields
-            #F6 x (nameOffset:70) (firstTokenOffset:70) (offset:70)
+            #F6 isOriginDeclaration x (nameOffset:70) (firstTokenOffset:70) (offset:70)
               element: <testLibrary>::@class::D::@field::x
           constructors
-            #F7 const new (nameOffset:<null>) (firstTokenOffset:75) (offset:81)
+            #F7 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:75) (offset:81)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
               typeNameOffset: 81
           getters
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::D::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -6557,7 +6977,7 @@
                   rightParenthesis: ) @47
                 staticType: D
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
@@ -6566,13 +6986,13 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::D::@field::x
           firstFragment: #F6
           type: dynamic
           getter: <testLibrary>::@class::D::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
           constantInitializers
@@ -6595,7 +7015,7 @@
                   rightParenthesis: ) @99
                 staticType: C
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::D::@getter::x
           firstFragment: #F8
           returnType: dynamic
@@ -6624,45 +7044,45 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:23) (offset:23)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 23
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
         #F5 class D (nameOffset:50) (firstTokenOffset:44) (offset:50)
           element: <testLibrary>::@class::D
           fields
-            #F6 x (nameOffset:62) (firstTokenOffset:62) (offset:62)
+            #F6 isOriginDeclaration x (nameOffset:62) (firstTokenOffset:62) (offset:62)
               element: <testLibrary>::@class::D::@field::x
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:67) (offset:67)
+            #F7 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:67) (offset:67)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
               typeNameOffset: 67
           getters
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::D::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
@@ -6671,17 +7091,17 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::D::@field::x
           firstFragment: #F6
           type: dynamic
           getter: <testLibrary>::@class::D::@getter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::D::@getter::x
           firstFragment: #F8
           returnType: dynamic
@@ -6706,7 +7126,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::C::@constructor::foo
               typeName: C
               typeNameOffset: 12
@@ -6716,7 +7136,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@constructor::foo
           firstFragment: #F2
 ''');
@@ -6739,7 +7159,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 12
@@ -6748,7 +7168,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -6771,7 +7191,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration new (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 12
@@ -6781,7 +7201,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -6802,13 +7222,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:30) (firstTokenOffset:24) (offset:30)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -6816,14 +7236,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
 ''');
@@ -6844,13 +7264,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -6858,14 +7278,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
 ''');
@@ -6886,13 +7306,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -6900,14 +7320,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
 ''');
@@ -6929,7 +7349,7 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:0) (offset:22)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -6938,7 +7358,7 @@
       firstFragment: #F1
       documentationComment: /**\n * Docs\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -6992,31 +7412,31 @@
         #F1 class A (nameOffset:36) (firstTokenOffset:15) (offset:36)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:79) (firstTokenOffset:57) (offset:79)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:122) (firstTokenOffset:101) (offset:122)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F7 class D (nameOffset:173) (firstTokenOffset:159) (offset:173)
           element: <testLibrary>::@class::D
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:173)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:173)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F9 class E (nameOffset:207) (firstTokenOffset:179) (offset:207)
           element: <testLibrary>::@class::E
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -7025,7 +7445,7 @@
       firstFragment: #F1
       documentationComment: /**\n * bbb\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -7033,7 +7453,7 @@
       firstFragment: #F3
       documentationComment: /// bbb\n/// ccc
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
@@ -7041,7 +7461,7 @@
       firstFragment: #F5
       documentationComment: /**\n * ccc\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
     class D
@@ -7049,7 +7469,7 @@
       firstFragment: #F7
       documentationComment: /// ddd
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F8
     class E
@@ -7057,7 +7477,7 @@
       firstFragment: #F9
       documentationComment: /**\n * aaa\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F10
 ''');
@@ -7079,7 +7499,7 @@
         #F1 class C (nameOffset:37) (firstTokenOffset:0) (offset:37)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7088,7 +7508,7 @@
       firstFragment: #F1
       documentationComment: /// first\n/// second\n/// third
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7113,19 +7533,19 @@
         #F1 class C (nameOffset:47) (firstTokenOffset:0) (offset:47)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:59) (firstTokenOffset:53) (offset:59)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:70) (firstTokenOffset:64) (offset:70)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -7134,21 +7554,21 @@
       firstFragment: #F1
       documentationComment: /**\n * Docs referring to [D] and [E]\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -7166,7 +7586,7 @@
         #F1 class C (nameOffset:25) (firstTokenOffset:0) (offset:25)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7175,7 +7595,7 @@
       firstFragment: #F1
       documentationComment: /**\n * Docs\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7198,7 +7618,7 @@
         #F1 class C (nameOffset:66) (firstTokenOffset:44) (offset:66)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7207,7 +7627,7 @@
       firstFragment: #F1
       documentationComment: /**\n * Docs\n */
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7255,41 +7675,41 @@
         #F1 class BeforeMeta (nameOffset:48) (firstTokenOffset:0) (offset:48)
           element: <testLibrary>::@class::BeforeMeta
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::BeforeMeta::@constructor::new
               typeName: BeforeMeta
         #F3 class BeforeMetaNamed (nameOffset:117) (firstTokenOffset:63) (offset:117)
           element: <testLibrary>::@class::BeforeMetaNamed
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:117)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:117)
               element: <testLibrary>::@class::BeforeMetaNamed::@constructor::new
               typeName: BeforeMetaNamed
         #F5 class AfterMeta (nameOffset:185) (firstTokenOffset:137) (offset:185)
           element: <testLibrary>::@class::AfterMeta
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:185)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:185)
               element: <testLibrary>::@class::AfterMeta::@constructor::new
               typeName: AfterMeta
         #F7 class AroundMeta (nameOffset:247) (firstTokenOffset:213) (offset:247)
           element: <testLibrary>::@class::AroundMeta
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:247)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:247)
               element: <testLibrary>::@class::AroundMeta::@constructor::new
               typeName: AroundMeta
         #F9 class DocBeforeMetaNotDocAfter (nameOffset:319) (firstTokenOffset:262) (offset:319)
           element: <testLibrary>::@class::DocBeforeMetaNotDocAfter
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:319)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:319)
               element: <testLibrary>::@class::DocBeforeMetaNotDocAfter::@constructor::new
               typeName: DocBeforeMetaNotDocAfter
         #F11 class Annotation (nameOffset:354) (firstTokenOffset:348) (offset:354)
           element: <testLibrary>::@class::Annotation
           constructors
-            #F12 const new (nameOffset:<null>) (firstTokenOffset:369) (offset:375)
+            #F12 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:369) (offset:375)
               element: <testLibrary>::@class::Annotation::@constructor::new
               typeName: Annotation
               typeNameOffset: 375
-            #F13 const named (nameOffset:408) (firstTokenOffset:391) (offset:408)
+            #F13 const isOriginDeclaration named (nameOffset:408) (firstTokenOffset:391) (offset:408)
               element: <testLibrary>::@class::Annotation::@constructor::named
               typeName: Annotation
               typeNameOffset: 397
@@ -7300,7 +7720,7 @@
       firstFragment: #F1
       documentationComment: /// Comment 1\n/// Comment 2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::BeforeMeta::@constructor::new
           firstFragment: #F2
     class BeforeMetaNamed
@@ -7308,7 +7728,7 @@
       firstFragment: #F3
       documentationComment: /// Comment 1\n/// Comment 2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::BeforeMetaNamed::@constructor::new
           firstFragment: #F4
     class AfterMeta
@@ -7316,7 +7736,7 @@
       firstFragment: #F5
       documentationComment: /// Comment 1\n/// Comment 2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::AfterMeta::@constructor::new
           firstFragment: #F6
     class AroundMeta
@@ -7324,7 +7744,7 @@
       firstFragment: #F7
       documentationComment: /// Comment 2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::AroundMeta::@constructor::new
           firstFragment: #F8
     class DocBeforeMetaNotDocAfter
@@ -7332,17 +7752,17 @@
       firstFragment: #F9
       documentationComment: /// Doc comment.
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::DocBeforeMetaNotDocAfter::@constructor::new
           firstFragment: #F10
     class Annotation
       reference: <testLibrary>::@class::Annotation
       firstFragment: #F11
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::Annotation::@constructor::new
           firstFragment: #F12
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::Annotation::@constructor::named
           firstFragment: #F13
 ''');
@@ -7364,17 +7784,17 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           fields
-            #F2 i (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F2 isOriginDeclaration i (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@class::C::@field::i
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@getter::i
           setters
-            #F5 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@setter::i
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -7384,24 +7804,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        abstract i
+        abstract isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::i
           setter: <testLibrary>::@class::C::@setter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic abstract i
+        synthetic abstract isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::i
       setters
-        synthetic abstract i
+        synthetic abstract isOriginVariable i
           reference: <testLibrary>::@class::C::@setter::i
           firstFragment: #F5
           formalParameters
@@ -7425,25 +7845,25 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer i (nameOffset:27) (firstTokenOffset:27) (offset:27)
+            #F2 hasInitializer isOriginDeclaration i (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::C::@field::i
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @31
                   staticType: int
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@getter::i
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer i
+        static const hasInitializer isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
@@ -7452,11 +7872,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static i
+        synthetic static isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F4
           returnType: int
@@ -7478,25 +7898,25 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer i (nameOffset:32) (firstTokenOffset:32) (offset:32)
+            #F2 hasInitializer isOriginDeclaration i (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: <testLibrary>::@class::C::@field::i
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @36
                   staticType: int
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F4 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@getter::i
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static late const hasInitializer i
+        static late const hasInitializer isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
@@ -7505,11 +7925,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static i
+        synthetic static isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F4
           returnType: int
@@ -7532,17 +7952,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F2 isOriginDeclaration x (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional covariant value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
@@ -7552,24 +7972,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        covariant x
+        covariant isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -7599,17 +8019,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:38) (firstTokenOffset:38) (offset:38)
+            #F2 isOriginDeclaration x (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
@@ -7619,24 +8039,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -7665,21 +8085,21 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::foo::@def::0
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo::@def::1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::foo::@def::0
-            #F6 foo (nameOffset:35) (firstTokenOffset:27) (offset:35)
+            #F6 isOriginDeclaration foo (nameOffset:35) (firstTokenOffset:27) (offset:35)
               element: <testLibrary>::@class::C::@getter::foo::@def::1
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -7689,34 +8109,34 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo::@def::0
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo::@def::0
           setter: <testLibrary>::@class::C::@setter::foo
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo::@def::1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::C::@getter::foo::@def::1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo::@def::0
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo::@def::0
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@getter::foo::@def::1
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo::@def::1
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -7745,24 +8165,24 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::foo::@def::0
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo::@def::1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::foo::@def::0
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::foo::@def::0::@formalParameter::value
-            #F8 foo (nameOffset:31) (firstTokenOffset:27) (offset:31)
+            #F8 isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:27) (offset:31)
               element: <testLibrary>::@class::C::@setter::foo::@def::1
               formalParameters
                 #F9 requiredPositional _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
@@ -7772,29 +8192,29 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo::@def::0
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo::@def::0
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo::@def::1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::C::@setter::foo::@def::1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo::@def::0
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo::@def::0
           firstFragment: #F6
           formalParameters
@@ -7803,7 +8223,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::foo::@def::0
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@setter::foo::@def::1
           firstFragment: #F8
           formalParameters
@@ -7831,17 +8251,17 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           fields
-            #F2 i (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F2 isOriginDeclaration i (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@class::C::@field::i
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@getter::i
           setters
-            #F5 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@setter::i
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -7851,24 +8271,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        external i
+        external isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::i
           setter: <testLibrary>::@class::C::@setter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::i
       setters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::C::@setter::i
           firstFragment: #F5
           formalParameters
@@ -7897,26 +8317,26 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
               initializer: expression_0
                 IntegerLiteral
                   literal: 42 @22
                   staticType: int
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 34
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer x
+        final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
@@ -7925,11 +8345,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -7960,14 +8380,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
         #F4 class B (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::B
           fields
-            #F5 hasInitializer f (nameOffset:46) (firstTokenOffset:46) (offset:46)
+            #F5 hasInitializer isOriginDeclaration f (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: <testLibrary>::@class::B::@field::f
               initializer: expression_0
                 InstanceCreationExpression
@@ -7992,11 +8412,11 @@
                                   element: dart:core::@class::double
                                   type: double
                                 name: a @78
-                                declaredElement: <testLibraryFragment> a@78
+                                declaredFragment: <testLibraryFragment> a@78
                                   element: isPublic
                                     type: double
                               rightParenthesis: ) @79
-                            declaredElement: GenericFunctionTypeElement
+                            declaredFragment: GenericFunctionTypeElement
                               parameters
                                 a
                                   kind: required positional
@@ -8016,12 +8436,12 @@
                     rightParenthesis: ) @82
                   staticType: A<int Function(double)>
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:87) (offset:93)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:87) (offset:93)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 93
           getters
-            #F7 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F7 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::B::@getter::f
   classes
     class A
@@ -8031,14 +8451,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       fields
-        final hasInitializer f
+        final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::B::@field::f
           firstFragment: #F5
           type: A<int Function(double)>
@@ -8047,11 +8467,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::B::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::B::@getter::f
           firstFragment: #F7
           returnType: A<int Function(double)>
@@ -8075,31 +8495,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer x
+        final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -8125,10 +8545,10 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F2 isOriginDeclaration foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:29) (offset:29)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 29
@@ -8136,10 +8556,10 @@
                 #F4 requiredPositional final this.foo (nameOffset:36) (firstTokenOffset:31) (offset:36)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F6 foo (nameOffset:48) (firstTokenOffset:44) (offset:48)
+            #F6 isOriginDeclaration foo (nameOffset:48) (firstTokenOffset:44) (offset:48)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional newValue (nameOffset:56) (firstTokenOffset:52) (offset:56)
@@ -8149,14 +8569,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -8165,13 +8585,13 @@
               type: int
               field: <testLibrary>::@class::A::@field::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -8198,10 +8618,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 v (nameOffset:24) (firstTokenOffset:24) (offset:24)
+            #F2 isOriginDeclaration v (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 27
@@ -8209,10 +8629,10 @@
                 #F4 requiredPositional final this.v (nameOffset:34) (firstTokenOffset:29) (offset:34)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::v
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
@@ -8220,14 +8640,14 @@
         #F8 class D (nameOffset:55) (firstTokenOffset:40) (offset:55)
           element: <testLibrary>::@class::D
           fields
-            #F9 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F9 synthetic isOriginGetterSetter v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@class::D::@field::v
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F11 v (nameOffset:67) (firstTokenOffset:59) (offset:67)
+            #F11 isOriginDeclaration v (nameOffset:67) (firstTokenOffset:59) (offset:67)
               element: <testLibrary>::@class::D::@getter::v
   classes
     hasNonFinalField class C
@@ -8235,14 +8655,14 @@
       firstFragment: #F1
       supertype: D
       fields
-        v
+        hasImplicitType isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -8252,13 +8672,13 @@
               field: <testLibrary>::@class::C::@field::v
           superConstructor: <testLibrary>::@class::D::@constructor::new
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F6
           formalParameters
@@ -8271,17 +8691,17 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F8
       fields
-        synthetic v
+        synthetic isOriginGetterSetter v
           reference: <testLibrary>::@class::D::@field::v
           firstFragment: #F9
           type: int
           getter: <testLibrary>::@class::D::@getter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F10
       getters
-        abstract v
+        abstract isOriginDeclaration v
           reference: <testLibrary>::@class::D::@getter::v
           firstFragment: #F11
           returnType: int
@@ -8301,17 +8721,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -8321,24 +8741,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -8362,17 +8782,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:19) (firstTokenOffset:19) (offset:19)
+            #F2 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:19) (offset:19)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
@@ -8382,24 +8802,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        late x
+        late hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -8423,17 +8843,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -8443,24 +8863,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer v
+        hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: num
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -8484,17 +8904,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -8504,24 +8924,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer v
+        hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -8547,17 +8967,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 v (nameOffset:24) (firstTokenOffset:24) (offset:24)
+            #F2 isOriginDeclaration v (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
@@ -8565,14 +8985,14 @@
         #F7 class D (nameOffset:44) (firstTokenOffset:29) (offset:44)
           element: <testLibrary>::@class::D
           fields
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F8 synthetic isOriginGetterSetter v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::D::@field::v
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F10 v (nameOffset:56) (firstTokenOffset:48) (offset:56)
+            #F10 isOriginDeclaration v (nameOffset:56) (firstTokenOffset:48) (offset:56)
               element: <testLibrary>::@class::D::@getter::v
   classes
     hasNonFinalField class C
@@ -8580,25 +9000,25 @@
       firstFragment: #F1
       supertype: D
       fields
-        v
+        hasImplicitType isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::D::@constructor::new
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -8611,17 +9031,17 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F7
       fields
-        synthetic v
+        synthetic isOriginGetterSetter v
           reference: <testLibrary>::@class::D::@field::v
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::D::@getter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F9
       getters
-        abstract v
+        abstract isOriginDeclaration v
           reference: <testLibrary>::@class::D::@getter::v
           firstFragment: #F10
           returnType: int
@@ -8651,20 +9071,20 @@
         #F1 class A (nameOffset:28) (firstTokenOffset:13) (offset:28)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 40
           getters
-            #F4 f (nameOffset:61) (firstTokenOffset:47) (offset:61)
+            #F4 isOriginDeclaration f (nameOffset:61) (firstTokenOffset:47) (offset:61)
               element: <testLibrary>::@class::A::@getter::f
         #F5 class B (nameOffset:72) (firstTokenOffset:66) (offset:72)
           element: <testLibrary>::@class::B
           fields
-            #F6 hasInitializer f (nameOffset:107) (firstTokenOffset:107) (offset:107)
+            #F6 hasInitializer isOriginDeclaration f (nameOffset:107) (firstTokenOffset:107) (offset:107)
               element: <testLibrary>::@class::B::@field::f
               initializer: expression_0
                 ListLiteral
@@ -8677,39 +9097,39 @@
                   rightBracket: ] @113
                   staticType: List<int>
           constructors
-            #F7 const new (nameOffset:<null>) (firstTokenOffset:88) (offset:94)
+            #F7 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:88) (offset:94)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 94
           getters
-            #F8 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:107)
+            #F8 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:107)
               element: <testLibrary>::@class::B::@getter::f
       topLevelVariables
-        #F9 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F9 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_1
             IntegerLiteral
               literal: 0 @10
               staticType: int
       getters
-        #F10 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F10 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F2
           type: List<int>
           getter: <testLibrary>::@class::A::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract f
+        abstract isOriginDeclaration f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: List<int>
@@ -8719,7 +9139,7 @@
       firstFragment: #F5
       supertype: A
       fields
-        final hasInitializer f
+        final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::B::@field::f
           firstFragment: #F6
           type: List<int>
@@ -8728,18 +9148,18 @@
             expression: expression_0
           getter: <testLibrary>::@class::B::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::B::@getter::f
           firstFragment: #F8
           returnType: List<int>
           variable: <testLibrary>::@class::B::@field::f
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F9
       type: int
@@ -8748,7 +9168,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F10
       returnType: int
@@ -8768,17 +9188,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer v (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
@@ -8788,24 +9208,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static hasInitializer v
+        static hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -8838,49 +9258,49 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:21) (offset:27)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:21) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 27
           getters
-            #F4 foo (nameOffset:45) (firstTokenOffset:34) (offset:45)
+            #F4 isOriginDeclaration foo (nameOffset:45) (firstTokenOffset:34) (offset:45)
               element: <testLibrary>::@class::A::@getter::foo
         #F5 class B (nameOffset:58) (firstTokenOffset:52) (offset:58)
           element: <testLibrary>::@class::B
           fields
-            #F6 hasInitializer foo (nameOffset:93) (firstTokenOffset:93) (offset:93)
+            #F6 hasInitializer isOriginDeclaration foo (nameOffset:93) (firstTokenOffset:93) (offset:93)
               element: <testLibrary>::@class::B::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 2 @99
                   staticType: double
           constructors
-            #F7 const new (nameOffset:<null>) (firstTokenOffset:74) (offset:80)
+            #F7 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:74) (offset:80)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 80
           getters
-            #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:93)
+            #F8 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:93)
               element: <testLibrary>::@class::B::@getter::foo
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: double
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract foo
+        abstract isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: double
@@ -8890,7 +9310,7 @@
       firstFragment: #F5
       supertype: A
       fields
-        final hasInitializer foo
+        final hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::B::@field::foo
           firstFragment: #F6
           type: double
@@ -8899,12 +9319,12 @@
             expression: expression_0
           getter: <testLibrary>::@class::B::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::B::@getter::foo
           firstFragment: #F8
           returnType: double
@@ -8929,31 +9349,31 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic _foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter _foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::_foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 _foo (nameOffset:30) (firstTokenOffset:21) (offset:30)
+            #F4 isOriginDeclaration _foo (nameOffset:30) (firstTokenOffset:21) (offset:30)
               element: <testLibrary>::@class::A::@getter::_foo
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic promotable _foo
+        synthetic promotable isOriginGetterSetter _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F2
           type: int?
           getter: <testLibrary>::@class::A::@getter::_foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract _foo
+        abstract isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@getter::_foo
           firstFragment: #F4
           returnType: int?
@@ -8982,7 +9402,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9015,7 +9435,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9048,7 +9468,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9081,7 +9501,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9110,7 +9530,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9143,7 +9563,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9172,7 +9592,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9198,7 +9618,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9232,7 +9652,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9277,7 +9697,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9286,7 +9706,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F2
       fields
-        final promotable hasInitializer _foo
+        final promotable hasInitializer isOriginDeclaration _foo
           reference: <testLibrary>::@class::B::@field::_foo
           firstFragment: #F3
           type: int?
@@ -9298,7 +9718,7 @@
       superclassConstraints
         Object
       fields
-        final promotable hasInitializer _foo
+        final promotable hasInitializer isOriginDeclaration _foo
           reference: <testLibrary>::@mixin::M::@field::_foo
           firstFragment: #F5
           type: int?
@@ -9336,7 +9756,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9345,7 +9765,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F2
       fields
-        final promotable hasInitializer _foo
+        final promotable hasInitializer isOriginDeclaration _foo
           reference: <testLibrary>::@class::B::@field::_foo
           firstFragment: #F3
           type: int?
@@ -9381,7 +9801,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9420,7 +9840,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9429,7 +9849,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F2
       fields
-        final hasInitializer _foo
+        final hasInitializer isOriginDeclaration _foo
           reference: <testLibrary>::@class::B::@field::_foo
           firstFragment: #F3
           type: int?
@@ -9467,7 +9887,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9511,7 +9931,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9545,7 +9965,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9585,7 +10005,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final _foo
+        final isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9597,7 +10017,7 @@
       superclassConstraints
         Object
       fields
-        final hasInitializer _foo
+        final hasInitializer isOriginDeclaration _foo
           reference: <testLibrary>::@mixin::M::@field::_foo
           firstFragment: #F3
           type: int?
@@ -9634,7 +10054,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9658,7 +10078,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        _foo
+        isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
@@ -9687,7 +10107,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        field
+        isOriginDeclaration field
           reference: <testLibrary>::@class::A::@field::field
           firstFragment: #F1
           type: int?
@@ -9715,12 +10135,12 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@class::A::@field::_foo
           firstFragment: #F1
           type: int?
           getter: <testLibrary>::@class::A::@getter::_foo
-        final hasInitializer bar
+        final hasImplicitType hasInitializer isOriginDeclaration bar
           reference: <testLibrary>::@class::A::@field::bar
           firstFragment: #F2
           type: int
@@ -9744,26 +10164,26 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           fields
-            #F2 a (nameOffset:28) (firstTokenOffset:28) (offset:28)
+            #F2 isOriginDeclaration a (nameOffset:28) (firstTokenOffset:28) (offset:28)
               element: <testLibrary>::@class::C::@field::a
-            #F3 <null-name> (nameOffset:<null>) (firstTokenOffset:30) (offset:30)
+            #F3 isOriginDeclaration <null-name> (nameOffset:<null>) (firstTokenOffset:30) (offset:30)
               element: <testLibrary>::@class::C::@field::0
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::C::@getter::a
-            #F6 synthetic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::C::@getter::1
           setters
-            #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::C::@setter::a
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
                   element: <testLibrary>::@class::C::@setter::a::@formalParameter::value
-            #F9 synthetic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F9 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::C::@setter::2
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
@@ -9773,35 +10193,35 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::C::@field::a
           firstFragment: #F2
           type: Object
           getter: <testLibrary>::@class::C::@getter::a
           setter: <testLibrary>::@class::C::@setter::a
-        <null-name>
+        isOriginDeclaration <null-name>
           reference: <testLibrary>::@class::C::@field::0
           firstFragment: #F3
           type: Object
           getter: <testLibrary>::@class::C::@getter::1
           setter: <testLibrary>::@class::C::@setter::2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@getter::a
           firstFragment: #F5
           returnType: Object
           variable: <testLibrary>::@class::C::@field::a
-        synthetic <null-name>
+        synthetic isOriginVariable <null-name>
           reference: <testLibrary>::@class::C::@getter::1
           firstFragment: #F6
           returnType: Object
           variable: <testLibrary>::@class::C::@field::0
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@setter::a
           firstFragment: #F7
           formalParameters
@@ -9810,7 +10230,7 @@
               type: Object
           returnType: void
           variable: <testLibrary>::@class::C::@field::a
-        synthetic <null-name>
+        synthetic isOriginVariable <null-name>
           reference: <testLibrary>::@class::C::@setter::2
           firstFragment: #F9
           formalParameters
@@ -9842,13 +10262,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 foo (nameOffset:24) (firstTokenOffset:24) (offset:24)
+            #F3 isOriginDeclaration foo (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: <testLibrary>::@class::C::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
@@ -9861,20 +10281,20 @@
         #E0 T
           firstFragment: #F2
       fields
-        late foo
+        late isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -9906,13 +10326,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F3 isOriginDeclaration foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::C::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
@@ -9925,7 +10345,7 @@
         #E0 T
           firstFragment: #F2
       fields
-        late foo
+        late isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -9933,14 +10353,14 @@
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
@@ -9968,25 +10388,25 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::x
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @29
                   staticType: int
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer x
+        static const hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
@@ -9995,11 +10415,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10026,31 +10446,31 @@
         #F1 class C (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer b (nameOffset:35) (firstTokenOffset:35) (offset:35)
+            #F2 hasInitializer isOriginDeclaration b (nameOffset:35) (firstTokenOffset:35) (offset:35)
               element: <testLibrary>::@class::C::@field::b
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::C::@getter::b
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer b
+        final hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@class::C::@field::b
           firstFragment: #F2
           type: double
           getter: <testLibrary>::@class::C::@getter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::C::@getter::b
           firstFragment: #F4
           returnType: double
@@ -10083,53 +10503,53 @@
         #F2 class C (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::C
           fields
-            #F3 hasInitializer b (nameOffset:46) (firstTokenOffset:46) (offset:46)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: <testLibrary>::@class::C::@field::b
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::C::@getter::b
     #F1 package:test/a.dart
       element: <testLibrary>
       enclosingFragment: #F0
       previousFragment: #F0
       topLevelVariables
-        #F6 hasInitializer a (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F6 hasInitializer isOriginDeclaration a (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::a
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F2
       fields
-        final hasInitializer b
+        final hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@class::C::@field::b
           firstFragment: #F3
           type: double
           getter: <testLibrary>::@class::C::@getter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::C::@getter::b
           firstFragment: #F5
           returnType: double
           variable: <testLibrary>::@class::C::@field::b
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F6
       type: int
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F7
       returnType: int
@@ -10152,31 +10572,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer x
+        final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10199,31 +10619,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static final hasInitializer x
+        static final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10243,17 +10663,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 i (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F2 isOriginDeclaration i (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::i
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::i
           setters
-            #F5 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@setter::i
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
@@ -10263,24 +10683,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static i
+        static isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::i
           setter: <testLibrary>::@class::C::@setter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static i
+        synthetic static isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::i
       setters
-        synthetic static i
+        synthetic static isOriginVariable i
           reference: <testLibrary>::@class::C::@setter::i
           firstFragment: #F5
           formalParameters
@@ -10309,32 +10729,32 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 40
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::f
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static final hasInitializer f
+        static final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static f
+        synthetic static isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
@@ -10354,31 +10774,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:23) (firstTokenOffset:23) (offset:23)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static final hasInitializer x
+        static final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10398,17 +10818,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 i (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F2 isOriginDeclaration i (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@class::C::@field::i
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::C::@getter::i
           setters
-            #F5 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::C::@setter::i
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
@@ -10418,24 +10838,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static late i
+        static late isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::i
           setter: <testLibrary>::@class::C::@setter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static i
+        synthetic static isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::i
       setters
-        synthetic static i
+        synthetic static isOriginVariable i
           reference: <testLibrary>::@class::C::@setter::i
           firstFragment: #F5
           formalParameters
@@ -10464,17 +10884,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer a (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::a
           setters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::a
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -10484,24 +10904,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer a
+        hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::C::@field::a
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::a
           setter: <testLibrary>::@class::C::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@getter::a
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@setter::a
           firstFragment: #F5
           formalParameters
@@ -10530,17 +10950,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -10550,24 +10970,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -10600,43 +11020,43 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 foo (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::foo
         #F5 class B (nameOffset:43) (firstTokenOffset:37) (offset:43)
           element: <testLibrary>::@class::B
           fields
-            #F6 hasInitializer foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
+            #F6 hasInitializer isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: <testLibrary>::@class::B::@field::foo
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F8 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@class::B::@getter::foo
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract foo
+        abstract isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -10646,18 +11066,18 @@
       firstFragment: #F5
       supertype: A
       fields
-        final hasInitializer foo
+        final hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::B::@field::foo
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::B::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::B::@getter::foo
           firstFragment: #F8
           returnType: int
@@ -10682,17 +11102,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer a (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::a
           setters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::a
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -10702,24 +11122,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer a
+        hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::C::@field::a
           firstFragment: #F2
           type: Never
           getter: <testLibrary>::@class::C::@getter::a
           setter: <testLibrary>::@class::C::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@getter::a
           firstFragment: #F4
           returnType: Never
           variable: <testLibrary>::@class::C::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@setter::a
           firstFragment: #F5
           formalParameters
@@ -10743,17 +11163,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -10763,24 +11183,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer x
+        hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -10804,17 +11224,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -10824,24 +11244,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer x
+        hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -10865,26 +11285,26 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 i (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration i (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::C::@field::i
-            #F3 j (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F3 isOriginDeclaration j (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::j
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@getter::i
-            #F6 synthetic j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F6 synthetic isOriginVariable j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::j
           setters
-            #F7 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F7 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::C::@setter::i
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::i::@formalParameter::value
-            #F9 synthetic j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@setter::j
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
@@ -10894,35 +11314,35 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        i
+        isOriginDeclaration i
           reference: <testLibrary>::@class::C::@field::i
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::i
           setter: <testLibrary>::@class::C::@setter::i
-        j
+        isOriginDeclaration j
           reference: <testLibrary>::@class::C::@field::j
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::C::@getter::j
           setter: <testLibrary>::@class::C::@setter::j
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::C::@getter::i
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::i
-        synthetic j
+        synthetic isOriginVariable j
           reference: <testLibrary>::@class::C::@getter::j
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::C::@field::j
       setters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::C::@setter::i
           firstFragment: #F7
           formalParameters
@@ -10931,7 +11351,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::i
-        synthetic j
+        synthetic isOriginVariable j
           reference: <testLibrary>::@class::C::@setter::j
           firstFragment: #F9
           formalParameters
@@ -10959,17 +11379,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 foo (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F2 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
@@ -10979,24 +11399,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        late foo
+        late isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -11024,17 +11444,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
+            #F2 isOriginDeclaration foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
@@ -11044,24 +11464,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        late final foo
+        late final isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -11089,31 +11509,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@getter::foo
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        late final hasInitializer foo
+        late final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -11141,7 +11561,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -11150,17 +11570,17 @@
         #F4 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           fields
-            #F5 hasInitializer f (nameOffset:62) (firstTokenOffset:62) (offset:62)
+            #F5 hasInitializer isOriginDeclaration f (nameOffset:62) (firstTokenOffset:62) (offset:62)
               element: <testLibrary>::@class::B::@field::f
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F7 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F7 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::B::@getter::f
           setters
-            #F8 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F8 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::B::@setter::f
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
@@ -11170,7 +11590,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -11183,25 +11603,25 @@
       firstFragment: #F4
       supertype: A
       fields
-        late hasInitializer f
+        late hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::B::@field::f
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@class::B::@getter::f
           setter: <testLibrary>::@class::B::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::B::@getter::f
           firstFragment: #F7
           returnType: int
           variable: <testLibrary>::@class::B::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::B::@setter::f
           firstFragment: #F8
           formalParameters
@@ -11233,29 +11653,29 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           fields
-            #F6 hasInitializer f (nameOffset:64) (firstTokenOffset:64) (offset:64)
+            #F6 hasInitializer isOriginDeclaration f (nameOffset:64) (firstTokenOffset:64) (offset:64)
               element: <testLibrary>::@class::B::@field::f
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F8 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F8 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::B::@getter::f
           setters
-            #F9 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F9 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::B::@setter::f
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
@@ -11265,17 +11685,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -11285,25 +11705,25 @@
       firstFragment: #F5
       supertype: A
       fields
-        late hasInitializer f
+        late hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::B::@field::f
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::B::@getter::f
           setter: <testLibrary>::@class::B::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::B::@getter::f
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@class::B::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::B::@setter::f
           firstFragment: #F9
           formalParameters
@@ -11327,7 +11747,7 @@
         #F1 class C (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -11335,7 +11755,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -11359,24 +11779,24 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::a
-            #F3 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::b
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 a (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration a (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::a
           setters
-            #F6 b (nameOffset:34) (firstTokenOffset:30) (offset:34)
+            #F6 isOriginDeclaration b (nameOffset:34) (firstTokenOffset:30) (offset:34)
               element: <testLibrary>::@class::A::@setter::b
               formalParameters
                 #F7 requiredPositional _ (nameOffset:40) (firstTokenOffset:36) (offset:40)
                   element: <testLibrary>::@class::A::@setter::b::@formalParameter::_
-            #F8 a (nameOffset:52) (firstTokenOffset:48) (offset:52)
+            #F8 isOriginDeclaration a (nameOffset:52) (firstTokenOffset:48) (offset:52)
               element: <testLibrary>::@class::A::@setter::a
               formalParameters
                 #F9 requiredPositional _ (nameOffset:58) (firstTokenOffset:54) (offset:58)
@@ -11386,29 +11806,29 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic a
+        synthetic isOriginGetterSetter a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::a
           setter: <testLibrary>::@class::A::@setter::a
-        synthetic b
+        synthetic isOriginGetterSetter b
           reference: <testLibrary>::@class::A::@field::b
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::a
       setters
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::A::@setter::b
           firstFragment: #F6
           formalParameters
@@ -11417,7 +11837,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::b
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::A::@setter::a
           firstFragment: #F8
           formalParameters
@@ -11447,21 +11867,21 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::a
-            #F3 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::b
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 b (nameOffset:38) (firstTokenOffset:30) (offset:38)
+            #F5 isOriginDeclaration b (nameOffset:38) (firstTokenOffset:30) (offset:38)
               element: <testLibrary>::@class::A::@getter::b
-            #F6 a (nameOffset:56) (firstTokenOffset:48) (offset:56)
+            #F6 isOriginDeclaration a (nameOffset:56) (firstTokenOffset:48) (offset:56)
               element: <testLibrary>::@class::A::@getter::a
           setters
-            #F7 a (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F7 isOriginDeclaration a (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::a
               formalParameters
                 #F8 requiredPositional _ (nameOffset:22) (firstTokenOffset:18) (offset:22)
@@ -11471,34 +11891,34 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic a
+        synthetic isOriginGetterSetter a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::a
           setter: <testLibrary>::@class::A::@setter::a
-        synthetic b
+        synthetic isOriginGetterSetter b
           reference: <testLibrary>::@class::A::@field::b
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::A::@getter::b
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::b
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::a
       setters
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::A::@setter::a
           firstFragment: #F7
           formalParameters
@@ -11522,31 +11942,31 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:27) (firstTokenOffset:19) (offset:27)
+            #F4 isOriginDeclaration x (nameOffset:27) (firstTokenOffset:19) (offset:27)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -11566,31 +11986,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:27) (firstTokenOffset:10) (offset:27)
+            #F4 isOriginDeclaration x (nameOffset:27) (firstTokenOffset:10) (offset:27)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        external x
+        external isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -11610,31 +12030,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:14) (firstTokenOffset:10) (offset:14)
+            #F4 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:10) (offset:14)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: dynamic
@@ -11660,31 +12080,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -11710,31 +12130,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -11760,31 +12180,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -11808,7 +12228,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -11819,7 +12239,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -11846,31 +12266,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration x (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        external x
+        external isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -11898,10 +12318,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo
           getters
-            #F4 foo (nameOffset:23) (firstTokenOffset:15) (offset:23)
+            #F4 isOriginDeclaration foo (nameOffset:23) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::C::@getter::foo
   classes
     class C
@@ -11911,13 +12331,13 @@
         #E0 T
           firstFragment: #F2
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -11945,10 +12365,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo
           getters
-            #F4 foo (nameOffset:21) (firstTokenOffset:15) (offset:21)
+            #F4 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::C::@getter::foo
   classes
     class C
@@ -11958,14 +12378,14 @@
         #E0 T
           firstFragment: #F2
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::C::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
@@ -11986,31 +12406,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:25) (firstTokenOffset:10) (offset:25)
+            #F4 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:10) (offset:25)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic static x
+        synthetic static isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        static x
+        static isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
@@ -12032,45 +12452,45 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
-            #F3 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::y
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 x (nameOffset:18) (firstTokenOffset:10) (offset:18)
+            #F5 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:10) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
-            #F6 y (nameOffset:33) (firstTokenOffset:29) (offset:33)
+            #F6 isOriginDeclaration y (nameOffset:33) (firstTokenOffset:29) (offset:33)
               element: <testLibrary>::@class::C::@getter::y
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::C::@field::y
           firstFragment: #F3
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::C::@getter::y
           firstFragment: #F6
           returnType: dynamic
@@ -12095,17 +12515,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration x (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 x (nameOffset:39) (firstTokenOffset:30) (offset:39)
+            #F5 isOriginDeclaration x (nameOffset:39) (firstTokenOffset:30) (offset:39)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:45) (firstTokenOffset:41) (offset:45)
@@ -12115,24 +12535,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -12161,17 +12581,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 x (nameOffset:47) (firstTokenOffset:39) (offset:47)
+            #F4 isOriginDeclaration x (nameOffset:47) (firstTokenOffset:39) (offset:47)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 x (nameOffset:21) (firstTokenOffset:12) (offset:21)
+            #F5 isOriginDeclaration x (nameOffset:21) (firstTokenOffset:12) (offset:21)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:27) (firstTokenOffset:23) (offset:27)
@@ -12181,24 +12601,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -12222,7 +12642,7 @@
         #F1 class C (nameOffset:16) (firstTokenOffset:0) (offset:16)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -12230,7 +12650,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -12252,19 +12672,19 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:33) (firstTokenOffset:27) (offset:33)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:44) (firstTokenOffset:38) (offset:44)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -12275,21 +12695,21 @@
         D
         E
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -12320,10 +12740,10 @@
         #F4 extension type B (nameOffset:26) (firstTokenOffset:11) (offset:26)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:32) (firstTokenOffset:28) (offset:32)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:32) (firstTokenOffset:28) (offset:32)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@extensionType::B::@getter::it
   classes
     class A
@@ -12346,13 +12766,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: int
@@ -12376,19 +12797,19 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:28) (firstTokenOffset:22) (offset:28)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -12396,14 +12817,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
@@ -12413,7 +12834,7 @@
         A
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
 ''');
@@ -12433,19 +12854,19 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class X (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::X
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
         #F5 class Z (nameOffset:47) (firstTokenOffset:41) (offset:47)
           element: <testLibrary>::@class::Z
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@class::Z::@constructor::new
               typeName: Z
   classes
@@ -12456,21 +12877,21 @@
         X
         Z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class X
       reference: <testLibrary>::@class::X
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F4
     class Z
       reference: <testLibrary>::@class::Z
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Z::@constructor::new
           firstFragment: #F6
 ''');
@@ -12543,7 +12964,7 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12554,7 +12975,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -12584,7 +13005,7 @@
         #F1 class C (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12595,7 +13016,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -12625,7 +13046,7 @@
         #F1 class C (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12636,7 +13057,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -12665,7 +13086,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12677,7 +13098,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -12701,7 +13122,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12712,7 +13133,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -12760,7 +13181,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12772,7 +13193,7 @@
         #F5 class D (nameOffset:54) (firstTokenOffset:39) (offset:54)
           element: <testLibrary>::@class::D
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           methods
@@ -12787,7 +13208,7 @@
       firstFragment: #F1
       supertype: D
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: <testLibrary>::@class::D::@constructor::new
@@ -12804,7 +13225,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
       methods
@@ -12838,7 +13259,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12847,7 +13268,7 @@
         #F4 class D (nameOffset:52) (firstTokenOffset:37) (offset:52)
           element: <testLibrary>::@class::D
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           methods
@@ -12859,7 +13280,7 @@
       firstFragment: #F1
       supertype: D
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: <testLibrary>::@class::D::@constructor::new
@@ -12872,7 +13293,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
       methods
@@ -12901,7 +13322,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12912,7 +13333,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12939,7 +13360,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12950,7 +13371,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12978,13 +13399,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12995,7 +13416,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -13003,7 +13424,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13031,7 +13452,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13042,7 +13463,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13408,7 +13829,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13424,7 +13845,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13454,7 +13875,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13465,7 +13886,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13494,7 +13915,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13505,7 +13926,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13528,7 +13949,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13547,7 +13968,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13588,7 +14009,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13616,7 +14037,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       methods
@@ -13655,7 +14076,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13677,7 +14098,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13713,7 +14134,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13726,7 +14147,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -13756,7 +14177,7 @@
         #F1 class <null-name> (nameOffset:<null>) (firstTokenOffset:0) (offset:0)
           element: <testLibrary>::@class::0
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
               element: <testLibrary>::@class::0::@constructor::new
               typeName: null
   classes
@@ -13764,7 +14185,7 @@
       reference: <testLibrary>::@class::0
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::0::@constructor::new
           firstFragment: #F2
   exportedReferences
@@ -13784,7 +14205,7 @@
         #F1 class C (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -13792,7 +14213,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -13816,31 +14237,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
         #F7 class F (nameOffset:62) (firstTokenOffset:56) (offset:62)
           element: <testLibrary>::@class::F
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::F::@constructor::new
               typeName: F
         #F9 class G (nameOffset:73) (firstTokenOffset:67) (offset:73)
           element: <testLibrary>::@class::G
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
               element: <testLibrary>::@class::G::@constructor::new
               typeName: G
   classes
@@ -13853,7 +14274,7 @@
         F
         G
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: <testLibrary>::@class::D::@constructor::new
@@ -13861,28 +14282,28 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
     class F
       reference: <testLibrary>::@class::F
       firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::F::@constructor::new
           firstFragment: #F8
     class G
       reference: <testLibrary>::@class::G
       firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::G::@constructor::new
           firstFragment: #F10
 ''');
@@ -13909,10 +14330,10 @@
         #F2 extension type B (nameOffset:26) (firstTokenOffset:11) (offset:26)
           element: <testLibrary>::@extensionType::B
           fields
-            #F3 it (nameOffset:32) (firstTokenOffset:28) (offset:32)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:32) (firstTokenOffset:28) (offset:32)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@extensionType::B::@getter::it
       mixins
         #F5 mixin A (nameOffset:6) (firstTokenOffset:0) (offset:6)
@@ -13935,13 +14356,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F4
           returnType: int
@@ -13977,13 +14399,13 @@
         #F1 class Z (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::Z
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::Z::@constructor::new
               typeName: Z
         #F3 class A (nameOffset:50) (firstTokenOffset:44) (offset:50)
           element: <testLibrary>::@class::A
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F5 class B (nameOffset:61) (firstTokenOffset:55) (offset:61)
@@ -13992,7 +14414,7 @@
             #F6 B1 (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: #E0 B1
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F8 class C (nameOffset:76) (firstTokenOffset:70) (offset:76)
@@ -14001,7 +14423,7 @@
             #F9 C1 (nameOffset:78) (firstTokenOffset:78) (offset:78)
               element: #E1 C1
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14013,7 +14435,7 @@
         B<int>
         C<double>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Z::@constructor::new
           firstFragment: #F2
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -14021,7 +14443,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
     class B
@@ -14031,7 +14453,7 @@
         #E0 B1
           firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
     class C
@@ -14041,7 +14463,7 @@
         #E1 C1
           firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
 ''');
@@ -14064,13 +14486,13 @@
         #F1 class Z (nameOffset:67) (firstTokenOffset:61) (offset:67)
           element: <testLibrary>::@class::Z
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@class::Z::@constructor::new
               typeName: Z
         #F3 class S (nameOffset:96) (firstTokenOffset:90) (offset:96)
           element: <testLibrary>::@class::S
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
               element: <testLibrary>::@class::S::@constructor::new
               typeName: S
       mixins
@@ -14092,7 +14514,7 @@
       mixins
         M2<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Z::@constructor::new
           firstFragment: #F2
           superConstructor: <testLibrary>::@class::S::@constructor::new
@@ -14103,7 +14525,7 @@
       mixins
         M<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::S::@constructor::new
           firstFragment: #F4
   mixins
@@ -14143,7 +14565,7 @@
         #F1 class A (nameOffset:20) (firstTokenOffset:14) (offset:20)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -14160,7 +14582,7 @@
       mixins
         M<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   mixins
@@ -14194,7 +14616,7 @@
             #F2 T (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -14214,7 +14636,7 @@
         M1
         M2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   mixins
@@ -14245,19 +14667,19 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class X (nameOffset:45) (firstTokenOffset:39) (offset:45)
           element: <testLibrary>::@class::X
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
         #F5 class Z (nameOffset:56) (firstTokenOffset:50) (offset:56)
           element: <testLibrary>::@class::Z
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::Z::@constructor::new
               typeName: Z
   classes
@@ -14269,21 +14691,21 @@
         X
         Z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class X
       reference: <testLibrary>::@class::X
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F4
     class Z
       reference: <testLibrary>::@class::Z
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Z::@constructor::new
           firstFragment: #F6
 ''');
@@ -14307,7 +14729,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -14322,7 +14744,7 @@
           firstFragment: #F2
           bound: dynamic
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -14353,7 +14775,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -14368,7 +14790,7 @@
           firstFragment: #F2
           bound: dynamic
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -14398,7 +14820,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14410,7 +14832,7 @@
           firstFragment: #F2
           bound: C<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -14434,7 +14856,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:30) (firstTokenOffset:24) (offset:30)
@@ -14443,7 +14865,7 @@
             #F5 T (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -14455,7 +14877,7 @@
           firstFragment: #F2
           bound: D<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     notSimplyBounded class D
@@ -14466,7 +14888,7 @@
           firstFragment: #F5
           bound: C<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -14574,7 +14996,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:30) (firstTokenOffset:24) (offset:30)
@@ -14583,7 +15005,7 @@
             #F5 T (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -14595,7 +15017,7 @@
           firstFragment: #F2
           bound: D<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     notSimplyBounded class D
@@ -14606,7 +15028,7 @@
           firstFragment: #F5
           bound: D<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -14630,7 +15052,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:33) (firstTokenOffset:27) (offset:33)
@@ -14639,7 +15061,7 @@
             #F5 T (nameOffset:35) (firstTokenOffset:35) (offset:35)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -14651,7 +15073,7 @@
           firstFragment: #F2
           bound: D<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     class D
@@ -14661,7 +15083,7 @@
         #E1 T
           firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -14687,7 +15109,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:39) (firstTokenOffset:33) (offset:39)
@@ -14696,7 +15118,7 @@
             #F5 T (nameOffset:41) (firstTokenOffset:41) (offset:41)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -14708,7 +15130,7 @@
           firstFragment: #F2
           bound: D<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     notSimplyBounded class D
@@ -14719,7 +15141,7 @@
           firstFragment: #F5
           bound: D<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -14742,7 +15164,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14754,7 +15176,7 @@
           firstFragment: #F2
           bound: void Function(T)
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -14777,7 +15199,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14789,7 +15211,7 @@
           firstFragment: #F2
           bound: T Function()
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -14812,7 +15234,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14824,7 +15246,7 @@
           firstFragment: #F2
           bound: void Function()
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -14852,7 +15274,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -14869,7 +15291,7 @@
           firstFragment: #F2
           bound: dynamic
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -14901,7 +15323,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14913,7 +15335,7 @@
           firstFragment: #F2
           bound: C<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -14935,7 +15357,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -14943,7 +15365,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -14967,7 +15389,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:30) (firstTokenOffset:24) (offset:30)
@@ -14976,7 +15398,7 @@
             #F5 T (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -14988,7 +15410,7 @@
           firstFragment: #F2
           bound: D<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     class D
@@ -14998,7 +15420,7 @@
         #E1 T
           firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -15023,7 +15445,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -15034,7 +15456,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -15054,7 +15476,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15068,7 +15490,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15099,7 +15521,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15113,7 +15535,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15142,7 +15564,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15156,7 +15578,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15187,7 +15609,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15201,7 +15623,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15230,7 +15652,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15244,7 +15666,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15275,7 +15697,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15291,7 +15713,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15325,7 +15747,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -15339,7 +15761,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -15370,7 +15792,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -15384,7 +15806,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -15415,7 +15837,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -15426,7 +15848,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -15452,17 +15874,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F3 c (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F3 isOriginDeclaration c (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::c
       setters
-        #F5 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F5 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@setter::c
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
@@ -15472,24 +15894,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F5
       formalParameters
@@ -15516,17 +15938,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F3 c (nameOffset:14) (firstTokenOffset:14) (offset:14)
+        #F3 isOriginDeclaration c (nameOffset:14) (firstTokenOffset:14) (offset:14)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
           element: <testLibrary>::@getter::c
       setters
-        #F5 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+        #F5 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
           element: <testLibrary>::@setter::c
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -15536,24 +15958,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
       type: C?
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C?
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F5
       formalParameters
@@ -15577,7 +15999,7 @@
         #F1 class C (nameOffset:13) (firstTokenOffset:0) (offset:13)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -15585,7 +16007,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -15605,13 +16027,13 @@
         #F1 class A (nameOffset:11) (firstTokenOffset:0) (offset:11)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:29) (firstTokenOffset:16) (offset:29)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -15619,7 +16041,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     abstract sealed base class B
@@ -15627,7 +16049,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -15648,13 +16070,13 @@
         #F1 class A (nameOffset:11) (firstTokenOffset:0) (offset:11)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:29) (firstTokenOffset:16) (offset:29)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -15662,7 +16084,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     abstract sealed base class B
@@ -15671,7 +16093,7 @@
       interfaces
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
 ''');
@@ -15691,13 +16113,13 @@
         #F1 class A (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:30) (firstTokenOffset:17) (offset:30)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -15705,7 +16127,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     abstract sealed base class B
@@ -15714,7 +16136,7 @@
       interfaces
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
 ''');
@@ -15734,13 +16156,13 @@
         #F1 class A (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:30) (firstTokenOffset:17) (offset:30)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -15748,7 +16170,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     abstract sealed final class B
@@ -15756,7 +16178,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -15778,13 +16200,13 @@
         #F1 class B (nameOffset:32) (firstTokenOffset:16) (offset:32)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F3 class C (nameOffset:50) (firstTokenOffset:37) (offset:50)
           element: <testLibrary>::@class::C
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -15795,7 +16217,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
     abstract sealed final class C
@@ -15805,7 +16227,7 @@
       mixins
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::B::@constructor::new
@@ -15832,13 +16254,13 @@
         #F1 class A (nameOffset:16) (firstTokenOffset:0) (offset:16)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:34) (firstTokenOffset:21) (offset:34)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -15846,7 +16268,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     abstract sealed interface class B
@@ -15854,7 +16276,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -15875,13 +16297,13 @@
         #F1 class A (nameOffset:16) (firstTokenOffset:0) (offset:16)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:34) (firstTokenOffset:21) (offset:34)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -15889,7 +16311,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     abstract sealed class B
@@ -15898,7 +16320,7 @@
       interfaces
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
 ''');
@@ -15918,14 +16340,14 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:28) (firstTokenOffset:19) (offset:28)
+            #F4 isOriginDeclaration x (nameOffset:28) (firstTokenOffset:19) (offset:28)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:34) (firstTokenOffset:30) (offset:34)
@@ -15935,17 +16357,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -15971,14 +16393,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:19) (firstTokenOffset:10) (offset:19)
+            #F4 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional covariant value (nameOffset:35) (firstTokenOffset:21) (offset:35)
@@ -15988,17 +16410,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16024,14 +16446,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:28) (firstTokenOffset:10) (offset:28)
+            #F4 isOriginDeclaration x (nameOffset:28) (firstTokenOffset:10) (offset:28)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:34) (firstTokenOffset:30) (offset:34)
@@ -16041,17 +16463,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        external x
+        external isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16075,14 +16497,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:19) (firstTokenOffset:10) (offset:19)
+            #F4 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:21) (firstTokenOffset:21) (offset:21)
@@ -16092,17 +16514,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16126,14 +16548,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:14) (firstTokenOffset:10) (offset:14)
+            #F4 isOriginDeclaration x (nameOffset:14) (firstTokenOffset:10) (offset:14)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:20) (firstTokenOffset:16) (offset:20)
@@ -16143,17 +16565,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16189,17 +16611,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 t (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration t (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::t
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::t
           setters
-            #F5 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::t
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -16207,17 +16629,17 @@
         #F7 class B (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::B
           fields
-            #F8 t (nameOffset:50) (firstTokenOffset:50) (offset:50)
+            #F8 isOriginDeclaration t (nameOffset:50) (firstTokenOffset:50) (offset:50)
               element: <testLibrary>::@class::B::@field::t
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F10 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@getter::t
           setters
-            #F11 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F11 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@setter::t
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
@@ -16225,20 +16647,20 @@
         #F13 class C (nameOffset:61) (firstTokenOffset:55) (offset:61)
           element: <testLibrary>::@class::C
           constructors
-            #F14 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F14 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F15 class D (nameOffset:96) (firstTokenOffset:90) (offset:96)
           element: <testLibrary>::@class::D
           fields
-            #F16 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+            #F16 synthetic isOriginGetterSetter t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
               element: <testLibrary>::@class::D::@field::t
           constructors
-            #F17 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+            #F17 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           setters
-            #F18 t (nameOffset:121) (firstTokenOffset:112) (offset:121)
+            #F18 isOriginDeclaration t (nameOffset:121) (firstTokenOffset:112) (offset:121)
               element: <testLibrary>::@class::D::@setter::t
               formalParameters
                 #F19 requiredPositional p (nameOffset:123) (firstTokenOffset:123) (offset:123)
@@ -16248,24 +16670,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        t
+        isOriginDeclaration t
           reference: <testLibrary>::@class::A::@field::t
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::t
           setter: <testLibrary>::@class::A::@setter::t
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::A::@getter::t
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::t
       setters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::A::@setter::t
           firstFragment: #F5
           formalParameters
@@ -16279,25 +16701,25 @@
       firstFragment: #F7
       supertype: A
       fields
-        t
+        isOriginDeclaration t
           reference: <testLibrary>::@class::B::@field::t
           firstFragment: #F8
           type: double
           getter: <testLibrary>::@class::B::@getter::t
           setter: <testLibrary>::@class::B::@setter::t
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
           superConstructor: <testLibrary>::@class::A::@constructor::new
       getters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::B::@getter::t
           firstFragment: #F10
           returnType: double
           variable: <testLibrary>::@class::B::@field::t
       setters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::B::@setter::t
           firstFragment: #F11
           formalParameters
@@ -16313,7 +16735,7 @@
       interfaces
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F14
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -16322,18 +16744,18 @@
       firstFragment: #F15
       supertype: C
       fields
-        synthetic t
+        synthetic isOriginGetterSetter t
           reference: <testLibrary>::@class::D::@field::t
           firstFragment: #F16
           type: dynamic
           setter: <testLibrary>::@class::D::@setter::t
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F17
           superConstructor: <testLibrary>::@class::C::@constructor::new
       setters
-        t
+        isOriginDeclaration t
           reference: <testLibrary>::@class::D::@setter::t
           firstFragment: #F18
           formalParameters
@@ -16360,14 +16782,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 f (nameOffset:29) (firstTokenOffset:20) (offset:29)
+            #F4 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:20) (offset:29)
               element: <testLibrary>::@class::C::@setter::f
               formalParameters
                 #F5 requiredPositional value (nameOffset:31) (firstTokenOffset:31) (offset:31)
@@ -16375,14 +16797,14 @@
         #F6 class D (nameOffset:58) (firstTokenOffset:43) (offset:58)
           element: <testLibrary>::@class::D
           fields
-            #F7 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F7 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::D::@field::f
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           setters
-            #F9 f (nameOffset:71) (firstTokenOffset:62) (offset:71)
+            #F9 isOriginDeclaration f (nameOffset:71) (firstTokenOffset:62) (offset:71)
               element: <testLibrary>::@class::D::@setter::f
               formalParameters
                 #F10 requiredPositional value (nameOffset:77) (firstTokenOffset:73) (offset:77)
@@ -16393,18 +16815,18 @@
       firstFragment: #F1
       supertype: D
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::D::@constructor::new
       setters
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::C::@setter::f
           firstFragment: #F4
           formalParameters
@@ -16417,17 +16839,17 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F6
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::D::@field::f
           firstFragment: #F7
           type: int
           setter: <testLibrary>::@class::D::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F8
       setters
-        abstract f
+        abstract isOriginDeclaration f
           reference: <testLibrary>::@class::D::@setter::f
           firstFragment: #F9
           formalParameters
@@ -16455,14 +16877,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 f (nameOffset:23) (firstTokenOffset:12) (offset:23)
+            #F4 isOriginDeclaration f (nameOffset:23) (firstTokenOffset:12) (offset:23)
               element: <testLibrary>::@class::C::@setter::f
               formalParameters
                 #F5 requiredPositional value (nameOffset:29) (firstTokenOffset:25) (offset:29)
@@ -16472,17 +16894,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic static f
+        synthetic static isOriginGetterSetter f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        static f
+        static isOriginDeclaration f
           reference: <testLibrary>::@class::C::@setter::f
           firstFragment: #F4
           formalParameters
@@ -16506,14 +16928,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:19) (firstTokenOffset:10) (offset:19)
+            #F4 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional a (nameOffset:22) (firstTokenOffset:22) (offset:22)
@@ -16523,17 +16945,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16557,14 +16979,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:19) (firstTokenOffset:10) (offset:19)
+            #F4 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional <null-name> (nameOffset:<null>) (firstTokenOffset:21) (offset:21)
@@ -16574,17 +16996,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16608,14 +17030,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:19) (firstTokenOffset:10) (offset:19)
+            #F4 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional a (nameOffset:22) (firstTokenOffset:22) (offset:22)
@@ -16625,17 +17047,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16659,14 +17081,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:19) (firstTokenOffset:10) (offset:19)
+            #F4 isOriginDeclaration x (nameOffset:19) (firstTokenOffset:10) (offset:19)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional a (nameOffset:21) (firstTokenOffset:21) (offset:21)
@@ -16676,17 +17098,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16716,14 +17138,14 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F4 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F5 requiredPositional _ (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -16733,17 +17155,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -16773,14 +17195,14 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F4 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F5 requiredPositional _ (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -16790,17 +17212,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -16828,7 +17250,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -16842,7 +17264,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -16873,14 +17295,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:21) (firstTokenOffset:12) (offset:21)
+            #F4 isOriginDeclaration x (nameOffset:21) (firstTokenOffset:12) (offset:21)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:27) (firstTokenOffset:23) (offset:27)
@@ -16890,17 +17312,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        external x
+        external isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -16932,10 +17354,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo
           setters
-            #F4 foo (nameOffset:19) (firstTokenOffset:15) (offset:19)
+            #F4 isOriginDeclaration foo (nameOffset:19) (firstTokenOffset:15) (offset:19)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F5 requiredPositional _ (nameOffset:27) (firstTokenOffset:23) (offset:27)
@@ -16948,13 +17370,13 @@
         #E0 T
           firstFragment: #F2
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::C::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -16986,10 +17408,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo
           setters
-            #F4 foo (nameOffset:19) (firstTokenOffset:15) (offset:19)
+            #F4 isOriginDeclaration foo (nameOffset:19) (firstTokenOffset:15) (offset:19)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F5 requiredPositional _ (nameOffset:25) (firstTokenOffset:23) (offset:25)
@@ -17002,14 +17424,14 @@
         #E0 T
           firstFragment: #F2
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           setter: <testLibrary>::@class::C::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
@@ -17036,14 +17458,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:26) (firstTokenOffset:10) (offset:26)
+            #F4 isOriginDeclaration x (nameOffset:26) (firstTokenOffset:10) (offset:26)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:32) (firstTokenOffset:28) (offset:32)
@@ -17053,17 +17475,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic static x
+        synthetic static isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        static x
+        static isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -17092,21 +17514,21 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
-            #F3 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::y
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F5 x (nameOffset:21) (firstTokenOffset:12) (offset:21)
+            #F5 isOriginDeclaration x (nameOffset:21) (firstTokenOffset:12) (offset:21)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:27) (firstTokenOffset:23) (offset:27)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
-            #F7 y (nameOffset:43) (firstTokenOffset:39) (offset:43)
+            #F7 isOriginDeclaration y (nameOffset:43) (firstTokenOffset:39) (offset:43)
               element: <testLibrary>::@class::C::@setter::y
               formalParameters
                 #F8 requiredPositional value (nameOffset:45) (firstTokenOffset:45) (offset:45)
@@ -17116,22 +17538,22 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::C::@field::y
           firstFragment: #F3
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -17140,7 +17562,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::C::@setter::y
           firstFragment: #F7
           formalParameters
@@ -17194,7 +17616,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -17202,7 +17624,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
 ''');
@@ -17227,10 +17649,10 @@
         #F2 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   classes
     class B
@@ -17244,13 +17666,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
@@ -17273,7 +17696,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:40) (firstTokenOffset:34) (offset:40)
@@ -17284,7 +17707,7 @@
             #F5 T2 (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: #E1 T2
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -17293,7 +17716,7 @@
       firstFragment: #F1
       supertype: D<int, double>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: ConstructorMember
@@ -17308,7 +17731,7 @@
         #E1 T2
           firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -17366,13 +17789,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:20) (firstTokenOffset:14) (offset:20)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -17383,7 +17806,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -17391,7 +17814,7 @@
       firstFragment: #F4
       supertype: A<B>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -17417,7 +17840,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -17428,7 +17851,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -17446,7 +17869,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -17454,7 +17877,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -17477,7 +17900,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -17490,7 +17913,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
 ''');
@@ -17516,13 +17939,13 @@
             #F3 U (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F5 class D (nameOffset:48) (firstTokenOffset:42) (offset:48)
           element: <testLibrary>::@class::D
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -17537,14 +17960,14 @@
           firstFragment: #F3
           bound: D
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -17565,7 +17988,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -17577,7 +18000,7 @@
           firstFragment: #F2
           bound: dynamic
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -17604,7 +18027,7 @@
             #F4 V (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: #E2 V
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -17621,7 +18044,7 @@
           firstFragment: #F4
           bound: dynamic
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -17644,7 +18067,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -17656,7 +18079,7 @@
           firstFragment: #F2
           bound: void Function(A<dynamic>)
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -17679,7 +18102,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -17691,7 +18114,7 @@
           firstFragment: #F2
           bound: void Function<U extends C<dynamic>>()
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -17716,7 +18139,7 @@
             #F2 X (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -17737,7 +18160,7 @@
               typeArguments
                 X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -17770,7 +18193,7 @@
             #F2 X (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -17791,7 +18214,7 @@
               typeArguments
                 X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -17824,7 +18247,7 @@
             #F2 X (nameOffset:39) (firstTokenOffset:39) (offset:39)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -17845,7 +18268,7 @@
               typeArguments
                 X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -17878,7 +18301,7 @@
             #F2 X (nameOffset:39) (firstTokenOffset:39) (offset:39)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -17899,7 +18322,7 @@
               typeArguments
                 X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -17930,7 +18353,7 @@
             #F2 X (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -17942,7 +18365,7 @@
           firstFragment: #F2
           bound: X Function(X)
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -17965,7 +18388,7 @@
             #F2 X (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -17977,7 +18400,7 @@
           firstFragment: #F2
           bound: void Function(X)
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -18000,7 +18423,7 @@
             #F2 X (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -18012,7 +18435,7 @@
           firstFragment: #F2
           bound: X Function()
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -18035,7 +18458,7 @@
             #F2 X (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -18047,7 +18470,7 @@
           firstFragment: #F2
           bound: X Function()
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -18072,7 +18495,7 @@
             #F2 X (nameOffset:48) (firstTokenOffset:48) (offset:48)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       typeAliases
@@ -18093,7 +18516,7 @@
               typeArguments
                 X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -18126,7 +18549,7 @@
             #F2 X (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       typeAliases
@@ -18147,7 +18570,7 @@
               typeArguments
                 X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -18178,7 +18601,7 @@
             #F3 U (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -18192,7 +18615,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
 ''');
@@ -18215,7 +18638,7 @@
             #F3 U (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -18229,7 +18652,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
 ''');
@@ -18254,7 +18677,7 @@
             #F3 <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
               element: #E1 <null-name>
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -18267,7 +18690,7 @@
         #E1 <null-name>
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
 ''');
@@ -18288,7 +18711,7 @@
             #F2 T (nameOffset:11) (firstTokenOffset:8) (offset:11)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -18299,7 +18722,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -18320,7 +18743,7 @@
             #F2 T (nameOffset:12) (firstTokenOffset:8) (offset:12)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -18331,7 +18754,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -18352,7 +18775,7 @@
             #F2 T (nameOffset:14) (firstTokenOffset:8) (offset:14)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -18363,7 +18786,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
 ''');
@@ -18388,7 +18811,7 @@
             #F4 V (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: #E2 V
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -18403,7 +18826,7 @@
         #E2 V
           firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -18427,31 +18850,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:43) (firstTokenOffset:37) (offset:43)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
         #F7 class F (nameOffset:54) (firstTokenOffset:48) (offset:54)
           element: <testLibrary>::@class::F
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::F::@constructor::new
               typeName: F
         #F9 class G (nameOffset:65) (firstTokenOffset:59) (offset:65)
           element: <testLibrary>::@class::G
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@class::G::@constructor::new
               typeName: G
   classes
@@ -18464,7 +18887,7 @@
         F
         G
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -18479,28 +18902,28 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
     class F
       reference: <testLibrary>::@class::F
       firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::F::@constructor::new
           firstFragment: #F8
     class G
       reference: <testLibrary>::@class::G
       firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::G::@constructor::new
           firstFragment: #F10
 ''');
@@ -18522,19 +18945,19 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:35) (firstTokenOffset:29) (offset:35)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:46) (firstTokenOffset:40) (offset:46)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -18545,7 +18968,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -18560,14 +18983,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -18588,7 +19011,7 @@
         #F1 class C (nameOffset:11) (firstTokenOffset:0) (offset:11)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -18602,7 +19025,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -18652,7 +19075,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -18660,13 +19083,13 @@
         #F3 class C (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::C
           constructors
-            #F4 synthetic named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F4 synthetic isOriginMixinApplication named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
         #F5 class B (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F6 synthetic isOriginMixinApplication named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@constructor::named
               typeName: B
       mixins
@@ -18677,7 +19100,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F2
     class alias C
@@ -18687,7 +19110,7 @@
       mixins
         M
       constructors
-        synthetic named
+        synthetic isOriginMixinApplication named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F4
           constantInitializers
@@ -18710,7 +19133,7 @@
       mixins
         M
       constructors
-        synthetic named
+        synthetic isOriginMixinApplication named
           reference: <testLibrary>::@class::B::@constructor::named
           firstFragment: #F6
           constantInitializers
@@ -18754,7 +19177,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -18762,13 +19185,13 @@
         #F3 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F4 synthetic isOriginMixinApplication named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::B::@constructor::named
               typeName: B
         #F5 class C (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F6 synthetic isOriginMixinApplication named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
       mixins
@@ -18779,7 +19202,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F2
     class alias B
@@ -18789,7 +19212,7 @@
       mixins
         M
       constructors
-        synthetic named
+        synthetic isOriginMixinApplication named
           reference: <testLibrary>::@class::B::@constructor::named
           firstFragment: #F4
           constantInitializers
@@ -18812,7 +19235,7 @@
       mixins
         M
       constructors
-        synthetic named
+        synthetic isOriginMixinApplication named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F6
           constantInitializers
@@ -18853,19 +19276,19 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class M (nameOffset:23) (firstTokenOffset:11) (offset:23)
           element: <testLibrary>::@class::M
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::M::@constructor::new
               typeName: M
         #F5 class X (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::X
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
   classes
@@ -18873,14 +19296,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     mixin class M
       reference: <testLibrary>::@class::M
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F4
     class alias X
@@ -18890,7 +19313,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F6
           constantInitializers
@@ -18925,7 +19348,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -18935,19 +19358,19 @@
         #F4 class M1 (nameOffset:36) (firstTokenOffset:24) (offset:36)
           element: <testLibrary>::@class::M1
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::M1::@constructor::new
               typeName: M1
         #F6 class M2 (nameOffset:54) (firstTokenOffset:42) (offset:54)
           element: <testLibrary>::@class::M2
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::M2::@constructor::new
               typeName: M2
         #F8 class C2 (nameOffset:67) (firstTokenOffset:61) (offset:67)
           element: <testLibrary>::@class::C2
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F9 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@class::C2::@constructor::new
               typeName: C2
               formalParameters
@@ -18956,7 +19379,7 @@
         #F11 class C1 (nameOffset:90) (firstTokenOffset:84) (offset:90)
           element: <testLibrary>::@class::C1
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+            #F12 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
               element: <testLibrary>::@class::C1::@constructor::new
               typeName: C1
               formalParameters
@@ -18967,7 +19390,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -18978,14 +19401,14 @@
       reference: <testLibrary>::@class::M1
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M1::@constructor::new
           firstFragment: #F5
     mixin class M2
       reference: <testLibrary>::@class::M2
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M2::@constructor::new
           firstFragment: #F7
     class alias C2
@@ -18995,7 +19418,7 @@
       mixins
         M2
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C2::@constructor::new
           firstFragment: #F9
           formalParameters
@@ -19022,7 +19445,7 @@
       mixins
         M1
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C1::@constructor::new
           firstFragment: #F12
           formalParameters
@@ -19068,7 +19491,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 c1 (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration c1 (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::c1
               typeName: A
               typeNameOffset: 12
@@ -19076,7 +19499,7 @@
               formalParameters
                 #F3 requiredPositional a (nameOffset:21) (firstTokenOffset:17) (offset:21)
                   element: <testLibrary>::@class::A::@constructor::c1::@formalParameter::a
-            #F4 c2 (nameOffset:29) (firstTokenOffset:27) (offset:29)
+            #F4 isOriginDeclaration c2 (nameOffset:29) (firstTokenOffset:27) (offset:29)
               element: <testLibrary>::@class::A::@constructor::c2
               typeName: A
               typeNameOffset: 27
@@ -19092,7 +19515,7 @@
                     IntegerLiteral
                       literal: 0 @56
                       staticType: int
-            #F8 c3 (nameOffset:65) (firstTokenOffset:63) (offset:65)
+            #F8 isOriginDeclaration c3 (nameOffset:65) (firstTokenOffset:63) (offset:65)
               element: <testLibrary>::@class::A::@constructor::c3
               typeName: A
               typeNameOffset: 63
@@ -19111,13 +19534,13 @@
         #F12 class C (nameOffset:118) (firstTokenOffset:112) (offset:118)
           element: <testLibrary>::@class::C
           constructors
-            #F13 synthetic c1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
+            #F13 synthetic isOriginMixinApplication c1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
               element: <testLibrary>::@class::C::@constructor::c1
               typeName: C
               formalParameters
                 #F14 requiredPositional a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
                   element: <testLibrary>::@class::C::@constructor::c1::@formalParameter::a
-            #F15 synthetic c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
+            #F15 synthetic isOriginMixinApplication c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
               element: <testLibrary>::@class::C::@constructor::c2
               typeName: C
               formalParameters
@@ -19128,7 +19551,7 @@
                 #F18 optionalPositional c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
                   element: <testLibrary>::@class::C::@constructor::c2::@formalParameter::c
                   initializer: expression_0
-            #F19 synthetic c3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
+            #F19 synthetic isOriginMixinApplication c3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
               element: <testLibrary>::@class::C::@constructor::c3
               typeName: C
               formalParameters
@@ -19147,14 +19570,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        c1
+        isOriginDeclaration c1
           reference: <testLibrary>::@class::A::@constructor::c1
           firstFragment: #F2
           formalParameters
             #E0 requiredPositional a
               firstFragment: #F3
               type: int
-        c2
+        isOriginDeclaration c2
           reference: <testLibrary>::@class::A::@constructor::c2
           firstFragment: #F4
           formalParameters
@@ -19170,7 +19593,7 @@
               constantInitializer
                 fragment: #F7
                 expression: expression_0
-        c3
+        isOriginDeclaration c3
           reference: <testLibrary>::@class::A::@constructor::c3
           firstFragment: #F8
           formalParameters
@@ -19193,7 +19616,7 @@
       mixins
         M
       constructors
-        synthetic c1
+        synthetic isOriginMixinApplication c1
           reference: <testLibrary>::@class::C::@constructor::c1
           firstFragment: #F13
           formalParameters
@@ -19218,7 +19641,7 @@
                 rightParenthesis: ) @0
               element: <testLibrary>::@class::A::@constructor::c1
           superConstructor: <testLibrary>::@class::A::@constructor::c1
-        synthetic c2
+        synthetic isOriginMixinApplication c2
           reference: <testLibrary>::@class::C::@constructor::c2
           firstFragment: #F15
           formalParameters
@@ -19260,7 +19683,7 @@
                 rightParenthesis: ) @0
               element: <testLibrary>::@class::A::@constructor::c2
           superConstructor: <testLibrary>::@class::A::@constructor::c2
-        synthetic c3
+        synthetic isOriginMixinApplication c3
           reference: <testLibrary>::@class::C::@constructor::c3
           firstFragment: #F19
           formalParameters
@@ -19335,7 +19758,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             InstanceCreationExpression
@@ -19355,10 +19778,10 @@
                 rightParenthesis: ) @35
               staticType: B
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: B
@@ -19367,7 +19790,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: B
@@ -19398,7 +19821,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 27
@@ -19413,7 +19836,7 @@
             #F7 E (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: #E1 E
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F8 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               formalParameters
@@ -19433,7 +19856,7 @@
           firstFragment: #F2
           bound: num
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -19454,7 +19877,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           formalParameters
@@ -19512,19 +19935,19 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:0) (offset:22)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:43) (firstTokenOffset:37) (offset:43)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:54) (firstTokenOffset:48) (offset:54)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -19536,7 +19959,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19551,14 +19974,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -19584,19 +20007,19 @@
         #F1 class C (nameOffset:27) (firstTokenOffset:0) (offset:27)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:48) (firstTokenOffset:42) (offset:48)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:59) (firstTokenOffset:53) (offset:59)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -19608,7 +20031,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19623,14 +20046,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -19656,19 +20079,19 @@
         #F1 class C (nameOffset:66) (firstTokenOffset:44) (offset:66)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:87) (firstTokenOffset:81) (offset:87)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:87)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:87)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:98) (firstTokenOffset:92) (offset:98)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:98)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:98)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -19680,7 +20103,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19695,14 +20118,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -19723,7 +20146,7 @@
         #F1 class C (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -19737,7 +20160,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19773,13 +20196,13 @@
         #F1 class Z (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::Z
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::Z::@constructor::new
               typeName: Z
         #F3 class A (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::A
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F5 class B (nameOffset:53) (firstTokenOffset:47) (offset:53)
@@ -19788,7 +20211,7 @@
             #F6 B1 (nameOffset:55) (firstTokenOffset:55) (offset:55)
               element: #E0 B1
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F8 class C (nameOffset:68) (firstTokenOffset:62) (offset:68)
@@ -19797,7 +20220,7 @@
             #F9 C1 (nameOffset:70) (firstTokenOffset:70) (offset:70)
               element: #E1 C1
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -19809,7 +20232,7 @@
         B<int>
         C<double>
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::Z::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19824,7 +20247,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
     class B
@@ -19834,7 +20257,7 @@
         #E0 B1
           firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
     class C
@@ -19844,7 +20267,7 @@
         #E1 C1
           firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
 ''');
@@ -19865,7 +20288,7 @@
         #F1 class C (nameOffset:16) (firstTokenOffset:0) (offset:16)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -19879,7 +20302,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19920,7 +20343,7 @@
         #F1 class A (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -19931,7 +20354,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -19960,7 +20383,7 @@
         #F1 class A (nameOffset:30) (firstTokenOffset:24) (offset:30)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -19976,7 +20399,7 @@
       mixins
         M2
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -20015,7 +20438,7 @@
         #F1 class C (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -20029,7 +20452,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -20067,19 +20490,19 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::D
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F6 class E (nameOffset:50) (firstTokenOffset:44) (offset:50)
           element: <testLibrary>::@class::E
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -20094,7 +20517,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -20109,14 +20532,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F7
 ''');
@@ -20143,19 +20566,19 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:29) (firstTokenOffset:23) (offset:29)
           element: <testLibrary>::@class::D
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F6 class E (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::E
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -20169,7 +20592,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -20184,14 +20607,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F7
 ''');
@@ -20215,19 +20638,19 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:26) (firstTokenOffset:20) (offset:26)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
   classes
@@ -20238,7 +20661,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -20253,14 +20676,14 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
 ''');
@@ -20281,7 +20704,7 @@
         #F1 class C (nameOffset:13) (firstTokenOffset:0) (offset:13)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F2 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -20295,7 +20718,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -20339,16 +20762,16 @@
         #F1 class M (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::M
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::M::@constructor::new
               typeName: M
         #F3 class MixinApp (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::MixinApp
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::new
               typeName: MixinApp
-            #F5 synthetic const named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic const isOriginMixinApplication named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::named
               typeName: MixinApp
   classes
@@ -20356,7 +20779,7 @@
       reference: <testLibrary>::@class::M
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F2
     class alias MixinApp
@@ -20366,7 +20789,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::MixinApp::@constructor::new
           firstFragment: #F4
           constantInitializers
@@ -20377,7 +20800,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::new
           superConstructor: package:test/a.dart::@class::Base::@constructor::new
-        synthetic const named
+        synthetic const isOriginMixinApplication named
           reference: <testLibrary>::@class::MixinApp::@constructor::named
           firstFragment: #F5
           constantInitializers
@@ -20429,25 +20852,25 @@
         #F1 class M (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::M
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::M::@constructor::new
               typeName: M
         #F3 class MixinApp (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::MixinApp
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::new
               typeName: MixinApp
-            #F5 synthetic noArgs (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginMixinApplication noArgs (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::noArgs
               typeName: MixinApp
-            #F6 synthetic requiredArg (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginMixinApplication requiredArg (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::requiredArg
               typeName: MixinApp
               formalParameters
                 #F7 requiredPositional x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
                   element: <testLibrary>::@class::MixinApp::@constructor::requiredArg::@formalParameter::x
-            #F8 synthetic positionalArg (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F8 synthetic isOriginMixinApplication positionalArg (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::positionalArg
               typeName: MixinApp
               formalParameters
@@ -20457,7 +20880,7 @@
                     BooleanLiteral
                       literal: true @127
                       staticType: bool
-            #F10 synthetic positionalArg2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F10 synthetic isOriginMixinApplication positionalArg2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::positionalArg2
               typeName: MixinApp
               formalParameters
@@ -20467,7 +20890,7 @@
                     BooleanLiteral
                       literal: true @167
                       staticType: bool
-            #F12 synthetic namedArg (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F12 synthetic isOriginMixinApplication namedArg (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::namedArg
               typeName: MixinApp
               formalParameters
@@ -20477,7 +20900,7 @@
                     IntegerLiteral
                       literal: 42 @200
                       staticType: int
-            #F14 synthetic namedArg2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F14 synthetic isOriginMixinApplication namedArg2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::MixinApp::@constructor::namedArg2
               typeName: MixinApp
               formalParameters
@@ -20492,7 +20915,7 @@
       reference: <testLibrary>::@class::M
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F2
     hasNonFinalField class alias MixinApp
@@ -20502,7 +20925,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::MixinApp::@constructor::new
           firstFragment: #F4
           constantInitializers
@@ -20513,7 +20936,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::new
           superConstructor: package:test/a.dart::@class::Base::@constructor::new
-        synthetic noArgs
+        synthetic isOriginMixinApplication noArgs
           reference: <testLibrary>::@class::MixinApp::@constructor::noArgs
           firstFragment: #F5
           constantInitializers
@@ -20529,7 +20952,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::noArgs
           superConstructor: package:test/a.dart::@class::Base::@constructor::noArgs
-        synthetic requiredArg
+        synthetic isOriginMixinApplication requiredArg
           reference: <testLibrary>::@class::MixinApp::@constructor::requiredArg
           firstFragment: #F6
           formalParameters
@@ -20554,7 +20977,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::requiredArg
           superConstructor: package:test/a.dart::@class::Base::@constructor::requiredArg
-        synthetic positionalArg
+        synthetic isOriginMixinApplication positionalArg
           reference: <testLibrary>::@class::MixinApp::@constructor::positionalArg
           firstFragment: #F8
           formalParameters
@@ -20582,7 +21005,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::positionalArg
           superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg
-        synthetic positionalArg2
+        synthetic isOriginMixinApplication positionalArg2
           reference: <testLibrary>::@class::MixinApp::@constructor::positionalArg2
           firstFragment: #F10
           formalParameters
@@ -20610,7 +21033,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::positionalArg2
           superConstructor: package:test/a.dart::@class::Base::@constructor::positionalArg2
-        synthetic namedArg
+        synthetic isOriginMixinApplication namedArg
           reference: <testLibrary>::@class::MixinApp::@constructor::namedArg
           firstFragment: #F12
           formalParameters
@@ -20638,7 +21061,7 @@
                 rightParenthesis: ) @0
               element: package:test/a.dart::@class::Base::@constructor::namedArg
           superConstructor: package:test/a.dart::@class::Base::@constructor::namedArg
-        synthetic namedArg2
+        synthetic isOriginMixinApplication namedArg2
           reference: <testLibrary>::@class::MixinApp::@constructor::namedArg2
           firstFragment: #F14
           formalParameters
@@ -20690,7 +21113,7 @@
             #F2 T (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E0 T
           constructors
-            #F3 ctor (nameOffset:23) (firstTokenOffset:18) (offset:23)
+            #F3 isOriginDeclaration ctor (nameOffset:23) (firstTokenOffset:18) (offset:23)
               element: <testLibrary>::@class::Base::@constructor::ctor
               typeName: Base
               typeNameOffset: 18
@@ -20703,13 +21126,13 @@
         #F6 class M (nameOffset:53) (firstTokenOffset:47) (offset:53)
           element: <testLibrary>::@class::M
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::M::@constructor::new
               typeName: M
         #F8 class MixinApp (nameOffset:64) (firstTokenOffset:58) (offset:64)
           element: <testLibrary>::@class::MixinApp
           constructors
-            #F9 synthetic ctor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F9 synthetic isOriginMixinApplication ctor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::MixinApp::@constructor::ctor
               typeName: MixinApp
               formalParameters
@@ -20725,7 +21148,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        ctor
+        isOriginDeclaration ctor
           reference: <testLibrary>::@class::Base::@constructor::ctor
           firstFragment: #F3
           formalParameters
@@ -20739,7 +21162,7 @@
       reference: <testLibrary>::@class::M
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F7
     class alias MixinApp
@@ -20749,7 +21172,7 @@
       mixins
         M
       constructors
-        synthetic ctor
+        synthetic isOriginMixinApplication ctor
           reference: <testLibrary>::@class::MixinApp::@constructor::ctor
           firstFragment: #F9
           formalParameters
@@ -20807,7 +21230,7 @@
             #F2 T (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E0 T
           constructors
-            #F3 ctor (nameOffset:23) (firstTokenOffset:18) (offset:23)
+            #F3 isOriginDeclaration ctor (nameOffset:23) (firstTokenOffset:18) (offset:23)
               element: <testLibrary>::@class::Base::@constructor::ctor
               typeName: Base
               typeNameOffset: 18
@@ -20820,7 +21243,7 @@
         #F6 class M (nameOffset:53) (firstTokenOffset:47) (offset:53)
           element: <testLibrary>::@class::M
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::M::@constructor::new
               typeName: M
         #F8 class MixinApp (nameOffset:64) (firstTokenOffset:58) (offset:64)
@@ -20829,7 +21252,7 @@
             #F9 U (nameOffset:73) (firstTokenOffset:73) (offset:73)
               element: #E1 U
           constructors
-            #F10 synthetic ctor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F10 synthetic isOriginMixinApplication ctor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::MixinApp::@constructor::ctor
               typeName: MixinApp
               formalParameters
@@ -20845,7 +21268,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        ctor
+        isOriginDeclaration ctor
           reference: <testLibrary>::@class::Base::@constructor::ctor
           firstFragment: #F3
           formalParameters
@@ -20859,7 +21282,7 @@
       reference: <testLibrary>::@class::M
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F7
     class alias MixinApp
@@ -20872,7 +21295,7 @@
       mixins
         M
       constructors
-        synthetic ctor
+        synthetic isOriginMixinApplication ctor
           reference: <testLibrary>::@class::MixinApp::@constructor::ctor
           firstFragment: #F10
           formalParameters
@@ -20929,40 +21352,40 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:26) (firstTokenOffset:20) (offset:26)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::E
           fields
-            #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::E::@field::a
-            #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F7 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::E::@field::b
-            #F8 x (nameOffset:105) (firstTokenOffset:105) (offset:105)
+            #F8 isOriginDeclaration x (nameOffset:105) (firstTokenOffset:105) (offset:105)
               element: <testLibrary>::@class::E::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
           getters
-            #F10 a (nameOffset:51) (firstTokenOffset:43) (offset:51)
+            #F10 isOriginDeclaration a (nameOffset:51) (firstTokenOffset:43) (offset:51)
               element: <testLibrary>::@class::E::@getter::a
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
+            #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
               element: <testLibrary>::@class::E::@getter::x
           setters
-            #F12 b (nameOffset:73) (firstTokenOffset:64) (offset:73)
+            #F12 isOriginDeclaration b (nameOffset:73) (firstTokenOffset:64) (offset:73)
               element: <testLibrary>::@class::E::@setter::b
               formalParameters
                 #F13 requiredPositional i (nameOffset:79) (firstTokenOffset:75) (offset:79)
                   element: <testLibrary>::@class::E::@setter::b::@formalParameter::i
-            #F14 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
+            #F14 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
               element: <testLibrary>::@class::E::@setter::x
               formalParameters
                 #F15 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
@@ -20978,7 +21401,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -20993,46 +21416,46 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     hasNonFinalField class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       fields
-        synthetic a
+        synthetic isOriginGetterSetter a
           reference: <testLibrary>::@class::E::@field::a
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::E::@getter::a
-        synthetic b
+        synthetic isOriginGetterSetter b
           reference: <testLibrary>::@class::E::@field::b
           firstFragment: #F7
           type: int
           setter: <testLibrary>::@class::E::@setter::b
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::E::@field::x
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::E::@getter::x
           setter: <testLibrary>::@class::E::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F9
       getters
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::E::@getter::a
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@class::E::@field::a
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::E::@getter::x
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@class::E::@field::x
       setters
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::E::@setter::b
           firstFragment: #F12
           formalParameters
@@ -21041,7 +21464,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::E::@field::b
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::E::@setter::x
           firstFragment: #F14
           formalParameters
@@ -21070,13 +21493,13 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -21084,14 +21507,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
 ''');
@@ -21115,10 +21538,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const named (nameOffset:38) (firstTokenOffset:30) (offset:38)
+            #F3 const isOriginDeclaration named (nameOffset:38) (firstTokenOffset:30) (offset:38)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 36
@@ -21127,10 +21550,10 @@
                 #F4 requiredPositional final this.x (nameOffset:49) (firstTokenOffset:44) (offset:49)
                   element: <testLibrary>::@class::C::@constructor::named::@formalParameter::x
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::x
       topLevelVariables
-        #F6 hasInitializer x (nameOffset:61) (firstTokenOffset:61) (offset:61)
+        #F6 hasInitializer isOriginDeclaration x (nameOffset:61) (firstTokenOffset:61) (offset:61)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             InstanceCreationExpression
@@ -21154,20 +21577,20 @@
                 rightParenthesis: ) @75
               staticType: C
       getters
-        #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+        #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
           element: <testLibrary>::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: Object
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -21176,13 +21599,13 @@
               type: Object
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: Object
           variable: <testLibrary>::@class::C::@field::x
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F6
       type: C
@@ -21191,7 +21614,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F7
       returnType: C
@@ -21216,24 +21639,24 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::foo
-            #F3 synthetic bar (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter bar (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::bar
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
-            #F8 bar (nameOffset:32) (firstTokenOffset:23) (offset:32)
+            #F8 isOriginDeclaration bar (nameOffset:32) (firstTokenOffset:23) (offset:32)
               element: <testLibrary>::@class::C::@setter::bar
               formalParameters
                 #F9 requiredPositional final this.foo (nameOffset:41) (firstTokenOffset:36) (offset:41)
@@ -21243,29 +21666,29 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
-        synthetic bar
+        synthetic isOriginGetterSetter bar
           reference: <testLibrary>::@class::C::@field::bar
           firstFragment: #F3
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::bar
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -21274,7 +21697,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::foo
-        bar
+        isOriginDeclaration bar
           reference: <testLibrary>::@class::C::@setter::bar
           firstFragment: #F8
           formalParameters
@@ -21303,14 +21726,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 x (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration x (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F5 requiredPositional final this.x (nameOffset:23) (firstTokenOffset:18) (offset:23)
@@ -21320,17 +21743,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F4
           formalParameters
@@ -21343,6 +21766,1375 @@
 ''');
   }
 
+  test_primaryConstructor_const() async {
+    var library = await buildLibrary('''
+class const A(final int foo) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:12) (firstTokenOffset:0) (offset:12)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:12)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 12
+              formalParameters
+                #F4 requiredPositional final this.foo (nameOffset:24) (firstTokenOffset:14) (offset:24)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_optionalNamed_functionTyped_final() async {
+    var library = await buildLibrary('''
+class A({final int foo()}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalNamed final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int Function()
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final declaring this.foo
+              firstFragment: #F4
+              type: int Function()
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int Function()
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_optionalNamed_simple_final() async {
+    var library = await buildLibrary('''
+class A({final int foo}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalNamed final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final declaring this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_optionalPositional_functionTyped_final() async {
+    var library = await buildLibrary('''
+class A([final int foo()]) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalPositional final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int Function()
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalPositional final declaring this.foo
+              firstFragment: #F4
+              type: int Function()
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int Function()
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_optionalPositional_simple_final() async {
+    var library = await buildLibrary('''
+class A([final int foo]) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalPositional final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalPositional final declaring this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_functionTyped_final() async {
+    var library = await buildLibrary('''
+class A({required final int foo()}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredNamed final this.foo (nameOffset:28) (firstTokenOffset:9) (offset:28)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int Function()
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredNamed final declaring this.foo
+              firstFragment: #F4
+              type: int Function()
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int Function()
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_simple_final() async {
+    var library = await buildLibrary('''
+class A({required final int foo}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredNamed final this.foo (nameOffset:28) (firstTokenOffset:9) (offset:28)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredNamed final declaring this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_type_defaultObjectQuestion() async {
+    var library = await buildLibrary('''
+class A({final foo}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalNamed final this.foo (nameOffset:15) (firstTokenOffset:9) (offset:15)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: Object?
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final hasImplicitType declaring this.foo
+              firstFragment: #F4
+              type: Object?
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: Object?
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_type_fromDefaultValue() async {
+    var library = await buildLibrary('''
+class A({final foo = 0}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalNamed final this.foo (nameOffset:15) (firstTokenOffset:9) (offset:15)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+                  initializer: expression_0
+                    IntegerLiteral
+                      literal: 0 @21
+                      staticType: int
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final hasDefaultValue hasImplicitType declaring this.foo
+              firstFragment: #F4
+              type: int
+              constantInitializer
+                fragment: #F4
+                expression: expression_0
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_type_fromDefaultValue_null() async {
+    var library = await buildLibrary('''
+class A({final foo = null}) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 optionalNamed final this.foo (nameOffset:15) (firstTokenOffset:9) (offset:15)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+                  initializer: expression_0
+                    NullLiteral
+                      literal: null @21
+                      staticType: Null
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: Object?
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 optionalNamed final hasDefaultValue hasImplicitType declaring this.foo
+              firstFragment: #F4
+              type: Object?
+              constantInitializer
+                fragment: #F4
+                expression: expression_0
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: Object?
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_type_fromField_inferred() async {
+    var library = await buildLibrary('''
+class A {
+  int get foo => 0;
+}
+class B({required final foo}) implements A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+          getters
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+              element: <testLibrary>::@class::A::@getter::foo
+        #F5 class B (nameOffset:38) (firstTokenOffset:32) (offset:38)
+          element: <testLibrary>::@class::B
+          fields
+            #F6 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+              element: <testLibrary>::@class::B::@field::foo
+          constructors
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:38) (offset:38)
+              element: <testLibrary>::@class::B::@constructor::new
+              typeName: B
+              typeNameOffset: 38
+              formalParameters
+                #F8 requiredNamed final this.foo (nameOffset:56) (firstTokenOffset:41) (offset:56)
+                  element: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+          getters
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+              element: <testLibrary>::@class::B::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic isOriginGetterSetter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+      constructors
+        synthetic isOriginImplicitDefault new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+      getters
+        isOriginDeclaration foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F4
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+    class B
+      reference: <testLibrary>::@class::B
+      firstFragment: #F5
+      interfaces
+        A
+      fields
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::B::@field::foo
+          firstFragment: #F6
+          type: int
+          getter: <testLibrary>::@class::B::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::B::@constructor::new
+          firstFragment: #F7
+          formalParameters
+            #E0 requiredNamed final hasImplicitType declaring this.foo
+              firstFragment: #F8
+              type: int
+              field: <testLibrary>::@class::B::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::B::@getter::foo
+          firstFragment: #F9
+          returnType: int
+          variable: <testLibrary>::@class::B::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_type_fromField_inferred_hasDefaultValue() async {
+    var library = await buildLibrary('''
+class A {
+  num get foo => 0;
+}
+class B({final foo = 0}) implements A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+          getters
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+              element: <testLibrary>::@class::A::@getter::foo
+        #F5 class B (nameOffset:38) (firstTokenOffset:32) (offset:38)
+          element: <testLibrary>::@class::B
+          fields
+            #F6 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+              element: <testLibrary>::@class::B::@field::foo
+          constructors
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:38) (offset:38)
+              element: <testLibrary>::@class::B::@constructor::new
+              typeName: B
+              typeNameOffset: 38
+              formalParameters
+                #F8 optionalNamed final this.foo (nameOffset:47) (firstTokenOffset:41) (offset:47)
+                  element: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+                  initializer: expression_0
+                    IntegerLiteral
+                      literal: 0 @53
+                      staticType: int
+          getters
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+              element: <testLibrary>::@class::B::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic isOriginGetterSetter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: num
+          getter: <testLibrary>::@class::A::@getter::foo
+      constructors
+        synthetic isOriginImplicitDefault new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+      getters
+        isOriginDeclaration foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F4
+          returnType: num
+          variable: <testLibrary>::@class::A::@field::foo
+    class B
+      reference: <testLibrary>::@class::B
+      firstFragment: #F5
+      interfaces
+        A
+      fields
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::B::@field::foo
+          firstFragment: #F6
+          type: num
+          getter: <testLibrary>::@class::B::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::B::@constructor::new
+          firstFragment: #F7
+          formalParameters
+            #E0 optionalNamed final hasDefaultValue hasImplicitType declaring this.foo
+              firstFragment: #F8
+              type: num
+              constantInitializer
+                fragment: #F8
+                expression: expression_0
+              field: <testLibrary>::@class::B::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::B::@getter::foo
+          firstFragment: #F9
+          returnType: num
+          variable: <testLibrary>::@class::B::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_functionTyped_final() async {
+    var library = await buildLibrary('''
+class A(final int foo()) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredPositional final this.foo (nameOffset:18) (firstTokenOffset:8) (offset:18)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int Function()
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F4
+              type: int Function()
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int Function()
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_functionTyped_var() async {
+    var library = await buildLibrary('''
+class A(var int foo()) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredPositional final this.foo (nameOffset:16) (firstTokenOffset:8) (offset:16)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+          setters
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@setter::foo
+              formalParameters
+                #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+                  element: <testLibrary>::@class::A::@setter::foo::@formalParameter::value
+  classes
+    hasNonFinalField class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int Function()
+          getter: <testLibrary>::@class::A::@getter::foo
+          setter: <testLibrary>::@class::A::@setter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F4
+              type: int Function()
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int Function()
+          variable: <testLibrary>::@class::A::@field::foo
+      setters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@setter::foo
+          firstFragment: #F6
+          formalParameters
+            #E1 requiredPositional value
+              firstFragment: #F7
+              type: int Function()
+          returnType: void
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_simple_final() async {
+    var library = await buildLibrary('''
+class A(final int foo) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredPositional final this.foo (nameOffset:18) (firstTokenOffset:8) (offset:18)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_simple_var() async {
+    var library = await buildLibrary('''
+class A(var int foo) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredPositional final this.foo (nameOffset:16) (firstTokenOffset:8) (offset:16)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+          setters
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@setter::foo
+              formalParameters
+                #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+                  element: <testLibrary>::@class::A::@setter::foo::@formalParameter::value
+  classes
+    hasNonFinalField class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+          setter: <testLibrary>::@class::A::@setter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+      setters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@setter::foo
+          firstFragment: #F6
+          formalParameters
+            #E1 requiredPositional value
+              firstFragment: #F7
+              type: int
+          returnType: void
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_type_fromField_inferred() async {
+    var library = await buildLibrary('''
+class A {
+  int get foo => 0;
+}
+class B(final foo) implements A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+          getters
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+              element: <testLibrary>::@class::A::@getter::foo
+        #F5 class B (nameOffset:38) (firstTokenOffset:32) (offset:38)
+          element: <testLibrary>::@class::B
+          fields
+            #F6 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+              element: <testLibrary>::@class::B::@field::foo
+          constructors
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:38) (offset:38)
+              element: <testLibrary>::@class::B::@constructor::new
+              typeName: B
+              typeNameOffset: 38
+              formalParameters
+                #F8 requiredPositional final this.foo (nameOffset:46) (firstTokenOffset:40) (offset:46)
+                  element: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+          getters
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+              element: <testLibrary>::@class::B::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic isOriginGetterSetter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+      constructors
+        synthetic isOriginImplicitDefault new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+      getters
+        isOriginDeclaration foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F4
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+    class B
+      reference: <testLibrary>::@class::B
+      firstFragment: #F5
+      interfaces
+        A
+      fields
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::B::@field::foo
+          firstFragment: #F6
+          type: int
+          getter: <testLibrary>::@class::B::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::B::@constructor::new
+          firstFragment: #F7
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.foo
+              firstFragment: #F8
+              type: int
+              field: <testLibrary>::@class::B::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::B::@getter::foo
+          firstFragment: #F9
+          returnType: int
+          variable: <testLibrary>::@class::B::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_type_typeParameter() async {
+    var library = await buildLibrary('''
+class A<T>(final T foo) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          typeParameters
+            #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
+              element: #E0 T
+          fields
+            #F3 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F4 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F5 requiredPositional final this.foo (nameOffset:19) (firstTokenOffset:11) (offset:19)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      typeParameters
+        #E0 T
+          firstFragment: #F2
+      fields
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F3
+          hasEnclosingTypeParameterReference: true
+          type: T
+          getter: <testLibrary>::@class::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F4
+          formalParameters
+            #E1 requiredPositional final declaring this.foo
+              firstFragment: #F5
+              type: T
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F6
+          hasEnclosingTypeParameterReference: true
+          returnType: T
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_functionTyped() async {
+    var library = await buildLibrary('''
+class A(int foo()) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          constructors
+            #F2 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F3 requiredPositional foo (nameOffset:12) (firstTokenOffset:8) (offset:12)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F2
+          formalParameters
+            #E0 requiredPositional foo
+              firstFragment: #F3
+              type: int Function()
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_simple() async {
+    var library = await buildLibrary('''
+class A(int foo) {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          constructors
+            #F2 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F3 requiredPositional foo (nameOffset:12) (firstTokenOffset:8) (offset:12)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F2
+          formalParameters
+            #E0 requiredPositional foo
+              firstFragment: #F3
+              type: int
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_super() async {
+    var library = await buildLibrary('''
+class A(int foo) {}
+class B(super.foo) extends A {}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          constructors
+            #F2 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F3 requiredPositional foo (nameOffset:12) (firstTokenOffset:8) (offset:12)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+        #F4 class B (nameOffset:26) (firstTokenOffset:20) (offset:26)
+          element: <testLibrary>::@class::B
+          constructors
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:26) (offset:26)
+              element: <testLibrary>::@class::B::@constructor::new
+              typeName: B
+              typeNameOffset: 26
+              formalParameters
+                #F6 requiredPositional final super.foo (nameOffset:34) (firstTokenOffset:28) (offset:34)
+                  element: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F2
+          formalParameters
+            #E0 requiredPositional foo
+              firstFragment: #F3
+              type: int
+    class B
+      reference: <testLibrary>::@class::B
+      firstFragment: #F4
+      supertype: A
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::B::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional final hasImplicitType super.foo
+              firstFragment: #F6
+              type: int
+              superConstructorParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          superConstructor: <testLibrary>::@class::A::@constructor::new
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_this() async {
+    var library = await buildLibrary('''
+class A(this.foo) {
+  final int foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 isOriginDeclaration foo (nameOffset:32) (firstTokenOffset:32) (offset:32)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+              typeNameOffset: 6
+              formalParameters
+                #F4 requiredPositional final this.foo (nameOffset:13) (firstTokenOffset:8) (offset:13)
+                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
+          getters
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+              element: <testLibrary>::@class::A::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        final isOriginDeclaration foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+      constructors
+        declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType this.foo
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@class::A::@field::foo
+      getters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F5
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+''');
+  }
+
   test_unused_type_parameter() async {
     var library = await buildLibrary('''
 class C<T> {
@@ -21364,29 +23156,29 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
             #F4 f (nameOffset:20) (firstTokenOffset:15) (offset:20)
               element: <testLibrary>::@class::C::@method::f
       topLevelVariables
-        #F5 c (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F5 isOriginDeclaration c (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::c
-        #F6 hasInitializer v (nameOffset:43) (firstTokenOffset:43) (offset:43)
+        #F6 hasInitializer isOriginDeclaration v (nameOffset:43) (firstTokenOffset:43) (offset:43)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::c
-        #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+        #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
           element: <testLibrary>::@getter::v
       setters
-        #F9 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F9 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@setter::c
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F11 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+        #F11 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
           element: <testLibrary>::@setter::v
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
@@ -21399,7 +23191,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       methods
@@ -21408,31 +23200,31 @@
           firstFragment: #F4
           returnType: void
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F5
       type: C<int>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F6
       type: void Function()
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F7
       returnType: C<int>
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F8
       returnType: void Function()
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F9
       formalParameters
@@ -21441,7 +23233,7 @@
           type: C<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F11
       formalParameters
@@ -21477,7 +23269,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -21485,21 +23277,21 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 hasInitializer foo (nameOffset:63) (firstTokenOffset:63) (offset:63)
+            #F4 hasInitializer isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @69
                   staticType: int
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static const hasInitializer foo
+        static const hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
@@ -21508,11 +23300,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -21540,28 +23332,28 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:26) (firstTokenOffset:12) (offset:26)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 hasInitializer foo (nameOffset:49) (firstTokenOffset:49) (offset:49)
+            #F4 hasInitializer isOriginDeclaration foo (nameOffset:49) (firstTokenOffset:49) (offset:49)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @55
                   staticType: int
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static const hasInitializer foo
+        static const hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
@@ -21570,11 +23362,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -21604,7 +23396,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -21612,21 +23404,21 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 hasInitializer foo (nameOffset:56) (firstTokenOffset:56) (offset:56)
+            #F4 hasInitializer isOriginDeclaration foo (nameOffset:56) (firstTokenOffset:56) (offset:56)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @62
                   staticType: int
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
@@ -21635,11 +23427,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -21667,34 +23459,34 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:26) (firstTokenOffset:12) (offset:26)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 hasInitializer foo (nameOffset:42) (firstTokenOffset:42) (offset:42)
+            #F4 hasInitializer isOriginDeclaration foo (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -21765,7 +23557,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
     #F1 package:test/a1.dart
@@ -21849,7 +23641,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
   exportedReferences
@@ -21884,7 +23676,7 @@
         #F1 class A (nameOffset:14) (firstTokenOffset:0) (offset:14)
           element: <testLibrary>::@class::A::@def::0
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::A::@def::0::@constructor::new
               typeName: A
           methods
@@ -21894,7 +23686,7 @@
           element: <testLibrary>::@class::A::@def::1
           nextFragment: #F5
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::A::@def::1::@constructor::new
               typeName: A
           methods
@@ -21911,7 +23703,7 @@
       reference: <testLibrary>::@class::A::@def::0
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::0::@constructor::new
           firstFragment: #F2
       methods
@@ -21923,7 +23715,7 @@
       reference: <testLibrary>::@class::A::@def::1
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::1::@constructor::new
           firstFragment: #F6
       methods
@@ -21966,14 +23758,14 @@
         #F1 class B (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F3 class A (nameOffset:41) (firstTokenOffset:27) (offset:41)
           element: <testLibrary>::@class::A
           nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -21990,14 +23782,14 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       methods
@@ -22034,13 +23826,13 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -22049,7 +23841,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F7 augment foo (nameOffset:58) (firstTokenOffset:48) (offset:58)
+            #F7 augment isOriginDeclaration foo (nameOffset:58) (firstTokenOffset:48) (offset:58)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 56
@@ -22059,24 +23851,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F7
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -22110,16 +23902,16 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
         #F2 class A (nameOffset:47) (firstTokenOffset:33) (offset:47)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F5 augment foo (nameOffset:63) (firstTokenOffset:53) (offset:63)
+            #F5 augment isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:53) (offset:63)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 61
@@ -22129,17 +23921,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F5
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -22175,7 +23967,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F4 augment foo (nameOffset:59) (firstTokenOffset:49) (offset:59)
+            #F4 augment isOriginDeclaration foo (nameOffset:59) (firstTokenOffset:49) (offset:59)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 57
@@ -22185,7 +23977,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F4
       methods
@@ -22218,10 +24010,10 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           setters
-            #F4 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F5 requiredPositional _ (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -22230,7 +24022,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment foo (nameOffset:63) (firstTokenOffset:53) (offset:63)
+            #F6 augment isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:53) (offset:63)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 61
@@ -22240,17 +24032,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F6
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -22285,7 +24077,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F3 named (nameOffset:34) (firstTokenOffset:32) (offset:34)
+            #F3 isOriginDeclaration named (nameOffset:34) (firstTokenOffset:32) (offset:34)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 32
@@ -22295,7 +24087,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
 ''');
@@ -22332,7 +24124,7 @@
               element: #E0 T
               previousFragment: #F3
           constructors
-            #F5 named (nameOffset:40) (firstTokenOffset:38) (offset:40)
+            #F5 isOriginDeclaration named (nameOffset:40) (firstTokenOffset:38) (offset:40)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 38
@@ -22348,7 +24140,7 @@
         #E0 T
           firstFragment: #F3
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F5
           formalParameters
@@ -22380,7 +24172,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -22388,7 +24180,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F4 named (nameOffset:42) (firstTokenOffset:40) (offset:42)
+            #F4 isOriginDeclaration named (nameOffset:42) (firstTokenOffset:40) (offset:42)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 40
@@ -22398,10 +24190,10 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F4
 ''');
@@ -22430,7 +24222,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:32) (offset:32)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:32) (offset:32)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 32
@@ -22439,7 +24231,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -22467,7 +24259,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -22476,7 +24268,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:46) (offset:46)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:46) (offset:46)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 46
@@ -22485,10 +24277,10 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
 ''');
@@ -22516,16 +24308,16 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 f (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F3 isOriginDeclaration f (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::A::@field::f
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@getter::f
         #F2 class A (nameOffset:42) (firstTokenOffset:28) (offset:42)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F5 named (nameOffset:50) (firstTokenOffset:48) (offset:50)
+            #F5 isOriginDeclaration named (nameOffset:50) (firstTokenOffset:48) (offset:50)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 48
@@ -22538,13 +24330,13 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final f
+        final isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::f
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F5
           formalParameters
@@ -22553,7 +24345,7 @@
               type: int
               field: <testLibrary>::@class::A::@field::f
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: int
@@ -22583,16 +24375,16 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 f (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F3 isOriginDeclaration f (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::A::@field::f
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@getter::f
         #F2 class A (nameOffset:42) (firstTokenOffset:28) (offset:42)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F5 const named (nameOffset:56) (firstTokenOffset:48) (offset:56)
+            #F5 const isOriginDeclaration named (nameOffset:56) (firstTokenOffset:48) (offset:56)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 54
@@ -22602,13 +24394,13 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final f
+        final isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::f
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F5
           constantInitializers
@@ -22622,7 +24414,7 @@
                 literal: 0 @70
                 staticType: int
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: int
@@ -22652,7 +24444,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 12
@@ -22661,13 +24453,13 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:56) (firstTokenOffset:56) (offset:56)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:56) (firstTokenOffset:56) (offset:56)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
@@ -22677,24 +24469,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -22728,18 +24520,18 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -22748,7 +24540,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
   classes
@@ -22756,24 +24548,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -22812,18 +24604,18 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -22833,7 +24625,7 @@
           previousFragment: #F1
           nextFragment: #F9
           fields
-            #F4 augment hasInitializer foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
               nextFragment: #F10
@@ -22841,7 +24633,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F2
           fields
-            #F10 augment hasInitializer foo (nameOffset:104) (firstTokenOffset:104) (offset:104)
+            #F10 augment hasInitializer isOriginDeclaration foo (nameOffset:104) (firstTokenOffset:104) (offset:104)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F4
   classes
@@ -22849,24 +24641,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -22904,19 +24696,19 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
               nextFragment: #F7
           setters
-            #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F8 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -22926,14 +24718,14 @@
           previousFragment: #F1
           nextFragment: #F10
           getters
-            #F7 augment foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
+            #F7 augment isOriginDeclaration foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
               element: <testLibrary>::@class::A::@getter::foo
               previousFragment: #F6
         #F10 class A (nameOffset:91) (firstTokenOffset:77) (offset:91)
           element: <testLibrary>::@class::A
           previousFragment: #F2
           fields
-            #F4 augment hasInitializer foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
   classes
@@ -22941,24 +24733,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F8
           formalParameters
@@ -22996,18 +24788,18 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -23018,7 +24810,7 @@
           previousFragment: #F1
           nextFragment: #F10
           setters
-            #F9 augment foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
+            #F9 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F11 requiredPositional _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
@@ -23028,7 +24820,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F2
           fields
-            #F4 augment hasInitializer foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
   classes
@@ -23036,24 +24828,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -23088,7 +24880,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
@@ -23096,17 +24888,17 @@
                   staticType: null
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::A::@getter::foo
         #F2 class A (nameOffset:55) (firstTokenOffset:41) (offset:55)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:87) (firstTokenOffset:87) (offset:87)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:87) (firstTokenOffset:87) (offset:87)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_1
                 MethodInvocation
@@ -23125,7 +24917,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static const hasInitializer foo
+        static const hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
@@ -23134,11 +24926,11 @@
             expression: expression_1
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
@@ -23168,18 +24960,18 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -23188,7 +24980,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:63) (firstTokenOffset:63) (offset:63)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
   classes
@@ -23196,24 +24988,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -23248,7 +25040,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
@@ -23256,18 +25048,18 @@
                   staticType: null
               nextFragment: #F4
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:33) (offset:39)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:33) (offset:39)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 39
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@getter::foo
         #F2 class A (nameOffset:61) (firstTokenOffset:47) (offset:61)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:85) (firstTokenOffset:85) (offset:85)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:85) (firstTokenOffset:85) (offset:85)
               element: <testLibrary>::@class::A::@field::foo
               initializer: expression_1
                 BinaryExpression
@@ -23288,7 +25080,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
@@ -23297,11 +25089,11 @@
             expression: expression_1
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
@@ -23333,21 +25125,21 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F6 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
         #F2 class A (nameOffset:47) (firstTokenOffset:33) (offset:47)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
   classes
@@ -23355,17 +25147,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic hasInitializer foo
+        synthetic hasInitializer isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
@@ -23395,7 +25187,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -23405,13 +25197,13 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F5 augment hasInitializer foo (nameOffset:61) (firstTokenOffset:61) (offset:61)
+            #F5 augment hasInitializer isOriginDeclaration foo (nameOffset:61) (firstTokenOffset:61) (offset:61)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
@@ -23421,24 +25213,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -23479,15 +25271,15 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F6 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F6 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional _ (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -23496,7 +25288,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: <testLibrary>::@class::A::@field::foo
               previousFragment: #F3
   classes
@@ -23504,17 +25296,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic hasInitializer foo
+        synthetic hasInitializer isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -23548,17 +25340,17 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo1 (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo1 (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo1
           setters
-            #F6 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo1
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -23567,13 +25359,13 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F8 hasInitializer foo2 (nameOffset:53) (firstTokenOffset:53) (offset:53)
+            #F8 hasInitializer isOriginDeclaration foo2 (nameOffset:53) (firstTokenOffset:53) (offset:53)
               element: <testLibrary>::@class::A::@field::foo2
           getters
-            #F9 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F9 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::A::@getter::foo2
           setters
-            #F10 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F10 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::A::@setter::foo2
               formalParameters
                 #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
@@ -23583,35 +25375,35 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo1
+        hasInitializer isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo1
           setter: <testLibrary>::@class::A::@setter::foo1
-        hasInitializer foo2
+        hasInitializer isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::A::@getter::foo2
           setter: <testLibrary>::@class::A::@setter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@class::A::@getter::foo1
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@class::A::@getter::foo2
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo2
       setters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@class::A::@setter::foo1
           firstFragment: #F6
           formalParameters
@@ -23620,7 +25412,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@class::A::@setter::foo2
           firstFragment: #F10
           formalParameters
@@ -23658,17 +25450,17 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 foo1 (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F5 isOriginDeclaration foo1 (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::A::@field::foo1
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F7 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::A::@getter::foo1
           setters
-            #F8 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F8 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::A::@setter::foo1
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -23681,13 +25473,13 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F10 foo2 (nameOffset:51) (firstTokenOffset:51) (offset:51)
+            #F10 isOriginDeclaration foo2 (nameOffset:51) (firstTokenOffset:51) (offset:51)
               element: <testLibrary>::@class::A::@field::foo2
           getters
-            #F11 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F11 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::A::@getter::foo2
           setters
-            #F12 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F12 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::A::@setter::foo2
               formalParameters
                 #F13 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
@@ -23700,14 +25492,14 @@
         #E0 T
           firstFragment: #F3
       fields
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::A::@getter::foo1
           setter: <testLibrary>::@class::A::@setter::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F10
           hasEnclosingTypeParameterReference: true
@@ -23715,24 +25507,24 @@
           getter: <testLibrary>::@class::A::@getter::foo2
           setter: <testLibrary>::@class::A::@setter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@class::A::@getter::foo1
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@class::A::@getter::foo2
           firstFragment: #F11
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::A::@field::foo2
       setters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@class::A::@setter::foo1
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
@@ -23742,7 +25534,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@class::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@class::A::@setter::foo2
           firstFragment: #F12
           hasEnclosingTypeParameterReference: true
@@ -23777,7 +25569,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -23788,23 +25580,23 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F5 foo (nameOffset:58) (firstTokenOffset:58) (offset:58)
+            #F5 isOriginDeclaration foo (nameOffset:58) (firstTokenOffset:58) (offset:58)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -23813,7 +25605,7 @@
               type: int
               field: <testLibrary>::@class::A::@field::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
@@ -23843,7 +25635,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -23851,23 +25643,23 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 foo (nameOffset:66) (firstTokenOffset:66) (offset:66)
+            #F4 isOriginDeclaration foo (nameOffset:66) (firstTokenOffset:66) (offset:66)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -23881,7 +25673,7 @@
                 literal: 0 @30
                 staticType: int
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -23911,7 +25703,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 12
@@ -23920,27 +25712,27 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F4 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F5 augment foo (nameOffset:60) (firstTokenOffset:44) (offset:60)
+            #F5 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:44) (offset:60)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -23970,7 +25762,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -23980,27 +25772,27 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F6 augment foo (nameOffset:65) (firstTokenOffset:49) (offset:65)
+            #F6 augment isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:49) (offset:65)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F6
           returnType: int
@@ -24035,14 +25827,14 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F5 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F5 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F6 requiredPositional _ (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -24051,31 +25843,31 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           getters
-            #F7 augment foo (nameOffset:69) (firstTokenOffset:53) (offset:69)
+            #F7 augment isOriginDeclaration foo (nameOffset:69) (firstTokenOffset:53) (offset:69)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F7
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -24109,50 +25901,50 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo1
         #F2 class A (nameOffset:48) (firstTokenOffset:34) (offset:48)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::A::@field::foo2
           getters
-            #F7 foo2 (nameOffset:62) (firstTokenOffset:54) (offset:62)
+            #F7 isOriginDeclaration foo2 (nameOffset:62) (firstTokenOffset:54) (offset:62)
               element: <testLibrary>::@class::A::@getter::foo2
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::A::@getter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@getter::foo1
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@getter::foo2
           firstFragment: #F7
           returnType: int
@@ -24186,14 +25978,14 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo1
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F7 foo1 (nameOffset:21) (firstTokenOffset:15) (offset:21)
+            #F7 isOriginDeclaration foo1 (nameOffset:21) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@getter::foo1
         #F2 class A (nameOffset:44) (firstTokenOffset:30) (offset:44)
           element: <testLibrary>::@class::A
@@ -24203,10 +25995,10 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F8 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F8 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::A::@field::foo2
           getters
-            #F9 foo2 (nameOffset:59) (firstTokenOffset:53) (offset:59)
+            #F9 isOriginDeclaration foo2 (nameOffset:59) (firstTokenOffset:53) (offset:59)
               element: <testLibrary>::@class::A::@getter::foo2
   classes
     class A
@@ -24216,30 +26008,30 @@
         #E0 T
           firstFragment: #F3
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::A::@getter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F6
       getters
-        abstract foo1
+        abstract isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@getter::foo1
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::A::@field::foo1
-        abstract foo2
+        abstract isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@getter::foo2
           firstFragment: #F9
           hasEnclosingTypeParameterReference: true
@@ -24270,18 +26062,18 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
               nextFragment: #F6
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -24290,7 +26082,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           getters
-            #F6 augment foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
+            #F6 augment isOriginDeclaration foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
               element: <testLibrary>::@class::A::@getter::foo
               previousFragment: #F5
   classes
@@ -24298,24 +26090,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -24353,18 +26145,18 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
               nextFragment: #F6
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -24374,7 +26166,7 @@
           previousFragment: #F1
           nextFragment: #F9
           getters
-            #F6 augment foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
+            #F6 augment isOriginDeclaration foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
               element: <testLibrary>::@class::A::@getter::foo
               previousFragment: #F5
               nextFragment: #F10
@@ -24382,7 +26174,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F2
           getters
-            #F10 augment foo (nameOffset:113) (firstTokenOffset:97) (offset:113)
+            #F10 augment isOriginDeclaration foo (nameOffset:113) (firstTokenOffset:97) (offset:113)
               element: <testLibrary>::@class::A::@getter::foo
               previousFragment: #F6
   classes
@@ -24390,24 +26182,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -24442,25 +26234,25 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo1
-            #F4 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo2
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F6 isOriginDeclaration foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo1
               nextFragment: #F7
-            #F8 foo2 (nameOffset:41) (firstTokenOffset:33) (offset:41)
+            #F8 isOriginDeclaration foo2 (nameOffset:41) (firstTokenOffset:33) (offset:41)
               element: <testLibrary>::@class::A::@getter::foo2
         #F2 class A (nameOffset:69) (firstTokenOffset:55) (offset:69)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           getters
-            #F7 augment foo1 (nameOffset:91) (firstTokenOffset:75) (offset:91)
+            #F7 augment isOriginDeclaration foo1 (nameOffset:91) (firstTokenOffset:75) (offset:91)
               element: <testLibrary>::@class::A::@getter::foo1
               previousFragment: #F6
   classes
@@ -24468,27 +26260,27 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@getter::foo1
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@getter::foo2
           firstFragment: #F8
           returnType: int
@@ -24519,25 +26311,25 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
               nextFragment: #F6
         #F2 class A (nameOffset:47) (firstTokenOffset:33) (offset:47)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           getters
-            #F6 augment foo (nameOffset:69) (firstTokenOffset:53) (offset:69)
+            #F6 augment isOriginDeclaration foo (nameOffset:69) (firstTokenOffset:53) (offset:69)
               element: <testLibrary>::@class::A::@getter::foo
               previousFragment: #F5
               nextFragment: #F7
-            #F7 augment foo (nameOffset:97) (firstTokenOffset:81) (offset:97)
+            #F7 augment isOriginDeclaration foo (nameOffset:97) (firstTokenOffset:81) (offset:97)
               element: <testLibrary>::@class::A::@getter::foo
               previousFragment: #F6
   classes
@@ -24545,17 +26337,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -24587,23 +26379,23 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F4 augment foo (nameOffset:48) (firstTokenOffset:32) (offset:48)
+            #F4 augment isOriginDeclaration foo (nameOffset:48) (firstTokenOffset:32) (offset:48)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -24631,13 +26423,13 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class I1 (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::I1
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F2 class A (nameOffset:52) (firstTokenOffset:38) (offset:52)
@@ -24646,7 +26438,7 @@
         #F6 class I2 (nameOffset:77) (firstTokenOffset:71) (offset:77)
           element: <testLibrary>::@class::I2
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
   classes
@@ -24657,21 +26449,21 @@
         I1
         I2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class I1
       reference: <testLibrary>::@class::I1
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F5
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F7
 ''');
@@ -24700,13 +26492,13 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class I1 (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::I1
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F2 class A (nameOffset:52) (firstTokenOffset:38) (offset:52)
@@ -24716,7 +26508,7 @@
         #F7 class I2 (nameOffset:77) (firstTokenOffset:71) (offset:77)
           element: <testLibrary>::@class::I2
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
         #F6 class A (nameOffset:98) (firstTokenOffset:84) (offset:98)
@@ -24725,7 +26517,7 @@
         #F9 class I3 (nameOffset:123) (firstTokenOffset:117) (offset:123)
           element: <testLibrary>::@class::I3
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:123)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:123)
               element: <testLibrary>::@class::I3::@constructor::new
               typeName: I3
   classes
@@ -24737,28 +26529,28 @@
         I2
         I3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class I1
       reference: <testLibrary>::@class::I1
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F5
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F8
     class I3
       reference: <testLibrary>::@class::I3
       firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I3::@constructor::new
           firstFragment: #F10
 ''');
@@ -24788,13 +26580,13 @@
               element: #E0 T
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F6 class I1 (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::I1
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F2 class A (nameOffset:55) (firstTokenOffset:41) (offset:55)
@@ -24810,7 +26602,7 @@
             #F9 E (nameOffset:89) (firstTokenOffset:89) (offset:89)
               element: #E1 E
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
   classes
@@ -24824,14 +26616,14 @@
         I1
         I2<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
     class I1
       reference: <testLibrary>::@class::I1
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F7
     class I2
@@ -24841,7 +26633,7 @@
         #E1 E
           firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F10
 ''');
@@ -24871,13 +26663,13 @@
               element: #E0 T
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F6 class I1 (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::I1
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F2 class A (nameOffset:55) (firstTokenOffset:41) (offset:55)
@@ -24893,7 +26685,7 @@
             #F9 E (nameOffset:94) (firstTokenOffset:94) (offset:94)
               element: #E1 E
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
   classes
@@ -24907,14 +26699,14 @@
         I1
         I2<InvalidType>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
     class I1
       reference: <testLibrary>::@class::I1
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F7
     class I2
@@ -24924,7 +26716,7 @@
         #E1 E
           firstFragment: #F9
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F10
 ''');
@@ -24952,7 +26744,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 12
@@ -24968,7 +26760,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F3
       methods
@@ -25001,17 +26793,17 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -25027,24 +26819,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -25083,14 +26875,14 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
         #F2 class A (nameOffset:47) (firstTokenOffset:33) (offset:47)
           element: <testLibrary>::@class::A
@@ -25103,17 +26895,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -25148,14 +26940,14 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F5 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F5 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F6 requiredPositional _ (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -25171,17 +26963,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -25220,7 +27012,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25237,7 +27029,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -25272,7 +27064,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:26) (firstTokenOffset:12) (offset:26)
@@ -25293,7 +27085,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -25334,7 +27126,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25355,7 +27147,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -25393,7 +27185,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25416,7 +27208,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -25453,7 +27245,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25481,7 +27273,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -25518,7 +27310,7 @@
               element: #E0 T
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25542,7 +27334,7 @@
         #E0 T
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       methods
@@ -25585,7 +27377,7 @@
               element: #E0 T
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25611,7 +27403,7 @@
         #E0 T
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       methods
@@ -25643,7 +27435,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:46) (firstTokenOffset:32) (offset:46)
@@ -25663,7 +27455,7 @@
         M1
         M2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   mixins
@@ -25706,7 +27498,7 @@
             #F2 S (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 S
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F4 class A (nameOffset:20) (firstTokenOffset:14) (offset:20)
@@ -25717,7 +27509,7 @@
               element: #E1 T
               nextFragment: #F7
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F5 class A (nameOffset:89) (firstTokenOffset:75) (offset:89)
@@ -25760,7 +27552,7 @@
         #E0 S
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
     class A
@@ -25775,7 +27567,7 @@
         M2<T>
         M3<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F8
           superConstructor: ConstructorMember
@@ -25831,7 +27623,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration foo (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::foo
               typeName: A
               typeNameOffset: 12
@@ -25840,10 +27632,10 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F4 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::A::@field::foo
           setters
-            #F5 augment foo (nameOffset:56) (firstTokenOffset:44) (offset:56)
+            #F5 augment isOriginDeclaration foo (nameOffset:56) (firstTokenOffset:44) (offset:56)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F6 requiredPositional _ (nameOffset:64) (firstTokenOffset:60) (offset:64)
@@ -25853,17 +27645,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F4
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@constructor::foo
           firstFragment: #F3
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -25897,20 +27689,20 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
         #F2 class A (nameOffset:47) (firstTokenOffset:33) (offset:47)
           element: <testLibrary>::@class::A
           previousFragment: #F1
           setters
-            #F6 augment foo (nameOffset:65) (firstTokenOffset:53) (offset:65)
+            #F6 augment isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:53) (offset:65)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional _ (nameOffset:73) (firstTokenOffset:69) (offset:73)
@@ -25920,24 +27712,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -25971,7 +27763,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -25981,10 +27773,10 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::A::@field::foo
           setters
-            #F6 augment foo (nameOffset:61) (firstTokenOffset:49) (offset:61)
+            #F6 augment isOriginDeclaration foo (nameOffset:61) (firstTokenOffset:49) (offset:61)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional _ (nameOffset:69) (firstTokenOffset:65) (offset:69)
@@ -25994,17 +27786,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F5
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -26043,14 +27835,14 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F5 foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F5 isOriginDeclaration foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo1
               formalParameters
                 #F6 requiredPositional _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
@@ -26059,10 +27851,10 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F7 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F7 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::A::@field::foo2
           setters
-            #F8 foo2 (nameOffset:58) (firstTokenOffset:54) (offset:58)
+            #F8 isOriginDeclaration foo2 (nameOffset:58) (firstTokenOffset:54) (offset:58)
               element: <testLibrary>::@class::A::@setter::foo2
               formalParameters
                 #F9 requiredPositional _ (nameOffset:67) (firstTokenOffset:63) (offset:67)
@@ -26072,22 +27864,22 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F7
           type: int
           setter: <testLibrary>::@class::A::@setter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@setter::foo1
           firstFragment: #F5
           formalParameters
@@ -26096,7 +27888,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@setter::foo2
           firstFragment: #F8
           formalParameters
@@ -26130,17 +27922,17 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -26150,7 +27942,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           setters
-            #F8 augment foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
+            #F8 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F9 requiredPositional _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
@@ -26161,24 +27953,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -26214,10 +28006,10 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@field::foo
           setters
-            #F4 augment foo (nameOffset:44) (firstTokenOffset:32) (offset:44)
+            #F4 augment isOriginDeclaration foo (nameOffset:44) (firstTokenOffset:32) (offset:44)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F5 requiredPositional _ (nameOffset:52) (firstTokenOffset:48) (offset:52)
@@ -26227,13 +28019,13 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -26268,22 +28060,22 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo1
-            #F4 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo2
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F6 foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F6 isOriginDeclaration foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo1
               formalParameters
                 #F7 requiredPositional _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
                   element: <testLibrary>::@class::A::@setter::foo1::@formalParameter::_
               nextFragment: #F8
-            #F9 foo2 (nameOffset:37) (firstTokenOffset:33) (offset:37)
+            #F9 isOriginDeclaration foo2 (nameOffset:37) (firstTokenOffset:33) (offset:37)
               element: <testLibrary>::@class::A::@setter::foo2
               formalParameters
                 #F10 requiredPositional _ (nameOffset:46) (firstTokenOffset:42) (offset:46)
@@ -26292,7 +28084,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           setters
-            #F8 augment foo1 (nameOffset:87) (firstTokenOffset:75) (offset:87)
+            #F8 augment isOriginDeclaration foo1 (nameOffset:87) (firstTokenOffset:75) (offset:87)
               element: <testLibrary>::@class::A::@setter::foo1
               formalParameters
                 #F11 requiredPositional _ (nameOffset:96) (firstTokenOffset:92) (offset:96)
@@ -26303,22 +28095,22 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@class::A::@field::foo1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@class::A::@field::foo2
           firstFragment: #F4
           type: int
           setter: <testLibrary>::@class::A::@setter::foo2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@class::A::@setter::foo1
           firstFragment: #F6
           formalParameters
@@ -26327,7 +28119,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@class::A::@setter::foo2
           firstFragment: #F9
           formalParameters
@@ -26358,7 +28150,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -26373,7 +28165,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   mixins
@@ -26406,13 +28198,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A::@def::0
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@def::0::@constructor::new
               typeName: A
         #F3 class A (nameOffset:46) (firstTokenOffset:32) (offset:46)
           element: <testLibrary>::@class::A::@def::1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::A::@def::1::@constructor::new
               typeName: A
       mixins
@@ -26423,14 +28215,14 @@
       reference: <testLibrary>::@class::A::@def::0
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::0::@constructor::new
           firstFragment: #F2
     class A
       reference: <testLibrary>::@class::A::@def::1
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::1::@constructor::new
           firstFragment: #F4
   mixins
@@ -26464,7 +28256,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26478,7 +28270,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:63) (firstTokenOffset:53) (offset:63)
+            #F6 augment isOriginDeclaration named (nameOffset:63) (firstTokenOffset:53) (offset:63)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 61
@@ -26493,7 +28285,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26529,7 +28321,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26543,7 +28335,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:63) (firstTokenOffset:53) (offset:63)
+            #F6 augment isOriginDeclaration named (nameOffset:63) (firstTokenOffset:53) (offset:63)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 61
@@ -26558,7 +28350,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26594,7 +28386,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26611,7 +28403,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:71) (firstTokenOffset:61) (offset:71)
+            #F8 augment isOriginDeclaration named (nameOffset:71) (firstTokenOffset:61) (offset:71)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 69
@@ -26629,7 +28421,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26668,7 +28460,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26682,7 +28474,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:63) (firstTokenOffset:53) (offset:63)
+            #F6 augment isOriginDeclaration named (nameOffset:63) (firstTokenOffset:53) (offset:63)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 61
@@ -26697,7 +28489,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26733,7 +28525,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26750,7 +28542,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:71) (firstTokenOffset:61) (offset:71)
+            #F8 augment isOriginDeclaration named (nameOffset:71) (firstTokenOffset:61) (offset:71)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 69
@@ -26768,7 +28560,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26807,7 +28599,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26821,7 +28613,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:61) (firstTokenOffset:51) (offset:61)
+            #F6 augment isOriginDeclaration named (nameOffset:61) (firstTokenOffset:51) (offset:61)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 59
@@ -26836,7 +28628,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26872,7 +28664,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26886,7 +28678,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:61) (firstTokenOffset:51) (offset:61)
+            #F6 augment isOriginDeclaration named (nameOffset:61) (firstTokenOffset:51) (offset:61)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 59
@@ -26901,7 +28693,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -26937,7 +28729,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -26954,7 +28746,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:69) (firstTokenOffset:59) (offset:69)
+            #F8 augment isOriginDeclaration named (nameOffset:69) (firstTokenOffset:59) (offset:69)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 67
@@ -26972,7 +28764,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27011,7 +28803,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27025,7 +28817,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:61) (firstTokenOffset:51) (offset:61)
+            #F6 augment isOriginDeclaration named (nameOffset:61) (firstTokenOffset:51) (offset:61)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 59
@@ -27040,7 +28832,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27076,7 +28868,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27090,7 +28882,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:61) (firstTokenOffset:51) (offset:61)
+            #F6 augment isOriginDeclaration named (nameOffset:61) (firstTokenOffset:51) (offset:61)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 59
@@ -27105,7 +28897,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27141,7 +28933,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27158,7 +28950,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:80) (firstTokenOffset:70) (offset:80)
+            #F8 augment isOriginDeclaration named (nameOffset:80) (firstTokenOffset:70) (offset:80)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 78
@@ -27176,7 +28968,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27215,7 +29007,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27232,7 +29024,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:80) (firstTokenOffset:70) (offset:80)
+            #F8 augment isOriginDeclaration named (nameOffset:80) (firstTokenOffset:70) (offset:80)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 78
@@ -27250,7 +29042,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27289,7 +29081,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27312,7 +29104,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F12 augment named (nameOffset:105) (firstTokenOffset:95) (offset:105)
+            #F12 augment isOriginDeclaration named (nameOffset:105) (firstTokenOffset:95) (offset:105)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 103
@@ -27336,7 +29128,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27381,7 +29173,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27398,7 +29190,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:80) (firstTokenOffset:70) (offset:80)
+            #F8 augment isOriginDeclaration named (nameOffset:80) (firstTokenOffset:70) (offset:80)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 78
@@ -27416,7 +29208,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27455,7 +29247,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27472,7 +29264,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:69) (firstTokenOffset:59) (offset:69)
+            #F8 augment isOriginDeclaration named (nameOffset:69) (firstTokenOffset:59) (offset:69)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 67
@@ -27490,7 +29282,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27529,7 +29321,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27543,7 +29335,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:72) (firstTokenOffset:62) (offset:72)
+            #F6 augment isOriginDeclaration named (nameOffset:72) (firstTokenOffset:62) (offset:72)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 70
@@ -27558,7 +29350,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27594,7 +29386,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27608,7 +29400,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:72) (firstTokenOffset:62) (offset:72)
+            #F6 augment isOriginDeclaration named (nameOffset:72) (firstTokenOffset:62) (offset:72)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 70
@@ -27623,7 +29415,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27659,7 +29451,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27676,7 +29468,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:89) (firstTokenOffset:79) (offset:89)
+            #F8 augment isOriginDeclaration named (nameOffset:89) (firstTokenOffset:79) (offset:89)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 87
@@ -27694,7 +29486,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27733,7 +29525,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27747,7 +29539,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:72) (firstTokenOffset:62) (offset:72)
+            #F6 augment isOriginDeclaration named (nameOffset:72) (firstTokenOffset:62) (offset:72)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 70
@@ -27762,7 +29554,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27798,7 +29590,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27815,7 +29607,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:89) (firstTokenOffset:79) (offset:89)
+            #F8 augment isOriginDeclaration named (nameOffset:89) (firstTokenOffset:79) (offset:89)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 87
@@ -27833,7 +29625,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27872,7 +29664,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27886,7 +29678,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F6 augment named (nameOffset:72) (firstTokenOffset:62) (offset:72)
+            #F6 augment isOriginDeclaration named (nameOffset:72) (firstTokenOffset:62) (offset:72)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 70
@@ -27901,7 +29693,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -27937,7 +29729,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -27954,7 +29746,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:89) (firstTokenOffset:79) (offset:89)
+            #F8 augment isOriginDeclaration named (nameOffset:89) (firstTokenOffset:79) (offset:89)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 87
@@ -27972,7 +29764,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -28011,7 +29803,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -28028,7 +29820,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F8 augment named (nameOffset:89) (firstTokenOffset:79) (offset:89)
+            #F8 augment isOriginDeclaration named (nameOffset:89) (firstTokenOffset:79) (offset:89)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 87
@@ -28046,7 +29838,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -28089,7 +29881,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -28100,7 +29892,7 @@
           previousFragment: #F1
           nextFragment: #F5
           constructors
-            #F4 augment named (nameOffset:56) (firstTokenOffset:46) (offset:56)
+            #F4 augment isOriginDeclaration named (nameOffset:56) (firstTokenOffset:46) (offset:56)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 54
@@ -28111,7 +29903,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F2
           constructors
-            #F6 augment named (nameOffset:98) (firstTokenOffset:88) (offset:98)
+            #F6 augment isOriginDeclaration named (nameOffset:98) (firstTokenOffset:88) (offset:98)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 96
@@ -28122,7 +29914,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
 ''');
@@ -28150,7 +29942,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F3 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
@@ -28160,7 +29952,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F4 augment named (nameOffset:56) (firstTokenOffset:46) (offset:56)
+            #F4 augment isOriginDeclaration named (nameOffset:56) (firstTokenOffset:46) (offset:56)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 54
@@ -28171,7 +29963,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
 ''');
@@ -28199,7 +29991,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -28208,7 +30000,7 @@
           element: <testLibrary>::@class::A
           previousFragment: #F1
           constructors
-            #F4 augment new (nameOffset:<null>) (firstTokenOffset:40) (offset:48)
+            #F4 augment isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:40) (offset:48)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 48
@@ -28218,7 +30010,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -28248,13 +30040,13 @@
           element: <testLibrary>::@class::B
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F4 class A (nameOffset:28) (firstTokenOffset:22) (offset:28)
           element: <testLibrary>::@class::A
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28278,7 +30070,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -28295,7 +30087,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       methods
@@ -28334,7 +30126,7 @@
           element: <testLibrary>::@class::B
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -28346,7 +30138,7 @@
         #F6 class A (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::A
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28365,7 +30157,7 @@
       interfaces
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
       methods
@@ -28381,7 +30173,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F7
       methods
@@ -28420,7 +30212,7 @@
           element: <testLibrary>::@class::B
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -28449,7 +30241,7 @@
       mixins
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
       methods
@@ -28505,7 +30297,7 @@
           element: <testLibrary>::@class::B
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -28519,7 +30311,7 @@
         #F8 class A (nameOffset:44) (firstTokenOffset:38) (offset:44)
           element: <testLibrary>::@class::A
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28545,7 +30337,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -28562,7 +30354,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F8
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F9
       methods
@@ -28599,7 +30391,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28626,7 +30418,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -28660,7 +30452,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28683,7 +30475,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -28721,7 +30513,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28744,7 +30536,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -28782,7 +30574,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28811,7 +30603,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -28852,7 +30644,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28875,7 +30667,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -28913,7 +30705,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -28942,7 +30734,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -28983,7 +30775,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29006,7 +30798,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29044,7 +30836,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29067,7 +30859,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29105,7 +30897,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29134,7 +30926,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29175,7 +30967,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29198,7 +30990,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29236,7 +31028,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29259,7 +31051,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29297,7 +31089,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29326,7 +31118,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29367,7 +31159,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29396,7 +31188,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29437,7 +31229,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29478,7 +31270,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29525,7 +31317,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29554,7 +31346,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29595,7 +31387,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29624,7 +31416,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29665,7 +31457,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29688,7 +31480,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29726,7 +31518,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29749,7 +31541,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29787,7 +31579,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29816,7 +31608,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29857,7 +31649,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29880,7 +31672,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29918,7 +31710,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -29947,7 +31739,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -29988,7 +31780,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -30011,7 +31803,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -30049,7 +31841,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -30078,7 +31870,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -30119,7 +31911,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -30148,7 +31940,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -30703,7 +32495,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:44) (firstTokenOffset:21) (offset:44)
@@ -30714,7 +32506,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -30738,7 +32530,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:36) (firstTokenOffset:17) (offset:36)
@@ -30749,7 +32541,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -30773,7 +32565,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:38) (firstTokenOffset:18) (offset:38)
@@ -30784,7 +32576,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -30808,7 +32600,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:46) (firstTokenOffset:22) (offset:46)
@@ -30819,7 +32611,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -30843,7 +32635,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:38) (firstTokenOffset:18) (offset:38)
@@ -30854,7 +32646,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -30878,7 +32670,7 @@
           element: <testLibrary>::@class::A
           nextFragment: #F2
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:40) (firstTokenOffset:19) (offset:40)
@@ -30889,7 +32681,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -30911,13 +32703,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class I (nameOffset:30) (firstTokenOffset:24) (offset:30)
           element: <testLibrary>::@class::I
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
   classes
@@ -30927,14 +32719,14 @@
       interfaces
         I
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class I
       reference: <testLibrary>::@class::I
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F4
 ''');
@@ -30956,7 +32748,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -30969,7 +32761,7 @@
       interfaces
         M
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   mixins
@@ -31003,7 +32795,7 @@
               element: #E0 T
               nextFragment: #F4
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F2 class A (nameOffset:39) (firstTokenOffset:25) (offset:39)
@@ -31022,7 +32814,7 @@
           firstFragment: #F3
           bound: A<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
 ''');
@@ -31049,7 +32841,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:20) (firstTokenOffset:14) (offset:20)
@@ -31060,7 +32852,7 @@
               element: #E1 T
               nextFragment: #F7
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class B (nameOffset:43) (firstTokenOffset:29) (offset:43)
@@ -31078,7 +32870,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -31089,7 +32881,7 @@
           firstFragment: #F6
       supertype: A<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           superConstructor: ConstructorMember
@@ -31119,20 +32911,20 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:28) (firstTokenOffset:22) (offset:28)
           element: <testLibrary>::@class::C
           nextFragment: #F6
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F6 class C (nameOffset:48) (firstTokenOffset:34) (offset:48)
@@ -31147,14 +32939,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
@@ -31162,7 +32954,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -31541,938 +33333,6 @@
   bool get keepLinkingLibraries => true;
 }
 
-abstract class ClassElementTest_declaringConstructors extends ClassElementTest {
-  test_primaryConstructor_const() async {
-    var library = await buildLibrary('''
-class const A(final int foo) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:12) (firstTokenOffset:0) (offset:12)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:6) (offset:12)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 12
-              formalParameters
-                #F4 requiredPositional final this.foo (nameOffset:24) (firstTokenOffset:14) (offset:24)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        const new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredPositional final this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_optionalNamed_functionTyped_final() async {
-    var library = await buildLibrary('''
-class A({final int foo()}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 optionalNamed final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int Function()
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 optionalNamed final this.foo
-              firstFragment: #F4
-              type: int Function()
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int Function()
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_optionalNamed_simple_final() async {
-    var library = await buildLibrary('''
-class A({final int foo}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 optionalNamed final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 optionalNamed final this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_optionalPositional_functionTyped_final() async {
-    var library = await buildLibrary('''
-class A([final int foo()]) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 optionalPositional final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int Function()
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 optionalPositional final this.foo
-              firstFragment: #F4
-              type: int Function()
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int Function()
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_optionalPositional_simple_final() async {
-    var library = await buildLibrary('''
-class A([final int foo]) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 optionalPositional final this.foo (nameOffset:19) (firstTokenOffset:9) (offset:19)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 optionalPositional final this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredNamed_functionTyped_final() async {
-    var library = await buildLibrary('''
-class A({required final int foo()}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredNamed final this.foo (nameOffset:28) (firstTokenOffset:9) (offset:28)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int Function()
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredNamed final this.foo
-              firstFragment: #F4
-              type: int Function()
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int Function()
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredNamed_simple_final() async {
-    var library = await buildLibrary('''
-class A({required final int foo}) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredNamed final this.foo (nameOffset:28) (firstTokenOffset:9) (offset:28)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredNamed final this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredPositional_functionTyped_final() async {
-    var library = await buildLibrary('''
-class A(final int foo()) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredPositional final this.foo (nameOffset:18) (firstTokenOffset:8) (offset:18)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int Function()
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredPositional final this.foo
-              firstFragment: #F4
-              type: int Function()
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int Function()
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredPositional_functionTyped_var() async {
-    var library = await buildLibrary('''
-class A(var int foo()) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredPositional final this.foo (nameOffset:16) (firstTokenOffset:8) (offset:16)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-          setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@setter::foo
-              formalParameters
-                #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-                  element: <testLibrary>::@class::A::@setter::foo::@formalParameter::value
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int Function()
-          getter: <testLibrary>::@class::A::@getter::foo
-          setter: <testLibrary>::@class::A::@setter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredPositional final this.foo
-              firstFragment: #F4
-              type: int Function()
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int Function()
-          variable: <testLibrary>::@class::A::@field::foo
-      setters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@setter::foo
-          firstFragment: #F6
-          formalParameters
-            #E1 requiredPositional value
-              firstFragment: #F7
-              type: int Function()
-          returnType: void
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredPositional_simple_final() async {
-    var library = await buildLibrary('''
-class A(final int foo) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredPositional final this.foo (nameOffset:18) (firstTokenOffset:8) (offset:18)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredPositional final this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredPositional_simple_var() async {
-    var library = await buildLibrary('''
-class A(var int foo) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredPositional final this.foo (nameOffset:16) (firstTokenOffset:8) (offset:16)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-          setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@setter::foo
-              formalParameters
-                #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-                  element: <testLibrary>::@class::A::@setter::foo::@formalParameter::value
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        synthetic foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-          setter: <testLibrary>::@class::A::@setter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredPositional final this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-      setters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@setter::foo
-          firstFragment: #F6
-          formalParameters
-            #E1 requiredPositional value
-              firstFragment: #F7
-              type: int
-          returnType: void
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_declaringFormalParameter_requiredPositional_type_typeParameter() async {
-    var library = await buildLibrary('''
-class A<T>(final T foo) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          typeParameters
-            #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
-              element: #E0 T
-          fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F5 requiredPositional final this.foo (nameOffset:19) (firstTokenOffset:11) (offset:19)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      typeParameters
-        #E0 T
-          firstFragment: #F2
-      fields
-        synthetic final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F3
-          hasEnclosingTypeParameterReference: true
-          type: T
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F4
-          formalParameters
-            #E1 requiredPositional final this.foo
-              firstFragment: #F5
-              type: T
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F6
-          hasEnclosingTypeParameterReference: true
-          returnType: T
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-
-  test_primaryConstructor_formalParameter_requiredPositional_functionTyped() async {
-    var library = await buildLibrary('''
-class A(int foo()) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F3 requiredPositional foo (nameOffset:12) (firstTokenOffset:8) (offset:12)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F2
-          formalParameters
-            #E0 requiredPositional foo
-              firstFragment: #F3
-              type: int Function()
-''');
-  }
-
-  test_primaryConstructor_formalParameter_requiredPositional_simple() async {
-    var library = await buildLibrary('''
-class A(int foo) {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F3 requiredPositional foo (nameOffset:12) (firstTokenOffset:8) (offset:12)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F2
-          formalParameters
-            #E0 requiredPositional foo
-              firstFragment: #F3
-              type: int
-''');
-  }
-
-  test_primaryConstructor_formalParameter_requiredPositional_super() async {
-    var library = await buildLibrary('''
-class A(int foo) {}
-class B(super.foo) extends A {}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F3 requiredPositional foo (nameOffset:12) (firstTokenOffset:8) (offset:12)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-        #F4 class B (nameOffset:26) (firstTokenOffset:20) (offset:26)
-          element: <testLibrary>::@class::B
-          constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:26) (offset:26)
-              element: <testLibrary>::@class::B::@constructor::new
-              typeName: B
-              typeNameOffset: 26
-              formalParameters
-                #F6 requiredPositional final super.foo (nameOffset:34) (firstTokenOffset:28) (offset:34)
-                  element: <testLibrary>::@class::B::@constructor::new::@formalParameter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F2
-          formalParameters
-            #E0 requiredPositional foo
-              firstFragment: #F3
-              type: int
-    class B
-      reference: <testLibrary>::@class::B
-      firstFragment: #F4
-      supertype: A
-      constructors
-        new
-          reference: <testLibrary>::@class::B::@constructor::new
-          firstFragment: #F5
-          formalParameters
-            #E1 requiredPositional final hasImplicitType super.foo
-              firstFragment: #F6
-              type: int
-              superConstructorParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          superConstructor: <testLibrary>::@class::A::@constructor::new
-''');
-  }
-
-  test_primaryConstructor_formalParameter_requiredPositional_this() async {
-    var library = await buildLibrary('''
-class A(this.foo) {
-  final int foo;
-}
-''');
-    checkElementText(library, r'''
-library
-  reference: <testLibrary>
-  fragments
-    #F0 <testLibraryFragment>
-      element: <testLibrary>
-      classes
-        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
-          element: <testLibrary>::@class::A
-          fields
-            #F2 foo (nameOffset:32) (firstTokenOffset:32) (offset:32)
-              element: <testLibrary>::@class::A::@field::foo
-          constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:6) (offset:6)
-              element: <testLibrary>::@class::A::@constructor::new
-              typeName: A
-              typeNameOffset: 6
-              formalParameters
-                #F4 requiredPositional final this.foo (nameOffset:13) (firstTokenOffset:8) (offset:13)
-                  element: <testLibrary>::@class::A::@constructor::new::@formalParameter::foo
-          getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
-              element: <testLibrary>::@class::A::@getter::foo
-  classes
-    class A
-      reference: <testLibrary>::@class::A
-      firstFragment: #F1
-      fields
-        final foo
-          reference: <testLibrary>::@class::A::@field::foo
-          firstFragment: #F2
-          type: int
-          getter: <testLibrary>::@class::A::@getter::foo
-      constructors
-        new
-          reference: <testLibrary>::@class::A::@constructor::new
-          firstFragment: #F3
-          formalParameters
-            #E0 requiredPositional final hasImplicitType this.foo
-              firstFragment: #F4
-              type: int
-              field: <testLibrary>::@class::A::@field::foo
-      getters
-        synthetic foo
-          reference: <testLibrary>::@class::A::@getter::foo
-          firstFragment: #F5
-          returnType: int
-          variable: <testLibrary>::@class::A::@field::foo
-''');
-  }
-}
-
-@reflectiveTest
-class ClassElementTest_declaringConstructors_fromBytes
-    extends ClassElementTest_declaringConstructors {
-  @override
-  bool get keepLinkingLibraries => false;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
-
-@reflectiveTest
-class ClassElementTest_declaringConstructors_keepLinking
-    extends ClassElementTest_declaringConstructors {
-  @override
-  bool get keepLinkingLibraries => true;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
-
 @reflectiveTest
 class ClassElementTest_fromBytes extends ClassElementTest {
   @override
diff --git a/pkg/analyzer/test/src/summary/elements/const_test.dart b/pkg/analyzer/test/src/summary/elements/const_test.dart
index e2ea69b..e4dc53a 100644
--- a/pkg/analyzer/test/src/summary/elements/const_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/const_test.dart
@@ -31,13 +31,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @14
               staticType: int
-        #F2 hasInitializer b (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             AsExpression
@@ -52,12 +52,12 @@
                 type: int
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: num
@@ -65,7 +65,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -74,12 +74,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: num
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
@@ -99,13 +99,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             ParenthesizedExpression
@@ -128,12 +128,12 @@
               rightParenthesis: ) @30
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -141,7 +141,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -150,12 +150,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
@@ -174,7 +174,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             CascadeExpression
@@ -202,10 +202,10 @@
                   staticType: int
               staticType: int
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -214,7 +214,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -239,13 +239,13 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f1 (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F2 hasInitializer isOriginDeclaration f1 (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::C::@field::f1
               initializer: expression_0
                 IntegerLiteral
                   literal: 1 @34
                   staticType: int
-            #F3 hasInitializer f2 (nameOffset:56) (firstTokenOffset:56) (offset:56)
+            #F3 hasInitializer isOriginDeclaration f2 (nameOffset:56) (firstTokenOffset:56) (offset:56)
               element: <testLibrary>::@class::C::@field::f2
               initializer: expression_1
                 PrefixedIdentifier
@@ -260,7 +260,7 @@
                     staticType: int
                   element: <testLibrary>::@class::C::@getter::f1
                   staticType: int
-            #F4 hasInitializer f3 (nameOffset:67) (firstTokenOffset:67) (offset:67)
+            #F4 hasInitializer isOriginDeclaration f3 (nameOffset:67) (firstTokenOffset:67) (offset:67)
               element: <testLibrary>::@class::C::@field::f3
               initializer: expression_2
                 PrefixedIdentifier
@@ -276,22 +276,22 @@
                   element: <testLibrary>::@class::C::@getter::f2
                   staticType: int
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F6 synthetic f1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F6 synthetic isOriginVariable f1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::C::@getter::f1
-            #F7 synthetic f2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F7 synthetic isOriginVariable f2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::C::@getter::f2
-            #F8 synthetic f3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F8 synthetic isOriginVariable f3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@class::C::@getter::f3
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer f1
+        static const hasInitializer isOriginDeclaration f1
           reference: <testLibrary>::@class::C::@field::f1
           firstFragment: #F2
           type: int
@@ -299,7 +299,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::f1
-        static const hasInitializer f2
+        static const hasInitializer isOriginDeclaration f2
           reference: <testLibrary>::@class::C::@field::f2
           firstFragment: #F3
           type: int
@@ -307,7 +307,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@class::C::@getter::f2
-        static const hasInitializer f3
+        static const hasInitializer isOriginDeclaration f3
           reference: <testLibrary>::@class::C::@field::f3
           firstFragment: #F4
           type: int
@@ -316,21 +316,21 @@
             expression: expression_2
           getter: <testLibrary>::@class::C::@getter::f3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static f1
+        synthetic static isOriginVariable f1
           reference: <testLibrary>::@class::C::@getter::f1
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::C::@field::f1
-        synthetic static f2
+        synthetic static isOriginVariable f2
           reference: <testLibrary>::@class::C::@getter::f2
           firstFragment: #F7
           returnType: int
           variable: <testLibrary>::@class::C::@field::f2
-        synthetic static f3
+        synthetic static isOriginVariable f3
           reference: <testLibrary>::@class::C::@getter::f3
           firstFragment: #F8
           returnType: int
@@ -361,17 +361,17 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 t (nameOffset:23) (firstTokenOffset:23) (offset:23)
+            #F3 isOriginDeclaration t (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::C::@field::t
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 34
               formalParameters
                 #F5 requiredPositional final this.t (nameOffset:41) (firstTokenOffset:36) (offset:41)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::t
-            #F6 const named (nameOffset:55) (firstTokenOffset:47) (offset:55)
+            #F6 const isOriginDeclaration named (nameOffset:55) (firstTokenOffset:47) (offset:55)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 53
@@ -380,10 +380,10 @@
                 #F7 requiredPositional final this.t (nameOffset:66) (firstTokenOffset:61) (offset:66)
                   element: <testLibrary>::@class::C::@constructor::named::@formalParameter::t
           getters
-            #F8 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F8 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@getter::t
       topLevelVariables
-        #F9 hasInitializer x (nameOffset:85) (firstTokenOffset:85) (offset:85)
+        #F9 hasInitializer isOriginDeclaration x (nameOffset:85) (firstTokenOffset:85) (offset:85)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             InstanceCreationExpression
@@ -404,7 +404,7 @@
                     staticType: int
                 rightParenthesis: ) @98
               staticType: C<int>
-        #F10 hasInitializer y (nameOffset:114) (firstTokenOffset:114) (offset:114)
+        #F10 hasInitializer isOriginDeclaration y (nameOffset:114) (firstTokenOffset:114) (offset:114)
           element: <testLibrary>::@topLevelVariable::y
           initializer: expression_1
             InstanceCreationExpression
@@ -433,9 +433,9 @@
                 rightParenthesis: ) @133
               staticType: C<int>
       getters
-        #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
+        #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
           element: <testLibrary>::@getter::x
-        #F12 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:114)
+        #F12 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:114)
           element: <testLibrary>::@getter::y
   classes
     class C
@@ -445,14 +445,14 @@
         #E0 T
           firstFragment: #F2
       fields
-        final t
+        final isOriginDeclaration t
           reference: <testLibrary>::@class::C::@field::t
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::C::@getter::t
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -460,7 +460,7 @@
               firstFragment: #F5
               type: T
               field: <testLibrary>::@class::C::@field::t
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F6
           formalParameters
@@ -469,14 +469,14 @@
               type: T
               field: <testLibrary>::@class::C::@field::t
       getters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::C::@getter::t
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::C::@field::t
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F9
       type: Object
@@ -484,7 +484,7 @@
         fragment: #F9
         expression: expression_0
       getter: <testLibrary>::@getter::x
-    const hasInitializer y
+    const hasInitializer isOriginDeclaration y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F10
       type: Object
@@ -493,12 +493,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::y
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F11
       returnType: Object
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@getter::y
       firstFragment: #F12
       returnType: Object
@@ -531,13 +531,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 12
               periodOffset: 13
       topLevelVariables
-        #F3 hasInitializer v (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F3 hasInitializer isOriginDeclaration v (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             ConstructorReference
@@ -554,18 +554,18 @@
                 element: <testLibrary>::@class::A::@constructor::named
               staticType: A Function()
       getters
-        #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::v
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F3
       type: A Function()
@@ -574,7 +574,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F4
       returnType: A Function()
@@ -600,12 +600,12 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:34) (firstTokenOffset:34) (offset:34)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:34) (firstTokenOffset:34) (offset:34)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             DotShorthandConstructorInvocation
@@ -621,18 +621,18 @@
               isDotShorthand: true
               staticType: A
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@getter::a
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: A
@@ -641,7 +641,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: A
@@ -667,12 +667,12 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:34) (firstTokenOffset:34) (offset:34)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:34) (firstTokenOffset:34) (offset:34)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             DotShorthandConstructorInvocation
@@ -687,18 +687,18 @@
               isDotShorthand: true
               staticType: A
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@getter::a
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: A
@@ -707,7 +707,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: A
@@ -733,14 +733,14 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
             #F3 method (nameOffset:21) (firstTokenOffset:12) (offset:21)
               element: <testLibrary>::@class::A::@method::method
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             DotShorthandInvocation
@@ -756,14 +756,14 @@
               staticInvokeType: A Function()
               staticType: A
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::a
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -772,7 +772,7 @@
           firstFragment: #F3
           returnType: A
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
       type: A
@@ -781,7 +781,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: A
@@ -808,7 +808,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer a (nameOffset:27) (firstTokenOffset:27) (offset:27)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::A::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -823,15 +823,15 @@
                     rightParenthesis: ) @33
                   staticType: A
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:38) (offset:44)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:38) (offset:44)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 44
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A::@getter::a
       topLevelVariables
-        #F5 hasInitializer a (nameOffset:60) (firstTokenOffset:60) (offset:60)
+        #F5 hasInitializer isOriginDeclaration a (nameOffset:60) (firstTokenOffset:60) (offset:60)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_1
             DotShorthandPropertyAccess
@@ -843,14 +843,14 @@
               isDotShorthand: true
               staticType: A
       getters
-        #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+        #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
           element: <testLibrary>::@getter::a
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static const hasInitializer a
+        static const hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
           type: A
@@ -859,17 +859,17 @@
             expression: expression_0
           getter: <testLibrary>::@class::A::@getter::a
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F4
           returnType: A
           variable: <testLibrary>::@class::A::@field::a
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F5
       type: A
@@ -878,7 +878,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F6
       returnType: A
@@ -903,26 +903,26 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::C::@field::f
               initializer: expression_0
                 IntegerLiteral
                   literal: 42 @26
                   staticType: int
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:32) (offset:38)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:32) (offset:38)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 38
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@getter::f
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer f
+        final hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
@@ -931,11 +931,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
@@ -956,7 +956,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:44) (firstTokenOffset:44) (offset:44)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:44) (firstTokenOffset:44) (offset:44)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             FunctionReference
@@ -968,7 +968,7 @@
               typeArgumentTypes
                 int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
           element: <testLibrary>::@getter::v
       functions
         #F3 f (nameOffset:5) (firstTokenOffset:0) (offset:5)
@@ -980,7 +980,7 @@
             #F5 requiredPositional a (nameOffset:12) (firstTokenOffset:10) (offset:12)
               element: <testLibrary>::@function::f::@formalParameter::a
   topLevelVariables
-    const hasInitializer v
+    const hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: void Function(int)
@@ -989,7 +989,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: void Function(int)
@@ -1021,7 +1021,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             FunctionReference
@@ -1041,7 +1041,7 @@
               typeArgumentTypes
                 int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::v
       functions
         #F3 f (nameOffset:5) (firstTokenOffset:0) (offset:5)
@@ -1053,7 +1053,7 @@
             #F5 requiredPositional a (nameOffset:12) (firstTokenOffset:10) (offset:12)
               element: <testLibrary>::@function::f::@formalParameter::a
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: void Function(int)
@@ -1062,7 +1062,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: void Function(int)
@@ -1095,7 +1095,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             ListLiteral
@@ -1106,13 +1106,13 @@
                   staticType: int
               rightBracket: ] @12
               staticType: List<int>
-        #F2 hasInitializer b (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             IntegerLiteral
               literal: 0 @25
               staticType: int
-        #F3 hasInitializer c (nameOffset:34) (firstTokenOffset:34) (offset:34)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:34) (firstTokenOffset:34) (offset:34)
           element: <testLibrary>::@topLevelVariable::c
           initializer: expression_2
             IndexExpression
@@ -1131,14 +1131,14 @@
                 substitution: {E: int}
               staticType: int
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::b
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@getter::c
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: List<int>
@@ -1146,7 +1146,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -1154,7 +1154,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::b
-    const hasInitializer c
+    const hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
       type: int
@@ -1163,17 +1163,17 @@
         expression: expression_2
       getter: <testLibrary>::@getter::c
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: int
@@ -1213,7 +1213,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::P::@constructor::new
               typeName: P
               typeNameOffset: 21
@@ -1223,7 +1223,7 @@
             #F5 T (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: #E1 T
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:58) (offset:64)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:58) (offset:64)
               element: <testLibrary>::@class::P1::@constructor::new
               typeName: P1
               typeNameOffset: 64
@@ -1233,12 +1233,12 @@
             #F8 T (nameOffset:82) (firstTokenOffset:82) (offset:82)
               element: #E2 T
           constructors
-            #F9 const new (nameOffset:<null>) (firstTokenOffset:102) (offset:108)
+            #F9 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:102) (offset:108)
               element: <testLibrary>::@class::P2::@constructor::new
               typeName: P2
               typeNameOffset: 108
       topLevelVariables
-        #F10 hasInitializer values (nameOffset:131) (firstTokenOffset:131) (offset:131)
+        #F10 hasInitializer isOriginDeclaration values (nameOffset:131) (firstTokenOffset:131) (offset:131)
           element: <testLibrary>::@topLevelVariable::values
           initializer: expression_0
             ListLiteral
@@ -1281,7 +1281,7 @@
               rightBracket: ] @163
               staticType: List<P<dynamic>>
       getters
-        #F11 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:131)
+        #F11 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:131)
           element: <testLibrary>::@getter::values
   classes
     class P
@@ -1291,7 +1291,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::P::@constructor::new
           firstFragment: #F3
     class P1
@@ -1302,7 +1302,7 @@
           firstFragment: #F5
       supertype: P<T>
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::P1::@constructor::new
           firstFragment: #F6
           superConstructor: ConstructorMember
@@ -1316,14 +1316,14 @@
           firstFragment: #F8
       supertype: P<T>
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::P2::@constructor::new
           firstFragment: #F9
           superConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::P::@constructor::new
             substitution: {T: T}
   topLevelVariables
-    const hasInitializer values
+    const hasInitializer isOriginDeclaration values
       reference: <testLibrary>::@topLevelVariable::values
       firstFragment: #F10
       type: List<P<dynamic>>
@@ -1332,7 +1332,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::values
   getters
-    synthetic static values
+    synthetic static isOriginVariable values
       reference: <testLibrary>::@getter::values
       firstFragment: #F11
       returnType: List<P<dynamic>>
@@ -1357,7 +1357,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::f
               initializer: expression_0
                 BinaryExpression
@@ -1379,11 +1379,11 @@
                   staticInvokeType: num Function(num)
                   staticType: int
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::f
       functions
         #F5 foo (nameOffset:46) (firstTokenOffset:42) (offset:46)
@@ -1393,7 +1393,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer f
+        static const hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
@@ -1402,11 +1402,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static f
+        synthetic static isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
@@ -1436,14 +1436,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::f
       functions
         #F5 foo (nameOffset:39) (firstTokenOffset:35) (offset:39)
@@ -1453,17 +1453,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer f
+        final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
@@ -1487,7 +1487,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             SimpleIdentifier
@@ -1495,10 +1495,10 @@
               element: <null>
               staticType: null
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int Function()
@@ -1507,7 +1507,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int Function()
@@ -1531,7 +1531,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:13) (offset:19)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:13) (offset:19)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 19
@@ -1540,7 +1540,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -1571,7 +1571,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:13) (offset:19)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:13) (offset:19)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 19
@@ -1580,7 +1580,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -1617,28 +1617,28 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F2 isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:33) (offset:39)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:33) (offset:39)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 39
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: Object?
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -1653,7 +1653,7 @@
                 element: <null>
                 staticType: null
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: Object?
@@ -1672,7 +1672,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             SimpleIdentifier
@@ -1680,10 +1680,10 @@
               element: <null>
               staticType: null
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: InvalidType
@@ -1692,7 +1692,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: InvalidType
@@ -1717,7 +1717,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -1726,7 +1726,7 @@
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::a
                 #F4 requiredPositional b (nameOffset:37) (firstTokenOffset:30) (offset:37)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::b
-            #F5 const named (nameOffset:51) (firstTokenOffset:43) (offset:51)
+            #F5 const isOriginDeclaration named (nameOffset:51) (firstTokenOffset:43) (offset:51)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 49
@@ -1736,7 +1736,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -1746,7 +1746,7 @@
             #E1 requiredPositional b
               firstFragment: #F4
               type: Object
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F5
           constantInitializers
@@ -1787,7 +1787,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -1799,7 +1799,7 @@
         #F5 class B (nameOffset:49) (firstTokenOffset:43) (offset:49)
           element: <testLibrary>::@class::B
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:65) (offset:71)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:65) (offset:71)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 71
@@ -1808,7 +1808,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -1823,7 +1823,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           constantInitializers
@@ -1866,7 +1866,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             MethodInvocation
@@ -1887,10 +1887,10 @@
               staticInvokeType: int Function(int)
               staticType: int
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -1899,7 +1899,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -1918,7 +1918,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             SimpleIdentifier
@@ -1926,10 +1926,10 @@
               element: <null>
               staticType: null
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: (int,)
@@ -1938,7 +1938,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: (int,)
@@ -1958,7 +1958,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             BinaryExpression
@@ -1980,13 +1980,13 @@
               staticInvokeType: num Function(num)
               staticType: int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
       functions
         #F3 foo (nameOffset:25) (firstTokenOffset:21) (offset:25)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
@@ -1995,7 +1995,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -2019,7 +2019,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             SimpleIdentifier
@@ -2027,10 +2027,10 @@
               element: <null>
               staticType: null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -2039,7 +2039,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -2059,13 +2059,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @14
               staticType: int
-        #F2 hasInitializer b (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             BinaryExpression
@@ -2081,12 +2081,12 @@
               staticInvokeType: num Function(num)
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -2094,7 +2094,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: bool
@@ -2103,12 +2103,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: bool
@@ -2138,7 +2138,7 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 const named (nameOffset:26) (firstTokenOffset:18) (offset:26)
+            #F4 const isOriginDeclaration named (nameOffset:26) (firstTokenOffset:18) (offset:26)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 24
@@ -2149,7 +2149,7 @@
                 #F6 requiredPositional v (nameOffset:39) (firstTokenOffset:37) (offset:39)
                   element: <testLibrary>::@class::C::@constructor::named::@formalParameter::v
       topLevelVariables
-        #F7 hasInitializer V (nameOffset:51) (firstTokenOffset:51) (offset:51)
+        #F7 hasInitializer isOriginDeclaration V (nameOffset:51) (firstTokenOffset:51) (offset:51)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2192,7 +2192,7 @@
                 rightParenthesis: ) @90
               staticType: C<int, String>
       getters
-        #F8 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+        #F8 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
           element: <testLibrary>::@getter::V
   classes
     class C
@@ -2204,7 +2204,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F4
           formalParameters
@@ -2215,7 +2215,7 @@
               firstFragment: #F6
               type: V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F7
       type: C<int, String>
@@ -2224,7 +2224,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F8
       returnType: C<int, String>
@@ -2251,7 +2251,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2294,10 +2294,10 @@
                 rightParenthesis: ) @62
               staticType: C<int, String>
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C<int, String>
@@ -2306,7 +2306,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C<int, String>
@@ -2336,7 +2336,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2383,10 +2383,10 @@
                 rightParenthesis: ) @69
               staticType: C<int, String>
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C<int, String>
@@ -2395,7 +2395,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C<int, String>
@@ -2425,12 +2425,12 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:18) (offset:24)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:18) (offset:24)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 24
       topLevelVariables
-        #F5 hasInitializer V (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F5 hasInitializer isOriginDeclaration V (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2448,7 +2448,7 @@
                 rightParenthesis: ) @49
               staticType: C<dynamic, dynamic>
       getters
-        #F6 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F6 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::V
   classes
     class C
@@ -2460,11 +2460,11 @@
         #E1 V
           firstFragment: #F3
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F5
       type: C<dynamic, dynamic>
@@ -2473,7 +2473,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F6
       returnType: C<dynamic, dynamic>
@@ -2502,10 +2502,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 t (nameOffset:23) (firstTokenOffset:23) (offset:23)
+            #F3 isOriginDeclaration t (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::A::@field::t
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:34)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 34
@@ -2513,10 +2513,10 @@
                 #F5 requiredPositional final this.t (nameOffset:41) (firstTokenOffset:36) (offset:41)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::t
           getters
-            #F6 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F6 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@getter::t
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:60) (firstTokenOffset:60) (offset:60)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:60) (firstTokenOffset:60) (offset:60)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             InstanceCreationExpression
@@ -2538,7 +2538,7 @@
                 rightParenthesis: ) @73
               staticType: A<int>
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
           element: <testLibrary>::@getter::a
   classes
     class A
@@ -2548,14 +2548,14 @@
         #E0 T
           firstFragment: #F2
       fields
-        final t
+        final isOriginDeclaration t
           reference: <testLibrary>::@class::A::@field::t
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::A::@getter::t
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -2564,14 +2564,14 @@
               type: T
               field: <testLibrary>::@class::A::@field::t
       getters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::A::@getter::t
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::A::@field::t
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: Object
@@ -2580,7 +2580,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: Object
@@ -2610,12 +2610,12 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:18) (offset:24)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:18) (offset:24)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 24
       topLevelVariables
-        #F5 hasInitializer V (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F5 hasInitializer isOriginDeclaration V (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2645,7 +2645,7 @@
                 rightParenthesis: ) @62
               staticType: C<int, String>
       getters
-        #F6 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F6 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::V
   classes
     class C
@@ -2657,11 +2657,11 @@
         #E1 V
           firstFragment: #F3
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F5
       type: C<int, String>
@@ -2670,7 +2670,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F6
       returnType: C<int, String>
@@ -2697,7 +2697,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2727,10 +2727,10 @@
                 rightParenthesis: ) @48
               staticType: C<int, String>
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C<int, String>
@@ -2739,7 +2739,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C<int, String>
@@ -2769,7 +2769,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2803,10 +2803,10 @@
                 rightParenthesis: ) @55
               staticType: C<int, String>
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C<int, String>
@@ -2815,7 +2815,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C<int, String>
@@ -2840,7 +2840,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const named (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration named (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 18
@@ -2857,7 +2857,7 @@
                 #F7 optionalNamed e (nameOffset:66) (firstTokenOffset:59) (offset:66)
                   element: <testLibrary>::@class::C::@constructor::named::@formalParameter::e
       topLevelVariables
-        #F8 hasInitializer V (nameOffset:79) (firstTokenOffset:79) (offset:79)
+        #F8 hasInitializer isOriginDeclaration V (nameOffset:79) (firstTokenOffset:79) (offset:79)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2907,14 +2907,14 @@
                 rightParenthesis: ) @125
               staticType: C
       getters
-        #F9 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
+        #F9 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
           element: <testLibrary>::@getter::V
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F2
           formalParameters
@@ -2934,7 +2934,7 @@
               firstFragment: #F7
               type: double
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F8
       type: C
@@ -2943,7 +2943,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F9
       returnType: C
@@ -2970,7 +2970,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -2991,10 +2991,10 @@
                 rightParenthesis: ) @41
               staticType: C
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C
@@ -3003,7 +3003,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C
@@ -3033,7 +3033,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3058,10 +3058,10 @@
                 rightParenthesis: ) @48
               staticType: C
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C
@@ -3070,7 +3070,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C
@@ -3093,11 +3093,11 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F3 hasInitializer V (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F3 hasInitializer isOriginDeclaration V (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3118,18 +3118,18 @@
                 rightParenthesis: ) @35
               staticType: C
       getters
-        #F4 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F4 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::V
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F3
       type: C
@@ -3138,7 +3138,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F4
       returnType: C
@@ -3157,7 +3157,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3177,10 +3177,10 @@
                 rightParenthesis: ) @24
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -3189,7 +3189,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -3218,7 +3218,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3243,10 +3243,10 @@
                 rightParenthesis: ) @48
               staticType: C
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C
@@ -3255,7 +3255,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C
@@ -3281,7 +3281,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3306,10 +3306,10 @@
                 rightParenthesis: ) @48
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -3318,7 +3318,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -3337,7 +3337,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3362,10 +3362,10 @@
                 rightParenthesis: ) @26
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -3374,7 +3374,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -3400,11 +3400,11 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F4 hasInitializer V (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F4 hasInitializer isOriginDeclaration V (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3425,7 +3425,7 @@
                 rightParenthesis: ) @38
               staticType: C<dynamic>
       getters
-        #F5 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F5 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::V
   classes
     class C
@@ -3435,11 +3435,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F4
       type: C<dynamic>
@@ -3448,7 +3448,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F5
       returnType: C<dynamic>
@@ -3473,12 +3473,12 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 18
       topLevelVariables
-        #F3 hasInitializer V (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F3 hasInitializer isOriginDeclaration V (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3494,18 +3494,18 @@
                 rightParenthesis: ) @43
               staticType: C
       getters
-        #F4 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F4 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::V
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F3
       type: C
@@ -3514,7 +3514,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F4
       returnType: C
@@ -3541,7 +3541,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3557,10 +3557,10 @@
                 rightParenthesis: ) @35
               staticType: C
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C
@@ -3569,7 +3569,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C
@@ -3599,7 +3599,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3619,10 +3619,10 @@
                 rightParenthesis: ) @42
               staticType: C
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: C
@@ -3631,7 +3631,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: C
@@ -3650,7 +3650,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3666,10 +3666,10 @@
                 rightParenthesis: ) @18
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -3678,7 +3678,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -3704,7 +3704,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3724,10 +3724,10 @@
                 rightParenthesis: ) @42
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -3736,7 +3736,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -3755,7 +3755,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             InstanceCreationExpression
@@ -3775,10 +3775,10 @@
                 rightParenthesis: ) @20
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -3787,7 +3787,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -3807,13 +3807,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             IsExpression
@@ -3828,12 +3828,12 @@
                 type: int
               staticType: bool
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -3841,7 +3841,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: bool
@@ -3850,12 +3850,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: bool
@@ -3880,20 +3880,20 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer F (nameOffset:32) (firstTokenOffset:32) (offset:32)
+            #F2 hasInitializer isOriginDeclaration F (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: <testLibrary>::@class::C::@field::F
               initializer: expression_0
                 SimpleStringLiteral
                   literal: '' @36
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic F (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F4 synthetic isOriginVariable F (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@getter::F
       topLevelVariables
-        #F5 hasInitializer v (nameOffset:52) (firstTokenOffset:52) (offset:52)
+        #F5 hasInitializer isOriginDeclaration v (nameOffset:52) (firstTokenOffset:52) (offset:52)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_1
             PropertyAccess
@@ -3916,14 +3916,14 @@
                 staticType: int
               staticType: int
       getters
-        #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@getter::v
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer F
+        static const hasInitializer isOriginDeclaration F
           reference: <testLibrary>::@class::C::@field::F
           firstFragment: #F2
           type: String
@@ -3932,17 +3932,17 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::F
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static F
+        synthetic static isOriginVariable F
           reference: <testLibrary>::@class::C::@getter::F
           firstFragment: #F4
           returnType: String
           variable: <testLibrary>::@class::C::@field::F
   topLevelVariables
-    const hasInitializer v
+    const hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F5
       type: int
@@ -3951,7 +3951,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F6
       returnType: int
@@ -3978,7 +3978,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:27) (firstTokenOffset:27) (offset:27)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:27) (firstTokenOffset:27) (offset:27)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             PropertyAccess
@@ -4001,10 +4001,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
@@ -4013,7 +4013,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -4043,7 +4043,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             PropertyAccess
@@ -4073,10 +4073,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
@@ -4085,7 +4085,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -4104,7 +4104,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             PropertyAccess
@@ -4117,10 +4117,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
@@ -4129,7 +4129,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -4149,12 +4149,12 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer S (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration S (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::S
           initializer: expression_0
             SimpleStringLiteral
               literal: 'abc' @17
-        #F2 hasInitializer v (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F2 hasInitializer isOriginDeclaration v (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_1
             PrefixedIdentifier
@@ -4170,12 +4170,12 @@
               element: dart:core::@class::String::@getter::length
               staticType: int
       getters
-        #F3 synthetic S (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F3 synthetic isOriginVariable S (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::S
-        #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer S
+    const hasInitializer isOriginDeclaration S
       reference: <testLibrary>::@topLevelVariable::S
       firstFragment: #F1
       type: String
@@ -4183,7 +4183,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::S
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F2
       type: int
@@ -4192,12 +4192,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static S
+    synthetic static isOriginVariable S
       reference: <testLibrary>::@getter::S
       firstFragment: #F3
       returnType: String
       variable: <testLibrary>::@topLevelVariable::S
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F4
       returnType: int
@@ -4222,7 +4222,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             PrefixedIdentifier
@@ -4238,10 +4238,10 @@
               element: dart:core::@class::String::@getter::length
               staticType: int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
@@ -4250,7 +4250,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -4278,7 +4278,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             PropertyAccess
@@ -4301,10 +4301,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
@@ -4313,7 +4313,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -4338,14 +4338,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
             #F3 length (nameOffset:23) (firstTokenOffset:12) (offset:23)
               element: <testLibrary>::@class::C::@method::length
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:47) (firstTokenOffset:47) (offset:47)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:47) (firstTokenOffset:47) (offset:47)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             PrefixedIdentifier
@@ -4361,14 +4361,14 @@
               element: <testLibrary>::@class::C::@method::length
               staticType: int Function()
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@getter::v
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -4377,7 +4377,7 @@
           firstFragment: #F3
           returnType: int
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       type: int Function()
@@ -4386,7 +4386,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: int Function()
@@ -4405,7 +4405,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             ListLiteral
@@ -4433,10 +4433,10 @@
               rightBracket: ] @40
               staticType: List<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4445,7 +4445,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4464,7 +4464,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             ListLiteral
@@ -4496,10 +4496,10 @@
               rightBracket: ] @47
               staticType: List<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4508,7 +4508,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4530,7 +4530,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             ListLiteral
@@ -4543,10 +4543,10 @@
               rightBracket: ] @25
               staticType: List<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4555,7 +4555,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4574,7 +4574,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             ListLiteral
@@ -4610,10 +4610,10 @@
               rightBracket: ] @40
               staticType: List<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4622,7 +4622,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4641,7 +4641,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             ListLiteral
@@ -4677,10 +4677,10 @@
               rightBracket: ] @41
               staticType: List<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4689,7 +4689,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4708,7 +4708,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -4746,10 +4746,10 @@
               isMap: true
               staticType: Map<int, int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4758,7 +4758,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4780,7 +4780,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -4799,10 +4799,10 @@
               isMap: true
               staticType: Map<int, double>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4811,7 +4811,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4830,7 +4830,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -4881,10 +4881,10 @@
               isMap: true
               staticType: Map<int, int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4893,7 +4893,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4912,7 +4912,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -4963,10 +4963,10 @@
               isMap: true
               staticType: Map<int, int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -4975,7 +4975,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -4995,7 +4995,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer b (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F1 hasInitializer isOriginDeclaration b (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_0
             MethodInvocation
@@ -5023,7 +5023,7 @@
               typeArgumentTypes
                 int
       getters
-        #F2 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F2 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::b
       functions
         #F3 f (nameOffset:2) (firstTokenOffset:0) (offset:2)
@@ -5035,7 +5035,7 @@
             #F5 requiredPositional a (nameOffset:9) (firstTokenOffset:7) (offset:9)
               element: <testLibrary>::@function::f::@formalParameter::a
   topLevelVariables
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F1
       type: int
@@ -5044,7 +5044,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F2
       returnType: int
@@ -5082,10 +5082,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
@@ -5098,7 +5098,7 @@
                       element: <testLibrary>::@function::foo
                       staticType: int Function()
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
       functions
         #F6 foo (nameOffset:53) (firstTokenOffset:49) (offset:53)
@@ -5108,13 +5108,13 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -5126,7 +5126,7 @@
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
@@ -5156,10 +5156,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
@@ -5179,20 +5179,20 @@
                       staticInvokeType: num Function(num)
                       staticType: int
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -5204,7 +5204,7 @@
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
@@ -5229,10 +5229,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:23) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
@@ -5252,20 +5252,20 @@
                       staticInvokeType: num Function(num)
                       staticType: int
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -5277,7 +5277,7 @@
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
@@ -5306,7 +5306,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const positional (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration positional (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::positional
               typeName: C
               typeNameOffset: 18
@@ -5326,7 +5326,7 @@
                       element: dart:core::@class::num::@method::+
                       staticInvokeType: num Function(num)
                       staticType: int
-            #F4 const named (nameOffset:55) (firstTokenOffset:47) (offset:55)
+            #F4 const isOriginDeclaration named (nameOffset:55) (firstTokenOffset:47) (offset:55)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 53
@@ -5396,7 +5396,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const positional
+        const isOriginDeclaration positional
           reference: <testLibrary>::@class::C::@constructor::positional
           firstFragment: #F2
           formalParameters
@@ -5406,7 +5406,7 @@
               constantInitializer
                 fragment: #F3
                 expression: expression_0
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F4
           formalParameters
@@ -5470,13 +5470,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             PostfixExpression
@@ -5492,12 +5492,12 @@
               element: dart:core::@class::num::@method::+
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -5505,7 +5505,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -5514,12 +5514,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
@@ -5539,13 +5539,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:11) (firstTokenOffset:11) (offset:11)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:11) (firstTokenOffset:11) (offset:11)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @15
               staticType: int
-        #F2 hasInitializer b (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             PostfixExpression
@@ -5557,12 +5557,12 @@
               element: <null>
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int?
@@ -5570,7 +5570,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -5579,12 +5579,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int?
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
@@ -5604,13 +5604,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             PrefixExpression
@@ -5622,12 +5622,12 @@
               element: dart:core::@class::int::@method::unary-
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -5635,7 +5635,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -5644,12 +5644,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
@@ -5677,7 +5677,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer b (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration b (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_0
             PrefixExpression
@@ -5689,10 +5689,10 @@
               element: package:test/a.dart::@extension::E::@method::unary-
               staticType: int
       getters
-        #F2 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F1
       type: int
@@ -5701,7 +5701,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F2
       returnType: int
@@ -5721,13 +5721,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             PrefixExpression
@@ -5743,12 +5743,12 @@
               element: dart:core::@class::num::@method::+
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -5756,7 +5756,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
@@ -5765,12 +5765,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
@@ -5790,13 +5790,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             RecordLiteral
@@ -5820,12 +5820,12 @@
               rightParenthesis: ) @31
               staticType: (int, {int a})
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -5833,7 +5833,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: (int, {int a})
@@ -5842,12 +5842,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: (int, {int a})
@@ -5867,13 +5867,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             RecordLiteral
@@ -5898,12 +5898,12 @@
               rightParenthesis: ) @37
               staticType: (int, {int a})
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -5911,7 +5911,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: (int, {int a})
@@ -5920,12 +5920,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: (int, {int a})
@@ -5950,21 +5950,21 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer F (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F2 hasInitializer isOriginDeclaration F (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::C::@field::F
               initializer: expression_0
                 IntegerLiteral
                   literal: 42 @33
                   staticType: int
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic F (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F4 synthetic isOriginVariable F (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::C::@getter::F
       topLevelVariables
-        #F5 hasInitializer V (nameOffset:45) (firstTokenOffset:45) (offset:45)
+        #F5 hasInitializer isOriginDeclaration V (nameOffset:45) (firstTokenOffset:45) (offset:45)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_1
             PrefixedIdentifier
@@ -5980,14 +5980,14 @@
               element: <testLibrary>::@class::C::@getter::F
               staticType: int
       getters
-        #F6 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+        #F6 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
           element: <testLibrary>::@getter::V
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer F
+        static const hasInitializer isOriginDeclaration F
           reference: <testLibrary>::@class::C::@field::F
           firstFragment: #F2
           type: int
@@ -5996,17 +5996,17 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::F
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static F
+        synthetic static isOriginVariable F
           reference: <testLibrary>::@class::C::@getter::F
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::F
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F5
       type: int
@@ -6015,7 +6015,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F6
       returnType: int
@@ -6042,7 +6042,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PrefixedIdentifier
@@ -6058,10 +6058,10 @@
               element: package:test/a.dart::@class::C::@getter::F
               staticType: int
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: int
@@ -6070,7 +6070,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: int
@@ -6100,7 +6100,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PropertyAccess
@@ -6123,10 +6123,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: int
@@ -6135,7 +6135,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: int
@@ -6160,7 +6160,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -6172,7 +6172,7 @@
                 #F5 requiredPositional b (nameOffset:39) (firstTokenOffset:32) (offset:39)
                   element: <testLibrary>::@class::C::@method::m::@formalParameter::b
       topLevelVariables
-        #F6 hasInitializer V (nameOffset:57) (firstTokenOffset:57) (offset:57)
+        #F6 hasInitializer isOriginDeclaration V (nameOffset:57) (firstTokenOffset:57) (offset:57)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PrefixedIdentifier
@@ -6188,14 +6188,14 @@
               element: <testLibrary>::@class::C::@method::m
               staticType: int Function(int, String)
       getters
-        #F7 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+        #F7 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
           element: <testLibrary>::@getter::V
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -6211,7 +6211,7 @@
               type: String
           returnType: int
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F6
       type: int Function(int, String)
@@ -6220,7 +6220,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F7
       returnType: int Function(int, String)
@@ -6247,7 +6247,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PrefixedIdentifier
@@ -6263,10 +6263,10 @@
               element: package:test/a.dart::@class::C::@method::m
               staticType: int Function(int, String)
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: int Function(int, String)
@@ -6275,7 +6275,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: int Function(int, String)
@@ -6305,7 +6305,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PropertyAccess
@@ -6328,10 +6328,10 @@
                 staticType: int Function(int, String)
               staticType: int Function(int, String)
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: int Function(int, String)
@@ -6340,7 +6340,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: int Function(int, String)
@@ -6366,7 +6366,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       extensions
@@ -6376,7 +6376,7 @@
             #F4 f (nameOffset:44) (firstTokenOffset:32) (offset:44)
               element: <testLibrary>::@extension::E::@method::f
       topLevelVariables
-        #F5 hasInitializer x (nameOffset:59) (firstTokenOffset:59) (offset:59)
+        #F5 hasInitializer isOriginDeclaration x (nameOffset:59) (firstTokenOffset:59) (offset:59)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             PrefixedIdentifier
@@ -6392,14 +6392,14 @@
               element: <testLibrary>::@extension::E::@method::f
               staticType: void Function()
       getters
-        #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@getter::x
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   extensions
@@ -6414,7 +6414,7 @@
           firstFragment: #F4
           returnType: void
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F5
       type: void Function()
@@ -6423,7 +6423,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F6
       returnType: void Function()
@@ -6443,7 +6443,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             SimpleIdentifier
@@ -6451,13 +6451,13 @@
               element: <testLibrary>::@function::foo
               staticType: dynamic Function()
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::V
       functions
         #F3 foo (nameOffset:0) (firstTokenOffset:0) (offset:0)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: dynamic Function()
@@ -6466,7 +6466,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: dynamic Function()
@@ -6491,7 +6491,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             SimpleIdentifier
@@ -6499,7 +6499,7 @@
               element: <testLibrary>::@function::foo
               staticType: R Function<P, R>(P)
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::V
       functions
         #F3 foo (nameOffset:2) (firstTokenOffset:0) (offset:2)
@@ -6513,7 +6513,7 @@
             #F6 requiredPositional p (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@function::foo::@formalParameter::p
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: R Function<P, R>(P)
@@ -6522,7 +6522,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: R Function<P, R>(P)
@@ -6561,7 +6561,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             SimpleIdentifier
@@ -6569,10 +6569,10 @@
               element: package:test/a.dart::@function::foo
               staticType: dynamic Function()
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: dynamic Function()
@@ -6581,7 +6581,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: dynamic Function()
@@ -6609,7 +6609,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PrefixedIdentifier
@@ -6625,10 +6625,10 @@
               element: package:test/a.dart::@function::foo
               staticType: dynamic Function()
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: dynamic Function()
@@ -6637,7 +6637,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: dynamic Function()
@@ -6657,13 +6657,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer A (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration A (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::A
           initializer: expression_0
             IntegerLiteral
               literal: 1 @10
               staticType: int
-        #F2 hasInitializer B (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration B (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::B
           initializer: expression_1
             BinaryExpression
@@ -6679,12 +6679,12 @@
               staticInvokeType: num Function(num)
               staticType: int
       getters
-        #F3 synthetic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::A
-        #F4 synthetic B (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable B (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::B
   topLevelVariables
-    const hasInitializer A
+    const hasImplicitType hasInitializer isOriginDeclaration A
       reference: <testLibrary>::@topLevelVariable::A
       firstFragment: #F1
       type: int
@@ -6692,7 +6692,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::A
-    const hasInitializer B
+    const hasImplicitType hasInitializer isOriginDeclaration B
       reference: <testLibrary>::@topLevelVariable::B
       firstFragment: #F2
       type: int
@@ -6701,12 +6701,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::B
   getters
-    synthetic static A
+    synthetic static isOriginVariable A
       reference: <testLibrary>::@getter::A
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::A
-    synthetic static B
+    synthetic static isOriginVariable B
       reference: <testLibrary>::@getter::B
       firstFragment: #F4
       returnType: int
@@ -6731,7 +6731,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer B (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration B (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::B
           initializer: expression_0
             BinaryExpression
@@ -6747,10 +6747,10 @@
               staticInvokeType: num Function(num)
               staticType: int
       getters
-        #F2 synthetic B (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable B (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::B
   topLevelVariables
-    const hasInitializer B
+    const hasImplicitType hasInitializer isOriginDeclaration B
       reference: <testLibrary>::@topLevelVariable::B
       firstFragment: #F1
       type: int
@@ -6759,7 +6759,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::B
   getters
-    synthetic static B
+    synthetic static isOriginVariable B
       reference: <testLibrary>::@getter::B
       firstFragment: #F2
       returnType: int
@@ -6787,7 +6787,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer B (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration B (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::B
           initializer: expression_0
             BinaryExpression
@@ -6811,10 +6811,10 @@
               staticInvokeType: num Function(num)
               staticType: int
       getters
-        #F2 synthetic B (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable B (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::B
   topLevelVariables
-    const hasInitializer B
+    const hasImplicitType hasInitializer isOriginDeclaration B
       reference: <testLibrary>::@topLevelVariable::B
       firstFragment: #F1
       type: int
@@ -6823,7 +6823,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::B
   getters
-    synthetic static B
+    synthetic static isOriginVariable B
       reference: <testLibrary>::@getter::B
       firstFragment: #F2
       returnType: int
@@ -6855,7 +6855,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:17) (firstTokenOffset:11) (offset:17)
@@ -6864,14 +6864,14 @@
             #F4 T (nameOffset:19) (firstTokenOffset:19) (offset:19)
               element: #E0 T
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       enums
         #F6 enum E (nameOffset:30) (firstTokenOffset:25) (offset:30)
           element: <testLibrary>::@enum::E
           fields
-            #F7 hasInitializer a (nameOffset:33) (firstTokenOffset:33) (offset:33)
+            #F7 hasInitializer isOriginDeclaration a (nameOffset:33) (firstTokenOffset:33) (offset:33)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -6885,7 +6885,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F8 hasInitializer b (nameOffset:36) (firstTokenOffset:36) (offset:36)
+            #F8 hasInitializer isOriginDeclaration b (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -6899,7 +6899,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F9 hasInitializer c (nameOffset:39) (firstTokenOffset:39) (offset:39)
+            #F9 hasInitializer isOriginDeclaration c (nameOffset:39) (firstTokenOffset:39) (offset:39)
               element: <testLibrary>::@enum::E::@field::c
               initializer: expression_2
                 InstanceCreationExpression
@@ -6913,7 +6913,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F10 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -6934,65 +6934,65 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F11 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F11 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F12 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F12 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@enum::E::@getter::a
-            #F13 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F13 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@enum::E::@getter::b
-            #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@enum::E::@getter::c
-            #F15 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F15 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@enum::E::@getter::values
       typeAliases
         #F16 F (nameOffset:50) (firstTokenOffset:42) (offset:50)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F17 hasInitializer vDynamic (nameOffset:76) (firstTokenOffset:76) (offset:76)
+        #F17 hasInitializer isOriginDeclaration vDynamic (nameOffset:76) (firstTokenOffset:76) (offset:76)
           element: <testLibrary>::@topLevelVariable::vDynamic
           initializer: expression_4
             SimpleIdentifier
               token: dynamic @87
               element: dynamic
               staticType: Type
-        #F18 hasInitializer vNull (nameOffset:102) (firstTokenOffset:102) (offset:102)
+        #F18 hasInitializer isOriginDeclaration vNull (nameOffset:102) (firstTokenOffset:102) (offset:102)
           element: <testLibrary>::@topLevelVariable::vNull
           initializer: expression_5
             SimpleIdentifier
               token: Null @110
               element: dart:core::@class::Null
               staticType: Type
-        #F19 hasInitializer vObject (nameOffset:122) (firstTokenOffset:122) (offset:122)
+        #F19 hasInitializer isOriginDeclaration vObject (nameOffset:122) (firstTokenOffset:122) (offset:122)
           element: <testLibrary>::@topLevelVariable::vObject
           initializer: expression_6
             SimpleIdentifier
               token: Object @132
               element: dart:core::@class::Object
               staticType: Type
-        #F20 hasInitializer vClass (nameOffset:146) (firstTokenOffset:146) (offset:146)
+        #F20 hasInitializer isOriginDeclaration vClass (nameOffset:146) (firstTokenOffset:146) (offset:146)
           element: <testLibrary>::@topLevelVariable::vClass
           initializer: expression_7
             SimpleIdentifier
               token: C @155
               element: <testLibrary>::@class::C
               staticType: Type
-        #F21 hasInitializer vGenericClass (nameOffset:164) (firstTokenOffset:164) (offset:164)
+        #F21 hasInitializer isOriginDeclaration vGenericClass (nameOffset:164) (firstTokenOffset:164) (offset:164)
           element: <testLibrary>::@topLevelVariable::vGenericClass
           initializer: expression_8
             SimpleIdentifier
               token: D @180
               element: <testLibrary>::@class::D
               staticType: Type
-        #F22 hasInitializer vEnum (nameOffset:189) (firstTokenOffset:189) (offset:189)
+        #F22 hasInitializer isOriginDeclaration vEnum (nameOffset:189) (firstTokenOffset:189) (offset:189)
           element: <testLibrary>::@topLevelVariable::vEnum
           initializer: expression_9
             SimpleIdentifier
               token: E @197
               element: <testLibrary>::@enum::E
               staticType: Type
-        #F23 hasInitializer vFunctionTypeAlias (nameOffset:206) (firstTokenOffset:206) (offset:206)
+        #F23 hasInitializer isOriginDeclaration vFunctionTypeAlias (nameOffset:206) (firstTokenOffset:206) (offset:206)
           element: <testLibrary>::@topLevelVariable::vFunctionTypeAlias
           initializer: expression_10
             SimpleIdentifier
@@ -7000,26 +7000,26 @@
               element: <testLibrary>::@typeAlias::F
               staticType: Type
       getters
-        #F24 synthetic vDynamic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+        #F24 synthetic isOriginVariable vDynamic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
           element: <testLibrary>::@getter::vDynamic
-        #F25 synthetic vNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:102)
+        #F25 synthetic isOriginVariable vNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:102)
           element: <testLibrary>::@getter::vNull
-        #F26 synthetic vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+        #F26 synthetic isOriginVariable vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
           element: <testLibrary>::@getter::vObject
-        #F27 synthetic vClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:146)
+        #F27 synthetic isOriginVariable vClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:146)
           element: <testLibrary>::@getter::vClass
-        #F28 synthetic vGenericClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:164)
+        #F28 synthetic isOriginVariable vGenericClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:164)
           element: <testLibrary>::@getter::vGenericClass
-        #F29 synthetic vEnum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:189)
+        #F29 synthetic isOriginVariable vEnum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:189)
           element: <testLibrary>::@getter::vEnum
-        #F30 synthetic vFunctionTypeAlias (nameOffset:<null>) (firstTokenOffset:<null>) (offset:206)
+        #F30 synthetic isOriginVariable vFunctionTypeAlias (nameOffset:<null>) (firstTokenOffset:<null>) (offset:206)
           element: <testLibrary>::@getter::vFunctionTypeAlias
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class D
@@ -7029,7 +7029,7 @@
         #E0 T
           firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
   enums
@@ -7038,7 +7038,7 @@
       firstFragment: #F6
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F7
           type: E
@@ -7046,7 +7046,7 @@
             fragment: #F7
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F8
           type: E
@@ -7054,7 +7054,7 @@
             fragment: #F8
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        static const enumConstant hasInitializer c
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@enum::E::@field::c
           firstFragment: #F9
           type: E
@@ -7062,7 +7062,7 @@
             fragment: #F9
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::c
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F10
           type: List<E>
@@ -7071,26 +7071,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F11
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F12
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F13
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static c
+        synthetic static isOriginVariable c
           reference: <testLibrary>::@enum::E::@getter::c
           firstFragment: #F14
           returnType: E
           variable: <testLibrary>::@enum::E::@field::c
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F15
           returnType: List<E>
@@ -7101,7 +7101,7 @@
       firstFragment: #F16
       aliasedType: dynamic Function(int, String)
   topLevelVariables
-    const hasInitializer vDynamic
+    const hasImplicitType hasInitializer isOriginDeclaration vDynamic
       reference: <testLibrary>::@topLevelVariable::vDynamic
       firstFragment: #F17
       type: Type
@@ -7109,7 +7109,7 @@
         fragment: #F17
         expression: expression_4
       getter: <testLibrary>::@getter::vDynamic
-    const hasInitializer vNull
+    const hasImplicitType hasInitializer isOriginDeclaration vNull
       reference: <testLibrary>::@topLevelVariable::vNull
       firstFragment: #F18
       type: Type
@@ -7117,7 +7117,7 @@
         fragment: #F18
         expression: expression_5
       getter: <testLibrary>::@getter::vNull
-    const hasInitializer vObject
+    const hasImplicitType hasInitializer isOriginDeclaration vObject
       reference: <testLibrary>::@topLevelVariable::vObject
       firstFragment: #F19
       type: Type
@@ -7125,7 +7125,7 @@
         fragment: #F19
         expression: expression_6
       getter: <testLibrary>::@getter::vObject
-    const hasInitializer vClass
+    const hasImplicitType hasInitializer isOriginDeclaration vClass
       reference: <testLibrary>::@topLevelVariable::vClass
       firstFragment: #F20
       type: Type
@@ -7133,7 +7133,7 @@
         fragment: #F20
         expression: expression_7
       getter: <testLibrary>::@getter::vClass
-    const hasInitializer vGenericClass
+    const hasImplicitType hasInitializer isOriginDeclaration vGenericClass
       reference: <testLibrary>::@topLevelVariable::vGenericClass
       firstFragment: #F21
       type: Type
@@ -7141,7 +7141,7 @@
         fragment: #F21
         expression: expression_8
       getter: <testLibrary>::@getter::vGenericClass
-    const hasInitializer vEnum
+    const hasImplicitType hasInitializer isOriginDeclaration vEnum
       reference: <testLibrary>::@topLevelVariable::vEnum
       firstFragment: #F22
       type: Type
@@ -7149,7 +7149,7 @@
         fragment: #F22
         expression: expression_9
       getter: <testLibrary>::@getter::vEnum
-    const hasInitializer vFunctionTypeAlias
+    const hasImplicitType hasInitializer isOriginDeclaration vFunctionTypeAlias
       reference: <testLibrary>::@topLevelVariable::vFunctionTypeAlias
       firstFragment: #F23
       type: Type
@@ -7158,37 +7158,37 @@
         expression: expression_10
       getter: <testLibrary>::@getter::vFunctionTypeAlias
   getters
-    synthetic static vDynamic
+    synthetic static isOriginVariable vDynamic
       reference: <testLibrary>::@getter::vDynamic
       firstFragment: #F24
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vDynamic
-    synthetic static vNull
+    synthetic static isOriginVariable vNull
       reference: <testLibrary>::@getter::vNull
       firstFragment: #F25
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vNull
-    synthetic static vObject
+    synthetic static isOriginVariable vObject
       reference: <testLibrary>::@getter::vObject
       firstFragment: #F26
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vObject
-    synthetic static vClass
+    synthetic static isOriginVariable vClass
       reference: <testLibrary>::@getter::vClass
       firstFragment: #F27
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vClass
-    synthetic static vGenericClass
+    synthetic static isOriginVariable vGenericClass
       reference: <testLibrary>::@getter::vGenericClass
       firstFragment: #F28
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vGenericClass
-    synthetic static vEnum
+    synthetic static isOriginVariable vEnum
       reference: <testLibrary>::@getter::vEnum
       firstFragment: #F29
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vEnum
-    synthetic static vFunctionTypeAlias
+    synthetic static isOriginVariable vFunctionTypeAlias
       reference: <testLibrary>::@getter::vFunctionTypeAlias
       firstFragment: #F30
       returnType: Type
@@ -7213,14 +7213,14 @@
         #F1 class C (nameOffset:19) (firstTokenOffset:13) (offset:19)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:31) (firstTokenOffset:31) (offset:31)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::C::@getter::f
       typeAliases
         #F5 F (nameOffset:8) (firstTokenOffset:0) (offset:8)
@@ -7230,17 +7230,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        final hasInitializer f
+        final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: List<dynamic Function()>
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: List<dynamic Function()>
@@ -7274,21 +7274,21 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer vClass (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration vClass (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::vClass
           initializer: expression_0
             SimpleIdentifier
               token: C @32
               element: package:test/a.dart::@class::C
               staticType: Type
-        #F2 hasInitializer vEnum (nameOffset:41) (firstTokenOffset:41) (offset:41)
+        #F2 hasInitializer isOriginDeclaration vEnum (nameOffset:41) (firstTokenOffset:41) (offset:41)
           element: <testLibrary>::@topLevelVariable::vEnum
           initializer: expression_1
             SimpleIdentifier
               token: E @49
               element: package:test/a.dart::@enum::E
               staticType: Type
-        #F3 hasInitializer vFunctionTypeAlias (nameOffset:58) (firstTokenOffset:58) (offset:58)
+        #F3 hasInitializer isOriginDeclaration vFunctionTypeAlias (nameOffset:58) (firstTokenOffset:58) (offset:58)
           element: <testLibrary>::@topLevelVariable::vFunctionTypeAlias
           initializer: expression_2
             SimpleIdentifier
@@ -7296,14 +7296,14 @@
               element: package:test/a.dart::@typeAlias::F
               staticType: Type
       getters
-        #F4 synthetic vClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F4 synthetic isOriginVariable vClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::vClass
-        #F5 synthetic vEnum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F5 synthetic isOriginVariable vEnum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@getter::vEnum
-        #F6 synthetic vFunctionTypeAlias (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+        #F6 synthetic isOriginVariable vFunctionTypeAlias (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
           element: <testLibrary>::@getter::vFunctionTypeAlias
   topLevelVariables
-    const hasInitializer vClass
+    const hasImplicitType hasInitializer isOriginDeclaration vClass
       reference: <testLibrary>::@topLevelVariable::vClass
       firstFragment: #F1
       type: Type
@@ -7311,7 +7311,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vClass
-    const hasInitializer vEnum
+    const hasImplicitType hasInitializer isOriginDeclaration vEnum
       reference: <testLibrary>::@topLevelVariable::vEnum
       firstFragment: #F2
       type: Type
@@ -7319,7 +7319,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vEnum
-    const hasInitializer vFunctionTypeAlias
+    const hasImplicitType hasInitializer isOriginDeclaration vFunctionTypeAlias
       reference: <testLibrary>::@topLevelVariable::vFunctionTypeAlias
       firstFragment: #F3
       type: Type
@@ -7328,17 +7328,17 @@
         expression: expression_2
       getter: <testLibrary>::@getter::vFunctionTypeAlias
   getters
-    synthetic static vClass
+    synthetic static isOriginVariable vClass
       reference: <testLibrary>::@getter::vClass
       firstFragment: #F4
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vClass
-    synthetic static vEnum
+    synthetic static isOriginVariable vEnum
       reference: <testLibrary>::@getter::vEnum
       firstFragment: #F5
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vEnum
-    synthetic static vFunctionTypeAlias
+    synthetic static isOriginVariable vFunctionTypeAlias
       reference: <testLibrary>::@getter::vFunctionTypeAlias
       firstFragment: #F6
       returnType: Type
@@ -7370,7 +7370,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer vClass (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration vClass (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::vClass
           initializer: expression_0
             PrefixedIdentifier
@@ -7385,7 +7385,7 @@
                 staticType: Type
               element: package:test/a.dart::@class::C
               staticType: Type
-        #F2 hasInitializer vEnum (nameOffset:48) (firstTokenOffset:48) (offset:48)
+        #F2 hasInitializer isOriginDeclaration vEnum (nameOffset:48) (firstTokenOffset:48) (offset:48)
           element: <testLibrary>::@topLevelVariable::vEnum
           initializer: expression_1
             PrefixedIdentifier
@@ -7400,7 +7400,7 @@
                 staticType: Type
               element: package:test/a.dart::@enum::E
               staticType: Type
-        #F3 hasInitializer vFunctionTypeAlias (nameOffset:67) (firstTokenOffset:67) (offset:67)
+        #F3 hasInitializer isOriginDeclaration vFunctionTypeAlias (nameOffset:67) (firstTokenOffset:67) (offset:67)
           element: <testLibrary>::@topLevelVariable::vFunctionTypeAlias
           initializer: expression_2
             PrefixedIdentifier
@@ -7416,14 +7416,14 @@
               element: package:test/a.dart::@typeAlias::F
               staticType: Type
       getters
-        #F4 synthetic vClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F4 synthetic isOriginVariable vClass (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::vClass
-        #F5 synthetic vEnum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F5 synthetic isOriginVariable vEnum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@getter::vEnum
-        #F6 synthetic vFunctionTypeAlias (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+        #F6 synthetic isOriginVariable vFunctionTypeAlias (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
           element: <testLibrary>::@getter::vFunctionTypeAlias
   topLevelVariables
-    const hasInitializer vClass
+    const hasImplicitType hasInitializer isOriginDeclaration vClass
       reference: <testLibrary>::@topLevelVariable::vClass
       firstFragment: #F1
       type: Type
@@ -7431,7 +7431,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vClass
-    const hasInitializer vEnum
+    const hasImplicitType hasInitializer isOriginDeclaration vEnum
       reference: <testLibrary>::@topLevelVariable::vEnum
       firstFragment: #F2
       type: Type
@@ -7439,7 +7439,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vEnum
-    const hasInitializer vFunctionTypeAlias
+    const hasImplicitType hasInitializer isOriginDeclaration vFunctionTypeAlias
       reference: <testLibrary>::@topLevelVariable::vFunctionTypeAlias
       firstFragment: #F3
       type: Type
@@ -7448,17 +7448,17 @@
         expression: expression_2
       getter: <testLibrary>::@getter::vFunctionTypeAlias
   getters
-    synthetic static vClass
+    synthetic static isOriginVariable vClass
       reference: <testLibrary>::@getter::vClass
       firstFragment: #F4
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vClass
-    synthetic static vEnum
+    synthetic static isOriginVariable vEnum
       reference: <testLibrary>::@getter::vEnum
       firstFragment: #F5
       returnType: Type
       variable: <testLibrary>::@topLevelVariable::vEnum
-    synthetic static vFunctionTypeAlias
+    synthetic static isOriginVariable vFunctionTypeAlias
       reference: <testLibrary>::@getter::vFunctionTypeAlias
       firstFragment: #F6
       returnType: Type
@@ -7485,14 +7485,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 hasInitializer f (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F3 hasInitializer isOriginDeclaration f (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::f
   classes
     class C
@@ -7502,18 +7502,18 @@
         #E0 T
           firstFragment: #F2
       fields
-        final hasInitializer f
+        final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: List<T>
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
@@ -7533,7 +7533,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             SimpleIdentifier
@@ -7541,10 +7541,10 @@
               element: <null>
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -7553,7 +7553,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -7576,11 +7576,11 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F3 hasInitializer V (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F3 hasInitializer isOriginDeclaration V (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PrefixedIdentifier
@@ -7596,18 +7596,18 @@
               element: <null>
               staticType: InvalidType
       getters
-        #F4 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F4 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::V
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F3
       type: InvalidType
@@ -7616,7 +7616,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F4
       returnType: InvalidType
@@ -7644,7 +7644,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @21
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::V
           initializer: expression_0
             PropertyAccess
@@ -7667,10 +7667,10 @@
                 staticType: InvalidType
               staticType: InvalidType
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@getter::V
   topLevelVariables
-    const hasInitializer V
+    const hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: InvalidType
@@ -7679,7 +7679,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: InvalidType
@@ -7698,7 +7698,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -7727,10 +7727,10 @@
               isMap: false
               staticType: Set<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -7739,7 +7739,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -7761,7 +7761,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -7775,10 +7775,10 @@
               isMap: false
               staticType: Set<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -7787,7 +7787,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -7806,7 +7806,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -7844,10 +7844,10 @@
               isMap: false
               staticType: Set<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -7856,7 +7856,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -7875,7 +7875,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SetOrMapLiteral
@@ -7913,10 +7913,10 @@
               isMap: false
               staticType: Set<int>
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Object
@@ -7925,7 +7925,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Object
@@ -7961,7 +7961,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vEqual (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vEqual (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vEqual
           initializer: expression_0
             BinaryExpression
@@ -7975,7 +7975,7 @@
               element: dart:core::@class::num::@method::==
               staticInvokeType: bool Function(Object)
               staticType: bool
-        #F2 hasInitializer vAnd (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F2 hasInitializer isOriginDeclaration vAnd (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::vAnd
           initializer: expression_1
             BinaryExpression
@@ -7989,7 +7989,7 @@
               element: <null>
               staticInvokeType: null
               staticType: bool
-        #F3 hasInitializer vOr (nameOffset:57) (firstTokenOffset:57) (offset:57)
+        #F3 hasInitializer isOriginDeclaration vOr (nameOffset:57) (firstTokenOffset:57) (offset:57)
           element: <testLibrary>::@topLevelVariable::vOr
           initializer: expression_2
             BinaryExpression
@@ -8003,7 +8003,7 @@
               element: <null>
               staticInvokeType: null
               staticType: bool
-        #F4 hasInitializer vBitXor (nameOffset:84) (firstTokenOffset:84) (offset:84)
+        #F4 hasInitializer isOriginDeclaration vBitXor (nameOffset:84) (firstTokenOffset:84) (offset:84)
           element: <testLibrary>::@topLevelVariable::vBitXor
           initializer: expression_3
             BinaryExpression
@@ -8017,7 +8017,7 @@
               element: dart:core::@class::int::@method::^
               staticInvokeType: int Function(int)
               staticType: int
-        #F5 hasInitializer vBitAnd (nameOffset:107) (firstTokenOffset:107) (offset:107)
+        #F5 hasInitializer isOriginDeclaration vBitAnd (nameOffset:107) (firstTokenOffset:107) (offset:107)
           element: <testLibrary>::@topLevelVariable::vBitAnd
           initializer: expression_4
             BinaryExpression
@@ -8031,7 +8031,7 @@
               element: dart:core::@class::int::@method::&
               staticInvokeType: int Function(int)
               staticType: int
-        #F6 hasInitializer vBitOr (nameOffset:130) (firstTokenOffset:130) (offset:130)
+        #F6 hasInitializer isOriginDeclaration vBitOr (nameOffset:130) (firstTokenOffset:130) (offset:130)
           element: <testLibrary>::@topLevelVariable::vBitOr
           initializer: expression_5
             BinaryExpression
@@ -8045,7 +8045,7 @@
               element: dart:core::@class::int::@method::|
               staticInvokeType: int Function(int)
               staticType: int
-        #F7 hasInitializer vBitShiftLeft (nameOffset:152) (firstTokenOffset:152) (offset:152)
+        #F7 hasInitializer isOriginDeclaration vBitShiftLeft (nameOffset:152) (firstTokenOffset:152) (offset:152)
           element: <testLibrary>::@topLevelVariable::vBitShiftLeft
           initializer: expression_6
             BinaryExpression
@@ -8059,7 +8059,7 @@
               element: dart:core::@class::int::@method::<<
               staticInvokeType: int Function(int)
               staticType: int
-        #F8 hasInitializer vBitShiftRight (nameOffset:182) (firstTokenOffset:182) (offset:182)
+        #F8 hasInitializer isOriginDeclaration vBitShiftRight (nameOffset:182) (firstTokenOffset:182) (offset:182)
           element: <testLibrary>::@topLevelVariable::vBitShiftRight
           initializer: expression_7
             BinaryExpression
@@ -8073,7 +8073,7 @@
               element: dart:core::@class::int::@method::>>
               staticInvokeType: int Function(int)
               staticType: int
-        #F9 hasInitializer vAdd (nameOffset:213) (firstTokenOffset:213) (offset:213)
+        #F9 hasInitializer isOriginDeclaration vAdd (nameOffset:213) (firstTokenOffset:213) (offset:213)
           element: <testLibrary>::@topLevelVariable::vAdd
           initializer: expression_8
             BinaryExpression
@@ -8087,7 +8087,7 @@
               element: dart:core::@class::num::@method::+
               staticInvokeType: num Function(num)
               staticType: int
-        #F10 hasInitializer vSubtract (nameOffset:233) (firstTokenOffset:233) (offset:233)
+        #F10 hasInitializer isOriginDeclaration vSubtract (nameOffset:233) (firstTokenOffset:233) (offset:233)
           element: <testLibrary>::@topLevelVariable::vSubtract
           initializer: expression_9
             BinaryExpression
@@ -8101,7 +8101,7 @@
               element: dart:core::@class::num::@method::-
               staticInvokeType: num Function(num)
               staticType: int
-        #F11 hasInitializer vMiltiply (nameOffset:258) (firstTokenOffset:258) (offset:258)
+        #F11 hasInitializer isOriginDeclaration vMiltiply (nameOffset:258) (firstTokenOffset:258) (offset:258)
           element: <testLibrary>::@topLevelVariable::vMiltiply
           initializer: expression_10
             BinaryExpression
@@ -8115,7 +8115,7 @@
               element: dart:core::@class::num::@method::*
               staticInvokeType: num Function(num)
               staticType: int
-        #F12 hasInitializer vDivide (nameOffset:283) (firstTokenOffset:283) (offset:283)
+        #F12 hasInitializer isOriginDeclaration vDivide (nameOffset:283) (firstTokenOffset:283) (offset:283)
           element: <testLibrary>::@topLevelVariable::vDivide
           initializer: expression_11
             BinaryExpression
@@ -8129,7 +8129,7 @@
               element: dart:core::@class::num::@method::/
               staticInvokeType: double Function(num)
               staticType: double
-        #F13 hasInitializer vFloorDivide (nameOffset:306) (firstTokenOffset:306) (offset:306)
+        #F13 hasInitializer isOriginDeclaration vFloorDivide (nameOffset:306) (firstTokenOffset:306) (offset:306)
           element: <testLibrary>::@topLevelVariable::vFloorDivide
           initializer: expression_12
             BinaryExpression
@@ -8143,7 +8143,7 @@
               element: dart:core::@class::num::@method::~/
               staticInvokeType: int Function(num)
               staticType: int
-        #F14 hasInitializer vModulo (nameOffset:335) (firstTokenOffset:335) (offset:335)
+        #F14 hasInitializer isOriginDeclaration vModulo (nameOffset:335) (firstTokenOffset:335) (offset:335)
           element: <testLibrary>::@topLevelVariable::vModulo
           initializer: expression_13
             BinaryExpression
@@ -8157,7 +8157,7 @@
               element: dart:core::@class::num::@method::%
               staticInvokeType: num Function(num)
               staticType: int
-        #F15 hasInitializer vGreater (nameOffset:358) (firstTokenOffset:358) (offset:358)
+        #F15 hasInitializer isOriginDeclaration vGreater (nameOffset:358) (firstTokenOffset:358) (offset:358)
           element: <testLibrary>::@topLevelVariable::vGreater
           initializer: expression_14
             BinaryExpression
@@ -8171,7 +8171,7 @@
               element: dart:core::@class::num::@method::>
               staticInvokeType: bool Function(num)
               staticType: bool
-        #F16 hasInitializer vGreaterEqual (nameOffset:382) (firstTokenOffset:382) (offset:382)
+        #F16 hasInitializer isOriginDeclaration vGreaterEqual (nameOffset:382) (firstTokenOffset:382) (offset:382)
           element: <testLibrary>::@topLevelVariable::vGreaterEqual
           initializer: expression_15
             BinaryExpression
@@ -8185,7 +8185,7 @@
               element: dart:core::@class::num::@method::>=
               staticInvokeType: bool Function(num)
               staticType: bool
-        #F17 hasInitializer vLess (nameOffset:412) (firstTokenOffset:412) (offset:412)
+        #F17 hasInitializer isOriginDeclaration vLess (nameOffset:412) (firstTokenOffset:412) (offset:412)
           element: <testLibrary>::@topLevelVariable::vLess
           initializer: expression_16
             BinaryExpression
@@ -8199,7 +8199,7 @@
               element: dart:core::@class::num::@method::<
               staticInvokeType: bool Function(num)
               staticType: bool
-        #F18 hasInitializer vLessEqual (nameOffset:433) (firstTokenOffset:433) (offset:433)
+        #F18 hasInitializer isOriginDeclaration vLessEqual (nameOffset:433) (firstTokenOffset:433) (offset:433)
           element: <testLibrary>::@topLevelVariable::vLessEqual
           initializer: expression_17
             BinaryExpression
@@ -8214,44 +8214,44 @@
               staticInvokeType: bool Function(num)
               staticType: bool
       getters
-        #F19 synthetic vEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F19 synthetic isOriginVariable vEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vEqual
-        #F20 synthetic vAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F20 synthetic isOriginVariable vAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::vAnd
-        #F21 synthetic vOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+        #F21 synthetic isOriginVariable vOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
           element: <testLibrary>::@getter::vOr
-        #F22 synthetic vBitXor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
+        #F22 synthetic isOriginVariable vBitXor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
           element: <testLibrary>::@getter::vBitXor
-        #F23 synthetic vBitAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:107)
+        #F23 synthetic isOriginVariable vBitAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:107)
           element: <testLibrary>::@getter::vBitAnd
-        #F24 synthetic vBitOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
+        #F24 synthetic isOriginVariable vBitOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
           element: <testLibrary>::@getter::vBitOr
-        #F25 synthetic vBitShiftLeft (nameOffset:<null>) (firstTokenOffset:<null>) (offset:152)
+        #F25 synthetic isOriginVariable vBitShiftLeft (nameOffset:<null>) (firstTokenOffset:<null>) (offset:152)
           element: <testLibrary>::@getter::vBitShiftLeft
-        #F26 synthetic vBitShiftRight (nameOffset:<null>) (firstTokenOffset:<null>) (offset:182)
+        #F26 synthetic isOriginVariable vBitShiftRight (nameOffset:<null>) (firstTokenOffset:<null>) (offset:182)
           element: <testLibrary>::@getter::vBitShiftRight
-        #F27 synthetic vAdd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:213)
+        #F27 synthetic isOriginVariable vAdd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:213)
           element: <testLibrary>::@getter::vAdd
-        #F28 synthetic vSubtract (nameOffset:<null>) (firstTokenOffset:<null>) (offset:233)
+        #F28 synthetic isOriginVariable vSubtract (nameOffset:<null>) (firstTokenOffset:<null>) (offset:233)
           element: <testLibrary>::@getter::vSubtract
-        #F29 synthetic vMiltiply (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
+        #F29 synthetic isOriginVariable vMiltiply (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
           element: <testLibrary>::@getter::vMiltiply
-        #F30 synthetic vDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:283)
+        #F30 synthetic isOriginVariable vDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:283)
           element: <testLibrary>::@getter::vDivide
-        #F31 synthetic vFloorDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:306)
+        #F31 synthetic isOriginVariable vFloorDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:306)
           element: <testLibrary>::@getter::vFloorDivide
-        #F32 synthetic vModulo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:335)
+        #F32 synthetic isOriginVariable vModulo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:335)
           element: <testLibrary>::@getter::vModulo
-        #F33 synthetic vGreater (nameOffset:<null>) (firstTokenOffset:<null>) (offset:358)
+        #F33 synthetic isOriginVariable vGreater (nameOffset:<null>) (firstTokenOffset:<null>) (offset:358)
           element: <testLibrary>::@getter::vGreater
-        #F34 synthetic vGreaterEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:382)
+        #F34 synthetic isOriginVariable vGreaterEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:382)
           element: <testLibrary>::@getter::vGreaterEqual
-        #F35 synthetic vLess (nameOffset:<null>) (firstTokenOffset:<null>) (offset:412)
+        #F35 synthetic isOriginVariable vLess (nameOffset:<null>) (firstTokenOffset:<null>) (offset:412)
           element: <testLibrary>::@getter::vLess
-        #F36 synthetic vLessEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:433)
+        #F36 synthetic isOriginVariable vLessEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:433)
           element: <testLibrary>::@getter::vLessEqual
   topLevelVariables
-    const hasInitializer vEqual
+    const hasImplicitType hasInitializer isOriginDeclaration vEqual
       reference: <testLibrary>::@topLevelVariable::vEqual
       firstFragment: #F1
       type: bool
@@ -8259,7 +8259,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vEqual
-    const hasInitializer vAnd
+    const hasImplicitType hasInitializer isOriginDeclaration vAnd
       reference: <testLibrary>::@topLevelVariable::vAnd
       firstFragment: #F2
       type: bool
@@ -8267,7 +8267,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vAnd
-    const hasInitializer vOr
+    const hasImplicitType hasInitializer isOriginDeclaration vOr
       reference: <testLibrary>::@topLevelVariable::vOr
       firstFragment: #F3
       type: bool
@@ -8275,7 +8275,7 @@
         fragment: #F3
         expression: expression_2
       getter: <testLibrary>::@getter::vOr
-    const hasInitializer vBitXor
+    const hasImplicitType hasInitializer isOriginDeclaration vBitXor
       reference: <testLibrary>::@topLevelVariable::vBitXor
       firstFragment: #F4
       type: int
@@ -8283,7 +8283,7 @@
         fragment: #F4
         expression: expression_3
       getter: <testLibrary>::@getter::vBitXor
-    const hasInitializer vBitAnd
+    const hasImplicitType hasInitializer isOriginDeclaration vBitAnd
       reference: <testLibrary>::@topLevelVariable::vBitAnd
       firstFragment: #F5
       type: int
@@ -8291,7 +8291,7 @@
         fragment: #F5
         expression: expression_4
       getter: <testLibrary>::@getter::vBitAnd
-    const hasInitializer vBitOr
+    const hasImplicitType hasInitializer isOriginDeclaration vBitOr
       reference: <testLibrary>::@topLevelVariable::vBitOr
       firstFragment: #F6
       type: int
@@ -8299,7 +8299,7 @@
         fragment: #F6
         expression: expression_5
       getter: <testLibrary>::@getter::vBitOr
-    const hasInitializer vBitShiftLeft
+    const hasImplicitType hasInitializer isOriginDeclaration vBitShiftLeft
       reference: <testLibrary>::@topLevelVariable::vBitShiftLeft
       firstFragment: #F7
       type: int
@@ -8307,7 +8307,7 @@
         fragment: #F7
         expression: expression_6
       getter: <testLibrary>::@getter::vBitShiftLeft
-    const hasInitializer vBitShiftRight
+    const hasImplicitType hasInitializer isOriginDeclaration vBitShiftRight
       reference: <testLibrary>::@topLevelVariable::vBitShiftRight
       firstFragment: #F8
       type: int
@@ -8315,7 +8315,7 @@
         fragment: #F8
         expression: expression_7
       getter: <testLibrary>::@getter::vBitShiftRight
-    const hasInitializer vAdd
+    const hasImplicitType hasInitializer isOriginDeclaration vAdd
       reference: <testLibrary>::@topLevelVariable::vAdd
       firstFragment: #F9
       type: int
@@ -8323,7 +8323,7 @@
         fragment: #F9
         expression: expression_8
       getter: <testLibrary>::@getter::vAdd
-    const hasInitializer vSubtract
+    const hasImplicitType hasInitializer isOriginDeclaration vSubtract
       reference: <testLibrary>::@topLevelVariable::vSubtract
       firstFragment: #F10
       type: int
@@ -8331,7 +8331,7 @@
         fragment: #F10
         expression: expression_9
       getter: <testLibrary>::@getter::vSubtract
-    const hasInitializer vMiltiply
+    const hasImplicitType hasInitializer isOriginDeclaration vMiltiply
       reference: <testLibrary>::@topLevelVariable::vMiltiply
       firstFragment: #F11
       type: int
@@ -8339,7 +8339,7 @@
         fragment: #F11
         expression: expression_10
       getter: <testLibrary>::@getter::vMiltiply
-    const hasInitializer vDivide
+    const hasImplicitType hasInitializer isOriginDeclaration vDivide
       reference: <testLibrary>::@topLevelVariable::vDivide
       firstFragment: #F12
       type: double
@@ -8347,7 +8347,7 @@
         fragment: #F12
         expression: expression_11
       getter: <testLibrary>::@getter::vDivide
-    const hasInitializer vFloorDivide
+    const hasImplicitType hasInitializer isOriginDeclaration vFloorDivide
       reference: <testLibrary>::@topLevelVariable::vFloorDivide
       firstFragment: #F13
       type: int
@@ -8355,7 +8355,7 @@
         fragment: #F13
         expression: expression_12
       getter: <testLibrary>::@getter::vFloorDivide
-    const hasInitializer vModulo
+    const hasImplicitType hasInitializer isOriginDeclaration vModulo
       reference: <testLibrary>::@topLevelVariable::vModulo
       firstFragment: #F14
       type: int
@@ -8363,7 +8363,7 @@
         fragment: #F14
         expression: expression_13
       getter: <testLibrary>::@getter::vModulo
-    const hasInitializer vGreater
+    const hasImplicitType hasInitializer isOriginDeclaration vGreater
       reference: <testLibrary>::@topLevelVariable::vGreater
       firstFragment: #F15
       type: bool
@@ -8371,7 +8371,7 @@
         fragment: #F15
         expression: expression_14
       getter: <testLibrary>::@getter::vGreater
-    const hasInitializer vGreaterEqual
+    const hasImplicitType hasInitializer isOriginDeclaration vGreaterEqual
       reference: <testLibrary>::@topLevelVariable::vGreaterEqual
       firstFragment: #F16
       type: bool
@@ -8379,7 +8379,7 @@
         fragment: #F16
         expression: expression_15
       getter: <testLibrary>::@getter::vGreaterEqual
-    const hasInitializer vLess
+    const hasImplicitType hasInitializer isOriginDeclaration vLess
       reference: <testLibrary>::@topLevelVariable::vLess
       firstFragment: #F17
       type: bool
@@ -8387,7 +8387,7 @@
         fragment: #F17
         expression: expression_16
       getter: <testLibrary>::@getter::vLess
-    const hasInitializer vLessEqual
+    const hasImplicitType hasInitializer isOriginDeclaration vLessEqual
       reference: <testLibrary>::@topLevelVariable::vLessEqual
       firstFragment: #F18
       type: bool
@@ -8396,92 +8396,92 @@
         expression: expression_17
       getter: <testLibrary>::@getter::vLessEqual
   getters
-    synthetic static vEqual
+    synthetic static isOriginVariable vEqual
       reference: <testLibrary>::@getter::vEqual
       firstFragment: #F19
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vEqual
-    synthetic static vAnd
+    synthetic static isOriginVariable vAnd
       reference: <testLibrary>::@getter::vAnd
       firstFragment: #F20
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vAnd
-    synthetic static vOr
+    synthetic static isOriginVariable vOr
       reference: <testLibrary>::@getter::vOr
       firstFragment: #F21
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vOr
-    synthetic static vBitXor
+    synthetic static isOriginVariable vBitXor
       reference: <testLibrary>::@getter::vBitXor
       firstFragment: #F22
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitXor
-    synthetic static vBitAnd
+    synthetic static isOriginVariable vBitAnd
       reference: <testLibrary>::@getter::vBitAnd
       firstFragment: #F23
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitAnd
-    synthetic static vBitOr
+    synthetic static isOriginVariable vBitOr
       reference: <testLibrary>::@getter::vBitOr
       firstFragment: #F24
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitOr
-    synthetic static vBitShiftLeft
+    synthetic static isOriginVariable vBitShiftLeft
       reference: <testLibrary>::@getter::vBitShiftLeft
       firstFragment: #F25
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitShiftLeft
-    synthetic static vBitShiftRight
+    synthetic static isOriginVariable vBitShiftRight
       reference: <testLibrary>::@getter::vBitShiftRight
       firstFragment: #F26
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitShiftRight
-    synthetic static vAdd
+    synthetic static isOriginVariable vAdd
       reference: <testLibrary>::@getter::vAdd
       firstFragment: #F27
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vAdd
-    synthetic static vSubtract
+    synthetic static isOriginVariable vSubtract
       reference: <testLibrary>::@getter::vSubtract
       firstFragment: #F28
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vSubtract
-    synthetic static vMiltiply
+    synthetic static isOriginVariable vMiltiply
       reference: <testLibrary>::@getter::vMiltiply
       firstFragment: #F29
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vMiltiply
-    synthetic static vDivide
+    synthetic static isOriginVariable vDivide
       reference: <testLibrary>::@getter::vDivide
       firstFragment: #F30
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDivide
-    synthetic static vFloorDivide
+    synthetic static isOriginVariable vFloorDivide
       reference: <testLibrary>::@getter::vFloorDivide
       firstFragment: #F31
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vFloorDivide
-    synthetic static vModulo
+    synthetic static isOriginVariable vModulo
       reference: <testLibrary>::@getter::vModulo
       firstFragment: #F32
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vModulo
-    synthetic static vGreater
+    synthetic static isOriginVariable vGreater
       reference: <testLibrary>::@getter::vGreater
       firstFragment: #F33
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vGreater
-    synthetic static vGreaterEqual
+    synthetic static isOriginVariable vGreaterEqual
       reference: <testLibrary>::@getter::vGreaterEqual
       firstFragment: #F34
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vGreaterEqual
-    synthetic static vLess
+    synthetic static isOriginVariable vLess
       reference: <testLibrary>::@getter::vLess
       firstFragment: #F35
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vLess
-    synthetic static vLessEqual
+    synthetic static isOriginVariable vLessEqual
       reference: <testLibrary>::@getter::vLessEqual
       firstFragment: #F36
       returnType: bool
@@ -8500,7 +8500,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vConditional (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vConditional (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vConditional
           initializer: expression_0
             ConditionalExpression
@@ -8529,10 +8529,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic vConditional (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable vConditional (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vConditional
   topLevelVariables
-    const hasInitializer vConditional
+    const hasImplicitType hasInitializer isOriginDeclaration vConditional
       reference: <testLibrary>::@topLevelVariable::vConditional
       firstFragment: #F1
       type: int
@@ -8541,7 +8541,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::vConditional
   getters
-    synthetic static vConditional
+    synthetic static isOriginVariable vConditional
       reference: <testLibrary>::@getter::vConditional
       firstFragment: #F2
       returnType: int
@@ -8560,7 +8560,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vIdentical (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vIdentical (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vIdentical
           initializer: expression_0
             ConditionalExpression
@@ -8589,10 +8589,10 @@
                 staticType: int
               staticType: int
       getters
-        #F2 synthetic vIdentical (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable vIdentical (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vIdentical
   topLevelVariables
-    const hasInitializer vIdentical
+    const hasImplicitType hasInitializer isOriginDeclaration vIdentical
       reference: <testLibrary>::@topLevelVariable::vIdentical
       firstFragment: #F1
       type: int
@@ -8601,7 +8601,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::vIdentical
   getters
-    synthetic static vIdentical
+    synthetic static isOriginVariable vIdentical
       reference: <testLibrary>::@getter::vIdentical
       firstFragment: #F2
       returnType: int
@@ -8620,7 +8620,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vIfNull (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vIfNull (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vIfNull
           initializer: expression_0
             BinaryExpression
@@ -8635,10 +8635,10 @@
               staticInvokeType: null
               staticType: num
       getters
-        #F2 synthetic vIfNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable vIfNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vIfNull
   topLevelVariables
-    const hasInitializer vIfNull
+    const hasImplicitType hasInitializer isOriginDeclaration vIfNull
       reference: <testLibrary>::@topLevelVariable::vIfNull
       firstFragment: #F1
       type: num
@@ -8647,7 +8647,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::vIfNull
   getters
-    synthetic static vIfNull
+    synthetic static isOriginVariable vIfNull
       reference: <testLibrary>::@getter::vIfNull
       firstFragment: #F2
       returnType: num
@@ -8678,31 +8678,31 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vNull (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vNull (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vNull
           initializer: expression_0
             NullLiteral
               literal: null @14
               staticType: Null
-        #F2 hasInitializer vBoolFalse (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F2 hasInitializer isOriginDeclaration vBoolFalse (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::vBoolFalse
           initializer: expression_1
             BooleanLiteral
               literal: false @39
               staticType: bool
-        #F3 hasInitializer vBoolTrue (nameOffset:52) (firstTokenOffset:52) (offset:52)
+        #F3 hasInitializer isOriginDeclaration vBoolTrue (nameOffset:52) (firstTokenOffset:52) (offset:52)
           element: <testLibrary>::@topLevelVariable::vBoolTrue
           initializer: expression_2
             BooleanLiteral
               literal: true @64
               staticType: bool
-        #F4 hasInitializer vIntPositive (nameOffset:76) (firstTokenOffset:76) (offset:76)
+        #F4 hasInitializer isOriginDeclaration vIntPositive (nameOffset:76) (firstTokenOffset:76) (offset:76)
           element: <testLibrary>::@topLevelVariable::vIntPositive
           initializer: expression_3
             IntegerLiteral
               literal: 1 @91
               staticType: int
-        #F5 hasInitializer vIntNegative (nameOffset:100) (firstTokenOffset:100) (offset:100)
+        #F5 hasInitializer isOriginDeclaration vIntNegative (nameOffset:100) (firstTokenOffset:100) (offset:100)
           element: <testLibrary>::@topLevelVariable::vIntNegative
           initializer: expression_4
             PrefixExpression
@@ -8712,36 +8712,36 @@
                 staticType: int
               element: dart:core::@class::int::@method::unary-
               staticType: int
-        #F6 hasInitializer vIntLong1 (nameOffset:125) (firstTokenOffset:125) (offset:125)
+        #F6 hasInitializer isOriginDeclaration vIntLong1 (nameOffset:125) (firstTokenOffset:125) (offset:125)
           element: <testLibrary>::@topLevelVariable::vIntLong1
           initializer: expression_5
             IntegerLiteral
               literal: 0x7FFFFFFFFFFFFFFF @137
               staticType: int
-        #F7 hasInitializer vIntLong2 (nameOffset:163) (firstTokenOffset:163) (offset:163)
+        #F7 hasInitializer isOriginDeclaration vIntLong2 (nameOffset:163) (firstTokenOffset:163) (offset:163)
           element: <testLibrary>::@topLevelVariable::vIntLong2
           initializer: expression_6
             IntegerLiteral
               literal: 0xFFFFFFFFFFFFFFFF @175
               staticType: int
-        #F8 hasInitializer vIntLong3 (nameOffset:201) (firstTokenOffset:201) (offset:201)
+        #F8 hasInitializer isOriginDeclaration vIntLong3 (nameOffset:201) (firstTokenOffset:201) (offset:201)
           element: <testLibrary>::@topLevelVariable::vIntLong3
           initializer: expression_7
             IntegerLiteral
               literal: 0x8000000000000000 @213
               staticType: int
-        #F9 hasInitializer vDouble (nameOffset:239) (firstTokenOffset:239) (offset:239)
+        #F9 hasInitializer isOriginDeclaration vDouble (nameOffset:239) (firstTokenOffset:239) (offset:239)
           element: <testLibrary>::@topLevelVariable::vDouble
           initializer: expression_8
             DoubleLiteral
               literal: 2.3 @249
               staticType: double
-        #F10 hasInitializer vString (nameOffset:260) (firstTokenOffset:260) (offset:260)
+        #F10 hasInitializer isOriginDeclaration vString (nameOffset:260) (firstTokenOffset:260) (offset:260)
           element: <testLibrary>::@topLevelVariable::vString
           initializer: expression_9
             SimpleStringLiteral
               literal: 'abc' @270
-        #F11 hasInitializer vStringConcat (nameOffset:283) (firstTokenOffset:283) (offset:283)
+        #F11 hasInitializer isOriginDeclaration vStringConcat (nameOffset:283) (firstTokenOffset:283) (offset:283)
           element: <testLibrary>::@topLevelVariable::vStringConcat
           initializer: expression_10
             AdjacentStrings
@@ -8752,7 +8752,7 @@
                   literal: 'bbb' @305
               staticType: String
               stringValue: aaabbb
-        #F12 hasInitializer vStringInterpolation (nameOffset:318) (firstTokenOffset:318) (offset:318)
+        #F12 hasInitializer isOriginDeclaration vStringInterpolation (nameOffset:318) (firstTokenOffset:318) (offset:318)
           element: <testLibrary>::@topLevelVariable::vStringInterpolation
           initializer: expression_11
             StringInterpolation
@@ -8777,7 +8777,7 @@
                   contents:  bbb' @359
               staticType: String
               stringValue: null
-        #F13 hasInitializer vSymbol (nameOffset:372) (firstTokenOffset:372) (offset:372)
+        #F13 hasInitializer isOriginDeclaration vSymbol (nameOffset:372) (firstTokenOffset:372) (offset:372)
           element: <testLibrary>::@topLevelVariable::vSymbol
           initializer: expression_12
             SymbolLiteral
@@ -8790,34 +8790,34 @@
                 ccc
                   offset: 391
       getters
-        #F14 synthetic vNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F14 synthetic isOriginVariable vNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vNull
-        #F15 synthetic vBoolFalse (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F15 synthetic isOriginVariable vBoolFalse (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::vBoolFalse
-        #F16 synthetic vBoolTrue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F16 synthetic isOriginVariable vBoolTrue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@getter::vBoolTrue
-        #F17 synthetic vIntPositive (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+        #F17 synthetic isOriginVariable vIntPositive (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
           element: <testLibrary>::@getter::vIntPositive
-        #F18 synthetic vIntNegative (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
+        #F18 synthetic isOriginVariable vIntNegative (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
           element: <testLibrary>::@getter::vIntNegative
-        #F19 synthetic vIntLong1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:125)
+        #F19 synthetic isOriginVariable vIntLong1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:125)
           element: <testLibrary>::@getter::vIntLong1
-        #F20 synthetic vIntLong2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:163)
+        #F20 synthetic isOriginVariable vIntLong2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:163)
           element: <testLibrary>::@getter::vIntLong2
-        #F21 synthetic vIntLong3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:201)
+        #F21 synthetic isOriginVariable vIntLong3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:201)
           element: <testLibrary>::@getter::vIntLong3
-        #F22 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:239)
+        #F22 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:239)
           element: <testLibrary>::@getter::vDouble
-        #F23 synthetic vString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:260)
+        #F23 synthetic isOriginVariable vString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:260)
           element: <testLibrary>::@getter::vString
-        #F24 synthetic vStringConcat (nameOffset:<null>) (firstTokenOffset:<null>) (offset:283)
+        #F24 synthetic isOriginVariable vStringConcat (nameOffset:<null>) (firstTokenOffset:<null>) (offset:283)
           element: <testLibrary>::@getter::vStringConcat
-        #F25 synthetic vStringInterpolation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:318)
+        #F25 synthetic isOriginVariable vStringInterpolation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:318)
           element: <testLibrary>::@getter::vStringInterpolation
-        #F26 synthetic vSymbol (nameOffset:<null>) (firstTokenOffset:<null>) (offset:372)
+        #F26 synthetic isOriginVariable vSymbol (nameOffset:<null>) (firstTokenOffset:<null>) (offset:372)
           element: <testLibrary>::@getter::vSymbol
   topLevelVariables
-    const hasInitializer vNull
+    const hasImplicitType hasInitializer isOriginDeclaration vNull
       reference: <testLibrary>::@topLevelVariable::vNull
       firstFragment: #F1
       type: dynamic
@@ -8825,7 +8825,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vNull
-    const hasInitializer vBoolFalse
+    const hasImplicitType hasInitializer isOriginDeclaration vBoolFalse
       reference: <testLibrary>::@topLevelVariable::vBoolFalse
       firstFragment: #F2
       type: bool
@@ -8833,7 +8833,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vBoolFalse
-    const hasInitializer vBoolTrue
+    const hasImplicitType hasInitializer isOriginDeclaration vBoolTrue
       reference: <testLibrary>::@topLevelVariable::vBoolTrue
       firstFragment: #F3
       type: bool
@@ -8841,7 +8841,7 @@
         fragment: #F3
         expression: expression_2
       getter: <testLibrary>::@getter::vBoolTrue
-    const hasInitializer vIntPositive
+    const hasImplicitType hasInitializer isOriginDeclaration vIntPositive
       reference: <testLibrary>::@topLevelVariable::vIntPositive
       firstFragment: #F4
       type: int
@@ -8849,7 +8849,7 @@
         fragment: #F4
         expression: expression_3
       getter: <testLibrary>::@getter::vIntPositive
-    const hasInitializer vIntNegative
+    const hasImplicitType hasInitializer isOriginDeclaration vIntNegative
       reference: <testLibrary>::@topLevelVariable::vIntNegative
       firstFragment: #F5
       type: int
@@ -8857,7 +8857,7 @@
         fragment: #F5
         expression: expression_4
       getter: <testLibrary>::@getter::vIntNegative
-    const hasInitializer vIntLong1
+    const hasImplicitType hasInitializer isOriginDeclaration vIntLong1
       reference: <testLibrary>::@topLevelVariable::vIntLong1
       firstFragment: #F6
       type: int
@@ -8865,7 +8865,7 @@
         fragment: #F6
         expression: expression_5
       getter: <testLibrary>::@getter::vIntLong1
-    const hasInitializer vIntLong2
+    const hasImplicitType hasInitializer isOriginDeclaration vIntLong2
       reference: <testLibrary>::@topLevelVariable::vIntLong2
       firstFragment: #F7
       type: int
@@ -8873,7 +8873,7 @@
         fragment: #F7
         expression: expression_6
       getter: <testLibrary>::@getter::vIntLong2
-    const hasInitializer vIntLong3
+    const hasImplicitType hasInitializer isOriginDeclaration vIntLong3
       reference: <testLibrary>::@topLevelVariable::vIntLong3
       firstFragment: #F8
       type: int
@@ -8881,7 +8881,7 @@
         fragment: #F8
         expression: expression_7
       getter: <testLibrary>::@getter::vIntLong3
-    const hasInitializer vDouble
+    const hasImplicitType hasInitializer isOriginDeclaration vDouble
       reference: <testLibrary>::@topLevelVariable::vDouble
       firstFragment: #F9
       type: double
@@ -8889,7 +8889,7 @@
         fragment: #F9
         expression: expression_8
       getter: <testLibrary>::@getter::vDouble
-    const hasInitializer vString
+    const hasImplicitType hasInitializer isOriginDeclaration vString
       reference: <testLibrary>::@topLevelVariable::vString
       firstFragment: #F10
       type: String
@@ -8897,7 +8897,7 @@
         fragment: #F10
         expression: expression_9
       getter: <testLibrary>::@getter::vString
-    const hasInitializer vStringConcat
+    const hasImplicitType hasInitializer isOriginDeclaration vStringConcat
       reference: <testLibrary>::@topLevelVariable::vStringConcat
       firstFragment: #F11
       type: String
@@ -8905,7 +8905,7 @@
         fragment: #F11
         expression: expression_10
       getter: <testLibrary>::@getter::vStringConcat
-    const hasInitializer vStringInterpolation
+    const hasImplicitType hasInitializer isOriginDeclaration vStringInterpolation
       reference: <testLibrary>::@topLevelVariable::vStringInterpolation
       firstFragment: #F12
       type: String
@@ -8913,7 +8913,7 @@
         fragment: #F12
         expression: expression_11
       getter: <testLibrary>::@getter::vStringInterpolation
-    const hasInitializer vSymbol
+    const hasImplicitType hasInitializer isOriginDeclaration vSymbol
       reference: <testLibrary>::@topLevelVariable::vSymbol
       firstFragment: #F13
       type: Symbol
@@ -8922,67 +8922,67 @@
         expression: expression_12
       getter: <testLibrary>::@getter::vSymbol
   getters
-    synthetic static vNull
+    synthetic static isOriginVariable vNull
       reference: <testLibrary>::@getter::vNull
       firstFragment: #F14
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::vNull
-    synthetic static vBoolFalse
+    synthetic static isOriginVariable vBoolFalse
       reference: <testLibrary>::@getter::vBoolFalse
       firstFragment: #F15
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vBoolFalse
-    synthetic static vBoolTrue
+    synthetic static isOriginVariable vBoolTrue
       reference: <testLibrary>::@getter::vBoolTrue
       firstFragment: #F16
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vBoolTrue
-    synthetic static vIntPositive
+    synthetic static isOriginVariable vIntPositive
       reference: <testLibrary>::@getter::vIntPositive
       firstFragment: #F17
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIntPositive
-    synthetic static vIntNegative
+    synthetic static isOriginVariable vIntNegative
       reference: <testLibrary>::@getter::vIntNegative
       firstFragment: #F18
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIntNegative
-    synthetic static vIntLong1
+    synthetic static isOriginVariable vIntLong1
       reference: <testLibrary>::@getter::vIntLong1
       firstFragment: #F19
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIntLong1
-    synthetic static vIntLong2
+    synthetic static isOriginVariable vIntLong2
       reference: <testLibrary>::@getter::vIntLong2
       firstFragment: #F20
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIntLong2
-    synthetic static vIntLong3
+    synthetic static isOriginVariable vIntLong3
       reference: <testLibrary>::@getter::vIntLong3
       firstFragment: #F21
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIntLong3
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@getter::vDouble
       firstFragment: #F22
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vString
+    synthetic static isOriginVariable vString
       reference: <testLibrary>::@getter::vString
       firstFragment: #F23
       returnType: String
       variable: <testLibrary>::@topLevelVariable::vString
-    synthetic static vStringConcat
+    synthetic static isOriginVariable vStringConcat
       reference: <testLibrary>::@getter::vStringConcat
       firstFragment: #F24
       returnType: String
       variable: <testLibrary>::@topLevelVariable::vStringConcat
-    synthetic static vStringInterpolation
+    synthetic static isOriginVariable vStringInterpolation
       reference: <testLibrary>::@getter::vStringInterpolation
       firstFragment: #F25
       returnType: String
       variable: <testLibrary>::@topLevelVariable::vStringInterpolation
-    synthetic static vSymbol
+    synthetic static isOriginVariable vSymbol
       reference: <testLibrary>::@getter::vSymbol
       firstFragment: #F26
       returnType: Symbol
@@ -9002,13 +9002,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:11) (firstTokenOffset:11) (offset:11)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:11) (firstTokenOffset:11) (offset:11)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @15
               staticType: int
-        #F2 hasInitializer b (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             MethodInvocation
@@ -9027,12 +9027,12 @@
               staticInvokeType: String Function()
               staticType: String?
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int?
@@ -9040,7 +9040,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: String?
@@ -9049,12 +9049,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int?
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: String?
@@ -9074,13 +9074,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:11) (firstTokenOffset:11) (offset:11)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:11) (firstTokenOffset:11) (offset:11)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @15
               staticType: int
-        #F2 hasInitializer b (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             CascadeExpression
@@ -9102,12 +9102,12 @@
                   staticType: String
               staticType: int?
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int?
@@ -9115,7 +9115,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int?
@@ -9124,12 +9124,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int?
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int?
@@ -9152,12 +9152,12 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:14) (firstTokenOffset:14) (offset:14)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:14) (firstTokenOffset:14) (offset:14)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             SimpleStringLiteral
               literal: '' @18
-        #F2 hasInitializer b (nameOffset:40) (firstTokenOffset:40) (offset:40)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:40) (firstTokenOffset:40) (offset:40)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             ListLiteral
@@ -9177,12 +9177,12 @@
               rightBracket: ] @59
               staticType: List<int?>
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: String?
@@ -9190,7 +9190,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: List<int?>
@@ -9199,12 +9199,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: String?
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: List<int?>
@@ -9225,7 +9225,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v1 (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration v1 (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::v1
           initializer: expression_0
             BinaryExpression
@@ -9251,7 +9251,7 @@
               element: dart:core::@class::num::@method::*
               staticInvokeType: num Function(num)
               staticType: int
-        #F2 hasInitializer v2 (nameOffset:38) (firstTokenOffset:38) (offset:38)
+        #F2 hasInitializer isOriginDeclaration v2 (nameOffset:38) (firstTokenOffset:38) (offset:38)
           element: <testLibrary>::@topLevelVariable::v2
           initializer: expression_1
             PrefixExpression
@@ -9273,7 +9273,7 @@
                 staticType: int
               element: dart:core::@class::int::@method::unary-
               staticType: int
-        #F3 hasInitializer v3 (nameOffset:63) (firstTokenOffset:63) (offset:63)
+        #F3 hasInitializer isOriginDeclaration v3 (nameOffset:63) (firstTokenOffset:63) (offset:63)
           element: <testLibrary>::@topLevelVariable::v3
           initializer: expression_2
             PropertyAccess
@@ -9297,14 +9297,14 @@
                 staticType: int
               staticType: int
       getters
-        #F4 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F4 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::v1
-        #F5 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F5 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@getter::v2
-        #F6 synthetic v3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F6 synthetic isOriginVariable v3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@getter::v3
   topLevelVariables
-    const hasInitializer v1
+    const hasInitializer isOriginDeclaration v1
       reference: <testLibrary>::@topLevelVariable::v1
       firstFragment: #F1
       type: int
@@ -9312,7 +9312,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::v1
-    const hasInitializer v2
+    const hasInitializer isOriginDeclaration v2
       reference: <testLibrary>::@topLevelVariable::v2
       firstFragment: #F2
       type: int
@@ -9320,7 +9320,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::v2
-    const hasInitializer v3
+    const hasInitializer isOriginDeclaration v3
       reference: <testLibrary>::@topLevelVariable::v3
       firstFragment: #F3
       type: int
@@ -9329,17 +9329,17 @@
         expression: expression_2
       getter: <testLibrary>::@getter::v3
   getters
-    synthetic static v1
+    synthetic static isOriginVariable v1
       reference: <testLibrary>::@getter::v1
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v1
-    synthetic static v2
+    synthetic static isOriginVariable v2
       reference: <testLibrary>::@getter::v2
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v2
-    synthetic static v3
+    synthetic static isOriginVariable v3
       reference: <testLibrary>::@getter::v3
       firstFragment: #F6
       returnType: int
@@ -9361,7 +9361,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vNotEqual (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vNotEqual (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vNotEqual
           initializer: expression_0
             BinaryExpression
@@ -9375,7 +9375,7 @@
               element: dart:core::@class::num::@method::==
               staticInvokeType: bool Function(Object)
               staticType: bool
-        #F2 hasInitializer vNot (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F2 hasInitializer isOriginDeclaration vNot (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::vNot
           initializer: expression_1
             PrefixExpression
@@ -9385,7 +9385,7 @@
                 staticType: bool
               element: <null>
               staticType: bool
-        #F3 hasInitializer vNegate (nameOffset:52) (firstTokenOffset:52) (offset:52)
+        #F3 hasInitializer isOriginDeclaration vNegate (nameOffset:52) (firstTokenOffset:52) (offset:52)
           element: <testLibrary>::@topLevelVariable::vNegate
           initializer: expression_2
             PrefixExpression
@@ -9395,7 +9395,7 @@
                 staticType: int
               element: dart:core::@class::int::@method::unary-
               staticType: int
-        #F4 hasInitializer vComplement (nameOffset:72) (firstTokenOffset:72) (offset:72)
+        #F4 hasInitializer isOriginDeclaration vComplement (nameOffset:72) (firstTokenOffset:72) (offset:72)
           element: <testLibrary>::@topLevelVariable::vComplement
           initializer: expression_3
             PrefixExpression
@@ -9406,16 +9406,16 @@
               element: dart:core::@class::int::@method::~
               staticType: int
       getters
-        #F5 synthetic vNotEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable vNotEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vNotEqual
-        #F6 synthetic vNot (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F6 synthetic isOriginVariable vNot (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::vNot
-        #F7 synthetic vNegate (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F7 synthetic isOriginVariable vNegate (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@getter::vNegate
-        #F8 synthetic vComplement (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+        #F8 synthetic isOriginVariable vComplement (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
           element: <testLibrary>::@getter::vComplement
   topLevelVariables
-    const hasInitializer vNotEqual
+    const hasImplicitType hasInitializer isOriginDeclaration vNotEqual
       reference: <testLibrary>::@topLevelVariable::vNotEqual
       firstFragment: #F1
       type: bool
@@ -9423,7 +9423,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vNotEqual
-    const hasInitializer vNot
+    const hasImplicitType hasInitializer isOriginDeclaration vNot
       reference: <testLibrary>::@topLevelVariable::vNot
       firstFragment: #F2
       type: bool
@@ -9431,7 +9431,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vNot
-    const hasInitializer vNegate
+    const hasImplicitType hasInitializer isOriginDeclaration vNegate
       reference: <testLibrary>::@topLevelVariable::vNegate
       firstFragment: #F3
       type: int
@@ -9439,7 +9439,7 @@
         fragment: #F3
         expression: expression_2
       getter: <testLibrary>::@getter::vNegate
-    const hasInitializer vComplement
+    const hasImplicitType hasInitializer isOriginDeclaration vComplement
       reference: <testLibrary>::@topLevelVariable::vComplement
       firstFragment: #F4
       type: int
@@ -9448,22 +9448,22 @@
         expression: expression_3
       getter: <testLibrary>::@getter::vComplement
   getters
-    synthetic static vNotEqual
+    synthetic static isOriginVariable vNotEqual
       reference: <testLibrary>::@getter::vNotEqual
       firstFragment: #F5
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vNotEqual
-    synthetic static vNot
+    synthetic static isOriginVariable vNot
       reference: <testLibrary>::@getter::vNot
       firstFragment: #F6
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vNot
-    synthetic static vNegate
+    synthetic static isOriginVariable vNegate
       reference: <testLibrary>::@getter::vNegate
       firstFragment: #F7
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vNegate
-    synthetic static vComplement
+    synthetic static isOriginVariable vComplement
       reference: <testLibrary>::@getter::vComplement
       firstFragment: #F8
       returnType: int
@@ -9482,17 +9482,17 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vSuper (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vSuper (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vSuper
           initializer: expression_0
             SuperExpression
               superKeyword: super @15
               staticType: InvalidType
       getters
-        #F2 synthetic vSuper (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable vSuper (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vSuper
   topLevelVariables
-    const hasInitializer vSuper
+    const hasImplicitType hasInitializer isOriginDeclaration vSuper
       reference: <testLibrary>::@topLevelVariable::vSuper
       firstFragment: #F1
       type: InvalidType
@@ -9501,7 +9501,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::vSuper
   getters
-    synthetic static vSuper
+    synthetic static isOriginVariable vSuper
       reference: <testLibrary>::@getter::vSuper
       firstFragment: #F2
       returnType: InvalidType
@@ -9520,17 +9520,17 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vThis (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vThis (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vThis
           initializer: expression_0
             ThisExpression
               thisKeyword: this @14
               staticType: dynamic
       getters
-        #F2 synthetic vThis (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable vThis (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vThis
   topLevelVariables
-    const hasInitializer vThis
+    const hasImplicitType hasInitializer isOriginDeclaration vThis
       reference: <testLibrary>::@topLevelVariable::vThis
       firstFragment: #F1
       type: dynamic
@@ -9539,7 +9539,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::vThis
   getters
-    synthetic static vThis
+    synthetic static isOriginVariable vThis
       reference: <testLibrary>::@getter::vThis
       firstFragment: #F2
       returnType: dynamic
@@ -9558,7 +9558,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer c (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration c (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::c
           initializer: expression_0
             ThrowExpression
@@ -9568,10 +9568,10 @@
                 staticType: int
               staticType: Never
       getters
-        #F2 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::c
   topLevelVariables
-    const hasInitializer c
+    const hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: Never
@@ -9580,7 +9580,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F2
       returnType: Never
@@ -9604,7 +9604,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vNull (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vNull (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vNull
           initializer: expression_0
             ListLiteral
@@ -9620,7 +9620,7 @@
               leftBracket: [ @26
               rightBracket: ] @27
               staticType: List<Null>
-        #F2 hasInitializer vDynamic (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F2 hasInitializer isOriginDeclaration vDynamic (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::vDynamic
           initializer: expression_1
             ListLiteral
@@ -9646,7 +9646,7 @@
                   staticType: int
               rightBracket: ] @70
               staticType: List<dynamic>
-        #F3 hasInitializer vInterfaceNoTypeParameters (nameOffset:79) (firstTokenOffset:79) (offset:79)
+        #F3 hasInitializer isOriginDeclaration vInterfaceNoTypeParameters (nameOffset:79) (firstTokenOffset:79) (offset:79)
           element: <testLibrary>::@topLevelVariable::vInterfaceNoTypeParameters
           initializer: expression_2
             ListLiteral
@@ -9672,7 +9672,7 @@
                   staticType: int
               rightBracket: ] @127
               staticType: List<int>
-        #F4 hasInitializer vInterfaceNoTypeArguments (nameOffset:136) (firstTokenOffset:136) (offset:136)
+        #F4 hasInitializer isOriginDeclaration vInterfaceNoTypeArguments (nameOffset:136) (firstTokenOffset:136) (offset:136)
           element: <testLibrary>::@topLevelVariable::vInterfaceNoTypeArguments
           initializer: expression_3
             ListLiteral
@@ -9688,7 +9688,7 @@
               leftBracket: [ @176
               rightBracket: ] @177
               staticType: List<List<dynamic>>
-        #F5 hasInitializer vInterfaceWithTypeArguments (nameOffset:186) (firstTokenOffset:186) (offset:186)
+        #F5 hasInitializer isOriginDeclaration vInterfaceWithTypeArguments (nameOffset:186) (firstTokenOffset:186) (offset:186)
           element: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
           initializer: expression_4
             ListLiteral
@@ -9712,7 +9712,7 @@
               leftBracket: [ @236
               rightBracket: ] @237
               staticType: List<List<String>>
-        #F6 hasInitializer vInterfaceWithTypeArguments2 (nameOffset:246) (firstTokenOffset:246) (offset:246)
+        #F6 hasInitializer isOriginDeclaration vInterfaceWithTypeArguments2 (nameOffset:246) (firstTokenOffset:246) (offset:246)
           element: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments2
           initializer: expression_5
             ListLiteral
@@ -9749,20 +9749,20 @@
               rightBracket: ] @308
               staticType: List<Map<int, List<String>>>
       getters
-        #F7 synthetic vNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F7 synthetic isOriginVariable vNull (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vNull
-        #F8 synthetic vDynamic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F8 synthetic isOriginVariable vDynamic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::vDynamic
-        #F9 synthetic vInterfaceNoTypeParameters (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
+        #F9 synthetic isOriginVariable vInterfaceNoTypeParameters (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
           element: <testLibrary>::@getter::vInterfaceNoTypeParameters
-        #F10 synthetic vInterfaceNoTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:136)
+        #F10 synthetic isOriginVariable vInterfaceNoTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:136)
           element: <testLibrary>::@getter::vInterfaceNoTypeArguments
-        #F11 synthetic vInterfaceWithTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:186)
+        #F11 synthetic isOriginVariable vInterfaceWithTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:186)
           element: <testLibrary>::@getter::vInterfaceWithTypeArguments
-        #F12 synthetic vInterfaceWithTypeArguments2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:246)
+        #F12 synthetic isOriginVariable vInterfaceWithTypeArguments2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:246)
           element: <testLibrary>::@getter::vInterfaceWithTypeArguments2
   topLevelVariables
-    const hasInitializer vNull
+    const hasImplicitType hasInitializer isOriginDeclaration vNull
       reference: <testLibrary>::@topLevelVariable::vNull
       firstFragment: #F1
       type: List<Null>
@@ -9770,7 +9770,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vNull
-    const hasInitializer vDynamic
+    const hasImplicitType hasInitializer isOriginDeclaration vDynamic
       reference: <testLibrary>::@topLevelVariable::vDynamic
       firstFragment: #F2
       type: List<dynamic>
@@ -9778,7 +9778,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vDynamic
-    const hasInitializer vInterfaceNoTypeParameters
+    const hasImplicitType hasInitializer isOriginDeclaration vInterfaceNoTypeParameters
       reference: <testLibrary>::@topLevelVariable::vInterfaceNoTypeParameters
       firstFragment: #F3
       type: List<int>
@@ -9786,7 +9786,7 @@
         fragment: #F3
         expression: expression_2
       getter: <testLibrary>::@getter::vInterfaceNoTypeParameters
-    const hasInitializer vInterfaceNoTypeArguments
+    const hasImplicitType hasInitializer isOriginDeclaration vInterfaceNoTypeArguments
       reference: <testLibrary>::@topLevelVariable::vInterfaceNoTypeArguments
       firstFragment: #F4
       type: List<List<dynamic>>
@@ -9794,7 +9794,7 @@
         fragment: #F4
         expression: expression_3
       getter: <testLibrary>::@getter::vInterfaceNoTypeArguments
-    const hasInitializer vInterfaceWithTypeArguments
+    const hasImplicitType hasInitializer isOriginDeclaration vInterfaceWithTypeArguments
       reference: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
       firstFragment: #F5
       type: List<List<String>>
@@ -9802,7 +9802,7 @@
         fragment: #F5
         expression: expression_4
       getter: <testLibrary>::@getter::vInterfaceWithTypeArguments
-    const hasInitializer vInterfaceWithTypeArguments2
+    const hasImplicitType hasInitializer isOriginDeclaration vInterfaceWithTypeArguments2
       reference: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments2
       firstFragment: #F6
       type: List<Map<int, List<String>>>
@@ -9811,32 +9811,32 @@
         expression: expression_5
       getter: <testLibrary>::@getter::vInterfaceWithTypeArguments2
   getters
-    synthetic static vNull
+    synthetic static isOriginVariable vNull
       reference: <testLibrary>::@getter::vNull
       firstFragment: #F7
       returnType: List<Null>
       variable: <testLibrary>::@topLevelVariable::vNull
-    synthetic static vDynamic
+    synthetic static isOriginVariable vDynamic
       reference: <testLibrary>::@getter::vDynamic
       firstFragment: #F8
       returnType: List<dynamic>
       variable: <testLibrary>::@topLevelVariable::vDynamic
-    synthetic static vInterfaceNoTypeParameters
+    synthetic static isOriginVariable vInterfaceNoTypeParameters
       reference: <testLibrary>::@getter::vInterfaceNoTypeParameters
       firstFragment: #F9
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::vInterfaceNoTypeParameters
-    synthetic static vInterfaceNoTypeArguments
+    synthetic static isOriginVariable vInterfaceNoTypeArguments
       reference: <testLibrary>::@getter::vInterfaceNoTypeArguments
       firstFragment: #F10
       returnType: List<List<dynamic>>
       variable: <testLibrary>::@topLevelVariable::vInterfaceNoTypeArguments
-    synthetic static vInterfaceWithTypeArguments
+    synthetic static isOriginVariable vInterfaceWithTypeArguments
       reference: <testLibrary>::@getter::vInterfaceWithTypeArguments
       firstFragment: #F11
       returnType: List<List<String>>
       variable: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
-    synthetic static vInterfaceWithTypeArguments2
+    synthetic static isOriginVariable vInterfaceWithTypeArguments2
       reference: <testLibrary>::@getter::vInterfaceWithTypeArguments2
       firstFragment: #F12
       returnType: List<Map<int, List<String>>>
@@ -9859,7 +9859,7 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             ListLiteral
@@ -9876,10 +9876,10 @@
               rightBracket: ] @37
               staticType: List<C>
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: List<C>
@@ -9888,7 +9888,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: List<C>
@@ -9914,7 +9914,7 @@
         <testLibraryFragment>::@prefix2::p
           fragments: @19
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             ListLiteral
@@ -9935,10 +9935,10 @@
               rightBracket: ] @44
               staticType: List<C>
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: List<C>
@@ -9947,7 +9947,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: List<C>
@@ -9970,7 +9970,7 @@
         #F1 F (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F2 hasInitializer v (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F2 hasInitializer isOriginDeclaration v (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             ListLiteral
@@ -9988,7 +9988,7 @@
               rightBracket: ] @46
               staticType: List<int Function(String)>
       getters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::v
   typeAliases
     F
@@ -9996,7 +9996,7 @@
       firstFragment: #F1
       aliasedType: int Function(String)
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F2
       type: List<int Function(String)>
@@ -10005,7 +10005,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F3
       returnType: List<int Function(String)>
@@ -10027,7 +10027,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vDynamic1 (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vDynamic1 (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vDynamic1
           initializer: expression_0
             SetOrMapLiteral
@@ -10048,7 +10048,7 @@
               rightBracket: } @39
               isMap: true
               staticType: Map<dynamic, int>
-        #F2 hasInitializer vDynamic2 (nameOffset:48) (firstTokenOffset:48) (offset:48)
+        #F2 hasInitializer isOriginDeclaration vDynamic2 (nameOffset:48) (firstTokenOffset:48) (offset:48)
           element: <testLibrary>::@topLevelVariable::vDynamic2
           initializer: expression_1
             SetOrMapLiteral
@@ -10069,7 +10069,7 @@
               rightBracket: } @81
               isMap: true
               staticType: Map<int, dynamic>
-        #F3 hasInitializer vInterface (nameOffset:90) (firstTokenOffset:90) (offset:90)
+        #F3 hasInitializer isOriginDeclaration vInterface (nameOffset:90) (firstTokenOffset:90) (offset:90)
           element: <testLibrary>::@topLevelVariable::vInterface
           initializer: expression_2
             SetOrMapLiteral
@@ -10090,7 +10090,7 @@
               rightBracket: } @123
               isMap: true
               staticType: Map<int, String>
-        #F4 hasInitializer vInterfaceWithTypeArguments (nameOffset:132) (firstTokenOffset:132) (offset:132)
+        #F4 hasInitializer isOriginDeclaration vInterfaceWithTypeArguments (nameOffset:132) (firstTokenOffset:132) (offset:132)
           element: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
           initializer: expression_3
             SetOrMapLiteral
@@ -10120,16 +10120,16 @@
               isMap: true
               staticType: Map<int, List<String>>
       getters
-        #F5 synthetic vDynamic1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable vDynamic1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vDynamic1
-        #F6 synthetic vDynamic2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F6 synthetic isOriginVariable vDynamic2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@getter::vDynamic2
-        #F7 synthetic vInterface (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+        #F7 synthetic isOriginVariable vInterface (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
           element: <testLibrary>::@getter::vInterface
-        #F8 synthetic vInterfaceWithTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:132)
+        #F8 synthetic isOriginVariable vInterfaceWithTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:132)
           element: <testLibrary>::@getter::vInterfaceWithTypeArguments
   topLevelVariables
-    const hasInitializer vDynamic1
+    const hasImplicitType hasInitializer isOriginDeclaration vDynamic1
       reference: <testLibrary>::@topLevelVariable::vDynamic1
       firstFragment: #F1
       type: Map<dynamic, int>
@@ -10137,7 +10137,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vDynamic1
-    const hasInitializer vDynamic2
+    const hasImplicitType hasInitializer isOriginDeclaration vDynamic2
       reference: <testLibrary>::@topLevelVariable::vDynamic2
       firstFragment: #F2
       type: Map<int, dynamic>
@@ -10145,7 +10145,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vDynamic2
-    const hasInitializer vInterface
+    const hasImplicitType hasInitializer isOriginDeclaration vInterface
       reference: <testLibrary>::@topLevelVariable::vInterface
       firstFragment: #F3
       type: Map<int, String>
@@ -10153,7 +10153,7 @@
         fragment: #F3
         expression: expression_2
       getter: <testLibrary>::@getter::vInterface
-    const hasInitializer vInterfaceWithTypeArguments
+    const hasImplicitType hasInitializer isOriginDeclaration vInterfaceWithTypeArguments
       reference: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
       firstFragment: #F4
       type: Map<int, List<String>>
@@ -10162,22 +10162,22 @@
         expression: expression_3
       getter: <testLibrary>::@getter::vInterfaceWithTypeArguments
   getters
-    synthetic static vDynamic1
+    synthetic static isOriginVariable vDynamic1
       reference: <testLibrary>::@getter::vDynamic1
       firstFragment: #F5
       returnType: Map<dynamic, int>
       variable: <testLibrary>::@topLevelVariable::vDynamic1
-    synthetic static vDynamic2
+    synthetic static isOriginVariable vDynamic2
       reference: <testLibrary>::@getter::vDynamic2
       firstFragment: #F6
       returnType: Map<int, dynamic>
       variable: <testLibrary>::@topLevelVariable::vDynamic2
-    synthetic static vInterface
+    synthetic static isOriginVariable vInterface
       reference: <testLibrary>::@getter::vInterface
       firstFragment: #F7
       returnType: Map<int, String>
       variable: <testLibrary>::@topLevelVariable::vInterface
-    synthetic static vInterfaceWithTypeArguments
+    synthetic static isOriginVariable vInterfaceWithTypeArguments
       reference: <testLibrary>::@getter::vInterfaceWithTypeArguments
       firstFragment: #F8
       returnType: Map<int, List<String>>
@@ -10198,7 +10198,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vDynamic1 (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration vDynamic1 (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::vDynamic1
           initializer: expression_0
             SetOrMapLiteral
@@ -10215,7 +10215,7 @@
               rightBracket: } @34
               isMap: false
               staticType: Set<dynamic>
-        #F2 hasInitializer vInterface (nameOffset:43) (firstTokenOffset:43) (offset:43)
+        #F2 hasInitializer isOriginDeclaration vInterface (nameOffset:43) (firstTokenOffset:43) (offset:43)
           element: <testLibrary>::@topLevelVariable::vInterface
           initializer: expression_1
             SetOrMapLiteral
@@ -10232,7 +10232,7 @@
               rightBracket: } @68
               isMap: false
               staticType: Set<int>
-        #F3 hasInitializer vInterfaceWithTypeArguments (nameOffset:77) (firstTokenOffset:77) (offset:77)
+        #F3 hasInitializer isOriginDeclaration vInterfaceWithTypeArguments (nameOffset:77) (firstTokenOffset:77) (offset:77)
           element: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
           initializer: expression_2
             SetOrMapLiteral
@@ -10258,14 +10258,14 @@
               isMap: false
               staticType: Set<List<String>>
       getters
-        #F4 synthetic vDynamic1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable vDynamic1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::vDynamic1
-        #F5 synthetic vInterface (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+        #F5 synthetic isOriginVariable vInterface (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
           element: <testLibrary>::@getter::vInterface
-        #F6 synthetic vInterfaceWithTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+        #F6 synthetic isOriginVariable vInterfaceWithTypeArguments (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
           element: <testLibrary>::@getter::vInterfaceWithTypeArguments
   topLevelVariables
-    const hasInitializer vDynamic1
+    const hasImplicitType hasInitializer isOriginDeclaration vDynamic1
       reference: <testLibrary>::@topLevelVariable::vDynamic1
       firstFragment: #F1
       type: Set<dynamic>
@@ -10273,7 +10273,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::vDynamic1
-    const hasInitializer vInterface
+    const hasImplicitType hasInitializer isOriginDeclaration vInterface
       reference: <testLibrary>::@topLevelVariable::vInterface
       firstFragment: #F2
       type: Set<int>
@@ -10281,7 +10281,7 @@
         fragment: #F2
         expression: expression_1
       getter: <testLibrary>::@getter::vInterface
-    const hasInitializer vInterfaceWithTypeArguments
+    const hasImplicitType hasInitializer isOriginDeclaration vInterfaceWithTypeArguments
       reference: <testLibrary>::@topLevelVariable::vInterfaceWithTypeArguments
       firstFragment: #F3
       type: Set<List<String>>
@@ -10290,17 +10290,17 @@
         expression: expression_2
       getter: <testLibrary>::@getter::vInterfaceWithTypeArguments
   getters
-    synthetic static vDynamic1
+    synthetic static isOriginVariable vDynamic1
       reference: <testLibrary>::@getter::vDynamic1
       firstFragment: #F4
       returnType: Set<dynamic>
       variable: <testLibrary>::@topLevelVariable::vDynamic1
-    synthetic static vInterface
+    synthetic static isOriginVariable vInterface
       reference: <testLibrary>::@getter::vInterface
       firstFragment: #F5
       returnType: Set<int>
       variable: <testLibrary>::@topLevelVariable::vInterface
-    synthetic static vInterfaceWithTypeArguments
+    synthetic static isOriginVariable vInterfaceWithTypeArguments
       reference: <testLibrary>::@getter::vInterfaceWithTypeArguments
       firstFragment: #F6
       returnType: Set<List<String>>
@@ -10319,7 +10319,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             ListLiteral
@@ -10338,10 +10338,10 @@
               rightBracket: ] @24
               staticType: List<int>
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: List<int>
@@ -10350,7 +10350,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: List<int>
@@ -10369,7 +10369,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             SetOrMapLiteral
@@ -10401,10 +10401,10 @@
               isMap: true
               staticType: Map<int, String>
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Map<int, String>
@@ -10413,7 +10413,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Map<int, String>
@@ -10432,7 +10432,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             SetOrMapLiteral
@@ -10452,10 +10452,10 @@
               isMap: false
               staticType: Set<int>
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Set<int>
@@ -10464,7 +10464,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Set<int>
@@ -10483,7 +10483,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             TypeLiteral
@@ -10501,10 +10501,10 @@
                 type: List<int>
               staticType: Type
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Type
@@ -10513,7 +10513,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Type
@@ -10538,7 +10538,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer a (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -10552,7 +10552,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer b (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -10566,7 +10566,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 hasInitializer c (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F4 hasInitializer isOriginDeclaration c (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::c
               initializer: expression_2
                 InstanceCreationExpression
@@ -10580,7 +10580,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -10601,31 +10601,31 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::E::@getter::a
-            #F8 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::b
-            #F9 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F9 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::c
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F11 hasInitializer vValue (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F11 hasInitializer isOriginDeclaration vValue (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::vValue
-        #F12 hasInitializer vValues (nameOffset:43) (firstTokenOffset:43) (offset:43)
+        #F12 hasInitializer isOriginDeclaration vValues (nameOffset:43) (firstTokenOffset:43) (offset:43)
           element: <testLibrary>::@topLevelVariable::vValues
-        #F13 hasInitializer vIndex (nameOffset:69) (firstTokenOffset:69) (offset:69)
+        #F13 hasInitializer isOriginDeclaration vIndex (nameOffset:69) (firstTokenOffset:69) (offset:69)
           element: <testLibrary>::@topLevelVariable::vIndex
       getters
-        #F14 synthetic vValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F14 synthetic isOriginVariable vValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::vValue
-        #F15 synthetic vValues (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+        #F15 synthetic isOriginVariable vValues (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
           element: <testLibrary>::@getter::vValues
-        #F16 synthetic vIndex (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+        #F16 synthetic isOriginVariable vIndex (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
           element: <testLibrary>::@getter::vIndex
   enums
     enum E
@@ -10633,7 +10633,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F2
           type: E
@@ -10641,7 +10641,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F3
           type: E
@@ -10649,7 +10649,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        static const enumConstant hasInitializer c
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@enum::E::@field::c
           firstFragment: #F4
           type: E
@@ -10657,7 +10657,7 @@
             fragment: #F4
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::c
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -10666,58 +10666,58 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static c
+        synthetic static isOriginVariable c
           reference: <testLibrary>::@enum::E::@getter::c
           firstFragment: #F9
           returnType: E
           variable: <testLibrary>::@enum::E::@field::c
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    final hasInitializer vValue
+    final hasImplicitType hasInitializer isOriginDeclaration vValue
       reference: <testLibrary>::@topLevelVariable::vValue
       firstFragment: #F11
       type: E
       getter: <testLibrary>::@getter::vValue
-    final hasInitializer vValues
+    final hasImplicitType hasInitializer isOriginDeclaration vValues
       reference: <testLibrary>::@topLevelVariable::vValues
       firstFragment: #F12
       type: List<E>
       getter: <testLibrary>::@getter::vValues
-    final hasInitializer vIndex
+    final hasImplicitType hasInitializer isOriginDeclaration vIndex
       reference: <testLibrary>::@topLevelVariable::vIndex
       firstFragment: #F13
       type: int
       getter: <testLibrary>::@getter::vIndex
   getters
-    synthetic static vValue
+    synthetic static isOriginVariable vValue
       reference: <testLibrary>::@getter::vValue
       firstFragment: #F14
       returnType: E
       variable: <testLibrary>::@topLevelVariable::vValue
-    synthetic static vValues
+    synthetic static isOriginVariable vValues
       reference: <testLibrary>::@getter::vValues
       firstFragment: #F15
       returnType: List<E>
       variable: <testLibrary>::@topLevelVariable::vValues
-    synthetic static vIndex
+    synthetic static isOriginVariable vIndex
       reference: <testLibrary>::@getter::vIndex
       firstFragment: #F16
       returnType: int
@@ -10740,7 +10740,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer a (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -10754,7 +10754,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10767,19 +10767,19 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::E::@getter::a
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F7 hasInitializer vToString (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F7 hasInitializer isOriginDeclaration vToString (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::vToString
       getters
-        #F8 synthetic vToString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F8 synthetic isOriginVariable vToString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::vToString
   enums
     enum E
@@ -10787,7 +10787,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F2
           type: E
@@ -10795,7 +10795,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -10804,28 +10804,28 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    final hasInitializer vToString
+    final hasImplicitType hasInitializer isOriginDeclaration vToString
       reference: <testLibrary>::@topLevelVariable::vToString
       firstFragment: #F7
       type: String
       getter: <testLibrary>::@getter::vToString
   getters
-    synthetic static vToString
+    synthetic static isOriginVariable vToString
       reference: <testLibrary>::@getter::vToString
       firstFragment: #F8
       returnType: String
@@ -10850,34 +10850,34 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer a (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::a
               initializer: expression_0
                 SimpleIdentifier
                   token: b @29
                   element: <testLibrary>::@class::C::@getter::b
                   staticType: dynamic
-            #F3 hasInitializer b (nameOffset:47) (firstTokenOffset:47) (offset:47)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:47) (firstTokenOffset:47) (offset:47)
               element: <testLibrary>::@class::C::@field::b
               initializer: expression_1
                 NullLiteral
                   literal: null @51
                   staticType: Null
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::a
-            #F6 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F6 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@class::C::@getter::b
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer a
+        static const hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::C::@field::a
           firstFragment: #F2
           type: dynamic
@@ -10885,7 +10885,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::a
-        static const hasInitializer b
+        static const hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@class::C::@field::b
           firstFragment: #F3
           type: dynamic
@@ -10894,16 +10894,16 @@
             expression: expression_1
           getter: <testLibrary>::@class::C::@getter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::C::@getter::a
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@class::C::@getter::b
           firstFragment: #F6
           returnType: dynamic
@@ -10928,7 +10928,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer a (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::C::@field::a
               initializer: expression_0
                 SimpleIdentifier
@@ -10936,11 +10936,11 @@
                   element: <testLibrary>::@class::C::@method::m
                   staticType: dynamic Function()
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@getter::a
           methods
             #F5 m (nameOffset:41) (firstTokenOffset:34) (offset:41)
@@ -10950,7 +10950,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static const hasInitializer a
+        static const hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::C::@field::a
           firstFragment: #F2
           type: dynamic Function()
@@ -10959,11 +10959,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::C::@getter::a
           firstFragment: #F4
           returnType: dynamic Function()
diff --git a/pkg/analyzer/test/src/summary/elements/default_value_test.dart b/pkg/analyzer/test/src/summary/elements/default_value_test.dart
index 2a33990..e6fa334 100644
--- a/pkg/analyzer/test/src/summary/elements/default_value_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/default_value_test.dart
@@ -35,7 +35,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -58,7 +58,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -98,10 +98,10 @@
         #F1 class X (nameOffset:57) (firstTokenOffset:51) (offset:57)
           element: <testLibrary>::@class::X
           fields
-            #F2 f (nameOffset:71) (firstTokenOffset:71) (offset:71)
+            #F2 isOriginDeclaration f (nameOffset:71) (firstTokenOffset:71) (offset:71)
               element: <testLibrary>::@class::X::@field::f
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:76) (offset:82)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:76) (offset:82)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
               typeNameOffset: 82
@@ -118,7 +118,7 @@
                       typeArgumentTypes
                         dynamic
           getters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@class::X::@getter::f
       typeAliases
         #F6 F (nameOffset:13) (firstTokenOffset:0) (offset:13)
@@ -140,7 +140,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F1
       fields
-        final f
+        final isOriginDeclaration f
           reference: <testLibrary>::@class::X::@field::f
           firstFragment: #F2
           type: void Function(dynamic)
@@ -149,7 +149,7 @@
                 dynamic
           getter: <testLibrary>::@class::X::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -164,7 +164,7 @@
                 expression: expression_0
               field: <testLibrary>::@class::X::@field::f
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::X::@getter::f
           firstFragment: #F5
           returnType: void Function(dynamic)
@@ -217,14 +217,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
         #F4 class B (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -247,7 +247,7 @@
                                 parameters: FormalParameterList
                                   leftParenthesis: ( @69
                                   rightParenthesis: ) @70
-                                declaredElement: GenericFunctionTypeElement
+                                declaredFragment: GenericFunctionTypeElement
                                   parameters
                                   returnType: dynamic
                                   type: dynamic Function()
@@ -270,14 +270,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
       methods
@@ -597,7 +597,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       extensions
@@ -621,7 +621,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   extensions
@@ -673,14 +673,14 @@
             #F3 T2 (nameOffset:12) (firstTokenOffset:12) (offset:12)
               element: #E1 T2
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:20) (offset:26)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:20) (offset:26)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 26
         #F5 class C (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -714,14 +714,14 @@
         #E1 T2
           firstFragment: #F3
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
       methods
@@ -761,7 +761,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 21
@@ -771,7 +771,7 @@
             #F5 T (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: #E1 T
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:43) (offset:49)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:43) (offset:49)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 49
@@ -801,7 +801,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
     class C
@@ -811,7 +811,7 @@
         #E1 T
           firstFragment: #F5
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -847,7 +847,7 @@
             #F2 T (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:29) (firstTokenOffset:23) (offset:29)
@@ -856,7 +856,7 @@
             #F5 T (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: #E1 T
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:54) (offset:60)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:54) (offset:60)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 60
@@ -866,7 +866,7 @@
             #F8 T (nameOffset:75) (firstTokenOffset:75) (offset:75)
               element: #E2 T
           constructors
-            #F9 const new (nameOffset:<null>) (firstTokenOffset:108) (offset:114)
+            #F9 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:108) (offset:114)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 114
@@ -896,7 +896,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -908,7 +908,7 @@
       interfaces
         A<T>
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
     class C
@@ -920,7 +920,7 @@
       interfaces
         A<Iterable<T>>
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F9
           formalParameters
@@ -953,7 +953,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 21
@@ -989,7 +989,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
   functions
@@ -1032,14 +1032,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 21
         #F4 class C (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -1074,14 +1074,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
       methods
@@ -1126,7 +1126,7 @@
             #F3 T2 (nameOffset:12) (firstTokenOffset:12) (offset:12)
               element: #E1 T2
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:20) (offset:26)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:20) (offset:26)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 26
@@ -1136,7 +1136,7 @@
             #F6 E1 (nameOffset:41) (firstTokenOffset:41) (offset:41)
               element: #E2 E1
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -1173,7 +1173,7 @@
         #E1 T2
           firstFragment: #F3
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
@@ -1183,7 +1183,7 @@
         #E2 E1
           firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F7
       methods
@@ -1227,7 +1227,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 21
@@ -1237,7 +1237,7 @@
             #F5 T (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -1269,7 +1269,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F3
     class C
@@ -1279,7 +1279,7 @@
         #E1 T
           firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
       methods
diff --git a/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart b/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
index 2ce536e..aa4b456e 100644
--- a/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
@@ -44,13 +44,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A::@def::0
           fields
-            #F2 hasInitializer f01 (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration f01 (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@def::0::@field::f01
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @31
                   staticType: int
-            #F3 hasInitializer f02 (nameOffset:49) (firstTokenOffset:49) (offset:49)
+            #F3 hasInitializer isOriginDeclaration f02 (nameOffset:49) (firstTokenOffset:49) (offset:49)
               element: <testLibrary>::@class::A::@def::0::@field::f02
               initializer: expression_1
                 SimpleIdentifier
@@ -58,24 +58,24 @@
                   element: <testLibrary>::@class::A::@def::0::@getter::f01
                   staticType: int
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@def::0::@constructor::new
               typeName: A
           getters
-            #F5 synthetic f01 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable f01 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@def::0::@getter::f01
-            #F6 synthetic f02 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginVariable f02 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::A::@def::0::@getter::f02
         #F7 class A (nameOffset:69) (firstTokenOffset:63) (offset:69)
           element: <testLibrary>::@class::A::@def::1
           fields
-            #F8 hasInitializer f11 (nameOffset:88) (firstTokenOffset:88) (offset:88)
+            #F8 hasInitializer isOriginDeclaration f11 (nameOffset:88) (firstTokenOffset:88) (offset:88)
               element: <testLibrary>::@class::A::@def::1::@field::f11
               initializer: expression_2
                 IntegerLiteral
                   literal: 0 @94
                   staticType: int
-            #F9 hasInitializer f12 (nameOffset:112) (firstTokenOffset:112) (offset:112)
+            #F9 hasInitializer isOriginDeclaration f12 (nameOffset:112) (firstTokenOffset:112) (offset:112)
               element: <testLibrary>::@class::A::@def::1::@field::f12
               initializer: expression_3
                 SimpleIdentifier
@@ -83,24 +83,24 @@
                   element: <testLibrary>::@class::A::@def::1::@getter::f11
                   staticType: int
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@class::A::@def::1::@constructor::new
               typeName: A
           getters
-            #F11 synthetic f11 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
+            #F11 synthetic isOriginVariable f11 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
               element: <testLibrary>::@class::A::@def::1::@getter::f11
-            #F12 synthetic f12 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
+            #F12 synthetic isOriginVariable f12 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
               element: <testLibrary>::@class::A::@def::1::@getter::f12
         #F13 class A (nameOffset:132) (firstTokenOffset:126) (offset:132)
           element: <testLibrary>::@class::A::@def::2
           fields
-            #F14 hasInitializer f21 (nameOffset:151) (firstTokenOffset:151) (offset:151)
+            #F14 hasInitializer isOriginDeclaration f21 (nameOffset:151) (firstTokenOffset:151) (offset:151)
               element: <testLibrary>::@class::A::@def::2::@field::f21
               initializer: expression_4
                 IntegerLiteral
                   literal: 0 @157
                   staticType: int
-            #F15 hasInitializer f22 (nameOffset:175) (firstTokenOffset:175) (offset:175)
+            #F15 hasInitializer isOriginDeclaration f22 (nameOffset:175) (firstTokenOffset:175) (offset:175)
               element: <testLibrary>::@class::A::@def::2::@field::f22
               initializer: expression_5
                 SimpleIdentifier
@@ -108,20 +108,20 @@
                   element: <testLibrary>::@class::A::@def::2::@getter::f21
                   staticType: int
           constructors
-            #F16 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:132)
+            #F16 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:132)
               element: <testLibrary>::@class::A::@def::2::@constructor::new
               typeName: A
           getters
-            #F17 synthetic f21 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:151)
+            #F17 synthetic isOriginVariable f21 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:151)
               element: <testLibrary>::@class::A::@def::2::@getter::f21
-            #F18 synthetic f22 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:175)
+            #F18 synthetic isOriginVariable f22 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:175)
               element: <testLibrary>::@class::A::@def::2::@getter::f22
   classes
     class A
       reference: <testLibrary>::@class::A::@def::0
       firstFragment: #F1
       fields
-        static const hasInitializer f01
+        static const hasImplicitType hasInitializer isOriginDeclaration f01
           reference: <testLibrary>::@class::A::@def::0::@field::f01
           firstFragment: #F2
           type: int
@@ -129,7 +129,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@class::A::@def::0::@getter::f01
-        static const hasInitializer f02
+        static const hasImplicitType hasInitializer isOriginDeclaration f02
           reference: <testLibrary>::@class::A::@def::0::@field::f02
           firstFragment: #F3
           type: int
@@ -138,16 +138,16 @@
             expression: expression_1
           getter: <testLibrary>::@class::A::@def::0::@getter::f02
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::0::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static f01
+        synthetic static isOriginVariable f01
           reference: <testLibrary>::@class::A::@def::0::@getter::f01
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@def::0::@field::f01
-        synthetic static f02
+        synthetic static isOriginVariable f02
           reference: <testLibrary>::@class::A::@def::0::@getter::f02
           firstFragment: #F6
           returnType: int
@@ -156,7 +156,7 @@
       reference: <testLibrary>::@class::A::@def::1
       firstFragment: #F7
       fields
-        static const hasInitializer f11
+        static const hasImplicitType hasInitializer isOriginDeclaration f11
           reference: <testLibrary>::@class::A::@def::1::@field::f11
           firstFragment: #F8
           type: int
@@ -164,7 +164,7 @@
             fragment: #F8
             expression: expression_2
           getter: <testLibrary>::@class::A::@def::1::@getter::f11
-        static const hasInitializer f12
+        static const hasImplicitType hasInitializer isOriginDeclaration f12
           reference: <testLibrary>::@class::A::@def::1::@field::f12
           firstFragment: #F9
           type: int
@@ -173,16 +173,16 @@
             expression: expression_3
           getter: <testLibrary>::@class::A::@def::1::@getter::f12
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::1::@constructor::new
           firstFragment: #F10
       getters
-        synthetic static f11
+        synthetic static isOriginVariable f11
           reference: <testLibrary>::@class::A::@def::1::@getter::f11
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@class::A::@def::1::@field::f11
-        synthetic static f12
+        synthetic static isOriginVariable f12
           reference: <testLibrary>::@class::A::@def::1::@getter::f12
           firstFragment: #F12
           returnType: int
@@ -191,7 +191,7 @@
       reference: <testLibrary>::@class::A::@def::2
       firstFragment: #F13
       fields
-        static const hasInitializer f21
+        static const hasImplicitType hasInitializer isOriginDeclaration f21
           reference: <testLibrary>::@class::A::@def::2::@field::f21
           firstFragment: #F14
           type: int
@@ -199,7 +199,7 @@
             fragment: #F14
             expression: expression_4
           getter: <testLibrary>::@class::A::@def::2::@getter::f21
-        static const hasInitializer f22
+        static const hasImplicitType hasInitializer isOriginDeclaration f22
           reference: <testLibrary>::@class::A::@def::2::@field::f22
           firstFragment: #F15
           type: int
@@ -208,16 +208,16 @@
             expression: expression_5
           getter: <testLibrary>::@class::A::@def::2::@getter::f22
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@def::2::@constructor::new
           firstFragment: #F16
       getters
-        synthetic static f21
+        synthetic static isOriginVariable f21
           reference: <testLibrary>::@class::A::@def::2::@getter::f21
           firstFragment: #F17
           returnType: int
           variable: <testLibrary>::@class::A::@def::2::@field::f21
-        synthetic static f22
+        synthetic static isOriginVariable f22
           reference: <testLibrary>::@class::A::@def::2::@getter::f22
           firstFragment: #F18
           returnType: int
@@ -243,12 +243,12 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 named (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration named (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::A::@constructor::named::@def::0
               typeName: A
               typeNameOffset: 12
               periodOffset: 13
-            #F3 named (nameOffset:27) (firstTokenOffset:25) (offset:27)
+            #F3 isOriginDeclaration named (nameOffset:27) (firstTokenOffset:25) (offset:27)
               element: <testLibrary>::@class::A::@constructor::named::@def::1
               typeName: A
               typeNameOffset: 25
@@ -258,10 +258,10 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named::@def::0
           firstFragment: #F2
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named::@def::1
           firstFragment: #F3
 ''');
@@ -284,26 +284,26 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo::@def::0
-            #F3 foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
+            #F3 isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: <testLibrary>::@class::A::@field::foo::@def::1
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo::@def::0
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::A::@getter::foo::@def::1
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo::@def::0
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::A::@setter::foo::@def::0::@formalParameter::value
-            #F9 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::A::@setter::foo::@def::1
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
@@ -313,35 +313,35 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo::@def::0
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo::@def::0
           setter: <testLibrary>::@class::A::@setter::foo::@def::0
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo::@def::1
           firstFragment: #F3
           type: double
           getter: <testLibrary>::@class::A::@getter::foo::@def::1
           setter: <testLibrary>::@class::A::@setter::foo::@def::1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo::@def::0
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo::@def::0
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo::@def::1
           firstFragment: #F6
           returnType: double
           variable: <testLibrary>::@class::A::@field::foo::@def::1
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo::@def::0
           firstFragment: #F7
           formalParameters
@@ -350,7 +350,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::foo::@def::0
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo::@def::1
           firstFragment: #F9
           formalParameters
@@ -380,7 +380,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -393,7 +393,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -426,25 +426,25 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class X (nameOffset:28) (firstTokenOffset:22) (offset:28)
           element: <testLibrary>::@class::X::@def::0
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F6 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::X::@def::0::@constructor::new
               typeName: X
         #F7 class X (nameOffset:48) (firstTokenOffset:42) (offset:48)
           element: <testLibrary>::@class::X::@def::1
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F8 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::X::@def::1::@constructor::new
               typeName: X
       mixins
@@ -455,14 +455,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class alias X
@@ -472,7 +472,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::X::@def::0::@constructor::new
           firstFragment: #F6
           constantInitializers
@@ -490,7 +490,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::X::@def::1::@constructor::new
           firstFragment: #F8
           constantInitializers
@@ -526,7 +526,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E::@def::0
           fields
-            #F2 hasInitializer a (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::E::@def::0::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -540,7 +540,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer b (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@def::0::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -554,7 +554,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@def::0::@field::values
               initializer: expression_2
                 ListLiteral
@@ -571,20 +571,20 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@def::0::@constructor::new
               typeName: E
           getters
-            #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::E::@def::0::@getter::a
-            #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@def::0::@getter::b
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@def::0::@getter::values
         #F9 enum E (nameOffset:19) (firstTokenOffset:14) (offset:19)
           element: <testLibrary>::@enum::E::@def::1
           fields
-            #F10 hasInitializer c (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F10 hasInitializer isOriginDeclaration c (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@enum::E::@def::1::@field::c
               initializer: expression_3
                 InstanceCreationExpression
@@ -598,7 +598,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F11 hasInitializer d (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F11 hasInitializer isOriginDeclaration d (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::E::@def::1::@field::d
               initializer: expression_4
                 InstanceCreationExpression
@@ -612,7 +612,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F12 hasInitializer e (nameOffset:28) (firstTokenOffset:28) (offset:28)
+            #F12 hasInitializer isOriginDeclaration e (nameOffset:28) (firstTokenOffset:28) (offset:28)
               element: <testLibrary>::@enum::E::@def::1::@field::e
               initializer: expression_5
                 InstanceCreationExpression
@@ -626,7 +626,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F13 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F13 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@def::1::@field::values
               initializer: expression_6
                 ListLiteral
@@ -647,17 +647,17 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F14 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F14 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@def::1::@constructor::new
               typeName: E
           getters
-            #F15 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F15 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@def::1::@getter::c
-            #F16 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F16 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::E::@def::1::@getter::d
-            #F17 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F17 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@enum::E::@def::1::@getter::e
-            #F18 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F18 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@def::1::@getter::values
   enums
     enum E
@@ -665,7 +665,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@def::0::@field::a
           firstFragment: #F2
           type: E
@@ -673,7 +673,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@def::0::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@def::0::@field::b
           firstFragment: #F3
           type: E
@@ -681,7 +681,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@def::0::@getter::b
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@def::0::@field::values
           firstFragment: #F4
           type: List<E>
@@ -690,21 +690,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@def::0::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@def::0::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@def::0::@getter::a
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@def::0::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@def::0::@getter::b
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@def::0::@field::b
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@def::0::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -714,7 +714,7 @@
       firstFragment: #F9
       supertype: Enum
       fields
-        static const enumConstant hasInitializer c
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@enum::E::@def::1::@field::c
           firstFragment: #F10
           type: E
@@ -722,7 +722,7 @@
             fragment: #F10
             expression: expression_3
           getter: <testLibrary>::@enum::E::@def::1::@getter::c
-        static const enumConstant hasInitializer d
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration d
           reference: <testLibrary>::@enum::E::@def::1::@field::d
           firstFragment: #F11
           type: E
@@ -730,7 +730,7 @@
             fragment: #F11
             expression: expression_4
           getter: <testLibrary>::@enum::E::@def::1::@getter::d
-        static const enumConstant hasInitializer e
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration e
           reference: <testLibrary>::@enum::E::@def::1::@field::e
           firstFragment: #F12
           type: E
@@ -738,7 +738,7 @@
             fragment: #F12
             expression: expression_5
           getter: <testLibrary>::@enum::E::@def::1::@getter::e
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@def::1::@field::values
           firstFragment: #F13
           type: List<E>
@@ -747,26 +747,26 @@
             expression: expression_6
           getter: <testLibrary>::@enum::E::@def::1::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@def::1::@constructor::new
           firstFragment: #F14
       getters
-        synthetic static c
+        synthetic static isOriginVariable c
           reference: <testLibrary>::@enum::E::@def::1::@getter::c
           firstFragment: #F15
           returnType: E
           variable: <testLibrary>::@enum::E::@def::1::@field::c
-        synthetic static d
+        synthetic static isOriginVariable d
           reference: <testLibrary>::@enum::E::@def::1::@getter::d
           firstFragment: #F16
           returnType: E
           variable: <testLibrary>::@enum::E::@def::1::@field::d
-        synthetic static e
+        synthetic static isOriginVariable e
           reference: <testLibrary>::@enum::E::@def::1::@getter::e
           firstFragment: #F17
           returnType: E
           variable: <testLibrary>::@enum::E::@def::1::@field::e
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@def::1::@getter::values
           firstFragment: #F18
           returnType: List<E>
@@ -797,13 +797,13 @@
         #F2 extension E (nameOffset:32) (firstTokenOffset:22) (offset:32)
           element: <testLibrary>::@extension::E::@def::1
           fields
-            #F3 x (nameOffset:56) (firstTokenOffset:56) (offset:56)
+            #F3 isOriginDeclaration x (nameOffset:56) (firstTokenOffset:56) (offset:56)
               element: <testLibrary>::@extension::E::@def::1::@field::x
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@extension::E::@def::1::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@extension::E::@def::1::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
@@ -811,13 +811,13 @@
         #F7 extension E (nameOffset:71) (firstTokenOffset:61) (offset:71)
           element: <testLibrary>::@extension::E::@def::2
           fields
-            #F8 hasInitializer y (nameOffset:95) (firstTokenOffset:95) (offset:95)
+            #F8 hasInitializer isOriginDeclaration y (nameOffset:95) (firstTokenOffset:95) (offset:95)
               element: <testLibrary>::@extension::E::@def::2::@field::y
           getters
-            #F9 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
+            #F9 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
               element: <testLibrary>::@extension::E::@def::2::@getter::y
           setters
-            #F10 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
+            #F10 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
               element: <testLibrary>::@extension::E::@def::2::@setter::y
               formalParameters
                 #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
@@ -834,20 +834,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static x
+        static hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@extension::E::@def::1::@field::x
           firstFragment: #F3
           type: dynamic
           getter: <testLibrary>::@extension::E::@def::1::@getter::x
           setter: <testLibrary>::@extension::E::@def::1::@setter::x
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@extension::E::@def::1::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@extension::E::@def::1::@field::x
       setters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@extension::E::@def::1::@setter::x
           firstFragment: #F5
           formalParameters
@@ -862,20 +862,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer y
+        static hasImplicitType hasInitializer isOriginDeclaration y
           reference: <testLibrary>::@extension::E::@def::2::@field::y
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@extension::E::@def::2::@getter::y
           setter: <testLibrary>::@extension::E::@def::2::@setter::y
       getters
-        synthetic static y
+        synthetic static isOriginVariable y
           reference: <testLibrary>::@extension::E::@def::2::@getter::y
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@extension::E::@def::2::@field::y
       setters
-        synthetic static y
+        synthetic static isOriginVariable y
           reference: <testLibrary>::@extension::E::@def::2::@setter::y
           firstFragment: #F10
           formalParameters
@@ -903,10 +903,10 @@
         #F1 extension type E (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::E::@def::0
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::E::@def::0::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::E::@def::0::@constructor::new
               typeName: E
               typeNameOffset: 15
@@ -914,15 +914,15 @@
                 #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
                   element: <testLibrary>::@extensionType::E::@def::0::@constructor::new::@formalParameter::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::E::@def::0::@getter::it
         #F6 extension type E (nameOffset:43) (firstTokenOffset:28) (offset:43)
           element: <testLibrary>::@extensionType::E::@def::1
           fields
-            #F7 it (nameOffset:52) (firstTokenOffset:45) (offset:52)
+            #F7 isOriginDeclaringFormalParameter it (nameOffset:52) (firstTokenOffset:45) (offset:52)
               element: <testLibrary>::@extensionType::E::@def::1::@field::it
           constructors
-            #F8 new (nameOffset:<null>) (firstTokenOffset:43) (offset:43)
+            #F8 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:43) (offset:43)
               element: <testLibrary>::@extensionType::E::@def::1::@constructor::new
               typeName: E
               typeNameOffset: 43
@@ -930,7 +930,7 @@
                 #F9 requiredPositional final this.it (nameOffset:52) (firstTokenOffset:45) (offset:52)
                   element: <testLibrary>::@extensionType::E::@def::1::@constructor::new::@formalParameter::it
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@extensionType::E::@def::1::@getter::it
   extensionTypes
     extension type E
@@ -940,22 +940,23 @@
       primaryConstructor: <testLibrary>::@extensionType::E::@def::0::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::E::@def::0::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::E::@def::0::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::E::@def::0::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::E::@def::0::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
               field: <testLibrary>::@extensionType::E::@def::0::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::E::@def::0::@getter::it
           firstFragment: #F5
           returnType: int
@@ -967,22 +968,23 @@
       primaryConstructor: <testLibrary>::@extensionType::E::@def::1::@constructor::new
       typeErasure: double
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::E::@def::1::@field::it
           firstFragment: #F7
           type: double
           getter: <testLibrary>::@extensionType::E::@def::1::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::E::@def::1::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::E::@def::1::@constructor::new
           firstFragment: #F8
           formalParameters
-            #E1 requiredPositional final hasImplicitType this.it
+            #E1 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F9
               type: double
               field: <testLibrary>::@extensionType::E::@def::1::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::E::@def::1::@getter::it
           firstFragment: #F10
           returnType: double
@@ -1138,13 +1140,13 @@
         #F2 mixin A (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@mixin::A::@def::1
           fields
-            #F3 x (nameOffset:27) (firstTokenOffset:27) (offset:27)
+            #F3 isOriginDeclaration x (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@mixin::A::@def::1::@field::x
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@mixin::A::@def::1::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@mixin::A::@def::1::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
@@ -1152,13 +1154,13 @@
         #F7 mixin A (nameOffset:38) (firstTokenOffset:32) (offset:38)
           element: <testLibrary>::@mixin::A::@def::2
           fields
-            #F8 hasInitializer y (nameOffset:48) (firstTokenOffset:48) (offset:48)
+            #F8 hasInitializer isOriginDeclaration y (nameOffset:48) (firstTokenOffset:48) (offset:48)
               element: <testLibrary>::@mixin::A::@def::2::@field::y
           getters
-            #F9 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F9 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@mixin::A::@def::2::@getter::y
           setters
-            #F10 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F10 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@mixin::A::@def::2::@setter::y
               formalParameters
                 #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
@@ -1175,20 +1177,20 @@
       superclassConstraints
         Object
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@mixin::A::@def::1::@field::x
           firstFragment: #F3
           type: dynamic
           getter: <testLibrary>::@mixin::A::@def::1::@getter::x
           setter: <testLibrary>::@mixin::A::@def::1::@setter::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@mixin::A::@def::1::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@mixin::A::@def::1::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@mixin::A::@def::1::@setter::x
           firstFragment: #F5
           formalParameters
@@ -1203,20 +1205,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer y
+        hasImplicitType hasInitializer isOriginDeclaration y
           reference: <testLibrary>::@mixin::A::@def::2::@field::y
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@mixin::A::@def::2::@getter::y
           setter: <testLibrary>::@mixin::A::@def::2::@setter::y
       getters
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@mixin::A::@def::2::@getter::y
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@mixin::A::@def::2::@field::y
       setters
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@mixin::A::@def::2::@setter::y
           firstFragment: #F10
           formalParameters
@@ -1242,86 +1244,86 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 x (nameOffset:5) (firstTokenOffset:5) (offset:5)
+        #F1 isOriginDeclaration x (nameOffset:5) (firstTokenOffset:5) (offset:5)
           element: <testLibrary>::@topLevelVariable::x::@def::0
-        #F2 x (nameOffset:12) (firstTokenOffset:12) (offset:12)
+        #F2 isOriginDeclaration x (nameOffset:12) (firstTokenOffset:12) (offset:12)
           element: <testLibrary>::@topLevelVariable::x::@def::1
-        #F3 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F3 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x::@def::2
-        #F4 hasInitializer x (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F4 hasInitializer isOriginDeclaration x (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::x::@def::3
       getters
-        #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+        #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
           element: <testLibrary>::@getter::x::@def::0
-        #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+        #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
           element: <testLibrary>::@getter::x::@def::1
-        #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x::@def::2
-        #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::x::@def::3
       setters
-        #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+        #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
           element: <testLibrary>::@setter::x::@def::0
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@setter::x::@def::0::@formalParameter::value
-        #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
+        #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
           element: <testLibrary>::@setter::x::@def::1
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:12)
               element: <testLibrary>::@setter::x::@def::1::@formalParameter::value
-        #F13 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F13 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@setter::x::@def::2
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@setter::x::@def::2::@formalParameter::value
   topLevelVariables
-    x
+    isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x::@def::0
       firstFragment: #F1
       type: bool
       getter: <testLibrary>::@getter::x::@def::0
       setter: <testLibrary>::@setter::x::@def::0
-    x
+    hasImplicitType isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x::@def::1
       firstFragment: #F2
       type: dynamic
       getter: <testLibrary>::@getter::x::@def::1
       setter: <testLibrary>::@setter::x::@def::1
-    final hasInitializer x
+    final hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x::@def::2
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::x::@def::2
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x::@def::3
       firstFragment: #F4
       type: double
       getter: <testLibrary>::@getter::x::@def::3
       setter: <testLibrary>::@setter::x::@def::2
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x::@def::0
       firstFragment: #F5
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::x::@def::0
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x::@def::1
       firstFragment: #F6
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::x::@def::1
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x::@def::2
       firstFragment: #F7
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x::@def::2
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x::@def::3
       firstFragment: #F8
       returnType: double
       variable: <testLibrary>::@topLevelVariable::x::@def::3
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x::@def::0
       firstFragment: #F9
       formalParameters
@@ -1330,7 +1332,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x::@def::0
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x::@def::1
       firstFragment: #F11
       formalParameters
@@ -1339,7 +1341,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x::@def::1
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x::@def::2
       firstFragment: #F13
       formalParameters
@@ -1363,33 +1365,33 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo::@def::0
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@topLevelVariable::foo::@def::1
       getters
-        #F3 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F3 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo::@def::0
-        #F4 foo (nameOffset:26) (firstTokenOffset:15) (offset:26)
+        #F4 isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:15) (offset:26)
           element: <testLibrary>::@getter::foo::@def::1
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::0
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo::@def::0
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::1
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::foo::@def::1
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo::@def::0
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo::@def::1
       firstFragment: #F4
       returnType: double
@@ -1409,34 +1411,34 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo::@def::0
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@topLevelVariable::foo::@def::1
       setters
-        #F3 foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F3 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::foo::@def::0
           formalParameters
             #F4 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
               element: <testLibrary>::@setter::foo::@def::0::@formalParameter::_
-        #F5 foo (nameOffset:22) (firstTokenOffset:18) (offset:22)
+        #F5 isOriginDeclaration foo (nameOffset:22) (firstTokenOffset:18) (offset:22)
           element: <testLibrary>::@setter::foo::@def::1
           formalParameters
             #F6 requiredPositional _ (nameOffset:33) (firstTokenOffset:26) (offset:33)
               element: <testLibrary>::@setter::foo::@def::1::@formalParameter::_
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::0
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo::@def::0
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::1
       firstFragment: #F2
       type: double
       setter: <testLibrary>::@setter::foo::@def::1
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo::@def::0
       firstFragment: #F3
       formalParameters
@@ -1445,7 +1447,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo::@def::1
       firstFragment: #F5
       formalParameters
diff --git a/pkg/analyzer/test/src/summary/elements/enum_test.dart b/pkg/analyzer/test/src/summary/elements/enum_test.dart
index 6ca2254..8036a51 100644
--- a/pkg/analyzer/test/src/summary/elements/enum_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/enum_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.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../dart/resolution/node_text_expectations.dart';
@@ -12,9 +10,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EnumElementTest_keepLinking);
-    defineReflectiveTests(EnumElementTest_keepLinking_declaringConstructors);
     defineReflectiveTests(EnumElementTest_fromBytes);
-    defineReflectiveTests(EnumElementTest_fromBytes_declaringConstructors);
     defineReflectiveTests(EnumElementTest_augmentation_keepLinking);
     defineReflectiveTests(EnumElementTest_augmentation_fromBytes);
     defineReflectiveTests(UpdateNodeTextExpectations);
@@ -39,7 +35,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer aaa (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration aaa (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::aaa
               initializer: expression_0
                 InstanceCreationExpression
@@ -53,7 +49,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer bbb (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration bbb (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@enum::E::@field::bbb
               initializer: expression_1
                 InstanceCreationExpression
@@ -67,7 +63,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 hasInitializer ccc (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F4 hasInitializer isOriginDeclaration ccc (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@enum::E::@field::ccc
               initializer: expression_2
                 InstanceCreationExpression
@@ -81,7 +77,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -102,17 +98,17 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic aaa (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable aaa (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::aaa
-            #F8 synthetic bbb (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F8 synthetic isOriginVariable bbb (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@getter::bbb
-            #F9 synthetic ccc (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable ccc (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@enum::E::@getter::ccc
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -120,7 +116,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer aaa
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration aaa
           reference: <testLibrary>::@enum::E::@field::aaa
           firstFragment: #F2
           type: E
@@ -128,7 +124,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::aaa
-        static const enumConstant hasInitializer bbb
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration bbb
           reference: <testLibrary>::@enum::E::@field::bbb
           firstFragment: #F3
           type: E
@@ -136,7 +132,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::bbb
-        static const enumConstant hasInitializer ccc
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration ccc
           reference: <testLibrary>::@enum::E::@field::ccc
           firstFragment: #F4
           type: E
@@ -144,7 +140,7 @@
             fragment: #F4
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::ccc
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -153,26 +149,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static aaa
+        synthetic static isOriginVariable aaa
           reference: <testLibrary>::@enum::E::@getter::aaa
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::aaa
-        synthetic static bbb
+        synthetic static isOriginVariable bbb
           reference: <testLibrary>::@enum::E::@getter::bbb
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::bbb
-        synthetic static ccc
+        synthetic static isOriginVariable ccc
           reference: <testLibrary>::@enum::E::@getter::ccc
           firstFragment: #F9
           returnType: E
           variable: <testLibrary>::@enum::E::@field::ccc
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E>
@@ -197,7 +193,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -219,7 +215,7 @@
                             offset: 18
                     rightParenthesis: ) @21
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -232,7 +228,7 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:26) (offset:32)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:26) (offset:32)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 32
@@ -240,9 +236,9 @@
                 #F5 requiredPositional _ (nameOffset:41) (firstTokenOffset:34) (offset:41)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::_
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -250,7 +246,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -258,7 +254,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -267,7 +263,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -275,12 +271,12 @@
               firstFragment: #F5
               type: Object
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -308,7 +304,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 hasInitializer int (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F3 hasInitializer isOriginDeclaration int (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::int
               initializer: expression_0
                 InstanceCreationExpression
@@ -328,7 +324,7 @@
                         staticType: int
                     rightParenthesis: ) @19
                   staticType: E<int>
-            #F4 hasInitializer string (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F4 hasInitializer isOriginDeclaration string (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@enum::E::@field::string
               initializer: expression_1
                 InstanceCreationExpression
@@ -347,7 +343,7 @@
                         literal: '2' @29
                     rightParenthesis: ) @32
                   staticType: E<String>
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -364,7 +360,7 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:37) (offset:43)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:43)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 43
@@ -372,11 +368,11 @@
                 #F7 requiredPositional a (nameOffset:47) (firstTokenOffset:45) (offset:47)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::a
           getters
-            #F8 synthetic int (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F8 synthetic isOriginVariable int (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::int
-            #F9 synthetic string (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F9 synthetic isOriginVariable string (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@getter::string
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -387,7 +383,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        static const enumConstant hasInitializer int
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration int
           reference: <testLibrary>::@enum::E::@field::int
           firstFragment: #F3
           type: E<int>
@@ -395,7 +391,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::int
-        static const enumConstant hasInitializer string
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration string
           reference: <testLibrary>::@enum::E::@field::string
           firstFragment: #F4
           type: E<String>
@@ -403,7 +399,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::string
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E<dynamic>>
@@ -412,7 +408,7 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -420,17 +416,17 @@
               firstFragment: #F7
               type: T
       getters
-        synthetic static int
+        synthetic static isOriginVariable int
           reference: <testLibrary>::@enum::E::@getter::int
           firstFragment: #F8
           returnType: E<int>
           variable: <testLibrary>::@enum::E::@field::int
-        synthetic static string
+        synthetic static isOriginVariable string
           reference: <testLibrary>::@enum::E::@getter::string
           firstFragment: #F9
           returnType: E<String>
           variable: <testLibrary>::@enum::E::@field::string
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E<dynamic>>
@@ -455,7 +451,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer _name (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration _name (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::_name
               initializer: expression_0
                 InstanceCreationExpression
@@ -469,7 +465,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -482,13 +478,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic _name (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable _name (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::_name
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -496,7 +492,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer _name
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration _name
           reference: <testLibrary>::@enum::E::@field::_name
           firstFragment: #F2
           type: E
@@ -504,7 +500,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::_name
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -513,16 +509,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static _name
+        synthetic static isOriginVariable _name
           reference: <testLibrary>::@enum::E::@getter::_name
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::_name
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -550,7 +546,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -578,7 +574,7 @@
                         staticType: double
                     rightParenthesis: ) @26
                   staticType: E<double>
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -591,7 +587,7 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 37
@@ -599,9 +595,9 @@
                 #F6 requiredPositional a (nameOffset:41) (firstTokenOffset:39) (offset:41)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::a
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -612,7 +608,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F3
           type: E<double>
@@ -620,7 +616,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E<dynamic>>
@@ -629,7 +625,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -637,12 +633,12 @@
               firstFragment: #F6
               type: T
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E<double>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E<dynamic>>
@@ -666,7 +662,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer _ (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration _ (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::_
               initializer: expression_0
                 InstanceCreationExpression
@@ -680,7 +676,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -693,13 +689,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic _ (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable _ (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::_
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -707,7 +703,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer _
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration _
           reference: <testLibrary>::@enum::E::@field::_
           firstFragment: #F2
           type: E
@@ -715,7 +711,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::_
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -724,16 +720,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static _
+        synthetic static isOriginVariable _
           reference: <testLibrary>::@enum::E::@getter::_
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::_
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -758,7 +754,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -772,7 +768,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -785,18 +781,19 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 factory named (nameOffset:26) (firstTokenOffset:16) (offset:26)
+            #F4 factory isOriginDeclaration named (nameOffset:26) (firstTokenOffset:16) (offset:26)
               element: <testLibrary>::@enum::E::@constructor::named
+              factoryKeywordOffset: 16
               typeName: E
               typeNameOffset: 24
               periodOffset: 25
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -804,7 +801,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -812,7 +809,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -821,19 +818,19 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        factory named
+        factory isOriginDeclaration named
           reference: <testLibrary>::@enum::E::@constructor::named
           firstFragment: #F4
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -858,7 +855,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -872,7 +869,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -885,14 +882,15 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 factory new (nameOffset:<null>) (firstTokenOffset:16) (offset:24)
+            #F4 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::E::@constructor::new
+              factoryKeywordOffset: 16
               typeName: E
               typeNameOffset: 24
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -900,7 +898,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -908,7 +906,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -917,16 +915,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -934,6 +932,212 @@
 ''');
   }
 
+  test_enum_constructor_factoryHead_named() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  factory named() => v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::E
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+              element: <testLibrary>::@enum::E::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@enum::E
+                      type: E
+                    element: <testLibrary>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            #F4 factory isOriginDeclaration named (nameOffset:24) (firstTokenOffset:16) (offset:24)
+              element: <testLibrary>::@enum::E::@constructor::named
+              factoryKeywordOffset: 16
+              typeName: null
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@constructor::new
+              typeName: E
+          getters
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::E::@getter::v
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@getter::values
+  enums
+    enum E
+      reference: <testLibrary>::@enum::E
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::E::@field::v
+          firstFragment: #F2
+          type: E
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::E::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::E::@field::values
+          firstFragment: #F3
+          type: List<E>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::E::@getter::values
+      constructors
+        factory isOriginDeclaration named
+          reference: <testLibrary>::@enum::E::@constructor::named
+          firstFragment: #F4
+        synthetic const isOriginImplicitDefault new
+          reference: <testLibrary>::@enum::E::@constructor::new
+          firstFragment: #F5
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::E::@getter::v
+          firstFragment: #F6
+          returnType: E
+          variable: <testLibrary>::@enum::E::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::E::@getter::values
+          firstFragment: #F7
+          returnType: List<E>
+          variable: <testLibrary>::@enum::E::@field::values
+''');
+  }
+
+  test_enum_constructor_factoryHead_unnamed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v.named();
+  const E.named();
+  factory () => v;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::E
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+              element: <testLibrary>::@enum::E::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@enum::E
+                      type: E
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      element: <testLibrary>::@enum::E::@constructor::named
+                      staticType: null
+                    element: <testLibrary>::@enum::E::@constructor::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @18
+                    rightParenthesis: ) @19
+                  staticType: E
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            #F4 const isOriginDeclaration named (nameOffset:32) (firstTokenOffset:24) (offset:32)
+              element: <testLibrary>::@enum::E::@constructor::named
+              typeName: E
+              typeNameOffset: 30
+              periodOffset: 31
+            #F5 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:43) (offset:43)
+              element: <testLibrary>::@enum::E::@constructor::new
+              factoryKeywordOffset: 43
+              typeName: null
+          getters
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::E::@getter::v
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@getter::values
+  enums
+    enum E
+      reference: <testLibrary>::@enum::E
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::E::@field::v
+          firstFragment: #F2
+          type: E
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::E::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::E::@field::values
+          firstFragment: #F3
+          type: List<E>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::E::@getter::values
+      constructors
+        const isOriginDeclaration named
+          reference: <testLibrary>::@enum::E::@constructor::named
+          firstFragment: #F4
+        factory isOriginDeclaration new
+          reference: <testLibrary>::@enum::E::@constructor::new
+          firstFragment: #F5
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::E::@getter::v
+          firstFragment: #F6
+          returnType: E
+          variable: <testLibrary>::@enum::E::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::E::@getter::values
+          firstFragment: #F7
+          returnType: List<E>
+          variable: <testLibrary>::@enum::E::@field::values
+''');
+  }
+
   test_enum_constructor_fieldFormal_functionTyped_withReturnType() async {
     var library = await buildLibrary(r'''
 enum E {
@@ -952,7 +1156,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -966,7 +1170,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -978,10 +1182,10 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 x (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F4 isOriginDeclaration x (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@enum::E::@field::x
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:27) (offset:33)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:33)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 33
@@ -992,11 +1196,11 @@
                     #F7 requiredPositional a (nameOffset:53) (firstTokenOffset:46) (offset:53)
                       element: a@53
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@getter::x
   enums
     enum E
@@ -1004,7 +1208,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1012,7 +1216,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1020,13 +1224,13 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x
           firstFragment: #F4
           type: dynamic
           getter: <testLibrary>::@enum::E::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -1039,17 +1243,17 @@
                   type: double
               field: <testLibrary>::@enum::E::@field::x
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F9
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x
           firstFragment: #F10
           returnType: dynamic
@@ -1077,7 +1281,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1091,7 +1295,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1103,12 +1307,12 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 x (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F4 isOriginDeclaration x (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::E::@field::x::@def::0
-            #F5 x (nameOffset:44) (firstTokenOffset:44) (offset:44)
+            #F5 isOriginDeclaration x (nameOffset:44) (firstTokenOffset:44) (offset:44)
               element: <testLibrary>::@enum::E::@field::x::@def::1
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:49) (offset:55)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:49) (offset:55)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 55
@@ -1116,13 +1320,13 @@
                 #F7 requiredPositional final this.x (nameOffset:62) (firstTokenOffset:57) (offset:62)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::x
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::x::@def::0
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::E::@getter::x::@def::1
   enums
     enum E
@@ -1130,7 +1334,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1138,7 +1342,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1146,18 +1350,18 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x::@def::0
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@enum::E::@getter::x::@def::0
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x::@def::1
           firstFragment: #F5
           type: String
           getter: <testLibrary>::@enum::E::@getter::x::@def::1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -1166,22 +1370,22 @@
               type: int
               field: <testLibrary>::@enum::E::@field::x::@def::0
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F9
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x::@def::0
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@enum::E::@field::x::@def::0
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x::@def::1
           firstFragment: #F11
           returnType: String
@@ -1206,7 +1410,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1220,7 +1424,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1233,7 +1437,7 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 22
@@ -1241,9 +1445,9 @@
                 #F5 requiredPositional final this.x (nameOffset:29) (firstTokenOffset:24) (offset:29)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::x
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -1251,7 +1455,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1259,7 +1463,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1268,7 +1472,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -1277,12 +1481,12 @@
               type: dynamic
               field: <null>
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -1308,7 +1512,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1322,7 +1526,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1334,10 +1538,10 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 x (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F4 isOriginDeclaration x (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::E::@field::x
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 37
@@ -1357,11 +1561,11 @@
                       staticInvokeType: num Function(num)
                       staticType: int
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::x
   enums
     enum E
@@ -1369,7 +1573,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1377,7 +1581,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1385,13 +1589,13 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@enum::E::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -1403,17 +1607,17 @@
                 expression: expression_2
               field: <testLibrary>::@enum::E::@field::x
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x
           firstFragment: #F9
           returnType: int
@@ -1439,7 +1643,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1453,7 +1657,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1465,10 +1669,10 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 x (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F4 isOriginDeclaration x (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::E::@field::x
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:31) (offset:37)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 37
@@ -1476,11 +1680,11 @@
                 #F6 requiredPositional final this.x (nameOffset:48) (firstTokenOffset:39) (offset:48)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::x
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::x
   enums
     enum E
@@ -1488,7 +1692,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1496,7 +1700,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1504,13 +1708,13 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x
           firstFragment: #F4
           type: num
           getter: <testLibrary>::@enum::E::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -1519,17 +1723,17 @@
               type: int
               field: <testLibrary>::@enum::E::@field::x
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x
           firstFragment: #F9
           returnType: num
@@ -1555,7 +1759,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1569,7 +1773,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1581,10 +1785,10 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 x (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F4 isOriginDeclaration x (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@enum::E::@field::x
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 27
@@ -1592,11 +1796,11 @@
                 #F6 requiredPositional final this.x (nameOffset:38) (firstTokenOffset:29) (offset:38)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::x
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@getter::x
   enums
     enum E
@@ -1604,7 +1808,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1612,7 +1816,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1620,13 +1824,13 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x
           firstFragment: #F4
           type: dynamic
           getter: <testLibrary>::@enum::E::@getter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -1635,17 +1839,17 @@
               type: int
               field: <testLibrary>::@enum::E::@field::x
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x
           firstFragment: #F9
           returnType: dynamic
@@ -1671,7 +1875,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1685,7 +1889,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1697,10 +1901,10 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 x (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F4 isOriginDeclaration x (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@enum::E::@field::x
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 27
@@ -1708,11 +1912,11 @@
                 #F6 requiredPositional final this.x (nameOffset:34) (firstTokenOffset:29) (offset:34)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::x
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@getter::x
   enums
     enum E
@@ -1720,7 +1924,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1728,7 +1932,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1736,13 +1940,13 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x
           firstFragment: #F4
           type: dynamic
           getter: <testLibrary>::@enum::E::@getter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -1751,17 +1955,17 @@
               type: dynamic
               field: <testLibrary>::@enum::E::@field::x
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x
           firstFragment: #F9
           returnType: dynamic
@@ -1786,7 +1990,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1809,7 +2013,7 @@
                         staticType: int
                     rightParenthesis: ) @21
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1822,7 +2026,7 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 const named (nameOffset:34) (firstTokenOffset:26) (offset:34)
+            #F4 const isOriginDeclaration named (nameOffset:34) (firstTokenOffset:26) (offset:34)
               element: <testLibrary>::@enum::E::@constructor::named
               typeName: E
               typeNameOffset: 32
@@ -1831,9 +2035,9 @@
                 #F5 requiredPositional a (nameOffset:44) (firstTokenOffset:40) (offset:44)
                   element: <testLibrary>::@enum::E::@constructor::named::@formalParameter::a
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -1841,7 +2045,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1849,7 +2053,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1858,7 +2062,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::E::@constructor::named
           firstFragment: #F4
           formalParameters
@@ -1866,12 +2070,12 @@
               firstFragment: #F5
               type: int
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -1896,7 +2100,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -1914,7 +2118,7 @@
                         staticType: int
                     rightParenthesis: ) @15
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -1927,7 +2131,7 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:20) (offset:26)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:20) (offset:26)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 26
@@ -1935,9 +2139,9 @@
                 #F5 requiredPositional a (nameOffset:32) (firstTokenOffset:28) (offset:32)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::a
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -1945,7 +2149,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -1953,7 +2157,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -1962,7 +2166,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -1970,12 +2174,12 @@
               firstFragment: #F5
               type: int
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -2004,7 +2208,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2020,7 +2224,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<dynamic>
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2032,10 +2236,10 @@
                       staticType: E<dynamic>
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
-            #F5 x (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F5 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@enum::E::@field::x
           constructors
-            #F6 const new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
+            #F6 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:34) (offset:40)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
               typeNameOffset: 40
@@ -2043,11 +2247,11 @@
                 #F7 requiredPositional a (nameOffset:45) (firstTokenOffset:42) (offset:45)
                   element: <testLibrary>::@enum::E::@constructor::new::@formalParameter::a
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::E::@getter::x
   enums
     enum E
@@ -2058,7 +2262,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F3
           type: E<dynamic>
@@ -2066,7 +2270,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E<dynamic>>
@@ -2074,13 +2278,13 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@enum::E::@field::x
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::E::@getter::x
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
           formalParameters
@@ -2113,17 +2317,17 @@
                 literal: 0 @70
                 staticType: int
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F8
           returnType: E<dynamic>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F9
           returnType: List<E<dynamic>>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@enum::E::@getter::x
           firstFragment: #F10
           returnType: int
@@ -2131,6 +2335,388 @@
 ''');
   }
 
+  test_enum_constructor_newHead_named() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v.named();
+  new named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::E
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+              element: <testLibrary>::@enum::E::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@enum::E
+                      type: E
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      element: <testLibrary>::@enum::E::@constructor::named
+                      staticType: null
+                    element: <testLibrary>::@enum::E::@constructor::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @18
+                    rightParenthesis: ) @19
+                  staticType: E
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            #F4 isOriginDeclaration named (nameOffset:28) (firstTokenOffset:24) (offset:28)
+              element: <testLibrary>::@enum::E::@constructor::named
+              newKeywordOffset: 24
+              typeName: null
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::E::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@getter::values
+  enums
+    enum E
+      reference: <testLibrary>::@enum::E
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::E::@field::v
+          firstFragment: #F2
+          type: E
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::E::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::E::@field::values
+          firstFragment: #F3
+          type: List<E>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::E::@getter::values
+      constructors
+        isOriginDeclaration named
+          reference: <testLibrary>::@enum::E::@constructor::named
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::E::@getter::v
+          firstFragment: #F5
+          returnType: E
+          variable: <testLibrary>::@enum::E::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::E::@getter::values
+          firstFragment: #F6
+          returnType: List<E>
+          variable: <testLibrary>::@enum::E::@field::values
+''');
+  }
+
+  test_enum_constructor_newHead_named_const() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v.named();
+  const new named();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::E
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+              element: <testLibrary>::@enum::E::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@enum::E
+                      type: E
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      element: <testLibrary>::@enum::E::@constructor::named
+                      staticType: null
+                    element: <testLibrary>::@enum::E::@constructor::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @18
+                    rightParenthesis: ) @19
+                  staticType: E
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            #F4 const isOriginDeclaration named (nameOffset:34) (firstTokenOffset:24) (offset:34)
+              element: <testLibrary>::@enum::E::@constructor::named
+              newKeywordOffset: 30
+              typeName: null
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::E::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@getter::values
+  enums
+    enum E
+      reference: <testLibrary>::@enum::E
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::E::@field::v
+          firstFragment: #F2
+          type: E
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::E::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::E::@field::values
+          firstFragment: #F3
+          type: List<E>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::E::@getter::values
+      constructors
+        const isOriginDeclaration named
+          reference: <testLibrary>::@enum::E::@constructor::named
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::E::@getter::v
+          firstFragment: #F5
+          returnType: E
+          variable: <testLibrary>::@enum::E::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::E::@getter::values
+          firstFragment: #F6
+          returnType: List<E>
+          variable: <testLibrary>::@enum::E::@field::values
+''');
+  }
+
+  test_enum_constructor_newHead_unnamed() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  new ();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::E
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+              element: <testLibrary>::@enum::E::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@enum::E
+                      type: E
+                    element: <testLibrary>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:16)
+              element: <testLibrary>::@enum::E::@constructor::new
+              newKeywordOffset: 16
+              typeName: null
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::E::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@getter::values
+  enums
+    enum E
+      reference: <testLibrary>::@enum::E
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::E::@field::v
+          firstFragment: #F2
+          type: E
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::E::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::E::@field::values
+          firstFragment: #F3
+          type: List<E>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::E::@getter::values
+      constructors
+        isOriginDeclaration new
+          reference: <testLibrary>::@enum::E::@constructor::new
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::E::@getter::v
+          firstFragment: #F5
+          returnType: E
+          variable: <testLibrary>::@enum::E::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::E::@getter::values
+          firstFragment: #F6
+          returnType: List<E>
+          variable: <testLibrary>::@enum::E::@field::values
+''');
+  }
+
+  test_enum_constructor_newHead_unnamed_const() async {
+    var library = await buildLibrary(r'''
+enum E {
+  v;
+  const new ();
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::E
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+              element: <testLibrary>::@enum::E::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: E @-1
+                      element: <testLibrary>::@enum::E
+                      type: E
+                    element: <testLibrary>::@enum::E::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: E
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::E::@getter::v
+                      staticType: E
+                  rightBracket: ] @0
+                  staticType: List<E>
+          constructors
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:16)
+              element: <testLibrary>::@enum::E::@constructor::new
+              newKeywordOffset: 22
+              typeName: null
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::E::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::E::@getter::values
+  enums
+    enum E
+      reference: <testLibrary>::@enum::E
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::E::@field::v
+          firstFragment: #F2
+          type: E
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::E::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::E::@field::values
+          firstFragment: #F3
+          type: List<E>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::E::@getter::values
+      constructors
+        const isOriginDeclaration new
+          reference: <testLibrary>::@enum::E::@constructor::new
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::E::@getter::v
+          firstFragment: #F5
+          returnType: E
+          variable: <testLibrary>::@enum::E::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::E::@getter::values
+          firstFragment: #F6
+          returnType: List<E>
+          variable: <testLibrary>::@enum::E::@field::values
+''');
+  }
+
   test_enum_documented() async {
     var library = await buildLibrary('''
 // Extra comment so doc comment offset != 0
@@ -2148,7 +2734,7 @@
         #F1 enum E (nameOffset:65) (firstTokenOffset:44) (offset:65)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:69) (firstTokenOffset:69) (offset:69)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:69) (firstTokenOffset:69) (offset:69)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2162,7 +2748,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2175,13 +2761,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -2190,7 +2776,7 @@
       documentationComment: /**\n * Docs\n */
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -2198,7 +2784,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -2207,16 +2793,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -2241,7 +2827,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2255,7 +2841,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2267,22 +2853,22 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 hasInitializer foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F4 hasInitializer isOriginDeclaration foo (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@enum::E::@field::foo
               initializer: expression_2
                 IntegerLiteral
                   literal: 42 @28
                   staticType: int
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F8 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@getter::foo
   enums
     enum E
@@ -2290,7 +2876,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -2298,7 +2884,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -2306,7 +2892,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        final hasInitializer foo
+        final hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::E::@field::foo
           firstFragment: #F4
           type: int
@@ -2315,21 +2901,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::E::@getter::foo
           firstFragment: #F8
           returnType: int
@@ -2355,7 +2941,7 @@
       firstFragment: #F0
       supertype: Enum
       fields
-        final promotable _foo
+        final promotable isOriginDeclaration _foo
           reference: <testLibrary>::@enum::E::@field::_foo
           firstFragment: #F1
           type: int?
@@ -2380,7 +2966,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:10) (firstTokenOffset:10) (offset:10)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:10) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2394,7 +2980,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2406,18 +2992,18 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::foo
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
-            #F8 foo (nameOffset:23) (firstTokenOffset:15) (offset:23)
+            #F8 isOriginDeclaration foo (nameOffset:23) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@enum::E::@getter::foo
   enums
     enum E
@@ -2425,7 +3011,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -2433,7 +3019,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -2441,27 +3027,27 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@enum::E::@field::foo
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@enum::E::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::E::@getter::foo
           firstFragment: #F8
           returnType: int
@@ -2486,14 +3072,14 @@
         #F1 class I (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::I
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
       enums
         #F3 enum E (nameOffset:16) (firstTokenOffset:11) (offset:16)
           element: <testLibrary>::@enum::E
           fields
-            #F4 hasInitializer v (nameOffset:35) (firstTokenOffset:35) (offset:35)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:35) (firstTokenOffset:35) (offset:35)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2507,7 +3093,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2520,20 +3106,20 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@getter::values
   classes
     class I
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F2
   enums
@@ -2544,7 +3130,7 @@
       interfaces
         I
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F4
           type: E
@@ -2552,7 +3138,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -2561,16 +3147,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -2603,7 +3189,7 @@
         #F3 enum E (nameOffset:55) (firstTokenOffset:50) (offset:55)
           element: <testLibrary>::@enum::E
           fields
-            #F4 hasInitializer v (nameOffset:78) (firstTokenOffset:78) (offset:78)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:78) (firstTokenOffset:78) (offset:78)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2617,7 +3203,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2630,18 +3216,18 @@
                   rightBracket: ] @0
                   staticType: List<E>
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@enum::E::@getter::values
       extensionTypes
         #F8 extension type B (nameOffset:26) (firstTokenOffset:11) (offset:26)
           element: <testLibrary>::@extensionType::B
           fields
-            #F9 it (nameOffset:32) (firstTokenOffset:28) (offset:32)
+            #F9 isOriginDeclaringFormalParameter it (nameOffset:32) (firstTokenOffset:28) (offset:32)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@extensionType::B::@getter::it
   classes
     class A
@@ -2659,7 +3245,7 @@
         A
         C
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F4
           type: E
@@ -2667,7 +3253,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -2676,12 +3262,12 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -2694,13 +3280,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F9
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F10
           returnType: int
@@ -2728,7 +3315,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
       enums
@@ -2738,7 +3325,7 @@
             #F5 U (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: #E1 U
           fields
-            #F6 hasInitializer v (nameOffset:44) (firstTokenOffset:44) (offset:44)
+            #F6 hasInitializer isOriginDeclaration v (nameOffset:44) (firstTokenOffset:44) (offset:44)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2754,7 +3341,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<dynamic>
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F7 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2767,13 +3354,13 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F9 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F9 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::E::@getter::v
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@getter::values
   classes
     class I
@@ -2783,7 +3370,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F3
   enums
@@ -2797,7 +3384,7 @@
       interfaces
         I<U>
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F6
           type: E<dynamic>
@@ -2805,7 +3392,7 @@
             fragment: #F6
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F7
           type: List<E<dynamic>>
@@ -2814,16 +3401,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F9
           returnType: E<dynamic>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E<dynamic>>
@@ -2849,20 +3436,20 @@
         #F1 class X (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::X
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
         #F3 class Z (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::Z
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::Z::@constructor::new
               typeName: Z
       enums
         #F5 enum E (nameOffset:27) (firstTokenOffset:22) (offset:27)
           element: <testLibrary>::@enum::E
           fields
-            #F6 hasInitializer v (nameOffset:52) (firstTokenOffset:52) (offset:52)
+            #F6 hasInitializer isOriginDeclaration v (nameOffset:52) (firstTokenOffset:52) (offset:52)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2876,7 +3463,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F7 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -2889,27 +3476,27 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F9 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F9 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@enum::E::@getter::v
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@getter::values
   classes
     class X
       reference: <testLibrary>::@class::X
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F2
     class Z
       reference: <testLibrary>::@class::Z
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Z::@constructor::new
           firstFragment: #F4
   enums
@@ -2921,7 +3508,7 @@
         X
         Z
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F6
           type: E
@@ -2929,7 +3516,7 @@
             fragment: #F6
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F7
           type: List<E>
@@ -2938,16 +3525,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F9
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E>
@@ -2975,7 +3562,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -2991,7 +3578,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<dynamic>
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3004,13 +3591,13 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
           methods
             #F8 foo (nameOffset:23) (firstTokenOffset:19) (offset:23)
@@ -3032,7 +3619,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F3
           type: E<dynamic>
@@ -3040,7 +3627,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E<dynamic>>
@@ -3049,16 +3636,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E<dynamic>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E<dynamic>>
@@ -3099,7 +3686,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3113,7 +3700,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3126,13 +3713,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
           methods
             #F7 toString (nameOffset:23) (firstTokenOffset:16) (offset:23)
@@ -3143,7 +3730,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -3151,7 +3738,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -3160,16 +3747,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -3196,7 +3783,7 @@
         #F1 enum <null-name> (nameOffset:<null>) (firstTokenOffset:0) (offset:0)
           element: <testLibrary>::@enum::0
           fields
-            #F2 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
               element: <testLibrary>::@enum::0::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3210,7 +3797,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: InvalidType
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
               element: <testLibrary>::@enum::0::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3223,13 +3810,13 @@
                   rightBracket: ] @0
                   staticType: List<<null>>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
               element: <testLibrary>::@enum::0::@constructor::new
               typeName: null
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@enum::0::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
               element: <testLibrary>::@enum::0::@getter::values
   enums
     enum <null-name>
@@ -3237,7 +3824,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::0::@field::v
           firstFragment: #F2
           type: InvalidType
@@ -3245,7 +3832,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::0::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::0::@field::values
           firstFragment: #F3
           type: List<<null>>
@@ -3254,16 +3841,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::0::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::0::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::0::@getter::v
           firstFragment: #F5
           returnType: InvalidType
           variable: <testLibrary>::@enum::0::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::0::@getter::values
           firstFragment: #F6
           returnType: List<<null>>
@@ -3288,7 +3875,7 @@
         #F1 enum E (nameOffset:16) (firstTokenOffset:11) (offset:16)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3302,7 +3889,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3315,13 +3902,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@getter::values
       mixins
         #F7 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
@@ -3334,7 +3921,7 @@
       mixins
         M
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -3342,7 +3929,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -3351,16 +3938,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -3399,7 +3986,7 @@
         #F3 enum E (nameOffset:55) (firstTokenOffset:50) (offset:55)
           element: <testLibrary>::@enum::E
           fields
-            #F4 hasInitializer v (nameOffset:72) (firstTokenOffset:72) (offset:72)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:72) (firstTokenOffset:72) (offset:72)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3413,7 +4000,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3426,18 +4013,18 @@
                   rightBracket: ] @0
                   staticType: List<E>
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@enum::E::@getter::values
       extensionTypes
         #F8 extension type B (nameOffset:26) (firstTokenOffset:11) (offset:26)
           element: <testLibrary>::@extensionType::B
           fields
-            #F9 it (nameOffset:32) (firstTokenOffset:28) (offset:32)
+            #F9 isOriginDeclaringFormalParameter it (nameOffset:32) (firstTokenOffset:28) (offset:32)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@extensionType::B::@getter::it
   classes
     class A
@@ -3455,7 +4042,7 @@
         A
         C
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F4
           type: E
@@ -3463,7 +4050,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -3472,12 +4059,12 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -3490,13 +4077,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F9
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F10
           returnType: int
@@ -3522,7 +4110,7 @@
         #F1 enum E (nameOffset:44) (firstTokenOffset:39) (offset:44)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:67) (firstTokenOffset:67) (offset:67)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:67) (firstTokenOffset:67) (offset:67)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3536,7 +4124,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3549,13 +4137,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::E::@getter::values
       mixins
         #F7 mixin M1 (nameOffset:6) (firstTokenOffset:0) (offset:6)
@@ -3577,7 +4165,7 @@
         M1<int>
         M2<int>
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -3585,7 +4173,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -3594,16 +4182,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -3645,7 +4233,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:10) (firstTokenOffset:10) (offset:10)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:10) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3659,7 +4247,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3671,19 +4259,19 @@
                       staticType: E
                   rightBracket: ] @0
                   staticType: List<E>
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::foo
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
           setters
-            #F8 foo (nameOffset:19) (firstTokenOffset:15) (offset:19)
+            #F8 isOriginDeclaration foo (nameOffset:19) (firstTokenOffset:15) (offset:19)
               element: <testLibrary>::@enum::E::@setter::foo
               formalParameters
                 #F9 requiredPositional _ (nameOffset:27) (firstTokenOffset:23) (offset:27)
@@ -3694,7 +4282,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -3702,7 +4290,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -3710,28 +4298,28 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@enum::E::@field::foo
           firstFragment: #F4
           type: int
           setter: <testLibrary>::@enum::E::@setter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::E::@setter::foo
           firstFragment: #F8
           formalParameters
@@ -3762,7 +4350,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3778,7 +4366,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<dynamic>
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3791,13 +4379,13 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -3808,7 +4396,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F3
           type: E<dynamic>
@@ -3816,7 +4404,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E<dynamic>>
@@ -3825,16 +4413,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E<dynamic>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E<dynamic>>
@@ -3863,7 +4451,7 @@
             #F3 U (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: #E1 U
           fields
-            #F4 hasInitializer v (nameOffset:39) (firstTokenOffset:39) (offset:39)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:39) (firstTokenOffset:39) (offset:39)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -3879,7 +4467,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<num, num>
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -3892,13 +4480,13 @@
                   rightBracket: ] @0
                   staticType: List<E<num, num>>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     notSimplyBounded enum E
@@ -3913,7 +4501,7 @@
           bound: T
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F4
           type: E<num, num>
@@ -3921,7 +4509,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E<num, num>>
@@ -3930,16 +4518,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E<num, num>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E<num, num>>
@@ -3964,7 +4552,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -3972,11 +4560,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     notSimplyBounded enum E
@@ -3988,7 +4576,7 @@
           bound: dynamic
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E<dynamic>>
@@ -3997,11 +4585,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F5
           returnType: List<E<dynamic>>
@@ -4030,7 +4618,7 @@
             #F4 V (nameOffset:35) (firstTokenOffset:35) (offset:35)
               element: #E2 V
           fields
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -4038,11 +4626,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic, num, dynamic>>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     notSimplyBounded enum E
@@ -4060,7 +4648,7 @@
           bound: dynamic
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E<dynamic, num, dynamic>>
@@ -4069,11 +4657,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E<dynamic, num, dynamic>>
@@ -4098,7 +4686,7 @@
             #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
               element: #E0 T
           fields
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -4106,11 +4694,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     notSimplyBounded enum E
@@ -4122,7 +4710,7 @@
           bound: void Function(E<dynamic>)
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E<dynamic>>
@@ -4131,11 +4719,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F5
           returnType: List<E<dynamic>>
@@ -4160,7 +4748,7 @@
             #F2 T (nameOffset:10) (firstTokenOffset:7) (offset:10)
               element: #E0 T
           fields
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -4168,11 +4756,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4183,7 +4771,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E<dynamic>>
@@ -4192,11 +4780,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F5
           returnType: List<E<dynamic>>
@@ -4221,7 +4809,7 @@
             #F2 T (nameOffset:11) (firstTokenOffset:7) (offset:11)
               element: #E0 T
           fields
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -4229,11 +4817,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4244,7 +4832,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E<dynamic>>
@@ -4253,11 +4841,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F5
           returnType: List<E<dynamic>>
@@ -4282,7 +4870,7 @@
             #F2 T (nameOffset:13) (firstTokenOffset:7) (offset:13)
               element: #E0 T
           fields
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -4290,11 +4878,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4305,7 +4893,7 @@
           firstFragment: #F2
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E<dynamic>>
@@ -4314,11 +4902,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F5
           returnType: List<E<dynamic>>
@@ -4347,7 +4935,7 @@
             #F4 V (nameOffset:26) (firstTokenOffset:22) (offset:26)
               element: #E2 V
           fields
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_0
                 ListLiteral
@@ -4355,11 +4943,11 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic, dynamic, dynamic>>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4374,7 +4962,7 @@
           firstFragment: #F4
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E<dynamic, dynamic, dynamic>>
@@ -4383,11 +4971,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E<dynamic, dynamic, dynamic>>
@@ -4415,7 +5003,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer a (nameOffset:32) (firstTokenOffset:11) (offset:32)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:32) (firstTokenOffset:11) (offset:32)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -4429,7 +5017,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer b (nameOffset:47) (firstTokenOffset:37) (offset:47)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:47) (firstTokenOffset:37) (offset:47)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -4443,7 +5031,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -4460,15 +5048,15 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@enum::E::@getter::a
-            #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@enum::E::@getter::b
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4476,7 +5064,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F2
           type: E
@@ -4484,7 +5072,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F3
           type: E
@@ -4492,7 +5080,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E>
@@ -4501,21 +5089,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -4548,8 +5136,16 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer a (nameOffset:46) (firstTokenOffset:11) (offset:46)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:46) (firstTokenOffset:11) (offset:46)
               element: <testLibrary>::@enum::E::@field::a
+              metadata
+                Annotation
+                  atSign: @ @32
+                  name: SimpleIdentifier
+                    token: annotation @33
+                    element: <testLibrary>::@getter::annotation
+                    staticType: null
+                  element: <testLibrary>::@getter::annotation
               initializer: expression_0
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -4562,8 +5158,16 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer b (nameOffset:75) (firstTokenOffset:51) (offset:75)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:75) (firstTokenOffset:51) (offset:75)
               element: <testLibrary>::@enum::E::@field::b
+              metadata
+                Annotation
+                  atSign: @ @61
+                  name: SimpleIdentifier
+                    token: annotation @62
+                    element: <testLibrary>::@getter::annotation
+                    staticType: null
+                  element: <testLibrary>::@getter::annotation
               initializer: expression_1
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -4576,7 +5180,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -4593,25 +5197,25 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@enum::E::@getter::a
-            #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:75)
+            #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:75)
               element: <testLibrary>::@enum::E::@getter::b
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F9 hasInitializer annotation (nameOffset:91) (firstTokenOffset:91) (offset:91)
+        #F9 hasInitializer isOriginDeclaration annotation (nameOffset:91) (firstTokenOffset:91) (offset:91)
           element: <testLibrary>::@topLevelVariable::annotation
           initializer: expression_3
             IntegerLiteral
               literal: 0 @104
               staticType: int
       getters
-        #F10 synthetic annotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+        #F10 synthetic isOriginVariable annotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
           element: <testLibrary>::@getter::annotation
   enums
     enum E
@@ -4619,23 +5223,39 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @32
+              name: SimpleIdentifier
+                token: annotation @33
+                element: <testLibrary>::@getter::annotation
+                staticType: null
+              element: <testLibrary>::@getter::annotation
           type: E
           constantInitializer
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F3
+          metadata
+            Annotation
+              atSign: @ @61
+              name: SimpleIdentifier
+                token: annotation @62
+                element: <testLibrary>::@getter::annotation
+                staticType: null
+              element: <testLibrary>::@getter::annotation
           type: E
           constantInitializer
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E>
@@ -4644,27 +5264,27 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    const hasInitializer annotation
+    const hasInitializer isOriginDeclaration annotation
       reference: <testLibrary>::@topLevelVariable::annotation
       firstFragment: #F9
       type: int
@@ -4673,7 +5293,7 @@
         expression: expression_3
       getter: <testLibrary>::@getter::annotation
   getters
-    synthetic static annotation
+    synthetic static isOriginVariable annotation
       reference: <testLibrary>::@getter::annotation
       firstFragment: #F10
       returnType: int
@@ -4695,7 +5315,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -4709,7 +5329,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
+            #F3 hasInitializer isOriginDeclaration <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@enum::E::@field::0
               initializer: expression_1
                 InstanceCreationExpression
@@ -4723,7 +5343,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -4740,15 +5360,15 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F7 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@enum::E::@getter::1
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4756,7 +5376,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -4764,7 +5384,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        static const enumConstant hasInitializer <null-name>
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration <null-name>
           reference: <testLibrary>::@enum::E::@field::0
           firstFragment: #F3
           type: E
@@ -4772,7 +5392,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::1
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E>
@@ -4781,21 +5401,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static <null-name>
+        synthetic static isOriginVariable <null-name>
           reference: <testLibrary>::@enum::E::@getter::1
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::0
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -4815,7 +5435,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v1 (nameOffset:9) (firstTokenOffset:9) (offset:9)
+            #F2 hasInitializer isOriginDeclaration v1 (nameOffset:9) (firstTokenOffset:9) (offset:9)
               element: <testLibrary>::@enum::E::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -4829,7 +5449,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer v2 (nameOffset:13) (firstTokenOffset:13) (offset:13)
+            #F3 hasInitializer isOriginDeclaration v2 (nameOffset:13) (firstTokenOffset:13) (offset:13)
               element: <testLibrary>::@enum::E::@field::v2
               initializer: expression_1
                 InstanceCreationExpression
@@ -4843,7 +5463,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -4860,15 +5480,15 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
+            #F6 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
               element: <testLibrary>::@enum::E::@getter::v1
-            #F7 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F7 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::E::@getter::v2
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -4876,7 +5496,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::E::@field::v1
           firstFragment: #F2
           type: E
@@ -4884,7 +5504,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v1
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::E::@field::v2
           firstFragment: #F3
           type: E
@@ -4892,7 +5512,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::v2
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E>
@@ -4901,21 +5521,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::E::@getter::v1
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v1
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::E::@getter::v2
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v2
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -4935,7 +5555,7 @@
         #F1 enum E1 (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E1
           fields
-            #F2 hasInitializer v1 (nameOffset:10) (firstTokenOffset:10) (offset:10)
+            #F2 hasInitializer isOriginDeclaration v1 (nameOffset:10) (firstTokenOffset:10) (offset:10)
               element: <testLibrary>::@enum::E1::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -4949,7 +5569,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E1
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E1::@field::values
               initializer: expression_1
                 ListLiteral
@@ -4962,18 +5582,18 @@
                   rightBracket: ] @0
                   staticType: List<E1>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E1::@constructor::new
               typeName: E1
           getters
-            #F5 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F5 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@enum::E1::@getter::v1
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E1::@getter::values
         #F7 enum E2 (nameOffset:20) (firstTokenOffset:15) (offset:20)
           element: <testLibrary>::@enum::E2
           fields
-            #F8 hasInitializer v2 (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F8 hasInitializer isOriginDeclaration v2 (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::E2::@field::v2
               initializer: expression_2
                 InstanceCreationExpression
@@ -4987,7 +5607,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E2
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F9 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@enum::E2::@field::values
               initializer: expression_3
                 ListLiteral
@@ -5000,13 +5620,13 @@
                   rightBracket: ] @0
                   staticType: List<E2>
           constructors
-            #F10 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F10 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@enum::E2::@constructor::new
               typeName: E2
           getters
-            #F11 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F11 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::E2::@getter::v2
-            #F12 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F12 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@enum::E2::@getter::values
   enums
     enum E1
@@ -5014,7 +5634,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::E1::@field::v1
           firstFragment: #F2
           type: E1
@@ -5022,7 +5642,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E1::@getter::v1
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E1::@field::values
           firstFragment: #F3
           type: List<E1>
@@ -5031,16 +5651,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E1::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E1::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::E1::@getter::v1
           firstFragment: #F5
           returnType: E1
           variable: <testLibrary>::@enum::E1::@field::v1
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E1::@getter::values
           firstFragment: #F6
           returnType: List<E1>
@@ -5050,7 +5670,7 @@
       firstFragment: #F7
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::E2::@field::v2
           firstFragment: #F8
           type: E2
@@ -5058,7 +5678,7 @@
             fragment: #F8
             expression: expression_2
           getter: <testLibrary>::@enum::E2::@getter::v2
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E2::@field::values
           firstFragment: #F9
           type: List<E2>
@@ -5067,16 +5687,16 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E2::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E2::@constructor::new
           firstFragment: #F10
       getters
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::E2::@getter::v2
           firstFragment: #F11
           returnType: E2
           variable: <testLibrary>::@enum::E2::@field::v2
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E2::@getter::values
           firstFragment: #F12
           returnType: List<E2>
@@ -5114,13 +5734,13 @@
         #F1 class M (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::M
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::M::@constructor::new
               typeName: M
         #F3 class A (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::A
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -5129,7 +5749,7 @@
         #F6 class B (nameOffset:70) (firstTokenOffset:64) (offset:70)
           element: <testLibrary>::@class::B
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -5138,7 +5758,7 @@
         #F9 class C (nameOffset:110) (firstTokenOffset:104) (offset:110)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -5147,14 +5767,14 @@
         #F12 class D (nameOffset:159) (firstTokenOffset:153) (offset:159)
           element: <testLibrary>::@class::D
           constructors
-            #F13 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:159)
+            #F13 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:159)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       enums
         #F14 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F15 hasInitializer a (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F15 hasInitializer isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -5168,7 +5788,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F16 hasInitializer b (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F16 hasInitializer isOriginDeclaration b (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -5182,7 +5802,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F17 hasInitializer c (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F17 hasInitializer isOriginDeclaration c (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::c
               initializer: expression_2
                 InstanceCreationExpression
@@ -5196,7 +5816,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F18 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F18 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -5217,31 +5837,31 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F19 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F19 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F20 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F20 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::E::@getter::a
-            #F21 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F21 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::b
-            #F22 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F22 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::c
-            #F23 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F23 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   classes
     class M
       reference: <testLibrary>::@class::M
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F2
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -5255,7 +5875,7 @@
       interfaces
         M
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       methods
@@ -5270,7 +5890,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
       methods
@@ -5285,7 +5905,7 @@
       mixins
         M
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F13
           constantInitializers
@@ -5301,7 +5921,7 @@
       firstFragment: #F14
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F15
           type: E
@@ -5309,7 +5929,7 @@
             fragment: #F15
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F16
           type: E
@@ -5317,7 +5937,7 @@
             fragment: #F16
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        static const enumConstant hasInitializer c
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@enum::E::@field::c
           firstFragment: #F17
           type: E
@@ -5325,7 +5945,7 @@
             fragment: #F17
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::c
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F18
           type: List<E>
@@ -5334,26 +5954,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F19
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F20
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F21
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static c
+        synthetic static isOriginVariable c
           reference: <testLibrary>::@enum::E::@getter::c
           firstFragment: #F22
           returnType: E
           variable: <testLibrary>::@enum::E::@field::c
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F23
           returnType: List<E>
@@ -5373,8 +5993,16 @@
         #F1 enum E (nameOffset:19) (firstTokenOffset:14) (offset:19)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:26) (firstTokenOffset:23) (offset:26)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:26) (firstTokenOffset:23) (offset:26)
               element: <testLibrary>::@enum::E::@field::v
+              metadata
+                Annotation
+                  atSign: @ @23
+                  name: SimpleIdentifier
+                    token: a @24
+                    element: <testLibrary>::@getter::a
+                    staticType: null
+                  element: <testLibrary>::@getter::a
               initializer: expression_0
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -5387,7 +6015,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -5400,23 +6028,23 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_2
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   enums
     enum E
@@ -5424,15 +6052,23 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @23
+              name: SimpleIdentifier
+                token: a @24
+                element: <testLibrary>::@getter::a
+                staticType: null
+              element: <testLibrary>::@getter::a
           type: E
           constantInitializer
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -5441,22 +6077,22 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: int
@@ -5465,7 +6101,7 @@
         expression: expression_2
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: int
@@ -5496,10 +6132,10 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 value (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F2 isOriginDeclaration value (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@class::A::@field::value
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:35) (offset:41)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:35) (offset:41)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 41
@@ -5507,14 +6143,29 @@
                 #F4 requiredPositional final this.value (nameOffset:48) (firstTokenOffset:43) (offset:48)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::value
           getters
-            #F5 synthetic value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginVariable value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@getter::value
       enums
         #F6 enum E (nameOffset:64) (firstTokenOffset:59) (offset:64)
           element: <testLibrary>::@enum::E
           fields
-            #F7 hasInitializer a (nameOffset:78) (firstTokenOffset:70) (offset:78)
+            #F7 hasInitializer isOriginDeclaration a (nameOffset:78) (firstTokenOffset:70) (offset:78)
               element: <testLibrary>::@enum::E::@field::a
+              metadata
+                Annotation
+                  atSign: @ @70
+                  name: SimpleIdentifier
+                    token: A @71
+                    element: <testLibrary>::@class::A
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @72
+                    arguments
+                      IntegerLiteral
+                        literal: 100 @73
+                        staticType: int
+                    rightParenthesis: ) @76
+                  element: <testLibrary>::@class::A::@constructor::new
               initializer: expression_0
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -5527,7 +6178,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F8 hasInitializer b (nameOffset:83) (firstTokenOffset:83) (offset:83)
+            #F8 hasInitializer isOriginDeclaration b (nameOffset:83) (firstTokenOffset:83) (offset:83)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -5541,8 +6192,23 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F9 hasInitializer c (nameOffset:96) (firstTokenOffset:88) (offset:96)
+            #F9 hasInitializer isOriginDeclaration c (nameOffset:96) (firstTokenOffset:88) (offset:96)
               element: <testLibrary>::@enum::E::@field::c
+              metadata
+                Annotation
+                  atSign: @ @88
+                  name: SimpleIdentifier
+                    token: A @89
+                    element: <testLibrary>::@class::A
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @90
+                    arguments
+                      IntegerLiteral
+                        literal: 300 @91
+                        staticType: int
+                    rightParenthesis: ) @94
+                  element: <testLibrary>::@class::A::@constructor::new
               initializer: expression_2
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -5555,7 +6221,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F10 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -5576,30 +6242,30 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F11 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F11 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F12 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F12 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@enum::E::@getter::a
-            #F13 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
+            #F13 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
               element: <testLibrary>::@enum::E::@getter::b
-            #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+            #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
               element: <testLibrary>::@enum::E::@getter::c
-            #F15 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F15 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@enum::E::@getter::values
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final value
+        final isOriginDeclaration value
           reference: <testLibrary>::@class::A::@field::value
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::value
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -5608,7 +6274,7 @@
               type: dynamic
               field: <testLibrary>::@class::A::@field::value
       getters
-        synthetic value
+        synthetic isOriginVariable value
           reference: <testLibrary>::@class::A::@getter::value
           firstFragment: #F5
           returnType: dynamic
@@ -5619,15 +6285,30 @@
       firstFragment: #F6
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F7
+          metadata
+            Annotation
+              atSign: @ @70
+              name: SimpleIdentifier
+                token: A @71
+                element: <testLibrary>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @72
+                arguments
+                  IntegerLiteral
+                    literal: 100 @73
+                    staticType: int
+                rightParenthesis: ) @76
+              element: <testLibrary>::@class::A::@constructor::new
           type: E
           constantInitializer
             fragment: #F7
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F8
           type: E
@@ -5635,15 +6316,30 @@
             fragment: #F8
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        static const enumConstant hasInitializer c
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@enum::E::@field::c
           firstFragment: #F9
+          metadata
+            Annotation
+              atSign: @ @88
+              name: SimpleIdentifier
+                token: A @89
+                element: <testLibrary>::@class::A
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @90
+                arguments
+                  IntegerLiteral
+                    literal: 300 @91
+                    staticType: int
+                rightParenthesis: ) @94
+              element: <testLibrary>::@class::A::@constructor::new
           type: E
           constantInitializer
             fragment: #F9
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::c
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F10
           type: List<E>
@@ -5652,26 +6348,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F11
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F12
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F13
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static c
+        synthetic static isOriginVariable c
           reference: <testLibrary>::@enum::E::@getter::c
           firstFragment: #F14
           returnType: E
           variable: <testLibrary>::@enum::E::@field::c
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F15
           returnType: List<E>
@@ -5696,8 +6392,16 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:16) (firstTokenOffset:11) (offset:16)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:16) (firstTokenOffset:11) (offset:16)
               element: <testLibrary>::@enum::E::@field::v
+              metadata
+                Annotation
+                  atSign: @ @11
+                  name: SimpleIdentifier
+                    token: v @12
+                    element: <testLibrary>::@enum::E::@getter::v
+                    staticType: null
+                  element: <testLibrary>::@enum::E::@getter::v
               initializer: expression_0
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -5710,7 +6414,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -5723,13 +6427,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -5737,15 +6441,23 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @11
+              name: SimpleIdentifier
+                token: v @12
+                element: <testLibrary>::@enum::E::@getter::v
+                staticType: null
+              element: <testLibrary>::@enum::E::@getter::v
           type: E
           constantInitializer
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -5754,16 +6466,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -5790,7 +6502,7 @@
         #F1 enum E (nameOffset:19) (firstTokenOffset:14) (offset:19)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -5804,7 +6516,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -5817,7 +6529,7 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:30) (offset:41)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:30) (offset:41)
               element: <testLibrary>::@enum::E::@constructor::new
               metadata
                 Annotation
@@ -5830,19 +6542,19 @@
               typeName: E
               typeNameOffset: 41
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_2
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   enums
     enum E
@@ -5850,7 +6562,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -5858,7 +6570,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -5867,7 +6579,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
           metadata
@@ -5879,18 +6591,18 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: int
@@ -5899,7 +6611,7 @@
         expression: expression_2
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: int
@@ -5926,7 +6638,7 @@
         #F1 enum E (nameOffset:19) (firstTokenOffset:14) (offset:19)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -5940,7 +6652,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -5953,13 +6665,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@getter::values
           methods
             #F7 foo (nameOffset:40) (firstTokenOffset:30) (offset:40)
@@ -5973,14 +6685,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
       topLevelVariables
-        #F8 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F8 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_2
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   enums
     enum E
@@ -5988,7 +6700,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -5996,7 +6708,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -6005,16 +6717,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
@@ -6033,7 +6745,7 @@
               element: <testLibrary>::@getter::a
           returnType: void
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F8
       type: int
@@ -6042,7 +6754,7 @@
         expression: expression_2
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F9
       returnType: int
@@ -6083,7 +6795,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
           fields
-            #F3 hasInitializer v (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6099,7 +6811,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<dynamic>
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6111,22 +6823,22 @@
                       staticType: E<dynamic>
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
-            #F5 hasInitializer foo (nameOffset:58) (firstTokenOffset:58) (offset:58)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:58) (firstTokenOffset:58) (offset:58)
               element: <testLibrary>::@enum::E::@field::foo
               initializer: expression_2
                 IntegerLiteral
                   literal: 1 @64
                   staticType: int
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::values
-            #F9 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@enum::E::@getter::foo
           methods
             #F10 bar (nameOffset:81) (firstTokenOffset:69) (offset:81)
@@ -6140,14 +6852,14 @@
                     staticType: null
                   element: <testLibrary>::@enum::E::@getter::foo
       topLevelVariables
-        #F11 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F11 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_3
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   enums
     enum E
@@ -6166,7 +6878,7 @@
               element: <testLibrary>::@getter::foo
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F3
           type: E<dynamic>
@@ -6174,7 +6886,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E<dynamic>>
@@ -6182,7 +6894,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
-        static const hasInitializer foo
+        static const hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::E::@field::foo
           firstFragment: #F5
           type: int
@@ -6191,21 +6903,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E<dynamic>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E<dynamic>>
           variable: <testLibrary>::@enum::E::@field::values
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@enum::E::@getter::foo
           firstFragment: #F9
           returnType: int
@@ -6224,7 +6936,7 @@
               element: <testLibrary>::@enum::E::@getter::foo
           returnType: void
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F11
       type: int
@@ -6233,7 +6945,7 @@
         expression: expression_3
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F12
       returnType: int
@@ -6269,7 +6981,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
           fields
-            #F3 hasInitializer v (nameOffset:31) (firstTokenOffset:31) (offset:31)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6285,7 +6997,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E<dynamic>
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6298,23 +7010,23 @@
                   rightBracket: ] @0
                   staticType: List<E<dynamic>>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@enum::E::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F8 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F8 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_2
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   enums
     enum E
@@ -6333,7 +7045,7 @@
               element: <testLibrary>::@getter::a
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F3
           type: E<dynamic>
@@ -6341,7 +7053,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E<dynamic>>
@@ -6350,22 +7062,22 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F6
           returnType: E<dynamic>
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E<dynamic>>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F8
       type: int
@@ -6374,7 +7086,7 @@
         expression: expression_2
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F9
       returnType: int
@@ -6394,7 +7106,7 @@
         #F1 enum E (nameOffset:22) (firstTokenOffset:14) (offset:22)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6408,7 +7120,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6421,23 +7133,23 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_2
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   enums
     enum E
@@ -6445,7 +7157,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -6453,7 +7165,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -6462,22 +7174,22 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: int
@@ -6486,13 +7198,1721 @@
         expression: expression_2
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
 ''');
   }
+
+  test_primaryConstructor_declaringFormalParameter_optionalNamed_simple_final() async {
+    var library = await buildLibrary('''
+enum A({final int? foo}) {v(foo: 0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:26) (firstTokenOffset:26) (offset:26)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @27
+                    arguments
+                      NamedExpression
+                        name: Label
+                          label: SimpleIdentifier
+                            token: foo @28
+                            element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+                            staticType: null
+                          colon: : @31
+                        expression: IntegerLiteral
+                          literal: 0 @33
+                          staticType: int
+                    rightParenthesis: ) @34
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 optionalNamed final this.foo (nameOffset:19) (firstTokenOffset:8) (offset:19)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int?
+          getter: <testLibrary>::@enum::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 optionalNamed final declaring this.foo
+              firstFragment: #F6
+              type: int?
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int?
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_optionalPositional_simple_final() async {
+    var library = await buildLibrary('''
+enum A([final int? foo]) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:26) (firstTokenOffset:26) (offset:26)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @27
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @28
+                        staticType: int
+                    rightParenthesis: ) @29
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 optionalPositional final this.foo (nameOffset:19) (firstTokenOffset:8) (offset:19)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int?
+          getter: <testLibrary>::@enum::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 optionalPositional final declaring this.foo
+              firstFragment: #F6
+              type: int?
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int?
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredNamed_simple_final() async {
+    var library = await buildLibrary('''
+enum A({required final int foo}) {v(foo: 0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:34) (firstTokenOffset:34) (offset:34)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @35
+                    arguments
+                      NamedExpression
+                        name: Label
+                          label: SimpleIdentifier
+                            token: foo @36
+                            element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+                            staticType: null
+                          colon: : @39
+                        expression: IntegerLiteral
+                          literal: 0 @41
+                          staticType: int
+                    rightParenthesis: ) @42
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 requiredNamed final this.foo (nameOffset:27) (firstTokenOffset:8) (offset:27)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int
+          getter: <testLibrary>::@enum::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 requiredNamed final declaring this.foo
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_functionTyped_final() async {
+    var library = await buildLibrary('''
+enum A(final int foo()) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @26
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @27
+                        staticType: int
+                    rightParenthesis: ) @28
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 requiredPositional final this.foo (nameOffset:17) (firstTokenOffset:7) (offset:17)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int Function()
+          getter: <testLibrary>::@enum::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F6
+              type: int Function()
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int Function()
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_simple_final() async {
+    var library = await buildLibrary('''
+enum A(final int foo) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:23) (firstTokenOffset:23) (offset:23)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @24
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @25
+                        staticType: int
+                    rightParenthesis: ) @26
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 requiredPositional final this.foo (nameOffset:17) (firstTokenOffset:7) (offset:17)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int
+          getter: <testLibrary>::@enum::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_simple_var() async {
+    var library = await buildLibrary('''
+enum A(var int foo) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:21) (firstTokenOffset:21) (offset:21)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @22
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @23
+                        staticType: int
+                    rightParenthesis: ) @24
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 requiredPositional final this.foo (nameOffset:15) (firstTokenOffset:7) (offset:15)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+          setters
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@setter::foo
+              formalParameters
+                #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+                  element: <testLibrary>::@enum::A::@setter::foo::@formalParameter::value
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int
+          getter: <testLibrary>::@enum::A::@getter::foo
+          setter: <testLibrary>::@enum::A::@setter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 requiredPositional final declaring this.foo
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int
+          variable: <testLibrary>::@enum::A::@field::foo
+      setters
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@setter::foo
+          firstFragment: #F10
+          formalParameters
+            #E1 requiredPositional value
+              firstFragment: #F11
+              type: int
+          returnType: void
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_type_fromField_inferred() async {
+    var library = await buildLibrary('''
+class A {
+  int get foo => 0;
+}
+enum B(final foo) implements A {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      classes
+        #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@class::A
+          fields
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@field::foo
+          constructors
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+              element: <testLibrary>::@class::A::@constructor::new
+              typeName: A
+          getters
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+              element: <testLibrary>::@class::A::@getter::foo
+      enums
+        #F5 enum B (nameOffset:37) (firstTokenOffset:32) (offset:37)
+          element: <testLibrary>::@enum::B
+          fields
+            #F6 hasInitializer isOriginDeclaration v (nameOffset:64) (firstTokenOffset:64) (offset:64)
+              element: <testLibrary>::@enum::B::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: B @-1
+                      element: <testLibrary>::@enum::B
+                      type: B
+                    element: <testLibrary>::@enum::B::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @65
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @66
+                        staticType: int
+                    rightParenthesis: ) @67
+                  staticType: B
+            #F7 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+              element: <testLibrary>::@enum::B::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::B::@getter::v
+                      staticType: B
+                  rightBracket: ] @0
+                  staticType: List<B>
+            #F8 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+              element: <testLibrary>::@enum::B::@field::foo
+          constructors
+            #F9 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+              element: <testLibrary>::@enum::B::@constructor::new
+              typeName: B
+              typeNameOffset: 37
+              formalParameters
+                #F10 requiredPositional final this.foo (nameOffset:45) (firstTokenOffset:39) (offset:45)
+                  element: <testLibrary>::@enum::B::@constructor::new::@formalParameter::foo
+          getters
+            #F11 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+              element: <testLibrary>::@enum::B::@getter::v
+            #F12 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+              element: <testLibrary>::@enum::B::@getter::values
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+              element: <testLibrary>::@enum::B::@getter::foo
+  classes
+    class A
+      reference: <testLibrary>::@class::A
+      firstFragment: #F1
+      fields
+        synthetic isOriginGetterSetter foo
+          reference: <testLibrary>::@class::A::@field::foo
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@class::A::@getter::foo
+      constructors
+        synthetic isOriginImplicitDefault new
+          reference: <testLibrary>::@class::A::@constructor::new
+          firstFragment: #F3
+      getters
+        isOriginDeclaration foo
+          reference: <testLibrary>::@class::A::@getter::foo
+          firstFragment: #F4
+          returnType: int
+          variable: <testLibrary>::@class::A::@field::foo
+  enums
+    enum B
+      reference: <testLibrary>::@enum::B
+      firstFragment: #F5
+      supertype: Enum
+      interfaces
+        A
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::B::@field::v
+          firstFragment: #F6
+          type: B
+          constantInitializer
+            fragment: #F6
+            expression: expression_0
+          getter: <testLibrary>::@enum::B::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::B::@field::values
+          firstFragment: #F7
+          type: List<B>
+          constantInitializer
+            fragment: #F7
+            expression: expression_1
+          getter: <testLibrary>::@enum::B::@getter::values
+        synthetic final hasImplicitType isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::B::@field::foo
+          firstFragment: #F8
+          type: int
+          getter: <testLibrary>::@enum::B::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::B::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::B::@constructor::new
+          firstFragment: #F9
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.foo
+              firstFragment: #F10
+              type: int
+              field: <testLibrary>::@enum::B::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::B::@getter::v
+          firstFragment: #F11
+          returnType: B
+          variable: <testLibrary>::@enum::B::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::B::@getter::values
+          firstFragment: #F12
+          returnType: List<B>
+          variable: <testLibrary>::@enum::B::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::B::@getter::foo
+          firstFragment: #F13
+          returnType: int
+          variable: <testLibrary>::@enum::B::@field::foo
+''');
+  }
+
+  test_primaryConstructor_declaringFormalParameter_requiredPositional_type_typeParameter() async {
+    var library = await buildLibrary('''
+enum A<T>(final T foo) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          typeParameters
+            #F2 T (nameOffset:7) (firstTokenOffset:7) (offset:7)
+              element: #E0 T
+          fields
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:24) (firstTokenOffset:24) (offset:24)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A<int>
+                    element: ConstructorMember
+                      baseElement: <testLibrary>::@enum::A::@constructor::new
+                      substitution: {T: int}
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @25
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @26
+                        staticType: int
+                    rightParenthesis: ) @27
+                  staticType: A<int>
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A<int>
+                  rightBracket: ] @0
+                  staticType: List<A<dynamic>>
+            #F5 synthetic isOriginDeclaringFormalParameter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F6 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F7 requiredPositional final this.foo (nameOffset:18) (firstTokenOffset:10) (offset:18)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      typeParameters
+        #E0 T
+          firstFragment: #F2
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F3
+          type: A<int>
+          constantInitializer
+            fragment: #F3
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F4
+          type: List<A<dynamic>>
+          constantInitializer
+            fragment: #F4
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        synthetic final isOriginDeclaringFormalParameter foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F5
+          hasEnclosingTypeParameterReference: true
+          type: T
+          getter: <testLibrary>::@enum::A::@getter::foo
+          declaringFormalParameter: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F6
+          formalParameters
+            #E1 requiredPositional final declaring this.foo
+              firstFragment: #F7
+              type: T
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F8
+          returnType: A<int>
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F9
+          returnType: List<A<dynamic>>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F10
+          hasEnclosingTypeParameterReference: true
+          returnType: T
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_functionTyped() async {
+    var library = await buildLibrary('''
+enum A(int foo()) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:19) (firstTokenOffset:19) (offset:19)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @20
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @21
+                        staticType: int
+                    rightParenthesis: ) @22
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            #F4 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F5 requiredPositional foo (nameOffset:11) (firstTokenOffset:7) (offset:11)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F4
+          formalParameters
+            #E0 requiredPositional foo
+              firstFragment: #F5
+              type: int Function()
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F6
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F7
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_simple() async {
+    var library = await buildLibrary('''
+enum A(int foo) {v(0)}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:17) (firstTokenOffset:17) (offset:17)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @18
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @19
+                        staticType: int
+                    rightParenthesis: ) @20
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            #F4 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F5 requiredPositional foo (nameOffset:11) (firstTokenOffset:7) (offset:11)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F4
+          formalParameters
+            #E0 requiredPositional foo
+              firstFragment: #F5
+              type: int
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F6
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F7
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+''');
+  }
+
+  test_primaryConstructor_formalParameter_requiredPositional_this() async {
+    var library = await buildLibrary('''
+enum A(this.foo) {
+  v(0);
+  final int foo;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:21) (firstTokenOffset:21) (offset:21)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @22
+                    arguments
+                      IntegerLiteral
+                        literal: 0 @23
+                        staticType: int
+                    rightParenthesis: ) @24
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+            #F4 isOriginDeclaration foo (nameOffset:39) (firstTokenOffset:39) (offset:39)
+              element: <testLibrary>::@enum::A::@field::foo
+          constructors
+            #F5 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+              formalParameters
+                #F6 requiredPositional final this.foo (nameOffset:12) (firstTokenOffset:7) (offset:12)
+                  element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
+          getters
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+              element: <testLibrary>::@enum::A::@getter::foo
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+        final isOriginDeclaration foo
+          reference: <testLibrary>::@enum::A::@field::foo
+          firstFragment: #F4
+          type: int
+          getter: <testLibrary>::@enum::A::@getter::foo
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E0 requiredPositional final hasImplicitType this.foo
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@enum::A::@field::foo
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F7
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F8
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+        synthetic isOriginVariable foo
+          reference: <testLibrary>::@enum::A::@getter::foo
+          firstFragment: #F9
+          returnType: int
+          variable: <testLibrary>::@enum::A::@field::foo
+''');
+  }
+
+  test_primaryConstructor_named_const() async {
+    var library = await buildLibrary('''
+enum const A.named() {v.named()}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:11) (firstTokenOffset:0) (offset:11)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:22) (firstTokenOffset:22) (offset:22)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      element: <testLibrary>::@enum::A::@constructor::named
+                      staticType: null
+                    element: <testLibrary>::@enum::A::@constructor::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @29
+                    rightParenthesis: ) @30
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            #F4 const isOriginDeclaration isPrimary named (nameOffset:13) (firstTokenOffset:5) (offset:13)
+              element: <testLibrary>::@enum::A::@constructor::named
+              typeName: A
+              typeNameOffset: 11
+              periodOffset: 12
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::A::@getter::values
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+      constructors
+        const declaring isOriginDeclaration isPrimary named
+          reference: <testLibrary>::@enum::A::@constructor::named
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F5
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F6
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+''');
+  }
+
+  test_primaryConstructor_named_notConst() async {
+    var library = await buildLibrary('''
+enum A.named() {v.named()}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:16) (firstTokenOffset:16) (offset:16)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    period: . @0
+                    name: SimpleIdentifier
+                      token: named @-1
+                      element: <testLibrary>::@enum::A::@constructor::named
+                      staticType: null
+                    element: <testLibrary>::@enum::A::@constructor::named
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @23
+                    rightParenthesis: ) @24
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            #F4 const isOriginDeclaration isPrimary named (nameOffset:7) (firstTokenOffset:5) (offset:7)
+              element: <testLibrary>::@enum::A::@constructor::named
+              typeName: A
+              typeNameOffset: 5
+              periodOffset: 6
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+      constructors
+        const declaring isOriginDeclaration isPrimary named
+          reference: <testLibrary>::@enum::A::@constructor::named
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F5
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F6
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+''');
+  }
+
+  test_primaryConstructor_unnamed_const() async {
+    var library = await buildLibrary('''
+enum const A() {v}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:11) (firstTokenOffset:0) (offset:11)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:16) (firstTokenOffset:16) (offset:16)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            #F4 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:11)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 11
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+              element: <testLibrary>::@enum::A::@getter::values
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F5
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F6
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+''');
+  }
+
+  test_primaryConstructor_unnamed_notConst() async {
+    var library = await buildLibrary('''
+enum A() {v}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      enums
+        #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
+          element: <testLibrary>::@enum::A
+          fields
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:10) (firstTokenOffset:10) (offset:10)
+              element: <testLibrary>::@enum::A::@field::v
+              initializer: expression_0
+                InstanceCreationExpression
+                  constructorName: ConstructorName
+                    type: NamedType
+                      name: A @-1
+                      element: <testLibrary>::@enum::A
+                      type: A
+                    element: <testLibrary>::@enum::A::@constructor::new
+                  argumentList: ArgumentList
+                    leftParenthesis: ( @0
+                    rightParenthesis: ) @0
+                  staticType: A
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@field::values
+              initializer: expression_1
+                ListLiteral
+                  leftBracket: [ @0
+                  elements
+                    SimpleIdentifier
+                      token: v @-1
+                      element: <testLibrary>::@enum::A::@getter::v
+                      staticType: A
+                  rightBracket: ] @0
+                  staticType: List<A>
+          constructors
+            #F4 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:5) (offset:5)
+              element: <testLibrary>::@enum::A::@constructor::new
+              typeName: A
+              typeNameOffset: 5
+          getters
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+              element: <testLibrary>::@enum::A::@getter::v
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+              element: <testLibrary>::@enum::A::@getter::values
+  enums
+    enum A
+      reference: <testLibrary>::@enum::A
+      firstFragment: #F1
+      supertype: Enum
+      fields
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
+          reference: <testLibrary>::@enum::A::@field::v
+          firstFragment: #F2
+          type: A
+          constantInitializer
+            fragment: #F2
+            expression: expression_0
+          getter: <testLibrary>::@enum::A::@getter::v
+        synthetic static const isOriginEnumValues values
+          reference: <testLibrary>::@enum::A::@field::values
+          firstFragment: #F3
+          type: List<A>
+          constantInitializer
+            fragment: #F3
+            expression: expression_1
+          getter: <testLibrary>::@enum::A::@getter::values
+      constructors
+        const declaring isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@enum::A::@constructor::new
+          firstFragment: #F4
+      getters
+        synthetic static isOriginVariable v
+          reference: <testLibrary>::@enum::A::@getter::v
+          firstFragment: #F5
+          returnType: A
+          variable: <testLibrary>::@enum::A::@field::v
+        synthetic static isOriginVariable values
+          reference: <testLibrary>::@enum::A::@getter::values
+          firstFragment: #F6
+          returnType: List<A>
+          variable: <testLibrary>::@enum::A::@field::values
+''');
+  }
 }
 
 abstract class EnumElementTest_augmentation extends ElementsBaseTest {
@@ -6520,7 +8940,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6534,7 +8954,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6547,13 +8967,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F8 foo (nameOffset:21) (firstTokenOffset:16) (offset:21)
@@ -6570,7 +8990,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -6578,7 +8998,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -6587,16 +9007,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -6680,7 +9100,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:43) (firstTokenOffset:43) (offset:43)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:43) (firstTokenOffset:43) (offset:43)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6694,7 +9114,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6707,13 +9127,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@enum::A::@getter::values
     #F1 package:test/a1.dart
       element: <testLibrary>
@@ -6797,7 +9217,7 @@
       firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A
@@ -6805,7 +9225,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A>
@@ -6814,16 +9234,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
@@ -6863,7 +9283,7 @@
         #F1 enum A (nameOffset:13) (firstTokenOffset:0) (offset:13)
           element: <testLibrary>::@enum::A::@def::0
           fields
-            #F2 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F2 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::A::@def::0::@field::values
               initializer: expression_0
                 ListLiteral
@@ -6871,11 +9291,11 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F3 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F3 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::A::@def::0::@constructor::new
               typeName: A
           getters
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F4 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::A::@def::0::@getter::values
           methods
             #F5 foo1 (nameOffset:25) (firstTokenOffset:20) (offset:25)
@@ -6884,7 +9304,7 @@
           element: <testLibrary>::@enum::A::@def::1
           nextFragment: #F7
           fields
-            #F8 hasInitializer v (nameOffset:49) (firstTokenOffset:49) (offset:49)
+            #F8 hasInitializer isOriginDeclaration v (nameOffset:49) (firstTokenOffset:49) (offset:49)
               element: <testLibrary>::@enum::A::@def::1::@field::v
               initializer: expression_1
                 InstanceCreationExpression
@@ -6898,7 +9318,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F9 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@enum::A::@def::1::@field::values
               initializer: expression_2
                 ListLiteral
@@ -6911,13 +9331,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F10 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F10 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@enum::A::@def::1::@constructor::new
               typeName: A
           getters
-            #F11 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F11 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@enum::A::@def::1::@getter::v
-            #F12 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F12 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@enum::A::@def::1::@getter::values
           methods
             #F13 foo2 (nameOffset:59) (firstTokenOffset:54) (offset:59)
@@ -6934,7 +9354,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@def::0::@field::values
           firstFragment: #F2
           type: List<A>
@@ -6943,11 +9363,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::A::@def::0::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@def::0::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@def::0::@getter::values
           firstFragment: #F4
           returnType: List<A>
@@ -6962,7 +9382,7 @@
       firstFragment: #F6
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@def::1::@field::v
           firstFragment: #F8
           type: A
@@ -6970,7 +9390,7 @@
             fragment: #F8
             expression: expression_1
           getter: <testLibrary>::@enum::A::@def::1::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@def::1::@field::values
           firstFragment: #F9
           type: List<A>
@@ -6979,16 +9399,16 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@def::1::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@def::1::@constructor::new
           firstFragment: #F10
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@def::1::@getter::v
           firstFragment: #F11
           returnType: A
           variable: <testLibrary>::@enum::A::@def::1::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@def::1::@getter::values
           firstFragment: #F12
           returnType: List<A>
@@ -7027,7 +9447,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_0
                 ListLiteral
@@ -7035,11 +9455,11 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F6 foo1 (nameOffset:25) (firstTokenOffset:20) (offset:25)
@@ -7056,7 +9476,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F3
           type: List<A>
@@ -7065,11 +9485,11 @@
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F5
           returnType: List<A>
@@ -7108,7 +9528,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -7122,7 +9542,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -7139,19 +9559,19 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v1
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:30) (firstTokenOffset:17) (offset:30)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F8 hasInitializer v2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
+            #F8 hasInitializer isOriginDeclaration v2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_2
                 InstanceCreationExpression
@@ -7166,7 +9586,7 @@
                     rightParenthesis: ) @0
                   staticType: A
           getters
-            #F9 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F9 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@enum::A::@getter::v2
   enums
     enum A
@@ -7174,7 +9594,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::A::@field::v1
           firstFragment: #F3
           type: A
@@ -7182,7 +9602,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v1
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -7190,7 +9610,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::A::@field::v2
           firstFragment: #F8
           type: A
@@ -7199,21 +9619,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::v2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::A::@getter::v1
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v1
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::A::@getter::v2
           firstFragment: #F9
           returnType: A
@@ -7247,7 +9667,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -7261,7 +9681,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -7282,20 +9702,20 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v1
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:30) (firstTokenOffset:17) (offset:30)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           nextFragment: #F8
           fields
-            #F9 hasInitializer v2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
+            #F9 hasInitializer isOriginDeclaration v2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_2
                 InstanceCreationExpression
@@ -7310,13 +9730,13 @@
                     rightParenthesis: ) @0
                   staticType: A
           getters
-            #F10 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F10 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@enum::A::@getter::v2
         #F8 enum A (nameOffset:55) (firstTokenOffset:42) (offset:55)
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           fields
-            #F11 hasInitializer v3 (nameOffset:61) (firstTokenOffset:61) (offset:61)
+            #F11 hasInitializer isOriginDeclaration v3 (nameOffset:61) (firstTokenOffset:61) (offset:61)
               element: <testLibrary>::@enum::A::@field::v3
               initializer: expression_3
                 InstanceCreationExpression
@@ -7331,7 +9751,7 @@
                     rightParenthesis: ) @0
                   staticType: A
           getters
-            #F12 synthetic v3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F12 synthetic isOriginVariable v3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@enum::A::@getter::v3
   enums
     enum A
@@ -7339,7 +9759,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::A::@field::v1
           firstFragment: #F3
           type: A
@@ -7347,7 +9767,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v1
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -7355,7 +9775,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::A::@field::v2
           firstFragment: #F9
           type: A
@@ -7363,7 +9783,7 @@
             fragment: #F9
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::v2
-        static const enumConstant hasInitializer v3
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v3
           reference: <testLibrary>::@enum::A::@field::v3
           firstFragment: #F11
           type: A
@@ -7372,26 +9792,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::v3
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::A::@getter::v1
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v1
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::A::@getter::v2
           firstFragment: #F10
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v2
-        synthetic static v3
+        synthetic static isOriginVariable v3
           reference: <testLibrary>::@enum::A::@getter::v3
           firstFragment: #F12
           returnType: A
@@ -7422,7 +9842,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -7436,7 +9856,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -7457,19 +9877,19 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v1
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:30) (firstTokenOffset:17) (offset:30)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F8 hasInitializer v2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
+            #F8 hasInitializer isOriginDeclaration v2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_2
                 InstanceCreationExpression
@@ -7484,7 +9904,7 @@
                     rightParenthesis: ) @0
                   staticType: null
               nextFragment: #F9
-            #F9 augment hasInitializer v2 (nameOffset:50) (firstTokenOffset:42) (offset:50)
+            #F9 augment hasInitializer isOriginDeclaration v2 (nameOffset:50) (firstTokenOffset:42) (offset:50)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_3
                 InstanceCreationExpression
@@ -7500,7 +9920,7 @@
                   staticType: A
               previousFragment: #F8
           getters
-            #F10 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F10 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@enum::A::@getter::v2
   enums
     enum A
@@ -7508,7 +9928,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::A::@field::v1
           firstFragment: #F3
           type: A
@@ -7516,7 +9936,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v1
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -7524,7 +9944,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::A::@field::v2
           firstFragment: #F8
           type: A
@@ -7533,21 +9953,21 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::v2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::A::@getter::v1
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v1
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::A::@getter::v2
           firstFragment: #F10
           returnType: A
@@ -7577,7 +9997,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -7591,7 +10011,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 hasInitializer v2 (nameOffset:15) (firstTokenOffset:15) (offset:15)
+            #F4 hasInitializer isOriginDeclaration v2 (nameOffset:15) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_1
                 InstanceCreationExpression
@@ -7606,7 +10026,7 @@
                     rightParenthesis: ) @0
                   staticType: null
               nextFragment: #F5
-            #F6 hasInitializer v3 (nameOffset:19) (firstTokenOffset:19) (offset:19)
+            #F6 hasInitializer isOriginDeclaration v3 (nameOffset:19) (firstTokenOffset:19) (offset:19)
               element: <testLibrary>::@enum::A::@field::v3
               initializer: expression_2
                 InstanceCreationExpression
@@ -7620,7 +10040,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_3
                 ListLiteral
@@ -7645,23 +10065,23 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F9 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F9 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v1
-            #F10 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F10 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@enum::A::@getter::v2
-            #F11 synthetic v3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F11 synthetic isOriginVariable v3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::A::@getter::v3
-            #F12 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F12 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:38) (firstTokenOffset:25) (offset:38)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F5 augment hasInitializer v2 (nameOffset:52) (firstTokenOffset:44) (offset:52)
+            #F5 augment hasInitializer isOriginDeclaration v2 (nameOffset:52) (firstTokenOffset:44) (offset:52)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_4
                 InstanceCreationExpression
@@ -7682,7 +10102,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::A::@field::v1
           firstFragment: #F3
           type: A
@@ -7690,7 +10110,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v1
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::A::@field::v2
           firstFragment: #F4
           type: A
@@ -7698,7 +10118,7 @@
             fragment: #F5
             expression: expression_4
           getter: <testLibrary>::@enum::A::@getter::v2
-        static const enumConstant hasInitializer v3
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v3
           reference: <testLibrary>::@enum::A::@field::v3
           firstFragment: #F6
           type: A
@@ -7706,7 +10126,7 @@
             fragment: #F6
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::v3
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F7
           type: List<A>
@@ -7715,26 +10135,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::A::@getter::v1
           firstFragment: #F9
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v1
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::A::@getter::v2
           firstFragment: #F10
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v2
-        synthetic static v3
+        synthetic static isOriginVariable v3
           reference: <testLibrary>::@enum::A::@getter::v3
           firstFragment: #F11
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v3
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F12
           returnType: List<A>
@@ -7765,7 +10185,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v1 (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -7784,7 +10204,7 @@
                     rightParenthesis: ) @15
                   staticType: null
               nextFragment: #F4
-            #F5 hasInitializer v2 (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F5 hasInitializer isOriginDeclaration v2 (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_1
                 InstanceCreationExpression
@@ -7802,7 +10222,7 @@
                         staticType: int
                     rightParenthesis: ) @22
                   staticType: A
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_2
                 ListLiteral
@@ -7823,7 +10243,7 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F7 const new (nameOffset:<null>) (firstTokenOffset:27) (offset:33)
+            #F7 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:33)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 33
@@ -7831,17 +10251,17 @@
                 #F8 requiredPositional value (nameOffset:39) (firstTokenOffset:35) (offset:39)
                   element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::value
           getters
-            #F9 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F9 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v1
-            #F10 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F10 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@enum::A::@getter::v2
-            #F11 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F11 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:63) (firstTokenOffset:50) (offset:63)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer v1 (nameOffset:77) (firstTokenOffset:69) (offset:77)
+            #F4 augment hasInitializer isOriginDeclaration v1 (nameOffset:77) (firstTokenOffset:69) (offset:77)
               element: <testLibrary>::@enum::A::@field::v1
               initializer: expression_3
                 InstanceCreationExpression
@@ -7866,7 +10286,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: <testLibrary>::@enum::A::@field::v1
           firstFragment: #F3
           type: A
@@ -7874,7 +10294,7 @@
             fragment: #F4
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::v1
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::A::@field::v2
           firstFragment: #F5
           type: A
@@ -7882,7 +10302,7 @@
             fragment: #F5
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::v2
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A>
@@ -7891,7 +10311,7 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
           formalParameters
@@ -7899,17 +10319,17 @@
               firstFragment: #F8
               type: int
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: <testLibrary>::@enum::A::@getter::v1
           firstFragment: #F9
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v1
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::A::@getter::v2
           firstFragment: #F10
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v2
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F11
           returnType: List<A>
@@ -7942,7 +10362,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -7957,7 +10377,7 @@
                     rightParenthesis: ) @0
                   staticType: null
               nextFragment: #F4
-            #F5 hasInitializer v2 (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F5 hasInitializer isOriginDeclaration v2 (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::A::@field::v2
               initializer: expression_1
                 InstanceCreationExpression
@@ -7971,7 +10391,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_2
                 ListLiteral
@@ -7992,17 +10412,17 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F8 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::A::@getter::v2
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:33) (firstTokenOffset:20) (offset:33)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer v (nameOffset:50) (firstTokenOffset:42) (offset:50)
+            #F4 augment hasInitializer isOriginDeclaration v (nameOffset:50) (firstTokenOffset:42) (offset:50)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_3
                 InstanceCreationExpression
@@ -8023,7 +10443,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8031,7 +10451,7 @@
             fragment: #F4
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::v
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: <testLibrary>::@enum::A::@field::v2
           firstFragment: #F5
           type: A
@@ -8039,7 +10459,7 @@
             fragment: #F5
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::v2
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A>
@@ -8048,17 +10468,17 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::values
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: <testLibrary>::@enum::A::@getter::v2
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v2
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
@@ -8089,7 +10509,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8108,7 +10528,7 @@
                     leftParenthesis: ( @18
                     rightParenthesis: ) @19
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8121,15 +10541,15 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:38) (firstTokenOffset:25) (offset:38)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F7 const named (nameOffset:53) (firstTokenOffset:45) (offset:53)
+            #F7 const isOriginDeclaration named (nameOffset:53) (firstTokenOffset:45) (offset:53)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 51
@@ -8140,7 +10560,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8148,7 +10568,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8157,16 +10577,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F5
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F6
           returnType: List<A>
@@ -8201,7 +10621,7 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8232,7 +10652,7 @@
                     leftParenthesis: ( @26
                     rightParenthesis: ) @27
                   staticType: A<int>
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8245,9 +10665,9 @@
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:45) (firstTokenOffset:32) (offset:45)
           element: <testLibrary>::@enum::A
@@ -8257,7 +10677,7 @@
               element: #E0 T
               previousFragment: #F3
           constructors
-            #F9 const named (nameOffset:63) (firstTokenOffset:55) (offset:63)
+            #F9 const isOriginDeclaration named (nameOffset:63) (firstTokenOffset:55) (offset:63)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 61
@@ -8274,7 +10694,7 @@
           firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A<int>
@@ -8282,7 +10702,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A<dynamic>>
@@ -8291,7 +10711,7 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F9
           formalParameters
@@ -8299,12 +10719,12 @@
               firstFragment: #F10
               type: T
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A<dynamic>>
@@ -8336,7 +10756,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8350,7 +10770,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8363,20 +10783,20 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 22
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:43) (firstTokenOffset:30) (offset:43)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F8 const named (nameOffset:58) (firstTokenOffset:50) (offset:58)
+            #F8 const isOriginDeclaration named (nameOffset:58) (firstTokenOffset:50) (offset:58)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 56
@@ -8387,7 +10807,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8395,7 +10815,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8404,19 +10824,19 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -8447,7 +10867,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8461,7 +10881,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8474,15 +10894,15 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:30) (firstTokenOffset:17) (offset:30)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F7 const new (nameOffset:<null>) (firstTokenOffset:37) (offset:43)
+            #F7 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:43)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 43
@@ -8492,7 +10912,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8500,7 +10920,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8509,16 +10929,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F5
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F6
           returnType: List<A>
@@ -8550,7 +10970,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8564,7 +10984,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8577,21 +10997,21 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const named (nameOffset:24) (firstTokenOffset:16) (offset:24)
+            #F5 const isOriginDeclaration named (nameOffset:24) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 22
               periodOffset: 23
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:49) (firstTokenOffset:36) (offset:49)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F8 const new (nameOffset:<null>) (firstTokenOffset:56) (offset:62)
+            #F8 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:56) (offset:62)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 62
@@ -8601,7 +11021,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8609,7 +11029,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8618,19 +11038,19 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F5
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -8662,7 +11082,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8680,7 +11100,7 @@
                         staticType: int
                     rightParenthesis: ) @14
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8692,20 +11112,20 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 f (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F5 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@enum::A::@field::f
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F8 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F8 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::A::@getter::f
         #F2 enum A (nameOffset:48) (firstTokenOffset:35) (offset:48)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F9 const named (nameOffset:63) (firstTokenOffset:55) (offset:63)
+            #F9 const isOriginDeclaration named (nameOffset:63) (firstTokenOffset:55) (offset:63)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 61
@@ -8719,7 +11139,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8727,7 +11147,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8735,13 +11155,13 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final f
+        final isOriginDeclaration f
           reference: <testLibrary>::@enum::A::@field::f
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::A::@getter::f
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F9
           formalParameters
@@ -8750,17 +11170,17 @@
               type: int
               field: <testLibrary>::@enum::A::@field::f
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@enum::A::@getter::f
           firstFragment: #F8
           returnType: int
@@ -8792,7 +11212,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8806,7 +11226,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8818,20 +11238,20 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 f (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 isOriginDeclaration f (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::f
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F8 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F8 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::f
         #F2 enum A (nameOffset:45) (firstTokenOffset:32) (offset:45)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F9 const named (nameOffset:60) (firstTokenOffset:52) (offset:60)
+            #F9 const isOriginDeclaration named (nameOffset:60) (firstTokenOffset:52) (offset:60)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 58
@@ -8842,7 +11262,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8850,7 +11270,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8858,13 +11278,13 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final f
+        final isOriginDeclaration f
           reference: <testLibrary>::@enum::A::@field::f
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::A::@getter::f
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F9
           constantInitializers
@@ -8878,17 +11298,17 @@
                 literal: 0 @74
                 staticType: int
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@enum::A::@getter::f
           firstFragment: #F8
           returnType: int
@@ -8920,7 +11340,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -8934,7 +11354,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -8946,7 +11366,7 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
@@ -8954,21 +11374,21 @@
                   staticType: null
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F6 augment hasInitializer foo (nameOffset:76) (firstTokenOffset:76) (offset:76)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:76) (firstTokenOffset:76) (offset:76)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_3
                 IntegerLiteral
@@ -8981,7 +11401,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -8989,7 +11409,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -8997,7 +11417,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -9006,21 +11426,21 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
@@ -9056,7 +11476,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9070,7 +11490,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9082,7 +11502,7 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
@@ -9090,22 +11510,22 @@
                   staticType: null
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           nextFragment: #F11
           fields
-            #F6 augment hasInitializer foo (nameOffset:76) (firstTokenOffset:76) (offset:76)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:76) (firstTokenOffset:76) (offset:76)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_3
                 IntegerLiteral
@@ -9117,7 +11537,7 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           fields
-            #F12 augment hasInitializer foo (nameOffset:126) (firstTokenOffset:126) (offset:126)
+            #F12 augment hasInitializer isOriginDeclaration foo (nameOffset:126) (firstTokenOffset:126) (offset:126)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_4
                 IntegerLiteral
@@ -9130,7 +11550,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9138,7 +11558,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9146,7 +11566,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -9155,21 +11575,21 @@
             expression: expression_4
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
@@ -9205,7 +11625,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9219,7 +11639,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9231,7 +11651,7 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
@@ -9239,15 +11659,15 @@
                   staticType: null
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
               nextFragment: #F11
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
@@ -9255,14 +11675,14 @@
           previousFragment: #F1
           nextFragment: #F12
           getters
-            #F11 augment foo (nameOffset:74) (firstTokenOffset:58) (offset:74)
+            #F11 augment isOriginDeclaration foo (nameOffset:74) (firstTokenOffset:58) (offset:74)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F10
         #F12 enum A (nameOffset:100) (firstTokenOffset:87) (offset:100)
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           fields
-            #F6 augment hasInitializer foo (nameOffset:125) (firstTokenOffset:125) (offset:125)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:125) (firstTokenOffset:125) (offset:125)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_3
                 IntegerLiteral
@@ -9275,7 +11695,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9283,7 +11703,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9291,7 +11711,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -9300,21 +11720,21 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
@@ -9350,7 +11770,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9364,7 +11784,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9376,7 +11796,7 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
@@ -9384,22 +11804,22 @@
                   staticType: null
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           nextFragment: #F11
           setters
-            #F12 augment foo (nameOffset:70) (firstTokenOffset:58) (offset:70)
+            #F12 augment isOriginDeclaration foo (nameOffset:70) (firstTokenOffset:58) (offset:70)
               element: <testLibrary>::@enum::A::@setter::foo
               formalParameters
                 #F13 requiredPositional _ (nameOffset:78) (firstTokenOffset:74) (offset:78)
@@ -9408,7 +11828,7 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           fields
-            #F6 augment hasInitializer foo (nameOffset:125) (firstTokenOffset:125) (offset:125)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:125) (firstTokenOffset:125) (offset:125)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_3
                 IntegerLiteral
@@ -9421,7 +11841,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9429,7 +11849,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9437,7 +11857,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -9447,27 +11867,27 @@
           getter: <testLibrary>::@enum::A::@getter::foo
           setter: <testLibrary>::@enum::A::@setter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@enum::A::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@setter::foo
           firstFragment: #F12
           formalParameters
@@ -9503,7 +11923,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9517,7 +11937,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9529,7 +11949,7 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
@@ -9537,21 +11957,21 @@
                   staticType: null
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F6 augment hasInitializer foo (nameOffset:79) (firstTokenOffset:79) (offset:79)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:79) (firstTokenOffset:79) (offset:79)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_3
                 DoubleLiteral
@@ -9564,7 +11984,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9572,7 +11992,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9580,7 +12000,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -9589,21 +12009,21 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
@@ -9638,7 +12058,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9652,7 +12072,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9664,7 +12084,7 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:37) (firstTokenOffset:37) (offset:37)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 SimpleIdentifier
@@ -9673,21 +12093,21 @@
                   staticType: null
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:83) (firstTokenOffset:70) (offset:83)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F6 augment hasInitializer foo (nameOffset:119) (firstTokenOffset:119) (offset:119)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:119) (firstTokenOffset:119) (offset:119)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_3
                 SimpleIdentifier
@@ -9701,7 +12121,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9709,7 +12129,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9717,7 +12137,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int Function()
@@ -9726,21 +12146,21 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int Function()
@@ -9774,7 +12194,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9788,7 +12208,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9800,25 +12220,25 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 foo (nameOffset:24) (firstTokenOffset:16) (offset:24)
+            #F10 isOriginDeclaration foo (nameOffset:24) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:50) (firstTokenOffset:37) (offset:50)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F6 augment hasInitializer foo (nameOffset:75) (firstTokenOffset:75) (offset:75)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:75) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
@@ -9831,7 +12251,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9839,7 +12259,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9847,7 +12267,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic hasInitializer foo
+        synthetic hasInitializer isOriginGetterSetter foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -9856,21 +12276,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
@@ -9902,7 +12322,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -9916,7 +12336,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -9928,35 +12348,35 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo1 (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo1 (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo1
               initializer: expression_2
                 IntegerLiteral
                   literal: 0 @33
                   staticType: int
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F9 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo1
         #F2 enum A (nameOffset:52) (firstTokenOffset:39) (offset:52)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F10 hasInitializer foo2 (nameOffset:69) (firstTokenOffset:69) (offset:69)
+            #F10 hasInitializer isOriginDeclaration foo2 (nameOffset:69) (firstTokenOffset:69) (offset:69)
               element: <testLibrary>::@enum::A::@field::foo2
               initializer: expression_3
                 IntegerLiteral
                   literal: 0 @76
                   staticType: int
           getters
-            #F11 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F11 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@enum::A::@getter::foo2
   enums
     enum A
@@ -9964,7 +12384,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -9972,7 +12392,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -9980,7 +12400,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo1
+        final hasInitializer isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F5
           type: int
@@ -9988,7 +12408,7 @@
             fragment: #F5
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::foo1
-        final hasInitializer foo2
+        final hasInitializer isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F10
           type: int
@@ -9997,26 +12417,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::A::@getter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@enum::A::@getter::foo1
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@enum::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@enum::A::@getter::foo2
           firstFragment: #F11
           returnType: int
@@ -10052,7 +12472,7 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10076,7 +12496,7 @@
                     leftParenthesis: ( @20
                     rightParenthesis: ) @21
                   staticType: A<int>
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10088,18 +12508,18 @@
                       staticType: A<int>
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
-            #F7 foo1 (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F7 isOriginDeclaration foo1 (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@enum::A::@field::foo1
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F9 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F9 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::A::@getter::v
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F11 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F11 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@enum::A::@getter::foo1
         #F2 enum A (nameOffset:56) (firstTokenOffset:43) (offset:56)
           element: <testLibrary>::@enum::A
@@ -10109,10 +12529,10 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F12 foo2 (nameOffset:74) (firstTokenOffset:74) (offset:74)
+            #F12 isOriginDeclaration foo2 (nameOffset:74) (firstTokenOffset:74) (offset:74)
               element: <testLibrary>::@enum::A::@field::foo2
           getters
-            #F13 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+            #F13 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
               element: <testLibrary>::@enum::A::@getter::foo2
   enums
     enum A
@@ -10123,7 +12543,7 @@
           firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A<int>
@@ -10131,7 +12551,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A<dynamic>>
@@ -10139,40 +12559,40 @@
             fragment: #F6
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final foo1
+        final isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@enum::A::@getter::foo1
-        final foo2
+        final isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F12
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@enum::A::@getter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F9
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F10
           returnType: List<A<dynamic>>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@enum::A::@getter::foo1
           firstFragment: #F11
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@enum::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@enum::A::@getter::foo2
           firstFragment: #F13
           hasEnclosingTypeParameterReference: true
@@ -10205,7 +12625,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10223,7 +12643,7 @@
                         staticType: int
                     rightParenthesis: ) @14
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10236,7 +12656,7 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:19) (offset:25)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:19) (offset:25)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 25
@@ -10244,18 +12664,18 @@
                 #F6 requiredPositional final this.foo (nameOffset:32) (firstTokenOffset:27) (offset:32)
                   element: <testLibrary>::@enum::A::@constructor::new::@formalParameter::foo
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:54) (firstTokenOffset:41) (offset:54)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F9 foo (nameOffset:71) (firstTokenOffset:71) (offset:71)
+            #F9 isOriginDeclaration foo (nameOffset:71) (firstTokenOffset:71) (offset:71)
               element: <testLibrary>::@enum::A::@field::foo
           getters
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@enum::A::@getter::foo
   enums
     enum A
@@ -10263,7 +12683,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -10271,7 +12691,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -10279,13 +12699,13 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F9
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -10294,17 +12714,17 @@
               type: int
               field: <testLibrary>::@enum::A::@field::foo
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F10
           returnType: int
@@ -10336,7 +12756,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10350,7 +12770,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10363,23 +12783,23 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 22
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:53) (firstTokenOffset:40) (offset:53)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F8 foo (nameOffset:70) (firstTokenOffset:70) (offset:70)
+            #F8 isOriginDeclaration foo (nameOffset:70) (firstTokenOffset:70) (offset:70)
               element: <testLibrary>::@enum::A::@field::foo
           getters
-            #F9 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@enum::A::@getter::foo
   enums
     enum A
@@ -10387,7 +12807,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -10395,7 +12815,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -10403,13 +12823,13 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
           constantInitializers
@@ -10423,17 +12843,17 @@
                 literal: 0 @34
                 staticType: int
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F9
           returnType: int
@@ -10465,7 +12885,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10479,7 +12899,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10491,27 +12911,27 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo1
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 foo1 (nameOffset:24) (firstTokenOffset:16) (offset:24)
+            #F9 isOriginDeclaration foo1 (nameOffset:24) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::A::@getter::foo1
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F10 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F10 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@enum::A::@field::foo2
           getters
-            #F11 foo2 (nameOffset:66) (firstTokenOffset:58) (offset:66)
+            #F11 isOriginDeclaration foo2 (nameOffset:66) (firstTokenOffset:58) (offset:66)
               element: <testLibrary>::@enum::A::@getter::foo2
   enums
     enum A
@@ -10519,7 +12939,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -10527,7 +12947,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -10535,37 +12955,37 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F10
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@getter::foo1
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@enum::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@getter::foo2
           firstFragment: #F11
           returnType: int
@@ -10601,7 +13021,7 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10625,7 +13045,7 @@
                     leftParenthesis: ( @20
                     rightParenthesis: ) @21
                   staticType: A<int>
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10637,18 +13057,18 @@
                       staticType: A<int>
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
-            #F7 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo1
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F9 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F9 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::A::@getter::v
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F11 foo1 (nameOffset:32) (firstTokenOffset:26) (offset:32)
+            #F11 isOriginDeclaration foo1 (nameOffset:32) (firstTokenOffset:26) (offset:32)
               element: <testLibrary>::@enum::A::@getter::foo1
         #F2 enum A (nameOffset:54) (firstTokenOffset:41) (offset:54)
           element: <testLibrary>::@enum::A
@@ -10658,10 +13078,10 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F12 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F12 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@enum::A::@field::foo2
           getters
-            #F13 foo2 (nameOffset:70) (firstTokenOffset:64) (offset:70)
+            #F13 isOriginDeclaration foo2 (nameOffset:70) (firstTokenOffset:64) (offset:70)
               element: <testLibrary>::@enum::A::@getter::foo2
   enums
     enum A
@@ -10672,7 +13092,7 @@
           firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A<int>
@@ -10680,7 +13100,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A<dynamic>>
@@ -10688,40 +13108,40 @@
             fragment: #F6
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@enum::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F12
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@enum::A::@getter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F9
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F10
           returnType: List<A<dynamic>>
           variable: <testLibrary>::@enum::A::@field::values
-        abstract foo1
+        abstract isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@getter::foo1
           firstFragment: #F11
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@enum::A::@field::foo1
-        abstract foo2
+        abstract isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@getter::foo2
           firstFragment: #F13
           hasEnclosingTypeParameterReference: true
@@ -10754,7 +13174,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10768,7 +13188,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10780,29 +13200,29 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
                   literal: 0 @32
                   staticType: int
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
               nextFragment: #F10
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           getters
-            #F10 augment foo (nameOffset:74) (firstTokenOffset:58) (offset:74)
+            #F10 augment isOriginDeclaration foo (nameOffset:74) (firstTokenOffset:58) (offset:74)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F9
   enums
@@ -10811,7 +13231,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -10819,7 +13239,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -10827,7 +13247,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -10836,21 +13256,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F9
           returnType: int
@@ -10886,7 +13306,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -10900,7 +13320,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -10912,22 +13332,22 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
                   literal: 0 @32
                   staticType: int
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
               nextFragment: #F10
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
@@ -10935,7 +13355,7 @@
           previousFragment: #F1
           nextFragment: #F11
           getters
-            #F10 augment foo (nameOffset:74) (firstTokenOffset:58) (offset:74)
+            #F10 augment isOriginDeclaration foo (nameOffset:74) (firstTokenOffset:58) (offset:74)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F9
               nextFragment: #F12
@@ -10943,7 +13363,7 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           getters
-            #F12 augment foo (nameOffset:123) (firstTokenOffset:107) (offset:123)
+            #F12 augment isOriginDeclaration foo (nameOffset:123) (firstTokenOffset:107) (offset:123)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F10
   enums
@@ -10952,7 +13372,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -10960,7 +13380,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -10968,7 +13388,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -10977,21 +13397,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F9
           returnType: int
@@ -11024,7 +13444,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11038,7 +13458,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11050,29 +13470,29 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo1
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo2
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F10 foo1 (nameOffset:24) (firstTokenOffset:16) (offset:24)
+            #F10 isOriginDeclaration foo1 (nameOffset:24) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::A::@getter::foo1
               nextFragment: #F11
-            #F12 foo2 (nameOffset:45) (firstTokenOffset:37) (offset:45)
+            #F12 isOriginDeclaration foo2 (nameOffset:45) (firstTokenOffset:37) (offset:45)
               element: <testLibrary>::@enum::A::@getter::foo2
         #F2 enum A (nameOffset:72) (firstTokenOffset:59) (offset:72)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           getters
-            #F11 augment foo1 (nameOffset:95) (firstTokenOffset:79) (offset:95)
+            #F11 augment isOriginDeclaration foo1 (nameOffset:95) (firstTokenOffset:79) (offset:95)
               element: <testLibrary>::@enum::A::@getter::foo1
               previousFragment: #F10
   enums
@@ -11081,7 +13501,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -11089,7 +13509,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -11097,37 +13517,37 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@getter::foo1
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@enum::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@getter::foo2
           firstFragment: #F12
           returnType: int
@@ -11160,7 +13580,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11174,7 +13594,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11186,29 +13606,29 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 foo (nameOffset:24) (firstTokenOffset:16) (offset:24)
+            #F9 isOriginDeclaration foo (nameOffset:24) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::A::@getter::foo
               nextFragment: #F10
         #F2 enum A (nameOffset:50) (firstTokenOffset:37) (offset:50)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           getters
-            #F10 augment foo (nameOffset:73) (firstTokenOffset:57) (offset:73)
+            #F10 augment isOriginDeclaration foo (nameOffset:73) (firstTokenOffset:57) (offset:73)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F9
               nextFragment: #F11
-            #F11 augment foo (nameOffset:101) (firstTokenOffset:85) (offset:101)
+            #F11 augment isOriginDeclaration foo (nameOffset:101) (firstTokenOffset:85) (offset:101)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F10
   enums
@@ -11217,7 +13637,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -11225,7 +13645,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -11233,27 +13653,27 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F9
           returnType: int
@@ -11289,7 +13709,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11303,7 +13723,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11315,18 +13735,18 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 foo (nameOffset:24) (firstTokenOffset:16) (offset:24)
+            #F9 isOriginDeclaration foo (nameOffset:24) (firstTokenOffset:16) (offset:24)
               element: <testLibrary>::@enum::A::@getter::foo
               nextFragment: #F10
         #F2 enum A (nameOffset:50) (firstTokenOffset:37) (offset:50)
@@ -11334,7 +13754,7 @@
           previousFragment: #F1
           nextFragment: #F11
           getters
-            #F10 augment foo (nameOffset:73) (firstTokenOffset:57) (offset:73)
+            #F10 augment isOriginDeclaration foo (nameOffset:73) (firstTokenOffset:57) (offset:73)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F9
               nextFragment: #F12
@@ -11342,7 +13762,7 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           getters
-            #F12 augment foo (nameOffset:122) (firstTokenOffset:106) (offset:122)
+            #F12 augment isOriginDeclaration foo (nameOffset:122) (firstTokenOffset:106) (offset:122)
               element: <testLibrary>::@enum::A::@getter::foo
               previousFragment: #F10
   enums
@@ -11351,7 +13771,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -11359,7 +13779,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -11367,27 +13787,27 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F9
           returnType: int
@@ -11420,7 +13840,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11434,7 +13854,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11447,18 +13867,18 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:29) (firstTokenOffset:16) (offset:29)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F7 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::A::@field::foo
           getters
-            #F8 augment foo (nameOffset:52) (firstTokenOffset:36) (offset:52)
+            #F8 augment isOriginDeclaration foo (nameOffset:52) (firstTokenOffset:36) (offset:52)
               element: <testLibrary>::@enum::A::@getter::foo
   enums
     enum A
@@ -11466,7 +13886,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -11474,7 +13894,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -11482,23 +13902,23 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F7
           type: int
           getter: <testLibrary>::@enum::A::@getter::foo
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F5
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F6
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F8
           returnType: int
@@ -11528,13 +13948,13 @@
         #F1 class I1 (nameOffset:35) (firstTokenOffset:29) (offset:35)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:80) (firstTokenOffset:74) (offset:80)
           element: <testLibrary>::@class::I2
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
       enums
@@ -11542,7 +13962,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F6
           fields
-            #F7 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F7 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11556,7 +13976,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11569,13 +13989,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F9 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F10 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F10 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::A::@getter::v
-            #F11 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F11 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F6 enum A (nameOffset:55) (firstTokenOffset:42) (offset:55)
           element: <testLibrary>::@enum::A
@@ -11585,14 +14005,14 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F4
   enums
@@ -11604,7 +14024,7 @@
         I1
         I2
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F7
           type: A
@@ -11612,7 +14032,7 @@
             fragment: #F7
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F8
           type: List<A>
@@ -11621,16 +14041,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F9
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F10
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F11
           returnType: List<A>
@@ -11663,19 +14083,19 @@
         #F1 class I1 (nameOffset:35) (firstTokenOffset:29) (offset:35)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:80) (firstTokenOffset:74) (offset:80)
           element: <testLibrary>::@class::I2
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
         #F5 class I3 (nameOffset:125) (firstTokenOffset:119) (offset:125)
           element: <testLibrary>::@class::I3
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:125)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:125)
               element: <testLibrary>::@class::I3::@constructor::new
               typeName: I3
       enums
@@ -11683,7 +14103,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F8
           fields
-            #F9 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F9 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11697,7 +14117,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F10 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11710,13 +14130,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F11 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F11 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F12 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F12 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::A::@getter::v
-            #F13 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F13 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F8 enum A (nameOffset:55) (firstTokenOffset:42) (offset:55)
           element: <testLibrary>::@enum::A
@@ -11730,21 +14150,21 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F4
     class I3
       reference: <testLibrary>::@class::I3
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I3::@constructor::new
           firstFragment: #F6
   enums
@@ -11757,7 +14177,7 @@
         I2
         I3
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F9
           type: A
@@ -11765,7 +14185,7 @@
             fragment: #F9
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F10
           type: List<A>
@@ -11774,16 +14194,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F11
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F12
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F13
           returnType: List<A>
@@ -11813,7 +14233,7 @@
         #F1 class I1 (nameOffset:45) (firstTokenOffset:39) (offset:45)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:96) (firstTokenOffset:90) (offset:96)
@@ -11822,7 +14242,7 @@
             #F4 E (nameOffset:99) (firstTokenOffset:99) (offset:99)
               element: #E0 E
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
       enums
@@ -11834,7 +14254,7 @@
               element: #E1 T
               nextFragment: #F9
           fields
-            #F10 hasInitializer v (nameOffset:28) (firstTokenOffset:28) (offset:28)
+            #F10 hasInitializer isOriginDeclaration v (nameOffset:28) (firstTokenOffset:28) (offset:28)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -11858,7 +14278,7 @@
                     leftParenthesis: ( @34
                     rightParenthesis: ) @35
                   staticType: A<int>
-            #F11 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F11 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -11871,13 +14291,13 @@
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
           constructors
-            #F12 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F12 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F13 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F13 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@enum::A::@getter::v
-            #F14 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F14 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F7 enum A (nameOffset:65) (firstTokenOffset:52) (offset:65)
           element: <testLibrary>::@enum::A
@@ -11891,7 +14311,7 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
@@ -11901,7 +14321,7 @@
         #E0 E
           firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F5
   enums
@@ -11916,7 +14336,7 @@
         I1
         I2<T>
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F10
           type: A<int>
@@ -11924,7 +14344,7 @@
             fragment: #F10
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F11
           type: List<A<dynamic>>
@@ -11933,16 +14353,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F12
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F13
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F14
           returnType: List<A<dynamic>>
@@ -11972,7 +14392,7 @@
         #F1 class I1 (nameOffset:38) (firstTokenOffset:32) (offset:38)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:92) (firstTokenOffset:86) (offset:92)
@@ -11981,7 +14401,7 @@
             #F4 E (nameOffset:95) (firstTokenOffset:95) (offset:95)
               element: #E0 E
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
       enums
@@ -11993,7 +14413,7 @@
               element: #E1 T
               nextFragment: #F9
           fields
-            #F10 hasInitializer v (nameOffset:28) (firstTokenOffset:28) (offset:28)
+            #F10 hasInitializer isOriginDeclaration v (nameOffset:28) (firstTokenOffset:28) (offset:28)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12009,7 +14429,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A<dynamic>
-            #F11 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F11 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12022,13 +14442,13 @@
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
           constructors
-            #F12 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F12 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F13 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F13 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@enum::A::@getter::v
-            #F14 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F14 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F7 enum A (nameOffset:58) (firstTokenOffset:45) (offset:58)
           element: <testLibrary>::@enum::A
@@ -12042,7 +14462,7 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
@@ -12052,7 +14472,7 @@
         #E0 E
           firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F5
   enums
@@ -12067,7 +14487,7 @@
         I1
         I2<T>
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F10
           type: A<dynamic>
@@ -12075,7 +14495,7 @@
             fragment: #F10
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F11
           type: List<A<dynamic>>
@@ -12084,16 +14504,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F12
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F13
           returnType: A<dynamic>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F14
           returnType: List<A<dynamic>>
@@ -12125,7 +14545,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12139,7 +14559,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12152,13 +14572,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F8 foo (nameOffset:21) (firstTokenOffset:16) (offset:21)
@@ -12175,7 +14595,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -12183,7 +14603,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -12192,16 +14612,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -12240,7 +14660,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12254,7 +14674,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12267,13 +14687,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:29) (firstTokenOffset:16) (offset:29)
           element: <testLibrary>::@enum::A
@@ -12294,7 +14714,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -12302,7 +14722,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -12311,16 +14731,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -12365,7 +14785,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12379,7 +14799,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12392,13 +14812,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F8 foo1 (nameOffset:21) (firstTokenOffset:16) (offset:21)
@@ -12419,7 +14839,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -12427,7 +14847,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -12436,16 +14856,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -12487,7 +14907,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12501,7 +14921,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12514,13 +14934,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F8 foo (nameOffset:21) (firstTokenOffset:16) (offset:21)
@@ -12543,7 +14963,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -12551,7 +14971,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -12560,16 +14980,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -12609,7 +15029,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12623,7 +15043,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12636,13 +15056,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F8 foo (nameOffset:21) (firstTokenOffset:16) (offset:21)
@@ -12670,7 +15090,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -12678,7 +15098,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -12687,16 +15107,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -12737,7 +15157,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12751,7 +15171,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12764,13 +15184,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F8 foo (nameOffset:21) (firstTokenOffset:16) (offset:21)
@@ -12798,7 +15218,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -12806,7 +15226,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -12815,16 +15235,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -12865,7 +15285,7 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -12889,7 +15309,7 @@
                     leftParenthesis: ( @20
                     rightParenthesis: ) @21
                   staticType: A<int>
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -12902,13 +15322,13 @@
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F10 foo (nameOffset:28) (firstTokenOffset:26) (offset:28)
@@ -12932,7 +15352,7 @@
           firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A<int>
@@ -12940,7 +15360,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A<dynamic>>
@@ -12949,16 +15369,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A<dynamic>>
@@ -13005,7 +15425,7 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13029,7 +15449,7 @@
                     leftParenthesis: ( @20
                     rightParenthesis: ) @21
                   staticType: A<int>
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13042,13 +15462,13 @@
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           methods
             #F10 foo (nameOffset:28) (firstTokenOffset:26) (offset:28)
@@ -13074,7 +15494,7 @@
           firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A<int>
@@ -13082,7 +15502,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A<dynamic>>
@@ -13091,16 +15511,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A<dynamic>>
@@ -13137,7 +15557,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:19) (firstTokenOffset:19) (offset:19)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:19) (firstTokenOffset:19) (offset:19)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13151,7 +15571,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13164,13 +15584,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:49) (firstTokenOffset:36) (offset:49)
           element: <testLibrary>::@enum::A
@@ -13189,7 +15609,7 @@
         M1
         M2
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -13197,7 +15617,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -13206,16 +15626,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -13264,7 +15684,7 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13288,7 +15708,7 @@
                     leftParenthesis: ( @31
                     rightParenthesis: ) @32
                   staticType: A<int>
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13301,13 +15721,13 @@
                   rightBracket: ] @0
                   staticType: List<A<dynamic>>
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:66) (firstTokenOffset:53) (offset:66)
           element: <testLibrary>::@enum::A
@@ -13354,7 +15774,7 @@
         M2<T>
         M3<T>
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F5
           type: A<int>
@@ -13362,7 +15782,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F6
           type: List<A<dynamic>>
@@ -13371,16 +15791,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A<int>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A<dynamic>>
@@ -13437,7 +15857,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13451,7 +15871,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13463,19 +15883,19 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo1
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           setters
-            #F9 foo1 (nameOffset:20) (firstTokenOffset:16) (offset:20)
+            #F9 isOriginDeclaration foo1 (nameOffset:20) (firstTokenOffset:16) (offset:20)
               element: <testLibrary>::@enum::A::@setter::foo1
               formalParameters
                 #F10 requiredPositional _ (nameOffset:29) (firstTokenOffset:25) (offset:29)
@@ -13484,10 +15904,10 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F11 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F11 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@enum::A::@field::foo2
           setters
-            #F12 foo2 (nameOffset:62) (firstTokenOffset:58) (offset:62)
+            #F12 isOriginDeclaration foo2 (nameOffset:62) (firstTokenOffset:58) (offset:62)
               element: <testLibrary>::@enum::A::@setter::foo2
               formalParameters
                 #F13 requiredPositional _ (nameOffset:71) (firstTokenOffset:67) (offset:71)
@@ -13498,7 +15918,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -13506,7 +15926,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -13514,33 +15934,33 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F5
           type: int
           setter: <testLibrary>::@enum::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F11
           type: int
           setter: <testLibrary>::@enum::A::@setter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@setter::foo1
           firstFragment: #F9
           formalParameters
@@ -13549,7 +15969,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@enum::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@setter::foo2
           firstFragment: #F12
           formalParameters
@@ -13585,7 +16005,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13599,7 +16019,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13611,28 +16031,28 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_2
                 IntegerLiteral
                   literal: 0 @32
                   staticType: int
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
-            #F9 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F9 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::A::@getter::foo
         #F2 enum A (nameOffset:51) (firstTokenOffset:38) (offset:51)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           setters
-            #F10 augment foo (nameOffset:70) (firstTokenOffset:58) (offset:70)
+            #F10 augment isOriginDeclaration foo (nameOffset:70) (firstTokenOffset:58) (offset:70)
               element: <testLibrary>::@enum::A::@setter::foo
               formalParameters
                 #F11 requiredPositional _ (nameOffset:78) (firstTokenOffset:74) (offset:78)
@@ -13643,7 +16063,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -13651,7 +16071,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -13659,7 +16079,7 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        final hasInitializer foo
+        final hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F5
           type: int
@@ -13669,27 +16089,27 @@
           getter: <testLibrary>::@enum::A::@getter::foo
           setter: <testLibrary>::@enum::A::@setter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@enum::A::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@setter::foo
           firstFragment: #F10
           formalParameters
@@ -13724,7 +16144,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13738,7 +16158,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13751,22 +16171,22 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:29) (firstTokenOffset:16) (offset:29)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           fields
-            #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F8 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::A::@field::foo
           setters
-            #F9 augment foo (nameOffset:48) (firstTokenOffset:36) (offset:48)
+            #F9 augment isOriginDeclaration foo (nameOffset:48) (firstTokenOffset:36) (offset:48)
               element: <testLibrary>::@enum::A::@setter::foo
               formalParameters
                 #F10 requiredPositional _ (nameOffset:56) (firstTokenOffset:52) (offset:56)
@@ -13777,7 +16197,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -13785,7 +16205,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -13793,28 +16213,28 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F8
           type: int
           setter: <testLibrary>::@enum::A::@setter::foo
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@setter::foo
           firstFragment: #F9
           formalParameters
@@ -13851,7 +16271,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -13865,7 +16285,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -13877,27 +16297,27 @@
                       staticType: A
                   rightBracket: ] @0
                   staticType: List<A>
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo1
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::foo2
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
           setters
-            #F10 foo1 (nameOffset:20) (firstTokenOffset:16) (offset:20)
+            #F10 isOriginDeclaration foo1 (nameOffset:20) (firstTokenOffset:16) (offset:20)
               element: <testLibrary>::@enum::A::@setter::foo1
               formalParameters
                 #F11 requiredPositional _ (nameOffset:29) (firstTokenOffset:25) (offset:29)
                   element: <testLibrary>::@enum::A::@setter::foo1::@formalParameter::_
               nextFragment: #F12
-            #F13 foo2 (nameOffset:41) (firstTokenOffset:37) (offset:41)
+            #F13 isOriginDeclaration foo2 (nameOffset:41) (firstTokenOffset:37) (offset:41)
               element: <testLibrary>::@enum::A::@setter::foo2
               formalParameters
                 #F14 requiredPositional _ (nameOffset:50) (firstTokenOffset:46) (offset:50)
@@ -13906,7 +16326,7 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           setters
-            #F12 augment foo1 (nameOffset:91) (firstTokenOffset:79) (offset:91)
+            #F12 augment isOriginDeclaration foo1 (nameOffset:91) (firstTokenOffset:79) (offset:91)
               element: <testLibrary>::@enum::A::@setter::foo1
               formalParameters
                 #F15 requiredPositional _ (nameOffset:100) (firstTokenOffset:96) (offset:100)
@@ -13918,7 +16338,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -13926,7 +16346,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -13934,33 +16354,33 @@
             fragment: #F4
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@enum::A::@field::foo1
           firstFragment: #F5
           type: int
           setter: <testLibrary>::@enum::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@enum::A::@field::foo2
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@enum::A::@setter::foo2
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F8
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F9
           returnType: List<A>
           variable: <testLibrary>::@enum::A::@field::values
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@enum::A::@setter::foo1
           firstFragment: #F10
           formalParameters
@@ -13969,7 +16389,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@enum::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@enum::A::@setter::foo2
           firstFragment: #F13
           formalParameters
@@ -14010,7 +16430,7 @@
         #F3 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::A
           fields
-            #F4 hasInitializer v (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14024,7 +16444,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14037,9 +16457,9 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::A::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
   classes
     class A
@@ -14051,7 +16471,7 @@
       firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F4
           type: A
@@ -14059,7 +16479,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F5
           type: List<A>
@@ -14068,12 +16488,12 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F6
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F7
           returnType: List<A>
@@ -14105,7 +16525,7 @@
         #F2 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::A::@def::0
           fields
-            #F3 hasInitializer v (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::A::@def::0::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14119,7 +16539,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@def::0::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14132,14 +16552,14 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::A::@def::0::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@def::0::@getter::values
         #F7 enum A (nameOffset:44) (firstTokenOffset:31) (offset:44)
           element: <testLibrary>::@enum::A::@def::1
           fields
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F8 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::A::@def::1::@field::values
               initializer: expression_2
                 ListLiteral
@@ -14147,7 +16567,7 @@
                   rightBracket: ] @0
                   staticType: List<A>
           getters
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@enum::A::@def::1::@getter::values
   classes
     class A
@@ -14159,7 +16579,7 @@
       firstFragment: #F2
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@def::0::@field::v
           firstFragment: #F3
           type: A
@@ -14167,7 +16587,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@def::0::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@def::0::@field::values
           firstFragment: #F4
           type: List<A>
@@ -14176,12 +16596,12 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@def::0::@getter::values
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@def::0::@getter::v
           firstFragment: #F5
           returnType: A
           variable: <testLibrary>::@enum::A::@def::0::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@def::0::@getter::values
           firstFragment: #F6
           returnType: List<A>
@@ -14191,7 +16611,7 @@
       firstFragment: #F7
       supertype: Enum
       fields
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@def::1::@field::values
           firstFragment: #F8
           type: List<A>
@@ -14200,7 +16620,7 @@
             expression: expression_2
           getter: <testLibrary>::@enum::A::@def::1::@getter::values
       getters
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@def::1::@getter::values
           firstFragment: #F9
           returnType: List<A>
@@ -14236,7 +16656,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14255,7 +16675,7 @@
                     leftParenthesis: ( @18
                     rightParenthesis: ) @19
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14268,23 +16688,23 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const named (nameOffset:32) (firstTokenOffset:24) (offset:32)
+            #F5 const isOriginDeclaration named (nameOffset:32) (firstTokenOffset:24) (offset:32)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 30
               periodOffset: 31
               nextFragment: #F6
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:57) (firstTokenOffset:44) (offset:57)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           nextFragment: #F9
           constructors
-            #F6 augment const named (nameOffset:80) (firstTokenOffset:64) (offset:80)
+            #F6 augment const isOriginDeclaration named (nameOffset:80) (firstTokenOffset:64) (offset:80)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 78
@@ -14295,7 +16715,7 @@
           element: <testLibrary>::@enum::A
           previousFragment: #F2
           constructors
-            #F10 augment const named (nameOffset:128) (firstTokenOffset:112) (offset:128)
+            #F10 augment const isOriginDeclaration named (nameOffset:128) (firstTokenOffset:112) (offset:128)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 126
@@ -14307,7 +16727,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -14315,7 +16735,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -14324,16 +16744,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
@@ -14364,7 +16784,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14383,7 +16803,7 @@
                     leftParenthesis: ( @18
                     rightParenthesis: ) @19
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14396,22 +16816,22 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const named (nameOffset:32) (firstTokenOffset:24) (offset:32)
+            #F5 const isOriginDeclaration named (nameOffset:32) (firstTokenOffset:24) (offset:32)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 30
               periodOffset: 31
               nextFragment: #F6
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:57) (firstTokenOffset:44) (offset:57)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F6 augment const named (nameOffset:80) (firstTokenOffset:64) (offset:80)
+            #F6 augment const isOriginDeclaration named (nameOffset:80) (firstTokenOffset:64) (offset:80)
               element: <testLibrary>::@enum::A::@constructor::named
               typeName: A
               typeNameOffset: 78
@@ -14423,7 +16843,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -14431,7 +16851,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -14440,16 +16860,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@enum::A::@constructor::named
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
@@ -14480,7 +16900,7 @@
           element: <testLibrary>::@enum::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14494,7 +16914,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14507,21 +16927,21 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:16) (offset:22)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 22
               nextFragment: #F6
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::A::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F2 enum A (nameOffset:43) (firstTokenOffset:30) (offset:43)
           element: <testLibrary>::@enum::A
           previousFragment: #F1
           constructors
-            #F6 augment const new (nameOffset:<null>) (firstTokenOffset:50) (offset:64)
+            #F6 augment const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:50) (offset:64)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
               typeNameOffset: 64
@@ -14532,7 +16952,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F3
           type: A
@@ -14540,7 +16960,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F4
           type: List<A>
@@ -14549,16 +16969,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F8
           returnType: List<A>
@@ -14598,7 +17018,7 @@
           element: <testLibrary>::@enum::B
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:41) (firstTokenOffset:41) (offset:41)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:41) (firstTokenOffset:41) (offset:41)
               element: <testLibrary>::@enum::B::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14612,7 +17032,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: B
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::B::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14625,13 +17045,13 @@
                   rightBracket: ] @0
                   staticType: List<B>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::B::@constructor::new
               typeName: B
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@enum::B::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@enum::B::@getter::values
         #F2 enum B (nameOffset:59) (firstTokenOffset:46) (offset:59)
           element: <testLibrary>::@enum::B
@@ -14650,7 +17070,7 @@
       interfaces
         A
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::B::@field::v
           firstFragment: #F3
           type: B
@@ -14658,7 +17078,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::B::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::B::@field::values
           firstFragment: #F4
           type: List<B>
@@ -14667,16 +17087,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::B::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::B::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::B::@getter::v
           firstFragment: #F6
           returnType: B
           variable: <testLibrary>::@enum::B::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::B::@getter::values
           firstFragment: #F7
           returnType: List<B>
@@ -14725,7 +17145,7 @@
           element: <testLibrary>::@enum::B
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@enum::B::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14739,7 +17159,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: B
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@enum::B::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14752,13 +17172,13 @@
                   rightBracket: ] @0
                   staticType: List<B>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@enum::B::@constructor::new
               typeName: B
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::B::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@enum::B::@getter::values
           methods
             #F8 foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
@@ -14777,7 +17197,7 @@
       interfaces
         A
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::B::@field::v
           firstFragment: #F3
           type: B
@@ -14785,7 +17205,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::B::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::B::@field::values
           firstFragment: #F4
           type: List<B>
@@ -14794,16 +17214,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::B::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::B::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::B::@getter::v
           firstFragment: #F6
           returnType: B
           variable: <testLibrary>::@enum::B::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::B::@getter::values
           firstFragment: #F7
           returnType: List<B>
@@ -14852,7 +17272,7 @@
           element: <testLibrary>::@enum::B
           nextFragment: #F2
           fields
-            #F3 hasInitializer v (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F3 hasInitializer isOriginDeclaration v (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@enum::B::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14866,7 +17286,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: B
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@enum::B::@field::values
               initializer: expression_1
                 ListLiteral
@@ -14879,13 +17299,13 @@
                   rightBracket: ] @0
                   staticType: List<B>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@enum::B::@constructor::new
               typeName: B
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@enum::B::@getter::v
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@enum::B::@getter::values
           methods
             #F8 foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
@@ -14904,7 +17324,7 @@
       mixins
         A
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::B::@field::v
           firstFragment: #F3
           type: B
@@ -14912,7 +17332,7 @@
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@enum::B::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::B::@field::values
           firstFragment: #F4
           type: List<B>
@@ -14921,16 +17341,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::B::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::B::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::B::@getter::v
           firstFragment: #F6
           returnType: B
           variable: <testLibrary>::@enum::B::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::B::@getter::values
           firstFragment: #F7
           returnType: List<B>
@@ -14968,7 +17388,7 @@
         #F1 class B (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       enums
@@ -14980,7 +17400,7 @@
               element: #E0 T
               nextFragment: #F6
           fields
-            #F7 hasInitializer v (nameOffset:24) (firstTokenOffset:24) (offset:24)
+            #F7 hasInitializer isOriginDeclaration v (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: <testLibrary>::@enum::A::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -14996,7 +17416,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A<B>
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -15009,13 +17429,13 @@
                   rightBracket: ] @0
                   staticType: List<A<B>>
           constructors
-            #F9 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F9 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F10 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F10 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@enum::A::@getter::v
-            #F11 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F11 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
         #F4 enum A (nameOffset:53) (firstTokenOffset:40) (offset:53)
           element: <testLibrary>::@enum::A
@@ -15029,7 +17449,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
   enums
@@ -15042,7 +17462,7 @@
           bound: B
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::A::@field::v
           firstFragment: #F7
           type: A<B>
@@ -15050,7 +17470,7 @@
             fragment: #F7
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F8
           type: List<A<B>>
@@ -15059,16 +17479,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F9
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::A::@getter::v
           firstFragment: #F10
           returnType: A<B>
           variable: <testLibrary>::@enum::A::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F11
           returnType: List<A<B>>
@@ -15098,44 +17518,7 @@
 }
 
 @reflectiveTest
-class EnumElementTest_fromBytes_declaringConstructors extends EnumElementTest {
-  @override
-  bool get keepLinkingLibraries => false;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
-
-@reflectiveTest
 class EnumElementTest_keepLinking extends EnumElementTest {
   @override
   bool get keepLinkingLibraries => true;
 }
-
-@reflectiveTest
-class EnumElementTest_keepLinking_declaringConstructors
-    extends EnumElementTest {
-  @override
-  bool get keepLinkingLibraries => true;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/elements/extension_test.dart b/pkg/analyzer/test/src/summary/elements/extension_test.dart
index f6961e1..4f7dc45 100644
--- a/pkg/analyzer/test/src/summary/elements/extension_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/extension_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.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../dart/resolution/node_text_expectations.dart';
@@ -12,11 +10,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionElementTest_keepLinking);
-    defineReflectiveTests(
-      ExtensionElementTest_keepLinking_declaringConstructors,
-    );
     defineReflectiveTests(ExtensionElementTest_fromBytes);
-    defineReflectiveTests(ExtensionElementTest_fromBytes_declaringConstructors);
     defineReflectiveTests(ExtensionElementTest_augmentation_keepLinking);
     defineReflectiveTests(ExtensionElementTest_augmentation_fromBytes);
     defineReflectiveTests(UpdateNodeTextExpectations);
@@ -86,14 +80,14 @@
         #F1 extension E (nameOffset:10) (firstTokenOffset:0) (offset:10)
           element: <testLibrary>::@extension::E
           fields
-            #F2 hasInitializer x (nameOffset:36) (firstTokenOffset:36) (offset:36)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: <testLibrary>::@extension::E::@field::x
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @40
                   staticType: int
           getters
-            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@extension::E::@getter::x
   extensions
     extension E
@@ -102,7 +96,7 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static const hasInitializer x
+        static const hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@extension::E::@field::x
           firstFragment: #F2
           type: int
@@ -111,7 +105,7 @@
             expression: expression_0
           getter: <testLibrary>::@extension::E::@getter::x
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@extension::E::@getter::x
           firstFragment: #F3
           returnType: int
@@ -196,10 +190,10 @@
             #F2 T (nameOffset:12) (firstTokenOffset:12) (offset:12)
               element: #E0 T
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::E::@field::foo
           getters
-            #F4 foo (nameOffset:38) (firstTokenOffset:30) (offset:38)
+            #F4 isOriginDeclaration foo (nameOffset:38) (firstTokenOffset:30) (offset:38)
               element: <testLibrary>::@extension::E::@getter::foo
   extensions
     extension E
@@ -211,13 +205,13 @@
       extendedType: List<T>
       onDeclaration: dart:core::@class::List
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extension::E::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::E::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@extension::E::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -245,10 +239,10 @@
             #F2 T (nameOffset:12) (firstTokenOffset:12) (offset:12)
               element: #E0 T
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::E::@field::foo
           getters
-            #F4 foo (nameOffset:36) (firstTokenOffset:30) (offset:36)
+            #F4 isOriginDeclaration foo (nameOffset:36) (firstTokenOffset:30) (offset:36)
               element: <testLibrary>::@extension::E::@getter::foo
   extensions
     extension E
@@ -260,14 +254,14 @@
       extendedType: List<T>
       onDeclaration: dart:core::@class::List
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extension::E::@field::foo
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extension::E::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@extension::E::@getter::foo
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
@@ -308,14 +302,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
           fields
-            #F3 hasInitializer foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: <testLibrary>::@extension::E::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 1 @71
                   staticType: int
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@extension::E::@getter::foo
           methods
             #F5 bar (nameOffset:88) (firstTokenOffset:76) (offset:88)
@@ -329,14 +323,14 @@
                     staticType: null
                   element: <testLibrary>::@extension::E::@getter::foo
       topLevelVariables
-        #F6 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F6 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_1
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   extensions
     extension E
@@ -356,7 +350,7 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static const hasInitializer foo
+        static const hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::E::@field::foo
           firstFragment: #F3
           type: int
@@ -365,7 +359,7 @@
             expression: expression_0
           getter: <testLibrary>::@extension::E::@getter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::E::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -384,7 +378,7 @@
               element: <testLibrary>::@extension::E::@getter::foo
           returnType: void
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F6
       type: int
@@ -393,7 +387,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F7
       returnType: int
@@ -418,28 +412,28 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       extensions
         #F3 extension E (nameOffset:50) (firstTokenOffset:27) (offset:50)
           element: <testLibrary>::@extension::E
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   extensions
@@ -449,7 +443,7 @@
       extendedType: A
       onDeclaration: <testLibrary>::@class::A
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
       type: dynamic
@@ -458,7 +452,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
@@ -601,10 +595,10 @@
         #F1 extension E (nameOffset:10) (firstTokenOffset:0) (offset:10)
           element: <testLibrary>::@extension::E
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::E::@field::foo
           getters
-            #F3 foo (nameOffset:31) (firstTokenOffset:23) (offset:31)
+            #F3 isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:23) (offset:31)
               element: <testLibrary>::@extension::E::@getter::foo
   extensions
     extension E
@@ -613,13 +607,13 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extension::E::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extension::E::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@extension::E::@getter::foo
           firstFragment: #F3
           returnType: int
@@ -644,10 +638,10 @@
         #F1 extension E (nameOffset:10) (firstTokenOffset:0) (offset:10)
           element: <testLibrary>::@extension::E
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::E::@field::foo
           setters
-            #F3 foo (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F3 isOriginDeclaration foo (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extension::E::@setter::foo
               formalParameters
                 #F4 requiredPositional value (nameOffset:35) (firstTokenOffset:31) (offset:35)
@@ -659,13 +653,13 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extension::E::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@extension::E::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@extension::E::@setter::foo
           firstFragment: #F3
           formalParameters
@@ -692,7 +686,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       extensions
@@ -703,7 +697,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   extensions
@@ -752,7 +746,7 @@
         #F1 enum A (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::A
           fields
-            #F2 hasInitializer foo (nameOffset:9) (firstTokenOffset:9) (offset:9)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:9) (firstTokenOffset:9) (offset:9)
               element: <testLibrary>::@enum::A::@field::foo
               initializer: expression_0
                 InstanceCreationExpression
@@ -766,7 +760,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: A
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@field::values
               initializer: expression_1
                 ListLiteral
@@ -779,13 +773,13 @@
                   rightBracket: ] @0
                   staticType: List<A>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
               element: <testLibrary>::@enum::A::@getter::foo
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::A::@getter::values
       extensions
         #F7 extension E (nameOffset:26) (firstTokenOffset:16) (offset:26)
@@ -796,7 +790,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer foo
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@enum::A::@field::foo
           firstFragment: #F2
           type: A
@@ -804,7 +798,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::A::@getter::foo
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::A::@field::values
           firstFragment: #F3
           type: List<A>
@@ -813,16 +807,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::A::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@enum::A::@getter::foo
           firstFragment: #F5
           returnType: A
           variable: <testLibrary>::@enum::A::@field::foo
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::A::@getter::values
           firstFragment: #F6
           returnType: List<A>
@@ -854,10 +848,10 @@
         #F2 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F3 it (nameOffset:25) (firstTokenOffset:17) (offset:25)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:25) (firstTokenOffset:17) (offset:25)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F4 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -865,7 +859,7 @@
                 #F5 requiredPositional final this.it (nameOffset:25) (firstTokenOffset:17) (offset:25)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensions
     extension E
@@ -881,22 +875,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: Object?
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: Object?
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F4
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F5
               type: Object?
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F6
           returnType: Object?
@@ -1221,14 +1216,14 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1237,7 +1232,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:89) (firstTokenOffset:89) (offset:89)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:89) (firstTokenOffset:89) (offset:89)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F3
   extensions
@@ -1247,20 +1242,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -1298,14 +1293,14 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1315,7 +1310,7 @@
           previousFragment: #F1
           nextFragment: #F8
           fields
-            #F4 augment hasInitializer foo (nameOffset:89) (firstTokenOffset:89) (offset:89)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:89) (firstTokenOffset:89) (offset:89)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F3
               nextFragment: #F9
@@ -1323,7 +1318,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F2
           fields
-            #F9 augment hasInitializer foo (nameOffset:144) (firstTokenOffset:144) (offset:144)
+            #F9 augment hasInitializer isOriginDeclaration foo (nameOffset:144) (firstTokenOffset:144) (offset:144)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F4
   extensions
@@ -1333,20 +1328,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -1384,15 +1379,15 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
               nextFragment: #F6
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1402,14 +1397,14 @@
           previousFragment: #F1
           nextFragment: #F9
           getters
-            #F6 augment foo (nameOffset:93) (firstTokenOffset:70) (offset:93)
+            #F6 augment isOriginDeclaration foo (nameOffset:93) (firstTokenOffset:70) (offset:93)
               element: <testLibrary>::@extension::A::@getter::foo
               previousFragment: #F5
         #F9 extension A (nameOffset:124) (firstTokenOffset:106) (offset:124)
           element: <testLibrary>::@extension::A
           previousFragment: #F2
           fields
-            #F4 augment hasInitializer foo (nameOffset:149) (firstTokenOffset:149) (offset:149)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:149) (firstTokenOffset:149) (offset:149)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F3
   extensions
@@ -1419,20 +1414,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -1470,14 +1465,14 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1488,7 +1483,7 @@
           previousFragment: #F1
           nextFragment: #F9
           setters
-            #F8 augment foo (nameOffset:89) (firstTokenOffset:70) (offset:89)
+            #F8 augment isOriginDeclaration foo (nameOffset:89) (firstTokenOffset:70) (offset:89)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F10 requiredPositional _ (nameOffset:97) (firstTokenOffset:93) (offset:97)
@@ -1498,7 +1493,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F2
           fields
-            #F4 augment hasInitializer foo (nameOffset:149) (firstTokenOffset:149) (offset:149)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:149) (firstTokenOffset:149) (offset:149)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F3
   extensions
@@ -1508,20 +1503,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -1555,14 +1550,14 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1571,7 +1566,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:92) (firstTokenOffset:92) (offset:92)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:92) (firstTokenOffset:92) (offset:92)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F3
   extensions
@@ -1581,20 +1576,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -1628,17 +1623,17 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 foo (nameOffset:38) (firstTokenOffset:23) (offset:38)
+            #F5 isOriginDeclaration foo (nameOffset:38) (firstTokenOffset:23) (offset:38)
               element: <testLibrary>::@extension::A::@getter::foo
         #F2 extension A (nameOffset:69) (firstTokenOffset:51) (offset:69)
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:94) (firstTokenOffset:94) (offset:94)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:94) (firstTokenOffset:94) (offset:94)
               element: <testLibrary>::@extension::A::@field::foo
               previousFragment: #F3
   extensions
@@ -1648,13 +1643,13 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic static hasInitializer foo
+        synthetic static hasInitializer isOriginGetterSetter foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
       getters
-        static foo
+        static isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -1684,13 +1679,13 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo1 (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo1 (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo1
           getters
-            #F4 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo1
           setters
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo1
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1699,13 +1694,13 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           fields
-            #F7 hasInitializer foo2 (nameOffset:82) (firstTokenOffset:82) (offset:82)
+            #F7 hasInitializer isOriginDeclaration foo2 (nameOffset:82) (firstTokenOffset:82) (offset:82)
               element: <testLibrary>::@extension::A::@field::foo2
           getters
-            #F8 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F8 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@extension::A::@getter::foo2
           setters
-            #F9 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F9 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@extension::A::@setter::foo2
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
@@ -1717,31 +1712,31 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo1
+        static hasInitializer isOriginDeclaration foo1
           reference: <testLibrary>::@extension::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo1
           setter: <testLibrary>::@extension::A::@setter::foo1
-        static hasInitializer foo2
+        static hasInitializer isOriginDeclaration foo2
           reference: <testLibrary>::@extension::A::@field::foo2
           firstFragment: #F7
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo2
           setter: <testLibrary>::@extension::A::@setter::foo2
       getters
-        synthetic static foo1
+        synthetic static isOriginVariable foo1
           reference: <testLibrary>::@extension::A::@getter::foo1
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo1
-        synthetic static foo2
+        synthetic static isOriginVariable foo2
           reference: <testLibrary>::@extension::A::@getter::foo2
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo2
       setters
-        synthetic static foo1
+        synthetic static isOriginVariable foo1
           reference: <testLibrary>::@extension::A::@setter::foo1
           firstFragment: #F5
           formalParameters
@@ -1750,7 +1745,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@extension::A::@field::foo1
-        synthetic static foo2
+        synthetic static isOriginVariable foo2
           reference: <testLibrary>::@extension::A::@setter::foo2
           firstFragment: #F9
           formalParameters
@@ -1784,19 +1779,19 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo1
           getters
-            #F4 foo1 (nameOffset:31) (firstTokenOffset:23) (offset:31)
+            #F4 isOriginDeclaration foo1 (nameOffset:31) (firstTokenOffset:23) (offset:31)
               element: <testLibrary>::@extension::A::@getter::foo1
         #F2 extension A (nameOffset:63) (firstTokenOffset:45) (offset:63)
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           fields
-            #F5 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F5 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@extension::A::@field::foo2
           getters
-            #F6 foo2 (nameOffset:77) (firstTokenOffset:69) (offset:77)
+            #F6 isOriginDeclaration foo2 (nameOffset:77) (firstTokenOffset:69) (offset:77)
               element: <testLibrary>::@extension::A::@getter::foo2
   extensions
     extension A
@@ -1805,23 +1800,23 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extension::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extension::A::@field::foo2
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo2
       getters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@extension::A::@getter::foo1
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@extension::A::@getter::foo2
           firstFragment: #F6
           returnType: int
@@ -1855,10 +1850,10 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo1
           getters
-            #F6 foo1 (nameOffset:32) (firstTokenOffset:26) (offset:32)
+            #F6 isOriginDeclaration foo1 (nameOffset:32) (firstTokenOffset:26) (offset:32)
               element: <testLibrary>::@extension::A::@getter::foo1
         #F2 extension A (nameOffset:59) (firstTokenOffset:41) (offset:59)
           element: <testLibrary>::@extension::A
@@ -1868,10 +1863,10 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F7 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F7 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@extension::A::@field::foo2
           getters
-            #F8 foo2 (nameOffset:74) (firstTokenOffset:68) (offset:74)
+            #F8 isOriginDeclaration foo2 (nameOffset:74) (firstTokenOffset:68) (offset:74)
               element: <testLibrary>::@extension::A::@getter::foo2
   extensions
     extension A
@@ -1883,26 +1878,26 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extension::A::@field::foo1
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extension::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extension::A::@field::foo2
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extension::A::@getter::foo2
       getters
-        abstract foo1
+        abstract isOriginDeclaration foo1
           reference: <testLibrary>::@extension::A::@getter::foo1
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@extension::A::@field::foo1
-        abstract foo2
+        abstract isOriginDeclaration foo2
           reference: <testLibrary>::@extension::A::@getter::foo2
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
@@ -1933,14 +1928,14 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
               nextFragment: #F5
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -1949,7 +1944,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           getters
-            #F5 augment foo (nameOffset:93) (firstTokenOffset:70) (offset:93)
+            #F5 augment isOriginDeclaration foo (nameOffset:93) (firstTokenOffset:70) (offset:93)
               element: <testLibrary>::@extension::A::@getter::foo
               previousFragment: #F4
   extensions
@@ -1959,20 +1954,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -2010,14 +2005,14 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
               nextFragment: #F5
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -2027,7 +2022,7 @@
           previousFragment: #F1
           nextFragment: #F8
           getters
-            #F5 augment foo (nameOffset:93) (firstTokenOffset:70) (offset:93)
+            #F5 augment isOriginDeclaration foo (nameOffset:93) (firstTokenOffset:70) (offset:93)
               element: <testLibrary>::@extension::A::@getter::foo
               previousFragment: #F4
               nextFragment: #F9
@@ -2035,7 +2030,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F2
           getters
-            #F9 augment foo (nameOffset:153) (firstTokenOffset:130) (offset:153)
+            #F9 augment isOriginDeclaration foo (nameOffset:153) (firstTokenOffset:130) (offset:153)
               element: <testLibrary>::@extension::A::@getter::foo
               previousFragment: #F5
   extensions
@@ -2045,20 +2040,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -2093,21 +2088,21 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo1
-            #F4 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F4 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo2
           getters
-            #F5 foo1 (nameOffset:31) (firstTokenOffset:23) (offset:31)
+            #F5 isOriginDeclaration foo1 (nameOffset:31) (firstTokenOffset:23) (offset:31)
               element: <testLibrary>::@extension::A::@getter::foo1
               nextFragment: #F6
-            #F7 foo2 (nameOffset:52) (firstTokenOffset:44) (offset:52)
+            #F7 isOriginDeclaration foo2 (nameOffset:52) (firstTokenOffset:44) (offset:52)
               element: <testLibrary>::@extension::A::@getter::foo2
         #F2 extension A (nameOffset:84) (firstTokenOffset:66) (offset:84)
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           getters
-            #F6 augment foo1 (nameOffset:106) (firstTokenOffset:90) (offset:106)
+            #F6 augment isOriginDeclaration foo1 (nameOffset:106) (firstTokenOffset:90) (offset:106)
               element: <testLibrary>::@extension::A::@getter::foo1
               previousFragment: #F5
   extensions
@@ -2117,23 +2112,23 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extension::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extension::A::@field::foo2
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo2
       getters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@extension::A::@getter::foo1
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@extension::A::@getter::foo2
           firstFragment: #F7
           returnType: int
@@ -2167,10 +2162,10 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo
           getters
-            #F4 foo (nameOffset:31) (firstTokenOffset:23) (offset:31)
+            #F4 isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:23) (offset:31)
               element: <testLibrary>::@extension::A::@getter::foo
               nextFragment: #F5
         #F2 extension A (nameOffset:62) (firstTokenOffset:44) (offset:62)
@@ -2178,7 +2173,7 @@
           previousFragment: #F1
           nextFragment: #F6
           getters
-            #F5 augment foo (nameOffset:84) (firstTokenOffset:68) (offset:84)
+            #F5 augment isOriginDeclaration foo (nameOffset:84) (firstTokenOffset:68) (offset:84)
               element: <testLibrary>::@extension::A::@getter::foo
               previousFragment: #F4
               nextFragment: #F7
@@ -2186,7 +2181,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F2
           getters
-            #F7 augment foo (nameOffset:137) (firstTokenOffset:121) (offset:137)
+            #F7 augment isOriginDeclaration foo (nameOffset:137) (firstTokenOffset:121) (offset:137)
               element: <testLibrary>::@extension::A::@getter::foo
               previousFragment: #F5
   extensions
@@ -2196,13 +2191,13 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -2564,10 +2559,10 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo1
           setters
-            #F4 foo1 (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F4 isOriginDeclaration foo1 (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extension::A::@setter::foo1
               formalParameters
                 #F5 requiredPositional _ (nameOffset:36) (firstTokenOffset:32) (offset:36)
@@ -2576,10 +2571,10 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           fields
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@extension::A::@field::foo2
           setters
-            #F7 foo2 (nameOffset:73) (firstTokenOffset:69) (offset:73)
+            #F7 isOriginDeclaration foo2 (nameOffset:73) (firstTokenOffset:69) (offset:73)
               element: <testLibrary>::@extension::A::@setter::foo2
               formalParameters
                 #F8 requiredPositional _ (nameOffset:82) (firstTokenOffset:78) (offset:82)
@@ -2591,18 +2586,18 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extension::A::@field::foo1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@extension::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extension::A::@field::foo2
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@extension::A::@setter::foo2
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@extension::A::@setter::foo1
           firstFragment: #F4
           formalParameters
@@ -2611,7 +2606,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@extension::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@extension::A::@setter::foo2
           firstFragment: #F7
           formalParameters
@@ -2645,13 +2640,13 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@extension::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
@@ -2661,7 +2656,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           setters
-            #F7 augment foo (nameOffset:89) (firstTokenOffset:70) (offset:89)
+            #F7 augment isOriginDeclaration foo (nameOffset:89) (firstTokenOffset:70) (offset:89)
               element: <testLibrary>::@extension::A::@setter::foo
               formalParameters
                 #F8 requiredPositional _ (nameOffset:97) (firstTokenOffset:93) (offset:97)
@@ -2674,20 +2669,20 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static hasInitializer foo
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extension::A::@getter::foo
           setter: <testLibrary>::@extension::A::@setter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extension::A::@field::foo
       setters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -2722,18 +2717,18 @@
           element: <testLibrary>::@extension::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo1
-            #F4 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+            #F4 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@extension::A::@field::foo2
           setters
-            #F5 foo1 (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F5 isOriginDeclaration foo1 (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extension::A::@setter::foo1
               formalParameters
                 #F6 requiredPositional _ (nameOffset:36) (firstTokenOffset:32) (offset:36)
                   element: <testLibrary>::@extension::A::@setter::foo1::@formalParameter::_
               nextFragment: #F7
-            #F8 foo2 (nameOffset:48) (firstTokenOffset:44) (offset:48)
+            #F8 isOriginDeclaration foo2 (nameOffset:48) (firstTokenOffset:44) (offset:48)
               element: <testLibrary>::@extension::A::@setter::foo2
               formalParameters
                 #F9 requiredPositional _ (nameOffset:57) (firstTokenOffset:53) (offset:57)
@@ -2742,7 +2737,7 @@
           element: <testLibrary>::@extension::A
           previousFragment: #F1
           setters
-            #F7 augment foo1 (nameOffset:102) (firstTokenOffset:90) (offset:102)
+            #F7 augment isOriginDeclaration foo1 (nameOffset:102) (firstTokenOffset:90) (offset:102)
               element: <testLibrary>::@extension::A::@setter::foo1
               formalParameters
                 #F10 requiredPositional _ (nameOffset:111) (firstTokenOffset:107) (offset:111)
@@ -2755,18 +2750,18 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extension::A::@field::foo1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@extension::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extension::A::@field::foo2
           firstFragment: #F4
           type: int
           setter: <testLibrary>::@extension::A::@setter::foo2
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@extension::A::@setter::foo1
           firstFragment: #F5
           formalParameters
@@ -2775,7 +2770,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@extension::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@extension::A::@setter::foo2
           firstFragment: #F8
           formalParameters
@@ -3087,45 +3082,7 @@
 }
 
 @reflectiveTest
-class ExtensionElementTest_fromBytes_declaringConstructors
-    extends ExtensionElementTest {
-  @override
-  bool get keepLinkingLibraries => false;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
-
-@reflectiveTest
 class ExtensionElementTest_keepLinking extends ExtensionElementTest {
   @override
   bool get keepLinkingLibraries => true;
 }
-
-@reflectiveTest
-class ExtensionElementTest_keepLinking_declaringConstructors
-    extends ExtensionElementTest {
-  @override
-  bool get keepLinkingLibraries => true;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart b/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
index a7b8a50..e5bff1f 100644
--- a/pkg/analyzer/test/src/summary/elements/extension_type_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/extension_type_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.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../dart/resolution/node_text_expectations.dart';
@@ -13,19 +11,13 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtensionTypeElementTest_keepLinking);
     defineReflectiveTests(ExtensionTypeElementTest_fromBytes);
-    defineReflectiveTests(
-      ExtensionTypeElementTest_keepLinking_declaringConstructors,
-    );
-    defineReflectiveTests(
-      ExtensionTypeElementTest_fromBytes_declaringConstructors,
-    );
     defineReflectiveTests(ExtensionTypeElementTest_augmentation_keepLinking);
     defineReflectiveTests(ExtensionTypeElementTest_augmentation_fromBytes);
     defineReflectiveTests(UpdateNodeTextExpectations);
   });
 }
 
-mixin ExtensionTypeElementMixin on ElementsBaseTest {
+abstract class ExtensionTypeElementTest extends ElementsBaseTest {
   test_allSupertypes() async {
     var library = await buildLibrary(r'''
 extension type A(int? it) {}
@@ -45,18 +37,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:22) (firstTokenOffset:17) (offset:22)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:22) (firstTokenOffset:17) (offset:22)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:44) (firstTokenOffset:29) (offset:44)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:50) (firstTokenOffset:46) (offset:50)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:50) (firstTokenOffset:46) (offset:50)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     extension type A
@@ -66,13 +58,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int?
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int?
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int?
@@ -92,13 +85,14 @@
         Object
         num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: int
@@ -121,10 +115,10 @@
         #F1 extension type A (nameOffset:21) (firstTokenOffset:0) (offset:21)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 21
@@ -132,7 +126,7 @@
                 #F4 requiredPositional final this.it (nameOffset:27) (firstTokenOffset:23) (offset:27)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -142,22 +136,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        const isExtensionTypeMember new
+        const declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -165,6 +160,157 @@
 ''');
   }
 
+  test_constructor_factoryHead_named() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  factory named(int it) => A(it);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      extensionTypes
+        #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
+          element: <testLibrary>::@extensionType::A
+          fields
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+              element: <testLibrary>::@extensionType::A::@field::it
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+              element: <testLibrary>::@extensionType::A::@constructor::new
+              typeName: A
+              typeNameOffset: 15
+              formalParameters
+                #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+                  element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+            #F5 factory isOriginDeclaration named (nameOffset:37) (firstTokenOffset:29) (offset:37)
+              element: <testLibrary>::@extensionType::A::@constructor::named
+              factoryKeywordOffset: 29
+              typeName: null
+              formalParameters
+                #F6 requiredPositional it (nameOffset:47) (firstTokenOffset:43) (offset:47)
+                  element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
+          getters
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+              element: <testLibrary>::@extensionType::A::@getter::it
+  extensionTypes
+    extension type A
+      reference: <testLibrary>::@extensionType::A
+      firstFragment: #F1
+      representation: <testLibrary>::@extensionType::A::@field::it
+      primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
+      typeErasure: int
+      fields
+        final isOriginDeclaringFormalParameter it
+          reference: <testLibrary>::@extensionType::A::@field::it
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+      constructors
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@extensionType::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.it
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+        factory isExtensionTypeMember isOriginDeclaration named
+          reference: <testLibrary>::@extensionType::A::@constructor::named
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional it
+              firstFragment: #F6
+              type: int
+      getters
+        synthetic isExtensionTypeMember isOriginVariable it
+          reference: <testLibrary>::@extensionType::A::@getter::it
+          firstFragment: #F7
+          returnType: int
+          variable: <testLibrary>::@extensionType::A::@field::it
+''');
+  }
+
+  test_constructor_factoryHead_unnamed() async {
+    var library = await buildLibrary(r'''
+extension type A.primary(int it) {
+  factory (int it) => A.primary(it);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      extensionTypes
+        #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
+          element: <testLibrary>::@extensionType::A
+          fields
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+              element: <testLibrary>::@extensionType::A::@field::it
+          constructors
+            #F3 isOriginDeclaration isPrimary primary (nameOffset:17) (firstTokenOffset:15) (offset:17)
+              element: <testLibrary>::@extensionType::A::@constructor::primary
+              typeName: A
+              typeNameOffset: 15
+              periodOffset: 16
+              formalParameters
+                #F4 requiredPositional final this.it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+                  element: <testLibrary>::@extensionType::A::@constructor::primary::@formalParameter::it
+            #F5 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+              element: <testLibrary>::@extensionType::A::@constructor::new
+              factoryKeywordOffset: 37
+              typeName: null
+              formalParameters
+                #F6 requiredPositional it (nameOffset:50) (firstTokenOffset:46) (offset:50)
+                  element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+          getters
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+              element: <testLibrary>::@extensionType::A::@getter::it
+  extensionTypes
+    extension type A
+      reference: <testLibrary>::@extensionType::A
+      firstFragment: #F1
+      representation: <testLibrary>::@extensionType::A::@field::it
+      primaryConstructor: <testLibrary>::@extensionType::A::@constructor::primary
+      typeErasure: int
+      fields
+        final isOriginDeclaringFormalParameter it
+          reference: <testLibrary>::@extensionType::A::@field::it
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::primary::@formalParameter::it
+      constructors
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary primary
+          reference: <testLibrary>::@extensionType::A::@constructor::primary
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.it
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+        factory isExtensionTypeMember isOriginDeclaration new
+          reference: <testLibrary>::@extensionType::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional it
+              firstFragment: #F6
+              type: int
+      getters
+        synthetic isExtensionTypeMember isOriginVariable it
+          reference: <testLibrary>::@extensionType::A::@getter::it
+          firstFragment: #F7
+          returnType: int
+          variable: <testLibrary>::@extensionType::A::@field::it
+''');
+  }
+
   test_constructor_named() async {
     var library = await buildLibrary(r'''
 extension type A.named(int it) {}
@@ -181,10 +327,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 named (nameOffset:17) (firstTokenOffset:15) (offset:17)
+            #F3 isOriginDeclaration isPrimary named (nameOffset:17) (firstTokenOffset:15) (offset:17)
               element: <testLibrary>::@extensionType::A::@constructor::named
               codeOffset: 15
               codeLength: 15
@@ -195,7 +341,7 @@
                 #F4 requiredPositional final this.it (nameOffset:27) (firstTokenOffset:23) (offset:27)
                   element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -205,22 +351,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::named
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
       constructors
-        isExtensionTypeMember named
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -228,6 +375,312 @@
 ''');
   }
 
+  test_constructor_newHead_named() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  new named(this.it);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      extensionTypes
+        #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
+          element: <testLibrary>::@extensionType::A
+          fields
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+              element: <testLibrary>::@extensionType::A::@field::it
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+              element: <testLibrary>::@extensionType::A::@constructor::new
+              typeName: A
+              typeNameOffset: 15
+              formalParameters
+                #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+                  element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+            #F5 isOriginDeclaration named (nameOffset:33) (firstTokenOffset:29) (offset:33)
+              element: <testLibrary>::@extensionType::A::@constructor::named
+              newKeywordOffset: 29
+              typeName: null
+              formalParameters
+                #F6 requiredPositional final this.it (nameOffset:44) (firstTokenOffset:39) (offset:44)
+                  element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
+          getters
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+              element: <testLibrary>::@extensionType::A::@getter::it
+  extensionTypes
+    extension type A
+      reference: <testLibrary>::@extensionType::A
+      firstFragment: #F1
+      representation: <testLibrary>::@extensionType::A::@field::it
+      primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
+      typeErasure: int
+      fields
+        final isOriginDeclaringFormalParameter it
+          reference: <testLibrary>::@extensionType::A::@field::it
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+      constructors
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@extensionType::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.it
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+        isExtensionTypeMember isOriginDeclaration named
+          reference: <testLibrary>::@extensionType::A::@constructor::named
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional final hasImplicitType this.it
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+      getters
+        synthetic isExtensionTypeMember isOriginVariable it
+          reference: <testLibrary>::@extensionType::A::@getter::it
+          firstFragment: #F7
+          returnType: int
+          variable: <testLibrary>::@extensionType::A::@field::it
+''');
+  }
+
+  test_constructor_newHead_named_const() async {
+    var library = await buildLibrary(r'''
+extension type A(int it) {
+  const new named(this.it);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      extensionTypes
+        #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
+          element: <testLibrary>::@extensionType::A
+          fields
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+              element: <testLibrary>::@extensionType::A::@field::it
+          constructors
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+              element: <testLibrary>::@extensionType::A::@constructor::new
+              typeName: A
+              typeNameOffset: 15
+              formalParameters
+                #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+                  element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+            #F5 const isOriginDeclaration named (nameOffset:39) (firstTokenOffset:29) (offset:39)
+              element: <testLibrary>::@extensionType::A::@constructor::named
+              newKeywordOffset: 35
+              typeName: null
+              formalParameters
+                #F6 requiredPositional final this.it (nameOffset:50) (firstTokenOffset:45) (offset:50)
+                  element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
+          getters
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+              element: <testLibrary>::@extensionType::A::@getter::it
+  extensionTypes
+    extension type A
+      reference: <testLibrary>::@extensionType::A
+      firstFragment: #F1
+      representation: <testLibrary>::@extensionType::A::@field::it
+      primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
+      typeErasure: int
+      fields
+        final isOriginDeclaringFormalParameter it
+          reference: <testLibrary>::@extensionType::A::@field::it
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+      constructors
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
+          reference: <testLibrary>::@extensionType::A::@constructor::new
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.it
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+        const isExtensionTypeMember isOriginDeclaration named
+          reference: <testLibrary>::@extensionType::A::@constructor::named
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional final hasImplicitType this.it
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+      getters
+        synthetic isExtensionTypeMember isOriginVariable it
+          reference: <testLibrary>::@extensionType::A::@getter::it
+          firstFragment: #F7
+          returnType: int
+          variable: <testLibrary>::@extensionType::A::@field::it
+''');
+  }
+
+  test_constructor_newHead_unnamed() async {
+    var library = await buildLibrary(r'''
+extension type A.primary(int it) {
+  new (this.it);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      extensionTypes
+        #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
+          element: <testLibrary>::@extensionType::A
+          fields
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+              element: <testLibrary>::@extensionType::A::@field::it
+          constructors
+            #F3 isOriginDeclaration isPrimary primary (nameOffset:17) (firstTokenOffset:15) (offset:17)
+              element: <testLibrary>::@extensionType::A::@constructor::primary
+              typeName: A
+              typeNameOffset: 15
+              periodOffset: 16
+              formalParameters
+                #F4 requiredPositional final this.it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+                  element: <testLibrary>::@extensionType::A::@constructor::primary::@formalParameter::it
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+              element: <testLibrary>::@extensionType::A::@constructor::new
+              newKeywordOffset: 37
+              typeName: null
+              formalParameters
+                #F6 requiredPositional final this.it (nameOffset:47) (firstTokenOffset:42) (offset:47)
+                  element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+          getters
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+              element: <testLibrary>::@extensionType::A::@getter::it
+  extensionTypes
+    extension type A
+      reference: <testLibrary>::@extensionType::A
+      firstFragment: #F1
+      representation: <testLibrary>::@extensionType::A::@field::it
+      primaryConstructor: <testLibrary>::@extensionType::A::@constructor::primary
+      typeErasure: int
+      fields
+        final isOriginDeclaringFormalParameter it
+          reference: <testLibrary>::@extensionType::A::@field::it
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::primary::@formalParameter::it
+      constructors
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary primary
+          reference: <testLibrary>::@extensionType::A::@constructor::primary
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.it
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+        isExtensionTypeMember isOriginDeclaration new
+          reference: <testLibrary>::@extensionType::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional final hasImplicitType this.it
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+      getters
+        synthetic isExtensionTypeMember isOriginVariable it
+          reference: <testLibrary>::@extensionType::A::@getter::it
+          firstFragment: #F7
+          returnType: int
+          variable: <testLibrary>::@extensionType::A::@field::it
+''');
+  }
+
+  test_constructor_newHead_unnamed_const() async {
+    var library = await buildLibrary(r'''
+extension type A.primary(int it) {
+  const new (this.it);
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      extensionTypes
+        #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
+          element: <testLibrary>::@extensionType::A
+          fields
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+              element: <testLibrary>::@extensionType::A::@field::it
+          constructors
+            #F3 isOriginDeclaration isPrimary primary (nameOffset:17) (firstTokenOffset:15) (offset:17)
+              element: <testLibrary>::@extensionType::A::@constructor::primary
+              typeName: A
+              typeNameOffset: 15
+              periodOffset: 16
+              formalParameters
+                #F4 requiredPositional final this.it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+                  element: <testLibrary>::@extensionType::A::@constructor::primary::@formalParameter::it
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+              element: <testLibrary>::@extensionType::A::@constructor::new
+              newKeywordOffset: 43
+              typeName: null
+              formalParameters
+                #F6 requiredPositional final this.it (nameOffset:53) (firstTokenOffset:48) (offset:53)
+                  element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+          getters
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+              element: <testLibrary>::@extensionType::A::@getter::it
+  extensionTypes
+    extension type A
+      reference: <testLibrary>::@extensionType::A
+      firstFragment: #F1
+      representation: <testLibrary>::@extensionType::A::@field::it
+      primaryConstructor: <testLibrary>::@extensionType::A::@constructor::primary
+      typeErasure: int
+      fields
+        final isOriginDeclaringFormalParameter it
+          reference: <testLibrary>::@extensionType::A::@field::it
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::primary::@formalParameter::it
+      constructors
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary primary
+          reference: <testLibrary>::@extensionType::A::@constructor::primary
+          firstFragment: #F3
+          formalParameters
+            #E0 requiredPositional final hasImplicitType declaring this.it
+              firstFragment: #F4
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+        const isExtensionTypeMember isOriginDeclaration new
+          reference: <testLibrary>::@extensionType::A::@constructor::new
+          firstFragment: #F5
+          formalParameters
+            #E1 requiredPositional final hasImplicitType this.it
+              firstFragment: #F6
+              type: int
+              field: <testLibrary>::@extensionType::A::@field::it
+      getters
+        synthetic isExtensionTypeMember isOriginVariable it
+          reference: <testLibrary>::@extensionType::A::@getter::it
+          firstFragment: #F7
+          returnType: int
+          variable: <testLibrary>::@extensionType::A::@field::it
+''');
+  }
+
   test_constructor_secondary_fieldFormalParameter() async {
     var library = await buildLibrary(r'''
 extension type A(num it) {
@@ -245,17 +698,17 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
               formalParameters
                 #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
-            #F5 named (nameOffset:31) (firstTokenOffset:29) (offset:31)
+            #F5 isOriginDeclaration named (nameOffset:31) (firstTokenOffset:29) (offset:31)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 29
@@ -264,7 +717,7 @@
                 #F6 requiredPositional final this.it (nameOffset:42) (firstTokenOffset:37) (offset:42)
                   element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -274,21 +727,22 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: num
               field: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember named
+        isExtensionTypeMember isOriginDeclaration named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F5
           formalParameters
@@ -297,7 +751,7 @@
               type: num
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F7
           returnType: num
@@ -322,17 +776,17 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
               formalParameters
                 #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
-            #F5 named (nameOffset:31) (firstTokenOffset:29) (offset:31)
+            #F5 isOriginDeclaration named (nameOffset:31) (firstTokenOffset:29) (offset:31)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 29
@@ -341,7 +795,7 @@
                 #F6 requiredPositional final this.it (nameOffset:46) (firstTokenOffset:37) (offset:46)
                   element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -351,21 +805,22 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: num
               field: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember named
+        isExtensionTypeMember isOriginDeclaration named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F5
           formalParameters
@@ -374,7 +829,7 @@
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F7
           returnType: num
@@ -399,17 +854,17 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
               formalParameters
                 #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
-            #F5 const named (nameOffset:37) (firstTokenOffset:29) (offset:37)
+            #F5 const isOriginDeclaration named (nameOffset:37) (firstTokenOffset:29) (offset:37)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 35
@@ -418,7 +873,7 @@
                 #F6 requiredPositional a (nameOffset:47) (firstTokenOffset:43) (offset:47)
                   element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::a
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -428,21 +883,22 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: num
               field: <testLibrary>::@extensionType::A::@field::it
-        const isExtensionTypeMember named
+        const isExtensionTypeMember isOriginDeclaration named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F5
           formalParameters
@@ -461,7 +917,7 @@
                 element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::a
                 staticType: int
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F7
           returnType: num
@@ -485,10 +941,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               codeOffset: 15
               codeLength: 9
@@ -498,7 +954,7 @@
                 #F4 requiredPositional final this.it (nameOffset:21) (firstTokenOffset:17) (offset:21)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -508,22 +964,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -548,10 +1005,10 @@
         #F1 extension type A (nameOffset:24) (firstTokenOffset:0) (offset:24)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:30) (firstTokenOffset:26) (offset:30)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:30) (firstTokenOffset:26) (offset:30)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:24) (offset:24)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:24) (offset:24)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 24
@@ -559,7 +1016,7 @@
                 #F4 requiredPositional final this.it (nameOffset:30) (firstTokenOffset:26) (offset:30)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -570,22 +1027,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -611,18 +1069,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
-            #F3 hasInitializer foo (nameOffset:46) (firstTokenOffset:46) (offset:46)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: <testLibrary>::@extensionType::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @52
                   staticType: int
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@extensionType::A::@getter::foo
   extensionTypes
     extension type A
@@ -632,12 +1090,13 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static const hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static const hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F3
           type: int
@@ -646,12 +1105,12 @@
             expression: expression_0
           getter: <testLibrary>::@extensionType::A::@getter::foo
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -677,18 +1136,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
-            #F3 hasInitializer foo (nameOffset:42) (firstTokenOffset:42) (offset:42)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: <testLibrary>::@extensionType::A::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @48
                   staticType: int
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@extensionType::A::@getter::foo
   extensionTypes
     extension type A
@@ -698,12 +1157,13 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static const hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static const hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F3
           type: int
@@ -712,12 +1172,12 @@
             expression: expression_0
           getter: <testLibrary>::@extensionType::A::@getter::foo
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -743,14 +1203,14 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
-            #F3 hasInitializer foo (nameOffset:35) (firstTokenOffset:35) (offset:35)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:35) (firstTokenOffset:35) (offset:35)
               element: <testLibrary>::@extensionType::A::@field::foo
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@extensionType::A::@getter::foo
   extensionTypes
     extension type A
@@ -760,23 +1220,24 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        final hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        final hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic isExtensionTypeMember foo
+        synthetic isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -806,18 +1267,34 @@
         #F1 extension type A (nameOffset:32) (firstTokenOffset:17) (offset:32)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:43) (firstTokenOffset:34) (offset:43)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:43) (firstTokenOffset:34) (offset:43)
               element: <testLibrary>::@extensionType::A::@field::it
+              metadata
+                Annotation
+                  atSign: @ @34
+                  name: SimpleIdentifier
+                    token: foo @35
+                    element: package:test/a.dart::@getter::foo
+                    staticType: null
+                  element: package:test/a.dart::@getter::foo
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:32) (offset:32)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:32) (offset:32)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 32
               formalParameters
                 #F4 requiredPositional final this.it (nameOffset:43) (firstTokenOffset:34) (offset:43)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+                  metadata
+                    Annotation
+                      atSign: @ @34
+                      name: SimpleIdentifier
+                        token: foo @35
+                        element: package:test/a.dart::@getter::foo
+                        staticType: null
+                      element: package:test/a.dart::@getter::foo
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -827,22 +1304,39 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @34
+              name: SimpleIdentifier
+                token: foo @35
+                element: package:test/a.dart::@getter::foo
+                staticType: null
+              element: package:test/a.dart::@getter::foo
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
+              metadata
+                Annotation
+                  atSign: @ @34
+                  name: SimpleIdentifier
+                    token: foo @35
+                    element: package:test/a.dart::@getter::foo
+                    staticType: null
+                  element: package:test/a.dart::@getter::foo
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -868,14 +1362,14 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F5 foo (nameOffset:37) (firstTokenOffset:29) (offset:37)
+            #F5 isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:29) (offset:37)
               element: <testLibrary>::@extensionType::A::@getter::foo
   extensionTypes
     extension type A
@@ -885,23 +1379,24 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember foo
+        isExtensionTypeMember isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -935,10 +1430,10 @@
         #F4 extension type X (nameOffset:64) (firstTokenOffset:49) (offset:64)
           element: <testLibrary>::@extensionType::X
           fields
-            #F5 it (nameOffset:68) (firstTokenOffset:66) (offset:68)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:68) (firstTokenOffset:66) (offset:68)
               element: <testLibrary>::@extensionType::X::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
               element: <testLibrary>::@extensionType::X::@getter::it
   classes
     class A
@@ -964,13 +1459,14 @@
         A
         B
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::X::@field::it
           firstFragment: #F5
           type: C
           getter: <testLibrary>::@extensionType::X::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::X::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::X::@getter::it
           firstFragment: #F6
           returnType: C
@@ -995,18 +1491,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:56) (firstTokenOffset:41) (offset:56)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:62) (firstTokenOffset:58) (offset:62)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:62) (firstTokenOffset:58) (offset:62)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     hasImplementsSelfReference extension type A
@@ -1018,13 +1514,14 @@
       interfaces
         Object
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1038,13 +1535,14 @@
       interfaces
         Object
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: int
@@ -1068,10 +1566,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     hasImplementsSelfReference extension type A
@@ -1083,13 +1581,14 @@
       interfaces
         Object
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1114,18 +1613,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:43) (firstTokenOffset:28) (offset:43)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:49) (firstTokenOffset:45) (offset:49)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:49) (firstTokenOffset:45) (offset:49)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     extension type A
@@ -1135,13 +1634,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: num
@@ -1155,13 +1655,14 @@
       interfaces
         A
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: int
@@ -1185,10 +1686,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -1200,13 +1701,14 @@
       interfaces
         num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1230,10 +1732,10 @@
         #F1 extension type X (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::X
           fields
-            #F2 it (nameOffset:22) (firstTokenOffset:17) (offset:22)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:22) (firstTokenOffset:17) (offset:22)
               element: <testLibrary>::@extensionType::X::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@extensionType::X::@getter::it
   extensionTypes
     extension type X
@@ -1243,13 +1745,14 @@
       primaryConstructor: <testLibrary>::@extensionType::X::@constructor::new
       typeErasure: int?
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::X::@field::it
           firstFragment: #F2
           type: int?
           getter: <testLibrary>::@extensionType::X::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::X::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::X::@getter::it
           firstFragment: #F3
           returnType: int?
@@ -1276,10 +1779,10 @@
             #F2 T (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 T
           fields
-            #F3 it (nameOffset:22) (firstTokenOffset:20) (offset:22)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:22) (firstTokenOffset:20) (offset:22)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -1292,14 +1795,15 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: T
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
@@ -1325,10 +1829,10 @@
         #F1 extension type X (nameOffset:33) (firstTokenOffset:18) (offset:33)
           element: <testLibrary>::@extensionType::X
           fields
-            #F2 it (nameOffset:39) (firstTokenOffset:35) (offset:39)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:39) (firstTokenOffset:35) (offset:39)
               element: <testLibrary>::@extensionType::X::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@extensionType::X::@getter::it
       typeAliases
         #F4 A (nameOffset:8) (firstTokenOffset:0) (offset:8)
@@ -1343,13 +1847,14 @@
       interfaces
         num
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::X::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::X::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::X::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::X::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1389,11 +1894,12 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int?
       fields
-        final promotable _it
+        final promotable isOriginDeclaringFormalParameter _it
           reference: <testLibrary>::@extensionType::A::@field::_it
           firstFragment: #F1
           type: int?
           getter: <testLibrary>::@extensionType::A::@getter::_it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::_it
   fieldNameNonPromotabilityInfo
     _it
       conflictingFields
@@ -1426,10 +1932,10 @@
         #F1 extension type A (nameOffset:37) (firstTokenOffset:17) (offset:37)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:43) (firstTokenOffset:39) (offset:43)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:43) (firstTokenOffset:39) (offset:43)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 37
@@ -1437,7 +1943,7 @@
                 #F4 requiredPositional final this.it (nameOffset:43) (firstTokenOffset:39) (offset:43)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -1447,22 +1953,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F4
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -1488,10 +1995,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F4 foo (nameOffset:34) (firstTokenOffset:29) (offset:34)
@@ -1507,13 +2014,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1548,10 +2056,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F4 foo (nameOffset:34) (firstTokenOffset:29) (offset:34)
@@ -1571,13 +2079,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1613,10 +2122,10 @@
         #F1 extension type <null-name> (nameOffset:<null>) (firstTokenOffset:0) (offset:0)
           element: <testLibrary>::@extensionType::0
           fields
-            #F2 it (nameOffset:20) (firstTokenOffset:16) (offset:20)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:20) (firstTokenOffset:16) (offset:20)
               element: <testLibrary>::@extensionType::0::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@extensionType::0::@getter::it
   extensionTypes
     extension type <null-name>
@@ -1626,13 +2135,14 @@
       primaryConstructor: <testLibrary>::@extensionType::0::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::0::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::0::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::0::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::0::@getter::it
           firstFragment: #F3
           returnType: int
@@ -1656,10 +2166,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 <null-name> (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
+            #F2 isOriginDeclaringFormalParameter <null-name> (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@extensionType::A::@field::0
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F3 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               codeOffset: 15
               codeLength: 3
@@ -1669,7 +2179,7 @@
                 #F4 requiredPositional final this.<null-name> (nameOffset:<null>) (firstTokenOffset:17) (offset:17)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::<null-name>
           getters
-            #F5 synthetic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F5 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@extensionType::A::@getter::1
   extensionTypes
     extension type A
@@ -1679,22 +2189,22 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: InvalidType
       fields
-        final <null-name>
+        final isOriginDeclaringFormalParameter <null-name>
           reference: <testLibrary>::@extensionType::A::@field::0
           firstFragment: #F2
           type: InvalidType
           getter: <testLibrary>::@extensionType::A::@getter::1
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F3
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.<null-name>
+            #E0 requiredPositional final hasImplicitType declaring this.<null-name>
               firstFragment: #F4
               type: InvalidType
               field: <null>
       getters
-        synthetic isExtensionTypeMember <null-name>
+        synthetic isExtensionTypeMember isOriginVariable <null-name>
           reference: <testLibrary>::@extensionType::A::@getter::1
           firstFragment: #F5
           returnType: InvalidType
@@ -1721,10 +2231,10 @@
             #F2 T (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 T
           fields
-            #F3 it (nameOffset:34) (firstTokenOffset:30) (offset:34)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:34) (firstTokenOffset:30) (offset:34)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     notSimplyBounded extension type A
@@ -1738,13 +2248,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
@@ -1770,15 +2281,15 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           setters
-            #F5 foo (nameOffset:33) (firstTokenOffset:29) (offset:33)
+            #F5 isOriginDeclaration foo (nameOffset:33) (firstTokenOffset:29) (offset:33)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F6 requiredPositional _ (nameOffset:44) (firstTokenOffset:37) (offset:44)
@@ -1791,24 +2302,25 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F3
           type: double
           setter: <testLibrary>::@extensionType::A::@setter::foo
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
       setters
-        isExtensionTypeMember foo
+        isExtensionTypeMember isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -1838,18 +2350,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:19) (firstTokenOffset:17) (offset:19)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:19) (firstTokenOffset:17) (offset:19)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:42) (firstTokenOffset:27) (offset:42)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:46) (firstTokenOffset:44) (offset:46)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:46) (firstTokenOffset:44) (offset:46)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     hasRepresentationSelfReference extension type A
@@ -1859,13 +2371,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: InvalidType
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: InvalidType
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: InvalidType
@@ -1877,13 +2390,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: InvalidType
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: InvalidType
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: InvalidType
@@ -1909,18 +2423,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:19) (firstTokenOffset:17) (offset:19)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:19) (firstTokenOffset:17) (offset:19)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:42) (firstTokenOffset:27) (offset:42)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:52) (firstTokenOffset:44) (offset:52)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:52) (firstTokenOffset:44) (offset:52)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     extension type A
@@ -1930,13 +2444,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: InvalidType
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: B
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: B
@@ -1948,13 +2463,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: InvalidType
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: InvalidType
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: InvalidType
@@ -1978,10 +2494,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:19) (firstTokenOffset:17) (offset:19)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:19) (firstTokenOffset:17) (offset:19)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     hasRepresentationSelfReference extension type A
@@ -1991,13 +2507,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: InvalidType
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: InvalidType
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: InvalidType
@@ -2023,18 +2540,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:44) (firstTokenOffset:29) (offset:44)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:62) (firstTokenOffset:46) (offset:62)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:62) (firstTokenOffset:46) (offset:62)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     extension type A
@@ -2044,13 +2561,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -2062,13 +2580,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int Function(int)
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: A Function(A)
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: A Function(A)
@@ -2097,18 +2616,18 @@
             #F2 T (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 T
           fields
-            #F3 it (nameOffset:22) (firstTokenOffset:20) (offset:22)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:22) (firstTokenOffset:20) (offset:22)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F5 extension type B (nameOffset:45) (firstTokenOffset:30) (offset:45)
           element: <testLibrary>::@extensionType::B
           fields
-            #F6 it (nameOffset:57) (firstTokenOffset:47) (offset:57)
+            #F6 isOriginDeclaringFormalParameter it (nameOffset:57) (firstTokenOffset:47) (offset:57)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     extension type A
@@ -2121,14 +2640,15 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: T
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
@@ -2141,13 +2661,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: double
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F6
           type: A<double>
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F7
           returnType: A<double>
@@ -2173,18 +2694,18 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F4 extension type B (nameOffset:44) (firstTokenOffset:29) (offset:44)
           element: <testLibrary>::@extensionType::B
           fields
-            #F5 it (nameOffset:54) (firstTokenOffset:46) (offset:54)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:54) (firstTokenOffset:46) (offset:54)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F6 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F6 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@extensionType::B::@getter::it
   extensionTypes
     extension type A
@@ -2194,13 +2715,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -2212,13 +2734,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: List<int>
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F5
           type: List<A>
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F6
           returnType: List<A>
@@ -2242,10 +2765,10 @@
         #F1 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F2 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F2 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F3 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -2255,13 +2778,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F3
           returnType: int
@@ -2289,10 +2813,10 @@
             #F3 U (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: #E1 U
           fields
-            #F4 it (nameOffset:45) (firstTokenOffset:35) (offset:45)
+            #F4 isOriginDeclaringFormalParameter it (nameOffset:45) (firstTokenOffset:35) (offset:45)
               element: <testLibrary>::@extensionType::A::@field::it
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -2300,7 +2824,7 @@
                 #F6 requiredPositional final this.it (nameOffset:45) (firstTokenOffset:35) (offset:45)
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@extensionType::A::@getter::it
   extensionTypes
     extension type A
@@ -2316,23 +2840,24 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: Map<T, U>
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
           type: Map<T, U>
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E2 requiredPositional final hasImplicitType this.it
+            #E2 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: Map<T, U>
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
@@ -2364,11 +2889,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -2378,19 +2903,19 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:52) (firstTokenOffset:29) (offset:52)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           nextFragment: #F10
           fields
-            #F4 augment it (nameOffset:58) (firstTokenOffset:54) (offset:58)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:58) (firstTokenOffset:54) (offset:58)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F11
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:52) (offset:52)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:52) (offset:52)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 52
@@ -2405,11 +2930,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F11 augment it (nameOffset:95) (firstTokenOffset:91) (offset:95)
+            #F11 augment isOriginDeclaringFormalParameter it (nameOffset:95) (firstTokenOffset:91) (offset:95)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
           constructors
-            #F13 augment new (nameOffset:<null>) (firstTokenOffset:89) (offset:89)
+            #F13 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:89) (offset:89)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 89
@@ -2426,22 +2951,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -2475,11 +3001,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 augment it (nameOffset:29) (firstTokenOffset:25) (offset:29)
+            #F3 augment isOriginDeclaringFormalParameter it (nameOffset:29) (firstTokenOffset:25) (offset:29)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 augment new (nameOffset:<null>) (firstTokenOffset:23) (offset:23)
+            #F5 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 23
@@ -2489,7 +3015,7 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F10 foo1 (nameOffset:42) (firstTokenOffset:37) (offset:42)
@@ -2498,11 +3024,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:84) (firstTokenOffset:80) (offset:84)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:84) (firstTokenOffset:80) (offset:84)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 78
@@ -2522,22 +3048,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -2574,11 +3101,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -2588,17 +3115,17 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:52) (firstTokenOffset:29) (offset:52)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:58) (firstTokenOffset:54) (offset:58)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:58) (firstTokenOffset:54) (offset:58)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:52) (offset:52)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:52) (offset:52)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 52
@@ -2607,7 +3134,7 @@
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
                   previousFragment: #F6
               previousFragment: #F5
-            #F10 named (nameOffset:68) (firstTokenOffset:66) (offset:68)
+            #F10 isOriginDeclaration named (nameOffset:68) (firstTokenOffset:66) (offset:68)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 66
@@ -2620,25 +3147,26 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember named
+        isExtensionTypeMember isOriginDeclaration named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F10
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -2670,11 +3198,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -2684,7 +3212,7 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:55) (firstTokenOffset:32) (offset:55)
           element: <testLibrary>::@extensionType::A
@@ -2694,11 +3222,11 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F6 augment it (nameOffset:64) (firstTokenOffset:60) (offset:64)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:64) (firstTokenOffset:60) (offset:64)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:55) (offset:55)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:55) (offset:55)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 55
@@ -2707,7 +3235,7 @@
                   element: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
                   previousFragment: #F8
               previousFragment: #F7
-            #F12 named (nameOffset:74) (firstTokenOffset:72) (offset:74)
+            #F12 isOriginDeclaration named (nameOffset:74) (firstTokenOffset:72) (offset:74)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 72
@@ -2726,21 +3254,22 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E1 requiredPositional final hasImplicitType this.it
+            #E1 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember named
+        isExtensionTypeMember isOriginDeclaration named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F12
           formalParameters
@@ -2748,7 +3277,7 @@
               firstFragment: #F13
               type: T
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
@@ -2776,11 +3305,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 named (nameOffset:17) (firstTokenOffset:15) (offset:17)
+            #F5 isOriginDeclaration isPrimary named (nameOffset:17) (firstTokenOffset:15) (offset:17)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 15
@@ -2791,17 +3320,17 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:58) (firstTokenOffset:35) (offset:58)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:70) (firstTokenOffset:66) (offset:70)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:70) (firstTokenOffset:66) (offset:70)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F8 augment named (nameOffset:60) (firstTokenOffset:58) (offset:60)
+            #F8 augment isOriginDeclaration isPrimary named (nameOffset:60) (firstTokenOffset:58) (offset:60)
               element: <testLibrary>::@extensionType::A::@constructor::named
               typeName: A
               typeNameOffset: 58
@@ -2811,7 +3340,7 @@
                   element: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
                   previousFragment: #F6
               previousFragment: #F5
-            #F10 new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
+            #F10 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 78
@@ -2823,25 +3352,26 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::named
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::named::@formalParameter::it
       constructors
-        isExtensionTypeMember named
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary named
           reference: <testLibrary>::@extensionType::A::@constructor::named
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember new
+        isExtensionTypeMember isOriginDeclaration new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F10
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -2871,14 +3401,14 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -2888,12 +3418,12 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
           setters
-            #F13 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -2902,14 +3432,14 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
-            #F6 augment hasInitializer foo (nameOffset:108) (firstTokenOffset:108) (offset:108)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:108) (firstTokenOffset:108) (offset:108)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -2926,39 +3456,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F13
           formalParameters
@@ -2996,14 +3527,14 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3013,12 +3544,12 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
           setters
-            #F13 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -3028,16 +3559,16 @@
           previousFragment: #F1
           nextFragment: #F15
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F16
-            #F6 augment hasInitializer foo (nameOffset:108) (firstTokenOffset:108) (offset:108)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:108) (firstTokenOffset:108) (offset:108)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F5
               nextFragment: #F17
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -3052,14 +3583,14 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F16 augment it (nameOffset:149) (firstTokenOffset:145) (offset:149)
+            #F16 augment isOriginDeclaringFormalParameter it (nameOffset:149) (firstTokenOffset:145) (offset:149)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
-            #F17 augment hasInitializer foo (nameOffset:176) (firstTokenOffset:176) (offset:176)
+            #F17 augment hasInitializer isOriginDeclaration foo (nameOffset:176) (firstTokenOffset:176) (offset:176)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F6
           constructors
-            #F19 augment new (nameOffset:<null>) (firstTokenOffset:143) (offset:143)
+            #F19 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:143) (offset:143)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 143
@@ -3076,39 +3607,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F13
           formalParameters
@@ -3146,14 +3678,14 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3163,13 +3695,13 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
               nextFragment: #F13
           setters
-            #F14 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F14 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F15 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -3179,12 +3711,12 @@
           previousFragment: #F1
           nextFragment: #F16
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F17
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -3196,21 +3728,21 @@
               nextFragment: #F19
               previousFragment: #F7
           getters
-            #F13 augment foo (nameOffset:112) (firstTokenOffset:89) (offset:112)
+            #F13 augment isOriginDeclaration foo (nameOffset:112) (firstTokenOffset:89) (offset:112)
               element: <testLibrary>::@extensionType::A::@getter::foo
               previousFragment: #F12
         #F16 extension type A (nameOffset:148) (firstTokenOffset:125) (offset:148)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F17 augment it (nameOffset:154) (firstTokenOffset:150) (offset:154)
+            #F17 augment isOriginDeclaringFormalParameter it (nameOffset:154) (firstTokenOffset:150) (offset:154)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
-            #F6 augment hasInitializer foo (nameOffset:181) (firstTokenOffset:181) (offset:181)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:181) (firstTokenOffset:181) (offset:181)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F5
           constructors
-            #F19 augment new (nameOffset:<null>) (firstTokenOffset:148) (offset:148)
+            #F19 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:148) (offset:148)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 148
@@ -3227,39 +3759,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F14
           formalParameters
@@ -3297,14 +3830,14 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3314,12 +3847,12 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
           setters
-            #F13 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -3330,12 +3863,12 @@
           previousFragment: #F1
           nextFragment: #F16
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F17
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -3347,7 +3880,7 @@
               nextFragment: #F19
               previousFragment: #F7
           setters
-            #F15 augment foo (nameOffset:108) (firstTokenOffset:89) (offset:108)
+            #F15 augment isOriginDeclaration foo (nameOffset:108) (firstTokenOffset:89) (offset:108)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F20 requiredPositional _ (nameOffset:116) (firstTokenOffset:112) (offset:116)
@@ -3357,14 +3890,14 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F17 augment it (nameOffset:154) (firstTokenOffset:150) (offset:154)
+            #F17 augment isOriginDeclaringFormalParameter it (nameOffset:154) (firstTokenOffset:150) (offset:154)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
-            #F6 augment hasInitializer foo (nameOffset:181) (firstTokenOffset:181) (offset:181)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:181) (firstTokenOffset:181) (offset:181)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F5
           constructors
-            #F19 augment new (nameOffset:<null>) (firstTokenOffset:148) (offset:148)
+            #F19 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:148) (offset:148)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 148
@@ -3381,39 +3914,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F13
           formalParameters
@@ -3447,14 +3981,14 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3464,12 +3998,12 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
           setters
-            #F13 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -3478,14 +4012,14 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
-            #F6 augment hasInitializer foo (nameOffset:111) (firstTokenOffset:111) (offset:111)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:111) (firstTokenOffset:111) (offset:111)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -3502,39 +4036,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F13
           formalParameters
@@ -3570,14 +4105,14 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3587,22 +4122,22 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 foo (nameOffset:44) (firstTokenOffset:29) (offset:44)
+            #F12 isOriginDeclaration foo (nameOffset:44) (firstTokenOffset:29) (offset:44)
               element: <testLibrary>::@extensionType::A::@getter::foo
         #F2 extension type A (nameOffset:80) (firstTokenOffset:57) (offset:80)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:86) (firstTokenOffset:82) (offset:86)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:86) (firstTokenOffset:82) (offset:86)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
-            #F6 augment hasInitializer foo (nameOffset:113) (firstTokenOffset:113) (offset:113)
+            #F6 augment hasInitializer isOriginDeclaration foo (nameOffset:113) (firstTokenOffset:113) (offset:113)
               element: <testLibrary>::@extensionType::A::@field::foo
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:80) (offset:80)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:80) (offset:80)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 80
@@ -3619,32 +4154,33 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic static hasInitializer isOriginGetterSetter foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        static isExtensionTypeMember foo
+        static isExtensionTypeMember isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F12
           returnType: int
@@ -3674,13 +4210,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo1 (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo1 (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo1
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3690,12 +4226,12 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F11 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F11 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo1
           setters
-            #F12 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo1
               formalParameters
                 #F13 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -3704,13 +4240,13 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:82) (firstTokenOffset:78) (offset:82)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:82) (firstTokenOffset:78) (offset:82)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
-            #F14 hasInitializer foo2 (nameOffset:101) (firstTokenOffset:101) (offset:101)
+            #F14 hasInitializer isOriginDeclaration foo2 (nameOffset:101) (firstTokenOffset:101) (offset:101)
               element: <testLibrary>::@extensionType::A::@field::foo2
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:76) (offset:76)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:76) (offset:76)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 76
@@ -3720,10 +4256,10 @@
                   previousFragment: #F7
               previousFragment: #F6
           getters
-            #F15 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+            #F15 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
               element: <testLibrary>::@extensionType::A::@getter::foo2
           setters
-            #F16 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+            #F16 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
               element: <testLibrary>::@extensionType::A::@setter::foo2
               formalParameters
                 #F17 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
@@ -3736,50 +4272,51 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo1
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo1
           reference: <testLibrary>::@extensionType::A::@field::foo1
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo1
           setter: <testLibrary>::@extensionType::A::@setter::foo1
-        static hasInitializer foo2
+        static hasInitializer isOriginDeclaration foo2
           reference: <testLibrary>::@extensionType::A::@field::foo2
           firstFragment: #F14
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo2
           setter: <testLibrary>::@extensionType::A::@setter::foo2
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo1
+        synthetic static isExtensionTypeMember isOriginVariable foo1
           reference: <testLibrary>::@extensionType::A::@getter::foo1
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        synthetic static isExtensionTypeMember foo2
+        synthetic static isExtensionTypeMember isOriginVariable foo2
           reference: <testLibrary>::@extensionType::A::@getter::foo2
           firstFragment: #F15
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo2
       setters
-        synthetic static isExtensionTypeMember foo1
+        synthetic static isExtensionTypeMember isOriginVariable foo1
           reference: <testLibrary>::@extensionType::A::@setter::foo1
           firstFragment: #F12
           formalParameters
@@ -3788,7 +4325,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        synthetic static isExtensionTypeMember foo2
+        synthetic static isExtensionTypeMember isOriginVariable foo2
           reference: <testLibrary>::@extensionType::A::@setter::foo2
           firstFragment: #F16
           formalParameters
@@ -3822,13 +4359,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo1
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3838,21 +4375,21 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F11 foo1 (nameOffset:37) (firstTokenOffset:29) (offset:37)
+            #F11 isOriginDeclaration foo1 (nameOffset:37) (firstTokenOffset:29) (offset:37)
               element: <testLibrary>::@extensionType::A::@getter::foo1
         #F2 extension type A (nameOffset:74) (firstTokenOffset:51) (offset:74)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:80) (firstTokenOffset:76) (offset:80)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:80) (firstTokenOffset:76) (offset:80)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
-            #F12 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+            #F12 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
               element: <testLibrary>::@extensionType::A::@field::foo2
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:74) (offset:74)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:74) (offset:74)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 74
@@ -3862,7 +4399,7 @@
                   previousFragment: #F7
               previousFragment: #F6
           getters
-            #F13 foo2 (nameOffset:96) (firstTokenOffset:88) (offset:96)
+            #F13 isOriginDeclaration foo2 (nameOffset:96) (firstTokenOffset:88) (offset:96)
               element: <testLibrary>::@extensionType::A::@getter::foo2
   extensionTypes
     extension type A
@@ -3872,42 +4409,43 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo1
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extensionType::A::@field::foo1
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extensionType::A::@field::foo2
           firstFragment: #F12
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo2
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember foo1
+        isExtensionTypeMember isOriginDeclaration foo1
           reference: <testLibrary>::@extensionType::A::@getter::foo1
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        isExtensionTypeMember foo2
+        isExtensionTypeMember isOriginDeclaration foo2
           reference: <testLibrary>::@extensionType::A::@getter::foo2
           firstFragment: #F13
           returnType: int
@@ -3941,13 +4479,13 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
-            #F7 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F7 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo1
           constructors
-            #F8 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F8 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -3957,9 +4495,9 @@
                   nextFragment: #F10
               nextFragment: #F11
           getters
-            #F12 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F12 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F13 foo1 (nameOffset:38) (firstTokenOffset:32) (offset:38)
+            #F13 isOriginDeclaration foo1 (nameOffset:38) (firstTokenOffset:32) (offset:38)
               element: <testLibrary>::@extensionType::A::@getter::foo1
         #F2 extension type A (nameOffset:70) (firstTokenOffset:47) (offset:70)
           element: <testLibrary>::@extensionType::A
@@ -3969,13 +4507,13 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F6 augment it (nameOffset:79) (firstTokenOffset:75) (offset:79)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:79) (firstTokenOffset:75) (offset:79)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
-            #F14 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F14 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@extensionType::A::@field::foo2
           constructors
-            #F11 augment new (nameOffset:<null>) (firstTokenOffset:70) (offset:70)
+            #F11 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:70) (offset:70)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 70
@@ -3985,7 +4523,7 @@
                   previousFragment: #F9
               previousFragment: #F8
           getters
-            #F15 foo2 (nameOffset:93) (firstTokenOffset:87) (offset:93)
+            #F15 isOriginDeclaration foo2 (nameOffset:93) (firstTokenOffset:87) (offset:93)
               element: <testLibrary>::@extensionType::A::@getter::foo2
   extensionTypes
     extension type A
@@ -3998,45 +4536,46 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo1
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extensionType::A::@field::foo1
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extensionType::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extensionType::A::@field::foo2
           firstFragment: #F14
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@extensionType::A::@getter::foo2
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F8
           formalParameters
-            #E1 requiredPositional final hasImplicitType this.it
+            #E1 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F9
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        abstract isExtensionTypeMember foo1
+        abstract isExtensionTypeMember isOriginDeclaration foo1
           reference: <testLibrary>::@extensionType::A::@getter::foo1
           firstFragment: #F13
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        abstract isExtensionTypeMember foo2
+        abstract isExtensionTypeMember isOriginDeclaration foo2
           reference: <testLibrary>::@extensionType::A::@getter::foo2
           firstFragment: #F15
           hasEnclosingTypeParameterReference: true
@@ -4067,13 +4606,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -4083,13 +4622,13 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F11 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F11 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
               nextFragment: #F12
           setters
-            #F13 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -4098,11 +4637,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -4112,7 +4651,7 @@
                   previousFragment: #F7
               previousFragment: #F6
           getters
-            #F12 augment foo (nameOffset:112) (firstTokenOffset:89) (offset:112)
+            #F12 augment isOriginDeclaration foo (nameOffset:112) (firstTokenOffset:89) (offset:112)
               element: <testLibrary>::@extensionType::A::@getter::foo
               previousFragment: #F11
   extensionTypes
@@ -4123,39 +4662,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F13
           formalParameters
@@ -4193,13 +4733,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -4209,13 +4749,13 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F11 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F11 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
               nextFragment: #F12
           setters
-            #F13 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F13 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -4225,12 +4765,12 @@
           previousFragment: #F1
           nextFragment: #F15
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F16
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -4242,7 +4782,7 @@
               nextFragment: #F18
               previousFragment: #F6
           getters
-            #F12 augment foo (nameOffset:112) (firstTokenOffset:89) (offset:112)
+            #F12 augment isOriginDeclaration foo (nameOffset:112) (firstTokenOffset:89) (offset:112)
               element: <testLibrary>::@extensionType::A::@getter::foo
               previousFragment: #F11
               nextFragment: #F19
@@ -4250,11 +4790,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F16 augment it (nameOffset:154) (firstTokenOffset:150) (offset:154)
+            #F16 augment isOriginDeclaringFormalParameter it (nameOffset:154) (firstTokenOffset:150) (offset:154)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
           constructors
-            #F18 augment new (nameOffset:<null>) (firstTokenOffset:148) (offset:148)
+            #F18 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:148) (offset:148)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 148
@@ -4264,7 +4804,7 @@
                   previousFragment: #F8
               previousFragment: #F9
           getters
-            #F19 augment foo (nameOffset:185) (firstTokenOffset:162) (offset:185)
+            #F19 augment isOriginDeclaration foo (nameOffset:185) (firstTokenOffset:162) (offset:185)
               element: <testLibrary>::@extensionType::A::@getter::foo
               previousFragment: #F12
   extensionTypes
@@ -4275,39 +4815,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F13
           formalParameters
@@ -4342,15 +4883,15 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo1
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo2
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -4360,22 +4901,22 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F12 foo1 (nameOffset:37) (firstTokenOffset:29) (offset:37)
+            #F12 isOriginDeclaration foo1 (nameOffset:37) (firstTokenOffset:29) (offset:37)
               element: <testLibrary>::@extensionType::A::@getter::foo1
               nextFragment: #F13
-            #F14 foo2 (nameOffset:58) (firstTokenOffset:50) (offset:58)
+            #F14 isOriginDeclaration foo2 (nameOffset:58) (firstTokenOffset:50) (offset:58)
               element: <testLibrary>::@extensionType::A::@getter::foo2
         #F2 extension type A (nameOffset:95) (firstTokenOffset:72) (offset:95)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:101) (firstTokenOffset:97) (offset:101)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:101) (firstTokenOffset:97) (offset:101)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 95
@@ -4385,7 +4926,7 @@
                   previousFragment: #F8
               previousFragment: #F7
           getters
-            #F13 augment foo1 (nameOffset:125) (firstTokenOffset:109) (offset:125)
+            #F13 augment isOriginDeclaration foo1 (nameOffset:125) (firstTokenOffset:109) (offset:125)
               element: <testLibrary>::@extensionType::A::@getter::foo1
               previousFragment: #F12
   extensionTypes
@@ -4396,42 +4937,43 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo1
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extensionType::A::@field::foo1
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extensionType::A::@field::foo2
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo2
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember foo1
+        isExtensionTypeMember isOriginDeclaration foo1
           reference: <testLibrary>::@extensionType::A::@getter::foo1
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        isExtensionTypeMember foo2
+        isExtensionTypeMember isOriginDeclaration foo2
           reference: <testLibrary>::@extensionType::A::@getter::foo2
           firstFragment: #F14
           returnType: int
@@ -4465,13 +5007,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -4481,9 +5023,9 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F11 foo (nameOffset:37) (firstTokenOffset:29) (offset:37)
+            #F11 isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:29) (offset:37)
               element: <testLibrary>::@extensionType::A::@getter::foo
               nextFragment: #F12
         #F2 extension type A (nameOffset:73) (firstTokenOffset:50) (offset:73)
@@ -4491,12 +5033,12 @@
           previousFragment: #F1
           nextFragment: #F13
           fields
-            #F4 augment it (nameOffset:79) (firstTokenOffset:75) (offset:79)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:79) (firstTokenOffset:75) (offset:79)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F14
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:73) (offset:73)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:73) (offset:73)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 73
@@ -4508,7 +5050,7 @@
               nextFragment: #F16
               previousFragment: #F6
           getters
-            #F12 augment foo (nameOffset:103) (firstTokenOffset:87) (offset:103)
+            #F12 augment isOriginDeclaration foo (nameOffset:103) (firstTokenOffset:87) (offset:103)
               element: <testLibrary>::@extensionType::A::@getter::foo
               previousFragment: #F11
               nextFragment: #F17
@@ -4516,11 +5058,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F14 augment it (nameOffset:145) (firstTokenOffset:141) (offset:145)
+            #F14 augment isOriginDeclaringFormalParameter it (nameOffset:145) (firstTokenOffset:141) (offset:145)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
           constructors
-            #F16 augment new (nameOffset:<null>) (firstTokenOffset:139) (offset:139)
+            #F16 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:139) (offset:139)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 139
@@ -4530,7 +5072,7 @@
                   previousFragment: #F8
               previousFragment: #F9
           getters
-            #F17 augment foo (nameOffset:169) (firstTokenOffset:153) (offset:169)
+            #F17 augment isOriginDeclaration foo (nameOffset:169) (firstTokenOffset:153) (offset:169)
               element: <testLibrary>::@extensionType::A::@getter::foo
               previousFragment: #F12
   extensionTypes
@@ -4541,32 +5083,33 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        isExtensionTypeMember foo
+        isExtensionTypeMember isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F11
           returnType: int
@@ -4595,34 +5138,34 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F6 extension type I1 (nameOffset:57) (firstTokenOffset:42) (offset:57)
           element: <testLibrary>::@extensionType::I1
           fields
-            #F7 it (nameOffset:64) (firstTokenOffset:60) (offset:64)
+            #F7 isOriginDeclaringFormalParameter it (nameOffset:64) (firstTokenOffset:60) (offset:64)
               element: <testLibrary>::@extensionType::I1::@field::it
           getters
-            #F8 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F8 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@extensionType::I1::@getter::it
         #F2 extension type A (nameOffset:95) (firstTokenOffset:72) (offset:95)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:101) (firstTokenOffset:97) (offset:101)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:101) (firstTokenOffset:97) (offset:101)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
         #F9 extension type I2 (nameOffset:137) (firstTokenOffset:122) (offset:137)
           element: <testLibrary>::@extensionType::I2
           fields
-            #F10 it (nameOffset:144) (firstTokenOffset:140) (offset:144)
+            #F10 isOriginDeclaringFormalParameter it (nameOffset:144) (firstTokenOffset:140) (offset:144)
               element: <testLibrary>::@extensionType::I2::@field::it
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:144)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:144)
               element: <testLibrary>::@extensionType::I2::@getter::it
   extensionTypes
     extension type A
@@ -4635,13 +5178,14 @@
         I1
         I2
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -4653,13 +5197,14 @@
       primaryConstructor: <testLibrary>::@extensionType::I1::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I1::@field::it
           firstFragment: #F7
           type: int
           getter: <testLibrary>::@extensionType::I1::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I1::@getter::it
           firstFragment: #F8
           returnType: int
@@ -4671,13 +5216,14 @@
       primaryConstructor: <testLibrary>::@extensionType::I2::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I2::@field::it
           firstFragment: #F10
           type: int
           getter: <testLibrary>::@extensionType::I2::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I2::@getter::it
           firstFragment: #F11
           returnType: int
@@ -4708,11 +5254,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -4722,15 +5268,15 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F10 extension type I1 (nameOffset:57) (firstTokenOffset:42) (offset:57)
           element: <testLibrary>::@extensionType::I1
           fields
-            #F11 it (nameOffset:64) (firstTokenOffset:60) (offset:64)
+            #F11 isOriginDeclaringFormalParameter it (nameOffset:64) (firstTokenOffset:60) (offset:64)
               element: <testLibrary>::@extensionType::I1::@field::it
           constructors
-            #F12 new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
+            #F12 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:57) (offset:57)
               element: <testLibrary>::@extensionType::I1::@constructor::new
               typeName: I1
               typeNameOffset: 57
@@ -4738,19 +5284,19 @@
                 #F13 requiredPositional final this.it (nameOffset:64) (firstTokenOffset:60) (offset:64)
                   element: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
           getters
-            #F14 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F14 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@extensionType::I1::@getter::it
         #F2 extension type A (nameOffset:95) (firstTokenOffset:72) (offset:95)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           nextFragment: #F15
           fields
-            #F4 augment it (nameOffset:101) (firstTokenOffset:97) (offset:101)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:101) (firstTokenOffset:97) (offset:101)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F16
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 95
@@ -4764,10 +5310,10 @@
         #F19 extension type I2 (nameOffset:137) (firstTokenOffset:122) (offset:137)
           element: <testLibrary>::@extensionType::I2
           fields
-            #F20 it (nameOffset:144) (firstTokenOffset:140) (offset:144)
+            #F20 isOriginDeclaringFormalParameter it (nameOffset:144) (firstTokenOffset:140) (offset:144)
               element: <testLibrary>::@extensionType::I2::@field::it
           constructors
-            #F21 new (nameOffset:<null>) (firstTokenOffset:137) (offset:137)
+            #F21 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:137) (offset:137)
               element: <testLibrary>::@extensionType::I2::@constructor::new
               typeName: I2
               typeNameOffset: 137
@@ -4775,17 +5321,17 @@
                 #F22 requiredPositional final this.it (nameOffset:144) (firstTokenOffset:140) (offset:144)
                   element: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
           getters
-            #F23 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:144)
+            #F23 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:144)
               element: <testLibrary>::@extensionType::I2::@getter::it
         #F15 extension type A (nameOffset:175) (firstTokenOffset:152) (offset:175)
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F16 augment it (nameOffset:181) (firstTokenOffset:177) (offset:181)
+            #F16 augment isOriginDeclaringFormalParameter it (nameOffset:181) (firstTokenOffset:177) (offset:181)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
           constructors
-            #F18 augment new (nameOffset:<null>) (firstTokenOffset:175) (offset:175)
+            #F18 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:175) (offset:175)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 175
@@ -4797,10 +5343,10 @@
         #F24 extension type I3 (nameOffset:217) (firstTokenOffset:202) (offset:217)
           element: <testLibrary>::@extensionType::I3
           fields
-            #F25 it (nameOffset:224) (firstTokenOffset:220) (offset:224)
+            #F25 isOriginDeclaringFormalParameter it (nameOffset:224) (firstTokenOffset:220) (offset:224)
               element: <testLibrary>::@extensionType::I3::@field::it
           constructors
-            #F26 new (nameOffset:<null>) (firstTokenOffset:217) (offset:217)
+            #F26 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:217) (offset:217)
               element: <testLibrary>::@extensionType::I3::@constructor::new
               typeName: I3
               typeNameOffset: 217
@@ -4808,7 +5354,7 @@
                 #F27 requiredPositional final this.it (nameOffset:224) (firstTokenOffset:220) (offset:224)
                   element: <testLibrary>::@extensionType::I3::@constructor::new::@formalParameter::it
           getters
-            #F28 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:224)
+            #F28 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:224)
               element: <testLibrary>::@extensionType::I3::@getter::it
   extensionTypes
     extension type A
@@ -4822,22 +5368,23 @@
         I2
         I3
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -4849,22 +5396,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I1::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I1::@field::it
           firstFragment: #F11
           type: int
           getter: <testLibrary>::@extensionType::I1::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I1::@constructor::new
           firstFragment: #F12
           formalParameters
-            #E1 requiredPositional final hasImplicitType this.it
+            #E1 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F13
               type: int
               field: <testLibrary>::@extensionType::I1::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I1::@getter::it
           firstFragment: #F14
           returnType: int
@@ -4876,22 +5424,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I2::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I2::@field::it
           firstFragment: #F20
           type: int
           getter: <testLibrary>::@extensionType::I2::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I2::@constructor::new
           firstFragment: #F21
           formalParameters
-            #E2 requiredPositional final hasImplicitType this.it
+            #E2 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F22
               type: int
               field: <testLibrary>::@extensionType::I2::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I2::@getter::it
           firstFragment: #F23
           returnType: int
@@ -4903,22 +5452,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I3::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I3::@field::it
           firstFragment: #F25
           type: int
           getter: <testLibrary>::@extensionType::I3::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I3::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I3::@constructor::new
           firstFragment: #F26
           formalParameters
-            #E3 requiredPositional final hasImplicitType this.it
+            #E3 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F27
               type: int
               field: <testLibrary>::@extensionType::I3::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I3::@getter::it
           firstFragment: #F28
           returnType: int
@@ -4950,11 +5500,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -4964,15 +5514,15 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F12 extension type I1 (nameOffset:60) (firstTokenOffset:45) (offset:60)
           element: <testLibrary>::@extensionType::I1
           fields
-            #F13 it (nameOffset:67) (firstTokenOffset:63) (offset:67)
+            #F13 isOriginDeclaringFormalParameter it (nameOffset:67) (firstTokenOffset:63) (offset:67)
               element: <testLibrary>::@extensionType::I1::@field::it
           constructors
-            #F14 new (nameOffset:<null>) (firstTokenOffset:60) (offset:60)
+            #F14 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:60) (offset:60)
               element: <testLibrary>::@extensionType::I1::@constructor::new
               typeName: I1
               typeNameOffset: 60
@@ -4980,7 +5530,7 @@
                 #F15 requiredPositional final this.it (nameOffset:67) (firstTokenOffset:63) (offset:67)
                   element: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
           getters
-            #F16 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F16 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@extensionType::I1::@getter::it
         #F2 extension type A (nameOffset:98) (firstTokenOffset:75) (offset:98)
           element: <testLibrary>::@extensionType::A
@@ -4990,11 +5540,11 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F6 augment it (nameOffset:107) (firstTokenOffset:103) (offset:107)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:107) (firstTokenOffset:103) (offset:107)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:98) (offset:98)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:98) (offset:98)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 98
@@ -5009,10 +5559,10 @@
             #F18 E (nameOffset:149) (firstTokenOffset:149) (offset:149)
               element: #E1 E
           fields
-            #F19 it (nameOffset:156) (firstTokenOffset:152) (offset:156)
+            #F19 isOriginDeclaringFormalParameter it (nameOffset:156) (firstTokenOffset:152) (offset:156)
               element: <testLibrary>::@extensionType::I2::@field::it
           constructors
-            #F20 new (nameOffset:<null>) (firstTokenOffset:146) (offset:146)
+            #F20 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:146) (offset:146)
               element: <testLibrary>::@extensionType::I2::@constructor::new
               typeName: I2
               typeNameOffset: 146
@@ -5020,7 +5570,7 @@
                 #F21 requiredPositional final this.it (nameOffset:156) (firstTokenOffset:152) (offset:156)
                   element: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
           getters
-            #F22 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
+            #F22 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
               element: <testLibrary>::@extensionType::I2::@getter::it
   extensionTypes
     extension type A
@@ -5036,22 +5586,23 @@
         I1
         I2<T>
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E2 requiredPositional final hasImplicitType this.it
+            #E2 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
@@ -5063,22 +5614,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I1::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I1::@field::it
           firstFragment: #F13
           type: int
           getter: <testLibrary>::@extensionType::I1::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I1::@constructor::new
           firstFragment: #F14
           formalParameters
-            #E3 requiredPositional final hasImplicitType this.it
+            #E3 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F15
               type: int
               field: <testLibrary>::@extensionType::I1::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I1::@getter::it
           firstFragment: #F16
           returnType: int
@@ -5093,22 +5645,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I2::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I2::@field::it
           firstFragment: #F19
           type: int
           getter: <testLibrary>::@extensionType::I2::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I2::@constructor::new
           firstFragment: #F20
           formalParameters
-            #E4 requiredPositional final hasImplicitType this.it
+            #E4 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F21
               type: int
               field: <testLibrary>::@extensionType::I2::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I2::@getter::it
           firstFragment: #F22
           returnType: int
@@ -5140,11 +5693,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5154,15 +5707,15 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F12 extension type I1 (nameOffset:60) (firstTokenOffset:45) (offset:60)
           element: <testLibrary>::@extensionType::I1
           fields
-            #F13 it (nameOffset:67) (firstTokenOffset:63) (offset:67)
+            #F13 isOriginDeclaringFormalParameter it (nameOffset:67) (firstTokenOffset:63) (offset:67)
               element: <testLibrary>::@extensionType::I1::@field::it
           constructors
-            #F14 new (nameOffset:<null>) (firstTokenOffset:60) (offset:60)
+            #F14 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:60) (offset:60)
               element: <testLibrary>::@extensionType::I1::@constructor::new
               typeName: I1
               typeNameOffset: 60
@@ -5170,7 +5723,7 @@
                 #F15 requiredPositional final this.it (nameOffset:67) (firstTokenOffset:63) (offset:67)
                   element: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
           getters
-            #F16 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F16 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@extensionType::I1::@getter::it
         #F2 extension type A (nameOffset:98) (firstTokenOffset:75) (offset:98)
           element: <testLibrary>::@extensionType::A
@@ -5180,11 +5733,11 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F6 augment it (nameOffset:110) (firstTokenOffset:106) (offset:110)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:110) (firstTokenOffset:106) (offset:110)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:98) (offset:98)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:98) (offset:98)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 98
@@ -5199,10 +5752,10 @@
             #F18 E (nameOffset:152) (firstTokenOffset:152) (offset:152)
               element: #E1 E
           fields
-            #F19 it (nameOffset:159) (firstTokenOffset:155) (offset:159)
+            #F19 isOriginDeclaringFormalParameter it (nameOffset:159) (firstTokenOffset:155) (offset:159)
               element: <testLibrary>::@extensionType::I2::@field::it
           constructors
-            #F20 new (nameOffset:<null>) (firstTokenOffset:149) (offset:149)
+            #F20 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:149) (offset:149)
               element: <testLibrary>::@extensionType::I2::@constructor::new
               typeName: I2
               typeNameOffset: 149
@@ -5210,7 +5763,7 @@
                 #F21 requiredPositional final this.it (nameOffset:159) (firstTokenOffset:155) (offset:159)
                   element: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
           getters
-            #F22 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:159)
+            #F22 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:159)
               element: <testLibrary>::@extensionType::I2::@getter::it
   extensionTypes
     extension type A
@@ -5226,22 +5779,23 @@
         I1
         I2<T>
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E2 requiredPositional final hasImplicitType this.it
+            #E2 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
@@ -5253,22 +5807,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I1::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I1::@field::it
           firstFragment: #F13
           type: int
           getter: <testLibrary>::@extensionType::I1::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I1::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I1::@constructor::new
           firstFragment: #F14
           formalParameters
-            #E3 requiredPositional final hasImplicitType this.it
+            #E3 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F15
               type: int
               field: <testLibrary>::@extensionType::I1::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I1::@getter::it
           firstFragment: #F16
           returnType: int
@@ -5283,22 +5838,23 @@
       primaryConstructor: <testLibrary>::@extensionType::I2::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::I2::@field::it
           firstFragment: #F19
           type: int
           getter: <testLibrary>::@extensionType::I2::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::I2::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::I2::@constructor::new
           firstFragment: #F20
           formalParameters
-            #E4 requiredPositional final hasImplicitType this.it
+            #E4 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F21
               type: int
               field: <testLibrary>::@extensionType::I2::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::I2::@getter::it
           firstFragment: #F22
           returnType: int
@@ -5328,11 +5884,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5342,7 +5898,7 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F10 foo (nameOffset:34) (firstTokenOffset:29) (offset:34)
@@ -5351,11 +5907,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:75) (firstTokenOffset:71) (offset:75)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:75) (firstTokenOffset:71) (offset:75)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:69) (offset:69)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:69) (offset:69)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 69
@@ -5375,22 +5931,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -5430,11 +5987,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5444,7 +6001,7 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F10 foo1 (nameOffset:34) (firstTokenOffset:29) (offset:34)
@@ -5456,11 +6013,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:93) (firstTokenOffset:89) (offset:93)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:93) (firstTokenOffset:89) (offset:93)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:87) (offset:87)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:87) (offset:87)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 87
@@ -5481,22 +6038,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -5539,11 +6097,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5553,7 +6111,7 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F10 foo (nameOffset:34) (firstTokenOffset:29) (offset:34)
@@ -5564,12 +6122,12 @@
           previousFragment: #F1
           nextFragment: #F12
           fields
-            #F4 augment it (nameOffset:75) (firstTokenOffset:71) (offset:75)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:75) (firstTokenOffset:71) (offset:75)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
               nextFragment: #F13
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:69) (offset:69)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:69) (offset:69)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 69
@@ -5589,11 +6147,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F2
           fields
-            #F13 augment it (nameOffset:137) (firstTokenOffset:133) (offset:137)
+            #F13 augment isOriginDeclaringFormalParameter it (nameOffset:137) (firstTokenOffset:133) (offset:137)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F4
           constructors
-            #F15 augment new (nameOffset:<null>) (firstTokenOffset:131) (offset:131)
+            #F15 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:131) (offset:131)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 131
@@ -5614,22 +6172,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -5668,11 +6227,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5682,7 +6241,7 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F12 foo (nameOffset:34) (firstTokenOffset:32) (offset:34)
@@ -5695,11 +6254,11 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F6 augment it (nameOffset:87) (firstTokenOffset:83) (offset:87)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:87) (firstTokenOffset:83) (offset:87)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 78
@@ -5722,22 +6281,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E1 requiredPositional final hasImplicitType this.it
+            #E1 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
@@ -5782,11 +6342,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5796,7 +6356,7 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F12 foo (nameOffset:34) (firstTokenOffset:32) (offset:34)
@@ -5810,11 +6370,11 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F6 augment it (nameOffset:87) (firstTokenOffset:83) (offset:87)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:87) (firstTokenOffset:83) (offset:87)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:78) (offset:78)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 78
@@ -5838,22 +6398,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E1 requiredPositional final hasImplicitType this.it
+            #E1 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
@@ -5890,11 +6451,11 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F5 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -5904,7 +6465,7 @@
                   nextFragment: #F7
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           methods
             #F10 foo (nameOffset:34) (firstTokenOffset:29) (offset:34)
@@ -5916,11 +6477,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:94) (firstTokenOffset:90) (offset:94)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:94) (firstTokenOffset:90) (offset:94)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F8 augment new (nameOffset:<null>) (firstTokenOffset:85) (offset:85)
+            #F8 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:85) (offset:85)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 85
@@ -5941,22 +6502,23 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F5
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F6
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -5995,13 +6557,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo1
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -6011,10 +6573,10 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           setters
-            #F11 foo1 (nameOffset:33) (firstTokenOffset:29) (offset:33)
+            #F11 isOriginDeclaration foo1 (nameOffset:33) (firstTokenOffset:29) (offset:33)
               element: <testLibrary>::@extensionType::A::@setter::foo1
               formalParameters
                 #F12 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
@@ -6023,13 +6585,13 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:80) (firstTokenOffset:76) (offset:80)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:80) (firstTokenOffset:76) (offset:80)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
-            #F13 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+            #F13 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
               element: <testLibrary>::@extensionType::A::@field::foo2
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:74) (offset:74)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:74) (offset:74)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 74
@@ -6039,7 +6601,7 @@
                   previousFragment: #F7
               previousFragment: #F6
           setters
-            #F14 foo2 (nameOffset:92) (firstTokenOffset:88) (offset:92)
+            #F14 isOriginDeclaration foo2 (nameOffset:92) (firstTokenOffset:88) (offset:92)
               element: <testLibrary>::@extensionType::A::@setter::foo2
               formalParameters
                 #F15 requiredPositional _ (nameOffset:101) (firstTokenOffset:97) (offset:101)
@@ -6052,38 +6614,39 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo1
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extensionType::A::@field::foo1
           firstFragment: #F5
           type: int
           setter: <testLibrary>::@extensionType::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extensionType::A::@field::foo2
           firstFragment: #F13
           type: int
           setter: <testLibrary>::@extensionType::A::@setter::foo2
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
       setters
-        isExtensionTypeMember foo1
+        isExtensionTypeMember isOriginDeclaration foo1
           reference: <testLibrary>::@extensionType::A::@setter::foo1
           firstFragment: #F11
           formalParameters
@@ -6092,7 +6655,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        isExtensionTypeMember foo2
+        isExtensionTypeMember isOriginDeclaration foo2
           reference: <testLibrary>::@extensionType::A::@setter::foo2
           firstFragment: #F14
           formalParameters
@@ -6126,13 +6689,13 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 hasInitializer foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 hasInitializer isOriginDeclaration foo (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@extensionType::A::@field::foo
           constructors
-            #F6 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F6 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -6142,12 +6705,12 @@
                   nextFragment: #F8
               nextFragment: #F9
           getters
-            #F10 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F10 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
-            #F11 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F11 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@getter::foo
           setters
-            #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F13 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -6157,11 +6720,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:81) (firstTokenOffset:77) (offset:81)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:81) (firstTokenOffset:77) (offset:81)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F9 augment new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
+            #F9 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:75) (offset:75)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 75
@@ -6171,7 +6734,7 @@
                   previousFragment: #F7
               previousFragment: #F6
           setters
-            #F14 augment foo (nameOffset:108) (firstTokenOffset:89) (offset:108)
+            #F14 augment isOriginDeclaration foo (nameOffset:108) (firstTokenOffset:89) (offset:108)
               element: <testLibrary>::@extensionType::A::@setter::foo
               formalParameters
                 #F15 requiredPositional _ (nameOffset:116) (firstTokenOffset:112) (offset:116)
@@ -6185,39 +6748,40 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        static hasInitializer foo
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        static hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extensionType::A::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::foo
           setter: <testLibrary>::@extensionType::A::@setter::foo
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F6
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F7
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@getter::foo
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::foo
       setters
-        synthetic static isExtensionTypeMember foo
+        synthetic static isExtensionTypeMember isOriginVariable foo
           reference: <testLibrary>::@extensionType::A::@setter::foo
           firstFragment: #F12
           formalParameters
@@ -6252,15 +6816,15 @@
           element: <testLibrary>::@extensionType::A
           nextFragment: #F2
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F4
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo1
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@extensionType::A::@field::foo2
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
+            #F7 isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:15) (offset:15)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 15
@@ -6270,16 +6834,16 @@
                   nextFragment: #F9
               nextFragment: #F10
           getters
-            #F11 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F11 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
           setters
-            #F12 foo1 (nameOffset:33) (firstTokenOffset:29) (offset:33)
+            #F12 isOriginDeclaration foo1 (nameOffset:33) (firstTokenOffset:29) (offset:33)
               element: <testLibrary>::@extensionType::A::@setter::foo1
               formalParameters
                 #F13 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
                   element: <testLibrary>::@extensionType::A::@setter::foo1::@formalParameter::_
               nextFragment: #F14
-            #F15 foo2 (nameOffset:54) (firstTokenOffset:50) (offset:54)
+            #F15 isOriginDeclaration foo2 (nameOffset:54) (firstTokenOffset:50) (offset:54)
               element: <testLibrary>::@extensionType::A::@setter::foo2
               formalParameters
                 #F16 requiredPositional _ (nameOffset:63) (firstTokenOffset:59) (offset:63)
@@ -6288,11 +6852,11 @@
           element: <testLibrary>::@extensionType::A
           previousFragment: #F1
           fields
-            #F4 augment it (nameOffset:101) (firstTokenOffset:97) (offset:101)
+            #F4 augment isOriginDeclaringFormalParameter it (nameOffset:101) (firstTokenOffset:97) (offset:101)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F3
           constructors
-            #F10 augment new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
+            #F10 augment isOriginDeclaration isPrimary new (nameOffset:<null>) (firstTokenOffset:95) (offset:95)
               element: <testLibrary>::@extensionType::A::@constructor::new
               typeName: A
               typeNameOffset: 95
@@ -6302,7 +6866,7 @@
                   previousFragment: #F8
               previousFragment: #F7
           setters
-            #F14 augment foo1 (nameOffset:121) (firstTokenOffset:109) (offset:121)
+            #F14 augment isOriginDeclaration foo1 (nameOffset:121) (firstTokenOffset:109) (offset:121)
               element: <testLibrary>::@extensionType::A::@setter::foo1
               formalParameters
                 #F17 requiredPositional _ (nameOffset:130) (firstTokenOffset:126) (offset:130)
@@ -6316,38 +6880,39 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
-        synthetic foo1
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@extensionType::A::@field::foo1
           firstFragment: #F5
           type: int
           setter: <testLibrary>::@extensionType::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@extensionType::A::@field::foo2
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@extensionType::A::@setter::foo2
       constructors
-        isExtensionTypeMember new
+        declaring isExtensionTypeMember isOriginDeclaration isPrimary new
           reference: <testLibrary>::@extensionType::A::@constructor::new
           firstFragment: #F7
           formalParameters
-            #E0 requiredPositional final hasImplicitType this.it
+            #E0 requiredPositional final hasImplicitType declaring this.it
               firstFragment: #F8
               type: int
               field: <testLibrary>::@extensionType::A::@field::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@extensionType::A::@field::it
       setters
-        isExtensionTypeMember foo1
+        isExtensionTypeMember isOriginDeclaration foo1
           reference: <testLibrary>::@extensionType::A::@setter::foo1
           firstFragment: #F12
           formalParameters
@@ -6356,7 +6921,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@extensionType::A::@field::foo1
-        isExtensionTypeMember foo2
+        isExtensionTypeMember isOriginDeclaration foo2
           reference: <testLibrary>::@extensionType::A::@setter::foo2
           firstFragment: #F15
           formalParameters
@@ -6395,10 +6960,10 @@
         #F3 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A
           fields
-            #F4 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F4 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@field::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@getter::it
   classes
     class A
@@ -6412,13 +6977,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F5
           returnType: int
@@ -6449,18 +7015,18 @@
         #F2 extension type A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@extensionType::A::@def::0
           fields
-            #F3 it (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaringFormalParameter it (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@extensionType::A::@def::0::@field::it
           getters
-            #F4 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@extensionType::A::@def::0::@getter::it
         #F5 extension type A (nameOffset:72) (firstTokenOffset:49) (offset:72)
           element: <testLibrary>::@extensionType::A::@def::1
           fields
-            #F6 augment it (nameOffset:78) (firstTokenOffset:74) (offset:78)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:78) (firstTokenOffset:74) (offset:78)
               element: <testLibrary>::@extensionType::A::@def::1::@field::it
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@extensionType::A::@def::1::@getter::it
   classes
     class A
@@ -6474,13 +7040,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@def::0::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@def::0::@field::it
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@extensionType::A::@def::0::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@def::0::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@def::0::@getter::it
           firstFragment: #F4
           returnType: int
@@ -6492,13 +7059,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@def::1::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@def::1::@field::it
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@extensionType::A::@def::1::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@def::1::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@def::1::@getter::it
           firstFragment: #F7
           returnType: int
@@ -6529,11 +7097,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:54) (firstTokenOffset:31) (offset:54)
           element: <testLibrary>::@extensionType::A
@@ -6545,7 +7113,7 @@
               previousFragment: #F3
               nextFragment: #F9
           fields
-            #F6 augment it (nameOffset:63) (firstTokenOffset:59) (offset:63)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:63) (firstTokenOffset:59) (offset:63)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
               nextFragment: #F10
@@ -6557,7 +7125,7 @@
               element: #E0 T
               previousFragment: #F4
           fields
-            #F10 augment it (nameOffset:102) (firstTokenOffset:98) (offset:102)
+            #F10 augment isOriginDeclaringFormalParameter it (nameOffset:102) (firstTokenOffset:98) (offset:102)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F6
   extensionTypes
@@ -6571,13 +7139,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F7
           returnType: int
@@ -6608,11 +7177,11 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 it (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F5 isOriginDeclaringFormalParameter it (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F6
           getters
-            #F7 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F7 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:54) (firstTokenOffset:31) (offset:54)
           element: <testLibrary>::@extensionType::A
@@ -6624,7 +7193,7 @@
               previousFragment: #F3
               nextFragment: #F9
           fields
-            #F6 augment it (nameOffset:66) (firstTokenOffset:62) (offset:66)
+            #F6 augment isOriginDeclaringFormalParameter it (nameOffset:66) (firstTokenOffset:62) (offset:66)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F5
               nextFragment: #F10
@@ -6636,7 +7205,7 @@
               element: #E0 T
               previousFragment: #F4
           fields
-            #F10 augment it (nameOffset:105) (firstTokenOffset:101) (offset:105)
+            #F10 augment isOriginDeclaringFormalParameter it (nameOffset:105) (firstTokenOffset:101) (offset:105)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F6
   extensionTypes
@@ -6650,13 +7219,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F7
           returnType: int
@@ -6690,11 +7260,11 @@
               element: #E1 U
               nextFragment: #F6
           fields
-            #F7 it (nameOffset:27) (firstTokenOffset:23) (offset:27)
+            #F7 isOriginDeclaringFormalParameter it (nameOffset:27) (firstTokenOffset:23) (offset:27)
               element: <testLibrary>::@extensionType::A::@field::it
               nextFragment: #F8
           getters
-            #F9 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F9 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@extensionType::A::@getter::it
         #F2 extension type A (nameOffset:57) (firstTokenOffset:34) (offset:57)
           element: <testLibrary>::@extensionType::A
@@ -6710,7 +7280,7 @@
               previousFragment: #F5
               nextFragment: #F12
           fields
-            #F8 augment it (nameOffset:66) (firstTokenOffset:62) (offset:66)
+            #F8 augment isOriginDeclaringFormalParameter it (nameOffset:66) (firstTokenOffset:62) (offset:66)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F7
               nextFragment: #F13
@@ -6725,7 +7295,7 @@
               element: #E1 U
               previousFragment: #F6
           fields
-            #F13 augment it (nameOffset:108) (firstTokenOffset:104) (offset:108)
+            #F13 augment isOriginDeclaringFormalParameter it (nameOffset:108) (firstTokenOffset:104) (offset:108)
               element: <testLibrary>::@extensionType::A::@field::it
               previousFragment: #F8
   extensionTypes
@@ -6741,13 +7311,14 @@
       primaryConstructor: <testLibrary>::@extensionType::A::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::A::@field::it
           firstFragment: #F7
           type: int
           getter: <testLibrary>::@extensionType::A::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::A::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::A::@getter::it
           firstFragment: #F9
           returnType: int
@@ -6771,55 +7342,13 @@
 }
 
 @reflectiveTest
-class ExtensionTypeElementTest_fromBytes extends ElementsBaseTest
-    with ExtensionTypeElementMixin {
+class ExtensionTypeElementTest_fromBytes extends ExtensionTypeElementTest {
   @override
   bool get keepLinkingLibraries => false;
 }
 
 @reflectiveTest
-class ExtensionTypeElementTest_fromBytes_declaringConstructors
-    extends ElementsBaseTest
-    with ExtensionTypeElementMixin {
-  @override
-  bool get keepLinkingLibraries => false;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
-
-@reflectiveTest
-class ExtensionTypeElementTest_keepLinking extends ElementsBaseTest
-    with ExtensionTypeElementMixin {
+class ExtensionTypeElementTest_keepLinking extends ExtensionTypeElementTest {
   @override
   bool get keepLinkingLibraries => true;
 }
-
-@reflectiveTest
-class ExtensionTypeElementTest_keepLinking_declaringConstructors
-    extends ElementsBaseTest
-    with ExtensionTypeElementMixin {
-  @override
-  bool get keepLinkingLibraries => true;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
index 794a13a..1ddf55b 100644
--- a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
@@ -58,7 +58,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -72,7 +72,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -103,7 +103,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -117,7 +117,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -148,7 +148,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -162,7 +162,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -199,7 +199,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -214,7 +214,7 @@
             #F7 T (nameOffset:50) (firstTokenOffset:50) (offset:50)
               element: #E1 T
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -231,7 +231,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -252,7 +252,7 @@
           firstFragment: #F7
       supertype: A<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           superConstructor: ConstructorMember
@@ -290,7 +290,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -302,7 +302,7 @@
         #F5 class B (nameOffset:47) (firstTokenOffset:41) (offset:47)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -316,7 +316,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -333,7 +333,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -361,7 +361,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -380,7 +380,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -419,7 +419,7 @@
             #F3 B (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -441,7 +441,7 @@
         #E1 B
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       methods
@@ -473,7 +473,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -487,7 +487,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -514,7 +514,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -528,7 +528,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -607,7 +607,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 positional (nameOffset:14) (firstTokenOffset:12) (offset:14)
+            #F2 isOriginDeclaration positional (nameOffset:14) (firstTokenOffset:12) (offset:14)
               element: <testLibrary>::@class::C::@constructor::positional
               typeName: C
               typeNameOffset: 12
@@ -619,7 +619,7 @@
                     IntegerLiteral
                       literal: 1 @30
                       staticType: int
-            #F4 named (nameOffset:39) (firstTokenOffset:37) (offset:39)
+            #F4 isOriginDeclaration named (nameOffset:39) (firstTokenOffset:37) (offset:39)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 37
@@ -636,7 +636,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        positional
+        isOriginDeclaration positional
           reference: <testLibrary>::@class::C::@constructor::positional
           firstFragment: #F2
           formalParameters
@@ -646,7 +646,7 @@
               constantInitializer
                 fragment: #F3
                 expression: expression_0
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F4
           formalParameters
@@ -679,10 +679,10 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration x (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 positional (nameOffset:23) (firstTokenOffset:21) (offset:23)
+            #F3 isOriginDeclaration positional (nameOffset:23) (firstTokenOffset:21) (offset:23)
               element: <testLibrary>::@class::C::@constructor::positional
               typeName: C
               typeNameOffset: 21
@@ -694,7 +694,7 @@
                     IntegerLiteral
                       literal: 1 @44
                       staticType: int
-            #F5 named (nameOffset:53) (firstTokenOffset:51) (offset:53)
+            #F5 isOriginDeclaration named (nameOffset:53) (firstTokenOffset:51) (offset:53)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
               typeNameOffset: 51
@@ -707,10 +707,10 @@
                       literal: 1 @68
                       staticType: int
           getters
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -720,14 +720,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        positional
+        isOriginDeclaration positional
           reference: <testLibrary>::@class::C::@constructor::positional
           firstFragment: #F3
           formalParameters
@@ -738,7 +738,7 @@
                 fragment: #F4
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F5
           formalParameters
@@ -750,13 +750,13 @@
                 expression: expression_1
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F7
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F8
           formalParameters
@@ -787,7 +787,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -814,7 +814,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
diff --git a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
index 86bcaf4..3f428a3 100644
--- a/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/function_type_annotation_test.dart
@@ -27,32 +27,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+        #F1 isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+        #F2 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
           element: <testLibrary>::@getter::f
       setters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
           element: <testLibrary>::@setter::f
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: void Function()
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F2
       returnType: void Function()
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F3
       formalParameters
@@ -75,32 +75,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 f (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F1 isOriginDeclaration f (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F2 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::f
       setters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@setter::f
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: void Function()?
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F2
       returnType: void Function()?
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F3
       formalParameters
@@ -205,7 +205,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -216,7 +216,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -266,32 +266,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 v (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F1 isOriginDeclaration v (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    v
+    isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int Function(int, String)
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int Function(int, String)
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -325,14 +325,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
         #F4 class B (nameOffset:64) (firstTokenOffset:29) (offset:64)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -343,14 +343,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
 ''');
@@ -378,12 +378,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:62) (firstTokenOffset:62) (offset:62)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:62) (firstTokenOffset:62) (offset:62)
           element: <testLibrary>::@topLevelVariable::v
           metadata
             Annotation
@@ -409,11 +409,11 @@
                           element: dart:core::@class::String
                           type: String
                         name: a @52
-                        declaredElement: <testLibraryFragment> a@52
+                        declaredFragment: <testLibraryFragment> a@52
                           element: isPublic
                             type: String
                       rightParenthesis: ) @53
-                    declaredElement: GenericFunctionTypeElement
+                    declaredFragment: GenericFunctionTypeElement
                       parameters
                         a
                           kind: required positional
@@ -430,10 +430,10 @@
                 baseElement: <testLibrary>::@class::A::@constructor::new
                 substitution: {T: int Function(String)}
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
           element: <testLibrary>::@getter::v
       setters
-        #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+        #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
           element: <testLibrary>::@setter::v
           formalParameters
             #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
@@ -446,11 +446,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       metadata
@@ -477,11 +477,11 @@
                       element: dart:core::@class::String
                       type: String
                     name: a @52
-                    declaredElement: <testLibraryFragment> a@52
+                    declaredFragment: <testLibraryFragment> a@52
                       element: isPublic
                         type: String
                   rightParenthesis: ) @53
-                declaredElement: GenericFunctionTypeElement
+                declaredFragment: GenericFunctionTypeElement
                   parameters
                     a
                       kind: required positional
@@ -501,13 +501,13 @@
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F6
       formalParameters
@@ -540,12 +540,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             InstanceCreationExpression
@@ -572,15 +572,15 @@
                                 element: dart:core::@class::int
                                 type: int?
                               name: a @63
-                              declaredElement: <testLibraryFragment> a@63
+                              declaredFragment: <testLibraryFragment> a@63
                                 element: isPublic
                                   type: int?
-                            declaredElement: <testLibraryFragment> a@63
+                            declaredFragment: <testLibraryFragment> a@63
                               element: isPublic
                                 type: int?
                           rightDelimiter: } @64
                           rightParenthesis: ) @65
-                        declaredElement: GenericFunctionTypeElement
+                        declaredFragment: GenericFunctionTypeElement
                           parameters
                             a
                               kind: optional named
@@ -600,7 +600,7 @@
                 rightParenthesis: ) @68
               staticType: A<String Function({int? a})>
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::v
   classes
     class A
@@ -610,11 +610,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       type: A<String Function({int? a})>
@@ -623,7 +623,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: A<String Function({int? a})>
@@ -652,12 +652,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             InstanceCreationExpression
@@ -684,15 +684,15 @@
                                 element: dart:core::@class::int
                                 type: int?
                               name: a @63
-                              declaredElement: <testLibraryFragment> a@63
+                              declaredFragment: <testLibraryFragment> a@63
                                 element: isPublic
                                   type: int?
-                            declaredElement: <testLibraryFragment> a@63
+                            declaredFragment: <testLibraryFragment> a@63
                               element: isPublic
                                 type: int?
                           rightDelimiter: ] @64
                           rightParenthesis: ) @65
-                        declaredElement: GenericFunctionTypeElement
+                        declaredFragment: GenericFunctionTypeElement
                           parameters
                             a
                               kind: optional positional
@@ -712,7 +712,7 @@
                 rightParenthesis: ) @68
               staticType: A<String Function([int?])>
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::v
   classes
     class A
@@ -722,11 +722,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       type: A<String Function([int?])>
@@ -735,7 +735,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: A<String Function([int?])>
@@ -764,12 +764,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             InstanceCreationExpression
@@ -796,15 +796,15 @@
                                 element: dart:core::@class::int
                                 type: int
                               name: a @71
-                              declaredElement: <testLibraryFragment> a@71
+                              declaredFragment: <testLibraryFragment> a@71
                                 element: isPublic
                                   type: int
-                            declaredElement: <testLibraryFragment> a@71
+                            declaredFragment: <testLibraryFragment> a@71
                               element: isPublic
                                 type: int
                           rightDelimiter: } @72
                           rightParenthesis: ) @73
-                        declaredElement: GenericFunctionTypeElement
+                        declaredFragment: GenericFunctionTypeElement
                           parameters
                             a
                               kind: required named
@@ -824,7 +824,7 @@
                 rightParenthesis: ) @76
               staticType: A<String Function({required int a})>
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::v
   classes
     class A
@@ -834,11 +834,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       type: A<String Function({required int a})>
@@ -847,7 +847,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: A<String Function({required int a})>
@@ -876,12 +876,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::v
           initializer: expression_0
             InstanceCreationExpression
@@ -905,11 +905,11 @@
                               element: dart:core::@class::int
                               type: int
                             name: a @61
-                            declaredElement: <testLibraryFragment> a@61
+                            declaredFragment: <testLibraryFragment> a@61
                               element: isPublic
                                 type: int
                           rightParenthesis: ) @62
-                        declaredElement: GenericFunctionTypeElement
+                        declaredFragment: GenericFunctionTypeElement
                           parameters
                             a
                               kind: required positional
@@ -929,7 +929,7 @@
                 rightParenthesis: ) @65
               staticType: A<String Function(int)>
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::v
   classes
     class A
@@ -939,11 +939,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer v
+    const hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       type: A<String Function(int)>
@@ -952,7 +952,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: A<String Function(int)>
@@ -1008,13 +1008,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F5 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
@@ -1028,7 +1028,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class alias B
@@ -1038,7 +1038,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           constantInitializers
diff --git a/pkg/analyzer/test/src/summary/elements/library_export_test.dart b/pkg/analyzer/test/src/summary/elements/library_export_test.dart
index 680b57a..a05e0a6 100644
--- a/pkg/analyzer/test/src/summary/elements/library_export_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/library_export_test.dart
@@ -166,7 +166,7 @@
         #F1 class X (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::X
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
   classes
@@ -174,7 +174,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F2
   exportedReferences
@@ -313,7 +313,7 @@
         #F1 class X (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::X
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
   classes
@@ -321,7 +321,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F2
   exportedReferences
@@ -532,7 +532,7 @@
         #F1 class B (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -541,7 +541,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo.dart::@class::A::@constructor::new
@@ -582,7 +582,7 @@
         #F1 class B (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -591,7 +591,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo_io.dart::@class::A::@constructor::new
@@ -632,7 +632,7 @@
         #F1 class B (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -641,7 +641,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo_html.dart::@class::A::@constructor::new
@@ -836,7 +836,7 @@
         #F3 class X (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::X
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
     #F1 package:test/d.dart
@@ -858,7 +858,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F4
   exportedReferences
@@ -911,7 +911,7 @@
         #F2 class X (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
     #F1 package:test/b.dart
@@ -927,7 +927,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F3
   exportedReferences
@@ -975,7 +975,7 @@
         #F2 class X (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
     #F1 package:test/b.dart
@@ -991,7 +991,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F3
   exportedReferences
@@ -1137,7 +1137,7 @@
         #F2 class C (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::C
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
     #F1 package:test/a.dart
@@ -1154,7 +1154,7 @@
         #F5 class A (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::A
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
     #F4 package:test/b.dart
@@ -1165,7 +1165,7 @@
         #F7 class B (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::B
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -1173,21 +1173,21 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F6
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
   exportedReferences
@@ -1243,7 +1243,7 @@
         #F2 class X (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
     #F1 package:test/c.dart
@@ -1269,7 +1269,7 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F3
   exportedReferences
@@ -1311,32 +1311,32 @@
       enclosingFragment: #F0
       previousFragment: #F0
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::a
       setters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::a
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::a::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F4
       formalParameters
@@ -1382,17 +1382,17 @@
       enclosingFragment: #F0
       previousFragment: #F0
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:27) (firstTokenOffset:27) (offset:27)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:27) (firstTokenOffset:27) (offset:27)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @31
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: int
@@ -1401,7 +1401,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
diff --git a/pkg/analyzer/test/src/summary/elements/library_import_test.dart b/pkg/analyzer/test/src/summary/elements/library_import_test.dart
index 0cb1f96..c8f68e1 100644
--- a/pkg/analyzer/test/src/summary/elements/library_import_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/library_import_test.dart
@@ -42,7 +42,7 @@
         #F1 class B (nameOffset:104) (firstTokenOffset:98) (offset:104)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -51,7 +51,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo.dart::@class::A::@constructor::new
@@ -90,7 +90,7 @@
         #F1 class B (nameOffset:104) (firstTokenOffset:98) (offset:104)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -99,7 +99,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo_io.dart::@class::A::@constructor::new
@@ -138,7 +138,7 @@
         #F1 class B (nameOffset:124) (firstTokenOffset:118) (offset:124)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -147,7 +147,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo_io.dart::@class::A::@constructor::new
@@ -186,7 +186,7 @@
         #F1 class B (nameOffset:104) (firstTokenOffset:98) (offset:104)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -195,7 +195,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo_html.dart::@class::A::@constructor::new
@@ -234,7 +234,7 @@
         #F1 class B (nameOffset:124) (firstTokenOffset:118) (offset:124)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -243,7 +243,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/foo_html.dart::@class::A::@constructor::new
@@ -354,32 +354,32 @@
           combinators
             hide: Stream, Completer
       topLevelVariables
-        #F1 f (nameOffset:51) (firstTokenOffset:51) (offset:51)
+        #F1 isOriginDeclaration f (nameOffset:51) (firstTokenOffset:51) (offset:51)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+        #F2 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
           element: <testLibrary>::@getter::f
       setters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
           element: <testLibrary>::@setter::f
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: Future<dynamic>
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F2
       returnType: Future<dynamic>
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F3
       formalParameters
@@ -450,32 +450,32 @@
             hide: Stream
             show: Future
       topLevelVariables
-        #F1 f (nameOffset:52) (firstTokenOffset:52) (offset:52)
+        #F1 isOriginDeclaration f (nameOffset:52) (firstTokenOffset:52) (offset:52)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F2 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@getter::f
       setters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@setter::f
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: Future<dynamic>
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F2
       returnType: Future<dynamic>
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F3
       formalParameters
@@ -506,32 +506,32 @@
         <testLibraryFragment>::@prefix2::a
           fragments: @19
       topLevelVariables
-        #F1 c (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F1 isOriginDeclaration c (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F2 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F2 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::c
       setters
-        #F3 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F3 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::c
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@setter::c::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F2
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F3
       formalParameters
@@ -586,13 +586,13 @@
         #F1 class C (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -600,7 +600,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class D
@@ -608,7 +608,7 @@
       firstFragment: #F3
       supertype: C
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::C::@constructor::new
@@ -632,52 +632,52 @@
           combinators
             show: Future, Stream
       topLevelVariables
-        #F1 f (nameOffset:48) (firstTokenOffset:48) (offset:48)
+        #F1 isOriginDeclaration f (nameOffset:48) (firstTokenOffset:48) (offset:48)
           element: <testLibrary>::@topLevelVariable::f
-        #F2 s (nameOffset:58) (firstTokenOffset:58) (offset:58)
+        #F2 isOriginDeclaration s (nameOffset:58) (firstTokenOffset:58) (offset:58)
           element: <testLibrary>::@topLevelVariable::s
       getters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@getter::f
-        #F4 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+        #F4 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
           element: <testLibrary>::@getter::s
       setters
-        #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@setter::f
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@setter::f::@formalParameter::value
-        #F7 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+        #F7 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
           element: <testLibrary>::@setter::s
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@setter::s::@formalParameter::value
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: Future<dynamic>
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
-    s
+    isOriginDeclaration s
       reference: <testLibrary>::@topLevelVariable::s
       firstFragment: #F2
       type: Stream<dynamic>
       getter: <testLibrary>::@getter::s
       setter: <testLibrary>::@setter::s
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F3
       returnType: Future<dynamic>
       variable: <testLibrary>::@topLevelVariable::f
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@getter::s
       firstFragment: #F4
       returnType: Stream<dynamic>
       variable: <testLibrary>::@topLevelVariable::s
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F5
       formalParameters
@@ -686,7 +686,7 @@
           type: Future<dynamic>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::f
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@setter::s
       firstFragment: #F7
       formalParameters
@@ -734,52 +734,52 @@
         package:test/a.dart
         package:test/b.dart
       topLevelVariables
-        #F1 c (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F1 isOriginDeclaration c (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 d (nameOffset:41) (firstTokenOffset:41) (offset:41)
+        #F2 isOriginDeclaration d (nameOffset:41) (firstTokenOffset:41) (offset:41)
           element: <testLibrary>::@topLevelVariable::d
       getters
-        #F3 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F3 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::c
-        #F4 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F4 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@getter::d
       setters
-        #F5 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F5 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@setter::c
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F7 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F7 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@setter::d
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@setter::d::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    d
+    isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F2
       type: D
       getter: <testLibrary>::@getter::d
       setter: <testLibrary>::@setter::d
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F3
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F4
       returnType: D
       variable: <testLibrary>::@topLevelVariable::d
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F5
       formalParameters
@@ -788,7 +788,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@setter::d
       firstFragment: #F7
       formalParameters
@@ -978,17 +978,17 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @33
               staticType: int
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -997,7 +997,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -1039,17 +1039,17 @@
           combinators
             show: Random
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:42) (firstTokenOffset:42) (offset:42)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:42) (firstTokenOffset:42) (offset:42)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @46
               staticType: int
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -1058,7 +1058,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -1088,32 +1088,32 @@
         package:test/a.dart
         package:test/b.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: A
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: A
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
diff --git a/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart b/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart
index 98f5206..7f62aa7 100644
--- a/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/local_declarations_test.dart
@@ -60,7 +60,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 12
@@ -69,7 +69,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -93,7 +93,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -104,7 +104,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -128,19 +128,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic g (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter g (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::g
       getters
-        #F2 g (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F2 isOriginDeclaration g (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@getter::g
   topLevelVariables
-    synthetic g
+    synthetic isOriginGetterSetter g
       reference: <testLibrary>::@topLevelVariable::g
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::g
   getters
-    static g
+    static isOriginDeclaration g
       reference: <testLibrary>::@getter::g
       firstFragment: #F2
       returnType: dynamic
@@ -170,7 +170,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 12
@@ -179,7 +179,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -207,7 +207,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -218,7 +218,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
diff --git a/pkg/analyzer/test/src/summary/elements/metadata_test.dart b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
index 2b4d1af..a1d7a5e 100644
--- a/pkg/analyzer/test/src/summary/elements/metadata_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
@@ -35,13 +35,13 @@
         #F1 class C (nameOffset:20) (firstTokenOffset:0) (offset:20)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class A (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::A
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:37) (offset:43)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:43)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 43
@@ -53,14 +53,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -88,13 +88,13 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:0) (offset:22)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class A (nameOffset:33) (firstTokenOffset:27) (offset:33)
           element: <testLibrary>::@class::A
           constructors
-            #F4 const new (nameOffset:<null>) (firstTokenOffset:39) (offset:45)
+            #F4 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:39) (offset:45)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 45
@@ -106,14 +106,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F3
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -149,7 +149,7 @@
         #F1 class C (nameOffset:39) (firstTokenOffset:22) (offset:39)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -157,7 +157,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -186,7 +186,7 @@
         #F1 class C (nameOffset:32) (firstTokenOffset:17) (offset:32)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -194,7 +194,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -222,54 +222,70 @@
         #F1 class C (nameOffset:19) (firstTokenOffset:13) (offset:19)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer x (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@class::C::@field::x
+              metadata
+                Annotation
+                  atSign: @ @25
+                  name: SimpleIdentifier
+                    token: a @26
+                    element: <testLibrary>::@getter::a
+                    staticType: null
+                  element: <testLibrary>::@getter::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer x
+        hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @25
+              name: SimpleIdentifier
+                token: a @26
+                element: <testLibrary>::@getter::a
+                staticType: null
+              element: <testLibrary>::@getter::a
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -279,7 +295,7 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::x
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: int
@@ -288,7 +304,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: int
@@ -328,18 +344,18 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
           fields
-            #F3 hasInitializer foo (nameOffset:54) (firstTokenOffset:54) (offset:54)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:54) (firstTokenOffset:54) (offset:54)
               element: <testLibrary>::@class::C::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 1 @60
                   staticType: int
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::C::@getter::foo
           methods
             #F6 bar (nameOffset:77) (firstTokenOffset:65) (offset:77)
@@ -353,14 +369,14 @@
                     staticType: null
                   element: <testLibrary>::@class::C::@getter::foo
       topLevelVariables
-        #F7 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_1
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class C
@@ -378,7 +394,7 @@
                 staticType: null
               element: <testLibrary>::@getter::foo
       fields
-        static const hasInitializer foo
+        static const hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F3
           type: int
@@ -387,11 +403,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::C::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -410,7 +426,7 @@
               element: <testLibrary>::@class::C::@getter::foo
           returnType: void
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F7
       type: int
@@ -419,7 +435,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F8
       returnType: int
@@ -444,37 +460,37 @@
         #F1 class C (nameOffset:44) (firstTokenOffset:32) (offset:44)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F4 hasInitializer b (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F4 hasInitializer isOriginDeclaration b (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             NullLiteral
               literal: null @26
               staticType: Null
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F6 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F6 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::b
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: dynamic
@@ -482,7 +498,7 @@
         fragment: #F3
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F4
       type: dynamic
@@ -491,12 +507,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F6
       returnType: dynamic
@@ -518,30 +534,30 @@
         #F1 class C (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F3 class D (nameOffset:45) (firstTokenOffset:39) (offset:45)
           element: <testLibrary>::@class::D
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F5 class E (nameOffset:56) (firstTokenOffset:50) (offset:56)
           element: <testLibrary>::@class::E
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class alias C
@@ -551,7 +567,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -566,18 +582,18 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F6
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: dynamic
@@ -586,7 +602,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: dynamic
@@ -612,7 +628,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const named (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration named (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 18
@@ -623,7 +639,7 @@
         #F4 class C (nameOffset:54) (firstTokenOffset:36) (offset:54)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -631,7 +647,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F2
           formalParameters
@@ -642,7 +658,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -670,7 +686,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const named (nameOffset:23) (firstTokenOffset:15) (offset:23)
+            #F3 const isOriginDeclaration named (nameOffset:23) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 21
@@ -681,7 +697,7 @@
         #F5 class C (nameOffset:56) (firstTokenOffset:38) (offset:56)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -692,7 +708,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
           formalParameters
@@ -703,7 +719,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
 ''');
@@ -731,7 +747,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const named (nameOffset:23) (firstTokenOffset:15) (offset:23)
+            #F3 const isOriginDeclaration named (nameOffset:23) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 21
@@ -739,7 +755,7 @@
         #F4 class C (nameOffset:57) (firstTokenOffset:35) (offset:57)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -750,14 +766,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -785,7 +801,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const named (nameOffset:23) (firstTokenOffset:15) (offset:23)
+            #F3 const isOriginDeclaration named (nameOffset:23) (firstTokenOffset:15) (offset:23)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 21
@@ -793,7 +809,7 @@
         #F4 class C (nameOffset:57) (firstTokenOffset:35) (offset:57)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -804,14 +820,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -843,7 +859,7 @@
         #F1 class C (nameOffset:48) (firstTokenOffset:26) (offset:48)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -851,7 +867,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -883,7 +899,7 @@
         #F1 class C (nameOffset:48) (firstTokenOffset:26) (offset:48)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -891,7 +907,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -923,7 +939,7 @@
         #F1 class C (nameOffset:52) (firstTokenOffset:26) (offset:52)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -931,7 +947,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -960,7 +976,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const named (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F2 const isOriginDeclaration named (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 18
@@ -971,13 +987,13 @@
             #F4 T (nameOffset:52) (firstTokenOffset:52) (offset:52)
               element: #E0 T
           constructors
-            #F5 synthetic const named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F5 synthetic const isOriginMixinApplication named (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@constructor::named
               typeName: C
         #F6 class D (nameOffset:85) (firstTokenOffset:68) (offset:85)
           element: <testLibrary>::@class::D
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       mixins
@@ -988,7 +1004,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F2
     class alias C
@@ -1001,7 +1017,7 @@
       mixins
         B
       constructors
-        synthetic const named
+        synthetic const isOriginMixinApplication named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F5
           constantInitializers
@@ -1021,7 +1037,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
   mixins
@@ -1051,7 +1067,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -1061,7 +1077,7 @@
         #F4 class C (nameOffset:42) (firstTokenOffset:30) (offset:42)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1069,7 +1085,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -1080,7 +1096,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -1108,7 +1124,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
@@ -1118,7 +1134,7 @@
         #F5 class C (nameOffset:44) (firstTokenOffset:32) (offset:44)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1129,7 +1145,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1140,7 +1156,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
 ''');
@@ -1168,14 +1184,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
         #F4 class C (nameOffset:45) (firstTokenOffset:29) (offset:45)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1186,14 +1202,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -1219,7 +1235,7 @@
         #F1 class C (nameOffset:42) (firstTokenOffset:26) (offset:42)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1227,7 +1243,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -1259,7 +1275,7 @@
         #F1 class C (nameOffset:42) (firstTokenOffset:26) (offset:42)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1267,7 +1283,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -1299,7 +1315,7 @@
         #F1 class C (nameOffset:46) (firstTokenOffset:26) (offset:46)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1307,7 +1323,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -1336,7 +1352,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -1346,13 +1362,13 @@
             #F4 T (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: #E0 T
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F5 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F6 class D (nameOffset:73) (firstTokenOffset:62) (offset:73)
           element: <testLibrary>::@class::D
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       mixins
@@ -1363,7 +1379,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class alias C
@@ -1376,7 +1392,7 @@
       mixins
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           constantInitializers
@@ -1391,7 +1407,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
   mixins
@@ -1417,7 +1433,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:10) (offset:16)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:10) (offset:16)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 16
@@ -1427,7 +1443,7 @@
         #F4 class C (nameOffset:39) (firstTokenOffset:24) (offset:39)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1435,7 +1451,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -1446,7 +1462,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -1541,7 +1557,7 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           constructors
-            #F2 named (nameOffset:31) (firstTokenOffset:26) (offset:31)
+            #F2 isOriginDeclaration named (nameOffset:31) (firstTokenOffset:26) (offset:31)
               element: <testLibrary>::@class::C::@constructor::named
               metadata
                 Annotation
@@ -1555,21 +1571,21 @@
               typeNameOffset: 29
               periodOffset: 30
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::C::@constructor::named
           firstFragment: #F2
           metadata
@@ -1581,7 +1597,7 @@
                 staticType: null
               element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: dynamic
@@ -1590,7 +1606,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
@@ -1610,7 +1626,7 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:26) (offset:29)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:26) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               metadata
                 Annotation
@@ -1623,21 +1639,21 @@
               typeName: C
               typeNameOffset: 29
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           metadata
@@ -1649,7 +1665,7 @@
                 staticType: null
               element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: dynamic
@@ -1658,7 +1674,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
@@ -1700,17 +1716,17 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @32
               staticType: int
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -1719,7 +1735,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -1739,54 +1755,70 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:33) (firstTokenOffset:33) (offset:33)
+            #F2 isOriginDeclaration x (nameOffset:33) (firstTokenOffset:33) (offset:33)
               element: <testLibrary>::@class::C::@field::x
+              metadata
+                Annotation
+                  atSign: @ @26
+                  name: SimpleIdentifier
+                    token: a @27
+                    element: <testLibrary>::@getter::a
+                    staticType: null
+                  element: <testLibrary>::@getter::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @26
+              name: SimpleIdentifier
+                token: a @27
+                element: <testLibrary>::@getter::a
+                staticType: null
+              element: <testLibrary>::@getter::a
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F5
           formalParameters
@@ -1796,7 +1828,7 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::x
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: dynamic
@@ -1805,7 +1837,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: dynamic
@@ -1831,10 +1863,10 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:32) (firstTokenOffset:32) (offset:32)
+            #F2 isOriginDeclaration x (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:37) (offset:37)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 37
@@ -1850,37 +1882,37 @@
                         staticType: null
                       element: <testLibrary>::@getter::a
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
       topLevelVariables
-        #F8 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F8 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -1897,13 +1929,13 @@
                   element: <testLibrary>::@getter::a
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1913,7 +1945,7 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::x
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F8
       type: dynamic
@@ -1922,7 +1954,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F9
       returnType: dynamic
@@ -1944,10 +1976,10 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           fields
-            #F2 x (nameOffset:30) (firstTokenOffset:30) (offset:30)
+            #F2 isOriginDeclaration x (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:33) (offset:33)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:33) (offset:33)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 33
@@ -1967,37 +1999,37 @@
                       literal: null @48
                       staticType: Null
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
       topLevelVariables
-        #F8 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F8 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_1
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -2017,13 +2049,13 @@
                 expression: expression_0
               field: <testLibrary>::@class::C::@field::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -2033,7 +2065,7 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::x
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F8
       type: dynamic
@@ -2042,7 +2074,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F9
       returnType: dynamic
@@ -2063,14 +2095,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       functions
         #F3 f (nameOffset:19) (firstTokenOffset:16) (offset:19)
@@ -2084,7 +2116,7 @@
                 staticType: null
               element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -2093,7 +2125,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -2123,18 +2155,18 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 f (nameOffset:23) (firstTokenOffset:16) (offset:23)
+        #F4 isOriginDeclaration f (nameOffset:23) (firstTokenOffset:16) (offset:23)
           element: <testLibrary>::@getter::f
           metadata
             Annotation
@@ -2145,7 +2177,7 @@
                 staticType: null
               element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -2153,18 +2185,18 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    synthetic f
+    synthetic isOriginGetterSetter f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F2
       type: dynamic
       getter: <testLibrary>::@getter::f
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    static f
+    static isOriginDeclaration f
       reference: <testLibrary>::@getter::f
       firstFragment: #F4
       metadata
@@ -2189,19 +2221,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       setters
-        #F4 f (nameOffset:23) (firstTokenOffset:16) (offset:23)
+        #F4 isOriginDeclaration f (nameOffset:23) (firstTokenOffset:16) (offset:23)
           element: <testLibrary>::@setter::f
           metadata
             Annotation
@@ -2215,7 +2247,7 @@
             #F5 requiredPositional value (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -2223,19 +2255,19 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    synthetic f
+    synthetic isOriginGetterSetter f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F2
       type: dynamic
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    static f
+    static isOriginDeclaration f
       reference: <testLibrary>::@setter::f
       firstFragment: #F4
       metadata
@@ -2275,14 +2307,14 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   typeAliases
     F
@@ -2298,7 +2330,7 @@
           element: <testLibrary>::@getter::a
       aliasedType: dynamic Function()
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: dynamic
@@ -2307,7 +2339,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
@@ -2324,14 +2356,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       functions
         #F3 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
@@ -2348,7 +2380,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -2357,7 +2389,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -2391,14 +2423,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       functions
         #F3 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
@@ -2419,7 +2451,7 @@
                   literal: null @28
                   staticType: Null
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -2428,7 +2460,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -2488,22 +2520,22 @@
                 staticType: null
               element: <testLibrary>::@getter::b
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F3 hasInitializer b (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F3 hasInitializer isOriginDeclaration b (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             NullLiteral
               literal: null @26
               staticType: Null
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::b
   typeAliases
     F
@@ -2526,7 +2558,7 @@
           element: <testLibrary>::@getter::b
       aliasedType: void Function()
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: dynamic
@@ -2534,7 +2566,7 @@
         fragment: #F2
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F3
       type: dynamic
@@ -2543,12 +2575,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F5
       returnType: dynamic
@@ -2590,17 +2622,17 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @32
               staticType: int
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -2609,7 +2641,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: int
@@ -2632,14 +2664,14 @@
         #F1 F (nameOffset:22) (firstTokenOffset:14) (offset:22)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   typeAliases
     F
@@ -2647,7 +2679,7 @@
       firstFragment: #F1
       aliasedType: void Function(int)
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: int
@@ -2656,7 +2688,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
@@ -2679,14 +2711,14 @@
         #F1 F (nameOffset:22) (firstTokenOffset:14) (offset:22)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   typeAliases
     F
@@ -2694,7 +2726,7 @@
       firstFragment: #F1
       aliasedType: void Function(int Function(int))
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: int
@@ -2703,7 +2735,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
@@ -2726,14 +2758,14 @@
         #F1 F (nameOffset:22) (firstTokenOffset:14) (offset:22)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 42 @10
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   typeAliases
     F
@@ -2741,7 +2773,7 @@
       firstFragment: #F1
       aliasedType: void Function<T>(int)
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: int
@@ -2750,7 +2782,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
@@ -2770,7 +2802,7 @@
         #F1 class C (nameOffset:21) (firstTokenOffset:8) (offset:21)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       functions
@@ -2784,7 +2816,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   functions
@@ -2895,17 +2927,17 @@
     #F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:11)
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @24
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -2914,7 +2946,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -2936,14 +2968,14 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginGetterSetter m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@field::m
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 m (nameOffset:33) (firstTokenOffset:26) (offset:33)
+            #F4 isOriginDeclaration m (nameOffset:33) (firstTokenOffset:26) (offset:33)
               element: <testLibrary>::@class::C::@getter::m
               metadata
                 Annotation
@@ -2954,31 +2986,31 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
       topLevelVariables
-        #F5 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F5 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic m
+        synthetic isOriginGetterSetter m
           reference: <testLibrary>::@class::C::@field::m
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::m
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        m
+        isOriginDeclaration m
           reference: <testLibrary>::@class::C::@getter::m
           firstFragment: #F4
           metadata
@@ -2992,7 +3024,7 @@
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::m
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F5
       type: dynamic
@@ -3001,7 +3033,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F6
       returnType: dynamic
@@ -3029,7 +3061,7 @@
         #F1 class C (nameOffset:38) (firstTokenOffset:32) (offset:38)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -3051,29 +3083,29 @@
                     staticType: null
                   element: <testLibrary>::@getter::b
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F5 hasInitializer b (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F5 hasInitializer isOriginDeclaration b (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             NullLiteral
               literal: null @26
               staticType: Null
       getters
-        #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::b
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -3097,7 +3129,7 @@
               element: <testLibrary>::@getter::b
           returnType: dynamic
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
       type: dynamic
@@ -3105,7 +3137,7 @@
         fragment: #F4
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F5
       type: dynamic
@@ -3114,12 +3146,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F6
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F7
       returnType: dynamic
@@ -3165,22 +3197,22 @@
                     staticType: null
                   element: <testLibrary>::@getter::b
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F4 hasInitializer b (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F4 hasInitializer isOriginDeclaration b (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             NullLiteral
               literal: null @26
               staticType: Null
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F6 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F6 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::b
   mixins
     mixin M
@@ -3209,7 +3241,7 @@
               element: <testLibrary>::@getter::b
           returnType: dynamic
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: dynamic
@@ -3217,7 +3249,7 @@
         fragment: #F3
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F4
       type: dynamic
@@ -3226,12 +3258,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F6
       returnType: dynamic
@@ -3257,14 +3289,14 @@
         #F1 class C (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginGetterSetter m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@field::m
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 m (nameOffset:37) (firstTokenOffset:28) (offset:37)
+            #F4 isOriginDeclaration m (nameOffset:37) (firstTokenOffset:28) (offset:37)
               element: <testLibrary>::@class::C::@setter::m
               metadata
                 Annotation
@@ -3278,31 +3310,31 @@
                 #F5 requiredPositional value (nameOffset:39) (firstTokenOffset:39) (offset:39)
                   element: <testLibrary>::@class::C::@setter::m::@formalParameter::value
       topLevelVariables
-        #F6 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F6 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic m
+        synthetic isOriginGetterSetter m
           reference: <testLibrary>::@class::C::@field::m
           firstFragment: #F2
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::m
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        m
+        isOriginDeclaration m
           reference: <testLibrary>::@class::C::@setter::m
           firstFragment: #F4
           metadata
@@ -3320,7 +3352,7 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::m
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F6
       type: dynamic
@@ -3329,7 +3361,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F7
       returnType: dynamic
@@ -3369,14 +3401,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
           fields
-            #F3 hasInitializer foo (nameOffset:54) (firstTokenOffset:54) (offset:54)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:54) (firstTokenOffset:54) (offset:54)
               element: <testLibrary>::@mixin::M::@field::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 1 @60
                   staticType: int
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@mixin::M::@getter::foo
           methods
             #F5 bar (nameOffset:77) (firstTokenOffset:65) (offset:77)
@@ -3390,14 +3422,14 @@
                     staticType: null
                   element: <testLibrary>::@mixin::M::@getter::foo
       topLevelVariables
-        #F6 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F6 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_1
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   mixins
     mixin M
@@ -3417,7 +3449,7 @@
       superclassConstraints
         Object
       fields
-        static const hasInitializer foo
+        static const hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F3
           type: int
@@ -3426,7 +3458,7 @@
             expression: expression_0
           getter: <testLibrary>::@mixin::M::@getter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@mixin::M::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -3445,7 +3477,7 @@
               element: <testLibrary>::@mixin::M::@getter::foo
           returnType: void
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F6
       type: int
@@ -3454,7 +3486,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F7
       returnType: int
@@ -3479,22 +3511,22 @@
         #F1 mixin M (nameOffset:44) (firstTokenOffset:32) (offset:44)
           element: <testLibrary>::@mixin::M
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F3 hasInitializer b (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F3 hasInitializer isOriginDeclaration b (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::b
           initializer: expression_1
             NullLiteral
               literal: null @26
               staticType: Null
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::b
   mixins
     mixin M
@@ -3503,7 +3535,7 @@
       superclassConstraints
         Object
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: dynamic
@@ -3511,7 +3543,7 @@
         fragment: #F2
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    const hasInitializer b
+    const hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F3
       type: dynamic
@@ -3520,12 +3552,12 @@
         expression: expression_1
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F5
       returnType: dynamic
@@ -3561,18 +3593,18 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       topLevelVariables
-        #F4 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F4 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class A
@@ -3590,11 +3622,11 @@
                 staticType: null
               element: <testLibrary>::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F4
       type: int
@@ -3603,7 +3635,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F5
       returnType: int
@@ -3630,7 +3662,7 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:28) (offset:35)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:35)
               element: <testLibrary>::@class::A::@constructor::new
               metadata
                 Annotation
@@ -3654,21 +3686,21 @@
                         staticType: null
                       element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F4 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F4 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           metadata
@@ -3692,7 +3724,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F4
       type: int
@@ -3701,7 +3733,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F5
       returnType: int
@@ -3728,14 +3760,14 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic getter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginGetterSetter getter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@field::getter
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 getter (nameOffset:43) (firstTokenOffset:28) (offset:43)
+            #F4 isOriginDeclaration getter (nameOffset:43) (firstTokenOffset:28) (offset:43)
               element: <testLibrary>::@class::A::@getter::getter
               metadata
                 Annotation
@@ -3746,31 +3778,31 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F5 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F5 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic getter
+        synthetic isOriginGetterSetter getter
           reference: <testLibrary>::@class::A::@field::getter
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::getter
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        getter
+        isOriginDeclaration getter
           reference: <testLibrary>::@class::A::@getter::getter
           firstFragment: #F4
           metadata
@@ -3784,7 +3816,7 @@
           returnType: int
           variable: <testLibrary>::@class::A::@field::getter
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F5
       type: int
@@ -3793,7 +3825,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F6
       returnType: int
@@ -3820,7 +3852,7 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -3857,21 +3889,21 @@
                         staticType: null
                       element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F6 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F6 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -3911,7 +3943,7 @@
                   element: <testLibrary>::@getter::foo
           returnType: void
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F6
       type: int
@@ -3920,7 +3952,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F7
       returnType: int
@@ -3947,14 +3979,14 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic setter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginGetterSetter setter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@field::setter
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F4 setter (nameOffset:39) (firstTokenOffset:28) (offset:39)
+            #F4 isOriginDeclaration setter (nameOffset:39) (firstTokenOffset:28) (offset:39)
               element: <testLibrary>::@class::A::@setter::setter
               metadata
                 Annotation
@@ -3976,31 +4008,31 @@
                         staticType: null
                       element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F6 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F6 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic setter
+        synthetic isOriginGetterSetter setter
           reference: <testLibrary>::@class::A::@field::setter
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::setter
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        setter
+        isOriginDeclaration setter
           reference: <testLibrary>::@class::A::@setter::setter
           firstFragment: #F4
           metadata
@@ -4026,7 +4058,7 @@
           returnType: void
           variable: <testLibrary>::@class::A::@field::setter
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F6
       type: int
@@ -4035,7 +4067,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F7
       returnType: int
@@ -4063,7 +4095,7 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:50) (firstTokenOffset:39) (offset:50)
@@ -4080,28 +4112,28 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F5 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
         #F6 mixin M (nameOffset:33) (firstTokenOffset:27) (offset:33)
           element: <testLibrary>::@mixin::M
       topLevelVariables
-        #F7 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F8 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class alias B
@@ -4122,7 +4154,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           constantInitializers
@@ -4140,7 +4172,7 @@
       superclassConstraints
         Object
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F7
       type: int
@@ -4149,7 +4181,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F8
       returnType: int
@@ -4178,8 +4210,16 @@
         #F1 enum E (nameOffset:26) (firstTokenOffset:16) (offset:26)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer e1 (nameOffset:37) (firstTokenOffset:32) (offset:37)
+            #F2 hasInitializer isOriginDeclaration e1 (nameOffset:37) (firstTokenOffset:32) (offset:37)
               element: <testLibrary>::@enum::E::@field::e1
+              metadata
+                Annotation
+                  atSign: @ @32
+                  name: SimpleIdentifier
+                    token: foo @33
+                    element: <testLibrary>::@getter::foo
+                    staticType: null
+                  element: <testLibrary>::@getter::foo
               initializer: expression_0
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -4192,7 +4232,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer e2 (nameOffset:43) (firstTokenOffset:43) (offset:43)
+            #F3 hasInitializer isOriginDeclaration e2 (nameOffset:43) (firstTokenOffset:43) (offset:43)
               element: <testLibrary>::@enum::E::@field::e2
               initializer: expression_1
                 InstanceCreationExpression
@@ -4206,8 +4246,16 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 hasInitializer e3 (nameOffset:54) (firstTokenOffset:49) (offset:54)
+            #F4 hasInitializer isOriginDeclaration e3 (nameOffset:54) (firstTokenOffset:49) (offset:54)
               element: <testLibrary>::@enum::E::@field::e3
+              metadata
+                Annotation
+                  atSign: @ @49
+                  name: SimpleIdentifier
+                    token: foo @50
+                    element: <testLibrary>::@getter::foo
+                    staticType: null
+                  element: <testLibrary>::@getter::foo
               initializer: expression_2
                 InstanceCreationExpression
                   constructorName: ConstructorName
@@ -4220,7 +4268,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -4241,27 +4289,27 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic e1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F7 synthetic isOriginVariable e1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@enum::E::@getter::e1
-            #F8 synthetic e2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F8 synthetic isOriginVariable e2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@enum::E::@getter::e2
-            #F9 synthetic e3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F9 synthetic isOriginVariable e3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@enum::E::@getter::e3
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F11 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F11 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_4
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F12 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F12 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   enums
     enum E
@@ -4269,15 +4317,23 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer e1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration e1
           reference: <testLibrary>::@enum::E::@field::e1
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @32
+              name: SimpleIdentifier
+                token: foo @33
+                element: <testLibrary>::@getter::foo
+                staticType: null
+              element: <testLibrary>::@getter::foo
           type: E
           constantInitializer
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::e1
-        static const enumConstant hasInitializer e2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration e2
           reference: <testLibrary>::@enum::E::@field::e2
           firstFragment: #F3
           type: E
@@ -4285,15 +4341,23 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::e2
-        static const enumConstant hasInitializer e3
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration e3
           reference: <testLibrary>::@enum::E::@field::e3
           firstFragment: #F4
+          metadata
+            Annotation
+              atSign: @ @49
+              name: SimpleIdentifier
+                token: foo @50
+                element: <testLibrary>::@getter::foo
+                staticType: null
+              element: <testLibrary>::@getter::foo
           type: E
           constantInitializer
             fragment: #F4
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::e3
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -4302,32 +4366,32 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static e1
+        synthetic static isOriginVariable e1
           reference: <testLibrary>::@enum::E::@getter::e1
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::e1
-        synthetic static e2
+        synthetic static isOriginVariable e2
           reference: <testLibrary>::@enum::E::@getter::e2
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::e2
-        synthetic static e3
+        synthetic static isOriginVariable e3
           reference: <testLibrary>::@enum::E::@getter::e3
           firstFragment: #F9
           returnType: E
           variable: <testLibrary>::@enum::E::@field::e3
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F11
       type: int
@@ -4336,7 +4400,7 @@
         expression: expression_4
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F12
       returnType: int
@@ -4372,14 +4436,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F3 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   extensions
     extension E
@@ -4399,7 +4463,7 @@
       extendedType: List<T>
       onDeclaration: dart:core::@class::List
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F3
       type: int
@@ -4408,7 +4472,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
@@ -4441,95 +4505,143 @@
         #F1 class A (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer isStatic (nameOffset:42) (firstTokenOffset:42) (offset:42)
+            #F2 hasInitializer isOriginDeclaration isStatic (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: <testLibrary>::@class::A::@field::isStatic
-            #F3 hasInitializer isStaticConst (nameOffset:79) (firstTokenOffset:79) (offset:79)
+              metadata
+                Annotation
+                  atSign: @ @28
+                  name: SimpleIdentifier
+                    token: foo @29
+                    element: <testLibrary>::@getter::foo
+                    staticType: null
+                  element: <testLibrary>::@getter::foo
+            #F3 hasInitializer isOriginDeclaration isStaticConst (nameOffset:79) (firstTokenOffset:79) (offset:79)
               element: <testLibrary>::@class::A::@field::isStaticConst
+              metadata
+                Annotation
+                  atSign: @ @59
+                  name: SimpleIdentifier
+                    token: foo @60
+                    element: <testLibrary>::@getter::foo
+                    staticType: null
+                  element: <testLibrary>::@getter::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 2 @95
                   staticType: int
-            #F4 hasInitializer isInstance (nameOffset:112) (firstTokenOffset:112) (offset:112)
+            #F4 hasInitializer isOriginDeclaration isInstance (nameOffset:112) (firstTokenOffset:112) (offset:112)
               element: <testLibrary>::@class::A::@field::isInstance
+              metadata
+                Annotation
+                  atSign: @ @101
+                  name: SimpleIdentifier
+                    token: foo @102
+                    element: <testLibrary>::@getter::foo
+                    staticType: null
+                  element: <testLibrary>::@getter::foo
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic isStatic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F6 synthetic isOriginVariable isStatic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::A::@getter::isStatic
-            #F7 synthetic isStaticConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
+            #F7 synthetic isOriginVariable isStaticConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:79)
               element: <testLibrary>::@class::A::@getter::isStaticConst
-            #F8 synthetic isInstance (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
+            #F8 synthetic isOriginVariable isInstance (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
               element: <testLibrary>::@class::A::@getter::isInstance
           setters
-            #F9 synthetic isStatic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F9 synthetic isOriginVariable isStatic (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::A::@setter::isStatic
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
                   element: <testLibrary>::@class::A::@setter::isStatic::@formalParameter::value
-            #F11 synthetic isInstance (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
+            #F11 synthetic isOriginVariable isInstance (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
               element: <testLibrary>::@class::A::@setter::isInstance
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:112)
                   element: <testLibrary>::@class::A::@setter::isInstance::@formalParameter::value
       topLevelVariables
-        #F13 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F13 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_1
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F14 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F14 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
     hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static hasInitializer isStatic
+        static hasImplicitType hasInitializer isOriginDeclaration isStatic
           reference: <testLibrary>::@class::A::@field::isStatic
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @28
+              name: SimpleIdentifier
+                token: foo @29
+                element: <testLibrary>::@getter::foo
+                staticType: null
+              element: <testLibrary>::@getter::foo
           type: int
           getter: <testLibrary>::@class::A::@getter::isStatic
           setter: <testLibrary>::@class::A::@setter::isStatic
-        static const hasInitializer isStaticConst
+        static const hasImplicitType hasInitializer isOriginDeclaration isStaticConst
           reference: <testLibrary>::@class::A::@field::isStaticConst
           firstFragment: #F3
+          metadata
+            Annotation
+              atSign: @ @59
+              name: SimpleIdentifier
+                token: foo @60
+                element: <testLibrary>::@getter::foo
+                staticType: null
+              element: <testLibrary>::@getter::foo
           type: int
           constantInitializer
             fragment: #F3
             expression: expression_0
           getter: <testLibrary>::@class::A::@getter::isStaticConst
-        hasInitializer isInstance
+        hasImplicitType hasInitializer isOriginDeclaration isInstance
           reference: <testLibrary>::@class::A::@field::isInstance
           firstFragment: #F4
+          metadata
+            Annotation
+              atSign: @ @101
+              name: SimpleIdentifier
+                token: foo @102
+                element: <testLibrary>::@getter::foo
+                staticType: null
+              element: <testLibrary>::@getter::foo
           type: int
           getter: <testLibrary>::@class::A::@getter::isInstance
           setter: <testLibrary>::@class::A::@setter::isInstance
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static isStatic
+        synthetic static isOriginVariable isStatic
           reference: <testLibrary>::@class::A::@getter::isStatic
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::isStatic
-        synthetic static isStaticConst
+        synthetic static isOriginVariable isStaticConst
           reference: <testLibrary>::@class::A::@getter::isStaticConst
           firstFragment: #F7
           returnType: int
           variable: <testLibrary>::@class::A::@field::isStaticConst
-        synthetic isInstance
+        synthetic isOriginVariable isInstance
           reference: <testLibrary>::@class::A::@getter::isInstance
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@class::A::@field::isInstance
       setters
-        synthetic static isStatic
+        synthetic static isOriginVariable isStatic
           reference: <testLibrary>::@class::A::@setter::isStatic
           firstFragment: #F9
           formalParameters
@@ -4538,7 +4650,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::isStatic
-        synthetic isInstance
+        synthetic isOriginVariable isInstance
           reference: <testLibrary>::@class::A::@setter::isInstance
           firstFragment: #F11
           formalParameters
@@ -4548,7 +4660,7 @@
           returnType: void
           variable: <testLibrary>::@class::A::@field::isInstance
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F13
       type: int
@@ -4557,7 +4669,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F14
       returnType: int
@@ -4590,17 +4702,17 @@
     #F0 <testLibraryFragment> (nameOffset:<null>) (firstTokenOffset:0) (offset:37)
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:52) (firstTokenOffset:52) (offset:52)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:52) (firstTokenOffset:52) (offset:52)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @58
               staticType: int
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -4609,7 +4721,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -4645,14 +4757,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F3 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   mixins
     mixin A
@@ -4672,7 +4784,7 @@
       superclassConstraints
         Object
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F3
       type: int
@@ -4681,7 +4793,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
@@ -4725,14 +4837,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F3 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   typeAliases
     F
@@ -4759,7 +4871,7 @@
               element: <testLibrary>::@getter::foo
       aliasedType: void Function(int)
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F3
       type: int
@@ -4768,7 +4880,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
@@ -4812,14 +4924,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
       topLevelVariables
-        #F3 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   typeAliases
     A
@@ -4846,7 +4958,7 @@
               element: <testLibrary>::@getter::foo
       aliasedType: void Function<U>(int)
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F3
       type: int
@@ -4855,7 +4967,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
@@ -4917,14 +5029,14 @@
               element: <testLibrary>::@getter::foo
           unit: #F2
       topLevelVariables
-        #F3 hasInitializer foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
+        #F3 hasInitializer isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @71
               staticType: int
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
           element: <testLibrary>::@getter::foo
     #F1 package:test/a.dart
       element: <testLibrary>
@@ -4936,7 +5048,7 @@
       enclosingFragment: #F0
       previousFragment: #F1
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F3
       type: int
@@ -4945,7 +5057,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
@@ -4967,14 +5079,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
       functions
         #F3 f (nameOffset:26) (firstTokenOffset:16) (offset:26)
@@ -5014,7 +5126,7 @@
                   literal: 42 @51
                   staticType: int
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -5023,7 +5135,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -5084,18 +5196,18 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
-        #F2 synthetic getter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F2 synthetic isOriginGetterSetter getter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@topLevelVariable::getter
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
-        #F4 getter (nameOffset:29) (firstTokenOffset:16) (offset:29)
+        #F4 isOriginDeclaration getter (nameOffset:29) (firstTokenOffset:16) (offset:29)
           element: <testLibrary>::@getter::getter
           metadata
             Annotation
@@ -5106,7 +5218,7 @@
                 staticType: null
               element: <testLibrary>::@getter::foo
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -5114,18 +5226,18 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::foo
-    synthetic getter
+    synthetic isOriginGetterSetter getter
       reference: <testLibrary>::@topLevelVariable::getter
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::getter
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
-    static getter
+    static isOriginDeclaration getter
       reference: <testLibrary>::@getter::getter
       firstFragment: #F4
       metadata
@@ -5155,19 +5267,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
-        #F2 synthetic setter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F2 synthetic isOriginGetterSetter setter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@topLevelVariable::setter
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
       setters
-        #F4 setter (nameOffset:25) (firstTokenOffset:16) (offset:25)
+        #F4 isOriginDeclaration setter (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@setter::setter
           metadata
             Annotation
@@ -5189,7 +5301,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::foo
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -5197,19 +5309,19 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::foo
-    synthetic setter
+    synthetic isOriginGetterSetter setter
       reference: <testLibrary>::@topLevelVariable::setter
       firstFragment: #F2
       type: int
       setter: <testLibrary>::@setter::setter
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static setter
+    static isOriginDeclaration setter
       reference: <testLibrary>::@setter::setter
       firstFragment: #F4
       metadata
@@ -5254,13 +5366,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @12
               staticType: int
-        #F2 hasInitializer isNotConst (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 hasInitializer isOriginDeclaration isNotConst (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::isNotConst
           metadata
             Annotation
@@ -5270,7 +5382,7 @@
                 element: <testLibrary>::@getter::foo
                 staticType: null
               element: <testLibrary>::@getter::foo
-        #F3 hasInitializer isConst (nameOffset:53) (firstTokenOffset:53) (offset:53)
+        #F3 hasInitializer isOriginDeclaration isConst (nameOffset:53) (firstTokenOffset:53) (offset:53)
           element: <testLibrary>::@topLevelVariable::isConst
           metadata
             Annotation
@@ -5285,20 +5397,20 @@
               literal: 2 @63
               staticType: int
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
-        #F5 synthetic isNotConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F5 synthetic isOriginVariable isNotConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::isNotConst
-        #F6 synthetic isConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F6 synthetic isOriginVariable isConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@getter::isConst
       setters
-        #F7 synthetic isNotConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F7 synthetic isOriginVariable isNotConst (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::isNotConst
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::isNotConst::@formalParameter::value
   topLevelVariables
-    const hasInitializer foo
+    const hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -5306,7 +5418,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::foo
-    hasInitializer isNotConst
+    hasImplicitType hasInitializer isOriginDeclaration isNotConst
       reference: <testLibrary>::@topLevelVariable::isNotConst
       firstFragment: #F2
       metadata
@@ -5320,7 +5432,7 @@
       type: int
       getter: <testLibrary>::@getter::isNotConst
       setter: <testLibrary>::@setter::isNotConst
-    const hasInitializer isConst
+    const hasImplicitType hasInitializer isOriginDeclaration isConst
       reference: <testLibrary>::@topLevelVariable::isConst
       firstFragment: #F3
       metadata
@@ -5337,23 +5449,23 @@
         expression: expression_1
       getter: <testLibrary>::@getter::isConst
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
-    synthetic static isNotConst
+    synthetic static isOriginVariable isNotConst
       reference: <testLibrary>::@getter::isNotConst
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::isNotConst
-    synthetic static isConst
+    synthetic static isOriginVariable isConst
       reference: <testLibrary>::@getter::isConst
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::isConst
   setters
-    synthetic static isNotConst
+    synthetic static isOriginVariable isNotConst
       reference: <testLibrary>::@setter::isNotConst
       firstFragment: #F7
       formalParameters
@@ -5405,21 +5517,21 @@
               element: <testLibrary>::@getter::a
           unit: #F1
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @30
               staticType: int
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::a
     #F1 package:test/foo.dart
       element: <testLibrary>
       enclosingFragment: #F0
       previousFragment: #F0
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: int
@@ -5428,7 +5540,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
@@ -5465,21 +5577,21 @@
               element: <testLibrary>::@getter::a
           unit: #F1
       topLevelVariables
-        #F2 hasInitializer a (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F2 hasInitializer isOriginDeclaration a (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @41
               staticType: Null
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::a
     #F1 package:test/foo.dart
       element: <testLibrary>
       enclosingFragment: #F0
       previousFragment: #F0
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F2
       type: dynamic
@@ -5488,7 +5600,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
@@ -5542,7 +5654,7 @@
         #F2 class A (nameOffset:39) (firstTokenOffset:21) (offset:39)
           element: <testLibrary>::@class::A
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -5550,7 +5662,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -5702,7 +5814,7 @@
         #F1 class C (nameOffset:33) (firstTokenOffset:22) (offset:33)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -5710,7 +5822,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -5725,14 +5837,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       functions
         #F3 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
@@ -5749,7 +5861,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -5758,7 +5870,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -5801,7 +5913,7 @@
         #F1 class C (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -5819,21 +5931,21 @@
                         staticType: null
                       element: <testLibrary>::@getter::a
       topLevelVariables
-        #F5 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F5 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -5854,7 +5966,7 @@
                   element: <testLibrary>::@getter::a
           returnType: dynamic
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F5
       type: dynamic
@@ -5863,7 +5975,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F6
       returnType: dynamic
@@ -5884,19 +5996,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       setters
-        #F4 foo (nameOffset:21) (firstTokenOffset:17) (offset:21)
+        #F4 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:17) (offset:21)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional x (nameOffset:32) (firstTokenOffset:25) (offset:32)
@@ -5910,7 +6022,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -5918,19 +6030,19 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F2
       type: int
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F4
       formalParameters
@@ -5959,14 +6071,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       functions
         #F3 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
@@ -5987,7 +6099,7 @@
                   literal: null @26
                   staticType: Null
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -5996,7 +6108,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -6046,7 +6158,7 @@
         #F1 class A (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:29) (offset:29)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 29
@@ -6056,7 +6168,7 @@
         #F4 class B (nameOffset:48) (firstTokenOffset:42) (offset:48)
           element: <testLibrary>::@class::B
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:64) (offset:64)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:64) (offset:64)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               typeNameOffset: 64
@@ -6072,21 +6184,21 @@
                         staticType: null
                       element: <testLibrary>::@getter::a
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -6098,7 +6210,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -6116,7 +6228,7 @@
               superConstructorParameter: <testLibrary>::@class::A::@constructor::new::@formalParameter::x
           superConstructor: <testLibrary>::@class::A::@constructor::new
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: dynamic
@@ -6125,7 +6237,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F8
       returnType: dynamic
@@ -6142,13 +6254,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
-        #F2 v (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F2 isOriginDeclaration v (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::v
           metadata
             Annotation
@@ -6159,18 +6271,18 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::v
       setters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@setter::v
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -6178,7 +6290,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    v
+    isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F2
       metadata
@@ -6193,18 +6305,18 @@
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F5
       formalParameters
@@ -6239,18 +6351,18 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class C
@@ -6268,11 +6380,11 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
       type: dynamic
@@ -6281,7 +6393,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
@@ -6316,30 +6428,30 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F3 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class D (nameOffset:48) (firstTokenOffset:42) (offset:48)
           element: <testLibrary>::@class::D
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
         #F6 class E (nameOffset:59) (firstTokenOffset:53) (offset:59)
           element: <testLibrary>::@class::E
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::E::@constructor::new
               typeName: E
       topLevelVariables
-        #F8 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F8 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
     class alias C
@@ -6360,7 +6472,7 @@
       mixins
         E
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           constantInitializers
@@ -6375,18 +6487,18 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
     class E
       reference: <testLibrary>::@class::E
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::E::@constructor::new
           firstFragment: #F7
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F8
       type: dynamic
@@ -6395,7 +6507,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F9
       returnType: dynamic
@@ -6412,14 +6524,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
       functions
         #F3 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
@@ -6436,7 +6548,7 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
@@ -6445,7 +6557,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
@@ -6492,14 +6604,14 @@
                     staticType: null
                   element: <testLibrary>::@getter::a
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             NullLiteral
               literal: null @10
               staticType: Null
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   typeAliases
     F
@@ -6518,7 +6630,7 @@
               element: <testLibrary>::@getter::a
       aliasedType: dynamic Function()
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: dynamic
@@ -6527,7 +6639,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
@@ -6552,13 +6664,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
-        #F2 hasInitializer x (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F2 hasInitializer isOriginDeclaration x (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::x
           metadata
             Annotation
@@ -6569,18 +6681,18 @@
                 staticType: null
               element: <testLibrary>::@getter::a
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::x
       setters
-        #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@setter::x
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    const hasInitializer a
+    const hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
@@ -6588,7 +6700,7 @@
         fragment: #F1
         expression: expression_0
       getter: <testLibrary>::@getter::a
-    hasInitializer x
+    hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F2
       metadata
@@ -6603,18 +6715,18 @@
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F5
       formalParameters
@@ -6644,23 +6756,23 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::x
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @29
                   staticType: int
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class C (nameOffset:45) (firstTokenOffset:34) (offset:45)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -6668,7 +6780,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static const hasInitializer x
+        static const hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
@@ -6677,11 +6789,11 @@
             expression: expression_0
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -6690,7 +6802,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
 ''');
@@ -6712,14 +6824,14 @@
         #F1 class C (nameOffset:28) (firstTokenOffset:17) (offset:28)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       enums
         #F3 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F4 hasInitializer a (nameOffset:8) (firstTokenOffset:8) (offset:8)
+            #F4 hasInitializer isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -6733,7 +6845,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 hasInitializer b (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F5 hasInitializer isOriginDeclaration b (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -6747,7 +6859,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F6 hasInitializer c (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F6 hasInitializer isOriginDeclaration c (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::c
               initializer: expression_2
                 InstanceCreationExpression
@@ -6761,7 +6873,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F7 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_3
                 ListLiteral
@@ -6782,24 +6894,24 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+            #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@enum::E::@getter::a
-            #F10 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F10 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::b
-            #F11 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F11 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::c
-            #F12 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F12 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   enums
@@ -6808,7 +6920,7 @@
       firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F4
           type: E
@@ -6816,7 +6928,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F5
           type: E
@@ -6824,7 +6936,7 @@
             fragment: #F5
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        static const enumConstant hasInitializer c
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@enum::E::@field::c
           firstFragment: #F6
           type: E
@@ -6832,7 +6944,7 @@
             fragment: #F6
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::c
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F7
           type: List<E>
@@ -6841,26 +6953,26 @@
             expression: expression_3
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F9
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F10
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static c
+        synthetic static isOriginVariable c
           reference: <testLibrary>::@enum::E::@getter::c
           firstFragment: #F11
           returnType: E
           variable: <testLibrary>::@enum::E::@field::c
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F12
           returnType: List<E>
@@ -6886,28 +6998,28 @@
         #F1 class C (nameOffset:56) (firstTokenOffset:45) (offset:56)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       extensions
         #F3 extension E (nameOffset:10) (firstTokenOffset:0) (offset:10)
           element: <testLibrary>::@extension::E
           fields
-            #F4 hasInitializer x (nameOffset:36) (firstTokenOffset:36) (offset:36)
+            #F4 hasInitializer isOriginDeclaration x (nameOffset:36) (firstTokenOffset:36) (offset:36)
               element: <testLibrary>::@extension::E::@field::x
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @40
                   staticType: int
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@extension::E::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   extensions
@@ -6917,7 +7029,7 @@
       extendedType: int
       onDeclaration: dart:core::@class::int
       fields
-        static const hasInitializer x
+        static const hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@extension::E::@field::x
           firstFragment: #F4
           type: int
@@ -6926,7 +7038,7 @@
             expression: expression_0
           getter: <testLibrary>::@extension::E::@getter::x
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@extension::E::@getter::x
           firstFragment: #F5
           returnType: int
@@ -6951,14 +7063,22 @@
         #F1 extension <null-name> (nameOffset:<null>) (firstTokenOffset:0) (offset:0)
           element: <testLibrary>::@extension::0
           fields
-            #F2 hasInitializer foo (nameOffset:44) (firstTokenOffset:44) (offset:44)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:44) (firstTokenOffset:44) (offset:44)
               element: <testLibrary>::@extension::0::@field::foo
+              metadata
+                Annotation
+                  atSign: @ @24
+                  name: SimpleIdentifier
+                    token: foo @25
+                    element: <testLibrary>::@extension::0::@getter::foo
+                    staticType: null
+                  element: <testLibrary>::@extension::0::@getter::foo
               initializer: expression_0
                 IntegerLiteral
                   literal: 0 @50
                   staticType: int
           getters
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@extension::0::@getter::foo
   extensions
     extension <null-name>
@@ -6967,16 +7087,24 @@
       extendedType: Object
       onDeclaration: dart:core::@class::Object
       fields
-        static const hasInitializer foo
+        static const hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@extension::0::@field::foo
           firstFragment: #F2
+          metadata
+            Annotation
+              atSign: @ @24
+              name: SimpleIdentifier
+                token: foo @25
+                element: <testLibrary>::@extension::0::@getter::foo
+                staticType: null
+              element: <testLibrary>::@extension::0::@getter::foo
           type: int
           constantInitializer
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@extension::0::@getter::foo
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@extension::0::@getter::foo
           firstFragment: #F3
           returnType: int
@@ -7010,7 +7138,7 @@
         #F1 class C (nameOffset:41) (firstTokenOffset:26) (offset:41)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7018,7 +7146,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7043,7 +7171,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -7053,7 +7181,7 @@
         #F4 class C (nameOffset:43) (firstTokenOffset:27) (offset:43)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7061,7 +7189,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -7072,7 +7200,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -7097,7 +7225,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:18)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 18
@@ -7107,7 +7235,7 @@
         #F4 class C (nameOffset:42) (firstTokenOffset:27) (offset:42)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7115,7 +7243,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -7126,7 +7254,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
 ''');
@@ -7144,7 +7272,7 @@
         #F1 class C (nameOffset:17) (firstTokenOffset:0) (offset:17)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7152,7 +7280,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7170,7 +7298,7 @@
         #F1 class C (nameOffset:20) (firstTokenOffset:0) (offset:20)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7178,7 +7306,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7196,7 +7324,7 @@
         #F1 class C (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7204,7 +7332,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7229,7 +7357,7 @@
         #F1 class C (nameOffset:43) (firstTokenOffset:28) (offset:43)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7237,7 +7365,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7255,7 +7383,7 @@
         #F1 class C (nameOffset:21) (firstTokenOffset:0) (offset:21)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7263,7 +7391,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7288,7 +7416,7 @@
         #F1 class C (nameOffset:49) (firstTokenOffset:28) (offset:49)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7296,7 +7424,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7321,7 +7449,7 @@
         #F1 class C (nameOffset:52) (firstTokenOffset:28) (offset:52)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7329,7 +7457,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7347,7 +7475,7 @@
         #F1 class C (nameOffset:17) (firstTokenOffset:0) (offset:17)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7355,7 +7483,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7380,7 +7508,7 @@
         #F1 class C (nameOffset:45) (firstTokenOffset:28) (offset:45)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7388,7 +7516,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7406,7 +7534,7 @@
         #F1 class C (nameOffset:11) (firstTokenOffset:0) (offset:11)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7414,7 +7542,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7445,7 +7573,7 @@
         #F1 class C (nameOffset:44) (firstTokenOffset:35) (offset:44)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7453,7 +7581,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
@@ -7471,7 +7599,7 @@
         #F1 class C (nameOffset:13) (firstTokenOffset:0) (offset:13)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -7479,7 +7607,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
 ''');
diff --git a/pkg/analyzer/test/src/summary/elements/mixin_test.dart b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
index ddbca69..835dd318 100644
--- a/pkg/analyzer/test/src/summary/elements/mixin_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/mixin_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.
 
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -13,9 +11,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MixinElementTest_keepLinking);
-    defineReflectiveTests(MixinElementTest_keepLinking_declaringConstructors);
     defineReflectiveTests(MixinElementTest_fromBytes);
-    defineReflectiveTests(MixinElementTest_fromBytes_declaringConstructors);
     defineReflectiveTests(MixinElementTest_augmentation_fromBytes);
     defineReflectiveTests(MixinElementTest_augmentation_keepLinking);
     defineReflectiveTests(UpdateNodeTextExpectations);
@@ -280,25 +276,25 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:28) (firstTokenOffset:22) (offset:28)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F7 class D (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::D
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       mixins
@@ -310,24 +306,24 @@
             #F11 U (nameOffset:68) (firstTokenOffset:68) (offset:68)
               element: #E1 U
           fields
-            #F12 f (nameOffset:101) (firstTokenOffset:101) (offset:101)
+            #F12 isOriginDeclaration f (nameOffset:101) (firstTokenOffset:101) (offset:101)
               element: <testLibrary>::@mixin::M::@field::f
-            #F13 synthetic g (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F13 synthetic isOriginGetterSetter g (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@mixin::M::@field::g
-            #F14 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F14 synthetic isOriginGetterSetter s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@mixin::M::@field::s
           getters
-            #F15 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+            #F15 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
               element: <testLibrary>::@mixin::M::@getter::f
-            #F16 g (nameOffset:112) (firstTokenOffset:106) (offset:112)
+            #F16 isOriginDeclaration g (nameOffset:112) (firstTokenOffset:106) (offset:112)
               element: <testLibrary>::@mixin::M::@getter::g
           setters
-            #F17 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+            #F17 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
               element: <testLibrary>::@mixin::M::@setter::f
               formalParameters
                 #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
                   element: <testLibrary>::@mixin::M::@setter::f::@formalParameter::value
-            #F19 s (nameOffset:126) (firstTokenOffset:122) (offset:126)
+            #F19 isOriginDeclaration s (nameOffset:126) (firstTokenOffset:122) (offset:126)
               element: <testLibrary>::@mixin::M::@setter::s
               formalParameters
                 #F20 requiredPositional v (nameOffset:132) (firstTokenOffset:128) (offset:132)
@@ -343,28 +339,28 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F8
   mixins
@@ -384,39 +380,39 @@
         C
         D
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@mixin::M::@field::f
           firstFragment: #F12
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@mixin::M::@getter::f
           setter: <testLibrary>::@mixin::M::@setter::f
-        synthetic g
+        synthetic isOriginGetterSetter g
           reference: <testLibrary>::@mixin::M::@field::g
           firstFragment: #F13
           hasEnclosingTypeParameterReference: true
           type: U
           getter: <testLibrary>::@mixin::M::@getter::g
-        synthetic s
+        synthetic isOriginGetterSetter s
           reference: <testLibrary>::@mixin::M::@field::s
           firstFragment: #F14
           type: int
           setter: <testLibrary>::@mixin::M::@setter::s
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@mixin::M::@getter::f
           firstFragment: #F15
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@mixin::M::@field::f
-        g
+        isOriginDeclaration g
           reference: <testLibrary>::@mixin::M::@getter::g
           firstFragment: #F16
           hasEnclosingTypeParameterReference: true
           returnType: U
           variable: <testLibrary>::@mixin::M::@field::g
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@mixin::M::@setter::f
           firstFragment: #F17
           hasEnclosingTypeParameterReference: true
@@ -426,7 +422,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@mixin::M::@field::f
-        s
+        isOriginDeclaration s
           reference: <testLibrary>::@mixin::M::@setter::s
           firstFragment: #F19
           formalParameters
@@ -545,13 +541,13 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 hasInitializer x (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::M::@field::x
           getters
-            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::M::@getter::x
           setters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::M::@setter::x
               formalParameters
                 #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -563,20 +559,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer x
+        hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@mixin::M::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::x
           setter: <testLibrary>::@mixin::M::@setter::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@mixin::M::@getter::x
           firstFragment: #F3
           returnType: int
           variable: <testLibrary>::@mixin::M::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@mixin::M::@setter::x
           firstFragment: #F4
           formalParameters
@@ -603,10 +599,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 hasInitializer x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@mixin::M::@field::x
           getters
-            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@mixin::M::@getter::x
   mixins
     mixin M
@@ -615,13 +611,13 @@
       superclassConstraints
         Object
       fields
-        final hasInitializer x
+        final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@mixin::M::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::x
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@mixin::M::@getter::x
           firstFragment: #F3
           returnType: int
@@ -659,10 +655,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           getters
-            #F3 foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
+            #F3 isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
               element: <testLibrary>::@mixin::M::@getter::foo
   mixins
     mixin M
@@ -671,13 +667,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@getter::foo
           firstFragment: #F3
           returnType: int
@@ -703,10 +699,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           getters
-            #F3 foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
+            #F3 isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
               element: <testLibrary>::@mixin::M::@getter::foo
   mixins
     mixin M
@@ -715,13 +711,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@getter::foo
           firstFragment: #F3
           returnType: int
@@ -747,10 +743,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           getters
-            #F3 foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
+            #F3 isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
               element: <testLibrary>::@mixin::M::@getter::foo
   mixins
     mixin M
@@ -759,13 +755,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@getter::foo
           firstFragment: #F3
           returnType: int
@@ -814,13 +810,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
@@ -837,7 +833,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -847,7 +843,7 @@
       mixins
         M<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -888,7 +884,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:20) (firstTokenOffset:14) (offset:20)
@@ -897,13 +893,13 @@
             #F5 T (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: #E1 T
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F6 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F7 class C (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F8 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -914,7 +910,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class alias B
@@ -927,7 +923,7 @@
       mixins
         A<T>
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           constantInitializers
@@ -944,7 +940,7 @@
       mixins
         B<dynamic>
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
           constantInitializers
@@ -986,7 +982,7 @@
             #F2 T (nameOffset:9) (firstTokenOffset:9) (offset:9)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A1::@constructor::new
               typeName: A1
         #F4 class A2 (nameOffset:21) (firstTokenOffset:15) (offset:21)
@@ -995,7 +991,7 @@
             #F5 T (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: #E1 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::A2::@constructor::new
               typeName: A2
         #F7 class B (nameOffset:36) (firstTokenOffset:30) (offset:36)
@@ -1004,19 +1000,19 @@
             #F8 T (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: #E2 T
           constructors
-            #F9 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F9 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F10 class Base (nameOffset:75) (firstTokenOffset:69) (offset:75)
           element: <testLibrary>::@class::Base
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:75)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:75)
               element: <testLibrary>::@class::Base::@constructor::new
               typeName: Base
         #F12 class C (nameOffset:108) (firstTokenOffset:102) (offset:108)
           element: <testLibrary>::@class::C
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
+            #F13 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
   classes
@@ -1027,7 +1023,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A1::@constructor::new
           firstFragment: #F3
     class A2
@@ -1037,7 +1033,7 @@
         #E1 T
           firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A2::@constructor::new
           firstFragment: #F6
     class alias B
@@ -1051,7 +1047,7 @@
         A1<T>
         A2<T>
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
           constantInitializers
@@ -1067,7 +1063,7 @@
       interfaces
         A1<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Base::@constructor::new
           firstFragment: #F11
     class alias C
@@ -1077,7 +1073,7 @@
       mixins
         B<int>
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F13
           constantInitializers
@@ -1110,13 +1106,13 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class C (nameOffset:57) (firstTokenOffset:51) (offset:57)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -1135,7 +1131,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class C
@@ -1145,7 +1141,7 @@
       mixins
         M<int, String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -1184,13 +1180,13 @@
             #F2 T (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class C (nameOffset:57) (firstTokenOffset:51) (offset:57)
           element: <testLibrary>::@class::C
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       mixins
@@ -1207,7 +1203,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class C
@@ -1217,7 +1213,7 @@
       mixins
         M<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -1256,13 +1252,13 @@
             #F2 X (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 X
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
         #F4 class A (nameOffset:66) (firstTokenOffset:60) (offset:66)
           element: <testLibrary>::@class::A
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F5 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -1284,7 +1280,7 @@
         #E0 X
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F3
     class alias A
@@ -1295,7 +1291,7 @@
         M1<int>
         M2<int>
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
           constantInitializers
@@ -1351,13 +1347,13 @@
             #F2 T3 (nameOffset:64) (firstTokenOffset:64) (offset:64)
               element: #E0 T3
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::S::@constructor::new
               typeName: S
         #F4 class X (nameOffset:78) (firstTokenOffset:72) (offset:78)
           element: <testLibrary>::@class::X
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
       mixins
@@ -1382,7 +1378,7 @@
         #E0 T3
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::S::@constructor::new
           firstFragment: #F3
     class X
@@ -1395,7 +1391,7 @@
             typeArguments
               String
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -1448,13 +1444,13 @@
             #F2 T4 (nameOffset:90) (firstTokenOffset:90) (offset:90)
               element: #E0 T4
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
               element: <testLibrary>::@class::S::@constructor::new
               typeName: S
         #F4 class X (nameOffset:104) (firstTokenOffset:98) (offset:104)
           element: <testLibrary>::@class::X
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:104)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
       mixins
@@ -1484,7 +1480,7 @@
         #E0 T4
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::S::@constructor::new
           firstFragment: #F3
     class X
@@ -1497,7 +1493,7 @@
             typeArguments
               String
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -1558,10 +1554,10 @@
         #F3 extension type B (nameOffset:26) (firstTokenOffset:11) (offset:26)
           element: <testLibrary>::@extensionType::B
           fields
-            #F4 it (nameOffset:32) (firstTokenOffset:28) (offset:32)
+            #F4 isOriginDeclaringFormalParameter it (nameOffset:32) (firstTokenOffset:28) (offset:32)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@extensionType::B::@getter::it
       mixins
         #F6 mixin M (nameOffset:56) (firstTokenOffset:50) (offset:56)
@@ -1581,13 +1577,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F5
           returnType: int
@@ -1655,7 +1652,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -1669,7 +1666,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   mixins
@@ -1812,10 +1809,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           setters
-            #F3 foo (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@mixin::M::@setter::foo
               formalParameters
                 #F4 requiredPositional _ (nameOffset:29) (firstTokenOffset:25) (offset:29)
@@ -1827,13 +1824,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@mixin::M::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@setter::foo
           firstFragment: #F3
           formalParameters
@@ -1863,10 +1860,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           setters
-            #F3 foo (nameOffset:21) (firstTokenOffset:17) (offset:21)
+            #F3 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:17) (offset:21)
               element: <testLibrary>::@mixin::M::@setter::foo
               formalParameters
                 #F4 requiredPositional _ (nameOffset:29) (firstTokenOffset:25) (offset:29)
@@ -1878,13 +1875,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@mixin::M::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@setter::foo
           firstFragment: #F3
           formalParameters
@@ -1919,10 +1916,10 @@
         #F3 extension type B (nameOffset:26) (firstTokenOffset:11) (offset:26)
           element: <testLibrary>::@extensionType::B
           fields
-            #F4 it (nameOffset:32) (firstTokenOffset:28) (offset:32)
+            #F4 isOriginDeclaringFormalParameter it (nameOffset:32) (firstTokenOffset:28) (offset:32)
               element: <testLibrary>::@extensionType::B::@field::it
           getters
-            #F5 synthetic it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F5 synthetic isOriginVariable it (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@extensionType::B::@getter::it
       mixins
         #F6 mixin M (nameOffset:56) (firstTokenOffset:50) (offset:56)
@@ -1942,13 +1939,14 @@
       primaryConstructor: <testLibrary>::@extensionType::B::@constructor::new
       typeErasure: int
       fields
-        final it
+        final isOriginDeclaringFormalParameter it
           reference: <testLibrary>::@extensionType::B::@field::it
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@extensionType::B::@getter::it
+          declaringFormalParameter: <testLibrary>::@extensionType::B::@constructor::new::@formalParameter::it
       getters
-        synthetic isExtensionTypeMember it
+        synthetic isExtensionTypeMember isOriginVariable it
           reference: <testLibrary>::@extensionType::B::@getter::it
           firstFragment: #F5
           returnType: int
@@ -2262,14 +2260,14 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2278,7 +2276,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F3
   mixins
@@ -2288,20 +2286,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -2339,14 +2337,14 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2356,7 +2354,7 @@
           previousFragment: #F1
           nextFragment: #F8
           fields
-            #F4 augment hasInitializer foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:60) (offset:60)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F3
               nextFragment: #F9
@@ -2364,7 +2362,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F2
           fields
-            #F9 augment hasInitializer foo (nameOffset:104) (firstTokenOffset:104) (offset:104)
+            #F9 augment hasInitializer isOriginDeclaration foo (nameOffset:104) (firstTokenOffset:104) (offset:104)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F4
   mixins
@@ -2374,20 +2372,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -2425,15 +2423,15 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
               nextFragment: #F6
           setters
-            #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2443,14 +2441,14 @@
           previousFragment: #F1
           nextFragment: #F9
           getters
-            #F6 augment foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
+            #F6 augment isOriginDeclaration foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
               element: <testLibrary>::@mixin::A::@getter::foo
               previousFragment: #F5
         #F9 mixin A (nameOffset:91) (firstTokenOffset:77) (offset:91)
           element: <testLibrary>::@mixin::A
           previousFragment: #F2
           fields
-            #F4 augment hasInitializer foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F3
   mixins
@@ -2460,20 +2458,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -2511,14 +2509,14 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2529,7 +2527,7 @@
           previousFragment: #F1
           nextFragment: #F9
           setters
-            #F8 augment foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
+            #F8 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F10 requiredPositional _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
@@ -2539,7 +2537,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F2
           fields
-            #F4 augment hasInitializer foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:109) (firstTokenOffset:109) (offset:109)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F3
   mixins
@@ -2549,20 +2547,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -2596,14 +2594,14 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2612,7 +2610,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:63) (firstTokenOffset:63) (offset:63)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F3
   mixins
@@ -2622,20 +2620,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -2671,17 +2669,17 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo
               nextFragment: #F4
           getters
-            #F5 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@mixin::A::@getter::foo
         #F2 mixin A (nameOffset:47) (firstTokenOffset:33) (offset:47)
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           fields
-            #F4 augment hasInitializer foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
+            #F4 augment hasInitializer isOriginDeclaration foo (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: <testLibrary>::@mixin::A::@field::foo
               previousFragment: #F3
   mixins
@@ -2691,13 +2689,13 @@
       superclassConstraints
         Object
       fields
-        synthetic hasInitializer foo
+        synthetic hasInitializer isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F5
           returnType: int
@@ -2727,13 +2725,13 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo1 (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo1 (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo1
           getters
-            #F4 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo1
           setters
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo1
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2742,13 +2740,13 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           fields
-            #F7 hasInitializer foo2 (nameOffset:53) (firstTokenOffset:53) (offset:53)
+            #F7 hasInitializer isOriginDeclaration foo2 (nameOffset:53) (firstTokenOffset:53) (offset:53)
               element: <testLibrary>::@mixin::A::@field::foo2
           getters
-            #F8 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F8 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@mixin::A::@getter::foo2
           setters
-            #F9 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F9 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@mixin::A::@setter::foo2
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
@@ -2760,31 +2758,31 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo1
+        hasInitializer isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo1
           setter: <testLibrary>::@mixin::A::@setter::foo1
-        hasInitializer foo2
+        hasInitializer isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F7
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo2
           setter: <testLibrary>::@mixin::A::@setter::foo2
       getters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@mixin::A::@getter::foo1
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@mixin::A::@getter::foo2
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo2
       setters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@mixin::A::@setter::foo1
           firstFragment: #F5
           formalParameters
@@ -2793,7 +2791,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@mixin::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@mixin::A::@setter::foo2
           firstFragment: #F9
           formalParameters
@@ -2831,13 +2829,13 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 foo1 (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F5 isOriginDeclaration foo1 (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@mixin::A::@field::foo1
           getters
-            #F6 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F6 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@mixin::A::@getter::foo1
           setters
-            #F7 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F7 synthetic isOriginVariable foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@mixin::A::@setter::foo1
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -2850,13 +2848,13 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F9 foo2 (nameOffset:51) (firstTokenOffset:51) (offset:51)
+            #F9 isOriginDeclaration foo2 (nameOffset:51) (firstTokenOffset:51) (offset:51)
               element: <testLibrary>::@mixin::A::@field::foo2
           getters
-            #F10 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F10 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@mixin::A::@getter::foo2
           setters
-            #F11 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F11 synthetic isOriginVariable foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@mixin::A::@setter::foo2
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
@@ -2871,14 +2869,14 @@
       superclassConstraints
         Object
       fields
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@mixin::A::@getter::foo1
           setter: <testLibrary>::@mixin::A::@setter::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F9
           hasEnclosingTypeParameterReference: true
@@ -2886,20 +2884,20 @@
           getter: <testLibrary>::@mixin::A::@getter::foo2
           setter: <testLibrary>::@mixin::A::@setter::foo2
       getters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@mixin::A::@getter::foo1
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@mixin::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@mixin::A::@getter::foo2
           firstFragment: #F10
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@mixin::A::@field::foo2
       setters
-        synthetic foo1
+        synthetic isOriginVariable foo1
           reference: <testLibrary>::@mixin::A::@setter::foo1
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
@@ -2909,7 +2907,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@mixin::A::@field::foo1
-        synthetic foo2
+        synthetic isOriginVariable foo2
           reference: <testLibrary>::@mixin::A::@setter::foo2
           firstFragment: #F11
           hasEnclosingTypeParameterReference: true
@@ -2944,19 +2942,19 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo1
           getters
-            #F4 foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@mixin::A::@getter::foo1
         #F2 mixin A (nameOffset:48) (firstTokenOffset:34) (offset:48)
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           fields
-            #F5 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F5 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@mixin::A::@field::foo2
           getters
-            #F6 foo2 (nameOffset:62) (firstTokenOffset:54) (offset:62)
+            #F6 isOriginDeclaration foo2 (nameOffset:62) (firstTokenOffset:54) (offset:62)
               element: <testLibrary>::@mixin::A::@getter::foo2
   mixins
     mixin A
@@ -2965,23 +2963,23 @@
       superclassConstraints
         Object
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo2
       getters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@getter::foo1
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@getter::foo2
           firstFragment: #F6
           returnType: int
@@ -3015,10 +3013,10 @@
               element: #E0 T
               nextFragment: #F4
           fields
-            #F5 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo1
           getters
-            #F6 foo1 (nameOffset:21) (firstTokenOffset:15) (offset:21)
+            #F6 isOriginDeclaration foo1 (nameOffset:21) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@mixin::A::@getter::foo1
         #F2 mixin A (nameOffset:44) (firstTokenOffset:30) (offset:44)
           element: <testLibrary>::@mixin::A
@@ -3028,10 +3026,10 @@
               element: #E0 T
               previousFragment: #F3
           fields
-            #F7 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F7 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@mixin::A::@field::foo2
           getters
-            #F8 foo2 (nameOffset:59) (firstTokenOffset:53) (offset:59)
+            #F8 isOriginDeclaration foo2 (nameOffset:59) (firstTokenOffset:53) (offset:59)
               element: <testLibrary>::@mixin::A::@getter::foo2
   mixins
     mixin A
@@ -3043,26 +3041,26 @@
       superclassConstraints
         Object
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@mixin::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@mixin::A::@getter::foo2
       getters
-        abstract foo1
+        abstract isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@getter::foo1
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@mixin::A::@field::foo1
-        abstract foo2
+        abstract isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@getter::foo2
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
@@ -3093,14 +3091,14 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
               nextFragment: #F5
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -3109,7 +3107,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           getters
-            #F5 augment foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
+            #F5 augment isOriginDeclaration foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
               element: <testLibrary>::@mixin::A::@getter::foo
               previousFragment: #F4
   mixins
@@ -3119,20 +3117,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -3170,14 +3168,14 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
               nextFragment: #F5
           setters
-            #F6 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -3187,7 +3185,7 @@
           previousFragment: #F1
           nextFragment: #F8
           getters
-            #F5 augment foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
+            #F5 augment isOriginDeclaration foo (nameOffset:64) (firstTokenOffset:48) (offset:64)
               element: <testLibrary>::@mixin::A::@getter::foo
               previousFragment: #F4
               nextFragment: #F9
@@ -3195,7 +3193,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F2
           getters
-            #F9 augment foo (nameOffset:113) (firstTokenOffset:97) (offset:113)
+            #F9 augment isOriginDeclaration foo (nameOffset:113) (firstTokenOffset:97) (offset:113)
               element: <testLibrary>::@mixin::A::@getter::foo
               previousFragment: #F5
   mixins
@@ -3205,20 +3203,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F6
           formalParameters
@@ -3253,21 +3251,21 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo1
-            #F4 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo2
           getters
-            #F5 foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F5 isOriginDeclaration foo1 (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@mixin::A::@getter::foo1
               nextFragment: #F6
-            #F7 foo2 (nameOffset:41) (firstTokenOffset:33) (offset:41)
+            #F7 isOriginDeclaration foo2 (nameOffset:41) (firstTokenOffset:33) (offset:41)
               element: <testLibrary>::@mixin::A::@getter::foo2
         #F2 mixin A (nameOffset:69) (firstTokenOffset:55) (offset:69)
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           getters
-            #F6 augment foo1 (nameOffset:91) (firstTokenOffset:75) (offset:91)
+            #F6 augment isOriginDeclaration foo1 (nameOffset:91) (firstTokenOffset:75) (offset:91)
               element: <testLibrary>::@mixin::A::@getter::foo1
               previousFragment: #F5
   mixins
@@ -3277,23 +3275,23 @@
       superclassConstraints
         Object
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo2
       getters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@getter::foo1
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@getter::foo2
           firstFragment: #F7
           returnType: int
@@ -3327,10 +3325,10 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@mixin::A::@getter::foo
               nextFragment: #F5
         #F2 mixin A (nameOffset:47) (firstTokenOffset:33) (offset:47)
@@ -3338,7 +3336,7 @@
           previousFragment: #F1
           nextFragment: #F6
           getters
-            #F5 augment foo (nameOffset:69) (firstTokenOffset:53) (offset:69)
+            #F5 augment isOriginDeclaration foo (nameOffset:69) (firstTokenOffset:53) (offset:69)
               element: <testLibrary>::@mixin::A::@getter::foo
               previousFragment: #F4
               nextFragment: #F7
@@ -3346,7 +3344,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F2
           getters
-            #F7 augment foo (nameOffset:118) (firstTokenOffset:102) (offset:118)
+            #F7 augment isOriginDeclaration foo (nameOffset:118) (firstTokenOffset:102) (offset:118)
               element: <testLibrary>::@mixin::A::@getter::foo
               previousFragment: #F5
   mixins
@@ -3356,13 +3354,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -3389,13 +3387,13 @@
         #F1 class I1 (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:77) (firstTokenOffset:71) (offset:77)
           element: <testLibrary>::@class::I2
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
       mixins
@@ -3410,14 +3408,14 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F4
   mixins
@@ -3454,19 +3452,19 @@
         #F1 class I1 (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:77) (firstTokenOffset:71) (offset:77)
           element: <testLibrary>::@class::I2
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
         #F5 class I3 (nameOffset:123) (firstTokenOffset:117) (offset:123)
           element: <testLibrary>::@class::I3
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:123)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:123)
               element: <testLibrary>::@class::I3::@constructor::new
               typeName: I3
       mixins
@@ -3485,21 +3483,21 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F4
     class I3
       reference: <testLibrary>::@class::I3
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I3::@constructor::new
           firstFragment: #F6
   mixins
@@ -3869,10 +3867,10 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo1
           setters
-            #F4 foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo1
               formalParameters
                 #F5 requiredPositional _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
@@ -3881,10 +3879,10 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           fields
-            #F6 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F6 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@mixin::A::@field::foo2
           setters
-            #F7 foo2 (nameOffset:58) (firstTokenOffset:54) (offset:58)
+            #F7 isOriginDeclaration foo2 (nameOffset:58) (firstTokenOffset:54) (offset:58)
               element: <testLibrary>::@mixin::A::@setter::foo2
               formalParameters
                 #F8 requiredPositional _ (nameOffset:67) (firstTokenOffset:63) (offset:67)
@@ -3896,18 +3894,18 @@
       superclassConstraints
         Object
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@mixin::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@mixin::A::@setter::foo2
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@setter::foo1
           firstFragment: #F4
           formalParameters
@@ -3916,7 +3914,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@mixin::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@setter::foo2
           firstFragment: #F7
           formalParameters
@@ -3950,13 +3948,13 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F3 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::A::@field::foo
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -3966,7 +3964,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           setters
-            #F7 augment foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
+            #F7 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
               element: <testLibrary>::@mixin::A::@setter::foo
               formalParameters
                 #F8 requiredPositional _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
@@ -3979,20 +3977,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::A::@field::foo
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@mixin::A::@getter::foo
           setter: <testLibrary>::@mixin::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@mixin::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -4027,18 +4025,18 @@
           element: <testLibrary>::@mixin::A
           nextFragment: #F2
           fields
-            #F3 synthetic foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginGetterSetter foo1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo1
-            #F4 synthetic foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginGetterSetter foo2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::A::@field::foo2
           setters
-            #F5 foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F5 isOriginDeclaration foo1 (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@mixin::A::@setter::foo1
               formalParameters
                 #F6 requiredPositional _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
                   element: <testLibrary>::@mixin::A::@setter::foo1::@formalParameter::_
               nextFragment: #F7
-            #F8 foo2 (nameOffset:37) (firstTokenOffset:33) (offset:37)
+            #F8 isOriginDeclaration foo2 (nameOffset:37) (firstTokenOffset:33) (offset:37)
               element: <testLibrary>::@mixin::A::@setter::foo2
               formalParameters
                 #F9 requiredPositional _ (nameOffset:46) (firstTokenOffset:42) (offset:46)
@@ -4047,7 +4045,7 @@
           element: <testLibrary>::@mixin::A
           previousFragment: #F1
           setters
-            #F7 augment foo1 (nameOffset:87) (firstTokenOffset:75) (offset:87)
+            #F7 augment isOriginDeclaration foo1 (nameOffset:87) (firstTokenOffset:75) (offset:87)
               element: <testLibrary>::@mixin::A::@setter::foo1
               formalParameters
                 #F10 requiredPositional _ (nameOffset:96) (firstTokenOffset:92) (offset:96)
@@ -4060,18 +4058,18 @@
       superclassConstraints
         Object
       fields
-        synthetic foo1
+        synthetic isOriginGetterSetter foo1
           reference: <testLibrary>::@mixin::A::@field::foo1
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@mixin::A::@setter::foo1
-        synthetic foo2
+        synthetic isOriginGetterSetter foo2
           reference: <testLibrary>::@mixin::A::@field::foo2
           firstFragment: #F4
           type: int
           setter: <testLibrary>::@mixin::A::@setter::foo2
       setters
-        foo1
+        isOriginDeclaration foo1
           reference: <testLibrary>::@mixin::A::@setter::foo1
           firstFragment: #F5
           formalParameters
@@ -4080,7 +4078,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@mixin::A::@field::foo1
-        foo2
+        isOriginDeclaration foo2
           reference: <testLibrary>::@mixin::A::@setter::foo2
           firstFragment: #F8
           formalParameters
@@ -4111,13 +4109,13 @@
         #F1 class B1 (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::B1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::B1::@constructor::new
               typeName: B1
         #F3 class B2 (nameOffset:61) (firstTokenOffset:55) (offset:61)
           element: <testLibrary>::@class::B2
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::B2::@constructor::new
               typeName: B2
       mixins
@@ -4132,14 +4130,14 @@
       reference: <testLibrary>::@class::B1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B1::@constructor::new
           firstFragment: #F2
     class B2
       reference: <testLibrary>::@class::B2
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B2::@constructor::new
           firstFragment: #F4
   mixins
@@ -4174,19 +4172,19 @@
         #F1 class I1 (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:61) (firstTokenOffset:55) (offset:61)
           element: <testLibrary>::@class::I2
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
         #F5 class I3 (nameOffset:99) (firstTokenOffset:93) (offset:99)
           element: <testLibrary>::@class::I3
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:99)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:99)
               element: <testLibrary>::@class::I3::@constructor::new
               typeName: I3
       mixins
@@ -4205,21 +4203,21 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
       reference: <testLibrary>::@class::I2
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F4
     class I3
       reference: <testLibrary>::@class::I3
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I3::@constructor::new
           firstFragment: #F6
   mixins
@@ -4251,7 +4249,7 @@
         #F1 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
@@ -4266,7 +4264,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
   mixins
@@ -4297,7 +4295,7 @@
         #F1 class I1 (nameOffset:26) (firstTokenOffset:20) (offset:26)
           element: <testLibrary>::@class::I1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::I1::@constructor::new
               typeName: I1
         #F3 class I2 (nameOffset:70) (firstTokenOffset:64) (offset:70)
@@ -4306,7 +4304,7 @@
             #F4 E (nameOffset:73) (firstTokenOffset:73) (offset:73)
               element: #E0 E
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::I2::@constructor::new
               typeName: I2
       mixins
@@ -4329,7 +4327,7 @@
       reference: <testLibrary>::@class::I1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I1::@constructor::new
           firstFragment: #F2
     class I2
@@ -4339,7 +4337,7 @@
         #E0 E
           firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I2::@constructor::new
           firstFragment: #F5
   mixins
@@ -4410,7 +4408,7 @@
         #F1 class A (nameOffset:26) (firstTokenOffset:12) (offset:26)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       mixins
@@ -4423,7 +4421,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   mixins
@@ -4463,7 +4461,7 @@
         #F1 class A (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -4490,7 +4488,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -4543,7 +4541,7 @@
         #F1 class A (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -4570,7 +4568,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -4625,7 +4623,7 @@
         #F1 class A (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -4652,7 +4650,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -4707,7 +4705,7 @@
         #F1 class A (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -4744,7 +4742,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -5349,7 +5347,7 @@
         #F1 class I (nameOffset:30) (firstTokenOffset:24) (offset:30)
           element: <testLibrary>::@class::I
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
       mixins
@@ -5360,7 +5358,7 @@
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F2
   mixins
@@ -5390,7 +5388,7 @@
         #F1 class B (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
@@ -5401,7 +5399,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
   mixins
@@ -5801,45 +5799,7 @@
 }
 
 @reflectiveTest
-class MixinElementTest_fromBytes_declaringConstructors
-    extends MixinElementTest {
-  @override
-  bool get keepLinkingLibraries => false;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
-
-@reflectiveTest
 class MixinElementTest_keepLinking extends MixinElementTest {
   @override
   bool get keepLinkingLibraries => true;
 }
-
-@reflectiveTest
-class MixinElementTest_keepLinking_declaringConstructors
-    extends MixinElementTest {
-  @override
-  bool get keepLinkingLibraries => true;
-
-  @override
-  void setUp() {
-    useDeclaringConstructorsAst = true;
-    super.setUp();
-  }
-
-  @override
-  Future<void> tearDown() {
-    useDeclaringConstructorsAst = default_useDeclaringConstructorsAst;
-    return super.tearDown();
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart b/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
index ac8cc6d4..eff8272 100644
--- a/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
@@ -33,17 +33,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -53,24 +53,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
           setter: <testLibrary>::@class::C::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -99,31 +99,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@getter::foo
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -148,14 +148,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::C::@setter::foo
               formalParameters
                 #F5 requiredPositional value (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -165,17 +165,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::C::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::C::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::C::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -204,7 +204,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer a (nameOffset:11) (firstTokenOffset:11) (offset:11)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: <testLibrary>::@enum::E::@field::a
               initializer: expression_0
                 InstanceCreationExpression
@@ -218,7 +218,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer b (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@enum::E::@field::b
               initializer: expression_1
                 InstanceCreationExpression
@@ -232,7 +232,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -249,15 +249,15 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F5 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F5 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+            #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@enum::E::@getter::a
-            #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@enum::E::@getter::b
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
   enums
     enum E
@@ -265,7 +265,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer a
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@enum::E::@field::a
           firstFragment: #F2
           type: E
@@ -273,7 +273,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::a
-        static const enumConstant hasInitializer b
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@enum::E::@field::b
           firstFragment: #F3
           type: E
@@ -281,7 +281,7 @@
             fragment: #F3
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::b
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F4
           type: List<E>
@@ -290,21 +290,21 @@
             expression: expression_2
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@enum::E::@getter::a
           firstFragment: #F6
           returnType: E
           variable: <testLibrary>::@enum::E::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@enum::E::@getter::b
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::b
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -329,13 +329,13 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@mixin::M::@field::foo
           getters
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::M::@getter::foo
           setters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@mixin::M::@setter::foo
               formalParameters
                 #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -347,20 +347,20 @@
       superclassConstraints
         Object
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::foo
           setter: <testLibrary>::@mixin::M::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::M::@getter::foo
           firstFragment: #F3
           returnType: int
           variable: <testLibrary>::@mixin::M::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@mixin::M::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -389,10 +389,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           getters
-            #F3 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F3 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@mixin::M::@getter::foo
   mixins
     mixin M
@@ -401,13 +401,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@mixin::M::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@getter::foo
           firstFragment: #F3
           returnType: int
@@ -432,10 +432,10 @@
         #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@mixin::M
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@mixin::M::@field::foo
           setters
-            #F3 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F3 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@mixin::M::@setter::foo
               formalParameters
                 #F4 requiredPositional value (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -447,13 +447,13 @@
       superclassConstraints
         Object
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@mixin::M::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@mixin::M::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@mixin::M::@setter::foo
           firstFragment: #F3
           formalParameters
@@ -477,19 +477,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -510,32 +510,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 foo (nameOffset:22) (firstTokenOffset:18) (offset:22)
+        #F3 isOriginDeclaration foo (nameOffset:22) (firstTokenOffset:18) (offset:22)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional value (nameOffset:30) (firstTokenOffset:26) (offset:30)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -559,22 +559,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F2 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F3 requiredPositional value (nameOffset:12) (firstTokenOffset:8) (offset:12)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       formalParameters
@@ -598,32 +598,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
diff --git a/pkg/analyzer/test/src/summary/elements/offsets_test.dart b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
index 5e1a19f..8ac3798 100644
--- a/pkg/analyzer/test/src/summary/elements/offsets_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
@@ -53,37 +53,37 @@
         #F1 class Raw (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::Raw
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::Raw::@constructor::new
               typeName: Raw
         #F3 class HasDocComment (nameOffset:50) (firstTokenOffset:14) (offset:50)
           element: <testLibrary>::@class::HasDocComment
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::HasDocComment::@constructor::new
               typeName: HasDocComment
         #F5 class HasAnnotation (nameOffset:84) (firstTokenOffset:68) (offset:84)
           element: <testLibrary>::@class::HasAnnotation
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
               element: <testLibrary>::@class::HasAnnotation::@constructor::new
               typeName: HasAnnotation
         #F7 class AnnotationThenComment (nameOffset:148) (firstTokenOffset:102) (offset:148)
           element: <testLibrary>::@class::AnnotationThenComment
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
               element: <testLibrary>::@class::AnnotationThenComment::@constructor::new
               typeName: AnnotationThenComment
         #F9 class CommentThenAnnotation (nameOffset:220) (firstTokenOffset:174) (offset:220)
           element: <testLibrary>::@class::CommentThenAnnotation
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:220)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:220)
               element: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
               typeName: CommentThenAnnotation
         #F11 class CommentAroundAnnotation (nameOffset:292) (firstTokenOffset:261) (offset:292)
           element: <testLibrary>::@class::CommentAroundAnnotation
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:292)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:292)
               element: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
               typeName: CommentAroundAnnotation
   classes
@@ -91,7 +91,7 @@
       reference: <testLibrary>::@class::Raw
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::Raw::@constructor::new
           firstFragment: #F2
     class HasDocComment
@@ -99,14 +99,14 @@
       firstFragment: #F3
       documentationComment: /// Comment 1.\n/// Comment 2.
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::HasDocComment::@constructor::new
           firstFragment: #F4
     class HasAnnotation
       reference: <testLibrary>::@class::HasAnnotation
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::HasAnnotation::@constructor::new
           firstFragment: #F6
     class AnnotationThenComment
@@ -114,7 +114,7 @@
       firstFragment: #F7
       documentationComment: /// Comment 1.\n/// Comment 2.
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::AnnotationThenComment::@constructor::new
           firstFragment: #F8
     class CommentThenAnnotation
@@ -122,7 +122,7 @@
       firstFragment: #F9
       documentationComment: /// Comment 1.\n/// Comment 2.
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
           firstFragment: #F10
     class CommentAroundAnnotation
@@ -130,7 +130,7 @@
       firstFragment: #F11
       documentationComment: /// Comment 2.
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
           firstFragment: #F12
 ''');
@@ -177,49 +177,49 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:18) (firstTokenOffset:12) (offset:18)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class Raw (nameOffset:30) (firstTokenOffset:24) (offset:30)
           element: <testLibrary>::@class::Raw
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F6 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::Raw::@constructor::new
               typeName: Raw
         #F7 class HasDocComment (nameOffset:91) (firstTokenOffset:55) (offset:91)
           element: <testLibrary>::@class::HasDocComment
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+            #F8 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
               element: <testLibrary>::@class::HasDocComment::@constructor::new
               typeName: HasDocComment
         #F9 class HasAnnotation (nameOffset:142) (firstTokenOffset:126) (offset:142)
           element: <testLibrary>::@class::HasAnnotation
           constructors
-            #F10 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:142)
+            #F10 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:142)
               element: <testLibrary>::@class::HasAnnotation::@constructor::new
               typeName: HasAnnotation
         #F11 class AnnotationThenComment (nameOffset:223) (firstTokenOffset:177) (offset:223)
           element: <testLibrary>::@class::AnnotationThenComment
           constructors
-            #F12 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:223)
+            #F12 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:223)
               element: <testLibrary>::@class::AnnotationThenComment::@constructor::new
               typeName: AnnotationThenComment
         #F13 class CommentThenAnnotation (nameOffset:312) (firstTokenOffset:266) (offset:312)
           element: <testLibrary>::@class::CommentThenAnnotation
           constructors
-            #F14 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:312)
+            #F14 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:312)
               element: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
               typeName: CommentThenAnnotation
         #F15 class CommentAroundAnnotation (nameOffset:401) (firstTokenOffset:370) (offset:401)
           element: <testLibrary>::@class::CommentAroundAnnotation
           constructors
-            #F16 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:401)
+            #F16 synthetic const isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:401)
               element: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
               typeName: CommentAroundAnnotation
   classes
@@ -227,14 +227,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class alias Raw
@@ -245,7 +245,7 @@
         A
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::Raw::@constructor::new
           firstFragment: #F6
           constantInitializers
@@ -264,7 +264,7 @@
         A
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::HasDocComment::@constructor::new
           firstFragment: #F8
           constantInitializers
@@ -282,7 +282,7 @@
         A
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::HasAnnotation::@constructor::new
           firstFragment: #F10
           constantInitializers
@@ -301,7 +301,7 @@
         A
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::AnnotationThenComment::@constructor::new
           firstFragment: #F12
           constantInitializers
@@ -320,7 +320,7 @@
         A
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::CommentThenAnnotation::@constructor::new
           firstFragment: #F14
           constantInitializers
@@ -339,7 +339,7 @@
         A
         B
       constructors
-        synthetic const new
+        synthetic const isOriginMixinApplication new
           reference: <testLibrary>::@class::CommentAroundAnnotation::@constructor::new
           firstFragment: #F16
           constantInitializers
@@ -393,20 +393,20 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::C::@constructor::new
               codeOffset: 12
               codeLength: 4
               typeName: C
               typeNameOffset: 12
-            #F3 raw (nameOffset:22) (firstTokenOffset:20) (offset:22)
+            #F3 isOriginDeclaration raw (nameOffset:22) (firstTokenOffset:20) (offset:22)
               element: <testLibrary>::@class::C::@constructor::raw
               codeOffset: 20
               codeLength: 10
               typeName: C
               typeNameOffset: 20
               periodOffset: 21
-            #F4 hasDocComment (nameOffset:70) (firstTokenOffset:34) (offset:70)
+            #F4 isOriginDeclaration hasDocComment (nameOffset:70) (firstTokenOffset:34) (offset:70)
               element: <testLibrary>::@class::C::@constructor::hasDocComment
               documentationComment: /// Comment 1.\n/// Comment 2.
               codeOffset: 34
@@ -414,7 +414,7 @@
               typeName: C
               typeNameOffset: 68
               periodOffset: 69
-            #F5 hasAnnotation (nameOffset:106) (firstTokenOffset:92) (offset:106)
+            #F5 isOriginDeclaration hasAnnotation (nameOffset:106) (firstTokenOffset:92) (offset:106)
               element: <testLibrary>::@class::C::@constructor::hasAnnotation
               metadata
                 Annotation
@@ -432,7 +432,7 @@
               typeName: C
               typeNameOffset: 104
               periodOffset: 105
-            #F6 annotationThenComment (nameOffset:176) (firstTokenOffset:128) (offset:176)
+            #F6 isOriginDeclaration annotationThenComment (nameOffset:176) (firstTokenOffset:128) (offset:176)
               element: <testLibrary>::@class::C::@constructor::annotationThenComment
               documentationComment: /// Comment 1.\n/// Comment 2.
               metadata
@@ -451,7 +451,7 @@
               typeName: C
               typeNameOffset: 174
               periodOffset: 175
-            #F7 commentThenAnnotation (nameOffset:254) (firstTokenOffset:206) (offset:254)
+            #F7 isOriginDeclaration commentThenAnnotation (nameOffset:254) (firstTokenOffset:206) (offset:254)
               element: <testLibrary>::@class::C::@constructor::commentThenAnnotation
               documentationComment: /// Comment 1.\n/// Comment 2.
               metadata
@@ -470,7 +470,7 @@
               typeName: C
               typeNameOffset: 252
               periodOffset: 253
-            #F8 commentAroundAnnotation (nameOffset:332) (firstTokenOffset:301) (offset:332)
+            #F8 isOriginDeclaration commentAroundAnnotation (nameOffset:332) (firstTokenOffset:301) (offset:332)
               element: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
               documentationComment: /// Comment 2.
               metadata
@@ -494,17 +494,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
-        raw
+        isOriginDeclaration raw
           reference: <testLibrary>::@class::C::@constructor::raw
           firstFragment: #F3
-        hasDocComment
+        isOriginDeclaration hasDocComment
           reference: <testLibrary>::@class::C::@constructor::hasDocComment
           firstFragment: #F4
           documentationComment: /// Comment 1.\n/// Comment 2.
-        hasAnnotation
+        isOriginDeclaration hasAnnotation
           reference: <testLibrary>::@class::C::@constructor::hasAnnotation
           firstFragment: #F5
           metadata
@@ -518,7 +518,7 @@
                 leftParenthesis: ( @99
                 rightParenthesis: ) @100
               element: dart:core::@class::Object::@constructor::new
-        annotationThenComment
+        isOriginDeclaration annotationThenComment
           reference: <testLibrary>::@class::C::@constructor::annotationThenComment
           firstFragment: #F6
           documentationComment: /// Comment 1.\n/// Comment 2.
@@ -533,7 +533,7 @@
                 leftParenthesis: ( @135
                 rightParenthesis: ) @136
               element: dart:core::@class::Object::@constructor::new
-        commentThenAnnotation
+        isOriginDeclaration commentThenAnnotation
           reference: <testLibrary>::@class::C::@constructor::commentThenAnnotation
           firstFragment: #F7
           documentationComment: /// Comment 1.\n/// Comment 2.
@@ -548,7 +548,7 @@
                 leftParenthesis: ( @247
                 rightParenthesis: ) @248
               element: dart:core::@class::Object::@constructor::new
-        commentAroundAnnotation
+        isOriginDeclaration commentAroundAnnotation
           reference: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
           firstFragment: #F8
           documentationComment: /// Comment 2.
@@ -607,28 +607,31 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 factory new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
+            #F2 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::C::@constructor::new
               codeOffset: 12
               codeLength: 23
+              factoryKeywordOffset: 12
               typeName: C
               typeNameOffset: 20
-            #F3 factory raw (nameOffset:49) (firstTokenOffset:39) (offset:49)
+            #F3 factory isOriginDeclaration raw (nameOffset:49) (firstTokenOffset:39) (offset:49)
               element: <testLibrary>::@class::C::@constructor::raw
               codeOffset: 39
               codeLength: 27
+              factoryKeywordOffset: 39
               typeName: C
               typeNameOffset: 47
               periodOffset: 48
-            #F4 factory hasDocComment (nameOffset:114) (firstTokenOffset:70) (offset:114)
+            #F4 factory isOriginDeclaration hasDocComment (nameOffset:114) (firstTokenOffset:70) (offset:114)
               element: <testLibrary>::@class::C::@constructor::hasDocComment
               documentationComment: /// Comment 1.\n/// Comment 2.
               codeOffset: 70
               codeLength: 71
+              factoryKeywordOffset: 104
               typeName: C
               typeNameOffset: 112
               periodOffset: 113
-            #F5 factory hasAnnotation (nameOffset:167) (firstTokenOffset:145) (offset:167)
+            #F5 factory isOriginDeclaration hasAnnotation (nameOffset:167) (firstTokenOffset:145) (offset:167)
               element: <testLibrary>::@class::C::@constructor::hasAnnotation
               metadata
                 Annotation
@@ -643,10 +646,11 @@
                   element: dart:core::@class::Object::@constructor::new
               codeOffset: 145
               codeLength: 49
+              factoryKeywordOffset: 157
               typeName: C
               typeNameOffset: 165
               periodOffset: 166
-            #F6 factory annotationThenComment (nameOffset:254) (firstTokenOffset:198) (offset:254)
+            #F6 factory isOriginDeclaration annotationThenComment (nameOffset:254) (firstTokenOffset:198) (offset:254)
               element: <testLibrary>::@class::C::@constructor::annotationThenComment
               documentationComment: /// Comment 1.\n/// Comment 2.
               metadata
@@ -662,10 +666,11 @@
                   element: dart:core::@class::Object::@constructor::new
               codeOffset: 198
               codeLength: 91
+              factoryKeywordOffset: 244
               typeName: C
               typeNameOffset: 252
               periodOffset: 253
-            #F7 factory commentThenAnnotation (nameOffset:349) (firstTokenOffset:293) (offset:349)
+            #F7 factory isOriginDeclaration commentThenAnnotation (nameOffset:349) (firstTokenOffset:293) (offset:349)
               element: <testLibrary>::@class::C::@constructor::commentThenAnnotation
               documentationComment: /// Comment 1.\n/// Comment 2.
               metadata
@@ -681,10 +686,11 @@
                   element: dart:core::@class::Object::@constructor::new
               codeOffset: 293
               codeLength: 91
+              factoryKeywordOffset: 339
               typeName: C
               typeNameOffset: 347
               periodOffset: 348
-            #F8 factory commentAroundAnnotation (nameOffset:444) (firstTokenOffset:405) (offset:444)
+            #F8 factory isOriginDeclaration commentAroundAnnotation (nameOffset:444) (firstTokenOffset:405) (offset:444)
               element: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
               documentationComment: /// Comment 2.
               metadata
@@ -700,6 +706,7 @@
                   element: dart:core::@class::Object::@constructor::new
               codeOffset: 405
               codeLength: 76
+              factoryKeywordOffset: 434
               typeName: C
               typeNameOffset: 442
               periodOffset: 443
@@ -708,17 +715,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
-        factory raw
+        factory isOriginDeclaration raw
           reference: <testLibrary>::@class::C::@constructor::raw
           firstFragment: #F3
-        factory hasDocComment
+        factory isOriginDeclaration hasDocComment
           reference: <testLibrary>::@class::C::@constructor::hasDocComment
           firstFragment: #F4
           documentationComment: /// Comment 1.\n/// Comment 2.
-        factory hasAnnotation
+        factory isOriginDeclaration hasAnnotation
           reference: <testLibrary>::@class::C::@constructor::hasAnnotation
           firstFragment: #F5
           metadata
@@ -732,7 +739,7 @@
                 leftParenthesis: ( @152
                 rightParenthesis: ) @153
               element: dart:core::@class::Object::@constructor::new
-        factory annotationThenComment
+        factory isOriginDeclaration annotationThenComment
           reference: <testLibrary>::@class::C::@constructor::annotationThenComment
           firstFragment: #F6
           documentationComment: /// Comment 1.\n/// Comment 2.
@@ -747,7 +754,7 @@
                 leftParenthesis: ( @205
                 rightParenthesis: ) @206
               element: dart:core::@class::Object::@constructor::new
-        factory commentThenAnnotation
+        factory isOriginDeclaration commentThenAnnotation
           reference: <testLibrary>::@class::C::@constructor::commentThenAnnotation
           firstFragment: #F7
           documentationComment: /// Comment 1.\n/// Comment 2.
@@ -762,7 +769,7 @@
                 leftParenthesis: ( @334
                 rightParenthesis: ) @335
               element: dart:core::@class::Object::@constructor::new
-        factory commentAroundAnnotation
+        factory isOriginDeclaration commentAroundAnnotation
           reference: <testLibrary>::@class::C::@constructor::commentAroundAnnotation
           firstFragment: #F8
           documentationComment: /// Comment 2.
@@ -819,7 +826,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       extensions
@@ -840,7 +847,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   extensions
@@ -902,53 +909,53 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer withInit (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration withInit (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::withInit
-            #F3 withoutInit (nameOffset:37) (firstTokenOffset:37) (offset:37)
+            #F3 isOriginDeclaration withoutInit (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: <testLibrary>::@class::C::@field::withoutInit
-            #F4 hasInitializer multiWithInit (nameOffset:57) (firstTokenOffset:57) (offset:57)
+            #F4 hasInitializer isOriginDeclaration multiWithInit (nameOffset:57) (firstTokenOffset:57) (offset:57)
               element: <testLibrary>::@class::C::@field::multiWithInit
-            #F5 multiWithoutInit (nameOffset:76) (firstTokenOffset:76) (offset:76)
+            #F5 isOriginDeclaration multiWithoutInit (nameOffset:76) (firstTokenOffset:76) (offset:76)
               element: <testLibrary>::@class::C::@field::multiWithoutInit
-            #F6 hasInitializer multiWithInit2 (nameOffset:94) (firstTokenOffset:94) (offset:94)
+            #F6 hasInitializer isOriginDeclaration multiWithInit2 (nameOffset:94) (firstTokenOffset:94) (offset:94)
               element: <testLibrary>::@class::C::@field::multiWithInit2
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F8 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F8 synthetic isOriginVariable withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::withInit
-            #F9 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F9 synthetic isOriginVariable withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@getter::withoutInit
-            #F10 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F10 synthetic isOriginVariable multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::C::@getter::multiWithInit
-            #F11 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+            #F11 synthetic isOriginVariable multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@class::C::@getter::multiWithoutInit
-            #F12 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+            #F12 synthetic isOriginVariable multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@class::C::@getter::multiWithInit2
           setters
-            #F13 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F13 synthetic isOriginVariable withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::withInit
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::withInit::@formalParameter::value
-            #F15 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F15 synthetic isOriginVariable withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@setter::withoutInit
               formalParameters
                 #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
                   element: <testLibrary>::@class::C::@setter::withoutInit::@formalParameter::value
-            #F17 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F17 synthetic isOriginVariable multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::C::@setter::multiWithInit
               formalParameters
                 #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
                   element: <testLibrary>::@class::C::@setter::multiWithInit::@formalParameter::value
-            #F19 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+            #F19 synthetic isOriginVariable multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@class::C::@setter::multiWithoutInit
               formalParameters
                 #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
                   element: <testLibrary>::@class::C::@setter::multiWithoutInit::@formalParameter::value
-            #F21 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+            #F21 synthetic isOriginVariable multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@class::C::@setter::multiWithInit2
               formalParameters
                 #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
@@ -958,68 +965,68 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer withInit
+        hasInitializer isOriginDeclaration withInit
           reference: <testLibrary>::@class::C::@field::withInit
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::withInit
           setter: <testLibrary>::@class::C::@setter::withInit
-        withoutInit
+        isOriginDeclaration withoutInit
           reference: <testLibrary>::@class::C::@field::withoutInit
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::C::@getter::withoutInit
           setter: <testLibrary>::@class::C::@setter::withoutInit
-        hasInitializer multiWithInit
+        hasInitializer isOriginDeclaration multiWithInit
           reference: <testLibrary>::@class::C::@field::multiWithInit
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::C::@getter::multiWithInit
           setter: <testLibrary>::@class::C::@setter::multiWithInit
-        multiWithoutInit
+        isOriginDeclaration multiWithoutInit
           reference: <testLibrary>::@class::C::@field::multiWithoutInit
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@class::C::@getter::multiWithoutInit
           setter: <testLibrary>::@class::C::@setter::multiWithoutInit
-        hasInitializer multiWithInit2
+        hasInitializer isOriginDeclaration multiWithInit2
           reference: <testLibrary>::@class::C::@field::multiWithInit2
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::C::@getter::multiWithInit2
           setter: <testLibrary>::@class::C::@setter::multiWithInit2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F7
       getters
-        synthetic withInit
+        synthetic isOriginVariable withInit
           reference: <testLibrary>::@class::C::@getter::withInit
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@class::C::@field::withInit
-        synthetic withoutInit
+        synthetic isOriginVariable withoutInit
           reference: <testLibrary>::@class::C::@getter::withoutInit
           firstFragment: #F9
           returnType: int
           variable: <testLibrary>::@class::C::@field::withoutInit
-        synthetic multiWithInit
+        synthetic isOriginVariable multiWithInit
           reference: <testLibrary>::@class::C::@getter::multiWithInit
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@class::C::@field::multiWithInit
-        synthetic multiWithoutInit
+        synthetic isOriginVariable multiWithoutInit
           reference: <testLibrary>::@class::C::@getter::multiWithoutInit
           firstFragment: #F11
           returnType: int
           variable: <testLibrary>::@class::C::@field::multiWithoutInit
-        synthetic multiWithInit2
+        synthetic isOriginVariable multiWithInit2
           reference: <testLibrary>::@class::C::@getter::multiWithInit2
           firstFragment: #F12
           returnType: int
           variable: <testLibrary>::@class::C::@field::multiWithInit2
       setters
-        synthetic withInit
+        synthetic isOriginVariable withInit
           reference: <testLibrary>::@class::C::@setter::withInit
           firstFragment: #F13
           formalParameters
@@ -1028,7 +1035,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::withInit
-        synthetic withoutInit
+        synthetic isOriginVariable withoutInit
           reference: <testLibrary>::@class::C::@setter::withoutInit
           firstFragment: #F15
           formalParameters
@@ -1037,7 +1044,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::withoutInit
-        synthetic multiWithInit
+        synthetic isOriginVariable multiWithInit
           reference: <testLibrary>::@class::C::@setter::multiWithInit
           firstFragment: #F17
           formalParameters
@@ -1046,7 +1053,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::multiWithInit
-        synthetic multiWithoutInit
+        synthetic isOriginVariable multiWithoutInit
           reference: <testLibrary>::@class::C::@setter::multiWithoutInit
           firstFragment: #F19
           formalParameters
@@ -1055,7 +1062,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::multiWithoutInit
-        synthetic multiWithInit2
+        synthetic isOriginVariable multiWithInit2
           reference: <testLibrary>::@class::C::@setter::multiWithInit2
           firstFragment: #F21
           formalParameters
@@ -1104,98 +1111,186 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasDocComment (nameOffset:50) (firstTokenOffset:50) (offset:50)
+            #F2 isOriginDeclaration hasDocComment (nameOffset:50) (firstTokenOffset:50) (offset:50)
               element: <testLibrary>::@class::C::@field::hasDocComment
-            #F3 hasDocComment2 (nameOffset:65) (firstTokenOffset:65) (offset:65)
+            #F3 isOriginDeclaration hasDocComment2 (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: <testLibrary>::@class::C::@field::hasDocComment2
-            #F4 hasAnnotation (nameOffset:100) (firstTokenOffset:100) (offset:100)
+            #F4 isOriginDeclaration hasAnnotation (nameOffset:100) (firstTokenOffset:100) (offset:100)
               element: <testLibrary>::@class::C::@field::hasAnnotation
-            #F5 hasAnnotation2 (nameOffset:115) (firstTokenOffset:115) (offset:115)
+              metadata
+                Annotation
+                  atSign: @ @84
+                  name: SimpleIdentifier
+                    token: Object @85
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @91
+                    rightParenthesis: ) @92
+                  element: dart:core::@class::Object::@constructor::new
+            #F5 isOriginDeclaration hasAnnotation2 (nameOffset:115) (firstTokenOffset:115) (offset:115)
               element: <testLibrary>::@class::C::@field::hasAnnotation2
-            #F6 annotationThenComment (nameOffset:184) (firstTokenOffset:184) (offset:184)
+              metadata
+                Annotation
+                  atSign: @ @84
+                  name: SimpleIdentifier
+                    token: Object @85
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @91
+                    rightParenthesis: ) @92
+                  element: dart:core::@class::Object::@constructor::new
+            #F6 isOriginDeclaration annotationThenComment (nameOffset:184) (firstTokenOffset:184) (offset:184)
               element: <testLibrary>::@class::C::@field::annotationThenComment
-            #F7 annotationThenComment2 (nameOffset:207) (firstTokenOffset:207) (offset:207)
+              metadata
+                Annotation
+                  atSign: @ @134
+                  name: SimpleIdentifier
+                    token: Object @135
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @141
+                    rightParenthesis: ) @142
+                  element: dart:core::@class::Object::@constructor::new
+            #F7 isOriginDeclaration annotationThenComment2 (nameOffset:207) (firstTokenOffset:207) (offset:207)
               element: <testLibrary>::@class::C::@field::annotationThenComment2
-            #F8 commentThenAnnotation (nameOffset:284) (firstTokenOffset:284) (offset:284)
+              metadata
+                Annotation
+                  atSign: @ @134
+                  name: SimpleIdentifier
+                    token: Object @135
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @141
+                    rightParenthesis: ) @142
+                  element: dart:core::@class::Object::@constructor::new
+            #F8 isOriginDeclaration commentThenAnnotation (nameOffset:284) (firstTokenOffset:284) (offset:284)
               element: <testLibrary>::@class::C::@field::commentThenAnnotation
-            #F9 commentThenAnnotation2 (nameOffset:307) (firstTokenOffset:307) (offset:307)
+              metadata
+                Annotation
+                  atSign: @ @268
+                  name: SimpleIdentifier
+                    token: Object @269
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @275
+                    rightParenthesis: ) @276
+                  element: dart:core::@class::Object::@constructor::new
+            #F9 isOriginDeclaration commentThenAnnotation2 (nameOffset:307) (firstTokenOffset:307) (offset:307)
               element: <testLibrary>::@class::C::@field::commentThenAnnotation2
-            #F10 commentAroundAnnotation (nameOffset:384) (firstTokenOffset:384) (offset:384)
+              metadata
+                Annotation
+                  atSign: @ @268
+                  name: SimpleIdentifier
+                    token: Object @269
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @275
+                    rightParenthesis: ) @276
+                  element: dart:core::@class::Object::@constructor::new
+            #F10 isOriginDeclaration commentAroundAnnotation (nameOffset:384) (firstTokenOffset:384) (offset:384)
               element: <testLibrary>::@class::C::@field::commentAroundAnnotation
-            #F11 commentAroundAnnotation2 (nameOffset:409) (firstTokenOffset:409) (offset:409)
+              metadata
+                Annotation
+                  atSign: @ @351
+                  name: SimpleIdentifier
+                    token: Object @352
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @358
+                    rightParenthesis: ) @359
+                  element: dart:core::@class::Object::@constructor::new
+            #F11 isOriginDeclaration commentAroundAnnotation2 (nameOffset:409) (firstTokenOffset:409) (offset:409)
               element: <testLibrary>::@class::C::@field::commentAroundAnnotation2
+              metadata
+                Annotation
+                  atSign: @ @351
+                  name: SimpleIdentifier
+                    token: Object @352
+                    element: dart:core::@class::Object
+                    staticType: null
+                  arguments: ArgumentList
+                    leftParenthesis: ( @358
+                    rightParenthesis: ) @359
+                  element: dart:core::@class::Object::@constructor::new
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F13 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F13 synthetic isOriginVariable hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@getter::hasDocComment
-            #F14 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F14 synthetic isOriginVariable hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@class::C::@getter::hasDocComment2
-            #F15 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
+            #F15 synthetic isOriginVariable hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
               element: <testLibrary>::@class::C::@getter::hasAnnotation
-            #F16 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
+            #F16 synthetic isOriginVariable hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
               element: <testLibrary>::@class::C::@getter::hasAnnotation2
-            #F17 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
+            #F17 synthetic isOriginVariable annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
               element: <testLibrary>::@class::C::@getter::annotationThenComment
-            #F18 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
+            #F18 synthetic isOriginVariable annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
               element: <testLibrary>::@class::C::@getter::annotationThenComment2
-            #F19 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
+            #F19 synthetic isOriginVariable commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
               element: <testLibrary>::@class::C::@getter::commentThenAnnotation
-            #F20 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
+            #F20 synthetic isOriginVariable commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
               element: <testLibrary>::@class::C::@getter::commentThenAnnotation2
-            #F21 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
+            #F21 synthetic isOriginVariable commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
               element: <testLibrary>::@class::C::@getter::commentAroundAnnotation
-            #F22 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
+            #F22 synthetic isOriginVariable commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
               element: <testLibrary>::@class::C::@getter::commentAroundAnnotation2
           setters
-            #F23 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F23 synthetic isOriginVariable hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@setter::hasDocComment
               formalParameters
                 #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
                   element: <testLibrary>::@class::C::@setter::hasDocComment::@formalParameter::value
-            #F25 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F25 synthetic isOriginVariable hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@class::C::@setter::hasDocComment2
               formalParameters
                 #F26 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
                   element: <testLibrary>::@class::C::@setter::hasDocComment2::@formalParameter::value
-            #F27 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
+            #F27 synthetic isOriginVariable hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
               element: <testLibrary>::@class::C::@setter::hasAnnotation
               formalParameters
                 #F28 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:100)
                   element: <testLibrary>::@class::C::@setter::hasAnnotation::@formalParameter::value
-            #F29 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
+            #F29 synthetic isOriginVariable hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
               element: <testLibrary>::@class::C::@setter::hasAnnotation2
               formalParameters
                 #F30 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:115)
                   element: <testLibrary>::@class::C::@setter::hasAnnotation2::@formalParameter::value
-            #F31 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
+            #F31 synthetic isOriginVariable annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
               element: <testLibrary>::@class::C::@setter::annotationThenComment
               formalParameters
                 #F32 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:184)
                   element: <testLibrary>::@class::C::@setter::annotationThenComment::@formalParameter::value
-            #F33 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
+            #F33 synthetic isOriginVariable annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
               element: <testLibrary>::@class::C::@setter::annotationThenComment2
               formalParameters
                 #F34 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:207)
                   element: <testLibrary>::@class::C::@setter::annotationThenComment2::@formalParameter::value
-            #F35 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
+            #F35 synthetic isOriginVariable commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
               element: <testLibrary>::@class::C::@setter::commentThenAnnotation
               formalParameters
                 #F36 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
                   element: <testLibrary>::@class::C::@setter::commentThenAnnotation::@formalParameter::value
-            #F37 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
+            #F37 synthetic isOriginVariable commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
               element: <testLibrary>::@class::C::@setter::commentThenAnnotation2
               formalParameters
                 #F38 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:307)
                   element: <testLibrary>::@class::C::@setter::commentThenAnnotation2::@formalParameter::value
-            #F39 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
+            #F39 synthetic isOriginVariable commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
               element: <testLibrary>::@class::C::@setter::commentAroundAnnotation
               formalParameters
                 #F40 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:384)
                   element: <testLibrary>::@class::C::@setter::commentAroundAnnotation::@formalParameter::value
-            #F41 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
+            #F41 synthetic isOriginVariable commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
               element: <testLibrary>::@class::C::@setter::commentAroundAnnotation2
               formalParameters
                 #F42 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
@@ -1205,123 +1300,211 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasDocComment
+        isOriginDeclaration hasDocComment
           reference: <testLibrary>::@class::C::@field::hasDocComment
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::hasDocComment
           setter: <testLibrary>::@class::C::@setter::hasDocComment
-        hasDocComment2
+        isOriginDeclaration hasDocComment2
           reference: <testLibrary>::@class::C::@field::hasDocComment2
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::C::@getter::hasDocComment2
           setter: <testLibrary>::@class::C::@setter::hasDocComment2
-        hasAnnotation
+        isOriginDeclaration hasAnnotation
           reference: <testLibrary>::@class::C::@field::hasAnnotation
           firstFragment: #F4
+          metadata
+            Annotation
+              atSign: @ @84
+              name: SimpleIdentifier
+                token: Object @85
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @91
+                rightParenthesis: ) @92
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::hasAnnotation
           setter: <testLibrary>::@class::C::@setter::hasAnnotation
-        hasAnnotation2
+        isOriginDeclaration hasAnnotation2
           reference: <testLibrary>::@class::C::@field::hasAnnotation2
           firstFragment: #F5
+          metadata
+            Annotation
+              atSign: @ @84
+              name: SimpleIdentifier
+                token: Object @85
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @91
+                rightParenthesis: ) @92
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::hasAnnotation2
           setter: <testLibrary>::@class::C::@setter::hasAnnotation2
-        annotationThenComment
+        isOriginDeclaration annotationThenComment
           reference: <testLibrary>::@class::C::@field::annotationThenComment
           firstFragment: #F6
+          metadata
+            Annotation
+              atSign: @ @134
+              name: SimpleIdentifier
+                token: Object @135
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @141
+                rightParenthesis: ) @142
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::annotationThenComment
           setter: <testLibrary>::@class::C::@setter::annotationThenComment
-        annotationThenComment2
+        isOriginDeclaration annotationThenComment2
           reference: <testLibrary>::@class::C::@field::annotationThenComment2
           firstFragment: #F7
+          metadata
+            Annotation
+              atSign: @ @134
+              name: SimpleIdentifier
+                token: Object @135
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @141
+                rightParenthesis: ) @142
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::annotationThenComment2
           setter: <testLibrary>::@class::C::@setter::annotationThenComment2
-        commentThenAnnotation
+        isOriginDeclaration commentThenAnnotation
           reference: <testLibrary>::@class::C::@field::commentThenAnnotation
           firstFragment: #F8
+          metadata
+            Annotation
+              atSign: @ @268
+              name: SimpleIdentifier
+                token: Object @269
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @275
+                rightParenthesis: ) @276
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::commentThenAnnotation
           setter: <testLibrary>::@class::C::@setter::commentThenAnnotation
-        commentThenAnnotation2
+        isOriginDeclaration commentThenAnnotation2
           reference: <testLibrary>::@class::C::@field::commentThenAnnotation2
           firstFragment: #F9
+          metadata
+            Annotation
+              atSign: @ @268
+              name: SimpleIdentifier
+                token: Object @269
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @275
+                rightParenthesis: ) @276
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::commentThenAnnotation2
           setter: <testLibrary>::@class::C::@setter::commentThenAnnotation2
-        commentAroundAnnotation
+        isOriginDeclaration commentAroundAnnotation
           reference: <testLibrary>::@class::C::@field::commentAroundAnnotation
           firstFragment: #F10
+          metadata
+            Annotation
+              atSign: @ @351
+              name: SimpleIdentifier
+                token: Object @352
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @358
+                rightParenthesis: ) @359
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::commentAroundAnnotation
           setter: <testLibrary>::@class::C::@setter::commentAroundAnnotation
-        commentAroundAnnotation2
+        isOriginDeclaration commentAroundAnnotation2
           reference: <testLibrary>::@class::C::@field::commentAroundAnnotation2
           firstFragment: #F11
+          metadata
+            Annotation
+              atSign: @ @351
+              name: SimpleIdentifier
+                token: Object @352
+                element: dart:core::@class::Object
+                staticType: null
+              arguments: ArgumentList
+                leftParenthesis: ( @358
+                rightParenthesis: ) @359
+              element: dart:core::@class::Object::@constructor::new
           type: int
           getter: <testLibrary>::@class::C::@getter::commentAroundAnnotation2
           setter: <testLibrary>::@class::C::@setter::commentAroundAnnotation2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       getters
-        synthetic hasDocComment
+        synthetic isOriginVariable hasDocComment
           reference: <testLibrary>::@class::C::@getter::hasDocComment
           firstFragment: #F13
           returnType: int
           variable: <testLibrary>::@class::C::@field::hasDocComment
-        synthetic hasDocComment2
+        synthetic isOriginVariable hasDocComment2
           reference: <testLibrary>::@class::C::@getter::hasDocComment2
           firstFragment: #F14
           returnType: int
           variable: <testLibrary>::@class::C::@field::hasDocComment2
-        synthetic hasAnnotation
+        synthetic isOriginVariable hasAnnotation
           reference: <testLibrary>::@class::C::@getter::hasAnnotation
           firstFragment: #F15
           returnType: int
           variable: <testLibrary>::@class::C::@field::hasAnnotation
-        synthetic hasAnnotation2
+        synthetic isOriginVariable hasAnnotation2
           reference: <testLibrary>::@class::C::@getter::hasAnnotation2
           firstFragment: #F16
           returnType: int
           variable: <testLibrary>::@class::C::@field::hasAnnotation2
-        synthetic annotationThenComment
+        synthetic isOriginVariable annotationThenComment
           reference: <testLibrary>::@class::C::@getter::annotationThenComment
           firstFragment: #F17
           returnType: int
           variable: <testLibrary>::@class::C::@field::annotationThenComment
-        synthetic annotationThenComment2
+        synthetic isOriginVariable annotationThenComment2
           reference: <testLibrary>::@class::C::@getter::annotationThenComment2
           firstFragment: #F18
           returnType: int
           variable: <testLibrary>::@class::C::@field::annotationThenComment2
-        synthetic commentThenAnnotation
+        synthetic isOriginVariable commentThenAnnotation
           reference: <testLibrary>::@class::C::@getter::commentThenAnnotation
           firstFragment: #F19
           returnType: int
           variable: <testLibrary>::@class::C::@field::commentThenAnnotation
-        synthetic commentThenAnnotation2
+        synthetic isOriginVariable commentThenAnnotation2
           reference: <testLibrary>::@class::C::@getter::commentThenAnnotation2
           firstFragment: #F20
           returnType: int
           variable: <testLibrary>::@class::C::@field::commentThenAnnotation2
-        synthetic commentAroundAnnotation
+        synthetic isOriginVariable commentAroundAnnotation
           reference: <testLibrary>::@class::C::@getter::commentAroundAnnotation
           firstFragment: #F21
           returnType: int
           variable: <testLibrary>::@class::C::@field::commentAroundAnnotation
-        synthetic commentAroundAnnotation2
+        synthetic isOriginVariable commentAroundAnnotation2
           reference: <testLibrary>::@class::C::@getter::commentAroundAnnotation2
           firstFragment: #F22
           returnType: int
           variable: <testLibrary>::@class::C::@field::commentAroundAnnotation2
       setters
-        synthetic hasDocComment
+        synthetic isOriginVariable hasDocComment
           reference: <testLibrary>::@class::C::@setter::hasDocComment
           firstFragment: #F23
           formalParameters
@@ -1330,7 +1513,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::hasDocComment
-        synthetic hasDocComment2
+        synthetic isOriginVariable hasDocComment2
           reference: <testLibrary>::@class::C::@setter::hasDocComment2
           firstFragment: #F25
           formalParameters
@@ -1339,7 +1522,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::hasDocComment2
-        synthetic hasAnnotation
+        synthetic isOriginVariable hasAnnotation
           reference: <testLibrary>::@class::C::@setter::hasAnnotation
           firstFragment: #F27
           formalParameters
@@ -1348,7 +1531,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::hasAnnotation
-        synthetic hasAnnotation2
+        synthetic isOriginVariable hasAnnotation2
           reference: <testLibrary>::@class::C::@setter::hasAnnotation2
           firstFragment: #F29
           formalParameters
@@ -1357,7 +1540,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::hasAnnotation2
-        synthetic annotationThenComment
+        synthetic isOriginVariable annotationThenComment
           reference: <testLibrary>::@class::C::@setter::annotationThenComment
           firstFragment: #F31
           formalParameters
@@ -1366,7 +1549,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::annotationThenComment
-        synthetic annotationThenComment2
+        synthetic isOriginVariable annotationThenComment2
           reference: <testLibrary>::@class::C::@setter::annotationThenComment2
           firstFragment: #F33
           formalParameters
@@ -1375,7 +1558,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::annotationThenComment2
-        synthetic commentThenAnnotation
+        synthetic isOriginVariable commentThenAnnotation
           reference: <testLibrary>::@class::C::@setter::commentThenAnnotation
           firstFragment: #F35
           formalParameters
@@ -1384,7 +1567,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::commentThenAnnotation
-        synthetic commentThenAnnotation2
+        synthetic isOriginVariable commentThenAnnotation2
           reference: <testLibrary>::@class::C::@setter::commentThenAnnotation2
           firstFragment: #F37
           formalParameters
@@ -1393,7 +1576,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::commentThenAnnotation2
-        synthetic commentAroundAnnotation
+        synthetic isOriginVariable commentAroundAnnotation
           reference: <testLibrary>::@class::C::@setter::commentAroundAnnotation
           firstFragment: #F39
           formalParameters
@@ -1402,7 +1585,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::C::@field::commentAroundAnnotation
-        synthetic commentAroundAnnotation2
+        synthetic isOriginVariable commentAroundAnnotation2
           reference: <testLibrary>::@class::C::@setter::commentAroundAnnotation2
           firstFragment: #F41
           formalParameters
@@ -1623,7 +1806,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -1704,7 +1887,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -1935,112 +2118,112 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer withInit (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration withInit (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::withInit
-        #F2 withoutInit (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F2 isOriginDeclaration withoutInit (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::withoutInit
-        #F3 hasInitializer multiWithInit (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F3 hasInitializer isOriginDeclaration multiWithInit (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::multiWithInit
-        #F4 multiWithoutInit (nameOffset:68) (firstTokenOffset:68) (offset:68)
+        #F4 isOriginDeclaration multiWithoutInit (nameOffset:68) (firstTokenOffset:68) (offset:68)
           element: <testLibrary>::@topLevelVariable::multiWithoutInit
-        #F5 hasInitializer multiWithInit2 (nameOffset:86) (firstTokenOffset:86) (offset:86)
+        #F5 hasInitializer isOriginDeclaration multiWithInit2 (nameOffset:86) (firstTokenOffset:86) (offset:86)
           element: <testLibrary>::@topLevelVariable::multiWithInit2
       getters
-        #F6 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F6 synthetic isOriginVariable withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::withInit
-        #F7 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F7 synthetic isOriginVariable withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::withoutInit
-        #F8 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F8 synthetic isOriginVariable multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::multiWithInit
-        #F9 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
+        #F9 synthetic isOriginVariable multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
           element: <testLibrary>::@getter::multiWithoutInit
-        #F10 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
+        #F10 synthetic isOriginVariable multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
           element: <testLibrary>::@getter::multiWithInit2
       setters
-        #F11 synthetic withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F11 synthetic isOriginVariable withInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::withInit
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::withInit::@formalParameter::value
-        #F13 synthetic withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F13 synthetic isOriginVariable withoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@setter::withoutInit
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@setter::withoutInit::@formalParameter::value
-        #F15 synthetic multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F15 synthetic isOriginVariable multiWithInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::multiWithInit
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@setter::multiWithInit::@formalParameter::value
-        #F17 synthetic multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
+        #F17 synthetic isOriginVariable multiWithoutInit (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
           element: <testLibrary>::@setter::multiWithoutInit
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
               element: <testLibrary>::@setter::multiWithoutInit::@formalParameter::value
-        #F19 synthetic multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
+        #F19 synthetic isOriginVariable multiWithInit2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
           element: <testLibrary>::@setter::multiWithInit2
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:86)
               element: <testLibrary>::@setter::multiWithInit2::@formalParameter::value
   topLevelVariables
-    hasInitializer withInit
+    hasInitializer isOriginDeclaration withInit
       reference: <testLibrary>::@topLevelVariable::withInit
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::withInit
       setter: <testLibrary>::@setter::withInit
-    withoutInit
+    isOriginDeclaration withoutInit
       reference: <testLibrary>::@topLevelVariable::withoutInit
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::withoutInit
       setter: <testLibrary>::@setter::withoutInit
-    hasInitializer multiWithInit
+    hasInitializer isOriginDeclaration multiWithInit
       reference: <testLibrary>::@topLevelVariable::multiWithInit
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::multiWithInit
       setter: <testLibrary>::@setter::multiWithInit
-    multiWithoutInit
+    isOriginDeclaration multiWithoutInit
       reference: <testLibrary>::@topLevelVariable::multiWithoutInit
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::multiWithoutInit
       setter: <testLibrary>::@setter::multiWithoutInit
-    hasInitializer multiWithInit2
+    hasInitializer isOriginDeclaration multiWithInit2
       reference: <testLibrary>::@topLevelVariable::multiWithInit2
       firstFragment: #F5
       type: int
       getter: <testLibrary>::@getter::multiWithInit2
       setter: <testLibrary>::@setter::multiWithInit2
   getters
-    synthetic static withInit
+    synthetic static isOriginVariable withInit
       reference: <testLibrary>::@getter::withInit
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::withInit
-    synthetic static withoutInit
+    synthetic static isOriginVariable withoutInit
       reference: <testLibrary>::@getter::withoutInit
       firstFragment: #F7
       returnType: int
       variable: <testLibrary>::@topLevelVariable::withoutInit
-    synthetic static multiWithInit
+    synthetic static isOriginVariable multiWithInit
       reference: <testLibrary>::@getter::multiWithInit
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::multiWithInit
-    synthetic static multiWithoutInit
+    synthetic static isOriginVariable multiWithoutInit
       reference: <testLibrary>::@getter::multiWithoutInit
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::multiWithoutInit
-    synthetic static multiWithInit2
+    synthetic static isOriginVariable multiWithInit2
       reference: <testLibrary>::@getter::multiWithInit2
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::multiWithInit2
   setters
-    synthetic static withInit
+    synthetic static isOriginVariable withInit
       reference: <testLibrary>::@setter::withInit
       firstFragment: #F11
       formalParameters
@@ -2049,7 +2232,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::withInit
-    synthetic static withoutInit
+    synthetic static isOriginVariable withoutInit
       reference: <testLibrary>::@setter::withoutInit
       firstFragment: #F13
       formalParameters
@@ -2058,7 +2241,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::withoutInit
-    synthetic static multiWithInit
+    synthetic static isOriginVariable multiWithInit
       reference: <testLibrary>::@setter::multiWithInit
       firstFragment: #F15
       formalParameters
@@ -2067,7 +2250,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::multiWithInit
-    synthetic static multiWithoutInit
+    synthetic static isOriginVariable multiWithoutInit
       reference: <testLibrary>::@setter::multiWithoutInit
       firstFragment: #F17
       formalParameters
@@ -2076,7 +2259,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::multiWithoutInit
-    synthetic static multiWithInit2
+    synthetic static isOriginVariable multiWithInit2
       reference: <testLibrary>::@setter::multiWithInit2
       firstFragment: #F19
       formalParameters
@@ -2120,13 +2303,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasDocComment (nameOffset:34) (firstTokenOffset:34) (offset:34)
+        #F1 isOriginDeclaration hasDocComment (nameOffset:34) (firstTokenOffset:34) (offset:34)
           element: <testLibrary>::@topLevelVariable::hasDocComment
           documentationComment: /// Comment 1.\n/// Comment 2.
-        #F2 hasDocComment2 (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F2 isOriginDeclaration hasDocComment2 (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::hasDocComment2
           documentationComment: /// Comment 1.\n/// Comment 2.
-        #F3 hasAnnotation (nameOffset:80) (firstTokenOffset:80) (offset:80)
+        #F3 isOriginDeclaration hasAnnotation (nameOffset:80) (firstTokenOffset:80) (offset:80)
           element: <testLibrary>::@topLevelVariable::hasAnnotation
           metadata
             Annotation
@@ -2139,7 +2322,7 @@
                 leftParenthesis: ( @73
                 rightParenthesis: ) @74
               element: dart:core::@class::Object::@constructor::new
-        #F4 hasAnnotation2 (nameOffset:95) (firstTokenOffset:95) (offset:95)
+        #F4 isOriginDeclaration hasAnnotation2 (nameOffset:95) (firstTokenOffset:95) (offset:95)
           element: <testLibrary>::@topLevelVariable::hasAnnotation2
           metadata
             Annotation
@@ -2152,7 +2335,7 @@
                 leftParenthesis: ( @73
                 rightParenthesis: ) @74
               element: dart:core::@class::Object::@constructor::new
-        #F5 annotationThenComment (nameOffset:156) (firstTokenOffset:156) (offset:156)
+        #F5 isOriginDeclaration annotationThenComment (nameOffset:156) (firstTokenOffset:156) (offset:156)
           element: <testLibrary>::@topLevelVariable::annotationThenComment
           documentationComment: /// Comment 1.\n/// Comment 2.
           metadata
@@ -2166,7 +2349,7 @@
                 leftParenthesis: ( @119
                 rightParenthesis: ) @120
               element: dart:core::@class::Object::@constructor::new
-        #F6 annotationThenComment2 (nameOffset:179) (firstTokenOffset:179) (offset:179)
+        #F6 isOriginDeclaration annotationThenComment2 (nameOffset:179) (firstTokenOffset:179) (offset:179)
           element: <testLibrary>::@topLevelVariable::annotationThenComment2
           documentationComment: /// Comment 1.\n/// Comment 2.
           metadata
@@ -2180,7 +2363,7 @@
                 leftParenthesis: ( @119
                 rightParenthesis: ) @120
               element: dart:core::@class::Object::@constructor::new
-        #F7 commentThenAnnotation (nameOffset:248) (firstTokenOffset:248) (offset:248)
+        #F7 isOriginDeclaration commentThenAnnotation (nameOffset:248) (firstTokenOffset:248) (offset:248)
           element: <testLibrary>::@topLevelVariable::commentThenAnnotation
           documentationComment: /// Comment 1.\n/// Comment 2.
           metadata
@@ -2194,7 +2377,7 @@
                 leftParenthesis: ( @241
                 rightParenthesis: ) @242
               element: dart:core::@class::Object::@constructor::new
-        #F8 commentThenAnnotation2 (nameOffset:271) (firstTokenOffset:271) (offset:271)
+        #F8 isOriginDeclaration commentThenAnnotation2 (nameOffset:271) (firstTokenOffset:271) (offset:271)
           element: <testLibrary>::@topLevelVariable::commentThenAnnotation2
           documentationComment: /// Comment 1.\n/// Comment 2.
           metadata
@@ -2208,7 +2391,7 @@
                 leftParenthesis: ( @241
                 rightParenthesis: ) @242
               element: dart:core::@class::Object::@constructor::new
-        #F9 commentAroundAnnotation (nameOffset:340) (firstTokenOffset:340) (offset:340)
+        #F9 isOriginDeclaration commentAroundAnnotation (nameOffset:340) (firstTokenOffset:340) (offset:340)
           element: <testLibrary>::@topLevelVariable::commentAroundAnnotation
           documentationComment: /// Comment 2.
           metadata
@@ -2222,7 +2405,7 @@
                 leftParenthesis: ( @318
                 rightParenthesis: ) @319
               element: dart:core::@class::Object::@constructor::new
-        #F10 commentAroundAnnotation2 (nameOffset:365) (firstTokenOffset:365) (offset:365)
+        #F10 isOriginDeclaration commentAroundAnnotation2 (nameOffset:365) (firstTokenOffset:365) (offset:365)
           element: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
           documentationComment: /// Comment 2.
           metadata
@@ -2237,93 +2420,93 @@
                 rightParenthesis: ) @319
               element: dart:core::@class::Object::@constructor::new
       getters
-        #F11 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F11 synthetic isOriginVariable hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@getter::hasDocComment
-        #F12 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F12 synthetic isOriginVariable hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::hasDocComment2
-        #F13 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+        #F13 synthetic isOriginVariable hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
           element: <testLibrary>::@getter::hasAnnotation
-        #F14 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
+        #F14 synthetic isOriginVariable hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
           element: <testLibrary>::@getter::hasAnnotation2
-        #F15 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
+        #F15 synthetic isOriginVariable annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
           element: <testLibrary>::@getter::annotationThenComment
-        #F16 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
+        #F16 synthetic isOriginVariable annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
           element: <testLibrary>::@getter::annotationThenComment2
-        #F17 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
+        #F17 synthetic isOriginVariable commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
           element: <testLibrary>::@getter::commentThenAnnotation
-        #F18 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
+        #F18 synthetic isOriginVariable commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
           element: <testLibrary>::@getter::commentThenAnnotation2
-        #F19 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
+        #F19 synthetic isOriginVariable commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
           element: <testLibrary>::@getter::commentAroundAnnotation
-        #F20 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
+        #F20 synthetic isOriginVariable commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
           element: <testLibrary>::@getter::commentAroundAnnotation2
       setters
-        #F21 synthetic hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F21 synthetic isOriginVariable hasDocComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@setter::hasDocComment
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@setter::hasDocComment::@formalParameter::value
-        #F23 synthetic hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F23 synthetic isOriginVariable hasDocComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::hasDocComment2
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@setter::hasDocComment2::@formalParameter::value
-        #F25 synthetic hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+        #F25 synthetic isOriginVariable hasAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
           element: <testLibrary>::@setter::hasAnnotation
           formalParameters
             #F26 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
               element: <testLibrary>::@setter::hasAnnotation::@formalParameter::value
-        #F27 synthetic hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
+        #F27 synthetic isOriginVariable hasAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
           element: <testLibrary>::@setter::hasAnnotation2
           formalParameters
             #F28 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:95)
               element: <testLibrary>::@setter::hasAnnotation2::@formalParameter::value
-        #F29 synthetic annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
+        #F29 synthetic isOriginVariable annotationThenComment (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
           element: <testLibrary>::@setter::annotationThenComment
           formalParameters
             #F30 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:156)
               element: <testLibrary>::@setter::annotationThenComment::@formalParameter::value
-        #F31 synthetic annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
+        #F31 synthetic isOriginVariable annotationThenComment2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
           element: <testLibrary>::@setter::annotationThenComment2
           formalParameters
             #F32 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:179)
               element: <testLibrary>::@setter::annotationThenComment2::@formalParameter::value
-        #F33 synthetic commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
+        #F33 synthetic isOriginVariable commentThenAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
           element: <testLibrary>::@setter::commentThenAnnotation
           formalParameters
             #F34 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:248)
               element: <testLibrary>::@setter::commentThenAnnotation::@formalParameter::value
-        #F35 synthetic commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
+        #F35 synthetic isOriginVariable commentThenAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
           element: <testLibrary>::@setter::commentThenAnnotation2
           formalParameters
             #F36 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:271)
               element: <testLibrary>::@setter::commentThenAnnotation2::@formalParameter::value
-        #F37 synthetic commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
+        #F37 synthetic isOriginVariable commentAroundAnnotation (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
           element: <testLibrary>::@setter::commentAroundAnnotation
           formalParameters
             #F38 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:340)
               element: <testLibrary>::@setter::commentAroundAnnotation::@formalParameter::value
-        #F39 synthetic commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
+        #F39 synthetic isOriginVariable commentAroundAnnotation2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
           element: <testLibrary>::@setter::commentAroundAnnotation2
           formalParameters
             #F40 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:365)
               element: <testLibrary>::@setter::commentAroundAnnotation2::@formalParameter::value
   topLevelVariables
-    hasDocComment
+    isOriginDeclaration hasDocComment
       reference: <testLibrary>::@topLevelVariable::hasDocComment
       firstFragment: #F1
       documentationComment: /// Comment 1.\n/// Comment 2.
       type: int
       getter: <testLibrary>::@getter::hasDocComment
       setter: <testLibrary>::@setter::hasDocComment
-    hasDocComment2
+    isOriginDeclaration hasDocComment2
       reference: <testLibrary>::@topLevelVariable::hasDocComment2
       firstFragment: #F2
       documentationComment: /// Comment 1.\n/// Comment 2.
       type: int
       getter: <testLibrary>::@getter::hasDocComment2
       setter: <testLibrary>::@setter::hasDocComment2
-    hasAnnotation
+    isOriginDeclaration hasAnnotation
       reference: <testLibrary>::@topLevelVariable::hasAnnotation
       firstFragment: #F3
       metadata
@@ -2340,7 +2523,7 @@
       type: int
       getter: <testLibrary>::@getter::hasAnnotation
       setter: <testLibrary>::@setter::hasAnnotation
-    hasAnnotation2
+    isOriginDeclaration hasAnnotation2
       reference: <testLibrary>::@topLevelVariable::hasAnnotation2
       firstFragment: #F4
       metadata
@@ -2357,7 +2540,7 @@
       type: int
       getter: <testLibrary>::@getter::hasAnnotation2
       setter: <testLibrary>::@setter::hasAnnotation2
-    annotationThenComment
+    isOriginDeclaration annotationThenComment
       reference: <testLibrary>::@topLevelVariable::annotationThenComment
       firstFragment: #F5
       documentationComment: /// Comment 1.\n/// Comment 2.
@@ -2375,7 +2558,7 @@
       type: int
       getter: <testLibrary>::@getter::annotationThenComment
       setter: <testLibrary>::@setter::annotationThenComment
-    annotationThenComment2
+    isOriginDeclaration annotationThenComment2
       reference: <testLibrary>::@topLevelVariable::annotationThenComment2
       firstFragment: #F6
       documentationComment: /// Comment 1.\n/// Comment 2.
@@ -2393,7 +2576,7 @@
       type: int
       getter: <testLibrary>::@getter::annotationThenComment2
       setter: <testLibrary>::@setter::annotationThenComment2
-    commentThenAnnotation
+    isOriginDeclaration commentThenAnnotation
       reference: <testLibrary>::@topLevelVariable::commentThenAnnotation
       firstFragment: #F7
       documentationComment: /// Comment 1.\n/// Comment 2.
@@ -2411,7 +2594,7 @@
       type: int
       getter: <testLibrary>::@getter::commentThenAnnotation
       setter: <testLibrary>::@setter::commentThenAnnotation
-    commentThenAnnotation2
+    isOriginDeclaration commentThenAnnotation2
       reference: <testLibrary>::@topLevelVariable::commentThenAnnotation2
       firstFragment: #F8
       documentationComment: /// Comment 1.\n/// Comment 2.
@@ -2429,7 +2612,7 @@
       type: int
       getter: <testLibrary>::@getter::commentThenAnnotation2
       setter: <testLibrary>::@setter::commentThenAnnotation2
-    commentAroundAnnotation
+    isOriginDeclaration commentAroundAnnotation
       reference: <testLibrary>::@topLevelVariable::commentAroundAnnotation
       firstFragment: #F9
       documentationComment: /// Comment 2.
@@ -2447,7 +2630,7 @@
       type: int
       getter: <testLibrary>::@getter::commentAroundAnnotation
       setter: <testLibrary>::@setter::commentAroundAnnotation
-    commentAroundAnnotation2
+    isOriginDeclaration commentAroundAnnotation2
       reference: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
       firstFragment: #F10
       documentationComment: /// Comment 2.
@@ -2466,58 +2649,58 @@
       getter: <testLibrary>::@getter::commentAroundAnnotation2
       setter: <testLibrary>::@setter::commentAroundAnnotation2
   getters
-    synthetic static hasDocComment
+    synthetic static isOriginVariable hasDocComment
       reference: <testLibrary>::@getter::hasDocComment
       firstFragment: #F11
       returnType: int
       variable: <testLibrary>::@topLevelVariable::hasDocComment
-    synthetic static hasDocComment2
+    synthetic static isOriginVariable hasDocComment2
       reference: <testLibrary>::@getter::hasDocComment2
       firstFragment: #F12
       returnType: int
       variable: <testLibrary>::@topLevelVariable::hasDocComment2
-    synthetic static hasAnnotation
+    synthetic static isOriginVariable hasAnnotation
       reference: <testLibrary>::@getter::hasAnnotation
       firstFragment: #F13
       returnType: int
       variable: <testLibrary>::@topLevelVariable::hasAnnotation
-    synthetic static hasAnnotation2
+    synthetic static isOriginVariable hasAnnotation2
       reference: <testLibrary>::@getter::hasAnnotation2
       firstFragment: #F14
       returnType: int
       variable: <testLibrary>::@topLevelVariable::hasAnnotation2
-    synthetic static annotationThenComment
+    synthetic static isOriginVariable annotationThenComment
       reference: <testLibrary>::@getter::annotationThenComment
       firstFragment: #F15
       returnType: int
       variable: <testLibrary>::@topLevelVariable::annotationThenComment
-    synthetic static annotationThenComment2
+    synthetic static isOriginVariable annotationThenComment2
       reference: <testLibrary>::@getter::annotationThenComment2
       firstFragment: #F16
       returnType: int
       variable: <testLibrary>::@topLevelVariable::annotationThenComment2
-    synthetic static commentThenAnnotation
+    synthetic static isOriginVariable commentThenAnnotation
       reference: <testLibrary>::@getter::commentThenAnnotation
       firstFragment: #F17
       returnType: int
       variable: <testLibrary>::@topLevelVariable::commentThenAnnotation
-    synthetic static commentThenAnnotation2
+    synthetic static isOriginVariable commentThenAnnotation2
       reference: <testLibrary>::@getter::commentThenAnnotation2
       firstFragment: #F18
       returnType: int
       variable: <testLibrary>::@topLevelVariable::commentThenAnnotation2
-    synthetic static commentAroundAnnotation
+    synthetic static isOriginVariable commentAroundAnnotation
       reference: <testLibrary>::@getter::commentAroundAnnotation
       firstFragment: #F19
       returnType: int
       variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation
-    synthetic static commentAroundAnnotation2
+    synthetic static isOriginVariable commentAroundAnnotation2
       reference: <testLibrary>::@getter::commentAroundAnnotation2
       firstFragment: #F20
       returnType: int
       variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation2
   setters
-    synthetic static hasDocComment
+    synthetic static isOriginVariable hasDocComment
       reference: <testLibrary>::@setter::hasDocComment
       firstFragment: #F21
       formalParameters
@@ -2526,7 +2709,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::hasDocComment
-    synthetic static hasDocComment2
+    synthetic static isOriginVariable hasDocComment2
       reference: <testLibrary>::@setter::hasDocComment2
       firstFragment: #F23
       formalParameters
@@ -2535,7 +2718,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::hasDocComment2
-    synthetic static hasAnnotation
+    synthetic static isOriginVariable hasAnnotation
       reference: <testLibrary>::@setter::hasAnnotation
       firstFragment: #F25
       formalParameters
@@ -2544,7 +2727,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::hasAnnotation
-    synthetic static hasAnnotation2
+    synthetic static isOriginVariable hasAnnotation2
       reference: <testLibrary>::@setter::hasAnnotation2
       firstFragment: #F27
       formalParameters
@@ -2553,7 +2736,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::hasAnnotation2
-    synthetic static annotationThenComment
+    synthetic static isOriginVariable annotationThenComment
       reference: <testLibrary>::@setter::annotationThenComment
       firstFragment: #F29
       formalParameters
@@ -2562,7 +2745,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::annotationThenComment
-    synthetic static annotationThenComment2
+    synthetic static isOriginVariable annotationThenComment2
       reference: <testLibrary>::@setter::annotationThenComment2
       firstFragment: #F31
       formalParameters
@@ -2571,7 +2754,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::annotationThenComment2
-    synthetic static commentThenAnnotation
+    synthetic static isOriginVariable commentThenAnnotation
       reference: <testLibrary>::@setter::commentThenAnnotation
       firstFragment: #F33
       formalParameters
@@ -2580,7 +2763,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::commentThenAnnotation
-    synthetic static commentThenAnnotation2
+    synthetic static isOriginVariable commentThenAnnotation2
       reference: <testLibrary>::@setter::commentThenAnnotation2
       firstFragment: #F35
       formalParameters
@@ -2589,7 +2772,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::commentThenAnnotation2
-    synthetic static commentAroundAnnotation
+    synthetic static isOriginVariable commentAroundAnnotation
       reference: <testLibrary>::@setter::commentAroundAnnotation
       firstFragment: #F37
       formalParameters
@@ -2598,7 +2781,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::commentAroundAnnotation
-    synthetic static commentAroundAnnotation2
+    synthetic static isOriginVariable commentAroundAnnotation2
       reference: <testLibrary>::@setter::commentAroundAnnotation2
       firstFragment: #F39
       formalParameters
@@ -2629,7 +2812,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       functions
@@ -2646,7 +2829,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   functions
@@ -2678,11 +2861,11 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
-            #F3 named (nameOffset:21) (firstTokenOffset:19) (offset:21)
+            #F3 isOriginDeclaration named (nameOffset:21) (firstTokenOffset:19) (offset:21)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 19
@@ -2692,10 +2875,10 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
 ''');
@@ -2717,7 +2900,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -2729,7 +2912,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -2755,17 +2938,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -2775,24 +2958,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -2820,31 +3003,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
+            #F4 isOriginDeclaration foo (nameOffset:20) (firstTokenOffset:12) (offset:20)
               element: <testLibrary>::@class::A::@getter::foo
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int
@@ -2868,7 +3051,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -2885,7 +3068,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -2919,14 +3102,14 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F4 foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
+            #F4 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F5 requiredPositional x (nameOffset:24) (firstTokenOffset:20) (offset:24)
@@ -2936,17 +3119,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F4
           formalParameters
@@ -2975,7 +3158,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -2986,7 +3169,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -3222,19 +3405,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
diff --git a/pkg/analyzer/test/src/summary/elements/part_include_test.dart b/pkg/analyzer/test/src/summary/elements/part_include_test.dart
index e8748bb..b53564a 100644
--- a/pkg/analyzer/test/src/summary/elements/part_include_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/part_include_test.dart
@@ -239,7 +239,7 @@
         #F2 class A (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::A
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
     #F1 package:test/a.dart
@@ -250,7 +250,7 @@
         #F4 class B (nameOffset:22) (firstTokenOffset:16) (offset:22)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -258,14 +258,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
 ''');
@@ -296,7 +296,7 @@
         #F2 class A (nameOffset:21) (firstTokenOffset:15) (offset:21)
           element: <testLibrary>::@class::A
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
     #F1 package:test/a.dart
@@ -307,7 +307,7 @@
         #F4 class B (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -315,14 +315,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
 ''');
diff --git a/pkg/analyzer/test/src/summary/elements/record_type_test.dart b/pkg/analyzer/test/src/summary/elements/record_type_test.dart
index c3a72ad..e241359 100644
--- a/pkg/analyzer/test/src/summary/elements/record_type_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/record_type_test.dart
@@ -32,31 +32,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 x (nameOffset:32) (firstTokenOffset:32) (offset:32)
+            #F2 isOriginDeclaration x (nameOffset:32) (firstTokenOffset:32) (offset:32)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::A::@getter::x
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final x
+        final isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: (int, String)
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: (int, String)
@@ -80,31 +80,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer x (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::A::@getter::x
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        final hasInitializer x
+        final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: (int, bool)
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: (int, bool)
@@ -128,7 +128,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -142,7 +142,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -173,7 +173,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -184,7 +184,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -212,7 +212,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
   classes
@@ -224,7 +224,7 @@
           firstFragment: #F2
           bound: (int, String)
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
 ''');
@@ -521,19 +521,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 x (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F1 isOriginDeclaration x (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    final x
+    final isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: (int, String)
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: (int, String)
@@ -552,19 +552,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    final hasInitializer x
+    final hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: (int, bool)
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: (int, bool)
@@ -583,7 +583,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             TypeLiteral
@@ -617,10 +617,10 @@
                 type: List<({int f1, String f2})>
               staticType: Type
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Type
@@ -629,7 +629,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Type
@@ -648,7 +648,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             TypeLiteral
@@ -678,10 +678,10 @@
                 type: List<(int, String)>
               staticType: Type
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Type
@@ -690,7 +690,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Type
diff --git a/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart b/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
index 3e47e53..033f4d4 100644
--- a/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
@@ -49,7 +49,7 @@
         #F1 class A (nameOffset:47) (firstTokenOffset:26) (offset:47)
           element: dart:foo::@class::A
           constructors
-            #F2 named (nameOffset:55) (firstTokenOffset:53) (offset:55)
+            #F2 isOriginDeclaration named (nameOffset:55) (firstTokenOffset:53) (offset:55)
               element: dart:foo::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 53
@@ -57,7 +57,7 @@
         #F3 class B (nameOffset:73) (firstTokenOffset:67) (offset:73)
           element: dart:foo::@class::B
           constructors
-            #F4 named (nameOffset:81) (firstTokenOffset:79) (offset:81)
+            #F4 isOriginDeclaration named (nameOffset:81) (firstTokenOffset:79) (offset:81)
               element: dart:foo::@class::B::@constructor::named
               typeName: B
               typeNameOffset: 79
@@ -68,7 +68,7 @@
       firstFragment: #F1
       sinceSdkVersion: 2.15.0
       constructors
-        named
+        isOriginDeclaration named
           reference: dart:foo::@class::A::@constructor::named
           firstFragment: #F2
           sinceSdkVersion: 2.15.0
@@ -76,7 +76,7 @@
       reference: dart:foo::@class::B
       firstFragment: #F3
       constructors
-        named
+        isOriginDeclaration named
           reference: dart:foo::@class::B::@constructor::named
           firstFragment: #F4
 ''');
@@ -102,13 +102,13 @@
         #F1 class A (nameOffset:47) (firstTokenOffset:26) (offset:47)
           element: dart:foo::@class::A
           fields
-            #F2 hasInitializer foo (nameOffset:57) (firstTokenOffset:57) (offset:57)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:57) (firstTokenOffset:57) (offset:57)
               element: dart:foo::@class::A::@field::foo
           getters
-            #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: dart:foo::@class::A::@getter::foo
           setters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: dart:foo::@class::A::@setter::foo
               formalParameters
                 #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
@@ -119,7 +119,7 @@
       firstFragment: #F1
       sinceSdkVersion: 2.15.0
       fields
-        hasInitializer foo
+        hasInitializer isOriginDeclaration foo
           reference: dart:foo::@class::A::@field::foo
           firstFragment: #F2
           sinceSdkVersion: 2.15.0
@@ -127,14 +127,14 @@
           getter: dart:foo::@class::A::@getter::foo
           setter: dart:foo::@class::A::@setter::foo
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: dart:foo::@class::A::@getter::foo
           firstFragment: #F3
           sinceSdkVersion: 2.15.0
           returnType: int
           variable: dart:foo::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: dart:foo::@class::A::@setter::foo
           firstFragment: #F4
           sinceSdkVersion: 2.15.0
@@ -167,10 +167,10 @@
         #F1 class A (nameOffset:47) (firstTokenOffset:26) (offset:47)
           element: dart:foo::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: dart:foo::@class::A::@field::foo
           getters
-            #F3 foo (nameOffset:61) (firstTokenOffset:53) (offset:61)
+            #F3 isOriginDeclaration foo (nameOffset:61) (firstTokenOffset:53) (offset:61)
               element: dart:foo::@class::A::@getter::foo
   classes
     class A
@@ -178,14 +178,14 @@
       firstFragment: #F1
       sinceSdkVersion: 2.15.0
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: dart:foo::@class::A::@field::foo
           firstFragment: #F2
           sinceSdkVersion: 2.15.0
           type: int
           getter: dart:foo::@class::A::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: dart:foo::@class::A::@getter::foo
           firstFragment: #F3
           sinceSdkVersion: 2.15.0
@@ -324,10 +324,10 @@
         #F1 class A (nameOffset:47) (firstTokenOffset:26) (offset:47)
           element: dart:foo::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: dart:foo::@class::A::@field::foo
           setters
-            #F3 foo (nameOffset:57) (firstTokenOffset:53) (offset:57)
+            #F3 isOriginDeclaration foo (nameOffset:57) (firstTokenOffset:53) (offset:57)
               element: dart:foo::@class::A::@setter::foo
               formalParameters
                 #F4 requiredPositional _ (nameOffset:65) (firstTokenOffset:61) (offset:65)
@@ -338,14 +338,14 @@
       firstFragment: #F1
       sinceSdkVersion: 2.15.0
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: dart:foo::@class::A::@field::foo
           firstFragment: #F2
           sinceSdkVersion: 2.15.0
           type: int
           setter: dart:foo::@class::A::@setter::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: dart:foo::@class::A::@setter::foo
           firstFragment: #F3
           sinceSdkVersion: 2.15.0
@@ -379,7 +379,7 @@
         #F1 enum E (nameOffset:31) (firstTokenOffset:26) (offset:31)
           element: dart:foo::@enum::E
           fields
-            #F2 hasInitializer v1 (nameOffset:37) (firstTokenOffset:37) (offset:37)
+            #F2 hasInitializer isOriginDeclaration v1 (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: dart:foo::@enum::E::@field::v1
               initializer: expression_0
                 InstanceCreationExpression
@@ -393,7 +393,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 hasInitializer v2 (nameOffset:60) (firstTokenOffset:43) (offset:60)
+            #F3 hasInitializer isOriginDeclaration v2 (nameOffset:60) (firstTokenOffset:43) (offset:60)
               element: dart:foo::@enum::E::@field::v2
               initializer: expression_1
                 InstanceCreationExpression
@@ -407,7 +407,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F4 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F4 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: dart:foo::@enum::E::@field::values
               initializer: expression_2
                 ListLiteral
@@ -424,11 +424,11 @@
                   rightBracket: ] @0
                   staticType: List<E>
           getters
-            #F5 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F5 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: dart:foo::@enum::E::@getter::v1
-            #F6 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+            #F6 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
               element: dart:foo::@enum::E::@getter::v2
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F7 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: dart:foo::@enum::E::@getter::values
   enums
     enum E
@@ -436,7 +436,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v1
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v1
           reference: dart:foo::@enum::E::@field::v1
           firstFragment: #F2
           type: E
@@ -444,7 +444,7 @@
             fragment: #F2
             expression: expression_0
           getter: dart:foo::@enum::E::@getter::v1
-        static const enumConstant hasInitializer v2
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v2
           reference: dart:foo::@enum::E::@field::v2
           firstFragment: #F3
           sinceSdkVersion: 2.15.0
@@ -453,7 +453,7 @@
             fragment: #F3
             expression: expression_1
           getter: dart:foo::@enum::E::@getter::v2
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: dart:foo::@enum::E::@field::values
           firstFragment: #F4
           type: List<E>
@@ -462,18 +462,18 @@
             expression: expression_2
           getter: dart:foo::@enum::E::@getter::values
       getters
-        synthetic static v1
+        synthetic static isOriginVariable v1
           reference: dart:foo::@enum::E::@getter::v1
           firstFragment: #F5
           returnType: E
           variable: dart:foo::@enum::E::@field::v1
-        synthetic static v2
+        synthetic static isOriginVariable v2
           reference: dart:foo::@enum::E::@getter::v2
           firstFragment: #F6
           sinceSdkVersion: 2.15.0
           returnType: E
           variable: dart:foo::@enum::E::@field::v2
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: dart:foo::@enum::E::@getter::values
           firstFragment: #F7
           returnType: List<E>
@@ -502,7 +502,7 @@
         #F1 enum E (nameOffset:46) (firstTokenOffset:26) (offset:46)
           element: dart:foo::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:52) (firstTokenOffset:52) (offset:52)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:52) (firstTokenOffset:52) (offset:52)
               element: dart:foo::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -516,7 +516,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: dart:foo::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -529,9 +529,9 @@
                   rightBracket: ] @0
                   staticType: List<E>
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: dart:foo::@enum::E::@getter::v
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: dart:foo::@enum::E::@getter::values
           methods
             #F6 foo (nameOffset:62) (firstTokenOffset:57) (offset:62)
@@ -543,7 +543,7 @@
       sinceSdkVersion: 2.15.0
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: dart:foo::@enum::E::@field::v
           firstFragment: #F2
           sinceSdkVersion: 2.15.0
@@ -552,7 +552,7 @@
             fragment: #F2
             expression: expression_0
           getter: dart:foo::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: dart:foo::@enum::E::@field::values
           firstFragment: #F3
           sinceSdkVersion: 2.15.0
@@ -562,13 +562,13 @@
             expression: expression_1
           getter: dart:foo::@enum::E::@getter::values
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: dart:foo::@enum::E::@getter::v
           firstFragment: #F4
           sinceSdkVersion: 2.15.0
           returnType: E
           variable: dart:foo::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: dart:foo::@enum::E::@getter::values
           firstFragment: #F5
           sinceSdkVersion: 2.15.0
@@ -920,20 +920,20 @@
     #F0 dart:foo
       element: dart:foo
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:47) (firstTokenOffset:47) (offset:47)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:47) (firstTokenOffset:47) (offset:47)
           element: dart:foo::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: dart:foo::@getter::foo
   topLevelVariables
-    final hasInitializer foo
+    final hasImplicitType hasInitializer isOriginDeclaration foo
       reference: dart:foo::@topLevelVariable::foo
       firstFragment: #F1
       sinceSdkVersion: 2.15.0
       type: int
       getter: dart:foo::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: dart:foo::@getter::foo
       firstFragment: #F2
       sinceSdkVersion: 2.15.0
diff --git a/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart b/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart
index 03abc90..19b0ea5 100644
--- a/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/top_level_function_test.dart
@@ -934,7 +934,7 @@
         #F1 class main (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::main
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::main::@constructor::new
               typeName: main
   classes
@@ -942,7 +942,7 @@
       reference: <testLibrary>::@class::main
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::main::@constructor::new
           firstFragment: #F2
 ''');
@@ -962,19 +962,19 @@
         #F1 class main (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::main
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::main::@constructor::new
               typeName: main
         #F3 class C (nameOffset:29) (firstTokenOffset:23) (offset:29)
           element: <testLibrary>::@class::C
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F5 class D (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::D
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
   classes
@@ -985,7 +985,7 @@
       mixins
         D
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::main::@constructor::new
           firstFragment: #F2
           constantInitializers
@@ -1000,14 +1000,14 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
 ''');
@@ -1053,19 +1053,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic main (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter main (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::main
       getters
-        #F2 main (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F2 isOriginDeclaration main (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@getter::main
   topLevelVariables
-    synthetic main
+    synthetic isOriginGetterSetter main
       reference: <testLibrary>::@topLevelVariable::main
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::main
   getters
-    static main
+    static isOriginDeclaration main
       reference: <testLibrary>::@getter::main
       firstFragment: #F2
       returnType: dynamic
@@ -1129,32 +1129,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 main (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration main (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::main
       getters
-        #F2 synthetic main (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable main (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::main
       setters
-        #F3 synthetic main (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable main (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::main
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::main::@formalParameter::value
   topLevelVariables
-    main
+    hasImplicitType isOriginDeclaration main
       reference: <testLibrary>::@topLevelVariable::main
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::main
       setter: <testLibrary>::@setter::main
   getters
-    synthetic static main
+    synthetic static isOriginVariable main
       reference: <testLibrary>::@getter::main
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::main
   setters
-    synthetic static main
+    synthetic static isOriginVariable main
       reference: <testLibrary>::@setter::main
       firstFragment: #F3
       formalParameters
@@ -1256,22 +1256,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
       functions
         #F3 foo (nameOffset:31) (firstTokenOffset:18) (offset:31)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -1297,10 +1297,10 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F2 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F3 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
@@ -1309,13 +1309,13 @@
         #F4 foo (nameOffset:31) (firstTokenOffset:18) (offset:31)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       formalParameters
@@ -1345,13 +1345,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
@@ -1360,20 +1360,20 @@
         #F5 foo (nameOffset:26) (firstTokenOffset:13) (offset:26)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -1551,7 +1551,7 @@
         #F1 class foo (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::foo
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::foo::@constructor::new
               typeName: foo
       functions
@@ -1562,7 +1562,7 @@
       reference: <testLibrary>::@class::foo
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::foo::@constructor::new
           firstFragment: #F2
   functions
diff --git a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
index f1bbb5e..2f14f26 100644
--- a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
@@ -34,44 +34,44 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F2 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F3 a (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F3 isOriginDeclaration a (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::a
       setters
-        #F4 b (nameOffset:20) (firstTokenOffset:16) (offset:20)
+        #F4 isOriginDeclaration b (nameOffset:20) (firstTokenOffset:16) (offset:20)
           element: <testLibrary>::@setter::b
           formalParameters
             #F5 requiredPositional _ (nameOffset:26) (firstTokenOffset:22) (offset:26)
               element: <testLibrary>::@setter::b::@formalParameter::_
-        #F6 a (nameOffset:36) (firstTokenOffset:32) (offset:36)
+        #F6 isOriginDeclaration a (nameOffset:36) (firstTokenOffset:32) (offset:36)
           element: <testLibrary>::@setter::a
           formalParameters
             #F7 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
               element: <testLibrary>::@setter::a::@formalParameter::_
   topLevelVariables
-    synthetic a
+    synthetic isOriginGetterSetter a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    synthetic b
+    synthetic isOriginGetterSetter b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
       setter: <testLibrary>::@setter::b
   getters
-    static a
+    static isOriginDeclaration a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    static b
+    static isOriginDeclaration b
       reference: <testLibrary>::@setter::b
       firstFragment: #F4
       formalParameters
@@ -80,7 +80,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::b
-    static a
+    static isOriginDeclaration a
       reference: <testLibrary>::@setter::a
       firstFragment: #F6
       formalParameters
@@ -105,46 +105,46 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F1 synthetic isOriginGetterSetter a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F2 synthetic isOriginGetterSetter b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F3 b (nameOffset:24) (firstTokenOffset:16) (offset:24)
+        #F3 isOriginDeclaration b (nameOffset:24) (firstTokenOffset:16) (offset:24)
           element: <testLibrary>::@getter::b
-        #F4 a (nameOffset:40) (firstTokenOffset:32) (offset:40)
+        #F4 isOriginDeclaration a (nameOffset:40) (firstTokenOffset:32) (offset:40)
           element: <testLibrary>::@getter::a
       setters
-        #F5 a (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F5 isOriginDeclaration a (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F6 requiredPositional _ (nameOffset:10) (firstTokenOffset:6) (offset:10)
               element: <testLibrary>::@setter::a::@formalParameter::_
   topLevelVariables
-    synthetic a
+    synthetic isOriginGetterSetter a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    synthetic b
+    synthetic isOriginGetterSetter b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::b
   getters
-    static b
+    static isOriginDeclaration b
       reference: <testLibrary>::@getter::b
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::b
-    static a
+    static isOriginDeclaration a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    static a
+    static isOriginDeclaration a
       reference: <testLibrary>::@setter::a
       firstFragment: #F5
       formalParameters
@@ -167,19 +167,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:16) (firstTokenOffset:0) (offset:16)
+        #F2 isOriginDeclaration foo (nameOffset:16) (firstTokenOffset:0) (offset:16)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: Future<int>
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: Future<int>
@@ -201,19 +201,19 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:37) (firstTokenOffset:21) (offset:37)
+        #F2 isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:21) (offset:37)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: Stream<int>
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: Stream<int>
@@ -235,20 +235,20 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 x (nameOffset:64) (firstTokenOffset:44) (offset:64)
+        #F2 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:44) (offset:64)
           element: <testLibrary>::@getter::x
           documentationComment: /**\n * Docs\n */
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       documentationComment: /**\n * Docs\n */
@@ -266,19 +266,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 x (nameOffset:17) (firstTokenOffset:0) (offset:17)
+        #F2 isOriginDeclaration x (nameOffset:17) (firstTokenOffset:0) (offset:17)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
   getters
-    static external x
+    static external isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
@@ -300,26 +300,26 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 f (nameOffset:24) (firstTokenOffset:20) (offset:24)
+            #F4 isOriginDeclaration f (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@class::C::@getter::f
         #F5 class D (nameOffset:52) (firstTokenOffset:37) (offset:52)
           element: <testLibrary>::@class::D
           fields
-            #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F6 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@class::D::@field::f
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F8 f (nameOffset:64) (firstTokenOffset:56) (offset:64)
+            #F8 isOriginDeclaration f (nameOffset:64) (firstTokenOffset:56) (offset:64)
               element: <testLibrary>::@class::D::@getter::f
   classes
     class C
@@ -327,18 +327,18 @@
       firstFragment: #F1
       supertype: D
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::D::@constructor::new
       getters
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
@@ -347,17 +347,17 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::D::@field::f
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::D::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
       getters
-        abstract f
+        abstract isOriginDeclaration f
           reference: <testLibrary>::@class::D::@getter::f
           firstFragment: #F8
           returnType: int
@@ -376,19 +376,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:18) (firstTokenOffset:0) (offset:18)
+        #F2 isOriginDeclaration foo (nameOffset:18) (firstTokenOffset:0) (offset:18)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: Iterator<int>
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: Iterator<int>
@@ -405,33 +405,33 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::x
-        #F2 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@topLevelVariable::y
       getters
-        #F3 x (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F3 isOriginDeclaration x (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::x
-        #F4 y (nameOffset:23) (firstTokenOffset:19) (offset:23)
+        #F4 isOriginDeclaration y (nameOffset:23) (firstTokenOffset:19) (offset:23)
           element: <testLibrary>::@getter::y
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
-    synthetic y
+    synthetic isOriginGetterSetter y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F2
       type: dynamic
       getter: <testLibrary>::@getter::y
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
-    static y
+    static isOriginDeclaration y
       reference: <testLibrary>::@getter::y
       firstFragment: #F4
       returnType: dynamic
@@ -451,32 +451,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 x (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration x (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::x
       setters
-        #F3 x (nameOffset:25) (firstTokenOffset:16) (offset:25)
+        #F3 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:31) (firstTokenOffset:27) (offset:31)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -499,32 +499,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 x (nameOffset:33) (firstTokenOffset:25) (offset:33)
+        #F2 isOriginDeclaration x (nameOffset:33) (firstTokenOffset:25) (offset:33)
           element: <testLibrary>::@getter::x
       setters
-        #F3 x (nameOffset:9) (firstTokenOffset:0) (offset:9)
+        #F3 isOriginDeclaration x (nameOffset:9) (firstTokenOffset:0) (offset:9)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:15) (firstTokenOffset:11) (offset:15)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -550,23 +550,23 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
           element: <testLibrary>::@topLevelVariable::x
       setters
-        #F2 x (nameOffset:69) (firstTokenOffset:44) (offset:69)
+        #F2 isOriginDeclaration x (nameOffset:69) (firstTokenOffset:44) (offset:69)
           element: <testLibrary>::@setter::x
           documentationComment: /**\n * Docs\n */
           formalParameters
             #F3 requiredPositional value (nameOffset:71) (firstTokenOffset:71) (offset:71)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: dynamic
       setter: <testLibrary>::@setter::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F2
       documentationComment: /**\n * Docs\n */
@@ -588,22 +588,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@topLevelVariable::x
       setters
-        #F2 x (nameOffset:18) (firstTokenOffset:0) (offset:18)
+        #F2 isOriginDeclaration x (nameOffset:18) (firstTokenOffset:0) (offset:18)
           element: <testLibrary>::@setter::x
           formalParameters
             #F3 requiredPositional value (nameOffset:24) (firstTokenOffset:20) (offset:24)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::x
   setters
-    static external x
+    static external isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F2
       formalParameters
@@ -624,22 +624,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::f
       setters
-        #F2 f (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F2 isOriginDeclaration f (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::f
           formalParameters
             #F3 requiredPositional value (nameOffset:10) (firstTokenOffset:6) (offset:10)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    synthetic f
+    synthetic isOriginGetterSetter f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::f
   setters
-    static f
+    static isOriginDeclaration f
       reference: <testLibrary>::@setter::f
       firstFragment: #F2
       formalParameters
@@ -662,34 +662,34 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
           element: <testLibrary>::@topLevelVariable::x
-        #F2 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F2 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@topLevelVariable::y
       setters
-        #F3 x (nameOffset:9) (firstTokenOffset:0) (offset:9)
+        #F3 isOriginDeclaration x (nameOffset:9) (firstTokenOffset:0) (offset:9)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:15) (firstTokenOffset:11) (offset:15)
               element: <testLibrary>::@setter::x::@formalParameter::value
-        #F5 y (nameOffset:29) (firstTokenOffset:25) (offset:29)
+        #F5 isOriginDeclaration y (nameOffset:29) (firstTokenOffset:25) (offset:29)
           element: <testLibrary>::@setter::y
           formalParameters
             #F6 requiredPositional value (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@setter::y::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::x
-    synthetic y
+    synthetic isOriginGetterSetter y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F2
       type: dynamic
       setter: <testLibrary>::@setter::y
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -698,7 +698,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x
-    static y
+    static isOriginDeclaration y
       reference: <testLibrary>::@setter::y
       firstFragment: #F5
       formalParameters
@@ -721,32 +721,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 i (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F1 isOriginDeclaration i (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::i
       getters
-        #F2 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::i
       setters
-        #F3 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F3 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@setter::i
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@setter::i::@formalParameter::value
   topLevelVariables
-    i
+    external isOriginDeclaration i
       reference: <testLibrary>::@topLevelVariable::i
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::i
       setter: <testLibrary>::@setter::i
   getters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@getter::i
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::i
   setters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@setter::i
       firstFragment: #F3
       formalParameters
@@ -770,32 +770,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 x (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration x (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::x
       setters
-        #F3 x (nameOffset:25) (firstTokenOffset:16) (offset:25)
+        #F3 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:31) (firstTokenOffset:27) (offset:31)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -819,32 +819,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F1 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 x (nameOffset:33) (firstTokenOffset:25) (offset:33)
+        #F2 isOriginDeclaration x (nameOffset:33) (firstTokenOffset:25) (offset:33)
           element: <testLibrary>::@getter::x
       setters
-        #F3 x (nameOffset:9) (firstTokenOffset:0) (offset:9)
+        #F3 isOriginDeclaration x (nameOffset:9) (firstTokenOffset:0) (offset:9)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:15) (firstTokenOffset:11) (offset:15)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -869,52 +869,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo::@def::0
-        #F2 hasInitializer foo (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F2 hasInitializer isOriginDeclaration foo (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::foo::@def::1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo::@def::0
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::foo::@def::1
       setters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo::@def::0
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@def::0::@formalParameter::value
-        #F7 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F7 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@setter::foo::@def::1
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@setter::foo::@def::1::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::0
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo::@def::0
       setter: <testLibrary>::@setter::foo::@def::0
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::1
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::foo::@def::1
       setter: <testLibrary>::@setter::foo::@def::1
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo::@def::0
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo::@def::1
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo::@def::1
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo::@def::0
       firstFragment: #F5
       formalParameters
@@ -923,7 +923,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo::@def::1
       firstFragment: #F7
       formalParameters
@@ -948,46 +948,46 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo::@def::0
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@topLevelVariable::foo::@def::1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo::@def::0
-        #F4 foo (nameOffset:21) (firstTokenOffset:13) (offset:21)
+        #F4 isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:13) (offset:21)
           element: <testLibrary>::@getter::foo::@def::1
       setters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::0
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo::@def::0
       setter: <testLibrary>::@setter::foo
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::1
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::foo::@def::1
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo::@def::0
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo::@def::1
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo::@def::1
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F5
       formalParameters
@@ -1012,44 +1012,44 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo::@def::0
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@topLevelVariable::foo::@def::1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo::@def::0
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@def::0::@formalParameter::value
-        #F6 foo (nameOffset:17) (firstTokenOffset:13) (offset:17)
+        #F6 isOriginDeclaration foo (nameOffset:17) (firstTokenOffset:13) (offset:17)
           element: <testLibrary>::@setter::foo::@def::1
           formalParameters
             #F7 requiredPositional _ (nameOffset:25) (firstTokenOffset:21) (offset:25)
               element: <testLibrary>::@setter::foo::@def::1::@formalParameter::_
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::0
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo::@def::0
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo::@def::1
       firstFragment: #F2
       type: int
       setter: <testLibrary>::@setter::foo::@def::1
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo::@def::0
       firstFragment: #F4
       formalParameters
@@ -1058,7 +1058,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::foo::@def::0
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo::@def::1
       firstFragment: #F6
       formalParameters
@@ -1083,32 +1083,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 foo (nameOffset:23) (firstTokenOffset:19) (offset:23)
+        #F3 isOriginDeclaration foo (nameOffset:23) (firstTokenOffset:19) (offset:23)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional newValue (nameOffset:31) (firstTokenOffset:27) (offset:31)
               element: <testLibrary>::@setter::foo::@formalParameter::newValue
   topLevelVariables
-    final hasInitializer foo
+    final hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -1129,32 +1129,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1175,17 +1175,17 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer i (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration i (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::i
           initializer: expression_0
             IntegerLiteral
               literal: 0 @14
               staticType: int
       getters
-        #F2 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::i
   topLevelVariables
-    const hasInitializer i
+    const hasInitializer isOriginDeclaration i
       reference: <testLibrary>::@topLevelVariable::i
       firstFragment: #F1
       type: int
@@ -1194,7 +1194,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::i
   getters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@getter::i
       firstFragment: #F2
       returnType: int
@@ -1211,17 +1211,17 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer i (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F1 hasInitializer isOriginDeclaration i (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::i
           initializer: expression_0
             IntegerLiteral
               literal: 0 @19
               staticType: int
       getters
-        #F2 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::i
   topLevelVariables
-    late const hasInitializer i
+    late const hasInitializer isOriginDeclaration i
       reference: <testLibrary>::@topLevelVariable::i
       firstFragment: #F1
       type: int
@@ -1230,7 +1230,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::i
   getters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@getter::i
       firstFragment: #F2
       returnType: int
@@ -1252,20 +1252,20 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 x (nameOffset:64) (firstTokenOffset:64) (offset:64)
+        #F1 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:64) (offset:64)
           element: <testLibrary>::@topLevelVariable::x
           documentationComment: /**\n * Docs\n */
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    x
+    hasImplicitType isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       documentationComment: /**\n * Docs\n */
@@ -1273,13 +1273,13 @@
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1300,19 +1300,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    final hasInitializer x
+    final hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
@@ -1331,19 +1331,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 foo (nameOffset:38) (firstTokenOffset:38) (offset:38)
+        #F1 isOriginDeclaration foo (nameOffset:38) (firstTokenOffset:38) (offset:38)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    final foo
+    final isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int Function(int, {void Function() fn})?
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int Function(int, {void Function() fn})?
@@ -1374,36 +1374,36 @@
           partKeywordOffset: 16
           unit: #F1
       topLevelVariables
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F3 x (nameOffset:39) (firstTokenOffset:31) (offset:39)
+        #F3 isOriginDeclaration x (nameOffset:39) (firstTokenOffset:31) (offset:39)
           element: <testLibrary>::@getter::x
     #F1 package:test/a.dart
       element: <testLibrary>
       enclosingFragment: #F0
       previousFragment: #F0
       setters
-        #F4 x (nameOffset:25) (firstTokenOffset:16) (offset:25)
+        #F4 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@setter::x
           formalParameters
             #F5 requiredPositional _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
               element: <testLibrary>::@setter::x::@formalParameter::_
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F4
       formalParameters
@@ -1439,10 +1439,10 @@
           partKeywordOffset: 16
           unit: #F1
       topLevelVariables
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@topLevelVariable::x
       setters
-        #F3 x (nameOffset:40) (firstTokenOffset:31) (offset:40)
+        #F3 isOriginDeclaration x (nameOffset:40) (firstTokenOffset:31) (offset:40)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional _ (nameOffset:46) (firstTokenOffset:42) (offset:46)
@@ -1452,23 +1452,23 @@
       enclosingFragment: #F0
       previousFragment: #F0
       getters
-        #F5 x (nameOffset:24) (firstTokenOffset:16) (offset:24)
+        #F5 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:16) (offset:24)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1512,36 +1512,36 @@
       previousFragment: #F0
       nextFragment: #F2
       topLevelVariables
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F4 x (nameOffset:24) (firstTokenOffset:16) (offset:24)
+        #F4 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:16) (offset:24)
           element: <testLibrary>::@getter::x
     #F2 package:test/b.dart
       element: <testLibrary>
       enclosingFragment: #F0
       previousFragment: #F1
       setters
-        #F5 x (nameOffset:25) (firstTokenOffset:16) (offset:25)
+        #F5 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@setter::x
           formalParameters
             #F6 requiredPositional _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
               element: <testLibrary>::@setter::x::@formalParameter::_
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F5
       formalParameters
@@ -1576,32 +1576,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    x
+    hasImplicitType isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1622,32 +1622,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -1668,19 +1668,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    final hasInitializer v
+    final hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -1697,19 +1697,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
   topLevelVariables
-    final hasInitializer v
+    final hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
@@ -1728,7 +1728,7 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             RecordLiteral
@@ -1743,10 +1743,10 @@
               rightParenthesis: ) @18
               staticType: (int, bool)
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: (int, bool)
@@ -1755,7 +1755,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: (int, bool)
@@ -1781,7 +1781,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       extensions
@@ -1791,13 +1791,13 @@
             #F4 f (nameOffset:43) (firstTokenOffset:32) (offset:43)
               element: <testLibrary>::@extension::E::@method::f
       topLevelVariables
-        #F5 hasInitializer x (nameOffset:59) (firstTokenOffset:59) (offset:59)
+        #F5 hasInitializer isOriginDeclaration x (nameOffset:59) (firstTokenOffset:59) (offset:59)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@getter::x
       setters
-        #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@setter::x
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
@@ -1807,7 +1807,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   extensions
@@ -1822,20 +1822,20 @@
           firstFragment: #F4
           returnType: int
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F5
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F7
       formalParameters
@@ -1856,32 +1856,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -1902,32 +1902,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:9) (firstTokenOffset:9) (offset:9)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:9) (firstTokenOffset:9) (offset:9)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    late hasInitializer x
+    late hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1948,32 +1948,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 x (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F1 isOriginDeclaration x (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    late final x
+    late final isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1994,19 +1994,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    late final hasInitializer x
+    late final hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
@@ -2025,52 +2025,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 a (nameOffset:8) (firstTokenOffset:8) (offset:8)
+        #F1 isOriginDeclaration a (nameOffset:8) (firstTokenOffset:8) (offset:8)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
+        #F2 isOriginDeclaration <null-name> (nameOffset:<null>) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::0
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@getter::a
-        #F4 synthetic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F4 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::1
       setters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@setter::a
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F7 synthetic <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F7 synthetic isOriginVariable <null-name> (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@setter::2
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
               element: <testLibrary>::@setter::2::@formalParameter::value
   topLevelVariables
-    a
+    isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: Object?
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    <null-name>
+    isOriginDeclaration <null-name>
       reference: <testLibrary>::@topLevelVariable::0
       firstFragment: #F2
       type: Object?
       getter: <testLibrary>::@getter::1
       setter: <testLibrary>::@setter::2
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: Object?
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static <null-name>
+    synthetic static isOriginVariable <null-name>
       reference: <testLibrary>::@getter::1
       firstFragment: #F4
       returnType: Object?
       variable: <testLibrary>::@topLevelVariable::0
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F5
       formalParameters
@@ -2079,7 +2079,7 @@
           type: Object?
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static <null-name>
+    synthetic static isOriginVariable <null-name>
       reference: <testLibrary>::@setter::2
       firstFragment: #F7
       formalParameters
@@ -2100,17 +2100,17 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer i (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration i (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::i
           initializer: expression_0
             IntegerLiteral
               literal: 0 @10
               staticType: int
       getters
-        #F2 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::i
   topLevelVariables
-    const hasInitializer i
+    const hasImplicitType hasInitializer isOriginDeclaration i
       reference: <testLibrary>::@topLevelVariable::i
       firstFragment: #F1
       type: int
@@ -2119,7 +2119,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::i
   getters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@getter::i
       firstFragment: #F2
       returnType: int
@@ -2139,19 +2139,19 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer b (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration b (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F2 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::b
   topLevelVariables
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F1
       type: double
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F2
       returnType: double
@@ -2178,39 +2178,39 @@
           partKeywordOffset: 13
           unit: #F1
       topLevelVariables
-        #F2 hasInitializer b (nameOffset:34) (firstTokenOffset:34) (offset:34)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:34) (firstTokenOffset:34) (offset:34)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F3 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F3 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@getter::b
     #F1 package:test/a.dart
       element: <testLibrary>
       enclosingFragment: #F0
       previousFragment: #F0
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::a
   topLevelVariables
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::b
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F3
       returnType: double
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: int
@@ -2227,19 +2227,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer i (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration i (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::i
       getters
-        #F2 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::i
   topLevelVariables
-    final hasInitializer i
+    final hasImplicitType hasInitializer isOriginDeclaration i
       reference: <testLibrary>::@topLevelVariable::i
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::i
   getters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@getter::i
       firstFragment: #F2
       returnType: int
@@ -2261,19 +2261,19 @@
       libraryImports
         package:test/b.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    final hasInitializer x
+    final hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: C
@@ -2313,10 +2313,10 @@
       previousFragment: #F0
       nextFragment: #F2
       topLevelVariables
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@topLevelVariable::x
       setters
-        #F4 x (nameOffset:25) (firstTokenOffset:16) (offset:25)
+        #F4 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:16) (offset:25)
           element: <testLibrary>::@setter::x
           formalParameters
             #F5 requiredPositional _ (nameOffset:31) (firstTokenOffset:27) (offset:31)
@@ -2326,23 +2326,23 @@
       enclosingFragment: #F0
       previousFragment: #F1
       getters
-        #F6 x (nameOffset:24) (firstTokenOffset:16) (offset:24)
+        #F6 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:16) (offset:24)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    synthetic x
+    synthetic isOriginGetterSetter x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@getter::x
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    static x
+    static isOriginDeclaration x
       reference: <testLibrary>::@setter::x
       firstFragment: #F4
       formalParameters
@@ -2363,32 +2363,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -2412,32 +2412,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
       setters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: Never
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: Never
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F3
       formalParameters
@@ -2461,32 +2461,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
       setters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
   topLevelVariables
-    a
+    hasImplicitType isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F3
       formalParameters
@@ -2518,12 +2518,12 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:15) (offset:21)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 21
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:41) (firstTokenOffset:41) (offset:41)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:41) (firstTokenOffset:41) (offset:41)
           element: <testLibrary>::@topLevelVariable::a
           initializer: expression_0
             InstanceCreationExpression
@@ -2540,7 +2540,7 @@
                 rightParenthesis: ) @47
               staticType: A<int>
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@getter::a
   classes
     class A
@@ -2550,11 +2550,11 @@
         #E0 T
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    const hasInitializer a
+    const hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
       type: A<int>
@@ -2563,7 +2563,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: A<int>
@@ -2580,52 +2580,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 i (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration i (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::i
-        #F2 j (nameOffset:11) (firstTokenOffset:11) (offset:11)
+        #F2 isOriginDeclaration j (nameOffset:11) (firstTokenOffset:11) (offset:11)
           element: <testLibrary>::@topLevelVariable::j
       getters
-        #F3 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::i
-        #F4 synthetic j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+        #F4 synthetic isOriginVariable j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
           element: <testLibrary>::@getter::j
       setters
-        #F5 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::i
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::i::@formalParameter::value
-        #F7 synthetic j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
+        #F7 synthetic isOriginVariable j (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
           element: <testLibrary>::@setter::j
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:11)
               element: <testLibrary>::@setter::j::@formalParameter::value
   topLevelVariables
-    i
+    isOriginDeclaration i
       reference: <testLibrary>::@topLevelVariable::i
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::i
       setter: <testLibrary>::@setter::i
-    j
+    isOriginDeclaration j
       reference: <testLibrary>::@topLevelVariable::j
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::j
       setter: <testLibrary>::@setter::j
   getters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@getter::i
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::i
-    synthetic static j
+    synthetic static isOriginVariable j
       reference: <testLibrary>::@getter::j
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::j
   setters
-    synthetic static i
+    synthetic static isOriginVariable i
       reference: <testLibrary>::@setter::i
       firstFragment: #F5
       formalParameters
@@ -2634,7 +2634,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::i
-    synthetic static j
+    synthetic static isOriginVariable j
       reference: <testLibrary>::@setter::j
       firstFragment: #F7
       formalParameters
@@ -2672,31 +2672,31 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       topLevelVariables
-        #F3 synthetic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F3 synthetic isOriginGetterSetter A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@topLevelVariable::A
       getters
-        #F4 augment A (nameOffset:27) (firstTokenOffset:11) (offset:27)
+        #F4 augment isOriginDeclaration A (nameOffset:27) (firstTokenOffset:11) (offset:27)
           element: <testLibrary>::@getter::A
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    synthetic A
+    synthetic isOriginGetterSetter A
       reference: <testLibrary>::@topLevelVariable::A
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::A
   getters
-    static A
+    static isOriginDeclaration A
       reference: <testLibrary>::@getter::A
       firstFragment: #F4
       returnType: int
@@ -2722,22 +2722,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 augment foo (nameOffset:30) (firstTokenOffset:14) (offset:30)
+        #F2 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:14) (offset:30)
           element: <testLibrary>::@getter::foo
       functions
         #F3 foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -2768,23 +2768,23 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
+        #F3 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -2810,23 +2810,23 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:37) (firstTokenOffset:18) (offset:37)
+        #F3 augment isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:18) (offset:37)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -2865,10 +2865,10 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:29) (firstTokenOffset:17) (offset:29)
+        #F2 isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:17) (offset:29)
           element: <testLibrary>::@getter::foo
           metadata
             Annotation
@@ -2879,7 +2879,7 @@
                 staticType: null
               element: package:test/a.dart::@getter::a1
           nextFragment: #F3
-        #F3 augment foo (nameOffset:59) (firstTokenOffset:39) (offset:59)
+        #F3 augment isOriginDeclaration foo (nameOffset:59) (firstTokenOffset:39) (offset:59)
           element: <testLibrary>::@getter::foo
           metadata
             Annotation
@@ -2891,7 +2891,7 @@
               element: package:test/a.dart::@getter::a2
           previousFragment: #F2
           nextFragment: #F4
-        #F4 augment foo (nameOffset:89) (firstTokenOffset:69) (offset:89)
+        #F4 augment isOriginDeclaration foo (nameOffset:89) (firstTokenOffset:69) (offset:89)
           element: <testLibrary>::@getter::foo
           metadata
             Annotation
@@ -2903,13 +2903,13 @@
               element: package:test/a.dart::@getter::a3
           previousFragment: #F3
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       metadata
@@ -2958,27 +2958,27 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
+        #F3 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
           nextFragment: #F4
-        #F4 augment foo (nameOffset:60) (firstTokenOffset:44) (offset:60)
+        #F4 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:44) (offset:60)
           element: <testLibrary>::@getter::foo
           previousFragment: #F3
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -3005,27 +3005,27 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
+        #F3 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
           nextFragment: #F4
-        #F4 augment foo (nameOffset:63) (firstTokenOffset:44) (offset:63)
+        #F4 augment isOriginDeclaration foo (nameOffset:63) (firstTokenOffset:44) (offset:63)
           element: <testLibrary>::@getter::foo
           previousFragment: #F3
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -3051,32 +3051,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 augment foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
+        #F2 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:18) (offset:34)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F3 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -3108,36 +3108,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:29) (firstTokenOffset:13) (offset:29)
+        #F3 augment isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:13) (offset:29)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
       setters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F4
       formalParameters
@@ -3170,13 +3170,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:43) (firstTokenOffset:15) (offset:43)
+        #F3 augment isOriginDeclaration foo (nameOffset:43) (firstTokenOffset:15) (offset:43)
           element: <testLibrary>::@getter::foo
           metadata
             Annotation
@@ -3188,13 +3188,13 @@
               element: dart:core::@getter::deprecated
           previousFragment: #F2
   topLevelVariables
-    final hasInitializer foo
+    final hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       metadata
@@ -3227,21 +3227,21 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @16
               staticType: int
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
+        #F3 augment isOriginDeclaration foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
   topLevelVariables
-    const hasInitializer foo
+    const hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -3250,7 +3250,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -3272,36 +3272,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:32) (firstTokenOffset:13) (offset:32)
+        #F3 augment isOriginDeclaration foo (nameOffset:32) (firstTokenOffset:13) (offset:32)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
       setters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F4
       formalParameters
@@ -3333,23 +3333,23 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::foo
           nextFragment: #F3
-        #F3 augment foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
+        #F3 augment isOriginDeclaration foo (nameOffset:35) (firstTokenOffset:19) (offset:35)
           element: <testLibrary>::@getter::foo
           previousFragment: #F2
   topLevelVariables
-    final hasInitializer foo
+    final hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
@@ -3378,14 +3378,14 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       topLevelVariables
-        #F3 synthetic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F3 synthetic isOriginGetterSetter A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@topLevelVariable::A
       setters
-        #F4 augment A (nameOffset:23) (firstTokenOffset:11) (offset:23)
+        #F4 augment isOriginDeclaration A (nameOffset:23) (firstTokenOffset:11) (offset:23)
           element: <testLibrary>::@setter::A
           formalParameters
             #F5 requiredPositional _ (nameOffset:29) (firstTokenOffset:25) (offset:29)
@@ -3395,17 +3395,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    synthetic A
+    synthetic isOriginGetterSetter A
       reference: <testLibrary>::@topLevelVariable::A
       firstFragment: #F3
       type: int
       setter: <testLibrary>::@setter::A
   setters
-    static A
+    static isOriginDeclaration A
       reference: <testLibrary>::@setter::A
       firstFragment: #F4
       formalParameters
@@ -3437,10 +3437,10 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 augment foo (nameOffset:26) (firstTokenOffset:14) (offset:26)
+        #F2 augment isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:14) (offset:26)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F3 requiredPositional _ (nameOffset:34) (firstTokenOffset:30) (offset:34)
@@ -3449,13 +3449,13 @@
         #F4 foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       formalParameters
@@ -3492,32 +3492,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 augment foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
+        #F3 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional _ (nameOffset:38) (firstTokenOffset:34) (offset:38)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -3549,32 +3549,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 augment foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
+        #F3 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional _ (nameOffset:41) (firstTokenOffset:34) (offset:41)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -3619,10 +3619,10 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
+        #F2 isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:17) (offset:25)
           element: <testLibrary>::@setter::foo
           metadata
             Annotation
@@ -3636,7 +3636,7 @@
             #F3 requiredPositional _ (nameOffset:33) (firstTokenOffset:29) (offset:33)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           nextFragment: #F4
-        #F4 augment foo (nameOffset:55) (firstTokenOffset:39) (offset:55)
+        #F4 augment isOriginDeclaration foo (nameOffset:55) (firstTokenOffset:39) (offset:55)
           element: <testLibrary>::@setter::foo
           metadata
             Annotation
@@ -3651,7 +3651,7 @@
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F2
           nextFragment: #F6
-        #F6 augment foo (nameOffset:85) (firstTokenOffset:69) (offset:85)
+        #F6 augment isOriginDeclaration foo (nameOffset:85) (firstTokenOffset:69) (offset:85)
           element: <testLibrary>::@setter::foo
           metadata
             Annotation
@@ -3666,13 +3666,13 @@
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F4
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       metadata
@@ -3725,36 +3725,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F3 requiredPositional _ (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           nextFragment: #F4
-        #F4 augment foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
+        #F4 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F2
           nextFragment: #F6
-        #F6 augment foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
+        #F6 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F7 requiredPositional _ (nameOffset:68) (firstTokenOffset:64) (offset:68)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F4
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       formalParameters
@@ -3785,36 +3785,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F2 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F3 requiredPositional _ (nameOffset:16) (firstTokenOffset:12) (offset:16)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           nextFragment: #F4
-        #F4 augment foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
+        #F4 augment isOriginDeclaration foo (nameOffset:34) (firstTokenOffset:22) (offset:34)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional _ (nameOffset:42) (firstTokenOffset:38) (offset:42)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F2
           nextFragment: #F6
-        #F6 augment foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
+        #F6 augment isOriginDeclaration foo (nameOffset:60) (firstTokenOffset:48) (offset:60)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F7 requiredPositional _ (nameOffset:71) (firstTokenOffset:64) (offset:71)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F4
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       formalParameters
@@ -3844,29 +3844,29 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       setters
-        #F2 foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F2 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F3 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           nextFragment: #F4
-        #F4 augment foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
+        #F4 augment isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:18) (offset:30)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional _ (nameOffset:38) (firstTokenOffset:34) (offset:38)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F2
   topLevelVariables
-    synthetic foo
+    synthetic isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F2
       formalParameters
@@ -3896,39 +3896,39 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
           nextFragment: #F5
-        #F5 augment foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
+        #F5 augment isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F6 requiredPositional _ (nameOffset:33) (firstTokenOffset:29) (offset:33)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F3
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -3961,13 +3961,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 augment foo (nameOffset:39) (firstTokenOffset:15) (offset:39)
+        #F3 augment isOriginDeclaration foo (nameOffset:39) (firstTokenOffset:15) (offset:39)
           element: <testLibrary>::@setter::foo
           metadata
             Annotation
@@ -3981,20 +3981,20 @@
             #F4 requiredPositional _ (nameOffset:47) (firstTokenOffset:43) (offset:47)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    final hasInitializer foo
+    final hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       metadata
@@ -4033,23 +4033,23 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @16
               staticType: int
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 augment foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
+        #F3 augment isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    const hasInitializer foo
+    const hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -4059,13 +4059,13 @@
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -4091,39 +4091,39 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
           nextFragment: #F5
-        #F5 augment foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
+        #F5 augment isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:13) (offset:25)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F6 requiredPositional _ (nameOffset:36) (firstTokenOffset:29) (offset:36)
               element: <testLibrary>::@setter::foo::@formalParameter::_
           previousFragment: #F3
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -4155,32 +4155,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 augment foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
+        #F3 augment isOriginDeclaration foo (nameOffset:31) (firstTokenOffset:19) (offset:31)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    final hasInitializer foo
+    final hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -4215,17 +4215,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       topLevelVariables
-        #F3 augment hasInitializer A (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F3 augment hasInitializer isOriginDeclaration A (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::A
       getters
-        #F4 synthetic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F4 synthetic isOriginVariable A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::A
       setters
-        #F5 synthetic A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F5 synthetic isOriginVariable A (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@setter::A
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
@@ -4235,24 +4235,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    hasInitializer A
+    hasInitializer isOriginDeclaration A
       reference: <testLibrary>::@topLevelVariable::A
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::A
       setter: <testLibrary>::@setter::A
   getters
-    synthetic static A
+    synthetic static isOriginVariable A
       reference: <testLibrary>::@getter::A
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::A
   setters
-    synthetic static A
+    synthetic static isOriginVariable A
       reference: <testLibrary>::@setter::A
       firstFragment: #F5
       formalParameters
@@ -4284,13 +4284,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 augment hasInitializer foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F1 augment hasInitializer isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F2 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::foo
       setters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
@@ -4299,20 +4299,20 @@
         #F5 foo (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@function::foo
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -4349,23 +4349,23 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
       getters
-        #F3 foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
+        #F3 isOriginDeclaration foo (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    synthetic hasInitializer foo
+    synthetic hasInitializer isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
@@ -4392,40 +4392,40 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
           nextFragment: #F3
-        #F3 augment hasInitializer foo (nameOffset:46) (firstTokenOffset:46) (offset:46)
+        #F3 augment hasInitializer isOriginDeclaration foo (nameOffset:46) (firstTokenOffset:46) (offset:46)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F2
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F5
       formalParameters
@@ -4458,40 +4458,40 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
           nextFragment: #F3
-        #F3 augment foo (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F3 augment isOriginDeclaration foo (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F2
       getters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F5
       formalParameters
@@ -4523,26 +4523,26 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F1 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
       setters
-        #F3 foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
+        #F3 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:0) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F4 requiredPositional _ (nameOffset:12) (firstTokenOffset:8) (offset:12)
               element: <testLibrary>::@setter::foo::@formalParameter::_
   topLevelVariables
-    synthetic hasInitializer foo
+    synthetic hasInitializer isOriginGetterSetter foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       setter: <testLibrary>::@setter::foo
   setters
-    static foo
+    static isOriginDeclaration foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F3
       formalParameters
@@ -4572,36 +4572,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F4
       formalParameters
@@ -4634,10 +4634,10 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment foo (nameOffset:41) (firstTokenOffset:41) (offset:41)
+        #F2 augment isOriginDeclaration foo (nameOffset:41) (firstTokenOffset:41) (offset:41)
           element: <testLibrary>::@topLevelVariable::foo
           metadata
             Annotation
@@ -4649,10 +4649,10 @@
               element: dart:core::@getter::deprecated
           previousFragment: #F1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    final hasInitializer foo
+    final hasImplicitType hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       metadata
@@ -4666,7 +4666,7 @@
       type: int
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
@@ -4691,14 +4691,14 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:10) (firstTokenOffset:10) (offset:10)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_0
             IntegerLiteral
               literal: 0 @16
               staticType: null
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::foo
           initializer: expression_1
             IntegerLiteral
@@ -4706,10 +4706,10 @@
               staticType: int
           previousFragment: #F1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:10)
           element: <testLibrary>::@getter::foo
   topLevelVariables
-    const hasInitializer foo
+    const hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
@@ -4718,7 +4718,7 @@
         expression: expression_1
       getter: <testLibrary>::@getter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
@@ -4740,36 +4740,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment foo (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F2 augment isOriginDeclaration foo (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F4
       formalParameters
@@ -4801,46 +4801,46 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer int (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration int (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::int
-        #F2 augment hasInitializer foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:27) (firstTokenOffset:27) (offset:27)
           element: <testLibrary>::@topLevelVariable::foo
       getters
-        #F3 synthetic int (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable int (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::int
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@getter::foo
       setters
-        #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    final hasInitializer int
+    final hasImplicitType hasInitializer isOriginDeclaration int
       reference: <testLibrary>::@topLevelVariable::int
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::int
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F2
       type: dynamic
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static int
+    synthetic static isOriginVariable int
       reference: <testLibrary>::@getter::int
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::int
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F5
       formalParameters
@@ -4874,36 +4874,36 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration foo (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::foo
           nextFragment: #F2
-        #F2 augment hasInitializer foo (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F2 augment hasInitializer isOriginDeclaration foo (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::foo
           previousFragment: #F1
       getters
-        #F3 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::foo
       setters
-        #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::foo
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::foo::@formalParameter::value
   topLevelVariables
-    hasInitializer foo
+    hasInitializer isOriginDeclaration foo
       reference: <testLibrary>::@topLevelVariable::foo
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::foo
       setter: <testLibrary>::@setter::foo
   getters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@getter::foo
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::foo
   setters
-    synthetic static foo
+    synthetic static isOriginVariable foo
       reference: <testLibrary>::@setter::foo
       firstFragment: #F4
       formalParameters
diff --git a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
index 48a12d3..e630982 100644
--- a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
@@ -1270,7 +1270,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -1284,7 +1284,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -1752,17 +1752,17 @@
         #F1 class A (nameOffset:43) (firstTokenOffset:37) (offset:43)
           element: <testLibrary>::@class::A
           fields
-            #F2 f (nameOffset:58) (firstTokenOffset:58) (offset:58)
+            #F2 isOriginDeclaration f (nameOffset:58) (firstTokenOffset:58) (offset:58)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::A::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::A::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
@@ -1778,7 +1778,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F2
           type: int Function<T>(T)
@@ -1788,11 +1788,11 @@
           getter: <testLibrary>::@class::A::@getter::f
           setter: <testLibrary>::@class::A::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: int Function<T>(T)
@@ -1801,7 +1801,7 @@
                 int
           variable: <testLibrary>::@class::A::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@setter::f
           firstFragment: #F5
           formalParameters
@@ -1844,7 +1844,7 @@
             #F2 T (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -1859,7 +1859,7 @@
           firstFragment: #F2
           bound: C<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -1890,7 +1890,7 @@
             #F2 T (nameOffset:38) (firstTokenOffset:38) (offset:38)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -1905,7 +1905,7 @@
           firstFragment: #F2
           bound: C<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -1936,7 +1936,7 @@
             #F2 T (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -1951,7 +1951,7 @@
           firstFragment: #F2
           bound: C<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -2040,7 +2040,7 @@
             #F2 T (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -2055,7 +2055,7 @@
           firstFragment: #F2
           bound: C<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -2086,7 +2086,7 @@
             #F2 T (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -2101,7 +2101,7 @@
           firstFragment: #F2
           bound: C<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -2481,7 +2481,7 @@
         #F1 class D (nameOffset:55) (firstTokenOffset:49) (offset:55)
           element: <testLibrary>::@class::D
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
@@ -2497,7 +2497,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -2950,13 +2950,13 @@
             #F3 U (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F5 class B (nameOffset:49) (firstTokenOffset:43) (offset:49)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       typeAliases
@@ -2975,7 +2975,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
     class B
@@ -2987,7 +2987,7 @@
             typeArguments
               String
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
   typeAliases
@@ -3022,25 +3022,25 @@
             #F2 T (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F6 class C (nameOffset:53) (firstTokenOffset:47) (offset:53)
           element: <testLibrary>::@class::C
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F8 class D (nameOffset:64) (firstTokenOffset:58) (offset:64)
           element: <testLibrary>::@class::D
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
@@ -3057,21 +3057,21 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F7
     class D
@@ -3081,7 +3081,7 @@
         B
         C
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F9
   typeAliases
@@ -3116,25 +3116,25 @@
             #F2 T (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F6 class C (nameOffset:53) (firstTokenOffset:47) (offset:53)
           element: <testLibrary>::@class::C
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F8 class D (nameOffset:64) (firstTokenOffset:58) (offset:64)
           element: <testLibrary>::@class::D
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
@@ -3151,21 +3151,21 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F7
     class D
@@ -3179,7 +3179,7 @@
               int
         C
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F9
   typeAliases
@@ -3208,7 +3208,7 @@
         #F1 class A (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -3219,7 +3219,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -3245,7 +3245,7 @@
         #F1 class A (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -3256,7 +3256,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -3284,13 +3284,13 @@
         #F1 class A (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:35) (firstTokenOffset:29) (offset:35)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:46) (firstTokenOffset:40) (offset:46)
@@ -3299,7 +3299,7 @@
             #F6 U (nameOffset:48) (firstTokenOffset:48) (offset:48)
               element: #E0 U
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -3313,14 +3313,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
@@ -3333,7 +3333,7 @@
         A
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F7
   typeAliases
@@ -3364,19 +3364,19 @@
         #F1 class A (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:35) (firstTokenOffset:29) (offset:35)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:46) (firstTokenOffset:40) (offset:46)
           element: <testLibrary>::@class::C
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
@@ -3387,14 +3387,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
       reference: <testLibrary>::@class::B
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
     class C
@@ -3404,7 +3404,7 @@
         A
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F6
   typeAliases
@@ -3434,13 +3434,13 @@
             #F2 T (nameOffset:28) (firstTokenOffset:28) (offset:28)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       typeAliases
@@ -3454,7 +3454,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -3465,7 +3465,7 @@
         A<int>
           alias: <testLibrary>::@typeAlias::X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
   typeAliases
@@ -3497,13 +3497,13 @@
             #F2 T (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:65) (firstTokenOffset:59) (offset:65)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
@@ -3522,7 +3522,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -3533,7 +3533,7 @@
         M1
         M2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
   mixins
@@ -3576,13 +3576,13 @@
             #F2 T (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:65) (firstTokenOffset:59) (offset:65)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       mixins
@@ -3601,7 +3601,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -3614,7 +3614,7 @@
           alias: <testLibrary>::@typeAlias::X
         M2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
   mixins
@@ -3651,7 +3651,7 @@
         #F1 class A (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -3662,7 +3662,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -3692,13 +3692,13 @@
             #F2 T (nameOffset:28) (firstTokenOffset:28) (offset:28)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       typeAliases
@@ -3712,7 +3712,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -3721,7 +3721,7 @@
       supertype: A<int>
         alias: <testLibrary>::@typeAlias::X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -3754,13 +3754,13 @@
             #F2 T (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:38) (firstTokenOffset:32) (offset:38)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       typeAliases
@@ -3777,7 +3777,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class B
@@ -3788,7 +3788,7 @@
           typeArguments
             A<int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -3820,7 +3820,7 @@
         #F1 class A (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -3831,7 +3831,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -3861,13 +3861,13 @@
             #F2 T (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class D (nameOffset:41) (firstTokenOffset:35) (offset:41)
           element: <testLibrary>::@class::D
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
@@ -3881,14 +3881,14 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class D
       reference: <testLibrary>::@class::D
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
   typeAliases
@@ -3918,13 +3918,13 @@
             #F2 T (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class D (nameOffset:41) (firstTokenOffset:35) (offset:41)
           element: <testLibrary>::@class::D
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
@@ -3938,7 +3938,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     class D
@@ -3947,7 +3947,7 @@
       supertype: A<int?>
         alias: <testLibrary>::@typeAlias::X
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
           superConstructor: ConstructorMember
@@ -3976,7 +3976,7 @@
         #F1 class A (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -3987,7 +3987,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
@@ -4013,7 +4013,7 @@
         #F1 class A (nameOffset:24) (firstTokenOffset:18) (offset:24)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       typeAliases
@@ -4024,7 +4024,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   typeAliases
diff --git a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
index 60201db..b50ee1d 100644
--- a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
@@ -30,19 +30,19 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer f (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration f (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::f
   topLevelVariables
-    final hasInitializer f
+    final hasImplicitType hasInitializer isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F1
       type: V Function<U, V>(U, V)
       getter: <testLibrary>::@getter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F2
       returnType: V Function<U, V>(U, V)
@@ -77,19 +77,19 @@
       enclosingFragment: #F0
       previousFragment: #F0
       topLevelVariables
-        #F2 hasInitializer f (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration f (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::f
   topLevelVariables
-    final hasInitializer f
+    final hasImplicitType hasInitializer isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F2
       type: double Function(int)
       getter: <testLibrary>::@getter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F3
       returnType: double Function(int)
@@ -116,14 +116,14 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 hasInitializer f (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F3 hasInitializer isOriginDeclaration f (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::f
   classes
     class C
@@ -133,17 +133,17 @@
         #E0 T
           firstFragment: #F2
       fields
-        final hasInitializer f
+        final hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F3
           type: InvalidType
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F5
           returnType: InvalidType
@@ -174,7 +174,7 @@
             #F2 V (nameOffset:45) (firstTokenOffset:45) (offset:45)
               element: #E0 V
           constructors
-            #F3 const new (nameOffset:<null>) (firstTokenOffset:52) (offset:58)
+            #F3 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:52) (offset:58)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 58
@@ -189,7 +189,7 @@
             #F7 U (nameOffset:81) (firstTokenOffset:81) (offset:81)
               element: #E2 U
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
@@ -199,7 +199,7 @@
             #F10 T (nameOffset:10) (firstTokenOffset:10) (offset:10)
               element: #E3 T
       topLevelVariables
-        #F11 hasInitializer x (nameOffset:118) (firstTokenOffset:118) (offset:118)
+        #F11 hasInitializer isOriginDeclaration x (nameOffset:118) (firstTokenOffset:118) (offset:118)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             InstanceCreationExpression
@@ -222,7 +222,7 @@
                 rightParenthesis: ) @131
               staticType: C<int>
       getters
-        #F12 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
+        #F12 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
           element: <testLibrary>::@getter::x
       functions
         #F13 f (nameOffset:96) (firstTokenOffset:87) (offset:96)
@@ -238,7 +238,7 @@
         #E0 V
           firstFragment: #F2
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -257,7 +257,7 @@
         #E2 U
           firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F8
   typeAliases
@@ -269,7 +269,7 @@
           firstFragment: #F10
       aliasedType: D<T, U> Function<U>()
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F11
       type: C<int>
@@ -278,7 +278,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F12
       returnType: C<int>
@@ -314,7 +314,7 @@
         #F1 class C (nameOffset:38) (firstTokenOffset:32) (offset:38)
           element: <testLibrary>::@class::C
           constructors
-            #F2 const new (nameOffset:<null>) (firstTokenOffset:44) (offset:50)
+            #F2 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:44) (offset:50)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 50
@@ -327,14 +327,14 @@
             #F5 T (nameOffset:68) (firstTokenOffset:68) (offset:68)
               element: #E0 T
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       typeAliases
         #F7 F (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F8 hasInitializer x (nameOffset:101) (firstTokenOffset:101) (offset:101)
+        #F8 hasInitializer isOriginDeclaration x (nameOffset:101) (firstTokenOffset:101) (offset:101)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             InstanceCreationExpression
@@ -355,7 +355,7 @@
                 rightParenthesis: ) @114
               staticType: C
       getters
-        #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+        #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
           element: <testLibrary>::@getter::x
       functions
         #F10 f (nameOffset:79) (firstTokenOffset:74) (offset:79)
@@ -368,7 +368,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -383,7 +383,7 @@
         #E0 T
           firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F6
   typeAliases
@@ -392,7 +392,7 @@
       firstFragment: #F7
       aliasedType: D<T> Function<T>()
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F8
       type: C
@@ -401,7 +401,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F9
       returnType: C
@@ -439,13 +439,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:18) (firstTokenOffset:12) (offset:18)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class S (nameOffset:40) (firstTokenOffset:34) (offset:40)
@@ -454,7 +454,7 @@
             #F6 T (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: #E0 T
           constructors
-            #F7 new (nameOffset:<null>) (firstTokenOffset:59) (offset:59)
+            #F7 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:59) (offset:59)
               element: <testLibrary>::@class::S::@constructor::new
               typeName: S
               typeNameOffset: 59
@@ -462,13 +462,13 @@
                 #F8 requiredPositional _ (nameOffset:63) (firstTokenOffset:61) (offset:63)
                   element: <testLibrary>::@class::S::@constructor::new::@formalParameter::_
       topLevelVariables
-        #F9 hasInitializer s (nameOffset:74) (firstTokenOffset:74) (offset:74)
+        #F9 hasInitializer isOriginDeclaration s (nameOffset:74) (firstTokenOffset:74) (offset:74)
           element: <testLibrary>::@topLevelVariable::s
       getters
-        #F10 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+        #F10 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
           element: <testLibrary>::@getter::s
       setters
-        #F11 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+        #F11 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
           element: <testLibrary>::@setter::s
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
@@ -478,7 +478,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -486,7 +486,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -498,7 +498,7 @@
           firstFragment: #F6
           bound: A
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::S::@constructor::new
           firstFragment: #F7
           formalParameters
@@ -506,20 +506,20 @@
               firstFragment: #F8
               type: T
   topLevelVariables
-    hasInitializer s
+    hasImplicitType hasInitializer isOriginDeclaration s
       reference: <testLibrary>::@topLevelVariable::s
       firstFragment: #F9
       type: S<B>
       getter: <testLibrary>::@getter::s
       setter: <testLibrary>::@setter::s
   getters
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@getter::s
       firstFragment: #F10
       returnType: S<B>
       variable: <testLibrary>::@topLevelVariable::s
   setters
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@setter::s
       firstFragment: #F11
       formalParameters
@@ -555,17 +555,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 b (nameOffset:14) (firstTokenOffset:14) (offset:14)
+            #F2 isOriginDeclaration b (nameOffset:14) (firstTokenOffset:14) (offset:14)
               element: <testLibrary>::@class::A::@field::b
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::A::@getter::b
           setters
-            #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
+            #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
               element: <testLibrary>::@class::A::@setter::b
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
@@ -573,17 +573,17 @@
         #F7 class B (nameOffset:25) (firstTokenOffset:19) (offset:25)
           element: <testLibrary>::@class::B
           fields
-            #F8 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F8 synthetic isOriginGetterSetter c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::B::@field::c
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 c (nameOffset:37) (firstTokenOffset:31) (offset:37)
+            #F10 isOriginDeclaration c (nameOffset:37) (firstTokenOffset:31) (offset:37)
               element: <testLibrary>::@class::B::@getter::c
           setters
-            #F11 c (nameOffset:59) (firstTokenOffset:50) (offset:59)
+            #F11 isOriginDeclaration c (nameOffset:59) (firstTokenOffset:50) (offset:59)
               element: <testLibrary>::@class::B::@setter::c
               formalParameters
                 #F12 requiredPositional value (nameOffset:63) (firstTokenOffset:61) (offset:63)
@@ -591,32 +591,32 @@
         #F13 class C (nameOffset:81) (firstTokenOffset:75) (offset:81)
           element: <testLibrary>::@class::C
           constructors
-            #F14 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
+            #F14 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F15 class D (nameOffset:92) (firstTokenOffset:86) (offset:92)
           element: <testLibrary>::@class::D
           constructors
-            #F16 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
+            #F16 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
       topLevelVariables
-        #F17 hasInitializer a (nameOffset:111) (firstTokenOffset:111) (offset:111)
+        #F17 hasInitializer isOriginDeclaration a (nameOffset:111) (firstTokenOffset:111) (offset:111)
           element: <testLibrary>::@topLevelVariable::a
-        #F18 hasInitializer x (nameOffset:128) (firstTokenOffset:128) (offset:128)
+        #F18 hasInitializer isOriginDeclaration x (nameOffset:128) (firstTokenOffset:128) (offset:128)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F19 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
+        #F19 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
           element: <testLibrary>::@getter::a
-        #F20 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:128)
+        #F20 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:128)
           element: <testLibrary>::@getter::x
       setters
-        #F21 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
+        #F21 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
           element: <testLibrary>::@setter::a
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F23 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:128)
+        #F23 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:128)
           element: <testLibrary>::@setter::x
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:128)
@@ -626,24 +626,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::A::@field::b
           firstFragment: #F2
           type: B
           getter: <testLibrary>::@class::A::@getter::b
           setter: <testLibrary>::@class::A::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::A::@getter::b
           firstFragment: #F4
           returnType: B
           variable: <testLibrary>::@class::A::@field::b
       setters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::A::@setter::b
           firstFragment: #F5
           formalParameters
@@ -656,24 +656,24 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       fields
-        synthetic c
+        synthetic isOriginGetterSetter c
           reference: <testLibrary>::@class::B::@field::c
           firstFragment: #F8
           type: C
           getter: <testLibrary>::@class::B::@getter::c
           setter: <testLibrary>::@class::B::@setter::c
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        c
+        isOriginDeclaration c
           reference: <testLibrary>::@class::B::@getter::c
           firstFragment: #F10
           returnType: C
           variable: <testLibrary>::@class::B::@field::c
       setters
-        c
+        isOriginDeclaration c
           reference: <testLibrary>::@class::B::@setter::c
           firstFragment: #F11
           formalParameters
@@ -686,7 +686,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F13
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F14
     class D
@@ -694,36 +694,36 @@
       firstFragment: #F15
       supertype: C
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F16
           superConstructor: <testLibrary>::@class::C::@constructor::new
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F17
       type: A
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F18
       type: C
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F19
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F20
       returnType: C
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F21
       formalParameters
@@ -732,7 +732,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F23
       formalParameters
@@ -758,72 +758,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
-        #F2 hasInitializer y (nameOffset:40) (firstTokenOffset:40) (offset:40)
+        #F2 hasInitializer isOriginDeclaration y (nameOffset:40) (firstTokenOffset:40) (offset:40)
           element: <testLibrary>::@topLevelVariable::y
-        #F3 hasInitializer z (nameOffset:53) (firstTokenOffset:53) (offset:53)
+        #F3 hasInitializer isOriginDeclaration z (nameOffset:53) (firstTokenOffset:53) (offset:53)
           element: <testLibrary>::@topLevelVariable::z
       getters
-        #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
-        #F5 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F5 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@getter::y
-        #F6 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F6 synthetic isOriginVariable z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@getter::z
       setters
-        #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
-        #F9 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F9 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@setter::y
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@setter::y::@formalParameter::value
-        #F11 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F11 synthetic isOriginVariable z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@setter::z
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@setter::z::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Iterable<String>
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
-    hasInitializer y
+    hasImplicitType hasInitializer isOriginDeclaration y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F2
       type: List<int>
       getter: <testLibrary>::@getter::y
       setter: <testLibrary>::@setter::y
-    hasInitializer z
+    hasImplicitType hasInitializer isOriginDeclaration z
       reference: <testLibrary>::@topLevelVariable::z
       firstFragment: #F3
       type: List<String>
       getter: <testLibrary>::@getter::z
       setter: <testLibrary>::@setter::z
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F4
       returnType: Iterable<String>
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@getter::y
       firstFragment: #F5
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::y
-    synthetic static z
+    synthetic static isOriginVariable z
       reference: <testLibrary>::@getter::z
       firstFragment: #F6
       returnType: List<String>
       variable: <testLibrary>::@topLevelVariable::z
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F7
       formalParameters
@@ -832,7 +832,7 @@
           type: Iterable<String>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@setter::y
       firstFragment: #F9
       formalParameters
@@ -841,7 +841,7 @@
           type: List<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::y
-    synthetic static z
+    synthetic static isOriginVariable z
       reference: <testLibrary>::@setter::z
       firstFragment: #F11
       formalParameters
@@ -871,38 +871,38 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 p (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration p (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::p
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic p (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable p (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::p
           setters
-            #F5 synthetic p (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable p (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::p
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::p::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F7 hasInitializer isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::x
-        #F8 hasInitializer y (nameOffset:40) (firstTokenOffset:40) (offset:40)
+        #F8 hasInitializer isOriginDeclaration y (nameOffset:40) (firstTokenOffset:40) (offset:40)
           element: <testLibrary>::@topLevelVariable::y
       getters
-        #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::x
-        #F10 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F10 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@getter::y
       setters
-        #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::x
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::x::@formalParameter::value
-        #F13 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F13 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@setter::y
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -912,24 +912,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        p
+        isOriginDeclaration p
           reference: <testLibrary>::@class::C::@field::p
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::p
           setter: <testLibrary>::@class::C::@setter::p
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic p
+        synthetic isOriginVariable p
           reference: <testLibrary>::@class::C::@getter::p
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::p
       setters
-        synthetic p
+        synthetic isOriginVariable p
           reference: <testLibrary>::@class::C::@setter::p
           firstFragment: #F5
           formalParameters
@@ -939,31 +939,31 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::p
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F7
       type: List<C>
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
-    hasInitializer y
+    hasImplicitType hasInitializer isOriginDeclaration y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F8
       type: Iterable<int>
       getter: <testLibrary>::@getter::y
       setter: <testLibrary>::@setter::y
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F9
       returnType: List<C>
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@getter::y
       firstFragment: #F10
       returnType: Iterable<int>
       variable: <testLibrary>::@topLevelVariable::y
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F11
       formalParameters
@@ -972,7 +972,7 @@
           type: List<C>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@setter::y
       firstFragment: #F13
       formalParameters
@@ -1043,15 +1043,15 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           fields
-            #F4 x (nameOffset:24) (firstTokenOffset:24) (offset:24)
+            #F4 isOriginDeclaration x (nameOffset:24) (firstTokenOffset:24) (offset:24)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F5 new (nameOffset:<null>) (firstTokenOffset:29) (offset:29)
+            #F5 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 29
           getters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
@@ -1063,17 +1063,17 @@
         #E1 V
           firstFragment: #F3
       fields
-        final x
+        final hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F4
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F6
           returnType: dynamic
@@ -1104,14 +1104,14 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           fields
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F6 x (nameOffset:22) (firstTokenOffset:18) (offset:22)
+            #F6 isOriginDeclaration x (nameOffset:22) (firstTokenOffset:18) (offset:22)
               element: <testLibrary>::@class::C::@getter::x
   classes
     class C
@@ -1123,17 +1123,17 @@
         #E1 V
           firstFragment: #F3
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F4
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F6
           returnType: dynamic
@@ -1165,7 +1165,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -1184,7 +1184,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       methods
@@ -1225,14 +1225,14 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           fields
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F6 x (nameOffset:27) (firstTokenOffset:18) (offset:27)
+            #F6 isOriginDeclaration x (nameOffset:27) (firstTokenOffset:18) (offset:27)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F7 requiredPositional value (nameOffset:29) (firstTokenOffset:29) (offset:29)
@@ -1247,17 +1247,17 @@
         #E1 V
           firstFragment: #F3
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F4
           type: dynamic
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F6
           formalParameters
@@ -1353,26 +1353,27 @@
             #F2 P (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 P
           constructors
-            #F3 factory new (nameOffset:<null>) (firstTokenOffset:27) (offset:35)
+            #F3 factory isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:35)
               element: <testLibrary>::@class::C::@constructor::new
+              factoryKeywordOffset: 27
               typeName: C
               typeNameOffset: 35
               formalParameters
                 #F4 requiredPositional p (nameOffset:49) (firstTokenOffset:37) (offset:49)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::p
-            #F5 _ (nameOffset:66) (firstTokenOffset:64) (offset:66)
+            #F5 isOriginDeclaration _ (nameOffset:66) (firstTokenOffset:64) (offset:66)
               element: <testLibrary>::@class::C::@constructor::_
               typeName: C
               typeNameOffset: 64
               periodOffset: 65
       topLevelVariables
-        #F6 hasInitializer c (nameOffset:78) (firstTokenOffset:78) (offset:78)
+        #F6 hasInitializer isOriginDeclaration c (nameOffset:78) (firstTokenOffset:78) (offset:78)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
           element: <testLibrary>::@getter::c
       setters
-        #F8 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+        #F8 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
           element: <testLibrary>::@setter::c
           formalParameters
             #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
@@ -1386,31 +1387,31 @@
           firstFragment: #F2
           bound: num
       constructors
-        factory new
+        factory isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           formalParameters
             #E1 requiredPositional p
               firstFragment: #F4
               type: Iterable<P>
-        _
+        isOriginDeclaration _
           reference: <testLibrary>::@class::C::@constructor::_
           firstFragment: #F5
   topLevelVariables
-    hasInitializer c
+    hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F6
       type: C<num>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F7
       returnType: C<num>
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F8
       formalParameters
@@ -1441,18 +1442,18 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration foo (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::foo
-            #F3 hasInitializer bar (nameOffset:56) (firstTokenOffset:56) (offset:56)
+            #F3 hasInitializer isOriginDeclaration bar (nameOffset:56) (firstTokenOffset:56) (offset:56)
               element: <testLibrary>::@class::A::@field::bar
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::foo
-            #F6 synthetic bar (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F6 synthetic isOriginVariable bar (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::A::@getter::bar
           methods
             #F7 baz (nameOffset:100) (firstTokenOffset:72) (offset:100)
@@ -1462,27 +1463,27 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static final hasInitializer foo
+        static final hasImplicitType hasInitializer isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::foo
-        static final hasInitializer bar
+        static final hasImplicitType hasInitializer isOriginDeclaration bar
           reference: <testLibrary>::@class::A::@field::bar
           firstFragment: #F3
           type: int Function(double)
           getter: <testLibrary>::@class::A::@getter::bar
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static foo
+        synthetic static isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
-        synthetic static bar
+        synthetic static isOriginVariable bar
           reference: <testLibrary>::@class::A::@getter::bar
           firstFragment: #F6
           returnType: int Function(double)
@@ -1510,13 +1511,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
@@ -1528,20 +1529,20 @@
             #F6 T (nameOffset:6) (firstTokenOffset:6) (offset:6)
               element: #E0 T
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -1577,72 +1578,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer m (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 hasInitializer isOriginDeclaration m (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::m
-        #F2 hasInitializer n (nameOffset:53) (firstTokenOffset:53) (offset:53)
+        #F2 hasInitializer isOriginDeclaration n (nameOffset:53) (firstTokenOffset:53) (offset:53)
           element: <testLibrary>::@topLevelVariable::n
-        #F3 hasInitializer x (nameOffset:73) (firstTokenOffset:73) (offset:73)
+        #F3 hasInitializer isOriginDeclaration x (nameOffset:73) (firstTokenOffset:73) (offset:73)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F4 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::m
-        #F5 synthetic n (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F5 synthetic isOriginVariable n (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@getter::n
-        #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
+        #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
           element: <testLibrary>::@getter::x
       setters
-        #F7 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::m
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::m::@formalParameter::value
-        #F9 synthetic n (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F9 synthetic isOriginVariable n (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@setter::n
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
               element: <testLibrary>::@setter::n::@formalParameter::value
-        #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
+        #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
           element: <testLibrary>::@setter::x
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer m
+    hasInitializer isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: int Function<T>()?
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
-    hasInitializer n
+    hasInitializer isOriginDeclaration n
       reference: <testLibrary>::@topLevelVariable::n
       firstFragment: #F2
       type: int Function<T>()
       getter: <testLibrary>::@getter::n
       setter: <testLibrary>::@setter::n
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F4
       returnType: int Function<T>()?
       variable: <testLibrary>::@topLevelVariable::m
-    synthetic static n
+    synthetic static isOriginVariable n
       reference: <testLibrary>::@getter::n
       firstFragment: #F5
       returnType: int Function<T>()
       variable: <testLibrary>::@topLevelVariable::n
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F7
       formalParameters
@@ -1651,7 +1652,7 @@
           type: int Function<T>()?
       returnType: void
       variable: <testLibrary>::@topLevelVariable::m
-    synthetic static n
+    synthetic static isOriginVariable n
       reference: <testLibrary>::@setter::n
       firstFragment: #F9
       formalParameters
@@ -1660,7 +1661,7 @@
           type: int Function<T>()
       returnType: void
       variable: <testLibrary>::@topLevelVariable::n
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F11
       formalParameters
@@ -1689,32 +1690,32 @@
       libraryImports
         dart:collection
       topLevelVariables
-        #F1 hasInitializer m (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F1 hasInitializer isOriginDeclaration m (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::m
       getters
-        #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F2 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@getter::m
       setters
-        #F3 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F3 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@setter::m
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@setter::m::@formalParameter::value
   topLevelVariables
-    hasInitializer m
+    hasImplicitType hasInitializer isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: HashMap<dynamic, dynamic>
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F2
       returnType: HashMap<dynamic, dynamic>
       variable: <testLibrary>::@topLevelVariable::m
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F3
       formalParameters
@@ -1740,92 +1741,98 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer c (nameOffset:34) (firstTokenOffset:34) (offset:34)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:34) (firstTokenOffset:34) (offset:34)
           element: <testLibrary>::@topLevelVariable::c
-        #F4 hasInitializer d (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F4 hasInitializer isOriginDeclaration d (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::d
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F6 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F6 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@getter::c
-        #F8 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F8 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::d
       setters
-        #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F9 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F11 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F11 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::b
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::b::@formalParameter::value
-        #F13 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+        #F13 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
           element: <testLibrary>::@setter::c
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F15 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F15 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::d
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@setter::d::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a, b, c]
       type: dynamic
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer b
+    hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [a, b, c]
       type: dynamic
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
-    hasInitializer c
+    hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
+      typeInferenceError: dependencyCycle
+        arguments: [a, b, c]
       type: dynamic
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    hasInitializer d
+    hasImplicitType hasInitializer isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::d
       setter: <testLibrary>::@setter::d
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F6
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F7
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::d
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F9
       formalParameters
@@ -1834,7 +1841,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F11
       formalParameters
@@ -1843,7 +1850,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F13
       formalParameters
@@ -1852,7 +1859,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@setter::d
       firstFragment: #F15
       formalParameters
@@ -1880,17 +1887,17 @@
         #F1 class C (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::C
           fields
-            #F2 v (nameOffset:49) (firstTokenOffset:49) (offset:49)
+            #F2 isOriginDeclaration v (nameOffset:49) (firstTokenOffset:49) (offset:49)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
@@ -1898,14 +1905,14 @@
         #F7 class D (nameOffset:69) (firstTokenOffset:54) (offset:69)
           element: <testLibrary>::@class::D
           fields
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F8 synthetic isOriginGetterSetter v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@class::D::@field::v
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F10 v (nameOffset:79) (firstTokenOffset:73) (offset:79)
+            #F10 isOriginDeclaration v (nameOffset:79) (firstTokenOffset:73) (offset:79)
               element: <testLibrary>::@class::D::@getter::v
       typeAliases
         #F11 F (nameOffset:12) (firstTokenOffset:0) (offset:12)
@@ -1916,7 +1923,7 @@
       firstFragment: #F1
       supertype: D
       fields
-        v
+        hasImplicitType isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: int Function(String)
@@ -1924,19 +1931,19 @@
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::D::@constructor::new
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: int Function(String)
             alias: <testLibrary>::@typeAlias::F
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -1950,18 +1957,18 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F7
       fields
-        synthetic v
+        synthetic isOriginGetterSetter v
           reference: <testLibrary>::@class::D::@field::v
           firstFragment: #F8
           type: int Function(String)
             alias: <testLibrary>::@typeAlias::F
           getter: <testLibrary>::@class::D::@getter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F9
       getters
-        abstract v
+        abstract isOriginDeclaration v
           reference: <testLibrary>::@class::D::@getter::v
           firstFragment: #F10
           returnType: int Function(String)
@@ -1990,32 +1997,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -2042,32 +2049,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int?
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int?
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -2094,32 +2101,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: void Function()
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: void Function()
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -2146,32 +2153,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: void Function()?
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: void Function()?
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -2205,17 +2212,17 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 v (nameOffset:37) (firstTokenOffset:37) (offset:37)
+            #F3 isOriginDeclaration v (nameOffset:37) (firstTokenOffset:37) (offset:37)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
@@ -2228,14 +2235,14 @@
             #F10 V (nameOffset:62) (firstTokenOffset:62) (offset:62)
               element: #E2 V
           fields
-            #F11 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F11 synthetic isOriginGetterSetter v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::D::@field::v
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F13 v (nameOffset:83) (firstTokenOffset:69) (offset:83)
+            #F13 isOriginDeclaration v (nameOffset:83) (firstTokenOffset:69) (offset:83)
               element: <testLibrary>::@class::D::@getter::v
   classes
     hasNonFinalField class C
@@ -2246,7 +2253,7 @@
           firstFragment: #F2
       supertype: D<int, T>
       fields
-        v
+        hasImplicitType isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -2254,21 +2261,21 @@
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           superConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::D::@constructor::new
             substitution: {U: int, V: T}
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           returnType: Map<T, int>
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
@@ -2287,18 +2294,18 @@
         #E2 V
           firstFragment: #F10
       fields
-        synthetic v
+        synthetic isOriginGetterSetter v
           reference: <testLibrary>::@class::D::@field::v
           firstFragment: #F11
           hasEnclosingTypeParameterReference: true
           type: Map<V, U>
           getter: <testLibrary>::@class::D::@getter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F12
       getters
-        abstract v
+        abstract isOriginDeclaration v
           reference: <testLibrary>::@class::D::@getter::v
           firstFragment: #F13
           hasEnclosingTypeParameterReference: true
@@ -2323,13 +2330,13 @@
         #F1 F (nameOffset:13) (firstTokenOffset:0) (offset:13)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F2 hasInitializer v (nameOffset:53) (firstTokenOffset:53) (offset:53)
+        #F2 hasInitializer isOriginDeclaration v (nameOffset:53) (firstTokenOffset:53) (offset:53)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@getter::v
       setters
-        #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@setter::v
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
@@ -2346,20 +2353,20 @@
       firstFragment: #F1
       aliasedType: void Function(int Function(String))
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F2
       type: dynamic
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F4
       formalParameters
@@ -2404,7 +2411,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -2423,7 +2430,7 @@
             #F10 W (nameOffset:78) (firstTokenOffset:78) (offset:78)
               element: #E3 W
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:73)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           methods
@@ -2448,7 +2455,7 @@
           firstFragment: #F3
       supertype: D<U, int>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
           superConstructor: ConstructorMember
@@ -2476,7 +2483,7 @@
         #E3 W
           firstFragment: #F10
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F11
       methods
@@ -2527,7 +2534,7 @@
         #F1 class C (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -2544,7 +2551,7 @@
       firstFragment: #F1
       supertype: D
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/a.dart::@class::D::@constructor::new
@@ -2578,7 +2585,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -2592,7 +2599,7 @@
         #F6 class D (nameOffset:57) (firstTokenOffset:42) (offset:57)
           element: <testLibrary>::@class::D
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           methods
@@ -2612,7 +2619,7 @@
       firstFragment: #F1
       supertype: D
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
           superConstructor: <testLibrary>::@class::D::@constructor::new
@@ -2632,7 +2639,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F6
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
       methods
@@ -2666,13 +2673,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:40) (firstTokenOffset:40) (offset:40)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:40) (firstTokenOffset:40) (offset:40)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -2689,20 +2696,20 @@
                 #F8 requiredPositional h (nameOffset:21) (firstTokenOffset:16) (offset:21)
                   element: h@21
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -2742,13 +2749,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:42) (firstTokenOffset:42) (offset:42)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:42) (firstTokenOffset:42) (offset:42)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
@@ -2765,20 +2772,20 @@
                 #F8 requiredPositional h (nameOffset:22) (firstTokenOffset:17) (offset:22)
                   element: h@22
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -2821,14 +2828,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F4 f (nameOffset:29) (firstTokenOffset:20) (offset:29)
+            #F4 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:20) (offset:29)
               element: <testLibrary>::@class::C::@setter::f
               formalParameters
                 #F5 requiredPositional g (nameOffset:31) (firstTokenOffset:31) (offset:31)
@@ -2836,14 +2843,14 @@
         #F6 class D (nameOffset:54) (firstTokenOffset:39) (offset:54)
           element: <testLibrary>::@class::D
           fields
-            #F7 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F7 synthetic isOriginGetterSetter f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::D::@field::f
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           setters
-            #F9 f (nameOffset:67) (firstTokenOffset:58) (offset:67)
+            #F9 isOriginDeclaration f (nameOffset:67) (firstTokenOffset:58) (offset:67)
               element: <testLibrary>::@class::D::@setter::f
               formalParameters
                 #F10 requiredPositional g (nameOffset:73) (firstTokenOffset:69) (offset:73)
@@ -2857,18 +2864,18 @@
       firstFragment: #F1
       supertype: D
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int Function(String)
           setter: <testLibrary>::@class::C::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
           superConstructor: <testLibrary>::@class::D::@constructor::new
       setters
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::C::@setter::f
           firstFragment: #F4
           formalParameters
@@ -2881,17 +2888,17 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F6
       fields
-        synthetic f
+        synthetic isOriginGetterSetter f
           reference: <testLibrary>::@class::D::@field::f
           firstFragment: #F7
           type: int Function(String)
           setter: <testLibrary>::@class::D::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F8
       setters
-        abstract f
+        abstract isOriginDeclaration f
           reference: <testLibrary>::@class::D::@setter::f
           firstFragment: #F9
           formalParameters
@@ -2932,7 +2939,7 @@
         #F1 class B (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::B
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -2947,7 +2954,7 @@
       firstFragment: #F1
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/a.dart::@class::A::@constructor::new
@@ -2992,32 +2999,32 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
-            #F3 named (nameOffset:21) (firstTokenOffset:19) (offset:21)
+            #F3 isOriginDeclaration named (nameOffset:21) (firstTokenOffset:19) (offset:21)
               element: <testLibrary>::@class::A::@constructor::named
               typeName: A
               typeNameOffset: 19
               periodOffset: 20
       topLevelVariables
-        #F4 hasInitializer a1 (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F4 hasInitializer isOriginDeclaration a1 (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::a1
-        #F5 hasInitializer a2 (nameOffset:50) (firstTokenOffset:50) (offset:50)
+        #F5 hasInitializer isOriginDeclaration a2 (nameOffset:50) (firstTokenOffset:50) (offset:50)
           element: <testLibrary>::@topLevelVariable::a2
       getters
-        #F6 synthetic a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F6 synthetic isOriginVariable a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::a1
-        #F7 synthetic a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F7 synthetic isOriginVariable a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@getter::a2
       setters
-        #F8 synthetic a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F8 synthetic isOriginVariable a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@setter::a1
           formalParameters
             #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@setter::a1::@formalParameter::value
-        #F10 synthetic a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F10 synthetic isOriginVariable a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@setter::a2
           formalParameters
             #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
@@ -3027,38 +3034,38 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
-        named
+        isOriginDeclaration named
           reference: <testLibrary>::@class::A::@constructor::named
           firstFragment: #F3
   topLevelVariables
-    hasInitializer a1
+    hasImplicitType hasInitializer isOriginDeclaration a1
       reference: <testLibrary>::@topLevelVariable::a1
       firstFragment: #F4
       type: A
       getter: <testLibrary>::@getter::a1
       setter: <testLibrary>::@setter::a1
-    hasInitializer a2
+    hasImplicitType hasInitializer isOriginDeclaration a2
       reference: <testLibrary>::@topLevelVariable::a2
       firstFragment: #F5
       type: A
       getter: <testLibrary>::@getter::a2
       setter: <testLibrary>::@setter::a2
   getters
-    synthetic static a1
+    synthetic static isOriginVariable a1
       reference: <testLibrary>::@getter::a1
       firstFragment: #F6
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a1
-    synthetic static a2
+    synthetic static isOriginVariable a2
       reference: <testLibrary>::@getter::a2
       firstFragment: #F7
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a2
   setters
-    synthetic static a1
+    synthetic static isOriginVariable a1
       reference: <testLibrary>::@setter::a1
       firstFragment: #F8
       formalParameters
@@ -3067,7 +3074,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a1
-    synthetic static a2
+    synthetic static isOriginVariable a2
       reference: <testLibrary>::@setter::a2
       firstFragment: #F10
       formalParameters
@@ -3103,52 +3110,52 @@
         <testLibraryFragment>::@prefix2::foo
           fragments: @21
       topLevelVariables
-        #F1 hasInitializer a1 (nameOffset:30) (firstTokenOffset:30) (offset:30)
+        #F1 hasInitializer isOriginDeclaration a1 (nameOffset:30) (firstTokenOffset:30) (offset:30)
           element: <testLibrary>::@topLevelVariable::a1
-        #F2 hasInitializer a2 (nameOffset:48) (firstTokenOffset:48) (offset:48)
+        #F2 hasInitializer isOriginDeclaration a2 (nameOffset:48) (firstTokenOffset:48) (offset:48)
           element: <testLibrary>::@topLevelVariable::a2
       getters
-        #F3 synthetic a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F3 synthetic isOriginVariable a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@getter::a1
-        #F4 synthetic a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F4 synthetic isOriginVariable a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@getter::a2
       setters
-        #F5 synthetic a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+        #F5 synthetic isOriginVariable a1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
           element: <testLibrary>::@setter::a1
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@setter::a1::@formalParameter::value
-        #F7 synthetic a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F7 synthetic isOriginVariable a2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@setter::a2
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@setter::a2::@formalParameter::value
   topLevelVariables
-    hasInitializer a1
+    hasImplicitType hasInitializer isOriginDeclaration a1
       reference: <testLibrary>::@topLevelVariable::a1
       firstFragment: #F1
       type: A
       getter: <testLibrary>::@getter::a1
       setter: <testLibrary>::@setter::a1
-    hasInitializer a2
+    hasImplicitType hasInitializer isOriginDeclaration a2
       reference: <testLibrary>::@topLevelVariable::a2
       firstFragment: #F2
       type: A
       getter: <testLibrary>::@getter::a2
       setter: <testLibrary>::@setter::a2
   getters
-    synthetic static a1
+    synthetic static isOriginVariable a1
       reference: <testLibrary>::@getter::a1
       firstFragment: #F3
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a1
-    synthetic static a2
+    synthetic static isOriginVariable a2
       reference: <testLibrary>::@getter::a2
       firstFragment: #F4
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a2
   setters
-    synthetic static a1
+    synthetic static isOriginVariable a1
       reference: <testLibrary>::@setter::a1
       firstFragment: #F5
       formalParameters
@@ -3157,7 +3164,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a1
-    synthetic static a2
+    synthetic static isOriginVariable a2
       reference: <testLibrary>::@setter::a2
       firstFragment: #F7
       formalParameters
@@ -3184,13 +3191,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:71) (firstTokenOffset:71) (offset:71)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:71) (firstTokenOffset:71) (offset:71)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
@@ -3213,20 +3220,20 @@
                 #F10 requiredPositional y (nameOffset:54) (firstTokenOffset:47) (offset:54)
                   element: y@54
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: List<Object Function(int Function(String))>
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: List<Object Function(int Function(String))>
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -3289,7 +3296,7 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -3298,7 +3305,7 @@
         #F4 class B (nameOffset:48) (firstTokenOffset:33) (offset:48)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -3307,23 +3314,23 @@
         #F7 class C (nameOffset:84) (firstTokenOffset:69) (offset:84)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:84)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F9 class D (nameOffset:121) (firstTokenOffset:106) (offset:121)
           element: <testLibrary>::@class::D
           fields
-            #F10 f (nameOffset:141) (firstTokenOffset:141) (offset:141)
+            #F10 isOriginDeclaration f (nameOffset:141) (firstTokenOffset:141) (offset:141)
               element: <testLibrary>::@class::D::@field::f
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F12 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:141)
+            #F12 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:141)
               element: <testLibrary>::@class::D::@getter::f
           setters
-            #F13 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:141)
+            #F13 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:141)
               element: <testLibrary>::@class::D::@setter::f
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:141)
@@ -3333,7 +3340,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -3345,7 +3352,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
       methods
@@ -3360,7 +3367,7 @@
         A
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
     abstract hasNonFinalField class D
@@ -3368,25 +3375,25 @@
       firstFragment: #F9
       supertype: C
       fields
-        f
+        hasImplicitType isOriginDeclaration f
           reference: <testLibrary>::@class::D::@field::f
           firstFragment: #F10
           type: dynamic
           getter: <testLibrary>::@class::D::@getter::f
           setter: <testLibrary>::@class::D::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F11
           superConstructor: <testLibrary>::@class::C::@constructor::new
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::D::@getter::f
           firstFragment: #F12
           returnType: dynamic
           variable: <testLibrary>::@class::D::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::D::@setter::f
           firstFragment: #F13
           formalParameters
@@ -3418,7 +3425,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -3427,29 +3434,29 @@
         #F4 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           fields
-            #F5 a (nameOffset:50) (firstTokenOffset:50) (offset:50)
+            #F5 isOriginDeclaration a (nameOffset:50) (firstTokenOffset:50) (offset:50)
               element: <testLibrary>::@class::B::@field::a
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@getter::a
           setters
-            #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F8 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@setter::a
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
                   element: <testLibrary>::@class::B::@setter::a::@formalParameter::value
       topLevelVariables
-        #F10 hasInitializer c (nameOffset:59) (firstTokenOffset:59) (offset:59)
+        #F10 hasInitializer isOriginDeclaration c (nameOffset:59) (firstTokenOffset:59) (offset:59)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F11 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F11 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@getter::c
       setters
-        #F12 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F12 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@setter::c
           formalParameters
             #F13 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
@@ -3459,7 +3466,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -3471,24 +3478,24 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       fields
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::B::@field::a
           firstFragment: #F5
           type: A
           getter: <testLibrary>::@class::B::@getter::a
           setter: <testLibrary>::@class::B::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::B::@getter::a
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@class::B::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::B::@setter::a
           firstFragment: #F8
           formalParameters
@@ -3498,20 +3505,20 @@
           returnType: void
           variable: <testLibrary>::@class::B::@field::a
   topLevelVariables
-    hasInitializer c
+    hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F10
       type: double
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F11
       returnType: double
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F12
       formalParameters
@@ -3538,52 +3545,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:42) (firstTokenOffset:42) (offset:42)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:42) (firstTokenOffset:42) (offset:42)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@getter::b
       setters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@setter::b
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@setter::b::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int Function()
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer b
+    hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: int Function()
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::b
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F5
       formalParameters
@@ -3592,7 +3599,7 @@
           type: int Function()
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F7
       formalParameters
@@ -3622,32 +3629,32 @@
         <testLibraryFragment>::@prefix2::a
           fragments: @28
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Future<dynamic> Function()
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Future<dynamic> Function()
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -3670,32 +3677,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int Function(int Function(String))
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int Function(int Function(String))
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -3718,32 +3725,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int Function(int Function(String))
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int Function(int Function(String))
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -3771,32 +3778,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer y (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration y (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::y
       getters
-        #F2 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::y
       setters
-        #F3 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::y
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::y::@formalParameter::value
   topLevelVariables
-    hasInitializer y
+    hasImplicitType hasInitializer isOriginDeclaration y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::y
       setter: <testLibrary>::@setter::y
   getters
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@getter::y
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::y
   setters
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@setter::y
       firstFragment: #F3
       formalParameters
@@ -3825,45 +3832,49 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::x
-            #F3 hasInitializer y (nameOffset:51) (firstTokenOffset:51) (offset:51)
+            #F3 hasInitializer isOriginDeclaration y (nameOffset:51) (firstTokenOffset:51) (offset:51)
               element: <testLibrary>::@class::A::@field::y
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::x
-            #F6 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F6 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::A::@getter::y
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static final hasInitializer x
+        static final hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
+          typeInferenceError: dependencyCycle
+            arguments: [x, y]
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::x
-        static final hasInitializer y
+        static final hasImplicitType hasInitializer isOriginDeclaration y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F3
+          typeInferenceError: dependencyCycle
+            arguments: [x, y]
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static x
+        synthetic static isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F5
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::x
-        synthetic static y
+        synthetic static isOriginVariable y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F6
           returnType: dynamic
@@ -3889,59 +3900,63 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer a (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::a
-            #F3 hasInitializer b (nameOffset:49) (firstTokenOffset:49) (offset:49)
+            #F3 hasInitializer isOriginDeclaration b (nameOffset:49) (firstTokenOffset:49) (offset:49)
               element: <testLibrary>::@class::A::@field::b
-            #F4 hasInitializer c (nameOffset:66) (firstTokenOffset:66) (offset:66)
+            #F4 hasInitializer isOriginDeclaration c (nameOffset:66) (firstTokenOffset:66) (offset:66)
               element: <testLibrary>::@class::A::@field::c
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::a
-            #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::A::@getter::b
-            #F8 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F8 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::A::@getter::c
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static final hasInitializer a
+        static final hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
+          typeInferenceError: dependencyCycle
+            arguments: [a, c]
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::a
-        static final hasInitializer b
+        static final hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@class::A::@field::b
           firstFragment: #F3
           type: A
           getter: <testLibrary>::@class::A::@getter::b
-        final hasInitializer c
+        final hasImplicitType hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@class::A::@field::c
           firstFragment: #F4
+          typeInferenceError: dependencyCycle
+            arguments: [a, c]
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::c
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F6
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::a
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@class::A::@getter::b
           firstFragment: #F7
           returnType: A
           variable: <testLibrary>::@class::A::@field::b
-        synthetic c
+        synthetic isOriginVariable c
           reference: <testLibrary>::@class::A::@getter::c
           firstFragment: #F8
           returnType: dynamic
@@ -3974,10 +3989,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 value (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration value (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::A::@field::value
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 27
@@ -3985,10 +4000,10 @@
                 #F5 requiredPositional final this.value (nameOffset:34) (firstTokenOffset:29) (offset:34)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::value
           getters
-            #F6 synthetic value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F6 synthetic isOriginVariable value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::A::@getter::value
           setters
-            #F7 synthetic value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F7 synthetic isOriginVariable value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::A::@setter::value
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -3996,17 +4011,17 @@
         #F9 class B (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::B
           fields
-            #F10 hasInitializer a (nameOffset:61) (firstTokenOffset:61) (offset:61)
+            #F10 hasInitializer isOriginDeclaration a (nameOffset:61) (firstTokenOffset:61) (offset:61)
               element: <testLibrary>::@class::B::@field::a
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F12 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F12 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::B::@getter::a
           setters
-            #F13 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
+            #F13 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
               element: <testLibrary>::@class::B::@setter::a
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
@@ -4019,7 +4034,7 @@
         #E0 T
           firstFragment: #F2
       fields
-        value
+        isOriginDeclaration value
           reference: <testLibrary>::@class::A::@field::value
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -4027,7 +4042,7 @@
           getter: <testLibrary>::@class::A::@getter::value
           setter: <testLibrary>::@class::A::@setter::value
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -4036,14 +4051,14 @@
               type: T
               field: <testLibrary>::@class::A::@field::value
       getters
-        synthetic value
+        synthetic isOriginVariable value
           reference: <testLibrary>::@class::A::@getter::value
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::A::@field::value
       setters
-        synthetic value
+        synthetic isOriginVariable value
           reference: <testLibrary>::@class::A::@setter::value
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
@@ -4057,24 +4072,24 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F9
       fields
-        hasInitializer a
+        hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::B::@field::a
           firstFragment: #F10
           type: A<String>
           getter: <testLibrary>::@class::B::@getter::a
           setter: <testLibrary>::@class::B::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F11
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::B::@getter::a
           firstFragment: #F12
           returnType: A<String>
           variable: <testLibrary>::@class::B::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::B::@setter::a
           firstFragment: #F13
           formalParameters
@@ -4115,10 +4130,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 value (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration value (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::A::@field::value
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:27) (offset:27)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 27
@@ -4126,10 +4141,10 @@
                 #F5 requiredPositional final this.value (nameOffset:34) (firstTokenOffset:29) (offset:34)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::value
           getters
-            #F6 synthetic value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F6 synthetic isOriginVariable value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::A::@getter::value
           setters
-            #F7 synthetic value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F7 synthetic isOriginVariable value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::A::@setter::value
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -4140,7 +4155,7 @@
             #F10 T (nameOffset:53) (firstTokenOffset:53) (offset:53)
               element: #E1 T
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F11 synthetic isOriginMixinApplication new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
               formalParameters
@@ -4149,17 +4164,17 @@
         #F13 class C (nameOffset:78) (firstTokenOffset:72) (offset:78)
           element: <testLibrary>::@class::C
           fields
-            #F14 hasInitializer a (nameOffset:88) (firstTokenOffset:88) (offset:88)
+            #F14 hasInitializer isOriginDeclaration a (nameOffset:88) (firstTokenOffset:88) (offset:88)
               element: <testLibrary>::@class::C::@field::a
           constructors
-            #F15 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F15 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F16 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
+            #F16 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
               element: <testLibrary>::@class::C::@getter::a
           setters
-            #F17 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
+            #F17 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
               element: <testLibrary>::@class::C::@setter::a
               formalParameters
                 #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:88)
@@ -4175,7 +4190,7 @@
         #E0 T
           firstFragment: #F2
       fields
-        value
+        isOriginDeclaration value
           reference: <testLibrary>::@class::A::@field::value
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -4183,7 +4198,7 @@
           getter: <testLibrary>::@class::A::@getter::value
           setter: <testLibrary>::@class::A::@setter::value
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -4192,14 +4207,14 @@
               type: T
               field: <testLibrary>::@class::A::@field::value
       getters
-        synthetic value
+        synthetic isOriginVariable value
           reference: <testLibrary>::@class::A::@getter::value
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::A::@field::value
       setters
-        synthetic value
+        synthetic isOriginVariable value
           reference: <testLibrary>::@class::A::@setter::value
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
@@ -4219,7 +4234,7 @@
       mixins
         M
       constructors
-        synthetic new
+        synthetic isOriginMixinApplication new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F11
           formalParameters
@@ -4245,24 +4260,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F13
       fields
-        hasInitializer a
+        hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::C::@field::a
           firstFragment: #F14
           type: B<int>
           getter: <testLibrary>::@class::C::@getter::a
           setter: <testLibrary>::@class::C::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F15
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@getter::a
           firstFragment: #F16
           returnType: B<int>
           variable: <testLibrary>::@class::C::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::C::@setter::a
           firstFragment: #F17
           formalParameters
@@ -4300,10 +4315,10 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 hasInitializer f (nameOffset:19) (firstTokenOffset:19) (offset:19)
+            #F3 hasInitializer isOriginDeclaration f (nameOffset:19) (firstTokenOffset:19) (offset:19)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F4 new (nameOffset:<null>) (firstTokenOffset:28) (offset:28)
+            #F4 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:28) (offset:28)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 28
@@ -4311,10 +4326,10 @@
                 #F5 requiredPositional final this.f (nameOffset:35) (firstTokenOffset:30) (offset:35)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::f
           getters
-            #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@class::A::@getter::f
           setters
-            #F7 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+            #F7 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@class::A::@setter::f
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
@@ -4327,14 +4342,14 @@
         #E0 T
           firstFragment: #F2
       fields
-        hasInitializer f
+        hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::f
           setter: <testLibrary>::@class::A::@setter::f
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
           formalParameters
@@ -4343,13 +4358,13 @@
               type: int
               field: <testLibrary>::@class::A::@field::f
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@setter::f
           firstFragment: #F7
           formalParameters
@@ -4379,7 +4394,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
+            #F2 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:12) (offset:12)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 12
@@ -4387,21 +4402,21 @@
                 #F3 requiredPositional _ (nameOffset:14) (firstTokenOffset:14) (offset:14)
                   element: <testLibrary>::@class::A::@constructor::new::@formalParameter::_
       topLevelVariables
-        #F4 hasInitializer a (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F4 hasInitializer isOriginDeclaration a (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::a
-        #F5 hasInitializer b (nameOffset:48) (firstTokenOffset:48) (offset:48)
+        #F5 hasInitializer isOriginDeclaration b (nameOffset:48) (firstTokenOffset:48) (offset:48)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::a
-        #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@getter::b
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
           formalParameters
@@ -4409,23 +4424,27 @@
               firstFragment: #F3
               type: dynamic
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F4
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::a
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F5
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F6
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F7
       returnType: dynamic
@@ -4451,32 +4470,32 @@
         package:test/a.dart
         package:test/b.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:38) (firstTokenOffset:38) (offset:38)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:38) (firstTokenOffset:38) (offset:38)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: InvalidType
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: InvalidType
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -4499,32 +4518,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: dynamic Function(dynamic) Function(dynamic)
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: dynamic Function(dynamic) Function(dynamic)
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -4547,32 +4566,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int Function(int) Function(int)
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int Function(int) Function(int)
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -4595,32 +4614,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: dynamic Function([dynamic])
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: dynamic Function([dynamic])
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -4646,47 +4665,51 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer c (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::c
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::a
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [b, c]
       type: dynamic
       getter: <testLibrary>::@getter::b
-    final hasInitializer c
+    final hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
+      typeInferenceError: dependencyCycle
+        arguments: [b, c]
       type: dynamic
       getter: <testLibrary>::@getter::c
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: dynamic
@@ -4708,47 +4731,51 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer c (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::c
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::a
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::b
-    final hasInitializer c
+    final hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
       type: dynamic
       getter: <testLibrary>::@getter::c
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: dynamic
@@ -4772,61 +4799,69 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer c (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::c
-        #F4 hasInitializer d (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F4 hasInitializer isOriginDeclaration d (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::d
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F6 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F6 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::b
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::c
-        #F8 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F8 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::d
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a, d]
       type: dynamic
       getter: <testLibrary>::@getter::a
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [b, c]
       type: dynamic
       getter: <testLibrary>::@getter::b
-    final hasInitializer c
+    final hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
+      typeInferenceError: dependencyCycle
+        arguments: [b, c]
       type: dynamic
       getter: <testLibrary>::@getter::c
-    final hasInitializer d
+    final hasImplicitType hasInitializer isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F4
+      typeInferenceError: dependencyCycle
+        arguments: [a, d]
       type: dynamic
       getter: <testLibrary>::@getter::d
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F6
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F7
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F8
       returnType: dynamic
@@ -4854,47 +4889,53 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer c (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::c
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::a
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [b, c]
       type: dynamic
       getter: <testLibrary>::@getter::b
-    final hasInitializer c
+    final hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
+      typeInferenceError: dependencyCycle
+        arguments: [b, c]
       type: dynamic
       getter: <testLibrary>::@getter::c
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: dynamic
@@ -4926,13 +4967,13 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F3 class B (nameOffset:18) (firstTokenOffset:12) (offset:18)
           element: <testLibrary>::@class::B
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F5 class C (nameOffset:40) (firstTokenOffset:34) (offset:40)
@@ -4941,10 +4982,10 @@
             #F6 T (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: #E0 T
           fields
-            #F7 f (nameOffset:67) (firstTokenOffset:67) (offset:67)
+            #F7 isOriginDeclaration f (nameOffset:67) (firstTokenOffset:67) (offset:67)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F8 const new (nameOffset:<null>) (firstTokenOffset:72) (offset:78)
+            #F8 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:72) (offset:78)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
               typeNameOffset: 78
@@ -4952,24 +4993,24 @@
                 #F9 requiredPositional final this.f (nameOffset:85) (firstTokenOffset:80) (offset:85)
                   element: <testLibrary>::@class::C::@constructor::new::@formalParameter::f
           getters
-            #F10 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
+            #F10 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:67)
               element: <testLibrary>::@class::C::@getter::f
       topLevelVariables
-        #F11 hasInitializer b (nameOffset:98) (firstTokenOffset:98) (offset:98)
+        #F11 hasInitializer isOriginDeclaration b (nameOffset:98) (firstTokenOffset:98) (offset:98)
           element: <testLibrary>::@topLevelVariable::b
-        #F12 hasInitializer c (nameOffset:113) (firstTokenOffset:113) (offset:113)
+        #F12 hasInitializer isOriginDeclaration c (nameOffset:113) (firstTokenOffset:113) (offset:113)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F13 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:98)
+        #F13 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:98)
           element: <testLibrary>::@getter::b
-        #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
+        #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
           element: <testLibrary>::@getter::c
   classes
     class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
     class B
@@ -4977,7 +5018,7 @@
       firstFragment: #F3
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F4
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -4989,14 +5030,14 @@
           firstFragment: #F6
           bound: A
       fields
-        final f
+        final isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::C::@getter::f
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
           formalParameters
@@ -5005,30 +5046,30 @@
               type: T
               field: <testLibrary>::@class::C::@field::f
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F10
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::C::@field::f
   topLevelVariables
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F11
       type: B
       getter: <testLibrary>::@getter::b
-    final hasInitializer c
+    final hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F12
       type: C<B>
       getter: <testLibrary>::@getter::c
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F13
       returnType: B
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F14
       returnType: C<B>
@@ -5053,19 +5094,19 @@
         #F1 extension <null-name> (nameOffset:<null>) (firstTokenOffset:0) (offset:0)
           element: <testLibrary>::@extension::0
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:0)
               element: <testLibrary>::@extension::0::@field::foo
           getters
-            #F3 foo (nameOffset:32) (firstTokenOffset:24) (offset:32)
+            #F3 isOriginDeclaration foo (nameOffset:32) (firstTokenOffset:24) (offset:32)
               element: <testLibrary>::@extension::0::@getter::foo
       topLevelVariables
-        #F4 hasInitializer v (nameOffset:48) (firstTokenOffset:48) (offset:48)
+        #F4 hasInitializer isOriginDeclaration v (nameOffset:48) (firstTokenOffset:48) (offset:48)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@getter::v
       setters
-        #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+        #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
           element: <testLibrary>::@setter::v
           formalParameters
             #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
@@ -5077,32 +5118,32 @@
       extendedType: String
       onDeclaration: dart:core::@class::String
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@extension::0::@field::foo
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@extension::0::@getter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@extension::0::@getter::foo
           firstFragment: #F3
           returnType: int
           variable: <testLibrary>::@extension::0::@field::foo
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F6
       formalParameters
@@ -5135,29 +5176,29 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       typeAliases
         #F4 F (nameOffset:34) (firstTokenOffset:24) (offset:34)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F5 hasInitializer V2 (nameOffset:56) (firstTokenOffset:56) (offset:56)
+        #F5 hasInitializer isOriginDeclaration V2 (nameOffset:56) (firstTokenOffset:56) (offset:56)
           element: <testLibrary>::@topLevelVariable::V2
-        #F6 hasInitializer V (nameOffset:71) (firstTokenOffset:71) (offset:71)
+        #F6 hasInitializer isOriginDeclaration V (nameOffset:71) (firstTokenOffset:71) (offset:71)
           element: <testLibrary>::@topLevelVariable::V
       getters
-        #F7 synthetic V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+        #F7 synthetic isOriginVariable V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
           element: <testLibrary>::@getter::V2
-        #F8 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+        #F8 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
           element: <testLibrary>::@getter::V
       setters
-        #F9 synthetic V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+        #F9 synthetic isOriginVariable V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
           element: <testLibrary>::@setter::V2
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@setter::V2::@formalParameter::value
-        #F11 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+        #F11 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
           element: <testLibrary>::@setter::V
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
@@ -5177,7 +5218,7 @@
           firstFragment: #F2
           bound: dynamic
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   typeAliases
@@ -5186,31 +5227,31 @@
       firstFragment: #F4
       aliasedType: dynamic Function(dynamic)
   topLevelVariables
-    hasInitializer V2
+    hasInitializer isOriginDeclaration V2
       reference: <testLibrary>::@topLevelVariable::V2
       firstFragment: #F5
       type: dynamic
       getter: <testLibrary>::@getter::V2
       setter: <testLibrary>::@setter::V2
-    hasInitializer V
+    hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F6
       type: int
       getter: <testLibrary>::@getter::V
       setter: <testLibrary>::@setter::V
   getters
-    synthetic static V2
+    synthetic static isOriginVariable V2
       reference: <testLibrary>::@getter::V2
       firstFragment: #F7
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::V2
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::V
   setters
-    synthetic static V2
+    synthetic static isOriginVariable V2
       reference: <testLibrary>::@setter::V2
       firstFragment: #F9
       formalParameters
@@ -5219,7 +5260,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::V2
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@setter::V
       firstFragment: #F11
       formalParameters
@@ -5252,52 +5293,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 V (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration V (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::V
-        #F2 V2 (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F2 isOriginDeclaration V2 (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::V2
       getters
-        #F3 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::V
-        #F4 synthetic V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F4 synthetic isOriginVariable V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::V2
       setters
-        #F5 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::V
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::V::@formalParameter::value
-        #F7 synthetic V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F7 synthetic isOriginVariable V2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@setter::V2
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@setter::V2::@formalParameter::value
   topLevelVariables
-    V
+    hasImplicitType isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::V
       setter: <testLibrary>::@setter::V
-    V2
+    isOriginDeclaration V2
       reference: <testLibrary>::@topLevelVariable::V2
       firstFragment: #F2
       type: List<dynamic>
       getter: <testLibrary>::@getter::V2
       setter: <testLibrary>::@setter::V2
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::V
-    synthetic static V2
+    synthetic static isOriginVariable V2
       reference: <testLibrary>::@getter::V2
       firstFragment: #F4
       returnType: List<dynamic>
       variable: <testLibrary>::@topLevelVariable::V2
   setters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@setter::V
       firstFragment: #F5
       formalParameters
@@ -5306,7 +5347,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::V
-    synthetic static V2
+    synthetic static isOriginVariable V2
       reference: <testLibrary>::@setter::V2
       firstFragment: #F7
       formalParameters
@@ -5337,7 +5378,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -5354,7 +5395,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       methods
@@ -5380,32 +5421,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    v
+    isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: InvalidType
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: InvalidType
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -5426,32 +5467,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 d (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 isOriginDeclaration d (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::d
       getters
-        #F2 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::d
       setters
-        #F3 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F3 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@setter::d
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@setter::d::@formalParameter::value
   topLevelVariables
-    d
+    isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F1
       type: Never
       getter: <testLibrary>::@getter::d
       setter: <testLibrary>::@setter::d
   getters
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F2
       returnType: Never
       variable: <testLibrary>::@topLevelVariable::d
   setters
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@setter::d
       firstFragment: #F3
       formalParameters
@@ -5482,17 +5523,17 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 t (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F3 isOriginDeclaration t (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@field::t
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F5 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@getter::t
           setters
-            #F6 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F6 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@setter::t
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -5505,7 +5546,7 @@
         #E0 T
           firstFragment: #F2
       fields
-        t
+        isOriginDeclaration t
           reference: <testLibrary>::@class::C::@field::t
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -5513,18 +5554,18 @@
           getter: <testLibrary>::@class::C::@getter::t
           setter: <testLibrary>::@class::C::@setter::t
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::C::@getter::t
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::C::@field::t
       setters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::C::@setter::t
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
@@ -5556,17 +5597,17 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           fields
-            #F3 t (nameOffset:18) (firstTokenOffset:18) (offset:18)
+            #F3 isOriginDeclaration t (nameOffset:18) (firstTokenOffset:18) (offset:18)
               element: <testLibrary>::@class::C::@field::t
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F5 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F5 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@getter::t
           setters
-            #F6 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+            #F6 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@class::C::@setter::t
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
@@ -5579,7 +5620,7 @@
         #E0 T
           firstFragment: #F2
       fields
-        t
+        isOriginDeclaration t
           reference: <testLibrary>::@class::C::@field::t
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -5587,18 +5628,18 @@
           getter: <testLibrary>::@class::C::@getter::t
           setter: <testLibrary>::@class::C::@setter::t
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       getters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::C::@getter::t
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           returnType: T?
           variable: <testLibrary>::@class::C::@field::t
       setters
-        synthetic t
+        synthetic isOriginVariable t
           reference: <testLibrary>::@class::C::@setter::t
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
@@ -5629,14 +5670,14 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       enums
         #F3 enum E (nameOffset:16) (firstTokenOffset:11) (offset:16)
           element: <testLibrary>::@enum::E
           fields
-            #F4 hasInitializer v (nameOffset:20) (firstTokenOffset:20) (offset:20)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:20) (firstTokenOffset:20) (offset:20)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -5650,7 +5691,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -5663,43 +5704,43 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F6 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@enum::E::@getter::v
-            #F8 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F8 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@enum::E::@getter::values
       typeAliases
         #F9 F (nameOffset:32) (firstTokenOffset:24) (offset:32)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F10 c (nameOffset:39) (firstTokenOffset:39) (offset:39)
+        #F10 isOriginDeclaration c (nameOffset:39) (firstTokenOffset:39) (offset:39)
           element: <testLibrary>::@topLevelVariable::c
-        #F11 e (nameOffset:44) (firstTokenOffset:44) (offset:44)
+        #F11 isOriginDeclaration e (nameOffset:44) (firstTokenOffset:44) (offset:44)
           element: <testLibrary>::@topLevelVariable::e
-        #F12 f (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F12 isOriginDeclaration f (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F13 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F13 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@getter::c
-        #F14 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+        #F14 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
           element: <testLibrary>::@getter::e
-        #F15 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F15 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::f
       setters
-        #F16 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F16 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@setter::c
           formalParameters
             #F17 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F18 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+        #F18 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
           element: <testLibrary>::@setter::e
           formalParameters
             #F19 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F20 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F20 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::f
           formalParameters
             #F21 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
@@ -5709,7 +5750,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   enums
@@ -5718,7 +5759,7 @@
       firstFragment: #F3
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F4
           type: E
@@ -5726,7 +5767,7 @@
             fragment: #F4
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F5
           type: List<E>
@@ -5735,16 +5776,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F6
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F7
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F8
           returnType: List<E>
@@ -5755,19 +5796,19 @@
       firstFragment: #F9
       aliasedType: dynamic Function()
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F10
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F11
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F12
       type: dynamic Function()
@@ -5775,24 +5816,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F13
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F14
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F15
       returnType: dynamic Function()
         alias: <testLibrary>::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F16
       formalParameters
@@ -5801,7 +5842,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F18
       formalParameters
@@ -5810,7 +5851,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F20
       formalParameters
@@ -5845,31 +5886,31 @@
           partKeywordOffset: 11
           unit: #F1
       topLevelVariables
-        #F2 c (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F2 isOriginDeclaration c (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::c
-        #F3 e (nameOffset:33) (firstTokenOffset:33) (offset:33)
+        #F3 isOriginDeclaration e (nameOffset:33) (firstTokenOffset:33) (offset:33)
           element: <testLibrary>::@topLevelVariable::e
-        #F4 f (nameOffset:38) (firstTokenOffset:38) (offset:38)
+        #F4 isOriginDeclaration f (nameOffset:38) (firstTokenOffset:38) (offset:38)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F5 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F5 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::c
-        #F6 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F6 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@getter::e
-        #F7 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F7 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@getter::f
       setters
-        #F8 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F8 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@setter::c
           formalParameters
             #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F10 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F10 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@setter::e
           formalParameters
             #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F12 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F12 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@setter::f
           formalParameters
             #F13 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
@@ -5882,14 +5923,14 @@
         #F14 class C (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::C
           constructors
-            #F15 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F15 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       enums
         #F16 enum E (nameOffset:27) (firstTokenOffset:22) (offset:27)
           element: <testLibrary>::@enum::E
           fields
-            #F17 hasInitializer v (nameOffset:31) (firstTokenOffset:31) (offset:31)
+            #F17 hasInitializer isOriginDeclaration v (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -5903,7 +5944,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F18 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F18 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -5916,13 +5957,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F19 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F19 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F20 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F20 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@enum::E::@getter::v
-            #F21 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F21 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@getter::values
       typeAliases
         #F22 F (nameOffset:43) (firstTokenOffset:35) (offset:43)
@@ -5932,7 +5973,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F14
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F15
   enums
@@ -5941,7 +5982,7 @@
       firstFragment: #F16
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F17
           type: E
@@ -5949,7 +5990,7 @@
             fragment: #F17
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F18
           type: List<E>
@@ -5958,16 +5999,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F19
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F20
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F21
           returnType: List<E>
@@ -5978,19 +6019,19 @@
       firstFragment: #F22
       aliasedType: dynamic Function()
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F2
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F3
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F4
       type: dynamic Function()
@@ -5998,24 +6039,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F5
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F6
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F7
       returnType: dynamic Function()
         alias: <testLibrary>::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F8
       formalParameters
@@ -6024,7 +6065,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F10
       formalParameters
@@ -6033,7 +6074,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F12
       formalParameters
@@ -6068,14 +6109,14 @@
         #F2 class C (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::C
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       enums
         #F4 enum E (nameOffset:42) (firstTokenOffset:37) (offset:42)
           element: <testLibrary>::@enum::E
           fields
-            #F5 hasInitializer v (nameOffset:46) (firstTokenOffset:46) (offset:46)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6089,7 +6130,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6102,13 +6143,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@enum::E::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@enum::E::@getter::values
       typeAliases
         #F10 F (nameOffset:58) (firstTokenOffset:50) (offset:58)
@@ -6118,31 +6159,31 @@
       enclosingFragment: #F0
       previousFragment: #F0
       topLevelVariables
-        #F11 c (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F11 isOriginDeclaration c (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::c
-        #F12 e (nameOffset:18) (firstTokenOffset:18) (offset:18)
+        #F12 isOriginDeclaration e (nameOffset:18) (firstTokenOffset:18) (offset:18)
           element: <testLibrary>::@topLevelVariable::e
-        #F13 f (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F13 isOriginDeclaration f (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::c
-        #F15 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F15 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@getter::e
-        #F16 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F16 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::f
       setters
-        #F17 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F17 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@setter::c
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F19 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F19 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@setter::e
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F21 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F21 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@setter::f
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
@@ -6152,7 +6193,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   enums
@@ -6161,7 +6202,7 @@
       firstFragment: #F4
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F5
           type: E
@@ -6169,7 +6210,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F6
           type: List<E>
@@ -6178,16 +6219,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F9
           returnType: List<E>
@@ -6198,19 +6239,19 @@
       firstFragment: #F10
       aliasedType: dynamic Function()
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F11
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F12
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F13
       type: dynamic Function()
@@ -6218,24 +6259,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F14
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F15
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F16
       returnType: dynamic Function()
         alias: <testLibrary>::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F17
       formalParameters
@@ -6244,7 +6285,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F19
       formalParameters
@@ -6253,7 +6294,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F21
       formalParameters
@@ -6301,14 +6342,14 @@
         #F3 class C (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::C
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       enums
         #F5 enum E (nameOffset:27) (firstTokenOffset:22) (offset:27)
           element: <testLibrary>::@enum::E
           fields
-            #F6 hasInitializer v (nameOffset:31) (firstTokenOffset:31) (offset:31)
+            #F6 hasInitializer isOriginDeclaration v (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6322,7 +6363,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F7 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F7 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6335,13 +6376,13 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F8 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F8 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F9 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F9 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@enum::E::@getter::v
-            #F10 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F10 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@getter::values
       typeAliases
         #F11 F (nameOffset:43) (firstTokenOffset:35) (offset:43)
@@ -6351,31 +6392,31 @@
       enclosingFragment: #F0
       previousFragment: #F1
       topLevelVariables
-        #F12 c (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F12 isOriginDeclaration c (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::c
-        #F13 e (nameOffset:18) (firstTokenOffset:18) (offset:18)
+        #F13 isOriginDeclaration e (nameOffset:18) (firstTokenOffset:18) (offset:18)
           element: <testLibrary>::@topLevelVariable::e
-        #F14 f (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F14 isOriginDeclaration f (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F15 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F15 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::c
-        #F16 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F16 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@getter::e
-        #F17 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F17 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::f
       setters
-        #F18 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F18 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@setter::c
           formalParameters
             #F19 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F20 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F20 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@setter::e
           formalParameters
             #F21 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F22 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F22 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@setter::f
           formalParameters
             #F23 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
@@ -6385,7 +6426,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   enums
@@ -6394,7 +6435,7 @@
       firstFragment: #F5
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F6
           type: E
@@ -6402,7 +6443,7 @@
             fragment: #F6
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F7
           type: List<E>
@@ -6411,16 +6452,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F8
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F9
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F10
           returnType: List<E>
@@ -6431,19 +6472,19 @@
       firstFragment: #F11
       aliasedType: dynamic Function()
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F12
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F13
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F14
       type: dynamic Function()
@@ -6451,24 +6492,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F15
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F16
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F17
       returnType: dynamic Function()
         alias: <testLibrary>::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F18
       formalParameters
@@ -6477,7 +6518,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F20
       formalParameters
@@ -6486,7 +6527,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F22
       formalParameters
@@ -6526,14 +6567,14 @@
         #F2 class C (nameOffset:17) (firstTokenOffset:11) (offset:17)
           element: <testLibrary>::@class::C
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       enums
         #F4 enum E (nameOffset:27) (firstTokenOffset:22) (offset:27)
           element: <testLibrary>::@enum::E
           fields
-            #F5 hasInitializer v (nameOffset:31) (firstTokenOffset:31) (offset:31)
+            #F5 hasInitializer isOriginDeclaration v (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6547,7 +6588,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F6 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6560,43 +6601,43 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F7 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F7 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F8 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F8 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@enum::E::@getter::v
-            #F9 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F9 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@enum::E::@getter::values
       typeAliases
         #F10 F (nameOffset:43) (firstTokenOffset:35) (offset:43)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F11 c (nameOffset:50) (firstTokenOffset:50) (offset:50)
+        #F11 isOriginDeclaration c (nameOffset:50) (firstTokenOffset:50) (offset:50)
           element: <testLibrary>::@topLevelVariable::c
-        #F12 e (nameOffset:55) (firstTokenOffset:55) (offset:55)
+        #F12 isOriginDeclaration e (nameOffset:55) (firstTokenOffset:55) (offset:55)
           element: <testLibrary>::@topLevelVariable::e
-        #F13 f (nameOffset:60) (firstTokenOffset:60) (offset:60)
+        #F13 isOriginDeclaration f (nameOffset:60) (firstTokenOffset:60) (offset:60)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@getter::c
-        #F15 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+        #F15 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
           element: <testLibrary>::@getter::e
-        #F16 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+        #F16 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
           element: <testLibrary>::@getter::f
       setters
-        #F17 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F17 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@setter::c
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F19 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+        #F19 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
           element: <testLibrary>::@setter::e
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F21 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+        #F21 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
           element: <testLibrary>::@setter::f
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
@@ -6606,7 +6647,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   enums
@@ -6615,7 +6656,7 @@
       firstFragment: #F4
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F5
           type: E
@@ -6623,7 +6664,7 @@
             fragment: #F5
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F6
           type: List<E>
@@ -6632,16 +6673,16 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F7
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F8
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F9
           returnType: List<E>
@@ -6652,19 +6693,19 @@
       firstFragment: #F10
       aliasedType: dynamic Function()
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F11
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F12
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F13
       type: dynamic Function()
@@ -6672,24 +6713,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F14
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F15
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F16
       returnType: dynamic Function()
         alias: <testLibrary>::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F17
       formalParameters
@@ -6698,7 +6739,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F19
       formalParameters
@@ -6707,7 +6748,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F21
       formalParameters
@@ -6732,17 +6773,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F3 c (nameOffset:13) (firstTokenOffset:13) (offset:13)
+        #F3 isOriginDeclaration c (nameOffset:13) (firstTokenOffset:13) (offset:13)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@getter::c
       setters
-        #F5 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
+        #F5 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
           element: <testLibrary>::@setter::c
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:13)
@@ -6752,24 +6793,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F5
       formalParameters
@@ -6798,17 +6839,17 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F5 c (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F5 isOriginDeclaration c (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::c
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
@@ -6823,24 +6864,24 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F5
       type: C<int, String>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: C<int, String>
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -6869,17 +6910,17 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F5 c (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F5 isOriginDeclaration c (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::c
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
@@ -6894,24 +6935,24 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F5
       type: C<dynamic, dynamic>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: C<dynamic, dynamic>
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -6935,7 +6976,7 @@
         #F1 enum E (nameOffset:5) (firstTokenOffset:0) (offset:5)
           element: <testLibrary>::@enum::E
           fields
-            #F2 hasInitializer v (nameOffset:9) (firstTokenOffset:9) (offset:9)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:9) (firstTokenOffset:9) (offset:9)
               element: <testLibrary>::@enum::E::@field::v
               initializer: expression_0
                 InstanceCreationExpression
@@ -6949,7 +6990,7 @@
                     leftParenthesis: ( @0
                     rightParenthesis: ) @0
                   staticType: E
-            #F3 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F3 synthetic isOriginEnumValues values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@field::values
               initializer: expression_1
                 ListLiteral
@@ -6962,22 +7003,22 @@
                   rightBracket: ] @0
                   staticType: List<E>
           constructors
-            #F4 synthetic const new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F4 synthetic const isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@constructor::new
               typeName: E
           getters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:9)
               element: <testLibrary>::@enum::E::@getter::v
-            #F6 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
+            #F6 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:5)
               element: <testLibrary>::@enum::E::@getter::values
       topLevelVariables
-        #F7 e (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F7 isOriginDeclaration e (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::e
       getters
-        #F8 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F8 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::e
       setters
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
@@ -6988,7 +7029,7 @@
       firstFragment: #F1
       supertype: Enum
       fields
-        static const enumConstant hasInitializer v
+        static const enumConstant hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@enum::E::@field::v
           firstFragment: #F2
           type: E
@@ -6996,7 +7037,7 @@
             fragment: #F2
             expression: expression_0
           getter: <testLibrary>::@enum::E::@getter::v
-        synthetic static const values
+        synthetic static const isOriginEnumValues values
           reference: <testLibrary>::@enum::E::@field::values
           firstFragment: #F3
           type: List<E>
@@ -7005,35 +7046,35 @@
             expression: expression_1
           getter: <testLibrary>::@enum::E::@getter::values
       constructors
-        synthetic const new
+        synthetic const isOriginImplicitDefault new
           reference: <testLibrary>::@enum::E::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static v
+        synthetic static isOriginVariable v
           reference: <testLibrary>::@enum::E::@getter::v
           firstFragment: #F5
           returnType: E
           variable: <testLibrary>::@enum::E::@field::v
-        synthetic static values
+        synthetic static isOriginVariable values
           reference: <testLibrary>::@enum::E::@getter::values
           firstFragment: #F6
           returnType: List<E>
           variable: <testLibrary>::@enum::E::@field::values
   topLevelVariables
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F7
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
   getters
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F8
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
   setters
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7060,49 +7101,49 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 c (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 isOriginDeclaration c (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 isOriginDeclaration e (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F3 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7110,24 +7151,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/a.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7136,7 +7177,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7145,7 +7186,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7174,49 +7215,49 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 c (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 isOriginDeclaration c (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 isOriginDeclaration e (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F3 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7224,24 +7265,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/b.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7250,7 +7291,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7259,7 +7300,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7289,49 +7330,49 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 c (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 isOriginDeclaration c (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 isOriginDeclaration e (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F3 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7339,24 +7380,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/c.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7365,7 +7406,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7374,7 +7415,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7404,49 +7445,49 @@
       libraryImports
         package:test/a/a.dart
       topLevelVariables
-        #F1 c (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 isOriginDeclaration c (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F2 isOriginDeclaration e (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F3 isOriginDeclaration f (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7454,24 +7495,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/a/c/c.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7480,7 +7521,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7489,7 +7530,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7518,49 +7559,49 @@
       libraryImports
         package:test/a/a.dart
       topLevelVariables
-        #F1 c (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 isOriginDeclaration c (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F2 isOriginDeclaration e (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F3 isOriginDeclaration f (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7568,24 +7609,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/a/b/b.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7594,7 +7635,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7603,7 +7644,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7632,49 +7673,49 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 c (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 isOriginDeclaration c (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 isOriginDeclaration e (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F3 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7682,24 +7723,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/a.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7708,7 +7749,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7717,7 +7758,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7747,52 +7788,52 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 c1 (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F1 isOriginDeclaration c1 (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::c1
-        #F2 c2 (nameOffset:27) (firstTokenOffset:27) (offset:27)
+        #F2 isOriginDeclaration c2 (nameOffset:27) (firstTokenOffset:27) (offset:27)
           element: <testLibrary>::@topLevelVariable::c2
       getters
-        #F3 synthetic c1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F3 synthetic isOriginVariable c1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::c1
-        #F4 synthetic c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F4 synthetic isOriginVariable c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@getter::c2
       setters
-        #F5 synthetic c1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F5 synthetic isOriginVariable c1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@setter::c1
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@setter::c1::@formalParameter::value
-        #F7 synthetic c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F7 synthetic isOriginVariable c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@setter::c2
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@setter::c2::@formalParameter::value
   topLevelVariables
-    c1
+    isOriginDeclaration c1
       reference: <testLibrary>::@topLevelVariable::c1
       firstFragment: #F1
       type: C1
       getter: <testLibrary>::@getter::c1
       setter: <testLibrary>::@setter::c1
-    c2
+    isOriginDeclaration c2
       reference: <testLibrary>::@topLevelVariable::c2
       firstFragment: #F2
       type: C2
       getter: <testLibrary>::@getter::c2
       setter: <testLibrary>::@setter::c2
   getters
-    synthetic static c1
+    synthetic static isOriginVariable c1
       reference: <testLibrary>::@getter::c1
       firstFragment: #F3
       returnType: C1
       variable: <testLibrary>::@topLevelVariable::c1
-    synthetic static c2
+    synthetic static isOriginVariable c2
       reference: <testLibrary>::@getter::c2
       firstFragment: #F4
       returnType: C2
       variable: <testLibrary>::@topLevelVariable::c2
   setters
-    synthetic static c1
+    synthetic static isOriginVariable c1
       reference: <testLibrary>::@setter::c1
       firstFragment: #F5
       formalParameters
@@ -7801,7 +7842,7 @@
           type: C1
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c1
-    synthetic static c2
+    synthetic static isOriginVariable c2
       reference: <testLibrary>::@setter::c2
       firstFragment: #F7
       formalParameters
@@ -7829,49 +7870,49 @@
       libraryImports
         package:test/a/b.dart
       topLevelVariables
-        #F1 c (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 isOriginDeclaration c (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F2 isOriginDeclaration e (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F3 isOriginDeclaration f (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7879,24 +7920,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/a/b.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -7905,7 +7946,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -7914,7 +7955,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -7942,49 +7983,49 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 c (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 isOriginDeclaration c (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::c
-        #F2 e (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F2 isOriginDeclaration e (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::e
-        #F3 f (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F3 isOriginDeclaration f (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F4 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::c
-        #F5 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F5 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::e
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::f
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F9 synthetic e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F9 synthetic isOriginVariable e (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@setter::e
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@setter::e::@formalParameter::value
-        #F11 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F11 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::f
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::f::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    e
+    isOriginDeclaration e
       reference: <testLibrary>::@topLevelVariable::e
       firstFragment: #F2
       type: E
       getter: <testLibrary>::@getter::e
       setter: <testLibrary>::@setter::e
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function()
@@ -7992,24 +8033,24 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F4
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@getter::e
       firstFragment: #F5
       returnType: E
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F6
       returnType: dynamic Function()
         alias: package:test/a.dart::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -8018,7 +8059,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static e
+    synthetic static isOriginVariable e
       reference: <testLibrary>::@setter::e
       firstFragment: #F9
       formalParameters
@@ -8027,7 +8068,7 @@
           type: E
       returnType: void
       variable: <testLibrary>::@topLevelVariable::e
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F11
       formalParameters
@@ -8052,13 +8093,13 @@
         #F1 F (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@typeAlias::F
       topLevelVariables
-        #F2 f (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F2 isOriginDeclaration f (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F3 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F3 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::f
       setters
-        #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::f
           formalParameters
             #F5 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
@@ -8069,7 +8110,7 @@
       firstFragment: #F1
       aliasedType: dynamic Function()
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F2
       type: dynamic Function()
@@ -8077,14 +8118,14 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F3
       returnType: dynamic Function()
         alias: <testLibrary>::@typeAlias::F
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F4
       formalParameters
@@ -8116,13 +8157,13 @@
             #F3 U (nameOffset:15) (firstTokenOffset:15) (offset:15)
               element: #E1 U
       topLevelVariables
-        #F4 f (nameOffset:39) (firstTokenOffset:39) (offset:39)
+        #F4 isOriginDeclaration f (nameOffset:39) (firstTokenOffset:39) (offset:39)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@getter::f
       setters
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@setter::f
           formalParameters
             #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
@@ -8138,7 +8179,7 @@
           firstFragment: #F3
       aliasedType: U Function(T)
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F4
       type: String Function(int)
@@ -8149,7 +8190,7 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F5
       returnType: String Function(int)
@@ -8159,7 +8200,7 @@
             String
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F6
       formalParameters
@@ -8192,13 +8233,13 @@
             #F3 U (nameOffset:15) (firstTokenOffset:15) (offset:15)
               element: #E1 U
       topLevelVariables
-        #F4 f (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F4 isOriginDeclaration f (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::f
       setters
-        #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::f
           formalParameters
             #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
@@ -8214,7 +8255,7 @@
           firstFragment: #F3
       aliasedType: U Function(T)
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F4
       type: dynamic Function(dynamic)
@@ -8225,7 +8266,7 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F5
       returnType: dynamic Function(dynamic)
@@ -8235,7 +8276,7 @@
             dynamic
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F6
       formalParameters
diff --git a/pkg/analyzer/test/src/summary/elements/types_test.dart b/pkg/analyzer/test/src/summary/elements/types_test.dart
index 6a90385..cfde881 100644
--- a/pkg/analyzer/test/src/summary/elements/types_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/types_test.dart
@@ -91,32 +91,32 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 x (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F1 isOriginDeclaration x (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    x
+    isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: FutureOr<int>
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: FutureOr<int>
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -144,7 +144,7 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:27) (firstTokenOffset:27) (offset:27)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:27) (firstTokenOffset:27) (offset:27)
           element: <testLibrary>::@topLevelVariable::x
           initializer: expression_0
             SimpleIdentifier
@@ -152,10 +152,10 @@
               element: dart:async::@class::FutureOr
               staticType: Type
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@getter::x
   topLevelVariables
-    const hasInitializer x
+    const hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: Type
@@ -164,7 +164,7 @@
         expression: expression_0
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: Type
@@ -193,22 +193,22 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:52) (firstTokenOffset:52) (offset:52)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:52) (firstTokenOffset:52) (offset:52)
           element: <testLibrary>::@topLevelVariable::x
-        #F2 hasInitializer y (nameOffset:65) (firstTokenOffset:65) (offset:65)
+        #F2 hasInitializer isOriginDeclaration y (nameOffset:65) (firstTokenOffset:65) (offset:65)
           element: <testLibrary>::@topLevelVariable::y
       getters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@getter::x
-        #F4 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+        #F4 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
           element: <testLibrary>::@getter::y
       setters
-        #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
+        #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
           element: <testLibrary>::@setter::x
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:52)
               element: <testLibrary>::@setter::x::@formalParameter::value
-        #F7 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
+        #F7 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
           element: <testLibrary>::@setter::y
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:65)
@@ -217,31 +217,31 @@
         #F9 f (nameOffset:35) (firstTokenOffset:21) (offset:35)
           element: <testLibrary>::@function::f
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: FutureOr<int>
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
-    hasInitializer y
+    hasImplicitType hasInitializer isOriginDeclaration y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F2
       type: InvalidType
       getter: <testLibrary>::@getter::y
       setter: <testLibrary>::@setter::y
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F3
       returnType: FutureOr<int>
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@getter::y
       firstFragment: #F4
       returnType: InvalidType
       variable: <testLibrary>::@topLevelVariable::y
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F5
       formalParameters
@@ -250,7 +250,7 @@
           type: FutureOr<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@setter::y
       firstFragment: #F7
       formalParameters
@@ -299,7 +299,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -325,7 +325,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       methods
@@ -370,7 +370,7 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -379,14 +379,14 @@
         #F4 class D (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::D
           constructors
-            #F5 const new (nameOffset:<null>) (firstTokenOffset:42) (offset:48)
+            #F5 const isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:42) (offset:48)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
               typeNameOffset: 48
               formalParameters
                 #F6 requiredPositional c (nameOffset:52) (firstTokenOffset:50) (offset:52)
                   element: <testLibrary>::@class::D::@constructor::new::@formalParameter::c
-            #F7 const named (nameOffset:83) (firstTokenOffset:75) (offset:83)
+            #F7 const isOriginDeclaration named (nameOffset:83) (firstTokenOffset:75) (offset:83)
               element: <testLibrary>::@class::D::@constructor::named
               typeName: D
               typeNameOffset: 81
@@ -399,7 +399,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -411,7 +411,7 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F4
       constructors
-        const new
+        const isOriginDeclaration new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F5
           formalParameters
@@ -439,7 +439,7 @@
                 rightParenthesis: ) @69
               element: <testLibrary>::@class::D::@constructor::named
           redirectedConstructor: <testLibrary>::@class::D::@constructor::named
-        const named
+        const isOriginDeclaration named
           reference: <testLibrary>::@class::D::@constructor::named
           firstFragment: #F7
           formalParameters
@@ -458,32 +458,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int Function()
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int Function()
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -504,32 +504,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Future<dynamic> Function(dynamic)
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Future<dynamic> Function(dynamic)
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -556,32 +556,32 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Future<int> Function(Future<Future<Future<int>>>)
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Future<int> Function(Future<Future<Future<int>>>)
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -607,32 +607,32 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Future<int> Function(Future<int>)
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Future<int> Function(Future<int>)
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -658,32 +658,32 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: Future<dynamic> Function(Future<dynamic>)
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: Future<dynamic> Function(Future<dynamic>)
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -711,17 +711,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer v (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration v (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -731,24 +731,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer v
+        hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: int Function()
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: int Function()
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -820,7 +820,7 @@
         #F1 class X1 (nameOffset:30) (firstTokenOffset:24) (offset:30)
           element: <testLibrary>::@class::X1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::X1::@constructor::new
               typeName: X1
           methods
@@ -832,7 +832,7 @@
         #F5 class X2 (nameOffset:102) (firstTokenOffset:96) (offset:102)
           element: <testLibrary>::@class::X2
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:102)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:102)
               element: <testLibrary>::@class::X2::@constructor::new
               typeName: X2
           methods
@@ -844,7 +844,7 @@
         #F9 class X3 (nameOffset:173) (firstTokenOffset:167) (offset:173)
           element: <testLibrary>::@class::X3
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:173)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:173)
               element: <testLibrary>::@class::X3::@constructor::new
               typeName: X3
           methods
@@ -859,7 +859,7 @@
       firstFragment: #F1
       supertype: NullSafeDefault
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X1::@constructor::new
           firstFragment: #F2
           superConstructor: package:test/nullSafe.dart::@class::NullSafeDefault::@constructor::new
@@ -877,7 +877,7 @@
       firstFragment: #F5
       supertype: NullSafeObject
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X2::@constructor::new
           firstFragment: #F6
           superConstructor: package:test/nullSafe.dart::@class::NullSafeObject::@constructor::new
@@ -895,7 +895,7 @@
       firstFragment: #F9
       supertype: NullSafeInt
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X3::@constructor::new
           firstFragment: #F10
           superConstructor: package:test/nullSafe.dart::@class::NullSafeInt::@constructor::new
@@ -931,17 +931,17 @@
             #F3 T (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: #E1 T
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F5 c (nameOffset:47) (firstTokenOffset:47) (offset:47)
+        #F5 isOriginDeclaration c (nameOffset:47) (firstTokenOffset:47) (offset:47)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@getter::c
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
@@ -958,24 +958,24 @@
           firstFragment: #F3
           bound: C<S, T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F5
       type: C<num, C<num, dynamic>>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: C<num, C<num, dynamic>>
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -1009,44 +1009,44 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
         #F4 class B (nameOffset:56) (firstTokenOffset:50) (offset:56)
           element: <testLibrary>::@class::B
           fields
-            #F5 hasInitializer c3 (nameOffset:66) (firstTokenOffset:66) (offset:66)
+            #F5 hasInitializer isOriginDeclaration c3 (nameOffset:66) (firstTokenOffset:66) (offset:66)
               element: <testLibrary>::@class::B::@field::c3
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F7 synthetic c3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F7 synthetic isOriginVariable c3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::B::@getter::c3
           setters
-            #F8 synthetic c3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F8 synthetic isOriginVariable c3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::B::@setter::c3
               formalParameters
                 #F9 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
                   element: <testLibrary>::@class::B::@setter::c3::@formalParameter::value
       topLevelVariables
-        #F10 c (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F10 isOriginDeclaration c (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::c
-        #F11 hasInitializer c2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F11 hasInitializer isOriginDeclaration c2 (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::c2
       getters
-        #F12 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F12 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::c
-        #F13 synthetic c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F13 synthetic isOriginVariable c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::c2
       setters
-        #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::c
           formalParameters
             #F15 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F16 synthetic c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F16 synthetic isOriginVariable c2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@setter::c2
           formalParameters
             #F17 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
@@ -1060,31 +1060,31 @@
           firstFragment: #F2
           bound: C<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
     hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       fields
-        hasInitializer c3
+        hasImplicitType hasInitializer isOriginDeclaration c3
           reference: <testLibrary>::@class::B::@field::c3
           firstFragment: #F5
           type: C<C<Object?>>
           getter: <testLibrary>::@class::B::@getter::c3
           setter: <testLibrary>::@class::B::@setter::c3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       getters
-        synthetic c3
+        synthetic isOriginVariable c3
           reference: <testLibrary>::@class::B::@getter::c3
           firstFragment: #F7
           returnType: C<C<Object?>>
           variable: <testLibrary>::@class::B::@field::c3
       setters
-        synthetic c3
+        synthetic isOriginVariable c3
           reference: <testLibrary>::@class::B::@setter::c3
           firstFragment: #F8
           formalParameters
@@ -1094,31 +1094,31 @@
           returnType: void
           variable: <testLibrary>::@class::B::@field::c3
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F10
       type: C<C<dynamic>>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    hasInitializer c2
+    hasImplicitType hasInitializer isOriginDeclaration c2
       reference: <testLibrary>::@topLevelVariable::c2
       firstFragment: #F11
       type: C<C<Object?>>
       getter: <testLibrary>::@getter::c2
       setter: <testLibrary>::@setter::c2
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F12
       returnType: C<C<dynamic>>
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static c2
+    synthetic static isOriginVariable c2
       reference: <testLibrary>::@getter::c2
       firstFragment: #F13
       returnType: C<C<Object?>>
       variable: <testLibrary>::@topLevelVariable::c2
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F14
       formalParameters
@@ -1127,7 +1127,7 @@
           type: C<C<dynamic>>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static c2
+    synthetic static isOriginVariable c2
       reference: <testLibrary>::@setter::c2
       firstFragment: #F16
       formalParameters
@@ -1159,17 +1159,17 @@
             #F3 U (nameOffset:27) (firstTokenOffset:27) (offset:27)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F5 c (nameOffset:47) (firstTokenOffset:47) (offset:47)
+        #F5 isOriginDeclaration c (nameOffset:47) (firstTokenOffset:47) (offset:47)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@getter::c
       setters
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@setter::c
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
@@ -1186,24 +1186,24 @@
           firstFragment: #F3
           bound: num
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F5
       type: C<C<dynamic, num>, num>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F6
       returnType: C<C<dynamic, num>, num>
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F7
       formalParameters
@@ -1241,7 +1241,7 @@
         #F1 class C (nameOffset:23) (firstTokenOffset:17) (offset:23)
           element: <testLibrary>::@class::C
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -1252,7 +1252,7 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F2
       methods
@@ -1284,13 +1284,13 @@
             #F2 T (nameOffset:10) (firstTokenOffset:10) (offset:10)
               element: #E0 T
       topLevelVariables
-        #F3 f (nameOffset:33) (firstTokenOffset:33) (offset:33)
+        #F3 isOriginDeclaration f (nameOffset:33) (firstTokenOffset:33) (offset:33)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@getter::f
       setters
-        #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@setter::f
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
@@ -1305,7 +1305,7 @@
           bound: num
       aliasedType: dynamic Function(T)
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: dynamic Function(num)
@@ -1315,7 +1315,7 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F4
       returnType: dynamic Function(num)
@@ -1324,7 +1324,7 @@
             num
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F5
       formalParameters
@@ -1358,7 +1358,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
         #F4 class B (nameOffset:20) (firstTokenOffset:14) (offset:20)
@@ -1369,17 +1369,17 @@
             #F6 U (nameOffset:48) (firstTokenOffset:48) (offset:48)
               element: #E2 U
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
       topLevelVariables
-        #F8 b (nameOffset:69) (firstTokenOffset:69) (offset:69)
+        #F8 isOriginDeclaration b (nameOffset:69) (firstTokenOffset:69) (offset:69)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F9 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+        #F9 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
           element: <testLibrary>::@getter::b
       setters
-        #F10 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+        #F10 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
           element: <testLibrary>::@setter::b
           formalParameters
             #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
@@ -1392,7 +1392,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
     notSimplyBounded class B
@@ -1406,24 +1406,24 @@
           firstFragment: #F6
           bound: A<T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
   topLevelVariables
-    b
+    isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F8
       type: B<int Function(), A<int Function()>>
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F9
       returnType: B<int Function(), A<int Function()>>
       variable: <testLibrary>::@topLevelVariable::b
   setters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F10
       formalParameters
@@ -1453,13 +1453,13 @@
             #F2 T (nameOffset:10) (firstTokenOffset:10) (offset:10)
               element: #E0 T
       topLevelVariables
-        #F3 f (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F3 isOriginDeclaration f (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::f
       getters
-        #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::f
       setters
-        #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::f
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
@@ -1474,7 +1474,7 @@
           bound: num
       aliasedType: S Function<S>(T)
   topLevelVariables
-    f
+    isOriginDeclaration f
       reference: <testLibrary>::@topLevelVariable::f
       firstFragment: #F3
       type: S Function<S>(num)
@@ -1484,7 +1484,7 @@
       getter: <testLibrary>::@getter::f
       setter: <testLibrary>::@setter::f
   getters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@getter::f
       firstFragment: #F4
       returnType: S Function<S>(num)
@@ -1493,7 +1493,7 @@
             num
       variable: <testLibrary>::@topLevelVariable::f
   setters
-    synthetic static f
+    synthetic static isOriginVariable f
       reference: <testLibrary>::@setter::f
       firstFragment: #F5
       formalParameters
@@ -1528,14 +1528,14 @@
             #F2 R (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 R
           fields
-            #F3 hasInitializer values (nameOffset:31) (firstTokenOffset:31) (offset:31)
+            #F3 hasInitializer isOriginDeclaration values (nameOffset:31) (firstTokenOffset:31) (offset:31)
               element: <testLibrary>::@class::A::@field::values
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F5 synthetic isOriginVariable values (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::A::@getter::values
         #F6 class B (nameOffset:55) (firstTokenOffset:49) (offset:55)
           element: <testLibrary>::@class::B
@@ -1543,7 +1543,7 @@
             #F7 T (nameOffset:57) (firstTokenOffset:57) (offset:57)
               element: #E1 T
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
   classes
@@ -1555,17 +1555,17 @@
           firstFragment: #F2
           bound: B<num>
       fields
-        final hasInitializer values
+        final hasImplicitType hasInitializer isOriginDeclaration values
           reference: <testLibrary>::@class::A::@field::values
           firstFragment: #F3
           type: List<B<num>>
           getter: <testLibrary>::@class::A::@getter::values
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic values
+        synthetic isOriginVariable values
           reference: <testLibrary>::@class::A::@getter::values
           firstFragment: #F5
           returnType: List<B<num>>
@@ -1578,7 +1578,7 @@
           firstFragment: #F7
           bound: num
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
 ''');
@@ -1602,17 +1602,17 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F4 c (nameOffset:28) (firstTokenOffset:28) (offset:28)
+        #F4 isOriginDeclaration c (nameOffset:28) (firstTokenOffset:28) (offset:28)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F5 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F5 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@getter::c
       setters
-        #F6 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+        #F6 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
           element: <testLibrary>::@setter::c
           formalParameters
             #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
@@ -1626,24 +1626,24 @@
           firstFragment: #F2
           bound: num
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F4
       type: C<num>
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F5
       returnType: C<num>
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F6
       formalParameters
@@ -1677,17 +1677,17 @@
         #F1 class C (nameOffset:34) (firstTokenOffset:28) (offset:34)
           element: <testLibrary>::@class::C
           fields
-            #F2 v (nameOffset:50) (firstTokenOffset:50) (offset:50)
+            #F2 isOriginDeclaration v (nameOffset:50) (firstTokenOffset:50) (offset:50)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F4 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F5 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F5 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
@@ -1697,24 +1697,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        v
+        isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F2
           type: List<dynamic>
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F4
           returnType: List<dynamic>
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F5
           formalParameters
@@ -1831,13 +1831,13 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 V (nameOffset:27) (firstTokenOffset:27) (offset:27)
+        #F1 isOriginDeclaration V (nameOffset:27) (firstTokenOffset:27) (offset:27)
           element: <testLibrary>::@topLevelVariable::V
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@getter::V
       setters
-        #F3 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+        #F3 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
           element: <testLibrary>::@setter::V
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
@@ -1856,20 +1856,20 @@
         #F7 V (nameOffset:16) (firstTokenOffset:16) (offset:16)
           element: <testLibrary>::@function::V
   topLevelVariables
-    V
+    hasImplicitType isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::V
       setter: <testLibrary>::@setter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::V
   setters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@setter::V
       firstFragment: #F3
       formalParameters
@@ -1916,32 +1916,32 @@
       libraryImports
         package:test/c.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: C
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -1973,32 +1973,32 @@
       libraryImports
         package:test/d.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: C
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -2034,32 +2034,32 @@
       libraryImports
         package:test/c.dart
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: C
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: C
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -2095,7 +2095,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -2116,7 +2116,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       methods
@@ -2162,7 +2162,7 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -2183,7 +2183,7 @@
         #E1 U
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F4
       methods
@@ -2313,22 +2313,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
       functions
         #F3 f (nameOffset:52) (firstTokenOffset:47) (offset:52)
           element: <testLibrary>::@function::f
   topLevelVariables
-    final hasInitializer v
+    final hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int Function<T>(T)
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int Function<T>(T)
@@ -2403,17 +2403,17 @@
             #F3 U (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 U
           fields
-            #F4 hasInitializer v (nameOffset:22) (firstTokenOffset:22) (offset:22)
+            #F4 hasInitializer isOriginDeclaration v (nameOffset:22) (firstTokenOffset:22) (offset:22)
               element: <testLibrary>::@class::C::@field::v
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F6 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F6 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@getter::v
           setters
-            #F7 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+            #F7 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@class::C::@setter::v
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
@@ -2431,7 +2431,7 @@
         #E1 U
           firstFragment: #F3
       fields
-        hasInitializer v
+        hasImplicitType hasInitializer isOriginDeclaration v
           reference: <testLibrary>::@class::C::@field::v
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
@@ -2439,18 +2439,18 @@
           getter: <testLibrary>::@class::C::@getter::v
           setter: <testLibrary>::@class::C::@setter::v
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F5
       getters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@getter::v
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
           returnType: int Function(T, U)
           variable: <testLibrary>::@class::C::@field::v
       setters
-        synthetic v
+        synthetic isOriginVariable v
           reference: <testLibrary>::@class::C::@setter::v
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
@@ -2520,22 +2520,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
       functions
         #F3 f (nameOffset:40) (firstTokenOffset:35) (offset:40)
           element: <testLibrary>::@function::f
   topLevelVariables
-    final hasInitializer v
+    final hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int Function()
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int Function()
@@ -2560,22 +2560,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::v
       functions
         #F3 f (nameOffset:70) (firstTokenOffset:65) (offset:70)
           element: <testLibrary>::@function::f
   topLevelVariables
-    final hasInitializer v
+    final hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int Function(int, String)
       getter: <testLibrary>::@getter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int Function(int, String)
@@ -2597,32 +2597,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 m (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F1 isOriginDeclaration m (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::m
       getters
-        #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F2 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::m
       setters
-        #F3 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F3 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@setter::m
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@setter::m::@formalParameter::value
   topLevelVariables
-    m
+    isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: Map<dynamic, dynamic>
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F2
       returnType: Map<dynamic, dynamic>
       variable: <testLibrary>::@topLevelVariable::m
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F3
       formalParameters
@@ -2643,32 +2643,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 m (nameOffset:18) (firstTokenOffset:18) (offset:18)
+        #F1 isOriginDeclaration m (nameOffset:18) (firstTokenOffset:18) (offset:18)
           element: <testLibrary>::@topLevelVariable::m
       getters
-        #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F2 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@getter::m
       setters
-        #F3 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F3 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@setter::m
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@setter::m::@formalParameter::value
   topLevelVariables
-    m
+    isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: Map<dynamic, int>
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F2
       returnType: Map<dynamic, int>
       variable: <testLibrary>::@topLevelVariable::m
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F3
       formalParameters
@@ -2689,32 +2689,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 m (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 isOriginDeclaration m (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::m
       getters
-        #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::m
       setters
-        #F3 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::m
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::m::@formalParameter::value
   topLevelVariables
-    m
+    isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: Map<String, dynamic>
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F2
       returnType: Map<String, dynamic>
       variable: <testLibrary>::@topLevelVariable::m
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F3
       formalParameters
@@ -2735,32 +2735,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 m (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F1 isOriginDeclaration m (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::m
       getters
-        #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F2 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::m
       setters
-        #F3 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F3 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@setter::m
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@setter::m::@formalParameter::value
   topLevelVariables
-    m
+    isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: Map<String, int>
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F2
       returnType: Map<String, int>
       variable: <testLibrary>::@topLevelVariable::m
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F3
       formalParameters
@@ -2781,32 +2781,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 m (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 isOriginDeclaration m (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::m
       getters
-        #F2 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::m
       setters
-        #F3 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::m
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::m::@formalParameter::value
   topLevelVariables
-    m
+    isOriginDeclaration m
       reference: <testLibrary>::@topLevelVariable::m
       firstFragment: #F1
       type: Map<dynamic, dynamic>
       getter: <testLibrary>::@getter::m
       setter: <testLibrary>::@setter::m
   getters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@getter::m
       firstFragment: #F2
       returnType: Map<dynamic, dynamic>
       variable: <testLibrary>::@topLevelVariable::m
   setters
-    synthetic static m
+    synthetic static isOriginVariable m
       reference: <testLibrary>::@setter::m
       firstFragment: #F3
       formalParameters
@@ -2827,32 +2827,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 d (nameOffset:8) (firstTokenOffset:8) (offset:8)
+        #F1 isOriginDeclaration d (nameOffset:8) (firstTokenOffset:8) (offset:8)
           element: <testLibrary>::@topLevelVariable::d
       getters
-        #F2 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F2 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@getter::d
       setters
-        #F3 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F3 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@setter::d
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@setter::d::@formalParameter::value
   topLevelVariables
-    d
+    isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::d
       setter: <testLibrary>::@setter::d
   getters
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::d
   setters
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@setter::d
       firstFragment: #F3
       formalParameters
@@ -2873,32 +2873,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 c (nameOffset:2) (firstTokenOffset:2) (offset:2)
+        #F1 isOriginDeclaration c (nameOffset:2) (firstTokenOffset:2) (offset:2)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F2 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:2)
+        #F2 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:2)
           element: <testLibrary>::@getter::c
       setters
-        #F3 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:2)
+        #F3 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:2)
           element: <testLibrary>::@setter::c
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:2)
               element: <testLibrary>::@setter::c::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: InvalidType
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F2
       returnType: InvalidType
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F3
       formalParameters
@@ -2924,32 +2924,32 @@
         <testLibraryFragment>::@prefix2::core
           fragments: @22
       topLevelVariables
-        #F1 c (nameOffset:35) (firstTokenOffset:35) (offset:35)
+        #F1 isOriginDeclaration c (nameOffset:35) (firstTokenOffset:35) (offset:35)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F2 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F2 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@getter::c
       setters
-        #F3 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
+        #F3 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
           element: <testLibrary>::@setter::c
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
               element: <testLibrary>::@setter::c::@formalParameter::value
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F1
       type: InvalidType
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F2
       returnType: InvalidType
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F3
       formalParameters
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index c060c73..b1b07a7 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.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/ast/doc_comment.dart';
 import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
@@ -236,17 +235,6 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      expect(() => node.name, throwsUnsupportedError);
-      expect(() => node.typeParameters, throwsUnsupportedError);
-      expect(() => node.leftBracket, throwsUnsupportedError);
-      expect(() => node.members, throwsUnsupportedError);
-      expect(() => node.rightBracket, throwsUnsupportedError);
-    } else {
-      expect(() => node.namePart, throwsUnsupportedError);
-      expect(() => node.body, throwsUnsupportedError);
-    }
-
     _sink.writeln('ClassDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
@@ -364,6 +352,13 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
+    if (node.typeName != null) {
+      assert(
+        // ignore: deprecated_member_use_from_same_package
+        identical(node.returnType, node.typeName),
+      );
+    }
+
     _sink.writeln('ConstructorDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
@@ -514,6 +509,14 @@
   }
 
   @override
+  void visitEmptyClassBody(EmptyClassBody node) {
+    _sink.writeln('EmptyClassBody');
+    _sink.withIndent(() {
+      _writeNamedChildEntities(node);
+    });
+  }
+
+  @override
   void visitEmptyFunctionBody(EmptyFunctionBody node) {
     _sink.writeln('EmptyFunctionBody');
     _sink.withIndent(() {
@@ -553,19 +556,6 @@
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      expect(() => node.name, throwsUnsupportedError);
-      expect(() => node.typeParameters, throwsUnsupportedError);
-      expect(() => node.leftBracket, throwsUnsupportedError);
-      expect(() => node.constants, throwsUnsupportedError);
-      expect(() => node.semicolon, throwsUnsupportedError);
-      expect(() => node.members, throwsUnsupportedError);
-      expect(() => node.rightBracket, throwsUnsupportedError);
-    } else {
-      expect(() => node.namePart, throwsUnsupportedError);
-      expect(() => node.body, throwsUnsupportedError);
-    }
-
     _sink.writeln('EnumDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
@@ -610,14 +600,6 @@
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      expect(() => node.leftBracket, throwsUnsupportedError);
-      expect(() => node.members, throwsUnsupportedError);
-      expect(() => node.rightBracket, throwsUnsupportedError);
-    } else {
-      expect(() => node.body, throwsUnsupportedError);
-    }
-
     _sink.writeln('ExtensionDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
@@ -647,19 +629,6 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      expect(() => node.name, throwsUnsupportedError);
-      expect(() => node.representation, throwsUnsupportedError);
-      expect(() => node.constKeyword, throwsUnsupportedError);
-      expect(() => node.typeParameters, throwsUnsupportedError);
-      expect(() => node.leftBracket, throwsUnsupportedError);
-      expect(() => node.members, throwsUnsupportedError);
-      expect(() => node.rightBracket, throwsUnsupportedError);
-    } else {
-      expect(() => node.namePart, throwsUnsupportedError);
-      expect(() => node.body, throwsUnsupportedError);
-    }
-
     _sink.writeln('ExtensionTypeDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
@@ -835,7 +804,7 @@
       _writeNamedChildEntities(node);
       if (_withResolution) {
         _writeGenericFunctionTypeElement(
-          'declaredElement',
+          'declaredFragment',
           node.declaredFragment,
         );
       }
@@ -1103,14 +1072,6 @@
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    if (useDeclaringConstructorsAst) {
-      expect(() => node.leftBracket, throwsUnsupportedError);
-      expect(() => node.members, throwsUnsupportedError);
-      expect(() => node.rightBracket, throwsUnsupportedError);
-    } else {
-      expect(() => node.body, throwsUnsupportedError);
-    }
-
     _sink.writeln('MixinDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
@@ -1340,10 +1301,19 @@
   }
 
   @override
+  void visitPrimaryConstructorBody(PrimaryConstructorBody node) {
+    _sink.writeln('PrimaryConstructorBody');
+    _sink.withIndent(() {
+      _writeNamedChildEntities(node);
+    });
+  }
+
+  @override
   void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
     _sink.writeln('PrimaryConstructorDeclaration');
     _sink.withIndent(() {
       _writeNamedChildEntities(node);
+      _writeDeclaredFragment(node.declaredFragment);
     });
   }
 
@@ -1444,24 +1414,6 @@
   }
 
   @override
-  void visitRepresentationConstructorName(RepresentationConstructorName node) {
-    _sink.writeln('RepresentationConstructorName');
-    _sink.withIndent(() {
-      _writeNamedChildEntities(node);
-    });
-  }
-
-  @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    _sink.writeln('RepresentationDeclaration');
-    _sink.withIndent(() {
-      _writeNamedChildEntities(node);
-      _writeFragment('fieldFragment', node.fieldFragment);
-      _writeFragment('constructorFragment', node.constructorFragment);
-    });
-  }
-
-  @override
   void visitRestPatternElement(RestPatternElement node) {
     _sink.writeln('RestPatternElement');
     _sink.withIndent(() {
@@ -1832,12 +1784,12 @@
       if (fragment is LocalVariableFragmentImpl) {
         _writeDeclaredLocalVariableFragment(fragment);
       } else if (fragment is TypeParameterFragmentImpl) {
-        _writeFragment('declaredElement', fragment);
+        _writeFragment('declaredFragment', fragment);
         _sink.withIndent(() {
           _writeType('defaultType', fragment.element.defaultType);
         });
       } else {
-        _writeFragment('declaredElement', fragment);
+        _writeFragment('declaredFragment', fragment);
         if (fragment is ExecutableFragmentImpl) {
           _sink.withIndent(() {
             var element = fragment.element;
@@ -1855,6 +1807,9 @@
             });
             _sink.withIndent(() {
               _writeType('type', element.type);
+              if (element is FieldFormalParameterElementImpl) {
+                _elementPrinter.writeNamedElement2('field', element.field);
+              }
             });
           });
         }
@@ -2226,6 +2181,9 @@
     } else if (parametersParent is MethodDeclaration) {
       var declaredFragment = parametersParent.declaredFragment!;
       return declaredFragment.formalParameters;
+    } else if (parametersParent is PrimaryConstructorDeclaration) {
+      var declaredFragment = parametersParent.declaredFragment!;
+      return declaredFragment.formalParameters;
     }
     throw UnimplementedError(
       '(${parametersParent.runtimeType}) $parametersParent',
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 fe8bc7b..b1b29a4 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../dart/resolution/node_text_expectations.dart';
@@ -98,10 +98,7 @@
 var a = b;
 var b = a;
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 4, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 15, 1),
-      ],
+      [error(diag.topLevelCycle, 4, 1), error(diag.topLevelCycle, 15, 1)],
     );
   }
 
@@ -314,13 +311,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           109,
           3,
           contextMessages: [message(testFile, 64, 3)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           109,
           3,
           contextMessages: [message(testFile, 25, 3)],
@@ -342,7 +339,7 @@
   void mmm(a) {}
 }
 ''',
-      [error(CompileTimeErrorCode.noCombinedSuperSignature, 116, 3)],
+      [error(diag.noCombinedSuperSignature, 116, 3)],
     );
   }
 
@@ -379,172 +376,172 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vPlusIntInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vPlusIntInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vPlusIntInt
-        #F2 hasInitializer vPlusIntDouble (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F2 hasInitializer isOriginDeclaration vPlusIntDouble (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::vPlusIntDouble
-        #F3 hasInitializer vPlusDoubleInt (nameOffset:59) (firstTokenOffset:59) (offset:59)
+        #F3 hasInitializer isOriginDeclaration vPlusDoubleInt (nameOffset:59) (firstTokenOffset:59) (offset:59)
           element: <testLibrary>::@topLevelVariable::vPlusDoubleInt
-        #F4 hasInitializer vPlusDoubleDouble (nameOffset:89) (firstTokenOffset:89) (offset:89)
+        #F4 hasInitializer isOriginDeclaration vPlusDoubleDouble (nameOffset:89) (firstTokenOffset:89) (offset:89)
           element: <testLibrary>::@topLevelVariable::vPlusDoubleDouble
-        #F5 hasInitializer vMinusIntInt (nameOffset:124) (firstTokenOffset:124) (offset:124)
+        #F5 hasInitializer isOriginDeclaration vMinusIntInt (nameOffset:124) (firstTokenOffset:124) (offset:124)
           element: <testLibrary>::@topLevelVariable::vMinusIntInt
-        #F6 hasInitializer vMinusIntDouble (nameOffset:150) (firstTokenOffset:150) (offset:150)
+        #F6 hasInitializer isOriginDeclaration vMinusIntDouble (nameOffset:150) (firstTokenOffset:150) (offset:150)
           element: <testLibrary>::@topLevelVariable::vMinusIntDouble
-        #F7 hasInitializer vMinusDoubleInt (nameOffset:181) (firstTokenOffset:181) (offset:181)
+        #F7 hasInitializer isOriginDeclaration vMinusDoubleInt (nameOffset:181) (firstTokenOffset:181) (offset:181)
           element: <testLibrary>::@topLevelVariable::vMinusDoubleInt
-        #F8 hasInitializer vMinusDoubleDouble (nameOffset:212) (firstTokenOffset:212) (offset:212)
+        #F8 hasInitializer isOriginDeclaration vMinusDoubleDouble (nameOffset:212) (firstTokenOffset:212) (offset:212)
           element: <testLibrary>::@topLevelVariable::vMinusDoubleDouble
       getters
-        #F9 synthetic vPlusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F9 synthetic isOriginVariable vPlusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vPlusIntInt
-        #F10 synthetic vPlusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F10 synthetic isOriginVariable vPlusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::vPlusIntDouble
-        #F11 synthetic vPlusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F11 synthetic isOriginVariable vPlusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@getter::vPlusDoubleInt
-        #F12 synthetic vPlusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+        #F12 synthetic isOriginVariable vPlusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
           element: <testLibrary>::@getter::vPlusDoubleDouble
-        #F13 synthetic vMinusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
+        #F13 synthetic isOriginVariable vMinusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
           element: <testLibrary>::@getter::vMinusIntInt
-        #F14 synthetic vMinusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:150)
+        #F14 synthetic isOriginVariable vMinusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:150)
           element: <testLibrary>::@getter::vMinusIntDouble
-        #F15 synthetic vMinusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:181)
+        #F15 synthetic isOriginVariable vMinusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:181)
           element: <testLibrary>::@getter::vMinusDoubleInt
-        #F16 synthetic vMinusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:212)
+        #F16 synthetic isOriginVariable vMinusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:212)
           element: <testLibrary>::@getter::vMinusDoubleDouble
       setters
-        #F17 synthetic vPlusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F17 synthetic isOriginVariable vPlusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vPlusIntInt
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vPlusIntInt::@formalParameter::value
-        #F19 synthetic vPlusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F19 synthetic isOriginVariable vPlusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::vPlusIntDouble
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::vPlusIntDouble::@formalParameter::value
-        #F21 synthetic vPlusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F21 synthetic isOriginVariable vPlusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@setter::vPlusDoubleInt
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@setter::vPlusDoubleInt::@formalParameter::value
-        #F23 synthetic vPlusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+        #F23 synthetic isOriginVariable vPlusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
           element: <testLibrary>::@setter::vPlusDoubleDouble
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@setter::vPlusDoubleDouble::@formalParameter::value
-        #F25 synthetic vMinusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
+        #F25 synthetic isOriginVariable vMinusIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
           element: <testLibrary>::@setter::vMinusIntInt
           formalParameters
             #F26 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:124)
               element: <testLibrary>::@setter::vMinusIntInt::@formalParameter::value
-        #F27 synthetic vMinusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:150)
+        #F27 synthetic isOriginVariable vMinusIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:150)
           element: <testLibrary>::@setter::vMinusIntDouble
           formalParameters
             #F28 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:150)
               element: <testLibrary>::@setter::vMinusIntDouble::@formalParameter::value
-        #F29 synthetic vMinusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:181)
+        #F29 synthetic isOriginVariable vMinusDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:181)
           element: <testLibrary>::@setter::vMinusDoubleInt
           formalParameters
             #F30 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:181)
               element: <testLibrary>::@setter::vMinusDoubleInt::@formalParameter::value
-        #F31 synthetic vMinusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:212)
+        #F31 synthetic isOriginVariable vMinusDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:212)
           element: <testLibrary>::@setter::vMinusDoubleDouble
           formalParameters
             #F32 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:212)
               element: <testLibrary>::@setter::vMinusDoubleDouble::@formalParameter::value
   topLevelVariables
-    hasInitializer vPlusIntInt
+    hasImplicitType hasInitializer isOriginDeclaration vPlusIntInt
       reference: <testLibrary>::@topLevelVariable::vPlusIntInt
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vPlusIntInt
       setter: <testLibrary>::@setter::vPlusIntInt
-    hasInitializer vPlusIntDouble
+    hasImplicitType hasInitializer isOriginDeclaration vPlusIntDouble
       reference: <testLibrary>::@topLevelVariable::vPlusIntDouble
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::vPlusIntDouble
       setter: <testLibrary>::@setter::vPlusIntDouble
-    hasInitializer vPlusDoubleInt
+    hasImplicitType hasInitializer isOriginDeclaration vPlusDoubleInt
       reference: <testLibrary>::@topLevelVariable::vPlusDoubleInt
       firstFragment: #F3
       type: double
       getter: <testLibrary>::@getter::vPlusDoubleInt
       setter: <testLibrary>::@setter::vPlusDoubleInt
-    hasInitializer vPlusDoubleDouble
+    hasImplicitType hasInitializer isOriginDeclaration vPlusDoubleDouble
       reference: <testLibrary>::@topLevelVariable::vPlusDoubleDouble
       firstFragment: #F4
       type: double
       getter: <testLibrary>::@getter::vPlusDoubleDouble
       setter: <testLibrary>::@setter::vPlusDoubleDouble
-    hasInitializer vMinusIntInt
+    hasImplicitType hasInitializer isOriginDeclaration vMinusIntInt
       reference: <testLibrary>::@topLevelVariable::vMinusIntInt
       firstFragment: #F5
       type: int
       getter: <testLibrary>::@getter::vMinusIntInt
       setter: <testLibrary>::@setter::vMinusIntInt
-    hasInitializer vMinusIntDouble
+    hasImplicitType hasInitializer isOriginDeclaration vMinusIntDouble
       reference: <testLibrary>::@topLevelVariable::vMinusIntDouble
       firstFragment: #F6
       type: double
       getter: <testLibrary>::@getter::vMinusIntDouble
       setter: <testLibrary>::@setter::vMinusIntDouble
-    hasInitializer vMinusDoubleInt
+    hasImplicitType hasInitializer isOriginDeclaration vMinusDoubleInt
       reference: <testLibrary>::@topLevelVariable::vMinusDoubleInt
       firstFragment: #F7
       type: double
       getter: <testLibrary>::@getter::vMinusDoubleInt
       setter: <testLibrary>::@setter::vMinusDoubleInt
-    hasInitializer vMinusDoubleDouble
+    hasImplicitType hasInitializer isOriginDeclaration vMinusDoubleDouble
       reference: <testLibrary>::@topLevelVariable::vMinusDoubleDouble
       firstFragment: #F8
       type: double
       getter: <testLibrary>::@getter::vMinusDoubleDouble
       setter: <testLibrary>::@setter::vMinusDoubleDouble
   getters
-    synthetic static vPlusIntInt
+    synthetic static isOriginVariable vPlusIntInt
       reference: <testLibrary>::@getter::vPlusIntInt
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vPlusIntInt
-    synthetic static vPlusIntDouble
+    synthetic static isOriginVariable vPlusIntDouble
       reference: <testLibrary>::@getter::vPlusIntDouble
       firstFragment: #F10
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vPlusIntDouble
-    synthetic static vPlusDoubleInt
+    synthetic static isOriginVariable vPlusDoubleInt
       reference: <testLibrary>::@getter::vPlusDoubleInt
       firstFragment: #F11
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vPlusDoubleInt
-    synthetic static vPlusDoubleDouble
+    synthetic static isOriginVariable vPlusDoubleDouble
       reference: <testLibrary>::@getter::vPlusDoubleDouble
       firstFragment: #F12
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vPlusDoubleDouble
-    synthetic static vMinusIntInt
+    synthetic static isOriginVariable vMinusIntInt
       reference: <testLibrary>::@getter::vMinusIntInt
       firstFragment: #F13
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vMinusIntInt
-    synthetic static vMinusIntDouble
+    synthetic static isOriginVariable vMinusIntDouble
       reference: <testLibrary>::@getter::vMinusIntDouble
       firstFragment: #F14
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vMinusIntDouble
-    synthetic static vMinusDoubleInt
+    synthetic static isOriginVariable vMinusDoubleInt
       reference: <testLibrary>::@getter::vMinusDoubleInt
       firstFragment: #F15
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vMinusDoubleInt
-    synthetic static vMinusDoubleDouble
+    synthetic static isOriginVariable vMinusDoubleDouble
       reference: <testLibrary>::@getter::vMinusDoubleDouble
       firstFragment: #F16
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vMinusDoubleDouble
   setters
-    synthetic static vPlusIntInt
+    synthetic static isOriginVariable vPlusIntInt
       reference: <testLibrary>::@setter::vPlusIntInt
       firstFragment: #F17
       formalParameters
@@ -553,7 +550,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vPlusIntInt
-    synthetic static vPlusIntDouble
+    synthetic static isOriginVariable vPlusIntDouble
       reference: <testLibrary>::@setter::vPlusIntDouble
       firstFragment: #F19
       formalParameters
@@ -562,7 +559,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vPlusIntDouble
-    synthetic static vPlusDoubleInt
+    synthetic static isOriginVariable vPlusDoubleInt
       reference: <testLibrary>::@setter::vPlusDoubleInt
       firstFragment: #F21
       formalParameters
@@ -571,7 +568,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vPlusDoubleInt
-    synthetic static vPlusDoubleDouble
+    synthetic static isOriginVariable vPlusDoubleDouble
       reference: <testLibrary>::@setter::vPlusDoubleDouble
       firstFragment: #F23
       formalParameters
@@ -580,7 +577,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vPlusDoubleDouble
-    synthetic static vMinusIntInt
+    synthetic static isOriginVariable vMinusIntInt
       reference: <testLibrary>::@setter::vMinusIntInt
       firstFragment: #F25
       formalParameters
@@ -589,7 +586,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMinusIntInt
-    synthetic static vMinusIntDouble
+    synthetic static isOriginVariable vMinusIntDouble
       reference: <testLibrary>::@setter::vMinusIntDouble
       firstFragment: #F27
       formalParameters
@@ -598,7 +595,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMinusIntDouble
-    synthetic static vMinusDoubleInt
+    synthetic static isOriginVariable vMinusDoubleInt
       reference: <testLibrary>::@setter::vMinusDoubleInt
       firstFragment: #F29
       formalParameters
@@ -607,7 +604,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMinusDoubleInt
-    synthetic static vMinusDoubleDouble
+    synthetic static isOriginVariable vMinusDoubleDouble
       reference: <testLibrary>::@setter::vMinusDoubleDouble
       firstFragment: #F31
       formalParameters
@@ -630,32 +627,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::V
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::V
       setters
-        #F3 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::V
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::V::@formalParameter::value
   topLevelVariables
-    hasInitializer V
+    hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: num
       getter: <testLibrary>::@getter::V
       setter: <testLibrary>::@setter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: num
       variable: <testLibrary>::@topLevelVariable::V
   setters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@setter::V
       firstFragment: #F3
       formalParameters
@@ -680,72 +677,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer t1 (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F2 hasInitializer isOriginDeclaration t1 (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::t1
-        #F3 hasInitializer t2 (nameOffset:33) (firstTokenOffset:33) (offset:33)
+        #F3 hasInitializer isOriginDeclaration t2 (nameOffset:33) (firstTokenOffset:33) (offset:33)
           element: <testLibrary>::@topLevelVariable::t2
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F5 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F5 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::t1
-        #F6 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F6 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@getter::t2
       setters
-        #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F9 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F9 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::t1
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@setter::t1::@formalParameter::value
-        #F11 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+        #F11 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
           element: <testLibrary>::@setter::t2
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@setter::t2::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer t1
+    hasImplicitType hasInitializer isOriginDeclaration t1
       reference: <testLibrary>::@topLevelVariable::t1
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::t1
       setter: <testLibrary>::@setter::t1
-    hasInitializer t2
+    hasImplicitType hasInitializer isOriginDeclaration t2
       reference: <testLibrary>::@topLevelVariable::t2
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::t2
       setter: <testLibrary>::@setter::t2
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@getter::t1
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@getter::t2
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t2
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F7
       formalParameters
@@ -754,7 +751,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@setter::t1
       firstFragment: #F9
       formalParameters
@@ -763,7 +760,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@setter::t2
       firstFragment: #F11
       formalParameters
@@ -788,72 +785,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer t1 (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F2 hasInitializer isOriginDeclaration t1 (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::t1
-        #F3 hasInitializer t2 (nameOffset:38) (firstTokenOffset:38) (offset:38)
+        #F3 hasInitializer isOriginDeclaration t2 (nameOffset:38) (firstTokenOffset:38) (offset:38)
           element: <testLibrary>::@topLevelVariable::t2
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F5 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F5 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::t1
-        #F6 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F6 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@getter::t2
       setters
-        #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F9 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F9 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@setter::t1
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@setter::t1::@formalParameter::value
-        #F11 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+        #F11 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
           element: <testLibrary>::@setter::t2
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@setter::t2::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: List<int>
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer t1
+    hasImplicitType hasInitializer isOriginDeclaration t1
       reference: <testLibrary>::@topLevelVariable::t1
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::t1
       setter: <testLibrary>::@setter::t1
-    hasInitializer t2
+    hasImplicitType hasInitializer isOriginDeclaration t2
       reference: <testLibrary>::@topLevelVariable::t2
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::t2
       setter: <testLibrary>::@setter::t2
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@getter::t1
       firstFragment: #F5
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@getter::t2
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t2
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F7
       formalParameters
@@ -862,7 +859,7 @@
           type: List<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@setter::t1
       firstFragment: #F9
       formalParameters
@@ -871,7 +868,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@setter::t2
       firstFragment: #F11
       formalParameters
@@ -902,47 +899,47 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::A::@setter::f::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer a (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F7 hasInitializer isOriginDeclaration a (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::a
-        #F8 hasInitializer t1 (nameOffset:42) (firstTokenOffset:42) (offset:42)
+        #F8 hasInitializer isOriginDeclaration t1 (nameOffset:42) (firstTokenOffset:42) (offset:42)
           element: <testLibrary>::@topLevelVariable::t1
-        #F9 hasInitializer t2 (nameOffset:62) (firstTokenOffset:62) (offset:62)
+        #F9 hasInitializer isOriginDeclaration t2 (nameOffset:62) (firstTokenOffset:62) (offset:62)
           element: <testLibrary>::@topLevelVariable::t2
       getters
-        #F10 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F10 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::a
-        #F11 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F11 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@getter::t1
-        #F12 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+        #F12 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
           element: <testLibrary>::@getter::t2
       setters
-        #F13 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F13 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::a
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F15 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+        #F15 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
           element: <testLibrary>::@setter::t1
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@setter::t1::@formalParameter::value
-        #F17 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+        #F17 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
           element: <testLibrary>::@setter::t2
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
@@ -952,24 +949,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::f
           setter: <testLibrary>::@class::A::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@setter::f
           firstFragment: #F5
           formalParameters
@@ -979,42 +976,42 @@
           returnType: void
           variable: <testLibrary>::@class::A::@field::f
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F7
       type: A
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer t1
+    hasImplicitType hasInitializer isOriginDeclaration t1
       reference: <testLibrary>::@topLevelVariable::t1
       firstFragment: #F8
       type: int
       getter: <testLibrary>::@getter::t1
       setter: <testLibrary>::@setter::t1
-    hasInitializer t2
+    hasImplicitType hasInitializer isOriginDeclaration t2
       reference: <testLibrary>::@topLevelVariable::t2
       firstFragment: #F9
       type: int
       getter: <testLibrary>::@getter::t2
       setter: <testLibrary>::@setter::t2
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F10
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@getter::t1
       firstFragment: #F11
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@getter::t2
       firstFragment: #F12
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t2
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F13
       formalParameters
@@ -1023,7 +1020,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@setter::t1
       firstFragment: #F15
       formalParameters
@@ -1032,7 +1029,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@setter::t2
       firstFragment: #F17
       formalParameters
@@ -1064,17 +1061,17 @@
         #F1 class I (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::I
           fields
-            #F2 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::I::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::I::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::I::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -1082,35 +1079,35 @@
         #F7 class C (nameOffset:36) (firstTokenOffset:21) (offset:36)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F9 c (nameOffset:56) (firstTokenOffset:56) (offset:56)
+        #F9 isOriginDeclaration c (nameOffset:56) (firstTokenOffset:56) (offset:56)
           element: <testLibrary>::@topLevelVariable::c
-        #F10 hasInitializer t1 (nameOffset:63) (firstTokenOffset:63) (offset:63)
+        #F10 hasInitializer isOriginDeclaration t1 (nameOffset:63) (firstTokenOffset:63) (offset:63)
           element: <testLibrary>::@topLevelVariable::t1
-        #F11 hasInitializer t2 (nameOffset:83) (firstTokenOffset:83) (offset:83)
+        #F11 hasInitializer isOriginDeclaration t2 (nameOffset:83) (firstTokenOffset:83) (offset:83)
           element: <testLibrary>::@topLevelVariable::t2
       getters
-        #F12 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+        #F12 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
           element: <testLibrary>::@getter::c
-        #F13 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F13 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@getter::t1
-        #F14 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
+        #F14 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
           element: <testLibrary>::@getter::t2
       setters
-        #F15 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
+        #F15 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
           element: <testLibrary>::@setter::c
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:56)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F17 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F17 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@setter::t1
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@setter::t1::@formalParameter::value
-        #F19 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
+        #F19 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
           element: <testLibrary>::@setter::t2
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
@@ -1120,24 +1117,24 @@
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::I::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::I::@getter::f
           setter: <testLibrary>::@class::I::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::I::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::I::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::I::@setter::f
           firstFragment: #F5
           formalParameters
@@ -1152,46 +1149,46 @@
       interfaces
         I
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F9
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    hasInitializer t1
+    hasImplicitType hasInitializer isOriginDeclaration t1
       reference: <testLibrary>::@topLevelVariable::t1
       firstFragment: #F10
       type: int
       getter: <testLibrary>::@getter::t1
       setter: <testLibrary>::@setter::t1
-    hasInitializer t2
+    hasImplicitType hasInitializer isOriginDeclaration t2
       reference: <testLibrary>::@topLevelVariable::t2
       firstFragment: #F11
       type: int
       getter: <testLibrary>::@getter::t2
       setter: <testLibrary>::@setter::t2
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F12
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@getter::t1
       firstFragment: #F13
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@getter::t2
       firstFragment: #F14
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t2
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F15
       formalParameters
@@ -1200,7 +1197,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@setter::t1
       firstFragment: #F17
       formalParameters
@@ -1209,7 +1206,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@setter::t2
       firstFragment: #F19
       formalParameters
@@ -1241,17 +1238,17 @@
         #F1 class I (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::I
           fields
-            #F2 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::I::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::I::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::I::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -1259,26 +1256,26 @@
         #F7 class C (nameOffset:36) (firstTokenOffset:21) (offset:36)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F9 hasInitializer t1 (nameOffset:76) (firstTokenOffset:76) (offset:76)
+        #F9 hasInitializer isOriginDeclaration t1 (nameOffset:76) (firstTokenOffset:76) (offset:76)
           element: <testLibrary>::@topLevelVariable::t1
-        #F10 hasInitializer t2 (nameOffset:101) (firstTokenOffset:101) (offset:101)
+        #F10 hasInitializer isOriginDeclaration t2 (nameOffset:101) (firstTokenOffset:101) (offset:101)
           element: <testLibrary>::@topLevelVariable::t2
       getters
-        #F11 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+        #F11 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
           element: <testLibrary>::@getter::t1
-        #F12 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+        #F12 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
           element: <testLibrary>::@getter::t2
       setters
-        #F13 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+        #F13 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
           element: <testLibrary>::@setter::t1
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@setter::t1::@formalParameter::value
-        #F15 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+        #F15 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
           element: <testLibrary>::@setter::t2
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
@@ -1291,24 +1288,24 @@
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::I::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::I::@getter::f
           setter: <testLibrary>::@class::I::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::I::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::I::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::I::@setter::f
           firstFragment: #F5
           formalParameters
@@ -1323,35 +1320,35 @@
       interfaces
         I
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
   topLevelVariables
-    hasInitializer t1
+    hasImplicitType hasInitializer isOriginDeclaration t1
       reference: <testLibrary>::@topLevelVariable::t1
       firstFragment: #F9
       type: int
       getter: <testLibrary>::@getter::t1
       setter: <testLibrary>::@setter::t1
-    hasInitializer t2
+    hasImplicitType hasInitializer isOriginDeclaration t2
       reference: <testLibrary>::@topLevelVariable::t2
       firstFragment: #F10
       type: int
       getter: <testLibrary>::@getter::t2
       setter: <testLibrary>::@setter::t2
   getters
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@getter::t1
       firstFragment: #F11
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@getter::t2
       firstFragment: #F12
       returnType: int
       variable: <testLibrary>::@topLevelVariable::t2
   setters
-    synthetic static t1
+    synthetic static isOriginVariable t1
       reference: <testLibrary>::@setter::t1
       firstFragment: #F13
       formalParameters
@@ -1360,7 +1357,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::t1
-    synthetic static t2
+    synthetic static isOriginVariable t2
       reference: <testLibrary>::@setter::t2
       firstFragment: #F15
       formalParameters
@@ -1394,22 +1391,22 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer uValue (nameOffset:80) (firstTokenOffset:80) (offset:80)
+        #F1 hasInitializer isOriginDeclaration uValue (nameOffset:80) (firstTokenOffset:80) (offset:80)
           element: <testLibrary>::@topLevelVariable::uValue
-        #F2 hasInitializer uFuture (nameOffset:121) (firstTokenOffset:121) (offset:121)
+        #F2 hasInitializer isOriginDeclaration uFuture (nameOffset:121) (firstTokenOffset:121) (offset:121)
           element: <testLibrary>::@topLevelVariable::uFuture
       getters
-        #F3 synthetic uValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+        #F3 synthetic isOriginVariable uValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
           element: <testLibrary>::@getter::uValue
-        #F4 synthetic uFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
+        #F4 synthetic isOriginVariable uFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
           element: <testLibrary>::@getter::uFuture
       setters
-        #F5 synthetic uValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+        #F5 synthetic isOriginVariable uValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
           element: <testLibrary>::@setter::uValue
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
               element: <testLibrary>::@setter::uValue::@formalParameter::value
-        #F7 synthetic uFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
+        #F7 synthetic isOriginVariable uFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
           element: <testLibrary>::@setter::uFuture
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:121)
@@ -1420,31 +1417,31 @@
         #F10 fFuture (nameOffset:53) (firstTokenOffset:41) (offset:53)
           element: <testLibrary>::@function::fFuture
   topLevelVariables
-    hasInitializer uValue
+    hasImplicitType hasInitializer isOriginDeclaration uValue
       reference: <testLibrary>::@topLevelVariable::uValue
       firstFragment: #F1
       type: Future<int> Function()
       getter: <testLibrary>::@getter::uValue
       setter: <testLibrary>::@setter::uValue
-    hasInitializer uFuture
+    hasImplicitType hasInitializer isOriginDeclaration uFuture
       reference: <testLibrary>::@topLevelVariable::uFuture
       firstFragment: #F2
       type: Future<int> Function()
       getter: <testLibrary>::@getter::uFuture
       setter: <testLibrary>::@setter::uFuture
   getters
-    synthetic static uValue
+    synthetic static isOriginVariable uValue
       reference: <testLibrary>::@getter::uValue
       firstFragment: #F3
       returnType: Future<int> Function()
       variable: <testLibrary>::@topLevelVariable::uValue
-    synthetic static uFuture
+    synthetic static isOriginVariable uFuture
       reference: <testLibrary>::@getter::uFuture
       firstFragment: #F4
       returnType: Future<int> Function()
       variable: <testLibrary>::@topLevelVariable::uFuture
   setters
-    synthetic static uValue
+    synthetic static isOriginVariable uValue
       reference: <testLibrary>::@setter::uValue
       firstFragment: #F5
       formalParameters
@@ -1453,7 +1450,7 @@
           type: Future<int> Function()
       returnType: void
       variable: <testLibrary>::@topLevelVariable::uValue
-    synthetic static uFuture
+    synthetic static isOriginVariable uFuture
       reference: <testLibrary>::@setter::uFuture
       firstFragment: #F7
       formalParameters
@@ -1489,112 +1486,112 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vBitXor (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vBitXor (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vBitXor
-        #F2 hasInitializer vBitAnd (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 hasInitializer isOriginDeclaration vBitAnd (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::vBitAnd
-        #F3 hasInitializer vBitOr (nameOffset:46) (firstTokenOffset:46) (offset:46)
+        #F3 hasInitializer isOriginDeclaration vBitOr (nameOffset:46) (firstTokenOffset:46) (offset:46)
           element: <testLibrary>::@topLevelVariable::vBitOr
-        #F4 hasInitializer vBitShiftLeft (nameOffset:66) (firstTokenOffset:66) (offset:66)
+        #F4 hasInitializer isOriginDeclaration vBitShiftLeft (nameOffset:66) (firstTokenOffset:66) (offset:66)
           element: <testLibrary>::@topLevelVariable::vBitShiftLeft
-        #F5 hasInitializer vBitShiftRight (nameOffset:94) (firstTokenOffset:94) (offset:94)
+        #F5 hasInitializer isOriginDeclaration vBitShiftRight (nameOffset:94) (firstTokenOffset:94) (offset:94)
           element: <testLibrary>::@topLevelVariable::vBitShiftRight
       getters
-        #F6 synthetic vBitXor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F6 synthetic isOriginVariable vBitXor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vBitXor
-        #F7 synthetic vBitAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F7 synthetic isOriginVariable vBitAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::vBitAnd
-        #F8 synthetic vBitOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+        #F8 synthetic isOriginVariable vBitOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
           element: <testLibrary>::@getter::vBitOr
-        #F9 synthetic vBitShiftLeft (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+        #F9 synthetic isOriginVariable vBitShiftLeft (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
           element: <testLibrary>::@getter::vBitShiftLeft
-        #F10 synthetic vBitShiftRight (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+        #F10 synthetic isOriginVariable vBitShiftRight (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
           element: <testLibrary>::@getter::vBitShiftRight
       setters
-        #F11 synthetic vBitXor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F11 synthetic isOriginVariable vBitXor (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vBitXor
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vBitXor::@formalParameter::value
-        #F13 synthetic vBitAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F13 synthetic isOriginVariable vBitAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::vBitAnd
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::vBitAnd::@formalParameter::value
-        #F15 synthetic vBitOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+        #F15 synthetic isOriginVariable vBitOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
           element: <testLibrary>::@setter::vBitOr
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@setter::vBitOr::@formalParameter::value
-        #F17 synthetic vBitShiftLeft (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+        #F17 synthetic isOriginVariable vBitShiftLeft (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
           element: <testLibrary>::@setter::vBitShiftLeft
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@setter::vBitShiftLeft::@formalParameter::value
-        #F19 synthetic vBitShiftRight (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+        #F19 synthetic isOriginVariable vBitShiftRight (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
           element: <testLibrary>::@setter::vBitShiftRight
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@setter::vBitShiftRight::@formalParameter::value
   topLevelVariables
-    hasInitializer vBitXor
+    hasImplicitType hasInitializer isOriginDeclaration vBitXor
       reference: <testLibrary>::@topLevelVariable::vBitXor
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vBitXor
       setter: <testLibrary>::@setter::vBitXor
-    hasInitializer vBitAnd
+    hasImplicitType hasInitializer isOriginDeclaration vBitAnd
       reference: <testLibrary>::@topLevelVariable::vBitAnd
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::vBitAnd
       setter: <testLibrary>::@setter::vBitAnd
-    hasInitializer vBitOr
+    hasImplicitType hasInitializer isOriginDeclaration vBitOr
       reference: <testLibrary>::@topLevelVariable::vBitOr
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vBitOr
       setter: <testLibrary>::@setter::vBitOr
-    hasInitializer vBitShiftLeft
+    hasImplicitType hasInitializer isOriginDeclaration vBitShiftLeft
       reference: <testLibrary>::@topLevelVariable::vBitShiftLeft
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::vBitShiftLeft
       setter: <testLibrary>::@setter::vBitShiftLeft
-    hasInitializer vBitShiftRight
+    hasImplicitType hasInitializer isOriginDeclaration vBitShiftRight
       reference: <testLibrary>::@topLevelVariable::vBitShiftRight
       firstFragment: #F5
       type: int
       getter: <testLibrary>::@getter::vBitShiftRight
       setter: <testLibrary>::@setter::vBitShiftRight
   getters
-    synthetic static vBitXor
+    synthetic static isOriginVariable vBitXor
       reference: <testLibrary>::@getter::vBitXor
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitXor
-    synthetic static vBitAnd
+    synthetic static isOriginVariable vBitAnd
       reference: <testLibrary>::@getter::vBitAnd
       firstFragment: #F7
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitAnd
-    synthetic static vBitOr
+    synthetic static isOriginVariable vBitOr
       reference: <testLibrary>::@getter::vBitOr
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitOr
-    synthetic static vBitShiftLeft
+    synthetic static isOriginVariable vBitShiftLeft
       reference: <testLibrary>::@getter::vBitShiftLeft
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitShiftLeft
-    synthetic static vBitShiftRight
+    synthetic static isOriginVariable vBitShiftRight
       reference: <testLibrary>::@getter::vBitShiftRight
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vBitShiftRight
   setters
-    synthetic static vBitXor
+    synthetic static isOriginVariable vBitXor
       reference: <testLibrary>::@setter::vBitXor
       firstFragment: #F11
       formalParameters
@@ -1603,7 +1600,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vBitXor
-    synthetic static vBitAnd
+    synthetic static isOriginVariable vBitAnd
       reference: <testLibrary>::@setter::vBitAnd
       firstFragment: #F13
       formalParameters
@@ -1612,7 +1609,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vBitAnd
-    synthetic static vBitOr
+    synthetic static isOriginVariable vBitOr
       reference: <testLibrary>::@setter::vBitOr
       firstFragment: #F15
       formalParameters
@@ -1621,7 +1618,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vBitOr
-    synthetic static vBitShiftLeft
+    synthetic static isOriginVariable vBitShiftLeft
       reference: <testLibrary>::@setter::vBitShiftLeft
       firstFragment: #F17
       formalParameters
@@ -1630,7 +1627,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vBitShiftLeft
-    synthetic static vBitShiftRight
+    synthetic static isOriginVariable vBitShiftRight
       reference: <testLibrary>::@setter::vBitShiftRight
       firstFragment: #F19
       formalParameters
@@ -1662,17 +1659,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 a (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration a (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::a
           setters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::a
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -1681,31 +1678,31 @@
             #F7 m (nameOffset:26) (firstTokenOffset:21) (offset:26)
               element: <testLibrary>::@class::A::@method::m
       topLevelVariables
-        #F8 hasInitializer vSetField (nameOffset:39) (firstTokenOffset:39) (offset:39)
+        #F8 hasInitializer isOriginDeclaration vSetField (nameOffset:39) (firstTokenOffset:39) (offset:39)
           element: <testLibrary>::@topLevelVariable::vSetField
-        #F9 hasInitializer vInvokeMethod (nameOffset:71) (firstTokenOffset:71) (offset:71)
+        #F9 hasInitializer isOriginDeclaration vInvokeMethod (nameOffset:71) (firstTokenOffset:71) (offset:71)
           element: <testLibrary>::@topLevelVariable::vInvokeMethod
-        #F10 hasInitializer vBoth (nameOffset:105) (firstTokenOffset:105) (offset:105)
+        #F10 hasInitializer isOriginDeclaration vBoth (nameOffset:105) (firstTokenOffset:105) (offset:105)
           element: <testLibrary>::@topLevelVariable::vBoth
       getters
-        #F11 synthetic vSetField (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F11 synthetic isOriginVariable vSetField (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@getter::vSetField
-        #F12 synthetic vInvokeMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+        #F12 synthetic isOriginVariable vInvokeMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
           element: <testLibrary>::@getter::vInvokeMethod
-        #F13 synthetic vBoth (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
+        #F13 synthetic isOriginVariable vBoth (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
           element: <testLibrary>::@getter::vBoth
       setters
-        #F14 synthetic vSetField (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F14 synthetic isOriginVariable vSetField (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@setter::vSetField
           formalParameters
             #F15 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@setter::vSetField::@formalParameter::value
-        #F16 synthetic vInvokeMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+        #F16 synthetic isOriginVariable vInvokeMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
           element: <testLibrary>::@setter::vInvokeMethod
           formalParameters
             #F17 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@setter::vInvokeMethod::@formalParameter::value
-        #F18 synthetic vBoth (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
+        #F18 synthetic isOriginVariable vBoth (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
           element: <testLibrary>::@setter::vBoth
           formalParameters
             #F19 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
@@ -1715,24 +1712,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::a
           setter: <testLibrary>::@class::A::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::A::@setter::a
           firstFragment: #F5
           formalParameters
@@ -1747,42 +1744,42 @@
           firstFragment: #F7
           returnType: void
   topLevelVariables
-    hasInitializer vSetField
+    hasImplicitType hasInitializer isOriginDeclaration vSetField
       reference: <testLibrary>::@topLevelVariable::vSetField
       firstFragment: #F8
       type: A
       getter: <testLibrary>::@getter::vSetField
       setter: <testLibrary>::@setter::vSetField
-    hasInitializer vInvokeMethod
+    hasImplicitType hasInitializer isOriginDeclaration vInvokeMethod
       reference: <testLibrary>::@topLevelVariable::vInvokeMethod
       firstFragment: #F9
       type: A
       getter: <testLibrary>::@getter::vInvokeMethod
       setter: <testLibrary>::@setter::vInvokeMethod
-    hasInitializer vBoth
+    hasImplicitType hasInitializer isOriginDeclaration vBoth
       reference: <testLibrary>::@topLevelVariable::vBoth
       firstFragment: #F10
       type: A
       getter: <testLibrary>::@getter::vBoth
       setter: <testLibrary>::@setter::vBoth
   getters
-    synthetic static vSetField
+    synthetic static isOriginVariable vSetField
       reference: <testLibrary>::@getter::vSetField
       firstFragment: #F11
       returnType: A
       variable: <testLibrary>::@topLevelVariable::vSetField
-    synthetic static vInvokeMethod
+    synthetic static isOriginVariable vInvokeMethod
       reference: <testLibrary>::@getter::vInvokeMethod
       firstFragment: #F12
       returnType: A
       variable: <testLibrary>::@topLevelVariable::vInvokeMethod
-    synthetic static vBoth
+    synthetic static isOriginVariable vBoth
       reference: <testLibrary>::@getter::vBoth
       firstFragment: #F13
       returnType: A
       variable: <testLibrary>::@topLevelVariable::vBoth
   setters
-    synthetic static vSetField
+    synthetic static isOriginVariable vSetField
       reference: <testLibrary>::@setter::vSetField
       firstFragment: #F14
       formalParameters
@@ -1791,7 +1788,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vSetField
-    synthetic static vInvokeMethod
+    synthetic static isOriginVariable vInvokeMethod
       reference: <testLibrary>::@setter::vInvokeMethod
       firstFragment: #F16
       formalParameters
@@ -1800,7 +1797,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vInvokeMethod
-    synthetic static vBoth
+    synthetic static isOriginVariable vBoth
       reference: <testLibrary>::@setter::vBoth
       firstFragment: #F18
       formalParameters
@@ -1855,17 +1852,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -1873,17 +1870,17 @@
         #F7 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           fields
-            #F8 a (nameOffset:39) (firstTokenOffset:39) (offset:39)
+            #F8 isOriginDeclaration a (nameOffset:39) (firstTokenOffset:39) (offset:39)
               element: <testLibrary>::@class::B::@field::a
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F10 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@getter::a
           setters
-            #F11 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F11 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@setter::a
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
@@ -1891,17 +1888,17 @@
         #F13 class C (nameOffset:50) (firstTokenOffset:44) (offset:50)
           element: <testLibrary>::@class::C
           fields
-            #F14 b (nameOffset:58) (firstTokenOffset:58) (offset:58)
+            #F14 isOriginDeclaration b (nameOffset:58) (firstTokenOffset:58) (offset:58)
               element: <testLibrary>::@class::C::@field::b
           constructors
-            #F15 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F15 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F16 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F16 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::C::@getter::b
           setters
-            #F17 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
+            #F17 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
               element: <testLibrary>::@class::C::@setter::b
               formalParameters
                 #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:58)
@@ -1909,116 +1906,116 @@
         #F19 class X (nameOffset:69) (firstTokenOffset:63) (offset:69)
           element: <testLibrary>::@class::X
           fields
-            #F20 hasInitializer a (nameOffset:77) (firstTokenOffset:77) (offset:77)
+            #F20 hasInitializer isOriginDeclaration a (nameOffset:77) (firstTokenOffset:77) (offset:77)
               element: <testLibrary>::@class::X::@field::a
-            #F21 hasInitializer b (nameOffset:94) (firstTokenOffset:94) (offset:94)
+            #F21 hasInitializer isOriginDeclaration b (nameOffset:94) (firstTokenOffset:94) (offset:94)
               element: <testLibrary>::@class::X::@field::b
-            #F22 hasInitializer c (nameOffset:111) (firstTokenOffset:111) (offset:111)
+            #F22 hasInitializer isOriginDeclaration c (nameOffset:111) (firstTokenOffset:111) (offset:111)
               element: <testLibrary>::@class::X::@field::c
-            #F23 hasInitializer t01 (nameOffset:130) (firstTokenOffset:130) (offset:130)
+            #F23 hasInitializer isOriginDeclaration t01 (nameOffset:130) (firstTokenOffset:130) (offset:130)
               element: <testLibrary>::@class::X::@field::t01
-            #F24 hasInitializer t02 (nameOffset:147) (firstTokenOffset:147) (offset:147)
+            #F24 hasInitializer isOriginDeclaration t02 (nameOffset:147) (firstTokenOffset:147) (offset:147)
               element: <testLibrary>::@class::X::@field::t02
-            #F25 hasInitializer t03 (nameOffset:166) (firstTokenOffset:166) (offset:166)
+            #F25 hasInitializer isOriginDeclaration t03 (nameOffset:166) (firstTokenOffset:166) (offset:166)
               element: <testLibrary>::@class::X::@field::t03
-            #F26 hasInitializer t11 (nameOffset:187) (firstTokenOffset:187) (offset:187)
+            #F26 hasInitializer isOriginDeclaration t11 (nameOffset:187) (firstTokenOffset:187) (offset:187)
               element: <testLibrary>::@class::X::@field::t11
-            #F27 hasInitializer t12 (nameOffset:210) (firstTokenOffset:210) (offset:210)
+            #F27 hasInitializer isOriginDeclaration t12 (nameOffset:210) (firstTokenOffset:210) (offset:210)
               element: <testLibrary>::@class::X::@field::t12
-            #F28 hasInitializer t13 (nameOffset:235) (firstTokenOffset:235) (offset:235)
+            #F28 hasInitializer isOriginDeclaration t13 (nameOffset:235) (firstTokenOffset:235) (offset:235)
               element: <testLibrary>::@class::X::@field::t13
-            #F29 hasInitializer t21 (nameOffset:262) (firstTokenOffset:262) (offset:262)
+            #F29 hasInitializer isOriginDeclaration t21 (nameOffset:262) (firstTokenOffset:262) (offset:262)
               element: <testLibrary>::@class::X::@field::t21
-            #F30 hasInitializer t22 (nameOffset:284) (firstTokenOffset:284) (offset:284)
+            #F30 hasInitializer isOriginDeclaration t22 (nameOffset:284) (firstTokenOffset:284) (offset:284)
               element: <testLibrary>::@class::X::@field::t22
-            #F31 hasInitializer t23 (nameOffset:308) (firstTokenOffset:308) (offset:308)
+            #F31 hasInitializer isOriginDeclaration t23 (nameOffset:308) (firstTokenOffset:308) (offset:308)
               element: <testLibrary>::@class::X::@field::t23
           constructors
-            #F32 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F32 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@class::X::@constructor::new
               typeName: X
           getters
-            #F33 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F33 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::X::@getter::a
-            #F34 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+            #F34 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@class::X::@getter::b
-            #F35 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
+            #F35 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
               element: <testLibrary>::@class::X::@getter::c
-            #F36 synthetic t01 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
+            #F36 synthetic isOriginVariable t01 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
               element: <testLibrary>::@class::X::@getter::t01
-            #F37 synthetic t02 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:147)
+            #F37 synthetic isOriginVariable t02 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:147)
               element: <testLibrary>::@class::X::@getter::t02
-            #F38 synthetic t03 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:166)
+            #F38 synthetic isOriginVariable t03 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:166)
               element: <testLibrary>::@class::X::@getter::t03
-            #F39 synthetic t11 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:187)
+            #F39 synthetic isOriginVariable t11 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:187)
               element: <testLibrary>::@class::X::@getter::t11
-            #F40 synthetic t12 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:210)
+            #F40 synthetic isOriginVariable t12 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:210)
               element: <testLibrary>::@class::X::@getter::t12
-            #F41 synthetic t13 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:235)
+            #F41 synthetic isOriginVariable t13 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:235)
               element: <testLibrary>::@class::X::@getter::t13
-            #F42 synthetic t21 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:262)
+            #F42 synthetic isOriginVariable t21 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:262)
               element: <testLibrary>::@class::X::@getter::t21
-            #F43 synthetic t22 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
+            #F43 synthetic isOriginVariable t22 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
               element: <testLibrary>::@class::X::@getter::t22
-            #F44 synthetic t23 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:308)
+            #F44 synthetic isOriginVariable t23 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:308)
               element: <testLibrary>::@class::X::@getter::t23
           setters
-            #F45 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F45 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::X::@setter::a
               formalParameters
                 #F46 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
                   element: <testLibrary>::@class::X::@setter::a::@formalParameter::value
-            #F47 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+            #F47 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@class::X::@setter::b
               formalParameters
                 #F48 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
                   element: <testLibrary>::@class::X::@setter::b::@formalParameter::value
-            #F49 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
+            #F49 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
               element: <testLibrary>::@class::X::@setter::c
               formalParameters
                 #F50 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:111)
                   element: <testLibrary>::@class::X::@setter::c::@formalParameter::value
-            #F51 synthetic t01 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
+            #F51 synthetic isOriginVariable t01 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
               element: <testLibrary>::@class::X::@setter::t01
               formalParameters
                 #F52 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:130)
                   element: <testLibrary>::@class::X::@setter::t01::@formalParameter::value
-            #F53 synthetic t02 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:147)
+            #F53 synthetic isOriginVariable t02 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:147)
               element: <testLibrary>::@class::X::@setter::t02
               formalParameters
                 #F54 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:147)
                   element: <testLibrary>::@class::X::@setter::t02::@formalParameter::value
-            #F55 synthetic t03 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:166)
+            #F55 synthetic isOriginVariable t03 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:166)
               element: <testLibrary>::@class::X::@setter::t03
               formalParameters
                 #F56 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:166)
                   element: <testLibrary>::@class::X::@setter::t03::@formalParameter::value
-            #F57 synthetic t11 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:187)
+            #F57 synthetic isOriginVariable t11 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:187)
               element: <testLibrary>::@class::X::@setter::t11
               formalParameters
                 #F58 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:187)
                   element: <testLibrary>::@class::X::@setter::t11::@formalParameter::value
-            #F59 synthetic t12 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:210)
+            #F59 synthetic isOriginVariable t12 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:210)
               element: <testLibrary>::@class::X::@setter::t12
               formalParameters
                 #F60 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:210)
                   element: <testLibrary>::@class::X::@setter::t12::@formalParameter::value
-            #F61 synthetic t13 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:235)
+            #F61 synthetic isOriginVariable t13 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:235)
               element: <testLibrary>::@class::X::@setter::t13
               formalParameters
                 #F62 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:235)
                   element: <testLibrary>::@class::X::@setter::t13::@formalParameter::value
-            #F63 synthetic t21 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:262)
+            #F63 synthetic isOriginVariable t21 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:262)
               element: <testLibrary>::@class::X::@setter::t21
               formalParameters
                 #F64 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:262)
                   element: <testLibrary>::@class::X::@setter::t21::@formalParameter::value
-            #F65 synthetic t22 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
+            #F65 synthetic isOriginVariable t22 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
               element: <testLibrary>::@class::X::@setter::t22
               formalParameters
                 #F66 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:284)
                   element: <testLibrary>::@class::X::@setter::t22::@formalParameter::value
-            #F67 synthetic t23 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:308)
+            #F67 synthetic isOriginVariable t23 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:308)
               element: <testLibrary>::@class::X::@setter::t23
               formalParameters
                 #F68 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:308)
@@ -2035,24 +2032,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer f
+        hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::f
           setter: <testLibrary>::@class::A::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@setter::f
           firstFragment: #F5
           formalParameters
@@ -2065,24 +2062,24 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       fields
-        a
+        isOriginDeclaration a
           reference: <testLibrary>::@class::B::@field::a
           firstFragment: #F8
           type: A
           getter: <testLibrary>::@class::B::@getter::a
           setter: <testLibrary>::@class::B::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::B::@getter::a
           firstFragment: #F10
           returnType: A
           variable: <testLibrary>::@class::B::@field::a
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::B::@setter::a
           firstFragment: #F11
           formalParameters
@@ -2095,24 +2092,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F13
       fields
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::C::@field::b
           firstFragment: #F14
           type: B
           getter: <testLibrary>::@class::C::@getter::b
           setter: <testLibrary>::@class::C::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F15
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::C::@getter::b
           firstFragment: #F16
           returnType: B
           variable: <testLibrary>::@class::C::@field::b
       setters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::C::@setter::b
           firstFragment: #F17
           formalParameters
@@ -2125,145 +2122,145 @@
       reference: <testLibrary>::@class::X
       firstFragment: #F19
       fields
-        hasInitializer a
+        hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::X::@field::a
           firstFragment: #F20
           type: A
           getter: <testLibrary>::@class::X::@getter::a
           setter: <testLibrary>::@class::X::@setter::a
-        hasInitializer b
+        hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@class::X::@field::b
           firstFragment: #F21
           type: B
           getter: <testLibrary>::@class::X::@getter::b
           setter: <testLibrary>::@class::X::@setter::b
-        hasInitializer c
+        hasInitializer isOriginDeclaration c
           reference: <testLibrary>::@class::X::@field::c
           firstFragment: #F22
           type: C
           getter: <testLibrary>::@class::X::@getter::c
           setter: <testLibrary>::@class::X::@setter::c
-        hasInitializer t01
+        hasImplicitType hasInitializer isOriginDeclaration t01
           reference: <testLibrary>::@class::X::@field::t01
           firstFragment: #F23
           type: int
           getter: <testLibrary>::@class::X::@getter::t01
           setter: <testLibrary>::@class::X::@setter::t01
-        hasInitializer t02
+        hasImplicitType hasInitializer isOriginDeclaration t02
           reference: <testLibrary>::@class::X::@field::t02
           firstFragment: #F24
           type: int
           getter: <testLibrary>::@class::X::@getter::t02
           setter: <testLibrary>::@class::X::@setter::t02
-        hasInitializer t03
+        hasImplicitType hasInitializer isOriginDeclaration t03
           reference: <testLibrary>::@class::X::@field::t03
           firstFragment: #F25
           type: int
           getter: <testLibrary>::@class::X::@getter::t03
           setter: <testLibrary>::@class::X::@setter::t03
-        hasInitializer t11
+        hasImplicitType hasInitializer isOriginDeclaration t11
           reference: <testLibrary>::@class::X::@field::t11
           firstFragment: #F26
           type: int
           getter: <testLibrary>::@class::X::@getter::t11
           setter: <testLibrary>::@class::X::@setter::t11
-        hasInitializer t12
+        hasImplicitType hasInitializer isOriginDeclaration t12
           reference: <testLibrary>::@class::X::@field::t12
           firstFragment: #F27
           type: int
           getter: <testLibrary>::@class::X::@getter::t12
           setter: <testLibrary>::@class::X::@setter::t12
-        hasInitializer t13
+        hasImplicitType hasInitializer isOriginDeclaration t13
           reference: <testLibrary>::@class::X::@field::t13
           firstFragment: #F28
           type: int
           getter: <testLibrary>::@class::X::@getter::t13
           setter: <testLibrary>::@class::X::@setter::t13
-        hasInitializer t21
+        hasImplicitType hasInitializer isOriginDeclaration t21
           reference: <testLibrary>::@class::X::@field::t21
           firstFragment: #F29
           type: int
           getter: <testLibrary>::@class::X::@getter::t21
           setter: <testLibrary>::@class::X::@setter::t21
-        hasInitializer t22
+        hasImplicitType hasInitializer isOriginDeclaration t22
           reference: <testLibrary>::@class::X::@field::t22
           firstFragment: #F30
           type: int
           getter: <testLibrary>::@class::X::@getter::t22
           setter: <testLibrary>::@class::X::@setter::t22
-        hasInitializer t23
+        hasImplicitType hasInitializer isOriginDeclaration t23
           reference: <testLibrary>::@class::X::@field::t23
           firstFragment: #F31
           type: int
           getter: <testLibrary>::@class::X::@getter::t23
           setter: <testLibrary>::@class::X::@setter::t23
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::X::@constructor::new
           firstFragment: #F32
       getters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::X::@getter::a
           firstFragment: #F33
           returnType: A
           variable: <testLibrary>::@class::X::@field::a
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::X::@getter::b
           firstFragment: #F34
           returnType: B
           variable: <testLibrary>::@class::X::@field::b
-        synthetic c
+        synthetic isOriginVariable c
           reference: <testLibrary>::@class::X::@getter::c
           firstFragment: #F35
           returnType: C
           variable: <testLibrary>::@class::X::@field::c
-        synthetic t01
+        synthetic isOriginVariable t01
           reference: <testLibrary>::@class::X::@getter::t01
           firstFragment: #F36
           returnType: int
           variable: <testLibrary>::@class::X::@field::t01
-        synthetic t02
+        synthetic isOriginVariable t02
           reference: <testLibrary>::@class::X::@getter::t02
           firstFragment: #F37
           returnType: int
           variable: <testLibrary>::@class::X::@field::t02
-        synthetic t03
+        synthetic isOriginVariable t03
           reference: <testLibrary>::@class::X::@getter::t03
           firstFragment: #F38
           returnType: int
           variable: <testLibrary>::@class::X::@field::t03
-        synthetic t11
+        synthetic isOriginVariable t11
           reference: <testLibrary>::@class::X::@getter::t11
           firstFragment: #F39
           returnType: int
           variable: <testLibrary>::@class::X::@field::t11
-        synthetic t12
+        synthetic isOriginVariable t12
           reference: <testLibrary>::@class::X::@getter::t12
           firstFragment: #F40
           returnType: int
           variable: <testLibrary>::@class::X::@field::t12
-        synthetic t13
+        synthetic isOriginVariable t13
           reference: <testLibrary>::@class::X::@getter::t13
           firstFragment: #F41
           returnType: int
           variable: <testLibrary>::@class::X::@field::t13
-        synthetic t21
+        synthetic isOriginVariable t21
           reference: <testLibrary>::@class::X::@getter::t21
           firstFragment: #F42
           returnType: int
           variable: <testLibrary>::@class::X::@field::t21
-        synthetic t22
+        synthetic isOriginVariable t22
           reference: <testLibrary>::@class::X::@getter::t22
           firstFragment: #F43
           returnType: int
           variable: <testLibrary>::@class::X::@field::t22
-        synthetic t23
+        synthetic isOriginVariable t23
           reference: <testLibrary>::@class::X::@getter::t23
           firstFragment: #F44
           returnType: int
           variable: <testLibrary>::@class::X::@field::t23
       setters
-        synthetic a
+        synthetic isOriginVariable a
           reference: <testLibrary>::@class::X::@setter::a
           firstFragment: #F45
           formalParameters
@@ -2272,7 +2269,7 @@
               type: A
           returnType: void
           variable: <testLibrary>::@class::X::@field::a
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::X::@setter::b
           firstFragment: #F47
           formalParameters
@@ -2281,7 +2278,7 @@
               type: B
           returnType: void
           variable: <testLibrary>::@class::X::@field::b
-        synthetic c
+        synthetic isOriginVariable c
           reference: <testLibrary>::@class::X::@setter::c
           firstFragment: #F49
           formalParameters
@@ -2290,7 +2287,7 @@
               type: C
           returnType: void
           variable: <testLibrary>::@class::X::@field::c
-        synthetic t01
+        synthetic isOriginVariable t01
           reference: <testLibrary>::@class::X::@setter::t01
           firstFragment: #F51
           formalParameters
@@ -2299,7 +2296,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t01
-        synthetic t02
+        synthetic isOriginVariable t02
           reference: <testLibrary>::@class::X::@setter::t02
           firstFragment: #F53
           formalParameters
@@ -2308,7 +2305,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t02
-        synthetic t03
+        synthetic isOriginVariable t03
           reference: <testLibrary>::@class::X::@setter::t03
           firstFragment: #F55
           formalParameters
@@ -2317,7 +2314,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t03
-        synthetic t11
+        synthetic isOriginVariable t11
           reference: <testLibrary>::@class::X::@setter::t11
           firstFragment: #F57
           formalParameters
@@ -2326,7 +2323,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t11
-        synthetic t12
+        synthetic isOriginVariable t12
           reference: <testLibrary>::@class::X::@setter::t12
           firstFragment: #F59
           formalParameters
@@ -2335,7 +2332,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t12
-        synthetic t13
+        synthetic isOriginVariable t13
           reference: <testLibrary>::@class::X::@setter::t13
           firstFragment: #F61
           formalParameters
@@ -2344,7 +2341,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t13
-        synthetic t21
+        synthetic isOriginVariable t21
           reference: <testLibrary>::@class::X::@setter::t21
           firstFragment: #F63
           formalParameters
@@ -2353,7 +2350,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t21
-        synthetic t22
+        synthetic isOriginVariable t22
           reference: <testLibrary>::@class::X::@setter::t22
           firstFragment: #F65
           formalParameters
@@ -2362,7 +2359,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::X::@field::t22
-        synthetic t23
+        synthetic isOriginVariable t23
           reference: <testLibrary>::@class::X::@setter::t23
           firstFragment: #F67
           formalParameters
@@ -2398,32 +2395,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::V
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::V
       setters
-        #F3 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::V
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::V::@formalParameter::value
   topLevelVariables
-    hasInitializer V
+    hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: num
       getter: <testLibrary>::@getter::V
       setter: <testLibrary>::@setter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: num
       variable: <testLibrary>::@topLevelVariable::V
   setters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@setter::V
       firstFragment: #F3
       formalParameters
@@ -2447,52 +2444,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vEq (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vEq (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vEq
-        #F2 hasInitializer vNotEq (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F2 hasInitializer isOriginDeclaration vNotEq (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::vNotEq
       getters
-        #F3 synthetic vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vEq
-        #F4 synthetic vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F4 synthetic isOriginVariable vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::vNotEq
       setters
-        #F5 synthetic vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vEq
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vEq::@formalParameter::value
-        #F7 synthetic vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F7 synthetic isOriginVariable vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@setter::vNotEq
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@setter::vNotEq::@formalParameter::value
   topLevelVariables
-    hasInitializer vEq
+    hasImplicitType hasInitializer isOriginDeclaration vEq
       reference: <testLibrary>::@topLevelVariable::vEq
       firstFragment: #F1
       type: bool
       getter: <testLibrary>::@getter::vEq
       setter: <testLibrary>::@setter::vEq
-    hasInitializer vNotEq
+    hasImplicitType hasInitializer isOriginDeclaration vNotEq
       reference: <testLibrary>::@topLevelVariable::vNotEq
       firstFragment: #F2
       type: bool
       getter: <testLibrary>::@getter::vNotEq
       setter: <testLibrary>::@setter::vNotEq
   getters
-    synthetic static vEq
+    synthetic static isOriginVariable vEq
       reference: <testLibrary>::@getter::vEq
       firstFragment: #F3
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vEq
-    synthetic static vNotEq
+    synthetic static isOriginVariable vNotEq
       reference: <testLibrary>::@getter::vNotEq
       firstFragment: #F4
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vNotEq
   setters
-    synthetic static vEq
+    synthetic static isOriginVariable vEq
       reference: <testLibrary>::@setter::vEq
       firstFragment: #F5
       formalParameters
@@ -2501,7 +2498,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vEq
-    synthetic static vNotEq
+    synthetic static isOriginVariable vNotEq
       reference: <testLibrary>::@setter::vNotEq
       firstFragment: #F7
       formalParameters
@@ -2525,52 +2522,56 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::b
       setters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::b
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::b::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer b
+    hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F5
       formalParameters
@@ -2579,7 +2580,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F7
       formalParameters
@@ -2602,32 +2603,34 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F2 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
       setters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a]
       type: dynamic
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F2
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F3
       formalParameters
@@ -2652,72 +2655,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b0 (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F2 hasInitializer isOriginDeclaration b0 (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::b0
-        #F3 hasInitializer b1 (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F3 hasInitializer isOriginDeclaration b1 (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::b1
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F5 synthetic b0 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F5 synthetic isOriginVariable b0 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::b0
-        #F6 synthetic b1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F6 synthetic isOriginVariable b1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::b1
       setters
-        #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F9 synthetic b0 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F9 synthetic isOriginVariable b0 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@setter::b0
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@setter::b0::@formalParameter::value
-        #F11 synthetic b1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F11 synthetic isOriginVariable b1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@setter::b1
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@setter::b1::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: List<num>
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer b0
+    hasImplicitType hasInitializer isOriginDeclaration b0
       reference: <testLibrary>::@topLevelVariable::b0
       firstFragment: #F2
       type: num
       getter: <testLibrary>::@getter::b0
       setter: <testLibrary>::@setter::b0
-    hasInitializer b1
+    hasImplicitType hasInitializer isOriginDeclaration b1
       reference: <testLibrary>::@topLevelVariable::b1
       firstFragment: #F3
       type: num
       getter: <testLibrary>::@getter::b1
       setter: <testLibrary>::@setter::b1
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: List<num>
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b0
+    synthetic static isOriginVariable b0
       reference: <testLibrary>::@getter::b0
       firstFragment: #F5
       returnType: num
       variable: <testLibrary>::@topLevelVariable::b0
-    synthetic static b1
+    synthetic static isOriginVariable b1
       reference: <testLibrary>::@getter::b1
       firstFragment: #F6
       returnType: num
       variable: <testLibrary>::@topLevelVariable::b1
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F7
       formalParameters
@@ -2726,7 +2729,7 @@
           type: List<num>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b0
+    synthetic static isOriginVariable b0
       reference: <testLibrary>::@setter::b0
       firstFragment: #F9
       formalParameters
@@ -2735,7 +2738,7 @@
           type: num
       returnType: void
       variable: <testLibrary>::@topLevelVariable::b0
-    synthetic static b1
+    synthetic static isOriginVariable b1
       reference: <testLibrary>::@setter::b1
       firstFragment: #F11
       formalParameters
@@ -2766,32 +2769,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -2820,29 +2823,29 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::f::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer x (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F7 hasInitializer isOriginDeclaration x (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::x
       setters
-        #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::x
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
@@ -2852,24 +2855,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer f
+        hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::f
           setter: <testLibrary>::@class::C::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@setter::f
           firstFragment: #F5
           formalParameters
@@ -2879,20 +2882,20 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::f
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F7
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F9
       formalParameters
@@ -2924,32 +2927,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -2980,32 +2983,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -3034,29 +3037,29 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 hasInitializer f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::C::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::C::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::f::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer x (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F7 hasInitializer isOriginDeclaration x (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F8 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::x
       setters
-        #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::x
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
@@ -3066,24 +3069,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        hasInitializer f
+        hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::C::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::C::@getter::f
           setter: <testLibrary>::@class::C::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::C::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::C::@setter::f
           firstFragment: #F5
           formalParameters
@@ -3093,20 +3096,20 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::f
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F7
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F8
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F9
       formalParameters
@@ -3138,32 +3141,32 @@
       libraryImports
         package:test/a.dart
       topLevelVariables
-        #F1 hasInitializer x (nameOffset:21) (firstTokenOffset:21) (offset:21)
+        #F1 hasInitializer isOriginDeclaration x (nameOffset:21) (firstTokenOffset:21) (offset:21)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F2 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@getter::x
       setters
-        #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+        #F3 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
           element: <testLibrary>::@setter::x
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@setter::x::@formalParameter::value
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F3
       formalParameters
@@ -3194,17 +3197,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::f
           setters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::f
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -3212,17 +3215,17 @@
         #F7 class B (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::B
           fields
-            #F8 hasInitializer t (nameOffset:44) (firstTokenOffset:44) (offset:44)
+            #F8 hasInitializer isOriginDeclaration t (nameOffset:44) (firstTokenOffset:44) (offset:44)
               element: <testLibrary>::@class::B::@field::t
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F10 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::B::@getter::t
           setters
-            #F11 synthetic t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F11 synthetic isOriginVariable t (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::B::@setter::t
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
@@ -3232,24 +3235,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        f
+        isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::f
           setter: <testLibrary>::@class::A::@setter::f
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@setter::f
           firstFragment: #F5
           formalParameters
@@ -3262,24 +3265,24 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       fields
-        static hasInitializer t
+        static hasImplicitType hasInitializer isOriginDeclaration t
           reference: <testLibrary>::@class::B::@field::t
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::B::@getter::t
           setter: <testLibrary>::@class::B::@setter::t
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic static t
+        synthetic static isOriginVariable t
           reference: <testLibrary>::@class::B::@getter::t
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@class::B::@field::t
       setters
-        synthetic static t
+        synthetic static isOriginVariable t
           reference: <testLibrary>::@class::B::@setter::t
           firstFragment: #F11
           formalParameters
@@ -3309,38 +3312,38 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 b (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F2 isOriginDeclaration b (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::C::@field::b
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@getter::b
           setters
-            #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::C::@setter::b
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
                   element: <testLibrary>::@class::C::@setter::b::@formalParameter::value
       topLevelVariables
-        #F7 c (nameOffset:24) (firstTokenOffset:24) (offset:24)
+        #F7 isOriginDeclaration c (nameOffset:24) (firstTokenOffset:24) (offset:24)
           element: <testLibrary>::@topLevelVariable::c
-        #F8 hasInitializer x (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F8 hasInitializer isOriginDeclaration x (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F9 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F9 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@getter::c
-        #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::x
       setters
-        #F11 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
+        #F11 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
           element: <testLibrary>::@setter::c
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F13 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F13 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@setter::x
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
@@ -3350,24 +3353,24 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::C::@field::b
           firstFragment: #F2
           type: bool
           getter: <testLibrary>::@class::C::@getter::b
           setter: <testLibrary>::@class::C::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::C::@getter::b
           firstFragment: #F4
           returnType: bool
           variable: <testLibrary>::@class::C::@field::b
       setters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::C::@setter::b
           firstFragment: #F5
           formalParameters
@@ -3377,31 +3380,31 @@
           returnType: void
           variable: <testLibrary>::@class::C::@field::b
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F7
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F8
       type: bool
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F9
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F10
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F11
       formalParameters
@@ -3410,7 +3413,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F13
       formalParameters
@@ -3441,17 +3444,17 @@
         #F1 class I (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::I
           fields
-            #F2 b (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F2 isOriginDeclaration b (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::I::@field::b
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
           getters
-            #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::I::@getter::b
           setters
-            #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::I::@setter::b
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -3459,26 +3462,26 @@
         #F7 class C (nameOffset:37) (firstTokenOffset:22) (offset:37)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F9 c (nameOffset:57) (firstTokenOffset:57) (offset:57)
+        #F9 isOriginDeclaration c (nameOffset:57) (firstTokenOffset:57) (offset:57)
           element: <testLibrary>::@topLevelVariable::c
-        #F10 hasInitializer x (nameOffset:64) (firstTokenOffset:64) (offset:64)
+        #F10 hasInitializer isOriginDeclaration x (nameOffset:64) (firstTokenOffset:64) (offset:64)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F11 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+        #F11 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
           element: <testLibrary>::@getter::c
-        #F12 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F12 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@getter::x
       setters
-        #F13 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+        #F13 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
           element: <testLibrary>::@setter::c
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@setter::c::@formalParameter::value
-        #F15 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F15 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@setter::x
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
@@ -3488,24 +3491,24 @@
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::I::@field::b
           firstFragment: #F2
           type: bool
           getter: <testLibrary>::@class::I::@getter::b
           setter: <testLibrary>::@class::I::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F3
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::I::@getter::b
           firstFragment: #F4
           returnType: bool
           variable: <testLibrary>::@class::I::@field::b
       setters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::I::@setter::b
           firstFragment: #F5
           formalParameters
@@ -3520,35 +3523,35 @@
       interfaces
         I
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
   topLevelVariables
-    c
+    isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F9
       type: C
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F10
       type: bool
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F11
       returnType: C
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F12
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F13
       formalParameters
@@ -3557,7 +3560,7 @@
           type: C
       returnType: void
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F15
       formalParameters
@@ -3588,17 +3591,17 @@
         #F1 class I (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::I
           fields
-            #F2 b (nameOffset:17) (firstTokenOffset:17) (offset:17)
+            #F2 isOriginDeclaration b (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: <testLibrary>::@class::I::@field::b
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::I::@constructor::new
               typeName: I
           getters
-            #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::I::@getter::b
           setters
-            #F5 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+            #F5 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@class::I::@setter::b
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
@@ -3606,17 +3609,17 @@
         #F7 class C (nameOffset:37) (firstTokenOffset:22) (offset:37)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
       topLevelVariables
-        #F9 hasInitializer x (nameOffset:74) (firstTokenOffset:74) (offset:74)
+        #F9 hasInitializer isOriginDeclaration x (nameOffset:74) (firstTokenOffset:74) (offset:74)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+        #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
           element: <testLibrary>::@getter::x
       setters
-        #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+        #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
           element: <testLibrary>::@setter::x
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
@@ -3629,24 +3632,24 @@
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
-        b
+        isOriginDeclaration b
           reference: <testLibrary>::@class::I::@field::b
           firstFragment: #F2
           type: bool
           getter: <testLibrary>::@class::I::@getter::b
           setter: <testLibrary>::@class::I::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::I::@constructor::new
           firstFragment: #F3
       getters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::I::@getter::b
           firstFragment: #F4
           returnType: bool
           variable: <testLibrary>::@class::I::@field::b
       setters
-        synthetic b
+        synthetic isOriginVariable b
           reference: <testLibrary>::@class::I::@setter::b
           firstFragment: #F5
           formalParameters
@@ -3661,24 +3664,24 @@
       interfaces
         I
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F9
       type: bool
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F10
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F11
       formalParameters
@@ -3716,7 +3719,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -3725,29 +3728,29 @@
         #F4 class B (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
             #F6 foo (nameOffset:52) (firstTokenOffset:52) (offset:52)
               element: <testLibrary>::@class::B::@method::foo
       topLevelVariables
-        #F7 hasInitializer x (nameOffset:70) (firstTokenOffset:70) (offset:70)
+        #F7 hasInitializer isOriginDeclaration x (nameOffset:70) (firstTokenOffset:70) (offset:70)
           element: <testLibrary>::@topLevelVariable::x
-        #F8 hasInitializer y (nameOffset:89) (firstTokenOffset:89) (offset:89)
+        #F8 hasInitializer isOriginDeclaration y (nameOffset:89) (firstTokenOffset:89) (offset:89)
           element: <testLibrary>::@topLevelVariable::y
       getters
-        #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+        #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
           element: <testLibrary>::@getter::x
-        #F10 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+        #F10 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
           element: <testLibrary>::@getter::y
       setters
-        #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+        #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
           element: <testLibrary>::@setter::x
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@setter::x::@formalParameter::value
-        #F13 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+        #F13 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
           element: <testLibrary>::@setter::y
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
@@ -3757,7 +3760,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -3770,7 +3773,7 @@
       firstFragment: #F4
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -3780,31 +3783,31 @@
           firstFragment: #F6
           returnType: int
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F7
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
-    hasInitializer y
+    hasImplicitType hasInitializer isOriginDeclaration y
       reference: <testLibrary>::@topLevelVariable::y
       firstFragment: #F8
       type: int
       getter: <testLibrary>::@getter::y
       setter: <testLibrary>::@setter::y
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@getter::y
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::y
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F11
       formalParameters
@@ -3813,7 +3816,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::x
-    synthetic static y
+    synthetic static isOriginVariable y
       reference: <testLibrary>::@setter::y
       firstFragment: #F13
       formalParameters
@@ -3844,132 +3847,132 @@
       libraryImports
         dart:async
       topLevelVariables
-        #F1 hasInitializer vFuture (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F1 hasInitializer isOriginDeclaration vFuture (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::vFuture
-        #F2 hasInitializer v_noParameters_inferredReturnType (nameOffset:60) (firstTokenOffset:60) (offset:60)
+        #F2 hasInitializer isOriginDeclaration v_noParameters_inferredReturnType (nameOffset:60) (firstTokenOffset:60) (offset:60)
           element: <testLibrary>::@topLevelVariable::v_noParameters_inferredReturnType
-        #F3 hasInitializer v_hasParameter_withType_inferredReturnType (nameOffset:110) (firstTokenOffset:110) (offset:110)
+        #F3 hasInitializer isOriginDeclaration v_hasParameter_withType_inferredReturnType (nameOffset:110) (firstTokenOffset:110) (offset:110)
           element: <testLibrary>::@topLevelVariable::v_hasParameter_withType_inferredReturnType
-        #F4 hasInitializer v_hasParameter_withType_returnParameter (nameOffset:177) (firstTokenOffset:177) (offset:177)
+        #F4 hasInitializer isOriginDeclaration v_hasParameter_withType_returnParameter (nameOffset:177) (firstTokenOffset:177) (offset:177)
           element: <testLibrary>::@topLevelVariable::v_hasParameter_withType_returnParameter
-        #F5 hasInitializer v_async_returnValue (nameOffset:240) (firstTokenOffset:240) (offset:240)
+        #F5 hasInitializer isOriginDeclaration v_async_returnValue (nameOffset:240) (firstTokenOffset:240) (offset:240)
           element: <testLibrary>::@topLevelVariable::v_async_returnValue
-        #F6 hasInitializer v_async_returnFuture (nameOffset:282) (firstTokenOffset:282) (offset:282)
+        #F6 hasInitializer isOriginDeclaration v_async_returnFuture (nameOffset:282) (firstTokenOffset:282) (offset:282)
           element: <testLibrary>::@topLevelVariable::v_async_returnFuture
       getters
-        #F7 synthetic vFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F7 synthetic isOriginVariable vFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::vFuture
-        #F8 synthetic v_noParameters_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+        #F8 synthetic isOriginVariable v_noParameters_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
           element: <testLibrary>::@getter::v_noParameters_inferredReturnType
-        #F9 synthetic v_hasParameter_withType_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
+        #F9 synthetic isOriginVariable v_hasParameter_withType_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
           element: <testLibrary>::@getter::v_hasParameter_withType_inferredReturnType
-        #F10 synthetic v_hasParameter_withType_returnParameter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:177)
+        #F10 synthetic isOriginVariable v_hasParameter_withType_returnParameter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:177)
           element: <testLibrary>::@getter::v_hasParameter_withType_returnParameter
-        #F11 synthetic v_async_returnValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:240)
+        #F11 synthetic isOriginVariable v_async_returnValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:240)
           element: <testLibrary>::@getter::v_async_returnValue
-        #F12 synthetic v_async_returnFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:282)
+        #F12 synthetic isOriginVariable v_async_returnFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:282)
           element: <testLibrary>::@getter::v_async_returnFuture
       setters
-        #F13 synthetic vFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F13 synthetic isOriginVariable vFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::vFuture
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::vFuture::@formalParameter::value
-        #F15 synthetic v_noParameters_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
+        #F15 synthetic isOriginVariable v_noParameters_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
           element: <testLibrary>::@setter::v_noParameters_inferredReturnType
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:60)
               element: <testLibrary>::@setter::v_noParameters_inferredReturnType::@formalParameter::value
-        #F17 synthetic v_hasParameter_withType_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
+        #F17 synthetic isOriginVariable v_hasParameter_withType_inferredReturnType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
           element: <testLibrary>::@setter::v_hasParameter_withType_inferredReturnType
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:110)
               element: <testLibrary>::@setter::v_hasParameter_withType_inferredReturnType::@formalParameter::value
-        #F19 synthetic v_hasParameter_withType_returnParameter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:177)
+        #F19 synthetic isOriginVariable v_hasParameter_withType_returnParameter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:177)
           element: <testLibrary>::@setter::v_hasParameter_withType_returnParameter
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:177)
               element: <testLibrary>::@setter::v_hasParameter_withType_returnParameter::@formalParameter::value
-        #F21 synthetic v_async_returnValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:240)
+        #F21 synthetic isOriginVariable v_async_returnValue (nameOffset:<null>) (firstTokenOffset:<null>) (offset:240)
           element: <testLibrary>::@setter::v_async_returnValue
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:240)
               element: <testLibrary>::@setter::v_async_returnValue::@formalParameter::value
-        #F23 synthetic v_async_returnFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:282)
+        #F23 synthetic isOriginVariable v_async_returnFuture (nameOffset:<null>) (firstTokenOffset:<null>) (offset:282)
           element: <testLibrary>::@setter::v_async_returnFuture
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:282)
               element: <testLibrary>::@setter::v_async_returnFuture::@formalParameter::value
   topLevelVariables
-    hasInitializer vFuture
+    hasImplicitType hasInitializer isOriginDeclaration vFuture
       reference: <testLibrary>::@topLevelVariable::vFuture
       firstFragment: #F1
       type: Future<int>
       getter: <testLibrary>::@getter::vFuture
       setter: <testLibrary>::@setter::vFuture
-    hasInitializer v_noParameters_inferredReturnType
+    hasImplicitType hasInitializer isOriginDeclaration v_noParameters_inferredReturnType
       reference: <testLibrary>::@topLevelVariable::v_noParameters_inferredReturnType
       firstFragment: #F2
       type: int Function()
       getter: <testLibrary>::@getter::v_noParameters_inferredReturnType
       setter: <testLibrary>::@setter::v_noParameters_inferredReturnType
-    hasInitializer v_hasParameter_withType_inferredReturnType
+    hasImplicitType hasInitializer isOriginDeclaration v_hasParameter_withType_inferredReturnType
       reference: <testLibrary>::@topLevelVariable::v_hasParameter_withType_inferredReturnType
       firstFragment: #F3
       type: int Function(String)
       getter: <testLibrary>::@getter::v_hasParameter_withType_inferredReturnType
       setter: <testLibrary>::@setter::v_hasParameter_withType_inferredReturnType
-    hasInitializer v_hasParameter_withType_returnParameter
+    hasImplicitType hasInitializer isOriginDeclaration v_hasParameter_withType_returnParameter
       reference: <testLibrary>::@topLevelVariable::v_hasParameter_withType_returnParameter
       firstFragment: #F4
       type: String Function(String)
       getter: <testLibrary>::@getter::v_hasParameter_withType_returnParameter
       setter: <testLibrary>::@setter::v_hasParameter_withType_returnParameter
-    hasInitializer v_async_returnValue
+    hasImplicitType hasInitializer isOriginDeclaration v_async_returnValue
       reference: <testLibrary>::@topLevelVariable::v_async_returnValue
       firstFragment: #F5
       type: Future<int> Function()
       getter: <testLibrary>::@getter::v_async_returnValue
       setter: <testLibrary>::@setter::v_async_returnValue
-    hasInitializer v_async_returnFuture
+    hasImplicitType hasInitializer isOriginDeclaration v_async_returnFuture
       reference: <testLibrary>::@topLevelVariable::v_async_returnFuture
       firstFragment: #F6
       type: Future<int> Function()
       getter: <testLibrary>::@getter::v_async_returnFuture
       setter: <testLibrary>::@setter::v_async_returnFuture
   getters
-    synthetic static vFuture
+    synthetic static isOriginVariable vFuture
       reference: <testLibrary>::@getter::vFuture
       firstFragment: #F7
       returnType: Future<int>
       variable: <testLibrary>::@topLevelVariable::vFuture
-    synthetic static v_noParameters_inferredReturnType
+    synthetic static isOriginVariable v_noParameters_inferredReturnType
       reference: <testLibrary>::@getter::v_noParameters_inferredReturnType
       firstFragment: #F8
       returnType: int Function()
       variable: <testLibrary>::@topLevelVariable::v_noParameters_inferredReturnType
-    synthetic static v_hasParameter_withType_inferredReturnType
+    synthetic static isOriginVariable v_hasParameter_withType_inferredReturnType
       reference: <testLibrary>::@getter::v_hasParameter_withType_inferredReturnType
       firstFragment: #F9
       returnType: int Function(String)
       variable: <testLibrary>::@topLevelVariable::v_hasParameter_withType_inferredReturnType
-    synthetic static v_hasParameter_withType_returnParameter
+    synthetic static isOriginVariable v_hasParameter_withType_returnParameter
       reference: <testLibrary>::@getter::v_hasParameter_withType_returnParameter
       firstFragment: #F10
       returnType: String Function(String)
       variable: <testLibrary>::@topLevelVariable::v_hasParameter_withType_returnParameter
-    synthetic static v_async_returnValue
+    synthetic static isOriginVariable v_async_returnValue
       reference: <testLibrary>::@getter::v_async_returnValue
       firstFragment: #F11
       returnType: Future<int> Function()
       variable: <testLibrary>::@topLevelVariable::v_async_returnValue
-    synthetic static v_async_returnFuture
+    synthetic static isOriginVariable v_async_returnFuture
       reference: <testLibrary>::@getter::v_async_returnFuture
       firstFragment: #F12
       returnType: Future<int> Function()
       variable: <testLibrary>::@topLevelVariable::v_async_returnFuture
   setters
-    synthetic static vFuture
+    synthetic static isOriginVariable vFuture
       reference: <testLibrary>::@setter::vFuture
       firstFragment: #F13
       formalParameters
@@ -3978,7 +3981,7 @@
           type: Future<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vFuture
-    synthetic static v_noParameters_inferredReturnType
+    synthetic static isOriginVariable v_noParameters_inferredReturnType
       reference: <testLibrary>::@setter::v_noParameters_inferredReturnType
       firstFragment: #F15
       formalParameters
@@ -3987,7 +3990,7 @@
           type: int Function()
       returnType: void
       variable: <testLibrary>::@topLevelVariable::v_noParameters_inferredReturnType
-    synthetic static v_hasParameter_withType_inferredReturnType
+    synthetic static isOriginVariable v_hasParameter_withType_inferredReturnType
       reference: <testLibrary>::@setter::v_hasParameter_withType_inferredReturnType
       firstFragment: #F17
       formalParameters
@@ -3996,7 +3999,7 @@
           type: int Function(String)
       returnType: void
       variable: <testLibrary>::@topLevelVariable::v_hasParameter_withType_inferredReturnType
-    synthetic static v_hasParameter_withType_returnParameter
+    synthetic static isOriginVariable v_hasParameter_withType_returnParameter
       reference: <testLibrary>::@setter::v_hasParameter_withType_returnParameter
       firstFragment: #F19
       formalParameters
@@ -4005,7 +4008,7 @@
           type: String Function(String)
       returnType: void
       variable: <testLibrary>::@topLevelVariable::v_hasParameter_withType_returnParameter
-    synthetic static v_async_returnValue
+    synthetic static isOriginVariable v_async_returnValue
       reference: <testLibrary>::@setter::v_async_returnValue
       firstFragment: #F21
       formalParameters
@@ -4014,7 +4017,7 @@
           type: Future<int> Function()
       returnType: void
       variable: <testLibrary>::@topLevelVariable::v_async_returnValue
-    synthetic static v_async_returnFuture
+    synthetic static isOriginVariable v_async_returnFuture
       reference: <testLibrary>::@setter::v_async_returnFuture
       firstFragment: #F23
       formalParameters
@@ -4038,32 +4041,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer v (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration v (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::v
       getters
-        #F2 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::v
       setters
-        #F3 synthetic v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable v (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::v
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::v::@formalParameter::value
   topLevelVariables
-    hasInitializer v
+    hasImplicitType hasInitializer isOriginDeclaration v
       reference: <testLibrary>::@topLevelVariable::v
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::v
       setter: <testLibrary>::@setter::v
   getters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@getter::v
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::v
   setters
-    synthetic static v
+    synthetic static isOriginVariable v
       reference: <testLibrary>::@setter::v
       firstFragment: #F3
       formalParameters
@@ -4088,22 +4091,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vHasTypeArgument (nameOffset:22) (firstTokenOffset:22) (offset:22)
+        #F1 hasInitializer isOriginDeclaration vHasTypeArgument (nameOffset:22) (firstTokenOffset:22) (offset:22)
           element: <testLibrary>::@topLevelVariable::vHasTypeArgument
-        #F2 hasInitializer vNoTypeArgument (nameOffset:55) (firstTokenOffset:55) (offset:55)
+        #F2 hasInitializer isOriginDeclaration vNoTypeArgument (nameOffset:55) (firstTokenOffset:55) (offset:55)
           element: <testLibrary>::@topLevelVariable::vNoTypeArgument
       getters
-        #F3 synthetic vHasTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F3 synthetic isOriginVariable vHasTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@getter::vHasTypeArgument
-        #F4 synthetic vNoTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+        #F4 synthetic isOriginVariable vNoTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
           element: <testLibrary>::@getter::vNoTypeArgument
       setters
-        #F5 synthetic vHasTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
+        #F5 synthetic isOriginVariable vHasTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
           element: <testLibrary>::@setter::vHasTypeArgument
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
               element: <testLibrary>::@setter::vHasTypeArgument::@formalParameter::value
-        #F7 synthetic vNoTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+        #F7 synthetic isOriginVariable vNoTypeArgument (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
           element: <testLibrary>::@setter::vNoTypeArgument
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
@@ -4115,31 +4118,31 @@
             #F10 T (nameOffset:4) (firstTokenOffset:4) (offset:4)
               element: #E0 T
   topLevelVariables
-    hasInitializer vHasTypeArgument
+    hasImplicitType hasInitializer isOriginDeclaration vHasTypeArgument
       reference: <testLibrary>::@topLevelVariable::vHasTypeArgument
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vHasTypeArgument
       setter: <testLibrary>::@setter::vHasTypeArgument
-    hasInitializer vNoTypeArgument
+    hasImplicitType hasInitializer isOriginDeclaration vNoTypeArgument
       reference: <testLibrary>::@topLevelVariable::vNoTypeArgument
       firstFragment: #F2
       type: dynamic
       getter: <testLibrary>::@getter::vNoTypeArgument
       setter: <testLibrary>::@setter::vNoTypeArgument
   getters
-    synthetic static vHasTypeArgument
+    synthetic static isOriginVariable vHasTypeArgument
       reference: <testLibrary>::@getter::vHasTypeArgument
       firstFragment: #F3
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vHasTypeArgument
-    synthetic static vNoTypeArgument
+    synthetic static isOriginVariable vNoTypeArgument
       reference: <testLibrary>::@getter::vNoTypeArgument
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::vNoTypeArgument
   setters
-    synthetic static vHasTypeArgument
+    synthetic static isOriginVariable vHasTypeArgument
       reference: <testLibrary>::@setter::vHasTypeArgument
       firstFragment: #F5
       formalParameters
@@ -4148,7 +4151,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vHasTypeArgument
-    synthetic static vNoTypeArgument
+    synthetic static isOriginVariable vNoTypeArgument
       reference: <testLibrary>::@setter::vNoTypeArgument
       firstFragment: #F7
       formalParameters
@@ -4181,22 +4184,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vOkArgumentType (nameOffset:29) (firstTokenOffset:29) (offset:29)
+        #F1 hasInitializer isOriginDeclaration vOkArgumentType (nameOffset:29) (firstTokenOffset:29) (offset:29)
           element: <testLibrary>::@topLevelVariable::vOkArgumentType
-        #F2 hasInitializer vWrongArgumentType (nameOffset:57) (firstTokenOffset:57) (offset:57)
+        #F2 hasInitializer isOriginDeclaration vWrongArgumentType (nameOffset:57) (firstTokenOffset:57) (offset:57)
           element: <testLibrary>::@topLevelVariable::vWrongArgumentType
       getters
-        #F3 synthetic vOkArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F3 synthetic isOriginVariable vOkArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@getter::vOkArgumentType
-        #F4 synthetic vWrongArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+        #F4 synthetic isOriginVariable vWrongArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
           element: <testLibrary>::@getter::vWrongArgumentType
       setters
-        #F5 synthetic vOkArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+        #F5 synthetic isOriginVariable vOkArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
           element: <testLibrary>::@setter::vOkArgumentType
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::vOkArgumentType::@formalParameter::value
-        #F7 synthetic vWrongArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+        #F7 synthetic isOriginVariable vWrongArgumentType (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
           element: <testLibrary>::@setter::vWrongArgumentType
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
@@ -4208,31 +4211,31 @@
             #F10 requiredPositional p (nameOffset:13) (firstTokenOffset:9) (offset:13)
               element: <testLibrary>::@function::f::@formalParameter::p
   topLevelVariables
-    hasInitializer vOkArgumentType
+    hasImplicitType hasInitializer isOriginDeclaration vOkArgumentType
       reference: <testLibrary>::@topLevelVariable::vOkArgumentType
       firstFragment: #F1
       type: String
       getter: <testLibrary>::@getter::vOkArgumentType
       setter: <testLibrary>::@setter::vOkArgumentType
-    hasInitializer vWrongArgumentType
+    hasImplicitType hasInitializer isOriginDeclaration vWrongArgumentType
       reference: <testLibrary>::@topLevelVariable::vWrongArgumentType
       firstFragment: #F2
       type: String
       getter: <testLibrary>::@getter::vWrongArgumentType
       setter: <testLibrary>::@setter::vWrongArgumentType
   getters
-    synthetic static vOkArgumentType
+    synthetic static isOriginVariable vOkArgumentType
       reference: <testLibrary>::@getter::vOkArgumentType
       firstFragment: #F3
       returnType: String
       variable: <testLibrary>::@topLevelVariable::vOkArgumentType
-    synthetic static vWrongArgumentType
+    synthetic static isOriginVariable vWrongArgumentType
       reference: <testLibrary>::@getter::vWrongArgumentType
       firstFragment: #F4
       returnType: String
       variable: <testLibrary>::@topLevelVariable::vWrongArgumentType
   setters
-    synthetic static vOkArgumentType
+    synthetic static isOriginVariable vOkArgumentType
       reference: <testLibrary>::@setter::vOkArgumentType
       firstFragment: #F5
       formalParameters
@@ -4241,7 +4244,7 @@
           type: String
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vOkArgumentType
-    synthetic static vWrongArgumentType
+    synthetic static isOriginVariable vWrongArgumentType
       reference: <testLibrary>::@setter::vWrongArgumentType
       firstFragment: #F7
       formalParameters
@@ -4292,21 +4295,21 @@
         #F1 class A (nameOffset:101) (firstTokenOffset:95) (offset:101)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer staticClassVariable (nameOffset:118) (firstTokenOffset:118) (offset:118)
+            #F2 hasInitializer isOriginDeclaration staticClassVariable (nameOffset:118) (firstTokenOffset:118) (offset:118)
               element: <testLibrary>::@class::A::@field::staticClassVariable
-            #F3 synthetic staticGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+            #F3 synthetic isOriginGetterSetter staticGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
               element: <testLibrary>::@class::A::@field::staticGetter
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:101)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 synthetic staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
+            #F5 synthetic isOriginVariable staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
               element: <testLibrary>::@class::A::@getter::staticClassVariable
-            #F6 staticGetter (nameOffset:160) (firstTokenOffset:145) (offset:160)
+            #F6 isOriginDeclaration staticGetter (nameOffset:160) (firstTokenOffset:145) (offset:160)
               element: <testLibrary>::@class::A::@getter::staticGetter
           setters
-            #F7 synthetic staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
+            #F7 synthetic isOriginVariable staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
               element: <testLibrary>::@class::A::@setter::staticClassVariable
               formalParameters
                 #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:118)
@@ -4323,89 +4326,89 @@
                 #F12 requiredPositional p (nameOffset:262) (firstTokenOffset:258) (offset:262)
                   element: <testLibrary>::@class::A::@method::instanceClassMethod::@formalParameter::p
       topLevelVariables
-        #F13 hasInitializer topLevelVariable (nameOffset:44) (firstTokenOffset:44) (offset:44)
+        #F13 hasInitializer isOriginDeclaration topLevelVariable (nameOffset:44) (firstTokenOffset:44) (offset:44)
           element: <testLibrary>::@topLevelVariable::topLevelVariable
-        #F14 synthetic topLevelGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+        #F14 synthetic isOriginGetterSetter topLevelGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
           element: <testLibrary>::@topLevelVariable::topLevelGetter
-        #F15 hasInitializer r_topLevelFunction (nameOffset:280) (firstTokenOffset:280) (offset:280)
+        #F15 hasInitializer isOriginDeclaration r_topLevelFunction (nameOffset:280) (firstTokenOffset:280) (offset:280)
           element: <testLibrary>::@topLevelVariable::r_topLevelFunction
-        #F16 hasInitializer r_topLevelVariable (nameOffset:323) (firstTokenOffset:323) (offset:323)
+        #F16 hasInitializer isOriginDeclaration r_topLevelVariable (nameOffset:323) (firstTokenOffset:323) (offset:323)
           element: <testLibrary>::@topLevelVariable::r_topLevelVariable
-        #F17 hasInitializer r_topLevelGetter (nameOffset:366) (firstTokenOffset:366) (offset:366)
+        #F17 hasInitializer isOriginDeclaration r_topLevelGetter (nameOffset:366) (firstTokenOffset:366) (offset:366)
           element: <testLibrary>::@topLevelVariable::r_topLevelGetter
-        #F18 hasInitializer r_staticClassVariable (nameOffset:405) (firstTokenOffset:405) (offset:405)
+        #F18 hasInitializer isOriginDeclaration r_staticClassVariable (nameOffset:405) (firstTokenOffset:405) (offset:405)
           element: <testLibrary>::@topLevelVariable::r_staticClassVariable
-        #F19 hasInitializer r_staticGetter (nameOffset:456) (firstTokenOffset:456) (offset:456)
+        #F19 hasInitializer isOriginDeclaration r_staticGetter (nameOffset:456) (firstTokenOffset:456) (offset:456)
           element: <testLibrary>::@topLevelVariable::r_staticGetter
-        #F20 hasInitializer r_staticClassMethod (nameOffset:493) (firstTokenOffset:493) (offset:493)
+        #F20 hasInitializer isOriginDeclaration r_staticClassMethod (nameOffset:493) (firstTokenOffset:493) (offset:493)
           element: <testLibrary>::@topLevelVariable::r_staticClassMethod
-        #F21 hasInitializer instanceOfA (nameOffset:540) (firstTokenOffset:540) (offset:540)
+        #F21 hasInitializer isOriginDeclaration instanceOfA (nameOffset:540) (firstTokenOffset:540) (offset:540)
           element: <testLibrary>::@topLevelVariable::instanceOfA
-        #F22 hasInitializer r_instanceClassMethod (nameOffset:567) (firstTokenOffset:567) (offset:567)
+        #F22 hasInitializer isOriginDeclaration r_instanceClassMethod (nameOffset:567) (firstTokenOffset:567) (offset:567)
           element: <testLibrary>::@topLevelVariable::r_instanceClassMethod
       getters
-        #F23 synthetic topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+        #F23 synthetic isOriginVariable topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
           element: <testLibrary>::@getter::topLevelVariable
-        #F24 topLevelGetter (nameOffset:74) (firstTokenOffset:66) (offset:74)
+        #F24 isOriginDeclaration topLevelGetter (nameOffset:74) (firstTokenOffset:66) (offset:74)
           element: <testLibrary>::@getter::topLevelGetter
-        #F25 synthetic r_topLevelFunction (nameOffset:<null>) (firstTokenOffset:<null>) (offset:280)
+        #F25 synthetic isOriginVariable r_topLevelFunction (nameOffset:<null>) (firstTokenOffset:<null>) (offset:280)
           element: <testLibrary>::@getter::r_topLevelFunction
-        #F26 synthetic r_topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:323)
+        #F26 synthetic isOriginVariable r_topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:323)
           element: <testLibrary>::@getter::r_topLevelVariable
-        #F27 synthetic r_topLevelGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:366)
+        #F27 synthetic isOriginVariable r_topLevelGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:366)
           element: <testLibrary>::@getter::r_topLevelGetter
-        #F28 synthetic r_staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:405)
+        #F28 synthetic isOriginVariable r_staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:405)
           element: <testLibrary>::@getter::r_staticClassVariable
-        #F29 synthetic r_staticGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:456)
+        #F29 synthetic isOriginVariable r_staticGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:456)
           element: <testLibrary>::@getter::r_staticGetter
-        #F30 synthetic r_staticClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:493)
+        #F30 synthetic isOriginVariable r_staticClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:493)
           element: <testLibrary>::@getter::r_staticClassMethod
-        #F31 synthetic instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:540)
+        #F31 synthetic isOriginVariable instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:540)
           element: <testLibrary>::@getter::instanceOfA
-        #F32 synthetic r_instanceClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:567)
+        #F32 synthetic isOriginVariable r_instanceClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:567)
           element: <testLibrary>::@getter::r_instanceClassMethod
       setters
-        #F33 synthetic topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+        #F33 synthetic isOriginVariable topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
           element: <testLibrary>::@setter::topLevelVariable
           formalParameters
             #F34 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@setter::topLevelVariable::@formalParameter::value
-        #F35 synthetic r_topLevelFunction (nameOffset:<null>) (firstTokenOffset:<null>) (offset:280)
+        #F35 synthetic isOriginVariable r_topLevelFunction (nameOffset:<null>) (firstTokenOffset:<null>) (offset:280)
           element: <testLibrary>::@setter::r_topLevelFunction
           formalParameters
             #F36 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:280)
               element: <testLibrary>::@setter::r_topLevelFunction::@formalParameter::value
-        #F37 synthetic r_topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:323)
+        #F37 synthetic isOriginVariable r_topLevelVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:323)
           element: <testLibrary>::@setter::r_topLevelVariable
           formalParameters
             #F38 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:323)
               element: <testLibrary>::@setter::r_topLevelVariable::@formalParameter::value
-        #F39 synthetic r_topLevelGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:366)
+        #F39 synthetic isOriginVariable r_topLevelGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:366)
           element: <testLibrary>::@setter::r_topLevelGetter
           formalParameters
             #F40 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:366)
               element: <testLibrary>::@setter::r_topLevelGetter::@formalParameter::value
-        #F41 synthetic r_staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:405)
+        #F41 synthetic isOriginVariable r_staticClassVariable (nameOffset:<null>) (firstTokenOffset:<null>) (offset:405)
           element: <testLibrary>::@setter::r_staticClassVariable
           formalParameters
             #F42 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:405)
               element: <testLibrary>::@setter::r_staticClassVariable::@formalParameter::value
-        #F43 synthetic r_staticGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:456)
+        #F43 synthetic isOriginVariable r_staticGetter (nameOffset:<null>) (firstTokenOffset:<null>) (offset:456)
           element: <testLibrary>::@setter::r_staticGetter
           formalParameters
             #F44 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:456)
               element: <testLibrary>::@setter::r_staticGetter::@formalParameter::value
-        #F45 synthetic r_staticClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:493)
+        #F45 synthetic isOriginVariable r_staticClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:493)
           element: <testLibrary>::@setter::r_staticClassMethod
           formalParameters
             #F46 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:493)
               element: <testLibrary>::@setter::r_staticClassMethod::@formalParameter::value
-        #F47 synthetic instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:540)
+        #F47 synthetic isOriginVariable instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:540)
           element: <testLibrary>::@setter::instanceOfA
           formalParameters
             #F48 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:540)
               element: <testLibrary>::@setter::instanceOfA::@formalParameter::value
-        #F49 synthetic r_instanceClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:567)
+        #F49 synthetic isOriginVariable r_instanceClassMethod (nameOffset:<null>) (firstTokenOffset:<null>) (offset:567)
           element: <testLibrary>::@setter::r_instanceClassMethod
           formalParameters
             #F50 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:567)
@@ -4421,34 +4424,34 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static hasInitializer staticClassVariable
+        static hasImplicitType hasInitializer isOriginDeclaration staticClassVariable
           reference: <testLibrary>::@class::A::@field::staticClassVariable
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::staticClassVariable
           setter: <testLibrary>::@class::A::@setter::staticClassVariable
-        synthetic static staticGetter
+        synthetic static isOriginGetterSetter staticGetter
           reference: <testLibrary>::@class::A::@field::staticGetter
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::staticGetter
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        synthetic static staticClassVariable
+        synthetic static isOriginVariable staticClassVariable
           reference: <testLibrary>::@class::A::@getter::staticClassVariable
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::staticClassVariable
-        static staticGetter
+        static isOriginDeclaration staticGetter
           reference: <testLibrary>::@class::A::@getter::staticGetter
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::staticGetter
       setters
-        synthetic static staticClassVariable
+        synthetic static isOriginVariable staticClassVariable
           reference: <testLibrary>::@class::A::@setter::staticClassVariable
           firstFragment: #F7
           formalParameters
@@ -4475,118 +4478,118 @@
               type: int
           returnType: String
   topLevelVariables
-    hasInitializer topLevelVariable
+    hasImplicitType hasInitializer isOriginDeclaration topLevelVariable
       reference: <testLibrary>::@topLevelVariable::topLevelVariable
       firstFragment: #F13
       type: int
       getter: <testLibrary>::@getter::topLevelVariable
       setter: <testLibrary>::@setter::topLevelVariable
-    synthetic topLevelGetter
+    synthetic isOriginGetterSetter topLevelGetter
       reference: <testLibrary>::@topLevelVariable::topLevelGetter
       firstFragment: #F14
       type: int
       getter: <testLibrary>::@getter::topLevelGetter
-    hasInitializer r_topLevelFunction
+    hasImplicitType hasInitializer isOriginDeclaration r_topLevelFunction
       reference: <testLibrary>::@topLevelVariable::r_topLevelFunction
       firstFragment: #F15
       type: String Function(int)
       getter: <testLibrary>::@getter::r_topLevelFunction
       setter: <testLibrary>::@setter::r_topLevelFunction
-    hasInitializer r_topLevelVariable
+    hasImplicitType hasInitializer isOriginDeclaration r_topLevelVariable
       reference: <testLibrary>::@topLevelVariable::r_topLevelVariable
       firstFragment: #F16
       type: int
       getter: <testLibrary>::@getter::r_topLevelVariable
       setter: <testLibrary>::@setter::r_topLevelVariable
-    hasInitializer r_topLevelGetter
+    hasImplicitType hasInitializer isOriginDeclaration r_topLevelGetter
       reference: <testLibrary>::@topLevelVariable::r_topLevelGetter
       firstFragment: #F17
       type: int
       getter: <testLibrary>::@getter::r_topLevelGetter
       setter: <testLibrary>::@setter::r_topLevelGetter
-    hasInitializer r_staticClassVariable
+    hasImplicitType hasInitializer isOriginDeclaration r_staticClassVariable
       reference: <testLibrary>::@topLevelVariable::r_staticClassVariable
       firstFragment: #F18
       type: int
       getter: <testLibrary>::@getter::r_staticClassVariable
       setter: <testLibrary>::@setter::r_staticClassVariable
-    hasInitializer r_staticGetter
+    hasImplicitType hasInitializer isOriginDeclaration r_staticGetter
       reference: <testLibrary>::@topLevelVariable::r_staticGetter
       firstFragment: #F19
       type: int
       getter: <testLibrary>::@getter::r_staticGetter
       setter: <testLibrary>::@setter::r_staticGetter
-    hasInitializer r_staticClassMethod
+    hasImplicitType hasInitializer isOriginDeclaration r_staticClassMethod
       reference: <testLibrary>::@topLevelVariable::r_staticClassMethod
       firstFragment: #F20
       type: String Function(int)
       getter: <testLibrary>::@getter::r_staticClassMethod
       setter: <testLibrary>::@setter::r_staticClassMethod
-    hasInitializer instanceOfA
+    hasImplicitType hasInitializer isOriginDeclaration instanceOfA
       reference: <testLibrary>::@topLevelVariable::instanceOfA
       firstFragment: #F21
       type: A
       getter: <testLibrary>::@getter::instanceOfA
       setter: <testLibrary>::@setter::instanceOfA
-    hasInitializer r_instanceClassMethod
+    hasImplicitType hasInitializer isOriginDeclaration r_instanceClassMethod
       reference: <testLibrary>::@topLevelVariable::r_instanceClassMethod
       firstFragment: #F22
       type: String Function(int)
       getter: <testLibrary>::@getter::r_instanceClassMethod
       setter: <testLibrary>::@setter::r_instanceClassMethod
   getters
-    synthetic static topLevelVariable
+    synthetic static isOriginVariable topLevelVariable
       reference: <testLibrary>::@getter::topLevelVariable
       firstFragment: #F23
       returnType: int
       variable: <testLibrary>::@topLevelVariable::topLevelVariable
-    static topLevelGetter
+    static isOriginDeclaration topLevelGetter
       reference: <testLibrary>::@getter::topLevelGetter
       firstFragment: #F24
       returnType: int
       variable: <testLibrary>::@topLevelVariable::topLevelGetter
-    synthetic static r_topLevelFunction
+    synthetic static isOriginVariable r_topLevelFunction
       reference: <testLibrary>::@getter::r_topLevelFunction
       firstFragment: #F25
       returnType: String Function(int)
       variable: <testLibrary>::@topLevelVariable::r_topLevelFunction
-    synthetic static r_topLevelVariable
+    synthetic static isOriginVariable r_topLevelVariable
       reference: <testLibrary>::@getter::r_topLevelVariable
       firstFragment: #F26
       returnType: int
       variable: <testLibrary>::@topLevelVariable::r_topLevelVariable
-    synthetic static r_topLevelGetter
+    synthetic static isOriginVariable r_topLevelGetter
       reference: <testLibrary>::@getter::r_topLevelGetter
       firstFragment: #F27
       returnType: int
       variable: <testLibrary>::@topLevelVariable::r_topLevelGetter
-    synthetic static r_staticClassVariable
+    synthetic static isOriginVariable r_staticClassVariable
       reference: <testLibrary>::@getter::r_staticClassVariable
       firstFragment: #F28
       returnType: int
       variable: <testLibrary>::@topLevelVariable::r_staticClassVariable
-    synthetic static r_staticGetter
+    synthetic static isOriginVariable r_staticGetter
       reference: <testLibrary>::@getter::r_staticGetter
       firstFragment: #F29
       returnType: int
       variable: <testLibrary>::@topLevelVariable::r_staticGetter
-    synthetic static r_staticClassMethod
+    synthetic static isOriginVariable r_staticClassMethod
       reference: <testLibrary>::@getter::r_staticClassMethod
       firstFragment: #F30
       returnType: String Function(int)
       variable: <testLibrary>::@topLevelVariable::r_staticClassMethod
-    synthetic static instanceOfA
+    synthetic static isOriginVariable instanceOfA
       reference: <testLibrary>::@getter::instanceOfA
       firstFragment: #F31
       returnType: A
       variable: <testLibrary>::@topLevelVariable::instanceOfA
-    synthetic static r_instanceClassMethod
+    synthetic static isOriginVariable r_instanceClassMethod
       reference: <testLibrary>::@getter::r_instanceClassMethod
       firstFragment: #F32
       returnType: String Function(int)
       variable: <testLibrary>::@topLevelVariable::r_instanceClassMethod
   setters
-    synthetic static topLevelVariable
+    synthetic static isOriginVariable topLevelVariable
       reference: <testLibrary>::@setter::topLevelVariable
       firstFragment: #F33
       formalParameters
@@ -4595,7 +4598,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::topLevelVariable
-    synthetic static r_topLevelFunction
+    synthetic static isOriginVariable r_topLevelFunction
       reference: <testLibrary>::@setter::r_topLevelFunction
       firstFragment: #F35
       formalParameters
@@ -4604,7 +4607,7 @@
           type: String Function(int)
       returnType: void
       variable: <testLibrary>::@topLevelVariable::r_topLevelFunction
-    synthetic static r_topLevelVariable
+    synthetic static isOriginVariable r_topLevelVariable
       reference: <testLibrary>::@setter::r_topLevelVariable
       firstFragment: #F37
       formalParameters
@@ -4613,7 +4616,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::r_topLevelVariable
-    synthetic static r_topLevelGetter
+    synthetic static isOriginVariable r_topLevelGetter
       reference: <testLibrary>::@setter::r_topLevelGetter
       firstFragment: #F39
       formalParameters
@@ -4622,7 +4625,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::r_topLevelGetter
-    synthetic static r_staticClassVariable
+    synthetic static isOriginVariable r_staticClassVariable
       reference: <testLibrary>::@setter::r_staticClassVariable
       firstFragment: #F41
       formalParameters
@@ -4631,7 +4634,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::r_staticClassVariable
-    synthetic static r_staticGetter
+    synthetic static isOriginVariable r_staticGetter
       reference: <testLibrary>::@setter::r_staticGetter
       firstFragment: #F43
       formalParameters
@@ -4640,7 +4643,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::r_staticGetter
-    synthetic static r_staticClassMethod
+    synthetic static isOriginVariable r_staticClassMethod
       reference: <testLibrary>::@setter::r_staticClassMethod
       firstFragment: #F45
       formalParameters
@@ -4649,7 +4652,7 @@
           type: String Function(int)
       returnType: void
       variable: <testLibrary>::@topLevelVariable::r_staticClassMethod
-    synthetic static instanceOfA
+    synthetic static isOriginVariable instanceOfA
       reference: <testLibrary>::@setter::instanceOfA
       firstFragment: #F47
       formalParameters
@@ -4658,7 +4661,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::instanceOfA
-    synthetic static r_instanceClassMethod
+    synthetic static isOriginVariable r_instanceClassMethod
       reference: <testLibrary>::@setter::r_instanceClassMethod
       firstFragment: #F49
       formalParameters
@@ -4699,17 +4702,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer a (nameOffset:23) (firstTokenOffset:23) (offset:23)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::A::@field::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@getter::a
           setters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@setter::a
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
@@ -4717,29 +4720,29 @@
         #F7 class B (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::B
           fields
-            #F8 hasInitializer b (nameOffset:57) (firstTokenOffset:57) (offset:57)
+            #F8 hasInitializer isOriginDeclaration b (nameOffset:57) (firstTokenOffset:57) (offset:57)
               element: <testLibrary>::@class::B::@field::b
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F10 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::B::@getter::b
           setters
-            #F11 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F11 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::B::@setter::b
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
                   element: <testLibrary>::@class::B::@setter::b::@formalParameter::value
       topLevelVariables
-        #F13 hasInitializer c (nameOffset:72) (firstTokenOffset:72) (offset:72)
+        #F13 hasInitializer isOriginDeclaration c (nameOffset:72) (firstTokenOffset:72) (offset:72)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F14 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+        #F14 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
           element: <testLibrary>::@getter::c
       setters
-        #F15 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+        #F15 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
           element: <testLibrary>::@setter::c
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
@@ -4749,24 +4752,26 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static hasInitializer a
+        static hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::a
           setter: <testLibrary>::@class::A::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::a
       setters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::A::@setter::a
           firstFragment: #F5
           formalParameters
@@ -4779,24 +4784,26 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       fields
-        static hasInitializer b
+        static hasImplicitType hasInitializer isOriginDeclaration b
           reference: <testLibrary>::@class::B::@field::b
           firstFragment: #F8
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
           type: dynamic
           getter: <testLibrary>::@class::B::@getter::b
           setter: <testLibrary>::@class::B::@setter::b
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@class::B::@getter::b
           firstFragment: #F10
           returnType: dynamic
           variable: <testLibrary>::@class::B::@field::b
       setters
-        synthetic static b
+        synthetic static isOriginVariable b
           reference: <testLibrary>::@class::B::@setter::b
           firstFragment: #F11
           formalParameters
@@ -4806,20 +4813,20 @@
           returnType: void
           variable: <testLibrary>::@class::B::@field::b
   topLevelVariables
-    hasInitializer c
+    hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F13
       type: dynamic
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F14
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F15
       formalParameters
@@ -4849,38 +4856,38 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer a (nameOffset:23) (firstTokenOffset:23) (offset:23)
+            #F2 hasInitializer isOriginDeclaration a (nameOffset:23) (firstTokenOffset:23) (offset:23)
               element: <testLibrary>::@class::A::@field::a
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@getter::a
           setters
-            #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@setter::a
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
                   element: <testLibrary>::@class::A::@setter::a::@formalParameter::value
       topLevelVariables
-        #F7 hasInitializer b (nameOffset:36) (firstTokenOffset:36) (offset:36)
+        #F7 hasInitializer isOriginDeclaration b (nameOffset:36) (firstTokenOffset:36) (offset:36)
           element: <testLibrary>::@topLevelVariable::b
-        #F8 hasInitializer c (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F8 hasInitializer isOriginDeclaration c (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::c
       getters
-        #F9 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F9 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@getter::b
-        #F10 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F10 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::c
       setters
-        #F11 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+        #F11 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
           element: <testLibrary>::@setter::b
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@setter::b::@formalParameter::value
-        #F13 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F13 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::c
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
@@ -4890,24 +4897,26 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        static hasInitializer a
+        static hasImplicitType hasInitializer isOriginDeclaration a
           reference: <testLibrary>::@class::A::@field::a
           firstFragment: #F2
+          typeInferenceError: dependencyCycle
+            arguments: [a, b]
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::a
           setter: <testLibrary>::@class::A::@setter::a
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::A::@getter::a
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::a
       setters
-        synthetic static a
+        synthetic static isOriginVariable a
           reference: <testLibrary>::@class::A::@setter::a
           firstFragment: #F5
           formalParameters
@@ -4917,31 +4926,33 @@
           returnType: void
           variable: <testLibrary>::@class::A::@field::a
   topLevelVariables
-    hasInitializer b
+    hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F7
+      typeInferenceError: dependencyCycle
+        arguments: [a, b]
       type: dynamic
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
-    hasInitializer c
+    hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F8
       type: dynamic
       getter: <testLibrary>::@getter::c
       setter: <testLibrary>::@setter::c
   getters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F9
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F10
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::c
   setters
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F11
       formalParameters
@@ -4950,7 +4961,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@setter::c
       firstFragment: #F13
       formalParameters
@@ -4976,61 +4987,67 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:6) (firstTokenOffset:6) (offset:6)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:6) (firstTokenOffset:6) (offset:6)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:19) (firstTokenOffset:19) (offset:19)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:19) (firstTokenOffset:19) (offset:19)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer c (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F3 hasInitializer isOriginDeclaration c (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::c
-        #F4 hasInitializer d (nameOffset:45) (firstTokenOffset:45) (offset:45)
+        #F4 hasInitializer isOriginDeclaration d (nameOffset:45) (firstTokenOffset:45) (offset:45)
           element: <testLibrary>::@topLevelVariable::d
       getters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
-        #F6 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
+        #F6 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
           element: <testLibrary>::@getter::b
-        #F7 synthetic c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F7 synthetic isOriginVariable c (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::c
-        #F8 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+        #F8 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
           element: <testLibrary>::@getter::d
   topLevelVariables
-    final hasInitializer a
+    final hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
+      typeInferenceError: dependencyCycle
+        arguments: [a, b, c]
       type: dynamic
       getter: <testLibrary>::@getter::a
-    final hasInitializer b
+    final hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
+      typeInferenceError: dependencyCycle
+        arguments: [a, b, c]
       type: dynamic
       getter: <testLibrary>::@getter::b
-    final hasInitializer c
+    final hasImplicitType hasInitializer isOriginDeclaration c
       reference: <testLibrary>::@topLevelVariable::c
       firstFragment: #F3
+      typeInferenceError: dependencyCycle
+        arguments: [a, b, c]
       type: dynamic
       getter: <testLibrary>::@getter::c
-    final hasInitializer d
+    final hasImplicitType hasInitializer isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F4
       type: dynamic
       getter: <testLibrary>::@getter::d
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F5
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F6
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static c
+    synthetic static isOriginVariable c
       reference: <testLibrary>::@getter::c
       firstFragment: #F7
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::c
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F8
       returnType: dynamic
@@ -5073,17 +5090,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
       topLevelVariables
-        #F3 hasInitializer a (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F3 hasInitializer isOriginDeclaration a (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::a
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::a
       setters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::a
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
@@ -5093,24 +5110,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F3
       type: A
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: A
       variable: <testLibrary>::@topLevelVariable::a
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F5
       formalParameters
@@ -5135,22 +5152,22 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer s (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F1 hasInitializer isOriginDeclaration s (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::s
-        #F2 hasInitializer h (nameOffset:49) (firstTokenOffset:49) (offset:49)
+        #F2 hasInitializer isOriginDeclaration h (nameOffset:49) (firstTokenOffset:49) (offset:49)
           element: <testLibrary>::@topLevelVariable::h
       getters
-        #F3 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F3 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::s
-        #F4 synthetic h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F4 synthetic isOriginVariable h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@getter::h
       setters
-        #F5 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F5 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::s
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::s::@formalParameter::value
-        #F7 synthetic h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+        #F7 synthetic isOriginVariable h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
           element: <testLibrary>::@setter::h
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
@@ -5159,31 +5176,31 @@
         #F9 f (nameOffset:8) (firstTokenOffset:0) (offset:8)
           element: <testLibrary>::@function::f
   topLevelVariables
-    hasInitializer s
+    hasImplicitType hasInitializer isOriginDeclaration s
       reference: <testLibrary>::@topLevelVariable::s
       firstFragment: #F1
       type: String
       getter: <testLibrary>::@getter::s
       setter: <testLibrary>::@setter::s
-    hasInitializer h
+    hasImplicitType hasInitializer isOriginDeclaration h
       reference: <testLibrary>::@topLevelVariable::h
       firstFragment: #F2
       type: int
       getter: <testLibrary>::@getter::h
       setter: <testLibrary>::@setter::h
   getters
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@getter::s
       firstFragment: #F3
       returnType: String
       variable: <testLibrary>::@topLevelVariable::s
-    synthetic static h
+    synthetic static isOriginVariable h
       reference: <testLibrary>::@getter::h
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::h
   setters
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@setter::s
       firstFragment: #F5
       formalParameters
@@ -5192,7 +5209,7 @@
           type: String
       returnType: void
       variable: <testLibrary>::@topLevelVariable::s
-    synthetic static h
+    synthetic static isOriginVariable h
       reference: <testLibrary>::@setter::h
       firstFragment: #F7
       formalParameters
@@ -5222,72 +5239,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 d (nameOffset:8) (firstTokenOffset:8) (offset:8)
+        #F1 isOriginDeclaration d (nameOffset:8) (firstTokenOffset:8) (offset:8)
           element: <testLibrary>::@topLevelVariable::d
-        #F2 hasInitializer s (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F2 hasInitializer isOriginDeclaration s (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::s
-        #F3 hasInitializer h (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F3 hasInitializer isOriginDeclaration h (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::h
       getters
-        #F4 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F4 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@getter::d
-        #F5 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F5 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::s
-        #F6 synthetic h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F6 synthetic isOriginVariable h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::h
       setters
-        #F7 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
+        #F7 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
           element: <testLibrary>::@setter::d
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:8)
               element: <testLibrary>::@setter::d::@formalParameter::value
-        #F9 synthetic s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F9 synthetic isOriginVariable s (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::s
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@setter::s::@formalParameter::value
-        #F11 synthetic h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F11 synthetic isOriginVariable h (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@setter::h
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@setter::h::@formalParameter::value
   topLevelVariables
-    d
+    isOriginDeclaration d
       reference: <testLibrary>::@topLevelVariable::d
       firstFragment: #F1
       type: dynamic
       getter: <testLibrary>::@getter::d
       setter: <testLibrary>::@setter::d
-    hasInitializer s
+    hasImplicitType hasInitializer isOriginDeclaration s
       reference: <testLibrary>::@topLevelVariable::s
       firstFragment: #F2
       type: String
       getter: <testLibrary>::@getter::s
       setter: <testLibrary>::@setter::s
-    hasInitializer h
+    hasImplicitType hasInitializer isOriginDeclaration h
       reference: <testLibrary>::@topLevelVariable::h
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::h
       setter: <testLibrary>::@setter::h
   getters
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@getter::d
       firstFragment: #F4
       returnType: dynamic
       variable: <testLibrary>::@topLevelVariable::d
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@getter::s
       firstFragment: #F5
       returnType: String
       variable: <testLibrary>::@topLevelVariable::s
-    synthetic static h
+    synthetic static isOriginVariable h
       reference: <testLibrary>::@getter::h
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::h
   setters
-    synthetic static d
+    synthetic static isOriginVariable d
       reference: <testLibrary>::@setter::d
       firstFragment: #F7
       formalParameters
@@ -5296,7 +5313,7 @@
           type: dynamic
       returnType: void
       variable: <testLibrary>::@topLevelVariable::d
-    synthetic static s
+    synthetic static isOriginVariable s
       reference: <testLibrary>::@setter::s
       firstFragment: #F9
       formalParameters
@@ -5305,7 +5322,7 @@
           type: String
       returnType: void
       variable: <testLibrary>::@topLevelVariable::s
-    synthetic static h
+    synthetic static isOriginVariable h
       reference: <testLibrary>::@setter::h
       firstFragment: #F11
       formalParameters
@@ -5329,52 +5346,52 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:17) (firstTokenOffset:17) (offset:17)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:17) (firstTokenOffset:17) (offset:17)
           element: <testLibrary>::@topLevelVariable::b
       getters
-        #F3 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F4 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F4 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@getter::b
       setters
-        #F5 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
+        #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
           element: <testLibrary>::@setter::b
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
               element: <testLibrary>::@setter::b::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: double
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer b
+    hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: bool
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F3
       returnType: double
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F4
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::b
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F5
       formalParameters
@@ -5383,7 +5400,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F7
       formalParameters
@@ -5437,92 +5454,92 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vObject (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vObject (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vObject
-        #F2 hasInitializer vNum (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F2 hasInitializer isOriginDeclaration vNum (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::vNum
-        #F3 hasInitializer vNumEmpty (nameOffset:64) (firstTokenOffset:64) (offset:64)
+        #F3 hasInitializer isOriginDeclaration vNumEmpty (nameOffset:64) (firstTokenOffset:64) (offset:64)
           element: <testLibrary>::@topLevelVariable::vNumEmpty
-        #F4 hasInitializer vInt (nameOffset:89) (firstTokenOffset:89) (offset:89)
+        #F4 hasInitializer isOriginDeclaration vInt (nameOffset:89) (firstTokenOffset:89) (offset:89)
           element: <testLibrary>::@topLevelVariable::vInt
       getters
-        #F5 synthetic vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vObject
-        #F6 synthetic vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F6 synthetic isOriginVariable vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::vNum
-        #F7 synthetic vNumEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F7 synthetic isOriginVariable vNumEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@getter::vNumEmpty
-        #F8 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+        #F8 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
           element: <testLibrary>::@getter::vInt
       setters
-        #F9 synthetic vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F9 synthetic isOriginVariable vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vObject
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vObject::@formalParameter::value
-        #F11 synthetic vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F11 synthetic isOriginVariable vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@setter::vNum
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@setter::vNum::@formalParameter::value
-        #F13 synthetic vNumEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
+        #F13 synthetic isOriginVariable vNumEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
           element: <testLibrary>::@setter::vNumEmpty
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@setter::vNumEmpty::@formalParameter::value
-        #F15 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+        #F15 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
           element: <testLibrary>::@setter::vInt
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@setter::vInt::@formalParameter::value
   topLevelVariables
-    hasInitializer vObject
+    hasImplicitType hasInitializer isOriginDeclaration vObject
       reference: <testLibrary>::@topLevelVariable::vObject
       firstFragment: #F1
       type: List<Object>
       getter: <testLibrary>::@getter::vObject
       setter: <testLibrary>::@setter::vObject
-    hasInitializer vNum
+    hasImplicitType hasInitializer isOriginDeclaration vNum
       reference: <testLibrary>::@topLevelVariable::vNum
       firstFragment: #F2
       type: List<num>
       getter: <testLibrary>::@getter::vNum
       setter: <testLibrary>::@setter::vNum
-    hasInitializer vNumEmpty
+    hasImplicitType hasInitializer isOriginDeclaration vNumEmpty
       reference: <testLibrary>::@topLevelVariable::vNumEmpty
       firstFragment: #F3
       type: List<num>
       getter: <testLibrary>::@getter::vNumEmpty
       setter: <testLibrary>::@setter::vNumEmpty
-    hasInitializer vInt
+    hasImplicitType hasInitializer isOriginDeclaration vInt
       reference: <testLibrary>::@topLevelVariable::vInt
       firstFragment: #F4
       type: List<int>
       getter: <testLibrary>::@getter::vInt
       setter: <testLibrary>::@setter::vInt
   getters
-    synthetic static vObject
+    synthetic static isOriginVariable vObject
       reference: <testLibrary>::@getter::vObject
       firstFragment: #F5
       returnType: List<Object>
       variable: <testLibrary>::@topLevelVariable::vObject
-    synthetic static vNum
+    synthetic static isOriginVariable vNum
       reference: <testLibrary>::@getter::vNum
       firstFragment: #F6
       returnType: List<num>
       variable: <testLibrary>::@topLevelVariable::vNum
-    synthetic static vNumEmpty
+    synthetic static isOriginVariable vNumEmpty
       reference: <testLibrary>::@getter::vNumEmpty
       firstFragment: #F7
       returnType: List<num>
       variable: <testLibrary>::@topLevelVariable::vNumEmpty
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@getter::vInt
       firstFragment: #F8
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::vInt
   setters
-    synthetic static vObject
+    synthetic static isOriginVariable vObject
       reference: <testLibrary>::@setter::vObject
       firstFragment: #F9
       formalParameters
@@ -5531,7 +5548,7 @@
           type: List<Object>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vObject
-    synthetic static vNum
+    synthetic static isOriginVariable vNum
       reference: <testLibrary>::@setter::vNum
       firstFragment: #F11
       formalParameters
@@ -5540,7 +5557,7 @@
           type: List<num>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNum
-    synthetic static vNumEmpty
+    synthetic static isOriginVariable vNumEmpty
       reference: <testLibrary>::@setter::vNumEmpty
       firstFragment: #F13
       formalParameters
@@ -5549,7 +5566,7 @@
           type: List<num>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNumEmpty
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@setter::vInt
       firstFragment: #F15
       formalParameters
@@ -5574,72 +5591,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vInt
-        #F2 hasInitializer vNum (nameOffset:26) (firstTokenOffset:26) (offset:26)
+        #F2 hasInitializer isOriginDeclaration vNum (nameOffset:26) (firstTokenOffset:26) (offset:26)
           element: <testLibrary>::@topLevelVariable::vNum
-        #F3 hasInitializer vObject (nameOffset:47) (firstTokenOffset:47) (offset:47)
+        #F3 hasInitializer isOriginDeclaration vObject (nameOffset:47) (firstTokenOffset:47) (offset:47)
           element: <testLibrary>::@topLevelVariable::vObject
       getters
-        #F4 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vInt
-        #F5 synthetic vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F5 synthetic isOriginVariable vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@getter::vNum
-        #F6 synthetic vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F6 synthetic isOriginVariable vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@getter::vObject
       setters
-        #F7 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vInt
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vInt::@formalParameter::value
-        #F9 synthetic vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+        #F9 synthetic isOriginVariable vNum (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
           element: <testLibrary>::@setter::vNum
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@setter::vNum::@formalParameter::value
-        #F11 synthetic vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+        #F11 synthetic isOriginVariable vObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
           element: <testLibrary>::@setter::vObject
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@setter::vObject::@formalParameter::value
   topLevelVariables
-    hasInitializer vInt
+    hasImplicitType hasInitializer isOriginDeclaration vInt
       reference: <testLibrary>::@topLevelVariable::vInt
       firstFragment: #F1
       type: List<int>
       getter: <testLibrary>::@getter::vInt
       setter: <testLibrary>::@setter::vInt
-    hasInitializer vNum
+    hasImplicitType hasInitializer isOriginDeclaration vNum
       reference: <testLibrary>::@topLevelVariable::vNum
       firstFragment: #F2
       type: List<num>
       getter: <testLibrary>::@getter::vNum
       setter: <testLibrary>::@setter::vNum
-    hasInitializer vObject
+    hasImplicitType hasInitializer isOriginDeclaration vObject
       reference: <testLibrary>::@topLevelVariable::vObject
       firstFragment: #F3
       type: List<Object>
       getter: <testLibrary>::@getter::vObject
       setter: <testLibrary>::@setter::vObject
   getters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@getter::vInt
       firstFragment: #F4
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vNum
+    synthetic static isOriginVariable vNum
       reference: <testLibrary>::@getter::vNum
       firstFragment: #F5
       returnType: List<num>
       variable: <testLibrary>::@topLevelVariable::vNum
-    synthetic static vObject
+    synthetic static isOriginVariable vObject
       reference: <testLibrary>::@getter::vObject
       firstFragment: #F6
       returnType: List<Object>
       variable: <testLibrary>::@topLevelVariable::vObject
   setters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@setter::vInt
       firstFragment: #F7
       formalParameters
@@ -5648,7 +5665,7 @@
           type: List<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vNum
+    synthetic static isOriginVariable vNum
       reference: <testLibrary>::@setter::vNum
       firstFragment: #F9
       formalParameters
@@ -5657,7 +5674,7 @@
           type: List<num>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNum
-    synthetic static vObject
+    synthetic static isOriginVariable vObject
       reference: <testLibrary>::@setter::vObject
       firstFragment: #F11
       formalParameters
@@ -5696,112 +5713,112 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vObjectObject (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vObjectObject (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vObjectObject
-        #F2 hasInitializer vComparableObject (nameOffset:50) (firstTokenOffset:50) (offset:50)
+        #F2 hasInitializer isOriginDeclaration vComparableObject (nameOffset:50) (firstTokenOffset:50) (offset:50)
           element: <testLibrary>::@topLevelVariable::vComparableObject
-        #F3 hasInitializer vNumString (nameOffset:109) (firstTokenOffset:109) (offset:109)
+        #F3 hasInitializer isOriginDeclaration vNumString (nameOffset:109) (firstTokenOffset:109) (offset:109)
           element: <testLibrary>::@topLevelVariable::vNumString
-        #F4 hasInitializer vNumStringEmpty (nameOffset:149) (firstTokenOffset:149) (offset:149)
+        #F4 hasInitializer isOriginDeclaration vNumStringEmpty (nameOffset:149) (firstTokenOffset:149) (offset:149)
           element: <testLibrary>::@topLevelVariable::vNumStringEmpty
-        #F5 hasInitializer vIntString (nameOffset:188) (firstTokenOffset:188) (offset:188)
+        #F5 hasInitializer isOriginDeclaration vIntString (nameOffset:188) (firstTokenOffset:188) (offset:188)
           element: <testLibrary>::@topLevelVariable::vIntString
       getters
-        #F6 synthetic vObjectObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F6 synthetic isOriginVariable vObjectObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vObjectObject
-        #F7 synthetic vComparableObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F7 synthetic isOriginVariable vComparableObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@getter::vComparableObject
-        #F8 synthetic vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
+        #F8 synthetic isOriginVariable vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
           element: <testLibrary>::@getter::vNumString
-        #F9 synthetic vNumStringEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:149)
+        #F9 synthetic isOriginVariable vNumStringEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:149)
           element: <testLibrary>::@getter::vNumStringEmpty
-        #F10 synthetic vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:188)
+        #F10 synthetic isOriginVariable vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:188)
           element: <testLibrary>::@getter::vIntString
       setters
-        #F11 synthetic vObjectObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F11 synthetic isOriginVariable vObjectObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vObjectObject
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vObjectObject::@formalParameter::value
-        #F13 synthetic vComparableObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F13 synthetic isOriginVariable vComparableObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@setter::vComparableObject
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@setter::vComparableObject::@formalParameter::value
-        #F15 synthetic vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
+        #F15 synthetic isOriginVariable vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
           element: <testLibrary>::@setter::vNumString
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
               element: <testLibrary>::@setter::vNumString::@formalParameter::value
-        #F17 synthetic vNumStringEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:149)
+        #F17 synthetic isOriginVariable vNumStringEmpty (nameOffset:<null>) (firstTokenOffset:<null>) (offset:149)
           element: <testLibrary>::@setter::vNumStringEmpty
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:149)
               element: <testLibrary>::@setter::vNumStringEmpty::@formalParameter::value
-        #F19 synthetic vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:188)
+        #F19 synthetic isOriginVariable vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:188)
           element: <testLibrary>::@setter::vIntString
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:188)
               element: <testLibrary>::@setter::vIntString::@formalParameter::value
   topLevelVariables
-    hasInitializer vObjectObject
+    hasImplicitType hasInitializer isOriginDeclaration vObjectObject
       reference: <testLibrary>::@topLevelVariable::vObjectObject
       firstFragment: #F1
       type: Map<Object, Object>
       getter: <testLibrary>::@getter::vObjectObject
       setter: <testLibrary>::@setter::vObjectObject
-    hasInitializer vComparableObject
+    hasImplicitType hasInitializer isOriginDeclaration vComparableObject
       reference: <testLibrary>::@topLevelVariable::vComparableObject
       firstFragment: #F2
       type: Map<Comparable<int>, Object>
       getter: <testLibrary>::@getter::vComparableObject
       setter: <testLibrary>::@setter::vComparableObject
-    hasInitializer vNumString
+    hasImplicitType hasInitializer isOriginDeclaration vNumString
       reference: <testLibrary>::@topLevelVariable::vNumString
       firstFragment: #F3
       type: Map<num, String>
       getter: <testLibrary>::@getter::vNumString
       setter: <testLibrary>::@setter::vNumString
-    hasInitializer vNumStringEmpty
+    hasImplicitType hasInitializer isOriginDeclaration vNumStringEmpty
       reference: <testLibrary>::@topLevelVariable::vNumStringEmpty
       firstFragment: #F4
       type: Map<num, String>
       getter: <testLibrary>::@getter::vNumStringEmpty
       setter: <testLibrary>::@setter::vNumStringEmpty
-    hasInitializer vIntString
+    hasImplicitType hasInitializer isOriginDeclaration vIntString
       reference: <testLibrary>::@topLevelVariable::vIntString
       firstFragment: #F5
       type: Map<int, String>
       getter: <testLibrary>::@getter::vIntString
       setter: <testLibrary>::@setter::vIntString
   getters
-    synthetic static vObjectObject
+    synthetic static isOriginVariable vObjectObject
       reference: <testLibrary>::@getter::vObjectObject
       firstFragment: #F6
       returnType: Map<Object, Object>
       variable: <testLibrary>::@topLevelVariable::vObjectObject
-    synthetic static vComparableObject
+    synthetic static isOriginVariable vComparableObject
       reference: <testLibrary>::@getter::vComparableObject
       firstFragment: #F7
       returnType: Map<Comparable<int>, Object>
       variable: <testLibrary>::@topLevelVariable::vComparableObject
-    synthetic static vNumString
+    synthetic static isOriginVariable vNumString
       reference: <testLibrary>::@getter::vNumString
       firstFragment: #F8
       returnType: Map<num, String>
       variable: <testLibrary>::@topLevelVariable::vNumString
-    synthetic static vNumStringEmpty
+    synthetic static isOriginVariable vNumStringEmpty
       reference: <testLibrary>::@getter::vNumStringEmpty
       firstFragment: #F9
       returnType: Map<num, String>
       variable: <testLibrary>::@topLevelVariable::vNumStringEmpty
-    synthetic static vIntString
+    synthetic static isOriginVariable vIntString
       reference: <testLibrary>::@getter::vIntString
       firstFragment: #F10
       returnType: Map<int, String>
       variable: <testLibrary>::@topLevelVariable::vIntString
   setters
-    synthetic static vObjectObject
+    synthetic static isOriginVariable vObjectObject
       reference: <testLibrary>::@setter::vObjectObject
       firstFragment: #F11
       formalParameters
@@ -5810,7 +5827,7 @@
           type: Map<Object, Object>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vObjectObject
-    synthetic static vComparableObject
+    synthetic static isOriginVariable vComparableObject
       reference: <testLibrary>::@setter::vComparableObject
       firstFragment: #F13
       formalParameters
@@ -5819,7 +5836,7 @@
           type: Map<Comparable<int>, Object>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vComparableObject
-    synthetic static vNumString
+    synthetic static isOriginVariable vNumString
       reference: <testLibrary>::@setter::vNumString
       firstFragment: #F15
       formalParameters
@@ -5828,7 +5845,7 @@
           type: Map<num, String>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNumString
-    synthetic static vNumStringEmpty
+    synthetic static isOriginVariable vNumStringEmpty
       reference: <testLibrary>::@setter::vNumStringEmpty
       firstFragment: #F17
       formalParameters
@@ -5837,7 +5854,7 @@
           type: Map<num, String>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNumStringEmpty
-    synthetic static vIntString
+    synthetic static isOriginVariable vIntString
       reference: <testLibrary>::@setter::vIntString
       firstFragment: #F19
       formalParameters
@@ -5862,72 +5879,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vIntString (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vIntString (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vIntString
-        #F2 hasInitializer vNumString (nameOffset:39) (firstTokenOffset:39) (offset:39)
+        #F2 hasInitializer isOriginDeclaration vNumString (nameOffset:39) (firstTokenOffset:39) (offset:39)
           element: <testLibrary>::@topLevelVariable::vNumString
-        #F3 hasInitializer vIntObject (nameOffset:76) (firstTokenOffset:76) (offset:76)
+        #F3 hasInitializer isOriginDeclaration vIntObject (nameOffset:76) (firstTokenOffset:76) (offset:76)
           element: <testLibrary>::@topLevelVariable::vIntObject
       getters
-        #F4 synthetic vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vIntString
-        #F5 synthetic vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F5 synthetic isOriginVariable vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@getter::vNumString
-        #F6 synthetic vIntObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+        #F6 synthetic isOriginVariable vIntObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
           element: <testLibrary>::@getter::vIntObject
       setters
-        #F7 synthetic vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vIntString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vIntString
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vIntString::@formalParameter::value
-        #F9 synthetic vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+        #F9 synthetic isOriginVariable vNumString (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
           element: <testLibrary>::@setter::vNumString
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@setter::vNumString::@formalParameter::value
-        #F11 synthetic vIntObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+        #F11 synthetic isOriginVariable vIntObject (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
           element: <testLibrary>::@setter::vIntObject
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@setter::vIntObject::@formalParameter::value
   topLevelVariables
-    hasInitializer vIntString
+    hasImplicitType hasInitializer isOriginDeclaration vIntString
       reference: <testLibrary>::@topLevelVariable::vIntString
       firstFragment: #F1
       type: Map<int, String>
       getter: <testLibrary>::@getter::vIntString
       setter: <testLibrary>::@setter::vIntString
-    hasInitializer vNumString
+    hasImplicitType hasInitializer isOriginDeclaration vNumString
       reference: <testLibrary>::@topLevelVariable::vNumString
       firstFragment: #F2
       type: Map<num, String>
       getter: <testLibrary>::@getter::vNumString
       setter: <testLibrary>::@setter::vNumString
-    hasInitializer vIntObject
+    hasImplicitType hasInitializer isOriginDeclaration vIntObject
       reference: <testLibrary>::@topLevelVariable::vIntObject
       firstFragment: #F3
       type: Map<int, Object>
       getter: <testLibrary>::@getter::vIntObject
       setter: <testLibrary>::@setter::vIntObject
   getters
-    synthetic static vIntString
+    synthetic static isOriginVariable vIntString
       reference: <testLibrary>::@getter::vIntString
       firstFragment: #F4
       returnType: Map<int, String>
       variable: <testLibrary>::@topLevelVariable::vIntString
-    synthetic static vNumString
+    synthetic static isOriginVariable vNumString
       reference: <testLibrary>::@getter::vNumString
       firstFragment: #F5
       returnType: Map<num, String>
       variable: <testLibrary>::@topLevelVariable::vNumString
-    synthetic static vIntObject
+    synthetic static isOriginVariable vIntObject
       reference: <testLibrary>::@getter::vIntObject
       firstFragment: #F6
       returnType: Map<int, Object>
       variable: <testLibrary>::@topLevelVariable::vIntObject
   setters
-    synthetic static vIntString
+    synthetic static isOriginVariable vIntString
       reference: <testLibrary>::@setter::vIntString
       firstFragment: #F7
       formalParameters
@@ -5936,7 +5953,7 @@
           type: Map<int, String>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIntString
-    synthetic static vNumString
+    synthetic static isOriginVariable vNumString
       reference: <testLibrary>::@setter::vNumString
       firstFragment: #F9
       formalParameters
@@ -5945,7 +5962,7 @@
           type: Map<num, String>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNumString
-    synthetic static vIntObject
+    synthetic static isOriginVariable vIntObject
       reference: <testLibrary>::@setter::vIntObject
       firstFragment: #F11
       formalParameters
@@ -5984,112 +6001,112 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer b (nameOffset:18) (firstTokenOffset:18) (offset:18)
+        #F2 hasInitializer isOriginDeclaration b (nameOffset:18) (firstTokenOffset:18) (offset:18)
           element: <testLibrary>::@topLevelVariable::b
-        #F3 hasInitializer vEq (nameOffset:32) (firstTokenOffset:32) (offset:32)
+        #F3 hasInitializer isOriginDeclaration vEq (nameOffset:32) (firstTokenOffset:32) (offset:32)
           element: <testLibrary>::@topLevelVariable::vEq
-        #F4 hasInitializer vAnd (nameOffset:50) (firstTokenOffset:50) (offset:50)
+        #F4 hasInitializer isOriginDeclaration vAnd (nameOffset:50) (firstTokenOffset:50) (offset:50)
           element: <testLibrary>::@topLevelVariable::vAnd
-        #F5 hasInitializer vOr (nameOffset:69) (firstTokenOffset:69) (offset:69)
+        #F5 hasInitializer isOriginDeclaration vOr (nameOffset:69) (firstTokenOffset:69) (offset:69)
           element: <testLibrary>::@topLevelVariable::vOr
       getters
-        #F6 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F6 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F7 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F7 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@getter::b
-        #F8 synthetic vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F8 synthetic isOriginVariable vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@getter::vEq
-        #F9 synthetic vAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F9 synthetic isOriginVariable vAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@getter::vAnd
-        #F10 synthetic vOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+        #F10 synthetic isOriginVariable vOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
           element: <testLibrary>::@getter::vOr
       setters
-        #F11 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F11 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F13 synthetic b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F13 synthetic isOriginVariable b (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@setter::b
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@setter::b::@formalParameter::value
-        #F15 synthetic vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+        #F15 synthetic isOriginVariable vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
           element: <testLibrary>::@setter::vEq
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@setter::vEq::@formalParameter::value
-        #F17 synthetic vAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F17 synthetic isOriginVariable vAnd (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@setter::vAnd
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@setter::vAnd::@formalParameter::value
-        #F19 synthetic vOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+        #F19 synthetic isOriginVariable vOr (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
           element: <testLibrary>::@setter::vOr
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@setter::vOr::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: bool
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer b
+    hasImplicitType hasInitializer isOriginDeclaration b
       reference: <testLibrary>::@topLevelVariable::b
       firstFragment: #F2
       type: bool
       getter: <testLibrary>::@getter::b
       setter: <testLibrary>::@setter::b
-    hasInitializer vEq
+    hasImplicitType hasInitializer isOriginDeclaration vEq
       reference: <testLibrary>::@topLevelVariable::vEq
       firstFragment: #F3
       type: bool
       getter: <testLibrary>::@getter::vEq
       setter: <testLibrary>::@setter::vEq
-    hasInitializer vAnd
+    hasImplicitType hasInitializer isOriginDeclaration vAnd
       reference: <testLibrary>::@topLevelVariable::vAnd
       firstFragment: #F4
       type: bool
       getter: <testLibrary>::@getter::vAnd
       setter: <testLibrary>::@setter::vAnd
-    hasInitializer vOr
+    hasImplicitType hasInitializer isOriginDeclaration vOr
       reference: <testLibrary>::@topLevelVariable::vOr
       firstFragment: #F5
       type: bool
       getter: <testLibrary>::@getter::vOr
       setter: <testLibrary>::@setter::vOr
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F6
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@getter::b
       firstFragment: #F7
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static vEq
+    synthetic static isOriginVariable vEq
       reference: <testLibrary>::@getter::vEq
       firstFragment: #F8
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vEq
-    synthetic static vAnd
+    synthetic static isOriginVariable vAnd
       reference: <testLibrary>::@getter::vAnd
       firstFragment: #F9
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vAnd
-    synthetic static vOr
+    synthetic static isOriginVariable vOr
       reference: <testLibrary>::@getter::vOr
       firstFragment: #F10
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vOr
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F11
       formalParameters
@@ -6098,7 +6115,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static b
+    synthetic static isOriginVariable b
       reference: <testLibrary>::@setter::b
       firstFragment: #F13
       formalParameters
@@ -6107,7 +6124,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::b
-    synthetic static vEq
+    synthetic static isOriginVariable vEq
       reference: <testLibrary>::@setter::vEq
       firstFragment: #F15
       formalParameters
@@ -6116,7 +6133,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vEq
-    synthetic static vAnd
+    synthetic static isOriginVariable vAnd
       reference: <testLibrary>::@setter::vAnd
       firstFragment: #F17
       formalParameters
@@ -6125,7 +6142,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vAnd
-    synthetic static vOr
+    synthetic static isOriginVariable vOr
       reference: <testLibrary>::@setter::vOr
       firstFragment: #F19
       formalParameters
@@ -6175,7 +6192,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -6185,31 +6202,31 @@
                 #F4 requiredPositional p (nameOffset:25) (firstTokenOffset:21) (offset:25)
                   element: <testLibrary>::@class::A::@method::m::@formalParameter::p
       topLevelVariables
-        #F5 hasInitializer instanceOfA (nameOffset:43) (firstTokenOffset:43) (offset:43)
+        #F5 hasInitializer isOriginDeclaration instanceOfA (nameOffset:43) (firstTokenOffset:43) (offset:43)
           element: <testLibrary>::@topLevelVariable::instanceOfA
-        #F6 hasInitializer v1 (nameOffset:70) (firstTokenOffset:70) (offset:70)
+        #F6 hasInitializer isOriginDeclaration v1 (nameOffset:70) (firstTokenOffset:70) (offset:70)
           element: <testLibrary>::@topLevelVariable::v1
-        #F7 hasInitializer v2 (nameOffset:96) (firstTokenOffset:96) (offset:96)
+        #F7 hasInitializer isOriginDeclaration v2 (nameOffset:96) (firstTokenOffset:96) (offset:96)
           element: <testLibrary>::@topLevelVariable::v2
       getters
-        #F8 synthetic instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+        #F8 synthetic isOriginVariable instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
           element: <testLibrary>::@getter::instanceOfA
-        #F9 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+        #F9 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
           element: <testLibrary>::@getter::v1
-        #F10 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+        #F10 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
           element: <testLibrary>::@getter::v2
       setters
-        #F11 synthetic instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+        #F11 synthetic isOriginVariable instanceOfA (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
           element: <testLibrary>::@setter::instanceOfA
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@setter::instanceOfA::@formalParameter::value
-        #F13 synthetic v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+        #F13 synthetic isOriginVariable v1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
           element: <testLibrary>::@setter::v1
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@setter::v1::@formalParameter::value
-        #F15 synthetic v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
+        #F15 synthetic isOriginVariable v2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
           element: <testLibrary>::@setter::v2
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:96)
@@ -6219,7 +6236,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -6232,42 +6249,42 @@
               type: int
           returnType: String
   topLevelVariables
-    hasInitializer instanceOfA
+    hasImplicitType hasInitializer isOriginDeclaration instanceOfA
       reference: <testLibrary>::@topLevelVariable::instanceOfA
       firstFragment: #F5
       type: A
       getter: <testLibrary>::@getter::instanceOfA
       setter: <testLibrary>::@setter::instanceOfA
-    hasInitializer v1
+    hasImplicitType hasInitializer isOriginDeclaration v1
       reference: <testLibrary>::@topLevelVariable::v1
       firstFragment: #F6
       type: String
       getter: <testLibrary>::@getter::v1
       setter: <testLibrary>::@setter::v1
-    hasInitializer v2
+    hasImplicitType hasInitializer isOriginDeclaration v2
       reference: <testLibrary>::@topLevelVariable::v2
       firstFragment: #F7
       type: String
       getter: <testLibrary>::@getter::v2
       setter: <testLibrary>::@setter::v2
   getters
-    synthetic static instanceOfA
+    synthetic static isOriginVariable instanceOfA
       reference: <testLibrary>::@getter::instanceOfA
       firstFragment: #F8
       returnType: A
       variable: <testLibrary>::@topLevelVariable::instanceOfA
-    synthetic static v1
+    synthetic static isOriginVariable v1
       reference: <testLibrary>::@getter::v1
       firstFragment: #F9
       returnType: String
       variable: <testLibrary>::@topLevelVariable::v1
-    synthetic static v2
+    synthetic static isOriginVariable v2
       reference: <testLibrary>::@getter::v2
       firstFragment: #F10
       returnType: String
       variable: <testLibrary>::@topLevelVariable::v2
   setters
-    synthetic static instanceOfA
+    synthetic static isOriginVariable instanceOfA
       reference: <testLibrary>::@setter::instanceOfA
       firstFragment: #F11
       formalParameters
@@ -6276,7 +6293,7 @@
           type: A
       returnType: void
       variable: <testLibrary>::@topLevelVariable::instanceOfA
-    synthetic static v1
+    synthetic static isOriginVariable v1
       reference: <testLibrary>::@setter::v1
       firstFragment: #F13
       formalParameters
@@ -6285,7 +6302,7 @@
           type: String
       returnType: void
       variable: <testLibrary>::@topLevelVariable::v1
-    synthetic static v2
+    synthetic static isOriginVariable v2
       reference: <testLibrary>::@setter::v2
       firstFragment: #F15
       formalParameters
@@ -6318,232 +6335,232 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vModuloIntInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vModuloIntInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vModuloIntInt
-        #F2 hasInitializer vModuloIntDouble (nameOffset:31) (firstTokenOffset:31) (offset:31)
+        #F2 hasInitializer isOriginDeclaration vModuloIntDouble (nameOffset:31) (firstTokenOffset:31) (offset:31)
           element: <testLibrary>::@topLevelVariable::vModuloIntDouble
-        #F3 hasInitializer vMultiplyIntInt (nameOffset:63) (firstTokenOffset:63) (offset:63)
+        #F3 hasInitializer isOriginDeclaration vMultiplyIntInt (nameOffset:63) (firstTokenOffset:63) (offset:63)
           element: <testLibrary>::@topLevelVariable::vMultiplyIntInt
-        #F4 hasInitializer vMultiplyIntDouble (nameOffset:92) (firstTokenOffset:92) (offset:92)
+        #F4 hasInitializer isOriginDeclaration vMultiplyIntDouble (nameOffset:92) (firstTokenOffset:92) (offset:92)
           element: <testLibrary>::@topLevelVariable::vMultiplyIntDouble
-        #F5 hasInitializer vMultiplyDoubleInt (nameOffset:126) (firstTokenOffset:126) (offset:126)
+        #F5 hasInitializer isOriginDeclaration vMultiplyDoubleInt (nameOffset:126) (firstTokenOffset:126) (offset:126)
           element: <testLibrary>::@topLevelVariable::vMultiplyDoubleInt
-        #F6 hasInitializer vMultiplyDoubleDouble (nameOffset:160) (firstTokenOffset:160) (offset:160)
+        #F6 hasInitializer isOriginDeclaration vMultiplyDoubleDouble (nameOffset:160) (firstTokenOffset:160) (offset:160)
           element: <testLibrary>::@topLevelVariable::vMultiplyDoubleDouble
-        #F7 hasInitializer vDivideIntInt (nameOffset:199) (firstTokenOffset:199) (offset:199)
+        #F7 hasInitializer isOriginDeclaration vDivideIntInt (nameOffset:199) (firstTokenOffset:199) (offset:199)
           element: <testLibrary>::@topLevelVariable::vDivideIntInt
-        #F8 hasInitializer vDivideIntDouble (nameOffset:226) (firstTokenOffset:226) (offset:226)
+        #F8 hasInitializer isOriginDeclaration vDivideIntDouble (nameOffset:226) (firstTokenOffset:226) (offset:226)
           element: <testLibrary>::@topLevelVariable::vDivideIntDouble
-        #F9 hasInitializer vDivideDoubleInt (nameOffset:258) (firstTokenOffset:258) (offset:258)
+        #F9 hasInitializer isOriginDeclaration vDivideDoubleInt (nameOffset:258) (firstTokenOffset:258) (offset:258)
           element: <testLibrary>::@topLevelVariable::vDivideDoubleInt
-        #F10 hasInitializer vDivideDoubleDouble (nameOffset:290) (firstTokenOffset:290) (offset:290)
+        #F10 hasInitializer isOriginDeclaration vDivideDoubleDouble (nameOffset:290) (firstTokenOffset:290) (offset:290)
           element: <testLibrary>::@topLevelVariable::vDivideDoubleDouble
-        #F11 hasInitializer vFloorDivide (nameOffset:327) (firstTokenOffset:327) (offset:327)
+        #F11 hasInitializer isOriginDeclaration vFloorDivide (nameOffset:327) (firstTokenOffset:327) (offset:327)
           element: <testLibrary>::@topLevelVariable::vFloorDivide
       getters
-        #F12 synthetic vModuloIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F12 synthetic isOriginVariable vModuloIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vModuloIntInt
-        #F13 synthetic vModuloIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F13 synthetic isOriginVariable vModuloIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@getter::vModuloIntDouble
-        #F14 synthetic vMultiplyIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F14 synthetic isOriginVariable vMultiplyIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@getter::vMultiplyIntInt
-        #F15 synthetic vMultiplyIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
+        #F15 synthetic isOriginVariable vMultiplyIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
           element: <testLibrary>::@getter::vMultiplyIntDouble
-        #F16 synthetic vMultiplyDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:126)
+        #F16 synthetic isOriginVariable vMultiplyDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:126)
           element: <testLibrary>::@getter::vMultiplyDoubleInt
-        #F17 synthetic vMultiplyDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:160)
+        #F17 synthetic isOriginVariable vMultiplyDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:160)
           element: <testLibrary>::@getter::vMultiplyDoubleDouble
-        #F18 synthetic vDivideIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:199)
+        #F18 synthetic isOriginVariable vDivideIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:199)
           element: <testLibrary>::@getter::vDivideIntInt
-        #F19 synthetic vDivideIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:226)
+        #F19 synthetic isOriginVariable vDivideIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:226)
           element: <testLibrary>::@getter::vDivideIntDouble
-        #F20 synthetic vDivideDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
+        #F20 synthetic isOriginVariable vDivideDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
           element: <testLibrary>::@getter::vDivideDoubleInt
-        #F21 synthetic vDivideDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:290)
+        #F21 synthetic isOriginVariable vDivideDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:290)
           element: <testLibrary>::@getter::vDivideDoubleDouble
-        #F22 synthetic vFloorDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:327)
+        #F22 synthetic isOriginVariable vFloorDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:327)
           element: <testLibrary>::@getter::vFloorDivide
       setters
-        #F23 synthetic vModuloIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F23 synthetic isOriginVariable vModuloIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vModuloIntInt
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vModuloIntInt::@formalParameter::value
-        #F25 synthetic vModuloIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+        #F25 synthetic isOriginVariable vModuloIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
           element: <testLibrary>::@setter::vModuloIntDouble
           formalParameters
             #F26 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@setter::vModuloIntDouble::@formalParameter::value
-        #F27 synthetic vMultiplyIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F27 synthetic isOriginVariable vMultiplyIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@setter::vMultiplyIntInt
           formalParameters
             #F28 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@setter::vMultiplyIntInt::@formalParameter::value
-        #F29 synthetic vMultiplyIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
+        #F29 synthetic isOriginVariable vMultiplyIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
           element: <testLibrary>::@setter::vMultiplyIntDouble
           formalParameters
             #F30 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
               element: <testLibrary>::@setter::vMultiplyIntDouble::@formalParameter::value
-        #F31 synthetic vMultiplyDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:126)
+        #F31 synthetic isOriginVariable vMultiplyDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:126)
           element: <testLibrary>::@setter::vMultiplyDoubleInt
           formalParameters
             #F32 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:126)
               element: <testLibrary>::@setter::vMultiplyDoubleInt::@formalParameter::value
-        #F33 synthetic vMultiplyDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:160)
+        #F33 synthetic isOriginVariable vMultiplyDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:160)
           element: <testLibrary>::@setter::vMultiplyDoubleDouble
           formalParameters
             #F34 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:160)
               element: <testLibrary>::@setter::vMultiplyDoubleDouble::@formalParameter::value
-        #F35 synthetic vDivideIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:199)
+        #F35 synthetic isOriginVariable vDivideIntInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:199)
           element: <testLibrary>::@setter::vDivideIntInt
           formalParameters
             #F36 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:199)
               element: <testLibrary>::@setter::vDivideIntInt::@formalParameter::value
-        #F37 synthetic vDivideIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:226)
+        #F37 synthetic isOriginVariable vDivideIntDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:226)
           element: <testLibrary>::@setter::vDivideIntDouble
           formalParameters
             #F38 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:226)
               element: <testLibrary>::@setter::vDivideIntDouble::@formalParameter::value
-        #F39 synthetic vDivideDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
+        #F39 synthetic isOriginVariable vDivideDoubleInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
           element: <testLibrary>::@setter::vDivideDoubleInt
           formalParameters
             #F40 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:258)
               element: <testLibrary>::@setter::vDivideDoubleInt::@formalParameter::value
-        #F41 synthetic vDivideDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:290)
+        #F41 synthetic isOriginVariable vDivideDoubleDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:290)
           element: <testLibrary>::@setter::vDivideDoubleDouble
           formalParameters
             #F42 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:290)
               element: <testLibrary>::@setter::vDivideDoubleDouble::@formalParameter::value
-        #F43 synthetic vFloorDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:327)
+        #F43 synthetic isOriginVariable vFloorDivide (nameOffset:<null>) (firstTokenOffset:<null>) (offset:327)
           element: <testLibrary>::@setter::vFloorDivide
           formalParameters
             #F44 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:327)
               element: <testLibrary>::@setter::vFloorDivide::@formalParameter::value
   topLevelVariables
-    hasInitializer vModuloIntInt
+    hasImplicitType hasInitializer isOriginDeclaration vModuloIntInt
       reference: <testLibrary>::@topLevelVariable::vModuloIntInt
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vModuloIntInt
       setter: <testLibrary>::@setter::vModuloIntInt
-    hasInitializer vModuloIntDouble
+    hasImplicitType hasInitializer isOriginDeclaration vModuloIntDouble
       reference: <testLibrary>::@topLevelVariable::vModuloIntDouble
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::vModuloIntDouble
       setter: <testLibrary>::@setter::vModuloIntDouble
-    hasInitializer vMultiplyIntInt
+    hasImplicitType hasInitializer isOriginDeclaration vMultiplyIntInt
       reference: <testLibrary>::@topLevelVariable::vMultiplyIntInt
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vMultiplyIntInt
       setter: <testLibrary>::@setter::vMultiplyIntInt
-    hasInitializer vMultiplyIntDouble
+    hasImplicitType hasInitializer isOriginDeclaration vMultiplyIntDouble
       reference: <testLibrary>::@topLevelVariable::vMultiplyIntDouble
       firstFragment: #F4
       type: double
       getter: <testLibrary>::@getter::vMultiplyIntDouble
       setter: <testLibrary>::@setter::vMultiplyIntDouble
-    hasInitializer vMultiplyDoubleInt
+    hasImplicitType hasInitializer isOriginDeclaration vMultiplyDoubleInt
       reference: <testLibrary>::@topLevelVariable::vMultiplyDoubleInt
       firstFragment: #F5
       type: double
       getter: <testLibrary>::@getter::vMultiplyDoubleInt
       setter: <testLibrary>::@setter::vMultiplyDoubleInt
-    hasInitializer vMultiplyDoubleDouble
+    hasImplicitType hasInitializer isOriginDeclaration vMultiplyDoubleDouble
       reference: <testLibrary>::@topLevelVariable::vMultiplyDoubleDouble
       firstFragment: #F6
       type: double
       getter: <testLibrary>::@getter::vMultiplyDoubleDouble
       setter: <testLibrary>::@setter::vMultiplyDoubleDouble
-    hasInitializer vDivideIntInt
+    hasImplicitType hasInitializer isOriginDeclaration vDivideIntInt
       reference: <testLibrary>::@topLevelVariable::vDivideIntInt
       firstFragment: #F7
       type: double
       getter: <testLibrary>::@getter::vDivideIntInt
       setter: <testLibrary>::@setter::vDivideIntInt
-    hasInitializer vDivideIntDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDivideIntDouble
       reference: <testLibrary>::@topLevelVariable::vDivideIntDouble
       firstFragment: #F8
       type: double
       getter: <testLibrary>::@getter::vDivideIntDouble
       setter: <testLibrary>::@setter::vDivideIntDouble
-    hasInitializer vDivideDoubleInt
+    hasImplicitType hasInitializer isOriginDeclaration vDivideDoubleInt
       reference: <testLibrary>::@topLevelVariable::vDivideDoubleInt
       firstFragment: #F9
       type: double
       getter: <testLibrary>::@getter::vDivideDoubleInt
       setter: <testLibrary>::@setter::vDivideDoubleInt
-    hasInitializer vDivideDoubleDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDivideDoubleDouble
       reference: <testLibrary>::@topLevelVariable::vDivideDoubleDouble
       firstFragment: #F10
       type: double
       getter: <testLibrary>::@getter::vDivideDoubleDouble
       setter: <testLibrary>::@setter::vDivideDoubleDouble
-    hasInitializer vFloorDivide
+    hasImplicitType hasInitializer isOriginDeclaration vFloorDivide
       reference: <testLibrary>::@topLevelVariable::vFloorDivide
       firstFragment: #F11
       type: int
       getter: <testLibrary>::@getter::vFloorDivide
       setter: <testLibrary>::@setter::vFloorDivide
   getters
-    synthetic static vModuloIntInt
+    synthetic static isOriginVariable vModuloIntInt
       reference: <testLibrary>::@getter::vModuloIntInt
       firstFragment: #F12
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vModuloIntInt
-    synthetic static vModuloIntDouble
+    synthetic static isOriginVariable vModuloIntDouble
       reference: <testLibrary>::@getter::vModuloIntDouble
       firstFragment: #F13
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vModuloIntDouble
-    synthetic static vMultiplyIntInt
+    synthetic static isOriginVariable vMultiplyIntInt
       reference: <testLibrary>::@getter::vMultiplyIntInt
       firstFragment: #F14
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vMultiplyIntInt
-    synthetic static vMultiplyIntDouble
+    synthetic static isOriginVariable vMultiplyIntDouble
       reference: <testLibrary>::@getter::vMultiplyIntDouble
       firstFragment: #F15
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vMultiplyIntDouble
-    synthetic static vMultiplyDoubleInt
+    synthetic static isOriginVariable vMultiplyDoubleInt
       reference: <testLibrary>::@getter::vMultiplyDoubleInt
       firstFragment: #F16
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vMultiplyDoubleInt
-    synthetic static vMultiplyDoubleDouble
+    synthetic static isOriginVariable vMultiplyDoubleDouble
       reference: <testLibrary>::@getter::vMultiplyDoubleDouble
       firstFragment: #F17
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vMultiplyDoubleDouble
-    synthetic static vDivideIntInt
+    synthetic static isOriginVariable vDivideIntInt
       reference: <testLibrary>::@getter::vDivideIntInt
       firstFragment: #F18
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDivideIntInt
-    synthetic static vDivideIntDouble
+    synthetic static isOriginVariable vDivideIntDouble
       reference: <testLibrary>::@getter::vDivideIntDouble
       firstFragment: #F19
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDivideIntDouble
-    synthetic static vDivideDoubleInt
+    synthetic static isOriginVariable vDivideDoubleInt
       reference: <testLibrary>::@getter::vDivideDoubleInt
       firstFragment: #F20
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDivideDoubleInt
-    synthetic static vDivideDoubleDouble
+    synthetic static isOriginVariable vDivideDoubleDouble
       reference: <testLibrary>::@getter::vDivideDoubleDouble
       firstFragment: #F21
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDivideDoubleDouble
-    synthetic static vFloorDivide
+    synthetic static isOriginVariable vFloorDivide
       reference: <testLibrary>::@getter::vFloorDivide
       firstFragment: #F22
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vFloorDivide
   setters
-    synthetic static vModuloIntInt
+    synthetic static isOriginVariable vModuloIntInt
       reference: <testLibrary>::@setter::vModuloIntInt
       firstFragment: #F23
       formalParameters
@@ -6552,7 +6569,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vModuloIntInt
-    synthetic static vModuloIntDouble
+    synthetic static isOriginVariable vModuloIntDouble
       reference: <testLibrary>::@setter::vModuloIntDouble
       firstFragment: #F25
       formalParameters
@@ -6561,7 +6578,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vModuloIntDouble
-    synthetic static vMultiplyIntInt
+    synthetic static isOriginVariable vMultiplyIntInt
       reference: <testLibrary>::@setter::vMultiplyIntInt
       firstFragment: #F27
       formalParameters
@@ -6570,7 +6587,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMultiplyIntInt
-    synthetic static vMultiplyIntDouble
+    synthetic static isOriginVariable vMultiplyIntDouble
       reference: <testLibrary>::@setter::vMultiplyIntDouble
       firstFragment: #F29
       formalParameters
@@ -6579,7 +6596,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMultiplyIntDouble
-    synthetic static vMultiplyDoubleInt
+    synthetic static isOriginVariable vMultiplyDoubleInt
       reference: <testLibrary>::@setter::vMultiplyDoubleInt
       firstFragment: #F31
       formalParameters
@@ -6588,7 +6605,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMultiplyDoubleInt
-    synthetic static vMultiplyDoubleDouble
+    synthetic static isOriginVariable vMultiplyDoubleDouble
       reference: <testLibrary>::@setter::vMultiplyDoubleDouble
       firstFragment: #F33
       formalParameters
@@ -6597,7 +6614,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vMultiplyDoubleDouble
-    synthetic static vDivideIntInt
+    synthetic static isOriginVariable vDivideIntInt
       reference: <testLibrary>::@setter::vDivideIntInt
       firstFragment: #F35
       formalParameters
@@ -6606,7 +6623,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDivideIntInt
-    synthetic static vDivideIntDouble
+    synthetic static isOriginVariable vDivideIntDouble
       reference: <testLibrary>::@setter::vDivideIntDouble
       firstFragment: #F37
       formalParameters
@@ -6615,7 +6632,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDivideIntDouble
-    synthetic static vDivideDoubleInt
+    synthetic static isOriginVariable vDivideDoubleInt
       reference: <testLibrary>::@setter::vDivideDoubleInt
       firstFragment: #F39
       formalParameters
@@ -6624,7 +6641,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDivideDoubleInt
-    synthetic static vDivideDoubleDouble
+    synthetic static isOriginVariable vDivideDoubleDouble
       reference: <testLibrary>::@setter::vDivideDoubleDouble
       firstFragment: #F41
       formalParameters
@@ -6633,7 +6650,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDivideDoubleDouble
-    synthetic static vFloorDivide
+    synthetic static isOriginVariable vFloorDivide
       reference: <testLibrary>::@setter::vFloorDivide
       firstFragment: #F43
       formalParameters
@@ -6658,72 +6675,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer a (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration a (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::a
-        #F2 hasInitializer vEq (nameOffset:15) (firstTokenOffset:15) (offset:15)
+        #F2 hasInitializer isOriginDeclaration vEq (nameOffset:15) (firstTokenOffset:15) (offset:15)
           element: <testLibrary>::@topLevelVariable::vEq
-        #F3 hasInitializer vNotEq (nameOffset:46) (firstTokenOffset:46) (offset:46)
+        #F3 hasInitializer isOriginDeclaration vNotEq (nameOffset:46) (firstTokenOffset:46) (offset:46)
           element: <testLibrary>::@topLevelVariable::vNotEq
       getters
-        #F4 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::a
-        #F5 synthetic vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F5 synthetic isOriginVariable vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@getter::vEq
-        #F6 synthetic vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+        #F6 synthetic isOriginVariable vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
           element: <testLibrary>::@getter::vNotEq
       setters
-        #F7 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::a
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::a::@formalParameter::value
-        #F9 synthetic vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+        #F9 synthetic isOriginVariable vEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
           element: <testLibrary>::@setter::vEq
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@setter::vEq::@formalParameter::value
-        #F11 synthetic vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+        #F11 synthetic isOriginVariable vNotEq (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
           element: <testLibrary>::@setter::vNotEq
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@setter::vNotEq::@formalParameter::value
   topLevelVariables
-    hasInitializer a
+    hasImplicitType hasInitializer isOriginDeclaration a
       reference: <testLibrary>::@topLevelVariable::a
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::a
       setter: <testLibrary>::@setter::a
-    hasInitializer vEq
+    hasImplicitType hasInitializer isOriginDeclaration vEq
       reference: <testLibrary>::@topLevelVariable::vEq
       firstFragment: #F2
       type: bool
       getter: <testLibrary>::@getter::vEq
       setter: <testLibrary>::@setter::vEq
-    hasInitializer vNotEq
+    hasImplicitType hasInitializer isOriginDeclaration vNotEq
       reference: <testLibrary>::@topLevelVariable::vNotEq
       firstFragment: #F3
       type: bool
       getter: <testLibrary>::@getter::vNotEq
       setter: <testLibrary>::@setter::vNotEq
   getters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@getter::a
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static vEq
+    synthetic static isOriginVariable vEq
       reference: <testLibrary>::@getter::vEq
       firstFragment: #F5
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vEq
-    synthetic static vNotEq
+    synthetic static isOriginVariable vNotEq
       reference: <testLibrary>::@getter::vNotEq
       firstFragment: #F6
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vNotEq
   setters
-    synthetic static a
+    synthetic static isOriginVariable a
       reference: <testLibrary>::@setter::a
       firstFragment: #F7
       formalParameters
@@ -6732,7 +6749,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::a
-    synthetic static vEq
+    synthetic static isOriginVariable vEq
       reference: <testLibrary>::@setter::vEq
       firstFragment: #F9
       formalParameters
@@ -6741,7 +6758,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vEq
-    synthetic static vNotEq
+    synthetic static isOriginVariable vNotEq
       reference: <testLibrary>::@setter::vNotEq
       firstFragment: #F11
       formalParameters
@@ -6764,32 +6781,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer V (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration V (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::V
       getters
-        #F2 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::V
       setters
-        #F3 synthetic V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable V (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::V
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::V::@formalParameter::value
   topLevelVariables
-    hasInitializer V
+    hasImplicitType hasInitializer isOriginDeclaration V
       reference: <testLibrary>::@topLevelVariable::V
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::V
       setter: <testLibrary>::@setter::V
   getters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@getter::V
       firstFragment: #F2
       returnType: int
       variable: <testLibrary>::@topLevelVariable::V
   setters
-    synthetic static V
+    synthetic static isOriginVariable V
       reference: <testLibrary>::@setter::V
       firstFragment: #F3
       formalParameters
@@ -6817,132 +6834,132 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vInt
-        #F2 hasInitializer vDouble (nameOffset:18) (firstTokenOffset:18) (offset:18)
+        #F2 hasInitializer isOriginDeclaration vDouble (nameOffset:18) (firstTokenOffset:18) (offset:18)
           element: <testLibrary>::@topLevelVariable::vDouble
-        #F3 hasInitializer vIncInt (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F3 hasInitializer isOriginDeclaration vIncInt (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::vIncInt
-        #F4 hasInitializer vDecInt (nameOffset:59) (firstTokenOffset:59) (offset:59)
+        #F4 hasInitializer isOriginDeclaration vDecInt (nameOffset:59) (firstTokenOffset:59) (offset:59)
           element: <testLibrary>::@topLevelVariable::vDecInt
-        #F5 hasInitializer vIncDouble (nameOffset:81) (firstTokenOffset:81) (offset:81)
+        #F5 hasInitializer isOriginDeclaration vIncDouble (nameOffset:81) (firstTokenOffset:81) (offset:81)
           element: <testLibrary>::@topLevelVariable::vIncDouble
-        #F6 hasInitializer vDecDouble (nameOffset:109) (firstTokenOffset:109) (offset:109)
+        #F6 hasInitializer isOriginDeclaration vDecDouble (nameOffset:109) (firstTokenOffset:109) (offset:109)
           element: <testLibrary>::@topLevelVariable::vDecDouble
       getters
-        #F7 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vInt
-        #F8 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F8 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@getter::vDouble
-        #F9 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F9 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::vIncInt
-        #F10 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F10 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@getter::vDecInt
-        #F11 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
+        #F11 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
           element: <testLibrary>::@getter::vIncDouble
-        #F12 synthetic vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
+        #F12 synthetic isOriginVariable vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
           element: <testLibrary>::@getter::vDecDouble
       setters
-        #F13 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F13 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vInt
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vInt::@formalParameter::value
-        #F15 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F15 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@setter::vDouble
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@setter::vDouble::@formalParameter::value
-        #F17 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F17 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@setter::vIncInt
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@setter::vIncInt::@formalParameter::value
-        #F19 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F19 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@setter::vDecInt
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@setter::vDecInt::@formalParameter::value
-        #F21 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
+        #F21 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
           element: <testLibrary>::@setter::vIncDouble
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
               element: <testLibrary>::@setter::vIncDouble::@formalParameter::value
-        #F23 synthetic vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
+        #F23 synthetic isOriginVariable vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
           element: <testLibrary>::@setter::vDecDouble
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
               element: <testLibrary>::@setter::vDecDouble::@formalParameter::value
   topLevelVariables
-    hasInitializer vInt
+    hasImplicitType hasInitializer isOriginDeclaration vInt
       reference: <testLibrary>::@topLevelVariable::vInt
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vInt
       setter: <testLibrary>::@setter::vInt
-    hasInitializer vDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDouble
       reference: <testLibrary>::@topLevelVariable::vDouble
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::vDouble
       setter: <testLibrary>::@setter::vDouble
-    hasInitializer vIncInt
+    hasImplicitType hasInitializer isOriginDeclaration vIncInt
       reference: <testLibrary>::@topLevelVariable::vIncInt
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vIncInt
       setter: <testLibrary>::@setter::vIncInt
-    hasInitializer vDecInt
+    hasImplicitType hasInitializer isOriginDeclaration vDecInt
       reference: <testLibrary>::@topLevelVariable::vDecInt
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::vDecInt
       setter: <testLibrary>::@setter::vDecInt
-    hasInitializer vIncDouble
+    hasImplicitType hasInitializer isOriginDeclaration vIncDouble
       reference: <testLibrary>::@topLevelVariable::vIncDouble
       firstFragment: #F5
       type: double
       getter: <testLibrary>::@getter::vIncDouble
       setter: <testLibrary>::@setter::vIncDouble
-    hasInitializer vDecDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDecDouble
       reference: <testLibrary>::@topLevelVariable::vDecDouble
       firstFragment: #F6
       type: double
       getter: <testLibrary>::@getter::vDecDouble
       setter: <testLibrary>::@setter::vDecDouble
   getters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@getter::vInt
       firstFragment: #F7
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@getter::vDouble
       firstFragment: #F8
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@getter::vIncInt
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@getter::vDecInt
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vDecInt
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@getter::vIncDouble
       firstFragment: #F11
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecDouble
+    synthetic static isOriginVariable vDecDouble
       reference: <testLibrary>::@getter::vDecDouble
       firstFragment: #F12
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDecDouble
   setters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@setter::vInt
       firstFragment: #F13
       formalParameters
@@ -6951,7 +6968,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@setter::vDouble
       firstFragment: #F15
       formalParameters
@@ -6960,7 +6977,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@setter::vIncInt
       firstFragment: #F17
       formalParameters
@@ -6969,7 +6986,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@setter::vDecInt
       firstFragment: #F19
       formalParameters
@@ -6978,7 +6995,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDecInt
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@setter::vIncDouble
       firstFragment: #F21
       formalParameters
@@ -6987,7 +7004,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecDouble
+    synthetic static isOriginVariable vDecDouble
       reference: <testLibrary>::@setter::vDecDouble
       firstFragment: #F23
       formalParameters
@@ -7015,132 +7032,132 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vInt
-        #F2 hasInitializer vDouble (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F2 hasInitializer isOriginDeclaration vDouble (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::vDouble
-        #F3 hasInitializer vIncInt (nameOffset:41) (firstTokenOffset:41) (offset:41)
+        #F3 hasInitializer isOriginDeclaration vIncInt (nameOffset:41) (firstTokenOffset:41) (offset:41)
           element: <testLibrary>::@topLevelVariable::vIncInt
-        #F4 hasInitializer vDecInt (nameOffset:66) (firstTokenOffset:66) (offset:66)
+        #F4 hasInitializer isOriginDeclaration vDecInt (nameOffset:66) (firstTokenOffset:66) (offset:66)
           element: <testLibrary>::@topLevelVariable::vDecInt
-        #F5 hasInitializer vIncDouble (nameOffset:91) (firstTokenOffset:91) (offset:91)
+        #F5 hasInitializer isOriginDeclaration vIncDouble (nameOffset:91) (firstTokenOffset:91) (offset:91)
           element: <testLibrary>::@topLevelVariable::vIncDouble
-        #F6 hasInitializer vDecDouble (nameOffset:122) (firstTokenOffset:122) (offset:122)
+        #F6 hasInitializer isOriginDeclaration vDecDouble (nameOffset:122) (firstTokenOffset:122) (offset:122)
           element: <testLibrary>::@topLevelVariable::vDecDouble
       getters
-        #F7 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vInt
-        #F8 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F8 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::vDouble
-        #F9 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F9 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@getter::vIncInt
-        #F10 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+        #F10 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
           element: <testLibrary>::@getter::vDecInt
-        #F11 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+        #F11 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
           element: <testLibrary>::@getter::vIncDouble
-        #F12 synthetic vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+        #F12 synthetic isOriginVariable vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
           element: <testLibrary>::@getter::vDecDouble
       setters
-        #F13 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F13 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vInt
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vInt::@formalParameter::value
-        #F15 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F15 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@setter::vDouble
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@setter::vDouble::@formalParameter::value
-        #F17 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F17 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@setter::vIncInt
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@setter::vIncInt::@formalParameter::value
-        #F19 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+        #F19 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
           element: <testLibrary>::@setter::vDecInt
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@setter::vDecInt::@formalParameter::value
-        #F21 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+        #F21 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
           element: <testLibrary>::@setter::vIncDouble
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
               element: <testLibrary>::@setter::vIncDouble::@formalParameter::value
-        #F23 synthetic vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+        #F23 synthetic isOriginVariable vDecDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
           element: <testLibrary>::@setter::vDecDouble
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
               element: <testLibrary>::@setter::vDecDouble::@formalParameter::value
   topLevelVariables
-    hasInitializer vInt
+    hasImplicitType hasInitializer isOriginDeclaration vInt
       reference: <testLibrary>::@topLevelVariable::vInt
       firstFragment: #F1
       type: List<int>
       getter: <testLibrary>::@getter::vInt
       setter: <testLibrary>::@setter::vInt
-    hasInitializer vDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDouble
       reference: <testLibrary>::@topLevelVariable::vDouble
       firstFragment: #F2
       type: List<double>
       getter: <testLibrary>::@getter::vDouble
       setter: <testLibrary>::@setter::vDouble
-    hasInitializer vIncInt
+    hasImplicitType hasInitializer isOriginDeclaration vIncInt
       reference: <testLibrary>::@topLevelVariable::vIncInt
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vIncInt
       setter: <testLibrary>::@setter::vIncInt
-    hasInitializer vDecInt
+    hasImplicitType hasInitializer isOriginDeclaration vDecInt
       reference: <testLibrary>::@topLevelVariable::vDecInt
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::vDecInt
       setter: <testLibrary>::@setter::vDecInt
-    hasInitializer vIncDouble
+    hasImplicitType hasInitializer isOriginDeclaration vIncDouble
       reference: <testLibrary>::@topLevelVariable::vIncDouble
       firstFragment: #F5
       type: double
       getter: <testLibrary>::@getter::vIncDouble
       setter: <testLibrary>::@setter::vIncDouble
-    hasInitializer vDecDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDecDouble
       reference: <testLibrary>::@topLevelVariable::vDecDouble
       firstFragment: #F6
       type: double
       getter: <testLibrary>::@getter::vDecDouble
       setter: <testLibrary>::@setter::vDecDouble
   getters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@getter::vInt
       firstFragment: #F7
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@getter::vDouble
       firstFragment: #F8
       returnType: List<double>
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@getter::vIncInt
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@getter::vDecInt
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vDecInt
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@getter::vIncDouble
       firstFragment: #F11
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecDouble
+    synthetic static isOriginVariable vDecDouble
       reference: <testLibrary>::@getter::vDecDouble
       firstFragment: #F12
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDecDouble
   setters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@setter::vInt
       firstFragment: #F13
       formalParameters
@@ -7149,7 +7166,7 @@
           type: List<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@setter::vDouble
       firstFragment: #F15
       formalParameters
@@ -7158,7 +7175,7 @@
           type: List<double>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@setter::vIncInt
       firstFragment: #F17
       formalParameters
@@ -7167,7 +7184,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@setter::vDecInt
       firstFragment: #F19
       formalParameters
@@ -7176,7 +7193,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDecInt
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@setter::vIncDouble
       firstFragment: #F21
       formalParameters
@@ -7185,7 +7202,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecDouble
+    synthetic static isOriginVariable vDecDouble
       reference: <testLibrary>::@setter::vDecDouble
       firstFragment: #F23
       formalParameters
@@ -7213,132 +7230,132 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vInt
-        #F2 hasInitializer vDouble (nameOffset:18) (firstTokenOffset:18) (offset:18)
+        #F2 hasInitializer isOriginDeclaration vDouble (nameOffset:18) (firstTokenOffset:18) (offset:18)
           element: <testLibrary>::@topLevelVariable::vDouble
-        #F3 hasInitializer vIncInt (nameOffset:37) (firstTokenOffset:37) (offset:37)
+        #F3 hasInitializer isOriginDeclaration vIncInt (nameOffset:37) (firstTokenOffset:37) (offset:37)
           element: <testLibrary>::@topLevelVariable::vIncInt
-        #F4 hasInitializer vDecInt (nameOffset:59) (firstTokenOffset:59) (offset:59)
+        #F4 hasInitializer isOriginDeclaration vDecInt (nameOffset:59) (firstTokenOffset:59) (offset:59)
           element: <testLibrary>::@topLevelVariable::vDecInt::@def::0
-        #F5 hasInitializer vIncDouble (nameOffset:81) (firstTokenOffset:81) (offset:81)
+        #F5 hasInitializer isOriginDeclaration vIncDouble (nameOffset:81) (firstTokenOffset:81) (offset:81)
           element: <testLibrary>::@topLevelVariable::vIncDouble
-        #F6 hasInitializer vDecInt (nameOffset:109) (firstTokenOffset:109) (offset:109)
+        #F6 hasInitializer isOriginDeclaration vDecInt (nameOffset:109) (firstTokenOffset:109) (offset:109)
           element: <testLibrary>::@topLevelVariable::vDecInt::@def::1
       getters
-        #F7 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vInt
-        #F8 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F8 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@getter::vDouble
-        #F9 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F9 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@getter::vIncInt
-        #F10 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F10 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@getter::vDecInt::@def::0
-        #F11 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
+        #F11 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
           element: <testLibrary>::@getter::vIncDouble
-        #F12 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
+        #F12 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
           element: <testLibrary>::@getter::vDecInt::@def::1
       setters
-        #F13 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F13 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vInt
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vInt::@formalParameter::value
-        #F15 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
+        #F15 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
           element: <testLibrary>::@setter::vDouble
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
               element: <testLibrary>::@setter::vDouble::@formalParameter::value
-        #F17 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+        #F17 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
           element: <testLibrary>::@setter::vIncInt
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@setter::vIncInt::@formalParameter::value
-        #F19 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+        #F19 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
           element: <testLibrary>::@setter::vDecInt::@def::0
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@setter::vDecInt::@def::0::@formalParameter::value
-        #F21 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
+        #F21 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
           element: <testLibrary>::@setter::vIncDouble
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:81)
               element: <testLibrary>::@setter::vIncDouble::@formalParameter::value
-        #F23 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
+        #F23 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
           element: <testLibrary>::@setter::vDecInt::@def::1
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:109)
               element: <testLibrary>::@setter::vDecInt::@def::1::@formalParameter::value
   topLevelVariables
-    hasInitializer vInt
+    hasImplicitType hasInitializer isOriginDeclaration vInt
       reference: <testLibrary>::@topLevelVariable::vInt
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vInt
       setter: <testLibrary>::@setter::vInt
-    hasInitializer vDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDouble
       reference: <testLibrary>::@topLevelVariable::vDouble
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::vDouble
       setter: <testLibrary>::@setter::vDouble
-    hasInitializer vIncInt
+    hasImplicitType hasInitializer isOriginDeclaration vIncInt
       reference: <testLibrary>::@topLevelVariable::vIncInt
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vIncInt
       setter: <testLibrary>::@setter::vIncInt
-    hasInitializer vDecInt
+    hasImplicitType hasInitializer isOriginDeclaration vDecInt
       reference: <testLibrary>::@topLevelVariable::vDecInt::@def::0
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::vDecInt::@def::0
       setter: <testLibrary>::@setter::vDecInt::@def::0
-    hasInitializer vIncDouble
+    hasImplicitType hasInitializer isOriginDeclaration vIncDouble
       reference: <testLibrary>::@topLevelVariable::vIncDouble
       firstFragment: #F5
       type: double
       getter: <testLibrary>::@getter::vIncDouble
       setter: <testLibrary>::@setter::vIncDouble
-    hasInitializer vDecInt
+    hasImplicitType hasInitializer isOriginDeclaration vDecInt
       reference: <testLibrary>::@topLevelVariable::vDecInt::@def::1
       firstFragment: #F6
       type: double
       getter: <testLibrary>::@getter::vDecInt::@def::1
       setter: <testLibrary>::@setter::vDecInt::@def::1
   getters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@getter::vInt
       firstFragment: #F7
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@getter::vDouble
       firstFragment: #F8
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@getter::vIncInt
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@getter::vDecInt::@def::0
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vDecInt::@def::0
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@getter::vIncDouble
       firstFragment: #F11
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@getter::vDecInt::@def::1
       firstFragment: #F12
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDecInt::@def::1
   setters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@setter::vInt
       firstFragment: #F13
       formalParameters
@@ -7347,7 +7364,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@setter::vDouble
       firstFragment: #F15
       formalParameters
@@ -7356,7 +7373,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@setter::vIncInt
       firstFragment: #F17
       formalParameters
@@ -7365,7 +7382,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@setter::vDecInt::@def::0
       firstFragment: #F19
       formalParameters
@@ -7374,7 +7391,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDecInt::@def::0
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@setter::vIncDouble
       firstFragment: #F21
       formalParameters
@@ -7383,7 +7400,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@setter::vDecInt::@def::1
       firstFragment: #F23
       formalParameters
@@ -7429,132 +7446,132 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vInt
-        #F2 hasInitializer vDouble (nameOffset:20) (firstTokenOffset:20) (offset:20)
+        #F2 hasInitializer isOriginDeclaration vDouble (nameOffset:20) (firstTokenOffset:20) (offset:20)
           element: <testLibrary>::@topLevelVariable::vDouble
-        #F3 hasInitializer vIncInt (nameOffset:41) (firstTokenOffset:41) (offset:41)
+        #F3 hasInitializer isOriginDeclaration vIncInt (nameOffset:41) (firstTokenOffset:41) (offset:41)
           element: <testLibrary>::@topLevelVariable::vIncInt
-        #F4 hasInitializer vDecInt (nameOffset:66) (firstTokenOffset:66) (offset:66)
+        #F4 hasInitializer isOriginDeclaration vDecInt (nameOffset:66) (firstTokenOffset:66) (offset:66)
           element: <testLibrary>::@topLevelVariable::vDecInt::@def::0
-        #F5 hasInitializer vIncDouble (nameOffset:91) (firstTokenOffset:91) (offset:91)
+        #F5 hasInitializer isOriginDeclaration vIncDouble (nameOffset:91) (firstTokenOffset:91) (offset:91)
           element: <testLibrary>::@topLevelVariable::vIncDouble
-        #F6 hasInitializer vDecInt (nameOffset:122) (firstTokenOffset:122) (offset:122)
+        #F6 hasInitializer isOriginDeclaration vDecInt (nameOffset:122) (firstTokenOffset:122) (offset:122)
           element: <testLibrary>::@topLevelVariable::vDecInt::@def::1
       getters
-        #F7 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vInt
-        #F8 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F8 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@getter::vDouble
-        #F9 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F9 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@getter::vIncInt
-        #F10 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+        #F10 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
           element: <testLibrary>::@getter::vDecInt::@def::0
-        #F11 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+        #F11 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
           element: <testLibrary>::@getter::vIncDouble
-        #F12 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+        #F12 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
           element: <testLibrary>::@getter::vDecInt::@def::1
       setters
-        #F13 synthetic vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F13 synthetic isOriginVariable vInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vInt
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vInt::@formalParameter::value
-        #F15 synthetic vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
+        #F15 synthetic isOriginVariable vDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
           element: <testLibrary>::@setter::vDouble
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:20)
               element: <testLibrary>::@setter::vDouble::@formalParameter::value
-        #F17 synthetic vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
+        #F17 synthetic isOriginVariable vIncInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
           element: <testLibrary>::@setter::vIncInt
           formalParameters
             #F18 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:41)
               element: <testLibrary>::@setter::vIncInt::@formalParameter::value
-        #F19 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+        #F19 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
           element: <testLibrary>::@setter::vDecInt::@def::0
           formalParameters
             #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@setter::vDecInt::@def::0::@formalParameter::value
-        #F21 synthetic vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+        #F21 synthetic isOriginVariable vIncDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
           element: <testLibrary>::@setter::vIncDouble
           formalParameters
             #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
               element: <testLibrary>::@setter::vIncDouble::@formalParameter::value
-        #F23 synthetic vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+        #F23 synthetic isOriginVariable vDecInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
           element: <testLibrary>::@setter::vDecInt::@def::1
           formalParameters
             #F24 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
               element: <testLibrary>::@setter::vDecInt::@def::1::@formalParameter::value
   topLevelVariables
-    hasInitializer vInt
+    hasImplicitType hasInitializer isOriginDeclaration vInt
       reference: <testLibrary>::@topLevelVariable::vInt
       firstFragment: #F1
       type: List<int>
       getter: <testLibrary>::@getter::vInt
       setter: <testLibrary>::@setter::vInt
-    hasInitializer vDouble
+    hasImplicitType hasInitializer isOriginDeclaration vDouble
       reference: <testLibrary>::@topLevelVariable::vDouble
       firstFragment: #F2
       type: List<double>
       getter: <testLibrary>::@getter::vDouble
       setter: <testLibrary>::@setter::vDouble
-    hasInitializer vIncInt
+    hasImplicitType hasInitializer isOriginDeclaration vIncInt
       reference: <testLibrary>::@topLevelVariable::vIncInt
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vIncInt
       setter: <testLibrary>::@setter::vIncInt
-    hasInitializer vDecInt
+    hasImplicitType hasInitializer isOriginDeclaration vDecInt
       reference: <testLibrary>::@topLevelVariable::vDecInt::@def::0
       firstFragment: #F4
       type: int
       getter: <testLibrary>::@getter::vDecInt::@def::0
       setter: <testLibrary>::@setter::vDecInt::@def::0
-    hasInitializer vIncDouble
+    hasImplicitType hasInitializer isOriginDeclaration vIncDouble
       reference: <testLibrary>::@topLevelVariable::vIncDouble
       firstFragment: #F5
       type: double
       getter: <testLibrary>::@getter::vIncDouble
       setter: <testLibrary>::@setter::vIncDouble
-    hasInitializer vDecInt
+    hasImplicitType hasInitializer isOriginDeclaration vDecInt
       reference: <testLibrary>::@topLevelVariable::vDecInt::@def::1
       firstFragment: #F6
       type: double
       getter: <testLibrary>::@getter::vDecInt::@def::1
       setter: <testLibrary>::@setter::vDecInt::@def::1
   getters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@getter::vInt
       firstFragment: #F7
       returnType: List<int>
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@getter::vDouble
       firstFragment: #F8
       returnType: List<double>
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@getter::vIncInt
       firstFragment: #F9
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@getter::vDecInt::@def::0
       firstFragment: #F10
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vDecInt::@def::0
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@getter::vIncDouble
       firstFragment: #F11
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@getter::vDecInt::@def::1
       firstFragment: #F12
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vDecInt::@def::1
   setters
-    synthetic static vInt
+    synthetic static isOriginVariable vInt
       reference: <testLibrary>::@setter::vInt
       firstFragment: #F13
       formalParameters
@@ -7563,7 +7580,7 @@
           type: List<int>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vInt
-    synthetic static vDouble
+    synthetic static isOriginVariable vDouble
       reference: <testLibrary>::@setter::vDouble
       firstFragment: #F15
       formalParameters
@@ -7572,7 +7589,7 @@
           type: List<double>
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDouble
-    synthetic static vIncInt
+    synthetic static isOriginVariable vIncInt
       reference: <testLibrary>::@setter::vIncInt
       firstFragment: #F17
       formalParameters
@@ -7581,7 +7598,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncInt
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@setter::vDecInt::@def::0
       firstFragment: #F19
       formalParameters
@@ -7590,7 +7607,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vDecInt::@def::0
-    synthetic static vIncDouble
+    synthetic static isOriginVariable vIncDouble
       reference: <testLibrary>::@setter::vIncDouble
       firstFragment: #F21
       formalParameters
@@ -7599,7 +7616,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vIncDouble
-    synthetic static vDecInt
+    synthetic static isOriginVariable vDecInt
       reference: <testLibrary>::@setter::vDecInt::@def::1
       firstFragment: #F23
       formalParameters
@@ -7622,32 +7639,32 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vNot (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vNot (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vNot
       getters
-        #F2 synthetic vNot (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F2 synthetic isOriginVariable vNot (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vNot
       setters
-        #F3 synthetic vNot (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F3 synthetic isOriginVariable vNot (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vNot
           formalParameters
             #F4 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vNot::@formalParameter::value
   topLevelVariables
-    hasInitializer vNot
+    hasImplicitType hasInitializer isOriginDeclaration vNot
       reference: <testLibrary>::@topLevelVariable::vNot
       firstFragment: #F1
       type: bool
       getter: <testLibrary>::@getter::vNot
       setter: <testLibrary>::@setter::vNot
   getters
-    synthetic static vNot
+    synthetic static isOriginVariable vNot
       reference: <testLibrary>::@getter::vNot
       firstFragment: #F2
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vNot
   setters
-    synthetic static vNot
+    synthetic static isOriginVariable vNot
       reference: <testLibrary>::@setter::vNot
       firstFragment: #F3
       formalParameters
@@ -7672,72 +7689,72 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vNegateInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vNegateInt (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vNegateInt
-        #F2 hasInitializer vNegateDouble (nameOffset:25) (firstTokenOffset:25) (offset:25)
+        #F2 hasInitializer isOriginDeclaration vNegateDouble (nameOffset:25) (firstTokenOffset:25) (offset:25)
           element: <testLibrary>::@topLevelVariable::vNegateDouble
-        #F3 hasInitializer vComplement (nameOffset:51) (firstTokenOffset:51) (offset:51)
+        #F3 hasInitializer isOriginDeclaration vComplement (nameOffset:51) (firstTokenOffset:51) (offset:51)
           element: <testLibrary>::@topLevelVariable::vComplement
       getters
-        #F4 synthetic vNegateInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F4 synthetic isOriginVariable vNegateInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vNegateInt
-        #F5 synthetic vNegateDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F5 synthetic isOriginVariable vNegateDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@getter::vNegateDouble
-        #F6 synthetic vComplement (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+        #F6 synthetic isOriginVariable vComplement (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
           element: <testLibrary>::@getter::vComplement
       setters
-        #F7 synthetic vNegateInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F7 synthetic isOriginVariable vNegateInt (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vNegateInt
           formalParameters
             #F8 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vNegateInt::@formalParameter::value
-        #F9 synthetic vNegateDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+        #F9 synthetic isOriginVariable vNegateDouble (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
           element: <testLibrary>::@setter::vNegateDouble
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@setter::vNegateDouble::@formalParameter::value
-        #F11 synthetic vComplement (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+        #F11 synthetic isOriginVariable vComplement (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
           element: <testLibrary>::@setter::vComplement
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@setter::vComplement::@formalParameter::value
   topLevelVariables
-    hasInitializer vNegateInt
+    hasImplicitType hasInitializer isOriginDeclaration vNegateInt
       reference: <testLibrary>::@topLevelVariable::vNegateInt
       firstFragment: #F1
       type: int
       getter: <testLibrary>::@getter::vNegateInt
       setter: <testLibrary>::@setter::vNegateInt
-    hasInitializer vNegateDouble
+    hasImplicitType hasInitializer isOriginDeclaration vNegateDouble
       reference: <testLibrary>::@topLevelVariable::vNegateDouble
       firstFragment: #F2
       type: double
       getter: <testLibrary>::@getter::vNegateDouble
       setter: <testLibrary>::@setter::vNegateDouble
-    hasInitializer vComplement
+    hasImplicitType hasInitializer isOriginDeclaration vComplement
       reference: <testLibrary>::@topLevelVariable::vComplement
       firstFragment: #F3
       type: int
       getter: <testLibrary>::@getter::vComplement
       setter: <testLibrary>::@setter::vComplement
   getters
-    synthetic static vNegateInt
+    synthetic static isOriginVariable vNegateInt
       reference: <testLibrary>::@getter::vNegateInt
       firstFragment: #F4
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vNegateInt
-    synthetic static vNegateDouble
+    synthetic static isOriginVariable vNegateDouble
       reference: <testLibrary>::@getter::vNegateDouble
       firstFragment: #F5
       returnType: double
       variable: <testLibrary>::@topLevelVariable::vNegateDouble
-    synthetic static vComplement
+    synthetic static isOriginVariable vComplement
       reference: <testLibrary>::@getter::vComplement
       firstFragment: #F6
       returnType: int
       variable: <testLibrary>::@topLevelVariable::vComplement
   setters
-    synthetic static vNegateInt
+    synthetic static isOriginVariable vNegateInt
       reference: <testLibrary>::@setter::vNegateInt
       firstFragment: #F7
       formalParameters
@@ -7746,7 +7763,7 @@
           type: int
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNegateInt
-    synthetic static vNegateDouble
+    synthetic static isOriginVariable vNegateDouble
       reference: <testLibrary>::@setter::vNegateDouble
       firstFragment: #F9
       formalParameters
@@ -7755,7 +7772,7 @@
           type: double
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vNegateDouble
-    synthetic static vComplement
+    synthetic static isOriginVariable vComplement
       reference: <testLibrary>::@setter::vComplement
       firstFragment: #F11
       formalParameters
@@ -7787,17 +7804,17 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 d (nameOffset:21) (firstTokenOffset:21) (offset:21)
+            #F2 isOriginDeclaration d (nameOffset:21) (firstTokenOffset:21) (offset:21)
               element: <testLibrary>::@class::C::@field::d
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F4 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@getter::d
           setters
-            #F5 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
+            #F5 synthetic isOriginVariable d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
               element: <testLibrary>::@class::C::@setter::d
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
@@ -7805,50 +7822,50 @@
         #F7 class D (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::D
           fields
-            #F8 i (nameOffset:42) (firstTokenOffset:42) (offset:42)
+            #F8 isOriginDeclaration i (nameOffset:42) (firstTokenOffset:42) (offset:42)
               element: <testLibrary>::@class::D::@field::i
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F10 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F10 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::D::@getter::i
           setters
-            #F11 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F11 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::D::@setter::i
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
                   element: <testLibrary>::@class::D::@setter::i::@formalParameter::value
       topLevelVariables
-        #F13 hasInitializer x (nameOffset:53) (firstTokenOffset:53) (offset:53)
+        #F13 hasInitializer isOriginDeclaration x (nameOffset:53) (firstTokenOffset:53) (offset:53)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F14 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
+        #F14 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:53)
           element: <testLibrary>::@getter::x
   classes
     class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        static d
+        static isOriginDeclaration d
           reference: <testLibrary>::@class::C::@field::d
           firstFragment: #F2
           type: D
           getter: <testLibrary>::@class::C::@getter::d
           setter: <testLibrary>::@class::C::@setter::d
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        synthetic static d
+        synthetic static isOriginVariable d
           reference: <testLibrary>::@class::C::@getter::d
           firstFragment: #F4
           returnType: D
           variable: <testLibrary>::@class::C::@field::d
       setters
-        synthetic static d
+        synthetic static isOriginVariable d
           reference: <testLibrary>::@class::C::@setter::d
           firstFragment: #F5
           formalParameters
@@ -7861,24 +7878,24 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F7
       fields
-        i
+        isOriginDeclaration i
           reference: <testLibrary>::@class::D::@field::i
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::D::@getter::i
           setter: <testLibrary>::@class::D::@setter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F9
       getters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::D::@getter::i
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@class::D::@field::i
       setters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::D::@setter::i
           firstFragment: #F11
           formalParameters
@@ -7888,13 +7905,13 @@
           returnType: void
           variable: <testLibrary>::@class::D::@field::i
   topLevelVariables
-    final hasInitializer x
+    final hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F13
       type: int
       getter: <testLibrary>::@getter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F14
       returnType: int
@@ -7922,41 +7939,41 @@
         #F1 class C (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::C
           fields
-            #F2 synthetic d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginGetterSetter d (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@field::d
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F4 d (nameOffset:25) (firstTokenOffset:12) (offset:25)
+            #F4 isOriginDeclaration d (nameOffset:25) (firstTokenOffset:12) (offset:25)
               element: <testLibrary>::@class::C::@getter::d
         #F5 class D (nameOffset:44) (firstTokenOffset:38) (offset:44)
           element: <testLibrary>::@class::D
           fields
-            #F6 i (nameOffset:54) (firstTokenOffset:54) (offset:54)
+            #F6 isOriginDeclaration i (nameOffset:54) (firstTokenOffset:54) (offset:54)
               element: <testLibrary>::@class::D::@field::i
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
               element: <testLibrary>::@class::D::@constructor::new
               typeName: D
           getters
-            #F8 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F8 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::D::@getter::i
           setters
-            #F9 synthetic i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F9 synthetic isOriginVariable i (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::D::@setter::i
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
                   element: <testLibrary>::@class::D::@setter::i::@formalParameter::value
       topLevelVariables
-        #F11 hasInitializer x (nameOffset:63) (firstTokenOffset:63) (offset:63)
+        #F11 hasInitializer isOriginDeclaration x (nameOffset:63) (firstTokenOffset:63) (offset:63)
           element: <testLibrary>::@topLevelVariable::x
       getters
-        #F12 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F12 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@getter::x
       setters
-        #F13 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+        #F13 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
           element: <testLibrary>::@setter::x
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
@@ -7966,17 +7983,17 @@
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
-        synthetic static d
+        synthetic static isOriginGetterSetter d
           reference: <testLibrary>::@class::C::@field::d
           firstFragment: #F2
           type: D
           getter: <testLibrary>::@class::C::@getter::d
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
       getters
-        static d
+        static isOriginDeclaration d
           reference: <testLibrary>::@class::C::@getter::d
           firstFragment: #F4
           returnType: D
@@ -7985,24 +8002,24 @@
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       fields
-        i
+        isOriginDeclaration i
           reference: <testLibrary>::@class::D::@field::i
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::D::@getter::i
           setter: <testLibrary>::@class::D::@setter::i
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F7
       getters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::D::@getter::i
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@class::D::@field::i
       setters
-        synthetic i
+        synthetic isOriginVariable i
           reference: <testLibrary>::@class::D::@setter::i
           firstFragment: #F9
           formalParameters
@@ -8012,20 +8029,20 @@
           returnType: void
           variable: <testLibrary>::@class::D::@field::i
   topLevelVariables
-    hasInitializer x
+    hasImplicitType hasInitializer isOriginDeclaration x
       reference: <testLibrary>::@topLevelVariable::x
       firstFragment: #F11
       type: int
       getter: <testLibrary>::@getter::x
       setter: <testLibrary>::@setter::x
   getters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@getter::x
       firstFragment: #F12
       returnType: int
       variable: <testLibrary>::@topLevelVariable::x
   setters
-    synthetic static x
+    synthetic static isOriginVariable x
       reference: <testLibrary>::@setter::x
       firstFragment: #F13
       formalParameters
@@ -8051,92 +8068,92 @@
     #F0 <testLibraryFragment>
       element: <testLibrary>
       topLevelVariables
-        #F1 hasInitializer vLess (nameOffset:4) (firstTokenOffset:4) (offset:4)
+        #F1 hasInitializer isOriginDeclaration vLess (nameOffset:4) (firstTokenOffset:4) (offset:4)
           element: <testLibrary>::@topLevelVariable::vLess
-        #F2 hasInitializer vLessOrEqual (nameOffset:23) (firstTokenOffset:23) (offset:23)
+        #F2 hasInitializer isOriginDeclaration vLessOrEqual (nameOffset:23) (firstTokenOffset:23) (offset:23)
           element: <testLibrary>::@topLevelVariable::vLessOrEqual
-        #F3 hasInitializer vGreater (nameOffset:50) (firstTokenOffset:50) (offset:50)
+        #F3 hasInitializer isOriginDeclaration vGreater (nameOffset:50) (firstTokenOffset:50) (offset:50)
           element: <testLibrary>::@topLevelVariable::vGreater
-        #F4 hasInitializer vGreaterOrEqual (nameOffset:72) (firstTokenOffset:72) (offset:72)
+        #F4 hasInitializer isOriginDeclaration vGreaterOrEqual (nameOffset:72) (firstTokenOffset:72) (offset:72)
           element: <testLibrary>::@topLevelVariable::vGreaterOrEqual
       getters
-        #F5 synthetic vLess (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F5 synthetic isOriginVariable vLess (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@getter::vLess
-        #F6 synthetic vLessOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F6 synthetic isOriginVariable vLessOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@getter::vLessOrEqual
-        #F7 synthetic vGreater (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F7 synthetic isOriginVariable vGreater (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@getter::vGreater
-        #F8 synthetic vGreaterOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+        #F8 synthetic isOriginVariable vGreaterOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
           element: <testLibrary>::@getter::vGreaterOrEqual
       setters
-        #F9 synthetic vLess (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
+        #F9 synthetic isOriginVariable vLess (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
           element: <testLibrary>::@setter::vLess
           formalParameters
             #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:4)
               element: <testLibrary>::@setter::vLess::@formalParameter::value
-        #F11 synthetic vLessOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+        #F11 synthetic isOriginVariable vLessOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
           element: <testLibrary>::@setter::vLessOrEqual
           formalParameters
             #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@setter::vLessOrEqual::@formalParameter::value
-        #F13 synthetic vGreater (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+        #F13 synthetic isOriginVariable vGreater (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
           element: <testLibrary>::@setter::vGreater
           formalParameters
             #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@setter::vGreater::@formalParameter::value
-        #F15 synthetic vGreaterOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+        #F15 synthetic isOriginVariable vGreaterOrEqual (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
           element: <testLibrary>::@setter::vGreaterOrEqual
           formalParameters
             #F16 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
               element: <testLibrary>::@setter::vGreaterOrEqual::@formalParameter::value
   topLevelVariables
-    hasInitializer vLess
+    hasImplicitType hasInitializer isOriginDeclaration vLess
       reference: <testLibrary>::@topLevelVariable::vLess
       firstFragment: #F1
       type: bool
       getter: <testLibrary>::@getter::vLess
       setter: <testLibrary>::@setter::vLess
-    hasInitializer vLessOrEqual
+    hasImplicitType hasInitializer isOriginDeclaration vLessOrEqual
       reference: <testLibrary>::@topLevelVariable::vLessOrEqual
       firstFragment: #F2
       type: bool
       getter: <testLibrary>::@getter::vLessOrEqual
       setter: <testLibrary>::@setter::vLessOrEqual
-    hasInitializer vGreater
+    hasImplicitType hasInitializer isOriginDeclaration vGreater
       reference: <testLibrary>::@topLevelVariable::vGreater
       firstFragment: #F3
       type: bool
       getter: <testLibrary>::@getter::vGreater
       setter: <testLibrary>::@setter::vGreater
-    hasInitializer vGreaterOrEqual
+    hasImplicitType hasInitializer isOriginDeclaration vGreaterOrEqual
       reference: <testLibrary>::@topLevelVariable::vGreaterOrEqual
       firstFragment: #F4
       type: bool
       getter: <testLibrary>::@getter::vGreaterOrEqual
       setter: <testLibrary>::@setter::vGreaterOrEqual
   getters
-    synthetic static vLess
+    synthetic static isOriginVariable vLess
       reference: <testLibrary>::@getter::vLess
       firstFragment: #F5
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vLess
-    synthetic static vLessOrEqual
+    synthetic static isOriginVariable vLessOrEqual
       reference: <testLibrary>::@getter::vLessOrEqual
       firstFragment: #F6
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vLessOrEqual
-    synthetic static vGreater
+    synthetic static isOriginVariable vGreater
       reference: <testLibrary>::@getter::vGreater
       firstFragment: #F7
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vGreater
-    synthetic static vGreaterOrEqual
+    synthetic static isOriginVariable vGreaterOrEqual
       reference: <testLibrary>::@getter::vGreaterOrEqual
       firstFragment: #F8
       returnType: bool
       variable: <testLibrary>::@topLevelVariable::vGreaterOrEqual
   setters
-    synthetic static vLess
+    synthetic static isOriginVariable vLess
       reference: <testLibrary>::@setter::vLess
       firstFragment: #F9
       formalParameters
@@ -8145,7 +8162,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vLess
-    synthetic static vLessOrEqual
+    synthetic static isOriginVariable vLessOrEqual
       reference: <testLibrary>::@setter::vLessOrEqual
       firstFragment: #F11
       formalParameters
@@ -8154,7 +8171,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vLessOrEqual
-    synthetic static vGreater
+    synthetic static isOriginVariable vGreater
       reference: <testLibrary>::@setter::vGreater
       firstFragment: #F13
       formalParameters
@@ -8163,7 +8180,7 @@
           type: bool
       returnType: void
       variable: <testLibrary>::@topLevelVariable::vGreater
-    synthetic static vGreaterOrEqual
+    synthetic static isOriginVariable vGreaterOrEqual
       reference: <testLibrary>::@setter::vGreaterOrEqual
       firstFragment: #F15
       formalParameters
@@ -8204,17 +8221,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
@@ -8222,14 +8239,14 @@
         #F7 class B (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::B
           fields
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F8 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F10 x (nameOffset:59) (firstTokenOffset:55) (offset:59)
+            #F10 isOriginDeclaration x (nameOffset:59) (firstTokenOffset:55) (offset:59)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F11 requiredPositional <null-name> (nameOffset:<null>) (firstTokenOffset:61) (offset:61)
@@ -8239,24 +8256,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F5
           formalParameters
@@ -8271,17 +8288,17 @@
       interfaces
         A
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: int
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F10
           formalParameters
@@ -8310,10 +8327,10 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer f (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration f (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::f
           constructors
-            #F3 new (nameOffset:<null>) (firstTokenOffset:25) (offset:25)
+            #F3 isOriginDeclaration new (nameOffset:<null>) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
               typeNameOffset: 25
@@ -8324,10 +8341,10 @@
                     SimpleStringLiteral
                       literal: 'hello' @37
           getters
-            #F5 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::f
           setters
-            #F6 synthetic f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable f (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::f
               formalParameters
                 #F7 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -8337,14 +8354,14 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer f
+        hasImplicitType hasInitializer isOriginDeclaration f
           reference: <testLibrary>::@class::A::@field::f
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::f
           setter: <testLibrary>::@class::A::@setter::f
       constructors
-        new
+        isOriginDeclaration new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
           formalParameters
@@ -8356,13 +8373,13 @@
                 expression: expression_0
               field: <testLibrary>::@class::A::@field::f
       getters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@getter::f
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::f
       setters
-        synthetic f
+        synthetic isOriginVariable f
           reference: <testLibrary>::@class::A::@setter::f
           firstFragment: #F6
           formalParameters
@@ -8397,35 +8414,35 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::x
-            #F3 y (nameOffset:34) (firstTokenOffset:34) (offset:34)
+            #F3 isOriginDeclaration y (nameOffset:34) (firstTokenOffset:34) (offset:34)
               element: <testLibrary>::@class::A::@field::y
-            #F4 z (nameOffset:43) (firstTokenOffset:43) (offset:43)
+            #F4 isOriginDeclaration z (nameOffset:43) (firstTokenOffset:43) (offset:43)
               element: <testLibrary>::@class::A::@field::z
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F6 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::x
-            #F7 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F7 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::A::@getter::y
-            #F8 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F8 synthetic isOriginVariable z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::A::@getter::z
           setters
-            #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F9 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
                   element: <testLibrary>::@class::A::@setter::x::@formalParameter::value
-            #F11 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
+            #F11 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
               element: <testLibrary>::@class::A::@setter::y
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
                   element: <testLibrary>::@class::A::@setter::y::@formalParameter::value
-            #F13 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
+            #F13 synthetic isOriginVariable z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
               element: <testLibrary>::@class::A::@setter::z
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:43)
@@ -8433,28 +8450,28 @@
         #F15 class B (nameOffset:54) (firstTokenOffset:48) (offset:54)
           element: <testLibrary>::@class::B
           fields
-            #F16 x (nameOffset:77) (firstTokenOffset:77) (offset:77)
+            #F16 isOriginDeclaration x (nameOffset:77) (firstTokenOffset:77) (offset:77)
               element: <testLibrary>::@class::B::@field::x
-            #F17 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F17 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::B::@field::y
-            #F18 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F18 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::B::@field::z
           constructors
-            #F19 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F19 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F20 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F20 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::B::@getter::x
-            #F21 y (nameOffset:86) (firstTokenOffset:82) (offset:86)
+            #F21 isOriginDeclaration y (nameOffset:86) (firstTokenOffset:82) (offset:86)
               element: <testLibrary>::@class::B::@getter::y
           setters
-            #F22 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F22 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F23 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
-            #F24 z (nameOffset:103) (firstTokenOffset:99) (offset:103)
+            #F24 isOriginDeclaration z (nameOffset:103) (firstTokenOffset:99) (offset:103)
               element: <testLibrary>::@class::B::@setter::z
               formalParameters
                 #F25 requiredPositional _ (nameOffset:105) (firstTokenOffset:105) (offset:105)
@@ -8464,46 +8481,46 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::y
           setter: <testLibrary>::@class::A::@setter::y
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::A::@field::z
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::z
           setter: <testLibrary>::@class::A::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::x
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F7
           returnType: int
           variable: <testLibrary>::@class::A::@field::y
-        synthetic z
+        synthetic isOriginVariable z
           reference: <testLibrary>::@class::A::@getter::z
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@class::A::@field::z
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F9
           formalParameters
@@ -8512,7 +8529,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@class::A::@setter::y
           firstFragment: #F11
           formalParameters
@@ -8521,7 +8538,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::y
-        synthetic z
+        synthetic isOriginVariable z
           reference: <testLibrary>::@class::A::@setter::z
           firstFragment: #F13
           formalParameters
@@ -8536,39 +8553,39 @@
       interfaces
         A
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F16
           type: int
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F17
           type: int
           getter: <testLibrary>::@class::B::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::B::@field::z
           firstFragment: #F18
           type: int
           setter: <testLibrary>::@class::B::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F19
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F20
           returnType: int
           variable: <testLibrary>::@class::B::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::B::@getter::y
           firstFragment: #F21
           returnType: int
           variable: <testLibrary>::@class::B::@field::y
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F22
           formalParameters
@@ -8577,7 +8594,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::B::@setter::z
           firstFragment: #F24
           formalParameters
@@ -8608,17 +8625,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 x (nameOffset:29) (firstTokenOffset:29) (offset:29)
+            #F2 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:29) (offset:29)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
@@ -8626,17 +8643,17 @@
         #F7 class B (nameOffset:40) (firstTokenOffset:34) (offset:40)
           element: <testLibrary>::@class::B
           fields
-            #F8 hasInitializer x (nameOffset:63) (firstTokenOffset:63) (offset:63)
+            #F8 hasInitializer isOriginDeclaration x (nameOffset:63) (firstTokenOffset:63) (offset:63)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@class::B::@getter::x
           setters
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
@@ -8646,24 +8663,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F5
           formalParameters
@@ -8678,24 +8695,24 @@
       interfaces
         A
       fields
-        hasInitializer x
+        hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: dynamic
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F10
           returnType: dynamic
           variable: <testLibrary>::@class::B::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F11
           formalParameters
@@ -8727,17 +8744,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F2 isOriginDeclaration foo (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@class::A::@field::foo
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F4 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@getter::foo
           setters
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F5 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@setter::foo
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
@@ -8745,17 +8762,17 @@
         #F7 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           fields
-            #F8 foo (nameOffset:68) (firstTokenOffset:68) (offset:68)
+            #F8 isOriginDeclaration foo (nameOffset:68) (firstTokenOffset:68) (offset:68)
               element: <testLibrary>::@class::B::@field::foo
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
+            #F10 synthetic isOriginVariable foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:68)
               element: <testLibrary>::@class::B::@getter::foo
           setters
-            #F11 foo (nameOffset:79) (firstTokenOffset:75) (offset:79)
+            #F11 isOriginDeclaration foo (nameOffset:79) (firstTokenOffset:75) (offset:79)
               element: <testLibrary>::@class::B::@setter::foo
               formalParameters
                 #F12 requiredPositional _ (nameOffset:83) (firstTokenOffset:83) (offset:83)
@@ -8765,24 +8782,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: int?
           getter: <testLibrary>::@class::A::@getter::foo
           setter: <testLibrary>::@class::A::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F4
           returnType: int?
           variable: <testLibrary>::@class::A::@field::foo
       setters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::A::@setter::foo
           firstFragment: #F5
           formalParameters
@@ -8797,24 +8814,24 @@
       interfaces
         A
       fields
-        final foo
+        final isOriginDeclaration foo
           reference: <testLibrary>::@class::B::@field::foo
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::B::@getter::foo
           setter: <testLibrary>::@class::B::@setter::foo
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic foo
+        synthetic isOriginVariable foo
           reference: <testLibrary>::@class::B::@getter::foo
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@class::B::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::B::@setter::foo
           firstFragment: #F11
           formalParameters
@@ -8852,35 +8869,35 @@
             #F2 E (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 E
           fields
-            #F3 x (nameOffset:26) (firstTokenOffset:26) (offset:26)
+            #F3 isOriginDeclaration x (nameOffset:26) (firstTokenOffset:26) (offset:26)
               element: <testLibrary>::@class::A::@field::x
-            #F4 y (nameOffset:33) (firstTokenOffset:33) (offset:33)
+            #F4 isOriginDeclaration y (nameOffset:33) (firstTokenOffset:33) (offset:33)
               element: <testLibrary>::@class::A::@field::y
-            #F5 z (nameOffset:40) (firstTokenOffset:40) (offset:40)
+            #F5 isOriginDeclaration z (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: <testLibrary>::@class::A::@field::z
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F7 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@getter::x
-            #F8 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F8 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::A::@getter::y
-            #F9 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F9 synthetic isOriginVariable z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::A::@getter::z
           setters
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F11 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
                   element: <testLibrary>::@class::A::@setter::x::@formalParameter::value
-            #F12 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
+            #F12 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
               element: <testLibrary>::@class::A::@setter::y
               formalParameters
                 #F13 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:33)
                   element: <testLibrary>::@class::A::@setter::y::@formalParameter::value
-            #F14 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
+            #F14 synthetic isOriginVariable z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@class::A::@setter::z
               formalParameters
                 #F15 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
@@ -8891,28 +8908,28 @@
             #F17 T (nameOffset:53) (firstTokenOffset:53) (offset:53)
               element: #E1 T
           fields
-            #F18 x (nameOffset:80) (firstTokenOffset:80) (offset:80)
+            #F18 isOriginDeclaration x (nameOffset:80) (firstTokenOffset:80) (offset:80)
               element: <testLibrary>::@class::B::@field::x
-            #F19 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F19 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@field::y
-            #F20 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F20 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@field::z
           constructors
-            #F21 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F21 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F22 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+            #F22 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
               element: <testLibrary>::@class::B::@getter::x
-            #F23 y (nameOffset:89) (firstTokenOffset:85) (offset:89)
+            #F23 isOriginDeclaration y (nameOffset:89) (firstTokenOffset:85) (offset:89)
               element: <testLibrary>::@class::B::@getter::y
           setters
-            #F24 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
+            #F24 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F25 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:80)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
-            #F26 z (nameOffset:106) (firstTokenOffset:102) (offset:106)
+            #F26 isOriginDeclaration z (nameOffset:106) (firstTokenOffset:102) (offset:106)
               element: <testLibrary>::@class::B::@setter::z
               formalParameters
                 #F27 requiredPositional _ (nameOffset:108) (firstTokenOffset:108) (offset:108)
@@ -8925,21 +8942,21 @@
         #E0 E
           firstFragment: #F2
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: E
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
           type: E
           getter: <testLibrary>::@class::A::@getter::y
           setter: <testLibrary>::@class::A::@setter::y
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::A::@field::z
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
@@ -8947,30 +8964,30 @@
           getter: <testLibrary>::@class::A::@getter::z
           setter: <testLibrary>::@class::A::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F6
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           returnType: E
           variable: <testLibrary>::@class::A::@field::x
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
           returnType: E
           variable: <testLibrary>::@class::A::@field::y
-        synthetic z
+        synthetic isOriginVariable z
           reference: <testLibrary>::@class::A::@getter::z
           firstFragment: #F9
           hasEnclosingTypeParameterReference: true
           returnType: E
           variable: <testLibrary>::@class::A::@field::z
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F10
           hasEnclosingTypeParameterReference: true
@@ -8980,7 +8997,7 @@
               type: E
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@class::A::@setter::y
           firstFragment: #F12
           hasEnclosingTypeParameterReference: true
@@ -8990,7 +9007,7 @@
               type: E
           returnType: void
           variable: <testLibrary>::@class::A::@field::y
-        synthetic z
+        synthetic isOriginVariable z
           reference: <testLibrary>::@class::A::@setter::z
           firstFragment: #F14
           hasEnclosingTypeParameterReference: true
@@ -9009,44 +9026,44 @@
       interfaces
         A<T>
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F18
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F19
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::B::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::B::@field::z
           firstFragment: #F20
           hasEnclosingTypeParameterReference: true
           type: T
           setter: <testLibrary>::@class::B::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F21
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F22
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::B::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::B::@getter::y
           firstFragment: #F23
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::B::@field::y
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F24
           hasEnclosingTypeParameterReference: true
@@ -9056,7 +9073,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::B::@setter::z
           firstFragment: #F26
           hasEnclosingTypeParameterReference: true
@@ -9088,17 +9105,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
@@ -9106,17 +9123,17 @@
         #F7 class B (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::B
           fields
-            #F8 hasInitializer x (nameOffset:59) (firstTokenOffset:59) (offset:59)
+            #F8 hasInitializer isOriginDeclaration x (nameOffset:59) (firstTokenOffset:59) (offset:59)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::B::@getter::x
           setters
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
@@ -9126,24 +9143,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F5
           formalParameters
@@ -9158,24 +9175,24 @@
       interfaces
         A
       fields
-        hasInitializer x
+        hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: dynamic
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F10
           returnType: dynamic
           variable: <testLibrary>::@class::B::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F11
           formalParameters
@@ -9206,17 +9223,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 x (nameOffset:25) (firstTokenOffset:25) (offset:25)
+            #F2 isOriginDeclaration x (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F4 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@getter::x
           setters
-            #F5 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
+            #F5 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:25)
@@ -9224,17 +9241,17 @@
         #F7 class B (nameOffset:36) (firstTokenOffset:30) (offset:36)
           element: <testLibrary>::@class::B
           fields
-            #F8 hasInitializer x (nameOffset:59) (firstTokenOffset:59) (offset:59)
+            #F8 hasInitializer isOriginDeclaration x (nameOffset:59) (firstTokenOffset:59) (offset:59)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:36)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::B::@getter::x
           setters
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
@@ -9244,24 +9261,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: num
           variable: <testLibrary>::@class::A::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F5
           formalParameters
@@ -9276,24 +9293,24 @@
       interfaces
         A
       fields
-        hasInitializer x
+        hasImplicitType hasInitializer isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: num
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F10
           returnType: num
           variable: <testLibrary>::@class::B::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F11
           formalParameters
@@ -9328,48 +9345,48 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
-            #F3 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::y
-            #F4 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::z
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F6 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
-            #F7 y (nameOffset:42) (firstTokenOffset:34) (offset:42)
+            #F7 isOriginDeclaration y (nameOffset:42) (firstTokenOffset:34) (offset:42)
               element: <testLibrary>::@class::A::@getter::y
-            #F8 z (nameOffset:55) (firstTokenOffset:47) (offset:55)
+            #F8 isOriginDeclaration z (nameOffset:55) (firstTokenOffset:47) (offset:55)
               element: <testLibrary>::@class::A::@getter::z
         #F9 class B (nameOffset:66) (firstTokenOffset:60) (offset:66)
           element: <testLibrary>::@class::B
           fields
-            #F10 x (nameOffset:89) (firstTokenOffset:89) (offset:89)
+            #F10 isOriginDeclaration x (nameOffset:89) (firstTokenOffset:89) (offset:89)
               element: <testLibrary>::@class::B::@field::x
-            #F11 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F11 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::B::@field::y
-            #F12 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F12 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::B::@field::z
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
+            #F13 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:66)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F14 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+            #F14 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@class::B::@getter::x
-            #F15 y (nameOffset:98) (firstTokenOffset:94) (offset:98)
+            #F15 isOriginDeclaration y (nameOffset:98) (firstTokenOffset:94) (offset:98)
               element: <testLibrary>::@class::B::@getter::y
           setters
-            #F16 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+            #F16 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F17 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
-            #F18 z (nameOffset:115) (firstTokenOffset:111) (offset:115)
+            #F18 isOriginDeclaration z (nameOffset:115) (firstTokenOffset:111) (offset:115)
               element: <testLibrary>::@class::B::@setter::z
               formalParameters
                 #F19 requiredPositional _ (nameOffset:117) (firstTokenOffset:117) (offset:117)
@@ -9379,37 +9396,37 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::A::@field::z
           firstFragment: #F4
           type: int
           getter: <testLibrary>::@class::A::@getter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::x
-        abstract y
+        abstract isOriginDeclaration y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F7
           returnType: int
           variable: <testLibrary>::@class::A::@field::y
-        abstract z
+        abstract isOriginDeclaration z
           reference: <testLibrary>::@class::A::@getter::z
           firstFragment: #F8
           returnType: int
@@ -9420,39 +9437,39 @@
       interfaces
         A
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F10
           type: int
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F11
           type: int
           getter: <testLibrary>::@class::B::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::B::@field::z
           firstFragment: #F12
           type: int
           setter: <testLibrary>::@class::B::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F13
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F14
           returnType: int
           variable: <testLibrary>::@class::B::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::B::@getter::y
           firstFragment: #F15
           returnType: int
           variable: <testLibrary>::@class::B::@field::y
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F16
           formalParameters
@@ -9461,7 +9478,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::B::@setter::z
           firstFragment: #F18
           formalParameters
@@ -9499,22 +9516,22 @@
             #F2 E (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 E
           fields
-            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
-            #F4 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::y
-            #F5 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::z
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F7 x (nameOffset:30) (firstTokenOffset:24) (offset:30)
+            #F7 isOriginDeclaration x (nameOffset:30) (firstTokenOffset:24) (offset:30)
               element: <testLibrary>::@class::A::@getter::x
-            #F8 y (nameOffset:41) (firstTokenOffset:35) (offset:41)
+            #F8 isOriginDeclaration y (nameOffset:41) (firstTokenOffset:35) (offset:41)
               element: <testLibrary>::@class::A::@getter::y
-            #F9 z (nameOffset:52) (firstTokenOffset:46) (offset:52)
+            #F9 isOriginDeclaration z (nameOffset:52) (firstTokenOffset:46) (offset:52)
               element: <testLibrary>::@class::A::@getter::z
         #F10 class B (nameOffset:63) (firstTokenOffset:57) (offset:63)
           element: <testLibrary>::@class::B
@@ -9522,28 +9539,28 @@
             #F11 T (nameOffset:65) (firstTokenOffset:65) (offset:65)
               element: #E1 T
           fields
-            #F12 x (nameOffset:92) (firstTokenOffset:92) (offset:92)
+            #F12 isOriginDeclaration x (nameOffset:92) (firstTokenOffset:92) (offset:92)
               element: <testLibrary>::@class::B::@field::x
-            #F13 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F13 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@class::B::@field::y
-            #F14 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F14 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@class::B::@field::z
           constructors
-            #F15 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
+            #F15 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F16 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
+            #F16 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
               element: <testLibrary>::@class::B::@getter::x
-            #F17 y (nameOffset:101) (firstTokenOffset:97) (offset:101)
+            #F17 isOriginDeclaration y (nameOffset:101) (firstTokenOffset:97) (offset:101)
               element: <testLibrary>::@class::B::@getter::y
           setters
-            #F18 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
+            #F18 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F19 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:92)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
-            #F20 z (nameOffset:118) (firstTokenOffset:114) (offset:118)
+            #F20 isOriginDeclaration z (nameOffset:118) (firstTokenOffset:114) (offset:118)
               element: <testLibrary>::@class::B::@setter::z
               formalParameters
                 #F21 requiredPositional _ (nameOffset:120) (firstTokenOffset:120) (offset:120)
@@ -9556,42 +9573,42 @@
         #E0 E
           firstFragment: #F2
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: E
           getter: <testLibrary>::@class::A::@getter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
           type: E
           getter: <testLibrary>::@class::A::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::A::@field::z
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
           type: E
           getter: <testLibrary>::@class::A::@getter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F6
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
           returnType: E
           variable: <testLibrary>::@class::A::@field::x
-        abstract y
+        abstract isOriginDeclaration y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
           returnType: E
           variable: <testLibrary>::@class::A::@field::y
-        abstract z
+        abstract isOriginDeclaration z
           reference: <testLibrary>::@class::A::@getter::z
           firstFragment: #F9
           hasEnclosingTypeParameterReference: true
@@ -9606,44 +9623,44 @@
       interfaces
         A<T>
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F12
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F13
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::B::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::B::@field::z
           firstFragment: #F14
           hasEnclosingTypeParameterReference: true
           type: T
           setter: <testLibrary>::@class::B::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F15
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F16
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::B::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::B::@getter::y
           firstFragment: #F17
           hasEnclosingTypeParameterReference: true
           returnType: T
           variable: <testLibrary>::@class::B::@field::y
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F18
           hasEnclosingTypeParameterReference: true
@@ -9653,7 +9670,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::B::@setter::z
           firstFragment: #F20
           hasEnclosingTypeParameterReference: true
@@ -9687,21 +9704,21 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::foo
           getters
-            #F3 foo (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F3 isOriginDeclaration foo (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::foo
         #F4 class B (nameOffset:42) (firstTokenOffset:36) (offset:42)
           element: <testLibrary>::@class::B
           fields
-            #F5 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
+            #F5 synthetic isOriginGetterSetter foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:42)
               element: <testLibrary>::@class::B::@field::foo
           getters
-            #F6 foo (nameOffset:69) (firstTokenOffset:61) (offset:69)
+            #F6 isOriginDeclaration foo (nameOffset:69) (firstTokenOffset:61) (offset:69)
               element: <testLibrary>::@class::B::@getter::foo
           setters
-            #F7 foo (nameOffset:85) (firstTokenOffset:81) (offset:85)
+            #F7 isOriginDeclaration foo (nameOffset:85) (firstTokenOffset:81) (offset:85)
               element: <testLibrary>::@class::B::@setter::foo
               formalParameters
                 #F8 requiredPositional value (nameOffset:89) (firstTokenOffset:89) (offset:89)
@@ -9711,13 +9728,13 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::A::@field::foo
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::A::@getter::foo
       getters
-        abstract foo
+        abstract isOriginDeclaration foo
           reference: <testLibrary>::@class::A::@getter::foo
           firstFragment: #F3
           returnType: num
@@ -9728,20 +9745,20 @@
       interfaces
         A
       fields
-        synthetic foo
+        synthetic isOriginGetterSetter foo
           reference: <testLibrary>::@class::B::@field::foo
           firstFragment: #F5
           type: int
           getter: <testLibrary>::@class::B::@getter::foo
           setter: <testLibrary>::@class::B::@setter::foo
       getters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::B::@getter::foo
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::B::@field::foo
       setters
-        foo
+        isOriginDeclaration foo
           reference: <testLibrary>::@class::B::@setter::foo
           firstFragment: #F7
           formalParameters
@@ -9776,55 +9793,55 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F8 x (nameOffset:66) (firstTokenOffset:55) (offset:66)
+            #F8 isOriginDeclaration x (nameOffset:66) (firstTokenOffset:55) (offset:66)
               element: <testLibrary>::@class::B::@getter::x
         #F9 class C (nameOffset:77) (firstTokenOffset:71) (offset:77)
           element: <testLibrary>::@class::C
           fields
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F10 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:77)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F12 x (nameOffset:103) (firstTokenOffset:99) (offset:103)
+            #F12 isOriginDeclaration x (nameOffset:103) (firstTokenOffset:99) (offset:103)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -9833,17 +9850,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: String
           getter: <testLibrary>::@class::B::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F8
           returnType: String
@@ -9855,17 +9872,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F10
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F11
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F12
           returnType: dynamic
@@ -9896,55 +9913,55 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F8 x (nameOffset:67) (firstTokenOffset:55) (offset:67)
+            #F8 isOriginDeclaration x (nameOffset:67) (firstTokenOffset:55) (offset:67)
               element: <testLibrary>::@class::B::@getter::x
         #F9 class C (nameOffset:78) (firstTokenOffset:72) (offset:78)
           element: <testLibrary>::@class::C
           fields
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F10 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:78)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F12 x (nameOffset:104) (firstTokenOffset:100) (offset:104)
+            #F12 isOriginDeclaration x (nameOffset:104) (firstTokenOffset:100) (offset:104)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -9953,17 +9970,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: dynamic
           getter: <testLibrary>::@class::B::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F8
           returnType: dynamic
@@ -9975,17 +9992,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F10
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F11
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F12
           returnType: int
@@ -10019,14 +10036,14 @@
             #F2 T (nameOffset:17) (firstTokenOffset:17) (offset:17)
               element: #E0 T
           fields
-            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 x (nameOffset:30) (firstTokenOffset:24) (offset:30)
+            #F5 isOriginDeclaration x (nameOffset:30) (firstTokenOffset:24) (offset:30)
               element: <testLibrary>::@class::A::@getter::x
         #F6 class B (nameOffset:50) (firstTokenOffset:35) (offset:50)
           element: <testLibrary>::@class::B
@@ -10034,26 +10051,26 @@
             #F7 T (nameOffset:52) (firstTokenOffset:52) (offset:52)
               element: #E1 T
           fields
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F8 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 x (nameOffset:65) (firstTokenOffset:59) (offset:65)
+            #F10 isOriginDeclaration x (nameOffset:65) (firstTokenOffset:59) (offset:65)
               element: <testLibrary>::@class::B::@getter::x
         #F11 class C (nameOffset:76) (firstTokenOffset:70) (offset:76)
           element: <testLibrary>::@class::C
           fields
-            #F12 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+            #F12 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
+            #F13 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:76)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F14 x (nameOffset:115) (firstTokenOffset:111) (offset:115)
+            #F14 isOriginDeclaration x (nameOffset:115) (firstTokenOffset:111) (offset:115)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
@@ -10063,18 +10080,18 @@
         #E0 T
           firstFragment: #F2
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F5
           hasEnclosingTypeParameterReference: true
@@ -10087,18 +10104,18 @@
         #E1 T
           firstFragment: #F7
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           hasEnclosingTypeParameterReference: true
           type: T
           getter: <testLibrary>::@class::B::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F10
           hasEnclosingTypeParameterReference: true
@@ -10111,17 +10128,17 @@
         A<int>
         B<String>
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F12
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F13
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F14
           returnType: dynamic
@@ -10151,55 +10168,55 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F8 x (nameOffset:63) (firstTokenOffset:55) (offset:63)
+            #F8 isOriginDeclaration x (nameOffset:63) (firstTokenOffset:55) (offset:63)
               element: <testLibrary>::@class::B::@getter::x
         #F9 class C (nameOffset:74) (firstTokenOffset:68) (offset:74)
           element: <testLibrary>::@class::C
           fields
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+            #F10 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F12 x (nameOffset:100) (firstTokenOffset:96) (offset:100)
+            #F12 isOriginDeclaration x (nameOffset:100) (firstTokenOffset:96) (offset:100)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10208,17 +10225,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: int
           getter: <testLibrary>::@class::B::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F8
           returnType: int
@@ -10230,17 +10247,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F10
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F11
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F12
           returnType: int
@@ -10273,37 +10290,37 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
-            #F3 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::y
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F5 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F5 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
-            #F6 y (nameOffset:42) (firstTokenOffset:34) (offset:42)
+            #F6 isOriginDeclaration y (nameOffset:42) (firstTokenOffset:34) (offset:42)
               element: <testLibrary>::@class::A::@getter::y
         #F7 class B (nameOffset:62) (firstTokenOffset:47) (offset:62)
           element: <testLibrary>::@class::B
           fields
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F8 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::B::@field::x
-            #F9 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F9 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::B::@field::y
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F11 x (nameOffset:77) (firstTokenOffset:68) (offset:77)
+            #F11 isOriginDeclaration x (nameOffset:77) (firstTokenOffset:68) (offset:77)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F12 requiredPositional _ (nameOffset:86) (firstTokenOffset:79) (offset:86)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::_
-            #F13 y (nameOffset:101) (firstTokenOffset:92) (offset:101)
+            #F13 isOriginDeclaration y (nameOffset:101) (firstTokenOffset:92) (offset:101)
               element: <testLibrary>::@class::B::@setter::y
               formalParameters
                 #F14 requiredPositional _ (nameOffset:110) (firstTokenOffset:103) (offset:110)
@@ -10311,21 +10328,21 @@
         #F15 class C (nameOffset:122) (firstTokenOffset:116) (offset:122)
           element: <testLibrary>::@class::C
           fields
-            #F16 x (nameOffset:148) (firstTokenOffset:148) (offset:148)
+            #F16 isOriginDeclaration x (nameOffset:148) (firstTokenOffset:148) (offset:148)
               element: <testLibrary>::@class::C::@field::x
-            #F17 y (nameOffset:159) (firstTokenOffset:159) (offset:159)
+            #F17 isOriginDeclaration y (nameOffset:159) (firstTokenOffset:159) (offset:159)
               element: <testLibrary>::@class::C::@field::y
           constructors
-            #F18 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
+            #F18 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:122)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F19 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
+            #F19 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
               element: <testLibrary>::@class::C::@getter::x
-            #F20 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:159)
+            #F20 synthetic isOriginVariable y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:159)
               element: <testLibrary>::@class::C::@getter::y
           setters
-            #F21 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
+            #F21 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F22 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:148)
@@ -10335,27 +10352,27 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F3
           type: int
           getter: <testLibrary>::@class::A::@getter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F5
           returnType: int
           variable: <testLibrary>::@class::A::@field::x
-        abstract y
+        abstract isOriginDeclaration y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F6
           returnType: int
@@ -10364,22 +10381,22 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: String
           setter: <testLibrary>::@class::B::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F9
           type: String
           setter: <testLibrary>::@class::B::@setter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F10
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F11
           formalParameters
@@ -10388,7 +10405,7 @@
               type: String
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-        abstract y
+        abstract isOriginDeclaration y
           reference: <testLibrary>::@class::B::@setter::y
           firstFragment: #F13
           formalParameters
@@ -10404,34 +10421,34 @@
         A
         B
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F16
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
-        final y
+        final hasImplicitType isOriginDeclaration y
           reference: <testLibrary>::@class::C::@field::y
           firstFragment: #F17
           type: int
           getter: <testLibrary>::@class::C::@getter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F18
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F19
           returnType: dynamic
           variable: <testLibrary>::@class::C::@field::x
-        synthetic y
+        synthetic isOriginVariable y
           reference: <testLibrary>::@class::C::@getter::y
           firstFragment: #F20
           returnType: int
           variable: <testLibrary>::@class::C::@field::y
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F21
           formalParameters
@@ -10465,26 +10482,26 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F8 x (nameOffset:64) (firstTokenOffset:55) (offset:64)
+            #F8 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:55) (offset:64)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F9 requiredPositional _ (nameOffset:73) (firstTokenOffset:66) (offset:73)
@@ -10492,31 +10509,31 @@
         #F10 class C (nameOffset:85) (firstTokenOffset:79) (offset:85)
           element: <testLibrary>::@class::C
           fields
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
+            #F11 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F13 x (nameOffset:111) (firstTokenOffset:107) (offset:111)
+            #F13 isOriginDeclaration x (nameOffset:111) (firstTokenOffset:107) (offset:111)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10525,17 +10542,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: String
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F8
           formalParameters
@@ -10551,17 +10568,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F11
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F13
           returnType: int
@@ -10592,26 +10609,26 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F8 x (nameOffset:64) (firstTokenOffset:55) (offset:64)
+            #F8 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:55) (offset:64)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F9 requiredPositional _ (nameOffset:73) (firstTokenOffset:66) (offset:73)
@@ -10619,14 +10636,14 @@
         #F10 class C (nameOffset:85) (firstTokenOffset:79) (offset:85)
           element: <testLibrary>::@class::C
           fields
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
+            #F11 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:85)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F13 x (nameOffset:111) (firstTokenOffset:107) (offset:111)
+            #F13 isOriginDeclaration x (nameOffset:111) (firstTokenOffset:107) (offset:111)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F14 requiredPositional _ (nameOffset:113) (firstTokenOffset:113) (offset:113)
@@ -10636,17 +10653,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10655,17 +10672,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: String
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F8
           formalParameters
@@ -10681,17 +10698,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F11
           type: String
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F13
           formalParameters
@@ -10725,26 +10742,26 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F8 x (nameOffset:64) (firstTokenOffset:55) (offset:64)
+            #F8 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:55) (offset:64)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F9 requiredPositional _ (nameOffset:70) (firstTokenOffset:66) (offset:70)
@@ -10752,17 +10769,17 @@
         #F10 class C (nameOffset:82) (firstTokenOffset:76) (offset:82)
           element: <testLibrary>::@class::C
           fields
-            #F11 x (nameOffset:108) (firstTokenOffset:108) (offset:108)
+            #F11 isOriginDeclaration x (nameOffset:108) (firstTokenOffset:108) (offset:108)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F13 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
+            #F13 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
               element: <testLibrary>::@class::C::@getter::x
           setters
-            #F14 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
+            #F14 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F15 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:108)
@@ -10772,17 +10789,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10791,17 +10808,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F8
           formalParameters
@@ -10817,24 +10834,24 @@
         A
         B
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F11
           type: int
           getter: <testLibrary>::@class::C::@getter::x
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F13
           returnType: int
           variable: <testLibrary>::@class::C::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F14
           formalParameters
@@ -10868,26 +10885,26 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F8 x (nameOffset:64) (firstTokenOffset:55) (offset:64)
+            #F8 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:55) (offset:64)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F9 requiredPositional _ (nameOffset:70) (firstTokenOffset:66) (offset:70)
@@ -10895,31 +10912,31 @@
         #F10 class C (nameOffset:82) (firstTokenOffset:76) (offset:82)
           element: <testLibrary>::@class::C
           fields
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F11 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F13 x (nameOffset:108) (firstTokenOffset:104) (offset:108)
+            #F13 isOriginDeclaration x (nameOffset:108) (firstTokenOffset:104) (offset:108)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -10928,17 +10945,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F8
           formalParameters
@@ -10954,17 +10971,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F11
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F13
           returnType: int
@@ -10994,26 +11011,26 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
         #F5 class B (nameOffset:49) (firstTokenOffset:34) (offset:49)
           element: <testLibrary>::@class::B
           fields
-            #F6 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F6 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:49)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F8 x (nameOffset:64) (firstTokenOffset:55) (offset:64)
+            #F8 isOriginDeclaration x (nameOffset:64) (firstTokenOffset:55) (offset:64)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F9 requiredPositional _ (nameOffset:70) (firstTokenOffset:66) (offset:70)
@@ -11021,14 +11038,14 @@
         #F10 class C (nameOffset:82) (firstTokenOffset:76) (offset:82)
           element: <testLibrary>::@class::C
           fields
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F11 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:82)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           setters
-            #F13 x (nameOffset:108) (firstTokenOffset:104) (offset:108)
+            #F13 isOriginDeclaration x (nameOffset:108) (firstTokenOffset:104) (offset:108)
               element: <testLibrary>::@class::C::@setter::x
               formalParameters
                 #F14 requiredPositional _ (nameOffset:110) (firstTokenOffset:110) (offset:110)
@@ -11038,17 +11055,17 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: int
@@ -11057,17 +11074,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F6
           type: int
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F8
           formalParameters
@@ -11083,17 +11100,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F11
           type: int
           setter: <testLibrary>::@class::C::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::C::@setter::x
           firstFragment: #F13
           formalParameters
@@ -11128,28 +11145,28 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
-            #F3 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::y
-            #F4 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::z
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F6 x (nameOffset:30) (firstTokenOffset:21) (offset:30)
+            #F6 isOriginDeclaration x (nameOffset:30) (firstTokenOffset:21) (offset:30)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F7 requiredPositional _ (nameOffset:36) (firstTokenOffset:32) (offset:36)
                   element: <testLibrary>::@class::A::@setter::x::@formalParameter::_
-            #F8 y (nameOffset:51) (firstTokenOffset:42) (offset:51)
+            #F8 isOriginDeclaration y (nameOffset:51) (firstTokenOffset:42) (offset:51)
               element: <testLibrary>::@class::A::@setter::y
               formalParameters
                 #F9 requiredPositional _ (nameOffset:57) (firstTokenOffset:53) (offset:57)
                   element: <testLibrary>::@class::A::@setter::y::@formalParameter::_
-            #F10 z (nameOffset:72) (firstTokenOffset:63) (offset:72)
+            #F10 isOriginDeclaration z (nameOffset:72) (firstTokenOffset:63) (offset:72)
               element: <testLibrary>::@class::A::@setter::z
               formalParameters
                 #F11 requiredPositional _ (nameOffset:78) (firstTokenOffset:74) (offset:78)
@@ -11157,28 +11174,28 @@
         #F12 class B (nameOffset:90) (firstTokenOffset:84) (offset:90)
           element: <testLibrary>::@class::B
           fields
-            #F13 x (nameOffset:113) (firstTokenOffset:113) (offset:113)
+            #F13 isOriginDeclaration x (nameOffset:113) (firstTokenOffset:113) (offset:113)
               element: <testLibrary>::@class::B::@field::x
-            #F14 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+            #F14 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
               element: <testLibrary>::@class::B::@field::y
-            #F15 synthetic z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+            #F15 synthetic isOriginGetterSetter z (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
               element: <testLibrary>::@class::B::@field::z
           constructors
-            #F16 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+            #F16 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F17 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
+            #F17 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
               element: <testLibrary>::@class::B::@getter::x
-            #F18 y (nameOffset:122) (firstTokenOffset:118) (offset:122)
+            #F18 isOriginDeclaration y (nameOffset:122) (firstTokenOffset:118) (offset:122)
               element: <testLibrary>::@class::B::@getter::y
           setters
-            #F19 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
+            #F19 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F20 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:113)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
-            #F21 z (nameOffset:139) (firstTokenOffset:135) (offset:139)
+            #F21 isOriginDeclaration z (nameOffset:139) (firstTokenOffset:135) (offset:139)
               element: <testLibrary>::@class::B::@setter::z
               formalParameters
                 #F22 requiredPositional _ (nameOffset:141) (firstTokenOffset:141) (offset:141)
@@ -11188,27 +11205,27 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F3
           type: int
           setter: <testLibrary>::@class::A::@setter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::A::@field::z
           firstFragment: #F4
           type: int
           setter: <testLibrary>::@class::A::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F6
           formalParameters
@@ -11217,7 +11234,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-        abstract y
+        abstract isOriginDeclaration y
           reference: <testLibrary>::@class::A::@setter::y
           firstFragment: #F8
           formalParameters
@@ -11226,7 +11243,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::y
-        abstract z
+        abstract isOriginDeclaration z
           reference: <testLibrary>::@class::A::@setter::z
           firstFragment: #F10
           formalParameters
@@ -11241,39 +11258,39 @@
       interfaces
         A
       fields
-        x
+        hasImplicitType isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F13
           type: int
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F14
           type: int
           getter: <testLibrary>::@class::B::@getter::y
-        synthetic z
+        synthetic isOriginGetterSetter z
           reference: <testLibrary>::@class::B::@field::z
           firstFragment: #F15
           type: int
           setter: <testLibrary>::@class::B::@setter::z
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F16
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F17
           returnType: int
           variable: <testLibrary>::@class::B::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::B::@getter::y
           firstFragment: #F18
           returnType: int
           variable: <testLibrary>::@class::B::@field::y
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F19
           formalParameters
@@ -11282,7 +11299,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-        z
+        isOriginDeclaration z
           reference: <testLibrary>::@class::B::@setter::z
           firstFragment: #F21
           formalParameters
@@ -11316,14 +11333,14 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F4 x (nameOffset:30) (firstTokenOffset:21) (offset:30)
+            #F4 isOriginDeclaration x (nameOffset:30) (firstTokenOffset:21) (offset:30)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F5 requiredPositional _ (nameOffset:36) (firstTokenOffset:32) (offset:36)
@@ -11331,14 +11348,14 @@
         #F6 class B (nameOffset:57) (firstTokenOffset:42) (offset:57)
           element: <testLibrary>::@class::B
           fields
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F7 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F9 x (nameOffset:72) (firstTokenOffset:63) (offset:72)
+            #F9 isOriginDeclaration x (nameOffset:72) (firstTokenOffset:63) (offset:72)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F10 requiredPositional _ (nameOffset:81) (firstTokenOffset:74) (offset:81)
@@ -11346,31 +11363,31 @@
         #F11 class C (nameOffset:93) (firstTokenOffset:87) (offset:93)
           element: <testLibrary>::@class::C
           fields
-            #F12 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:93)
+            #F12 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:93)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:93)
+            #F13 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:93)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F14 x (nameOffset:119) (firstTokenOffset:115) (offset:119)
+            #F14 isOriginDeclaration x (nameOffset:119) (firstTokenOffset:115) (offset:119)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F4
           formalParameters
@@ -11383,17 +11400,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F6
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F7
           type: String
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F9
           formalParameters
@@ -11409,17 +11426,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F12
           type: dynamic
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F13
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F14
           returnType: dynamic
@@ -11449,14 +11466,14 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           setters
-            #F4 x (nameOffset:30) (firstTokenOffset:21) (offset:30)
+            #F4 isOriginDeclaration x (nameOffset:30) (firstTokenOffset:21) (offset:30)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F5 requiredPositional _ (nameOffset:36) (firstTokenOffset:32) (offset:36)
@@ -11464,14 +11481,14 @@
         #F6 class B (nameOffset:57) (firstTokenOffset:42) (offset:57)
           element: <testLibrary>::@class::B
           fields
-            #F7 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F7 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F9 x (nameOffset:72) (firstTokenOffset:63) (offset:72)
+            #F9 isOriginDeclaration x (nameOffset:72) (firstTokenOffset:63) (offset:72)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F10 requiredPositional _ (nameOffset:78) (firstTokenOffset:74) (offset:78)
@@ -11479,31 +11496,31 @@
         #F11 class C (nameOffset:90) (firstTokenOffset:84) (offset:90)
           element: <testLibrary>::@class::C
           fields
-            #F12 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+            #F12 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
               element: <testLibrary>::@class::C::@field::x
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
+            #F13 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:90)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           getters
-            #F14 x (nameOffset:116) (firstTokenOffset:112) (offset:116)
+            #F14 isOriginDeclaration x (nameOffset:116) (firstTokenOffset:112) (offset:116)
               element: <testLibrary>::@class::C::@getter::x
   classes
     abstract class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: int
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F4
           formalParameters
@@ -11516,17 +11533,17 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F6
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F7
           type: int
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F9
           formalParameters
@@ -11542,17 +11559,17 @@
         A
         B
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::C::@field::x
           firstFragment: #F12
           type: int
           getter: <testLibrary>::@class::C::@getter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F13
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::C::@getter::x
           firstFragment: #F14
           returnType: int
@@ -11587,34 +11604,34 @@
             #F2 T (nameOffset:25) (firstTokenOffset:25) (offset:25)
               element: #E0 T
           fields
-            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F3 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@field::x
-            #F4 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F4 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@field::y
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 x (nameOffset:41) (firstTokenOffset:32) (offset:41)
+            #F6 isOriginDeclaration x (nameOffset:41) (firstTokenOffset:32) (offset:41)
               element: <testLibrary>::@class::A::@getter::x
-            #F7 y (nameOffset:69) (firstTokenOffset:54) (offset:69)
+            #F7 isOriginDeclaration y (nameOffset:69) (firstTokenOffset:54) (offset:69)
               element: <testLibrary>::@class::A::@getter::y
         #F8 class B (nameOffset:89) (firstTokenOffset:83) (offset:89)
           element: <testLibrary>::@class::B
           fields
-            #F9 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+            #F9 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@class::B::@field::x
-            #F10 synthetic y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+            #F10 synthetic isOriginGetterSetter y (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@class::B::@field::y
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:89)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F12 x (nameOffset:114) (firstTokenOffset:110) (offset:114)
+            #F12 isOriginDeclaration x (nameOffset:114) (firstTokenOffset:110) (offset:114)
               element: <testLibrary>::@class::B::@getter::x
-            #F13 y (nameOffset:131) (firstTokenOffset:127) (offset:131)
+            #F13 isOriginDeclaration y (nameOffset:131) (firstTokenOffset:127) (offset:131)
               element: <testLibrary>::@class::B::@getter::y
       typeAliases
         #F14 F (nameOffset:8) (firstTokenOffset:0) (offset:8)
@@ -11630,7 +11647,7 @@
         #E0 T
           firstFragment: #F2
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F3
           hasEnclosingTypeParameterReference: true
@@ -11639,18 +11656,18 @@
               typeArguments
                 T
           getter: <testLibrary>::@class::A::@getter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::A::@field::y
           firstFragment: #F4
           hasEnclosingTypeParameterReference: true
           type: List<dynamic Function()>
           getter: <testLibrary>::@class::A::@getter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F6
           hasEnclosingTypeParameterReference: true
@@ -11659,7 +11676,7 @@
               typeArguments
                 T
           variable: <testLibrary>::@class::A::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::A::@getter::y
           firstFragment: #F7
           hasEnclosingTypeParameterReference: true
@@ -11670,7 +11687,7 @@
       firstFragment: #F8
       supertype: A<int>
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F9
           type: dynamic Function()
@@ -11678,20 +11695,20 @@
               typeArguments
                 int
           getter: <testLibrary>::@class::B::@getter::x
-        synthetic y
+        synthetic isOriginGetterSetter y
           reference: <testLibrary>::@class::B::@field::y
           firstFragment: #F10
           type: List<dynamic Function()>
           getter: <testLibrary>::@class::B::@getter::y
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F11
           superConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::A::@constructor::new
             substitution: {T: int}
       getters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F12
           returnType: dynamic Function()
@@ -11699,7 +11716,7 @@
               typeArguments
                 int
           variable: <testLibrary>::@class::B::@field::x
-        y
+        isOriginDeclaration y
           reference: <testLibrary>::@class::B::@getter::y
           firstFragment: #F13
           returnType: List<dynamic Function()>
@@ -11735,17 +11752,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
           setters
-            #F5 x (nameOffset:43) (firstTokenOffset:34) (offset:43)
+            #F5 isOriginDeclaration x (nameOffset:43) (firstTokenOffset:34) (offset:43)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F6 requiredPositional covariant _ (nameOffset:59) (firstTokenOffset:45) (offset:59)
@@ -11753,17 +11770,17 @@
         #F7 class B (nameOffset:71) (firstTokenOffset:65) (offset:71)
           element: <testLibrary>::@class::B
           fields
-            #F8 x (nameOffset:94) (firstTokenOffset:94) (offset:94)
+            #F8 isOriginDeclaration x (nameOffset:94) (firstTokenOffset:94) (offset:94)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           getters
-            #F10 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+            #F10 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@class::B::@getter::x
           setters
-            #F11 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
+            #F11 synthetic isOriginVariable x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
@@ -11773,24 +11790,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: num
           variable: <testLibrary>::@class::A::@field::x
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F5
           formalParameters
@@ -11805,24 +11822,24 @@
       interfaces
         A
       fields
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: int
           getter: <testLibrary>::@class::B::@getter::x
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       getters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@getter::x
           firstFragment: #F10
           returnType: int
           variable: <testLibrary>::@class::B::@field::x
       setters
-        synthetic x
+        synthetic isOriginVariable x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F11
           formalParameters
@@ -11854,17 +11871,17 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           fields
-            #F2 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@field::x
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 x (nameOffset:29) (firstTokenOffset:21) (offset:29)
+            #F4 isOriginDeclaration x (nameOffset:29) (firstTokenOffset:21) (offset:29)
               element: <testLibrary>::@class::A::@getter::x
           setters
-            #F5 x (nameOffset:43) (firstTokenOffset:34) (offset:43)
+            #F5 isOriginDeclaration x (nameOffset:43) (firstTokenOffset:34) (offset:43)
               element: <testLibrary>::@class::A::@setter::x
               formalParameters
                 #F6 requiredPositional covariant _ (nameOffset:59) (firstTokenOffset:45) (offset:59)
@@ -11872,14 +11889,14 @@
         #F7 class B (nameOffset:71) (firstTokenOffset:65) (offset:71)
           element: <testLibrary>::@class::B
           fields
-            #F8 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F8 synthetic isOriginGetterSetter x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@class::B::@field::x
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           setters
-            #F10 x (nameOffset:94) (firstTokenOffset:90) (offset:94)
+            #F10 isOriginDeclaration x (nameOffset:94) (firstTokenOffset:90) (offset:94)
               element: <testLibrary>::@class::B::@setter::x
               formalParameters
                 #F11 requiredPositional _ (nameOffset:100) (firstTokenOffset:96) (offset:100)
@@ -11889,24 +11906,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::A::@field::x
           firstFragment: #F2
           type: num
           getter: <testLibrary>::@class::A::@getter::x
           setter: <testLibrary>::@class::A::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@getter::x
           firstFragment: #F4
           returnType: num
           variable: <testLibrary>::@class::A::@field::x
       setters
-        abstract x
+        abstract isOriginDeclaration x
           reference: <testLibrary>::@class::A::@setter::x
           firstFragment: #F5
           formalParameters
@@ -11921,17 +11938,17 @@
       interfaces
         A
       fields
-        synthetic x
+        synthetic isOriginGetterSetter x
           reference: <testLibrary>::@class::B::@field::x
           firstFragment: #F8
           type: int
           setter: <testLibrary>::@class::B::@setter::x
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       setters
-        x
+        isOriginDeclaration x
           reference: <testLibrary>::@class::B::@setter::x
           firstFragment: #F10
           formalParameters
@@ -11961,35 +11978,35 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer t1 (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration t1 (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::t1
-            #F3 hasInitializer t2 (nameOffset:30) (firstTokenOffset:30) (offset:30)
+            #F3 hasInitializer isOriginDeclaration t2 (nameOffset:30) (firstTokenOffset:30) (offset:30)
               element: <testLibrary>::@class::A::@field::t2
-            #F4 hasInitializer t3 (nameOffset:46) (firstTokenOffset:46) (offset:46)
+            #F4 hasInitializer isOriginDeclaration t3 (nameOffset:46) (firstTokenOffset:46) (offset:46)
               element: <testLibrary>::@class::A::@field::t3
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F6 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F6 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::t1
-            #F7 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F7 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::A::@getter::t2
-            #F8 synthetic t3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F8 synthetic isOriginVariable t3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::A::@getter::t3
           setters
-            #F9 synthetic t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F9 synthetic isOriginVariable t1 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::t1
               formalParameters
                 #F10 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::A::@setter::t1::@formalParameter::value
-            #F11 synthetic t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
+            #F11 synthetic isOriginVariable t2 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
               element: <testLibrary>::@class::A::@setter::t2
               formalParameters
                 #F12 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
                   element: <testLibrary>::@class::A::@setter::t2::@formalParameter::value
-            #F13 synthetic t3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F13 synthetic isOriginVariable t3 (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::A::@setter::t3
               formalParameters
                 #F14 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
@@ -11999,46 +12016,46 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer t1
+        hasImplicitType hasInitializer isOriginDeclaration t1
           reference: <testLibrary>::@class::A::@field::t1
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::t1
           setter: <testLibrary>::@class::A::@setter::t1
-        hasInitializer t2
+        hasImplicitType hasInitializer isOriginDeclaration t2
           reference: <testLibrary>::@class::A::@field::t2
           firstFragment: #F3
           type: double
           getter: <testLibrary>::@class::A::@getter::t2
           setter: <testLibrary>::@class::A::@setter::t2
-        hasInitializer t3
+        hasImplicitType hasInitializer isOriginDeclaration t3
           reference: <testLibrary>::@class::A::@field::t3
           firstFragment: #F4
           type: dynamic
           getter: <testLibrary>::@class::A::@getter::t3
           setter: <testLibrary>::@class::A::@setter::t3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F5
       getters
-        synthetic t1
+        synthetic isOriginVariable t1
           reference: <testLibrary>::@class::A::@getter::t1
           firstFragment: #F6
           returnType: int
           variable: <testLibrary>::@class::A::@field::t1
-        synthetic t2
+        synthetic isOriginVariable t2
           reference: <testLibrary>::@class::A::@getter::t2
           firstFragment: #F7
           returnType: double
           variable: <testLibrary>::@class::A::@field::t2
-        synthetic t3
+        synthetic isOriginVariable t3
           reference: <testLibrary>::@class::A::@getter::t3
           firstFragment: #F8
           returnType: dynamic
           variable: <testLibrary>::@class::A::@field::t3
       setters
-        synthetic t1
+        synthetic isOriginVariable t1
           reference: <testLibrary>::@class::A::@setter::t1
           firstFragment: #F9
           formalParameters
@@ -12047,7 +12064,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::t1
-        synthetic t2
+        synthetic isOriginVariable t2
           reference: <testLibrary>::@class::A::@setter::t2
           firstFragment: #F11
           formalParameters
@@ -12056,7 +12073,7 @@
               type: double
           returnType: void
           variable: <testLibrary>::@class::A::@field::t2
-        synthetic t3
+        synthetic isOriginVariable t3
           reference: <testLibrary>::@class::A::@setter::t3
           firstFragment: #F13
           formalParameters
@@ -12089,7 +12106,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12101,7 +12118,7 @@
         #F5 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12117,7 +12134,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12134,7 +12151,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -12175,7 +12192,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12187,7 +12204,7 @@
         #F5 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12199,7 +12216,7 @@
         #F9 class C (nameOffset:71) (firstTokenOffset:65) (offset:71)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12213,7 +12230,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12229,7 +12246,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -12248,7 +12265,7 @@
       interfaces
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -12256,6 +12273,7 @@
         m
           reference: <testLibrary>::@class::C::@method::m
           firstFragment: #F11
+          typeInferenceError: overrideNoCombinedSuperSignature
           formalParameters
             #E2 requiredPositional hasImplicitType a
               firstFragment: #F12
@@ -12288,7 +12306,7 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12300,7 +12318,7 @@
         #F5 class B (nameOffset:55) (firstTokenOffset:40) (offset:55)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:55)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12312,7 +12330,7 @@
         #F9 class C (nameOffset:98) (firstTokenOffset:83) (offset:98)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:98)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:98)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12326,7 +12344,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12342,7 +12360,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -12361,13 +12379,14 @@
         A
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
       methods
         abstract foo
           reference: <testLibrary>::@class::C::@method::foo
           firstFragment: #F11
+          typeInferenceError: overrideNoCombinedSuperSignature
           formalParameters
             #E2 requiredPositional hasImplicitType x
               firstFragment: #F12
@@ -12399,7 +12418,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12408,7 +12427,7 @@
         #F4 class B (nameOffset:31) (firstTokenOffset:25) (offset:31)
           element: <testLibrary>::@class::B
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12417,7 +12436,7 @@
         #F7 class C (nameOffset:59) (firstTokenOffset:53) (offset:59)
           element: <testLibrary>::@class::C
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12428,7 +12447,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12440,7 +12459,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F5
       methods
@@ -12455,7 +12474,7 @@
       interfaces
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -12463,6 +12482,7 @@
         m
           reference: <testLibrary>::@class::C::@method::m
           firstFragment: #F9
+          typeInferenceError: overrideNoCombinedSuperSignature
           returnType: dynamic
 ''');
   }
@@ -12492,7 +12512,7 @@
             #F2 T (nameOffset:8) (firstTokenOffset:8) (offset:8)
               element: #E0 T
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12507,7 +12527,7 @@
             #F7 E (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: #E1 E
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12519,7 +12539,7 @@
         #F11 class C (nameOffset:70) (firstTokenOffset:64) (offset:70)
           element: <testLibrary>::@class::C
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12536,7 +12556,7 @@
         #E0 T
           firstFragment: #F2
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       methods
@@ -12556,7 +12576,7 @@
         #E1 E
           firstFragment: #F7
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
       methods
@@ -12576,7 +12596,7 @@
       interfaces
         B<double>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
           superConstructor: ConstructorMember
@@ -12586,6 +12606,7 @@
         m
           reference: <testLibrary>::@class::C::@method::m
           firstFragment: #F13
+          typeInferenceError: overrideNoCombinedSuperSignature
           formalParameters
             #E4 requiredPositional hasImplicitType a
               firstFragment: #F14
@@ -12621,7 +12642,7 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12636,7 +12657,7 @@
             #F8 T (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: #E2 T
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12648,7 +12669,7 @@
         #F12 class C (nameOffset:69) (firstTokenOffset:63) (offset:69)
           element: <testLibrary>::@class::C
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F13 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -12667,7 +12688,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -12687,7 +12708,7 @@
         #E2 T
           firstFragment: #F8
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       methods
@@ -12707,7 +12728,7 @@
       interfaces
         B<double>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F13
           superConstructor: ConstructorMember
@@ -12717,6 +12738,7 @@
         m
           reference: <testLibrary>::@class::C::@method::m
           firstFragment: #F14
+          typeInferenceError: overrideNoCombinedSuperSignature
           formalParameters
             #E5 requiredPositional hasImplicitType a
               firstFragment: #F15
@@ -12744,7 +12766,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12756,7 +12778,7 @@
         #F5 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12772,7 +12794,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12789,7 +12811,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -12827,7 +12849,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12839,7 +12861,7 @@
         #F5 class B (nameOffset:37) (firstTokenOffset:31) (offset:37)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:37)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12855,7 +12877,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12872,7 +12894,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -12910,7 +12932,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -12922,7 +12944,7 @@
         #F5 class B (nameOffset:28) (firstTokenOffset:22) (offset:28)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:28)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -12936,7 +12958,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -12953,7 +12975,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -12988,7 +13010,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13000,7 +13022,7 @@
         #F5 class B (nameOffset:47) (firstTokenOffset:41) (offset:47)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:47)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13014,7 +13036,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13031,7 +13053,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13066,17 +13088,17 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           fields
-            #F2 hasInitializer m (nameOffset:16) (firstTokenOffset:16) (offset:16)
+            #F2 hasInitializer isOriginDeclaration m (nameOffset:16) (firstTokenOffset:16) (offset:16)
               element: <testLibrary>::@class::A::@field::m
           constructors
-            #F3 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F3 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           getters
-            #F4 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F4 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@getter::m
           setters
-            #F5 synthetic m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+            #F5 synthetic isOriginVariable m (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
               element: <testLibrary>::@class::A::@setter::m
               formalParameters
                 #F6 requiredPositional value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
@@ -13084,7 +13106,7 @@
         #F7 class B (nameOffset:32) (firstTokenOffset:26) (offset:32)
           element: <testLibrary>::@class::B
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:32)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13098,24 +13120,24 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
-        hasInitializer m
+        hasInitializer isOriginDeclaration m
           reference: <testLibrary>::@class::A::@field::m
           firstFragment: #F2
           type: int
           getter: <testLibrary>::@class::A::@getter::m
           setter: <testLibrary>::@class::A::@setter::m
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F3
       getters
-        synthetic m
+        synthetic isOriginVariable m
           reference: <testLibrary>::@class::A::@getter::m
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::m
       setters
-        synthetic m
+        synthetic isOriginVariable m
           reference: <testLibrary>::@class::A::@setter::m
           firstFragment: #F5
           formalParameters
@@ -13129,7 +13151,7 @@
       firstFragment: #F7
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13170,7 +13192,7 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13185,13 +13207,13 @@
             #F8 T (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: #E2 T
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F10 class C (nameOffset:70) (firstTokenOffset:64) (offset:70)
           element: <testLibrary>::@class::C
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13210,7 +13232,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -13231,7 +13253,7 @@
           firstFragment: #F8
       supertype: A<int, T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
           superConstructor: ConstructorMember
@@ -13242,7 +13264,7 @@
       firstFragment: #F10
       supertype: B<String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F11
           superConstructor: ConstructorMember
@@ -13282,7 +13304,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13294,7 +13316,7 @@
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13306,7 +13328,7 @@
         #F9 class C (nameOffset:71) (firstTokenOffset:65) (offset:71)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:71)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13320,7 +13342,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13337,7 +13359,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13355,7 +13377,7 @@
       firstFragment: #F9
       supertype: B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
           superConstructor: <testLibrary>::@class::B::@constructor::new
@@ -13393,7 +13415,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13405,7 +13427,7 @@
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13417,7 +13439,7 @@
         #F9 class C (nameOffset:74) (firstTokenOffset:68) (offset:74)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:74)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13431,7 +13453,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13449,7 +13471,7 @@
       interfaces
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -13466,7 +13488,7 @@
       firstFragment: #F9
       supertype: B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
           superConstructor: <testLibrary>::@class::B::@constructor::new
@@ -13504,7 +13526,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13516,7 +13538,7 @@
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13528,7 +13550,7 @@
         #F9 class C (nameOffset:83) (firstTokenOffset:77) (offset:83)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -13542,7 +13564,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13561,7 +13583,7 @@
       mixins
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -13578,7 +13600,7 @@
       firstFragment: #F9
       supertype: B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
           superConstructor: <testLibrary>::@class::B::@constructor::new
@@ -13618,7 +13640,7 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13632,7 +13654,7 @@
         #F8 class B (nameOffset:48) (firstTokenOffset:42) (offset:48)
           element: <testLibrary>::@class::B
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:48)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13653,7 +13675,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -13674,7 +13696,7 @@
       firstFragment: #F8
       supertype: A<int, String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
           superConstructor: ConstructorMember
@@ -13714,7 +13736,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13726,7 +13748,7 @@
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13740,7 +13762,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13757,7 +13779,7 @@
       firstFragment: #F5
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13792,7 +13814,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13806,7 +13828,7 @@
         #F6 class B (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::B
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13822,7 +13844,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13842,7 +13864,7 @@
       firstFragment: #F6
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13880,7 +13902,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13894,7 +13916,7 @@
         #F6 class B (nameOffset:51) (firstTokenOffset:45) (offset:51)
           element: <testLibrary>::@class::B
           constructors
-            #F7 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
+            #F7 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:51)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -13910,7 +13932,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -13930,7 +13952,7 @@
       firstFragment: #F6
       supertype: A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F7
           superConstructor: <testLibrary>::@class::A::@constructor::new
@@ -13974,7 +13996,7 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -13989,13 +14011,13 @@
             #F8 T (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: #E2 T
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F10 class C (nameOffset:70) (firstTokenOffset:64) (offset:70)
           element: <testLibrary>::@class::C
           constructors
-            #F11 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
+            #F11 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:70)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -14014,7 +14036,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -14035,7 +14057,7 @@
           firstFragment: #F8
       supertype: A<int, T>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
           superConstructor: ConstructorMember
@@ -14046,7 +14068,7 @@
       firstFragment: #F10
       supertype: B<String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F11
           superConstructor: ConstructorMember
@@ -14088,7 +14110,7 @@
             #F3 V (nameOffset:20) (firstTokenOffset:20) (offset:20)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -14100,7 +14122,7 @@
         #F7 class B (nameOffset:45) (firstTokenOffset:39) (offset:45)
           element: <testLibrary>::@class::B
           constructors
-            #F8 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
+            #F8 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:45)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -14119,7 +14141,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -14138,7 +14160,7 @@
       interfaces
         A<int, String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F8
       methods
@@ -14172,7 +14194,7 @@
         #F1 class A (nameOffset:15) (firstTokenOffset:0) (offset:15)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -14184,7 +14206,7 @@
         #F5 class B (nameOffset:46) (firstTokenOffset:40) (offset:46)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -14198,7 +14220,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -14216,7 +14238,7 @@
       interfaces
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -14256,7 +14278,7 @@
             #F3 V (nameOffset:20) (firstTokenOffset:20) (offset:20)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:15)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -14273,13 +14295,13 @@
             #F9 T2 (nameOffset:60) (firstTokenOffset:60) (offset:60)
               element: #E3 T2
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:54)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
         #F11 class C (nameOffset:91) (firstTokenOffset:85) (offset:91)
           element: <testLibrary>::@class::C
           constructors
-            #F12 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
+            #F12 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:91)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -14298,7 +14320,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -14321,7 +14343,7 @@
           firstFragment: #F9
       supertype: A<T2, T1>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F10
           superConstructor: ConstructorMember
@@ -14333,7 +14355,7 @@
       interfaces
         B<int, String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F12
       methods
@@ -14374,7 +14396,7 @@
         #F1 class A1 (nameOffset:27) (firstTokenOffset:21) (offset:27)
           element: <testLibrary>::@class::A1
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:27)
               element: <testLibrary>::@class::A1::@constructor::new
               typeName: A1
           methods
@@ -14383,7 +14405,7 @@
         #F4 class A2 (nameOffset:59) (firstTokenOffset:53) (offset:59)
           element: <testLibrary>::@class::A2
           constructors
-            #F5 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
+            #F5 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
               element: <testLibrary>::@class::A2::@constructor::new
               typeName: A2
           methods
@@ -14394,7 +14416,7 @@
       reference: <testLibrary>::@class::A1
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A1::@constructor::new
           firstFragment: #F2
       methods
@@ -14407,7 +14429,7 @@
       firstFragment: #F4
       supertype: A1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A2::@constructor::new
           firstFragment: #F5
           superConstructor: <testLibrary>::@class::A1::@constructor::new
@@ -14438,7 +14460,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -14450,7 +14472,7 @@
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -14464,7 +14486,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -14483,7 +14505,7 @@
       mixins
         A
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -14525,7 +14547,7 @@
             #F3 V (nameOffset:11) (firstTokenOffset:11) (offset:11)
               element: #E1 V
           constructors
-            #F4 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F4 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -14540,7 +14562,7 @@
             #F8 T (nameOffset:40) (firstTokenOffset:40) (offset:40)
               element: #E2 T
           constructors
-            #F9 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
+            #F9 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -14552,7 +14574,7 @@
         #F12 class C (nameOffset:69) (firstTokenOffset:63) (offset:69)
           element: <testLibrary>::@class::C
           constructors
-            #F13 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
+            #F13 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:69)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -14571,7 +14593,7 @@
         #E1 V
           firstFragment: #F3
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F4
       methods
@@ -14591,7 +14613,7 @@
         #E2 T
           firstFragment: #F8
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F9
       methods
@@ -14611,7 +14633,7 @@
       interfaces
         B<String>
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F13
           superConstructor: ConstructorMember
@@ -14651,7 +14673,7 @@
         #F1 class A (nameOffset:6) (firstTokenOffset:0) (offset:6)
           element: <testLibrary>::@class::A
           constructors
-            #F2 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
+            #F2 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
               element: <testLibrary>::@class::A::@constructor::new
               typeName: A
           methods
@@ -14663,7 +14685,7 @@
         #F5 class B (nameOffset:39) (firstTokenOffset:33) (offset:39)
           element: <testLibrary>::@class::B
           constructors
-            #F6 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
+            #F6 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:39)
               element: <testLibrary>::@class::B::@constructor::new
               typeName: B
           methods
@@ -14675,7 +14697,7 @@
         #F9 class C (nameOffset:72) (firstTokenOffset:66) (offset:72)
           element: <testLibrary>::@class::C
           constructors
-            #F10 synthetic new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
+            #F10 synthetic isOriginImplicitDefault new (nameOffset:<null>) (firstTokenOffset:<null>) (offset:72)
               element: <testLibrary>::@class::C::@constructor::new
               typeName: C
           methods
@@ -14689,7 +14711,7 @@
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::A::@constructor::new
           firstFragment: #F2
       methods
@@ -14705,7 +14727,7 @@
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::B::@constructor::new
           firstFragment: #F6
       methods
@@ -14724,7 +14746,7 @@
       interfaces
         B
       constructors
-        synthetic new
+        synthetic isOriginImplicitDefault new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F10
           superConstructor: <testLibrary>::@class::A::@constructor::new
diff --git a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
index dc5498e..38bc803 100644
--- a/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
+++ b/pkg/analyzer/test/src/task/strong/dart2_inference_test.dart
@@ -5,7 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/function_ast_visitor.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -183,7 +183,7 @@
   var /*@type=B*/ v = topLevel += 1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 152, 1)],
+      [error(diag.unusedLocalVariable, 152, 1)],
     );
     _assertTypeAnnotations();
   }
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index 8b72343..e38f998 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -4,8 +4,9 @@
 
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/utilities/extensions/file_system.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -35,7 +36,7 @@
 var f = () => futureInt;
 var g = () async => futureInt;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 24, 4)],
+      [error(diag.invalidAssignment, 24, 4)],
     );
     var futureInt = _resultLibraryElement.topLevelVariables[0];
     expect(futureInt.name, 'futureInt');
@@ -65,7 +66,7 @@
 var f = () => futureOrInt;
 var g = () async => futureOrInt;
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 49, 4)],
+      [error(diag.invalidAssignment, 49, 4)],
     );
     var futureOrInt = _resultLibraryElement.topLevelVariables[0];
     expect(futureOrInt.name, 'futureOrInt');
@@ -95,9 +96,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 218, 1),
-        error(WarningCode.unusedLocalVariable, 241, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 245, 3),
+        error(diag.unusedLocalVariable, 218, 1),
+        error(diag.unusedLocalVariable, 241, 1),
+        error(diag.invalidAssignment, 245, 3),
       ],
     );
 
@@ -122,9 +123,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 169, 1),
-        error(WarningCode.unusedLocalVariable, 192, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 196, 3),
+        error(diag.unusedLocalVariable, 169, 1),
+        error(diag.unusedLocalVariable, 192, 1),
+        error(diag.invalidAssignment, 196, 3),
       ],
     );
 
@@ -149,9 +150,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 192, 1),
-        error(WarningCode.unusedLocalVariable, 215, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 219, 3),
+        error(diag.unusedLocalVariable, 192, 1),
+        error(diag.unusedLocalVariable, 215, 1),
+        error(diag.invalidAssignment, 219, 3),
       ],
     );
 
@@ -173,14 +174,10 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          77,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 99, 1),
-        error(WarningCode.unusedLocalVariable, 122, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 126, 3),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 77, 1),
+        error(diag.unusedLocalVariable, 99, 1),
+        error(diag.unusedLocalVariable, 122, 1),
+        error(diag.invalidAssignment, 126, 3),
       ],
     );
 
@@ -198,12 +195,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          35,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 81, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 35, 1),
+        error(diag.unusedLocalVariable, 81, 1),
       ],
     );
   }
@@ -218,9 +211,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 25, 4),
-        error(WarningCode.unusedLocalVariable, 37, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 62, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 25, 4),
+        error(diag.unusedLocalVariable, 37, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 62, 1),
       ],
     );
 
@@ -234,7 +227,7 @@
 String f() => null;
 var g = f;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 14, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 14, 4)],
     );
     var g = _resultLibraryElement.topLevelVariables[0];
     _assertTypeStr(g.type, 'String Function()');
@@ -251,11 +244,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 61, 1),
-        error(WarningCode.unusedLocalVariable, 87, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 91, 3),
-        error(WarningCode.unusedLocalVariable, 105, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 109, 9),
+        error(diag.unusedLocalVariable, 61, 1),
+        error(diag.unusedLocalVariable, 87, 1),
+        error(diag.invalidAssignment, 91, 3),
+        error(diag.unusedLocalVariable, 105, 1),
+        error(diag.invalidAssignment, 109, 9),
       ],
     );
 
@@ -274,11 +267,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 61, 1),
-        error(WarningCode.unusedLocalVariable, 87, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 91, 3),
-        error(WarningCode.unusedLocalVariable, 105, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 109, 15),
+        error(diag.unusedLocalVariable, 61, 1),
+        error(diag.unusedLocalVariable, 87, 1),
+        error(diag.invalidAssignment, 91, 3),
+        error(diag.unusedLocalVariable, 105, 1),
+        error(diag.invalidAssignment, 109, 15),
       ],
     );
 
@@ -303,10 +296,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 101, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 105, 5),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 126, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 155, 4),
+        error(diag.unusedLocalVariable, 101, 1),
+        error(diag.invalidAssignment, 105, 5),
+        error(diag.returnOfInvalidTypeFromClosure, 126, 7),
+        error(diag.returnOfInvalidTypeFromClosure, 155, 4),
       ],
     );
 
@@ -325,11 +318,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 56, 1),
-        error(WarningCode.unusedLocalVariable, 84, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 88, 3),
-        error(WarningCode.unusedLocalVariable, 102, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 106, 9),
+        error(diag.unusedLocalVariable, 56, 1),
+        error(diag.unusedLocalVariable, 84, 1),
+        error(diag.invalidAssignment, 88, 3),
+        error(diag.unusedLocalVariable, 102, 1),
+        error(diag.invalidAssignment, 106, 9),
       ],
     );
 
@@ -355,14 +348,10 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          67,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 210, 1),
-        error(WarningCode.unusedLocalVariable, 233, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 237, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 67, 1),
+        error(diag.unusedLocalVariable, 210, 1),
+        error(diag.unusedLocalVariable, 233, 1),
+        error(diag.invalidAssignment, 237, 1),
       ],
     );
   }
@@ -377,7 +366,7 @@
   };
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var f = findElement2.localVar('f');
@@ -394,13 +383,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          35,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 67, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 71, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 35, 1),
+        error(diag.unusedLocalVariable, 67, 1),
+        error(diag.invalidAssignment, 71, 1),
       ],
     );
 
@@ -421,9 +406,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 85, 1),
-        error(WarningCode.unusedLocalVariable, 110, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 114, 3),
+        error(diag.unusedLocalVariable, 85, 1),
+        error(diag.unusedLocalVariable, 110, 1),
+        error(diag.invalidAssignment, 114, 3),
       ],
     );
 
@@ -453,10 +438,7 @@
 var x = () => y;
 var y = () => x;
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 4, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 21, 1),
-      ],
+      [error(diag.topLevelCycle, 4, 1), error(diag.topLevelCycle, 21, 1)],
     );
 
     var x = _resultLibraryElement.topLevelVariables[0];
@@ -475,10 +457,7 @@
 var x = () => y;
 var y = () => x;
 ''',
-      [
-        error(CompileTimeErrorCode.topLevelCycle, 4, 1),
-        error(CompileTimeErrorCode.topLevelCycle, 21, 1),
-      ],
+      [error(diag.topLevelCycle, 4, 1), error(diag.topLevelCycle, 21, 1)],
     );
 
     var x = _resultLibraryElement.topLevelVariables[0];
@@ -521,37 +500,21 @@
 }
 ''',
       [
+        error(diag.notInitializedNonNullableInstanceField, 17, 1),
+        error(diag.notInitializedNonNullableInstanceField, 39, 1),
+        error(diag.notInitializedNonNullableInstanceField, 80, 1),
+        error(diag.notInitializedNonNullableInstanceField, 89, 1),
+        error(diag.invalidAssignment, 120, 4),
+        error(diag.invalidAssignment, 154, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 204, 4),
         error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          17,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          39,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          80,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          89,
-          1,
-        ),
-        error(CompileTimeErrorCode.invalidAssignment, 120, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 154, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 204, 4),
-        error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           246,
           1,
           contextMessages: [message(testFile, 116, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           246,
           1,
           contextMessages: [message(testFile, 150, 1)],
@@ -571,7 +534,7 @@
   Foo<B> foo = new Foo();
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 81, 3)],
+      [error(diag.unusedLocalVariable, 81, 3)],
     );
   }
 
@@ -600,17 +563,13 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 85, 5),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          99,
-          1,
-        ),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 99, 1),
-        error(WarningCode.unusedLocalVariable, 194, 5),
-        error(WarningCode.unusedLocalVariable, 223, 6),
-        error(WarningCode.unusedLocalVariable, 309, 9),
-        error(CompileTimeErrorCode.invalidAssignment, 349, 7),
+        error(diag.unusedLocalVariable, 85, 5),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 99, 1),
+        error(diag.argumentTypeNotAssignable, 99, 1),
+        error(diag.unusedLocalVariable, 194, 5),
+        error(diag.unusedLocalVariable, 223, 6),
+        error(diag.unusedLocalVariable, 309, 9),
+        error(diag.invalidAssignment, 349, 7),
       ],
     );
 
@@ -632,7 +591,7 @@
   var x = const C(42);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 63, 1)],
+      [error(diag.unusedLocalVariable, 63, 1)],
     );
 
     var x = findElement2.localVar('x');
@@ -657,8 +616,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 143, 2),
-        error(WarningCode.unusedLocalVariable, 166, 1),
+        error(diag.unusedLocalVariable, 143, 2),
+        error(diag.unusedLocalVariable, 166, 1),
       ],
     );
   }
@@ -678,9 +637,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 75, 1),
-        error(WarningCode.unusedLocalVariable, 89, 1),
-        error(WarningCode.unusedLocalVariable, 151, 1),
+        error(diag.unusedLocalVariable, 75, 1),
+        error(diag.unusedLocalVariable, 89, 1),
+        error(diag.unusedLocalVariable, 151, 1),
       ],
     );
   }
@@ -707,13 +666,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          23,
-          1,
-        ),
-        error(CompileTimeErrorCode.invalidAssignment, 149, 7),
+        error(diag.notInitializedNonNullableInstanceFieldConstructor, 23, 3),
+        error(diag.invalidAssignment, 149, 7),
       ],
     );
 
@@ -747,13 +701,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          22,
-          1,
-        ),
-        error(CompileTimeErrorCode.invalidAssignment, 95, 7),
+        error(diag.notInitializedNonNullableInstanceFieldConstructor, 22, 7),
+        error(diag.invalidAssignment, 95, 7),
       ],
     );
 
@@ -782,13 +731,8 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          22,
-          1,
-        ),
-        error(CompileTimeErrorCode.invalidAssignment, 156, 7),
+        error(diag.notInitializedNonNullableInstanceFieldConstructor, 22, 1),
+        error(diag.invalidAssignment, 156, 7),
       ],
     );
 
@@ -811,7 +755,7 @@
   x.t = 'hello';
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 123, 7)],
+      [error(diag.invalidAssignment, 123, 7)],
     );
 
     var x = findElement2.localVar('x');
@@ -838,7 +782,7 @@
   x.t = 'hello';
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 183, 7)],
+      [error(diag.invalidAssignment, 183, 7)],
     );
 
     var x = findElement2.localVar('x');
@@ -866,8 +810,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 29, 1),
-        error(CompileTimeErrorCode.extraPositionalArguments, 39, 2),
+        error(diag.unusedLocalVariable, 29, 1),
+        error(diag.extraPositionalArguments, 39, 2),
       ],
     );
 
@@ -893,13 +837,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           69,
           1,
           contextMessages: [message(testFile, 22, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 97, 1),
-        error(WarningCode.unusedLocalVariable, 118, 1),
+        error(diag.unusedLocalVariable, 97, 1),
+        error(diag.unusedLocalVariable, 118, 1),
       ],
     );
   }
@@ -927,9 +871,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 140, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 168, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 210, 4),
+        error(diag.invalidAssignment, 140, 4),
+        error(diag.invalidAssignment, 168, 4),
+        error(diag.invalidAssignment, 210, 4),
       ],
     );
   }
@@ -942,7 +886,7 @@
   x = "hi";
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 19, 1)],
+      [error(diag.unusedLocalVariable, 19, 1)],
     );
   }
 
@@ -955,7 +899,7 @@
   x = 3;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
   }
 
@@ -980,7 +924,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 266, 1)],
+      [error(diag.unusedLocalVariable, 266, 1)],
     );
   }
 
@@ -1001,13 +945,7 @@
             new B(3)
          ];
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          19,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 19, 1)],
     );
   }
 
@@ -1034,8 +972,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 26, 1),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 36, 7),
+        error(diag.unusedLocalVariable, 26, 1),
+        error(diag.listElementTypeNotAssignable, 36, 7),
       ],
     );
   }
@@ -1050,8 +988,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 47, 2),
-        error(WarningCode.unusedLocalVariable, 75, 2),
+        error(diag.unusedLocalVariable, 47, 2),
+        error(diag.unusedLocalVariable, 75, 2),
       ],
     );
   }
@@ -1069,8 +1007,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 115, 1),
-        error(WarningCode.unusedLocalVariable, 150, 1),
+        error(diag.unusedLocalVariable, 115, 1),
+        error(diag.unusedLocalVariable, 150, 1),
       ],
     );
   }
@@ -1088,14 +1026,7 @@
 // We do this inference in an early task but don't preserve the infos.
 Function2<List<int>, String> g = ([llll = const [1]]) => "hello";
 ''',
-      [
-        error(
-          CompileTimeErrorCode
-              .notInitializedNonNullableInstanceFieldConstructor,
-          92,
-          3,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceFieldConstructor, 92, 9)],
     );
   }
 
@@ -1145,18 +1076,18 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 61, 1),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 197, 1),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 259, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 280, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 343, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 367, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 421, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 442, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 499, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 522, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 591, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 617, 7),
+        error(diag.missingDefaultValueForParameter, 61, 1),
+        error(diag.missingDefaultValueForParameter, 197, 1),
+        error(diag.listElementTypeNotAssignable, 259, 7),
+        error(diag.listElementTypeNotAssignable, 280, 7),
+        error(diag.listElementTypeNotAssignable, 343, 7),
+        error(diag.listElementTypeNotAssignable, 367, 7),
+        error(diag.listElementTypeNotAssignable, 421, 7),
+        error(diag.listElementTypeNotAssignable, 442, 7),
+        error(diag.listElementTypeNotAssignable, 499, 7),
+        error(diag.listElementTypeNotAssignable, 522, 7),
+        error(diag.listElementTypeNotAssignable, 591, 7),
+        error(diag.listElementTypeNotAssignable, 617, 7),
       ],
     );
   }
@@ -1197,18 +1128,18 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 43, 1),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 149, 1),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 197, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 214, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 265, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 285, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 327, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 344, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 389, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 408, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 465, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 487, 7),
+        error(diag.missingDefaultValueForParameter, 43, 1),
+        error(diag.missingDefaultValueForParameter, 149, 1),
+        error(diag.listElementTypeNotAssignable, 197, 7),
+        error(diag.listElementTypeNotAssignable, 214, 7),
+        error(diag.listElementTypeNotAssignable, 265, 7),
+        error(diag.listElementTypeNotAssignable, 285, 7),
+        error(diag.listElementTypeNotAssignable, 327, 7),
+        error(diag.listElementTypeNotAssignable, 344, 7),
+        error(diag.listElementTypeNotAssignable, 389, 7),
+        error(diag.listElementTypeNotAssignable, 408, 7),
+        error(diag.listElementTypeNotAssignable, 465, 7),
+        error(diag.listElementTypeNotAssignable, 487, 7),
       ],
     );
   }
@@ -1250,40 +1181,40 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 79, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 95, 4),
-        error(WarningCode.unusedLocalVariable, 128, 2),
-        error(WarningCode.unusedLocalVariable, 180, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 185, 21),
-        error(WarningCode.unusedLocalVariable, 235, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 251, 1),
-        error(WarningCode.unusedLocalVariable, 281, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 302, 1),
-        error(WarningCode.unusedLocalVariable, 342, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 354, 4),
-        error(WarningCode.unusedLocalVariable, 387, 2),
-        error(WarningCode.unusedLocalVariable, 435, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 447, 1),
-        error(WarningCode.unusedLocalVariable, 477, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 494, 1),
-        error(WarningCode.unusedLocalVariable, 526, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 543, 1),
-        error(WarningCode.unusedLocalVariable, 589, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 605, 4),
-        error(WarningCode.unusedLocalVariable, 644, 2),
-        error(WarningCode.unusedLocalVariable, 704, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 709, 23),
-        error(WarningCode.unusedLocalVariable, 767, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 784, 1),
-        error(WarningCode.unusedLocalVariable, 821, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 843, 1),
-        error(WarningCode.unusedLocalVariable, 881, 2),
-        error(WarningCode.unusedLocalVariable, 920, 2),
-        error(WarningCode.unusedLocalVariable, 964, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 976, 1),
-        error(WarningCode.unusedLocalVariable, 1006, 2),
-        error(CompileTimeErrorCode.undefinedMethod, 1020, 9),
-        error(WarningCode.unusedLocalVariable, 1064, 2),
+        error(diag.unusedLocalVariable, 79, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 95, 4),
+        error(diag.unusedLocalVariable, 128, 2),
+        error(diag.unusedLocalVariable, 180, 2),
+        error(diag.invalidAssignment, 185, 21),
+        error(diag.unusedLocalVariable, 235, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 251, 1),
+        error(diag.unusedLocalVariable, 281, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 302, 1),
+        error(diag.unusedLocalVariable, 342, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 354, 4),
+        error(diag.unusedLocalVariable, 387, 2),
+        error(diag.unusedLocalVariable, 435, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 447, 1),
+        error(diag.unusedLocalVariable, 477, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 494, 1),
+        error(diag.unusedLocalVariable, 526, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 543, 1),
+        error(diag.unusedLocalVariable, 589, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 605, 4),
+        error(diag.unusedLocalVariable, 644, 2),
+        error(diag.unusedLocalVariable, 704, 2),
+        error(diag.invalidAssignment, 709, 23),
+        error(diag.unusedLocalVariable, 767, 2),
+        error(diag.listElementTypeNotAssignable, 784, 1),
+        error(diag.unusedLocalVariable, 821, 2),
+        error(diag.listElementTypeNotAssignable, 843, 1),
+        error(diag.unusedLocalVariable, 881, 2),
+        error(diag.unusedLocalVariable, 920, 2),
+        error(diag.unusedLocalVariable, 964, 2),
+        error(diag.returnOfInvalidTypeFromClosure, 976, 1),
+        error(diag.unusedLocalVariable, 1006, 2),
+        error(diag.undefinedMethod, 1020, 9),
+        error(diag.unusedLocalVariable, 1064, 2),
       ],
     );
   }
@@ -1310,14 +1241,14 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 38, 4),
-        error(WarningCode.unusedLocalVariable, 52, 2),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 115, 4),
-        error(WarningCode.unusedLocalVariable, 179, 1),
-        error(WarningCode.unusedLocalVariable, 212, 1),
-        error(WarningCode.unusedLocalVariable, 253, 1),
-        error(WarningCode.unusedLocalVariable, 288, 1),
-        error(WarningCode.unusedLocalVariable, 318, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 38, 4),
+        error(diag.unusedLocalVariable, 52, 2),
+        error(diag.returnOfInvalidTypeFromFunction, 115, 4),
+        error(diag.unusedLocalVariable, 179, 1),
+        error(diag.unusedLocalVariable, 212, 1),
+        error(diag.unusedLocalVariable, 253, 1),
+        error(diag.unusedLocalVariable, 288, 1),
+        error(diag.unusedLocalVariable, 318, 1),
       ],
     );
   }
@@ -1336,7 +1267,7 @@
   new F4(a: []);
 }
 ''',
-      [error(CompileTimeErrorCode.missingDefaultValueForParameter, 91, 1)],
+      [error(diag.missingDefaultValueForParameter, 91, 1)],
     );
   }
 
@@ -1401,21 +1332,21 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 63, 1),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 202, 1),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 338, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 364, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 442, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 471, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 540, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 566, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 638, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 666, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 750, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 781, 7),
-        error(WarningCode.unusedLocalVariable, 819, 3),
-        error(WarningCode.unusedLocalVariable, 846, 3),
-        error(WarningCode.unusedLocalVariable, 879, 3),
+        error(diag.missingDefaultValueForParameter, 63, 1),
+        error(diag.missingDefaultValueForParameter, 202, 1),
+        error(diag.listElementTypeNotAssignable, 338, 7),
+        error(diag.listElementTypeNotAssignable, 364, 7),
+        error(diag.listElementTypeNotAssignable, 442, 7),
+        error(diag.listElementTypeNotAssignable, 471, 7),
+        error(diag.listElementTypeNotAssignable, 540, 7),
+        error(diag.listElementTypeNotAssignable, 566, 7),
+        error(diag.listElementTypeNotAssignable, 638, 7),
+        error(diag.listElementTypeNotAssignable, 666, 7),
+        error(diag.listElementTypeNotAssignable, 750, 7),
+        error(diag.listElementTypeNotAssignable, 781, 7),
+        error(diag.unusedLocalVariable, 819, 3),
+        error(diag.unusedLocalVariable, 846, 3),
+        error(diag.unusedLocalVariable, 879, 3),
       ],
     );
   }
@@ -1467,32 +1398,32 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 45, 4),
-        error(WarningCode.unusedLocalVariable, 59, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 88, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 133, 24),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 181, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 211, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 250, 4),
-        error(WarningCode.unusedLocalVariable, 264, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 289, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 340, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 366, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 394, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 439, 4),
-        error(WarningCode.unusedLocalVariable, 453, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 482, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 529, 26),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 580, 1),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 612, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 655, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 696, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 743, 4),
-        error(WarningCode.unusedLocalVariable, 757, 1),
-        error(WarningCode.unusedLocalVariable, 822, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 856, 1),
-        error(CompileTimeErrorCode.undefinedMethod, 879, 9),
-        error(WarningCode.unusedLocalVariable, 901, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 45, 4),
+        error(diag.unusedLocalVariable, 59, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 88, 4),
+        error(diag.invalidAssignment, 133, 24),
+        error(diag.returnOfInvalidTypeFromClosure, 181, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 211, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 250, 4),
+        error(diag.unusedLocalVariable, 264, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 289, 4),
+        error(diag.returnOfInvalidTypeFromClosure, 340, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 366, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 394, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 439, 4),
+        error(diag.unusedLocalVariable, 453, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 482, 4),
+        error(diag.invalidAssignment, 529, 26),
+        error(diag.listElementTypeNotAssignable, 580, 1),
+        error(diag.listElementTypeNotAssignable, 612, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 655, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 696, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 743, 4),
+        error(diag.unusedLocalVariable, 757, 1),
+        error(diag.unusedLocalVariable, 822, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 856, 1),
+        error(diag.undefinedMethod, 879, 9),
+        error(diag.unusedLocalVariable, 901, 1),
       ],
     );
   }
@@ -1598,83 +1529,75 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 427, 4),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 495, 1),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 506, 1),
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          548,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          553,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 612, 2),
-        error(WarningCode.unusedLocalVariable, 655, 2),
-        error(WarningCode.unusedLocalVariable, 704, 2),
-        error(WarningCode.unusedLocalVariable, 760, 2),
-        error(WarningCode.unusedLocalVariable, 822, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 827, 31),
-        error(WarningCode.unusedLocalVariable, 879, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 884, 41),
-        error(WarningCode.unusedLocalVariable, 954, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 965, 7),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 974, 1),
-        error(WarningCode.unusedLocalVariable, 997, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1014, 7),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1023, 1),
-        error(WarningCode.unusedLocalVariable, 1054, 2),
-        error(WarningCode.unusedLocalVariable, 1097, 2),
-        error(WarningCode.unusedLocalVariable, 1146, 2),
-        error(WarningCode.unusedLocalVariable, 1202, 2),
-        error(WarningCode.unusedLocalVariable, 1264, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1269, 34),
-        error(WarningCode.unusedLocalVariable, 1324, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1329, 41),
-        error(WarningCode.unusedLocalVariable, 1399, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1410, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1413, 7),
-        error(WarningCode.unusedLocalVariable, 1442, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1459, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1462, 7),
-        error(WarningCode.unusedLocalVariable, 1496, 2),
-        error(WarningCode.unusedLocalVariable, 1527, 2),
-        error(WarningCode.unusedLocalVariable, 1564, 2),
-        error(WarningCode.unusedLocalVariable, 1600, 2),
-        error(WarningCode.unusedLocalVariable, 1642, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1647, 17),
-        error(WarningCode.unusedLocalVariable, 1682, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1687, 23),
-        error(WarningCode.unusedLocalVariable, 1736, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1747, 7),
-        error(WarningCode.unusedLocalVariable, 1773, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 1790, 7),
-        error(WarningCode.unusedLocalVariable, 1827, 2),
-        error(WarningCode.unusedLocalVariable, 1867, 2),
-        error(WarningCode.unusedLocalVariable, 1913, 2),
-        error(WarningCode.unusedLocalVariable, 1966, 2),
-        error(WarningCode.unusedLocalVariable, 2028, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 2033, 28),
-        error(WarningCode.unusedLocalVariable, 2082, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 2087, 38),
-        error(WarningCode.unusedLocalVariable, 2154, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 2165, 1),
-        error(WarningCode.unusedLocalVariable, 2188, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 2205, 1),
-        error(WarningCode.unusedLocalVariable, 2239, 2),
-        error(WarningCode.unusedLocalVariable, 2325, 2),
-        error(WarningCode.unusedLocalVariable, 2406, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 2441, 7),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 2463, 1),
-        error(WarningCode.unusedLocalVariable, 2487, 2),
-        error(WarningCode.unusedLocalVariable, 2548, 2),
-        error(WarningCode.unusedLocalVariable, 2597, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 2626, 7),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 2635, 1),
-        error(WarningCode.unusedLocalVariable, 2658, 2),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 2687, 7),
+        error(diag.argumentTypeNotAssignable, 427, 4),
+        error(diag.missingDefaultValueForParameter, 495, 1),
+        error(diag.missingDefaultValueForParameter, 506, 1),
+        error(diag.missingDefaultValueForParameterPositional, 548, 1),
+        error(diag.missingDefaultValueForParameterPositional, 553, 1),
+        error(diag.unusedLocalVariable, 612, 2),
+        error(diag.unusedLocalVariable, 655, 2),
+        error(diag.unusedLocalVariable, 704, 2),
+        error(diag.unusedLocalVariable, 760, 2),
+        error(diag.unusedLocalVariable, 822, 2),
+        error(diag.invalidAssignment, 827, 31),
+        error(diag.unusedLocalVariable, 879, 2),
+        error(diag.invalidAssignment, 884, 41),
+        error(diag.unusedLocalVariable, 954, 2),
+        error(diag.argumentTypeNotAssignable, 965, 7),
+        error(diag.argumentTypeNotAssignable, 974, 1),
+        error(diag.unusedLocalVariable, 997, 2),
+        error(diag.argumentTypeNotAssignable, 1014, 7),
+        error(diag.argumentTypeNotAssignable, 1023, 1),
+        error(diag.unusedLocalVariable, 1054, 2),
+        error(diag.unusedLocalVariable, 1097, 2),
+        error(diag.unusedLocalVariable, 1146, 2),
+        error(diag.unusedLocalVariable, 1202, 2),
+        error(diag.unusedLocalVariable, 1264, 2),
+        error(diag.invalidAssignment, 1269, 34),
+        error(diag.unusedLocalVariable, 1324, 2),
+        error(diag.invalidAssignment, 1329, 41),
+        error(diag.unusedLocalVariable, 1399, 2),
+        error(diag.argumentTypeNotAssignable, 1410, 1),
+        error(diag.argumentTypeNotAssignable, 1413, 7),
+        error(diag.unusedLocalVariable, 1442, 2),
+        error(diag.argumentTypeNotAssignable, 1459, 1),
+        error(diag.argumentTypeNotAssignable, 1462, 7),
+        error(diag.unusedLocalVariable, 1496, 2),
+        error(diag.unusedLocalVariable, 1527, 2),
+        error(diag.unusedLocalVariable, 1564, 2),
+        error(diag.unusedLocalVariable, 1600, 2),
+        error(diag.unusedLocalVariable, 1642, 2),
+        error(diag.invalidAssignment, 1647, 17),
+        error(diag.unusedLocalVariable, 1682, 2),
+        error(diag.invalidAssignment, 1687, 23),
+        error(diag.unusedLocalVariable, 1736, 2),
+        error(diag.argumentTypeNotAssignable, 1747, 7),
+        error(diag.unusedLocalVariable, 1773, 2),
+        error(diag.argumentTypeNotAssignable, 1790, 7),
+        error(diag.unusedLocalVariable, 1827, 2),
+        error(diag.unusedLocalVariable, 1867, 2),
+        error(diag.unusedLocalVariable, 1913, 2),
+        error(diag.unusedLocalVariable, 1966, 2),
+        error(diag.unusedLocalVariable, 2028, 2),
+        error(diag.invalidAssignment, 2033, 28),
+        error(diag.unusedLocalVariable, 2082, 2),
+        error(diag.invalidAssignment, 2087, 38),
+        error(diag.unusedLocalVariable, 2154, 2),
+        error(diag.argumentTypeNotAssignable, 2165, 1),
+        error(diag.unusedLocalVariable, 2188, 2),
+        error(diag.argumentTypeNotAssignable, 2205, 1),
+        error(diag.unusedLocalVariable, 2239, 2),
+        error(diag.unusedLocalVariable, 2325, 2),
+        error(diag.unusedLocalVariable, 2406, 2),
+        error(diag.listElementTypeNotAssignable, 2441, 7),
+        error(diag.listElementTypeNotAssignable, 2463, 1),
+        error(diag.unusedLocalVariable, 2487, 2),
+        error(diag.unusedLocalVariable, 2548, 2),
+        error(diag.unusedLocalVariable, 2597, 2),
+        error(diag.argumentTypeNotAssignable, 2626, 7),
+        error(diag.argumentTypeNotAssignable, 2635, 1),
+        error(diag.unusedLocalVariable, 2658, 2),
+        error(diag.argumentTypeNotAssignable, 2687, 7),
       ],
     );
   }
@@ -1720,39 +1643,39 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 79, 2),
-        error(WarningCode.unusedLocalVariable, 122, 2),
-        error(WarningCode.unusedLocalVariable, 145, 2),
-        error(WarningCode.unusedLocalVariable, 169, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 175, 7),
-        error(WarningCode.unusedLocalVariable, 199, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 205, 7),
-        error(WarningCode.unusedLocalVariable, 244, 2),
-        error(WarningCode.unusedLocalVariable, 271, 2),
-        error(WarningCode.unusedLocalVariable, 299, 2),
-        error(WarningCode.unusedLocalVariable, 333, 2),
-        error(WarningCode.unusedLocalVariable, 374, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 379, 7),
-        error(WarningCode.unusedLocalVariable, 402, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 407, 8),
-        error(WarningCode.unusedLocalVariable, 431, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 436, 14),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 442, 7),
-        error(WarningCode.unusedLocalVariable, 466, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 471, 17),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 477, 7),
-        error(WarningCode.unusedLocalVariable, 516, 2),
-        error(WarningCode.unusedLocalVariable, 543, 2),
-        error(WarningCode.unusedLocalVariable, 571, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 577, 7),
-        error(WarningCode.unusedLocalVariable, 605, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 611, 7),
-        error(WarningCode.unusedLocalVariable, 652, 2),
-        error(WarningCode.unusedLocalVariable, 687, 2),
-        error(WarningCode.unusedLocalVariable, 723, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 735, 7),
-        error(WarningCode.unusedLocalVariable, 765, 2),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 777, 7),
+        error(diag.listElementTypeNotAssignable, 79, 2),
+        error(diag.unusedLocalVariable, 122, 2),
+        error(diag.unusedLocalVariable, 145, 2),
+        error(diag.unusedLocalVariable, 169, 2),
+        error(diag.listElementTypeNotAssignable, 175, 7),
+        error(diag.unusedLocalVariable, 199, 2),
+        error(diag.listElementTypeNotAssignable, 205, 7),
+        error(diag.unusedLocalVariable, 244, 2),
+        error(diag.unusedLocalVariable, 271, 2),
+        error(diag.unusedLocalVariable, 299, 2),
+        error(diag.unusedLocalVariable, 333, 2),
+        error(diag.unusedLocalVariable, 374, 2),
+        error(diag.invalidAssignment, 379, 7),
+        error(diag.unusedLocalVariable, 402, 2),
+        error(diag.invalidAssignment, 407, 8),
+        error(diag.unusedLocalVariable, 431, 2),
+        error(diag.invalidAssignment, 436, 14),
+        error(diag.listElementTypeNotAssignable, 442, 7),
+        error(diag.unusedLocalVariable, 466, 2),
+        error(diag.invalidAssignment, 471, 17),
+        error(diag.listElementTypeNotAssignable, 477, 7),
+        error(diag.unusedLocalVariable, 516, 2),
+        error(diag.unusedLocalVariable, 543, 2),
+        error(diag.unusedLocalVariable, 571, 2),
+        error(diag.listElementTypeNotAssignable, 577, 7),
+        error(diag.unusedLocalVariable, 605, 2),
+        error(diag.listElementTypeNotAssignable, 611, 7),
+        error(diag.unusedLocalVariable, 652, 2),
+        error(diag.unusedLocalVariable, 687, 2),
+        error(diag.unusedLocalVariable, 723, 2),
+        error(diag.listElementTypeNotAssignable, 735, 7),
+        error(diag.unusedLocalVariable, 765, 2),
+        error(diag.listElementTypeNotAssignable, 777, 7),
       ],
     );
   }
@@ -1816,47 +1739,19 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 122, 6),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 149, 9),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 241, 9),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 330, 4),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          391,
-          9,
-        ),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          813,
-          9,
-        ),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 1181, 9),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 1261, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          1344,
-          9,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          1526,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          1562,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          1611,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          1647,
-          1,
-        ),
+        error(diag.notInitializedNonNullableVariable, 122, 6),
+        error(diag.notInitializedNonNullableVariable, 149, 9),
+        error(diag.notInitializedNonNullableVariable, 241, 9),
+        error(diag.returnOfInvalidTypeFromFunction, 330, 4),
+        error(diag.notInitializedNonNullableInstanceField, 391, 9),
+        error(diag.notInitializedNonNullableInstanceField, 813, 9),
+        error(diag.notInitializedNonNullableVariable, 1181, 9),
+        error(diag.returnOfInvalidTypeFromFunction, 1261, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 1344, 9),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 1526, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 1562, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 1611, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 1647, 1),
       ],
     );
   }
@@ -1936,50 +1831,50 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 173, 7),
-        error(WarningCode.unusedLocalVariable, 241, 2),
-        error(WarningCode.unusedLocalVariable, 271, 2),
-        error(WarningCode.unusedLocalVariable, 311, 2),
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 324, 7),
-        error(WarningCode.unusedLocalVariable, 369, 2),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 385, 1),
-        error(WarningCode.unusedLocalVariable, 415, 2),
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 446, 7),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 455, 1),
-        error(WarningCode.unusedLocalVariable, 498, 2),
-        error(WarningCode.unusedLocalVariable, 533, 2),
-        error(WarningCode.unusedLocalVariable, 578, 2),
-        error(WarningCode.unusedLocalVariable, 629, 2),
-        error(WarningCode.unusedLocalVariable, 668, 2),
-        error(WarningCode.unusedLocalVariable, 731, 2),
-        error(WarningCode.unusedLocalVariable, 765, 2),
-        error(WarningCode.unusedLocalVariable, 809, 2),
-        error(WarningCode.unusedLocalVariable, 859, 2),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 868, 1),
-        error(WarningCode.unusedLocalVariable, 897, 2),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 937, 1),
-        error(WarningCode.unusedLocalVariable, 976, 2),
-        error(WarningCode.unusedLocalVariable, 1007, 2),
-        error(WarningCode.unusedLocalVariable, 1048, 2),
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 1061, 7),
-        error(WarningCode.unusedLocalVariable, 1107, 2),
-        error(WarningCode.unusedLocalVariable, 1142, 2),
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 1172, 7),
-        error(WarningCode.unusedLocalVariable, 1219, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1224, 16),
-        error(WarningCode.unusedLocalVariable, 1263, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1268, 26),
-        error(WarningCode.unusedLocalVariable, 1317, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 1322, 20),
-        error(WarningCode.unusedLocalVariable, 1379, 2),
-        error(WarningCode.unusedLocalVariable, 1421, 2),
-        error(WarningCode.unusedLocalVariable, 1473, 2),
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 1492, 7),
-        error(WarningCode.unusedLocalVariable, 1543, 2),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 1565, 1),
-        error(WarningCode.unusedLocalVariable, 1601, 2),
-        error(CompileTimeErrorCode.mapKeyTypeNotAssignable, 1637, 7),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 1646, 1),
+        error(diag.mapKeyTypeNotAssignable, 173, 7),
+        error(diag.unusedLocalVariable, 241, 2),
+        error(diag.unusedLocalVariable, 271, 2),
+        error(diag.unusedLocalVariable, 311, 2),
+        error(diag.mapKeyTypeNotAssignable, 324, 7),
+        error(diag.unusedLocalVariable, 369, 2),
+        error(diag.mapValueTypeNotAssignable, 385, 1),
+        error(diag.unusedLocalVariable, 415, 2),
+        error(diag.mapKeyTypeNotAssignable, 446, 7),
+        error(diag.mapValueTypeNotAssignable, 455, 1),
+        error(diag.unusedLocalVariable, 498, 2),
+        error(diag.unusedLocalVariable, 533, 2),
+        error(diag.unusedLocalVariable, 578, 2),
+        error(diag.unusedLocalVariable, 629, 2),
+        error(diag.unusedLocalVariable, 668, 2),
+        error(diag.unusedLocalVariable, 731, 2),
+        error(diag.unusedLocalVariable, 765, 2),
+        error(diag.unusedLocalVariable, 809, 2),
+        error(diag.unusedLocalVariable, 859, 2),
+        error(diag.mapValueTypeNotAssignable, 868, 1),
+        error(diag.unusedLocalVariable, 897, 2),
+        error(diag.mapValueTypeNotAssignable, 937, 1),
+        error(diag.unusedLocalVariable, 976, 2),
+        error(diag.unusedLocalVariable, 1007, 2),
+        error(diag.unusedLocalVariable, 1048, 2),
+        error(diag.mapKeyTypeNotAssignable, 1061, 7),
+        error(diag.unusedLocalVariable, 1107, 2),
+        error(diag.unusedLocalVariable, 1142, 2),
+        error(diag.mapKeyTypeNotAssignable, 1172, 7),
+        error(diag.unusedLocalVariable, 1219, 2),
+        error(diag.invalidAssignment, 1224, 16),
+        error(diag.unusedLocalVariable, 1263, 2),
+        error(diag.invalidAssignment, 1268, 26),
+        error(diag.unusedLocalVariable, 1317, 2),
+        error(diag.invalidAssignment, 1322, 20),
+        error(diag.unusedLocalVariable, 1379, 2),
+        error(diag.unusedLocalVariable, 1421, 2),
+        error(diag.unusedLocalVariable, 1473, 2),
+        error(diag.mapKeyTypeNotAssignable, 1492, 7),
+        error(diag.unusedLocalVariable, 1543, 2),
+        error(diag.mapValueTypeNotAssignable, 1565, 1),
+        error(diag.unusedLocalVariable, 1601, 2),
+        error(diag.mapKeyTypeNotAssignable, 1637, 7),
+        error(diag.mapValueTypeNotAssignable, 1646, 1),
       ],
     );
   }
@@ -1992,7 +1887,7 @@
   static int get _x => null;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 49, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 49, 4)],
     );
     var x = _resultLibraryElement.classes[0].fields[0];
     _assertTypeStr(x.type, 'int');
@@ -2006,7 +1901,7 @@
 }
 int get y => null;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 40, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 40, 4)],
     );
     var x = _resultLibraryElement.classes[0].fields[0];
     _assertTypeStr(x.type, 'int');
@@ -2024,18 +1919,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 66, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          70,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 89, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          93,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 66, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 70, 1),
+        error(diag.unusedLocalVariable, 89, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 93, 1),
       ],
     );
   }
@@ -2074,53 +1961,21 @@
 
     List<ExpectedDiagnostic> diagnostics = [
       error(
-        CompileTimeErrorCode.invalidOverride,
+        diag.invalidOverride,
         188,
         4,
-        contextMessages: [message(dartAsyncFile, 589, 4)],
+        contextMessages: [message(dartAsyncFile, 570, 4)],
       ),
-      error(CompileTimeErrorCode.missingDefaultValueForParameter, 226, 7),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 239, 4),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        295,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        367,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        452,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        495,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        550,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        610,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        677,
-        1,
-      ),
-      error(
-        CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-        743,
-        1,
-      ),
+      error(diag.missingDefaultValueForParameter, 226, 7),
+      error(diag.returnOfInvalidTypeFromMethod, 239, 4),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 295, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 367, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 452, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 495, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 550, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 610, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 677, 1),
+      error(diag.notAssignedPotentiallyNonNullableLocalVariable, 743, 1),
     ];
     await _assertErrors(
       build(declared: "MyFuture", downwards: "Future", upwards: "Future"),
@@ -2179,33 +2034,17 @@
       build(declared: "MyFuture", downwards: "Future", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          300,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          387,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          519,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          594,
-          1,
-        ),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 300, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 387, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 519, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 594, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2214,33 +2053,17 @@
       build(declared: "MyFuture", downwards: "Future", upwards: "MyFuture"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          300,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          389,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          523,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          600,
-          1,
-        ),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 300, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 389, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 523, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 600, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2249,33 +2072,17 @@
       build(declared: "MyFuture", downwards: "MyFuture", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          302,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          391,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          525,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          602,
-          1,
-        ),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 302, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 391, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 525, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 602, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2284,33 +2091,17 @@
       build(declared: "MyFuture", downwards: "MyFuture", upwards: "MyFuture"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          302,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          393,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          529,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          608,
-          1,
-        ),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 302, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 393, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 529, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 608, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2319,33 +2110,17 @@
       build(declared: "Future", downwards: "Future", upwards: "MyFuture"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          298,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          387,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          521,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          598,
-          1,
-        ),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 298, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 387, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 521, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 598, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2354,33 +2129,17 @@
       build(declared: "Future", downwards: "Future", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          298,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          385,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          517,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          592,
-          1,
-        ),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 298, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 385, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 517, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 592, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2399,18 +2158,10 @@
 }
   ''',
       [
-        error(WarningCode.unusedLocalVariable, 46, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          50,
-          1,
-        ),
-        error(CompileTimeErrorCode.invalidAssignment, 50, 51),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          109,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 46, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 50, 1),
+        error(diag.invalidAssignment, 50, 51),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 109, 1),
       ],
     );
   }
@@ -2430,20 +2181,12 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          34,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 67, 2),
-        error(WarningCode.unusedLocalVariable, 92, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          135,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 185, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 34, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 67, 2),
+        error(diag.unusedLocalVariable, 92, 1),
+        error(diag.invalidAssignment, 96, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 135, 1),
+        error(diag.unusedLocalVariable, 185, 1),
       ],
     );
   }
@@ -2480,16 +2223,16 @@
       build(declared: "MyFuture", downwards: "Future", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(WarningCode.unusedLocalVariable, 309, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 314, 1),
-        error(WarningCode.unusedLocalVariable, 475, 2),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.unusedLocalVariable, 309, 2),
+        error(diag.invalidAssignment, 314, 1),
+        error(diag.unusedLocalVariable, 475, 2),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2498,17 +2241,17 @@
       build(declared: "MyFuture", downwards: "MyFuture", upwards: "MyFuture"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(WarningCode.unusedLocalVariable, 311, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 316, 1),
-        error(WarningCode.unusedLocalVariable, 479, 2),
-        error(WarningCode.unnecessaryCast, 484, 49),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.unusedLocalVariable, 311, 2),
+        error(diag.invalidAssignment, 316, 1),
+        error(diag.unusedLocalVariable, 479, 2),
+        error(diag.unnecessaryCast, 484, 49),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2517,17 +2260,17 @@
       build(declared: "Future", downwards: "Future", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(WarningCode.unusedLocalVariable, 309, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 314, 1),
-        error(WarningCode.unusedLocalVariable, 475, 2),
-        error(WarningCode.unnecessaryCast, 480, 47),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.unusedLocalVariable, 309, 2),
+        error(diag.invalidAssignment, 314, 1),
+        error(diag.unusedLocalVariable, 475, 2),
+        error(diag.unnecessaryCast, 480, 47),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2546,17 +2289,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          39,
-          4,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          84,
-          4,
-        ),
-        error(WarningCode.unusedLocalVariable, 125, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 39, 4),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 84, 4),
+        error(diag.unusedLocalVariable, 125, 1),
       ],
     );
   }
@@ -2588,27 +2323,27 @@
 
     await assertErrorsInCode(build(downwards: "Future", upwards: "Future"), [
       error(
-        CompileTimeErrorCode.invalidOverride,
+        diag.invalidOverride,
         185,
         4,
-        contextMessages: [message(dartAsyncFile, 589, 4)],
+        contextMessages: [message(dartAsyncFile, 570, 4)],
       ),
-      error(CompileTimeErrorCode.missingDefaultValueForParameter, 223, 7),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 236, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 464, 1),
+      error(diag.missingDefaultValueForParameter, 223, 7),
+      error(diag.returnOfInvalidTypeFromMethod, 236, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 464, 1),
     ]);
     await disposeAnalysisContextCollection();
 
     await assertErrorsInCode(build(downwards: "Future", upwards: "MyFuture"), [
       error(
-        CompileTimeErrorCode.invalidOverride,
+        diag.invalidOverride,
         185,
         4,
-        contextMessages: [message(dartAsyncFile, 589, 4)],
+        contextMessages: [message(dartAsyncFile, 570, 4)],
       ),
-      error(CompileTimeErrorCode.missingDefaultValueForParameter, 223, 7),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 236, 4),
-      error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 470, 1),
+      error(diag.missingDefaultValueForParameter, 223, 7),
+      error(diag.returnOfInvalidTypeFromMethod, 236, 4),
+      error(diag.returnOfInvalidTypeFromFunction, 470, 1),
     ]);
     await disposeAnalysisContextCollection();
   }
@@ -2647,15 +2382,15 @@
       build(declared: "MyFuture", downwards: "Future", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 256, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 338, 4),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notInitializedNonNullableVariable, 256, 1),
+        error(diag.argumentTypeNotAssignable, 338, 4),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2664,14 +2399,14 @@
       build(declared: "MyFuture", downwards: "Future", upwards: "MyFuture"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 256, 1),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notInitializedNonNullableVariable, 256, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2680,15 +2415,15 @@
       build(declared: "Future", downwards: "Future", upwards: "Future"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 254, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 336, 4),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notInitializedNonNullableVariable, 254, 1),
+        error(diag.argumentTypeNotAssignable, 336, 4),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2697,14 +2432,14 @@
       build(declared: "Future", downwards: "Future", upwards: "MyFuture"),
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           187,
           4,
-          contextMessages: [message(dartAsyncFile, 589, 4)],
+          contextMessages: [message(dartAsyncFile, 570, 4)],
         ),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 225, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 254, 1),
+        error(diag.missingDefaultValueForParameter, 225, 7),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.notInitializedNonNullableVariable, 254, 1),
       ],
     );
     await disposeAnalysisContextCollection();
@@ -2726,9 +2461,9 @@
 class A {}
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 37, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 66, 4),
-        error(WarningCode.unusedLocalVariable, 88, 6),
+        error(diag.invalidAssignment, 37, 4),
+        error(diag.invalidAssignment, 66, 4),
+        error(diag.unusedLocalVariable, 88, 6),
       ],
     );
   }
@@ -2745,12 +2480,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 64, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          77,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 64, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 77, 1),
       ],
     );
   }
@@ -2773,7 +2504,7 @@
 class B extends A {}
 class C extends A {}
 ''',
-      [error(WarningCode.unusedLocalVariable, 207, 4)],
+      [error(diag.unusedLocalVariable, 207, 4)],
     );
   }
 
@@ -2791,8 +2522,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 70, 4),
-        error(WarningCode.unusedLocalVariable, 130, 8),
+        error(diag.returnOfInvalidTypeFromFunction, 70, 4),
+        error(diag.unusedLocalVariable, 130, 8),
       ],
     );
   }
@@ -2807,9 +2538,9 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 18, 4),
-        error(WarningCode.unusedLocalVariable, 42, 1),
-        error(WarningCode.unusedLocalVariable, 62, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 18, 4),
+        error(diag.unusedLocalVariable, 42, 1),
+        error(diag.unusedLocalVariable, 62, 1),
       ],
     );
   }
@@ -2847,11 +2578,11 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 355, 11),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 467, 3),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 492, 3),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 683, 4),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 689, 7),
+        error(diag.argumentTypeNotAssignable, 355, 11),
+        error(diag.argumentTypeNotAssignable, 467, 3),
+        error(diag.argumentTypeNotAssignable, 492, 3),
+        error(diag.argumentTypeNotAssignable, 683, 4),
+        error(diag.argumentTypeNotAssignable, 689, 7),
       ],
     );
   }
@@ -2872,12 +2603,12 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           50,
           1,
           contextMessages: [message(testFile, 12, 1)],
         ),
-        error(CompileTimeErrorCode.wrongNumberOfTypeArgumentsMethod, 91, 5),
+        error(diag.wrongNumberOfTypeArgumentsMethod, 91, 5),
       ],
     );
   }
@@ -2892,10 +2623,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 21, 4),
-        error(WarningCode.unusedLocalVariable, 45, 1),
-        error(WarningCode.unusedLocalVariable, 69, 1),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 76, 2),
+        error(diag.returnOfInvalidTypeFromFunction, 21, 4),
+        error(diag.unusedLocalVariable, 45, 1),
+        error(diag.unusedLocalVariable, 69, 1),
+        error(diag.listElementTypeNotAssignable, 76, 2),
       ],
     );
   }
@@ -2920,28 +2651,12 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 35, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          39,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          77,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 175, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          180,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          220,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 35, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 39, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 77, 1),
+        error(diag.unusedLocalVariable, 175, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 180, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 220, 1),
       ],
     );
   }
@@ -2965,13 +2680,13 @@
 ''',
       [
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           74,
           1,
           contextMessages: [message(testFile, 12, 1)],
         ),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           94,
           1,
           contextMessages: [message(testFile, 33, 1)],
@@ -2989,13 +2704,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 46, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          50,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 70, 3),
+        error(diag.unusedLocalVariable, 46, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 50, 1),
+        error(diag.returnOfInvalidTypeFromClosure, 70, 3),
       ],
     );
   }
@@ -3012,8 +2723,8 @@
 typedef void F<V>(V v);
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 45, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 88, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 45, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 88, 4),
       ],
     );
     var f = _resultLibraryElement.getClass('C')!.methods[0];
@@ -3046,8 +2757,8 @@
 typedef V F<V>();
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 45, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 88, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 45, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 88, 4),
       ],
     );
     var f = _resultLibraryElement.getClass('C')!.methods[0];
@@ -3089,11 +2800,11 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 183, 8),
-        error(CompileTimeErrorCode.undefinedOperator, 257, 1),
-        error(WarningCode.unusedLocalVariable, 293, 8),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 355, 33),
-        error(WarningCode.unusedLocalVariable, 410, 8),
+        error(diag.unusedLocalVariable, 183, 8),
+        error(diag.undefinedOperator, 257, 1),
+        error(diag.unusedLocalVariable, 293, 8),
+        error(diag.argumentTypeNotAssignable, 355, 33),
+        error(diag.unusedLocalVariable, 410, 8),
       ],
     );
   }
@@ -3116,7 +2827,7 @@
   }).fold(0, math.max);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 153, 7)],
+      [error(diag.unusedLocalVariable, 153, 7)],
     );
   }
 
@@ -3133,8 +2844,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 96, 4),
-        error(WarningCode.unusedLocalVariable, 118, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 96, 4),
+        error(diag.unusedLocalVariable, 118, 1),
       ],
     );
 
@@ -3152,7 +2863,7 @@
 
 var v = generic((F f) => null, (G g) => null);
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 96, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 96, 4)],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
     _assertTypeStr(v.type, 'List<int> Function(num)');
@@ -3180,13 +2891,7 @@
 var v_postfix_pp = (new A().f++);
 var v_postfix_mm = (new A().f--);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          16,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 16, 1)],
     );
   }
 
@@ -3205,13 +2910,7 @@
 var v_postfix_pp = (new B().a++);
 var v_postfix_mm = (new B().a--);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          88,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 88, 1)],
     );
   }
 
@@ -3226,13 +2925,7 @@
 var c = 0;
 var d = (c = 1);
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          16,
-          1,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 16, 1)],
     );
   }
 
@@ -3357,7 +3050,7 @@
 var c = t ? (throw 1) : 2;
 var d = t ? 1 : (throw 2);
 ''',
-      [error(WarningCode.deadCode, 53, 1), error(WarningCode.deadCode, 57, 1)],
+      [error(diag.deadCode, 53, 1), error(diag.deadCode, 57, 1)],
     );
   }
 
@@ -3432,7 +3125,7 @@
   i = m1;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
   }
 
@@ -3463,16 +3156,12 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          82,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 112, 1),
-        error(WarningCode.unusedLocalVariable, 121, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 148, 9),
-        error(CompileTimeErrorCode.invalidAssignment, 182, 9),
-        error(CompileTimeErrorCode.invalidAssignment, 234, 9),
+        error(diag.notInitializedNonNullableInstanceField, 82, 1),
+        error(diag.unusedLocalVariable, 112, 1),
+        error(diag.unusedLocalVariable, 121, 1),
+        error(diag.invalidAssignment, 148, 9),
+        error(diag.invalidAssignment, 182, 9),
+        error(diag.invalidAssignment, 234, 9),
       ],
     );
   }
@@ -3523,27 +3212,23 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          14,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 39, 4),
-        error(CompileTimeErrorCode.undefinedIdentifier, 171, 1),
-        error(CompileTimeErrorCode.undefinedIdentifier, 201, 1),
-        error(CompileTimeErrorCode.undefinedOperator, 572, 1),
-        error(WarningCode.castFromNullAlwaysFails, 591, 9),
-        error(CompileTimeErrorCode.invalidAssignment, 619, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 647, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 687, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 709, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 729, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 753, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 772, 5),
-        error(CompileTimeErrorCode.invalidAssignment, 794, 5),
-        error(CompileTimeErrorCode.invalidAssignment, 807, 5),
-        error(CompileTimeErrorCode.invalidAssignment, 869, 5),
-        error(CompileTimeErrorCode.invalidAssignment, 882, 2),
+        error(diag.notInitializedNonNullableInstanceField, 14, 1),
+        error(diag.returnOfInvalidTypeFromMethod, 39, 4),
+        error(diag.undefinedIdentifier, 171, 1),
+        error(diag.undefinedIdentifier, 201, 1),
+        error(diag.undefinedOperator, 572, 1),
+        error(diag.castFromNullAlwaysFails, 591, 9),
+        error(diag.invalidAssignment, 619, 4),
+        error(diag.invalidAssignment, 647, 4),
+        error(diag.invalidAssignment, 687, 2),
+        error(diag.invalidAssignment, 709, 2),
+        error(diag.invalidAssignment, 729, 1),
+        error(diag.invalidAssignment, 753, 2),
+        error(diag.invalidAssignment, 772, 5),
+        error(diag.invalidAssignment, 794, 5),
+        error(diag.invalidAssignment, 807, 5),
+        error(diag.invalidAssignment, 869, 5),
+        error(diag.invalidAssignment, 882, 2),
       ],
     );
   }
@@ -3565,8 +3250,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 78, 1),
-        error(WarningCode.unusedLocalVariable, 99, 1),
+        error(diag.unusedLocalVariable, 78, 1),
+        error(diag.unusedLocalVariable, 99, 1),
       ],
     );
   }
@@ -3588,8 +3273,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 89, 1),
-        error(WarningCode.unusedLocalVariable, 110, 1),
+        error(diag.unusedLocalVariable, 89, 1),
+        error(diag.unusedLocalVariable, 110, 1),
       ],
     );
   }
@@ -3648,8 +3333,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 45, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 57, 4),
+        error(diag.invalidAssignment, 45, 4),
+        error(diag.invalidAssignment, 57, 4),
       ],
     );
   }
@@ -3670,8 +3355,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 68, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 82, 4),
+        error(diag.invalidAssignment, 68, 4),
+        error(diag.invalidAssignment, 82, 4),
       ],
     );
   }
@@ -3687,10 +3372,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 34, 1),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 39, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 46, 4),
-        error(WarningCode.unusedLocalVariable, 68, 1),
+        error(diag.missingDefaultValueForParameter, 34, 1),
+        error(diag.missingDefaultValueForParameter, 39, 1),
+        error(diag.returnOfInvalidTypeFromMethod, 46, 4),
+        error(diag.unusedLocalVariable, 68, 1),
       ],
     );
 
@@ -3709,13 +3394,9 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          29,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 36, 4),
-        error(WarningCode.unusedLocalVariable, 59, 1),
+        error(diag.missingDefaultValueForParameterPositional, 29, 1),
+        error(diag.returnOfInvalidTypeFromMethod, 36, 4),
+        error(diag.unusedLocalVariable, 59, 1),
       ],
     );
 
@@ -3734,18 +3415,10 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          34,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          39,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 46, 4),
-        error(WarningCode.unusedLocalVariable, 69, 1),
+        error(diag.missingDefaultValueForParameterPositional, 34, 1),
+        error(diag.missingDefaultValueForParameterPositional, 39, 1),
+        error(diag.returnOfInvalidTypeFromMethod, 46, 4),
+        error(diag.unusedLocalVariable, 69, 1),
       ],
     );
 
@@ -3763,7 +3436,7 @@
   var y = new C().m(42);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 47, 1)],
+      [error(diag.unusedLocalVariable, 47, 1)],
     );
 
     var y = findElement2.localVar('y');
@@ -3800,15 +3473,15 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 88, 4),
-        error(WarningCode.unusedLocalVariable, 161, 3),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 204, 25),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 245, 25),
-        error(WarningCode.unusedLocalVariable, 313, 4),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 357, 25),
-        error(CompileTimeErrorCode.mapValueTypeNotAssignable, 400, 25),
-        error(WarningCode.unusedLocalVariable, 467, 3),
-        error(CompileTimeErrorCode.listElementTypeNotAssignable, 501, 25),
+        error(diag.returnOfInvalidTypeFromFunction, 88, 4),
+        error(diag.unusedLocalVariable, 161, 3),
+        error(diag.listElementTypeNotAssignable, 204, 25),
+        error(diag.listElementTypeNotAssignable, 245, 25),
+        error(diag.unusedLocalVariable, 313, 4),
+        error(diag.mapValueTypeNotAssignable, 357, 25),
+        error(diag.mapValueTypeNotAssignable, 400, 25),
+        error(diag.unusedLocalVariable, 467, 3),
+        error(diag.listElementTypeNotAssignable, 501, 25),
       ],
     );
   }
@@ -3834,16 +3507,16 @@
 }
 ''',
       [
-        error(WarningCode.unusedElement, 11, 2),
-        error(WarningCode.unusedElement, 26, 2),
-        error(WarningCode.unusedElement, 48, 2),
-        error(WarningCode.unusedElement, 71, 2),
-        error(WarningCode.unusedElement, 100, 2),
-        error(WarningCode.unusedElement, 162, 2),
-        error(WarningCode.unusedElement, 177, 2),
-        error(WarningCode.unusedElement, 194, 2),
+        error(diag.unusedElement, 11, 2),
+        error(diag.unusedElement, 26, 2),
+        error(diag.unusedElement, 48, 2),
+        error(diag.unusedElement, 71, 2),
+        error(diag.unusedElement, 100, 2),
+        error(diag.unusedElement, 162, 2),
+        error(diag.unusedElement, 177, 2),
+        error(diag.unusedElement, 194, 2),
         error(
-          CompileTimeErrorCode.referencedBeforeDeclaration,
+          diag.referencedBeforeDeclaration,
           203,
           2,
           contextMessages: [message(testFile, 211, 2)],
@@ -3882,13 +3555,7 @@
   int foo;
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          54,
-          3,
-        ),
-      ],
+      [error(diag.notInitializedNonNullableInstanceField, 54, 3)],
     );
     var f = _resultLibraryElement.getClass('C')!.setters[0];
     _assertTypeStr(f.type, 'void Function(int)');
@@ -3948,7 +3615,7 @@
   Foo([this.x = "1"]);
 }
 ''',
-      [error(CompileTimeErrorCode.invalidAssignment, 41, 3)],
+      [error(diag.invalidAssignment, 41, 3)],
     );
   }
 
@@ -3959,7 +3626,7 @@
   var f = () {};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var f = findElement2.localVar('f');
@@ -3977,16 +3644,8 @@
 var v = new A()..a = 1..b.add(2)..m();
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          16,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          31,
-          1,
-        ),
+        error(diag.notInitializedNonNullableInstanceField, 16, 1),
+        error(diag.notInitializedNonNullableInstanceField, 31, 1),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
@@ -4002,7 +3661,7 @@
 C c;
 var x = c*c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 49, 1)],
+      [error(diag.notInitializedNonNullableVariable, 49, 1)],
     );
     var x = _resultLibraryElement.topLevelVariables[1];
     expect(x.name, 'x');
@@ -4019,7 +3678,7 @@
 C c;
 var x = c*c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 82, 1)],
+      [error(diag.notInitializedNonNullableVariable, 82, 1)],
     );
     var x = _resultLibraryElement.topLevelVariables[1];
     expect(x.name, 'x');
@@ -4038,12 +3697,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 72, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          76,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 72, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 76, 1),
       ],
     );
 
@@ -4065,12 +3720,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 105, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          109,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 105, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 109, 1),
       ],
     );
 
@@ -4088,7 +3739,7 @@
 C c;
 var x = -c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 42, 1)],
+      [error(diag.notInitializedNonNullableVariable, 42, 1)],
     );
     var x = _resultLibraryElement.topLevelVariables[1];
     expect(x.name, 'x');
@@ -4105,7 +3756,7 @@
 C c;
 var x = -c;
 ''',
-      [error(CompileTimeErrorCode.notInitializedNonNullableVariable, 75, 1)],
+      [error(diag.notInitializedNonNullableVariable, 75, 1)],
     );
     var x = _resultLibraryElement.topLevelVariables[1];
     expect(x.name, 'x');
@@ -4121,7 +3772,7 @@
 C f() => null;
 var x = f().g;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 41, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 41, 4)],
     );
     var x = _resultLibraryElement.topLevelVariables[0];
     expect(x.name, 'x');
@@ -4138,7 +3789,7 @@
 C f() => null;
 var x = f().g;
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 74, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 74, 4)],
     );
     var x = _resultLibraryElement.topLevelVariables[0];
     expect(x.name, 'x');
@@ -4162,7 +3813,7 @@
 C f() => null;
 var x = f().g();
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 41, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 41, 4)],
     );
     var x = _resultLibraryElement.topLevelVariables[0];
     expect(x.name, 'x');
@@ -4179,7 +3830,7 @@
 C f() => null;
 var x = f().g();
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 74, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 74, 4)],
     );
     var x = _resultLibraryElement.topLevelVariables[0];
     expect(x.name, 'x');
@@ -4230,8 +3881,8 @@
 var v = [f, g];
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 11, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 31, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 11, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 31, 4),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
@@ -4246,8 +3897,8 @@
 var v = [f, g];
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 26, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 61, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 26, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 61, 4),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
@@ -4262,10 +3913,10 @@
 var v = [f, g];
 ''',
       [
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 11, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 18, 4),
-        error(CompileTimeErrorCode.missingDefaultValueForParameter, 38, 1),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 45, 4),
+        error(diag.missingDefaultValueForParameter, 11, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 18, 4),
+        error(diag.missingDefaultValueForParameter, 38, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 45, 4),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
@@ -4280,18 +3931,10 @@
 var v = [f, g];
 ''',
       [
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          11,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 18, 4),
-        error(
-          CompileTimeErrorCode.missingDefaultValueForParameterPositional,
-          38,
-          1,
-        ),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 45, 4),
+        error(diag.missingDefaultValueForParameterPositional, 11, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 18, 4),
+        error(diag.missingDefaultValueForParameterPositional, 38, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 45, 4),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
@@ -4306,8 +3949,8 @@
 var v = [f, g];
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 16, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 41, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 16, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 41, 4),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
@@ -4406,7 +4049,7 @@
   i = y2;
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 73, 1)],
+      [error(diag.unusedLocalVariable, 73, 1)],
     );
   }
 
@@ -4454,7 +4097,7 @@
   static String m2(e) { return ''; }
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 103, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 103, 4)],
     );
   }
 
@@ -4475,9 +4118,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 80, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 84, 9),
-        error(WarningCode.unusedLocalVariable, 101, 1),
+        error(diag.unusedLocalVariable, 80, 1),
+        error(diag.invalidAssignment, 84, 9),
+        error(diag.unusedLocalVariable, 101, 1),
       ],
     );
   }
@@ -4499,9 +4142,9 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 89, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 93, 9),
-        error(WarningCode.unusedLocalVariable, 110, 1),
+        error(diag.unusedLocalVariable, 89, 1),
+        error(diag.invalidAssignment, 93, 9),
+        error(diag.unusedLocalVariable, 110, 1),
       ],
     );
   }
@@ -4516,8 +4159,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 16, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 29, 4),
+        error(diag.unusedLocalVariable, 16, 1),
+        error(diag.invalidAssignment, 29, 4),
       ],
     );
   }
@@ -4531,8 +4174,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 16, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 29, 4),
+        error(diag.unusedLocalVariable, 16, 1),
+        error(diag.invalidAssignment, 29, 4),
       ],
     );
   }
@@ -4560,17 +4203,13 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 44, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 59, 4),
-        error(WarningCode.unusedLocalVariable, 84, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 99, 4),
-        error(WarningCode.unusedLocalVariable, 124, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 139, 4),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          167,
-          1,
-        ),
+        error(diag.unusedLocalVariable, 44, 1),
+        error(diag.invalidAssignment, 59, 4),
+        error(diag.unusedLocalVariable, 84, 1),
+        error(diag.invalidAssignment, 99, 4),
+        error(diag.unusedLocalVariable, 124, 1),
+        error(diag.invalidAssignment, 139, 4),
+        error(diag.notInitializedNonNullableInstanceField, 167, 1),
       ],
     );
   }
@@ -4596,12 +4235,12 @@
 final z = 42; // should infer `int`
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 28, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 41, 4),
-        error(WarningCode.unusedLocalVariable, 62, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 75, 4),
-        error(WarningCode.unusedLocalVariable, 96, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 109, 4),
+        error(diag.unusedLocalVariable, 28, 1),
+        error(diag.invalidAssignment, 41, 4),
+        error(diag.unusedLocalVariable, 62, 1),
+        error(diag.invalidAssignment, 75, 4),
+        error(diag.unusedLocalVariable, 96, 1),
+        error(diag.invalidAssignment, 109, 4),
       ],
     );
   }
@@ -4628,10 +4267,10 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 48, 4),
-        error(WarningCode.unusedLocalVariable, 100, 1),
-        error(WarningCode.unusedLocalVariable, 124, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 128, 9),
+        error(diag.returnOfInvalidTypeFromFunction, 48, 4),
+        error(diag.unusedLocalVariable, 100, 1),
+        error(diag.unusedLocalVariable, 124, 1),
+        error(diag.invalidAssignment, 128, 9),
       ],
     );
   }
@@ -4655,12 +4294,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 27, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 47, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 109, 7),
-        error(WarningCode.unusedLocalVariable, 138, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 142, 9),
-        error(WarningCode.unusedLocalVariable, 159, 1),
+        error(diag.invalidAssignment, 27, 4),
+        error(diag.invalidAssignment, 47, 4),
+        error(diag.returnOfInvalidTypeFromFunction, 109, 7),
+        error(diag.unusedLocalVariable, 138, 1),
+        error(diag.invalidAssignment, 142, 9),
+        error(diag.unusedLocalVariable, 159, 1),
       ],
     );
   }
@@ -4683,19 +4322,11 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          17,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          53,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 87, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 91, 17),
-        error(WarningCode.unusedLocalVariable, 119, 1),
+        error(diag.notInitializedNonNullableInstanceField, 17, 1),
+        error(diag.notInitializedNonNullableInstanceField, 53, 1),
+        error(diag.unusedLocalVariable, 87, 1),
+        error(diag.invalidAssignment, 91, 17),
+        error(diag.unusedLocalVariable, 119, 1),
       ],
     );
   }
@@ -4729,12 +4360,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 284, 4),
-        error(WarningCode.unusedLocalVariable, 310, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 314, 21),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 330, 4),
-        error(WarningCode.unusedLocalVariable, 346, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 366, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 284, 4),
+        error(diag.unusedLocalVariable, 310, 1),
+        error(diag.invalidAssignment, 314, 21),
+        error(diag.argumentTypeNotAssignable, 330, 4),
+        error(diag.unusedLocalVariable, 346, 1),
+        error(diag.argumentTypeNotAssignable, 366, 4),
       ],
     );
   }
@@ -4756,15 +4387,15 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 27, 4),
+        error(diag.invalidAssignment, 27, 4),
         error(
-          CompileTimeErrorCode.invalidOverride,
+          diag.invalidOverride,
           78,
           1,
           contextMessages: [message(testFile, 23, 1)],
         ),
-        error(WarningCode.unusedLocalVariable, 106, 1),
-        error(WarningCode.unusedLocalVariable, 127, 1),
+        error(diag.unusedLocalVariable, 106, 1),
+        error(diag.unusedLocalVariable, 127, 1),
       ],
     );
   }
@@ -4805,13 +4436,13 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 88, 4),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 238, 4),
-        error(WarningCode.unusedLocalVariable, 264, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 268, 35),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 292, 4),
-        error(WarningCode.unusedLocalVariable, 314, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 342, 4),
+        error(diag.invalidAssignment, 88, 4),
+        error(diag.returnOfInvalidTypeFromMethod, 238, 4),
+        error(diag.unusedLocalVariable, 264, 1),
+        error(diag.invalidAssignment, 268, 35),
+        error(diag.argumentTypeNotAssignable, 292, 4),
+        error(diag.unusedLocalVariable, 314, 1),
+        error(diag.argumentTypeNotAssignable, 342, 4),
       ],
     );
   }
@@ -4883,22 +4514,22 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 122, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 126, 1),
-        error(WarningCode.unusedLocalVariable, 244, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 248, 1),
-        error(WarningCode.unusedLocalVariable, 259, 1),
-        error(WarningCode.unusedLocalVariable, 345, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 349, 1),
-        error(WarningCode.unusedLocalVariable, 396, 1),
-        error(CompileTimeErrorCode.forInOfInvalidElementType, 427, 4),
-        error(WarningCode.unusedLocalVariable, 446, 1),
-        error(WarningCode.unusedLocalVariable, 497, 1),
-        error(WarningCode.unusedLocalVariable, 565, 1),
-        error(WarningCode.unusedLocalVariable, 634, 1),
-        error(CompileTimeErrorCode.forInOfInvalidType, 728, 3),
-        error(WarningCode.unusedLocalVariable, 746, 1),
-        error(WarningCode.unusedLocalVariable, 897, 1),
+        error(diag.unusedLocalVariable, 122, 1),
+        error(diag.invalidAssignment, 126, 1),
+        error(diag.unusedLocalVariable, 244, 1),
+        error(diag.invalidAssignment, 248, 1),
+        error(diag.unusedLocalVariable, 259, 1),
+        error(diag.unusedLocalVariable, 345, 1),
+        error(diag.invalidAssignment, 349, 1),
+        error(diag.unusedLocalVariable, 396, 1),
+        error(diag.forInOfInvalidElementType, 427, 4),
+        error(diag.unusedLocalVariable, 446, 1),
+        error(diag.unusedLocalVariable, 497, 1),
+        error(diag.unusedLocalVariable, 565, 1),
+        error(diag.unusedLocalVariable, 634, 1),
+        error(diag.forInOfInvalidType, 728, 3),
+        error(diag.unusedLocalVariable, 746, 1),
+        error(diag.unusedLocalVariable, 897, 1),
       ],
     );
   }
@@ -4912,7 +4543,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 50, 1)],
+      [error(diag.unusedLocalVariable, 50, 1)],
     );
   }
 
@@ -4965,12 +4596,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 39, 4),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 54, 3),
-        error(WarningCode.unusedLocalVariable, 84, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 134, 4),
-        error(WarningCode.unusedLocalVariable, 167, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 171, 1),
+        error(diag.argumentTypeNotAssignable, 39, 4),
+        error(diag.argumentTypeNotAssignable, 54, 3),
+        error(diag.unusedLocalVariable, 84, 1),
+        error(diag.argumentTypeNotAssignable, 134, 4),
+        error(diag.unusedLocalVariable, 167, 1),
+        error(diag.invalidAssignment, 171, 1),
       ],
     );
   }
@@ -4993,12 +4624,12 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 39, 4),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 55, 3),
-        error(WarningCode.unusedLocalVariable, 86, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 137, 4),
-        error(WarningCode.unusedLocalVariable, 171, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 175, 2),
+        error(diag.argumentTypeNotAssignable, 39, 4),
+        error(diag.argumentTypeNotAssignable, 55, 3),
+        error(diag.unusedLocalVariable, 86, 1),
+        error(diag.argumentTypeNotAssignable, 137, 4),
+        error(diag.unusedLocalVariable, 171, 1),
+        error(diag.invalidAssignment, 175, 2),
       ],
     );
   }
@@ -5019,7 +4650,7 @@
   x.add(42);
 }
 ''',
-      [error(CompileTimeErrorCode.argumentTypeNotAssignable, 36, 2)],
+      [error(diag.argumentTypeNotAssignable, 36, 2)],
     );
 
     var x = findElement2.localVar('x');
@@ -5050,15 +4681,15 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 58, 4),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 75, 3),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 2),
-        error(WarningCode.unusedLocalVariable, 119, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 209, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 247, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 265, 4),
-        error(WarningCode.unusedLocalVariable, 302, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 306, 1),
+        error(diag.argumentTypeNotAssignable, 58, 4),
+        error(diag.argumentTypeNotAssignable, 75, 3),
+        error(diag.invalidAssignment, 96, 2),
+        error(diag.unusedLocalVariable, 119, 1),
+        error(diag.argumentTypeNotAssignable, 209, 4),
+        error(diag.invalidAssignment, 247, 2),
+        error(diag.invalidAssignment, 265, 4),
+        error(diag.unusedLocalVariable, 302, 1),
+        error(diag.invalidAssignment, 306, 1),
       ],
     );
   }
@@ -5087,15 +4718,15 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 59, 4),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 77, 3),
-        error(CompileTimeErrorCode.invalidAssignment, 99, 2),
-        error(WarningCode.unusedLocalVariable, 122, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 214, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 254, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 272, 4),
-        error(WarningCode.unusedLocalVariable, 310, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 314, 2),
+        error(diag.argumentTypeNotAssignable, 59, 4),
+        error(diag.argumentTypeNotAssignable, 77, 3),
+        error(diag.invalidAssignment, 99, 2),
+        error(diag.unusedLocalVariable, 122, 1),
+        error(diag.argumentTypeNotAssignable, 214, 4),
+        error(diag.invalidAssignment, 254, 2),
+        error(diag.invalidAssignment, 272, 4),
+        error(diag.unusedLocalVariable, 310, 1),
+        error(diag.invalidAssignment, 314, 2),
       ],
     );
   }
@@ -5109,8 +4740,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 40, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 45, 3),
+        error(diag.argumentTypeNotAssignable, 40, 1),
+        error(diag.invalidAssignment, 45, 3),
       ],
     );
 
@@ -5135,7 +4766,7 @@
 class D<T> {}
 var f = new C().f<int>();
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 27, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 27, 4)],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
     _assertTypeStr(v.type, 'D<int>');
@@ -5152,8 +4783,8 @@
 var f = c.f<int>();
 ''',
       [
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 27, 4),
-        error(CompileTimeErrorCode.notInitializedNonNullableVariable, 51, 1),
+        error(diag.returnOfInvalidTypeFromMethod, 27, 4),
+        error(diag.notInitializedNonNullableVariable, 51, 1),
       ],
     );
     var v = _resultLibraryElement.topLevelVariables[1];
@@ -5170,7 +4801,7 @@
 class D<T> {}
 var f = C.f<int>();
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 34, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 34, 4)],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
     _assertTypeStr(v.type, 'D<int>');
@@ -5183,7 +4814,7 @@
 class D<T> {}
 var g = f<int>();
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 15, 4)],
+      [error(diag.returnOfInvalidTypeFromFunction, 15, 4)],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
     _assertTypeStr(v.type, 'D<int>');
@@ -5198,8 +4829,8 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 16, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 29, 4),
+        error(diag.unusedLocalVariable, 16, 1),
+        error(diag.invalidAssignment, 29, 4),
       ],
     );
   }
@@ -5215,14 +4846,10 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          34,
-          1,
-        ),
-        error(WarningCode.deadCode, 36, 5),
-        error(StaticWarningCode.deadNullAwareExpression, 39, 2),
-        error(WarningCode.unusedLocalVariable, 55, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 34, 1),
+        error(diag.deadCode, 36, 5),
+        error(diag.deadNullAwareExpression, 39, 2),
+        error(diag.unusedLocalVariable, 55, 1),
       ],
     );
   }
@@ -5237,14 +4864,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 36, 1),
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          40,
-          1,
-        ),
-        error(WarningCode.deadCode, 42, 5),
-        error(StaticWarningCode.deadNullAwareExpression, 45, 2),
+        error(diag.unusedLocalVariable, 36, 1),
+        error(diag.notAssignedPotentiallyNonNullableLocalVariable, 40, 1),
+        error(diag.deadCode, 42, 5),
+        error(diag.deadNullAwareExpression, 45, 2),
       ],
     );
 
@@ -5277,10 +4900,10 @@
 }
 ''',
       [
-        error(WarningCode.unusedLocalVariable, 92, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 96, 5),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 117, 7),
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromClosure, 214, 4),
+        error(diag.unusedLocalVariable, 92, 1),
+        error(diag.invalidAssignment, 96, 5),
+        error(diag.returnOfInvalidTypeFromClosure, 117, 7),
+        error(diag.returnOfInvalidTypeFromClosure, 214, 4),
       ],
     );
   }
@@ -5299,7 +4922,7 @@
   print(a.x + 2); // ok to use in bigger expression
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 58, 1)],
+      [error(diag.unusedLocalVariable, 58, 1)],
     );
   }
 
@@ -5317,7 +4940,7 @@
   print((a.x) + 2);
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
   }
 
@@ -5337,8 +4960,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.invalidAssignment, 65, 4),
-        error(CompileTimeErrorCode.invalidAssignment, 99, 4),
+        error(diag.invalidAssignment, 65, 4),
+        error(diag.invalidAssignment, 99, 4),
       ],
     );
   }
@@ -5395,15 +5018,11 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          29,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 66, 2),
-        error(WarningCode.unusedLocalVariable, 89, 2),
-        error(WarningCode.unusedLocalVariable, 112, 2),
-        error(WarningCode.unusedLocalVariable, 135, 2),
+        error(diag.notInitializedNonNullableInstanceField, 29, 1),
+        error(diag.unusedLocalVariable, 66, 2),
+        error(diag.unusedLocalVariable, 89, 2),
+        error(diag.unusedLocalVariable, 112, 2),
+        error(diag.unusedLocalVariable, 135, 2),
       ],
     );
   }
@@ -5428,20 +5047,16 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          29,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 58, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 63, 5),
-        error(WarningCode.unusedLocalVariable, 76, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 81, 5),
-        error(WarningCode.unusedLocalVariable, 94, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 99, 5),
-        error(CompileTimeErrorCode.invalidAssignment, 141, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 153, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 165, 1),
+        error(diag.notInitializedNonNullableInstanceField, 29, 1),
+        error(diag.unusedLocalVariable, 58, 2),
+        error(diag.invalidAssignment, 63, 5),
+        error(diag.unusedLocalVariable, 76, 2),
+        error(diag.invalidAssignment, 81, 5),
+        error(diag.unusedLocalVariable, 94, 2),
+        error(diag.invalidAssignment, 99, 5),
+        error(diag.invalidAssignment, 141, 1),
+        error(diag.invalidAssignment, 153, 1),
+        error(diag.invalidAssignment, 165, 1),
       ],
     );
   }
@@ -5466,20 +5081,16 @@
 }
 ''',
       [
-        error(
-          CompileTimeErrorCode.notInitializedNonNullableInstanceField,
-          29,
-          1,
-        ),
-        error(WarningCode.unusedLocalVariable, 56, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 61, 5),
-        error(WarningCode.unusedLocalVariable, 74, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 79, 5),
-        error(WarningCode.unusedLocalVariable, 92, 2),
-        error(CompileTimeErrorCode.invalidAssignment, 97, 5),
-        error(CompileTimeErrorCode.invalidAssignment, 137, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 149, 1),
-        error(CompileTimeErrorCode.invalidAssignment, 161, 1),
+        error(diag.notInitializedNonNullableInstanceField, 29, 1),
+        error(diag.unusedLocalVariable, 56, 2),
+        error(diag.invalidAssignment, 61, 5),
+        error(diag.unusedLocalVariable, 74, 2),
+        error(diag.invalidAssignment, 79, 5),
+        error(diag.unusedLocalVariable, 92, 2),
+        error(diag.invalidAssignment, 97, 5),
+        error(diag.invalidAssignment, 137, 1),
+        error(diag.invalidAssignment, 149, 1),
+        error(diag.invalidAssignment, 161, 1),
       ],
     );
   }
@@ -5492,7 +5103,7 @@
   static int f(String s) => null;
 }
 ''',
-      [error(CompileTimeErrorCode.returnOfInvalidTypeFromMethod, 53, 4)],
+      [error(diag.returnOfInvalidTypeFromMethod, 53, 4)],
     );
     var v = _resultLibraryElement.topLevelVariables[0];
     _assertTypeStr(v.type, 'int Function(String)');
@@ -5506,7 +5117,7 @@
   var v = ((x) => 1.0)(() { return 1; });
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5551,7 +5162,7 @@
     });
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 42, 1)],
+      [error(diag.unusedLocalVariable, 42, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5648,7 +5259,7 @@
 }
 List<T> f<T>(T g()) => <T>[g()];
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5666,7 +5277,7 @@
 }
 List<T> f<T>(T g()) => <T>[g()];
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5681,7 +5292,7 @@
 }
 double f(x) => 1.0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5696,7 +5307,7 @@
 }
 double f(x) => 1.0;
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5710,7 +5321,7 @@
   var v = <dynamic>[() { return 1; }];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5725,7 +5336,7 @@
   var v = <F>[() { return 1; }];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 32, 1)],
+      [error(diag.unusedLocalVariable, 32, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5742,7 +5353,7 @@
     }];
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5756,7 +5367,7 @@
   var v = <int, dynamic>{1: () { return 1; }};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5771,7 +5382,7 @@
   var v = <int, F>{1: () { return 1; }};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 32, 1)],
+      [error(diag.unusedLocalVariable, 32, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5788,7 +5399,7 @@
     }};
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 15, 1)],
+      [error(diag.unusedLocalVariable, 15, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5805,7 +5416,7 @@
   var v = new C().f<dynamic>(() { return 1; });
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5822,7 +5433,7 @@
   var v = new C().f<int>(() { return 1; });
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5842,7 +5453,7 @@
     });
 }
 ''',
-      [error(WarningCode.unusedLocalVariable, 62, 1)],
+      [error(diag.unusedLocalVariable, 62, 1)],
     );
 
     var v = findElement2.localVar('v');
@@ -5887,8 +5498,8 @@
 }
   ''',
       [
-        error(WarningCode.unusedLocalVariable, 259, 1),
-        error(WarningCode.unusedLocalVariable, 297, 1),
+        error(diag.unusedLocalVariable, 259, 1),
+        error(diag.unusedLocalVariable, 297, 1),
       ],
     );
 
@@ -5905,8 +5516,8 @@
     await resolveTestCode(code);
     assertErrorsInList(
       result.diagnostics.where((e) {
-        return e.diagnosticCode != WarningCode.unusedLocalVariable &&
-            e.diagnosticCode is! TodoCode;
+        return e.diagnosticCode != diag.unusedLocalVariable &&
+            e.diagnosticCode.type != DiagnosticType.TODO;
       }).toList(),
       expectedDiagnostics,
     );
diff --git a/pkg/analyzer/test/src/wolf/ir/ast_to_ir_test.dart b/pkg/analyzer/test/src/wolf/ir/ast_to_ir_test.dart
index cebdc73..0eed8f4 100644
--- a/pkg/analyzer/test/src/wolf/ir/ast_to_ir_test.dart
+++ b/pkg/analyzer/test/src/wolf/ir/ast_to_ir_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/wolf/ir/ast_to_ir.dart';
 import 'package:analyzer/src/wolf/ir/call_descriptor.dart';
 import 'package:analyzer/src/wolf/ir/coded_ir.dart';
@@ -1788,13 +1788,7 @@
   return i; // UNSOUND
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.notAssignedPotentiallyNonNullableLocalVariable,
-          27,
-          1,
-        ),
-      ],
+      [error(diag.notAssignedPotentiallyNonNullableLocalVariable, 27, 1)],
     );
     analyze(findNode.singleFunctionDeclaration);
     check(astNodes)[findNode.variableDeclarationList('int i')].not(
diff --git a/pkg/analyzer/test/util/ast_type_matchers.dart b/pkg/analyzer/test/util/ast_type_matchers.dart
index 1544d74..ce4863f 100644
--- a/pkg/analyzer/test/util/ast_type_matchers.dart
+++ b/pkg/analyzer/test/util/ast_type_matchers.dart
@@ -187,8 +187,6 @@
 
 const isMixinOnClause = TypeMatcher<MixinOnClause>();
 
-const isNamedCompilationUnitMember = TypeMatcher<NamedCompilationUnitMember>();
-
 const isNamedExpression = TypeMatcher<NamedExpression>();
 
 const isNamedType = TypeMatcher<NamedType>();
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index 6d2ad69..d66c89e 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -147,6 +147,7 @@
     updateAnalysisOptions4: ({required analysisOptions}) {
       analysisOptions.contextFeatures = config.featureSet;
     },
+    withFineDependencies: true,
   );
   var analysisContext = contextCollection.contexts.single;
   var analysisSession = analysisContext.currentSession;
@@ -258,21 +259,23 @@
       if (className != null) {
         for (var declaration in unit.declarations) {
           if (declaration is ClassDeclaration &&
-              declaration.name.lexeme == className) {
-            for (var member in declaration.members) {
-              if (member is ConstructorDeclaration) {
-                if (member.name!.lexeme == name) {
-                  return member.offset;
-                }
-              } else if (member is FieldDeclaration) {
-                for (var variable in member.fields.variables) {
-                  if (variable.name.lexeme == name) {
-                    return variable.offset;
+              declaration.namePart.typeName.lexeme == className) {
+            if (declaration.body case BlockClassBody body) {
+              for (var member in body.members) {
+                if (member is ConstructorDeclaration) {
+                  if (member.name!.lexeme == name) {
+                    return member.offset;
                   }
-                }
-              } else if (member is MethodDeclaration) {
-                if (member.name.lexeme == name) {
-                  return member.offset;
+                } else if (member is FieldDeclaration) {
+                  for (var variable in member.fields.variables) {
+                    if (variable.name.lexeme == name) {
+                      return variable.offset;
+                    }
+                  }
+                } else if (member is MethodDeclaration) {
+                  if (member.name.lexeme == name) {
+                    return member.offset;
+                  }
                 }
               }
             }
@@ -304,7 +307,7 @@
       ).unit;
       for (var declaration in unit.declarations) {
         if (declaration is ClassDeclaration &&
-            declaration.name.lexeme == className) {
+            declaration.namePart.typeName.lexeme == className) {
           return declaration.offset;
         }
       }
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index 8b0c687..785e6a7 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -32,7 +32,7 @@
     NodeList<CompilationUnitMember> unitMembers = unit.declarations;
     for (CompilationUnitMember unitMember in unitMembers) {
       if (unitMember is ClassDeclaration &&
-          unitMember.name.lexeme == className) {
+          unitMember.namePart.typeName.lexeme == className) {
         return unitMember;
       }
     }
@@ -49,7 +49,8 @@
     String? constructorName,
   ) {
     ClassDeclaration unitMember = getClass(unit, className);
-    NodeList<ClassMember> classMembers = unitMember.members;
+    var classBody = unitMember.body as BlockClassBody;
+    NodeList<ClassMember> classMembers = classBody.members;
     for (ClassMember classMember in classMembers) {
       if (classMember is ConstructorDeclaration) {
         if (classMember.name?.lexeme == constructorName) {
@@ -68,7 +69,8 @@
     String fieldName,
   ) {
     ClassDeclaration unitMember = getClass(unit, className);
-    NodeList<ClassMember> classMembers = unitMember.members;
+    var classBody = unitMember.body as BlockClassBody;
+    NodeList<ClassMember> classMembers = classBody.members;
     for (ClassMember classMember in classMembers) {
       if (classMember is FieldDeclaration) {
         NodeList<VariableDeclaration> fields = classMember.fields.variables;
@@ -90,7 +92,8 @@
     String methodName,
   ) {
     ClassDeclaration unitMember = getClass(unit, className);
-    NodeList<ClassMember> classMembers = unitMember.members;
+    var classBody = unitMember.body as BlockClassBody;
+    NodeList<ClassMember> classMembers = classBody.members;
     for (ClassMember classMember in classMembers) {
       if (classMember is MethodDeclaration) {
         if (classMember.name.lexeme == methodName) {
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index 447334a..5699d49 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -33,171 +33,171 @@
   /// verifier.
   static const List<String> unverifiedDocs = [
     // Needs to be able to specify two expected diagnostics.
-    'CompileTimeErrorCode.AMBIGUOUS_IMPORT',
+    'ambiguous_import',
     // Produces two diagnostics when it should only produce one.
-    'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE',
+    'built_in_identifier_as_type',
     // TODO(kallentu): This is always reported with
-    // `ARGUMENT_TYPE_NOT_ASSIGNABLE` or is reported as
-    // `CONST_EVAL_THROWS_EXCEPTION` in const constructor evaluation.
-    'CompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH',
+    // `argument_type_not_assignable` or is reported as
+    // `const_eval_throws_exception` in const constructor evaluation.
+    'const_constructor_param_type_mismatch',
     // Produces two diagnostics when it should only produce one.
-    'CompileTimeErrorCode.CONST_DEFERRED_CLASS',
+    'const_deferred_class',
     // The mock SDK doesn't define any internal libraries.
-    'CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY',
-    // Also reports CompileTimeErrorCode.SUBTYPE_OF_BASE_OR_FINAL_IS_NOT_BASE_FINAL_OR_SEALED
-    'CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS',
+    'export_internal_library',
+    // Also reports subtype_of_base_or_final_is_not_base_final_or_sealed
+    'extends_disallowed_class',
     // The following codes produce two diagnostics because they illustrate a
     // cycle.
-    'CompileTimeErrorCode.EXTENSION_TYPE_IMPLEMENTS_ITSELF',
-    'CompileTimeErrorCode.EXTENSION_TYPE_REPRESENTATION_DEPENDS_ON_ITSELF',
+    'extension_type_implements_itself',
+    'extension_type_representation_depends_on_itself',
     // Not reported with `getter-setter-error` feature enabled.
-    'CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES',
+    'getter_not_subtype_setter_types',
     // Has code in the example section that needs to be skipped (because it's
     // part of the explanatory text not part of the example), but there's
     // currently no way to do that.
-    'CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE',
+    'invalid_implementation_override',
     // Produces two diagnostics when it should only produce one. We could get
     // rid of the invalid error by adding a declaration of a top-level variable
     // (such as `JSBool b;`), but that would complicate the example.
-    'CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY',
+    'import_internal_library',
     // Produces two diagnostics when it should only produce one.
-    'CompileTimeErrorCode.INVALID_URI',
+    'invalid_uri',
     // No example, by design.
-    'CompileTimeErrorCode.MISSING_DART_LIBRARY',
+    'missing_dart_library',
     // Produces two diagnostics when it should only produce one.
-    'CompileTimeErrorCode.NON_SYNC_FACTORY',
+    'non_sync_factory',
     // Need a way to make auxiliary files that (a) are not included in the
     // generated docs or (b) can be made persistent for fixes.
-    'CompileTimeErrorCode.PART_OF_NON_PART',
+    'part_of_non_part',
     // Produces multiple diagnostics when it should only produce one.
-    'CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER',
+    'prefix_collides_with_top_level_member',
     // Produces two diagnostic out of necessity.
-    'CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT',
+    'recursive_compile_time_constant',
     // Produces two diagnostic out of necessity.
-    'CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT',
+    'recursive_constructor_redirect',
     // Produces two diagnostic out of necessity.
-    'CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE',
+    'recursive_interface_inheritance',
     // Produces two diagnostics out of necessity.
-    'CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION',
+    'referenced_before_declaration',
     // Produces two diagnostic out of necessity.
-    'CompileTimeErrorCode.TOP_LEVEL_CYCLE',
+    'top_level_cycle',
     // Produces two diagnostic out of necessity.
-    'CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
+    'type_alias_cannot_reference_itself',
     // Produces two diagnostic out of necessity.
-    'CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND',
-    // Produces the diagnostic HintCode.UNUSED_LOCAL_VARIABLE when it shouldn't.
-    'CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT',
+    'type_parameter_supertype_of_its_bound',
+    // Produces the diagnostic unused_local_variable when it shouldn't.
+    'undefined_identifier_await',
     // Produces multiple diagnostic because of poor recovery.
-    'CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR',
+    'yield_each_in_non_generator',
 
     // This is not reported after 2.12, and the examples don't compile after 3.0.
-    'FfiCode.FIELD_INITIALIZER_IN_STRUCT',
+    'field_initializer_in_struct',
     // This is not reported after 2.12, and the examples don't compile after 3.0.
-    'FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER',
+    'field_in_struct_with_initializer',
 
     // This no longer works in 3.0.
-    'HintCode.DEPRECATED_COLON_FOR_DEFAULT_VALUE',
+    'deprecated_colon_for_default_value',
     // The code has been replaced but is not yet removed.
-    'HintCode.DEPRECATED_MEMBER_USE',
+    'deprecated_member_use',
 
     // Need a way to specify the existance of files whose content is irrelevant.
-    'LinterLintCode.always_use_package_imports',
+    'always_use_package_imports',
     // Missing support for example files outside of `lib`.
-    'LinterLintCode.avoid_relative_lib_imports',
+    'avoid_relative_lib_imports',
     // The example isn't being recognized as a flutter app. We might need to
     // build a pubspec.yaml when analyzing flutter code.
-    'LinterLintCode.avoid_web_libraries_in_flutter',
-    // Produces a CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY.
-    'LinterLintCode.control_flow_in_finally',
+    'avoid_web_libraries_in_flutter',
+    // Produces a body_might_complete_normally.
+    'control_flow_in_finally',
     // Missing support for creating an indirect dependency on a package.
-    'LinterLintCode.depend_on_referenced_packages',
+    'depend_on_referenced_packages',
     // Missing support for specifying the name of the test file.
-    'LinterLintCode.file_names',
+    'file_names',
     // Produces an unused import diagnostic.
-    'LinterLintCode.implementation_imports',
+    'implementation_imports',
     // Doesn't produce a lint for the second example, even though the analyzer
     // does when the example is pasted into a file.
-    'LinterLintCode.prefer_inlined_adds_single',
+    'prefer_inlined_adds_single',
     // No mock 'test' package, no good library annotations in 'meta'.
-    'LinterLintCode.library_annotations',
+    'library_annotations',
     // Produces an unused import diagnostic.
-    'LinterLintCode.library_prefixes',
+    'library_prefixes',
     // Produces an unused element diagnostic.
-    'LinterLintCode.library_private_types_in_public_api',
+    'library_private_types_in_public_api',
     // Missing support for YAML files.
-    'LinterLintCode.package_names',
+    'package_names',
     // The lint does nothing.
-    'LinterLintCode.package_prefixed_library_names',
+    'package_prefixed_library_names',
     // Need a way to specify the existance of files whose content is irrelevant.
-    'LinterLintCode.prefer_relative_imports',
+    'prefer_relative_imports',
     // The test file is in a basic workspace, so it can't have public API. I
     // think we'd need to add a `pubspec.yaml` file to the example.
-    'LinterLintCode.public_member_api_docs',
+    'public_member_api_docs',
     // Missing support for YAML files.
-    'LinterLintCode.secure_pubspec_urls',
+    'secure_pubspec_urls',
     // The test framework doesn't yet support lints in non-dart files.
-    'LinterLintCode.sort_pub_dependencies',
+    'sort_pub_dependencies',
     // Doesn't produce a lint for the first example, even though the analyzer
     // does when the example is pasted into a file.
-    'LinterLintCode.unnecessary_lambdas',
+    'unnecessary_lambdas',
     // Produces an unused_field warning.
-    'LinterLintCode.use_setters_to_change_properties',
+    'use_setters_to_change_properties',
     // Extra warning.
-    'LinterLintCode.recursive_getters',
+    'recursive_getters',
 
     // Has `language=2.9`
-    'CompileTimeErrorCode.EXTENSION_DECLARES_INSTANCE_FIELD',
+    'extension_declares_instance_field',
 
-    // Produces the newer PRIVATE_NAMED_NON_FIELD_PARAMETER diagnostic instead
+    // Produces the newer private_named_non_field_parameter diagnostic instead
     // as part of the "private named parameters" feature.
-    'ParserErrorCode.PRIVATE_OPTIONAL_PARAMETER',
+    'private_optional_parameter',
 
     //
     // The following can't currently be verified because the examples aren't
     // Dart code.
     //
-    'PubspecWarningCode.ASSET_DOES_NOT_EXIST',
-    'PubspecWarningCode.ASSET_DIRECTORY_DOES_NOT_EXIST',
-    'PubspecWarningCode.ASSET_FIELD_NOT_LIST',
-    'PubspecWarningCode.ASSET_MISSING_PATH',
-    'PubspecWarningCode.ASSET_NOT_STRING',
-    'PubspecWarningCode.ASSET_NOT_STRING_OR_MAP',
-    'PubspecWarningCode.ASSET_PATH_NOT_STRING',
-    'PubspecWarningCode.DEPENDENCIES_FIELD_NOT_MAP',
-    'PubspecWarningCode.DEPRECATED_FIELD',
-    'PubspecWarningCode.FLUTTER_FIELD_NOT_MAP',
-    'PubspecWarningCode.INVALID_DEPENDENCY',
-    'PubspecWarningCode.INVALID_PLATFORMS_FIELD',
-    'PubspecWarningCode.MISSING_NAME',
-    'PubspecWarningCode.MISSING_DEPENDENCY',
-    'PubspecWarningCode.NAME_NOT_STRING',
-    'PubspecWarningCode.PATH_DOES_NOT_EXIST',
-    'PubspecWarningCode.PATH_NOT_POSIX',
-    'PubspecWarningCode.PATH_PUBSPEC_DOES_NOT_EXIST',
-    'PubspecWarningCode.PLATFORM_VALUE_DISALLOWED',
-    'PubspecWarningCode.UNKNOWN_PLATFORM',
-    'PubspecWarningCode.UNNECESSARY_DEV_DEPENDENCY',
-    'PubspecWarningCode.WORKSPACE_FIELD_NOT_LIST',
-    'PubspecWarningCode.WORKSPACE_VALUE_NOT_STRING',
-    'PubspecWarningCode.WORKSPACE_VALUE_NOT_SUBDIRECTORY',
+    'asset_does_not_exist',
+    'asset_directory_does_not_exist',
+    'asset_field_not_list',
+    'asset_missing_path',
+    'asset_not_string',
+    'asset_not_string_or_map',
+    'asset_path_not_string',
+    'dependencies_field_not_map',
+    'deprecated_field',
+    'flutter_field_not_map',
+    'invalid_dependency',
+    'invalid_platforms_field',
+    'missing_name',
+    'missing_dependency',
+    'name_not_string',
+    'path_does_not_exist',
+    'path_not_posix',
+    'path_pubspec_does_not_exist',
+    'platform_value_disallowed',
+    'unknown_platform',
+    'unnecessary_dev_dependency',
+    'workspace_field_not_list',
+    'workspace_value_not_string',
+    'workspace_value_not_subdirectory',
 
     // Produces two diagnostics out of necessity.
-    'StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION',
+    'dead_null_aware_expression',
 
-    // Reports CompileTimeErrorCode.FINAL_CLASS_EXTENDED_OUTSIDE_OF_LIBRARY
-    'WarningCode.DEPRECATED_EXTENDS_FUNCTION',
+    // Reports final_class_extended_outside_of_library
+    'deprecated_extends_function',
     // Doesn't apply to Dart files.
     // TODO(brianwilkerson): Provide better support for non-Dart files.
-    'WarningCode.REMOVED_LINT_USE',
+    'removed_lint_use',
     // Produces more than one error range by design.
     // TODO(srawlins): update verification to allow for multiple highlight ranges.
-    'WarningCode.TEXT_DIRECTION_CODE_POINT_IN_COMMENT',
+    'text_direction_code_point_in_comment',
     // Produces more than one error range by design.
-    'WarningCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL',
+    'text_direction_code_point_in_literal',
     // Produces two diagnostics out of necessity.
-    'WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE',
+    'unnecessary_null_comparison_never_null_false',
     // Produced two diagnostics because `mustBeConst` is experimental.
-    'WarningCode.NON_CONST_ARGUMENT_FOR_CONST_PARAMETER',
+    'non_const_argument_for_const_parameter',
   ];
 
   /// The buffer to which validation errors are written.
@@ -220,6 +220,7 @@
   Future<void> validate() async {
     await _validateMessages(feAnalyzerSharedMessages);
     await _validateMessages(analyzerMessages);
+    await _validateMessages(analysisServerMessages);
     await _validateMessages(lintMessages);
     if (buffer.isNotEmpty) {
       fail(buffer.toString());
@@ -351,8 +352,8 @@
         message.documentation,
       );
       if (docs != null) {
-        codeName = message.sharedName ?? message.analyzerCode.snakeCaseName;
-        variableName = message.analyzerCode.toString();
+        codeName = (message.sharedName ?? message.analyzerCode).snakeCaseName;
+        variableName = message.analyzerCode.lowerSnakeCaseName;
         if (unverifiedDocs.contains(variableName)) {
           continue;
         }
@@ -370,7 +371,7 @@
         }
         for (int i = 0; i < exampleSnippets.length; i++) {
           _SnippetData snippet = exampleSnippets[i];
-          if (message.analyzerCode.diagnosticClass == linterLintCodeInfo) {
+          if (message.type == AnalyzerDiagnosticType.lint) {
             snippet.lintCode = codeName;
           }
           await _validateSnippet('example', i, snippet);
@@ -385,7 +386,7 @@
           if (firstExample != null) {
             snippet.auxiliaryFiles.addAll(firstExample.auxiliaryFiles);
           }
-          if (message.analyzerCode.diagnosticClass == linterLintCodeInfo) {
+          if (message.type == AnalyzerDiagnosticType.lint) {
             snippet.lintCode = codeName;
           }
           await _validateSnippet('fixes', i, snippet);
diff --git a/pkg/analyzer/test/verify_docs_test.dart b/pkg/analyzer/test/verify_docs_test.dart
index 49c9e76..f709418 100644
--- a/pkg/analyzer/test/verify_docs_test.dart
+++ b/pkg/analyzer/test/verify_docs_test.dart
@@ -12,7 +12,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/package_root.dart' as package_root;
 import 'package:test/test.dart';
 
@@ -164,8 +164,8 @@
         Iterable<Diagnostic> diagnostics = results.diagnostics.where((error) {
           DiagnosticCode diagnosticCode = error.diagnosticCode;
           // TODO(brianwilkerson): .
-          return diagnosticCode != WarningCode.unusedImport &&
-              diagnosticCode != WarningCode.unusedLocalVariable &&
+          return diagnosticCode != diag.unusedImport &&
+              diagnosticCode != diag.unusedLocalVariable &&
               !isAllowedLint(error);
         });
         if (diagnostics.isNotEmpty) {
diff --git a/pkg/analyzer/tool/ast/generate.dart b/pkg/analyzer/tool/ast/generate.dart
index 07ab7002..52a49e6 100644
--- a/pkg/analyzer/tool/ast/generate.dart
+++ b/pkg/analyzer/tool/ast/generate.dart
@@ -147,6 +147,9 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
   R? visit$name($name node);
 ''');
@@ -228,6 +231,10 @@
         out.writeln('@override');
       }
 
+      if (node.isDeprecated) {
+        out.writeln('  // ignore: deprecated_member_use_from_same_package');
+      }
+
       // TODO(fshcheglov): Remove special case after AST hierarchy is fixed.
       // https://github.com/dart-lang/sdk/issues/61224
       if (node.apiElementName == 'FunctionDeclaration') {
@@ -276,8 +283,11 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
-  @override
   R? visit$name($name node) {
     node.visitChildren(this);
     return null;
@@ -306,8 +316,11 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
-  @override
   R? visit$name($name node) => null;
 ''');
       }
@@ -342,8 +355,11 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
-  @override
   R? visit$name($name node) => _throw(node);
 ''');
       }
@@ -374,8 +390,11 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
-  @override
   T? visit$name($name node) {
     stopwatch.start();
     T? result = _baseVisitor.visit$name(node);
@@ -416,8 +435,11 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
-  @override
   R? visit$name($name node) => visitNode(node);
 ''');
       }
@@ -531,8 +553,11 @@
         if (node.isExperimental) {
           out.writeln('  @experimental');
         }
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
         out.writeln('''
-  @override
   void visit$name($name node) {
     _runSubscriptions(node, _registry._for$name);
     node.visitChildren(this);
@@ -571,13 +596,21 @@
     for (var node in astLibrary.nodes) {
       if (node.isConcrete) {
         var name = node.apiElementName;
-        out.writeln('''
-final List<_Subscription<$name>> _for$name = [];
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
+        out.writeln('  final List<_Subscription<$name>> _for$name = [];');
 
-@override
-void add$name(AbstractAnalysisRule rule, AstVisitor visitor) {
-  _for$name.add(_Subscription(rule, visitor, _getTimer(rule)));
-}
+        out.writeln();
+
+        out.writeln('  @override');
+        if (node.isDeprecated) {
+          out.writeln('  // ignore: deprecated_member_use_from_same_package');
+        }
+        out.writeln('''
+  void add$name(AbstractAnalysisRule rule, AstVisitor visitor) {
+    _for$name.add(_Subscription(rule, visitor, _getTimer(rule)));
+  }
 ''');
       }
     }
@@ -598,6 +631,10 @@
 
   bool get isConcrete => !implElement.isAbstract;
 
+  bool get isDeprecated {
+    return apiElement.metadata.hasDeprecated;
+  }
+
   bool get isExperimental {
     return apiElement.metadata.hasExperimental;
   }
diff --git a/pkg/analyzer/tool/benchmark/heap/flutter_elements.dart b/pkg/analyzer/tool/benchmark/heap/flutter_elements.dart
index 3b3d112..1b87102 100644
--- a/pkg/analyzer/tool/benchmark/heap/flutter_elements.dart
+++ b/pkg/analyzer/tool/benchmark/heap/flutter_elements.dart
@@ -301,6 +301,7 @@
     fileContentCache: fileContentCache,
     includedPaths: [includedPath],
     unlinkedUnitStore: unlinkedUnitStore,
+    withFineDependencies: true,
   );
   var result = await f(collection);
   collection.hashCode; // to keep it alive
diff --git a/pkg/analyzer/tool/fine/ab_mutate/engine.dart b/pkg/analyzer/tool/fine/ab_mutate/engine.dart
index 5e5883c..0c86014 100644
--- a/pkg/analyzer/tool/fine/ab_mutate/engine.dart
+++ b/pkg/analyzer/tool/fine/ab_mutate/engine.dart
@@ -9,10 +9,10 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
+import 'package:analyzer/error/error.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
-import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
 
@@ -77,7 +77,7 @@
       if (errorsResult is ErrorsResult) {
         for (var diagnostic in errorsResult.diagnostics) {
           // Filter TODOs, not interesting for comparison.
-          if (diagnostic.diagnosticCode is TodoCode) {
+          if (diagnostic.diagnosticCode.type == DiagnosticType.TODO) {
             continue;
           }
           var severityName = _getProcessedSeverity(errorsResult, diagnostic);
diff --git a/pkg/analyzer/tool/generators/ast_generator.dart b/pkg/analyzer/tool/generators/ast_generator.dart
index 2378d96..d973a1f 100644
--- a/pkg/analyzer/tool/generators/ast_generator.dart
+++ b/pkg/analyzer/tool/generators/ast_generator.dart
@@ -129,11 +129,12 @@
         .nonNulls
         .toList();
 
+    var nodeBody = nodeImpl.body as BlockClassBodyImpl;
     return _ImplClass(
       node: nodeImpl,
       interfaceElement: interfaceElement,
       properties: properties,
-      leftBracketOffset: nodeImpl.leftBracket.offset,
+      leftBracketOffset: nodeBody.leftBracket.offset,
     );
   }
 
@@ -683,7 +684,7 @@
   void _removeGeneratedMembers(ResolvedUnitResult astUnitResult) {
     var replacements = <_Replacement>[];
     for (var implClass in implClasses) {
-      for (var member in implClass.node.members) {
+      for (var member in implClass.members) {
         String memberName;
         switch (member) {
           case ConstructorDeclarationImpl():
@@ -708,6 +709,8 @@
               implClass.doNotGenerateLookupNames.add(memberName);
               continue;
             }
+          case PrimaryConstructorBodyImpl():
+            throw UnimplementedError();
         }
         if (implClass.generatedLookupNames.contains(memberName)) {
           replacements.add(_Replacement(member.offset, member.end, ''));
@@ -844,8 +847,12 @@
     );
   }
 
+  NodeListImpl<ClassMemberImpl> get members {
+    return (node.body as BlockClassBodyImpl).members;
+  }
+
   String get name {
-    return node.name.lexeme;
+    return node.namePart.typeName.lexeme;
   }
 }
 
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 71b1a1a..05c637e 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -20,6 +20,7 @@
 
 import 'package:analyzer_testing/package_root.dart' as pkg_root;
 import 'package:analyzer_utilities/analyzer_messages.dart';
+import 'package:analyzer_utilities/located_error.dart';
 import 'package:analyzer_utilities/messages.dart';
 import 'package:analyzer_utilities/tools.dart';
 
@@ -33,26 +34,7 @@
 /// Generates a list of [GeneratedContent] objects describing all the analyzer
 /// files that need to be generated.
 List<GeneratedContent> _analyzerGeneratedFiles() {
-  var classesByFile =
-      <GeneratedDiagnosticFile, List<GeneratedDiagnosticClassInfo>>{};
-  for (var diagnosticClassInfo in diagnosticClasses) {
-    if (diagnosticClassInfo is! GeneratedDiagnosticClassInfo) continue;
-
-    // Lint codes are generated separately.
-    if (diagnosticClassInfo == linterLintCodeInfo) continue;
-
-    (classesByFile[diagnosticClassInfo.file] ??= []).add(diagnosticClassInfo);
-  }
   return [
-    for (var entry in classesByFile.entries)
-      GeneratedFile(entry.key.path, (pkgRoot) async {
-        var codeGenerator = _AnalyzerDiagnosticGenerator(
-          entry.key,
-          entry.value,
-        );
-        codeGenerator.generate();
-        return codeGenerator.out.toString();
-      }),
     GeneratedFile('analyzer/lib/src/diagnostic/diagnostic_code_values.g.dart', (
       pkgRoot,
     ) async {
@@ -60,17 +42,33 @@
       codeGenerator.generate();
       return codeGenerator.out.toString();
     }),
+    for (var package in AnalyzerDiagnosticPackage.values)
+      GeneratedFile(
+        '${package.dirName}/lib/${package.diagnosticPathPart}.g.dart',
+        (pkgRoot) async {
+          var codeGenerator = _AnalyzerDiagnosticGenerator(
+            package: package,
+            parentLibrary:
+                'package:${package.dirName}/${package.diagnosticPathPart}.dart',
+          );
+          codeGenerator.generate();
+          return codeGenerator.out.toString();
+        },
+      ),
   ];
 }
 
-/// Code generator for analyzer diagnostic classes.
+/// Code generator for files containing analyzer diagnostics as top level
+/// constants.
 class _AnalyzerDiagnosticGenerator {
-  final GeneratedDiagnosticFile file;
+  /// The package into which diagnostic will be generated.
+  final AnalyzerDiagnosticPackage package;
 
-  final List<GeneratedDiagnosticClassInfo> diagnosticClasses;
+  /// The Uri of the library that the generated file will be a part of.
+  final String parentLibrary;
 
   final StringBuffer out = StringBuffer('''
-// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -78,115 +76,30 @@
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
 // 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
 ''');
 
-  _AnalyzerDiagnosticGenerator(this.file, this.diagnosticClasses);
+  _AnalyzerDiagnosticGenerator({
+    required this.package,
+    required this.parentLibrary,
+  });
 
   void generate() {
-    out.writeln('// ignore_for_file: deprecated_member_use_from_same_package');
-    if (file.shouldIgnorePreferSingleQuotes) {
-      out.writeln('// ignore_for_file: prefer_single_quotes');
-    }
-    out.write('''
-// 
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-''');
+    package.writeIgnoresTo(out);
     out.writeln();
     out.write('''
-part of ${json.encode(file.parentLibrary)};
+part of ${json.encode(parentLibrary)};
 ''');
-    for (var diagnosticClass
-        in diagnosticClasses.toList()
-          ..sort((a, b) => a.name.compareTo(b.name))) {
-      out.writeln();
-      if (diagnosticClass.comment.isNotEmpty) {
-        diagnosticClass.comment.trimRight().split('\n').forEach((line) {
-          out.writeln('/// $line');
-        });
-      }
-      out.write(
-        'class ${diagnosticClass.name} extends DiagnosticCodeWithExpectedTypes {',
-      );
-      var memberAccumulator = MemberAccumulator();
+    out.writeln();
 
-      for (var message
-          in diagnosticTables.activeMessagesByPackage[diagnosticClass
-              .package]!) {
-        if (message.analyzerCode.diagnosticClass != diagnosticClass) continue;
+    var memberAccumulator = MemberAccumulator();
 
-        LocatedError.wrap(span: message.keySpan, () {
-          message.toAnalyzerCode(memberAccumulator: memberAccumulator);
-        });
-      }
-
-      var constructor = StringBuffer();
-      constructor.writeln(
-        '/// Initialize a newly created error code to have the given '
-        '[name].',
-      );
-      constructor.writeln('const ${diagnosticClass.name}({');
-      constructor.writeln('required super.name,');
-      constructor.writeln('required super.problemMessage,');
-      constructor.writeln('super.correctionMessage,');
-      constructor.writeln('super.hasPublishedDocs = false,');
-      constructor.writeln('super.isUnresolvedIdentifier = false,');
-      constructor.writeln('String? uniqueName,');
-      constructor.writeln('required String super.uniqueNameCheck,');
-      constructor.writeln('required super.expectedTypes,');
-      constructor.writeln('}) : super(');
-      constructor.writeln('type: ${diagnosticClass.typeCode},');
-      constructor.writeln(
-        "uniqueName: '${diagnosticClass.name}.\${uniqueName ?? name}',",
-      );
-      constructor.writeln(');');
-      memberAccumulator.constructors[''] = constructor.toString();
-
-      memberAccumulator.writeTo(out);
-      out.writeln('}');
-
-      out.writeln();
-      _outputDerivedClass(diagnosticClass, withArguments: true);
-      out.writeln();
-      _outputDerivedClass(diagnosticClass, withArguments: false);
+    for (var message in diagnosticTables.activeMessagesByPackage[package]!) {
+      LocatedError.wrap(span: message.keySpan, () {
+        message.toAnalyzerCode(memberAccumulator: memberAccumulator);
+      });
     }
-  }
 
-  void _outputDerivedClass(
-    GeneratedDiagnosticClassInfo diagnosticClass, {
-    required bool withArguments,
-  }) {
-    var className = withArguments
-        ? diagnosticClass.templateName
-        : diagnosticClass.withoutArgumentsName;
-    out.writeln('final class $className');
-    if (withArguments) out.writeln('<T extends Function>');
-    out.writeln('    extends ${diagnosticClass.name}');
-    if (!withArguments) out.writeln('    with DiagnosticWithoutArguments');
-    out.writeln('{');
-    if (withArguments) {
-      out.writeln('final T withArguments;');
-      out.writeln();
-    }
-    out.writeln(
-      '/// Initialize a newly created error code to have the given '
-      '[name].',
-    );
-    out.writeln('const $className({');
-    out.writeln('required super.name,');
-    out.writeln('required super.problemMessage,');
-    out.writeln('super.correctionMessage,');
-    out.writeln('super.hasPublishedDocs = false,');
-    out.writeln('super.isUnresolvedIdentifier = false,');
-    out.writeln('super.uniqueName,');
-    out.writeln('required super.uniqueNameCheck,');
-    out.writeln('required super.expectedTypes,');
-    if (withArguments) out.writeln('required this.withArguments,');
-    out.writeln('});');
-    out.writeln('}');
+    memberAccumulator.writeTo(out);
   }
 }
 
@@ -200,17 +113,10 @@
 //
 // Instead modify 'pkg/analyzer/messages.yaml' and run
 // 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
-
-// We allow some snake_case and SCREAMING_SNAKE_CASE identifiers in generated
-// code, as they match names declared in the source configuration files.
-// ignore_for_file: constant_identifier_names
-
-// While transitioning `HintCodes` to `WarningCodes`, we refer to deprecated
-// codes here.
-// ignore_for_file: deprecated_member_use_from_same_package
 ''');
 
   void generate() {
+    AnalyzerDiagnosticPackage.analyzer.writeIgnoresTo(out);
     out.writeln();
     out.writeln(r'''
 part of 'diagnostic_code_values.dart';
@@ -223,9 +129,7 @@
     for (var message
         in diagnosticTables.activeMessagesByPackage[AnalyzerDiagnosticPackage
             .analyzer]!) {
-      var analyzerCode = message.analyzerCode;
-      var diagnosticName = analyzerCode.camelCaseName;
-      out.writeln('  ${analyzerCode.diagnosticClass.name}.$diagnosticName,');
+      out.writeln('  ${message.analyzerCode.analyzerCodeReference},');
     }
     out.writeln('];');
     out.writeln();
diff --git a/pkg/analyzer/tool/stable_analysis.dart b/pkg/analyzer/tool/stable_analysis.dart
index 6809d5b..4366a7f 100644
--- a/pkg/analyzer/tool/stable_analysis.dart
+++ b/pkg/analyzer/tool/stable_analysis.dart
@@ -102,6 +102,7 @@
         if (!silent) print("Enabled $added lints");
       }
     },
+    withFineDependencies: true,
   );
   DriverBasedAnalysisContext context = collection.contexts[0];
   AnalysisDriver analysisDriver = context.driver;
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 22439c3..ae41dc5 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -242,49 +242,6 @@
   }
 
   @override
-  void endClassFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    debugEvent("ClassFactoryMethod");
-    pop(); // Body
-    pop(); // Type variables
-    var name = pop() as String;
-    var metadata = popTypedList() as List<Annotation>?;
-    var comment = pop() as Comment?;
-    push(ConstructorDeclaration(comment, metadata, name));
-  }
-
-  @override
-  void endClassMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("Method");
-    pop(); // Body
-    pop(); // Initializers
-    pop(); // Formal parameters
-    pop(); // Type variables
-    var name = pop() as String;
-    var returnType = pop() as TypeName?;
-    var metadata = popTypedList<Annotation>();
-    var comment = pop() as Comment?;
-    push(
-      MethodDeclaration(
-        comment,
-        metadata,
-        getOrSet?.lexeme == 'get',
-        name,
-        returnType,
-      ),
-    );
-  }
-
-  @override
   void endClassOrMixinOrExtensionBody(
     DeclarationKind kind,
     int memberCount,
@@ -339,6 +296,22 @@
   }
 
   @override
+  void endFactory(
+    DeclarationKind kind,
+    Token beginToken,
+    Token factoryKeyword,
+    Token endToken,
+  ) {
+    debugEvent("Factory");
+    pop(); // Body
+    pop(); // Type variables
+    var name = pop() as String;
+    var metadata = popTypedList() as List<Annotation>?;
+    var comment = pop() as Comment?;
+    push(ConstructorDeclaration(comment, metadata, name));
+  }
+
+  @override
   void endFieldInitializer(Token assignment, Token token) {
     debugEvent("FieldInitializer");
     pop(); // Expression
@@ -425,6 +398,35 @@
   }
 
   @override
+  void endMethod(
+    DeclarationKind kind,
+    Token? getOrSet,
+    Token beginToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    debugEvent("Method");
+    pop(); // Body
+    pop(); // Initializers
+    pop(); // Formal parameters
+    pop(); // Type variables
+    var name = pop() as String;
+    var returnType = pop() as TypeName?;
+    var metadata = popTypedList<Annotation>();
+    var comment = pop() as Comment?;
+    push(
+      MethodDeclaration(
+        comment,
+        metadata,
+        getOrSet?.lexeme == 'get',
+        name,
+        returnType,
+      ),
+    );
+  }
+
+  @override
   void endShow(Token showKeyword) {
     debugEvent("Show");
     pop(); // Shown names
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index 5df9d79..e15cd43 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -15,14 +15,12 @@
 import 'package:analyzer_cli/src/driver.dart';
 import 'package:analyzer_cli/src/error_formatter.dart';
 import 'package:analyzer_cli/src/error_severity.dart';
-import 'package:analyzer_cli/src/options.dart';
 import 'package:path/path.dart' as path;
 
 int get currentTimeMillis => DateTime.now().millisecondsSinceEpoch;
 
 /// Analyzes single library [File].
 class AnalyzerImpl {
-  final CommandLineOptions options;
   final int startTime;
 
   final AnalysisOptions analysisOptions;
@@ -53,7 +51,6 @@
     this.analysisOptions,
     this.analysisDriver,
     this.libraryFile,
-    this.options,
     this.stats,
     this.startTime,
     this.gotErrorsFor,
@@ -126,9 +123,7 @@
         if (_defaultSeverityProcessor(diagnostic) == null) {
           continue;
         }
-        status = status.max(
-          computeSeverity(diagnostic, options, analysisOptions)!,
-        );
+        status = status.max(computeSeverity(diagnostic, analysisOptions)!);
       }
     }
     return status;
@@ -191,7 +186,7 @@
   }
 
   DiagnosticSeverity? _defaultSeverityProcessor(Diagnostic diagnostic) =>
-      determineProcessedSeverity(diagnostic, options, analysisOptions);
+      determineProcessedSeverity(diagnostic, analysisOptions);
 
   /// Returns true if we want to report diagnostics for this library.
   bool _isAnalyzedLibrary(LibraryElement library) {
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index f6025a6..e0ecfcf 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -184,7 +184,6 @@
       var file = analysisDriver!.resourceProvider.getFile(filePath);
       return determineProcessedSeverity(
         diagnostic,
-        options,
         analysisDriver!.getAnalysisOptionsForFile(file),
       );
     };
@@ -299,11 +298,7 @@
             ),
           ]);
           for (var error in errors) {
-            var severity = determineProcessedSeverity(
-              error,
-              options,
-              analysisOptions,
-            );
+            var severity = determineProcessedSeverity(error, analysisOptions);
             if (severity != null) {
               allResult = allResult.max(severity);
             }
@@ -331,7 +326,6 @@
               for (var error in diagnostics) {
                 var severity = determineProcessedSeverity(
                   error,
-                  options,
                   analysisOptions,
                 )!;
                 allResult = allResult.max(severity);
@@ -384,7 +378,6 @@
             for (var error in errors) {
               var severity = determineProcessedSeverity(
                 error,
-                options,
                 analysisOptions,
               )!;
               allResult = allResult.max(severity);
@@ -398,12 +391,7 @@
 
           final kind = file.kind;
           if (kind is LibraryFileKind) {
-            var status = await _runAnalyzer(
-              file,
-              options,
-              formatter,
-              gotErrorsFor,
-            );
+            var status = await _runAnalyzer(file, formatter, gotErrorsFor);
             allResult = allResult.max(status);
             analyzedFiles.addAll(kind.files);
           } else if (kind is PartFileKind) {
@@ -472,7 +460,6 @@
   /// Analyze a single source.
   Future<DiagnosticSeverity> _runAnalyzer(
     FileState file,
-    CommandLineOptions options,
     ErrorFormatter formatter,
     Set<String> gotErrorsFor,
   ) {
@@ -485,7 +472,6 @@
       analysisOptions,
       analysisDriver,
       file,
-      options,
       stats,
       startTime,
       gotErrorsFor,
diff --git a/pkg/analyzer_cli/lib/src/error_severity.dart b/pkg/analyzer_cli/lib/src/error_severity.dart
index fba9571..c90937c 100644
--- a/pkg/analyzer_cli/lib/src/error_severity.dart
+++ b/pkg/analyzer_cli/lib/src/error_severity.dart
@@ -6,7 +6,6 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer_cli/src/options.dart';
 
 /// Compute the severity of the error; however:
 /// - if `options.enableTypeChecks` is false, then de-escalate checked-mode
@@ -14,7 +13,6 @@
 /// - if `options.lintsAreFatal` is true, escalate lints to errors.
 DiagnosticSeverity? computeSeverity(
   Diagnostic diagnostic,
-  CommandLineOptions commandLineOptions,
   AnalysisOptions analysisOptions,
 ) {
   var processor = ErrorProcessor.getProcessor(analysisOptions, diagnostic);
@@ -30,14 +28,9 @@
 /// [diagnostic] (or `null` if it's to be suppressed).
 DiagnosticSeverity? determineProcessedSeverity(
   Diagnostic diagnostic,
-  CommandLineOptions commandLineOptions,
   AnalysisOptions analysisOptions,
 ) {
-  var severity = computeSeverity(
-    diagnostic,
-    commandLineOptions,
-    analysisOptions,
-  );
+  var severity = computeSeverity(diagnostic, analysisOptions);
   // Skip TODOs categorically unless escalated to ERROR or HINT (#26215).
   if (diagnostic.diagnosticCode.type == DiagnosticType.TODO &&
       severity == DiagnosticSeverity.INFO) {
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index d75ae2e..e6fc9d9 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -9,7 +9,7 @@
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/source/source.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/sdk.dart';
@@ -432,7 +432,7 @@
       source: TestSource(),
       offset: 0,
       length: 1,
-      diagnosticCode: WarningCode.unusedLocalVariable,
+      diagnosticCode: diag.unusedLocalVariable,
       arguments: [
         ['x'],
       ],
@@ -444,7 +444,7 @@
       source: TestSource(),
       offset: 0,
       length: 1,
-      diagnosticCode: WarningCode.assignmentOfDoNotStore,
+      diagnosticCode: diag.assignmentOfDoNotStore,
       arguments: [
         ['x'],
       ],
diff --git a/pkg/analyzer_plugin/CHANGELOG.md b/pkg/analyzer_plugin/CHANGELOG.md
index 08d8e55..d87fe14 100644
--- a/pkg/analyzer_plugin/CHANGELOG.md
+++ b/pkg/analyzer_plugin/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 0.14.0-dev
+
+- Require version `10.0.0` of the `analyzer` package.
+- `AssistContributorMixin` is now a mixin.
+- Remove deprecated `methodBeingCopied` parameters on various methods.
+- Remove `ChangeBuilder.new`'s deprecated `eol` parameter.
+- Remove `ChangeBuilder.addDartFileEdit`'s deprecated `importPrefixGenerator` parameter.
+- Remove the deprecated `ChangeBuilder.copy` method.
+- Remove the deprecated `RangeFactory.error` method.
+
 ## 0.13.11
 
 - Require version `9.0.0` of the `analyzer` package.
diff --git a/pkg/analyzer_plugin/api.txt b/pkg/analyzer_plugin/api.txt
index e54d5aa..51ab6d2 100644
--- a/pkg/analyzer_plugin/api.txt
+++ b/pkg/analyzer_plugin/api.txt
@@ -333,9 +333,11 @@
     FLAG_STATIC (static getter: int)
     makeFlags (static method: int Function({bool isAbstract, bool isConst, bool isDeprecated, bool isFinal, bool isPrivate, bool isStatic}))
     fromJson (constructor: Element@1 Function(JsonDecoder, String, Object?, {ClientUriConverter? clientUriConverter}))
-    new (constructor: Element@1 Function(ElementKind@1, String, int, {String? aliasedType, Location? location, String? parameters, String? returnType, String? typeParameters}))
+    new (constructor: Element@1 Function(ElementKind@1, String, int, {String? aliasedType, String? extendedType, Location? location, String? parameters, String? returnType, String? typeParameters}))
     aliasedType (getter: String?)
     aliasedType= (setter: String?)
+    extendedType (getter: String?)
+    extendedType= (setter: String?)
     flags (getter: int)
     flags= (setter: int)
     hashCode (getter: int)
@@ -1682,20 +1684,18 @@
     new (constructor: DartAssistRequest Function())
     result (getter: ResolvedUnitResult)
 package:analyzer_plugin/utilities/assist/assist_contributor_mixin.dart:
-  AssistContributorMixin (class extends Object implements AssistContributor):
-    new (constructor: AssistContributorMixin Function())
+  AssistContributorMixin (mixin on AssistContributor):
     collector (getter: AssistCollector)
     addAssist (method: void Function(AssistKind, ChangeBuilder, {List<Object>? args}))
 package:analyzer_plugin/utilities/change_builder/change_builder_core.dart:
   ChangeBuilder (class extends Object):
-    new (constructor: ChangeBuilder Function({String? defaultEol, deprecated String? eol, AnalysisSession session, ChangeWorkspace workspace}))
+    new (constructor: ChangeBuilder Function({String? defaultEol, AnalysisSession session, ChangeWorkspace workspace}))
     defaultEol (getter: String)
     selectionRange (getter: SourceRange?)
     sourceChange (getter: SourceChange)
-    addDartFileEdit (method: Future<void> Function(String, FutureOr<void> Function(DartFileEditBuilder), {bool createEditsForImports, deprecated String Function(Uri) importPrefixGenerator}))
+    addDartFileEdit (method: Future<void> Function(String, FutureOr<void> Function(DartFileEditBuilder), {bool createEditsForImports}))
     addGenericFileEdit (method: Future<void> Function(String, void Function(FileEditBuilder)))
     addYamlFileEdit (method: Future<void> Function(String, void Function(YamlFileEditBuilder)))
-    copy (method: ChangeBuilder Function(), deprecated)
     hasEditsFor (method: bool Function(String))
     setSelection (method: void Function(Position))
   EditBuilder (class extends Object):
@@ -1725,13 +1725,13 @@
   DartEditBuilder (class extends Object implements EditBuilder):
     new (constructor: DartEditBuilder Function())
     addLinkedEdit (method: void Function(String, void Function(DartLinkedEditBuilder)))
-    canWriteType (method: bool Function(DartType?, {deprecated ExecutableElement? methodBeingCopied, List<TypeParameterElement>? typeParametersInScope}))
+    canWriteType (method: bool Function(DartType?, {List<TypeParameterElement>? typeParametersInScope}))
     getIndent (method: String Function(int))
     writeClassDeclaration (method: void Function(String, {Iterable<DartType>? interfaces, bool isAbstract, void Function()? membersWriter, Iterable<DartType>? mixins, String? nameGroupName, DartType? superclass, String? superclassGroupName}))
     writeConstructorDeclaration (method: void Function(String, {ArgumentList? argumentList, void Function()? bodyWriter, String? classNameGroupName, String? constructorName, String? constructorNameGroupName, List<String>? fieldNames, void Function()? initializerWriter, bool isConst, void Function()? parameterWriter}))
     writeFieldDeclaration (method: void Function(String, {void Function()? initializerWriter, bool isConst, bool isFinal, bool isStatic, String? nameGroupName, DartType? type, String? typeGroupName}))
-    writeFormalParameter (method: void Function(String, {bool isCovariant, bool isRequiredNamed, bool isRequiredType, deprecated ExecutableElement? methodBeingCopied, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
-    writeFormalParameters (method: void Function(Iterable<FormalParameterElement>, {bool fillParameterNames, String? groupNamePrefix, bool includeDefaultValues, deprecated ExecutableElement? methodBeingCopied, bool requiredTypes, List<TypeParameterElement>? typeParametersInScope}))
+    writeFormalParameter (method: void Function(String, {bool isCovariant, bool isRequiredNamed, bool isRequiredType, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
+    writeFormalParameters (method: void Function(Iterable<FormalParameterElement>, {bool fillParameterNames, String? groupNamePrefix, bool includeDefaultValues, bool requiredTypes, List<TypeParameterElement>? typeParametersInScope}))
     writeFunctionDeclaration (method: void Function(String, {void Function()? bodyWriter, bool isStatic, String? nameGroupName, void Function()? parameterWriter, DartType? returnType, String? returnTypeGroupName}))
     writeGetterDeclaration (method: void Function(String, {void Function() bodyWriter, bool isStatic, String nameGroupName, DartType returnType, String returnTypeGroupName}))
     writeImportedName (method: void Function(List<Uri>, String))
@@ -1739,14 +1739,14 @@
     writeLocalVariableDeclaration (method: void Function(String, {void Function()? initializerWriter, bool isConst, bool isFinal, String? nameGroupName, DartType? type, String? typeGroupName}))
     writeMixinDeclaration (method: void Function(String, {Iterable<DartType>? interfaces, void Function()? membersWriter, String? nameGroupName, Iterable<DartType>? superclassConstraints}))
     writeOverride (method: void Function(ExecutableElement, {StringBuffer? displayTextBuffer, bool invokeSuper, bool setSelection}))
-    writeParameter (method: void Function(String, {bool isCovariant, bool isRequiredNamed, bool isRequiredType, deprecated ExecutableElement? methodBeingCopied, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
-    writeParameterMatchingArgument (method: void Function(Expression, int, Set<String>, {deprecated ExecutableElement? methodBeingCopied, List<TypeParameterElement>? typeParametersInScope}))
-    writeParametersMatchingArguments (method: void Function(ArgumentList, {deprecated ExecutableElement? methodBeingCopied, List<TypeParameterElement>? typeParametersInScope}))
+    writeParameter (method: void Function(String, {bool isCovariant, bool isRequiredNamed, bool isRequiredType, String? nameGroupName, DartType? type, String? typeGroupName, List<TypeParameterElement>? typeParametersInScope}))
+    writeParameterMatchingArgument (method: void Function(Expression, int, Set<String>, {bool isOptional, List<TypeParameterElement>? typeParametersInScope}))
+    writeParametersMatchingArguments (method: void Function(ArgumentList, {List<TypeParameterElement>? typeParametersInScope}))
     writeReference (method: void Function(Element@2))
-    writeSetterDeclaration (method: void Function(String, {void Function()? bodyWriter, bool isStatic, deprecated ExecutableElement? methodBeingCopied, String? nameGroupName, DartType? parameterType, String? parameterTypeGroupName, List<TypeParameterElement>? typeParametersInScope}))
-    writeType (method: bool Function(DartType?, {bool addSupertypeProposals, String? groupName, deprecated ExecutableElement? methodBeingCopied, bool required, bool shouldWriteDynamic, List<TypeParameterElement>? typeParametersInScope}))
-    writeTypeParameter (method: void Function(TypeParameterElement, {deprecated ExecutableElement? methodBeingCopied, List<TypeParameterElement>? typeParametersInScope}))
-    writeTypeParameters (method: void Function(List<TypeParameterElement>, {deprecated ExecutableElement? methodBeingCopied, List<TypeParameterElement>? typeParametersInScope}))
+    writeSetterDeclaration (method: void Function(String, {void Function()? bodyWriter, bool isStatic, String? nameGroupName, DartType? parameterType, String? parameterTypeGroupName, List<TypeParameterElement>? typeParametersInScope}))
+    writeType (method: bool Function(DartType?, {bool addSupertypeProposals, String? groupName, bool required, bool shouldWriteDynamic, List<TypeParameterElement>? typeParametersInScope}))
+    writeTypeParameter (method: void Function(TypeParameterElement, {List<TypeParameterElement>? typeParametersInScope}))
+    writeTypeParameters (method: void Function(List<TypeParameterElement>, {List<TypeParameterElement>? typeParametersInScope}))
     writeTypes (method: void Function(Iterable<DartType>?, {String? prefix, bool shouldWriteDynamic}))
   DartFileEditBuilder (class extends Object implements FileEditBuilder):
     new (constructor: DartFileEditBuilder Function())
@@ -1754,7 +1754,7 @@
     requiredImports (getter: List<Uri>)
     addInsertion (method: void Function(int, void Function(DartEditBuilder)))
     addReplacement (method: void Function(SourceRange, void Function(DartEditBuilder)))
-    canWriteType (method: bool Function(DartType?, {deprecated ExecutableElement? methodBeingCopied, List<TypeParameterElement>? typeParametersInScope}))
+    canWriteType (method: bool Function(DartType?, {List<TypeParameterElement>? typeParametersInScope}))
     convertFunctionFromAsyncToSync (method: void Function({required FunctionBody body, required TypeProvider typeProvider, required TypeSystem typeSystem}))
     convertFunctionFromSyncToAsync (method: void Function({required FunctionBody body, required TypeProvider typeProvider, required TypeSystem typeSystem}))
     format (method: void Function(SourceRange))
@@ -1775,7 +1775,7 @@
   ImportLibraryElementResult (class extends Object):
     new (constructor: ImportLibraryElementResult Function())
     prefix (getter: String?)
-  ImportPrefixGenerator (type alias for String Function(Uri))
+  ImportPrefixGenerator (type alias for String Function(Uri), deprecated)
 package:analyzer_plugin/utilities/change_builder/change_builder_yaml.dart:
   YamlEditBuilder (class extends Object implements EditBuilder):
     new (constructor: YamlEditBuilder Function())
@@ -2029,7 +2029,6 @@
     endLength (method: SourceRange Function(SyntacticEntity, int))
     endStart (method: SourceRange Function(SyntacticEntity, SyntacticEntity))
     entity (method: SourceRange Function(SyntacticEntity))
-    error (method: SourceRange Function(Diagnostic), deprecated)
     fragmentName (method: SourceRange? Function(Fragment))
     node (method: SourceRange Function(AstNode))
     nodeInList (method: SourceRange Function<T extends AstNode>(NodeList<T>, T))
diff --git a/pkg/analyzer_plugin/doc/api.html b/pkg/analyzer_plugin/doc/api.html
index 7621b56..b2c8cce 100644
--- a/pkg/analyzer_plugin/doc/api.html
+++ b/pkg/analyzer_plugin/doc/api.html
@@ -1430,6 +1430,14 @@
           If the element is a type alias, this field is the aliased type.
           Otherwise this field will not be defined.
         </p>
+      </dd><dt class="field"><b>extendedType: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          If the element is an extension, this field is the name of the type
+          that is extended. This can be useful to show in UIs for unnamed
+          extension, for example "extension on {extendedType}". This field
+          might not be defined even for an extension in the case of invalid code.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_ElementKind">ElementKind: String</a></dt><dd>
     <p>
       An enumeration of the kinds of elements.
diff --git a/pkg/analyzer_plugin/lib/plugin/plugin.dart b/pkg/analyzer_plugin/lib/plugin/plugin.dart
index fd92c8d..ac60d8c 100644
--- a/pkg/analyzer_plugin/lib/plugin/plugin.dart
+++ b/pkg/analyzer_plugin/lib/plugin/plugin.dart
@@ -254,6 +254,7 @@
       byteStore: _byteStore,
       sdkPath: _sdkPath,
       fileContentCache: FileContentCache(resourceProvider),
+      withFineDependencies: true,
     );
     _contextCollection = contextCollection;
     await afterNewContextCollection(contextCollection: contextCollection);
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index 9e9dc75..fd68cb5 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -1348,6 +1348,7 @@
 ///       "returnType": optional String
 ///       "typeParameters": optional String
 ///       "aliasedType": optional String
+///       "extendedType": optional String
 ///     }
 ///
 /// Clients may not extend, implement or mix-in this class.
@@ -1417,6 +1418,12 @@
   /// this field will not be defined.
   String? aliasedType;
 
+  /// If the element is an extension, this field is the name of the type that
+  /// is extended. This can be useful to show in UIs for unnamed extension, for
+  /// example "extension on {extendedType}". This field might not be defined
+  /// even for an extension in the case of invalid code.
+  String? extendedType;
+
   Element(
     this.kind,
     this.name,
@@ -1426,6 +1433,7 @@
     this.returnType,
     this.typeParameters,
     this.aliasedType,
+    this.extendedType,
   });
 
   factory Element.fromJson(
@@ -1496,6 +1504,13 @@
           json['aliasedType'],
         );
       }
+      String? extendedType;
+      if (json.containsKey('extendedType')) {
+        extendedType = jsonDecoder.decodeString(
+          '$jsonPath.extendedType',
+          json['extendedType'],
+        );
+      }
       return Element(
         kind,
         name,
@@ -1505,6 +1520,7 @@
         returnType: returnType,
         typeParameters: typeParameters,
         aliasedType: aliasedType,
+        extendedType: extendedType,
       );
     } else {
       throw jsonDecoder.mismatch(jsonPath, "'Element'", json);
@@ -1546,6 +1562,10 @@
     if (aliasedType != null) {
       result['aliasedType'] = aliasedType;
     }
+    var extendedType = this.extendedType;
+    if (extendedType != null) {
+      result['extendedType'] = extendedType;
+    }
     return result;
   }
 
@@ -1562,7 +1582,8 @@
           parameters == other.parameters &&
           returnType == other.returnType &&
           typeParameters == other.typeParameters &&
-          aliasedType == other.aliasedType;
+          aliasedType == other.aliasedType &&
+          extendedType == other.extendedType;
     }
     return false;
   }
@@ -1577,6 +1598,7 @@
     returnType,
     typeParameters,
     aliasedType,
+    extendedType,
   );
 }
 
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 55bae9a..1e54a9f 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
@@ -80,22 +80,17 @@
   /// called.
   final _ChangeBuilderRevertData _revertData = _ChangeBuilderRevertData();
 
-  /// Initialize a newly created change builder. If the builder will be used to
-  /// create changes for Dart files, then either a [session] or a [workspace]
-  /// must be provided (but not both).
+  /// Initializes a newly created change builder.
+  ///
+  /// If the builder will be used to create changes for Dart files, then either
+  /// a [session] or a [workspace] must be provided (but not both).
   ChangeBuilderImpl({
     AnalysisSession? session,
     ChangeWorkspace? workspace,
-    @Deprecated(
-      'Use defaultEol instead, as this is only a '
-      'default for files without existing EOLs',
-    )
-    String? eol,
     String? defaultEol,
   }) : assert(session == null || workspace == null),
-       assert(eol == null || defaultEol == null),
        workspace = workspace ?? _SingleSessionWorkspace(session!),
-       defaultEol = defaultEol ?? eol ?? Platform.lineTerminator;
+       defaultEol = defaultEol ?? Platform.lineTerminator;
 
   /// Return `true` if this builder has edits to be applied.
   bool get hasEdits {
@@ -146,8 +141,6 @@
   Future<void> addDartFileEdit(
     String path,
     FutureOr<void> Function(DartFileEditBuilder builder) buildFileEdit, {
-    @Deprecated('No longer supported')
-    ImportPrefixGenerator? importPrefixGenerator,
     bool createEditsForImports = true,
   }) async {
     assert(file_paths.isDart(workspace.resourceProvider.pathContext, path));
@@ -183,7 +176,6 @@
       }
     }
     if (builder != null) {
-      builder.importPrefixGenerator = importPrefixGenerator;
       builder.currentChangeDescription = currentChangeDescription;
       await buildFileEdit(builder);
     }
@@ -301,56 +293,6 @@
     }
   }
 
-  @Deprecated(
-    'Copying change builders is expensive. Internal users of this '
-    'method now use `commit` and `revert` instead.',
-  )
-  @override
-  ChangeBuilder copy() {
-    var copy = ChangeBuilderImpl(workspace: workspace, defaultEol: defaultEol);
-    for (var entry in _linkedEditGroups.entries) {
-      copy._linkedEditGroups[entry.key] = _copyLinkedEditGroup(entry.value);
-    }
-    var selection = _selection;
-    if (selection != null) {
-      copy._selection = _copyPosition(selection);
-    }
-    copy._selectionRange = _selectionRange;
-    copy._lockedPositions.addAll(_lockedPositions);
-    for (var entry in _genericFileEditBuilders.entries) {
-      copy._genericFileEditBuilders[entry.key] = entry.value.copyWith(copy);
-    }
-    //
-    // The file edit builders for libraries (those whose [libraryChangeBuilder]
-    // is `null`) are copied first so that the copies exist when we copy the
-    // builders for parts and the structure can be preserved.
-    //
-    var editBuilderMap = <DartFileEditBuilderImpl, DartFileEditBuilderImpl>{};
-    for (var entry in _dartFileEditBuilders.entries) {
-      var oldBuilder = entry.value;
-      if (oldBuilder.libraryChangeBuilder == null) {
-        var newBuilder = oldBuilder.copyWith(copy);
-        copy._dartFileEditBuilders[entry.key] = newBuilder;
-        editBuilderMap[oldBuilder] = newBuilder;
-      }
-    }
-    for (var entry in _dartFileEditBuilders.entries) {
-      var oldBuilder = entry.value;
-      if (oldBuilder.libraryChangeBuilder != null) {
-        var newBuilder = oldBuilder.copyWith(
-          copy,
-          editBuilderMap: editBuilderMap,
-        );
-        copy._dartFileEditBuilders[entry.key] = newBuilder;
-      }
-    }
-    for (var entry in _yamlFileEditBuilders.entries) {
-      copy._yamlFileEditBuilders[entry.key] = entry.value.copyWith(copy);
-    }
-    copy.modificationCount = modificationCount;
-    return copy;
-  }
-
   /// Return the linked edit group with the given [groupName], creating it if it
   /// did not already exist.
   LinkedEditGroup getLinkedEditGroup(String groupName) {
@@ -436,20 +378,6 @@
     _selectionRange = null;
   }
 
-  /// Return a copy of the linked edit [group].
-  LinkedEditGroup _copyLinkedEditGroup(LinkedEditGroup group) {
-    return LinkedEditGroup(
-      group.positions.map(_copyPosition).toList(),
-      group.length,
-      group.suggestions.toList(),
-    );
-  }
-
-  /// Return a copy of the [position].
-  Position _copyPosition(Position position) {
-    return Position(position.file, position.offset);
-  }
-
   /// Create and return a [DartFileEditBuilder] that can be used to build edits
   /// to the Dart file with the given [path].
   Future<DartFileEditBuilderImpl?> _createDartFileEditBuilder(
@@ -799,22 +727,6 @@
     _revertData._addedEdits.clear();
   }
 
-  @Deprecated(
-    'Copying change builders is expensive. Internal users of this '
-    'method now use `commit` and `revert` instead.',
-  )
-  FileEditBuilderImpl copyWith(ChangeBuilderImpl changeBuilder) {
-    var copy = FileEditBuilderImpl(
-      changeBuilder,
-      fileEdit.file,
-      fileEdit.fileStamp,
-      eol: eol,
-    );
-    copy.fileEdit.edits.addAll(fileEdit.edits);
-    copy.currentChangeDescription = currentChangeDescription;
-    return copy;
-  }
-
   EditBuilderImpl createEditBuilder(int offset, int length) {
     return EditBuilderImpl(
       this,
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 75922c3..abe50af 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
@@ -31,10 +31,6 @@
 import 'package:collection/collection.dart';
 import 'package:dart_style/dart_style.dart';
 
-const _deprecationMessageMethodBeingCopied =
-    'Use `typeParametersInScope` '
-    'instead. You can use `methodBeingCopied.typeParameters`.';
-
 /// An [EditBuilder] used to build edits in Dart files.
 class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
   static const List<String> _knownMethodNamePrefixes = ['get', 'is', 'to'];
@@ -85,12 +81,8 @@
   @override
   bool canWriteType(
     DartType? type, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     return type != null && type is! DynamicType
         ? _canWriteType(type, typeParametersInScope: typeParametersInScope)
         : false;
@@ -259,16 +251,12 @@
     String name, {
     bool isCovariant = false,
     bool isRequiredNamed = false,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     String? nameGroupName,
     DartType? type,
     String? typeGroupName,
     bool isRequiredType = false,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     bool writeTypeIfCan() {
       if (_canWriteType(type, typeParametersInScope: typeParametersInScope) &&
           (isRequiredType || type is! DynamicType)) {
@@ -310,15 +298,12 @@
     if (isRequiredNamed) {
       write('required ');
     }
-    if (type != null) {
-      var hasType = writeType();
-      if (name.isNotEmpty) {
-        if (hasType) {
-          write(' ');
-        }
-        writeName();
+    type ??= _typeProvider.objectQuestionType;
+    var hasType = writeType();
+    if (name.isNotEmpty) {
+      if (hasType) {
+        write(' ');
       }
-    } else {
       writeName();
     }
   }
@@ -326,21 +311,12 @@
   @override
   void writeFormalParameters(
     Iterable<FormalParameterElement> parameters, {
-    @Deprecated(
-      '$_deprecationMessageMethodBeingCopied And for the group prefix, '
-      'inform `groupNamePrefix`.',
-    )
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     String? groupNamePrefix,
     bool fillParameterNames = true,
     bool includeDefaultValues = true,
     bool requiredTypes = false,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    assert(groupNamePrefix == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
-    groupNamePrefix ??= methodBeingCopied?.name;
     var parameterNames = parameters.map((e) => e.name).nonNulls.toSet();
 
     write('(');
@@ -718,16 +694,12 @@
     String name, {
     bool isCovariant = false,
     bool isRequiredNamed = false,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     String? nameGroupName,
     DartType? type,
     String? typeGroupName,
     bool isRequiredType = false,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     bool writeTypeIfCan() {
       if (_canWriteType(type, typeParametersInScope: typeParametersInScope) &&
           (isRequiredType || type is! DynamicType)) {
@@ -787,21 +759,24 @@
     Expression argument,
     int index,
     Set<String> usedNames, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
+    bool isOptional = false,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     // Append type name.
     var type = argument.staticType;
     if (type == null || type.isBottom || type.isDartCoreNull) {
-      type = DynamicTypeImpl.instance;
+      type = _typeProvider.objectQuestionType;
     }
     if (argument is NamedExpression &&
-        type.nullabilitySuffix == NullabilitySuffix.none) {
+        type.nullabilitySuffix == NullabilitySuffix.none &&
+        !isOptional) {
       write('required ');
     }
+    if (isOptional &&
+        type is TypeImpl &&
+        type.nullabilitySuffix != NullabilitySuffix.question) {
+      type = type.withNullability(NullabilitySuffix.question);
+    }
     if (writeType(
       type,
       addSupertypeProposals: true,
@@ -834,12 +809,8 @@
   @override
   void writeParametersMatchingArguments(
     ArgumentList argumentList, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     // TODO(brianwilkerson): Handle the case when there are required parameters
     // after named parameters.
     var usedNames = <String>{};
@@ -882,12 +853,8 @@
     String? nameGroupName,
     DartType? parameterType,
     String? parameterTypeGroupName,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     if (isStatic) {
       write(Keyword.STATIC.lexeme);
       write(' ');
@@ -925,14 +892,10 @@
     DartType? type, {
     bool addSupertypeProposals = false,
     String? groupName,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     bool required = false,
     bool shouldWriteDynamic = false,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     var wroteType = false;
     if (type != null) {
       // TODO(FMorschel): Refactor all similar (same name) local functions to
@@ -972,12 +935,8 @@
   @override
   void writeTypeParameter(
     TypeParameterElement typeParameter, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     write(typeParameter.name ?? '');
     if (typeParameter.bound != null) {
       if (_canWriteType(
@@ -997,12 +956,8 @@
   @override
   void writeTypeParameters(
     List<TypeParameterElement> typeParameters, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     if (typeParameters.isNotEmpty) {
       write('<');
       writeTypeParameter(
@@ -1721,9 +1676,6 @@
   /// not already imported.
   final bool _createEditsForImports;
 
-  /// The optional generator of prefixes for new imports.
-  ImportPrefixGenerator? importPrefixGenerator;
-
   /// A mapping from libraries that need to be imported in order to make visible
   /// the names used in generated code, to information about these imports.
   final Map<Uri, _LibraryImport> _librariesToImport = {};
@@ -1786,12 +1738,8 @@
   @override
   bool canWriteType(
     DartType? type, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   }) {
-    assert(typeParametersInScope == null || methodBeingCopied == null);
-    typeParametersInScope ??= methodBeingCopied?.typeParameters;
     var builder = createEditBuilder(0, 0);
     return builder.canWriteType(
       type,
@@ -1859,36 +1807,6 @@
     );
   }
 
-  @Deprecated(
-    'Copying change builders is expensive. Internal users of this '
-    'method now use `commit` and `revert` instead.',
-  )
-  @override
-  DartFileEditBuilderImpl copyWith(
-    ChangeBuilderImpl changeBuilder, {
-    Map<DartFileEditBuilderImpl, DartFileEditBuilderImpl> editBuilderMap =
-        const {},
-  }) {
-    var copy = DartFileEditBuilderImpl(
-      changeBuilder,
-      resolvedLibrary,
-      resolvedUnit,
-      fileEdit.fileStamp,
-      editBuilderMap[libraryChangeBuilder],
-      eol: eol,
-      createEditsForImports: _createEditsForImports,
-    );
-    copy.fileEdit.edits.addAll(fileEdit.edits);
-    copy.importPrefixGenerator = importPrefixGenerator;
-    for (var entry in _librariesToImport.entries) {
-      copy._librariesToImport[entry.key] = entry.value;
-    }
-    for (var entry in _elementLibrariesToImport.entries) {
-      copy._elementLibrariesToImport[entry.key] = entry.value;
-    }
-    return copy;
-  }
-
   @override
   DartEditBuilderImpl createEditBuilder(int offset, int length) {
     return DartEditBuilderImpl(
@@ -2161,7 +2079,16 @@
   ) => insertIntoUnitMember(
     compilationUnitMember,
     buildEdit,
-    lastMemberFilter: (member) => member is FieldDeclaration,
+    lastMemberFilter: (member) {
+      if (resolvedUnit.session.analysisContext
+          .getAnalysisOptionsForFile(resolvedUnit.file)
+          .codeStyleOptions
+          .sortConstructorsFirst) {
+        return member is ConstructorDeclaration || member is FieldDeclaration;
+      } else {
+        return member is FieldDeclaration;
+      }
+    },
   );
 
   @override
@@ -2624,9 +2551,6 @@
   }
 
   String _defaultImportPrefixFor(Uri uri) {
-    if (importPrefixGenerator != null) {
-      return importPrefixGenerator!(uri);
-    }
     // TODO(FMorschel): Think of a way to identify if the current editing range
     // already contains a variable with the same name as the generated prefix.
     // This only accounts for top-level names.
@@ -2777,8 +2701,6 @@
   /// `true`.
   ///
   /// If [prefix] is an empty string, adds the import without a prefix.
-  /// If [prefix] is null, will use [importPrefixGenerator] to generate one or
-  /// reuse an existing prefix for this import.
   ///
   /// If [showName] is supplied then any new import will show only this
   /// element, or if an import already exists it will be added to 'show' or
@@ -2843,9 +2765,6 @@
           }
         }
       }
-      prefix ??= importPrefixGenerator != null
-          ? importPrefixGenerator!(uri)
-          : null;
       import = _LibraryImport(
         uriText: uriText,
         prefix: prefix ?? '',
@@ -3031,7 +2950,7 @@
 
   void find(CompilationUnit target, int offset) {
     var node = target.nodeCovering(offset: offset);
-    if (node != null && offset == node.end) {
+    while (node != null && offset == node.end) {
       // If the offset is just outside the node, then the element declared by
       // the node isn't actually enclosing the offset.
       node = node.parent;
@@ -3105,11 +3024,11 @@
     final declaration = _declaration;
     if (declaration is EnumDeclaration) {
       // After the last enum value.
-      var semicolon = declaration.semicolon;
+      var semicolon = declaration.body.semicolon;
       if (semicolon != null) {
         return semicolon.end;
-      } else if (declaration.constants.isNotEmpty) {
-        var lastConstant = declaration.constants.last;
+      } else if (declaration.body.constants.isNotEmpty) {
+        var lastConstant = declaration.body.constants.last;
         return lastConstant.end;
       }
     }
@@ -3139,7 +3058,7 @@
       builder.write(' {');
     }
     var declaration = _declaration;
-    if (declaration is EnumDeclaration && declaration.semicolon == null) {
+    if (declaration is EnumDeclaration && declaration.body.semicolon == null) {
       builder.write(';');
     }
 
@@ -3149,7 +3068,7 @@
       builder.writeln();
       builder.writeIndent();
     } else if (declaration is EnumDeclaration &&
-        declaration.constants.isNotEmpty) {
+        declaration.body.constants.isNotEmpty) {
       // After the last constant (and the semicolon), write two newlines.
       builder.writeln();
       builder.writeln();
@@ -3172,7 +3091,8 @@
     }
 
     var declaration = _declaration;
-    if (declaration is EnumDeclaration && declaration.constants.isNotEmpty) {
+    if (declaration is EnumDeclaration &&
+        declaration.body.constants.isNotEmpty) {
       return;
     }
 
@@ -3301,43 +3221,71 @@
   /// and `null` otherwise.
   Token? get leftBracket {
     var self = this;
-    return switch (self) {
-      ClassDeclaration() => self.leftBracket,
-      EnumDeclaration() => self.leftBracket,
-      ExtensionDeclaration() => self.leftBracket,
-      ExtensionTypeDeclaration() => self.leftBracket,
-      MixinDeclaration() => self.leftBracket,
-      _ => null,
-    };
+    switch (self) {
+      case ClassDeclaration():
+        if (self.body case BlockClassBody body) {
+          return body.leftBracket;
+        }
+      case EnumDeclaration():
+        return self.body.leftBracket;
+      case ExtensionDeclaration():
+        return self.body.leftBracket;
+      case ExtensionTypeDeclaration():
+        if (self.body case BlockClassBody body) {
+          return body.leftBracket;
+        }
+      case MixinDeclaration():
+        return self.body.leftBracket;
+      default:
+    }
+    return null;
   }
 
   /// The members of a [CompilationUnitMember] with a known list of members, and
   /// `null` otherwise.
   List<ClassMember>? get members {
     var self = this;
-    return switch (self) {
-      ClassDeclaration() => self.members,
-      // Enum constants are handled separately; not considered members.
-      EnumDeclaration() => self.members,
-      ExtensionDeclaration() => self.members,
-      ExtensionTypeDeclaration() => self.members,
-      MixinDeclaration() => self.members,
-      _ => null,
-    };
+    switch (self) {
+      case ClassDeclaration():
+        if (self.body case BlockClassBody body) {
+          return body.members;
+        }
+      case EnumDeclaration():
+        // Enum constants are handled separately; not considered members.
+        return self.body.members;
+      case ExtensionDeclaration():
+        return self.body.members;
+      case ExtensionTypeDeclaration():
+        if (self.body case BlockClassBody body) {
+          return body.members;
+        }
+      case MixinDeclaration():
+        return self.body.members;
+    }
+    return null;
   }
 
   /// The right bracket of a [CompilationUnitMember] with a known right bracket,
   /// and `null` otherwise.
   Token? get rightBracket {
     var self = this;
-    return switch (self) {
-      ClassDeclaration() => self.rightBracket,
-      EnumDeclaration() => self.rightBracket,
-      ExtensionDeclaration() => self.rightBracket,
-      ExtensionTypeDeclaration() => self.rightBracket,
-      MixinDeclaration() => self.rightBracket,
-      _ => null,
-    };
+    switch (self) {
+      case ClassDeclaration():
+        if (self.body case BlockClassBody body) {
+          return body.rightBracket;
+        }
+      case EnumDeclaration():
+        return self.body.rightBracket;
+      case ExtensionDeclaration():
+        return self.body.rightBracket;
+      case ExtensionTypeDeclaration():
+        if (self.body case BlockClassBody body) {
+          return body.rightBracket;
+        }
+      case MixinDeclaration():
+        return self.body.rightBracket;
+    }
+    return null;
   }
 }
 
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 1be8cd9..c33eef1 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
@@ -76,27 +76,6 @@
     (builder) => buildEdit(builder as YamlEditBuilder),
   );
 
-  @Deprecated(
-    'Copying change builders is expensive. Internal users of this '
-    'method now use `commit` and `revert` instead.',
-  )
-  @override
-  YamlFileEditBuilderImpl copyWith(
-    ChangeBuilderImpl changeBuilder, {
-    Map<YamlFileEditBuilderImpl, YamlFileEditBuilderImpl> editBuilderMap =
-        const {},
-  }) {
-    var copy = YamlFileEditBuilderImpl(
-      changeBuilder,
-      fileEdit.file,
-      document,
-      fileEdit.fileStamp,
-      eol: eol,
-    );
-    copy.fileEdit.edits.addAll(fileEdit.edits);
-    return copy;
-  }
-
   @override
   EditBuilderImpl createEditBuilder(int offset, int length) {
     return YamlEditBuilderImpl(
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 6363a49..582b5ea 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -373,6 +373,11 @@
   }
 
   @override
+  void visitBlockClassBody(BlockClassBody node) {
+    node.parent?.accept(this);
+  }
+
+  @override
   void visitBreakStatement(BreakStatement node) {
     if (node.label == null || identical(entity, node.label)) {
       optype.includeStatementLabelSuggestions = true;
@@ -437,8 +442,10 @@
   void visitClassDeclaration(ClassDeclaration node) {
     // Make suggestions in the body of the class declaration
     final entity = this.entity;
-    var isMember = node.members.contains(entity);
-    var isClosingBrace = identical(entity, node.rightBracket);
+    var body = node.body;
+    var isMember = body is BlockClassBody && body.members.contains(entity);
+    var isClosingBrace =
+        body is BlockClassBody && identical(entity, body.rightBracket);
     var isAnnotation =
         isClosingBrace &&
         entity is Token &&
@@ -516,7 +523,8 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    if (identical(entity, node.returnType)) {
+    // TODO(scheglov): support primary constructors
+    if (identical(entity, node.typeName!)) {
       optype.completionLocation = 'ConstructorDeclaration_returnType';
       optype.includeTypeNameSuggestions = true;
     } else if (node.initializers.contains(entity)) {
@@ -634,10 +642,15 @@
   }
 
   @override
+  void visitEnumBody(EnumBody node) {
+    node.parent?.accept(this);
+  }
+
+  @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    if (node.semicolon != null) {
-      if (node.members.contains(entity) ||
-          identical(entity, node.rightBracket)) {
+    if (node.body.semicolon != null) {
+      if (node.body.members.contains(entity) ||
+          identical(entity, node.body.rightBracket)) {
         optype.completionLocation = 'EnumDeclaration_member';
         optype.includeTypeNameSuggestions = true;
       }
@@ -721,8 +734,8 @@
     if (identical(entity, node.onClause)) {
       optype.completionLocation = 'ExtensionDeclaration_onClause';
       optype.includeTypeNameSuggestions = true;
-    } else if (node.members.contains(entity) ||
-        identical(entity, node.rightBracket)) {
+    } else if (node.body.members.contains(entity) ||
+        identical(entity, node.body.rightBracket)) {
       // Make suggestions in the body of the extension declaration
       optype.completionLocation = 'ExtensionDeclaration_member';
       optype.includeTypeNameSuggestions = true;
@@ -739,8 +752,10 @@
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
     // Make suggestions in the body of the extension type declaration
     final entity = this.entity;
-    var isMember = node.members.contains(entity);
-    var isClosingBrace = identical(entity, node.rightBracket);
+    var body = node.body;
+    var isMember = body is BlockClassBody && body.members.contains(entity);
+    var isClosingBrace =
+        body is BlockClassBody && identical(entity, body.rightBracket);
     var isAnnotation =
         isClosingBrace &&
         entity is Token &&
@@ -1190,7 +1205,8 @@
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
     // Make suggestions in the body of the mixin declaration
-    if (node.members.contains(entity) || identical(entity, node.rightBracket)) {
+    if (node.body.members.contains(entity) ||
+        identical(entity, node.body.rightBracket)) {
       optype.completionLocation = 'MixinDeclaration_member';
       optype.includeTypeNameSuggestions = true;
     }
@@ -1498,20 +1514,6 @@
   }
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    if (identical(entity, node.fieldType) ||
-        (identical(entity, node.fieldName) && node.fieldType.isSynthetic)) {
-      optype.completionLocation = 'RepresentationDeclaration_fieldType';
-      optype.includeTypeNameSuggestions = true;
-    } else if (identical(entity, node.fieldName) ||
-        (identical(entity, node.rightParenthesis) &&
-            node.fieldType.isSynthetic)) {
-      optype.completionLocation = 'RepresentationDeclaration_fieldName';
-      optype.includeVarNameSuggestions = true;
-    }
-  }
-
-  @override
   void visitRestPatternElement(RestPatternElement node) {
     if (identical(entity, node.pattern)) {
       optype._forPattern('RestPatternElement_pattern');
@@ -1839,6 +1841,8 @@
         return 'annotation';
       } else if (parent is DotShorthandConstructorInvocation) {
         return 'constructor';
+      } else if (parent is DotShorthandInvocation) {
+        return 'method';
       } else if (parent is EnumConstantArguments) {
         return 'enumConstantArguments';
       } else if (parent is ExtensionOverride) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation_dart.dart
index daf6697..56d7f16 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/navigation/navigation_dart.dart
@@ -230,7 +230,7 @@
   @override
   void visitAnnotation(Annotation node) {
     var element = node.element;
-    if (element is ConstructorElement && element.isSynthetic) {
+    if (element is ConstructorElement && element.isOriginImplicitDefault) {
       element = element.enclosingElement;
     }
     var name = node.name;
@@ -277,7 +277,10 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    computer._addRegionForFragment(node.name, node.declaredFragment);
+    computer._addRegionForFragment(
+      node.namePart.typeName,
+      node.declaredFragment,
+    );
     super.visitClassDeclaration(node);
   }
 
@@ -335,11 +338,13 @@
     var nameToken = node.name;
     if (nameToken == null) {
       computer._addRegionForElement(
-        node.returnType,
+        // TODO(scheglov): support primary constructors
+        node.typeName!,
         node.declaredFragment?.element,
       );
     } else {
-      node.returnType.accept(this);
+      // TODO(scheglov): support primary constructors
+      node.typeName!.accept(this);
       computer._addRegionForFragment(nameToken, node.declaredFragment);
     }
 
@@ -421,7 +426,10 @@
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    computer._addRegionForFragment(node.name, node.declaredFragment);
+    computer._addRegionForFragment(
+      node.namePart.typeName,
+      node.declaredFragment,
+    );
     super.visitEnumDeclaration(node);
   }
 
@@ -439,7 +447,10 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    computer._addRegionForFragment(node.name, node.declaredFragment);
+    computer._addRegionForFragment(
+      node.primaryConstructor.typeName,
+      node.declaredFragment,
+    );
     super.visitExtensionTypeDeclaration(node);
   }
 
@@ -534,6 +545,23 @@
   }
 
   @override
+  void visitNameWithTypeParameters(NameWithTypeParameters node) {
+    if (node.parent case ClassDeclaration declaration) {
+      computer._addRegionForFragment(
+        node.typeName,
+        declaration.declaredFragment,
+      );
+    }
+    if (node.parent case EnumDeclaration declaration) {
+      computer._addRegionForFragment(
+        node.typeName,
+        declaration.declaredFragment,
+      );
+    }
+    super.visitNameWithTypeParameters(node);
+  }
+
+  @override
   void visitPartDirective(PartDirective node) {
     var include = node.partInclude;
     if (include != null) {
@@ -601,6 +629,25 @@
   }
 
   @override
+  void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
+    if (node.parent case ExtensionTypeDeclaration declaration) {
+      computer._addRegionForFragment(
+        node.typeName,
+        declaration.declaredFragment,
+      );
+    }
+    super.visitPrimaryConstructorDeclaration(node);
+  }
+
+  @override
+  void visitPrimaryConstructorName(PrimaryConstructorName node) {
+    if (node.parent case PrimaryConstructorDeclaration primary) {
+      computer._addRegionForFragment(node.name, primary.declaredFragment);
+    }
+    super.visitPrimaryConstructorName(node);
+  }
+
+  @override
   void visitRedirectingConstructorInvocation(
     RedirectingConstructorInvocation node,
   ) {
@@ -616,18 +663,6 @@
   }
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) {
-    if (node.constructorName?.name case var constructorName?) {
-      computer._addRegionForElement(
-        constructorName,
-        node.constructorFragment?.element,
-      );
-    }
-    computer._addRegionForFragment(node.fieldName, node.fieldFragment);
-    super.visitRepresentationDeclaration(node);
-  }
-
-  @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
     var nameToken = node.name;
     if (nameToken != null) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
index fc450e4..6ca2ada 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
@@ -103,7 +103,9 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    _visitClassOrMixinMembers(node.members);
+    if (node.body case BlockClassBody body) {
+      _visitClassOrMixinMembers(body.members);
+    }
     visitNode(node);
   }
 
@@ -126,7 +128,7 @@
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
-    _visitClassOrMixinMembers(node.members);
+    _visitClassOrMixinMembers(node.body.members);
     visitNode(node);
   }
 
@@ -241,7 +243,7 @@
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    _visitClassOrMixinMembers(node.members);
+    _visitClassOrMixinMembers(node.body.members);
     visitNode(node);
   }
 
@@ -379,14 +381,16 @@
     for (var declaration in node.declarations) {
       if (declaration is ClassDeclaration) {
         declaredClass(declaration);
-        _visitTypeParameters(declaration, declaration.typeParameters);
+        _visitTypeParameters(declaration, declaration.namePart.typeParameters);
         // Call declaredConstructor all ConstructorDeclarations when the class
         // is called: constructors are accessible if the class is accessible.
         for (var classDeclaration
             in node.declarations.whereType<ClassDeclaration>()) {
-          for (var constructor
-              in classDeclaration.members.whereType<ConstructorDeclaration>()) {
-            declaredConstructor(constructor);
+          if (classDeclaration.body case BlockClassBody body) {
+            for (var constructor
+                in body.members.whereType<ConstructorDeclaration>()) {
+              declaredConstructor(constructor);
+            }
           }
         }
       } else if (declaration is EnumDeclaration) {
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 28235f4..ff5a138 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -152,6 +152,7 @@
     var aliasedType = _getAliasedTypeString(element);
     var elementParameters = _getParametersString(element);
     var elementReturnType = _getReturnTypeString(element);
+    var extendedType = _getExtendedTypeString(element);
     return Element(
       kind,
       name,
@@ -168,6 +169,7 @@
       aliasedType: aliasedType,
       parameters: elementParameters,
       returnType: elementReturnType,
+      extendedType: extendedType,
     );
   }
 
@@ -239,6 +241,14 @@
     return null;
   }
 
+  String? _getExtendedTypeString(analyzer.Element element) {
+    if (element is analyzer.ExtensionElement) {
+      var extendedType = element.extendedType;
+      return extendedType.getDisplayString();
+    }
+    return null;
+  }
+
   String? _getParametersString(analyzer.Element element) {
     // TODO(scheglov): expose the corresponding feature from ExecutableElement
     List<analyzer.FormalParameterElement> parameters;
diff --git a/pkg/analyzer_plugin/lib/utilities/assist/assist_contributor_mixin.dart b/pkg/analyzer_plugin/lib/utilities/assist/assist_contributor_mixin.dart
index 811a510..b61d784 100644
--- a/pkg/analyzer_plugin/lib/utilities/assist/assist_contributor_mixin.dart
+++ b/pkg/analyzer_plugin/lib/utilities/assist/assist_contributor_mixin.dart
@@ -12,7 +12,7 @@
 ///
 /// Clients may not extend or implement this class, but are allowed to use it as
 /// a mix-in when creating a subclass of [AssistContributor].
-abstract class AssistContributorMixin implements AssistContributor {
+mixin AssistContributorMixin on AssistContributor {
   /// The collector to which assists should be added.
   AssistCollector get collector;
 
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_core.dart
index 521dde2..208b580 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_core.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.
 
+/// @docImport 'dart:io';
+library;
+
 import 'dart:async';
 
 import 'package:analyzer/dart/analysis/session.dart';
@@ -23,16 +26,11 @@
   ///
   /// [defaultEol] is the default EOL to be used for new files and files that do
   /// not have EOLs. Existing files with EOL markers will always have the same
-  /// EOL in inserted text. If not specified, Platform.lineTerminator will be
+  /// EOL in inserted text. If not specified, [Platform.lineTerminator] will be
   /// used.
   factory ChangeBuilder({
     AnalysisSession session,
     ChangeWorkspace workspace,
-    @Deprecated(
-      'Use defaultEol instead, as this is only a '
-      'default for files without existing EOLs',
-    )
-    String? eol,
     String? defaultEol,
   }) = ChangeBuilderImpl;
 
@@ -62,8 +60,6 @@
   Future<void> addDartFileEdit(
     String path,
     FutureOr<void> Function(DartFileEditBuilder builder) buildFileEdit, {
-    @Deprecated('No longer supported')
-    ImportPrefixGenerator importPrefixGenerator,
     bool createEditsForImports = true,
   });
 
@@ -89,14 +85,6 @@
     void Function(YamlFileEditBuilder builder) buildFileEdit,
   );
 
-  /// Return a copy of this change builder that is constructed in such as was
-  /// that changes to the copy will not effect this change builder.
-  @Deprecated(
-    'Copying change builders is expensive, so it is no longer '
-    'supported. There is no replacement.',
-  )
-  ChangeBuilder copy();
-
   /// Return `true` if this builder already has edits for the file with the
   /// given [path].
   bool hasEditsFor(String path);
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index b153f53..dfa17c2 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.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/dart/analysis/code_style_options.dart'
+    show CodeStyleOptions;
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -11,11 +13,8 @@
 import 'package:analyzer/source/source_range.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 
-const _deprecationMessageMethodBeingCopied =
-    'Use `typeParametersInScope` '
-    'instead. You can use `methodBeingCopied.typeParameters`.';
-
 /// The optional generator for prefix that should be used for new imports.
+@Deprecated('This type is no longer used or necessary')
 typedef ImportPrefixGenerator = String Function(Uri);
 
 /// An [EditBuilder] used to build edits in Dart files.
@@ -31,12 +30,6 @@
   /// Checks whether the code for a type annotation for the given [type] can be
   /// written.
   ///
-  /// {@template methodBeingCopied}
-  /// If a [methodBeingCopied] is provided, then type parameters defined by that
-  /// method are assumed to be part of what is being written and hence valid
-  /// types.
-  /// {@endtemplate}
-  ///
   /// {@template typeParametersInScope}
   /// If [typeParametersInScope] is provided, then it will be used to resolve
   /// what are the valid type parameters to use.
@@ -45,8 +38,6 @@
   /// The logic is the same as the one used in [writeType].
   bool canWriteType(
     DartType? type, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   });
 
@@ -133,8 +124,6 @@
 
   /// Writes the code for a single parameter with the given [name].
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   ///
   /// If a [type] is provided, then it will be used as the type of the
@@ -159,8 +148,6 @@
     String name, {
     bool isCovariant,
     bool isRequiredNamed,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     String? nameGroupName,
     DartType? type,
@@ -171,18 +158,11 @@
   /// Writes the code for a list of [parameters], including the surrounding
   /// parentheses and default values (unless [includeDefaultValues] is `false`).
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   ///
   /// If [requiredTypes] is `true`, then the types are always written.
   void writeFormalParameters(
     Iterable<FormalParameterElement> parameters, {
-    @Deprecated(
-      '$_deprecationMessageMethodBeingCopied And for the group prefix, '
-      'inform `groupNamePrefix`.',
-    )
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     String? groupNamePrefix,
     bool fillParameterNames = true,
@@ -296,8 +276,6 @@
 
   /// Writes the code for a single parameter with the given [name].
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   ///
   /// If a [type] is provided, then it will be used as the type of the
@@ -320,8 +298,6 @@
     String name, {
     bool isCovariant,
     bool isRequiredNamed,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     String? nameGroupName,
     DartType? type,
@@ -342,9 +318,8 @@
     Expression argument,
     int index,
     Set<String> usedNames, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
+    bool isOptional = false,
   });
 
   /// Writes the code for a list of parameters that would match the given list
@@ -355,8 +330,6 @@
   /// {@macro typeParametersInScope}
   void writeParametersMatchingArguments(
     ArgumentList arguments, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   });
 
@@ -385,8 +358,6 @@
     String? nameGroupName,
     DartType? parameterType,
     String? parameterTypeGroupName,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   });
 
@@ -404,8 +375,6 @@
   /// [addSupertypeProposals] is `true`, then all of the supertypes of the
   /// [type] will be added as suggestions for alternatives to the type name.
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   ///
   /// Returns `true` if any text was written.
@@ -413,8 +382,6 @@
     DartType? type, {
     bool addSupertypeProposals = false,
     String? groupName,
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
     bool required = false,
     bool shouldWriteDynamic = false,
@@ -424,26 +391,18 @@
   ///
   /// The enclosing angle brackets are not automatically written.
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   void writeTypeParameter(
     TypeParameterElement typeParameter, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   });
 
   /// Writes the code to declare the given list of [typeParameters]. The
   /// enclosing angle brackets are automatically written.
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   void writeTypeParameters(
     List<TypeParameterElement> typeParameters, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   });
 
@@ -495,13 +454,9 @@
   /// Checks whether the code for a type annotation for the given [type] can be
   /// written.
   ///
-  /// {@macro methodBeingCopied}
-  ///
   /// {@macro typeParametersInScope}
   bool canWriteType(
     DartType? type, {
-    @Deprecated(_deprecationMessageMethodBeingCopied)
-    ExecutableElement? methodBeingCopied,
     List<TypeParameterElement>? typeParametersInScope,
   });
 
@@ -621,7 +576,8 @@
   /// Inserts the code for a field.
   ///
   /// The field is inserted after the last existing field, or at the beginning
-  /// of [compilationUnitMember], if it has no existing fields.
+  /// of [compilationUnitMember], if it has no existing fields, if not specified
+  /// differently by the [CodeStyleOptions].
   void insertField(
     CompilationUnitMember compilationUnitMember,
     void Function(DartEditBuilder builder) buildEdit,
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
index b396019..61961e5 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -149,7 +149,7 @@
 
   @override
   void declaredClass(ClassDeclaration declaration) {
-    if (declaration.name.lexeme == targetName) {
+    if (declaration.namePart.typeName.lexeme == targetName) {
       // no type
       finished();
     }
@@ -338,7 +338,7 @@
         ...targetType.setters,
       ]) {
         if (!propertyAccessor.isStatic) {
-          if (propertyAccessor.isSynthetic) {
+          if (propertyAccessor.isOriginVariable) {
             // Avoid visiting a field twice
             if (propertyAccessor is GetterElement) {
               _addSuggestion(propertyAccessor.variable);
diff --git a/pkg/analyzer_plugin/lib/utilities/range_factory.dart b/pkg/analyzer_plugin/lib/utilities/range_factory.dart
index 278ed71..6b315f7 100644
--- a/pkg/analyzer_plugin/lib/utilities/range_factory.dart
+++ b/pkg/analyzer_plugin/lib/utilities/range_factory.dart
@@ -136,9 +136,6 @@
     return SourceRange(node.offset, node.length);
   }
 
-  @Deprecated("Use 'diagnostic' instead")
-  SourceRange error(Diagnostic d) => diagnostic(d);
-
   /// Returns a source range that covers the name of the given [fragment].
   ///
   /// Returns `null` if the [fragment] does not have an explicit name location,
diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml
index c5eb5e8..571cc84 100644
--- a/pkg/analyzer_plugin/pubspec.yaml
+++ b/pkg/analyzer_plugin/pubspec.yaml
@@ -1,6 +1,6 @@
 name: analyzer_plugin
 description: A framework and support code for building plugins for the analysis server.
-version: 0.13.11
+version: 0.14.0-dev
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer_plugin
 
 environment:
@@ -11,7 +11,7 @@
 dependencies:
   # See the release policy for managing this dependency at
   # pkg/analyzer/doc/implementation/releasing.md.
-  analyzer: 9.0.0
+  analyzer: 10.0.0-dev
   collection: ^1.15.0
   dart_style: ^3.0.0
   pub_semver: ^2.1.0
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index a04291b..885b474 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -296,6 +296,7 @@
 ///       "returnType": optional String
 ///       "typeParameters": optional String
 ///       "aliasedType": optional String
+///       "extendedType": optional String
 ///     }
 final Matcher isElement = LazyMatcher(
   () => MatchesJsonObject(
@@ -307,6 +308,7 @@
       'returnType': isString,
       'typeParameters': isString,
       'aliasedType': isString,
+      'extendedType': isString,
     },
   ),
 );
diff --git a/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart b/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart
index ba97577..1945aed 100644
--- a/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart
+++ b/pkg/analyzer_plugin/test/plugin/fix_mixin_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/diagnostic/diagnostic.dart';
 import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_plugin/plugin/fix_mixin.dart';
 import 'package:analyzer_plugin/plugin/plugin.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
@@ -98,7 +98,7 @@
       source: MockSource(),
       offset: 0,
       length: 0,
-      diagnosticCode: CompileTimeErrorCode.awaitInWrongContext,
+      diagnosticCode: diag.awaitInWrongContext,
     );
     var result = MockResolvedUnitResult(
       lineInfo: LineInfo([0, 20]),
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 4a9b123..0dbdb15 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
@@ -50,75 +50,6 @@
     builder.commit();
   }
 
-  @Deprecated('Will be removed when `copy` is removed.')
-  void test_copy_empty() {
-    var copy = builder.copy() as ChangeBuilderImpl;
-    expect(identical(copy, builder), isFalse);
-    expect(copy.workspace, builder.workspace);
-    expect(copy.defaultEol, builder.defaultEol);
-  }
-
-  @Deprecated('Will be removed when `copy` is removed.')
-  Future<void> test_copy_newEdit() async {
-    await builder.addGenericFileEdit('/test.txt', (builder) {
-      builder.addSimpleInsertion(0, 'x');
-    });
-    var copy = builder.copy() as ChangeBuilderImpl;
-    await copy.addGenericFileEdit('/test.txt', (builder) {
-      builder.addSimpleInsertion(10, 'x');
-    });
-    var change = builder.sourceChange;
-    expect(change.edits[0].edits, hasLength(1));
-  }
-
-  @Deprecated('Will be removed when `copy` is removed.')
-  Future<void> test_copy_newFile() async {
-    await builder.addGenericFileEdit('/test1.txt', (builder) {
-      builder.addSimpleInsertion(0, 'x');
-    });
-    var copy = builder.copy() as ChangeBuilderImpl;
-    await copy.addGenericFileEdit('/test2.txt', (builder) {
-      builder.addSimpleInsertion(0, 'x');
-    });
-    var change = builder.sourceChange;
-    expect(change.edits, hasLength(1));
-  }
-
-  @Deprecated('Will be removed when `copy` is removed.')
-  Future<void> test_copy_newLinkedEditGroup() async {
-    await builder.addGenericFileEdit('/test.txt', (builder) {
-      builder.addLinkedPosition(SourceRange(1, 2), 'a');
-    });
-    var copy = builder.copy() as ChangeBuilderImpl;
-    await copy.addGenericFileEdit('/test.txt', (builder) {
-      builder.addLinkedPosition(SourceRange(3, 4), 'b');
-    });
-    var change = builder.sourceChange;
-    expect(change.linkedEditGroups, hasLength(1));
-  }
-
-  @Deprecated('Will be removed when `copy` is removed.')
-  Future<void> test_copy_newLinkedPosition() async {
-    await builder.addGenericFileEdit('/test.txt', (builder) {
-      builder.addLinkedPosition(SourceRange(1, 2), 'a');
-    });
-    var copy = builder.copy() as ChangeBuilderImpl;
-    await copy.addGenericFileEdit('/test.txt', (builder) {
-      builder.addLinkedPosition(SourceRange(3, 4), 'a');
-    });
-    var change = builder.sourceChange;
-    expect(change.linkedEditGroups[0].positions, hasLength(1));
-  }
-
-  @Deprecated('Will be removed when `copy` is removed.')
-  Future<void> test_copy_selection() async {
-    builder.setSelection(Position('/test.dart', 5));
-    var copy = builder.copy() as ChangeBuilderImpl;
-    copy.setSelection(Position('/test.dart', 10));
-    var change = builder.sourceChange;
-    expect(change.selection!.offset, 5);
-  }
-
   void test_getLinkedEditGroup() {
     var group = builder.getLinkedEditGroup('a');
     expect(identical(builder.getLinkedEditGroup('b'), group), isFalse);
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 8ddd438..d416b4f 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -778,7 +778,7 @@
   Future<void> test_MethodDeclaration_returnType() async {
     // ClassDeclaration  CompilationUnit
     await createTarget('class C2 {^ zoo(z) { } String name; }');
-    assertTarget('zoo(z) {}', 'class C2 {zoo(z) {} String name;}');
+    assertTarget('zoo(z) {}', ' {zoo(z) {} String name;}');
   }
 
   Future<void> test_MethodDeclaration_returnType_afterLineComment() async {
@@ -787,7 +787,7 @@
       class C2 {
         // normal comment
         ^ zoo(z) {} String name;}''');
-    assertTarget('zoo(z) {}', 'class C2 {zoo(z) {} String name;}');
+    assertTarget('zoo(z) {}', ' {zoo(z) {} String name;}');
   }
 
   Future<void> test_MethodDeclaration_returnType_afterLineComment2() async {
@@ -797,7 +797,7 @@
 class C2 {
   // normal comment
 ^ zoo(z) {} String name;}''');
-    assertTarget('zoo(z) {}', 'class C2 {zoo(z) {} String name;}');
+    assertTarget('zoo(z) {}', ' {zoo(z) {} String name;}');
   }
 
   Future<void> test_MethodDeclaration_returnType_afterLineDocComment() async {
@@ -821,13 +821,13 @@
   Future<void> test_MethodDeclaration_returnType_afterStarComment() async {
     // ClassDeclaration  CompilationUnit
     await createTarget('class C2 {/* */ ^ zoo(z) { } String name; }');
-    assertTarget('zoo(z) {}', 'class C2 {zoo(z) {} String name;}');
+    assertTarget('zoo(z) {}', ' {zoo(z) {} String name;}');
   }
 
   Future<void> test_MethodDeclaration_returnType_afterStarComment2() async {
     // ClassDeclaration  CompilationUnit
     await createTarget('class C2 {/* */^ zoo(z) { } String name; }');
-    assertTarget('zoo(z) {}', 'class C2 {zoo(z) {} String name;}');
+    assertTarget('zoo(z) {}', ' {zoo(z) {} String name;}');
   }
 
   Future<void> test_MethodDeclaration_returnType_afterStarDocComment() async {
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 5370a15..28cfc5f 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -172,6 +172,7 @@
       includedPaths: collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
       sdkPath: sdkRoot.path,
+      withFineDependencies: true,
     );
   }
 }
diff --git a/pkg/analyzer_plugin/test/support/abstract_single_unit.dart b/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
index fc58dad..d9f3658 100644
--- a/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_single_unit.dart
@@ -6,7 +6,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/element_locator.dart';
-import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_element2.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:test/test.dart';
@@ -104,13 +104,13 @@
     if (verifyNoTestUnitErrors) {
       expect(
         result.diagnostics.where((d) {
-          return d.diagnosticCode != WarningCode.deadCode &&
-              d.diagnosticCode != WarningCode.unusedCatchClause &&
-              d.diagnosticCode != WarningCode.unusedCatchStack &&
-              d.diagnosticCode != WarningCode.unusedElement &&
-              d.diagnosticCode != WarningCode.unusedField &&
-              d.diagnosticCode != WarningCode.unusedImport &&
-              d.diagnosticCode != WarningCode.unusedLocalVariable;
+          return d.diagnosticCode != diag.deadCode &&
+              d.diagnosticCode != diag.unusedCatchClause &&
+              d.diagnosticCode != diag.unusedCatchStack &&
+              d.diagnosticCode != diag.unusedElement &&
+              d.diagnosticCode != diag.unusedField &&
+              d.diagnosticCode != diag.unusedImport &&
+              d.diagnosticCode != diag.unusedLocalVariable;
         }),
         isEmpty,
       );
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 1170417..e9eb593 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -9,8 +9,8 @@
 import 'package:analyzer/source/line_info.dart' as analyzer;
 import 'package:analyzer/src/dart/analysis/analysis_options.dart' as analyzer;
 import 'package:analyzer/src/dart/element/element.dart' as analyzer;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/diagnostic/diagnostic_message.dart' as analyzer;
-import 'package:analyzer/src/error/codes.dart' as analyzer;
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
 import 'package:test/test.dart';
@@ -78,7 +78,7 @@
       source: testSource,
       offset: offset,
       length: 5,
-      diagnosticCode: analyzer.CompileTimeErrorCode.awaitInWrongContext,
+      diagnosticCode: diag.awaitInWrongContext,
       contextMessages: contextMessages,
     );
   }
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 5719128e..b081872 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -205,7 +205,8 @@
   /// return the list of initializers in that constructor.
   NodeList<ConstructorInitializer> get _constructorInitializers {
     var c = testUnit.declarations[0] as ClassDeclaration;
-    var constructor = c.members.whereType<ConstructorDeclaration>().single;
+    var body = c.body as BlockClassBody;
+    var constructor = body.members.whereType<ConstructorDeclaration>().single;
     return constructor.initializers;
   }
 
diff --git a/pkg/analyzer_plugin/tool/spec/common_types_spec.html b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
index d3713b9..83510f6 100644
--- a/pkg/analyzer_plugin/tool/spec/common_types_spec.html
+++ b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
@@ -6,7 +6,7 @@
 </head>
 <body>
 <h1>Common Types</h1>
-<version>1.5.0</version>
+<version>1.5.1</version>
 <p>
   This document contains a specification of the types that are common between
   the analysis server wire protocol and the analysis server plugin wire
@@ -615,6 +615,15 @@
           Otherwise this field will not be defined.
         </p>
       </field>
+      <field name="extendedType" optional="true">
+        <ref>String</ref>
+        <p>
+          If the element is an extension, this field is the name of the type
+          that is extended. This can be useful to show in UIs for unnamed
+          extension, for example "extension on {extendedType}". This field
+          might not be defined even for an extension in the case of invalid code.
+        </p>
+      </field>
     </object>
   </type>
   <type name="ElementKind">
diff --git a/pkg/analyzer_testing/CHANGELOG.md b/pkg/analyzer_testing/CHANGELOG.md
index ed5b8b6..b06b4fa 100644
--- a/pkg/analyzer_testing/CHANGELOG.md
+++ b/pkg/analyzer_testing/CHANGELOG.md
@@ -1,3 +1,21 @@
+## 0.1.8-dev
+
+- Require version `10.0.0` of the `analyzer` package.
+- Change the behavior of `analysisOptionsContent` so that by default, the
+  analysis options file used in testing specifies a `true` value for
+  `propagate-linter-exceptions`. This ensures that when tests are run,
+  exceptions that occur while processing lint rules will cause the test to fail.
+- Deprecate `MockPackagesMixin.addAngularMeta`. A mock `angular_meta` package
+  can still be written with `PubPackageResolutionTest.newPackage`.
+- Deprecate `MockPackagesMixin.addJs` and
+  `PubPackageResolutionTest.addJsPackageDep`. A mock js package can still be
+  written with `PubPackageResolutionTest.newPackage`.
+- Deprecate `MockPackagesMixin.addKernel` and
+  `PubPackageResolutionTest.addKernelPackageDep`. A mock kernel
+  package can still be written with `PubPackageResolutionTest.newPackage`.
+- Deprecate `MockPackagesMixin.addPedantic`. A mock pedantic package can still
+  be written with `PubPackageResolutionTest.newPackage`.
+
 ## 0.1.7
 
 - Deprecate `AnalysisRuleTest.analysisRule`; instead of implementing this
diff --git a/pkg/analyzer_testing/api.txt b/pkg/analyzer_testing/api.txt
index 65bae4f..c47b352 100644
--- a/pkg/analyzer_testing/api.txt
+++ b/pkg/analyzer_testing/api.txt
@@ -24,15 +24,15 @@
     packagesRootPath (getter: String)
     pathContext (getter: Context)
     resourceProvider (getter: ResourceProvider)
-    addAngularMeta (method: Folder Function())
+    addAngularMeta (method: Folder Function(), deprecated)
     addFfi (method: Folder Function())
     addFixnum (method: Folder Function())
     addFlutter (method: Folder Function())
     addFlutterTest (method: Folder Function())
-    addJs (method: Folder Function())
-    addKernel (method: Folder Function())
+    addJs (method: Folder Function(), deprecated)
+    addKernel (method: Folder Function(), deprecated)
     addMeta (method: Folder Function())
-    addPedantic (method: Folder Function())
+    addPedantic (method: Folder Function(), deprecated)
     addTestReflectiveLoader (method: Folder Function())
     addUI (method: Folder Function())
     addVectorMath (method: Folder Function())
@@ -70,7 +70,7 @@
   ResourceProviderExtension (extension on ResourceProvider):
     convertPath (method: String Function(String))
 package:analyzer_testing/utilities/utilities.dart:
-  analysisOptionsContent (function: String Function({Map<String, Object?> errors, List<String> experiments, List<String> includes, List<String> legacyPlugins, List<String> rules, bool strictCasts, bool strictInference, bool strictRawTypes, List<String> unignorableNames}))
+  analysisOptionsContent (function: String Function({Map<String, Object?> errors, List<String> experiments, List<String> includes, List<String> legacyPlugins, bool propagateLinterExceptions, List<String> rules, bool strictCasts, bool strictInference, bool strictRawTypes, List<String> unignorableNames}))
   pubspecYamlContent (function: String Function({List<String> dependencies, String? name, String? sdkVersion}))
 dart:async:
   Future (referenced)
diff --git a/pkg/analyzer_testing/lib/experiments/experiments.dart b/pkg/analyzer_testing/lib/experiments/experiments.dart
index 4298902..30a1de2 100644
--- a/pkg/analyzer_testing/lib/experiments/experiments.dart
+++ b/pkg/analyzer_testing/lib/experiments/experiments.dart
@@ -14,12 +14,12 @@
 ///
 /// The flags in the list are kept in alphabetic order for ease of determining
 /// whether a given flag is already included.
-List<String> experimentsForTests = [
+List<String> experimentsForTests = List.unmodifiable([
   Feature.augmentations.enableString,
-  Feature.declaring_constructors.enableString,
   Feature.enhanced_parts.enableString,
   Feature.macros.enableString,
+  Feature.primary_constructors.enableString,
   Feature.private_named_parameters.enableString,
   Feature.static_extensions.enableString,
   Feature.variance.enableString,
-];
+]);
diff --git a/pkg/analyzer_testing/lib/mock_packages/mock_packages.dart b/pkg/analyzer_testing/lib/mock_packages/mock_packages.dart
index 573714d..c0efaf6 100644
--- a/pkg/analyzer_testing/lib/mock_packages/mock_packages.dart
+++ b/pkg/analyzer_testing/lib/mock_packages/mock_packages.dart
@@ -5,10 +5,20 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer_testing/package_root.dart' as package_root;
+import 'package:analyzer_testing/src/mock_packages/ffi/ffi.dart' as mock_ffi;
+import 'package:analyzer_testing/src/mock_packages/fixnum/fixnum.dart'
+    as mock_fixnum;
+import 'package:analyzer_testing/src/mock_packages/meta/meta.dart' as mock_meta;
+import 'package:analyzer_testing/src/mock_packages/mock_library.dart';
+import 'package:analyzer_testing/src/mock_packages/test_reflective_loader/test_reflective_loader.dart'
+    as mock_test_reflective_loader;
+import 'package:analyzer_testing/src/mock_packages/ui/ui.dart' as mock_ui;
+import 'package:analyzer_testing/src/mock_packages/vector_math/vector_math.dart'
+    as mock_vector_math;
 import 'package:analyzer_testing/utilities/extensions/resource_provider.dart';
 import 'package:path/path.dart' as path;
 
-void _cacheFiles(Map<String, String> cachedFiles) {
+Map<String, String> _cacheFiles() {
   var resourceProvider = PhysicalResourceProvider.INSTANCE;
   var pathContext = resourceProvider.pathContext;
   var packageRoot = pathContext.normalize(package_root.packageRoot);
@@ -20,6 +30,8 @@
     'package_content',
   );
 
+  var cachedFiles = <String, String>{};
+
   void addFiles(Resource resource) {
     if (resource is Folder) {
       resource.getChildren().forEach(addFiles);
@@ -32,6 +44,7 @@
   }
 
   addFiles(resourceProvider.getFolder(mockPath));
+  return cachedFiles;
 }
 
 /// Helper for copying files from "tests/mock_packages" to memory file system
@@ -40,18 +53,16 @@
   static final BlazeMockPackages instance = BlazeMockPackages._();
 
   /// The mapping from relative Posix paths of files to the file contents.
-  final Map<String, String> _cachedFiles = {};
+  final Map<String, String> _cachedFiles = _cacheFiles();
 
-  BlazeMockPackages._() {
-    _cacheFiles(_cachedFiles);
-  }
+  BlazeMockPackages._();
 
   void addFlutter(ResourceProvider provider) {
     _addFiles(provider, 'flutter');
   }
 
   void addMeta(ResourceProvider provider) {
-    _addFiles(provider, 'meta');
+    _addFiles2(provider, 'meta', mock_meta.units);
   }
 
   /// Add files of the given [packageName] to the [provider].
@@ -71,14 +82,31 @@
     var packagesFolder = provider.getFolder(packagesPath);
     return packagesFolder.getChildAssumingFolder(packageName);
   }
+
+  /// Adds files of the given [packageName] to the [provider].
+  Folder _addFiles2(
+    ResourceProvider provider,
+    String packageName,
+    List<MockLibraryUnit> units,
+  ) {
+    var absolutePackagePath = provider.convertPath(
+      '/workspace/third_party/dart/$packageName',
+    );
+    for (var unit in units) {
+      var absoluteUnitPath = provider.convertPath(
+        '$absolutePackagePath/${unit.path}',
+      );
+      provider.getFile(absoluteUnitPath).writeAsStringSync(unit.content);
+    }
+
+    return provider.getFolder(absolutePackagePath);
+  }
 }
 
 /// Helper for copying files from "test/mock_packages" to memory file system.
 mixin MockPackagesMixin {
   /// The mapping from relative Posix paths of files to the file contents.
-  ///
-  /// `null` until the cache is first populated.
-  Map<String, String>? _cachedFiles;
+  late final Map<String, String> _cachedFiles = _cacheFiles();
 
   /// The path to a folder where mock packages can be written.
   String get packagesRootPath;
@@ -87,18 +115,22 @@
 
   ResourceProvider get resourceProvider;
 
+  @Deprecated(
+    'The mock angular_meta package is deprecated; use '
+    '`PubPackageResolutionTest.newPackage` to make a custom mock',
+  )
   Folder addAngularMeta() {
     var packageFolder = _addFiles('angular_meta');
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   Folder addFfi() {
-    var packageFolder = _addFiles('ffi');
+    var packageFolder = _addFiles2('ffi', mock_ffi.units);
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   Folder addFixnum() {
-    var packageFolder = _addFiles('fixnum');
+    var packageFolder = _addFiles2('fixnum', mock_fixnum.units);
     return packageFolder.getChildAssumingFolder('lib');
   }
 
@@ -112,55 +144,70 @@
     return packageFolder.getChildAssumingFolder('lib');
   }
 
+  @Deprecated(
+    'The mock js package is deprecated; use '
+    '`PubPackageResolutionTest.newPackage` to make a custom mock',
+  )
   Folder addJs() {
     var packageFolder = _addFiles('js');
     return packageFolder.getChildAssumingFolder('lib');
   }
 
+  @Deprecated(
+    'The mock kernel package is deprecated; use '
+    '`PubPackageResolutionTest.newPackage` to make a custom mock',
+  )
   Folder addKernel() {
     var packageFolder = _addFiles('kernel');
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   Folder addMeta() {
-    var packageFolder = _addFiles('meta');
+    var packageFolder = _addFiles2('meta', mock_meta.units);
     return packageFolder.getChildAssumingFolder('lib');
   }
 
+  @Deprecated(
+    'The mock pedantic package is deprecated; use '
+    '`PubPackageResolutionTest.newPackage` to make a custom mock',
+  )
   Folder addPedantic() {
     var packageFolder = _addFiles('pedantic');
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   Folder addTestReflectiveLoader() {
-    var packageFolder = _addFiles('test_reflective_loader');
+    var packageFolder = _addFiles2(
+      'test_reflective_loader',
+      mock_test_reflective_loader.units,
+    );
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   Folder addUI() {
-    var packageFolder = _addFiles('ui');
+    var packageFolder = _addFiles2('ui', mock_ui.units);
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   Folder addVectorMath() {
-    var packageFolder = _addFiles('vector_math');
+    var packageFolder = _addFiles2('vector_math', mock_vector_math.units);
     return packageFolder.getChildAssumingFolder('lib');
   }
 
   /// Adds files of the given [packageName] to the [resourceProvider].
+  ///
+  /// This method adds files from the sources found in
+  /// [package_root.packageRoot]. The mock sources are being moved to
+  /// `lib/src/mock_sources/`, accessible via [_addFiles2].
   Folder _addFiles(String packageName) {
-    var cachedFiles = _cachedFiles;
-    if (cachedFiles == null) {
-      try {
-        cachedFiles = {};
-        _cacheFiles(cachedFiles);
-        _cachedFiles = cachedFiles;
-      } on StateError catch (e) {
-        throw StateError(
-          '${e.message}\nAdding built-in mock library for "$packageName" is '
-          'not supported when writing a test outside of the Dart SDK source repository.',
-        );
-      }
+    Map<String, String> cachedFiles;
+    try {
+      cachedFiles = _cachedFiles;
+    } on StateError catch (e) {
+      throw StateError(
+        '${e.message}\nAdding built-in mock library for "$packageName" is '
+        'not supported when writing a test outside of the Dart SDK source repository.',
+      );
     }
 
     for (var entry in cachedFiles.entries) {
@@ -180,4 +227,21 @@
     );
     return packagesFolder.getChildAssumingFolder(packageName);
   }
+
+  /// Adds files of the given [packageName] to the [resourceProvider].
+  Folder _addFiles2(String packageName, List<MockLibraryUnit> units) {
+    var absolutePackagePath = resourceProvider.convertPath(
+      '$packagesRootPath/$packageName',
+    );
+    for (var unit in units) {
+      var absoluteUnitPath = resourceProvider.convertPath(
+        '$absolutePackagePath/${unit.path}',
+      );
+      resourceProvider
+          .getFile(absoluteUnitPath)
+          .writeAsStringSync(unit.content);
+    }
+
+    return resourceProvider.getFolder(absolutePackagePath);
+  }
 }
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/ffi/lib/ffi.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/ffi/lib/ffi.dart
deleted file mode 100644
index ad45792..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/ffi/lib/ffi.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-import 'dart:ffi';
-
-const Allocator calloc = _CallocAllocator();
-
-abstract class Allocator {
-  Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment});
-
-  void free(Pointer pointer);
-}
-
-final class Utf8 extends Opaque {}
-
-class _CallocAllocator implements Allocator {
-  @override
-  Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment}) =>
-      throw '';
-
-  @override
-  void free(Pointer pointer) => throw '';
-}
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/ffi/pubspec.yaml b/pkg/analyzer_testing/lib/mock_packages/package_content/ffi/pubspec.yaml
deleted file mode 100644
index dc04918..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/ffi/pubspec.yaml
+++ /dev/null
@@ -1 +0,0 @@
-name: ffi
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/fixnum/lib/fixnum.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/fixnum/lib/fixnum.dart
deleted file mode 100644
index 7b41c95..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/fixnum/lib/fixnum.dart
+++ /dev/null
@@ -1,5 +0,0 @@
-library fixnum;
-
-class Int32 {}
-
-class Int64 {}
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/fixnum/pubspec.yaml b/pkg/analyzer_testing/lib/mock_packages/package_content/fixnum/pubspec.yaml
deleted file mode 100644
index 48a150c..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/fixnum/pubspec.yaml
+++ /dev/null
@@ -1 +0,0 @@
-name: fixnum
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/meta/lib/meta.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/meta/lib/meta.dart
deleted file mode 100644
index d4d25ad..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/meta/lib/meta.dart
+++ /dev/null
@@ -1,805 +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.
-
-// ignore_for_file: library_private_types_in_public_api
-
-/// Annotations that developers can use to express the intentions that otherwise
-/// can't be deduced by statically analyzing the source code.
-///
-/// See also @[deprecated] and @[override] in the `dart:core` library.
-///
-/// Annotations provide semantic information that tools can use to provide a
-/// better user experience. For example, an IDE might not autocomplete the name
-/// of a function that's been marked `@deprecated`, or it might display the
-/// function's name differently.
-///
-/// For information on installing and importing this library, see the
-/// [meta package on pub.dev](https://pub.dev/packages/meta). To learn more
-/// about using annotations, check out the
-/// [Metadata](https://dart.dev/language/metadata) documentation.
-library meta;
-
-import 'meta_meta.dart';
-
-/// Used to annotate a function `f`. Indicates that `f` always throws an
-/// exception. Any functions that override `f`, in class inheritance, are also
-/// expected to conform to this contract.
-///
-/// Tools, such as the analyzer, can use this to understand whether a block of
-/// code "exits". For example:
-///
-/// ```dart
-/// @alwaysThrows toss() { throw 'Thrown'; }
-///
-/// int fn(bool b) {
-///   if (b) {
-///     return 0;
-///   } else {
-///     toss();
-///     print("Hello.");
-///   }
-/// }
-/// ```
-///
-/// Without the annotation on `toss`, it would look as though `fn` doesn't
-/// always return a value. The annotation shows that `fn` does always exit. In
-/// addition, the annotation reveals that any statements following a call to
-/// `toss` (like the `print` call) are dead code.
-///
-/// Tools, such as the analyzer, can also expect this contract to be enforced;
-/// that is, tools may emit warnings if a function with this annotation
-/// _doesn't_ always throw.
-///
-/// **Deprecated:** This annotation is deprecated and will be
-/// removed in a future release of `package:meta`.
-/// After Dart 2.9, you can instead specify a return type of `Never`
-/// to indicate that a function never returns.
-@Deprecated("Use a return type of 'Never' instead")
-const _AlwaysThrows alwaysThrows = _AlwaysThrows();
-
-/// Used to annotate a [Future]-returning function (including constructors,
-/// getters, methods, and operators), or a [Future]-typed field (including
-/// top-level, instance, and static) `f`. Indicates that the [Future] value that
-/// `f` returns does not need to be awaited. Any methods that override `f` in
-/// class inheritance, are also expected to conform to this contract.
-///
-/// Tools, such as the analyzer, can use this to understand whether to report
-/// that a [Future]-typed value does not need to be awaited:
-///
-/// ```dart
-/// @awaitNotRequired Future<LogMessage> log(String message) { ... }
-///
-/// void fn() {
-///   log('Message'); // Not important to wait for logging to complete.
-/// }
-/// ```
-///
-/// Without the annotation on `log`, the analyzer may report a lint diagnostic
-/// at the call to `log`, such as `discarded_futures` or `unawaited_futures`,
-/// regarding the danger of not awaiting the function call, depending on what
-/// lint rules are enabled.
-///
-/// Tools, such as the analyzer, can also provide feedback if
-///
-/// * the annotation is associated with anything other than a constructor,
-///   function, method, operator, field, or top-level variable, or
-/// * the annotation is associated with a constructor, function, method, or
-///   operator that does not return a [Future], or
-/// * the annotation is associated with a field or top-level variable that is
-///   not typed as a [Future].
-const _AwaitNotRequired awaitNotRequired = _AwaitNotRequired();
-
-/// Used to annotate a parameter of an instance method that overrides another
-/// method.
-///
-/// Indicates that this parameter may have a tighter type than the parameter on
-/// its superclass. The actual argument will be checked at runtime to ensure it
-/// is a subtype of the overridden parameter type.
-///
-/// **Deprecated:** This annotation is deprecated and will be
-/// removed in a future release of `package:meta`.
-/// In Dart 2 and later, you can instead use the built-in `covariant` modifier.
-@Deprecated('Use the `covariant` modifier instead')
-const _Checked checked = _Checked();
-
-/// Used to annotate a method, getter, top-level function, or top-level getter
-/// to indicate that the value obtained by invoking it should not be stored in a
-/// field or top-level variable. The annotation can also be applied to a class
-/// to implicitly annotate all of the valid members of the class, or applied to
-/// a library to annotate all of the valid members of the library, including
-/// classes. If a value returned by an element marked as `doNotStore` is
-/// returned from a function or getter, that function or getter should be
-/// similarly annotated.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a library, class,
-///   method or getter, top-level getter or function, or
-/// * an invocation of a member that has this annotation is returned by a method,
-///   getter or function that is not similarly annotated as `doNotStore`, or
-/// * an invocation of a member that has this annotation is assigned to a field
-///   or top-level variable.
-const _DoNotStore doNotStore = _DoNotStore();
-
-/// Used to annotate a method, getter, top-level function, or top-level getter
-/// that is not intended to be accessed in checked-in code, but might be
-/// ephemerally used during development or local testing.
-///
-/// The intention of this annotation is to signify an API is available for
-/// temporary or ephemeral use (such as debugging or local testing), but should
-/// be removed before the code is submitted or merged into a tested branch of
-/// the repository (e.g. `main` or similar).
-///
-/// For example:
-///
-/// ```dart
-/// void test(
-///   String name,
-///   void Function() testFunction, {
-///   @doNotSubmit bool skip = false,
-/// }) { /* ... */ }
-///
-/// void main() {
-///   // OK.
-///   test('foo', () => print('foo'));
-///
-///   // HINT: Remove before submitting.
-///   test('bar', () => print('bar'), skip: true);
-/// }
-/// ```
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * a declaration that has this annotation is referenced anywhere, including
-///   the library in which it is declared, in checked-in code. Exceptions are
-///   being referenced by a declaration that is also annotated with
-///   `@doNotSubmit` _or_ referencing a parameter that is annotated with
-///   `@doNotSubmit` in the same method or function.
-const _DoNotSubmit doNotSubmit = _DoNotSubmit();
-
-/// Used to annotate a library, or any declaration that is part of the public
-/// interface of a library (such as top-level members, class members, and
-/// function parameters) to indicate that the annotated API is experimental and
-/// may be removed or changed at any-time without updating the version of the
-/// containing package, despite the fact that it would otherwise be a breaking
-/// change.
-///
-/// If the annotation is applied to a library then it is equivalent to applying
-/// the annotation to all of the top-level members of the library. Applying the
-/// annotation to a class does *not* apply the annotation to subclasses, but
-/// does apply the annotation to members of the class.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with a declaration that is not part of the
-///   public interface of a library (such as a local variable or a declaration
-///   that is private) or a directive other than the first directive in the
-///   library, or
-/// * the declaration is referenced by a package that has not explicitly
-///   indicated its intention to use experimental APIs (details TBD).
-const _Experimental experimental = _Experimental();
-
-/// Used to annotate an instance or static method `m`. Indicates that `m` must
-/// either be abstract or must return a newly allocated object or `null`. In
-/// addition, every method that either implements or overrides `m` is implicitly
-/// annotated with this same annotation.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a method, or
-/// * a method that has this annotation can return anything other than a newly
-///   allocated object or `null`.
-const _Factory factory = _Factory();
-
-/// Used to annotate a class `C`. Indicates that `C` and all subtypes of `C`
-/// must be immutable.
-///
-/// A class is immutable if all of the instance fields of the class, whether
-/// defined directly or inherited, are `final`.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a class, or
-/// * a class that has this annotation or extends, implements or mixes in a
-///   class that has this annotation is not immutable.
-const Immutable immutable = Immutable();
-
-/// Used to annotate a declaration which should only be used from within the
-/// package in which it is declared, and which should not be exposed from said
-/// package's public API.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the declaration is declared in a package's public API, or is exposed from
-///   a package's public API, or
-/// * the declaration is private, an unnamed extension, a static member of a
-///   private class, mixin, or extension, a value of a private enum, or a
-///   constructor of a private class, or
-/// * the declaration is referenced outside the package in which it is declared.
-const _Internal internal = _Internal();
-
-/// Used to annotate a test framework function that runs a single test.
-///
-/// Tools, such as IDEs, can show invocations of such function in a file
-/// structure view to help the user navigating in large test files.
-///
-/// The first parameter of the function must be the description of the test.
-const _IsTest isTest = _IsTest();
-
-/// Used to annotate a test framework function that runs a group of tests.
-///
-/// Tools, such as IDEs, can show invocations of such function in a file
-/// structure view to help the user navigating in large test files.
-///
-/// The first parameter of the function must be the description of the group.
-const _IsTestGroup isTestGroup = _IsTestGroup();
-
-/// Used to annotate a const constructor `c`. Indicates that any invocation of
-/// the constructor must use the keyword `const` unless one or more of the
-/// arguments to the constructor is not a compile-time constant.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a const constructor,
-///   or
-/// * an invocation of a constructor that has this annotation is not invoked
-///   using the `const` keyword unless one or more of the arguments to the
-///   constructor is not a compile-time constant.
-const _Literal literal = _Literal();
-
-/// Used to annotate a parameter which should be constant.
-///
-/// The Dart type system does not allow distinguishing values of constant
-/// expressions from other values of the same type, so a function cannot
-/// ask to have only constant values as arguments.
-/// This annotation marks a parameter as requiring a constant expression as
-/// argument. The analyzer can warn, or err if so configured, if a non-constant
-/// expression is used as argument.
-///
-/// The annotation can be applied to any parameter, but if it is applied to a
-/// parameter of an instance member, subclasses overriding the member will not
-/// inherit the annotation. If the subclass member also wants a constant
-/// argument, it must annotate its own parameter as well.
-///
-/// Notice that if an annotatated instance member overrides a superclass member
-/// where the same parameter is not annotated with this annotation, then a user
-/// can cast to the superclass and invoke with a non-constant argument without
-/// any warnings.
-///
-/// An example use could be the arguments to functions annotated with
-/// [RecordUse], as only constant arguments can be made available
-/// to the post-compile steps.
-///
-/// ```dart
-/// import 'package:meta/meta.dart' show mustBeConst;
-///
-/// void main() {
-///   f();
-///   A().i = 3;
-/// }
-///
-/// const v = 3;
-///
-/// int f() => g(v);
-///
-/// int g(@mustBeConst int value) => value + 1;
-///
-/// class A {
-///   int? _i;
-///
-///   int? get i => _i;
-///
-///   set i(@mustBeConst int? value) {
-///     _i = value;
-///   }
-/// }
-/// ```
-@experimental
-const _MustBeConst mustBeConst = _MustBeConst();
-
-/// Used to annotate an instance member `m` declared on a class or mixin `C`.
-/// Indicates that every concrete subclass of `C` must directly override `m`.
-///
-/// The intention of this annotation is to "re-abtract" a member that was
-/// previously concrete, and to ensure that subclasses provide their own
-/// implementation of the member. For example:
-///
-/// ```dart
-/// base class Entity {
-///   @mustBeOverridden
-///   String toString();
-/// }
-///
-/// abstract class AbstractEntity extends Entity {
-///   // OK: AbstractEntity is abstract.
-/// }
-///
-/// sealed class SealedEntity extends Entity {
-///   // OK: SealedEntity is sealed, which implies abstract.
-/// }
-///
-/// mixin MixinEntity on Entity {
-///  // OK: MixinEntity is abstract.
-/// }
-///
-/// class Person extends Entity {
-///   // ERROR: Missing new implementation of 'toString'.
-/// }
-///
-/// class Animal extends Entity {
-///   // OK: Animal provides its own implementation of 'toString'.
-///   String toString() => 'Animal';
-/// }
-/// ```
-///
-/// This annotation places no restrictions on the overriding members. In
-/// particular, it does not require that the overriding members invoke the
-/// overridden member. The annotation [mustCallSuper] can be used to add that
-/// requirement.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than an instance member
-///   (a method, operator, field, getter, or setter) of a class or of a mixin,
-///   or
-/// * the annotation is associated with a member `m` in class or mixin `C`, and
-///   there is a concrete class `D` which is a subclass of `C` (directly or
-///   indirectly), and `D` does not directly declare a concrete override of `m`
-///   and does not directly declare a concrete override of `noSuchMethod`.
-const _MustBeOverridden mustBeOverridden = _MustBeOverridden();
-
-/// Used to annotate an instance member (method, getter, setter, operator, or
-/// field) `m`. Indicates that every invocation of a member that overrides `m`
-/// must also invoke `m`. In addition, every method that overrides `m` is
-/// implicitly annotated with this same annotation.
-///
-/// Note that private members with this annotation cannot be validly overridden
-/// outside of the library that defines the annotated member.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than an instance member,
-///   or
-/// * a member that overrides a member that has this annotation can return
-///   without invoking the overridden member.
-const _MustCallSuper mustCallSuper = _MustCallSuper();
-
-/// Used to annotate an instance member (method, getter, setter, operator, or
-/// field) `m` in a class `C` or mixin `M`. Indicates that `m` should not be
-/// overridden in any classes that extend or mixin `C` or `M`.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than an instance member,
-/// * the annotation is associated with an abstract member (because subclasses
-///   are required to override the member),
-/// * the annotation is associated with an extension method,
-/// * the annotation is associated with a member `m` in class `C`, and there is
-///   a class `D` or mixin `M`, that extends or mixes in `C`, that declares an
-///   overriding member `m`.
-const _NonVirtual nonVirtual = _NonVirtual();
-
-/// Used to annotate a class, mixin, extension, function, method, or typedef
-/// declaration `C`. Indicates that any type arguments declared on `C` are to
-/// be treated as optional.
-///
-/// Tools such as the analyzer and linter can use this information to suppress
-/// warnings that would otherwise require type arguments on `C` to be provided.
-const _OptionalTypeArgs optionalTypeArgs = _OptionalTypeArgs();
-
-/// Used to annotate an instance member in a class or mixin which is meant to
-/// be visible only within the declaring library, and to other instance members
-/// of the class or mixin, and their subtypes.
-///
-/// If the annotation is on a field it applies to the getter, and setter if
-/// appropriate, that are induced by the field.
-///
-/// Indicates that the annotated instance member (method, getter, setter,
-/// operator, or field) `m` in a class or mixin `C` should only be referenced
-/// in specific locations. A reference from within the library in which `C` is
-/// declared is valid. Additionally, a reference from within an instance member
-/// in `C`, or a class that extends, implements, or mixes in `C` (either
-/// directly or indirectly) or a mixin that uses `C` as a superclass constraint
-/// is valid. Additionally a reference from within an instance member in an
-/// extension that applies to `C` is valid.
-///
-/// Additionally restricts the instance of `C` on which `m` is referenced: a
-/// reference to `m` should either be in the same library in which `C` is
-/// declared, or should refer to `this.m` (explicitly or implicitly), and not
-/// `m` on any other instance of `C`.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than an instance member,
-///   or
-/// * a reference to a member `m` which has this annotation, declared in a
-///   class or mixin `C`, is found outside of the declaring library and outside
-///   of an instance member in any class that extends, implements, or mixes in
-///   `C` or any mixin that uses `C` as a superclass constraint, or
-/// * a reference to a member `m` which has this annotation, declared in a
-///   class or mixin `C`, is found outside of the declaring library and the
-///   receiver is something other than `this`.
-// TODO(srawlins): Add a sentence which defines "referencing" and explicitly
-// mentions tearing off, here and on the other annotations which use the word
-// "referenced."
-const _Protected protected = _Protected();
-
-/// Used to annotate an instance member of an extension type that
-/// redeclares a member from a superinterface.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a valid instance
-///   member of an extension type (a method, operator, getter, or setter) or
-/// * is applied to a member that does not redeclare a member from either the
-///   extended type or a superinterface.
-const _Redeclare redeclare = _Redeclare();
-
-/// Annotation for intentionally loosening restrictions on subtyping that would
-/// otherwise cause lint warnings to be produced by the `implicit_reopen` lint.
-///
-/// Indicates that the annotated class, mixin, or mixin class declaration
-/// intentionally allows subtypes outside the library to implement it, or extend
-/// it, or mix it in, even though it has some superinterfaces whose restrictions
-/// prevent inheritance.
-///
-/// A class, mixin, or mixin class declaration prevents inheritance if:
-///
-/// * it is marked `interface` or `final`
-/// * it is marked `sealed`, and is implicitly `interface` or `final`
-///   based on the modifiers of its superinterfaces
-/// * it is an anonymous mixin application, and is implicitly `interface` or
-///   `final` based on the modifiers of its superinterfaces
-///
-/// A declaration annotated with `@reopen` will suppress warnings from the
-/// [`implicit_reopen`](https://dart.dev/lints/implicit_reopen) lint.
-/// That lint will otherwise warn when a subtype has restrictions that are
-/// not sufficient to enforce the restrictions declared by class modifiers on
-/// one or more superinterfaces.
-///
-/// In addition, tools, such as the analyzer, can provide feedback if
-///
-/// * The annotation is applied to anything other than a class, mixin, or mixin
-///   class.
-/// * The annotation is applied to a class or mixin which does not require it.
-///   (The intent to reopen was not satisfied.)
-const _Reopen reopen = _Reopen();
-
-/// Used to annotate a named parameter `p` in a method or function `f`.
-/// Indicates that every invocation of `f` must include an argument
-/// corresponding to `p`, despite the fact that `p` would otherwise be an
-/// optional parameter.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a named parameter,
-/// * the annotation is associated with a named parameter in a method `m1` that
-///   overrides a method `m0` and `m0` defines a named parameter with the same
-///   name that does not have this annotation, or
-/// * an invocation of a method or function does not include an argument
-///   corresponding to a named parameter that has this annotation.
-///
-/// **Deprecated:** This annotation is set to be deprecated and later
-/// removed in a future release of `package:meta`.
-/// In Dart 2.12 and later, use the built-in `required` keyword
-/// to mark a named parameter as required.
-/// To learn more about `required`, check out the documentation on
-/// [named parameters](https://dart.dev/language/functions#named-parameters).
-const Required required = Required();
-
-/// Annotation marking a class as not allowed as a super-type
-/// outside of the current package.
-///
-/// Classes in the same package as the marked class may extend, implement or
-/// mix-in the annotated class.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a class,
-/// * the annotation is associated with a class `C`, and there is a class or
-///   mixin `D`, which extends, implements, mixes in, or constrains to `C`, and
-///   `C` and `D` are declared in different packages.
-///
-/// **Note:** In Dart 3 and later, you can use built-in class modifiers to
-/// control what forms of subtyping are allowed outside the current library.
-/// To learn more about using class modifiers, check out the
-/// [Class modifiers](https://dart.dev/language/class-modifiers) documentation.
-const _Sealed sealed = _Sealed();
-
-/// Used to annotate a method, field, or getter within a class, mixin, or
-/// extension, or a or top-level getter, variable or function to indicate that
-/// the value obtained by invoking it should be used. A value is considered used
-/// if it is assigned to a variable, passed to a function, or used as the target
-/// of an invocation, or invoked (if the result is itself a function).
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a method, field or
-///   getter, top-level variable, getter or function or
-/// * the value obtained by a method, field, getter or top-level getter,
-///   variable or function annotated with `@useResult` is not used.
-const UseResult useResult = UseResult();
-
-/// Used to annotate a field that is allowed to be overridden in Strong Mode.
-///
-/// **Deprecated:** This annotation is deprecated and will be
-/// removed in a future release of `package:meta`.
-/// In Dart 2 and later, overriding fields is allowed by default,
-/// so this annotation no longer has any meaning.
-/// All uses of the annotation should be removed.
-@Deprecated('No longer has meaning')
-const _Virtual virtual = _Virtual();
-
-/// Used to annotate an instance member that was made public so that it could be
-/// overridden but that is not intended to be referenced from outside the
-/// defining library.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with a declaration other than a public
-///   instance member in a class or mixin, or
-/// * the member is referenced outside of the defining library.
-const _VisibleForOverriding visibleForOverriding = _VisibleForOverriding();
-
-/// Used to annotate a declaration that was made public, so that it is more
-/// visible than otherwise necessary, to make code testable.
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with a declaration not in the `lib` folder
-///   of a package, or a private declaration, or a declaration in an unnamed
-///   static extension, or
-/// * the declaration is referenced outside of its defining library or a
-///   library which is in the `test` folder of the defining package.
-const _VisibleForTesting visibleForTesting = _VisibleForTesting();
-
-/// Used to annotate a class.
-///
-/// See [immutable] for more details.
-@Target({TargetKind.classType, TargetKind.extensionType, TargetKind.mixinType})
-class Immutable {
-  /// A human-readable explanation of the reason why the class is immutable.
-  final String reason;
-
-  /// Initialize a newly created instance to have the given [reason].
-  const Immutable([this.reason = '']);
-}
-
-/// Annotates a static method to be recorded.
-///
-/// Applies to static functions, top-level functions, or extension methods.
-///
-/// During compilation, all statically resolved calls to an annotated function
-/// are registered, and information about the annotated functions, the calls,
-/// and their arguments, is then made available to post-compile steps.
-// TODO(srawlins): Enforce with `TargetKind.method`.
-@experimental
-class RecordUse {
-  /// Creates a [RecordUse] instance.
-  ///
-  /// This annotation can be placed as an annotation on functions whose
-  /// statically resolved calls should be registered together with the optional
-  /// [metadata] information.
-  const RecordUse();
-}
-
-/// Used to annotate a named parameter `p` in a method or function `f`.
-///
-/// See [required] for more details.
-///
-/// **Deprecated:** This annotation is set to be deprecated and later
-/// removed in a future release of `package:meta`.
-/// In Dart 2.12 and later, use the built-in `required` keyword
-/// to mark a named parameter as required.
-/// To learn more about `required`, check out the documentation on
-/// [named parameters](https://dart.dev/language/functions#named-parameters).
-class Required {
-  /// A human-readable explanation of the reason why the annotated parameter is
-  /// required. For example, the annotation might look like:
-  ///
-  /// ```dart
-  /// ButtonWidget({
-  ///     Function onHover,
-  ///     @Required('Buttons must do something when pressed')
-  ///     Function onPressed,
-  ///     ...
-  /// }) ...
-  /// ```
-  final String reason;
-
-  /// Initialize a newly created instance to have the given [reason].
-  const Required([this.reason = '']);
-}
-
-/// See [useResult] for more details.
-@Target({
-  TargetKind.constructor,
-  TargetKind.field,
-  TargetKind.function,
-  TargetKind.getter,
-  TargetKind.method,
-  TargetKind.topLevelVariable,
-})
-class UseResult {
-  /// A human-readable explanation of the reason why the value returned by
-  /// accessing this member should be used.
-  final String reason;
-
-  /// Names a parameter of a method or function that, when present, signals that
-  /// the annotated member's value is used by that method or function and does
-  /// not need to be further checked.
-  final String? parameterDefined;
-
-  /// Initialize a newly created instance to have the given [reason].
-  const UseResult([this.reason = '']) : parameterDefined = null;
-
-  /// Initialize a newly created instance to annotate a function or method that
-  /// identifies a parameter [parameterDefined] that when present signals that
-  /// the result is used by the annotated member and does not need to be further
-  /// checked.  For values that need to be used unconditionally, use the unnamed
-  /// `UseResult` constructor, or if no reason is specified, the [useResult]
-  /// constant.
-  ///
-  /// Tools, such as the analyzer, can provide feedback if
-  ///
-  /// * a parameter named by [parameterDefined] is not declared by the annotated
-  ///   method or function.
-  const UseResult.unless({required this.parameterDefined, this.reason = ''});
-}
-
-class _AlwaysThrows {
-  const _AlwaysThrows();
-}
-
-/// See [awaitNotRequired] for more details.
-@Target({
-  TargetKind.constructor,
-  TargetKind.field,
-  TargetKind.function,
-  TargetKind.getter,
-  TargetKind.method,
-  TargetKind.topLevelVariable,
-})
-class _AwaitNotRequired {
-  const _AwaitNotRequired();
-}
-
-class _Checked {
-  const _Checked();
-}
-
-@Target({
-  TargetKind.classType,
-  TargetKind.constructor,
-  TargetKind.function,
-  TargetKind.getter,
-  TargetKind.library,
-  TargetKind.method,
-  TargetKind.mixinType,
-})
-class _DoNotStore {
-  const _DoNotStore();
-}
-
-@Target({
-  TargetKind.constructor,
-  TargetKind.function,
-  TargetKind.getter,
-  TargetKind.method,
-  TargetKind.parameter,
-  TargetKind.setter,
-  TargetKind.topLevelVariable,
-})
-class _DoNotSubmit {
-  const _DoNotSubmit();
-}
-
-class _Experimental {
-  const _Experimental();
-}
-
-@Target({TargetKind.method})
-class _Factory {
-  const _Factory();
-}
-
-class _Internal {
-  const _Internal();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.function` (and
-// `TargetKind.method`?).
-class _IsTest {
-  const _IsTest();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.function` (and
-// `TargetKind.method`?).
-class _IsTestGroup {
-  const _IsTestGroup();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.constructor`.
-class _Literal {
-  const _Literal();
-}
-
-@Target({TargetKind.parameter, TargetKind.extensionType})
-class _MustBeConst {
-  const _MustBeConst();
-}
-
-@Target({TargetKind.overridableMember})
-class _MustBeOverridden {
-  const _MustBeOverridden();
-}
-
-@Target({TargetKind.overridableMember})
-class _MustCallSuper {
-  const _MustCallSuper();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.method`, `TargetKind.getter`,
-// `TargetKind.setter`, `TargetKind.field`.
-class _NonVirtual {
-  const _NonVirtual();
-}
-
-@Target({
-  TargetKind.classType,
-  TargetKind.extension,
-  TargetKind.extensionType,
-  TargetKind.function,
-  TargetKind.method,
-  TargetKind.mixinType,
-  TargetKind.typedefType,
-})
-class _OptionalTypeArgs {
-  const _OptionalTypeArgs();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.method`, `TargetKind.getter`,
-// `TargetKind.setter`, `TargetKind.field`.
-class _Protected {
-  const _Protected();
-}
-
-@Target({
-  // TODO(pq): restrict to instance members only
-  TargetKind.getter,
-  TargetKind.setter,
-  TargetKind.method,
-})
-class _Redeclare {
-  const _Redeclare();
-}
-
-@Target({TargetKind.classType, TargetKind.mixinType})
-class _Reopen {
-  const _Reopen();
-}
-
-@Target({TargetKind.classType})
-class _Sealed {
-  const _Sealed();
-}
-
-@Deprecated('No longer has meaning')
-class _Virtual {
-  const _Virtual();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.method`, `TargetKind.getter`,
-// `TargetKind.setter`, `TargetKind.field`.
-class _VisibleForOverriding {
-  const _VisibleForOverriding();
-}
-
-// TODO(srawlins): Enforce with `TargetKind.constructor`, `TargetKind.function`,
-// `TargetKind.method`, `TargetKind.getter`, `TargetKind.setter`,
-// `TargetKind.field`, `TargetKind.parameter`, `TargetKind.typedef`,
-// `TargetKind.type`.
-class _VisibleForTesting {
-  const _VisibleForTesting();
-}
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/meta/lib/meta_meta.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/meta/lib/meta_meta.dart
deleted file mode 100644
index add0ab4..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/meta/lib/meta_meta.dart
+++ /dev/null
@@ -1,190 +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.
-
-/// Annotations that describe the intended use of other annotations.
-library meta_meta;
-
-/// An annotation used on classes that are intended to be used as annotations
-/// to indicate the kinds of declarations and directives for which the
-/// annotation is appropriate.
-///
-/// The kinds are represented by the constants defined in [TargetKind].
-///
-/// Tools, such as the analyzer, can provide feedback if
-///
-/// * the annotation is associated with anything other than a class, where the
-///   class must be usable as an annotation (that is, contain at least one
-///   `const` constructor).
-/// * the annotated annotation is associated with anything other than the kinds
-///   of declarations listed as valid targets.
-///
-/// This type is not intended to be extended and will be marked as `final`
-/// in a future release of `package:meta`.
-@Target({TargetKind.classType})
-class Target {
-  /// The kinds of declarations with which the annotated annotation can be
-  /// associated.
-  final Set<TargetKind> kinds;
-
-  /// Create a new instance of [Target] to be used as an annotation
-  /// on a class intended to be used as an annotation, with the
-  /// specified target [kinds] that it can be applied to.
-  const Target(this.kinds);
-}
-
-/// An enumeration of the kinds of targets to which an annotation can be
-/// applied.
-///
-/// This type is not intended to be extended and will be marked as `final`
-/// in a future release of `package:meta`.
-class TargetKind {
-  /// Indicates that an annotation is valid on any class declaration.
-  static const classType = TargetKind._('classes', 'classType');
-
-  /// Indicates that an annotation is valid on any constructor declaration, both
-  /// factory and generative constructors, whether it's in a class, enum, or
-  /// extension type. Extension type primary constructors are not supported,
-  /// because there is no way to annotate a primary constructor.
-  static const constructor = TargetKind._('constructors', 'constructor');
-
-  /// Indicates that an annotation is valid on any directive in a library or
-  /// part file, whether it's a `library`, `import`, `export`, `part`, or
-  /// `part of` directive.
-  static const directive = TargetKind._('directives', 'directive');
-
-  /// Indicates that an annotation is valid on any enum declaration.
-  static const enumType = TargetKind._('enums', 'enumType');
-
-  /// Indicates that an annotation is valid on any enum value declaration.
-  static const enumValue = TargetKind._('enum values', 'enumValue');
-
-  /// Indicates that an annotation is valid on any extension declaration.
-  static const extension = TargetKind._('extensions', 'extension');
-
-  /// Indicates that an annotation is valid on any extension type declaration.
-  static const extensionType = TargetKind._('extension types', 'extensionType');
-
-  /// Indicates that an annotation is valid on any field declaration, both
-  /// instance and static fields, whether it's in a class, enum, mixin, or
-  /// extension.
-  static const field = TargetKind._('fields', 'field');
-
-  /// Indicates that an annotation is valid on any top-level function
-  /// declaration.
-  static const function = TargetKind._('top-level functions', 'function');
-
-  /// Indicates that an annotation is valid on the first directive in a library,
-  /// whether that's a `library`, `import`, `export` or `part` directive. This
-  /// doesn't include the `part of` directive in a part file.
-  static const library = TargetKind._('libraries', 'library');
-
-  /// Indicates that an annotation is valid on any getter declaration, both
-  /// instance or static getters, whether it's in a class, enum, mixin,
-  /// extension, extension type, or at the top-level of a library.
-  static const getter = TargetKind._('getters', 'getter');
-
-  /// Indicates that an annotation is valid on any method declaration, both
-  /// instance and static methods, whether it's in a class, enum, mixin,
-  /// extension, or extension type.
-  static const method = TargetKind._('methods', 'method');
-
-  /// Indicates that an annotation is valid on any mixin declaration.
-  static const mixinType = TargetKind._('mixins', 'mixinType');
-
-  /// Indicates that an annotation is valid on any optional formal parameter
-  /// declaration, whether it's in a constructor, function (named or anonymous),
-  /// function type, function-typed formal parameter, or method.
-  static const optionalParameter = TargetKind._(
-    'optional parameters',
-    'optionalParameter',
-  );
-
-  /// Indicates that an annotation is valid on any overridable instance member
-  /// declaration, whether it's in a class, enum, extension type, or mixin. This
-  /// includes instance fields, getters, setters, methods, and operators.
-  static const overridableMember = TargetKind._(
-    'overridable members',
-    'overridableMember',
-  );
-
-  /// Indicates that an annotation is valid on any formal parameter declaration,
-  /// whether it's in a constructor, function (named or anonymous), function
-  /// type, function-typed formal parameter, or method.
-  static const parameter = TargetKind._('parameters', 'parameter');
-
-  /// Indicates that an annotation is valid on any setter declaration, both
-  /// instance or static setters, whether it's in a class, enum, mixin,
-  /// extension, extension type, or at the top-level of a library.
-  static const setter = TargetKind._('setters', 'setter');
-
-  /// Indicates that an annotation is valid on any top-level variable
-  /// declaration.
-  static const topLevelVariable = TargetKind._(
-    'top-level variables',
-    'topLevelVariable',
-  );
-
-  /// Indicates that an annotation is valid on any declaration that introduces a
-  /// type. This includes classes, enums, mixins, and typedefs, but does not
-  /// include extensions because extensions don't introduce a type.
-  // TODO(srawlins): This should include extension types.
-  static const type = TargetKind._(
-    'types (classes, enums, mixins, or typedefs)',
-    'type',
-  );
-
-  /// Indicates that an annotation is valid on any typedef declaration.
-  static const typedefType = TargetKind._('typedefs', 'typedefType');
-
-  /// Indicates that an annotation is valid on any type parameter declaration,
-  /// whether it's on a class, enum, function type, function, mixin, extension,
-  /// extension type, or typedef.
-  static const typeParameter = TargetKind._('type parameters', 'typeParameter');
-
-  /// All current [TargetKind] values of targets to
-  /// which an annotation can be applied.
-  static const values = [
-    classType,
-    constructor,
-    directive,
-    enumType,
-    enumValue,
-    extension,
-    extensionType,
-    field,
-    function,
-    library,
-    getter,
-    method,
-    mixinType,
-    optionalParameter,
-    overridableMember,
-    parameter,
-    setter,
-    topLevelVariable,
-    type,
-    typedefType,
-    typeParameter,
-  ];
-
-  /// A user visible string used to describe this target kind.
-  final String displayString;
-
-  /// The name of the [TargetKind] value.
-  ///
-  /// The name is a string containing the source identifier used
-  /// to declare the [TargetKind] value. For example,
-  /// the result of `TargetKind.classType.name`is the string "classType".
-  final String name;
-
-  // This class is not meant to be instantiated or extended; this constructor
-  // prevents instantiation and extension.
-  const TargetKind._(this.displayString, this.name);
-
-  /// A numeric identifier for the enumerated value.
-  int get index => values.indexOf(this);
-
-  @override
-  String toString() => 'TargetKind.$name';
-}
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/meta/pubspec.yaml b/pkg/analyzer_testing/lib/mock_packages/package_content/meta/pubspec.yaml
deleted file mode 100644
index d1b06d5..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/meta/pubspec.yaml
+++ /dev/null
@@ -1 +0,0 @@
-name: meta
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/test_reflective_loader/lib/test_reflective_loader.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/test_reflective_loader/lib/test_reflective_loader.dart
deleted file mode 100644
index 66d69a1..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/test_reflective_loader/lib/test_reflective_loader.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-library test_reflective_loader;
-
-const Object reflectiveTest = _ReflectiveTest();
-const Object skippedTest = SkippedTest();
-const Object soloTest = _SoloTest();
-
-class SkippedTest {
-  const SkippedTest({String? issue, String? reason});
-}
-
-class _ReflectiveTest {
-  const _ReflectiveTest();
-}
-
-class _SoloTest {
-  const _SoloTest();
-}
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/test_reflective_loader/pubspec.yaml b/pkg/analyzer_testing/lib/mock_packages/package_content/test_reflective_loader/pubspec.yaml
deleted file mode 100644
index 1e3f6f2..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/test_reflective_loader/pubspec.yaml
+++ /dev/null
@@ -1 +0,0 @@
-name: test_reflective_loader
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/lib/matrix4.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/lib/matrix4.dart
deleted file mode 100644
index 48e3d39..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/lib/matrix4.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2015, Google Inc. Please see the AUTHORS file for 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 'vector_math_64.dart';
-
-/// 4D Matrix.
-/// Values are stored in column major order.
-class Matrix4 {}
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/lib/vector_math_64.dart b/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/lib/vector_math_64.dart
deleted file mode 100644
index 54cfbf0..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/lib/vector_math_64.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2015, Google Inc. Please see the AUTHORS file for 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 library containing different type of vector operations for use in games,
-/// simulations, or rendering.
-///
-/// The library contains Vector classes ([Vector2], [Vector3] and [Vector4]),
-/// Matrices classes ([Matrix2], [Matrix3] and [Matrix4]) and collision
-/// detection related classes ([Aabb2], [Aabb3], [Frustum], [Obb3], [Plane],
-/// [Quad], [Ray], [Sphere] and [Triangle]).
-///
-/// In addition some utilities are available as color operations (See [Colors]
-/// class), noise generators ([SimplexNoise]) and common OpenGL operations
-/// (like [makeViewMatrix], [makePerspectiveMatrix], or [pickRay]).
-///
-/// There is also a [vector_math_64_64] library available that uses double
-/// precision (64-bit) instead of single precision (32-bit) floating point
-/// numbers for storage.
-library vector_math_64;
-
-part 'matrix4.dart';
diff --git a/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/pubspec.yaml b/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/pubspec.yaml
deleted file mode 100644
index b69249b..0000000
--- a/pkg/analyzer_testing/lib/mock_packages/package_content/vector_math/pubspec.yaml
+++ /dev/null
@@ -1 +0,0 @@
-name: vector_math
diff --git a/pkg/analyzer_testing/lib/src/analysis_rule/pub_package_resolution.dart b/pkg/analyzer_testing/lib/src/analysis_rule/pub_package_resolution.dart
index c1bddc2..447a63e 100644
--- a/pkg/analyzer_testing/lib/src/analysis_rule/pub_package_resolution.dart
+++ b/pkg/analyzer_testing/lib/src/analysis_rule/pub_package_resolution.dart
@@ -12,7 +12,8 @@
 import 'package:analyzer/src/dart/analysis/byte_store.dart'; // ignore: implementation_imports
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart'; // ignore: implementation_imports
 import 'package:analyzer/src/dart/analysis/experiments.dart'; // ignore: implementation_imports
-import 'package:analyzer/src/error/codes.dart'; // ignore: implementation_imports
+import 'package:analyzer/src/diagnostic/diagnostic.dart' // ignore: implementation_imports
+    as diag;
 import 'package:analyzer/src/test_utilities/mock_sdk.dart'; // ignore: implementation_imports
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_testing/experiments/experiments.dart';
@@ -230,11 +231,19 @@
   /// Adds the 'js' package as a dependency to the package-under-test.
   ///
   /// This allows various `package:js/` imports to resolve.
+  @Deprecated(
+    'The mock js package is deprecated; use '
+    '`PubPackageResolutionTest.newPackage` to make a custom mock',
+  )
   bool get addJsPackageDep => false;
 
   /// Adds the 'kernel' package as a dependency to the package-under-test.
   ///
   /// This allows various `package:kernel/` imports to resolve.
+  @Deprecated(
+    'The mock kernel package is deprecated; use '
+    '`PubPackageResolutionTest.newPackage` to make a custom mock',
+  )
   bool get addKernelPackageDep => false;
 
   /// Adds the 'meta' package as a dependency to the package-under-test.
@@ -256,9 +265,9 @@
 
   /// Error codes that by default should be ignored in test expectations.
   List<DiagnosticCode> get ignoredDiagnosticCodes => [
-    WarningCode.unusedElement,
-    WarningCode.unusedField,
-    WarningCode.unusedLocalVariable,
+    diag.unusedElement,
+    diag.unusedField,
+    diag.unusedLocalVariable,
   ];
 
   /// The path to the root of the external packages.
@@ -693,6 +702,7 @@
       includedPaths: _collectionIncludedPaths.map(convertPath).toList(),
       resourceProvider: resourceProvider,
       sdkPath: _sdkRoot.path,
+      withFineDependencies: true,
     );
   }
 
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/ffi/ffi.dart b/pkg/analyzer_testing/lib/src/mock_packages/ffi/ffi.dart
new file mode 100644
index 0000000..1416c15
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/ffi/ffi.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+/// The set of compilation units that make up the mock 'ffi' package.
+final List<MockLibraryUnit> units = [_ffiUnit];
+
+final _ffiUnit = MockLibraryUnit('lib/ffi.dart', r'''
+import 'dart:ffi';
+
+const CallocAllocator calloc = CallocAllocator._();
+
+final class CallocAllocator implements Allocator {}
+
+final class Utf8 extends Opaque {}
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/fixnum/fixnum.dart b/pkg/analyzer_testing/lib/src/mock_packages/fixnum/fixnum.dart
new file mode 100644
index 0000000..e009630
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/fixnum/fixnum.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+/// The set of compilation units that make up the mock 'fixnum' package.
+final List<MockLibraryUnit> units = [_fixnumUnit];
+
+final _fixnumUnit = MockLibraryUnit('lib/fixnum.dart', r'''
+library fixnum;
+
+class Int32 {}
+
+class Int64 {}
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation.dart
new file mode 100644
index 0000000..a94be35
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+import 'animation/animation.dart';
+import 'animation/animation_controller.dart';
+
+/// The set of compilation units that make up the mock 'animation' component of
+/// the 'flutter' package.
+final List<MockLibraryUnit> units = [
+  _animationLibrary,
+  animationAnimationLibrary,
+  animationAnimationControllerLibrary,
+];
+
+final _animationLibrary = MockLibraryUnit('lib/animation.dart', r'''
+export 'src/animation/animation_controller.dart';
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation/animation.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation/animation.dart
new file mode 100644
index 0000000..56f6c8f
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation/animation.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final animationAnimationLibrary = MockLibraryUnit(
+  'lib/src/animation/animation.dart',
+  r'''
+abstract class Animation<T> extends Listenable implements ValueListenable<T> {}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation/animation_controller.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation/animation_controller.dart
new file mode 100644
index 0000000..70534a3
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/animation/animation_controller.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final animationAnimationControllerLibrary = MockLibraryUnit(
+  'lib/src/animation/animation_controller.dart',
+  r'''
+class AnimationController extends Animation<double> {}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation.dart
new file mode 100644
index 0000000..985aee7
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+import 'foundation/assertions.dart';
+import 'foundation/change_notifier.dart';
+import 'foundation/constants.dart';
+import 'foundation/diagnostics.dart';
+import 'foundation/key.dart';
+import 'foundation/print.dart';
+
+/// The set of compilation units that make up the mock 'foundation' component of
+/// the 'flutter' package.
+final List<MockLibraryUnit> units = [
+  _foundationLibrary,
+  foundationAssertionsLibrary,
+  foundationChangeNotifierLibrary,
+  foundationConstantsLibrary,
+  foundationDiagnosticsLibrary,
+  foundationKeyLibrary,
+  foundationPrintLibrary,
+];
+
+final _foundationLibrary = MockLibraryUnit('lib/foundation.dart', r'''
+export 'package:meta/meta.dart'
+    show
+        immutable,
+        mustCallSuper,
+        optionalTypeArgs,
+        protected,
+        required,
+        visibleForTesting;
+
+export 'src/foundation/assertions.dart';
+export 'src/foundation/constants.dart';
+export 'src/foundation/diagnostics.dart';
+export 'src/foundation/key.dart';
+export 'src/foundation/print.dart';
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/assertions.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/assertions.dart
new file mode 100644
index 0000000..632cfc1
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/assertions.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final foundationAssertionsLibrary = MockLibraryUnit(
+  'lib/src/foundation/assertions.dart',
+  r'''
+class FlutterErrorDetails {
+  const FlutterErrorDetails({
+    required Object exception,
+    StackTrace? stack,
+    String? library = 'Flutter framework',
+    DiagnosticsNode? context,
+    Iterable<String> Function(Iterable<String>)? stackFilter,
+    Iterable<DiagnosticsNode> Function()? informationCollector,
+    bool silent = false,
+  });
+}
+
+class FlutterError extends Error implements AssertionError {
+  static void reportError(FlutterErrorDetails details) {}
+}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/change_notifier.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/change_notifier.dart
new file mode 100644
index 0000000..91f3b81
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/change_notifier.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final foundationChangeNotifierLibrary = MockLibraryUnit(
+  'lib/src/foundation/change_notifier.dart',
+  r'''
+abstract class Listenable {}
+
+abstract class ValueListenable<T> extends Listenable {}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/constants.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/constants.dart
new file mode 100644
index 0000000..51a178c
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/constants.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final foundationConstantsLibrary = MockLibraryUnit(
+  'lib/src/foundation/constants.dart',
+  r'''
+const bool kDebugMode = false;
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/diagnostics.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/diagnostics.dart
new file mode 100644
index 0000000..5b05a01
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/diagnostics.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final foundationDiagnosticsLibrary = MockLibraryUnit(
+  'lib/src/foundation/diagnostics.dart',
+  r'''
+mixin Diagnosticable {
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+
+abstract class DiagnosticableTree with Diagnosticable {
+  const DiagnosticableTree();
+
+  List<DiagnosticsNode> debugDescribeChildren() => const [];
+}
+
+class DiagnosticPropertiesBuilder {
+  void add(DiagnosticsNode property) {}
+}
+
+abstract class DiagnosticsNode {}
+
+class DiagnosticsProperty<T> extends DiagnosticsNode {
+  DiagnosticsProperty(
+    String? name,
+    T? value, {
+    String? description,
+    String? ifNull,
+    String? ifEmpty,
+    super.showName,
+    super.showSeparator,
+    Object? defaultValue = kNoDefaultValue,
+    String? tooltip,
+    bool missingIfNull = false,
+    super.linePrefix,
+    bool expandableValue = false,
+    bool allowWrap = true,
+    bool allowNameWrap = true,
+    DiagnosticsTreeStyle super.style = DiagnosticsTreeStyle.singleLine,
+    DiagnosticLevel level = DiagnosticLevel.info,
+  });
+}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/key.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/key.dart
new file mode 100644
index 0000000..a1d5800
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/key.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final foundationKeyLibrary = MockLibraryUnit('lib/src/foundation/key.dart', r'''
+import 'package:meta/meta.dart';
+
+@immutable
+abstract class Key {
+  const factory Key(String value) = ValueKey<String>;
+
+  @protected
+  const Key.empty();
+}
+
+abstract class LocalKey extends Key {
+  const LocalKey() : super.empty();
+}
+
+class UniqueKey extends LocalKey {}
+
+class ValueKey<T> extends LocalKey {
+  final T value;
+
+  const ValueKey(this.value);
+}
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/print.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/print.dart
new file mode 100644
index 0000000..a2c7460
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/foundation/print.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final foundationPrintLibrary = MockLibraryUnit(
+  'lib/src/foundation/print.dart',
+  r'''
+typedef DebugPrintCallback = void Function(String? message, {int? wrapWidth});
+
+DebugPrintCallback debugPrint = (String? message, {int? wrapWidth}) {};
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/widget_previews.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/widget_previews.dart
new file mode 100644
index 0000000..aa9b9c4
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/widget_previews.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+import 'widget_previews/widget_previews.dart';
+
+/// The set of compilation units that make up the mock 'widget_previews' package.
+final List<MockLibraryUnit> units = [
+  _widgetPreviewsLibrary,
+  widgetPreviewsWidgetPreviewsLibrary,
+];
+
+final _widgetPreviewsLibrary = MockLibraryUnit('lib/widget_previews.dart', r'''
+export 'src/widget_previews/widget_previews.dart';
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/flutter/widget_previews/widget_previews.dart b/pkg/analyzer_testing/lib/src/mock_packages/flutter/widget_previews/widget_previews.dart
new file mode 100644
index 0000000..56043d3
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/flutter/widget_previews/widget_previews.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final widgetPreviewsWidgetPreviewsLibrary = MockLibraryUnit(
+  'lib/src/widget_previews/widget_previews.dart',
+  r'''
+import 'package:flutter/material.dart' show Brightness;
+import 'package:flutter/widgets.dart';
+
+base class Preview {
+  const Preview({
+    this.name,
+    Size? size,
+    this.textScaleFactor,
+    this.wrapper,
+    this.theme,
+    this.brightness,
+  });
+
+  final String? name;
+
+  final double? textScaleFactor;
+
+  final Widget Function(Widget)? wrapper;
+
+  final PreviewThemeData Function()? theme;
+
+  final Brightness? brightness;
+}
+
+base class PreviewThemeData {}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/meta/meta.dart b/pkg/analyzer_testing/lib/src/mock_packages/meta/meta.dart
new file mode 100644
index 0000000..8975f80
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/meta/meta.dart
@@ -0,0 +1,250 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+import 'meta_meta.dart';
+
+/// The set of compilation units that make up the mock 'meta' package.
+final List<MockLibraryUnit> units = [_metaUnit, metaMetaUnit];
+
+final _metaUnit = MockLibraryUnit('lib/meta.dart', r'''
+library meta;
+
+import 'meta_meta.dart';
+
+@Deprecated("Use a return type of 'Never' instead")
+const _AlwaysThrows alwaysThrows = _AlwaysThrows();
+
+const _AwaitNotRequired awaitNotRequired = _AwaitNotRequired();
+
+@Deprecated('Use the `covariant` modifier instead')
+const _Checked checked = _Checked();
+
+const _DoNotStore doNotStore = _DoNotStore();
+
+const _DoNotSubmit doNotSubmit = _DoNotSubmit();
+
+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();
+
+@experimental
+const _MustBeConst mustBeConst = _MustBeConst();
+
+const _MustBeOverridden mustBeOverridden = _MustBeOverridden();
+
+const _MustCallSuper mustCallSuper = _MustCallSuper();
+
+const _NonVirtual nonVirtual = _NonVirtual();
+
+const _OptionalTypeArgs optionalTypeArgs = _OptionalTypeArgs();
+
+const _Protected protected = _Protected();
+
+const _Redeclare redeclare = _Redeclare();
+
+const _Reopen reopen = _Reopen();
+
+@Deprecated(
+  'In Dart 2.12 and later, use the built-in `required` keyword to mark a '
+  'named parameter as required.',
+)
+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();
+
+@Target({TargetKind.classType, TargetKind.extensionType, TargetKind.mixinType})
+class Immutable {
+  final String reason;
+
+  const Immutable([this.reason = '']);
+}
+
+@experimental
+class RecordUse {
+  const RecordUse();
+}
+
+@Deprecated(
+  'In Dart 2.12 and later, use the built-in `required` keyword to mark a '
+  'named parameter as required.',
+)
+class Required {
+  final String reason;
+
+  const Required([this.reason = '']);
+}
+
+@Target({
+  TargetKind.constructor,
+  TargetKind.field,
+  TargetKind.function,
+  TargetKind.getter,
+  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();
+}
+
+@Target({
+  TargetKind.constructor,
+  TargetKind.field,
+  TargetKind.function,
+  TargetKind.getter,
+  TargetKind.method,
+  TargetKind.topLevelVariable,
+})
+class _AwaitNotRequired {
+  const _AwaitNotRequired();
+}
+
+class _Checked {
+  const _Checked();
+}
+
+@Target({
+  TargetKind.classType,
+  TargetKind.constructor,
+  TargetKind.function,
+  TargetKind.getter,
+  TargetKind.library,
+  TargetKind.method,
+  TargetKind.mixinType,
+})
+class _DoNotStore {
+  const _DoNotStore();
+}
+
+@Target({
+  TargetKind.constructor,
+  TargetKind.function,
+  TargetKind.getter,
+  TargetKind.method,
+  TargetKind.optionalParameter,
+  TargetKind.setter,
+  TargetKind.topLevelVariable,
+})
+class _DoNotSubmit {
+  const _DoNotSubmit();
+}
+
+class _Experimental {
+  const _Experimental();
+}
+
+@Target({TargetKind.method})
+class _Factory {
+  const _Factory();
+}
+
+class _Internal {
+  const _Internal();
+}
+
+class _IsTest {
+  const _IsTest();
+}
+
+class _IsTestGroup {
+  const _IsTestGroup();
+}
+
+class _Literal {
+  const _Literal();
+}
+
+@Target({TargetKind.parameter, TargetKind.extensionType})
+class _MustBeConst {
+  const _MustBeConst();
+}
+
+@Target({TargetKind.overridableMember})
+class _MustBeOverridden {
+  const _MustBeOverridden();
+}
+
+@Target({TargetKind.overridableMember})
+class _MustCallSuper {
+  const _MustCallSuper();
+}
+
+class _NonVirtual {
+  const _NonVirtual();
+}
+
+@Target({
+  TargetKind.classType,
+  TargetKind.extension,
+  TargetKind.extensionType,
+  TargetKind.function,
+  TargetKind.method,
+  TargetKind.mixinType,
+  TargetKind.typedefType,
+})
+class _OptionalTypeArgs {
+  const _OptionalTypeArgs();
+}
+
+class _Protected {
+  const _Protected();
+}
+
+@Target({TargetKind.getter, TargetKind.setter, TargetKind.method})
+class _Redeclare {
+  const _Redeclare();
+}
+
+@Target({TargetKind.classType, TargetKind.mixinType})
+class _Reopen {
+  const _Reopen();
+}
+
+@Target({TargetKind.classType})
+class _Sealed {
+  const _Sealed();
+}
+
+@Deprecated('No longer has meaning')
+class _Virtual {
+  const _Virtual();
+}
+
+class _VisibleForOverriding {
+  const _VisibleForOverriding();
+}
+
+class _VisibleForTesting {
+  const _VisibleForTesting();
+}
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/meta/meta_meta.dart b/pkg/analyzer_testing/lib/src/mock_packages/meta/meta_meta.dart
new file mode 100644
index 0000000..e63e46b
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/meta/meta_meta.dart
@@ -0,0 +1,105 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+final metaMetaUnit = MockLibraryUnit('lib/meta_meta.dart', r'''
+library meta_meta;
+
+@Target({TargetKind.classType})
+class Target {
+  final Set<TargetKind> kinds;
+
+  const Target(this.kinds);
+}
+
+class TargetKind {
+  static const classType = TargetKind._('classes', 'classType');
+
+  static const constructor = TargetKind._('constructors', 'constructor');
+
+  static const directive = TargetKind._('directives', 'directive');
+
+  static const enumType = TargetKind._('enums', 'enumType');
+
+  static const enumValue = TargetKind._('enum values', 'enumValue');
+
+  static const extension = TargetKind._('extensions', 'extension');
+
+  static const extensionType = TargetKind._('extension types', 'extensionType');
+
+  static const field = TargetKind._('fields', 'field');
+
+  static const function = TargetKind._('top-level functions', 'function');
+
+  static const library = TargetKind._('libraries', 'library');
+
+  static const getter = TargetKind._('getters', 'getter');
+
+  static const method = TargetKind._('methods', 'method');
+
+  static const mixinType = TargetKind._('mixins', 'mixinType');
+
+  static const optionalParameter = TargetKind._(
+    'optional parameters',
+    'optionalParameter',
+  );
+
+  static const overridableMember = TargetKind._(
+    'overridable members',
+    'overridableMember',
+  );
+
+  static const parameter = TargetKind._('parameters', 'parameter');
+
+  static const setter = TargetKind._('setters', 'setter');
+
+  static const topLevelVariable = TargetKind._(
+    'top-level variables',
+    'topLevelVariable',
+  );
+
+  static const type = TargetKind._(
+    'types (classes, enums, mixins, or typedefs)',
+    'type',
+  );
+
+  static const typedefType = TargetKind._('typedefs', 'typedefType');
+
+  static const typeParameter = TargetKind._('type parameters', 'typeParameter');
+
+  static const values = [
+    classType,
+    constructor,
+    directive,
+    enumType,
+    enumValue,
+    extension,
+    extensionType,
+    field,
+    function,
+    library,
+    getter,
+    method,
+    mixinType,
+    optionalParameter,
+    overridableMember,
+    parameter,
+    setter,
+    topLevelVariable,
+    type,
+    typedefType,
+    typeParameter,
+  ];
+
+  final String displayString;
+
+  final String name;
+
+  const TargetKind._(this.displayString, this.name);
+  int get index => throw 0;
+  @override
+  String toString() => throw 0;
+}
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/mock_library.dart b/pkg/analyzer_testing/lib/src/mock_packages/mock_library.dart
new file mode 100644
index 0000000..68444d9
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/mock_library.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 MockLibraryUnit {
+  /// The relative path of this compilation unit, relative to the package root.
+  ///
+  /// Typically, this will start with 'lib/'.
+  final String path;
+
+  /// The source content of the compilation unit.
+  final String content;
+
+  MockLibraryUnit(this.path, this.content);
+}
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/test_reflective_loader/test_reflective_loader.dart b/pkg/analyzer_testing/lib/src/mock_packages/test_reflective_loader/test_reflective_loader.dart
new file mode 100644
index 0000000..2d9162a
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/test_reflective_loader/test_reflective_loader.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+/// The set of compilation units that make up the mock 'test_reflective_loader'
+/// package.
+final List<MockLibraryUnit> units = [_testReflectiveLoaderUnit];
+
+final _testReflectiveLoaderUnit = MockLibraryUnit(
+  'lib/test_reflective_loader.dart',
+  r'''
+library test_reflective_loader;
+
+const Object reflectiveTest = _ReflectiveTest();
+
+const Object skippedTest = SkippedTest();
+
+const Object soloTest = _SoloTest();
+
+class SkippedTest {
+  const SkippedTest({String? issue, String? reason});
+}
+
+class _ReflectiveTest {
+  const _ReflectiveTest();
+}
+
+class _SoloTest {
+  const _SoloTest();
+}
+''',
+);
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/ui/ui.dart b/pkg/analyzer_testing/lib/src/mock_packages/ui/ui.dart
new file mode 100644
index 0000000..7b45c71
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/ui/ui.dart
@@ -0,0 +1,209 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+/// The set of compilation units that make up the mock 'ui' package.
+final List<MockLibraryUnit> units = [_uiLibrary];
+
+final _uiLibrary = MockLibraryUnit('lib/ui.dart', r'''
+library dart.ui;
+
+class Radius {
+  static const Radius zero = Radius.circular(0.0);
+
+  final double x;
+
+  final double y;
+
+  const Radius.circular(double radius) : this.elliptical(radius, radius);
+
+  const Radius.elliptical(this.x, this.y);
+}
+
+enum BlendMode {
+  clear,
+  src,
+  dst,
+  srcOver,
+  dstOver,
+  srcIn,
+  dstIn,
+  srcOut,
+  dstOut,
+  srcATop,
+  dstATop,
+  xor,
+  plus,
+  modulate,
+  screen,
+  overlay,
+  darken,
+  lighten,
+  colorDodge,
+  colorBurn,
+  hardLight,
+  softLight,
+  difference,
+  exclusion,
+  multiply,
+  hue,
+  saturation,
+  color,
+  luminosity,
+}
+
+class Color {
+  final double a;
+
+  final double r;
+
+  final double g;
+
+  final double b;
+
+  final ColorSpace colorSpace;
+
+  const Color(int value)
+    : this._fromARGBC(
+        value >> 24,
+        value >> 16,
+        value >> 8,
+        value,
+        ColorSpace.sRGB,
+      );
+
+  const Color.from({
+    required double alpha,
+    required double red,
+    required double green,
+    required double blue,
+    this.colorSpace = ColorSpace.sRGB,
+  }) : a = alpha,
+       r = red,
+       g = green,
+       b = blue;
+
+  const Color.fromARGB(int a, int r, int g, int b)
+    : this._fromARGBC(a, r, g, b, ColorSpace.sRGB);
+
+  const Color.fromRGBO(int r, int g, int b, double opacity)
+    : this._fromRGBOC(r, g, b, opacity, ColorSpace.sRGB);
+
+  const Color._fromARGBC(
+    int alpha,
+    int red,
+    int green,
+    int blue,
+    ColorSpace colorSpace,
+  ) : this._fromRGBOC(red, green, blue, (alpha & 0xff) / 255, colorSpace);
+
+  const Color._fromRGBOC(int r, int g, int b, double opacity, this.colorSpace)
+    : a = opacity,
+      r = (r & 0xff) / 255,
+      g = (g & 0xff) / 255,
+      b = (b & 0xff) / 255;
+
+  @Deprecated('Use (*.a * 255.0).round() & 0xff')
+  int get alpha => throw 0;
+
+  @Deprecated('Use (*.b * 255.0).round() & 0xff')
+  int get blue => throw 0;
+
+  @Deprecated('Use (*.g * 255.0).round() & 0xff')
+  int get green => throw 0;
+
+  @override
+  int get hashCode => throw 0;
+
+  @Deprecated('Use .a.')
+  double get opacity => throw 0;
+
+  @Deprecated('Use (*.r * 255.0).round() & 0xff')
+  int get red => throw 0;
+
+  @Deprecated(
+    'Use component accessors like .r or .g, or toARGB32 for an explicit conversion',
+  )
+  int get value => throw 0;
+
+  @override
+  bool operator ==(Object other) => throw 0;
+
+  @override
+  String toString() => throw 0;
+
+  Color withAlpha(int a) => throw 0;
+
+  Color withBlue(int b) => throw 0;
+
+  Color withGreen(int g) => throw 0;
+
+  @Deprecated('Use .withValues() to avoid precision loss.')
+  Color withOpacity(double opacity) => throw 0;
+
+  Color withRed(int r) => throw 0;
+
+  Color withValues({
+    double? alpha,
+    double? red,
+    double? green,
+    double? blue,
+    ColorSpace? colorSpace,
+  }) => throw 0;
+
+  static int _floatToInt8(double x) => throw 0;
+}
+
+enum FontStyle { normal, italic }
+
+class FontWeight {
+  static const FontWeight w100 = FontWeight._(0, 100);
+
+  static const FontWeight w200 = FontWeight._(1, 200);
+
+  static const FontWeight w300 = FontWeight._(2, 300);
+
+  static const FontWeight w400 = FontWeight._(3, 400);
+
+  static const FontWeight w500 = FontWeight._(4, 500);
+
+  static const FontWeight w600 = FontWeight._(5, 600);
+
+  static const FontWeight w700 = FontWeight._(6, 700);
+
+  static const FontWeight w800 = FontWeight._(7, 800);
+
+  static const FontWeight w900 = FontWeight._(8, 900);
+
+  static const FontWeight normal = w400;
+
+  static const FontWeight bold = w700;
+
+  static const List<FontWeight> values = <FontWeight>[
+    w100,
+    w200,
+    w300,
+    w400,
+    w500,
+    w600,
+    w700,
+    w800,
+    w900,
+  ];
+
+  final int index;
+
+  const FontWeight._(this.index, int value);
+
+  @override
+  String toString() => throw 0;
+}
+
+enum TextAlign { left, right, center, justify, start, end }
+
+enum TextBaseline { alphabetic, ideographic }
+
+enum TextDirection { rtl, ltr }
+''');
diff --git a/pkg/analyzer_testing/lib/src/mock_packages/vector_math/vector_math.dart b/pkg/analyzer_testing/lib/src/mock_packages/vector_math/vector_math.dart
new file mode 100644
index 0000000..ac4bb1d
--- /dev/null
+++ b/pkg/analyzer_testing/lib/src/mock_packages/vector_math/vector_math.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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_testing/src/mock_packages/mock_library.dart';
+
+/// The set of compilation units that make up the mock 'vector_math' package.
+final List<MockLibraryUnit> units = [_vectorMath64Unit, _matrix4Unit];
+
+final _matrix4Unit = MockLibraryUnit('lib/matrix4.dart', r'''
+part of 'vector_math_64.dart';
+
+class Matrix4 {}
+''');
+
+final _vectorMath64Unit = MockLibraryUnit('lib/vector_math_64.dart', r'''
+library vector_math_64;
+
+part 'matrix4.dart';
+''');
diff --git a/pkg/analyzer_testing/lib/utilities/utilities.dart b/pkg/analyzer_testing/lib/utilities/utilities.dart
index 1f58df4..8f16cdc 100644
--- a/pkg/analyzer_testing/lib/utilities/utilities.dart
+++ b/pkg/analyzer_testing/lib/utilities/utilities.dart
@@ -8,6 +8,7 @@
   List<String> includes = const [],
   List<String> experiments = const [],
   List<String> legacyPlugins = const [],
+  bool propagateLinterExceptions = true,
   List<String> rules = const [],
   Map<String, Object?> errors = const {},
   bool strictCasts = false,
@@ -30,7 +31,8 @@
       errors.isNotEmpty ||
       unignorableNames.isNotEmpty ||
       legacyPlugins.isNotEmpty ||
-      experiments.isNotEmpty) {
+      experiments.isNotEmpty ||
+      propagateLinterExceptions) {
     buffer.writeln('analyzer:');
   }
   if (experiments.isNotEmpty) {
@@ -74,6 +76,13 @@
     }
   }
 
+  if (propagateLinterExceptions) {
+    buffer.writeln('  optional-checks:');
+    buffer.writeln(
+      '    propagate-linter-exceptions: $propagateLinterExceptions',
+    );
+  }
+
   if (rules.isNotEmpty) {
     buffer.writeln('linter:');
     buffer.writeln('  rules:');
diff --git a/pkg/analyzer_testing/pubspec.yaml b/pkg/analyzer_testing/pubspec.yaml
index 9e20192..e69bdce 100644
--- a/pkg/analyzer_testing/pubspec.yaml
+++ b/pkg/analyzer_testing/pubspec.yaml
@@ -1,6 +1,6 @@
 name: analyzer_testing
 description: Testing utilities related to the analyzer and analysis_server_plugin packages.
-version: 0.1.7
+version: 0.1.8-dev
 repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer_testing
 
 environment:
@@ -11,7 +11,7 @@
 dependencies:
   # See the release policy for managing this dependency at
   # pkg/analyzer/doc/implementation/releasing.md.
-  analyzer: 9.0.0
+  analyzer: 10.0.0-dev
   meta: ^1.10.0
   path: ^1.9.0
   test: ^1.25.0
diff --git a/pkg/analyzer_utilities/lib/analyzer_message_constant_style.dart b/pkg/analyzer_utilities/lib/analyzer_message_constant_style.dart
new file mode 100644
index 0000000..960d8a2
--- /dev/null
+++ b/pkg/analyzer_utilities/lib/analyzer_message_constant_style.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Encapsulates information about how to generate an analyzer diagnostic
+/// message constant, including the style of constant to generate (e.g. with
+/// arguments or without) and the classes that should be referenced by the
+/// generated code.
+sealed class ConstantStyle {
+  /// The concrete class name that should be used to construct the constant.
+  final String concreteClassName;
+
+  /// The static type of the constant that should be generated.
+  final String staticType;
+
+  ConstantStyle({required this.concreteClassName, required this.staticType});
+}
+
+/// [ConstantStyle] object indicating that an "old style" constant should be
+/// generated (one that does not support the new analyzer literate API for
+/// constants).
+// TODO(paulberry): finish supporting the literate API in all analyzer messages
+// and eliminate this.
+class OldConstantStyle extends ConstantStyle {
+  OldConstantStyle({
+    required super.concreteClassName,
+    required super.staticType,
+  });
+}
+
+/// [ConstantStyle] object indicating that a constant should be generated that
+/// supports a `.withArguments` getter.
+class WithArgumentsConstantStyle extends ConstantStyle {
+  /// The parameters that should be accepted by the `.withArguments` getter.
+  final String withArgumentsParams;
+
+  WithArgumentsConstantStyle({
+    required super.concreteClassName,
+    required super.staticType,
+    required this.withArgumentsParams,
+  });
+}
+
+/// [ConstantStyle] object indicating that a constant should be generated that
+/// doesn't require any arguments.
+class WithoutArgumentsConstantStyle extends ConstantStyle {
+  WithoutArgumentsConstantStyle({
+    required super.concreteClassName,
+    required super.staticType,
+  });
+}
diff --git a/pkg/analyzer_utilities/lib/analyzer_messages.dart b/pkg/analyzer_utilities/lib/analyzer_messages.dart
index 7dcfc8e3..4e488c6 100644
--- a/pkg/analyzer_utilities/lib/analyzer_messages.dart
+++ b/pkg/analyzer_utilities/lib/analyzer_messages.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.
 
+/// @docImport 'package:_fe_analyzer_shared/src/base/errors.dart';
+library;
+
 import 'dart:convert';
 import 'dart:io';
 
 import 'package:analyzer_testing/package_root.dart' as pkg_root;
+import 'package:analyzer_utilities/analyzer_message_constant_style.dart';
+import 'package:analyzer_utilities/extensions/string.dart';
+import 'package:analyzer_utilities/located_error.dart';
 import 'package:analyzer_utilities/messages.dart';
 import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
-import 'package:yaml/yaml.dart' show YamlMap, YamlScalar, loadYamlNode;
+import 'package:yaml/yaml.dart'
+    show YamlMap, YamlScalar, loadYamlNode, YamlNode;
 
-const codesFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/error/codes.g.dart',
-  parentLibrary: 'package:analyzer/src/error/codes.dart',
+/// Base diagnostic classes used for analyzer messages.
+const analyzerBaseClasses = DiagnosticBaseClasses(
+  requiresTypeArgument: true,
+  withArgumentsClass: 'DiagnosticWithArguments',
+  withExpectedTypesClass: 'DiagnosticCodeWithExpectedTypes',
+  withoutArgumentsClass: 'DiagnosticWithoutArguments',
+  withoutArgumentsImplClass: 'DiagnosticWithoutArgumentsImpl',
 );
 
 /// Information about all the classes derived from `DiagnosticCode` that are
@@ -23,78 +34,58 @@
 /// Note: to look up an error class by name, use [DiagnosticClassInfo.byName].
 const List<DiagnosticClassInfo> diagnosticClasses = [
   linterLintCodeInfo,
-  GeneratedDiagnosticClassInfo(
-    file: optionCodesFile,
+  DiagnosticClassInfo(
     name: 'AnalysisOptionsErrorCode',
-    type: 'COMPILE_TIME_ERROR',
+    type: AnalyzerDiagnosticType.compileTimeError,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: optionCodesFile,
+  DiagnosticClassInfo(
     name: 'AnalysisOptionsWarningCode',
-    type: 'STATIC_WARNING',
+    type: AnalyzerDiagnosticType.staticWarning,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: codesFile,
+  DiagnosticClassInfo(
     name: 'CompileTimeErrorCode',
-    type: 'COMPILE_TIME_ERROR',
+    type: AnalyzerDiagnosticType.compileTimeError,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: syntacticErrorsFile,
+  DiagnosticClassInfo(
     name: 'ScannerErrorCode',
-    type: 'SYNTACTIC_ERROR',
+    type: AnalyzerDiagnosticType.syntacticError,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: codesFile,
+  DiagnosticClassInfo(
     name: 'StaticWarningCode',
-    type: 'STATIC_WARNING',
+    type: AnalyzerDiagnosticType.staticWarning,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: codesFile,
+  DiagnosticClassInfo(
     name: 'WarningCode',
-    type: 'STATIC_WARNING',
+    type: AnalyzerDiagnosticType.staticWarning,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: ffiCodesFile,
+  DiagnosticClassInfo(
     name: 'FfiCode',
-    type: 'COMPILE_TIME_ERROR',
+    type: AnalyzerDiagnosticType.compileTimeError,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: hintCodesFile,
-    name: 'HintCode',
-    type: 'HINT',
-  ),
-  GeneratedDiagnosticClassInfo(
-    file: syntacticErrorsFile,
+  DiagnosticClassInfo(name: 'HintCode', type: AnalyzerDiagnosticType.hint),
+  DiagnosticClassInfo(
     name: 'ParserErrorCode',
-    type: 'SYNTACTIC_ERROR',
-    deprecatedSnakeCaseNames: {
-      'UNEXPECTED_TOKEN', // Referenced by `package:dart_style`.
-    },
+    type: AnalyzerDiagnosticType.syntacticError,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: manifestWarningCodeFile,
+  DiagnosticClassInfo(
     name: 'ManifestWarningCode',
-    type: 'STATIC_WARNING',
+    type: AnalyzerDiagnosticType.staticWarning,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: pubspecWarningCodeFile,
+  DiagnosticClassInfo(
     name: 'PubspecWarningCode',
-    type: 'STATIC_WARNING',
+    type: AnalyzerDiagnosticType.staticWarning,
   ),
-  GeneratedDiagnosticClassInfo(
-    file: todoCodesFile,
+  DiagnosticClassInfo(
     name: 'TodoCode',
-    type: 'TODO',
+    type: AnalyzerDiagnosticType.todo,
     comment: '''
 The error code indicating a marker in code for work that needs to be finished
 or revisited.
 ''',
   ),
-  GeneratedDiagnosticClassInfo(
-    file: transformSetErrorCodeFile,
+  DiagnosticClassInfo(
     name: 'TransformSetErrorCode',
-    type: 'COMPILE_TIME_ERROR',
-    package: AnalyzerDiagnosticPackage.analysisServer,
+    type: AnalyzerDiagnosticType.compileTimeError,
     comment: '''
 An error code representing a problem in a file containing an encoding of a
 transform set.
@@ -102,69 +93,35 @@
   ),
 ];
 
-const ffiCodesFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/dart/error/ffi_code.g.dart',
-  parentLibrary: 'package:analyzer/src/dart/error/ffi_code.dart',
+/// Base diagnostic classes used for lint messages.
+const linterBaseClasses = DiagnosticBaseClasses(
+  requiresTypeArgument: false,
+  withArgumentsClass: 'LinterLintTemplate',
+  withExpectedTypesClass: 'LinterLintCode',
+  withoutArgumentsClass: 'LinterLintWithoutArguments',
+  withoutArgumentsImplClass: 'LinterLintWithoutArguments',
 );
 
-const String generatedLintCodesPath = 'linter/lib/src/lint_codes.g.dart';
-
-const hintCodesFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/dart/error/hint_codes.g.dart',
-  parentLibrary: 'package:analyzer/src/dart/error/hint_codes.dart',
-);
-
-const lintCodesFile = GeneratedDiagnosticFile(
-  path: generatedLintCodesPath,
-  parentLibrary: 'package:linter/src/lint_codes.dart',
-);
-
-const linterLintCodeInfo = GeneratedDiagnosticClassInfo(
-  file: lintCodesFile,
+const linterLintCodeInfo = DiagnosticClassInfo(
   name: 'LinterLintCode',
-  type: 'LINT',
-  package: AnalyzerDiagnosticPackage.linter,
+  type: AnalyzerDiagnosticType.lint,
 );
 
-const manifestWarningCodeFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/manifest/manifest_warning_code.g.dart',
-  parentLibrary: 'package:analyzer/src/manifest/manifest_warning_code.dart',
+/// Decoded messages from the analysis server's `messages.yaml` file.
+final List<AnalyzerMessage> analysisServerMessages = decodeAnalyzerMessagesYaml(
+  analysisServerPkgPath,
+  package: AnalyzerDiagnosticPackage.analysisServer,
 );
 
-const optionCodesFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/analysis_options/error/option_codes.g.dart',
-  parentLibrary:
-      'package:analyzer/src/analysis_options/error/option_codes.dart',
-);
-
-const pubspecWarningCodeFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/pubspec/pubspec_warning_code.g.dart',
-  parentLibrary: 'package:analyzer/src/pubspec/pubspec_warning_code.dart',
-);
-
-const syntacticErrorsFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/dart/error/syntactic_errors.g.dart',
-  parentLibrary: 'package:analyzer/src/dart/error/syntactic_errors.dart',
-);
-
-const todoCodesFile = GeneratedDiagnosticFile(
-  path: 'analyzer/lib/src/dart/error/todo_codes.g.dart',
-  parentLibrary: 'package:analyzer/src/dart/error/todo_codes.dart',
-);
-
-const transformSetErrorCodeFile = GeneratedDiagnosticFile(
-  path:
-      'analysis_server/lib/src/services/correction/fix/data_driven/'
-      'transform_set_error_code.g.dart',
-  parentLibrary:
-      'package:analysis_server/src/services/correction/fix/data_driven/'
-      'transform_set_error_code.dart',
-  shouldIgnorePreferSingleQuotes: true,
+/// The path to the `analysis_server` package.
+final String analysisServerPkgPath = normalize(
+  join(pkg_root.packageRoot, 'analysis_server'),
 );
 
 /// Decoded messages from the analyzer's `messages.yaml` file.
 final List<AnalyzerMessage> analyzerMessages = decodeAnalyzerMessagesYaml(
   analyzerPkgPath,
+  package: AnalyzerDiagnosticPackage.analyzer,
 );
 
 /// The path to the `analyzer` package.
@@ -179,6 +136,7 @@
 final List<AnalyzerMessage> lintMessages = decodeAnalyzerMessagesYaml(
   linterPkgPath,
   allowLinterKeys: true,
+  package: AnalyzerDiagnosticPackage.linter,
 );
 
 /// Decodes a YAML object (in analyzer style `messages.yaml` format) into a list
@@ -189,6 +147,7 @@
 List<AnalyzerMessage> decodeAnalyzerMessagesYaml(
   String packagePath, {
   bool allowLinterKeys = false,
+  required AnalyzerDiagnosticPackage package,
 }) {
   var path = join(packagePath, 'messages.yaml');
   var yaml = loadYamlNode(
@@ -237,14 +196,12 @@
         key: keyNode,
         value: diagnosticValue,
         decoder: (messageYaml) {
-          var analyzerCode = AnalyzerCode(
-            diagnosticClass: DiagnosticClassInfo.byName(className),
-            snakeCaseName: diagnosticName,
-          );
+          var analyzerCode = AnalyzerCode(snakeCaseName: diagnosticName);
           return AnalyzerMessage(
             messageYaml,
             analyzerCode: analyzerCode,
             allowLinterKeys: allowLinterKeys,
+            package: package,
           );
         },
       );
@@ -325,18 +282,16 @@
     required this.aliasFor,
     required super.analyzerCode,
     required super.allowLinterKeys,
+    required super.package,
   }) : super._();
 
   String get aliasForClass => aliasFor.split('.').first;
 
   @override
-  void toAnalyzerCode({
-    String? sharedNameReference,
-    required MemberAccumulator memberAccumulator,
-  }) {
+  void toAnalyzerCode({required MemberAccumulator memberAccumulator}) {
     var constant = StringBuffer();
     outputConstantHeader(constant);
-    constant.writeln('  static const $aliasForClass $constantName =');
+    constant.writeln('const $aliasForClass $constantName =');
     constant.writeln('$aliasFor;');
     memberAccumulator.constants[constantName] = constant.toString();
   }
@@ -344,7 +299,113 @@
 
 /// Enum representing the packages into which analyzer diagnostics can be
 /// generated.
-enum AnalyzerDiagnosticPackage { analyzer, analysisServer, linter }
+enum AnalyzerDiagnosticPackage {
+  analyzer(
+    diagnosticPathPart: 'src/diagnostic/diagnostic',
+    dirName: 'analyzer',
+    permittedTypes: {
+      .compileTimeError,
+      .hint,
+      .staticWarning,
+      .syntacticError,
+      .todo,
+    },
+  ),
+  analysisServer(
+    diagnosticPathPart: 'src/diagnostic',
+    dirName: 'analysis_server',
+    permittedTypes: {.compileTimeError},
+    shouldIgnorePreferSingleQuotes: true,
+  ),
+  linter(
+    diagnosticPathPart: 'src/diagnostic',
+    dirName: 'linter',
+    permittedTypes: {.lint},
+    shouldIgnorePreferExpressionFunctionBodies: true,
+    shouldIgnorePreferSingleQuotes: true,
+  );
+
+  /// The name of the subdirectory of `pkg` containing this package.
+  final String dirName;
+
+  /// The part of the path to the generated `diagnostic.g.dart` file that
+  /// follows the package's `lib` directory and precedes `diagnostic.g.dart`.
+  ///
+  /// For example, if [dirName] is `linter` and [diagnosticPathPart] is
+  /// `src/diagnostic`, then the full path to the generated `diagnostic.g.dart`
+  /// file will be `pkg/linter/lib/src/diagnostic/diagnostic.g.dart`.
+  final String diagnosticPathPart;
+
+  /// The set of [AnalyzerDiagnosticType]s that may be used in this package.
+  final Set<AnalyzerDiagnosticType> permittedTypes;
+
+  /// Whether code generated in this package needs an "ignore" comment to ignore
+  /// the `prefer_expression_function_bodies` lint.
+  final bool shouldIgnorePreferExpressionFunctionBodies;
+
+  /// Whether code generated in this package needs an "ignore" comment to ignore
+  /// the `prefer_single_quotes` lint.
+  final bool shouldIgnorePreferSingleQuotes;
+
+  const AnalyzerDiagnosticPackage({
+    required this.diagnosticPathPart,
+    required this.dirName,
+    required this.permittedTypes,
+    this.shouldIgnorePreferExpressionFunctionBodies = false,
+    this.shouldIgnorePreferSingleQuotes = false,
+  });
+
+  void writeIgnoresTo(StringBuffer out) {
+    if (shouldIgnorePreferExpressionFunctionBodies) {
+      out.write('''
+
+// Code generation is easier if we don't have to decide whether to generate an
+// expression function body or a block function body.
+// ignore_for_file: prefer_expression_function_bodies
+''');
+    }
+    if (shouldIgnorePreferSingleQuotes) {
+      out.write('''
+
+// Code generation is easier using double quotes (since we can use json.convert
+// to quote strings).
+// ignore_for_file: prefer_single_quotes
+''');
+    }
+    out.write('''
+
+// Generated comments don't quite align with flutter style.
+// ignore_for_file: flutter_style_todos
+''');
+  }
+}
+
+/// Enum representing the possible values for the [DiagnosticType] class.
+///
+/// Code generation logic uses this enum rather than [DiagnosticType] to avoid
+/// introducing dependencies between the code generator and the generated code.
+enum AnalyzerDiagnosticType {
+  compileTimeError,
+  hint,
+  lint(baseClasses: linterBaseClasses),
+  staticWarning,
+  syntacticError,
+  todo;
+
+  static final Map<String, AnalyzerDiagnosticType> _stringToValue = {
+    for (var value in values) value.name: value,
+  };
+
+  /// Base classes used for messages of this type.
+  final DiagnosticBaseClasses baseClasses;
+
+  const AnalyzerDiagnosticType({this.baseClasses = analyzerBaseClasses});
+
+  /// The representation of this type in analyzer source code.
+  String get code => 'DiagnosticType.${name.toSnakeCase().toUpperCase()}';
+
+  static AnalyzerDiagnosticType? fromString(String s) => _stringToValue[s];
+}
 
 /// In-memory representation of diagnostic information obtained from the
 /// analyzer's `messages.yaml` file.
@@ -355,10 +416,17 @@
   @override
   final bool hasPublishedDocs;
 
+  @override
+  final AnalyzerDiagnosticPackage package;
+
+  @override
+  final AnalyzerDiagnosticType type;
+
   factory AnalyzerMessage(
     MessageYaml messageYaml, {
     required AnalyzerCode analyzerCode,
     required bool allowLinterKeys,
+    required AnalyzerDiagnosticPackage package,
   }) {
     if (messageYaml.getOptionalString('aliasFor') case var aliasFor?) {
       return AliasMessage(
@@ -366,12 +434,14 @@
         aliasFor: aliasFor,
         analyzerCode: analyzerCode,
         allowLinterKeys: allowLinterKeys,
+        package: package,
       );
     } else {
       return AnalyzerMessage._(
         messageYaml,
         analyzerCode: analyzerCode,
         allowLinterKeys: allowLinterKeys,
+        package: package,
       );
     }
   }
@@ -380,7 +450,12 @@
     MessageYaml messageYaml, {
     required this.analyzerCode,
     required bool allowLinterKeys,
+    required this.package,
   }) : hasPublishedDocs = messageYaml.getBool('hasPublishedDocs'),
+       type = messageYaml.get(
+         'type',
+         decode: MessageWithAnalyzerCode.decodeType,
+       ),
        super(messageYaml) {
     // Ignore extra keys related to analyzer example-based tests.
     messageYaml.allowExtraKeys({'experiment'});
@@ -391,11 +466,119 @@
   }
 }
 
+/// Description of the set of base messages classes used for a certain message
+/// type.
+class DiagnosticBaseClasses {
+  /// Whether the constructor argument `type` must be passed to constructors
+  /// when constructing messages of this type.
+  final bool requiresTypeArgument;
+
+  /// The name of the concrete class used for messages of this type that require
+  /// arguments.
+  final String withArgumentsClass;
+
+  /// The name of the concrete class used for messages of this type that require
+  /// arguments but don't yet support the literate API.
+  // TODO(paulberry): finish supporting the literate API in all analyzer
+  // messages and eliminate this.
+  final String withExpectedTypesClass;
+
+  /// The name of the abstract class used for messages of this type that do not
+  /// require arguments.
+  final String withoutArgumentsClass;
+
+  /// The name of the concrete class used for messages of this type that do not
+  /// require arguments.
+  final String withoutArgumentsImplClass;
+
+  const DiagnosticBaseClasses({
+    required this.requiresTypeArgument,
+    required this.withArgumentsClass,
+    required this.withExpectedTypesClass,
+    required this.withoutArgumentsClass,
+    required this.withoutArgumentsImplClass,
+  });
+}
+
+/// Information about a class derived from `DiagnosticCode`.
+class DiagnosticClassInfo {
+  static final Map<String, DiagnosticClassInfo> _diagnosticClassesByName = () {
+    var result = <String, DiagnosticClassInfo>{};
+    for (var info in diagnosticClasses) {
+      if (result.containsKey(info.name)) {
+        throw 'Duplicate diagnostic class name: ${json.encode(info.name)}';
+      }
+      result[info.name] = info;
+    }
+    return result;
+  }();
+
+  static String get _allDiagnosticClassNames =>
+      (_diagnosticClassesByName.keys.toList()..sort())
+          .map(json.encode)
+          .join(', ');
+
+  /// The name of this class.
+  final String name;
+
+  /// The type of diagnostics in this class.
+  final AnalyzerDiagnosticType type;
+
+  /// Documentation comment to generate for the diagnostic class.
+  ///
+  /// If no documentation comment is needed, this should be the empty string.
+  final String comment;
+
+  const DiagnosticClassInfo({
+    required this.name,
+    required this.type,
+    this.comment = '',
+  });
+
+  static DiagnosticClassInfo byName(String name) =>
+      _diagnosticClassesByName[name] ??
+      (throw 'No diagnostic class named ${json.encode(name)}. Possible names: '
+          '$_allDiagnosticClassNames');
+}
+
 /// Interface class for diagnostic messages that have an analyzer code, and thus
 /// can be reported by the analyzer.
 mixin MessageWithAnalyzerCode on Message {
-  late final GeneratedDiagnosticClassInfo diagnosticClassInfo =
-      analyzerCode.diagnosticClass as GeneratedDiagnosticClassInfo;
+  late ConstantStyle constantStyle = () {
+    var usesParameters = [problemMessage, correctionMessage].any(
+      (value) =>
+          value != null && value.any((part) => part is TemplateParameterPart),
+    );
+    var baseClasses = type.baseClasses;
+    if (parameters.isNotEmpty && !usesParameters) {
+      throw 'Error code declares parameters using a `parameters` entry, but '
+          "doesn't use them";
+    } else if (parameters.values.any((p) => !p.type.isSupportedByAnalyzer)) {
+      // Do not generate literate API yet.
+      return OldConstantStyle(
+        concreteClassName: baseClasses.withExpectedTypesClass,
+        staticType: 'DiagnosticCode',
+      );
+    } else if (parameters.isNotEmpty) {
+      // Parameters are present so generate a diagnostic template (with
+      // `.withArguments` support).
+      var withArgumentsParams = parameters.entries
+          .map((p) => 'required ${p.value.type.analyzerName} ${p.key}')
+          .join(', ');
+      var templateParameters =
+          '<LocatableDiagnostic Function({$withArgumentsParams})>';
+      return WithArgumentsConstantStyle(
+        concreteClassName: baseClasses.withArgumentsClass,
+        staticType: 'DiagnosticWithArguments$templateParameters',
+        withArgumentsParams: withArgumentsParams,
+      );
+    } else {
+      return WithoutArgumentsConstantStyle(
+        concreteClassName: baseClasses.withoutArgumentsImplClass,
+        staticType: baseClasses.withoutArgumentsClass,
+      );
+    }
+  }();
 
   /// The code used by the analyzer to refer to this diagnostic message.
   AnalyzerCode get analyzerCode;
@@ -410,6 +593,12 @@
   /// `null` if the YAML doesn't contain this information.
   bool get hasPublishedDocs;
 
+  /// The package into which this error code will be generated.
+  AnalyzerDiagnosticPackage get package;
+
+  /// The type of this diagnostic.
+  AnalyzerDiagnosticType get type;
+
   void outputConstantHeader(StringSink out) {
     out.write(toAnalyzerComments(indent: '  '));
     if (deprecatedMessage != null) {
@@ -421,63 +610,31 @@
   /// in the diagnostic class [className].
   ///
   /// [diagnosticCode] is the name of the diagnostic to be generated.
-  void toAnalyzerCode({
-    String? sharedNameReference,
-    required MemberAccumulator memberAccumulator,
-  }) {
+  void toAnalyzerCode({required MemberAccumulator memberAccumulator}) {
     var diagnosticCode = analyzerCode.snakeCaseName;
     var correctionMessage = this.correctionMessage;
-    var parameters = this.parameters;
-    var usesParameters = [problemMessage, correctionMessage].any(
-      (value) =>
-          value != null && value.any((part) => part is TemplateParameterPart),
-    );
-    String className;
-    String templateParameters = '';
     String? withArgumentsName;
-    if (parameters.isNotEmpty && !usesParameters) {
-      throw 'Error code declares parameters using a `parameters` entry, but '
-          "doesn't use them";
-    } else if (parameters.values.any((p) => !p.type.isSupportedByAnalyzer)) {
-      // Do not generate literate API yet.
-      className = diagnosticClassInfo.name;
-    } else if (parameters.isNotEmpty) {
-      // Parameters are present so generate a diagnostic template (with
-      // `.withArguments` support).
-      className = diagnosticClassInfo.templateName;
-      var withArgumentsParams = parameters.entries
-          .map((p) => 'required ${p.value.type.analyzerName} ${p.key}')
-          .join(', ');
+    var baseClasses = type.baseClasses;
+    var ConstantStyle(:concreteClassName, :staticType) = constantStyle;
+    if (constantStyle case WithArgumentsConstantStyle(
+      :var withArgumentsParams,
+    )) {
       var argumentNames = parameters.keys.join(', ');
       withArgumentsName = '_withArguments${analyzerCode.pascalCaseName}';
-      templateParameters =
-          '<LocatableDiagnostic Function({$withArgumentsParams})>';
-      var newIfNeeded = diagnosticClassInfo.file.shouldUseExplicitNewOrConst
-          ? 'new '
-          : '';
       memberAccumulator.staticMethods[withArgumentsName] =
           '''
-static LocatableDiagnostic $withArgumentsName({$withArgumentsParams}) {
-  return ${newIfNeeded}LocatableDiagnosticImpl(
-    ${diagnosticClassInfo.name}.$constantName, [$argumentNames]);
+LocatableDiagnostic $withArgumentsName({$withArgumentsParams}) {
+  return LocatableDiagnosticImpl(
+    ${analyzerCode.analyzerCodeReference}, [$argumentNames]);
 }''';
-    } else {
-      // Parameters are not present so generate a "withoutArguments" constant.
-      className = diagnosticClassInfo.withoutArgumentsName;
     }
 
     var constant = StringBuffer();
     outputConstantHeader(constant);
-    constant.writeln(
-      '  static const $className$templateParameters $constantName =',
-    );
-    if (diagnosticClassInfo.file.shouldUseExplicitNewOrConst) {
-      constant.writeln('const ');
-    }
-    constant.writeln('$className(');
-    constant.writeln(
-      'name: ${sharedNameReference ?? "'${sharedName ?? diagnosticCode}'"},',
-    );
+    constant.writeln('const $staticType $constantName =');
+    constant.writeln('$concreteClassName(');
+    var name = sharedName?.snakeCaseName ?? diagnosticCode;
+    constant.writeln("name: '$name',");
     var maxWidth = 80 - 8 /* indentation */ - 2 /* quotes */ - 1 /* comma */;
     var messageAsCode = convertTemplate(problemMessage);
     var messageLines = _splitText(
@@ -500,28 +657,17 @@
     if (isUnresolvedIdentifier) {
       constant.writeln('isUnresolvedIdentifier:true,');
     }
-    if (sharedName != null) {
-      constant.writeln("uniqueName: '$diagnosticCode',");
+    if (baseClasses.requiresTypeArgument) {
+      constant.writeln('type: ${type.code},');
     }
-    String uniqueName = analyzerCode.toString().replaceFirst(
-      'LinterLintCode.',
-      'LintCode.',
-    );
-    constant.writeln("uniqueNameCheck: '$uniqueName',");
+    String uniqueName = analyzerCode.snakeCaseName;
+    constant.writeln("uniqueName: '$uniqueName',");
     if (withArgumentsName != null) {
       constant.writeln('withArguments: $withArgumentsName,');
     }
     constant.writeln('expectedTypes: ${_computeExpectedTypes()},');
     constant.writeln(');');
     memberAccumulator.constants[constantName] = constant.toString();
-
-    if (diagnosticClassInfo.deprecatedSnakeCaseNames.contains(diagnosticCode)) {
-      memberAccumulator.constants[diagnosticCode] =
-          '''
-  @Deprecated("Please use $constantName")
-  static const ${diagnosticClassInfo.name} $diagnosticCode = $constantName;
-''';
-    }
   }
 
   /// Generates doc comments for this error code.
@@ -578,4 +724,11 @@
     // But we also need to escape `$`.
     return jsonEncoded.replaceAll(r'$', r'\$');
   }
+
+  static AnalyzerDiagnosticType decodeType(YamlNode node) => switch (node) {
+    YamlScalar(:String value) =>
+      AnalyzerDiagnosticType.fromString(value) ??
+          (throw 'Unknown analyzer diagnostic type'),
+    _ => throw 'Must be a bool',
+  };
 }
diff --git a/pkg/analyzer_utilities/lib/extensions/string.dart b/pkg/analyzer_utilities/lib/extensions/string.dart
index db526b1..816b6de 100644
--- a/pkg/analyzer_utilities/lib/extensions/string.dart
+++ b/pkg/analyzer_utilities/lib/extensions/string.dart
@@ -3,6 +3,16 @@
 // BSD-style license that can be found in the LICENSE file.
 
 extension StringExtension on String {
+  static final _toSnakeCaseRegExp = RegExp('_?[A-Z]');
+  static final _startsWithLowerCaseRegExp = RegExp('^[a-z]');
+
+  /// Returns `true` if the string is a `camelCase` string.
+  bool get isCamelCase {
+    if (contains('_')) return false;
+    if (_startsWithLowerCaseRegExp.matchAsPrefix(this) == null) return false;
+    return true;
+  }
+
   /// Converts `SCREAMING_SNAKE_CASE` or `snake_case` to `camelCase`.
   String toCamelCase() {
     var parts = toLowerCase().split('_');
@@ -51,4 +61,26 @@
     }
     return buffer.toString();
   }
+
+  /// Converts `camelCase` or `PascalCase` to `snake_case`
+  String toSnakeCase() {
+    var parts = <String>[];
+    var i = 0;
+    var wordStarts = _toSnakeCaseRegExp.allMatches(this);
+    for (var RegExpMatch(:start) in wordStarts) {
+      if (i < start) {
+        parts.add(substring(i, start).toLowerCase());
+        i = start;
+      }
+      if (this[i] == '_' && parts.isNotEmpty) {
+        // Avoid doubling up the `_`. This handles strings that are already in
+        // snake case like `foo_Bar` (which translates to `foo_bar`).
+        i++;
+      }
+    }
+    if (i < length) {
+      parts.add(substring(i).toLowerCase());
+    }
+    return parts.join('_');
+  }
 }
diff --git a/pkg/analyzer_utilities/lib/located_error.dart b/pkg/analyzer_utilities/lib/located_error.dart
new file mode 100644
index 0000000..8c3dc56
--- /dev/null
+++ b/pkg/analyzer_utilities/lib/located_error.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. 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:source_span/source_span.dart';
+
+/// An error with an associated source span.
+class LocatedError {
+  final SourceSpan span;
+  final String message;
+
+  LocatedError(this.message, {required this.span});
+
+  @override
+  String toString() => '${span.location}: $message';
+
+  /// Executes [callback], converting any exceptions it generates to a
+  /// [LocatedError] that points to [node].
+  static T wrap<T>(T Function() callback, {required SourceSpan span}) {
+    try {
+      return callback();
+    } catch (error, stackTrace) {
+      if (error is! LocatedError) {
+        Error.throwWithStackTrace(
+          LocatedError(error.toString(), span: span),
+          stackTrace,
+        );
+      } else {
+        rethrow;
+      }
+    }
+  }
+}
+
+extension SourceSpanLocation on SourceSpan {
+  /// A string suitable for identifying this span in the source YAML file.
+  String get location {
+    var path = start.sourceUrl?.toFilePath() ?? '<unknown>';
+    // Convert line/column to 1-based because that's what most editors expect
+    var line = start.line + 1;
+    var column = start.column + 1;
+    return '$path:$line:$column';
+  }
+}
diff --git a/pkg/analyzer_utilities/lib/messages.dart b/pkg/analyzer_utilities/lib/messages.dart
index 53de661..da4f59f 100644
--- a/pkg/analyzer_utilities/lib/messages.dart
+++ b/pkg/analyzer_utilities/lib/messages.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer_testing/package_root.dart' as pkg_root;
 import 'package:analyzer_utilities/analyzer_messages.dart';
 import 'package:analyzer_utilities/extensions/string.dart';
+import 'package:analyzer_utilities/located_error.dart';
 import 'package:collection/collection.dart';
 import 'package:path/path.dart';
 import 'package:source_span/source_span.dart';
@@ -33,6 +34,7 @@
   ...frontEndMessages,
   ...feAnalyzerSharedMessages,
   ...analyzerMessages,
+  ...analysisServerMessages,
   ...lintMessages,
 ]);
 
@@ -148,55 +150,44 @@
 /// This class implements [Comparable], so lists of it can be safely
 /// [List.sort]ed.
 class AnalyzerCode implements Comparable<AnalyzerCode> {
-  /// The class containing the constant for this diagnostic.
-  final DiagnosticClassInfo diagnosticClass;
-
   /// The diagnostic name.
   ///
   /// The diagnostic name is in "snake case", meaning it consists of words
   /// separated by underscores. Those words might be lower case or upper case.
   ///
   // TODO(paulberry): change `messages.yaml` to consistently use lower snake
-  // case.
+  // case, and remove [lowerSnakeCaseName].
   final String snakeCaseName;
 
-  AnalyzerCode({required this.diagnosticClass, required this.snakeCaseName});
+  AnalyzerCode({required this.snakeCaseName});
 
   /// The string that should be generated into analyzer source code to refer to
   /// this diagnostic code.
-  String get analyzerCodeReference =>
-      [diagnosticClass.name, camelCaseName].join('.');
+  String get analyzerCodeReference => ['diag', camelCaseName].join('.');
 
   /// The diagnostic name, converted to camel case.
   String get camelCaseName => snakeCaseName.toCamelCase();
 
   @override
-  int get hashCode => Object.hash(diagnosticClass, snakeCaseName);
+  int get hashCode => snakeCaseName.hashCode;
+
+  /// The diagnostic name, converted to lower snake case.
+  String get lowerSnakeCaseName => snakeCaseName.toLowerCase();
 
   /// The diagnostic name, converted to PascalCase.
   String get pascalCaseName => snakeCaseName.toPascalCase();
 
   @override
   bool operator ==(Object other) =>
-      other is AnalyzerCode &&
-      diagnosticClass == other.diagnosticClass &&
-      snakeCaseName == other.snakeCaseName;
+      other is AnalyzerCode && snakeCaseName == other.snakeCaseName;
 
   @override
   int compareTo(AnalyzerCode other) {
-    // Compare the diagnostic classes by name. This works because we know that
-    // the diagnostic classes are unique (this is verified by the
-    // `DiagnosticClassInfo.byName` method).
-    var className = diagnosticClass.name;
-    var otherClassName = other.diagnosticClass.name;
-    if (className.compareTo(otherClassName) case var result when result != 0) {
-      return result;
-    }
     return snakeCaseName.compareTo(other.snakeCaseName);
   }
 
   @override
-  String toString() => [diagnosticClass.name, snakeCaseName].join('.');
+  String toString() => snakeCaseName;
 }
 
 /// In-memory representation of diagnostic information obtained from a
@@ -260,35 +251,6 @@
   String? toCode({required String name, required DiagnosticParameterType type});
 }
 
-/// Information about a class derived from `DiagnosticCode`.
-class DiagnosticClassInfo {
-  static final Map<String, DiagnosticClassInfo> _diagnosticClassesByName = () {
-    var result = <String, DiagnosticClassInfo>{};
-    for (var info in diagnosticClasses) {
-      if (result.containsKey(info.name)) {
-        throw 'Duplicate diagnostic class name: ${json.encode(info.name)}';
-      }
-      result[info.name] = info;
-    }
-    return result;
-  }();
-
-  static String get _allDiagnosticClassNames =>
-      (_diagnosticClassesByName.keys.toList()..sort())
-          .map(json.encode)
-          .join(', ');
-
-  /// The name of this class.
-  final String name;
-
-  const DiagnosticClassInfo({required this.name});
-
-  static DiagnosticClassInfo byName(String name) =>
-      _diagnosticClassesByName[name] ??
-      (throw 'No diagnostic class named ${json.encode(name)}. Possible names: '
-          '$_allDiagnosticClassNames');
-}
-
 /// In-memory representation of a single key/value pair from the `parameters`
 /// map for a diagnostic.
 class DiagnosticParameter {
@@ -431,7 +393,7 @@
 /// A set of tables derived from shared, CFE, analyzer, and linter diagnostics.
 class DiagnosticTables {
   /// List of shared diagnostics for which analyzer diagnostics should be
-  /// automatically generated, sorted by analyzer code.
+  /// automatically generated, sorted by [AnalyzerCode.camelCaseName].
   final List<SharedMessage> sortedSharedDiagnostics = [];
 
   /// List of front end diagnostics, sorted by front end code.
@@ -443,7 +405,7 @@
   /// A message is considered active is [MessageWithAnalyzerCode.isRemoved] is
   /// `false` and the message is not an [AliasMessage].
   ///
-  /// Each list is sorted by analyzer code.
+  /// Each list is sorted by [AnalyzerCode.camelCaseName].
   final Map<AnalyzerDiagnosticPackage, List<MessageWithAnalyzerCode>>
   activeMessagesByPackage = {};
 
@@ -473,18 +435,22 @@
         analyzerCodeDuplicateChecker[analyzerCode] = message;
         analyzerCodeCamelCaseNameDuplicateChecker[analyzerCode.camelCaseName] =
             message;
-        (analyzerSharedNameToMessages[message.sharedName ??
-                    analyzerCode.snakeCaseName] ??=
+        (analyzerSharedNameToMessages[(message.sharedName ?? analyzerCode)
+                    .snakeCaseName] ??=
                 [])
             .add(message);
-        var diagnosticClass = analyzerCode.diagnosticClass;
-        if (diagnosticClass is GeneratedDiagnosticClassInfo &&
-            !message.isRemoved &&
-            message is! AliasMessage) {
-          (activeMessagesByPackage[diagnosticClass.package] ??= []).add(
-            message,
+        var package = message.package;
+        var type = message.type;
+        if (!package.permittedTypes.contains(type)) {
+          throw LocatedError(
+            'Diagnostic type is ${type.name}, which may not be used in '
+            'package:${package.dirName}',
+            span: message.keySpan,
           );
         }
+        if (!message.isRemoved && message is! AliasMessage) {
+          (activeMessagesByPackage[package] ??= []).add(message);
+        }
       }
     }
 
@@ -496,7 +462,7 @@
     sortedSharedDiagnostics.sortBy((e) => e.analyzerCode.camelCaseName);
     sortedFrontEndDiagnostics.sortBy((e) => e.frontEndCode);
     for (var value in activeMessagesByPackage.values) {
-      value.sortBy((e) => e.analyzerCode);
+      value.sortBy((e) => e.analyzerCode.camelCaseName);
     }
   }
 
@@ -538,76 +504,6 @@
     : pseudoSharedCode = messageYaml.getOptionalString('pseudoSharedCode');
 }
 
-/// Information about a code generated class derived from `DiagnosticCode`.
-class GeneratedDiagnosticClassInfo extends DiagnosticClassInfo {
-  /// The generated file containing this class.
-  final GeneratedDiagnosticFile file;
-
-  /// The type of diagnostics in this class.
-  final String type;
-
-  /// The names of any diagnostics which are relied upon by analyzer clients,
-  /// and therefore will need their "snake case" form preserved (with a
-  /// deprecation notice) after migration to camel case diagnostic codes.
-  final Set<String> deprecatedSnakeCaseNames;
-
-  /// The package into which the diagnostic codes will be generated.
-  final AnalyzerDiagnosticPackage package;
-
-  /// Documentation comment to generate for the diagnostic class.
-  ///
-  /// If no documentation comment is needed, this should be the empty string.
-  final String comment;
-
-  const GeneratedDiagnosticClassInfo({
-    required this.file,
-    required super.name,
-    required this.type,
-    this.deprecatedSnakeCaseNames = const {},
-    this.package = AnalyzerDiagnosticPackage.analyzer,
-    this.comment = '',
-  });
-
-  String get templateName => '${_baseName}Template';
-
-  /// Generates the code to compute the type of diagnostics of this class.
-  String get typeCode => 'DiagnosticType.$type';
-
-  String get withoutArgumentsName => '${_baseName}WithoutArguments';
-
-  String get _baseName {
-    const suffix = 'Code';
-    if (name.endsWith(suffix)) {
-      return name.substring(0, name.length - suffix.length);
-    } else {
-      throw "Can't infer base name for class $name";
-    }
-  }
-}
-
-/// Representation of a single file containing generated diagnostics.
-class GeneratedDiagnosticFile {
-  /// The file path (relative to the SDK's `pkg` directory) of the generated
-  /// file.
-  final String path;
-
-  /// The URI of the library that the generated file will be a part of.
-  final String parentLibrary;
-
-  /// Whether the generated file should use the `new` and `const` keywords when
-  /// generating constructor invocations.
-  final bool shouldUseExplicitNewOrConst;
-
-  final bool shouldIgnorePreferSingleQuotes;
-
-  const GeneratedDiagnosticFile({
-    required this.path,
-    required this.parentLibrary,
-    this.shouldUseExplicitNewOrConst = false,
-    this.shouldIgnorePreferSingleQuotes = false,
-  });
-}
-
 /// A [Conversion] that makes use of the [TypeLabeler] class.
 class LabelerConversion implements Conversion {
   /// The name of the [TypeLabeler] method to call.
@@ -629,34 +525,6 @@
   }) => 'labeler.$methodName($name)';
 }
 
-/// An error with an associated source span.
-class LocatedError {
-  final SourceSpan span;
-  final String message;
-
-  LocatedError(this.message, {required this.span});
-
-  @override
-  String toString() => '${span.location}: $message';
-
-  /// Executes [callback], converting any exceptions it generates to a
-  /// [LocatedError] that points to [node].
-  static T wrap<T>(T Function() callback, {required SourceSpan span}) {
-    try {
-      return callback();
-    } catch (error, stackTrace) {
-      if (error is! LocatedError) {
-        Error.throwWithStackTrace(
-          LocatedError(error.toString(), span: span),
-          stackTrace,
-        );
-      } else {
-        rethrow;
-      }
-    }
-  }
-}
-
 /// In-memory representation of diagnostic information obtained from either the
 /// analyzer or the front end's `messages.yaml` file.  This class contains the
 /// common functionality supported by both formats.
@@ -688,7 +556,7 @@
   /// If present, indicates that this error code has a special name for
   /// presentation to the user, that is potentially shared with other error
   /// codes.
-  final String? sharedName;
+  final AnalyzerCode? sharedName;
 
   /// If present, indicates that this error code has been renamed from
   /// [previousName] to its current name (or [sharedName]).
@@ -733,7 +601,10 @@
             isRequired: requireProblemMessage,
           ) ??
           [],
-      sharedName = messageYaml.getOptionalString('sharedName'),
+      sharedName = switch (messageYaml.getOptionalString('sharedName')) {
+        var s? => AnalyzerCode(snakeCaseName: s),
+        null => null,
+      },
       removedIn = messageYaml.getOptionalString('removedIn'),
       previousName = messageYaml.getOptionalString('previousName'),
       parameters = messageYaml.parameters,
@@ -1055,23 +926,30 @@
   @override
   final bool hasPublishedDocs;
 
+  @override
+  final AnalyzerDiagnosticType type;
+
   SharedMessage(super.messageYaml)
     : analyzerCode = messageYaml.get(
         'analyzerCode',
         decode: _decodeAnalyzerCode,
       ),
-      hasPublishedDocs = messageYaml.getBool('hasPublishedDocs');
+      hasPublishedDocs = messageYaml.getBool('hasPublishedDocs'),
+      type = messageYaml.get(
+        'type',
+        decode: MessageWithAnalyzerCode.decodeType,
+      );
+
+  @override
+  AnalyzerDiagnosticPackage get package => AnalyzerDiagnosticPackage.analyzer;
 
   static AnalyzerCode _decodeAnalyzerCode(YamlNode node) {
     switch (node) {
       case YamlScalar(value: String s):
         switch (s.split('.')) {
-          case [var className, var snakeCaseName]
+          case [_, var snakeCaseName]
               when snakeCaseName == snakeCaseName.toUpperCase():
-            return AnalyzerCode(
-              diagnosticClass: DiagnosticClassInfo.byName(className),
-              snakeCaseName: snakeCaseName,
-            );
+            return AnalyzerCode(snakeCaseName: snakeCaseName);
         }
     }
     throw 'Analyzer codes must take the form ClassName.DIAGNOSTIC_NAME.';
@@ -1181,14 +1059,3 @@
     }
   }
 }
-
-extension SourceSpanLocation on SourceSpan {
-  /// A string suitable for identifying this span in the source YAML file.
-  String get location {
-    var path = start.sourceUrl?.toFilePath() ?? '<unknown>';
-    // Convert line/column to 1-based because that's what most editors expect
-    var line = start.line + 1;
-    var column = start.column + 1;
-    return '$path:$line:$column';
-  }
-}
diff --git a/pkg/analyzer_utilities/lib/tool/api.dart b/pkg/analyzer_utilities/lib/tool/api.dart
index 8e292d9..8f4be3c 100644
--- a/pkg/analyzer_utilities/lib/tool/api.dart
+++ b/pkg/analyzer_utilities/lib/tool/api.dart
@@ -663,7 +663,7 @@
 
   bool isInPublicApiOf(String packageName) {
     if (this case PropertyAccessorElement(
-      isSynthetic: true,
+      isOriginVariable: true,
       :var variable,
     ) when variable.isInPublicApiOf(packageName)) {
       return true;
diff --git a/pkg/analyzer_utilities/lib/verify_tests.dart b/pkg/analyzer_utilities/lib/verify_tests.dart
index 83b9500..e02aca8 100644
--- a/pkg/analyzer_utilities/lib/verify_tests.dart
+++ b/pkg/analyzer_utilities/lib/verify_tests.dart
@@ -160,17 +160,19 @@
         }
         for (var declaration in result.unit.declarations) {
           if (declaration is ClassDeclaration) {
-            for (var member in declaration.members) {
-              if (member is MethodDeclaration) {
-                var name = member.name.lexeme;
-                // Handle both 'solo_test_' and 'solo_fail_'.
-                if (name.startsWith('solo_')) {
-                  fail("Solo test: $name in '$testFilePath'");
-                }
-                for (var annotation in member.metadata) {
-                  if (annotation.name.name == 'soloTest') {
+            if (declaration.body case BlockClassBody body) {
+              for (var member in body.members) {
+                if (member is MethodDeclaration) {
+                  var name = member.name.lexeme;
+                  // Handle both 'solo_test_' and 'solo_fail_'.
+                  if (name.startsWith('solo_')) {
                     fail("Solo test: $name in '$testFilePath'");
                   }
+                  for (var annotation in member.metadata) {
+                    if (annotation.name.name == 'soloTest') {
+                      fail("Solo test: $name in '$testFilePath'");
+                    }
+                  }
                 }
               }
             }
diff --git a/pkg/analyzer_utilities/pubspec.yaml b/pkg/analyzer_utilities/pubspec.yaml
index d1a2779..67d3361 100644
--- a/pkg/analyzer_utilities/pubspec.yaml
+++ b/pkg/analyzer_utilities/pubspec.yaml
@@ -3,7 +3,7 @@
 publish_to: none
 
 environment:
-  sdk: ^3.9.0
+  sdk: ^3.10.0
 
 resolution: workspace
 
diff --git a/pkg/analyzer_utilities/test/extensions/string_test.dart b/pkg/analyzer_utilities/test/extensions/string_test.dart
index 6eda813..d27683a 100644
--- a/pkg/analyzer_utilities/test/extensions/string_test.dart
+++ b/pkg/analyzer_utilities/test/extensions/string_test.dart
@@ -18,6 +18,15 @@
 
 @reflectiveTest
 class StringExtensionTest {
+  void test_isCamelCase() {
+    expect('UPPER_CASE_WITH_UNDERSCORES'.isCamelCase, false);
+    expect('lower_case_with_underscores'.isCamelCase, false);
+    expect('camelCase'.isCamelCase, true);
+    expect('alllowercase'.isCamelCase, true);
+    expect('foo123Bar'.isCamelCase, true);
+    expect('123'.isCamelCase, false);
+  }
+
   void test_toCamelCase() {
     expect('CAMEL_CASE'.toCamelCase(), 'camelCase');
     expect('alreadyCamel_case'.toCamelCase(), 'alreadycamelCase');
@@ -41,4 +50,20 @@
     expect('FOO__BAR'.toPascalCase(), 'FooBar');
     expect('FOO_BAR_'.toPascalCase(), 'FooBar');
   }
+
+  void test_toSnakeCase() {
+    expect('camelCase'.toSnakeCase(), 'camel_case');
+    expect('PascalCase'.toSnakeCase(), 'pascal_case');
+    expect('already_snake_case'.toSnakeCase(), 'already_snake_case');
+    expect(
+      'mixedCamel_AndPascal_and_snake'.toSnakeCase(),
+      'mixed_camel_and_pascal_and_snake',
+    );
+    expect('with123Numbers'.toSnakeCase(), 'with123_numbers');
+    expect(''.toSnakeCase(), '');
+    expect(
+      'CONSECUTIVE_UPCASE'.toSnakeCase(),
+      'c_o_n_s_e_c_u_t_i_v_e_u_p_c_a_s_e',
+    );
+  }
 }
diff --git a/pkg/cfg/analysis_options.yaml b/pkg/cfg/analysis_options.yaml
index f2dd6ae..771ab79 100644
--- a/pkg/cfg/analysis_options.yaml
+++ b/pkg/cfg/analysis_options.yaml
@@ -3,3 +3,8 @@
 # BSD-style license that can be found in the LICENSE file.
 
 include: package:lints/core.yaml
+
+linter:
+  rules:
+    - omit_obvious_local_variable_types
+    - type_annotate_public_apis
diff --git a/pkg/cfg/lib/front_end/ast_to_ir.dart b/pkg/cfg/lib/front_end/ast_to_ir.dart
new file mode 100644
index 0000000..7793506
--- /dev/null
+++ b/pkg/cfg/lib/front_end/ast_to_ir.dart
@@ -0,0 +1,1291 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/front_end/ast_to_ir_types.dart';
+import 'package:cfg/front_end/recognized_methods.dart';
+import 'package:cfg/ir/constant_value.dart';
+import 'package:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/flow_graph_builder.dart';
+import 'package:cfg/ir/functions.dart';
+import 'package:cfg/ir/global_context.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/local_variable.dart';
+import 'package:cfg/ir/source_position.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:kernel/ast.dart' as ast;
+import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/type_environment.dart' show StaticTypeContext;
+
+/// Translates kernel AST to the flow graph.
+///
+/// Not implemented yet:
+///  - non-regular functions;
+///  - closures (including tear-offs and calls);
+///  - captured variables;
+///  - late variables;
+///  - stack overflow/interrupt checks;
+///  - assert statements;
+///  - async/async*/sync*/await/yield/yield*;
+///  - super invocations;
+///  - constructor invocations;
+///  - standalone logical expressions (||, &&, !);
+///  - null checks;
+///  - string concatenation;
+///  - list, set and map literals;
+///  - record access and literals;
+///  - let expressions;
+///  - deferred libraries.
+///
+class AstToIr extends ast.RecursiveVisitor {
+  final CFunction function;
+  final CoreTypes coreTypes;
+  final ClassHierarchy hierarchy;
+  final FunctionRegistry functionRegistry;
+  final RecognizedMethods recognizedMethods;
+  final FlowGraphBuilder builder;
+  final bool enableAsserts;
+  late final AstToIrTypes _typeTranslator;
+  late final LocalVariableIndexer localVarIndexer;
+  late final StaticTypeContext _staticTypeContext = StaticTypeContext(
+    function.member,
+    GlobalContext.instance.typeEnvironment,
+  );
+
+  Map<ast.LabeledStatement, JoinBlock>? labeledStatements;
+  Map<ast.SwitchCase, JoinBlock>? switchCases;
+  Map<ast.TryFinally, List<FinallyBlock>>? finallyBlocks;
+  TypeParameters? typeParameters;
+
+  AstToIr(
+    this.function,
+    this.functionRegistry,
+    this.recognizedMethods, {
+    required this.enableAsserts,
+  }) : coreTypes = GlobalContext.instance.coreTypes,
+       hierarchy = GlobalContext.instance.classHierarchy,
+       builder = FlowGraphBuilder(function) {
+    _typeTranslator = GlobalContext.instance.astToIrTypes;
+    localVarIndexer = LocalVariableIndexer(
+      builder,
+      coreTypes,
+      _typeTranslator,
+      function,
+    );
+  }
+
+  /// Create [FlowGraph] for the body of the [function].
+  FlowGraph buildFlowGraph() {
+    for (final param in localVarIndexer.parameters) {
+      builder.addParameter(param);
+    }
+    if (function.hasClassTypeParameters) {
+      builder.addLoadLocal(localVarIndexer.receiver);
+      typeParameters = builder.addTypeParameters(receiver: builder.pop());
+    } else if (function.hasFunctionTypeParameters) {
+      typeParameters = builder.addTypeParameters();
+    }
+    switch (function) {
+      case RegularFunction():
+        _translateNode(function.member.function?.body);
+        if (builder.hasOpenBlock) {
+          builder.addNullConstant();
+          builder.addReturn();
+        }
+      default:
+        throw 'Unimplemented';
+    }
+    return builder.done();
+  }
+
+  void _translateNode(ast.TreeNode? node) {
+    if (node == null) {
+      return;
+    }
+    if (!builder.hasOpenBlock) {
+      switch (node) {
+        case ast.Expression():
+          _handleUnreachableExpression(0);
+          return;
+        case ast.Statement():
+          return;
+        default:
+          throw 'Unexpected ${node.runtimeType} $node';
+      }
+    }
+    final savedSourcePosition = builder.currentSourcePosition;
+    builder.currentSourcePosition = SourcePosition(node.fileOffset);
+    node.accept(this);
+    builder.currentSourcePosition = savedSourcePosition;
+  }
+
+  void _translateNodes(List<ast.TreeNode> nodes) {
+    for (final node in nodes) {
+      _translateNode(node);
+    }
+  }
+
+  /// If this expression is unreachable, then maintain expression stack
+  /// balance without appending IR instructions and return `true`.
+  bool _handleUnreachableExpression(int inputCount) {
+    if (!builder.hasOpenBlock) {
+      builder.drop(inputCount);
+      builder.addNullConstant();
+      return true;
+    }
+    return false;
+  }
+
+  /// Translate [receiver] and [arguments] expressions.
+  /// Returns number of arguments pushed onto expression stack.
+  /// Use [_handleUnreachableExpression] after calling this method in case
+  /// any of the argument expressions ended control flow.
+  int _translateArguments(ast.Expression? receiver, ast.Arguments arguments) {
+    assert(builder.hasOpenBlock);
+    var inputCount = 0;
+    if (arguments.types.isNotEmpty) {
+      builder.addTypeArguments(
+        arguments.types,
+        typeParameters: _typeParametersForTypes(arguments.types),
+      );
+      ++inputCount;
+    }
+    if (receiver != null) {
+      _translateNode(receiver);
+      ++inputCount;
+    }
+    _translateNodes(arguments.positional);
+    inputCount += arguments.positional.length;
+    for (final namedExpr in arguments.named) {
+      _translateNode(namedExpr.value);
+    }
+    inputCount += arguments.named.length;
+    return inputCount;
+  }
+
+  CType _staticType(ast.Expression node) =>
+      _typeTranslator.translate(node.getStaticType(_staticTypeContext));
+
+  List<CType> _argumentTypes(ast.Expression? receiver, ast.Arguments args) => [
+    if (receiver != null) _staticType(receiver),
+    for (final arg in args.positional) _staticType(arg),
+    for (final arg in args.named) _staticType(arg.value),
+  ];
+
+  /// Joins control flow from the given [blocks].
+  ///
+  /// If [needNewJoinBlock], then the result is a new [JoinBlock] even
+  /// if there was only one block in [blocks].
+  Block _joinBlocks(List<Block> blocks, {bool needNewJoinBlock = false}) {
+    assert(blocks.isNotEmpty);
+    if (blocks.length == 1 && !needNewJoinBlock) {
+      return blocks.single;
+    }
+    final join = builder.newJoinBlock();
+    for (final block in blocks) {
+      assert(block.next == null);
+      builder.startBlock(block);
+      builder.addGoto(join);
+    }
+    return join;
+  }
+
+  /// Translates given [condition] and returns a pair of
+  /// (true blocks, false blocks).
+  (List<Block>, List<Block>) _translateConditionForControl(
+    ast.Expression condition,
+  ) {
+    switch (condition) {
+      case ast.Not():
+        var (trueBlocks, falseBlocks) = _translateConditionForControl(
+          condition.operand,
+        );
+        return (falseBlocks, trueBlocks);
+      case ast.LogicalExpression():
+        var (leftTrue, leftFalse) = _translateConditionForControl(
+          condition.left,
+        );
+        switch (condition.operatorEnum) {
+          case ast.LogicalExpressionOperator.AND:
+            if (leftTrue.isEmpty) {
+              return ([], leftFalse);
+            }
+            builder.startBlock(_joinBlocks(leftTrue));
+            var (rightTrue, rightFalse) = _translateConditionForControl(
+              condition.right,
+            );
+            return (rightTrue, [...leftFalse, ...rightFalse]);
+          case ast.LogicalExpressionOperator.OR:
+            if (leftFalse.isEmpty) {
+              return (leftTrue, []);
+            }
+            builder.startBlock(_joinBlocks(leftFalse));
+            var (rightTrue, rightFalse) = _translateConditionForControl(
+              condition.right,
+            );
+            return ([...leftTrue, ...rightTrue], rightFalse);
+        }
+      case _:
+        _translateNode(condition);
+        if (!builder.hasOpenBlock) {
+          builder.pop();
+          return ([], []);
+        }
+        final trueBlock = builder.newTargetBlock();
+        final falseBlock = builder.newTargetBlock();
+        builder.addBranch(trueBlock, falseBlock);
+        return ([trueBlock], [falseBlock]);
+    }
+  }
+
+  bool _hasTypeParameterReferences(ast.DartType type) =>
+      type.accept(const _FindTypeParameters());
+
+  TypeParameters? _typeParametersForType(ast.DartType type) {
+    if (typeParameters != null && _hasTypeParameterReferences(type)) {
+      return typeParameters;
+    }
+    return null;
+  }
+
+  TypeParameters? _typeParametersForTypes(List<ast.DartType> types) {
+    if (typeParameters != null) {
+      for (final type in types) {
+        if (_hasTypeParameterReferences(type)) {
+          return typeParameters;
+        }
+      }
+    }
+    return null;
+  }
+
+  @override
+  void defaultTreeNode(ast.Node node) =>
+      throw 'Unsupported node ${node.runtimeType}';
+
+  @override
+  void visitIntLiteral(ast.IntLiteral node) {
+    builder.addIntConstant(node.value);
+  }
+
+  @override
+  void visitBoolLiteral(ast.BoolLiteral node) {
+    builder.addBoolConstant(node.value);
+  }
+
+  @override
+  void visitDoubleLiteral(ast.DoubleLiteral node) {
+    builder.addConstant(ConstantValue.fromDouble(node.value));
+  }
+
+  @override
+  void visitStringLiteral(ast.StringLiteral node) {
+    builder.addConstant(ConstantValue.fromString(node.value));
+  }
+
+  @override
+  void visitConstantExpression(ast.ConstantExpression node) {
+    builder.addConstant(ConstantValue(node.constant));
+  }
+
+  @override
+  void visitReturnStatement(ast.ReturnStatement node) {
+    final expr = node.expression;
+    if (expr != null) {
+      _translateNode(expr);
+    } else {
+      builder.addNullConstant();
+    }
+    final value = builder.pop();
+    _generateNonLocalControlTransfer(node, null, () {
+      builder.push(value);
+      builder.addReturn();
+    });
+  }
+
+  @override
+  void visitBlock(ast.Block node) {
+    _translateNodes(node.statements);
+  }
+
+  @override
+  void visitAssertBlock(ast.AssertBlock node) {
+    if (enableAsserts) {
+      _translateNodes(node.statements);
+    }
+  }
+
+  @override
+  void visitAssertStatement(ast.AssertStatement node) {
+    if (!enableAsserts) {
+      return;
+    }
+    throw 'unimplemented';
+  }
+
+  @override
+  void visitEmptyStatement(ast.EmptyStatement node) {
+    // no-op
+  }
+
+  @override
+  void visitBlockExpression(ast.BlockExpression node) {
+    _translateNodes(node.body.statements);
+    _translateNode(node.value);
+  }
+
+  @override
+  void visitExpressionStatement(ast.ExpressionStatement node) {
+    _translateNode(node.expression);
+    builder.pop();
+  }
+
+  @override
+  void visitStaticInvocation(ast.StaticInvocation node) {
+    assert(!node.isConst);
+    final args = node.arguments;
+    final target = functionRegistry.getFunction(node.target);
+    final inputCount = _translateArguments(null, args);
+    if (_handleUnreachableExpression(inputCount)) return;
+    builder.addDirectCall(target, inputCount, _staticType(node));
+  }
+
+  @override
+  void visitStaticGet(ast.StaticGet node) {
+    final target = functionRegistry.getFunction(node.target, isGetter: true);
+    builder.addDirectCall(target, 0, _staticType(node));
+  }
+
+  @override
+  void visitStaticSet(ast.StaticSet node) {
+    final target = functionRegistry.getFunction(node.target, isSetter: true);
+    _translateNode(node.value);
+    if (_handleUnreachableExpression(1)) return;
+    final value = builder.stackTop;
+    builder.addDirectCall(target, 1, const TopType(const ast.VoidType()));
+    builder.pop();
+    builder.push(value);
+  }
+
+  @override
+  void visitInstanceInvocation(ast.InstanceInvocation node) {
+    final args = node.arguments;
+    final interfaceTarget = functionRegistry.getFunction(node.interfaceTarget);
+    final inputCount = _translateArguments(node.receiver, args);
+    if (_handleUnreachableExpression(inputCount)) return;
+    final matcher = recognizedMethods.instanceInvocations[node.interfaceTarget];
+    if (matcher != null) {
+      final snippet = matcher.match(_argumentTypes(node.receiver, args));
+      if (snippet != null) {
+        snippet(builder);
+        return;
+      }
+    }
+    builder.addInterfaceCall(interfaceTarget, inputCount, _staticType(node));
+  }
+
+  @override
+  void visitInstanceGet(ast.InstanceGet node) {
+    final interfaceTarget = functionRegistry.getFunction(
+      node.interfaceTarget,
+      isGetter: true,
+    );
+    _translateNode(node.receiver);
+    if (_handleUnreachableExpression(1)) return;
+    final matcher = recognizedMethods.instanceGetters[node.interfaceTarget];
+    if (matcher != null) {
+      final snippet = matcher.match([_staticType(node.receiver)]);
+      if (snippet != null) {
+        snippet(builder);
+        return;
+      }
+    }
+    builder.addInterfaceCall(interfaceTarget, 1, _staticType(node));
+  }
+
+  @override
+  void visitInstanceSet(ast.InstanceSet node) {
+    final interfaceTarget = functionRegistry.getFunction(
+      node.interfaceTarget,
+      isSetter: true,
+    );
+    _translateNode(node.receiver);
+    _translateNode(node.value);
+    if (_handleUnreachableExpression(2)) return;
+    final value = builder.stackTop;
+    builder.addInterfaceCall(
+      interfaceTarget,
+      2,
+      const TopType(const ast.VoidType()),
+    );
+    builder.pop();
+    builder.push(value);
+  }
+
+  @override
+  void visitEqualsCall(ast.EqualsCall node) {
+    _translateNode(node.left);
+    _translateNode(node.right);
+    if (_handleUnreachableExpression(2)) return;
+    final interfaceTarget = functionRegistry.getFunction(node.interfaceTarget);
+    final matcher = recognizedMethods.instanceInvocations[node.interfaceTarget];
+    if (matcher != null) {
+      final snippet = matcher.match([
+        _staticType(node.left),
+        _staticType(node.right),
+      ]);
+      if (snippet != null) {
+        snippet(builder);
+        return;
+      }
+    }
+    builder.addInterfaceCall(interfaceTarget, 2, const BoolType());
+  }
+
+  @override
+  void visitEqualsNull(ast.EqualsNull node) {
+    _translateNode(node.expression);
+    if (_handleUnreachableExpression(1)) return;
+    builder.addNullConstant();
+    builder.addComparison(ComparisonOpcode.equal);
+  }
+
+  @override
+  void visitDynamicInvocation(ast.DynamicInvocation node) {
+    final inputCount = _translateArguments(node.receiver, node.arguments);
+    if (_handleUnreachableExpression(inputCount)) return;
+    builder.addDynamicCall(node.name, DynamicCallKind.method, inputCount);
+  }
+
+  @override
+  void visitDynamicGet(ast.DynamicGet node) {
+    _translateNode(node.receiver);
+    if (_handleUnreachableExpression(1)) return;
+    builder.addDynamicCall(node.name, DynamicCallKind.getter, 1);
+  }
+
+  @override
+  void visitDynamicSet(ast.DynamicSet node) {
+    _translateNode(node.receiver);
+    _translateNode(node.value);
+    if (_handleUnreachableExpression(2)) return;
+    final value = builder.stackTop;
+    builder.addDynamicCall(node.name, DynamicCallKind.setter, 2);
+    builder.pop();
+    builder.push(value);
+  }
+
+  @override
+  void visitThisExpression(ast.ThisExpression node) {
+    builder.addLoadLocal(localVarIndexer.receiver);
+  }
+
+  @override
+  void visitVariableDeclaration(ast.VariableDeclaration node) {
+    if (node.isLate) throw 'unimplemented';
+    if (node.isConst) return;
+    final local = localVarIndexer.variableForDeclaration(node);
+    final initializer = node.initializer;
+    if (initializer != null) {
+      _translateNode(initializer);
+      if (!builder.hasOpenBlock) {
+        builder.pop();
+        return;
+      }
+      builder.addStoreLocal(local);
+    } else if (node.type.nullability == ast.Nullability.nullable) {
+      builder.addNullConstant();
+      builder.addStoreLocal(local);
+    }
+  }
+
+  @override
+  void visitVariableGet(ast.VariableGet node) {
+    final variable = node.variable;
+    if (variable.isLate) throw 'unimplemented';
+    if (variable.isConst) {
+      builder.addConstant(
+        ConstantValue(
+          (variable.initializer as ast.ConstantExpression).constant,
+        ),
+      );
+      return;
+    }
+    final local = localVarIndexer.variableForDeclaration(variable);
+    builder.addLoadLocal(local);
+    final promotedType = node.promotedType;
+    if (promotedType != null) {
+      final promotedCType = _typeTranslator.translate(promotedType);
+      if (promotedCType is! TopType && promotedCType != local.type) {
+        builder.addTypeCast(
+          promotedCType,
+          typeParameters: _typeParametersForType(promotedType),
+          isChecked: false,
+        );
+      }
+    }
+  }
+
+  @override
+  void visitVariableSet(ast.VariableSet node) {
+    final variable = node.variable;
+    if (variable.isLate) throw 'unimplemented';
+    _translateNode(node.value);
+    if (_handleUnreachableExpression(1)) return;
+    final local = localVarIndexer.variableForDeclaration(variable);
+    builder.addStoreLocal(local, leaveValueOnStack: true);
+  }
+
+  @override
+  void visitIfStatement(ast.IfStatement node) {
+    var (thenBlocks, otherwiseBlocks) = _translateConditionForControl(
+      node.condition,
+    );
+    if (thenBlocks.isEmpty && otherwiseBlocks.isEmpty) {
+      assert(!builder.hasOpenBlock);
+      return;
+    }
+
+    final elsePart = node.otherwise;
+    JoinBlock? join;
+    if (elsePart == null && otherwiseBlocks.isNotEmpty) {
+      join = _joinBlocks(otherwiseBlocks, needNewJoinBlock: true) as JoinBlock;
+    }
+
+    if (thenBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(thenBlocks));
+      _translateNode(node.then);
+      if (builder.hasOpenBlock) {
+        join ??= builder.newJoinBlock();
+        builder.addGoto(join);
+      }
+    }
+
+    if (elsePart != null && otherwiseBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(otherwiseBlocks));
+      _translateNode(elsePart);
+      if (builder.hasOpenBlock) {
+        join ??= builder.newJoinBlock();
+        builder.addGoto(join);
+      }
+    }
+
+    if (join != null) {
+      builder.startBlock(join);
+    }
+  }
+
+  @override
+  void visitWhileStatement(ast.WhileStatement node) {
+    final join = builder.newJoinBlock();
+    builder.addGoto(join);
+    builder.startBlock(join);
+
+    final (trueBlocks, falseBlocks) = _translateConditionForControl(
+      node.condition,
+    );
+
+    if (trueBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(trueBlocks));
+      _translateNode(node.body);
+      if (builder.hasOpenBlock) {
+        builder.addGoto(join);
+      }
+    }
+
+    if (falseBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(falseBlocks));
+    }
+  }
+
+  @override
+  void visitDoStatement(ast.DoStatement node) {
+    final join = builder.newJoinBlock();
+    builder.addGoto(join);
+    builder.startBlock(join);
+
+    _translateNode(node.body);
+    if (!builder.hasOpenBlock) return;
+
+    final (trueBlocks, falseBlocks) = _translateConditionForControl(
+      node.condition,
+    );
+
+    for (final block in trueBlocks) {
+      builder.startBlock(block);
+      builder.addGoto(join);
+    }
+
+    if (falseBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(falseBlocks));
+    }
+  }
+
+  @override
+  void visitForStatement(ast.ForStatement node) {
+    _translateNodes(node.variables);
+    if (!builder.hasOpenBlock) return;
+
+    final join = builder.newJoinBlock();
+    builder.addGoto(join);
+    builder.startBlock(join);
+
+    final condition = node.condition;
+    Block? done;
+    if (condition != null) {
+      final (trueBlocks, falseBlocks) = _translateConditionForControl(
+        condition,
+      );
+      if (falseBlocks.isNotEmpty) {
+        done = _joinBlocks(falseBlocks);
+      }
+      if (trueBlocks.isNotEmpty) {
+        builder.startBlock(_joinBlocks(trueBlocks));
+      }
+    }
+
+    _translateNode(node.body);
+
+    for (var update in node.updates) {
+      _translateNode(update);
+      builder.pop();
+    }
+
+    if (builder.hasOpenBlock) {
+      builder.addGoto(join);
+    }
+
+    if (done != null) {
+      builder.startBlock(done);
+    }
+  }
+
+  @override
+  void visitForInStatement(ast.ForInStatement node) =>
+      throw 'Should be lowered';
+
+  @override
+  void visitLabeledStatement(ast.LabeledStatement node) {
+    final labeledStatements = this.labeledStatements ??=
+        <ast.LabeledStatement, JoinBlock>{};
+    JoinBlock? join;
+    try {
+      _translateNode(node.body);
+    } finally {
+      join = labeledStatements.remove(node);
+    }
+    if (join != null) {
+      if (builder.hasOpenBlock) {
+        builder.addGoto(join);
+      }
+      builder.startBlock(join);
+    }
+  }
+
+  @override
+  void visitBreakStatement(ast.BreakStatement node) {
+    _generateNonLocalControlTransfer(node, node.target, () {
+      final targetBlock = (labeledStatements![node.target] ??= builder
+          .newJoinBlock());
+      builder.addGoto(targetBlock);
+    });
+  }
+
+  @override
+  void visitSwitchStatement(ast.SwitchStatement node) {
+    _translateNode(node.expression);
+    final value = builder.pop();
+
+    final switchCases = this.switchCases ??= <ast.SwitchCase, JoinBlock>{};
+    final caseBlocks = List<JoinBlock>.generate(
+      node.cases.length,
+      (_) => builder.newJoinBlock(),
+    );
+
+    for (var i = 0; i < node.cases.length; i++) {
+      final switchCase = node.cases[i];
+      final caseBlock = caseBlocks[i];
+      switchCases[switchCase] = caseBlock;
+
+      if (switchCase.isDefault) {
+        assert(i == node.cases.length - 1);
+        builder.addGoto(caseBlock);
+      } else {
+        final savedSourcePosition = builder.currentSourcePosition;
+        for (var i = 0; i < switchCase.expressions.length; ++i) {
+          builder.currentSourcePosition = SourcePosition(
+            switchCase.expressionOffsets[i],
+          );
+          // TODO(alexmarkov): use more efficient comparison
+          _translateNode(switchCase.expressions[i]);
+          builder.push(value);
+          builder.addInterfaceCall(
+            functionRegistry.getFunction(coreTypes.objectEquals),
+            2,
+            const BoolType(),
+          );
+
+          final trueBlock = builder.newTargetBlock();
+          final falseBlock = builder.newTargetBlock();
+          builder.addBranch(trueBlock, falseBlock);
+
+          builder.startBlock(trueBlock);
+          builder.addGoto(caseBlock);
+
+          builder.startBlock(falseBlock);
+        }
+        builder.currentSourcePosition = savedSourcePosition;
+      }
+    }
+
+    JoinBlock? done;
+    if (builder.hasOpenBlock) {
+      done = builder.newJoinBlock();
+      builder.addGoto(done);
+    }
+
+    for (var i = 0; i < node.cases.length; i++) {
+      final switchCase = node.cases[i];
+      final caseBlock = caseBlocks[i];
+
+      builder.startBlock(caseBlock);
+      _translateNode(switchCase.body);
+
+      if (builder.hasOpenBlock) {
+        assert(i == node.cases.length - 1);
+        if (done != null) {
+          builder.addGoto(done);
+        }
+      }
+    }
+
+    node.cases.forEach(switchCases.remove);
+
+    if (done != null) {
+      builder.startBlock(done);
+    }
+  }
+
+  @override
+  void visitContinueSwitchStatement(ast.ContinueSwitchStatement node) {
+    final targetBlock = switchCases?[node.target];
+    if (targetBlock == null) {
+      throw 'Target block ${node.target} was not registered for continue-switch $node';
+    }
+    _generateNonLocalControlTransfer(node, node.target.parent!, () {
+      builder.addGoto(targetBlock);
+    });
+  }
+
+  @override
+  void visitTryCatch(ast.TryCatch node) {
+    final tryBody = builder.newTargetBlock();
+    final catchBlock = builder.newCatchBlock();
+    builder.addTryEntry(tryBody, catchBlock);
+
+    builder.enterTryBlock(catchBlock);
+    builder.startBlock(tryBody);
+
+    _translateNode(node.body);
+
+    final done = builder.newJoinBlock();
+    builder.addGoto(done);
+    builder.leaveTryBlock();
+
+    builder.startBlock(catchBlock);
+
+    final exceptionLocal = localVarIndexer.exceptionVariable(node);
+    final stackTraceLocal = localVarIndexer.stackTraceVariable(node);
+    builder.addParameter(exceptionLocal);
+    builder.addParameter(stackTraceLocal);
+
+    final savedSourcePosition = builder.currentSourcePosition;
+    for (final catchClause in node.catches) {
+      builder.currentSourcePosition = SourcePosition(catchClause.fileOffset);
+
+      TargetBlock? next;
+      final guardType = catchClause.guard;
+      final guardCType = _typeTranslator.translate(guardType);
+      // Exception objects are guaranteed to be non-nullable, so
+      // non-nullable Object is also a catch-all type.
+      if (guardCType is! TopType && guardCType is! ObjectType) {
+        builder.addLoadLocal(exceptionLocal);
+        builder.addTypeTest(
+          guardCType,
+          typeParameters: _typeParametersForType(guardType),
+        );
+
+        final catchBody = builder.newTargetBlock();
+        next = builder.newTargetBlock();
+        builder.addBranch(catchBody, next);
+
+        builder.startBlock(catchBody);
+      }
+
+      if (catchClause.exception != null) {
+        builder.addLoadLocal(exceptionLocal);
+        builder.addStoreLocal(
+          localVarIndexer.variableForDeclaration(catchClause.exception!),
+        );
+      }
+
+      if (catchClause.stackTrace != null) {
+        builder.addLoadLocal(stackTraceLocal);
+        builder.addStoreLocal(
+          localVarIndexer.variableForDeclaration(catchClause.stackTrace!),
+        );
+      }
+
+      _translateNode(catchClause.body);
+
+      builder.addGoto(done);
+
+      if (next != null) {
+        builder.startBlock(next);
+      }
+    }
+    builder.currentSourcePosition = savedSourcePosition;
+
+    if (builder.hasOpenBlock) {
+      builder.addLoadLocal(exceptionLocal);
+      builder.addLoadLocal(stackTraceLocal);
+      builder.addRethrow();
+    }
+
+    builder.startBlock(done);
+  }
+
+  @override
+  void visitTryFinally(ast.TryFinally node) {
+    final finallyBlocks = this.finallyBlocks ??=
+        <ast.TryFinally, List<FinallyBlock>>{};
+    finallyBlocks[node] = <FinallyBlock>[];
+
+    final tryBody = builder.newTargetBlock();
+    final catchBlock = builder.newCatchBlock();
+    builder.addTryEntry(tryBody, catchBlock);
+
+    builder.enterTryBlock(catchBlock);
+    builder.startBlock(tryBody);
+
+    _translateNode(node.body);
+
+    if (builder.hasOpenBlock) {
+      final normalContinuation = FinallyBlock(builder, () {
+        // Do nothing (fall through).
+      });
+      finallyBlocks[node]!.add(normalContinuation);
+      final entryBlock = normalContinuation.entryBlock = builder.newJoinBlock();
+      builder.addGoto(entryBlock);
+    }
+
+    builder.leaveTryBlock();
+    final collectedFinallyBlocks = finallyBlocks.remove(node)!;
+
+    builder.startBlock(catchBlock);
+
+    final exceptionLocal = localVarIndexer.exceptionVariable(node);
+    final stackTraceLocal = localVarIndexer.stackTraceVariable(node);
+    builder.addParameter(exceptionLocal);
+    builder.addParameter(stackTraceLocal);
+
+    _translateNode(node.finalizer);
+
+    if (builder.hasOpenBlock) {
+      builder.addLoadLocal(exceptionLocal);
+      builder.addLoadLocal(stackTraceLocal);
+      builder.addRethrow();
+    }
+
+    for (var finallyBlock in collectedFinallyBlocks) {
+      final entryBlock = finallyBlock.entryBlock;
+      if (entryBlock == null) {
+        continue;
+      }
+      builder.startBlock(entryBlock);
+      _translateNode(node.finalizer);
+      if (builder.hasOpenBlock) {
+        finallyBlock.generateContinuation();
+      }
+    }
+  }
+
+  /// Returns the list of try-finally blocks between [from] and [to],
+  /// ordered from inner to outer. If [to] is null, returns all enclosing
+  /// try-finally blocks up to the function boundary.
+  List<ast.TryFinally> _getEnclosingTryFinallyBlocks(
+    ast.TreeNode from,
+    ast.TreeNode? to,
+  ) {
+    final blocks = <ast.TryFinally>[];
+    ast.TreeNode? node = from;
+    for (;;) {
+      if (node == to) {
+        return blocks;
+      }
+      if (node == null || node is ast.FunctionNode || node is ast.Member) {
+        if (to == null) {
+          return blocks;
+        } else {
+          throw 'Unable to find node $to up from $from';
+        }
+      }
+      // Inspect parent as we only need try-finally blocks enclosing [node]
+      // in the body, and not in the finally-block.
+      final parent = node.parent;
+      if (parent is ast.TryFinally && parent.body == node) {
+        blocks.add(parent);
+      }
+      node = parent;
+    }
+  }
+
+  /// Appends chained [FinallyBlock]s to each try-finally in the given
+  /// list [tryFinallyBlocks] (ordered from inner to outer).
+  /// [continuation] is invoked to generate control transfer following
+  /// the last finally block.
+  void _addFinallyBlocks(
+    List<ast.TryFinally> tryFinallyBlocks,
+    void Function() continuation,
+  ) {
+    if (!builder.hasOpenBlock) {
+      return;
+    }
+    // Add finally blocks to all try-finally from outer to inner.
+    // The outermost finally block should generate continuation, each inner
+    // finally block should proceed to a corresponding outer block.
+    for (var tryFinally in tryFinallyBlocks.reversed) {
+      final finallyBlock = FinallyBlock(builder, continuation);
+      finallyBlocks![tryFinally]!.add(finallyBlock);
+
+      continuation = () {
+        final nextFinally = finallyBlock.entryBlock = builder.newJoinBlock();
+        builder.addGoto(nextFinally);
+      };
+    }
+
+    // Generate Goto to the innermost finally (or to the original
+    // continuation if there are no try-finally blocks).
+    continuation();
+  }
+
+  /// Generates non-local transfer from inner node [from] into the outer
+  /// node, executing finally blocks on the way out. [to] can be null,
+  /// in such case all enclosing finally blocks are executed.
+  /// [continuation] is invoked to generate control transfer following
+  /// the last finally block.
+  void _generateNonLocalControlTransfer(
+    ast.TreeNode from,
+    ast.TreeNode? to,
+    void Function() continuation,
+  ) {
+    _addFinallyBlocks(_getEnclosingTryFinallyBlocks(from, to), continuation);
+  }
+
+  @override
+  void visitThrow(ast.Throw node) {
+    _translateNode(node.expression);
+    if (_handleUnreachableExpression(1)) return;
+    builder.addThrow();
+    // Maintain expression stack balance.
+    builder.addNullConstant();
+  }
+
+  @override
+  void visitRethrow(ast.Rethrow node) {
+    ast.TryCatch tryCatch;
+    for (var parent = node.parent; ; parent = parent.parent) {
+      if (parent is ast.Catch) {
+        tryCatch = parent.parent as ast.TryCatch;
+        break;
+      }
+      if (parent == null ||
+          parent is ast.FunctionNode ||
+          parent is ast.Member) {
+        throw 'Unable to find enclosing catch for $node';
+      }
+    }
+    final exceptionLocal = localVarIndexer.exceptionVariable(tryCatch);
+    final stackTraceLocal = localVarIndexer.stackTraceVariable(tryCatch);
+    builder.addLoadLocal(exceptionLocal);
+    builder.addLoadLocal(stackTraceLocal);
+    builder.addRethrow();
+    // Maintain expression stack balance.
+    builder.addNullConstant();
+  }
+
+  @override
+  void visitIsExpression(ast.IsExpression node) {
+    _translateNode(node.operand);
+    if (_handleUnreachableExpression(1)) return;
+
+    final type = _typeTranslator.translate(node.type);
+    if (type is TopType) {
+      builder.pop();
+      builder.addBoolConstant(true);
+    } else {
+      builder.addTypeTest(
+        type,
+        typeParameters: _typeParametersForType(node.type),
+      );
+    }
+  }
+
+  @override
+  void visitAsExpression(ast.AsExpression node) {
+    _translateNode(node.operand);
+    if (_handleUnreachableExpression(1)) return;
+
+    final type = _typeTranslator.translate(node.type);
+    if (type is TopType) {
+      return;
+    }
+    builder.addTypeCast(
+      type,
+      typeParameters: _typeParametersForType(node.type),
+      isChecked: !node.isUnchecked,
+    );
+  }
+
+  @override
+  void visitConditionalExpression(ast.ConditionalExpression node) {
+    final (trueBlocks, falseBlocks) = _translateConditionForControl(
+      node.condition,
+    );
+    if (trueBlocks.isEmpty && falseBlocks.isEmpty) {
+      assert(!builder.hasOpenBlock);
+      return;
+    }
+    JoinBlock? joinBlock;
+    final tempVar = builder.declareLocalVariable(
+      '#temp',
+      null,
+      _typeTranslator.translate(node.staticType),
+    );
+
+    if (trueBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(trueBlocks));
+      _translateNode(node.then);
+      if (builder.hasOpenBlock) {
+        builder.addStoreLocal(tempVar);
+        joinBlock ??= builder.newJoinBlock();
+        builder.addGoto(joinBlock);
+      }
+    }
+
+    if (falseBlocks.isNotEmpty) {
+      builder.startBlock(_joinBlocks(falseBlocks));
+      _translateNode(node.otherwise);
+      if (builder.hasOpenBlock) {
+        builder.addStoreLocal(tempVar);
+        joinBlock ??= builder.newJoinBlock();
+        builder.addGoto(joinBlock);
+      }
+    }
+
+    if (joinBlock != null) {
+      builder.startBlock(joinBlock);
+      builder.addLoadLocal(tempVar);
+    }
+  }
+}
+
+/// Mapping between AST nodes and CFG IR [LocalVariable].
+class LocalVariableIndexer {
+  final FlowGraphBuilder builder;
+  final CoreTypes coreTypes;
+  final AstToIrTypes typeTranslator;
+  final Map<ast.VariableDeclaration, LocalVariable> _declaredVariables = {};
+  final Map<ast.TreeNode, LocalVariable> _exceptionVariables = {};
+  final Map<ast.TreeNode, LocalVariable> _stackTraceVariables = {};
+
+  final List<LocalVariable> parameters = [];
+  LocalVariable get receiver => parameters[0];
+
+  LocalVariableIndexer(
+    this.builder,
+    this.coreTypes,
+    this.typeTranslator,
+    CFunction function,
+  ) {
+    if (function.hasReceiverParameter) {
+      final cls = function.member.enclosingClass!;
+      parameters.add(
+        builder.declareLocalVariable(
+          'this',
+          null,
+          typeTranslator.translate(
+            cls.getThisType(coreTypes, ast.Nullability.nonNullable),
+          ),
+        ),
+      );
+    }
+    if (function.hasClosureParameter) {
+      parameters.add(
+        builder.declareLocalVariable(
+          '#closure',
+          null,
+          typeTranslator.translate(coreTypes.functionNonNullableRawType),
+        ),
+      );
+    }
+    if (function is SetterFunction) {
+      parameters.add(
+        builder.declareLocalVariable('#value', null, function.valueType),
+      );
+    }
+    ast.FunctionNode? functionNode = switch (function) {
+      GetterFunction() ||
+      SetterFunction() ||
+      FieldInitializerFunction() => null,
+      RegularFunction() ||
+      GenerativeConstructor() ||
+      TearOffFunction() => function.member.function,
+      LocalFunction() => function.localFunction.function,
+    };
+    if (functionNode != null) {
+      for (final v in functionNode.positionalParameters) {
+        parameters.add(variableForDeclaration(v));
+      }
+      for (final v in functionNode.namedParameters) {
+        parameters.add(variableForDeclaration(v));
+      }
+    }
+  }
+
+  LocalVariable variableForDeclaration(ast.VariableDeclaration declaration) =>
+      _declaredVariables[declaration] ??= builder.declareLocalVariable(
+        declaration.name ?? '#temp',
+        declaration,
+        typeTranslator.translate(declaration.type),
+      );
+
+  LocalVariable exceptionVariable(ast.TreeNode tryBlock) {
+    assert(tryBlock is ast.TryCatch || tryBlock is ast.TryFinally);
+    return _exceptionVariables[tryBlock] ??= builder.declareLocalVariable(
+      '#exception',
+      null,
+      const ObjectType(),
+    );
+  }
+
+  LocalVariable stackTraceVariable(ast.TreeNode tryBlock) {
+    assert(tryBlock is ast.TryCatch || tryBlock is ast.TryFinally);
+    return _stackTraceVariables[tryBlock] ??= builder.declareLocalVariable(
+      '#stackTrace',
+      null,
+      StaticType(coreTypes.stackTraceNonNullableRawType),
+    );
+  }
+}
+
+/// A pending request to generate IR for a finally block.
+///
+/// Used to implement non-local control transfers (such as `break`,
+/// `continue` or `return`).
+///
+/// These requests are fullfilled in [AstToIr.visitTryFinally] when
+/// leaving a try-finally block in order to ensure correct AST scoping.
+class FinallyBlock {
+  /// Entry basic block for the finally block.
+  /// Created only when finally block is reachable.
+  JoinBlock? entryBlock;
+
+  /// Generate continuation code after the finally block.
+  final void Function() generateContinuation;
+
+  FinallyBlock(FlowGraphBuilder builder, this.generateContinuation);
+}
+
+/// Look up references to free type parameters.
+class _FindTypeParameters
+    with ast.DartTypeVisitorExperimentExclusionMixin<bool>
+    implements ast.DartTypeVisitor<bool> {
+  const _FindTypeParameters();
+
+  @override
+  bool visitFunctionType(ast.FunctionType node) {
+    if (node.returnType.accept(this)) return true;
+    for (final param in node.positionalParameters) {
+      if (param.accept(this)) return true;
+    }
+    for (final namedParam in node.namedParameters) {
+      if (namedParam.type.accept(this)) return true;
+    }
+    for (final typeParam in node.typeParameters) {
+      if (typeParam.bound.accept(this)) return true;
+      if (typeParam.defaultType.accept(this)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitInterfaceType(ast.InterfaceType node) {
+    for (final type in node.typeArguments) {
+      if (type.accept(this)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitTypedefType(ast.TypedefType node) {
+    for (final type in node.typeArguments) {
+      if (type.accept(this)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitTypeParameterType(ast.TypeParameterType node) => true;
+
+  @override
+  bool visitStructuralParameterType(ast.StructuralParameterType node) => false;
+
+  @override
+  bool visitIntersectionType(ast.IntersectionType node) {
+    return node.left.accept(this) || node.right.accept(this);
+  }
+
+  @override
+  bool visitExtensionType(ast.ExtensionType node) {
+    for (final type in node.typeArguments) {
+      if (type.accept(this)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitRecordType(ast.RecordType node) {
+    for (final type in node.positional) {
+      if (type.accept(this)) return true;
+    }
+    for (final namedType in node.named) {
+      if (namedType.type.accept(this)) return true;
+    }
+    return false;
+  }
+
+  @override
+  bool visitFutureOrType(ast.FutureOrType node) =>
+      node.typeArgument.accept(this);
+
+  @override
+  bool visitInvalidType(ast.InvalidType node) => false;
+
+  @override
+  bool visitNeverType(ast.NeverType node) => false;
+
+  @override
+  bool visitNullType(ast.NullType node) => false;
+
+  @override
+  bool visitVoidType(ast.VoidType node) => false;
+
+  @override
+  bool visitDynamicType(ast.DynamicType node) => false;
+
+  @override
+  bool visitAuxiliaryType(ast.AuxiliaryType node) =>
+      throw 'Unsupported type ${node.runtimeType} $node';
+}
diff --git a/pkg/cfg/lib/front_end/recognized_methods.dart b/pkg/cfg/lib/front_end/recognized_methods.dart
new file mode 100644
index 0000000..dbbd541
--- /dev/null
+++ b/pkg/cfg/lib/front_end/recognized_methods.dart
@@ -0,0 +1,372 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/flow_graph_builder.dart';
+import 'package:cfg/ir/global_context.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:kernel/ast.dart' as ast;
+import 'package:kernel/library_index.dart' show LibraryIndex;
+
+/// Build a fragment of IR corresponding to the body of
+/// recognized method or recognized call.
+typedef BuildIR = void Function(FlowGraphBuilder builder);
+
+/// Base class for recognizing calls depending
+/// on their argument types.
+abstract class RecognizedCallMatcher {
+  /// Returns non-null [BuildIR] function if call is recognized.
+  BuildIR? match(List<CType> args);
+}
+
+/// Recognizes calls to binary [num] operations (except [num./]).
+class BinaryNumOp implements RecognizedCallMatcher {
+  final BinaryIntOpcode intOp;
+  final BinaryDoubleOpcode doubleOp;
+
+  const BinaryNumOp(this.intOp, this.doubleOp);
+
+  /// Recognizes the following combinations of argument types:
+  ///
+  /// int op int -> int
+  /// int op double -> double
+  /// double op int -> double
+  /// double op double -> double
+  BuildIR? match(List<CType> args) {
+    switch (args) {
+      case [IntType(), IntType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addBinaryIntOp(intOp);
+        };
+      case [IntType(), DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          final right = builder.pop();
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.push(right);
+          builder.addBinaryDoubleOp(doubleOp);
+        };
+      case [DoubleType(), DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addBinaryDoubleOp(doubleOp);
+        };
+      case [DoubleType(), IntType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.addBinaryDoubleOp(doubleOp);
+        };
+    }
+    return null;
+  }
+}
+
+/// Recognizes calls to [num./].
+class NumDiv implements RecognizedCallMatcher {
+  const NumDiv();
+
+  BuildIR? match(List<CType> args) {
+    switch (args) {
+      case [IntType(), IntType()]:
+        return (FlowGraphBuilder builder) {
+          final right = builder.pop();
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.push(right);
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.addBinaryDoubleOp(BinaryDoubleOpcode.div);
+        };
+      case [IntType(), DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          final right = builder.pop();
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.push(right);
+          builder.addBinaryDoubleOp(BinaryDoubleOpcode.div);
+        };
+      case [DoubleType(), DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addBinaryDoubleOp(BinaryDoubleOpcode.div);
+        };
+      case [DoubleType(), IntType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.addBinaryDoubleOp(BinaryDoubleOpcode.div);
+        };
+    }
+    return null;
+  }
+}
+
+/// Recognizes calls to [num.toDouble].
+class NumToDouble implements RecognizedCallMatcher {
+  const NumToDouble();
+
+  BuildIR? match(List<CType> args) {
+    switch (args) {
+      case [IntType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+        };
+      case [DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          // no-op
+        };
+    }
+    return null;
+  }
+}
+
+/// Recognizes calls to [num.toInt].
+class NumToInt implements RecognizedCallMatcher {
+  const NumToInt();
+
+  BuildIR? match(List<CType> args) {
+    switch (args) {
+      case [IntType()]:
+        return (FlowGraphBuilder builder) {
+          // no-op
+        };
+      case [DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addUnaryDoubleOp(UnaryDoubleOpcode.truncate);
+        };
+    }
+    return null;
+  }
+}
+
+/// Recognizes calls to [num] comparisons.
+class NumComparison implements RecognizedCallMatcher {
+  final ComparisonOpcode intOp;
+  final ComparisonOpcode doubleOp;
+
+  const NumComparison(this.intOp, this.doubleOp);
+
+  BuildIR? match(List<CType> args) {
+    switch (args) {
+      case [IntType(), IntType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addComparison(intOp);
+        };
+      case [DoubleType(), DoubleType()]:
+        return (FlowGraphBuilder builder) {
+          builder.addComparison(doubleOp);
+        };
+    }
+    // TODO(alexmarkov): support other combinations.
+    return null;
+  }
+}
+
+/// Recognizes calls to binary [int] operations.
+class BinaryIntOp implements RecognizedCallMatcher {
+  final BinaryIntOpcode op;
+
+  const BinaryIntOp(this.op);
+
+  BuildIR? match(List<CType> args) {
+    assert(args[0] is IntType && args[1] is IntType);
+    return (FlowGraphBuilder builder) {
+      builder.addBinaryIntOp(op);
+    };
+  }
+}
+
+/// Recognizes calls to unary [int] operations.
+class UnaryIntOp implements RecognizedCallMatcher {
+  final UnaryIntOpcode op;
+
+  const UnaryIntOp(this.op);
+
+  BuildIR? match(List<CType> args) {
+    assert(args[0] is IntType);
+    return (FlowGraphBuilder builder) {
+      builder.addUnaryIntOp(op);
+    };
+  }
+}
+
+/// Recognizes calls to binary [double] operations.
+class BinaryDoubleOp implements RecognizedCallMatcher {
+  final BinaryDoubleOpcode op;
+
+  const BinaryDoubleOp(this.op);
+
+  BuildIR? match(List<CType> args) {
+    assert(args[0] is DoubleType);
+    switch (args[1]) {
+      case IntType():
+        return (FlowGraphBuilder builder) {
+          builder.addUnaryIntOp(UnaryIntOpcode.toDouble);
+          builder.addBinaryDoubleOp(op);
+        };
+      case DoubleType():
+        return (FlowGraphBuilder builder) {
+          builder.addBinaryDoubleOp(op);
+        };
+      default:
+        return null;
+    }
+  }
+}
+
+/// Recognizes calls to unary [double] operations.
+class UnaryDoubleOp implements RecognizedCallMatcher {
+  final UnaryDoubleOpcode op;
+
+  const UnaryDoubleOp(this.op);
+
+  BuildIR? match(List<CType> args) {
+    assert(args[0] is DoubleType);
+    return (FlowGraphBuilder builder) {
+      builder.addUnaryDoubleOp(op);
+    };
+  }
+}
+
+/// Recognize certain Dart methods and calls based on the
+/// target and static types and build IR for them.
+abstract class RecognizedMethods {
+  /// Recognized instance method calls.
+  Map<ast.Member, RecognizedCallMatcher> get instanceInvocations;
+
+  /// Recognized instance getter calls.
+  Map<ast.Member, RecognizedCallMatcher> get instanceGetters;
+}
+
+/// Recognized methods shared by all back-ends.
+class CommonRecognizedMethods implements RecognizedMethods {
+  final LibraryIndex index;
+
+  CommonRecognizedMethods() : index = GlobalContext.instance.coreTypes.index;
+
+  late final instanceInvocations = <ast.Member, RecognizedCallMatcher>{
+    index.getProcedure('dart:core', 'num', '+'): const BinaryNumOp(
+      BinaryIntOpcode.add,
+      BinaryDoubleOpcode.add,
+    ),
+    index.getProcedure('dart:core', 'num', '-'): const BinaryNumOp(
+      BinaryIntOpcode.sub,
+      BinaryDoubleOpcode.sub,
+    ),
+    index.getProcedure('dart:core', 'num', '*'): const BinaryNumOp(
+      BinaryIntOpcode.mul,
+      BinaryDoubleOpcode.mul,
+    ),
+    index.getProcedure('dart:core', 'num', '%'): const BinaryNumOp(
+      BinaryIntOpcode.mod,
+      BinaryDoubleOpcode.mod,
+    ),
+    index.getProcedure('dart:core', 'num', '~/'): const BinaryNumOp(
+      BinaryIntOpcode.truncatingDiv,
+      BinaryDoubleOpcode.truncatingDiv,
+    ),
+    index.getProcedure('dart:core', 'num', 'remainder'): const BinaryNumOp(
+      BinaryIntOpcode.rem,
+      BinaryDoubleOpcode.rem,
+    ),
+    index.getProcedure('dart:core', 'num', '/'): const NumDiv(),
+    index.getProcedure('dart:core', 'num', 'toDouble'): const NumToDouble(),
+    index.getProcedure('dart:core', 'num', 'toInt'): const NumToInt(),
+    index.getProcedure('dart:core', 'num', '=='): const NumComparison(
+      ComparisonOpcode.intEqual,
+      ComparisonOpcode.doubleEqual,
+    ),
+    index.getProcedure('dart:core', 'num', '<'): const NumComparison(
+      ComparisonOpcode.intLess,
+      ComparisonOpcode.doubleLess,
+    ),
+    index.getProcedure('dart:core', 'num', '<='): const NumComparison(
+      ComparisonOpcode.intLessOrEqual,
+      ComparisonOpcode.doubleLessOrEqual,
+    ),
+    index.getProcedure('dart:core', 'num', '>'): const NumComparison(
+      ComparisonOpcode.intGreater,
+      ComparisonOpcode.doubleGreater,
+    ),
+    index.getProcedure('dart:core', 'num', '>='): const NumComparison(
+      ComparisonOpcode.intGreaterOrEqual,
+      ComparisonOpcode.doubleGreaterOrEqual,
+    ),
+    index.getProcedure('dart:core', 'int', '|'): const BinaryIntOp(
+      BinaryIntOpcode.bitOr,
+    ),
+    index.getProcedure('dart:core', 'int', '&'): const BinaryIntOp(
+      BinaryIntOpcode.bitAnd,
+    ),
+    index.getProcedure('dart:core', 'int', '^'): const BinaryIntOp(
+      BinaryIntOpcode.bitXor,
+    ),
+    index.getProcedure('dart:core', 'int', '<<'): const BinaryIntOp(
+      BinaryIntOpcode.shiftLeft,
+    ),
+    index.getProcedure('dart:core', 'int', '>>'): const BinaryIntOp(
+      BinaryIntOpcode.shiftRight,
+    ),
+    index.getProcedure('dart:core', 'int', '>>>'): const BinaryIntOp(
+      BinaryIntOpcode.unsignedShiftRight,
+    ),
+    index.getProcedure('dart:core', 'int', 'unary-'): const UnaryIntOp(
+      UnaryIntOpcode.neg,
+    ),
+    index.getProcedure('dart:core', 'int', '~'): const UnaryIntOp(
+      UnaryIntOpcode.bitNot,
+    ),
+    index.getProcedure('dart:core', 'int', 'abs'): const UnaryIntOp(
+      UnaryIntOpcode.abs,
+    ),
+    index.getProcedure('dart:core', 'double', '+'): const BinaryDoubleOp(
+      BinaryDoubleOpcode.add,
+    ),
+    index.getProcedure('dart:core', 'double', '-'): const BinaryDoubleOp(
+      BinaryDoubleOpcode.sub,
+    ),
+    index.getProcedure('dart:core', 'double', '*'): const BinaryDoubleOp(
+      BinaryDoubleOpcode.mul,
+    ),
+    index.getProcedure('dart:core', 'double', '%'): const BinaryDoubleOp(
+      BinaryDoubleOpcode.mod,
+    ),
+    index.getProcedure('dart:core', 'double', '/'): const BinaryDoubleOp(
+      BinaryDoubleOpcode.div,
+    ),
+    index.getProcedure('dart:core', 'double', '~/'): const BinaryDoubleOp(
+      BinaryDoubleOpcode.truncatingDiv,
+    ),
+    index.getProcedure('dart:core', 'double', 'remainder'):
+        const BinaryDoubleOp(BinaryDoubleOpcode.rem),
+    index.getProcedure('dart:core', 'double', 'unary-'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.neg,
+    ),
+    index.getProcedure('dart:core', 'double', 'abs'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.abs,
+    ),
+    index.getProcedure('dart:core', 'double', 'round'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.round,
+    ),
+    index.getProcedure('dart:core', 'double', 'ceil'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.ceil,
+    ),
+    index.getProcedure('dart:core', 'double', 'floor'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.floor,
+    ),
+    index.getProcedure('dart:core', 'double', 'truncate'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.truncate,
+    ),
+    index.getProcedure('dart:core', 'double', 'roundToDouble'):
+        const UnaryDoubleOp(UnaryDoubleOpcode.roundToDouble),
+    index.getProcedure('dart:core', 'double', 'ceilToDouble'):
+        const UnaryDoubleOp(UnaryDoubleOpcode.ceilToDouble),
+    index.getProcedure('dart:core', 'double', 'floorToDouble'):
+        const UnaryDoubleOp(UnaryDoubleOpcode.floorToDouble),
+    index.getProcedure('dart:core', 'double', 'truncateToDouble'):
+        const UnaryDoubleOp(UnaryDoubleOpcode.truncateToDouble),
+  };
+
+  late final instanceGetters = <ast.Member, RecognizedCallMatcher>{
+    index.getProcedure('dart:core', 'int', 'get:sign'): const UnaryIntOp(
+      UnaryIntOpcode.sign,
+    ),
+    index.getProcedure('dart:core', 'double', 'get:sign'): const UnaryDoubleOp(
+      UnaryDoubleOpcode.sign,
+    ),
+  };
+}
diff --git a/pkg/cfg/lib/ir/constant_value.dart b/pkg/cfg/lib/ir/constant_value.dart
new file mode 100644
index 0000000..2825223
--- /dev/null
+++ b/pkg/cfg/lib/ir/constant_value.dart
@@ -0,0 +1,251 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/instructions.dart';
+import 'package:cfg/ir/global_context.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:cfg/utils/misc.dart';
+import 'package:kernel/ast.dart' as ast;
+import 'package:kernel/src/printer.dart' as ast_printer show AstPrinter;
+import 'package:kernel/type_environment.dart' show StaticTypeContext;
+
+/// Represents an arbitrary constant value.
+///
+/// [ConstantValue] is a thin wrapper around [ast.Constant].
+/// Constants which do not have corresponding representation in AST
+/// (e.g. constant type arguments) have dedicated subclasses of
+/// [ast.AuxiliaryConstant].
+extension type ConstantValue(ast.Constant constant) {
+  factory ConstantValue.fromInt(int value) =>
+      ConstantValue(ast.IntConstant(value));
+  factory ConstantValue.fromDouble(double value) =>
+      ConstantValue(ast.DoubleConstant(value));
+  factory ConstantValue.fromBool(bool value) =>
+      ConstantValue(ast.BoolConstant(value));
+  factory ConstantValue.fromNull() => ConstantValue(ast.NullConstant());
+  factory ConstantValue.fromString(String value) =>
+      ConstantValue(ast.StringConstant(value));
+
+  int get intValue => (constant as ast.IntConstant).value;
+  double get doubleValue => (constant as ast.DoubleConstant).value;
+  bool get boolValue => (constant as ast.BoolConstant).value;
+  String get stringValue => (constant as ast.StringConstant).value;
+
+  bool get isInt => constant is ast.IntConstant;
+  bool get isDouble => constant is ast.DoubleConstant;
+  bool get isBool => constant is ast.BoolConstant;
+  bool get isNull => constant is ast.NullConstant;
+  bool get isString => constant is ast.StringConstant;
+
+  CType get type => switch (constant) {
+    ast.IntConstant() => const IntType(),
+    ast.DoubleConstant() => const DoubleType(),
+    ast.BoolConstant() => const BoolType(),
+    ast.NullConstant() => const NullType(),
+    ast.StringConstant() => const StringType(),
+    TypeArgumentsConstant() => const TypeArgumentsType(),
+    _ => StaticType(
+      constant.getType(GlobalContext.instance.staticTypeContextForConstants),
+    ),
+  };
+
+  bool get isZero => switch (constant) {
+    ast.IntConstant(:var value) => value == 0,
+    ast.DoubleConstant(:var value) => value == 0.0,
+    _ => false,
+  };
+
+  bool get isNegative => switch (constant) {
+    ast.IntConstant(:var value) => value < 0,
+    ast.DoubleConstant(:var value) => value.isNegative,
+    _ => false,
+  };
+
+  String valueToString() => switch (constant) {
+    ast.StringConstant(:var value) => '"${value}"',
+    ast.PrimitiveConstant(:var value) => value.toString(),
+    _ => constant.toString(),
+  };
+}
+
+/// Utility class to perform operations on constant values.
+///
+/// Methods of this class return `null` when constant folding
+/// cannot be performed (e.g. corresponding operation would
+/// throw an exception at runtime).
+class ConstantFolding {
+  const ConstantFolding();
+
+  ConstantValue comparison(
+    ComparisonOpcode op,
+    ConstantValue left,
+    ConstantValue right,
+  ) {
+    final result = switch (op) {
+      ComparisonOpcode.equal => left.constant == right.constant,
+      ComparisonOpcode.notEqual => left.constant != right.constant,
+      ComparisonOpcode.identical => left.constant == right.constant,
+      ComparisonOpcode.notIdentical => left.constant != right.constant,
+      ComparisonOpcode.intEqual => left.intValue == right.intValue,
+      ComparisonOpcode.intNotEqual => left.intValue != right.intValue,
+      ComparisonOpcode.intLess => left.intValue < right.intValue,
+      ComparisonOpcode.intLessOrEqual => left.intValue <= right.intValue,
+      ComparisonOpcode.intGreater => left.intValue > right.intValue,
+      ComparisonOpcode.intGreaterOrEqual => left.intValue >= right.intValue,
+      ComparisonOpcode.intTestIsZero => (left.intValue & right.intValue) == 0,
+      ComparisonOpcode.intTestIsNotZero =>
+        (left.intValue & right.intValue) != 0,
+      ComparisonOpcode.doubleEqual => left.doubleValue == right.doubleValue,
+      ComparisonOpcode.doubleNotEqual => left.doubleValue != right.doubleValue,
+      ComparisonOpcode.doubleLess => left.doubleValue < right.doubleValue,
+      ComparisonOpcode.doubleLessOrEqual =>
+        left.doubleValue <= right.doubleValue,
+      ComparisonOpcode.doubleGreater => left.doubleValue > right.doubleValue,
+      ComparisonOpcode.doubleGreaterOrEqual =>
+        left.doubleValue >= right.doubleValue,
+    };
+    return ConstantValue.fromBool(result);
+  }
+
+  ConstantValue? binaryIntOp(
+    BinaryIntOpcode op,
+    ConstantValue left,
+    ConstantValue right,
+  ) {
+    final a = left.intValue;
+    final b = right.intValue;
+    switch (op) {
+      case BinaryIntOpcode.add:
+        return ConstantValue.fromInt(a + b);
+      case BinaryIntOpcode.sub:
+        return ConstantValue.fromInt(a - b);
+      case BinaryIntOpcode.mul:
+        return ConstantValue.fromInt(a * b);
+      case BinaryIntOpcode.truncatingDiv:
+        return (b != 0) ? ConstantValue.fromInt(a ~/ b) : null;
+      case BinaryIntOpcode.mod:
+        return (b != 0) ? ConstantValue.fromInt(a % b) : null;
+      case BinaryIntOpcode.rem:
+        return (b != 0) ? ConstantValue.fromInt(a.remainder(b)) : null;
+      case BinaryIntOpcode.bitOr:
+        return ConstantValue.fromInt(a | b);
+      case BinaryIntOpcode.bitAnd:
+        return ConstantValue.fromInt(a & b);
+      case BinaryIntOpcode.bitXor:
+        return ConstantValue.fromInt(a ^ b);
+      case BinaryIntOpcode.shiftLeft:
+        return (b >= 0) ? ConstantValue.fromInt(a << b) : null;
+      case BinaryIntOpcode.shiftRight:
+        return (b >= 0) ? ConstantValue.fromInt(a >> b) : null;
+      case BinaryIntOpcode.unsignedShiftRight:
+        return (b >= 0) ? ConstantValue.fromInt(a >>> b) : null;
+    }
+  }
+
+  ConstantValue? unaryIntOp(UnaryIntOpcode op, ConstantValue operand) {
+    final x = operand.intValue;
+    switch (op) {
+      case UnaryIntOpcode.neg:
+        return ConstantValue.fromInt(-x);
+      case UnaryIntOpcode.bitNot:
+        return ConstantValue.fromInt(~x);
+      case UnaryIntOpcode.toDouble:
+        return ConstantValue.fromDouble(x.toDouble());
+      case UnaryIntOpcode.abs:
+        return ConstantValue.fromInt(x.abs());
+      case UnaryIntOpcode.sign:
+        return ConstantValue.fromInt(x.sign);
+    }
+  }
+
+  ConstantValue? binaryDoubleOp(
+    BinaryDoubleOpcode op,
+    ConstantValue left,
+    ConstantValue right,
+  ) {
+    final a = left.doubleValue;
+    final b = right.doubleValue;
+    switch (op) {
+      case BinaryDoubleOpcode.add:
+        return ConstantValue.fromDouble(a + b);
+      case BinaryDoubleOpcode.sub:
+        return ConstantValue.fromDouble(a - b);
+      case BinaryDoubleOpcode.mul:
+        return ConstantValue.fromDouble(a * b);
+      case BinaryDoubleOpcode.mod:
+        return ConstantValue.fromDouble(a % b);
+      case BinaryDoubleOpcode.rem:
+        return ConstantValue.fromDouble(a.remainder(b));
+      case BinaryDoubleOpcode.div:
+        return ConstantValue.fromDouble(a / b);
+      case BinaryDoubleOpcode.truncatingDiv:
+        final doubleResult = a / b;
+        return doubleResult.isFinite
+            ? ConstantValue.fromInt(doubleResult.truncate())
+            : null;
+    }
+  }
+
+  ConstantValue? unaryDoubleOp(UnaryDoubleOpcode op, ConstantValue operand) {
+    final x = operand.doubleValue;
+    switch (op) {
+      case UnaryDoubleOpcode.neg:
+        return ConstantValue.fromDouble(-x);
+      case UnaryDoubleOpcode.abs:
+        return ConstantValue.fromDouble(x.abs());
+      case UnaryDoubleOpcode.sign:
+        return ConstantValue.fromDouble(x.sign);
+      case UnaryDoubleOpcode.square:
+        return ConstantValue.fromDouble(x * x);
+      case UnaryDoubleOpcode.round:
+        return x.isFinite ? ConstantValue.fromInt(x.round()) : null;
+      case UnaryDoubleOpcode.floor:
+        return x.isFinite ? ConstantValue.fromInt(x.floor()) : null;
+      case UnaryDoubleOpcode.ceil:
+        return x.isFinite ? ConstantValue.fromInt(x.ceil()) : null;
+      case UnaryDoubleOpcode.truncate:
+        return x.isFinite ? ConstantValue.fromInt(x.truncate()) : null;
+      case UnaryDoubleOpcode.roundToDouble:
+        return ConstantValue.fromDouble(x.roundToDouble());
+      case UnaryDoubleOpcode.floorToDouble:
+        return ConstantValue.fromDouble(x.floorToDouble());
+      case UnaryDoubleOpcode.ceilToDouble:
+        return ConstantValue.fromDouble(x.ceilToDouble());
+      case UnaryDoubleOpcode.truncateToDouble:
+        return ConstantValue.fromDouble(x.truncateToDouble());
+    }
+  }
+}
+
+/// Constant type arguments.
+class TypeArgumentsConstant extends ast.AuxiliaryConstant {
+  final List<ast.DartType> types;
+
+  TypeArgumentsConstant(this.types);
+
+  @override
+  void visitChildren(ast.Visitor v) {
+    ast.visitList(types, v);
+  }
+
+  @override
+  void toTextInternal(ast_printer.AstPrinter printer) {
+    printer.writeTypeArguments(types);
+  }
+
+  @override
+  String toString() => toStringInternal();
+
+  @override
+  int get hashCode => listHashCode(types);
+
+  @override
+  bool operator ==(Object other) {
+    return other is TypeArgumentsConstant &&
+        listEquals(this.types, other.types);
+  }
+
+  @override
+  ast.DartType getType(StaticTypeContext context) => const ast.DynamicType();
+}
diff --git a/pkg/cfg/lib/ir/dominators.dart b/pkg/cfg/lib/ir/dominators.dart
new file mode 100644
index 0000000..3cfd671
--- /dev/null
+++ b/pkg/cfg/lib/ir/dominators.dart
@@ -0,0 +1,237 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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 show min;
+import 'dart:typed_data';
+
+import 'package:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/utils/bit_vector.dart';
+
+class Dominators {
+  final FlowGraph graph;
+
+  /// Immediate dominator (preorder block number -> preorder block number).
+  final Int32List idom;
+
+  /// List of blocks immediately dominated by a block,
+  /// indexed by preorder block number.
+  final List<List<Block>> dominated;
+
+  /// (preorder, postorder) numbers for a block in a dominators tree.
+  /// Note that they are different from preorder/postorder numbers of
+  /// a block in the control flow graph.
+  late Int32List _blockNums = _numberBlocks();
+
+  /// Instruction number in its block, initialized lazily.
+  Int32List? _instructionNums;
+
+  Dominators._(this.graph, int numBlocks)
+    : idom = Int32List(numBlocks),
+      dominated = List<List<Block>>.generate(numBlocks, (_) => <Block>[]);
+
+  /// Return true if [b] dominates [a], i.e. every path from
+  /// graph entry to [a] goes through [b].
+  bool isDominatedBy(Instruction a, Instruction b) {
+    if (a == b) {
+      return false;
+    }
+    final blockA = a.block!;
+    final blockB = b.block!;
+    if (blockA != blockB) {
+      return _getDomPreorderNumber(blockB) < _getDomPreorderNumber(blockA) &&
+          _getDomPostorderNumber(blockA) < _getDomPostorderNumber(blockB);
+    }
+    _numberInstructionsInBlock(blockA);
+    return _instructionNums![b.id] < _instructionNums![a.id];
+  }
+
+  void invalidateInstructionNumbering() {
+    _instructionNums = null;
+  }
+
+  /// Calculate a list of (preorder, postorder) numbers in a dominators tree.
+  Int32List _numberBlocks() {
+    final blockNums = Int32List(graph.preorder.length * 2);
+    final workList = <(Block, int)>[];
+    workList.add((graph.entryBlock, 0));
+    var preorderNumber = 0;
+    var postorderNumber = 0;
+    while (workList.isNotEmpty) {
+      final (block, index) = workList.removeLast();
+      if (index == 0) {
+        blockNums[(block.preorderNumber << 1) + 0] = preorderNumber++;
+      }
+      if (index < block.dominatedBlocks.length) {
+        workList.add((block, index + 1));
+        final child = block.dominatedBlocks[index];
+        workList.add((child, 0));
+      } else {
+        blockNums[(block.preorderNumber << 1) + 1] = postorderNumber++;
+      }
+    }
+    assert(preorderNumber == graph.preorder.length);
+    assert(postorderNumber == graph.preorder.length);
+    return blockNums;
+  }
+
+  /// Returns preorder number of [block] in the dominators tree.
+  /// This is different from [block.preorderNumber] which gives preorder
+  /// number of a block in the CFG.
+  int _getDomPreorderNumber(Block block) =>
+      _blockNums[(block.preorderNumber << 1) + 0];
+
+  /// Returns postorder number of [block] in the dominators tree.
+  /// This is different from [block.postorderNumber] which gives postorder
+  /// number of a block in the CFG.
+  int _getDomPostorderNumber(Block block) =>
+      _blockNums[(block.preorderNumber << 1) + 1];
+
+  /// Calculates and caches ordinal numbers of instructions in [block].
+  void _numberInstructionsInBlock(Block block) {
+    final instructionNums = (_instructionNums ??= Int32List(
+      graph.instructions.length,
+    ));
+    if (instructionNums[block.id] == 0) {
+      var instrNumber = 1;
+      instructionNums[block.id] = instrNumber++;
+      for (final instr in block) {
+        assert(instructionNums[instr.id] == 0);
+        instructionNums[instr.id] = instrNumber++;
+      }
+    }
+  }
+}
+
+/// Compute immediate dominator and dominated blocks for each basic block.
+Dominators computeDominators(FlowGraph graph) {
+  // Use the SEMI-NCA algorithm to compute dominators. This is a two-pass
+  // version of the Lengauer-Tarjan algorithm (LT is normally three passes)
+  // that eliminates a pass by using nearest-common ancestor (NCA) to
+  // compute immediate dominators from semidominators. It also removes a
+  // level of indirection in the link-eval forest data structure.
+  //
+  // The algorithm is described in Georgiadis, Tarjan, and Werneck's
+  // "Finding Dominators in Practice".
+  // https://renatowerneck.files.wordpress.com/2016/06/gtw06-dominators.pdf
+
+  // All lists are indexed by preorder block numbers.
+  final preorder = graph.preorder;
+  final int size = preorder.length;
+  final dominators = Dominators._(graph, size);
+  // Parent in the spanning tree.
+  final parent = Int32List(size);
+  // Immediate dominator.
+  final idom = dominators.idom;
+  // Semidominator.
+  final semi = Int32List(size);
+  // Label for link-eval forest.
+  final label = Int32List(size);
+
+  for (var i = 0; i < size; ++i) {
+    parent[i] = (i == 0) ? -1 : preorder[i].predecessors.first.preorderNumber;
+    idom[i] = parent[i];
+    semi[i] = i;
+    label[i] = i;
+  }
+
+  // 1. First pass: compute semidominators as in Lengauer-Tarjan.
+  // Semidominators are computed from a depth-first spanning tree and are an
+  // approximation of immediate dominators.
+
+  // Use a link-eval data structure with path compression.  Implement path
+  // compression in place by mutating [parent].  Each block has a
+  // label, which is the minimum block number on the compressed path.
+  void compressPath(int startIndex, int currentIndex) {
+    int nextIndex = parent[currentIndex];
+    if (nextIndex > startIndex) {
+      compressPath(startIndex, nextIndex);
+      label[currentIndex] = math.min(label[currentIndex], label[nextIndex]);
+      parent[currentIndex] = parent[nextIndex];
+    }
+  }
+
+  // Loop over the blocks in reverse preorder (not including the graph entry).
+  for (int blockIndex = size - 1; blockIndex >= 1; --blockIndex) {
+    final block = preorder[blockIndex];
+    for (final pred in block.predecessors) {
+      // Look for the semidominator by ascending the semidominator path
+      // starting from pred.
+      int predIndex = pred.preorderNumber;
+      var best = predIndex;
+      if (predIndex > blockIndex) {
+        compressPath(blockIndex, predIndex);
+        best = label[predIndex];
+      }
+
+      // Update the semidominator if we've found a better one.
+      semi[blockIndex] = math.min(semi[blockIndex], semi[best]);
+    }
+
+    // Now use label for the semidominator.
+    label[blockIndex] = semi[blockIndex];
+  }
+
+  // 2. Compute the immediate dominators as the nearest common ancestor of
+  // spanning tree parent and semidominator, for all blocks except the entry.
+  for (var blockIndex = 1; blockIndex < size; ++blockIndex) {
+    int domIndex = idom[blockIndex];
+    while (domIndex > semi[blockIndex]) {
+      domIndex = idom[domIndex];
+    }
+    idom[blockIndex] = domIndex;
+    dominators.dominated[domIndex].add(preorder[blockIndex]);
+  }
+
+  return dominators;
+}
+
+/// Compute the dominance frontier for each basic block.
+///
+/// Returns a list that maps the preorder block number
+/// to a set of blocks in the dominance frontier.
+///
+/// If [includeExceptionHandlers], also include exception handler
+/// to a dominance frontier of the block. This is needed in order to
+/// account for implicit control flow from the exceptions.
+/// (In the implicit control flow, block is a predecessor of its exception
+/// handler but block doesn't dominate its exception handler, so exception
+/// handler always belongs to a block's dominance frontier.)
+List<BitVector> computeDominanceFrontier(
+  FlowGraph graph, {
+  bool includeExceptionHandlers = false,
+}) {
+  // This is algorithm in "A Simple, Fast Dominance Algorithm" (Figure 5),
+  // which is attributed to a paper by Ferrante et al.
+  //
+  // There is no bookkeeping required to avoid adding a block twice to
+  // the same block's dominance frontier because we use a set to represent
+  // the dominance frontier.
+  final preorder = graph.preorder;
+  final int size = preorder.length;
+  final dominanceFrontier = List<BitVector>.generate(
+    size,
+    (i) => BitVector(size),
+    growable: false,
+  );
+  for (var blockIndex = 0; blockIndex < size; ++blockIndex) {
+    final block = preorder[blockIndex];
+    if (includeExceptionHandlers) {
+      final exceptionHandler = block.exceptionHandler;
+      if (exceptionHandler != null) {
+        dominanceFrontier[blockIndex].add(exceptionHandler.preorderNumber);
+      }
+    }
+    final count = block.predecessors.length;
+    if (count <= 1) continue;
+    for (var i = 0; i < count; ++i) {
+      Block? runner = block.predecessors[i];
+      while (runner != block.dominator) {
+        dominanceFrontier[runner!.preorderNumber].add(blockIndex);
+        runner = runner.dominator;
+      }
+    }
+  }
+  return dominanceFrontier;
+}
diff --git a/pkg/cfg/lib/ir/flow_graph.dart b/pkg/cfg/lib/ir/flow_graph.dart
new file mode 100644
index 0000000..079e2ac
--- /dev/null
+++ b/pkg/cfg/lib/ir/flow_graph.dart
@@ -0,0 +1,194 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/constant_value.dart';
+import 'package:cfg/ir/dominators.dart';
+import 'package:cfg/ir/functions.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/local_variable.dart';
+import 'package:cfg/ir/loops.dart';
+import 'package:cfg/ir/use_lists.dart';
+import 'package:cfg/utils/arena.dart';
+
+/// Control-flow graph of instructions implementing a single function.
+///
+/// [FlowGraph] is also an arena to allocate use lists.
+class FlowGraph extends Uint32Arena {
+  final CFunction function;
+
+  /// Local variables used in this graph.
+  final List<LocalVariable> localVariables = [];
+
+  /// All instructions used in this graph.
+  /// [Instruction.id] is an index in this list.
+  final List<Instruction> instructions = [];
+
+  /// Empty array of uses. Used by all instructions with 0 inputs.
+  late final UsesArray emptyUsesArray = UsesArray.allocate(this, 0);
+
+  /// Mapping between constant values and corresponding [Constant]
+  /// instructions in the graph.
+  final Map<ConstantValue, Constant> _constants = {};
+
+  /// New [Constant] instructions are inserted after this instruction.
+  late Instruction _constantInsertionPoint;
+
+  /// Entry basic block in this control-flow graph.
+  late final EntryBlock entryBlock;
+
+  /// Basic block preorder.
+  final List<Block> preorder = [];
+
+  /// Basic block postorder.
+  final List<Block> postorder = [];
+
+  /// Basic block reverse postorder.
+  Iterable<Block> get reversePostorder => postorder.reversed;
+
+  /// Computed dominators.
+  Dominators? _dominators;
+
+  /// Computed loops.
+  Loops? _loops;
+
+  /// Whether this graph was converted to SSA form.
+  bool inSSAForm = false;
+
+  /// Create a new control-flow graph for the given [function].
+  FlowGraph(this.function) {
+    entryBlock = EntryBlock(this, function.sourcePosition);
+    _constantInsertionPoint = entryBlock;
+  }
+
+  /// Return a [Constant] instruction with given [value], adding it to
+  /// the graph if necessary.
+  Constant getConstant(ConstantValue value) =>
+      _constants[value] ??= _createConstant(value);
+
+  Constant _createConstant(ConstantValue value) {
+    final instr = Constant(this, value);
+    final insertionPoint = _constantInsertionPoint;
+    if (insertionPoint.next != null) {
+      instr.insertAfter(insertionPoint);
+    } else {
+      insertionPoint.appendInstruction(instr);
+    }
+    _constantInsertionPoint = instr;
+    return instr;
+  }
+
+  /// Remove given [Constant] instruction from the graph.
+  /// The instruction should be unused.
+  void removeConstant(Constant instr) {
+    assert(!instr.hasUses);
+    _constants.remove(instr.value);
+    if (instr == _constantInsertionPoint) {
+      _constantInsertionPoint = instr.previous!;
+    }
+  }
+
+  /// Populate [preorder], [postorder], [Block.predecessors],
+  /// [Block.preorderNumber] and [Block.postorderNumber].
+  void discoverBlocks() {
+    preorder.clear();
+    postorder.clear();
+
+    final stack = <(Block, int)>[];
+    _discoverBlock(null, entryBlock);
+    stack.add((entryBlock, entryBlock.successors.length - 1));
+    while (stack.isNotEmpty) {
+      final (block, successorIndex) = stack.removeLast();
+      if (successorIndex >= 0) {
+        stack.add((block, successorIndex - 1));
+        final successor = block.successors[successorIndex];
+        if (_discoverBlock(block, successor)) {
+          stack.add((successor, successor.successors.length - 1));
+        }
+      } else {
+        // All successors have been processed.
+        block.postorderNumber = postorder.length;
+        postorder.add(block);
+      }
+    }
+    assert(postorder.length == preorder.length);
+
+    invalidateDominators();
+    invalidateLoops();
+  }
+
+  /// Detect that a block has been visited as part of the current
+  /// [discoverBlocks] ([discoverBlocks] can be called multiple times).
+  /// The block will be 'marked' by (1) having a preorder number in the range of the
+  /// [preorder] and (2) being in the preorder list at that index.
+  bool _isVisited(Block block) {
+    final preorderNumber = block.preorderNumber;
+    return preorderNumber >= 0 &&
+        preorderNumber < preorder.length &&
+        preorder[preorderNumber] == block;
+  }
+
+  /// Visit control-flow edge between [predecessor] and [block].
+  ///
+  /// Must be called on all graph blocks in preorder.
+  /// Sets [Block.preorderNumber], populates [Block.predecessors] and
+  /// [FlowGraph.preorder].
+  /// Returns true when called the first time on this particular block
+  /// within one graph traversal, and false on all successive calls.
+  bool _discoverBlock(Block? predecessor, Block block) {
+    // If this block has a predecessor (i.e., is not the graph entry) we can
+    // assume the preorder array is non-empty.
+    assert(predecessor == null || preorder.isNotEmpty);
+    // Blocks with a single predecessor cannot have been reached before.
+    assert(block is JoinBlock || !_isVisited(block));
+
+    // If the block has already been reached, add current block as a
+    // basic-block predecessor and we are done.
+    if (_isVisited(block)) {
+      block.predecessors.add(predecessor!);
+      return false;
+    }
+
+    // Otherwise, clear the predecessors which might have been computed on
+    // some earlier call to DiscoverBlocks and record this predecessor.
+    block.predecessors.clear();
+    if (predecessor != null) block.predecessors.add(predecessor);
+
+    // Assign the preorder number and add the block to the list.
+    block.preorderNumber = preorder.length;
+    preorder.add(block);
+
+    return true;
+  }
+
+  /// Returns dominators for this graph, computing them if necessary.
+  Dominators get dominators => _dominators ??= computeDominators(this);
+
+  /// Invalidate all information about dominators.
+  /// Dominators will be recalculated once again when needed.
+  ///
+  /// Should be called when blocks have changed.
+  void invalidateDominators() {
+    _dominators = null;
+  }
+
+  /// Invalidate numbering of instructions which is
+  /// used to implement [Instruction.isDominatedBy].
+  /// Numbering of instructions will be recalculated once again when needed.
+  ///
+  /// Should be called when instructions were added or moved.
+  void invalidateInstructionNumbering() {
+    _dominators?.invalidateInstructionNumbering();
+  }
+
+  /// Returns loops for this graph, computing them if necessary.
+  Loops get loops => _loops ??= computeLoops(this);
+
+  /// Invalidate all information about loops.
+  /// Loops will be recalculated once again when needed.
+  ///
+  /// Should be called when blocks have changed.
+  void invalidateLoops() {
+    _loops = null;
+  }
+}
diff --git a/pkg/cfg/lib/ir/flow_graph_builder.dart b/pkg/cfg/lib/ir/flow_graph_builder.dart
new file mode 100644
index 0000000..280becd
--- /dev/null
+++ b/pkg/cfg/lib/ir/flow_graph_builder.dart
@@ -0,0 +1,422 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/constant_value.dart';
+import 'package:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/functions.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/local_variable.dart';
+import 'package:cfg/ir/source_position.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:kernel/ast.dart'
+    as ast
+    show DartType, Name, VariableDeclaration;
+
+/// Helper class to create IR instructions and populate [FlowGraph].
+///
+/// Maintains current basic block and appends newly created
+/// instructions to the end of the current block.
+///
+/// Simulates expression stack. When creating IR instructions,
+/// their inputs are populated from the expression stack.
+///
+/// Keeps current source position which is used for all
+/// created IR instructions.
+///
+/// Maintains a stack of entered try-blocks (exception handlers).
+/// All newly created basic blocks get a top exception handler.
+///
+/// All other attributes and optional inputs are passed explicitly
+/// when creating IR instructions.
+class FlowGraphBuilder {
+  /// Current graph being constructed.
+  final FlowGraph graph;
+
+  /// Source position for the new instructions.
+  SourcePosition currentSourcePosition = noPosition;
+
+  /// Simulated expression stack.
+  final List<Definition> stack = [];
+
+  /// Last instruction in the current block.
+  Instruction? _last;
+
+  /// Stack of the exception handlers.
+  List<CatchBlock> _exceptionHandlers = [];
+
+  FlowGraphBuilder(CFunction function) : graph = FlowGraph(function) {
+    _last = graph.entryBlock;
+  }
+
+  /// Finish building CFG.
+  FlowGraph done() {
+    assert(!hasOpenBlock);
+    graph.discoverBlocks();
+    return graph;
+  }
+
+  /// Start filling [block] with instructions.
+  void startBlock(Block block) {
+    _last = block;
+    if (_exceptionHandlers.isNotEmpty) {
+      block.exceptionHandler = _exceptionHandlers.last;
+    }
+  }
+
+  /// Append [instr] to the current block.
+  void appendInstruction(Instruction instr) {
+    _last!.appendInstruction(instr);
+    _last = instr;
+  }
+
+  /// End the current block.
+  void endBlock() {
+    _last = null;
+  }
+
+  /// Returns `true` if there is an unfinished basic block being built.
+  bool get hasOpenBlock => _last != null;
+
+  /// Push result of [def] into the expression stack.
+  void push(Definition def) {
+    stack.add(def);
+  }
+
+  /// Pop and return value from the top of the expression stack.
+  Definition pop() => stack.removeLast();
+
+  /// Returns value from the top of the expression stack without removing it.
+  Definition get stackTop => stack.last;
+
+  /// Pop [count] values from the expression stack and
+  /// use them as `first ... first + count - 1` inputs of [instr]
+  /// (in the reverse order).
+  void popInputs(Instruction instr, int first, int count) {
+    for (int i = count - 1; i >= 0; --i) {
+      instr.setInputAt(first + i, pop());
+    }
+  }
+
+  /// Pop [count] values from the expression stack.
+  void drop(int count) {
+    stack.removeRange(stack.length - count, stack.length);
+  }
+
+  /// Create a new [JoinBlock].
+  JoinBlock newJoinBlock() => JoinBlock(graph, currentSourcePosition);
+
+  /// Create a new [TargetBlock].
+  TargetBlock newTargetBlock() => TargetBlock(graph, currentSourcePosition);
+
+  /// Create a new [CatchBlock].
+  CatchBlock newCatchBlock() => CatchBlock(graph, currentSourcePosition);
+
+  /// Append [Goto] to the graph. Ends current block.
+  void addGoto(Block target) {
+    final instr = Goto(graph, currentSourcePosition);
+    appendInstruction(instr);
+    final currentBlock = instr.block!;
+    assert(currentBlock.successors.isEmpty);
+    currentBlock.successors.add(target);
+    endBlock();
+  }
+
+  /// Append [Branch] to the graph. Ends current block.
+  void addBranch(TargetBlock trueSuccessor, TargetBlock falseSuccessor) {
+    final instr = Branch(graph, currentSourcePosition, pop());
+    appendInstruction(instr);
+    final currentBlock = instr.block!;
+    assert(currentBlock.successors.isEmpty);
+    currentBlock.successors.add(trueSuccessor);
+    currentBlock.successors.add(falseSuccessor);
+    endBlock();
+  }
+
+  /// Append [TryEntry] to the graph. Ends current block.
+  void addTryEntry(TargetBlock tryBody, CatchBlock catchBlock) {
+    final instr = TryEntry(graph, currentSourcePosition);
+    appendInstruction(instr);
+    final currentBlock = instr.block!;
+    assert(currentBlock.successors.isEmpty);
+    currentBlock.successors.add(tryBody);
+    currentBlock.successors.add(catchBlock);
+    endBlock();
+  }
+
+  /// Enter try-block with given [exceptionHandler].
+  void enterTryBlock(CatchBlock exceptionHandler) {
+    _exceptionHandlers.add(exceptionHandler);
+  }
+
+  /// Leave the last entered try-block.
+  void leaveTryBlock() {
+    _exceptionHandlers.removeLast();
+  }
+
+  /// Append [Return] to the graph. Ends current block.
+  void addReturn() {
+    final value = pop();
+    final instr = Return(graph, currentSourcePosition, value);
+    appendInstruction(instr);
+    endBlock();
+  }
+
+  /// Append [Comparison] to the graph.
+  Comparison addComparison(ComparisonOpcode op) {
+    final right = pop();
+    final left = pop();
+    final instr = Comparison(graph, currentSourcePosition, op, left, right);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [Constant] to the entry block of the graph.
+  Constant addConstant(ConstantValue value) {
+    final instr = graph.getConstant(value);
+    if (instr.previous == _last) {
+      _last = instr;
+    }
+    push(instr);
+    return instr;
+  }
+
+  /// Append `null` [Constant].
+  Constant addNullConstant() => addConstant(ConstantValue.fromNull());
+
+  /// Append `int` [Constant] with given [value].
+  Constant addIntConstant(int value) =>
+      addConstant(ConstantValue.fromInt(value));
+
+  /// Append `bool` [Constant] with given [value].
+  Constant addBoolConstant(bool value) =>
+      addConstant(ConstantValue.fromBool(value));
+
+  /// Append [DirectCall] to the graph.
+  DirectCall addDirectCall(CFunction target, int inputCount, CType type) {
+    final instr = DirectCall(
+      graph,
+      currentSourcePosition,
+      target,
+      inputCount,
+      type,
+    );
+    popInputs(instr, 0, inputCount);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [InterfaceCall] to the graph.
+  InterfaceCall addInterfaceCall(
+    CFunction interfaceTarget,
+    int inputCount,
+    CType type,
+  ) {
+    final instr = InterfaceCall(
+      graph,
+      currentSourcePosition,
+      interfaceTarget,
+      inputCount,
+      type,
+    );
+    popInputs(instr, 0, inputCount);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [DynamicCall] to the graph.
+  DynamicCall addDynamicCall(
+    ast.Name selector,
+    DynamicCallKind kind,
+    int inputCount,
+  ) {
+    final instr = DynamicCall(
+      graph,
+      currentSourcePosition,
+      selector,
+      kind,
+      inputCount,
+    );
+    popInputs(instr, 0, inputCount);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Add [LocalVariable] to the graph.
+  LocalVariable declareLocalVariable(
+    String name,
+    ast.VariableDeclaration? declaration,
+    CType type,
+  ) {
+    final v = LocalVariable(
+      name,
+      declaration,
+      graph.localVariables.length,
+      type,
+    );
+    graph.localVariables.add(v);
+    return v;
+  }
+
+  /// Append [Parameter] instruction to the graph.
+  Parameter addParameter(LocalVariable variable) {
+    final instr = Parameter(graph, currentSourcePosition, variable);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [LoadLocal] to the graph.
+  LoadLocal addLoadLocal(LocalVariable variable) {
+    final instr = LoadLocal(graph, currentSourcePosition, variable);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [StoreLocal] to the graph.
+  ///
+  /// If [leaveValueOnStack] is `true`, then the stored value is left
+  /// on top of the expression stack.
+  void addStoreLocal(LocalVariable variable, {bool leaveValueOnStack = false}) {
+    final value = pop();
+    final instr = StoreLocal(graph, currentSourcePosition, variable, value);
+    if (leaveValueOnStack) {
+      push(value);
+    }
+    appendInstruction(instr);
+  }
+
+  /// Append [Throw] taking an exception as input to the graph.
+  /// Ends current block.
+  void addThrow() {
+    final exception = pop();
+    final instr = Throw(graph, currentSourcePosition, exception, null);
+    appendInstruction(instr);
+    endBlock();
+  }
+
+  /// Append [Throw] taking an exception and stack trace as inputs to
+  /// the graph. Ends current block.
+  void addRethrow() {
+    final stackTrace = pop();
+    final exception = pop();
+    final instr = Throw(graph, currentSourcePosition, exception, stackTrace);
+    appendInstruction(instr);
+    endBlock();
+  }
+
+  /// Append [TypeParameters] to the graph.
+  ///
+  /// Optional [receiver] input should be passed if there are class type
+  /// parameters in scope.
+  TypeParameters addTypeParameters({Definition? receiver}) {
+    final instr = TypeParameters(graph, currentSourcePosition, receiver);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [TypeCast] to the graph.
+  ///
+  /// Optional [typeParameters] input should be passed if tested type
+  /// depends on type parameters (not fully instantiated).
+  ///
+  /// Optional [isChecked] argument indicates if this type cast involves
+  /// check at runtime.
+  TypeCast addTypeCast(
+    CType testedType, {
+    Definition? typeParameters,
+    bool isChecked = true,
+  }) {
+    final object = pop();
+    final instr = TypeCast(
+      graph,
+      currentSourcePosition,
+      object,
+      testedType,
+      typeParameters,
+      isChecked: isChecked,
+    );
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [TypeTest] to the graph.
+  ///
+  /// Optional [typeParameters] input should be passed if tested type
+  /// depends on type parameters (not fully instantiated).
+  TypeTest addTypeTest(CType testedType, {Definition? typeParameters}) {
+    final object = pop();
+    final instr = TypeTest(
+      graph,
+      currentSourcePosition,
+      object,
+      testedType,
+      typeParameters,
+    );
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [TypeArguments] to the graph.
+  ///
+  /// Optional [typeParameters] input should be passed if type arguments
+  /// depend on type parameters (not fully instantiated).
+  TypeArguments addTypeArguments(
+    List<ast.DartType> types, {
+    Definition? typeParameters,
+  }) {
+    final instr = TypeArguments(
+      graph,
+      currentSourcePosition,
+      types,
+      typeParameters,
+    );
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [BinaryIntOp] to the graph.
+  BinaryIntOp addBinaryIntOp(BinaryIntOpcode op) {
+    final right = pop();
+    final left = pop();
+    final instr = BinaryIntOp(graph, currentSourcePosition, op, left, right);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [UnaryIntOp] to the graph.
+  UnaryIntOp addUnaryIntOp(UnaryIntOpcode op) {
+    final operand = pop();
+    final instr = UnaryIntOp(graph, currentSourcePosition, op, operand);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [BinaryDoubleOp] to the graph.
+  BinaryDoubleOp addBinaryDoubleOp(BinaryDoubleOpcode op) {
+    final right = pop();
+    final left = pop();
+    final instr = BinaryDoubleOp(graph, currentSourcePosition, op, left, right);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+
+  /// Append [UnaryDoubleOp] to the graph.
+  UnaryDoubleOp addUnaryDoubleOp(UnaryDoubleOpcode op) {
+    final operand = pop();
+    final instr = UnaryDoubleOp(graph, currentSourcePosition, op, operand);
+    push(instr);
+    appendInstruction(instr);
+    return instr;
+  }
+}
diff --git a/pkg/cfg/lib/ir/flow_graph_checker.dart b/pkg/cfg/lib/ir/flow_graph_checker.dart
new file mode 100644
index 0000000..0b79f87
--- /dev/null
+++ b/pkg/cfg/lib/ir/flow_graph_checker.dart
@@ -0,0 +1,348 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/instructions.dart';
+import 'package:cfg/ir/ir_to_text.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:cfg/ir/use_lists.dart';
+import 'package:cfg/ir/visitor.dart';
+import 'package:cfg/passes/pass.dart';
+
+/// Check integrity of the flow graph.
+final class FlowGraphChecker extends Pass implements InstructionVisitor<void> {
+  bool constantsAllowed = false;
+  bool parametersAllowed = false;
+  bool phisAllowed = false;
+
+  FlowGraphChecker([super.name = 'FlowGraphChecker']);
+
+  @override
+  void run() {
+    assert(graph.postorder.length == graph.preorder.length);
+    assert(graph.reversePostorder.length == graph.preorder.length);
+
+    for (final block in graph.preorder) {
+      currentBlock = block;
+      block.accept(this);
+    }
+  }
+
+  void visitBlock(Block block) {
+    assert(block.previous == null);
+    assert(block.block == block);
+    assert(block.graph == graph);
+    assert(graph.preorder[block.preorderNumber] == block);
+    assert(graph.postorder[block.postorderNumber] == block);
+
+    // Constants are only allowed at the beginning of EntryBlock.
+    constantsAllowed = block is EntryBlock;
+    // Parameters are allowed in the beginning of CatchBlock, or
+    // after Constants in the EntryBlock.
+    parametersAllowed = block is CatchBlock;
+    // Phis are only allowed at the beginning of JoinBlock.
+    phisAllowed = block is JoinBlock;
+
+    Instruction previous = block;
+    for (final instr in block) {
+      currentInstruction = instr;
+      assert(graph.instructions[instr.id] == instr);
+      assert(instr.previous == previous);
+      assert(previous.next == instr);
+      assert(instr.block == block);
+      assert(instr.graph == graph);
+      assert(instr.isInGraph);
+      if (constantsAllowed && instr is! Constant) {
+        constantsAllowed = false;
+        parametersAllowed = true;
+      }
+      if (parametersAllowed && instr is! Parameter) {
+        parametersAllowed = false;
+      }
+      if (phisAllowed && instr is! Phi) {
+        phisAllowed = false;
+      }
+      instr.accept(this);
+      verifyInputs(instr);
+      if (instr is Definition) {
+        verifyUses(instr);
+      }
+      previous = instr;
+    }
+    assert(previous is ControlFlowInstruction);
+    assert(previous.next == null);
+    assert(previous == block.lastInstruction);
+    currentInstruction = null;
+  }
+
+  void verifyInputs(Instruction instr) {
+    for (int i = 0, n = instr.inputCount; i < n; ++i) {
+      final input = instr.inputAt(i);
+      assert(input.getInstruction(graph) == instr);
+      final def = input.getDefinition(graph);
+      // Check that input can be found in the use list of 'def'.
+      var seen = false;
+      for (final use in def.inputUses) {
+        if (use == input) {
+          assert(!seen);
+          seen = true;
+        }
+      }
+      assert(seen);
+      // Check that every use is dominated by def.
+      if (instr is Phi) {
+        assert(instr.block!.predecessors[i].lastInstruction.isDominatedBy(def));
+      } else {
+        assert(instr.isDominatedBy(def));
+      }
+    }
+  }
+
+  void verifyUses(Definition def) {
+    Use previous = Use.Null;
+    for (final use in def.inputUses) {
+      assert(use != Use.Null);
+      assert(use.getDefinition(graph) == def);
+      assert(use.getPrevious(graph) == previous);
+      if (previous != Use.Null) {
+        assert(previous.getNext(graph) == use);
+      }
+      previous = use;
+    }
+    if (previous != Use.Null) {
+      assert(previous.getNext(graph) == Use.Null);
+    }
+  }
+
+  @override
+  void visitEntryBlock(EntryBlock block) {
+    assert(block == graph.entryBlock);
+    assert(block.predecessors.isEmpty);
+    assert(graph.preorder.first == block);
+    assert(graph.postorder.last == block);
+    assert(graph.reversePostorder.first == block);
+    visitBlock(block);
+  }
+
+  @override
+  void visitJoinBlock(JoinBlock block) {
+    assert(block.predecessors.isNotEmpty);
+    for (final pred in block.predecessors) {
+      assert(pred.lastInstruction is Goto);
+      assert(pred.successors.single == block);
+    }
+    visitBlock(block);
+  }
+
+  @override
+  void visitTargetBlock(TargetBlock block) {
+    final predecessor = block.predecessors.single;
+    assert(block.dominator == predecessor);
+    final predLast = predecessor.lastInstruction;
+    switch (predLast) {
+      case Goto():
+        assert(predLast.target == block);
+      case Branch():
+        assert(
+          predLast.trueSuccessor == block || predLast.falseSuccessor == block,
+        );
+      case CompareAndBranch():
+        assert(
+          predLast.trueSuccessor == block || predLast.falseSuccessor == block,
+        );
+      case TryEntry():
+        assert(predLast.tryBody == block);
+      default:
+        assert(false);
+    }
+    visitBlock(block);
+  }
+
+  @override
+  void visitCatchBlock(CatchBlock block) {
+    final predecessor = block.predecessors.single;
+    assert(block.dominator == predecessor);
+    final predLast = predecessor.lastInstruction as TryEntry;
+    assert(predLast.catchBlock == block);
+    visitBlock(block);
+  }
+
+  @override
+  void visitGoto(Goto instr) {
+    assert(instr.next == null);
+    final target = instr.target;
+    assert(instr.block!.successors.single == target);
+    assert(target is TargetBlock || target is JoinBlock);
+  }
+
+  @override
+  void visitBranch(Branch instr) {
+    assert(instr.condition.type is BoolType);
+    assert(instr.next == null);
+    final trueSuccessor = instr.trueSuccessor;
+    final falseSuccessor = instr.falseSuccessor;
+    assert(instr.block!.successors.length == 2);
+    assert(instr.block!.successors[0] == trueSuccessor);
+    assert(instr.block!.successors[1] == falseSuccessor);
+  }
+
+  @override
+  void visitCompareAndBranch(CompareAndBranch instr) {
+    if (instr.op.isIntComparison) {
+      assert(instr.left.type is IntType);
+      assert(instr.right.type is IntType);
+    } else if (instr.op.isDoubleComparison) {
+      assert(instr.left.type is DoubleType);
+      assert(instr.right.type is DoubleType);
+    }
+    assert(instr.next == null);
+    final trueSuccessor = instr.trueSuccessor;
+    final falseSuccessor = instr.falseSuccessor;
+    assert(instr.block!.successors.length == 2);
+    assert(instr.block!.successors[0] == trueSuccessor);
+    assert(instr.block!.successors[1] == falseSuccessor);
+  }
+
+  @override
+  void visitTryEntry(TryEntry instr) {
+    assert(instr.next == null);
+    final tryBody = instr.tryBody;
+    final catchBlock = instr.catchBlock;
+    assert(instr.block!.successors.length == 2);
+    assert(instr.block!.successors[0] == tryBody);
+    assert(instr.block!.successors[1] == catchBlock);
+  }
+
+  @override
+  void visitPhi(Phi instr) {
+    assert(phisAllowed);
+    assert(instr.block is JoinBlock);
+    assert(instr.inputCount == instr.block!.predecessors.length);
+    assert(instr.variable == graph.localVariables[instr.variable.index]);
+  }
+
+  @override
+  void visitReturn(Return instr) {
+    assert(instr.next == null);
+    assert(instr.block!.successors.isEmpty);
+  }
+
+  @override
+  void visitConstant(Constant instr) {
+    assert(constantsAllowed);
+    assert(instr.block is EntryBlock);
+    assert(graph.getConstant(instr.value) == instr);
+  }
+
+  @override
+  void visitDirectCall(DirectCall instr) {}
+
+  @override
+  void visitInterfaceCall(InterfaceCall instr) {}
+
+  @override
+  void visitDynamicCall(DynamicCall instr) {}
+
+  @override
+  void visitParameter(Parameter instr) {
+    assert(parametersAllowed);
+    final block = instr.block!;
+    assert(block is EntryBlock || block is CatchBlock);
+    assert(instr.variable == graph.localVariables[instr.variable.index]);
+  }
+
+  @override
+  void visitLoadLocal(LoadLocal instr) {
+    assert(!graph.inSSAForm);
+    assert(instr.variable == graph.localVariables[instr.variable.index]);
+  }
+
+  @override
+  void visitStoreLocal(StoreLocal instr) {
+    assert(!graph.inSSAForm);
+    assert(instr.variable == graph.localVariables[instr.variable.index]);
+  }
+
+  @override
+  void visitThrow(Throw instr) {
+    assert(instr.next == null);
+    assert(instr.block!.successors.isEmpty);
+    assert(instr.canThrow);
+  }
+
+  @override
+  void visitTypeParameters(TypeParameters instr) {
+    // TypeParameters can only be used in TypeCast, TypeTest and TypeArguments.
+    for (final use in instr.inputUses) {
+      final user = use.getInstruction(graph);
+      switch (user) {
+        case TypeCast():
+          assert(instr == user.typeParameters);
+        case TypeTest():
+          assert(instr == user.typeParameters);
+        case TypeArguments():
+          assert(instr == user.typeParameters);
+        default:
+          throw 'Unexpected user ${IrToText.instruction(user)} of TypeParameters';
+      }
+    }
+  }
+
+  @override
+  void visitTypeCast(TypeCast instr) {
+    assert(instr.testedType is! TopType);
+    assert(instr.testedType is! ExtendedType);
+  }
+
+  @override
+  void visitTypeTest(TypeTest instr) {
+    assert(instr.testedType is! TopType);
+    assert(instr.testedType is! ExtendedType);
+  }
+
+  @override
+  void visitTypeArguments(TypeArguments instr) {
+    // TypeArguments can only be used as the first input in a call.
+    for (final use in instr.inputUses) {
+      final user = use.getInstruction(graph) as CallInstruction;
+      assert(user.hasTypeArguments);
+      assert(user.typeArguments == instr);
+    }
+  }
+
+  @override
+  void visitComparison(Comparison instr) {
+    if (instr.op.isIntComparison) {
+      assert(instr.left.type is IntType);
+      assert(instr.right.type is IntType);
+    } else if (instr.op.isDoubleComparison) {
+      assert(instr.left.type is DoubleType);
+      assert(instr.right.type is DoubleType);
+    }
+  }
+
+  @override
+  void visitBinaryIntOp(BinaryIntOp instr) {
+    assert(instr.left.type is IntType);
+    assert(instr.right.type is IntType);
+  }
+
+  @override
+  void visitUnaryIntOp(UnaryIntOp instr) {
+    assert(instr.operand.type is IntType);
+  }
+
+  @override
+  void visitBinaryDoubleOp(BinaryDoubleOp instr) {
+    assert(instr.left.type is DoubleType);
+    assert(instr.right.type is DoubleType);
+  }
+
+  @override
+  void visitUnaryDoubleOp(UnaryDoubleOp instr) {
+    assert(instr.operand.type is DoubleType);
+  }
+
+  @override
+  void visitParallelMove(ParallelMove instr) {}
+}
diff --git a/pkg/cfg/lib/ir/instructions.dart b/pkg/cfg/lib/ir/instructions.dart
new file mode 100644
index 0000000..8eaca2b
--- /dev/null
+++ b/pkg/cfg/lib/ir/instructions.dart
@@ -0,0 +1,1270 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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 ast show DartType, Name;
+import 'package:cfg/ir/constant_value.dart';
+import 'package:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/functions.dart';
+import 'package:cfg/ir/local_variable.dart';
+import 'package:cfg/ir/loops.dart';
+import 'package:cfg/ir/source_position.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:cfg/ir/use_lists.dart';
+import 'package:cfg/ir/visitor.dart';
+import 'package:cfg/utils/misc.dart';
+
+/// Base class for all instructions.
+abstract base class Instruction {
+  /// Enclosing control-flow graph.
+  final FlowGraph graph;
+
+  /// Index in the [FlowGraph.instructions].
+  final int id;
+
+  /// Source position associated with this instruction.
+  final SourcePosition sourcePosition;
+
+  /// Explicit inputs.
+  final UsesArray _inputs;
+
+  /// Enclosing basic block.
+  Block? block;
+
+  /// Next instruction in basic block.
+  Instruction? next;
+
+  /// Previous instruction in basic block.
+  Instruction? previous;
+
+  /// Values implicitly used by this instruction
+  /// e.g. for exception handling and deoptimization).
+  UsesArray? implicitInputs;
+
+  /// Create a new instruction.
+  ///
+  /// The newly created instruction belongs to [graph] but not linked into
+  /// a basic block and uses lists.
+  Instruction(this.graph, this.sourcePosition, int inputCount)
+    : id = graph.instructions.length,
+      _inputs = inputCount == 0
+          ? graph.emptyUsesArray
+          : UsesArray.allocate(graph, inputCount) {
+    for (var i = 0; i < inputCount; ++i) {
+      _inputs.at(graph, i).init(graph, this);
+    }
+    graph.instructions.add(this);
+  }
+
+  /// Returns true if this instruction is linked into a list of instructions
+  /// in a basic block (also imlplies inputs are linked in their use lists).
+  bool get isInGraph => block != null;
+
+  /// Number of explicit inputs.
+  int get inputCount => _inputs.getLength(graph);
+
+  /// [Use] corresponding to an [i]-th explicit input.
+  Use inputAt(int i) => _inputs.at(graph, i);
+
+  /// [Definition] of [i]-th explicit input.
+  Definition inputDefAt(int i) => inputAt(i).getDefinition(graph);
+
+  /// Set [i]-th input to the given [value]. Can be done only once.
+  void setInputAt(int i, Definition value) {
+    final input = inputAt(i);
+    assert(input.getNext(graph) == Use.Null);
+    assert(input.getPrevious(graph) == Use.Null);
+    input.setDefinition(graph, value);
+  }
+
+  /// Replace [i]-th input with [value]. This instruction should be
+  /// linked into a basic block.
+  void replaceInputAt(int i, Definition value) {
+    assert(isInGraph);
+    removeInputFromUseList(i);
+    setInputAt(i, value);
+    addInputToUseList(i);
+  }
+
+  /// Reduce number of inputs to [newInputCount].
+  void truncateInputs(int newInputCount) {
+    _inputs.truncateTo(graph, newInputCount);
+  }
+
+  /// Link this instruction to the [next] instruction in basic block.
+  void linkTo(Instruction next) {
+    assert(!identical(this, next));
+    this.next = next;
+    next.previous = this;
+    next.block = this.block;
+  }
+
+  /// Add [inputIndex]-th input to use list of its definition.
+  ///
+  /// This is a low-level operation which is rarely needed.
+  /// Prefer using [appendInstruction] or [insertAfter].
+  void addInputToUseList(int inputIndex) {
+    final input = inputAt(inputIndex);
+    assert(input.getNext(graph) == Use.Null);
+    assert(input.getPrevious(graph) == Use.Null);
+    final def = input.getDefinition(graph);
+    final nextUse = def._inputUses;
+    if (nextUse != Use.Null) {
+      assert(nextUse.getPrevious(graph) == Use.Null);
+      input.setNext(graph, nextUse);
+      nextUse.setPrevious(graph, input);
+    }
+    def._inputUses = input;
+  }
+
+  void _addInputsToUseLists() {
+    for (int i = 0, n = inputCount; i < n; ++i) {
+      addInputToUseList(i);
+    }
+    assert(implicitInputs == null);
+  }
+
+  /// Remove [inputIndex]-th input from use list of its definition.
+  ///
+  /// This is a low-level operation which is rarely needed.
+  /// Prefer using [replaceInputAt] or [removeFromGraph].
+  void removeInputFromUseList(int inputIndex) {
+    final input = inputAt(inputIndex);
+    assert(input.getInstruction(graph) == this);
+    final nextUse = input.getNext(graph);
+    final prevUse = input.getPrevious(graph);
+    if (prevUse == Use.Null) {
+      final def = input.getDefinition(graph);
+      assert(def._inputUses == input);
+      def._inputUses = nextUse;
+    } else {
+      prevUse.setNext(graph, nextUse);
+    }
+    if (nextUse != Use.Null) {
+      nextUse.setPrevious(graph, prevUse);
+    }
+    input.setNext(graph, Use.Null);
+    input.setPrevious(graph, Use.Null);
+  }
+
+  /// Remove all inputs from their use lists.
+  void removeInputsFromUseLists() {
+    for (int i = 0, n = inputCount; i < n; ++i) {
+      removeInputFromUseList(i);
+    }
+  }
+
+  /// Append an unlinked [instr] after this instruction,
+  /// which should be the last instruction appended into basic block.
+  ///
+  /// Also, add all inputs of [instr] to their use lists.
+  void appendInstruction(Instruction instr) {
+    assert(isInGraph);
+    assert(!instr.isInGraph);
+    assert(this.next == null);
+    assert(this.block!.lastInstruction == this);
+    assert(instr.next == null);
+    assert(instr.previous == null);
+    assert(instr.block == null);
+    linkTo(instr);
+    instr._addInputsToUseLists();
+    block!.lastInstruction = instr;
+  }
+
+  /// Insert this instruction between [previous] and [previous.next].
+  /// (which should be linked into a basic block).
+  ///
+  /// If [addInputsToUseLists], then also add all inputs to their use lists.
+  void insertAfter(Instruction previous, {bool addInputsToUseLists = true}) {
+    assert(previous.isInGraph);
+    assert(!isInGraph);
+    final next = previous.next!;
+    assert(previous.block != null);
+    assert(this.next == null);
+    assert(this.previous == null);
+    assert(this.block == null);
+
+    this.previous = previous;
+    this.next = next;
+    this.block = previous.block;
+    next.previous = this;
+    previous.next = this;
+
+    if (addInputsToUseLists) {
+      _addInputsToUseLists();
+    }
+  }
+
+  /// Insert this instruction between [next.previous] and [next].
+  /// (which should be linked into a basic block).
+  ///
+  /// If [addInputsToUseLists], then also add all inputs to their use lists.
+  void insertBefore(Instruction next, {bool addInputsToUseLists = true}) {
+    assert(next.isInGraph);
+    insertAfter(next.previous!, addInputsToUseLists: addInputsToUseLists);
+  }
+
+  /// Unlink this instruction from its basic block and use lists.
+  void removeFromGraph() {
+    assert(isInGraph);
+    assert(block != null);
+    assert(this != block);
+
+    removeInputsFromUseLists();
+    final next = this.next;
+    final previous = this.previous!;
+    previous.next = next;
+    if (next != null) {
+      next.previous = previous;
+    } else {
+      assert(this is ControlFlowInstruction);
+      assert(this == block!.lastInstruction);
+      block!.lastInstruction = previous;
+    }
+    this.next = null;
+    this.previous = null;
+    this.block = null;
+    assert(!isInGraph);
+  }
+
+  /// Whether this instruction can potentially throw a Dart exception.
+  bool get canThrow;
+
+  /// Whether this instruction can have any visible side-effects.
+  bool get hasSideEffects;
+
+  /// Returns true if this instruction is idempotent (i.e.
+  /// repeating this instruction does not have any effect),
+  /// and it is a subject to value numbering.
+  bool get isIdempotent => false;
+
+  /// Returns true if extra instruction attributes are equal.
+  /// Used only for idempotent instructions of the same type.
+  bool attributesEqual(Instruction other) =>
+      throw 'Not implemented for ${runtimeType}';
+
+  /// Return true if [other] dominates this instruction, i.e. every path from
+  /// graph entry to this instruction goes through [other].
+  bool isDominatedBy(Instruction other) =>
+      graph.dominators.isDominatedBy(this, other);
+
+  R accept<R>(InstructionVisitor<R> v);
+}
+
+/// Trait of instructions which can potentially throw Dart exceptions.
+base mixin CanThrow on Instruction {
+  bool get canThrow => true;
+}
+
+/// Trait of instructions which cannot throw Dart exceptions.
+base mixin NoThrow on Instruction {
+  bool get canThrow => false;
+}
+
+/// Trait of instructions which can have visible side-effects.
+base mixin HasSideEffects on Instruction {
+  bool get hasSideEffects => true;
+}
+
+/// Trait of instructions which do not have any side-effects.
+base mixin Pure on Instruction {
+  bool get hasSideEffects => false;
+}
+
+/// Trait of idempotent instructions.
+base mixin Idempotent on Instruction {
+  bool get isIdempotent => true;
+}
+
+/// Base class for instructions which yield a value.
+abstract base class Definition extends Instruction {
+  Use _inputUses = Use.Null;
+  Use _implicitUses = Use.Null;
+
+  Definition(super.graph, super.sourcePosition, super.inputCount);
+
+  UsesIterable get inputUses => UsesIterable(graph, _inputUses);
+  UsesIterable get implicitUses => UsesIterable(graph, _implicitUses);
+
+  bool get hasInputUses => _inputUses != Use.Null;
+  bool get hasImplicitUses => _implicitUses != Use.Null;
+  bool get hasUses => hasInputUses || hasImplicitUses;
+
+  /// Replace all uses of this instruction with [other].
+  void replaceUsesWith(Definition other) {
+    if (hasInputUses) {
+      Use last = Use.Null;
+      for (final use in inputUses) {
+        use.setDefinition(graph, other);
+        last = use;
+      }
+      final tail = other._inputUses;
+      last.setNext(graph, tail);
+      if (tail != Use.Null) {
+        tail.setPrevious(graph, last);
+      }
+      other._inputUses = this._inputUses;
+      this._inputUses = Use.Null;
+    }
+    if (hasImplicitUses) {
+      Use last = Use.Null;
+      for (final use in implicitUses) {
+        use.setDefinition(graph, other);
+        last = use;
+      }
+      final tail = other._implicitUses;
+      last.setNext(graph, tail);
+      if (tail != Use.Null) {
+        tail.setPrevious(graph, last);
+      }
+      other._implicitUses = this._implicitUses;
+      this._implicitUses = Use.Null;
+    }
+  }
+
+  /// Result type of this instruction.
+  CType get type;
+
+  /// Whether this instruction can yield a zero value.
+  bool get canBeZero => true;
+
+  /// Whether this instruction can yield a negative value.
+  bool get canBeNegative => true;
+
+  /// Returns the only instruction which uses result of this instruction as
+  /// an explicit input.
+  ///
+  /// Returns `null` if there are no or multiple uses.
+  Instruction? get singleUser {
+    if (hasInputUses && !hasImplicitUses) {
+      final use = _inputUses;
+      if (use.getNext(graph) == Use.Null) {
+        return use.getInstruction(graph);
+      }
+    }
+    return null;
+  }
+}
+
+/// Forward iterator over instructions in the block.
+final class _InstructionsIterator implements Iterator<Instruction> {
+  Instruction? _current;
+  Instruction? _next;
+
+  _InstructionsIterator(this._next);
+
+  @override
+  bool moveNext() {
+    _current = _next;
+    _next = _current?.next;
+    return (_current != null);
+  }
+
+  @override
+  Instruction get current => _current!;
+}
+
+/// Backwards iterator over instructions in the block.
+final class _ReverseInstructionsIterator implements Iterator<Instruction> {
+  Instruction? _current;
+  Instruction _previous;
+
+  _ReverseInstructionsIterator(this._previous);
+
+  @override
+  bool moveNext() {
+    final instr = _previous.previous;
+    if (instr == null) {
+      assert(_previous is Block);
+      _current = null;
+      return false;
+    } else {
+      _current = _previous;
+      _previous = instr;
+      return true;
+    }
+  }
+
+  @override
+  Instruction get current => _current!;
+}
+
+/// Iterable for backwards iteration of instructions in the block.
+final class _ReverseInstructionsIterable extends Iterable<Instruction> {
+  final Block _block;
+
+  _ReverseInstructionsIterable(this._block);
+
+  @override
+  Iterator<Instruction> get iterator =>
+      _ReverseInstructionsIterator(_block.lastInstruction);
+}
+
+/// Basic block.
+abstract base class Block extends Instruction
+    with NoThrow, Pure, Iterable<Instruction> {
+  final List<Block> predecessors = [];
+  final List<Block> successors = [];
+  late Instruction lastInstruction;
+  CatchBlock? exceptionHandler;
+
+  int preorderNumber = -1;
+  int postorderNumber = -1;
+
+  Block(FlowGraph graph, SourcePosition sourcePosition)
+    : super(graph, sourcePosition, 0) {
+    this.block = this;
+    this.lastInstruction = this;
+  }
+
+  Block? get dominator {
+    int idom = graph.dominators.idom[preorderNumber];
+    return (idom < 0) ? null : graph.preorder[idom];
+  }
+
+  List<Block> get dominatedBlocks => graph.dominators.dominated[preorderNumber];
+
+  Loop? get loop => graph.loops[this];
+
+  int get loopDepth => loop?.depth ?? 0;
+
+  /// Replace [oldPredecessor] with [newPredecessor].
+  void replacePredecessor(Block oldPredecessor, Block newPredecessor) {
+    final predecessors = this.predecessors;
+    for (int i = 0, n = predecessors.length; i < n; ++i) {
+      if (predecessors[i] == oldPredecessor) {
+        predecessors[i] = newPredecessor;
+      }
+    }
+  }
+
+  /// Iterate over instructions in the block from the first to the last.
+  /// Iteration is robust wrt removal of the current instruction.
+  @override
+  Iterator<Instruction> get iterator => _InstructionsIterator(next);
+
+  /// Iterate over instructions in the block from the last to the first.
+  /// Iteration is robust wrt removal of the current instruction.
+  Iterable<Instruction> get reversed => _ReverseInstructionsIterable(this);
+}
+
+/// The entry block in the [FlowGraph].
+///
+/// Contains all [Constant] instructions and [Parameter] instructions
+/// corresponding to the function parameters.
+final class EntryBlock extends Block {
+  EntryBlock(super.graph, super.sourcePosition);
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitEntryBlock(this);
+}
+
+/// Iterator over [Phi] instructions in the [JoinBlock].
+final class _PhiIterator implements Iterator<Phi> {
+  Phi? _current;
+  Phi? _next;
+
+  _PhiIterator(JoinBlock block) {
+    final nextInstruction = block.next;
+    _next = (nextInstruction is Phi) ? nextInstruction : null;
+  }
+
+  @override
+  bool moveNext() {
+    _current = _next;
+    final nextInstruction = _current?.next;
+    _next = (nextInstruction is Phi) ? nextInstruction : null;
+    return (_current != null);
+  }
+
+  @override
+  Phi get current => _current!;
+}
+
+/// Iterable over [Phi] instructions in the [JoinBlock].
+final class _PhiIterable extends Iterable<Phi> {
+  final JoinBlock _block;
+
+  _PhiIterable(this._block);
+
+  @override
+  Iterator<Phi> get iterator => _PhiIterator(_block);
+}
+
+/// Basic block which can have multiple predecessors.
+///
+/// May contain [Phi] instructions in the beginning of the block.
+final class JoinBlock extends Block {
+  JoinBlock(super.graph, super.sourcePosition);
+
+  Iterable<Phi> get phis => _PhiIterable(this);
+
+  bool get hasPhis => next is Phi;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitJoinBlock(this);
+}
+
+/// Target block of a branch.
+final class TargetBlock extends Block {
+  TargetBlock(super.graph, super.sourcePosition);
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitTargetBlock(this);
+}
+
+/// Exception handler block.
+///
+/// May contain [Parameter] instructions in the beginning of the block
+/// to represent incoming values of local variables, exception object and
+/// stack trace.
+final class CatchBlock extends Block {
+  CatchBlock(super.graph, super.sourcePosition);
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitCatchBlock(this);
+}
+
+/// Marker interface for instructions which can end basic block.
+abstract class ControlFlowInstruction {}
+
+/// Unconditional jump to the sole successor of this basic block.
+final class Goto extends Instruction
+    with NoThrow, Pure
+    implements ControlFlowInstruction {
+  Goto(FlowGraph graph, SourcePosition sourcePosition)
+    : super(graph, sourcePosition, 0);
+
+  Block get target => block!.successors.single;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitGoto(this);
+}
+
+/// Conditional branch to either true of false successors of this basic block.
+final class Branch extends Instruction
+    with NoThrow, Pure
+    implements ControlFlowInstruction {
+  Branch(FlowGraph graph, SourcePosition sourcePosition, Definition condition)
+    : super(graph, sourcePosition, 1) {
+    setInputAt(0, condition);
+  }
+
+  Definition get condition => inputDefAt(0);
+  TargetBlock get trueSuccessor => block!.successors[0] as TargetBlock;
+  TargetBlock get falseSuccessor => block!.successors[1] as TargetBlock;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitBranch(this);
+}
+
+/// Unconditional jump to the try block body (the first succesor of this
+/// basic block). The second successor of this basic block is a catch block.
+final class TryEntry extends Instruction
+    with NoThrow, Pure
+    implements ControlFlowInstruction {
+  TryEntry(FlowGraph graph, SourcePosition sourcePosition)
+    : super(graph, sourcePosition, 0);
+
+  TargetBlock get tryBody => block!.successors[0] as TargetBlock;
+  CatchBlock get catchBlock => block!.successors[1] as CatchBlock;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitTryEntry(this);
+}
+
+/// The result of instruction `v = Phi(v[0],...,v[N-1])` is `v[i]` when
+/// control is transferred from the i-th predecessor block.
+///
+/// Number of inputs always matches number of predecessor blocks.
+final class Phi extends Definition with NoThrow, Pure {
+  /// Local variable for which this [Phi] was originally created.
+  final LocalVariable variable;
+
+  Phi(super.graph, super.sourcePosition, this.variable, super.inputCount);
+
+  @override
+  CType get type => variable.type;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitPhi(this);
+}
+
+/// Return value from the current function.
+final class Return extends Instruction
+    with NoThrow, Pure
+    implements ControlFlowInstruction {
+  Return(FlowGraph graph, SourcePosition sourcePosition, Definition value)
+    : super(graph, sourcePosition, 1) {
+    setInputAt(0, value);
+  }
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitReturn(this);
+}
+
+enum ComparisonOpcode {
+  // Simple object pointer equality.
+  equal('=='),
+  notEqual('!='),
+  // identical with special cases for num.
+  identical('==='),
+  notIdentical('!=='),
+  // int comparisons.
+  intEqual('int =='),
+  intNotEqual('int !='),
+  intLess('int <'),
+  intLessOrEqual('int <='),
+  intGreater('int >'),
+  intGreaterOrEqual('int >='),
+  // int bitwise tests
+  intTestIsZero('int & == 0'),
+  intTestIsNotZero('int & != 0'),
+  // double comparisons.
+  doubleEqual('double =='),
+  doubleNotEqual('double !='),
+  doubleLess('double <'),
+  doubleLessOrEqual('double <='),
+  doubleGreater('double >'),
+  doubleGreaterOrEqual('double >=');
+
+  final String token;
+  const ComparisonOpcode(this.token);
+
+  bool get isIntComparison => switch (this) {
+    intEqual ||
+    intNotEqual ||
+    intLess ||
+    intLessOrEqual ||
+    intGreater ||
+    intGreaterOrEqual ||
+    intTestIsZero ||
+    intTestIsNotZero => true,
+    _ => false,
+  };
+
+  bool get isDoubleComparison => switch (this) {
+    doubleEqual ||
+    doubleNotEqual ||
+    doubleLess ||
+    doubleLessOrEqual ||
+    doubleGreater ||
+    doubleGreaterOrEqual => true,
+    _ => false,
+  };
+
+  ComparisonOpcode flipOperands() => switch (this) {
+    equal ||
+    notEqual ||
+    identical ||
+    notIdentical ||
+    intEqual ||
+    intNotEqual ||
+    intTestIsZero ||
+    intTestIsNotZero ||
+    doubleEqual ||
+    doubleNotEqual => this,
+    intLess => intGreaterOrEqual,
+    intLessOrEqual => intGreater,
+    intGreater => intLessOrEqual,
+    intGreaterOrEqual => intLess,
+    doubleLess => doubleGreaterOrEqual,
+    doubleLessOrEqual => doubleGreater,
+    doubleGreater => doubleLessOrEqual,
+    doubleGreaterOrEqual => doubleLess,
+  };
+
+  bool get canBeNegated => switch (this) {
+    doubleLess ||
+    doubleLessOrEqual ||
+    doubleGreater ||
+    doubleGreaterOrEqual => false,
+    _ => true,
+  };
+
+  ComparisonOpcode negate() => switch (this) {
+    equal => notEqual,
+    notEqual => equal,
+    identical => notIdentical,
+    notIdentical => identical,
+    intEqual => intNotEqual,
+    intNotEqual => intEqual,
+    intLess => intGreaterOrEqual,
+    intLessOrEqual => intGreater,
+    intGreater => intLessOrEqual,
+    intGreaterOrEqual => intLess,
+    intTestIsZero => intTestIsNotZero,
+    intTestIsNotZero => intTestIsZero,
+    doubleEqual => doubleNotEqual,
+    doubleNotEqual => doubleEqual,
+    doubleLess ||
+    doubleLessOrEqual ||
+    doubleGreater ||
+    doubleGreaterOrEqual => throw '${token} cannot be negated',
+  };
+}
+
+/// Compare two operands.
+final class Comparison extends Definition with NoThrow, Pure, Idempotent {
+  ComparisonOpcode op;
+
+  Comparison(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.op,
+    Definition left,
+    Definition right,
+  ) : super(graph, sourcePosition, 2) {
+    setInputAt(0, left);
+    setInputAt(1, right);
+  }
+
+  Definition get left => inputDefAt(0);
+  Definition get right => inputDefAt(1);
+
+  @override
+  CType get type => const BoolType();
+
+  @override
+  bool attributesEqual(covariant Comparison other) => op == other.op;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitComparison(this);
+}
+
+/// Instruction representing a constant value.
+///
+/// Should not be created directly, use [FlowGraph.getConstant] instead.
+final class Constant extends Definition with NoThrow, Pure {
+  final ConstantValue value;
+
+  Constant(FlowGraph graph, this.value) : super(graph, noPosition, 0);
+
+  @override
+  bool get canBeZero => value.isZero;
+
+  @override
+  bool get canBeNegative => value.isNegative;
+
+  @override
+  CType get type => value.type;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitConstant(this);
+}
+
+/// Base class for various calls.
+abstract base class CallInstruction extends Definition
+    with CanThrow, HasSideEffects {
+  CallInstruction(super.graph, super.sourcePosition, super.inputCount);
+
+  bool get hasTypeArguments => inputCount > 0 && inputDefAt(0) is TypeArguments;
+  TypeArguments? get typeArguments =>
+      hasTypeArguments ? inputDefAt(0) as TypeArguments : null;
+}
+
+/// Direct call of the target function.
+final class DirectCall extends CallInstruction {
+  final CFunction target;
+
+  @override
+  final CType type;
+
+  DirectCall(
+    super.graph,
+    super.sourcePosition,
+    this.target,
+    super.inputCount,
+    this.type,
+  );
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitDirectCall(this);
+}
+
+/// Interface call via given interface target.
+final class InterfaceCall extends CallInstruction {
+  final CFunction interfaceTarget;
+
+  @override
+  final CType type;
+
+  InterfaceCall(
+    super.graph,
+    super.sourcePosition,
+    this.interfaceTarget,
+    super.inputCount,
+    this.type,
+  );
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitInterfaceCall(this);
+}
+
+enum DynamicCallKind { method, getter, setter }
+
+/// Dynamic call via given selector.
+final class DynamicCall extends CallInstruction {
+  final ast.Name selector;
+  final DynamicCallKind kind;
+
+  DynamicCall(
+    super.graph,
+    super.sourcePosition,
+    this.selector,
+    this.kind,
+    super.inputCount,
+  );
+
+  @override
+  CType get type => const TopType();
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitDynamicCall(this);
+}
+
+/// Parameter of a function or a catch block.
+final class Parameter extends Definition with NoThrow, Pure {
+  final LocalVariable variable;
+
+  Parameter(FlowGraph graph, SourcePosition sourcePosition, this.variable)
+    : super(graph, sourcePosition, 0);
+
+  bool get isFunctionParameter => block is EntryBlock;
+  bool get isCatchParameter => block is CatchBlock;
+
+  @override
+  CType get type => variable.type;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitParameter(this);
+}
+
+/// Loads value from the local variable.
+///
+/// [LoadLocal] instructions are only used before
+/// IR is converted to SSA form.
+final class LoadLocal extends Definition with NoThrow, Pure {
+  final LocalVariable variable;
+
+  LoadLocal(FlowGraph graph, SourcePosition sourcePosition, this.variable)
+    : super(graph, sourcePosition, 0);
+
+  @override
+  CType get type => variable.type;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitLoadLocal(this);
+}
+
+/// Store value to the local variable.
+///
+/// [StoreLocal] instructions are only used before
+/// IR is converted to SSA form.
+final class StoreLocal extends Instruction with NoThrow, HasSideEffects {
+  final LocalVariable variable;
+
+  StoreLocal(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.variable,
+    Definition value,
+  ) : super(graph, sourcePosition, 1) {
+    setInputAt(0, value);
+  }
+
+  Definition get value => inputDefAt(0);
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitStoreLocal(this);
+}
+
+/// Throw given exception object. Also takes optional stack trace
+/// input to rethrow exception object without collecting a new stack trace.
+final class Throw extends Instruction
+    with CanThrow, HasSideEffects
+    implements ControlFlowInstruction {
+  Throw(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    Definition exception,
+    Definition? stackTrace,
+  ) : super(graph, sourcePosition, stackTrace != null ? 2 : 1) {
+    setInputAt(0, exception);
+    if (stackTrace != null) {
+      setInputAt(1, stackTrace);
+    }
+  }
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitThrow(this);
+}
+
+/// Represents collection of class and function type parameters.
+final class TypeParameters extends Definition with NoThrow, Pure {
+  TypeParameters(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    Definition? receiver,
+  ) : super(graph, sourcePosition, receiver != null ? 1 : 0) {
+    if (receiver != null) {
+      setInputAt(0, receiver);
+    }
+  }
+
+  @override
+  CType get type => const TypeParametersType();
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitTypeParameters(this);
+}
+
+/// Casts input object to the given type.
+///
+/// Checked casts throw TypeError if
+/// object is not assignable to the given type.
+final class TypeCast extends Definition with CanThrow, Pure, Idempotent {
+  /// Target type for the type cast.
+  final CType testedType;
+
+  /// Whether this type cast involves check at runtime.
+  bool isChecked;
+
+  TypeCast(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    Definition object,
+    this.testedType,
+    Definition? typeParameters, {
+    this.isChecked = true,
+  }) : super(graph, sourcePosition, typeParameters != null ? 2 : 1) {
+    setInputAt(0, object);
+    if (typeParameters != null) {
+      setInputAt(1, typeParameters);
+    }
+  }
+
+  Definition get operand => inputDefAt(0);
+  Definition? get typeParameters => (inputCount > 1) ? inputDefAt(1) : null;
+
+  @override
+  CType get type => testedType;
+
+  @override
+  bool get canThrow => isChecked;
+
+  @override
+  bool attributesEqual(covariant TypeCast other) =>
+      // 'isChecked' is not taken into account as checked and unchecked casts
+      // against the same type are congruent wrt value numbering.
+      testedType == other.testedType;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitTypeCast(this);
+}
+
+/// Test if input object is assignable to the given type.
+final class TypeTest extends Definition with NoThrow, Pure, Idempotent {
+  final CType testedType;
+
+  TypeTest(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    Definition object,
+    this.testedType,
+    Definition? typeParameters,
+  ) : super(graph, sourcePosition, typeParameters != null ? 2 : 1) {
+    setInputAt(0, object);
+    if (typeParameters != null) {
+      setInputAt(1, typeParameters);
+    }
+  }
+
+  Definition get operand => inputDefAt(0);
+  Definition? get typeParameters => (inputCount > 1) ? inputDefAt(1) : null;
+
+  @override
+  CType get type => const BoolType();
+
+  @override
+  bool attributesEqual(covariant TypeTest other) =>
+      testedType == other.testedType;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitTypeTest(this);
+}
+
+/// Represents a list of type arguments passed to a call.
+///
+/// Only used as the first input of call instructions.
+final class TypeArguments extends Definition with NoThrow, Pure, Idempotent {
+  final List<ast.DartType> types;
+  TypeArguments(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.types,
+    Definition? typeParameters,
+  ) : super(graph, sourcePosition, typeParameters != null ? 1 : 0) {
+    if (typeParameters != null) {
+      setInputAt(0, typeParameters);
+    }
+  }
+
+  Definition? get typeParameters => (inputCount > 0) ? inputDefAt(0) : null;
+
+  @override
+  CType get type => const TypeArgumentsType();
+
+  @override
+  bool attributesEqual(covariant TypeArguments other) =>
+      listEquals(types, other.types);
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitTypeArguments(this);
+}
+
+enum BinaryIntOpcode {
+  add('+'),
+  sub('-'),
+  mul('*'),
+  truncatingDiv('~/'),
+  mod('%'),
+  rem('remainder'),
+  bitOr('|'),
+  bitAnd('&'),
+  bitXor('^'),
+  shiftLeft('<<'),
+  shiftRight('>>'),
+  unsignedShiftRight('>>>');
+
+  final String token;
+  const BinaryIntOpcode(this.token);
+
+  bool get isCommutative => switch (this) {
+    add || mul || bitOr || bitAnd || bitXor => true,
+    _ => false,
+  };
+}
+
+/// Binary operation on two int operands.
+final class BinaryIntOp extends Definition with Pure, Idempotent {
+  BinaryIntOpcode op;
+
+  BinaryIntOp(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.op,
+    Definition left,
+    Definition right,
+  ) : super(graph, sourcePosition, 2) {
+    setInputAt(0, left);
+    setInputAt(1, right);
+  }
+
+  Definition get left => inputDefAt(0);
+  Definition get right => inputDefAt(1);
+
+  @override
+  bool get canThrow => switch (op) {
+    BinaryIntOpcode.truncatingDiv ||
+    BinaryIntOpcode.mod ||
+    BinaryIntOpcode.rem => right.canBeZero,
+    BinaryIntOpcode.shiftLeft ||
+    BinaryIntOpcode.shiftRight ||
+    BinaryIntOpcode.unsignedShiftRight => right.canBeNegative,
+    _ => false,
+  };
+
+  @override
+  CType get type => const IntType();
+
+  @override
+  bool attributesEqual(covariant BinaryIntOp other) => op == other.op;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitBinaryIntOp(this);
+}
+
+enum UnaryIntOpcode {
+  neg('-'),
+  bitNot('~'),
+  toDouble('toDouble'),
+  abs('abs'),
+  sign('sign');
+
+  final String token;
+  const UnaryIntOpcode(this.token);
+}
+
+/// Unary operation on the int operand.
+final class UnaryIntOp extends Definition with NoThrow, Pure, Idempotent {
+  UnaryIntOpcode op;
+
+  UnaryIntOp(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.op,
+    Definition operand,
+  ) : super(graph, sourcePosition, 1) {
+    setInputAt(0, operand);
+  }
+
+  Definition get operand => inputDefAt(0);
+
+  @override
+  CType get type => switch (op) {
+    UnaryIntOpcode.toDouble => const DoubleType(),
+    _ => const IntType(),
+  };
+
+  @override
+  bool attributesEqual(covariant UnaryIntOp other) => op == other.op;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitUnaryIntOp(this);
+}
+
+enum BinaryDoubleOpcode {
+  add('+'),
+  sub('-'),
+  mul('*'),
+  div('/'),
+  truncatingDiv('~/'),
+  mod('%'),
+  rem('remainder');
+
+  final String token;
+  const BinaryDoubleOpcode(this.token);
+
+  bool get isCommutative => switch (this) {
+    add || mul => true,
+    _ => false,
+  };
+}
+
+/// Binary operation on two double operands.
+final class BinaryDoubleOp extends Definition with NoThrow, Pure, Idempotent {
+  BinaryDoubleOpcode op;
+
+  BinaryDoubleOp(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.op,
+    Definition left,
+    Definition right,
+  ) : super(graph, sourcePosition, 2) {
+    setInputAt(0, left);
+    setInputAt(1, right);
+  }
+
+  Definition get left => inputDefAt(0);
+  Definition get right => inputDefAt(1);
+
+  @override
+  CType get type => switch (op) {
+    BinaryDoubleOpcode.truncatingDiv => const IntType(),
+    _ => const DoubleType(),
+  };
+
+  @override
+  bool attributesEqual(covariant BinaryDoubleOp other) => op == other.op;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitBinaryDoubleOp(this);
+}
+
+enum UnaryDoubleOpcode {
+  neg('-'),
+  abs('abs'),
+  sign('sign'),
+  square('square'),
+  round('round'),
+  floor('floor'),
+  ceil('ceil'),
+  truncate('truncate'),
+  roundToDouble('roundToDouble'),
+  floorToDouble('floorToDouble'),
+  ceilToDouble('ceilToDouble'),
+  truncateToDouble('truncateToDouble');
+
+  final String token;
+  const UnaryDoubleOpcode(this.token);
+}
+
+/// Unary operation on the double operand.
+final class UnaryDoubleOp extends Definition with NoThrow, Pure, Idempotent {
+  UnaryDoubleOpcode op;
+
+  UnaryDoubleOp(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.op,
+    Definition operand,
+  ) : super(graph, sourcePosition, 1) {
+    setInputAt(0, operand);
+  }
+
+  Definition get operand => inputDefAt(0);
+
+  @override
+  CType get type => switch (op) {
+    UnaryDoubleOpcode.round ||
+    UnaryDoubleOpcode.floor ||
+    UnaryDoubleOpcode.ceil ||
+    UnaryDoubleOpcode.truncate => const IntType(),
+    _ => const DoubleType(),
+  };
+
+  @override
+  bool attributesEqual(covariant UnaryDoubleOp other) => op == other.op;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitUnaryDoubleOp(this);
+}
+
+/// Marker for the back-end specific instructions.
+base mixin BackendInstruction on Instruction {}
+
+/// Combined comparison and branch.
+///
+/// Certain back-ends may create [CompareAndBranch] during lowering.
+final class CompareAndBranch extends Instruction
+    with NoThrow, Pure, BackendInstruction
+    implements ControlFlowInstruction {
+  ComparisonOpcode op;
+
+  CompareAndBranch(
+    FlowGraph graph,
+    SourcePosition sourcePosition,
+    this.op,
+    Definition left,
+    Definition right,
+  ) : super(graph, sourcePosition, 2) {
+    setInputAt(0, left);
+    setInputAt(1, right);
+  }
+
+  Definition get left => inputDefAt(0);
+  Definition get right => inputDefAt(1);
+  TargetBlock get trueSuccessor => block!.successors[0] as TargetBlock;
+  TargetBlock get falseSuccessor => block!.successors[1] as TargetBlock;
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitCompareAndBranch(this);
+}
+
+/// Base class for move operations, part of [ParallelMove].
+abstract base class MoveOp {}
+
+/// In native back-ends, register allocator inserts [ParallelMove]
+/// instructions to copy values atomically between registers
+/// and memory locations.
+final class ParallelMove extends Instruction
+    with NoThrow, HasSideEffects, BackendInstruction {
+  final List<MoveOp> moves = [];
+
+  ParallelMove(FlowGraph graph) : super(graph, noPosition, 0);
+
+  @override
+  R accept<R>(InstructionVisitor<R> v) => v.visitParallelMove(this);
+}
diff --git a/pkg/cfg/lib/ir/ir_to_text.dart b/pkg/cfg/lib/ir/ir_to_text.dart
new file mode 100644
index 0000000..a20c240
--- /dev/null
+++ b/pkg/cfg/lib/ir/ir_to_text.dart
@@ -0,0 +1,177 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/visitor.dart';
+
+/// Converts IR (either graph or a single instruction) to the text form.
+final class IrToText extends VoidInstructionVisitor {
+  final StringBuffer _buffer = StringBuffer();
+  final bool printDominators;
+  final bool printLoops;
+  final String? Function(Instruction)? annotator;
+
+  IrToText(
+    FlowGraph graph, {
+    this.printDominators = false,
+    this.printLoops = false,
+    this.annotator,
+  }) {
+    for (final block in graph.reversePostorder) {
+      block.accept(this);
+    }
+  }
+
+  IrToText.instruction(
+    Instruction instr, {
+    this.printDominators = false,
+    this.printLoops = false,
+    this.annotator,
+  }) {
+    instr.accept(this);
+  }
+
+  String toString() => _buffer.toString();
+
+  @override
+  void defaultInstruction(Instruction instr) {
+    _printReferenceIfNeeded(instr);
+    _buffer.write(opcode(instr));
+    _buffer.write('(');
+    _printInputs(instr);
+    _buffer.write(')');
+    final extraInfo = annotator?.call(instr);
+    if (extraInfo != null && extraInfo.isNotEmpty) {
+      _buffer.write(' ');
+      _buffer.write(extraInfo);
+    }
+  }
+
+  @override
+  void defaultBlock(Block block) {
+    super.defaultBlock(block);
+    if (block.exceptionHandler != null) {
+      _buffer.write(' exception-handler:${reference(block.exceptionHandler!)}');
+    }
+    if (printDominators) {
+      if (block.dominator != null) {
+        _buffer.write(' idom:${reference(block.dominator!)}');
+      }
+      if (block.dominatedBlocks.isNotEmpty) {
+        _buffer.write(' dominates:${block.dominatedBlocks.map(reference)}');
+      }
+    }
+    if (printLoops) {
+      final loop = block.loop;
+      if (loop != null) {
+        if (block == loop.header) {
+          _buffer.write(
+            ' loop-header (depth:${loop.depth}' +
+                ' body:${loop.body.map(reference)}' +
+                ' back-edges:${loop.backEdges.map(reference)})',
+          );
+        } else {
+          _buffer.write(' in-loop:${reference(loop.header)}');
+        }
+      }
+    }
+    _buffer.writeln();
+    for (final instr in block) {
+      _buffer.write('  ');
+      instr.accept(this);
+      _buffer.writeln();
+    }
+  }
+
+  void _printReferenceIfNeeded(Instruction instr) {
+    if (instr is Definition && instr.hasUses || instr is Block) {
+      _buffer.write(reference(instr));
+      _buffer.write(' = ');
+    }
+  }
+
+  void _printInputs(Instruction instr) {
+    switch (instr) {
+      case Parameter():
+        _buffer.write(instr.variable.name);
+      case LoadLocal():
+        _buffer.write(instr.variable.name);
+      case StoreLocal():
+        _buffer.write(instr.variable.name);
+        _buffer.write(', ');
+      case _:
+    }
+    for (int i = 0, n = instr.inputCount; i < n; ++i) {
+      if (i != 0) _buffer.write(', ');
+      _buffer.write(reference(instr.inputDefAt(i)));
+    }
+    switch (instr) {
+      case JoinBlock():
+        _buffer.write(instr.predecessors.map(reference).join(', '));
+      case Goto():
+        _buffer.write(reference(instr.target));
+      case Branch():
+        _buffer.write(', true: ');
+        _buffer.write(reference(instr.trueSuccessor));
+        _buffer.write(', false: ');
+        _buffer.write(reference(instr.falseSuccessor));
+      case CompareAndBranch():
+        _buffer.write(', true: ');
+        _buffer.write(reference(instr.trueSuccessor));
+        _buffer.write(', false: ');
+        _buffer.write(reference(instr.falseSuccessor));
+      case TryEntry():
+        _buffer.write('try-body: ');
+        _buffer.write(reference(instr.tryBody));
+        _buffer.write(', catch-block: ');
+        _buffer.write(reference(instr.catchBlock));
+      case Constant():
+        _buffer.write(instr.value.valueToString());
+      case TypeCast():
+        _buffer.write(', ');
+        _buffer.write(instr.testedType);
+        if (!instr.isChecked) {
+          _buffer.write(', unchecked');
+        }
+      case TypeTest():
+        _buffer.write(', ');
+        _buffer.write(instr.testedType);
+      case TypeArguments():
+        if (instr.inputCount > 0) _buffer.write(', ');
+        _buffer.write('<');
+        _buffer.write(
+          instr.types.map((type) => type.getDisplayString()).join(', '),
+        );
+        _buffer.write('>');
+      case ParallelMove():
+        _buffer.write(instr.moves.join(', '));
+      case _:
+    }
+  }
+
+  String reference(Instruction instr) => switch (instr) {
+    Definition() => 'v${instr.id}',
+    Block() => 'B${instr.id}',
+    _ => 'instr${instr.id}',
+  };
+
+  String opcode(Instruction instr) => switch (instr) {
+    Comparison() => 'Comparison ${instr.op.token}',
+    CompareAndBranch() => 'CompareAndBranch ${instr.op.token}',
+    DirectCall() => 'DirectCall ${instr.target}',
+    InterfaceCall() => 'InterfaceCall ${instr.interfaceTarget}',
+    DynamicCall() =>
+      'DynamicCall ${switch (instr.kind) {
+        DynamicCallKind.method => '',
+        DynamicCallKind.getter => 'get ',
+        DynamicCallKind.setter => 'set ',
+      }}${instr.selector}',
+    BinaryIntOp() => 'BinaryIntOp ${instr.op.token}',
+    UnaryIntOp() => 'UnaryIntOp ${instr.op.token}',
+    BinaryDoubleOp() => 'BinaryDoubleOp ${instr.op.token}',
+    UnaryDoubleOp() => 'UnaryDoubleOp ${instr.op.token}',
+    _ => instr.runtimeType.toString(),
+  };
+}
diff --git a/pkg/cfg/lib/ir/liveness_analysis.dart b/pkg/cfg/lib/ir/liveness_analysis.dart
new file mode 100644
index 0000000..b6fe636
--- /dev/null
+++ b/pkg/cfg/lib/ir/liveness_analysis.dart
@@ -0,0 +1,178 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/utils/bit_vector.dart';
+
+/// Base class for calculation of liveness of abstract variables.
+abstract base class LivenessAnalysis {
+  final FlowGraph graph;
+  final int numVariables;
+  final List<BitVector> _liveIn;
+  final List<BitVector> _liveOut;
+  final List<BitVector> _kill;
+
+  LivenessAnalysis(this.graph, this.numVariables)
+    : _liveIn = List.generate(
+        graph.preorder.length,
+        (_) => BitVector(numVariables),
+      ),
+      _liveOut = List.generate(
+        graph.preorder.length,
+        (_) => BitVector(numVariables),
+      ),
+      _kill = List.generate(
+        graph.preorder.length,
+        (_) => BitVector(numVariables),
+      );
+
+  /// Variables which are live when entering [block],
+  /// including variables used by its exception handler.
+  BitVector liveIn(Block block) => _liveIn[block.preorderNumber];
+
+  /// Variables which are live when leaving [block],
+  /// including leaving through an implicit exceptional control flow.
+  BitVector liveOut(Block block) => _liveOut[block.preorderNumber];
+
+  /// Variables which are assigned in [block] before used.
+  BitVector kill(Block block) => _kill[block.preorderNumber];
+
+  /// Compute [liveIn], [liveOut] and [kill] for all blocks.
+  void analyze() {
+    computeInitialSets();
+    iterate();
+  }
+
+  /// Compute [kill] sets and initial [liveIn] sets which include
+  /// variables used in a block before assigned.
+  void computeInitialSets();
+
+  /// Compute [liveIn] and [liveOut] sets using [kill] and initial [liveIn].
+  void iterate() {
+    bool changed;
+    do {
+      changed = false;
+      for (final block in graph.postorder) {
+        if (_updateLiveOut(block) || block.exceptionHandler != null) {
+          if (_updateLiveIn(block)) {
+            changed = true;
+          }
+        }
+      }
+    } while (changed);
+  }
+
+  /// Update [liveOut] for [block] using the following rule:
+  /// liveOut(block) = Union(liveIn(succ) for all successors, liveIn(exceptionHandler)).
+  bool _updateLiveOut(Block block) {
+    var changed = false;
+    final live = liveOut(block);
+    for (final succ in block.successors) {
+      if (live.addAll(liveIn(succ))) {
+        changed = true;
+      }
+    }
+    final exceptionHandler = block.exceptionHandler;
+    if (exceptionHandler != null) {
+      if (live.addAll(liveIn(exceptionHandler))) {
+        changed = true;
+      }
+    }
+    return changed;
+  }
+
+  /// Update [liveIn] for [block] using the following rule:
+  /// liveIn(block) = Union(liveIn(block), liveOut(block) - kill(block), liveIn(exceptionHandler))
+  bool _updateLiveIn(Block block) {
+    var changed = false;
+    final live = liveIn(block);
+    if (live.addSubtraction(liveOut(block), kill(block))) {
+      changed = true;
+    }
+    final exceptionHandler = block.exceptionHandler;
+    if (exceptionHandler != null) {
+      if (live.addAll(liveIn(exceptionHandler))) {
+        changed = true;
+      }
+    }
+    return changed;
+  }
+}
+
+/// Calculates liveness of local variables
+/// before flow graph is converted to SSA form.
+final class LocalVariableLivenessAnalysis extends LivenessAnalysis {
+  LocalVariableLivenessAnalysis(FlowGraph graph)
+    : super(graph, graph.localVariables.length);
+
+  @override
+  void computeInitialSets() {
+    for (final block in graph.postorder) {
+      final kill = this.kill(block);
+      final liveIn = this.liveIn(block);
+
+      for (final instr in block.reversed) {
+        switch (instr) {
+          case LoadLocal():
+            liveIn.add(instr.variable.index);
+
+          case StoreLocal():
+            final variableIndex = instr.variable.index;
+            kill.add(variableIndex);
+            liveIn.remove(variableIndex);
+
+          case _:
+        }
+      }
+    }
+  }
+}
+
+/// Calculates liveness of SSA values.
+///
+/// Phi instructions are handled specially: their
+/// inputs are live-out in the corresponding predecessor,
+/// but they are not live-in in the JoinBlock.
+final class SSALivenessAnalysis extends LivenessAnalysis {
+  SSALivenessAnalysis(FlowGraph graph)
+    : super(graph, graph.instructions.length);
+
+  @override
+  void computeInitialSets() {
+    for (final block in graph.postorder) {
+      final kill = this.kill(block);
+      final liveIn = this.liveIn(block);
+      final liveOut = this.liveOut(block);
+
+      // Inputs of Phis from successor JoinBlock are
+      // "used" at the end of the current block.
+      if (block.successors.length == 1) {
+        final succ = block.successors.single;
+        if (succ is JoinBlock) {
+          final predIndex = succ.predecessors.indexOf(block);
+          assert(predIndex >= 0);
+          for (final phi in succ.phis) {
+            final inputId = phi.inputDefAt(predIndex).id;
+            liveIn.add(inputId);
+            liveOut.add(inputId);
+          }
+        }
+      }
+
+      for (final instr in block.reversed) {
+        if (instr is Definition) {
+          kill.add(instr.id);
+          liveIn.remove(instr.id);
+        }
+        if (instr is! Phi) {
+          for (var i = 0, n = instr.inputCount; i < n; ++i) {
+            liveIn.add(instr.inputDefAt(i).id);
+          }
+          // TODO(alexmarkov): also account for implicit uses.
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/cfg/lib/ir/local_variable.dart b/pkg/cfg/lib/ir/local_variable.dart
new file mode 100644
index 0000000..52e5434
--- /dev/null
+++ b/pkg/cfg/lib/ir/local_variable.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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 ast show VariableDeclaration;
+import 'package:cfg/ir/types.dart';
+
+/// Local variable or a function parameter.
+///
+/// Local variables are used in the flow graph before
+/// it is converted to SSA form.
+class LocalVariable {
+  /// Name of the variable.
+  final String name;
+
+  /// Declaration of the variable in the AST, if any.
+  final ast.VariableDeclaration? declaration;
+
+  /// Index of the variable in the [FlowGraph.localVariables].
+  final int index;
+
+  /// Type of the variable.
+  final CType type;
+
+  LocalVariable(this.name, this.declaration, this.index, this.type);
+
+  @override
+  String toString() => name;
+}
diff --git a/pkg/cfg/lib/ir/loops.dart b/pkg/cfg/lib/ir/loops.dart
new file mode 100644
index 0000000..84b8bbc
--- /dev/null
+++ b/pkg/cfg/lib/ir/loops.dart
@@ -0,0 +1,139 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/utils/bit_vector.dart';
+
+class Loops extends Iterable<Loop> {
+  final FlowGraph graph;
+
+  final List<Loop> _loops = [];
+
+  /// Block preorder number -> innermost Loop.
+  final List<Loop?> _loopByBlock;
+
+  Loops._(this.graph)
+    : _loopByBlock = List<Loop?>.filled(graph.preorder.length, null);
+
+  Loop? operator [](Block block) => _loopByBlock[block.preorderNumber];
+
+  void operator []=(Block block, Loop loop) {
+    _loopByBlock[block.preorderNumber] = loop;
+  }
+
+  @override
+  Iterator<Loop> get iterator => _loops.iterator;
+}
+
+/// Natural loop with one entrance to the loop header and
+/// one or more back-edges.
+class Loop {
+  final Block header;
+  final BitVector _body;
+  final List<Block> backEdges = [];
+  Loop? enclosingLoop;
+  late final int depth = _computeDepth();
+
+  Loop._(this.header) : _body = BitVector(header.graph.preorder.length);
+
+  bool contains(Block block) => _body[block.preorderNumber];
+
+  void add(Block block) {
+    _body.add(block.preorderNumber);
+  }
+
+  /// Add all blocks between [header] and [backEdge].
+  void addBody(Block backEdge) {
+    final workList = <Block>[];
+    add(header);
+    if (backEdge != header) {
+      add(backEdge);
+      workList.add(backEdge);
+    }
+    while (workList.isNotEmpty) {
+      final block = workList.removeLast();
+      assert(block.isDominatedBy(header));
+      for (final pred in block.predecessors) {
+        if (!contains(pred)) {
+          add(pred);
+          workList.add(pred);
+        }
+      }
+    }
+  }
+
+  Iterable<Block> get body => _LoopBodyIterable(this);
+
+  int _computeDepth() {
+    var depth = 0;
+    for (Loop? loop = this; loop != null; loop = loop.enclosingLoop) {
+      ++depth;
+    }
+    return depth;
+  }
+}
+
+class _LoopBodyIterable extends Iterable<Block> {
+  final Loop loop;
+  _LoopBodyIterable(this.loop);
+
+  @override
+  Iterator<Block> get iterator =>
+      _LoopBodyIterator(loop.header.graph, loop._body.elements.iterator);
+}
+
+class _LoopBodyIterator implements Iterator<Block> {
+  final FlowGraph _graph;
+  final Iterator<int> _bodyIterator;
+
+  _LoopBodyIterator(this._graph, this._bodyIterator);
+
+  @override
+  bool moveNext() => _bodyIterator.moveNext();
+
+  @override
+  Block get current => _graph.preorder[_bodyIterator.current];
+}
+
+/// Compute loops.
+Loops computeLoops(FlowGraph graph) {
+  final loops = Loops._(graph);
+
+  for (final block in graph.postorder) {
+    if (block is JoinBlock && block.predecessors.length > 1) {
+      for (final pred in block.predecessors) {
+        if (pred.isDominatedBy(block)) {
+          Loop? loop = loops[block];
+          if (loop == null) {
+            loops[block] = loop = Loop._(block);
+            loops._loops.add(loop);
+          }
+          loop.addBody(pred);
+          loop.backEdges.add(pred);
+        }
+      }
+    }
+  }
+
+  for (final loop in loops) {
+    for (final block in loop.body) {
+      final innerLoop = loops[block];
+      if (innerLoop == null) {
+        loops[block] = loop;
+      } else {
+        assert(loop.contains(innerLoop.header));
+      }
+    }
+  }
+
+  for (final loop in loops) {
+    final domLoop = loops[loop.header.dominator!];
+    if (domLoop != null && domLoop.contains(loop.header)) {
+      loop.enclosingLoop = domLoop;
+    }
+  }
+
+  return loops;
+}
diff --git a/pkg/cfg/lib/ir/ssa_computation.dart b/pkg/cfg/lib/ir/ssa_computation.dart
new file mode 100644
index 0000000..aff0e72
--- /dev/null
+++ b/pkg/cfg/lib/ir/ssa_computation.dart
@@ -0,0 +1,167 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/dominators.dart';
+import 'package:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/ir_to_text.dart';
+import 'package:cfg/ir/liveness_analysis.dart';
+import 'package:cfg/passes/pass.dart';
+import 'package:cfg/utils/bit_vector.dart';
+
+/// Converts [FlowGraph] to SSA form.
+///
+/// Remove [LoadLocal] and [StoreLocal] instructions.
+/// Insert [Phi] instructions to [JoinBlock] and
+/// [Parameter] instructions to [CatchBlock] in order to resolve data flow.
+final class SSAComputation extends Pass {
+  SSAComputation() : super('SSAComputation');
+
+  @override
+  void run() {
+    assert(!graph.inSSAForm);
+
+    final dominanceFrontier = computeDominanceFrontier(
+      graph,
+      includeExceptionHandlers: true,
+    );
+
+    final liveness = LocalVariableLivenessAnalysis(graph);
+    liveness.analyze();
+
+    insertPhis(liveness, dominanceFrontier);
+
+    rename(liveness);
+
+    graph.invalidateInstructionNumbering();
+    graph.inSSAForm = true;
+  }
+
+  void insertPhis(
+    LocalVariableLivenessAnalysis liveness,
+    List<BitVector> dominanceFrontier,
+  ) {
+    final numBlocks = graph.preorder.length;
+
+    // For each block, the highest variable index that has a phi in that block.
+    // Used to avoid inserting multiple phis for the same variable.
+    final hasAlready = List<int>.filled(numBlocks, -1);
+
+    // For each block, the highest variable index for which the
+    // block went on the worklist. Used to avoid adding the same block to
+    //  the worklist more than once for the same variable.
+    final work = List<int>.filled(numBlocks, -1);
+
+    // Worklist of blocks to process.
+    final workList = <Block>[];
+
+    for (
+      var variableIndex = 0;
+      variableIndex < graph.localVariables.length;
+      ++variableIndex
+    ) {
+      for (final block in graph.preorder) {
+        if (liveness.kill(block)[variableIndex] &&
+            liveness.liveOut(block)[variableIndex]) {
+          work[block.preorderNumber] = variableIndex;
+          workList.add(block);
+        }
+      }
+      while (workList.isNotEmpty) {
+        final current = workList.removeLast();
+        for (final blockIndex
+            in dominanceFrontier[current.preorderNumber].elements) {
+          if (hasAlready[blockIndex] < variableIndex) {
+            final block = graph.preorder[blockIndex];
+            if (liveness.liveIn(block)[variableIndex]) {
+              final variable = graph.localVariables[variableIndex];
+              switch (block) {
+                case JoinBlock():
+                  Phi(
+                    graph,
+                    block.sourcePosition,
+                    variable,
+                    block.predecessors.length,
+                  ).insertAfter(block, addInputsToUseLists: false);
+                case CatchBlock():
+                  Parameter(
+                    graph,
+                    block.sourcePosition,
+                    variable,
+                  ).insertAfter(block);
+                default:
+                  throw 'unexpected block in the dominance frontier: $block';
+              }
+            }
+            hasAlready[blockIndex] = variableIndex;
+            if (work[blockIndex] < variableIndex) {
+              work[blockIndex] = variableIndex;
+              workList.add(block);
+            }
+          }
+        }
+      }
+    }
+  }
+
+  void rename(LocalVariableLivenessAnalysis liveness) {
+    final workList = <(Block, List<Definition?>)>[];
+    workList.add((
+      graph.entryBlock,
+      List<Definition?>.filled(graph.localVariables.length, null),
+    ));
+    while (workList.isNotEmpty) {
+      final (block, variableValues) = workList.removeLast();
+      for (
+        var variableIndex = 0;
+        variableIndex < graph.localVariables.length;
+        ++variableIndex
+      ) {
+        if (!liveness.liveIn(block)[variableIndex]) {
+          variableValues[variableIndex] = null;
+        }
+      }
+      for (final instr in block) {
+        switch (instr) {
+          case Parameter():
+            variableValues[instr.variable.index] = instr;
+          case Phi():
+            variableValues[instr.variable.index] = instr;
+          case StoreLocal():
+            variableValues[instr.variable.index] = instr.value;
+            instr.removeFromGraph();
+          case LoadLocal():
+            instr.replaceUsesWith(
+              variableValues[instr.variable.index] ??
+                  (throw 'Variable ${instr.variable} is used in ${IrToText.instruction(instr)} before defined.'),
+            );
+            instr.removeFromGraph();
+        }
+        // TODO(alexmarkov): add implicit uses if instr.canThrow
+      }
+      // JoinBlock can be the only successor for a block (edge-split form).
+      if (block.successors.length == 1) {
+        final successor = block.successors.single;
+        if (successor is JoinBlock) {
+          final predecessorIndex = successor.predecessors.indexOf(block);
+          assert(predecessorIndex >= 0);
+          for (final phi in successor.phis) {
+            phi.setInputAt(
+              predecessorIndex,
+              variableValues[phi.variable.index]!,
+            );
+            phi.addInputToUseList(predecessorIndex);
+          }
+        }
+      }
+      final dominated = block.dominatedBlocks;
+      if (dominated.isNotEmpty) {
+        for (var i = dominated.length - 1; i > 0; --i) {
+          workList.add((dominated[i], List<Definition?>.of(variableValues)));
+        }
+        workList.add((dominated.first, variableValues));
+      }
+    }
+  }
+}
diff --git a/pkg/cfg/lib/ir/use_lists.dart b/pkg/cfg/lib/ir/use_lists.dart
new file mode 100644
index 0000000..4075280
--- /dev/null
+++ b/pkg/cfg/lib/ir/use_lists.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/utils/arena.dart';
+
+/// A single use of the result of the instruction in another instruction.
+extension type const Use(ArenaPointer _ptr) {
+  // Terminator in the use lists.
+  static const Use Null = Use(ArenaPointer.Null);
+
+  // Each use occupies 4 slots:
+  // instruction index, definition index, next use, previous use.
+  static const int instructionOffset = 0;
+  static const int definitionOffset = 1;
+  static const int nextOffset = 2;
+  static const int previousOffset = 3;
+
+  // Size of each use. Should be a power of 2 for efficiency.
+  static const int useSize = 4;
+
+  @pragma("vm:prefer-inline")
+  void init(FlowGraph graph, Instruction instr) {
+    setInstruction(graph, instr);
+    setNext(graph, Use.Null);
+    setPrevious(graph, Use.Null);
+  }
+
+  @pragma("vm:prefer-inline")
+  Instruction getInstruction(FlowGraph graph) =>
+      graph.instructions[graph[_ptr + instructionOffset]];
+
+  @pragma("vm:prefer-inline")
+  void setInstruction(FlowGraph graph, Instruction value) {
+    graph[_ptr + instructionOffset] = value.id;
+  }
+
+  @pragma("vm:prefer-inline")
+  Definition getDefinition(FlowGraph graph) =>
+      graph.instructions[graph[_ptr + definitionOffset]] as Definition;
+
+  @pragma("vm:prefer-inline")
+  void setDefinition(FlowGraph graph, Definition value) {
+    graph[_ptr + definitionOffset] = value.id;
+  }
+
+  @pragma("vm:prefer-inline")
+  Use getNext(FlowGraph graph) => Use(ArenaPointer(graph[_ptr + nextOffset]));
+
+  @pragma("vm:prefer-inline")
+  void setNext(FlowGraph graph, Use value) {
+    graph[_ptr + nextOffset] = value._ptr.toInt();
+  }
+
+  @pragma("vm:prefer-inline")
+  Use getPrevious(FlowGraph graph) =>
+      Use(ArenaPointer(graph[_ptr + previousOffset]));
+
+  @pragma("vm:prefer-inline")
+  void setPrevious(FlowGraph graph, Use value) {
+    graph[_ptr + previousOffset] = value._ptr.toInt();
+  }
+}
+
+/// Fixed-size array of uses.
+extension type const UsesArray(ArenaPointer _ptr) {
+  // Array has a length, followed by elements.
+  static const int lengthOffset = 0;
+  static const int elementsOffset = 1;
+
+  int getLength(FlowGraph graph) {
+    assert(_ptr != ArenaPointer.Null);
+    return graph[_ptr + lengthOffset];
+  }
+
+  Use at(FlowGraph graph, int index) {
+    assert(_ptr != ArenaPointer.Null);
+    assert(0 <= index && index < getLength(graph));
+    return Use(_ptr + elementsOffset + index * Use.useSize);
+  }
+
+  void truncateTo(FlowGraph graph, int newLength) {
+    assert(_ptr != ArenaPointer.Null);
+    assert((0 <= newLength) && (newLength <= getLength(graph)));
+    graph[_ptr + lengthOffset] = newLength;
+  }
+
+  static UsesArray allocate(FlowGraph graph, int length) {
+    assert(length >= 0);
+    final ptr = graph.allocate(elementsOffset + length * Use.useSize);
+    graph[ptr + lengthOffset] = length;
+    return UsesArray(ptr);
+  }
+}
+
+class _UsesIterator implements Iterator<Use> {
+  final FlowGraph graph;
+  Use _current = Use.Null;
+  Use _next;
+
+  _UsesIterator(this.graph, this._next);
+
+  @override
+  bool moveNext() {
+    _current = _next;
+    _next = (_current != Use.Null) ? _current.getNext(graph) : Use.Null;
+    return (_current != Use.Null);
+  }
+
+  @override
+  Use get current => _current;
+}
+
+class UsesIterable extends Iterable<Use> {
+  final FlowGraph graph;
+  Use _first;
+
+  UsesIterable(this.graph, this._first);
+  UsesIterable.empty(this.graph) : _first = Use.Null;
+
+  @override
+  Iterator<Use> get iterator => _UsesIterator(graph, _first);
+}
diff --git a/pkg/cfg/lib/ir/visitor.dart b/pkg/cfg/lib/ir/visitor.dart
new file mode 100644
index 0000000..f7a608f
--- /dev/null
+++ b/pkg/cfg/lib/ir/visitor.dart
@@ -0,0 +1,93 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/instructions.dart';
+
+/// Visitor over [Instruction].
+abstract interface class InstructionVisitor<R> {
+  // Basic blocks.
+  R visitEntryBlock(EntryBlock instr);
+  R visitJoinBlock(JoinBlock instr);
+  R visitTargetBlock(TargetBlock instr);
+  R visitCatchBlock(CatchBlock instr);
+  // Regular instructions.
+  R visitGoto(Goto instr);
+  R visitBranch(Branch instr);
+  R visitTryEntry(TryEntry instr);
+  R visitPhi(Phi instr);
+  R visitReturn(Return instr);
+  R visitComparison(Comparison instr);
+  R visitConstant(Constant instr);
+  R visitDirectCall(DirectCall instr);
+  R visitInterfaceCall(InterfaceCall instr);
+  R visitDynamicCall(DynamicCall instr);
+  R visitParameter(Parameter instr);
+  R visitLoadLocal(LoadLocal instr);
+  R visitStoreLocal(StoreLocal instr);
+  R visitThrow(Throw instr);
+  R visitTypeParameters(TypeParameters instr);
+  R visitTypeCast(TypeCast instr);
+  R visitTypeTest(TypeTest instr);
+  R visitTypeArguments(TypeArguments instr);
+  R visitBinaryIntOp(BinaryIntOp instr);
+  R visitUnaryIntOp(UnaryIntOp instr);
+  R visitBinaryDoubleOp(BinaryDoubleOp instr);
+  R visitUnaryDoubleOp(UnaryDoubleOp instr);
+  // Back-end specific instructions.
+  R visitCompareAndBranch(CompareAndBranch instr);
+  R visitParallelMove(ParallelMove instr);
+}
+
+/// Visitor over [Instruction] which has an overridable default behavior for
+/// different categories of instructions.
+abstract mixin class DefaultInstructionVisitor<R>
+    implements InstructionVisitor<R> {
+  /// Default behavior for all instructions.
+  R defaultInstruction(Instruction instr);
+
+  /// Default behavior for basic blocks.
+  R defaultBlock(Block instr) => defaultInstruction(instr);
+
+  /// Default behavior for back-end specific instructions.
+  R defaultBackendInstruction(BackendInstruction instr) =>
+      defaultInstruction(instr);
+
+  // Basic blocks.
+  R visitEntryBlock(EntryBlock instr) => defaultBlock(instr);
+  R visitJoinBlock(JoinBlock instr) => defaultBlock(instr);
+  R visitTargetBlock(TargetBlock instr) => defaultBlock(instr);
+  R visitCatchBlock(CatchBlock instr) => defaultBlock(instr);
+  // Regular instructions.
+  R visitGoto(Goto instr) => defaultInstruction(instr);
+  R visitBranch(Branch instr) => defaultInstruction(instr);
+  R visitTryEntry(TryEntry instr) => defaultInstruction(instr);
+  R visitPhi(Phi instr) => defaultInstruction(instr);
+  R visitReturn(Return instr) => defaultInstruction(instr);
+  R visitComparison(Comparison instr) => defaultInstruction(instr);
+  R visitConstant(Constant instr) => defaultInstruction(instr);
+  R visitDirectCall(DirectCall instr) => defaultInstruction(instr);
+  R visitInterfaceCall(InterfaceCall instr) => defaultInstruction(instr);
+  R visitDynamicCall(DynamicCall instr) => defaultInstruction(instr);
+  R visitParameter(Parameter instr) => defaultInstruction(instr);
+  R visitLoadLocal(LoadLocal instr) => defaultInstruction(instr);
+  R visitStoreLocal(StoreLocal instr) => defaultInstruction(instr);
+  R visitThrow(Throw instr) => defaultInstruction(instr);
+  R visitTypeParameters(TypeParameters instr) => defaultInstruction(instr);
+  R visitTypeCast(TypeCast instr) => defaultInstruction(instr);
+  R visitTypeTest(TypeTest instr) => defaultInstruction(instr);
+  R visitTypeArguments(TypeArguments instr) => defaultInstruction(instr);
+  R visitBinaryIntOp(BinaryIntOp instr) => defaultInstruction(instr);
+  R visitUnaryIntOp(UnaryIntOp instr) => defaultInstruction(instr);
+  R visitBinaryDoubleOp(BinaryDoubleOp instr) => defaultInstruction(instr);
+  R visitUnaryDoubleOp(UnaryDoubleOp instr) => defaultInstruction(instr);
+  // Back-end specific instructions.
+  R visitCompareAndBranch(CompareAndBranch instr) =>
+      defaultBackendInstruction(instr);
+  R visitParallelMove(ParallelMove instr) => defaultBackendInstruction(instr);
+}
+
+/// Visitor over [Instruction] which does not yield a value.
+base class VoidInstructionVisitor extends DefaultInstructionVisitor<void> {
+  void defaultInstruction(Instruction instr) {}
+}
diff --git a/pkg/cfg/lib/passes/pass.dart b/pkg/cfg/lib/passes/pass.dart
new file mode 100644
index 0000000..974e6b9
--- /dev/null
+++ b/pkg/cfg/lib/passes/pass.dart
@@ -0,0 +1,146 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/flow_graph.dart';
+import 'package:cfg/ir/flow_graph_checker.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/ir_to_text.dart';
+
+/// Base class for a pass in the compiler pipeline.
+abstract base class Pass {
+  final String name;
+  late final ErrorContext errorContext;
+  late final FlowGraph graph;
+
+  Pass(this.name);
+
+  void initialize(ErrorContext errorContext, FlowGraph graph) {
+    this.errorContext = errorContext;
+    this.graph = graph;
+  }
+
+  void run();
+
+  // Set instruction currently being processed by the pass.
+  // Used for crash reporting.
+  void set currentInstruction(Instruction? instr) {
+    errorContext.instruction = instr;
+  }
+
+  // Set block currently being processed by the pass.
+  // Used for crash reporting.
+  void set currentBlock(Block? block) {
+    errorContext.block = block;
+  }
+}
+
+/// Sequence of passes.
+///
+/// Provides detailed crash reporting and
+/// performs flow graph checking after each pass.
+class Pipeline {
+  final ErrorContext errorContext = ErrorContext();
+  final List<Pass> passes = [];
+
+  Pipeline(List<Pass> passes) {
+    this.passes.add(
+      FlowGraphChecker('FlowGraphChecker after FlowGraph construction'),
+    );
+    for (final pass in passes) {
+      this.passes.add(pass);
+      this.passes.add(FlowGraphChecker('FlowGraphChecker after ${pass.name}'));
+    }
+  }
+
+  void run(FlowGraph graph) {
+    errorContext.runWithContext(() {
+      for (final pass in passes) {
+        errorContext.graph = graph;
+        errorContext.pass = pass.name;
+
+        pass.initialize(errorContext, graph);
+        pass.run();
+
+        errorContext.clear();
+      }
+    });
+  }
+}
+
+/// Provides detailed context when handling a compiler crash.
+class ErrorContext {
+  String? pass;
+  FlowGraph? graph;
+  Block? block;
+  Instruction? instruction;
+  String? Function(Instruction)? annotator;
+
+  /// Run given [action] and print this error context
+  /// if [action] throws any exception.
+  T runWithContext<T>(T Function() action) {
+    try {
+      return action();
+    } catch (_) {
+      print(
+        'Compiler crashed while compiling ${graph?.function ?? 'unknown function'}:',
+      );
+      print('-------------------------------');
+      print(this);
+      print('-------------------------------');
+      rethrow;
+    }
+  }
+
+  void clear() {
+    pass = null;
+    graph = null;
+    block = null;
+    instruction = null;
+    annotator = null;
+  }
+
+  @override
+  String toString() {
+    final buf = StringBuffer();
+    final graph = this.graph;
+    if (pass != null) {
+      buf.writeln('Pass: $pass');
+    }
+    if (graph != null) {
+      buf.writeln('IR:');
+      try {
+        buf.writeln(IrToText(graph, annotator: annotator));
+      } catch (e, st) {
+        buf.writeln('<unknown>');
+        buf.writeln(e);
+        buf.writeln(st);
+      }
+    }
+    final block = this.block;
+    if (block != null) {
+      try {
+        buf.writeln(
+          'Block: ${IrToText.instruction(block, annotator: annotator)}',
+        );
+      } catch (e, st) {
+        buf.writeln('<unknown>');
+        buf.writeln(e);
+        buf.writeln(st);
+      }
+    }
+    final instruction = this.instruction;
+    if (instruction != null) {
+      try {
+        buf.writeln(
+          'Instruction: ${IrToText.instruction(instruction, annotator: annotator)}',
+        );
+      } catch (e, st) {
+        buf.writeln('<unknown>');
+        buf.writeln(e);
+        buf.writeln(st);
+      }
+    }
+    return buf.toString();
+  }
+}
diff --git a/pkg/cfg/lib/utils/bit_vector.dart b/pkg/cfg/lib/utils/bit_vector.dart
index f2e4c90..31afc9d 100644
--- a/pkg/cfg/lib/utils/bit_vector.dart
+++ b/pkg/cfg/lib/utils/bit_vector.dart
@@ -57,7 +57,7 @@
 
   /// Clears all bits.
   void clear() {
-    for (int i = 0; i < _bits.length; ++i) {
+    for (var i = 0; i < _bits.length; ++i) {
       _bits[i] = 0;
     }
   }
@@ -65,7 +65,7 @@
   /// Bitwise [this] = [this] & [other].
   void intersect(BitVector other) {
     assert(this._bits.length == other._bits.length);
-    for (int i = 0; i < _bits.length; ++i) {
+    for (var i = 0; i < _bits.length; ++i) {
       _bits[i] = _bits[i] & other._bits[i];
     }
   }
@@ -74,8 +74,8 @@
   /// Returns true iff [this] has changed.
   bool addAll(BitVector other) {
     assert(this._bits.length == other._bits.length);
-    bool changed = false;
-    for (int i = 0; i < _bits.length; ++i) {
+    var changed = false;
+    for (var i = 0; i < _bits.length; ++i) {
       final before = _bits[i];
       final after = before | other._bits[i];
       if (before != after) {
@@ -91,8 +91,8 @@
   bool addSubtraction(BitVector a, BitVector b) {
     assert(this._bits.length == a._bits.length);
     assert(this._bits.length == b._bits.length);
-    bool changed = false;
-    for (int i = 0; i < _bits.length; ++i) {
+    var changed = false;
+    for (var i = 0; i < _bits.length; ++i) {
       final before = _bits[i];
       final after = before | (a._bits[i] & ~b._bits[i]);
       if (before != after) {
@@ -108,8 +108,8 @@
   bool addIntersection(BitVector a, BitVector b) {
     assert(this._bits.length == a._bits.length);
     assert(this._bits.length == b._bits.length);
-    bool changed = false;
-    for (int i = 0; i < _bits.length; ++i) {
+    var changed = false;
+    for (var i = 0; i < _bits.length; ++i) {
       final before = _bits[i];
       final after = before | (a._bits[i] & b._bits[i]);
       if (before != after) {
diff --git a/pkg/cfg/lib/utils/misc.dart b/pkg/cfg/lib/utils/misc.dart
index 0f97a3b..5fe883c 100644
--- a/pkg/cfg/lib/utils/misc.dart
+++ b/pkg/cfg/lib/utils/misc.dart
@@ -5,7 +5,7 @@
 /// Compares elements of the given lists.
 bool listEquals(List<Object?> a, List<Object?> b) {
   if (a.length != b.length) return false;
-  for (int i = 0; i < a.length; i++) {
+  for (var i = 0; i < a.length; i++) {
     if (a[i] != b[i]) return false;
   }
   return true;
@@ -35,7 +35,7 @@
 /// stable over different runs, which is needed to keep compiler
 /// fully deterministic.
 int listHashCode(List<Object?> list) {
-  int hash = 1;
+  var hash = 1;
   for (final e in list) {
     hash = combineHash(hash, e.hashCode);
   }
diff --git a/pkg/cfg/pubspec.yaml b/pkg/cfg/pubspec.yaml
index f18b5fc..1a556d7 100644
--- a/pkg/cfg/pubspec.yaml
+++ b/pkg/cfg/pubspec.yaml
@@ -16,3 +16,4 @@
 dev_dependencies:
   front_end: any
   test: any
+  vm: any
diff --git a/pkg/cfg/test/ir/constant_value_test.dart b/pkg/cfg/test/ir/constant_value_test.dart
new file mode 100644
index 0000000..41f238e
--- /dev/null
+++ b/pkg/cfg/test/ir/constant_value_test.dart
@@ -0,0 +1,512 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/constant_value.dart';
+import 'package:cfg/ir/global_context.dart';
+import 'package:cfg/ir/instructions.dart';
+import 'package:cfg/ir/types.dart';
+import 'package:kernel/ast.dart' as ast;
+import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
+import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/type_environment.dart';
+import 'package:test/test.dart';
+import '../test_helpers.dart';
+
+void main() {
+  final component = readVmPlatformKernelFile();
+  final coreTypes = CoreTypes(component);
+  final classHierarchy = ClassHierarchy(component, coreTypes);
+  final typeEnvironment = TypeEnvironment(coreTypes, classHierarchy);
+  final globalContext = GlobalContext(typeEnvironment: typeEnvironment);
+
+  group('constant values', () {
+    setUp(() {
+      GlobalContext.setCurrentContext(globalContext);
+    });
+
+    tearDown(() {
+      GlobalContext.setCurrentContext(null);
+    });
+
+    test('int', () {
+      final values = <int>[
+        0x80000000_00000000,
+        0x7fffffff_ffffffff,
+        -1,
+        0,
+        1,
+        42,
+        -0xffffffff,
+      ];
+      for (final v in values) {
+        final cv = ConstantValue.fromInt(v);
+        expect(ConstantValue(ast.IntConstant(v)), equals(cv));
+        expect(cv.isInt, isTrue);
+        expect(cv.isDouble, isFalse);
+        expect(cv.isBool, isFalse);
+        expect(cv.isNull, isFalse);
+        expect(cv.isString, isFalse);
+        expect(cv.intValue, equals(v));
+        expect(cv.type is IntType, isTrue);
+        expect(cv.isZero, equals(v == 0));
+        expect(cv.isNegative, equals(v < 0));
+        expect(cv.valueToString(), equals(v.toString()));
+      }
+    });
+
+    test('double', () {
+      final values = <double>[
+        -1.0,
+        -0.0,
+        0.0,
+        1.0,
+        double.infinity,
+        double.negativeInfinity,
+        double.nan,
+        1e100,
+      ];
+      for (final v in values) {
+        final cv = ConstantValue.fromDouble(v);
+        expect(ConstantValue(ast.DoubleConstant(v)), equals(cv));
+        expect(cv.isInt, isFalse);
+        expect(cv.isDouble, isTrue);
+        expect(cv.isBool, isFalse);
+        expect(cv.isNull, isFalse);
+        expect(cv.isString, isFalse);
+        expect(cv.doubleValue, same(v));
+        expect(cv.type is DoubleType, isTrue);
+        expect(cv.isZero, equals(v == 0.0));
+        expect(cv.isNegative, equals(v.isNegative));
+        expect(cv.valueToString(), equals(v.toString()));
+      }
+    });
+
+    test('bool', () {
+      final values = <bool>[true, false];
+      for (final v in values) {
+        final cv = ConstantValue.fromBool(v);
+        expect(ConstantValue(ast.BoolConstant(v)), equals(cv));
+        expect(cv.isInt, isFalse);
+        expect(cv.isDouble, isFalse);
+        expect(cv.isBool, isTrue);
+        expect(cv.isNull, isFalse);
+        expect(cv.isString, isFalse);
+        expect(cv.boolValue, equals(v));
+        expect(cv.type is BoolType, isTrue);
+        expect(cv.isZero, isFalse);
+        expect(cv.isNegative, isFalse);
+        expect(cv.valueToString(), equals(v.toString()));
+      }
+    });
+
+    test('null', () {
+      final cv = ConstantValue.fromNull();
+      expect(ConstantValue(ast.NullConstant()), equals(cv));
+      expect(cv.isInt, isFalse);
+      expect(cv.isDouble, isFalse);
+      expect(cv.isBool, isFalse);
+      expect(cv.isNull, isTrue);
+      expect(cv.isString, isFalse);
+      expect(cv.type is NullType, isTrue);
+      expect(cv.isZero, isFalse);
+      expect(cv.isNegative, isFalse);
+      expect(cv.valueToString(), equals(null.toString()));
+    });
+
+    test('string', () {
+      final values = <String>['', 'a', 'abcdef'];
+      for (final v in values) {
+        final cv = ConstantValue.fromString(v);
+        expect(ConstantValue(ast.StringConstant(v)), equals(cv));
+        expect(cv.isInt, isFalse);
+        expect(cv.isDouble, isFalse);
+        expect(cv.isBool, isFalse);
+        expect(cv.isNull, isFalse);
+        expect(cv.isString, isTrue);
+        expect(cv.stringValue, equals(v));
+        expect(cv.type is StringType, isTrue);
+        expect(cv.isZero, isFalse);
+        expect(cv.isNegative, isFalse);
+        expect(cv.valueToString(), equals('"$v"'));
+      }
+    });
+
+    test('type arguments', () {
+      final values = <List<ast.DartType>>[
+        [],
+        [coreTypes.stringNullableRawType],
+        [coreTypes.intNonNullableRawType, coreTypes.stringNonNullableRawType],
+      ];
+      for (final v in values) {
+        final cv = ConstantValue(TypeArgumentsConstant(v));
+        expect(ConstantValue(TypeArgumentsConstant(List.of(v))), equals(cv));
+        expect(cv.isInt, isFalse);
+        expect(cv.isDouble, isFalse);
+        expect(cv.isBool, isFalse);
+        expect(cv.isNull, isFalse);
+        expect(cv.isString, isFalse);
+        expect(cv.type is TypeArgumentsType, isTrue);
+        expect(cv.isZero, isFalse);
+        expect(cv.isNegative, isFalse);
+      }
+    });
+  });
+
+  group('constant folding', () {
+    final constantFolding = const ConstantFolding();
+
+    setUp(() {
+      GlobalContext.setCurrentContext(globalContext);
+    });
+
+    tearDown(() {
+      GlobalContext.setCurrentContext(null);
+    });
+
+    test('comparison - equal', () {
+      void eq(ConstantValue left, ConstantValue right) {
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.equal, left, right)
+              .boolValue,
+          isTrue,
+        );
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.notEqual, left, right)
+              .boolValue,
+          isFalse,
+        );
+      }
+
+      void ne(ConstantValue left, ConstantValue right) {
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.equal, left, right)
+              .boolValue,
+          isFalse,
+        );
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.notEqual, left, right)
+              .boolValue,
+          isTrue,
+        );
+      }
+
+      eq(ConstantValue.fromString('a'), ConstantValue.fromString('a'));
+      ne(ConstantValue.fromString('a'), ConstantValue.fromString('b'));
+      eq(ConstantValue.fromInt(42), ConstantValue.fromInt(42));
+      ne(ConstantValue.fromInt(42), ConstantValue.fromInt(43));
+      ne(ConstantValue.fromInt(0), ConstantValue.fromDouble(0.0));
+      eq(
+        ConstantValue.fromDouble(double.nan),
+        ConstantValue.fromDouble(double.nan),
+      );
+      ne(ConstantValue.fromDouble(0.0), ConstantValue.fromDouble(-0.0));
+    });
+
+    test('comparison - identical', () {
+      void eq(ConstantValue left, ConstantValue right) {
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.identical, left, right)
+              .boolValue,
+          isTrue,
+        );
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.notIdentical, left, right)
+              .boolValue,
+          isFalse,
+        );
+      }
+
+      void ne(ConstantValue left, ConstantValue right) {
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.identical, left, right)
+              .boolValue,
+          isFalse,
+        );
+        expect(
+          constantFolding
+              .comparison(ComparisonOpcode.notIdentical, left, right)
+              .boolValue,
+          isTrue,
+        );
+      }
+
+      eq(ConstantValue.fromString('a'), ConstantValue.fromString('a'));
+      ne(ConstantValue.fromString('a'), ConstantValue.fromString('b'));
+      eq(ConstantValue.fromInt(42), ConstantValue.fromInt(42));
+      ne(ConstantValue.fromInt(42), ConstantValue.fromInt(43));
+      ne(ConstantValue.fromInt(0), ConstantValue.fromDouble(0.0));
+      eq(
+        ConstantValue.fromDouble(double.nan),
+        ConstantValue.fromDouble(double.nan),
+      );
+      ne(ConstantValue.fromDouble(0.0), ConstantValue.fromDouble(-0.0));
+    });
+
+    test('comparison - int', () {
+      final values = <(int, int)>[
+        (0, 1),
+        (1, 0),
+        (42, 6),
+        (10, -5),
+        (-3, 1),
+        (0x80000000_00000000, -1),
+        (-10, 0x7fffffff_ffffffff),
+      ];
+
+      void testOp(
+        ComparisonOpcode opcode,
+        bool Function(int, int) expectedBehavior,
+      ) {
+        for (final pair in values) {
+          expect(
+            constantFolding
+                .comparison(
+                  opcode,
+                  ConstantValue.fromInt(pair.$1),
+                  ConstantValue.fromInt(pair.$2),
+                )
+                .boolValue,
+            equals(expectedBehavior(pair.$1, pair.$2)),
+          );
+        }
+      }
+
+      testOp(ComparisonOpcode.intEqual, (int a, int b) => a == b);
+      testOp(ComparisonOpcode.intNotEqual, (int a, int b) => a != b);
+      testOp(ComparisonOpcode.intLess, (int a, int b) => a < b);
+      testOp(ComparisonOpcode.intLessOrEqual, (int a, int b) => a <= b);
+      testOp(ComparisonOpcode.intGreater, (int a, int b) => a > b);
+      testOp(ComparisonOpcode.intGreaterOrEqual, (int a, int b) => a >= b);
+    });
+
+    test('comparison - double', () {
+      final values = <(double, double)>[
+        (1.0, 1.0),
+        (1.0, -1.0),
+        (0.0, -0.0),
+        (42.0, double.infinity),
+        (double.negativeInfinity, -1e100),
+        (1.0, double.nan),
+        (double.nan, double.nan),
+      ];
+
+      void testOp(
+        ComparisonOpcode opcode,
+        bool Function(double, double) expectedBehavior,
+      ) {
+        for (final pair in values) {
+          expect(
+            constantFolding
+                .comparison(
+                  opcode,
+                  ConstantValue.fromDouble(pair.$1),
+                  ConstantValue.fromDouble(pair.$2),
+                )
+                .boolValue,
+            equals(expectedBehavior(pair.$1, pair.$2)),
+          );
+        }
+      }
+
+      testOp(ComparisonOpcode.doubleEqual, (double a, double b) => a == b);
+      testOp(ComparisonOpcode.doubleNotEqual, (double a, double b) => a != b);
+      testOp(ComparisonOpcode.doubleLess, (double a, double b) => a < b);
+      testOp(
+        ComparisonOpcode.doubleLessOrEqual,
+        (double a, double b) => a <= b,
+      );
+      testOp(ComparisonOpcode.doubleGreater, (double a, double b) => a > b);
+      testOp(
+        ComparisonOpcode.doubleGreaterOrEqual,
+        (double a, double b) => a >= b,
+      );
+    });
+
+    test('binary int op', () {
+      final values = <(int, int)>[
+        (0, 1),
+        (1, 0),
+        (42, 6),
+        (10, -5),
+        (-3, 1),
+        (0x80000000_00000000, -1),
+        (-10, 0x7fffffff_ffffffff),
+      ];
+
+      void testOp(
+        BinaryIntOpcode opcode,
+        int Function(int, int) expectedBehavior,
+      ) {
+        for (final pair in values) {
+          ConstantValue? expected;
+          try {
+            expected = ConstantValue.fromInt(
+              expectedBehavior(pair.$1, pair.$2),
+            );
+          } on Error {
+            // Ignore runtime errors.
+          }
+          expect(
+            constantFolding.binaryIntOp(
+              opcode,
+              ConstantValue.fromInt(pair.$1),
+              ConstantValue.fromInt(pair.$2),
+            ),
+            equals(expected),
+          );
+        }
+      }
+
+      testOp(BinaryIntOpcode.add, (int a, int b) => a + b);
+      testOp(BinaryIntOpcode.sub, (int a, int b) => a - b);
+      testOp(BinaryIntOpcode.mul, (int a, int b) => a * b);
+      testOp(BinaryIntOpcode.truncatingDiv, (int a, int b) => a ~/ b);
+      testOp(BinaryIntOpcode.mod, (int a, int b) => a % b);
+      testOp(BinaryIntOpcode.rem, (int a, int b) => a.remainder(b));
+      testOp(BinaryIntOpcode.bitOr, (int a, int b) => a | b);
+      testOp(BinaryIntOpcode.bitAnd, (int a, int b) => a & b);
+      testOp(BinaryIntOpcode.bitXor, (int a, int b) => a ^ b);
+      testOp(BinaryIntOpcode.shiftLeft, (int a, int b) => a << b);
+      testOp(BinaryIntOpcode.shiftRight, (int a, int b) => a >> b);
+      testOp(BinaryIntOpcode.unsignedShiftRight, (int a, int b) => a >>> b);
+    });
+
+    test('unary int op', () {
+      final values = <int>[
+        0,
+        1,
+        -1,
+        42,
+        -123,
+        0x80000000_00000000,
+        0x7fffffff_ffffffff,
+      ];
+
+      void testOp(UnaryIntOpcode opcode, num Function(int) expectedBehavior) {
+        for (final v in values) {
+          final expected = expectedBehavior(v);
+          final expectedConstValue = switch (expected) {
+            double() => ConstantValue.fromDouble(expected),
+            int() => ConstantValue.fromInt(expected),
+          };
+          expect(
+            constantFolding.unaryIntOp(opcode, ConstantValue.fromInt(v)),
+            equals(expectedConstValue),
+          );
+        }
+      }
+
+      testOp(UnaryIntOpcode.neg, (int v) => -v);
+      testOp(UnaryIntOpcode.bitNot, (int v) => ~v);
+      testOp(UnaryIntOpcode.toDouble, (int v) => v.toDouble());
+      testOp(UnaryIntOpcode.abs, (int v) => v.abs());
+      testOp(UnaryIntOpcode.sign, (int v) => v.sign);
+    });
+
+    test('binary double op', () {
+      final values = <(double, double)>[
+        (1.0, 1.0),
+        (1.0, -1.0),
+        (0.0, -0.0),
+        (42.0, double.infinity),
+        (double.negativeInfinity, -1e100),
+        (1.0, double.nan),
+        (double.nan, double.nan),
+      ];
+
+      void testOp(
+        BinaryDoubleOpcode opcode,
+        num Function(double, double) expectedBehavior,
+      ) {
+        for (final pair in values) {
+          ConstantValue? expectedConstValue;
+          try {
+            final expected = expectedBehavior(pair.$1, pair.$2);
+            expectedConstValue = switch (expected) {
+              double() => ConstantValue.fromDouble(expected),
+              int() => ConstantValue.fromInt(expected),
+            };
+          } on Error {
+            // Ignore runtime errors.
+          }
+          expect(
+            constantFolding.binaryDoubleOp(
+              opcode,
+              ConstantValue.fromDouble(pair.$1),
+              ConstantValue.fromDouble(pair.$2),
+            ),
+            equals(expectedConstValue),
+          );
+        }
+      }
+
+      testOp(BinaryDoubleOpcode.add, (double a, double b) => a + b);
+      testOp(BinaryDoubleOpcode.sub, (double a, double b) => a - b);
+      testOp(BinaryDoubleOpcode.mul, (double a, double b) => a * b);
+      testOp(BinaryDoubleOpcode.mod, (double a, double b) => a % b);
+      testOp(BinaryDoubleOpcode.rem, (double a, double b) => a.remainder(b));
+      testOp(BinaryDoubleOpcode.div, (double a, double b) => a / b);
+      testOp(BinaryDoubleOpcode.truncatingDiv, (double a, double b) => a ~/ b);
+    });
+
+    test('unary double op', () {
+      final values = <double>[
+        1.0,
+        -1.0,
+        0.0,
+        -0.0,
+        42.0,
+        -1e100,
+        double.infinity,
+        double.negativeInfinity,
+        double.nan,
+      ];
+
+      void testOp(
+        UnaryDoubleOpcode opcode,
+        num Function(double) expectedBehavior,
+      ) {
+        for (final v in values) {
+          ConstantValue? expectedConstValue;
+          try {
+            final expected = expectedBehavior(v);
+            expectedConstValue = switch (expected) {
+              double() => ConstantValue.fromDouble(expected),
+              int() => ConstantValue.fromInt(expected),
+            };
+          } on Error {
+            // Ignore runtime errors.
+          }
+          expect(
+            constantFolding.unaryDoubleOp(opcode, ConstantValue.fromDouble(v)),
+            equals(expectedConstValue),
+          );
+        }
+      }
+
+      testOp(UnaryDoubleOpcode.neg, (double v) => -v);
+      testOp(UnaryDoubleOpcode.abs, (double v) => v.abs());
+      testOp(UnaryDoubleOpcode.sign, (double v) => v.sign);
+      testOp(UnaryDoubleOpcode.square, (double v) => v * v);
+      testOp(UnaryDoubleOpcode.round, (double v) => v.round());
+      testOp(UnaryDoubleOpcode.floor, (double v) => v.floor());
+      testOp(UnaryDoubleOpcode.ceil, (double v) => v.ceil());
+      testOp(UnaryDoubleOpcode.truncate, (double v) => v.truncate());
+      testOp(UnaryDoubleOpcode.roundToDouble, (double v) => v.roundToDouble());
+      testOp(UnaryDoubleOpcode.floorToDouble, (double v) => v.floorToDouble());
+      testOp(UnaryDoubleOpcode.ceilToDouble, (double v) => v.ceilToDouble());
+      testOp(
+        UnaryDoubleOpcode.truncateToDouble,
+        (double v) => v.truncateToDouble(),
+      );
+    });
+  });
+}
diff --git a/pkg/cfg/test/ir_test.dart b/pkg/cfg/test/ir_test.dart
new file mode 100644
index 0000000..f32d801
--- /dev/null
+++ b/pkg/cfg/test/ir_test.dart
@@ -0,0 +1,194 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:cfg/ir/global_context.dart';
+import 'package:front_end/src/api_unstable/vm.dart'
+    show
+        CompilerOptions,
+        computePlatformBinariesLocation,
+        CfeDiagnosticMessage,
+        kernelForProgram;
+import 'package:kernel/ast.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/kernel.dart';
+import 'package:kernel/target/targets.dart';
+import 'package:cfg/front_end/ast_to_ir.dart';
+import 'package:cfg/front_end/recognized_methods.dart';
+import 'package:cfg/ir/functions.dart';
+import 'package:cfg/ir/ir_to_text.dart';
+import 'package:cfg/ir/ssa_computation.dart';
+import 'package:cfg/passes/pass.dart';
+import 'package:kernel/type_environment.dart';
+import 'package:test/test.dart';
+import 'package:vm/modular/target/vm.dart';
+
+/// Environment define to update expectation files on failures.
+const kUpdateExpectations = 'updateExpectations';
+
+final String dartSdkPkgDir = Platform.script.resolve('../..').toFilePath();
+
+Future<void> runTestCase(Uri source) async {
+  final target = VmTarget(TargetFlags());
+  Component component = await compileTestCaseToKernelProgram(
+    source,
+    target: target,
+  );
+  final coreTypes = CoreTypes(component);
+  final hierarchy = ClassHierarchy(component, coreTypes);
+  final typeEnvironment = TypeEnvironment(coreTypes, hierarchy);
+
+  String actual = GlobalContext.withContext(
+    GlobalContext(typeEnvironment: typeEnvironment),
+    () {
+      final compileAndDump = CompileAndDumpIr();
+
+      final mainLibrary = component.mainMethod!.enclosingLibrary;
+      mainLibrary.accept(compileAndDump);
+
+      return compileAndDump.buffer.toString();
+    },
+  );
+
+  // Remove absolute library URIs.
+  actual = actual.replaceAll(
+    new Uri.file(dartSdkPkgDir).toString(),
+    'DART_SDK/pkg/',
+  );
+
+  compareResultWithExpectationsFile(source, actual);
+}
+
+Future<Component> compileTestCaseToKernelProgram(
+  Uri sourceUri, {
+  required Target target,
+}) async {
+  final platformKernel = computePlatformBinariesLocation().resolve(
+    'vm_platform.dill',
+  );
+  final options = CompilerOptions()
+    ..target = target
+    ..additionalDills = <Uri>[platformKernel]
+    ..environmentDefines = {}
+    ..onDiagnostic = (CfeDiagnosticMessage message) {
+      fail("Compilation error: ${message.plainTextFormatted.join('\n')}");
+    };
+
+  final Component component = (await kernelForProgram(
+    sourceUri,
+    options,
+  ))!.component!;
+
+  // Make sure the library name is the same and does not depend on the order
+  // of test cases.
+  component.mainMethod!.enclosingLibrary.name = '#lib';
+  return component;
+}
+
+class CompileAndDumpIr extends RecursiveVisitor {
+  final FunctionRegistry functionRegistry = FunctionRegistry();
+  final RecognizedMethods recognizedMethods = CommonRecognizedMethods();
+  final buffer = StringBuffer();
+
+  @override
+  void visitProcedure(Procedure node) {
+    final function = functionRegistry.getFunction(
+      node,
+      isGetter: node.isGetter,
+      isSetter: node.isSetter,
+    );
+    // TODO: enable testing of other functions
+    if (function is! RegularFunction) {
+      return;
+    }
+    final graph = AstToIr(
+      function,
+      functionRegistry,
+      recognizedMethods,
+      enableAsserts: true,
+    ).buildFlowGraph();
+    final pipeline = Pipeline([SSAComputation()]);
+    pipeline.run(graph);
+    buffer.writeln('--- ${node.name}');
+    buffer.writeln(
+      IrToText(graph, printDominators: true, printLoops: true).toString(),
+    );
+  }
+}
+
+class Difference {
+  final int line;
+  final String actual;
+  final String expected;
+
+  Difference(this.line, this.actual, this.expected);
+}
+
+Difference findFirstDifference(String actual, String expected) {
+  final actualLines = actual.split('\n');
+  final expectedLines = expected.split('\n');
+  var i = 0;
+  for (; i < actualLines.length && i < expectedLines.length; ++i) {
+    if (actualLines[i] != expectedLines[i]) {
+      return Difference(i + 1, actualLines[i], expectedLines[i]);
+    }
+  }
+  return Difference(
+    i + 1,
+    i < actualLines.length ? actualLines[i] : '<END>',
+    i < expectedLines.length ? expectedLines[i] : '<END>',
+  );
+}
+
+void compareResultWithExpectationsFile(
+  Uri source,
+  String actual, {
+  String expectFilePostfix = '',
+}) {
+  final baseFilename = '${source.toFilePath()}$expectFilePostfix';
+  final expectFile = new File('$baseFilename.expect');
+  final expected = expectFile.existsSync() ? expectFile.readAsStringSync() : '';
+
+  if (actual != expected) {
+    if (bool.fromEnvironment(kUpdateExpectations)) {
+      expectFile.writeAsStringSync(actual);
+      print("  Updated $expectFile");
+    } else {
+      Difference diff = findFirstDifference(actual, expected);
+      fail("""
+
+Result is different for the test case $source
+
+The first difference is at line ${diff.line}.
+Actual:   ${diff.actual}
+Expected: ${diff.expected}
+
+This failure can be caused by changes in the front-end if it starts generating
+different kernel AST for the same Dart programs.
+
+In order to re-generate expectations run test with -D$kUpdateExpectations=true VM option:
+
+  dart -DupdateExpectations=true pkg/cfg/test/ir_test.dart
+
+""");
+    }
+  }
+}
+
+void main() {
+  group('ir-test', () {
+    final testCasesDir = new Directory(dartSdkPkgDir + 'cfg/testcases');
+
+    for (var entry in testCasesDir.listSync(
+      recursive: true,
+      followLinks: false,
+    )) {
+      if (entry.path.endsWith(".dart")) {
+        test(entry.path, () => runTestCase(entry.uri));
+      }
+    }
+  });
+}
diff --git a/pkg/cfg/test/utils/arena_test.dart b/pkg/cfg/test/utils/arena_test.dart
index 8888221..7c80ab2 100644
--- a/pkg/cfg/test/utils/arena_test.dart
+++ b/pkg/cfg/test/utils/arena_test.dart
@@ -65,7 +65,7 @@
     arena[p2 + 2] = 0xf00d0003;
     final size3 = Uint32Arena.initialSize << 3;
     final p3 = arena.allocate(size3);
-    for (int i = 0; i < size3; ++i) {
+    for (var i = 0; i < size3; ++i) {
       arena[p3 + i] = i << 3;
     }
     expect(arena[p1], equals(0x11111111));
@@ -82,10 +82,10 @@
   });
 
   test('double linked list', () {
-    final int n = 10;
+    final n = 10;
     final nodes = <ArenaPointer>[];
     ArenaPointer prev = ArenaPointer.Null;
-    for (int i = 0; i < n; ++i) {
+    for (var i = 0; i < n; ++i) {
       ArenaPointer node = arena.allocate(3); // 3 fields: payload, prev, next.
       nodes.add(node);
       arena[node] = i; // node.payload = i
@@ -97,7 +97,7 @@
       prev = node;
     }
     // Forward iteration.
-    int i = 0;
+    var i = 0;
     for (
       ArenaPointer node = nodes.first;
       node != ArenaPointer.Null;
diff --git a/pkg/cfg/test/utils/bit_vector_test.dart b/pkg/cfg/test/utils/bit_vector_test.dart
index 51e1857..bb33c07 100644
--- a/pkg/cfg/test/utils/bit_vector_test.dart
+++ b/pkg/cfg/test/utils/bit_vector_test.dart
@@ -26,7 +26,7 @@
   });
 
   test('indexing add remove', () {
-    for (int n in [20, 63, 64, 65, 200, 2000]) {
+    for (var n in [20, 63, 64, 65, 200, 2000]) {
       final mid = n ~/ 2;
       final bv = BitVector(n);
 
@@ -71,22 +71,22 @@
   });
 
   test('bulk operations', () {
-    for (int n in [20, 63, 64, 65, 200, 2000]) {
+    for (var n in [20, 63, 64, 65, 200, 2000]) {
       final bv1 = BitVector(n);
       final bv2 = BitVector(n);
       final bv3 = BitVector(n);
 
-      for (int i = 0; i < n; i += 3) {
+      for (var i = 0; i < n; i += 3) {
         bv2[i] = true;
       }
-      for (int i = 0; i < n; i += 5) {
+      for (var i = 0; i < n; i += 5) {
         bv3[i] = true;
       }
 
       expect(bv1.addAll(bv2), isTrue);
       expect(bv1.addAll(bv2), isFalse);
       bv1.intersect(bv3);
-      for (int i = 0; i < n; ++i) {
+      for (var i = 0; i < n; ++i) {
         expect(bv1[i], equals(i % 15 == 0));
         expect(bv2[i], equals(i % 3 == 0));
         expect(bv3[i], equals(i % 5 == 0));
@@ -94,14 +94,14 @@
 
       expect(bv2.addAll(bv1), isFalse);
       expect(bv3.addAll(bv1), isFalse);
-      for (int i = 0; i < n; ++i) {
+      for (var i = 0; i < n; ++i) {
         expect(bv1[i], equals(i % 15 == 0));
         expect(bv2[i], equals(i % 3 == 0));
         expect(bv3[i], equals(i % 5 == 0));
       }
 
       expect(bv2.addSubtraction(bv3, bv1), isTrue);
-      for (int i = 0; i < n; ++i) {
+      for (var i = 0; i < n; ++i) {
         expect(bv1[i], equals(i % 15 == 0));
         expect(bv2[i], equals(i % 3 == 0 || i % 5 == 0));
         expect(bv3[i], equals(i % 5 == 0));
@@ -110,18 +110,18 @@
 
       expect(bv3.addIntersection(bv1, bv2), isFalse);
       expect(bv1.addIntersection(bv2, bv3), isTrue);
-      for (int i = 0; i < n; ++i) {
+      for (var i = 0; i < n; ++i) {
         expect(bv1[i], equals(i % 5 == 0));
         expect(bv2[i], equals(i % 3 == 0 || i % 5 == 0));
         expect(bv3[i], equals(i % 5 == 0));
       }
 
       bv3.clear();
-      for (int i = 0; i < n; ++i) {
+      for (var i = 0; i < n; ++i) {
         expect(bv3[i], isFalse);
       }
 
-      int k = 0;
+      var k = 0;
       for (int bit in bv1.elements) {
         expect(bit, equals(k * 5));
         ++k;
diff --git a/pkg/cfg/test/utils/misc_test.dart b/pkg/cfg/test/utils/misc_test.dart
index e4fb571..7f4aa7a 100644
--- a/pkg/cfg/test/utils/misc_test.dart
+++ b/pkg/cfg/test/utils/misc_test.dart
@@ -49,7 +49,7 @@
     expect(isPowerOf2(0x20001), isFalse);
     expect(isPowerOf2(0x80000000_40000000), isFalse);
 
-    for (int i = 0; i < 64; ++i) {
+    for (var i = 0; i < 64; ++i) {
       expect(isPowerOf2(1 << i), isTrue);
       expect(log2OfPowerOf2(1 << i), equals(i));
 
@@ -61,13 +61,13 @@
   });
 
   test('roundDown and roundUp', () {
-    for (int i = 0; i < 20; ++i) {
+    for (var i = 0; i < 20; ++i) {
       expect(roundDown(i, 1), equals(i));
       expect(roundUp(i, 1), equals(i));
     }
 
-    for (int align = 2; align <= 1024; align <<= 1) {
-      for (int k = 0; k < 20; ++k) {
+    for (var align = 2; align <= 1024; align <<= 1) {
+      for (var k = 0; k < 20; ++k) {
         expect(roundDown(k * align, align), equals(k * align));
         expect(roundDown(k * align + 1, align), equals(k * align));
         expect(roundDown(k * align + align - 1, align), equals(k * align));
diff --git a/pkg/cfg/testcases/calls.dart b/pkg/cfg/testcases/calls.dart
new file mode 100644
index 0000000..44982dc
--- /dev/null
+++ b/pkg/cfg/testcases/calls.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 foo1(int a, {String b});
+  int get foo2;
+  set foo3(double c);
+}
+
+void instanceCalls(A obj, A? obj2, int a, String b, double c) {
+  obj.foo1(a);
+  obj.foo1(a, b: b);
+  final v = obj.foo2;
+  if (obj2 != null) {
+    if (obj == obj2) {
+      obj.foo3 = c + v;
+    }
+  }
+}
+
+int sField = 42;
+
+void staticCalls(int a, Object b) {
+  if (a > 0) {
+    staticCalls(a - 1, b);
+  }
+  sField = sField + 1;
+}
+
+void dynamicCalls(dynamic x, dynamic y, dynamic z) {
+  x.foo1(y, z);
+  final v = y.bar;
+  z.baz = v + 1;
+}
+
+void main() {}
diff --git a/pkg/cfg/testcases/calls.dart.expect b/pkg/cfg/testcases/calls.dart.expect
new file mode 100644
index 0000000..f08bc1a
--- /dev/null
+++ b/pkg/cfg/testcases/calls.dart.expect
@@ -0,0 +1,78 @@
+--- foo1
+B0 = EntryBlock()
+  v4 = Constant(null)
+  Parameter(this)
+  Parameter(a)
+  Parameter(b)
+  Return(v4)
+
+--- instanceCalls
+B0 = EntryBlock() dominates:(B20, B22, B19)
+  v17 = Constant(null)
+  v1 = Parameter(obj)
+  v2 = Parameter(obj2)
+  v3 = Parameter(a)
+  v4 = Parameter(b)
+  v5 = Parameter(c)
+  InterfaceCall A.foo1(v1, v3)
+  InterfaceCall A.foo1(v1, v3, v4)
+  v14 = InterfaceCall getter A.foo2(v1)
+  v18 = Comparison ==(v2, v17)
+  Branch(v18, true: B19, false: B20)
+B19 = TargetBlock() idom:B0
+  Goto(B22)
+B20 = TargetBlock() idom:B0 dominates:(B29, B31, B28)
+  v26 = TypeCast(v2, A, unchecked)
+  v27 = InterfaceCall Object.==(v1, v26)
+  Branch(v27, true: B28, false: B29)
+B28 = TargetBlock() idom:B20
+  v36 = UnaryIntOp toDouble(v14)
+  v37 = BinaryDoubleOp +(v5, v36)
+  InterfaceCall setter A.foo3(v1, v37)
+  Goto(B31)
+B29 = TargetBlock() idom:B20
+  Goto(B31)
+B31 = JoinBlock(B29, B28) idom:B20
+  Goto(B22)
+B22 = JoinBlock(B31, B19) idom:B0
+  Return(v17)
+
+--- staticCalls
+B0 = EntryBlock() dominates:(B7, B9, B6)
+  v4 = Constant(0)
+  v12 = Constant(1)
+  v20 = Constant(null)
+  v1 = Parameter(a)
+  v2 = Parameter(b)
+  v5 = Comparison int >(v1, v4)
+  Branch(v5, true: B6, false: B7)
+B6 = TargetBlock() idom:B0
+  v13 = BinaryIntOp -(v1, v12)
+  DirectCall staticCalls(v13, v2)
+  Goto(B9)
+B7 = TargetBlock() idom:B0
+  Goto(B9)
+B9 = JoinBlock(B7, B6) idom:B0
+  v17 = DirectCall getter sField()
+  v18 = BinaryIntOp +(v17, v12)
+  DirectCall setter sField(v18)
+  Return(v20)
+
+--- dynamicCalls
+B0 = EntryBlock()
+  v13 = Constant(1)
+  v16 = Constant(null)
+  v1 = Parameter(x)
+  v2 = Parameter(y)
+  v3 = Parameter(z)
+  DynamicCall foo1(v1, v2, v3)
+  v9 = DynamicCall get bar(v2)
+  v14 = DynamicCall +(v9, v13)
+  DynamicCall set baz(v3, v14)
+  Return(v16)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant(null)
+  Return(v1)
+
diff --git a/pkg/cfg/testcases/dominators.dart b/pkg/cfg/testcases/dominators.dart
new file mode 100644
index 0000000..af257a1
--- /dev/null
+++ b/pkg/cfg/testcases/dominators.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 example1(bool c1, bool c2, bool c3, bool c4, bool c5) {
+  var x = 0;
+  if (c1) {
+    if (c2) {
+      print(x);
+      x = 1;
+    } else if (c3) {
+      print(x);
+      x = 2;
+    }
+  }
+  print(x);
+  x = 3;
+  if (c4) {
+    while (x < 4) {
+      while (x % 2 == 0) {
+        print(x);
+        x += 2;
+        if (c5) {
+          print(x);
+          return;
+        }
+      }
+      x += 3;
+    }
+  }
+}
+
+void example2(int i, int j) {
+  do {
+    ++i;
+    do {
+      ++j;
+      print(i);
+      if (j % 2 == 0) {
+        print(j);
+        return;
+      }
+    } while (j < i);
+  } while (i + j < 10);
+}
+
+void example3() {
+  print(1);
+  try {
+    print(2);
+  } finally {
+    print(3);
+    try {
+      print(4);
+    } catch (e, st) {
+      print(e);
+      print(st);
+    }
+    print(5);
+  }
+  print(6);
+}
+
+void main() {}
diff --git a/pkg/cfg/testcases/dominators.dart.expect b/pkg/cfg/testcases/dominators.dart.expect
new file mode 100644
index 0000000..fab31b8
--- /dev/null
+++ b/pkg/cfg/testcases/dominators.dart.expect
@@ -0,0 +1,166 @@
+--- example1
+B0 = EntryBlock() dominates:(B10, B12, B9)
+  v6 = Constant(0)
+  v20 = Constant(1)
+  v32 = Constant(2)
+  v39 = Constant(3)
+  v50 = Constant(4)
+  v76 = Constant(null)
+  v1 = Parameter(c1)
+  v2 = Parameter(c2)
+  v3 = Parameter(c3)
+  v4 = Parameter(c4)
+  v5 = Parameter(c5)
+  Branch(v1, true: B9, false: B10)
+B9 = TargetBlock() idom:B0 dominates:(B16, B22, B15)
+  Branch(v2, true: B15, false: B16)
+B15 = TargetBlock() idom:B9
+  DirectCall print(v6)
+  Goto(B22)
+B16 = TargetBlock() idom:B9 dominates:(B26, B28, B25)
+  Branch(v3, true: B25, false: B26)
+B25 = TargetBlock() idom:B16
+  DirectCall print(v6)
+  Goto(B28)
+B26 = TargetBlock() idom:B16
+  Goto(B28)
+B28 = JoinBlock(B26, B25) idom:B16
+  v87 = Phi(v6, v32)
+  Goto(B22)
+B22 = JoinBlock(B28, B15) idom:B9
+  v85 = Phi(v87, v20)
+  Goto(B12)
+B10 = TargetBlock() idom:B0
+  Goto(B12)
+B12 = JoinBlock(B10, B22) idom:B0 dominates:(B43, B45, B42)
+  v86 = Phi(v6, v85)
+  DirectCall print(v86)
+  Branch(v4, true: B42, false: B43)
+B42 = TargetBlock() idom:B12 dominates:(B47)
+  Goto(B47)
+B47 = JoinBlock(B42, B61) idom:B42 dominates:(B53, B52) loop-header (depth:1 body:(B47, B52, B55, B61, B60, B70, B72) back-edges:(B61))
+  v89 = Phi(v39, v80)
+  v51 = Comparison int <(v89, v50)
+  Branch(v51, true: B52, false: B53)
+B52 = TargetBlock() idom:B47 dominates:(B55) in-loop:B47
+  Goto(B55)
+B55 = JoinBlock(B52, B72) idom:B52 dominates:(B61, B60) loop-header (depth:2 body:(B55, B60, B70, B72) back-edges:(B72))
+  v88 = Phi(v89, v66)
+  v58 = BinaryIntOp %(v88, v32)
+  v59 = Comparison int ==(v58, v6)
+  Branch(v59, true: B60, false: B61)
+B60 = TargetBlock() idom:B55 dominates:(B70, B69) in-loop:B55
+  DirectCall print(v88)
+  v66 = BinaryIntOp +(v88, v32)
+  Branch(v5, true: B69, false: B70)
+B69 = TargetBlock() idom:B60
+  DirectCall print(v66)
+  Return(v76)
+B70 = TargetBlock() idom:B60 dominates:(B72) in-loop:B55
+  Goto(B72)
+B72 = JoinBlock(B70) idom:B70 in-loop:B55
+  Goto(B55)
+B61 = TargetBlock() idom:B55 in-loop:B47
+  v80 = BinaryIntOp +(v88, v39)
+  Goto(B47)
+B53 = TargetBlock() idom:B47
+  Goto(B45)
+B43 = TargetBlock() idom:B12
+  Goto(B45)
+B45 = JoinBlock(B43, B53) idom:B12
+  Return(v76)
+
+--- example2
+B0 = EntryBlock() dominates:(B3)
+  v6 = Constant(1)
+  v17 = Constant(2)
+  v19 = Constant(0)
+  v28 = Constant(null)
+  v40 = Constant(10)
+  v1 = Parameter(i)
+  v2 = Parameter(j)
+  Goto(B3)
+B3 = JoinBlock(B0, B42) idom:B0 dominates:(B9) loop-header (depth:1 body:(B3, B9, B22, B24, B34, B42, B33) back-edges:(B42))
+  v48 = Phi(v2, v12)
+  v47 = Phi(v1, v7)
+  v7 = BinaryIntOp +(v47, v6)
+  Goto(B9)
+B9 = JoinBlock(B3, B33) idom:B3 dominates:(B22, B21) loop-header (depth:2 body:(B9, B22, B24, B33) back-edges:(B33))
+  v49 = Phi(v48, v12)
+  v12 = BinaryIntOp +(v49, v6)
+  DirectCall print(v7)
+  v18 = BinaryIntOp %(v12, v17)
+  v20 = Comparison int ==(v18, v19)
+  Branch(v20, true: B21, false: B22)
+B21 = TargetBlock() idom:B9
+  DirectCall print(v12)
+  Return(v28)
+B22 = TargetBlock() idom:B9 dominates:(B24) in-loop:B9
+  Goto(B24)
+B24 = JoinBlock(B22) idom:B22 dominates:(B34, B33) in-loop:B9
+  v32 = Comparison int <(v12, v7)
+  Branch(v32, true: B33, false: B34)
+B33 = TargetBlock() idom:B24 in-loop:B9
+  Goto(B9)
+B34 = TargetBlock() idom:B24 dominates:(B43, B42) in-loop:B3
+  v39 = BinaryIntOp +(v7, v12)
+  v41 = Comparison int <(v39, v40)
+  Branch(v41, true: B42, false: B43)
+B42 = TargetBlock() idom:B34 in-loop:B3
+  Goto(B3)
+B43 = TargetBlock() idom:B34
+  Return(v28)
+
+--- example3
+B0 = EntryBlock() dominates:(B4, B3)
+  v1 = Constant(1)
+  v6 = Constant(2)
+  v12 = Constant(3)
+  v17 = Constant(4)
+  v32 = Constant(5)
+  v56 = Constant(6)
+  v58 = Constant(null)
+  DirectCall print(v1)
+  TryEntry(try-body: B3, catch-block: B4)
+B3 = TargetBlock() exception-handler:B4 idom:B0 dominates:(B8)
+  DirectCall print(v6)
+  Goto(B8)
+B8 = JoinBlock(B3) idom:B3 dominates:(B39, B42, B38)
+  DirectCall print(v12)
+  TryEntry(try-body: B38, catch-block: B39)
+B38 = TargetBlock() exception-handler:B39 idom:B8
+  DirectCall print(v17)
+  Goto(B42)
+B39 = CatchBlock() idom:B8
+  v44 = Parameter(#exception)
+  v45 = Parameter(#stackTrace)
+  DirectCall print(v44)
+  DirectCall print(v45)
+  Goto(B42)
+B42 = JoinBlock(B39, B38) idom:B8
+  DirectCall print(v32)
+  DirectCall print(v56)
+  Return(v58)
+B4 = CatchBlock() idom:B0 dominates:(B15, B19, B14)
+  v10 = Parameter(#exception)
+  v11 = Parameter(#stackTrace)
+  DirectCall print(v12)
+  TryEntry(try-body: B14, catch-block: B15)
+B14 = TargetBlock() exception-handler:B15 idom:B4
+  DirectCall print(v17)
+  Goto(B19)
+B15 = CatchBlock() idom:B4
+  v21 = Parameter(#exception)
+  v22 = Parameter(#stackTrace)
+  DirectCall print(v21)
+  DirectCall print(v22)
+  Goto(B19)
+B19 = JoinBlock(B15, B14) idom:B4
+  DirectCall print(v32)
+  Throw(v10, v11)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant(null)
+  Return(v1)
+
diff --git a/pkg/cfg/testcases/loops.dart b/pkg/cfg/testcases/loops.dart
new file mode 100644
index 0000000..2bcaf19
--- /dev/null
+++ b/pkg/cfg/testcases/loops.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 nested(int i) {
+  for (var i = 0; i < 10; ++i) {
+    while (i < 5) {
+      print(++i);
+    }
+  }
+  print(i);
+  while (i < 10) {
+    for (var j = 0; j < 3; ++j) {
+      i += j;
+    }
+  }
+  print(i);
+}
+
+void chainedHeaders(int i) {
+  do {
+    do {
+      i -= 17;
+    } while (i >= 0);
+  } while (i % 2 == 0);
+}
+
+void irreducible(int i) {
+  switch (i) {
+    L1:
+    case 1:
+      i += 1;
+      continue L2;
+    L2:
+    case 2:
+      i += 2;
+      if (i > 10) {
+        break;
+      }
+      continue L1;
+  }
+}
+
+void main() {}
diff --git a/pkg/cfg/testcases/loops.dart.expect b/pkg/cfg/testcases/loops.dart.expect
new file mode 100644
index 0000000..cec000c
--- /dev/null
+++ b/pkg/cfg/testcases/loops.dart.expect
@@ -0,0 +1,121 @@
+--- nested
+B0 = EntryBlock() dominates:(B4)
+  v2 = Constant(0)
+  v7 = Constant(10)
+  v15 = Constant(5)
+  v21 = Constant(1)
+  v43 = Constant(3)
+  v59 = Constant(null)
+  v1 = Parameter(i)
+  Goto(B4)
+B4 = JoinBlock(B0, B18) idom:B0 dominates:(B10, B9) loop-header (depth:1 body:(B4, B9, B12, B18, B17) back-edges:(B18))
+  v64 = Phi(v2, v27)
+  v8 = Comparison int <(v64, v7)
+  Branch(v8, true: B9, false: B10)
+B9 = TargetBlock() idom:B4 dominates:(B12) in-loop:B4
+  Goto(B12)
+B12 = JoinBlock(B9, B17) idom:B9 dominates:(B18, B17) loop-header (depth:2 body:(B12, B17) back-edges:(B17))
+  v63 = Phi(v64, v22)
+  v16 = Comparison int <(v63, v15)
+  Branch(v16, true: B17, false: B18)
+B17 = TargetBlock() idom:B12 in-loop:B12
+  v22 = BinaryIntOp +(v63, v21)
+  DirectCall print(v22)
+  Goto(B12)
+B18 = TargetBlock() idom:B12 in-loop:B4
+  v27 = BinaryIntOp +(v63, v21)
+  Goto(B4)
+B10 = TargetBlock() idom:B4 dominates:(B32)
+  DirectCall print(v1)
+  Goto(B32)
+B32 = JoinBlock(B10, B46) idom:B10 dominates:(B37, B36) loop-header (depth:1 body:(B32, B36, B40, B46, B45) back-edges:(B46))
+  v62 = Phi(v1, v61)
+  v35 = Comparison int <(v62, v7)
+  Branch(v35, true: B36, false: B37)
+B36 = TargetBlock() idom:B32 dominates:(B40) in-loop:B32
+  Goto(B40)
+B40 = JoinBlock(B36, B45) idom:B36 dominates:(B46, B45) loop-header (depth:2 body:(B40, B45) back-edges:(B45))
+  v65 = Phi(v2, v53)
+  v61 = Phi(v62, v50)
+  v44 = Comparison int <(v65, v43)
+  Branch(v44, true: B45, false: B46)
+B45 = TargetBlock() idom:B40 in-loop:B40
+  v50 = BinaryIntOp +(v61, v65)
+  v53 = BinaryIntOp +(v65, v21)
+  Goto(B40)
+B46 = TargetBlock() idom:B40 in-loop:B32
+  Goto(B32)
+B37 = TargetBlock() idom:B32
+  DirectCall print(v62)
+  Return(v59)
+
+--- chainedHeaders
+B0 = EntryBlock() dominates:(B2)
+  v7 = Constant(17)
+  v11 = Constant(0)
+  v18 = Constant(2)
+  v25 = Constant(null)
+  v1 = Parameter(i)
+  Goto(B2)
+B2 = JoinBlock(B0, B21) idom:B0 dominates:(B4) loop-header (depth:1 body:(B2, B4, B14, B21, B13) back-edges:(B21))
+  v27 = Phi(v1, v8)
+  Goto(B4)
+B4 = JoinBlock(B2, B13) idom:B2 dominates:(B14, B13) loop-header (depth:2 body:(B4, B13) back-edges:(B13))
+  v28 = Phi(v27, v8)
+  v8 = BinaryIntOp -(v28, v7)
+  v12 = Comparison int >=(v8, v11)
+  Branch(v12, true: B13, false: B14)
+B13 = TargetBlock() idom:B4 in-loop:B4
+  Goto(B4)
+B14 = TargetBlock() idom:B4 dominates:(B22, B21) in-loop:B2
+  v19 = BinaryIntOp %(v8, v18)
+  v20 = Comparison int ==(v19, v11)
+  Branch(v20, true: B21, false: B22)
+B21 = TargetBlock() idom:B14 in-loop:B2
+  Goto(B2)
+B22 = TargetBlock() idom:B14
+  Return(v25)
+
+--- irreducible
+B0 = EntryBlock() dominates:(B8, B34, B4, B3, B7)
+  v5 = Constant(1)
+  v11 = Constant(2)
+  v27 = Constant(10)
+  v38 = Constant(null)
+  v1 = Parameter(i)
+  v6 = InterfaceCall Object.==(v5, v1)
+  Branch(v6, true: B7, false: B8)
+B7 = TargetBlock() idom:B0
+  Goto(B3)
+B8 = TargetBlock() idom:B0 dominates:(B14, B13)
+  v12 = InterfaceCall Object.==(v11, v1)
+  Branch(v12, true: B13, false: B14)
+B13 = TargetBlock() idom:B8
+  Goto(B4)
+B4 = JoinBlock(B13, B3) idom:B0 dominates:(B30, B29)
+  v40 = Phi(v1, v20)
+  v24 = BinaryIntOp +(v40, v11)
+  v28 = Comparison int >(v24, v27)
+  Branch(v28, true: B29, false: B30)
+B29 = TargetBlock() idom:B4
+  Goto(B34)
+B30 = TargetBlock() idom:B4 dominates:(B32)
+  Goto(B32)
+B32 = JoinBlock(B30) idom:B30
+  Goto(B3)
+B3 = JoinBlock(B32, B7) idom:B0
+  v41 = Phi(v24, v1)
+  v20 = BinaryIntOp +(v41, v5)
+  Goto(B4)
+B14 = TargetBlock() idom:B8 dominates:(B17)
+  Goto(B17)
+B17 = JoinBlock(B14) idom:B14
+  Goto(B34)
+B34 = JoinBlock(B17, B29) idom:B0
+  Return(v38)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant(null)
+  Return(v1)
+
diff --git a/pkg/cfg/testcases/numbers.dart b/pkg/cfg/testcases/numbers.dart
new file mode 100644
index 0000000..fabba3e
--- /dev/null
+++ b/pkg/cfg/testcases/numbers.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+int add(int a, int b) => a + b;
+
+int intArithmetic(int a, int b, List<int> data) {
+  var sum = 0;
+  for (var i = 0; i < data.length; ++i) {
+    sum += (data[(i ~/ a * b >> 1) - 2] << a) % b;
+  }
+  return sum.remainder(3);
+}
+
+double doubleArithmetic(double a, int b, List<double> data) {
+  double sum = 0;
+  for (var i = 0; i < data.length; ++i) {
+    sum += b - ((data[i] + 3) * a / b).roundToDouble();
+  }
+  return sum.remainder(3);
+}
+
+void main() {}
diff --git a/pkg/cfg/testcases/numbers.dart.expect b/pkg/cfg/testcases/numbers.dart.expect
new file mode 100644
index 0000000..09015ac
--- /dev/null
+++ b/pkg/cfg/testcases/numbers.dart.expect
@@ -0,0 +1,77 @@
+--- add
+B0 = EntryBlock()
+  v1 = Parameter(a)
+  v2 = Parameter(b)
+  v5 = BinaryIntOp +(v1, v2)
+  Return(v5)
+
+--- intArithmetic
+B0 = EntryBlock() dominates:(B7)
+  v4 = Constant(0)
+  v23 = Constant(1)
+  v25 = Constant(2)
+  v39 = Constant(3)
+  v1 = Parameter(a)
+  v2 = Parameter(b)
+  v3 = Parameter(data)
+  Goto(B7)
+B7 = JoinBlock(B0, B13) idom:B0 dominates:(B14, B13) loop-header (depth:1 body:(B7, B13) back-edges:(B13))
+  v43 = Phi(v4, v35)
+  v42 = Phi(v4, v32)
+  v11 = InterfaceCall getter List.length(v3)
+  v12 = Comparison int <(v43, v11)
+  Branch(v12, true: B13, false: B14)
+B13 = TargetBlock() idom:B7 in-loop:B7
+  v20 = BinaryIntOp ~/(v43, v1)
+  v22 = BinaryIntOp *(v20, v2)
+  v24 = BinaryIntOp >>(v22, v23)
+  v26 = BinaryIntOp -(v24, v25)
+  v27 = InterfaceCall List.[](v3, v26)
+  v29 = BinaryIntOp <<(v27, v1)
+  v31 = BinaryIntOp %(v29, v2)
+  v32 = BinaryIntOp +(v42, v31)
+  v35 = BinaryIntOp +(v43, v23)
+  Goto(B7)
+B14 = TargetBlock() idom:B7
+  v40 = BinaryIntOp remainder(v42, v39)
+  Return(v40)
+
+--- doubleArithmetic
+B0 = EntryBlock() dominates:(B8)
+  v4 = Constant(0.0)
+  v6 = Constant(0)
+  v22 = Constant(3)
+  v36 = Constant(1)
+  v1 = Parameter(a)
+  v2 = Parameter(b)
+  v3 = Parameter(data)
+  Goto(B8)
+B8 = JoinBlock(B0, B14) idom:B0 dominates:(B15, B14) loop-header (depth:1 body:(B8, B14) back-edges:(B14))
+  v45 = Phi(v6, v37)
+  v44 = Phi(v4, v33)
+  v12 = InterfaceCall getter List.length(v3)
+  v13 = Comparison int <(v45, v12)
+  Branch(v13, true: B14, false: B15)
+B14 = TargetBlock() idom:B8 in-loop:B8
+  v21 = InterfaceCall List.[](v3, v45)
+  v23 = UnaryIntOp toDouble(v22)
+  v24 = BinaryDoubleOp +(v21, v23)
+  v26 = BinaryDoubleOp *(v24, v1)
+  v28 = UnaryIntOp toDouble(v2)
+  v29 = BinaryDoubleOp /(v26, v28)
+  v30 = UnaryDoubleOp roundToDouble(v29)
+  v31 = UnaryIntOp toDouble(v2)
+  v32 = BinaryDoubleOp -(v31, v30)
+  v33 = BinaryDoubleOp +(v44, v32)
+  v37 = BinaryIntOp +(v45, v36)
+  Goto(B8)
+B15 = TargetBlock() idom:B8
+  v41 = UnaryIntOp toDouble(v22)
+  v42 = BinaryDoubleOp remainder(v44, v41)
+  Return(v42)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant(null)
+  Return(v1)
+
diff --git a/pkg/cfg/testcases/statements.dart b/pkg/cfg/testcases/statements.dart
new file mode 100644
index 0000000..ddf85a9
--- /dev/null
+++ b/pkg/cfg/testcases/statements.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 if1(bool c1, bool c2, bool c3) {
+  if (c1 && (c2 || !c3)) {
+    print('oops');
+  }
+}
+
+bool condition(int i) => i % 3 == 0;
+
+void if2() {
+  if (condition(1)) {
+    if (condition(2) && condition(3)) {
+      print(1);
+    } else if (condition(4) || condition(5)) {
+      print(2);
+    }
+  } else {
+    print(3);
+  }
+}
+
+int forLoop(int n) {
+  var sum = 0;
+  for (var i = 0; i < n; ++i) {
+    sum += i;
+  }
+  return sum;
+}
+
+int whileLoop(int n) {
+  var sum = 0;
+  var i = 0;
+  while (i < n) {
+    sum += i;
+    if (sum > 10) break;
+    ++i;
+  }
+  return sum;
+}
+
+int doWhileLoop(int n) {
+  var sum = 0;
+  var i = n;
+  do {
+    sum += i;
+    --i;
+  } while (i >= 0);
+  return sum;
+}
+
+int forInLoop(List<int> list) {
+  var sum = 0;
+  for (var elem in list) {
+    sum += elem;
+  }
+  return sum;
+}
+
+void breakAndContinue(int n, int m) {
+  for (var i = 0; i < n; i++) {
+    for (var j = 0; j < m; j++) {
+      if (j < 3) {
+        continue;
+      }
+      if ((i + j) % 5 == 0) {
+        break;
+      }
+    }
+  }
+}
+
+void switchStatement(int x) {
+  switch (x) {
+    case 1:
+    case 2:
+      print('1-2');
+      break;
+    case 3:
+      print('3');
+      continue L4;
+    L4:
+    case 4:
+      print('3-4');
+  }
+}
+
+void tryBlocks() {
+  var x = 1;
+  try {
+    x = 2;
+    try {
+      x = 3;
+    } finally {
+      print(x);
+    }
+  } catch (e) {
+    print(e);
+    print(x);
+  }
+}
+
+int tryFinallyWithBreaks() {
+  try {
+    print(10);
+    for (var i = 0; i < 5; ++i) {
+      try {
+        print(i);
+        if (i % 3 == 0) {
+          break;
+        }
+        if (i % 3 == 1) {
+          continue;
+        }
+        if (i % 3 == 2) {
+          return i;
+        }
+      } finally {
+        print(20);
+      }
+    }
+  } finally {
+    return 42;
+  }
+}
+
+void tryWithThrowRethrow(bool c1, bool c2) {
+  try {
+    print(1);
+    if (c1) {
+      throw 'Boom!';
+    }
+  } on Error {
+    print(2);
+    if (c2) {
+      rethrow;
+    }
+  }
+}
+
+void main() {
+  print('hey');
+}
diff --git a/pkg/cfg/testcases/statements.dart.expect b/pkg/cfg/testcases/statements.dart.expect
new file mode 100644
index 0000000..5854972
--- /dev/null
+++ b/pkg/cfg/testcases/statements.dart.expect
@@ -0,0 +1,414 @@
+--- if1
+B0 = EntryBlock() dominates:(B6, B16, B5)
+  v22 = Constant("oops")
+  v25 = Constant(null)
+  v1 = Parameter(c1)
+  v2 = Parameter(c2)
+  v3 = Parameter(c3)
+  Branch(v1, true: B5, false: B6)
+B5 = TargetBlock() idom:B0 dominates:(B10, B19, B9)
+  Branch(v2, true: B9, false: B10)
+B9 = TargetBlock() idom:B5
+  Goto(B19)
+B10 = TargetBlock() idom:B5 dominates:(B14, B13)
+  Branch(v3, true: B13, false: B14)
+B13 = TargetBlock() idom:B10
+  Goto(B16)
+B14 = TargetBlock() idom:B10
+  Goto(B19)
+B19 = JoinBlock(B14, B9) idom:B5
+  DirectCall print(v22)
+  Goto(B16)
+B6 = TargetBlock() idom:B0
+  Goto(B16)
+B16 = JoinBlock(B6, B19, B13) idom:B0
+  Return(v25)
+
+--- condition
+B0 = EntryBlock()
+  v3 = Constant(3)
+  v5 = Constant(0)
+  v1 = Parameter(i)
+  v4 = BinaryIntOp %(v1, v3)
+  v6 = Comparison int ==(v4, v5)
+  Return(v6)
+
+--- if2
+B0 = EntryBlock() dominates:(B4, B40, B3)
+  v1 = Constant(1)
+  v6 = Constant(2)
+  v11 = Constant(3)
+  v22 = Constant(4)
+  v27 = Constant(5)
+  v44 = Constant(null)
+  v2 = DirectCall condition(v1)
+  Branch(v2, true: B3, false: B4)
+B3 = TargetBlock() idom:B0 dominates:(B9, B19, B17, B8)
+  v7 = DirectCall condition(v6)
+  Branch(v7, true: B8, false: B9)
+B8 = TargetBlock() idom:B3 dominates:(B14, B13)
+  v12 = DirectCall condition(v11)
+  Branch(v12, true: B13, false: B14)
+B13 = TargetBlock() idom:B8
+  DirectCall print(v1)
+  Goto(B17)
+B14 = TargetBlock() idom:B8
+  Goto(B19)
+B9 = TargetBlock() idom:B3
+  Goto(B19)
+B19 = JoinBlock(B9, B14) idom:B3 dominates:(B25, B32, B34, B24)
+  v23 = DirectCall condition(v22)
+  Branch(v23, true: B24, false: B25)
+B24 = TargetBlock() idom:B19
+  Goto(B34)
+B25 = TargetBlock() idom:B19 dominates:(B30, B29)
+  v28 = DirectCall condition(v27)
+  Branch(v28, true: B29, false: B30)
+B29 = TargetBlock() idom:B25
+  Goto(B34)
+B34 = JoinBlock(B29, B24) idom:B19
+  DirectCall print(v6)
+  Goto(B32)
+B30 = TargetBlock() idom:B25
+  Goto(B32)
+B32 = JoinBlock(B30, B34) idom:B19
+  Goto(B17)
+B17 = JoinBlock(B32, B13) idom:B3
+  Goto(B40)
+B4 = TargetBlock() idom:B0
+  DirectCall print(v11)
+  Goto(B40)
+B40 = JoinBlock(B4, B17) idom:B0
+  Return(v44)
+
+--- forLoop
+B0 = EntryBlock() dominates:(B5)
+  v2 = Constant(0)
+  v18 = Constant(1)
+  v1 = Parameter(n)
+  Goto(B5)
+B5 = JoinBlock(B0, B10) idom:B0 dominates:(B11, B10) loop-header (depth:1 body:(B5, B10) back-edges:(B10))
+  v25 = Phi(v2, v19)
+  v24 = Phi(v2, v15)
+  v9 = Comparison int <(v25, v1)
+  Branch(v9, true: B10, false: B11)
+B10 = TargetBlock() idom:B5 in-loop:B5
+  v15 = BinaryIntOp +(v24, v25)
+  v19 = BinaryIntOp +(v25, v18)
+  Goto(B5)
+B11 = TargetBlock() idom:B5
+  Return(v24)
+
+--- whileLoop
+B0 = EntryBlock() dominates:(B5)
+  v2 = Constant(0)
+  v18 = Constant(10)
+  v28 = Constant(1)
+  v1 = Parameter(n)
+  Goto(B5)
+B5 = JoinBlock(B0, B23) idom:B0 dominates:(B11, B25, B10) loop-header (depth:1 body:(B5, B10, B21, B23) back-edges:(B23))
+  v37 = Phi(v2, v29)
+  v35 = Phi(v2, v15)
+  v9 = Comparison int <(v37, v1)
+  Branch(v9, true: B10, false: B11)
+B10 = TargetBlock() idom:B5 dominates:(B21, B20) in-loop:B5
+  v15 = BinaryIntOp +(v35, v37)
+  v19 = Comparison int >(v15, v18)
+  Branch(v19, true: B20, false: B21)
+B20 = TargetBlock() idom:B10
+  Goto(B25)
+B21 = TargetBlock() idom:B10 dominates:(B23) in-loop:B5
+  Goto(B23)
+B23 = JoinBlock(B21) idom:B21 in-loop:B5
+  v29 = BinaryIntOp +(v37, v28)
+  Goto(B5)
+B11 = TargetBlock() idom:B5
+  Goto(B25)
+B25 = JoinBlock(B11, B20) idom:B5
+  v36 = Phi(v35, v15)
+  Return(v36)
+
+--- doWhileLoop
+B0 = EntryBlock() dominates:(B6)
+  v2 = Constant(0)
+  v13 = Constant(1)
+  v1 = Parameter(n)
+  Goto(B6)
+B6 = JoinBlock(B0, B18) idom:B0 dominates:(B19, B18) loop-header (depth:1 body:(B6, B18) back-edges:(B18))
+  v25 = Phi(v1, v14)
+  v24 = Phi(v2, v10)
+  v10 = BinaryIntOp +(v24, v25)
+  v14 = BinaryIntOp -(v25, v13)
+  v17 = Comparison int >=(v14, v2)
+  Branch(v17, true: B18, false: B19)
+B18 = TargetBlock() idom:B6 in-loop:B6
+  Goto(B6)
+B19 = TargetBlock() idom:B6
+  Return(v10)
+
+--- forInLoop
+B0 = EntryBlock() dominates:(B7)
+  v2 = Constant(0)
+  v1 = Parameter(list)
+  v5 = InterfaceCall getter Iterable.iterator(v1)
+  Goto(B7)
+B7 = JoinBlock(B0, B11) idom:B0 dominates:(B12, B11) loop-header (depth:1 body:(B7, B11) back-edges:(B11))
+  v24 = Phi(v2, v19)
+  v10 = InterfaceCall Iterator.moveNext(v5)
+  Branch(v10, true: B11, false: B12)
+B11 = TargetBlock() idom:B7 in-loop:B7
+  v15 = InterfaceCall getter Iterator.current(v5)
+  v19 = BinaryIntOp +(v24, v15)
+  Goto(B7)
+B12 = TargetBlock() idom:B7
+  Return(v24)
+
+--- breakAndContinue
+B0 = EntryBlock() dominates:(B5)
+  v3 = Constant(0)
+  v23 = Constant(3)
+  v35 = Constant(5)
+  v47 = Constant(1)
+  v56 = Constant(null)
+  v1 = Parameter(n)
+  v2 = Parameter(m)
+  Goto(B5)
+B5 = JoinBlock(B0, B43) idom:B0 dominates:(B11, B10) loop-header (depth:1 body:(B5, B10, B14, B20, B43, B19, B26, B28, B39, B41, B30, B38, B25) back-edges:(B43))
+  v58 = Phi(v3, v53)
+  v9 = Comparison int <(v58, v1)
+  Branch(v9, true: B10, false: B11)
+B10 = TargetBlock() idom:B5 dominates:(B14) in-loop:B5
+  Goto(B14)
+B14 = JoinBlock(B10, B30) idom:B10 dominates:(B20, B43, B19) loop-header (depth:2 body:(B14, B19, B26, B28, B39, B41, B30, B25) back-edges:(B30))
+  v59 = Phi(v3, v48)
+  v18 = Comparison int <(v59, v2)
+  Branch(v18, true: B19, false: B20)
+B19 = TargetBlock() idom:B14 dominates:(B26, B30, B25) in-loop:B14
+  v24 = Comparison int <(v59, v23)
+  Branch(v24, true: B25, false: B26)
+B25 = TargetBlock() idom:B19 in-loop:B14
+  Goto(B30)
+B26 = TargetBlock() idom:B19 dominates:(B28) in-loop:B14
+  Goto(B28)
+B28 = JoinBlock(B26) idom:B26 dominates:(B39, B38) in-loop:B14
+  v34 = BinaryIntOp +(v58, v59)
+  v36 = BinaryIntOp %(v34, v35)
+  v37 = Comparison int ==(v36, v3)
+  Branch(v37, true: B38, false: B39)
+B38 = TargetBlock() idom:B28 in-loop:B5
+  Goto(B43)
+B39 = TargetBlock() idom:B28 dominates:(B41) in-loop:B14
+  Goto(B41)
+B41 = JoinBlock(B39) idom:B39 in-loop:B14
+  Goto(B30)
+B30 = JoinBlock(B41, B25) idom:B19 in-loop:B14
+  v48 = BinaryIntOp +(v59, v47)
+  Goto(B14)
+B20 = TargetBlock() idom:B14 in-loop:B5
+  Goto(B43)
+B43 = JoinBlock(B20, B38) idom:B14 in-loop:B5
+  v53 = BinaryIntOp +(v58, v47)
+  Goto(B5)
+B11 = TargetBlock() idom:B5
+  Return(v56)
+
+--- switchStatement
+B0 = EntryBlock() dominates:(B9, B34, B3, B8)
+  v6 = Constant(1)
+  v12 = Constant(2)
+  v18 = Constant(3)
+  v24 = Constant(4)
+  v32 = Constant("1-2")
+  v36 = Constant("3")
+  v39 = Constant("3-4")
+  v43 = Constant(null)
+  v1 = Parameter(x)
+  v7 = InterfaceCall Object.==(v6, v1)
+  Branch(v7, true: B8, false: B9)
+B8 = TargetBlock() idom:B0
+  Goto(B3)
+B9 = TargetBlock() idom:B0 dominates:(B15, B14)
+  v13 = InterfaceCall Object.==(v12, v1)
+  Branch(v13, true: B14, false: B15)
+B14 = TargetBlock() idom:B9
+  Goto(B3)
+B3 = JoinBlock(B14, B8) idom:B0
+  DirectCall print(v32)
+  Goto(B34)
+B15 = TargetBlock() idom:B9 dominates:(B21, B30, B5, B20)
+  v19 = InterfaceCall Object.==(v18, v1)
+  Branch(v19, true: B20, false: B21)
+B20 = TargetBlock() idom:B15 dominates:(B4)
+  Goto(B4)
+B4 = JoinBlock(B20) idom:B20
+  DirectCall print(v36)
+  Goto(B5)
+B21 = TargetBlock() idom:B15 dominates:(B27, B26)
+  v25 = InterfaceCall Object.==(v24, v1)
+  Branch(v25, true: B26, false: B27)
+B26 = TargetBlock() idom:B21
+  Goto(B5)
+B5 = JoinBlock(B26, B4) idom:B15
+  DirectCall print(v39)
+  Goto(B30)
+B27 = TargetBlock() idom:B21
+  Goto(B30)
+B30 = JoinBlock(B27, B5) idom:B15
+  Goto(B34)
+B34 = JoinBlock(B30, B3) idom:B0
+  Return(v43)
+
+--- tryBlocks
+B0 = EntryBlock() dominates:(B4, B24, B3)
+  Constant(1)
+  Constant(2)
+  v11 = Constant(3)
+  v35 = Constant(null)
+  TryEntry(try-body: B3, catch-block: B4)
+B3 = TargetBlock() exception-handler:B4 idom:B0 dominates:(B9, B8)
+  TryEntry(try-body: B8, catch-block: B9)
+B8 = TargetBlock() exception-handler:B9 idom:B3 dominates:(B13)
+  Goto(B13)
+B13 = JoinBlock(B8) exception-handler:B4 idom:B8
+  DirectCall print(v11)
+  Goto(B24)
+B9 = CatchBlock() exception-handler:B4 idom:B3
+  v37 = Parameter(x)
+  v15 = Parameter(#exception)
+  v16 = Parameter(#stackTrace)
+  DirectCall print(v37)
+  Throw(v15, v16)
+B4 = CatchBlock() idom:B0
+  v38 = Parameter(x)
+  v26 = Parameter(#exception)
+  Parameter(#stackTrace)
+  DirectCall print(v26)
+  DirectCall print(v38)
+  Goto(B24)
+B24 = JoinBlock(B4, B13) idom:B0
+  Return(v35)
+
+--- tryFinallyWithBreaks
+B0 = EntryBlock() dominates:(B2, B1)
+  v4 = Constant(10)
+  v6 = Constant(0)
+  v11 = Constant(5)
+  v22 = Constant(3)
+  v34 = Constant(1)
+  v45 = Constant(2)
+  v59 = Constant(20)
+  v84 = Constant(42)
+  TryEntry(try-body: B1, catch-block: B2)
+B1 = TargetBlock() exception-handler:B2 idom:B0 dominates:(B8)
+  DirectCall print(v4)
+  Goto(B8)
+B8 = JoinBlock(B1, B68) exception-handler:B2 idom:B1 dominates:(B14, B65, B13) loop-header (depth:1 body:(B8, B13, B16, B26, B28, B37, B39, B48, B50, B55, B68, B36, B41) back-edges:(B68))
+  v88 = Phi(v6, v76)
+  v12 = Comparison int <(v88, v11)
+  Branch(v12, true: B13, false: B14)
+B13 = TargetBlock() exception-handler:B2 idom:B8 dominates:(B17, B16) in-loop:B8
+  TryEntry(try-body: B16, catch-block: B17)
+B16 = TargetBlock() exception-handler:B17 idom:B13 dominates:(B26, B25) in-loop:B8
+  DirectCall print(v88)
+  v23 = BinaryIntOp %(v88, v22)
+  v24 = Comparison int ==(v23, v6)
+  Branch(v24, true: B25, false: B26)
+B25 = TargetBlock() exception-handler:B17 idom:B16 dominates:(B30)
+  Goto(B30)
+B30 = JoinBlock(B25) exception-handler:B2 idom:B25
+  DirectCall print(v59)
+  Goto(B65)
+B26 = TargetBlock() exception-handler:B17 idom:B16 dominates:(B28) in-loop:B8
+  Goto(B28)
+B28 = JoinBlock(B26) exception-handler:B17 idom:B26 dominates:(B37, B68, B36) in-loop:B8
+  v33 = BinaryIntOp %(v88, v22)
+  v35 = Comparison int ==(v33, v34)
+  Branch(v35, true: B36, false: B37)
+B36 = TargetBlock() exception-handler:B17 idom:B28 dominates:(B41) in-loop:B8
+  Goto(B41)
+B41 = JoinBlock(B36) exception-handler:B2 idom:B36 in-loop:B8
+  DirectCall print(v59)
+  Goto(B68)
+B37 = TargetBlock() exception-handler:B17 idom:B28 dominates:(B39) in-loop:B8
+  Goto(B39)
+B39 = JoinBlock(B37) exception-handler:B17 idom:B37 dominates:(B48, B47) in-loop:B8
+  v44 = BinaryIntOp %(v88, v22)
+  v46 = Comparison int ==(v44, v45)
+  Branch(v46, true: B47, false: B48)
+B47 = TargetBlock() exception-handler:B17 idom:B39 dominates:(B53)
+  Goto(B53)
+B53 = JoinBlock(B47) exception-handler:B2 idom:B47 dominates:(B71)
+  DirectCall print(v59)
+  Goto(B71)
+B71 = JoinBlock(B53) idom:B53
+  Return(v84)
+B48 = TargetBlock() exception-handler:B17 idom:B39 dominates:(B50) in-loop:B8
+  Goto(B50)
+B50 = JoinBlock(B48) exception-handler:B17 idom:B48 dominates:(B55) in-loop:B8
+  Goto(B55)
+B55 = JoinBlock(B50) exception-handler:B2 idom:B50 in-loop:B8
+  DirectCall print(v59)
+  Goto(B68)
+B68 = JoinBlock(B55, B41) exception-handler:B2 idom:B28 in-loop:B8
+  v76 = BinaryIntOp +(v88, v34)
+  Goto(B8)
+B17 = CatchBlock() exception-handler:B2 idom:B13
+  v57 = Parameter(#exception)
+  v58 = Parameter(#stackTrace)
+  DirectCall print(v59)
+  Throw(v57, v58)
+B14 = TargetBlock() exception-handler:B2 idom:B8
+  Goto(B65)
+B65 = JoinBlock(B14, B30) exception-handler:B2 idom:B8 dominates:(B80)
+  Goto(B80)
+B80 = JoinBlock(B65) idom:B65
+  Return(v84)
+B2 = CatchBlock() idom:B0
+  Parameter(#exception)
+  Parameter(#stackTrace)
+  Return(v84)
+
+--- tryWithThrowRethrow
+B0 = EntryBlock() dominates:(B4, B17, B3)
+  v6 = Constant(1)
+  v14 = Constant("Boom!")
+  v16 = Constant(null)
+  v26 = Constant(2)
+  v1 = Parameter(c1)
+  v2 = Parameter(c2)
+  TryEntry(try-body: B3, catch-block: B4)
+B3 = TargetBlock() exception-handler:B4 idom:B0 dominates:(B10, B9)
+  DirectCall print(v6)
+  Branch(v1, true: B9, false: B10)
+B9 = TargetBlock() exception-handler:B4 idom:B3
+  Throw(v14)
+B10 = TargetBlock() exception-handler:B4 idom:B3 dominates:(B12)
+  Goto(B12)
+B12 = JoinBlock(B10) exception-handler:B4 idom:B10
+  Goto(B17)
+B4 = CatchBlock() idom:B0 dominates:(B24, B23)
+  v19 = Parameter(#exception)
+  v20 = Parameter(#stackTrace)
+  v22 = TypeTest(v19, Error)
+  Branch(v22, true: B23, false: B24)
+B23 = TargetBlock() idom:B4 dominates:(B30, B29)
+  DirectCall print(v26)
+  Branch(v2, true: B29, false: B30)
+B29 = TargetBlock() idom:B23
+  Throw(v19, v20)
+B30 = TargetBlock() idom:B23 dominates:(B32)
+  Goto(B32)
+B32 = JoinBlock(B30) idom:B30
+  Goto(B17)
+B17 = JoinBlock(B32, B12) idom:B0
+  Return(v16)
+B24 = TargetBlock() idom:B4
+  Throw(v19, v20)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant("hey")
+  v3 = Constant(null)
+  DirectCall print(v1)
+  Return(v3)
+
diff --git a/pkg/cfg/testcases/types.dart b/pkg/cfg/testcases/types.dart
new file mode 100644
index 0000000..4a355b6
--- /dev/null
+++ b/pkg/cfg/testcases/types.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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> {
+  void bar() {
+    foo<int>(1);
+    foo<Map<String, T>>(2);
+  }
+
+  void foo<U>(Object o) {
+    if (o is List<T>) {
+      o as Map;
+    }
+  }
+}
+
+void main() {}
diff --git a/pkg/cfg/testcases/types.dart.expect b/pkg/cfg/testcases/types.dart.expect
new file mode 100644
index 0000000..3b491a4
--- /dev/null
+++ b/pkg/cfg/testcases/types.dart.expect
@@ -0,0 +1,35 @@
+--- bar
+B0 = EntryBlock()
+  v6 = Constant(1)
+  v10 = Constant(2)
+  v12 = Constant(null)
+  v1 = Parameter(this)
+  v3 = TypeParameters(v1)
+  v4 = TypeArguments(<int>)
+  InterfaceCall A.foo(v4, v1, v6)
+  v8 = TypeArguments(v3, <Map<String, A.T%>>)
+  InterfaceCall A.foo(v8, v1, v10)
+  Return(v12)
+
+--- foo
+B0 = EntryBlock() dominates:(B8, B10, B7)
+  v16 = Constant(null)
+  v1 = Parameter(this)
+  v2 = Parameter(o)
+  v4 = TypeParameters(v1)
+  v6 = TypeTest(v2, v4, List<A.T%>)
+  Branch(v6, true: B7, false: B8)
+B7 = TargetBlock() idom:B0
+  v13 = TypeCast(v2, v4, List<A.T%>, unchecked)
+  TypeCast(v13, Map<dynamic, dynamic>)
+  Goto(B10)
+B8 = TargetBlock() idom:B0
+  Goto(B10)
+B10 = JoinBlock(B8, B7) idom:B0
+  Return(v16)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant(null)
+  Return(v1)
+
diff --git a/pkg/cfg/testcases/unreachable_ast.dart b/pkg/cfg/testcases/unreachable_ast.dart
new file mode 100644
index 0000000..e9be094
--- /dev/null
+++ b/pkg/cfg/testcases/unreachable_ast.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// ignore_for_file: dead_code
+
+class A {
+  int foo(int a, int b, int c) => a + b + c;
+}
+
+void bar(int a, int b, int c) {}
+
+void unreachable1(A obj) {
+  obj.foo(10, (throw 'Bye'), int.parse('11'));
+  print(1);
+}
+
+void unreachable2(A obj) {
+  bar(
+    int.parse('12'),
+    obj.foo(10, (throw 'Bye'), int.parse('13')),
+    int.parse('14'),
+  );
+  print(2);
+}
+
+void unreachableBreak1(int n) {
+  for (var i = 0; i < n; ++i) {
+    if (i > 2) {
+      throw 'Bye';
+      break;
+    }
+  }
+}
+
+void unreachableBreak2(int n) {
+  for (var i = 0; i < n; ++i) {
+    if (i > 2) {
+      throw 'Bye';
+      break;
+    }
+    return;
+  }
+}
+
+void unreachableFinally() {
+  try {
+    try {} finally {
+      print(1);
+      throw 'Bye';
+      print(2);
+    }
+  } finally {
+    print(3);
+    throw 'Bye-bye';
+    print(4);
+  }
+}
+
+void main() {}
diff --git a/pkg/cfg/testcases/unreachable_ast.dart.expect b/pkg/cfg/testcases/unreachable_ast.dart.expect
new file mode 100644
index 0000000..70851d9
--- /dev/null
+++ b/pkg/cfg/testcases/unreachable_ast.dart.expect
@@ -0,0 +1,116 @@
+--- foo
+B0 = EntryBlock()
+  Parameter(this)
+  v2 = Parameter(a)
+  v3 = Parameter(b)
+  v4 = Parameter(c)
+  v7 = BinaryIntOp +(v2, v3)
+  v9 = BinaryIntOp +(v7, v4)
+  Return(v9)
+
+--- bar
+B0 = EntryBlock()
+  v4 = Constant(null)
+  Parameter(a)
+  Parameter(b)
+  Parameter(c)
+  Return(v4)
+
+--- unreachable1
+B0 = EntryBlock()
+  Constant(10)
+  v4 = Constant("Bye")
+  Constant(null)
+  Parameter(obj)
+  Throw(v4)
+
+--- unreachable2
+B0 = EntryBlock()
+  v2 = Constant("12")
+  Constant(10)
+  v6 = Constant("Bye")
+  Constant(null)
+  Parameter(obj)
+  DirectCall int.parse(v2)
+  Throw(v6)
+
+--- unreachableBreak1
+B0 = EntryBlock() dominates:(B4)
+  v2 = Constant(0)
+  v13 = Constant(2)
+  v20 = Constant("Bye")
+  v22 = Constant(null)
+  v24 = Constant(1)
+  v1 = Parameter(n)
+  Goto(B4)
+B4 = JoinBlock(B0, B18) idom:B0 dominates:(B10, B9) loop-header (depth:1 body:(B4, B9, B16, B18) back-edges:(B18))
+  v29 = Phi(v2, v25)
+  v8 = Comparison int <(v29, v1)
+  Branch(v8, true: B9, false: B10)
+B9 = TargetBlock() idom:B4 dominates:(B16, B15) in-loop:B4
+  v14 = Comparison int >(v29, v13)
+  Branch(v14, true: B15, false: B16)
+B15 = TargetBlock() idom:B9
+  Throw(v20)
+B16 = TargetBlock() idom:B9 dominates:(B18) in-loop:B4
+  Goto(B18)
+B18 = JoinBlock(B16) idom:B16 in-loop:B4
+  v25 = BinaryIntOp +(v29, v24)
+  Goto(B4)
+B10 = TargetBlock() idom:B4
+  Return(v22)
+
+--- unreachableBreak2
+B0 = EntryBlock() dominates:(B4)
+  v2 = Constant(0)
+  v13 = Constant(2)
+  v20 = Constant("Bye")
+  v22 = Constant(null)
+  v1 = Parameter(n)
+  Goto(B4)
+B4 = JoinBlock(B0) idom:B0 dominates:(B10, B9)
+  v8 = Comparison int <(v2, v1)
+  Branch(v8, true: B9, false: B10)
+B9 = TargetBlock() idom:B4 dominates:(B16, B15)
+  v14 = Comparison int >(v2, v13)
+  Branch(v14, true: B15, false: B16)
+B15 = TargetBlock() idom:B9
+  Throw(v20)
+B16 = TargetBlock() idom:B9 dominates:(B18)
+  Goto(B18)
+B18 = JoinBlock(B16) idom:B16
+  Return(v22)
+B10 = TargetBlock() idom:B4
+  Return(v22)
+
+--- unreachableFinally
+B0 = EntryBlock() dominates:(B2, B1)
+  v11 = Constant(1)
+  v13 = Constant("Bye")
+  Constant(null)
+  v20 = Constant(3)
+  v22 = Constant("Bye-bye")
+  TryEntry(try-body: B1, catch-block: B2)
+B1 = TargetBlock() exception-handler:B2 idom:B0 dominates:(B5, B4)
+  TryEntry(try-body: B4, catch-block: B5)
+B4 = TargetBlock() exception-handler:B5 idom:B1 dominates:(B7)
+  Goto(B7)
+B7 = JoinBlock(B4) exception-handler:B2 idom:B4
+  DirectCall print(v11)
+  Throw(v13)
+B5 = CatchBlock() exception-handler:B2 idom:B1
+  Parameter(#exception)
+  Parameter(#stackTrace)
+  DirectCall print(v11)
+  Throw(v13)
+B2 = CatchBlock() idom:B0
+  Parameter(#exception)
+  Parameter(#stackTrace)
+  DirectCall print(v20)
+  Throw(v22)
+
+--- main
+B0 = EntryBlock()
+  v1 = Constant(null)
+  Return(v1)
+
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index 7c17659..be35779 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -15,10 +15,10 @@
 import '../js/js.dart' as js;
 import '../js_backend/backend.dart';
 import '../js_backend/codegen_inputs.dart';
-import '../js_backend/namer.dart'
-    show AsyncName, Namer, operatorNameToIdentifier, StringBackedName;
 import '../js_backend/deferred_holder_expression.dart'
     show DeferredHolderExpression;
+import '../js_backend/namer.dart'
+    show AsyncName, Namer, operatorNameToIdentifier, StringBackedName;
 import '../js_backend/string_reference.dart' show StringReference;
 import '../js_backend/type_reference.dart' show TypeReference;
 import '../js_emitter/js_emitter.dart' show Emitter;
@@ -1996,13 +1996,11 @@
   }
 
   Object _readAnnotation() {
-    final kind = source.readEnum(JsAnnotationKind.values);
-    switch (kind) {
-      case JsAnnotationKind.string:
-        return source.readString();
-      case JsAnnotationKind.resourceIdentifier:
-        return ResourceIdentifier.readFromDataSource(source);
-    }
+    return switch (source.readEnum(JsAnnotationKind.values)) {
+      JsAnnotationKind.string => source.readString(),
+      JsAnnotationKind.resourceIdentifier =>
+        ResourceIdentifier.readFromDataSource(source),
+    };
   }
 }
 
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index cdff18f..ef32957 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -306,4 +306,7 @@
     scheme: 'package',
     path: 'meta/dart2js.dart',
   );
+
+  /// The URI for 'package:meta/meta.dart'.
+  static final Uri packageMeta = Uri(scheme: 'package', path: 'meta/meta.dart');
 }
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index a11747f..d3a17f7 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -113,24 +113,30 @@
 /// typeof(X) === "number" && Math.floor(X) === X
 ///
 /// We consistently match that runtime semantics at compile time as well.
-bool isInt(ConstantValue constant) =>
-    constant is IntConstantValue ||
-    constant.isMinusZero ||
-    constant.isPositiveInfinity ||
-    constant.isNegativeInfinity;
+bool isInt(ConstantValue constant) {
+  constant = _unwrap(constant);
+
+  return constant is IntConstantValue ||
+      constant.isMinusZero ||
+      constant.isPositiveInfinity ||
+      constant.isNegativeInfinity;
+}
 
 /// Returns true if the [constant] is a double at runtime.
-bool isDouble(ConstantValue constant) =>
-    constant is DoubleConstantValue && !constant.isMinusZero;
+bool isDouble(ConstantValue constant) {
+  constant = _unwrap(constant);
+  return constant is DoubleConstantValue && !constant.isMinusZero;
+}
 
 /// Returns true if the [constant] is a string at runtime.
-bool isString(ConstantValue constant) => constant is StringConstantValue;
+bool isString(ConstantValue constant) =>
+    _unwrap(constant) is StringConstantValue;
 
 /// Returns true if the [constant] is a boolean at runtime.
-bool isBool(ConstantValue constant) => constant is BoolConstantValue;
+bool isBool(ConstantValue constant) => _unwrap(constant) is BoolConstantValue;
 
 /// Returns true if the [constant] is null at runtime.
-bool isNull(ConstantValue constant) => constant is NullConstantValue;
+bool isNull(ConstantValue constant) => _unwrap(constant) is NullConstantValue;
 
 bool isSubtype(DartTypes types, DartType s, DartType t) {
   // At runtime, an integer is both an integer and a double: the
@@ -277,6 +283,8 @@
 
   @override
   IntConstantValue? fold(ConstantValue constant) {
+    constant = _unwrap(constant);
+
     if (isInt(constant)) {
       // In JavaScript we don't check for -0 and treat it as if it was zero.
       if (constant.isMinusZero) {
@@ -299,6 +307,8 @@
 
   @override
   NumConstantValue? fold(ConstantValue constant) {
+    constant = _unwrap(constant);
+
     NumConstantValue? fold(ConstantValue constant) {
       if (constant is IntConstantValue) {
         return createInt(-constant.intValue);
@@ -326,6 +336,8 @@
 
   @override
   BoolConstantValue? fold(ConstantValue constant) {
+    constant = _unwrap(constant);
+
     if (constant is BoolConstantValue) {
       return createBool(!constant.boolValue);
     }
@@ -339,6 +351,9 @@
 
   @override
   IntConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
+
     IntConstantValue? fold(ConstantValue left, ConstantValue right) {
       if (left is IntConstantValue && right is IntConstantValue) {
         BigInt? resultValue = foldInts(left.intValue, right.intValue);
@@ -495,6 +510,9 @@
 
   @override
   NumConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
+
     NumConstantValue? fold(ConstantValue left, ConstantValue right) {
       if (left is NumConstantValue && right is NumConstantValue) {
         Object? foldedValue;
@@ -633,6 +651,9 @@
 
   @override
   ConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
+
     ConstantValue? fold(ConstantValue left, ConstantValue right) {
       if (left is IntConstantValue && right is IntConstantValue) {
         BigInt result = left.intValue + right.intValue;
@@ -661,6 +682,8 @@
 
   @override
   BoolConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
     if (left is NumConstantValue && right is NumConstantValue) {
       bool foldedValue;
       if (left is IntConstantValue && right is IntConstantValue) {
@@ -737,6 +760,8 @@
 
   @override
   BoolConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
     // Numbers need to be treated specially because: NaN != NaN, -0.0 == 0.0,
     // and 1 == 1.0.
     if (left is IntConstantValue && right is IntConstantValue) {
@@ -770,6 +795,8 @@
 
   @override
   BoolConstantValue fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
     // NaNs are not identical to anything. This is a web platform departure from
     // standard Dart. If we make `identical(double.nan, double.nan)` be `true`,
     // this constant folding will be incorrect. TODOs below for cross-reference.
@@ -799,7 +826,9 @@
 
   @override
   ConstantValue fold(ConstantValue left, ConstantValue right) {
-    if (left is NullConstantValue) return right;
+    if (_unwrap(left) is NullConstantValue) {
+      return right;
+    }
     return left;
   }
 }
@@ -812,6 +841,8 @@
 
   @override
   NumConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
     if (left is StringConstantValue && right is IntConstantValue) {
       String string = left.stringValue;
       int index = right.intValue.toInt();
@@ -831,6 +862,7 @@
 
   @override
   NumConstantValue? fold(ConstantValue constant) {
+    constant = _unwrap(constant);
     // Be careful to round() only values that do not throw on either the host or
     // target platform.
     NumConstantValue? tryToRound(double value) {
@@ -873,6 +905,7 @@
 
   @override
   NumConstantValue? fold(ConstantValue constant) {
+    constant = _unwrap(constant);
     if (constant is IntConstantValue) {
       double value = constant.doubleValue;
       // The code below is written to work for any `double`, even though
@@ -899,6 +932,9 @@
 
   @override
   ConstantValue? fold(ConstantValue left, ConstantValue right) {
+    left = _unwrap(left);
+    right = _unwrap(right);
+
     if (left is ListConstantValue) {
       if (right is IntConstantValue) {
         List<ConstantValue> entries = left.entries;
@@ -1006,3 +1042,7 @@
     }
   }
 }
+
+ConstantValue _unwrap(ConstantValue value) {
+  return value is DeferredGlobalConstantValue ? value.referenced : value;
+}
diff --git a/pkg/compiler/lib/src/ir/annotations.dart b/pkg/compiler/lib/src/ir/annotations.dart
index d19e0d5..eab80cc 100644
--- a/pkg/compiler/lib/src/ir/annotations.dart
+++ b/pkg/compiler/lib/src/ir/annotations.dart
@@ -195,13 +195,13 @@
           returnsAnnotations.add(returns);
         }
 
-        PragmaAnnotationData? pragmaAnnotation = _getPragmaAnnotation(constant);
-        if (pragmaAnnotation != null) {
-          if (pragmaAnnotations == null) {
-            data._memberPragmaAnnotations[member] = pragmaAnnotations = [];
-          }
-          pragmaAnnotations.add(pragmaAnnotation);
+        Iterable<PragmaAnnotationData> pragmaAnnotation = _pragmaAnnotations(
+          constant,
+        );
+        if (pragmaAnnotations == null) {
+          data._memberPragmaAnnotations[member] = pragmaAnnotations = [];
         }
+        pragmaAnnotations.addAll(pragmaAnnotation);
       }
     }
   }
@@ -382,16 +382,16 @@
   }
 }
 
-PragmaAnnotationData? _getPragmaAnnotation(ir.Constant constant) {
-  if (constant is! ir.InstanceConstant) return null;
+Iterable<PragmaAnnotationData> _pragmaAnnotations(ir.Constant constant) {
+  if (constant is! ir.InstanceConstant) return const [];
   ir.InstanceConstant value = constant;
   ir.Class cls = value.classNode;
   Uri uri = cls.enclosingLibrary.importUri;
   if (uri == Uris.packageMetaDart2js) {
     if (cls.name == '_NoInline') {
-      return const PragmaAnnotationData('noInline');
+      return const [PragmaAnnotationData('noInline')];
     } else if (cls.name == '_TryInline') {
-      return const PragmaAnnotationData('tryInline');
+      return const [PragmaAnnotationData('tryInline')];
     }
   } else if (uri == Uris.dartCore && cls.name == 'pragma') {
     ir.Constant? nameValue;
@@ -405,18 +405,27 @@
       }
     });
     final nameValueFinal = nameValue;
-    if (nameValueFinal is! ir.StringConstant) return null;
+    if (nameValueFinal is! ir.StringConstant) return const [];
     ir.StringConstant stringValue = nameValueFinal;
     String name = stringValue.value;
     String prefix = 'dart2js:';
-    if (!name.startsWith(prefix)) return null;
+    if (!name.startsWith(prefix)) return const [];
     String suffix = name.substring(prefix.length);
-    return PragmaAnnotationData(
-      suffix,
-      options: optionsValue is ir.NullConstant ? null : optionsValue,
-    );
+    return [
+      PragmaAnnotationData(
+        suffix,
+        options: optionsValue is ir.NullConstant ? null : optionsValue,
+      ),
+    ];
+  } else if (uri == Uris.packageMeta) {
+    if (cls.name == 'RecordUse') {
+      return const [
+        PragmaAnnotationData('noInline'),
+        PragmaAnnotationData('resource-identifier'),
+      ];
+    }
   }
-  return null;
+  return const [];
 }
 
 List<PragmaAnnotationData> computePragmaAnnotationDataFromIr(
@@ -431,10 +440,8 @@
       constant is! ir.UnevaluatedConstant,
       "Unexpected unevaluated constant on $node: $metadata",
     );
-    PragmaAnnotationData? data = _getPragmaAnnotation(constant);
-    if (data != null) {
-      annotations.add(data);
-    }
+    Iterable<PragmaAnnotationData> data = _pragmaAnnotations(constant);
+    annotations.addAll(data);
   }
   return annotations;
 }
diff --git a/pkg/compiler/lib/src/js_emitter/resource_info_emitter.dart b/pkg/compiler/lib/src/js_emitter/resource_info_emitter.dart
index fc568b7..ba7d1b8 100644
--- a/pkg/compiler/lib/src/js_emitter/resource_info_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/resource_info_emitter.dart
@@ -8,7 +8,8 @@
 ///
 /// .../foo_resource.dart:
 ///
-///     @pragma('dart2js:resource-identifer')
+///     @pragma('dart2js:resource-identifier')
+///     @pragma('dart2js:noInline')
 ///     Resource getResource(String group, int index) { ... }
 ///
 /// .../my_resources.dart:
@@ -29,8 +30,8 @@
 ///
 /// Some of the calls above are tree-shaken. Some are placed in one 'part' file
 /// and the others in a different 'part' file. The generated resources file
-/// contains the constant arguments to the calls, arranged by resource identifer
-/// and 'part' file.
+/// contains the constant arguments to the calls, arranged by resource
+/// identifier and 'part' file.
 ///
 /// `main.js.resources.json`:
 /// ```json
@@ -54,7 +55,7 @@
 ///             {"1": "group1", "2": 100},
 ///            ]}
 ///        ]},
-///     -- next identifer
+///     -- next identifier
 ///    ]
 /// }
 /// ```
@@ -65,15 +66,10 @@
 
 library;
 
-import 'dart:convert' show jsonDecode;
-import 'dart:io' show Platform;
-
-// ignore: implementation_imports
-import 'package:front_end/src/api_unstable/dart2js.dart' as fe;
+import 'package:record_use/record_use_internal.dart';
 
 import '../js/js.dart' as js;
-import '../universe/resource_identifier.dart'
-    show ResourceIdentifier, ResourceIdentifierLocation;
+import '../universe/resource_identifier.dart' show ResourceIdentifier;
 
 class _AnnotationMonitor implements js.JavaScriptAnnotationMonitor {
   final ResourceInfoCollector _collector;
@@ -91,87 +87,46 @@
 }
 
 class ResourceInfoCollector {
-  final Map<_ResourceIdentifierKey, _ResourceIdentifierInfo> _identifierMap =
-      {};
+  final Map<Identifier, List<CallReference>> callMap = {};
+  //TODO(mosum): Also register the part file of the definition.
+  final Map<Identifier, String> loadingUnits = {};
 
   js.JavaScriptAnnotationMonitor monitorFor(String fileName) {
     return _AnnotationMonitor(this, fileName);
   }
 
-  void _register(String filename, ResourceIdentifier identifier) {
-    final key = _ResourceIdentifierKey(identifier.name, identifier.uri);
-    final info = _identifierMap[key] ??= _ResourceIdentifierInfo(key);
-    if (identifier.nonconstant) info.nonconstant = true;
-    (info._files[filename] ??= []).add(identifier);
+  /// Save a [resourceIdentifier] in the [callMap].
+  void _register(String loadingUnit, ResourceIdentifier resourceIdentifier) {
+    final identifier = Identifier(
+      importUri: resourceIdentifier.uri.toString(),
+      scope: resourceIdentifier.parent,
+      name: resourceIdentifier.name,
+    );
+    callMap
+        .putIfAbsent(identifier, () => [])
+        .add(
+          CallWithArguments(
+            loadingUnit: loadingUnit,
+            namedArguments: {},
+            positionalArguments: resourceIdentifier.arguments,
+            location: resourceIdentifier.location,
+          ),
+        );
   }
 
-  Object finish(Map<String, String> environment) {
-    Map<String, Object> json = {
-      '_comment': r'Resources referenced by annotated resource identifers',
+  Map<String, dynamic> finish(Map<String, String> environment) => Recordings(
+    metadata: Metadata.fromJson({
+      'comment': 'Resources referenced by annotated resource identifiers',
       'AppTag': 'TBD',
       'environment': environment,
-      'identifiers': _identifierMap.values.toList()
-        ..sort(_ResourceIdentifierInfo.compare),
-    };
-    return json;
-  }
-}
-
-class _ResourceIdentifierKey {
-  final String name;
-  final Uri uri;
-
-  _ResourceIdentifierKey(this.name, this.uri);
-
-  @override
-  bool operator ==(Object other) =>
-      other is _ResourceIdentifierKey && name == other.name && uri == other.uri;
-
-  @override
-  late final int hashCode = Object.hash(name, uri);
-}
-
-class _ResourceIdentifierInfo {
-  final _ResourceIdentifierKey _key;
-  bool nonconstant = false;
-  final Map<String, List<ResourceIdentifier>> _files = {};
-  _ResourceIdentifierInfo(this._key);
-
-  static int compare(_ResourceIdentifierInfo a, _ResourceIdentifierInfo b) {
-    int r = a._key.name.compareTo(b._key.name);
-    if (r != 0) return r;
-    return a._key.uri.toString().compareTo(b._key.uri.toString());
-  }
-
-  Map<String, dynamic> toJson() {
-    final files = _files.entries.toList()
-      ..sort((a, b) => a.key.compareTo(b.key));
-    return {
-      "name": _key.name,
-      "uri": _key.uri.toString(),
-      "nonconstant": nonconstant,
-      "files": [
-        for (final entry in files)
-          {
-            "filename": entry.key,
-            "references": [
-              for (final resourceIdentifier in entry.value)
-                {
-                  if (resourceIdentifier.location != null)
-                    '@': _locationToJson(resourceIdentifier.location!),
-                  ...jsonDecode(resourceIdentifier.arguments),
-                },
-            ],
-          },
-      ],
-    };
-  }
-
-  Map<String, dynamic> _locationToJson(ResourceIdentifierLocation location) {
-    return {
-      'uri': fe.relativizeUri(Uri.base, location.uri, Platform.isWindows),
-      if (location.line != null) 'line': location.line,
-      if (location.column != null) 'column': location.column,
-    };
-  }
+      "version": version.toString(),
+    }),
+    callsForDefinition: callMap.map(
+      (key, value) => MapEntry(
+        Definition(identifier: key, loadingUnit: loadingUnits[key]),
+        value,
+      ),
+    ),
+    instancesForDefinition: {},
+  ).toJson();
 }
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 1098253..385c59c 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -245,28 +245,6 @@
   }
 
   @override
-  ir.Expression instantiateNoSuchMethodError(
-    CoreTypes coreTypes,
-    ir.Expression receiver,
-    String name,
-    ir.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,
-  }) {
-    // TODO(sigmund): implement;
-    return ir.InvalidExpression(null);
-  }
-
-  @override
   ConstantsBackend get constantsBackend => Dart2jsConstantsBackend(
     supportsUnevaluatedConstants: supportsUnevaluatedConstants,
   );
diff --git a/pkg/compiler/lib/src/kernel/transformations/modular/late_lowering.dart b/pkg/compiler/lib/src/kernel/transformations/modular/late_lowering.dart
index 1d3ee75..add5513 100644
--- a/pkg/compiler/lib/src/kernel/transformations/modular/late_lowering.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/modular/late_lowering.dart
@@ -754,8 +754,11 @@
           ConstantExpression(annotation.constant, annotation.type)
             ..fileOffset = annotation.fileOffset,
         );
-      } else {
-        throw StateError('Non-constant annotation on $source');
+      } else if (annotation is! InvalidExpression) {
+        throw StateError(
+          'Non-constant annotation on $source (${annotation.runtimeType}): '
+          '$annotation',
+        );
       }
     }
   }
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 394f212..1c1e671 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -3,15 +3,28 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:collection' show Queue;
+import 'dart:convert' show jsonEncode;
+import 'dart:io';
 
 // ignore: implementation_imports
-import 'package:front_end/src/api_unstable/dart2js.dart' show Link;
+import 'package:front_end/src/api_unstable/dart2js.dart'
+    show Link, relativizeUri;
+import 'package:record_use/record_use_internal.dart'
+    show
+        Location,
+        Constant,
+        NullConstant,
+        BoolConstant,
+        IntConstant,
+        StringConstant,
+        FlattenConstantsExtension,
+        MapifyIterableExtension;
 
 import '../common.dart';
+import '../common/codegen.dart' show CodegenRegistry;
 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 CompilerTask;
 import '../constants/constant_system.dart' as constant_system;
 import '../constants/values.dart';
@@ -21,10 +34,10 @@
 import '../inferrer/abstract_value_domain.dart';
 import '../io/source_information.dart';
 import '../js/js.dart' as js;
-import '../js_backend/interceptor_data.dart';
 import '../js_backend/codegen_inputs.dart' show CodegenInputs;
-import '../js_backend/native_data.dart';
+import '../js_backend/interceptor_data.dart';
 import '../js_backend/namer.dart' show ModularNamer;
+import '../js_backend/native_data.dart';
 import '../js_backend/runtime_types_codegen.dart';
 import '../js_backend/runtime_types_new.dart'
     show RecipeEncoder, RecipeEncoding, indexTypeVariable;
@@ -2393,47 +2406,66 @@
     List<HInstruction> arguments,
     SourceInformation? sourceInformation,
   ) {
-    ConstantValue? findConstant(HInstruction node) {
-      while (node is HLateValue) {
-        node = node.target;
-      }
-      return node is HConstant ? node.constant : null;
-    }
+    final definition = _closedWorld.elementMap.getMemberContextNode(element);
+    final uri =
+        definition?.enclosingLibrary.importUri ?? element.library.canonicalUri;
 
-    final definition = _closedWorld.elementMap.getMemberDefinition(element);
-    final uri = definition.location.uri;
-
-    final builder = ResourceIdentifierBuilder(element.name!, uri);
-
+    Location? location;
     if (sourceInformation != null) {
-      _addSourceInformationToResourceIdentiferBuilder(
-        builder,
-        sourceInformation,
-      );
-    }
-    for (int i = 0; i < arguments.length; i++) {
-      builder.add('${i + 1}', findConstant(arguments[i]));
+      SourceLocation? sourceLocation =
+          sourceInformation.startPosition ??
+          sourceInformation.innerPosition ??
+          sourceInformation.endPosition;
+      if (sourceLocation != null) {
+        final sourceUri = sourceLocation.sourceUri;
+        if (sourceUri != null) {
+          // Is [sourceUri] normalized in some way or does that need to be done
+          // here?
+          location = Location(
+            uri: relativizeUri(Uri.base, sourceUri, Platform.isWindows),
+          );
+        }
+      }
     }
 
-    return builder.finish();
+    //TODO(mosum): Are named arguments even possible to record in JS?
+    final List<Constant?> constantArguments = [];
+    for (final constant in arguments.map(_findConstant)) {
+      constantArguments.add(constant != null ? _findValue(constant) : null);
+    }
+
+    final constants = constantArguments.nonNulls.flatten().asMapToIndices;
+
+    final argumentJson = jsonEncode(
+      constantArguments.map((argument) => argument?.toJson(constants)).toList(),
+    );
+
+    return ResourceIdentifier(
+      element.name!,
+      element.enclosingClass?.name,
+      relativizeUri(Uri.base, uri, Platform.isWindows),
+      location,
+      constantArguments.any((argument) => argument == null),
+      argumentJson,
+    );
   }
 
-  void _addSourceInformationToResourceIdentiferBuilder(
-    ResourceIdentifierBuilder builder,
-    SourceInformation sourceInformation,
-  ) {
-    SourceLocation? location =
-        sourceInformation.startPosition ??
-        sourceInformation.innerPosition ??
-        sourceInformation.endPosition;
-    if (location != null) {
-      final sourceUri = location.sourceUri;
-      if (sourceUri != null) {
-        // Is [sourceUri] normalized in some way or does that need to be done
-        // here?
-        builder.addLocation(sourceUri, location.line, location.column);
-      }
+  Constant? _findValue(ConstantValue constant) {
+    return switch (constant) {
+      NullConstantValue() => NullConstant(),
+      BoolConstantValue() => BoolConstant(constant.boolValue),
+      IntConstantValue() => IntConstant(constant.intValue.toInt()),
+      StringConstantValue() => StringConstant(constant.stringValue),
+      //TODO(mosum): Add list and map support
+      Object() => null,
+    };
+  }
+
+  ConstantValue? _findConstant(HInstruction node) {
+    while (node is HLateValue) {
+      node = node.target;
     }
+    return node is HConstant ? node.constant : null;
   }
 
   @override
diff --git a/pkg/compiler/lib/src/universe/resource_identifier.dart b/pkg/compiler/lib/src/universe/resource_identifier.dart
index ec24257..60bdfe6 100644
--- a/pkg/compiler/lib/src/universe/resource_identifier.dart
+++ b/pkg/compiler/lib/src/universe/resource_identifier.dart
@@ -2,9 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:convert' show jsonEncode;
+import 'dart:convert';
 
-import '../constants/values.dart';
+import 'package:record_use/record_use_internal.dart';
+
 import '../serialization/serialization.dart';
 
 class ResourceIdentifier {
@@ -13,51 +14,68 @@
   /// Name of the class or method that is a resource identifier.
   final String name;
 
-  /// When the class or method is defined.
-  final Uri uri;
+  /// Name of the parent, if existing.
+  final String? parent;
 
-  /// Location of the resource identifer instance. This is `null` for constant
-  /// resource identifiers. For other resource identifer instances this is the
+  /// Where the class or method is defined.
+  final String uri;
+
+  /// Location of the resource identifier instance. This is `null` for constant
+  /// resource identifiers. For other resource identifier instances this is the
   /// call site to the constructor or method.
-  final ResourceIdentifierLocation? location;
+  final Location? location;
 
-  /// True if some argument is missing from [arguments] because it is not a
-  /// constant.
+  /// True if some argument is missing from [_argumentsString] because it is not
+  /// a constant.
   final bool nonconstant;
 
   /// JSON encoded map from class field names or function parameter positions to
   /// primitive values for arguments that are constant.
   // TODO(sra): Consider holding as a map with ConstantValue values.
-  final String arguments;
+  String _argumentsString;
+
+  /// JSON encoded map from class field names or function parameter positions to
+  /// primitive values for arguments that are constant.
+  List<Constant?> get arguments => _argumentsFromJson();
 
   ResourceIdentifier(
     this.name,
+    this.parent,
     this.uri,
     this.location,
     this.nonconstant,
-    this.arguments,
+    this._argumentsString,
   );
 
   factory ResourceIdentifier.readFromDataSource(DataSourceReader source) {
     source.begin(tag);
     String name = source.readString();
-    Uri uri = source.readUri();
+    String? parent = source.readStringOrNull();
+    String uri = source.readString();
 
     bool hasLocation = source.readBool();
-    ResourceIdentifierLocation? location = hasLocation
+    Location? location = hasLocation
         ? ResourceIdentifierLocation.readFromDataSource(source)
         : null;
 
     bool nonconstant = source.readBool();
     String arguments = source.readString();
     source.end(tag);
-    return ResourceIdentifier(name, uri, location, nonconstant, arguments);
+    return ResourceIdentifier(
+      name,
+      parent,
+      uri,
+      location,
+      nonconstant,
+      arguments,
+    );
   }
 
   void writeToDataSink(DataSinkWriter sink) {
     sink.begin(tag);
     sink.writeString(name);
-    sink.writeUri(uri);
+    sink.writeStringOrNull(parent);
+    sink.writeString(uri);
 
     if (location == null) {
       sink.writeBool(false);
@@ -67,7 +85,7 @@
     }
 
     sink.writeBool(nonconstant);
-    sink.writeString(arguments);
+    sink.writeString(_argumentsString);
     sink.end(tag);
   }
 
@@ -77,97 +95,48 @@
       name == other.name &&
       uri == other.uri &&
       location == other.location &&
-      arguments == other.arguments;
+      _argumentsString == other._argumentsString;
 
   @override
-  int get hashCode => Object.hash(name, uri, location, arguments);
+  int get hashCode => Object.hash(name, uri, location, _argumentsString);
 
   @override
   String toString() {
-    return 'ResourceIdentifier($name @ $uri, $location, $arguments)';
+    return 'ResourceIdentifier($name @ $uri, $location, $_argumentsString)';
+  }
+
+  List<Constant?> _argumentsFromJson() {
+    final json = jsonDecode(_argumentsString) as List<Object?>;
+    final constants = <Constant>[];
+    final arguments = <Constant?>[];
+    for (final constantJsonObj in json) {
+      final constantJson = constantJsonObj as Map<String, Object?>?;
+      final Constant? constant;
+      if (constantJson != null) {
+        constant = Constant.fromJson(constantJson, constants);
+        constants.add(constant);
+      } else {
+        constant = null;
+      }
+      arguments.add(constant);
+    }
+    return arguments;
   }
 }
 
-class ResourceIdentifierLocation {
-  final Uri uri;
-  final int? line;
-  final int? column;
-  ResourceIdentifierLocation._(this.uri, this.line, this.column);
-
-  factory ResourceIdentifierLocation.readFromDataSource(
-    DataSourceReader source,
-  ) {
+extension ResourceIdentifierLocation on Location {
+  static Location readFromDataSource(DataSourceReader source) {
     final uri = source.readUri();
-    final line = source.readIntOrNull();
-    final column = source.readIntOrNull();
-    return ResourceIdentifierLocation._(uri, line, column);
+    //TODO(mosum): Use a verbose flag for line and column info
+    // final line = source.readIntOrNull();
+    // final column = source.readIntOrNull();
+    return Location(uri: uri.toFilePath());
   }
 
   void writeToDataSink(DataSinkWriter sink) {
-    sink.writeUri(uri);
-    sink.writeIntOrNull(line);
-    sink.writeIntOrNull(column);
+    sink.writeUri(Uri.file(uri));
+    //TODO(mosum): Use a verbose flag for line and column info
+    // sink.writeIntOrNull(line);
+    // sink.writeIntOrNull(column);
   }
-
-  @override
-  bool operator ==(Object other) =>
-      other is ResourceIdentifierLocation &&
-      uri == other.uri &&
-      line == other.line &&
-      column == other.column;
-
-  @override
-  late int hashCode = Object.hash(uri, line, column);
-
-  @override
-  String toString() => 'ResourceIdentifierLocation($uri:$line:$column)';
-}
-
-class ResourceIdentifierBuilder {
-  final String name;
-  final Uri uri;
-  bool _nonconstant = false;
-  ResourceIdentifierLocation? _location;
-  final Map<String, Object?> _arguments = {};
-
-  ResourceIdentifierBuilder(this.name, this.uri);
-
-  ResourceIdentifier finish() {
-    return ResourceIdentifier(
-      name,
-      uri,
-      _location,
-      _nonconstant,
-      jsonEncode(_arguments),
-    );
-  }
-
-  void add(String argumentName, ConstantValue? constant) {
-    if (constant != null) {
-      final value = _findValue(constant);
-      if (!identical(value, _unknown)) {
-        _arguments[argumentName] = value;
-        return;
-      }
-    }
-    _nonconstant = true;
-  }
-
-  void addLocation(Uri uri, int? line, int? column) {
-    _location = ResourceIdentifierLocation._(uri, line, column);
-  }
-
-  Object? _findValue(ConstantValue constant) {
-    if (constant is IntConstantValue) {
-      final value = constant.intValue;
-      return value.isValidInt ? value.toInt() : _unknown;
-    }
-    if (constant is StringConstantValue) return constant.stringValue;
-    if (constant is BoolConstantValue) return constant.boolValue;
-    if (constant is DoubleConstantValue) return constant.doubleValue;
-    if (constant is NullConstantValue) return null;
-    return _unknown;
-  }
-
-  static final Object _unknown = Object();
 }
diff --git a/pkg/compiler/pubspec.yaml b/pkg/compiler/pubspec.yaml
index 12d4341..b61d37c 100644
--- a/pkg/compiler/pubspec.yaml
+++ b/pkg/compiler/pubspec.yaml
@@ -23,6 +23,7 @@
   kernel: any
   meta: any
   mmap: any
+  record_use: any
   shell_arg_splitter: any
   vm_service: any
 
diff --git a/pkg/compiler/test/equivalence/id_equivalence_helper.dart b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
index e73d6d7..51bd24f 100644
--- a/pkg/compiler/test/equivalence/id_equivalence_helper.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
@@ -459,7 +459,7 @@
   const TestConfig(this.marker, this.name, this.options);
 }
 
-/// Check code for all test files int [data] using [computeFromAst] and
+/// Check code for all test files in [data] using [computeFromAst] and
 /// [computeFromKernel] from the respective front ends. If [skipForKernel]
 /// contains the name of the test file it isn't tested for kernel.
 ///
diff --git a/pkg/compiler/test/record_use/data/basic.dart b/pkg/compiler/test/record_use/data/basic.dart
new file mode 100644
index 0000000..304ce86
--- /dev/null
+++ b/pkg/compiler/test/record_use/data/basic.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:meta/meta.dart' show RecordUse;
+
+void main() {
+  print(SomeClass.someStaticMethod(42));
+  print(SomeClass.someStaticMethod2(99));
+  print(someTopLevelMethod(11));
+}
+
+class SomeClass {
+  @pragma('dart2js:resource-identifier')
+  @pragma('dart2js:noInline')
+  static int someStaticMethod(int i) {
+    return i + 1;
+  }
+
+  @RecordUse()
+  static int someStaticMethod2(int i) {
+    return i + 1;
+  }
+}
+
+@pragma('dart2js:resource-identifier')
+@pragma('dart2js:noInline')
+int someTopLevelMethod(int i) {
+  return i + 1;
+}
diff --git a/pkg/compiler/test/record_use/golden/basic.json.expect b/pkg/compiler/test/record_use/golden/basic.json.expect
new file mode 100644
index 0000000..2d962ba
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/basic.json.expect
@@ -0,0 +1,92 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    },
+    {
+      "type": "int",
+      "value": 99
+    },
+    {
+      "type": "int",
+      "value": 11
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/basic.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/basic.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    },
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/basic.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod2"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    },
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/basic.dart",
+          "name": "someTopLevelMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            2
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/complex.json.expect b/pkg/compiler/test/record_use/golden/complex.json.expect
new file mode 100644
index 0000000..7e457d8
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/complex.json.expect
@@ -0,0 +1,55 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "String",
+      "value": "somestring"
+    },
+    {
+      "type": "int",
+      "value": 42
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/complex.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/complex.dart",
+          "scope": "OtherClass",
+          "name": "generate"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            null,
+            null,
+            0,
+            null,
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/different.json.expect b/pkg/compiler/test/record_use/golden/different.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/different.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/extension.json.expect b/pkg/compiler/test/record_use/golden/extension.json.expect
new file mode 100644
index 0000000..f6d7329
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/extension.json.expect
@@ -0,0 +1,47 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "String",
+      "value": "42"
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/extension.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/extension.dart",
+          "name": "_extension#0|callWithArgs"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            null,
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/instance_class.json.expect b/pkg/compiler/test/record_use/golden/instance_class.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/instance_class.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/instance_complex.json.expect b/pkg/compiler/test/record_use/golden/instance_complex.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/instance_complex.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/instance_duplicates.json.expect b/pkg/compiler/test/record_use/golden/instance_duplicates.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/instance_duplicates.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/instance_method.json.expect b/pkg/compiler/test/record_use/golden/instance_method.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/instance_method.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/instance_not_annotation.json.expect b/pkg/compiler/test/record_use/golden/instance_not_annotation.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/instance_not_annotation.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/loading_units_multiple.json.expect b/pkg/compiler/test/record_use/golden/loading_units_multiple.json.expect
new file mode 100644
index 0000000..62459f7
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/loading_units_multiple.json.expect
@@ -0,0 +1,85 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    },
+    {
+      "type": "String",
+      "value": "helper"
+    },
+    {
+      "type": "String",
+      "value": ""
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/loading_units_multiple_helper.dart"
+    },
+    {
+      "uri": "memory:sdk/tests/web/native/loading_units_multiple.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/loading_units_multiple_helper_shared.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out_1",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 1
+        }
+      ]
+    },
+    {
+      "definition": {
+        "identifier": {
+          "uri": "dart:_js_helper",
+          "name": "loadDeferredLibrary"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            1,
+            2
+          ],
+          "loading_unit": "out",
+          "@": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/loading_units_simple.json.expect b/pkg/compiler/test/record_use/golden/loading_units_simple.json.expect
new file mode 100644
index 0000000..71a81ca
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/loading_units_simple.json.expect
@@ -0,0 +1,96 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    },
+    {
+      "type": "String",
+      "value": "helper"
+    },
+    {
+      "type": "String",
+      "value": ""
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/loading_units_simple_helper.dart"
+    },
+    {
+      "uri": "memory:sdk/tests/web/native/loading_units_simple.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/loading_units_simple_helper.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out_1",
+          "@": 0
+        }
+      ]
+    },
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/loading_units_simple.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 1
+        }
+      ]
+    },
+    {
+      "definition": {
+        "identifier": {
+          "uri": "dart:_js_helper",
+          "name": "loadDeferredLibrary"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            1,
+            2
+          ],
+          "loading_unit": "out",
+          "@": 1
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/named_and_positional.json.expect b/pkg/compiler/test/record_use/golden/named_and_positional.json.expect
new file mode 100644
index 0000000..d29b7fc
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/named_and_positional.json.expect
@@ -0,0 +1,98 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "Null"
+    },
+    {
+      "type": "int",
+      "value": 5
+    },
+    {
+      "type": "int",
+      "value": 1
+    },
+    {
+      "type": "int",
+      "value": 2
+    },
+    {
+      "type": "int",
+      "value": 4
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/named_and_positional.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/named_and_positional.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0,
+            0,
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            3,
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            0,
+            4
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            5,
+            4
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/named_both.json.expect b/pkg/compiler/test/record_use/golden/named_both.json.expect
new file mode 100644
index 0000000..ac951ce
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/named_both.json.expect
@@ -0,0 +1,98 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "Null"
+    },
+    {
+      "type": "int",
+      "value": 5
+    },
+    {
+      "type": "int",
+      "value": 1
+    },
+    {
+      "type": "int",
+      "value": 2
+    },
+    {
+      "type": "int",
+      "value": 4
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/named_both.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/named_both.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0,
+            0,
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            3,
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            0,
+            4
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            5,
+            4
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/named_optional.json.expect b/pkg/compiler/test/record_use/golden/named_optional.json.expect
new file mode 100644
index 0000000..1acc233
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/named_optional.json.expect
@@ -0,0 +1,59 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "int",
+      "value": 4
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/named_optional.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/named_optional.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/named_required.json.expect b/pkg/compiler/test/record_use/golden/named_required.json.expect
new file mode 100644
index 0000000..0fe294a
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/named_required.json.expect
@@ -0,0 +1,59 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "int",
+      "value": 5
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/named_required.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/named_required.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/nested.json.expect b/pkg/compiler/test/record_use/golden/nested.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/nested.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/partfile_main.json.expect b/pkg/compiler/test/record_use/golden/partfile_main.json.expect
new file mode 100644
index 0000000..5968f99
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/partfile_main.json.expect
@@ -0,0 +1,47 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/partfile_main.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/partfile_main.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/positional_both.json.expect b/pkg/compiler/test/record_use/golden/positional_both.json.expect
new file mode 100644
index 0000000..89e6a3b
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/positional_both.json.expect
@@ -0,0 +1,69 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 5
+    },
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "int",
+      "value": 6
+    },
+    {
+      "type": "int",
+      "value": 4
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/positional_both.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/positional_both.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0,
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2,
+            3
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/positional_optional.json.expect b/pkg/compiler/test/record_use/golden/positional_optional.json.expect
new file mode 100644
index 0000000..fee91cb
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/positional_optional.json.expect
@@ -0,0 +1,59 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "int",
+      "value": 4
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/positional_optional.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/positional_optional.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/record_enum.json.expect b/pkg/compiler/test/record_use/golden/record_enum.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/record_enum.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/record_instance_constant_empty.json.expect b/pkg/compiler/test/record_use/golden/record_instance_constant_empty.json.expect
new file mode 100644
index 0000000..0ca5b61
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/record_instance_constant_empty.json.expect
@@ -0,0 +1,15 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}
diff --git a/pkg/compiler/test/record_use/golden/simple.json.expect b/pkg/compiler/test/record_use/golden/simple.json.expect
new file mode 100644
index 0000000..3d1875e
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/simple.json.expect
@@ -0,0 +1,47 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/simple.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/simple.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/tearoff.json.expect b/pkg/compiler/test/record_use/golden/tearoff.json.expect
new file mode 100644
index 0000000..e1e6fba
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/tearoff.json.expect
@@ -0,0 +1,47 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/tearoff.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/tearoff.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/top_level_method.json.expect b/pkg/compiler/test/record_use/golden/top_level_method.json.expect
new file mode 100644
index 0000000..578f455
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/top_level_method.json.expect
@@ -0,0 +1,46 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/top_level_method.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/top_level_method.dart",
+          "name": "someTopLevelMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/golden/types_of_arguments.json.expect b/pkg/compiler/test/record_use/golden/types_of_arguments.json.expect
new file mode 100644
index 0000000..863fb8f
--- /dev/null
+++ b/pkg/compiler/test/record_use/golden/types_of_arguments.json.expect
@@ -0,0 +1,98 @@
+{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 42
+    },
+    {
+      "type": "Null"
+    },
+    {
+      "type": "String",
+      "value": "s"
+    },
+    {
+      "type": "bool",
+      "value": true
+    }
+  ],
+  "locations": [
+    {
+      "uri": "memory:sdk/tests/web/native/types_of_arguments.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "memory:sdk/tests/web/native/types_of_arguments.dart",
+          "scope": "SomeClass",
+          "name": "someStaticMethod"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            1
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            2
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            3
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            null
+          ],
+          "loading_unit": "out",
+          "@": 0
+        },
+        {
+          "type": "with_arguments",
+          "positional": [
+            null
+          ],
+          "loading_unit": "out",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}
diff --git a/pkg/compiler/test/record_use/record_use_test.dart b/pkg/compiler/test/record_use/record_use_test.dart
new file mode 100644
index 0000000..1c206eb
--- /dev/null
+++ b/pkg/compiler/test/record_use/record_use_test.dart
@@ -0,0 +1,106 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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, Directory, Platform;
+
+import 'package:compiler/compiler_api.dart' as api show OutputType;
+import 'package:compiler/compiler_api.dart';
+import 'package:compiler/src/commandline_options.dart' show Flags;
+import 'package:compiler/src/util/memory_compiler.dart';
+import 'package:expect/expect.dart' show Expect;
+import 'package:path/path.dart' as path;
+
+/// Options to pass to the compiler such as
+/// `Flags.disableTypeInference` or `Flags.disableInlining`
+const List<String> compilerOptions = [Flags.writeResources];
+
+/// Run `dart --define=updateExpectations=true pkg/compiler/test/record_use/record_use_test.dart`
+/// to update.
+Future<void> main() async {
+  final directory = Directory.fromUri(Platform.script.resolve('data'));
+  final testFiles =
+      [
+            ...directory.listSync(),
+            ...Directory(
+              'pkg/vm/testcases/transformations/record_use',
+            ).listSync(),
+          ]
+          .whereType<File>()
+          .where((file) => file.path.endsWith('.dart'))
+          .map(
+            (file) => TestFile(
+              file: file,
+              basename: path.basename(file.path),
+              contents: file.readAsStringSync(),
+              uri: _createUri(path.basename(file.path)),
+            ),
+          );
+
+  final allFiles = {for (final file in testFiles) file.uri.path: file.contents};
+  for (final testFile in testFiles.where((element) => element.hasMain)) {
+    final recordedUsages = await compileWithUsages(
+      entryPoint: testFile.uri,
+      memorySourceFiles: allFiles,
+    );
+    final goldenFile = File(
+      path.join(
+        Platform.script.resolve('golden').path,
+        path.setExtension(testFile.basename, '.json.expect'),
+      ),
+    );
+    const update = bool.fromEnvironment('updateExpectations');
+    if (!goldenFile.existsSync() || update) {
+      await goldenFile.create();
+      await goldenFile.writeAsString(recordedUsages);
+    } else {
+      Expect.stringEquals(
+        recordedUsages.trim(),
+        (await goldenFile.readAsString()).trim(),
+        'Recorded usages for ${testFile.uri} do not match golden file.',
+      );
+    }
+  }
+}
+
+class TestFile {
+  final File file;
+  final String basename;
+  final String contents;
+  final Uri uri;
+
+  const TestFile({
+    required this.file,
+    required this.basename,
+    required this.contents,
+    required this.uri,
+  });
+
+  bool get hasMain => contents.contains('main()');
+}
+
+typedef CompiledOutput = Map<api.OutputType, Map<String, String>>;
+
+Future<String> compileWithUsages({
+  Uri? entryPoint,
+  required Map<String, dynamic> memorySourceFiles,
+}) async {
+  final outputProvider = OutputCollector();
+
+  CompilationResult result = await runCompiler(
+    entryPoint: entryPoint,
+    memorySourceFiles: memorySourceFiles,
+    outputProvider: outputProvider,
+    options: [Flags.writeResources],
+  );
+  Expect.isTrue(result.isSuccess);
+
+  return outputProvider.outputMap[OutputType.resourceIdentifiers]!.values.first
+      .toString();
+}
+
+// Pretend this is a dart2js_native test to allow use of 'native' keyword
+// and import of private libraries.
+Uri _createUri(String fileName) {
+  return Uri.parse('memory:sdk/tests/web/native/$fileName');
+}
diff --git a/pkg/dart2bytecode/docs/bytecode.md b/pkg/dart2bytecode/docs/bytecode.md
index 97634cf..5bb89d4 100644
--- a/pkg/dart2bytecode/docs/bytecode.md
+++ b/pkg/dart2bytecode/docs/bytecode.md
@@ -524,7 +524,7 @@
                 hasGetter, hasSetter,
                 hasInitializer, hasNontrivialInitializer, hasInitializerCode,
                 hasSourcePositions, hasAnnotations, hasPragma,
-                hasCustomScript);
+                hasCustomScript, isExtensionTypeMember);
   PackedObject name;
   PackedObject type;
 
@@ -557,7 +557,7 @@
                 isAsync, isAsyncStar, isSyncStar,
                 isNoSuchMethodForwarder, isExternal, isNative,
                 hasSourcePositions, hasAnnotations, hasPragma,
-                hasCustomScript);
+                hasCustomScript, isExtensionTypeMember);
 
   PackedObject name;
 
diff --git a/pkg/dart2bytecode/lib/bytecode_generator.dart b/pkg/dart2bytecode/lib/bytecode_generator.dart
index d48cb02..ec88f4a 100644
--- a/pkg/dart2bytecode/lib/bytecode_generator.dart
+++ b/pkg/dart2bytecode/lib/bytecode_generator.dart
@@ -227,9 +227,11 @@
         if (source == null) {
           final importUri =
               objectTable.getConstStringHandle(astSource.importUri.toString());
+          // Use asMember instead of asConstructor because some const
+          // constructors from extension types are desugared to procedures.
           final coveredConstConstructors = astSource
               .constantCoverageConstructors
-              ?.map((r) => objectTable.getHandle(r.asConstructor)!)
+              ?.map((r) => objectTable.getHandle(r.asMember)!)
               .toList();
           source = new SourceFile(importUri, coveredConstConstructors);
           bytecodeComponent.sourceFiles.add(source);
@@ -500,6 +502,9 @@
     if (field.isExtensionMember) {
       flags |= FieldDeclaration.isExtensionMemberFlag;
     }
+    if (field.isExtensionTypeMember) {
+      flags |= FieldDeclaration.isExtensionTypeMemberFlag;
+    }
     // In NNBD libraries, static fields with initializers are implicitly late.
     if (field.isLate || (field.isStatic && field.initializer != null)) {
       flags |= FieldDeclaration.isLateFlag;
@@ -567,6 +572,9 @@
     if (member.isExtensionMember) {
       flags |= FunctionDeclaration.isExtensionMemberFlag;
     }
+    if (member.isExtensionTypeMember) {
+      flags |= FunctionDeclaration.isExtensionTypeMemberFlag;
+    }
 
     FunctionNode function = member.function!;
     if (function.requiredParameterCount !=
@@ -4337,7 +4345,16 @@
       final initializer = node.initializer;
       final bool emitStore = !_skipVariableInitialization(node, isCaptured);
       int maxInitializerPosition = node.fileOffset;
+      if (node.isSynthesized) {
+        asm.currentSourcePositionFlags |= SourcePositions.syntheticFlag;
+      }
       if (emitStore) {
+        // Record the source position at the start of the bytecode generated
+        // for storing the variable.
+        if (initializer != null) {
+          _recordSourcePosition(node.fileEqualsOffset);
+        }
+        _emitSourcePosition();
         if (isCaptured) {
           _genPushContextForVariable(node);
         }
@@ -4357,12 +4374,6 @@
       }
 
       if (emitStore) {
-        if (!node.isSynthesized) {
-          if (initializer != null) {
-            _recordSourcePosition(node.fileEqualsOffset);
-          }
-          _emitSourcePosition();
-        }
         _genStoreVar(node);
       }
     }
diff --git a/pkg/dart2bytecode/lib/declarations.dart b/pkg/dart2bytecode/lib/declarations.dart
index 07b5b57..1f72bcf 100644
--- a/pkg/dart2bytecode/lib/declarations.dart
+++ b/pkg/dart2bytecode/lib/declarations.dart
@@ -360,6 +360,7 @@
   static const hasAnnotationsFlag = 1 << 14;
   static const hasPragmaFlag = 1 << 15;
   static const hasCustomScriptFlag = 1 << 16;
+  static const isExtensionTypeMemberFlag = 1 << 17;
 
   final int flags;
   final ObjectHandle name;
@@ -475,6 +476,9 @@
     if ((flags & isExtensionMemberFlag) != 0) {
       sb.write(', extension-member');
     }
+    if ((flags & isExtensionTypeMemberFlag) != 0) {
+      sb.write(', extension-type-member');
+    }
     if ((flags & hasPragmaFlag) != 0) {
       sb.write(', has-pragma');
     }
@@ -526,6 +530,7 @@
   static const hasAnnotationsFlag = 1 << 21;
   static const hasPragmaFlag = 1 << 22;
   static const hasCustomScriptFlag = 1 << 23;
+  static const isExtensionTypeMemberFlag = 1 << 24;
 
   final int flags;
   final ObjectHandle name;
@@ -678,6 +683,9 @@
     if ((flags & isExtensionMemberFlag) != 0) {
       sb.write(', extension-member');
     }
+    if ((flags & isExtensionTypeMemberFlag) != 0) {
+      sb.write(', extension-type-member');
+    }
     if ((flags & hasOptionalPositionalParamsFlag) != 0) {
       sb.write(', has-optional-positional-params');
     }
diff --git a/pkg/dart2bytecode/test/bytecode_generator_test.dart b/pkg/dart2bytecode/test/bytecode_generator_test.dart
index 9f49aa7..39b42e8 100644
--- a/pkg/dart2bytecode/test/bytecode_generator_test.dart
+++ b/pkg/dart2bytecode/test/bytecode_generator_test.dart
@@ -160,13 +160,24 @@
     }
   });
 
+  // The following tests are known to fail due to the experiment.
+  const Set<String> knownFailures = {
+    'closures.dart',
+    'async.dart',
+    'switch.dart',
+    'type_ops.dart',
+    'try_blocks.dart',
+    'loops.dart',
+  };
+
   group('gen-bytecode-with-closure-context-lowering', () {
     final testCasesDir =
         new Directory(dartSdkPkgDir + 'dart2bytecode/testcases');
 
     for (var entry
         in testCasesDir.listSync(recursive: true, followLinks: false)) {
-      if (entry.path.endsWith(".dart")) {
+      if (entry.path.endsWith(".dart") &&
+          !knownFailures.contains(entry.uri.pathSegments.last)) {
         test(
             entry.path,
             () =>
diff --git a/pkg/dart2js_info/lib/src/proto/info.pb.dart b/pkg/dart2js_info/lib/src/proto/info.pb.dart
index c4d605f..4e79d3d 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pb.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pb.dart
@@ -1,13 +1,14 @@
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: info.proto
-//
+// Generated from info.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -21,22 +22,20 @@
     $core.String? targetId,
     $core.String? mask,
   }) {
-    final $result = create();
-    if (targetId != null) {
-      $result.targetId = targetId;
-    }
-    if (mask != null) {
-      $result.mask = mask;
-    }
-    return $result;
+    final result = create();
+    if (targetId != null) result.targetId = targetId;
+    if (mask != null) result.mask = mask;
+    return result;
   }
-  DependencyInfoPB._() : super();
-  factory DependencyInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory DependencyInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  DependencyInfoPB._();
+
+  factory DependencyInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory DependencyInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'DependencyInfoPB',
@@ -47,24 +46,20 @@
     ..aOS(2, _omitFieldNames ? '' : 'mask')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  DependencyInfoPB clone() => DependencyInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  DependencyInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   DependencyInfoPB copyWith(void Function(DependencyInfoPB) updates) =>
       super.copyWith((message) => updates(message as DependencyInfoPB))
           as DependencyInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static DependencyInfoPB create() => DependencyInfoPB._();
+  @$core.override
   DependencyInfoPB createEmptyInstance() => create();
-  static $pb.PbList<DependencyInfoPB> createRepeated() =>
-      $pb.PbList<DependencyInfoPB>();
   @$core.pragma('dart2js:noInline')
   static DependencyInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<DependencyInfoPB>(create);
@@ -74,10 +69,7 @@
   @$pb.TagNumber(1)
   $core.String get targetId => $_getSZ(0);
   @$pb.TagNumber(1)
-  set targetId($core.String v) {
-    $_setString(0, v);
-  }
-
+  set targetId($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasTargetId() => $_has(0);
   @$pb.TagNumber(1)
@@ -87,10 +79,7 @@
   @$pb.TagNumber(2)
   $core.String get mask => $_getSZ(1);
   @$pb.TagNumber(2)
-  set mask($core.String v) {
-    $_setString(1, v);
-  }
-
+  set mask($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasMask() => $_has(1);
   @$pb.TagNumber(2)
@@ -101,28 +90,24 @@
 class AllInfoPB extends $pb.GeneratedMessage {
   factory AllInfoPB({
     ProgramInfoPB? program,
-    $pb.PbMap<$core.String, InfoPB>? allInfos,
+    $core.Iterable<$core.MapEntry<$core.String, InfoPB>>? allInfos,
     $core.Iterable<LibraryDeferredImportsPB>? deferredImports,
   }) {
-    final $result = create();
-    if (program != null) {
-      $result.program = program;
-    }
-    if (allInfos != null) {
-      $result.allInfos.addAll(allInfos);
-    }
-    if (deferredImports != null) {
-      $result.deferredImports.addAll(deferredImports);
-    }
-    return $result;
+    final result = create();
+    if (program != null) result.program = program;
+    if (allInfos != null) result.allInfos.addEntries(allInfos);
+    if (deferredImports != null) result.deferredImports.addAll(deferredImports);
+    return result;
   }
-  AllInfoPB._() : super();
-  factory AllInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory AllInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  AllInfoPB._();
+
+  factory AllInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory AllInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'AllInfoPB',
@@ -138,27 +123,23 @@
         valueCreator: InfoPB.create,
         valueDefaultOrMaker: InfoPB.getDefault,
         packageName: const $pb.PackageName('dart2js_info.proto'))
-    ..pc<LibraryDeferredImportsPB>(
-        3, _omitFieldNames ? '' : 'deferredImports', $pb.PbFieldType.PM,
+    ..pPM<LibraryDeferredImportsPB>(3, _omitFieldNames ? '' : 'deferredImports',
         subBuilder: LibraryDeferredImportsPB.create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  AllInfoPB clone() => AllInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  AllInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   AllInfoPB copyWith(void Function(AllInfoPB) updates) =>
       super.copyWith((message) => updates(message as AllInfoPB)) as AllInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static AllInfoPB create() => AllInfoPB._();
+  @$core.override
   AllInfoPB createEmptyInstance() => create();
-  static $pb.PbList<AllInfoPB> createRepeated() => $pb.PbList<AllInfoPB>();
   @$core.pragma('dart2js:noInline')
   static AllInfoPB getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AllInfoPB>(create);
@@ -168,10 +149,7 @@
   @$pb.TagNumber(1)
   ProgramInfoPB get program => $_getN(0);
   @$pb.TagNumber(1)
-  set program(ProgramInfoPB v) {
-    $_setField(1, v);
-  }
-
+  set program(ProgramInfoPB value) => $_setField(1, value);
   @$pb.TagNumber(1)
   $core.bool hasProgram() => $_has(0);
   @$pb.TagNumber(1)
@@ -225,67 +203,35 @@
     ClosureInfoPB? closureInfo,
     ClassTypeInfoPB? classTypeInfo,
   }) {
-    final $result = create();
-    if (name != null) {
-      $result.name = name;
-    }
-    if (id != null) {
-      $result.id = id;
-    }
-    if (serializedId != null) {
-      $result.serializedId = serializedId;
-    }
-    if (coverageId != null) {
-      $result.coverageId = coverageId;
-    }
-    if (size != null) {
-      $result.size = size;
-    }
-    if (parentId != null) {
-      $result.parentId = parentId;
-    }
-    if (uses != null) {
-      $result.uses.addAll(uses);
-    }
-    if (outputUnitId != null) {
-      $result.outputUnitId = outputUnitId;
-    }
-    if (libraryInfo != null) {
-      $result.libraryInfo = libraryInfo;
-    }
-    if (classInfo != null) {
-      $result.classInfo = classInfo;
-    }
-    if (functionInfo != null) {
-      $result.functionInfo = functionInfo;
-    }
-    if (fieldInfo != null) {
-      $result.fieldInfo = fieldInfo;
-    }
-    if (constantInfo != null) {
-      $result.constantInfo = constantInfo;
-    }
-    if (outputUnitInfo != null) {
-      $result.outputUnitInfo = outputUnitInfo;
-    }
-    if (typedefInfo != null) {
-      $result.typedefInfo = typedefInfo;
-    }
-    if (closureInfo != null) {
-      $result.closureInfo = closureInfo;
-    }
-    if (classTypeInfo != null) {
-      $result.classTypeInfo = classTypeInfo;
-    }
-    return $result;
+    final result = create();
+    if (name != null) result.name = name;
+    if (id != null) result.id = id;
+    if (serializedId != null) result.serializedId = serializedId;
+    if (coverageId != null) result.coverageId = coverageId;
+    if (size != null) result.size = size;
+    if (parentId != null) result.parentId = parentId;
+    if (uses != null) result.uses.addAll(uses);
+    if (outputUnitId != null) result.outputUnitId = outputUnitId;
+    if (libraryInfo != null) result.libraryInfo = libraryInfo;
+    if (classInfo != null) result.classInfo = classInfo;
+    if (functionInfo != null) result.functionInfo = functionInfo;
+    if (fieldInfo != null) result.fieldInfo = fieldInfo;
+    if (constantInfo != null) result.constantInfo = constantInfo;
+    if (outputUnitInfo != null) result.outputUnitInfo = outputUnitInfo;
+    if (typedefInfo != null) result.typedefInfo = typedefInfo;
+    if (closureInfo != null) result.closureInfo = closureInfo;
+    if (classTypeInfo != null) result.classTypeInfo = classTypeInfo;
+    return result;
   }
-  InfoPB._() : super();
-  factory InfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory InfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  InfoPB._();
+
+  factory InfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory InfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static const $core.Map<$core.int, InfoPB_Concrete> _InfoPB_ConcreteByTag = {
     100: InfoPB_Concrete.libraryInfo,
@@ -306,12 +252,12 @@
       createEmptyInstance: create)
     ..oo(0, [100, 101, 102, 103, 104, 105, 106, 107, 108])
     ..aOS(1, _omitFieldNames ? '' : 'name')
-    ..a<$core.int>(2, _omitFieldNames ? '' : 'id', $pb.PbFieldType.O3)
+    ..aI(2, _omitFieldNames ? '' : 'id')
     ..aOS(3, _omitFieldNames ? '' : 'serializedId')
     ..aOS(4, _omitFieldNames ? '' : 'coverageId')
-    ..a<$core.int>(5, _omitFieldNames ? '' : 'size', $pb.PbFieldType.O3)
+    ..aI(5, _omitFieldNames ? '' : 'size')
     ..aOS(6, _omitFieldNames ? '' : 'parentId')
-    ..pc<DependencyInfoPB>(7, _omitFieldNames ? '' : 'uses', $pb.PbFieldType.PM,
+    ..pPM<DependencyInfoPB>(7, _omitFieldNames ? '' : 'uses',
         subBuilder: DependencyInfoPB.create)
     ..aOS(8, _omitFieldNames ? '' : 'outputUnitId')
     ..aOM<LibraryInfoPB>(100, _omitFieldNames ? '' : 'libraryInfo',
@@ -334,38 +280,50 @@
         subBuilder: ClassTypeInfoPB.create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  InfoPB clone() => InfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  InfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   InfoPB copyWith(void Function(InfoPB) updates) =>
       super.copyWith((message) => updates(message as InfoPB)) as InfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static InfoPB create() => InfoPB._();
+  @$core.override
   InfoPB createEmptyInstance() => create();
-  static $pb.PbList<InfoPB> createRepeated() => $pb.PbList<InfoPB>();
   @$core.pragma('dart2js:noInline')
   static InfoPB getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<InfoPB>(create);
   static InfoPB? _defaultInstance;
 
+  @$pb.TagNumber(100)
+  @$pb.TagNumber(101)
+  @$pb.TagNumber(102)
+  @$pb.TagNumber(103)
+  @$pb.TagNumber(104)
+  @$pb.TagNumber(105)
+  @$pb.TagNumber(106)
+  @$pb.TagNumber(107)
+  @$pb.TagNumber(108)
   InfoPB_Concrete whichConcrete() => _InfoPB_ConcreteByTag[$_whichOneof(0)]!;
+  @$pb.TagNumber(100)
+  @$pb.TagNumber(101)
+  @$pb.TagNumber(102)
+  @$pb.TagNumber(103)
+  @$pb.TagNumber(104)
+  @$pb.TagNumber(105)
+  @$pb.TagNumber(106)
+  @$pb.TagNumber(107)
+  @$pb.TagNumber(108)
   void clearConcrete() => $_clearField($_whichOneof(0));
 
   /// * Name of the element associated with this info.
   @$pb.TagNumber(1)
   $core.String get name => $_getSZ(0);
   @$pb.TagNumber(1)
-  set name($core.String v) {
-    $_setString(0, v);
-  }
-
+  set name($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
@@ -375,10 +333,7 @@
   @$pb.TagNumber(2)
   $core.int get id => $_getIZ(1);
   @$pb.TagNumber(2)
-  set id($core.int v) {
-    $_setSignedInt32(1, v);
-  }
-
+  set id($core.int value) => $_setSignedInt32(1, value);
   @$pb.TagNumber(2)
   $core.bool hasId() => $_has(1);
   @$pb.TagNumber(2)
@@ -388,10 +343,7 @@
   @$pb.TagNumber(3)
   $core.String get serializedId => $_getSZ(2);
   @$pb.TagNumber(3)
-  set serializedId($core.String v) {
-    $_setString(2, v);
-  }
-
+  set serializedId($core.String value) => $_setString(2, value);
   @$pb.TagNumber(3)
   $core.bool hasSerializedId() => $_has(2);
   @$pb.TagNumber(3)
@@ -401,10 +353,7 @@
   @$pb.TagNumber(4)
   $core.String get coverageId => $_getSZ(3);
   @$pb.TagNumber(4)
-  set coverageId($core.String v) {
-    $_setString(3, v);
-  }
-
+  set coverageId($core.String value) => $_setString(3, value);
   @$pb.TagNumber(4)
   $core.bool hasCoverageId() => $_has(3);
   @$pb.TagNumber(4)
@@ -414,10 +363,7 @@
   @$pb.TagNumber(5)
   $core.int get size => $_getIZ(4);
   @$pb.TagNumber(5)
-  set size($core.int v) {
-    $_setSignedInt32(4, v);
-  }
-
+  set size($core.int value) => $_setSignedInt32(4, value);
   @$pb.TagNumber(5)
   $core.bool hasSize() => $_has(4);
   @$pb.TagNumber(5)
@@ -427,10 +373,7 @@
   @$pb.TagNumber(6)
   $core.String get parentId => $_getSZ(5);
   @$pb.TagNumber(6)
-  set parentId($core.String v) {
-    $_setString(5, v);
-  }
-
+  set parentId($core.String value) => $_setString(5, value);
   @$pb.TagNumber(6)
   $core.bool hasParentId() => $_has(5);
   @$pb.TagNumber(6)
@@ -444,10 +387,7 @@
   @$pb.TagNumber(8)
   $core.String get outputUnitId => $_getSZ(7);
   @$pb.TagNumber(8)
-  set outputUnitId($core.String v) {
-    $_setString(7, v);
-  }
-
+  set outputUnitId($core.String value) => $_setString(7, value);
   @$pb.TagNumber(8)
   $core.bool hasOutputUnitId() => $_has(7);
   @$pb.TagNumber(8)
@@ -457,10 +397,7 @@
   @$pb.TagNumber(100)
   LibraryInfoPB get libraryInfo => $_getN(8);
   @$pb.TagNumber(100)
-  set libraryInfo(LibraryInfoPB v) {
-    $_setField(100, v);
-  }
-
+  set libraryInfo(LibraryInfoPB value) => $_setField(100, value);
   @$pb.TagNumber(100)
   $core.bool hasLibraryInfo() => $_has(8);
   @$pb.TagNumber(100)
@@ -472,10 +409,7 @@
   @$pb.TagNumber(101)
   ClassInfoPB get classInfo => $_getN(9);
   @$pb.TagNumber(101)
-  set classInfo(ClassInfoPB v) {
-    $_setField(101, v);
-  }
-
+  set classInfo(ClassInfoPB value) => $_setField(101, value);
   @$pb.TagNumber(101)
   $core.bool hasClassInfo() => $_has(9);
   @$pb.TagNumber(101)
@@ -487,10 +421,7 @@
   @$pb.TagNumber(102)
   FunctionInfoPB get functionInfo => $_getN(10);
   @$pb.TagNumber(102)
-  set functionInfo(FunctionInfoPB v) {
-    $_setField(102, v);
-  }
-
+  set functionInfo(FunctionInfoPB value) => $_setField(102, value);
   @$pb.TagNumber(102)
   $core.bool hasFunctionInfo() => $_has(10);
   @$pb.TagNumber(102)
@@ -502,10 +433,7 @@
   @$pb.TagNumber(103)
   FieldInfoPB get fieldInfo => $_getN(11);
   @$pb.TagNumber(103)
-  set fieldInfo(FieldInfoPB v) {
-    $_setField(103, v);
-  }
-
+  set fieldInfo(FieldInfoPB value) => $_setField(103, value);
   @$pb.TagNumber(103)
   $core.bool hasFieldInfo() => $_has(11);
   @$pb.TagNumber(103)
@@ -517,10 +445,7 @@
   @$pb.TagNumber(104)
   ConstantInfoPB get constantInfo => $_getN(12);
   @$pb.TagNumber(104)
-  set constantInfo(ConstantInfoPB v) {
-    $_setField(104, v);
-  }
-
+  set constantInfo(ConstantInfoPB value) => $_setField(104, value);
   @$pb.TagNumber(104)
   $core.bool hasConstantInfo() => $_has(12);
   @$pb.TagNumber(104)
@@ -532,10 +457,7 @@
   @$pb.TagNumber(105)
   OutputUnitInfoPB get outputUnitInfo => $_getN(13);
   @$pb.TagNumber(105)
-  set outputUnitInfo(OutputUnitInfoPB v) {
-    $_setField(105, v);
-  }
-
+  set outputUnitInfo(OutputUnitInfoPB value) => $_setField(105, value);
   @$pb.TagNumber(105)
   $core.bool hasOutputUnitInfo() => $_has(13);
   @$pb.TagNumber(105)
@@ -547,10 +469,7 @@
   @$pb.TagNumber(106)
   TypedefInfoPB get typedefInfo => $_getN(14);
   @$pb.TagNumber(106)
-  set typedefInfo(TypedefInfoPB v) {
-    $_setField(106, v);
-  }
-
+  set typedefInfo(TypedefInfoPB value) => $_setField(106, value);
   @$pb.TagNumber(106)
   $core.bool hasTypedefInfo() => $_has(14);
   @$pb.TagNumber(106)
@@ -562,10 +481,7 @@
   @$pb.TagNumber(107)
   ClosureInfoPB get closureInfo => $_getN(15);
   @$pb.TagNumber(107)
-  set closureInfo(ClosureInfoPB v) {
-    $_setField(107, v);
-  }
-
+  set closureInfo(ClosureInfoPB value) => $_setField(107, value);
   @$pb.TagNumber(107)
   $core.bool hasClosureInfo() => $_has(15);
   @$pb.TagNumber(107)
@@ -577,10 +493,7 @@
   @$pb.TagNumber(108)
   ClassTypeInfoPB get classTypeInfo => $_getN(16);
   @$pb.TagNumber(108)
-  set classTypeInfo(ClassTypeInfoPB v) {
-    $_setField(108, v);
-  }
-
+  set classTypeInfo(ClassTypeInfoPB value) => $_setField(108, value);
   @$pb.TagNumber(108)
   $core.bool hasClassTypeInfo() => $_has(16);
   @$pb.TagNumber(108)
@@ -606,55 +519,34 @@
     $core.bool? isMirrorsUsed,
     $core.bool? minified,
   }) {
-    final $result = create();
-    if (entrypointId != null) {
-      $result.entrypointId = entrypointId;
-    }
-    if (size != null) {
-      $result.size = size;
-    }
-    if (dart2jsVersion != null) {
-      $result.dart2jsVersion = dart2jsVersion;
-    }
-    if (compilationMoment != null) {
-      $result.compilationMoment = compilationMoment;
-    }
-    if (compilationDuration != null) {
-      $result.compilationDuration = compilationDuration;
-    }
-    if (toProtoDuration != null) {
-      $result.toProtoDuration = toProtoDuration;
-    }
-    if (dumpInfoDuration != null) {
-      $result.dumpInfoDuration = dumpInfoDuration;
-    }
-    if (noSuchMethodEnabled != null) {
-      $result.noSuchMethodEnabled = noSuchMethodEnabled;
-    }
-    if (isRuntimeTypeUsed != null) {
-      $result.isRuntimeTypeUsed = isRuntimeTypeUsed;
-    }
-    if (isIsolateUsed != null) {
-      $result.isIsolateUsed = isIsolateUsed;
-    }
-    if (isFunctionApplyUsed != null) {
-      $result.isFunctionApplyUsed = isFunctionApplyUsed;
-    }
-    if (isMirrorsUsed != null) {
-      $result.isMirrorsUsed = isMirrorsUsed;
-    }
-    if (minified != null) {
-      $result.minified = minified;
-    }
-    return $result;
+    final result = create();
+    if (entrypointId != null) result.entrypointId = entrypointId;
+    if (size != null) result.size = size;
+    if (dart2jsVersion != null) result.dart2jsVersion = dart2jsVersion;
+    if (compilationMoment != null) result.compilationMoment = compilationMoment;
+    if (compilationDuration != null)
+      result.compilationDuration = compilationDuration;
+    if (toProtoDuration != null) result.toProtoDuration = toProtoDuration;
+    if (dumpInfoDuration != null) result.dumpInfoDuration = dumpInfoDuration;
+    if (noSuchMethodEnabled != null)
+      result.noSuchMethodEnabled = noSuchMethodEnabled;
+    if (isRuntimeTypeUsed != null) result.isRuntimeTypeUsed = isRuntimeTypeUsed;
+    if (isIsolateUsed != null) result.isIsolateUsed = isIsolateUsed;
+    if (isFunctionApplyUsed != null)
+      result.isFunctionApplyUsed = isFunctionApplyUsed;
+    if (isMirrorsUsed != null) result.isMirrorsUsed = isMirrorsUsed;
+    if (minified != null) result.minified = minified;
+    return result;
   }
-  ProgramInfoPB._() : super();
-  factory ProgramInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ProgramInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ProgramInfoPB._();
+
+  factory ProgramInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ProgramInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ProgramInfoPB',
@@ -662,7 +554,7 @@
           const $pb.PackageName(_omitMessageNames ? '' : 'dart2js_info.proto'),
       createEmptyInstance: create)
     ..aOS(1, _omitFieldNames ? '' : 'entrypointId')
-    ..a<$core.int>(2, _omitFieldNames ? '' : 'size', $pb.PbFieldType.O3)
+    ..aI(2, _omitFieldNames ? '' : 'size')
     ..aOS(3, _omitFieldNames ? '' : 'dart2jsVersion')
     ..aInt64(4, _omitFieldNames ? '' : 'compilationMoment')
     ..aInt64(5, _omitFieldNames ? '' : 'compilationDuration')
@@ -676,24 +568,20 @@
     ..aOB(13, _omitFieldNames ? '' : 'minified')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ProgramInfoPB clone() => ProgramInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ProgramInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ProgramInfoPB copyWith(void Function(ProgramInfoPB) updates) =>
       super.copyWith((message) => updates(message as ProgramInfoPB))
           as ProgramInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ProgramInfoPB create() => ProgramInfoPB._();
+  @$core.override
   ProgramInfoPB createEmptyInstance() => create();
-  static $pb.PbList<ProgramInfoPB> createRepeated() =>
-      $pb.PbList<ProgramInfoPB>();
   @$core.pragma('dart2js:noInline')
   static ProgramInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ProgramInfoPB>(create);
@@ -703,10 +591,7 @@
   @$pb.TagNumber(1)
   $core.String get entrypointId => $_getSZ(0);
   @$pb.TagNumber(1)
-  set entrypointId($core.String v) {
-    $_setString(0, v);
-  }
-
+  set entrypointId($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasEntrypointId() => $_has(0);
   @$pb.TagNumber(1)
@@ -716,10 +601,7 @@
   @$pb.TagNumber(2)
   $core.int get size => $_getIZ(1);
   @$pb.TagNumber(2)
-  set size($core.int v) {
-    $_setSignedInt32(1, v);
-  }
-
+  set size($core.int value) => $_setSignedInt32(1, value);
   @$pb.TagNumber(2)
   $core.bool hasSize() => $_has(1);
   @$pb.TagNumber(2)
@@ -729,10 +611,7 @@
   @$pb.TagNumber(3)
   $core.String get dart2jsVersion => $_getSZ(2);
   @$pb.TagNumber(3)
-  set dart2jsVersion($core.String v) {
-    $_setString(2, v);
-  }
-
+  set dart2jsVersion($core.String value) => $_setString(2, value);
   @$pb.TagNumber(3)
   $core.bool hasDart2jsVersion() => $_has(2);
   @$pb.TagNumber(3)
@@ -742,10 +621,7 @@
   @$pb.TagNumber(4)
   $fixnum.Int64 get compilationMoment => $_getI64(3);
   @$pb.TagNumber(4)
-  set compilationMoment($fixnum.Int64 v) {
-    $_setInt64(3, v);
-  }
-
+  set compilationMoment($fixnum.Int64 value) => $_setInt64(3, value);
   @$pb.TagNumber(4)
   $core.bool hasCompilationMoment() => $_has(3);
   @$pb.TagNumber(4)
@@ -755,10 +631,7 @@
   @$pb.TagNumber(5)
   $fixnum.Int64 get compilationDuration => $_getI64(4);
   @$pb.TagNumber(5)
-  set compilationDuration($fixnum.Int64 v) {
-    $_setInt64(4, v);
-  }
-
+  set compilationDuration($fixnum.Int64 value) => $_setInt64(4, value);
   @$pb.TagNumber(5)
   $core.bool hasCompilationDuration() => $_has(4);
   @$pb.TagNumber(5)
@@ -768,10 +641,7 @@
   @$pb.TagNumber(6)
   $fixnum.Int64 get toProtoDuration => $_getI64(5);
   @$pb.TagNumber(6)
-  set toProtoDuration($fixnum.Int64 v) {
-    $_setInt64(5, v);
-  }
-
+  set toProtoDuration($fixnum.Int64 value) => $_setInt64(5, value);
   @$pb.TagNumber(6)
   $core.bool hasToProtoDuration() => $_has(5);
   @$pb.TagNumber(6)
@@ -781,10 +651,7 @@
   @$pb.TagNumber(7)
   $fixnum.Int64 get dumpInfoDuration => $_getI64(6);
   @$pb.TagNumber(7)
-  set dumpInfoDuration($fixnum.Int64 v) {
-    $_setInt64(6, v);
-  }
-
+  set dumpInfoDuration($fixnum.Int64 value) => $_setInt64(6, value);
   @$pb.TagNumber(7)
   $core.bool hasDumpInfoDuration() => $_has(6);
   @$pb.TagNumber(7)
@@ -794,10 +661,7 @@
   @$pb.TagNumber(8)
   $core.bool get noSuchMethodEnabled => $_getBF(7);
   @$pb.TagNumber(8)
-  set noSuchMethodEnabled($core.bool v) {
-    $_setBool(7, v);
-  }
-
+  set noSuchMethodEnabled($core.bool value) => $_setBool(7, value);
   @$pb.TagNumber(8)
   $core.bool hasNoSuchMethodEnabled() => $_has(7);
   @$pb.TagNumber(8)
@@ -807,10 +671,7 @@
   @$pb.TagNumber(9)
   $core.bool get isRuntimeTypeUsed => $_getBF(8);
   @$pb.TagNumber(9)
-  set isRuntimeTypeUsed($core.bool v) {
-    $_setBool(8, v);
-  }
-
+  set isRuntimeTypeUsed($core.bool value) => $_setBool(8, value);
   @$pb.TagNumber(9)
   $core.bool hasIsRuntimeTypeUsed() => $_has(8);
   @$pb.TagNumber(9)
@@ -820,10 +681,7 @@
   @$pb.TagNumber(10)
   $core.bool get isIsolateUsed => $_getBF(9);
   @$pb.TagNumber(10)
-  set isIsolateUsed($core.bool v) {
-    $_setBool(9, v);
-  }
-
+  set isIsolateUsed($core.bool value) => $_setBool(9, value);
   @$pb.TagNumber(10)
   $core.bool hasIsIsolateUsed() => $_has(9);
   @$pb.TagNumber(10)
@@ -833,10 +691,7 @@
   @$pb.TagNumber(11)
   $core.bool get isFunctionApplyUsed => $_getBF(10);
   @$pb.TagNumber(11)
-  set isFunctionApplyUsed($core.bool v) {
-    $_setBool(10, v);
-  }
-
+  set isFunctionApplyUsed($core.bool value) => $_setBool(10, value);
   @$pb.TagNumber(11)
   $core.bool hasIsFunctionApplyUsed() => $_has(10);
   @$pb.TagNumber(11)
@@ -846,10 +701,7 @@
   @$pb.TagNumber(12)
   $core.bool get isMirrorsUsed => $_getBF(11);
   @$pb.TagNumber(12)
-  set isMirrorsUsed($core.bool v) {
-    $_setBool(11, v);
-  }
-
+  set isMirrorsUsed($core.bool value) => $_setBool(11, value);
   @$pb.TagNumber(12)
   $core.bool hasIsMirrorsUsed() => $_has(11);
   @$pb.TagNumber(12)
@@ -859,10 +711,7 @@
   @$pb.TagNumber(13)
   $core.bool get minified => $_getBF(12);
   @$pb.TagNumber(13)
-  set minified($core.bool v) {
-    $_setBool(12, v);
-  }
-
+  set minified($core.bool value) => $_setBool(12, value);
   @$pb.TagNumber(13)
   $core.bool hasMinified() => $_has(12);
   @$pb.TagNumber(13)
@@ -875,22 +724,20 @@
     $core.String? uri,
     $core.Iterable<$core.String>? childrenIds,
   }) {
-    final $result = create();
-    if (uri != null) {
-      $result.uri = uri;
-    }
-    if (childrenIds != null) {
-      $result.childrenIds.addAll(childrenIds);
-    }
-    return $result;
+    final result = create();
+    if (uri != null) result.uri = uri;
+    if (childrenIds != null) result.childrenIds.addAll(childrenIds);
+    return result;
   }
-  LibraryInfoPB._() : super();
-  factory LibraryInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory LibraryInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  LibraryInfoPB._();
+
+  factory LibraryInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory LibraryInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'LibraryInfoPB',
@@ -901,24 +748,20 @@
     ..pPS(2, _omitFieldNames ? '' : 'childrenIds')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  LibraryInfoPB clone() => LibraryInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  LibraryInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   LibraryInfoPB copyWith(void Function(LibraryInfoPB) updates) =>
       super.copyWith((message) => updates(message as LibraryInfoPB))
           as LibraryInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static LibraryInfoPB create() => LibraryInfoPB._();
+  @$core.override
   LibraryInfoPB createEmptyInstance() => create();
-  static $pb.PbList<LibraryInfoPB> createRepeated() =>
-      $pb.PbList<LibraryInfoPB>();
   @$core.pragma('dart2js:noInline')
   static LibraryInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<LibraryInfoPB>(create);
@@ -928,10 +771,7 @@
   @$pb.TagNumber(1)
   $core.String get uri => $_getSZ(0);
   @$pb.TagNumber(1)
-  set uri($core.String v) {
-    $_setString(0, v);
-  }
-
+  set uri($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasUri() => $_has(0);
   @$pb.TagNumber(1)
@@ -950,19 +790,19 @@
   factory OutputUnitInfoPB({
     $core.Iterable<$core.String>? imports,
   }) {
-    final $result = create();
-    if (imports != null) {
-      $result.imports.addAll(imports);
-    }
-    return $result;
+    final result = create();
+    if (imports != null) result.imports.addAll(imports);
+    return result;
   }
-  OutputUnitInfoPB._() : super();
-  factory OutputUnitInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory OutputUnitInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  OutputUnitInfoPB._();
+
+  factory OutputUnitInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory OutputUnitInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'OutputUnitInfoPB',
@@ -972,24 +812,20 @@
     ..pPS(1, _omitFieldNames ? '' : 'imports')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  OutputUnitInfoPB clone() => OutputUnitInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  OutputUnitInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   OutputUnitInfoPB copyWith(void Function(OutputUnitInfoPB) updates) =>
       super.copyWith((message) => updates(message as OutputUnitInfoPB))
           as OutputUnitInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static OutputUnitInfoPB create() => OutputUnitInfoPB._();
+  @$core.override
   OutputUnitInfoPB createEmptyInstance() => create();
-  static $pb.PbList<OutputUnitInfoPB> createRepeated() =>
-      $pb.PbList<OutputUnitInfoPB>();
   @$core.pragma('dart2js:noInline')
   static OutputUnitInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<OutputUnitInfoPB>(create);
@@ -1006,22 +842,20 @@
     $core.bool? isAbstract,
     $core.Iterable<$core.String>? childrenIds,
   }) {
-    final $result = create();
-    if (isAbstract != null) {
-      $result.isAbstract = isAbstract;
-    }
-    if (childrenIds != null) {
-      $result.childrenIds.addAll(childrenIds);
-    }
-    return $result;
+    final result = create();
+    if (isAbstract != null) result.isAbstract = isAbstract;
+    if (childrenIds != null) result.childrenIds.addAll(childrenIds);
+    return result;
   }
-  ClassInfoPB._() : super();
-  factory ClassInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ClassInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ClassInfoPB._();
+
+  factory ClassInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ClassInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ClassInfoPB',
@@ -1032,23 +866,20 @@
     ..pPS(2, _omitFieldNames ? '' : 'childrenIds')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ClassInfoPB clone() => ClassInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ClassInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ClassInfoPB copyWith(void Function(ClassInfoPB) updates) =>
       super.copyWith((message) => updates(message as ClassInfoPB))
           as ClassInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ClassInfoPB create() => ClassInfoPB._();
+  @$core.override
   ClassInfoPB createEmptyInstance() => create();
-  static $pb.PbList<ClassInfoPB> createRepeated() => $pb.PbList<ClassInfoPB>();
   @$core.pragma('dart2js:noInline')
   static ClassInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClassInfoPB>(create);
@@ -1058,10 +889,7 @@
   @$pb.TagNumber(1)
   $core.bool get isAbstract => $_getBF(0);
   @$pb.TagNumber(1)
-  set isAbstract($core.bool v) {
-    $_setBool(0, v);
-  }
-
+  set isAbstract($core.bool value) => $_setBool(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIsAbstract() => $_has(0);
   @$pb.TagNumber(1)
@@ -1075,13 +903,15 @@
 /// * Information about a class type element.
 class ClassTypeInfoPB extends $pb.GeneratedMessage {
   factory ClassTypeInfoPB() => create();
-  ClassTypeInfoPB._() : super();
-  factory ClassTypeInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ClassTypeInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ClassTypeInfoPB._();
+
+  factory ClassTypeInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ClassTypeInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ClassTypeInfoPB',
@@ -1090,24 +920,20 @@
       createEmptyInstance: create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ClassTypeInfoPB clone() => ClassTypeInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ClassTypeInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ClassTypeInfoPB copyWith(void Function(ClassTypeInfoPB) updates) =>
       super.copyWith((message) => updates(message as ClassTypeInfoPB))
           as ClassTypeInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ClassTypeInfoPB create() => ClassTypeInfoPB._();
+  @$core.override
   ClassTypeInfoPB createEmptyInstance() => create();
-  static $pb.PbList<ClassTypeInfoPB> createRepeated() =>
-      $pb.PbList<ClassTypeInfoPB>();
   @$core.pragma('dart2js:noInline')
   static ClassTypeInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClassTypeInfoPB>(create);
@@ -1119,19 +945,19 @@
   factory ConstantInfoPB({
     $core.String? code,
   }) {
-    final $result = create();
-    if (code != null) {
-      $result.code = code;
-    }
-    return $result;
+    final result = create();
+    if (code != null) result.code = code;
+    return result;
   }
-  ConstantInfoPB._() : super();
-  factory ConstantInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ConstantInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ConstantInfoPB._();
+
+  factory ConstantInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ConstantInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ConstantInfoPB',
@@ -1141,24 +967,20 @@
     ..aOS(1, _omitFieldNames ? '' : 'code')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ConstantInfoPB clone() => ConstantInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ConstantInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ConstantInfoPB copyWith(void Function(ConstantInfoPB) updates) =>
       super.copyWith((message) => updates(message as ConstantInfoPB))
           as ConstantInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ConstantInfoPB create() => ConstantInfoPB._();
+  @$core.override
   ConstantInfoPB createEmptyInstance() => create();
-  static $pb.PbList<ConstantInfoPB> createRepeated() =>
-      $pb.PbList<ConstantInfoPB>();
   @$core.pragma('dart2js:noInline')
   static ConstantInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ConstantInfoPB>(create);
@@ -1168,10 +990,7 @@
   @$pb.TagNumber(1)
   $core.String get code => $_getSZ(0);
   @$pb.TagNumber(1)
-  set code($core.String v) {
-    $_setString(0, v);
-  }
-
+  set code($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasCode() => $_has(0);
   @$pb.TagNumber(1)
@@ -1188,34 +1007,24 @@
     $core.bool? isConst,
     $core.String? initializerId,
   }) {
-    final $result = create();
-    if (type != null) {
-      $result.type = type;
-    }
-    if (inferredType != null) {
-      $result.inferredType = inferredType;
-    }
-    if (childrenIds != null) {
-      $result.childrenIds.addAll(childrenIds);
-    }
-    if (code != null) {
-      $result.code = code;
-    }
-    if (isConst != null) {
-      $result.isConst = isConst;
-    }
-    if (initializerId != null) {
-      $result.initializerId = initializerId;
-    }
-    return $result;
+    final result = create();
+    if (type != null) result.type = type;
+    if (inferredType != null) result.inferredType = inferredType;
+    if (childrenIds != null) result.childrenIds.addAll(childrenIds);
+    if (code != null) result.code = code;
+    if (isConst != null) result.isConst = isConst;
+    if (initializerId != null) result.initializerId = initializerId;
+    return result;
   }
-  FieldInfoPB._() : super();
-  factory FieldInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory FieldInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  FieldInfoPB._();
+
+  factory FieldInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory FieldInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'FieldInfoPB',
@@ -1230,23 +1039,20 @@
     ..aOS(6, _omitFieldNames ? '' : 'initializerId')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  FieldInfoPB clone() => FieldInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  FieldInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   FieldInfoPB copyWith(void Function(FieldInfoPB) updates) =>
       super.copyWith((message) => updates(message as FieldInfoPB))
           as FieldInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static FieldInfoPB create() => FieldInfoPB._();
+  @$core.override
   FieldInfoPB createEmptyInstance() => create();
-  static $pb.PbList<FieldInfoPB> createRepeated() => $pb.PbList<FieldInfoPB>();
   @$core.pragma('dart2js:noInline')
   static FieldInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<FieldInfoPB>(create);
@@ -1256,10 +1062,7 @@
   @$pb.TagNumber(1)
   $core.String get type => $_getSZ(0);
   @$pb.TagNumber(1)
-  set type($core.String v) {
-    $_setString(0, v);
-  }
-
+  set type($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasType() => $_has(0);
   @$pb.TagNumber(1)
@@ -1269,10 +1072,7 @@
   @$pb.TagNumber(2)
   $core.String get inferredType => $_getSZ(1);
   @$pb.TagNumber(2)
-  set inferredType($core.String v) {
-    $_setString(1, v);
-  }
-
+  set inferredType($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasInferredType() => $_has(1);
   @$pb.TagNumber(2)
@@ -1286,10 +1086,7 @@
   @$pb.TagNumber(4)
   $core.String get code => $_getSZ(3);
   @$pb.TagNumber(4)
-  set code($core.String v) {
-    $_setString(3, v);
-  }
-
+  set code($core.String value) => $_setString(3, value);
   @$pb.TagNumber(4)
   $core.bool hasCode() => $_has(3);
   @$pb.TagNumber(4)
@@ -1299,10 +1096,7 @@
   @$pb.TagNumber(5)
   $core.bool get isConst => $_getBF(4);
   @$pb.TagNumber(5)
-  set isConst($core.bool v) {
-    $_setBool(4, v);
-  }
-
+  set isConst($core.bool value) => $_setBool(4, value);
   @$pb.TagNumber(5)
   $core.bool hasIsConst() => $_has(4);
   @$pb.TagNumber(5)
@@ -1312,10 +1106,7 @@
   @$pb.TagNumber(6)
   $core.String get initializerId => $_getSZ(5);
   @$pb.TagNumber(6)
-  set initializerId($core.String v) {
-    $_setString(5, v);
-  }
-
+  set initializerId($core.String value) => $_setString(5, value);
   @$pb.TagNumber(6)
   $core.bool hasInitializerId() => $_has(5);
   @$pb.TagNumber(6)
@@ -1327,19 +1118,19 @@
   factory TypedefInfoPB({
     $core.String? type,
   }) {
-    final $result = create();
-    if (type != null) {
-      $result.type = type;
-    }
-    return $result;
+    final result = create();
+    if (type != null) result.type = type;
+    return result;
   }
-  TypedefInfoPB._() : super();
-  factory TypedefInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory TypedefInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  TypedefInfoPB._();
+
+  factory TypedefInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory TypedefInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'TypedefInfoPB',
@@ -1349,24 +1140,20 @@
     ..aOS(1, _omitFieldNames ? '' : 'type')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  TypedefInfoPB clone() => TypedefInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  TypedefInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   TypedefInfoPB copyWith(void Function(TypedefInfoPB) updates) =>
       super.copyWith((message) => updates(message as TypedefInfoPB))
           as TypedefInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static TypedefInfoPB create() => TypedefInfoPB._();
+  @$core.override
   TypedefInfoPB createEmptyInstance() => create();
-  static $pb.PbList<TypedefInfoPB> createRepeated() =>
-      $pb.PbList<TypedefInfoPB>();
   @$core.pragma('dart2js:noInline')
   static TypedefInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<TypedefInfoPB>(create);
@@ -1376,10 +1163,7 @@
   @$pb.TagNumber(1)
   $core.String get type => $_getSZ(0);
   @$pb.TagNumber(1)
-  set type($core.String v) {
-    $_setString(0, v);
-  }
-
+  set type($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasType() => $_has(0);
   @$pb.TagNumber(1)
@@ -1394,28 +1178,22 @@
     $core.bool? isFactory,
     $core.bool? isExternal,
   }) {
-    final $result = create();
-    if (isStatic != null) {
-      $result.isStatic = isStatic;
-    }
-    if (isConst != null) {
-      $result.isConst = isConst;
-    }
-    if (isFactory != null) {
-      $result.isFactory = isFactory;
-    }
-    if (isExternal != null) {
-      $result.isExternal = isExternal;
-    }
-    return $result;
+    final result = create();
+    if (isStatic != null) result.isStatic = isStatic;
+    if (isConst != null) result.isConst = isConst;
+    if (isFactory != null) result.isFactory = isFactory;
+    if (isExternal != null) result.isExternal = isExternal;
+    return result;
   }
-  FunctionModifiersPB._() : super();
-  factory FunctionModifiersPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory FunctionModifiersPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  FunctionModifiersPB._();
+
+  factory FunctionModifiersPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory FunctionModifiersPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'FunctionModifiersPB',
@@ -1428,24 +1206,20 @@
     ..aOB(4, _omitFieldNames ? '' : 'isExternal')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  FunctionModifiersPB clone() => FunctionModifiersPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  FunctionModifiersPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   FunctionModifiersPB copyWith(void Function(FunctionModifiersPB) updates) =>
       super.copyWith((message) => updates(message as FunctionModifiersPB))
           as FunctionModifiersPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static FunctionModifiersPB create() => FunctionModifiersPB._();
+  @$core.override
   FunctionModifiersPB createEmptyInstance() => create();
-  static $pb.PbList<FunctionModifiersPB> createRepeated() =>
-      $pb.PbList<FunctionModifiersPB>();
   @$core.pragma('dart2js:noInline')
   static FunctionModifiersPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<FunctionModifiersPB>(create);
@@ -1455,10 +1229,7 @@
   @$pb.TagNumber(1)
   $core.bool get isStatic => $_getBF(0);
   @$pb.TagNumber(1)
-  set isStatic($core.bool v) {
-    $_setBool(0, v);
-  }
-
+  set isStatic($core.bool value) => $_setBool(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIsStatic() => $_has(0);
   @$pb.TagNumber(1)
@@ -1468,10 +1239,7 @@
   @$pb.TagNumber(2)
   $core.bool get isConst => $_getBF(1);
   @$pb.TagNumber(2)
-  set isConst($core.bool v) {
-    $_setBool(1, v);
-  }
-
+  set isConst($core.bool value) => $_setBool(1, value);
   @$pb.TagNumber(2)
   $core.bool hasIsConst() => $_has(1);
   @$pb.TagNumber(2)
@@ -1481,10 +1249,7 @@
   @$pb.TagNumber(3)
   $core.bool get isFactory => $_getBF(2);
   @$pb.TagNumber(3)
-  set isFactory($core.bool v) {
-    $_setBool(2, v);
-  }
-
+  set isFactory($core.bool value) => $_setBool(2, value);
   @$pb.TagNumber(3)
   $core.bool hasIsFactory() => $_has(2);
   @$pb.TagNumber(3)
@@ -1494,10 +1259,7 @@
   @$pb.TagNumber(4)
   $core.bool get isExternal => $_getBF(3);
   @$pb.TagNumber(4)
-  set isExternal($core.bool v) {
-    $_setBool(3, v);
-  }
-
+  set isExternal($core.bool value) => $_setBool(3, value);
   @$pb.TagNumber(4)
   $core.bool hasIsExternal() => $_has(3);
   @$pb.TagNumber(4)
@@ -1511,25 +1273,21 @@
     $core.String? type,
     $core.String? declaredType,
   }) {
-    final $result = create();
-    if (name != null) {
-      $result.name = name;
-    }
-    if (type != null) {
-      $result.type = type;
-    }
-    if (declaredType != null) {
-      $result.declaredType = declaredType;
-    }
-    return $result;
+    final result = create();
+    if (name != null) result.name = name;
+    if (type != null) result.type = type;
+    if (declaredType != null) result.declaredType = declaredType;
+    return result;
   }
-  ParameterInfoPB._() : super();
-  factory ParameterInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ParameterInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ParameterInfoPB._();
+
+  factory ParameterInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ParameterInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ParameterInfoPB',
@@ -1541,24 +1299,20 @@
     ..aOS(3, _omitFieldNames ? '' : 'declaredType')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ParameterInfoPB clone() => ParameterInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ParameterInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ParameterInfoPB copyWith(void Function(ParameterInfoPB) updates) =>
       super.copyWith((message) => updates(message as ParameterInfoPB))
           as ParameterInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ParameterInfoPB create() => ParameterInfoPB._();
+  @$core.override
   ParameterInfoPB createEmptyInstance() => create();
-  static $pb.PbList<ParameterInfoPB> createRepeated() =>
-      $pb.PbList<ParameterInfoPB>();
   @$core.pragma('dart2js:noInline')
   static ParameterInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ParameterInfoPB>(create);
@@ -1567,10 +1321,7 @@
   @$pb.TagNumber(1)
   $core.String get name => $_getSZ(0);
   @$pb.TagNumber(1)
-  set name($core.String v) {
-    $_setString(0, v);
-  }
-
+  set name($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasName() => $_has(0);
   @$pb.TagNumber(1)
@@ -1579,10 +1330,7 @@
   @$pb.TagNumber(2)
   $core.String get type => $_getSZ(1);
   @$pb.TagNumber(2)
-  set type($core.String v) {
-    $_setString(1, v);
-  }
-
+  set type($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasType() => $_has(1);
   @$pb.TagNumber(2)
@@ -1591,10 +1339,7 @@
   @$pb.TagNumber(3)
   $core.String get declaredType => $_getSZ(2);
   @$pb.TagNumber(3)
-  set declaredType($core.String v) {
-    $_setString(2, v);
-  }
-
+  set declaredType($core.String value) => $_setString(2, value);
   @$pb.TagNumber(3)
   $core.bool hasDeclaredType() => $_has(2);
   @$pb.TagNumber(3)
@@ -1613,40 +1358,27 @@
     $core.int? inlinedCount,
     $core.String? code,
   }) {
-    final $result = create();
-    if (functionModifiers != null) {
-      $result.functionModifiers = functionModifiers;
-    }
-    if (childrenIds != null) {
-      $result.childrenIds.addAll(childrenIds);
-    }
-    if (returnType != null) {
-      $result.returnType = returnType;
-    }
-    if (inferredReturnType != null) {
-      $result.inferredReturnType = inferredReturnType;
-    }
-    if (parameters != null) {
-      $result.parameters.addAll(parameters);
-    }
-    if (sideEffects != null) {
-      $result.sideEffects = sideEffects;
-    }
-    if (inlinedCount != null) {
-      $result.inlinedCount = inlinedCount;
-    }
-    if (code != null) {
-      $result.code = code;
-    }
-    return $result;
+    final result = create();
+    if (functionModifiers != null) result.functionModifiers = functionModifiers;
+    if (childrenIds != null) result.childrenIds.addAll(childrenIds);
+    if (returnType != null) result.returnType = returnType;
+    if (inferredReturnType != null)
+      result.inferredReturnType = inferredReturnType;
+    if (parameters != null) result.parameters.addAll(parameters);
+    if (sideEffects != null) result.sideEffects = sideEffects;
+    if (inlinedCount != null) result.inlinedCount = inlinedCount;
+    if (code != null) result.code = code;
+    return result;
   }
-  FunctionInfoPB._() : super();
-  factory FunctionInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory FunctionInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  FunctionInfoPB._();
+
+  factory FunctionInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory FunctionInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'FunctionInfoPB',
@@ -1658,32 +1390,27 @@
     ..pPS(2, _omitFieldNames ? '' : 'childrenIds')
     ..aOS(3, _omitFieldNames ? '' : 'returnType')
     ..aOS(4, _omitFieldNames ? '' : 'inferredReturnType')
-    ..pc<ParameterInfoPB>(
-        5, _omitFieldNames ? '' : 'parameters', $pb.PbFieldType.PM,
+    ..pPM<ParameterInfoPB>(5, _omitFieldNames ? '' : 'parameters',
         subBuilder: ParameterInfoPB.create)
     ..aOS(6, _omitFieldNames ? '' : 'sideEffects')
-    ..a<$core.int>(7, _omitFieldNames ? '' : 'inlinedCount', $pb.PbFieldType.O3)
+    ..aI(7, _omitFieldNames ? '' : 'inlinedCount')
     ..aOS(8, _omitFieldNames ? '' : 'code')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  FunctionInfoPB clone() => FunctionInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  FunctionInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   FunctionInfoPB copyWith(void Function(FunctionInfoPB) updates) =>
       super.copyWith((message) => updates(message as FunctionInfoPB))
           as FunctionInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static FunctionInfoPB create() => FunctionInfoPB._();
+  @$core.override
   FunctionInfoPB createEmptyInstance() => create();
-  static $pb.PbList<FunctionInfoPB> createRepeated() =>
-      $pb.PbList<FunctionInfoPB>();
   @$core.pragma('dart2js:noInline')
   static FunctionInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<FunctionInfoPB>(create);
@@ -1693,10 +1420,7 @@
   @$pb.TagNumber(1)
   FunctionModifiersPB get functionModifiers => $_getN(0);
   @$pb.TagNumber(1)
-  set functionModifiers(FunctionModifiersPB v) {
-    $_setField(1, v);
-  }
-
+  set functionModifiers(FunctionModifiersPB value) => $_setField(1, value);
   @$pb.TagNumber(1)
   $core.bool hasFunctionModifiers() => $_has(0);
   @$pb.TagNumber(1)
@@ -1712,10 +1436,7 @@
   @$pb.TagNumber(3)
   $core.String get returnType => $_getSZ(2);
   @$pb.TagNumber(3)
-  set returnType($core.String v) {
-    $_setString(2, v);
-  }
-
+  set returnType($core.String value) => $_setString(2, value);
   @$pb.TagNumber(3)
   $core.bool hasReturnType() => $_has(2);
   @$pb.TagNumber(3)
@@ -1725,10 +1446,7 @@
   @$pb.TagNumber(4)
   $core.String get inferredReturnType => $_getSZ(3);
   @$pb.TagNumber(4)
-  set inferredReturnType($core.String v) {
-    $_setString(3, v);
-  }
-
+  set inferredReturnType($core.String value) => $_setString(3, value);
   @$pb.TagNumber(4)
   $core.bool hasInferredReturnType() => $_has(3);
   @$pb.TagNumber(4)
@@ -1742,10 +1460,7 @@
   @$pb.TagNumber(6)
   $core.String get sideEffects => $_getSZ(5);
   @$pb.TagNumber(6)
-  set sideEffects($core.String v) {
-    $_setString(5, v);
-  }
-
+  set sideEffects($core.String value) => $_setString(5, value);
   @$pb.TagNumber(6)
   $core.bool hasSideEffects() => $_has(5);
   @$pb.TagNumber(6)
@@ -1755,10 +1470,7 @@
   @$pb.TagNumber(7)
   $core.int get inlinedCount => $_getIZ(6);
   @$pb.TagNumber(7)
-  set inlinedCount($core.int v) {
-    $_setSignedInt32(6, v);
-  }
-
+  set inlinedCount($core.int value) => $_setSignedInt32(6, value);
   @$pb.TagNumber(7)
   $core.bool hasInlinedCount() => $_has(6);
   @$pb.TagNumber(7)
@@ -1768,10 +1480,7 @@
   @$pb.TagNumber(8)
   $core.String get code => $_getSZ(7);
   @$pb.TagNumber(8)
-  set code($core.String v) {
-    $_setString(7, v);
-  }
-
+  set code($core.String value) => $_setString(7, value);
   @$pb.TagNumber(8)
   $core.bool hasCode() => $_has(7);
   @$pb.TagNumber(8)
@@ -1783,19 +1492,19 @@
   factory ClosureInfoPB({
     $core.String? functionId,
   }) {
-    final $result = create();
-    if (functionId != null) {
-      $result.functionId = functionId;
-    }
-    return $result;
+    final result = create();
+    if (functionId != null) result.functionId = functionId;
+    return result;
   }
-  ClosureInfoPB._() : super();
-  factory ClosureInfoPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ClosureInfoPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ClosureInfoPB._();
+
+  factory ClosureInfoPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ClosureInfoPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ClosureInfoPB',
@@ -1805,24 +1514,20 @@
     ..aOS(1, _omitFieldNames ? '' : 'functionId')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ClosureInfoPB clone() => ClosureInfoPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ClosureInfoPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ClosureInfoPB copyWith(void Function(ClosureInfoPB) updates) =>
       super.copyWith((message) => updates(message as ClosureInfoPB))
           as ClosureInfoPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ClosureInfoPB create() => ClosureInfoPB._();
+  @$core.override
   ClosureInfoPB createEmptyInstance() => create();
-  static $pb.PbList<ClosureInfoPB> createRepeated() =>
-      $pb.PbList<ClosureInfoPB>();
   @$core.pragma('dart2js:noInline')
   static ClosureInfoPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClosureInfoPB>(create);
@@ -1832,10 +1537,7 @@
   @$pb.TagNumber(1)
   $core.String get functionId => $_getSZ(0);
   @$pb.TagNumber(1)
-  set functionId($core.String v) {
-    $_setString(0, v);
-  }
-
+  set functionId($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasFunctionId() => $_has(0);
   @$pb.TagNumber(1)
@@ -1847,22 +1549,20 @@
     $core.String? prefix,
     $core.Iterable<$core.String>? files,
   }) {
-    final $result = create();
-    if (prefix != null) {
-      $result.prefix = prefix;
-    }
-    if (files != null) {
-      $result.files.addAll(files);
-    }
-    return $result;
+    final result = create();
+    if (prefix != null) result.prefix = prefix;
+    if (files != null) result.files.addAll(files);
+    return result;
   }
-  DeferredImportPB._() : super();
-  factory DeferredImportPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory DeferredImportPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  DeferredImportPB._();
+
+  factory DeferredImportPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory DeferredImportPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'DeferredImportPB',
@@ -1873,24 +1573,20 @@
     ..pPS(2, _omitFieldNames ? '' : 'files')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  DeferredImportPB clone() => DeferredImportPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  DeferredImportPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   DeferredImportPB copyWith(void Function(DeferredImportPB) updates) =>
       super.copyWith((message) => updates(message as DeferredImportPB))
           as DeferredImportPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static DeferredImportPB create() => DeferredImportPB._();
+  @$core.override
   DeferredImportPB createEmptyInstance() => create();
-  static $pb.PbList<DeferredImportPB> createRepeated() =>
-      $pb.PbList<DeferredImportPB>();
   @$core.pragma('dart2js:noInline')
   static DeferredImportPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<DeferredImportPB>(create);
@@ -1900,10 +1596,7 @@
   @$pb.TagNumber(1)
   $core.String get prefix => $_getSZ(0);
   @$pb.TagNumber(1)
-  set prefix($core.String v) {
-    $_setString(0, v);
-  }
-
+  set prefix($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasPrefix() => $_has(0);
   @$pb.TagNumber(1)
@@ -1921,25 +1614,21 @@
     $core.String? libraryName,
     $core.Iterable<DeferredImportPB>? imports,
   }) {
-    final $result = create();
-    if (libraryUri != null) {
-      $result.libraryUri = libraryUri;
-    }
-    if (libraryName != null) {
-      $result.libraryName = libraryName;
-    }
-    if (imports != null) {
-      $result.imports.addAll(imports);
-    }
-    return $result;
+    final result = create();
+    if (libraryUri != null) result.libraryUri = libraryUri;
+    if (libraryName != null) result.libraryName = libraryName;
+    if (imports != null) result.imports.addAll(imports);
+    return result;
   }
-  LibraryDeferredImportsPB._() : super();
-  factory LibraryDeferredImportsPB.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory LibraryDeferredImportsPB.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  LibraryDeferredImportsPB._();
+
+  factory LibraryDeferredImportsPB.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory LibraryDeferredImportsPB.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'LibraryDeferredImportsPB',
@@ -1948,31 +1637,25 @@
       createEmptyInstance: create)
     ..aOS(1, _omitFieldNames ? '' : 'libraryUri')
     ..aOS(2, _omitFieldNames ? '' : 'libraryName')
-    ..pc<DeferredImportPB>(
-        3, _omitFieldNames ? '' : 'imports', $pb.PbFieldType.PM,
+    ..pPM<DeferredImportPB>(3, _omitFieldNames ? '' : 'imports',
         subBuilder: DeferredImportPB.create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  LibraryDeferredImportsPB clone() =>
-      LibraryDeferredImportsPB()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  LibraryDeferredImportsPB clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   LibraryDeferredImportsPB copyWith(
           void Function(LibraryDeferredImportsPB) updates) =>
       super.copyWith((message) => updates(message as LibraryDeferredImportsPB))
           as LibraryDeferredImportsPB;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static LibraryDeferredImportsPB create() => LibraryDeferredImportsPB._();
+  @$core.override
   LibraryDeferredImportsPB createEmptyInstance() => create();
-  static $pb.PbList<LibraryDeferredImportsPB> createRepeated() =>
-      $pb.PbList<LibraryDeferredImportsPB>();
   @$core.pragma('dart2js:noInline')
   static LibraryDeferredImportsPB getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<LibraryDeferredImportsPB>(create);
@@ -1982,10 +1665,7 @@
   @$pb.TagNumber(1)
   $core.String get libraryUri => $_getSZ(0);
   @$pb.TagNumber(1)
-  set libraryUri($core.String v) {
-    $_setString(0, v);
-  }
-
+  set libraryUri($core.String value) => $_setString(0, value);
   @$pb.TagNumber(1)
   $core.bool hasLibraryUri() => $_has(0);
   @$pb.TagNumber(1)
@@ -1995,10 +1675,7 @@
   @$pb.TagNumber(2)
   $core.String get libraryName => $_getSZ(1);
   @$pb.TagNumber(2)
-  set libraryName($core.String v) {
-    $_setString(1, v);
-  }
-
+  set libraryName($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasLibraryName() => $_has(1);
   @$pb.TagNumber(2)
@@ -2009,6 +1686,7 @@
   $pb.PbList<DeferredImportPB> get imports => $_getList(2);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbenum.dart b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
index bd46e71..5328c077 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pbenum.dart
@@ -1,10 +1,11 @@
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: info.proto
-//
+// Generated from info.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
diff --git a/pkg/dart2js_info/lib/src/proto/info.pbjson.dart b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
index aee80cb..73adc55 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pbjson.dart
@@ -1,13 +1,14 @@
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: info.proto
-//
+// Generated from info.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/dart2native/lib/dart2native.dart b/pkg/dart2native/lib/dart2native.dart
index a046afa..23a2af4 100644
--- a/pkg/dart2native/lib/dart2native.dart
+++ b/pkg/dart2native/lib/dart2native.dart
@@ -104,7 +104,10 @@
   final args = [
     sdk.genKernelSnapshot,
     '--platform=${product ? sdk.vmPlatformProductDill : sdk.vmPlatformDill}',
-    if (product) '-Ddart.vm.product=true',
+    '-Ddart.vm.product=$product',
+    '-Ddart.vm.asan=${const bool.fromEnvironment("dart.vm.asan")}',
+    '-Ddart.vm.msan=${const bool.fromEnvironment("dart.vm.msan")}',
+    '-Ddart.vm.tsan=${const bool.fromEnvironment("dart.vm.tsan")}',
     if (enableExperiment.isNotEmpty) '--enable-experiment=$enableExperiment',
     if (targetOS != null) '--target-os=$targetOS',
     if (fromDill) '--from-dill=$sourceFile',
@@ -127,14 +130,16 @@
 
 Future<ProcessResult> generateAotSnapshotHelper(
     String genSnapshot,
+    String format,
+    String outFlag,
     String kernelFile,
     String snapshotFile,
     String? debugFile,
     bool enableAsserts,
     List<String> extraGenSnapshotOptions) {
   return Process.run(genSnapshot, [
-    '--snapshot-kind=app-aot-elf',
-    '--elf=$snapshotFile',
+    '--snapshot-kind=app-aot-$format',
+    '--$outFlag=$snapshotFile',
     if (debugFile != null) '--save-debugging-info=$debugFile',
     if (debugFile != null) '--dwarf-stack-traces',
     if (debugFile != null) '--strip',
diff --git a/pkg/dart2native/lib/generate.dart b/pkg/dart2native/lib/generate.dart
index 107df0f..e66f512 100644
--- a/pkg/dart2native/lib/generate.dart
+++ b/pkg/dart2native/lib/generate.dart
@@ -5,6 +5,9 @@
 import 'dart:io';
 
 import 'package:code_assets/code_assets.dart' show OS;
+// ignore: implementation_imports (This file is imported in other packages.)
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show Verbosity;
 import 'package:path/path.dart' as path;
 
 import 'dart2native.dart';
@@ -262,11 +265,19 @@
       print('Compiling $_sourcePath to $outputPath using format $_kind:');
       print('Generating AOT snapshot. $_genSnapshot $extraOptions');
     }
+    var format = 'elf';
+    var outFlag = 'elf';
+    if (_targetOS == OS.macOS) {
+      format = 'macho-dylib';
+      outFlag = 'macho';
+    }
     final snapshotFile = _kind == Kind.aot
         ? outputPath
         : path.join(_tempDir.path, 'snapshot.aot');
     final snapshotResult = await generateAotSnapshotHelper(
       _genSnapshot,
+      format,
+      outFlag,
       kernelFile,
       snapshotFile,
       debugPath,
@@ -296,7 +307,9 @@
       }
     }
 
-    print('Generated: $outputPath');
+    if (_verbosity != Verbosity.error.name) {
+      print('Generated: $outputPath');
+    }
   }
 
   Future<String> _concatenateAssetsToKernel(String? nativeAssets) async {
diff --git a/pkg/dart2native/pubspec.yaml b/pkg/dart2native/pubspec.yaml
index a396ef3..f660fec 100644
--- a/pkg/dart2native/pubspec.yaml
+++ b/pkg/dart2native/pubspec.yaml
@@ -15,6 +15,7 @@
 dependencies:
   code_assets: any
   collection: any
+  front_end: any
   kernel: any
   path: any
 
diff --git a/pkg/dart2wasm/benchmark/self_compile_benchmark.dart b/pkg/dart2wasm/benchmark/self_compile_benchmark.dart
index 7b37b69..c56ef60 100644
--- a/pkg/dart2wasm/benchmark/self_compile_benchmark.dart
+++ b/pkg/dart2wasm/benchmark/self_compile_benchmark.dart
@@ -2,41 +2,70 @@
 // for details. 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:_fe_analyzer_shared/src/util/colors.dart' as colors;
 import 'package:dart2wasm/compile.dart';
 import 'package:dart2wasm/compiler_options.dart';
+import 'package:dart2wasm/io_util.dart';
 
 import 'filesystem_io.dart' if (dart.library.js_interop) 'filesystem_js.dart';
 
+class _BenchmarkIOManager extends CompilerPhaseInputOutputManager {
+  final WasmCompilerFileSystem benchmarkFileSystem;
+  Uint8List? moduleBytes;
+
+  _BenchmarkIOManager(this.benchmarkFileSystem, WasmCompilerOptions options)
+      : super(benchmarkFileSystem, options);
+
+  @override
+  Future<void> writeWasmModule(Uint8List wasmModule, String moduleName) async {
+    moduleBytes = wasmModule;
+  }
+
+  @override
+  Future<void> writeWasmSourceMap(String sourceMap, String moduleName) async {}
+
+  @override
+  Future<void> writeJsRuntime(String jsRuntime) async {}
+
+  @override
+  Future<void> writeSupportJs(String supportJs) async {}
+
+  void flushWasmModules(String wasmFile) {
+    benchmarkFileSystem.writeBytesSync(wasmFile, moduleBytes!);
+  }
+}
+
 Future main(List<String> args) async {
   final sw = Stopwatch()..start();
   final fileSystem = WasmCompilerFileSystem();
-  final result = await compileBenchmark(
-      fileSystem, 'pkg/dart2wasm/benchmark/self_compile_benchmark.dart');
+  final mainFile = 'pkg/dart2wasm/benchmark/self_compile_benchmark.dart';
+  final main = Uri.file('${fileSystem.sdkRoot}/$mainFile');
+
+  final options = WasmCompilerOptions(mainUri: main, outputFile: 'out.wasm');
+  final ioManager = _BenchmarkIOManager(fileSystem, options);
+
+  options.librariesSpecPath =
+      Uri.file('${fileSystem.sdkRoot}/sdk/lib/libraries.json');
+
+  await compileBenchmark(options, ioManager);
   print('Dart2WasmSelfCompile(RunTimeRaw): ${sw.elapsed.inMilliseconds} ms.');
 
   if (args.isNotEmpty) {
-    final module = result.wasmModules.values.single;
     final wasmFile = args.single;
-    fileSystem.writeBytesSync(wasmFile, module.moduleBytes);
+    ioManager.flushWasmModules(wasmFile);
   }
 }
 
-Future<CodegenResult> compileBenchmark(
-    WasmCompilerFileSystem fileSystem, String mainFile) async {
+Future<CodegenResult> compileBenchmark(WasmCompilerOptions options,
+    CompilerPhaseInputOutputManager ioManager) async {
   // Avoid CFE self-detecting whether `stdout`/`stderr` is terminal and supports
   // colors (as we don't have `dart:io` available when we run dart2wasm in a
   // wasm runtime).
   colors.enableColors = false;
 
-  final main = Uri.file('${fileSystem.sdkRoot}/$mainFile');
-
-  final options = WasmCompilerOptions(mainUri: main, outputFile: 'out.wasm');
-  options.librariesSpecPath =
-      Uri.file('${fileSystem.sdkRoot}/sdk/lib/libraries.json');
-
-  final result = await compile(
-      options, fileSystem, (mod) => Uri.parse('$mod.maps'), (diag) {
+  final result = await compile(options, ioManager, (diag) {
     print('Diagnostics: ${diag.severity} ${diag.plainTextFormatted}');
   });
   if (result is! CompilationSuccess) {
diff --git a/pkg/dart2wasm/bin/wasm2wat.dart b/pkg/dart2wasm/bin/wasm2wat.dart
index 1747cc1..4ddd5e7 100644
--- a/pkg/dart2wasm/bin/wasm2wat.dart
+++ b/pkg/dart2wasm/bin/wasm2wat.dart
@@ -12,13 +12,31 @@
 void main(List<String> args) {
   final result = argParser.parse(args);
   if (result.flag('help')) {
-    print('Usage: wasm2wat.dart [...options...] <input.wasm>');
+    print('Usage: wasm2wat.dart [...options...] <input.wasm> <...wasm>');
     print(argParser.usage);
-    exit(0);
+    exit(1);
   }
 
-  final input = result.rest.single;
-  final output = result['output'] as String?;
+  final sort = result.flag('sort');
+  final writeWat = result.flag('write');
+  final outputFile = result['output'] as String?;
+  final wasmFiles = result.rest;
+  if (outputFile != null && wasmFiles.length != 1) {
+    print('Specified --output=$outputFile but number of wasm files is not 1 '
+        '(${wasmFiles.join(' ')})');
+    print(argParser.usage);
+    exit(1);
+  }
+  if (wasmFiles.isEmpty) {
+    print('No wasm files specified');
+    print(argParser.usage);
+    exit(1);
+  }
+  if (wasmFiles.length > 1 && !writeWat) {
+    print('More than one wasm file specified without `--write` flag.');
+    print(argParser.usage);
+    exit(1);
+  }
 
   List<RegExp> getFilter(String optionName) {
     final filterStrings = result[optionName] as List<String>;
@@ -31,17 +49,24 @@
   final settings = ModulePrintSettings(
       functionFilters: functionFilters,
       typeFilters: typeFilters,
-      globalFilters: globalFilters);
+      globalFilters: globalFilters,
+      printInSortedOrder: sort);
 
-  final wasmBytes = File(input).readAsBytesSync();
+  for (final input in wasmFiles) {
+    final wasmBytes = File(input).readAsBytesSync();
 
-  final deserializer = Deserializer(wasmBytes);
-  final module = Module.deserialize(deserializer);
-  final wat = module.printAsWat(settings: settings);
-  if (output != null) {
-    File(output).writeAsStringSync(wat);
-  } else {
-    print(wat);
+    final deserializer = Deserializer(wasmBytes);
+    final module = Module.deserialize(deserializer);
+    final wat = module.printAsWat(settings: settings);
+    if (outputFile != null) {
+      File(outputFile).writeAsStringSync(wat);
+      print('-> Written $outputFile');
+    } else if (writeWat) {
+      File('$input.wat').writeAsStringSync(wat);
+      print('-> Written $input.wat');
+    } else {
+      print(wat);
+    }
   }
 }
 
@@ -58,6 +83,11 @@
       abbr: 'g',
       help: 'Only print global initializers if the global name matches. '
           'The name filter is interpreted as a Dart `RegExp`.')
+  ..addFlag('sort',
+      abbr: 's',
+      help: 'Print functions/types/... in sorted order (sort by name).')
+  ..addFlag('write',
+      abbr: 'w', help: 'Write the resulting wat code to <input.wasm>.wat.')
   ..addFlag('help', abbr: 'h', help: 'Print the help of this tool.')
   ..addFlag('prefer-multiline',
       abbr: 'm',
@@ -67,4 +97,5 @@
   ..addOption('output',
       abbr: 'o',
       help:
-          'The filepath where the output will be written to (default: stdout).');
+          'The filepath where the output will be written to (default: stdout). '
+          'The number of input wasm files must be 1 if --output was provided.');
diff --git a/pkg/dart2wasm/lib/class_info.dart b/pkg/dart2wasm/lib/class_info.dart
index f113eed..74e10d1 100644
--- a/pkg/dart2wasm/lib/class_info.dart
+++ b/pkg/dart2wasm/lib/class_info.dart
@@ -38,10 +38,6 @@
   static const closureContext = 2;
   static const closureVtable = 3;
   static const closureRuntimeType = 4;
-  static const vtableDynamicCallEntry = 0;
-  static const vtableInstantiationTypeComparisonFunction = 1;
-  static const vtableInstantiationTypeHashFunction = 2;
-  static const vtableInstantiationFunction = 3;
   static const instantiationContextInner = 0;
   static const instantiationContextTypeArgumentsBase = 1;
   static const typeIsDeclaredNullable = 2;
diff --git a/pkg/dart2wasm/lib/closures.dart b/pkg/dart2wasm/lib/closures.dart
index 5f2aaef..1c60925 100644
--- a/pkg/dart2wasm/lib/closures.dart
+++ b/pkg/dart2wasm/lib/closures.dart
@@ -31,7 +31,10 @@
   final List<w.BaseFunction> functions;
 
   /// The vtable entry used for dynamic calls.
-  final w.BaseFunction dynamicCallEntry;
+  ///
+  /// This will be non-null only if we emit dynamic call entries in the closure
+  /// vtable (see [ClosureLayouter.vtableBaseStruct]).
+  final w.BaseFunction? dynamicCallEntry;
 
   /// The constant global variable pointing to the vtable.
   final w.Global vtable;
@@ -59,10 +62,15 @@
 /// an entry for each (non-empty) combination of argument names that closures
 /// with this layout can be called with.
 class ClosureRepresentation {
-  /// The struct field index in the vtable struct at which the function
-  /// entries start.
+  /// Where the vtable entries for function calls start in the vtable struct.
+  final int vtableBaseIndex;
+
+  /// The number of type arguments.
   final int typeCount;
 
+  /// The maximum number of positional parameters.
+  final int maxPositionalCount;
+
   /// The Wasm struct type for the vtable.
   final w.StructType vtableStruct;
 
@@ -116,19 +124,11 @@
       _instantiationTypeHashFunction.putIfAbsent(
           module, () => _instantiationTypeHashFunctionGenerator(module));
 
-  /// The signature of the function that instantiates this generic closure.
-  w.FunctionType get instantiationFunctionType {
-    assert(isGeneric);
-    return getVtableFieldType(FieldIndex.vtableInstantiationFunction);
-  }
-
-  /// The type of the vtable function at given index.
-  w.FunctionType getVtableFieldType(int index) =>
-      (vtableStruct.fields[index].type as w.RefType).heapType as w.FunctionType;
-
   ClosureRepresentation(
       Translator translator,
+      this.vtableBaseIndex,
       this.typeCount,
+      this.maxPositionalCount,
       this.vtableStruct,
       this.closureStruct,
       this._indexOfCombination,
@@ -136,10 +136,7 @@
 
   bool get isGeneric => typeCount > 0;
 
-  /// Where the vtable entries for function calls start in the vtable struct.
-  int get vtableBaseIndex => isGeneric
-      ? ClosureLayouter.vtableBaseIndexGeneric
-      : ClosureLayouter.vtableBaseIndexNonGeneric;
+  bool get hasNamed => _indexOfCombination != null;
 
   /// The field index in the vtable struct for the function entry to use when
   /// calling the closure with the given number of positional arguments and the
@@ -216,21 +213,12 @@
   // The member currently being visited while collecting function signatures.
   Member? currentMember;
 
-  // For non-generic closures. The entries are:
-  // 0: Dynamic call entry
-  // 1-...: Entries for calling the closure
-  static const int vtableBaseIndexNonGeneric = 1;
-
-  // For generic closures. The entries are:
-  // 0: Dynamic call entry
-  // 1: Instantiation type comparison function
-  // 2: Instantiation type hash function
-  // 3: Instantiation function
-  // 4-...: Entries for calling the closure
-  static const int vtableBaseIndexGeneric = 4;
+  /// Whether the kernel [Component] uses `Function.apply` and possibly passes
+  /// non-empty map for named arguments.
+  late bool usesFunctionApplyWithNamedArguments;
 
   // Uninitialized (no field types added yet) struct for base vtable to allow
-  // cyclic types:
+  // cyclic types, e.g.:
   //
   //   closureBaseStruct.vtable     = ref vtableBase
   //   vtableBaseStruct.dynamicCall = Function(ref closureBaseStruct, ...)
@@ -239,17 +227,33 @@
       _defineStruct("#VtableBase");
 
   /// Base struct for all closure vtables.
+  ///
+  /// The entries are:
+  ///
+  ///   0: Dynamic call entry (**)
+  ///
+  /// (**) Only if the application enables dynamic modules or uses
+  /// `Function.apply` with named arguments we'll include a dynamic call entry.
   late final w.StructType vtableBaseStruct = (() {
     final vtable = _vtableBaseStructUninitialized;
     final index = vtable.fields.length;
-    vtable.fields.add(w.FieldType(
-        w.RefType.def(translator.dynamicCallVtableEntryFunctionType,
-            nullable: false),
-        mutable: false));
-    vtable.fieldNames[index] = 'dynamiClosureCallEntry';
+    if (translator.dynamicModuleSupportEnabled ||
+        usesFunctionApplyWithNamedArguments) {
+      vtable.fields.add(w.FieldType(
+          w.RefType.def(translator.dynamicCallVtableEntryFunctionType,
+              nullable: false),
+          mutable: false));
+      vtable.fieldNames[index] = 'dynamicClosureCallEntry';
+    }
     return vtable;
   })();
 
+  /// The vtable index of dynamic call entry (if we emit it)
+  late final int? vtableDynamicClosureCallEntryIndex =
+      vtableBaseStruct.fields.isEmpty
+          ? null
+          : vtableBaseStruct.fields.length - 1;
+
   /// Base struct for instantiation closure contexts. Type tests against this
   /// type is used in `_Closure._equals` to check if a closure is an
   /// instantiation.
@@ -261,10 +265,24 @@
   });
 
   /// Base struct for non-generic closure vtables.
+  ///
+  /// For non-generic closures the entries are:
+  ///
+  ///  vtableBase.length + i: Entries for calling the closure
+  ///
   late final w.StructType nonGenericVtableBaseStruct =
       _defineStruct("#NonGenericVtableBase", superType: vtableBaseStruct);
 
   /// Base struct for generic closure vtables.
+  ///
+  /// For generic closures the entries are:
+  ///
+  ///  vtableBase.length + 0: Entries for calling the closure
+  ///  vtableBase.length + 1: Instantiation type comparison function
+  ///  vtableBase.length + 2: Instantiation type hash function
+  ///  vtableBase.length + 3: Instantiation function
+  ///  vtableBase.length + 4 + i: Entries for calling the closure
+  ///
   late final w.StructType genericVtableBaseStruct =
       _defineStruct("#GenericVtableBase",
           namedFields: {
@@ -276,9 +294,18 @@
                 w.RefType.def(instantiationClosureTypeHashFunctionType,
                     nullable: false),
                 mutable: false),
+            'instantiateGenericClosureFun':
+                w.FieldType(w.RefType.func(nullable: false), mutable: false),
           },
           superType: vtableBaseStruct);
 
+  late final int vtableInstantiationTypeComparisonFunctionIndex =
+      genericVtableBaseStruct.fields.length - 3;
+  late final int vtableInstantiationTypeHashFunctionIndex =
+      genericVtableBaseStruct.fields.length - 2;
+  late final int vtableInstantiationFunctionIndex =
+      genericVtableBaseStruct.fields.length - 1;
+
   /// Type of [ClosureRepresentation._instantiationTypeComparisonFunction].
   late final w.FunctionType instantiationClosureTypeComparisonFunctionType =
       translator.typesBuilder.defineFunction(
@@ -400,8 +427,9 @@
             (translator.component.metadata["vm.procedure-attributes.metadata"]
                     as ProcedureAttributesMetadataRepository)
                 .mapping;
-
   void collect() {
+    usesFunctionApplyWithNamedArguments = false;
+
     // Dynamic module enabled builds use dynamic call entry points for all
     // closure invocations so we don't need to generate any representation
     // info.
@@ -436,6 +464,18 @@
     }
   }
 
+  int maxTypeArgumentCount() => representations.length;
+
+  int maxPositionalCountFor(int typeCount) => representations[typeCount].length;
+
+  void forEachPositionalArgumentCount(int typeCount, void Function(int) fun) {
+    for (int positionalCount = 0;
+        positionalCount < representations[positionalCount].length;
+        ++positionalCount) {
+      fun(positionalCount);
+    }
+  }
+
   /// Get the representation for closures with a specific signature, described
   /// by the number of type parameters, the maximum number of positional
   /// parameters and the names of named parameters.
@@ -478,12 +518,12 @@
 
   ClosureRepresentation _createRepresentation(
       int typeCount,
-      int positionalCount,
+      int maxPositionalCount,
       List<String> names,
       ClosureRepresentation? parent,
       Map<NameCombination, int>? indexOfCombination,
       Iterable<int> paramCounts) {
-    List<String> nameTags = ["$typeCount", "$positionalCount", ...names];
+    List<String> nameTags = ["$typeCount", "$maxPositionalCount", ...names];
     String vtableName = ["#Vtable", ...nameTags].join("-");
     String closureName = ["#Closure", ...nameTags].join("-");
     w.StructType parentVtableStruct = parent?.vtableStruct ??
@@ -508,28 +548,22 @@
     if (typeCount > 0) {
       // Add or set vtable field for the instantiation function.
       instantiatedRepresentation =
-          getClosureRepresentation(0, positionalCount, names)!;
+          getClosureRepresentation(0, maxPositionalCount, names)!;
       w.RefType inputType = w.RefType.def(closureBaseStruct, nullable: false);
       w.RefType outputType = w.RefType.def(
           instantiatedRepresentation.closureStruct,
           nullable: false);
+
+      final instantiationTypeOfParent = parent?.vtableStruct.getVtableEntryAt(
+          translator.closureLayouter.vtableInstantiationFunctionIndex);
       w.FunctionType instantiationFunctionType = translator.typesBuilder
           .defineFunction(
               [inputType, ...List.filled(typeCount, typeType)], [outputType],
-              superType: parent?.instantiationFunctionType);
+              superType: instantiationTypeOfParent);
       w.FieldType functionFieldType = w.FieldType(
           w.RefType.def(instantiationFunctionType, nullable: false),
           mutable: false);
-      if (parent == null) {
-        assert(vtableStruct.fields.length ==
-            FieldIndex.vtableInstantiationFunction);
-        final index = vtableStruct.fields.length;
-        vtableStruct.fields.add(functionFieldType);
-        vtableStruct.fieldNames[index] = 'instantiateGenericClosureFun';
-      } else {
-        vtableStruct.fields[FieldIndex.vtableInstantiationFunction] =
-            functionFieldType;
-      }
+      vtableStruct.fields[vtableInstantiationFunctionIndex] = functionFieldType;
 
       // Build layout for the context of instantiated closures, containing the
       // original closure plus the type arguments.
@@ -561,9 +595,15 @@
           'closureCallEntry-$typeCount-$paramCount';
     }
 
+    final vTableBaseIndex = typeCount > 0
+        ? genericVtableBaseStruct.fields.length
+        : nonGenericVtableBaseStruct.fields.length;
+
     ClosureRepresentation representation = ClosureRepresentation(
         translator,
+        vTableBaseIndex,
         typeCount,
+        maxPositionalCount,
         vtableStruct,
         closureStruct,
         indexOfCombination,
@@ -595,9 +635,11 @@
               closureStruct,
               _getInstantiationContextBaseStruct(typeCount),
               instantiatedRepresentation!.vtableStruct,
-              vtableBaseIndexNonGeneric + instantiationTrampolines.length,
+              nonGenericVtableBaseStruct.fields.length +
+                  instantiationTrampolines.length,
               vtableStruct,
-              vtableBaseIndexGeneric + instantiationTrampolines.length);
+              genericVtableBaseStruct.fields.length +
+                  instantiationTrampolines.length);
           instantiationTrampolines.add(trampoline);
         } else {
           // For each name combination in the instantiated closure, add a
@@ -615,16 +657,17 @@
                     closureStruct,
                     _getInstantiationContextBaseStruct(typeCount),
                     instantiatedRepresentation.vtableStruct,
-                    vtableBaseIndexNonGeneric + instantiationTrampolines.length,
+                    nonGenericVtableBaseStruct.fields.length +
+                        instantiationTrampolines.length,
                     vtableStruct,
-                    vtableBaseIndexGeneric +
-                        (positionalCount + 1) +
+                    genericVtableBaseStruct.fields.length +
+                        (maxPositionalCount + 1) +
                         genericIndex)
                 : translator
                     .getDummyValuesCollectorForModule(module)
                     .getDummyFunction((instantiatedRepresentation
                             .vtableStruct
-                            .fields[vtableBaseIndexNonGeneric +
+                            .fields[vtableBaseStruct.fields.length +
                                 instantiationTrampolines.length]
                             .type as w.RefType)
                         .heapType as w.FunctionType);
@@ -635,6 +678,9 @@
       };
 
       representation._instantiationFunctionGenerator = (module) {
+        final instantiationFunctionType = representation.vtableStruct
+            .getVtableEntryAt(
+                translator.closureLayouter.vtableInstantiationFunctionIndex);
         String instantiationFunctionName =
             ["#Instantiation", ...nameTags].join("-");
         return _createInstantiationFunction(
@@ -642,7 +688,7 @@
             typeCount,
             instantiatedRepresentation!,
             representation._instantiationTrampolinesForModule(module),
-            representation.instantiationFunctionType,
+            instantiationFunctionType,
             instantiationContextStruct!,
             closureStruct,
             instantiationFunctionName);
@@ -669,12 +715,10 @@
       w.StructType genericVtableStruct,
       int genericVtableFieldIndex) {
     assert(instantiationContextBaseStruct.fields.length == 1 + typeCount);
-    w.FunctionType instantiatedFunctionType = (instantiatedVtableStruct
-            .fields[instantiatedVtableFieldIndex].type as w.RefType)
-        .heapType as w.FunctionType;
+    w.FunctionType instantiatedFunctionType =
+        instantiatedVtableStruct.getVtableEntryAt(instantiatedVtableFieldIndex);
     w.FunctionType genericFunctionType =
-        (genericVtableStruct.fields[genericVtableFieldIndex].type as w.RefType)
-            .heapType as w.FunctionType;
+        genericVtableStruct.getVtableEntryAt(genericVtableFieldIndex);
     assert(genericFunctionType.inputs.length ==
         instantiatedFunctionType.inputs.length + typeCount);
 
@@ -764,7 +808,7 @@
     b.struct_get(
         instantiationContextStruct, FieldIndex.instantiationContextInner);
     b.struct_get(closureBaseStruct, FieldIndex.closureVtable);
-    b.struct_get(vtableBaseStruct, FieldIndex.vtableDynamicCallEntry);
+    b.struct_get(vtableBaseStruct, vtableDynamicClosureCallEntryIndex!);
     b.call_ref(translator.dynamicCallVtableEntryFunctionType);
     b.end();
 
@@ -793,8 +837,11 @@
         w.RefType.def(instantiatedRepresentation.vtableStruct, nullable: false),
         mutable: false));
     final ib = vtable.initializer;
-    ib.ref_func(
-        _createInstantiationDynamicCallEntry(module, typeCount, contextStruct));
+    if (translator.dynamicModuleSupportEnabled ||
+        translator.closureLayouter.usesFunctionApplyWithNamedArguments) {
+      ib.ref_func(_createInstantiationDynamicCallEntry(
+          module, typeCount, contextStruct));
+    }
     for (w.BaseFunction trampoline in instantiationTrampolines) {
       ib.ref_func(trampoline);
     }
@@ -1009,7 +1056,26 @@
   }
 
   @override
+  void visitStaticInvocation(StaticInvocation node) {
+    super.visitStaticInvocation(node);
+    if (node.target == translator.functionApply) {
+      // Function.apply(function, positionalArguments, [namedArguments])
+      if (node.arguments.positional.length > 2) {
+        usesFunctionApplyWithNamedArguments = true;
+      }
+    }
+  }
+
+  @override
+  void visitStaticTearOff(StaticTearOff node) {
+    visitStaticTearOffConstantReference(StaticTearOffConstant(node.target));
+  }
+
+  @override
   void visitStaticTearOffConstantReference(StaticTearOffConstant constant) {
+    if (constant.target == translator.functionApply) {
+      usesFunctionApplyWithNamedArguments = true;
+    }
     _visitFunctionNode(constant.function);
   }
 
@@ -1028,9 +1094,23 @@
 
   @override
   void visitDynamicInvocation(DynamicInvocation node) {
-    if (node.name.text == "call") {
-      _visitFunctionInvocation(node.arguments);
-    }
+    // NOTE: One may have two different kinds of calls here:
+    // ```
+    //   dynamic x;
+    //   x(namedArg: 1);
+    //   x.foo(namedArg: 1);
+    // ```
+    // It may appear as we only have to handle the first case, namely
+    // `node.name.text == "call"`, but the second case can also be a
+    // dynamic closure callsite via call-through-field:
+    // ```
+    //   class Foo {
+    //     void Function({int? namedArg}) get foo => ...;
+    //   }
+    // ```
+    // then a `x.foo(namedArg: 1)` will be executed at runtime via
+    // `var tmp = x.foo; tmp(namedArg: 1)`.
+    _visitFunctionInvocation(node.arguments);
     super.visitDynamicInvocation(node);
   }
 }
@@ -1687,3 +1767,9 @@
     super.visitVariableSet(node);
   }
 }
+
+extension StructVtableExtension on w.StructType {
+  w.FunctionType getVtableEntryAt(int index) {
+    return (fields[index].type as w.RefType).heapType as w.FunctionType;
+  }
+}
diff --git a/pkg/dart2wasm/lib/code_generator.dart b/pkg/dart2wasm/lib/code_generator.dart
index 538ac9d..40ba2aa 100644
--- a/pkg/dart2wasm/lib/code_generator.dart
+++ b/pkg/dart2wasm/lib/code_generator.dart
@@ -1769,78 +1769,45 @@
     final positionalArguments = node.arguments.positional;
     final namedArguments = node.arguments.named;
     final memberName = node.name;
+    final callShape = CallShape(
+        memberName,
+        typeArguments.length,
+        positionalArguments.length,
+        namedArguments.map((n) => n.name).toList()..sort());
     final forwarder = translator
         .getDynamicForwardersForModule(b.moduleBuilder)
-        .getDynamicInvocationForwarder(memberName);
+        .getDynamicInvocationForwarder(callShape);
 
     // Evaluate receiver
     translateExpression(receiver, translator.topType);
-    final nullableReceiverLocal = addLocal(translator.topType);
-    b.local_set(nullableReceiverLocal);
 
     // Evaluate type arguments.
-    final typeArgsLocal = addLocal(
-        makeArray(translator.typeArrayType, typeArguments.length,
-            (elementType, elementIdx) {
-      translator.types.makeType(this, typeArguments[elementIdx]);
-    }));
-    b.local_set(typeArgsLocal);
+    for (final typeArgument in typeArguments) {
+      translator.types.makeType(this, typeArgument);
+    }
 
     // Evaluate positional arguments
-    final positionalArgsLocal = addLocal(makeArray(
-        translator.nullableObjectArrayType, positionalArguments.length,
-        (elementType, elementIdx) {
-      translateExpression(positionalArguments[elementIdx], elementType);
-    }));
-    b.local_set(positionalArgsLocal);
+    for (final argument in positionalArguments) {
+      translateExpression(argument, translator.topType);
+    }
 
     // Evaluate named arguments. The arguments need to be evaluated in the
     // order they appear in the AST, but need to be sorted based on names in
     // the argument list passed to the dynamic forwarder. Create a local for
     // each argument to allow adding values to the list in expected order.
-    final List<MapEntry<String, w.Local>> namedArgumentLocals = [];
+    final namedArgumentLocals = <String, w.Local>{};
     for (final namedArgument in namedArguments) {
       translateExpression(namedArgument.value, translator.topType);
       final argumentLocal = addLocal(translator.topType);
       b.local_set(argumentLocal);
-      namedArgumentLocals.add(MapEntry(namedArgument.name, argumentLocal));
+      namedArgumentLocals[namedArgument.name] = argumentLocal;
     }
-    namedArgumentLocals.sort((e1, e2) => e1.key.compareTo(e2.key));
 
-    // Create named argument array
-    final namedArgsLocal = addLocal(
-        makeArray(translator.nullableObjectArrayType, namedArguments.length * 2,
-            (elementType, elementIdx) {
-      if (elementIdx % 2 == 0) {
-        final name = namedArgumentLocals[elementIdx ~/ 2].key;
-        final w.ValueType symbolValueType =
-            translator.classInfo[translator.symbolClass]!.nonNullableType;
-        instantiateConstant(
-            translator.symbols.symbolForNamedParameter(name), symbolValueType);
-      } else {
-        final local = namedArgumentLocals[elementIdx ~/ 2].value;
-        b.local_get(local);
-      }
-    }));
-    b.local_set(namedArgsLocal);
+    // Load named arguments in sorted order.
+    for (final name in callShape.named) {
+      b.local_get(namedArgumentLocals[name]!);
+    }
 
-    final nullBlock = b.block([], [translator.topTypeNonNullable]);
-    b.local_get(nullableReceiverLocal);
-    b.br_on_non_null(nullBlock);
-    // Throw `NoSuchMethodError`. Normally this needs to happen via instance
-    // invocation of `noSuchMethod` (done in [_callNoSuchMethod]), but we don't
-    // have a `Null` class in dart2wasm so we throw directly.
-    b.local_get(nullableReceiverLocal);
-    createInvocationObject(translator, b, memberName, typeArgsLocal,
-        positionalArgsLocal, namedArgsLocal);
-
-    call(translator.noSuchMethodErrorThrowWithInvocation.reference);
-    b.unreachable();
-    b.end(); // nullBlock
-
-    b.local_get(typeArgsLocal);
-    b.local_get(positionalArgsLocal);
-    b.local_get(namedArgsLocal);
     translator.callFunction(forwarder.function, b);
 
     return translator.topType;
@@ -2198,21 +2165,6 @@
 
     // Evaluate receiver
     translateExpression(receiver, translator.topType);
-    final nullableReceiverLocal = addLocal(translator.topType);
-    b.local_set(nullableReceiverLocal);
-
-    final nullBlock = b.block([], [translator.topTypeNonNullable]);
-    b.local_get(nullableReceiverLocal);
-    b.br_on_non_null(nullBlock);
-    // Throw `NoSuchMethodError`. Normally this needs to happen via instance
-    // invocation of `noSuchMethod` (done in [_callNoSuchMethod]), but we don't
-    // have a `Null` class in dart2wasm so we throw directly.
-    b.local_get(nullableReceiverLocal);
-    createGetterInvocationObject(translator, b, memberName);
-
-    call(translator.noSuchMethodErrorThrowWithInvocation.reference);
-    b.unreachable();
-    b.end(); // nullBlock
 
     // Call get forwarder
     translator.callFunction(forwarder.function, b);
@@ -2229,31 +2181,8 @@
         .getDynamicForwardersForModule(b.moduleBuilder)
         .getDynamicSetForwarder(memberName);
 
-    // Evaluate receiver
     translateExpression(receiver, translator.topType);
-    final nullableReceiverLocal = addLocal(translator.topType);
-    b.local_set(nullableReceiverLocal);
-
-    // Evaluate positional arg
     translateExpression(value, translator.topType);
-    final positionalArgLocal = addLocal(translator.topType);
-    b.local_set(positionalArgLocal);
-
-    final nullBlock = b.block([], [translator.topTypeNonNullable]);
-    b.local_get(nullableReceiverLocal);
-    b.br_on_non_null(nullBlock);
-    // Throw `NoSuchMethodError`. Normally this needs to happen via instance
-    // invocation of `noSuchMethod` (done in [_callNoSuchMethod]), but we don't
-    // have a `Null` class in dart2wasm so we throw directly.
-    b.local_get(nullableReceiverLocal);
-    createSetterInvocationObject(translator, b, memberName, positionalArgLocal);
-
-    call(translator.noSuchMethodErrorThrowWithInvocation.reference);
-    b.unreachable();
-    b.end(); // nullBlock
-
-    // Call set forwarder
-    b.local_get(positionalArgLocal);
     translator.callFunction(forwarder.function, b);
 
     return translator.topType;
@@ -2573,7 +2502,7 @@
     final int vtableFieldIndex = representation.fieldIndexForSignature(
         node.arguments.positional.length, argNames);
     final w.FunctionType functionType =
-        representation.getVtableFieldType(vtableFieldIndex);
+        representation.vtableStruct.getVtableEntryAt(vtableFieldIndex);
 
     // Call entry point in vtable
     b.local_get(closureLocal);
@@ -2621,14 +2550,18 @@
       }
 
       // Instantiation function
+      final vtableIndex =
+          translator.closureLayouter.vtableInstantiationFunctionIndex;
+      final instantiationFunctionType =
+          representation.vtableStruct.getVtableEntryAt(vtableIndex);
+
       b.local_get(closureTemp);
       b.struct_get(representation.closureStruct, FieldIndex.closureVtable);
-      b.struct_get(
-          representation.vtableStruct, FieldIndex.vtableInstantiationFunction);
+      b.struct_get(representation.vtableStruct, vtableIndex);
 
       // Call instantiation function
-      b.call_ref(representation.instantiationFunctionType);
-      return representation.instantiationFunctionType.outputs.single;
+      b.call_ref(instantiationFunctionType);
+      return instantiationFunctionType.outputs.single;
     } else {
       // Only other alternative is `NeverType`.
       assert(type is NeverType);
@@ -2812,7 +2745,10 @@
   }
 
   w.ModuleBuilder? _recognizeDeferredModuleGuard(Let let) {
-    if (!translator.options.enableDeferredLoading) return null;
+    if (!translator.options.enableDeferredLoading &&
+        !translator.options.enableMultiModuleStressTestMode) {
+      return null;
+    }
 
     // TODO(http://dartbug.com/61764): Find better way to do this.
     //
@@ -4579,9 +4515,16 @@
       Map<int, SwitchCase> caseMap = {};
       for (final c in node.cases) {
         for (final e in c.expressions) {
+          if (e is NullLiteral ||
+              (e is ConstantExpression && e.constant is NullConstant)) {
+            // Null already handled above.
+            continue;
+          }
+
           final value = e is IntLiteral
               ? e.value
               : ((e as ConstantExpression).constant as IntConstant).value;
+
           caseMap[value] = c;
           if (minValue == null || value < minValue) minValue = value;
           if (maxValue == null || value > maxValue) maxValue = value;
@@ -4620,6 +4563,11 @@
       outer:
       for (final c in node.cases) {
         for (final e in c.expressions) {
+          if (e is NullLiteral ||
+              (e is ConstantExpression && e.constant is NullConstant)) {
+            // Null already handled above.
+            continue;
+          }
           if (e is! ConstantExpression) {
             isValid = false;
             break outer;
@@ -4735,6 +4683,39 @@
     return outputs;
   }
 
+  /// Switches on the [pushBranchExpression] and calls [handleCase] for each
+  /// case or [handleDefault] for the default case.
+  ///
+  /// Assumes that [handleCase] and [handleDefault] will push [outputs] on the
+  /// stack.
+  ///
+  /// Leaves [outputs] on the stack.
+  void emitDenseTableBranch(
+      List<w.ValueType> outputs,
+      int n,
+      void Function() pushBranchExpression,
+      void Function(int) handleCase,
+      void Function() handleDefault) {
+    final done = block([], outputs);
+    final defaultCase = block();
+
+    final labelStack = <w.Label>[];
+    for (int i = 0; i < n; ++i) {
+      labelStack.add(block());
+    }
+    pushBranchExpression();
+    br_table(labelStack, defaultCase);
+    for (int i = n - 1; i >= 0; --i) {
+      end();
+      handleCase(i);
+      br(done);
+    }
+
+    end(); // defaultCase
+    handleDefault();
+    end(); // done
+  }
+
   void incrementingLoop(
       {required void Function() pushStart,
       required void Function() pushLimit,
diff --git a/pkg/dart2wasm/lib/compile.dart b/pkg/dart2wasm/lib/compile.dart
index 6f7d9b2..643a269 100644
--- a/pkg/dart2wasm/lib/compile.dart
+++ b/pkg/dart2wasm/lib/compile.dart
@@ -2,11 +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 'dart:io' show File;
-import 'dart:typed_data';
-
-import 'package:build_integration/file_system/multi_root.dart'
-    show MultiRootFileSystem, MultiRootFileSystemEntity;
 import 'package:front_end/src/api_prototype/dynamic_module_validator.dart'
     show DynamicInterfaceYamlFile;
 import 'package:front_end/src/api_prototype/file_system.dart' show FileSystem;
@@ -18,14 +13,9 @@
         kernelForProgram,
         CfeSeverity;
 import 'package:kernel/ast.dart';
-import 'package:kernel/binary/ast_from_binary.dart'
-    show BinaryBuilderWithMetadata;
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
-import 'package:kernel/kernel.dart'
-    show writeComponentToText, loadComponentFromBytes;
 import 'package:kernel/library_index.dart';
-import 'package:kernel/text/ast_to_text.dart';
 import 'package:kernel/type_environment.dart';
 import 'package:kernel/verifier.dart';
 import 'package:vm/kernel_front_end.dart' show writeDepfile;
@@ -46,8 +36,10 @@
 import 'dry_run.dart';
 import 'dynamic_module_kernel_metadata.dart';
 import 'dynamic_modules.dart';
+import 'io_util.dart';
 import 'js/method_collector.dart' show JSMethods;
 import 'js/runtime_generator.dart' as js;
+import 'library_dependencies_pruner.dart';
 import 'modules.dart';
 import 'record_class_generator.dart';
 import 'records.dart';
@@ -93,11 +85,17 @@
 }
 
 class CodegenResult extends CompilationSuccess {
-  final Map<String, ({Uint8List moduleBytes, String? sourceMap})> wasmModules;
-  final String jsRuntime;
-  final String supportJs;
+  final String mainWasmFile;
+  final int numModules;
 
-  CodegenResult(this.wasmModules, this.jsRuntime, this.supportJs);
+  CodegenResult(this.mainWasmFile, this.numModules);
+}
+
+class OptResult extends CompilationSuccess {
+  final String mainWasmFile;
+  final int numModules;
+
+  OptResult(this.mainWasmFile, this.numModules);
 }
 
 abstract class CompilationError extends CompilationResult {}
@@ -148,6 +146,43 @@
   "dart:typed_data",
 ];
 
+const List<String> _binaryenFlags = [
+  '--enable-gc',
+  '--enable-reference-types',
+  '--enable-multivalue',
+  '--enable-exception-handling',
+  '--enable-nontrapping-float-to-int',
+  '--enable-sign-ext',
+  '--enable-bulk-memory',
+  '--enable-threads',
+  '--no-inline=*<noInline>*',
+  '--closed-world',
+  '--traps-never-happen',
+  '--type-unfinalizing',
+  '-Os',
+  '--type-ssa',
+  '--gufa',
+  '-Os',
+  '--type-merging',
+  '-Os',
+  '--type-finalizing',
+  '--minimize-rec-groups',
+];
+
+const List<String> _binaryenFlagsMultiModule = [
+  '--enable-gc',
+  '--enable-reference-types',
+  '--enable-multivalue',
+  '--enable-exception-handling',
+  '--enable-nontrapping-float-to-int',
+  '--enable-sign-ext',
+  '--enable-bulk-memory',
+  '--enable-threads',
+  '--no-inline=*<noInline>*',
+  '--traps-never-happen',
+  '-Os',
+];
+
 /// Compile a Dart file into a Wasm module.
 ///
 /// Returns `null` if an error occurred during compilation. The
@@ -161,8 +196,7 @@
 /// mappings.
 Future<CompilationResult> compile(
     compiler.WasmCompilerOptions options,
-    FileSystem fileSystem,
-    Uri Function(String moduleName)? sourceMapUrlGenerator,
+    CompilerPhaseInputOutputManager ioManager,
     void Function(CfeDiagnosticMessage) handleDiagnosticMessage) async {
   final wasm.Mode mode;
   if (options.translatorOptions.jsCompatibility) {
@@ -177,15 +211,9 @@
       removeAsserts: !options.translatorOptions.enableAsserts,
       mode: mode);
 
-  if (options.multiRootScheme != null) {
-    fileSystem = MultiRootFileSystem(
-        options.multiRootScheme!,
-        options.multiRoots.isEmpty ? [Uri.base] : options.multiRoots,
-        fileSystem);
-  }
-
   CfeResult? cfeResult;
   TfaResult? tfaResult;
+  CodegenResult? codegenResult;
   CompilationResult? lastResult;
 
   for (final phase in options.phases) {
@@ -194,7 +222,8 @@
         lastResult = await _runCfePhase(
           options,
           target,
-          fileSystem,
+          ioManager.fileSystem,
+          ioManager,
           handleDiagnosticMessage,
         );
         if (lastResult is! CfeResult) return lastResult;
@@ -202,29 +231,40 @@
 
       case compiler.CompilerPhase.tfa:
         lastResult = await _runTfaPhase(
-          cfeResult ?? await _loadCfeResult(options),
+          cfeResult ?? await _loadCfeResult(options, ioManager),
           options,
           target,
-          fileSystem,
+          ioManager,
         );
         if (lastResult is! TfaResult) return lastResult;
         tfaResult = lastResult;
 
       case compiler.CompilerPhase.codegen:
         lastResult = await _runCodegenPhase(
-            tfaResult ?? await _loadTfaResult(options, target, fileSystem),
+            tfaResult ?? await _loadTfaResult(options, target, ioManager),
             options,
-            fileSystem,
-            sourceMapUrlGenerator);
+            ioManager);
+
+        if (lastResult is! CodegenResult) return lastResult;
+        codegenResult = lastResult;
+
+      case compiler.CompilerPhase.opt:
+        lastResult = await _runOptPhase(
+            codegenResult ?? await _loadCodegenResult(options, ioManager),
+            options,
+            ioManager);
+
+        if (lastResult is! OptResult) return lastResult;
     }
   }
 
   return lastResult!;
 }
 
-Future<CfeResult> _loadCfeResult(compiler.WasmCompilerOptions options) async {
-  final component =
-      loadComponentFromBytes(await File.fromUri(options.mainUri).readAsBytes());
+Future<CfeResult> _loadCfeResult(compiler.WasmCompilerOptions options,
+    CompilerPhaseInputOutputManager ioManager) async {
+  final component = Component();
+  await ioManager.readComponent(options.mainUri, component);
   final coreTypes = CoreTypes(component);
   return CfeResult(component, coreTypes);
 }
@@ -233,6 +273,7 @@
     compiler.WasmCompilerOptions options,
     WasmTarget target,
     FileSystem fileSystem,
+    CompilerPhaseInputOutputManager ioManager,
     void Function(CfeDiagnosticMessage) handleDiagnosticMessage) async {
   var hadCompileTimeError = false;
   void diagnosticMessageHandler(CfeDiagnosticMessage message) {
@@ -274,10 +315,7 @@
   if (isDynamicMainModule) {
     final dynamicInterfaceUri = options.dynamicInterfaceUri;
     if (dynamicInterfaceUri != null) {
-      final resolvedDynamicInterfaceUri =
-          await _resolveUri(fileSystem, dynamicInterfaceUri);
-      final contents =
-          File.fromUri(resolvedDynamicInterfaceUri!).readAsStringSync();
+      final contents = await ioManager.readString(dynamicInterfaceUri);
       final dynamicInterfaceYamlFile = DynamicInterfaceYamlFile(contents);
       additionalSources = dynamicInterfaceYamlFile
           .getUserLibraryUris(dynamicInterfaceUri)
@@ -286,7 +324,7 @@
   }
 
   final dynamicMainModuleUri =
-      await _resolveUri(fileSystem, options.dynamicMainModuleUri);
+      await ioManager.resolveUri(options.dynamicMainModuleUri);
   final isDynamicSubmodule =
       options.dynamicModuleType == DynamicModuleType.submodule;
   if (isDynamicSubmodule) {
@@ -322,33 +360,43 @@
   final component = compilerResult!.component!;
 
   if (options.dumpKernelAfterCfe != null) {
-    writeComponentToText(component,
-        path: options.dumpKernelAfterCfe!, showMetadata: true);
+    ioManager.writeComponentAsText(component, options.dumpKernelAfterCfe!);
+  }
+
+  if (options.emitCfe) {
+    await ioManager.writeComponent(component, options.outputFile);
   }
 
   return CfeResult(component, compilerResult.coreTypes!);
 }
 
 Future<TfaResult> _loadTfaResult(compiler.WasmCompilerOptions options,
-    WasmTarget target, FileSystem fileSystem) async {
+    WasmTarget target, CompilerPhaseInputOutputManager ioManager) async {
   final component = createEmptyComponent();
   final recordClassesRepository = _RecordClassesRepository();
   final interopMethodsRepository = _InteropMethodsRepository();
   component.addMetadataRepository(recordClassesRepository);
   component.addMetadataRepository(interopMethodsRepository);
 
-  BinaryBuilderWithMetadata(await File.fromUri(options.mainUri).readAsBytes())
-      .readComponent(component);
+  await ioManager.readComponent(options.mainUri, component);
+
   final coreTypes = CoreTypes(component);
   final libraryIndex = LibraryIndex(component, _librariesToIndex);
   final classHierarchy = ClassHierarchy(component, coreTypes);
   final dynamicMainModuleUri =
-      await _resolveUri(fileSystem, options.dynamicMainModuleUri);
+      await ioManager.resolveUri(options.dynamicMainModuleUri);
   final dynamicInterfaceUri =
-      await _resolveUri(fileSystem, options.dynamicInterfaceUri);
+      await ioManager.resolveUri(options.dynamicInterfaceUri);
 
-  final moduleStrategy = _createModuleStrategy(options, component, coreTypes,
-      target, classHierarchy, dynamicMainModuleUri, dynamicInterfaceUri);
+  final moduleStrategy = await _createModuleStrategy(
+      options,
+      ioManager,
+      component,
+      coreTypes,
+      target,
+      classHierarchy,
+      dynamicMainModuleUri,
+      dynamicInterfaceUri);
 
   final recordClasses = <RecordShape, Class>{};
   recordClassesRepository.mapping.forEach((cls, shape) {
@@ -364,7 +412,7 @@
 
   if (isDynamicSubmodule) {
     mainModuleMetadata =
-        await deserializeMainModuleMetadata(component, options);
+        await deserializeMainModuleMetadata(component, ioManager);
     mainModuleMetadata.verifyDynamicSubmoduleOptions(options);
   } else if (isDynamicMainModule) {
     MainModuleMetadata.verifyMainModuleOptions(options);
@@ -378,7 +426,7 @@
     CfeResult cfeResult,
     compiler.WasmCompilerOptions options,
     WasmTarget target,
-    FileSystem fileSystem) async {
+    CompilerPhaseInputOutputManager ioManager) async {
   var CfeResult(:component, :coreTypes) = cfeResult;
 
   ClosedWorldClassHierarchy classHierarchy =
@@ -396,9 +444,9 @@
       classHierarchy);
 
   final dynamicMainModuleUri =
-      await _resolveUri(fileSystem, options.dynamicMainModuleUri);
+      await ioManager.resolveUri(options.dynamicMainModuleUri);
   final dynamicInterfaceUri =
-      await _resolveUri(fileSystem, options.dynamicInterfaceUri);
+      await ioManager.resolveUri(options.dynamicInterfaceUri);
   final isDynamicMainModule =
       options.dynamicModuleType == DynamicModuleType.main;
   final isDynamicSubmodule =
@@ -431,17 +479,33 @@
   target.recordClasses = recordClasses;
 
   if (options.dumpKernelBeforeTfa != null) {
-    writeComponentToText(component,
-        path: options.dumpKernelBeforeTfa!, showMetadata: true);
+    ioManager.writeComponentAsText(component, options.dumpKernelBeforeTfa!);
   }
 
-  final moduleStrategy = _createModuleStrategy(options, component, coreTypes,
-      target, classHierarchy, dynamicMainModuleUri, dynamicInterfaceUri);
+  final moduleStrategy = await _createModuleStrategy(
+      options,
+      ioManager,
+      component,
+      coreTypes,
+      target,
+      classHierarchy,
+      dynamicMainModuleUri,
+      dynamicInterfaceUri);
 
-  // DynamicMainModuleStrategy.prepareComponent() includes
-  // dynamic_interface_annotator transformation which annotates AST nodes with
-  // pragmas and should precede other transformations looking at pragmas
-  // (such as mixin_deduplication and TFA).
+  // Ensure we annotate AST nodes as entry points prior to other transformations
+  // looking at pragmas (such as mixin_deduplication and TFA).
+  moduleStrategy.addEntryPoints();
+
+  mixin_deduplication.transformLibraries(
+      librariesToTransform, coreTypes, target,
+      // This puts each canonical mixin application in its own library so that
+      // the import graph does not need to add edges to a single library
+      // containing all mixin applications.
+      useUniqueDeduplicationLibrary:
+          options.translatorOptions.enableDeferredLoading);
+
+  // Ensure this happens after mixin deduplication so that all libraries and
+  // classes are present.
   moduleStrategy.prepareComponent();
 
   final hasDeferredImports = component.libraries
@@ -450,19 +514,17 @@
     DeferredLoadingLowering.markRuntimeFunctionsAsEntrypoints(coreTypes);
   }
 
-  mixin_deduplication.transformLibraries(
-      librariesToTransform, coreTypes, target);
-
   MainModuleMetadata mainModuleMetadata =
       MainModuleMetadata.empty(options.translatorOptions, options.environment);
 
   if (isDynamicSubmodule) {
     mainModuleMetadata =
-        await deserializeMainModuleMetadata(component, options);
+        await deserializeMainModuleMetadata(component, ioManager);
     mainModuleMetadata.verifyDynamicSubmoduleOptions(options);
   } else if (isDynamicMainModule) {
     MainModuleMetadata.verifyMainModuleOptions(options);
-    await serializeMainModuleComponent(component, dynamicMainModuleUri!,
+    await serializeMainModuleComponent(
+        ioManager, component, dynamicMainModuleUri!,
         optimized: false);
   }
 
@@ -477,14 +539,41 @@
     // Keep the flags in-sync with
     // pkg/vm/test/transformations/type_flow/transformer_test.dart
     globalTypeFlow.transformComponent(target, coreTypes, component,
-        useRapidTypeAnalysis: false);
+        useRapidTypeAnalysis: true,
+        treeShakeProtobufs: options.translatorOptions.enableProtobufTreeShaker,
+        treeShakeProtobufMixins:
+            options.translatorOptions.enableProtobufMixinTreeShaker);
 
     // TFA may have tree shaken members that are in the library index cache.
     // To avoid having dangling references in the index, we create a new one.
     libraryIndex = LibraryIndex(component, _librariesToIndex);
   }
 
-  if (options.phases.last == compiler.CompilerPhase.tfa) {
+  // NOTE: The [Library.dependencies] will be in a weird state after TFA:
+  //
+  //   * a library may use members of other libraries without an import that
+  //     provides the member
+  //
+  //   * a library may have many unused imports
+  //
+  // -> See https://dartbug.com/62112 & https://dartbug.com/62111 for details.
+  //
+  // At this point dart2wasm uses library dependencies only for one purpose,
+  // namely for partitioning all libraries into deferred wasm modules. So we now
+  // perform a dart2wasm specific pruning of library imports.
+  //
+  // See [pruneLibraryDependencies] for more information.
+  //
+  // NOTE: In stress test mode the component is manually split into one wasm
+  // module per library without making imports of libraries deferred. To ensure
+  // all modules get loaded before main it injects dummy [LoadLibrary]
+  // expressions that would be optimized out by [pruneLibraryDependencies]. So
+  // we disable the pruning in this case.
+  if (!options.translatorOptions.enableMultiModuleStressTestMode) {
+    pruneLibraryDependencies(libraryIndex, component);
+  }
+
+  if (options.emitTfa) {
     // Store metadata needed for codegen so that it can be serialized.
     final recordClassesRepo = _RecordClassesRepository();
     recordClasses.forEach((shape, cls) {
@@ -506,19 +595,27 @@
   }());
 
   if (options.dumpKernelAfterTfa != null) {
-    writeComponentToText(component,
-        path: options.dumpKernelAfterTfa!, showMetadata: true);
+    ioManager.writeComponentAsText(component, options.dumpKernelAfterTfa!);
+  }
+
+  if (options.emitTfa) {
+    await ioManager.writeComponent(component, options.outputFile);
   }
 
   return TfaResult(component, coreTypes, libraryIndex, moduleStrategy,
       mainModuleMetadata, jsInteropMethods, recordClasses);
 }
 
+Future<CodegenResult> _loadCodegenResult(compiler.WasmCompilerOptions options,
+    CompilerPhaseInputOutputManager ioManager) async {
+  return CodegenResult(options.mainUri.toFilePath(),
+      await ioManager.getModuleCount(options.mainUri));
+}
+
 Future<CompilationResult> _runCodegenPhase(
     TfaResult tfaSuccess,
     compiler.WasmCompilerOptions options,
-    FileSystem fileSystem,
-    Uri Function(String moduleName)? sourceMapUrlGenerator) async {
+    CompilerPhaseInputOutputManager ioManager) async {
   final TfaResult(
     :component,
     :coreTypes,
@@ -544,29 +641,32 @@
 
   String? depFile = options.depFile;
   if (depFile != null) {
-    writeDepfile(
-        fileSystem, component.uriToSource.keys, options.outputFile, depFile);
+    writeDepfile(ioManager.fileSystem, component.uriToSource.keys,
+        options.outputFile, depFile);
   }
 
   final generateSourceMaps = options.translatorOptions.generateSourceMaps;
-  final modules = translator.translate(sourceMapUrlGenerator);
-  final wasmModules = <String, ({Uint8List moduleBytes, String? sourceMap})>{};
+  final modules = translator.translate(ioManager.sourceMapUrlGenerator);
+  final writeFutures = <Future<void>>[];
   modules.forEach((moduleOutput, module) {
     if (moduleOutput.skipEmit) return;
     final serializer = Serializer();
     module.serialize(serializer);
-    final wasmModuleSerialized = serializer.data;
+    writeFutures.add(
+        ioManager.writeWasmModule(serializer.data, moduleOutput.moduleName));
 
-    final sourceMap =
-        generateSourceMaps ? serializer.sourceMapSerializer.serialize() : null;
-    wasmModules[moduleOutput.moduleName] =
-        (moduleBytes: wasmModuleSerialized, sourceMap: sourceMap);
+    if (generateSourceMaps) {
+      final sourceMap = serializer.sourceMapSerializer.serialize();
+      writeFutures.add(
+          ioManager.writeWasmSourceMap(sourceMap, moduleOutput.moduleName));
+    }
   });
+  await Future.wait(writeFutures);
 
   final jsRuntimeFinalizer = js.RuntimeFinalizer(jsInteropMethods);
 
   final dynamicMainModuleUri =
-      await _resolveUri(fileSystem, options.dynamicMainModuleUri);
+      await ioManager.resolveUri(options.dynamicMainModuleUri);
   final isDynamicMainModule =
       options.dynamicModuleType == DynamicModuleType.main;
   final isDynamicSubmodule =
@@ -578,6 +678,7 @@
           translator.options.requireJsStringBuiltin,
           translator.internalizedStringsForJSRuntime)
       : jsRuntimeFinalizer.generate(
+          moduleOutputData.mainModule.moduleImportName,
           translator.functions.translatedProcedures,
           translator.internalizedStringsForJSRuntime,
           translator.options.requireJsStringBuiltin,
@@ -587,8 +688,9 @@
 
   final supportJs = _generateSupportJs(options.translatorOptions);
   if (isDynamicMainModule) {
-    await serializeMainModuleMetadata(component, translator, options);
-    await serializeMainModuleComponent(component, dynamicMainModuleUri!,
+    await serializeMainModuleMetadata(component, translator, ioManager);
+    await serializeMainModuleComponent(
+        ioManager, component, dynamicMainModuleUri!,
         optimized: true);
   }
 
@@ -597,17 +699,39 @@
     await writeLoadIdsFile(component, coreTypes, options, loadingMap);
   }
 
-  return CodegenResult(wasmModules, jsRuntime, supportJs);
+  await ioManager.writeJsRuntime(jsRuntime);
+  await ioManager.writeSupportJs(supportJs);
+
+  return CodegenResult(options.outputFile, modules.length);
 }
 
-ModuleStrategy _createModuleStrategy(
+Future<CompilationResult> _runOptPhase(
+    CodegenResult codegenResult,
     compiler.WasmCompilerOptions options,
+    CompilerPhaseInputOutputManager ioManager) async {
+  final futures = <Future<void>>[];
+  final numModules = codegenResult.numModules;
+  for (int i = 0; i < numModules; i++) {
+    futures.add(ioManager.runWasmOpt(
+        codegenResult.mainWasmFile,
+        i,
+        options.useMultiModuleOpt
+            ? _binaryenFlagsMultiModule
+            : _binaryenFlags));
+  }
+  await Future.wait(futures);
+  return OptResult(options.outputFile, numModules);
+}
+
+Future<ModuleStrategy> _createModuleStrategy(
+    compiler.WasmCompilerOptions options,
+    CompilerPhaseInputOutputManager ioManager,
     Component component,
     CoreTypes coreTypes,
     WasmTarget target,
     ClassHierarchy classHierarchy,
     Uri? dynamicMainModuleUri,
-    Uri? dynamicInterfaceUri) {
+    Uri? dynamicInterfaceUri) async {
   final isDynamicMainModule =
       options.dynamicModuleType == DynamicModuleType.main;
   final isDynamicSubmodule =
@@ -622,7 +746,7 @@
         component,
         coreTypes,
         options,
-        File.fromUri(dynamicInterfaceUri!).readAsStringSync(),
+        await ioManager.readString(dynamicInterfaceUri!),
         options.dynamicInterfaceUri!);
   } else if (isDynamicSubmodule) {
     return DynamicSubmoduleStrategy(
@@ -662,15 +786,6 @@
   if (mainHasType(mainArg0Type)) return patchToReturnMainTearOff(mainTearOff0);
 }
 
-Future<Uri?> _resolveUri(FileSystem fileSystem, Uri? uri) async {
-  if (uri == null) return null;
-  var fileSystemEntity = fileSystem.entityForUri(uri);
-  if (fileSystemEntity is MultiRootFileSystemEntity) {
-    fileSystemEntity = await fileSystemEntity.delegate;
-  }
-  return fileSystemEntity.uri;
-}
-
 class _RecordClassesRepository extends MetadataRepository<RecordShape> {
   static const String _tag = 'dart2wasm.recordClasses';
   @override
@@ -765,9 +880,3 @@
   ];
   return '(${requiredFeatures.join('&&')})';
 }
-
-String writeComponentToString(Component component) {
-  final buffer = StringBuffer();
-  Printer(buffer).writeComponentFile(component);
-  return '$buffer';
-}
diff --git a/pkg/dart2wasm/lib/compiler_options.dart b/pkg/dart2wasm/lib/compiler_options.dart
index dcb81c7..bd03cd6 100644
--- a/pkg/dart2wasm/lib/compiler_options.dart
+++ b/pkg/dart2wasm/lib/compiler_options.dart
@@ -20,7 +20,8 @@
 enum CompilerPhase {
   cfe,
   tfa,
-  codegen;
+  codegen,
+  opt;
 
   static CompilerPhase parse(String name) {
     for (final phase in values) {
@@ -31,6 +32,7 @@
 }
 
 class WasmCompilerOptions {
+  static const int mainModuleId = 0;
   final TranslatorOptions translatorOptions = TranslatorOptions();
 
   Uri? platformPath;
@@ -54,6 +56,9 @@
   String? dumpKernelBeforeTfa;
   String? dumpKernelAfterTfa;
   bool dryRun = false;
+  Uri? wasmOptPath;
+  bool saveUnopt = false;
+  bool stripWasm = true;
   List<CompilerPhase> phases = const [
     CompilerPhase.cfe,
     CompilerPhase.tfa,
@@ -67,6 +72,21 @@
 
   bool get enableDynamicModules => dynamicModuleType != null;
 
+  bool get useMultiModuleOpt =>
+      translatorOptions.enableDeferredLoading ||
+      translatorOptions.enableMultiModuleStressTestMode ||
+      enableDynamicModules;
+
+  String moduleNameForId(String filePath, int id, {bool emitAsMain = false}) =>
+      emitAsMain || id == mainModuleId
+          ? path.basename(filePath)
+          : path.basename(path.setExtension(filePath, '_module$id.wasm'));
+
+  bool get emitCfe => phases.last == CompilerPhase.cfe;
+  bool get emitTfa => phases.last == CompilerPhase.tfa;
+  bool get emitCodegen => phases.last == CompilerPhase.tfa;
+  bool get readCodegen => phases.first == CompilerPhase.codegen;
+
   void validate() {
     if (translatorOptions.importSharedMemory &&
         translatorOptions.sharedMemoryMaxPages == null) {
@@ -125,6 +145,10 @@
         if (inputExtension != '.dill') {
           throw ArgumentError('Input to codegen phase must be a .dill file.');
         }
+      case CompilerPhase.opt:
+        if (inputExtension != '.wasm') {
+          throw ArgumentError('Input to opt phase must be a .wasm file.');
+        }
     }
 
     // Ensure correct output file type
@@ -143,6 +167,16 @@
           throw ArgumentError(
               'Output from codegen phase must be a .wasm file.');
         }
+      case CompilerPhase.opt:
+        if (outputExtension != '.wasm') {
+          throw ArgumentError('Output from opt phase must be a .wasm file.');
+        }
+    }
+
+    if (phases.contains(CompilerPhase.opt) &&
+        translatorOptions.optimizationLevel == 0) {
+      throw ArgumentError(
+          'Cannot specify "opt" phase with optimization level 0');
     }
   }
 }
diff --git a/pkg/dart2wasm/lib/constants.dart b/pkg/dart2wasm/lib/constants.dart
index 257fbe3..f9bed9a 100644
--- a/pkg/dart2wasm/lib/constants.dart
+++ b/pkg/dart2wasm/lib/constants.dart
@@ -25,14 +25,48 @@
 /// the main module).
 const bool forceDelayedConstantDefinition = false;
 
-class ConstantDefinition {
-  final w.ModuleBuilder module;
+/// Describes where the constant slot is defined and how to access it.
+sealed class ConstantDefinition {
+  bool get isLazy;
+  w.BaseFunction initializer(w.ModuleBuilder usingModule);
+}
+
+/// The value for the constant is stored in a global slot.
+///
+/// We use this mechanism if the constant is accessed only within a given
+/// module.
+final class GlobalBasedConstantDefinition extends ConstantDefinition {
   final w.Global global;
   final w.BaseFunction? _initFunction;
 
-  ConstantDefinition(this.module, this.global, this._initFunction);
+  GlobalBasedConstantDefinition(this.global, this._initFunction);
 
+  @override
   bool get isLazy => _initFunction != null;
+
+  @override
+  w.BaseFunction initializer(w.ModuleBuilder usingModule) => _initFunction!;
+}
+
+/// The value for the (lazy) constant is stored in a table slot.
+///
+/// We use this mechanism if the constant is accessed across modules and each
+/// module will bring it's own copy of the initializer function.
+final class TableBasedConstantDefinition extends ConstantDefinition {
+  final w.Table table;
+  final int tableIndex;
+  final Map<w.ModuleBuilder, w.BaseFunction> _initFunctionPerUsingModule;
+
+  TableBasedConstantDefinition(
+      this.table, this.tableIndex, this._initFunctionPerUsingModule);
+
+  @override
+  bool get isLazy => true;
+
+  @override
+  w.BaseFunction initializer(w.ModuleBuilder usingModule) {
+    return _initFunctionPerUsingModule[usingModule]!;
+  }
 }
 
 class ConstantInfo {
@@ -84,11 +118,21 @@
       void Function(w.Global) printLazyInitializer) {
     final definition = _definition;
     if (definition != null) {
-      final initFunction = definition._initFunction;
-      if (initFunction != null) {
-        printFunction(initFunction);
-      } else {
-        printLazyInitializer(definition.global);
+      switch (definition) {
+        case GlobalBasedConstantDefinition():
+          final initFunction = definition._initFunction;
+          if (initFunction != null) {
+            printFunction(initFunction);
+          } else {
+            printLazyInitializer(definition.global);
+          }
+          break;
+        case TableBasedConstantDefinition():
+          for (final initFunction
+              in definition._initFunctionPerUsingModule.values) {
+            printFunction(initFunction);
+          }
+          break;
       }
     }
   }
@@ -253,10 +297,11 @@
           _constantAccessor._defineConstantInModuleRecursive(baseModule, info);
     }
 
-    if (definition != null && !definition.isLazy) {
-      if (definition.module == usingModule) return true;
-      if (definition.module == baseModule) return true;
-      if (definition.module == translator.mainModule) return true;
+    if (definition is GlobalBasedConstantDefinition && !definition.isLazy) {
+      final definingModule = definition.global.enclosingModule;
+      if (definingModule == usingModule.module) return true;
+      if (definingModule == baseModule.module) return true;
+      if (definingModule == translator.mainModule.module) return true;
     }
 
     return false;
@@ -1135,17 +1180,17 @@
 
         final b = function.body;
 
-        final closureLocal = function.locals[0];
         final typeArgsListLocal = function.locals[1]; // empty
         final posArgsListLocal = function.locals[2];
         final namedArgsListLocal = function.locals[3];
 
-        b.local_get(closureLocal);
+        constants.instantiateConstant(
+            b, tearOffConstantInfo.constant, translator.topTypeNonNullable);
         constants.instantiateConstant(
             b, typeArgsArrayConstantInfo.constant, typeArgsListLocal.type);
         b.local_get(posArgsListLocal);
         b.local_get(namedArgsListLocal);
-        translator.callFunction(tearOffClosure.dynamicCallEntry, b);
+        translator.callFunction(tearOffClosure.dynamicCallEntry!, b);
         b.end();
 
         return function;
@@ -1190,8 +1235,8 @@
       void fillVtableEntry(int posArgCount, NameCombination nameCombination) {
         final fieldIndex = instantiationOfTearOffRepresentation
             .fieldIndexForSignature(posArgCount, nameCombination.names);
-        final signature =
-            instantiationOfTearOffRepresentation.getVtableFieldType(fieldIndex);
+        final signature = instantiationOfTearOffRepresentation.vtableStruct
+            .getVtableEntryAt(fieldIndex);
 
         w.BaseFunction function;
         if (nameCombination.names.isNotEmpty &&
@@ -1224,8 +1269,10 @@
         declareAndAddRefFunc(function);
       }
 
-      void makeVtable(w.BaseFunction dynamicCallEntry) {
-        declareAndAddRefFunc(dynamicCallEntry);
+      void makeVtable(w.BaseFunction? dynamicCallEntry) {
+        if (dynamicCallEntry != null) {
+          declareAndAddRefFunc(dynamicCallEntry);
+        }
         assert(!instantiationOfTearOffRepresentation.isGeneric);
 
         if (translator.dynamicModuleSupportEnabled) {
@@ -1259,7 +1306,10 @@
       }
       b.struct_new(tearOffRepresentation.instantiationContextStruct!);
 
-      makeVtable(makeDynamicCallEntry());
+      makeVtable((translator.dynamicModuleSupportEnabled ||
+              translator.closureLayouter.usesFunctionApplyWithNamedArguments)
+          ? makeDynamicCallEntry()
+          : null);
       constants.instantiateConstant(
           b, functionTypeInfo.constant, types.nonNullableTypeType);
       b.struct_new(closureStruct);
@@ -1472,6 +1522,12 @@
   /// transitively refers to.
   final Map<ConstantInfo, Set<w.ModuleBuilder>> moduleUses = {};
 
+  /// We maintain a table for lazily initialized constants that are used across
+  /// modules. This avoids having many invidiual globals of the same type with
+  /// null initializer.
+  final Map<w.RefType, w.TableBuilder> lazySlotTables = {};
+  late final tableImporter = WasmTableImporter(translator, 'constant-table');
+
   _ConstantAccessor(this.translator);
 
   /// Reads a constant.
@@ -1501,7 +1557,7 @@
 
     if (existingDefinition != null) {
       // We already have a defined constant. Possibly import it and then use it.
-      return _readDefinedConstant(b, info, existingDefinition);
+      return _readDefinedConstant(b, b.moduleBuilder, info, existingDefinition);
     }
 
     // We have to guarantee that using the constant synchronously works. If the
@@ -1517,7 +1573,7 @@
         usingModule == translator.mainModule) {
       final definition =
           _defineConstantInModuleRecursive(translator.mainModule, info);
-      return _readDefinedConstant(b, info, definition);
+      return _readDefinedConstant(b, usingModule, info, definition);
     }
 
     // Remember for the transitive DAG of [constant] that we use it in this
@@ -1532,19 +1588,6 @@
 
     rememberConstantUse(info);
 
-    // If we have uses in multiple modules, we should place it a module that is
-    // guaranteed to be loaded at the use time of those modules.
-    //
-    // => We are conservative and assign it to the main module.
-    //
-    // NOTE: Improve this by finding the closest common ancestor between the
-    // modules in the loading graph.
-    if (!forceDelayedConstantDefinition && moduleUses[info]!.length > 1) {
-      final definition =
-          _defineConstantInModuleRecursive(translator.mainModule, info);
-      return _readDefinedConstant(b, info, definition);
-    }
-
     // The current module is the only one using the constant atm, but in the
     // future other modules may also use it. So we don't know where to place
     // it just yet.
@@ -1559,37 +1602,61 @@
     if (patchInstructions != null) {
       translator.linkingActions.add(() {
         // All constant uses have been discovered during codegen phase so we can
-        // know decide into which module to place the constant and patch the
+        // now decide into which module to place the constant and patch the
         // constant access to load it from there.
         final definition =
             info._definition ?? _defineConstantInModuleRecursive(null, info);
-        _readDefinedConstant(patchInstructions, info, definition);
+        _readDefinedConstant(patchInstructions, usingModule, info, definition);
       });
     }
 
     return info.type;
   }
 
-  w.ValueType _readDefinedConstant(w.InstructionsBuilder b, ConstantInfo info,
+  /// Reads the given constant.
+  ///
+  /// Normally `b.moduleBuilder == usingModule`, except for the situation where
+  /// the read happens under a load guard.
+  ///
+  /// In that case the `b.moduleBuilder` may not have an initializer function
+  /// (to reduce its size) and instead it can rely on the load guarded deferred
+  /// module to be loaded by the time we read the constant, so it can use that
+  /// deferred module's constant initializer.
+  w.ValueType _readDefinedConstant(
+      w.InstructionsBuilder b,
+      w.ModuleBuilder usingModule,
+      ConstantInfo info,
       ConstantDefinition definition) {
-    final globalDefinition = definition.global;
-    final globalInitializer = definition._initFunction;
-
     // Eagerly initialized constant.
-    if (globalInitializer == null) {
-      translator.globals.readGlobal(b, globalDefinition);
-      return globalDefinition.type.type;
+    if (definition is GlobalBasedConstantDefinition && !definition.isLazy) {
+      translator.globals.readGlobal(b, definition.global);
+      return definition.global.type.type;
     }
 
     // Lazily initialized constant.
-    w.ValueType type = globalDefinition.type.type.withNullability(false);
-    w.Label done = b.block(const [], [type]);
-    translator.globals.readGlobal(b, globalDefinition);
-    b.br_on_non_null(done);
+    assert(definition.isLazy);
 
-    translator.callFunction(globalInitializer, b);
-    b.end();
-    return type;
+    switch (definition) {
+      case GlobalBasedConstantDefinition():
+        // Use global & lazy initializer function.
+        w.Label done = b.block(const [], [info.type]);
+        translator.globals.readGlobal(b, definition.global);
+        b.br_on_non_null(done);
+        translator.callFunction(definition.initializer(usingModule), b);
+        b.end();
+        break;
+      case TableBasedConstantDefinition():
+        // Use table & lazy initializer function.
+        w.Label done = b.block(const [], [info.type]);
+        b.i32_const(definition.tableIndex);
+        b.table_get(tableImporter.get(definition.table, b.moduleBuilder));
+        b.br_on_non_null(done);
+        translator.callFunction(definition.initializer(usingModule), b);
+        b.end();
+        break;
+    }
+
+    return info.type;
   }
 
   /// If [assignedModule] is not null assigns all undefined constants to that
@@ -1612,46 +1679,65 @@
     //
     // We want to choose a module that is available by the time the constant is
     // used. If only one module uses the constant we place it in that module. If
-    // it's used by multiple modules we (conservatively) place it in the main
-    // module.
-    //
-    // NOTE: Improve this by finding the closest common ancestor between the
-    // modules in the loading graph.
+    // it's used by multiple modules we make a global in the main module and
+    // make all using modules bring an initializer function with them.
+    Set<w.ModuleBuilder>? deferredUses;
     if (assignedModule == null) {
       final uses = moduleUses[info]!;
       assert(uses.isNotEmpty);
-      assignedModule = uses.length == 1 ? uses.single : translator.mainModule;
+      if (uses.length == 1) {
+        assignedModule = uses.single;
+      } else if (uses.contains(translator.mainModule)) {
+        assignedModule = translator.mainModule;
+      } else {
+        // Will become lazy constant with global in main module and initializer
+        // in all using modules.
+        deferredUses = uses;
+      }
     }
-    return _defineConstantInModule(assignedModule, info);
+    return _defineConstantInModule(assignedModule, deferredUses, info);
   }
 
-  ConstantDefinition _defineConstantInModule(
-      w.ModuleBuilder targetModule, ConstantInfo info) {
+  ConstantDefinition _defineConstantInModule(w.ModuleBuilder? targetModule,
+      Set<w.ModuleBuilder>? deferredUses, ConstantInfo info) {
+    assert((targetModule != null) != (deferredUses != null));
+    assert(deferredUses == null ||
+        deferredUses.length > 1 &&
+            !deferredUses.contains(translator.mainModule));
+
     final constant = info.constant;
 
     // The constant itself may be forced to be lazy (e.g. array size too large).
     bool lazy = !info.canBeEager;
 
+    // If there's uses in N different deferred modules, we make it lazy, define
+    // global in main module & initializer in each using module.
+    lazy |= deferredUses != null;
+
     // The constant's children may influence laziness.
     if (!lazy) {
       for (final child in info.children) {
         final definition = child._definition!;
 
         // If the child is lazy, this constant becomes lazy.
-        if (definition._initFunction != null) {
+        if (definition.isLazy) {
           lazy = true;
           break;
         }
 
+        // The child isn't lazy, so it cannot be a table-based constant
+        // definition.
+        definition as GlobalBasedConstantDefinition;
+
         // If we place the constant in a module that may be loaded before the
         // constants of children, it must get initialized lazily.
-        final childModule = definition.module;
+        final childModule = definition.global.enclosingModule;
         final baseModule = translator.isDynamicSubmodule
             ? translator.dynamicSubmodule
             : translator.mainModule;
-        if (childModule != targetModule &&
-            childModule != translator.mainModule &&
-            childModule != baseModule) {
+        if (childModule != targetModule?.module &&
+            childModule != translator.mainModule.module &&
+            childModule != baseModule.module) {
           lazy = true;
           break;
         }
@@ -1663,25 +1749,44 @@
     if (!lazy) {
       // The constant codegen code may decide to make it lazy depending on which
       // module it's going to be placed in.
-      lazy = info._forceLazy(info, targetModule);
+      lazy = info._forceLazy(info, targetModule!);
     }
 
     // Define the lazy or non-lazy constant in the module.
     final ConstantDefinition definition;
     if (lazy) {
-      final (global, initFunction) = _createLazyConstant(targetModule, info);
-      definition = ConstantDefinition(targetModule, global, initFunction);
+      if (targetModule == null) {
+        final w.TableBuilder table = lazySlotTables.putIfAbsent(info.type, () {
+          return translator.mainModule.tables
+              .define(info.type.withNullability(true), 0);
+        });
+        final tableIndex = table.minSize++;
+        final name = _constantName(info.constant);
+        final initFunctions = {
+          for (final usingModule in deferredUses!)
+            usingModule: _createLazyTableInitializer(
+                usingModule, table, tableIndex, name, info),
+        };
+        definition =
+            TableBasedConstantDefinition(table, tableIndex, initFunctions);
+      } else {
+        final (global, initFunction) = _createLazyConstant(targetModule, info);
+        definition = GlobalBasedConstantDefinition(global, initFunction);
+      }
     } else {
-      final global = _createNonLazyConstant(targetModule, info);
-      definition = ConstantDefinition(targetModule, global, null);
+      final global = _createNonLazyConstant(targetModule!, info);
+      definition = GlobalBasedConstantDefinition(global, null);
     }
     info.setDefinition(definition);
 
     if (info.exportByMainApp) {
       assert(translator.dynamicModuleSupportEnabled &&
           !translator.isDynamicSubmodule);
+      // Current dynamic module implementation requires main module to be
+      // monolitic.
+      definition as GlobalBasedConstantDefinition;
       translator.exporter.exportDynamicConstant(
-          targetModule, constant, definition.global,
+          targetModule!, constant, definition.global,
           initializer: definition._initFunction);
     }
     return definition;
@@ -1714,39 +1819,72 @@
     }
 
     info._definition =
-        ConstantDefinition(fakeMainApp, fakeGlobal, fakeInitializer);
+        GlobalBasedConstantDefinition(fakeGlobal, fakeInitializer);
   }
 
   (w.GlobalBuilder, w.FunctionBuilder) _createLazyConstant(
       w.ModuleBuilder targetModule, ConstantInfo info) {
-    final constant = info.constant;
-    final type = info.type;
-    final generator = info._codeGen;
+    final name = _constantName(info.constant);
 
-    // Create uninitialized global and function to initialize it.
+    final definedGlobal = _createLazyGlobal(targetModule, name, info);
+    final initFunction =
+        _createLazyGlobalInitializer(targetModule, definedGlobal, name, info);
 
-    final name = _constantName(constant);
-    final globalType = w.GlobalType(type.withNullability(true));
-    final definedGlobal = targetModule.globals.define(globalType, name);
+    return (definedGlobal, initFunction);
+  }
+
+  w.GlobalBuilder _createLazyGlobal(
+      w.ModuleBuilder module, String name, ConstantInfo info) {
+    final globalType = w.GlobalType(info.type.withNullability(true));
+    final definedGlobal = module.globals.define(globalType, name);
     definedGlobal.initializer.ref_null(w.HeapType.none);
     definedGlobal.initializer.end();
+    return definedGlobal;
+  }
 
+  w.FunctionBuilder _createLazyGlobalInitializer(w.ModuleBuilder module,
+      w.GlobalBuilder definedGlobal, String name, ConstantInfo info) {
+    final type = info.type;
     final initFunctionType =
         translator.typesBuilder.defineFunction(const [], [type]);
-    final initFunction = targetModule.functions
-        .define(initFunctionType, '$name (lazy initializer)}');
-    final b2 = initFunction.body;
-    generator(info, b2, true);
+    final initFunction =
+        module.functions.define(initFunctionType, '$name (lazy initializer)}');
+    final b = initFunction.body;
+    info._codeGen(info, b, true);
     if (info.needsRuntimeCanonicalization) {
-      final valueLocal = b2.addLocal(type);
-      constant.accept(ConstantCanonicalizer(translator, b2, valueLocal));
+      final valueLocal = b.addLocal(type);
+      info.constant.accept(ConstantCanonicalizer(translator, b, valueLocal));
     }
-    w.Local temp = b2.addLocal(type);
-    b2.local_tee(temp);
-    b2.global_set(definedGlobal);
-    b2.local_get(temp);
-    b2.end();
-    return (definedGlobal, initFunction);
+    w.Local temp = b.addLocal(type);
+    b.local_tee(temp);
+    translator.globals.writeGlobal(b, definedGlobal);
+    b.local_get(temp);
+    b.end();
+
+    return initFunction;
+  }
+
+  w.FunctionBuilder _createLazyTableInitializer(w.ModuleBuilder module,
+      w.TableBuilder table, int tableIndex, String name, ConstantInfo info) {
+    final type = info.type;
+    final initFunctionType =
+        translator.typesBuilder.defineFunction(const [], [type]);
+    final initFunction =
+        module.functions.define(initFunctionType, '$name (lazy initializer)}');
+    final b = initFunction.body;
+    b.i32_const(tableIndex);
+    info._codeGen(info, b, true);
+    if (info.needsRuntimeCanonicalization) {
+      final valueLocal = b.addLocal(type);
+      info.constant.accept(ConstantCanonicalizer(translator, b, valueLocal));
+    }
+    w.Local temp = b.addLocal(type);
+    b.local_tee(temp);
+    b.table_set(tableImporter.get(table, module));
+    b.local_get(temp);
+    b.end();
+
+    return initFunction;
   }
 
   w.GlobalBuilder _createNonLazyConstant(
diff --git a/pkg/dart2wasm/lib/dart2wasm.dart b/pkg/dart2wasm/lib/dart2wasm.dart
index 8050c1f..56875d8 100644
--- a/pkg/dart2wasm/lib/dart2wasm.dart
+++ b/pkg/dart2wasm/lib/dart2wasm.dart
@@ -19,13 +19,14 @@
 
 final List<Option> options = [
   Flag("help", (o, _) {}, abbr: "h", negatable: false, defaultsTo: false),
+  IntOption("optimization-level",
+      (o, value) => o.translatorOptions.optimizationLevel = value,
+      abbr: "O"),
   Flag("import-shared-memory",
       (o, value) => o.translatorOptions.importSharedMemory = value,
       defaultsTo: _d.translatorOptions.importSharedMemory),
-  Flag("inlining", (o, value) => o.translatorOptions.inlining = value,
-      defaultsTo: _d.translatorOptions.inlining),
-  Flag("minify", (o, value) => o.translatorOptions.minify = value,
-      defaultsTo: _d.translatorOptions.minify),
+  Flag("inlining", (o, value) => o.translatorOptions.inliningOverride = value),
+  Flag("minify", (o, value) => o.translatorOptions.minifyOverride = value),
   Flag("dry-run", (o, value) => o.dryRun = value, defaultsTo: _d.dryRun),
   StringMultiOption(
       "phases",
@@ -49,16 +50,22 @@
       (o, value) => o.translatorOptions.omitExplicitTypeChecks = value,
       defaultsTo: _d.translatorOptions.omitExplicitTypeChecks),
   Flag("omit-implicit-checks",
-      (o, value) => o.translatorOptions.omitImplicitTypeChecks = value,
+      (o, value) => o.translatorOptions.omitImplicitTypeChecksOverride = value,
       defaultsTo: _d.translatorOptions.omitImplicitTypeChecks),
   Flag("omit-bounds-checks", (o, value) {
-    o.translatorOptions.omitBoundsChecks = value;
+    o.translatorOptions.omitBoundsChecksOverride = value;
   }, defaultsTo: _d.translatorOptions.omitBoundsChecks),
   Flag("verbose", (o, value) => o.translatorOptions.verbose = value,
       defaultsTo: _d.translatorOptions.verbose),
   Flag("verify-type-checks",
       (o, value) => o.translatorOptions.verifyTypeChecks = value,
       defaultsTo: _d.translatorOptions.verifyTypeChecks),
+  Flag('enable-protobuf-tree-shaker',
+      (o, value) => o.translatorOptions.enableProtobufTreeShaker = value,
+      defaultsTo: _d.translatorOptions.enableProtobufTreeShaker),
+  Flag('enable-protobuf-mixin-tree-shaker',
+      (o, value) => o.translatorOptions.enableProtobufMixinTreeShaker = value,
+      defaultsTo: _d.translatorOptions.enableProtobufMixinTreeShaker),
   Flag("enable-experimental-wasm-interop",
       (o, value) => o.translatorOptions.enableExperimentalWasmInterop = value,
       defaultsTo: _d.translatorOptions.enableExperimentalWasmInterop),
@@ -135,6 +142,9 @@
   Flag("validate-dynamic-modules",
       (o, value) => o.validateDynamicModules = value,
       defaultsTo: true, negatable: true),
+  UriOption("wasm-opt", (o, value) => o.wasmOptPath = value),
+  Flag("save-unopt", (o, value) => o.saveUnopt = value),
+  Flag("strip-wasm", (o, value) => o.stripWasm = value, negatable: true),
 ];
 
 Map<fe.ExperimentalFlag, bool> processFeExperimentalFlags(
diff --git a/pkg/dart2wasm/lib/deferred_loading.dart b/pkg/dart2wasm/lib/deferred_loading.dart
index 7cea0bf..cc5e591 100644
--- a/pkg/dart2wasm/lib/deferred_loading.dart
+++ b/pkg/dart2wasm/lib/deferred_loading.dart
@@ -14,6 +14,7 @@
 
 import 'await_transformer.dart' as await_transformer;
 import 'compiler_options.dart';
+import 'library_dependencies_pruner.dart';
 import 'modules.dart';
 import 'target.dart';
 import 'util.dart' show addPragma;
@@ -91,6 +92,9 @@
       this.component, this.options, this.kernelTarget, this.coreTypes);
 
   @override
+  void addEntryPoints() {}
+
+  @override
   void prepareComponent() {}
 
   @override
@@ -136,8 +140,32 @@
       });
     });
 
-    moduleOutputData =
-        ModuleOutputData([mainModule, ...rootSetToModule.values]);
+    // Some libraries may not have gotten a module assigned in the above
+    // procedure. This can have a varity of reasons:
+    //
+    //   - A class that's never really used but still in the program because TFA
+    //   left it there (this happens occasionally because we enable RTA before
+    //   TFA, RTA is less precised and may mark a class as allocated but TFA
+    //   later on optimizes usages away which leave the class as non-abstract
+    //   but unused).
+    //   - A class is only used in type expressions
+    //   - ...
+    //
+    // The code generator still requires every library to have a corresponding
+    // module, so we make an artificial one here.
+    final assignedLibraries = <Library>{
+      ...mainModule.libraries,
+      for (final module in rootSetToModule.values) ...module.libraries,
+    };
+    final unassignedLibraries = component.libraries.toSet()
+      ..removeAll(assignedLibraries);
+
+    moduleOutputData = ModuleOutputData([
+      mainModule,
+      ...rootSetToModule.values,
+      if (unassignedLibraries.isNotEmpty)
+        builder.buildModuleMetadata()..libraries.addAll(unassignedLibraries)
+    ]);
   }
 
   @override
@@ -192,6 +220,10 @@
         for (final dependency in currentLibrary.dependencies) {
           final targetLibrary = dependency.importedLibraryReference.asLibrary;
           if (dependency.isDeferred) {
+            if (dependency.name!.startsWith(unusedDeferredLibraryPrefix)) {
+              continue;
+            }
+
             newDeferredRoots.add(targetLibrary);
             (importTargetMap[currentLibrary] ??= {})[dependency.name!] =
                 targetLibrary;
@@ -232,6 +264,9 @@
   StressTestModuleStrategy(this.component, this.coreTypes, this.options,
       this.kernelTarget, this.classHierarchy);
 
+  @override
+  void addEntryPoints() {}
+
   /// Augments the `_invokeMain` JS->WASM entry point with test mode setup.
   ///
   /// Choosing to augment `_invokeMain` allows us to defer the user-defined
@@ -395,7 +430,7 @@
         _checkLibraryIsLoadedFromLoadId, Arguments([IntLiteral(loadId)]));
   }
 
-  static void addEntryPointPragma(CoreTypes coreTypes, Procedure node) {
+  static void addEntryPointPragma(CoreTypes coreTypes, Annotatable node) {
     addPragma(node, 'wasm:entry-point', coreTypes, value: BoolConstant(true));
   }
 }
diff --git a/pkg/dart2wasm/lib/dispatch_table.dart b/pkg/dart2wasm/lib/dispatch_table.dart
index 9e34a46..2ef07c2 100644
--- a/pkg/dart2wasm/lib/dispatch_table.dart
+++ b/pkg/dart2wasm/lib/dispatch_table.dart
@@ -852,12 +852,17 @@
               fun = wrappedDynamicSubmoduleImports[fun] ??=
                   _wrapDynamicSubmoduleFunction(target, fun);
             }
-            _definedWasmTable.setElement(i, fun);
+            _definedWasmTable.moduleBuilder.elements
+                .activeFunctionSegmentBuilderFor(_definedWasmTable)
+                .setFunctionAt(i, fun);
           } else {
             // This will generate the imported table if it doesn't already
             // exist.
-            (getWasmTable(targetModuleBuilder) as w.ImportedTable)
-                .setElements[i] = fun;
+            final importedTable =
+                getWasmTable(targetModuleBuilder) as w.ImportedTable;
+            targetModuleBuilder.elements
+                .activeFunctionSegmentBuilderFor(importedTable)
+                .setFunctionAt(i, fun);
           }
         }
       }
diff --git a/pkg/dart2wasm/lib/dry_run.dart b/pkg/dart2wasm/lib/dry_run.dart
index 4b7b869..b4d09e3 100644
--- a/pkg/dart2wasm/lib/dry_run.dart
+++ b/pkg/dart2wasm/lib/dry_run.dart
@@ -17,7 +17,7 @@
 import 'package:kernel/class_hierarchy.dart';
 import 'package:kernel/core_types.dart';
 import 'package:kernel/target/targets.dart' show DiagnosticReporter;
-import 'package:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 import 'package:linter/src/rules/avoid_double_and_int_checks.dart';
 import 'package:linter/src/rules/invalid_runtime_check_with_js_interop_types.dart';
 import 'package:path/path.dart' as p;
@@ -186,25 +186,25 @@
 
   _DryRunErrorCode? _getDryRunErrorCodeFromDiagnostic(Diagnostic diagnostic) =>
       switch (diagnostic.diagnosticCode) {
-        LinterLintCode.invalidRuntimeCheckWithJsInteropTypesDartAsJs =>
+        diag.invalidRuntimeCheckWithJsInteropTypesDartAsJs =>
           _DryRunErrorCode.invalidRuntimeCheckWithJsInteropTypesDartAsJs,
-        LinterLintCode.invalidRuntimeCheckWithJsInteropTypesDartIsJs =>
+        diag.invalidRuntimeCheckWithJsInteropTypesDartIsJs =>
           _DryRunErrorCode.invalidRuntimeCheckWithJsInteropTypesDartIsJs,
-        LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsAsDart =>
+        diag.invalidRuntimeCheckWithJsInteropTypesJsAsDart =>
           _DryRunErrorCode.invalidRuntimeCheckWithJsInteropTypesJsAsDart,
-        LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsDart =>
+        diag.invalidRuntimeCheckWithJsInteropTypesJsIsDart =>
           _DryRunErrorCode.invalidRuntimeCheckWithJsInteropTypesJsIsDart,
-        LinterLintCode
+        diag
               .invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs =>
           _DryRunErrorCode
               .invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
-        LinterLintCode
+        diag
               .invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs =>
           _DryRunErrorCode
               .invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
-        LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs =>
+        diag.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs =>
           _DryRunErrorCode.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
-        LinterLintCode.avoidDoubleAndIntChecks =>
+        diag.avoidDoubleAndIntChecks =>
           _DryRunErrorCode.avoidDoubleAndIntChecks,
         _ => null,
       };
diff --git a/pkg/dart2wasm/lib/dynamic_forwarders.dart b/pkg/dart2wasm/lib/dynamic_forwarders.dart
index 4116b00..9c23c73 100644
--- a/pkg/dart2wasm/lib/dynamic_forwarders.dart
+++ b/pkg/dart2wasm/lib/dynamic_forwarders.dart
@@ -6,6 +6,7 @@
 import 'package:wasm_builder/wasm_builder.dart' as w;
 
 import 'class_info.dart';
+import 'closures.dart';
 import 'code_generator.dart' show CallTarget, CodeGenerator, MacroAssembler;
 import 'dispatch_table.dart';
 import 'reference_extensions.dart';
@@ -20,45 +21,126 @@
 
   final Map<Name, CallTarget> _getterForwarderOfName = {};
   final Map<Name, CallTarget> _setterForwarderOfName = {};
-  final Map<Name, CallTarget> _methodForwarderOfName = {};
+  final Map<CallShape, CallTarget> _methodForwarderOfName = {};
 
   DynamicForwarders(this.translator, this.callingModule);
 
-  CallTarget getDynamicGetForwarder(Name memberName) =>
-      _getterForwarderOfName[memberName] ??= _DynamicForwarderCallTarget(
-          translator, _ForwarderKind.Getter, memberName, callingModule);
+  CallTarget getDynamicGetForwarder(Name name) =>
+      _getterForwarderOfName[name] ??= _DynamicForwarderCallTarget(translator,
+          _ForwarderKind.Getter, CallShape(name, 0, 0, []), callingModule);
 
-  CallTarget getDynamicSetForwarder(Name memberName) =>
-      _setterForwarderOfName[memberName] ??= _DynamicForwarderCallTarget(
-          translator, _ForwarderKind.Setter, memberName, callingModule);
+  CallTarget getDynamicSetForwarder(Name name) =>
+      _setterForwarderOfName[name] ??= _DynamicForwarderCallTarget(translator,
+          _ForwarderKind.Setter, CallShape(name, 0, 1, []), callingModule);
 
-  CallTarget getDynamicInvocationForwarder(Name memberName) {
+  CallTarget getDynamicInvocationForwarder(CallShape shape) {
     // Add Wasm function to the map before generating the forwarder code, to
     // allow recursive calls in the "call" forwarder.
-    var forwarder = _methodForwarderOfName[memberName];
+    var forwarder = _methodForwarderOfName[shape];
     if (forwarder == null) {
       forwarder = _DynamicForwarderCallTarget(
-          translator, _ForwarderKind.Method, memberName, callingModule);
-      _methodForwarderOfName[memberName] = forwarder;
+          translator, _ForwarderKind.Method, shape, callingModule);
+      _methodForwarderOfName[shape] = forwarder;
     }
     return forwarder;
   }
 }
 
+class CallShape {
+  final Name name;
+  final int typeCount;
+  final int positionalCount;
+  final List<String> named;
+
+  CallShape(this.name, this.typeCount, this.positionalCount, this.named);
+
+  int get totalArgumentCount => typeCount + positionalCount + named.length;
+
+  bool matchesTarget(FunctionNode target) {
+    if (typeCount != target.typeParameters.length && typeCount != 0) {
+      return false;
+    }
+    if (positionalCount < target.requiredParameterCount ||
+        positionalCount > target.positionalParameters.length) {
+      return false;
+    }
+    final namedParams = target.namedParameters;
+    for (final name in namedParams) {
+      if (name.isRequired && !named.contains(name.name)) {
+        return false;
+      }
+    }
+    for (final name in named) {
+      if (!namedParams.any((n) => n.name == name)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @override
+  int get hashCode =>
+      Object.hash(name, typeCount, positionalCount, Object.hashAll(named));
+
+  @override
+  bool operator ==(other) {
+    if (other is! CallShape) return false;
+    if (name != other.name) return false;
+    if (typeCount != other.typeCount) return false;
+    if (named.length != other.named.length) return false;
+    for (int i = 0; i < named.length; ++i) {
+      if (named[i] != other.named[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  @override
+  String toString() =>
+      'CallShape($name, $typeCount, $positionalCount, ${named.join('-')})';
+}
+
 class _DynamicForwarderCallTarget extends CallTarget {
   final Translator translator;
   final _ForwarderKind _kind;
-  final Name memberName;
+  final CallShape callShape;
   final w.ModuleBuilder callingModule;
 
   _DynamicForwarderCallTarget(
-      this.translator, this._kind, this.memberName, this.callingModule)
+      this.translator, this._kind, this.callShape, this.callingModule)
       : assert(!translator.isDynamicSubmodule ||
-            (memberName.text == 'call' && _kind == _ForwarderKind.Method)),
-        super(_kind.functionType(translator));
+            (callShape.name.text == 'call' && _kind == _ForwarderKind.Method)),
+        super(_functionType(translator, _kind, callShape));
+
+  static w.FunctionType _functionType(
+      Translator translator, _ForwarderKind kind, CallShape shape) {
+    return switch (kind) {
+      _ForwarderKind.Getter => translator.typesBuilder.defineFunction([
+          translator.topType,
+        ], [
+          translator.topType
+        ]),
+      _ForwarderKind.Setter => translator.typesBuilder.defineFunction([
+          translator.topType,
+          translator.topType,
+        ], [
+          translator.topType
+        ]),
+      _ForwarderKind.Method => translator.typesBuilder.defineFunction([
+          translator.topType,
+          for (int i = 0; i < shape.typeCount; ++i)
+            translator.translateType(translator.typeType),
+          for (int i = 0; i < shape.positionalCount; ++i) translator.topType,
+          for (int i = 0; i < shape.named.length; ++i) translator.topType,
+        ], [
+          translator.topType
+        ]),
+    };
+  }
 
   @override
-  String get name => 'Dynamic $_kind forwarder for "$memberName"';
+  String get name => 'Dynamic $_kind forwarder for "$callShape"';
 
   @override
   bool get supportsInlining => false;
@@ -67,7 +149,7 @@
   late final w.BaseFunction function = (() {
     final function = callingModule.functions.define(signature, name);
     final forwarder =
-        _DynamicForwarderCodeGenerator(translator, _kind, memberName, function);
+        _DynamicForwarderCodeGenerator(translator, _kind, callShape, function);
     translator.compilationQueue.add(CompilationTask(function, forwarder));
     return function;
   })();
@@ -95,11 +177,11 @@
 class _DynamicForwarderCodeGenerator extends CodeGenerator {
   final Translator translator;
   final _ForwarderKind _kind;
-  final Name memberName;
+  final CallShape callerShape;
   final w.FunctionBuilder function;
 
   _DynamicForwarderCodeGenerator(
-      this.translator, this._kind, this.memberName, this.function);
+      this.translator, this._kind, this.callerShape, this.function);
 
   @override
   void generate(w.InstructionsBuilder b, List<w.Local> paramLocals,
@@ -122,7 +204,7 @@
 
   void _generateGetterCode(Translator translator) {
     final selectors =
-        translator.dispatchTable.dynamicGetterSelectors(memberName);
+        translator.dispatchTable.dynamicGetterSelectors(callerShape.name);
     final ranges = selectors
         .expand((selector) => selector
             .targets(unchecked: false)
@@ -131,10 +213,29 @@
         .toList();
     ranges.sort((a, b) => a.range.start.compareTo(b.range.start));
 
-    final receiverLocal = function.locals[0];
-    final outputs = _kind.functionType(translator).outputs;
-
+    final nullableReceiverLocal = function.locals[0];
+    final outputs = function.type.outputs;
     final b = function.body;
+
+    // Check for `null`.
+    final receiverLocal = b.addLocal(translator.topTypeNonNullable);
+    {
+      final nullBlock = b.block([], [translator.topTypeNonNullable]);
+      b.local_get(nullableReceiverLocal);
+      b.br_on_non_null(nullBlock);
+      // Throw `NoSuchMethodError`. Normally this needs to happen via instance
+      // invocation of `noSuchMethod` (done in [_callNoSuchMethod]), but we don't
+      // have a `Null` class in dart2wasm so we throw directly.
+      b.local_get(nullableReceiverLocal);
+      createGetterInvocationObject(translator, b, callerShape.name);
+
+      translator.callReference(
+          translator.noSuchMethodErrorThrowWithInvocation.reference, b);
+      b.unreachable();
+      b.end(); // nullBlock
+      b.local_set(receiverLocal);
+    }
+
     b.local_get(receiverLocal);
     b.loadClassId(translator, receiverLocal.type);
     b.classIdSearch(ranges, outputs, (Reference target) {
@@ -157,11 +258,11 @@
           b, receiverLocal.type, targetFunction.type.inputs.first);
       translator.callFunction(targetFunction, b);
       // Box return value if needed
-      translator.convertType(b, targetFunction.type.outputs.single,
-          _kind.functionType(translator).outputs.single);
+      translator.convertType(
+          b, targetFunction.type.outputs.single, outputs.single);
     }, () {
       generateNoSuchMethodCall(translator, b, () => b.local_get(receiverLocal),
-          () => createGetterInvocationObject(translator, b, memberName));
+          () => createGetterInvocationObject(translator, b, callerShape.name));
     });
 
     b.return_();
@@ -170,7 +271,7 @@
 
   void _generateSetterCode(Translator translator) {
     final selectors =
-        translator.dispatchTable.dynamicSetterSelectors(memberName);
+        translator.dispatchTable.dynamicSetterSelectors(callerShape.name);
     final ranges = selectors
         .expand((selector) => selector
             .targets(unchecked: false)
@@ -179,10 +280,31 @@
         .toList();
     ranges.sort((a, b) => a.range.start.compareTo(b.range.start));
 
-    final receiverLocal = function.locals[0];
+    final nullableReceiverLocal = function.locals[0];
     final positionalArgLocal = function.locals[1];
 
     final b = function.body;
+
+    // Check for `null`.
+    final receiverLocal = b.addLocal(translator.topTypeNonNullable);
+    {
+      final nullBlock = b.block([], [translator.topTypeNonNullable]);
+      b.local_get(nullableReceiverLocal);
+      b.br_on_non_null(nullBlock);
+      // Throw `NoSuchMethodError`. Normally this needs to happen via instance
+      // invocation of `noSuchMethod` (done in [_callNoSuchMethod]), but we don't
+      // have a `Null` class in dart2wasm so we throw directly.
+      b.local_get(nullableReceiverLocal);
+      createSetterInvocationObject(
+          translator, b, callerShape.name, positionalArgLocal);
+
+      translator.callReference(
+          translator.noSuchMethodErrorThrowWithInvocation.reference, b);
+      b.unreachable();
+      b.end(); // nullBlock
+      b.local_set(receiverLocal);
+    }
+
     b.local_get(receiverLocal);
     b.loadClassId(translator, receiverLocal.type);
     b.classIdSearch(ranges, [positionalArgLocal.type], (Reference target) {
@@ -196,7 +318,7 @@
           b,
           () => b.local_get(receiverLocal),
           () => createSetterInvocationObject(
-              translator, b, memberName, positionalArgLocal));
+              translator, b, callerShape.name, positionalArgLocal));
 
       b.drop(); // drop noSuchMethod return value
       b.local_get(positionalArgLocal);
@@ -209,20 +331,89 @@
   void _generateMethodCode(Translator translator) {
     final b = function.body;
 
-    final receiverLocal = function.locals[0]; // ref #Top
-    final typeArgsLocal = function.locals[1]; // ref WasmArray
-    final positionalArgsLocal = function.locals[2]; // ref WasmArray
-    final namedArgsLocal = function.locals[3]; // ref WasmArray
+    final nullableReceiverLocal = function.locals[0]; // ref #Top
+
+    // Load type parameter as WasmArray<_Type>
+    final typeArgsLocal = b.addLocal(translator.typeArrayTypeRef);
+    if (callerShape.typeCount == 0) {
+      final emptyArray = translator.constants
+          .makeArrayOf(translator.coreTypes.typeNonNullableRawType, []);
+      translator.constants
+          .instantiateConstant(b, emptyArray, translator.typeArrayTypeRef);
+    } else {
+      for (int i = 0; i < callerShape.typeCount; ++i) {
+        b.local_get(function.locals[1 + i]);
+      }
+      b.array_new_fixed(translator.typeArrayType, callerShape.typeCount);
+    }
+    b.local_set(typeArgsLocal);
+
+    // Load positional parameters as WasmArray<Object?>
+    final positionalArgsLocal =
+        b.addLocal(translator.nullableObjectArrayTypeRef);
+    if (callerShape.positionalCount == 0) {
+      final emptyArray = translator.constants
+          .makeArrayOf(translator.coreTypes.objectNullableRawType, []);
+      translator.constants.instantiateConstant(
+          b, emptyArray, translator.nullableObjectArrayTypeRef);
+    } else {
+      for (int i = 0; i < callerShape.positionalCount; ++i) {
+        b.local_get(function.locals[1 + callerShape.typeCount + i]);
+      }
+      b.array_new_fixed(
+          translator.nullableObjectArrayType, callerShape.positionalCount);
+    }
+    b.local_set(positionalArgsLocal);
+
+    // Load named parameters as WasmArray<Object?>
+    final namedArgsLocal = b.addLocal(translator.nullableObjectArrayTypeRef);
+    if (callerShape.named.isEmpty) {
+      final emptyArray = translator.constants
+          .makeArrayOf(translator.coreTypes.objectNullableRawType, []);
+      translator.constants.instantiateConstant(
+          b, emptyArray, translator.nullableObjectArrayTypeRef);
+    } else {
+      for (int i = 0; i < callerShape.named.length; ++i) {
+        translator.constants.instantiateConstant(
+            b,
+            translator.symbols.symbolForNamedParameter(callerShape.named[i]),
+            translator.topType);
+        b.local_get(function.locals[
+            1 + callerShape.typeCount + callerShape.positionalCount + i]);
+      }
+      b.array_new_fixed(
+          translator.nullableObjectArrayType, callerShape.named.length * 2);
+    }
+    b.local_set(namedArgsLocal);
+
+    // Check for `null`.
+    final receiverLocal = b.addLocal(translator.topTypeNonNullable);
+    {
+      final nullBlock = b.block([], [translator.topTypeNonNullable]);
+      b.local_get(nullableReceiverLocal);
+      b.br_on_non_null(nullBlock);
+      // Throw `NoSuchMethodError`. Normally this needs to happen via instance
+      // invocation of `noSuchMethod` (done in [_callNoSuchMethod]), but we don't
+      // have a `Null` class in dart2wasm so we throw directly.
+      b.local_get(nullableReceiverLocal);
+      createInvocationObject(translator, b, callerShape.name, typeArgsLocal,
+          positionalArgsLocal, namedArgsLocal);
+
+      translator.callReference(
+          translator.noSuchMethodErrorThrowWithInvocation.reference, b);
+      b.unreachable();
+
+      b.end(); // nullBlock
+      b.local_set(receiverLocal);
+    }
 
     final classIdLocal = b.addLocal(w.NumType.i32);
 
     // Continuation of this block calls `noSuchMethod` on the receiver.
     final noSuchMethodBlock = b.block();
 
-    final numArgsLocal = b.addLocal(w.NumType.i32);
-
     final methodSelectors =
-        translator.dispatchTable.dynamicMethodSelectors(memberName);
+        translator.dispatchTable.dynamicMethodSelectors(callerShape.name);
     for (final selector in methodSelectors) {
       // Accumulates all class ID ranges that have the same target.
       final Map<Reference, List<Range>> targets = {};
@@ -235,6 +426,12 @@
           in targets.entries) {
         final Procedure targetMember = target.asMember as Procedure;
         final targetMemberParamInfo = translator.paramInfoForDirectCall(target);
+        final targetFunction = targetMember.function;
+
+        // Filter out targets that cannot match based on mismatched arguments.
+        if (!callerShape.matchesTarget(targetFunction)) {
+          continue;
+        }
 
         b.local_get(receiverLocal);
         b.loadClassId(translator, receiverLocal.type);
@@ -262,241 +459,75 @@
         b.br(classIdNoMatch);
         b.end(); // classIdMatch
 
-        // Check number of type arguments. It needs to be 0 or match the
-        // member's type parameters.
-        if (targetMemberParamInfo.typeParamCount == 0) {
-          // typeArgs.length == 0
-          b.local_get(typeArgsLocal);
-          b.array_len();
-          b.i32_eqz();
-        } else {
-          // typeArgs.length == 0 || typeArgs.length == typeParams.length
-          b.local_get(typeArgsLocal);
-          b.array_len();
-          b.local_tee(numArgsLocal);
-          b.i32_eqz();
-          b.local_get(numArgsLocal);
-          b.i32_const(targetMemberParamInfo.typeParamCount);
-          b.i32_eq();
-          b.i32_or();
-        }
-        b.i32_eqz();
-        b.br_if(noSuchMethodBlock);
-
-        // Check number of positional parameters and add missing optional
-        // arguments
-        final nRequired =
-            targetMemberParamInfo.positional.where((arg) => arg == null).length;
-        final nTotal = targetMemberParamInfo.positional.length;
-
-        // positionalArgs.length >= nRequired &&
-        //   positionalArgs.length <= nTotal
-        b.local_get(positionalArgsLocal);
-        b.array_len();
-        b.local_tee(numArgsLocal);
-        b.i32_const(nRequired);
-        b.i32_ge_u();
-        b.local_get(numArgsLocal);
-        b.i32_const(nTotal);
-        b.i32_le_u();
-        b.i32_and();
-        b.i32_eqz();
-        b.br_if(noSuchMethodBlock);
-
-        // Add default values of optional positional parameters if needed
-        w.Local? adjustedPositionalArgsLocal;
-        if (nRequired != nTotal) {
-          adjustedPositionalArgsLocal =
-              b.addLocal(translator.nullableObjectArrayTypeRef);
-          b.i32_const(nTotal);
-          b.array_new_default(translator.nullableObjectArrayType);
-          b.local_set(adjustedPositionalArgsLocal);
-
-          // Copy passed arguments
-          final argIdxLocal = b.addLocal(w.NumType.i32);
-          b.i32_const(0);
-          b.local_set(argIdxLocal);
-
-          final loopBlock = b.loop();
-          b.local_get(argIdxLocal);
-          b.local_get(numArgsLocal);
-          b.i32_lt_u();
-          b.if_();
-          b.local_get(adjustedPositionalArgsLocal);
-          b.local_get(argIdxLocal);
-          b.local_get(positionalArgsLocal);
-          b.local_get(argIdxLocal);
-          b.array_get(translator.nullableObjectArrayType);
-          b.array_set(translator.nullableObjectArrayType);
-          b.local_get(argIdxLocal);
-          b.i32_const(1);
-          b.i32_add();
-          b.local_set(argIdxLocal);
-          b.br(loopBlock);
-          b.end(); // end if
-          b.end(); // end loop
-
-          // Add optional parameters
-          for (var optionalParamIdx = nRequired;
-              optionalParamIdx < nTotal;
-              optionalParamIdx += 1) {
-            b.local_get(argIdxLocal);
-            b.i32_const(optionalParamIdx);
-            b.i32_le_u();
-            b.if_();
-
-            final param = targetMemberParamInfo.positional[optionalParamIdx]!;
-
-            b.local_get(adjustedPositionalArgsLocal);
-            b.i32_const(optionalParamIdx);
-            translator.constants
-                .instantiateConstant(b, param, translator.topType);
-            b.array_set(translator.nullableObjectArrayType);
-            b.end();
-          }
-        }
-
-        // Check named arguments and adjust the named argument list. Named
-        // parameters in the member should be in the list or have a default
-        // value.
-        w.Local? adjustedNamedArgsLocal;
-        if (targetMemberParamInfo.named.isEmpty) {
-          // namedArgs.length == 0
-          b.local_get(namedArgsLocal);
-          b.array_len();
-          b.i32_eqz();
-          b.i32_eqz();
-          b.br_if(noSuchMethodBlock);
-        } else {
-          adjustedNamedArgsLocal =
-              b.addLocal(translator.nullableObjectArrayTypeRef);
-          b.i32_const(targetMemberParamInfo.named.length);
-          b.array_new_default(translator.nullableObjectArrayType);
-          b.local_set(adjustedNamedArgsLocal);
-
-          final namedParameterIdxLocal = b.addLocal(
-              translator.classInfo[translator.boxedIntClass]!.nullableType);
-
-          final remainingNamedArgsLocal = numArgsLocal;
-          b.local_get(namedArgsLocal);
-          b.array_len();
-          b.i32_const(1);
-          b.i32_shr_u();
-          b.local_set(remainingNamedArgsLocal);
-
-          final targetMemberFunction = targetMember.function;
-
-          Expression? initializerForNamedParamInMember(String paramName) {
-            for (int i = 0;
-                i < targetMemberFunction.namedParameters.length;
-                i += 1) {
-              if (targetMemberFunction.namedParameters[i].name == paramName) {
-                return targetMemberFunction.namedParameters[i].initializer;
-              }
-            }
-            return null;
-          }
-
-          for (int nameIdx = 0;
-              nameIdx < targetMemberParamInfo.names.length;
-              ++nameIdx) {
-            final String name = targetMemberParamInfo.names[nameIdx];
-            final Constant? paramInfoDefaultValue =
-                targetMemberParamInfo.named[name];
-            final Expression? functionNodeDefaultValue =
-                initializerForNamedParamInMember(name);
-
-            b.local_get(namedArgsLocal);
-            translator.constants.instantiateConstant(
-                b,
-                translator.symbols.symbolForNamedParameter(name),
-                translator.classInfo[translator.symbolClass]!.nonNullableType);
-
-            translator.callReference(
-                translator.getNamedParameterIndex.reference, b);
-            b.local_tee(namedParameterIdxLocal);
-
-            b.ref_is_null();
-            b.i32_eqz();
-            b.if_();
-            b.local_get(remainingNamedArgsLocal);
-            b.i32_const(1);
-            b.i32_sub();
-            b.local_set(remainingNamedArgsLocal);
-            b.end();
-
-            b.local_get(namedParameterIdxLocal);
-            b.ref_is_null();
-            if (functionNodeDefaultValue == null &&
-                paramInfoDefaultValue == null) {
-              // Required parameter missing
-              b.br_if(noSuchMethodBlock);
-
-              // Copy provided named parameter.
-
-              b.local_get(adjustedNamedArgsLocal);
-              b.i32_const(nameIdx);
-
-              b.local_get(namedArgsLocal);
-              b.local_get(namedParameterIdxLocal);
-              translator.convertType(
-                  b, namedParameterIdxLocal.type, w.NumType.i64);
-              b.i32_wrap_i64();
-              b.array_get(translator.nullableObjectArrayType);
-
-              b.array_set(translator.nullableObjectArrayType);
-            } else {
-              // Optional, either has a default in the member or not used by
-              // the member
-              b.if_();
-
-              b.local_get(adjustedNamedArgsLocal);
-              b.i32_const(nameIdx);
-
-              if (functionNodeDefaultValue != null) {
-                // Used by the member, has a default value
-                translator.constants.instantiateConstant(
-                    b,
-                    (functionNodeDefaultValue as ConstantExpression).constant,
-                    translator.topType);
-              } else {
-                // Not used by the member
-                translator.constants.instantiateConstant(
-                  b,
-                  paramInfoDefaultValue!,
-                  translator.topType,
-                );
-              }
-              b.array_set(translator.nullableObjectArrayType);
-
-              b.else_();
-
-              b.local_get(adjustedNamedArgsLocal);
-              b.i32_const(nameIdx);
-              b.local_get(namedArgsLocal);
-              b.local_get(namedParameterIdxLocal);
-              translator.convertType(
-                  b, namedParameterIdxLocal.type, w.NumType.i64);
-              b.i32_wrap_i64();
-              b.array_get(translator.nullableObjectArrayType);
-              b.array_set(translator.nullableObjectArrayType);
-
-              b.end();
-            }
-          }
-
-          // Check that all named arguments are used. If not, it means that the
-          // call site has extra names that the member doesn't have.
-          b.local_get(remainingNamedArgsLocal);
-          b.i32_eqz();
-          b.i32_eqz();
-          b.br_if(noSuchMethodBlock);
-        }
-
         b.local_get(receiverLocal);
         b.local_get(typeArgsLocal);
-        b.local_get(adjustedPositionalArgsLocal ?? positionalArgsLocal);
-        b.local_get(adjustedNamedArgsLocal ?? namedArgsLocal);
+
+        if (callerShape.positionalCount ==
+            targetMemberParamInfo.positional.length) {
+          b.local_get(positionalArgsLocal);
+        } else {
+          final targetPositionals = targetFunction.positionalParameters;
+          for (int i = 0; i < targetMemberParamInfo.positional.length; ++i) {
+            if (i < callerShape.positionalCount) {
+              b.local_get(function.locals[1 + callerShape.typeCount + i]);
+              continue;
+            }
+            final defaultValue = targetMemberParamInfo.positional[i];
+            // The target (a type checker function) has a signature that is
+            // created based on the union/merged of all members of the selector.
+            //
+            // Some implementations of the selector may have more positionals
+            // than others, hence the `i < targetPositionals.length`.
+            final defaultFunctionValue = i < targetPositionals.length
+                ? (targetPositionals[i].initializer as ConstantExpression?)
+                    ?.constant
+                : null;
+            translator.constants.instantiateConstant(
+                b, defaultFunctionValue ?? defaultValue!, translator.topType);
+          }
+          b.array_new_fixed(translator.nullableObjectArrayType,
+              targetMemberParamInfo.positional.length);
+        }
+
+        Expression? initializerForNamedParamInMember(String paramName) {
+          for (int i = 0; i < targetFunction.namedParameters.length; i++) {
+            if (targetFunction.namedParameters[i].name == paramName) {
+              return targetFunction.namedParameters[i].initializer;
+            }
+          }
+          return null;
+        }
+
+        if (targetMemberParamInfo.names.isEmpty) {
+          final emptyArray = translator.constants
+              .makeArrayOf(translator.coreTypes.objectNullableRawType, []);
+          translator.constants.instantiateConstant(
+              b, emptyArray, translator.nullableObjectArrayTypeRef);
+        } else {
+          // The type checker forwarder expects all named arguments as an array of
+          // values (i.e. not array of (symbol, value) pairs).
+          for (int i = 0; i < targetMemberParamInfo.names.length; ++i) {
+            final name = targetMemberParamInfo.names[i];
+            final index = callerShape.named.indexOf(name);
+            if (index != -1) {
+              b.local_get(function.locals[1 +
+                  callerShape.typeCount +
+                  callerShape.positionalCount +
+                  index]);
+              continue;
+            }
+            final defaultValue = targetMemberParamInfo.named[name];
+            final defaultFunctionValue =
+                (initializerForNamedParamInMember(name) as ConstantExpression?)
+                    ?.constant;
+            assert(defaultValue != null || defaultFunctionValue != null);
+            translator.constants.instantiateConstant(
+                b, defaultFunctionValue ?? defaultValue!, translator.topType);
+          }
+          b.array_new_fixed(translator.nullableObjectArrayType,
+              targetMemberParamInfo.named.length);
+        }
+
         translator.callReference(targetMember.typeCheckerReference, b);
         b.return_();
         b.end(); // classIdNoMatch
@@ -507,14 +538,14 @@
     void handleGetterSelector(SelectorInfo selector) {
       for (final (:range, :target)
           in selector.targets(unchecked: false).targetRanges) {
-        for (int classId = range.start; classId <= range.end; ++classId) {
-          final targetMember = target.asMember;
-          // This loop checks getters and fields. Methods are considered in the
-          // previous loop, skip them here.
-          if (targetMember is Procedure && !targetMember.isGetter) {
-            continue;
-          }
+        final targetMember = target.asMember;
+        // This loop checks getters and fields. Methods are considered in the
+        // previous loop, skip them here.
+        if (targetMember is Procedure && !targetMember.isGetter) {
+          continue;
+        }
 
+        for (int classId = range.start; classId <= range.end; ++classId) {
           b.local_get(receiverLocal);
           b.loadClassId(translator, receiverLocal.type);
           b.i32_const(classId);
@@ -558,12 +589,24 @@
           // Value is not a closure
           final callForwarder = translator
               .getDynamicForwardersForModule(b.moduleBuilder)
-              .getDynamicInvocationForwarder(Name('call'))
+              .getDynamicInvocationForwarder(CallShape(
+                  Name('call'),
+                  callerShape.typeCount,
+                  callerShape.positionalCount,
+                  callerShape.named))
               .function;
+
           b.local_get(receiverLocal);
-          b.local_get(typeArgsLocal);
-          b.local_get(positionalArgsLocal);
-          b.local_get(namedArgsLocal);
+          for (int i = 0; i < callerShape.typeCount; ++i) {
+            b.local_get(function.locals[1 + i]);
+          }
+          for (int i = 0; i < callerShape.positionalCount; ++i) {
+            b.local_get(function.locals[1 + callerShape.typeCount + i]);
+          }
+          for (int i = 0; i < callerShape.named.length; ++i) {
+            b.local_get(function.locals[
+                1 + callerShape.typeCount + callerShape.positionalCount + i]);
+          }
           translator.callFunction(callForwarder, b);
           b.return_();
           b.end();
@@ -577,7 +620,7 @@
           b.ref_cast(closureBaseType);
           b.local_set(closureLocal);
 
-          generateDynamicFunctionCall(
+          generateDynamicClosureCallShapeAndTypeCheck(
               translator,
               b,
               closureLocal,
@@ -585,6 +628,82 @@
               positionalArgsLocal,
               namedArgsLocal,
               noSuchMethodBlock);
+          if (translator.dynamicModuleSupportEnabled) {
+            generateDynamicClosureCallViaDynamicEntry(
+                translator,
+                b,
+                closureLocal,
+                typeArgsLocal,
+                positionalArgsLocal,
+                namedArgsLocal);
+          } else {
+            void emitCallForTypeCount(int typeCount) {
+              final representation = translator.closureLayouter
+                  .getClosureRepresentation(typeCount,
+                      callerShape.positionalCount, callerShape.named);
+              if (representation == null) {
+                // This is a call combination that the closure layouter determined
+                // cannot occur in the program (it means the shape&type checks
+                // we already performed earlier must have thrown an NSM error
+                // and we cannot get here).
+                b.unreachable();
+                return;
+              }
+
+              b.local_get(closureLocal);
+              b.struct_get(translator.closureLayouter.closureBaseStruct,
+                  FieldIndex.closureContext);
+              for (int i = 0; i < typeCount; ++i) {
+                b.local_get(typeArgsLocal);
+                b.i32_const(i);
+                b.array_get(translator.typeArrayType);
+              }
+              for (int i = 0; i < callerShape.positionalCount; ++i) {
+                b.local_get(function.locals[1 + callerShape.typeCount + i]);
+              }
+              for (int i = 0; i < callerShape.named.length; ++i) {
+                b.local_get(function.locals[1 +
+                    callerShape.typeCount +
+                    callerShape.positionalCount +
+                    i]);
+              }
+
+              final vtable = representation.vtableStruct;
+              final vtableIndex = representation.fieldIndexForSignature(
+                  callerShape.positionalCount, callerShape.named);
+
+              b.local_get(closureLocal);
+              b.struct_get(translator.closureLayouter.closureBaseStruct,
+                  FieldIndex.closureVtable);
+              b.ref_cast(w.RefType(vtable, nullable: false));
+              b.struct_get(vtable, vtableIndex);
+              b.call_ref(vtable.getVtableEntryAt(vtableIndex));
+            }
+
+            // The closure representation algorithm has considered dynamic
+            // callsites and will have therefore specialized vtable entries
+            // for valid call shape of dynamic closure calls.
+            if (callerShape.typeCount == 0) {
+              // The dynamic callsite has not provided type arguments but the
+              // target closure may be generic. The shape&type checking we
+              // already performed may have populated default type arguments (of
+              // unknown length) for the closure.
+              //
+              // So we
+              final maxTypeCount =
+                  translator.closureLayouter.maxTypeArgumentCount();
+              b.emitDenseTableBranch([translator.topType], maxTypeCount, () {
+                b.local_get(typeArgsLocal);
+                b.array_len();
+              }, (int typeCount) {
+                emitCallForTypeCount(typeCount);
+              }, () {
+                b.unreachable();
+              });
+            } else {
+              emitCallForTypeCount(callerShape.typeCount);
+            }
+          }
           b.return_();
 
           b.end(); // class ID
@@ -593,14 +712,14 @@
     }
 
     final getterSelectors =
-        translator.dispatchTable.dynamicGetterSelectors(memberName);
+        translator.dispatchTable.dynamicGetterSelectors(callerShape.name);
     for (final selector in getterSelectors) {
       handleGetterSelector(selector);
     }
 
     final dynamicMainModuleGetterSelectors = translator
         .dynamicMainModuleDispatchTable
-        ?.dynamicGetterSelectors(memberName);
+        ?.dynamicGetterSelectors(callerShape.name);
     if (dynamicMainModuleGetterSelectors != null) {
       for (final selector in dynamicMainModuleGetterSelectors) {
         handleGetterSelector(selector);
@@ -614,8 +733,8 @@
         translator,
         b,
         () => b.local_get(receiverLocal),
-        () => createInvocationObject(translator, b, memberName, typeArgsLocal,
-            positionalArgsLocal, namedArgsLocal));
+        () => createInvocationObject(translator, b, callerShape.name,
+            typeArgsLocal, positionalArgsLocal, namedArgsLocal));
 
     b.end();
   }
@@ -634,36 +753,28 @@
       _ForwarderKind.Method => "method"
     };
   }
-
-  w.FunctionType functionType(Translator translator) {
-    return switch (this) {
-      _ForwarderKind.Getter => translator.dynamicGetForwarderFunctionType,
-      _ForwarderKind.Setter => translator.dynamicSetForwarderFunctionType,
-      _ForwarderKind.Method => translator.dynamicInvocationForwarderFunctionType
-    };
-  }
 }
 
-/// Generate code that checks shape and type of the closure and generate a call
-/// to its dynamic call vtable entry.
+/// Generate code that checks shape and type of the closure.
 ///
 /// [closureLocal] should be a local of type `ref #ClosureBase` containing a
 /// closure value.
 ///
-/// [typeArgsLocal], [posArgsLocal], [namedArgsLocal] are the locals for type,
-/// positional, and named arguments, respectively. Types of these locals must
-/// be `ref WasmListBase`.
+///   * [typeArgsLocal] is a `WasmArray<_Type>`
+///   * [posArgsLocal] is a `WasmArray<Object?>`
+///   * [namedArgsLocal] is a `WasmArray<Object?>` - (symbol, value) pairs
+///
+/// Will update `typeArgsLocal` with default type arguments (if needed).
 ///
 /// [noSuchMethodBlock] is used as the `br` target when the shape check fails.
-void generateDynamicFunctionCall(
-  Translator translator,
-  w.InstructionsBuilder b,
-  w.Local closureLocal,
-  w.Local typeArgsLocal,
-  w.Local posArgsLocal,
-  w.Local namedArgsLocal,
-  w.Label noSuchMethodBlock,
-) {
+void generateDynamicClosureCallShapeAndTypeCheck(
+    Translator translator,
+    w.InstructionsBuilder b,
+    w.Local closureLocal,
+    w.Local typeArgsLocal,
+    w.Local posArgsLocal,
+    w.Local namedArgsLocal,
+    w.Label noSuchMethodBlock) {
   assert(typeArgsLocal.type == translator.typeArrayTypeRef);
   assert(posArgsLocal.type == translator.nullableObjectArrayTypeRef);
   assert(namedArgsLocal.type == translator.nullableObjectArrayTypeRef);
@@ -691,6 +802,7 @@
   b.end();
 
   // Check closure shape
+  // [functionTypeLocal] already on the stack.
   b.local_get(typeArgsLocal);
   b.local_get(posArgsLocal);
   b.local_get(namedArgsLocal);
@@ -708,6 +820,19 @@
     b.drop();
   }
 
+  // Type check passed \o/
+}
+
+void generateDynamicClosureCallViaDynamicEntry(
+    Translator translator,
+    w.InstructionsBuilder b,
+    w.Local closureLocal,
+    w.Local typeArgsLocal,
+    w.Local posArgsLocal,
+    w.Local namedArgsLocal) {
+  assert(translator.dynamicModuleSupportEnabled ||
+      translator.closureLayouter.usesFunctionApplyWithNamedArguments);
+
   // Type check passed, call vtable entry
   b.local_get(closureLocal);
   b.local_get(typeArgsLocal);
@@ -720,11 +845,71 @@
       translator.closureLayouter.closureBaseStruct, FieldIndex.closureVtable);
 
   // Get entry function
-  b.struct_get(translator.closureLayouter.vtableBaseStruct, 0);
-
+  b.struct_get(translator.closureLayouter.vtableBaseStruct,
+      translator.closureLayouter.vtableDynamicClosureCallEntryIndex!);
   b.call_ref(translator.dynamicCallVtableEntryFunctionType);
 }
 
+void generateDynamicClosureCallViaPositionalArgs(
+    Translator translator,
+    w.InstructionsBuilder b,
+    w.Local closureLocal,
+    w.Local typeArgsLocal,
+    w.Local posArgsLocal) {
+  assert(!translator.dynamicModuleSupportEnabled &&
+      !translator.closureLayouter.usesFunctionApplyWithNamedArguments);
+
+  final maxTypeCount = translator.closureLayouter.maxTypeArgumentCount();
+  b.emitDenseTableBranch([translator.topType], maxTypeCount, () {
+    b.local_get(typeArgsLocal);
+    b.array_len();
+  }, (typeCount) {
+    final maxPositionalCount =
+        translator.closureLayouter.maxPositionalCountFor(typeCount);
+    b.emitDenseTableBranch([translator.topType], maxPositionalCount, () {
+      b.local_get(posArgsLocal);
+      b.array_len();
+    }, (posCount) {
+      final representation = translator.closureLayouter
+          .getClosureRepresentation(typeCount, posCount, []);
+      if (representation == null) {
+        // This is a call combination that the closure layouter determined
+        // cannot occur in the program.
+        b.unreachable();
+        return;
+      }
+
+      b.local_get(closureLocal);
+      b.struct_get(translator.closureLayouter.closureBaseStruct,
+          FieldIndex.closureContext);
+      for (int i = 0; i < typeCount; ++i) {
+        b.local_get(typeArgsLocal);
+        b.i32_const(i);
+        b.array_get(translator.typeArrayType);
+      }
+      for (int i = 0; i < posCount; ++i) {
+        b.local_get(posArgsLocal);
+        b.i32_const(i);
+        b.array_get(translator.nullableObjectArrayType);
+      }
+
+      final vtable = representation.vtableStruct;
+      final vtableIndex = representation.fieldIndexForSignature(posCount, []);
+
+      b.local_get(closureLocal);
+      b.struct_get(translator.closureLayouter.closureBaseStruct,
+          FieldIndex.closureVtable);
+      b.ref_cast(w.RefType(vtable, nullable: false));
+      b.struct_get(vtable, vtableIndex);
+      b.call_ref(vtable.getVtableEntryAt(vtableIndex));
+    }, () {
+      b.unreachable();
+    });
+  }, () {
+    b.unreachable();
+  });
+}
+
 void createInvocationObject(
     Translator translator,
     w.InstructionsBuilder b,
diff --git a/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart b/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart
index e92ce58..81e2c07 100644
--- a/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart
+++ b/pkg/dart2wasm/lib/dynamic_module_kernel_metadata.dart
@@ -9,15 +9,14 @@
 import 'package:kernel/binary/ast_from_binary.dart'
     show BinaryBuilderWithMetadata;
 import 'package:kernel/core_types.dart';
-import 'package:kernel/kernel.dart'
-    show writeComponentToBinary, writeComponentToBytes;
+import 'package:kernel/kernel.dart' show writeComponentToBytes;
 import 'package:kernel/library_index.dart';
-import 'package:path/path.dart' as path;
 
 import 'class_info.dart';
 import 'compiler_options.dart';
 import 'dispatch_table.dart';
 import 'dynamic_modules.dart';
+import 'io_util.dart';
 import 'js/method_collector.dart' show JSMethods;
 import 'serialization.dart';
 import 'translator.dart';
@@ -460,11 +459,13 @@
     '${path.substring(0, path.length - '.dill'.length)}.opt.dill';
 
 Future<void> serializeMainModuleComponent(
-    Component component, Uri dynamicModuleMainUri,
+    CompilerPhaseInputOutputManager ioManager,
+    Component component,
+    Uri dynamicModuleMainUri,
     {required bool optimized}) async {
   // TODO(natebiggs): Serialize as a summary and filter to only necessary
   // libraries.
-  await writeComponentToBinary(
+  await ioManager.writeComponent(
       component,
       optimized
           ? _makeOptDillPath(dynamicModuleMainUri.path)
@@ -505,21 +506,15 @@
 }
 
 Future<MainModuleMetadata> deserializeMainModuleMetadata(
-    Component component, WasmCompilerOptions options) async {
-  final filename = options.dynamicModuleMetadataFile ??
-      Uri.parse(path.setExtension(
-          options.dynamicMainModuleUri!.toFilePath(), '.dyndata'));
-  final dynamicModuleMetadataBytes = await File.fromUri(filename).readAsBytes();
-  final source = DataDeserializer(dynamicModuleMetadataBytes, component);
+    Component component, CompilerPhaseInputOutputManager ioManager) async {
+  final source = DataDeserializer(
+      await ioManager.readMainDynModuleMetadataBytes(), component);
   return MainModuleMetadata.deserialize(source);
 }
 
 Future<void> serializeMainModuleMetadata(Component component,
-    Translator translator, WasmCompilerOptions options) async {
-  final filename = options.dynamicModuleMetadataFile ??
-      Uri.parse(path.setExtension(
-          options.dynamicMainModuleUri!.toFilePath(), '.dyndata'));
+    Translator translator, CompilerPhaseInputOutputManager ioManager) async {
   final serializer = DataSerializer(component);
   translator.dynamicModuleInfo!.metadata.serialize(serializer, translator);
-  await File.fromUri(filename).writeAsBytes(serializer.takeBytes());
+  await ioManager.writeMainDynModuleMetadataBytes(serializer.takeBytes());
 }
diff --git a/pkg/dart2wasm/lib/dynamic_modules.dart b/pkg/dart2wasm/lib/dynamic_modules.dart
index be0e2ac..42d9d5d 100644
--- a/pkg/dart2wasm/lib/dynamic_modules.dart
+++ b/pkg/dart2wasm/lib/dynamic_modules.dart
@@ -127,12 +127,16 @@
       : index = coreTypes.index;
 
   @override
-  void prepareComponent() {
+  void addEntryPoints() {
     // Annotate the kernel with info from dynamic interface.
     dynamic_interface_annotator.annotateComponent(dynamicInterfaceSpecification,
         dynamicInterfaceSpecificationBaseUri, component, coreTypes);
-    _addImplicitPragmas();
 
+    _addImplicitPragmas();
+  }
+
+  @override
+  void prepareComponent() {
     for (final lib in component.libraries) {
       lib.annotations = [...lib.annotations];
       addPragma(lib, _mainModLibPragma, coreTypes);
@@ -226,6 +230,9 @@
       this.coreTypes, this.mainModuleComponentUri);
 
   @override
+  void addEntryPoints() {}
+
+  @override
   void prepareComponent() {
     final submoduleEntryPoint = _findSubmoduleEntryPoint(component, coreTypes);
     addWasmEntryPointPragma(submoduleEntryPoint, coreTypes);
@@ -677,7 +684,8 @@
     overridableFunctions.putIfAbsent(index, () {
       if (!isSubmodule) {
         final mainFunction = translator.mainModule.functions.define(type, name);
-        translator.mainModule.functions.declare(mainFunction);
+        translator.mainModule.elements.declarativeSegmentBuilder
+            .declare(mainFunction);
         buildMain(mainFunction);
         return mainFunction;
       }
@@ -685,7 +693,7 @@
       if (skipSubmodule) return null;
 
       final submoduleFunction = submodule.functions.define(type, name);
-      submodule.functions.declare(submoduleFunction);
+      submodule.elements.declarativeSegmentBuilder.declare(submoduleFunction);
       buildSubmodule(submoduleFunction);
       return submoduleFunction;
     });
@@ -1067,7 +1075,7 @@
 
     // Declare the function so it can be used as a ref_func in a constant
     // context.
-    b.moduleBuilder.functions.declare(checker);
+    b.moduleBuilder.elements.declarativeSegmentBuilder.declare(checker);
 
     // Invoke the 'canonicalize' function with the value and checker.
     b.local_get(valueLocal);
@@ -1101,7 +1109,7 @@
 
     // Declare the function so it can be used as a ref_func in a constant
     // context.
-    b.moduleBuilder.functions.declare(checker);
+    b.moduleBuilder.elements.declarativeSegmentBuilder.declare(checker);
 
     // Invoke the canonicalizer function with the value and checker.
     b.local_get(valueLocal);
diff --git a/pkg/dart2wasm/lib/exports.dart b/pkg/dart2wasm/lib/exports.dart
index d0f33f5..18fcd86 100644
--- a/pkg/dart2wasm/lib/exports.dart
+++ b/pkg/dart2wasm/lib/exports.dart
@@ -33,7 +33,7 @@
   String _getExportName(String name) {
     if (!minify) return name;
     do {
-      name = intToBase64(_nameCounter++);
+      name = intToMinString(_nameCounter++);
     } while (_reservedNames.contains(name));
     return name;
   }
diff --git a/pkg/dart2wasm/lib/generate_wasm.dart b/pkg/dart2wasm/lib/generate_wasm.dart
index eecea45..d08ceef 100644
--- a/pkg/dart2wasm/lib/generate_wasm.dart
+++ b/pkg/dart2wasm/lib/generate_wasm.dart
@@ -2,16 +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:io';
-
 import 'package:front_end/src/api_prototype/standard_file_system.dart'
     show StandardFileSystem;
 import 'package:front_end/src/api_unstable/vm.dart' show printDiagnosticMessage;
-import 'package:kernel/kernel.dart';
-import 'package:path/path.dart' as path;
 
 import 'compile.dart';
 import 'compiler_options.dart';
+import 'io_util.dart';
 
 export 'package:dart2wasm/compiler_options.dart';
 
@@ -61,25 +58,9 @@
         '  - watch points = [${translatorOptions.watchPoints.map((p) => p.toString()).join(',')}]');
   }
 
-  String moduleNameToWasmOutputFile(String moduleName) {
-    return path.join(path.dirname(options.outputFile), moduleName);
-  }
-
-  String moduleNameToSourceMapFile(String moduleName) {
-    return '${moduleNameToWasmOutputFile(moduleName)}.map';
-  }
-
-  Uri moduleNameToRelativeSourceMapUri(String moduleName) {
-    return Uri.file(path.basename(moduleNameToSourceMapFile(moduleName)));
-  }
-
-  final relativeSourceMapUrlMapper = translatorOptions.generateSourceMaps
-      ? moduleNameToRelativeSourceMapUri
-      : null;
-
+  final fileSystem = StandardFileSystem.instance;
   CompilationResult result = await compile(
-      options, StandardFileSystem.instance, relativeSourceMapUrlMapper,
-      (message) {
+      options, CompilerPhaseInputOutputManager(fileSystem, options), (message) {
     if (!options.dryRun) printDiagnosticMessage(message, errorPrinter);
   });
 
@@ -109,35 +90,5 @@
     return 255;
   }
 
-  switch (result) {
-    case CfeResult(:final component):
-      await File(options.outputFile)
-          .writeAsBytes(writeComponentToBytes(component));
-    case TfaResult(:final component):
-      await File(options.outputFile)
-          .writeAsBytes(writeComponentToBytes(component));
-    case CodegenResult(:final wasmModules, :final jsRuntime, :final supportJs):
-      final writeFutures = <Future>[];
-      wasmModules.forEach((moduleName, moduleInfo) {
-        final (:moduleBytes, :sourceMap) = moduleInfo;
-        final File outFile = File(moduleNameToWasmOutputFile(moduleName));
-        outFile.parent.createSync(recursive: true);
-        writeFutures.add(outFile.writeAsBytes(moduleBytes));
-
-        if (sourceMap != null) {
-          writeFutures.add(File(moduleNameToSourceMapFile(moduleName))
-              .writeAsString(sourceMap));
-        }
-      });
-      await Future.wait(writeFutures);
-
-      final jsFile = path.setExtension(options.outputFile, '.mjs');
-      await File(jsFile).writeAsString(jsRuntime);
-
-      final supportJsFile =
-          path.setExtension(options.outputFile, '.support.js');
-      await File(supportJsFile).writeAsString(supportJs);
-  }
-
   return 0;
 }
diff --git a/pkg/dart2wasm/lib/globals.dart b/pkg/dart2wasm/lib/globals.dart
index 5f3762e..5c8ae0f 100644
--- a/pkg/dart2wasm/lib/globals.dart
+++ b/pkg/dart2wasm/lib/globals.dart
@@ -72,6 +72,25 @@
     return global.type.type;
   }
 
+  /// Dual to [readGlobal]
+  void writeGlobal(w.InstructionsBuilder b, w.Global global) {
+    final owningModule = translator.moduleToBuilder[global.enclosingModule]!;
+    final callingModule = b.moduleBuilder;
+    if (owningModule == callingModule) {
+      b.global_set(global);
+    } else if (translator.isMainModule(owningModule)) {
+      final importedGlobal = _globalsModuleMap.get(global, callingModule);
+      b.global_set(importedGlobal);
+    } else {
+      // NOTE: Currently unused but we can support this just like in
+      // [readGlobal] via an indirect call to a setter function that's installed
+      // by the global-owning module.
+      throw UnsupportedError(
+          'Currently we can only write to globals in the main module or in the '
+          'local module in which the write happens.');
+    }
+  }
+
   /// Return (and if needed create) the Wasm global corresponding to a static
   /// field.
   w.Global getGlobalForStaticField(Field field) {
diff --git a/pkg/dart2wasm/lib/intrinsics.dart b/pkg/dart2wasm/lib/intrinsics.dart
index 3736abe..523cc8e 100644
--- a/pkg/dart2wasm/lib/intrinsics.dart
+++ b/pkg/dart2wasm/lib/intrinsics.dart
@@ -401,6 +401,10 @@
       op == '_le_u' ||
       op == '_lt_u';
 
+  final Map<w.ModuleBuilder, w.ImportedFunction> _thisModuleGlobals = {};
+  late final w.FunctionType _thisModuleType = translator.typesBuilder
+      .defineFunction(const [], const [w.RefType.extern(nullable: false)]);
+
   Intrinsifier(this.codeGen);
 
   /// Generate inline code for an [InstanceGet] if the member is an inlined
@@ -835,6 +839,18 @@
       }
     }
 
+    if (target.enclosingLibrary.name == 'dart._js_helper') {
+      if (target.name.text == 'thisModule') {
+        final resultType = w.RefType.extern(nullable: false);
+        final func = _thisModuleGlobals.putIfAbsent(b.moduleBuilder, () {
+          return b.moduleBuilder.functions
+              .import("\$moduleHelpers", "this", _thisModuleType);
+        });
+        b.call(func);
+        return resultType;
+      }
+    }
+
     return null;
   }
 
@@ -1933,8 +1949,10 @@
         b.ref_cast(w.RefType.def(
             translator.closureLayouter.genericVtableBaseStruct,
             nullable: false));
-        b.struct_get(translator.closureLayouter.genericVtableBaseStruct,
-            FieldIndex.vtableInstantiationTypeHashFunction);
+        b.struct_get(
+            translator.closureLayouter.genericVtableBaseStruct,
+            translator
+                .closureLayouter.vtableInstantiationTypeHashFunctionIndex);
         b.call_ref(translator
             .closureLayouter.instantiationClosureTypeHashFunctionType);
 
@@ -1964,9 +1982,11 @@
         b.ref_cast(w.RefType.def(
             translator.closureLayouter.genericVtableBaseStruct,
             nullable: false));
-        b.struct_get(translator.closureLayouter.genericVtableBaseStruct,
-            FieldIndex.vtableInstantiationTypeComparisonFunction);
 
+        final vtableIndex = translator
+            .closureLayouter.vtableInstantiationTypeComparisonFunctionIndex;
+        b.struct_get(
+            translator.closureLayouter.genericVtableBaseStruct, vtableIndex);
         b.call_ref(translator
             .closureLayouter.instantiationClosureTypeComparisonFunctionType);
 
@@ -2021,7 +2041,7 @@
         b.end();
         b.local_set(posArgsLocal);
 
-        // Convert named argument map to list, to be passed to shape and type
+        // Convert named argument map to array, to be passed to shape and type
         // checkers and the dynamic call entry.
         final namedArgsListLocal =
             b.addLocal(translator.nullableObjectArrayTypeRef);
@@ -2032,8 +2052,25 @@
 
         final noSuchMethodBlock = b.block();
 
-        generateDynamicFunctionCall(translator, b, closureLocal, typeArgsLocal,
-            posArgsLocal, namedArgsListLocal, noSuchMethodBlock);
+        generateDynamicClosureCallShapeAndTypeCheck(translator, b, closureLocal,
+            typeArgsLocal, posArgsLocal, namedArgsListLocal, noSuchMethodBlock);
+        if (translator.dynamicModuleSupportEnabled ||
+            translator.closureLayouter.usesFunctionApplyWithNamedArguments) {
+          generateDynamicClosureCallViaDynamicEntry(translator, b, closureLocal,
+              typeArgsLocal, posArgsLocal, namedArgsListLocal);
+        } else {
+          if (compilerAssertsEnabled) {
+            final good = b.block();
+            b.local_get(namedArgsListLocal);
+            b.array_len();
+            b.i32_eqz();
+            b.br_if(good);
+            b.unreachable();
+            b.end();
+          }
+          generateDynamicClosureCallViaPositionalArgs(
+              translator, b, closureLocal, typeArgsLocal, posArgsLocal);
+        }
         b.return_();
 
         b.end(); // noSuchMethodBlock
diff --git a/pkg/dart2wasm/lib/io_util.dart b/pkg/dart2wasm/lib/io_util.dart
new file mode 100644
index 0000000..7711314
--- /dev/null
+++ b/pkg/dart2wasm/lib/io_util.dart
@@ -0,0 +1,184 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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, Directory, Process, ProcessResult;
+import 'dart:typed_data';
+
+import 'package:build_integration/file_system/multi_root.dart'
+    show MultiRootFileSystemEntity, MultiRootFileSystem;
+import 'package:front_end/src/api_prototype/file_system.dart' show FileSystem;
+import 'package:kernel/ast.dart' show Component;
+import 'package:kernel/binary/ast_from_binary.dart'
+    show BinaryBuilderWithMetadata;
+import 'package:kernel/kernel.dart'
+    show writeComponentToBinary, writeComponentToText;
+import 'package:path/path.dart' as path;
+
+import 'compiler_options.dart';
+
+class CompilerPhaseInputOutputManager {
+  final FileSystem fileSystem;
+  final WasmCompilerOptions options;
+
+  CompilerPhaseInputOutputManager(FileSystem fileSystem, this.options)
+      : fileSystem = options.multiRootScheme != null
+            ? MultiRootFileSystem(
+                options.multiRootScheme!,
+                options.multiRoots.isEmpty ? [Uri.base] : options.multiRoots,
+                fileSystem)
+            : fileSystem;
+
+  String _moduleNameToWasmFile(String prefix, String moduleName) {
+    return path.join(path.dirname(prefix), moduleName);
+  }
+
+  String _moduleNameToSourceMapFile(String prefix, String moduleName) {
+    return '${_moduleNameToWasmFile(prefix, moduleName)}.map';
+  }
+
+  Uri _moduleNameToRelativeSourceMapUri(String moduleName) {
+    return Uri.file(path
+        .basename(_moduleNameToSourceMapFile(options.outputFile, moduleName)));
+  }
+
+  Uri Function(String)? get sourceMapUrlGenerator =>
+      options.translatorOptions.generateSourceMaps
+          ? _moduleNameToRelativeSourceMapUri
+          : null;
+
+  Future<String> readString(Uri uri) async {
+    return await File.fromUri((await resolveUri(uri))!).readAsString();
+  }
+
+  Future<List<int>> readBytes(Uri uri) async {
+    return await File.fromUri((await resolveUri(uri))!).readAsBytes();
+  }
+
+  Future<void> readComponent(Uri componentUri, Component component) async {
+    BinaryBuilderWithMetadata(
+            await File.fromUri((await resolveUri(componentUri))!).readAsBytes())
+        .readComponent(component);
+  }
+
+  Future<void> writeComponent(Component component, String path,
+      {bool includeSource = true}) {
+    return writeComponentToBinary(component, path,
+        includeSource: includeSource);
+  }
+
+  void writeComponentAsText(Component component, String path) {
+    writeComponentToText(component, path: path, showMetadata: true);
+  }
+
+  Future<void> writeWasmModule(Uint8List wasmModule, String moduleName) {
+    final wasmFileName = _moduleNameToWasmFile(options.outputFile, moduleName);
+    final Directory dir = Directory(path.dirname(wasmFileName));
+    // Do this synchronously to make sure it happens before subsequent async
+    // operations.
+    if (!dir.existsSync()) {
+      dir.createSync(recursive: true);
+    }
+
+    return File(wasmFileName).writeAsBytes(wasmModule);
+  }
+
+  Future<void> writeWasmSourceMap(String sourceMap, String moduleName) {
+    return File(_moduleNameToSourceMapFile(options.outputFile, moduleName))
+        .writeAsString(sourceMap);
+  }
+
+  Future<void> writeJsRuntime(String jsRuntime) {
+    return File(path.setExtension(options.outputFile, '.mjs'))
+        .writeAsString(jsRuntime);
+  }
+
+  Future<void> writeSupportJs(String supportJs) {
+    return File(path.setExtension(options.outputFile, '.support.js'))
+        .writeAsString(supportJs);
+  }
+
+  Future<void> runWasmOpt(
+      String mainWasmModule, int moduleId, List<String> flags) async {
+    final inputModuleName = options.moduleNameForId(mainWasmModule, moduleId);
+
+    final outputModuleName =
+        options.moduleNameForId(options.outputFile, moduleId);
+    final wasmOutName =
+        _moduleNameToWasmFile(options.outputFile, outputModuleName);
+    final wasmInName = _moduleNameToWasmFile(mainWasmModule, inputModuleName);
+    final args = [
+      ...flags,
+      wasmInName,
+      '-o',
+      wasmOutName,
+      if (options.translatorOptions.generateSourceMaps) ...[
+        '-ism',
+        _moduleNameToSourceMapFile(mainWasmModule, inputModuleName),
+        '-osm',
+        _moduleNameToSourceMapFile(options.outputFile, outputModuleName),
+      ],
+      if (!options.stripWasm) '-g',
+    ];
+    if (options.saveUnopt) {
+      await File(wasmInName)
+          .copy(path.setExtension(wasmOutName, '.unopt.wasm'));
+    }
+    final wasmOptPath = options.wasmOptPath?.toFilePath() ?? 'wasm-opt';
+    final result = await _runProcess(wasmOptPath, args);
+    if (result.exitCode != 0) {
+      throw Exception('wasm-opt failed with exit code ${result.exitCode}:'
+          '\n${result.stdout}\n${result.stderr}');
+    }
+  }
+
+  Future<ProcessResult> _runProcess(
+      String executable, List<String> args) async {
+    return await Process.run(executable, args);
+  }
+
+  Future<int> getModuleCount(Uri mainWasmFile) async {
+    final mainPath = (await resolveUri(mainWasmFile))!.toFilePath();
+    final files = (await Directory(path.dirname(mainPath)).list().toList());
+    final prefix = path.basenameWithoutExtension(mainPath);
+    bool isMultiModule = false;
+    int maxModuleId = 0;
+    for (final file in files) {
+      if (file is! File) continue;
+      final fileBase = path.basename(file.path);
+      if (!fileBase.startsWith(prefix)) continue;
+      if (path.extension(fileBase) != '.wasm') continue;
+      final fileSuffix =
+          path.setExtension(fileBase, '').substring(prefix.length);
+      if (!fileSuffix.startsWith('_module')) continue;
+      isMultiModule = true;
+      final moduleId = int.tryParse(fileSuffix.substring('_module'.length));
+      if (moduleId == null) continue;
+      maxModuleId = moduleId > maxModuleId ? moduleId : maxModuleId;
+    }
+    return isMultiModule ? maxModuleId + 1 : 1;
+  }
+
+  Future<Uint8List> readMainDynModuleMetadataBytes() async {
+    final filename = options.dynamicModuleMetadataFile ??
+        Uri.parse(path.setExtension(
+            options.dynamicMainModuleUri!.toFilePath(), '.dyndata'));
+    return await File.fromUri(filename).readAsBytes();
+  }
+
+  Future<void> writeMainDynModuleMetadataBytes(Uint8List bytes) async {
+    final filename = options.dynamicModuleMetadataFile ??
+        Uri.parse(path.setExtension(
+            options.dynamicMainModuleUri!.toFilePath(), '.dyndata'));
+    await File.fromUri(filename).writeAsBytes(bytes);
+  }
+
+  Future<Uri?> resolveUri(Uri? uri) async {
+    if (uri == null) return null;
+    var fileSystemEntity = fileSystem.entityForUri(uri);
+    if (fileSystemEntity is MultiRootFileSystemEntity) {
+      fileSystemEntity = await fileSystemEntity.delegate;
+    }
+    return fileSystemEntity.uri;
+  }
+}
diff --git a/pkg/dart2wasm/lib/js/callback_specializer.dart b/pkg/dart2wasm/lib/js/callback_specializer.dart
index 5a4eef3..d92fbf0 100644
--- a/pkg/dart2wasm/lib/js/callback_specializer.dart
+++ b/pkg/dart2wasm/lib/js/callback_specializer.dart
@@ -234,10 +234,10 @@
     String argumentsLength =
         captureThis ? 'arguments.length + 1' : 'arguments.length';
     String dartArguments = 'f,$argumentsLength';
-    String jsMethodParams = 'f';
+    String jsMethodParams = '(module,f)';
     if (needsCastClosure) {
       dartArguments = '$dartArguments,castClosure';
-      jsMethodParams = '($jsMethodParams,castClosure)';
+      jsMethodParams = '(module,f,castClosure)';
     }
     if (captureThis) dartArguments = '$dartArguments,this';
     if (jsParameters.isNotEmpty) {
@@ -251,6 +251,9 @@
         'dart2wasm.$jsMethodName',
         FunctionNode(null,
             positionalParameters: [
+              VariableDeclaration('thisModule',
+                  type: _util.nonNullableWasmExternRefType,
+                  isSynthesized: true),
               VariableDeclaration('dartFunction',
                   type: _util.nonNullableWasmExternRefType,
                   isSynthesized: true),
@@ -271,7 +274,7 @@
         dartProcedure,
         jsMethodName,
         "$jsMethodParams => finalizeWrapper(f, function($jsWrapperParams) {"
-        " return dartInstance.exports.${functionTrampoline.name.text}($dartArguments) "
+        " return module.exports.${functionTrampoline.name.text}($dartArguments) "
         "})");
 
     return (dartProcedure, functionTrampoline);
@@ -356,6 +359,7 @@
         StaticInvocation(
             jsWrapperFunction,
             Arguments([
+              StaticGet(_util.thisModuleGetter),
               StaticInvocation(
                   _util.jsObjectFromDartObjectTarget, Arguments([argument])),
               if (castClosure != null)
diff --git a/pkg/dart2wasm/lib/js/runtime_blob.dart b/pkg/dart2wasm/lib/js/runtime_blob.dart
index 1d8a3a8..d290c8d 100644
--- a/pkg/dart2wasm/lib/js/runtime_blob.dart
+++ b/pkg/dart2wasm/lib/js/runtime_blob.dart
@@ -119,6 +119,7 @@
       ...additionalImports,
       <<MODULE_LOADING_IMPORT>>
       <<JS_POLYFILL_IMPORT>>
+      "$moduleHelpers": {"this": () => dartInstance},
     });
 
     return new InstantiatedApp(this, dartInstance);
@@ -196,11 +197,13 @@
           const module = await ((source instanceof Response)
               ? WebAssembly.compileStreaming(source, builtins)
               : WebAssembly.compile(source, builtins));
-          await WebAssembly.instantiate(module, {
+          let moduleInstance;
+          moduleInstance = await WebAssembly.instantiate(module, {
             ...baseImports,
             ...additionalImports,
             <<JS_POLYFILL_IMPORT>>
-            "module0": dartInstance.exports,
+            "<<MAIN_MODULE_NAME>>": dartInstance.exports,
+            "$moduleHelpers": {"this": () => moduleInstance},
           });
         }
         const promises = [];
@@ -218,11 +221,13 @@
           const module = await ((source instanceof Response)
               ? WebAssembly.compileStreaming(source, this.builtins)
               : WebAssembly.compile(source, this.builtins));
-          await WebAssembly.instantiate(module, {
+          let moduleInstance;
+          moduleInstance = await WebAssembly.instantiate(module, {
             ...baseImports,
             ...additionalImports,
             <<JS_POLYFILL_IMPORT>>
-            "module0": dartInstance.exports,
+            "<<MAIN_MODULE_NAME>>": dartInstance.exports,
+            "$moduleHelpers": {"this": () => moduleInstance},
           });
         }
       },
@@ -231,14 +236,16 @@
           throw "No implementation of loadDynamicModule provided.";
         }
         const [source, jsModule] = await loadDynamicModule(wasmUri, jsUri);
+        let moduleInstance;
         const module = await ((source instanceof Response)
             ? WebAssembly.compileStreaming(source, this.builtins)
             : WebAssembly.compile(source, this.builtins));
-        const loadedModule = await WebAssembly.instantiate(module, {
-          "module0": dartInstance.exports,
+        moduleInstance = await WebAssembly.instantiate(module, {
+          "<<MAIN_MODULE_NAME>>": dartInstance.exports,
+            "$moduleHelpers": {"this": () => moduleInstance},
           ...jsModule.imports(finalizeWrapper),
         });
-        return loadedModule.exports.$invokeEntryPoint;
+        return moduleInstance.exports.$invokeEntryPoint;
       },
     };
 ''');
diff --git a/pkg/dart2wasm/lib/js/runtime_generator.dart b/pkg/dart2wasm/lib/js/runtime_generator.dart
index 3712d17..62f508a 100644
--- a/pkg/dart2wasm/lib/js/runtime_generator.dart
+++ b/pkg/dart2wasm/lib/js/runtime_generator.dart
@@ -99,12 +99,13 @@
     }
     if (!requireJsBuiltin) {
       sb.writeln(
-          '${indent}S: new Proxy({}, { get(_, prop) { return prop; } }),');
+          '$indent"": new Proxy({}, { get(_, prop) { return prop; } }),');
     }
     return '$sb';
   }
 
   String generate(
+      String mainModuleName,
       Iterable<Procedure> translatedProcedures,
       List<String> constantStrings,
       bool requireJsBuiltin,
@@ -113,7 +114,7 @@
 
     final builtins = [
       'builtins: [\'js-string\']',
-      if (requireJsBuiltin) 'importedStringConstants: \'S\'',
+      if (requireJsBuiltin) 'importedStringConstants: \'\'',
     ];
 
     String internalizedStrings =
@@ -132,6 +133,7 @@
     final moduleLoadingHelperMethods = supportsAdditionalModuleLoading
         ? moduleLoadingHelperTemplate.instantiate({
             ...jsStringBuiltinPolyfillImportVars,
+            'MAIN_MODULE_NAME': mainModuleName,
           })
         : '';
 
diff --git a/pkg/dart2wasm/lib/js/util.dart b/pkg/dart2wasm/lib/js/util.dart
index 8f78d9d..13590be 100644
--- a/pkg/dart2wasm/lib/js/util.dart
+++ b/pkg/dart2wasm/lib/js/util.dart
@@ -68,6 +68,7 @@
   final Procedure jsifyJSArrayBufferImpl; // JS ByteBuffer
   final Procedure jsArrayBufferFromDartByteBuffer; // Wasm ByteBuffer
   final Procedure jsifyFunction;
+  final Procedure thisModuleGetter;
 
   // Classes used in type tests for the converters.
   final Class jsInt8ArrayImplClass;
@@ -268,6 +269,8 @@
             'dart:_js_helper', 'jsArrayBufferFromDartByteBuffer'),
         jsifyFunction = coreTypes.index
             .getTopLevelProcedure('dart:_js_helper', 'jsifyFunction'),
+        thisModuleGetter = coreTypes.index
+            .getTopLevelProcedure('dart:_js_helper', 'get:thisModule'),
         jsInt8ArrayImplClass =
             coreTypes.index.getClass('dart:_js_types', 'JSInt8ArrayImpl'),
         jsUint8ArrayImplClass =
diff --git a/pkg/dart2wasm/lib/kernel_nodes.dart b/pkg/dart2wasm/lib/kernel_nodes.dart
index 61c3f61..713d93e 100644
--- a/pkg/dart2wasm/lib/kernel_nodes.dart
+++ b/pkg/dart2wasm/lib/kernel_nodes.dart
@@ -276,6 +276,8 @@
       index.getTopLevelProcedure("dart:core", "_runtimeTypeEquals");
   late final Procedure runtimeTypeHashCode =
       index.getTopLevelProcedure("dart:core", "_runtimeTypeHashCode");
+  late final Procedure? functionApply =
+      index.tryGetProcedure('dart:core', 'Function', 'apply');
 
   // dart:core invocation/exception procedures
   late final Procedure invocationGetterFactory =
@@ -437,10 +439,10 @@
       index.getTopLevelField('dart:_internal', 'boxedIntImmutableArray');
 
   // Deferred loading.
-  late final Procedure? loadLibraryFromLoadId = index.tryGetProcedure(
-      'dart:_internal', LibraryIndex.topLevel, 'loadLibraryFromLoadId');
-  late final Procedure? checkLibraryIsLoadedFromLoadId = index
-      .getTopLevelProcedure('dart:_internal', 'checkLibraryIsLoadedFromLoadId');
+  late final Procedure? checkLibraryIsLoadedFromLoadId = index.tryGetProcedure(
+      'dart:_internal',
+      LibraryIndex.topLevel,
+      'checkLibraryIsLoadedFromLoadId');
   late final Procedure? dartInternalLoadingMapGetter = index.tryGetProcedure(
       'dart:_internal', LibraryIndex.topLevel, 'get:_loadingMap');
   late final Procedure? dartInternalLoadingMapNamesGetter =
diff --git a/pkg/dart2wasm/lib/library_dependencies_pruner.dart b/pkg/dart2wasm/lib/library_dependencies_pruner.dart
new file mode 100644
index 0000000..9e01f62
--- /dev/null
+++ b/pkg/dart2wasm/lib/library_dependencies_pruner.dart
@@ -0,0 +1,365 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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/library_index.dart';
+
+/// If a deferred library import has this name prefix it isn't used to load
+/// anything. It only serves to maintain that any [CheckLibraryIsLoaded] throws
+/// if the [LoadLibrary] call was not called.
+const unusedDeferredLibraryPrefix = 'unused-';
+
+/// Prunes [Library.dependencies] to contain precisely those imports needed.
+///
+/// Dart2wasm only uses library dependencies for one purpose, namely for
+/// computing deferred loading units. This computation is done based on the
+/// import graph and the granularity is on a library level.
+///
+/// We make the following overvations:
+///
+///   a) Using a type from a import
+///     -> The main wasm module has all Dart runtime type information atm
+///     -> No need to import a library to use classes from it in types.
+///
+///   b) Using a constant from an import
+///     -> If we use a [InstanceConstant] / [TearOffConstant] in a library then
+///        we have to ensure the enclosing library of the
+///        [InstanceConstant.classNode] / [TearOffConstant.target] is imported.
+///     -> This ensures that the code for closure/method is available when
+///        invoking it.
+///     -> Any other constant doesn't require an import.
+///
+///   c) Using static elements from an import
+///     -> If we invoke a constructor, a static method, static getter, super
+///        constructor, etc we need to import the target's enclosing library.
+///     -> This will guarantee we have the code for target loaded when we perform
+///        the call.
+///
+///   d) Instance/Dynamic invocations, other uses of [Reference]s
+///     -> Does not require an import of the [Reference]s enclosing library.
+///     -> We have sound type system: If the call is executed we know that the
+///        receiver was allocated (and whoever allocated it has ensured - via c)
+///        above - that the code for methods of the receiver is loaded).
+///
+/// So we establish the following invariants
+///
+///   * We only have imports for [Reference]s which are used for "static"-like
+///     calls
+///
+///   * We import the library containing the definition of a [Reference] and not
+///     e.g. a library that may re-export it
+///
+///   * If a [Reference] was usable via a deferred import (possibly via
+///     a deferred library that re-exported the [Reference]) we ensure the newly
+///     inserted import will also be deferred.
+///
+/// The transform will
+///
+///   * prune [Library.dependencies] to be exact, i.e. have a import iff
+///     something is used from the imported library
+///
+///   * will remove all exports
+///
+///   * may insert more precise [LoadLibrary]/[CheckLibraryIsLoaded] if we don't
+///     use a deferred library directly but things it re-exported
+///
+void pruneLibraryDependencies(LibraryIndex libraryIndex, Component component) {
+  final constantToLibrarySet = _ConstantToLibrarySet();
+  for (final library in component.libraries) {
+    final usedLibraries =
+        _Collector(library, constantToLibrarySet).usedLibraries;
+    _ImportPruner(libraryIndex, usedLibraries, library);
+  }
+  for (final library in component.libraries) {
+    library.dependencies.removeWhere((dep) {
+      if (dep.isExport) {
+        dep.parent = null;
+        return true;
+      }
+      return false;
+    });
+  }
+}
+
+class _ImportPruner extends Transformer {
+  final LibraryIndex libraryIndex;
+
+  final Set<Library> usedLibraries;
+  final Library library;
+  final additionalDeferredImports =
+      <LibraryDependency, List<LibraryDependency>>{};
+
+  late final futureImmediate =
+      libraryIndex.getConstructor('dart:async', '_Future', 'immediate');
+
+  _ImportPruner(this.libraryIndex, this.usedLibraries, this.library) {
+    // Step 1) Prune existing library imports.
+
+    // The set of libraries that we need to import and are already covered via
+    // an existing library import.
+    final librariesOfExistingImports = <Library>{};
+
+    // Maps a library to all the deferred imports that made this library
+    // available.
+    final libraryToDeferredImports = <Library, List<LibraryDependency>>{};
+
+    // The new set of imports (possibly smaller - removing unused dependencies,
+    // possibly larger - adding used but not yet imported dependencies).
+    final prunedDependencies = <LibraryDependency>[];
+    for (final dep in library.dependencies) {
+      if (dep.isExport) {
+        prunedDependencies.add(dep);
+        continue;
+      }
+      if (usedLibraries.contains(dep.targetLibrary)) {
+        librariesOfExistingImports.add(dep.targetLibrary);
+        prunedDependencies.add(dep);
+        continue;
+      }
+
+      if (dep.isDeferred) {
+        // Although the deferred dependency isn't used, for making sure
+        // [CheckLibraryIsLoaded] nodes throw if no preceding
+        // [LoadLibrary] was called we have to maintain a dummy import. This
+        // will also ensure the exception mentions the right name.
+        prunedDependencies.add(dep);
+        dep.name = '$unusedDeferredLibraryPrefix${dep.name!}';
+
+        // Loop over all libraries available via the deferred import that are
+        // used. The transformer will then issue individual [LoadLibrary] calls
+        // to them.
+        for (final available in _transitiveLibrarySet(dep.targetLibrary)) {
+          if (usedLibraries.contains(available)) {
+            libraryToDeferredImports.putIfAbsent(available, () => []).add(dep);
+          }
+        }
+        continue;
+      }
+
+      // The [dep] isn't directly used, remove it.
+      assert(!dep.isDeferred);
+      dep.parent = null;
+    }
+    library.dependencies = prunedDependencies;
+
+    // Step 2) Add missing imports.
+    for (final used in usedLibraries) {
+      // Maybe we already import the [used] library.
+      if (librariesOfExistingImports.contains(used)) {
+        continue;
+      }
+
+      // Never emit a library import to `dart:core`, it's special.
+      if (used.importUri.scheme == 'dart' && used.importUri.path == 'core') {
+        continue;
+      }
+
+      // We need to inject a new import of the [used] library.
+      final oldDeferredImports = libraryToDeferredImports[used];
+      if (oldDeferredImports == null) {
+        // This library was not accessible via old deferred imports, so we emit
+        // a normal import.
+        library.addDependency(LibraryDependency.import(used));
+        continue;
+      }
+
+      // The library was accessible (via a re-export) from an deferred
+      // import. Let's make a new deferred import for that particular library.
+      final newDep = LibraryDependency.deferredImport(
+          used, 'PreciseDeferredDep-${used.dependencies.length}');
+      library.addDependency(newDep);
+      for (final oldImport in oldDeferredImports) {
+        // Any [LoadLibrary] or [CheckLibraryIsLoaded] node that operated on the
+        // old (unused) deferred import needs to cover the [newDep] (possibly in
+        // addition to the existing dep (if used) and others).
+        additionalDeferredImports.putIfAbsent(oldImport, () => []).add(newDep);
+      }
+    }
+
+    // We only have to transform the body of the library if any [LoadLibrary] or
+    // [CheckLibraryIsLoaded] has to be modified.
+    if (additionalDeferredImports.isNotEmpty) {
+      library.transformChildren(this);
+    }
+  }
+
+  @override
+  TreeNode visitLoadLibrary(LoadLibrary node) {
+    node = super.visitLoadLibrary(node) as LoadLibrary;
+    final additional = additionalDeferredImports[node.import];
+    if (additional == null) return node;
+    return BlockExpression(
+        Block([
+          // This may be a dummy/unused which we only omit for throwing correct
+          // errors if a access (e.g. of a type) is used before the load call.
+          ExpressionStatement(node),
+
+          for (final replacement in additional.skip(1))
+            ExpressionStatement(LoadLibrary(replacement)),
+        ]),
+        LoadLibrary(additional.last));
+  }
+
+  @override
+  TreeNode visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+    node = super.visitCheckLibraryIsLoaded(node) as CheckLibraryIsLoaded;
+    final additional = additionalDeferredImports[node.import];
+    if (additional == null) return node;
+    return BlockExpression(
+        Block([
+          // This may be a dummy/unused which we only omit for throwing correct
+          // errors if a access (e.g. of a type) is used before the load call.
+          ExpressionStatement(node),
+
+          for (final replacement in additional.skip(1))
+            ExpressionStatement(CheckLibraryIsLoaded(replacement)),
+        ]),
+        CheckLibraryIsLoaded(additional.last));
+  }
+}
+
+/// Traverses the AST of a [Library] and collects the set of libraries we need
+/// to import due to accessing elements "statically" (see
+/// [pruneLibraryDependencies] for more information)
+class _Collector extends RecursiveVisitor {
+  final Library library;
+  final _ConstantToLibrarySet constantToLibrarySet;
+
+  /// The libraries that need to be imported.
+  final Set<Library> usedLibraries = {};
+
+  _Collector(this.library, this.constantToLibrarySet) {
+    library.accept(this);
+  }
+
+  @override
+  void visitStaticGet(StaticGet node) {
+    super.visitStaticGet(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void visitStaticSet(StaticSet node) {
+    super.visitStaticSet(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void visitStaticInvocation(StaticInvocation node) {
+    super.visitStaticInvocation(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void visitConstructorInvocation(ConstructorInvocation node) {
+    super.visitConstructorInvocation(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void visitSuperInitializer(SuperInitializer node) {
+    super.visitSuperInitializer(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void visitRedirectingInitializer(RedirectingInitializer node) {
+    super.visitRedirectingInitializer(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void visitStaticTearOff(StaticTearOff node) {
+    super.visitStaticTearOff(node);
+    addLibrary(node.target.enclosingLibrary);
+  }
+
+  @override
+  void defaultDartType(DartType node) {
+    // Ignore due to compiler always able to construct runtime type objects when
+    // needed (see also [pruneLibraryDependencies]).
+  }
+
+  @override
+  void visitSupertype(Supertype node) {
+    // Ignore due to compiler always able to construct runtime type objects when
+    // needed (see also [pruneLibraryDependencies]).
+  }
+
+  @override
+  void visitConstantExpression(ConstantExpression node) {
+    usedLibraries.addAll(constantToLibrarySet.librariesFor(node.constant));
+  }
+
+  void addLibrary(Library used) {
+    if (used != library) {
+      usedLibraries.add(used);
+    }
+  }
+}
+
+class _ConstantToLibrarySet {
+  final _constantToTransitiveLibraries = <Constant, Set<Library>>{};
+
+  /// Collects the set of libraries one needs to import when accessing
+  /// [constant].
+  ///
+  /// This include enclosing libraries of all [InstanceConstant]s
+  /// and [TearOffConstant]s of the transitive constant graph of [constant].
+  Set<Library> librariesFor(Constant constant) {
+    final existing = _constantToTransitiveLibraries[constant];
+    if (existing != null) return existing;
+
+    final transitiveLibraries = <Library>{
+      if (constant is InstanceConstant) constant.classNode.enclosingLibrary,
+      if (constant is TearOffConstant) constant.target.enclosingLibrary,
+      // Collect all transitive libraries for direct child constants.
+      for (final childConstant
+          in _ChildConstantCollector.directChildrenOf(constant))
+        ...librariesFor(childConstant),
+    };
+
+    return _constantToTransitiveLibraries[constant] =
+        transitiveLibraries.isEmpty ? const <Library>{} : transitiveLibraries;
+  }
+}
+
+class _ChildConstantCollector extends RecursiveVisitor {
+  /// Returns the set of constants referred to by the (possibly composed)
+  /// [constant].
+  static Set<Constant> directChildrenOf(Constant constant) {
+    final children = <Constant>{};
+    constant.visitChildren(_ChildConstantCollector._(children));
+    return children;
+  }
+
+  final Set<Constant> _directChildren;
+  _ChildConstantCollector._(this._directChildren);
+
+  @override
+  void defaultConstantReference(Constant node) {
+    _directChildren.add(node);
+  }
+}
+
+/// Collects the set of libraries transitively imported via importing [library].
+///
+/// This includes [library] and any other library it transitively re-exports.
+Set<Library> _transitiveLibrarySet(Library library) {
+  final transitiveLibrarySet = <Library>{library};
+  final worklist = <Library>[library];
+  while (worklist.isNotEmpty) {
+    final toBeExpanded = worklist.removeLast();
+    assert(transitiveLibrarySet.contains(toBeExpanded));
+    for (final dep in toBeExpanded.dependencies) {
+      if (dep.isExport) {
+        final reExportedLibrary = dep.targetLibrary;
+        if (transitiveLibrarySet.add(reExportedLibrary)) {
+          worklist.add(reExportedLibrary);
+        }
+      }
+    }
+  }
+  return transitiveLibrarySet;
+}
diff --git a/pkg/dart2wasm/lib/modules.dart b/pkg/dart2wasm/lib/modules.dart
index 9c24891..5ee80a9 100644
--- a/pkg/dart2wasm/lib/modules.dart
+++ b/pkg/dart2wasm/lib/modules.dart
@@ -4,14 +4,11 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart';
-import 'package:path/path.dart' as path;
 
 import 'compiler_options.dart';
 import 'target.dart';
 import 'util.dart';
 
-const _mainModuleId = 0;
-
 Library? _enclosingLibraryForReference(Reference reference) {
   TreeNode? current = reference.node;
   // References generated for constants will not have a node attached.
@@ -24,7 +21,7 @@
 }
 
 class ModuleMetadataBuilder {
-  int _counter = _mainModuleId;
+  int _counter = WasmCompilerOptions.mainModuleId;
   final WasmCompilerOptions options;
 
   ModuleMetadataBuilder(this.options);
@@ -32,13 +29,11 @@
   ModuleMetadata buildModuleMetadata(
       {bool emitAsMain = false, bool skipEmit = false}) {
     final id = _counter++;
-    return ModuleMetadata._(
-        id,
-        emitAsMain || id == _mainModuleId
-            ? path.basename(options.outputFile)
-            : path.basename(
-                path.setExtension(options.outputFile, '_module$id.wasm')),
-        skipEmit: skipEmit);
+    final moduleImportName =
+        options.translatorOptions.minify ? intToMinString(id) : 'module$id';
+    return ModuleMetadata._(moduleImportName,
+        options.moduleNameForId(options.outputFile, id, emitAsMain: emitAsMain),
+        skipEmit: skipEmit, isMain: id == WasmCompilerOptions.mainModuleId);
   }
 }
 
@@ -52,16 +47,13 @@
 /// by library, by class or neither. [containsReference] should be used to
 /// determine if a module contains a given class/member reference.
 class ModuleMetadata {
-  /// The ID for the module which will be included in the emitted name.
-  final int _id;
-
   /// The set of libraries contained in this module.
   final Set<Library> libraries = {};
 
-  bool get isMain => _id == _mainModuleId;
+  final bool isMain;
 
   /// The name used to import and export this module.
-  String get moduleImportName => 'module$_id';
+  final String moduleImportName;
 
   /// The name added to the wasm output file for this module.
   final String moduleName;
@@ -69,14 +61,8 @@
   /// Whether or not a wasm file should be emitted for this module.
   final bool skipEmit;
 
-  ModuleMetadata._(this._id, this.moduleName, {this.skipEmit = false});
-
-  /// Whether or not the provided kernel [Reference] is included in this module.
-  bool containsReference(Reference reference) {
-    final enclosingLibrary = _enclosingLibraryForReference(reference);
-    if (enclosingLibrary == null) return false;
-    return libraries.contains(enclosingLibrary);
-  }
+  ModuleMetadata._(this.moduleImportName, this.moduleName,
+      {this.skipEmit = false, this.isMain = false});
 
   @override
   String toString() => '$moduleImportName($libraries)';
@@ -87,6 +73,12 @@
   /// All [ModuleMetadata]s generated for the program.
   final List<ModuleMetadata> modules;
 
+  /// Maps the [Library] to the corresponding [ModuleMetadata].
+  late final Map<Library, ModuleMetadata> _libraryToModuleMetadata = {
+    for (final metadata in modules)
+      for (final library in metadata.libraries) library: metadata,
+  };
+
   ModuleOutputData(this.modules) : assert(modules[0].isMain);
 
   ModuleMetadata get mainModule => modules[0];
@@ -95,8 +87,9 @@
   bool get hasMultipleModules => modules.length > 1;
 
   /// Returns the module that contains [reference].
-  ModuleMetadata moduleForReference(Reference reference) =>
-      modules.firstWhere((e) => e.containsReference(reference));
+  ModuleMetadata moduleForReference(Reference reference) {
+    return _libraryToModuleMetadata[_enclosingLibraryForReference(reference)]!;
+  }
 }
 
 /// Module strategy that puts all libraries into a single module.
@@ -118,6 +111,9 @@
   }
 
   @override
+  void addEntryPoints() {}
+
+  @override
   void prepareComponent() {}
 
   @override
@@ -137,6 +133,7 @@
 }
 
 abstract class ModuleStrategy {
+  void addEntryPoints();
   void prepareComponent();
   Future<void> processComponentAfterTfa(DeferredModuleLoadingMap loadingMap);
   ModuleOutputData buildModuleOutputData();
diff --git a/pkg/dart2wasm/lib/option.dart b/pkg/dart2wasm/lib/option.dart
index 89ddb5b..cd9a288 100644
--- a/pkg/dart2wasm/lib/option.dart
+++ b/pkg/dart2wasm/lib/option.dart
@@ -44,17 +44,21 @@
       void Function(WasmCompilerOptions o, T v) applyToOptions,
       T Function(dynamic v) converter,
       {String? defaultsTo,
+      String? abbr,
       bool hide = false})
-      : super(name, (a) => a.addOption(name, defaultsTo: defaultsTo),
-            applyToOptions, converter);
+      : super(
+            name,
+            (a) => a.addOption(name, defaultsTo: defaultsTo, abbr: abbr),
+            applyToOptions,
+            converter);
 }
 
 class IntOption extends ValueOption<int> {
   IntOption(
       String name, void Function(WasmCompilerOptions o, int v) applyToOptions,
-      {String? defaultsTo})
+      {String? defaultsTo, String? abbr})
       : super(name, applyToOptions, (v) => int.parse(v),
-            defaultsTo: defaultsTo);
+            defaultsTo: defaultsTo, abbr: abbr);
 }
 
 class StringOption extends ValueOption<String> {
diff --git a/pkg/dart2wasm/lib/static_dispatch_table.dart b/pkg/dart2wasm/lib/static_dispatch_table.dart
index 6c78019..59f53a1 100644
--- a/pkg/dart2wasm/lib/static_dispatch_table.dart
+++ b/pkg/dart2wasm/lib/static_dispatch_table.dart
@@ -74,11 +74,15 @@
     _table.forEach((fun, index) {
       final targetModule = translator.moduleToBuilder[fun.enclosingModule]!;
       if (translator.isMainModule(targetModule)) {
-        _definedWasmTable.setElement(index, fun);
+        _definedWasmTable.moduleBuilder.elements
+            .activeFunctionSegmentBuilderFor(_definedWasmTable)
+            .setFunctionAt(index, fun);
       } else {
         // This will generate the imported table if it doesn't already exist.
-        (getWasmTable(targetModule) as w.ImportedTable).setElements[index] =
-            fun;
+        final importedTable = getWasmTable(targetModule) as w.ImportedTable;
+        targetModule.elements
+            .activeFunctionSegmentBuilderFor(importedTable)
+            .setFunctionAt(index, fun);
       }
     });
 
diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart
index db498ab..24cca0e 100644
--- a/pkg/dart2wasm/lib/target.dart
+++ b/pkg/dart2wasm/lib/target.dart
@@ -432,25 +432,6 @@
   }
 
   @override
-  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}) {
-    return StaticInvocation(
-        coreTypes.noSuchMethodErrorDefaultConstructor,
-        Arguments(
-            [receiver, _instantiateInvocation(coreTypes, name, arguments)]));
-  }
-
-  @override
   bool get supportsSetLiterals => true;
 
   @override
diff --git a/pkg/dart2wasm/lib/translator.dart b/pkg/dart2wasm/lib/translator.dart
index 73e708e..6ce0069 100644
--- a/pkg/dart2wasm/lib/translator.dart
+++ b/pkg/dart2wasm/lib/translator.dart
@@ -44,15 +44,16 @@
 class TranslatorOptions {
   bool enableAsserts = false;
   bool importSharedMemory = false;
-  bool inlining = true;
+  int optimizationLevel = 1;
+  bool? inliningOverride;
   bool jsCompatibility = false;
-  bool omitImplicitTypeChecks = false;
+  bool? omitImplicitTypeChecksOverride;
   bool omitExplicitTypeChecks = false;
-  bool omitBoundsChecks = false;
+  bool? omitBoundsChecksOverride;
   bool polymorphicSpecialization = false;
   bool printKernel = false;
   bool printWasm = false;
-  bool minify = false;
+  bool? minifyOverride;
   bool verifyTypeChecks = false;
   bool verbose = false;
   bool enableExperimentalFfi = false;
@@ -60,23 +61,33 @@
   bool generateSourceMaps = true;
   bool enableDeferredLoading = false;
   bool enableMultiModuleStressTestMode = false;
+  bool enableProtobufTreeShaker = false;
+  bool enableProtobufMixinTreeShaker = false;
   int inliningLimit = 0;
   int? sharedMemoryMaxPages;
   bool requireJsStringBuiltin = false;
   List<int> watchPoints = [];
 
+  bool get inlining => inliningOverride ?? optimizationLevel >= 1;
+  bool get minify => minifyOverride ?? optimizationLevel >= 2;
+  bool get omitImplicitTypeChecks =>
+      omitImplicitTypeChecksOverride ?? optimizationLevel >= 3;
+  bool get omitBoundsChecks =>
+      omitBoundsChecksOverride ?? optimizationLevel >= 4;
+
   void serialize(DataSerializer sink) {
     sink.writeBool(enableAsserts);
     sink.writeBool(importSharedMemory);
-    sink.writeBool(inlining);
+    sink.writeInt(optimizationLevel);
+    sink.writeNullable(inliningOverride, sink.writeBool);
     sink.writeBool(jsCompatibility);
-    sink.writeBool(omitImplicitTypeChecks);
+    sink.writeNullable(omitImplicitTypeChecksOverride, sink.writeBool);
     sink.writeBool(omitExplicitTypeChecks);
-    sink.writeBool(omitBoundsChecks);
+    sink.writeNullable(omitBoundsChecksOverride, sink.writeBool);
     sink.writeBool(polymorphicSpecialization);
     sink.writeBool(printKernel);
     sink.writeBool(printWasm);
-    sink.writeBool(minify);
+    sink.writeNullable(minifyOverride, sink.writeBool);
     sink.writeBool(verifyTypeChecks);
     sink.writeBool(verbose);
     sink.writeBool(enableExperimentalFfi);
@@ -84,6 +95,8 @@
     sink.writeBool(generateSourceMaps);
     sink.writeBool(enableDeferredLoading);
     sink.writeBool(enableMultiModuleStressTestMode);
+    sink.writeBool(enableProtobufTreeShaker);
+    sink.writeBool(enableProtobufMixinTreeShaker);
     sink.writeInt(inliningLimit);
     sink.writeInt(
         sharedMemoryMaxPages == null ? 0 : (sharedMemoryMaxPages! + 1));
@@ -93,15 +106,17 @@
     final TranslatorOptions options = TranslatorOptions();
     options.enableAsserts = source.readBool();
     options.importSharedMemory = source.readBool();
-    options.inlining = source.readBool();
+    options.optimizationLevel = source.readInt();
+    options.inliningOverride = source.readNullable(source.readBool);
     options.jsCompatibility = source.readBool();
-    options.omitImplicitTypeChecks = source.readBool();
+    options.omitImplicitTypeChecksOverride =
+        source.readNullable(source.readBool);
     options.omitExplicitTypeChecks = source.readBool();
-    options.omitBoundsChecks = source.readBool();
+    options.omitBoundsChecksOverride = source.readNullable(source.readBool);
     options.polymorphicSpecialization = source.readBool();
     options.printKernel = source.readBool();
     options.printWasm = source.readBool();
-    options.minify = source.readBool();
+    options.minifyOverride = source.readNullable(source.readBool);
     options.verifyTypeChecks = source.readBool();
     options.verbose = source.readBool();
     options.enableExperimentalFfi = source.readBool();
@@ -109,6 +124,8 @@
     options.generateSourceMaps = source.readBool();
     options.enableDeferredLoading = source.readBool();
     options.enableMultiModuleStressTestMode = source.readBool();
+    options.enableProtobufTreeShaker = source.readBool();
+    options.enableProtobufMixinTreeShaker = source.readBool();
     options.inliningLimit = source.readInt();
     final int sharedMemoryMaxPages = source.readInt();
     options.sharedMemoryMaxPages =
@@ -1116,6 +1133,33 @@
     });
   }
 
+  final _closureArgumentsDispatchers =
+      <w.ModuleBuilder, Map<ClosureRepresentation, w.BaseFunction>>{};
+  w.BaseFunction getClosureArgumentsDispatcher(
+      w.ModuleBuilder module, ClosureRepresentation r) {
+    // We can only unpack (type, positional, named) argument arrays and forward
+    // to specific vtable entries if we have closed-world knowledge of all used
+    // name combinations.
+    assert(!dynamicModuleSupportEnabled &&
+        !closureLayouter.usesFunctionApplyWithNamedArguments);
+
+    final moduleCache = _closureArgumentsDispatchers[module] ??= {};
+    return moduleCache.putIfAbsent(r, () {
+      final representationString = '${r.typeCount}-'
+          '${r.maxPositionalCount}'
+          '${r.hasNamed ? '-' : ''}'
+          '${r.nameCombinations.join('-')}';
+      final function = module.functions.define(
+          dynamicCallVtableEntryFunctionType,
+          "closure arguments dispatcher representation=$representationString");
+      compilationQueue.add(CompilationTask(
+          function,
+          _ClosureArgumentsToVtableEntryDispatcherGenerator(
+              this, r, function)));
+      return function;
+    });
+  }
+
   ClosureImplementation getClosure(
       FunctionNode functionNode,
       w.BaseFunction target,
@@ -1236,7 +1280,8 @@
       int fieldIndex = representation.vtableBaseIndex + functions.length;
       assert(fieldIndex ==
           representation.fieldIndexForSignature(posArgCount, argNames));
-      w.FunctionType signature = representation.getVtableFieldType(fieldIndex);
+      w.FunctionType signature =
+          representation.vtableStruct.getVtableEntryAt(fieldIndex);
       w.BaseFunction function = canBeCalledWith(posArgCount, argNames)
           ? makeTrampoline(signature, posArgCount, argNames)
           : getDummyValuesCollectorForModule(ib.moduleBuilder)
@@ -1249,8 +1294,27 @@
         w.RefType.def(representation.vtableStruct, nullable: false),
         mutable: false));
     final ib = vtable.initializer;
-    final dynamicCallEntry = makeDynamicCallEntry();
-    ib.ref_func(dynamicCallEntry);
+
+    // NOTE: In dynamic modules we do not have closed world knowledge of closure
+    // definitions and callsites, so the dynamic call entry cannot dispatch to
+    // representation specific vtable entries.
+    //
+    // Even if we have closed world knowledge, if anywhere in the program
+    // `Function.apply` is used with named arguments, then we don't know which
+    // name-combinations may be used and we want to avoid creating vtable
+    // entries for all possible name combinations. So also in this situation we
+    // cannot dispatch to representation-specific vtable entries.
+    //
+    // If none of the two cases above apply, we can make the dynamic call entry
+    // be a shared stub that dispatches (based on arguments) to the right
+    // representation specific vtable entry. This saves code size as we don't
+    // have 1 dynamic call entry function per closure but rather 1 per closure
+    // shape / representation.
+    w.BaseFunction? dynamicCallEntry;
+    if (dynamicModuleSupportEnabled ||
+        closureLayouter.usesFunctionApplyWithNamedArguments) {
+      ib.ref_func(dynamicCallEntry = makeDynamicCallEntry());
+    }
     if (representation.isGeneric) {
       ib.ref_func(representation
           .instantiationTypeComparisonFunctionForModule(ib.moduleBuilder));
@@ -1984,7 +2048,7 @@
       internalizedStringsForJSRuntime.add(s);
     } else {
       internalizedString = module.globals.import(
-        'S',
+        '',
         s,
         w.GlobalType(w.RefType.extern(nullable: false), mutable: false),
       );
@@ -2336,6 +2400,324 @@
   }
 }
 
+class _ClosureArgumentsToVtableEntryDispatcherGenerator
+    implements CodeGenerator {
+  final Translator translator;
+  final ClosureRepresentation representation;
+  final w.FunctionBuilder function;
+
+  _ClosureArgumentsToVtableEntryDispatcherGenerator(
+      this.translator, this.representation, this.function);
+
+  @override
+  void generate(w.InstructionsBuilder b, List<w.Local> paramLocals,
+      w.Label? returnLabel) {
+    assert(returnLabel == null);
+
+    final b = function.body;
+
+    final closureLocal = function.locals[0];
+    final typeArgsLocal = function.locals[1];
+    final posArgsLocal = function.locals[2];
+    final namedArgsLocal = function.locals[3];
+
+    assert(typeArgsLocal.type == translator.typeArrayTypeRef);
+    assert(posArgsLocal.type == translator.nullableObjectArrayTypeRef);
+    assert(namedArgsLocal.type == translator.nullableObjectArrayTypeRef);
+
+    _verifyAssumptions(
+        b, closureLocal, typeArgsLocal, posArgsLocal, namedArgsLocal);
+
+    final vtableStruct = representation.vtableStruct;
+
+    // Downcast closure to this representation's closure type & get
+    // representation-specific vtable.
+    b.comment('Obtaining representation-specific vtable');
+    b.local_get(closureLocal);
+    b.ref_cast(w.RefType(representation.closureStruct, nullable: false));
+    b.struct_get(representation.closureStruct, FieldIndex.closureVtable);
+    final vtableVar = b.addLocal(w.RefType(vtableStruct, nullable: false));
+    b.local_set(vtableVar);
+
+    final typeStack = <w.ValueType>[];
+
+    // Load closure context.
+    b.comment('Loading closure.context');
+    b.local_get(closureLocal);
+    b.struct_get(translator.closureInfo.struct, FieldIndex.closureContext);
+    typeStack.add(w.RefType.struct(nullable: false));
+
+    // Load required type arguments.
+    for (int i = 0; i < representation.typeCount; ++i) {
+      b.comment('Loading type argument $i');
+      b.local_get(typeArgsLocal);
+      b.i32_const(i);
+      b.array_get(translator.typeArrayType);
+      typeStack.add(translator.translateType(translator.typeType));
+    }
+
+    // Load optional parameters.
+    if (representation.hasNamed) {
+      b.comment('Handle optional named parameters');
+      _handleOptionalNamedCase(b, closureLocal, typeArgsLocal, posArgsLocal,
+          namedArgsLocal, vtableVar, vtableStruct, typeStack);
+    } else {
+      b.comment('Handle optional positional parameters');
+      _handleOptionalPositionalCase(b, closureLocal, typeArgsLocal,
+          posArgsLocal, namedArgsLocal, vtableVar, vtableStruct, typeStack);
+    }
+
+    b.end(); // end function
+  }
+
+  void _handleOptionalPositionalCase(
+    w.InstructionsBuilder b,
+    w.Local closureLocal,
+    w.Local typeArgsLocal,
+    w.Local posArgsLocal,
+    w.Local namedArgsLocal,
+    w.Local vtableVar,
+    w.StructType vtableStruct,
+    List<w.ValueType> typeStack,
+  ) {
+    // Possibly variable number of positionals.
+    for (int i = 0; i <= representation.maxPositionalCount; ++i) {
+      b.comment('Check whether all positionals are loaded');
+      b.local_get(posArgsLocal);
+      b.array_len();
+      b.i32_const(i);
+      b.i32_eq();
+      b.if_(typeStack, typeStack);
+      b.comment('All positionals loaded, calling corresponding vtable entry');
+      b.local_get(vtableVar);
+      final index = representation.vtableBaseIndex + i;
+      b.struct_get(vtableStruct, index);
+      b.call_ref((vtableStruct.fields[index].type.unpacked as w.RefType)
+          .heapType as w.FunctionType);
+      b.return_();
+      b.end();
+
+      if (i <= representation.maxPositionalCount) {
+        // Otherwise load more arguments.
+        b.comment('Loading positional $i (optional)');
+        b.local_get(posArgsLocal);
+        b.i32_const(i);
+        b.array_get(translator.nullableObjectArrayType);
+        typeStack.add(translator.topType);
+      }
+    }
+
+    b.unreachable();
+  }
+
+  void _handleOptionalNamedCase(
+    w.InstructionsBuilder b,
+    w.Local closureLocal,
+    w.Local typeArgsLocal,
+    w.Local posArgsLocal,
+    w.Local namedArgsLocal,
+    w.Local vtableVar,
+    w.StructType vtableStruct,
+    List<w.ValueType> typeStack,
+  ) {
+    // All positionals are required, so load them.
+    for (int i = 0; i < representation.maxPositionalCount; ++i) {
+      b.comment('Loading positional $i (required)');
+      b.local_get(posArgsLocal);
+      b.i32_const(i);
+      b.array_get(translator.nullableObjectArrayType);
+      typeStack.add(translator.topType);
+    }
+
+    // Check for each name whether it's there or not.
+    final allCombinations = representation.nameCombinations.toList();
+    final sortedNames =
+        allCombinations.expand((nc) => nc.names).toSet().toList()..sort();
+    final nameIndexVar = b.addLocal(w.NumType.i32);
+
+    int matchingCombinations(List<String> currentNames, int nextNameIndex) {
+      int prefixMatches = 0;
+      bool exactMatch = false;
+      if (nextNameIndex == 0) {
+        assert(currentNames.isEmpty);
+        exactMatch = true;
+        prefixMatches = 1 + allCombinations.length;
+      } else {
+        for (final nc in allCombinations) {
+          if (currentNames.length <= nc.names.length) {
+            bool found = true;
+            for (int i = 0; i < currentNames.length; ++i) {
+              if (currentNames[i] != nc.names[i]) {
+                found = false;
+                break;
+              }
+            }
+            if (found) {
+              if (currentNames.length == nc.names.length) {
+                prefixMatches++;
+                exactMatch = true;
+              } else {
+                if (sortedNames[nextNameIndex - 1]
+                        .compareTo(nc.names[currentNames.length]) <
+                    0) {
+                  prefixMatches++;
+                }
+              }
+            }
+          }
+        }
+      }
+      return exactMatch ? prefixMatches : -prefixMatches;
+    }
+
+    final currentNames = <String>[];
+
+    void generateNameHandling(int nextNameIndex) {
+      final match = matchingCombinations(currentNames, nextNameIndex);
+      final hasExactMatch = match > 0;
+      final hasNonExactMatches = match < 0 || match > 1;
+      final hasMoreMatches = match != 0;
+      if (hasExactMatch) {
+        b.comment('Check whether all named are loaded');
+        b.local_get(namedArgsLocal);
+        b.array_len();
+        b.local_get(nameIndexVar);
+        b.i32_eq();
+        b.if_(typeStack, typeStack);
+        b.comment('All named loaded, calling corresponding vtable entry');
+        b.comment('(passed named arguments: ${currentNames.join('-')})');
+        final index = representation.fieldIndexForSignature(
+            representation.maxPositionalCount, currentNames);
+        b.local_get(vtableVar);
+        b.struct_get(vtableStruct, index);
+        b.call_ref((vtableStruct.fields[index].type.unpacked as w.RefType)
+            .heapType as w.FunctionType);
+        b.return_();
+        b.end();
+        if (!hasNonExactMatches) {
+          b.comment('More names passed than expected.');
+          b.unreachable();
+          return;
+        }
+      } else if (hasMoreMatches) {
+        if (util.compilerAssertsEnabled) {
+          b.comment('Check there are more names passed by the caller,');
+          b.comment('because the currently processed name set');
+          b.comment('(which are: ${currentNames.join('-')}) does not');
+          b.comment(' correspond to a valid name combination.');
+          b.local_get(namedArgsLocal);
+          b.array_len();
+          b.local_get(nameIndexVar);
+          b.i32_eq();
+          b.if_();
+          b.comment('Unsupported name combination.');
+          b.comment('May be bug in closure representation building');
+          b.unreachable();
+          b.end();
+        }
+      } else {
+        b.comment('The names "${currentNames.join('-')}" are not part '
+            'of a used name combination.');
+        b.unreachable();
+        return;
+      }
+
+      final newName = sortedNames[nextNameIndex];
+      final symbol = translator.symbols.symbolForNamedParameter(newName);
+
+      b.comment('Load next name and see if it corresponds to "$newName"');
+      b.local_get(namedArgsLocal);
+      b.local_get(nameIndexVar);
+      b.array_get(translator.nullableObjectArrayType);
+      translator.constants.instantiateConstant(b, symbol, translator.topType);
+      b.ref_eq();
+
+      b.if_(typeStack, typeStack);
+      {
+        b.comment('Name "$newName" was provided by caller. Loading its value.');
+        b.local_get(namedArgsLocal);
+        b.local_get(nameIndexVar);
+        b.i32_const(1);
+        b.i32_add();
+        b.array_get(translator.nullableObjectArrayType);
+
+        b.comment('Increment index in named argument array.');
+        b.local_get(nameIndexVar);
+        b.i32_const(2);
+        b.i32_add();
+        b.local_set(nameIndexVar);
+
+        currentNames.add(newName);
+        typeStack.add(translator.topType);
+        generateNameHandling(nextNameIndex + 1);
+        typeStack.removeLast();
+        currentNames.removeLast();
+      }
+      b.end();
+
+      b.comment('Name "$newName" was *not* provided by caller.');
+      generateNameHandling(nextNameIndex + 1);
+    }
+
+    generateNameHandling(0);
+  }
+
+  // This function is purely used for checking assumptions made by the code this
+  // generator is producing.
+  //
+  // Namely, we assume that the caller has
+  //   * populated default type arguments (if needed)
+  //   * checked the shape of arguments & closure matches
+  //   * performed necessary type checks on arguments.
+  void _verifyAssumptions(
+    w.InstructionsBuilder b,
+    w.Local closureLocal,
+    w.Local typeArgsLocal,
+    w.Local posArgsLocal,
+    w.Local namedArgsLocal,
+  ) {
+    if (!util.compilerAssertsEnabled) {
+      return;
+    }
+    b.comment('Verify assumptions of arguments and closure');
+    final functionTypeLocal =
+        b.addLocal(translator.closureLayouter.functionTypeType);
+    b.local_get(closureLocal);
+    b.struct_get(translator.closureLayouter.closureBaseStruct,
+        FieldIndex.closureRuntimeType);
+    b.local_tee(functionTypeLocal);
+
+    // Ensure type arguments were passed.
+    b.local_get(typeArgsLocal);
+    b.array_len();
+    b.i32_const(representation.typeCount);
+    b.i32_ne();
+    b.if_();
+    b.unreachable();
+    b.end();
+
+    // Ensure closure shape is correct.
+    b.local_get(typeArgsLocal);
+    b.local_get(posArgsLocal);
+    b.local_get(namedArgsLocal);
+    translator.callReference(translator.checkClosureShape.reference, b);
+    b.i32_eqz();
+    b.if_();
+    b.unreachable();
+    b.end();
+
+    // Ensure types are correct.
+    if (!translator.options.omitImplicitTypeChecks) {
+      b.local_get(functionTypeLocal);
+      b.local_get(typeArgsLocal);
+      b.local_get(posArgsLocal);
+      b.local_get(namedArgsLocal);
+      translator.callReference(translator.checkClosureType.reference, b);
+      b.drop();
+    }
+  }
+}
+
 class NodeCounter extends VisitorDefault<void> with VisitorVoidMixin {
   final bool omitCovarianceChecks;
   int count = 0;
diff --git a/pkg/dart2wasm/lib/util.dart b/pkg/dart2wasm/lib/util.dart
index 88ea5ff..cab1859 100644
--- a/pkg/dart2wasm/lib/util.dart
+++ b/pkg/dart2wasm/lib/util.dart
@@ -17,6 +17,12 @@
 import 'package:vm/metadata/table_selector.dart'
     show TableSelectorMetadataRepository;
 
+final bool compilerAssertsEnabled = (() {
+  bool compilerAsserts = false;
+  assert(compilerAsserts = true);
+  return compilerAsserts;
+})();
+
 bool hasPragma(CoreTypes coreTypes, Annotatable node, String name) {
   return getPragma(coreTypes, node, name, defaultValue: '') != null;
 }
@@ -78,6 +84,24 @@
 
 String intToBase64(int i) => base64.encode(_intToLittleEndianBytes(i));
 
+/// Maps ints to minimal length strings.
+///
+/// For simplicity, this only uses combinations of 1-byte characters. The 2+
+/// byte characters don't significantly impact the average string size.
+///
+/// Starts at 1 to avoid emitting the empty string.
+String intToMinString(int i) {
+  assert(i >= 0);
+  i += 1;
+  final codeUnits = <int>[];
+  while (i > 0) {
+    int remainder = i % 128;
+    i ~/= 128;
+    codeUnits.add(remainder);
+  }
+  return String.fromCharCodes(codeUnits);
+}
+
 Component createEmptyComponent() {
   return Component()
     ..addMetadataRepository(ProcedureAttributesMetadataRepository())
diff --git a/pkg/dart2wasm/test/ir_test.dart b/pkg/dart2wasm/test/ir_test.dart
index bba54ed..4fe3da9 100644
--- a/pkg/dart2wasm/test/ir_test.dart
+++ b/pkg/dart2wasm/test/ir_test.dart
@@ -185,7 +185,8 @@
         globalFilters: globalFilters,
         typeFilters: typeFilters,
         preferMultiline: true,
-        scrubAbsoluteUris: true),
+        scrubAbsoluteUris: true,
+        printInSortedOrder: true),
     compilerOptions
   );
 }
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.dart
new file mode 100644
index 0000000..b21780f
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// functionFilter=mainImpl
+// functionFilter=mod.*Use
+// functionFilter=MyConstClass
+// functionFilter=shared-const
+// tableFilter=static[0-9]+
+// globalFilter=MyConstClass
+// globalFilter=shared-const
+// type=MyConstClass
+// compilerOption=--enable-deferred-loading
+// compilerOption=--no-minify
+
+import 'deferred.constant.multi_module_use.h.0.dart' deferred as h0;
+import 'deferred.constant.multi_module_use.h.1.dart' deferred as h1;
+
+void main() async {
+  await h0.loadLibrary();
+  await h1.loadLibrary();
+
+  final returnShared = int.parse('1') == 0;
+  mainImpl(returnShared);
+}
+
+@pragma('wasm:never-inline')
+void mainImpl(bool returnShared) {
+  if (!identical(h0.modH0Use(returnShared), h1.modH1Use(returnShared))) {
+    throw 'bad';
+  }
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.0.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.0.dart
new file mode 100644
index 0000000..9f5a099
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.0.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'deferred.constant.multi_module_use.h.2.dart';
+
+@pragma('wasm:never-inline')
+MyConstClass modH0Use(bool nonShared) {
+  return nonShared
+      ? const MyConstClass('h0-nonshared-const')
+      : const MyConstClass('shared-const');
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.1.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.1.dart
new file mode 100644
index 0000000..b886989
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.1.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'deferred.constant.multi_module_use.h.2.dart';
+
+@pragma('wasm:never-inline')
+MyConstClass modH1Use(bool nonShared) {
+  return nonShared
+      ? const MyConstClass('h1-nonshared-const')
+      : const MyConstClass('shared-const');
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.2.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.2.dart
new file mode 100644
index 0000000..47f2914
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.h.2.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 MyConstClass {
+  final String b;
+  const MyConstClass(this.b);
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.wat
new file mode 100644
index 0000000..d0acbf7
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use.wat
@@ -0,0 +1,42 @@
+(module $module0
+  (type $#Top (struct
+    (field $field0 i32)))
+  (type $JSStringImpl (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $_ref externref))))
+  (type $MyConstClass (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $b (ref $JSStringImpl)))))
+  (type $Object (sub $#Top (struct
+    (field $field0 i32)
+    (field $field1 (mut i32)))))
+  (type $type0 (func 
+    (param $var0 i32)
+    (result (ref $MyConstClass))))
+  (table $static0-0 (export "static0-0") 2 (ref null $type0))
+  (global $"C378 \"bad\"" (ref $JSStringImpl) <...>)
+  (func $"mainImpl <noInline>" (param $var0 i32)
+    (local $var1 (ref $MyConstClass))
+    i64.const 0
+    call $checkLibraryIsLoadedFromLoadId
+    local.get $var0
+    i32.const 0
+    call_indirect $static0-0 (param i32) (result (ref $MyConstClass))
+    i64.const 1
+    call $checkLibraryIsLoadedFromLoadId
+    local.get $var0
+    i32.const 1
+    call_indirect $static0-0 (param i32) (result (ref $MyConstClass))
+    ref.eq
+    i32.eqz
+    if
+      global.get $"C378 \"bad\""
+      call $Error._throwWithCurrentStackTrace
+      unreachable
+    end
+  )
+  (func $Error._throwWithCurrentStackTrace (param $var0 (ref $#Top)) <...>)
+  (func $checkLibraryIsLoadedFromLoadId (param $var0 i64) <...>)
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module1.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module1.wat
new file mode 100644
index 0000000..d8d0688
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module1.wat
@@ -0,0 +1,61 @@
+(module $module1
+  (type $#Top (struct
+    (field $field0 i32)))
+  (type $JSStringImpl (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $_ref externref))))
+  (type $MyConstClass (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $b (ref $JSStringImpl)))))
+  (type $Object (sub $#Top (struct
+    (field $field0 i32)
+    (field $field1 (mut i32)))))
+  (global $.h1-nonshared-const (import "" "h1-nonshared-const") (ref extern))
+  (global $.shared-const (import "" "shared-const") (ref extern))
+  (table $module0.constant-table0 (import "module0" "constant-table0") 1 (ref null $JSStringImpl))
+  (table $module0.constant-table1 (import "module0" "constant-table1") 1 (ref null $MyConstClass))
+  (global $"C496 MyConstClass" (ref $MyConstClass)
+    (i32.const 116)
+    (i32.const 0)
+    (i32.const 4)
+    (i32.const 0)
+    (global.get $.h1-nonshared-const)
+    (struct.new $JSStringImpl)
+    (struct.new $MyConstClass))
+  (func $"modH1Use <noInline>" (param $var0 i32) (result (ref $MyConstClass))
+    (local $var1 (ref $JSStringImpl))
+    (local $var2 (ref $MyConstClass))
+    local.get $var0
+    if (result (ref $MyConstClass))
+      global.get $"C496 MyConstClass"
+    else
+      block $label0 (result (ref $MyConstClass))
+        i32.const 0
+        table.get $module0.constant-table1
+        br_on_non_null $label0
+        i32.const 0
+        i32.const 116
+        i32.const 0
+        block $label1 (result (ref $JSStringImpl))
+          i32.const 0
+          table.get $module0.constant-table0
+          br_on_non_null $label1
+          i32.const 0
+          i32.const 4
+          i32.const 0
+          global.get $.shared-const
+          struct.new $JSStringImpl
+          local.tee $var1
+          table.set $module0.constant-table0
+          local.get $var1
+        end $label1
+        struct.new $MyConstClass
+        local.tee $var2
+        table.set $module0.constant-table1
+        local.get $var2
+      end $label0
+    end
+  )
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module2.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module2.wat
new file mode 100644
index 0000000..e7a7378
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module2.wat
@@ -0,0 +1,2 @@
+(module $module2
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module3.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module3.wat
new file mode 100644
index 0000000..5c3b898
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module3.wat
@@ -0,0 +1,61 @@
+(module $module3
+  (type $#Top (struct
+    (field $field0 i32)))
+  (type $JSStringImpl (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $_ref externref))))
+  (type $MyConstClass (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $b (ref $JSStringImpl)))))
+  (type $Object (sub $#Top (struct
+    (field $field0 i32)
+    (field $field1 (mut i32)))))
+  (global $.h0-nonshared-const (import "" "h0-nonshared-const") (ref extern))
+  (global $.shared-const (import "" "shared-const") (ref extern))
+  (table $module0.constant-table0 (import "module0" "constant-table0") 1 (ref null $JSStringImpl))
+  (table $module0.constant-table1 (import "module0" "constant-table1") 1 (ref null $MyConstClass))
+  (global $"C500 MyConstClass" (ref $MyConstClass)
+    (i32.const 116)
+    (i32.const 0)
+    (i32.const 4)
+    (i32.const 0)
+    (global.get $.h0-nonshared-const)
+    (struct.new $JSStringImpl)
+    (struct.new $MyConstClass))
+  (func $"modH0Use <noInline>" (param $var0 i32) (result (ref $MyConstClass))
+    (local $var1 (ref $JSStringImpl))
+    (local $var2 (ref $MyConstClass))
+    local.get $var0
+    if (result (ref $MyConstClass))
+      global.get $"C500 MyConstClass"
+    else
+      block $label0 (result (ref $MyConstClass))
+        i32.const 0
+        table.get $module0.constant-table1
+        br_on_non_null $label0
+        i32.const 0
+        i32.const 116
+        i32.const 0
+        block $label1 (result (ref $JSStringImpl))
+          i32.const 0
+          table.get $module0.constant-table0
+          br_on_non_null $label1
+          i32.const 0
+          i32.const 4
+          i32.const 0
+          global.get $.shared-const
+          struct.new $JSStringImpl
+          local.tee $var1
+          table.set $module0.constant-table0
+          local.get $var1
+        end $label1
+        struct.new $MyConstClass
+        local.tee $var2
+        table.set $module0.constant-table1
+        local.get $var2
+      end $label0
+    end
+  )
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module4.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module4.wat
new file mode 100644
index 0000000..2853476
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.multi_module_use_module4.wat
@@ -0,0 +1,2 @@
+(module $module4
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.dart
new file mode 100644
index 0000000..27e51b6
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// functionFilter=useFoo
+// tableFilter=static[0-9]+
+// globalFilter=Foo
+// typeFilter=Foo
+// compilerOption=--enable-deferred-loading
+// compilerOption=--no-minify
+
+import 'deferred.constant.type_use.h.0.dart';
+import 'deferred.constant.type_use.h.1.dart' deferred as h1;
+
+void main() async {
+  // Ensure the deferred libraries are loaded.
+  await h1.loadLibrary();
+
+  useFoo();
+}
+
+@pragma('wasm:never-inline')
+void useFoo() {
+  // We use `Foo` as type but that doesn't mean
+  // => This shouldn't require the code for `Foo` to be bundled with the main
+  // module.
+  useFooAsType();
+
+  // We use `Foo` code, but only via deferred library which uses `Foo`
+  // directly.
+  // => This should require the code for `Foo` to end up in the deferred
+  // library.
+  h1.useFooAsObject();
+}
+
+@pragma('wasm:never-inline')
+void useFooAsType() {
+  print(Foo);
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.h.0.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.h.0.dart
new file mode 100644
index 0000000..9f59eae
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.h.0.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Foo {
+  int i = 0;
+  void printFoo() {
+    print('Foo called ${i++}');
+  }
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.h.1.dart b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.h.1.dart
new file mode 100644
index 0000000..297b96c
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.h.1.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'deferred.constant.type_use.h.0.dart';
+
+@pragma('wasm:never-inline')
+void useFooAsObject() {
+  final f = Foo();
+  f.printFoo();
+  f.printFoo();
+}
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.wat
new file mode 100644
index 0000000..93ab2d1
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use.wat
@@ -0,0 +1,41 @@
+(module $module0
+  (type $#Top <...>)
+  (type $DefaultSet <...>)
+  (type $DeferredLoadIdNotLoadedError <...>)
+  (type $_InterfaceType <...>)
+  (type $type0 <...>)
+  (table $static0-0 (export "static0-0") 1 (ref null $type0))
+  (global $"C414 _InterfaceType" (ref $_InterfaceType) <...>)
+  (global $_loaded (mut (ref null $DefaultSet)) <...>)
+  (func $_loaded implicit getter (result (ref $DefaultSet)) <...>)
+  (func $"useFoo <noInline>"
+    call $"useFooAsType <noInline>"
+    block $label0 (result (ref $DefaultSet))
+      global.get $_loaded
+      br_on_non_null $label0
+      call $"_loaded implicit getter"
+    end $label0
+    call $_DefaultSet&_HashFieldBase&SetMixin&_HashBase&_OperatorEqualsAndHashCode&_LinkedHashSetMixin.contains
+    i32.eqz
+    if
+      i32.const 49
+      i32.const 0
+      ref.null none
+      i64.const 0
+      struct.new $DeferredLoadIdNotLoadedError
+      call $Error._throwWithCurrentStackTrace
+      unreachable
+    end
+    i32.const 0
+    call_indirect $static0-0 (result (ref null $#Top))
+    drop
+  )
+  (func $"useFooAsType <noInline>"
+    global.get $"C414 _InterfaceType"
+    call $print
+    drop
+  )
+  (func $Error._throwWithCurrentStackTrace (param $var0 (ref $#Top)) <...>)
+  (func $_DefaultSet&_HashFieldBase&SetMixin&_HashBase&_OperatorEqualsAndHashCode&_LinkedHashSetMixin.contains (param $var0 (ref $DefaultSet)) (result i32) <...>)
+  (func $print (param $var0 (ref null $#Top)) (result (ref null $#Top)) <...>)
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use_module1.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use_module1.wat
new file mode 100644
index 0000000..49ade75
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use_module1.wat
@@ -0,0 +1,28 @@
+(module $module1
+  (type $#Top <...>)
+  (type $Foo (sub final $Object (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $i (mut i64)))))
+  (type $JSStringImpl <...>)
+  (type $Object <...>)
+  (global $".Foo called " (import "" "Foo called ") (ref extern))
+  (global $"C462 \"Foo called \"" (ref $JSStringImpl)
+    (i32.const 4)
+    (i32.const 0)
+    (global.get $".Foo called ")
+    (struct.new $JSStringImpl))
+  (func $"useFooAsObject <noInline>" (result (ref null $#Top))
+    (local $var0 (ref $Foo))
+    i32.const 114
+    i32.const 0
+    i64.const 0
+    struct.new $Foo
+    local.tee $var0
+    call $Foo.printFoo
+    local.get $var0
+    call $Foo.printFoo
+    ref.null none
+  )
+  (func $Foo.printFoo (param $var0 (ref $Foo)) <...>)
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use_module2.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use_module2.wat
new file mode 100644
index 0000000..e7a7378
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.type_use_module2.wat
@@ -0,0 +1,2 @@
+(module $module2
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant.wat
index 11686f7..c97637e 100644
--- a/pkg/dart2wasm/test/ir_tests/deferred.constant.wat
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant.wat
@@ -1,18 +1,19 @@
 (module $module0
-  (type $#Top <...>)
-  (type $Object <...>)
   (type $#Closure-0-1 <...>)
+  (type $#Top <...>)
   (type $H0 (sub final $Object (struct
     (field $field0 i32)
     (field $field1 (mut i32))
     (field $fun (ref $#Closure-0-1)))))
-  (type $type245 <...>)
-  (type $type248 <...>)
-  (type $type251 <...>)
-  (table $static1-0 (export "static1-0") 1 (ref null $type251))
-  (table $static2-0 (export "static2-0") 1 (ref null $type245))
-  (table $static3-0 (export "static3-0") 1 (ref null $type248))
-  (func $print (param $var0 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (type $Object <...>)
+  (type $type0 <...>)
+  (type $type2 <...>)
+  (type $type4 <...>)
+  (type $type6 <...>)
+  (table $static0-0 (export "static0-0") 1 (ref null $type0))
+  (table $static1-0 (export "static1-0") 1 (ref null $type2))
+  (table $static2-0 (export "static2-0") 1 (ref null $type4))
+  (table $static3-0 (export "static3-0") 1 (ref null $type6))
   (func $"modMainUseH0 <noInline>"
     i64.const 0
     call $checkLibraryIsLoadedFromLoadId
@@ -41,4 +42,5 @@
     drop
   )
   (func $checkLibraryIsLoadedFromLoadId (param $var0 i64) <...>)
+  (func $print (param $var0 (ref null $#Top)) (result (ref null $#Top)) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat
index c63406b..a30134d 100644
--- a/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant_module1.wat
@@ -1,59 +1,136 @@
 (module $module1
-  (type $#Top <...>)
-  (type $Object <...>)
-  (type $Array<Object?> <...>)
-  (type $_Type <...>)
-  (type $Array<_Type> <...>)
-  (type $JSStringImpl <...>)
-  (type $type20 <...>)
-  (type $_FunctionType <...>)
-  (type $#ClosureBase <...>)
-  (type $#Vtable-0-1 <...>)
   (type $#Closure-0-1 <...>)
+  (type $#Closure-1-1 <...>)
+  (type $#DummyStruct <...>)
+  (type $#InstantiationContext-1-1 <...>)
+  (type $#Top <...>)
+  (type $#Vtable-0-1 <...>)
+  (type $#Vtable-1-1 <...>)
+  (type $Array<Object?> <...>)
+  (type $Array<_NamedParameter> <...>)
+  (type $Array<_Type> <...>)
+  (type $BoxedInt <...>)
   (type $H1 (sub final $Object (struct
     (field $field0 i32)
     (field $field1 (mut i32))
     (field $fun (ref $#Closure-0-1)))))
-  (type $#Vtable-1-1 <...>)
-  (type $#Closure-1-1 <...>)
-  (type $#InstantiationContext-1-1 <...>)
-  (type $#DummyStruct <...>)
+  (type $JSStringImpl <...>)
+  (type $Object <...>)
+  (type $_FunctionType <...>)
   (type $_InterfaceType <...>)
-  (type $BoxedInt <...>)
-  (func $print (import "module0" "func5") (param (ref null $#Top)) (result (ref null $#Top)))
+  (type $_TopType <...>)
+  (type $_Type <...>)
+  (type $type0 <...>)
   (func $JSStringImpl._interpolate (import "module0" "func6") (param (ref $Array<Object?>)) (result (ref $JSStringImpl)))
+  (func $print (import "module0" "func5") (param (ref null $#Top)) (result (ref null $#Top)))
+  (global $"C1 WasmArray<_Type>[0]" (import "module0" "global1") (ref $Array<_Type>))
   (global $"C21 \")\"" (import "module0" "global0") (ref $JSStringImpl))
-  (global $"C28 _InterfaceType" (import "module0" "global5") (ref $_InterfaceType))
-  (global $"C455 _FunctionType" (import "module0" "global7") (ref $_FunctionType))
-  (global $S.globalH1Bar< (import "S" "globalH1Bar<") (ref extern))
-  (global $global7 (ref $#Vtable-1-1) <...>)
-  (global $global4 (ref $#DummyStruct) <...>)
-  (global $"C459 _FunctionType" (ref $_FunctionType) <...>)
-  (global $"C460 globalH1Foo tear-off" (mut (ref null $#Closure-1-1))
+  (global $"C28 _InterfaceType" (import "module0" "global7") (ref $_InterfaceType))
+  (global $"C314 WasmArray<_NamedParameter>[0]" (import "module0" "global4") (ref $Array<_NamedParameter>))
+  (global $"C339 _TopType" (import "module0" "global2") (ref $_TopType))
+  (global $"C61 WasmArray<_Type>[1]" (import "module0" "global3") (ref $Array<_Type>))
+  (global $.globalH1Bar< (import "" "globalH1Bar<") (ref extern))
+  (table $module0.constant-table0 (import "module0" "constant-table0") 1 (ref null $_FunctionType))
+  (global $"C467 _FunctionType" (ref $_FunctionType) <...>)
+  (global $"C468 globalH1Foo tear-off" (mut (ref null $#Closure-1-1))
     (ref.null none))
-  (global $"C461 InstantiationConstant(globalH1Foo<int>)" (mut (ref null $#Closure-0-1))
+  (global $"C469 InstantiationConstant(globalH1Foo<int>)" (mut (ref null $#Closure-0-1))
     (ref.null none))
-  (global $"C462 H1" (mut (ref null $H1))
+  (global $"C470 H1" (mut (ref null $H1))
     (ref.null none))
-  (global $"C463 \"globalH1Bar<\"" (ref $JSStringImpl)
+  (global $"C471 \"globalH1Bar<\"" (ref $JSStringImpl)
     (i32.const 4)
     (i32.const 0)
-    (global.get $S.globalH1Bar<)
+    (global.get $.globalH1Bar<)
     (struct.new $JSStringImpl))
-  (global $"C464 \">(\"" (ref $JSStringImpl) <...>)
+  (global $"C472 \">(\"" (ref $JSStringImpl) <...>)
+  (global $global0 (ref $#DummyStruct) <...>)
+  (global $global2 (ref $#Vtable-1-1) <...>)
+  (func $#dummy function (ref struct) -> (ref null #Top) (param $var0 (ref struct)) (result (ref null $#Top)) <...>)
+  (func $"C470 H1 (lazy initializer)}" (result (ref $H1))
+    (local $var0 (ref $#Closure-1-1))
+    (local $var1 (ref $_FunctionType))
+    (local $var2 (ref $#Closure-0-1))
+    (local $var3 (ref $H1))
+    i32.const 115
+    i32.const 0
+    block $label0 (result (ref $#Closure-0-1))
+      global.get $"C469 InstantiationConstant(globalH1Foo<int>)"
+      br_on_non_null $label0
+      i32.const 32
+      i32.const 0
+      block $label1 (result (ref $#Closure-1-1))
+        global.get $"C468 globalH1Foo tear-off"
+        br_on_non_null $label1
+        i32.const 32
+        i32.const 0
+        global.get $global0
+        global.get $global2
+        global.get $"C467 _FunctionType"
+        struct.new $#Closure-1-1
+        local.tee $var0
+        global.set $"C468 globalH1Foo tear-off"
+        local.get $var0
+      end $label1
+      global.get $"C28 _InterfaceType"
+      struct.new $#InstantiationContext-1-1
+      ref.func $"#dummy function (ref struct) -> (ref null #Top)"
+      ref.func $"instantiation constant trampoline"
+      struct.new $#Vtable-0-1
+      block $label2 (result (ref $_FunctionType))
+        i32.const 0
+        table.get $module0.constant-table0
+        br_on_non_null $label2
+        i32.const 0
+        i32.const 12
+        i32.const 0
+        i32.const 0
+        i64.const 0
+        global.get $"C1 WasmArray<_Type>[0]"
+        global.get $"C1 WasmArray<_Type>[0]"
+        global.get $"C339 _TopType"
+        global.get $"C61 WasmArray<_Type>[1]"
+        i64.const 1
+        global.get $"C314 WasmArray<_NamedParameter>[0]"
+        struct.new $_FunctionType
+        local.tee $var1
+        table.set $module0.constant-table0
+        local.get $var1
+      end $label2
+      struct.new $#Closure-0-1
+      local.tee $var2
+      global.set $"C469 InstantiationConstant(globalH1Foo<int>)"
+      local.get $var2
+    end $label0
+    struct.new $H1
+    local.tee $var3
+    global.set $"C470 H1"
+    local.get $var3
+  )
+  (func $"globalH1Foo tear-off trampoline" (param $var0 (ref struct)) (param $var1 (ref $_Type)) (param $var2 (ref null $#Top)) (result (ref null $#Top))
+    global.get $"C471 \"globalH1Bar<\""
+    local.get $var1
+    global.get $"C472 \">(\""
+    local.get $var2
+    global.get $"C21 \")\""
+    array.new_fixed $Array<Object?> 5
+    call $JSStringImpl._interpolate
+    call $print
+  )
+  (func $instantiation constant trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
   (func $"modH1UseH1 <noInline>" (result (ref null $#Top))
     (local $var0 (ref $#Closure-0-1))
     block $label0 (result (ref $H1))
-      global.get $"C462 H1"
+      global.get $"C470 H1"
       br_on_non_null $label0
-      call $"C462 H1 (lazy initializer)}"
+      call $"C470 H1 (lazy initializer)}"
     end $label0
     call $print
     drop
     block $label1 (result (ref $H1))
-      global.get $"C462 H1"
+      global.get $"C470 H1"
       br_on_non_null $label1
-      call $"C462 H1 (lazy initializer)}"
+      call $"C470 H1 (lazy initializer)}"
     end $label1
     struct.get $H1 $fun
     local.tee $var0
@@ -64,76 +141,8 @@
     local.get $var0
     struct.get $#Closure-0-1 $vtable
     struct.get $#Vtable-0-1 $closureCallEntry-0-1
-    call_ref $type20
+    call_ref $type0
     drop
     ref.null none
   )
-  (func $globalH1Foo (param $var0 (ref $_Type)) (param $var1 (ref null $#Top)) (result (ref null $#Top))
-    global.get $"C463 \"globalH1Bar<\""
-    local.get $var0
-    global.get $"C464 \">(\""
-    local.get $var1
-    global.get $"C21 \")\""
-    array.new_fixed $Array<Object?> 5
-    call $JSStringImpl._interpolate
-    call $print
-  )
-  (func $"globalH1Foo tear-off dynamic call entry" (param $var0 (ref $#ClosureBase)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top))
-    local.get $var1
-    i32.const 0
-    array.get $Array<_Type>
-    local.get $var2
-    i32.const 0
-    array.get $Array<Object?>
-    call $globalH1Foo
-  )
-  (func $"globalH1Foo tear-off trampoline" (param $var0 (ref struct)) (param $var1 (ref $_Type)) (param $var2 (ref null $#Top)) (result (ref null $#Top))
-    local.get $var1
-    local.get $var2
-    call $globalH1Foo
-  )
-  (func $dynamic call entry (param $var0 (ref $#ClosureBase)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top)) <...>)
-  (func $#dummy function (ref struct) -> (ref null #Top) (param $var0 (ref struct)) (result (ref null $#Top)) <...>)
-  (func $instantiation constant trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
-  (func $"C462 H1 (lazy initializer)}" (result (ref $H1))
-    (local $var0 (ref $#Closure-1-1))
-    (local $var1 (ref $#Closure-0-1))
-    (local $var2 (ref $H1))
-    i32.const 105
-    i32.const 0
-    block $label0 (result (ref $#Closure-0-1))
-      global.get $"C461 InstantiationConstant(globalH1Foo<int>)"
-      br_on_non_null $label0
-      i32.const 37
-      i32.const 0
-      block $label1 (result (ref $#Closure-1-1))
-        global.get $"C460 globalH1Foo tear-off"
-        br_on_non_null $label1
-        i32.const 37
-        i32.const 0
-        global.get $global4
-        global.get $global7
-        global.get $"C459 _FunctionType"
-        struct.new $#Closure-1-1
-        local.tee $var0
-        global.set $"C460 globalH1Foo tear-off"
-        local.get $var0
-      end $label1
-      global.get $"C28 _InterfaceType"
-      struct.new $#InstantiationContext-1-1
-      ref.func $"dynamic call entry"
-      ref.func $"#dummy function (ref struct) -> (ref null #Top)"
-      ref.func $"instantiation constant trampoline"
-      struct.new $#Vtable-0-1
-      global.get $"C455 _FunctionType"
-      struct.new $#Closure-0-1
-      local.tee $var1
-      global.set $"C461 InstantiationConstant(globalH1Foo<int>)"
-      local.get $var1
-    end $label0
-    struct.new $H1
-    local.tee $var2
-    global.set $"C462 H1"
-    local.get $var2
-  )
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant_module2.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant_module2.wat
index 3326c9e..5e1daf8 100644
--- a/pkg/dart2wasm/test/ir_tests/deferred.constant_module2.wat
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant_module2.wat
@@ -1,65 +1,85 @@
 (module $module2
-  (type $#Top <...>)
-  (type $Object <...>)
-  (type $Array<Object?> <...>)
-  (type $JSStringImpl <...>)
-  (type $Array<_Type> <...>)
-  (type $_FunctionType <...>)
-  (type $#ClosureBase <...>)
-  (type $#Vtable-0-1 <...>)
   (type $#Closure-0-1 <...>)
+  (type $#DummyStruct <...>)
+  (type $#Top <...>)
+  (type $#Vtable-0-1 <...>)
+  (type $Array<_NamedParameter> <...>)
+  (type $Array<_Type> <...>)
   (type $H0 (sub final $Object (struct
     (field $field0 i32)
     (field $field1 (mut i32))
     (field $fun (ref $#Closure-0-1)))))
-  (type $#DummyStruct <...>)
+  (type $JSStringImpl <...>)
+  (type $Object <...>)
+  (type $_FunctionType <...>)
+  (type $_TopType <...>)
   (func $print (import "module0" "func5") (param (ref null $#Top)) (result (ref null $#Top)))
-  (global $"C455 _FunctionType" (import "module0" "global7") (ref $_FunctionType))
-  (global $S.globalH0Foo (import "S" "globalH0Foo") (ref extern))
-  (global $global6 (ref $#Vtable-0-1) <...>)
-  (global $global3 (ref $#DummyStruct) <...>)
-  (global $"C465 globalH0Foo tear-off" (mut (ref null $#Closure-0-1))
+  (global $"C1 WasmArray<_Type>[0]" (import "module0" "global1") (ref $Array<_Type>))
+  (global $"C314 WasmArray<_NamedParameter>[0]" (import "module0" "global4") (ref $Array<_NamedParameter>))
+  (global $"C339 _TopType" (import "module0" "global2") (ref $_TopType))
+  (global $"C61 WasmArray<_Type>[1]" (import "module0" "global3") (ref $Array<_Type>))
+  (global $.globalH0Foo (import "" "globalH0Foo") (ref extern))
+  (table $module0.constant-table0 (import "module0" "constant-table0") 1 (ref null $_FunctionType))
+  (global $"C473 globalH0Foo tear-off" (mut (ref null $#Closure-0-1))
     (ref.null none))
-  (global $"C466 H0" (mut (ref null $H0))
+  (global $"C474 H0" (mut (ref null $H0))
     (ref.null none))
-  (global $"C467 \"globalH0Foo\"" (ref $JSStringImpl)
+  (global $"C475 \"globalH0Foo\"" (ref $JSStringImpl)
     (i32.const 4)
     (i32.const 0)
-    (global.get $S.globalH0Foo)
+    (global.get $.globalH0Foo)
     (struct.new $JSStringImpl))
-  (func $globalH0Foo (param $var0 i64) (result (ref null $#Top))
-    global.get $"C467 \"globalH0Foo\""
-    call $print
-  )
-  (func $"globalH0Foo tear-off dynamic call entry" (param $var0 (ref $#ClosureBase)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top))
-    global.get $"C467 \"globalH0Foo\""
-    call $print
-  )
-  (func $"globalH0Foo tear-off trampoline" (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top))
-    global.get $"C467 \"globalH0Foo\""
-    call $print
-  )
-  (func $"C466 H0 (lazy initializer)}" (result (ref $H0))
-    (local $var0 (ref $#Closure-0-1))
-    (local $var1 (ref $H0))
-    i32.const 106
+  (global $global0 (ref $#DummyStruct) <...>)
+  (global $global2 (ref $#Vtable-0-1) <...>)
+  (func $"C474 H0 (lazy initializer)}" (result (ref $H0))
+    (local $var0 (ref $_FunctionType))
+    (local $var1 (ref $#Closure-0-1))
+    (local $var2 (ref $H0))
+    i32.const 114
     i32.const 0
     block $label0 (result (ref $#Closure-0-1))
-      global.get $"C465 globalH0Foo tear-off"
+      global.get $"C473 globalH0Foo tear-off"
       br_on_non_null $label0
-      i32.const 37
+      i32.const 32
       i32.const 0
-      global.get $global3
-      global.get $global6
-      global.get $"C455 _FunctionType"
+      global.get $global0
+      global.get $global2
+      block $label1 (result (ref $_FunctionType))
+        i32.const 0
+        table.get $module0.constant-table0
+        br_on_non_null $label1
+        i32.const 0
+        i32.const 12
+        i32.const 0
+        i32.const 0
+        i64.const 0
+        global.get $"C1 WasmArray<_Type>[0]"
+        global.get $"C1 WasmArray<_Type>[0]"
+        global.get $"C339 _TopType"
+        global.get $"C61 WasmArray<_Type>[1]"
+        i64.const 1
+        global.get $"C314 WasmArray<_NamedParameter>[0]"
+        struct.new $_FunctionType
+        local.tee $var0
+        table.set $module0.constant-table0
+        local.get $var0
+      end $label1
       struct.new $#Closure-0-1
-      local.tee $var0
-      global.set $"C465 globalH0Foo tear-off"
-      local.get $var0
+      local.tee $var1
+      global.set $"C473 globalH0Foo tear-off"
+      local.get $var1
     end $label0
     struct.new $H0
-    local.tee $var1
-    global.set $"C466 H0"
-    local.get $var1
+    local.tee $var2
+    global.set $"C474 H0"
+    local.get $var2
+  )
+  (func $"globalH0Foo tear-off trampoline" (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top))
+    global.get $"C475 \"globalH0Foo\""
+    call $print
+  )
+  (func $globalH0Foo (param $var0 i64) (result (ref null $#Top))
+    global.get $"C475 \"globalH0Foo\""
+    call $print
   )
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/deferred.constant_module3.wat b/pkg/dart2wasm/test/ir_tests/deferred.constant_module3.wat
new file mode 100644
index 0000000..8457f80
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/deferred.constant_module3.wat
@@ -0,0 +1,2 @@
+(module $module3
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/dyn_closure.dart b/pkg/dart2wasm/test/ir_tests/dyn_closure.dart
new file mode 100644
index 0000000..a5fe2d7
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/dyn_closure.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// typeFilter=Closure-0-2|Vtable-0-2
+// functionFilter=XXX
+// globalFilter=foo|bar
+
+void main() {
+  final objects = <dynamic>[
+    () {},
+    foo,
+    bar,
+    'a',
+    1,
+  ];
+  final emptyClosure = objects[0];
+  final fooClosure = objects[1];
+  final barClosure = objects[2];
+  emptyClosure();
+  fooClosure(1);
+  fooClosure(1, 'b');
+  barClosure(1, 2);
+  barClosure(1, 2);
+}
+
+@pragma('wasm:never-inline')
+void foo(int a, [String? b]) {
+  print('Foo $a $b');
+}
+
+@pragma('wasm:never-inline')
+void bar(int a, [int? b]) {
+  print('Bar $a $b');
+}
diff --git a/pkg/dart2wasm/test/ir_tests/dyn_closure.wat b/pkg/dart2wasm/test/ir_tests/dyn_closure.wat
new file mode 100644
index 0000000..d4402ea
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/dyn_closure.wat
@@ -0,0 +1,80 @@
+(module $module0
+  (type $#Closure-0-0 <...>)
+  (type $#Closure-0-2 (sub final $#Closure-0-0 (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $context (ref struct))
+    (field $vtable (ref $#Vtable-0-2))
+    (field $functionType (ref $_FunctionType)))))
+  (type $#DummyStruct <...>)
+  (type $#Top <...>)
+  (type $#Vtable-0-2 (sub final $#DummyStruct (struct
+    (field $closureCallEntry-0-1 (ref $type0))
+    (field $closureCallEntry-0-2 (ref $type2)))))
+  (type $Array<_NamedParameter> <...>)
+  (type $Array<_Type> <...>)
+  (type $_FunctionType <...>)
+  (type $_InterfaceType <...>)
+  (type $_TopType <...>)
+  (type $type0 <...>)
+  (type $type2 <...>)
+  (global $"C1 WasmArray<_Type>[0]" (ref $Array<_Type>) <...>)
+  (global $"C28 _InterfaceType" (ref $_InterfaceType) <...>)
+  (global $"C311 WasmArray<_NamedParameter>[0]" (ref $Array<_NamedParameter>) <...>)
+  (global $"C337 _TopType" (ref $_TopType) <...>)
+  (global $"C341 foo tear-off" (ref $#Closure-0-2)
+    (i32.const 55)
+    (i32.const 0)
+    (global.get $global0)
+    (ref.func $"foo tear-off trampoline")
+    (ref.func $"foo tear-off trampoline_299")
+    (struct.new $#Vtable-0-2)
+    (i32.const 12)
+    (i32.const 0)
+    (i32.const 0)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C337 _TopType")
+    (global.get $"C28 _InterfaceType")
+    (i32.const 10)
+    (i32.const 0)
+    (i32.const 1)
+    (i32.const 150)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (struct.new $_InterfaceType)
+    (array.new_fixed $Array<_Type> 2)
+    (i64.const 1)
+    (global.get $"C311 WasmArray<_NamedParameter>[0]")
+    (struct.new $_FunctionType)
+    (struct.new $#Closure-0-2))
+  (global $"C345 bar tear-off" (ref $#Closure-0-2)
+    (i32.const 55)
+    (i32.const 0)
+    (global.get $global0)
+    (ref.func $"bar tear-off trampoline")
+    (ref.func $"bar tear-off trampoline_302")
+    (struct.new $#Vtable-0-2)
+    (i32.const 12)
+    (i32.const 0)
+    (i32.const 0)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C337 _TopType")
+    (global.get $"C28 _InterfaceType")
+    (i32.const 10)
+    (i32.const 0)
+    (i32.const 1)
+    (i32.const 133)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (struct.new $_InterfaceType)
+    (array.new_fixed $Array<_Type> 2)
+    (i64.const 1)
+    (global.get $"C311 WasmArray<_NamedParameter>[0]")
+    (struct.new $_FunctionType)
+    (struct.new $#Closure-0-2))
+  (global $global0 (ref $#DummyStruct) <...>)
+  (func $bar tear-off trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $bar tear-off trampoline_302 (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $foo tear-off trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $foo tear-off trampoline_299 (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref null $#Top)) <...>)
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply.dart b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply.dart
new file mode 100644
index 0000000..6145afd
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// typeFilter=Closure-0-2|Vtable-0-2
+// functionFilter=XXX
+// globalFilter=foo|bar
+
+void main() {
+  Function.apply(() {}, []);
+  Function.apply(foo, [1]);
+  Function.apply(foo, [1, 'b']);
+  Function.apply(bar, [1]);
+  Function.apply(bar, [1, 2]);
+}
+
+@pragma('wasm:never-inline')
+void foo(int a, [String? b]) {
+  print('Foo $a $b');
+}
+
+@pragma('wasm:never-inline')
+void bar(int a, [int? b]) {
+  print('Bar $a $b');
+}
diff --git a/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply.wat b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply.wat
new file mode 100644
index 0000000..1ab933f
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply.wat
@@ -0,0 +1,80 @@
+(module $module0
+  (type $#Closure-0-0 <...>)
+  (type $#Closure-0-2 (sub final $#Closure-0-0 (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $context (ref struct))
+    (field $vtable (ref $#Vtable-0-2))
+    (field $functionType (ref $_FunctionType)))))
+  (type $#DummyStruct <...>)
+  (type $#Top <...>)
+  (type $#Vtable-0-2 (sub final $#DummyStruct (struct
+    (field $closureCallEntry-0-1 (ref $type0))
+    (field $closureCallEntry-0-2 (ref $type2)))))
+  (type $Array<_NamedParameter> <...>)
+  (type $Array<_Type> <...>)
+  (type $_FunctionType <...>)
+  (type $_InterfaceType <...>)
+  (type $_TopType <...>)
+  (type $type0 <...>)
+  (type $type2 <...>)
+  (global $"C1 WasmArray<_Type>[0]" (ref $Array<_Type>) <...>)
+  (global $"C28 _InterfaceType" (ref $_InterfaceType) <...>)
+  (global $"C311 WasmArray<_NamedParameter>[0]" (ref $Array<_NamedParameter>) <...>)
+  (global $"C337 _TopType" (ref $_TopType) <...>)
+  (global $"C341 foo tear-off" (ref $#Closure-0-2)
+    (i32.const 55)
+    (i32.const 0)
+    (global.get $global0)
+    (ref.func $"foo tear-off trampoline")
+    (ref.func $"foo tear-off trampoline_299")
+    (struct.new $#Vtable-0-2)
+    (i32.const 12)
+    (i32.const 0)
+    (i32.const 0)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C337 _TopType")
+    (global.get $"C28 _InterfaceType")
+    (i32.const 10)
+    (i32.const 0)
+    (i32.const 1)
+    (i32.const 150)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (struct.new $_InterfaceType)
+    (array.new_fixed $Array<_Type> 2)
+    (i64.const 1)
+    (global.get $"C311 WasmArray<_NamedParameter>[0]")
+    (struct.new $_FunctionType)
+    (struct.new $#Closure-0-2))
+  (global $"C346 bar tear-off" (ref $#Closure-0-2)
+    (i32.const 55)
+    (i32.const 0)
+    (global.get $global0)
+    (ref.func $"bar tear-off trampoline")
+    (ref.func $"bar tear-off trampoline_304")
+    (struct.new $#Vtable-0-2)
+    (i32.const 12)
+    (i32.const 0)
+    (i32.const 0)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C337 _TopType")
+    (global.get $"C28 _InterfaceType")
+    (i32.const 10)
+    (i32.const 0)
+    (i32.const 1)
+    (i32.const 133)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (struct.new $_InterfaceType)
+    (array.new_fixed $Array<_Type> 2)
+    (i64.const 1)
+    (global.get $"C311 WasmArray<_NamedParameter>[0]")
+    (struct.new $_FunctionType)
+    (struct.new $#Closure-0-2))
+  (global $global0 (ref $#DummyStruct) <...>)
+  (func $bar tear-off trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $bar tear-off trampoline_304 (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $foo tear-off trampoline (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $foo tear-off trampoline_299 (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref null $#Top)) <...>)
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply_named.dart b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply_named.dart
new file mode 100644
index 0000000..e4530b7
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply_named.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// typeFilter=Closure-0-2|Vtable-0-2
+// functionFilter=XXX
+// globalFilter=foo|bar
+
+void main() {
+  Function.apply(() {}, []);
+  Function.apply(foo, [1]);
+  Function.apply(foo, [1, 'b']);
+  Function.apply(bar, [1]);
+  Function.apply((int a, {int? n}) {}, [1], {#n: 1});
+}
+
+@pragma('wasm:never-inline')
+void foo(int a, [String? b]) {
+  print('Foo $a $b');
+}
+
+@pragma('wasm:never-inline')
+void bar(int a, [int? b]) {
+  print('Bar $a $b');
+}
diff --git a/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply_named.wat b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply_named.wat
new file mode 100644
index 0000000..16e24c2
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/dyn_closure_function_apply_named.wat
@@ -0,0 +1,80 @@
+(module $module0
+  (rec
+    (type $#Closure-0-0 <...>)
+    (type $type0 <...>)
+    (type $#Vtable-0-0 <...>)
+  )
+  (type $#Closure-0-2 (sub final $#Closure-0-0 (struct
+    (field $field0 i32)
+    (field $field1 (mut i32))
+    (field $context (ref struct))
+    (field $vtable (ref $#Vtable-0-2))
+    (field $functionType (ref $_FunctionType)))))
+  (type $#DummyStruct <...>)
+  (type $#Top <...>)
+  (type $#Vtable-0-2 (sub final $#Vtable-0-0 (struct
+    (field $dynamicClosureCallEntry (ref $type0))
+    (field $closureCallEntry-0-2 (ref $type2)))))
+  (type $Array<Object?> <...>)
+  (type $Array<_NamedParameter> <...>)
+  (type $Array<_Type> <...>)
+  (type $_FunctionType <...>)
+  (type $_InterfaceType <...>)
+  (type $_TopType <...>)
+  (type $type2 <...>)
+  (global $"C1 WasmArray<_Type>[0]" (ref $Array<_Type>) <...>)
+  (global $"C28 _InterfaceType" (ref $_InterfaceType) <...>)
+  (global $"C311 WasmArray<_NamedParameter>[0]" (ref $Array<_NamedParameter>) <...>)
+  (global $"C337 _TopType" (ref $_TopType) <...>)
+  (global $"C341 foo tear-off" (ref $#Closure-0-2)
+    (i32.const 55)
+    (i32.const 0)
+    (global.get $global0)
+    (ref.func $"foo tear-off dynamic call entry")
+    (ref.func $"foo tear-off trampoline_307")
+    (struct.new $#Vtable-0-2)
+    (i32.const 12)
+    (i32.const 0)
+    (i32.const 0)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C337 _TopType")
+    (global.get $"C28 _InterfaceType")
+    (i32.const 10)
+    (i32.const 0)
+    (i32.const 1)
+    (i32.const 150)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (struct.new $_InterfaceType)
+    (array.new_fixed $Array<_Type> 2)
+    (i64.const 1)
+    (global.get $"C311 WasmArray<_NamedParameter>[0]")
+    (struct.new $_FunctionType)
+    (struct.new $#Closure-0-2))
+  (global $"C343 _InterfaceType" (ref $_InterfaceType) <...>)
+  (global $"C346 bar tear-off" (ref $#Closure-0-2)
+    (i32.const 55)
+    (i32.const 0)
+    (global.get $global0)
+    (ref.func $"bar tear-off dynamic call entry")
+    (ref.func $"bar tear-off trampoline_313")
+    (struct.new $#Vtable-0-2)
+    (i32.const 12)
+    (i32.const 0)
+    (i32.const 0)
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C1 WasmArray<_Type>[0]")
+    (global.get $"C337 _TopType")
+    (global.get $"C28 _InterfaceType")
+    (global.get $"C343 _InterfaceType")
+    (array.new_fixed $Array<_Type> 2)
+    (i64.const 1)
+    (global.get $"C311 WasmArray<_NamedParameter>[0]")
+    (struct.new $_FunctionType)
+    (struct.new $#Closure-0-2))
+  (global $global0 (ref $#DummyStruct) <...>)
+  (func $bar tear-off dynamic call entry (param $var0 (ref $#Closure-0-0)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top)) <...>)
+  (func $bar tear-off trampoline_313 (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref null $#Top)) <...>)
+  (func $foo tear-off dynamic call entry (param $var0 (ref $#Closure-0-0)) (param $var1 (ref $Array<_Type>)) (param $var2 (ref $Array<Object?>)) (param $var3 (ref $Array<Object?>)) (result (ref null $#Top)) <...>)
+  (func $foo tear-off trampoline_307 (param $var0 (ref struct)) (param $var1 (ref null $#Top)) (param $var2 (ref null $#Top)) (result (ref null $#Top)) <...>)
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/hello.wat b/pkg/dart2wasm/test/ir_tests/hello.wat
index a1f0825..6af33b9 100644
--- a/pkg/dart2wasm/test/ir_tests/hello.wat
+++ b/pkg/dart2wasm/test/ir_tests/hello.wat
@@ -4,13 +4,13 @@
   (type $JSStringImpl (sub final $#Top (struct
     (field $field0 i32)
     (field $_ref externref))))
-  (global $"S.hello world" (import "S" "hello world") (ref extern))
-  (global $"C327 \"hello world\"" (ref $JSStringImpl)
+  (global $".hello world" (import "" "hello world") (ref extern))
+  (global $"C335 \"hello world\"" (ref $JSStringImpl)
     (i32.const 4)
-    (global.get $"S.hello world")
+    (global.get $".hello world")
     (struct.new $JSStringImpl))
   (func $"main <noInline>"
-    global.get $"C327 \"hello world\""
+    global.get $"C335 \"hello world\""
     call $print
   )
   (func $print (param $var0 (ref $#Top)) <...>)
diff --git a/pkg/dart2wasm/test/ir_tests/import_name.wat b/pkg/dart2wasm/test/ir_tests/import_name.wat
index df0a64a..1d52708 100644
--- a/pkg/dart2wasm/test/ir_tests/import_name.wat
+++ b/pkg/dart2wasm/test/ir_tests/import_name.wat
@@ -1,23 +1,23 @@
 (module $module0
   (type $#Top (struct
     (field $field0 i32)))
-  (type $Object (sub $#Top (struct
-    (field $field0 i32)
-    (field $field1 (mut i32)))))
   (type $JSStringImpl (sub final $Object (struct
     (field $field0 i32)
     (field $field1 (mut i32))
     (field $_ref externref))))
-  (global $"S.hello world" (import "S" "hello world") (ref extern))
-  (global $"C367 \"hello world\"" (ref $JSStringImpl)
+  (type $Object (sub $#Top (struct
+    (field $field0 i32)
+    (field $field1 (mut i32)))))
+  (global $".hello world" (import "" "hello world") (ref extern))
+  (global $"C375 \"hello world\"" (ref $JSStringImpl)
     (i32.const 4)
     (i32.const 0)
-    (global.get $"S.hello world")
+    (global.get $".hello world")
     (struct.new $JSStringImpl))
-  (func $print (param $var0 (ref $#Top)) <...>)
   (func $"mainFoo <noInline>" (export "func0") (result (ref null $#Top))
-    global.get $"C367 \"hello world\""
+    global.get $"C375 \"hello world\""
     call $print
     ref.null none
   )
+  (func $print (param $var0 (ref $#Top)) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/import_name_module2.wat b/pkg/dart2wasm/test/ir_tests/import_name_module2.wat
new file mode 100644
index 0000000..e7a7378
--- /dev/null
+++ b/pkg/dart2wasm/test/ir_tests/import_name_module2.wat
@@ -0,0 +1,2 @@
+(module $module2
+)
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/interop.bool.wat b/pkg/dart2wasm/test/ir_tests/interop.bool.wat
index b348028..03729e7 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.bool.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.bool.wat
@@ -1,18 +1,23 @@
 (module $module0
   (type $#Top (struct
     (field $field0 i32)))
-  (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref))
-  (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
   (func $"dart2wasm._149 (import)" (import "dart2wasm" "_149") (param externref) (result i32))
   (func $"dart2wasm._150 (import)" (import "dart2wasm" "_150") (param i32) (result externref))
+  (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref))
+  (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
   (global $"C2 false" (ref $#Top) <...>)
   (global $"C40 true" (ref $#Top) <...>)
-  (global $"boolValueNullable initialized" (mut i32) <...>)
-  (global $boolValueNullable (mut (ref null $#Top)) <...>)
-  (global $"ktrue initialized" (mut i32) <...>)
-  (global $ktrue (mut i32) <...>)
   (global $"boolValue initialized" (mut i32) <...>)
+  (global $"boolValueNullable initialized" (mut i32) <...>)
+  (global $"ktrue initialized" (mut i32) <...>)
   (global $boolValue (mut i32) <...>)
+  (global $boolValueNullable (mut (ref null $#Top)) <...>)
+  (global $ktrue (mut i32) <...>)
+  (func $_throwArgumentNullError <noInline>  <...>)
+  (func $boolValue implicit getter (result i32) <...>)
+  (func $ktrue implicit getter (result i32) <...>)
+  (func $sinkBool <noInline> (param $var0 i32) <...>)
+  (func $sinkBoolNullable <noInline> (param $var0 (ref null $#Top)) <...>)
   (func $"testBoolConstant <noInline>"
     (local $var0 externref)
     i32.const 1
@@ -119,11 +124,6 @@
     end
     call $"sinkBoolNullable <noInline>"
   )
-  (func $jsifyRaw (param $var0 (ref null $#Top)) (result externref) <...>)
   (func $isDartNull (param $var0 externref) (result i32) <...>)
-  (func $sinkBoolNullable <noInline> (param $var0 (ref null $#Top)) <...>)
-  (func $_throwArgumentNullError <noInline>  <...>)
-  (func $ktrue implicit getter (result i32) <...>)
-  (func $boolValue implicit getter (result i32) <...>)
-  (func $sinkBool <noInline> (param $var0 i32) <...>)
+  (func $jsifyRaw (param $var0 (ref null $#Top)) (result externref) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/interop.double.wat b/pkg/dart2wasm/test/ir_tests/interop.double.wat
index 1573b44..2a434e3 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.double.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.double.wat
@@ -4,16 +4,21 @@
   (type $BoxedDouble (sub final $#Top (struct
     (field $field0 i32)
     (field $value f64))))
-  (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param f64) (result externref))
-  (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
   (func $"dart2wasm._147 (import)" (import "dart2wasm" "_147") (param externref) (result f64))
   (func $"dart2wasm._148 (import)" (import "dart2wasm" "_148") (param f64) (result externref))
-  (global $"doubleValueNullable initialized" (mut i32) <...>)
-  (global $doubleValueNullable (mut (ref null $BoxedDouble)) <...>)
-  (global $"ktrue initialized" (mut i32) <...>)
-  (global $ktrue (mut i32) <...>)
+  (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param f64) (result externref))
+  (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
   (global $"doubleValue initialized" (mut i32) <...>)
+  (global $"doubleValueNullable initialized" (mut i32) <...>)
+  (global $"ktrue initialized" (mut i32) <...>)
   (global $doubleValue (mut f64) <...>)
+  (global $doubleValueNullable (mut (ref null $BoxedDouble)) <...>)
+  (global $ktrue (mut i32) <...>)
+  (func $_throwArgumentNullError <noInline>  <...>)
+  (func $doubleValue implicit getter (result f64) <...>)
+  (func $ktrue implicit getter (result i32) <...>)
+  (func $sinkDouble <noInline> (param $var0 f64) <...>)
+  (func $sinkDoubleNullable <noInline> (param $var0 (ref null $BoxedDouble)) <...>)
   (func $"testDoubleConstant <noInline>"
     (local $var0 externref)
     f64.const 1.1
@@ -38,7 +43,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 84
       local.get $var0
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
@@ -78,7 +83,7 @@
         call $"ktrue implicit getter"
       end
       if (result (ref null $BoxedDouble))
-        i32.const 76
+        i32.const 84
         global.get $"doubleValue initialized"
         if (result f64)
           global.get $doubleValue
@@ -115,7 +120,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 84
       local.get $var1
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
@@ -123,9 +128,4 @@
     call $"sinkDoubleNullable <noInline>"
   )
   (func $isDartNull (param $var0 externref) (result i32) <...>)
-  (func $sinkDoubleNullable <noInline> (param $var0 (ref null $BoxedDouble)) <...>)
-  (func $_throwArgumentNullError <noInline>  <...>)
-  (func $ktrue implicit getter (result i32) <...>)
-  (func $doubleValue implicit getter (result f64) <...>)
-  (func $sinkDouble <noInline> (param $var0 f64) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/interop.int.wat b/pkg/dart2wasm/test/ir_tests/interop.int.wat
index c43b70a..95f0b4c 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.int.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.int.wat
@@ -6,12 +6,17 @@
     (field $value i64))))
   (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref))
   (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
-  (global $"intValueNullable initialized" (mut i32) <...>)
-  (global $intValueNullable (mut (ref null $BoxedInt)) <...>)
-  (global $"ktrue initialized" (mut i32) <...>)
-  (global $ktrue (mut i32) <...>)
   (global $"intValue initialized" (mut i32) <...>)
+  (global $"intValueNullable initialized" (mut i32) <...>)
+  (global $"ktrue initialized" (mut i32) <...>)
   (global $intValue (mut i64) <...>)
+  (global $intValueNullable (mut (ref null $BoxedInt)) <...>)
+  (global $ktrue (mut i32) <...>)
+  (func $_throwArgumentNullError <noInline>  <...>)
+  (func $intValue implicit getter (result i64) <...>)
+  (func $ktrue implicit getter (result i32) <...>)
+  (func $sinkInt <noInline> (param $var0 i64) <...>)
+  (func $sinkIntNullable <noInline> (param $var0 (ref null $BoxedInt)) <...>)
   (func $"testIntConstant <noInline>"
     (local $var0 externref)
     i64.const 1
@@ -37,7 +42,7 @@
     if (result (ref null $BoxedInt))
       ref.null none
     else
-      i32.const 63
+      i32.const 65
       local.get $var0
       call $dartifyInt
       struct.new $BoxedInt
@@ -78,7 +83,7 @@
         call $"ktrue implicit getter"
       end
       if (result (ref null $BoxedInt))
-        i32.const 63
+        i32.const 65
         global.get $"intValue initialized"
         if (result i64)
           global.get $intValue
@@ -108,20 +113,15 @@
     if (result (ref null $BoxedInt))
       ref.null none
     else
-      i32.const 63
+      i32.const 65
       local.get $var1
       call $dartifyInt
       struct.new $BoxedInt
     end
     call $"sinkIntNullable <noInline>"
   )
-  (func $jsifyRaw (param $var0 (ref null $#Top)) (result externref) <...>)
-  (func $isDartNull (param $var0 externref) (result i32) <...>)
   (func $dartifyInt (param $var0 externref) (result i64) <...>)
-  (func $sinkIntNullable <noInline> (param $var0 (ref null $BoxedInt)) <...>)
+  (func $isDartNull (param $var0 externref) (result i32) <...>)
   (func $jsifyInt (param $var0 i64) (result externref) <...>)
-  (func $_throwArgumentNullError <noInline>  <...>)
-  (func $ktrue implicit getter (result i32) <...>)
-  (func $intValue implicit getter (result i64) <...>)
-  (func $sinkInt <noInline> (param $var0 i64) <...>)
+  (func $jsifyRaw (param $var0 (ref null $#Top)) (result externref) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/interop.num.wat b/pkg/dart2wasm/test/ir_tests/interop.num.wat
index c1ed442..4e204d6 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.num.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.num.wat
@@ -1,34 +1,37 @@
 (module $module0
   (type $#Top (struct
     (field $field0 i32)))
-  (type $_Type (sub $#Top (struct
-    (field $field0 i32)
-    (field $isDeclaredNullable i32))))
+  (type $Array<WasmArray<_Type>> (array (field (mut (ref $Array<_Type>)))))
   (type $Array<_Type> (array (field (mut (ref $_Type)))))
   (type $BoxedDouble (sub final $#Top (struct
     (field $field0 i32)
     (field $value f64))))
+  (type $_Environment (struct
+    (field $depth i64)))
   (type $_TopType (sub final $_Type (struct
     (field $field0 i32)
     (field $isDeclaredNullable i32))))
-  (type $_Environment (struct
-    (field $depth i64)))
-  (type $Array<WasmArray<_Type>> (array (field (mut (ref $Array<_Type>)))))
-  (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref))
-  (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
+  (type $_Type (sub $#Top (struct
+    (field $field0 i32)
+    (field $isDeclaredNullable i32))))
   (func $"dart2wasm._147 (import)" (import "dart2wasm" "_147") (param externref) (result f64))
   (func $"dart2wasm._148 (import)" (import "dart2wasm" "_148") (param f64) (result externref))
-  (global $"C66 WasmArray<WasmArray<_Type>>[727]" (ref $Array<WasmArray<_Type>>) <...>)
-  (global $"C311 _TopType" (ref $_TopType) <...>)
-  (global $"numValueNullable initialized" (mut i32) <...>)
-  (global $numValueNullable (mut (ref null $#Top)) <...>)
+  (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref))
+  (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
+  (table $dtable0 745 funcref)
+  (global $"C319 _TopType" (ref $_TopType) <...>)
+  (global $"C66 WasmArray<WasmArray<_Type>>[729]" (ref $Array<WasmArray<_Type>>) <...>)
   (global $"ktrue initialized" (mut i32) <...>)
+  (global $"numValueNullable initialized" (mut i32) <...>)
   (global $ktrue (mut i32) <...>)
   (global $numValue (mut (ref null $#Top)) <...>)
-  (table $dtable2 666 funcref <...>)
-  (func $_TypeUniverse.isSubtype (param $var0 (ref $_Type)) (param $var1 (ref null $_Environment)) (param $var2 (ref $_Type)) (param $var3 (ref null $_Environment)) (result i32) <...>)
-  (func $_TypeUniverse._checkSubclassRelationshipViaTable (param $var0 i32) (param $var1 i32) (result i32) <...>)
-  (func $_TypeUniverse.substituteTypeArgument (param $var0 (ref $_Type)) (param $var1 (ref $Array<_Type>)) (result (ref $_Type)) <...>)
+  (global $numValueNullable (mut (ref null $#Top)) <...>)
+  (elem $dtable0 <...>)
+  (func $_throwArgumentNullError <noInline>  <...>)
+  (func $ktrue implicit getter (result i32) <...>)
+  (func $numValue implicit getter (result (ref $#Top)) <...>)
+  (func $sinkNum <noInline> (param $var0 f64) <...>)
+  (func $sinkNumNullable <noInline> (param $var0 (ref null $BoxedDouble)) <...>)
   (func $"testNumConstant <noInline>"
     (local $var0 externref)
     i64.const 1
@@ -70,7 +73,7 @@
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
+      i32.const 84
       local.get $var0
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
@@ -98,12 +101,12 @@
     call $"sinkNum <noInline>"
   )
   (func $"testNumValueNullable <noInline>"
-    (local $var0 i32)
-    (local $var1 (ref null $#Top))
-    (local $var2 (ref $#Top))
-    (local $var3 (ref $_TopType))
-    (local $var4 (ref $Array<_Type>))
-    (local $var5 externref)
+    (local $var0 (ref null $#Top))
+    (local $var1 (ref $#Top))
+    (local $var2 (ref $_TopType))
+    (local $var3 (ref $Array<_Type>))
+    (local $var4 externref)
+    (local $var5 i32)
     global.get $"numValueNullable initialized"
     i32.eqz
     if
@@ -127,148 +130,163 @@
       global.set $"numValueNullable initialized"
     end
     global.get $numValueNullable
-    local.tee $var1
+    local.tee $var0
     ref.is_null
     if (result externref)
       ref.null noextern
     else
       block $label1 (result externref)
         ref.null noextern
-        local.get $var1
+        local.get $var0
         ref.is_null
         br_if $label1
         drop
         block $label2 (result i32)
           i32.const 1
-          local.get $var1
+          local.get $var0
           struct.get $#Top $field0
-          local.tee $var0
-          i32.const 63
+          local.tee $var5
+          i32.const 65
           i32.eq
           br_if $label2
           drop
           i32.const 1
-          local.get $var0
-          i32.const 76
+          local.get $var5
+          i32.const 84
           i32.eq
           br_if $label2
           drop
           i32.const 0
         end $label2
         if
-          local.get $var1
+          local.get $var0
           ref.as_non_null
           call $jsifyNum
           br $label1
         end
-        local.get $var1
-        struct.get $#Top $field0
-        i32.const 90
-        i32.sub
-        local.tee $var0
-        i32.const 9
-        i32.ge_u
         local.get $var0
+        struct.get $#Top $field0
+        i32.const 86
+        i32.sub
         i32.const 10
         i32.ge_u
-        i32.and
         if
-          local.get $var1
-          ref.as_non_null
-          local.tee $var2
-          struct.get $#Top $field0
-          local.tee $var0
-          i32.const 167
-          i32.eq
-          if (result i32)
-            i32.const 0
-          else
+          block $label3 (result i32)
+            i32.const 1
             local.get $var0
-            i32.const 167
-            call $_TypeUniverse._checkSubclassRelationshipViaTable
-          end
-          local.tee $var0
-          i32.const -1
-          i32.eq
-          if (result i32)
+            struct.get $#Top $field0
+            local.tee $var5
+            i32.const 70
+            i32.eq
+            br_if $label3
+            drop
+            i32.const 1
+            local.get $var5
+            i32.const 86
+            i32.sub
+            i32.const 10
+            i32.lt_u
+            br_if $label3
+            drop
             i32.const 0
-          else
-            global.get $"C311 _TopType"
-            local.set $var3
-            block $label3 (result i32)
-              local.get $var2
-              local.get $var2
-              struct.get $#Top $field0
-              i32.const 327
-              i32.add
-              call_indirect (param (ref $#Top)) (result (ref $Array<_Type>))
-              local.set $var4
-              local.get $var0
-              i32.eqz
-              if
-                local.get $var4
+          end $label3
+          i32.eqz
+          if
+            local.get $var0
+            ref.as_non_null
+            local.tee $var1
+            struct.get $#Top $field0
+            local.tee $var5
+            i32.const 180
+            i32.eq
+            if (result i32)
+              i32.const 0
+            else
+              local.get $var5
+              i32.const 180
+              call $_TypeUniverse._checkSubclassRelationshipViaTable
+            end
+            local.tee $var5
+            i32.const -1
+            i32.eq
+            if (result i32)
+              i32.const 0
+            else
+              global.get $"C319 _TopType"
+              local.set $var2
+              block $label4 (result i32)
+                local.get $var1
+                local.get $var1
+                struct.get $#Top $field0
+                i32.const 354
+                i32.add
+                call_indirect (param (ref $#Top)) (result (ref $Array<_Type>))
+                local.set $var3
+                local.get $var5
+                i32.eqz
+                if
+                  local.get $var3
+                  i32.const 0
+                  array.get $Array<_Type>
+                  ref.null none
+                  local.get $var2
+                  ref.null none
+                  call $_TypeUniverse.isSubtype
+                  br $label4
+                end
+                global.get $"C66 WasmArray<WasmArray<_Type>>[729]"
+                local.get $var5
+                array.get $Array<WasmArray<_Type>>
                 i32.const 0
                 array.get $Array<_Type>
-                ref.null none
                 local.get $var3
+                call $_TypeUniverse.substituteTypeArgument
+                ref.null none
+                local.get $var2
                 ref.null none
                 call $_TypeUniverse.isSubtype
-                br $label3
-              end
-              global.get $"C66 WasmArray<WasmArray<_Type>>[727]"
-              local.get $var0
-              array.get $Array<WasmArray<_Type>>
-              i32.const 0
-              array.get $Array<_Type>
-              local.get $var4
-              call $_TypeUniverse.substituteTypeArgument
-              ref.null none
-              local.get $var3
-              ref.null none
-              call $_TypeUniverse.isSubtype
-            end $label3
-          end
-          if
-            unreachable
-          else
-            local.get $var2
-            struct.get $#Top $field0
-            i32.const 89
-            i32.eq
+              end $label4
+            end
             if
               unreachable
             else
-              local.get $var2
-              extern.externalize
-              ref.as_non_null
-              br $label1
+              local.get $var1
+              struct.get $#Top $field0
+              i32.const 64
+              i32.eq
+              if
+                unreachable
+              else
+                local.get $var1
+                extern.externalize
+                ref.as_non_null
+                br $label1
+              end
+              unreachable
             end
             unreachable
           end
-          unreachable
         end
         ref.null noextern
       end $label1
     end
     call $"dart2wasm._275 (import)"
-    local.tee $var5
+    local.tee $var4
     call $isDartNull
     if (result (ref null $BoxedDouble))
       ref.null none
     else
-      i32.const 76
-      local.get $var5
+      i32.const 84
+      local.get $var4
       call $"dart2wasm._147 (import)"
       struct.new $BoxedDouble
     end
     call $"sinkNumNullable <noInline>"
   )
+  (func $_TypeUniverse._checkSubclassRelationshipViaTable (param $var0 i32) (param $var1 i32) (result i32) <...>)
+  (func $_TypeUniverse.isSubtype (param $var0 (ref $_Type)) (param $var1 (ref null $_Environment)) (param $var2 (ref $_Type)) (param $var3 (ref null $_Environment)) (result i32) <...>)
+  (func $_TypeUniverse.substituteTypeArgument (param $var0 (ref $_Type)) (param $var1 (ref $Array<_Type>)) (result (ref $_Type)) <...>)
   (func $isDartNull (param $var0 externref) (result i32) <...>)
-  (func $sinkNumNullable <noInline> (param $var0 (ref null $BoxedDouble)) <...>)
-  (func $jsifyNum (param $var0 (ref $#Top)) (result externref) <...>)
   (func $jsifyInt (param $var0 i64) (result externref) <...>)
-  (func $_throwArgumentNullError <noInline>  <...>)
-  (func $ktrue implicit getter (result i32) <...>)
-  (func $numValue implicit getter (result (ref $#Top)) <...>)
-  (func $sinkNum <noInline> (param $var0 f64) <...>)
+  (func $jsifyNum (param $var0 (ref $#Top)) (result externref) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/ir_tests/interop.string.wat b/pkg/dart2wasm/test/ir_tests/interop.string.wat
index 79aa082..3d670a0 100644
--- a/pkg/dart2wasm/test/ir_tests/interop.string.wat
+++ b/pkg/dart2wasm/test/ir_tests/interop.string.wat
@@ -6,17 +6,21 @@
     (field $_ref externref))))
   (func $"dart2wasm._274 (import)" (import "dart2wasm" "_274") (param externref) (result externref))
   (func $"dart2wasm._275 (import)" (import "dart2wasm" "_275") (param externref) (result externref))
-  (global $"stringValueNullable initialized" (mut i32) <...>)
-  (global $stringValueNullable (mut (ref null $JSStringImpl)) <...>)
+  (global $.a (import "" "a") (ref extern))
   (global $"ktrue initialized" (mut i32) <...>)
+  (global $"stringValueNullable initialized" (mut i32) <...>)
   (global $ktrue (mut i32) <...>)
   (global $stringValue (mut (ref null $JSStringImpl)) <...>)
-  (global $"C358 \"a\"" (ref $JSStringImpl) <...>)
+  (global $stringValueNullable (mut (ref null $JSStringImpl)) <...>)
+  (func $_throwArgumentNullError <noInline>  <...>)
+  (func $ktrue implicit getter (result i32) <...>)
   (func $new JSStringImpl.fromRef (param $var0 externref) (result (ref $JSStringImpl)) <...>)
+  (func $sinkString <noInline> (param $var0 (ref $JSStringImpl)) <...>)
+  (func $sinkStringNullable <noInline> (param $var0 (ref null $JSStringImpl)) <...>)
+  (func $stringValue implicit getter (result (ref $JSStringImpl)) <...>)
   (func $"testStringConstant <noInline>"
     (local $var0 externref)
-    global.get $"C358 \"a\""
-    struct.get $JSStringImpl $_ref
+    global.get $.a
     call $"dart2wasm._274 (import)"
     local.tee $var0
     call $isDartNull
@@ -108,11 +112,6 @@
     end
     call $"sinkStringNullable <noInline>"
   )
-  (func $jsifyRaw (param $var0 (ref null $#Top)) (result externref) <...>)
   (func $isDartNull (param $var0 externref) (result i32) <...>)
-  (func $sinkStringNullable <noInline> (param $var0 (ref null $JSStringImpl)) <...>)
-  (func $_throwArgumentNullError <noInline>  <...>)
-  (func $ktrue implicit getter (result i32) <...>)
-  (func $stringValue implicit getter (result (ref $JSStringImpl)) <...>)
-  (func $sinkString <noInline> (param $var0 (ref $JSStringImpl)) <...>)
+  (func $jsifyRaw (param $var0 (ref null $#Top)) (result externref) <...>)
 )
\ No newline at end of file
diff --git a/pkg/dart2wasm/test/phases/phases_test.dart b/pkg/dart2wasm/test/phases/phases_test.dart
index 9ccb297..324d2d7 100644
--- a/pkg/dart2wasm/test/phases/phases_test.dart
+++ b/pkg/dart2wasm/test/phases/phases_test.dart
@@ -13,6 +13,7 @@
 final String cfeDillName = 'main.cfe.dill';
 final String tfaDillName = 'main.tfa.dill';
 final String wasmOutName = 'main.wasm';
+final String wasmOptOutName = 'main.opt.wasm';
 
 Future<void> main() async {
   await testSuccessCases();
@@ -21,11 +22,10 @@
 
 Future<void> testSuccessCases() async {
   await withTempDir((tmpDirPath) async {
-    final tmpDir = File(tmpDirPath);
-
-    final cfeDill = File.fromUri(tmpDir.uri.resolve(cfeDillName));
-    final tfaDill = File.fromUri(tmpDir.uri.resolve(tfaDillName));
-    final wasmOut = File.fromUri(tmpDir.uri.resolve(wasmOutName));
+    final cfeDill = File(path.join(tmpDirPath, cfeDillName));
+    final tfaDill = File(path.join(tmpDirPath, tfaDillName));
+    final wasmOut = File(path.join(tmpDirPath, wasmOutName));
+    final wasmOptOut = File(path.join(tmpDirPath, wasmOptOutName));
 
     // Run CFE and expect output
     await run([
@@ -62,13 +62,24 @@
     ]);
     Expect.isTrue(await wasmOut.exists());
     Expect.isTrue((await wasmOut.stat()).size > 0);
+
+    // Run opt and expect output
+    await run([
+      dartAotExecutable,
+      dart2wasmSnapshot,
+      '--platform=$platformDill',
+      '--phases=opt',
+      '--wasm-opt=$wasmOptExecutable',
+      wasmOut.path,
+      wasmOptOut.path,
+    ]);
+    Expect.isTrue(await wasmOptOut.exists());
+    Expect.isTrue((await wasmOptOut.stat()).size > 0);
   });
 
   await withTempDir((tmpDirPath) async {
-    final tmpDir = File(tmpDirPath);
-
-    final tfaDill = File.fromUri(tmpDir.uri.resolve(tfaDillName));
-    final wasmOut = File.fromUri(tmpDir.uri.resolve(wasmOutName));
+    final tfaDill = File(path.join(tmpDirPath, tfaDillName));
+    final wasmOut = File(path.join(tmpDirPath, wasmOutName));
 
     // Run CFE & TFA and expect output
     await run([
@@ -96,10 +107,8 @@
   });
 
   await withTempDir((tmpDirPath) async {
-    final tmpDir = File(tmpDirPath);
-
-    final cfeDill = File.fromUri(tmpDir.uri.resolve(tfaDillName));
-    final wasmOut = File.fromUri(tmpDir.uri.resolve(wasmOutName));
+    final cfeDill = File(path.join(tmpDirPath, cfeDillName));
+    final wasmOut = File(path.join(tmpDirPath, wasmOutName));
 
     // Run CFE and expect output
     await run([
@@ -127,9 +136,7 @@
   });
 
   await withTempDir((tmpDirPath) async {
-    final tmpDir = File(tmpDirPath);
-
-    final wasmOut = File.fromUri(tmpDir.uri.resolve(wasmOutName));
+    final wasmOut = File(path.join(tmpDirPath, wasmOutName));
 
     // Run CFE & TFA & codegen and expect output
     await run([
@@ -143,15 +150,31 @@
     Expect.isTrue(await wasmOut.exists());
     Expect.isTrue((await wasmOut.stat()).size > 0);
   });
+
+  await withTempDir((tmpDirPath) async {
+    final wasmOptOut = File(path.join(tmpDirPath, wasmOptOutName));
+
+    // Run CFE & TFA & codegen & opt and expect output
+    await run([
+      dartAotExecutable,
+      dart2wasmSnapshot,
+      '--platform=$platformDill',
+      '--phases=cfe,tfa,codegen,opt',
+      '--wasm-opt=$wasmOptExecutable',
+      mainDart,
+      wasmOptOut.path,
+    ]);
+    Expect.isTrue(await wasmOptOut.exists());
+    Expect.isTrue((await wasmOptOut.stat()).size > 0);
+  });
 }
 
 Future<void> testFailureCases() async {
   await withTempDir((tmpDirPath) async {
-    final tmpDir = File(tmpDirPath);
-
-    final cfeDill = File.fromUri(tmpDir.uri.resolve(cfeDillName));
-    final tfaDill = File.fromUri(tmpDir.uri.resolve(tfaDillName));
-    final wasmOut = File.fromUri(tmpDir.uri.resolve(wasmOutName));
+    final cfeDill = File(path.join(tmpDirPath, cfeDillName));
+    final tfaDill = File(path.join(tmpDirPath, tfaDillName));
+    final wasmOut = File(path.join(tmpDirPath, wasmOutName));
+    final wasmOptOut = File(path.join(tmpDirPath, wasmOptOutName));
 
     // CFE checks
     await expectFailedRun([
@@ -177,7 +200,6 @@
       dartAotExecutable,
       dart2wasmSnapshot,
       '--platform=$platformDill',
-      '--platform=$platformDill',
       '--phases=tfa',
       mainDart,
       tfaDill.path
@@ -197,7 +219,6 @@
       dartAotExecutable,
       dart2wasmSnapshot,
       '--platform=$platformDill',
-      '--platform=$platformDill',
       '--phases=codegen',
       mainDart,
       wasmOut.path
@@ -212,6 +233,25 @@
       cfeDill.path
     ], 'Output from codegen phase must be a .wasm file');
 
+    // Opt checks
+    await expectFailedRun([
+      dartAotExecutable,
+      dart2wasmSnapshot,
+      '--platform=$platformDill',
+      '--phases=opt',
+      mainDart,
+      wasmOptOut.path
+    ], 'Input to opt phase must be a .wasm file');
+
+    await expectFailedRun([
+      dartAotExecutable,
+      dart2wasmSnapshot,
+      '--platform=$platformDill',
+      '--phases=opt',
+      wasmOut.path,
+      cfeDill.path
+    ], 'Output from opt phase must be a .wasm file');
+
     // Other checks
     await expectFailedRun([
       dartAotExecutable,
@@ -230,6 +270,16 @@
       mainDart,
       cfeDill.path
     ], 'Invalid compiler phase name');
+
+    await expectFailedRun([
+      dartAotExecutable,
+      dart2wasmSnapshot,
+      '--platform=$platformDill',
+      '--phases=opt',
+      '-O0',
+      wasmOut.path,
+      wasmOptOut.path
+    ], 'Cannot specify "opt" phase with optimization level 0');
   });
 }
 
diff --git a/pkg/dart2wasm/test/util.dart b/pkg/dart2wasm/test/util.dart
index 3952b7c..55adc43 100644
--- a/pkg/dart2wasm/test/util.dart
+++ b/pkg/dart2wasm/test/util.dart
@@ -10,6 +10,9 @@
 final dart2wasmSnapshot = Uri.parse(Platform.resolvedExecutable)
     .resolve('snapshots/dart2wasm_product.snapshot')
     .toFilePath();
+final wasmOptExecutable = Uri.parse(Platform.resolvedExecutable)
+    .resolve('utils/wasm-opt')
+    .toFilePath();
 final platformDill = Uri.parse(Platform.resolvedExecutable)
     .resolve('../lib/_internal/dart2wasm_platform.dill')
     .toFilePath();
diff --git a/pkg/dart2wasm/tool/compile_benchmark b/pkg/dart2wasm/tool/compile_benchmark
index 9c111b5..c1e900e 100755
--- a/pkg/dart2wasm/tool/compile_benchmark
+++ b/pkg/dart2wasm/tool/compile_benchmark
@@ -58,17 +58,8 @@
 function find_flags {
   echo -en "$(sed -n "/$1 =/,/end of $1/ p" $SDK_DIR/pkg/dartdev/lib/src/commands/compile.dart  | sed  '1d' | sed '$d' | tr '\n' ' ' | sed 's#\s\+# #g' | sed 's#^\s\+##' | sed 's#\s\+$##')"
 }
-# Use same flags as `dart compile exe`
-BINARYEN_FLAGS=($(find_flags 'binaryenFlags'))
-BINARYEN_FLAGS_DEFERRED_LOADING=($(find_flags 'binaryenFlagsDeferredLoading'))
-OPT_FLAGS_L0=($(find_flags 'optimizationLevel0Flags'))
-OPT_FLAGS_L1=($(find_flags 'optimizationLevel1Flags'))
-OPT_FLAGS_L2=($(find_flags 'optimizationLevel2Flags'))
-OPT_FLAGS_L3=($(find_flags 'optimizationLevel3Flags'))
-OPT_FLAGS_L4=($(find_flags 'optimizationLevel4Flags'))
 
 RUN_BINARYEN=1
-MULTI_MODULE=0
 RUN_SRC=0
 GENERATE_SOURCE_MAP=1
 COMPILE_BENCHMARK_BASE_NAME=""
@@ -79,7 +70,6 @@
 # flags.
 VM_ARGS=()
 DART2WASM_ARGS=("--require-js-string-builtin")
-ADDITIONAL_BINARYEN_FLAGS=()
 DART_FILE=""
 OUTPUT_FILE=""
 while [ $# -gt 0 ]; do
@@ -100,11 +90,6 @@
       shift
       ;;
 
-    -g | --no-strip-wasm)
-      ADDITIONAL_BINARYEN_FLAGS+=("-g")
-      shift
-      ;;
-
     --compiler-asserts)
       SNAPSHOT_NAME="dart2wasm_asserts"
       VM_ARGS+=("--enable-asserts")
@@ -112,52 +97,16 @@
       ;;
 
     -O0 | --optimization-level=0)
-      DART2WASM_ARGS+=(${OPT_FLAGS_L0[@]})
+      DART2WASM_ARGS+=("-O0")
       RUN_BINARYEN=0
       shift
       ;;
 
-    -O1 | --optimization-level=1)
-      DART2WASM_ARGS+=(${OPT_FLAGS_L1[@]})
-      RUN_BINARYEN=1
-      shift
-      ;;
-
-    -O2 | --optimization-level=2)
-      DART2WASM_ARGS+=(${OPT_FLAGS_L2[@]})
-      RUN_BINARYEN=1
-      shift
-      ;;
-
-    -O3 | --optimization-level=3)
-      DART2WASM_ARGS+=(${OPT_FLAGS_L3[@]})
-      RUN_BINARYEN=1
-      shift
-      ;;
-
-    -O4 | --optimization-level=4)
-      DART2WASM_ARGS+=(${OPT_FLAGS_L4[@]})
-      RUN_BINARYEN=1
-      shift
-      ;;
-
     --extra-compiler-option=--platform=*)
       PLATFORM_FILENAME="${1#--extra-compiler-option=--platform=}"
       shift
       ;;
 
-    --extra-compiler-option=--enable-deferred-loading)
-      MULTI_MODULE=1
-      DART2WASM_ARGS+=("--enable-deferred-loading")
-      shift
-      ;;
-
-    --extra-compiler-option=--enable-multi-module-stress-test-mode)
-      MULTI_MODULE=1
-      DART2WASM_ARGS+=("--enable-multi-module-stress-test-mode")
-      shift
-      ;;
-
     --extra-compiler-option=--no-js-compatibility)
       PLATFORM_FILENAME="$BIN_DIR/dart2wasm_platform.dill"
       DART2WASM_ARGS+=("--no-js-compatibility")
@@ -202,10 +151,6 @@
   esac
 done
 
-if [ $GENERATE_SOURCE_MAP -eq 1 ]; then
-  BINARYEN_FLAGS+=("-ism" "${OUTPUT_FILE}.map" "-osm" "${OUTPUT_FILE}.map")
-fi
-
 if [ -z "$DART_FILE" -o -z "$OUTPUT_FILE" ]; then
   echo "Expected <file.dart> <file.wasm>"
   exit 1
@@ -247,9 +192,9 @@
 
 function run_compiler() {
   if [ $RUN_SRC -eq 1 ]; then
-    dart2wasm_command=("$DART" "${VM_ARGS[@]}" "$DART2WASM_SRC" "$LIBRARIES_JSON_ARG" "${DART2WASM_ARGS[@]}" "$DART_FILE" "$OUTPUT_FILE")
+    dart2wasm_command=("$DART" "${VM_ARGS[@]}" "$DART2WASM_SRC" "$LIBRARIES_JSON_ARG" "${DART2WASM_ARGS[@]}" "--phases=cfe,tfa,codegen" "$DART_FILE" "$OUTPUT_FILE")
   else
-    dart2wasm_command=("$DART_AOT_RUNTIME" "${VM_ARGS[@]}" "$DART2WASM_AOT_SNAPSHOT" "$PLATFORM_ARG" "${DART2WASM_ARGS[@]}" "$DART_FILE" "$OUTPUT_FILE")
+    dart2wasm_command=("$DART_AOT_RUNTIME" "${VM_ARGS[@]}" "$DART2WASM_AOT_SNAPSHOT" "$PLATFORM_ARG" "${DART2WASM_ARGS[@]}" "--phases=cfe,tfa,codegen" "$DART_FILE" "$OUTPUT_FILE")
   fi
 
   if [ -n "$COMPILE_BENCHMARK_BASE_NAME" ]; then
@@ -261,17 +206,11 @@
     MJS_SIZE=$SIZE
     MJS_GZIP_SIZE=$GZIP_SIZE
 
-    if [ $MULTI_MODULE -eq 1 ]; then
-      for OUTPUT_FILE in "${OUTPUT_FILE%.wasm}"*.wasm; do
-        measure_size $OUTPUT_FILE
-        (( COMPILER_SIZE+=$SIZE ))
-        (( COMPILER_GZIP_SIZE+=$GZIP_SIZE ))
-      done
-    else
+    for OUTPUT_FILE in "${OUTPUT_FILE%.wasm}"*.wasm; do
       measure_size $OUTPUT_FILE
-      COMPILER_SIZE=$SIZE
-      COMPILER_GZIP_SIZE=$GZIP_SIZE
-    fi
+      (( COMPILER_SIZE+=$SIZE ))
+      (( COMPILER_GZIP_SIZE+=$GZIP_SIZE ))
+    done
   else
     "${dart2wasm_command[@]}"
   fi
@@ -282,36 +221,24 @@
 BINARYEN_SIZE=0
 BINARYEN_GZIP_SIZE=0
 
-function run_binaryen_single() {
-  binaryen_command=("$BINARYEN" "$@" "${ADDITIONAL_BINARYEN_FLAGS[@]}" "$OUTPUT_FILE" -o "$OUTPUT_FILE")
+function run_binaryen() {
+  if [ $RUN_SRC -eq 1 ]; then
+    opt_command=("$DART" "${VM_ARGS[@]}" "$DART2WASM_SRC" "$LIBRARIES_JSON_ARG" "${DART2WASM_ARGS[@]}" "--phases=opt" "--wasm-opt=$BINARYEN" "$OUTPUT_FILE" "$OUTPUT_FILE")
+  else
+    opt_command=("$DART_AOT_RUNTIME" "${VM_ARGS[@]}" "$DART2WASM_AOT_SNAPSHOT" "$PLATFORM_ARG" "${DART2WASM_ARGS[@]}" "--phases=opt" "--wasm-opt=$BINARYEN" "$OUTPUT_FILE" "$OUTPUT_FILE")
+  fi
   if [ -n "$COMPILE_BENCHMARK_BASE_NAME" ]; then
     # If we're measuring run each binaryen command sequentially.
-    measure ${binaryen_command[@]}
+    measure "${opt_command[@]}"
     BINARYEN_TIME=$(echo "$BINARYEN_TIME + $TIME" | bc)
     BINARYEN_MEMORY=$(($BINARYEN_MEMORY > $MEMORY ? $BINARYEN_MEMORY : $MEMORY ))
     measure_size $OUTPUT_FILE
     BINARYEN_SIZE=$(echo "$BINARYEN_SIZE + $SIZE" | bc)
     BINARYEN_GZIP_SIZE=$(echo "$BINARYEN_GZIP_SIZE + $GZIP_SIZE" | bc)
-  else
-    ${binaryen_command[@]} &
-  fi
-}
-
-function run_binaryen() {
-  if [ $MULTI_MODULE -eq 1 ]; then
-    # Iterate over all matching wasm files and optimize them concurrently in
-    # different processes.
-    for OUTPUT_FILE in "${OUTPUT_FILE%.wasm}"*.wasm; do
-      run_binaryen_single "${BINARYEN_FLAGS_DEFERRED_LOADING[@]}"
-    done
-  else
-    run_binaryen_single "${BINARYEN_FLAGS[@]}"
-  fi
-  wait
-
-  if [ -n "$COMPILE_BENCHMARK_BASE_NAME" ]; then
     MAX_MEMORY=$(($COMPILER_MEMORY > $BINARYEN_MEMORY ? $COMPILER_MEMORY : $BINARYEN_MEMORY ))
     TOTAL_TIME=$(echo "$COMPILER_TIME + $BINARYEN_TIME" | bc)
+  else
+    "${opt_command[@]}"
   fi
 }
 
diff --git a/pkg/dartdev/lib/src/commands/build.dart b/pkg/dartdev/lib/src/commands/build.dart
index 9742e3c..f503548 100644
--- a/pkg/dartdev/lib/src/commands/build.dart
+++ b/pkg/dartdev/lib/src/commands/build.dart
@@ -252,13 +252,20 @@
       verbose: verbose,
       dataAssetsExperimentEnabled: dataAssetsExperimentEnabled,
     );
-    final buildResult = await progress(
-      'Running build hooks',
-      builder.buildNativeAssetsAOT,
-    );
-    if (buildResult == null) {
-      stderr.writeln('Running build hooks failed.');
-      return 255;
+    final showProgress = verbosity != Verbosity.error.name;
+    BuildResult? buildResult;
+    final hasHooks = await builder.hasHooks();
+    if (hasHooks) {
+      buildResult = await (showProgress
+          ? progress(
+              'Running build hooks',
+              builder.buildNativeAssetsAOT,
+            )
+          : builder.buildNativeAssetsAOT());
+      if (buildResult == null) {
+        stderr.writeln('Running build hooks failed.');
+        return 255;
+      }
     }
 
     final tempDir = Directory.systemTemp.createTempSync();
@@ -296,22 +303,31 @@
         if (first) {
           // Multiple executables are only supported with recorded uses
           // disabled, so don't re-invoke link hooks.
-          linkResult = await progress(
-            'Running link hooks',
-            () => builder.linkNativeAssetsAOT(
-              recordedUsagesPath: recordedUsagesPath,
-              buildResult: buildResult,
-            ),
-          );
-        }
-        if (linkResult == null) {
-          stderr.writeln('Running link hooks failed.');
-          return 255;
+          if (hasHooks) {
+            linkResult = await (showProgress
+                ? progress(
+                    'Running link hooks',
+                    () => builder.linkNativeAssetsAOT(
+                      recordedUsagesPath: recordedUsagesPath,
+                      buildResult: buildResult!,
+                    ),
+                  )
+                : builder.linkNativeAssetsAOT(
+                    recordedUsagesPath: recordedUsagesPath,
+                    buildResult: buildResult!,
+                  ));
+            if (linkResult == null) {
+              stderr.writeln('Running link hooks failed.');
+              return 255;
+            }
+          }
         }
 
         final allAssets = [
-          ...buildResult.encodedAssets,
-          ...linkResult.encodedAssets
+          if (hasHooks) ...[
+            ...buildResult!.encodedAssets,
+            ...linkResult!.encodedAssets
+          ]
         ];
 
         final staticAssets = allAssets
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 4b32c90..5eb20e7 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -723,86 +723,6 @@
   static const String commandName = 'wasm';
   static const String help = 'Compile Dart to a WebAssembly/WasmGC module.';
 
-  // The unique place where we store various flags for dart2wasm & binaryen.
-  //
-  // Other uses (e.g. pkg/dart2wasm/tool/compile_benchmark) will grep in this
-  // file for the flags. So please keep the formatting.
-
-  final List<String> binaryenFlags = _flagList('''
-      --enable-gc
-      --enable-reference-types
-      --enable-multivalue
-      --enable-exception-handling
-      --enable-nontrapping-float-to-int
-      --enable-sign-ext
-      --enable-bulk-memory
-      --enable-threads
-
-      --no-inline=*<noInline>*
-
-      --closed-world
-      --traps-never-happen
-      --type-unfinalizing
-      -Os
-      --type-ssa
-      --gufa
-      -Os
-      --type-merging
-      -Os
-      --type-finalizing
-      --minimize-rec-groups
-    '''); // end of binaryenFlags
-
-  final List<String> binaryenFlagsDeferredLoading = _flagList('''
-      --enable-gc
-      --enable-reference-types
-      --enable-multivalue
-      --enable-exception-handling
-      --enable-nontrapping-float-to-int
-      --enable-sign-ext
-      --enable-bulk-memory
-      --enable-threads
-
-      --no-inline=*<noInline>*
-
-      --traps-never-happen
-      -Os
-    '''); // end of binaryenFlagsDeferredLoading
-
-  final List<String> optimizationLevel0Flags = _flagList('''
-      --no-inlining
-      --no-minify
-    '''); // end of optimizationLevel0Flags
-
-  final List<String> optimizationLevel1Flags = _flagList('''
-      --inlining
-      --no-minify
-    '''); // end of optimizationLevel1Flags
-
-  final List<String> optimizationLevel2Flags = _flagList('''
-      --inlining
-      --minify
-    '''); // end of optimizationLevel2Flags
-
-  final List<String> optimizationLevel3Flags = _flagList('''
-      --inlining
-      --minify
-      --omit-implicit-checks
-    '''); // end of optimizationLevel3Flags
-
-  final List<String> optimizationLevel4Flags = _flagList('''
-      --inlining
-      --minify
-      --omit-implicit-checks
-      --omit-bounds-checks
-    '''); // end of optimizationLevel4Flags
-
-  static List<String> _flagList(String lines) => lines
-      .split('\n')
-      .map((line) => line.trim())
-      .where((line) => line.isNotEmpty)
-      .toList();
-
   CompileWasmCommand({bool verbose = false})
       : super(commandName, help, verbose) {
     argParser
@@ -857,6 +777,14 @@
         valueHelp: 'page count',
         hide: !verbose,
       )
+      ..addMultiOption('phases',
+          help: 'Specifies which phases of the dart2wasm compiler to run. Each '
+              'phase will emit a partial result that is then the input to the '
+              'next phase.',
+          allowed: ['cfe', 'tfa', 'codegen', 'opt'],
+          defaultsTo: ['cfe', 'tfa', 'codegen', 'opt'],
+          hide: !verbose,
+          splitCommas: true)
       ..addMultiOption(
         'extra-compiler-option',
         abbr: 'E',
@@ -872,13 +800,6 @@
         allowed: ['0', '1', '2', '3', '4'],
         defaultsTo: '1',
         valueHelp: 'level',
-        allowedHelp: {
-          '0': optimizationLevel0Flags.join(' '),
-          '1': optimizationLevel1Flags.join(' '),
-          '2': optimizationLevel2Flags.join(' '),
-          '3': optimizationLevel3Flags.join(' '),
-          '4': optimizationLevel4Flags.join(' '),
-        },
         hide: !verbose,
       )
       ..addFlag(
@@ -964,42 +885,23 @@
       }
     }
 
-    final isMultiModule = args.flag('enable-deferred-loading') ||
-        // Used in testing to force multiple modules.
-        extraCompilerOptions
-            .any((e) => e.contains('enable-multi-module-stress-test'));
-    final optimizationLevel = int.parse(args.option('optimization-level')!);
-
-    final runWasmOpt =
-        optimizationLevel >= 1 && path.extension(outputFile) == '.wasm';
-
-    if (runWasmOpt && !checkArtifactExists(sdk.wasmOpt)) {
-      return 255;
+    int? optimizationLevel;
+    List<String> phases = args.multiOption('phases');
+    if (args.wasParsed('phases')) {}
+    if (args.option('optimization-level') != null) {
+      optimizationLevel = int.tryParse(args.option('optimization-level')!);
+      if (optimizationLevel == null) {
+        usageException(
+            'Error: The --optimization-level flag must specify a number!');
+      }
+      if (optimizationLevel == 0) {
+        if (!args.wasParsed('phases')) {
+          // Don't add the opt phase.
+          phases.removeLast();
+        }
+      }
     }
 
-    void handleOverride(List<String> flags, String name, bool? value) {
-      // If no override provided, default to what -O implies.
-      if (value == null) return;
-
-      flags.removeWhere((option) => option == '--no-$name');
-      flags.removeWhere((option) => option == '--$name');
-
-      // Explicitly use the flag value, irrespective of -O settings.
-      value ? flags.add('--$name') : flags.add('--no-$name');
-    }
-
-    final optimizationFlags = (switch (optimizationLevel) {
-      0 => optimizationLevel0Flags,
-      1 => optimizationLevel1Flags,
-      2 => optimizationLevel2Flags,
-      3 => optimizationLevel3Flags,
-      4 => optimizationLevel4Flags,
-      _ => throw 'unreachable',
-    })
-        .toList();
-    handleOverride(optimizationFlags, 'minify',
-        args.wasParsed('minify') ? args.flag('minify') : null);
-
     final generateSourceMap = args.flag('source-maps');
     final enabledExperiments = args.enabledExperiments;
     final dart2wasmCommand = [
@@ -1012,20 +914,19 @@
       if (args.flag('print-kernel')) '--print-kernel',
       if (args.flag(enableAssertsOption.flag)) '--${enableAssertsOption.flag}',
       if (!generateSourceMap) '--no-source-maps',
-      if (isMultiModule) '--enable-deferred-loading',
+      if (optimizationLevel != null) '--optimization-level=$optimizationLevel',
+      if (args.flag('minify')) '--minify',
+      if (args.flag('strip-wasm')) '--strip-wasm',
+      if (args.flag('enable-deferred-loading')) '--enable-deferred-loading',
       for (final define in defines) '-D$define',
       if (maxPages != null) ...[
         '--import-shared-memory',
         '--shared-memory-max-pages=$maxPages',
       ],
+      '--phases=${phases.join(",")}',
+      '--wasm-opt=${sdk.wasmOpt}',
       ...enabledExperiments.map((e) => '--enable-experiment=$e'),
-
-      // First we pass flags based on the optimization level.
-      ...optimizationFlags,
-
-      // Then we pass any extra compiler flags through.
       ...extraCompilerOptions,
-
       sourcePath,
       outputFile,
     ];
@@ -1041,102 +942,16 @@
       return compileErrorExitCode;
     }
 
-    final bool strip = args.flag('strip-wasm');
-
     // When running in dry run mode there will not be any file emitted.
     final isDryRun = extraCompilerOptions.any((e) => e.contains('dry-run'));
 
     if (isDryRun) return 0;
 
-    if (runWasmOpt) {
-      if (isMultiModule) {
-        // Iterate over all matching wasm files and optimize them concurrently
-        // in different processes.
-        final outputFiles = await _listMultiWasmModules(
-            path.dirname(outputFile), outputFileBasename);
-        final futures = <Future<int>>[];
-        for (final f in outputFiles) {
-          final baseFileName = path.setExtension(f.path, '');
-          futures.add(optimize(baseFileName, f.path,
-              deferredLoadingEnabled: true,
-              generateSourceMap: generateSourceMap,
-              strip: strip));
-        }
-        final exitCode = (await Future.wait(futures))
-            .firstWhere((r) => r != 0, orElse: () => 0);
-        if (exitCode != 0) return exitCode;
-      } else {
-        final exitCode = await optimize(outputFileBasename, outputFile,
-            deferredLoadingEnabled: false,
-            generateSourceMap: generateSourceMap,
-            strip: strip);
-        if (exitCode != 0) return exitCode;
-      }
-    }
-
     final mjsFile = '$outputFileBasename.mjs';
     log.stdout(
         "Generated wasm module '$outputFile', and JS init file '$mjsFile'.");
     return 0;
   }
-
-  Future<List<File>> _listMultiWasmModules(
-      String outputDir, String outputFileBasename) async {
-    final files = <File>[];
-    final outputFiles = await Directory(outputDir).list().toList();
-    // When multiple modules are produced from wasm (e.g. with deferred
-    // loading), the compiler emits files:
-    // - basename.wasm (main module)
-    // - basename_module{1...N}.wasm (extra modules)
-    for (final f in outputFiles) {
-      if (f is! File) continue;
-      if (!path.split(f.path).last.startsWith(outputFileBasename)) continue;
-      if (path.extension(f.path) != '.wasm') continue;
-
-      files.add(f);
-    }
-    return files;
-  }
-
-  Future<int> optimize(String outputFileBasename, String outputFile,
-      {required bool deferredLoadingEnabled,
-      required bool generateSourceMap,
-      required bool strip}) async {
-    final unoptFile = '$outputFileBasename.unopt.wasm';
-    File(outputFile).renameSync(unoptFile);
-
-    final unoptSourceMapFile = '$outputFileBasename.unopt.wasm.map';
-    if (generateSourceMap) {
-      File('$outputFile.map').renameSync(unoptSourceMapFile);
-    }
-
-    final flags = [
-      ...(deferredLoadingEnabled
-          ? binaryenFlagsDeferredLoading
-          : binaryenFlags),
-      if (!strip) '-g',
-      if (generateSourceMap) ...[
-        '-ism',
-        unoptSourceMapFile,
-        '-osm',
-        '$outputFile.map'
-      ]
-    ];
-
-    if (verbose) {
-      log.stdout('Optimizing output with: ${sdk.wasmOpt} $flags');
-    }
-    final processResult = Process.runSync(
-      sdk.wasmOpt,
-      [...flags, '-o', outputFile, unoptFile],
-    );
-    if (processResult.exitCode != 0) {
-      log.stderr('Error: Wasm compilation failed while optimizing output');
-      log.stderr(processResult.stderr);
-      return compileErrorExitCode;
-    }
-    return 0;
-  }
 }
 
 abstract class CompileSubcommandCommand extends DartdevCommand {
diff --git a/pkg/dartdev/lib/src/commands/install.dart b/pkg/dartdev/lib/src/commands/install.dart
index 555a3bf..abf6cc2 100644
--- a/pkg/dartdev/lib/src/commands/install.dart
+++ b/pkg/dartdev/lib/src/commands/install.dart
@@ -7,6 +7,8 @@
 import 'package:dartdev/src/commands/build.dart';
 import 'package:dartdev/src/install/file_system.dart';
 import 'package:dartdev/src/install/pub_formats.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart'
+    show Verbosity;
 import 'package:path/path.dart' as p;
 import 'package:pub/pub.dart';
 import 'package:pub_formats/pub_formats.dart';
@@ -32,6 +34,9 @@
 3. A path on your machine. This will install the package from that path. (path)''';
   static const int genericErrorExitCode = 255;
 
+  static const gitRefOption = 'git-ref';
+  static const gitPathOption = 'git-path';
+
   @override
   String get invocation {
     final superNoArguments = super.invocation.replaceAll(' [arguments]', '');
@@ -44,13 +49,13 @@
   InstallCommand({bool verbose = false})
       : super(cmdName, cmdDescription, verbose) {
     argParser.addOption(
-      'git-path',
+      gitPathOption,
       help: 'Path of git package in repository. '
           'Only applies when using a git url for <package>.',
     );
 
     argParser.addOption(
-      'git-ref',
+      gitRefOption,
       help: 'Git branch or commit to be retrieved. '
           'Only applies when using a git url for <package>.',
     );
@@ -73,7 +78,7 @@
   ///
   /// Reports usage errors to user if the wrong number or arguments or the wrong
   /// flags are passed.
-  _InstallCommandParsedArguments _parseArguments() {
+  InstallCommandParsedArguments _parseArguments() {
     final argResults = this.argResults!;
 
     final overwrite = argResults.flag('overwrite');
@@ -88,19 +93,20 @@
     }
 
     final argument = readArg('No package source given.');
-    final sourceKind = _SourceKind.fromArgument(argument);
+    final sourceKind = _soureKindFromArgument(argument);
 
-    final gitPath = argResults.option('git-path');
-    var gitRef = argResults.option('git-ref');
-    if (sourceKind != _SourceKind.git && (gitPath != null || gitRef != null)) {
+    final gitPath = argResults.option(gitPathOption);
+    var gitRef = argResults.option(gitRefOption);
+    if (sourceKind != RemoteSourceKind.git &&
+        (gitPath != null || gitRef != null)) {
       usageException(
-        'Options `--git-path` and `--git-ref` '
+        'Options `--$gitPathOption` and `--$gitRefOption` '
         'can only be used with a git source.',
       );
     }
 
     final hostedUrl = argResults.option('hosted-url');
-    if (sourceKind != _SourceKind.hosted && hostedUrl != null) {
+    if (sourceKind != RemoteSourceKind.hosted && hostedUrl != null) {
       usageException(
         'Option `--hosted-url` can only be used with a hosted source.',
       );
@@ -108,10 +114,10 @@
 
     String? versionConstraint;
     switch (sourceKind) {
-      case _SourceKind.git:
-      case _SourceKind.path:
+      case RemoteSourceKind.git:
+      case RemoteSourceKind.path:
         break;
-      case _SourceKind.hosted:
+      case RemoteSourceKind.hosted:
         versionConstraint = args.isEmpty ? 'any' : readArg();
     }
     if (args.isNotEmpty) {
@@ -119,7 +125,7 @@
         'Too many arguments, did not expect "${args.join(' ')}"',
       );
     }
-    return _InstallCommandParsedArguments._(
+    return InstallCommandParsedArguments(
       source: argument,
       sourceKind: sourceKind,
       versionConstraint: versionConstraint,
@@ -131,10 +137,10 @@
   }
 
   Future<String> _findPackageName(
-    _InstallCommandParsedArguments parsedArgs,
+    InstallCommandParsedArguments parsedArgs,
   ) async {
     switch (parsedArgs.sourceKind) {
-      case _SourceKind.git:
+      case RemoteSourceKind.git:
         return await getPackageNameFromGitRepo(
           parsedArgs.source,
           ref: parsedArgs.gitRef,
@@ -142,9 +148,9 @@
           relativeTo: Directory.current.path,
           tagPattern: null,
         );
-      case _SourceKind.hosted:
+      case RemoteSourceKind.hosted:
         return parsedArgs.source;
-      case _SourceKind.path:
+      case RemoteSourceKind.path:
         final pubspecFile = File.fromUri(
             Directory(parsedArgs.source).absolute.uri.resolve('pubspec.yaml'));
         if (!await pubspecFile.exists()) {
@@ -164,8 +170,8 @@
   /// Subsequently, we run `pub get` to let pub pull in dependencies, and we use
   /// the `package_graph.json` to find the root of the package that was pulled
   /// in by pub.
-  void _createHelperPackagePubspec({
-    required _InstallCommandParsedArguments parsedArgs,
+  static void createHelperPackagePubspec({
+    required InstallCommandParsedArguments parsedArgs,
     required String packageName,
     required Directory helperPackageDir,
   }) {
@@ -178,18 +184,18 @@
       ),
       dependencies: {
         packageName: switch (parsedArgs.sourceKind) {
-          _SourceKind.git => GitDependencySourceSyntax(
+          RemoteSourceKind.git => GitDependencySourceSyntax(
               git: GitSyntax(
                 url: parsedArgs.source,
                 path$: parsedArgs.gitPath,
                 ref: parsedArgs.gitRef,
               ),
             ),
-          _SourceKind.hosted => HostedDependencySourceSyntax(
+          RemoteSourceKind.hosted => HostedDependencySourceSyntax(
               hosted: parsedArgs.hostedUrl,
               version: parsedArgs.versionConstraint!,
             ),
-          _SourceKind.path =>
+          RemoteSourceKind.path =>
             // Re-resolve dependencies for path activate, behave like it would work
             // for users of the package if the activate via hosted or git.
             PathDependencySourceSyntax(
@@ -203,17 +209,17 @@
 
   static const _helperPackageName = 'dart_install_helper_package';
 
-  Future<void> _resolveHelperPackage(Directory helperPackageDir) async {
+  static Future<void> resolveHelperPackage(Directory helperPackageDir) async {
     try {
       await ensurePubspecResolved(helperPackageDir.path);
     } on ResolutionFailedException catch (e) {
-      _installException(e.message);
+      installException(e.message);
     }
   }
 
   /// The executables that should be placed on the user's PATH when this
   /// package is installed.
-  DartBuildExecutables _loadDeclaredExecutables(
+  static DartBuildExecutables loadDeclaredExecutables(
     File sourcePackagePubspecFile,
     Directory sourcePackageRootDirectory,
   ) {
@@ -221,7 +227,7 @@
 
     final errors = pubspecSyntax.validateExecutables();
     if (errors.isNotEmpty) {
-      _installException([
+      installException([
         'The pubspec.yaml contains the following errors:',
         ...errors
       ].join('\n'));
@@ -233,10 +239,10 @@
     // key.
     final executablesSyntax = pubspecSyntax.executables;
     if (executablesSyntax == null) {
-      _installException('The pubspec.yaml contained no executables section.');
+      installException('The pubspec.yaml contained no executables section.');
     }
     if (executablesSyntax.isEmpty) {
-      _installException(
+      installException(
           'The pubspec.yaml executables section contained no executables.');
     }
 
@@ -250,11 +256,13 @@
     ];
   }
 
-  Future<void> _doBuild(
+  static Future<void> doBuild(
     DartBuildExecutables executables,
     Directory buildDirectory,
     File helperPackageConfigFile,
     File sourcePackagePubspecFile,
+    bool verbose,
+    String verbosity,
   ) async {
     // TODO(https://github.com/dart-lang/native/issues/2465): Add a test for
     // user-defines in the source package pubspec.
@@ -267,10 +275,10 @@
       recordUseEnabled: false,
       dataAssetsExperimentEnabled: false,
       verbose: verbose,
-      verbosity: 'all',
+      verbosity: verbosity,
     );
     if (buildResult != 0) {
-      _installException('Build failed.', exitCode: buildResult);
+      installException('Build failed.', exitCode: buildResult);
     }
   }
 
@@ -290,7 +298,7 @@
         bundle.directory.deleteSync(recursive: true);
       }
     } on PathAccessException {
-      _installException('Deletion failed. The application might be in use.');
+      installException('Deletion failed. The application might be in use.');
     } on PathNotFoundException {
       print('Bundle not found when uninstalling. '
           'Earlier installation may have failed.');
@@ -298,15 +306,15 @@
     }
   }
 
-  AppBundleDirectory _selectAppBundleDirectory(
-    _InstallCommandParsedArguments parsedArgs,
+  static AppBundleDirectory selectAppBundleDirectory(
+    InstallCommandParsedArguments parsedArgs,
     String packageName,
     Directory helperPackageDir,
     File helperPackageLockFile,
   ) {
     final AppBundleDirectory outputDir;
     switch (parsedArgs.sourceKind) {
-      case _SourceKind.git:
+      case RemoteSourceKind.git:
         final resolvedGitRef = parsedArgs.gitRef ??
             GitPackageDescriptionSyntax.fromJson(
               PubspecLockFile.loadSync(helperPackageLockFile)
@@ -318,7 +326,7 @@
           packageName,
           resolvedGitRef,
         );
-      case _SourceKind.hosted:
+      case RemoteSourceKind.hosted:
         final packageGraphJson = PackageGraphFile.loadSync(File.fromUri(
           helperPackageDir.uri.resolve('.dart_tool/package_graph.json'),
         ));
@@ -329,13 +337,13 @@
           packageName,
           resolvedVersion,
         );
-      case _SourceKind.path:
+      case RemoteSourceKind.path:
         outputDir = DartInstallDirectory().localAppBundle(packageName);
     }
     return outputDir;
   }
 
-  Future<void> _createAppBundleDirectory(
+  static Future<void> createAppBundleDirectory(
       AppBundleDirectory appBundleDirectory,
       Directory buildDirectory,
       File helperPackageLockFile,
@@ -344,7 +352,7 @@
       try {
         appBundleDirectory.directory.deleteSync(recursive: true);
       } on PathAccessException {
-        _installException(
+        installException(
           'Failed to delete: ${appBundleDirectory.directory.path}. '
           'The application might be in use.',
         );
@@ -363,7 +371,7 @@
   ///
   /// Tries to use the basic [Directory.rename] method but if that fails then
   /// fall back to copying each entity and then deleting it.
-  Future<void> _renameSafe(Directory from, Uri to) async {
+  static Future<void> _renameSafe(Directory from, Uri to) async {
     try {
       await from.rename(to.toFilePath());
     } on FileSystemException {
@@ -373,7 +381,7 @@
     }
   }
 
-  Future<void> _renameSafeCopyAndDelete(Directory from, Uri to) async {
+  static Future<void> _renameSafeCopyAndDelete(Directory from, Uri to) async {
     await Directory.fromUri(to).create(recursive: true);
     await for (final child in from.list()) {
       final newChildPath = to.resolve(p.relative(child.path, from: from.path));
@@ -393,7 +401,7 @@
       DartBuildExecutables executables,
       AppBundleDirectory appBundleDirectory,
       String packageName,
-      _InstallCommandParsedArguments parsedArgs) {
+      InstallCommandParsedArguments parsedArgs) {
     final errors = <String>[];
     for (final executable in executables) {
       final executableName = executable.name;
@@ -411,7 +419,7 @@
           try {
             executableOnPath.deleteSync();
           } on PathAccessException {
-            _installException(
+            installException(
               'Failed to delete: ${executableOnPath.entity.path}. '
               'The application might be in use.',
             );
@@ -430,7 +438,7 @@
       }
     }
     if (errors.isNotEmpty) {
-      _installException(errors.join('\n'));
+      installException(errors.join('\n'));
     }
   }
 
@@ -496,17 +504,17 @@
   Future<int> run() async {
     final parsedArgs = _parseArguments();
     final packageName = await _findPackageName(parsedArgs);
-    return await _inTempDir((tempDirectory) async {
+    return await inTempDir((tempDirectory) async {
       try {
         final helperPackageDirectory =
             Directory.fromUri(tempDirectory.uri.resolve('helperPackage/'));
         helperPackageDirectory.createSync();
-        _createHelperPackagePubspec(
+        createHelperPackagePubspec(
           helperPackageDir: helperPackageDirectory,
           packageName: packageName,
           parsedArgs: parsedArgs,
         );
-        await _resolveHelperPackage(helperPackageDirectory);
+        await resolveHelperPackage(helperPackageDirectory);
 
         final helperPackageLockFile =
             File.fromUri(helperPackageDirectory.uri.resolve('pubspec.lock'));
@@ -524,29 +532,32 @@
         final sourcePackagePubspecFile = File.fromUri(
             sourcePackageRootDirectory.uri.resolve('pubspec.yaml'));
 
-        final executables = _loadDeclaredExecutables(
+        final executables = loadDeclaredExecutables(
           sourcePackagePubspecFile,
           sourcePackageRootDirectory,
         );
 
         final buildDirectory =
             Directory.fromUri(tempDirectory.uri.resolve('build/'));
-        await _doBuild(
+
+        await doBuild(
           executables,
           buildDirectory,
           helperPackageConfigFile,
           sourcePackagePubspecFile,
+          verbose,
+          Verbosity.all.name,
         );
 
         _uniinstallAllPackageVersions(packageName);
 
-        AppBundleDirectory appBundleDirectory = _selectAppBundleDirectory(
+        AppBundleDirectory appBundleDirectory = selectAppBundleDirectory(
           parsedArgs,
           packageName,
           helperPackageDirectory,
           helperPackageLockFile,
         );
-        await _createAppBundleDirectory(
+        await createAppBundleDirectory(
           appBundleDirectory,
           buildDirectory,
           helperPackageLockFile,
@@ -560,7 +571,7 @@
           parsedArgs,
         );
         _suggestIfNotOnPath(executables.first.name);
-      } on _InstallException catch (e) {
+      } on InstallException catch (e) {
         stderr.writeln(e.message);
         return genericErrorExitCode;
       }
@@ -569,13 +580,13 @@
     });
   }
 
-  /// Throws a [_InstallException] with [message].
+  /// Throws a [InstallException] with [message].
   ///
   /// This enables similar coding style to using [usageException]s.
-  Never _installException(String message, {int? exitCode}) =>
-      throw _InstallException(message, exitCode: exitCode);
+  static Never installException(String message, {int? exitCode}) =>
+      throw InstallException(message, exitCode: exitCode);
 
-  static Future<T> _inTempDir<T>(
+  static Future<T> inTempDir<T>(
       Future<T> Function(Directory tempDirectory) fun) async {
     final tempDir = await Directory.systemTemp.createTemp();
     // Deal with Windows temp folder aliases.
@@ -598,16 +609,17 @@
   }
 }
 
-final class _InstallCommandParsedArguments {
+final class InstallCommandParsedArguments {
+  /// Package name, git url, or file path, depending on [sourceKind].
   final String source;
-  final _SourceKind sourceKind;
+  final RemoteSourceKind sourceKind;
   final String? versionConstraint;
   final String? gitPath;
   final String? gitRef;
   final String? hostedUrl;
   final bool overwrite;
 
-  _InstallCommandParsedArguments._({
+  InstallCommandParsedArguments({
     required this.source,
     required this.sourceKind,
     required this.versionConstraint,
@@ -618,61 +630,61 @@
   });
 }
 
-enum _SourceKind {
+enum RemoteSourceKind {
   git,
   hosted,
   path;
-
-  static _SourceKind fromArgument(String argument) {
-    if (_packageNameRegExp.hasMatch(argument)) {
-      return hosted;
-    }
-    final parsedUri = Uri.tryParse(argument);
-    if (parsedUri != null) {
-      switch (parsedUri.scheme.toLowerCase()) {
-        case 'git':
-        case 'http':
-        case 'https':
-          return git;
-      }
-    }
-    final parsedGitSshUrl = _GitSshUrl.tryParse(argument);
-    if (parsedGitSshUrl != null) {
-      return git;
-    }
-
-    if (argument.endsWith('.git') ||
-        argument.endsWith('.git/') ||
-        argument.endsWith('.git\\')) {
-      return git;
-    }
-    return path;
-  }
-
-  /// A regular expression matching a Dart identifier.
-  ///
-  /// This also matches a package name, since they must be Dart identifiers.
-  static final _identifierRegExp = RegExp(r'[a-zA-Z_]\w*');
-
-  /// A regular expression matching allowed package names.
-  ///
-  /// This allows dot-separated valid Dart identifiers. The dots are there for
-  /// compatibility with Google's internal Dart packages, but they may not be used
-  /// when publishing a package to pub.dev.
-  static final _packageNameRegExp = RegExp(
-    '^${_identifierRegExp.pattern}(\\.${_identifierRegExp.pattern})*\$',
-  );
 }
 
+RemoteSourceKind _soureKindFromArgument(String argument) {
+  if (_packageNameRegExp.hasMatch(argument)) {
+    return RemoteSourceKind.hosted;
+  }
+  final parsedUri = Uri.tryParse(argument);
+  if (parsedUri != null) {
+    switch (parsedUri.scheme.toLowerCase()) {
+      case 'git':
+      case 'http':
+      case 'https':
+        return RemoteSourceKind.git;
+    }
+  }
+  final parsedGitSshUrl = GitSshUrl.tryParse(argument);
+  if (parsedGitSshUrl != null) {
+    return RemoteSourceKind.git;
+  }
+
+  if (argument.endsWith('.git') ||
+      argument.endsWith('.git/') ||
+      argument.endsWith('.git\\')) {
+    return RemoteSourceKind.git;
+  }
+  return RemoteSourceKind.path;
+}
+
+/// A regular expression matching a Dart identifier.
+///
+/// This also matches a package name, since they must be Dart identifiers.
+final _identifierRegExp = RegExp(r'[a-zA-Z_]\w*');
+
+/// A regular expression matching allowed package names.
+///
+/// This allows dot-separated valid Dart identifiers. The dots are there for
+/// compatibility with Google's internal Dart packages, but they may not be used
+/// when publishing a package to pub.dev.
+final _packageNameRegExp = RegExp(
+  '^${_identifierRegExp.pattern}(\\.${_identifierRegExp.pattern})*\$',
+);
+
 // Expected format: git@host:owner/repository.git
-class _GitSshUrl {
+class GitSshUrl {
   final String user;
   final String host;
   final String owner;
   final String repository;
   final String fullUrl;
 
-  _GitSshUrl({
+  GitSshUrl({
     required this.user,
     required this.host,
     required this.owner,
@@ -680,7 +692,7 @@
     required this.fullUrl,
   });
 
-  static _GitSshUrl? tryParse(String url) {
+  static GitSshUrl? tryParse(String url) {
     final regex = RegExp(r'^(\w+)@([^:]+):([^/]+)/(.+?)(?:\.git)?$');
     final match = regex.firstMatch(url);
 
@@ -688,7 +700,7 @@
       return null;
     }
 
-    return _GitSshUrl(
+    return GitSshUrl(
       user: match.group(1)!,
       host: match.group(2)!,
       owner: match.group(3)!,
@@ -704,11 +716,11 @@
 }
 
 /// An exception during the installation process.
-class _InstallException implements Exception {
+class InstallException implements Exception {
   final String message;
   final int? exitCode;
 
-  _InstallException(
+  InstallException(
     this.message, {
     this.exitCode,
   });
diff --git a/pkg/dartdev/lib/src/commands/run.dart b/pkg/dartdev/lib/src/commands/run.dart
index 512493c..298ac7f 100644
--- a/pkg/dartdev/lib/src/commands/run.dart
+++ b/pkg/dartdev/lib/src/commands/run.dart
@@ -7,6 +7,9 @@
 
 import 'package:args/args.dart';
 import 'package:dartdev/src/commands/compile.dart';
+import 'package:dartdev/src/commands/install.dart';
+import 'package:dartdev/src/install/file_system.dart';
+import 'package:dartdev/src/install/pub_formats.dart';
 import 'package:dartdev/src/progress.dart';
 import 'package:front_end/src/api_prototype/compiler_options.dart'
     show Verbosity;
@@ -28,6 +31,9 @@
 class RunCommand extends DartdevCommand {
   static const String cmdName = 'run';
 
+  static const gitRefOption = 'git-ref';
+  static const gitPathOption = 'git-path';
+
   // kErrorExitCode, as defined in runtime/bin/error_exit.h
   static const errorExitCode = 255;
 
@@ -52,7 +58,44 @@
     this.dataAssetsExperimentEnabled = false,
   }) : super(
           cmdName,
-          'Run a Dart program.',
+          '''Run a Dart program from a file, a local package, or a remote package.
+
+Usage: dart [vm-options] run [arguments] [<dart-file>|<local-package>|<remote-executable> [args]]
+
+<dart-file>
+  A path to a Dart script (e.g., `bin/main.dart`).
+
+<local-package>
+  An executable from a local package dependency, in the format <package>[:<executable>].
+  For example, `test:test` runs the `test` executable from the `test` package.
+  If the executable is not specified, the package name is used.
+
+<remote-executable>
+  An executable from a remote package. This can be from a hosted package server
+  (like pub.dev) or a git repository.
+
+  When running a remote executable, all other command-line flags are disabled,
+  except for the options for remote executables. `dart run <remote-executable>`
+  uses `dart install` under the hood and compiles the app into a standalone
+  executable, preventing passing VM options.
+
+  From a hosted package server:
+    <hosted-url>/<package>[@<version>][:<executable>]
+
+    Downloads the package from a hosted package server and runs the specified
+    executable.
+    If a version is provided, the specified version is downloaded.
+    If an executable is not specified, the package name is used.
+    For example, `https://pub.dev/dcli@1.0.0:dcli_complete` runs the
+    `dcli_complete` executable from version 1.0.0 of the `dcli` package.
+
+  From a git repository:
+    <git-url>[:<executable>]
+
+    Clones the git repository and runs the specified executable from it.
+    If an executable is not specified, the package name from the cloned
+    repository's pubspec.yaml is used.
+    The git url can be any valid git url.''',
           verbose,
         ) {
     argParser
@@ -62,7 +105,7 @@
         negatable: false,
         help: 'Enable faster startup times by using a resident frontend '
             'compiler for compilation.\n'
-            'If --resident-compiler-info-file is provided in conjunction with '
+            'If --$residentCompilerInfoFileOption is provided in conjunction with '
             'this flag, the specified info file will be used, otherwise the '
             'default info file will be used. If there is not already a '
             'compiler associated with the selected info file, one will be '
@@ -188,36 +231,37 @@
             'completed microtasks will be written to the "Microtask" '
             'timeline stream.',
       )
-      ..addFlag('profile-startup',
-          hide: !verbose,
-          negatable: false,
-          help: 'Make the profiler discard new samples once the profiler '
-              'sample buffer is full. When this flag is not set, the '
-              'profiler sample buffer is used as a ring buffer, meaning that '
-              'once it is full, new samples start overwriting the oldest '
-              'ones. This flag itself does not enable the profiler; the '
-              'profiler must be enabled separately, e.g. with --profiler.');
-
-    argParser.addSeparator('Logging options:');
-    argParser.addOption(
-      'verbosity',
-      help: 'Sets the verbosity level of the compilation.',
-      defaultsTo: Verbosity.defaultValue,
-      allowed: Verbosity.allowedValues,
-      allowedHelp: Verbosity.allowedValuesHelp,
-    );
+      ..addFlag(
+        'profile-startup',
+        hide: !verbose,
+        negatable: false,
+        help: 'Make the profiler discard new samples once the profiler '
+            'sample buffer is full. When this flag is not set, the '
+            'profiler sample buffer is used as a ring buffer, meaning that '
+            'once it is full, new samples start overwriting the oldest '
+            'ones. This flag itself does not enable the profiler; the '
+            'profiler must be enabled separately, e.g. with --profiler.',
+      )
+      ..addSeparator('Logging options:')
+      ..addOption(
+        'verbosity',
+        help: 'Sets the verbosity level of the compilation.',
+        defaultsTo: Verbosity.defaultValue,
+        allowed: Verbosity.allowedValues,
+        allowedHelp: Verbosity.allowedValuesHelp,
+      );
 
     if (verbose) {
       argParser.addSeparator('Advanced options:');
     }
-    argParser.addMultiOption(
-      'define',
-      abbr: 'D',
-      valueHelp: 'key=value',
-      help: 'Define an environment declaration.',
-      hide: !verbose,
-    );
     argParser
+      ..addMultiOption(
+        'define',
+        abbr: 'D',
+        valueHelp: 'key=value',
+        help: 'Define an environment declaration.',
+        hide: !verbose,
+      )
       ..addFlag(
         'disable-service-auth-codes',
         hide: !verbose,
@@ -234,8 +278,7 @@
         help: 'When the VM service is told to bind to a particular port, '
             'fallback to 0 if it fails to bind instead of failing to '
             'start.',
-      );
-    argParser
+      )
       ..addOption(
         'namespace',
         hide: !verbose,
@@ -269,9 +312,7 @@
         valueHelp: 'path',
         help: 'The path to the package resolution configuration file, which '
             'supplies a mapping of package names\ninto paths.',
-      );
-
-    argParser
+      )
       ..addOption(
         'write-service-info',
         help: 'Outputs information necessary to connect to the VM service to '
@@ -301,8 +342,19 @@
       ..addFlag(
         'debug-dds',
         hide: true,
+      )
+      ..addExperimentalFlags(verbose: verbose)
+      ..addSeparator('Options for remote executables:')
+      ..addOption(
+        gitPathOption,
+        help: 'Path of git package in repository. '
+            'Only applies when using a git url for <remote-executable>.',
+      )
+      ..addOption(
+        gitRefOption,
+        help: 'Git branch or commit to be retrieved. '
+            'Only applies when using a git url for <remote-executable>.',
       );
-    argParser.addExperimentalFlags(verbose: verbose);
   }
 
   @override
@@ -363,7 +415,7 @@
         } else {
           log.stderr(
             'Error: A connection to the Resident Frontend Compiler could '
-            "not be established. Please re-run 'dart run --resident' and a "
+            "not be established. Please re-run 'dart run --$residentOption' and a "
             'new compiler will automatically be started in its place.',
           );
           await shutDownOrForgetResidentFrontendCompiler(
@@ -391,6 +443,42 @@
       runArgs = args.rest.skip(1).toList();
     }
 
+    if (_isRemoteRun(mainCommand)) {
+      return _runRemote(args, mainCommand, runArgs);
+    }
+    return _runLocal(args, mainCommand, runArgs);
+  }
+
+  FutureOr<int> _runLocal(
+    ArgResults args,
+    String mainCommand,
+    List<String> runArgs,
+  ) async {
+    final String? residentCompilerInfoFileArg =
+        args[CompilationServerCommand.residentCompilerInfoFileFlag] ??
+            args[CompilationServerCommand.legacyResidentServerInfoFileFlag];
+    final useResidentCompiler = args.wasParsed(residentOption);
+    if (residentCompilerInfoFileArg != null && !useResidentCompiler) {
+      log.stderr(
+        'Error: the --$residentOption flag must be passed whenever the '
+        '--$residentCompilerInfoFileOption option is passed.',
+      );
+      return errorExitCode;
+    }
+    if (args.wasParsed(quietOption) && !useResidentCompiler) {
+      log.stderr(
+        'Error: the --$residentOption flag must be passed whenever the '
+        '--$quietOption flag is passed.',
+      );
+      return errorExitCode;
+    }
+    if (args.wasParsed(gitPathOption) || args.wasParsed(gitRefOption)) {
+      usageException(
+        'Options `--$gitPathOption` and `--$gitRefOption` '
+        'can only be used with a remote executable.',
+      );
+    }
+
     String? nativeAssets;
     final packageConfigUri = await DartNativeAssetsBuilder.ensurePackageConfig(
       Directory.current.uri,
@@ -442,25 +530,6 @@
       }
     }
 
-    final String? residentCompilerInfoFileArg =
-        args[CompilationServerCommand.residentCompilerInfoFileFlag] ??
-            args[CompilationServerCommand.legacyResidentServerInfoFileFlag];
-    final useResidentCompiler = args.wasParsed(residentOption);
-    if (residentCompilerInfoFileArg != null && !useResidentCompiler) {
-      log.stderr(
-        'Error: the --resident flag must be passed whenever the '
-        '--resident-compiler-info-file option is passed.',
-      );
-      return errorExitCode;
-    }
-    if (args.wasParsed(quietOption) && !useResidentCompiler) {
-      log.stderr(
-        'Error: the --resident flag must be passed whenever the --quiet flag '
-        'is passed.',
-      );
-      return errorExitCode;
-    }
-
     DartExecutableWithPackageConfig executable;
     final hasExperiments = args.enabledExperiments.isNotEmpty;
     try {
@@ -539,8 +608,248 @@
     );
     return 0;
   }
+
+  static RemoteSourceKind? _remoteSourceKindFromArgument(String argument) {
+    if (argument.startsWith('git@')) {
+      return RemoteSourceKind.git;
+    }
+    final potentialUri =
+        argument.split(_colonButNoSlashes).first.split('@').first;
+    final endsWithDotGitRegex = RegExp(r'\.git[/\\]?$');
+    if (endsWithDotGitRegex.hasMatch(potentialUri)) {
+      return RemoteSourceKind.git;
+    }
+    final parsedUri = Uri.tryParse(potentialUri);
+    if (parsedUri != null) {
+      switch (parsedUri.scheme.toLowerCase()) {
+        case 'git':
+          return RemoteSourceKind.git;
+        case 'http':
+        case 'https':
+          return RemoteSourceKind.hosted;
+      }
+    }
+    final parsedGitSshUrl = GitSshUrl.tryParse(potentialUri);
+    if (parsedGitSshUrl != null) {
+      return RemoteSourceKind.git;
+    }
+
+    // Local execution.
+    return null;
+  }
+
+  static bool _isRemoteRun(String mainCommand) {
+    return _remoteSourceKindFromArgument(mainCommand) != null;
+  }
+
+  /// Parse the arguments for remote run.
+  ///
+  /// Constructs a [InstallCommandParsedArguments] to be able to reuse the
+  /// [InstallCommand] implementation.
+  InstallCommandParsedArguments _parseRemoteArguments(String mainCommand) {
+    final argResults = this.argResults!;
+
+    final sourceKind = _remoteSourceKindFromArgument(mainCommand)!;
+
+    final gitPath = argResults.option(gitPathOption);
+    var gitRef = argResults.option(gitRefOption);
+    if (sourceKind != RemoteSourceKind.git &&
+        (gitPath != null || gitRef != null)) {
+      usageException(
+        'Options `--$gitPathOption` and `--$gitRefOption` '
+        'can only be used with a git source.',
+      );
+    }
+
+    for (final option in argResults.options) {
+      if (argResults.wasParsed(option) &&
+          option != gitPathOption &&
+          option != gitRefOption &&
+          option != verbosityOption) {
+        usageException(
+          'Option $option cannot be used in remote runs. '
+          '`dart run <remote-executable>` uses `dart install` under the hood '
+          'and compiles the app into a standalone executable.',
+        );
+      }
+    }
+
+    String? hostedUrl;
+    String? versionConstraint;
+    final String source;
+    switch (sourceKind) {
+      case RemoteSourceKind.git:
+        if (mainCommand.startsWith('git@') && mainCommand.contains('.git')) {
+          // Valid values might contain a colon for the command or not:
+          // - git@github.com:org/repo.git
+          // - git@github.com:org/repo.git:executable
+          // Drop everything after the 2nd colon for the git repository.
+          source = mainCommand.split(':').sublist(0, 2).join(':');
+        } else {
+          source = mainCommand.split(_colonButNoSlashes).first;
+        }
+      case RemoteSourceKind.hosted:
+        final parsedUri = Uri.parse(
+            mainCommand.split('@').first.split(_colonButNoSlashes).first);
+        hostedUrl = '${parsedUri.scheme}://${parsedUri.host}';
+        source = parsedUri.path.replaceFirst('/', '');
+        versionConstraint = mainCommand
+                .split('@')
+                .lastButNotFirstOrNull
+                ?.split(_colonButNoSlashes)
+                .first ??
+            'any';
+      case RemoteSourceKind.path:
+        throw StateError('Unreachable');
+    }
+
+    return InstallCommandParsedArguments(
+      source: source,
+      sourceKind: sourceKind,
+      versionConstraint: versionConstraint,
+      gitPath: gitPath,
+      gitRef: gitRef,
+      hostedUrl: hostedUrl,
+      overwrite: false,
+    );
+  }
+
+  Future<String> _findPackageName(
+    InstallCommandParsedArguments parsedArgs,
+  ) async {
+    switch (parsedArgs.sourceKind) {
+      case RemoteSourceKind.git:
+        return await getPackageNameFromGitRepo(
+          parsedArgs.source,
+          ref: parsedArgs.gitRef,
+          path: parsedArgs.gitPath,
+          relativeTo: Directory.current.path,
+          tagPattern: null,
+        );
+      case RemoteSourceKind.hosted:
+        return parsedArgs.source;
+
+      case RemoteSourceKind.path:
+        throw StateError('Unreachable');
+    }
+  }
+
+  /// Installs (if needed) and runs the remote executable.
+  ///
+  /// Installs the app bundle at the same location as `dart install` but does
+  /// not symlink the executable.
+  Future<int> _runRemote(
+    ArgResults args,
+    String mainCommand,
+    List<String> runArgs,
+  ) async {
+    final parsedArgs = _parseRemoteArguments(mainCommand);
+    final packageName = await _findPackageName(parsedArgs);
+
+    return await InstallCommand.inTempDir((tempDirectory) async {
+      try {
+        // Create a helper package for running a pub-resolve and pulling in the
+        // wanted package and its dependencies.
+        final helperPackageDirectory =
+            Directory.fromUri(tempDirectory.uri.resolve('helperPackage/'));
+        helperPackageDirectory.createSync();
+        InstallCommand.createHelperPackagePubspec(
+          helperPackageDir: helperPackageDirectory,
+          packageName: packageName,
+          parsedArgs: parsedArgs,
+        );
+        await InstallCommand.resolveHelperPackage(helperPackageDirectory);
+        final helperPackageLockFile =
+            File.fromUri(helperPackageDirectory.uri.resolve('pubspec.lock'));
+
+        final appBundleDirectory = InstallCommand.selectAppBundleDirectory(
+          parsedArgs,
+          packageName,
+          helperPackageDirectory,
+          helperPackageLockFile,
+        );
+
+        // If the pubspec lock file changed, re-build the executable.
+        if (!appBundleDirectory
+            .pubspecLockIsIdenticalTo(helperPackageLockFile)) {
+          final helperPackageConfigFile = File.fromUri(helperPackageDirectory
+              .uri
+              .resolve('.dart_tool/package_config.json'));
+
+          final sourcePackageRootDirectory = Directory(Uri.parse(
+            PackageConfigFile.loadSync(helperPackageConfigFile)
+                .packages
+                .firstWhere((e) => e.name == packageName)
+                .rootUri,
+          ).toFilePath())
+              .ensureEndWithSeparator;
+
+          final sourcePackagePubspecFile = File.fromUri(
+              sourcePackageRootDirectory.uri.resolve('pubspec.yaml'));
+
+          final executables = InstallCommand.loadDeclaredExecutables(
+            sourcePackagePubspecFile,
+            sourcePackageRootDirectory,
+          );
+
+          final buildDirectory =
+              Directory.fromUri(tempDirectory.uri.resolve('build/'));
+          final verbosity = args.option('verbosity')!;
+          await InstallCommand.doBuild(
+            executables,
+            buildDirectory,
+            helperPackageConfigFile,
+            sourcePackagePubspecFile,
+            verbose,
+            verbosity,
+          );
+
+          await InstallCommand.createAppBundleDirectory(
+            appBundleDirectory,
+            buildDirectory,
+            helperPackageLockFile,
+            sourcePackagePubspecFile,
+          );
+        }
+
+        final mainCommandRemainder =
+            mainCommand.substring(parsedArgs.source.length);
+        final executable = mainCommandRemainder
+                .split(_colonButNoSlashes)
+                .lastButNotFirstOrNull ??
+            packageName;
+        final executableUri =
+            appBundleDirectory.directory.uri.resolve('bundle/bin/$executable');
+        final arguments = args.rest.skip(1).toList();
+
+        // The app-bundle contains executables (not AOT snapshots) to make it
+        // self-contained. So, spawn a process instead of loading a snapshot in
+        // the VM.
+        final process = await Process.start(
+          executableUri.toFilePath(),
+          arguments,
+          mode: ProcessStartMode.inheritStdio, // Enable using stdin etc.
+        );
+        return await process.exitCode;
+      } on InstallException catch (e) {
+        stderr.writeln(e.message);
+        return genericErrorExitCode;
+      }
+    });
+  }
 }
 
+extension<T> on List<T> {
+  /// Return the last element, but only if there are at least two elements.
+  T? get lastButNotFirstOrNull {
+    if (length < 2) return null;
+    return last;
+  }
+}
+
+/// Does not match the :// in an url scheme or the :\ in a Windows path.
+final _colonButNoSlashes = RegExp(r':(?!(//|\\))');
+
 /// Keep in sync with [getExecutableForCommand].
 ///
 /// Returns `null` if root package should be used.
diff --git a/pkg/dartdev/lib/src/install/file_system.dart b/pkg/dartdev/lib/src/install/file_system.dart
index 14f1b6d..0a40be6 100644
--- a/pkg/dartdev/lib/src/install/file_system.dart
+++ b/pkg/dartdev/lib/src/install/file_system.dart
@@ -297,6 +297,19 @@
   File get pubspec => File.fromUri(directory.uri.resolve('pubspec.yaml'));
 
   File get pubspecLock => File.fromUri(directory.uri.resolve('pubspec.lock'));
+
+  bool pubspecLockIsIdenticalTo(File otherLockFile) {
+    final pubspecLockStat = pubspecLock.statSync();
+    final otherLockFileStat = otherLockFile.statSync();
+    if (pubspecLockStat.type != FileSystemEntityType.file ||
+        otherLockFileStat.type != FileSystemEntityType.file) {
+      return false;
+    }
+    if (pubspecLockStat.size != otherLockFileStat.size) {
+      return false;
+    }
+    return pubspecLock.readAsStringSync() == otherLockFile.readAsStringSync();
+  }
 }
 
 /// An executable inside an [AppBundleDirectory].
diff --git a/pkg/dartdev/test/commands/compile_test.dart b/pkg/dartdev/test/commands/compile_test.dart
index f0176da..a35dac9c 100644
--- a/pkg/dartdev/test/commands/compile_test.dart
+++ b/pkg/dartdev/test/commands/compile_test.dart
@@ -450,6 +450,13 @@
     expect(File(outFile).existsSync(), true,
         reason: 'File not found: $outFile');
 
+    var magic = (await File(outFile).readAsBytes()).sublist(0, 4);
+    if (Platform.isMacOS) {
+      expect(magic, equals([0xCF, 0xFA, 0xED, 0xFE])); // Mach-O
+    } else {
+      expect(magic, equals([0x7F, 0x45, 0x4C, 0x46])); // ELF
+    }
+
     final Directory binDir = File(Platform.resolvedExecutable).parent;
     result = Process.runSync(
       path.join(binDir.path, 'dartaotruntime'),
diff --git a/pkg/dartdev/test/commands/help_test.dart b/pkg/dartdev/test/commands/help_test.dart
index a226f50..206ecf7 100644
--- a/pkg/dartdev/test/commands/help_test.dart
+++ b/pkg/dartdev/test/commands/help_test.dart
@@ -89,7 +89,7 @@
   compile               Compile Dart to various formats.
   create                Create a new Dart project.
   pub                   Work with packages.
-  run                   Run a Dart program.
+  run                   Run a Dart program from a file, a local package, or a remote package.
   test                  Run tests for a project.
 
 Source code
diff --git a/pkg/dartdev/test/commands/run_test.dart b/pkg/dartdev/test/commands/run_test.dart
index f338240..5c5ecba 100644
--- a/pkg/dartdev/test/commands/run_test.dart
+++ b/pkg/dartdev/test/commands/run_test.dart
@@ -104,12 +104,15 @@
     p = project();
     var result = await p.run(['run', '--help']);
 
-    expect(result.stdout, contains('Run a Dart program.'));
+    expect(
+        result.stdout,
+        contains(
+            'Run a Dart program from a file, a local package, or a remote package.'));
     expect(result.stdout, contains('Debugging options:'));
     expect(
       result.stdout,
       contains(
-        'Usage: dart run [arguments] [<dart-file|package-target> [args]]',
+        'Usage: dart [vm-options] run [arguments] [<dart-file>|<local-package>|<remote-executable> [args]]',
       ),
     );
     expect(result.stderr, isEmpty);
@@ -120,12 +123,15 @@
     p = project();
     var result = await p.run(['run', '--help', '--verbose']);
 
-    expect(result.stdout, contains('Run a Dart program.'));
+    expect(
+        result.stdout,
+        contains(
+            'Run a Dart program from a file, a local package, or a remote package.'));
     expect(result.stdout, contains('Debugging options:'));
     expect(
       result.stdout,
       contains(
-        'Usage: dart [vm-options] run [arguments] [<dart-file|package-target> [args]]',
+        'Usage: dart [vm-options] run [arguments] [<dart-file>|<local-package>|<remote-executable> [args]]',
       ),
     );
     expect(result.stderr, isEmpty);
@@ -957,6 +963,33 @@
     });
   });
 
+  test('resident compiler invocation has working resolvePackageUri', () async {
+    p = project(name: 'foo');
+    p.file('pubspec.yaml', '''
+name: foo
+environment:
+  sdk: '>=2.12.0<3.0.0'
+
+dependencies:
+  path: ^1.9.0
+''');
+    p.file('bin/main.dart', r'''
+import 'dart:isolate';
+Future<void> main() async {
+  print(await Isolate.resolvePackageUri(Uri.parse('package:path/')));
+}
+''');
+
+    ProcessResult pubGetResult = await p.run(['pub', 'get']);
+    expect(pubGetResult.stderr, isEmpty);
+    expect(pubGetResult.exitCode, 0);
+
+    ProcessResult result = await p.run(['run', '--resident', 'bin/main.dart']);
+
+    expect(result.stdout, contains('file://'));
+    expect(result.exitCode, 0);
+  });
+
   test(
       'passing --resident is a prerequisite for passing --resident-compiler-info-file',
       () async {
diff --git a/pkg/dartdev/test/data/dart_app/bin/dart_app.dart b/pkg/dartdev/test/data/dart_app/bin/dart_app.dart
index 1e8f211..266298b 100644
--- a/pkg/dartdev/test/data/dart_app/bin/dart_app.dart
+++ b/pkg/dartdev/test/data/dart_app/bin/dart_app.dart
@@ -1,3 +1,7 @@
-void main() {
-  print('Hello world');
+void main(List<String> args) {
+  if (args.isEmpty) {
+    print('Hello world');
+  } else {
+    print('Hello ${args.join(' ')}');
+  }
 }
diff --git a/pkg/dartdev/test/native_assets/compile_test.dart b/pkg/dartdev/test/native_assets/compile_test.dart
index ccfb145..7fd1cd6 100644
--- a/pkg/dartdev/test/native_assets/compile_test.dart
+++ b/pkg/dartdev/test/native_assets/compile_test.dart
@@ -4,6 +4,8 @@
 
 // @dart=2.18
 
+import 'dart:io';
+
 import 'package:test/test.dart';
 
 import '../utils.dart';
@@ -35,4 +37,138 @@
       expect(result.exitCode, 255);
     });
   });
+
+  test('Golden test for recorded usages in dart2js', timeout: longTimeout,
+      () async {
+    await recordUseTest('drop_data_asset', (dartAppUri) async {
+      await runDart(
+        arguments: ['pub', 'get'],
+        workingDirectory: dartAppUri,
+        logger: logger,
+        expectExitCodeZero: true,
+      );
+      // Now try using the add symbol only, so the multiply library is
+      // tree-shaken.
+
+      await runDart(
+        arguments: [
+          'compile',
+          'js',
+          '--write-resources',
+          'bin/drop_data_asset_calls.dart',
+        ],
+        workingDirectory: dartAppUri,
+        logger: logger,
+        expectExitCodeZero: true,
+      );
+
+      // The build directory exists
+      final recordedUsages =
+          File.fromUri(dartAppUri.resolve('out.js.resources.json'));
+      expect(recordedUsages.existsSync(), true);
+
+      final actualRecordedUsages = recordedUsages.readAsStringSync();
+      final expectedRecordedUsages = '''{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  },
+  "constants": [
+    {
+      "type": "int",
+      "value": 3
+    },
+    {
+      "type": "int",
+      "value": 4
+    }
+  ],
+  "locations": [
+    {
+      "uri": "bin/drop_data_asset_calls.dart"
+    }
+  ],
+  "recordings": [
+    {
+      "definition": {
+        "identifier": {
+          "uri": "package:drop_data_asset/src/drop_data_asset.dart",
+          "scope": "MyMath",
+          "name": "add"
+        }
+      },
+      "calls": [
+        {
+          "type": "with_arguments",
+          "positional": [
+            0,
+            1
+          ],
+          "loading_unit": "out.js",
+          "@": 0
+        }
+      ]
+    }
+  ]
+}''';
+      expect(actualRecordedUsages, expectedRecordedUsages);
+    });
+  });
+
+  test('Golden test for recorded usages in dart2js - no instance support yet',
+      timeout: longTimeout, () async {
+    await recordUseTest('drop_data_asset', (dartAppUri) async {
+      await runDart(
+        arguments: ['pub', 'get'],
+        workingDirectory: dartAppUri,
+        logger: logger,
+        expectExitCodeZero: true,
+      );
+      // Now try using the add symbol only, so the multiply library is
+      // tree-shaken.
+      await runDart(
+        arguments: [
+          'compile',
+          'js',
+          '--write-resources',
+          'bin/drop_data_asset_instances.dart',
+        ],
+        workingDirectory: dartAppUri,
+        logger: logger,
+        expectExitCodeZero: true,
+      );
+
+      // The build directory exists
+      final recordedUsages =
+          File.fromUri(dartAppUri.resolve('out.js.resources.json'));
+      expect(recordedUsages.existsSync(), true);
+
+      final actualRecordedUsages = recordedUsages.readAsStringSync();
+      final expectedRecordedUsages = '''{
+  "metadata": {
+    "comment": "Resources referenced by annotated resource identifiers",
+    "AppTag": "TBD",
+    "environment": {
+      "dart.web.assertions_enabled": "false",
+      "dart.tool.dart2js": "true",
+      "dart.tool.dart2js.minify": "false",
+      "dart.tool.dart2js.disable_rti_optimization": "false",
+      "dart.tool.dart2js.primitives:trust": "false",
+      "dart.tool.dart2js.types:trust": "false"
+    },
+    "version": "0.4.0"
+  }
+}''';
+      expect(actualRecordedUsages, expectedRecordedUsages);
+    });
+  });
 }
diff --git a/pkg/dartdev/test/native_assets/helpers.dart b/pkg/dartdev/test/native_assets/helpers.dart
index 09af963..6256912 100644
--- a/pkg/dartdev/test/native_assets/helpers.dart
+++ b/pkg/dartdev/test/native_assets/helpers.dart
@@ -114,7 +114,8 @@
       'code_assets',
       'data_assets',
       'hooks',
-      'native_toolchain_c'
+      'native_toolchain_c',
+      'record_use',
     ])
       package: {
         'path': sdkRoot
@@ -124,9 +125,6 @@
     'meta': {
       'path': sdkRoot.resolve('pkg/meta/').toFilePath(),
     },
-    'record_use': {
-      'path': sdkRoot.resolve('pkg/record_use/').toFilePath(),
-    },
   };
   final userDefinesWorkspace = {};
   for (final pubspecPath in pubspecPaths) {
@@ -284,8 +282,8 @@
     await runPackageTest(
       packageUnderTest,
       fun,
-      const ['drop_dylib_recording'],
-      sdkRootUri.resolve('pkg/record_use/'),
+      const ['drop_dylib_recording', 'drop_data_asset'],
+      sdkRootUri.resolve('third_party/pkg/native/pkgs/record_use/'),
       sdkRootUri,
       false,
     );
diff --git a/pkg/dartdev/test/native_assets/install_test.dart b/pkg/dartdev/test/native_assets/install_test.dart
index 3ef4d5e..267ff89 100644
--- a/pkg/dartdev/test/native_assets/install_test.dart
+++ b/pkg/dartdev/test/native_assets/install_test.dart
@@ -201,8 +201,9 @@
           workingDirectory,
           environment,
         );
-        expect(installResult.stdout, contains('Running build hooks'));
-        expect(installResult.stdout, contains('Running link hooks'));
+        // No hooks.
+        expect(installResult.stdout, isNot(contains('Running build hooks')));
+        expect(installResult.stdout, isNot(contains('Running link hooks')));
 
         await _runToolForTest(environment);
 
@@ -427,7 +428,7 @@
         expect(pubspecNew, isNot(equals(pubspecOld)));
         pubspecFile.writeAsStringSync(pubspecNew);
 
-        await _runDartdev(
+        final installResult = await _runDartdev(
           fromDartdevSource,
           'install',
           [dartAppUri.toFilePath()],
@@ -435,6 +436,9 @@
           environment,
         );
 
+        expect(installResult.stdout, contains('Running build hooks'));
+        expect(installResult.stdout, contains('Running link hooks'));
+
         for (final (tool, someInt) in [
           ('dart_app', 5),
           ('dart_app_copy', 42)
diff --git a/pkg/dartdev/test/native_assets/run_remote_test.dart b/pkg/dartdev/test/native_assets/run_remote_test.dart
new file mode 100644
index 0000000..ebc8077
--- /dev/null
+++ b/pkg/dartdev/test/native_assets/run_remote_test.dart
@@ -0,0 +1,545 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:pub_formats/pub_formats.dart';
+import 'package:test/test.dart';
+
+import '../utils.dart';
+import 'helpers.dart';
+
+const _packageForTest = 'vm_snapshot_analysis';
+const _packageVersion = '0.7.5';
+const _cliToolForTest = 'snapshot_analysis';
+
+final _sdkUri = resolveDartDevUri('.').resolve('../../');
+
+final _package2RelativePath = Uri.directory('pkg/dartdev/test/data/dart_app/');
+
+final _package2Dir = Directory.fromUri(
+  _sdkUri.resolveUri(_package2RelativePath),
+);
+
+const _gitPackageForTest = 'dart_app';
+
+final _pathEnvVarSeparator = Platform.isWindows ? ';' : ':';
+
+const String _dartDirectoryEnvKey = 'DART_DATA_HOME';
+
+// Set to true for debugging dartdev from the test.
+const fromDartdevSource = false;
+
+void main() async {
+  if (!nativeAssetsExperimentAvailableOnCurrentChannel) {
+    return;
+  }
+
+  final errorExitCode = fromDartdevSource
+      ? /* Dartdev doesn't exit the process, it sends a message to the VM.*/ 0
+      : 255;
+  final usageExitCode = fromDartdevSource
+      ? /* Dartdev doesn't exit the process, it sends a message to the VM.*/ 0
+      : 64;
+
+  test('dart run --help', timeout: longTimeout, () async {
+    final result = await _runDartdev(
+      fromDartdevSource,
+      'run',
+      ['--help'],
+      null,
+      {},
+    );
+    expect(
+      result.stdout,
+      stringContainsInOrder(
+        [
+          '''Run a Dart program from a file, a local package, or a remote package.
+
+Usage: dart [vm-options] run [arguments] [<dart-file>|<local-package>|<remote-executable> [args]]
+''',
+          '''
+<remote-executable>
+  An executable from a remote package. This can be from a hosted package server
+  (like pub.dev) or a git repository.
+
+  When running a remote executable, all other command-line flags are disabled,
+  except for the options for remote executables. `dart run <remote-executable>`
+  uses `dart install` under the hood and compiles the app into a standalone
+  executable, preventing passing VM options.
+
+  From a hosted package server:
+    <hosted-url>/<package>[@<version>][:<executable>]
+
+    Downloads the package from a hosted package server and runs the specified
+    executable.
+    If a version is provided, the specified version is downloaded.
+    If an executable is not specified, the package name is used.
+    For example, `https://pub.dev/dcli@1.0.0:dcli_complete` runs the
+    `dcli_complete` executable from version 1.0.0 of the `dcli` package.
+
+  From a git repository:
+    <git-url>[:<executable>]
+
+    Clones the git repository and runs the specified executable from it.
+    If an executable is not specified, the package name from the cloned
+    repository's pubspec.yaml is used.
+    The git url can be any valid git url.
+''',
+          '''
+Options for remote executables:
+    --git-path                               Path of git package in repository. Only applies when using a git url for <remote-executable>.
+    --git-ref                                Git branch or commit to be retrieved. Only applies when using a git url for <remote-executable>.
+'''
+        ],
+      ),
+    );
+  });
+
+  for (final withVersion in [false, true]) {
+    test('dart run hosted package${withVersion ? ' with version' : ''}',
+        timeout: longTimeout, () async {
+      await inTempDir((tempUri) async {
+        final dartDataHome = tempUri.resolve('dart_home/');
+        await Directory.fromUri(dartDataHome).create();
+        final binDir = Directory.fromUri(dartDataHome.resolve('install/bin'));
+
+        final environment = <String, String>{
+          _dartDirectoryEnvKey: dartDataHome.toFilePath(),
+          'PATH':
+              '${binDir.path}$_pathEnvVarSeparator${Platform.environment['PATH']!}',
+        };
+
+        var version = withVersion ? '@$_packageVersion' : '';
+        final runResult = await _runDartdev(
+          fromDartdevSource,
+          'run',
+          [
+            'https://pub.dev/$_packageForTest$version:$_cliToolForTest',
+            // Make sure to pass arguments that influence stdout.
+            'compare',
+            '--help',
+          ],
+          null,
+          environment,
+        );
+        expect(
+          runResult.stdout,
+          stringContainsInOrder([
+            'Usage: snapshot_analysis compare <old.json> <new.json>',
+          ]),
+        );
+        expect(runResult.exitCode, 0);
+      });
+    });
+  }
+
+  final argumentssGit = [
+    ['git'],
+    [
+      'git',
+      '--git-path',
+      '--git-ref',
+    ],
+  ];
+
+  for (final testArguments in argumentssGit) {
+    var testName = testArguments.join(' ');
+
+    test('dart run from $testName', timeout: longTimeout, () async {
+      await inTempDir((tempUri) async {
+        final (gitUri, gitRef) = await _setupSimpleGitRepo(tempUri);
+        final gitPath = './';
+        final arguments = [
+          if (testArguments.contains('--git-path')) ...[
+            '--git-path',
+            gitPath,
+          ],
+          if (testArguments.contains('--git-ref')) ...[
+            '--git-ref',
+            gitRef,
+          ],
+          '${gitUri.toFilePath()}:$_gitPackageForTest',
+          // Make sure to pass arguments that influence stdout.
+          'Alice',
+          'and',
+          'Bob'
+        ];
+
+        final dartDataHome = tempUri.resolve('dart_home/');
+        await Directory.fromUri(dartDataHome).create();
+        final binDir = Directory.fromUri(dartDataHome.resolve('install/bin'));
+
+        final environment = {
+          _dartDirectoryEnvKey: dartDataHome.toFilePath(),
+          'PATH':
+              '${binDir.path}$_pathEnvVarSeparator${Platform.environment['PATH']!}',
+        };
+
+        final runResult = await _runDartdev(
+          fromDartdevSource,
+          'run',
+          arguments,
+          null,
+          environment,
+        );
+
+        expect(
+          runResult.stdout,
+          stringContainsInOrder([
+            'Hello Alice and Bob',
+          ]),
+        );
+        expect(runResult.exitCode, 0);
+      });
+    });
+  }
+
+  final errorArgumentss = [
+    (
+      ['https://pub.dev/this_package_does_not_exist_12345'],
+      'could not find package this_package_does_not_exist_12345 at',
+      errorExitCode,
+    ),
+    (
+      ['--git-path', 'foo/', 'https://pub.dev/vm_snapshot_analysis'],
+      'git-path',
+      usageExitCode,
+    ),
+    (
+      ['--enable-asserts', 'https://pub.dev/vm_snapshot_analysis'],
+      'enable-asserts',
+      usageExitCode,
+    ),
+    (
+      ['--git-path', 'foo/'],
+      'git-path',
+      usageExitCode,
+    ),
+  ];
+  for (final (errorArguments, error, exitCode) in errorArgumentss) {
+    test('dart run ${errorArguments.join(' ')}', timeout: longTimeout,
+        () async {
+      await inTempDir((tempUri) async {
+        final dartDataHome = tempUri.resolve('dart_home/');
+        await Directory.fromUri(dartDataHome).create();
+        final binDir = Directory.fromUri(dartDataHome.resolve('install/bin'));
+
+        final environment = <String, String>{
+          _dartDirectoryEnvKey: dartDataHome.toFilePath(),
+          'PATH':
+              '${binDir.path}$_pathEnvVarSeparator${Platform.environment['PATH']!}',
+        };
+
+        final runResult = await _runDartdev(
+          fromDartdevSource,
+          'run',
+          errorArguments,
+          null,
+          environment,
+          expectedExitCode: exitCode,
+        );
+        expect(
+          runResult.stderr,
+          contains(error),
+        );
+      });
+    });
+  }
+
+  test('dart run error from git with build hook failure', timeout: longTimeout,
+      () async {
+    await inTempDir((tempUri) async {
+      final dartDataHome = tempUri.resolve('dart_home/');
+      await Directory.fromUri(dartDataHome).create();
+      final binDir = Directory.fromUri(dartDataHome.resolve('install/bin'));
+
+      final environment = {
+        _dartDirectoryEnvKey: dartDataHome.toFilePath(),
+        'PATH':
+            '${binDir.path}$_pathEnvVarSeparator${Platform.environment['PATH']!}',
+      };
+
+      const packageName = 'test_app_with_failing_hook';
+      final (gitUri, _) = await _setupGitRepo(
+        tempUri,
+        repoName: '$packageName.git',
+        files: {
+          'pubspec.yaml': jsonEncode(PubspecYamlFileSyntax(
+            name: packageName,
+            environment: EnvironmentSyntax(
+              sdk: '^${Platform.version.split(' ').first}',
+            ),
+            executables: {
+              packageName: packageName,
+            },
+          ).json),
+          'bin/$packageName.dart': '''
+void main(List<String> args) {
+  print('This should not be printed.');
+}
+''',
+          'hook/build.dart': '''
+void main(List<String> args) async {
+  throw Exception('This build hook is designed to fail.');
+}
+''',
+        },
+      );
+
+      final runResult = await _runDartdev(
+        fromDartdevSource,
+        'run',
+        ['${gitUri.toFilePath()}:$packageName'],
+        null,
+        environment,
+        expectedExitCode: errorExitCode,
+      );
+
+      expect(
+          runResult.stderr, contains('This build hook is designed to fail.'));
+      expect(runResult.stdout, isNot(contains('This should not be printed.')));
+    });
+  });
+
+  test('dart run caches git package', timeout: longTimeout, () async {
+    await inTempDir((tempUri) async {
+      final (gitUri, gitRef) = await _setupSimpleGitRepo(tempUri);
+
+      final arguments = [
+        '--git-ref',
+        gitRef,
+        '${gitUri.toFilePath()}:$_gitPackageForTest',
+        'World',
+      ];
+
+      // 2. Setup environment
+      final dartDataHome = tempUri.resolve('dart_home/');
+      await Directory.fromUri(dartDataHome).create();
+      final binDir = Directory.fromUri(dartDataHome.resolve('install/bin'));
+      final environment = {
+        _dartDirectoryEnvKey: dartDataHome.toFilePath(),
+        'PATH':
+            '${binDir.path}$_pathEnvVarSeparator${Platform.environment['PATH']!}',
+      };
+
+      // 3. First run - should build
+      final firstRunResult = await _runDartdev(
+        fromDartdevSource,
+        'run',
+        arguments,
+        null,
+        environment,
+      );
+
+      expect(firstRunResult.stdout, contains('Hello World'));
+      expect(firstRunResult.exitCode, 0);
+      expect(firstRunResult.stdout, contains('Generated: '));
+      // No hooks.
+      expect(firstRunResult.stdout, isNot(contains('Running build hooks')));
+      expect(firstRunResult.stdout, isNot(contains('Running link hooks')));
+
+      // 4. Second run - should be cached
+      final secondRunResult = await _runDartdev(
+        fromDartdevSource,
+        'run',
+        arguments,
+        null,
+        environment,
+      );
+
+      expect(secondRunResult.stdout, contains('Hello World'));
+      expect(secondRunResult.exitCode, 0);
+      expect(secondRunResult.stdout, isNot(contains('Generated: ')));
+    });
+  });
+
+  for (final verbosityError in [true, false]) {
+    final testName = verbosityError ? ' --verbosity=error' : '';
+    test('dart run from git with build hook$testName', timeout: longTimeout,
+        () async {
+      await inTempDir((tempUri) async {
+        const packageName = 'test_app_with_hook';
+        final (gitUri, gitRef) = await _setupGitRepoWithHook(
+          tempUri,
+          packageName: packageName,
+        );
+
+        final arguments = [
+          if (verbosityError) '--verbosity=error',
+          '--git-ref',
+          gitRef,
+          '${gitUri.toFilePath()}:$packageName',
+          'ignored',
+          'arguments',
+        ];
+
+        final dartDataHome = tempUri.resolve('dart_home/');
+        await Directory.fromUri(dartDataHome).create();
+        final binDir = Directory.fromUri(dartDataHome.resolve('install/bin'));
+
+        final environment = {
+          _dartDirectoryEnvKey: dartDataHome.toFilePath(),
+          'PATH':
+              '${binDir.path}$_pathEnvVarSeparator${Platform.environment['PATH']!}',
+        };
+
+        print(environment);
+        print('dart run ${arguments.join(' ')}');
+        final runResult = await _runDartdev(
+          fromDartdevSource,
+          'run',
+          arguments,
+          null,
+          environment,
+        );
+
+        expect(runResult.stdout, contains('Hello World'));
+        expect(runResult.exitCode, 0);
+        if (verbosityError) {
+          expect(runResult.stdout, isNot(contains('Running build hooks')));
+          expect(runResult.stdout, isNot(contains('Running link hooks')));
+          expect(runResult.stdout, isNot(contains('Generated: ')));
+          // Should have no other output then the program.
+          expect(runResult.stdout.trim(), equals('Hello World'));
+        } else {
+          expect(runResult.stdout, contains('Running build hooks'));
+          expect(runResult.stdout, contains('Running link hooks'));
+          expect(runResult.stdout, contains('Generated: '));
+        }
+      });
+    });
+  }
+}
+
+Future<(Uri gitUri, String gitRef)> _setupGitRepo(
+  Uri tempUri, {
+  String repoName = 'app.git',
+  required Map<String, String> files,
+}) async {
+  final gitUri = tempUri.resolve('$repoName/');
+  for (final entry in files.entries) {
+    final file = File.fromUri(gitUri.resolve(entry.key));
+    await file.create(recursive: true);
+    await file.writeAsString(entry.value);
+  }
+
+  for (final commands in [
+    ['init'],
+    ['add', '.'],
+    ['commit', '-m', '"Initial commit"'],
+  ]) {
+    final gitResult = await Process.run(
+      'git',
+      commands,
+      workingDirectory: gitUri.toFilePath(),
+    );
+    if (gitResult.exitCode != 0) {
+      throw ProcessException(
+        'git',
+        commands,
+        gitResult.stderr,
+      );
+    }
+  }
+  final gitRef = ((await Process.run(
+    'git',
+    ['rev-parse', 'HEAD'],
+    workingDirectory: gitUri.toFilePath(),
+  ))
+          .stdout as String)
+      .trim();
+  return (gitUri, gitRef);
+}
+
+Future<(Uri gitUri, String gitRef)> _setupGitRepoWithHook(
+  Uri tempUri, {
+  String packageName = 'test_app_with_hook',
+}) async {
+  return await _setupGitRepo(
+    tempUri,
+    repoName: '$packageName.git',
+    files: {
+      'pubspec.yaml': jsonEncode(PubspecYamlFileSyntax(
+        name: packageName,
+        environment: EnvironmentSyntax(
+          sdk: '^3.8.0',
+        ),
+        executables: {
+          packageName: null,
+        },
+        dependencies: {
+          // Git dependencies can't have path dependencies outside the git repo
+          // so use a published dependency.
+          'hooks': HostedDependencySourceSyntax(
+            version: '^1.0.0',
+          ),
+        },
+      ).json),
+      'bin/$packageName.dart': '''
+void main(List<String> args) {
+  print('Hello World');
+}
+''',
+      'hook/build.dart': '''
+import 'package:hooks/hooks.dart';
+
+void main(List<String> args) async {
+  await build(args, (input, output) async {
+    // Succeeds.
+  });
+}
+''',
+      'hook/link.dart': '''
+import 'package:hooks/hooks.dart';
+
+void main(List<String> args) async {
+  await link(args, (input, output) async {
+    // Succeeds.
+  });
+}
+''',
+    },
+  );
+}
+
+Future<(Uri gitUri, String gitRef)> _setupSimpleGitRepo(Uri tempUri) async {
+  return await _setupGitRepo(
+    tempUri,
+    files: {
+      'pubspec.yaml':
+          await File.fromUri(_package2Dir.uri.resolve('pubspec.yaml'))
+              .readAsString(),
+      'bin/dart_app.dart':
+          await File.fromUri(_package2Dir.uri.resolve('bin/dart_app.dart'))
+              .readAsString(),
+    },
+  );
+}
+
+final _dartDevEntryScriptUri = resolveDartDevUri('bin/dartdev.dart');
+
+Future<RunProcessResult> _runDartdev(
+  bool fromDartdevSource,
+  String command,
+  List<String> arguments,
+  Uri? workingDirectory,
+  Map<String, String> environment, {
+  int expectedExitCode = 0,
+}) async {
+  final installResult = await runDart(
+    arguments: [
+      if (fromDartdevSource) _dartDevEntryScriptUri.toFilePath(),
+      command,
+      ...arguments,
+    ],
+    workingDirectory: workingDirectory,
+    logger: logger,
+    environment: environment,
+    expectExitCodeZero: false,
+  );
+  expect(installResult.exitCode, equals(expectedExitCode));
+  return installResult;
+}
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index b804084..b8da1eb 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -306,6 +306,9 @@
   }
 }
 
+/// Deletes [dir] with some retries to reduce the chances of file locking errors
+/// on Windows where files may fail to delete for a short period after the
+/// process that locked them terminates.
 Future<void> deleteDirectory(Directory dir) async {
   int deleteAttempts = 5;
   while (deleteAttempts >= 0) {
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index 32cc8aa..733ff3e 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,6 +1,8 @@
 # 5.2.0-wip
 
 - [DAP] `Stopped(reason: 'entry')` events will no longer be lost if an isolate has not yet reached the `PauseStart` state when connecting to the VM.
+- **Breaking change:** [DAP] Support for the custom `supportsDartUris` client capability and `dart-macro+file:///` mappings that supported the Dart macros experiment have been removed.
+- [DAP] `evaluateName` will now be correctly set on child variables of variables in the `Globals` scope.
 
 # 5.1.0
 - Update to version 2.1 of the DDS protocol.
diff --git a/pkg/dds/lib/src/dap/adapters/dart.dart b/pkg/dds/lib/src/dap/adapters/dart.dart
index 2a7b2ca..0b71257 100644
--- a/pkg/dds/lib/src/dap/adapters/dart.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart.dart
@@ -1240,7 +1240,7 @@
 
     // Ensure that we stop watching for a VM Service info file if we are using
     // these utils.
-    if (this case VmServiceInfoFileUtils vmServiceUtils) {
+    if (this case final VmServiceInfoFileUtils vmServiceUtils) {
       vmServiceUtils.stopWaitingForVmServiceInfoFile();
     }
 
@@ -1319,32 +1319,29 @@
       return false;
     }
 
-    final packageFileLikeUri = await thread.resolveUriToPackageLibPath(uri);
-    if (packageFileLikeUri == null) {
+    final packageFileUri = await thread.resolveUriToPackageLibPath(uri);
+    if (packageFileUri == null) {
       return false;
     }
 
-    return !isInUserProject(packageFileLikeUri);
+    return !isInUserProject(packageFileUri);
   }
 
-  /// Checks whether [uri] is inside the users project. This is used to support
-  /// debugging "Just My Code" (via [isExternalPackageLibrary]) and also for
-  /// stack trace highlighting, where non-user code will be faded.
+  /// Checks whether [targetUri] is inside the users project. This is used to
+  /// support debugging "Just My Code" (via [isExternalPackageLibrary]) and also
+  /// for stack trace highlighting, where non-user code will be faded.
   bool isInUserProject(Uri targetUri) {
-    if (!isSupportedFileScheme(targetUri)) {
+    if (!targetUri.isScheme('file')) {
       return false;
     }
 
-    // We could already be 'file', or we could be another supported file scheme
-    // like dart-macro+file, but we can only call toFilePath() on a file URI
-    // and we use the equivalent path to decide if this is within the workspace.
-    var targetPath = targetUri.replace(scheme: 'file').toFilePath();
-
-    // Always compare paths case-insensitively to avoid any issues where APIs
-    // may have returned different casing (e.g. Windows drive letters). It's
-    // almost certain a user wouldn't have a "local" package and an "external"
-    // package with paths differing only be case.
-    targetPath = targetPath.toLowerCase();
+    final targetPath = targetUri
+        .toFilePath()
+        // Always compare paths case-insensitively to avoid any issues where APIs
+        // may have returned different casing (e.g. Windows drive letters). It's
+        // almost certain a user wouldn't have a "local" package and an "external"
+        // package with paths differing only be case.
+        .toLowerCase();
 
     return projectPaths
         .map((projectPath) => projectPath.toLowerCase())
@@ -1602,9 +1599,7 @@
 
     final path = args.source.path;
     final name = args.source.name;
-    final uri = path != null
-        ? normalizeUri(fromClientPathOrUri(path)).toString()
-        : name!;
+    final uri = path != null ? normalizeUri(Uri.file(path)).toString() : name!;
 
     // Use a completer to track when the response is sent, so any events related
     // to these breakpoints are not sent before the client has the IDs.
@@ -1681,7 +1676,7 @@
   }
 
   /// Converts a URI in the form org-dartlang-sdk:///sdk/lib/collection/hash_set.dart
-  /// to a local file-like URI based on the current SDK.
+  /// to a local file URI based on the current SDK.
   Uri? convertOrgDartlangSdkToPath(Uri uri) {
     // org-dartlang-sdk URIs can be in multiple forms:
     //
@@ -2060,9 +2055,19 @@
         data.kind == FrameScopeDataKind.globals) {
       /// Helper to simplify calling converter.
       Future<Variable> convert(int index, vm.FieldRef fieldRef) async {
-        return _converter.convertFieldRefToVariable(
+        final response = await thread.getObject(fieldRef);
+        // Store the name of this field as we may need it to
+        // compute evaluateNames for child objects later.
+        final value = response is vm.Field ? response.staticValue : response;
+        if (value is vm.InstanceRef) {
+          storeEvaluateName(value, fieldRef.name);
+        }
+
+        return _converter.convertVmResponseToVariable(
           thread,
-          fieldRef,
+          value,
+          name: fieldRef.name,
+          evaluateName: fieldRef.name,
           allowCallingToString:
               evaluateToStringInDebugViews && index < maxToStringsPerEvaluation,
           format: format,
@@ -2340,14 +2345,14 @@
     final framePaths = await Future.wait(frameLocations.map((frame) async {
       final uri = frame?.uri;
       if (uri == null) return null;
-      if (isSupportedFileScheme(uri)) {
+      if (uri.isScheme('file')) {
         return (uri: uri, isUserCode: isInUserProject(uri));
       }
       if (thread == null || !isResolvableUri(uri)) return null;
       try {
-        final fileLikeUri = await thread.resolveUriToPath(uri);
-        return fileLikeUri != null
-            ? (uri: fileLikeUri, isUserCode: isInUserProject(fileLikeUri))
+        final fileUri = await thread.resolveUriToPath(uri);
+        return fileUri != null
+            ? (uri: fileUri, isUserCode: isInUserProject(fileUri))
             : null;
       } catch (e, s) {
         // Swallow errors for the same reason noted above.
@@ -2363,8 +2368,8 @@
       final uri = frameLocation?.uri;
       final framePathInfo = framePaths[i];
 
-      // A file-like URI ('file://' or 'dart-macro+file://').
-      final fileLikeUri = framePathInfo?.uri;
+      // A file URI.
+      final fileUri = framePathInfo?.uri;
 
       // Default to true so that if we don't know whether this is user-project
       // then we leave the formatting as-is and don't fade anything out.
@@ -2372,7 +2377,7 @@
 
       // For the name, we usually use the package URI, but if we only had a file
       // URI to begin with, try to make it relative to cwd so it's not so long.
-      final name = uri != null && fileLikeUri != null
+      final name = uri != null && fileUri != null
           ? (uri.isScheme('file')
               ? _converter.convertToRelativePath(uri.toFilePath())
               : uri.toString())
@@ -2397,8 +2402,7 @@
         continue;
       }
 
-      final clientPath =
-          fileLikeUri != null ? toClientPathOrUri(fileLikeUri) : null;
+      final clientPath = fileUri != null ? toClientPathOrUri(fileUri) : null;
       events.add(
         OutputEventBody(
           category: category,
@@ -2645,19 +2649,19 @@
       return;
     }
 
-    // Doesn't need resolving if already file-like.
-    if (isSupportedFileScheme(uri)) {
+    // Doesn't need resolving if already file.
+    if (uri.isScheme('file')) {
       return;
     }
 
-    final fileLikeUri = await thread.resolveUriToPath(uri);
-    if (fileLikeUri != null) {
+    final fileUri = await thread.resolveUriToPath(uri);
+    if (fileUri != null) {
       // Convert:
       //   uri -> resolvedUri
       //   fileUri -> resolvedFileUri
       final resolvedFieldName =
           'resolved${field.substring(0, 1).toUpperCase()}${field.substring(1)}';
-      data[resolvedFieldName] = fileLikeUri.toString();
+      data[resolvedFieldName] = fileUri.toString();
     }
   }
 
@@ -2888,47 +2892,18 @@
     }
   }
 
-  /// Whether the current client supports URIs in place of file paths, including
-  /// file-like URIs that are not the 'file' scheme (such as 'dart-macro+file').
-  bool get clientSupportsUri => _initializeArgs?.supportsDartUris ?? false;
-
-  /// Returns whether [uri] is a file-like URI scheme that is supported by the
-  /// client.
-  ///
-  /// Returning `true` here does not guarantee that the client supports URIs,
-  /// the caller should also check [clientSupportsUri].
-  bool isSupportedFileScheme(Uri uri) {
-    return uri.isScheme('file') ||
-        // Handle all file-like schemes that end '+file' like
-        // 'dart-macro+file://'.
-        (clientSupportsUri && uri.scheme.endsWith('+file'));
-  }
-
   /// Converts a URI into a form that can be used by the client.
   ///
-  /// If the client supports URIs (like VS Code), it will be returned unchanged
-  /// but otherwise it will be the `toFilePath()` equivalent if a 'file://' URI
-  /// and otherwise `null`.
+  /// Returns `null` if the uri is not a supported file scheme.
   String? toClientPathOrUri(Uri? uri) {
     if (uri == null) {
       return null;
-    } else if (clientSupportsUri) {
-      return uri.toString();
     } else if (uri.isScheme('file')) {
       return uri.toFilePath();
     } else {
       return null;
     }
   }
-
-  /// Converts a String used by the client as a path/URI into a [Uri].
-  Uri fromClientPathOrUri(String filePathOrUriString) {
-    var uri = Uri.tryParse(filePathOrUriString);
-    if (uri == null || !isSupportedFileScheme(uri)) {
-      uri = Uri.file(filePathOrUriString);
-    }
-    return uri;
-  }
 }
 
 /// An implementation of [LaunchRequestArguments] that includes all fields used
diff --git a/pkg/dds/lib/src/dap/adapters/mixins.dart b/pkg/dds/lib/src/dap/adapters/mixins.dart
index 1aa1c2c..7982b27 100644
--- a/pkg/dds/lib/src/dap/adapters/mixins.dart
+++ b/pkg/dds/lib/src/dap/adapters/mixins.dart
@@ -260,13 +260,6 @@
       final filePath = uri.toFilePath();
       final normalizedPath = normalizePath(filePath);
       return Uri.file(normalizedPath);
-    } else if (uri.scheme.endsWith('+file')) {
-      // For virtual file schemes, we need to replace the scheme to use
-      // toFilePath() so we can normalise the path, then convert back.
-      final originalScheme = uri.scheme;
-      final filePath = uri.replace(scheme: 'file').toFilePath();
-      final normalizedPath = normalizePath(filePath);
-      return Uri.file(normalizedPath).replace(scheme: originalScheme);
     } else {
       return uri;
     }
diff --git a/pkg/dds/lib/src/dap/isolate_manager.dart b/pkg/dds/lib/src/dap/isolate_manager.dart
index aad6681..12fc105 100644
--- a/pkg/dds/lib/src/dap/isolate_manager.dart
+++ b/pkg/dds/lib/src/dap/isolate_manager.dart
@@ -922,7 +922,7 @@
     var userMessage = error is vm.RPCError
         ? error.details ?? error.toString()
         : error.toString();
-    var terseMessageMatch =
+    final terseMessageMatch =
         _terseBreakpointFailureRegex.firstMatch(userMessage);
     if (terseMessageMatch != null) {
       userMessage = terseMessageMatch.group(1) ?? userMessage;
@@ -1298,13 +1298,13 @@
   /// tokenPos) can share the same response.
   final _scripts = <String, Future<vm.Script>>{};
 
-  /// A cache of requests (Futures) to resolve URIs to their file-like URIs.
+  /// A cache of requests (Futures) to resolve URIs to their file URIs.
   ///
   /// Used so that multiple requests that require them (for example looking up
   /// locations for stack frames from tokenPos) can share the same response.
   ///
   /// Keys are URIs in string form.
-  /// Values are file-like URIs (file: or similar, such as dart-macro+file:).
+  /// Values are file URIs.
   final _resolvedPaths = <String, Future<Uri?>>{};
 
   /// Whether this isolate has an in-flight user-initiated resume request that
@@ -1370,7 +1370,7 @@
   ///
   /// sdk-path/lib/core/print.dart -> dart:core/print.dart
   /// c:\foo\bar -> package:foo/bar
-  /// dart-macro+file:///c:/foo/bar -> dart-macro+package:foo/bar
+  /// file:///c:/foo/bar -> package:foo/bar
   ///
   /// This is required so that when the user sets a breakpoint in an SDK source
   /// (which they may have navigated to via the Analysis Server) we generate a
@@ -1417,7 +1417,7 @@
     }
   }
 
-  /// Batch resolves source URIs from the VM to a file-like URI for the package
+  /// Batch resolves source URIs from the VM to a file URI for the package
   /// lib folder.
   ///
   /// This method is more performant than repeatedly calling
@@ -1437,7 +1437,7 @@
         .toList();
   }
 
-  /// Batch resolves source URIs from the VM to a file-like URI.
+  /// Batch resolves source URIs from the VM to a file URI.
   ///
   /// This method is more performant than repeatedly calling [resolveUriToPath]
   /// because it resolves multiple URIs in a single request to the VM.
@@ -1513,7 +1513,7 @@
     // because they were either filtered out of [requiredUris] because they were
     // already there, or we then populated completers for them above.
     final futures = uris.map((uri) async {
-      if (_manager._adapter.isSupportedFileScheme(uri)) {
+      if (uri.isScheme('file')) {
         return uri;
       } else {
         return await _resolvedPaths[uri.toString()];
@@ -1562,11 +1562,10 @@
   /// would not be changed.
   final _libraryIsDebuggableById = <String, bool>{};
 
-  /// Resolves a source URI to a file-like URI for the lib folder of its
+  /// Resolves a source URI to a file URI for the lib folder of its
   /// package.
   ///
   /// package:foo/a/b/c/d.dart -> file:///code/packages/foo/lib
-  /// dart-macro+package:foo/a/b/c/d.dart -> dart-macro+file:///code/packages/foo/lib
   ///
   /// This method is an optimisation over calling [resolveUriToPath] where only
   /// the package root is required (for example when determining whether a
@@ -1578,7 +1577,7 @@
     return result.first;
   }
 
-  /// Resolves a source URI from the VM to a file-like URI.
+  /// Resolves a source URI from the VM to a file URI.
   ///
   /// dart:core/print.dart -> sdk-path/lib/core/print.dart
   ///
@@ -1596,8 +1595,6 @@
   int storeData(Object data) => _manager.storeData(this, data);
 
   Uri? _convertPathToGoogle3Uri(Uri input) {
-    // TODO(dantup): Do we need to handle non-file here? Eg. can we have
-    //  dart-macro+file:/// for a google3 path?
     if (!input.isScheme('file')) {
       return null;
     }
@@ -1605,8 +1602,8 @@
 
     const search = '/google3/';
     if (inputPath.startsWith('/google') && inputPath.contains(search)) {
-      var idx = inputPath.indexOf(search);
-      var remainingPath = inputPath.substring(idx + search.length);
+      final idx = inputPath.indexOf(search);
+      final remainingPath = inputPath.substring(idx + search.length);
       return Uri(
         scheme: 'google3',
         host: '',
@@ -1617,17 +1614,17 @@
     return null;
   }
 
-  /// Converts a VM-returned URI to a file-like URI, taking org-dartlang-sdk
+  /// Converts a VM-returned URI to a file URI, taking org-dartlang-sdk
   /// schemes into account.
   ///
-  /// Supports file-like URIs and org-dartlang-sdk:// URIs.
+  /// Supports file URIs and org-dartlang-sdk:// URIs.
   Uri? _convertUriToFilePath(Uri? input) {
     if (input == null) {
       return null;
-    } else if (_manager._adapter.isSupportedFileScheme(input)) {
+    } else if (input.isScheme('file')) {
       return input;
     } else {
-      // TODO(dantup): UriConverter should be upgraded to use file-like URIs
+      // TODO(dantup): UriConverter should be upgraded to use file URIs
       //  instead of paths, but that might be breaking because it's used
       //  outside of this package?
       final uriConverter = _manager._adapter.uriConverter();
@@ -1644,8 +1641,8 @@
   ///
   /// [uri] should be the equivalent package: URI and is used to know how many
   /// segments to remove from the file path to get to the lib folder.
-  Uri? _trimPathToLibFolder(Uri? fileLikeUri, Uri uri) {
-    if (fileLikeUri == null) {
+  Uri? _trimPathToLibFolder(Uri? fileUri, Uri uri) {
+    if (fileUri == null) {
       return null;
     }
 
@@ -1657,14 +1654,14 @@
     // least as many segments as the path of the URI.
     assert(uri.pathSegments.length > libraryPathSegments);
     if (uri.pathSegments.length <= libraryPathSegments) {
-      return fileLikeUri;
+      return fileUri;
     }
 
     // Strip off the correct number of segments to the resulting path points
     // to the root of the package:/ URI.
-    final keepSegments = fileLikeUri.pathSegments.length - libraryPathSegments;
-    return fileLikeUri.replace(
-        pathSegments: fileLikeUri.pathSegments.sublist(0, keepSegments));
+    final keepSegments = fileUri.pathSegments.length - libraryPathSegments;
+    return fileUri.replace(
+        pathSegments: fileUri.pathSegments.sublist(0, keepSegments));
   }
 
   /// Clears all temporary stored for this thread. This includes:
diff --git a/pkg/dds/lib/src/dap/protocol_converter.dart b/pkg/dds/lib/src/dap/protocol_converter.dart
index b3aa18c..5918bf7 100644
--- a/pkg/dds/lib/src/dap/protocol_converter.dart
+++ b/pkg/dds/lib/src/dap/protocol_converter.dart
@@ -469,31 +469,6 @@
     }
   }
 
-  Future<dap.Variable> convertFieldRefToVariable(
-    ThreadInfo thread,
-    vm.FieldRef fieldRef, {
-    required bool allowCallingToString,
-    required VariableFormat? format,
-  }) async {
-    final field = await thread.getObject(fieldRef);
-    if (field is vm.Field) {
-      return convertVmResponseToVariable(
-        thread,
-        field.staticValue,
-        name: fieldRef.name,
-        allowCallingToString: allowCallingToString,
-        evaluateName: fieldRef.name,
-        format: format,
-      );
-    } else {
-      return dap.Variable(
-        name: fieldRef.name ?? '<unnamed field>',
-        value: '<unavailable>',
-        variablesReference: 0,
-      );
-    }
-  }
-
   /// Converts a [vm.Response] into to a [dap.Variable].
   ///
   /// If provided, [name] is used as the variables name (for example the field
@@ -609,8 +584,7 @@
     final uriIsPackage = uri?.isScheme('package') ?? false;
     final sourcePathUri =
         uri != null ? await thread.resolveUriToPath(uri) : null;
-    var canShowSource =
-        sourcePathUri != null && _adapter.isSupportedFileScheme(sourcePathUri);
+    var canShowSource = sourcePathUri != null && sourcePathUri.isScheme('file');
 
     // If we don't have a local source file but the source is a "dart:" uri we
     // might still be able to download the source from the VM.
@@ -639,7 +613,7 @@
     }
 
     // LSP uses 0 for unknown lines.
-    var (line, col) = lineCol ?? (0, 0);
+    final (line, col) = lineCol ?? (0, 0);
 
     // If a source would be considered not-debuggable (for example it's in the
     // SDK and debugSdkLibraries=false) then we should also mark it as
diff --git a/pkg/dds/lib/src/dap/protocol_stream_transformers.dart b/pkg/dds/lib/src/dap/protocol_stream_transformers.dart
index 774061f..8bb133b 100644
--- a/pkg/dds/lib/src/dap/protocol_stream_transformers.dart
+++ b/pkg/dds/lib/src/dap/protocol_stream_transformers.dart
@@ -78,7 +78,7 @@
 
   /// Whether [buffer] ends in '\r\n\r\n'.
   static bool _endsWithCrLfCrLf(List<int> buffer) {
-    var l = buffer.length;
+    final l = buffer.length;
     return l > 4 &&
         buffer[l - 1] == 10 &&
         buffer[l - 2] == 13 &&
diff --git a/pkg/dds/lib/src/dap/utils.dart b/pkg/dds/lib/src/dap/utils.dart
index 09faa99..1d8c554 100644
--- a/pkg/dds/lib/src/dap/utils.dart
+++ b/pkg/dds/lib/src/dap/utils.dart
@@ -9,12 +9,10 @@
 
 import '../rpc_error_codes.dart';
 
-/// Returns whether this URI is something that can be resolved to a file-like
+/// Returns whether this URI is something that can be resolved to a file
 /// URI via the VM Service.
 bool isResolvableUri(Uri uri) {
   return !uri.isScheme('file') &&
-      // Custom-scheme versions of file, like `dart-macro+file://`
-      !uri.scheme.endsWith('+file') &&
       !uri.isScheme('http') &&
       !uri.isScheme('https') &&
       // Parsed stack frames may have URIs with no scheme and the text
@@ -62,9 +60,7 @@
   // Only accept package: and file: URIs if they end with .dart.
   // - package:foo/foo.dart
   // - file:///c:/foo/bar.dart
-  if (uri.isScheme('package') ||
-      uri.isScheme('file') ||
-      uri.scheme.endsWith('+file')) {
+  if (uri.isScheme('package') || uri.isScheme('file')) {
     return uri.path.endsWith('.dart');
   }
 
@@ -101,16 +97,16 @@
 /// It should not be assumed that if a value is returned that the input
 /// was necessarily a stack frame.
 StackFrameLocation? _parseStackFrame(String input) {
-  var match = _stackFrameLocationPattern.firstMatch(input);
+  final match = _stackFrameLocationPattern.firstMatch(input);
   if (match == null) return null;
 
-  var uriMatch = match.group(1);
-  var lineMatch = match.group(2);
-  var colMatch = match.group(3);
+  final uriMatch = match.group(1);
+  final lineMatch = match.group(2);
+  final colMatch = match.group(3);
 
   var uri = uriMatch != null ? Uri.tryParse(uriMatch) : null;
-  var line = lineMatch != null ? int.tryParse(lineMatch) : null;
-  var col = colMatch != null ? int.tryParse(colMatch) : null;
+  final line = lineMatch != null ? int.tryParse(lineMatch) : null;
+  final col = colMatch != null ? int.tryParse(colMatch) : null;
 
   if (uriMatch == null || uri == null) {
     return null;
@@ -118,7 +114,7 @@
 
   // If the URI has no scheme, assume a relative path from Directory.current.
   if (!uri.hasScheme && path.isRelative(uriMatch)) {
-    var currentDirectoryPath = Directory.current.path;
+    final currentDirectoryPath = Directory.current.path;
     if (currentDirectoryPath.isNotEmpty) {
       uri = Uri.file(path.join(currentDirectoryPath, uriMatch));
     }
diff --git a/pkg/dds/lib/src/devtools/dtd.dart b/pkg/dds/lib/src/devtools/dtd.dart
index 29417e8..aad01af 100644
--- a/pkg/dds/lib/src/devtools/dtd.dart
+++ b/pkg/dds/lib/src/devtools/dtd.dart
@@ -39,11 +39,11 @@
     // non-standard SDK layouts that can involve symlinks (e.g., Brew
     // installations, google3 tests, etc).
     if (!File(
-      path.join(snapshotsDir, 'dds_aot.dart.snapshot'),
+      path.join(snapshotsDir, 'dart_tooling_daemon_aot.dart.snapshot'),
     ).existsSync()) {
       // We do not have an AOT snpashot and hence look for the JIT snapshot.
       if (!File(
-        path.join(snapshotsDir, 'dds.dart.snapshot'),
+        path.join(snapshotsDir, 'dart_tooling_daemon.dart.snapshot'),
       ).existsSync()) {
         return null;
       }
diff --git a/pkg/dds/test/dap/integration/debug_breakpoints_test.dart b/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
index 365e60d..6cfa475 100644
--- a/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
+++ b/pkg/dds/test/dap/integration/debug_breakpoints_test.dart
@@ -20,8 +20,7 @@
   tearDown(() => dap.tearDown());
 
   group('debug mode breakpoints', () {
-    testWithUriConfigurations(() => dap, 'stops at a line breakpoint',
-        () async {
+    test('stops at a line breakpoint', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleBreakpointProgram);
       final breakpointLine = lineWith(testFile, breakpointMarker);
@@ -29,8 +28,7 @@
       await client.hitBreakpoint(testFile, breakpointLine);
     });
 
-    testWithUriConfigurations(() => dap, 'resolves modified breakpoints',
-        () async {
+    test('resolves modified breakpoints', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleMultiBreakpointProgram);
       final breakpointLine = lineWith(testFile, breakpointMarker);
@@ -75,8 +73,7 @@
       expect(resolvedBreakpoints, addedBreakpoints);
     });
 
-    testWithUriConfigurations(
-        () => dap, 'provides reason for failed breakpoints', () async {
+    test('provides reason for failed breakpoints', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(debuggerPauseProgram);
       final invalidBreakpointLine = 9999;
@@ -96,8 +93,8 @@
       });
 
       // Set the breakpoint and also collect the original reason.
-      var bps = await client.setBreakpoint(testFile, invalidBreakpointLine);
-      var bp = bps.breakpoints.single;
+      final bps = await client.setBreakpoint(testFile, invalidBreakpointLine);
+      final bp = bps.breakpoints.single;
       breakpointReasons.add('${bp.reason}: ${bp.message}');
 
       // Wait up to a few seconds for the change events to come through to
@@ -118,9 +115,7 @@
       await breakpointChangedSubscription.cancel();
     });
 
-    testWithUriConfigurations(
-        () => dap, 'provides reason for not-yet-resolved breakpoints',
-        () async {
+    test('provides reason for not-yet-resolved breakpoints', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(debuggerPauseProgram);
       final breakpointLine = lineWith(testFile, breakpointMarker);
@@ -132,7 +127,7 @@
       ], eagerError: true);
 
       // Set a breakpoint and verify the result.
-      var bps = await client.setBreakpoint(testFile, breakpointLine);
+      final bps = await client.setBreakpoint(testFile, breakpointLine);
       expect(bps.breakpoints.single.reason, 'pending');
       expect(bps.breakpoints.single.message,
           'Breakpoint has not yet been resolved');
diff --git a/pkg/dds/test/dap/integration/debug_exceptions_test.dart b/pkg/dds/test/dap/integration/debug_exceptions_test.dart
index d6ab684..da2c649 100644
--- a/pkg/dds/test/dap/integration/debug_exceptions_test.dart
+++ b/pkg/dds/test/dap/integration/debug_exceptions_test.dart
@@ -42,9 +42,7 @@
       ]);
     });
 
-    testWithUriConfigurations(
-        () => dap, 'pauses on uncaught exceptions when mode=Unhandled',
-        () async {
+    test('pauses on uncaught exceptions when mode=Unhandled', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleThrowingProgram);
 
diff --git a/pkg/dds/test/dap/integration/debug_logging_test.dart b/pkg/dds/test/dap/integration/debug_logging_test.dart
index 7643689..cfdea3e 100644
--- a/pkg/dds/test/dap/integration/debug_logging_test.dart
+++ b/pkg/dds/test/dap/integration/debug_logging_test.dart
@@ -97,7 +97,7 @@
 }
     ''');
 
-      var outputEvents = await dap.client.collectOutput(file: testFile);
+      final outputEvents = await dap.client.collectOutput(file: testFile);
 
       // Skip the first two lines because it's the VM Service connection info.
       final output = outputEvents.skip(2).map((e) => e.output).join();
diff --git a/pkg/dds/test/dap/integration/debug_stack_test.dart b/pkg/dds/test/dap/integration/debug_stack_test.dart
index fbe6796..f3548f0 100644
--- a/pkg/dds/test/dap/integration/debug_stack_test.dart
+++ b/pkg/dds/test/dap/integration/debug_stack_test.dart
@@ -16,8 +16,7 @@
   tearDown(() => dap.tearDown());
 
   group('debug mode stack trace', () {
-    testWithUriConfigurations(
-        () => dap, 'includes expected names and async boundaries', () async {
+    test('includes expected names and async boundaries', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(simpleAsyncProgram);
       final breakpointLine = lineWith(testFile, breakpointMarker);
diff --git a/pkg/dds/test/dap/integration/debug_variables_test.dart b/pkg/dds/test/dap/integration/debug_variables_test.dart
index 47cf355..55eff3e 100644
--- a/pkg/dds/test/dap/integration/debug_variables_test.dart
+++ b/pkg/dds/test/dap/integration/debug_variables_test.dart
@@ -87,6 +87,35 @@
       );
     });
 
+    test('includes correct evaluateNames for children of globals', () async {
+      final client = dap.client;
+      final testFile = dap.createTestFile('''
+final globalMyClass = MyClass();
+
+void main(List<String> args) {
+  globalMyClass; // Force init
+  print(''); $breakpointMarker
+}
+
+class MyClass {
+  final myField = 'myFieldValue';
+}
+    ''');
+      final breakpointLine = lineWith(testFile, breakpointMarker);
+
+      final stop = await client.hitBreakpoint(testFile, breakpointLine);
+      final expectedVariable =
+          await client.getGlobalVariable(stop.threadId!, 'globalMyClass');
+
+      // Check the child fields.
+      return client.expectVariables(
+        expectedVariable.variablesReference,
+        '''
+          myField: "myFieldValue", eval: globalMyClass.myField
+        ''',
+      );
+    });
+
     test('provides simple exception types for frames', () async {
       final client = dap.client;
       final testFile = dap.createTestFile(r'''
diff --git a/pkg/dds/test/dap/integration/test_client.dart b/pkg/dds/test/dap/integration/test_client.dart
index 871752f..4a9a914 100644
--- a/pkg/dds/test/dap/integration/test_client.dart
+++ b/pkg/dds/test/dap/integration/test_client.dart
@@ -11,7 +11,6 @@
 import 'package:dds/src/dap/adapters/dart.dart';
 import 'package:dds/src/dap/logging.dart';
 import 'package:dds/src/dap/protocol_stream.dart';
-import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'package:vm_service/vm_service.dart' as vm;
 
@@ -34,17 +33,6 @@
   final _eventController = StreamController<Event>.broadcast();
   int _seq = 1;
 
-  /// Whether to advertise support for URIs and expect them in stack traces
-  /// and breakpoint updates from the debug adapter.
-  bool supportUris = false;
-
-  /// Whether to send URIs in breakpoints even for standard file paths.
-  ///
-  /// This is separate from [supportUris] so that we can test when support is
-  /// enabled that the client can still send paths. This is because VS Code will
-  /// send file paths for file:/// documents even though URIs are supported.
-  bool sendFileUris = false;
-
   /// Functions provided by tests to handle requests that may come from the
   /// server (such as `runInTerminal`).
   final _serverRequestHandlers =
@@ -314,7 +302,6 @@
         adapterID: 'test',
         supportsRunInTerminalRequest: supportsRunInTerminalRequest,
         supportsProgressReporting: supportsProgressReporting,
-        supportsDartUris: supportUris,
       )),
       sendRequest(
         SetExceptionBreakpointsArguments(
@@ -607,7 +594,7 @@
   Future<T> _logIfSlow<T>(String name, Future<T> future) {
     // Use a loop to periodically check so that we can exit earlier if
     // the test is being torn down.
-    var endTime = DateTime.now().add(_requestWarningDuration);
+    final endTime = DateTime.now().add(_requestWarningDuration);
     late Timer timer;
     timer = Timer.periodic(Duration(milliseconds: 100), (_) {
       // Shutting down, so just abort.
@@ -760,34 +747,12 @@
     return stop;
   }
 
-  /// Converts a file path to a URI to send to the debug adapter if
-  /// [sendFileUris] is `true` and otherwise returns as-is.
-  String toPathOrUri(String filePath) {
-    assert(path.isAbsolute(filePath));
-    return sendFileUris ? Uri.file(filePath).toString() : filePath;
-  }
-
-  /// Converts a string from the debug adapter back to a file path, asserting
-  /// it was a URI if [useUris] is `true`, and not if [useUris] is `false`.
-  String fromPathOrUri(String filePathOrUri) {
-    if (!supportUris) {
-      // Expect an absolute path.
-      assert(path.isAbsolute(filePathOrUri));
-      return filePathOrUri;
-    }
-
-    // Expect a URI with file:/// scheme.
-    final uri = Uri.parse(filePathOrUri);
-    assert(uri.isScheme('file'));
-    return uri.toFilePath();
-  }
-
   /// Sets a breakpoint at [line] in [file].
   Future<SetBreakpointsResponseBody> setBreakpoint(File file, int line,
       {String? condition}) async {
     final response = await sendRequest(
       SetBreakpointsArguments(
-        source: Source(path: toPathOrUri(_normalizeBreakpointPath(file.path))),
+        source: Source(path: _normalizeBreakpointPath(file.path)),
         breakpoints: [SourceBreakpoint(line: line, condition: condition)],
       ),
     );
@@ -802,7 +767,7 @@
       File file, List<int> lines) async {
     final response = await sendRequest(
       SetBreakpointsArguments(
-        source: Source(path: toPathOrUri(_normalizeBreakpointPath(file.path))),
+        source: Source(path: _normalizeBreakpointPath(file.path)),
         breakpoints: lines.map((line) => SourceBreakpoint(line: line)).toList(),
       ),
     );
@@ -866,8 +831,7 @@
       initialize(),
       sendRequest(
         SetBreakpointsArguments(
-          source:
-              Source(path: toPathOrUri(_normalizeBreakpointPath(file.path))),
+          source: Source(path: _normalizeBreakpointPath(file.path)),
           breakpoints: [
             SourceBreakpoint(
               line: line,
@@ -950,8 +914,7 @@
       final frame = result.stackFrames[0];
 
       if (file != null) {
-        expect(fromPathOrUri(frame.source!.path!),
-            equals(uppercaseDriveLetter(file.path)));
+        expect(frame.source!.path!, equals(uppercaseDriveLetter(file.path)));
       }
       if (sourceName != null) {
         expect(frame.source?.name, equals(sourceName));
@@ -1128,6 +1091,20 @@
     return getChildVariable(variablesScope.variablesReference, name);
   }
 
+  /// A helper that finds a named variable in the Globals scope for the top
+  /// frame.
+  Future<Variable> getGlobalVariable(int threadId, String name) async {
+    final stack = await getValidStack(
+      threadId,
+      startFrame: 0,
+      numFrames: 1,
+    );
+    final topFrame = stack.stackFrames.first;
+
+    final variablesScope = await getValidScope(topFrame.id, 'Globals');
+    return getChildVariable(variablesScope.variablesReference, name);
+  }
+
   /// A helper that finds a named variable in the child variables for
   /// [variablesReference].
   Future<Variable> getChildVariable(int variablesReference, String name) async {
diff --git a/pkg/dds/test/dap/integration/test_support.dart b/pkg/dds/test/dap/integration/test_support.dart
index e777f47..7c0c450 100644
--- a/pkg/dds/test/dap/integration/test_support.dart
+++ b/pkg/dds/test/dap/integration/test_support.dart
@@ -8,7 +8,6 @@
 
 import 'package:dap/dap.dart';
 import 'package:dds/src/dap/logging.dart';
-import 'package:meta/meta.dart';
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
@@ -320,37 +319,12 @@
   }
 }
 
-/// A helper to run [testFunc] as a test in various configurations of URI
-/// support.
-///
-/// This should be used to ensure coverage of each configuration where
-/// breakpoints and stack traces are being tested.
-@isTest
-void testWithUriConfigurations(
-  DapTestSession Function() dapFunc,
-  String name,
-  FutureOr<void> Function() testFunc,
-) {
-  for (final (supportUris, sendFileUris) in [
-    (false, false),
-    (true, false),
-    (true, true),
-  ]) {
-    test('$name (supportUris: $supportUris, sendFileUris: $sendFileUris)', () {
-      final client = dapFunc().client;
-      client.supportUris = supportUris;
-      client.sendFileUris = sendFileUris;
-      return testFunc();
-    });
-  }
-}
-
 /// Sets the casing of a drive letter according to [casing].
 String setDriveLetterCasing(String path, DriveLetterCasing? casing) {
   if (!Platform.isWindows || path.isEmpty) {
     return path;
   }
-  var (driveLetter, rest) = (path.substring(0, 1), path.substring(1));
+  final (driveLetter, rest) = (path.substring(0, 1), path.substring(1));
   return switch (casing) {
     DriveLetterCasing.uppercase => driveLetter.toUpperCase() + rest,
     DriveLetterCasing.lowercase => driveLetter.toLowerCase() + rest,
diff --git a/pkg/dds/test/dap/integration/windows_path_casing_test.dart b/pkg/dds/test/dap/integration/windows_path_casing_test.dart
index a84aaeb..b1d0d69 100644
--- a/pkg/dds/test/dap/integration/windows_path_casing_test.dart
+++ b/pkg/dds/test/dap/integration/windows_path_casing_test.dart
@@ -28,6 +28,9 @@
                 'breakpoint requests: $breakpointCasing)', () async {
               // Set the correct casing of drive letters for this test.
               if (actualCwdCasing != null) {
+                // TODO(dantup): This setting of Directory.current can cause
+                //  test failures when running multiple tests with `dart test`
+                //  due to concurrency!
                 Directory.current = Directory(
                   setDriveLetterCasing(Directory.current.path, actualCwdCasing),
                 );
diff --git a/pkg/dds/test/dap/utils_test.dart b/pkg/dds/test/dap/utils_test.dart
index f979658..fa050be 100644
--- a/pkg/dds/test/dap/utils_test.dart
+++ b/pkg/dds/test/dap/utils_test.dart
@@ -39,7 +39,7 @@
       int? col,
     ]) {
       for (var input in inputs) {
-        var frame = parseDartStackFrame(input);
+        final frame = parseDartStackFrame(input);
         expect(frame, isNotNull, reason: 'Failed to parse "$input"');
         expect(frame!.uri, uri, reason: 'Failed to parse URI from "$input"');
         expect(frame.line, line, reason: 'Failed to parse line from "$input"');
@@ -141,30 +141,6 @@
       });
     });
 
-    group('Posix dart-macro+file URIs', () {
-      test('without line/col', () {
-        expectFrames(
-          [
-            '#1        A.b (dart-macro+file:///a/b/c/d.dart)',
-            'flutter: #1        A.b (dart-macro+file:///a/b/c/d.dart)',
-          ],
-          Uri.parse('dart-macro+file:///a/b/c/d.dart'),
-        );
-      });
-
-      test('with line/col', () {
-        expectFrames(
-          [
-            '#1        A.b (dart-macro+file:///a/b/c/d.dart:1:2)',
-            'flutter: #1        A.b (dart-macro+file:///a/b/c/d.dart:1:2)',
-          ],
-          Uri.parse('dart-macro+file:///a/b/c/d.dart'),
-          1,
-          2,
-        );
-      });
-    });
-
     group('Posix relative paths', () {
       test('without line/col', () {
         expectFrames(
@@ -227,30 +203,6 @@
       });
     });
 
-    group('Windows dart-macro+file URIs', () {
-      test('without line/col', () {
-        expectFrames(
-          [
-            '#1        A.b (dart-macro+file:///a:/b/c/d.dart)',
-            'flutter: #1        A.b (dart-macro+file:///a:/b/c/d.dart)',
-          ],
-          Uri.parse('dart-macro+file:///a:/b/c/d.dart'),
-        );
-      });
-
-      test('with line/col', () {
-        expectFrames(
-          [
-            '#1        A.b (dart-macro+file:///a:/b/c/d.dart:1:2)',
-            'flutter: #1        A.b (dart-macro+file:///a:/b/c/d.dart:1:2)',
-          ],
-          Uri.parse('dart-macro+file:///a:/b/c/d.dart'),
-          1,
-          2,
-        );
-      });
-    });
-
     group('Windows relative paths', () {
       test('without line/col', () {
         expectFrames(
diff --git a/pkg/dev_compiler/lib/js/ddc/ddc_module_loader.js b/pkg/dev_compiler/lib/js/ddc/ddc_module_loader.js
index 5f3360e..e5de482 100644
--- a/pkg/dev_compiler/lib/js/ddc/ddc_module_loader.js
+++ b/pkg/dev_compiler/lib/js/ddc/ddc_module_loader.js
@@ -1341,7 +1341,7 @@
   };
 }
 
-(function (dartDevEmbedder) {
+(function(dartDevEmbedder) {
   'use strict';
 
   if (dartDevEmbedder) {
@@ -1447,8 +1447,8 @@
         this.pendingHotRestartLibraryInitializers[libraryName] = initializer;
       } else if (libraryName in this.libraryInitializers) {
         throw 'Library ' + libraryName +
-        ' was previously defined but DDC is not currently executing a hot ' +
-        ' reload or a hot restart. Failed to define the library.';
+            ' was previously defined but DDC is not currently executing a hot ' +
+            ' reload or a hot restart. Failed to define the library.';
       } else {
         this.libraryInitializers[libraryName] = initializer;
       }
@@ -1459,9 +1459,10 @@
      *
      * @param {string} libraryName Name of the library to be initialized and
      *   linked.
-     * @param {?function (Object)} installFn A function to call to install the
+     * @param {?function (Object?)} installFn A function to call to install the
      *   initialized library object into the context of an import. See
      *   `importLibrary` for more details.
+     * @return {!Object} The library object ready for use by the application.
      */
     initializeAndLinkLibrary(libraryName, installFn) {
       if (!this.triggeredSDKLibrariesWithSideEffects) {
@@ -1510,12 +1511,14 @@
 
       // Library initialization is lazy and only performed on the first access.
       return new Proxy(Object.create(null), {
-        get: function (_, property) {
-          let library = libraryManager.initializeAndLinkLibrary(libraryName, installFn);
+        get: function(_, property) {
+          let library =
+              libraryManager.initializeAndLinkLibrary(libraryName, installFn);
           return library[property];
         },
-        set: function (_, property, value) {
-          let library = libraryManager.initializeAndLinkLibrary(libraryName, installFn);
+        set: function(_, property, value) {
+          let library =
+              libraryManager.initializeAndLinkLibrary(libraryName, installFn);
           library[property] = value;
           return true;
         },
@@ -1553,8 +1556,8 @@
         try {
           let mainValue = entryPointLibrary.main(args);
           // Attach the error callback to main's future if it's async.
-          if (dartDevEmbedderConfig.mainErrorCallback != null && mainValue != null &&
-            mainValue.catchError != null) {
+          if (dartDevEmbedderConfig.mainErrorCallback != null &&
+              mainValue != null && mainValue.catchError != null) {
             mainValue.catchError((e) => {
               dartDevEmbedderConfig.mainErrorCallback();
               throw e;
@@ -1580,8 +1583,11 @@
     // See docs on `DartDevEmbedder.runMain`.
     runMain(entryPointLibraryName, dartSdkRuntimeOptions) {
       this.setDartSDKRuntimeOptions(dartSdkRuntimeOptions);
-      console.log('Starting application from main method in: ' + entryPointLibraryName + '.');
-      let entryPointLibrary = this.initializeAndLinkLibrary(entryPointLibraryName);
+      console.log(
+          'Starting application from main method in: ' + entryPointLibraryName +
+          '.');
+      let entryPointLibrary =
+          this.initializeAndLinkLibrary(entryPointLibraryName);
       this.savedEntryPointLibraryName = entryPointLibraryName;
       this.savedDartSdkRuntimeOptions = dartSdkRuntimeOptions;
       this._runMain(entryPointLibrary);
@@ -1601,16 +1607,17 @@
         dartRuntimeLibrary.nativeNonNullAsserts(options.nativeNonNullAsserts);
       }
       if (options.jsInteropNonNullAsserts != null) {
-        dartRuntimeLibrary.jsInteropNonNullAsserts(options.jsInteropNonNullAsserts);
+        dartRuntimeLibrary.jsInteropNonNullAsserts(
+            options.jsInteropNonNullAsserts);
       }
     }
 
     /**
      * Begins a hot reload operation.
      *
-     * @param {Array<String>} filesToLoad The urls of the files that contain
+     * @param {!Array<string>} filesToLoad The urls of the files that contain
      * the libraries to hot reload.
-     * @param {Array<String>} librariesToReload The names of the libraries to
+     * @param {!Array<string>} librariesToReload The names of the libraries to
      * hot reload.
      */
     async hotReloadStart(filesToLoad, librariesToReload) {
@@ -1622,11 +1629,9 @@
       // Trigger download of the new library versions.
       let reloadFilePromises = [];
       for (let file of this.pendingHotReloadFileUrls) {
-        reloadFilePromises.push(
-          new Promise((resolve) => {
-            self.$dartLoader.forceLoadScript(file, resolve);
-          })
-        );
+        reloadFilePromises.push(new Promise((resolve) => {
+          self.$dartLoader.forceLoadScript(file, resolve);
+        }));
       }
       await Promise.all(reloadFilePromises).then((_) => {
         if (dartDevEmbedderConfig.capturedHotReloadEndHandler != null) {
@@ -1694,7 +1699,7 @@
      */
     hotRestart() {
       if (!this.savedEntryPointLibraryName) {
-        throw "Error: Hot restart requested before application started.";
+        throw 'Error: Hot restart requested before application started.';
       }
       // Clear all libraries.
       this.libraries = Object.create(null);
@@ -1706,13 +1711,15 @@
         let initializer = this.pendingHotRestartLibraryInitializers[name];
         this.libraryInitializers[name] = initializer;
       }
-      let entryPointLibrary = this.initializeAndLinkLibrary(this.savedEntryPointLibraryName);
+      let entryPointLibrary =
+          this.initializeAndLinkLibrary(this.savedEntryPointLibraryName);
       // TODO(nshahan): Start sharing a single source of truth for the restart
       // generation between the dart:_runtime and this module system.
       this.hotRestartGeneration += 1;
-      console.log('Hot restarting application from main method in: ' +
-        this.savedEntryPointLibraryName + ' (generation: ' +
-        this.hotRestartGeneration + ').');
+      console.log(
+          'Hot restarting application from main method in: ' +
+          this.savedEntryPointLibraryName +
+          ' (generation: ' + this.hotRestartGeneration + ').');
       // Cleanup.
       this.hotRestartInProgress = false;
       this.pendingHotRestartLibraryInitializers = Object.create(null);
@@ -1741,8 +1748,8 @@
   const sourceMaps = {};
 
   /**
-     * Common debugging APIs that may be useful for metadata, invocations,
-     * developer extensions, bootstrapping, and more.
+   * Common debugging APIs that may be useful for metadata, invocations,
+   * developer extensions, bootstrapping, and more.
    */
   // TODO(56966): A number of APIs in this class consume and return Dart
   // objects, nested or otherwise. We should replace them with some kind of
@@ -1753,11 +1760,12 @@
      * Returns a JavaScript array of all class names in a Dart library.
      *
      * @param {string} libraryUri URI of the Dart library.
-     * @returns {Array<string>} Array containing the class names in the library.
+     * @return {!Array<string>} Array containing the class names in the library.
      */
     getClassesInLibrary(libraryUri) {
       libraryManager.initializeAndLinkLibrary(libraryUri);
-      return dartRuntimeLibrary().getLibraryMetadata(libraryUri, libraryManager.libraries);
+      return dartRuntimeLibrary().getLibraryMetadata(
+          libraryUri, libraryManager.libraries);
     }
 
     /**
@@ -1792,14 +1800,15 @@
      *
      * @param {string} libraryUri URI of the Dart library that the class is in.
      * @param {string} name Name of the Dart class.
-     * @param {any} objectInstance Optional instance of the Dart class that's
+     * @param {?Object} objectInstance Optional instance of the Dart class that's
      * needed to determine the type of any generic members.
-     * @returns {Object<String, any>} Object containing the metadata in the
+     * @return {?Object<string, !any>} Object containing the metadata in the
      * above format.
      */
     getClassMetadata(libraryUri, name, objectInstance) {
       libraryManager.initializeAndLinkLibrary(libraryUri);
-      return dartRuntimeLibrary().getClassMetadata(libraryUri, name, objectInstance, libraryManager.libraries);
+      return dartRuntimeLibrary().getClassMetadata(
+          libraryUri, name, objectInstance, libraryManager.libraries);
     }
 
     /**
@@ -1816,8 +1825,8 @@
      * }
      * ```
      *
-     * @param {Object} value Dart value for which metadata is computed.
-     * @returns {Object<String, any>} Object containing the metadata in the
+     * @param {!Object} value Dart value for which metadata is computed.
+     * @return {!Object<string, !any>} Object containing the metadata in the
      * above format.
      */
     getObjectMetadata(value) {
@@ -1828,8 +1837,8 @@
      * Returns the name of the given function. If it's bound to an object of
      * class `C`, returns `C.<name>` instead.
      *
-     * @param {Object} fun Dart function for which the name is returned.
-     * @returns {string} Name of the given function in the above format.
+     * @param {!Object} fun Dart function for which the name is returned.
+     * @return {string} Name of the given function in the above format.
      */
     getFunctionName(fun) {
       return dartRuntimeLibrary().getFunctionMetadata(fun);
@@ -1838,8 +1847,8 @@
     /**
      * Returns an array of all the field names in the Dart object.
      *
-     * @param {Object} object Dart object whose field names are collected.
-     * @returns {Array<string>} Array of field names.
+     * @param {!Object} object Dart object whose field names are collected.
+     * @return {!Array<string>} Array of field names.
      */
     getObjectFieldNames(object) {
       return dartRuntimeLibrary().getObjectFieldNames(object);
@@ -1852,10 +1861,10 @@
      * returned from this API should be treated as opaque pointers and should
      * not be interacted with.
      *
-     * @param {Object} object Dart object for which the sub-range is computed.
+     * @param {!Object} object Dart object for which the sub-range is computed.
      * @param {number} offset Integer index at which the sub-range should start.
      * @param {number} count Integer number of values in the sub-range.
-     * @returns {any} Either the sub-range or the original object.
+     * @return {!any} Either the sub-range or the original object.
      */
     getSubRange(object, offset, count) {
       return dartRuntimeLibrary().getSubRange(object, offset, count);
@@ -1875,8 +1884,8 @@
      * Any Dart values returned from this API should be treated as opaque
      * pointers and should not be interacted with.
      *
-     * @param {Object} map Dart `Map` whose entries will be copied.
-     * @returns {Object<String, Array>} Object containing the entries in
+     * @param {!Object} map Dart `Map` whose entries will be copied.
+     * @return {!Object<string, !Array>} Object containing the entries in
      * the above format.
      */
     getMapElements(map) {
@@ -1896,8 +1905,8 @@
      * Any Dart values returned from this API should be treated as opaque
      * pointers and should not be interacted with.
      *
-     * @param {Object} set Dart `Set` whose entries will be copied.
-     * @returns {Object<String, Array} Object containing the entries in the
+     * @param {!Object} set Dart `Set` whose entries will be copied.
+     * @return {!Object<string, !Array>} Object containing the entries in the
      * above format.
      */
     getSetElements(set) {
@@ -1919,8 +1928,8 @@
      * Any Dart values returned from this API should be treated as opaque
      * pointers and should not be interacted with.
      *
-     * @param {Object} record Dart `Record` whose metadata will be computed.
-     * @returns {Object<String, any>} Object containing the metadata in the
+     * @param {!Object} record Dart `Record` whose metadata will be computed.
+     * @return {!Object<string, ?any>} Object containing the metadata in the
      * above format.
      */
     getRecordFields(record) {
@@ -1942,9 +1951,9 @@
      * Any Dart values returned from this API should be treated as opaque
      * pointers and should not be interacted with.
      *
-     * @param {Object} recordType Dart `Type` of a `Record` whose metadata will
+     * @param {!Object} recordType Dart `Type` of a `Record` whose metadata will
      * be computed.
-     * @returns {Object<String, any>} Object containing the metadata in the
+     * @return {!Object<string, ?any>} Object containing the metadata in the
      * above format.
      */
     getRecordTypeFields(recordType) {
@@ -1958,10 +1967,10 @@
      * Any Dart values returned from this API should be treated as opaque
      * pointers and should not be interacted with.
      *
-     * @param {Object} instance Dart instance whose method will be called.
+     * @param {?Object} instance Dart instance whose method will be called.
      * @param {string} name Name of the method.
-     * @param {Array} args Array of arguments passed to the method.
-     * @returns {any} Result of calling the method.
+     * @param {!Array} args Array of arguments passed to the method.
+     * @return {?any} Result of calling the method.
      */
     callInstanceMethod(instance, name, args) {
       return dartRuntimeLibrary().dsendRepl(instance, name, args);
@@ -1974,10 +1983,10 @@
      * Any Dart values returned from this API should be treated as opaque
      * pointers and should not be interacted with.
      *
-     * @param {any} libraryUri Dart library URI in which the method exists.
+     * @param {string} libraryUri Dart library URI in which the method exists.
      * @param {string} name Name of the method.
-     * @param {Array} args Array of arguments passed to the method.
-     * @returns {any} Result of calling the method.
+     * @param {!Array} args Array of arguments passed to the method.
+     * @return {?any} Result of calling the method.
      */
     callLibraryMethod(libraryUri, name, args) {
       let library = libraryManager.initializeAndLinkLibrary(libraryUri);
@@ -1995,10 +2004,10 @@
     /**
      * Invoke a registered extension with the given name and encoded map.
      *
-     * @param {String} methodName The name of the registered extension.
-     * @param {String} encodedJson The encoded string map that will be passed as
+     * @param {string} methodName The name of the registered extension.
+     * @param {string} encodedJson The encoded string map that will be passed as
      * a parameter to the invoked method.
-     * @returns {Promise} Promise that will await the invocation of the
+     * @return {!Promise} Promise that will await the invocation of the
      * extension.
      */
     invokeExtension(methodName, encodedJson) {
@@ -2009,7 +2018,7 @@
      * Returns a JavaScript array containing the names of the extensions
      * registered in `dart:developer`.
      *
-     * @returns {Array<string>} Array containing the extension names.
+     * @return {!Array<string>} Array containing the extension names.
      */
     get extensionNames() {
       return dartDeveloperLibrary()._extensions.keys.toList();
@@ -2020,8 +2029,8 @@
      * error is a Dart error or JS `Error`, we use the built-in stack. If the
      * error is neither, we try to construct a stack trace if possible.
      *
-     * @param {any} error The error for which a stack trace will be produced.
-     * @returns {String} The stringified stack trace.
+     * @param {?any} error The error for which a stack trace will be produced.
+     * @return {string} The stringified stack trace.
      */
     stackTrace(error) {
       return dartRuntimeLibrary().stackTrace(error).toString();
@@ -2031,8 +2040,9 @@
      * Entrypoint for DDC-generated code to set a source map for a given
      * library bundle name.
      *
-     * @param {String} libraryBundleName The name of a compiled Dart library bundle.
-     * @param {String} sourceMap The stringified source map.
+     * @param {string} libraryBundleName The name of a compiled Dart library
+     *     bundle.
+     * @param {string} sourceMap The stringified source map.
      */
     // TODO(srujzs): If users shouldn't ever need to use this, can we make this
     // not accessible for them?
@@ -2044,8 +2054,9 @@
      * Returns the source map path for a given library bundle name, if one was
      * registered.
      *
-     * @param {String} libraryBundleName The name of a compiled Dart library bundle.
-     * @returns {?String} The stringified source map if it was registered.
+     * @param {string} libraryBundleName The name of a compiled Dart library
+     *     bundle.
+     * @return {?string} The stringified source map if it was registered.
      */
     getSourceMap(libraryBundleName) {
       return sourceMaps[libraryBundleName];
@@ -2054,11 +2065,12 @@
 
   const debugger_ = new Debugger();
 
-  /** Holds public configurations for the `DartDevEmbedder`.
+  /**
+   * Holds public configurations for the `DartDevEmbedder`.
    *  These properties may be modified during the runtime of the app.
    */
   class DartDevEmbedderConfiguration {
-    /*
+    /**
      * An optional handler that acts as a wrapper around the invocation of the
      * Dart program's 'main' method. Passed an opaque function as an argument
      * that invokes 'main' when called.
@@ -2066,13 +2078,13 @@
      */
     capturedMainHandler = null;
 
-    /*
+    /**
      * An optional callback that is invoked when 'main' throws.
      * @type {?function()}
      */
     mainErrorCallback = null;
 
-    /*
+    /**
      * An optional handler that acts as a wrapper around the push of the hot
      * reloaded libraries into the Dart runtime which completes the hot reload.
      * Passed an opaque function as an argument that pushes the libraries that
@@ -2090,19 +2102,24 @@
    */
   const linkSymbol = Symbol('link');
 
-  /** The API for embedding a Dart application in the page at development time
-   *  that supports stateful hot reloading.
+  /**
+   * The API for embedding a Dart application in the page at development time
+   * that supports stateful hot reloading.
    */
   class DartDevEmbedder {
     /**
-     * Expose the DartDevEmbedderConfig publicly.
+     * @return {!DartDevEmbedderConfiguration} The configururation object for
+     * this `DartDevEmbedder`.
      */
     get config() {
       return dartDevEmbedderConfig;
     }
 
     /**
-     * Expose the 'link' symbol for library compilation.
+     * @return {!Symbol} The symbol used to store the 'link' function on
+     * libraries.
+     *
+     * NOTE: This is intended to only be used by DDC generated code.
      */
     get linkSymbol() {
       return linkSymbol;
@@ -2116,7 +2133,7 @@
      *
      * @param {string} entryPointLibraryName The name of the library that
      * contains an entry point main method.
-     * @param {Object<String, boolean>} dartSdkRuntimeOptions An options bag for
+     * @param {!Object<string, boolean>} dartSdkRuntimeOptions An options bag for
      * setting the runtime options in the Dart SDK.
      */
     runMain(entryPointLibraryName, dartSdkRuntimeOptions) {
@@ -2133,7 +2150,7 @@
      *
      * @param {string} libraryName Name for referencing the library being
      *   defined.
-     * @param {function (Object): Object} initializer Function called to
+     * @param {function (!Object): !Object} initializer Function called to
      *   initialize the library. This callback takes a library object and
      *   installs the library members into it.
      */
@@ -2150,13 +2167,13 @@
      * the first member access.
      *
      * @param {string} libraryName Name of the library to import.
-     * @param {?function (Object)} installFn A callback invoked with the library
+     * @param {?function (!Object)} installFn A callback invoked with the library
      *  object after the library has been initialized and linked. This
      *  notification is used to improve performance. Callers may use this
      *  callback to replace the proxy object with the real library object and,
      *  in doing so, remove the overhead of jumping through an indirect proxy on
      *  every property access.
-     * @return A library object or a proxy to a library object.
+     * @return {!Object} A library object or a proxy to a library object.
      */
     importLibrary(libraryName, installFn) {
       return libraryManager.importLibrary(libraryName, installFn);
@@ -2168,9 +2185,9 @@
      * Previous generations may continue to run until all specified files
      * have been loaded and initialized.
      *
-     * @param {Array<String>} filesToLoad The urls of the files that contain
+     * @param {!Array<string>} filesToLoad The urls of the files that contain
      * the libraries to hot reload.
-     * @param {Array<String>} librariesToReload The names of the libraries to
+     * @param {!Array<string>} librariesToReload The names of the libraries to
      * hot reload.
      */
     async hotReload(filesToLoad, librariesToReload) {
@@ -2184,13 +2201,14 @@
     async hotRestart() {
       libraryManager.hotRestartInProgress = true;
       await self.$dartReloadModifiedModules(
-        libraryManager.savedEntryPointLibraryName,
-        () => { libraryManager.hotRestart(); });
+          libraryManager.savedEntryPointLibraryName, () => {
+            libraryManager.hotRestart();
+          });
     }
 
 
     /**
-     * @return {Number} The current hot reload generation of the running
+     * @return {number} The current hot reload generation of the running
      * application.
      */
     get hotReloadGeneration() {
@@ -2198,7 +2216,7 @@
     }
 
     /**
-     * @return {Number} The current hot restart generation of the running
+     * @return {number} The current hot restart generation of the running
      *  application.
      */
     get hotRestartGeneration() {
@@ -2206,7 +2224,7 @@
     }
 
     /**
-     * @return {Debugger} Common debugging APIs that may be useful for metadata,
+     * @return {!Debugger} Common debugging APIs that may be useful for metadata,
      * invocations, developer extensions, bootstrapping, and more.
      */
     get debugger() {
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index b45b620..16db26c 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -301,33 +301,20 @@
   }
 
   @override
-  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,
-  }) {
-    // TODO(sigmund): implement;
-    return InvalidExpression(null);
-  }
-
-  @override
   ConstantsBackend get constantsBackend => const DevCompilerConstantsBackend();
 
   @override
   DartLibrarySupport get dartLibrarySupport =>
       const DevCompilerDartLibrarySupport();
+
+  // For correctness the DDC runtime needs to reevaluate libraries that contain
+  // mixin applications when the mixin was edited. If the edit was only within
+  // the body of a mixin member the experimental invalidation logic would only
+  // invalidate that library. This enables a search for applications of the
+  // mixin in other libraries adds them to the invalidated set.
+  @override
+  bool get incrementalCompilerIncludeMixinApplicationInvalidatedLibraries =>
+      true;
 }
 
 class DevCompilerDartLibrarySupport extends CustomizedDartLibrarySupport {
diff --git a/pkg/dev_compiler/test/hot_reload_suite.dart b/pkg/dev_compiler/test/hot_reload_suite.dart
index fa2ad64..49d5105 100644
--- a/pkg/dev_compiler/test/hot_reload_suite.dart
+++ b/pkg/dev_compiler/test/hot_reload_suite.dart
@@ -1251,7 +1251,10 @@
         .path;
   }
 
-  List<String> _getDdcArguments(String deltaKernelPath, bool recompile) {
+  List<String> _getDdcArguments(
+    String deltaKernelPath,
+    bool recompileForHotReload,
+  ) {
     return [
       '--modules=ddc',
       '--canary',
@@ -1262,7 +1265,7 @@
       '--multi-root-scheme=$filesystemScheme',
       '--experimental-output-compiled-kernel',
       '--experimental-emit-debug-metadata',
-      if (recompile && acceptedDill != null)
+      if (recompileForHotReload && acceptedDill != null)
         '--reload-last-accepted-kernel=$acceptedDill',
       '-o',
       emittedFilesDir.uri.resolve('out.js').path,
@@ -1295,7 +1298,10 @@
     final deltaKernelPath = _createDeltaKernelPath(generation);
     final response = await controller.doWork(
       WorkRequest(
-        arguments: _getDdcArguments(deltaKernelPath, true),
+        arguments: _getDdcArguments(
+          deltaKernelPath,
+          !test.isHotRestart[generation]!,
+        ),
         inputs: [Input(path: deltaKernelPath)],
       ),
     );
diff --git a/pkg/dtd/test/utils.dart b/pkg/dtd/test/utils.dart
index a5e91a3..c2e6c4d4 100644
--- a/pkg/dtd/test/utils.dart
+++ b/pkg/dtd/test/utils.dart
@@ -96,10 +96,11 @@
 
     addTearDown(() async {
       await process!.kill();
-      // Delete [tmpDir] after [process] is killed. Otherwise, the call to
-      // `tmpDir.deleteSync` may fail with an error: "The process cannot access
-      // the file because it is being used by another process."
-      tmpDir.deleteSync(recursive: true);
+      await process!.exitCode;
+      // Delete [tmpDir] after [process] is killed and exited to reduce the
+      // chance of the delete failoing with "The process cannot access the file
+      // because it is being used by another process" and requiring retries.
+      await deleteDirectory(tmpDir);
     });
 
     String? uri;
@@ -150,3 +151,25 @@
 Matcher throwsAnRpcError(int code) {
   return throwsA(predicate((p0) => (p0 is RpcException) && (p0.code == code)));
 }
+
+/// Deletes [dir] with some retries to reduce the chances of file locking errors
+/// on Windows where files may fail to delete for a short period after the
+/// process that locked them terminates.
+Future<void> deleteDirectory(Directory dir) async {
+  var deleteAttempts = 5;
+  while (deleteAttempts >= 0) {
+    deleteAttempts--;
+    try {
+      if (!dir.existsSync()) {
+        return;
+      }
+      dir.deleteSync(recursive: true);
+    } catch (e) {
+      if (deleteAttempts <= 0) {
+        rethrow;
+      }
+      await Future<void>.delayed(const Duration(milliseconds: 500));
+      print('Got $e while deleting $dir. Trying again...');
+    }
+  }
+}
diff --git a/pkg/dynamic_modules/test/data/extension_type2/main.dart b/pkg/dynamic_modules/test/data/extension_type2/main.dart
index ab17655..b51b414 100644
--- a/pkg/dynamic_modules/test/data/extension_type2/main.dart
+++ b/pkg/dynamic_modules/test/data/extension_type2/main.dart
@@ -6,7 +6,9 @@
 import 'package:expect/expect.dart';
 
 void main() async {
-  final result = (await helper.load('entry1.dart')) as int;
-  Expect.equals(1, result);
+  final result = (await helper.load('entry1.dart')) as List;
+  Expect.equals(1, result[0] as int);
+  Expect.equals(52, (result[1] as int Function(int)).call(10));
+  Expect.equals(53, (result[2] as int Function(int)).call(10));
   helper.done();
 }
diff --git a/pkg/dynamic_modules/test/data/extension_type2/modules/entry1.dart b/pkg/dynamic_modules/test/data/extension_type2/modules/entry1.dart
index 7d92338..38e1b23 100644
--- a/pkg/dynamic_modules/test/data/extension_type2/modules/entry1.dart
+++ b/pkg/dynamic_modules/test/data/extension_type2/modules/entry1.dart
@@ -5,6 +5,10 @@
 import '../shared/shared.dart';
 
 @pragma('dyn-module:entry-point')
-Object? dynamicModuleEntrypoint() => method(value);
+Object? dynamicModuleEntrypoint() => [
+  method(value),
+  const C.foo42(),
+  const C.foo43(),
+];
 
 int method(B b) => b.foo();
diff --git a/pkg/dynamic_modules/test/data/extension_type2/shared/shared.dart b/pkg/dynamic_modules/test/data/extension_type2/shared/shared.dart
index d13432f..5c60c18 100644
--- a/pkg/dynamic_modules/test/data/extension_type2/shared/shared.dart
+++ b/pkg/dynamic_modules/test/data/extension_type2/shared/shared.dart
@@ -9,3 +9,10 @@
 extension type B(A _internal) {
   int foo() => 1;
 }
+
+extension type const C(int Function(int) raw) {
+  const C.foo42() : this(_foo42);
+  const C.foo43() : this(foo43);
+}
+
+int _foo42(int x) => x + 42;
diff --git a/pkg/dynamic_modules/test/data/extension_type2/shared/shared_a.dart b/pkg/dynamic_modules/test/data/extension_type2/shared/shared_a.dart
index 2cc582b..0ab8808 100644
--- a/pkg/dynamic_modules/test/data/extension_type2/shared/shared_a.dart
+++ b/pkg/dynamic_modules/test/data/extension_type2/shared/shared_a.dart
@@ -3,3 +3,5 @@
 // BSD-style license that can be found in the LICENSE file.
 
 class A {}
+
+int foo43(int x) => x + 43;
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 193991b..c3e550a 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
@@ -62,6 +62,15 @@
         experimentReleasedVersion: const Version(2, 18),
       );
 
+  static const ExperimentalFlag anonymousMethods = const ExperimentalFlag(
+    name: 'anonymous-methods',
+    isEnabledByDefault: false,
+    isExpired: false,
+    enabledVersion: defaultLanguageVersion,
+    experimentEnabledVersion: defaultLanguageVersion,
+    experimentReleasedVersion: defaultLanguageVersion,
+  );
+
   static const ExperimentalFlag augmentations = const ExperimentalFlag(
     name: 'augmentations',
     isEnabledByDefault: false,
@@ -125,15 +134,6 @@
     experimentReleasedVersion: defaultLanguageVersion,
   );
 
-  static const ExperimentalFlag declaringConstructors = const ExperimentalFlag(
-    name: 'declaring-constructors',
-    isEnabledByDefault: false,
-    isExpired: false,
-    enabledVersion: defaultLanguageVersion,
-    experimentEnabledVersion: defaultLanguageVersion,
-    experimentReleasedVersion: defaultLanguageVersion,
-  );
-
   static const ExperimentalFlag digitSeparators = const ExperimentalFlag(
     name: 'digit-separators',
     isEnabledByDefault: true,
@@ -314,6 +314,15 @@
     experimentReleasedVersion: const Version(3, 0),
   );
 
+  static const ExperimentalFlag primaryConstructors = const ExperimentalFlag(
+    name: 'primary-constructors',
+    isEnabledByDefault: false,
+    isExpired: false,
+    enabledVersion: defaultLanguageVersion,
+    experimentEnabledVersion: defaultLanguageVersion,
+    experimentReleasedVersion: defaultLanguageVersion,
+  );
+
   static const ExperimentalFlag privateNamedParameters = const ExperimentalFlag(
     name: 'private-named-parameters',
     isEnabledByDefault: false,
@@ -518,6 +527,10 @@
         ExperimentalFlag.alternativeInvalidationStrategy,
       );
 
+  GlobalFeature? _anonymousMethods;
+  GlobalFeature get anonymousMethods => _anonymousMethods ??=
+      _computeGlobalFeature(ExperimentalFlag.anonymousMethods);
+
   GlobalFeature? _augmentations;
   GlobalFeature get augmentations =>
       _augmentations ??= _computeGlobalFeature(ExperimentalFlag.augmentations);
@@ -548,10 +561,6 @@
   GlobalFeature get dataAssets =>
       _dataAssets ??= _computeGlobalFeature(ExperimentalFlag.dataAssets);
 
-  GlobalFeature? _declaringConstructors;
-  GlobalFeature get declaringConstructors => _declaringConstructors ??=
-      _computeGlobalFeature(ExperimentalFlag.declaringConstructors);
-
   GlobalFeature? _digitSeparators;
   GlobalFeature get digitSeparators => _digitSeparators ??=
       _computeGlobalFeature(ExperimentalFlag.digitSeparators);
@@ -632,6 +641,10 @@
   GlobalFeature get patterns =>
       _patterns ??= _computeGlobalFeature(ExperimentalFlag.patterns);
 
+  GlobalFeature? _primaryConstructors;
+  GlobalFeature get primaryConstructors => _primaryConstructors ??=
+      _computeGlobalFeature(ExperimentalFlag.primaryConstructors);
+
   GlobalFeature? _privateNamedParameters;
   GlobalFeature get privateNamedParameters => _privateNamedParameters ??=
       _computeGlobalFeature(ExperimentalFlag.privateNamedParameters);
@@ -712,6 +725,14 @@
             libraryVersion,
           );
 
+  LibraryFeature? _anonymousMethods;
+  LibraryFeature get anonymousMethods =>
+      _anonymousMethods ??= globalFeatures._computeLibraryFeature(
+        ExperimentalFlag.anonymousMethods,
+        canonicalUri,
+        libraryVersion,
+      );
+
   LibraryFeature? _augmentations;
   LibraryFeature get augmentations =>
       _augmentations ??= globalFeatures._computeLibraryFeature(
@@ -768,14 +789,6 @@
         libraryVersion,
       );
 
-  LibraryFeature? _declaringConstructors;
-  LibraryFeature get declaringConstructors =>
-      _declaringConstructors ??= globalFeatures._computeLibraryFeature(
-        ExperimentalFlag.declaringConstructors,
-        canonicalUri,
-        libraryVersion,
-      );
-
   LibraryFeature? _digitSeparators;
   LibraryFeature get digitSeparators =>
       _digitSeparators ??= globalFeatures._computeLibraryFeature(
@@ -936,6 +949,14 @@
         libraryVersion,
       );
 
+  LibraryFeature? _primaryConstructors;
+  LibraryFeature get primaryConstructors =>
+      _primaryConstructors ??= globalFeatures._computeLibraryFeature(
+        ExperimentalFlag.primaryConstructors,
+        canonicalUri,
+        libraryVersion,
+      );
+
   LibraryFeature? _privateNamedParameters;
   LibraryFeature get privateNamedParameters =>
       _privateNamedParameters ??= globalFeatures._computeLibraryFeature(
@@ -1061,6 +1082,8 @@
     shared.ExperimentalFlag experimentalFlag,
   ) {
     switch (experimentalFlag) {
+      case shared.ExperimentalFlag.anonymousMethods:
+        return anonymousMethods;
       case shared.ExperimentalFlag.augmentations:
         return augmentations;
       case shared.ExperimentalFlag.classModifiers:
@@ -1075,8 +1098,6 @@
         return controlFlowCollections;
       case shared.ExperimentalFlag.dataAssets:
         return dataAssets;
-      case shared.ExperimentalFlag.declaringConstructors:
-        return declaringConstructors;
       case shared.ExperimentalFlag.digitSeparators:
         return digitSeparators;
       case shared.ExperimentalFlag.dotShorthands:
@@ -1117,6 +1138,8 @@
         return nullAwareElements;
       case shared.ExperimentalFlag.patterns:
         return patterns;
+      case shared.ExperimentalFlag.primaryConstructors:
+        return primaryConstructors;
       case shared.ExperimentalFlag.privateNamedParameters:
         return privateNamedParameters;
       case shared.ExperimentalFlag.recordUse:
@@ -1155,6 +1178,8 @@
   switch (flag) {
     case "alternative-invalidation-strategy":
       return ExperimentalFlag.alternativeInvalidationStrategy;
+    case "anonymous-methods":
+      return ExperimentalFlag.anonymousMethods;
     case "augmentations":
       return ExperimentalFlag.augmentations;
     case "class-modifiers":
@@ -1169,8 +1194,6 @@
       return ExperimentalFlag.controlFlowCollections;
     case "data-assets":
       return ExperimentalFlag.dataAssets;
-    case "declaring-constructors":
-      return ExperimentalFlag.declaringConstructors;
     case "digit-separators":
       return ExperimentalFlag.digitSeparators;
     case "dot-shorthands":
@@ -1211,6 +1234,8 @@
       return ExperimentalFlag.nullAwareElements;
     case "patterns":
       return ExperimentalFlag.patterns;
+    case "primary-constructors":
+      return ExperimentalFlag.primaryConstructors;
     case "private-named-parameters":
       return ExperimentalFlag.privateNamedParameters;
     case "record-use":
@@ -1248,6 +1273,8 @@
 final Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
   ExperimentalFlag.alternativeInvalidationStrategy:
       ExperimentalFlag.alternativeInvalidationStrategy.isEnabledByDefault,
+  ExperimentalFlag.anonymousMethods:
+      ExperimentalFlag.anonymousMethods.isEnabledByDefault,
   ExperimentalFlag.augmentations:
       ExperimentalFlag.augmentations.isEnabledByDefault,
   ExperimentalFlag.classModifiers:
@@ -1261,8 +1288,6 @@
   ExperimentalFlag.controlFlowCollections:
       ExperimentalFlag.controlFlowCollections.isEnabledByDefault,
   ExperimentalFlag.dataAssets: ExperimentalFlag.dataAssets.isEnabledByDefault,
-  ExperimentalFlag.declaringConstructors:
-      ExperimentalFlag.declaringConstructors.isEnabledByDefault,
   ExperimentalFlag.digitSeparators:
       ExperimentalFlag.digitSeparators.isEnabledByDefault,
   ExperimentalFlag.dotShorthands:
@@ -1299,6 +1324,8 @@
   ExperimentalFlag.nullAwareElements:
       ExperimentalFlag.nullAwareElements.isEnabledByDefault,
   ExperimentalFlag.patterns: ExperimentalFlag.patterns.isEnabledByDefault,
+  ExperimentalFlag.primaryConstructors:
+      ExperimentalFlag.primaryConstructors.isEnabledByDefault,
   ExperimentalFlag.privateNamedParameters:
       ExperimentalFlag.privateNamedParameters.isEnabledByDefault,
   ExperimentalFlag.recordUse: ExperimentalFlag.recordUse.isEnabledByDefault,
@@ -1335,6 +1362,7 @@
 ExperimentalFlag fromSharedExperimentalFlag(
   shared.ExperimentalFlag flag,
 ) => switch (flag) {
+  shared.ExperimentalFlag.anonymousMethods => ExperimentalFlag.anonymousMethods,
   shared.ExperimentalFlag.augmentations => ExperimentalFlag.augmentations,
   shared.ExperimentalFlag.classModifiers => ExperimentalFlag.classModifiers,
   shared.ExperimentalFlag.constFunctions => ExperimentalFlag.constFunctions,
@@ -1345,8 +1373,6 @@
   shared.ExperimentalFlag.controlFlowCollections =>
     ExperimentalFlag.controlFlowCollections,
   shared.ExperimentalFlag.dataAssets => ExperimentalFlag.dataAssets,
-  shared.ExperimentalFlag.declaringConstructors =>
-    ExperimentalFlag.declaringConstructors,
   shared.ExperimentalFlag.digitSeparators => ExperimentalFlag.digitSeparators,
   shared.ExperimentalFlag.dotShorthands => ExperimentalFlag.dotShorthands,
   shared.ExperimentalFlag.enhancedEnums => ExperimentalFlag.enhancedEnums,
@@ -1372,6 +1398,8 @@
   shared.ExperimentalFlag.nullAwareElements =>
     ExperimentalFlag.nullAwareElements,
   shared.ExperimentalFlag.patterns => ExperimentalFlag.patterns,
+  shared.ExperimentalFlag.primaryConstructors =>
+    ExperimentalFlag.primaryConstructors,
   shared.ExperimentalFlag.privateNamedParameters =>
     ExperimentalFlag.privateNamedParameters,
   shared.ExperimentalFlag.recordUse => ExperimentalFlag.recordUse,
diff --git a/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart b/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
index 502bf83..c8fac83 100644
--- a/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
+++ b/pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
@@ -699,12 +699,15 @@
 ///     int Extension|method(int #this) => #this;
 ///
 /// where '#this' is the synthetic "extension this" parameter.
-bool isExtensionThis(VariableDeclaration node) {
+bool isExtensionThis(ExpressionVariable node) {
   assert(
-    node.isLowered || node.name == null || !isExtensionThisName(node.name),
-    "$node has name ${node.name} and node.isLowered = ${node.isLowered}",
+    node.isLowered ||
+        node.cosmeticName == null ||
+        !isExtensionThisName(node.cosmeticName),
+    "$node has name ${node.cosmeticName} and "
+    "node.isLowered = ${node.isLowered}",
   );
-  return node.isLowered && isExtensionThisName(node.name);
+  return node.isLowered && isExtensionThisName(node.cosmeticName);
 }
 
 /// Name used for synthetic 'this' variables in extension instance members and
diff --git a/pkg/front_end/lib/src/base/identifiers.dart b/pkg/front_end/lib/src/base/identifiers.dart
index fb76ae4..acd5fba 100644
--- a/pkg/front_end/lib/src/base/identifiers.dart
+++ b/pkg/front_end/lib/src/base/identifiers.dart
@@ -34,6 +34,45 @@
   TypeName get typeName;
 }
 
+class OmittedIdentifier implements Identifier {
+  @override
+  final Token token;
+
+  OmittedIdentifier(this.token);
+
+  int get charOffset => token.charOffset;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  int get firstOffset => charOffset;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  Expression? get initializer => null;
+
+  @override
+  String get name => '';
+
+  @override
+  int get nameOffset => charOffset;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  Operator? get operator => null;
+
+  @override
+  int get qualifierOffset => charOffset;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  TypeName get typeName {
+    return unsupported("typeName", charOffset, null);
+  }
+
+  @override
+  String toString() => "OmittedIdentifier()";
+}
+
 abstract class IdentifierImpl implements Identifier {
   @override
   final Token token;
@@ -100,7 +139,6 @@
   @override
   String get name => operator.text;
 
-  // Coverage-ignore(suite): Not run.
   int get charOffset => token.charOffset;
 
   @override
diff --git a/pkg/front_end/lib/src/base/incremental_compiler.dart b/pkg/front_end/lib/src/base/incremental_compiler.dart
index 91742e4..230fe53 100644
--- a/pkg/front_end/lib/src/base/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/base/incremental_compiler.dart
@@ -34,7 +34,9 @@
         DartType,
         DynamicType,
         Expression,
+        ExpressionVariable,
         ExtensionType,
+        Field,
         FunctionNode,
         InterfaceType,
         Library,
@@ -43,6 +45,7 @@
         Name,
         NamedNode,
         Node,
+        Nullability,
         Procedure,
         ProcedureKind,
         Reference,
@@ -51,13 +54,12 @@
         Supertype,
         TreeNode,
         TypeParameter,
+        TypeParameterType,
         VariableDeclaration,
         VariableGet,
         VariableSet,
         VisitorDefault,
-        VisitorVoidMixin,
-        TypeParameterType,
-        Field;
+        VisitorVoidMixin;
 import 'package:kernel/kernel.dart' as kernel show Combinator;
 import 'package:kernel/reference_from_index.dart';
 import 'package:kernel/target/changed_structure_notifier.dart'
@@ -330,6 +332,10 @@
             reusedResult,
             c,
             uriTranslator,
+            context
+                .options
+                .target
+                .incrementalCompilerIncludeMixinApplicationInvalidatedLibraries,
           );
       recorderForTesting?.recordRebuildBodiesCount(
         experimentalInvalidation?.missingSources.length ?? 0,
@@ -526,6 +532,14 @@
             c,
             cleanedUpBuilders: cleanedUpBuilders,
           );
+      if (experimentalInvalidation != null &&
+          experimentalInvalidation.invalidatedMixinApplicationLibraries !=
+              null) {
+        outputLibraries = {
+          ...outputLibraries,
+          ...experimentalInvalidation.invalidatedMixinApplicationLibraries!,
+        }.toList();
+      }
       List<String> problemsAsJson = _componentProblems.reissueProblems(
         context,
         currentKernelTarget,
@@ -1116,6 +1130,7 @@
     ReusageResult reusedResult,
     CompilerContext c,
     UriTranslator uriTranslator,
+    bool collectMixinsToo,
   ) async {
     Set<DillLibraryBuilder>? rebuildBodies;
     Set<DillLibraryBuilder> originalNotReusedLibraries;
@@ -1230,6 +1245,7 @@
     // procedures, if the changed file is used as a mixin anywhere else
     // we can't only recompile the changed file.
     // TODO(jensj): Check for mixins in a smarter and faster way.
+    Set<Library>? invalidatedMixinApplicationLibraries;
     if (!skipExperimentalInvalidationChecksForTesting) {
       for (LibraryBuilder builder in reusedResult.notReusedLibraries) {
         if (missingSources!.contains(builder.fileUri)) {
@@ -1254,6 +1270,13 @@
               return null;
             }
           }
+          if (collectMixinsToo &&
+              c.mixedInClass != null &&
+              missingSources.contains(c.mixedInClass!.fileUri)) {
+            (invalidatedMixinApplicationLibraries ??= {}).add(
+              c.enclosingLibrary,
+            );
+          }
         }
       }
 
@@ -1322,6 +1345,7 @@
       rebuildBodies,
       originalNotReusedLibraries,
       missingSources,
+      invalidatedMixinApplicationLibraries,
     );
   }
 
@@ -1835,6 +1859,7 @@
       LibraryBuilder libraryBuilder = compilationUnit.libraryBuilder;
       List<VariableDeclarationImpl> extraKnownVariables = [];
       String? usedMethodName = methodName;
+      Substitution? substitution;
       if (scriptUri != null && offset != TreeNode.noOffset) {
         Uri? scriptUriAsUri = Uri.tryParse(scriptUri);
         if (scriptUriAsUri != null) {
@@ -1875,23 +1900,11 @@
             );
           }
 
-          Map<TypeParameter, TypeParameterType> substitutionMap = {};
-          Map<String, TypeParameter> typeDefinitionNamesMap = {};
-          for (TypeParameter typeDefinition in typeDefinitions) {
-            if (typeDefinition.name != null) {
-              typeDefinitionNamesMap[typeDefinition.name!] = typeDefinition;
-            }
-          }
-          for (TypeParameter typeParameter in foundScope.typeParameters) {
-            TypeParameter? match = typeDefinitionNamesMap[typeParameter.name];
-            if (match != null) {
-              substitutionMap[typeParameter] = new TypeParameterType(
-                match,
-                match.computeNullabilityFromBound(),
+          substitution =
+              _calculateExpressionEvaluationTypeParameterSubstitution(
+                typeDefinitions,
+                foundScope.typeParameters,
               );
-            }
-          }
-          Substitution substitution = Substitution.fromMap(substitutionMap);
 
           final bool alwaysInlineConstants = lastGoodKernelTarget
               .backendTarget
@@ -1947,6 +1960,22 @@
               usedDefinitions[def.key] = substitution.substituteType(
                 def.value.type,
               );
+            } else if (existingType is InterfaceType &&
+                existingType.classNode.enclosingLibrary.importUri.isScheme(
+                  "dart",
+                )) {
+              // The VM tells us about a type from the platform.
+              // We use the static type instead because the compiler for
+              // instance special case int in certain places which is - by the
+              // VM - often described as _Smi.
+              DartType usedType = substitution.substituteType(def.value.type);
+              if (existingType.nullability == Nullability.nonNullable &&
+                  usedType.nullability == Nullability.nullable) {
+                // If a statically nullable type is known to be non-null,
+                // we keep that information though.
+                usedType = usedType.toNonNull();
+              }
+              usedDefinitions[def.key] = usedType;
             }
           }
         }
@@ -2017,7 +2046,19 @@
                   // If we setup the extensionType (and later the
                   // `extensionThis`) we should also set the type correctly
                   // (at least in a non-static setting).
-                  usedDefinitions[syntheticThisName] = positionals.first.type;
+                  if (substitution == null || substitution.isEmpty) {
+                    // Re-do substitutions if the old one is empty - in case the
+                    // finding of scope didn't find the right thing (e.g.
+                    // sometimes the VM claims to be on the offset for a method
+                    // name while having data as if it is inside the method).
+                    substitution =
+                        _calculateExpressionEvaluationTypeParameterSubstitution(
+                          typeDefinitions,
+                          subBuilder.invokeTarget?.function?.typeParameters,
+                        );
+                  }
+                  usedDefinitions[syntheticThisName] = substitution
+                      .substituteType(positionals.first.type);
                 }
                 isStatic = false;
               }
@@ -2251,6 +2292,32 @@
   }
 
   // Coverage-ignore(suite): Not run.
+  Substitution _calculateExpressionEvaluationTypeParameterSubstitution(
+    List<TypeParameter> typeDefinitions,
+    List<TypeParameter>? typeParameters,
+  ) {
+    Map<TypeParameter, TypeParameterType> substitutionMap = {};
+    Map<String, TypeParameter> typeDefinitionNamesMap = {};
+    for (TypeParameter typeDefinition in typeDefinitions) {
+      if (typeDefinition.name != null) {
+        typeDefinitionNamesMap[typeDefinition.name!] = typeDefinition;
+      }
+    }
+    if (typeParameters != null) {
+      for (TypeParameter typeParameter in typeParameters) {
+        TypeParameter? match = typeDefinitionNamesMap[typeParameter.name];
+        if (match != null) {
+          substitutionMap[typeParameter] = new TypeParameterType(
+            match,
+            match.computeNullabilityFromBound(),
+          );
+        }
+      }
+    }
+    return Substitution.fromMap(substitutionMap);
+  }
+
+  // Coverage-ignore(suite): Not run.
   bool _packagesEqual(Package? a, Package? b) {
     if (a == null || b == null) return false;
     if (a.name != b.name) return false;
@@ -2525,7 +2592,7 @@
 
   ExpressionInferenceResult _returnKnownVariableUnavailable(
     Expression node,
-    VariableDeclaration variable,
+    ExpressionVariable variable,
     ProblemReporting problemReporting,
     CompilerContext compilerContext,
     Uri fileUri,
@@ -2536,10 +2603,10 @@
         compilerContext: compilerContext,
         expression: node,
         message: codeExpressionEvaluationKnownVariableUnavailable
-            .withArgumentsOld(variable.name!),
+            .withArgumentsOld(variable.cosmeticName!),
         fileUri: fileUri,
         fileOffset: node.fileOffset,
-        length: variable.name!.length,
+        length: variable.cosmeticName!.length,
         errorHasBeenReported: false,
         includeExpression: false,
       ),
@@ -2682,11 +2749,13 @@
   final Set<DillLibraryBuilder> rebuildBodies;
   final Set<DillLibraryBuilder> originalNotReusedLibraries;
   final Set<Uri> missingSources;
+  final Set<Library>? invalidatedMixinApplicationLibraries;
 
   ExperimentalInvalidation(
     this.rebuildBodies,
     this.originalNotReusedLibraries,
     this.missingSources,
+    this.invalidatedMixinApplicationLibraries,
   );
 }
 
diff --git a/pkg/front_end/lib/src/base/modifiers.dart b/pkg/front_end/lib/src/base/modifiers.dart
index 8cbf027..8993050 100644
--- a/pkg/front_end/lib/src/base/modifiers.dart
+++ b/pkg/front_end/lib/src/base/modifiers.dart
@@ -57,6 +57,10 @@
 /// super-parameter initializers.
 const int _superInitializingFormalMask = _declaresConstConstructorMask << 1;
 
+/// Not a modifier, used by formal parameters to track if they are declaring
+/// parameters.
+const int _declaringParameterMask = _superInitializingFormalMask << 1;
+
 /// Extension type that encodes a set of modifiers as a bit mask.
 extension type const Modifiers(int _mask) implements Object {
   /// The empty set of modifiers.
@@ -477,6 +481,23 @@
   bool get isSuperInitializingFormal =>
       (_mask & _superInitializingFormalMask) != 0;
 
+  /// The set of modifiers containing only the synthetic modifier used to denote
+  /// that a parameter is a declaring parameter.
+  ///
+  /// ```
+  /// DartDocTest(
+  ///     Modifiers.DeclaringParameter.isDeclaringParameter, true)
+  /// DartDocTest(Modifiers.DeclaringParameter.isEmpty, false)
+  /// DartDocTest(Modifiers.DeclaringParameter.isAbstract, false)
+  /// ```
+  static const Modifiers DeclaringParameter = const Modifiers(
+    _declaringParameterMask,
+  );
+
+  /// Returns `true` if the set of modifiers contains the synthetic modifier
+  /// used to denote that a parameter is a declaring parameter.
+  bool get isDeclaringParameter => (_mask & _declaringParameterMask) != 0;
+
   /// Returns `true` if this set of modifiers contains any syntactic modifiers.
   ///
   /// If [ignoreRequired] is `true`, `required` is ignored. If
@@ -531,7 +552,8 @@
             _initializingFormalMask |
             _declaresConstConstructorMask |
             _namedMixinApplicationMask |
-            _superInitializingFormalMask);
+            _superInitializingFormalMask |
+            _declaringParameterMask);
     if (ignoreRequired) {
       mask &= ~_requiredMask;
     }
diff --git a/pkg/front_end/lib/src/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/builder/formal_parameter_builder.dart
index 200fdb8..48cd51f 100644
--- a/pkg/front_end/lib/src/builder/formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/builder/formal_parameter_builder.dart
@@ -27,11 +27,10 @@
 import '../source/source_constructor_builder.dart';
 import '../source/source_factory_builder.dart';
 import '../source/source_library_builder.dart';
+import '../source/source_member_builder.dart';
 import '../source/source_property_builder.dart';
 import 'builder.dart';
-import 'constructor_builder.dart';
 import 'declaration_builders.dart';
-import 'member_builder.dart';
 import 'omitted_type_builder.dart';
 import 'property_builder.dart';
 import 'type_builder.dart';
@@ -73,6 +72,20 @@
   @override
   final String name;
 
+  /// If this parameter is a private named parameter that refers to an instance
+  /// field, then this is the corresponding public name for the parameter.
+  ///
+  /// For example:
+  ///
+  ///     class C {
+  ///       int? _x;
+  ///       C({this._x});
+  ///     }
+  ///
+  /// Here, [publicName] for `_x` will be `x`. If the formal parameter isn't a
+  /// private named parameter that refers to a field, then this is `null`.
+  final String? publicName;
+
   @override
   final Uri fileUri;
 
@@ -87,7 +100,7 @@
   ///
   /// This is stored until outlines have been built through
   /// [buildOutlineExpressions].
-  Token? initializerToken;
+  Token? _initializerToken;
 
   bool initializerWasInferred = false;
 
@@ -111,9 +124,12 @@
     this.fileOffset, {
     required this.fileUri,
     this.isExtensionThis = false,
+    Token? initializerToken,
     required this.hasImmediatelyDeclaredInitializer,
     this.isWildcard = false,
-  }) : this.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer {
+    this.publicName,
+  }) : this.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer,
+       this._initializerToken = initializerToken {
     type.registerInferredTypeListener(this);
   }
 
@@ -171,10 +187,18 @@
     if (variable == null) {
       bool isTypeOmitted = type is OmittedTypeBuilder;
       DartType? builtType = type.build(library, TypeUse.parameterType);
+
+      String? variableName = switch (name) {
+        noNameSentinel => null,
+        // If the parameter is a private named parameter, use the public name
+        // for the corresponding variable.
+        _ when publicName != null => publicName,
+        _ => name,
+      };
+
       variable = new VariableDeclarationImpl(
-        name == noNameSentinel ? null : name,
-        // `null` is used in [VariableDeclarationImpl] to signal an omitted
-        // type.
+        variableName,
+        // [VariableDeclarationImpl] uses `null` to signal an omitted type.
         type: isTypeOmitted ? null : builtType,
         isFinal: modifiers.isFinal,
         isConst: false,
@@ -207,7 +231,9 @@
       fileOffset,
       fileUri: fileUri,
       isExtensionThis: isExtensionThis,
+      initializerToken: _takeInitializerToken(),
       hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer,
+      publicName: publicName,
     )..variable = variable;
   }
 
@@ -222,6 +248,7 @@
         fileUri: fileUri,
         isExtensionThis: isExtensionThis,
         hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer,
+        publicName: publicName,
       )..variable = variable;
     } else if (isSuperInitializingFormal) {
       return new FormalParameterBuilder(
@@ -233,6 +260,7 @@
         fileUri: fileUri,
         isExtensionThis: isExtensionThis,
         hasImmediatelyDeclaredInitializer: hasImmediatelyDeclaredInitializer,
+        publicName: publicName,
       )..variable = variable;
     } else {
       return this;
@@ -259,8 +287,8 @@
     }
   }
 
-  static bool needsDefaultValuesBuiltAsOutlineExpressions(
-    MemberBuilder memberBuilder,
+  static bool _needsDefaultValuesBuiltAsOutlineExpressions(
+    SourceMemberBuilder memberBuilder,
   ) {
     // For modular compilation we need to include default values for optional
     // and named parameters in several cases:
@@ -271,26 +299,41 @@
     //   in mixin applications, and
     // * for factories, to uphold the invariant that optional parameters always
     //   have default values, even during modular compilation.
-    if (memberBuilder is ConstructorBuilder) {
+    if (memberBuilder is SourceConstructorBuilder) {
       return true;
     } else if (memberBuilder is SourceFactoryBuilder) {
       return true;
     } else {
-      // Coverage-ignore-block(suite): Not run.
       return memberBuilder.isClassInstanceMember;
     }
   }
 
+  /// Returns the [_initializerToken] field and clears it.
+  ///
+  /// This is used to transfer ownership of the token to the receiver. Tokens
+  /// need to be cleared during the outline phase to avoid holding the token
+  /// stream in memory.
+  Token? _takeInitializerToken() {
+    Token? initializerToken = _initializerToken;
+    _initializerToken = null;
+    return initializerToken;
+  }
+
   /// Builds the default value from this [initializerToken] if this is a
   /// formal parameter on a const constructor or instance method.
-  void buildOutlineExpressions(
-    SourceLibraryBuilder libraryBuilder,
-    DeclarationBuilder? declarationBuilder, {
+  void buildOutlineExpressions({
+    required SourceLibraryBuilder libraryBuilder,
+    required DeclarationBuilder? declarationBuilder,
+    required SourceMemberBuilder memberBuilder,
     required ExtensionScope extensionScope,
     required LookupScope scope,
-    required bool buildDefaultValue,
   }) {
-    if (buildDefaultValue) {
+    // For const constructors we need to include default parameter values
+    // into the outline. For all other formals we need to call
+    // buildOutlineExpressions to clear initializerToken to prevent
+    // consuming too much memory.
+    Token? initializerToken = _takeInitializerToken();
+    if (_needsDefaultValuesBuiltAsOutlineExpressions(memberBuilder)) {
       if (initializerToken != null) {
         BodyBuilderContext bodyBuilderContext = new ParameterBodyBuilderContext(
           libraryBuilder,
@@ -305,7 +348,7 @@
           extensionScope: extensionScope,
           scope: scope,
           fileUri: fileUri,
-          initializerToken: initializerToken!,
+          initializerToken: initializerToken,
           declaredType: variable!.type,
           hasDeclaredInitializer: hasDeclaredInitializer,
         );
@@ -319,7 +362,6 @@
         variable!.initializer = new NullLiteral()..parent = variable;
       }
     }
-    initializerToken = null;
   }
 
   @override
diff --git a/pkg/front_end/lib/src/builder/variable_builder.dart b/pkg/front_end/lib/src/builder/variable_builder.dart
index 6c15162c..693ef7a 100644
--- a/pkg/front_end/lib/src/builder/variable_builder.dart
+++ b/pkg/front_end/lib/src/builder/variable_builder.dart
@@ -2,13 +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:kernel/ast.dart' show VariableDeclaration;
+import 'package:kernel/ast.dart' show ExpressionVariable;
 
 import '../base/lookup_result.dart';
 import '../builder/builder.dart';
 
 abstract class VariableBuilder implements Builder, LookupResult {
-  VariableDeclaration? get variable;
+  ExpressionVariable? get variable;
 
   bool get isConst;
 
diff --git a/pkg/front_end/lib/src/codes/cfe_codes_generated.dart b/pkg/front_end/lib/src/codes/cfe_codes_generated.dart
index e86e12b..274c7eb 100644
--- a/pkg/front_end/lib/src/codes/cfe_codes_generated.dart
+++ b/pkg/front_end/lib/src/codes/cfe_codes_generated.dart
@@ -13938,6 +13938,35 @@
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+  Message Function(String name),
+  Message Function({required String name})
+>
+codePrivateNamedParameterDuplicatePublicName = const Template(
+  "PrivateNamedParameterDuplicatePublicName",
+  withArgumentsOld: _withArgumentsOldPrivateNamedParameterDuplicatePublicName,
+  withArguments: _withArgumentsPrivateNamedParameterDuplicatePublicName,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsPrivateNamedParameterDuplicatePublicName({
+  required String name,
+}) {
+  var name_0 = conversions.validateString(name);
+  return new Message(
+    codePrivateNamedParameterDuplicatePublicName,
+    problemMessage:
+        """The corresponding public name '${name_0}' is already the name of another parameter.""",
+    arguments: {'name': name},
+  );
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsOldPrivateNamedParameterDuplicatePublicName(
+  String name,
+) => _withArgumentsPrivateNamedParameterDuplicatePublicName(name: name);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode
 codePrivateNamedParameterWithoutPublicName = const MessageCode(
   "PrivateNamedParameterWithoutPublicName",
diff --git a/pkg/front_end/lib/src/fragment/constructor/declaration.dart b/pkg/front_end/lib/src/fragment/constructor/declaration.dart
index 36c0ce9..08999b5 100644
--- a/pkg/front_end/lib/src/fragment/constructor/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/constructor/declaration.dart
@@ -614,6 +614,7 @@
   void _buildTypeParametersAndFormalsForOutlineExpressions({
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder declarationBuilder,
+    required SourceConstructorBuilder constructorBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required ClassHierarchy classHierarchy,
   });
@@ -644,6 +645,7 @@
     _buildTypeParametersAndFormalsForOutlineExpressions(
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      constructorBuilder: constructorBuilder,
       bodyBuilderContext: bodyBuilderContext,
       classHierarchy: classHierarchy,
     );
@@ -795,6 +797,7 @@
   void _buildTypeParametersAndFormals({
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder declarationBuilder,
+    required SourceConstructorBuilder constructorBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required ClassHierarchy classHierarchy,
     required ExtensionScope extensionScope,
@@ -811,17 +814,13 @@
     }
 
     if (formals != null) {
-      // For const constructors we need to include default parameter values
-      // into the outline. For all other formals we need to call
-      // buildOutlineExpressions to clear initializerToken to prevent
-      // consuming too much memory.
       for (FormalParameterBuilder formal in formals!) {
         formal.buildOutlineExpressions(
-          libraryBuilder,
-          declarationBuilder,
+          libraryBuilder: libraryBuilder,
+          declarationBuilder: declarationBuilder,
+          memberBuilder: constructorBuilder,
           extensionScope: extensionScope,
           scope: typeParameterScope,
-          buildDefaultValue: true,
         );
       }
     }
@@ -1008,12 +1007,14 @@
   void _buildTypeParametersAndFormalsForOutlineExpressions({
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder declarationBuilder,
+    required SourceConstructorBuilder constructorBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required ClassHierarchy classHierarchy,
   }) {
     _buildTypeParametersAndFormals(
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      constructorBuilder: constructorBuilder,
       bodyBuilderContext: bodyBuilderContext,
       classHierarchy: classHierarchy,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
@@ -1155,12 +1156,14 @@
   void _buildTypeParametersAndFormalsForOutlineExpressions({
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder declarationBuilder,
+    required SourceConstructorBuilder constructorBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required ClassHierarchy classHierarchy,
   }) {
     _buildTypeParametersAndFormals(
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      constructorBuilder: constructorBuilder,
       bodyBuilderContext: bodyBuilderContext,
       classHierarchy: classHierarchy,
       extensionScope: _extensionScope,
@@ -1243,6 +1246,7 @@
   void _buildTypeParametersAndFormals({
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder declarationBuilder,
+    required SourceConstructorBuilder constructorBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required ClassHierarchy classHierarchy,
     required ExtensionScope extensionScope,
@@ -1265,11 +1269,11 @@
       // consuming too much memory.
       for (FormalParameterBuilder formal in formals!) {
         formal.buildOutlineExpressions(
-          libraryBuilder,
-          declarationBuilder,
+          libraryBuilder: libraryBuilder,
+          declarationBuilder: declarationBuilder,
+          memberBuilder: constructorBuilder,
           extensionScope: extensionScope,
           scope: typeParameterScope,
-          buildDefaultValue: true,
         );
       }
     }
@@ -1291,9 +1295,7 @@
     returnType.registerInferredTypeListener(this);
     if (formals != null) {
       for (FormalParameterBuilder formal in formals!) {
-        if (formal.isInitializingFormal ||
-            // Coverage-ignore(suite): Not run.
-            formal.isSuperInitializingFormal) {
+        if (formal.isInitializingFormal || formal.isSuperInitializingFormal) {
           formal.type.registerInferable(inferable);
         }
       }
@@ -1373,12 +1375,14 @@
   void _buildTypeParametersAndFormalsForOutlineExpressions({
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder declarationBuilder,
+    required SourceConstructorBuilder constructorBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required ClassHierarchy classHierarchy,
   }) {
     _buildTypeParametersAndFormals(
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      constructorBuilder: constructorBuilder,
       bodyBuilderContext: bodyBuilderContext,
       classHierarchy: classHierarchy,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
diff --git a/pkg/front_end/lib/src/fragment/constructor/encoding.dart b/pkg/front_end/lib/src/fragment/constructor/encoding.dart
index eec419d..9cbb59f 100644
--- a/pkg/front_end/lib/src/fragment/constructor/encoding.dart
+++ b/pkg/front_end/lib/src/fragment/constructor/encoding.dart
@@ -825,11 +825,10 @@
   }
 
   @override
-  // Coverage-ignore(suite): Not run.
   void visitInvalidInitializer(InvalidInitializer node) {
     statements.add(
       new ExpressionStatement(
-        new InvalidExpression(null)..fileOffset = node.fileOffset,
+        new InvalidExpression(node.message)..fileOffset = node.fileOffset,
       )..fileOffset,
     );
   }
diff --git a/pkg/front_end/lib/src/fragment/declaration.dart b/pkg/front_end/lib/src/fragment/declaration.dart
index dfa13f3b..ed803ad 100644
--- a/pkg/front_end/lib/src/fragment/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/declaration.dart
@@ -54,11 +54,9 @@
 
   UriOffsetLength get uriOffset;
 
-  void addPrimaryConstructorField(PrimaryConstructorFieldFragment fragment) {
-    throw new UnsupportedError(
-      "Unexpected primary constructor field in $this.",
-    );
-  }
+  void registerPrimaryConstructorField(
+    PrimaryConstructorFieldFragment fragment,
+  ) {}
 
   void addEnumElement(EnumElementFragment fragment) {
     throw new UnsupportedError("Unexpected enum element in $this.");
diff --git a/pkg/front_end/lib/src/fragment/enum_element.dart b/pkg/front_end/lib/src/fragment/enum_element.dart
index 8452180..cd3fbc4e 100644
--- a/pkg/front_end/lib/src/fragment/enum_element.dart
+++ b/pkg/front_end/lib/src/fragment/enum_element.dart
@@ -183,7 +183,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {}
 
   @override
diff --git a/pkg/front_end/lib/src/fragment/extension_type.dart b/pkg/front_end/lib/src/fragment/extension_type.dart
index 046254b..c6474d2 100644
--- a/pkg/front_end/lib/src/fragment/extension_type.dart
+++ b/pkg/front_end/lib/src/fragment/extension_type.dart
@@ -62,7 +62,9 @@
       DeclarationFragmentKind.extensionTypeDeclaration;
 
   @override
-  void addPrimaryConstructorField(PrimaryConstructorFieldFragment fragment) {
+  void registerPrimaryConstructorField(
+    PrimaryConstructorFieldFragment fragment,
+  ) {
     primaryConstructorFields.add(fragment);
   }
 
diff --git a/pkg/front_end/lib/src/fragment/factory/declaration.dart b/pkg/front_end/lib/src/fragment/factory/declaration.dart
index 05bfa0b..2774c45 100644
--- a/pkg/front_end/lib/src/fragment/factory/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/factory/declaration.dart
@@ -232,19 +232,13 @@
     }
 
     if (_fragment.formals != null) {
-      // For const constructors we need to include default parameter values
-      // into the outline. For all other formals we need to call
-      // buildOutlineExpressions to clear initializerToken to prevent
-      // consuming too much memory.
       for (FormalParameterBuilder formal in _fragment.formals!) {
         formal.buildOutlineExpressions(
-          libraryBuilder,
-          factoryBuilder.declarationBuilder,
+          libraryBuilder: libraryBuilder,
+          declarationBuilder: factoryBuilder.declarationBuilder,
+          memberBuilder: factoryBuilder,
           extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
           scope: _fragment.typeParameterScope,
-          buildDefaultValue:
-              FormalParameterBuilder // force line break
-              .needsDefaultValuesBuiltAsOutlineExpressions(factoryBuilder),
         );
       }
     }
diff --git a/pkg/front_end/lib/src/fragment/field/class_member.dart b/pkg/front_end/lib/src/fragment/field/class_member.dart
index 07d703f..3d2e59b 100644
--- a/pkg/front_end/lib/src/fragment/field/class_member.dart
+++ b/pkg/front_end/lib/src/fragment/field/class_member.dart
@@ -6,17 +6,24 @@
 
 class _FieldClassMember implements ClassMember {
   final SourcePropertyBuilder _builder;
-  final FieldFragment _fragment;
+
+  @override
+  final UriOffsetLength uriOffset;
+
+  @override
+  final bool isStatic;
 
   @override
   final bool forSetter;
 
   Covariance? _covariance;
 
-  _FieldClassMember(this._builder, this._fragment, {required this.forSetter});
-
-  @override
-  UriOffsetLength get uriOffset => _fragment.uriOffset;
+  _FieldClassMember(
+    this._builder, {
+    required this.uriOffset,
+    required this.isStatic,
+    required this.forSetter,
+  });
 
   @override
   DeclarationBuilder get declarationBuilder => _builder.declarationBuilder!;
@@ -99,11 +106,8 @@
   ClassMember get interfaceMember => this;
 
   @override
-  // TODO(johnniwinther): This should not be determined by the builder. A
-  // property can have a non-abstract getter and an abstract setter or the
-  // reverse. With augmentations, abstract introductory declarations might even
-  // be implemented by augmentations.
-  bool get isAbstract => _fragment.modifiers.isAbstract;
+  bool get isAbstract =>
+      forSetter ? _builder.hasAbstractSetter : _builder.hasAbstractGetter;
 
   @override
   bool get isDuplicate => _builder.isDuplicate;
@@ -135,9 +139,6 @@
   bool get isSourceDeclaration => true;
 
   @override
-  bool get isStatic => _fragment.modifiers.isStatic;
-
-  @override
   bool get isSynthesized => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fragment/field/declaration.dart b/pkg/front_end/lib/src/fragment/field/declaration.dart
index a855b10..b5cfee4 100644
--- a/pkg/front_end/lib/src/fragment/field/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/field/declaration.dart
@@ -696,7 +696,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {}
 
   @override
@@ -716,7 +715,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {}
 
   @override
diff --git a/pkg/front_end/lib/src/fragment/field/encoding.dart b/pkg/front_end/lib/src/fragment/field/encoding.dart
index 226f739..6b52a0a 100644
--- a/pkg/front_end/lib/src/fragment/field/encoding.dart
+++ b/pkg/front_end/lib/src/fragment/field/encoding.dart
@@ -109,13 +109,75 @@
   void registerSuperCall();
 }
 
-class RegularFieldEncoding implements FieldEncoding {
-  final FieldFragment _fragment;
-  final bool isEnumElement;
+mixin RegularFieldEncodingMixin implements FieldEncoding {
   Field? _field;
   DartType _type = const DynamicType();
 
-  RegularFieldEncoding(this._fragment, {required this.isEnumElement}) {}
+  void _buildOutlineNode(
+    SourceLibraryBuilder libraryBuilder,
+    NameScheme nameScheme,
+    PropertyReferences references, {
+    required String name,
+    required bool isAbstractOrExternal,
+    required List<TypeParameter>? classTypeParameters,
+    required bool hasSetter,
+    required bool isLate,
+    required bool isFinal,
+    required bool isConst,
+    required bool isCovariant,
+    required Uri fileUri,
+    required bool isEnumElement,
+    required int nameOffset,
+    required int endOffset,
+    required bool isExtensionMember,
+    required bool isExtensionTypeMember,
+    required bool isInstanceMember,
+  }) {
+    bool isImmutable = !hasSetter;
+    _field = isImmutable
+        ? new Field.immutable(
+            dummyName,
+            type: _type,
+            isFinal: isFinal,
+            isConst: isConst,
+            isLate: isLate,
+            fileUri: fileUri,
+            fieldReference: references.fieldReference,
+            getterReference: references.getterReference,
+            isEnumElement: isEnumElement,
+          )
+        : new Field.mutable(
+            dummyName,
+            type: _type,
+            isFinal: isFinal,
+            isLate: isLate,
+            fileUri: fileUri,
+            fieldReference: references.fieldReference,
+            getterReference: references.getterReference,
+            setterReference: references.setterReference,
+          );
+    nameScheme
+        .getFieldMemberName(FieldNameType.Field, name, isSynthesized: false)
+        .attachMember(_field!);
+    _field!
+      ..fileOffset = nameOffset
+      ..fileEndOffset = endOffset;
+    _field!..isCovariantByDeclaration = isCovariant;
+    if (isExtensionMember) {
+      _field!
+        ..isStatic = true
+        ..isExtensionMember = true;
+    } else if (isExtensionTypeMember) {
+      _field!
+        ..isStatic = !isInstanceMember
+        ..isExtensionTypeMember = true;
+    } else {
+      _field!
+        ..isStatic = !isInstanceMember
+        ..isExtensionMember = false;
+    }
+    _field!.isLate = isLate;
+  }
 
   @override
   DartType get type => _type;
@@ -147,80 +209,6 @@
   }
 
   @override
-  void buildOutlineNode(
-    SourceLibraryBuilder libraryBuilder,
-    NameScheme nameScheme,
-    PropertyReferences references, {
-    required bool isAbstractOrExternal,
-    required List<TypeParameter>? classTypeParameters,
-  }) {
-    bool isImmutable = _fragment.modifiers.isLate
-        ? (_fragment.modifiers.isFinal && _fragment.modifiers.hasInitializer)
-        : (_fragment.modifiers.isFinal || _fragment.modifiers.isConst);
-    _field = isImmutable
-        ? new Field.immutable(
-            dummyName,
-            type: _type,
-            isFinal: _fragment.modifiers.isFinal,
-            isConst: _fragment.modifiers.isConst,
-            isLate: _fragment.modifiers.isLate,
-            fileUri: _fragment.fileUri,
-            fieldReference: references.fieldReference,
-            getterReference: references.getterReference,
-            isEnumElement: isEnumElement,
-          )
-        : new Field.mutable(
-            dummyName,
-            type: _type,
-            isFinal: _fragment.modifiers.isFinal,
-            isLate: _fragment.modifiers.isLate,
-            fileUri: _fragment.fileUri,
-            fieldReference: references.fieldReference,
-            getterReference: references.getterReference,
-            setterReference: references.setterReference,
-          );
-    nameScheme
-        .getFieldMemberName(
-          FieldNameType.Field,
-          _fragment.name,
-          isSynthesized: false,
-        )
-        .attachMember(_field!);
-    _field!
-      ..fileOffset = _fragment.nameOffset
-      ..fileEndOffset = _fragment.endOffset;
-    _field!..isCovariantByDeclaration = _fragment.modifiers.isCovariant;
-    if (_fragment.builder.isExtensionMember) {
-      _field!
-        ..isStatic = true
-        ..isExtensionMember = true;
-    } else if (_fragment.builder.isExtensionTypeMember) {
-      _field!
-        ..isStatic = _fragment.builder.isStatic
-        ..isExtensionTypeMember = true;
-    } else {
-      bool isInstanceMember =
-          !_fragment.builder.isStatic && !_fragment.builder.isTopLevel;
-      _field!
-        ..isStatic = !isInstanceMember
-        ..isExtensionMember = false;
-    }
-    _field!.isLate = _fragment.modifiers.isLate;
-  }
-
-  @override
-  void registerMembers(BuildNodesCallback f) {
-    f(
-      member: _field!,
-      kind:
-          _fragment.builder.isExtensionMember ||
-              _fragment.builder.isExtensionTypeMember
-          ? BuiltMemberKind.ExtensionField
-          : BuiltMemberKind.Field,
-    );
-  }
-
-  @override
   void setCovariantByClass() {
     if (_field!.hasSetter) {
       _field!.isCovariantByClass = true;
@@ -261,16 +249,6 @@
   ];
 
   @override
-  List<ClassMember> get localMembers => <ClassMember>[
-    new _FieldClassMember(_fragment.builder, _fragment, forSetter: false),
-  ];
-
-  @override
-  List<ClassMember> get localSetters => _fragment.hasSetter
-      ? [new _FieldClassMember(_fragment.builder, _fragment, forSetter: true)]
-      : const [];
-
-  @override
   void buildImplicitDefaultValue() {
     _field!.initializer = new NullLiteral()..parent = _field;
   }
@@ -296,6 +274,194 @@
   }
 }
 
+class RegularFieldEncoding with RegularFieldEncodingMixin {
+  final FieldFragment _fragment;
+  final bool isEnumElement;
+
+  RegularFieldEncoding(this._fragment, {required this.isEnumElement}) {}
+
+  @override
+  void buildOutlineNode(
+    SourceLibraryBuilder libraryBuilder,
+    NameScheme nameScheme,
+    PropertyReferences references, {
+    required bool isAbstractOrExternal,
+    required List<TypeParameter>? classTypeParameters,
+  }) {
+    _buildOutlineNode(
+      libraryBuilder,
+      nameScheme,
+      references,
+      name: _fragment.name,
+      isAbstractOrExternal: isAbstractOrExternal,
+      classTypeParameters: classTypeParameters,
+      hasSetter: _fragment.hasSetter,
+      isLate: _fragment.modifiers.isLate,
+      isFinal: _fragment.modifiers.isFinal,
+      isConst: _fragment.modifiers.isConst,
+      isCovariant: _fragment.modifiers.isCovariant,
+      fileUri: _fragment.fileUri,
+      isEnumElement: isEnumElement,
+      nameOffset: _fragment.nameOffset,
+      endOffset: _fragment.endOffset,
+      isExtensionMember: _fragment.builder.isExtensionMember,
+      isExtensionTypeMember: _fragment.builder.isExtensionTypeMember,
+      isInstanceMember:
+          !_fragment.builder.isStatic && !_fragment.builder.isTopLevel,
+    );
+    // bool isImmutable = _fragment.modifiers.isLate
+    //     ? (_fragment.modifiers.isFinal && _fragment.modifiers.hasInitializer)
+    //     : (_fragment.modifiers.isFinal || _fragment.modifiers.isConst);
+    // _field = isImmutable
+    //     ? new Field.immutable(
+    //         dummyName,
+    //         type: _type,
+    //         isFinal: _fragment.modifiers.isFinal,
+    //         isConst: _fragment.modifiers.isConst,
+    //         isLate: _fragment.modifiers.isLate,
+    //         fileUri: _fragment.fileUri,
+    //         fieldReference: references.fieldReference,
+    //         getterReference: references.getterReference,
+    //         isEnumElement: isEnumElement,
+    //       )
+    //     : new Field.mutable(
+    //         dummyName,
+    //         type: _type,
+    //         isFinal: _fragment.modifiers.isFinal,
+    //         isLate: _fragment.modifiers.isLate,
+    //         fileUri: _fragment.fileUri,
+    //         fieldReference: references.fieldReference,
+    //         getterReference: references.getterReference,
+    //         setterReference: references.setterReference,
+    //       );
+    // nameScheme
+    //     .getFieldMemberName(
+    //       FieldNameType.Field,
+    //       _fragment.name,
+    //       isSynthesized: false,
+    //     )
+    //     .attachMember(_field!);
+    // _field!
+    //   ..fileOffset = _fragment.nameOffset
+    //   ..fileEndOffset = _fragment.endOffset;
+    // _field!..isCovariantByDeclaration = _fragment.modifiers.isCovariant;
+    // if (_fragment.builder.isExtensionMember) {
+    //   _field!
+    //     ..isStatic = true
+    //     ..isExtensionMember = true;
+    // } else if (_fragment.builder.isExtensionTypeMember) {
+    //   _field!
+    //     ..isStatic = _fragment.builder.isStatic
+    //     ..isExtensionTypeMember = true;
+    // } else {
+    //   bool isInstanceMember =
+    //       !_fragment.builder.isStatic && !_fragment.builder.isTopLevel;
+    //   _field!
+    //     ..isStatic = !isInstanceMember
+    //     ..isExtensionMember = false;
+    // }
+    // _field!.isLate = _fragment.modifiers.isLate;
+  }
+
+  @override
+  void registerMembers(BuildNodesCallback f) {
+    f(
+      member: _field!,
+      kind:
+          _fragment.builder.isExtensionMember ||
+              _fragment.builder.isExtensionTypeMember
+          ? BuiltMemberKind.ExtensionField
+          : BuiltMemberKind.Field,
+    );
+  }
+
+  @override
+  List<ClassMember> get localMembers => <ClassMember>[
+    new _FieldClassMember(
+      _fragment.builder,
+      uriOffset: _fragment.uriOffset,
+      isStatic: _fragment.modifiers.isStatic,
+      forSetter: false,
+    ),
+  ];
+
+  @override
+  List<ClassMember> get localSetters => _fragment.hasSetter
+      ? [
+          new _FieldClassMember(
+            _fragment.builder,
+            uriOffset: _fragment.uriOffset,
+            isStatic: _fragment.modifiers.isStatic,
+            forSetter: true,
+          ),
+        ]
+      : const [];
+}
+
+class PrimaryConstructorFieldEncoding with RegularFieldEncodingMixin {
+  final PrimaryConstructorFieldFragment _fragment;
+
+  PrimaryConstructorFieldEncoding(this._fragment);
+
+  @override
+  void buildOutlineNode(
+    SourceLibraryBuilder libraryBuilder,
+    NameScheme nameScheme,
+    PropertyReferences references, {
+    required bool isAbstractOrExternal,
+    required List<TypeParameter>? classTypeParameters,
+  }) {
+    _buildOutlineNode(
+      libraryBuilder,
+      nameScheme,
+      references,
+      name: _fragment.name,
+      isAbstractOrExternal: isAbstractOrExternal,
+      classTypeParameters: classTypeParameters,
+      hasSetter: _fragment.hasSetter,
+      isLate: _fragment.modifiers.isLate,
+      isFinal: _fragment.modifiers.isFinal,
+      isConst: _fragment.modifiers.isConst,
+      isCovariant: _fragment.modifiers.isCovariant,
+      fileUri: _fragment.fileUri,
+      isEnumElement: false,
+      nameOffset: _fragment.nameOffset,
+      endOffset: _fragment.nameOffset,
+      isExtensionMember: false,
+      isExtensionTypeMember: false,
+      isInstanceMember: true,
+    );
+  }
+
+  @override
+  void registerMembers(BuildNodesCallback f) {
+    f(member: _field!, kind: BuiltMemberKind.Field);
+  }
+
+  @override
+  List<ClassMember> get localMembers => <ClassMember>[
+    new _FieldClassMember(
+      _fragment.builder,
+      uriOffset: _fragment.uriOffset,
+      isStatic: _fragment.modifiers.isStatic,
+      forSetter: false,
+    ),
+  ];
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  List<ClassMember> get localSetters => _fragment.hasSetter
+      ? [
+          new _FieldClassMember(
+            _fragment.builder,
+            uriOffset: _fragment.uriOffset,
+            isStatic: _fragment.modifiers.isStatic,
+            forSetter: true,
+          ),
+        ]
+      : const [];
+}
+
 abstract class AbstractLateFieldEncoding implements FieldEncoding {
   final FieldFragment _fragment;
   DartType? _type;
diff --git a/pkg/front_end/lib/src/fragment/getter/declaration.dart b/pkg/front_end/lib/src/fragment/getter/declaration.dart
index 63099fe..0645323 100644
--- a/pkg/front_end/lib/src/fragment/getter/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/getter/declaration.dart
@@ -50,7 +50,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   });
 
   void buildGetterOutlineNode({
@@ -166,16 +165,15 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     _encoding.buildOutlineExpressions(
       classHierarchy: classHierarchy,
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      propertyBuilder: propertyBuilder,
       bodyBuilderContext: createBodyBuilderContext(propertyBuilder),
       annotatable: annotatable,
       annotatableFileUri: annotatableFileUri,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
diff --git a/pkg/front_end/lib/src/fragment/getter/encoding.dart b/pkg/front_end/lib/src/fragment/getter/encoding.dart
index f3e2bf9..7bfb2c8 100644
--- a/pkg/front_end/lib/src/fragment/getter/encoding.dart
+++ b/pkg/front_end/lib/src/fragment/getter/encoding.dart
@@ -135,10 +135,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourcePropertyBuilder propertyBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   });
 
   void buildOutlineNode({
@@ -236,10 +236,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourcePropertyBuilder propertyBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     buildMetadataForOutlineExpressions(
       libraryBuilder: libraryBuilder,
@@ -251,22 +251,22 @@
       metadata: _fragment.metadata,
       annotationsFileUri: _fragment.fileUri,
     );
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _fragment
-          .declaredTypeParameters
-          // Coverage-ignore(suite): Not run.
-          ?.builders,
-    );
-    buildFormalsForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _fragment.declaredFormals,
+    _fragment
+        .declaredTypeParameters
+        // Coverage-ignore(suite): Not run.
+        ?.builders
+        // Coverage-ignore(suite): Not run.
+        .buildOutlineExpressions(
+          classHierarchy: classHierarchy,
+          libraryBuilder: libraryBuilder,
+          bodyBuilderContext: bodyBuilderContext,
+        );
+    _fragment.declaredFormals.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: propertyBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
@@ -511,10 +511,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourcePropertyBuilder propertyBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     buildMetadataForOutlineExpressions(
       libraryBuilder: libraryBuilder,
@@ -527,37 +527,35 @@
       annotationsFileUri: _fragment.fileUri,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _fragment
-          .declaredTypeParameters
-          // Coverage-ignore(suite): Not run.
-          ?.builders,
-    );
-    buildFormalsForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _fragment.declaredFormals,
+    _fragment
+        .declaredTypeParameters
+        // Coverage-ignore(suite): Not run.
+        ?.builders
+        // Coverage-ignore(suite): Not run.
+        .buildOutlineExpressions(
+          classHierarchy: classHierarchy,
+          libraryBuilder: libraryBuilder,
+          bodyBuilderContext: bodyBuilderContext,
+        );
+    _fragment.declaredFormals.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: propertyBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _clonedDeclarationTypeParameters,
+    _clonedDeclarationTypeParameters.buildOutlineExpressions(
+      classHierarchy: classHierarchy,
+      libraryBuilder: libraryBuilder,
+      bodyBuilderContext: bodyBuilderContext,
     );
-    buildFormalForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _thisFormal,
+    _thisFormal.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: propertyBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
diff --git a/pkg/front_end/lib/src/fragment/method/declaration.dart b/pkg/front_end/lib/src/fragment/method/declaration.dart
index 17d045f..223e0a5 100644
--- a/pkg/front_end/lib/src/fragment/method/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/method/declaration.dart
@@ -53,7 +53,6 @@
     required SourceMethodBuilder methodBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   });
 
   void buildOutlineNode(
@@ -149,16 +148,15 @@
     required SourceMethodBuilder methodBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     _encoding.buildOutlineExpressions(
       classHierarchy: classHierarchy,
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      methodBuilder: methodBuilder,
       bodyBuilderContext: createBodyBuilderContext(methodBuilder),
       annotatable: annotatable,
       annotatableFileUri: annotatableFileUri,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
diff --git a/pkg/front_end/lib/src/fragment/method/encoding.dart b/pkg/front_end/lib/src/fragment/method/encoding.dart
index e400b38..f700f1a 100644
--- a/pkg/front_end/lib/src/fragment/method/encoding.dart
+++ b/pkg/front_end/lib/src/fragment/method/encoding.dart
@@ -49,10 +49,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourceMethodBuilder methodBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   });
 
   void buildOutlineNode(
@@ -166,10 +166,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourceMethodBuilder methodBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     buildMetadataForOutlineExpressions(
       libraryBuilder: libraryBuilder,
@@ -181,19 +181,17 @@
       metadata: _fragment.metadata,
       annotationsFileUri: _fragment.fileUri,
     );
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _fragment.declaredTypeParameters?.builders,
+    _fragment.declaredTypeParameters?.builders.buildOutlineExpressions(
+      classHierarchy: classHierarchy,
+      libraryBuilder: libraryBuilder,
+      bodyBuilderContext: bodyBuilderContext,
     );
-    buildFormalsForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _fragment.declaredFormals,
+    _fragment.declaredFormals.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: methodBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
@@ -485,10 +483,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourceMethodBuilder methodBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     buildMetadataForOutlineExpressions(
       libraryBuilder: libraryBuilder,
@@ -501,34 +499,30 @@
       annotationsFileUri: _fragment.fileUri,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _fragment.declaredTypeParameters?.builders,
+    _fragment.declaredTypeParameters?.builders.buildOutlineExpressions(
+      classHierarchy: classHierarchy,
+      libraryBuilder: libraryBuilder,
+      bodyBuilderContext: bodyBuilderContext,
     );
-    buildFormalsForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _fragment.declaredFormals,
+    _fragment.declaredFormals.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: methodBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _clonedDeclarationTypeParameters,
+    _clonedDeclarationTypeParameters.buildOutlineExpressions(
+      classHierarchy: classHierarchy,
+      libraryBuilder: libraryBuilder,
+      bodyBuilderContext: bodyBuilderContext,
     );
-    buildFormalForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _thisFormal,
+    _thisFormal.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: methodBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
diff --git a/pkg/front_end/lib/src/fragment/primary_constructor_field.dart b/pkg/front_end/lib/src/fragment/primary_constructor_field.dart
index 040158e..2138c1e 100644
--- a/pkg/front_end/lib/src/fragment/primary_constructor_field.dart
+++ b/pkg/front_end/lib/src/fragment/primary_constructor_field.dart
@@ -51,7 +51,6 @@
   bool get hasInitializer => false;
 
   @override
-  // Coverage-ignore(suite): Not run.
   bool get hasSetter => false;
 
   @override
@@ -59,7 +58,6 @@
   shared.Expression? get initializerExpression => null;
 
   @override
-  // Coverage-ignore(suite): Not run.
   bool get isConst => false;
 
   @override
@@ -70,13 +68,12 @@
   bool get isExtensionTypeDeclaredInstanceField => false;
 
   @override
-  bool get isFinal => true;
+  bool get isFinal => _fragment.modifiers.isFinal;
 
   @override
   bool get isLate => false;
 
   @override
-  // Coverage-ignore(suite): Not run.
   bool get isStatic => false;
 
   @override
@@ -197,7 +194,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {}
 
   @override
@@ -254,7 +250,6 @@
   }
 
   @override
-  // Coverage-ignore(suite): Not run.
   void checkFieldVariance(
     SourceClassBuilder sourceClassBuilder,
     TypeEnvironment typeEnvironment,
@@ -279,7 +274,6 @@
   ) {}
 
   @override
-  // Coverage-ignore(suite): Not run.
   void checkGetterVariance(
     SourceClassBuilder sourceClassBuilder,
     TypeEnvironment typeEnvironment,
@@ -319,13 +313,13 @@
 
     SourceLibraryBuilder libraryBuilder = builder.libraryBuilder;
 
-    bool isInstanceMember = builder.isDeclarationInstanceMember;
     bool isExtensionTypeMember = builder.isExtensionTypeMember;
 
-    // TODO(johnniwinther): Add support for regular fields for the primary
-    //  constructors feature.
-    assert(isExtensionTypeMember && isInstanceMember);
-    _encoding = new RepresentationFieldEncoding(_fragment);
+    if (isExtensionTypeMember) {
+      _encoding = new RepresentationFieldEncoding(_fragment);
+    } else {
+      _encoding = new PrimaryConstructorFieldEncoding(_fragment);
+    }
 
     type.registerInferredTypeListener(this);
     if (type is InferableTypeBuilder) {
@@ -453,6 +447,8 @@
 
   final List<MetadataBuilder>? metadata;
 
+  final Modifiers modifiers;
+
   final TypeBuilder type;
 
   final LookupScope enclosingScope;
@@ -475,6 +471,7 @@
     required this.fileUri,
     required this.nameOffset,
     required this.metadata,
+    required this.modifiers,
     required this.type,
     required this.enclosingScope,
     required this.enclosingDeclaration,
@@ -508,4 +505,6 @@
     );
     _declaration = value;
   }
+
+  bool get hasSetter => !modifiers.isFinal;
 }
diff --git a/pkg/front_end/lib/src/fragment/setter/declaration.dart b/pkg/front_end/lib/src/fragment/setter/declaration.dart
index e489805..a9edd0d 100644
--- a/pkg/front_end/lib/src/fragment/setter/declaration.dart
+++ b/pkg/front_end/lib/src/fragment/setter/declaration.dart
@@ -49,7 +49,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   });
 
   void buildSetterOutlineNode({
@@ -168,16 +167,15 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     _encoding.buildOutlineExpressions(
       classHierarchy: classHierarchy,
       libraryBuilder: libraryBuilder,
       declarationBuilder: declarationBuilder,
+      propertyBuilder: propertyBuilder,
       bodyBuilderContext: createBodyBuilderContext(propertyBuilder),
       annotatable: annotatable,
       annotatableFileUri: annotatableFileUri,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
diff --git a/pkg/front_end/lib/src/fragment/setter/encoding.dart b/pkg/front_end/lib/src/fragment/setter/encoding.dart
index 1a9946c..227b1e2 100644
--- a/pkg/front_end/lib/src/fragment/setter/encoding.dart
+++ b/pkg/front_end/lib/src/fragment/setter/encoding.dart
@@ -151,10 +151,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourcePropertyBuilder propertyBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   });
 
   void buildOutlineNode({
@@ -234,10 +234,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourcePropertyBuilder propertyBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     buildMetadataForOutlineExpressions(
       libraryBuilder: libraryBuilder,
@@ -250,22 +250,22 @@
       annotationsFileUri: _fragment.fileUri,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _fragment
-          .declaredTypeParameters
-          // Coverage-ignore(suite): Not run.
-          ?.builders,
-    );
-    buildFormalsForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _fragment.declaredFormals,
+    _fragment
+        .declaredTypeParameters
+        // Coverage-ignore(suite): Not run.
+        ?.builders
+        // Coverage-ignore(suite): Not run.
+        .buildOutlineExpressions(
+          classHierarchy: classHierarchy,
+          libraryBuilder: libraryBuilder,
+          bodyBuilderContext: bodyBuilderContext,
+        );
+    _fragment.declaredFormals.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: propertyBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
@@ -524,10 +524,10 @@
     required ClassHierarchy classHierarchy,
     required SourceLibraryBuilder libraryBuilder,
     required DeclarationBuilder? declarationBuilder,
+    required SourcePropertyBuilder propertyBuilder,
     required BodyBuilderContext bodyBuilderContext,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     buildMetadataForOutlineExpressions(
       libraryBuilder: libraryBuilder,
@@ -540,37 +540,35 @@
       annotationsFileUri: _fragment.fileUri,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _fragment
-          .declaredTypeParameters
-          // Coverage-ignore(suite): Not run.
-          ?.builders,
-    );
-    buildFormalsForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _fragment.declaredFormals,
+    _fragment
+        .declaredTypeParameters
+        // Coverage-ignore(suite): Not run.
+        ?.builders
+        // Coverage-ignore(suite): Not run.
+        .buildOutlineExpressions(
+          classHierarchy: classHierarchy,
+          libraryBuilder: libraryBuilder,
+          bodyBuilderContext: bodyBuilderContext,
+        );
+    _fragment.declaredFormals.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: propertyBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
 
-    buildTypeParametersForOutlineExpressions(
-      classHierarchy,
-      libraryBuilder,
-      bodyBuilderContext,
-      _clonedDeclarationTypeParameters,
+    _clonedDeclarationTypeParameters.buildOutlineExpressions(
+      classHierarchy: classHierarchy,
+      libraryBuilder: libraryBuilder,
+      bodyBuilderContext: bodyBuilderContext,
     );
-    buildFormalForOutlineExpressions(
-      libraryBuilder,
-      declarationBuilder,
-      _thisFormal,
+    _thisFormal.buildOutlineExpressions(
+      libraryBuilder: libraryBuilder,
+      declarationBuilder: declarationBuilder,
+      memberBuilder: propertyBuilder,
       extensionScope: _fragment.enclosingCompilationUnit.extensionScope,
       scope: _fragment.typeParameterScope,
-      isClassInstanceMember: isClassInstanceMember,
     );
   }
 
diff --git a/pkg/front_end/lib/src/fragment/util.dart b/pkg/front_end/lib/src/fragment/util.dart
index 58738b8..9949f28 100644
--- a/pkg/front_end/lib/src/fragment/util.dart
+++ b/pkg/front_end/lib/src/fragment/util.dart
@@ -67,67 +67,50 @@
   );
 }
 
-void buildTypeParametersForOutlineExpressions(
-  ClassHierarchy classHierarchy,
-  SourceLibraryBuilder libraryBuilder,
-  BodyBuilderContext bodyBuilderContext,
-  List<SourceNominalParameterBuilder>? typeParameters,
-) {
-  if (typeParameters != null) {
-    for (int i = 0; i < typeParameters.length; i++) {
-      typeParameters[i].buildOutlineExpressions(
-        libraryBuilder,
-        bodyBuilderContext,
-        classHierarchy,
-      );
+extension TypeParametersExtension on List<SourceNominalParameterBuilder>? {
+  void buildOutlineExpressions({
+    required ClassHierarchy classHierarchy,
+    required SourceLibraryBuilder libraryBuilder,
+    required BodyBuilderContext bodyBuilderContext,
+  }) {
+    List<SourceNominalParameterBuilder>? typeParameters = this;
+
+    if (typeParameters != null) {
+      for (int i = 0; i < typeParameters.length; i++) {
+        typeParameters[i].buildOutlineExpressions(
+          libraryBuilder,
+          bodyBuilderContext,
+          classHierarchy,
+        );
+      }
     }
   }
 }
 
-void buildFormalsForOutlineExpressions(
-  SourceLibraryBuilder libraryBuilder,
-  DeclarationBuilder? declarationBuilder,
-  List<FormalParameterBuilder>? formals, {
-  required ExtensionScope extensionScope,
-  required LookupScope scope,
-  required bool isClassInstanceMember,
-}) {
-  if (formals != null) {
-    for (int i = 0; i < formals.length; i++) {
-      FormalParameterBuilder formal = formals[i];
-      buildFormalForOutlineExpressions(
-        libraryBuilder,
-        declarationBuilder,
-        formal,
-        extensionScope: extensionScope,
-        scope: scope,
-        isClassInstanceMember: isClassInstanceMember,
-      );
+extension FormalsExtension on List<FormalParameterBuilder>? {
+  void buildOutlineExpressions({
+    required SourceLibraryBuilder libraryBuilder,
+    required DeclarationBuilder? declarationBuilder,
+    required SourceMemberBuilder memberBuilder,
+    required ExtensionScope extensionScope,
+    required LookupScope scope,
+  }) {
+    List<FormalParameterBuilder>? formals = this;
+    if (formals != null) {
+      for (int i = 0; i < formals.length; i++) {
+        FormalParameterBuilder formal = formals[i];
+        formal.buildOutlineExpressions(
+          libraryBuilder: libraryBuilder,
+          declarationBuilder: declarationBuilder,
+          memberBuilder: memberBuilder,
+          extensionScope: extensionScope,
+          scope: scope,
+        );
+      }
     }
   }
 }
 
-void buildFormalForOutlineExpressions(
-  SourceLibraryBuilder libraryBuilder,
-  DeclarationBuilder? declarationBuilder,
-  FormalParameterBuilder formal, {
-  required ExtensionScope extensionScope,
-  required LookupScope scope,
-  required bool isClassInstanceMember,
-}) {
-  // For const constructors we need to include default parameter values
-  // into the outline. For all other formals we need to call
-  // buildOutlineExpressions to clear initializerToken to prevent
-  // consuming too much memory.
-  formal.buildOutlineExpressions(
-    libraryBuilder,
-    declarationBuilder,
-    extensionScope: extensionScope,
-    scope: scope,
-    buildDefaultValue: isClassInstanceMember,
-  );
-}
-
 sealed class PropertyEncodingStrategy {
   factory PropertyEncodingStrategy(
     DeclarationBuilder? declarationBuilder, {
diff --git a/pkg/front_end/lib/src/kernel/body_builder.dart b/pkg/front_end/lib/src/kernel/body_builder.dart
index bf3ce8b..efe7290 100644
--- a/pkg/front_end/lib/src/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/kernel/body_builder.dart
@@ -16,7 +16,8 @@
         intFromToken,
         lengthForToken,
         lengthOfSpan,
-        stripSeparators;
+        stripSeparators,
+        DeclarationKind;
 import 'package:_fe_analyzer_shared/src/parser/quote.dart'
     show
         Quote,
@@ -163,7 +164,7 @@
 
   BuildSingleExpressionResult buildSingleExpression({
     required Token token,
-    required List<VariableDeclarationImpl> extraKnownVariables,
+    required List<ExpressionVariable> extraKnownVariables,
     required List<NominalParameterBuilder>? typeParameterBuilders,
     required List<FormalParameterBuilder>? formals,
     required int fileOffset,
@@ -344,7 +345,7 @@
 
   final LocalStack<LocalScope> _localScopes;
 
-  Set<VariableDeclaration>? declaredInCurrentGuard;
+  Set<ExpressionVariable>? declaredInCurrentGuard;
 
   JumpTarget? breakTarget;
 
@@ -617,7 +618,7 @@
   }
 
   @override
-  void registerVariableAssignment(VariableDeclaration variable) {
+  void registerVariableAssignment(ExpressionVariable variable) {
     assignedVariables.write(variable);
   }
 
@@ -806,11 +807,11 @@
   }
 
   void wrapVariableInitializerInError(
-    VariableDeclaration variable,
+    ExpressionVariable variable,
     Template<Message Function(String name), Function> template,
     List<LocatedMessage> context,
   ) {
-    String name = variable.name!;
+    String name = variable.cosmeticName!;
     int offset = variable.fileOffset;
     Message message = template.withArgumentsOld(name);
     if (variable.initializer == null) {
@@ -831,8 +832,8 @@
     }
   }
 
-  void declareVariable(VariableDeclaration variable, LocalScope scope) {
-    String name = variable.name!;
+  void declareVariable(ExpressionVariable variable, LocalScope scope) {
+    String name = variable.cosmeticName!;
     Builder? existing = scope.lookupLocalVariable(name);
     if (existing != null) {
       // This reports an error for duplicated declarations in the same scope:
@@ -851,7 +852,7 @@
     if (isGuardScope(scope)) {
       (declaredInCurrentGuard ??= {}).add(variable);
     }
-    String variableName = variable.name!;
+    String variableName = variable.cosmeticName!;
     List<int>? previousOffsets = scope.declare(
       variableName,
       new VariableBuilderImpl(variableName, variable, uri),
@@ -1028,7 +1029,8 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -1101,7 +1103,6 @@
                     fileOffset: formal.fileOffset,
                     length: formal.name.length,
                   ),
-                  formal.fileOffset,
                 ),
               ];
             } else {
@@ -1209,7 +1210,7 @@
       ];
     } else {
       Expression value = toValue(node);
-      if (!forest.isThrow(node)) {
+      if (value is! InvalidExpression) {
         // TODO(johnniwinther): Derive the message position from the [node]
         // and not the [value].  For instance this occurs for `super()?.foo()`
         // in an initializer list, pointing to `foo` as expecting an
@@ -1224,10 +1225,7 @@
         );
       }
       initializers = <Initializer>[
-        // TODO(johnniwinther): This should probably be [value] instead of
-        //  [node].
-        // TODO(jensj): Does this offset make sense?
-        buildInvalidInitializer(node as Expression, endToken.next!.charOffset),
+        buildInvalidInitializer(value as InvalidExpression),
       ];
     }
 
@@ -2342,7 +2340,7 @@
   }
 
   @override
-  Expression buildUnresolvedError(
+  InvalidExpression buildUnresolvedError(
     String name,
     int charOffset, {
     bool isSuper = false,
@@ -2416,8 +2414,7 @@
     );
   }
 
-  @override
-  Expression buildProblemFromLocatedMessage(LocatedMessage message) {
+  InvalidExpression _buildProblemFromLocatedMessage(LocatedMessage message) {
     return buildProblem(
       message: message.messageObject,
       fileUri: uri,
@@ -2588,8 +2585,9 @@
   }
 
   @override
-  void registerVariableRead(VariableDeclaration variable) {
-    if (!(variable as VariableDeclarationImpl).isLocalFunction &&
+  void registerVariableRead(ExpressionVariable variable) {
+    if (!(variable is InternalExpressionVariable &&
+            (variable as InternalExpressionVariable).isLocalFunction) &&
         !variable.isWildcard) {
       assignedVariables.read(variable);
     }
@@ -2598,7 +2596,7 @@
   /// Helper method to create a [VariableGet] of the [variable] using
   /// [charOffset] as the file offset.
   @override
-  VariableGet createVariableGet(VariableDeclaration variable, int charOffset) {
+  VariableGet createVariableGet(ExpressionVariable variable, int charOffset) {
     registerVariableRead(variable);
     return new VariableGet(variable)..fileOffset = charOffset;
   }
@@ -2607,7 +2605,7 @@
   /// using [token] and [charOffset] for offset information and [name]
   /// for `ExpressionGenerator._plainNameForRead`.
   ReadOnlyAccessGenerator _createReadOnlyVariableAccess(
-    VariableDeclaration variable,
+    ExpressionVariable variable,
     Token token,
     int charOffset,
     String? name,
@@ -2623,7 +2621,7 @@
   }
 
   @override
-  bool isDeclaredInEnclosingCase(VariableDeclaration variable) {
+  bool isDeclaredInEnclosingCase(ExpressionVariable variable) {
     return declaredInCurrentGuard?.contains(variable) ?? false;
   }
 
@@ -2758,7 +2756,7 @@
             cfe.codeNotAConstantExpression,
           );
         }
-        VariableDeclaration variable = getable.variable!;
+        ExpressionVariable variable = getable.variable!;
         // TODO(johnniwinther): The handling of for-in variables should be
         //  done through the builder.
         if (forStatementScope &&
@@ -3464,23 +3462,39 @@
       name = createWildcardVariableName(wildcardVariableIndex);
       wildcardVariableIndex++;
     }
-    VariableDeclaration variable =
-        new VariableDeclarationImpl(
-            name,
-            forSyntheticToken: identifier.token.isSynthetic,
-            initializer: initializer,
+    VariableInitialization variable;
+    if (isClosureContextLoweringEnabled) {
+      // Coverage-ignore-block(suite): Not run.
+      variable = new VariableInitialization(
+        variable: new InternalLocalVariable(
+          astVariable: new LocalVariable(
+            cosmeticName: name,
             type: currentLocalVariableType,
-            isFinal: isFinal,
-            isConst: isConst,
-            isLate: isLate,
-            isRequired: isRequired,
-            hasDeclaredInitializer: initializer != null,
-            isStaticLate: isFinal && initializer == null,
-            isWildcard: isWildcard,
-          )
-          ..fileOffset = identifier.nameOffset
-          ..fileEqualsOffset = offsetForToken(equalsToken);
-    assignedVariables.declare(variable);
+          ),
+          forSyntheticToken: identifier.token.isSynthetic,
+          isImplicitlyTyped: currentLocalVariableType == null,
+        ).asExpressionVariable,
+        initializer: initializer,
+      );
+    } else {
+      variable =
+          new VariableDeclarationImpl(
+              name,
+              forSyntheticToken: identifier.token.isSynthetic,
+              initializer: initializer,
+              type: currentLocalVariableType,
+              isFinal: isFinal,
+              isConst: isConst,
+              isLate: isLate,
+              isRequired: isRequired,
+              hasDeclaredInitializer: initializer != null,
+              isStaticLate: isFinal && initializer == null,
+              isWildcard: isWildcard,
+            )
+            ..fileOffset = identifier.nameOffset
+            ..fileEqualsOffset = offsetForToken(equalsToken);
+    }
+    assignedVariables.declare(variable.variable);
     push(variable);
   }
 
@@ -3528,15 +3542,17 @@
       push(node);
       return;
     }
-    VariableDeclaration variable = node as VariableDeclaration;
-    variable.fileOffset = nameToken.charOffset;
-    push(variable);
+    VariableInitialization variableInitialization =
+        node as VariableInitialization;
+    variableInitialization.fileOffset = nameToken.charOffset;
+    push(variableInitialization);
 
     // Avoid adding the local identifier to scope if it's a wildcard.
     // TODO(kallentu): Emit better error on lookup, rather than not adding it to
     // the scope.
-    if (!(libraryFeatures.wildcardVariables.isEnabled && variable.isWildcard)) {
-      declareVariable(variable, _localScope);
+    if (!(libraryFeatures.wildcardVariables.isEnabled &&
+        variableInitialization.isWildcard)) {
+      declareVariable(variableInitialization.variable, _localScope);
     }
   }
 
@@ -3583,15 +3599,18 @@
         push(node);
         return;
       }
-      VariableDeclaration variable = node as VariableDeclaration;
+      VariableInitialization variableInitialization =
+          node as VariableInitialization;
       if (annotations != null) {
         for (int i = 0; i < annotations.length; i++) {
-          variable.addAnnotation(annotations[i]);
+          variableInitialization.addAnnotation(annotations[i]);
         }
-        _registerSingleTargetAnnotations(variable);
-        //(variablesWithMetadata ??= <VariableDeclaration>[]).add(variable);
+        _registerSingleTargetAnnotations(variableInitialization);
+        // (variablesWithMetadata ??= <VariableDeclaration>[]).add(
+        //   variableInitialization,
+        // );
       }
-      push(variable);
+      push(variableInitialization);
     } else {
       List<VariableDeclaration>? variables =
           const FixedNullableList<VariableDeclaration>().popNonNullable(
@@ -5406,6 +5425,7 @@
     Identifier? name = nameNode as Identifier?;
 
     // If it's a private named parameter, handle the public name.
+    String? publicName;
     if (libraryFeatures.privateNamedParameters.isEnabled &&
         kind.isNamed &&
         name != null &&
@@ -5413,10 +5433,13 @@
       // TODO(rnystrom): Also handle declaring field parameters.
       bool refersToField = thisKeyword != null;
 
-      // If you can't even use a private named parameter here at all, the
-      // parser has already reported an error about that. Don't bother reporting
-      // a second error about it being a bad private name.
-      if (refersToField && correspondingPublicName(name.name) == null) {
+      publicName = correspondingPublicName(name.name);
+
+      // Only report the error for no corresponding public name if this is a
+      // parameter that could be private and named. Otherwise, that's already
+      // an error (which has been reported by the parser), so don't report a
+      // second error on top.
+      if (refersToField && publicName == null) {
         handleRecoverableError(
           cfe.codePrivateNamedParameterWithoutPublicName,
           nameToken,
@@ -5466,6 +5489,7 @@
         fileUri: uri,
         hasImmediatelyDeclaredInitializer: initializerStart != null,
         isWildcard: isWildcard,
+        publicName: publicName,
       );
     }
     VariableDeclaration variable = parameter.build(libraryBuilder);
@@ -6597,7 +6621,6 @@
     }
 
     String? errorName;
-    LocatedMessage? message;
 
     if (typeDeclarationBuilder is TypeAliasBuilder) {
       errorName = debugName(typeDeclarationBuilder.name, name);
@@ -6644,15 +6667,18 @@
                 // Not found. Reported below.
                 target = null;
               } else if (result.isInvalidLookup) {
-                message = LookupResult.createDuplicateMessage(
-                  result,
-                  enclosingDeclaration: typeDeclarationBuilder,
-                  name: name,
-                  fileUri: uri,
-                  fileOffset: charOffset,
-                  length: noLength,
+                return new ErroneousConstructorResolutionResult(
+                  errorExpression: _buildProblemFromLocatedMessage(
+                    LookupResult.createDuplicateMessage(
+                      result,
+                      enclosingDeclaration: typeDeclarationBuilder,
+                      name: name,
+                      fileUri: uri,
+                      fileOffset: charOffset,
+                      length: noLength,
+                    ),
+                  ),
                 );
-                target = null;
               } else {
                 MemberBuilder? constructorBuilder = result.getable!;
                 if (constructorBuilder is ConstructorBuilder) {
@@ -6689,18 +6715,12 @@
                   ),
                 );
               } else {
-                if (message != null) {
-                  return new ErroneousConstructorResolutionResult(
-                    errorExpression: buildProblemFromLocatedMessage(message),
-                  );
-                } else {
-                  return new UnresolvedConstructorResolutionResult(
-                    helper: this,
-                    errorName: errorName,
-                    charOffset: nameLastToken.charOffset,
-                    unresolvedKind: unresolvedKind,
-                  );
-                }
+                return new UnresolvedConstructorResolutionResult(
+                  helper: this,
+                  errorName: errorName,
+                  charOffset: nameLastToken.charOffset,
+                  unresolvedKind: unresolvedKind,
+                );
               }
             case ExtensionTypeDeclarationBuilder():
               // TODO(johnniwinther): Add shared interface between
@@ -6710,13 +6730,17 @@
               MemberBuilder? constructorBuilder = result?.getable;
               if (result != null && result.isInvalidLookup) {
                 // Coverage-ignore-block(suite): Not run.
-                message = LookupResult.createDuplicateMessage(
-                  result,
-                  enclosingDeclaration: typeDeclarationBuilder,
-                  name: name,
-                  fileUri: uri,
-                  fileOffset: charOffset,
-                  length: noLength,
+                return new ErroneousConstructorResolutionResult(
+                  errorExpression: _buildProblemFromLocatedMessage(
+                    LookupResult.createDuplicateMessage(
+                      result,
+                      enclosingDeclaration: typeDeclarationBuilder,
+                      name: name,
+                      fileUri: uri,
+                      fileOffset: charOffset,
+                      length: noLength,
+                    ),
+                  ),
                 );
               } else if (constructorBuilder == null) {
                 // Not found. Reported below.
@@ -6735,19 +6759,12 @@
                   ),
                 );
               }
-              if (message != null) {
-                // Coverage-ignore-block(suite): Not run.
-                return new ErroneousConstructorResolutionResult(
-                  errorExpression: buildProblemFromLocatedMessage(message),
-                );
-              } else {
-                return new UnresolvedConstructorResolutionResult(
-                  helper: this,
-                  errorName: errorName,
-                  charOffset: nameLastToken.charOffset,
-                  unresolvedKind: unresolvedKind,
-                );
-              }
+              return new UnresolvedConstructorResolutionResult(
+                helper: this,
+                errorName: errorName,
+                charOffset: nameLastToken.charOffset,
+                unresolvedKind: unresolvedKind,
+              );
             case InvalidBuilder():
               // Coverage-ignore(suite): Not run.
               LocatedMessage message = typeDeclarationBuilder.message;
@@ -6976,13 +6993,17 @@
         MemberBuilder? constructorBuilder = result?.getable;
         Member? target;
         if (result != null && result.isInvalidLookup) {
-          message = LookupResult.createDuplicateMessage(
-            result,
-            enclosingDeclaration: typeDeclarationBuilder,
-            name: name,
-            fileUri: uri,
-            fileOffset: charOffset,
-            length: noLength,
+          return new ErroneousConstructorResolutionResult(
+            errorExpression: _buildProblemFromLocatedMessage(
+              LookupResult.createDuplicateMessage(
+                result,
+                enclosingDeclaration: typeDeclarationBuilder,
+                name: name,
+                fileUri: uri,
+                fileOffset: charOffset,
+                length: noLength,
+              ),
+            ),
           );
         } else if (constructorBuilder == null) {
           // Not found. Reported below.
@@ -7049,13 +7070,17 @@
         Member? target;
         if (result != null && result.isInvalidLookup) {
           // Coverage-ignore-block(suite): Not run.
-          message = LookupResult.createDuplicateMessage(
-            result,
-            enclosingDeclaration: typeDeclarationBuilder,
-            name: name,
-            fileUri: uri,
-            fileOffset: charOffset,
-            length: noLength,
+          return new ErroneousConstructorResolutionResult(
+            errorExpression: _buildProblemFromLocatedMessage(
+              LookupResult.createDuplicateMessage(
+                result,
+                enclosingDeclaration: typeDeclarationBuilder,
+                name: name,
+                fileUri: uri,
+                fileOffset: charOffset,
+                length: noLength,
+              ),
+            ),
           );
         } else if (constructorBuilder == null) {
           // Not found. Reported below.
@@ -7100,18 +7125,12 @@
           name,
         );
     }
-    if (message != null) {
-      return new ErroneousConstructorResolutionResult(
-        errorExpression: buildProblemFromLocatedMessage(message),
-      );
-    } else {
-      return new UnresolvedConstructorResolutionResult(
-        helper: this,
-        errorName: errorName,
-        charOffset: nameLastToken.charOffset,
-        unresolvedKind: unresolvedKind,
-      );
-    }
+    return new UnresolvedConstructorResolutionResult(
+      helper: this,
+      errorName: errorName,
+      charOffset: nameLastToken.charOffset,
+      unresolvedKind: unresolvedKind,
+    );
   }
 
   @override
@@ -7747,7 +7766,8 @@
 
     if (isClosureContextLoweringEnabled) {
       // TODO(cstefantsova): Add function parameters to the scope.
-      function.scope = new Scope([])..fileOffset = function.fileOffset;
+      function.scope = new Scope(contexts: [])
+        ..fileOffset = function.fileOffset;
     }
 
     if (declaration is FunctionDeclaration) {
@@ -9740,14 +9760,10 @@
   }
 
   @override
-  Initializer buildInvalidInitializer(
-    Expression expression, [
-    int charOffset = -1,
-  ]) {
+  Initializer buildInvalidInitializer(InvalidExpression expression) {
     _needsImplicitSuperInitializer = false;
-    return new ShadowInvalidInitializer(
-      new VariableDeclaration.forValue(expression),
-    )..fileOffset = charOffset;
+    return new InvalidInitializer(expression.message)
+      ..fileOffset = expression.fileOffset;
   }
 
   Initializer buildDuplicatedInitializer(
@@ -9809,7 +9825,6 @@
             fileOffset: fieldNameOffset,
             length: name.length,
           ),
-          fieldNameOffset,
         ),
       ];
     } else if (builder is SourcePropertyBuilder &&
@@ -9819,7 +9834,20 @@
         // Operating on an invalid field. Don't report anything though
         // as we've already reported that the field isn't valid.
         return <Initializer>[
-          buildInvalidInitializer(new InvalidExpression(null), fieldNameOffset),
+          buildInvalidInitializer(
+            new InvalidExpression(
+              compilerContext
+                  .format(
+                    codeExtensionTypeDeclaresInstanceField.withLocation(
+                      builder.fileUri,
+                      builder.fileOffset,
+                      builder.name.length,
+                    ),
+                    cfe.CfeSeverity.error,
+                  )
+                  .plain,
+            ),
+          ),
         ];
       }
 
@@ -9845,7 +9873,6 @@
               fileOffset: fieldNameOffset,
               length: name.length,
             ),
-            fieldNameOffset,
           ),
         ];
       } else if (builder.hasExternalField) {
@@ -9857,7 +9884,6 @@
               fileOffset: fieldNameOffset,
               length: name.length,
             ),
-            fieldNameOffset,
           ),
         ];
       } else if (builder.isFinal && builder.hasInitializer) {
@@ -9926,7 +9952,6 @@
             fileOffset: fieldNameOffset,
             length: name.length,
           ),
-          fieldNameOffset,
         ),
       ];
     }
@@ -9966,12 +9991,13 @@
         length = "this".length;
       }
       String fullName = constructorNameForDiagnostics(name.text);
-      LocatedMessage message = cfe.codeConstructorNotFound
-          .withArgumentsOld(fullName)
-          .withLocation(uri, fileOffset, length);
       return buildInvalidInitializer(
-        buildProblemFromLocatedMessage(message),
-        fileOffset,
+        buildProblem(
+          message: cfe.codeConstructorNotFound.withArgumentsOld(fullName),
+          fileUri: uri,
+          fileOffset: fileOffset,
+          length: length,
+        ),
       );
     } else {
       if (_context.isConstructorCyclic(name.text)) {
@@ -10737,7 +10763,7 @@
       variable,
     ).buildSimpleRead();
     if (variableUse is VariableGet) {
-      VariableDeclaration variableDeclaration = variableUse.variable;
+      ExpressionVariable variableDeclaration = variableUse.variable;
       pattern = forest.createAssignedVariablePattern(
         variable.charOffset,
         variableDeclaration,
@@ -11262,7 +11288,7 @@
   // Coverage-ignore(suite): Not run.
   BuildSingleExpressionResult buildSingleExpression({
     required Token token,
-    required List<VariableDeclarationImpl> extraKnownVariables,
+    required List<ExpressionVariable> extraKnownVariables,
     required List<NominalParameterBuilder>? typeParameterBuilders,
     required List<FormalParameterBuilder>? formals,
     required int fileOffset,
@@ -11299,7 +11325,7 @@
         kind: LocalScopeKind.ifElement,
       );
       enterLocalScope(extraKnownVariablesScope);
-      for (VariableDeclarationImpl extraVariable in extraKnownVariables) {
+      for (ExpressionVariable extraVariable in extraKnownVariables) {
         declareVariable(extraVariable, _localScope);
         assignedVariables.declare(extraVariable);
       }
diff --git a/pkg/front_end/lib/src/kernel/const_conditional_simplifier.dart b/pkg/front_end/lib/src/kernel/const_conditional_simplifier.dart
index bae47e1..98e5556 100644
--- a/pkg/front_end/lib/src/kernel/const_conditional_simplifier.dart
+++ b/pkg/front_end/lib/src/kernel/const_conditional_simplifier.dart
@@ -128,7 +128,7 @@
   // TODO(fishythefish): Do caches need to be invalidated when the static type
   // context changes?
   /// Cache for local variables in the current method.
-  Map<VariableDeclaration, Constant?> _variableCache = {};
+  Map<ExpressionVariable, Constant?> _variableCache = {};
   final Map<Field, Constant?> _staticFieldCache = {};
   final Map<FunctionNode, Constant?> _functionCache = {};
   final Map<FunctionNode, Constant?> _localFunctionCache = {};
@@ -168,7 +168,7 @@
     return _evaluate(expression);
   }
 
-  Constant? _evaluateVariableGet(VariableDeclaration variable) {
+  Constant? _evaluateVariableGet(ExpressionVariable variable) {
     // A function parameter can be declared final with an initializer, but
     // doesn't necessarily have the initializer's value.
     if (variable.parent is FunctionNode) return null;
@@ -179,7 +179,7 @@
     return _evaluate(initializer);
   }
 
-  Constant? _lookupVariableGet(VariableDeclaration variable) => _variableCache
+  Constant? _lookupVariableGet(ExpressionVariable variable) => _variableCache
       .putIfAbsent(variable, () => _evaluateVariableGet(variable));
 
   @override
@@ -258,7 +258,7 @@
     //
     // This can occur when calling const extension type constructors since these
     // are lowered into top level functions.
-    Map<VariableDeclaration, Constant?> oldCache = _variableCache;
+    Map<ExpressionVariable, Constant?> oldCache = _variableCache;
     _variableCache = {};
     Constant result =
         _lookupStaticInvocation(node.target) ??
diff --git a/pkg/front_end/lib/src/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/kernel/constant_evaluator.dart
index bf93712..21c553e 100644
--- a/pkg/front_end/lib/src/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/kernel/constant_evaluator.dart
@@ -2181,7 +2181,7 @@
 
   @override
   TreeNode visitVariableGet(VariableGet node, TreeNode? removalSentinel) {
-    final VariableDeclaration variable = node.variable;
+    final ExpressionVariable variable = node.expressionVariable;
     if (variable.isConst) {
       variable.initializer = evaluateAndTransformWithContext(
         variable,
@@ -2679,25 +2679,58 @@
     lazyDepth = 0;
     Constant result = _evaluateSubexpression(node);
     if (result is AbortConstant) {
-      if (result is _AbortDueToErrorConstant) {
-        final LocatedMessage locatedMessageActualError = createLocatedMessage(
-          result.node,
-          result.message,
-        );
-        if (result.isEvaluationError) {
+      switch (result) {
+        case _AbortDueToErrorConstant():
+          final LocatedMessage locatedMessageActualError = createLocatedMessage(
+            result.node,
+            result.message,
+          );
+          if (result.isEvaluationError) {
+            final List<LocatedMessage> contextMessages = <LocatedMessage>[
+              locatedMessageActualError,
+            ];
+            if (result.context != null) {
+              // Coverage-ignore-block(suite): Not run.
+              contextMessages.addAll(result.context!);
+            }
+            if (contextNode != null && contextNode != result.node) {
+              contextMessages.add(
+                createLocatedMessage(contextNode, codeConstEvalContext),
+              );
+            }
+
+            {
+              final LocatedMessage locatedMessage = createLocatedMessage(
+                node,
+                codeConstEvalStartingPoint,
+              );
+              errorReporter.report(locatedMessage, contextMessages);
+            }
+          } else {
+            errorReporter.report(locatedMessageActualError);
+          }
+          return new UnevaluatedConstant(
+            new InvalidExpression(result.message.problemMessage),
+          );
+        case _AbortDueToThrowConstant():
+          final Object value = result.throwValue;
+          Message? message;
+          if (value is Constant) {
+            message = codeConstEvalUnhandledException.withArgumentsOld(value);
+          } else if (value is Error) {
+            message = codeConstEvalUnhandledCoreException.withArgumentsOld(
+              value.toString(),
+            );
+          }
+          assert(message != null);
+
+          final LocatedMessage locatedMessageActualError = createLocatedMessage(
+            result.node,
+            message!,
+          );
           final List<LocatedMessage> contextMessages = <LocatedMessage>[
             locatedMessageActualError,
           ];
-          if (result.context != null) {
-            // Coverage-ignore-block(suite): Not run.
-            contextMessages.addAll(result.context!);
-          }
-          if (contextNode != null && contextNode != result.node) {
-            contextMessages.add(
-              createLocatedMessage(contextNode, codeConstEvalContext),
-            );
-          }
-
           {
             final LocatedMessage locatedMessage = createLocatedMessage(
               node,
@@ -2705,52 +2738,24 @@
             );
             errorReporter.report(locatedMessage, contextMessages);
           }
-        } else {
-          errorReporter.report(locatedMessageActualError);
-        }
-        return new UnevaluatedConstant(
-          new InvalidExpression(result.message.problemMessage),
-        );
-      }
-      if (result is _AbortDueToThrowConstant) {
-        final Object value = result.throwValue;
-        Message? message;
-        if (value is Constant) {
-          message = codeConstEvalUnhandledException.withArgumentsOld(value);
-        } else if (value is Error) {
-          message = codeConstEvalUnhandledCoreException.withArgumentsOld(
-            value.toString(),
+          return new UnevaluatedConstant(
+            new InvalidExpression(message.problemMessage),
           );
-        }
-        assert(message != null);
-
-        final LocatedMessage locatedMessageActualError = createLocatedMessage(
-          result.node,
-          message!,
-        );
-        final List<LocatedMessage> contextMessages = <LocatedMessage>[
-          locatedMessageActualError,
-        ];
-        {
-          final LocatedMessage locatedMessage = createLocatedMessage(
-            node,
-            codeConstEvalStartingPoint,
+        case _AbortDueToInvalidExpressionConstant():
+          return new UnevaluatedConstant(
+            // Create a new [InvalidExpression] without the expression, which
+            // might now have lost the needed context. For instance references
+            // to variables no longer in scope.
+            new InvalidExpression(result.node.message),
           );
-          errorReporter.report(locatedMessage, contextMessages);
-        }
-        return new UnevaluatedConstant(
-          new InvalidExpression(message.problemMessage),
-        );
+        case _AbortDueToInvalidInitializerConstant():
+          return new UnevaluatedConstant(
+            // Create a new [InvalidExpression] without the expression, which
+            // might now have lost the needed context. For instance references
+            // to variables no longer in scope.
+            new InvalidExpression(result.node.message),
+          );
       }
-      if (result is _AbortDueToInvalidExpressionConstant) {
-        return new UnevaluatedConstant(
-          // Create a new [InvalidExpression] without the expression, which
-          // might now have lost the needed context. For instance references
-          // to variables no longer in scope.
-          new InvalidExpression(result.node.message),
-        );
-      }
-      throw "Unexpected error constant";
     }
     if (result is UnevaluatedConstant) {
       if (errorOnUnevaluatedConstant) {
@@ -3609,122 +3614,120 @@
         }
       }
       for (final Initializer init in constructor.initializers) {
-        if (init is FieldInitializer) {
-          Constant constant = _evaluateSubexpression(init.value);
-          if (constant is AbortConstant) return constant;
-          instanceBuilder!.setFieldValue(init.field, constant);
-        } else if (init is LocalInitializer) {
-          final VariableDeclaration variable = init.variable;
-          Constant constant = _evaluateSubexpression(variable.initializer!);
-          if (constant is AbortConstant) return constant;
-          env.addVariableValue(variable, constant);
-        } else if (init is SuperInitializer) {
-          AbortConstant? error = checkConstructorConst(
-            init,
-            init.target,
-            codeConstConstructorWithNonConstSuper,
-          );
-          if (error != null) return error;
-          List<DartType>? types = _evaluateSuperTypeArguments(
-            init,
-            constructor.enclosingClass.supertype!,
-          );
-          if (types == null) {
-            // Coverage-ignore-block(suite): Not run.
-            AbortConstant error = _gotError!;
-            _gotError = null;
-            return error;
-          }
-          assert(_gotError == null);
+        switch (init) {
+          case FieldInitializer():
+            Constant constant = _evaluateSubexpression(init.value);
+            if (constant is AbortConstant) return constant;
+            instanceBuilder!.setFieldValue(init.field, constant);
+          case LocalInitializer():
+            final VariableDeclaration variable = init.variable;
+            Constant constant = _evaluateSubexpression(variable.initializer!);
+            if (constant is AbortConstant) return constant;
+            env.addVariableValue(variable, constant);
+          case SuperInitializer():
+            AbortConstant? error = checkConstructorConst(
+              init,
+              init.target,
+              codeConstConstructorWithNonConstSuper,
+            );
+            if (error != null) return error;
+            List<DartType>? types = _evaluateSuperTypeArguments(
+              init,
+              constructor.enclosingClass.supertype!,
+            );
+            if (types == null) {
+              // Coverage-ignore-block(suite): Not run.
+              AbortConstant error = _gotError!;
+              _gotError = null;
+              return error;
+            }
+            assert(_gotError == null);
 
-          List<Constant>? positionalArguments = _evaluatePositionalArguments(
-            init.arguments.positional,
-          );
-          if (positionalArguments == null) {
-            // Coverage-ignore-block(suite): Not run.
-            AbortConstant error = _gotError!;
-            _gotError = null;
-            return error;
-          }
-          assert(_gotError == null);
-          Map<String, Constant>? namedArguments = _evaluateNamedArguments(
-            init.arguments.named,
-          );
-          if (namedArguments == null) {
-            // Coverage-ignore-block(suite): Not run.
-            AbortConstant error = _gotError!;
-            _gotError = null;
-            return error;
-          }
-          assert(_gotError == null);
-          error = handleConstructorInvocation(
-            init.target,
-            types,
-            positionalArguments,
-            namedArguments,
-            caller,
-          );
-          if (error != null) return error;
-        } else if (init is RedirectingInitializer) {
-          // Since a redirecting constructor targets a constructor of the same
-          // class, we pass the same [typeArguments].
+            List<Constant>? positionalArguments = _evaluatePositionalArguments(
+              init.arguments.positional,
+            );
+            if (positionalArguments == null) {
+              // Coverage-ignore-block(suite): Not run.
+              AbortConstant error = _gotError!;
+              _gotError = null;
+              return error;
+            }
+            assert(_gotError == null);
+            Map<String, Constant>? namedArguments = _evaluateNamedArguments(
+              init.arguments.named,
+            );
+            if (namedArguments == null) {
+              // Coverage-ignore-block(suite): Not run.
+              AbortConstant error = _gotError!;
+              _gotError = null;
+              return error;
+            }
+            assert(_gotError == null);
+            error = handleConstructorInvocation(
+              init.target,
+              types,
+              positionalArguments,
+              namedArguments,
+              caller,
+            );
+            if (error != null) return error;
+          case RedirectingInitializer():
+            // Since a redirecting constructor targets a constructor of the same
+            // class, we pass the same [typeArguments].
 
-          AbortConstant? error = checkConstructorConst(
-            init,
-            init.target,
-            codeConstConstructorRedirectionToNonConst,
-          );
-          if (error != null) return error;
-          List<Constant>? positionalArguments = _evaluatePositionalArguments(
-            init.arguments.positional,
-          );
-          if (positionalArguments == null) {
-            // Coverage-ignore-block(suite): Not run.
-            AbortConstant error = _gotError!;
-            _gotError = null;
-            return error;
-          }
-          assert(_gotError == null);
+            AbortConstant? error = checkConstructorConst(
+              init,
+              init.target,
+              codeConstConstructorRedirectionToNonConst,
+            );
+            if (error != null) return error;
+            List<Constant>? positionalArguments = _evaluatePositionalArguments(
+              init.arguments.positional,
+            );
+            if (positionalArguments == null) {
+              // Coverage-ignore-block(suite): Not run.
+              AbortConstant error = _gotError!;
+              _gotError = null;
+              return error;
+            }
+            assert(_gotError == null);
 
-          Map<String, Constant>? namedArguments = _evaluateNamedArguments(
-            init.arguments.named,
-          );
-          if (namedArguments == null) {
-            // Coverage-ignore-block(suite): Not run.
-            AbortConstant error = _gotError!;
-            _gotError = null;
-            return error;
-          }
-          assert(_gotError == null);
+            Map<String, Constant>? namedArguments = _evaluateNamedArguments(
+              init.arguments.named,
+            );
+            if (namedArguments == null) {
+              // Coverage-ignore-block(suite): Not run.
+              AbortConstant error = _gotError!;
+              _gotError = null;
+              return error;
+            }
+            assert(_gotError == null);
 
-          error = handleConstructorInvocation(
-            init.target,
-            typeArguments,
-            positionalArguments,
-            namedArguments,
-            caller,
-          );
-          if (error != null) return error;
-        } else if (init is AssertInitializer) {
-          AbortConstant? error = checkAssert(init.statement);
-          if (error != null) return error;
-        } else {
-          // Coverage-ignore-block: Probably unreachable.
-          // InvalidInitializer or new Initializers.
-          // InvalidInitializer is (currently) only
-          // created for classes with no constructors that doesn't have a
-          // super that takes no arguments. It thus cannot be const.
-          // Explicit constructors with incorrect super calls will get a
-          // ShadowInvalidInitializer which is actually a LocalInitializer.
-          assert(
-            false,
-            'No support for handling initializer of type '
-            '"${init.runtimeType}".',
-          );
-          return createEvaluationErrorConstant(
-            init,
-            codeNotAConstantExpression,
-          );
+            error = handleConstructorInvocation(
+              init.target,
+              typeArguments,
+              positionalArguments,
+              namedArguments,
+              caller,
+            );
+            if (error != null) return error;
+          case AssertInitializer():
+            AbortConstant? error = checkAssert(init.statement);
+            if (error != null) return error;
+          case InvalidInitializer():
+            return new _AbortDueToInvalidInitializerConstant(init);
+          // Coverage-ignore(suite): Not run.
+          case AuxiliaryInitializer():
+            // Coverage-ignore-block: Probably unreachable.
+            assert(
+              false,
+              'No support for handling initializer of type '
+              '"${init.runtimeType}".',
+            );
+            return createEvaluationErrorConstant(
+              init,
+              codeNotAConstantExpression,
+            );
         }
       }
 
@@ -4749,13 +4752,15 @@
     //
     // TODO(kustermann): The heuristic of allowing all [VariableGet]s on [Let]
     // variables might allow more than it should.
-    final VariableDeclaration variable = node.variable;
+    final ExpressionVariable variable = node.variable;
     if (enableConstFunctions || inExtensionTypeConstConstructor) {
       return env.lookupVariable(variable) ??
           // Coverage-ignore(suite): Not run.
           createEvaluationErrorConstant(
             node,
-            codeConstEvalGetterNotFound.withArgumentsOld(variable.name ?? ''),
+            codeConstEvalGetterNotFound.withArgumentsOld(
+              variable.cosmeticName ?? '',
+            ),
           );
     } else {
       if (variable.parent is Let ||
@@ -4765,7 +4770,7 @@
             createEvaluationErrorConstant(
               node,
               codeConstEvalNonConstantVariableGet.withArgumentsOld(
-                variable.name ?? '',
+                variable.cosmeticName ?? '',
               ),
             );
       }
@@ -4784,7 +4789,7 @@
   @override
   Constant visitVariableSet(VariableSet node) {
     if (enableConstFunctions || inExtensionTypeConstConstructor) {
-      final VariableDeclaration variable = node.variable;
+      final ExpressionVariable variable = node.variable;
       Constant value = _evaluateSubexpression(node.value);
       if (value is AbortConstant) return value;
       Constant? result = env.updateVariableValue(variable, value);
@@ -6397,7 +6402,7 @@
     }
   }
 
-  Constant? updateVariableValue(VariableDeclaration variable, Constant value) {
+  Constant? updateVariableValue(ExpressionVariable variable, Constant value) {
     EvaluationReference? reference = _variables[variable];
     if (reference != null) {
       reference.value = value;
@@ -6406,7 +6411,7 @@
     return _parent?.updateVariableValue(variable, value);
   }
 
-  Constant? lookupVariable(VariableDeclaration variable) {
+  Constant? lookupVariable(ExpressionVariable variable) {
     Constant? value = _variables[variable]?.value;
     if (value is UnevaluatedConstant) {
       _unreadUnevaluatedVariables.remove(variable);
@@ -6566,7 +6571,62 @@
   }
 }
 
-abstract class AbortConstant implements AuxiliaryConstant {}
+sealed class AbortConstant implements AuxiliaryConstant {
+  @override
+  R accept<R>(ConstantVisitor<R> v) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  R accept1<R, A>(ConstantVisitor1<R, A> v, A arg) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  R acceptReference<R>(ConstantReferenceVisitor<R> v) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  R acceptReference1<R, A>(ConstantReferenceVisitor1<R, A> v, A arg) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  DartType getType(StaticTypeContext context) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  String leakingDebugToString() {
+    throw new UnimplementedError();
+  }
+
+  @override
+  String toString() {
+    throw new UnimplementedError();
+  }
+
+  @override
+  String toStringInternal() {
+    throw new UnimplementedError();
+  }
+
+  @override
+  String toText(AstTextStrategy strategy) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    throw new UnimplementedError();
+  }
+
+  @override
+  void visitChildren(Visitor<dynamic> v) {
+    throw new UnimplementedError();
+  }
+}
 
 class _AbortDueToErrorConstant extends AbortConstant {
   final TreeNode node;
@@ -6580,122 +6640,18 @@
     this.context,
     required this.isEvaluationError,
   });
-
-  @override
-  R accept<R>(ConstantVisitor<R> v) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R accept1<R, A>(ConstantVisitor1<R, A> v, A arg) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R acceptReference<R>(ConstantReferenceVisitor<R> v) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R acceptReference1<R, A>(ConstantReferenceVisitor1<R, A> v, A arg) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  DartType getType(StaticTypeContext context) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String leakingDebugToString() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toString() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toStringInternal() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toText(AstTextStrategy strategy) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  void toTextInternal(AstPrinter printer) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  void visitChildren(Visitor<dynamic> v) {
-    throw new UnimplementedError();
-  }
 }
 
 class _AbortDueToInvalidExpressionConstant extends AbortConstant {
   final InvalidExpression node;
 
   _AbortDueToInvalidExpressionConstant(this.node);
+}
 
-  @override
-  R accept<R>(ConstantVisitor<R> v) {
-    throw new UnimplementedError();
-  }
+class _AbortDueToInvalidInitializerConstant extends AbortConstant {
+  final InvalidInitializer node;
 
-  @override
-  R accept1<R, A>(ConstantVisitor1<R, A> v, A arg) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R acceptReference<R>(ConstantReferenceVisitor<R> v) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R acceptReference1<R, A>(ConstantReferenceVisitor1<R, A> v, A arg) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  DartType getType(StaticTypeContext context) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String leakingDebugToString() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toString() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toStringInternal() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toText(AstTextStrategy strategy) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  void toTextInternal(AstPrinter printer) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  void visitChildren(Visitor<dynamic> v) {
-    throw new UnimplementedError();
-  }
+  _AbortDueToInvalidInitializerConstant(this.node);
 }
 
 class _AbortDueToThrowConstant extends AbortConstant {
@@ -6703,61 +6659,6 @@
   final Object throwValue;
 
   _AbortDueToThrowConstant(this.node, this.throwValue);
-
-  @override
-  R accept<R>(ConstantVisitor<R> v) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R accept1<R, A>(ConstantVisitor1<R, A> v, A arg) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R acceptReference<R>(ConstantReferenceVisitor<R> v) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  R acceptReference1<R, A>(ConstantReferenceVisitor1<R, A> v, A arg) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  DartType getType(StaticTypeContext context) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String leakingDebugToString() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toString() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toStringInternal() {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String toText(AstTextStrategy strategy) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  void toTextInternal(AstPrinter printer) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  void visitChildren(Visitor<dynamic> v) {
-    throw new UnimplementedError();
-  }
 }
 
 abstract class ErrorReporter {
@@ -6819,7 +6720,7 @@
   }
 }
 
-bool _isFormalParameter(VariableDeclaration variable) {
+bool _isFormalParameter(ExpressionVariable variable) {
   final TreeNode? parent = variable.parent;
   if (parent is FunctionNode) {
     return parent.positionalParameters.contains(variable) ||
diff --git a/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart b/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart
index 4eecb63..8b76074 100644
--- a/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart
+++ b/pkg/front_end/lib/src/kernel/dynamic_module_validator.dart
@@ -587,6 +587,17 @@
   }
 
   @override
+  void visitRedirectingFactoryInvocation(RedirectingFactoryInvocation node) {
+    _verifyCallable(node.redirectingFactoryTarget, node);
+    // Do not visit node.expression in order to avoid checking
+    // that target of a redirecting factory is callable.
+    // However, still visit children of node.expression to validate arguments.
+    final InvocationExpression expr = node.expression;
+    assert(expr is ConstructorInvocation || expr is StaticInvocation);
+    expr.visitChildren(this);
+  }
+
+  @override
   // Coverage-ignore(suite): Not run.
   void visitRedirectingFactoryTearOff(RedirectingFactoryTearOff node) {
     _verifyCallable(node.target, node);
@@ -724,6 +735,7 @@
         case Constructor():
           String name = target.enclosingClass.name;
           if (target.name.text.isNotEmpty) {
+            // Coverage-ignore-block(suite): Not run.
             name += '.' + target.name.text;
           }
           loader.addProblem(
diff --git a/pkg/front_end/lib/src/kernel/exhaustiveness.dart b/pkg/front_end/lib/src/kernel/exhaustiveness.dart
index b846e1f..cb50194 100644
--- a/pkg/front_end/lib/src/kernel/exhaustiveness.dart
+++ b/pkg/front_end/lib/src/kernel/exhaustiveness.dart
@@ -353,6 +353,43 @@
   DartType getExtensionTypeErasure(DartType type) {
     return type.extensionTypeErasure;
   }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool isEnum(DartType type) {
+    if (type is InterfaceType) {
+      return type.classNode.isEnum;
+    }
+    return false;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  Uri? libraryUri(DartType type) {
+    switch (type) {
+      case InterfaceType():
+        return type.classNode.enclosingLibrary.importUri;
+      case ExtensionType():
+        return type.extensionTypeDeclaration.enclosingLibrary.importUri;
+      case TypedefType():
+        return type.typedefNode.enclosingLibrary.importUri;
+      case IntersectionType():
+      case TypeParameterType():
+      case StructuralParameterType():
+      case FunctionTypeParameterType():
+      case ClassTypeParameterType():
+      case AuxiliaryType():
+      case InvalidType():
+      case DynamicType():
+      case VoidType():
+      case NeverType():
+      case NullType():
+      case FunctionType():
+      case FutureOrType():
+      case RecordType():
+        return null;
+    }
+  }
 }
 
 class EnumValue {
diff --git a/pkg/front_end/lib/src/kernel/expression_generator.dart b/pkg/front_end/lib/src/kernel/expression_generator.dart
index fed4675..633b657 100644
--- a/pkg/front_end/lib/src/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/kernel/expression_generator.dart
@@ -212,7 +212,6 @@
           fileOffset: fileOffset,
           length: lengthForToken(token),
         ),
-        fileOffset,
       ),
     ];
   }
@@ -407,7 +406,7 @@
 /// If the variable is final or read-only (like a parameter in a catch clause) a
 /// [ReadOnlyAccessGenerator] is created instead.
 class VariableUseGenerator extends Generator {
-  final VariableDeclaration variable;
+  final ExpressionVariable variable;
 
   VariableUseGenerator(
     ExpressionGeneratorHelper helper,
@@ -421,7 +420,7 @@
   String get _debugName => "VariableUseGenerator";
 
   @override
-  String get _plainNameForRead => variable.name!;
+  String get _plainNameForRead => variable.cosmeticName!;
 
   int get _nameOffset => fileOffset;
 
@@ -497,7 +496,7 @@
     _helper.registerVariableRead(variable);
     _helper.registerVariableAssignment(variable);
     return new LocalIncDec(
-      variable: variable as VariableDeclarationImpl,
+      variable: variable as InternalExpressionVariable,
       forEffect: forEffect,
       isPost: isPost,
       isInc: binaryOperator == plusName,
@@ -592,7 +591,7 @@
   ForInLateFinalVariableUseGenerator(
     ExpressionGeneratorHelper helper,
     Token token,
-    VariableDeclaration variable,
+    ExpressionVariable variable,
   ) : super(helper, token, variable);
 
   @override
@@ -602,7 +601,9 @@
   @override
   Expression buildAssignment(Expression value, {bool voidContext = false}) {
     InvalidExpression error = _helper.buildProblem(
-      message: codeCannotAssignToFinalVariable.withArgumentsOld(variable.name!),
+      message: codeCannotAssignToFinalVariable.withArgumentsOld(
+        variable.cosmeticName!,
+      ),
       fileUri: _helper.uri,
       fileOffset: fileOffset,
       length: lengthForToken(token),
@@ -4944,7 +4945,7 @@
   ErroneousExpressionGenerator(ExpressionGeneratorHelper helper, Token token)
     : super(helper, token);
 
-  Expression buildError({
+  InvalidExpression buildError({
     Arguments? arguments,
     required UnresolvedKind kind,
     int? charOffset,
@@ -5142,7 +5143,7 @@
     );
   }
 
-  Expression _createInvalidExpression() {
+  InvalidExpression _createInvalidExpression() {
     return LookupResult.createDuplicateExpression(
       _lookupResult,
       context: _helper.libraryBuilder.loader.target.context,
@@ -5154,7 +5155,7 @@
   }
 
   @override
-  Expression buildError({
+  InvalidExpression buildError({
     Arguments? arguments,
     required UnresolvedKind kind,
     int? charOffset,
@@ -5182,7 +5183,7 @@
   // Coverage-ignore(suite): Not run.
   List<Initializer> buildFieldInitializer(Map<String, int>? initializedFields) {
     return <Initializer>[
-      _helper.buildInvalidInitializer(_createInvalidExpression(), fileOffset),
+      _helper.buildInvalidInitializer(_createInvalidExpression()),
     ];
   }
 
@@ -5286,7 +5287,7 @@
   }
 
   @override
-  Expression buildError({
+  InvalidExpression buildError({
     Arguments? arguments,
     required UnresolvedKind kind,
     int? charOffset,
@@ -6065,11 +6066,11 @@
   // Coverage-ignore(suite): Not run.
   void printOn(StringSink sink) {}
 
-  Expression buildProblem() {
+  InvalidExpression buildProblem() {
     return buildProblemExpression(_helper, message, fileOffset);
   }
 
-  static Expression buildProblemExpression(
+  static InvalidExpression buildProblemExpression(
     ExpressionGeneratorHelper _helper,
     Message message,
     int fileOffset,
@@ -6334,7 +6335,9 @@
     }
   }
 
-  Expression buildFieldInitializerError(Map<String, int>? initializedFields) {
+  InvalidExpression buildFieldInitializerError(
+    Map<String, int>? initializedFields,
+  ) {
     String keyword = isSuper ? "super" : "this";
     return _helper.buildProblem(
       message: codeThisOrSuperAccessInFieldInitializer.withArgumentsOld(
@@ -6348,10 +6351,8 @@
 
   @override
   List<Initializer> buildFieldInitializer(Map<String, int>? initializedFields) {
-    Expression error = buildFieldInitializerError(initializedFields);
-    return <Initializer>[
-      _helper.buildInvalidInitializer(error, error.fileOffset),
-    ];
+    InvalidExpression error = buildFieldInitializerError(initializedFields);
+    return <Initializer>[_helper.buildInvalidInitializer(error)];
   }
 
   @override
@@ -6522,7 +6523,6 @@
               fileOffset: offset,
               length: noLength,
             ),
-            offset,
           );
         }
         MemberBuilder? memberBuilder = result.getable;
@@ -6540,12 +6540,13 @@
       }
       if (constructor == null) {
         String fullName = _helper.superConstructorNameForDiagnostics(name.text);
-        LocatedMessage message = codeSuperclassHasNoConstructor
-            .withArgumentsOld(fullName)
-            .withLocation(_fileUri, fileOffset, lengthForToken(token));
         return _helper.buildInvalidInitializer(
-          _helper.buildProblemFromLocatedMessage(message),
-          offset,
+          _helper.buildProblem(
+            message: codeSuperclassHasNoConstructor.withArgumentsOld(fullName),
+            fileUri: _fileUri,
+            fileOffset: fileOffset,
+            length: lengthForToken(token),
+          ),
         );
       } else {
         return _helper.buildSuperInitializer(
@@ -6681,7 +6682,7 @@
   String get _debugName => "IncompleteErrorGenerator";
 
   @override
-  Expression buildError({
+  InvalidExpression buildError({
     Arguments? arguments,
     required UnresolvedKind kind,
     String? name,
diff --git a/pkg/front_end/lib/src/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/kernel/expression_generator_helper.dart
index 983186a..1a82ac9 100644
--- a/pkg/front_end/lib/src/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/kernel/expression_generator_helper.dart
@@ -85,7 +85,7 @@
 
   LibraryFeatures get libraryFeatures;
 
-  bool isDeclaredInEnclosingCase(VariableDeclaration variable);
+  bool isDeclaredInEnclosingCase(ExpressionVariable variable);
 
   Generator processLookupResult({
     required LookupResult? lookupResult,
@@ -105,10 +105,7 @@
     bool isTypeArgumentsInForest = false,
   });
 
-  Initializer buildInvalidInitializer(
-    Expression expression, [
-    int offset = TreeNode.noOffset,
-  ]);
+  Initializer buildInvalidInitializer(InvalidExpression expression);
 
   List<Initializer> createFieldInitializer(
     String name,
@@ -137,7 +134,7 @@
     required int fileOffset,
   });
 
-  Expression buildUnresolvedError(
+  InvalidExpression buildUnresolvedError(
     String name,
     int fileOffset, {
     bool isSuper,
@@ -146,8 +143,6 @@
     bool errorHasBeenReported,
   });
 
-  Expression buildProblemFromLocatedMessage(LocatedMessage message);
-
   Expression wrapInDeferredCheck(
     Expression expression,
     PrefixBuilder prefix,
@@ -231,17 +226,17 @@
 
   /// Creates a [VariableGet] of the [variable] using [charOffset] as the file
   /// offset of the created node.
-  Expression createVariableGet(VariableDeclaration variable, int charOffset);
+  Expression createVariableGet(ExpressionVariable variable, int charOffset);
 
   /// Registers that [variable] is read from.
   ///
   /// This is needed for type promotion.
-  void registerVariableRead(VariableDeclaration variable);
+  void registerVariableRead(ExpressionVariable variable);
 
   /// Registers that [variable] is assigned to.
   ///
   /// This is needed for type promotion.
-  void registerVariableAssignment(VariableDeclaration variable);
+  void registerVariableAssignment(ExpressionVariable variable);
 
   TypeEnvironment get typeEnvironment;
 
diff --git a/pkg/front_end/lib/src/kernel/forest.dart b/pkg/front_end/lib/src/kernel/forest.dart
index a18947d..e4c1711 100644
--- a/pkg/front_end/lib/src/kernel/forest.dart
+++ b/pkg/front_end/lib/src/kernel/forest.dart
@@ -621,8 +621,6 @@
     return new Throw(expression)..fileOffset = fileOffset;
   }
 
-  bool isThrow(Object? o) => o is Throw;
-
   Statement createTryStatement(
     int fileOffset,
     Statement tryBlock,
@@ -941,7 +939,7 @@
 
   AssignedVariablePattern createAssignedVariablePattern(
     int fileOffset,
-    VariableDeclaration variable,
+    ExpressionVariable variable,
   ) {
     return new AssignedVariablePattern(variable)..fileOffset = fileOffset;
   }
diff --git a/pkg/front_end/lib/src/kernel/internal_ast.dart b/pkg/front_end/lib/src/kernel/internal_ast.dart
index c94a452..fc88af8 100644
--- a/pkg/front_end/lib/src/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/kernel/internal_ast.dart
@@ -39,7 +39,7 @@
       Expression,
       Pattern,
       SharedTypeView,
-      VariableDeclaration
+      ExpressionVariable
     >;
 
 mixin InternalTreeNode implements TreeNode {
@@ -398,7 +398,7 @@
       printer.newLine();
     }
     printer.write('} => ');
-    printer.write(printer.getVariableDeclarationName(variable));
+    printer.write(printer.getVariableName(variable));
   }
 }
 
@@ -853,32 +853,21 @@
 }
 
 /// Front end specific implementation of [VariableDeclaration].
-class VariableDeclarationImpl extends VariableStatement {
+class VariableDeclarationImpl extends VariableStatement
+    with InternalExpressionVariableMixin
+    implements InternalExpressionVariable {
+  @override
+  ExpressionVariable get astVariable => this;
+
+  @override
   final bool forSyntheticToken;
 
-  /// Determine whether the given [VariableDeclarationImpl] had an implicit
-  /// type.
-  ///
-  /// This is static to avoid introducing a method that would be visible to
-  /// the kernel.
+  @override
   final bool isImplicitlyTyped;
 
-  /// Determines whether the given [VariableDeclarationImpl] represents a
-  /// local function.
-  ///
-  /// This is static to avoid introducing a method that would be visible to the
-  /// kernel.
-  // TODO(ahe): Investigate if this can be removed.
+  @override
   final bool isLocalFunction;
 
-  /// Whether the variable is final with no initializer in a null safe library.
-  ///
-  /// Such variables behave similar to those declared with the `late` keyword,
-  /// except that the don't have lazy evaluation semantics, and it is statically
-  /// verified by the front end that they are always assigned before they are
-  /// used.
-  bool isStaticLate;
-
   VariableDeclarationImpl(
     String? name, {
     this.forSyntheticToken = false,
@@ -895,8 +884,9 @@
     bool isRequired = false,
     bool isLowered = false,
     bool isSynthesized = false,
-    this.isStaticLate = false,
+    bool isStaticLate = false,
     bool isWildcard = false,
+    bool isLateFinalWithoutInitializer = false,
   }) : isImplicitlyTyped = type == null,
        isLocalFunction = isLocalFunction,
        super(
@@ -914,52 +904,26 @@
          isSynthesized: isSynthesized,
          hasDeclaredInitializer: hasDeclaredInitializer,
          isWildcard: isWildcard,
-       );
+       ) {
+    this.isStaticLate = isStaticLate;
+    this.isLateFinalWithoutInitializer = isLateFinalWithoutInitializer;
+  }
 
   VariableDeclarationImpl.forEffect(Expression initializer)
     : forSyntheticToken = false,
       isImplicitlyTyped = false,
       isLocalFunction = false,
-      isStaticLate = false,
-      super.forValue(initializer);
+      super.forValue(initializer) {
+    isStaticLate = false;
+  }
 
   VariableDeclarationImpl.forValue(Expression initializer)
     : forSyntheticToken = false,
       isImplicitlyTyped = true,
       isLocalFunction = false,
-      isStaticLate = false,
-      super.forValue(initializer);
-
-  // The synthesized local getter function for a lowered late variable.
-  //
-  // This is set in `InferenceVisitor.visitVariableDeclaration` when late
-  // lowering is enabled.
-  VariableDeclaration? lateGetter;
-
-  // The synthesized local setter function for an assignable lowered late
-  // variable.
-  //
-  // This is set in `InferenceVisitor.visitVariableDeclaration` when late
-  // lowering is enabled.
-  VariableDeclaration? lateSetter;
-
-  // Is `true` if this a lowered late final variable without an initializer.
-  //
-  // This is set in `InferenceVisitor.visitVariableDeclaration` when late
-  // lowering is enabled.
-  bool isLateFinalWithoutInitializer = false;
-
-  // The original type (declared or inferred) of a lowered late variable.
-  //
-  // This is set in `InferenceVisitor.visitVariableDeclaration` when late
-  // lowering is enabled.
-  DartType? lateType;
-
-  // The original name of a lowered late variable.
-  //
-  // This is set in `InferenceVisitor.visitVariableDeclaration` when late
-  // lowering is enabled.
-  String? lateName;
+      super.forValue(initializer) {
+    isStaticLate = false;
+  }
 
   @override
   bool get isAssignable {
@@ -984,6 +948,423 @@
   }
 }
 
+// Coverage-ignore(suite): Not run.
+class InternalLocalVariable
+    with InternalExpressionVariableMixin, DelegatingVariableMixin
+    implements LocalVariable, InternalExpressionVariable {
+  @override
+  LocalVariable astVariable;
+
+  @override
+  final bool forSyntheticToken;
+
+  @override
+  final bool isImplicitlyTyped;
+
+  @override
+  final bool isLocalFunction;
+
+  InternalLocalVariable({
+    required this.astVariable,
+    required this.isImplicitlyTyped,
+    this.forSyntheticToken = false,
+    this.isLocalFunction = false,
+  });
+}
+
+mixin DelegatingVariableMixin on InternalExpressionVariableMixin
+    implements InternalExpressionVariable {
+  @override
+  // Coverage-ignore(suite): Not run.
+  String? get cosmeticName => astVariable.cosmeticName;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set cosmeticName(String? value) {
+    astVariable.cosmeticName = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get hasDeclaredInitializer => astVariable.hasDeclaredInitializer;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set hasDeclaredInitializer(bool value) {
+    astVariable.hasDeclaredInitializer = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  Expression? get initializer => astVariable.initializer;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set initializer(Expression? value) {
+    astVariable.initializer = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isConst => astVariable.isConst;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isConst(bool value) {
+    astVariable.isConst = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isCovariantByClass => astVariable.isCovariantByClass;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isCovariantByClass(bool value) {
+    astVariable.isCovariantByClass = value;
+  }
+
+  @override
+  bool get isCovariantByDeclaration {
+    // TODO(cstefantsova): Should it return `false` instead?
+    throw new UnsupportedError("${astVariable.runtimeType}");
+  }
+
+  @override
+  void set isCovariantByDeclaration(bool value) {
+    // TODO(cstefantsova): Should it do nothing instead?
+    throw new UnsupportedError("${astVariable.runtimeType}");
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isErroneouslyInitialized => astVariable.isErroneouslyInitialized;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isErroneouslyInitialized(bool value) {
+    astVariable.isErroneouslyInitialized = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isFinal => astVariable.isFinal;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isFinal(bool value) {
+    astVariable.isFinal = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isHoisted => astVariable.isHoisted;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isHoisted(bool value) {
+    astVariable.isHoisted = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isInitializingFormal => astVariable.isInitializingFormal;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isInitializingFormal(bool value) {
+    astVariable.isInitializingFormal = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isLate => astVariable.isLate;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isLate(bool value) {
+    astVariable.isLate = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isLowered => astVariable.isLowered;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isLowered(bool value) {
+    astVariable.isLowered = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isRequired => astVariable.isRequired;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isRequired(bool value) {
+    astVariable.isRequired = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isSuperInitializingFormal => astVariable.isSuperInitializingFormal;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isSuperInitializingFormal(bool value) {
+    astVariable.isSuperInitializingFormal = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isSynthesized => astVariable.isSynthesized;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isSynthesized(bool value) {
+    astVariable.isSynthesized = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isWildcard => astVariable.isWildcard;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set isWildcard(bool value) {
+    astVariable.isWildcard = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  DartType get type => astVariable.type;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set type(DartType value) {
+    astVariable.type = type;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  VariableInitialization? get variableInitialization =>
+      astVariable.variableInitialization;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void set variableInitialization(VariableInitialization? value) {
+    astVariable.variableInitialization = value;
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  bool get isAssignable => astVariable.isAssignable;
+
+  @override
+  int get fileOffset {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set fileOffset(int value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  int get flags {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  void set flags(int value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  TreeNode? get parent {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set parent(TreeNode? value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  R accept<R>(TreeVisitor<R> v) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  VariableContext get context {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  Component? get enclosingComponent {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  List<int>? get fileOffsetsIfMultiple {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  String leakingDebugToString() {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  Location? get location {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  String? get name {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void replaceChild(TreeNode child, TreeNode replacement) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void replaceWith(TreeNode replacement) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  String toStringInternal() {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  String toText(AstTextStrategy strategy) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void transformChildren(Transformer v) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void visitChildren(Visitor<dynamic> v) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+}
+
+abstract interface class InternalExpressionVariable
+    implements IExpressionVariable {
+  /// This is the output variable that the clients receive.
+  ///
+  /// Most of the calls to variable properties are delegated to [astVariable],
+  /// but some operations must be performed directly on [astVariable], as
+  /// follows:
+  ///
+  /// * passing [astVariable] into the flow analysis engine,
+  /// * using [astVariable] as a part of the generated AST,
+  /// * checking semantic properties of an AST node, such as [isExtensionThis]
+  ///   in `lowering_predicates.dart`.
+  ExpressionVariable get astVariable;
+
+  bool get forSyntheticToken;
+
+  /// Determine whether the given [InternalExpressionVariable] had an implicit
+  /// type.
+  bool get isImplicitlyTyped;
+
+  /// Determines whether the given [InternalExpressionVariable] represents a
+  /// local function.
+  bool get isLocalFunction;
+
+  /// Whether the variable is final with no initializer.
+  ///
+  /// Such variables behave similar to those declared with the `late` keyword,
+  /// except that the don't have lazy evaluation semantics, and it is statically
+  /// verified by the front end that they are always assigned before they are
+  /// used.
+  abstract bool isStaticLate;
+
+  /// The synthesized local getter function for a lowered late variable.
+  ///
+  /// This is set in `InferenceVisitor.visitVariableDeclaration` when late
+  /// lowering is enabled.
+  abstract VariableDeclaration? lateGetter;
+
+  /// The synthesized local setter function for an assignable lowered late
+  /// variable.
+  ///
+  /// This is set in `InferenceVisitor.visitVariableDeclaration` when late
+  /// lowering is enabled.
+  abstract VariableDeclaration? lateSetter;
+
+  /// Is `true` if this a lowered late final variable without an initializer.
+  ///
+  /// This is set in `InferenceVisitor.visitVariableDeclaration` when late
+  /// lowering is enabled.
+  abstract bool isLateFinalWithoutInitializer;
+
+  /// The original type (declared or inferred) of a lowered late variable.
+  ///
+  /// This is set in `InferenceVisitor.visitVariableDeclaration` when late
+  /// lowering is enabled.
+  abstract DartType? lateType;
+
+  /// The original name of a lowered late variable.
+  ///
+  /// This is set in `InferenceVisitor.visitVariableDeclaration` when late
+  /// lowering is enabled.
+  abstract String? lateName;
+}
+
+mixin InternalExpressionVariableMixin implements InternalExpressionVariable {
+  @override
+  bool get forSyntheticToken;
+
+  @override
+  bool get isImplicitlyTyped;
+
+  @override
+  bool get isLocalFunction;
+
+  @override
+  bool isStaticLate = false;
+
+  @override
+  VariableDeclaration? lateGetter;
+
+  @override
+  VariableDeclaration? lateSetter;
+
+  @override
+  bool isLateFinalWithoutInitializer = false;
+
+  @override
+  DartType? lateType;
+
+  @override
+  String? lateName;
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  ExpressionVariable get asExpressionVariable => this as ExpressionVariable;
+}
+
 /// Front end specific implementation of [LoadLibrary].
 class LoadLibraryImpl extends LoadLibrary {
   final ArgumentsImpl? arguments;
@@ -1906,7 +2287,7 @@
 ///
 class LocalIncDec extends InternalExpression {
   /// The accessed variable.
-  final VariableDeclarationImpl variable;
+  final InternalExpressionVariable variable;
 
   /// `true` if the inc/dec is a postfix expression, i.e. of the form `a++` as
   /// opposed the prefix expression `++a`.
@@ -1951,7 +2332,7 @@
         printer.write('--');
       }
     }
-    printer.write(variable.name!);
+    printer.write(variable.cosmeticName!);
     if (isPost) {
       if (isInc) {
         printer.write('++');
diff --git a/pkg/front_end/lib/src/kernel/kernel_target.dart b/pkg/front_end/lib/src/kernel/kernel_target.dart
index 876a951..ed396e7 100644
--- a/pkg/front_end/lib/src/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/kernel/kernel_target.dart
@@ -1484,15 +1484,21 @@
               offset = cls.fileOffset;
               fileUri = cls.fileUri;
             }
+            Message message = codeSuperclassHasNoDefaultConstructor
+                .withArgumentsOld(cls.superclass!.name);
             classBuilder.libraryBuilder.addProblem(
-              codeSuperclassHasNoDefaultConstructor.withArgumentsOld(
-                cls.superclass!.name,
-              ),
+              message,
               offset,
               noLength,
               fileUri,
             );
-            initializer = new InvalidInitializer();
+            String text = context
+                .format(
+                  message.withLocation(fileUri, offset, noLength),
+                  CfeSeverity.error,
+                )
+                .plain;
+            initializer = new InvalidInitializer(text);
           } else {
             initializer = new SuperInitializer(
               superTarget,
diff --git a/pkg/front_end/lib/src/kernel/kernel_variable_builder.dart b/pkg/front_end/lib/src/kernel/kernel_variable_builder.dart
index 41d3b74..0ddfce7 100644
--- a/pkg/front_end/lib/src/kernel/kernel_variable_builder.dart
+++ b/pkg/front_end/lib/src/kernel/kernel_variable_builder.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:kernel/ast.dart' show VariableDeclaration;
+import 'package:kernel/ast.dart' show ExpressionVariable;
 
 import '../base/lookup_result.dart';
 import '../builder/builder.dart';
@@ -18,7 +18,7 @@
   final Uri fileUri;
 
   @override
-  final VariableDeclaration variable;
+  final ExpressionVariable variable;
 
   VariableBuilderImpl(this.name, this.variable, this.fileUri);
 
@@ -43,7 +43,7 @@
 
   @override
   // Coverage-ignore(suite): Not run.
-  String get fullNameForErrors => variable.name ?? "<unnamed>";
+  String get fullNameForErrors => variable.cosmeticName ?? "<unnamed>";
 
   @override
   String toString() => 'VariableBuilderImpl($fullNameForErrors)';
diff --git a/pkg/front_end/lib/src/kernel/resolver.dart b/pkg/front_end/lib/src/kernel/resolver.dart
index eee94e6..8ec1d44 100644
--- a/pkg/front_end/lib/src/kernel/resolver.dart
+++ b/pkg/front_end/lib/src/kernel/resolver.dart
@@ -704,7 +704,7 @@
     required LookupScope scope,
     required Token token,
     required Procedure procedure,
-    required List<VariableDeclarationImpl> extraKnownVariables,
+    required List<ExpressionVariable> extraKnownVariables,
     required ExpressionEvaluationHelper expressionEvaluationHelper,
     required VariableDeclaration? extensionThis,
   }) {
@@ -789,7 +789,7 @@
         );
       }
     }
-    for (VariableDeclarationImpl extraVariable in extraKnownVariables) {
+    for (ExpressionVariable extraVariable in extraKnownVariables) {
       context.typeInferrer.flowAnalysis.declare(
         extraVariable,
         new SharedTypeView(extraVariable.type),
@@ -1007,13 +1007,13 @@
   /// [fileOffset] as the file offset.
   VariableGet _createVariableGet({
     required AssignedVariables assignedVariables,
-    required VariableDeclarationImpl variable,
+    required InternalExpressionVariable variable,
     required int fileOffset,
   }) {
     if (!variable.isLocalFunction && !variable.isWildcard) {
       assignedVariables.read(variable);
     }
-    return new VariableGet(variable)..fileOffset = fileOffset;
+    return new VariableGet(variable.astVariable)..fileOffset = fileOffset;
   }
 
   void _declareFormals({
diff --git a/pkg/front_end/lib/src/source/diet_listener.dart b/pkg/front_end/lib/src/source/diet_listener.dart
index c85a5402..365939b 100644
--- a/pkg/front_end/lib/src/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/source/diet_listener.dart
@@ -23,7 +23,8 @@
         Identifier,
         OperatorIdentifier,
         QualifiedNameIdentifier,
-        SimpleIdentifier;
+        SimpleIdentifier,
+        OmittedIdentifier;
 import '../base/ignored_parser_errors.dart' show isIgnoredParserError;
 import '../base/scope.dart';
 import '../codes/cfe_codes.dart'
@@ -127,7 +128,9 @@
     bool hasName,
   ) {
     debugEvent("PartOf");
-    if (hasName) discard(1);
+    if (hasName) {
+      discard(1);
+    }
     discard(1); // Metadata.
   }
 
@@ -326,7 +329,9 @@
     );
     debugEvent("FunctionTypeAlias");
 
-    if (equals == null) pop(); // endToken
+    if (equals == null) {
+      pop(); // endToken
+    }
     pop(); // name
     // Metadata is handled in [SourceTypeAliasBuilder.buildOutlineExpressions].
     pop(); // metadata
@@ -334,7 +339,8 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -346,8 +352,8 @@
     Token beginToken,
     Token endToken,
   ) {
-    debugEvent("Fields");
-    buildFields(count, beginToken, false);
+    debugEvent("endFields");
+    _buildFields(count, beginToken, false);
   }
 
   @override
@@ -420,7 +426,7 @@
     Token endToken,
   ) {
     debugEvent("TopLevelFields");
-    buildFields(count, beginToken, true);
+    _buildFields(count, beginToken, true);
   }
 
   @override
@@ -457,6 +463,12 @@
   }
 
   @override
+  void handleNoIdentifier(Token token, IdentifierContext context) {
+    debugEvent("handleNoIdentifier");
+    push(new OmittedIdentifier(token));
+  }
+
+  @override
   void handleQualified(Token period) {
     assert(
       checkState(period, [
@@ -683,7 +695,33 @@
   }
 
   @override
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
+    Token beginToken,
+    Token factoryKeyword,
+    Token endToken,
+  ) {
+    debugEvent("Factory");
+    switch (kind) {
+      case DeclarationKind.Class:
+      case DeclarationKind.Enum:
+      case DeclarationKind.ExtensionType:
+      case DeclarationKind.Mixin:
+        _endClassFactoryMethod(beginToken, factoryKeyword, endToken);
+      case DeclarationKind.Extension:
+        // Skip the declaration. An error as already been produced by the
+        // parser.
+        pop(); // bodyToken
+        pop(); // name
+        pop(); // metadata
+        checkEmpty(beginToken.charOffset);
+      // Coverage-ignore(suite): Not run.
+      case DeclarationKind.TopLevel:
+        throw new UnsupportedError("Unexpected factory kind $kind.");
+    }
+  }
+
+  void _endClassFactoryMethod(
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
@@ -695,7 +733,6 @@
         /* metadata token */ ValueKinds.TokenOrNull,
       ]),
     );
-    debugEvent("ClassFactoryMethod");
     Token bodyToken = pop() as Token;
     Object? name = pop();
     Token? metadata = pop() as Token?;
@@ -725,36 +762,6 @@
   }
 
   @override
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    debugEvent("ExtensionFactoryMethod");
-    pop(); // bodyToken
-    pop(); // name
-    pop(); // metadata
-    checkEmpty(beginToken.charOffset);
-    // Skip the declaration. An error as already been produced by the parser.
-  }
-
-  @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("ExtensionConstructor");
-    pop(); // bodyToken
-    pop(); // name
-    pop(); // metadata
-    checkEmpty(beginToken.charOffset);
-    // Skip the declaration. An error as already been produced by the parser.
-  }
-
-  @override
   void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     debugEvent("RedirectingFactoryBody");
     discard(1); // ConstructorReference.
@@ -790,103 +797,46 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      false,
-    );
+    _endClassMethod(getOrSet, beginToken, beginParam);
   }
 
   @override
-  void endClassConstructor(
-    Token? getOrSet,
+  void endConstructor(
+    DeclarationKind kind,
     Token beginToken,
+    Token? newToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      true,
-    );
+    switch (kind) {
+      case DeclarationKind.Class:
+      case DeclarationKind.Enum:
+      case DeclarationKind.ExtensionType:
+      case DeclarationKind.Mixin:
+        _endClassConstructor(beginToken, beginParam);
+      case DeclarationKind.Extension:
+        // Skip the declaration. An error as already been produced by the
+        // parser.
+        pop(); // bodyToken
+        pop(); // name
+        pop(); // metadata
+        checkEmpty(beginToken.charOffset);
+      // Coverage-ignore(suite): Not run.
+      case DeclarationKind.TopLevel:
+        throw new UnsupportedError("Unexpected constructor kind $kind.");
+    }
   }
 
-  @override
-  void endMixinMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      false,
-    );
-  }
-
-  @override
-  void endExtensionMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      false,
-    );
-  }
-
-  @override
-  void endMixinConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      true,
-    );
-  }
-
-  void _endClassMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-    bool isConstructor,
-  ) {
+  void _endClassMethod(Token? getOrSet, Token beginToken, Token beginParam) {
     debugEvent("Method");
     assert(
       checkState(beginToken, [
@@ -906,22 +856,18 @@
     Identifier identifier = name as Identifier;
 
     FunctionFragment functionFragment;
-    if (isConstructor) {
-      functionFragment = _offsetMap.lookupConstructor(identifier);
-    } else {
-      ProcedureKind kind = computeProcedureKind(getOrSet);
-      switch (kind) {
-        case ProcedureKind.Method:
-        case ProcedureKind.Operator:
-          functionFragment = _offsetMap.lookupMethod(identifier);
-        case ProcedureKind.Getter:
-          functionFragment = _offsetMap.lookupGetter(identifier);
-        case ProcedureKind.Setter:
-          functionFragment = _offsetMap.lookupSetter(identifier);
-        // Coverage-ignore(suite): Not run.
-        case ProcedureKind.Factory:
-          throw new UnsupportedError("Unexpected procedure kind: $kind");
-      }
+    ProcedureKind kind = computeProcedureKind(getOrSet);
+    switch (kind) {
+      case ProcedureKind.Method:
+      case ProcedureKind.Operator:
+        functionFragment = _offsetMap.lookupMethod(identifier);
+      case ProcedureKind.Getter:
+        functionFragment = _offsetMap.lookupGetter(identifier);
+      case ProcedureKind.Setter:
+        functionFragment = _offsetMap.lookupSetter(identifier);
+      // Coverage-ignore(suite): Not run.
+      case ProcedureKind.Factory:
+        throw new UnsupportedError("Unexpected procedure kind: $kind");
     }
     FunctionBodyBuildingContext functionBodyBuildingContext = functionFragment
         .createFunctionBodyBuildingContext();
@@ -930,7 +876,36 @@
     }
   }
 
-  void buildFields(int count, Token token, bool isTopLevel) {
+  void _endClassConstructor(Token beginToken, Token beginParam) {
+    debugEvent("Method");
+    assert(
+      checkState(beginToken, [
+        /* bodyToken */ ValueKinds.Token,
+        /* name */ ValueKinds.IdentifierOrParserRecovery,
+        /* metadata token */ ValueKinds.TokenOrNull,
+      ]),
+    );
+    // TODO(danrubel): Consider removing the beginParam parameter
+    // and using bodyToken, but pushing a NullValue on the stack
+    // in handleNoFormalParameters rather than the supplied token.
+    pop(); // bodyToken
+    Object? name = pop();
+    Token? metadata = pop() as Token?;
+    checkEmpty(beginToken.charOffset);
+    if (name is ParserRecovery || currentClassIsParserRecovery) return;
+    Identifier identifier = name as Identifier;
+
+    FunctionFragment functionFragment = _offsetMap.lookupConstructor(
+      identifier,
+    );
+    FunctionBodyBuildingContext functionBodyBuildingContext = functionFragment
+        .createFunctionBodyBuildingContext();
+    if (functionBodyBuildingContext.shouldBuild) {
+      buildFunctionBody(functionBodyBuildingContext, beginParam, metadata);
+    }
+  }
+
+  void _buildFields(int count, Token token, bool isTopLevel) {
     assert(
       checkState(
         token,
@@ -1027,6 +1002,38 @@
   }
 
   @override
+  // Coverage-ignore(suite): Not run.
+  void handleNoClassBody(Token semicolonToken) {
+    assert(
+      checkState(semicolonToken, [
+        ValueKinds.Token,
+        ValueKinds.IdentifierOrParserRecoveryOrNull,
+        ValueKinds.TokenOrNull,
+      ]),
+    );
+    debugEvent("NoClassBody");
+    pop(); // Begin token
+    pop(); // Name
+    pop(); // Annotation begin token.
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    assert(
+      checkState(semicolonToken, [
+        ValueKinds.Token,
+        ValueKinds.IdentifierOrParserRecoveryOrNull,
+        ValueKinds.TokenOrNull,
+      ]),
+    );
+    debugEvent("NoExtensionTypeBody");
+    pop(); // Begin token
+    pop(); // Name
+    pop(); // Annotation begin token.
+  }
+
+  @override
   void endClassOrMixinOrExtensionBody(
     DeclarationKind kind,
     int memberCount,
@@ -1149,21 +1156,18 @@
       // TODO(johnniwinther): Handle [ParserRecovery].
       pop() as Identifier;
     }
-    // TODO(johnniwinther): Support primary constructors in general.
-    if (forExtensionType) {
-      FunctionFragment functionFragment = _offsetMap.lookupPrimaryConstructor(
-        beginToken,
+    FunctionFragment functionFragment = _offsetMap.lookupPrimaryConstructor(
+      beginToken,
+    );
+    FunctionBodyBuildingContext functionBodyBuildingContext = functionFragment
+        .createFunctionBodyBuildingContext();
+    if (functionBodyBuildingContext.shouldBuild) {
+      libraryBuilder.loader.createResolver().buildPrimaryConstructor(
+        libraryBuilder: libraryBuilder,
+        functionBodyBuildingContext: functionBodyBuildingContext,
+        fileUri: uri,
+        startToken: formalsToken,
       );
-      FunctionBodyBuildingContext functionBodyBuildingContext = functionFragment
-          .createFunctionBodyBuildingContext();
-      if (functionBodyBuildingContext.shouldBuild) {
-        libraryBuilder.loader.createResolver().buildPrimaryConstructor(
-          libraryBuilder: libraryBuilder,
-          functionBodyBuildingContext: functionBodyBuildingContext,
-          fileUri: uri,
-          startToken: formalsToken,
-        );
-      }
     }
 
     // The [memberScope] is set in [beginClassOrMixinOrExtensionBody] and
@@ -1185,6 +1189,22 @@
   }
 
   @override
+  // Coverage-ignore(suite): Not run.
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    debugEvent("endPrimaryConstructorBody");
+    assert(
+      checkState(beginToken, [/* metadata token */ ValueKinds.TokenOrNull]),
+    );
+    // TODO(primary-constructors): Implement primary constructor body.
+    pop() as Token?;
+    checkEmpty(beginToken.charOffset);
+  }
+
+  @override
   void endExtensionTypeDeclaration(
     Token beginToken,
     Token? augmentToken,
@@ -1251,59 +1271,6 @@
   }
 
   @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      true,
-    );
-  }
-
-  @override
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      false,
-    );
-  }
-
-  @override
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    debugEvent("Fields");
-    buildFields(count, beginToken, false);
-  }
-
-  @override
   void endNamedMixinApplication(
     Token beginToken,
     Token classKeyword,
diff --git a/pkg/front_end/lib/src/source/fragment_factory.dart b/pkg/front_end/lib/src/source/fragment_factory.dart
index fc624a4..681eb8e 100644
--- a/pkg/front_end/lib/src/source/fragment_factory.dart
+++ b/pkg/front_end/lib/src/source/fragment_factory.dart
@@ -324,15 +324,13 @@
     required int nameOffset,
     required int formalsOffset,
     required Modifiers modifiers,
-    required bool inConstructor,
     required bool isStatic,
-    required bool isConstructor,
     required bool forAbstractClassOrMixin,
     required bool isExtensionMember,
     required bool isExtensionTypeMember,
     required AsyncMarker asyncModifier,
     required String? nativeMethodName,
-    required ProcedureKind? kind,
+    required ProcedureKind kind,
   });
 
   void addConstructor({
@@ -340,7 +338,6 @@
     required List<MetadataBuilder>? metadata,
     required Modifiers modifiers,
     required Identifier identifier,
-    required ConstructorName constructorName,
     required List<TypeParameterFragment>? typeParameters,
     required List<FormalParameterBuilder>? formals,
     required int startOffset,
@@ -348,6 +345,7 @@
     required int endOffset,
     required String? nativeMethodName,
     required Token? beginInitializers,
+    required bool hasNewKeyword,
     required bool forAbstractClassOrMixin,
   });
 
@@ -364,6 +362,7 @@
 
   void addPrimaryConstructorField({
     required List<MetadataBuilder>? metadata,
+    required Modifiers modifiers,
     required TypeBuilder type,
     required String name,
     required int nameOffset,
@@ -387,7 +386,8 @@
   ConstructorName computeAndValidateConstructorName(
     DeclarationFragmentImpl enclosingDeclaration,
     Identifier identifier, {
-    isFactory = false,
+    bool hasNewKeyword = false,
+    bool isFactory = false,
   });
 
   void addMethod({
@@ -466,6 +466,7 @@
     Modifiers modifiers,
     TypeBuilder type,
     String name,
+    String? publicName,
     bool hasThis,
     bool hasSuper,
     int charOffset,
diff --git a/pkg/front_end/lib/src/source/fragment_factory_impl.dart b/pkg/front_end/lib/src/source/fragment_factory_impl.dart
index 50855fa..1292225 100644
--- a/pkg/front_end/lib/src/source/fragment_factory_impl.dart
+++ b/pkg/front_end/lib/src/source/fragment_factory_impl.dart
@@ -16,7 +16,12 @@
 import '../base/configuration.dart' show Configuration;
 import '../base/directives.dart';
 import '../base/export.dart' show Export;
-import '../base/identifiers.dart' show Identifier, QualifiedNameIdentifier;
+import '../base/identifiers.dart'
+    show
+        Identifier,
+        QualifiedNameIdentifier,
+        OperatorIdentifier,
+        OmittedIdentifier;
 import '../base/import.dart' show Import;
 import '../base/messages.dart';
 import '../base/modifiers.dart' show Modifiers;
@@ -1307,123 +1312,80 @@
     required int nameOffset,
     required int formalsOffset,
     required Modifiers modifiers,
-    required bool inConstructor,
     required bool isStatic,
-    required bool isConstructor,
     required bool forAbstractClassOrMixin,
     required bool isExtensionMember,
     required bool isExtensionTypeMember,
     required AsyncMarker asyncModifier,
     required String? nativeMethodName,
-    required ProcedureKind? kind,
+    required ProcedureKind kind,
   }) {
-    DeclarationFragmentImpl declarationFragment = _declarationFragments.current;
-    // TODO(johnniwinther): Avoid discrepancy between [inConstructor] and
-    // [isConstructor]. The former is based on the enclosing declaration name
-    // and get/set keyword. The latter also takes initializers into account.
-
-    if (isConstructor) {
-      switch (declarationFragment) {
-        case ExtensionFragment():
-        case ExtensionTypeFragment():
-          // Discard type parameters declared on the constructor. It's not
-          // allowed, an error has already been issued and it will cause
-          // crashes later if they are kept/added to the ones from the parent.
-          // TODO(johnniwinther): This will cause us issuing errors about not
-          // knowing the names of what we discard here. Is there a way to
-          // preserve them?
-          typeParameters = null;
-        case ClassFragment():
-        case MixinFragment():
-        case EnumFragment():
-      }
-      ConstructorName constructorName = computeAndValidateConstructorName(
-        declarationFragment,
-        identifier,
-      );
-      addConstructor(
-        offsetMap: offsetMap,
-        metadata: metadata,
-        modifiers: modifiers,
-        identifier: identifier,
-        constructorName: constructorName,
-        typeParameters: typeParameters,
-        formals: formals,
-        startOffset: startOffset,
-        formalsOffset: formalsOffset,
-        endOffset: endOffset,
-        nativeMethodName: nativeMethodName,
-        beginInitializers: beginInitializers,
-        forAbstractClassOrMixin: forAbstractClassOrMixin,
-      );
-    } else {
-      switch (kind!) {
-        case ProcedureKind.Method:
-        case ProcedureKind.Operator:
-          addMethod(
-            offsetMap: offsetMap,
-            metadata: metadata,
-            modifiers: modifiers,
-            returnType: returnType,
-            identifier: identifier,
-            name: name,
-            typeParameters: typeParameters,
-            formals: formals,
-            isOperator: kind == ProcedureKind.Operator,
-            startOffset: startOffset,
-            nameOffset: nameOffset,
-            formalsOffset: formalsOffset,
-            endOffset: endOffset,
-            nativeMethodName: nativeMethodName,
-            asyncModifier: asyncModifier,
-            isInstanceMember: !isStatic,
-            isExtensionMember: isExtensionMember,
-            isExtensionTypeMember: isExtensionTypeMember,
-          );
-        case ProcedureKind.Getter:
-          addGetter(
-            offsetMap: offsetMap,
-            metadata: metadata,
-            modifiers: modifiers,
-            returnType: returnType,
-            identifier: identifier,
-            name: name,
-            typeParameters: typeParameters,
-            formals: formals,
-            startOffset: startOffset,
-            nameOffset: nameOffset,
-            formalsOffset: formalsOffset,
-            endOffset: endOffset,
-            nativeMethodName: nativeMethodName,
-            asyncModifier: asyncModifier,
-            isInstanceMember: !isStatic,
-            isExtensionMember: isExtensionMember,
-            isExtensionTypeMember: isExtensionTypeMember,
-          );
-        case ProcedureKind.Setter:
-          addSetter(
-            offsetMap: offsetMap,
-            metadata: metadata,
-            modifiers: modifiers,
-            returnType: returnType,
-            identifier: identifier,
-            name: name,
-            typeParameters: typeParameters,
-            formals: formals,
-            startOffset: startOffset,
-            nameOffset: nameOffset,
-            formalsOffset: formalsOffset,
-            endOffset: endOffset,
-            nativeMethodName: nativeMethodName,
-            asyncModifier: asyncModifier,
-            isInstanceMember: !isStatic,
-            isExtensionMember: isExtensionMember,
-            isExtensionTypeMember: isExtensionTypeMember,
-          );
-        // Coverage-ignore(suite): Not run.
-        case ProcedureKind.Factory:
-          throw new UnsupportedError("Unexpected procedure kind: $kind");
-      }
+    switch (kind) {
+      case ProcedureKind.Method:
+      case ProcedureKind.Operator:
+        addMethod(
+          offsetMap: offsetMap,
+          metadata: metadata,
+          modifiers: modifiers,
+          returnType: returnType,
+          identifier: identifier,
+          name: name,
+          typeParameters: typeParameters,
+          formals: formals,
+          isOperator: kind == ProcedureKind.Operator,
+          startOffset: startOffset,
+          nameOffset: nameOffset,
+          formalsOffset: formalsOffset,
+          endOffset: endOffset,
+          nativeMethodName: nativeMethodName,
+          asyncModifier: asyncModifier,
+          isInstanceMember: !isStatic,
+          isExtensionMember: isExtensionMember,
+          isExtensionTypeMember: isExtensionTypeMember,
+        );
+      case ProcedureKind.Getter:
+        addGetter(
+          offsetMap: offsetMap,
+          metadata: metadata,
+          modifiers: modifiers,
+          returnType: returnType,
+          identifier: identifier,
+          name: name,
+          typeParameters: typeParameters,
+          formals: formals,
+          startOffset: startOffset,
+          nameOffset: nameOffset,
+          formalsOffset: formalsOffset,
+          endOffset: endOffset,
+          nativeMethodName: nativeMethodName,
+          asyncModifier: asyncModifier,
+          isInstanceMember: !isStatic,
+          isExtensionMember: isExtensionMember,
+          isExtensionTypeMember: isExtensionTypeMember,
+        );
+      case ProcedureKind.Setter:
+        addSetter(
+          offsetMap: offsetMap,
+          metadata: metadata,
+          modifiers: modifiers,
+          returnType: returnType,
+          identifier: identifier,
+          name: name,
+          typeParameters: typeParameters,
+          formals: formals,
+          startOffset: startOffset,
+          nameOffset: nameOffset,
+          formalsOffset: formalsOffset,
+          endOffset: endOffset,
+          nativeMethodName: nativeMethodName,
+          asyncModifier: asyncModifier,
+          isInstanceMember: !isStatic,
+          isExtensionMember: isExtensionMember,
+          isExtensionTypeMember: isExtensionTypeMember,
+        );
+      // Coverage-ignore(suite): Not run.
+      case ProcedureKind.Factory:
+        throw new UnsupportedError("Unexpected procedure kind: $kind");
     }
   }
 
@@ -1528,7 +1490,6 @@
     required List<MetadataBuilder>? metadata,
     required Modifiers modifiers,
     required Identifier identifier,
-    required ConstructorName constructorName,
     required List<TypeParameterFragment>? typeParameters,
     required List<FormalParameterBuilder>? formals,
     required int startOffset,
@@ -1536,10 +1497,32 @@
     required int endOffset,
     required String? nativeMethodName,
     required Token? beginInitializers,
+    required bool hasNewKeyword,
     required bool forAbstractClassOrMixin,
   }) {
     DeclarationFragmentImpl enclosingDeclaration =
         _declarationFragments.current;
+
+    switch (enclosingDeclaration) {
+      case ExtensionFragment():
+      case ExtensionTypeFragment():
+        // Discard type parameters declared on the constructor. It's not
+        // allowed, an error has already been issued and it will cause
+        // crashes later if they are kept/added to the ones from the parent.
+        // TODO(johnniwinther): This will cause us issuing errors about not
+        // knowing the names of what we discard here. Is there a way to
+        // preserve them?
+        typeParameters = null;
+      case ClassFragment():
+      case MixinFragment():
+      case EnumFragment():
+    }
+    ConstructorName constructorName = computeAndValidateConstructorName(
+      enclosingDeclaration,
+      identifier,
+      hasNewKeyword: hasNewKeyword,
+    );
+
     TypeScope typeParameterScope = _typeScopes.pop();
     assert(
       typeParameterScope.kind == TypeScopeKind.memberTypeParameters,
@@ -1596,13 +1579,15 @@
   @override
   void addPrimaryConstructorField({
     required List<MetadataBuilder>? metadata,
+    required Modifiers modifiers,
     required TypeBuilder type,
     required String name,
     required int nameOffset,
   }) {
-    _declarationFragments.current.addPrimaryConstructorField(
+    _declarationFragments.current.registerPrimaryConstructorField(
       _addPrimaryConstructorField(
         metadata: metadata,
+        modifiers: modifiers,
         type: type,
         name: name,
         nameOffset: nameOffset,
@@ -1741,29 +1726,40 @@
   ConstructorName computeAndValidateConstructorName(
     DeclarationFragmentImpl enclosingDeclaration,
     Identifier identifier, {
-    isFactory = false,
+    bool hasNewKeyword = false,
+    bool isFactory = false,
   }) {
     String className = enclosingDeclaration.name;
-    String prefix;
-    String? suffix;
-    int? suffixOffset;
-    String fullName;
-    int fullNameOffset;
-    int fullNameLength;
-    int charOffset;
-    if (identifier is QualifiedNameIdentifier) {
+    if (identifier is OmittedIdentifier) {
+      return new ConstructorName(
+        name: '',
+        nameOffset: identifier.token.charOffset,
+        fullName: className,
+        fullNameOffset: identifier.token.charOffset,
+        fullNameLength: identifier.token.length,
+      );
+    } else if (identifier is OperatorIdentifier) {
+      // Erroneous case reported in the parser.
+      return new ConstructorName(
+        name: identifier.name,
+        nameOffset: identifier.charOffset,
+        fullName: '$className.${identifier.name}',
+        fullNameOffset: identifier.charOffset,
+        fullNameLength: noLength,
+      );
+    } else if (identifier is QualifiedNameIdentifier) {
       Identifier qualifier = identifier.qualifier;
-      prefix = qualifier.name;
-      suffix = identifier.name;
-      suffixOffset = identifier.nameOffset;
-      charOffset = qualifier.nameOffset;
+      String prefix = qualifier.name;
+      String suffix = identifier.name;
+      int suffixOffset = identifier.nameOffset;
       String prefixAndSuffix = '${prefix}.${suffix}';
-      fullNameOffset = qualifier.nameOffset;
+      int fullNameOffset = qualifier.nameOffset;
       // If the there is no space between the prefix and suffix we use the full
       // length as the name length. Otherwise the full name has no length.
-      fullNameLength = fullNameOffset + prefix.length + 1 == suffixOffset
+      int fullNameLength = fullNameOffset + prefix.length + 1 == suffixOffset
           ? prefixAndSuffix.length
           : noLength;
+      String fullName;
       if (suffix == "new") {
         // Normalize `Class.new` to `Class`.
         suffix = '';
@@ -1771,56 +1767,79 @@
       } else {
         fullName = '$className.$suffix';
       }
-    } else {
-      prefix = identifier.name;
-      suffix = null;
-      suffixOffset = null;
-      charOffset = identifier.nameOffset;
-      fullName = prefix;
-      fullNameOffset = identifier.nameOffset;
-      fullNameLength = prefix.length;
-    }
 
-    if (prefix == className) {
+      if (hasNewKeyword) {
+        // Qualified names are not supported here. An error has been reported
+        // in the parser, we assume that the prefix is the enclosing class name
+        // and use the suffix as the constructor name.
+      } else if (prefix == className) {
+        // Old style constructor.
+      } else {
+        _problemReporting.addProblem(
+          codeConstructorWithWrongName,
+          fullNameOffset,
+          prefix.length,
+          _compilationUnit.fileUri,
+          context: [
+            codeConstructorWithWrongNameContext
+                .withArgumentsOld(enclosingDeclaration.name)
+                .withLocation2(enclosingDeclaration.uriOffset),
+          ],
+        );
+      }
       return new ConstructorName(
-        name: suffix ?? '',
+        name: suffix,
         nameOffset: suffixOffset,
         fullName: fullName,
         fullNameOffset: fullNameOffset,
         fullNameLength: fullNameLength,
       );
-    } else if (suffix == null) {
-      // Normalize `foo` in `Class` to `Class.foo`.
-      fullName = '$className.$prefix';
-    }
-    if (suffix == null && !isFactory) {
-      // This method is called because the syntax indicated that this is a
-      // constructor, either because it had qualified name or because the method
-      // had an initializer list.
-      //
-      // In either case this is reported elsewhere, and since the name is a
-      // legal name for a regular method, we don't remove an error on the name.
     } else {
-      _problemReporting.addProblem(
-        codeConstructorWithWrongName,
-        charOffset,
-        prefix.length,
-        _compilationUnit.fileUri,
-        context: [
-          codeConstructorWithWrongNameContext
-              .withArgumentsOld(enclosingDeclaration.name)
-              .withLocation2(enclosingDeclaration.uriOffset),
-        ],
+      String name = identifier.name;
+      int nameOffset = identifier.nameOffset;
+      String fullName = name;
+      int fullNameOffset = identifier.nameOffset;
+      int fullNameLength = name.length;
+
+      if (hasNewKeyword) {
+        // new named();
+        if (name == "new") {
+          // Erroneous case reported in the parser, normalize to `Class`.
+          name = '';
+          fullName = className;
+        } else {
+          fullName = '$className.$name';
+        }
+      } else if (name == className) {
+        // Old style unnamed constructor.
+        name = '';
+      } else if (isFactory && name == "new") {
+        // Erroneous case reported in the parser, normalize `Class`.
+        name = '';
+        fullName = className;
+      } else if (isFactory && libraryFeatures.primaryConstructors.isEnabled) {
+        fullName = '$className.$name';
+      } else {
+        _problemReporting.addProblem(
+          codeConstructorWithWrongName,
+          fullNameOffset,
+          fullNameLength,
+          _compilationUnit.fileUri,
+          context: [
+            codeConstructorWithWrongNameContext
+                .withArgumentsOld(enclosingDeclaration.name)
+                .withLocation2(enclosingDeclaration.uriOffset),
+          ],
+        );
+      }
+      return new ConstructorName(
+        name: name,
+        nameOffset: nameOffset,
+        fullName: fullName,
+        fullNameOffset: fullNameOffset,
+        fullNameLength: fullNameLength,
       );
     }
-
-    return new ConstructorName(
-      name: suffix ?? prefix,
-      nameOffset: suffixOffset,
-      fullName: fullName,
-      fullNameOffset: fullNameOffset,
-      fullNameLength: fullNameLength,
-    );
   }
 
   @override
@@ -2143,6 +2162,7 @@
 
   PrimaryConstructorFieldFragment _addPrimaryConstructorField({
     required List<MetadataBuilder>? metadata,
+    required Modifiers modifiers,
     required TypeBuilder type,
     required String name,
     required int nameOffset,
@@ -2155,6 +2175,7 @@
           fileUri: _compilationUnit.fileUri,
           nameOffset: nameOffset,
           metadata: metadata,
+          modifiers: modifiers,
           type: type,
           enclosingScope: enclosingDeclaration.bodyScope,
           enclosingDeclaration: enclosingDeclaration,
@@ -2171,6 +2192,7 @@
     Modifiers modifiers,
     TypeBuilder type,
     String name,
+    String? publicName,
     bool hasThis,
     bool hasSuper,
     int charOffset,
@@ -2201,9 +2223,11 @@
       formalName,
       charOffset,
       fileUri: _compilationUnit.fileUri,
+      initializerToken: initializerToken,
       hasImmediatelyDeclaredInitializer: initializerToken != null,
       isWildcard: isWildcard,
-    )..initializerToken = initializerToken;
+      publicName: publicName,
+    );
     return formal;
   }
 
diff --git a/pkg/front_end/lib/src/source/outline_builder.dart b/pkg/front_end/lib/src/source/outline_builder.dart
index af582c9..674afe9 100644
--- a/pkg/front_end/lib/src/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/source/outline_builder.dart
@@ -15,6 +15,8 @@
 import 'package:_fe_analyzer_shared/src/parser/quote.dart' show unescapeString;
 import 'package:_fe_analyzer_shared/src/parser/stack_listener.dart'
     show FixedNullableList, NullValues, ParserRecovery;
+import 'package:_fe_analyzer_shared/src/scanner/token_impl.dart'
+    show correspondingPublicName;
 import 'package:_fe_analyzer_shared/src/scanner/token.dart'
     show Keyword, Token, TokenIsAExtension, TokenType;
 import 'package:_fe_analyzer_shared/src/types/shared_type.dart' show Variance;
@@ -27,7 +29,12 @@
 import '../base/combinator.dart' show CombinatorBuilder;
 import '../base/configuration.dart' show Configuration;
 import '../base/identifiers.dart'
-    show Identifier, OperatorIdentifier, SimpleIdentifier, flattenName;
+    show
+        Identifier,
+        OperatorIdentifier,
+        SimpleIdentifier,
+        flattenName,
+        OmittedIdentifier;
 import '../base/ignored_parser_errors.dart' show isIgnoredParserError;
 import '../base/messages.dart';
 import '../base/modifiers.dart' show Modifiers;
@@ -476,8 +483,6 @@
 
   final bool enableNative;
   bool inAbstractOrSealedClass = false;
-  bool inConstructor = false;
-  bool inConstructorName = false;
 
   String? nativeMethodName;
 
@@ -908,9 +913,12 @@
         push(new ParserRecovery(token.charOffset));
       }
     }
-    if (inConstructor && context == IdentifierContext.methodDeclaration) {
-      inConstructorName = true;
-    }
+  }
+
+  @override
+  void handleNoIdentifier(Token token, IdentifierContext context) {
+    debugEvent("handleNoIdentifier");
+    push(new OmittedIdentifier(token));
   }
 
   @override
@@ -1105,8 +1113,8 @@
       DeclarationContext.ClassOrMixinOrNamedMixinApplication,
     );
     pushDeclarationContext(DeclarationContext.Class);
-    List<TypeParameterFragment>? typeParameters =
-        peek() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        peek(NullValues.NominalParameters) as NominalParameters?;
     if (macroToken != null) {
       if (reportIfNotEnabled(
         libraryFeatures.macros,
@@ -1164,7 +1172,7 @@
     _builderFactory.beginClassDeclaration(
       name.lexeme,
       name.charOffset,
-      typeParameters,
+      typeParameters?.fragments,
     );
     Modifiers modifiers = Modifiers.from(
       abstractToken: abstractToken,
@@ -1194,8 +1202,8 @@
       DeclarationContext.ClassOrMixinOrNamedMixinApplication,
     );
     pushDeclarationContext(DeclarationContext.Mixin);
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     if (baseToken != null) {
       if (reportIfNotEnabled(
         libraryFeatures.classModifiers,
@@ -1214,7 +1222,7 @@
     _builderFactory.beginMixinDeclaration(
       name.lexeme,
       name.charOffset,
-      typeParameters,
+      typeParameters?.fragments,
     );
   }
 
@@ -1274,13 +1282,12 @@
       DeclarationContext.ClassOrMixinOrNamedMixinApplication,
     );
     pushDeclarationContext(DeclarationContext.NamedMixinApplication);
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
-    push(typeParameters ?? NullValues.NominalParameters);
+    NominalParameters? typeParameters =
+        peek(NullValues.NominalParameters) as NominalParameters?;
     _builderFactory.beginNamedMixinApplication(
       name.lexeme,
       name.charOffset,
-      typeParameters,
+      typeParameters?.fragments,
     );
     if (macroToken != null) {
       if (reportIfNotEnabled(
@@ -1448,7 +1455,7 @@
           ValueKinds.ParserRecovery,
         ]),
         /* modifiers */ ValueKinds.Modifiers,
-        /* type parameters */ ValueKinds.TypeParameterFragmentListOrNull,
+        /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
         /* name */ ValueKinds.IdentifierOrParserRecovery,
         /* metadata */ ValueKinds.MetadataListOrNull,
       ]),
@@ -1462,15 +1469,17 @@
     int supertypeOffset = popCharOffset();
     TypeBuilder? supertype = nullIfParserRecovery(pop()) as TypeBuilder?;
     Modifiers modifiers = pop() as Modifiers;
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Object? name = pop();
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     inAbstractOrSealedClass = false;
     checkEmpty(beginToken.charOffset);
     if (name is ParserRecovery) {
       // Coverage-ignore-block(suite): Not run.
-      _builderFactory.endClassDeclarationForParserRecovery(typeParameters);
+      _builderFactory.endClassDeclarationForParserRecovery(
+        typeParameters?.fragments,
+      );
     } else {
       Identifier identifier = name as Identifier;
       final int startOffset = metadata?.first.atOffset ?? beginToken.charOffset;
@@ -1523,7 +1532,7 @@
         metadata: metadata,
         modifiers: modifiers,
         identifier: identifier,
-        typeParameters: typeParameters,
+        typeParameters: typeParameters?.fragments,
         supertype: supertype,
         mixins: mixins,
         interfaces: interfaces,
@@ -1550,7 +1559,7 @@
           ValueKinds.TypeBuilderListOrNull,
           ValueKinds.ParserRecovery,
         ]),
-        /* type parameters */ ValueKinds.TypeParameterFragmentListOrNull,
+        /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
         /* modifiers */ ValueKinds.Modifiers,
         /* name */ ValueKinds.IdentifierOrParserRecovery,
         /* metadata */ ValueKinds.MetadataListOrNull,
@@ -1561,8 +1570,8 @@
         pop(NullValues.TypeBuilderList) as List<TypeBuilder>?;
     List<TypeBuilder>? supertypeConstraints =
         nullIfParserRecovery(pop()) as List<TypeBuilder>?;
-    List<TypeParameterFragment>? typeParameters =
-        pop(NullValues.NominalParameters) as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Modifiers modifiers = pop() as Modifiers;
     Object? name = pop();
     List<MetadataBuilder>? metadata =
@@ -1570,7 +1579,9 @@
     checkEmpty(beginToken.charOffset);
     if (name is ParserRecovery) {
       // Coverage-ignore-block(suite): Not run.
-      _builderFactory.endMixinDeclarationForParserRecovery(typeParameters);
+      _builderFactory.endMixinDeclarationForParserRecovery(
+        typeParameters?.fragments,
+      );
     } else {
       Identifier identifier = name as Identifier;
       int startOffset =
@@ -1614,7 +1625,7 @@
         metadata: metadata,
         modifiers: modifiers,
         identifier: identifier,
-        typeParameters: typeParameters,
+        typeParameters: typeParameters?.fragments,
         supertypeConstraints: supertypeConstraints,
         interfaces: interfaces,
         startOffset: startOffset,
@@ -1641,15 +1652,15 @@
   ) {
     assert(
       checkState(extensionKeyword, [
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.MetadataListOrNull,
       ]),
     );
     debugEvent("beginExtensionDeclaration");
     popDeclarationContext(DeclarationContext.ExtensionOrExtensionType);
     pushDeclarationContext(DeclarationContext.Extension);
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     int offset = nameToken?.charOffset ?? extensionKeyword.charOffset;
     push(
       nameToken != null
@@ -1660,7 +1671,7 @@
     _builderFactory.beginExtensionDeclaration(
       nameToken?.lexeme,
       offset,
-      typeParameters,
+      typeParameters?.fragments,
     );
   }
 
@@ -1674,7 +1685,7 @@
     assert(
       checkState(extensionKeyword, [
         unionOfKinds([ValueKinds.ParserRecovery, ValueKinds.TypeBuilder]),
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.IdentifierOrNull,
         ValueKinds.MetadataListOrNull,
       ]),
@@ -1690,8 +1701,8 @@
         parserRecovery.charOffset,
       );
     }
-    List<TypeParameterFragment>? typeParameters =
-        pop(NullValues.NominalParameters) as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Identifier? name = pop(NullValues.Identifier) as Identifier?;
     List<MetadataBuilder>? metadata =
         pop(NullValues.Metadata) as List<MetadataBuilder>?;
@@ -1704,7 +1715,7 @@
       // TODO(johnniwinther): Support modifiers on extensions?
       modifiers: Modifiers.empty,
       identifier: name,
-      typeParameters: typeParameters,
+      typeParameters: typeParameters?.fragments,
       onType: onType as TypeBuilder,
       startOffset: startOffset,
       endOffset: endToken.charOffset,
@@ -1720,15 +1731,15 @@
   ) {
     assert(
       checkState(extensionKeyword, [
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.MetadataListOrNull,
       ]),
     );
     debugEvent("beginExtensionTypeDeclaration");
     popDeclarationContext(DeclarationContext.ExtensionOrExtensionType);
     pushDeclarationContext(DeclarationContext.ExtensionType);
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     String name = nameToken.lexeme;
     int nameOffset = nameToken.charOffset;
     push(new SimpleIdentifier(nameToken));
@@ -1736,7 +1747,7 @@
     _builderFactory.beginExtensionTypeDeclaration(
       name,
       nameOffset,
-      typeParameters,
+      typeParameters?.fragments,
     );
   }
 
@@ -1751,7 +1762,7 @@
     assert(
       checkState(extensionKeyword, [
         ValueKinds.TypeBuilderListOrNull,
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.Identifier,
         ValueKinds.MetadataListOrNull,
       ]),
@@ -1764,8 +1775,8 @@
 
     List<TypeBuilder>? interfaces =
         pop(NullValues.TypeBuilderList) as List<TypeBuilder>?;
-    List<TypeParameterFragment>? typeParameters =
-        pop(NullValues.NominalParameters) as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Identifier identifier = pop() as Identifier;
     List<MetadataBuilder>? metadata =
         pop(NullValues.Metadata) as List<MetadataBuilder>?;
@@ -1783,7 +1794,7 @@
       // TODO(johnniwinther): Support modifiers on extension types?
       modifiers: Modifiers.empty,
       identifier: identifier,
-      typeParameters: typeParameters,
+      typeParameters: typeParameters?.fragments,
       interfaces: interfaces,
       startOffset: startOffset,
       endOffset: endToken.charOffset,
@@ -1826,121 +1837,125 @@
 
     int? startOffset = constKeyword?.charOffset ?? nameOffset ?? formalsOffset;
 
-    // TODO(johnniwinther): Handle declaring parameters.
-    if (forExtensionType) {
-      bool inExtensionType =
-          declarationContext == DeclarationContext.ExtensionType;
-      if (formals != null) {
-        int requiredPositionalCount = 0;
-        int? firstNamedParameterOffset;
-        int? firstOptionalPositionalParameterOffset;
-        for (int i = 0; i < formals.length; i++) {
-          FormalParameterBuilder formal = formals[i];
-          if (inExtensionType) {
-            TypeBuilder type = formal.type;
-            if (type is FunctionTypeBuilder &&
-                type.hasFunctionFormalParameterSyntax) {
-              _compilationUnit.addProblem(
-                // ignore: lines_longer_than_80_chars
-                codeExtensionTypePrimaryConstructorFunctionFormalParameterSyntax,
-                formal.fileOffset,
-                formal.name.length,
-                formal.fileUri,
-              );
-            }
-            if (type is ImplicitTypeBuilder) {
-              _compilationUnit.addProblem(
-                codeExpectedRepresentationType,
-                formal.fileOffset,
-                formal.name.length,
-                formal.fileUri,
-              );
-              formal.type = new InvalidTypeBuilderImpl(
-                formal.fileUri,
-                formal.fileOffset,
-              );
-            }
-            if (formal.modifiers.containsSyntacticModifiers(
-              ignoreCovariant: true,
-              ignoreRequired: true,
-            )) {
-              _compilationUnit.addProblem(
-                codeRepresentationFieldModifier,
-                formal.fileOffset,
-                formal.name.length,
-                formal.fileUri,
-              );
-            }
-            if (formal.isInitializingFormal) {
-              _compilationUnit.addProblem(
-                codeExtensionTypePrimaryConstructorWithInitializingFormal,
-                formal.fileOffset,
-                formal.name.length,
-                formal.fileUri,
-              );
-            }
-          }
+    if (!forExtensionType) {
+      reportIfNotEnabled(
+        libraryFeatures.primaryConstructors,
+        beginToken.charOffset,
+        noLength,
+      );
+    }
 
-          if (formal.isPositional) {
-            if (formal.isOptionalPositional) {
-              firstOptionalPositionalParameterOffset = formal.fileOffset;
-            } else {
-              requiredPositionalCount++;
-            }
+    if (formals != null) {
+      int requiredPositionalCount = 0;
+      int? firstNamedParameterOffset;
+      int? firstOptionalPositionalParameterOffset;
+      for (int i = 0; i < formals.length; i++) {
+        FormalParameterBuilder formal = formals[i];
+        Modifiers modifiers = formal.modifiers;
+        if (forExtensionType) {
+          // Extension type representation fields are implicitly final.
+          modifiers |= Modifiers.Final;
+          modifiers |= Modifiers.DeclaringParameter;
+          TypeBuilder type = formal.type;
+          if (type is FunctionTypeBuilder &&
+              type.hasFunctionFormalParameterSyntax) {
+            _compilationUnit.addProblem(
+              // ignore: lines_longer_than_80_chars
+              codeExtensionTypePrimaryConstructorFunctionFormalParameterSyntax,
+              formal.fileOffset,
+              formal.name.length,
+              formal.fileUri,
+            );
           }
-          if (formal.isNamed) {
-            firstNamedParameterOffset = formal.fileOffset;
+          if (type is ImplicitTypeBuilder) {
+            _compilationUnit.addProblem(
+              codeExpectedRepresentationType,
+              formal.fileOffset,
+              formal.name.length,
+              formal.fileUri,
+            );
+            formal.type = new InvalidTypeBuilderImpl(
+              formal.fileUri,
+              formal.fileOffset,
+            );
           }
+          if (formal.modifiers.containsSyntacticModifiers(
+            ignoreCovariant: true,
+            ignoreRequired: true,
+          )) {
+            _compilationUnit.addProblem(
+              codeRepresentationFieldModifier,
+              formal.fileOffset,
+              formal.name.length,
+              formal.fileUri,
+            );
+          }
+          if (formal.isInitializingFormal) {
+            _compilationUnit.addProblem(
+              codeExtensionTypePrimaryConstructorWithInitializingFormal,
+              formal.fileOffset,
+              formal.name.length,
+              formal.fileUri,
+            );
+          }
+        }
+
+        if (formal.isPositional) {
+          if (formal.isOptionalPositional) {
+            firstOptionalPositionalParameterOffset = formal.fileOffset;
+          } else {
+            requiredPositionalCount++;
+          }
+        }
+        if (formal.isNamed) {
+          firstNamedParameterOffset = formal.fileOffset;
+        }
+        if (modifiers.isDeclaringParameter) {
           _builderFactory.addPrimaryConstructorField(
             // TODO(johnniwinther): Support annotations on annotations on fields
             // defined through a primary constructor. This is not needed for
             // extension types where the field is not part of the AST but will
             // be needed when primary constructors are generally supported.
             metadata: null,
+            modifiers: modifiers,
             type: formal.type,
             name: formal.name,
             nameOffset: formal.fileOffset,
           );
           formals[i] = formal.forPrimaryConstructor(_builderFactory);
         }
-        if (inExtensionType) {
-          if (firstOptionalPositionalParameterOffset != null) {
-            _compilationUnit.addProblem(
-              codeOptionalParametersInExtensionTypeDeclaration,
-              firstOptionalPositionalParameterOffset,
-              1,
-              uri,
-            );
-          } else if (firstNamedParameterOffset != null) {
-            _compilationUnit.addProblem(
-              codeNamedParametersInExtensionTypeDeclaration,
-              firstNamedParameterOffset,
-              1,
-              uri,
-            );
-          } else if (requiredPositionalCount == 0) {
-            _compilationUnit.addProblem(
-              codeExpectedRepresentationField,
-              charOffset,
-              1,
-              uri,
-            );
-          } else if (formals.length > 1) {
-            _compilationUnit.addProblem(
-              codeMultipleRepresentationFields,
-              charOffset,
-              1,
-              uri,
-            );
-          }
+      }
+      if (forExtensionType) {
+        if (firstOptionalPositionalParameterOffset != null) {
+          _compilationUnit.addProblem(
+            codeOptionalParametersInExtensionTypeDeclaration,
+            firstOptionalPositionalParameterOffset,
+            1,
+            uri,
+          );
+        } else if (firstNamedParameterOffset != null) {
+          _compilationUnit.addProblem(
+            codeNamedParametersInExtensionTypeDeclaration,
+            firstNamedParameterOffset,
+            1,
+            uri,
+          );
+        } else if (requiredPositionalCount == 0) {
+          _compilationUnit.addProblem(
+            codeExpectedRepresentationField,
+            charOffset,
+            1,
+            uri,
+          );
+        } else if (formals.length > 1) {
+          _compilationUnit.addProblem(
+            codeMultipleRepresentationFields,
+            charOffset,
+            1,
+            uri,
+          );
         }
       }
-    } else {
-      reportIfNotEnabled(
-        libraryFeatures.declaringConstructors,
-        beginToken.charOffset,
-        noLength,
-      );
     }
 
     _builderFactory.addPrimaryConstructor(
@@ -1957,6 +1972,31 @@
   }
 
   @override
+  // Coverage-ignore(suite): Not run.
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    debugEvent("endPrimaryConstructorBody");
+    assert(
+      checkState(beginToken, [
+        ValueKinds.MethodBody,
+        ValueKinds.AsyncModifier,
+        ValueKinds.MetadataListOrNull,
+      ]),
+    );
+
+    // TODO(primary-constructors): Implement primary constructor body.
+    // ignore: unused_local_variable
+    MethodBody bodyKind = pop() as MethodBody;
+    // ignore: unused_local_variable
+    AsyncMarker asyncModifier = pop() as AsyncMarker;
+    // ignore: unused_local_variable
+    List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
+  }
+
+  @override
   void beginTopLevelMethod(
     Token lastConsumed,
     Token? augmentToken,
@@ -1980,7 +2020,7 @@
         ValueKinds.AsyncMarker,
         ValueKinds.FormalListOrNull,
         /* formalsOffset */ ValueKinds.Integer,
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.IdentifierOrParserRecovery,
         ValueKinds.TypeBuilderOrNull,
         ValueKinds.Modifiers,
@@ -1993,8 +2033,8 @@
     List<FormalParameterBuilder>? formals =
         pop() as List<FormalParameterBuilder>?;
     int formalsOffset = popCharOffset();
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Object? identifier = pop();
     TypeBuilder? returnType = pop() as TypeBuilder?;
     bool isAbstract = kind == MethodBody.Abstract;
@@ -2029,7 +2069,7 @@
             returnType: returnType,
             identifier: identifier,
             name: identifier.name,
-            typeParameters: typeParameters,
+            typeParameters: typeParameters?.fragments,
             formals: formals,
             isOperator: false,
             startOffset: startOffset,
@@ -2050,7 +2090,9 @@
             returnType: returnType,
             identifier: identifier,
             name: identifier.name,
-            typeParameters: typeParameters,
+            typeParameters: typeParameters
+                // Coverage-ignore(suite): Not run.
+                ?.fragments,
             formals: formals,
             startOffset: startOffset,
             nameOffset: nameOffset,
@@ -2070,7 +2112,9 @@
             returnType: returnType,
             identifier: identifier,
             name: identifier.name,
-            typeParameters: typeParameters,
+            typeParameters: typeParameters
+                // Coverage-ignore(suite): Not run.
+                ?.fragments,
             formals: formals,
             startOffset: startOffset,
             nameOffset: nameOffset,
@@ -2088,7 +2132,11 @@
       }
       nativeMethodName = null;
     } else {
-      _builderFactory.endTopLevelMethodForParserRecovery(typeParameters);
+      _builderFactory.endTopLevelMethodForParserRecovery(
+        typeParameters
+            // Coverage-ignore(suite): Not run.
+            ?.fragments,
+      );
     }
     popDeclarationContext(DeclarationContext.TopLevelMethod);
   }
@@ -2139,6 +2187,50 @@
   }
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    DeclarationContext declarationContext;
+    switch (declarationKind) {
+      case DeclarationKind.Class:
+        declarationContext = DeclarationContext.ClassConstructor;
+      case DeclarationKind.Mixin:
+        declarationContext = DeclarationContext.MixinConstructor;
+      case DeclarationKind.Extension:
+        declarationContext = DeclarationContext.ExtensionConstructor;
+      case DeclarationKind.ExtensionType:
+        declarationContext = DeclarationContext.ExtensionTypeConstructor;
+      case DeclarationKind.Enum:
+        declarationContext = DeclarationContext.EnumConstructor;
+      // Coverage-ignore(suite): Not run.
+      case DeclarationKind.TopLevel:
+        throw new UnsupportedError(
+          "Unexpected constructor kind $declarationKind.",
+        );
+    }
+    pushDeclarationContext(declarationContext);
+
+    Modifiers modifiers = Modifiers.from(
+      augmentToken: augmentToken,
+      externalToken: externalToken,
+      covariantToken: covariantToken,
+      varFinalOrConst: varFinalOrConst,
+    );
+    push(varFinalOrConst?.charOffset ?? -1);
+    push(modifiers);
+    _builderFactory.beginConstructor();
+  }
+
+  @override
   void beginMethod(
     DeclarationKind declarationKind,
     Token? augmentToken,
@@ -2150,7 +2242,6 @@
     Token name,
     String? enclosingDeclarationName,
   ) {
-    inConstructor = name.lexeme == enclosingDeclarationName && getOrSet == null;
     DeclarationContext declarationContext;
     switch (declarationKind) {
       case DeclarationKind.TopLevel:
@@ -2163,45 +2254,35 @@
         declarationContext = DeclarationContext.TopLevelMethod;
         break;
       case DeclarationKind.Class:
-        if (inConstructor) {
-          declarationContext = DeclarationContext.ClassConstructor;
-        } else if (staticToken != null) {
+        if (staticToken != null) {
           declarationContext = DeclarationContext.ClassStaticMethod;
         } else {
           declarationContext = DeclarationContext.ClassInstanceMethod;
         }
         break;
       case DeclarationKind.Mixin:
-        if (inConstructor) {
-          declarationContext = DeclarationContext.MixinConstructor;
-        } else if (staticToken != null) {
+        if (staticToken != null) {
           declarationContext = DeclarationContext.MixinStaticMethod;
         } else {
           declarationContext = DeclarationContext.MixinInstanceMethod;
         }
         break;
       case DeclarationKind.Extension:
-        if (inConstructor) {
-          declarationContext = DeclarationContext.ExtensionConstructor;
-        } else if (staticToken != null) {
+        if (staticToken != null) {
           declarationContext = DeclarationContext.ExtensionStaticMethod;
         } else {
           declarationContext = DeclarationContext.ExtensionInstanceMethod;
         }
         break;
       case DeclarationKind.ExtensionType:
-        if (inConstructor) {
-          declarationContext = DeclarationContext.ExtensionTypeConstructor;
-        } else if (staticToken != null) {
+        if (staticToken != null) {
           declarationContext = DeclarationContext.ExtensionTypeStaticMethod;
         } else {
           declarationContext = DeclarationContext.ExtensionTypeInstanceMethod;
         }
         break;
       case DeclarationKind.Enum:
-        if (inConstructor) {
-          declarationContext = DeclarationContext.EnumConstructor;
-        } else if (staticToken != null) {
+        if (staticToken != null) {
           declarationContext = DeclarationContext.EnumStaticMethod;
         } else {
           declarationContext = DeclarationContext.EnumInstanceMethod;
@@ -2212,15 +2293,13 @@
     Modifiers modifiers = Modifiers.from(
       augmentToken: augmentToken,
       externalToken: externalToken,
-      staticToken: !inConstructor ? staticToken : null,
+      staticToken: staticToken,
       covariantToken: covariantToken,
       varFinalOrConst: varFinalOrConst,
     );
     push(varFinalOrConst?.charOffset ?? -1);
     push(modifiers);
-    if (inConstructor) {
-      _builderFactory.beginConstructor();
-    } else if (staticToken != null) {
+    if (staticToken != null) {
       _builderFactory.beginStaticMethod();
     } else {
       _builderFactory.beginInstanceMethod();
@@ -2228,7 +2307,8 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
@@ -2236,157 +2316,15 @@
     Token endToken,
   ) {
     debugEvent("endClassMethod");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.classMethod,
-    );
-  }
 
-  @override
-  void endClassConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endClassConstructor");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.classConstructor,
-    );
-  }
+    if (kind == DeclarationKind.Enum) {
+      reportIfNotEnabled(
+        libraryFeatures.enhancedEnums,
+        beginToken.charOffset,
+        noLength,
+      );
+    }
 
-  @override
-  void endMixinMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endMixinMethod");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.mixinMethod,
-    );
-  }
-
-  @override
-  void endExtensionMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endExtensionMethod");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.extensionMethod,
-    );
-  }
-
-  @override
-  void endExtensionTypeMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endExtensionTypeMethod");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.extensionTypeMethod,
-    );
-  }
-
-  @override
-  void endMixinConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endMixinConstructor");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.mixinConstructor,
-    );
-  }
-
-  @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endExtensionConstructor");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.extensionConstructor,
-    );
-  }
-
-  @override
-  void endExtensionTypeConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endExtensionTypeConstructor");
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.extensionTypeConstructor,
-    );
-  }
-
-  void _endClassMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-    _MethodKind methodKind,
-  ) {
     assert(checkState(beginToken, [ValueKinds.MethodBody]));
     MethodBody bodyKind = pop() as MethodBody;
     if (bodyKind == MethodBody.RedirectingFactoryBody) {
@@ -2398,7 +2336,7 @@
         ValueKinds.AsyncModifier,
         ValueKinds.FormalListOrNull,
         ValueKinds.Integer, // formals offset
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.IdentifierOrParserRecovery,
         ValueKinds.TypeBuilderOrNull,
         ValueKinds.Modifiers,
@@ -2411,12 +2349,12 @@
     List<FormalParameterBuilder>? formals =
         pop() as List<FormalParameterBuilder>?;
     int formalsOffset = popCharOffset();
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Object? identifier = pop();
     TypeBuilder? returnType = pop() as TypeBuilder?;
     Modifiers modifiers = pop() as Modifiers;
-    int varFinalOrConstOffset = popCharOffset();
+    popCharOffset(); // varFinalOrConstOffset
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
 
     if (identifier is! Identifier) {
@@ -2425,17 +2363,20 @@
         "Unexpected identifier $identifier (${identifier.runtimeType})",
       );
 
-      if (inConstructor) {
-        _builderFactory.endConstructorForParserRecovery(typeParameters);
-      } else if (modifiers.isStatic) {
+      if (modifiers.isStatic) {
         // Coverage-ignore-block(suite): Not run.
-        _builderFactory.endStaticMethodForParserRecovery(typeParameters);
+        _builderFactory.endStaticMethodForParserRecovery(
+          typeParameters?.fragments,
+        );
       } else {
-        _builderFactory.endInstanceMethodForParserRecovery(typeParameters);
+        _builderFactory.endInstanceMethodForParserRecovery(
+          typeParameters
+              // Coverage-ignore(suite): Not run.
+              ?.fragments,
+        );
       }
 
       nativeMethodName = null;
-      inConstructor = false;
       popDeclarationContext();
       return;
     }
@@ -2448,11 +2389,11 @@
     }
 
     String name;
-    ProcedureKind? kind;
+    ProcedureKind procedureKind;
     int nameOffset = identifier.qualifierOffset;
     if (operator != null) {
       name = operator.text;
-      kind = ProcedureKind.Operator;
+      procedureKind = ProcedureKind.Operator;
       int requiredArgumentCount = operator.requiredArgumentCount;
       if ((formals?.length ?? 0) != requiredArgumentCount) {
         Template<Message Function(String name), Function> template;
@@ -2497,16 +2438,15 @@
         }
       }
       if (typeParameters != null) {
-        TypeParameterFragment typeParameterBuilder = typeParameters.first;
         addProblem(
           codeOperatorWithTypeParameters,
-          typeParameterBuilder.nameOffset,
-          typeParameterBuilder.name.length,
+          typeParameters.charOffset,
+          typeParameters.spanLength,
         );
       }
     } else {
       name = identifier.name;
-      kind = computeProcedureKind(getOrSet);
+      procedureKind = computeProcedureKind(getOrSet);
     }
 
     bool isAbstract = bodyKind == MethodBody.Abstract;
@@ -2532,51 +2472,20 @@
     bool isConst = modifiers.isConst;
     bool isStatic = modifiers.isStatic;
 
-    bool isConstructor = switch (methodKind) {
-      _MethodKind.classConstructor => true,
-      _MethodKind.mixinConstructor => true,
-      _MethodKind.extensionConstructor => true,
-      _MethodKind.extensionTypeConstructor => true,
-      _MethodKind.enumConstructor => true,
-      _MethodKind.classMethod => false,
-      _MethodKind.mixinMethod => false,
-      _MethodKind.extensionMethod => false,
-      _MethodKind.extensionTypeMethod => false,
-      _MethodKind.enumMethod => false,
-    };
-    if (isConstructor) {
-      if (isConst &&
-          bodyKind != MethodBody.Abstract &&
-          !libraryFeatures.constFunctions.isEnabled) {
-        addProblem(codeConstConstructorWithBody, varFinalOrConstOffset, 5);
-        modifiers -= Modifiers.Const;
-      }
-      if (returnType != null) {
-        addProblem(
-          codeConstructorWithReturnType,
-          returnType.charOffset ?? // Coverage-ignore(suite): Not run.
-              beginToken.offset,
-          noLength,
-        );
-        returnType = null;
-      }
-    } else {
-      if (isConst) {
-        // TODO(danrubel): consider removing this
-        // because it is an error to have a const method.
-        modifiers -= Modifiers.Const;
-      }
+    if (isConst) {
+      // TODO(danrubel): consider removing this
+      // because it is an error to have a const method.
+      modifiers -= Modifiers.Const;
     }
 
     int startOffset = metadata?.first.atOffset ?? beginToken.charOffset;
 
     int endOffset = endToken.charOffset;
 
-    bool forAbstractClassOrMixin =
-        inAbstractOrSealedClass || methodKind == _MethodKind.mixinConstructor;
+    bool forAbstractClassOrMixin = inAbstractOrSealedClass;
 
-    bool isExtensionMember = methodKind == _MethodKind.extensionMethod;
-    bool isExtensionTypeMember = methodKind == _MethodKind.extensionTypeMethod;
+    bool isExtensionMember = kind == DeclarationKind.Extension;
+    bool isExtensionTypeMember = kind == DeclarationKind.ExtensionType;
 
     _builderFactory.addClassMethod(
       offsetMap: _offsetMap,
@@ -2585,26 +2494,152 @@
       name: name,
       returnType: returnType,
       formals: formals,
-      typeParameters: typeParameters,
+      typeParameters: typeParameters?.fragments,
       beginInitializers: beginInitializers,
       startOffset: startOffset,
       endOffset: endOffset,
       nameOffset: nameOffset,
       formalsOffset: formalsOffset,
       modifiers: modifiers,
-      inConstructor: inConstructor,
       isStatic: isStatic,
-      isConstructor: isConstructor,
       isExtensionMember: isExtensionMember,
       isExtensionTypeMember: isExtensionTypeMember,
       forAbstractClassOrMixin: forAbstractClassOrMixin,
       asyncModifier: asyncModifier,
       nativeMethodName: nativeMethodName,
-      kind: kind,
+      kind: procedureKind,
     );
 
     nativeMethodName = null;
-    inConstructor = false;
+    popDeclarationContext();
+  }
+
+  @override
+  void endConstructor(
+    DeclarationKind kind,
+    Token beginToken,
+    Token? newToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    debugEvent("endConstructor");
+
+    if (kind == DeclarationKind.Enum) {
+      reportIfNotEnabled(
+        libraryFeatures.enhancedEnums,
+        beginToken.charOffset,
+        noLength,
+      );
+    }
+
+    assert(checkState(beginToken, [ValueKinds.MethodBody]));
+    MethodBody bodyKind = pop() as MethodBody;
+    if (bodyKind == MethodBody.RedirectingFactoryBody) {
+      // This will cause an error later.
+      pop();
+    }
+    assert(
+      checkState(beginToken, [
+        ValueKinds.AsyncModifier,
+        ValueKinds.FormalListOrNull,
+        ValueKinds.Integer, // formals offset
+        ValueKinds.NominalTypeParametersOrNull,
+        ValueKinds.IdentifierOrParserRecovery,
+        ValueKinds.TypeBuilderOrNull,
+        ValueKinds.Modifiers,
+        ValueKinds.Integer, // var/final/const offset
+        ValueKinds.MetadataListOrNull,
+      ]),
+    );
+
+    pop() as AsyncMarker;
+    List<FormalParameterBuilder>? formals =
+        pop() as List<FormalParameterBuilder>?;
+    int formalsOffset = popCharOffset();
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
+    Object? identifier = pop();
+    TypeBuilder? returnType = pop() as TypeBuilder?;
+    Modifiers modifiers = pop() as Modifiers;
+    int varFinalOrConstOffset = popCharOffset();
+    List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
+
+    if (typeParameters != null) {
+      addProblem(
+        codeConstructorWithTypeParameters,
+        typeParameters.charOffset,
+        typeParameters.spanLength,
+      );
+    }
+
+    if (identifier is! Identifier) {
+      assert(
+        identifier is ParserRecovery,
+        "Unexpected identifier $identifier (${identifier.runtimeType})",
+      );
+
+      _builderFactory.endConstructorForParserRecovery(
+        typeParameters
+            // Coverage-ignore(suite): Not run.
+            ?.fragments,
+      );
+
+      nativeMethodName = null;
+      popDeclarationContext();
+      return;
+    }
+
+    bool isAbstract = bodyKind == MethodBody.Abstract;
+    if (isAbstract && !modifiers.isExternal) {
+      modifiers |= Modifiers.Abstract;
+    }
+    if (nativeMethodName != null) {
+      modifiers |= Modifiers.External;
+    }
+
+    bool isConst = modifiers.isConst;
+
+    if (isConst &&
+        bodyKind != MethodBody.Abstract &&
+        !libraryFeatures.constFunctions.isEnabled) {
+      addProblem(codeConstConstructorWithBody, varFinalOrConstOffset, 5);
+      modifiers -= Modifiers.Const;
+    }
+    if (returnType != null) {
+      addProblem(
+        codeConstructorWithReturnType,
+        returnType.charOffset ?? // Coverage-ignore(suite): Not run.
+            beginToken.offset,
+        noLength,
+      );
+      returnType = null;
+    }
+
+    int startOffset = metadata?.first.atOffset ?? beginToken.charOffset;
+
+    int endOffset = endToken.charOffset;
+
+    bool forAbstractClassOrMixin =
+        inAbstractOrSealedClass || kind == DeclarationKind.Mixin;
+
+    _builderFactory.addConstructor(
+      offsetMap: _offsetMap,
+      metadata: metadata,
+      modifiers: modifiers,
+      identifier: identifier,
+      typeParameters: typeParameters?.fragments,
+      formals: formals,
+      startOffset: startOffset,
+      formalsOffset: formalsOffset,
+      endOffset: endOffset,
+      nativeMethodName: nativeMethodName,
+      beginInitializers: beginInitializers,
+      hasNewKeyword: newToken != null,
+      forAbstractClassOrMixin: forAbstractClassOrMixin,
+    );
+
+    nativeMethodName = null;
     popDeclarationContext();
   }
 
@@ -2667,7 +2702,7 @@
           ValueKinds.TypeBuilder,
         ]),
         /* modifiers */ ValueKinds.Modifiers,
-        /* type parameters */ ValueKinds.TypeParameterFragmentListOrNull,
+        /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
         /* name */ ValueKinds.IdentifierOrParserRecovery,
         /* metadata */ ValueKinds.MetadataListOrNull,
       ]),
@@ -2679,15 +2714,17 @@
     Object? mixinApplication = pop();
     Object? supertype = pop();
     Modifiers modifiers = pop() as Modifiers;
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Object? name = pop();
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     checkEmpty(beginToken.charOffset);
     if (name is ParserRecovery ||
         supertype is ParserRecovery ||
         mixinApplication is ParserRecovery) {
-      _builderFactory.endNamedMixinApplicationForParserRecovery(typeParameters);
+      _builderFactory.endNamedMixinApplicationForParserRecovery(
+        typeParameters?.fragments,
+      );
     } else {
       Identifier identifier = name as Identifier;
       String classNameForErrors = identifier.name;
@@ -2738,7 +2775,7 @@
       _builderFactory.addNamedMixinApplication(
         metadata: metadata,
         name: identifier.name,
-        typeParameters: typeParameters,
+        typeParameters: typeParameters?.fragments,
         modifiers: modifiers,
         supertype: supertype as TypeBuilder?,
         mixins: mixins,
@@ -2839,8 +2876,11 @@
 
   @override
   void handleNoTypeVariables(Token token) {
-    super.handleNoTypeVariables(token);
-    inConstructorName = false;
+    if (inFunctionType) {
+      push(NullValues.StructuralParameters);
+    } else {
+      push(NullValues.NominalParameters);
+    }
   }
 
   @override
@@ -2922,11 +2962,32 @@
     Object? name = pop(NullValues.Identifier);
     TypeBuilder? type = nullIfParserRecovery(pop()) as TypeBuilder?;
     Modifiers modifiers = pop() as Modifiers;
+    if (memberKind == MemberKind.PrimaryConstructor && varOrFinal != null) {
+      modifiers |= Modifiers.DeclaringParameter;
+    }
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     if (name is ParserRecovery) {
       push(name);
     } else {
       Identifier? identifier = name as Identifier?;
+
+      String parameterName = identifier == null
+          ? FormalParameterBuilder.noNameSentinel
+          : identifier.name;
+
+      // If we're building a private named parameter, then calculate the
+      // corresponding public name. The variable declared by the parameter will
+      // use that name instead.
+      String? publicName;
+      // TODO(rnystrom): Also handle declaring field parameters.
+      bool refersToField = thisKeyword != null;
+      if (refersToField &&
+          libraryFeatures.privateNamedParameters.isEnabled &&
+          kind.isNamed &&
+          parameterName.startsWith('_')) {
+        publicName = correspondingPublicName(parameterName);
+      }
+
       push(
         _builderFactory.addFormalParameter(
           metadata,
@@ -2936,9 +2997,8 @@
               (memberKind.isParameterInferable
                   ? _builderFactory.addInferableType()
                   : const ImplicitTypeBuilder()),
-          identifier == null
-              ? FormalParameterBuilder.noNameSentinel
-              : identifier.name,
+          parameterName,
+          publicName,
           thisKeyword != null,
           superKeyword != null,
           identifier?.nameOffset ?? nameToken.charOffset,
@@ -3080,6 +3140,26 @@
             ],
           );
         }
+
+        // For private named parameters, also look for a collision between the
+        // corresponding public name and another parameter's name.
+        if (formals[0].publicName case var publicName?
+            when publicName == formals[1].name) {
+          _privateNamedParameterPublicNameCollision(
+            publicName,
+            formals[0],
+            formals[1],
+          );
+        }
+
+        if (formals[1].publicName case var publicName?
+            when publicName == formals[0].name) {
+          _privateNamedParameterPublicNameCollision(
+            publicName,
+            formals[1],
+            formals[0],
+          );
+        }
       } else if (formals.length > 2) {
         Map<String, FormalParameterBuilder> seenNames =
             <String, FormalParameterBuilder>{};
@@ -3108,6 +3188,20 @@
             seenNames[formal.name] = formal;
           }
         }
+
+        // For private named parameters, also look for a collision between the
+        // corresponding public name and another parameter's name.
+        for (FormalParameterBuilder formal in formals) {
+          if (formal.publicName case var publicName?) {
+            if (seenNames[publicName] case var previous?) {
+              _privateNamedParameterPublicNameCollision(
+                publicName,
+                formal,
+                previous,
+              );
+            }
+          }
+        }
       }
     }
     if (declarationContext == DeclarationContext.ExtensionType &&
@@ -3139,6 +3233,25 @@
     push(formals ?? NullValues.FormalParameters);
   }
 
+  /// Report a duplicate declaration error between a private named [formal]
+  /// with [publicName] and another [previous] parameter.
+  void _privateNamedParameterPublicNameCollision(
+    String publicName,
+    FormalParameterBuilder formal,
+    FormalParameterBuilder previous,
+  ) {
+    addProblem(
+      codePrivateNamedParameterDuplicatePublicName.withArgumentsOld(publicName),
+      formal.fileOffset,
+      formal.name.length,
+      context: [
+        codeDuplicatedParameterNameCause
+            .withArgumentsOld(publicName)
+            .withLocation(uri, previous.fileOffset, previous.name.length),
+      ],
+    );
+  }
+
   @override
   void handleNoFormalParameters(Token token, MemberKind kind) {
     push(token.charOffset);
@@ -3172,18 +3285,18 @@
   ) {
     assert(
       checkState(enumKeyword, [
-        /* type parameters */ ValueKinds.TypeParameterFragmentListOrNull,
+        /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
         /* name */ ValueKinds.IdentifierOrParserRecovery,
       ]),
     );
     debugEvent("EnumDeclaration");
-    List<TypeParameterFragment>? typeParameters =
-        peek() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        peek(NullValues.NominalParameters) as NominalParameters?;
 
     _builderFactory.beginEnumDeclaration(
       name.lexeme,
       name.charOffset,
-      typeParameters,
+      typeParameters?.fragments,
     );
   }
 
@@ -3200,7 +3313,7 @@
           ValueKinds.TypeBuilderListOrNull,
           ValueKinds.ParserRecovery,
         ]),
-        /* type parameters */ ValueKinds.TypeParameterFragmentListOrNull,
+        /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
         /* name */ ValueKinds.IdentifierOrParserRecovery,
       ]),
     );
@@ -3275,7 +3388,7 @@
           ValueKinds.TypeBuilderListOrNull,
           ValueKinds.ParserRecovery,
         ]),
-        /* type parameters */ ValueKinds.TypeParameterFragmentListOrNull,
+        /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
         /* name */ ValueKinds.IdentifierOrParserRecovery,
         /* metadata */ ValueKinds.MetadataListOrNull,
       ]),
@@ -3309,8 +3422,8 @@
         nullIfParserRecovery(pop()) as List<TypeBuilder>?;
     List<TypeBuilder>? mixins =
         nullIfParserRecovery(pop()) as List<TypeBuilder>?;
-    List<TypeParameterFragment>? typeParameters =
-        pop() as List<TypeParameterFragment>?;
+    NominalParameters? typeParameters =
+        pop(NullValues.NominalParameters) as NominalParameters?;
     Object? identifier = pop();
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
     checkEmpty(beginToken.charOffset);
@@ -3345,14 +3458,18 @@
         offsetMap: _offsetMap,
         metadata: metadata,
         identifier: identifier,
-        typeParameters: typeParameters,
+        typeParameters: typeParameters?.fragments,
         mixins: mixins,
         interfaces: interfaces,
         startOffset: startOffset,
         endOffset: endToken.charOffset, //endOffset,
       );
     } else {
-      _builderFactory.endEnumDeclarationForParserRecovery(typeParameters);
+      _builderFactory.endEnumDeclarationForParserRecovery(
+        typeParameters
+            // Coverage-ignore(suite): Not run.
+            ?.fragments,
+      );
     }
 
     checkEmpty(enumKeyword.charOffset);
@@ -3488,12 +3605,12 @@
         pop() as List<FormalParameterBuilder>?;
     pop(); // formals offset
     TypeBuilder? returnType = pop() as TypeBuilder?;
-    List<SourceStructuralParameterBuilder>? typeParameters =
-        pop() as List<SourceStructuralParameterBuilder>?;
+    StructuralParameters? typeParameters =
+        pop(NullValues.StructuralParameters) as StructuralParameters?;
     push(
       _builderFactory.addFunctionType(
         returnType ?? const ImplicitTypeBuilder(),
-        typeParameters,
+        typeParameters?.builders,
         formals,
         questionMark != null
             ? const NullabilityBuilder.nullable()
@@ -3512,12 +3629,12 @@
         pop() as List<FormalParameterBuilder>?;
     int formalsOffset = popCharOffset();
     TypeBuilder? returnType = pop() as TypeBuilder?;
-    List<SourceStructuralParameterBuilder>? typeParameters =
-        pop() as List<SourceStructuralParameterBuilder>?;
+    StructuralParameters? typeParameters =
+        pop(NullValues.StructuralParameters) as StructuralParameters?;
     push(
       _builderFactory.addFunctionType(
         returnType ?? const ImplicitTypeBuilder(),
-        typeParameters,
+        typeParameters?.builders,
         formals,
         question != null
             ? const NullabilityBuilder.nullable()
@@ -3544,8 +3661,7 @@
             ? [
                 /* formals */ ValueKinds.FormalListOrNull,
                 /* formals offset */ ValueKinds.Integer,
-                /* type parameters */ ValueKinds
-                    .TypeParameterFragmentListOrNull,
+                /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
                 /* name */ ValueKinds.IdentifierOrParserRecovery,
                 /* return type */ ValueKinds.TypeBuilderOrNull,
                 /* metadata */ ValueKinds.MetadataListOrNull,
@@ -3555,15 +3671,14 @@
                   ValueKinds.TypeBuilderOrNull,
                   ValueKinds.ParserRecovery,
                 ]),
-                /* type parameters */ ValueKinds
-                    .TypeParameterFragmentListOrNull,
+                /* type parameters */ ValueKinds.NominalTypeParametersOrNull,
                 /* name */ ValueKinds.IdentifierOrParserRecovery,
                 /* metadata */ ValueKinds.MetadataListOrNull,
               ],
       ),
     );
 
-    List<TypeParameterFragment>? typeParameters;
+    NominalParameters? typeParameters;
     Object? name;
     Identifier identifier;
     TypeBuilder aliasedType;
@@ -3571,8 +3686,7 @@
       List<FormalParameterBuilder>? formals =
           pop(NullValues.FormalParameters) as List<FormalParameterBuilder>?;
       pop(); // formals offset
-      typeParameters =
-          pop(NullValues.NominalParameters) as List<TypeParameterFragment>?;
+      typeParameters = pop(NullValues.NominalParameters) as NominalParameters?;
       name = pop();
       TypeBuilder? returnType = pop(NullValues.TypeBuilder) as TypeBuilder?;
       // Create a nested declaration that is ended below by
@@ -3580,7 +3694,7 @@
       if (name is ParserRecovery) {
         // Coverage-ignore-block(suite): Not run.
         pop(NullValues.Metadata); // Metadata.
-        _builderFactory.endTypedefForParserRecovery(typeParameters);
+        _builderFactory.endTypedefForParserRecovery(typeParameters?.fragments);
         popDeclarationContext(DeclarationContext.Typedef);
         return;
       }
@@ -3598,13 +3712,12 @@
       );
     } else {
       Object? type = pop(NullValues.TypeBuilder);
-      typeParameters =
-          pop(NullValues.NominalParameters) as List<TypeParameterFragment>?;
+      typeParameters = pop(NullValues.NominalParameters) as NominalParameters?;
       name = pop();
       if (name is ParserRecovery) {
         // Coverage-ignore-block(suite): Not run.
         pop(NullValues.Metadata); // Metadata.
-        _builderFactory.endTypedefForParserRecovery(typeParameters);
+        _builderFactory.endTypedefForParserRecovery(typeParameters?.fragments);
         popDeclarationContext(DeclarationContext.Typedef);
         return;
       }
@@ -3696,7 +3809,7 @@
     _builderFactory.addFunctionTypeAlias(
       metadata,
       identifier.name,
-      typeParameters,
+      typeParameters?.fragments,
       aliasedType,
       identifier.nameOffset,
     );
@@ -3823,7 +3936,42 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
+    Token? abstractToken,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? lateToken,
+    Token? varFinalOrConst,
+    int count,
+    Token beginToken,
+    Token endToken,
+  ) {
+    debugEvent("Fields");
+    if (kind == DeclarationKind.Enum) {
+      reportIfNotEnabled(
+        libraryFeatures.enhancedEnums,
+        beginToken.charOffset,
+        noLength,
+      );
+    }
+    _endClassFields(
+      abstractToken,
+      augmentToken,
+      externalToken,
+      staticToken,
+      covariantToken,
+      lateToken,
+      varFinalOrConst,
+      count,
+      beginToken,
+      endToken,
+    );
+  }
+
+  void _endClassFields(
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -3848,7 +3996,6 @@
         /* metadata = */ ValueKinds.MetadataListOrNull,
       ]),
     );
-    debugEvent("Fields");
     if (staticToken != null && abstractToken != null) {
       handleRecoverableError(
         codeAbstractStaticField,
@@ -4018,8 +4165,8 @@
     TypeBuilder? bound = nullIfParserRecovery(pop()) as TypeBuilder?;
     if (inFunctionType) {
       // Peek to leave type parameters on top of stack.
-      List<StructuralParameterBuilder>? typeParameters =
-          peek() as List<StructuralParameterBuilder>?;
+      List<SourceStructuralParameterBuilder>? typeParameters =
+          peek() as List<SourceStructuralParameterBuilder>?;
       if (typeParameters != null) {
         typeParameters[index].bound = bound;
         if (variance != null) {
@@ -4062,13 +4209,26 @@
       );
     }
 
-    if (inConstructorName) {
-      addProblem(
-        codeConstructorWithTypeParameters,
-        offsetForToken(beginToken),
-        lengthOfSpan(beginToken, endToken),
+    if (inFunctionType) {
+      List<SourceStructuralParameterBuilder>? builders =
+          pop() as List<SourceStructuralParameterBuilder>?;
+      push(
+        new StructuralParameters(
+          beginToken: beginToken,
+          endToken: endToken,
+          builders: builders,
+        ),
       );
-      inConstructorName = false;
+    } else {
+      List<TypeParameterFragment>? fragments =
+          pop() as List<TypeParameterFragment>?;
+      push(
+        new NominalParameters(
+          beginToken: beginToken,
+          endToken: endToken,
+          fragments: fragments,
+        ),
+      );
     }
   }
 
@@ -4173,7 +4333,7 @@
   }
 
   @override
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
@@ -4202,13 +4362,8 @@
     }
 
     pushDeclarationContext(declarationContext);
-    inConstructor = true;
     _builderFactory.beginFactoryMethod();
-    push(
-      Modifiers.from(externalToken: externalToken, constToken: constToken) /*
-    (externalToken != null ? externalMask : 0) |
-        (constToken != null ? constMask : 0)*/,
-    );
+    push(Modifiers.from(externalToken: externalToken, constToken: constToken));
   }
 
   void _endFactoryMethod(
@@ -4230,7 +4385,7 @@
         ValueKinds.AsyncMarker,
         ValueKinds.FormalListOrNull,
         /* formals offset */ ValueKinds.Integer,
-        ValueKinds.TypeParameterFragmentListOrNull,
+        ValueKinds.NominalTypeParametersOrNull,
         ValueKinds.IdentifierOrParserRecovery,
         ValueKinds.Modifiers,
         ValueKinds.MetadataListOrNull,
@@ -4246,13 +4401,22 @@
     List<FormalParameterBuilder>? formals =
         pop() as List<FormalParameterBuilder>?;
     int formalsOffset = popCharOffset();
-    pop(); // type parameters
+    NominalParameters? typeParameters = pop() as NominalParameters?;
     Object name = pop()!;
     Modifiers modifiers = pop() as Modifiers;
     if (nativeMethodName != null) {
       modifiers |= Modifiers.External;
     }
     List<MetadataBuilder>? metadata = pop() as List<MetadataBuilder>?;
+
+    if (typeParameters != null) {
+      addProblem(
+        codeConstructorWithTypeParameters,
+        typeParameters.charOffset,
+        typeParameters.spanLength,
+      );
+    }
+
     if (name is! Identifier) {
       // Coverage-ignore-block(suite): Not run.
       assert(
@@ -4277,146 +4441,30 @@
       );
     }
     nativeMethodName = null;
-    inConstructor = false;
     popDeclarationContext();
   }
 
   @override
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
   ) {
     debugEvent("endClassFactoryMethod");
 
-    _endFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    debugEvent("endMixinFactoryMethod");
+    if (kind == DeclarationKind.Enum) {
+      reportIfNotEnabled(
+        libraryFeatures.enhancedEnums,
+        beginToken.charOffset,
+        noLength,
+      );
+    }
 
     _endFactoryMethod(beginToken, factoryKeyword, endToken);
   }
 
   @override
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    debugEvent("endExtensionFactoryMethod");
-
-    _endFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endEnumFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    debugEvent("endEnumFactoryMethod");
-
-    reportIfNotEnabled(
-      libraryFeatures.enhancedEnums,
-      beginToken.charOffset,
-      noLength,
-    );
-
-    _endFactoryMethod(beginToken, factoryKeyword, endToken);
-  }
-
-  @override
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endEnumMethod");
-
-    reportIfNotEnabled(
-      libraryFeatures.enhancedEnums,
-      beginToken.charOffset,
-      noLength,
-    );
-
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.enumMethod,
-    );
-  }
-
-  @override
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    reportIfNotEnabled(
-      libraryFeatures.enhancedEnums,
-      beginToken.charOffset,
-      noLength,
-    );
-
-    endClassFields(
-      abstractToken,
-      augmentToken,
-      externalToken,
-      staticToken,
-      covariantToken,
-      lateToken,
-      varFinalOrConst,
-      count,
-      beginToken,
-      endToken,
-    );
-  }
-
-  @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    debugEvent("endEnumConstructor");
-
-    reportIfNotEnabled(
-      libraryFeatures.enhancedEnums,
-      beginToken.charOffset,
-      noLength,
-    );
-
-    _endClassMethod(
-      getOrSet,
-      beginToken,
-      beginParam,
-      beginInitializers,
-      endToken,
-      _MethodKind.enumConstructor,
-    );
-  }
-
-  @override
   void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     debugEvent("RedirectingFactoryBody");
     push(MethodBody.RedirectingFactoryBody);
@@ -4607,6 +4655,20 @@
   }
 
   @override
+  // Coverage-ignore(suite): Not run.
+  void handleNoClassBody(Token semicolonToken) {
+    debugEvent("NoClassBody");
+    _builderFactory.beginClassBody();
+  }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    debugEvent("NoExtensionTypeBody");
+    _builderFactory.beginExtensionTypeBody();
+  }
+
+  @override
   void endClassOrMixinOrExtensionBody(
     DeclarationKind kind,
     int memberCount,
@@ -4662,20 +4724,6 @@
   }
 }
 
-/// TODO(johnniwinther): Use [DeclarationContext] instead of [_MethodKind].
-enum _MethodKind {
-  classConstructor,
-  classMethod,
-  mixinConstructor,
-  mixinMethod,
-  extensionConstructor,
-  extensionMethod,
-  extensionTypeConstructor,
-  extensionTypeMethod,
-  enumConstructor,
-  enumMethod,
-}
-
 extension on MemberKind {
   /// Returns `true` if a parameter occurring in this context can be inferred.
   bool get isParameterInferable {
@@ -4715,3 +4763,31 @@
 
   EnumConstantInfo(this.metadata, this.name, this.nameOffset);
 }
+
+class NominalParameters {
+  final Token beginToken;
+  final Token endToken;
+  final List<TypeParameterFragment>? fragments;
+
+  NominalParameters({
+    required this.beginToken,
+    required this.endToken,
+    required this.fragments,
+  });
+
+  int get charOffset => beginToken.charOffset;
+
+  int get spanLength => lengthOfSpan(beginToken, endToken);
+}
+
+class StructuralParameters {
+  final Token beginToken;
+  final Token endToken;
+  final List<SourceStructuralParameterBuilder>? builders;
+
+  StructuralParameters({
+    required this.beginToken,
+    required this.endToken,
+    required this.builders,
+  });
+}
diff --git a/pkg/front_end/lib/src/source/source_enum_builder.dart b/pkg/front_end/lib/src/source/source_enum_builder.dart
index bef9fad..327515d 100644
--- a/pkg/front_end/lib/src/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/source/source_enum_builder.dart
@@ -512,7 +512,6 @@
     required SourceMethodBuilder methodBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {
     Name toStringName = new Name(
       _enumToStringName,
@@ -872,7 +871,6 @@
     required SourcePropertyBuilder propertyBuilder,
     required Annotatable annotatable,
     required Uri annotatableFileUri,
-    required bool isClassInstanceMember,
   }) {}
 
   @override
diff --git a/pkg/front_end/lib/src/source/source_function_builder.dart b/pkg/front_end/lib/src/source/source_function_builder.dart
index f1a2cef..9d3726f 100644
--- a/pkg/front_end/lib/src/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/source/source_function_builder.dart
@@ -77,7 +77,7 @@
       }
 
       // Required named parameters can't have default values.
-      if (formal.isRequiredNamed && formal.initializerToken != null) {
+      if (formal.isRequiredNamed && formal.hasDeclaredInitializer) {
         libraryBuilder.addProblem(
           codeRequiredNamedParameterHasDefaultValueError.withArgumentsOld(
             formal.name,
diff --git a/pkg/front_end/lib/src/source/source_loader.dart b/pkg/front_end/lib/src/source/source_loader.dart
index 4e0768e..dfd287a 100644
--- a/pkg/front_end/lib/src/source/source_loader.dart
+++ b/pkg/front_end/lib/src/source/source_loader.dart
@@ -3245,6 +3245,8 @@
   Iterable<MapEntry<K, V>> get entries;
   void operator []=(K key, V value) {}
   void addAll(Map<K, V> other) {}
+  V? operator [](Object key);
+  bool containsKey(Object key);
 }
 
 abstract class pragma {
diff --git a/pkg/front_end/lib/src/source/source_method_builder.dart b/pkg/front_end/lib/src/source/source_method_builder.dart
index 8e57802..38768aa 100644
--- a/pkg/front_end/lib/src/source/source_method_builder.dart
+++ b/pkg/front_end/lib/src/source/source_method_builder.dart
@@ -164,7 +164,6 @@
         methodBuilder: this,
         annotatable: _invokeTarget,
         annotatableFileUri: _invokeTarget.fileUri,
-        isClassInstanceMember: isClassInstanceMember,
       );
       for (int i = 0; i < _augmentations.length; i++) {
         MethodDeclaration augmentation = _augmentations[i];
@@ -175,7 +174,6 @@
           methodBuilder: this,
           annotatable: _invokeTarget,
           annotatableFileUri: _invokeTarget.fileUri,
-          isClassInstanceMember: isClassInstanceMember,
         );
       }
       hasBuiltOutlineExpressions = true;
diff --git a/pkg/front_end/lib/src/source/source_property_builder.dart b/pkg/front_end/lib/src/source/source_property_builder.dart
index 174b8cb..7c12d3c 100644
--- a/pkg/front_end/lib/src/source/source_property_builder.dart
+++ b/pkg/front_end/lib/src/source/source_property_builder.dart
@@ -212,7 +212,6 @@
         propertyBuilder: this,
         annotatable: readTarget as Annotatable,
         annotatableFileUri: readTarget!.fileUri,
-        isClassInstanceMember: isClassInstanceMember,
       );
       List<GetterDeclaration>? getterAugmentations = _getterAugmentations;
       if (getterAugmentations != null) {
@@ -224,7 +223,6 @@
             propertyBuilder: this,
             annotatable: readTarget as Annotatable,
             annotatableFileUri: readTarget!.fileUri,
-            isClassInstanceMember: isClassInstanceMember,
           );
         }
       }
@@ -235,7 +233,6 @@
         propertyBuilder: this,
         annotatable: writeTarget as Annotatable,
         annotatableFileUri: writeTarget!.fileUri,
-        isClassInstanceMember: isClassInstanceMember,
       );
       List<SetterDeclaration>? setterAugmentations = _setterAugmentations;
       if (setterAugmentations != null) {
@@ -247,7 +244,6 @@
             propertyBuilder: this,
             annotatable: writeTarget as Annotatable,
             annotatableFileUri: writeTarget!.fileUri,
-            isClassInstanceMember: isClassInstanceMember,
           );
         }
       }
diff --git a/pkg/front_end/lib/src/source/value_kinds.dart b/pkg/front_end/lib/src/source/value_kinds.dart
index c8a802d..17e25fb 100644
--- a/pkg/front_end/lib/src/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/source/value_kinds.dart
@@ -28,7 +28,6 @@
 import '../builder/metadata_builder.dart' as type;
 import '../builder/record_type_builder.dart' as type;
 import '../builder/type_builder.dart' as type;
-import '../fragment/fragment.dart' as type;
 import '../kernel/body_builder.dart'
     as type
     show
@@ -229,8 +228,8 @@
       const SingleValueKind<List<type.TypeBuilder>>();
   static const ValueKind TypeBuilderListOrNull =
       const SingleValueKind<List<type.TypeBuilder>>(NullValues.TypeBuilderList);
-  static const ValueKind TypeParameterFragmentListOrNull =
-      const SingleValueKind<List<type.TypeParameterFragment>>(
+  static const ValueKind NominalTypeParametersOrNull =
+      const SingleValueKind<type.NominalParameters>(
         NullValues.NominalParameters,
       );
   static const ValueKind NominalVariableListOrNull =
diff --git a/pkg/front_end/lib/src/type_inference/delayed_expressions.dart b/pkg/front_end/lib/src/type_inference/delayed_expressions.dart
index c43f6f5..799d6eb 100644
--- a/pkg/front_end/lib/src/type_inference/delayed_expressions.dart
+++ b/pkg/front_end/lib/src/type_inference/delayed_expressions.dart
@@ -611,7 +611,7 @@
 /// to [_target].
 class DelayedAssignment extends DelayedExpression {
   final MatchingCache _cache;
-  final VariableDeclaration _target;
+  final ExpressionVariable _target;
   final DartType _type;
   final DelayedExpression _value;
   final bool hasEffect;
diff --git a/pkg/front_end/lib/src/type_inference/external_ast_helper.dart b/pkg/front_end/lib/src/type_inference/external_ast_helper.dart
index b05a345..92de5f8 100644
--- a/pkg/front_end/lib/src/type_inference/external_ast_helper.dart
+++ b/pkg/front_end/lib/src/type_inference/external_ast_helper.dart
@@ -168,7 +168,7 @@
 
 /// Creates a [VariableSet] of [variable] with the [value].
 Expression createVariableSet(
-  VariableDeclaration variable,
+  ExpressionVariable variable,
   Expression value, {
   bool allowFinalAssignment = false,
   required int fileOffset,
diff --git a/pkg/front_end/lib/src/type_inference/for_in.dart b/pkg/front_end/lib/src/type_inference/for_in.dart
index 9ee9be2..7f5a61c 100644
--- a/pkg/front_end/lib/src/type_inference/for_in.dart
+++ b/pkg/front_end/lib/src/type_inference/for_in.dart
@@ -49,7 +49,7 @@
 
   @override
   DartType computeElementType(InferenceVisitorBase visitor) {
-    VariableDeclaration variable = variableSet.variable;
+    ExpressionVariable variable = variableSet.variable;
     DartType? promotedType = visitor.flowAnalysis
         .promotedType(variable)
         // Coverage-ignore(suite): Not run.
diff --git a/pkg/front_end/lib/src/type_inference/inference_visitor.dart b/pkg/front_end/lib/src/type_inference/inference_visitor.dart
index 15d163d..3dd40b5e 100644
--- a/pkg/front_end/lib/src/type_inference/inference_visitor.dart
+++ b/pkg/front_end/lib/src/type_inference/inference_visitor.dart
@@ -107,7 +107,7 @@
           TreeNode,
           Statement,
           Expression,
-          VariableDeclaration,
+          ExpressionVariable,
           Pattern,
           InvalidExpression,
           TypeDeclarationType,
@@ -116,7 +116,7 @@
         NullShortingMixin<
           NullAwareGuard,
           Expression,
-          VariableDeclaration,
+          ExpressionVariable,
           SharedTypeView
         >,
         StackChecker,
@@ -845,9 +845,8 @@
   }
 
   @override
-  // Coverage-ignore(suite): Not run.
   InitializerInferenceResult visitInvalidInitializer(InvalidInitializer node) {
-    _unhandledInitializer(node);
+    return new SuccessfulInitializerInferenceResult(node);
   }
 
   @override
@@ -10706,7 +10705,8 @@
     if (unaryTarget.isNullable) {
       List<LocatedMessage>? context = getWhyNotPromotedContext(
         whyNotPromoted(),
-        unary, // Coverage-ignore(suite): Not run.
+        unary,
+        // Coverage-ignore(suite): Not run.
         (type) => !type.isPotentiallyNullable,
       );
       // TODO(johnniwinther): Special case 'unary-' in messages. It should
@@ -13256,7 +13256,8 @@
         return result;
       }
     }
-    VariableDeclarationImpl variable = node.variable as VariableDeclarationImpl;
+    InternalExpressionVariable variable =
+        node.expressionVariable as InternalExpressionVariable;
     var (DartType variableType, DartType writeContext) =
         computeVariableSetTypeAndWriteContext(variable);
     ExpressionInferenceResult rhsResult = inferExpression(
@@ -13278,251 +13279,7 @@
   StatementInferenceResult visitVariableDeclaration(
     covariant VariableDeclarationImpl node,
   ) {
-    DartType declaredType = node.isImplicitlyTyped
-        ? const UnknownType()
-        : node.type;
-    DartType inferredType;
-    ExpressionInferenceResult? initializerResult;
-
-    // Wildcard variable declarations can be removed, except for the ones in
-    // for loops, const variables, and late variables. This logic turns them
-    // into `ExpressionStatement`s or `EmptyStatement`s so the backends don't
-    // need to allocate space for them.
-    if (node.isWildcard && !node.isConst && node.parent is! ForStatement) {
-      if (node.initializer case var initializer? when !node.isLate) {
-        return new StatementInferenceResult.single(
-          createExpressionStatement(
-            inferExpression(
-              initializer,
-              declaredType,
-              isVoidAllowed: true,
-            ).expression,
-          ),
-        );
-      } else {
-        return new StatementInferenceResult.single(new EmptyStatement());
-      }
-    }
-    if (node.initializer != null) {
-      if (node.isLate && node.hasDeclaredInitializer) {
-        flowAnalysis.lateInitializer_begin(node);
-      }
-      initializerResult = inferExpression(
-        node.initializer!,
-        declaredType,
-        isVoidAllowed: true,
-      );
-      if (node.isLate && node.hasDeclaredInitializer) {
-        flowAnalysis.lateInitializer_end();
-      }
-      inferredType = inferDeclarationType(
-        initializerResult.inferredType,
-        forSyntheticVariable: node.name == null,
-      );
-    } else {
-      inferredType = const DynamicType();
-    }
-    if (node.isImplicitlyTyped) {
-      if (dataForTesting != null) {
-        // Coverage-ignore-block(suite): Not run.
-        dataForTesting!.typeInferenceResult.inferredVariableTypes[node] =
-            inferredType;
-      }
-      node.type = inferredType;
-    }
-    flowAnalysis.declare(
-      node,
-      new SharedTypeView(node.type),
-      initialized: node.hasDeclaredInitializer,
-    );
-    if (initializerResult != null) {
-      DartType initializerType = initializerResult.inferredType;
-      flowAnalysis.initialize(
-        node,
-        new SharedTypeView(initializerType),
-        initializerResult.expression,
-        isFinal: node.isFinal,
-        isLate: node.isLate,
-        isImplicitlyTyped: node.isImplicitlyTyped,
-      );
-      initializerResult = ensureAssignableResult(
-        node.type,
-        initializerResult,
-        fileOffset: node.fileOffset,
-        isVoidAllowed: node.type is VoidType,
-      );
-      Expression initializer = initializerResult.expression;
-      node.initializer = initializer..parent = node;
-    }
-    if (node.isLate &&
-        libraryBuilder.loader.target.backendTarget.isLateLocalLoweringEnabled(
-          hasInitializer: node.hasDeclaredInitializer,
-          isFinal: node.isFinal,
-          isPotentiallyNullable: node.type.isPotentiallyNullable,
-        )) {
-      int fileOffset = node.fileOffset;
-
-      List<Statement> result = <Statement>[];
-      result.add(node);
-
-      late_lowering.IsSetEncoding isSetEncoding = late_lowering
-          .computeIsSetEncoding(
-            node.type,
-            late_lowering.computeIsSetStrategy(libraryBuilder),
-          );
-      VariableDeclaration? isSetVariable;
-      if (isSetEncoding == late_lowering.IsSetEncoding.useIsSetField) {
-        isSetVariable = new VariableDeclaration(
-          late_lowering.computeLateLocalIsSetName(node.name!),
-          initializer: new BoolLiteral(false)..fileOffset = fileOffset,
-          type: coreTypes.boolRawType(Nullability.nonNullable),
-          isLowered: true,
-        )..fileOffset = fileOffset;
-        result.add(isSetVariable);
-      }
-
-      Expression createVariableRead({bool needsPromotion = false}) {
-        if (needsPromotion) {
-          return new VariableGet(node, node.type)..fileOffset = fileOffset;
-        } else {
-          return new VariableGet(node)..fileOffset = fileOffset;
-        }
-      }
-
-      Expression createIsSetRead() =>
-          new VariableGet(isSetVariable!)..fileOffset = fileOffset;
-      Expression createVariableWrite(Expression value) =>
-          new VariableSet(node, value);
-      Expression createIsSetWrite(Expression value) =>
-          new VariableSet(isSetVariable!, value);
-
-      VariableDeclaration getVariable = new VariableDeclaration(
-        late_lowering.computeLateLocalGetterName(node.name!),
-        isLowered: true,
-      )..fileOffset = fileOffset;
-      FunctionDeclaration getter = new FunctionDeclaration(
-        getVariable,
-        new FunctionNode(
-          node.initializer == null
-              ? late_lowering.createGetterBodyWithoutInitializer(
-                  coreTypes,
-                  fileOffset,
-                  node.name!,
-                  node.type,
-                  createVariableRead: createVariableRead,
-                  createIsSetRead: createIsSetRead,
-                  isSetEncoding: isSetEncoding,
-                  forField: false,
-                )
-              : (node.isFinal
-                    ? late_lowering.createGetterWithInitializerWithRecheck(
-                        coreTypes,
-                        fileOffset,
-                        node.name!,
-                        node.type,
-                        node.initializer!,
-                        createVariableRead: createVariableRead,
-                        createVariableWrite: createVariableWrite,
-                        createIsSetRead: createIsSetRead,
-                        createIsSetWrite: createIsSetWrite,
-                        isSetEncoding: isSetEncoding,
-                        forField: false,
-                      )
-                    : late_lowering.createGetterWithInitializer(
-                        coreTypes,
-                        fileOffset,
-                        node.name!,
-                        node.type,
-                        node.initializer!,
-                        createVariableRead: createVariableRead,
-                        createVariableWrite: createVariableWrite,
-                        createIsSetRead: createIsSetRead,
-                        createIsSetWrite: createIsSetWrite,
-                        isSetEncoding: isSetEncoding,
-                      )),
-          returnType: node.type,
-        ),
-      )..fileOffset = fileOffset;
-      getVariable.type = getter.function.computeFunctionType(
-        Nullability.nonNullable,
-      );
-      node.lateGetter = getVariable;
-      result.add(getter);
-
-      if (!node.isFinal || node.initializer == null) {
-        node.isLateFinalWithoutInitializer =
-            node.isFinal && node.initializer == null;
-        VariableDeclaration setVariable = new VariableDeclaration(
-          late_lowering.computeLateLocalSetterName(node.name!),
-          isLowered: true,
-        )..fileOffset = fileOffset;
-        VariableDeclaration setterParameter = new VariableDeclaration(
-          "${node.name}#param",
-          type: node.type,
-        )..fileOffset = fileOffset;
-        FunctionDeclaration setter = new FunctionDeclaration(
-          setVariable,
-          new FunctionNode(
-            node.isFinal
-                  ? late_lowering.createSetterBodyFinal(
-                      coreTypes,
-                      fileOffset,
-                      node.name!,
-                      setterParameter,
-                      node.type,
-                      shouldReturnValue: true,
-                      createVariableRead: createVariableRead,
-                      createVariableWrite: createVariableWrite,
-                      createIsSetRead: createIsSetRead,
-                      createIsSetWrite: createIsSetWrite,
-                      isSetEncoding: isSetEncoding,
-                      forField: false,
-                    )
-                  : late_lowering.createSetterBody(
-                      coreTypes,
-                      fileOffset,
-                      node.name!,
-                      setterParameter,
-                      node.type,
-                      shouldReturnValue: true,
-                      createVariableWrite: createVariableWrite,
-                      createIsSetWrite: createIsSetWrite,
-                      isSetEncoding: isSetEncoding,
-                    )
-              ..fileOffset = fileOffset,
-            positionalParameters: <VariableDeclaration>[setterParameter],
-          ),
-        )
-        // TODO(johnniwinther): Reinsert the file offset when the vm doesn't
-        //  use it for function declaration identity.
-        /*..fileOffset = fileOffset*/;
-        setVariable.type = setter.function.computeFunctionType(
-          Nullability.nonNullable,
-        );
-        node.lateSetter = setVariable;
-        result.add(setter);
-      }
-      node.isLate = false;
-      node.lateType = node.type;
-      if (isSetEncoding == late_lowering.IsSetEncoding.useSentinel) {
-        node.initializer =
-            new StaticInvocation(
-                coreTypes.createSentinelMethod,
-                new Arguments([], types: [node.type])..fileOffset = fileOffset,
-              )
-              ..fileOffset = fileOffset
-              ..parent = node;
-      } else {
-        node.initializer = null;
-      }
-      node.type = computeNullable(node.type);
-      node.lateName = node.name;
-      node.isLowered = true;
-      node.name = late_lowering.computeLateLocalName(node.name!);
-
-      return new StatementInferenceResult.multiple(node.fileOffset, result);
-    }
-    return const StatementInferenceResult();
+    return _inferInternalExpressionVariableDeclaration(node, node);
   }
 
   @override
@@ -13585,7 +13342,7 @@
       }
     }
     return inferVariableGet(
-      variable: node.variable as VariableDeclarationImpl,
+      variable: node.expressionVariable as InternalExpressionVariable,
       typeContext: typeContext,
       nameOffset: node.fileOffset,
       node: node,
@@ -14401,7 +14158,7 @@
     TreeNode,
     Statement,
     Expression,
-    VariableDeclaration,
+    ExpressionVariable,
     SharedTypeView
   >
   get flow => flowAnalysis;
@@ -14595,7 +14352,7 @@
   void handleCase_afterCaseHeads(
     Statement node,
     int caseIndex,
-    Iterable<VariableDeclaration> variables,
+    Iterable<ExpressionVariable> variables,
   ) {}
 
   @override
@@ -14671,7 +14428,7 @@
   }
 
   @override
-  void setVariableType(VariableDeclaration variable, SharedTypeView type) {
+  void setVariableType(ExpressionVariable variable, SharedTypeView type) {
     variable.type = type.unwrapTypeView();
   }
 
@@ -16202,7 +15959,7 @@
 
   @override
   void finishJoinedPatternVariable(
-    VariableDeclaration variable, {
+    ExpressionVariable variable, {
     required JoinedPatternVariableLocation location,
     required JoinedPatternVariableInconsistency inconsistency,
     required bool isFinal,
@@ -16751,6 +16508,271 @@
   bool isDotShorthand(Expression node) {
     return node is DotShorthand;
   }
+
+  @override
+  // Coverage-ignore(suite): Not run.
+  StatementInferenceResult visitVariableInitialization(
+    VariableInitialization node,
+  ) {
+    InternalExpressionVariable nodeVariable =
+        node.variable as InternalExpressionVariable;
+    StatementInferenceResult statementInferenceResult =
+        _inferInternalExpressionVariableDeclaration(node, nodeVariable);
+    node.variable = nodeVariable.astVariable;
+    return statementInferenceResult;
+  }
+
+  StatementInferenceResult _inferInternalExpressionVariableDeclaration(
+    VariableInitialization node,
+    InternalExpressionVariable nodeVariable,
+  ) {
+    DartType declaredType = nodeVariable.isImplicitlyTyped
+        ? const UnknownType()
+        : node.type;
+    DartType inferredType;
+    ExpressionInferenceResult? initializerResult;
+
+    // Wildcard variable declarations can be removed, except for the ones in
+    // for loops, const variables, and late variables. This logic turns them
+    // into `ExpressionStatement`s or `EmptyStatement`s so the backends don't
+    // need to allocate space for them.
+    if (node.isWildcard && !node.isConst && node.parent is! ForStatement) {
+      if (node.initializer case var initializer? when !node.isLate) {
+        return new StatementInferenceResult.single(
+          createExpressionStatement(
+            inferExpression(
+              initializer,
+              declaredType,
+              isVoidAllowed: true,
+            ).expression,
+          ),
+        );
+      } else {
+        return new StatementInferenceResult.single(new EmptyStatement());
+      }
+    }
+    if (node.initializer != null) {
+      if (node.isLate && node.hasDeclaredInitializer) {
+        flowAnalysis.lateInitializer_begin(node);
+      }
+      initializerResult = inferExpression(
+        node.initializer!,
+        declaredType,
+        isVoidAllowed: true,
+      );
+      if (node.isLate && node.hasDeclaredInitializer) {
+        flowAnalysis.lateInitializer_end();
+      }
+      inferredType = inferDeclarationType(
+        initializerResult.inferredType,
+        forSyntheticVariable: node.name == null,
+      );
+    } else {
+      inferredType = const DynamicType();
+    }
+    if (nodeVariable.isImplicitlyTyped) {
+      if (dataForTesting != null) {
+        // Coverage-ignore-block(suite): Not run.
+        dataForTesting!.typeInferenceResult.inferredVariableTypes[node] =
+            inferredType;
+      }
+      node.type = inferredType;
+    }
+    flowAnalysis.declare(
+      nodeVariable.astVariable,
+      new SharedTypeView(node.type),
+      initialized: node.hasDeclaredInitializer,
+    );
+    if (initializerResult != null) {
+      DartType initializerType = initializerResult.inferredType;
+      flowAnalysis.initialize(
+        nodeVariable.astVariable,
+        new SharedTypeView(initializerType),
+        initializerResult.expression,
+        isFinal: node.isFinal,
+        isLate: node.isLate,
+        isImplicitlyTyped: nodeVariable.isImplicitlyTyped,
+      );
+      initializerResult = ensureAssignableResult(
+        node.type,
+        initializerResult,
+        fileOffset: node.fileOffset,
+        isVoidAllowed: node.type is VoidType,
+      );
+      Expression initializer = initializerResult.expression;
+      node.initializer = initializer..parent = node;
+    }
+    if (node.isLate &&
+        libraryBuilder.loader.target.backendTarget.isLateLocalLoweringEnabled(
+          hasInitializer: node.hasDeclaredInitializer,
+          isFinal: node.isFinal,
+          isPotentiallyNullable: node.type.isPotentiallyNullable,
+        )) {
+      int fileOffset = node.fileOffset;
+
+      List<Statement> result = <Statement>[];
+      result.add(node);
+
+      late_lowering.IsSetEncoding isSetEncoding = late_lowering
+          .computeIsSetEncoding(
+            node.type,
+            late_lowering.computeIsSetStrategy(libraryBuilder),
+          );
+      VariableDeclaration? isSetVariable;
+      if (isSetEncoding == late_lowering.IsSetEncoding.useIsSetField) {
+        isSetVariable = new VariableDeclaration(
+          late_lowering.computeLateLocalIsSetName(node.name!),
+          initializer: new BoolLiteral(false)..fileOffset = fileOffset,
+          type: coreTypes.boolRawType(Nullability.nonNullable),
+          isLowered: true,
+        )..fileOffset = fileOffset;
+        result.add(isSetVariable);
+      }
+
+      Expression createVariableRead({bool needsPromotion = false}) {
+        if (needsPromotion) {
+          return new VariableGet(node.variable, node.type)
+            ..fileOffset = fileOffset;
+        } else {
+          return new VariableGet(node.variable)..fileOffset = fileOffset;
+        }
+      }
+
+      Expression createIsSetRead() =>
+          new VariableGet(isSetVariable!)..fileOffset = fileOffset;
+      Expression createVariableWrite(Expression value) =>
+          new VariableSet(node.variable, value);
+      Expression createIsSetWrite(Expression value) =>
+          new VariableSet(isSetVariable!, value);
+
+      VariableDeclaration getVariable = new VariableDeclaration(
+        late_lowering.computeLateLocalGetterName(node.name!),
+        isLowered: true,
+      )..fileOffset = fileOffset;
+      FunctionDeclaration getter = new FunctionDeclaration(
+        getVariable,
+        new FunctionNode(
+          node.initializer == null
+              ? late_lowering.createGetterBodyWithoutInitializer(
+                  coreTypes,
+                  fileOffset,
+                  node.name!,
+                  node.type,
+                  createVariableRead: createVariableRead,
+                  createIsSetRead: createIsSetRead,
+                  isSetEncoding: isSetEncoding,
+                  forField: false,
+                )
+              : (node.isFinal
+                    ? late_lowering.createGetterWithInitializerWithRecheck(
+                        coreTypes,
+                        fileOffset,
+                        node.name!,
+                        node.type,
+                        node.initializer!,
+                        createVariableRead: createVariableRead,
+                        createVariableWrite: createVariableWrite,
+                        createIsSetRead: createIsSetRead,
+                        createIsSetWrite: createIsSetWrite,
+                        isSetEncoding: isSetEncoding,
+                        forField: false,
+                      )
+                    : late_lowering.createGetterWithInitializer(
+                        coreTypes,
+                        fileOffset,
+                        node.name!,
+                        node.type,
+                        node.initializer!,
+                        createVariableRead: createVariableRead,
+                        createVariableWrite: createVariableWrite,
+                        createIsSetRead: createIsSetRead,
+                        createIsSetWrite: createIsSetWrite,
+                        isSetEncoding: isSetEncoding,
+                      )),
+          returnType: node.type,
+        ),
+      )..fileOffset = fileOffset;
+      getVariable.type = getter.function.computeFunctionType(
+        Nullability.nonNullable,
+      );
+      nodeVariable.lateGetter = getVariable;
+      result.add(getter);
+
+      if (!node.isFinal || node.initializer == null) {
+        nodeVariable.isLateFinalWithoutInitializer =
+            node.isFinal && node.initializer == null;
+        VariableDeclaration setVariable = new VariableDeclaration(
+          late_lowering.computeLateLocalSetterName(node.name!),
+          isLowered: true,
+        )..fileOffset = fileOffset;
+        VariableDeclaration setterParameter = new VariableDeclaration(
+          "${node.name}#param",
+          type: node.type,
+        )..fileOffset = fileOffset;
+        FunctionDeclaration setter = new FunctionDeclaration(
+          setVariable,
+          new FunctionNode(
+            node.isFinal
+                  ? late_lowering.createSetterBodyFinal(
+                      coreTypes,
+                      fileOffset,
+                      node.name!,
+                      setterParameter,
+                      node.type,
+                      shouldReturnValue: true,
+                      createVariableRead: createVariableRead,
+                      createVariableWrite: createVariableWrite,
+                      createIsSetRead: createIsSetRead,
+                      createIsSetWrite: createIsSetWrite,
+                      isSetEncoding: isSetEncoding,
+                      forField: false,
+                    )
+                  : late_lowering.createSetterBody(
+                      coreTypes,
+                      fileOffset,
+                      node.name!,
+                      setterParameter,
+                      node.type,
+                      shouldReturnValue: true,
+                      createVariableWrite: createVariableWrite,
+                      createIsSetWrite: createIsSetWrite,
+                      isSetEncoding: isSetEncoding,
+                    )
+              ..fileOffset = fileOffset,
+            positionalParameters: <VariableDeclaration>[setterParameter],
+          ),
+        )
+        // TODO(johnniwinther): Reinsert the file offset when the vm doesn't
+        //  use it for function declaration identity.
+        /*..fileOffset = fileOffset*/;
+        setVariable.type = setter.function.computeFunctionType(
+          Nullability.nonNullable,
+        );
+        nodeVariable.lateSetter = setVariable;
+        result.add(setter);
+      }
+      node.isLate = false;
+      nodeVariable.lateType = node.type;
+      if (isSetEncoding == late_lowering.IsSetEncoding.useSentinel) {
+        node.initializer =
+            new StaticInvocation(
+                coreTypes.createSentinelMethod,
+                new Arguments([], types: [node.type])..fileOffset = fileOffset,
+              )
+              ..fileOffset = fileOffset
+              ..parent = node;
+      } else {
+        node.initializer = null;
+      }
+      node.type = computeNullable(node.type);
+      nodeVariable.lateName = node.name;
+      node.isLowered = true;
+      node.name = late_lowering.computeLateLocalName(node.name!);
+
+      return new StatementInferenceResult.multiple(node.fileOffset, result);
+    }
+    return const StatementInferenceResult();
+  }
 }
 
 /// Offset and type information collection in [InferenceVisitor.inferMapEntry].
diff --git a/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart b/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart
index 1ae78dd..e97ba50 100644
--- a/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart
+++ b/pkg/front_end/lib/src/type_inference/inference_visitor_base.dart
@@ -146,7 +146,7 @@
     this.expressionEvaluationHelper,
   );
 
-  AssignedVariables<TreeNode, VariableDeclaration> get assignedVariables =>
+  AssignedVariables<TreeNode, ExpressionVariable> get assignedVariables =>
       _inferrer.assignedVariables;
 
   InterfaceType? get thisType => _inferrer.thisType;
@@ -161,7 +161,7 @@
     TreeNode,
     Statement,
     Expression,
-    VariableDeclaration,
+    ExpressionVariable,
     SharedTypeView
   >
   get flowAnalysis => _inferrer.flowAnalysis;
@@ -2928,16 +2928,16 @@
         functionType: null,
       )..fileOffset = fileOffset;
     } else if (receiver is VariableGet) {
-      VariableDeclaration variable = receiver.variable;
+      ExpressionVariable variable = receiver.variable;
       TreeNode? parent = variable.parent;
       if (parent is FunctionDeclaration) {
         assert(
           invocationTargetType is InvocationTargetFunctionType,
           "Unknown function type for local function invocation.",
         );
-        localName = variable.name!;
+        localName = variable.cosmeticName!;
         expression = new LocalFunctionInvocation(
-          variable,
+          variable as VariableDeclaration,
           arguments,
           functionType: inferredFunctionType as FunctionType,
         )..fileOffset = receiver.fileOffset;
@@ -4289,15 +4289,15 @@
   /// If [node] is provided, it is used as the basis for the resulting
   /// expression, otherwise a new [VariableGet] is created.
   ExpressionInferenceResult inferVariableGet({
-    required VariableDeclarationImpl variable,
+    required InternalExpressionVariable variable,
     required DartType typeContext,
     required int nameOffset,
     VariableGet? node,
   }) {
-    node ??= new VariableGet(variable)..fileOffset = nameOffset;
+    node ??= new VariableGet(variable.astVariable)..fileOffset = nameOffset;
     DartType? promotedType;
     DartType declaredOrInferredType = variable.lateType ?? variable.type;
-    if (isExtensionThis(variable)) {
+    if (isExtensionThis(variable.astVariable)) {
       flowAnalysis.thisOrSuper(
         node,
         new SharedTypeView(variable.type),
@@ -4306,7 +4306,7 @@
     } else if (!variable.isLocalFunction) {
       // Don't promote local functions.
       promotedType = flowAnalysis
-          .variableRead(node, variable)
+          .variableRead(node, variable.astVariable)
           ?.unwrapTypeView();
     }
     node.promotedType = promotedType;
@@ -4325,10 +4325,10 @@
       // expression information.
       flowAnalysis.forwardExpression(resultExpression, node);
     } else {
-      resultExpression = node;
+      resultExpression = node..expressionVariable = variable.astVariable;
     }
 
-    bool isUnassigned = !flowAnalysis.isAssigned(variable);
+    bool isUnassigned = !flowAnalysis.isAssigned(variable.astVariable);
     if (isUnassigned) {
       dataForTesting
           // Coverage-ignore(suite): Not run.
@@ -4336,7 +4336,9 @@
           .potentiallyUnassignedNodes // Coverage-ignore(suite): Not run.
           .add(node);
     }
-    bool isDefinitelyUnassigned = flowAnalysis.isUnassigned(variable);
+    bool isDefinitelyUnassigned = flowAnalysis.isUnassigned(
+      variable.astVariable,
+    );
     if (isDefinitelyUnassigned) {
       dataForTesting
           // Coverage-ignore(suite): Not run.
@@ -4346,12 +4348,12 @@
     }
     // Synthetic variables, local functions, and variables with
     // invalid types aren't checked.
-    if (variable.name != null &&
+    if (variable.cosmeticName != null &&
         !variable.isLocalFunction &&
         declaredOrInferredType is! InvalidType) {
       if (variable.isLate || variable.lateGetter != null) {
         if (isDefinitelyUnassigned) {
-          String name = variable.lateName ?? variable.name!;
+          String name = variable.lateName ?? variable.cosmeticName!;
           return new ExpressionInferenceResult(
             resultType,
             problemReporting.wrapInProblem(
@@ -4387,11 +4389,11 @@
                 compilerContext: compilerContext,
                 expression: resultExpression,
                 message: codeNonNullableNotAssignedError.withArgumentsOld(
-                  node.variable.name!,
+                  node.expressionVariable.cosmeticName!,
                 ),
                 fileUri: fileUri,
                 fileOffset: node.fileOffset,
-                length: node.variable.name!.length,
+                length: node.expressionVariable.cosmeticName!.length,
               ),
             );
           }
@@ -4405,10 +4407,10 @@
   /// Computes the possible promoted variable type of [variable] and the type
   /// context for the value expression in a local set to [variable].
   (DartType variableType, DartType writeContext)
-  computeVariableSetTypeAndWriteContext(VariableDeclarationImpl variable) {
+  computeVariableSetTypeAndWriteContext(InternalExpressionVariable variable) {
     DartType declaredOrInferredType = variable.lateType ?? variable.type;
     DartType? promotedType = flowAnalysis
-        .promotedType(variable)
+        .promotedType(variable.astVariable)
         ?.unwrapTypeView();
     return (declaredOrInferredType, promotedType ?? declaredOrInferredType);
   }
@@ -4419,15 +4421,17 @@
   /// If [node] is provided, it is used as the basis for the resulting
   /// expression, otherwise a new [VariableSet] is created.
   ExpressionInferenceResult inferVariableSet({
-    required VariableDeclarationImpl variable,
+    required InternalExpressionVariable variable,
     required DartType variableType,
     required ExpressionInferenceResult rhsResult,
     required int assignOffset,
     required int nameOffset,
     VariableSet? node,
   }) {
-    bool isDefinitelyAssigned = flowAnalysis.isAssigned(variable);
-    bool isDefinitelyUnassigned = flowAnalysis.isUnassigned(variable);
+    bool isDefinitelyAssigned = flowAnalysis.isAssigned(variable.astVariable);
+    bool isDefinitelyUnassigned = flowAnalysis.isUnassigned(
+      variable.astVariable,
+    );
     rhsResult = ensureAssignableResult(
       variableType,
       rhsResult,
@@ -4435,10 +4439,11 @@
       isVoidAllowed: variableType is VoidType,
     );
     Expression rhs = rhsResult.expression;
-    node ??= new VariableSet(variable, rhs)..fileOffset = nameOffset;
+    node ??= new VariableSet(variable.astVariable, rhs)
+      ..fileOffset = nameOffset;
     flowAnalysis.write(
       node,
-      variable,
+      variable.astVariable,
       new SharedTypeView(rhsResult.inferredType),
       rhsResult.expression,
     );
@@ -4456,11 +4461,11 @@
       flowAnalysis.forwardExpression(resultExpression, node);
     } else {
       node.value = rhs..parent = node;
-      resultExpression = node;
+      resultExpression = node..expressionVariable = variable.astVariable;
     }
     // Synthetic variables, local functions, and variables with
     // invalid types aren't checked.
-    if (variable.name != null &&
+    if (variable.cosmeticName != null &&
         !variable.isLocalFunction &&
         variableType is! InvalidType) {
       if ((variable.isLate && variable.isFinal) ||
@@ -4882,7 +4887,7 @@
       }
     }
     if (expression is VariableGet) {
-      VariableDeclaration variable = expression.variable;
+      ExpressionVariable variable = expression.expressionVariable;
       if (variable is VariableDeclarationImpl && variable.isLocalFunction) {
         return codeInvalidCastLocalFunction;
       }
@@ -5607,7 +5612,7 @@
         NonPromotionReasonVisitor<
           List<LocatedMessage>,
           Node,
-          VariableDeclaration
+          ExpressionVariable
         > {
   final InferenceVisitorBase inferrer;
 
@@ -5617,7 +5622,7 @@
 
   @override
   List<LocatedMessage> visitDemoteViaExplicitWrite(
-    DemoteViaExplicitWrite<VariableDeclaration> reason,
+    DemoteViaExplicitWrite<ExpressionVariable> reason,
   ) {
     TreeNode node = reason.node as TreeNode;
     if (inferrer.dataForTesting != null) {
@@ -5631,7 +5636,10 @@
     int offset = node.fileOffset;
     return [
       codeVariableCouldBeNullDueToWrite
-          .withArgumentsOld(reason.variable.name!, reason.documentationLink.url)
+          .withArgumentsOld(
+            reason.variable.cosmeticName!,
+            reason.documentationLink.url,
+          )
           .withLocation(inferrer.fileUri, offset, noLength),
     ];
   }
diff --git a/pkg/front_end/lib/src/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/type_inference/type_constraint_gatherer.dart
index 03aab42..25f6e3d 100644
--- a/pkg/front_end/lib/src/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/type_inference/type_constraint_gatherer.dart
@@ -21,14 +21,14 @@
 class TypeConstraintGatherer
     extends
         shared.TypeConstraintGenerator<
-          VariableDeclaration,
+          ExpressionVariable,
           TypeDeclarationType,
           TypeDeclaration,
           TreeNode
         >
     with
         shared.TypeConstraintGeneratorMixin<
-          VariableDeclaration,
+          ExpressionVariable,
           TypeDeclarationType,
           TypeDeclaration,
           TreeNode
diff --git a/pkg/front_end/lib/src/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/type_inference/type_inference_engine.dart
index 20f5e90..27dc48e 100644
--- a/pkg/front_end/lib/src/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/type_inference/type_inference_engine.dart
@@ -374,14 +374,13 @@
     required ExtensionScope extensionScope,
     InferenceDataForTesting? dataForTesting,
   }) {
-    AssignedVariables<TreeNode, VariableDeclaration> assignedVariables;
+    AssignedVariables<TreeNode, ExpressionVariable> assignedVariables;
     if (dataForTesting != null) {
       // Coverage-ignore-block(suite): Not run.
       assignedVariables = dataForTesting.flowAnalysisResult.assignedVariables =
-          new AssignedVariablesForTesting<TreeNode, VariableDeclaration>();
+          new AssignedVariablesForTesting<TreeNode, ExpressionVariable>();
     } else {
-      assignedVariables =
-          new AssignedVariables<TreeNode, VariableDeclaration>();
+      assignedVariables = new AssignedVariables<TreeNode, ExpressionVariable>();
     }
     if (benchmarker == null) {
       return new TypeInferrerImpl(
@@ -438,7 +437,7 @@
   final List<TreeNode> definitelyUnassignedNodes = [];
 
   /// The assigned variables information that computed for the member.
-  AssignedVariablesForTesting<TreeNode, VariableDeclaration>? assignedVariables;
+  AssignedVariablesForTesting<TreeNode, ExpressionVariable>? assignedVariables;
 
   /// For each expression that led to an error because it was not promoted, a
   /// string describing the reason it was not promoted.
@@ -453,14 +452,14 @@
 class OperationsCfe
     with
         TypeAnalyzerOperationsMixin<
-          VariableDeclaration,
+          ExpressionVariable,
           TypeDeclarationType,
           TypeDeclaration,
           TreeNode
         >
     implements
         TypeAnalyzerOperations<
-          VariableDeclaration,
+          ExpressionVariable,
           TypeDeclarationType,
           TypeDeclaration,
           TreeNode
@@ -582,7 +581,7 @@
   bool isExtensionTypeInternal(DartType type) => type is ExtensionType;
 
   @override
-  bool isFinal(VariableDeclaration variable) {
+  bool isFinal(ExpressionVariable variable) {
     return variable.isFinal;
   }
 
@@ -670,11 +669,14 @@
   }
 
   @override
-  SharedTypeView variableType(covariant VariableDeclarationImpl variable) {
+  SharedTypeView variableType(ExpressionVariable variable) {
     // When late variables get lowered, their type is changed, but the
     // original type is stored in `VariableDeclarationImpl.lateType`, so we
     // use that if it exists.
-    return new SharedTypeView(variable.lateType ?? variable.type);
+    DartType? lateType = variable is InternalExpressionVariable
+        ? (variable as InternalExpressionVariable).lateType
+        : null;
+    return new SharedTypeView(lateType ?? variable.type);
   }
 
   @override
@@ -756,7 +758,7 @@
   }
 
   @override
-  bool isVariableFinal(VariableDeclaration node) {
+  bool isVariableFinal(ExpressionVariable node) {
     return node.isFinal;
   }
 
@@ -1076,7 +1078,7 @@
 
   @override
   TypeConstraintGenerator<
-    VariableDeclaration,
+    ExpressionVariable,
     TypeDeclarationType,
     TypeDeclaration,
     TreeNode
@@ -1165,7 +1167,7 @@
 class TypeInferenceResultForTesting
     extends
         shared.TypeConstraintGenerationDataForTesting<
-          VariableDeclaration,
+          ExpressionVariable,
           TreeNode
         > {
   final Map<TreeNode, List<DartType>> inferredTypeArguments = {};
diff --git a/pkg/front_end/lib/src/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/type_inference/type_inferrer.dart
index 988a265..28c1bac 100644
--- a/pkg/front_end/lib/src/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/type_inference/type_inferrer.dart
@@ -41,12 +41,12 @@
     TreeNode,
     Statement,
     Expression,
-    VariableDeclaration,
+    ExpressionVariable,
     SharedTypeView
   >
   get flowAnalysis;
 
-  AssignedVariables<TreeNode, VariableDeclaration> get assignedVariables;
+  AssignedVariables<TreeNode, ExpressionVariable> get assignedVariables;
 
   /// Performs full type inference on the given field initializer.
   ExpressionInferenceResult inferFieldInitializer({
@@ -116,7 +116,7 @@
     TreeNode,
     Statement,
     Expression,
-    VariableDeclaration,
+    ExpressionVariable,
     SharedTypeView
   >
   flowAnalysis = new FlowAnalysis(
@@ -126,7 +126,7 @@
   );
 
   @override
-  final AssignedVariables<TreeNode, VariableDeclaration> assignedVariables;
+  final AssignedVariables<TreeNode, ExpressionVariable> assignedVariables;
 
   final InferenceDataForTesting? dataForTesting;
 
@@ -393,7 +393,7 @@
     InterfaceType? thisType,
     SourceLibraryBuilder libraryBuilder,
     this.extensionScope,
-    AssignedVariables<TreeNode, VariableDeclaration> assignedVariables,
+    AssignedVariables<TreeNode, ExpressionVariable> assignedVariables,
     InferenceDataForTesting? dataForTesting,
     this.benchmarker,
   ) : impl = new TypeInferrerImpl(
@@ -406,7 +406,7 @@
       );
 
   @override
-  AssignedVariables<TreeNode, VariableDeclaration> get assignedVariables =>
+  AssignedVariables<TreeNode, ExpressionVariable> get assignedVariables =>
       impl.assignedVariables;
 
   @override
@@ -414,7 +414,7 @@
     TreeNode,
     Statement,
     Expression,
-    VariableDeclaration,
+    ExpressionVariable,
     SharedTypeView
   >
   get flowAnalysis => impl.flowAnalysis;
diff --git a/pkg/front_end/lib/src/type_inference/type_schema_environment.dart b/pkg/front_end/lib/src/type_inference/type_schema_environment.dart
index fb64e0f..44771a6 100644
--- a/pkg/front_end/lib/src/type_inference/type_schema_environment.dart
+++ b/pkg/front_end/lib/src/type_inference/type_schema_environment.dart
@@ -21,11 +21,11 @@
 import 'type_schema.dart' show UnknownType;
 
 typedef GeneratedTypeConstraint =
-    shared.GeneratedTypeConstraint<VariableDeclaration>;
+    shared.GeneratedTypeConstraint<ExpressionVariable>;
 
 typedef MergedTypeConstraint =
     shared.MergedTypeConstraint<
-      VariableDeclaration,
+      ExpressionVariable,
       TypeDeclarationType,
       TypeDeclaration,
       TreeNode
@@ -33,7 +33,7 @@
 
 typedef UnknownTypeConstraintOrigin =
     shared.UnknownTypeConstraintOrigin<
-      VariableDeclaration,
+      ExpressionVariable,
       TypeDeclarationType,
       TypeDeclaration,
       TreeNode
diff --git a/pkg/front_end/lib/src/util/abstracted_ast_nodes.dart b/pkg/front_end/lib/src/util/abstracted_ast_nodes.dart
index cd5cb15..8411ca9 100644
--- a/pkg/front_end/lib/src/util/abstracted_ast_nodes.dart
+++ b/pkg/front_end/lib/src/util/abstracted_ast_nodes.dart
@@ -235,21 +235,16 @@
   }
 }
 
-class ClassConstructor extends AstNode {
+class Constructor extends AstNode {
   @override
-  final ClassConstructorEnd node;
+  final ConstructorEnd node;
   final String name;
   @override
   final Token startInclusive;
   @override
   final Token endInclusive;
 
-  ClassConstructor(
-    this.node,
-    this.name,
-    this.startInclusive,
-    this.endInclusive,
-  );
+  Constructor(this.node, this.name, this.startInclusive, this.endInclusive);
 
   @override
   StringBuffer toStringInternal(StringBuffer sb, int indent) {
@@ -258,7 +253,7 @@
     if (marked != Coloring.Untouched) {
       sb.write("(marked) ");
     }
-    sb.writeln("Class constructor $name");
+    sb.writeln("Constructor $name");
     return sb;
   }
 
@@ -272,21 +267,16 @@
   }
 }
 
-class ClassFactoryMethod extends AstNode {
+class Factory extends AstNode {
   @override
-  final ClassFactoryMethodEnd node;
+  final FactoryEnd node;
   final String name;
   @override
   final Token startInclusive;
   @override
   final Token endInclusive;
 
-  ClassFactoryMethod(
-    this.node,
-    this.name,
-    this.startInclusive,
-    this.endInclusive,
-  );
+  Factory(this.node, this.name, this.startInclusive, this.endInclusive);
 
   @override
   StringBuffer toStringInternal(StringBuffer sb, int indent) {
@@ -295,7 +285,7 @@
     if (marked != Coloring.Untouched) {
       sb.write("(marked) ");
     }
-    sb.writeln("Class factory constructor $name");
+    sb.writeln("Factory $name");
     return sb;
   }
 
@@ -309,16 +299,16 @@
   }
 }
 
-class ClassMethod extends AstNode {
+class Method extends AstNode {
   @override
-  final ClassMethodEnd node;
+  final MethodEnd node;
   final String name;
   @override
   final Token startInclusive;
   @override
   final Token endInclusive;
 
-  ClassMethod(this.node, this.name, this.startInclusive, this.endInclusive);
+  Method(this.node, this.name, this.startInclusive, this.endInclusive);
 
   @override
   StringBuffer toStringInternal(StringBuffer sb, int indent) {
@@ -340,68 +330,6 @@
   }
 }
 
-class ExtensionMethod extends AstNode {
-  @override
-  final ExtensionMethodEnd node;
-  final String name;
-  @override
-  final Token startInclusive;
-  @override
-  final Token endInclusive;
-
-  ExtensionMethod(this.node, this.name, this.startInclusive, this.endInclusive);
-
-  @override
-  StringBuffer toStringInternal(StringBuffer sb, int indent) {
-    String stringIndent = " " * (indent * 2);
-    sb.write(stringIndent);
-    if (marked != Coloring.Untouched) {
-      sb.write("(marked) ");
-    }
-    sb.writeln("Extension method $name");
-    return sb;
-  }
-
-  @override
-  void buildScope() {}
-
-  @override
-  Map<String, AstNode> selfScope() {
-    return {name: this};
-  }
-}
-
-class MixinMethod extends AstNode {
-  @override
-  final MixinMethodEnd node;
-  final String name;
-  @override
-  final Token startInclusive;
-  @override
-  final Token endInclusive;
-
-  MixinMethod(this.node, this.name, this.startInclusive, this.endInclusive);
-
-  @override
-  StringBuffer toStringInternal(StringBuffer sb, int indent) {
-    String stringIndent = " " * (indent * 2);
-    sb.write(stringIndent);
-    if (marked != Coloring.Untouched) {
-      sb.write("(marked) ");
-    }
-    sb.writeln("Mixin method $name");
-    return sb;
-  }
-
-  @override
-  void buildScope() {}
-
-  @override
-  Map<String, AstNode> selfScope() {
-    return {name: this};
-  }
-}
-
 class Enum extends AstNode {
   @override
   final EnumDeclarationEnd node;
@@ -661,16 +589,16 @@
   }
 }
 
-class ClassFields extends AstNode {
+class Fields extends AstNode {
   @override
-  final ClassFieldsEnd node;
+  final FieldsEnd node;
   final List<String> names;
   @override
   final Token startInclusive;
   @override
   final Token endInclusive;
 
-  ClassFields(this.node, this.names, this.startInclusive, this.endInclusive);
+  Fields(this.node, this.names, this.startInclusive, this.endInclusive);
 
   @override
   StringBuffer toStringInternal(StringBuffer sb, int indent) {
@@ -679,82 +607,7 @@
     if (marked != Coloring.Untouched) {
       sb.write("(marked) ");
     }
-    sb.writeln("Class field(s) ${names.join(", ")}");
-    return sb;
-  }
-
-  @override
-  void buildScope() {}
-
-  @override
-  Map<String, AstNode> selfScope() {
-    Map<String, AstNode> scope = {};
-    for (String name in names) {
-      scope[name] = this;
-    }
-    return scope;
-  }
-}
-
-class MixinFields extends AstNode {
-  @override
-  final MixinFieldsEnd node;
-  final List<String> names;
-  @override
-  final Token startInclusive;
-  @override
-  final Token endInclusive;
-
-  MixinFields(this.node, this.names, this.startInclusive, this.endInclusive);
-
-  @override
-  StringBuffer toStringInternal(StringBuffer sb, int indent) {
-    String stringIndent = " " * (indent * 2);
-    sb.write(stringIndent);
-    if (marked != Coloring.Untouched) {
-      sb.write("(marked) ");
-    }
-    sb.writeln("Mixin field(s) ${names.join(", ")}");
-    return sb;
-  }
-
-  @override
-  void buildScope() {}
-
-  @override
-  Map<String, AstNode> selfScope() {
-    Map<String, AstNode> scope = {};
-    for (String name in names) {
-      scope[name] = this;
-    }
-    return scope;
-  }
-}
-
-class ExtensionFields extends AstNode {
-  @override
-  final ExtensionFieldsEnd node;
-  final List<String> names;
-  @override
-  final Token startInclusive;
-  @override
-  final Token endInclusive;
-
-  ExtensionFields(
-    this.node,
-    this.names,
-    this.startInclusive,
-    this.endInclusive,
-  );
-
-  @override
-  StringBuffer toStringInternal(StringBuffer sb, int indent) {
-    String stringIndent = " " * (indent * 2);
-    sb.write(stringIndent);
-    if (marked != Coloring.Untouched) {
-      sb.write("(marked) ");
-    }
-    sb.writeln("Extension field(s) ${names.join(", ")}");
+    sb.writeln("Field(s) ${names.join(", ")}");
     return sb;
   }
 
diff --git a/pkg/front_end/lib/src/util/outline_extractor.dart b/pkg/front_end/lib/src/util/outline_extractor.dart
index 29f99ca..a35eedf 100644
--- a/pkg/front_end/lib/src/util/outline_extractor.dart
+++ b/pkg/front_end/lib/src/util/outline_extractor.dart
@@ -700,41 +700,41 @@
   }
 
   @override
-  void visitClassConstructorEnd(ClassConstructorEnd node) {
-    assert(currentContainer is Class);
+  void visitConstructorEnd(ConstructorEnd node) {
+    assert(currentContainer is! TopLevel);
     List<IdentifierHandle> ids = node.getIdentifiers();
     if (ids.length == 1) {
-      ClassConstructor classConstructor = new ClassConstructor(
+      Constructor constructor = new Constructor(
         node,
         ids.single.token.lexeme,
         node.beginToken,
         node.endToken,
       );
-      currentContainer.addChild(classConstructor, map);
+      currentContainer.addChild(constructor, map);
       log("Hello from constructor ${ids.single.token}");
     } else if (ids.length == 2) {
-      ClassConstructor classConstructor = new ClassConstructor(
+      Constructor constructor = new Constructor(
         node,
         "${ids.first.token}.${ids.last.token}",
         node.beginToken,
         node.endToken,
       );
-      map[node] = classConstructor;
-      currentContainer.addChild(classConstructor, map);
+      map[node] = constructor;
+      currentContainer.addChild(constructor, map);
       log("Hello from constructor ${ids.first.token}.${ids.last.token}");
     } else {
       throw "Unexpected identifiers in class constructor";
     }
 
-    super.visitClassConstructorEnd(node);
+    super.visitConstructorEnd(node);
   }
 
   @override
-  void visitClassFactoryMethodEnd(ClassFactoryMethodEnd node) {
+  void visitFactoryEnd(FactoryEnd node) {
     assert(currentContainer is Class);
     List<IdentifierHandle> ids = node.getIdentifiers();
     if (ids.length == 1) {
-      ClassFactoryMethod classFactoryMethod = new ClassFactoryMethod(
+      Factory classFactoryMethod = new Factory(
         node,
         ids.single.token.lexeme,
         node.beginToken,
@@ -743,7 +743,7 @@
       currentContainer.addChild(classFactoryMethod, map);
       log("Hello from factory method ${ids.single.token}");
     } else if (ids.length == 2) {
-      ClassFactoryMethod classFactoryMethod = new ClassFactoryMethod(
+      Factory classFactoryMethod = new Factory(
         node,
         "${ids.first.token}.${ids.last.token}",
         node.beginToken,
@@ -762,41 +762,41 @@
       );
     }
 
-    super.visitClassFactoryMethodEnd(node);
+    super.visitFactoryEnd(node);
   }
 
   @override
-  void visitClassFieldsEnd(ClassFieldsEnd node) {
-    assert(currentContainer is Class);
+  void visitFieldsEnd(FieldsEnd node) {
+    assert(currentContainer is! TopLevel);
     List<String> fields = node
         .getFieldIdentifiers()
         .map((e) => e.token.lexeme)
         .toList();
-    ClassFields classFields = new ClassFields(
+    Fields classFields = new Fields(
       node,
       fields,
       node.beginToken,
       node.endToken,
     );
     currentContainer.addChild(classFields, map);
-    log("Hello from class fields ${fields.join(", ")}");
-    super.visitClassFieldsEnd(node);
+    log("Hello from fields ${fields.join(", ")}");
+    super.visitFieldsEnd(node);
   }
 
   @override
-  void visitClassMethodEnd(ClassMethodEnd node) {
-    assert(currentContainer is Class);
+  void visitMethodEnd(MethodEnd node) {
+    assert(currentContainer is! TopLevel);
 
     String identifier = node.getNameIdentifier();
-    ClassMethod classMethod = new ClassMethod(
+    Method classMethod = new Method(
       node,
       identifier,
       node.beginToken,
       node.endToken,
     );
     currentContainer.addChild(classMethod, map);
-    log("Hello from class method $identifier");
-    super.visitClassMethodEnd(node);
+    log("Hello from method $identifier");
+    super.visitMethodEnd(node);
   }
 
   @override
@@ -867,50 +867,6 @@
     currentContainer = previousContainer;
   }
 
-  @override
-  void visitExtensionConstructorEnd(ExtensionConstructorEnd node) {
-    // TODO: implement visitExtensionConstructorEnd
-    throw node;
-  }
-
-  @override
-  void visitExtensionFactoryMethodEnd(ExtensionFactoryMethodEnd node) {
-    // TODO: implement visitExtensionFactoryMethodEnd
-    throw node;
-  }
-
-  @override
-  void visitExtensionFieldsEnd(ExtensionFieldsEnd node) {
-    assert(currentContainer is Extension);
-    List<String> fields = node
-        .getFieldIdentifiers()
-        .map((e) => e.token.lexeme)
-        .toList();
-    ExtensionFields classFields = new ExtensionFields(
-      node,
-      fields,
-      node.beginToken,
-      node.endToken,
-    );
-    currentContainer.addChild(classFields, map);
-    log("Hello from extension fields ${fields.join(", ")}");
-    super.visitExtensionFieldsEnd(node);
-  }
-
-  @override
-  void visitExtensionMethodEnd(ExtensionMethodEnd node) {
-    assert(currentContainer is Extension);
-    ExtensionMethod extensionMethod = new ExtensionMethod(
-      node,
-      node.getNameIdentifier(),
-      node.beginToken,
-      node.endToken,
-    );
-    currentContainer.addChild(extensionMethod, map);
-    log("Hello from extension method ${node.getNameIdentifier()}");
-    super.visitExtensionMethodEnd(node);
-  }
-
   void debugDumpSource(
     Token startInclusive,
     Token endInclusive,
@@ -1001,38 +957,6 @@
   }
 
   @override
-  void visitMixinFieldsEnd(MixinFieldsEnd node) {
-    assert(currentContainer is Mixin);
-    List<String> fields = node
-        .getFieldIdentifiers()
-        .map((e) => e.token.lexeme)
-        .toList();
-    MixinFields mixinFields = new MixinFields(
-      node,
-      fields,
-      node.beginToken,
-      node.endToken,
-    );
-    currentContainer.addChild(mixinFields, map);
-    log("Hello from mixin fields ${fields.join(", ")}");
-    super.visitMixinFieldsEnd(node);
-  }
-
-  @override
-  void visitMixinMethodEnd(MixinMethodEnd node) {
-    assert(currentContainer is Mixin);
-    MixinMethod classMethod = new MixinMethod(
-      node,
-      node.getNameIdentifier(),
-      node.beginParam,
-      node.endToken,
-    );
-    currentContainer.addChild(classMethod, map);
-    log("Hello from mixin method ${node.getNameIdentifier()}");
-    super.visitMixinMethodEnd(node);
-  }
-
-  @override
   void visitNamedMixinApplicationEnd(NamedMixinApplicationEnd node) {
     TopLevelDeclarationEnd parent = node.parent! as TopLevelDeclarationEnd;
     IdentifierHandle identifier = parent.getIdentifier();
diff --git a/pkg/front_end/lib/src/util/parser_ast.dart b/pkg/front_end/lib/src/util/parser_ast.dart
index f1715e8..10ed15a 100644
--- a/pkg/front_end/lib/src/util/parser_ast.dart
+++ b/pkg/front_end/lib/src/util/parser_ast.dart
@@ -176,24 +176,9 @@
       visitTopLevelMethod(method, method.beginToken, method.endToken);
       return;
     }
-    if (node is ClassMethodEnd) {
-      ClassMethodEnd method = node;
-      visitClassMethod(method, method.beginToken, method.endToken);
-      return;
-    }
-    if (node is ExtensionMethodEnd) {
-      ExtensionMethodEnd method = node;
-      visitExtensionMethod(method, method.beginToken, method.endToken);
-      return;
-    }
-    if (node is ExtensionTypeMethodEnd) {
-      ExtensionTypeMethodEnd method = node;
-      visitExtensionTypeMethod(method, method.beginToken, method.endToken);
-      return;
-    }
-    if (node is MixinMethodEnd) {
-      MixinMethodEnd method = node;
-      visitMixinMethod(method, method.beginToken, method.endToken);
+    if (node is MethodEnd) {
+      MethodEnd method = node;
+      visitMethod(method, method.beginToken, method.endToken);
       return;
     }
     if (node is ImportEnd) {
@@ -213,32 +198,11 @@
       visitTopLevelFields(fields, fields.beginToken, fields.endToken);
       return;
     }
-    if (node is ClassFieldsEnd) {
+    if (node is FieldsEnd) {
       // TODO(jensj): Possibly this could go into more details too
       // (e.g. to split up a field declaration).
-      ClassFieldsEnd fields = node;
-      visitClassFields(fields, fields.beginToken, fields.endToken);
-      return;
-    }
-    if (node is ExtensionFieldsEnd) {
-      // TODO(jensj): Possibly this could go into more details too
-      // (e.g. to split up a field declaration).
-      ExtensionFieldsEnd fields = node;
-      visitExtensionFields(fields, fields.beginToken, fields.endToken);
-      return;
-    }
-    if (node is ExtensionTypeFieldsEnd) {
-      // TODO(jensj): Possibly this could go into more details too
-      // (e.g. to split up a field declaration).
-      ExtensionTypeFieldsEnd fields = node;
-      visitExtensionTypeFields(fields, fields.beginToken, fields.endToken);
-      return;
-    }
-    if (node is MixinFieldsEnd) {
-      // TODO(jensj): Possibly this could go into more details too
-      // (e.g. to split up a field declaration).
-      MixinFieldsEnd fields = node;
-      visitMixinFields(fields, fields.beginToken, fields.endToken);
+      FieldsEnd fields = node;
+      visitFields(fields, fields.beginToken, fields.endToken);
       return;
     }
     if (node is NamedMixinApplicationEnd) {
@@ -285,34 +249,14 @@
       visitExtensionTypeDeclaration(ext, ext.extensionKeyword, ext.endToken);
       return;
     }
-    if (node is ClassConstructorEnd) {
-      ClassConstructorEnd decl = node;
-      visitClassConstructor(decl, decl.beginToken, decl.endToken);
+    if (node is ConstructorEnd) {
+      ConstructorEnd decl = node;
+      visitConstructor(decl, decl.beginToken, decl.endToken);
       return;
     }
-    if (node is ExtensionConstructorEnd) {
-      ExtensionConstructorEnd decl = node;
-      visitExtensionConstructor(decl, decl.beginToken, decl.endToken);
-      return;
-    }
-    if (node is ExtensionTypeConstructorEnd) {
-      ExtensionTypeConstructorEnd decl = node;
-      visitExtensionTypeConstructor(decl, decl.beginToken, decl.endToken);
-      return;
-    }
-    if (node is ClassFactoryMethodEnd) {
-      ClassFactoryMethodEnd decl = node;
-      visitClassFactoryMethod(decl, decl.beginToken, decl.endToken);
-      return;
-    }
-    if (node is ExtensionFactoryMethodEnd) {
-      ExtensionFactoryMethodEnd decl = node;
-      visitExtensionFactoryMethod(decl, decl.beginToken, decl.endToken);
-      return;
-    }
-    if (node is ExtensionTypeFactoryMethodEnd) {
-      ExtensionTypeFactoryMethodEnd decl = node;
-      visitExtensionTypeFactoryMethod(decl, decl.beginToken, decl.endToken);
+    if (node is FactoryEnd) {
+      FactoryEnd decl = node;
+      visitFactory(decl, decl.beginToken, decl.endToken);
       return;
     }
     if (node is MetadataEnd) {
@@ -368,32 +312,7 @@
   ) {}
 
   /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitClassMethod(
-    ClassMethodEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionMethod(
-    ExtensionMethodEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionTypeMethod(
-    ExtensionTypeMethodEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitMixinMethod(
-    MixinMethodEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
+  void visitMethod(MethodEnd node, Token startInclusive, Token endInclusive) {}
 
   /// Note: Implementers are NOT expected to call visitChildren on this node.
   void visitTopLevelFields(
@@ -403,32 +322,7 @@
   ) {}
 
   /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitClassFields(
-    ClassFieldsEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionFields(
-    ExtensionFieldsEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionTypeFields(
-    ExtensionTypeFieldsEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitMixinFields(
-    MixinFieldsEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
+  void visitFields(FieldsEnd node, Token startInclusive, Token endInclusive) {}
 
   /// Note: Implementers can call visitChildren on this node.
   void visitNamedMixin(
@@ -487,43 +381,15 @@
   }
 
   /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitClassConstructor(
-    ClassConstructorEnd node,
+  void visitConstructor(
+    ConstructorEnd node,
     Token startInclusive,
     Token endInclusive,
   ) {}
 
   /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionConstructor(
-    ExtensionConstructorEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionTypeConstructor(
-    ExtensionTypeConstructorEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitClassFactoryMethod(
-    ClassFactoryMethodEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionFactoryMethod(
-    ExtensionFactoryMethodEnd node,
-    Token startInclusive,
-    Token endInclusive,
-  ) {}
-
-  /// Note: Implementers are NOT expected to call visitChildren on this node.
-  void visitExtensionTypeFactoryMethod(
-    ExtensionTypeFactoryMethodEnd node,
+  void visitFactory(
+    FactoryEnd node,
     Token startInclusive,
     Token endInclusive,
   ) {}
@@ -537,28 +403,12 @@
 }
 
 enum MemberContentType {
-  ClassConstructor,
-  ClassFactoryMethod,
-  ClassFields,
-  ClassMethod,
   ClassRecoverableError,
-  EnumConstructor,
-  EnumFactoryMethod,
-  EnumFields,
-  EnumMethod,
+  Constructor,
   ExperimentNotEnabled,
-  ExtensionConstructor,
-  ExtensionFactoryMethod,
-  ExtensionFields,
-  ExtensionMethod,
-  ExtensionTypeConstructor,
-  ExtensionTypeFactoryMethod,
-  ExtensionTypeFields,
-  ExtensionTypeMethod,
-  MixinConstructor,
-  MixinFactoryMethod,
-  MixinFields,
-  MixinMethod,
+  Factory,
+  Fields,
+  Method,
   Unknown,
 }
 
@@ -1167,13 +1017,23 @@
 
 extension ClassDeclarationExtension on ClassDeclarationEnd {
   // Coverage-ignore(suite): Not run.
-  ClassOrMixinOrExtensionBodyEnd getClassOrMixinOrExtensionBody() {
+  ClassOrMixinOrExtensionBodyEnd? getClassOrMixinOrExtensionBody() {
     for (ParserAstNode child in children!) {
       if (child is ClassOrMixinOrExtensionBodyEnd) {
         return child;
       }
     }
-    throw "Not found.";
+    return null;
+  }
+
+  // Coverage-ignore(suite): Not run.
+  NoClassBodyHandle? getNoClassBody() {
+    for (ParserAstNode child in children!) {
+      if (child is NoClassBodyHandle) {
+        return child;
+      }
+    }
+    return null;
   }
 
   // Coverage-ignore(suite): Not run.
@@ -1212,12 +1072,15 @@
 }
 
 // Coverage-ignore(suite): Not run.
-extension ClassOrMixinBodyExtension on ClassOrMixinOrExtensionBodyEnd {
+extension ClassOrMixinBodyExtension on ClassOrMixinOrExtensionBodyEnd? {
   List<MemberEnd> getMembers() {
     List<MemberEnd> members = [];
-    for (ParserAstNode child in children!) {
-      if (child is MemberEnd) {
-        members.add(child);
+    List<ParserAstNode>? children = this?.children;
+    if (children != null) {
+      for (ParserAstNode child in children) {
+        if (child is MemberEnd) {
+          members.add(child);
+        }
       }
     }
     return members;
@@ -1230,36 +1093,10 @@
   // here, but will then have to do more if's or a switch at the call site to
   // do anything useful with it, which might not be optimal.
   MemberContentType getMemberType() {
-    if (isClassConstructor()) return MemberContentType.ClassConstructor;
-    if (isClassFactoryMethod()) return MemberContentType.ClassFactoryMethod;
-    if (isClassFields()) return MemberContentType.ClassFields;
-    if (isClassMethod()) return MemberContentType.ClassMethod;
-
-    if (isMixinConstructor()) return MemberContentType.MixinConstructor;
-    if (isMixinFactoryMethod()) return MemberContentType.MixinFactoryMethod;
-    if (isMixinFields()) return MemberContentType.MixinFields;
-    if (isMixinMethod()) return MemberContentType.MixinMethod;
-
-    if (isExtensionConstructor()) return MemberContentType.ExtensionConstructor;
-    if (isExtensionFactoryMethod()) {
-      return MemberContentType.ExtensionFactoryMethod;
-    }
-    if (isExtensionFields()) return MemberContentType.ExtensionFields;
-    if (isExtensionMethod()) return MemberContentType.ExtensionMethod;
-
-    if (isExtensionTypeConstructor()) {
-      return MemberContentType.ExtensionTypeConstructor;
-    }
-    if (isExtensionTypeFactoryMethod()) {
-      return MemberContentType.ExtensionTypeFactoryMethod;
-    }
-    if (isExtensionTypeFields()) return MemberContentType.ExtensionTypeFields;
-    if (isExtensionTypeMethod()) return MemberContentType.ExtensionTypeMethod;
-
-    if (isEnumConstructor()) return MemberContentType.EnumConstructor;
-    if (isEnumFactoryMethod()) return MemberContentType.EnumFactoryMethod;
-    if (isEnumFields()) return MemberContentType.EnumFields;
-    if (isEnumMethod()) return MemberContentType.EnumMethod;
+    if (isConstructor()) return MemberContentType.Constructor;
+    if (isFactory()) return MemberContentType.Factory;
+    if (isFields()) return MemberContentType.Fields;
+    if (isMethod()) return MemberContentType.Method;
 
     if (isClassRecoverableError()) {
       return MemberContentType.ClassRecoverableError;
@@ -1269,99 +1106,51 @@
     return MemberContentType.Unknown;
   }
 
-  bool isClassConstructor() {
+  bool isConstructor() {
     ParserAstNode child = children![1];
-    if (child is ClassConstructorEnd) return true;
+    if (child is ConstructorEnd) return true;
     return false;
   }
 
-  ClassConstructorEnd getClassConstructor() {
+  ConstructorEnd getConstructor() {
     ParserAstNode child = children![1];
-    if (child is ClassConstructorEnd) return child;
+    if (child is ConstructorEnd) return child;
     throw "Not found";
   }
 
-  bool isClassFactoryMethod() {
+  bool isFactory() {
     ParserAstNode child = children![1];
-    if (child is ClassFactoryMethodEnd) return true;
+    if (child is FactoryEnd) return true;
     return false;
   }
 
-  ClassFactoryMethodEnd getClassFactoryMethod() {
+  FactoryEnd getFactory() {
     ParserAstNode child = children![1];
-    if (child is ClassFactoryMethodEnd) return child;
+    if (child is FactoryEnd) return child;
     throw "Not found";
   }
 
-  bool isClassFields() {
+  bool isFields() {
     ParserAstNode child = children![1];
-    if (child is ClassFieldsEnd) return true;
+    if (child is FieldsEnd) return true;
     return false;
   }
 
-  ClassFieldsEnd getClassFields() {
+  FieldsEnd getFields() {
     ParserAstNode child = children![1];
-    if (child is ClassFieldsEnd) return child;
+    if (child is FieldsEnd) return child;
     throw "Not found";
   }
 
-  bool isMixinFields() {
+  bool isMethod() {
     ParserAstNode child = children![1];
-    if (child is MixinFieldsEnd) return true;
+    if (child is MethodEnd) return true;
     return false;
   }
 
-  MixinFieldsEnd getMixinFields() {
+  MethodEnd getMethod() {
     ParserAstNode child = children![1];
-    if (child is MixinFieldsEnd) return child;
-    throw "Not found";
-  }
-
-  bool isMixinMethod() {
-    ParserAstNode child = children![1];
-    if (child is MixinMethodEnd) return true;
-    return false;
-  }
-
-  MixinMethodEnd getMixinMethod() {
-    ParserAstNode child = children![1];
-    if (child is MixinMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isMixinFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is MixinFactoryMethodEnd) return true;
-    return false;
-  }
-
-  MixinFactoryMethodEnd getMixinFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is MixinFactoryMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isMixinConstructor() {
-    ParserAstNode child = children![1];
-    if (child is MixinConstructorEnd) return true;
-    return false;
-  }
-
-  MixinConstructorEnd getMixinConstructor() {
-    ParserAstNode child = children![1];
-    if (child is MixinConstructorEnd) return child;
-    throw "Not found";
-  }
-
-  bool isClassMethod() {
-    ParserAstNode child = children![1];
-    if (child is ClassMethodEnd) return true;
-    return false;
-  }
-
-  ClassMethodEnd getClassMethod() {
-    ParserAstNode child = children![1];
-    if (child is ClassMethodEnd) return child;
+    if (child is MethodEnd) return child;
     throw "Not found";
   }
 
@@ -1377,245 +1166,21 @@
     return false;
   }
 
-  bool isExtensionMethod() {
+  bool isPrimaryConstructorBody() {
     ParserAstNode child = children![1];
-    if (child is ExtensionMethodEnd) return true;
+    if (child is PrimaryConstructorBodyEnd) return true;
     return false;
   }
 
-  ExtensionMethodEnd getExtensionMethod() {
+  PrimaryConstructorBodyEnd getPrimaryConstructorBody() {
     ParserAstNode child = children![1];
-    if (child is ExtensionMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionFields() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionFieldsEnd) return true;
-    return false;
-  }
-
-  ExtensionFieldsEnd getExtensionFields() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionFieldsEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionConstructor() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionConstructorEnd) return true;
-    return false;
-  }
-
-  ExtensionConstructorEnd getExtensionConstructor() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionConstructorEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionFactoryMethodEnd) return true;
-    return false;
-  }
-
-  ExtensionFactoryMethodEnd getExtensionFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionFactoryMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionTypeMethod() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeMethodEnd) return true;
-    return false;
-  }
-
-  ExtensionTypeMethodEnd getExtensionTypeMethod() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionTypeFields() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeFieldsEnd) return true;
-    return false;
-  }
-
-  ExtensionTypeFieldsEnd getExtensionTypeFields() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeFieldsEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionTypeConstructor() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeConstructorEnd) return true;
-    return false;
-  }
-
-  ExtensionTypeConstructorEnd getExtensionTypeConstructor() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeConstructorEnd) return child;
-    throw "Not found";
-  }
-
-  bool isExtensionTypeFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeFactoryMethodEnd) return true;
-    return false;
-  }
-
-  ExtensionTypeFactoryMethodEnd getExtensionTypeFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is ExtensionTypeFactoryMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isEnumMethod() {
-    ParserAstNode child = children![1];
-    if (child is EnumMethodEnd) return true;
-    return false;
-  }
-
-  EnumMethodEnd getEnumMethod() {
-    ParserAstNode child = children![1];
-    if (child is EnumMethodEnd) return child;
-    throw "Not found";
-  }
-
-  bool isEnumFields() {
-    ParserAstNode child = children![1];
-    if (child is EnumFieldsEnd) return true;
-    return false;
-  }
-
-  EnumFieldsEnd getEnumFields() {
-    ParserAstNode child = children![1];
-    if (child is EnumFieldsEnd) return child;
-    throw "Not found";
-  }
-
-  bool isEnumConstructor() {
-    ParserAstNode child = children![1];
-    if (child is EnumConstructorEnd) return true;
-    return false;
-  }
-
-  EnumConstructorEnd getEnumConstructor() {
-    ParserAstNode child = children![1];
-    if (child is EnumConstructorEnd) return child;
-    throw "Not found";
-  }
-
-  bool isEnumFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is EnumFactoryMethodEnd) return true;
-    return false;
-  }
-
-  EnumFactoryMethodEnd getEnumFactoryMethod() {
-    ParserAstNode child = children![1];
-    if (child is EnumFactoryMethodEnd) return child;
+    if (child is PrimaryConstructorBodyEnd) return child;
     throw "Not found";
   }
 }
 
 // Coverage-ignore(suite): Not run.
-extension MixinFieldsExtension on MixinFieldsEnd {
-  List<IdentifierHandle> getFieldIdentifiers() {
-    int countLeft = count;
-    List<IdentifierHandle>? identifiers;
-    for (int i = children!.length - 1; i >= 0; i--) {
-      ParserAstNode child = children![i];
-      if (child is IdentifierHandle &&
-          child.context == IdentifierContext.fieldDeclaration) {
-        countLeft--;
-        if (identifiers == null) {
-          identifiers = new List<IdentifierHandle>.filled(count, child);
-        } else {
-          identifiers[countLeft] = child;
-        }
-        if (countLeft == 0) break;
-      }
-    }
-    if (countLeft != 0) throw "Didn't find the expected number of identifiers";
-    return identifiers ?? [];
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionFieldsExtension on ExtensionFieldsEnd {
-  List<IdentifierHandle> getFieldIdentifiers() {
-    int countLeft = count;
-    List<IdentifierHandle>? identifiers;
-    for (int i = children!.length - 1; i >= 0; i--) {
-      ParserAstNode child = children![i];
-      if (child is IdentifierHandle &&
-          child.context == IdentifierContext.fieldDeclaration) {
-        countLeft--;
-        if (identifiers == null) {
-          identifiers = new List<IdentifierHandle>.filled(count, child);
-        } else {
-          identifiers[countLeft] = child;
-        }
-        if (countLeft == 0) break;
-      }
-    }
-    if (countLeft != 0) throw "Didn't find the expected number of identifiers";
-    return identifiers ?? [];
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionTypeFieldsExtension on ExtensionTypeFieldsEnd {
-  List<IdentifierHandle> getFieldIdentifiers() {
-    int countLeft = count;
-    List<IdentifierHandle>? identifiers;
-    for (int i = children!.length - 1; i >= 0; i--) {
-      ParserAstNode child = children![i];
-      if (child is IdentifierHandle &&
-          child.context == IdentifierContext.fieldDeclaration) {
-        countLeft--;
-        if (identifiers == null) {
-          identifiers = new List<IdentifierHandle>.filled(count, child);
-        } else {
-          identifiers[countLeft] = child;
-        }
-        if (countLeft == 0) break;
-      }
-    }
-    if (countLeft != 0) throw "Didn't find the expected number of identifiers";
-    return identifiers ?? [];
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension EnumFieldsExtension on EnumFieldsEnd {
-  List<IdentifierHandle> getFieldIdentifiers() {
-    int countLeft = count;
-    List<IdentifierHandle>? identifiers;
-    for (int i = children!.length - 1; i >= 0; i--) {
-      ParserAstNode child = children![i];
-      if (child is IdentifierHandle &&
-          child.context == IdentifierContext.fieldDeclaration) {
-        countLeft--;
-        if (identifiers == null) {
-          identifiers = new List<IdentifierHandle>.filled(count, child);
-        } else {
-          identifiers[countLeft] = child;
-        }
-        if (countLeft == 0) break;
-      }
-    }
-    if (countLeft != 0) throw "Didn't find the expected number of identifiers";
-    return identifiers ?? [];
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ClassFieldsExtension on ClassFieldsEnd {
+extension FieldsExtension on FieldsEnd {
   List<IdentifierHandle> getFieldIdentifiers() {
     int countLeft = count;
     List<IdentifierHandle>? identifiers;
@@ -1712,13 +1277,22 @@
     return begin.name;
   }
 
-  ClassOrMixinOrExtensionBodyEnd getClassOrMixinOrExtensionBody() {
+  ClassOrMixinOrExtensionBodyEnd? getClassOrMixinOrExtensionBody() {
     for (ParserAstNode child in children!) {
       if (child is ClassOrMixinOrExtensionBodyEnd) {
         return child;
       }
     }
-    throw "Not found.";
+    return null;
+  }
+
+  NoExtensionTypeBodyHandle? getNoExtensionTypeBody() {
+    for (ParserAstNode child in children!) {
+      if (child is NoExtensionTypeBodyHandle) {
+        return child;
+      }
+    }
+    return null;
   }
 }
 
@@ -1972,7 +1546,7 @@
       node is FunctionTypeEnd;
 }
 
-extension ClassMethodExtension on ClassMethodEnd {
+extension MethodExtension on MethodEnd {
   // Coverage-ignore(suite): Not run.
   BlockFunctionBodyEnd? getBlockFunctionBody() {
     for (ParserAstNode child in children!) {
@@ -2006,91 +1580,7 @@
 }
 
 // Coverage-ignore(suite): Not run.
-extension MixinMethodExtension on MixinMethodEnd {
-  Token getNameIdentifierToken() {
-    bool foundType = false;
-    for (ParserAstNode child in children!) {
-      if (_isTypeOrNoType(child)) {
-        foundType = true;
-      }
-      if (foundType && child is IdentifierHandle) {
-        return child.token;
-      } else if (foundType && child is OperatorNameHandle) {
-        return child.token;
-      }
-    }
-    throw "No identifier found: $children";
-  }
-
-  String getNameIdentifier() {
-    return getNameIdentifierToken().lexeme;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionMethodExtension on ExtensionMethodEnd {
-  Token getNameIdentifierToken() {
-    bool foundType = false;
-    for (ParserAstNode child in children!) {
-      if (_isTypeOrNoType(child)) {
-        foundType = true;
-      }
-      if (foundType && child is IdentifierHandle) {
-        return child.token;
-      } else if (foundType && child is OperatorNameHandle) {
-        return child.token;
-      }
-    }
-    throw "No identifier found: $children";
-  }
-
-  String getNameIdentifier() {
-    return getNameIdentifierToken().lexeme;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionTypeMethodExtension on ExtensionTypeMethodEnd {
-  Token getNameIdentifierToken() {
-    bool foundType = false;
-    for (ParserAstNode child in children!) {
-      if (_isTypeOrNoType(child)) {
-        foundType = true;
-      }
-      if (foundType && child is IdentifierHandle) {
-        return child.token;
-      } else if (foundType && child is OperatorNameHandle) {
-        return child.token;
-      }
-    }
-    throw "No identifier found: $children";
-  }
-
-  String getNameIdentifier() {
-    return getNameIdentifierToken().lexeme;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension EnumMethodExtension on EnumMethodEnd {
-  String getNameIdentifier() {
-    bool foundType = false;
-    for (ParserAstNode child in children!) {
-      if (_isTypeOrNoType(child)) {
-        foundType = true;
-      }
-      if (foundType && child is IdentifierHandle) {
-        return child.token.lexeme;
-      } else if (foundType && child is OperatorNameHandle) {
-        return child.token.lexeme;
-      }
-    }
-    throw "No identifier found: $children";
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ClassFactoryMethodExtension on ClassFactoryMethodEnd {
+extension FactoryExtension on FactoryEnd {
   List<IdentifierHandle> getIdentifiers() {
     List<IdentifierHandle> result = [];
     for (ParserAstNode child in children!) {
@@ -2105,67 +1595,7 @@
 }
 
 // Coverage-ignore(suite): Not run.
-extension MixinFactoryMethodExtension on MixinFactoryMethodEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      } else if (child is FormalParametersEnd) {
-        break;
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionFactoryMethodExtension on ExtensionFactoryMethodEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      } else if (child is FormalParametersEnd) {
-        break;
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionTypeFactoryMethodExtension on ExtensionTypeFactoryMethodEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      } else if (child is FormalParametersEnd) {
-        break;
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension EnumFactoryMethodExtension on EnumFactoryMethodEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      } else if (child is FormalParametersEnd) {
-        break;
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ClassConstructorExtension on ClassConstructorEnd {
+extension ConstructorExtension on ConstructorEnd {
   FormalParametersEnd getFormalParameters() {
     for (ParserAstNode child in children!) {
       if (child is FormalParametersEnd) {
@@ -2205,58 +1635,6 @@
 }
 
 // Coverage-ignore(suite): Not run.
-extension ExtensionConstructorExtension on ExtensionConstructorEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension ExtensionTypeConstructorExtension on ExtensionTypeConstructorEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension EnumConstructorExtension on EnumConstructorEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
-extension MixinConstructorExtension on MixinConstructorEnd {
-  List<IdentifierHandle> getIdentifiers() {
-    List<IdentifierHandle> result = [];
-    for (ParserAstNode child in children!) {
-      if (child is IdentifierHandle) {
-        result.add(child);
-      }
-    }
-    return result;
-  }
-}
-
-// Coverage-ignore(suite): Not run.
 extension FormalParametersExtension on FormalParametersEnd {
   List<FormalParameterEnd> getFormalParameters() {
     List<FormalParameterEnd> result = [];
@@ -2398,40 +1776,10 @@
           // beginExtensionDeclarationPrelude,
           // beginClassOrNamedMixinApplicationPrelude
           // beginTopLevelMember or beginUncategorizedTopLevelDeclaration.
-        } else if (begin == "Method" &&
-            (end == "ClassConstructor" ||
-                end == "ClassMethod" ||
-                end == "ExtensionConstructor" ||
-                end == "ExtensionMethod" ||
-                end == "ExtensionTypeConstructor" ||
-                end == "ExtensionTypeMethod" ||
-                end == "MixinConstructor" ||
-                end == "MixinMethod" ||
-                end == "EnumConstructor" ||
-                end == "EnumMethod")) {
-          // beginMethod is ended by one of endClassConstructor,
-          // endClassMethod, endExtensionMethod, endMixinConstructor,
-          // endMixinMethod, endEnumMethod or endEnumConstructor.
-        } else if (begin == "Fields" &&
-            (end == "TopLevelFields" ||
-                end == "ClassFields" ||
-                end == "MixinFields" ||
-                end == "ExtensionFields" ||
-                end == "ExtensionTypeFields" ||
-                end == "EnumFields")) {
-          // beginFields is ended by one of endTopLevelFields, endMixinFields,
-          // endEnumFields or endExtensionFields.
+        } else if (begin == "Fields" && end == "TopLevelFields") {
+          // beginFields is ended by one of endTopLevelFields or endFields.
         } else if (begin == "ForStatement" && end == "ForIn") {
           // beginForStatement is ended by either endForStatement or endForIn.
-        } else if (begin == "FactoryMethod" &&
-            (end == "ClassFactoryMethod" ||
-                end == "MixinFactoryMethod" ||
-                end == "ExtensionFactoryMethod" ||
-                end == "ExtensionTypeFactoryMethod" ||
-                end == "EnumFactoryMethod")) {
-          // beginFactoryMethod is ended by either endClassFactoryMethod,
-          // endMixinFactoryMethod, endExtensionFactoryMethod, or
-          // endEnumFactoryMethod.
         } else if (begin == "ForControlFlow" && (end == "ForInControlFlow")) {
           // beginForControlFlow is ended by either endForControlFlow or
           // endForInControlFlow.
diff --git a/pkg/front_end/lib/src/util/parser_ast_helper.dart b/pkg/front_end/lib/src/util/parser_ast_helper.dart
index c946ec2..b1b0abf 100644
--- a/pkg/front_end/lib/src/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/util/parser_ast_helper.dart
@@ -348,6 +348,24 @@
   }
 
   @override
+  void handleNoClassBody(Token semicolonToken) {
+    NoClassBodyHandle data = new NoClassBodyHandle(
+      ParserAstType.HANDLE,
+      semicolonToken: semicolonToken,
+    );
+    seen(data);
+  }
+
+  @override
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    NoExtensionTypeBodyHandle data = new NoExtensionTypeBodyHandle(
+      ParserAstType.HANDLE,
+      semicolonToken: semicolonToken,
+    );
+    seen(data);
+  }
+
+  @override
   void beginMixinDeclaration(
     Token beginToken,
     Token? augmentToken,
@@ -531,6 +549,30 @@
   }
 
   @override
+  void beginPrimaryConstructorBody(Token token) {
+    PrimaryConstructorBodyBegin data = new PrimaryConstructorBodyBegin(
+      ParserAstType.BEGIN,
+      token: token,
+    );
+    seen(data);
+  }
+
+  @override
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    PrimaryConstructorBodyEnd data = new PrimaryConstructorBodyEnd(
+      ParserAstType.END,
+      beginToken: beginToken,
+      beginInitializers: beginInitializers,
+      endToken: endToken,
+    );
+    seen(data);
+  }
+
+  @override
   void beginCombinators(Token token) {
     CombinatorsBegin data = new CombinatorsBegin(
       ParserAstType.BEGIN,
@@ -720,25 +762,6 @@
   }
 
   @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    EnumConstructorEnd data = new EnumConstructorEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
   void handleEnumElements(Token elementsEndToken, int elementsCount) {
     EnumElementsHandle data = new EnumElementsHandle(
       ParserAstType.HANDLE,
@@ -790,21 +813,6 @@
   }
 
   @override
-  void endEnumFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    EnumFactoryMethodEnd data = new EnumFactoryMethodEnd(
-      ParserAstType.END,
-      beginToken: beginToken,
-      factoryKeyword: factoryKeyword,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
   void beginExport(Token token) {
     ExportBegin data = new ExportBegin(ParserAstType.BEGIN, token: token);
     seen(data);
@@ -841,13 +849,13 @@
   }
 
   @override
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
     Token? constToken,
   ) {
-    FactoryMethodBegin data = new FactoryMethodBegin(
+    FactoryBegin data = new FactoryBegin(
       ParserAstType.BEGIN,
       declarationKind: declarationKind,
       lastConsumed: lastConsumed,
@@ -858,58 +866,15 @@
   }
 
   @override
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
   ) {
-    ClassFactoryMethodEnd data = new ClassFactoryMethodEnd(
+    FactoryEnd data = new FactoryEnd(
       ParserAstType.END,
-      beginToken: beginToken,
-      factoryKeyword: factoryKeyword,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    MixinFactoryMethodEnd data = new MixinFactoryMethodEnd(
-      ParserAstType.END,
-      beginToken: beginToken,
-      factoryKeyword: factoryKeyword,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    ExtensionFactoryMethodEnd data = new ExtensionFactoryMethodEnd(
-      ParserAstType.END,
-      beginToken: beginToken,
-      factoryKeyword: factoryKeyword,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionTypeFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    ExtensionTypeFactoryMethodEnd data = new ExtensionTypeFactoryMethodEnd(
-      ParserAstType.END,
+      kind: kind,
       beginToken: beginToken,
       factoryKeyword: factoryKeyword,
       endToken: endToken,
@@ -1001,7 +966,8 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -1013,8 +979,9 @@
     Token beginToken,
     Token endToken,
   ) {
-    ClassFieldsEnd data = new ClassFieldsEnd(
+    FieldsEnd data = new FieldsEnd(
       ParserAstType.END,
+      kind: kind,
       abstractToken: abstractToken,
       augmentToken: augmentToken,
       externalToken: externalToken,
@@ -1030,141 +997,6 @@
   }
 
   @override
-  void endMixinFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    MixinFieldsEnd data = new MixinFieldsEnd(
-      ParserAstType.END,
-      abstractToken: abstractToken,
-      augmentToken: augmentToken,
-      externalToken: externalToken,
-      staticToken: staticToken,
-      covariantToken: covariantToken,
-      lateToken: lateToken,
-      varFinalOrConst: varFinalOrConst,
-      count: count,
-      beginToken: beginToken,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    ExtensionFieldsEnd data = new ExtensionFieldsEnd(
-      ParserAstType.END,
-      abstractToken: abstractToken,
-      augmentToken: augmentToken,
-      externalToken: externalToken,
-      staticToken: staticToken,
-      covariantToken: covariantToken,
-      lateToken: lateToken,
-      varFinalOrConst: varFinalOrConst,
-      count: count,
-      beginToken: beginToken,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionTypeFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    ExtensionTypeFieldsEnd data = new ExtensionTypeFieldsEnd(
-      ParserAstType.END,
-      abstractToken: abstractToken,
-      augmentToken: augmentToken,
-      externalToken: externalToken,
-      staticToken: staticToken,
-      covariantToken: covariantToken,
-      lateToken: lateToken,
-      varFinalOrConst: varFinalOrConst,
-      count: count,
-      beginToken: beginToken,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    EnumFieldsEnd data = new EnumFieldsEnd(
-      ParserAstType.END,
-      abstractToken: abstractToken,
-      augmentToken: augmentToken,
-      externalToken: externalToken,
-      staticToken: staticToken,
-      covariantToken: covariantToken,
-      lateToken: lateToken,
-      varFinalOrConst: varFinalOrConst,
-      count: count,
-      beginToken: beginToken,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    EnumMethodEnd data = new EnumMethodEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
   void handleForInitializerEmptyStatement(Token token) {
     ForInitializerEmptyStatementHandle data =
         new ForInitializerEmptyStatementHandle(
@@ -2072,15 +1904,17 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    ClassMethodEnd data = new ClassMethodEnd(
+    MethodEnd data = new MethodEnd(
       ParserAstType.END,
+      kind: kind,
       getOrSet: getOrSet,
       beginToken: beginToken,
       beginParam: beginParam,
@@ -2091,131 +1925,48 @@
   }
 
   @override
-  void endMixinMethod(
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
     Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
   ) {
-    MixinMethodEnd data = new MixinMethodEnd(
-      ParserAstType.END,
+    ConstructorBegin data = new ConstructorBegin(
+      ParserAstType.BEGIN,
+      declarationKind: declarationKind,
+      augmentToken: augmentToken,
+      externalToken: externalToken,
+      staticToken: staticToken,
+      covariantToken: covariantToken,
+      varFinalOrConst: varFinalOrConst,
       getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
+      newToken: newToken,
+      name: name,
+      enclosingDeclarationName: enclosingDeclarationName,
     );
     seen(data);
   }
 
   @override
-  void endExtensionMethod(
-    Token? getOrSet,
+  void endConstructor(
+    DeclarationKind kind,
     Token beginToken,
+    Token? newToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
-    ExtensionMethodEnd data = new ExtensionMethodEnd(
+    ConstructorEnd data = new ConstructorEnd(
       ParserAstType.END,
-      getOrSet: getOrSet,
+      kind: kind,
       beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionTypeMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    ExtensionTypeMethodEnd data = new ExtensionTypeMethodEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endClassConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    ClassConstructorEnd data = new ClassConstructorEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endMixinConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    MixinConstructorEnd data = new MixinConstructorEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    ExtensionConstructorEnd data = new ExtensionConstructorEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
-      beginParam: beginParam,
-      beginInitializers: beginInitializers,
-      endToken: endToken,
-    );
-    seen(data);
-  }
-
-  @override
-  void endExtensionTypeConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    ExtensionTypeConstructorEnd data = new ExtensionTypeConstructorEnd(
-      ParserAstType.END,
-      getOrSet: getOrSet,
-      beginToken: beginToken,
+      newToken: newToken,
       beginParam: beginParam,
       beginInitializers: beginInitializers,
       endToken: endToken,
@@ -3634,6 +3385,16 @@
   }
 
   @override
+  void handleNoIdentifier(Token token, IdentifierContext identifierContext) {
+    NoIdentifierHandle data = new NoIdentifierHandle(
+      ParserAstType.HANDLE,
+      token: token,
+      identifierContext: identifierContext,
+    );
+    seen(data);
+  }
+
+  @override
   void handleNoTypeNameInConstructorReference(Token token) {
     NoTypeNameInConstructorReferenceHandle data =
         new NoTypeNameInConstructorReferenceHandle(
@@ -4725,6 +4486,36 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitClassDeclarationEnd(this);
 }
 
+class NoClassBodyHandle extends ParserAstNode {
+  final Token semicolonToken;
+
+  NoClassBodyHandle(ParserAstType type, {required this.semicolonToken})
+    : super("NoClassBody", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+    "semicolonToken": semicolonToken,
+  };
+
+  @override
+  R accept<R>(ParserAstVisitor<R> v) => v.visitNoClassBodyHandle(this);
+}
+
+class NoExtensionTypeBodyHandle extends ParserAstNode {
+  final Token semicolonToken;
+
+  NoExtensionTypeBodyHandle(ParserAstType type, {required this.semicolonToken})
+    : super("NoExtensionTypeBody", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+    "semicolonToken": semicolonToken,
+  };
+
+  @override
+  R accept<R>(ParserAstVisitor<R> v) => v.visitNoExtensionTypeBodyHandle(this);
+}
+
 class MixinDeclarationBegin extends ParserAstNode {
   final Token beginToken;
   final Token? augmentToken;
@@ -5025,6 +4816,46 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitNoPrimaryConstructorHandle(this);
 }
 
+class PrimaryConstructorBodyBegin extends ParserAstNode {
+  final Token token;
+
+  PrimaryConstructorBodyBegin(ParserAstType type, {required this.token})
+    : super("PrimaryConstructorBody", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {"token": token};
+
+  @override
+  R accept<R>(ParserAstVisitor<R> v) =>
+      v.visitPrimaryConstructorBodyBegin(this);
+}
+
+class PrimaryConstructorBodyEnd extends ParserAstNode
+    implements BeginAndEndTokenParserAstNode {
+  @override
+  final Token beginToken;
+  final Token? beginInitializers;
+  @override
+  final Token endToken;
+
+  PrimaryConstructorBodyEnd(
+    ParserAstType type, {
+    required this.beginToken,
+    this.beginInitializers,
+    required this.endToken,
+  }) : super("PrimaryConstructorBody", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+    "beginToken": beginToken,
+    "beginInitializers": beginInitializers,
+    "endToken": endToken,
+  };
+
+  @override
+  R accept<R>(ParserAstVisitor<R> v) => v.visitPrimaryConstructorBodyEnd(this);
+}
+
 class CombinatorsBegin extends ParserAstNode {
   final Token token;
 
@@ -5319,38 +5150,6 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitEnumDeclarationEnd(this);
 }
 
-class EnumConstructorEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  EnumConstructorEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("EnumConstructor", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitEnumConstructorEnd(this);
-}
-
 class EnumElementsHandle extends ParserAstNode {
   final Token elementsEndToken;
   final int elementsCount;
@@ -5450,32 +5249,6 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitEnumElementHandle(this);
 }
 
-class EnumFactoryMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  @override
-  final Token beginToken;
-  final Token factoryKeyword;
-  @override
-  final Token endToken;
-
-  EnumFactoryMethodEnd(
-    ParserAstType type, {
-    required this.beginToken,
-    required this.factoryKeyword,
-    required this.endToken,
-  }) : super("EnumFactoryMethod", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "beginToken": beginToken,
-    "factoryKeyword": factoryKeyword,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitEnumFactoryMethodEnd(this);
-}
-
 class ExportBegin extends ParserAstNode {
   final Token token;
 
@@ -5552,19 +5325,19 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitExpressionStatementHandle(this);
 }
 
-class FactoryMethodBegin extends ParserAstNode {
+class FactoryBegin extends ParserAstNode {
   final DeclarationKind declarationKind;
   final Token lastConsumed;
   final Token? externalToken;
   final Token? constToken;
 
-  FactoryMethodBegin(
+  FactoryBegin(
     ParserAstType type, {
     required this.declarationKind,
     required this.lastConsumed,
     this.externalToken,
     this.constToken,
-  }) : super("FactoryMethod", type);
+  }) : super("Factory", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
@@ -5575,112 +5348,36 @@
   };
 
   @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitFactoryMethodBegin(this);
+  R accept<R>(ParserAstVisitor<R> v) => v.visitFactoryBegin(this);
 }
 
-class ClassFactoryMethodEnd extends ParserAstNode
+class FactoryEnd extends ParserAstNode
     implements BeginAndEndTokenParserAstNode {
+  final DeclarationKind kind;
   @override
   final Token beginToken;
   final Token factoryKeyword;
   @override
   final Token endToken;
 
-  ClassFactoryMethodEnd(
+  FactoryEnd(
     ParserAstType type, {
+    required this.kind,
     required this.beginToken,
     required this.factoryKeyword,
     required this.endToken,
-  }) : super("ClassFactoryMethod", type);
+  }) : super("Factory", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+    "kind": kind,
     "beginToken": beginToken,
     "factoryKeyword": factoryKeyword,
     "endToken": endToken,
   };
 
   @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitClassFactoryMethodEnd(this);
-}
-
-class MixinFactoryMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  @override
-  final Token beginToken;
-  final Token factoryKeyword;
-  @override
-  final Token endToken;
-
-  MixinFactoryMethodEnd(
-    ParserAstType type, {
-    required this.beginToken,
-    required this.factoryKeyword,
-    required this.endToken,
-  }) : super("MixinFactoryMethod", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "beginToken": beginToken,
-    "factoryKeyword": factoryKeyword,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitMixinFactoryMethodEnd(this);
-}
-
-class ExtensionFactoryMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  @override
-  final Token beginToken;
-  final Token factoryKeyword;
-  @override
-  final Token endToken;
-
-  ExtensionFactoryMethodEnd(
-    ParserAstType type, {
-    required this.beginToken,
-    required this.factoryKeyword,
-    required this.endToken,
-  }) : super("ExtensionFactoryMethod", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "beginToken": beginToken,
-    "factoryKeyword": factoryKeyword,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitExtensionFactoryMethodEnd(this);
-}
-
-class ExtensionTypeFactoryMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  @override
-  final Token beginToken;
-  final Token factoryKeyword;
-  @override
-  final Token endToken;
-
-  ExtensionTypeFactoryMethodEnd(
-    ParserAstType type, {
-    required this.beginToken,
-    required this.factoryKeyword,
-    required this.endToken,
-  }) : super("ExtensionTypeFactoryMethod", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "beginToken": beginToken,
-    "factoryKeyword": factoryKeyword,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) =>
-      v.visitExtensionTypeFactoryMethodEnd(this);
+  R accept<R>(ParserAstVisitor<R> v) => v.visitFactoryEnd(this);
 }
 
 class FormalParameterBegin extends ParserAstNode {
@@ -5822,8 +5519,8 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitFormalParametersEnd(this);
 }
 
-class ClassFieldsEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
+class FieldsEnd extends ParserAstNode implements BeginAndEndTokenParserAstNode {
+  final DeclarationKind kind;
   final Token? abstractToken;
   final Token? augmentToken;
   final Token? externalToken;
@@ -5837,8 +5534,9 @@
   @override
   final Token endToken;
 
-  ClassFieldsEnd(
+  FieldsEnd(
     ParserAstType type, {
+    required this.kind,
     this.abstractToken,
     this.augmentToken,
     this.externalToken,
@@ -5849,10 +5547,11 @@
     required this.count,
     required this.beginToken,
     required this.endToken,
-  }) : super("ClassFields", type);
+  }) : super("Fields", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+    "kind": kind,
     "abstractToken": abstractToken,
     "augmentToken": augmentToken,
     "externalToken": externalToken,
@@ -5866,227 +5565,7 @@
   };
 
   @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitClassFieldsEnd(this);
-}
-
-class MixinFieldsEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? abstractToken;
-  final Token? augmentToken;
-  final Token? externalToken;
-  final Token? staticToken;
-  final Token? covariantToken;
-  final Token? lateToken;
-  final Token? varFinalOrConst;
-  final int count;
-  @override
-  final Token beginToken;
-  @override
-  final Token endToken;
-
-  MixinFieldsEnd(
-    ParserAstType type, {
-    this.abstractToken,
-    this.augmentToken,
-    this.externalToken,
-    this.staticToken,
-    this.covariantToken,
-    this.lateToken,
-    this.varFinalOrConst,
-    required this.count,
-    required this.beginToken,
-    required this.endToken,
-  }) : super("MixinFields", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "abstractToken": abstractToken,
-    "augmentToken": augmentToken,
-    "externalToken": externalToken,
-    "staticToken": staticToken,
-    "covariantToken": covariantToken,
-    "lateToken": lateToken,
-    "varFinalOrConst": varFinalOrConst,
-    "count": count,
-    "beginToken": beginToken,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitMixinFieldsEnd(this);
-}
-
-class ExtensionFieldsEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? abstractToken;
-  final Token? augmentToken;
-  final Token? externalToken;
-  final Token? staticToken;
-  final Token? covariantToken;
-  final Token? lateToken;
-  final Token? varFinalOrConst;
-  final int count;
-  @override
-  final Token beginToken;
-  @override
-  final Token endToken;
-
-  ExtensionFieldsEnd(
-    ParserAstType type, {
-    this.abstractToken,
-    this.augmentToken,
-    this.externalToken,
-    this.staticToken,
-    this.covariantToken,
-    this.lateToken,
-    this.varFinalOrConst,
-    required this.count,
-    required this.beginToken,
-    required this.endToken,
-  }) : super("ExtensionFields", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "abstractToken": abstractToken,
-    "augmentToken": augmentToken,
-    "externalToken": externalToken,
-    "staticToken": staticToken,
-    "covariantToken": covariantToken,
-    "lateToken": lateToken,
-    "varFinalOrConst": varFinalOrConst,
-    "count": count,
-    "beginToken": beginToken,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitExtensionFieldsEnd(this);
-}
-
-class ExtensionTypeFieldsEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? abstractToken;
-  final Token? augmentToken;
-  final Token? externalToken;
-  final Token? staticToken;
-  final Token? covariantToken;
-  final Token? lateToken;
-  final Token? varFinalOrConst;
-  final int count;
-  @override
-  final Token beginToken;
-  @override
-  final Token endToken;
-
-  ExtensionTypeFieldsEnd(
-    ParserAstType type, {
-    this.abstractToken,
-    this.augmentToken,
-    this.externalToken,
-    this.staticToken,
-    this.covariantToken,
-    this.lateToken,
-    this.varFinalOrConst,
-    required this.count,
-    required this.beginToken,
-    required this.endToken,
-  }) : super("ExtensionTypeFields", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "abstractToken": abstractToken,
-    "augmentToken": augmentToken,
-    "externalToken": externalToken,
-    "staticToken": staticToken,
-    "covariantToken": covariantToken,
-    "lateToken": lateToken,
-    "varFinalOrConst": varFinalOrConst,
-    "count": count,
-    "beginToken": beginToken,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitExtensionTypeFieldsEnd(this);
-}
-
-class EnumFieldsEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? abstractToken;
-  final Token? augmentToken;
-  final Token? externalToken;
-  final Token? staticToken;
-  final Token? covariantToken;
-  final Token? lateToken;
-  final Token? varFinalOrConst;
-  final int count;
-  @override
-  final Token beginToken;
-  @override
-  final Token endToken;
-
-  EnumFieldsEnd(
-    ParserAstType type, {
-    this.abstractToken,
-    this.augmentToken,
-    this.externalToken,
-    this.staticToken,
-    this.covariantToken,
-    this.lateToken,
-    this.varFinalOrConst,
-    required this.count,
-    required this.beginToken,
-    required this.endToken,
-  }) : super("EnumFields", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "abstractToken": abstractToken,
-    "augmentToken": augmentToken,
-    "externalToken": externalToken,
-    "staticToken": staticToken,
-    "covariantToken": covariantToken,
-    "lateToken": lateToken,
-    "varFinalOrConst": varFinalOrConst,
-    "count": count,
-    "beginToken": beginToken,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitEnumFieldsEnd(this);
-}
-
-class EnumMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  EnumMethodEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("EnumMethod", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitEnumMethodEnd(this);
+  R accept<R>(ParserAstVisitor<R> v) => v.visitFieldsEnd(this);
 }
 
 class ForInitializerEmptyStatementHandle extends ParserAstNode {
@@ -7596,8 +7075,8 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitMethodBegin(this);
 }
 
-class ClassMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
+class MethodEnd extends ParserAstNode implements BeginAndEndTokenParserAstNode {
+  final DeclarationKind kind;
   final Token? getOrSet;
   @override
   final Token beginToken;
@@ -7606,17 +7085,19 @@
   @override
   final Token endToken;
 
-  ClassMethodEnd(
+  MethodEnd(
     ParserAstType type, {
+    required this.kind,
     this.getOrSet,
     required this.beginToken,
     required this.beginParam,
     this.beginInitializers,
     required this.endToken,
-  }) : super("ClassMethod", type);
+  }) : super("Method", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+    "kind": kind,
     "getOrSet": getOrSet,
     "beginToken": beginToken,
     "beginParam": beginParam,
@@ -7625,232 +7106,86 @@
   };
 
   @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitClassMethodEnd(this);
+  R accept<R>(ParserAstVisitor<R> v) => v.visitMethodEnd(this);
 }
 
-class MixinMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
+class ConstructorBegin extends ParserAstNode {
+  final DeclarationKind declarationKind;
+  final Token? augmentToken;
+  final Token? externalToken;
+  final Token? staticToken;
+  final Token? covariantToken;
+  final Token? varFinalOrConst;
   final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
+  final Token? newToken;
+  final Token name;
+  final String? enclosingDeclarationName;
 
-  MixinMethodEnd(
+  ConstructorBegin(
     ParserAstType type, {
+    required this.declarationKind,
+    this.augmentToken,
+    this.externalToken,
+    this.staticToken,
+    this.covariantToken,
+    this.varFinalOrConst,
     this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("MixinMethod", type);
+    this.newToken,
+    required this.name,
+    this.enclosingDeclarationName,
+  }) : super("Constructor", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
+    "declarationKind": declarationKind,
+    "augmentToken": augmentToken,
+    "externalToken": externalToken,
+    "staticToken": staticToken,
+    "covariantToken": covariantToken,
+    "varFinalOrConst": varFinalOrConst,
     "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
+    "newToken": newToken,
+    "name": name,
+    "enclosingDeclarationName": enclosingDeclarationName,
   };
 
   @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitMixinMethodEnd(this);
+  R accept<R>(ParserAstVisitor<R> v) => v.visitConstructorBegin(this);
 }
 
-class ExtensionMethodEnd extends ParserAstNode
+class ConstructorEnd extends ParserAstNode
     implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
+  final DeclarationKind kind;
   @override
   final Token beginToken;
+  final Token? newToken;
   final Token beginParam;
   final Token? beginInitializers;
   @override
   final Token endToken;
 
-  ExtensionMethodEnd(
+  ConstructorEnd(
     ParserAstType type, {
-    this.getOrSet,
+    required this.kind,
     required this.beginToken,
+    this.newToken,
     required this.beginParam,
     this.beginInitializers,
     required this.endToken,
-  }) : super("ExtensionMethod", type);
+  }) : super("Constructor", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
+    "kind": kind,
     "beginToken": beginToken,
+    "newToken": newToken,
     "beginParam": beginParam,
     "beginInitializers": beginInitializers,
     "endToken": endToken,
   };
 
   @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitExtensionMethodEnd(this);
-}
-
-class ExtensionTypeMethodEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  ExtensionTypeMethodEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("ExtensionTypeMethod", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitExtensionTypeMethodEnd(this);
-}
-
-class ClassConstructorEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  ClassConstructorEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("ClassConstructor", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitClassConstructorEnd(this);
-}
-
-class MixinConstructorEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  MixinConstructorEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("MixinConstructor", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitMixinConstructorEnd(this);
-}
-
-class ExtensionConstructorEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  ExtensionConstructorEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("ExtensionConstructor", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) => v.visitExtensionConstructorEnd(this);
-}
-
-class ExtensionTypeConstructorEnd extends ParserAstNode
-    implements BeginAndEndTokenParserAstNode {
-  final Token? getOrSet;
-  @override
-  final Token beginToken;
-  final Token beginParam;
-  final Token? beginInitializers;
-  @override
-  final Token endToken;
-
-  ExtensionTypeConstructorEnd(
-    ParserAstType type, {
-    this.getOrSet,
-    required this.beginToken,
-    required this.beginParam,
-    this.beginInitializers,
-    required this.endToken,
-  }) : super("ExtensionTypeConstructor", type);
-
-  @override
-  Map<String, Object?> get deprecatedArguments => {
-    "getOrSet": getOrSet,
-    "beginToken": beginToken,
-    "beginParam": beginParam,
-    "beginInitializers": beginInitializers,
-    "endToken": endToken,
-  };
-
-  @override
-  R accept<R>(ParserAstVisitor<R> v) =>
-      v.visitExtensionTypeConstructorEnd(this);
+  R accept<R>(ParserAstVisitor<R> v) => v.visitConstructorEnd(this);
 }
 
 class MetadataStarBegin extends ParserAstNode {
@@ -10238,6 +9573,26 @@
       v.visitNoConstructorReferenceContinuationAfterTypeArgumentsHandle(this);
 }
 
+class NoIdentifierHandle extends ParserAstNode {
+  final Token token;
+  final IdentifierContext identifierContext;
+
+  NoIdentifierHandle(
+    ParserAstType type, {
+    required this.token,
+    required this.identifierContext,
+  }) : super("NoIdentifier", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+    "token": token,
+    "identifierContext": identifierContext,
+  };
+
+  @override
+  R accept<R>(ParserAstVisitor<R> v) => v.visitNoIdentifierHandle(this);
+}
+
 class NoTypeNameInConstructorReferenceHandle extends ParserAstNode {
   final Token token;
 
@@ -11289,6 +10644,8 @@
   R visitClassHeaderHandle(ClassHeaderHandle node);
   R visitRecoverDeclarationHeaderHandle(RecoverDeclarationHeaderHandle node);
   R visitClassDeclarationEnd(ClassDeclarationEnd node);
+  R visitNoClassBodyHandle(NoClassBodyHandle node);
+  R visitNoExtensionTypeBodyHandle(NoExtensionTypeBodyHandle node);
   R visitMixinDeclarationBegin(MixinDeclarationBegin node);
   R visitMixinOnHandle(MixinOnHandle node);
   R visitMixinHeaderHandle(MixinHeaderHandle node);
@@ -11307,6 +10664,8 @@
   R visitPrimaryConstructorBegin(PrimaryConstructorBegin node);
   R visitPrimaryConstructorEnd(PrimaryConstructorEnd node);
   R visitNoPrimaryConstructorHandle(NoPrimaryConstructorHandle node);
+  R visitPrimaryConstructorBodyBegin(PrimaryConstructorBodyBegin node);
+  R visitPrimaryConstructorBodyEnd(PrimaryConstructorBodyEnd node);
   R visitCombinatorsBegin(CombinatorsBegin node);
   R visitCombinatorsEnd(CombinatorsEnd node);
   R visitCompilationUnitBegin(CompilationUnitBegin node);
@@ -11325,33 +10684,23 @@
   R visitEnumDeclarationPreludeBegin(EnumDeclarationPreludeBegin node);
   R visitEnumDeclarationBegin(EnumDeclarationBegin node);
   R visitEnumDeclarationEnd(EnumDeclarationEnd node);
-  R visitEnumConstructorEnd(EnumConstructorEnd node);
   R visitEnumElementsHandle(EnumElementsHandle node);
   R visitEnumHeaderHandle(EnumHeaderHandle node);
   R visitEnumBodyBegin(EnumBodyBegin node);
   R visitEnumBodyEnd(EnumBodyEnd node);
   R visitEnumElementHandle(EnumElementHandle node);
-  R visitEnumFactoryMethodEnd(EnumFactoryMethodEnd node);
   R visitExportBegin(ExportBegin node);
   R visitExportEnd(ExportEnd node);
   R visitExtraneousExpressionHandle(ExtraneousExpressionHandle node);
   R visitExpressionStatementHandle(ExpressionStatementHandle node);
-  R visitFactoryMethodBegin(FactoryMethodBegin node);
-  R visitClassFactoryMethodEnd(ClassFactoryMethodEnd node);
-  R visitMixinFactoryMethodEnd(MixinFactoryMethodEnd node);
-  R visitExtensionFactoryMethodEnd(ExtensionFactoryMethodEnd node);
-  R visitExtensionTypeFactoryMethodEnd(ExtensionTypeFactoryMethodEnd node);
+  R visitFactoryBegin(FactoryBegin node);
+  R visitFactoryEnd(FactoryEnd node);
   R visitFormalParameterBegin(FormalParameterBegin node);
   R visitFormalParameterEnd(FormalParameterEnd node);
   R visitNoFormalParametersHandle(NoFormalParametersHandle node);
   R visitFormalParametersBegin(FormalParametersBegin node);
   R visitFormalParametersEnd(FormalParametersEnd node);
-  R visitClassFieldsEnd(ClassFieldsEnd node);
-  R visitMixinFieldsEnd(MixinFieldsEnd node);
-  R visitExtensionFieldsEnd(ExtensionFieldsEnd node);
-  R visitExtensionTypeFieldsEnd(ExtensionTypeFieldsEnd node);
-  R visitEnumFieldsEnd(EnumFieldsEnd node);
-  R visitEnumMethodEnd(EnumMethodEnd node);
+  R visitFieldsEnd(FieldsEnd node);
   R visitForInitializerEmptyStatementHandle(
     ForInitializerEmptyStatementHandle node,
   );
@@ -11452,14 +10801,9 @@
   R visitInvalidMemberHandle(InvalidMemberHandle node);
   R visitMemberEnd(MemberEnd node);
   R visitMethodBegin(MethodBegin node);
-  R visitClassMethodEnd(ClassMethodEnd node);
-  R visitMixinMethodEnd(MixinMethodEnd node);
-  R visitExtensionMethodEnd(ExtensionMethodEnd node);
-  R visitExtensionTypeMethodEnd(ExtensionTypeMethodEnd node);
-  R visitClassConstructorEnd(ClassConstructorEnd node);
-  R visitMixinConstructorEnd(MixinConstructorEnd node);
-  R visitExtensionConstructorEnd(ExtensionConstructorEnd node);
-  R visitExtensionTypeConstructorEnd(ExtensionTypeConstructorEnd node);
+  R visitMethodEnd(MethodEnd node);
+  R visitConstructorBegin(ConstructorBegin node);
+  R visitConstructorEnd(ConstructorEnd node);
   R visitMetadataStarBegin(MetadataStarBegin node);
   R visitMetadataStarEnd(MetadataStarEnd node);
   R visitMetadataBegin(MetadataBegin node);
@@ -11607,6 +10951,7 @@
   R visitNoConstructorReferenceContinuationAfterTypeArgumentsHandle(
     NoConstructorReferenceContinuationAfterTypeArgumentsHandle node,
   );
+  R visitNoIdentifierHandle(NoIdentifierHandle node);
   R visitNoTypeNameInConstructorReferenceHandle(
     NoTypeNameInConstructorReferenceHandle node,
   );
@@ -11780,6 +11125,14 @@
       node.visitChildren(this);
 
   @override
+  void visitNoClassBodyHandle(NoClassBodyHandle node) =>
+      node.visitChildren(this);
+
+  @override
+  void visitNoExtensionTypeBodyHandle(NoExtensionTypeBodyHandle node) =>
+      node.visitChildren(this);
+
+  @override
   void visitMixinDeclarationBegin(MixinDeclarationBegin node) =>
       node.visitChildren(this);
 
@@ -11837,6 +11190,14 @@
       node.visitChildren(this);
 
   @override
+  void visitPrimaryConstructorBodyBegin(PrimaryConstructorBodyBegin node) =>
+      node.visitChildren(this);
+
+  @override
+  void visitPrimaryConstructorBodyEnd(PrimaryConstructorBodyEnd node) =>
+      node.visitChildren(this);
+
+  @override
   void visitCombinatorsBegin(CombinatorsBegin node) => node.visitChildren(this);
 
   @override
@@ -11906,10 +11267,6 @@
       node.visitChildren(this);
 
   @override
-  void visitEnumConstructorEnd(EnumConstructorEnd node) =>
-      node.visitChildren(this);
-
-  @override
   void visitEnumElementsHandle(EnumElementsHandle node) =>
       node.visitChildren(this);
 
@@ -11927,10 +11284,6 @@
       node.visitChildren(this);
 
   @override
-  void visitEnumFactoryMethodEnd(EnumFactoryMethodEnd node) =>
-      node.visitChildren(this);
-
-  @override
   void visitExportBegin(ExportBegin node) => node.visitChildren(this);
 
   @override
@@ -11945,24 +11298,10 @@
       node.visitChildren(this);
 
   @override
-  void visitFactoryMethodBegin(FactoryMethodBegin node) =>
-      node.visitChildren(this);
+  void visitFactoryBegin(FactoryBegin node) => node.visitChildren(this);
 
   @override
-  void visitClassFactoryMethodEnd(ClassFactoryMethodEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitMixinFactoryMethodEnd(MixinFactoryMethodEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitExtensionFactoryMethodEnd(ExtensionFactoryMethodEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitExtensionTypeFactoryMethodEnd(ExtensionTypeFactoryMethodEnd node) =>
-      node.visitChildren(this);
+  void visitFactoryEnd(FactoryEnd node) => node.visitChildren(this);
 
   @override
   void visitFormalParameterBegin(FormalParameterBegin node) =>
@@ -11985,24 +11324,7 @@
       node.visitChildren(this);
 
   @override
-  void visitClassFieldsEnd(ClassFieldsEnd node) => node.visitChildren(this);
-
-  @override
-  void visitMixinFieldsEnd(MixinFieldsEnd node) => node.visitChildren(this);
-
-  @override
-  void visitExtensionFieldsEnd(ExtensionFieldsEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitExtensionTypeFieldsEnd(ExtensionTypeFieldsEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitEnumFieldsEnd(EnumFieldsEnd node) => node.visitChildren(this);
-
-  @override
-  void visitEnumMethodEnd(EnumMethodEnd node) => node.visitChildren(this);
+  void visitFieldsEnd(FieldsEnd node) => node.visitChildren(this);
 
   @override
   void visitForInitializerEmptyStatementHandle(
@@ -12343,34 +11665,13 @@
   void visitMethodBegin(MethodBegin node) => node.visitChildren(this);
 
   @override
-  void visitClassMethodEnd(ClassMethodEnd node) => node.visitChildren(this);
+  void visitMethodEnd(MethodEnd node) => node.visitChildren(this);
 
   @override
-  void visitMixinMethodEnd(MixinMethodEnd node) => node.visitChildren(this);
+  void visitConstructorBegin(ConstructorBegin node) => node.visitChildren(this);
 
   @override
-  void visitExtensionMethodEnd(ExtensionMethodEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitExtensionTypeMethodEnd(ExtensionTypeMethodEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitClassConstructorEnd(ClassConstructorEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitMixinConstructorEnd(MixinConstructorEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitExtensionConstructorEnd(ExtensionConstructorEnd node) =>
-      node.visitChildren(this);
-
-  @override
-  void visitExtensionTypeConstructorEnd(ExtensionTypeConstructorEnd node) =>
-      node.visitChildren(this);
+  void visitConstructorEnd(ConstructorEnd node) => node.visitChildren(this);
 
   @override
   void visitMetadataStarBegin(MetadataStarBegin node) =>
@@ -12893,6 +12194,10 @@
   ) => node.visitChildren(this);
 
   @override
+  void visitNoIdentifierHandle(NoIdentifierHandle node) =>
+      node.visitChildren(this);
+
+  @override
   void visitNoTypeNameInConstructorReferenceHandle(
     NoTypeNameInConstructorReferenceHandle node,
   ) => node.visitChildren(this);
@@ -13232,6 +12537,14 @@
       defaultNode(node);
 
   @override
+  Future<void> visitNoClassBodyHandle(NoClassBodyHandle node) =>
+      defaultNode(node);
+
+  @override
+  Future<void> visitNoExtensionTypeBodyHandle(NoExtensionTypeBodyHandle node) =>
+      defaultNode(node);
+
+  @override
   Future<void> visitMixinDeclarationBegin(MixinDeclarationBegin node) =>
       defaultNode(node);
 
@@ -13292,6 +12605,15 @@
   ) => defaultNode(node);
 
   @override
+  Future<void> visitPrimaryConstructorBodyBegin(
+    PrimaryConstructorBodyBegin node,
+  ) => defaultNode(node);
+
+  @override
+  Future<void> visitPrimaryConstructorBodyEnd(PrimaryConstructorBodyEnd node) =>
+      defaultNode(node);
+
+  @override
   Future<void> visitCombinatorsBegin(CombinatorsBegin node) =>
       defaultNode(node);
 
@@ -13363,10 +12685,6 @@
       defaultNode(node);
 
   @override
-  Future<void> visitEnumConstructorEnd(EnumConstructorEnd node) =>
-      defaultNode(node);
-
-  @override
   Future<void> visitEnumElementsHandle(EnumElementsHandle node) =>
       defaultNode(node);
 
@@ -13385,10 +12703,6 @@
       defaultNode(node);
 
   @override
-  Future<void> visitEnumFactoryMethodEnd(EnumFactoryMethodEnd node) =>
-      defaultNode(node);
-
-  @override
   Future<void> visitExportBegin(ExportBegin node) => defaultNode(node);
 
   @override
@@ -13404,25 +12718,10 @@
       defaultNode(node);
 
   @override
-  Future<void> visitFactoryMethodBegin(FactoryMethodBegin node) =>
-      defaultNode(node);
+  Future<void> visitFactoryBegin(FactoryBegin node) => defaultNode(node);
 
   @override
-  Future<void> visitClassFactoryMethodEnd(ClassFactoryMethodEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitMixinFactoryMethodEnd(MixinFactoryMethodEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitExtensionFactoryMethodEnd(ExtensionFactoryMethodEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitExtensionTypeFactoryMethodEnd(
-    ExtensionTypeFactoryMethodEnd node,
-  ) => defaultNode(node);
+  Future<void> visitFactoryEnd(FactoryEnd node) => defaultNode(node);
 
   @override
   Future<void> visitFormalParameterBegin(FormalParameterBegin node) =>
@@ -13445,24 +12744,7 @@
       defaultNode(node);
 
   @override
-  Future<void> visitClassFieldsEnd(ClassFieldsEnd node) => defaultNode(node);
-
-  @override
-  Future<void> visitMixinFieldsEnd(MixinFieldsEnd node) => defaultNode(node);
-
-  @override
-  Future<void> visitExtensionFieldsEnd(ExtensionFieldsEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitExtensionTypeFieldsEnd(ExtensionTypeFieldsEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitEnumFieldsEnd(EnumFieldsEnd node) => defaultNode(node);
-
-  @override
-  Future<void> visitEnumMethodEnd(EnumMethodEnd node) => defaultNode(node);
+  Future<void> visitFieldsEnd(FieldsEnd node) => defaultNode(node);
 
   @override
   Future<void> visitForInitializerEmptyStatementHandle(
@@ -13821,35 +13103,14 @@
   Future<void> visitMethodBegin(MethodBegin node) => defaultNode(node);
 
   @override
-  Future<void> visitClassMethodEnd(ClassMethodEnd node) => defaultNode(node);
+  Future<void> visitMethodEnd(MethodEnd node) => defaultNode(node);
 
   @override
-  Future<void> visitMixinMethodEnd(MixinMethodEnd node) => defaultNode(node);
-
-  @override
-  Future<void> visitExtensionMethodEnd(ExtensionMethodEnd node) =>
+  Future<void> visitConstructorBegin(ConstructorBegin node) =>
       defaultNode(node);
 
   @override
-  Future<void> visitExtensionTypeMethodEnd(ExtensionTypeMethodEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitClassConstructorEnd(ClassConstructorEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitMixinConstructorEnd(MixinConstructorEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitExtensionConstructorEnd(ExtensionConstructorEnd node) =>
-      defaultNode(node);
-
-  @override
-  Future<void> visitExtensionTypeConstructorEnd(
-    ExtensionTypeConstructorEnd node,
-  ) => defaultNode(node);
+  Future<void> visitConstructorEnd(ConstructorEnd node) => defaultNode(node);
 
   @override
   Future<void> visitMetadataStarBegin(MetadataStarBegin node) =>
@@ -14399,6 +13660,10 @@
   ) => defaultNode(node);
 
   @override
+  Future<void> visitNoIdentifierHandle(NoIdentifierHandle node) =>
+      defaultNode(node);
+
+  @override
   Future<void> visitNoTypeNameInConstructorReferenceHandle(
     NoTypeNameInConstructorReferenceHandle node,
   ) => defaultNode(node);
diff --git a/pkg/front_end/lib/src/util/textual_outline.dart b/pkg/front_end/lib/src/util/textual_outline.dart
index ba76810..07c2b2d 100644
--- a/pkg/front_end/lib/src/util/textual_outline.dart
+++ b/pkg/front_end/lib/src/util/textual_outline.dart
@@ -9,6 +9,8 @@
     show ExperimentalFeatures, DefaultExperimentalFeatures;
 import 'package:_fe_analyzer_shared/src/parser/class_member_parser.dart'
     show ClassMemberParser;
+import 'package:_fe_analyzer_shared/src/parser/declaration_kind.dart'
+    show DeclarationKind;
 import 'package:_fe_analyzer_shared/src/parser/identifier_context.dart';
 import 'package:_fe_analyzer_shared/src/parser/listener.dart';
 import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
@@ -827,7 +829,23 @@
   }
 
   @override
-  void endClassMethod(
+  void endConstructor(
+    DeclarationKind kind,
+    Token beginToken,
+    Token? newToken,
+    Token beginParam,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    elementStartToChunk[beginToken] = new _ClassMethodChunk(
+      beginToken,
+      endToken,
+    );
+  }
+
+  @override
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
@@ -849,7 +867,8 @@
   }
 
   @override
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
@@ -866,7 +885,8 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
diff --git a/pkg/front_end/lib/src/util/trim.dart b/pkg/front_end/lib/src/util/trim.dart
index 83271f0..d3b2e2e 100644
--- a/pkg/front_end/lib/src/util/trim.dart
+++ b/pkg/front_end/lib/src/util/trim.dart
@@ -212,6 +212,8 @@
 
   @override
   void visitProcedure(Procedure node) {
+    // Keep bodies of const factories.
+    if (node.isConst) return;
     // Preserve method bodies of mixin declarations, these are copied when
     // mixins are applied in subtypes.
     if (!preserveMemberBodies) {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 6a2a0f3..07c14e5 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -163,17 +163,6 @@
 front_end/WasmImportOrExportInUserCode/example: missingExample # only issued by wasm build
 front_end/WebLiteralCannotBeRepresentedExactly/example: missingExample # only issued on web build
 
-# An invalid private named parameter produces one of two errors depending on
-# whether the "private-named-parameters" experiment is enabled. By default with
-# the experiment off, it shows the old error (PrivateOptionalParameter), even
-# for the example in the new error code. Allow that for now.
-# TODO(rnystrom): Decide if we want to consolidate to one single error when the
-# experiment is closer to shipping.
-front_end/PrivateNamedNonFieldParameter/part_wrapped_script: hasOnlyUnrelatedMessages
-front_end/PrivateNamedNonFieldParameter/script: hasOnlyUnrelatedMessages
-front_end/PrivateNamedParameterWithoutPublicName/part_wrapped_script: hasOnlyUnrelatedMessages
-front_end/PrivateNamedParameterWithoutPublicName/script: hasOnlyUnrelatedMessages
-
 # Can we do better?
 _fe_analyzer_shared/ConstAndFinal/declaration3: hasOnlyUnrelatedMessages # maybe the parser should do better here - it seems it once did?
 _fe_analyzer_shared/ConstAndFinal/declaration4: hasOnlyUnrelatedMessages # maybe the parser should do better here - it seems it once did?
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 903a06f..ffd9923 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1575,18 +1575,31 @@
   pseudoSharedCode: PRIVATE_NAMED_NON_FIELD_PARAMETER
   parameters: none
   problemMessage: "A named parameter that doesn't refer to an instance variable can't start with an underscore ('_')."
+  experiments: private-named-parameters
   script: |
     void foo({int? _hello}) {}
 
 PrivateNamedParameterWithoutPublicName:
   parameters: none
   problemMessage: "A private named parameter must have a corresponding public name."
+  experiments: private-named-parameters
   script: |
     class C {
       int? _123;
       C({this._123});
     }
 
+PrivateNamedParameterDuplicatePublicName:
+  parameters:
+    String name: the corresponding public name of private named parameter
+  problemMessage: "The corresponding public name '#name' is already the name of another parameter."
+  experiments: private-named-parameters
+  script: |
+    class C {
+      int? _x;
+      C(int x, {this._x});
+    }
+
 GetterWithFormals:
   pseudoSharedCode: GETTER_WITH_PARAMETERS
   parameters: none
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_39326.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_39326.dart.intertwined.expect
index dae3b471..23ac8a9 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_39326.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_39326.dart.intertwined.expect
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(c)
                 looksLikeLocalFunction(c)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -52,6 +54,9 @@
                 looksLikeLocalFunction(c)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -67,6 +72,8 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional.dart.intertwined.expect
index 22a1644..8fcd322 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional.dart.intertwined.expect
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -66,6 +68,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -84,6 +89,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -108,6 +116,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -144,6 +155,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -162,6 +176,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -186,6 +203,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -222,6 +242,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -240,6 +263,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -271,6 +297,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -320,6 +349,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -338,6 +370,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -369,6 +404,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -418,6 +456,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -443,6 +484,9 @@
                                   listener: endTypeArguments(1, <, >)
                                   parseLiteralListSuffix(>, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -469,6 +513,9 @@
                                   listener: endTypeArguments(1, <, >)
                                   parseLiteralListSuffix(>, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                          skipObjectPatternRest(c)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -491,6 +538,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -512,12 +562,17 @@
                                   parseParenthesizedExpressionOrRecordLiteral(?, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             listener: handleNoTypeArguments([)
                                             parseLiteralListSuffix((, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
+                                                    skipObjectPatternRest(b)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -542,12 +597,17 @@
                                   parseParenthesizedExpressionOrRecordLiteral(:, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             listener: handleNoTypeArguments([)
                                             parseLiteralListSuffix((, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
+                                                    skipObjectPatternRest(c)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_2.dart.intertwined.expect
index 6157a1d..733ea8f 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_2.dart.intertwined.expect
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -58,6 +60,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(a)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -76,6 +81,9 @@
                             parsePrimary(?, expression, ConstantPatternContext.none)
                               parseLiteralListSuffix(?, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(b)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -88,6 +96,8 @@
                                                 parseArgumentsRest(()
                                                   allowedToShortcutParseExpression()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -109,6 +119,9 @@
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(?, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(b)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -124,6 +137,8 @@
                                                   listener: beginArguments(()
                                                   allowedToShortcutParseExpression()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_3.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_3.dart.intertwined.expect
index 2469021..3c6d5db 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_3.dart.intertwined.expect
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -51,6 +53,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(a)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -75,6 +80,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(a)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -99,6 +107,9 @@
                             parsePrimary(?, expression, ConstantPatternContext.none)
                               parseLiteralListSuffix(?, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -124,6 +135,9 @@
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(?, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_4.dart.intertwined.expect
index 88c9a80..622e85f 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40267_conditional_4.dart.intertwined.expect
@@ -58,6 +58,9 @@
         parseFunctionBody(f, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
+                  skipObjectPatternRest(a)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -81,6 +84,8 @@
                           listener: beginArguments(()
                           allowedToShortcutParseExpression()
                           parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                 parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -109,6 +114,9 @@
                                         listener: handleSend(c, c)
                                 parseArgumentOrIndexStar(c, NoTypeParamOrArg(), false)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(d)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -128,6 +136,9 @@
                                           parsePrimary(?, expression, ConstantPatternContext.none)
                                             parseLiteralListSuffix(?, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
+                                                    skipObjectPatternRest(a)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -136,6 +147,9 @@
                                                           ensureIdentifier([, expression)
                                                           parseArgumentsOpt(a)
                                               parseExpression(,)
+                                                looksLikeOuterPatternEquals(,)
+                                                  skipOuterPattern(,)
+                                                    skipObjectPatternRest(e)
                                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -153,6 +167,9 @@
                                           parsePrimary(:, expression, ConstantPatternContext.none)
                                             parseLiteralListSuffix(:, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
+                                                    skipObjectPatternRest(a)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -167,6 +184,9 @@
                                         parsePrimary(?, expression, ConstantPatternContext.none)
                                           parseLiteralListSuffix(?, null)
                                             parseExpression([)
+                                              looksLikeOuterPatternEquals([)
+                                                skipOuterPattern([)
+                                                  skipObjectPatternRest(a)
                                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -175,6 +195,9 @@
                                                         ensureIdentifier([, expression)
                                                         parseArgumentsOpt(a)
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(e)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -192,6 +215,9 @@
                                         parsePrimary(:, expression, ConstantPatternContext.none)
                                           parseLiteralListSuffix(:, null)
                                             parseExpression([)
+                                              looksLikeOuterPatternEquals([)
+                                                skipOuterPattern([)
+                                                  skipObjectPatternRest(a)
                                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -207,6 +233,9 @@
                                       parsePrimary(?, expression, ConstantPatternContext.none)
                                         parseLiteralListSuffix(?, null)
                                           parseExpression([)
+                                            looksLikeOuterPatternEquals([)
+                                              skipOuterPattern([)
+                                                skipObjectPatternRest(a)
                                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -215,6 +244,9 @@
                                                       ensureIdentifier([, expression)
                                                       parseArgumentsOpt(a)
                                           parseExpression(,)
+                                            looksLikeOuterPatternEquals(,)
+                                              skipOuterPattern(,)
+                                                skipObjectPatternRest(e)
                                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -232,6 +264,9 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralListSuffix(:, null)
                                           parseExpression([)
+                                            looksLikeOuterPatternEquals([)
+                                              skipOuterPattern([)
+                                                skipObjectPatternRest(a)
                                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -248,6 +283,9 @@
                                         listener: handleNoTypeArguments([)
                                         parseLiteralListSuffix(?, null)
                                           parseExpression([)
+                                            looksLikeOuterPatternEquals([)
+                                              skipOuterPattern([)
+                                                skipObjectPatternRest(a)
                                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -260,6 +298,9 @@
                                                         listener: handleNoArguments(,)
                                                       listener: handleSend(a, a)
                                           parseExpression(,)
+                                            looksLikeOuterPatternEquals(,)
+                                              skipOuterPattern(,)
+                                                skipObjectPatternRest(e)
                                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -290,6 +331,9 @@
                                         listener: handleNoTypeArguments([)
                                         parseLiteralListSuffix(:, null)
                                           parseExpression([)
+                                            looksLikeOuterPatternEquals([)
+                                              skipOuterPattern([)
+                                                skipObjectPatternRest(a)
                                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                                 parsePrimary([, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.expect
index 4f7ba89..efbe4ef 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.expect
@@ -49,7 +49,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(1)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -82,7 +82,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(2)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -114,7 +114,7 @@
               endArguments(0, (, ))
               handleSend(late, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(required)
         endMetadataStar(0)
@@ -131,7 +131,7 @@
               endArguments(0, (, ))
               handleSend(required, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, null, 1, required, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, required, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.intertwined.expect
index 959e0b7..caecb86 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40288.dart.intertwined.expect
@@ -35,7 +35,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, g, DeclarationKind.Class, late, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, g, DeclarationKind.Class, late, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, late)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -56,6 +56,8 @@
                 parseFunctionBody(g, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -64,7 +66,7 @@
                     ensureSemicolon(1)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -103,7 +105,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, g, DeclarationKind.Class, required, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, g, DeclarationKind.Class, required, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, required)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -124,6 +126,8 @@
                 parseFunctionBody(g, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -132,7 +136,7 @@
                     ensureSemicolon(2)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -180,6 +184,9 @@
                 parseFieldInitializerOpt(l, l, late, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(late)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -198,7 +205,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(late, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, required)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -219,6 +226,9 @@
                 parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(required)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -237,7 +247,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(required, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, null, 1, required, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, required, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.expect
index e160163..9d3c754 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.expect
@@ -26,7 +26,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(1)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -58,7 +58,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(2)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -91,7 +91,7 @@
               endArguments(0, (, ))
               handleSend(Xlate, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, null, 1, Xlate, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Xlate, ;)
         endMember()
         beginMetadataStar(Xrequired)
         endMetadataStar(0)
@@ -108,7 +108,7 @@
               endArguments(0, (, ))
               handleSend(Xrequired, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, null, 1, Xrequired, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Xrequired, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.intertwined.expect
index 5513b7b..11f9786 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/issue_40288_prime.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, g, DeclarationKind.Class, Xlate, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, g, DeclarationKind.Class, Xlate, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, Xlate)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -54,6 +54,8 @@
                 parseFunctionBody(g, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -62,7 +64,7 @@
                     ensureSemicolon(1)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -99,7 +101,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, g, DeclarationKind.Class, Xrequired, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, g, DeclarationKind.Class, Xrequired, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, Xrequired)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -120,6 +122,8 @@
                 parseFunctionBody(g, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -128,7 +132,7 @@
                     ensureSemicolon(2)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -175,6 +179,9 @@
                 parseFieldInitializerOpt(l, l, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Xlate)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -191,7 +198,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Xlate, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, null, 1, Xlate, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Xlate, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Xrequired)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -209,6 +216,9 @@
                 parseFieldInitializerOpt(r, r, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Xrequired)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -225,7 +235,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Xrequired, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, null, 1, Xrequired, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Xrequired, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.expect
index be58b52..1124091 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.expect
@@ -231,7 +231,7 @@
             handleType(int, null)
             handleIdentifier(z1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -242,7 +242,7 @@
             handleType(int, null)
             handleIdentifier(z2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -257,7 +257,7 @@
             handleType(List, null)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -268,7 +268,7 @@
             handleType(int, null)
             handleIdentifier(z4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, final, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, final, 1, late, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -278,7 +278,7 @@
             handleNoType(late)
             handleIdentifier(z5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(;)
         endMetadataStar(0)
@@ -294,7 +294,7 @@
             handleNoType(;)
             handleIdentifier(late, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, late, ;)
         endMember()
         beginMetadataStar(;)
         endMetadataStar(0)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
index a846ab3..456459f 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/use_late_in_non_nnbd.dart.intertwined.expect
@@ -246,6 +246,8 @@
             parseStatementX(;)
               parseExpressionStatementOrDeclaration(;, null)
                 parseExpressionStatementOrDeclarationAfterModifiers(final, ;, late, final, null, null)
+                  skipOuterPattern(final)
+                    skipObjectPatternRest(int)
                   looksLikeLocalFunction(y4)
                   listener: beginMetadataStar(late)
                   listener: endMetadataStar(0)
@@ -298,6 +300,9 @@
                   looksLikeLocalFunction(late)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(late)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -362,7 +367,7 @@
                   listener: handleIdentifier(z1, fieldDeclaration)
                 parseFieldInitializerOpt(z1, z1, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -379,7 +384,7 @@
                   listener: handleIdentifier(z2, fieldDeclaration)
                 parseFieldInitializerOpt(z2, z2, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -400,7 +405,7 @@
                   listener: handleIdentifier(x3, fieldDeclaration)
                 parseFieldInitializerOpt(x3, x3, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -419,7 +424,7 @@
                   listener: handleIdentifier(z4, fieldDeclaration)
                 parseFieldInitializerOpt(z4, z4, late, null, null, null, final, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, final, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, final, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -437,7 +442,7 @@
                   listener: handleIdentifier(z5, fieldDeclaration)
                 parseFieldInitializerOpt(z5, z5, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ;)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -445,7 +450,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
@@ -465,7 +470,7 @@
                   listener: handleIdentifier(late, fieldDeclaration)
                 parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ;)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -473,7 +478,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
diff --git a/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.expect b/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.expect
index 4e127de..c9e6ec4 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.expect
@@ -159,7 +159,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.intertwined.expect b/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
index 5c38141..7222af9 100644
--- a/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/also-nnbd/use_required_in_non_nnbd.dart.intertwined.expect
@@ -48,6 +48,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -118,6 +121,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -192,6 +198,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -249,7 +258,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo4, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo4, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo4, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -293,6 +302,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -317,7 +329,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
index 8681391..969a38e 100644
--- a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.expect
@@ -212,7 +212,7 @@
               handleSend(augment, ))
               handleExpressionStatement(augment, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -244,7 +244,7 @@
               handleSend(augment, augment)
               handleExpressionStatement(augment, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -270,7 +270,7 @@
                 handleUnaryPrefixExpression(-)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(get, augment, {, null, })
+          endMethod(DeclarationKind.Class, get, augment, {, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -301,7 +301,7 @@
               handleAssignmentExpression(=, value)
               handleExpressionStatement(augment, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -341,7 +341,7 @@
               handleSend(augment, augment)
               handleExpressionStatement(augment, ;)
             endBlockFunctionBody(4, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
     endClassDeclaration(augment, })
diff --git a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
index 74f3e87..0c692bb 100644
--- a/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/augment_super.dart.intertwined.expect
@@ -31,6 +31,9 @@
               parseExpressionStatementOrDeclaration({, null)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(augment)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -103,6 +106,9 @@
                   looksLikeLocalFunction(augment)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(augment)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -154,12 +160,17 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(return, null)
                           parseExpression(...)
+                            looksLikeOuterPatternEquals(...)
+                              skipOuterPattern(...)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression(..., 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(..., true, ConstantPatternContext.none)
                                 parsePrimary(..., expression, ConstantPatternContext.none)
@@ -167,6 +178,9 @@
                                     listener: handleAugmentSuperExpression(augment, super, expression)
                           listener: handleSpreadExpression(...)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -174,6 +188,8 @@
                                     listener: handleAugmentSuperExpression(augment, super, expression)
                               parseArgumentOrIndexStar(super, NoTypeParamOrArg(), false)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -233,6 +249,9 @@
               parseExpressionStatementOrDeclaration({, null)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(augment)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -240,6 +259,8 @@
                             listener: handleAugmentSuperExpression(augment, super, expression)
                       parseArgumentOrIndexStar(super, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -259,6 +280,8 @@
                                 listener: handleSend(value, value)
                         parseArgumentOrIndexStar(value, NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -274,6 +297,9 @@
               parseExpressionStatementOrDeclaration(;, null)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(augment)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -326,6 +352,9 @@
               parseExpressionStatementOrDeclaration({, null)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(augment)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -345,6 +374,9 @@
               parseExpressionStatementOrDeclaration(;, null)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(augment)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -384,6 +416,9 @@
                   looksLikeLocalFunction(augment)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(augment)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -434,7 +469,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, augment, null, null, null, null, null, augment, VoidType(), null, instanceMethod, DeclarationKind.Class, Class, false)
+              parseMethod({, null, augment, null, null, null, null, null, augment, VoidType(), null, null, instanceMethod, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethod, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -461,6 +496,9 @@
                       parseExpressionStatementOrDeclaration({, null)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -476,7 +514,7 @@
                           listener: handleExpressionStatement(augment, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -484,7 +522,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), null, null, instanceMethodErrors, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, instanceMethodErrors, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -537,6 +575,9 @@
                           looksLikeLocalFunction(augment)
                           parseExpressionStatement(;)
                             parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                                  skipObjectPatternRest(augment)
                               parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(;, true, ConstantPatternContext.none)
                                   parsePrimary(;, expression, ConstantPatternContext.none)
@@ -554,7 +595,7 @@
                             listener: handleExpressionStatement(augment, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -562,7 +603,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, null, null, null, null, augment, SimpleType(), get, instanceProperty, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, null, null, null, null, augment, SimpleType(), get, null, instanceProperty, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, instanceProperty, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -588,6 +629,9 @@
                       parseExpressionStatementOrDeclaration({, null)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -604,6 +648,8 @@
                           looksLikeLocalFunction(--)
                           parseExpressionStatement(;)
                             parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
                               parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(;, true, ConstantPatternContext.none)
                                   parsePrecedenceExpression(--, 16, true, ConstantPatternContext.none)
@@ -620,6 +666,8 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrecedenceExpression(-, 16, true, ConstantPatternContext.none)
@@ -633,7 +681,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(get, augment, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, augment, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -641,7 +689,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), set, instanceProperty, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), set, null, instanceProperty, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, instanceProperty, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -680,6 +728,9 @@
                       parseExpressionStatementOrDeclaration({, null)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -701,7 +752,7 @@
                           listener: handleExpressionStatement(augment, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -709,7 +760,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -736,6 +787,9 @@
                       parseExpressionStatementOrDeclaration({, null)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -755,6 +809,9 @@
                       parseExpressionStatementOrDeclaration(;, null)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(augment)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -794,6 +851,9 @@
                           looksLikeLocalFunction(augment)
                           parseExpressionStatement(;)
                             parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                                  skipObjectPatternRest(augment)
                               parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(;, true, ConstantPatternContext.none)
                                   parsePrimary(;, expression, ConstantPatternContext.none)
@@ -811,7 +871,7 @@
                             listener: handleExpressionStatement(augment, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
diff --git a/pkg/front_end/parser_testcases/augmentation/folder.options b/pkg/front_end/parser_testcases/augmentation/folder.options
new file mode 100644
index 0000000..805551e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/augmentation/folder.options
@@ -0,0 +1 @@
+--enable-experiment=augmentations
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
index df34158..823b972 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.expect
@@ -25,7 +25,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -40,7 +40,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -54,7 +54,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -70,7 +70,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -92,7 +92,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -114,7 +114,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -123,7 +123,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -134,7 +134,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -145,7 +145,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -156,7 +156,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -165,7 +165,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -174,7 +174,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -185,7 +185,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -200,7 +200,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -215,7 +215,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -229,7 +229,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -245,7 +245,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -267,7 +267,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -289,7 +289,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -298,7 +298,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -309,7 +309,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -320,7 +320,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -331,7 +331,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -340,7 +340,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -349,7 +349,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -360,7 +360,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, late, null, 1, augment, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 26, {, })
     endClassDeclaration(class, })
@@ -388,7 +388,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -403,7 +403,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -417,7 +417,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endMixinMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -433,7 +433,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endMixinMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -455,7 +455,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -477,7 +477,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -486,7 +486,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, null, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -497,7 +497,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endMixinFields(null, augment, null, null, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -508,7 +508,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endMixinFields(null, augment, null, null, null, null, const, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -519,7 +519,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -528,7 +528,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, null, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -537,7 +537,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, null, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -548,7 +548,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, null, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, null, null, late, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -563,7 +563,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -578,7 +578,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -592,7 +592,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endMixinMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -608,7 +608,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endMixinMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -630,7 +630,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -652,7 +652,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endMixinMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Mixin, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -661,7 +661,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, static, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -672,7 +672,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endMixinFields(null, augment, null, static, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -683,7 +683,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endMixinFields(null, augment, null, static, null, null, const, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -694,7 +694,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, static, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -703,7 +703,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, static, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -712,7 +712,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, static, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -723,7 +723,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endMixinFields(null, augment, null, static, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Mixin, null, augment, null, static, null, late, null, 1, augment, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 26, {, })
     endMixinDeclaration(mixin, })
diff --git a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
index b890404..6def0d3 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_declarations.dart.intertwined.expect
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, augment, null, null, null, null, null, augment, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod({, null, augment, null, null, null, null, null, augment, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
@@ -57,7 +57,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -65,7 +65,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -88,7 +88,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -96,7 +96,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, null, null, null, null, augment, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, null, null, null, null, augment, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -115,6 +115,8 @@
                 parseFunctionBody(getter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -123,7 +125,7 @@
                     ensureSemicolon(null)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -131,7 +133,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, augment, null, null, null, null, null, augment, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -152,6 +154,8 @@
                 parseFunctionBody(getter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -160,7 +164,7 @@
                     ensureSemicolon(0)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -168,7 +172,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, augment, null, null, null, null, null, augment, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -201,7 +205,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -209,7 +213,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -242,7 +246,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -259,7 +263,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, null, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -277,13 +281,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, null, null, null, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -291,8 +297,6 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, augment, null, null, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, const, ;)
                 listener: handleNoType(const)
@@ -301,13 +305,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, null, null, null, const, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -324,7 +330,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -341,7 +347,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -358,7 +364,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -375,7 +381,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -384,7 +390,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method, Class)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
@@ -406,7 +412,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -414,7 +420,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -436,7 +442,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -444,7 +450,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, static, null, null, null, static, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, static, null, null, null, static, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter, Class)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -462,6 +468,8 @@
                 parseFunctionBody(getter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -470,7 +478,7 @@
                     ensureSemicolon(null)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -478,7 +486,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, augment, null, static, null, null, null, static, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, static, null, null, null, static, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -498,6 +506,8 @@
                 parseFunctionBody(getter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -506,7 +516,7 @@
                     ensureSemicolon(0)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -514,7 +524,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter, Class)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -546,7 +556,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -554,7 +564,7 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -586,7 +596,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -603,7 +613,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, null, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -621,13 +631,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, static, null, null, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -635,8 +647,6 @@
                 listener: beginMetadataStar(augment)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, augment, null, static, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, const, ;)
                 listener: handleNoType(const)
@@ -645,13 +655,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, static, null, null, const, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -668,7 +680,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -685,7 +697,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, late, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -702,7 +714,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, late, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -719,7 +731,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, late, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 26, {, })
@@ -751,7 +763,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod({, null, augment, null, null, null, null, null, augment, NoType(), null, method, DeclarationKind.Mixin, Mixin, false)
+            parseMethod({, null, augment, null, null, null, null, null, augment, NoType(), null, null, method, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, null, method, Mixin)
               listener: handleNoType(augment)
               ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
@@ -774,7 +786,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(null, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, null, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -782,7 +794,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), null, method, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), null, null, method, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, null, method, Mixin)
               listener: handleVoidKeyword(void)
               ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -805,7 +817,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(null, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, null, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -813,7 +825,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, augment, null, null, null, null, null, augment, NoType(), get, getter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(}, null, augment, null, null, null, null, null, augment, NoType(), get, null, getter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, get, getter, Mixin)
               listener: handleNoType(augment)
               ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -832,6 +844,8 @@
               parseFunctionBody(getter, false, true)
                 parseExpressionFunctionBody(=>, false)
                   parseExpression(=>)
+                    looksLikeOuterPatternEquals(=>)
+                      skipOuterPattern(=>)
                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -840,7 +854,7 @@
                   ensureSemicolon(null)
                   listener: handleExpressionFunctionBody(=>, ;)
                   inGenerator()
-              listener: endMixinMethod(get, augment, =>, null, ;)
+              listener: endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -848,7 +862,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(;, null, augment, null, null, null, null, null, augment, SimpleType(), get, getter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(;, null, augment, null, null, null, null, null, augment, SimpleType(), get, null, getter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, get, getter, Mixin)
               listener: handleIdentifier(int, typeReference)
               listener: handleNoTypeArguments(get)
@@ -869,6 +883,8 @@
               parseFunctionBody(getter, false, true)
                 parseExpressionFunctionBody(=>, false)
                   parseExpression(=>)
+                    looksLikeOuterPatternEquals(=>)
+                      skipOuterPattern(=>)
                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -877,7 +893,7 @@
                   ensureSemicolon(0)
                   listener: handleExpressionFunctionBody(=>, ;)
                   inGenerator()
-              listener: endMixinMethod(get, augment, =>, null, ;)
+              listener: endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -885,7 +901,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(;, null, augment, null, null, null, null, null, augment, NoType(), set, setter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(;, null, augment, null, null, null, null, null, augment, NoType(), set, null, setter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, set, setter, Mixin)
               listener: handleNoType(augment)
               ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -918,7 +934,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(set, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, set, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -926,7 +942,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), set, setter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(}, null, augment, null, null, null, null, null, augment, VoidType(), set, null, setter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, null, null, null, set, setter, Mixin)
               listener: handleVoidKeyword(void)
               ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -959,7 +975,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(set, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, set, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -976,7 +992,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, var, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -994,13 +1010,15 @@
               parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Mixin, Mixin)
                 listener: beginFieldInitializer(=)
                 parseExpression(=)
+                  looksLikeOuterPatternEquals(=)
+                    skipOuterPattern(=)
                   parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(=, true, ConstantPatternContext.none)
                       parsePrimary(=, expression, ConstantPatternContext.none)
                         parseLiteralInt(=)
                           listener: handleLiteralInt(0)
                 listener: endFieldInitializer(=, 0)
-              listener: endMixinFields(null, augment, null, null, null, null, final, 1, augment, ;)
+              listener: endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, final, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1008,8 +1026,6 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            skipOuterPattern(const)
-              skipObjectPatternRest(field)
             parseFields(;, null, augment, null, null, null, null, const, const, NoType(), field, DeclarationKind.Mixin, Mixin, false)
               listener: beginFields(DeclarationKind.Mixin, null, augment, null, null, null, null, const, ;)
               listener: handleNoType(const)
@@ -1018,13 +1034,15 @@
               parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Mixin, Mixin)
                 listener: beginFieldInitializer(=)
                 parseExpression(=)
+                  looksLikeOuterPatternEquals(=)
+                    skipOuterPattern(=)
                   parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(=, true, ConstantPatternContext.none)
                       parsePrimary(=, expression, ConstantPatternContext.none)
                         parseLiteralInt(=)
                           listener: handleLiteralInt(0)
                 listener: endFieldInitializer(=, 0)
-              listener: endMixinFields(null, augment, null, null, null, null, const, 1, augment, ;)
+              listener: endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, const, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1041,7 +1059,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, null, null, null, null, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1058,7 +1076,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, null, null, late, var, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1075,7 +1093,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, null, null, late, final, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1092,7 +1110,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, null, null, late, null, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1101,7 +1119,7 @@
               listener: endMetadataStar(0)
             listener: beginMember()
             isReservedKeyword(()
-            parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), null, method, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), null, null, method, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, null, method, Mixin)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
@@ -1123,7 +1141,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(null, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, null, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -1131,7 +1149,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), null, method, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), null, null, method, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, null, method, Mixin)
               listener: handleVoidKeyword(void)
               ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -1153,7 +1171,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(null, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, null, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -1161,7 +1179,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, augment, null, static, null, null, null, static, NoType(), get, getter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(}, null, augment, null, static, null, null, null, static, NoType(), get, null, getter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, get, getter, Mixin)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -1179,6 +1197,8 @@
               parseFunctionBody(getter, false, false)
                 parseExpressionFunctionBody(=>, false)
                   parseExpression(=>)
+                    looksLikeOuterPatternEquals(=>)
+                      skipOuterPattern(=>)
                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1187,7 +1207,7 @@
                   ensureSemicolon(null)
                   listener: handleExpressionFunctionBody(=>, ;)
                   inGenerator()
-              listener: endMixinMethod(get, augment, =>, null, ;)
+              listener: endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1195,7 +1215,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(;, null, augment, null, static, null, null, null, static, SimpleType(), get, getter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(;, null, augment, null, static, null, null, null, static, SimpleType(), get, null, getter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, get, getter, Mixin)
               listener: handleIdentifier(int, typeReference)
               listener: handleNoTypeArguments(get)
@@ -1215,6 +1235,8 @@
               parseFunctionBody(getter, false, false)
                 parseExpressionFunctionBody(=>, false)
                   parseExpression(=>)
+                    looksLikeOuterPatternEquals(=>)
+                      skipOuterPattern(=>)
                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1223,7 +1245,7 @@
                   ensureSemicolon(0)
                   listener: handleExpressionFunctionBody(=>, ;)
                   inGenerator()
-              listener: endMixinMethod(get, augment, =>, null, ;)
+              listener: endMethod(DeclarationKind.Mixin, get, augment, =>, null, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1231,7 +1253,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), set, setter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), set, null, setter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, set, setter, Mixin)
               listener: handleNoType(static)
               ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1263,7 +1285,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(set, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, set, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -1271,7 +1293,7 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), set, setter, DeclarationKind.Mixin, Mixin, false)
+            parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), set, null, setter, DeclarationKind.Mixin, Mixin, false)
               listener: beginMethod(DeclarationKind.Mixin, augment, null, static, null, null, set, setter, Mixin)
               listener: handleVoidKeyword(void)
               ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1303,7 +1325,7 @@
                 listener: beginBlockFunctionBody({)
                 notEofOrType(CLOSE_CURLY_BRACKET, })
                 listener: endBlockFunctionBody(0, {, })
-              listener: endMixinMethod(set, augment, (, null, })
+              listener: endMethod(DeclarationKind.Mixin, set, augment, (, null, })
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Mixin, Mixin)
@@ -1320,7 +1342,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, var, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1338,13 +1360,15 @@
               parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Mixin, Mixin)
                 listener: beginFieldInitializer(=)
                 parseExpression(=)
+                  looksLikeOuterPatternEquals(=)
+                    skipOuterPattern(=)
                   parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(=, true, ConstantPatternContext.none)
                       parsePrimary(=, expression, ConstantPatternContext.none)
                         parseLiteralInt(=)
                           listener: handleLiteralInt(0)
                 listener: endFieldInitializer(=, 0)
-              listener: endMixinFields(null, augment, null, static, null, null, final, 1, augment, ;)
+              listener: endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, final, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1352,8 +1376,6 @@
               listener: beginMetadataStar(augment)
               listener: endMetadataStar(0)
             listener: beginMember()
-            skipOuterPattern(const)
-              skipObjectPatternRest(field)
             parseFields(;, null, augment, null, static, null, null, const, const, NoType(), field, DeclarationKind.Mixin, Mixin, false)
               listener: beginFields(DeclarationKind.Mixin, null, augment, null, static, null, null, const, ;)
               listener: handleNoType(const)
@@ -1362,13 +1384,15 @@
               parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Mixin, Mixin)
                 listener: beginFieldInitializer(=)
                 parseExpression(=)
+                  looksLikeOuterPatternEquals(=)
+                    skipOuterPattern(=)
                   parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(=, true, ConstantPatternContext.none)
                       parsePrimary(=, expression, ConstantPatternContext.none)
                         parseLiteralInt(=)
                           listener: handleLiteralInt(0)
                 listener: endFieldInitializer(=, 0)
-              listener: endMixinFields(null, augment, null, static, null, null, const, 1, augment, ;)
+              listener: endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, const, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1385,7 +1409,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, static, null, null, null, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1402,7 +1426,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, static, null, late, var, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1419,7 +1443,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, static, null, late, final, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, augment)
           parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Mixin, Mixin)
@@ -1436,7 +1460,7 @@
                 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: endFields(DeclarationKind.Mixin, null, augment, null, static, null, late, null, 1, augment, ;)
             listener: endMember()
           notEofOrType(CLOSE_CURLY_BRACKET, })
           listener: endClassOrMixinOrExtensionBody(DeclarationKind.Mixin, 26, {, })
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
index 69b0dfd..cfe322d 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.expect
@@ -272,7 +272,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -287,7 +287,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(null, augment, (, null, ;)
+          endMethod(DeclarationKind.Class, null, augment, (, null, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -302,7 +302,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(null, external, (, null, ;)
+          endMethod(DeclarationKind.Class, null, external, (, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -318,7 +318,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -333,7 +333,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(null, augment, (, null, ;)
+          endMethod(DeclarationKind.Class, null, augment, (, null, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -348,7 +348,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(null, external, (, null, ;)
+          endMethod(DeclarationKind.Class, null, external, (, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -363,7 +363,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -377,7 +377,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(get, augment, ;, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, ;, null, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -391,7 +391,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(get, external, ;, null, ;)
+          endMethod(DeclarationKind.Class, get, external, ;, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -408,7 +408,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -424,7 +424,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(get, augment, ;, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, ;, null, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -440,7 +440,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(get, external, ;, null, ;)
+          endMethod(DeclarationKind.Class, get, external, ;, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -463,7 +463,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -485,7 +485,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(set, augment, (, null, ;)
+          endMethod(DeclarationKind.Class, set, augment, (, null, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -507,7 +507,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(set, external, (, null, ;)
+          endMethod(DeclarationKind.Class, set, external, (, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -530,7 +530,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -552,7 +552,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(set, augment, (, null, ;)
+          endMethod(DeclarationKind.Class, set, augment, (, null, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -574,7 +574,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassMethod(set, external, (, null, ;)
+          endMethod(DeclarationKind.Class, set, external, (, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -584,7 +584,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -594,7 +594,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, external, null, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, external, null, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -604,7 +604,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, null, null, null, var, 1, external, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, null, null, var, 1, external, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -616,7 +616,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -626,7 +626,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, external, null, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, external, null, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -636,7 +636,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, null, null, null, final, 1, external, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, null, null, final, 1, external, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -648,7 +648,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -659,7 +659,7 @@
             handleIdentifier(field, fieldDeclaration)
             handleRecoverableError(Message[Template(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, ;)
+          endFields(DeclarationKind.Class, null, augment, external, null, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -670,7 +670,7 @@
             handleIdentifier(field, fieldDeclaration)
             handleRecoverableError(Message[Template(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, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, null, null, const, 1, external, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -682,7 +682,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -694,7 +694,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, external, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, external, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
@@ -706,7 +706,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, null, null, null, null, 1, external, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, null, null, null, 1, external, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -716,7 +716,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -725,7 +725,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -734,7 +734,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -744,7 +744,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -753,7 +753,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -762,7 +762,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -774,7 +774,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -785,7 +785,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -796,7 +796,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, null, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -812,7 +812,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -828,7 +828,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -844,7 +844,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, augment, (, null, })
+          endMethod(DeclarationKind.Class, null, augment, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -860,7 +860,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -875,7 +875,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -890,7 +890,7 @@
             handleAsyncModifier(null, null)
             handleLiteralNull(null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -907,7 +907,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, augment, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -924,7 +924,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -947,7 +947,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -970,7 +970,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, static, (, null, })
+          endMethod(DeclarationKind.Class, set, static, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -993,7 +993,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, augment, (, null, })
+          endMethod(DeclarationKind.Class, set, augment, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1016,7 +1016,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, static, (, null, })
+          endMethod(DeclarationKind.Class, set, static, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1026,7 +1026,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, null, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, var, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1036,7 +1036,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, var, 1, static, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1048,7 +1048,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, final, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1060,7 +1060,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, static, null, null, final, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, final, 1, static, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1072,7 +1072,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, const, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1084,7 +1084,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, const, 1, static, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1096,7 +1096,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1108,7 +1108,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, null, null, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, null, 1, static, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1118,7 +1118,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, late, var, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, late, var, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1128,7 +1128,7 @@
             handleNoType(var)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, late, var, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, late, var, 1, static, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1138,7 +1138,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, late, final, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, late, final, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1148,7 +1148,7 @@
             handleNoType(final)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, late, final, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, late, final, 1, static, ;)
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -1160,7 +1160,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, augment, null, static, null, late, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, augment, null, static, null, late, null, 1, augment, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1172,7 +1172,7 @@
             handleType(int, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, late, null, 1, static, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 65, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
index c053ef7..39b7c3e 100644
--- a/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/member_errors.dart.intertwined.expect
@@ -36,7 +36,7 @@
                 listener: handleRecoverableError(Message[Template(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, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod({, null, augment, null, null, null, null, null, augment, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
@@ -59,7 +59,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -70,7 +70,7 @@
                 listener: handleRecoverableError(Message[Template(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, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, external, null, null, null, null, external, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, null, method, Class)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
@@ -91,7 +91,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(null, augment, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -102,7 +102,7 @@
                 listener: handleRecoverableError(Message[Template(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, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, external, null, null, null, null, augment, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, method, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
@@ -123,7 +123,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(null, external, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, external, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -133,7 +133,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -156,7 +156,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -166,7 +166,7 @@
               reportRecoverableError(external, Message[Template(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[Template(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, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, external, null, null, null, null, external, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -187,7 +187,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(null, augment, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -197,7 +197,7 @@
               reportRecoverableError(augment, Message[Template(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[Template(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, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, external, null, null, null, null, augment, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -218,7 +218,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(null, external, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, external, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -228,7 +228,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -247,6 +247,8 @@
                 parseFunctionBody(getter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -255,7 +257,7 @@
                     ensureSemicolon(null)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -265,7 +267,7 @@
               reportRecoverableError(external, Message[Template(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[Template(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, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, external, null, null, null, null, external, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, get, getter, Class)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -283,7 +285,7 @@
                 inPlainSync()
                 parseFunctionBody(getter, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(get, augment, ;, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, ;, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -293,7 +295,7 @@
               reportRecoverableError(augment, Message[Template(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[Template(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, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, external, null, null, null, null, augment, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, get, getter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -311,7 +313,7 @@
                 inPlainSync()
                 parseFunctionBody(getter, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(get, external, ;, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, external, ;, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -321,7 +323,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -342,6 +344,8 @@
                 parseFunctionBody(getter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -350,7 +354,7 @@
                     ensureSemicolon(0)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -360,7 +364,7 @@
               reportRecoverableError(external, Message[Template(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[Template(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, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, external, null, null, null, null, external, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -380,7 +384,7 @@
                 inPlainSync()
                 parseFunctionBody(getter, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(get, augment, ;, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, ;, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -390,7 +394,7 @@
               reportRecoverableError(augment, Message[Template(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[Template(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, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, external, null, null, null, null, augment, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -410,7 +414,7 @@
                 inPlainSync()
                 parseFunctionBody(getter, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(get, external, ;, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, external, ;, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -420,7 +424,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -453,7 +457,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -463,7 +467,7 @@
               reportRecoverableError(external, Message[Template(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[Template(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, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, external, null, null, null, null, external, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, set, setter, Class)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -494,7 +498,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(set, augment, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -504,7 +508,7 @@
               reportRecoverableError(augment, Message[Template(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[Template(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, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, external, null, null, null, null, augment, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, set, setter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -535,7 +539,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(set, external, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, external, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -545,7 +549,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, null, null, null, null, augment, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, null, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -578,7 +582,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -588,7 +592,7 @@
               reportRecoverableError(external, Message[Template(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[Template(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, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, external, null, null, null, null, external, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, external, null, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -619,7 +623,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(set, augment, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -629,7 +633,7 @@
               reportRecoverableError(augment, Message[Template(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[Template(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, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, external, null, null, null, null, augment, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -660,7 +664,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassMethod(set, external, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, external, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -679,7 +683,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, null, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -698,7 +702,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, external, null, null, null, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -717,7 +721,7 @@
                   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: endFields(DeclarationKind.Class, null, null, external, null, null, null, var, 1, external, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -737,13 +741,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, null, null, null, final, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, null, null, null, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -762,7 +768,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, external, null, null, null, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -781,7 +787,7 @@
                   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: endFields(DeclarationKind.Class, null, null, external, null, null, null, final, 1, external, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -791,8 +797,6 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(DuplicatedModifier), The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, augment, null, null, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, augment, null, null, null, null, const, ;)
                 listener: handleNoType(const)
@@ -801,13 +805,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, null, null, null, const, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, null, null, null, const, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -817,8 +823,6 @@
               reportRecoverableError(external, Message[Template(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[Template(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()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, augment, external, null, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, augment, external, null, null, null, const, ;)
                 listener: handleNoType(const)
@@ -828,7 +832,7 @@
                   reportRecoverableError(field, Message[Template(ConstFieldWithoutInitializer), The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}])
                     listener: handleRecoverableError(Message[Template(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: endFields(DeclarationKind.Class, null, augment, external, null, null, null, const, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -838,8 +842,6 @@
               reportRecoverableError(augment, Message[Template(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[Template(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()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, null, external, null, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, null, external, null, null, null, const, ;)
                 listener: handleNoType(const)
@@ -849,7 +851,7 @@
                   reportRecoverableError(field, Message[Template(ConstFieldWithoutInitializer), The const variable 'field' must be initialized., Try adding an initializer ('= expression') to the declaration., {name: field}])
                     listener: handleRecoverableError(Message[Template(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: endFields(DeclarationKind.Class, null, null, external, null, null, null, const, 1, external, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -868,7 +870,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -887,7 +889,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, external, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -906,7 +908,7 @@
                   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: endFields(DeclarationKind.Class, null, null, external, null, null, null, null, 1, external, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -925,7 +927,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -942,7 +944,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -959,7 +961,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -978,7 +980,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -995,7 +997,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1012,7 +1014,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1031,7 +1033,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1048,7 +1050,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1065,7 +1067,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, null, null, late, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1076,7 +1078,7 @@
                 listener: handleRecoverableError(Message[Template(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, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method, Class)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
@@ -1098,7 +1100,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1109,7 +1111,7 @@
                 listener: handleRecoverableError(Message[Template(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, NoType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, static, null, null, null, augment, NoType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, method, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(augment, methodDeclaration, false)
@@ -1131,7 +1133,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1141,7 +1143,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -1163,7 +1165,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1173,7 +1175,7 @@
               reportRecoverableError(augment, Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
                 listener: handleRecoverableError(Message[Template(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, VoidType(), null, method, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, static, null, null, null, augment, VoidType(), null, null, method, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, method, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -1195,7 +1197,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1205,7 +1207,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, static, null, null, null, static, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter, Class)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -1223,6 +1225,8 @@
                 parseFunctionBody(getter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1231,7 +1235,7 @@
                     ensureSemicolon(null)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1241,7 +1245,7 @@
               reportRecoverableError(augment, Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
                 listener: handleRecoverableError(Message[Template(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, NoType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, static, null, null, null, augment, NoType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, getter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -1259,6 +1263,8 @@
                 parseFunctionBody(getter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1267,7 +1273,7 @@
                     ensureSemicolon(null)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1277,7 +1283,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, static, null, null, null, static, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -1297,6 +1303,8 @@
                 parseFunctionBody(getter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1305,7 +1313,7 @@
                     ensureSemicolon(0)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, augment, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, augment, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1315,7 +1323,7 @@
               reportRecoverableError(augment, Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
                 listener: handleRecoverableError(Message[Template(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, SimpleType(), get, getter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, static, null, null, null, augment, SimpleType(), get, null, getter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, getter, Class)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -1335,6 +1343,8 @@
                 parseFunctionBody(getter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1343,7 +1353,7 @@
                     ensureSemicolon(0)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1353,7 +1363,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, augment, null, static, null, null, null, static, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter, Class)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1385,7 +1395,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1395,7 +1405,7 @@
               reportRecoverableError(augment, Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
                 listener: handleRecoverableError(Message[Template(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, NoType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, static, null, null, null, augment, NoType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, set, setter, Class)
                 listener: handleNoType(augment)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1427,7 +1437,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1437,7 +1447,7 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(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, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, augment, null, static, null, null, null, static, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, augment, null, static, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1469,7 +1479,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, augment, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, augment, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1479,7 +1489,7 @@
               reportRecoverableError(augment, Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
                 listener: handleRecoverableError(Message[Template(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, VoidType(), set, setter, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, static, null, null, null, augment, VoidType(), set, null, setter, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, set, setter, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1511,7 +1521,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1530,7 +1540,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, null, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1549,7 +1559,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, static, null, null, var, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1569,13 +1579,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, static, null, null, final, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, static, null, null, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1595,13 +1607,15 @@
                 parseFieldInitializerOpt(field, field, null, null, null, null, final, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, static, null, null, final, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, final, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1611,8 +1625,6 @@
               reportRecoverableErrorWithToken(augment, Template(DuplicatedModifier))
                 listener: handleRecoverableError(Message[Template(DuplicatedModifier), The modifier 'augment' was already specified., Try removing all but one occurrence of the modifier., {lexeme: augment}], augment, augment)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, augment, null, static, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, augment, null, static, null, null, const, ;)
                 listener: handleNoType(const)
@@ -1621,13 +1633,15 @@
                 parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, augment, null, static, null, null, const, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, augment, null, static, null, null, const, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1637,8 +1651,6 @@
               reportRecoverableError(augment, Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}])
                 listener: handleRecoverableError(Message[Template(ModifierOutOfOrder), The modifier 'augment' should be before the modifier 'static'., Try re-ordering the modifiers., {string: augment, string2: static}], augment, augment)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(field)
               parseFields(;, null, null, null, static, null, null, const, const, NoType(), field, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, const, ;)
                 listener: handleNoType(const)
@@ -1647,13 +1659,15 @@
                 parseFieldInitializerOpt(field, field, null, null, null, null, const, DeclarationKind.Class, Class)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, const, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1672,7 +1686,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1691,7 +1705,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, static, null, null, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1710,7 +1724,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, late, var, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1729,7 +1743,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, static, null, late, var, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1748,7 +1762,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, late, final, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1767,7 +1781,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, static, null, late, final, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1786,7 +1800,7 @@
                   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: endFields(DeclarationKind.Class, null, augment, null, static, null, late, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1805,7 +1819,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, static, null, late, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 65, {, })
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
index baad7b3..870d237 100644
--- a/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_declarations.dart.intertwined.expect
@@ -79,6 +79,8 @@
         parseFunctionBody(getter, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -112,6 +114,8 @@
         parseFunctionBody(getter, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -230,6 +234,8 @@
         parseFieldInitializerOpt(field, field, null, null, augment, null, final, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -244,8 +250,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(augment)
-      skipOuterPattern(const)
-        skipObjectPatternRest(field)
       parseFields(;, null, augment, null, null, null, null, const, const, NoType(), field, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, augment, null, null, null, null, const, ;)
         listener: handleNoType(const)
@@ -254,6 +258,8 @@
         parseFieldInitializerOpt(field, field, null, null, augment, null, const, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
index d68c295..8e4ee4b 100644
--- a/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/augmentation/top_level_errors.dart.intertwined.expect
@@ -195,6 +195,8 @@
         parseFunctionBody(getter, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -280,6 +282,8 @@
         parseFunctionBody(getter, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -646,6 +650,8 @@
         parseFieldInitializerOpt(field, field, null, null, augment, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/bar_eq.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/bar_eq.dart.intertwined.expect
index 89c5553..52c4dcd 100644
--- a/pkg/front_end/parser_testcases/coverage/bar_eq.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/bar_eq.dart.intertwined.expect
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(bar)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/interpolated_eof.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/interpolated_eof.dart.intertwined.expect
index 42dbf2b..320baf1 100644
--- a/pkg/front_end/parser_testcases/coverage/interpolated_eof.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/interpolated_eof.dart.intertwined.expect
@@ -32,6 +32,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -47,6 +50,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -54,6 +59,8 @@
                                               parseSingleLiteralString(()
                                                 listener: beginLiteralString(")
                                                 parseExpression(${)
+                                                  looksLikeOuterPatternEquals(${)
+                                                    skipOuterPattern(${)
                                                   parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                       parsePrimary(${, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/numbers.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/numbers.dart.intertwined.expect
index 87bc57a..b40f1e4 100644
--- a/pkg/front_end/parser_testcases/coverage/numbers.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/numbers.dart.intertwined.expect
@@ -33,6 +33,8 @@
                   looksLikeLocalFunction(12_e0)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +50,8 @@
                   looksLikeLocalFunction(12_E0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -63,6 +67,8 @@
                   looksLikeLocalFunction(12_)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -90,6 +96,8 @@
                   looksLikeLocalFunction(12_)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -105,6 +113,8 @@
                   looksLikeLocalFunction(0x_0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -120,6 +130,8 @@
                   looksLikeLocalFunction(0xA_)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -135,6 +147,8 @@
                   looksLikeLocalFunction(.1)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -150,6 +164,8 @@
                   looksLikeLocalFunction(1.2_)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -165,6 +181,8 @@
                   looksLikeLocalFunction(1.2_e0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -180,6 +198,8 @@
                   looksLikeLocalFunction(1.2_E0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -195,6 +215,8 @@
                   looksLikeLocalFunction(1.2e_0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -210,6 +232,8 @@
                   looksLikeLocalFunction(1.2E_0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -225,6 +249,8 @@
                   looksLikeLocalFunction(1.2e-_0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -240,6 +266,8 @@
                   looksLikeLocalFunction(1.2E-_0)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -255,6 +283,8 @@
                   looksLikeLocalFunction(1.2e-1_)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -270,6 +300,8 @@
                   looksLikeLocalFunction(1.2E-1_)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/slash_eq.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/slash_eq.dart.intertwined.expect
index b4b79753..da57827 100644
--- a/pkg/front_end/parser_testcases/coverage/slash_eq.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/slash_eq.dart.intertwined.expect
@@ -45,6 +45,9 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(bar)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/string1.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/string1.dart.intertwined.expect
index b93e8b6e..04ec0f2 100644
--- a/pkg/front_end/parser_testcases/coverage/string1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/string1.dart.intertwined.expect
@@ -45,6 +45,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -101,6 +103,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -149,6 +153,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -208,6 +214,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -256,6 +264,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -304,6 +314,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/string2.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/string2.dart.intertwined.expect
index 7f1a99f..c05e70e 100644
--- a/pkg/front_end/parser_testcases/coverage/string2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/string2.dart.intertwined.expect
@@ -43,6 +43,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -100,6 +102,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -146,6 +150,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -192,6 +198,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -248,6 +256,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/string3.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/string3.dart.intertwined.expect
index c58feda..7510958 100644
--- a/pkg/front_end/parser_testcases/coverage/string3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/string3.dart.intertwined.expect
@@ -31,6 +31,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/coverage/string4.dart.intertwined.expect b/pkg/front_end/parser_testcases/coverage/string4.dart.intertwined.expect
index b794ed9..ae94964 100644
--- a/pkg/front_end/parser_testcases/coverage/string4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/coverage/string4.dart.intertwined.expect
@@ -31,6 +31,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -78,6 +80,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.expect b/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.expect
deleted file mode 100644
index ced164c..0000000
--- a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.expect
+++ /dev/null
@@ -1,451 +0,0 @@
-Problems reported:
-
-parser/declaring_constructors/class_primary_constructor_error:1:11: Named parameter lists cannot be empty.
-class C( {}
-          ^
-
-parser/declaring_constructors/class_primary_constructor_error:2:1: Expected ')' before this.
-class C) {}
-^^^^^
-
-parser/declaring_constructors/class_primary_constructor_error:3:10: Expected an identifier, but got '{'.
-class C. {}
-         ^
-
-parser/declaring_constructors/class_primary_constructor_error:4:9: Expected an identifier, but got '('.
-class C.() {}
-        ^
-
-parser/declaring_constructors/class_primary_constructor_error:5:7: 'const' can only be used together with a primary constructor declaration.
-class const C {}
-      ^^^^^
-
-parser/declaring_constructors/class_primary_constructor_error:6:14: Named parameter lists cannot be empty.
-class C<T>( {}
-             ^
-
-parser/declaring_constructors/class_primary_constructor_error:7:1: Expected ')' before this.
-class C<T>) {}
-^^^^^
-
-parser/declaring_constructors/class_primary_constructor_error:8:7: 'const' can only be used together with a primary constructor declaration.
-class const C<T> {}
-      ^^^^^
-
-parser/declaring_constructors/class_primary_constructor_error:9:13: Expected an identifier, but got '{'.
-class C<T>. {}
-            ^
-
-parser/declaring_constructors/class_primary_constructor_error:10:12: Expected an identifier, but got '('.
-class C<T>.() {}
-           ^
-
-parser/declaring_constructors/class_primary_constructor_error:11:19: Expected an identifier, but got '{'.
-class const C<T>. {}
-                  ^
-
-parser/declaring_constructors/class_primary_constructor_error:12:18: Expected an identifier, but got '('.
-class const C<T>.() {}
-                 ^
-
-parser/declaring_constructors/class_primary_constructor_error:16:7: 'const' can only be used together with a primary constructor declaration.
-class const C = O with M;
-      ^^^^^
-
-parser/declaring_constructors/class_primary_constructor_error:17:7: 'const' can only be used together with a primary constructor declaration.
-class const C<T> = O with M;
-      ^^^^^
-
-beginCompilationUnit(class)
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginOptionalFormalParameters({)
-            handleRecoverableError(EmptyNamedParameterList, }, })
-            beginMetadataStar()
-            endMetadataStar(0)
-            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
-              handleNoType({)
-              handleIdentifier(, formalParameterDeclaration)
-              handleFormalParameterWithoutValue(})
-            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
-          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
-          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], class, class)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(.)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleNoType()
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(.)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
-      handleNoPrimaryConstructor(C, const, false)
-      handleNoType(C)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginOptionalFormalParameters({)
-            handleRecoverableError(EmptyNamedParameterList, }, })
-            beginMetadataStar()
-            endMetadataStar(0)
-            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
-              handleNoType({)
-              handleIdentifier(, formalParameterDeclaration)
-              handleFormalParameterWithoutValue(})
-            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
-          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
-          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], class, class)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
-      handleNoPrimaryConstructor(>, const, false)
-      handleNoType(>)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleNoType()
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, false)
-      handleNoType()
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleNoType(named)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, false)
-      handleNoType(named)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(=)
-    handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
-    beginNamedMixinApplication(class, null, null, null, null, null, null, null, null, C)
-      handleIdentifier(O, typeReference)
-      handleNoTypeArguments(with)
-      handleType(O, null)
-      beginTypeList(M)
-        handleIdentifier(M, typeReference)
-        handleNoTypeArguments(;)
-        handleType(M, null)
-      endTypeList(1)
-      handleNamedMixinApplicationWithClause(with)
-    endNamedMixinApplication(class, class, =, null, ;)
-  endTopLevelDeclaration(;)
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
-    beginNamedMixinApplication(class, null, null, null, null, null, null, null, null, C)
-      handleIdentifier(O, typeReference)
-      handleNoTypeArguments(with)
-      handleType(O, null)
-      beginTypeList(M)
-        handleIdentifier(M, typeReference)
-        handleNoTypeArguments(;)
-        handleType(M, null)
-      endTypeList(1)
-      handleNamedMixinApplicationWithClause(with)
-    endNamedMixinApplication(class, class, =, null, ;)
-  endTopLevelDeclaration(;)
-endCompilationUnit(15, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect
deleted file mode 100644
index fcb91e6..0000000
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.expect
+++ /dev/null
@@ -1,1125 +0,0 @@
-Problems reported:
-
-parser/declaring_constructors/declaring_parameter_error:1:3: Variables can't be declared using both 'var' and a type name.
-m(var a b) {}
-  ^^^
-
-parser/declaring_constructors/declaring_parameter_error:4:5: Variables can't be declared using both 'var' and a type name.
-  C(var a b) {}
-    ^^^
-
-parser/declaring_constructors/declaring_parameter_error:7:9: Can't have modifier 'covariant' in a primary constructor.
-class C(covariant a) {}
-        ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:8:9: Can't have modifier 'covariant' in a primary constructor.
-class C(covariant a b) {}
-        ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:9:9: Can't have modifier 'covariant' in a primary constructor.
-class C(covariant var a) {}
-        ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:10:9: Can't have modifier 'covariant' in a primary constructor.
-class C(covariant final a) {}
-        ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:11:9: Can't have modifier 'covariant' in a primary constructor.
-class C(covariant var a b) {}
-        ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:12:9: Can't have modifier 'covariant' in a primary constructor.
-class C(covariant final a b) {}
-        ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:13:9: Can't have modifier 'const' here.
-class C(const f()) {}
-        ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:14:9: Can't have modifier 'const' here.
-class C(const f<T>()) {}
-        ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:15:9: Can't have modifier 'const' here.
-class C(const void f()) {}
-        ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:16:9: Can't have modifier 'const' here.
-class C(const void f<T>()) {}
-        ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:18:8: Can't have modifier 'covariant' in a primary constructor.
-enum E(covariant a) {}
-       ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:19:8: Can't have modifier 'covariant' in a primary constructor.
-enum E(covariant a b) {}
-       ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:20:8: Can't have modifier 'covariant' in a primary constructor.
-enum E(covariant var a) {}
-       ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:21:8: Can't have modifier 'covariant' in a primary constructor.
-enum E(covariant final a) {}
-       ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:22:8: Can't have modifier 'covariant' in a primary constructor.
-enum E(covariant var a b) {}
-       ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:23:8: Can't have modifier 'covariant' in a primary constructor.
-enum E(covariant final a b) {}
-       ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:24:8: Can't have modifier 'const' here.
-enum E(const f()) {}
-       ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:25:8: Can't have modifier 'const' here.
-enum E(const f<T>()) {}
-       ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:26:8: Can't have modifier 'const' here.
-enum E(const void f()) {}
-       ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:27:8: Can't have modifier 'const' here.
-enum E(const void f<T>()) {}
-       ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:30:6: Variables can't be declared using both 'var' and a type name.
-  ET(var a b) {}
-     ^^^
-
-parser/declaring_constructors/declaring_parameter_error:33:19: Can't have modifier 'covariant' in a primary constructor.
-extension type ET(covariant a) {}
-                  ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:34:19: Can't have modifier 'covariant' in a primary constructor.
-extension type ET(covariant a b) {}
-                  ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:35:19: Can't have modifier 'covariant' in a primary constructor.
-extension type ET(covariant var a) {}
-                  ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:36:19: Can't have modifier 'covariant' in a primary constructor.
-extension type ET(covariant final a) {}
-                  ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:37:19: Can't have modifier 'covariant' in a primary constructor.
-extension type ET(covariant var a b) {}
-                  ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:38:19: Can't have modifier 'covariant' in a primary constructor.
-extension type ET(covariant final a b) {}
-                  ^^^^^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:39:19: Can't have modifier 'const' here.
-extension type ET(const f()) {}
-                  ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:40:19: Can't have modifier 'const' here.
-extension type ET(const f<T>()) {}
-                  ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:41:19: Can't have modifier 'const' here.
-extension type ET(const void f()) {}
-                  ^^^^^
-
-parser/declaring_constructors/declaring_parameter_error:42:19: Can't have modifier 'const' here.
-extension type ET(const void f<T>()) {}
-                  ^^^^^
-
-beginCompilationUnit(m)
-  beginMetadataStar(m)
-  endMetadataStar(0)
-  beginTopLevelMember(m)
-    beginTopLevelMethod(, null, null)
-      handleNoType()
-      handleIdentifier(m, topLevelFunctionDeclaration)
-      handleNoTypeVariables(()
-      beginFormalParameters((, MemberKind.TopLevelMethod)
-        beginMetadataStar(var)
-        endMetadataStar(0)
-        beginFormalParameter(var, MemberKind.TopLevelMethod, null, null, var)
-          handleRecoverableError(TypeAfterVar, var, var)
-          handleIdentifier(a, typeReference)
-          handleNoTypeArguments(b)
-          handleType(a, null)
-          handleIdentifier(b, formalParameterDeclaration)
-          handleFormalParameterWithoutValue())
-        endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
-      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-      handleAsyncModifier(null, null)
-      beginBlockFunctionBody({)
-      endBlockFunctionBody(0, {, })
-    endTopLevelMethod(m, null, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables({)
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      handleNoPrimaryConstructor(C, null, false)
-      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, C)
-            handleNoType({)
-            handleIdentifier(C, methodDeclaration)
-            handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.NonStaticMethod)
-              beginMetadataStar(var)
-              endMetadataStar(0)
-              beginFormalParameter(var, MemberKind.NonStaticMethod, null, null, var)
-                handleRecoverableError(TypeAfterVar, var, var)
-                handleIdentifier(a, typeReference)
-                handleNoTypeArguments(b)
-                handleType(a, null)
-                handleIdentifier(b, formalParameterDeclaration)
-                handleFormalParameterWithoutValue())
-              endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-            handleNoInitializers()
-            handleAsyncModifier(null, null)
-            beginBlockFunctionBody({)
-            endBlockFunctionBody(0, {, })
-          endClassConstructor(null, C, (, null, })
-        endMember()
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-            handleNoType(covariant)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-            handleNoType(var)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-            handleNoType(final)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(const)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(const)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-            handleNoType(covariant)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-            handleNoType(var)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-            handleNoType(final)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(const)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(const)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(int)
-          endMetadataStar(0)
-          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
-            handleIdentifier(int, typeReference)
-            handleNoTypeArguments(i)
-            handleType(int, null)
-            handleIdentifier(i, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-        beginMetadataStar(ET)
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, ET, ET)
-            handleNoType({)
-            handleIdentifier(ET, methodDeclaration)
-            handleNoTypeVariables(()
-            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
-              beginMetadataStar(var)
-              endMetadataStar(0)
-              beginFormalParameter(var, MemberKind.ExtensionTypeNonStaticMethod, null, null, var)
-                handleRecoverableError(TypeAfterVar, var, var)
-                handleIdentifier(a, typeReference)
-                handleNoTypeArguments(b)
-                handleType(a, null)
-                handleIdentifier(b, formalParameterDeclaration)
-                handleFormalParameterWithoutValue())
-              endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
-            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
-            handleNoInitializers()
-            handleAsyncModifier(null, null)
-            beginBlockFunctionBody({)
-            endBlockFunctionBody(0, {, })
-          endExtensionTypeConstructor(null, ET, (, null, })
-        endMember()
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-            handleNoType(covariant)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-            handleNoType(var)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-            handleNoType(final)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(covariant)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(const)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(const)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(const)
-          endMetadataStar(0)
-          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect
deleted file mode 100644
index 4b0f9d0..0000000
--- a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.intertwined.expect
+++ /dev/null
@@ -1,1596 +0,0 @@
-parseUnit(m)
-  skipErrorTokens(m)
-  listener: beginCompilationUnit(m)
-  syntheticPreviousToken(m)
-  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
-    parseMetadataStar()
-      listener: beginMetadataStar(m)
-      listener: endMetadataStar(0)
-    parseTopLevelMemberImpl()
-      listener: beginTopLevelMember(m)
-      isReservedKeyword(()
-      parseTopLevelMethod(, null, null, , NoType(), null, m, false)
-        listener: beginTopLevelMethod(, null, null)
-        listener: handleNoType()
-        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
-          listener: handleIdentifier(m, topLevelFunctionDeclaration)
-        parseMethodTypeVar(m)
-          listener: handleNoTypeVariables(()
-        parseGetterOrFormalParameters(m, m, false, MemberKind.TopLevelMethod)
-          parseFormalParameters(m, MemberKind.TopLevelMethod)
-            parseFormalParametersRest((, MemberKind.TopLevelMethod)
-              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.TopLevelMethod, null, null, var)
-                reportRecoverableError(var, TypeAfterVar)
-                  listener: handleRecoverableError(TypeAfterVar, var, var)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
-              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
-        parseAsyncModifierOpt())
-          listener: handleAsyncModifier(null, null)
-          inPlainSync()
-        parseFunctionBody(), false, false)
-          listener: beginBlockFunctionBody({)
-          notEofOrType(CLOSE_CURLY_BRACKET, })
-          listener: endBlockFunctionBody(0, {, })
-        listener: endTopLevelMethod(m, null, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables({)
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: handleNoPrimaryConstructor(C, null, false)
-          parseClassHeaderOpt(C, class, class)
-            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
-              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, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, C)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
-              parseMetadataStar({)
-                listener: beginMetadataStar(C)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, 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.requiredPositional, MemberKind.NonStaticMethod)
-                        parseMetadataStar(()
-                          listener: beginMetadataStar(var)
-                          listener: endMetadataStar(0)
-                        listener: beginFormalParameter(var, MemberKind.NonStaticMethod, null, null, var)
-                        reportRecoverableError(var, TypeAfterVar)
-                          listener: handleRecoverableError(TypeAfterVar, var, var)
-                        listener: handleIdentifier(a, typeReference)
-                        listener: handleNoTypeArguments(b)
-                        listener: handleType(a, null)
-                        ensureIdentifier(a, formalParameterDeclaration)
-                          listener: handleIdentifier(b, formalParameterDeclaration)
-                        listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
-                  inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  listener: beginBlockFunctionBody({)
-                  notEofOrType(CLOSE_CURLY_BRACKET, })
-                  listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, C, (, null, })
-              listener: endMember()
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-                  listener: handleNoType(covariant)
-                  ensureIdentifier(covariant, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-                  listener: handleNoType(var)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-                  listener: handleNoType(final)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleNoType(const)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(const, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleNoType(const)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(const, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(covariant)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-                listener: handleNoType(covariant)
-                ensureIdentifier(covariant, formalParameterDeclaration)
-                  listener: handleIdentifier(a, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(covariant)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(covariant)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-                listener: handleNoType(var)
-                ensureIdentifier(var, formalParameterDeclaration)
-                  listener: handleIdentifier(a, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(covariant)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-                listener: handleNoType(final)
-                ensureIdentifier(final, formalParameterDeclaration)
-                  listener: handleIdentifier(a, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(covariant)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(covariant)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(const)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                listener: handleNoTypeVariables(()
-                listener: beginFunctionTypedFormalParameter(()
-                listener: handleNoType(const)
-                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(const, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(const)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                listener: beginTypeVariables(<)
-                listener: beginMetadataStar(T)
-                listener: endMetadataStar(0)
-                listener: handleIdentifier(T, typeVariableDeclaration)
-                listener: beginTypeVariable(T)
-                listener: handleTypeVariablesDefined(T, 1)
-                listener: handleNoType(T)
-                listener: endTypeVariable(>, 0, null, null)
-                listener: endTypeVariables(<, >)
-                listener: beginFunctionTypedFormalParameter(<)
-                listener: handleNoType(const)
-                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(const, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(const)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                listener: handleNoTypeVariables(()
-                listener: beginFunctionTypedFormalParameter(()
-                listener: handleVoidKeyword(void)
-                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(void, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(const)
-                  listener: endMetadataStar(0)
-                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                listener: beginTypeVariables(<)
-                listener: beginMetadataStar(T)
-                listener: endMetadataStar(0)
-                listener: handleIdentifier(T, typeVariableDeclaration)
-                listener: beginTypeVariable(T)
-                listener: handleTypeVariablesDefined(T, 1)
-                listener: handleNoType(T)
-                listener: endTypeVariable(>, 0, null, null)
-                listener: endTypeVariables(<, >)
-                listener: beginFunctionTypedFormalParameter(<)
-                listener: handleVoidKeyword(void)
-                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(void, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(int)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
-                  listener: handleIdentifier(int, typeReference)
-                  listener: handleNoTypeArguments(i)
-                  listener: handleType(int, null)
-                  ensureIdentifier(int, formalParameterDeclaration)
-                    listener: handleIdentifier(i, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, ET)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, ET)
-              parseMetadataStar({)
-                listener: beginMetadataStar(ET)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, ET, DeclarationKind.ExtensionType, ET, false)
-                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, ET, ET)
-                listener: handleNoType({)
-                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
-                  listener: handleIdentifier(ET, methodDeclaration)
-                parseQualifiedRestOpt(ET, methodDeclarationContinuation)
-                parseMethodTypeVar(ET)
-                  listener: handleNoTypeVariables(()
-                parseGetterOrFormalParameters(ET, ET, false, MemberKind.ExtensionTypeNonStaticMethod)
-                  parseFormalParameters(ET, MemberKind.ExtensionTypeNonStaticMethod)
-                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
-                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
-                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
-                        parseMetadataStar(()
-                          listener: beginMetadataStar(var)
-                          listener: endMetadataStar(0)
-                        listener: beginFormalParameter(var, MemberKind.ExtensionTypeNonStaticMethod, null, null, var)
-                        reportRecoverableError(var, TypeAfterVar)
-                          listener: handleRecoverableError(TypeAfterVar, var, var)
-                        listener: handleIdentifier(a, typeReference)
-                        listener: handleNoTypeArguments(b)
-                        listener: handleType(a, null)
-                        ensureIdentifier(a, formalParameterDeclaration)
-                          listener: handleIdentifier(b, formalParameterDeclaration)
-                        listener: handleFormalParameterWithoutValue())
-                        listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
-                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
-                parseInitializersOpt())
-                  listener: handleNoInitializers()
-                parseAsyncModifierOpt())
-                  listener: handleAsyncModifier(null, null)
-                  inPlainSync()
-                inPlainSync()
-                parseFunctionBody(), false, true)
-                  listener: beginBlockFunctionBody({)
-                  notEofOrType(CLOSE_CURLY_BRACKET, })
-                  listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeConstructor(null, ET, (, null, })
-              listener: endMember()
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-                  listener: handleNoType(covariant)
-                  ensureIdentifier(covariant, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-                  listener: handleNoType(var)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-                  listener: handleNoType(final)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(covariant)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
-                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleNoType(const)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(const, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleNoType(const)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(const, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(const)
-                    listener: endMetadataStar(0)
-                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
-                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
-                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  reportAllErrorTokens(m)
-  listener: endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.expect b/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.expect
deleted file mode 100644
index 0d826ee..0000000
--- a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.expect
+++ /dev/null
@@ -1,386 +0,0 @@
-Problems reported:
-
-parser/declaring_constructors/enum_primary_constructor_error:1:10: Named parameter lists cannot be empty.
-enum E( {}
-         ^
-
-parser/declaring_constructors/enum_primary_constructor_error:2:1: Expected ')' before this.
-enum E) {}
-^^^^
-
-parser/declaring_constructors/enum_primary_constructor_error:3:9: Expected an identifier, but got '{'.
-enum E. {}
-        ^
-
-parser/declaring_constructors/enum_primary_constructor_error:4:8: Expected an identifier, but got '('.
-enum E.() {}
-       ^
-
-parser/declaring_constructors/enum_primary_constructor_error:5:6: 'const' can only be used together with a primary constructor declaration.
-enum const E {}
-     ^^^^^
-
-parser/declaring_constructors/enum_primary_constructor_error:6:13: Named parameter lists cannot be empty.
-enum E<T>( {}
-            ^
-
-parser/declaring_constructors/enum_primary_constructor_error:7:1: Expected ')' before this.
-enum E<T>) {}
-^^^^
-
-parser/declaring_constructors/enum_primary_constructor_error:8:6: 'const' can only be used together with a primary constructor declaration.
-enum const E<T> {}
-     ^^^^^
-
-parser/declaring_constructors/enum_primary_constructor_error:9:12: Expected an identifier, but got '{'.
-enum E<T>. {}
-           ^
-
-parser/declaring_constructors/enum_primary_constructor_error:10:11: Expected an identifier, but got '('.
-enum E<T>.() {}
-          ^
-
-parser/declaring_constructors/enum_primary_constructor_error:11:18: Expected an identifier, but got '{'.
-enum const E<T>. {}
-                 ^
-
-parser/declaring_constructors/enum_primary_constructor_error:12:17: Expected an identifier, but got '('.
-enum const E<T>.() {}
-                ^
-
-beginCompilationUnit(enum)
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginOptionalFormalParameters({)
-            handleRecoverableError(EmptyNamedParameterList, }, })
-            beginMetadataStar()
-            endMetadataStar(0)
-            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
-              handleNoType({)
-              handleIdentifier(, formalParameterDeclaration)
-              handleFormalParameterWithoutValue(})
-            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
-          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
-          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], enum, enum)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(.)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(.)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables({)
-    beginEnumDeclaration(enum, null, enum, E)
-      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
-      handleNoPrimaryConstructor(E, const, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginOptionalFormalParameters({)
-            handleRecoverableError(EmptyNamedParameterList, }, })
-            beginMetadataStar()
-            endMetadataStar(0)
-            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
-              handleNoType({)
-              handleIdentifier(, formalParameterDeclaration)
-              handleFormalParameterWithoutValue(})
-            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
-          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
-          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], enum, enum)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
-      handleNoPrimaryConstructor(>, const, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-endCompilationUnit(13, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.expect b/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.expect
deleted file mode 100644
index 852c29c..0000000
--- a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.expect
+++ /dev/null
@@ -1,359 +0,0 @@
-Problems reported:
-
-parser/declaring_constructors/extension_type_primary_constructor_error:1:20: Named parameter lists cannot be empty.
-extension type E( {}
-                   ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:2:1: Expected ')' before this.
-extension type E) {}
-^^^^^^^^^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:3:19: Expected an identifier, but got '{'.
-extension type E. {}
-                  ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:3:19: A primary constructor declaration must have formal parameters.
-extension type E. {}
-                  ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:4:18: Expected an identifier, but got '('.
-extension type E.() {}
-                 ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:5:22: An extension type declaration must have a primary constructor declaration.
-extension type const E {}
-                     ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:6:23: Named parameter lists cannot be empty.
-extension type E<T>( {}
-                      ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:7:1: Expected ')' before this.
-extension type E<T>) {}
-^^^^^^^^^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:8:25: An extension type declaration must have a primary constructor declaration.
-extension type const E<T> {}
-                        ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:9:22: Expected an identifier, but got '{'.
-extension type E<T>. {}
-                     ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:9:22: A primary constructor declaration must have formal parameters.
-extension type E<T>. {}
-                     ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:10:21: Expected an identifier, but got '('.
-extension type E<T>.() {}
-                    ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:11:28: Expected an identifier, but got '{'.
-extension type const E<T>. {}
-                           ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:11:28: A primary constructor declaration must have formal parameters.
-extension type const E<T>. {}
-                           ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:12:27: Expected an identifier, but got '('.
-extension type const E<T>.() {}
-                          ^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:13:21: A primary constructor declaration must have formal parameters.
-extension type E<T>.named {}
-                    ^^^^^
-
-parser/declaring_constructors/extension_type_primary_constructor_error:15:27: A primary constructor declaration must have formal parameters.
-extension type const E<T>.named {}
-                          ^^^^^
-
-beginCompilationUnit(extension)
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginOptionalFormalParameters({)
-            handleRecoverableError(EmptyNamedParameterList, }, })
-            beginMetadataStar()
-            endMetadataStar(0)
-            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
-              handleNoType({)
-              handleIdentifier(, formalParameterDeclaration)
-              handleFormalParameterWithoutValue(})
-            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
-          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
-          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], extension, extension)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(.)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleRecoverableError(MissingPrimaryConstructorParameters, {, {)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(.)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables({)
-    beginExtensionTypeDeclaration(null, extension, E)
-      handleRecoverableError(MissingPrimaryConstructor, E, E)
-      handleNoPrimaryConstructor(E, const, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginOptionalFormalParameters({)
-            handleRecoverableError(EmptyNamedParameterList, }, })
-            beginMetadataStar()
-            endMetadataStar(0)
-            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
-              handleNoType({)
-              handleIdentifier(, formalParameterDeclaration)
-              handleFormalParameterWithoutValue(})
-            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
-          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
-          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], extension, extension)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      handleRecoverableError(MissingPrimaryConstructor, >, >)
-      handleNoPrimaryConstructor(>, const, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleRecoverableError(MissingPrimaryConstructorParameters, {, {)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
-        handleIdentifier(, primaryConstructorDeclaration)
-        handleRecoverableError(MissingPrimaryConstructorParameters, {, {)
-        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-        handleIdentifier(, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        handleRecoverableError(MissingPrimaryConstructorParameters, named, named)
-        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., null, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    beginTypeVariables(<)
-      beginMetadataStar(T)
-      endMetadataStar(0)
-      handleIdentifier(T, typeVariableDeclaration)
-      beginTypeVariable(T)
-        handleTypeVariablesDefined(T, 1)
-        handleNoType(T)
-      endTypeVariable(>, 0, null, null)
-    endTypeVariables(<, >)
-    beginExtensionTypeDeclaration(null, extension, E)
-      beginPrimaryConstructor(.)
-        handleIdentifier(named, primaryConstructorDeclaration)
-        handleRecoverableError(MissingPrimaryConstructorParameters, named, named)
-        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
-      endPrimaryConstructor(., const, true, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-endCompilationUnit(13, )
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.expect b/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.expect
index d5edfd2..f3c6f38 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.expect
@@ -27,12 +27,12 @@
             handleType(int, null)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Color, Color)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Color, Color)
             handleNoType(const)
             handleIdentifier(Color, methodDeclaration)
             handleIdentifier(red, methodDeclarationContinuation)
@@ -50,7 +50,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Class, const, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.intertwined.expect b/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.intertwined.expect
index ab36252..0c90cc7 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/const_no_identifier_recovery.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, final, DeclarationKind.Class, Color)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Color)
@@ -52,10 +52,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(red)
-              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, Color, DeclarationKind.Class, Color, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Color, Color)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, Color, DeclarationKind.Class, Color, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Color, Color)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Color, methodDeclaration)
@@ -89,7 +87,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -137,6 +135,8 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.expect b/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.expect
index 69bae2c..cfc5056 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.expect
@@ -27,12 +27,12 @@
             handleType(int, null)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Color, Color)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Color, Color)
             handleNoType(const)
             handleIdentifier(Color, methodDeclaration)
             handleIdentifier(red, methodDeclarationContinuation)
@@ -50,7 +50,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Class, const, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.intertwined.expect b/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.intertwined.expect
index ae90fa4..8d04a66 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/const_property_recovery.dart.intertwined.expect
@@ -44,7 +44,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, final, DeclarationKind.Class, Color)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Color)
@@ -52,10 +52,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(red)
-              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, Color, DeclarationKind.Class, Color, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Color, Color)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, Color, DeclarationKind.Class, Color, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Color, Color)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Color, methodDeclaration)
@@ -89,7 +87,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -137,6 +135,8 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_no_context_recovery.dart.intertwined.expect b/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_no_context_recovery.dart.intertwined.expect
index d0e19621..2589563 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_no_context_recovery.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_no_context_recovery.dart.intertwined.expect
@@ -92,6 +92,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(c)
                 looksLikeLocalFunction(c)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -105,6 +107,8 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           ensureIdentifier(., expressionContinuation)
                             reportRecoverableErrorWithToken(;, Template(ExpectedIdentifier))
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_recovery.dart.intertwined.expect b/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_recovery.dart.intertwined.expect
index d0e19621..2589563 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_recovery.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/no_identifier_recovery.dart.intertwined.expect
@@ -92,6 +92,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(c)
                 looksLikeLocalFunction(c)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -105,6 +107,8 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           ensureIdentifier(., expressionContinuation)
                             reportRecoverableErrorWithToken(;, Template(ExpectedIdentifier))
diff --git a/pkg/front_end/parser_testcases/dot_shorthands/syntax.dart.intertwined.expect b/pkg/front_end/parser_testcases/dot_shorthands/syntax.dart.intertwined.expect
index ffed600..02e4aae 100644
--- a/pkg/front_end/parser_testcases/dot_shorthands/syntax.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/dot_shorthands/syntax.dart.intertwined.expect
@@ -107,6 +107,8 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                             parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
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 43449e2..4e4629f 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
@@ -83,7 +83,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -92,12 +92,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(named, methodDeclarationContinuation)
@@ -117,7 +117,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
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 f091b61..0b9fea8 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
@@ -110,6 +110,8 @@
               listener: beginArguments(()
               allowedToShortcutParseExpression()
               parseExpression(()
+                looksLikeOuterPatternEquals(()
+                  skipOuterPattern(()
                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                   parseUnaryExpression((, true, ConstantPatternContext.none)
                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -124,10 +126,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -147,7 +147,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -155,10 +155,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(named)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -194,7 +192,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
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 e1a21a2..44c8248 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
@@ -31,6 +31,9 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
+                  skipObjectPatternRest(value)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -91,6 +94,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement({)
                 parseExpression({)
+                  looksLikeOuterPatternEquals({)
+                    skipOuterPattern({)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression({, true, ConstantPatternContext.none)
                       inPlainSync()
diff --git a/pkg/front_end/parser_testcases/error_recovery/bad_variable_in_if.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/bad_variable_in_if.dart.intertwined.expect
index 2199672..5b033c0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/bad_variable_in_if.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/bad_variable_in_if.dart.intertwined.expect
@@ -31,9 +31,11 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -45,6 +47,7 @@
                 parseStatement())
                   parseStatementX())
                     parseExpressionStatementOrDeclarationAfterModifiers(final, ), null, final, null, null)
+                      skipOuterPattern(final)
                       looksLikeLocalFunction(<)
                       listener: beginMetadataStar(final)
                       listener: endMetadataStar(0)
@@ -68,12 +71,16 @@
                           parseVariableInitializerOpt(f)
                             listener: beginVariableInitializer(=)
                             parseExpression(=)
+                              looksLikeOuterPatternEquals(=)
+                                skipOuterPattern(=)
                               parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(=, true, ConstantPatternContext.none)
                                   parsePrimary(=, expression, ConstantPatternContext.none)
                                     listener: handleNoTypeArguments([)
                                     parseLiteralListSuffix(=, null)
                                       parseExpression([)
+                                        looksLikeOuterPatternEquals([)
+                                          skipOuterPattern([)
                                         parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression([, true, ConstantPatternContext.none)
                                             parsePrimary([, expression, ConstantPatternContext.none)
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 b840414..db0825c 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
@@ -33,12 +33,16 @@
                   looksLikeLocalFunction([)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
                             listener: handleNoTypeArguments([)
                             parseLiteralListSuffix({, null)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -46,6 +50,8 @@
                                         parseParenthesizedExpressionOrRecordLiteral([, null, ConstantPatternContext.none)
                                           listener: beginParenthesizedExpressionOrRecordLiteral(()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -92,12 +98,16 @@
                   looksLikeLocalFunction([)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
                             listener: handleNoTypeArguments([)
                             parseLiteralListSuffix({, null)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -105,6 +115,8 @@
                                         parseParenthesizedExpressionOrRecordLiteral([, null, ConstantPatternContext.none)
                                           listener: beginParenthesizedExpressionOrRecordLiteral(()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
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 7de3652..2664c60 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
@@ -25,7 +25,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -43,7 +43,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
@@ -105,7 +105,7 @@
                 handleSend(C, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, C, (, null, })
+          endMethod(DeclarationKind.Class, null, C, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -126,7 +126,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
             handleNoType({)
             handleIdentifier(D, methodDeclaration)
             handleNoTypeVariables(()
@@ -144,7 +144,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, D, (, null, ;)
+          endConstructor(DeclarationKind.Class, D, null, (, null, ;)
         endMember()
         beginMetadataStar(D)
         endMetadataStar(0)
@@ -210,7 +210,7 @@
                 handleSend(D, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, D, (, null, })
+          endMethod(DeclarationKind.Class, null, D, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
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 29cf71b..ec9e423 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
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -69,7 +69,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -77,7 +77,7 @@
                 listener: beginMetadataStar(C)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, m, DeclarationKind.Class, C, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, m, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m, C)
                 listener: handleIdentifier(C, typeReference)
                 listener: handleNoTypeArguments(m)
@@ -106,6 +106,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(C)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -123,12 +126,17 @@
                                             listener: handleIdentifier(c, namedArgumentReference)
                                           allowedToShortcutParseExpression()
                                           parseExpression(:)
+                                            looksLikeOuterPatternEquals(:)
+                                              skipOuterPattern(:)
                                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                 parsePrimary(:, expression, ConstantPatternContext.none)
                                                   listener: handleNoTypeArguments([)
                                                   parseLiteralListSuffix(:, null)
                                                     parseExpression([)
+                                                      looksLikeOuterPatternEquals([)
+                                                        skipOuterPattern([)
+                                                          skipObjectPatternRest(C)
                                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -146,12 +154,17 @@
                                                                         listener: handleIdentifier(c, namedArgumentReference)
                                                                       allowedToShortcutParseExpression()
                                                                       parseExpression(:)
+                                                                        looksLikeOuterPatternEquals(:)
+                                                                          skipOuterPattern(:)
                                                                         parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                                           parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                                             parsePrimary(:, expression, ConstantPatternContext.none)
                                                                               listener: handleNoTypeArguments([)
                                                                               parseLiteralListSuffix(:, null)
                                                                                 parseExpression([)
+                                                                                  looksLikeOuterPatternEquals([)
+                                                                                    skipOuterPattern([)
+                                                                                      skipObjectPatternRest(C)
                                                                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                                                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -168,6 +181,9 @@
                                                                                                   listener: endArguments(0, (, ))
                                                                                             listener: handleSend(C, ))
                                                                                 parseExpression(,)
+                                                                                  looksLikeOuterPatternEquals(,)
+                                                                                    skipOuterPattern(,)
+                                                                                      skipObjectPatternRest(C)
                                                                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -184,6 +200,9 @@
                                                                                                   listener: endArguments(0, (, ))
                                                                                             listener: handleSend(C, ))
                                                                                 parseExpression(,)
+                                                                                  looksLikeOuterPatternEquals(,)
+                                                                                    skipOuterPattern(,)
+                                                                                      skipObjectPatternRest(C)
                                                                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -204,6 +223,9 @@
                                                                       listener: endArguments(1, (, ))
                                                                 listener: handleSend(C, ))
                                                     parseExpression(,)
+                                                      looksLikeOuterPatternEquals(,)
+                                                        skipOuterPattern(,)
+                                                          skipObjectPatternRest(C)
                                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -220,6 +242,9 @@
                                                                       listener: endArguments(0, (, ))
                                                                 listener: handleSend(C, ))
                                                     parseExpression(,)
+                                                      looksLikeOuterPatternEquals(,)
+                                                        skipOuterPattern(,)
+                                                          skipObjectPatternRest(C)
                                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -244,7 +269,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, C, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, C, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -282,8 +307,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, D, DeclarationKind.Class, D, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -317,7 +342,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, D, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, D, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, D)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -325,7 +350,7 @@
                 listener: beginMetadataStar(D)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, m, DeclarationKind.Class, D, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, m, DeclarationKind.Class, D, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m, D)
                 listener: handleIdentifier(D, typeReference)
                 listener: handleNoTypeArguments(m)
@@ -354,6 +379,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(D)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -371,12 +399,17 @@
                                             listener: handleIdentifier(d, namedArgumentReference)
                                           allowedToShortcutParseExpression()
                                           parseExpression(:)
+                                            looksLikeOuterPatternEquals(:)
+                                              skipOuterPattern(:)
                                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                 parsePrimary(:, expression, ConstantPatternContext.none)
                                                   listener: handleNoTypeArguments([)
                                                   parseLiteralListSuffix(:, null)
                                                     parseExpression([)
+                                                      looksLikeOuterPatternEquals([)
+                                                        skipOuterPattern([)
+                                                          skipObjectPatternRest(D)
                                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -394,6 +427,9 @@
                                                                         listener: handleIdentifier(d, namedArgumentReference)
                                                                       allowedToShortcutParseExpression()
                                                                       parseExpression(:)
+                                                                        looksLikeOuterPatternEquals(:)
+                                                                          skipOuterPattern(:)
+                                                                            skipObjectPatternRest(D)
                                                                         parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                                           parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                                             parsePrimary(:, expression, ConstantPatternContext.none)
@@ -412,6 +448,9 @@
                                                                       listener: handleNamedArgument(:)
                                                                       allowedToShortcutParseExpression()
                                                                       parseExpression(,)
+                                                                        looksLikeOuterPatternEquals(,)
+                                                                          skipOuterPattern(,)
+                                                                            skipObjectPatternRest(D)
                                                                         parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                           parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                             parsePrimary(,, expression, ConstantPatternContext.none)
@@ -429,6 +468,9 @@
                                                                                   listener: handleSend(D, ))
                                                                       allowedToShortcutParseExpression()
                                                                       parseExpression(,)
+                                                                        looksLikeOuterPatternEquals(,)
+                                                                          skipOuterPattern(,)
+                                                                            skipObjectPatternRest(D)
                                                                         parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                           parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                             parsePrimary(,, expression, ConstantPatternContext.none)
@@ -446,6 +488,8 @@
                                                                                   listener: handleSend(D, ))
                                                                       allowedToShortcutParseExpression()
                                                                       parseExpression(,)
+                                                                        looksLikeOuterPatternEquals(,)
+                                                                          skipOuterPattern(,)
                                                                         parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                           parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                             parsePrimary(,, expression, ConstantPatternContext.none)
@@ -465,6 +509,9 @@
                                                                       listener: endArguments(4, (, ))
                                                                 listener: handleSend(D, ))
                                                     parseExpression(,)
+                                                      looksLikeOuterPatternEquals(,)
+                                                        skipOuterPattern(,)
+                                                          skipObjectPatternRest(D)
                                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -481,6 +528,9 @@
                                                                       listener: endArguments(0, (, ))
                                                                 listener: handleSend(D, ))
                                                     parseExpression(,)
+                                                      looksLikeOuterPatternEquals(,)
+                                                        skipOuterPattern(,)
+                                                          skipObjectPatternRest(D)
                                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -505,7 +555,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, D, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, D, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
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 7e2d05a..8326948 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
@@ -39,6 +39,8 @@
                         looksLikeLocalFunction([)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
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 b774660..746283f 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
@@ -38,6 +38,9 @@
                       looksLikeLocalFunction(foo)
                       parseExpressionStatement({)
                         parseExpression({)
+                          looksLikeOuterPatternEquals({)
+                            skipOuterPattern({)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression({, true, ConstantPatternContext.none)
                               parsePrimary({, expression, ConstantPatternContext.none)
@@ -66,6 +69,8 @@
                         looksLikeLocalFunction())
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
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 1e2e87b..b62c326 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
@@ -32,6 +32,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(foo)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -47,6 +50,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -71,6 +76,9 @@
                                                           looksLikeLocalFunction(bar)
                                                           parseExpressionStatement({)
                                                             parseExpression({)
+                                                              looksLikeOuterPatternEquals({)
+                                                                skipOuterPattern({)
+                                                                  skipObjectPatternRest(bar)
                                                               parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                                 parseUnaryExpression({, true, ConstantPatternContext.none)
                                                                   parsePrimary({, expression, ConstantPatternContext.none)
@@ -99,6 +107,8 @@
                                                             looksLikeLocalFunction())
                                                             parseExpressionStatement(;)
                                                               parseExpression(;)
+                                                                looksLikeOuterPatternEquals(;)
+                                                                  skipOuterPattern(;)
                                                                 parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                                                   parseUnaryExpression(;, true, ConstantPatternContext.none)
                                                                     parsePrimary(;, expression, ConstantPatternContext.none)
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 1950d9b..a9388a3 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
@@ -39,12 +39,16 @@
                         looksLikeLocalFunction([)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
                                   listener: handleNoTypeArguments([)
                                   parseLiteralListSuffix({, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
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 1e84e74..7ddd87b 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -52,6 +54,8 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
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 3396599..4bed8a5 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
@@ -45,6 +45,8 @@
                     parseVariableInitializerOpt(æFoo)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -73,6 +75,8 @@
                     parseVariableInitializerOpt(fooÆ)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -101,6 +105,8 @@
                     parseVariableInitializerOpt(foo)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -117,6 +123,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -146,6 +155,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -175,6 +187,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
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 90f2a8b..a763554 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
@@ -137,7 +137,7 @@
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -150,12 +150,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
-          endClassConstructor(null, foo, (, null, })
+          endConstructor(DeclarationKind.Class, foo, null, (, null, })
         endMember()
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -177,12 +177,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
-          endClassConstructor(null, foo, (, :, })
+          endConstructor(DeclarationKind.Class, foo, null, (, :, })
         endMember()
         beginMetadataStar(foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -202,7 +202,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
-          endClassConstructor(null, foo, (, :, })
+          endConstructor(DeclarationKind.Class, foo, null, (, :, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
@@ -217,7 +217,7 @@
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          endClassMethod(get, get, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, get, =>, null, ;)
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
@@ -235,12 +235,12 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          endClassMethod(get, get, {, null, })
+          endMethod(DeclarationKind.Class, get, get, {, null, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -254,12 +254,12 @@
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, null, ;)
+          endConstructor(DeclarationKind.Class, get, null, (, null, ;)
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -276,12 +276,12 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, null, })
+          endConstructor(DeclarationKind.Class, get, null, (, null, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(:)
@@ -302,12 +302,12 @@
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, :, ;)
+          endConstructor(DeclarationKind.Class, get, null, (, :, ;)
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -333,7 +333,7 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, :, })
+          endConstructor(DeclarationKind.Class, get, null, (, :, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
@@ -350,7 +350,7 @@
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          endClassMethod(set, set, (, null, ;)
+          endMethod(DeclarationKind.Class, set, set, (, null, ;)
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
@@ -370,12 +370,12 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          endClassMethod(set, set, (, null, })
+          endMethod(DeclarationKind.Class, set, set, (, null, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -389,12 +389,12 @@
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, null, ;)
+          endConstructor(DeclarationKind.Class, set, null, (, null, ;)
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -411,12 +411,12 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, null, })
+          endConstructor(DeclarationKind.Class, set, null, (, null, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(:)
@@ -437,12 +437,12 @@
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, :, ;)
+          endConstructor(DeclarationKind.Class, set, null, (, :, ;)
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -468,12 +468,12 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, :, })
+          endConstructor(DeclarationKind.Class, set, null, (, :, })
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, external, null, null, null, null, null, Foo, Foo)
             handleNoType(external)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -492,12 +492,12 @@
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
             handleRecoverableError(ExternalConstructorWithInitializer, :, :)
-          endClassConstructor(null, external, (, :, ;)
+          endConstructor(DeclarationKind.Class, external, null, (, :, ;)
         endMember()
         beginMetadataStar(external)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, external, null, null, null, null, null, Foo, Foo)
             handleNoType(external)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(X, methodDeclarationContinuation)
@@ -523,7 +523,7 @@
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
             handleRecoverableError(ExternalConstructorWithInitializer, :, :)
-          endClassConstructor(null, external, (, :, })
+          endConstructor(DeclarationKind.Class, external, null, (, :, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -535,7 +535,7 @@
             handleIdentifier(Foo, fieldDeclaration)
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -551,7 +551,7 @@
             handleNoFieldInitializer(,)
             handleIdentifier(B, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 3, int, ;)
+          endFields(DeclarationKind.Class, 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 f84f2d4..3f7f21d 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
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -63,7 +63,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(foo, ConstructorWithWrongName)
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
-                listener: endClassConstructor(null, foo, (, null, })
+                listener: endConstructor(DeclarationKind.Class, foo, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -72,8 +72,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -96,6 +96,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -125,7 +128,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(foo, ConstructorWithWrongName)
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
-                listener: endClassConstructor(null, foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -134,8 +137,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -154,6 +157,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -183,7 +189,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(foo, ConstructorWithWrongName)
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
-                listener: endClassConstructor(null, foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -191,7 +197,7 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -210,6 +216,8 @@
                 parseFunctionBody(Foo, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -220,7 +228,7 @@
                     inGenerator()
                 reportRecoverableError(Foo, MemberWithSameNameAsClass)
                   listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-                listener: endClassMethod(get, get, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, get, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -228,7 +236,7 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -252,6 +260,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -264,7 +274,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(Foo, MemberWithSameNameAsClass)
                   listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-                listener: endClassMethod(get, get, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, get, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -272,8 +282,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -301,6 +311,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -311,7 +323,7 @@
                     inGenerator()
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, get, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -319,8 +331,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -353,6 +365,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -365,7 +379,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, null, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -373,8 +387,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -395,6 +409,9 @@
                       listener: beginInitializer(bla)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(bla)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -422,6 +439,8 @@
                 parseFunctionBody(null, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -432,7 +451,7 @@
                     inGenerator()
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, get, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -440,8 +459,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -466,6 +485,9 @@
                       listener: beginInitializer(bla)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(bla)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -498,6 +520,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -510,7 +534,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, :, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -518,7 +542,7 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -543,6 +567,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -553,7 +579,7 @@
                     inGenerator()
                 reportRecoverableError(Foo, MemberWithSameNameAsClass)
                   listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-                listener: endClassMethod(set, set, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, set, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -561,7 +587,7 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -591,6 +617,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -603,7 +631,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(Foo, MemberWithSameNameAsClass)
                   listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-                listener: endClassMethod(set, set, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, set, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -611,8 +639,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -640,6 +668,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -650,7 +680,7 @@
                     inGenerator()
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, set, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -658,8 +688,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -692,6 +722,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -704,7 +736,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, null, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -712,8 +744,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -734,6 +766,9 @@
                       listener: beginInitializer(bla)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(bla)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -761,6 +796,8 @@
                 parseFunctionBody(null, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -771,7 +808,7 @@
                     inGenerator()
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, set, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -779,8 +816,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -805,6 +842,9 @@
                       listener: beginInitializer(bla)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(bla)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -837,6 +877,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -849,7 +891,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, :, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -858,8 +900,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, external, null, null, null, null, external, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, external, null, null, null, null, external, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, external, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -878,6 +920,9 @@
                       listener: beginInitializer(bla)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(bla)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -905,7 +950,7 @@
                   listener: handleEmptyFunctionBody(;)
                 reportRecoverableError(:, ExternalConstructorWithInitializer)
                   listener: handleRecoverableError(ExternalConstructorWithInitializer, :, :)
-                listener: endClassConstructor(null, external, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, external, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, external)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -914,8 +959,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, external, null, null, null, null, external, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, external, null, null, null, null, external, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, external, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(external)
                 ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -938,6 +983,9 @@
                       listener: beginInitializer(bla)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(bla)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -971,6 +1019,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -983,7 +1033,7 @@
                   listener: endBlockFunctionBody(1, {, })
                 reportRecoverableError(:, ExternalConstructorWithInitializer)
                   listener: handleRecoverableError(ExternalConstructorWithInitializer, :, :)
-                listener: endClassConstructor(null, external, (, :, })
+                listener: endConstructor(DeclarationKind.Class, external, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -1002,7 +1052,7 @@
                   reportRecoverableError(Foo, MemberWithSameNameAsClass)
                     listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -1029,7 +1079,7 @@
                   listener: handleIdentifier(B, fieldDeclaration)
                 parseFieldInitializerOpt(B, B, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 3, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 3, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 067cf96..7c9f848 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
@@ -45,7 +45,7 @@
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, foo, Foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -59,12 +59,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, null, })
+          endConstructor(DeclarationKind.Class, get, null, (, null, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, foo, Foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,12 +87,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, :, })
+          endConstructor(DeclarationKind.Class, get, null, (, :, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, foo, Foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -114,7 +114,7 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, :, })
+          endConstructor(DeclarationKind.Class, get, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 7ea106b..e14e93e 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
@@ -33,8 +33,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), get, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -64,7 +64,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, null, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -72,8 +72,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -95,6 +95,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -127,7 +130,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, :, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -135,8 +138,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -156,6 +159,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -188,7 +194,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, :, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 dfc2991..dec1769 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
@@ -41,7 +41,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -55,12 +55,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, null, })
+          endConstructor(DeclarationKind.Class, void, null, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -83,12 +83,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, :, })
+          endConstructor(DeclarationKind.Class, void, null, (, :, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -109,7 +109,7 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, :, })
+          endConstructor(DeclarationKind.Class, void, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 2707d33..2d24c15 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
@@ -33,8 +33,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -64,7 +64,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, null, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -72,8 +72,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -96,6 +96,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -127,7 +130,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, :, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -135,8 +138,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -155,6 +158,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -186,7 +192,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, :, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 a9099a6..89008f0 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
@@ -41,7 +41,7 @@
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, foo, Foo)
             handleNoType({)
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -55,12 +55,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, null, })
+          endConstructor(DeclarationKind.Class, set, null, (, null, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, foo, Foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -83,12 +83,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, :, })
+          endConstructor(DeclarationKind.Class, set, null, (, :, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, foo, Foo)
             handleNoType(})
             handleIdentifier(foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -109,7 +109,7 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, foo, foo)
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, :, })
+          endConstructor(DeclarationKind.Class, set, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 1d4c6d4..295cca7 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
@@ -33,8 +33,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), set, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -64,7 +64,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, null, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -72,8 +72,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -95,6 +95,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -127,7 +130,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, :, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -135,8 +138,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(foo, methodDeclaration)
@@ -154,6 +157,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -186,7 +192,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, foo, foo)
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, :, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 a45258e..d5c6778 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
@@ -53,12 +53,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          endClassMethod(get, get, (, null, })
+          endMethod(DeclarationKind.Class, get, get, (, null, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -79,12 +79,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, :, })
+          endConstructor(DeclarationKind.Class, get, null, (, :, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -97,12 +97,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, null, })
+          endConstructor(DeclarationKind.Class, get, null, (, null, })
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -124,7 +124,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(GetterConstructor, get, get)
-          endClassConstructor(get, get, (, :, })
+          endConstructor(DeclarationKind.Class, get, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
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 4379149..75b5120 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -60,7 +60,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(Foo, MemberWithSameNameAsClass)
                   listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-                listener: endClassMethod(get, get, (, null, })
+                listener: endMethod(DeclarationKind.Class, get, get, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -68,8 +68,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -89,6 +89,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -119,7 +122,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, :, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -127,8 +130,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -156,7 +159,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, null, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -164,8 +167,8 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), get, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -187,6 +190,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -217,7 +223,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(get, GetterConstructor)
                   listener: handleRecoverableError(GetterConstructor, get, get)
-                listener: endClassConstructor(get, get, (, :, })
+                listener: endConstructor(DeclarationKind.Class, get, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
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 4a5ff5a..21897ce 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
@@ -15,7 +15,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -25,12 +25,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, null, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -49,12 +49,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -66,12 +66,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, null, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -92,7 +92,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
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 c89eb54..fb0b56c 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
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -57,7 +57,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -66,8 +66,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -86,6 +86,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -113,7 +116,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -122,8 +125,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -149,7 +152,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -158,8 +161,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -182,6 +185,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -209,7 +215,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
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 876d6c6..04757e0 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
@@ -89,7 +89,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -99,13 +99,13 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got '/'., null, {lexeme: /}], /, /)
             handleInvalidFunctionBody({)
-          endClassConstructor(null, Foo, (, null, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, })
         endMember()
         beginMetadataStar(/)
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -125,12 +125,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, /, /)
-          endClassConstructor(null, operator, (, :, })
+          endConstructor(DeclarationKind.Class, operator, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -140,7 +140,7 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got '.'., null, {lexeme: .}], ., .)
             handleInvalidFunctionBody({)
-          endClassConstructor(null, Foo, (, null, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, })
         endMember()
         beginMetadataStar(.)
         endMetadataStar(0)
@@ -152,7 +152,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
             handleNoType(.)
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -172,7 +172,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, /, /)
-          endClassConstructor(null, operator, (, :, })
+          endConstructor(DeclarationKind.Class, operator, null, (, :, })
         endMember()
         beginMetadataStar(foo)
         endMetadataStar(0)
@@ -187,13 +187,13 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got '/'., null, {lexeme: /}], /, /)
             handleInvalidFunctionBody({)
-          endClassMethod(null, foo, (, null, })
+          endMethod(DeclarationKind.Class, null, foo, (, null, })
         endMember()
         beginMetadataStar(/)
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -213,7 +213,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, /, /)
-          endClassConstructor(null, operator, (, :, })
+          endConstructor(DeclarationKind.Class, operator, null, (, :, })
         endMember()
         beginMetadataStar(foo)
         endMetadataStar(0)
@@ -228,7 +228,7 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got '.'., null, {lexeme: .}], ., .)
             handleInvalidFunctionBody({)
-          endClassMethod(null, foo, (, null, })
+          endMethod(DeclarationKind.Class, null, foo, (, null, })
         endMember()
         beginMetadataStar(.)
         endMetadataStar(0)
@@ -240,7 +240,7 @@
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
             handleNoType(.)
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -260,7 +260,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, /, /)
-          endClassConstructor(null, operator, (, :, })
+          endConstructor(DeclarationKind.Class, operator, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 10, {, })
     endClassDeclaration(class, })
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 ce6e0ae..01a1608 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
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -61,7 +61,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassConstructor(null, Foo, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, /)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -69,13 +69,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, 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, null, }, NoType(), null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+                  parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -97,6 +97,8 @@
                           parseSuperInitializerExpression(:)
                             parseInitializerExpressionRest(:)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -120,7 +122,7 @@
                       listener: endBlockFunctionBody(0, {, })
                     reportRecoverableError(operator, ConstructorWithWrongName)
                       listener: handleRecoverableError(ConstructorWithWrongName, /, /)
-                    listener: endClassConstructor(null, operator, (, :, })
+                    listener: endConstructor(DeclarationKind.Class, operator, null, (, :, })
                   listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -129,8 +131,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -156,7 +158,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassConstructor(null, Foo, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, .)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -164,7 +166,7 @@
                 listener: beginMetadataStar(.)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(., Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '.'., null, {lexeme: .}], ., .)
                 listener: handleInvalidMember(.)
@@ -175,13 +177,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(., ., null, null, null, null, null, null, null, ., NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(., ., null, null, null, null, null, null, null, ., NoType(), null, 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, null, ., NoType(), null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+                  parseMethod(., null, null, null, null, null, null, null, ., NoType(), null, null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
                     listener: handleNoType(.)
                     parseOperatorName(.)
                       listener: handleOperatorName(operator, /)
@@ -203,6 +205,8 @@
                           parseSuperInitializerExpression(:)
                             parseInitializerExpressionRest(:)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -226,7 +230,7 @@
                       listener: endBlockFunctionBody(0, {, })
                     reportRecoverableError(operator, ConstructorWithWrongName)
                       listener: handleRecoverableError(ConstructorWithWrongName, /, /)
-                    listener: endClassConstructor(null, operator, (, :, })
+                    listener: endConstructor(DeclarationKind.Class, operator, null, (, :, })
                   listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -235,7 +239,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, foo, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -262,7 +266,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassMethod(null, foo, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, foo, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, /)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -270,13 +274,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, 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, null, }, NoType(), null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+                  parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -298,6 +302,8 @@
                           parseSuperInitializerExpression(:)
                             parseInitializerExpressionRest(:)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -321,7 +327,7 @@
                       listener: endBlockFunctionBody(0, {, })
                     reportRecoverableError(operator, ConstructorWithWrongName)
                       listener: handleRecoverableError(ConstructorWithWrongName, /, /)
-                    listener: endClassConstructor(null, operator, (, :, })
+                    listener: endConstructor(DeclarationKind.Class, operator, null, (, :, })
                   listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -330,7 +336,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, foo, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -357,7 +363,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassMethod(null, foo, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, foo, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, .)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -365,7 +371,7 @@
                 listener: beginMetadataStar(.)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, null, DeclarationKind.Class, Foo)
                 reportRecoverableErrorWithToken(., Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '.'., null, {lexeme: .}], ., .)
                 listener: handleInvalidMember(.)
@@ -376,13 +382,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(., ., null, null, null, null, null, null, null, ., NoType(), null, DeclarationKind.Class, Foo)
+              recoverFromInvalidMember(., ., null, null, null, null, null, null, null, ., NoType(), null, 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, null, ., NoType(), null, operator, DeclarationKind.Class, Foo, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
+                  parseMethod(., null, null, null, null, null, null, null, ., NoType(), null, null, operator, DeclarationKind.Class, Foo, false)
+                    listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, Foo)
                     listener: handleNoType(.)
                     parseOperatorName(.)
                       listener: handleOperatorName(operator, /)
@@ -404,6 +410,8 @@
                           parseSuperInitializerExpression(:)
                             parseInitializerExpressionRest(:)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -427,7 +435,7 @@
                       listener: endBlockFunctionBody(0, {, })
                     reportRecoverableError(operator, ConstructorWithWrongName)
                       listener: handleRecoverableError(ConstructorWithWrongName, /, /)
-                    listener: endClassConstructor(null, operator, (, :, })
+                    listener: endConstructor(DeclarationKind.Class, operator, null, (, :, })
                   listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 10, {, })
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 fcb3371..4d3ad9b 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
@@ -33,7 +33,7 @@
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -44,12 +44,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, null, })
+          endConstructor(DeclarationKind.Class, void, null, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -69,12 +69,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, :, })
+          endConstructor(DeclarationKind.Class, void, null, (, :, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,12 +87,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, null, })
+          endConstructor(DeclarationKind.Class, void, null, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleVoidKeyword(void)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -114,7 +114,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, :, })
+          endConstructor(DeclarationKind.Class, void, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
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 d25fe09..47ab5a9 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
@@ -33,8 +33,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -58,7 +58,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, null, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -66,8 +66,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -86,6 +86,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -115,7 +118,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, :, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -123,8 +126,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -152,7 +155,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, null, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -160,8 +163,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -184,6 +187,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -213,7 +219,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, :, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
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 01a292b..7a2a566 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
@@ -44,12 +44,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-          endClassMethod(set, set, (, null, })
+          endMethod(DeclarationKind.Class, set, set, (, null, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -69,12 +69,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, :, })
+          endConstructor(DeclarationKind.Class, set, null, (, :, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -87,12 +87,12 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, null, })
+          endConstructor(DeclarationKind.Class, set, null, (, null, })
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(x, methodDeclarationContinuation)
@@ -114,7 +114,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(SetterConstructor, set, set)
-          endClassConstructor(set, set, (, :, })
+          endConstructor(DeclarationKind.Class, set, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
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 2713ddc..80ebcbe 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -58,7 +58,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(Foo, MemberWithSameNameAsClass)
                   listener: handleRecoverableError(MemberWithSameNameAsClass, Foo, Foo)
-                listener: endClassMethod(set, set, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, set, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -66,8 +66,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -85,6 +85,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -115,7 +118,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, :, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -123,8 +126,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -152,7 +155,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, null, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -160,8 +163,8 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), set, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -183,6 +186,9 @@
                       listener: beginInitializer(initializer)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(initializer)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -213,7 +219,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(set, SetterConstructor)
                   listener: handleRecoverableError(SetterConstructor, set, set)
-                listener: endClassConstructor(set, set, (, :, })
+                listener: endConstructor(DeclarationKind.Class, set, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
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 02e17d6..1bc06ca 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
@@ -36,6 +36,8 @@
                     parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, ForPartsContext(null))
                 parseForLoopPartsMid((, await, for)
                   parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression((, true, ConstantPatternContext.none)
                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -59,6 +61,8 @@
                       listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
                     listener: beginForInExpression())
                     parseExpression(in)
+                      looksLikeOuterPatternEquals(in)
+                        skipOuterPattern(in)
                       parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(in, true, ConstantPatternContext.none)
                           parsePrimary(in, expression, ConstantPatternContext.none)
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 67c0aab..01ad8d6 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
@@ -36,6 +36,8 @@
                     parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, ForPartsContext(null))
                 parseForLoopPartsMid((, null, for)
                   parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression((, true, ConstantPatternContext.none)
                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -58,6 +60,8 @@
                       rewriter()
                     parseExpressionStatement(;)
                       parseExpression(;)
+                        looksLikeOuterPatternEquals(;)
+                          skipOuterPattern(;)
                         parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(;, true, ConstantPatternContext.none)
                             parsePrimary(;, expression, ConstantPatternContext.none)
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 12fac45..c166efb 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
@@ -65,7 +65,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionMethod(null, bool, (, null, })
+          endMethod(DeclarationKind.Extension, null, bool, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -81,7 +81,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(0)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Extension, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(set)
         endMetadataStar(0)
@@ -105,7 +105,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionMethod(set, set, (, null, })
+          endMethod(DeclarationKind.Extension, set, set, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
     endExtensionDeclaration(extension, extension, on, })
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 e6630cf..3b4d9fa 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
@@ -39,7 +39,7 @@
                 listener: beginMetadataStar(bool)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, a, DeclarationKind.Extension, E, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, a, DeclarationKind.Extension, E, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, a, E)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(a)
@@ -88,7 +88,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionMethod(null, bool, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, bool, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Extension, E)
@@ -96,7 +96,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, b, DeclarationKind.Extension, E, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, b, DeclarationKind.Extension, E, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, get, b, E)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -117,6 +117,8 @@
                 parseFunctionBody(b, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -125,7 +127,7 @@
                     ensureSemicolon(0)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Extension, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, set)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Extension, E)
@@ -133,7 +135,7 @@
                 listener: beginMetadataStar(set)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, c, DeclarationKind.Extension, E, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), set, null, c, DeclarationKind.Extension, E, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, set, c, E)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -168,7 +170,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionMethod(set, set, (, null, })
+                listener: endMethod(DeclarationKind.Extension, set, set, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
@@ -220,6 +222,9 @@
                 looksLikeLocalFunction(l)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -323,6 +328,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -330,6 +337,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(b)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
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 fa5413d..63397ae 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
@@ -57,24 +57,32 @@
                   parseForInLoopPartsRest(i, null, for, null, i)
                     listener: beginForInExpression([)
                     parseExpression(:)
+                      looksLikeOuterPatternEquals(:)
+                        skipOuterPattern(:)
                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                           parsePrimary(:, expression, ConstantPatternContext.none)
                             listener: handleNoTypeArguments([)
                             parseLiteralListSuffix(:, null)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
                                       parseLiteralInt([)
                                         listener: handleLiteralInt(1)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
                                       parseLiteralInt(,)
                                         listener: handleLiteralInt(2)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -97,6 +105,9 @@
                               looksLikeLocalFunction(print)
                               parseExpressionStatement({)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
+                                      skipObjectPatternRest(print)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
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 818c20a..e4063f9 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
@@ -50,7 +50,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], <, <)
-          endClassFields(null, null, null, null, null, null, null, 1, C, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, C, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 1ff6e41..213e748 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(C)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: C, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 0, skipEnd: >, recovered: true), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: true), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: C, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 0, skipEnd: >, recovered: true), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: true), null, null, DeclarationKind.Class, C)
                 parseFields({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: C, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 0, skipEnd: >, recovered: true), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: true), }, DeclarationKind.Class, C, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
@@ -59,7 +59,7 @@
                     reportRecoverableError(<, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], <, <)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, C, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, C, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 33eaf89..5142bed 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
@@ -75,7 +75,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -85,7 +85,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, null, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -118,7 +118,7 @@
         beginMetadataStar(Bar)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Bar, Bar)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Bar, Bar)
             handleNoType({)
             handleIdentifier(Bar, methodDeclaration)
             handleNoTypeVariables(()
@@ -128,7 +128,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Bar, (, null, })
+          endConstructor(DeclarationKind.Class, Bar, null, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -161,7 +161,7 @@
         beginMetadataStar(Baz)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Baz, Baz)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Baz, Baz)
             handleNoType({)
             handleIdentifier(Baz, methodDeclaration)
             handleNoTypeVariables(()
@@ -171,7 +171,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Baz, (, null, })
+          endConstructor(DeclarationKind.Class, Baz, null, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 1f476fe..182de59 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
@@ -100,8 +100,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -123,7 +123,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -186,8 +186,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Bar, DeclarationKind.Class, Bar, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Bar, Bar)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Bar, DeclarationKind.Class, Bar, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Bar, Bar)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Bar, methodDeclaration)
@@ -209,7 +209,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Bar, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Bar, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -272,8 +272,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Baz, DeclarationKind.Class, Baz, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Baz, Baz)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Baz, DeclarationKind.Class, Baz, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Baz, Baz)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Baz, methodDeclaration)
@@ -295,7 +295,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Baz, (, null, })
+                listener: endConstructor(DeclarationKind.Class, Baz, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 2dbc6f2..6e3371b 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
@@ -42,12 +42,12 @@
             handleType(String, null)
             handleIdentifier(message, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Annotation, Annotation)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Annotation, Annotation)
             handleNoType(const)
             handleIdentifier(Annotation, methodDeclaration)
             handleNoTypeVariables(()
@@ -63,7 +63,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Class, const, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -132,7 +132,7 @@
               endArguments(0, (, ))
             endNewExpression(new)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, m, (, null, ;)
+          endMethod(DeclarationKind.Class, null, m, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 7bcc457..109cb37 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,8 +8,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
-      skipOuterPattern(const)
-        skipObjectPatternRest(annotation)
       parseFields(, null, null, null, null, null, null, const, const, NoType(), annotation, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
         listener: handleNoType(const)
@@ -18,6 +16,8 @@
         parseFieldInitializerOpt(annotation, annotation, null, null, null, null, const, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -68,7 +68,7 @@
                   listener: handleIdentifier(message, fieldDeclaration)
                 parseFieldInitializerOpt(message, message, null, null, null, null, final, DeclarationKind.Class, Annotation)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Annotation)
@@ -76,10 +76,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(Annotation)
-              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, Annotation, DeclarationKind.Class, Annotation, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Annotation, Annotation)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, Annotation, DeclarationKind.Class, Annotation, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Annotation, Annotation)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Annotation, methodDeclaration)
@@ -109,7 +107,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -184,7 +182,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, m, DeclarationKind.Class, C, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, m, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -206,6 +204,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -235,7 +235,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, m, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, m, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 5cafdf3..4a85c74 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
@@ -105,7 +105,7 @@
               handleDotAccess(., hashCode, false)
             endBinaryExpression(^, hashCode)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -137,7 +137,7 @@
               handleDotAccess(., hashCode, false)
             endBinaryExpression(^, hashCode)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -173,7 +173,7 @@
                 endBinaryExpression(^, hashCode)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -208,7 +208,7 @@
                 endBinaryExpression(^, hashCode)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -247,7 +247,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(^, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -285,7 +285,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(^, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -327,7 +327,7 @@
                 endBinaryExpression(^, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -368,7 +368,7 @@
                 endBinaryExpression(^, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -413,7 +413,7 @@
               handleSend(y, y)
             endBinaryExpression(^, y)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -457,7 +457,7 @@
               handleSend(y, y)
             endBinaryExpression(^, y)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -505,7 +505,7 @@
                 endBinaryExpression(^, y)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -552,7 +552,7 @@
                 endBinaryExpression(^, y)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -616,7 +616,7 @@
                 handleSend(z, z)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -679,7 +679,7 @@
                 handleSend(z, z)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -730,7 +730,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(^, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -780,7 +780,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(^, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -834,7 +834,7 @@
                 endBinaryExpression(^, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -887,7 +887,7 @@
                 endBinaryExpression(^, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(s)
         endMetadataStar(0)
@@ -974,12 +974,12 @@
               handleSend(s, ))
               handleExpressionStatement(s, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, s, (, null, })
+          endMethod(DeclarationKind.Class, null, s, (, null, })
         endMember()
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1065,12 +1065,12 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassConstructor(null, Key, (, :, })
+          endConstructor(DeclarationKind.Class, Key, null, (, :, })
         endMember()
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1153,7 +1153,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassConstructor(null, Key, (, :, })
+          endConstructor(DeclarationKind.Class, Key, null, (, :, })
         endMember()
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
@@ -1214,7 +1214,7 @@
               endBinaryExpression(^, y)
               handleExpressionStatement(x, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, not_currently_working, (, null, })
+          endMethod(DeclarationKind.Class, null, not_currently_working, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
     endClassDeclaration(abstract, })
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 f3d00dc..9460d55 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, a, DeclarationKind.Class, Key, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, a, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -54,6 +54,9 @@
                 parseFunctionBody(a, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(hashCode)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -108,7 +111,7 @@
                     ensureSemicolon(hashCode)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -116,7 +119,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, b, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, b, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -137,6 +140,9 @@
                 parseFunctionBody(b, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(hashCode)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -178,7 +184,7 @@
                     ensureSemicolon(hashCode)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -186,7 +192,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, c, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, c, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -212,6 +218,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hashCode)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -268,7 +277,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -276,7 +285,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, d, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, d, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -302,6 +311,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hashCode)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -345,7 +357,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -353,7 +365,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, e, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, e, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -374,6 +386,8 @@
                 parseFunctionBody(e, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -447,7 +461,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -455,7 +469,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, f, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, f, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -476,6 +490,8 @@
                 parseFunctionBody(f, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -531,7 +547,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -539,7 +555,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, g, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, g, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -565,6 +581,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -640,7 +658,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -648,7 +666,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, h, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, h, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -674,6 +692,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -731,7 +751,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -739,7 +759,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, i, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, i, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
@@ -787,6 +807,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -825,7 +848,7 @@
                     ensureSemicolon(y)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -833,7 +856,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, j, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, j, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
@@ -881,6 +904,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -908,7 +934,7 @@
                     ensureSemicolon(y)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -916,7 +942,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, k, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, k, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
@@ -969,6 +995,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1009,7 +1038,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1017,7 +1046,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, l, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, l, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
@@ -1070,6 +1099,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1099,7 +1131,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1107,7 +1139,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, m, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, m, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
@@ -1173,6 +1205,9 @@
                             parseVariableInitializerOpt(z)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(x)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1218,6 +1253,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(z)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1234,7 +1272,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1242,7 +1280,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, n, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, n, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
@@ -1308,6 +1346,9 @@
                             parseVariableInitializerOpt(z)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(x)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1342,6 +1383,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(z)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1358,7 +1402,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1366,7 +1410,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, o, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, o, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
@@ -1414,6 +1458,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1471,7 +1517,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -1479,7 +1525,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, p, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, p, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
@@ -1527,6 +1573,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1568,7 +1616,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -1576,7 +1624,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, q, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, q, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
@@ -1629,6 +1677,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1688,7 +1738,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1696,7 +1746,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, r, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, r, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
@@ -1749,6 +1799,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1792,7 +1844,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, s)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1801,7 +1853,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, s, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, s, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -1853,6 +1905,9 @@
                         looksLikeLocalFunction(s)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(s)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -1868,6 +1923,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1905,6 +1963,9 @@
                                                 listener: endBinaryExpression(^, y)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1951,6 +2012,9 @@
                         looksLikeLocalFunction(s)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(s)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1966,6 +2030,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1992,6 +2059,9 @@
                                                 listener: endBinaryExpression(^, y)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2022,7 +2092,7 @@
                           listener: handleExpressionStatement(s, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, s, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, s, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Key)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2031,8 +2101,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Key, DeclarationKind.Class, Key, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2075,6 +2145,9 @@
                       listener: beginInitializer(foo)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2127,6 +2200,9 @@
                       listener: beginInitializer(bar)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2189,6 +2265,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2204,6 +2283,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2211,6 +2292,9 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString("hello )
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
+                                                              skipObjectPatternRest(x)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -2256,7 +2340,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassConstructor(null, Key, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Key, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Key)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2265,8 +2349,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Key, DeclarationKind.Class, Key, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2309,6 +2393,9 @@
                       listener: beginInitializer(foo)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2350,6 +2437,9 @@
                       listener: beginInitializer(bar)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2401,6 +2491,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2416,6 +2509,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2423,6 +2518,9 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString("hello )
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
+                                                              skipObjectPatternRest(x)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -2457,7 +2555,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassConstructor(null, Key, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Key, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, not_currently_working)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2466,7 +2564,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, not_currently_working, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, not_currently_working, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -2542,6 +2640,9 @@
                         looksLikeLocalFunction(y)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(y)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2562,6 +2663,9 @@
                         looksLikeLocalFunction(x)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(x)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2590,7 +2694,7 @@
                           listener: handleExpressionStatement(x, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, not_currently_working, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, not_currently_working, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
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 1d97191..6df7ead 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
@@ -105,7 +105,7 @@
               handleDotAccess(., hashCode, false)
             endBinaryExpression(&, hashCode)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -137,7 +137,7 @@
               handleDotAccess(., hashCode, false)
             endBinaryExpression(&, hashCode)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -173,7 +173,7 @@
                 endBinaryExpression(&, hashCode)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -208,7 +208,7 @@
                 endBinaryExpression(&, hashCode)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -247,7 +247,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(&, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -285,7 +285,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(&, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -327,7 +327,7 @@
                 endBinaryExpression(&, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -368,7 +368,7 @@
                 endBinaryExpression(&, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -413,7 +413,7 @@
               handleSend(y, y)
             endBinaryExpression(&, y)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -457,7 +457,7 @@
               handleSend(y, y)
             endBinaryExpression(&, y)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -505,7 +505,7 @@
                 endBinaryExpression(&, y)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -552,7 +552,7 @@
                 endBinaryExpression(&, y)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -616,7 +616,7 @@
                 handleSend(z, z)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -679,7 +679,7 @@
                 handleSend(z, z)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -730,7 +730,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(&, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -780,7 +780,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(&, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -834,7 +834,7 @@
                 endBinaryExpression(&, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -887,7 +887,7 @@
                 endBinaryExpression(&, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(s)
         endMetadataStar(0)
@@ -974,12 +974,12 @@
               handleSend(s, ))
               handleExpressionStatement(s, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, s, (, null, })
+          endMethod(DeclarationKind.Class, null, s, (, null, })
         endMember()
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1065,12 +1065,12 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassConstructor(null, Key, (, :, })
+          endConstructor(DeclarationKind.Class, Key, null, (, :, })
         endMember()
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1153,7 +1153,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassConstructor(null, Key, (, :, })
+          endConstructor(DeclarationKind.Class, Key, null, (, :, })
         endMember()
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
@@ -1214,7 +1214,7 @@
               endBinaryExpression(&, y)
               handleExpressionStatement(x, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, not_currently_working, (, null, })
+          endMethod(DeclarationKind.Class, null, not_currently_working, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
     endClassDeclaration(abstract, })
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 92c541c..f37ee20 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, a, DeclarationKind.Class, Key, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, a, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -54,6 +54,9 @@
                 parseFunctionBody(a, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(hashCode)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -108,7 +111,7 @@
                     ensureSemicolon(hashCode)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -116,7 +119,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, b, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, b, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -137,6 +140,9 @@
                 parseFunctionBody(b, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(hashCode)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -178,7 +184,7 @@
                     ensureSemicolon(hashCode)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -186,7 +192,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, c, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, c, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -212,6 +218,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hashCode)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -268,7 +277,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -276,7 +285,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, d, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, d, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -302,6 +311,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hashCode)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -345,7 +357,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -353,7 +365,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, e, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, e, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -374,6 +386,8 @@
                 parseFunctionBody(e, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -448,7 +462,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -456,7 +470,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, f, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, f, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -477,6 +491,8 @@
                 parseFunctionBody(f, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -532,7 +548,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -540,7 +556,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, g, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, g, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -566,6 +582,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -642,7 +660,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -650,7 +668,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, h, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, h, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -676,6 +694,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -733,7 +753,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -741,7 +761,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, i, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, i, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
@@ -789,6 +809,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -827,7 +850,7 @@
                     ensureSemicolon(y)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -835,7 +858,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, j, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, j, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
@@ -883,6 +906,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -910,7 +936,7 @@
                     ensureSemicolon(y)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -918,7 +944,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, k, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, k, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
@@ -971,6 +997,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1011,7 +1040,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1019,7 +1048,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, l, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, l, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
@@ -1072,6 +1101,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1101,7 +1133,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1109,7 +1141,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, m, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, m, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
@@ -1175,6 +1207,9 @@
                             parseVariableInitializerOpt(z)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(x)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1220,6 +1255,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(z)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1236,7 +1274,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1244,7 +1282,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, n, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, n, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
@@ -1310,6 +1348,9 @@
                             parseVariableInitializerOpt(z)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(x)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1344,6 +1385,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(z)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1360,7 +1404,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1368,7 +1412,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, o, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, o, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
@@ -1416,6 +1460,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1474,7 +1520,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -1482,7 +1528,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, p, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, p, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
@@ -1530,6 +1576,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1571,7 +1619,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -1579,7 +1627,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, q, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, q, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
@@ -1632,6 +1680,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1692,7 +1742,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1700,7 +1750,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, r, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, r, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
@@ -1753,6 +1803,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1796,7 +1848,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, s)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1805,7 +1857,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, s, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, s, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -1857,6 +1909,9 @@
                         looksLikeLocalFunction(s)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(s)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -1872,6 +1927,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1909,6 +1967,9 @@
                                                 listener: endBinaryExpression(&, y)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1955,6 +2016,9 @@
                         looksLikeLocalFunction(s)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(s)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1970,6 +2034,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1996,6 +2063,9 @@
                                                 listener: endBinaryExpression(&, y)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2026,7 +2096,7 @@
                           listener: handleExpressionStatement(s, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, s, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, s, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Key)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2035,8 +2105,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Key, DeclarationKind.Class, Key, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2079,6 +2149,9 @@
                       listener: beginInitializer(foo)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2131,6 +2204,9 @@
                       listener: beginInitializer(bar)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2193,6 +2269,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2208,6 +2287,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2215,6 +2296,9 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString("hello )
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
+                                                              skipObjectPatternRest(x)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -2260,7 +2344,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassConstructor(null, Key, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Key, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Key)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2269,8 +2353,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Key, DeclarationKind.Class, Key, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2313,6 +2397,9 @@
                       listener: beginInitializer(foo)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2354,6 +2441,9 @@
                       listener: beginInitializer(bar)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2405,6 +2495,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2420,6 +2513,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2427,6 +2522,9 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString("hello )
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
+                                                              skipObjectPatternRest(x)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -2461,7 +2559,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassConstructor(null, Key, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Key, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, not_currently_working)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2470,7 +2568,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, not_currently_working, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, not_currently_working, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -2546,6 +2644,9 @@
                         looksLikeLocalFunction(y)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(y)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2566,6 +2667,9 @@
                         looksLikeLocalFunction(x)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(x)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2594,7 +2698,7 @@
                           listener: handleExpressionStatement(x, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, not_currently_working, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, not_currently_working, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
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 b7ee174..a0a274a 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
@@ -105,7 +105,7 @@
               handleDotAccess(., hashCode, false)
             endBinaryExpression(|, hashCode)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -137,7 +137,7 @@
               handleDotAccess(., hashCode, false)
             endBinaryExpression(|, hashCode)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -173,7 +173,7 @@
                 endBinaryExpression(|, hashCode)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -208,7 +208,7 @@
                 endBinaryExpression(|, hashCode)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -247,7 +247,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(|, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -285,7 +285,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(|, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -327,7 +327,7 @@
                 endBinaryExpression(|, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -368,7 +368,7 @@
                 endBinaryExpression(|, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, int, {, null, })
+          endMethod(DeclarationKind.Class, get, int, {, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -413,7 +413,7 @@
               handleSend(y, y)
             endBinaryExpression(|, y)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -457,7 +457,7 @@
               handleSend(y, y)
             endBinaryExpression(|, y)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -505,7 +505,7 @@
                 endBinaryExpression(|, y)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -552,7 +552,7 @@
                 endBinaryExpression(|, y)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -616,7 +616,7 @@
                 handleSend(z, z)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -679,7 +679,7 @@
                 handleSend(z, z)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -730,7 +730,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(|, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -780,7 +780,7 @@
               endBinaryExpression(+, 3)
             endBinaryExpression(|, 3)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -834,7 +834,7 @@
                 endBinaryExpression(|, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -887,7 +887,7 @@
                 endBinaryExpression(|, 3)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(s)
         endMetadataStar(0)
@@ -974,12 +974,12 @@
               handleSend(s, ))
               handleExpressionStatement(s, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, s, (, null, })
+          endMethod(DeclarationKind.Class, null, s, (, null, })
         endMember()
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1065,12 +1065,12 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassConstructor(null, Key, (, :, })
+          endConstructor(DeclarationKind.Class, Key, null, (, :, })
         endMember()
         beginMetadataStar(Key)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
             handleNoType(})
             handleIdentifier(Key, methodDeclaration)
             handleNoTypeVariables(()
@@ -1153,7 +1153,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassConstructor(null, Key, (, :, })
+          endConstructor(DeclarationKind.Class, Key, null, (, :, })
         endMember()
         beginMetadataStar(not_currently_working)
         endMetadataStar(0)
@@ -1214,7 +1214,7 @@
               endBinaryExpression(|, y)
               handleExpressionStatement(x, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, not_currently_working, (, null, })
+          endMethod(DeclarationKind.Class, null, not_currently_working, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
     endClassDeclaration(abstract, })
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 ad7591a..7771e87 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, a, DeclarationKind.Class, Key, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, a, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, a, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -54,6 +54,9 @@
                 parseFunctionBody(a, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(hashCode)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -108,7 +111,7 @@
                     ensureSemicolon(hashCode)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -116,7 +119,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, b, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, b, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, b, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -137,6 +140,9 @@
                 parseFunctionBody(b, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(hashCode)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -178,7 +184,7 @@
                     ensureSemicolon(hashCode)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -186,7 +192,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, c, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, c, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, c, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -212,6 +218,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hashCode)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -268,7 +277,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -276,7 +285,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, d, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, d, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, d, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -302,6 +311,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hashCode)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -345,7 +357,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -353,7 +365,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, e, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, e, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, e, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -374,6 +386,8 @@
                 parseFunctionBody(e, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -448,7 +462,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -456,7 +470,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, f, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, f, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, f, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -477,6 +491,8 @@
                 parseFunctionBody(f, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -532,7 +548,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -540,7 +556,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, g, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, g, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, g, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -566,6 +582,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -642,7 +660,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -650,7 +668,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, h, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, h, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, h, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -676,6 +694,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -733,7 +753,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, int, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, int, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -741,7 +761,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, i, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, i, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, i, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(i)
@@ -789,6 +809,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -827,7 +850,7 @@
                     ensureSemicolon(y)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -835,7 +858,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, j, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, j, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, j, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(j)
@@ -883,6 +906,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -910,7 +936,7 @@
                     ensureSemicolon(y)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -918,7 +944,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, k, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, k, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, k, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(k)
@@ -971,6 +997,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1011,7 +1040,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1019,7 +1048,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, l, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, l, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, l, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(l)
@@ -1072,6 +1101,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1101,7 +1133,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1109,7 +1141,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, m, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, m, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, m, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(m)
@@ -1175,6 +1207,9 @@
                             parseVariableInitializerOpt(z)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(x)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1220,6 +1255,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(z)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1236,7 +1274,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1244,7 +1282,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, n, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, n, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, n, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(n)
@@ -1310,6 +1348,9 @@
                             parseVariableInitializerOpt(z)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(x)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1344,6 +1385,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(z)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1360,7 +1404,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1368,7 +1412,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, o, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, o, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, o, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(o)
@@ -1416,6 +1460,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1474,7 +1520,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -1482,7 +1528,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, p, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, p, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, p, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(p)
@@ -1530,6 +1576,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1571,7 +1619,7 @@
                     ensureSemicolon(3)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Key)
@@ -1579,7 +1627,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, q, DeclarationKind.Class, Key, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, q, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, q, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(q)
@@ -1632,6 +1680,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1692,7 +1742,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1700,7 +1750,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, r, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, r, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, r, Key)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(r)
@@ -1753,6 +1803,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1796,7 +1848,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, s)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -1805,7 +1857,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, s, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, s, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, s, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -1857,6 +1909,9 @@
                         looksLikeLocalFunction(s)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(s)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -1872,6 +1927,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1909,6 +1967,9 @@
                                                 listener: endBinaryExpression(|, y)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1955,6 +2016,9 @@
                         looksLikeLocalFunction(s)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(s)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1970,6 +2034,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1996,6 +2063,9 @@
                                                 listener: endBinaryExpression(|, y)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2026,7 +2096,7 @@
                           listener: handleExpressionStatement(s, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, s, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, s, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Key)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2035,8 +2105,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Key, DeclarationKind.Class, Key, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2079,6 +2149,9 @@
                       listener: beginInitializer(foo)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2131,6 +2204,9 @@
                       listener: beginInitializer(bar)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2193,6 +2269,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2208,6 +2287,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2215,6 +2296,9 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString("hello )
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
+                                                              skipObjectPatternRest(x)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -2260,7 +2344,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassConstructor(null, Key, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Key, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Key)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2269,8 +2353,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Key, DeclarationKind.Class, Key, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Key, Key)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Key, DeclarationKind.Class, Key, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Key, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Key, methodDeclaration)
@@ -2313,6 +2397,9 @@
                       listener: beginInitializer(foo)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2354,6 +2441,9 @@
                       listener: beginInitializer(bar)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2405,6 +2495,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2420,6 +2513,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2427,6 +2522,9 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString("hello )
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
+                                                              skipObjectPatternRest(x)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -2461,7 +2559,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassConstructor(null, Key, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Key, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, not_currently_working)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Key)
@@ -2470,7 +2568,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, not_currently_working, DeclarationKind.Class, Key, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, not_currently_working, DeclarationKind.Class, Key, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, not_currently_working, Key)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -2546,6 +2644,9 @@
                         looksLikeLocalFunction(y)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(y)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2566,6 +2667,9 @@
                         looksLikeLocalFunction(x)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(x)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2594,7 +2698,7 @@
                           listener: handleExpressionStatement(x, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, not_currently_working, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, not_currently_working, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 22, {, })
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 5cd3d38..a6041ff 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(m)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(m)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(T)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -75,6 +81,8 @@
                                                         listener: beginArguments(()
                                                         allowedToShortcutParseExpression()
                                                         parseExpression(()
+                                                          looksLikeOuterPatternEquals(()
+                                                            skipOuterPattern(()
                                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                                               parsePrimary((, expression, ConstantPatternContext.none)
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 07bcc02..0ab03cc 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
@@ -39,7 +39,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, co, (, null, })
+          endMethod(DeclarationKind.Class, null, co, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 5af5ccb..aa6619f 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
@@ -37,7 +37,7 @@
                 reportRecoverableError(<, MissingOperatorKeyword)
                   listener: handleRecoverableError(MissingOperatorKeyword, <, <)
                 rewriter()
-                parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Class, A, false)
+                parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Class, A, false)
                   listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, A)
                   listener: handleIdentifier(co, typeReference)
                   listener: handleNoTypeArguments(operator)
@@ -64,7 +64,7 @@
                     listener: beginBlockFunctionBody({)
                     notEofOrType(CLOSE_CURLY_BRACKET, })
                     listener: endBlockFunctionBody(0, {, })
-                  listener: endClassMethod(null, co, (, null, })
+                  listener: endMethod(DeclarationKind.Class, null, co, (, null, })
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 ac3e36b..41c7fe9 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
@@ -34,7 +34,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, co, (, null, })
+          endMethod(DeclarationKind.Class, null, co, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 d656479..c92a3d6 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(co)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, A)
                 listener: handleIdentifier(co, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -60,7 +60,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, co, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, co, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 59eb603..fa5ba00 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
@@ -22,6 +22,8 @@
                   looksLikeLocalFunction(<)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
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 a27f1e5..fc94683 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
@@ -22,6 +22,8 @@
                   looksLikeLocalFunction(<)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
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 ec64d9b..1956843 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
@@ -64,6 +64,8 @@
                         looksLikeLocalFunction(<)
                         parseExpressionStatement(;)
                           parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
                             parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(;, true, ConstantPatternContext.none)
                                 parsePrimary(;, expression, ConstantPatternContext.none)
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 924562c..ff081a1 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
@@ -52,6 +52,9 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
+                  skipObjectPatternRest(a)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
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 fce0516..255a24f 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
@@ -33,7 +33,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -43,13 +43,13 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got '/'., null, {lexeme: /}], /, /)
             handleInvalidFunctionBody({)
-          endClassConstructor(null, C, (, null, })
+          endConstructor(DeclarationKind.Class, C, null, (, null, })
         endMember()
         beginMetadataStar(/)
         endMetadataStar(0)
         beginMember()
           handleRecoverableError(MissingOperatorKeyword, /, /)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, C)
             handleNoType(})
             handleOperatorName(operator, /)
             handleNoTypeVariables(:)
@@ -68,7 +68,7 @@
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
             handleRecoverableError(ConstructorWithWrongName, /, /)
-          endClassConstructor(null, operator, (, :, ;)
+          endConstructor(DeclarationKind.Class, operator, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
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 5fc7942..cd75f2e 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
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -61,7 +61,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassConstructor(null, C, (, null, })
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, /)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -69,13 +69,13 @@
                 listener: beginMetadataStar(/)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, 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, null, }, NoType(), null, operator, DeclarationKind.Class, C, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, C)
+                  parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Class, C, false)
+                    listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, C)
                     listener: handleNoType(})
                     parseOperatorName(})
                       listener: handleOperatorName(operator, /)
@@ -97,6 +97,8 @@
                           parseSuperInitializerExpression(:)
                             parseInitializerExpressionRest(:)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -118,7 +120,7 @@
                       listener: handleEmptyFunctionBody(;)
                     reportRecoverableError(operator, ConstructorWithWrongName)
                       listener: handleRecoverableError(ConstructorWithWrongName, /, /)
-                    listener: endClassConstructor(null, operator, (, :, ;)
+                    listener: endConstructor(DeclarationKind.Class, operator, null, (, :, ;)
                   listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
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 a495194..4791768 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,8 +8,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl()
       listener: beginTopLevelMember(const)
-      skipOuterPattern(const)
-        skipObjectPatternRest(foo)
       parseFields(, null, null, null, null, null, null, const, const, NoType(), foo, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, )
         listener: handleNoType(const)
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 297fa8a..be52be9 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
@@ -32,6 +32,9 @@
                 looksLikeLocalFunction(builder)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(builder)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -55,6 +58,9 @@
                         listener: handleCascadeAccess(.., foo, false)
                         parseArgumentOrIndexStar(foo, NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(bar)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -78,6 +84,9 @@
                 looksLikeLocalFunction(FilterSet)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(FilterSet)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -93,6 +102,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -121,6 +132,9 @@
                                                   parseFunctionBody(), true, false)
                                                     parseExpressionFunctionBody(=>, true)
                                                       parseExpression(=>)
+                                                        looksLikeOuterPatternEquals(=>)
+                                                          skipOuterPattern(=>)
+                                                            skipObjectPatternRest(builder)
                                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                             parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -144,6 +158,9 @@
                                                             listener: handleCascadeAccess(.., foo, false)
                                                             parseArgumentOrIndexStar(foo, NoTypeParamOrArg(), false)
                                                               parseExpression([)
+                                                                looksLikeOuterPatternEquals([)
+                                                                  skipOuterPattern([)
+                                                                    skipObjectPatternRest(bar)
                                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -172,6 +189,9 @@
                 looksLikeLocalFunction(builder)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(builder)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -198,6 +218,8 @@
                           rewriter()
                         parseArgumentOrIndexStar(foo, NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -223,6 +245,9 @@
                 looksLikeLocalFunction(FilterSet)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(FilterSet)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -238,6 +263,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -266,6 +293,9 @@
                                                   parseFunctionBody(), true, false)
                                                     parseExpressionFunctionBody(=>, true)
                                                       parseExpression(=>)
+                                                        looksLikeOuterPatternEquals(=>)
+                                                          skipOuterPattern(=>)
+                                                            skipObjectPatternRest(builder)
                                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                             parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -292,6 +322,8 @@
                                                               rewriter()
                                                             parseArgumentOrIndexStar(foo, NoTypeParamOrArg(), false)
                                                               parseExpression([)
+                                                                looksLikeOuterPatternEquals([)
+                                                                  skipOuterPattern([)
                                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -322,6 +354,9 @@
                 looksLikeLocalFunction(builder)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(builder)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -345,6 +380,8 @@
                         listener: handleCascadeAccess(.., foo, false)
                         parseArgumentOrIndexStar(foo, NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -370,6 +407,9 @@
                 looksLikeLocalFunction(FilterSet)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(FilterSet)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -385,6 +425,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -413,6 +455,9 @@
                                                   parseFunctionBody(), true, false)
                                                     parseExpressionFunctionBody(=>, true)
                                                       parseExpression(=>)
+                                                        looksLikeOuterPatternEquals(=>)
+                                                          skipOuterPattern(=>)
+                                                            skipObjectPatternRest(builder)
                                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                             parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -436,6 +481,8 @@
                                                             listener: handleCascadeAccess(.., foo, false)
                                                             parseArgumentOrIndexStar(foo, NoTypeParamOrArg(), false)
                                                               parseExpression([)
+                                                                looksLikeOuterPatternEquals([)
+                                                                  skipOuterPattern([)
                                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                                     parsePrimary([, expression, ConstantPatternContext.none)
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 554ebb9..3b0c69a 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
@@ -55,9 +55,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -134,6 +137,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -206,9 +211,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -285,6 +293,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
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 96f23c3..388884c 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
@@ -55,9 +55,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -134,6 +137,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -215,9 +220,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -339,6 +347,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -408,9 +418,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -487,6 +500,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -568,9 +583,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -692,6 +710,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
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 57ec370..e8b621a 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
@@ -55,9 +55,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -110,6 +113,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -191,9 +196,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -266,6 +274,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -335,9 +345,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -390,6 +403,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
@@ -471,9 +486,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -546,6 +564,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
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 59658f7..dd90cca 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
@@ -61,7 +61,7 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -93,7 +93,7 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -115,7 +115,7 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -150,7 +150,7 @@
               endArguments(0, (, ))
               handleSend(Map, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -174,7 +174,7 @@
               endArguments(0, (, ))
               handleSend(Map, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -211,7 +211,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -237,7 +237,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -273,7 +273,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -298,7 +298,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 1d59449..9c2936c 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
@@ -53,6 +53,9 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Map)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -77,7 +80,7 @@
                                   parseLiteralSetOrMapSuffix(>, null)
                                     listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -105,6 +108,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -124,7 +129,7 @@
                             parseLiteralSetOrMapSuffix(>, null)
                               listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -152,6 +157,9 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Map)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -164,7 +172,7 @@
                                 parseLiteralSetOrMapSuffix(Map, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -192,6 +200,9 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Map)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -219,7 +230,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Map, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -247,6 +258,9 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Map)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -263,7 +277,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Map, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -291,6 +305,9 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Map)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -314,6 +331,8 @@
                                   listener: endTypeArguments(2, <, >)
                                   parseLiteralSetOrMapSuffix(>, null)
                                     parseExpression({)
+                                      looksLikeOuterPatternEquals({)
+                                        skipOuterPattern({)
                                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression({, true, ConstantPatternContext.none)
                                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -322,6 +341,8 @@
                                                 listener: beginLiteralString("a")
                                                 listener: endLiteralString(0, :)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -330,7 +351,7 @@
                                     listener: handleLiteralMapEntry(:, }, null, null)
                                     listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -358,6 +379,9 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Map)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -369,6 +393,8 @@
                                 listener: handleNoTypeArguments({)
                                 parseLiteralSetOrMapSuffix(Map, null)
                                   parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -377,6 +403,8 @@
                                               listener: beginLiteralString("a")
                                               listener: endLiteralString(0, :)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -385,7 +413,7 @@
                                   listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -413,6 +441,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -431,6 +461,8 @@
                             listener: endTypeArguments(2, <, >)
                             parseLiteralSetOrMapSuffix(>, null)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -439,6 +471,8 @@
                                           listener: beginLiteralString("a")
                                           listener: endLiteralString(0, :)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -447,7 +481,7 @@
                               listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -475,12 +509,16 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           listener: handleNoTypeArguments({)
                           parseLiteralSetOrMapSuffix(=, null)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression({, true, ConstantPatternContext.none)
                                   parsePrimary({, expression, ConstantPatternContext.none)
@@ -489,6 +527,8 @@
                                         listener: beginLiteralString("a")
                                         listener: endLiteralString(0, :)
                             parseExpression(:)
+                              looksLikeOuterPatternEquals(:)
+                                skipOuterPattern(:)
                               parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(:, true, ConstantPatternContext.none)
                                   parsePrimary(:, expression, ConstantPatternContext.none)
@@ -497,7 +537,7 @@
                             listener: handleLiteralMapEntry(:, }, null, null)
                             listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 834208d..48b8d50 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
@@ -63,7 +63,7 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -97,7 +97,7 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -121,7 +121,7 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -160,7 +160,7 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -188,7 +188,7 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -227,7 +227,7 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -255,7 +255,7 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -293,7 +293,7 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -320,7 +320,7 @@
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 b3ff5ab..761ed8a 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
@@ -53,6 +53,8 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -77,7 +79,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -105,6 +107,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -127,7 +131,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -155,6 +159,8 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -167,7 +173,7 @@
                               listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -195,6 +201,8 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -225,7 +233,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -253,6 +261,8 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -272,7 +282,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -300,6 +310,8 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -322,6 +334,8 @@
                               listener: endTypeArguments(2, <, >)
                               parseLiteralSetOrMapSuffix(>, const)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -330,6 +344,8 @@
                                             listener: beginLiteralString("a")
                                             listener: endLiteralString(0, :)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -339,7 +355,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -367,6 +383,8 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -377,6 +395,8 @@
                             listener: handleNoTypeArguments({)
                             parseLiteralSetOrMapSuffix(Map, const)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -385,6 +405,8 @@
                                           listener: beginLiteralString("a")
                                           listener: endLiteralString(0, :)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -394,7 +416,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -422,6 +444,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -442,6 +466,8 @@
                               listener: endTypeArguments(2, <, >)
                               parseLiteralSetOrMapSuffix(>, const)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -450,6 +476,8 @@
                                             listener: beginLiteralString("a")
                                             listener: endLiteralString(0, :)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -459,7 +487,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -487,6 +515,8 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -495,6 +525,8 @@
                             listener: handleNoTypeArguments({)
                             parseLiteralSetOrMapSuffix(const, const)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -503,6 +535,8 @@
                                           listener: beginLiteralString("a")
                                           listener: endLiteralString(0, :)
                               parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -512,7 +546,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 7f3dcbf..fd677a7 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
@@ -51,7 +51,7 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -77,7 +77,7 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -96,7 +96,7 @@
               handleNoTypeArguments([])
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -125,7 +125,7 @@
               endArguments(0, (, ))
               handleSend(List, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -146,7 +146,7 @@
               endArguments(0, (, ))
               handleSend(List, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -174,7 +174,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -196,7 +196,7 @@
               handleLiteralNull(null)
               handleIndexedExpression(null, [, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -223,7 +223,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -242,7 +242,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 94004f5..65b3120 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
@@ -49,6 +49,9 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(List)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -73,7 +76,7 @@
                                       rewriter()
                                     listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -97,6 +100,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -116,7 +121,7 @@
                                 rewriter()
                               listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -140,6 +145,9 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(List)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -155,7 +163,7 @@
                                     rewriter()
                                   listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -179,6 +187,9 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(List)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -203,7 +214,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(List, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -227,6 +238,9 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(List)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -243,7 +257,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(List, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -267,6 +281,9 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(List)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -287,6 +304,8 @@
                                   listener: endTypeArguments(1, <, >)
                                   parseLiteralListSuffix(>, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -294,7 +313,7 @@
                                               listener: handleLiteralNull(null)
                                     listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -318,6 +337,9 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(List)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -331,6 +353,8 @@
                               listener: handleSend(List, List)
                       parseArgumentOrIndexStar(List, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -338,7 +362,7 @@
                                   listener: handleLiteralNull(null)
                         listener: handleIndexedExpression(null, [, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -362,6 +386,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -377,6 +403,8 @@
                             listener: endTypeArguments(1, <, >)
                             parseLiteralListSuffix(>, null)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -384,7 +412,7 @@
                                         listener: handleLiteralNull(null)
                               listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -408,12 +436,16 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           listener: handleNoTypeArguments([)
                           parseLiteralListSuffix(=, null)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -421,7 +453,7 @@
                                       listener: handleLiteralNull(null)
                             listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 d94081c..fdbb1f9 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
@@ -57,7 +57,7 @@
                 handleLiteralList(0, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -85,7 +85,7 @@
                 handleLiteralList(0, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -106,7 +106,7 @@
                 handleLiteralList(0, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -139,7 +139,7 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -164,7 +164,7 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -194,7 +194,7 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -216,7 +216,7 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -245,7 +245,7 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -266,7 +266,7 @@
                 handleLiteralList(1, [, const, ])
               endConstLiteral(])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 96e6b40..1e4391a 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
@@ -49,6 +49,8 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -73,7 +75,7 @@
                                 listener: handleLiteralList(0, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -97,6 +99,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -119,7 +123,7 @@
                                 listener: handleLiteralList(0, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -143,6 +147,8 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -158,7 +164,7 @@
                               listener: handleLiteralList(0, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -182,6 +188,8 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -209,7 +217,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -233,6 +241,8 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -252,7 +262,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -276,6 +286,8 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -295,6 +307,8 @@
                               listener: endTypeArguments(1, <, >)
                               parseLiteralListSuffix(>, const)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -303,7 +317,7 @@
                                 listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -327,6 +341,8 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -337,6 +353,8 @@
                             listener: handleNoTypeArguments([)
                             parseLiteralListSuffix(List, const)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -345,7 +363,7 @@
                               listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -369,6 +387,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -386,6 +406,8 @@
                               listener: endTypeArguments(1, <, >)
                               parseLiteralListSuffix(>, const)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -394,7 +416,7 @@
                                 listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -418,6 +440,8 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -426,6 +450,8 @@
                             listener: handleNoTypeArguments([)
                             parseLiteralListSuffix(const, const)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -434,7 +460,7 @@
                               listener: handleLiteralList(1, [, const, ])
                             listener: endConstLiteral(])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 6545ff9..05d4ba0 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
@@ -67,7 +67,7 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -94,7 +94,7 @@
               endTypeArguments(1, <, >)
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -113,7 +113,7 @@
               handleNoTypeArguments([])
               handleLiteralList(0, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -146,7 +146,7 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -171,7 +171,7 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -199,7 +199,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -219,7 +219,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -247,7 +247,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -267,7 +267,7 @@
               handleLiteralNull(null)
               handleLiteralList(1, [, null, ])
             endFieldInitializer(=, ])
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 47bdb05..bf58da5 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
@@ -49,6 +49,8 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -72,7 +74,7 @@
                                     rewriter()
                                   listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -96,6 +98,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -119,7 +123,7 @@
                                     rewriter()
                                   listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -143,6 +147,8 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -157,7 +163,7 @@
                                   rewriter()
                                 listener: handleLiteralList(0, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -181,6 +187,8 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -208,7 +216,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -232,6 +240,8 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -251,7 +261,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -275,6 +285,8 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -294,6 +306,8 @@
                                 listener: endTypeArguments(1, <, >)
                                 parseLiteralListSuffix(>, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -301,7 +315,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -325,6 +339,8 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -335,6 +351,8 @@
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(List, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -342,7 +360,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -366,6 +384,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -385,6 +405,8 @@
                                 listener: endTypeArguments(1, <, >)
                                 parseLiteralListSuffix(>, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -392,7 +414,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -416,6 +438,8 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -426,6 +450,8 @@
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(new, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -433,7 +459,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralList(1, [, null, ])
                   listener: endFieldInitializer(=, ])
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 f463392..eb1a6ec 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
@@ -73,7 +73,7 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -106,7 +106,7 @@
               endTypeArguments(2, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -128,7 +128,7 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -167,7 +167,7 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -195,7 +195,7 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -232,7 +232,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -258,7 +258,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -295,7 +295,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -321,7 +321,7 @@
               handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 111d20b..c9e1d58 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
@@ -53,6 +53,8 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -76,7 +78,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -104,6 +106,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -127,7 +131,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -155,6 +159,8 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -166,7 +172,7 @@
                               parseLiteralSetOrMapSuffix(Map, null)
                                 listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -194,6 +200,8 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -224,7 +232,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -252,6 +260,8 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -271,7 +281,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -299,6 +309,8 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -321,6 +333,8 @@
                                 listener: endTypeArguments(2, <, >)
                                 parseLiteralSetOrMapSuffix(>, null)
                                   parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -329,6 +343,8 @@
                                               listener: beginLiteralString("a")
                                               listener: endLiteralString(0, :)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -337,7 +353,7 @@
                                   listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -365,6 +381,8 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -375,6 +393,8 @@
                               listener: handleNoTypeArguments({)
                               parseLiteralSetOrMapSuffix(Map, null)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -383,6 +403,8 @@
                                             listener: beginLiteralString("a")
                                             listener: endLiteralString(0, :)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -391,7 +413,7 @@
                                 listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -419,6 +441,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -441,6 +465,8 @@
                                 listener: endTypeArguments(2, <, >)
                                 parseLiteralSetOrMapSuffix(>, null)
                                   parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -449,6 +475,8 @@
                                               listener: beginLiteralString("a")
                                               listener: endLiteralString(0, :)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -457,7 +485,7 @@
                                   listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -485,6 +513,8 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -495,6 +525,8 @@
                               listener: handleNoTypeArguments({)
                               parseLiteralSetOrMapSuffix(new, null)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -503,6 +535,8 @@
                                             listener: beginLiteralString("a")
                                             listener: endLiteralString(0, :)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -511,7 +545,7 @@
                                 listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 1a5f959..a5c6aa9 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
@@ -55,7 +55,7 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -81,7 +81,7 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -100,7 +100,7 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -129,7 +129,7 @@
               endArguments(0, (, ))
               handleSend(Set, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -150,7 +150,7 @@
               endArguments(0, (, ))
               handleSend(Set, ))
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -178,7 +178,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -198,7 +198,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -225,7 +225,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -244,7 +244,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 666d175..de5a448 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
@@ -49,6 +49,9 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Set)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -70,7 +73,7 @@
                                   parseLiteralSetOrMapSuffix(>, null)
                                     listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -94,6 +97,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -110,7 +115,7 @@
                             parseLiteralSetOrMapSuffix(>, null)
                               listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -134,6 +139,9 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Set)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -146,7 +154,7 @@
                                 parseLiteralSetOrMapSuffix(Set, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -170,6 +178,9 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Set)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -194,7 +205,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Set, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -218,6 +229,9 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Set)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -234,7 +248,7 @@
                                     listener: endArguments(0, (, ))
                               listener: handleSend(Set, ))
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -258,6 +272,9 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Set)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -278,6 +295,8 @@
                                   listener: endTypeArguments(1, <, >)
                                   parseLiteralSetOrMapSuffix(>, null)
                                     parseExpression({)
+                                      looksLikeOuterPatternEquals({)
+                                        skipOuterPattern({)
                                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression({, true, ConstantPatternContext.none)
                                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -285,7 +304,7 @@
                                               listener: handleLiteralNull(null)
                                     listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -309,6 +328,9 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                        skipObjectPatternRest(Set)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -320,6 +342,8 @@
                                 listener: handleNoTypeArguments({)
                                 parseLiteralSetOrMapSuffix(Set, null)
                                   parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -327,7 +351,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -351,6 +375,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -366,6 +392,8 @@
                             listener: endTypeArguments(1, <, >)
                             parseLiteralSetOrMapSuffix(>, null)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -373,7 +401,7 @@
                                         listener: handleLiteralNull(null)
                               listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -397,12 +425,16 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           listener: handleNoTypeArguments({)
                           parseLiteralSetOrMapSuffix(=, null)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression({, true, ConstantPatternContext.none)
                                   parsePrimary({, expression, ConstantPatternContext.none)
@@ -410,7 +442,7 @@
                                       listener: handleLiteralNull(null)
                             listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 b9f5f9d..37358c5 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
@@ -57,7 +57,7 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -85,7 +85,7 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -106,7 +106,7 @@
                 handleLiteralSetOrMap(0, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -139,7 +139,7 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -164,7 +164,7 @@
                 endArguments(0, (, ))
               endConstExpression(const)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -194,7 +194,7 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -216,7 +216,7 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -245,7 +245,7 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -266,7 +266,7 @@
                 handleLiteralSetOrMap(1, {, const, }, true)
               endConstLiteral(})
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 689cfd9..674561d 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
@@ -49,6 +49,8 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -70,7 +72,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -94,6 +96,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -113,7 +117,7 @@
                                 listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -137,6 +141,8 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -149,7 +155,7 @@
                               listener: handleLiteralSetOrMap(0, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -173,6 +179,8 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -200,7 +208,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -224,6 +232,8 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -243,7 +253,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endConstExpression(const)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -267,6 +277,8 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -286,6 +298,8 @@
                               listener: endTypeArguments(1, <, >)
                               parseLiteralSetOrMapSuffix(>, const)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -294,7 +308,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -318,6 +332,8 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -328,6 +344,8 @@
                             listener: handleNoTypeArguments({)
                             parseLiteralSetOrMapSuffix(Set, const)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -336,7 +354,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -360,6 +378,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -377,6 +397,8 @@
                               listener: endTypeArguments(1, <, >)
                               parseLiteralSetOrMapSuffix(>, const)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -385,7 +407,7 @@
                                 listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -409,6 +431,8 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -417,6 +441,8 @@
                             listener: handleNoTypeArguments({)
                             parseLiteralSetOrMapSuffix(const, const)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -425,7 +451,7 @@
                               listener: handleLiteralSetOrMap(1, {, const, }, true)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 cf38ddf..3632858 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
@@ -67,7 +67,7 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -94,7 +94,7 @@
               endTypeArguments(1, <, >)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -113,7 +113,7 @@
               handleNoTypeArguments({)
               handleLiteralSetOrMap(0, {, null, }, false)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -146,7 +146,7 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -171,7 +171,7 @@
                 endArguments(0, (, ))
               endNewExpression(new)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -199,7 +199,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -219,7 +219,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -247,7 +247,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -267,7 +267,7 @@
               handleLiteralNull(null)
               handleLiteralSetOrMap(1, {, null, }, true)
             endFieldInitializer(=, })
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 e2d2ea7..225fc85 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
@@ -49,6 +49,8 @@
                 parseFieldInitializerOpt(foo1, foo1, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -69,7 +71,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -93,6 +95,8 @@
                 parseFieldInitializerOpt(foo2, foo2, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -113,7 +117,7 @@
                                 parseLiteralSetOrMapSuffix(>, null)
                                   listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -137,6 +141,8 @@
                 parseFieldInitializerOpt(foo3, foo3, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -148,7 +154,7 @@
                               parseLiteralSetOrMapSuffix(Set, null)
                                 listener: handleLiteralSetOrMap(0, {, null, }, false)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -172,6 +178,8 @@
                 parseFieldInitializerOpt(foo4, foo4, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -199,7 +207,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -223,6 +231,8 @@
                 parseFieldInitializerOpt(foo5, foo5, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -242,7 +252,7 @@
                                 listener: endArguments(0, (, ))
                             listener: endNewExpression(new)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -266,6 +276,8 @@
                 parseFieldInitializerOpt(foo6, foo6, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -285,6 +297,8 @@
                                 listener: endTypeArguments(1, <, >)
                                 parseLiteralSetOrMapSuffix(>, null)
                                   parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -292,7 +306,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -316,6 +330,8 @@
                 parseFieldInitializerOpt(foo7, foo7, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -326,6 +342,8 @@
                               listener: handleNoTypeArguments({)
                               parseLiteralSetOrMapSuffix(Set, null)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -333,7 +351,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -357,6 +375,8 @@
                 parseFieldInitializerOpt(foo8, foo8, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -376,6 +396,8 @@
                                 listener: endTypeArguments(1, <, >)
                                 parseLiteralSetOrMapSuffix(>, null)
                                   parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -383,7 +405,7 @@
                                             listener: handleLiteralNull(null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, F)
@@ -407,6 +429,8 @@
                 parseFieldInitializerOpt(foo9, foo9, null, null, null, null, final, DeclarationKind.Class, F)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -417,6 +441,8 @@
                               listener: handleNoTypeArguments({)
                               parseLiteralSetOrMapSuffix(new, null)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -424,7 +450,7 @@
                                           listener: handleLiteralNull(null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, true)
                   listener: endFieldInitializer(=, })
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
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 7fce818..8d5da6c 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
@@ -31,9 +31,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(n)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -73,6 +76,9 @@
                       looksLikeLocalFunction(or)
                       parseExpressionStatement())
                         parseExpression())
+                          looksLikeOuterPatternEquals())
+                            skipOuterPattern())
+                              skipObjectPatternRest(or)
                           parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(), true, ConstantPatternContext.none)
                               parsePrimary(), expression, ConstantPatternContext.none)
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 e91c876..102b38f 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
@@ -73,7 +73,7 @@
                 endThenStatement(or, ;)
               endIfStatement(if, null, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, foo, (, null, })
+          endMethod(DeclarationKind.Class, null, foo, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 5cab63e..75b0b71 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
@@ -42,7 +42,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, foo, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -80,9 +80,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(key)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -122,6 +125,9 @@
                               looksLikeLocalFunction(or)
                               parseExpressionStatement())
                                 parseExpression())
+                                  looksLikeOuterPatternEquals())
+                                    skipOuterPattern())
+                                      skipObjectPatternRest(or)
                                   parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(), true, ConstantPatternContext.none)
                                       parsePrimary(), expression, ConstantPatternContext.none)
@@ -142,7 +148,7 @@
                         listener: endIfStatement(if, null, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, foo, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, foo, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.expect
index 92c2f5b..12515d2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.expect
@@ -42,7 +42,7 @@
             handleType(List, null)
             handleIdentifier(p, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+          endFields(DeclarationKind.Class, 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_45662.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.intertwined.expect
index f53726d..abc43f2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662.crash_dart.intertwined.expect
@@ -65,7 +65,7 @@
                   listener: handleIdentifier(p, fieldDeclaration)
                 parseFieldInitializerOpt(p, p, null, null, null, null, null, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.expect
index 69f0c81..15a5ad3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.expect
@@ -38,7 +38,7 @@
             handleType(List, null)
             handleIdentifier(p, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+          endFields(DeclarationKind.Class, 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_45662_gt_gt.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.intertwined.expect
index 4529d3f..ef93f71 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt.crash_dart.intertwined.expect
@@ -60,7 +60,7 @@
                   listener: handleIdentifier(p, fieldDeclaration)
                 parseFieldInitializerOpt(p, p, null, null, null, null, null, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.expect
index 973c237..f4e43ec 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.expect
@@ -38,7 +38,7 @@
             handleType(List, null)
             handleIdentifier(p, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+          endFields(DeclarationKind.Class, 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_45662_gt_gt_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.intertwined.expect
index 107ee3d..a9e3698 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662_gt_gt_prime.crash_dart.intertwined.expect
@@ -60,7 +60,7 @@
                   listener: handleIdentifier(p, fieldDeclaration)
                 parseFieldInitializerOpt(p, p, null, null, null, null, null, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.expect
index a4ab7cf..d42f034 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.expect
@@ -42,7 +42,7 @@
             handleType(List, null)
             handleIdentifier(p, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+          endFields(DeclarationKind.Class, 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_45662_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.intertwined.expect
index 34bf9f8..3db1dde 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45662_prime.crash_dart.intertwined.expect
@@ -65,7 +65,7 @@
                   listener: handleIdentifier(p, fieldDeclaration)
                 parseFieldInitializerOpt(p, p, null, null, null, null, null, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 a71f8a0..392a9cd 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
@@ -58,7 +58,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -92,7 +92,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+          endFields(DeclarationKind.Class, 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 f3e112b..64ef9a0 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, DeclarationKind.Class, A)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), }, DeclarationKind.Class, A, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
@@ -64,7 +64,7 @@
                     reportRecoverableError(>, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -101,7 +101,7 @@
                 listener: beginMetadataStar(List)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: List, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 0, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, DeclarationKind.Class, B)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: List, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 0, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, DeclarationKind.Class, B)
                 parseFields({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: List, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 0, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), }, DeclarationKind.Class, B, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
@@ -127,7 +127,7 @@
                     reportRecoverableError(>, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 24b29e9..7a6c611 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
@@ -42,7 +42,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, Stream, (, null, })
+          endMethod(DeclarationKind.Class, null, Stream, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 ec08f04..577dcd1 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, x, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, x, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, x, A)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
@@ -71,7 +71,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, Stream, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, Stream, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 97fd174..7026c3a 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
@@ -35,7 +35,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, Stream, (, null, })
+          endMethod(DeclarationKind.Class, null, Stream, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 4963779..c3e1a22 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, x, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, x, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, x, A)
                 ensureIdentifier({, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
@@ -67,7 +67,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, Stream, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, Stream, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 21ce212..5e9f5b1 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
@@ -50,7 +50,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, 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 0c4737a..05fb807 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, DeclarationKind.Class, A)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), }, DeclarationKind.Class, A, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
@@ -69,7 +69,7 @@
                     reportRecoverableError(>, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 7470523..8e026c1 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
@@ -54,7 +54,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, 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 90a4dba..03d1e44 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, DeclarationKind.Class, A)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), }, DeclarationKind.Class, A, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
@@ -74,7 +74,7 @@
                     reportRecoverableError(>, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 6c23c64..5d35209 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
@@ -118,7 +118,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -161,7 +161,7 @@
             handleType(Stream, null)
             handleIdentifier(foo, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
         beginMetadataStar(Stream)
         endMetadataStar(0)
@@ -191,7 +191,7 @@
             handleIdentifier(, fieldDeclaration)
             handleNoFieldInitializer(})
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -234,7 +234,7 @@
             handleType(Stream, null)
             handleIdentifier(foo, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
         endMember()
         beginMetadataStar(Stream)
         endMetadataStar(0)
@@ -278,7 +278,7 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'baz'., null, {lexeme: baz}], baz, baz)
             handleInvalidFunctionBody({)
-          endClassMethod(null, Stream, (, null, })
+          endMethod(DeclarationKind.Class, null, Stream, (, null, })
         endMember()
         beginMetadataStar(baz)
         endMetadataStar(0)
@@ -288,7 +288,7 @@
             handleNoType(})
             handleIdentifier(baz, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, baz, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, baz, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 3a94285..0487c4d 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, DeclarationKind.Class, A)
+              recoverFromInvalidMember(>, {, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, DeclarationKind.Class, A)
                 parseFields({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), }, DeclarationKind.Class, A, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
                   ensureIdentifier({, typeReference)
@@ -74,7 +74,7 @@
                     reportRecoverableError(>, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -140,7 +140,7 @@
                   listener: handleIdentifier(foo, fieldDeclaration)
                 parseFieldInitializerOpt(foo, foo, null, null, null, null, null, DeclarationKind.Class, B)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Stream)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, B)
@@ -148,7 +148,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(>, ;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, DeclarationKind.Class, B)
+              recoverFromInvalidMember(>, ;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, DeclarationKind.Class, B)
                 parseFields(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), }, DeclarationKind.Class, B, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                   ensureIdentifier(;, typeReference)
@@ -189,7 +189,7 @@
                     reportRecoverableError(>, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], >, >)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -255,7 +255,7 @@
                   listener: handleIdentifier(foo, fieldDeclaration)
                 parseFieldInitializerOpt(foo, foo, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, Stream, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Stream, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Stream)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -263,7 +263,7 @@
                 listener: beginMetadataStar(Stream)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, Stream, DeclarationKind.Class, C, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: Stream, typeArguments: ComplexTypeParamOrArgInfo(start: <, inDeclaration: true, allowsVariance: false, typeArgumentCount: 1, skipEnd: >, recovered: false), beforeQuestionMark: null, end: >, typeVariableStarters: [], gftHasReturnType: null, isRecordType: false, gftReturnTypeHasRecordType: false, recovered: false), null, null, Stream, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Stream, C)
                 ensureIdentifier(;, typeReference)
                   listener: handleIdentifier(Stream, typeReference)
@@ -338,7 +338,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassMethod(null, Stream, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, Stream, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, baz)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -356,7 +356,7 @@
                   listener: handleIdentifier(baz, fieldDeclaration)
                 parseFieldInitializerOpt(baz, baz, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, baz, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, baz, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 89218d9..b62d23e 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
@@ -54,7 +54,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, stream, (, null, })
+          endMethod(DeclarationKind.Class, null, stream, (, null, })
         endMember()
         beginMetadataStar(stream2)
         endMetadataStar(0)
@@ -93,7 +93,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, stream2, (, null, })
+          endMethod(DeclarationKind.Class, null, stream2, (, null, })
         endMember()
         beginMetadataStar(stream3)
         endMetadataStar(0)
@@ -125,7 +125,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, stream3, (, null, })
+          endMethod(DeclarationKind.Class, null, stream3, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 5a0af91..991da95 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
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(<)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, stream, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, stream, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream, A)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -85,7 +85,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, stream, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, stream, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, stream2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, A)
@@ -94,7 +94,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(<)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, stream2, DeclarationKind.Class, A, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, stream2, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream2, A)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -149,7 +149,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, stream2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, stream2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, stream3)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, A)
@@ -158,7 +158,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(<)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, stream3, DeclarationKind.Class, A, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, stream3, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, stream3, A)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -201,7 +201,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, stream3, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, stream3, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect
index 6939612..fef14ff 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288.dart.intertwined.expect
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -65,6 +68,8 @@
                                       listener: handleIdentifier(, namedArgumentReference)
                                     allowedToShortcutParseExpression()
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -75,6 +80,8 @@
                                       listener: handleIdentifier(bbb, namedArgumentReference)
                                     allowedToShortcutParseExpression()
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect
index b4383be..60fff84 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48288_prime.dart.intertwined.expect
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -61,6 +64,8 @@
                                       listener: handleIdentifier(foo, namedArgumentReference)
                                     allowedToShortcutParseExpression()
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -71,6 +76,8 @@
                                       listener: handleIdentifier(bbb, namedArgumentReference)
                                     allowedToShortcutParseExpression()
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
index 9c2e5a3..683e54f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.expect
@@ -78,7 +78,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
index 0dae463..b64a3d1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48371_prime3.dart.intertwined.expect
@@ -73,7 +73,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, A)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -113,6 +113,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -128,6 +131,9 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(x)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -152,7 +158,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
index 457bc65..f40182a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.expect
@@ -49,7 +49,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -58,12 +58,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -74,7 +74,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
index 960faa0..2f2eea5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1.dart.intertwined.expect
@@ -65,10 +65,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -88,7 +86,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -96,10 +94,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -123,7 +119,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
index 0e55341..92628e4 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.expect
@@ -64,7 +64,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -73,12 +73,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -89,7 +89,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
index 5a374fb..3ed775c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma.dart.intertwined.expect
@@ -86,10 +86,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -109,7 +107,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -117,10 +115,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -144,7 +140,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
index 3e01fae..f963073 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.expect
@@ -52,7 +52,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -61,12 +61,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -77,7 +77,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
index ac25939..cabe910 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_comma_ok.dart.intertwined.expect
@@ -79,10 +79,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -102,7 +100,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -110,10 +108,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -137,7 +133,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
index 64d188d..4a20345 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.expect
@@ -37,7 +37,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -46,12 +46,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -62,7 +62,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
index 29800e7..c38f9e1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_1_ok.dart.intertwined.expect
@@ -58,10 +58,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -81,7 +79,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -89,10 +87,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -116,7 +112,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
index da1416e..469db35 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.expect
@@ -44,7 +44,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -53,12 +53,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -69,7 +69,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
index 54a352f..cd08aeb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2.dart.intertwined.expect
@@ -60,10 +60,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -83,7 +81,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -91,10 +89,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -118,7 +114,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
index dcbab59..6f072ac 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.expect
@@ -59,7 +59,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -68,12 +68,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -84,7 +84,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
index 641869a..8f07fc2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma.dart.intertwined.expect
@@ -81,10 +81,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -104,7 +102,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -112,10 +110,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -139,7 +135,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
index 781cc9e..dcf3359 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.expect
@@ -52,7 +52,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -61,12 +61,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -77,7 +77,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
index ae12154..eb84010 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_comma_ok.dart.intertwined.expect
@@ -78,10 +78,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -101,7 +99,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -109,10 +107,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -136,7 +132,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
index 924b57c..b874307 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.expect
@@ -37,7 +37,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -46,12 +46,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -62,7 +62,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
index 4603242..b74ae89 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_2_ok.dart.intertwined.expect
@@ -57,10 +57,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -80,7 +78,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -88,10 +86,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -115,7 +111,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
index e595178..4d66e66 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.expect
@@ -37,7 +37,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -46,12 +46,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -62,7 +62,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
index a12d3f6..0c5005a 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3.dart.intertwined.expect
@@ -53,10 +53,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -76,7 +74,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -84,10 +82,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -111,7 +107,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
index 7c1d7aa..e565cf5 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.expect
@@ -48,7 +48,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -57,12 +57,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -73,7 +73,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
index 7dfaa26..1e2e1e8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma.dart.intertwined.expect
@@ -70,10 +70,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -93,7 +91,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -101,10 +99,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -128,7 +124,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
index ef10c96..24aed7d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.expect
@@ -36,7 +36,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -45,12 +45,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -61,7 +61,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
index 5996af4..8c2f095 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_comma_ok.dart.intertwined.expect
@@ -63,10 +63,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -86,7 +84,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -94,10 +92,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -121,7 +117,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
index 3821493..a8e3a74 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.expect
@@ -25,7 +25,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -34,12 +34,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             handleNoType(const)
             handleIdentifier(E, methodDeclaration)
             handleIdentifier(foo, methodDeclarationContinuation)
@@ -50,7 +50,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endEnumConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 2, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
index fc39eec..d489120 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_3_ok.dart.intertwined.expect
@@ -46,10 +46,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(E)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -69,7 +67,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, const)
         parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E)
@@ -77,10 +75,8 @@
             listener: beginMetadataStar(const)
             listener: endMetadataStar(0)
           listener: beginMember()
-          skipOuterPattern(const)
-            skipObjectPatternRest(foo)
-          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, E, DeclarationKind.Enum, E, false)
-            listener: beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E, E)
+          parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, E, DeclarationKind.Enum, E, false)
+            listener: beginConstructor(DeclarationKind.Enum, null, null, null, null, const, null, null, E, E)
             listener: handleNoType(const)
             ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
               listener: handleIdentifier(E, methodDeclaration)
@@ -104,7 +100,7 @@
             inPlainSync()
             parseFunctionBody(), false, true)
               listener: handleEmptyFunctionBody(;)
-            listener: endEnumConstructor(null, const, (, null, ;)
+            listener: endConstructor(DeclarationKind.Enum, const, null, (, null, ;)
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
index 9437e61..50cfa78 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.expect
@@ -48,7 +48,7 @@
                 endLiteralString(0, ;)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endEnumMethod(null, String, (, null, })
+          endMethod(DeclarationKind.Enum, null, String, (, null, })
         endMember()
       endEnumBody({, })
     endEnumDeclaration(enum, enum, {, 1, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
index 276054e..9823fb2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48380_4.dart.intertwined.expect
@@ -42,7 +42,7 @@
             listener: beginMetadataStar(String)
             listener: endMetadataStar(0)
           listener: beginMember()
-          parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, hello, DeclarationKind.Enum, E, false)
+          parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, hello, DeclarationKind.Enum, E, false)
             listener: beginMethod(DeclarationKind.Enum, null, null, null, null, null, null, hello, E)
             listener: handleIdentifier(String, typeReference)
             listener: handleNoTypeArguments(hello)
@@ -72,6 +72,9 @@
                     looksLikeLocalFunction(print)
                     parseExpressionStatement({)
                       parseExpression({)
+                        looksLikeOuterPatternEquals({)
+                          skipOuterPattern({)
+                            skipObjectPatternRest(print)
                         parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression({, true, ConstantPatternContext.none)
                             parsePrimary({, expression, ConstantPatternContext.none)
@@ -98,6 +101,8 @@
                   parseReturnStatement(;)
                     listener: beginReturnStatement(return)
                     parseExpression(return)
+                      looksLikeOuterPatternEquals(return)
+                        skipOuterPattern(return)
                       parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(return, true, ConstantPatternContext.none)
                           parsePrimary(return, expression, ConstantPatternContext.none)
@@ -110,7 +115,7 @@
                     inGenerator()
               notEofOrType(CLOSE_CURLY_BRACKET, })
               listener: endBlockFunctionBody(2, {, })
-            listener: endEnumMethod(null, String, (, null, })
+            listener: endMethod(DeclarationKind.Enum, null, String, (, null, })
           listener: endMember()
         notEofOrType(CLOSE_CURLY_BRACKET, })
         listener: endEnumBody({, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
index 7634fdd..7e35411 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.expect
@@ -41,7 +41,7 @@
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType({)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -59,12 +59,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, null, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, null, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleIdentifier(y, methodDeclarationContinuation)
@@ -84,7 +84,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, null, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -107,7 +107,7 @@
         beginMetadataStar(B)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B, B)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B, B)
             handleNoType({)
             handleIdentifier(B, methodDeclaration)
             handleNoTypeVariables(()
@@ -149,7 +149,7 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B, (, :, ;)
+          endConstructor(DeclarationKind.Class, B, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -172,7 +172,7 @@
         beginMetadataStar(B2)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2, B2)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B2, B2)
             handleNoType({)
             handleIdentifier(B2, methodDeclaration)
             handleNoTypeVariables(()
@@ -216,7 +216,7 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B2, (, :, ;)
+          endConstructor(DeclarationKind.Class, B2, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -239,7 +239,7 @@
         beginMetadataStar(B3)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
             handleNoType({)
             handleIdentifier(B3, methodDeclaration)
             handleNoTypeVariables(()
@@ -283,12 +283,12 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B3, (, :, ;)
+          endConstructor(DeclarationKind.Class, B3, null, (, :, ;)
         endMember()
         beginMetadataStar(B3)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
             handleNoType(;)
             handleIdentifier(B3, methodDeclaration)
             handleIdentifier(y, methodDeclarationContinuation)
@@ -308,7 +308,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B3, (, null, ;)
+          endConstructor(DeclarationKind.Class, B3, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -337,12 +337,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -384,7 +384,7 @@
             endInitializers(2, :, 21)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -407,7 +407,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
             handleNoType({)
             handleIdentifier(D, methodDeclaration)
             handleNoTypeVariables(()
@@ -452,7 +452,7 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, D, (, :, ;)
+          endConstructor(DeclarationKind.Class, D, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -481,12 +481,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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, E)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, E, E)
             handleNoType(;)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -533,7 +533,7 @@
             endInitializers(2, :, 2)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, E, (, :, ;)
+          endConstructor(DeclarationKind.Class, E, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
index fa62d4d..46fe942 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411.dart.intertwined.expect
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -67,7 +67,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -76,8 +76,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -113,7 +113,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -154,8 +154,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, B, DeclarationKind.Class, B, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B, B)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, B, DeclarationKind.Class, B, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B, B)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(B, methodDeclaration)
@@ -187,6 +187,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -215,6 +218,8 @@
                       parseSuperInitializerExpression(,)
                         parseInitializerExpressionRest(,)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -239,7 +244,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, B, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -280,8 +285,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, B2, DeclarationKind.Class, B2, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2, B2)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, B2, DeclarationKind.Class, B2, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B2, B2)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(B2, methodDeclaration)
@@ -313,6 +318,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -341,6 +349,8 @@
                       parseSuperInitializerExpression(,)
                         parseInitializerExpressionRest(,)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -372,7 +382,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B2, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, B2, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -413,8 +423,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, B3, DeclarationKind.Class, B3, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, B3, DeclarationKind.Class, B3, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(B3, methodDeclaration)
@@ -446,6 +456,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -473,6 +486,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -504,7 +519,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B3, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, B3, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, B3)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, B3)
@@ -513,8 +528,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, B3, DeclarationKind.Class, B3, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, B3, DeclarationKind.Class, B3, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(B3, methodDeclaration)
@@ -550,7 +565,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B3, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, B3, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -599,7 +614,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -608,8 +623,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -641,6 +656,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -668,6 +686,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -700,7 +721,7 @@
                 inPlainSync()
                 parseFunctionBody(21, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -741,8 +762,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, D, DeclarationKind.Class, D, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -774,6 +795,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -802,6 +826,9 @@
                       parseAssert(,, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -836,7 +863,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, D, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, D, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -887,7 +914,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, E)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, E)
@@ -896,8 +923,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, E, DeclarationKind.Class, E, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, E, E)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, E, DeclarationKind.Class, E, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, E, E)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(E, methodDeclaration)
@@ -929,6 +956,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -956,6 +986,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -998,7 +1030,7 @@
                 inPlainSync()
                 parseFunctionBody(2, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, E, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, E, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 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
index 6662842..44d5cc0 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.expect
@@ -15,7 +15,7 @@
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType({)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -33,12 +33,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, null, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, null, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleIdentifier(y, methodDeclarationContinuation)
@@ -58,7 +58,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, null, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -81,7 +81,7 @@
         beginMetadataStar(B)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B, B)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B, B)
             handleNoType({)
             handleIdentifier(B, methodDeclaration)
             handleNoTypeVariables(()
@@ -122,7 +122,7 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B, (, :, ;)
+          endConstructor(DeclarationKind.Class, B, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -145,7 +145,7 @@
         beginMetadataStar(B2)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2, B2)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B2, B2)
             handleNoType({)
             handleIdentifier(B2, methodDeclaration)
             handleNoTypeVariables(()
@@ -188,7 +188,7 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B2, (, :, ;)
+          endConstructor(DeclarationKind.Class, B2, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -211,7 +211,7 @@
         beginMetadataStar(B3)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
             handleNoType({)
             handleIdentifier(B3, methodDeclaration)
             handleNoTypeVariables(()
@@ -254,12 +254,12 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B3, (, :, ;)
+          endConstructor(DeclarationKind.Class, B3, null, (, :, ;)
         endMember()
         beginMetadataStar(B3)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
             handleNoType(;)
             handleIdentifier(B3, methodDeclaration)
             handleIdentifier(y, methodDeclarationContinuation)
@@ -279,7 +279,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, B3, (, null, ;)
+          endConstructor(DeclarationKind.Class, B3, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -308,12 +308,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -354,7 +354,7 @@
             endInitializers(2, :, 21)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -377,7 +377,7 @@
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
             handleNoType({)
             handleIdentifier(D, methodDeclaration)
             handleNoTypeVariables(()
@@ -421,7 +421,7 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, D, (, :, ;)
+          endConstructor(DeclarationKind.Class, D, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -450,12 +450,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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, E)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, E, E)
             handleNoType(;)
             handleIdentifier(E, methodDeclaration)
             handleNoTypeVariables(()
@@ -501,7 +501,7 @@
             endInitializers(2, :, 2)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, E, (, :, ;)
+          endConstructor(DeclarationKind.Class, E, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
index b55899c..82b20fb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime.dart.intertwined.expect
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -67,7 +67,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -76,8 +76,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -113,7 +113,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -154,8 +154,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, B, DeclarationKind.Class, B, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B, B)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, B, DeclarationKind.Class, B, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B, B)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(B, methodDeclaration)
@@ -187,6 +187,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -212,6 +215,8 @@
                       parseSuperInitializerExpression(,)
                         parseInitializerExpressionRest(,)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -236,7 +241,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, B, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -277,8 +282,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, B2, DeclarationKind.Class, B2, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B2, B2)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, B2, DeclarationKind.Class, B2, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B2, B2)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(B2, methodDeclaration)
@@ -310,6 +315,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -335,6 +343,8 @@
                       parseSuperInitializerExpression(,)
                         parseInitializerExpressionRest(,)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -366,7 +376,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B2, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, B2, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -407,8 +417,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, B3, DeclarationKind.Class, B3, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, B3, DeclarationKind.Class, B3, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(B3, methodDeclaration)
@@ -440,6 +450,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -464,6 +477,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -495,7 +510,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B3, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, B3, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, B3)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, B3)
@@ -504,8 +519,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, B3, DeclarationKind.Class, B3, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, B3, B3)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, B3, DeclarationKind.Class, B3, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, B3, B3)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(B3, methodDeclaration)
@@ -541,7 +556,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, B3, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, B3, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -590,7 +605,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -599,8 +614,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -632,6 +647,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -656,6 +674,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -688,7 +709,7 @@
                 inPlainSync()
                 parseFunctionBody(21, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -729,8 +750,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, D, DeclarationKind.Class, D, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -762,6 +783,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -787,6 +811,9 @@
                       parseAssert(,, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -821,7 +848,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, D, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, D, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -872,7 +899,7 @@
                   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: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, E)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, E)
@@ -881,8 +908,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, E, DeclarationKind.Class, E, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, E, E)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, E, DeclarationKind.Class, E, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, E, E)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(E, methodDeclaration)
@@ -914,6 +941,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -938,6 +968,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -980,7 +1012,7 @@
                 inPlainSync()
                 parseFunctionBody(2, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, E, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, E, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
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
index abe6c8c..389d846 100644
--- 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
@@ -85,7 +85,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -113,7 +113,7 @@
               endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
               handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
             endRedirectingFactoryBody(=, ;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
         beginMetadataStar(0)
         endMetadataStar(0)
@@ -146,7 +146,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -169,7 +169,7 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'null'., null, {lexeme: null}], null, null)
             handleInvalidFunctionBody({)
-          endClassConstructor(null, C, (, :, })
+          endConstructor(DeclarationKind.Class, C, null, (, :, })
         endMember()
         beginMetadataStar(null)
         endMetadataStar(0)
@@ -193,7 +193,7 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got '0'., null, {lexeme: 0}], 0, 0)
             handleInvalidFunctionBody({)
-          endClassMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Class, null, operator, (, null, })
         endMember()
         beginMetadataStar(0)
         endMetadataStar(0)
@@ -226,7 +226,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -241,7 +241,7 @@
             endInitializers(1, :, 0)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -262,7 +262,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -289,7 +289,7 @@
             endInitializers(1, :, 0)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
index 7163a90..f193c0d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_48411_prime_1.dart.intertwined.expect
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -58,6 +58,9 @@
                           listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '(' before this., null, {string: (}], =, =)
                         rewriter()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -96,7 +99,7 @@
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
                     rewriter()
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, 0)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -104,7 +107,7 @@
                 listener: beginMetadataStar(0)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
                 listener: handleInvalidMember(0)
@@ -115,7 +118,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(0, 0, null, null, null, null, null, null, null, 0, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(0, 0, null, null, null, null, null, null, null, 0, NoType(), null, null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
@@ -156,8 +159,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -182,6 +185,9 @@
                       rewriter()
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -219,7 +225,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassConstructor(null, C, (, :, })
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, null)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -227,7 +233,7 @@
                 listener: beginMetadataStar(null)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(null, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got 'null'., null, {lexeme: null}], null, null)
                 listener: handleInvalidMember(null)
@@ -238,12 +244,12 @@
                 listener: beginMetadataStar(=)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(null, null, null, null, null, null, null, null, null, null, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(null, null, null, null, null, null, null, null, null, null, NoType(), null, 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, NoType(), null, operator, DeclarationKind.Class, C, false)
+                  parseMethod(null, null, null, null, null, null, null, null, null, NoType(), null, null, operator, DeclarationKind.Class, C, false)
                     listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, C)
                     listener: handleNoType(null)
                     parseOperatorName(null)
@@ -275,7 +281,7 @@
                           rewriter()
                           rewriter()
                       listener: handleInvalidFunctionBody({)
-                    listener: endClassMethod(null, operator, (, null, })
+                    listener: endMethod(DeclarationKind.Class, null, operator, (, null, })
                   listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, 0)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -283,7 +289,7 @@
                 listener: beginMetadataStar(0)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
                 listener: handleInvalidMember(0)
@@ -294,7 +300,7 @@
                 listener: beginMetadataStar(;)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(0, 0, null, null, null, null, null, null, null, 0, NoType(), null, DeclarationKind.Class, C)
+              recoverFromInvalidMember(0, 0, null, null, null, null, null, null, null, 0, NoType(), null, null, DeclarationKind.Class, C)
                 reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
                   listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
                 listener: handleInvalidMember(;)
@@ -335,8 +341,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -356,6 +362,8 @@
                       parseSuperInitializerExpression(:)
                         parseInitializerExpressionRest(:)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -375,7 +383,7 @@
                 inPlainSync()
                 parseFunctionBody(0, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -413,8 +421,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -442,6 +450,9 @@
                       rewriter()
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -483,7 +494,7 @@
                 inPlainSync()
                 parseFunctionBody(0, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect
index 28131f1..e7150f3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49116.dart.intertwined.expect
@@ -32,6 +32,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -54,6 +56,8 @@
                           listener: beginArguments(()
                           allowedToShortcutParseExpression()
                           parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -97,6 +101,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement({)
                 parseExpression({)
+                  looksLikeOuterPatternEquals({)
+                    skipOuterPattern({)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression({, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -130,9 +137,12 @@
             parseStatementX(;)
               parseIfStatement(;)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(await)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           inPlainSync()
@@ -175,9 +185,11 @@
                   parseStatementX(else)
                     parseIfStatement(else)
                       listener: beginIfStatement(if)
-                      ensureParenthesizedCondition(if, allowCase: false)
-                        parseExpressionInParenthesisRest((, allowCase: false)
+                      ensureParenthesizedCondition(if, allowCase: true)
+                        parseExpressionInParenthesisRest((, allowCase: true)
                           parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                 parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -228,6 +240,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
@@ -243,6 +258,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -280,6 +298,9 @@
                 looksLikeLocalFunction(xor)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(xor)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -295,6 +316,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -323,6 +347,9 @@
                                             listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -351,6 +378,9 @@
                                             listener: endInvalidAwaitExpression(await, ), AwaitNotAsync)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -389,6 +419,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement(;)
                 parseExpression(;)
+                  looksLikeOuterPatternEquals(;)
+                    skipOuterPattern(;)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(;, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -452,6 +485,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -467,6 +503,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -533,6 +572,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement(;)
                 parseExpression(;)
+                  looksLikeOuterPatternEquals(;)
+                    skipOuterPattern(;)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(;, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -596,6 +638,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -611,6 +656,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -677,6 +725,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement(;)
                 parseExpression(;)
+                  looksLikeOuterPatternEquals(;)
+                    skipOuterPattern(;)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(;, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -740,6 +791,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -755,6 +809,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -821,6 +878,8 @@
                   looksLikeLocalFunction(!)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -890,6 +949,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -905,6 +967,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -973,6 +1037,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(f)
                 looksLikeLocalFunction(f)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -986,6 +1052,9 @@
                     parseVariableInitializerOpt(f)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(returnsFuture)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1035,9 +1104,12 @@
             parseStatementX(;)
               parseIfStatement(;)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(await)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           inPlainSync()
@@ -1076,9 +1148,11 @@
                   parseStatementX(else)
                     parseIfStatement(else)
                       listener: beginIfStatement(if)
-                      ensureParenthesizedCondition(if, allowCase: false)
-                        parseExpressionInParenthesisRest((, allowCase: false)
+                      ensureParenthesizedCondition(if, allowCase: true)
+                        parseExpressionInParenthesisRest((, allowCase: true)
                           parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                 parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -1125,6 +1199,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
@@ -1140,6 +1217,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1173,6 +1253,9 @@
                 looksLikeLocalFunction(xor)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(xor)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1188,6 +1271,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1212,6 +1298,9 @@
                                             listener: endInvalidAwaitExpression(await, f, AwaitNotAsync)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1236,6 +1325,9 @@
                                             listener: endInvalidAwaitExpression(await, f, AwaitNotAsync)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1270,6 +1362,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement(;)
                 parseExpression(;)
+                  looksLikeOuterPatternEquals(;)
+                    skipOuterPattern(;)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(;, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -1325,6 +1420,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1340,6 +1438,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1398,6 +1499,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement(;)
                 parseExpression(;)
+                  looksLikeOuterPatternEquals(;)
+                    skipOuterPattern(;)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(;, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -1453,6 +1557,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1468,6 +1575,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1526,6 +1636,9 @@
                 looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.Statement)
               parseExpressionStatement(;)
                 parseExpression(;)
+                  looksLikeOuterPatternEquals(;)
+                    skipOuterPattern(;)
+                      skipObjectPatternRest(await)
                   parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(;, true, ConstantPatternContext.none)
                       inPlainSync()
@@ -1581,6 +1694,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1596,6 +1712,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(await)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           inPlainSync()
@@ -1654,6 +1773,8 @@
                   looksLikeLocalFunction(!)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -1715,6 +1836,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1730,6 +1854,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -1866,6 +1992,9 @@
                       parseVariableInitializerOpt(x2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(await)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               inPlainSync()
@@ -1909,6 +2038,9 @@
                       parseVariableInitializerOpt(y2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(await)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               inPlainSync()
@@ -1934,6 +2066,9 @@
                       parseVariableInitializerOpt(z2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(await)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               inPlainSync()
@@ -2005,6 +2140,8 @@
                             parseReturnStatement({)
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2105,6 +2242,9 @@
                             parseReturnStatement({)
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                    skipObjectPatternRest(baz)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2193,6 +2333,9 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(b)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49477.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49477.dart.intertwined.expect
index 17136dc..efaa2a8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_49477.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49477.dart.intertwined.expect
@@ -68,6 +68,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
+                skipOuterPattern(final)
+                  skipObjectPatternRest(proc)
                 looksLikeLocalFunction(proc)
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
@@ -81,6 +83,9 @@
                     parseVariableInitializerOpt(proc)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(await)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             inPlainSync()
@@ -112,6 +117,8 @@
                                             listener: endLiteralString(0, ,)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -137,6 +144,9 @@
                 looksLikeLocalFunction(proc)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(stdout)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_49477_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_49477_prime.dart.intertwined.expect
index f73566a..d159530 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_49477_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_49477_prime.dart.intertwined.expect
@@ -68,6 +68,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
+                skipOuterPattern(final)
+                  skipObjectPatternRest(proc)
                 looksLikeLocalFunction(proc)
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
@@ -81,6 +83,9 @@
                     parseVariableInitializerOpt(proc)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(await)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             inPlainSync()
@@ -112,6 +117,8 @@
                                             listener: endLiteralString(0, ,)
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -137,6 +144,9 @@
                 looksLikeLocalFunction(proc)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(stdout)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -206,6 +216,8 @@
                           parseReturnStatement({)
                             listener: beginReturnStatement(return)
                             parseExpression(return)
+                              looksLikeOuterPatternEquals(return)
+                                skipOuterPattern(return)
                               parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(return, true, ConstantPatternContext.none)
                                   parsePrimary(return, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok.dart.intertwined.expect
index ab8d68a..89779c6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok.dart.intertwined.expect
@@ -50,6 +50,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -128,6 +130,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -206,6 +210,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -284,6 +290,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -338,6 +346,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok_prime.dart.intertwined.expect
index 0a3eefa..a489c18 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_50908_ok_prime.dart.intertwined.expect
@@ -49,6 +49,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -125,6 +127,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -201,6 +205,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -277,6 +283,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -330,6 +338,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_51759.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_51759.crash_dart.intertwined.expect
index 4952bba..231f697 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_51759.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_51759.crash_dart.intertwined.expect
@@ -57,6 +57,8 @@
                   looksLikeLocalFunction(<)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_51759_as_reported.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_51759_as_reported.crash_dart.intertwined.expect
index 483c3e8..d420f0f1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_51759_as_reported.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_51759_as_reported.crash_dart.intertwined.expect
@@ -57,6 +57,8 @@
                   looksLikeLocalFunction(<)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_51759_prime.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_51759_prime.crash_dart.intertwined.expect
index e8526fc..c3519f2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_51759_prime.crash_dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_51759_prime.crash_dart.intertwined.expect
@@ -57,6 +57,8 @@
                   looksLikeLocalFunction(<)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.expect
index 400050b..b338621 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.expect
@@ -81,12 +81,12 @@
             handleNoType(var)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -110,12 +110,12 @@
             endInitializers(1, :, isEven)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, :, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, :, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -141,7 +141,7 @@
             endInitializers(1, :, isEven)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, :, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
@@ -166,12 +166,12 @@
             handleNoType(var)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -199,12 +199,12 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, :, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, :, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -234,7 +234,7 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, :, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
@@ -259,12 +259,12 @@
             handleNoType(var)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -290,12 +290,12 @@
             endInitializers(1, :, isEven)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, :, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, :, ;)
         endMember()
         beginMetadataStar(A)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
             handleNoType(;)
             handleIdentifier(A, methodDeclaration)
             handleNoTypeVariables(()
@@ -323,7 +323,7 @@
             endInitializers(1, :, isEven)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, A, (, :, ;)
+          endConstructor(DeclarationKind.Class, A, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.intertwined.expect
index 07b672c..2e04aae 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_54284.dart.intertwined.expect
@@ -18,8 +18,12 @@
         parseFieldInitializerOpt(x, x, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parseThrowExpression(=, true)
               parseExpression(throw)
+                looksLikeOuterPatternEquals(throw)
+                  skipOuterPattern(throw)
                 parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                   parseUnaryExpression(throw, true, ConstantPatternContext.none)
                     parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -68,6 +72,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(x)
                 looksLikeLocalFunction(x)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -90,6 +96,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -105,6 +114,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -118,6 +130,8 @@
                                                 listener: handleSend(x, x)
                                         parseThrowExpression(=, true)
                                           parseExpression(throw)
+                                            looksLikeOuterPatternEquals(throw)
+                                              skipOuterPattern(throw)
                                             parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                                 parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -185,7 +199,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, var, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -194,8 +208,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -214,6 +228,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -227,6 +244,8 @@
                                     listener: handleSend(x, x)
                             parseThrowExpression(=, true)
                               parseExpression(throw)
+                                looksLikeOuterPatternEquals(throw)
+                                  skipOuterPattern(throw)
                                 parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                     parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -252,7 +271,7 @@
                 inPlainSync()
                 parseFunctionBody(isEven, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -261,8 +280,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -281,6 +300,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -298,6 +319,8 @@
                             listener: handleDotAccess(., x, false)
                             parseThrowExpression(=, true)
                               parseExpression(throw)
+                                looksLikeOuterPatternEquals(throw)
+                                  skipOuterPattern(throw)
                                 parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                     parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -323,7 +346,7 @@
                 inPlainSync()
                 parseFunctionBody(isEven, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
@@ -369,7 +392,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, var, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -378,8 +401,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -398,6 +421,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -416,8 +442,12 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
                                         parseThrowExpression((, true)
                                           parseExpression(throw)
+                                            looksLikeOuterPatternEquals(throw)
+                                              skipOuterPattern(throw)
                                             parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                                 parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -447,7 +477,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -456,8 +486,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -476,6 +506,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -498,8 +530,12 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
                                         parseThrowExpression((, true)
                                           parseExpression(throw)
+                                            looksLikeOuterPatternEquals(throw)
+                                              skipOuterPattern(throw)
                                             parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                                 parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -529,7 +565,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
@@ -575,7 +611,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, var, DeclarationKind.Class, A)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -584,8 +620,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -604,6 +640,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -617,6 +656,8 @@
                                     listener: handleSend(x, x)
                             parseThrowExpression(=, true)
                               parseExpression(throw)
+                                looksLikeOuterPatternEquals(throw)
+                                  skipOuterPattern(throw)
                                 parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                     parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -644,7 +685,7 @@
                 inPlainSync()
                 parseFunctionBody(isEven, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, A)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, A)
@@ -653,8 +694,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, A, DeclarationKind.Class, A, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, A, DeclarationKind.Class, A, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, A, A)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(A, methodDeclaration)
@@ -673,6 +714,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -690,6 +733,8 @@
                             listener: handleDotAccess(., x, false)
                             parseThrowExpression(=, true)
                               parseExpression(throw)
+                                looksLikeOuterPatternEquals(throw)
+                                  skipOuterPattern(throw)
                                 parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                     parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -717,7 +762,7 @@
                 inPlainSync()
                 parseFunctionBody(isEven, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, A, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, A, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 89126bf..6f63b3d 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
@@ -157,7 +157,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -170,7 +170,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -184,7 +184,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -197,7 +197,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -210,7 +210,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -224,7 +224,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -238,7 +238,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -252,7 +252,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -266,7 +266,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -280,7 +280,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -294,7 +294,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -307,7 +307,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -321,7 +321,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -334,7 +334,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -348,7 +348,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -361,7 +361,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -375,7 +375,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -389,7 +389,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -402,7 +402,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -416,7 +416,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -429,7 +429,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -442,7 +442,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -455,7 +455,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -469,7 +469,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -483,7 +483,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -497,7 +497,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -511,7 +511,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -524,7 +524,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -537,7 +537,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -550,7 +550,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -564,7 +564,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -577,7 +577,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -590,7 +590,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -604,7 +604,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -617,7 +617,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -630,7 +630,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -644,7 +644,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -657,7 +657,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -670,7 +670,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -683,7 +683,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -696,7 +696,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -710,7 +710,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -724,7 +724,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -737,7 +737,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -750,7 +750,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -763,7 +763,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -776,7 +776,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -789,7 +789,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -802,7 +802,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -815,7 +815,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -829,7 +829,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -843,7 +843,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -856,7 +856,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -869,7 +869,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -882,7 +882,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -895,7 +895,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -909,7 +909,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -923,7 +923,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -936,7 +936,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -950,7 +950,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -964,7 +964,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -978,7 +978,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -992,7 +992,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1005,7 +1005,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1019,7 +1019,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1033,7 +1033,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1047,7 +1047,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1061,7 +1061,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1074,7 +1074,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 ac29efb..4547312 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
@@ -43,13 +43,15 @@
                 parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -67,13 +69,15 @@
                 parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -95,13 +99,15 @@
                 parseFieldInitializerOpt(assert, assert, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -119,13 +125,15 @@
                 parseFieldInitializerOpt(async, async, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -143,13 +151,15 @@
                 parseFieldInitializerOpt(await, await, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -171,13 +181,15 @@
                 parseFieldInitializerOpt(break, break, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -199,13 +211,15 @@
                 parseFieldInitializerOpt(case, case, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -227,13 +241,15 @@
                 parseFieldInitializerOpt(catch, catch, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -255,13 +271,15 @@
                 parseFieldInitializerOpt(class, class, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -283,13 +301,15 @@
                 parseFieldInitializerOpt(const, const, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -311,13 +331,15 @@
                 parseFieldInitializerOpt(continue, continue, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -335,13 +357,15 @@
                 parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -363,13 +387,15 @@
                 parseFieldInitializerOpt(default, default, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -387,13 +413,15 @@
                 parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -415,13 +443,15 @@
                 parseFieldInitializerOpt(do, do, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -439,13 +469,15 @@
                 parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -467,13 +499,15 @@
                 parseFieldInitializerOpt(else, else, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -495,13 +529,15 @@
                 parseFieldInitializerOpt(enum, enum, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -519,13 +555,15 @@
                 parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -547,13 +585,15 @@
                 parseFieldInitializerOpt(extends, extends, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -571,13 +611,15 @@
                 parseFieldInitializerOpt(extension, extension, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -595,13 +637,15 @@
                 parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -619,13 +663,15 @@
                 parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -647,13 +693,15 @@
                 parseFieldInitializerOpt(false, false, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -675,13 +723,15 @@
                 parseFieldInitializerOpt(final, final, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -703,13 +753,15 @@
                 parseFieldInitializerOpt(finally, finally, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -731,13 +783,15 @@
                 parseFieldInitializerOpt(for, for, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -755,13 +809,15 @@
                 parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -780,13 +836,15 @@
                 parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -804,13 +862,15 @@
                 parseFieldInitializerOpt(hide, hide, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -832,13 +892,15 @@
                 parseFieldInitializerOpt(if, if, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -856,13 +918,15 @@
                 parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -880,13 +944,15 @@
                 parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -908,13 +974,15 @@
                 parseFieldInitializerOpt(in, in, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -932,13 +1000,15 @@
                 parseFieldInitializerOpt(inout, inout, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -956,13 +1026,15 @@
                 parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -984,13 +1056,15 @@
                 parseFieldInitializerOpt(is, is, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1008,13 +1082,15 @@
                 parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1032,13 +1108,15 @@
                 parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1056,13 +1134,15 @@
                 parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1080,13 +1160,15 @@
                 parseFieldInitializerOpt(native, native, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1108,13 +1190,15 @@
                 parseFieldInitializerOpt(new, new, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1136,13 +1220,15 @@
                 parseFieldInitializerOpt(null, null, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1160,13 +1246,15 @@
                 parseFieldInitializerOpt(of, of, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1184,13 +1272,15 @@
                 parseFieldInitializerOpt(on, on, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1209,13 +1299,15 @@
                 parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1233,13 +1325,15 @@
                 parseFieldInitializerOpt(out, out, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1257,13 +1351,15 @@
                 parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1281,13 +1377,15 @@
                 parseFieldInitializerOpt(patch, patch, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1305,13 +1403,15 @@
                 parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1333,13 +1433,15 @@
                 parseFieldInitializerOpt(rethrow, rethrow, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1361,13 +1463,15 @@
                 parseFieldInitializerOpt(return, return, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1386,13 +1490,15 @@
                 parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1410,13 +1516,15 @@
                 parseFieldInitializerOpt(show, show, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1434,13 +1542,15 @@
                 parseFieldInitializerOpt(source, source, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1458,13 +1568,15 @@
                 parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1472,7 +1584,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, null, ;, SimpleType(), null, DeclarationKind.Class, WrapperClass)
+              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, DeclarationKind.Class, WrapperClass)
                 parseFields(;, null, null, null, null, null, null, null, ;, SimpleType(), super, DeclarationKind.Class, WrapperClass, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, ;)
                   listener: handleIdentifier(int, typeReference)
@@ -1485,13 +1597,15 @@
                   parseFieldInitializerOpt(super, super, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                     listener: beginFieldInitializer(=)
                     parseExpression(=)
+                      looksLikeOuterPatternEquals(=)
+                        skipOuterPattern(=)
                       parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=, true, ConstantPatternContext.none)
                           parsePrimary(=, expression, ConstantPatternContext.none)
                             parseLiteralInt(=)
                               listener: handleLiteralInt(42)
                     listener: endFieldInitializer(=, 42)
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1513,13 +1627,15 @@
                 parseFieldInitializerOpt(switch, switch, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1537,13 +1653,15 @@
                 parseFieldInitializerOpt(sync, sync, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1551,27 +1669,28 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(int, ;, null, null, null, null, null, null, null, ;, SimpleType(), null, DeclarationKind.Class, WrapperClass)
-                parseFields(;, null, null, null, null, null, null, null, ;, 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, Template(ExpectedIdentifierButGotKeyword))
-                      listener: handleRecoverableError(Message[Template(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, ConstantPatternContext.none)
-                        parseUnaryExpression(=, true, ConstantPatternContext.none)
-                          parsePrimary(=, expression, ConstantPatternContext.none)
-                            parseLiteralInt(=)
-                              listener: handleLiteralInt(42)
-                    listener: endFieldInitializer(=, 42)
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
-                listener: endMember()
+              parseFields(;, null, null, null, null, null, null, null, ;, 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, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
+                    parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(=, true, ConstantPatternContext.none)
+                        parsePrimary(=, expression, ConstantPatternContext.none)
+                          parseLiteralInt(=)
+                            listener: handleLiteralInt(42)
+                  listener: endFieldInitializer(=, 42)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
+              listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
               parseMetadataStar(;)
@@ -1592,13 +1711,15 @@
                 parseFieldInitializerOpt(throw, throw, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1620,13 +1741,15 @@
                 parseFieldInitializerOpt(true, true, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1648,13 +1771,15 @@
                 parseFieldInitializerOpt(try, try, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1672,13 +1797,15 @@
                 parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1700,13 +1827,15 @@
                 parseFieldInitializerOpt(var, var, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1728,13 +1857,15 @@
                 parseFieldInitializerOpt(void, void, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1756,13 +1887,15 @@
                 parseFieldInitializerOpt(while, while, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1784,13 +1917,15 @@
                 parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -1808,13 +1943,15 @@
                 parseFieldInitializerOpt(yield, yield, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 69, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart
index 1ea315f..4661e15 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 class WrapperClass {
   int abstract(int x) {
     if (x == 0) return 42;
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 7a40a7c..c5a998f 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
@@ -1,490 +1,482 @@
 Problems reported:
 
-parser/error_recovery/keyword_named_class_methods:12:7: 'assert' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:13:7: 'assert' can't be used as an identifier because it's a keyword.
   int assert(int x) {
       ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:14:12: `assert` can't be used as an expression.
+parser/error_recovery/keyword_named_class_methods:15:12: `assert` can't be used as an expression.
     return assert(x-1) + 1;
            ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:27:7: 'break' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:28:7: 'break' can't be used as an identifier because it's a keyword.
   int break(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:29:12: Expected an identifier, but got 'break'.
+parser/error_recovery/keyword_named_class_methods:30:12: Expected an identifier, but got 'break'.
     return break(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:29:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:30:5: Expected ';' after this.
     return break(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:29:12: A break statement can't be used outside of a loop or switch statement.
+parser/error_recovery/keyword_named_class_methods:30:12: A break statement can't be used outside of a loop or switch statement.
     return break(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:29:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:30:12: Expected ';' after this.
     return break(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:32:7: 'case' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:33:7: 'case' can't be used as an identifier because it's a keyword.
   int case(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:34:12: 'case' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:35:12: 'case' can't be used as an identifier because it's a keyword.
     return case(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:37:7: 'catch' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:38:7: 'catch' can't be used as an identifier because it's a keyword.
   int catch(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:39:12: 'catch' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:40:12: 'catch' can't be used as an identifier because it's a keyword.
     return catch(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:42:7: 'class' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:43:7: 'class' can't be used as an identifier because it's a keyword.
   int class(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:44:12: 'class' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:45:12: 'class' can't be used as an identifier because it's a keyword.
     return class(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:47:7: 'const' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:48:7: 'const' can't be used as an identifier because it's a keyword.
   int const(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:49:21: A record literal with exactly one positional field requires a trailing comma.
+parser/error_recovery/keyword_named_class_methods:50:21: A record literal with exactly one positional field requires a trailing comma.
     return const(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_class_methods:52:7: 'continue' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:53:7: 'continue' can't be used as an identifier because it's a keyword.
   int continue(int x) {
       ^^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:54:12: Expected an identifier, but got 'continue'.
+parser/error_recovery/keyword_named_class_methods:55:12: Expected an identifier, but got 'continue'.
     return continue(x-1) + 1;
            ^^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:54:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:55:5: Expected ';' after this.
     return continue(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:54:12: A continue statement can't be used outside of a loop or switch statement.
+parser/error_recovery/keyword_named_class_methods:55:12: A continue statement can't be used outside of a loop or switch statement.
     return continue(x-1) + 1;
            ^^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:54:12: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:55:12: Expected ';' after this.
     return continue(x-1) + 1;
            ^^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:62:7: 'default' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:63:7: 'default' can't be used as an identifier because it's a keyword.
   int default(int x) {
       ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:64:12: 'default' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:65:12: 'default' can't be used as an identifier because it's a keyword.
     return default(x-1) + 1;
            ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:72:7: 'do' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:73:7: 'do' can't be used as an identifier because it's a keyword.
   int do(int x) {
       ^^
 
-parser/error_recovery/keyword_named_class_methods:74:12: Expected an identifier, but got 'do'.
+parser/error_recovery/keyword_named_class_methods:75:12: Expected an identifier, but got 'do'.
     return do(x-1) + 1;
            ^^
 
-parser/error_recovery/keyword_named_class_methods:74:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:75:5: Expected ';' after this.
     return do(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:75:3: Expected 'while' before this.
+parser/error_recovery/keyword_named_class_methods:76:3: Expected 'while' before this.
   }
   ^
 
-parser/error_recovery/keyword_named_class_methods:75:3: Expected to find '('.
+parser/error_recovery/keyword_named_class_methods:76:3: Expected to find '('.
   }
   ^
 
-parser/error_recovery/keyword_named_class_methods:75:3: Expected an identifier, but got '}'.
+parser/error_recovery/keyword_named_class_methods:76:3: Expected an identifier, but got '}'.
   }
   ^
 
-parser/error_recovery/keyword_named_class_methods:74:23: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:75: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.
+parser/error_recovery/keyword_named_class_methods:83:7: 'else' can't be used as an identifier because it's a keyword.
   int else(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:12: Expected an identifier, but got 'else'.
+parser/error_recovery/keyword_named_class_methods:85:12: Expected an identifier, but got 'else'.
     return else(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:85:5: Expected ';' after this.
     return else(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:12: Expected an identifier, but got 'else'.
+parser/error_recovery/keyword_named_class_methods:85:12: Expected an identifier, but got 'else'.
     return else(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:85:5: Expected ';' after this.
     return else(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:84:12: Unexpected token ';'.
+parser/error_recovery/keyword_named_class_methods:85:12: Unexpected token ';'.
     return else(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:87:7: 'enum' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:88:7: 'enum' can't be used as an identifier because it's a keyword.
   int enum(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:89:12: 'enum' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:90:12: 'enum' can't be used as an identifier because it's a keyword.
     return enum(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:97:7: 'extends' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:98:7: 'extends' can't be used as an identifier because it's a keyword.
   int extends(int x) {
       ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:99:12: 'extends' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:100:12: 'extends' can't be used as an identifier because it's a keyword.
     return extends(x-1) + 1;
            ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:117:7: 'false' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:118:7: 'false' can't be used as an identifier because it's a keyword.
   int false(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:122:7: 'final' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:123:7: 'final' can't be used as an identifier because it's a keyword.
   int final(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:124:12: Expected an identifier, but got 'final'.
+parser/error_recovery/keyword_named_class_methods:125:12: Expected an identifier, but got 'final'.
     return final(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:124:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:125:5: Expected ';' after this.
     return final(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:124:17: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_class_methods:125:17: Expected an identifier, but got '('.
     return final(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_class_methods:124:17: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:125:17: Expected ';' after this.
     return final(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_class_methods:124:20: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:125:20: Expected ';' after this.
     return final(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:124:21: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_class_methods:125:21: Expected an identifier, but got ')'.
     return final(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_class_methods:124:20: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:125:20: Expected ';' after this.
     return final(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:124:21: Unexpected token ';'.
+parser/error_recovery/keyword_named_class_methods:125:21: Unexpected token ';'.
     return final(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_class_methods:124:23: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:125:23: '+' is not a prefix operator.
     return final(x-1) + 1;
                       ^
 
-parser/error_recovery/keyword_named_class_methods:127:7: 'finally' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:128:7: 'finally' can't be used as an identifier because it's a keyword.
   int finally(int x) {
       ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:129:12: 'finally' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:130:12: 'finally' can't be used as an identifier because it's a keyword.
     return finally(x-1) + 1;
            ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:132:7: 'for' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:133:7: 'for' can't be used as an identifier because it's a keyword.
   int for(int x) {
       ^^^
 
-parser/error_recovery/keyword_named_class_methods:134:12: Expected an identifier, but got 'for'.
+parser/error_recovery/keyword_named_class_methods:135:12: Expected an identifier, but got 'for'.
     return for(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:134:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:135:5: Expected ';' after this.
     return for(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:134:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:135:18: Expected ';' after this.
     return for(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_class_methods:134:19: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_class_methods:135:19: Expected an identifier, but got ')'.
     return for(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:134:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:135:18: Expected ';' after this.
     return for(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_class_methods:134:21: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:135:21: '+' is not a prefix operator.
     return for(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_class_methods:152:7: 'if' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:153:7: 'if' can't be used as an identifier because it's a keyword.
   int if(int x) {
       ^^
 
-parser/error_recovery/keyword_named_class_methods:154:12: Expected an identifier, but got 'if'.
+parser/error_recovery/keyword_named_class_methods:155:12: Expected an identifier, but got 'if'.
     return if(x-1) + 1;
            ^^
 
-parser/error_recovery/keyword_named_class_methods:154:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:155:5: Expected ';' after this.
     return if(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:154:20: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:155:20: '+' is not a prefix operator.
     return if(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:167:7: 'in' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:168:7: 'in' can't be used as an identifier because it's a keyword.
   int in(int x) {
       ^^
 
-parser/error_recovery/keyword_named_class_methods:169:12: 'in' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:170:12: 'in' can't be used as an identifier because it's a keyword.
     return in(x-1) + 1;
            ^^
 
-parser/error_recovery/keyword_named_class_methods:182:7: 'is' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:183:7: 'is' can't be used as an identifier because it's a keyword.
   int is(int x) {
       ^^
 
-parser/error_recovery/keyword_named_class_methods:184:12: Expected an identifier, but got 'is'.
+parser/error_recovery/keyword_named_class_methods:185:12: Expected an identifier, but got 'is'.
     return is(x-1) + 1;
            ^^
 
-parser/error_recovery/keyword_named_class_methods:184:16: Expected ')' before this.
+parser/error_recovery/keyword_named_class_methods:185:16: Expected ')' before this.
     return is(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_class_methods:184:18: A record type with exactly one positional field requires a trailing comma.
+parser/error_recovery/keyword_named_class_methods:185:18: A record type with exactly one positional field requires a trailing comma.
     return is(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_class_methods:184:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:185:18: Expected ';' after this.
     return is(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_class_methods:184:20: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:185:20: '+' is not a prefix operator.
     return is(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:207:7: 'new' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:208:7: 'new' can't be used as an identifier because it's a keyword.
   int new(int x) {
       ^^^
 
-parser/error_recovery/keyword_named_class_methods:209:15: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_class_methods:210:15: Expected an identifier, but got '('.
     return new(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_class_methods:212:7: 'null' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:213:7: 'null' can't be used as an identifier because it's a keyword.
   int null(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:252:7: 'rethrow' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:253:7: 'rethrow' can't be used as an identifier because it's a keyword.
   int rethrow(int x) {
       ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:254:12: 'rethrow' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:255:12: 'rethrow' can't be used as an identifier because it's a keyword.
     return rethrow(x-1) + 1;
            ^^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:257:7: 'return' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:258:7: 'return' can't be used as an identifier because it's a keyword.
   int return(int x) {
       ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:259:12: Unexpected token 'return'.
+parser/error_recovery/keyword_named_class_methods:260:12: Unexpected token 'return'.
     return return(x-1) + 1;
            ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:282:7: 'super' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:283:7: 'super' can't be used as an identifier because it's a keyword.
   int super(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:282:7: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:283:7: Expected ';' after this.
   int super(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:282:12: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_class_methods:283: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.
+parser/error_recovery/keyword_named_class_methods:288:7: 'switch' can't be used as an identifier because it's a keyword.
   int switch(int x) {
       ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:289:12: Expected an identifier, but got 'switch'.
+parser/error_recovery/keyword_named_class_methods:290:12: Expected an identifier, but got 'switch'.
     return switch(x-1) + 1;
            ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:289:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:290:5: Expected ';' after this.
     return switch(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:289:22: A switch statement must have a body, even if it is empty.
+parser/error_recovery/keyword_named_class_methods:290:22: A switch statement must have a body, even if it is empty.
     return switch(x-1) + 1;
                      ^
 
-parser/error_recovery/keyword_named_class_methods:289:24: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:290:24: '+' is not a prefix operator.
     return switch(x-1) + 1;
                        ^
 
-parser/error_recovery/keyword_named_class_methods:297:7: 'this' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:298:7: 'this' can't be used as an identifier because it's a keyword.
   int this(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:297:7: Expected ';' after this.
-  int this(int x) {
-      ^^^^
-
-parser/error_recovery/keyword_named_class_methods:297:11: Expected an identifier, but got '('.
-  int this(int x) {
-          ^
-
-parser/error_recovery/keyword_named_class_methods:302:7: 'throw' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:303:7: 'throw' can't be used as an identifier because it's a keyword.
   int throw(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:307:7: 'true' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:308:7: 'true' can't be used as an identifier because it's a keyword.
   int true(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:312:7: 'try' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:313:7: 'try' can't be used as an identifier because it's a keyword.
   int try(int x) {
       ^^^
 
-parser/error_recovery/keyword_named_class_methods:314:12: Expected an identifier, but got 'try'.
+parser/error_recovery/keyword_named_class_methods:315:12: Expected an identifier, but got 'try'.
     return try(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:314:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:315:5: Expected ';' after this.
     return try(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:314:12: A try statement must have a body, even if it is empty.
+parser/error_recovery/keyword_named_class_methods:315:12: A try statement must have a body, even if it is empty.
     return try(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:314:12: A try block must be followed by an 'on', 'catch', or 'finally' clause.
+parser/error_recovery/keyword_named_class_methods:315:12: A try block must be followed by an 'on', 'catch', or 'finally' clause.
     return try(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:322:7: 'var' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:323:7: 'var' can't be used as an identifier because it's a keyword.
   int var(int x) {
       ^^^
 
-parser/error_recovery/keyword_named_class_methods:324:12: Expected an identifier, but got 'var'.
+parser/error_recovery/keyword_named_class_methods:325:12: Expected an identifier, but got 'var'.
     return var(x-1) + 1;
            ^^^
 
-parser/error_recovery/keyword_named_class_methods:324:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:325:5: Expected ';' after this.
     return var(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:324:15: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_class_methods:325:15: Expected an identifier, but got '('.
     return var(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_class_methods:324:15: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:325:15: Expected ';' after this.
     return var(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_class_methods:324:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:325:18: Expected ';' after this.
     return var(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_class_methods:324:19: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_class_methods:325:19: Expected an identifier, but got ')'.
     return var(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:324:18: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:325:18: Expected ';' after this.
     return var(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_class_methods:324:19: Unexpected token ';'.
+parser/error_recovery/keyword_named_class_methods:325:19: Unexpected token ';'.
     return var(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:324:21: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:325:21: '+' is not a prefix operator.
     return var(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_class_methods:327:7: 'void' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:328:7: 'void' can't be used as an identifier because it's a keyword.
   int void(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:329:12: Expected an identifier, but got 'void'.
+parser/error_recovery/keyword_named_class_methods:330:12: Expected an identifier, but got 'void'.
     return void(x-1) + 1;
            ^^^^
 
-parser/error_recovery/keyword_named_class_methods:329:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:330:5: Expected ';' after this.
     return void(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:329:16: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_class_methods:330:16: Expected an identifier, but got '('.
     return void(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_class_methods:329:16: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:330:16: Expected ';' after this.
     return void(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_class_methods:329:19: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:330:19: Expected ';' after this.
     return void(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:329:20: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_class_methods:330:20: Expected an identifier, but got ')'.
     return void(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:329:19: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:330:19: Expected ';' after this.
     return void(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_class_methods:329:20: Unexpected token ';'.
+parser/error_recovery/keyword_named_class_methods:330:20: Unexpected token ';'.
     return void(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_class_methods:329:22: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:330:22: '+' is not a prefix operator.
     return void(x-1) + 1;
                      ^
 
-parser/error_recovery/keyword_named_class_methods:332:7: 'while' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:333:7: 'while' can't be used as an identifier because it's a keyword.
   int while(int x) {
       ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:334:12: Expected an identifier, but got 'while'.
+parser/error_recovery/keyword_named_class_methods:335:12: Expected an identifier, but got 'while'.
     return while(x-1) + 1;
            ^^^^^
 
-parser/error_recovery/keyword_named_class_methods:334:5: Expected ';' after this.
+parser/error_recovery/keyword_named_class_methods:335:5: Expected ';' after this.
     return while(x-1) + 1;
     ^^^^^^
 
-parser/error_recovery/keyword_named_class_methods:334:23: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_class_methods:335:23: '+' is not a prefix operator.
     return while(x-1) + 1;
                       ^
 
-parser/error_recovery/keyword_named_class_methods:337:7: 'with' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:338:7: 'with' can't be used as an identifier because it's a keyword.
   int with(int x) {
       ^^^^
 
-parser/error_recovery/keyword_named_class_methods:339:12: 'with' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_class_methods:340:12: 'with' can't be used as an identifier because it's a keyword.
     return with(x-1) + 1;
            ^^^^
 
@@ -558,7 +550,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -616,7 +608,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -673,7 +665,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -731,7 +723,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -789,7 +781,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -855,7 +847,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement((, ;)
             endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -915,7 +907,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -975,7 +967,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1035,7 +1027,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1094,7 +1086,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1160,7 +1152,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement((, ;)
             endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1218,7 +1210,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1278,7 +1270,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1336,7 +1328,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1412,7 +1404,7 @@
                 handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ;, ;)
               endDoWhileStatement(do, while, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1470,7 +1462,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1541,7 +1533,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement((, ;)
             endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1601,7 +1593,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1659,7 +1651,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1719,7 +1711,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1777,7 +1769,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1835,7 +1827,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1893,7 +1885,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1952,7 +1944,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2039,7 +2031,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement(+, ;)
             endBlockFunctionBody(6, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2099,7 +2091,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2179,7 +2171,7 @@
                 endForStatementBody(;)
               endForStatement(;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2237,7 +2229,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2295,7 +2287,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2353,7 +2345,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2424,7 +2416,7 @@
                 endThenStatement(+, ;)
               endIfStatement(if, null, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2482,7 +2474,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2540,7 +2532,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2600,7 +2592,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2658,7 +2650,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2716,7 +2708,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2790,7 +2782,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement(+, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2848,7 +2840,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2906,7 +2898,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -2964,7 +2956,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3022,7 +3014,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3086,7 +3078,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3145,7 +3137,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3203,7 +3195,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3261,7 +3253,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3319,7 +3311,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3377,7 +3369,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3435,7 +3427,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3493,7 +3485,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3551,7 +3543,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3611,7 +3603,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3668,7 +3660,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3726,7 +3718,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3784,7 +3776,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3842,7 +3834,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3900,7 +3892,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -3913,7 +3905,7 @@
             handleIdentifier(super, fieldDeclaration)
             handleNoFieldInitializer(()
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -3970,7 +3962,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, , (, null, })
+          endMethod(DeclarationKind.Class, null, , (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4042,7 +4034,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement(+, ;)
             endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4100,28 +4092,17 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
         beginMember()
-          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
             handleIdentifier(int, typeReference)
             handleNoTypeArguments(this)
             handleType(int, null)
             handleRecoverableError(Message[Template(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, fieldDeclaration)
-            handleNoFieldInitializer(()
-            handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], this, this)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
-        endMember()
-        beginMetadataStar(()
-        endMetadataStar(0)
-        beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
-            handleNoType(;)
-            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
-            handleIdentifier(, methodDeclaration)
+            handleIdentifier(this, methodDeclaration)
             handleNoTypeVariables(()
             beginFormalParameters((, MemberKind.NonStaticMethod)
               beginMetadataStar(int)
@@ -4170,7 +4151,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, , (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4227,7 +4208,7 @@
                 handleThrowExpression(throw, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4286,7 +4267,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4355,7 +4336,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement((, ;)
             endBlockFunctionBody(4, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4413,7 +4394,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4500,7 +4481,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement(+, ;)
             endBlockFunctionBody(6, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4587,7 +4568,7 @@
               endBinaryExpression(+, 1)
               handleExpressionStatement(+, ;)
             endBlockFunctionBody(6, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4658,7 +4639,7 @@
                 endWhileStatementBody(;)
               endWhileStatement(while, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4718,7 +4699,7 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -4776,9 +4757,9 @@
                 endBinaryExpression(+, 1)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
     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 00bd591..97c82109 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, abstract, DeclarationKind.Class, WrapperClass, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, abstract, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
@@ -167,7 +167,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -175,7 +175,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, as, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, as, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
@@ -309,7 +309,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -319,7 +319,7 @@
               listener: beginMember()
               isReservedKeyword(assert)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, assert, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, assert, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, assert, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(assert)
@@ -446,7 +446,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -454,7 +454,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, async, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, async, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, async, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(async)
@@ -588,7 +588,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -596,7 +596,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, await, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, await, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, await, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(await)
@@ -733,7 +733,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -743,7 +743,7 @@
               listener: beginMember()
               isReservedKeyword(break)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, break, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, break, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, break, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(break)
@@ -908,7 +908,7 @@
                             listener: handleExpressionStatement((, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -918,7 +918,7 @@
               listener: beginMember()
               isReservedKeyword(case)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, case, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, case, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, case, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(case)
@@ -1053,7 +1053,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1063,7 +1063,7 @@
               listener: beginMember()
               isReservedKeyword(catch)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, catch, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, catch, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, catch, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(catch)
@@ -1198,7 +1198,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1208,7 +1208,7 @@
               listener: beginMember()
               isReservedKeyword(class)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, class, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, class, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, class, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(class)
@@ -1343,7 +1343,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1353,7 +1353,7 @@
               listener: beginMember()
               isReservedKeyword(const)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, const, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, const, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, const, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(const)
@@ -1483,7 +1483,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1493,7 +1493,7 @@
               listener: beginMember()
               isReservedKeyword(continue)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, continue, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, continue, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, continue, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(continue)
@@ -1658,7 +1658,7 @@
                             listener: handleExpressionStatement((, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1666,7 +1666,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, covariant, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, covariant, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
@@ -1800,7 +1800,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1810,7 +1810,7 @@
               listener: beginMember()
               isReservedKeyword(default)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, default, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, default, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, default, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(default)
@@ -1945,7 +1945,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1953,7 +1953,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, deferred, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, deferred, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
@@ -2087,7 +2087,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2097,7 +2097,7 @@
               listener: beginMember()
               isReservedKeyword(do)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, do, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, do, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, do, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(do)
@@ -2285,7 +2285,7 @@
                         listener: endDoWhileStatement(do, while, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2293,7 +2293,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, dynamic, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, dynamic, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
@@ -2427,7 +2427,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2437,7 +2437,7 @@
               listener: beginMember()
               isReservedKeyword(else)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, else, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, else, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, else, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(else)
@@ -2619,7 +2619,7 @@
                             listener: handleExpressionStatement((, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2629,7 +2629,7 @@
               listener: beginMember()
               isReservedKeyword(enum)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, enum, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, enum, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, enum, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(enum)
@@ -2764,7 +2764,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2772,7 +2772,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, export, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, export, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
@@ -2906,7 +2906,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2916,7 +2916,7 @@
               listener: beginMember()
               isReservedKeyword(extends)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, extends, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, extends, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extends, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extends)
@@ -3051,7 +3051,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -3059,7 +3059,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, extension, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, extension, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extension, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(extension)
@@ -3193,7 +3193,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -3201,7 +3201,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, external, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, external, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
@@ -3335,7 +3335,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -3343,7 +3343,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, factory, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, factory, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
@@ -3477,7 +3477,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -3487,7 +3487,7 @@
               listener: beginMember()
               isReservedKeyword(false)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, false, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, false, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, false, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(false)
@@ -3618,7 +3618,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -3628,7 +3628,7 @@
               listener: beginMember()
               isReservedKeyword(final)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, final, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, final, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, final, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(final)
@@ -3852,7 +3852,7 @@
                             listener: handleExpressionStatement(+, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -3862,7 +3862,7 @@
               listener: beginMember()
               isReservedKeyword(finally)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, finally, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, finally, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, finally, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(finally)
@@ -3997,7 +3997,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4007,7 +4007,7 @@
               listener: beginMember()
               isReservedKeyword(for)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, for, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, for, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, for, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(for)
@@ -4206,7 +4206,7 @@
                           listener: endForStatement(;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4214,7 +4214,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, Function, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, Function, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
@@ -4348,7 +4348,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4357,7 +4357,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, get, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, get, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -4491,7 +4491,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4499,7 +4499,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, hide, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, hide, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, hide, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(hide)
@@ -4633,7 +4633,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4643,7 +4643,7 @@
               listener: beginMember()
               isReservedKeyword(if)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, if, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, if, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, if, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(if)
@@ -4814,7 +4814,7 @@
                         listener: endIfStatement(if, null, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4822,7 +4822,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, implements, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, implements, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
@@ -4956,7 +4956,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -4964,7 +4964,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, import, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, import, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
@@ -5098,7 +5098,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5108,7 +5108,7 @@
               listener: beginMember()
               isReservedKeyword(in)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, in, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, in, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, in, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(in)
@@ -5243,7 +5243,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5251,7 +5251,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, inout, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, inout, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, inout, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(inout)
@@ -5385,7 +5385,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5393,7 +5393,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, interface, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, interface, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
@@ -5527,7 +5527,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5537,7 +5537,7 @@
               listener: beginMember()
               isReservedKeyword(is)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, is, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, is, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, is, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(is)
@@ -5702,7 +5702,7 @@
                             listener: handleExpressionStatement(+, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5710,7 +5710,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, late, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, late, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(late)
@@ -5844,7 +5844,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5852,7 +5852,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, library, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, library, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
@@ -5986,7 +5986,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -5994,7 +5994,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, mixin, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, mixin, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
@@ -6128,7 +6128,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6136,7 +6136,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, native, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, native, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, native, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(native)
@@ -6270,7 +6270,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6280,7 +6280,7 @@
               listener: beginMember()
               isReservedKeyword(new)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, new, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, new, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, new, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(new)
@@ -6421,7 +6421,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6431,7 +6431,7 @@
               listener: beginMember()
               isReservedKeyword(null)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, null, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, null, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(null)
@@ -6562,7 +6562,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6570,7 +6570,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, of, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, of, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, of, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(of)
@@ -6704,7 +6704,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6712,7 +6712,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, on, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, on, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, on, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(on)
@@ -6846,7 +6846,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6855,7 +6855,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isUnaryMinus(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, operator, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, WrapperClass, false)
                 isUnaryMinus(()
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
@@ -6990,7 +6990,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -6998,7 +6998,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, out, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, out, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, out, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(out)
@@ -7132,7 +7132,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7140,7 +7140,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, part, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, part, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
@@ -7274,7 +7274,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7282,7 +7282,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, patch, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, patch, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, patch, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(patch)
@@ -7416,7 +7416,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7424,7 +7424,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, required, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, required, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(required)
@@ -7558,7 +7558,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7568,7 +7568,7 @@
               listener: beginMember()
               isReservedKeyword(rethrow)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, rethrow, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, rethrow, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, rethrow, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(rethrow)
@@ -7703,7 +7703,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7713,7 +7713,7 @@
               listener: beginMember()
               isReservedKeyword(return)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, return, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, return, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, return, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(return)
@@ -7843,7 +7843,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7852,7 +7852,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, set, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, set, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
@@ -7986,7 +7986,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -7994,7 +7994,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, show, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, show, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, show, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(show)
@@ -8128,7 +8128,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -8136,7 +8136,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, source, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, source, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, source, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(source)
@@ -8270,7 +8270,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -8278,7 +8278,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, static, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, static, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
@@ -8412,7 +8412,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -8420,7 +8420,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, SimpleType(), null, DeclarationKind.Class, WrapperClass)
+              recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, SimpleType(), null, null, DeclarationKind.Class, WrapperClass)
                 parseFields(}, null, null, null, null, null, null, null, }, SimpleType(), super, DeclarationKind.Class, WrapperClass, false)
                   listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
                   listener: handleIdentifier(int, typeReference)
@@ -8436,7 +8436,7 @@
                     reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                       listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
                     rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -8444,8 +8444,8 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, WrapperClass)
-                parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, (, DeclarationKind.Class, WrapperClass, false)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, WrapperClass)
+                parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, (, DeclarationKind.Class, WrapperClass, false)
                   listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
                   listener: handleNoType(;)
                   ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
@@ -8575,7 +8575,7 @@
                           inGenerator()
                     notEofOrType(CLOSE_CURLY_BRACKET, })
                     listener: endBlockFunctionBody(2, {, })
-                  listener: endClassMethod(null, , (, null, })
+                  listener: endMethod(DeclarationKind.Class, null, , (, null, })
                 listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -8585,7 +8585,7 @@
               listener: beginMember()
               isReservedKeyword(switch)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, switch, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, switch, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, switch, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(switch)
@@ -8765,7 +8765,7 @@
                             listener: handleExpressionStatement(+, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -8773,7 +8773,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, sync, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, sync, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, sync, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(sync)
@@ -8907,7 +8907,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -8915,163 +8915,138 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, SimpleType(), null, DeclarationKind.Class, WrapperClass)
-                parseFields(}, null, null, null, null, null, null, null, }, 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, Template(ExpectedIdentifierButGotKeyword))
-                      listener: handleRecoverableError(Message[Template(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: handleNoFieldInitializer(()
-                  ensureSemicolon(this)
-                    reportRecoverableError(this, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
-                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], this, this)
-                    rewriter()
-                  listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
-                listener: endMember()
-            notEofOrType(CLOSE_CURLY_BRACKET, ()
-            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
-              parseMetadataStar(;)
-                listener: beginMetadataStar(()
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, WrapperClass)
-                parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, (, DeclarationKind.Class, WrapperClass, false)
-                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
-                  listener: handleNoType(;)
-                  ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
-                    insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
-                      reportRecoverableError((, Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
-                        listener: handleRecoverableError(Message[Template(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.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
-                        listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
-                  parseInitializersOpt())
-                    listener: handleNoInitializers()
-                  parseAsyncModifierOpt())
-                    listener: handleAsyncModifier(null, null)
-                    inPlainSync()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, this, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(this)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(this, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
                   inPlainSync()
-                  parseFunctionBody(), false, true)
-                    listener: beginBlockFunctionBody({)
-                    notEofOrType(CLOSE_CURLY_BRACKET, if)
-                    parseStatement({)
-                      parseStatementX({)
-                        parseIfStatement({)
-                          listener: beginIfStatement(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
-                              parseExpression(()
-                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
-                                  parseUnaryExpression((, true, ConstantPatternContext.none)
-                                    parsePrimary((, expression, ConstantPatternContext.none)
-                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
-                                        parseSend((, expression, ConstantPatternContext.none)
-                                          ensureIdentifier((, expression)
-                                            listener: handleIdentifier(x, expression)
-                                          listener: handleNoTypeArguments(==)
-                                          parseArgumentsOpt(x)
-                                            listener: handleNoArguments(==)
-                                          listener: handleSend(x, x)
-                                  listener: beginBinaryExpression(==)
-                                  parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
-                                    parseUnaryExpression(==, true, ConstantPatternContext.none)
-                                      parsePrimary(==, expression, ConstantPatternContext.none)
-                                        parseLiteralInt(==)
-                                          listener: handleLiteralInt(0)
-                                  listener: endBinaryExpression(==, 0)
-                              ensureCloseParen(0, ()
-                              listener: handleParenthesizedCondition((, null, null)
-                          listener: beginThenStatement(return)
-                          parseStatement())
-                            parseStatementX())
-                              parseReturnStatement())
-                                listener: beginReturnStatement(return)
-                                parseExpression(return)
-                                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
-                                    parseUnaryExpression(return, true, ConstantPatternContext.none)
-                                      parsePrimary(return, expression, ConstantPatternContext.none)
-                                        parseLiteralInt(return)
-                                          listener: handleLiteralInt(42)
-                                ensureSemicolon(42)
-                                listener: endReturnStatement(true, return, ;)
-                                inGenerator()
-                          listener: endThenStatement(return, ;)
-                          listener: endIfStatement(if, null, ;)
-                    notEofOrType(CLOSE_CURLY_BRACKET, return)
-                    parseStatement(;)
-                      parseStatementX(;)
-                        parseReturnStatement(;)
-                          listener: beginReturnStatement(return)
-                          parseExpression(return)
-                            parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
-                              parseUnaryExpression(return, true, ConstantPatternContext.none)
-                                parsePrimary(return, expression, ConstantPatternContext.none)
-                                  parseThisExpression(return, expression)
-                                    listener: handleThisExpression(this, expression)
-                                    listener: handleNoTypeArguments(()
-                                    parseArguments(this)
-                                      parseArgumentsRest(()
-                                        listener: beginArguments(()
-                                        allowedToShortcutParseExpression()
-                                        parseExpression(()
-                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
-                                            parseUnaryExpression((, true, ConstantPatternContext.none)
-                                              parsePrimary((, expression, ConstantPatternContext.none)
-                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
-                                                  parseSend((, expression, ConstantPatternContext.none)
-                                                    ensureIdentifier((, expression)
-                                                      listener: handleIdentifier(x, expression)
-                                                    listener: handleNoTypeArguments(-)
-                                                    parseArgumentsOpt(x)
-                                                      listener: handleNoArguments(-)
-                                                    listener: handleSend(x, x)
-                                            listener: beginBinaryExpression(-)
-                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
-                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
-                                                parsePrimary(-, expression, ConstantPatternContext.none)
-                                                  parseLiteralInt(-)
-                                                    listener: handleLiteralInt(1)
-                                            listener: endBinaryExpression(-, 1)
-                                        listener: endArguments(1, (, ))
-                                    listener: handleSend(this, ))
-                              listener: beginBinaryExpression(+)
-                              parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
-                                parseUnaryExpression(+, true, ConstantPatternContext.none)
-                                  parsePrimary(+, expression, ConstantPatternContext.none)
-                                    parseLiteralInt(+)
-                                      listener: handleLiteralInt(1)
-                              listener: endBinaryExpression(+, 1)
-                          ensureSemicolon(1)
-                          listener: endReturnStatement(true, return, ;)
-                          inGenerator()
-                    notEofOrType(CLOSE_CURLY_BRACKET, })
-                    listener: endBlockFunctionBody(2, {, })
-                  listener: endClassMethod(null, , (, null, })
-                listener: endMember()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: false)
+                          parseExpressionInParenthesisRest((, allowCase: false)
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseThisExpression(return, expression)
+                                  listener: handleThisExpression(this, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArguments(this)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      allowedToShortcutParseExpression()
+                                      parseExpression(()
+                                        parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                          parseUnaryExpression((, true, ConstantPatternContext.none)
+                                            parsePrimary((, expression, ConstantPatternContext.none)
+                                              parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                parseSend((, expression, ConstantPatternContext.none)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, x)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                            parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                              parsePrimary(-, expression, ConstantPatternContext.none)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-, 1)
+                                      listener: endArguments(1, (, ))
+                                  listener: handleSend(this, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
               parseMetadataStar(})
@@ -9080,7 +9055,7 @@
               listener: beginMember()
               isReservedKeyword(throw)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, throw, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, throw, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, throw, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(throw)
@@ -9209,7 +9184,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -9219,7 +9194,7 @@
               listener: beginMember()
               isReservedKeyword(true)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, true, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, true, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, true, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(true)
@@ -9350,7 +9325,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -9360,7 +9335,7 @@
               listener: beginMember()
               isReservedKeyword(try)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, try, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, try, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, try, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(try)
@@ -9531,7 +9506,7 @@
                             listener: handleExpressionStatement((, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(4, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -9539,7 +9514,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, typedef, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, typedef, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
@@ -9673,7 +9648,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -9683,7 +9658,7 @@
               listener: beginMember()
               isReservedKeyword(var)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, var, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, var, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, var, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(var)
@@ -9907,7 +9882,7 @@
                             listener: handleExpressionStatement(+, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -9917,7 +9892,7 @@
               listener: beginMember()
               isReservedKeyword(void)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, void, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, void, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, void, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(void)
@@ -10142,7 +10117,7 @@
                             listener: handleExpressionStatement(+, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -10152,7 +10127,7 @@
               listener: beginMember()
               isReservedKeyword(while)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, while, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, while, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, while, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(while)
@@ -10323,7 +10298,7 @@
                         listener: endWhileStatement(while, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -10333,7 +10308,7 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, with, DeclarationKind.Class, WrapperClass, true)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, with, DeclarationKind.Class, WrapperClass, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
@@ -10468,7 +10443,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -10476,7 +10451,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, yield, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, yield, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, yield, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(yield)
@@ -10610,10 +10585,10 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 71, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
           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 6295405..4e77265 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
@@ -296,7 +296,7 @@
 return sync(x-1) + 1;
 }
 
-int this;*synthetic*(int x) {
+int this(int x) {
 if (x == 0) return 42;
 return this(x-1) + 1;
 }
@@ -644,7 +644,7 @@
 return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
 }[SimpleToken]
 
-int[StringToken] this[KeywordToken];[SyntheticToken][SyntheticStringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
 if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
 return[KeywordToken] this[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_class_methods_2.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart
new file mode 100644
index 0000000..1ea315f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart
@@ -0,0 +1,346 @@
+class WrapperClass {
+  int abstract(int x) {
+    if (x == 0) return 42;
+    return abstract(x-1) + 1;
+  }
+
+  int as(int x) {
+    if (x == 0) return 42;
+    return as(x-1) + 1;
+  }
+
+  int assert(int x) {
+    if (x == 0) return 42;
+    return assert(x-1) + 1;
+  }
+
+  int async(int x) {
+    if (x == 0) return 42;
+    return async(x-1) + 1;
+  }
+
+  int await(int x) {
+    if (x == 0) return 42;
+    return await(x-1) + 1;
+  }
+
+  int break(int x) {
+    if (x == 0) return 42;
+    return break(x-1) + 1;
+  }
+
+  int case(int x) {
+    if (x == 0) return 42;
+    return case(x-1) + 1;
+  }
+
+  int catch(int x) {
+    if (x == 0) return 42;
+    return catch(x-1) + 1;
+  }
+
+  int class(int x) {
+    if (x == 0) return 42;
+    return class(x-1) + 1;
+  }
+
+  int const(int x) {
+    if (x == 0) return 42;
+    return const(x-1) + 1;
+  }
+
+  int continue(int x) {
+    if (x == 0) return 42;
+    return continue(x-1) + 1;
+  }
+
+  int covariant(int x) {
+    if (x == 0) return 42;
+    return covariant(x-1) + 1;
+  }
+
+  int default(int x) {
+    if (x == 0) return 42;
+    return default(x-1) + 1;
+  }
+
+  int deferred(int x) {
+    if (x == 0) return 42;
+    return deferred(x-1) + 1;
+  }
+
+  int do(int x) {
+    if (x == 0) return 42;
+    return do(x-1) + 1;
+  }
+
+  int dynamic(int x) {
+    if (x == 0) return 42;
+    return dynamic(x-1) + 1;
+  }
+
+  int else(int x) {
+    if (x == 0) return 42;
+    return else(x-1) + 1;
+  }
+
+  int enum(int x) {
+    if (x == 0) return 42;
+    return enum(x-1) + 1;
+  }
+
+  int export(int x) {
+    if (x == 0) return 42;
+    return export(x-1) + 1;
+  }
+
+  int extends(int x) {
+    if (x == 0) return 42;
+    return extends(x-1) + 1;
+  }
+
+  int extension(int x) {
+    if (x == 0) return 42;
+    return extension(x-1) + 1;
+  }
+
+  int external(int x) {
+    if (x == 0) return 42;
+    return external(x-1) + 1;
+  }
+
+  int factory(int x) {
+    if (x == 0) return 42;
+    return factory(x-1) + 1;
+  }
+
+  int false(int x) {
+    if (x == 0) return 42;
+    return false(x-1) + 1;
+  }
+
+  int final(int x) {
+    if (x == 0) return 42;
+    return final(x-1) + 1;
+  }
+
+  int finally(int x) {
+    if (x == 0) return 42;
+    return finally(x-1) + 1;
+  }
+
+  int for(int x) {
+    if (x == 0) return 42;
+    return for(x-1) + 1;
+  }
+
+  int Function(int x) {
+    if (x == 0) return 42;
+    return Function(x-1) + 1;
+  }
+
+  int get(int x) {
+    if (x == 0) return 42;
+    return get(x-1) + 1;
+  }
+
+  int hide(int x) {
+    if (x == 0) return 42;
+    return hide(x-1) + 1;
+  }
+
+  int if(int x) {
+    if (x == 0) return 42;
+    return if(x-1) + 1;
+  }
+
+  int implements(int x) {
+    if (x == 0) return 42;
+    return implements(x-1) + 1;
+  }
+
+  int import(int x) {
+    if (x == 0) return 42;
+    return import(x-1) + 1;
+  }
+
+  int in(int x) {
+    if (x == 0) return 42;
+    return in(x-1) + 1;
+  }
+
+  int inout(int x) {
+    if (x == 0) return 42;
+    return inout(x-1) + 1;
+  }
+
+  int interface(int x) {
+    if (x == 0) return 42;
+    return interface(x-1) + 1;
+  }
+
+  int is(int x) {
+    if (x == 0) return 42;
+    return is(x-1) + 1;
+  }
+
+  int late(int x) {
+    if (x == 0) return 42;
+    return late(x-1) + 1;
+  }
+
+  int library(int x) {
+    if (x == 0) return 42;
+    return library(x-1) + 1;
+  }
+
+  int mixin(int x) {
+    if (x == 0) return 42;
+    return mixin(x-1) + 1;
+  }
+
+  int native(int x) {
+    if (x == 0) return 42;
+    return native(x-1) + 1;
+  }
+
+  int new(int x) {
+    if (x == 0) return 42;
+    return new(x-1) + 1;
+  }
+
+  int null(int x) {
+    if (x == 0) return 42;
+    return null(x-1) + 1;
+  }
+
+  int of(int x) {
+    if (x == 0) return 42;
+    return of(x-1) + 1;
+  }
+
+  int on(int x) {
+    if (x == 0) return 42;
+    return on(x-1) + 1;
+  }
+
+  int operator(int x) {
+    if (x == 0) return 42;
+    return operator(x-1) + 1;
+  }
+
+  int out(int x) {
+    if (x == 0) return 42;
+    return out(x-1) + 1;
+  }
+
+  int part(int x) {
+    if (x == 0) return 42;
+    return part(x-1) + 1;
+  }
+
+  int patch(int x) {
+    if (x == 0) return 42;
+    return patch(x-1) + 1;
+  }
+
+  int required(int x) {
+    if (x == 0) return 42;
+    return required(x-1) + 1;
+  }
+
+  int rethrow(int x) {
+    if (x == 0) return 42;
+    return rethrow(x-1) + 1;
+  }
+
+  int return(int x) {
+    if (x == 0) return 42;
+    return return(x-1) + 1;
+  }
+
+  int set(int x) {
+    if (x == 0) return 42;
+    return set(x-1) + 1;
+  }
+
+  int show(int x) {
+    if (x == 0) return 42;
+    return show(x-1) + 1;
+  }
+
+  int source(int x) {
+    if (x == 0) return 42;
+    return source(x-1) + 1;
+  }
+
+  int static(int x) {
+    if (x == 0) return 42;
+    return static(x-1) + 1;
+  }
+
+  int super(int x) {
+    if (x == 0) return 42;
+    return super(x-1) + 1;
+  }
+
+  int switch(int x) {
+    if (x == 0) return 42;
+    return switch(x-1) + 1;
+  }
+
+  int sync(int x) {
+    if (x == 0) return 42;
+    return sync(x-1) + 1;
+  }
+
+  int this(int x) {
+    if (x == 0) return 42;
+    return this(x-1) + 1;
+  }
+
+  int throw(int x) {
+    if (x == 0) return 42;
+    return throw(x-1) + 1;
+  }
+
+  int true(int x) {
+    if (x == 0) return 42;
+    return true(x-1) + 1;
+  }
+
+  int try(int x) {
+    if (x == 0) return 42;
+    return try(x-1) + 1;
+  }
+
+  int typedef(int x) {
+    if (x == 0) return 42;
+    return typedef(x-1) + 1;
+  }
+
+  int var(int x) {
+    if (x == 0) return 42;
+    return var(x-1) + 1;
+  }
+
+  int void(int x) {
+    if (x == 0) return 42;
+    return void(x-1) + 1;
+  }
+
+  int while(int x) {
+    if (x == 0) return 42;
+    return while(x-1) + 1;
+  }
+
+  int with(int x) {
+    if (x == 0) return 42;
+    return with(x-1) + 1;
+  }
+
+  int yield(int x) {
+    if (x == 0) return 42;
+    return yield(x-1) + 1;
+  }
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.expect
new file mode 100644
index 0000000..41c33f2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.expect
@@ -0,0 +1,4741 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_class_methods_2:12:7: 'assert' can't be used as an identifier because it's a keyword.
+  int assert(int x) {
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:14:12: `assert` can't be used as an expression.
+    return assert(x-1) + 1;
+           ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:27:7: 'break' can't be used as an identifier because it's a keyword.
+  int break(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:29:12: Expected an identifier, but got 'break'.
+    return break(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:29:5: Expected ';' after this.
+    return break(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:29:12: A break statement can't be used outside of a loop or switch statement.
+    return break(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:29:12: Expected ';' after this.
+    return break(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:32:7: 'case' can't be used as an identifier because it's a keyword.
+  int case(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:34:12: 'case' can't be used as an identifier because it's a keyword.
+    return case(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:37:7: 'catch' can't be used as an identifier because it's a keyword.
+  int catch(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:39:12: 'catch' can't be used as an identifier because it's a keyword.
+    return catch(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:42:7: 'class' can't be used as an identifier because it's a keyword.
+  int class(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:44:12: 'class' can't be used as an identifier because it's a keyword.
+    return class(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:47:7: 'const' can't be used as an identifier because it's a keyword.
+  int const(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:49:21: A record literal with exactly one positional field requires a trailing comma.
+    return const(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods_2:52:7: 'continue' can't be used as an identifier because it's a keyword.
+  int continue(int x) {
+      ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:54:12: Expected an identifier, but got 'continue'.
+    return continue(x-1) + 1;
+           ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:54:5: Expected ';' after this.
+    return continue(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:54:12: A continue statement can't be used outside of a loop or switch statement.
+    return continue(x-1) + 1;
+           ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:54:12: Expected ';' after this.
+    return continue(x-1) + 1;
+           ^^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:62:7: 'default' can't be used as an identifier because it's a keyword.
+  int default(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:64:12: 'default' can't be used as an identifier because it's a keyword.
+    return default(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:72:7: 'do' can't be used as an identifier because it's a keyword.
+  int do(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods_2:74:12: Expected an identifier, but got 'do'.
+    return do(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods_2:74:5: Expected ';' after this.
+    return do(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:75:3: Expected 'while' before this.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods_2:75:3: Expected to find '('.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods_2:75:3: Expected an identifier, but got '}'.
+  }
+  ^
+
+parser/error_recovery/keyword_named_class_methods_2:74:23: Expected ';' after this.
+    return do(x-1) + 1;
+                      ^
+
+parser/error_recovery/keyword_named_class_methods_2:82:7: 'else' can't be used as an identifier because it's a keyword.
+  int else(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:84:12: Expected an identifier, but got 'else'.
+    return else(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:84:5: Expected ';' after this.
+    return else(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:84:12: Expected an identifier, but got 'else'.
+    return else(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:84:5: Expected ';' after this.
+    return else(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:84:12: Unexpected token ';'.
+    return else(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:87:7: 'enum' can't be used as an identifier because it's a keyword.
+  int enum(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:89:12: 'enum' can't be used as an identifier because it's a keyword.
+    return enum(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:97:7: 'extends' can't be used as an identifier because it's a keyword.
+  int extends(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:99:12: 'extends' can't be used as an identifier because it's a keyword.
+    return extends(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:117:7: 'false' can't be used as an identifier because it's a keyword.
+  int false(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:122:7: 'final' can't be used as an identifier because it's a keyword.
+  int final(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:124:12: Expected an identifier, but got 'final'.
+    return final(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:124:5: Expected ';' after this.
+    return final(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:124:17: Expected an identifier, but got '('.
+    return final(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_class_methods_2:124:17: Expected ';' after this.
+    return final(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_class_methods_2:124:20: Expected ';' after this.
+    return final(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods_2:124:21: Expected an identifier, but got ')'.
+    return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods_2:124:20: Expected ';' after this.
+    return final(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods_2:124:21: Unexpected token ';'.
+    return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods_2:124:23: '+' is not a prefix operator.
+    return final(x-1) + 1;
+                      ^
+
+parser/error_recovery/keyword_named_class_methods_2:127:7: 'finally' can't be used as an identifier because it's a keyword.
+  int finally(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:129:12: 'finally' can't be used as an identifier because it's a keyword.
+    return finally(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:132:7: 'for' can't be used as an identifier because it's a keyword.
+  int for(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:134:12: Expected an identifier, but got 'for'.
+    return for(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:134:5: Expected ';' after this.
+    return for(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:134:18: Expected ';' after this.
+    return for(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods_2:134:19: Expected an identifier, but got ')'.
+    return for(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods_2:134:18: Expected ';' after this.
+    return for(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods_2:134:21: '+' is not a prefix operator.
+    return for(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods_2:152:7: 'if' can't be used as an identifier because it's a keyword.
+  int if(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods_2:154:12: Expected an identifier, but got 'if'.
+    return if(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods_2:154:5: Expected ';' after this.
+    return if(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:154:20: '+' is not a prefix operator.
+    return if(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods_2:167:7: 'in' can't be used as an identifier because it's a keyword.
+  int in(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods_2:169:12: 'in' can't be used as an identifier because it's a keyword.
+    return in(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods_2:182:7: 'is' can't be used as an identifier because it's a keyword.
+  int is(int x) {
+      ^^
+
+parser/error_recovery/keyword_named_class_methods_2:184:12: Expected an identifier, but got 'is'.
+    return is(x-1) + 1;
+           ^^
+
+parser/error_recovery/keyword_named_class_methods_2:184:16: Expected ')' before this.
+    return is(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_class_methods_2:184:18: A record type with exactly one positional field requires a trailing comma.
+    return is(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods_2:184:18: Expected ';' after this.
+    return is(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods_2:184:20: '+' is not a prefix operator.
+    return is(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods_2:207:7: 'new' can't be used as an identifier because it's a keyword.
+  int new(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:209:15: Expected an identifier, but got '('.
+    return new(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_class_methods_2:212:7: 'null' can't be used as an identifier because it's a keyword.
+  int null(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:252:7: 'rethrow' can't be used as an identifier because it's a keyword.
+  int rethrow(int x) {
+      ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:254:12: 'rethrow' can't be used as an identifier because it's a keyword.
+    return rethrow(x-1) + 1;
+           ^^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:257:7: 'return' can't be used as an identifier because it's a keyword.
+  int return(int x) {
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:259:12: Unexpected token 'return'.
+    return return(x-1) + 1;
+           ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:282:7: 'super' can't be used as an identifier because it's a keyword.
+  int super(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:282:7: Expected ';' after this.
+  int super(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:282:12: Expected an identifier, but got '('.
+  int super(int x) {
+           ^
+
+parser/error_recovery/keyword_named_class_methods_2:287:7: 'switch' can't be used as an identifier because it's a keyword.
+  int switch(int x) {
+      ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:289:22: A switch expression must have a body, even if it is empty.
+    return switch(x-1) + 1;
+                     ^
+
+parser/error_recovery/keyword_named_class_methods_2:297:7: 'this' can't be used as an identifier because it's a keyword.
+  int this(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:302:7: 'throw' can't be used as an identifier because it's a keyword.
+  int throw(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:307:7: 'true' can't be used as an identifier because it's a keyword.
+  int true(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:312:7: 'try' can't be used as an identifier because it's a keyword.
+  int try(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:314:12: Expected an identifier, but got 'try'.
+    return try(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:314:5: Expected ';' after this.
+    return try(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:314:12: A try statement must have a body, even if it is empty.
+    return try(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:314:12: A try block must be followed by an 'on', 'catch', or 'finally' clause.
+    return try(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:322:7: 'var' can't be used as an identifier because it's a keyword.
+  int var(int x) {
+      ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:324:12: Expected an identifier, but got 'var'.
+    return var(x-1) + 1;
+           ^^^
+
+parser/error_recovery/keyword_named_class_methods_2:324:5: Expected ';' after this.
+    return var(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:324:15: Expected an identifier, but got '('.
+    return var(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_class_methods_2:324:15: Expected ';' after this.
+    return var(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_class_methods_2:324:18: Expected ';' after this.
+    return var(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods_2:324:19: Expected an identifier, but got ')'.
+    return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods_2:324:18: Expected ';' after this.
+    return var(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_class_methods_2:324:19: Unexpected token ';'.
+    return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods_2:324:21: '+' is not a prefix operator.
+    return var(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_class_methods_2:327:7: 'void' can't be used as an identifier because it's a keyword.
+  int void(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:329:12: Expected an identifier, but got 'void'.
+    return void(x-1) + 1;
+           ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:329:5: Expected ';' after this.
+    return void(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:329:16: Expected an identifier, but got '('.
+    return void(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_class_methods_2:329:16: Expected ';' after this.
+    return void(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_class_methods_2:329:19: Expected ';' after this.
+    return void(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods_2:329:20: Expected an identifier, but got ')'.
+    return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods_2:329:19: Expected ';' after this.
+    return void(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_class_methods_2:329:20: Unexpected token ';'.
+    return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_class_methods_2:329:22: '+' is not a prefix operator.
+    return void(x-1) + 1;
+                     ^
+
+parser/error_recovery/keyword_named_class_methods_2:332:7: 'while' can't be used as an identifier because it's a keyword.
+  int while(int x) {
+      ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:334:12: Expected an identifier, but got 'while'.
+    return while(x-1) + 1;
+           ^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:334:5: Expected ';' after this.
+    return while(x-1) + 1;
+    ^^^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:334:23: '+' is not a prefix operator.
+    return while(x-1) + 1;
+                      ^
+
+parser/error_recovery/keyword_named_class_methods_2:337:7: 'with' can't be used as an identifier because it's a keyword.
+  int with(int x) {
+      ^^^^
+
+parser/error_recovery/keyword_named_class_methods_2:339:12: 'with' can't be used as an identifier because it's a keyword.
+    return with(x-1) + 1;
+           ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(WrapperClass, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, WrapperClass)
+      handleNoPrimaryConstructor(WrapperClass, null, false)
+      handleNoType(WrapperClass)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(abstract)
+            handleType(int, null)
+            handleIdentifier(abstract, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(abstract, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(abstract, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(as)
+            handleType(int, null)
+            handleIdentifier(as, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(as, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(as, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, assert, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(assert)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                beginAssert(assert, Assert.Expression)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                  handleRecoverableError(AssertAsExpression, assert, assert)
+                endAssert(assert, Assert.Expression, (, null, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, async, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(async)
+            handleType(int, null)
+            handleIdentifier(async, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(async, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(async, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, await, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(await)
+            handleType(int, null)
+            handleIdentifier(await, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(await, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(await, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, break, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(break)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'break'., Try inserting an identifier before 'break'., {lexeme: break}], break, break)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(break)
+                handleNoArguments(break)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(BreakOutsideOfLoop, break, break)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], break, break)
+              handleBreakStatement(false, break, ;)
+              beginParenthesizedExpressionOrRecordLiteral(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+              endParenthesizedExpression(()
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement((, ;)
+            endBlockFunctionBody(4, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, case, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(case)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(case, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, catch, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(catch)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(catch, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, class, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(class)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(class, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, const, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(const)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                beginConstLiteral(()
+                  beginParenthesizedExpressionOrRecordLiteral(()
+                    handleIdentifier(x, expression)
+                    handleNoTypeArguments(-)
+                    handleNoArguments(-)
+                    handleSend(x, x)
+                    beginBinaryExpression(-)
+                      handleLiteralInt(1)
+                    endBinaryExpression(-, 1)
+                    handleRecoverableError(RecordLiteralOnePositionalFieldNoTrailingComma, ), ))
+                  endRecordLiteral((, 1, const)
+                endConstLiteral())
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, continue, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(continue)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'continue'., Try inserting an identifier before 'continue'., {lexeme: continue}], continue, continue)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(continue)
+                handleNoArguments(continue)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], continue, continue)
+              handleContinueStatement(false, continue, ;)
+              beginParenthesizedExpressionOrRecordLiteral(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+              endParenthesizedExpression(()
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement((, ;)
+            endBlockFunctionBody(4, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(covariant)
+            handleType(int, null)
+            handleIdentifier(covariant, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(covariant, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(covariant, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, default, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(default)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(default, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(deferred)
+            handleType(int, null)
+            handleIdentifier(deferred, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(deferred, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(deferred, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, do, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(do)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'do'., Try inserting an identifier before 'do'., {lexeme: do}], do, do)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(do)
+                handleNoArguments(do)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginDoWhileStatement(do)
+                beginDoWhileStatementBody(()
+                  beginParenthesizedExpressionOrRecordLiteral(()
+                    handleIdentifier(x, expression)
+                    handleNoTypeArguments(-)
+                    handleNoArguments(-)
+                    handleSend(x, x)
+                    beginBinaryExpression(-)
+                      handleLiteralInt(1)
+                    endBinaryExpression(-, 1)
+                  endParenthesizedExpression(()
+                  beginBinaryExpression(+)
+                    handleLiteralInt(1)
+                  endBinaryExpression(+, 1)
+                  handleExpressionStatement((, ;)
+                endDoWhileStatementBody(;)
+                handleRecoverableError(Message[Template(ExpectedButGot), Expected 'while' before this., null, {string: while}], }, })
+                handleRecoverableError(Message[Template(ExpectedToken), Expected to find '('., null, {string: (}], }, })
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                handleIdentifier(, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(, )
+                handleParenthesizedCondition((, null, null)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ;, ;)
+              endDoWhileStatement(do, while, ;)
+            endBlockFunctionBody(3, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(dynamic)
+            handleType(int, null)
+            handleIdentifier(dynamic, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(dynamic, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(dynamic, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, else, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(else)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(else)
+                handleNoArguments(else)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              handleExpressionStatement(else, ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], else, else)
+              beginParenthesizedExpressionOrRecordLiteral(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+              endParenthesizedExpression(()
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement((, ;)
+            endBlockFunctionBody(4, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, enum, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(enum)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(enum, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(export)
+            handleType(int, null)
+            handleIdentifier(export, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(export, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(export, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extends, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extends)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(extends, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extension, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(extension)
+            handleType(int, null)
+            handleIdentifier(extension, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(extension, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(extension, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(external)
+            handleType(int, null)
+            handleIdentifier(external, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(external, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(external, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(factory)
+            handleType(int, null)
+            handleIdentifier(factory, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(factory, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(factory, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, false, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(false)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleLiteralBool(false)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend((, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, final, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(final)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'final'., Try inserting an identifier before 'final'., {lexeme: final}], final, final)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(final)
+                handleNoArguments(final)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginMetadataStar(final)
+              endMetadataStar(0)
+              handleNoType(final)
+              beginVariablesDeclaration((, null, final)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                handleIdentifier(, localVariableDeclaration)
+                beginInitializedIdentifier()
+                  handleNoVariableInitializer()
+                endInitializedIdentifier()
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, x)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-, 1)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(x, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(), ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, )
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement(+, ;)
+            endBlockFunctionBody(6, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, finally, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(finally)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(finally, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, for, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(for)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'for'., Try inserting an identifier before 'for'., {lexeme: for}], for, for)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(for)
+                handleNoArguments(for)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginForStatement(for)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+                handleForInitializerExpressionStatement(1, false)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                handleIdentifier(, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                handleExpressionStatement(), ;)
+                handleForLoopParts(for, (, ;, ;, 0)
+                beginForStatementBody(+)
+                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments(+)
+                  handleNoArguments(+)
+                  handleSend(, )
+                  beginBinaryExpression(+)
+                    handleLiteralInt(1)
+                  endBinaryExpression(+, 1)
+                  handleExpressionStatement(+, ;)
+                endForStatementBody(;)
+              endForStatement(;)
+            endBlockFunctionBody(3, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(int, null)
+            handleIdentifier(Function, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(Function, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(Function, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(get)
+            handleType(int, null)
+            handleIdentifier(get, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(get, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(get, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, hide, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(hide)
+            handleType(int, null)
+            handleIdentifier(hide, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(hide, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(hide, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, if, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(if)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'if'., Try inserting an identifier before 'if'., {lexeme: if}], if, if)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(if)
+                handleNoArguments(if)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(+)
+                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments(+)
+                  handleNoArguments(+)
+                  handleSend(, )
+                  beginBinaryExpression(+)
+                    handleLiteralInt(1)
+                  endBinaryExpression(+, 1)
+                  handleExpressionStatement(+, ;)
+                endThenStatement(+, ;)
+              endIfStatement(if, null, ;)
+            endBlockFunctionBody(3, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(implements)
+            handleType(int, null)
+            handleIdentifier(implements, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(implements, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(implements, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(import)
+            handleType(int, null)
+            handleIdentifier(import, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(import, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(import, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, in, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(in)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(in, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, inout, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(inout)
+            handleType(int, null)
+            handleIdentifier(inout, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(inout, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(inout, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(interface)
+            handleType(int, null)
+            handleIdentifier(interface, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(interface, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(interface, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, is, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(is)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(is)
+                handleNoArguments(is)
+                handleSend(, )
+                beginIsOperatorType(is)
+                  beginRecordType(()
+                    beginRecordTypeEntry()
+                      beginMetadataStar(x)
+                      endMetadataStar(0)
+                      handleIdentifier(x, typeReference)
+                      handleNoTypeArguments(-)
+                      handleType(x, null)
+                      handleNoName(-)
+                    endRecordTypeEntry()
+                    handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], -, -)
+                    handleRecoverableError(RecordTypeOnePositionalFieldNoTrailingComma, ), ))
+                  endRecordType((, null, 1, false)
+                endIsOperatorType(is)
+                handleIsOperator(is, null)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ), ))
+              endReturnStatement(true, return, ;)
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, )
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement(+, ;)
+            endBlockFunctionBody(3, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(late)
+            handleType(int, null)
+            handleIdentifier(late, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(late, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(late, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(library)
+            handleType(int, null)
+            handleIdentifier(library, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(library, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(library, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(mixin)
+            handleType(int, null)
+            handleIdentifier(mixin, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(mixin, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(mixin, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, native, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(native)
+            handleType(int, null)
+            handleIdentifier(native, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(native, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(native, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, new, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(new)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                beginNewExpression(new)
+                  handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                  handleIdentifier(, constructorReference)
+                  beginConstructorReference()
+                    handleNoTypeArguments(()
+                    handleNoConstructorReferenceContinuationAfterTypeArguments()
+                  endConstructorReference(, null, , ConstructorReferenceContext.New)
+                  beginArguments(()
+                    handleIdentifier(x, expression)
+                    handleNoTypeArguments(-)
+                    handleNoArguments(-)
+                    handleSend(x, x)
+                    beginBinaryExpression(-)
+                      handleLiteralInt(1)
+                    endBinaryExpression(-, 1)
+                  endArguments(1, (, ))
+                endNewExpression(new)
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, null, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(null)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleLiteralNull(null)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend((, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, of, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(of)
+            handleType(int, null)
+            handleIdentifier(of, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(of, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(of, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, on, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(on)
+            handleType(int, null)
+            handleIdentifier(on, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(on, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(on, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(operator)
+            handleType(int, null)
+            handleIdentifier(operator, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(operator, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(operator, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, out, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(out)
+            handleType(int, null)
+            handleIdentifier(out, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(out, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(out, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(part)
+            handleType(int, null)
+            handleIdentifier(part, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(part, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(part, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, patch, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(patch)
+            handleType(int, null)
+            handleIdentifier(patch, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(patch, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(patch, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(required)
+            handleType(int, null)
+            handleIdentifier(required, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(required, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(required, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, rethrow, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(rethrow)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(rethrow, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, return, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(return)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token 'return'., null, {lexeme: return}], return, return)
+                beginParenthesizedExpressionOrRecordLiteral(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endParenthesizedExpression(()
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(set)
+            handleType(int, null)
+            handleIdentifier(set, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(set, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(set, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, show, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(show)
+            handleType(int, null)
+            handleIdentifier(show, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(show, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(show, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, source, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(source)
+            handleType(int, null)
+            handleIdentifier(source, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(source, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(source, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(static)
+            handleType(int, null)
+            handleIdentifier(static, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(static, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(static, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(super)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, fieldDeclaration)
+            handleNoFieldInitializer(()
+            handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
+        endMember()
+        beginMetadataStar(()
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
+            handleNoType(;)
+            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+            handleIdentifier(, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleSuperExpression(super, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(super, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, , (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, switch, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(switch)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                beginSwitchExpression(switch)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                  handleParenthesizedCondition((, null, null)
+                  handleRecoverableError(ExpectedSwitchExpressionBody, ), ))
+                  beginSwitchExpressionBlock({)
+                  endSwitchExpressionBlock(0, {, })
+                endSwitchExpression(switch, })
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, sync, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(sync)
+            handleType(int, null)
+            handleIdentifier(sync, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(sync, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(sync, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(this)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleThisExpression(this, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(this, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, throw, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(throw)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                beginParenthesizedExpressionOrRecordLiteral(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endParenthesizedExpression(()
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+                handleThrowExpression(throw, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, true, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(true)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleLiteralBool(true)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend((, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, try, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(try)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'try'., Try inserting an identifier before 'try'., {lexeme: try}], try, try)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(try)
+                handleNoArguments(try)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginTryStatement(try)
+                handleRecoverableError(ExpectedTryStatementBody, try, try)
+                beginBlock({, BlockKind(try statement))
+                endBlock(0, {, }, BlockKind(try statement))
+                handleRecoverableError(OnlyTry, try, try)
+              endTryStatement(0, try, null, })
+              beginParenthesizedExpressionOrRecordLiteral(()
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+              endParenthesizedExpression(()
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement((, ;)
+            endBlockFunctionBody(4, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(typedef)
+            handleType(int, null)
+            handleIdentifier(typedef, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(typedef, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(typedef, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, var, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(var)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'var'., Try inserting an identifier before 'var'., {lexeme: var}], var, var)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(var)
+                handleNoArguments(var)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration((, null, var)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                handleIdentifier(, localVariableDeclaration)
+                beginInitializedIdentifier()
+                  handleNoVariableInitializer()
+                endInitializedIdentifier()
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, x)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-, 1)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(x, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(), ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, )
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement(+, ;)
+            endBlockFunctionBody(6, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, void, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(void)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'void'., Try inserting an identifier before 'void'., {lexeme: void}], void, void)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(void)
+                handleNoArguments(void)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginMetadataStar(void)
+              endMetadataStar(0)
+              handleVoidKeyword(void)
+              beginVariablesDeclaration((, null, null)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                handleIdentifier(, localVariableDeclaration)
+                beginInitializedIdentifier()
+                  handleNoVariableInitializer()
+                endInitializedIdentifier()
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, x)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-, 1)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(x, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+              handleExpressionStatement(), ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+              handleRecoverableError(UnsupportedPrefixPlus, +, +)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(+)
+              handleNoArguments(+)
+              handleSend(, )
+              beginBinaryExpression(+)
+                handleLiteralInt(1)
+              endBinaryExpression(+, 1)
+              handleExpressionStatement(+, ;)
+            endBlockFunctionBody(6, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, while, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(while)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'while'., Try inserting an identifier before 'while'., {lexeme: while}], while, while)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(while)
+                handleNoArguments(while)
+                handleSend(, )
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+              endReturnStatement(true, return, ;)
+              beginWhileStatement(while)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(-)
+                handleNoArguments(-)
+                handleSend(x, x)
+                beginBinaryExpression(-)
+                  handleLiteralInt(1)
+                endBinaryExpression(-, 1)
+                handleParenthesizedCondition((, null, null)
+                beginWhileStatementBody(+)
+                  handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                  handleIdentifier(, expression)
+                  handleNoTypeArguments(+)
+                  handleNoArguments(+)
+                  handleSend(, )
+                  beginBinaryExpression(+)
+                    handleLiteralInt(1)
+                  endBinaryExpression(+, 1)
+                  handleExpressionStatement(+, ;)
+                endWhileStatementBody(;)
+              endWhileStatement(while, ;)
+            endBlockFunctionBody(3, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(with)
+            handleType(int, null)
+            handleRecoverableError(Message[Template(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)
+            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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleRecoverableError(Message[Template(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, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(with, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, yield, WrapperClass)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(yield)
+            handleType(int, null)
+            handleIdentifier(yield, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginIfStatement(if)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(==)
+                handleNoArguments(==)
+                handleSend(x, x)
+                beginBinaryExpression(==)
+                  handleLiteralInt(0)
+                endBinaryExpression(==, 0)
+                handleParenthesizedCondition((, null, null)
+                beginThenStatement(return)
+                  beginReturnStatement(return)
+                    handleLiteralInt(42)
+                  endReturnStatement(true, return, ;)
+                endThenStatement(return, ;)
+              endIfStatement(if, null, ;)
+              beginReturnStatement(return)
+                handleIdentifier(yield, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(-)
+                  handleNoArguments(-)
+                  handleSend(x, x)
+                  beginBinaryExpression(-)
+                    handleLiteralInt(1)
+                  endBinaryExpression(-, 1)
+                endArguments(1, (, ))
+                handleSend(yield, ))
+                beginBinaryExpression(+)
+                  handleLiteralInt(1)
+                endBinaryExpression(+, 1)
+              endReturnStatement(true, return, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.intertwined.expect
new file mode 100644
index 0000000..1e7dab8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.intertwined.expect
@@ -0,0 +1,11315 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(WrapperClass, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, WrapperClass)
+        parseClass(WrapperClass, class, class, null, WrapperClass)
+          parsePrimaryConstructorOpt(WrapperClass, null, false)
+            listener: handleNoPrimaryConstructor(WrapperClass, null, false)
+          parseClassHeaderOpt(WrapperClass, class, class)
+            parseClassExtendsOpt(WrapperClass, DeclarationHeaderKind.Class)
+              listener: handleNoType(WrapperClass)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(WrapperClass)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(WrapperClass)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(WrapperClass, DeclarationKind.Class, WrapperClass)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar({)
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, abstract, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(abstract)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(abstract, methodDeclaration)
+                parseQualifiedRestOpt(abstract, methodDeclarationContinuation)
+                parseMethodTypeVar(abstract)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(abstract, abstract, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(abstract, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(abstract)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(abstract, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(abstract)
+                                      parseArguments(abstract)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(abstract, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, as, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(as)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(as, methodDeclaration)
+                parseQualifiedRestOpt(as, methodDeclarationContinuation)
+                parseMethodTypeVar(as)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(as, as, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(as, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(as)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(as, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(as)
+                                      parseArguments(as)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(as, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(assert)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, assert, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, assert, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(assert)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(assert, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(assert, methodDeclarationContinuation)
+                parseMethodTypeVar(assert)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(assert, assert, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(assert, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseAssert(return, Assert.Expression)
+                                  listener: beginAssert(assert, Assert.Expression)
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  reportRecoverableError(assert, AssertAsExpression)
+                                    listener: handleRecoverableError(AssertAsExpression, assert, assert)
+                                  listener: endAssert(assert, Assert.Expression, (, null, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, async, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, async, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(async)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(async, methodDeclaration)
+                parseQualifiedRestOpt(async, methodDeclarationContinuation)
+                parseMethodTypeVar(async)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(async, async, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(async, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(async)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(async, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(async)
+                                      parseArguments(async)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(async, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, await, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, await, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(await)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(await, methodDeclaration)
+                parseQualifiedRestOpt(await, methodDeclarationContinuation)
+                parseMethodTypeVar(await)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(await, await, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(await, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(await)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              inPlainSync()
+                              looksLikeAwaitExpression(return, AwaitOrYieldContext.UnaryExpression)
+                                looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(await, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(await)
+                                      parseArguments(await)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(await, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(break)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, break, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, break, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(break)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(break, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(break, methodDeclarationContinuation)
+                parseMethodTypeVar(break)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(break, break, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(break, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(break, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'break'., Try inserting an identifier before 'break'., {lexeme: break}], break, break)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(break)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(break)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, break)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseBreakStatement(;)
+                        isBreakAllowed()
+                        reportRecoverableError(break, BreakOutsideOfLoop)
+                          listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
+                        ensureSemicolon(break)
+                          reportRecoverableError(break, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], break, break)
+                          rewriter()
+                        listener: handleBreakStatement(false, break, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        ensureCloseParen(1, ()
+                                        listener: endParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement((, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(case)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, case, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, case, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(case)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(case, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(case, methodDeclarationContinuation)
+                parseMethodTypeVar(case)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(case, case, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(case, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(case, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(case)
+                                    parseArguments(case)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(case, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(catch)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, catch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, catch, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(catch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(catch, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(catch, methodDeclarationContinuation)
+                parseMethodTypeVar(catch)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(catch, catch, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(catch, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(catch, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(catch)
+                                    parseArguments(catch)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(catch, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(class)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, class, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, class, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(class)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(class, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(class, methodDeclarationContinuation)
+                parseMethodTypeVar(class)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(class, class, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(class, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(class, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(class)
+                                    parseArguments(class)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(class, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(const)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, const, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, const, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(const)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(const, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(const, methodDeclarationContinuation)
+                parseMethodTypeVar(const)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(const, const, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(const, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseConstExpression(return)
+                                  listener: beginConstLiteral(()
+                                  parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
+                                    listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                    parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
+                                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                                          parsePrimary((, expression, ConstantPatternContext.none)
+                                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                              parseSend((, expression, ConstantPatternContext.none)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(-)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(-)
+                                                listener: handleSend(x, x)
+                                        listener: beginBinaryExpression(-)
+                                        parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                          parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                            parsePrimary(-, expression, ConstantPatternContext.none)
+                                              parseLiteralInt(-)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(-, 1)
+                                    ensureCloseParen(1, ()
+                                    reportRecoverableError(), RecordLiteralOnePositionalFieldNoTrailingComma)
+                                      listener: handleRecoverableError(RecordLiteralOnePositionalFieldNoTrailingComma, ), ))
+                                    listener: endRecordLiteral((, 1, const)
+                                  listener: endConstLiteral())
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(continue)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, continue, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, continue, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(continue)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(continue, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(continue, methodDeclarationContinuation)
+                parseMethodTypeVar(continue)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(continue, continue, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(continue, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(continue, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'continue'., Try inserting an identifier before 'continue'., {lexeme: continue}], continue, continue)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(continue)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(continue)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, continue)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseContinueStatement(;)
+                        isContinueAllowed()
+                        reportRecoverableError(continue, ContinueOutsideOfLoop)
+                          listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+                        ensureSemicolon(continue)
+                          reportRecoverableError(continue, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], continue, continue)
+                          rewriter()
+                        listener: handleContinueStatement(false, continue, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        ensureCloseParen(1, ()
+                                        listener: endParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement((, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, covariant, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(covariant)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(covariant, methodDeclaration)
+                parseQualifiedRestOpt(covariant, methodDeclarationContinuation)
+                parseMethodTypeVar(covariant)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(covariant, covariant, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(covariant, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(covariant)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(covariant, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(covariant)
+                                      parseArguments(covariant)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(covariant, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(default)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, default, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, default, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(default)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(default, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(default, methodDeclarationContinuation)
+                parseMethodTypeVar(default)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(default, default, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(default, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(default, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(default)
+                                    parseArguments(default)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(default, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, deferred, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(deferred)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(deferred, methodDeclaration)
+                parseQualifiedRestOpt(deferred, methodDeclarationContinuation)
+                parseMethodTypeVar(deferred)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(deferred, deferred, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(deferred, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(deferred)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(deferred, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(deferred)
+                                      parseArguments(deferred)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(deferred, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(do)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, do, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, do, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(do)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(do, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(do, methodDeclarationContinuation)
+                parseMethodTypeVar(do)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(do, do, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(do, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(do, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'do'., Try inserting an identifier before 'do'., {lexeme: do}], do, do)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(do)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(do)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, do)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseDoWhileStatement(;)
+                        listener: beginDoWhileStatement(do)
+                        listener: beginDoWhileStatementBody(()
+                        parseStatement(do)
+                          parseStatementX(do)
+                            parseExpressionStatementOrDeclaration(do, null)
+                              parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, null)
+                                looksLikeLocalFunction(()
+                                parseExpressionStatement(do)
+                                  parseExpression(do)
+                                    looksLikeOuterPatternEquals(do)
+                                      skipOuterPattern(do)
+                                    parsePrecedenceExpression(do, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(do, true, ConstantPatternContext.none)
+                                        parsePrimary(do, expression, ConstantPatternContext.none)
+                                          parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(do, ConstantPatternContext.none)
+                                            parseParenthesizedExpressionOrRecordLiteral(do, null, ConstantPatternContext.none)
+                                              listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                              parseExpression(()
+                                                looksLikeOuterPatternEquals(()
+                                                  skipOuterPattern(()
+                                                    skipObjectPatternRest(x)
+                                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                        parseSend((, expression, ConstantPatternContext.none)
+                                                          ensureIdentifier((, expression)
+                                                            listener: handleIdentifier(x, expression)
+                                                          listener: handleNoTypeArguments(-)
+                                                          parseArgumentsOpt(x)
+                                                            listener: handleNoArguments(-)
+                                                          listener: handleSend(x, x)
+                                                  listener: beginBinaryExpression(-)
+                                                  parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                      parsePrimary(-, expression, ConstantPatternContext.none)
+                                                        parseLiteralInt(-)
+                                                          listener: handleLiteralInt(1)
+                                                  listener: endBinaryExpression(-, 1)
+                                              ensureCloseParen(1, ()
+                                              listener: endParenthesizedExpression(()
+                                      listener: beginBinaryExpression(+)
+                                      parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                          parsePrimary(+, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(+)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(+, 1)
+                                  ensureSemicolon(1)
+                                  listener: handleExpressionStatement((, ;)
+                        listener: endDoWhileStatementBody(;)
+                        reportRecoverableError(}, Message[Template(ExpectedButGot), Expected 'while' before this., null, {string: while}])
+                          listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected 'while' before this., null, {string: while}], }, })
+                        rewriter()
+                        ensureParenthesizedCondition(while, allowCase: false)
+                          reportRecoverableError(}, Message[Template(ExpectedToken), Expected to find '('., null, {string: (}])
+                            listener: handleRecoverableError(Message[Template(ExpectedToken), Expected to find '('., null, {string: (}], }, })
+                          rewriter()
+                          parseExpressionInParenthesisRest((, allowCase: false)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSend((, expression, ConstantPatternContext.none)
+                                      ensureIdentifier((, expression)
+                                        reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, )
+                            ensureCloseParen(, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        ensureSemicolon())
+                          reportRecoverableError(;, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ;, ;)
+                          rewriter()
+                        listener: endDoWhileStatement(do, while, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, dynamic, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(dynamic)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(dynamic, methodDeclaration)
+                parseQualifiedRestOpt(dynamic, methodDeclarationContinuation)
+                parseMethodTypeVar(dynamic)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(dynamic, dynamic, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(dynamic, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(dynamic)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(dynamic, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(dynamic)
+                                      parseArguments(dynamic)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(dynamic, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(else)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, else, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, else, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(else)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(else, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(else, methodDeclarationContinuation)
+                parseMethodTypeVar(else)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(else, else, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(else, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(else, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(else)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(else)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, else)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(else)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    inPlainSync()
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(else, Template(ExpectedIdentifier))
+                                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(else)
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments(else)
+                                      listener: handleSend(, )
+                            ensureSemicolon()
+                              reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                              rewriter()
+                            listener: handleExpressionStatement(else, ;)
+                  reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+                    listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], else, else)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ()
+                  parseStatement(else)
+                    parseStatementX(else)
+                      parseExpressionStatementOrDeclaration(else, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(else)
+                            parseExpression(else)
+                              looksLikeOuterPatternEquals(else)
+                                skipOuterPattern(else)
+                              parsePrecedenceExpression(else, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(else, true, ConstantPatternContext.none)
+                                  parsePrimary(else, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(else, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(else, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        ensureCloseParen(1, ()
+                                        listener: endParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement((, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(enum)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, enum, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, enum, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(enum)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(enum, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(enum, methodDeclarationContinuation)
+                parseMethodTypeVar(enum)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(enum, enum, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(enum, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(enum, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(enum)
+                                    parseArguments(enum)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(enum, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, export, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(export)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(export, methodDeclaration)
+                parseQualifiedRestOpt(export, methodDeclarationContinuation)
+                parseMethodTypeVar(export)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(export, export, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(export, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(export)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(export, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(export)
+                                      parseArguments(export)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(export, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(extends)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, extends, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extends, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extends)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(extends, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(extends, methodDeclarationContinuation)
+                parseMethodTypeVar(extends)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(extends, extends, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(extends, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(extends, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(extends)
+                                    parseArguments(extends)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(extends, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, extension, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, extension, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(extension)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(extension, methodDeclaration)
+                parseQualifiedRestOpt(extension, methodDeclarationContinuation)
+                parseMethodTypeVar(extension)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(extension, extension, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(extension, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(extension)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(extension, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(extension)
+                                      parseArguments(extension)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(extension, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, external, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(external)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(external, methodDeclaration)
+                parseQualifiedRestOpt(external, methodDeclarationContinuation)
+                parseMethodTypeVar(external)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(external, external, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(external, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(external)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(external, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(external)
+                                      parseArguments(external)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(external, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, factory, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(factory)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(factory)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(factory, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(factory)
+                                      parseArguments(factory)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(factory, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(false)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, false, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, false, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(false)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(false, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(false, methodDeclarationContinuation)
+                parseMethodTypeVar(false)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(false, false, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(false, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseLiteralBool(return)
+                                  listener: handleLiteralBool(false)
+                            parseArgumentOrIndexStar(false, NoTypeParamOrArg(), false)
+                              listener: handleNoTypeArguments(()
+                              parseArguments(false)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                              listener: handleSend((, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(final)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, final, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, final, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(final)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(final, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(final, methodDeclarationContinuation)
+                parseMethodTypeVar(final)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(final, final, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(final, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(final, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'final'., Try inserting an identifier before 'final'., {lexeme: final}], final, final)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(final)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(final)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, final)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, null)
+                        skipOuterPattern(final)
+                        looksLikeLocalFunction(()
+                        listener: beginMetadataStar(final)
+                        listener: endMetadataStar(0)
+                        listener: handleNoType(final)
+                        listener: beginVariablesDeclaration((, null, final)
+                        parseVariablesDeclarationRest(final, true)
+                          parseOptionallyInitializedIdentifier(final)
+                            ensureIdentifier(final, localVariableDeclaration)
+                              reportRecoverableErrorWithToken((, Template(ExpectedIdentifier))
+                                listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                              rewriter()
+                              listener: handleIdentifier(, localVariableDeclaration)
+                            listener: beginInitializedIdentifier()
+                            parseVariableInitializerOpt()
+                              listener: handleNoVariableInitializer()
+                            listener: endInitializedIdentifier()
+                          ensureSemicolon()
+                            reportRecoverableError((, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, x)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(x)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          ensureSemicolon(1)
+                            reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                            rewriter()
+                          listener: handleExpressionStatement(x, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ))
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction())
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, )
+                            ensureSemicolon()
+                              reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                              rewriter()
+                            listener: handleExpressionStatement(), ;)
+                  reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+                    listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+                  notEofOrType(CLOSE_CURLY_BRACKET, +)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              looksLikeOuterPatternEquals())
+                                skipOuterPattern())
+                              parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(), true, ConstantPatternContext.none)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                      parseSend(), expression, ConstantPatternContext.none)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, )
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(+, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(finally)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, finally, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, finally, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(finally)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(finally, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(finally, methodDeclarationContinuation)
+                parseMethodTypeVar(finally)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(finally, finally, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(finally, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(finally, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(finally)
+                                    parseArguments(finally)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(finally, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(for)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, for, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, for, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(for)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(for, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(for, methodDeclarationContinuation)
+                parseMethodTypeVar(for)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(for, for, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(for, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(for, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'for'., Try inserting an identifier before 'for'., {lexeme: for}], for, for)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(for)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(for)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, for)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseForStatement(;, null)
+                        listener: beginForStatement(for)
+                        parseForLoopPartsStart(null, for, ForPartsContext(null))
+                          parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                            parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, ForPartsContext(null))
+                        parseForLoopPartsMid((, null, for)
+                          parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                parsePrimary((, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                    parseSend((, expression, ConstantPatternContext.none)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          listener: handleForInitializerExpressionStatement(1, false)
+                        parseForRest(null, 1, for)
+                          parseForLoopPartsRest(1, for, null)
+                            ensureSemicolon(1)
+                              reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                              rewriter()
+                            parseExpressionStatement(;)
+                              parseExpression(;)
+                                looksLikeOuterPatternEquals(;)
+                                  skipOuterPattern(;)
+                                parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                    parsePrimary(;, expression, ConstantPatternContext.none)
+                                      parseSend(;, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(;, expression)
+                                          reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                            listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments())
+                                        listener: handleSend(, )
+                              ensureSemicolon()
+                                reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                                rewriter()
+                              listener: handleExpressionStatement(), ;)
+                            listener: handleForLoopParts(for, (, ;, ;, 0)
+                          listener: beginForStatementBody(+)
+                          parseStatement())
+                            parseStatementX())
+                              parseExpressionStatementOrDeclaration(), null)
+                                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                                  looksLikeLocalFunction(+)
+                                  parseExpressionStatement())
+                                    parseExpression())
+                                      looksLikeOuterPatternEquals())
+                                        skipOuterPattern())
+                                      parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(), true, ConstantPatternContext.none)
+                                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                            rewriter()
+                                          parsePrimary(), expression, ConstantPatternContext.none)
+                                            parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                              parseSend(), expression, ConstantPatternContext.none)
+                                                ensureIdentifier(), expression)
+                                                  listener: handleIdentifier(, expression)
+                                                listener: handleNoTypeArguments(+)
+                                                parseArgumentsOpt()
+                                                  listener: handleNoArguments(+)
+                                                listener: handleSend(, )
+                                        listener: beginBinaryExpression(+)
+                                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                            parsePrimary(+, expression, ConstantPatternContext.none)
+                                              parseLiteralInt(+)
+                                                listener: handleLiteralInt(1)
+                                        listener: endBinaryExpression(+, 1)
+                                    ensureSemicolon(1)
+                                    listener: handleExpressionStatement(+, ;)
+                          listener: endForStatementBody(;)
+                          listener: endForStatement(;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, Function, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(Function, methodDeclaration)
+                parseQualifiedRestOpt(Function, methodDeclarationContinuation)
+                parseMethodTypeVar(Function)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(Function, Function, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(Function, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(Function)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(Function, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(Function)
+                                      parseArguments(Function)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(Function, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, get, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(get)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(get, methodDeclaration)
+                parseQualifiedRestOpt(get, methodDeclarationContinuation)
+                parseMethodTypeVar(get)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(get, get, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(get, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(get)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(get, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(get)
+                                      parseArguments(get)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(get, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, hide, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, hide, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(hide)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(hide, methodDeclaration)
+                parseQualifiedRestOpt(hide, methodDeclarationContinuation)
+                parseMethodTypeVar(hide)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(hide, hide, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(hide, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(hide)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(hide, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(hide)
+                                      parseArguments(hide)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(hide, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(if)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, if, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, if, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(if)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(if, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(if, methodDeclarationContinuation)
+                parseMethodTypeVar(if)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(if, if, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(if, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(if, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'if'., Try inserting an identifier before 'if'., {lexeme: if}], if, if)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(if)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(if)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseIfStatement(;)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(-)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(-)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(-)
+                                parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                    parsePrimary(-, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(-)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(-, 1)
+                            ensureCloseParen(1, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(+)
+                        parseStatement())
+                          parseStatementX())
+                            parseExpressionStatementOrDeclaration(), null)
+                              parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                                looksLikeLocalFunction(+)
+                                parseExpressionStatement())
+                                  parseExpression())
+                                    looksLikeOuterPatternEquals())
+                                      skipOuterPattern())
+                                    parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(), true, ConstantPatternContext.none)
+                                        rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                          reportRecoverableError(+, UnsupportedPrefixPlus)
+                                            listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                          rewriter()
+                                        parsePrimary(), expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                            parseSend(), expression, ConstantPatternContext.none)
+                                              ensureIdentifier(), expression)
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments(+)
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments(+)
+                                              listener: handleSend(, )
+                                      listener: beginBinaryExpression(+)
+                                      parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                          parsePrimary(+, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(+)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(+, 1)
+                                  ensureSemicolon(1)
+                                  listener: handleExpressionStatement(+, ;)
+                        listener: endThenStatement(+, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, implements, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(implements, methodDeclaration)
+                parseQualifiedRestOpt(implements, methodDeclarationContinuation)
+                parseMethodTypeVar(implements)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(implements, implements, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(implements, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(implements)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(implements, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(implements)
+                                      parseArguments(implements)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(implements, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, import, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(import)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(import, methodDeclaration)
+                parseQualifiedRestOpt(import, methodDeclarationContinuation)
+                parseMethodTypeVar(import)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(import, import, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(import, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(import)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(import, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(import)
+                                      parseArguments(import)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(import, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(in)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, in, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, in, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(in)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(in, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(in, methodDeclarationContinuation)
+                parseMethodTypeVar(in)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(in, in, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(in, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(in, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(in)
+                                    parseArguments(in)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(in, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, inout, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, inout, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(inout)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(inout, methodDeclaration)
+                parseQualifiedRestOpt(inout, methodDeclarationContinuation)
+                parseMethodTypeVar(inout)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(inout, inout, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(inout, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(inout)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(inout, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(inout)
+                                      parseArguments(inout)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(inout, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, interface, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(interface)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(interface, methodDeclaration)
+                parseQualifiedRestOpt(interface, methodDeclarationContinuation)
+                parseMethodTypeVar(interface)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(interface, interface, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(interface, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(interface)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(interface, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(interface)
+                                      parseArguments(interface)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(interface, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(is)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, is, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, is, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(is)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(is, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(is, methodDeclarationContinuation)
+                parseMethodTypeVar(is)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(is, is, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(is, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(is, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(is)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(is)
+                                  listener: handleSend(, )
+                            parseIsOperatorRest()
+                              listener: beginIsOperatorType(is)
+                              computeTypeAfterIsOrAs(is)
+                              parseRecordType((, is, false)
+                                listener: beginRecordType(()
+                                parseRecordTypeField((, identifierIsOptional: true)
+                                  listener: beginRecordTypeEntry()
+                                  parseMetadataStar(()
+                                    listener: beginMetadataStar(x)
+                                    listener: endMetadataStar(0)
+                                  listener: handleIdentifier(x, typeReference)
+                                  listener: handleNoTypeArguments(-)
+                                  listener: handleType(x, null)
+                                  listener: handleNoName(-)
+                                  listener: endRecordTypeEntry()
+                                ensureCloseParen(x, ()
+                                  reportRecoverableError(-, Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}])
+                                    listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], -, -)
+                                reportRecoverableError(), RecordTypeOnePositionalFieldNoTrailingComma)
+                                  listener: handleRecoverableError(RecordTypeOnePositionalFieldNoTrailingComma, ), ))
+                                listener: endRecordType((, null, 1, false)
+                              listener: endIsOperatorType(is)
+                              listener: handleIsOperator(is, null)
+                              skipChainedAsIsOperators())
+                        ensureSemicolon())
+                          reportRecoverableError(), Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ), ))
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, +)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  rewriteAndRecover(;, UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                      parseSend(;, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(;, expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, )
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(+, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, late, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(late)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(late, methodDeclaration)
+                parseQualifiedRestOpt(late, methodDeclarationContinuation)
+                parseMethodTypeVar(late)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(late, late, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(late, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(late)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(late, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(late)
+                                      parseArguments(late)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(late, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, library, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(library)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(library, methodDeclaration)
+                parseQualifiedRestOpt(library, methodDeclarationContinuation)
+                parseMethodTypeVar(library)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(library, library, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(library, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(library)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(library, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(library)
+                                      parseArguments(library)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(library, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, mixin, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(mixin)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(mixin, methodDeclaration)
+                parseQualifiedRestOpt(mixin, methodDeclarationContinuation)
+                parseMethodTypeVar(mixin)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(mixin, mixin, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(mixin, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(mixin)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(mixin, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(mixin)
+                                      parseArguments(mixin)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(mixin, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, native, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, native, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(native)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(native, methodDeclaration)
+                parseQualifiedRestOpt(native, methodDeclarationContinuation)
+                parseMethodTypeVar(native)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(native, native, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(native, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(native)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(native, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(native)
+                                      parseArguments(native)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(native, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(new)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, new, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, new, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(new)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseNewExpression(return)
+                                  listener: beginNewExpression(new)
+                                  parseConstructorReference(new, ConstructorReferenceContext.New, null)
+                                    ensureIdentifier(new, constructorReference)
+                                      insertSyntheticIdentifier(new, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], messageOnToken: null)
+                                        reportRecoverableError((, Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
+                                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                                        rewriter()
+                                      listener: handleIdentifier(, constructorReference)
+                                    listener: beginConstructorReference()
+                                    parseQualifiedRestOpt(, constructorReferenceContinuation)
+                                    listener: handleNoTypeArguments(()
+                                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments()
+                                    listener: endConstructorReference(, null, , ConstructorReferenceContext.New)
+                                  parseConstructorInvocationArguments()
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      allowedToShortcutParseExpression()
+                                      parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(x)
+                                        parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                          parseUnaryExpression((, true, ConstantPatternContext.none)
+                                            parsePrimary((, expression, ConstantPatternContext.none)
+                                              parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                parseSend((, expression, ConstantPatternContext.none)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, x)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                            parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                              parsePrimary(-, expression, ConstantPatternContext.none)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-, 1)
+                                      listener: endArguments(1, (, ))
+                                  listener: endNewExpression(new)
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(null)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, null, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, null, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(null)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(null, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(null, methodDeclarationContinuation)
+                parseMethodTypeVar(null)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(null, null, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(null, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseLiteralNull(return)
+                                  listener: handleLiteralNull(null)
+                            parseArgumentOrIndexStar(null, NoTypeParamOrArg(), false)
+                              listener: handleNoTypeArguments(()
+                              parseArguments(null)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                              listener: handleSend((, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, of, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, of, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(of)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(of, methodDeclaration)
+                parseQualifiedRestOpt(of, methodDeclarationContinuation)
+                parseMethodTypeVar(of)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(of, of, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(of, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(of)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(of, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(of)
+                                      parseArguments(of)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(of, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, on, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, on, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(on)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(on, methodDeclaration)
+                parseQualifiedRestOpt(on, methodDeclarationContinuation)
+                parseMethodTypeVar(on)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(on, on, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(on, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(on)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(on, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(on)
+                                      parseArguments(on)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(on, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isUnaryMinus(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, WrapperClass, false)
+                isUnaryMinus(()
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(operator)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(operator, methodDeclaration)
+                parseQualifiedRestOpt(operator, methodDeclarationContinuation)
+                parseMethodTypeVar(operator)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(operator, operator, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(operator, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(operator)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(operator, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(operator)
+                                      parseArguments(operator)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(operator, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, out, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, out, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(out)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(out, methodDeclaration)
+                parseQualifiedRestOpt(out, methodDeclarationContinuation)
+                parseMethodTypeVar(out)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(out, out, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(out, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(out)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(out, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(out)
+                                      parseArguments(out)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(out, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, part, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(part)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(part, methodDeclaration)
+                parseQualifiedRestOpt(part, methodDeclarationContinuation)
+                parseMethodTypeVar(part)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(part, part, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(part, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(part)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(part, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(part)
+                                      parseArguments(part)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(part, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, patch, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, patch, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(patch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(patch, methodDeclaration)
+                parseQualifiedRestOpt(patch, methodDeclarationContinuation)
+                parseMethodTypeVar(patch)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(patch, patch, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(patch, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(patch)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(patch, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(patch)
+                                      parseArguments(patch)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(patch, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, required, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(required)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(required, methodDeclaration)
+                parseQualifiedRestOpt(required, methodDeclarationContinuation)
+                parseMethodTypeVar(required)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(required, required, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(required, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(required)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(required, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(required)
+                                      parseArguments(required)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(required, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(rethrow)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, rethrow, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, rethrow, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(rethrow)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(rethrow, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(rethrow, methodDeclarationContinuation)
+                parseMethodTypeVar(rethrow)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(rethrow, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(rethrow, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(rethrow)
+                                    parseArguments(rethrow)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(rethrow, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(return)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, return, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, return, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(return)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(return, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(return, methodDeclarationContinuation)
+                parseMethodTypeVar(return)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(return, return, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(return, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                reportRecoverableErrorWithToken(return, Template(UnexpectedToken))
+                                  listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token 'return'., null, {lexeme: return}], return, return)
+                                parsePrimary(return, expression, ConstantPatternContext.none)
+                                  parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(return, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
+                                      listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                      parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(x)
+                                        parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                          parseUnaryExpression((, true, ConstantPatternContext.none)
+                                            parsePrimary((, expression, ConstantPatternContext.none)
+                                              parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                parseSend((, expression, ConstantPatternContext.none)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, x)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                            parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                              parsePrimary(-, expression, ConstantPatternContext.none)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-, 1)
+                                      ensureCloseParen(1, ()
+                                      listener: endParenthesizedExpression(()
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, set, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(set)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(set, methodDeclaration)
+                parseQualifiedRestOpt(set, methodDeclarationContinuation)
+                parseMethodTypeVar(set)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(set, set, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(set, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(set)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(set, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(set)
+                                      parseArguments(set)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(set, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, show, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, show, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(show)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(show, methodDeclaration)
+                parseQualifiedRestOpt(show, methodDeclarationContinuation)
+                parseMethodTypeVar(show)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(show, show, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(show, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(show)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(show, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(show)
+                                      parseArguments(show)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(show, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, source, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, source, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(source)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(source, methodDeclaration)
+                parseQualifiedRestOpt(source, methodDeclarationContinuation)
+                parseMethodTypeVar(source)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(source, source, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(source, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(source)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(source, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(source)
+                                      parseArguments(source)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(source, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, static, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(static)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(static, methodDeclaration)
+                parseQualifiedRestOpt(static, methodDeclarationContinuation)
+                parseMethodTypeVar(static)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(static, static, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(static, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(static)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(static, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(static)
+                                      parseArguments(static)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(static, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(int, }, null, null, null, null, null, null, null, }, SimpleType(), null, null, DeclarationKind.Class, WrapperClass)
+                parseFields(}, null, null, null, null, null, null, null, }, 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, Template(ExpectedIdentifierButGotKeyword))
+                      listener: handleRecoverableError(Message[Template(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[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ()
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(()
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, WrapperClass)
+                parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, (, DeclarationKind.Class, WrapperClass, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, (, WrapperClass)
+                  listener: handleNoType(;)
+                  ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                    insertSyntheticIdentifier(;, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError((, Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
+                        listener: handleRecoverableError(Message[Template(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.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                  parseInitializersOpt())
+                    listener: handleNoInitializers()
+                  parseAsyncModifierOpt())
+                    listener: handleAsyncModifier(null, null)
+                    inPlainSync()
+                  inPlainSync()
+                  parseFunctionBody(), false, true)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrType(CLOSE_CURLY_BRACKET, if)
+                    parseStatement({)
+                      parseStatementX({)
+                        parseIfStatement({)
+                          listener: beginIfStatement(if)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
+                              parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(x)
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(==)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(==)
+                                          listener: handleSend(x, x)
+                                  listener: beginBinaryExpression(==)
+                                  parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                      parsePrimary(==, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(==)
+                                          listener: handleLiteralInt(0)
+                                  listener: endBinaryExpression(==, 0)
+                              ensureCloseParen(0, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: beginThenStatement(return)
+                          parseStatement())
+                            parseStatementX())
+                              parseReturnStatement())
+                                listener: beginReturnStatement(return)
+                                parseExpression(return)
+                                  looksLikeOuterPatternEquals(return)
+                                    skipOuterPattern(return)
+                                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                      parsePrimary(return, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(return)
+                                          listener: handleLiteralInt(42)
+                                ensureSemicolon(42)
+                                listener: endReturnStatement(true, return, ;)
+                                inGenerator()
+                          listener: endThenStatement(return, ;)
+                          listener: endIfStatement(if, null, ;)
+                    notEofOrType(CLOSE_CURLY_BRACKET, return)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseReturnStatement(;)
+                          listener: beginReturnStatement(return)
+                          parseExpression(return)
+                            looksLikeOuterPatternEquals(return)
+                              skipOuterPattern(return)
+                            parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                parsePrimary(return, expression, ConstantPatternContext.none)
+                                  parseSuperExpression(return, expression)
+                                    listener: handleSuperExpression(super, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArguments(super)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                    listener: handleSend(super, ))
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                  parsePrimary(+, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+, 1)
+                          ensureSemicolon(1)
+                          listener: endReturnStatement(true, return, ;)
+                          inGenerator()
+                    notEofOrType(CLOSE_CURLY_BRACKET, })
+                    listener: endBlockFunctionBody(2, {, })
+                  listener: endMethod(DeclarationKind.Class, null, , (, null, })
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(switch)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, switch, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, switch, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(switch)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(switch, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(switch, methodDeclarationContinuation)
+                parseMethodTypeVar(switch)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(switch, switch, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(switch, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSwitchExpression(return)
+                                  listener: beginSwitchExpression(switch)
+                                  ensureParenthesizedCondition(switch, allowCase: false)
+                                    parseExpressionInParenthesisRest((, allowCase: false)
+                                      parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(x)
+                                        parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                          parseUnaryExpression((, true, ConstantPatternContext.none)
+                                            parsePrimary((, expression, ConstantPatternContext.none)
+                                              parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                parseSend((, expression, ConstantPatternContext.none)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, x)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                            parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                              parsePrimary(-, expression, ConstantPatternContext.none)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-, 1)
+                                      ensureCloseParen(1, ()
+                                      listener: handleParenthesizedCondition((, null, null)
+                                  ensureBlock(), BlockKind(switch expression))
+                                    reportRecoverableError(), ExpectedSwitchExpressionBody)
+                                      listener: handleRecoverableError(ExpectedSwitchExpressionBody, ), ))
+                                    insertBlock())
+                                      rewriter()
+                                      rewriter()
+                                  listener: beginSwitchExpressionBlock({)
+                                  listener: endSwitchExpressionBlock(0, {, })
+                                  listener: endSwitchExpression(switch, })
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, sync, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, sync, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(sync)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(sync, methodDeclaration)
+                parseQualifiedRestOpt(sync, methodDeclarationContinuation)
+                parseMethodTypeVar(sync)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(sync, sync, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(sync, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(sync)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(sync, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(sync)
+                                      parseArguments(sync)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(sync, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, this, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(this)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(this, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseThisExpression(return, expression)
+                                  listener: handleThisExpression(this, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArguments(this)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      allowedToShortcutParseExpression()
+                                      parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(x)
+                                        parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                          parseUnaryExpression((, true, ConstantPatternContext.none)
+                                            parsePrimary((, expression, ConstantPatternContext.none)
+                                              parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                parseSend((, expression, ConstantPatternContext.none)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, x)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                            parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                              parsePrimary(-, expression, ConstantPatternContext.none)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-, 1)
+                                      listener: endArguments(1, (, ))
+                                  listener: handleSend(this, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(throw)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, throw, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, throw, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(throw)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(throw, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(throw, methodDeclarationContinuation)
+                parseMethodTypeVar(throw)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(throw, throw, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(throw, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parseThrowExpression(return, true)
+                            parseExpression(throw)
+                              looksLikeOuterPatternEquals(throw)
+                                skipOuterPattern(throw)
+                              parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(throw, true, ConstantPatternContext.none)
+                                  parsePrimary(throw, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(throw, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(throw, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        ensureCloseParen(1, ()
+                                        listener: endParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            listener: handleThrowExpression(throw, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(true)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, true, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, true, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(true)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(true, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(true, methodDeclarationContinuation)
+                parseMethodTypeVar(true)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(true, true, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(true, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseLiteralBool(return)
+                                  listener: handleLiteralBool(true)
+                            parseArgumentOrIndexStar(true, NoTypeParamOrArg(), false)
+                              listener: handleNoTypeArguments(()
+                              parseArguments(true)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                              listener: handleSend((, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(try)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, try, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, try, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(try)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(try, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(try, methodDeclarationContinuation)
+                parseMethodTypeVar(try)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(try, try, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(try, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(try, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'try'., Try inserting an identifier before 'try'., {lexeme: try}], try, try)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(try)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(try)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, try)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseTryStatement(;)
+                        listener: beginTryStatement(try)
+                        parseBlock(try, BlockKind(try statement))
+                          ensureBlock(try, BlockKind(try statement))
+                            reportRecoverableError(try, ExpectedTryStatementBody)
+                              listener: handleRecoverableError(ExpectedTryStatementBody, try, try)
+                            insertBlock(try)
+                              rewriter()
+                              rewriter()
+                          listener: beginBlock({, BlockKind(try statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, })
+                          listener: endBlock(0, {, }, BlockKind(try statement))
+                        reportRecoverableError(try, OnlyTry)
+                          listener: handleRecoverableError(OnlyTry, try, try)
+                        listener: endTryStatement(0, try, null, })
+                  notEofOrType(CLOSE_CURLY_BRACKET, ()
+                  parseStatement(})
+                    parseStatementX(})
+                      parseExpressionStatementOrDeclaration(}, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(})
+                            parseExpression(})
+                              looksLikeOuterPatternEquals(})
+                                skipOuterPattern(})
+                              parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(}, true, ConstantPatternContext.none)
+                                  parsePrimary(}, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(}, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(}, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        ensureCloseParen(1, ()
+                                        listener: endParenthesizedExpression(()
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement((, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(4, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, typedef, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(typedef)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(typedef, methodDeclaration)
+                parseQualifiedRestOpt(typedef, methodDeclarationContinuation)
+                parseMethodTypeVar(typedef)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(typedef, typedef, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(typedef, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(typedef)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(typedef, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(typedef)
+                                      parseArguments(typedef)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(typedef, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(var)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, var, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, var, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(var)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(var, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(var, methodDeclarationContinuation)
+                parseMethodTypeVar(var)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(var, var, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(var, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(var, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'var'., Try inserting an identifier before 'var'., {lexeme: var}], var, var)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(var)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(var)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, var)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                        skipOuterPattern(var)
+                        looksLikeLocalFunction(()
+                        listener: beginMetadataStar(var)
+                        listener: endMetadataStar(0)
+                        listener: handleNoType(var)
+                        listener: beginVariablesDeclaration((, null, var)
+                        parseVariablesDeclarationRest(var, true)
+                          parseOptionallyInitializedIdentifier(var)
+                            ensureIdentifier(var, localVariableDeclaration)
+                              reportRecoverableErrorWithToken((, Template(ExpectedIdentifier))
+                                listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                              rewriter()
+                              listener: handleIdentifier(, localVariableDeclaration)
+                            listener: beginInitializedIdentifier()
+                            parseVariableInitializerOpt()
+                              listener: handleNoVariableInitializer()
+                            listener: endInitializedIdentifier()
+                          ensureSemicolon()
+                            reportRecoverableError((, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, x)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(x)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          ensureSemicolon(1)
+                            reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                            rewriter()
+                          listener: handleExpressionStatement(x, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ))
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction())
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, )
+                            ensureSemicolon()
+                              reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                              rewriter()
+                            listener: handleExpressionStatement(), ;)
+                  reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+                    listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+                  notEofOrType(CLOSE_CURLY_BRACKET, +)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              looksLikeOuterPatternEquals())
+                                skipOuterPattern())
+                              parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(), true, ConstantPatternContext.none)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                      parseSend(), expression, ConstantPatternContext.none)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, )
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(+, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, void, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, void, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(void)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(void, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(void, methodDeclarationContinuation)
+                parseMethodTypeVar(void)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(void, void, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(void, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      reportRecoverableErrorWithToken(void, Template(ExpectedIdentifier))
+                                        listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'void'., Try inserting an identifier before 'void'., {lexeme: void}], void, void)
+                                      rewriter()
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(void)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(void)
+                                    listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, void)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          listener: beginMetadataStar(void)
+                          listener: endMetadataStar(0)
+                          listener: handleVoidKeyword(void)
+                          listener: beginVariablesDeclaration((, null, null)
+                          parseVariablesDeclarationRest(void, true)
+                            parseOptionallyInitializedIdentifier(void)
+                              ensureIdentifier(void, localVariableDeclaration)
+                                reportRecoverableErrorWithToken((, Template(ExpectedIdentifier))
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                                rewriter()
+                                listener: handleIdentifier(, localVariableDeclaration)
+                              listener: beginInitializedIdentifier()
+                              parseVariableInitializerOpt()
+                                listener: handleNoVariableInitializer()
+                              listener: endInitializedIdentifier()
+                            ensureSemicolon()
+                              reportRecoverableError((, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+                              rewriter()
+                            listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, x)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(x)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          ensureSemicolon(1)
+                            reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                            rewriter()
+                          listener: handleExpressionStatement(x, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ))
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction())
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                        rewriter()
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments())
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments())
+                                      listener: handleSend(, )
+                            ensureSemicolon()
+                              reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                              rewriter()
+                            listener: handleExpressionStatement(), ;)
+                  reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+                    listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+                  notEofOrType(CLOSE_CURLY_BRACKET, +)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              looksLikeOuterPatternEquals())
+                                skipOuterPattern())
+                              parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(), true, ConstantPatternContext.none)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                      parseSend(), expression, ConstantPatternContext.none)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, )
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(+, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(while)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, while, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, while, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(while)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(while, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(while, methodDeclarationContinuation)
+                parseMethodTypeVar(while)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(while, while, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(while, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(while, Template(ExpectedIdentifier))
+                                      listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'while'., Try inserting an identifier before 'while'., {lexeme: while}], while, while)
+                                    rewriter()
+                                    listener: handleIdentifier(, expression)
+                                  listener: handleNoTypeArguments(while)
+                                  parseArgumentsOpt()
+                                    listener: handleNoArguments(while)
+                                  listener: handleSend(, )
+                        ensureSemicolon()
+                          reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, while)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseWhileStatement(;)
+                        listener: beginWhileStatement(while)
+                        ensureParenthesizedCondition(while, allowCase: false)
+                          parseExpressionInParenthesisRest((, allowCase: false)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(-)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(-)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(-)
+                                parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                    parsePrimary(-, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(-)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(-, 1)
+                            ensureCloseParen(1, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginWhileStatementBody(+)
+                        parseStatement())
+                          parseStatementX())
+                            parseExpressionStatementOrDeclaration(), null)
+                              parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                                looksLikeLocalFunction(+)
+                                parseExpressionStatement())
+                                  parseExpression())
+                                    looksLikeOuterPatternEquals())
+                                      skipOuterPattern())
+                                    parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(), true, ConstantPatternContext.none)
+                                        rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                          reportRecoverableError(+, UnsupportedPrefixPlus)
+                                            listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                          rewriter()
+                                        parsePrimary(), expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                            parseSend(), expression, ConstantPatternContext.none)
+                                              ensureIdentifier(), expression)
+                                                listener: handleIdentifier(, expression)
+                                              listener: handleNoTypeArguments(+)
+                                              parseArgumentsOpt()
+                                                listener: handleNoArguments(+)
+                                              listener: handleSend(, )
+                                      listener: beginBinaryExpression(+)
+                                      parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                          parsePrimary(+, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(+)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(+, 1)
+                                  ensureSemicolon(1)
+                                  listener: handleExpressionStatement(+, ;)
+                        listener: endWhileStatementBody(;)
+                        listener: endWhileStatement(while, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(with)
+              indicatesMethodOrField(()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, with, DeclarationKind.Class, WrapperClass, true)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, true)
+                  reportRecoverableErrorWithToken(with, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(with, methodDeclarationContinuation)
+                parseMethodTypeVar(with)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(with, with, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(with, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSend(return, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(return, expression)
+                                    reportRecoverableErrorWithToken(with, Template(ExpectedIdentifierButGotKeyword))
+                                      listener: handleRecoverableError(Message[Template(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, expression)
+                                  listener: handleNoTypeArguments(()
+                                  parseArgumentsOpt(with)
+                                    parseArguments(with)
+                                      parseArgumentsRest(()
+                                        listener: beginArguments(()
+                                        allowedToShortcutParseExpression()
+                                        parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
+                                              skipObjectPatternRest(x)
+                                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                                              parsePrimary((, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                  parseSend((, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier((, expression)
+                                                      listener: handleIdentifier(x, expression)
+                                                    listener: handleNoTypeArguments(-)
+                                                    parseArgumentsOpt(x)
+                                                      listener: handleNoArguments(-)
+                                                    listener: handleSend(x, x)
+                                            listener: beginBinaryExpression(-)
+                                            parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                              parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                parsePrimary(-, expression, ConstantPatternContext.none)
+                                                  parseLiteralInt(-)
+                                                    listener: handleLiteralInt(1)
+                                            listener: endBinaryExpression(-, 1)
+                                        listener: endArguments(1, (, ))
+                                  listener: handleSend(with, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, int)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
+              parseMetadataStar(})
+                listener: beginMetadataStar(int)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, yield, DeclarationKind.Class, WrapperClass, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, yield, WrapperClass)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(yield)
+                listener: handleType(int, null)
+                ensureIdentifierPotentiallyRecovered(int, methodDeclaration, false)
+                  listener: handleIdentifier(yield, methodDeclaration)
+                parseQualifiedRestOpt(yield, methodDeclarationContinuation)
+                parseMethodTypeVar(yield)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(yield, yield, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(yield, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, if)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseIfStatement({)
+                        listener: beginIfStatement(if)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(==)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(==)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(==)
+                                parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(==, true, ConstantPatternContext.none)
+                                    parsePrimary(==, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(==)
+                                        listener: handleLiteralInt(0)
+                                listener: endBinaryExpression(==, 0)
+                            ensureCloseParen(0, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: beginThenStatement(return)
+                        parseStatement())
+                          parseStatementX())
+                            parseReturnStatement())
+                              listener: beginReturnStatement(return)
+                              parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
+                                parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(return, true, ConstantPatternContext.none)
+                                    parsePrimary(return, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(return)
+                                        listener: handleLiteralInt(42)
+                              ensureSemicolon(42)
+                              listener: endReturnStatement(true, return, ;)
+                              inGenerator()
+                        listener: endThenStatement(return, ;)
+                        listener: endIfStatement(if, null, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(yield)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrimary(return, expression, ConstantPatternContext.none)
+                                inPlainSync()
+                                parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                                  looksLikeFunctionBody(+)
+                                  parseSend(return, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(return, expression)
+                                      inPlainSync()
+                                      listener: handleIdentifier(yield, expression)
+                                    listener: handleNoTypeArguments(()
+                                    parseArgumentsOpt(yield)
+                                      parseArguments(yield)
+                                        parseArgumentsRest(()
+                                          listener: beginArguments(()
+                                          allowedToShortcutParseExpression()
+                                          parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
+                                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                parsePrimary((, expression, ConstantPatternContext.none)
+                                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                    parseSend((, expression, ConstantPatternContext.none)
+                                                      ensureIdentifier((, expression)
+                                                        listener: handleIdentifier(x, expression)
+                                                      listener: handleNoTypeArguments(-)
+                                                      parseArgumentsOpt(x)
+                                                        listener: handleNoArguments(-)
+                                                      listener: handleSend(x, x)
+                                              listener: beginBinaryExpression(-)
+                                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                                    parseLiteralInt(-)
+                                                      listener: handleLiteralInt(1)
+                                              listener: endBinaryExpression(-, 1)
+                                          listener: endArguments(1, (, ))
+                                    listener: handleSend(yield, ))
+                            listener: beginBinaryExpression(+)
+                            parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                              parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                parsePrimary(+, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(+)
+                                    listener: handleLiteralInt(1)
+                            listener: endBinaryExpression(+, 1)
+                        ensureSemicolon(1)
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 70, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.parser.expect
new file mode 100644
index 0000000..02b4683
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.parser.expect
@@ -0,0 +1,697 @@
+NOTICE: Stream was rewritten by parser!
+
+class WrapperClass {
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return *synthetic*;break;(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return *synthetic*;continue;(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return *synthetic*;do(x-1) + 1;
+while(*synthetic*);}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return *synthetic*;*synthetic*;else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return *synthetic*;final(*synthetic*;x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return *synthetic*;for(x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return *synthetic*;if(x-1) *synthetic*+ 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return *synthetic*is(x-1) ;*synthetic*+ 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new*synthetic*(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super;*synthetic*(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return switch(x-1) {}+ 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return *synthetic*;try{}(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return *synthetic*;var(*synthetic*;x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return *synthetic*;void(*synthetic*;x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return *synthetic*;while(x-1) *synthetic*+ 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+}
+
+
+class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken]is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] ;[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] static[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+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]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.scanner.expect
new file mode 100644
index 0000000..994c2c6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_class_methods_2.dart.scanner.expect
@@ -0,0 +1,695 @@
+class WrapperClass {
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return break(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return continue(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return do(x-1) + 1;
+}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return final(x-1) + 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return for(x-1) + 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return if(x-1) + 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return is(x-1) + 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return switch(x-1) + 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return try(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return var(x-1) + 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return void(x-1) + 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return while(x-1) + 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+}
+
+
+class[KeywordToken] WrapperClass[StringToken] {[BeginToken]
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+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]
+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]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
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 6f9301b..3842648 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
@@ -118,6 +118,8 @@
                     listener: handleIdentifier(abstract, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -214,6 +216,8 @@
                     listener: handleIdentifier(abstract, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -266,6 +270,8 @@
                     listener: handleIdentifier(abstract, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -402,6 +408,8 @@
                     listener: handleIdentifier(as, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -498,6 +506,8 @@
                     listener: handleIdentifier(as, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -550,6 +560,8 @@
                     listener: handleIdentifier(as, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -689,6 +701,8 @@
                     listener: handleIdentifier(assert, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -787,6 +801,8 @@
                     listener: handleIdentifier(assert, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -840,6 +856,8 @@
                     listener: handleIdentifier(assert, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -976,6 +994,8 @@
                     listener: handleIdentifier(async, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1072,6 +1092,8 @@
                     listener: handleIdentifier(async, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1124,6 +1146,8 @@
                     listener: handleIdentifier(async, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1260,6 +1284,8 @@
                     listener: handleIdentifier(await, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1356,6 +1382,8 @@
                     listener: handleIdentifier(await, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1408,6 +1436,8 @@
                     listener: handleIdentifier(await, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1547,6 +1577,8 @@
                     listener: handleIdentifier(break, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1645,6 +1677,8 @@
                     listener: handleIdentifier(break, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1698,6 +1732,8 @@
                     listener: handleIdentifier(break, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1837,6 +1873,8 @@
                     listener: handleIdentifier(case, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1935,6 +1973,8 @@
                     listener: handleIdentifier(case, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1988,6 +2028,8 @@
                     listener: handleIdentifier(case, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2127,6 +2169,8 @@
                     listener: handleIdentifier(catch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2225,6 +2269,8 @@
                     listener: handleIdentifier(catch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2278,6 +2324,8 @@
                     listener: handleIdentifier(catch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2417,6 +2465,8 @@
                     listener: handleIdentifier(class, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2515,6 +2565,8 @@
                     listener: handleIdentifier(class, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2568,6 +2620,8 @@
                     listener: handleIdentifier(class, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2707,6 +2761,8 @@
                     listener: handleIdentifier(const, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2805,6 +2861,8 @@
                     listener: handleIdentifier(const, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2858,6 +2916,8 @@
                     listener: handleIdentifier(const, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2997,6 +3057,8 @@
                     listener: handleIdentifier(continue, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3095,6 +3157,8 @@
                     listener: handleIdentifier(continue, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3148,6 +3212,8 @@
                     listener: handleIdentifier(continue, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3284,6 +3350,8 @@
                     listener: handleIdentifier(covariant, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3380,6 +3448,8 @@
                     listener: handleIdentifier(covariant, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3432,6 +3502,8 @@
                     listener: handleIdentifier(covariant, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3571,6 +3643,8 @@
                     listener: handleIdentifier(default, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3669,6 +3743,8 @@
                     listener: handleIdentifier(default, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3722,6 +3798,8 @@
                     listener: handleIdentifier(default, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3858,6 +3936,8 @@
                     listener: handleIdentifier(deferred, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3954,6 +4034,8 @@
                     listener: handleIdentifier(deferred, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4006,6 +4088,8 @@
                     listener: handleIdentifier(deferred, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4145,6 +4229,8 @@
                     listener: handleIdentifier(do, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4243,6 +4329,8 @@
                     listener: handleIdentifier(do, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4296,6 +4384,8 @@
                     listener: handleIdentifier(do, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4432,6 +4522,8 @@
                     listener: handleIdentifier(dynamic, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4528,6 +4620,8 @@
                     listener: handleIdentifier(dynamic, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4580,6 +4674,8 @@
                     listener: handleIdentifier(dynamic, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4719,6 +4815,8 @@
                     listener: handleIdentifier(else, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4817,6 +4915,8 @@
                     listener: handleIdentifier(else, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4870,6 +4970,8 @@
                     listener: handleIdentifier(else, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5009,6 +5111,8 @@
                     listener: handleIdentifier(enum, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5107,6 +5211,8 @@
                     listener: handleIdentifier(enum, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -5160,6 +5266,8 @@
                     listener: handleIdentifier(enum, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5296,6 +5404,8 @@
                     listener: handleIdentifier(export, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5392,6 +5502,8 @@
                     listener: handleIdentifier(export, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -5444,6 +5556,8 @@
                     listener: handleIdentifier(export, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5583,6 +5697,8 @@
                     listener: handleIdentifier(extends, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5681,6 +5797,8 @@
                     listener: handleIdentifier(extends, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -5734,6 +5852,8 @@
                     listener: handleIdentifier(extends, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5870,6 +5990,8 @@
                     listener: handleIdentifier(extension, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5966,6 +6088,8 @@
                     listener: handleIdentifier(extension, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6018,6 +6142,8 @@
                     listener: handleIdentifier(extension, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6154,6 +6280,8 @@
                     listener: handleIdentifier(external, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6250,6 +6378,8 @@
                     listener: handleIdentifier(external, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6302,6 +6432,8 @@
                     listener: handleIdentifier(external, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6438,6 +6570,8 @@
                     listener: handleIdentifier(factory, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6534,6 +6668,8 @@
                     listener: handleIdentifier(factory, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6586,6 +6722,8 @@
                     listener: handleIdentifier(factory, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6725,6 +6863,8 @@
                     listener: handleIdentifier(false, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6823,6 +6963,8 @@
                     listener: handleIdentifier(false, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6876,6 +7018,8 @@
                     listener: handleIdentifier(false, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7015,6 +7159,8 @@
                     listener: handleIdentifier(final, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7113,6 +7259,8 @@
                     listener: handleIdentifier(final, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -7166,6 +7314,8 @@
                     listener: handleIdentifier(final, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7305,6 +7455,8 @@
                     listener: handleIdentifier(finally, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7403,6 +7555,8 @@
                     listener: handleIdentifier(finally, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -7456,6 +7610,8 @@
                     listener: handleIdentifier(finally, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7595,6 +7751,8 @@
                     listener: handleIdentifier(for, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7693,6 +7851,8 @@
                     listener: handleIdentifier(for, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -7746,6 +7906,8 @@
                     listener: handleIdentifier(for, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7882,6 +8044,8 @@
                     listener: handleIdentifier(Function, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7978,6 +8142,8 @@
                     listener: handleIdentifier(Function, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8030,6 +8196,8 @@
                     listener: handleIdentifier(Function, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8166,6 +8334,8 @@
                     listener: handleIdentifier(get, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8262,6 +8432,8 @@
                     listener: handleIdentifier(get, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8314,6 +8486,8 @@
                     listener: handleIdentifier(get, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8450,6 +8624,8 @@
                     listener: handleIdentifier(hide, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8546,6 +8722,8 @@
                     listener: handleIdentifier(hide, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8598,6 +8776,8 @@
                     listener: handleIdentifier(hide, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8737,6 +8917,8 @@
                     listener: handleIdentifier(if, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8835,6 +9017,8 @@
                     listener: handleIdentifier(if, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8888,6 +9072,8 @@
                     listener: handleIdentifier(if, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9024,6 +9210,8 @@
                     listener: handleIdentifier(implements, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9120,6 +9308,8 @@
                     listener: handleIdentifier(implements, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9172,6 +9362,8 @@
                     listener: handleIdentifier(implements, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9308,6 +9500,8 @@
                     listener: handleIdentifier(import, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9404,6 +9598,8 @@
                     listener: handleIdentifier(import, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9456,6 +9652,8 @@
                     listener: handleIdentifier(import, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9595,6 +9793,8 @@
                     listener: handleIdentifier(in, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9693,6 +9893,8 @@
                     listener: handleIdentifier(in, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9746,6 +9948,8 @@
                     listener: handleIdentifier(in, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9882,6 +10086,8 @@
                     listener: handleIdentifier(inout, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9978,6 +10184,8 @@
                     listener: handleIdentifier(inout, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10030,6 +10238,8 @@
                     listener: handleIdentifier(inout, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10166,6 +10376,8 @@
                     listener: handleIdentifier(interface, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10262,6 +10474,8 @@
                     listener: handleIdentifier(interface, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10314,6 +10528,8 @@
                     listener: handleIdentifier(interface, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10453,6 +10669,8 @@
                     listener: handleIdentifier(is, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10551,6 +10769,8 @@
                     listener: handleIdentifier(is, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10604,6 +10824,8 @@
                     listener: handleIdentifier(is, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10740,6 +10962,8 @@
                     listener: handleIdentifier(late, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10836,6 +11060,8 @@
                     listener: handleIdentifier(late, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10888,6 +11114,8 @@
                     listener: handleIdentifier(late, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11024,6 +11252,8 @@
                     listener: handleIdentifier(library, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11120,6 +11350,8 @@
                     listener: handleIdentifier(library, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11172,6 +11404,8 @@
                     listener: handleIdentifier(library, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11308,6 +11542,8 @@
                     listener: handleIdentifier(mixin, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11404,6 +11640,8 @@
                     listener: handleIdentifier(mixin, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11456,6 +11694,8 @@
                     listener: handleIdentifier(mixin, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11592,6 +11832,8 @@
                     listener: handleIdentifier(native, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11688,6 +11930,8 @@
                     listener: handleIdentifier(native, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11740,6 +11984,8 @@
                     listener: handleIdentifier(native, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11879,6 +12125,8 @@
                     listener: handleIdentifier(new, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11977,6 +12225,8 @@
                     listener: handleIdentifier(new, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12030,6 +12280,8 @@
                     listener: handleIdentifier(new, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12169,6 +12421,8 @@
                     listener: handleIdentifier(null, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12267,6 +12521,8 @@
                     listener: handleIdentifier(null, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12320,6 +12576,8 @@
                     listener: handleIdentifier(null, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12456,6 +12714,8 @@
                     listener: handleIdentifier(of, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12552,6 +12812,8 @@
                     listener: handleIdentifier(of, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12604,6 +12866,8 @@
                     listener: handleIdentifier(of, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12740,6 +13004,8 @@
                     listener: handleIdentifier(on, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12836,6 +13102,8 @@
                     listener: handleIdentifier(on, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12888,6 +13156,8 @@
                     listener: handleIdentifier(on, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13024,6 +13294,8 @@
                     listener: handleIdentifier(operator, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13120,6 +13392,8 @@
                     listener: handleIdentifier(operator, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13172,6 +13446,8 @@
                     listener: handleIdentifier(operator, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13308,6 +13584,8 @@
                     listener: handleIdentifier(out, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13404,6 +13682,8 @@
                     listener: handleIdentifier(out, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13456,6 +13736,8 @@
                     listener: handleIdentifier(out, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13592,6 +13874,8 @@
                     listener: handleIdentifier(part, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13688,6 +13972,8 @@
                     listener: handleIdentifier(part, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13740,6 +14026,8 @@
                     listener: handleIdentifier(part, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13876,6 +14164,8 @@
                     listener: handleIdentifier(patch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13972,6 +14262,8 @@
                     listener: handleIdentifier(patch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14024,6 +14316,8 @@
                     listener: handleIdentifier(patch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14160,6 +14454,8 @@
                     listener: handleIdentifier(required, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14256,6 +14552,8 @@
                     listener: handleIdentifier(required, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14308,6 +14606,8 @@
                     listener: handleIdentifier(required, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14447,6 +14747,8 @@
                     listener: handleIdentifier(rethrow, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14545,6 +14847,8 @@
                     listener: handleIdentifier(rethrow, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14598,6 +14902,8 @@
                     listener: handleIdentifier(rethrow, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14737,6 +15043,8 @@
                     listener: handleIdentifier(return, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14835,6 +15143,8 @@
                     listener: handleIdentifier(return, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14888,6 +15198,8 @@
                     listener: handleIdentifier(return, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15024,6 +15336,8 @@
                     listener: handleIdentifier(set, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15120,6 +15434,8 @@
                     listener: handleIdentifier(set, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -15172,6 +15488,8 @@
                     listener: handleIdentifier(set, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15308,6 +15626,8 @@
                     listener: handleIdentifier(show, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15404,6 +15724,8 @@
                     listener: handleIdentifier(show, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -15456,6 +15778,8 @@
                     listener: handleIdentifier(show, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15592,6 +15916,8 @@
                     listener: handleIdentifier(source, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15688,6 +16014,8 @@
                     listener: handleIdentifier(source, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -15740,6 +16068,8 @@
                     listener: handleIdentifier(source, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15876,6 +16206,8 @@
                     listener: handleIdentifier(static, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15972,6 +16304,8 @@
                     listener: handleIdentifier(static, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16024,6 +16358,8 @@
                     listener: handleIdentifier(static, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16163,6 +16499,8 @@
                     listener: handleIdentifier(super, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16261,6 +16599,8 @@
                     listener: handleIdentifier(super, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16314,6 +16654,8 @@
                     listener: handleIdentifier(super, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16453,6 +16795,8 @@
                     listener: handleIdentifier(switch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16551,6 +16895,8 @@
                     listener: handleIdentifier(switch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16604,6 +16950,8 @@
                     listener: handleIdentifier(switch, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16740,6 +17088,8 @@
                     listener: handleIdentifier(sync, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16836,6 +17186,8 @@
                     listener: handleIdentifier(sync, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16888,6 +17240,8 @@
                     listener: handleIdentifier(sync, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17027,6 +17381,8 @@
                     listener: handleIdentifier(this, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17125,6 +17481,8 @@
                     listener: handleIdentifier(this, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -17178,6 +17536,8 @@
                     listener: handleIdentifier(this, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17317,6 +17677,8 @@
                     listener: handleIdentifier(throw, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17415,6 +17777,8 @@
                     listener: handleIdentifier(throw, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -17468,6 +17832,8 @@
                     listener: handleIdentifier(throw, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17607,6 +17973,8 @@
                     listener: handleIdentifier(true, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17705,6 +18073,8 @@
                     listener: handleIdentifier(true, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -17758,6 +18128,8 @@
                     listener: handleIdentifier(true, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17897,6 +18269,8 @@
                     listener: handleIdentifier(try, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17995,6 +18369,8 @@
                     listener: handleIdentifier(try, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18048,6 +18424,8 @@
                     listener: handleIdentifier(try, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18184,6 +18562,8 @@
                     listener: handleIdentifier(typedef, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18280,6 +18660,8 @@
                     listener: handleIdentifier(typedef, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18332,6 +18714,8 @@
                     listener: handleIdentifier(typedef, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18471,6 +18855,8 @@
                     listener: handleIdentifier(var, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18569,6 +18955,8 @@
                     listener: handleIdentifier(var, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18622,6 +19010,8 @@
                     listener: handleIdentifier(var, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18761,6 +19151,8 @@
                     listener: handleIdentifier(void, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18859,6 +19251,8 @@
                     listener: handleIdentifier(void, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18912,6 +19306,8 @@
                     listener: handleIdentifier(void, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19051,6 +19447,8 @@
                     listener: handleIdentifier(while, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19149,6 +19547,8 @@
                     listener: handleIdentifier(while, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -19202,6 +19602,8 @@
                     listener: handleIdentifier(while, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19341,6 +19743,8 @@
                     listener: handleIdentifier(with, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19439,6 +19843,8 @@
                     listener: handleIdentifier(with, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -19492,6 +19898,8 @@
                     listener: handleIdentifier(with, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19628,6 +20036,8 @@
                     listener: handleIdentifier(yield, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19724,6 +20134,8 @@
                     listener: handleIdentifier(yield, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -19776,6 +20188,8 @@
                     listener: handleIdentifier(yield, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
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 0549041..b4b17b0 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
@@ -115,6 +115,8 @@
                     listener: handleIdentifier(abstractX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -209,6 +211,8 @@
                     listener: handleIdentifier(abstractX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -260,6 +264,8 @@
                     listener: handleIdentifier(abstractX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -393,6 +399,8 @@
                     listener: handleIdentifier(asX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -487,6 +495,8 @@
                     listener: handleIdentifier(asX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -538,6 +548,8 @@
                     listener: handleIdentifier(asX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -671,6 +683,8 @@
                     listener: handleIdentifier(assertX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -765,6 +779,8 @@
                     listener: handleIdentifier(assertX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -816,6 +832,8 @@
                     listener: handleIdentifier(assertX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -949,6 +967,8 @@
                     listener: handleIdentifier(asyncX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1043,6 +1063,8 @@
                     listener: handleIdentifier(asyncX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1094,6 +1116,8 @@
                     listener: handleIdentifier(asyncX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1227,6 +1251,8 @@
                     listener: handleIdentifier(awaitX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1321,6 +1347,8 @@
                     listener: handleIdentifier(awaitX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1372,6 +1400,8 @@
                     listener: handleIdentifier(awaitX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1505,6 +1535,8 @@
                     listener: handleIdentifier(breakX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1599,6 +1631,8 @@
                     listener: handleIdentifier(breakX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1650,6 +1684,8 @@
                     listener: handleIdentifier(breakX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1783,6 +1819,8 @@
                     listener: handleIdentifier(caseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1877,6 +1915,8 @@
                     listener: handleIdentifier(caseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1928,6 +1968,8 @@
                     listener: handleIdentifier(caseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2061,6 +2103,8 @@
                     listener: handleIdentifier(catchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2155,6 +2199,8 @@
                     listener: handleIdentifier(catchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2206,6 +2252,8 @@
                     listener: handleIdentifier(catchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2339,6 +2387,8 @@
                     listener: handleIdentifier(classX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2433,6 +2483,8 @@
                     listener: handleIdentifier(classX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2484,6 +2536,8 @@
                     listener: handleIdentifier(classX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2617,6 +2671,8 @@
                     listener: handleIdentifier(constX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2711,6 +2767,8 @@
                     listener: handleIdentifier(constX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -2762,6 +2820,8 @@
                     listener: handleIdentifier(constX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2895,6 +2955,8 @@
                     listener: handleIdentifier(continueX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2989,6 +3051,8 @@
                     listener: handleIdentifier(continueX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3040,6 +3104,8 @@
                     listener: handleIdentifier(continueX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3173,6 +3239,8 @@
                     listener: handleIdentifier(covariantX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3267,6 +3335,8 @@
                     listener: handleIdentifier(covariantX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3318,6 +3388,8 @@
                     listener: handleIdentifier(covariantX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3451,6 +3523,8 @@
                     listener: handleIdentifier(defaultX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3545,6 +3619,8 @@
                     listener: handleIdentifier(defaultX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3596,6 +3672,8 @@
                     listener: handleIdentifier(defaultX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3729,6 +3807,8 @@
                     listener: handleIdentifier(deferredX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -3823,6 +3903,8 @@
                     listener: handleIdentifier(deferredX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -3874,6 +3956,8 @@
                     listener: handleIdentifier(deferredX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4007,6 +4091,8 @@
                     listener: handleIdentifier(doX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4101,6 +4187,8 @@
                     listener: handleIdentifier(doX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4152,6 +4240,8 @@
                     listener: handleIdentifier(doX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4285,6 +4375,8 @@
                     listener: handleIdentifier(dynamicX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4379,6 +4471,8 @@
                     listener: handleIdentifier(dynamicX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4430,6 +4524,8 @@
                     listener: handleIdentifier(dynamicX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4563,6 +4659,8 @@
                     listener: handleIdentifier(elseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4657,6 +4755,8 @@
                     listener: handleIdentifier(elseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4708,6 +4808,8 @@
                     listener: handleIdentifier(elseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4841,6 +4943,8 @@
                     listener: handleIdentifier(enumX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -4935,6 +5039,8 @@
                     listener: handleIdentifier(enumX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -4986,6 +5092,8 @@
                     listener: handleIdentifier(enumX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5119,6 +5227,8 @@
                     listener: handleIdentifier(exportX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5213,6 +5323,8 @@
                     listener: handleIdentifier(exportX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -5264,6 +5376,8 @@
                     listener: handleIdentifier(exportX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5397,6 +5511,8 @@
                     listener: handleIdentifier(extendsX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5491,6 +5607,8 @@
                     listener: handleIdentifier(extendsX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -5542,6 +5660,8 @@
                     listener: handleIdentifier(extendsX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5675,6 +5795,8 @@
                     listener: handleIdentifier(extensionX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5769,6 +5891,8 @@
                     listener: handleIdentifier(extensionX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -5820,6 +5944,8 @@
                     listener: handleIdentifier(extensionX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -5953,6 +6079,8 @@
                     listener: handleIdentifier(externalX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6047,6 +6175,8 @@
                     listener: handleIdentifier(externalX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6098,6 +6228,8 @@
                     listener: handleIdentifier(externalX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6231,6 +6363,8 @@
                     listener: handleIdentifier(factoryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6325,6 +6459,8 @@
                     listener: handleIdentifier(factoryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6376,6 +6512,8 @@
                     listener: handleIdentifier(factoryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6509,6 +6647,8 @@
                     listener: handleIdentifier(falseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6603,6 +6743,8 @@
                     listener: handleIdentifier(falseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6654,6 +6796,8 @@
                     listener: handleIdentifier(falseX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6787,6 +6931,8 @@
                     listener: handleIdentifier(finalX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -6881,6 +7027,8 @@
                     listener: handleIdentifier(finalX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -6932,6 +7080,8 @@
                     listener: handleIdentifier(finalX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7065,6 +7215,8 @@
                     listener: handleIdentifier(finallyX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7159,6 +7311,8 @@
                     listener: handleIdentifier(finallyX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -7210,6 +7364,8 @@
                     listener: handleIdentifier(finallyX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7343,6 +7499,8 @@
                     listener: handleIdentifier(forX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7437,6 +7595,8 @@
                     listener: handleIdentifier(forX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -7488,6 +7648,8 @@
                     listener: handleIdentifier(forX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7621,6 +7783,8 @@
                     listener: handleIdentifier(FunctionX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7715,6 +7879,8 @@
                     listener: handleIdentifier(FunctionX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -7766,6 +7932,8 @@
                     listener: handleIdentifier(FunctionX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7899,6 +8067,8 @@
                     listener: handleIdentifier(getX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -7993,6 +8163,8 @@
                     listener: handleIdentifier(getX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8044,6 +8216,8 @@
                     listener: handleIdentifier(getX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8177,6 +8351,8 @@
                     listener: handleIdentifier(hideX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8271,6 +8447,8 @@
                     listener: handleIdentifier(hideX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8322,6 +8500,8 @@
                     listener: handleIdentifier(hideX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8455,6 +8635,8 @@
                     listener: handleIdentifier(ifX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8549,6 +8731,8 @@
                     listener: handleIdentifier(ifX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8600,6 +8784,8 @@
                     listener: handleIdentifier(ifX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8733,6 +8919,8 @@
                     listener: handleIdentifier(implementsX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -8827,6 +9015,8 @@
                     listener: handleIdentifier(implementsX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -8878,6 +9068,8 @@
                     listener: handleIdentifier(implementsX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9011,6 +9203,8 @@
                     listener: handleIdentifier(importX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9105,6 +9299,8 @@
                     listener: handleIdentifier(importX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9156,6 +9352,8 @@
                     listener: handleIdentifier(importX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9289,6 +9487,8 @@
                     listener: handleIdentifier(inX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9383,6 +9583,8 @@
                     listener: handleIdentifier(inX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9434,6 +9636,8 @@
                     listener: handleIdentifier(inX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9567,6 +9771,8 @@
                     listener: handleIdentifier(inoutX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9661,6 +9867,8 @@
                     listener: handleIdentifier(inoutX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9712,6 +9920,8 @@
                     listener: handleIdentifier(inoutX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9845,6 +10055,8 @@
                     listener: handleIdentifier(interfaceX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -9939,6 +10151,8 @@
                     listener: handleIdentifier(interfaceX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -9990,6 +10204,8 @@
                     listener: handleIdentifier(interfaceX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10123,6 +10339,8 @@
                     listener: handleIdentifier(isX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10217,6 +10435,8 @@
                     listener: handleIdentifier(isX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10268,6 +10488,8 @@
                     listener: handleIdentifier(isX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10401,6 +10623,8 @@
                     listener: handleIdentifier(lateX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10495,6 +10719,8 @@
                     listener: handleIdentifier(lateX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10546,6 +10772,8 @@
                     listener: handleIdentifier(lateX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10679,6 +10907,8 @@
                     listener: handleIdentifier(libraryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10773,6 +11003,8 @@
                     listener: handleIdentifier(libraryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -10824,6 +11056,8 @@
                     listener: handleIdentifier(libraryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -10957,6 +11191,8 @@
                     listener: handleIdentifier(mixinX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11051,6 +11287,8 @@
                     listener: handleIdentifier(mixinX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11102,6 +11340,8 @@
                     listener: handleIdentifier(mixinX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11235,6 +11475,8 @@
                     listener: handleIdentifier(nativeX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11329,6 +11571,8 @@
                     listener: handleIdentifier(nativeX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11380,6 +11624,8 @@
                     listener: handleIdentifier(nativeX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11513,6 +11759,8 @@
                     listener: handleIdentifier(newX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11607,6 +11855,8 @@
                     listener: handleIdentifier(newX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11658,6 +11908,8 @@
                     listener: handleIdentifier(newX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11791,6 +12043,8 @@
                     listener: handleIdentifier(nullX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -11885,6 +12139,8 @@
                     listener: handleIdentifier(nullX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -11936,6 +12192,8 @@
                     listener: handleIdentifier(nullX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12069,6 +12327,8 @@
                     listener: handleIdentifier(ofX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12163,6 +12423,8 @@
                     listener: handleIdentifier(ofX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12214,6 +12476,8 @@
                     listener: handleIdentifier(ofX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12347,6 +12611,8 @@
                     listener: handleIdentifier(onX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12441,6 +12707,8 @@
                     listener: handleIdentifier(onX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12492,6 +12760,8 @@
                     listener: handleIdentifier(onX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12625,6 +12895,8 @@
                     listener: handleIdentifier(operatorX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12719,6 +12991,8 @@
                     listener: handleIdentifier(operatorX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -12770,6 +13044,8 @@
                     listener: handleIdentifier(operatorX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12903,6 +13179,8 @@
                     listener: handleIdentifier(outX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -12997,6 +13275,8 @@
                     listener: handleIdentifier(outX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13048,6 +13328,8 @@
                     listener: handleIdentifier(outX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13181,6 +13463,8 @@
                     listener: handleIdentifier(partX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13275,6 +13559,8 @@
                     listener: handleIdentifier(partX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13326,6 +13612,8 @@
                     listener: handleIdentifier(partX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13459,6 +13747,8 @@
                     listener: handleIdentifier(patchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13553,6 +13843,8 @@
                     listener: handleIdentifier(patchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13604,6 +13896,8 @@
                     listener: handleIdentifier(patchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13737,6 +14031,8 @@
                     listener: handleIdentifier(requiredX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -13831,6 +14127,8 @@
                     listener: handleIdentifier(requiredX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -13882,6 +14180,8 @@
                     listener: handleIdentifier(requiredX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14015,6 +14315,8 @@
                     listener: handleIdentifier(rethrowX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14109,6 +14411,8 @@
                     listener: handleIdentifier(rethrowX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14160,6 +14464,8 @@
                     listener: handleIdentifier(rethrowX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14293,6 +14599,8 @@
                     listener: handleIdentifier(returnX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14387,6 +14695,8 @@
                     listener: handleIdentifier(returnX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14438,6 +14748,8 @@
                     listener: handleIdentifier(returnX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14571,6 +14883,8 @@
                     listener: handleIdentifier(setX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14665,6 +14979,8 @@
                     listener: handleIdentifier(setX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14716,6 +15032,8 @@
                     listener: handleIdentifier(setX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14849,6 +15167,8 @@
                     listener: handleIdentifier(showX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -14943,6 +15263,8 @@
                     listener: handleIdentifier(showX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -14994,6 +15316,8 @@
                     listener: handleIdentifier(showX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15127,6 +15451,8 @@
                     listener: handleIdentifier(sourceX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15221,6 +15547,8 @@
                     listener: handleIdentifier(sourceX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -15272,6 +15600,8 @@
                     listener: handleIdentifier(sourceX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15405,6 +15735,8 @@
                     listener: handleIdentifier(staticX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15499,6 +15831,8 @@
                     listener: handleIdentifier(staticX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -15550,6 +15884,8 @@
                     listener: handleIdentifier(staticX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15683,6 +16019,8 @@
                     listener: handleIdentifier(superX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15777,6 +16115,8 @@
                     listener: handleIdentifier(superX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -15828,6 +16168,8 @@
                     listener: handleIdentifier(superX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -15961,6 +16303,8 @@
                     listener: handleIdentifier(switchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16055,6 +16399,8 @@
                     listener: handleIdentifier(switchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16106,6 +16452,8 @@
                     listener: handleIdentifier(switchX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16239,6 +16587,8 @@
                     listener: handleIdentifier(syncX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16333,6 +16683,8 @@
                     listener: handleIdentifier(syncX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16384,6 +16736,8 @@
                     listener: handleIdentifier(syncX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16517,6 +16871,8 @@
                     listener: handleIdentifier(thisX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16611,6 +16967,8 @@
                     listener: handleIdentifier(thisX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16662,6 +17020,8 @@
                     listener: handleIdentifier(thisX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16795,6 +17155,8 @@
                     listener: handleIdentifier(throwX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -16889,6 +17251,8 @@
                     listener: handleIdentifier(throwX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -16940,6 +17304,8 @@
                     listener: handleIdentifier(throwX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17073,6 +17439,8 @@
                     listener: handleIdentifier(trueX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17167,6 +17535,8 @@
                     listener: handleIdentifier(trueX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -17218,6 +17588,8 @@
                     listener: handleIdentifier(trueX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17351,6 +17723,8 @@
                     listener: handleIdentifier(tryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17445,6 +17819,8 @@
                     listener: handleIdentifier(tryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -17496,6 +17872,8 @@
                     listener: handleIdentifier(tryX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17629,6 +18007,8 @@
                     listener: handleIdentifier(typedefX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17723,6 +18103,8 @@
                     listener: handleIdentifier(typedefX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -17774,6 +18156,8 @@
                     listener: handleIdentifier(typedefX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -17907,6 +18291,8 @@
                     listener: handleIdentifier(varX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18001,6 +18387,8 @@
                     listener: handleIdentifier(varX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18052,6 +18440,8 @@
                     listener: handleIdentifier(varX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18185,6 +18575,8 @@
                     listener: handleIdentifier(voidX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18279,6 +18671,8 @@
                     listener: handleIdentifier(voidX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18330,6 +18724,8 @@
                     listener: handleIdentifier(voidX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18463,6 +18859,8 @@
                     listener: handleIdentifier(whileX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18557,6 +18955,8 @@
                     listener: handleIdentifier(whileX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18608,6 +19008,8 @@
                     listener: handleIdentifier(whileX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18741,6 +19143,8 @@
                     listener: handleIdentifier(withX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -18835,6 +19239,8 @@
                     listener: handleIdentifier(withX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -18886,6 +19292,8 @@
                     listener: handleIdentifier(withX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19019,6 +19427,8 @@
                     listener: handleIdentifier(yieldX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -19113,6 +19523,8 @@
                     listener: handleIdentifier(yieldX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -19164,6 +19576,8 @@
                     listener: handleIdentifier(yieldX, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
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 3ff01a3..4f303ba 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
@@ -18,6 +18,8 @@
         parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -42,6 +44,8 @@
         parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -70,6 +74,8 @@
         parseFieldInitializerOpt(assert, assert, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -94,6 +100,8 @@
         parseFieldInitializerOpt(async, async, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -118,6 +126,8 @@
         parseFieldInitializerOpt(await, await, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -146,6 +156,8 @@
         parseFieldInitializerOpt(break, break, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -174,6 +186,8 @@
         parseFieldInitializerOpt(case, case, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -202,6 +216,8 @@
         parseFieldInitializerOpt(catch, catch, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -230,6 +246,8 @@
         parseFieldInitializerOpt(class, class, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -258,6 +276,8 @@
         parseFieldInitializerOpt(const, const, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -286,6 +306,8 @@
         parseFieldInitializerOpt(continue, continue, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -310,6 +332,8 @@
         parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -338,6 +362,8 @@
         parseFieldInitializerOpt(default, default, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -362,6 +388,8 @@
         parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -390,6 +418,8 @@
         parseFieldInitializerOpt(do, do, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -414,6 +444,8 @@
         parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -442,6 +474,8 @@
         parseFieldInitializerOpt(else, else, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -470,6 +504,8 @@
         parseFieldInitializerOpt(enum, enum, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -494,6 +530,8 @@
         parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -522,6 +560,8 @@
         parseFieldInitializerOpt(extends, extends, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -546,6 +586,8 @@
         parseFieldInitializerOpt(extension, extension, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -570,6 +612,8 @@
         parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -594,6 +638,8 @@
         parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -622,6 +668,8 @@
         parseFieldInitializerOpt(false, false, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -650,6 +698,8 @@
         parseFieldInitializerOpt(final, final, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -678,6 +728,8 @@
         parseFieldInitializerOpt(finally, finally, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -706,6 +758,8 @@
         parseFieldInitializerOpt(for, for, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -730,6 +784,8 @@
         parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -754,6 +810,8 @@
         parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -778,6 +836,8 @@
         parseFieldInitializerOpt(hide, hide, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -806,6 +866,8 @@
         parseFieldInitializerOpt(if, if, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -830,6 +892,8 @@
         parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -854,6 +918,8 @@
         parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -882,6 +948,8 @@
         parseFieldInitializerOpt(in, in, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -906,6 +974,8 @@
         parseFieldInitializerOpt(inout, inout, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -930,6 +1000,8 @@
         parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -958,6 +1030,8 @@
         parseFieldInitializerOpt(is, is, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -982,6 +1056,8 @@
         parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1006,6 +1082,8 @@
         parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1030,6 +1108,8 @@
         parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1054,6 +1134,8 @@
         parseFieldInitializerOpt(native, native, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1082,6 +1164,8 @@
         parseFieldInitializerOpt(new, new, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1110,6 +1194,8 @@
         parseFieldInitializerOpt(null, null, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1134,6 +1220,8 @@
         parseFieldInitializerOpt(of, of, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1158,6 +1246,8 @@
         parseFieldInitializerOpt(on, on, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1182,6 +1272,8 @@
         parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1206,6 +1298,8 @@
         parseFieldInitializerOpt(out, out, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1230,6 +1324,8 @@
         parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1254,6 +1350,8 @@
         parseFieldInitializerOpt(patch, patch, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1278,6 +1376,8 @@
         parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1306,6 +1406,8 @@
         parseFieldInitializerOpt(rethrow, rethrow, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1334,6 +1436,8 @@
         parseFieldInitializerOpt(return, return, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1358,6 +1462,8 @@
         parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1382,6 +1488,8 @@
         parseFieldInitializerOpt(show, show, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1406,6 +1514,8 @@
         parseFieldInitializerOpt(source, source, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1430,6 +1540,8 @@
         parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1456,6 +1568,8 @@
         parseFieldInitializerOpt(super, super, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1484,6 +1598,8 @@
         parseFieldInitializerOpt(switch, switch, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1508,6 +1624,8 @@
         parseFieldInitializerOpt(sync, sync, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1534,6 +1652,8 @@
         parseFieldInitializerOpt(this, this, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1562,6 +1682,8 @@
         parseFieldInitializerOpt(throw, throw, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1590,6 +1712,8 @@
         parseFieldInitializerOpt(true, true, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1618,6 +1742,8 @@
         parseFieldInitializerOpt(try, try, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1642,6 +1768,8 @@
         parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1670,6 +1798,8 @@
         parseFieldInitializerOpt(var, var, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1698,6 +1828,8 @@
         parseFieldInitializerOpt(void, void, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1726,6 +1858,8 @@
         parseFieldInitializerOpt(while, while, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1754,6 +1888,8 @@
         parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1778,6 +1914,8 @@
         parseFieldInitializerOpt(yield, yield, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart
index bc40039..1885466 100644
--- a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 int abstract(int x) {
   if (x == 0) return 42;
   return abstract(x-1) + 1;
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 9c4d1ca..6de9214 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
@@ -1,474 +1,474 @@
 Problems reported:
 
-parser/error_recovery/keyword_named_top_level_methods:11:5: 'assert' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:12:5: 'assert' can't be used as an identifier because it's a keyword.
 int assert(int x) {
     ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:13:10: `assert` can't be used as an expression.
+parser/error_recovery/keyword_named_top_level_methods:14:10: `assert` can't be used as an expression.
   return assert(x-1) + 1;
          ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:26:5: 'break' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:27:5: 'break' can't be used as an identifier because it's a keyword.
 int break(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:28:10: Expected an identifier, but got 'break'.
+parser/error_recovery/keyword_named_top_level_methods:29:10: Expected an identifier, but got 'break'.
   return break(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:28:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:29:3: Expected ';' after this.
   return break(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:28:10: A break statement can't be used outside of a loop or switch statement.
+parser/error_recovery/keyword_named_top_level_methods:29:10: A break statement can't be used outside of a loop or switch statement.
   return break(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:28:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:29:10: Expected ';' after this.
   return break(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:31:5: 'case' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:32:5: 'case' can't be used as an identifier because it's a keyword.
 int case(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:33:10: 'case' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:34:10: 'case' can't be used as an identifier because it's a keyword.
   return case(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:36:5: 'catch' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:37:5: 'catch' can't be used as an identifier because it's a keyword.
 int catch(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:38:10: 'catch' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:39:10: 'catch' can't be used as an identifier because it's a keyword.
   return catch(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:41:5: 'class' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:42:5: 'class' can't be used as an identifier because it's a keyword.
 int class(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:43:10: 'class' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:44:10: 'class' can't be used as an identifier because it's a keyword.
   return class(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:46:5: 'const' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:47:5: 'const' can't be used as an identifier because it's a keyword.
 int const(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:48:19: A record literal with exactly one positional field requires a trailing comma.
+parser/error_recovery/keyword_named_top_level_methods:49:19: A record literal with exactly one positional field requires a trailing comma.
   return const(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_top_level_methods:51:5: 'continue' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:52:5: 'continue' can't be used as an identifier because it's a keyword.
 int continue(int x) {
     ^^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:53:10: Expected an identifier, but got 'continue'.
+parser/error_recovery/keyword_named_top_level_methods:54:10: Expected an identifier, but got 'continue'.
   return continue(x-1) + 1;
          ^^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:53:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:54:3: Expected ';' after this.
   return continue(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:53:10: A continue statement can't be used outside of a loop or switch statement.
+parser/error_recovery/keyword_named_top_level_methods:54:10: A continue statement can't be used outside of a loop or switch statement.
   return continue(x-1) + 1;
          ^^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:53:10: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:54:10: Expected ';' after this.
   return continue(x-1) + 1;
          ^^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:61:5: 'default' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:62:5: 'default' can't be used as an identifier because it's a keyword.
 int default(int x) {
     ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:63:10: 'default' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:64:10: 'default' can't be used as an identifier because it's a keyword.
   return default(x-1) + 1;
          ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:71:5: 'do' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:72:5: 'do' can't be used as an identifier because it's a keyword.
 int do(int x) {
     ^^
 
-parser/error_recovery/keyword_named_top_level_methods:73:10: Expected an identifier, but got 'do'.
+parser/error_recovery/keyword_named_top_level_methods:74:10: Expected an identifier, but got 'do'.
   return do(x-1) + 1;
          ^^
 
-parser/error_recovery/keyword_named_top_level_methods:73:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:74:3: Expected ';' after this.
   return do(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:74:1: Expected 'while' before this.
+parser/error_recovery/keyword_named_top_level_methods:75:1: Expected 'while' before this.
 }
 ^
 
-parser/error_recovery/keyword_named_top_level_methods:74:1: Expected to find '('.
+parser/error_recovery/keyword_named_top_level_methods:75:1: Expected to find '('.
 }
 ^
 
-parser/error_recovery/keyword_named_top_level_methods:74:1: Expected an identifier, but got '}'.
+parser/error_recovery/keyword_named_top_level_methods:75:1: Expected an identifier, but got '}'.
 }
 ^
 
-parser/error_recovery/keyword_named_top_level_methods:73:21: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:74: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.
+parser/error_recovery/keyword_named_top_level_methods:82:5: 'else' can't be used as an identifier because it's a keyword.
 int else(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:10: Expected an identifier, but got 'else'.
+parser/error_recovery/keyword_named_top_level_methods:84:10: Expected an identifier, but got 'else'.
   return else(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:84:3: Expected ';' after this.
   return else(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:10: Expected an identifier, but got 'else'.
+parser/error_recovery/keyword_named_top_level_methods:84:10: Expected an identifier, but got 'else'.
   return else(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:84:3: Expected ';' after this.
   return else(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:83:10: Unexpected token ';'.
+parser/error_recovery/keyword_named_top_level_methods:84:10: Unexpected token ';'.
   return else(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:86:5: 'enum' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:87:5: 'enum' can't be used as an identifier because it's a keyword.
 int enum(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:88:10: 'enum' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:89:10: 'enum' can't be used as an identifier because it's a keyword.
   return enum(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:96:5: 'extends' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:97:5: 'extends' can't be used as an identifier because it's a keyword.
 int extends(int x) {
     ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:98:10: 'extends' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:99:10: 'extends' can't be used as an identifier because it's a keyword.
   return extends(x-1) + 1;
          ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:116:5: 'false' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:117:5: 'false' can't be used as an identifier because it's a keyword.
 int false(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:121:5: 'final' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:122:5: 'final' can't be used as an identifier because it's a keyword.
 int final(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:123:10: Expected an identifier, but got 'final'.
+parser/error_recovery/keyword_named_top_level_methods:124:10: Expected an identifier, but got 'final'.
   return final(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:123:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:124:3: Expected ';' after this.
   return final(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:123:15: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_top_level_methods:124:15: Expected an identifier, but got '('.
   return final(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:15: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:124:15: Expected ';' after this.
   return final(x-1) + 1;
               ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:18: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:124:18: Expected ';' after this.
   return final(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:19: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_top_level_methods:124:19: Expected an identifier, but got ')'.
   return final(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:18: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:124:18: Expected ';' after this.
   return final(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:19: Unexpected token ';'.
+parser/error_recovery/keyword_named_top_level_methods:124:19: Unexpected token ';'.
   return final(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_top_level_methods:123:21: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:124:21: '+' is not a prefix operator.
   return final(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_top_level_methods:126:5: 'finally' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:127:5: 'finally' can't be used as an identifier because it's a keyword.
 int finally(int x) {
     ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:128:10: 'finally' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:129:10: 'finally' can't be used as an identifier because it's a keyword.
   return finally(x-1) + 1;
          ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:131:5: 'for' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:132:5: 'for' can't be used as an identifier because it's a keyword.
 int for(int x) {
     ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:133:10: Expected an identifier, but got 'for'.
+parser/error_recovery/keyword_named_top_level_methods:134:10: Expected an identifier, but got 'for'.
   return for(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:133:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:134:3: Expected ';' after this.
   return for(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:133:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:134:16: Expected ';' after this.
   return for(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_top_level_methods:133:17: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_top_level_methods:134:17: Expected an identifier, but got ')'.
   return for(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:133:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:134:16: Expected ';' after this.
   return for(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_top_level_methods:133:19: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:134:19: '+' is not a prefix operator.
   return for(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_top_level_methods:151:5: 'if' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:152:5: 'if' can't be used as an identifier because it's a keyword.
 int if(int x) {
     ^^
 
-parser/error_recovery/keyword_named_top_level_methods:153:10: Expected an identifier, but got 'if'.
+parser/error_recovery/keyword_named_top_level_methods:154:10: Expected an identifier, but got 'if'.
   return if(x-1) + 1;
          ^^
 
-parser/error_recovery/keyword_named_top_level_methods:153:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:154:3: Expected ';' after this.
   return if(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:153:18: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:154:18: '+' is not a prefix operator.
   return if(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:166:5: 'in' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:167:5: 'in' can't be used as an identifier because it's a keyword.
 int in(int x) {
     ^^
 
-parser/error_recovery/keyword_named_top_level_methods:168:10: 'in' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:169:10: 'in' can't be used as an identifier because it's a keyword.
   return in(x-1) + 1;
          ^^
 
-parser/error_recovery/keyword_named_top_level_methods:181:5: 'is' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:182:5: 'is' can't be used as an identifier because it's a keyword.
 int is(int x) {
     ^^
 
-parser/error_recovery/keyword_named_top_level_methods:183:10: Expected an identifier, but got 'is'.
+parser/error_recovery/keyword_named_top_level_methods:184:10: Expected an identifier, but got 'is'.
   return is(x-1) + 1;
          ^^
 
-parser/error_recovery/keyword_named_top_level_methods:183:14: Expected ')' before this.
+parser/error_recovery/keyword_named_top_level_methods:184:14: Expected ')' before this.
   return is(x-1) + 1;
              ^
 
-parser/error_recovery/keyword_named_top_level_methods:183:16: A record type with exactly one positional field requires a trailing comma.
+parser/error_recovery/keyword_named_top_level_methods:184:16: A record type with exactly one positional field requires a trailing comma.
   return is(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_top_level_methods:183:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:184:16: Expected ';' after this.
   return is(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_top_level_methods:183:18: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:184:18: '+' is not a prefix operator.
   return is(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:206:5: 'new' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:207:5: 'new' can't be used as an identifier because it's a keyword.
 int new(int x) {
     ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:208:13: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_top_level_methods:209:13: Expected an identifier, but got '('.
   return new(x-1) + 1;
             ^
 
-parser/error_recovery/keyword_named_top_level_methods:211:5: 'null' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:212:5: 'null' can't be used as an identifier because it's a keyword.
 int null(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:251:5: 'rethrow' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:252:5: 'rethrow' can't be used as an identifier because it's a keyword.
 int rethrow(int x) {
     ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:253:10: 'rethrow' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:254:10: 'rethrow' can't be used as an identifier because it's a keyword.
   return rethrow(x-1) + 1;
          ^^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:256:5: 'return' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:257:5: 'return' can't be used as an identifier because it's a keyword.
 int return(int x) {
     ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:258:10: Unexpected token 'return'.
+parser/error_recovery/keyword_named_top_level_methods:259:10: Unexpected token 'return'.
   return return(x-1) + 1;
          ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:281:5: 'super' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:282:5: 'super' can't be used as an identifier because it's a keyword.
 int super(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:286:5: 'switch' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:287:5: 'switch' can't be used as an identifier because it's a keyword.
 int switch(int x) {
     ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:288:10: Expected an identifier, but got 'switch'.
+parser/error_recovery/keyword_named_top_level_methods:289:10: Expected an identifier, but got 'switch'.
   return switch(x-1) + 1;
          ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:288:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:289:3: Expected ';' after this.
   return switch(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:288:20: A switch statement must have a body, even if it is empty.
+parser/error_recovery/keyword_named_top_level_methods:289:20: A switch statement must have a body, even if it is empty.
   return switch(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_top_level_methods:288:22: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:289:22: '+' is not a prefix operator.
   return switch(x-1) + 1;
                      ^
 
-parser/error_recovery/keyword_named_top_level_methods:296:5: 'this' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:297:5: 'this' can't be used as an identifier because it's a keyword.
 int this(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:301:5: 'throw' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:302:5: 'throw' can't be used as an identifier because it's a keyword.
 int throw(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:306:5: 'true' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:307:5: 'true' can't be used as an identifier because it's a keyword.
 int true(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:311:5: 'try' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:312:5: 'try' can't be used as an identifier because it's a keyword.
 int try(int x) {
     ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:313:10: Expected an identifier, but got 'try'.
+parser/error_recovery/keyword_named_top_level_methods:314:10: Expected an identifier, but got 'try'.
   return try(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:313:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:314:3: Expected ';' after this.
   return try(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:313:10: A try statement must have a body, even if it is empty.
+parser/error_recovery/keyword_named_top_level_methods:314:10: A try statement must have a body, even if it is empty.
   return try(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:313:10: A try block must be followed by an 'on', 'catch', or 'finally' clause.
+parser/error_recovery/keyword_named_top_level_methods:314:10: A try block must be followed by an 'on', 'catch', or 'finally' clause.
   return try(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:321:5: 'var' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:322:5: 'var' can't be used as an identifier because it's a keyword.
 int var(int x) {
     ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:323:10: Expected an identifier, but got 'var'.
+parser/error_recovery/keyword_named_top_level_methods:324:10: Expected an identifier, but got 'var'.
   return var(x-1) + 1;
          ^^^
 
-parser/error_recovery/keyword_named_top_level_methods:323:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:324:3: Expected ';' after this.
   return var(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:323:13: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_top_level_methods:324:13: Expected an identifier, but got '('.
   return var(x-1) + 1;
             ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:13: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:324:13: Expected ';' after this.
   return var(x-1) + 1;
             ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:324:16: Expected ';' after this.
   return var(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:17: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_top_level_methods:324:17: Expected an identifier, but got ')'.
   return var(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:16: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:324:16: Expected ';' after this.
   return var(x-1) + 1;
                ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:17: Unexpected token ';'.
+parser/error_recovery/keyword_named_top_level_methods:324:17: Unexpected token ';'.
   return var(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:323:19: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:324:19: '+' is not a prefix operator.
   return var(x-1) + 1;
                   ^
 
-parser/error_recovery/keyword_named_top_level_methods:326:5: 'void' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:327:5: 'void' can't be used as an identifier because it's a keyword.
 int void(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:328:10: Expected an identifier, but got 'void'.
+parser/error_recovery/keyword_named_top_level_methods:329:10: Expected an identifier, but got 'void'.
   return void(x-1) + 1;
          ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:328:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:329:3: Expected ';' after this.
   return void(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:328:14: Expected an identifier, but got '('.
+parser/error_recovery/keyword_named_top_level_methods:329:14: Expected an identifier, but got '('.
   return void(x-1) + 1;
              ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:14: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:329:14: Expected ';' after this.
   return void(x-1) + 1;
              ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:17: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:329:17: Expected ';' after this.
   return void(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:18: Expected an identifier, but got ')'.
+parser/error_recovery/keyword_named_top_level_methods:329:18: Expected an identifier, but got ')'.
   return void(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:17: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:329:17: Expected ';' after this.
   return void(x-1) + 1;
                 ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:18: Unexpected token ';'.
+parser/error_recovery/keyword_named_top_level_methods:329:18: Unexpected token ';'.
   return void(x-1) + 1;
                  ^
 
-parser/error_recovery/keyword_named_top_level_methods:328:20: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:329:20: '+' is not a prefix operator.
   return void(x-1) + 1;
                    ^
 
-parser/error_recovery/keyword_named_top_level_methods:331:5: 'while' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:332:5: 'while' can't be used as an identifier because it's a keyword.
 int while(int x) {
     ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:333:10: Expected an identifier, but got 'while'.
+parser/error_recovery/keyword_named_top_level_methods:334:10: Expected an identifier, but got 'while'.
   return while(x-1) + 1;
          ^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:333:3: Expected ';' after this.
+parser/error_recovery/keyword_named_top_level_methods:334:3: Expected ';' after this.
   return while(x-1) + 1;
   ^^^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:333:21: '+' is not a prefix operator.
+parser/error_recovery/keyword_named_top_level_methods:334:21: '+' is not a prefix operator.
   return while(x-1) + 1;
                     ^
 
-parser/error_recovery/keyword_named_top_level_methods:336:5: 'with' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:337:5: 'with' can't be used as an identifier because it's a keyword.
 int with(int x) {
     ^^^^
 
-parser/error_recovery/keyword_named_top_level_methods:338:10: 'with' can't be used as an identifier because it's a keyword.
+parser/error_recovery/keyword_named_top_level_methods:339:10: 'with' can't be used as an identifier because it's a keyword.
   return with(x-1) + 1;
          ^^^^
 
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart
new file mode 100644
index 0000000..bc40039
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart
@@ -0,0 +1,344 @@
+int abstract(int x) {
+  if (x == 0) return 42;
+  return abstract(x-1) + 1;
+}
+
+int as(int x) {
+  if (x == 0) return 42;
+  return as(x-1) + 1;
+}
+
+int assert(int x) {
+  if (x == 0) return 42;
+  return assert(x-1) + 1;
+}
+
+int async(int x) {
+  if (x == 0) return 42;
+  return async(x-1) + 1;
+}
+
+int await(int x) {
+  if (x == 0) return 42;
+  return await(x-1) + 1;
+}
+
+int break(int x) {
+  if (x == 0) return 42;
+  return break(x-1) + 1;
+}
+
+int case(int x) {
+  if (x == 0) return 42;
+  return case(x-1) + 1;
+}
+
+int catch(int x) {
+  if (x == 0) return 42;
+  return catch(x-1) + 1;
+}
+
+int class(int x) {
+  if (x == 0) return 42;
+  return class(x-1) + 1;
+}
+
+int const(int x) {
+  if (x == 0) return 42;
+  return const(x-1) + 1;
+}
+
+int continue(int x) {
+  if (x == 0) return 42;
+  return continue(x-1) + 1;
+}
+
+int covariant(int x) {
+  if (x == 0) return 42;
+  return covariant(x-1) + 1;
+}
+
+int default(int x) {
+  if (x == 0) return 42;
+  return default(x-1) + 1;
+}
+
+int deferred(int x) {
+  if (x == 0) return 42;
+  return deferred(x-1) + 1;
+}
+
+int do(int x) {
+  if (x == 0) return 42;
+  return do(x-1) + 1;
+}
+
+int dynamic(int x) {
+  if (x == 0) return 42;
+  return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+  if (x == 0) return 42;
+  return else(x-1) + 1;
+}
+
+int enum(int x) {
+  if (x == 0) return 42;
+  return enum(x-1) + 1;
+}
+
+int export(int x) {
+  if (x == 0) return 42;
+  return export(x-1) + 1;
+}
+
+int extends(int x) {
+  if (x == 0) return 42;
+  return extends(x-1) + 1;
+}
+
+int extension(int x) {
+  if (x == 0) return 42;
+  return extension(x-1) + 1;
+}
+
+int external(int x) {
+  if (x == 0) return 42;
+  return external(x-1) + 1;
+}
+
+int factory(int x) {
+  if (x == 0) return 42;
+  return factory(x-1) + 1;
+}
+
+int false(int x) {
+  if (x == 0) return 42;
+  return false(x-1) + 1;
+}
+
+int final(int x) {
+  if (x == 0) return 42;
+  return final(x-1) + 1;
+}
+
+int finally(int x) {
+  if (x == 0) return 42;
+  return finally(x-1) + 1;
+}
+
+int for(int x) {
+  if (x == 0) return 42;
+  return for(x-1) + 1;
+}
+
+int Function(int x) {
+  if (x == 0) return 42;
+  return Function(x-1) + 1;
+}
+
+int get(int x) {
+  if (x == 0) return 42;
+  return get(x-1) + 1;
+}
+
+int hide(int x) {
+  if (x == 0) return 42;
+  return hide(x-1) + 1;
+}
+
+int if(int x) {
+  if (x == 0) return 42;
+  return if(x-1) + 1;
+}
+
+int implements(int x) {
+  if (x == 0) return 42;
+  return implements(x-1) + 1;
+}
+
+int import(int x) {
+  if (x == 0) return 42;
+  return import(x-1) + 1;
+}
+
+int in(int x) {
+  if (x == 0) return 42;
+  return in(x-1) + 1;
+}
+
+int inout(int x) {
+  if (x == 0) return 42;
+  return inout(x-1) + 1;
+}
+
+int interface(int x) {
+  if (x == 0) return 42;
+  return interface(x-1) + 1;
+}
+
+int is(int x) {
+  if (x == 0) return 42;
+  return is(x-1) + 1;
+}
+
+int late(int x) {
+  if (x == 0) return 42;
+  return late(x-1) + 1;
+}
+
+int library(int x) {
+  if (x == 0) return 42;
+  return library(x-1) + 1;
+}
+
+int mixin(int x) {
+  if (x == 0) return 42;
+  return mixin(x-1) + 1;
+}
+
+int native(int x) {
+  if (x == 0) return 42;
+  return native(x-1) + 1;
+}
+
+int new(int x) {
+  if (x == 0) return 42;
+  return new(x-1) + 1;
+}
+
+int null(int x) {
+  if (x == 0) return 42;
+  return null(x-1) + 1;
+}
+
+int of(int x) {
+  if (x == 0) return 42;
+  return of(x-1) + 1;
+}
+
+int on(int x) {
+  if (x == 0) return 42;
+  return on(x-1) + 1;
+}
+
+int operator(int x) {
+  if (x == 0) return 42;
+  return operator(x-1) + 1;
+}
+
+int out(int x) {
+  if (x == 0) return 42;
+  return out(x-1) + 1;
+}
+
+int part(int x) {
+  if (x == 0) return 42;
+  return part(x-1) + 1;
+}
+
+int patch(int x) {
+  if (x == 0) return 42;
+  return patch(x-1) + 1;
+}
+
+int required(int x) {
+  if (x == 0) return 42;
+  return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+  if (x == 0) return 42;
+  return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+  if (x == 0) return 42;
+  return return(x-1) + 1;
+}
+
+int set(int x) {
+  if (x == 0) return 42;
+  return set(x-1) + 1;
+}
+
+int show(int x) {
+  if (x == 0) return 42;
+  return show(x-1) + 1;
+}
+
+int source(int x) {
+  if (x == 0) return 42;
+  return source(x-1) + 1;
+}
+
+int static(int x) {
+  if (x == 0) return 42;
+  return static(x-1) + 1;
+}
+
+int super(int x) {
+  if (x == 0) return 42;
+  return super(x-1) + 1;
+}
+
+int switch(int x) {
+  if (x == 0) return 42;
+  return switch(x-1) + 1;
+}
+
+int sync(int x) {
+  if (x == 0) return 42;
+  return sync(x-1) + 1;
+}
+
+int this(int x) {
+  if (x == 0) return 42;
+  return this(x-1) + 1;
+}
+
+int throw(int x) {
+  if (x == 0) return 42;
+  return throw(x-1) + 1;
+}
+
+int true(int x) {
+  if (x == 0) return 42;
+  return true(x-1) + 1;
+}
+
+int try(int x) {
+  if (x == 0) return 42;
+  return try(x-1) + 1;
+}
+
+int typedef(int x) {
+  if (x == 0) return 42;
+  return typedef(x-1) + 1;
+}
+
+int var(int x) {
+  if (x == 0) return 42;
+  return var(x-1) + 1;
+}
+
+int void(int x) {
+  if (x == 0) return 42;
+  return void(x-1) + 1;
+}
+
+int while(int x) {
+  if (x == 0) return 42;
+  return while(x-1) + 1;
+}
+
+int with(int x) {
+  if (x == 0) return 42;
+  return with(x-1) + 1;
+}
+
+int yield(int x) {
+  if (x == 0) return 42;
+  return yield(x-1) + 1;
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.expect
new file mode 100644
index 0000000..2eea34c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.expect
@@ -0,0 +1,4637 @@
+Problems reported:
+
+parser/error_recovery/keyword_named_top_level_methods_2:11:5: 'assert' can't be used as an identifier because it's a keyword.
+int assert(int x) {
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:13:10: `assert` can't be used as an expression.
+  return assert(x-1) + 1;
+         ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:26:5: 'break' can't be used as an identifier because it's a keyword.
+int break(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:28:10: Expected an identifier, but got 'break'.
+  return break(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:28:3: Expected ';' after this.
+  return break(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:28:10: A break statement can't be used outside of a loop or switch statement.
+  return break(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:28:10: Expected ';' after this.
+  return break(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:31:5: 'case' can't be used as an identifier because it's a keyword.
+int case(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:33:10: 'case' can't be used as an identifier because it's a keyword.
+  return case(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:36:5: 'catch' can't be used as an identifier because it's a keyword.
+int catch(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:38:10: 'catch' can't be used as an identifier because it's a keyword.
+  return catch(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:41:5: 'class' can't be used as an identifier because it's a keyword.
+int class(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:43:10: 'class' can't be used as an identifier because it's a keyword.
+  return class(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:46:5: 'const' can't be used as an identifier because it's a keyword.
+int const(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:48:19: A record literal with exactly one positional field requires a trailing comma.
+  return const(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:51:5: 'continue' can't be used as an identifier because it's a keyword.
+int continue(int x) {
+    ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:53:10: Expected an identifier, but got 'continue'.
+  return continue(x-1) + 1;
+         ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:53:3: Expected ';' after this.
+  return continue(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:53:10: A continue statement can't be used outside of a loop or switch statement.
+  return continue(x-1) + 1;
+         ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:53:10: Expected ';' after this.
+  return continue(x-1) + 1;
+         ^^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:61:5: 'default' can't be used as an identifier because it's a keyword.
+int default(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:63:10: 'default' can't be used as an identifier because it's a keyword.
+  return default(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:71:5: 'do' can't be used as an identifier because it's a keyword.
+int do(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:73:10: Expected an identifier, but got 'do'.
+  return do(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:73:3: Expected ';' after this.
+  return do(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:74:1: Expected 'while' before this.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods_2:74:1: Expected to find '('.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods_2:74:1: Expected an identifier, but got '}'.
+}
+^
+
+parser/error_recovery/keyword_named_top_level_methods_2:73:21: Expected ';' after this.
+  return do(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:81:5: 'else' can't be used as an identifier because it's a keyword.
+int else(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:83:10: Expected an identifier, but got 'else'.
+  return else(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:83:3: Expected ';' after this.
+  return else(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:83:10: Expected an identifier, but got 'else'.
+  return else(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:83:3: Expected ';' after this.
+  return else(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:83:10: Unexpected token ';'.
+  return else(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:86:5: 'enum' can't be used as an identifier because it's a keyword.
+int enum(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:88:10: 'enum' can't be used as an identifier because it's a keyword.
+  return enum(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:96:5: 'extends' can't be used as an identifier because it's a keyword.
+int extends(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:98:10: 'extends' can't be used as an identifier because it's a keyword.
+  return extends(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:116:5: 'false' can't be used as an identifier because it's a keyword.
+int false(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:121:5: 'final' can't be used as an identifier because it's a keyword.
+int final(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:10: Expected an identifier, but got 'final'.
+  return final(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:3: Expected ';' after this.
+  return final(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:15: Expected an identifier, but got '('.
+  return final(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:15: Expected ';' after this.
+  return final(x-1) + 1;
+              ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:18: Expected ';' after this.
+  return final(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:19: Expected an identifier, but got ')'.
+  return final(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:18: Expected ';' after this.
+  return final(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:19: Unexpected token ';'.
+  return final(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:123:21: '+' is not a prefix operator.
+  return final(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:126:5: 'finally' can't be used as an identifier because it's a keyword.
+int finally(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:128:10: 'finally' can't be used as an identifier because it's a keyword.
+  return finally(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:131:5: 'for' can't be used as an identifier because it's a keyword.
+int for(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:133:10: Expected an identifier, but got 'for'.
+  return for(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:133:3: Expected ';' after this.
+  return for(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:133:16: Expected ';' after this.
+  return for(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:133:17: Expected an identifier, but got ')'.
+  return for(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:133:16: Expected ';' after this.
+  return for(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:133:19: '+' is not a prefix operator.
+  return for(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:151:5: 'if' can't be used as an identifier because it's a keyword.
+int if(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:153:10: Expected an identifier, but got 'if'.
+  return if(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:153:3: Expected ';' after this.
+  return if(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:153:18: '+' is not a prefix operator.
+  return if(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:166:5: 'in' can't be used as an identifier because it's a keyword.
+int in(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:168:10: 'in' can't be used as an identifier because it's a keyword.
+  return in(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:181:5: 'is' can't be used as an identifier because it's a keyword.
+int is(int x) {
+    ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:183:10: Expected an identifier, but got 'is'.
+  return is(x-1) + 1;
+         ^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:183:14: Expected ')' before this.
+  return is(x-1) + 1;
+             ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:183:16: A record type with exactly one positional field requires a trailing comma.
+  return is(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:183:16: Expected ';' after this.
+  return is(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:183:18: '+' is not a prefix operator.
+  return is(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:206:5: 'new' can't be used as an identifier because it's a keyword.
+int new(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:208:13: Expected an identifier, but got '('.
+  return new(x-1) + 1;
+            ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:211:5: 'null' can't be used as an identifier because it's a keyword.
+int null(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:251:5: 'rethrow' can't be used as an identifier because it's a keyword.
+int rethrow(int x) {
+    ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:253:10: 'rethrow' can't be used as an identifier because it's a keyword.
+  return rethrow(x-1) + 1;
+         ^^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:256:5: 'return' can't be used as an identifier because it's a keyword.
+int return(int x) {
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:258:10: Unexpected token 'return'.
+  return return(x-1) + 1;
+         ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:281:5: 'super' can't be used as an identifier because it's a keyword.
+int super(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:286:5: 'switch' can't be used as an identifier because it's a keyword.
+int switch(int x) {
+    ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:288:20: A switch expression must have a body, even if it is empty.
+  return switch(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:296:5: 'this' can't be used as an identifier because it's a keyword.
+int this(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:301:5: 'throw' can't be used as an identifier because it's a keyword.
+int throw(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:306:5: 'true' can't be used as an identifier because it's a keyword.
+int true(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:311:5: 'try' can't be used as an identifier because it's a keyword.
+int try(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:313:10: Expected an identifier, but got 'try'.
+  return try(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:313:3: Expected ';' after this.
+  return try(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:313:10: A try statement must have a body, even if it is empty.
+  return try(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:313:10: A try block must be followed by an 'on', 'catch', or 'finally' clause.
+  return try(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:321:5: 'var' can't be used as an identifier because it's a keyword.
+int var(int x) {
+    ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:10: Expected an identifier, but got 'var'.
+  return var(x-1) + 1;
+         ^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:3: Expected ';' after this.
+  return var(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:13: Expected an identifier, but got '('.
+  return var(x-1) + 1;
+            ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:13: Expected ';' after this.
+  return var(x-1) + 1;
+            ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:16: Expected ';' after this.
+  return var(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:17: Expected an identifier, but got ')'.
+  return var(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:16: Expected ';' after this.
+  return var(x-1) + 1;
+               ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:17: Unexpected token ';'.
+  return var(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:323:19: '+' is not a prefix operator.
+  return var(x-1) + 1;
+                  ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:326:5: 'void' can't be used as an identifier because it's a keyword.
+int void(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:10: Expected an identifier, but got 'void'.
+  return void(x-1) + 1;
+         ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:3: Expected ';' after this.
+  return void(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:14: Expected an identifier, but got '('.
+  return void(x-1) + 1;
+             ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:14: Expected ';' after this.
+  return void(x-1) + 1;
+             ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:17: Expected ';' after this.
+  return void(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:18: Expected an identifier, but got ')'.
+  return void(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:17: Expected ';' after this.
+  return void(x-1) + 1;
+                ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:18: Unexpected token ';'.
+  return void(x-1) + 1;
+                 ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:328:20: '+' is not a prefix operator.
+  return void(x-1) + 1;
+                   ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:331:5: 'while' can't be used as an identifier because it's a keyword.
+int while(int x) {
+    ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:333:10: Expected an identifier, but got 'while'.
+  return while(x-1) + 1;
+         ^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:333:3: Expected ';' after this.
+  return while(x-1) + 1;
+  ^^^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:333:21: '+' is not a prefix operator.
+  return while(x-1) + 1;
+                    ^
+
+parser/error_recovery/keyword_named_top_level_methods_2:336:5: 'with' can't be used as an identifier because it's a keyword.
+int with(int x) {
+    ^^^^
+
+parser/error_recovery/keyword_named_top_level_methods_2:338:10: 'with' can't be used as an identifier because it's a keyword.
+  return with(x-1) + 1;
+         ^^^^
+
+beginCompilationUnit(int)
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(abstract)
+      handleType(int, null)
+      handleIdentifier(abstract, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(abstract, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(abstract, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(as)
+      handleType(int, null)
+      handleIdentifier(as, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(as, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(as, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(assert)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          beginAssert(assert, Assert.Expression)
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+            handleRecoverableError(AssertAsExpression, assert, assert)
+          endAssert(assert, Assert.Expression, (, null, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(async)
+      handleType(int, null)
+      handleIdentifier(async, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(async, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(async, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(await)
+      handleType(int, null)
+      handleIdentifier(await, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(await, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(await, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(break)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'break'., Try inserting an identifier before 'break'., {lexeme: break}], break, break)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(break)
+          handleNoArguments(break)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(BreakOutsideOfLoop, break, break)
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], break, break)
+        handleBreakStatement(false, break, ;)
+        beginParenthesizedExpressionOrRecordLiteral(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+        endParenthesizedExpression(()
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement((, ;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(case)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(case, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(catch)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(catch, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(class)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(class, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(const)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          beginConstLiteral(()
+            beginParenthesizedExpressionOrRecordLiteral(()
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, x)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-, 1)
+              handleRecoverableError(RecordLiteralOnePositionalFieldNoTrailingComma, ), ))
+            endRecordLiteral((, 1, const)
+          endConstLiteral())
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(continue)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'continue'., Try inserting an identifier before 'continue'., {lexeme: continue}], continue, continue)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(continue)
+          handleNoArguments(continue)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], continue, continue)
+        handleContinueStatement(false, continue, ;)
+        beginParenthesizedExpressionOrRecordLiteral(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+        endParenthesizedExpression(()
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement((, ;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(covariant)
+      handleType(int, null)
+      handleIdentifier(covariant, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(covariant, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(covariant, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(default)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(default, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(deferred)
+      handleType(int, null)
+      handleIdentifier(deferred, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(deferred, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(deferred, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(do)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'do'., Try inserting an identifier before 'do'., {lexeme: do}], do, do)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(do)
+          handleNoArguments(do)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginDoWhileStatement(do)
+          beginDoWhileStatementBody(()
+            beginParenthesizedExpressionOrRecordLiteral(()
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, x)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-, 1)
+            endParenthesizedExpression(()
+            beginBinaryExpression(+)
+              handleLiteralInt(1)
+            endBinaryExpression(+, 1)
+            handleExpressionStatement((, ;)
+          endDoWhileStatementBody(;)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected 'while' before this., null, {string: while}], }, })
+          handleRecoverableError(Message[Template(ExpectedToken), Expected to find '('., null, {string: (}], }, })
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+          handleIdentifier(, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(, )
+          handleParenthesizedCondition((, null, null)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ;, ;)
+        endDoWhileStatement(do, while, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(dynamic)
+      handleType(int, null)
+      handleIdentifier(dynamic, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(dynamic, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(dynamic, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(else)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(else)
+          handleNoArguments(else)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(else)
+        handleNoArguments(else)
+        handleSend(, )
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        handleExpressionStatement(else, ;)
+        handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], else, else)
+        beginParenthesizedExpressionOrRecordLiteral(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+        endParenthesizedExpression(()
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement((, ;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(enum)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(enum, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(export)
+      handleType(int, null)
+      handleIdentifier(export, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(export, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(export, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(extends)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(extends, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(extension)
+      handleType(int, null)
+      handleIdentifier(extension, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(extension, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(extension, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(external)
+      handleType(int, null)
+      handleIdentifier(external, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(external, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(external, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(factory)
+      handleType(int, null)
+      handleIdentifier(factory, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(factory, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(factory, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(false)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleLiteralBool(false)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend((, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(final)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'final'., Try inserting an identifier before 'final'., {lexeme: final}], final, final)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(final)
+          handleNoArguments(final)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginMetadataStar(final)
+        endMetadataStar(0)
+        handleNoType(final)
+        beginVariablesDeclaration((, null, final)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+          handleIdentifier(, localVariableDeclaration)
+          beginInitializedIdentifier()
+            handleNoVariableInitializer()
+          endInitializedIdentifier()
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, x)
+        beginBinaryExpression(-)
+          handleLiteralInt(1)
+        endBinaryExpression(-, 1)
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(x, ;)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, )
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(), ;)
+        handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, )
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement(+, ;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(finally)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(finally, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(for)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'for'., Try inserting an identifier before 'for'., {lexeme: for}], for, for)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(for)
+          handleNoArguments(for)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginForStatement(for)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+          handleForInitializerExpressionStatement(1, false)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+          handleIdentifier(, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+          handleExpressionStatement(), ;)
+          handleForLoopParts(for, (, ;, ;, 0)
+          beginForStatementBody(+)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, )
+            beginBinaryExpression(+)
+              handleLiteralInt(1)
+            endBinaryExpression(+, 1)
+            handleExpressionStatement(+, ;)
+          endForStatementBody(;)
+        endForStatement(;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(Function)
+      handleType(int, null)
+      handleIdentifier(Function, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(Function, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(Function, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(get)
+      handleType(int, null)
+      handleIdentifier(get, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(get, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(get, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(hide)
+      handleType(int, null)
+      handleIdentifier(hide, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(hide, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(hide, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(if)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'if'., Try inserting an identifier before 'if'., {lexeme: if}], if, if)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(if)
+          handleNoArguments(if)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(+)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, )
+            beginBinaryExpression(+)
+              handleLiteralInt(1)
+            endBinaryExpression(+, 1)
+            handleExpressionStatement(+, ;)
+          endThenStatement(+, ;)
+        endIfStatement(if, null, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(int, null)
+      handleIdentifier(implements, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(implements, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(implements, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(import)
+      handleType(int, null)
+      handleIdentifier(import, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(import, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(import, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(in)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(in, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(inout)
+      handleType(int, null)
+      handleIdentifier(inout, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(inout, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(inout, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(interface)
+      handleType(int, null)
+      handleIdentifier(interface, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(interface, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(interface, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(is)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(is)
+          handleNoArguments(is)
+          handleSend(, )
+          beginIsOperatorType(is)
+            beginRecordType(()
+              beginRecordTypeEntry()
+                beginMetadataStar(x)
+                endMetadataStar(0)
+                handleIdentifier(x, typeReference)
+                handleNoTypeArguments(-)
+                handleType(x, null)
+                handleNoName(-)
+              endRecordTypeEntry()
+              handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], -, -)
+              handleRecoverableError(RecordTypeOnePositionalFieldNoTrailingComma, ), ))
+            endRecordType((, null, 1, false)
+          endIsOperatorType(is)
+          handleIsOperator(is, null)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ), ))
+        endReturnStatement(true, return, ;)
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, )
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement(+, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(late)
+      handleType(int, null)
+      handleIdentifier(late, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(late, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(late, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(library)
+      handleType(int, null)
+      handleIdentifier(library, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(library, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(library, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(mixin)
+      handleType(int, null)
+      handleIdentifier(mixin, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(mixin, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(mixin, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(native)
+      handleType(int, null)
+      handleIdentifier(native, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(native, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(native, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(new)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          beginNewExpression(new)
+            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+            handleIdentifier(, constructorReference)
+            beginConstructorReference()
+              handleNoTypeArguments(()
+              handleNoConstructorReferenceContinuationAfterTypeArguments()
+            endConstructorReference(, null, , ConstructorReferenceContext.New)
+            beginArguments(()
+              handleIdentifier(x, expression)
+              handleNoTypeArguments(-)
+              handleNoArguments(-)
+              handleSend(x, x)
+              beginBinaryExpression(-)
+                handleLiteralInt(1)
+              endBinaryExpression(-, 1)
+            endArguments(1, (, ))
+          endNewExpression(new)
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(null)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleLiteralNull(null)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend((, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(of)
+      handleType(int, null)
+      handleIdentifier(of, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(of, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(of, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(on)
+      handleType(int, null)
+      handleIdentifier(on, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(on, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(on, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(operator)
+      handleType(int, null)
+      handleIdentifier(operator, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(operator, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(operator, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(out)
+      handleType(int, null)
+      handleIdentifier(out, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(out, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(out, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(part)
+      handleType(int, null)
+      handleIdentifier(part, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(part, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(part, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(patch)
+      handleType(int, null)
+      handleIdentifier(patch, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(patch, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(patch, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(required)
+      handleType(int, null)
+      handleIdentifier(required, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(required, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(required, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(rethrow)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(rethrow, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(return)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token 'return'., null, {lexeme: return}], return, return)
+          beginParenthesizedExpressionOrRecordLiteral(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endParenthesizedExpression(()
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(set)
+      handleType(int, null)
+      handleIdentifier(set, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(set, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(set, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(show)
+      handleType(int, null)
+      handleIdentifier(show, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(show, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(show, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(source)
+      handleType(int, null)
+      handleIdentifier(source, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(source, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(source, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(static)
+      handleType(int, null)
+      handleIdentifier(static, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(static, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(static, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(super)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleSuperExpression(super, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(super, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(switch)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          beginSwitchExpression(switch)
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+            handleParenthesizedCondition((, null, null)
+            handleRecoverableError(ExpectedSwitchExpressionBody, ), ))
+            beginSwitchExpressionBlock({)
+            endSwitchExpressionBlock(0, {, })
+          endSwitchExpression(switch, })
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(sync)
+      handleType(int, null)
+      handleIdentifier(sync, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(sync, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(sync, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(this)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleThisExpression(this, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(this, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(throw)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          beginParenthesizedExpressionOrRecordLiteral(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endParenthesizedExpression(()
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+          handleThrowExpression(throw, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(true)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleLiteralBool(true)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend((, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(try)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'try'., Try inserting an identifier before 'try'., {lexeme: try}], try, try)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(try)
+          handleNoArguments(try)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginTryStatement(try)
+          handleRecoverableError(ExpectedTryStatementBody, try, try)
+          beginBlock({, BlockKind(try statement))
+          endBlock(0, {, }, BlockKind(try statement))
+          handleRecoverableError(OnlyTry, try, try)
+        endTryStatement(0, try, null, })
+        beginParenthesizedExpressionOrRecordLiteral(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+        endParenthesizedExpression(()
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement((, ;)
+      endBlockFunctionBody(4, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(typedef)
+      handleType(int, null)
+      handleIdentifier(typedef, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(typedef, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(typedef, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(var)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'var'., Try inserting an identifier before 'var'., {lexeme: var}], var, var)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(var)
+          handleNoArguments(var)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        handleNoType(var)
+        beginVariablesDeclaration((, null, var)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+          handleIdentifier(, localVariableDeclaration)
+          beginInitializedIdentifier()
+            handleNoVariableInitializer()
+          endInitializedIdentifier()
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, x)
+        beginBinaryExpression(-)
+          handleLiteralInt(1)
+        endBinaryExpression(-, 1)
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(x, ;)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, )
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(), ;)
+        handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, )
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement(+, ;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(void)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'void'., Try inserting an identifier before 'void'., {lexeme: void}], void, void)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(void)
+          handleNoArguments(void)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        handleVoidKeyword(void)
+        beginVariablesDeclaration((, null, null)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+          handleIdentifier(, localVariableDeclaration)
+          beginInitializedIdentifier()
+            handleNoVariableInitializer()
+          endInitializedIdentifier()
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(-)
+        handleNoArguments(-)
+        handleSend(x, x)
+        beginBinaryExpression(-)
+          handleLiteralInt(1)
+        endBinaryExpression(-, 1)
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(x, ;)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+        handleIdentifier(, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(, )
+        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+        handleExpressionStatement(), ;)
+        handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+        handleRecoverableError(UnsupportedPrefixPlus, +, +)
+        handleIdentifier(, expression)
+        handleNoTypeArguments(+)
+        handleNoArguments(+)
+        handleSend(, )
+        beginBinaryExpression(+)
+          handleLiteralInt(1)
+        endBinaryExpression(+, 1)
+        handleExpressionStatement(+, ;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(while)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'while'., Try inserting an identifier before 'while'., {lexeme: while}], while, while)
+          handleIdentifier(, expression)
+          handleNoTypeArguments(while)
+          handleNoArguments(while)
+          handleSend(, )
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+        endReturnStatement(true, return, ;)
+        beginWhileStatement(while)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(-)
+          handleNoArguments(-)
+          handleSend(x, x)
+          beginBinaryExpression(-)
+            handleLiteralInt(1)
+          endBinaryExpression(-, 1)
+          handleParenthesizedCondition((, null, null)
+          beginWhileStatementBody(+)
+            handleRecoverableError(UnsupportedPrefixPlus, +, +)
+            handleIdentifier(, expression)
+            handleNoTypeArguments(+)
+            handleNoArguments(+)
+            handleSend(, )
+            beginBinaryExpression(+)
+              handleLiteralInt(1)
+            endBinaryExpression(+, 1)
+            handleExpressionStatement(+, ;)
+          endWhileStatementBody(;)
+        endWhileStatement(while, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(with)
+      handleType(int, null)
+      handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleRecoverableError(Message[Template(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, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(with, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(int)
+  endMetadataStar(0)
+  beginTopLevelMember(int)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(int, typeReference)
+      handleNoTypeArguments(yield)
+      handleType(int, null)
+      handleIdentifier(yield, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginIfStatement(if)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(==)
+          handleNoArguments(==)
+          handleSend(x, x)
+          beginBinaryExpression(==)
+            handleLiteralInt(0)
+          endBinaryExpression(==, 0)
+          handleParenthesizedCondition((, null, null)
+          beginThenStatement(return)
+            beginReturnStatement(return)
+              handleLiteralInt(42)
+            endReturnStatement(true, return, ;)
+          endThenStatement(return, ;)
+        endIfStatement(if, null, ;)
+        beginReturnStatement(return)
+          handleIdentifier(yield, expression)
+          handleNoTypeArguments(()
+          beginArguments(()
+            handleIdentifier(x, expression)
+            handleNoTypeArguments(-)
+            handleNoArguments(-)
+            handleSend(x, x)
+            beginBinaryExpression(-)
+              handleLiteralInt(1)
+            endBinaryExpression(-, 1)
+          endArguments(1, (, ))
+          handleSend(yield, ))
+          beginBinaryExpression(+)
+            handleLiteralInt(1)
+          endBinaryExpression(+, 1)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(int, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.intertwined.expect
new file mode 100644
index 0000000..4d580eb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.intertwined.expect
@@ -0,0 +1,10981 @@
+parseUnit(int)
+  skipErrorTokens(int)
+  listener: beginCompilationUnit(int)
+  syntheticPreviousToken(int)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(, null, null, , SimpleType(), null, abstract, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(abstract)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(abstract, topLevelFunctionDeclaration)
+        parseMethodTypeVar(abstract)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(abstract, abstract, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(abstract, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(abstract)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(abstract, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(abstract)
+                              parseArguments(abstract)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(abstract, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, as, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(as)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(as, topLevelFunctionDeclaration)
+        parseMethodTypeVar(as)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(as, as, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(as, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(as)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(as, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(as)
+                              parseArguments(as)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(as, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(assert)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, assert, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(assert)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(assert, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(assert)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(assert, assert, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(assert, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseAssert(return, Assert.Expression)
+                          listener: beginAssert(assert, Assert.Expression)
+                          parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                parsePrimary((, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                    parseSend((, expression, ConstantPatternContext.none)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          reportRecoverableError(assert, AssertAsExpression)
+                            listener: handleRecoverableError(AssertAsExpression, assert, assert)
+                          listener: endAssert(assert, Assert.Expression, (, null, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, async, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(async)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(async, topLevelFunctionDeclaration)
+        parseMethodTypeVar(async)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(async, async, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(async, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(async)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(async, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(async)
+                              parseArguments(async)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(async, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, await, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(await)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(await, topLevelFunctionDeclaration)
+        parseMethodTypeVar(await)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(await, await, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(await, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(await)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      inPlainSync()
+                      looksLikeAwaitExpression(return, AwaitOrYieldContext.UnaryExpression)
+                        looksLikeExpressionAfterAwaitOrYield(await, AwaitOrYieldContext.UnaryExpression)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(await, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(await)
+                              parseArguments(await)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(await, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(break)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, break, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(break)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(break, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(break)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(break, break, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(break, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(break, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'break'., Try inserting an identifier before 'break'., {lexeme: break}], break, break)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(break)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(break)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, break)
+          parseStatement(;)
+            parseStatementX(;)
+              parseBreakStatement(;)
+                isBreakAllowed()
+                reportRecoverableError(break, BreakOutsideOfLoop)
+                  listener: handleRecoverableError(BreakOutsideOfLoop, break, break)
+                ensureSemicolon(break)
+                  reportRecoverableError(break, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], break, break)
+                  rewriter()
+                listener: handleBreakStatement(false, break, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                ensureCloseParen(1, ()
+                                listener: endParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement((, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(case)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, case, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(case)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(case, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(case)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(case, case, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(case, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(case, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(case)
+                            parseArguments(case)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(case, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(catch)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, catch, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(catch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(catch, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(catch)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(catch, catch, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(catch, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(catch, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(catch)
+                            parseArguments(catch)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(catch, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(class)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, class, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(class)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(class, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(class)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(class, class, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(class, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(class, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(class)
+                            parseArguments(class)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(class, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(const)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, const, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(const)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(const, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(const)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(const, const, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(const, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseConstExpression(return)
+                          listener: beginConstLiteral(()
+                          parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
+                            listener: beginParenthesizedExpressionOrRecordLiteral(()
+                            parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(x, expression)
+                                        listener: handleNoTypeArguments(-)
+                                        parseArgumentsOpt(x)
+                                          listener: handleNoArguments(-)
+                                        listener: handleSend(x, x)
+                                listener: beginBinaryExpression(-)
+                                parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                    parsePrimary(-, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(-)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(-, 1)
+                            ensureCloseParen(1, ()
+                            reportRecoverableError(), RecordLiteralOnePositionalFieldNoTrailingComma)
+                              listener: handleRecoverableError(RecordLiteralOnePositionalFieldNoTrailingComma, ), ))
+                            listener: endRecordLiteral((, 1, const)
+                          listener: endConstLiteral())
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(continue)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, continue, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(continue)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(continue, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(continue)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(continue, continue, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(continue, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(continue, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'continue'., Try inserting an identifier before 'continue'., {lexeme: continue}], continue, continue)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(continue)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(continue)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, continue)
+          parseStatement(;)
+            parseStatementX(;)
+              parseContinueStatement(;)
+                isContinueAllowed()
+                reportRecoverableError(continue, ContinueOutsideOfLoop)
+                  listener: handleRecoverableError(ContinueOutsideOfLoop, continue, continue)
+                ensureSemicolon(continue)
+                  reportRecoverableError(continue, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], continue, continue)
+                  rewriter()
+                listener: handleContinueStatement(false, continue, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                ensureCloseParen(1, ()
+                                listener: endParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement((, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, covariant, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(covariant)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(covariant, topLevelFunctionDeclaration)
+        parseMethodTypeVar(covariant)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(covariant, covariant, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(covariant, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(covariant)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(covariant, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(covariant)
+                              parseArguments(covariant)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(covariant, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(default)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, default, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(default)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(default, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(default)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(default, default, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(default, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(default, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(default)
+                            parseArguments(default)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(default, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, deferred, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(deferred)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(deferred, topLevelFunctionDeclaration)
+        parseMethodTypeVar(deferred)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(deferred, deferred, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(deferred, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(deferred)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(deferred, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(deferred)
+                              parseArguments(deferred)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(deferred, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(do)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, do, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(do)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(do, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(do)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(do, do, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(do, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(do, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'do'., Try inserting an identifier before 'do'., {lexeme: do}], do, do)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(do)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(do)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, do)
+          parseStatement(;)
+            parseStatementX(;)
+              parseDoWhileStatement(;)
+                listener: beginDoWhileStatement(do)
+                listener: beginDoWhileStatementBody(()
+                parseStatement(do)
+                  parseStatementX(do)
+                    parseExpressionStatementOrDeclaration(do, null)
+                      parseExpressionStatementOrDeclarationAfterModifiers(do, do, null, null, null, null)
+                        looksLikeLocalFunction(()
+                        parseExpressionStatement(do)
+                          parseExpression(do)
+                            looksLikeOuterPatternEquals(do)
+                              skipOuterPattern(do)
+                            parsePrecedenceExpression(do, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(do, true, ConstantPatternContext.none)
+                                parsePrimary(do, expression, ConstantPatternContext.none)
+                                  parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(do, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionOrRecordLiteral(do, null, ConstantPatternContext.none)
+                                      listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                      parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(x)
+                                        parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                          parseUnaryExpression((, true, ConstantPatternContext.none)
+                                            parsePrimary((, expression, ConstantPatternContext.none)
+                                              parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                parseSend((, expression, ConstantPatternContext.none)
+                                                  ensureIdentifier((, expression)
+                                                    listener: handleIdentifier(x, expression)
+                                                  listener: handleNoTypeArguments(-)
+                                                  parseArgumentsOpt(x)
+                                                    listener: handleNoArguments(-)
+                                                  listener: handleSend(x, x)
+                                          listener: beginBinaryExpression(-)
+                                          parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                            parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                              parsePrimary(-, expression, ConstantPatternContext.none)
+                                                parseLiteralInt(-)
+                                                  listener: handleLiteralInt(1)
+                                          listener: endBinaryExpression(-, 1)
+                                      ensureCloseParen(1, ()
+                                      listener: endParenthesizedExpression(()
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                  parsePrimary(+, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+, 1)
+                          ensureSemicolon(1)
+                          listener: handleExpressionStatement((, ;)
+                listener: endDoWhileStatementBody(;)
+                reportRecoverableError(}, Message[Template(ExpectedButGot), Expected 'while' before this., null, {string: while}])
+                  listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected 'while' before this., null, {string: while}], }, })
+                rewriter()
+                ensureParenthesizedCondition(while, allowCase: false)
+                  reportRecoverableError(}, Message[Template(ExpectedToken), Expected to find '('., null, {string: (}])
+                    listener: handleRecoverableError(Message[Template(ExpectedToken), Expected to find '('., null, {string: (}], }, })
+                  rewriter()
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSend((, expression, ConstantPatternContext.none)
+                              ensureIdentifier((, expression)
+                                reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '}'., Try inserting an identifier before '}'., {lexeme: }}], }, })
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, )
+                    ensureCloseParen(, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                ensureSemicolon())
+                  reportRecoverableError(;, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ;, ;)
+                  rewriter()
+                listener: endDoWhileStatement(do, while, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, dynamic, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(dynamic)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(dynamic, topLevelFunctionDeclaration)
+        parseMethodTypeVar(dynamic)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(dynamic, dynamic, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(dynamic, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(dynamic)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(dynamic, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(dynamic)
+                              parseArguments(dynamic)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(dynamic, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(else)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, else, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(else)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(else, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(else)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(else, else, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(else, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(else, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(else)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(else)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, else)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(else)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            inPlainSync()
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(else, Template(ExpectedIdentifier))
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments(else)
+                              parseArgumentsOpt()
+                                listener: handleNoArguments(else)
+                              listener: handleSend(, )
+                    ensureSemicolon()
+                      reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                      rewriter()
+                    listener: handleExpressionStatement(else, ;)
+          reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+            listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], else, else)
+          notEofOrType(CLOSE_CURLY_BRACKET, ()
+          parseStatement(else)
+            parseStatementX(else)
+              parseExpressionStatementOrDeclaration(else, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(else, else, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(else)
+                    parseExpression(else)
+                      looksLikeOuterPatternEquals(else)
+                        skipOuterPattern(else)
+                      parsePrecedenceExpression(else, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(else, true, ConstantPatternContext.none)
+                          parsePrimary(else, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(else, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(else, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                ensureCloseParen(1, ()
+                                listener: endParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement((, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(enum)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, enum, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(enum)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(enum, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(enum)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(enum, enum, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(enum, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(enum, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(enum)
+                            parseArguments(enum)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(enum, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, export, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(export)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(export, topLevelFunctionDeclaration)
+        parseMethodTypeVar(export)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(export, export, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(export, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(export)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(export, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(export)
+                              parseArguments(export)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(export, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(extends)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, extends, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(extends)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(extends, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(extends)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(extends, extends, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(extends, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(extends, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(extends)
+                            parseArguments(extends)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(extends, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, extension, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(extension)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(extension, topLevelFunctionDeclaration)
+        parseMethodTypeVar(extension)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(extension, extension, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(extension, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(extension)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(extension, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(extension)
+                              parseArguments(extension)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(extension, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, external, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(external)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(external, topLevelFunctionDeclaration)
+        parseMethodTypeVar(external)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(external, external, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(external, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(external)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(external, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(external)
+                              parseArguments(external)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(external, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, factory, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(factory)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(factory, topLevelFunctionDeclaration)
+        parseMethodTypeVar(factory)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(factory, factory, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(factory, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(factory)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(factory, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(factory)
+                              parseArguments(factory)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(factory, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(false)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, false, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(false)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(false, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(false)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(false, false, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(false, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseLiteralBool(return)
+                          listener: handleLiteralBool(false)
+                    parseArgumentOrIndexStar(false, NoTypeParamOrArg(), false)
+                      listener: handleNoTypeArguments(()
+                      parseArguments(false)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          allowedToShortcutParseExpression()
+                          parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                parsePrimary((, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                    parseSend((, expression, ConstantPatternContext.none)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          listener: endArguments(1, (, ))
+                      listener: handleSend((, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(final)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, final, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(final)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(final, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(final)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(final, final, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(final, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(final, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'final'., Try inserting an identifier before 'final'., {lexeme: final}], final, final)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(final)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(final)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, final)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, null)
+                skipOuterPattern(final)
+                looksLikeLocalFunction(()
+                listener: beginMetadataStar(final)
+                listener: endMetadataStar(0)
+                listener: handleNoType(final)
+                listener: beginVariablesDeclaration((, null, final)
+                parseVariablesDeclarationRest(final, true)
+                  parseOptionallyInitializedIdentifier(final)
+                    ensureIdentifier(final, localVariableDeclaration)
+                      reportRecoverableErrorWithToken((, Template(ExpectedIdentifier))
+                        listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                      rewriter()
+                      listener: handleIdentifier(, localVariableDeclaration)
+                    listener: beginInitializedIdentifier()
+                    parseVariableInitializerOpt()
+                      listener: handleNoVariableInitializer()
+                    listener: endInitializedIdentifier()
+                  ensureSemicolon()
+                    reportRecoverableError((, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, x)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(x)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(x)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, x)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                          parsePrimary(-, expression, ConstantPatternContext.none)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-, 1)
+                  ensureSemicolon(1)
+                    reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                    rewriter()
+                  listener: handleExpressionStatement(x, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ))
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction())
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, )
+                    ensureSemicolon()
+                      reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                      rewriter()
+                    listener: handleExpressionStatement(), ;)
+          reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+            listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+          notEofOrType(CLOSE_CURLY_BRACKET, +)
+          parseStatement())
+            parseStatementX())
+              parseExpressionStatementOrDeclaration(), null)
+                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement())
+                    parseExpression())
+                      looksLikeOuterPatternEquals())
+                        skipOuterPattern())
+                      parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(), true, ConstantPatternContext.none)
+                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(), expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                              parseSend(), expression, ConstantPatternContext.none)
+                                ensureIdentifier(), expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, )
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(+, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(finally)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, finally, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(finally)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(finally, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(finally)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(finally, finally, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(finally, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(finally, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(finally)
+                            parseArguments(finally)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(finally, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(for)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, for, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(for)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(for, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(for)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(for, for, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(for, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(for, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'for'., Try inserting an identifier before 'for'., {lexeme: for}], for, for)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(for)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(for)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, for)
+          parseStatement(;)
+            parseStatementX(;)
+              parseForStatement(;, null)
+                listener: beginForStatement(for)
+                parseForLoopPartsStart(null, for, ForPartsContext(null))
+                  parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                    parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, ForPartsContext(null))
+                parseForLoopPartsMid((, null, for)
+                  parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
+                        skipObjectPatternRest(x)
+                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                        parsePrimary((, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                            parseSend((, expression, ConstantPatternContext.none)
+                              ensureIdentifier((, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, x)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                          parsePrimary(-, expression, ConstantPatternContext.none)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-, 1)
+                  listener: handleForInitializerExpressionStatement(1, false)
+                parseForRest(null, 1, for)
+                  parseForLoopPartsRest(1, for, null)
+                    ensureSemicolon(1)
+                      reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                      rewriter()
+                    parseExpressionStatement(;)
+                      parseExpression(;)
+                        looksLikeOuterPatternEquals(;)
+                          skipOuterPattern(;)
+                        parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(;, true, ConstantPatternContext.none)
+                            parsePrimary(;, expression, ConstantPatternContext.none)
+                              parseSend(;, expression, ConstantPatternContext.none)
+                                ensureIdentifier(;, expression)
+                                  reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                    listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                  rewriter()
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments())
+                                listener: handleSend(, )
+                      ensureSemicolon()
+                        reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                          listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                        rewriter()
+                      listener: handleExpressionStatement(), ;)
+                    listener: handleForLoopParts(for, (, ;, ;, 0)
+                  listener: beginForStatementBody(+)
+                  parseStatement())
+                    parseStatementX())
+                      parseExpressionStatementOrDeclaration(), null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                          looksLikeLocalFunction(+)
+                          parseExpressionStatement())
+                            parseExpression())
+                              looksLikeOuterPatternEquals())
+                                skipOuterPattern())
+                              parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(), true, ConstantPatternContext.none)
+                                  rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                    reportRecoverableError(+, UnsupportedPrefixPlus)
+                                      listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                    rewriter()
+                                  parsePrimary(), expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                      parseSend(), expression, ConstantPatternContext.none)
+                                        ensureIdentifier(), expression)
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(+)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(+)
+                                        listener: handleSend(, )
+                                listener: beginBinaryExpression(+)
+                                parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                    parsePrimary(+, expression, ConstantPatternContext.none)
+                                      parseLiteralInt(+)
+                                        listener: handleLiteralInt(1)
+                                listener: endBinaryExpression(+, 1)
+                            ensureSemicolon(1)
+                            listener: handleExpressionStatement(+, ;)
+                  listener: endForStatementBody(;)
+                  listener: endForStatement(;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, Function, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(Function)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(Function, topLevelFunctionDeclaration)
+        parseMethodTypeVar(Function)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(Function, Function, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(Function, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(Function)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(Function, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(Function)
+                              parseArguments(Function)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(Function, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, get, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(get)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(get, topLevelFunctionDeclaration)
+        parseMethodTypeVar(get)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(get, get, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(get, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(get)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(get, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(get)
+                              parseArguments(get)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(get, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, hide, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(hide)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(hide, topLevelFunctionDeclaration)
+        parseMethodTypeVar(hide)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(hide, hide, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(hide, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(hide)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(hide, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(hide)
+                              parseArguments(hide)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(hide, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(if)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, if, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(if)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(if, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(if)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(if, if, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(if, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(if, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'if'., Try inserting an identifier before 'if'., {lexeme: if}], if, if)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(if)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(if)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement(;)
+            parseStatementX(;)
+              parseIfStatement(;)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(-)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(-)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(-)
+                        parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(-, true, ConstantPatternContext.none)
+                            parsePrimary(-, expression, ConstantPatternContext.none)
+                              parseLiteralInt(-)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(-, 1)
+                    ensureCloseParen(1, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(+)
+                parseStatement())
+                  parseStatementX())
+                    parseExpressionStatementOrDeclaration(), null)
+                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                        looksLikeLocalFunction(+)
+                        parseExpressionStatement())
+                          parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                  reportRecoverableError(+, UnsupportedPrefixPlus)
+                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                  rewriter()
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                    parseSend(), expression, ConstantPatternContext.none)
+                                      ensureIdentifier(), expression)
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(+)
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments(+)
+                                      listener: handleSend(, )
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                  parsePrimary(+, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+, 1)
+                          ensureSemicolon(1)
+                          listener: handleExpressionStatement(+, ;)
+                listener: endThenStatement(+, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, implements, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(implements)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(implements, topLevelFunctionDeclaration)
+        parseMethodTypeVar(implements)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(implements, implements, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(implements, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(implements)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(implements, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(implements)
+                              parseArguments(implements)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(implements, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, import, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(import)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(import, topLevelFunctionDeclaration)
+        parseMethodTypeVar(import)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(import, import, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(import, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(import)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(import, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(import)
+                              parseArguments(import)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(import, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(in)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, in, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(in)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(in, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(in)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(in, in, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(in, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(in, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(in)
+                            parseArguments(in)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(in, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, inout, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(inout)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(inout, topLevelFunctionDeclaration)
+        parseMethodTypeVar(inout)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(inout, inout, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(inout, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(inout)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(inout, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(inout)
+                              parseArguments(inout)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(inout, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, interface, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(interface)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(interface, topLevelFunctionDeclaration)
+        parseMethodTypeVar(interface)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(interface, interface, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(interface, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(interface)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(interface, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(interface)
+                              parseArguments(interface)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(interface, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(is)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, is, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(is)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(is, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(is)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(is, is, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(is, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(is, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(is)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(is)
+                          listener: handleSend(, )
+                    parseIsOperatorRest()
+                      listener: beginIsOperatorType(is)
+                      computeTypeAfterIsOrAs(is)
+                      parseRecordType((, is, false)
+                        listener: beginRecordType(()
+                        parseRecordTypeField((, identifierIsOptional: true)
+                          listener: beginRecordTypeEntry()
+                          parseMetadataStar(()
+                            listener: beginMetadataStar(x)
+                            listener: endMetadataStar(0)
+                          listener: handleIdentifier(x, typeReference)
+                          listener: handleNoTypeArguments(-)
+                          listener: handleType(x, null)
+                          listener: handleNoName(-)
+                          listener: endRecordTypeEntry()
+                        ensureCloseParen(x, ()
+                          reportRecoverableError(-, Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}])
+                            listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], -, -)
+                        reportRecoverableError(), RecordTypeOnePositionalFieldNoTrailingComma)
+                          listener: handleRecoverableError(RecordTypeOnePositionalFieldNoTrailingComma, ), ))
+                        listener: endRecordType((, null, 1, false)
+                      listener: endIsOperatorType(is)
+                      listener: handleIsOperator(is, null)
+                      skipChainedAsIsOperators())
+                ensureSemicolon())
+                  reportRecoverableError(), Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ), ))
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, +)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          rewriteAndRecover(;, UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                              parseSend(;, expression, ConstantPatternContext.none)
+                                ensureIdentifier(;, expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, )
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(+, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, late, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(late)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(late, topLevelFunctionDeclaration)
+        parseMethodTypeVar(late)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(late, late, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(late, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(late)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(late, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(late)
+                              parseArguments(late)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(late, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, library, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(library)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(library, topLevelFunctionDeclaration)
+        parseMethodTypeVar(library)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(library, library, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(library, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(library)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(library, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(library)
+                              parseArguments(library)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(library, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, mixin, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(mixin)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(mixin, topLevelFunctionDeclaration)
+        parseMethodTypeVar(mixin)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(mixin, mixin, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(mixin, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(mixin)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(mixin, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(mixin)
+                              parseArguments(mixin)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(mixin, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, native, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(native)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(native, topLevelFunctionDeclaration)
+        parseMethodTypeVar(native)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(native, native, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(native, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(native)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(native, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(native)
+                              parseArguments(native)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(native, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(new)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, new, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(new)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(new)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(new, new, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(new, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseNewExpression(return)
+                          listener: beginNewExpression(new)
+                          parseConstructorReference(new, ConstructorReferenceContext.New, null)
+                            ensureIdentifier(new, constructorReference)
+                              insertSyntheticIdentifier(new, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], messageOnToken: null)
+                                reportRecoverableError((, Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                                rewriter()
+                              listener: handleIdentifier(, constructorReference)
+                            listener: beginConstructorReference()
+                            parseQualifiedRestOpt(, constructorReferenceContinuation)
+                            listener: handleNoTypeArguments(()
+                            listener: handleNoConstructorReferenceContinuationAfterTypeArguments()
+                            listener: endConstructorReference(, null, , ConstructorReferenceContext.New)
+                          parseConstructorInvocationArguments()
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              allowedToShortcutParseExpression()
+                              parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(x)
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, x)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                      parsePrimary(-, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-, 1)
+                              listener: endArguments(1, (, ))
+                          listener: endNewExpression(new)
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(null)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, null, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(null)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(null, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(null)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(null, null, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(null, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseLiteralNull(return)
+                          listener: handleLiteralNull(null)
+                    parseArgumentOrIndexStar(null, NoTypeParamOrArg(), false)
+                      listener: handleNoTypeArguments(()
+                      parseArguments(null)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          allowedToShortcutParseExpression()
+                          parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                parsePrimary((, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                    parseSend((, expression, ConstantPatternContext.none)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          listener: endArguments(1, (, ))
+                      listener: handleSend((, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, of, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(of)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(of, topLevelFunctionDeclaration)
+        parseMethodTypeVar(of)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(of, of, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(of, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(of)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(of, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(of)
+                              parseArguments(of)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(of, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, on, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(on)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, 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)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(on)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(on, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(on)
+                              parseArguments(on)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(on, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, operator, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(operator)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(operator, topLevelFunctionDeclaration)
+        parseMethodTypeVar(operator)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(operator, operator, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(operator, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(operator)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(operator, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(operator)
+                              parseArguments(operator)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(operator, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, out, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(out)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(out, topLevelFunctionDeclaration)
+        parseMethodTypeVar(out)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(out, out, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(out, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(out)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(out, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(out)
+                              parseArguments(out)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(out, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, part, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(part)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(part, topLevelFunctionDeclaration)
+        parseMethodTypeVar(part)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(part, part, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(part, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(part)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(part, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(part)
+                              parseArguments(part)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(part, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, patch, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(patch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(patch, topLevelFunctionDeclaration)
+        parseMethodTypeVar(patch)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(patch, patch, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(patch, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(patch)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(patch, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(patch)
+                              parseArguments(patch)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(patch, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, required, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(required)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(required, topLevelFunctionDeclaration)
+        parseMethodTypeVar(required)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(required, required, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(required, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(required)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(required, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(required)
+                              parseArguments(required)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(required, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(rethrow)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, rethrow, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(rethrow)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(rethrow, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(rethrow)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(rethrow, rethrow, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(rethrow, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(rethrow, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(rethrow)
+                            parseArguments(rethrow)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(rethrow, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(return)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, return, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(return)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(return, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(return)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(return, return, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(return, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        reportRecoverableErrorWithToken(return, Template(UnexpectedToken))
+                          listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token 'return'., null, {lexeme: return}], return, return)
+                        parsePrimary(return, expression, ConstantPatternContext.none)
+                          parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(return, ConstantPatternContext.none)
+                            parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
+                              listener: beginParenthesizedExpressionOrRecordLiteral(()
+                              parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(x)
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, x)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                      parsePrimary(-, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-, 1)
+                              ensureCloseParen(1, ()
+                              listener: endParenthesizedExpression(()
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, set, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(set)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(set, topLevelFunctionDeclaration)
+        parseMethodTypeVar(set)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(set, set, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(set, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(set)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(set, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(set)
+                              parseArguments(set)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(set, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, show, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(show)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(show, topLevelFunctionDeclaration)
+        parseMethodTypeVar(show)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(show, show, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(show, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(show)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(show, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(show)
+                              parseArguments(show)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(show, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, source, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(source)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(source, topLevelFunctionDeclaration)
+        parseMethodTypeVar(source)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(source, source, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(source, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(source)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(source, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(source)
+                              parseArguments(source)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(source, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, static, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(static)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(static, topLevelFunctionDeclaration)
+        parseMethodTypeVar(static)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(static, static, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(static, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(static)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(static, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(static)
+                              parseArguments(static)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(static, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, super, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(super)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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)
+        parseMethodTypeVar(super)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(super, super, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(super, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseSuperExpression(return, expression)
+                          listener: handleSuperExpression(super, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArguments(super)
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              allowedToShortcutParseExpression()
+                              parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(x)
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, x)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                      parsePrimary(-, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-, 1)
+                              listener: endArguments(1, (, ))
+                          listener: handleSend(super, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(switch)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, switch, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(switch)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(switch, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(switch)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(switch, switch, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(switch, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSwitchExpression(return)
+                          listener: beginSwitchExpression(switch)
+                          ensureParenthesizedCondition(switch, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(x)
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, x)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                      parsePrimary(-, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-, 1)
+                              ensureCloseParen(1, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          ensureBlock(), BlockKind(switch expression))
+                            reportRecoverableError(), ExpectedSwitchExpressionBody)
+                              listener: handleRecoverableError(ExpectedSwitchExpressionBody, ), ))
+                            insertBlock())
+                              rewriter()
+                              rewriter()
+                          listener: beginSwitchExpressionBlock({)
+                          listener: endSwitchExpressionBlock(0, {, })
+                          listener: endSwitchExpression(switch, })
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, sync, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(sync)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(sync, topLevelFunctionDeclaration)
+        parseMethodTypeVar(sync)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(sync, sync, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(sync, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(sync)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(sync, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(sync)
+                              parseArguments(sync)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(sync, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, this, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(this)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(this)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(this, this, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(this, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseThisExpression(return, expression)
+                          listener: handleThisExpression(this, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArguments(this)
+                            parseArgumentsRest(()
+                              listener: beginArguments(()
+                              allowedToShortcutParseExpression()
+                              parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(x)
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(x, expression)
+                                          listener: handleNoTypeArguments(-)
+                                          parseArgumentsOpt(x)
+                                            listener: handleNoArguments(-)
+                                          listener: handleSend(x, x)
+                                  listener: beginBinaryExpression(-)
+                                  parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                      parsePrimary(-, expression, ConstantPatternContext.none)
+                                        parseLiteralInt(-)
+                                          listener: handleLiteralInt(1)
+                                  listener: endBinaryExpression(-, 1)
+                              listener: endArguments(1, (, ))
+                          listener: handleSend(this, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(throw)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, throw, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(throw)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(throw, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(throw)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(throw, throw, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(throw, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parseThrowExpression(return, true)
+                    parseExpression(throw)
+                      looksLikeOuterPatternEquals(throw)
+                        skipOuterPattern(throw)
+                      parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(throw, true, ConstantPatternContext.none)
+                          parsePrimary(throw, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(throw, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(throw, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                ensureCloseParen(1, ()
+                                listener: endParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    listener: handleThrowExpression(throw, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(true)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, true, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(true)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(true, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(true)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(true, true, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(true, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseLiteralBool(return)
+                          listener: handleLiteralBool(true)
+                    parseArgumentOrIndexStar(true, NoTypeParamOrArg(), false)
+                      listener: handleNoTypeArguments(()
+                      parseArguments(true)
+                        parseArgumentsRest(()
+                          listener: beginArguments(()
+                          allowedToShortcutParseExpression()
+                          parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
+                                skipObjectPatternRest(x)
+                            parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression((, true, ConstantPatternContext.none)
+                                parsePrimary((, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                    parseSend((, expression, ConstantPatternContext.none)
+                                      ensureIdentifier((, expression)
+                                        listener: handleIdentifier(x, expression)
+                                      listener: handleNoTypeArguments(-)
+                                      parseArgumentsOpt(x)
+                                        listener: handleNoArguments(-)
+                                      listener: handleSend(x, x)
+                              listener: beginBinaryExpression(-)
+                              parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(-)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(-, 1)
+                          listener: endArguments(1, (, ))
+                      listener: handleSend((, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(try)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, try, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(try)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(try, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(try)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(try, try, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(try, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(try, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'try'., Try inserting an identifier before 'try'., {lexeme: try}], try, try)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(try)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(try)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, try)
+          parseStatement(;)
+            parseStatementX(;)
+              parseTryStatement(;)
+                listener: beginTryStatement(try)
+                parseBlock(try, BlockKind(try statement))
+                  ensureBlock(try, BlockKind(try statement))
+                    reportRecoverableError(try, ExpectedTryStatementBody)
+                      listener: handleRecoverableError(ExpectedTryStatementBody, try, try)
+                    insertBlock(try)
+                      rewriter()
+                      rewriter()
+                  listener: beginBlock({, BlockKind(try statement))
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlock(0, {, }, BlockKind(try statement))
+                reportRecoverableError(try, OnlyTry)
+                  listener: handleRecoverableError(OnlyTry, try, try)
+                listener: endTryStatement(0, try, null, })
+          notEofOrType(CLOSE_CURLY_BRACKET, ()
+          parseStatement(})
+            parseStatementX(})
+              parseExpressionStatementOrDeclaration(}, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(})
+                    parseExpression(})
+                      looksLikeOuterPatternEquals(})
+                        skipOuterPattern(})
+                      parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(}, true, ConstantPatternContext.none)
+                          parsePrimary(}, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(}, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(}, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                ensureCloseParen(1, ()
+                                listener: endParenthesizedExpression(()
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement((, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(4, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, typedef, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(typedef)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(typedef, topLevelFunctionDeclaration)
+        parseMethodTypeVar(typedef)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(typedef, typedef, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(typedef, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(typedef)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(typedef, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(typedef)
+                              parseArguments(typedef)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(typedef, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(var)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, var, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(var)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(var, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(var)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(var, var, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(var, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(var, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'var'., Try inserting an identifier before 'var'., {lexeme: var}], var, var)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(var)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(var)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, var)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                looksLikeLocalFunction(()
+                listener: beginMetadataStar(var)
+                listener: endMetadataStar(0)
+                listener: handleNoType(var)
+                listener: beginVariablesDeclaration((, null, var)
+                parseVariablesDeclarationRest(var, true)
+                  parseOptionallyInitializedIdentifier(var)
+                    ensureIdentifier(var, localVariableDeclaration)
+                      reportRecoverableErrorWithToken((, Template(ExpectedIdentifier))
+                        listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                      rewriter()
+                      listener: handleIdentifier(, localVariableDeclaration)
+                    listener: beginInitializedIdentifier()
+                    parseVariableInitializerOpt()
+                      listener: handleNoVariableInitializer()
+                    listener: endInitializedIdentifier()
+                  ensureSemicolon()
+                    reportRecoverableError((, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, x)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(x)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(x)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, x)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                          parsePrimary(-, expression, ConstantPatternContext.none)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-, 1)
+                  ensureSemicolon(1)
+                    reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                    rewriter()
+                  listener: handleExpressionStatement(x, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ))
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction())
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, )
+                    ensureSemicolon()
+                      reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                      rewriter()
+                    listener: handleExpressionStatement(), ;)
+          reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+            listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+          notEofOrType(CLOSE_CURLY_BRACKET, +)
+          parseStatement())
+            parseStatementX())
+              parseExpressionStatementOrDeclaration(), null)
+                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement())
+                    parseExpression())
+                      looksLikeOuterPatternEquals())
+                        skipOuterPattern())
+                      parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(), true, ConstantPatternContext.none)
+                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(), expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                              parseSend(), expression, ConstantPatternContext.none)
+                                ensureIdentifier(), expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, )
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(+, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(void)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, void, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(void)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(void, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(void)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(void, void, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(void, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              reportRecoverableErrorWithToken(void, Template(ExpectedIdentifier))
+                                listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'void'., Try inserting an identifier before 'void'., {lexeme: void}], void, void)
+                              rewriter()
+                              listener: handleIdentifier(, expression)
+                            listener: handleNoTypeArguments(void)
+                            parseArgumentsOpt()
+                              listener: handleNoArguments(void)
+                            listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, void)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  listener: beginMetadataStar(void)
+                  listener: endMetadataStar(0)
+                  listener: handleVoidKeyword(void)
+                  listener: beginVariablesDeclaration((, null, null)
+                  parseVariablesDeclarationRest(void, true)
+                    parseOptionallyInitializedIdentifier(void)
+                      ensureIdentifier(void, localVariableDeclaration)
+                        reportRecoverableErrorWithToken((, Template(ExpectedIdentifier))
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+                        rewriter()
+                        listener: handleIdentifier(, localVariableDeclaration)
+                      listener: beginInitializedIdentifier()
+                      parseVariableInitializerOpt()
+                        listener: handleNoVariableInitializer()
+                      listener: endInitializedIdentifier()
+                    ensureSemicolon()
+                      reportRecoverableError((, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], (, ()
+                      rewriter()
+                    listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, x)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(x)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(x)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(x, expression)
+                              listener: handleNoTypeArguments(-)
+                              parseArgumentsOpt(x)
+                                listener: handleNoArguments(-)
+                              listener: handleSend(x, x)
+                      listener: beginBinaryExpression(-)
+                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                          parsePrimary(-, expression, ConstantPatternContext.none)
+                            parseLiteralInt(-)
+                              listener: handleLiteralInt(1)
+                      listener: endBinaryExpression(-, 1)
+                  ensureSemicolon(1)
+                    reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                    rewriter()
+                  listener: handleExpressionStatement(x, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ))
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction())
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                  listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                rewriter()
+                                listener: handleIdentifier(, expression)
+                              listener: handleNoTypeArguments())
+                              parseArgumentsOpt()
+                                listener: handleNoArguments())
+                              listener: handleSend(, )
+                    ensureSemicolon()
+                      reportRecoverableError(1, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                        listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 1, 1)
+                      rewriter()
+                    listener: handleExpressionStatement(), ;)
+          reportRecoverableError(;, Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}])
+            listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ), ))
+          notEofOrType(CLOSE_CURLY_BRACKET, +)
+          parseStatement())
+            parseStatementX())
+              parseExpressionStatementOrDeclaration(), null)
+                parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                  looksLikeLocalFunction(+)
+                  parseExpressionStatement())
+                    parseExpression())
+                      looksLikeOuterPatternEquals())
+                        skipOuterPattern())
+                      parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(), true, ConstantPatternContext.none)
+                          rewriteAndRecover(), UnsupportedPrefixPlus, )
+                            reportRecoverableError(+, UnsupportedPrefixPlus)
+                              listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                            rewriter()
+                          parsePrimary(), expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                              parseSend(), expression, ConstantPatternContext.none)
+                                ensureIdentifier(), expression)
+                                  listener: handleIdentifier(, expression)
+                                listener: handleNoTypeArguments(+)
+                                parseArgumentsOpt()
+                                  listener: handleNoArguments(+)
+                                listener: handleSend(, )
+                        listener: beginBinaryExpression(+)
+                        parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(+, true, ConstantPatternContext.none)
+                            parsePrimary(+, expression, ConstantPatternContext.none)
+                              parseLiteralInt(+)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(+, 1)
+                    ensureSemicolon(1)
+                    listener: handleExpressionStatement(+, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(while)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, while, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(while)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(while, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(while)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(while, while, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(while, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(while, Template(ExpectedIdentifier))
+                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'while'., Try inserting an identifier before 'while'., {lexeme: while}], while, while)
+                            rewriter()
+                            listener: handleIdentifier(, expression)
+                          listener: handleNoTypeArguments(while)
+                          parseArgumentsOpt()
+                            listener: handleNoArguments(while)
+                          listener: handleSend(, )
+                ensureSemicolon()
+                  reportRecoverableError(return, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], return, return)
+                  rewriter()
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, while)
+          parseStatement(;)
+            parseStatementX(;)
+              parseWhileStatement(;)
+                listener: beginWhileStatement(while)
+                ensureParenthesizedCondition(while, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(-)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(-)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(-)
+                        parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                          parseUnaryExpression(-, true, ConstantPatternContext.none)
+                            parsePrimary(-, expression, ConstantPatternContext.none)
+                              parseLiteralInt(-)
+                                listener: handleLiteralInt(1)
+                        listener: endBinaryExpression(-, 1)
+                    ensureCloseParen(1, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginWhileStatementBody(+)
+                parseStatement())
+                  parseStatementX())
+                    parseExpressionStatementOrDeclaration(), null)
+                      parseExpressionStatementOrDeclarationAfterModifiers(), ), null, null, null, null)
+                        looksLikeLocalFunction(+)
+                        parseExpressionStatement())
+                          parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                rewriteAndRecover(), UnsupportedPrefixPlus, )
+                                  reportRecoverableError(+, UnsupportedPrefixPlus)
+                                    listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+                                  rewriter()
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(), expression, ConstantPatternContext.none)
+                                    parseSend(), expression, ConstantPatternContext.none)
+                                      ensureIdentifier(), expression)
+                                        listener: handleIdentifier(, expression)
+                                      listener: handleNoTypeArguments(+)
+                                      parseArgumentsOpt()
+                                        listener: handleNoArguments(+)
+                                      listener: handleSend(, )
+                              listener: beginBinaryExpression(+)
+                              parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                                parseUnaryExpression(+, true, ConstantPatternContext.none)
+                                  parsePrimary(+, expression, ConstantPatternContext.none)
+                                    parseLiteralInt(+)
+                                      listener: handleLiteralInt(1)
+                              listener: endBinaryExpression(+, 1)
+                          ensureSemicolon(1)
+                          listener: handleExpressionStatement(+, ;)
+                listener: endWhileStatementBody(;)
+                listener: endWhileStatement(while, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      isReservedKeyword(with)
+      indicatesMethodOrField(()
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, with, true)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(with)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, true)
+          reportRecoverableErrorWithToken(with, Template(ExpectedIdentifierButGotKeyword))
+            listener: handleRecoverableError(Message[Template(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, topLevelFunctionDeclaration)
+        parseMethodTypeVar(with)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(with, with, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(with, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSend(return, expression, ConstantPatternContext.none)
+                          ensureIdentifier(return, expression)
+                            reportRecoverableErrorWithToken(with, Template(ExpectedIdentifierButGotKeyword))
+                              listener: handleRecoverableError(Message[Template(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, expression)
+                          listener: handleNoTypeArguments(()
+                          parseArgumentsOpt(with)
+                            parseArguments(with)
+                              parseArgumentsRest(()
+                                listener: beginArguments(()
+                                allowedToShortcutParseExpression()
+                                parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(x)
+                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                          parseSend((, expression, ConstantPatternContext.none)
+                                            ensureIdentifier((, expression)
+                                              listener: handleIdentifier(x, expression)
+                                            listener: handleNoTypeArguments(-)
+                                            parseArgumentsOpt(x)
+                                              listener: handleNoArguments(-)
+                                            listener: handleSend(x, x)
+                                    listener: beginBinaryExpression(-)
+                                    parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                        parsePrimary(-, expression, ConstantPatternContext.none)
+                                          parseLiteralInt(-)
+                                            listener: handleLiteralInt(1)
+                                    listener: endBinaryExpression(-, 1)
+                                listener: endArguments(1, (, ))
+                          listener: handleSend(with, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(int)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(int)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, yield, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(int, typeReference)
+        listener: handleNoTypeArguments(yield)
+        listener: handleType(int, null)
+        ensureIdentifierPotentiallyRecovered(int, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(yield, topLevelFunctionDeclaration)
+        parseMethodTypeVar(yield)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(yield, yield, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(yield, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, if)
+          parseStatement({)
+            parseStatementX({)
+              parseIfStatement({)
+                listener: beginIfStatement(if)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(==)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(==)
+                                listener: handleSend(x, x)
+                        listener: beginBinaryExpression(==)
+                        parsePrecedenceExpression(==, 8, true, ConstantPatternContext.none)
+                          parseUnaryExpression(==, true, ConstantPatternContext.none)
+                            parsePrimary(==, expression, ConstantPatternContext.none)
+                              parseLiteralInt(==)
+                                listener: handleLiteralInt(0)
+                        listener: endBinaryExpression(==, 0)
+                    ensureCloseParen(0, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                listener: beginThenStatement(return)
+                parseStatement())
+                  parseStatementX())
+                    parseReturnStatement())
+                      listener: beginReturnStatement(return)
+                      parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
+                        parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(return, true, ConstantPatternContext.none)
+                            parsePrimary(return, expression, ConstantPatternContext.none)
+                              parseLiteralInt(return)
+                                listener: handleLiteralInt(42)
+                      ensureSemicolon(42)
+                      listener: endReturnStatement(true, return, ;)
+                      inGenerator()
+                listener: endThenStatement(return, ;)
+                listener: endIfStatement(if, null, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement(;)
+            parseStatementX(;)
+              parseReturnStatement(;)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(yield)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        inPlainSync()
+                        parseSendOrFunctionLiteral(return, expression, ConstantPatternContext.none)
+                          looksLikeFunctionBody(+)
+                          parseSend(return, expression, ConstantPatternContext.none)
+                            ensureIdentifier(return, expression)
+                              inPlainSync()
+                              listener: handleIdentifier(yield, expression)
+                            listener: handleNoTypeArguments(()
+                            parseArgumentsOpt(yield)
+                              parseArguments(yield)
+                                parseArgumentsRest(()
+                                  listener: beginArguments(()
+                                  allowedToShortcutParseExpression()
+                                  parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
+                                    parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression((, true, ConstantPatternContext.none)
+                                        parsePrimary((, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                            parseSend((, expression, ConstantPatternContext.none)
+                                              ensureIdentifier((, expression)
+                                                listener: handleIdentifier(x, expression)
+                                              listener: handleNoTypeArguments(-)
+                                              parseArgumentsOpt(x)
+                                                listener: handleNoArguments(-)
+                                              listener: handleSend(x, x)
+                                      listener: beginBinaryExpression(-)
+                                      parsePrecedenceExpression(-, 14, true, ConstantPatternContext.none)
+                                        parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                          parsePrimary(-, expression, ConstantPatternContext.none)
+                                            parseLiteralInt(-)
+                                              listener: handleLiteralInt(1)
+                                      listener: endBinaryExpression(-, 1)
+                                  listener: endArguments(1, (, ))
+                            listener: handleSend(yield, ))
+                    listener: beginBinaryExpression(+)
+                    parsePrecedenceExpression(+, 14, true, ConstantPatternContext.none)
+                      parseUnaryExpression(+, true, ConstantPatternContext.none)
+                        parsePrimary(+, expression, ConstantPatternContext.none)
+                          parseLiteralInt(+)
+                            listener: handleLiteralInt(1)
+                    listener: endBinaryExpression(+, 1)
+                ensureSemicolon(1)
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(int, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(int)
+  listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.parser.expect
new file mode 100644
index 0000000..0df2678
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.parser.expect
@@ -0,0 +1,693 @@
+NOTICE: Stream was rewritten by parser!
+
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return *synthetic*;break;(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return *synthetic*;continue;(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return *synthetic*;do(x-1) + 1;
+while(*synthetic*);}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return *synthetic*;*synthetic*;else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return *synthetic*;final(*synthetic*;x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return *synthetic*;for(x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return *synthetic*;if(x-1) *synthetic*+ 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return *synthetic*is(x-1) ;*synthetic*+ 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new*synthetic*(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return switch(x-1) {}+ 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return *synthetic*;try{}(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return *synthetic*;var(*synthetic*;x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return *synthetic*;void(*synthetic*;x-1;*synthetic*;) *synthetic*+ 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return *synthetic*;while(x-1) *synthetic*+ 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+
+
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]break[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]continue[KeywordToken];[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+while[SyntheticKeywordToken]([SyntheticBeginToken][SyntheticStringToken])[SyntheticToken];[SyntheticToken]}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]final[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken]is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] ;[SyntheticToken][SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken][SyntheticStringToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+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]
+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]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]try[KeywordToken]{[SyntheticBeginToken]}[SyntheticToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]var[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]void[KeywordToken]([BeginToken][SyntheticStringToken];[SyntheticToken]x[StringToken]-[SimpleToken]1[StringToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] [SyntheticStringToken];[SyntheticToken]while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] [SyntheticStringToken]+[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.scanner.expect
new file mode 100644
index 0000000..68c7a93
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/keyword_named_top_level_methods_2.dart.scanner.expect
@@ -0,0 +1,691 @@
+int abstract(int x) {
+if (x == 0) return 42;
+return abstract(x-1) + 1;
+}
+
+int as(int x) {
+if (x == 0) return 42;
+return as(x-1) + 1;
+}
+
+int assert(int x) {
+if (x == 0) return 42;
+return assert(x-1) + 1;
+}
+
+int async(int x) {
+if (x == 0) return 42;
+return async(x-1) + 1;
+}
+
+int await(int x) {
+if (x == 0) return 42;
+return await(x-1) + 1;
+}
+
+int break(int x) {
+if (x == 0) return 42;
+return break(x-1) + 1;
+}
+
+int case(int x) {
+if (x == 0) return 42;
+return case(x-1) + 1;
+}
+
+int catch(int x) {
+if (x == 0) return 42;
+return catch(x-1) + 1;
+}
+
+int class(int x) {
+if (x == 0) return 42;
+return class(x-1) + 1;
+}
+
+int const(int x) {
+if (x == 0) return 42;
+return const(x-1) + 1;
+}
+
+int continue(int x) {
+if (x == 0) return 42;
+return continue(x-1) + 1;
+}
+
+int covariant(int x) {
+if (x == 0) return 42;
+return covariant(x-1) + 1;
+}
+
+int default(int x) {
+if (x == 0) return 42;
+return default(x-1) + 1;
+}
+
+int deferred(int x) {
+if (x == 0) return 42;
+return deferred(x-1) + 1;
+}
+
+int do(int x) {
+if (x == 0) return 42;
+return do(x-1) + 1;
+}
+
+int dynamic(int x) {
+if (x == 0) return 42;
+return dynamic(x-1) + 1;
+}
+
+int else(int x) {
+if (x == 0) return 42;
+return else(x-1) + 1;
+}
+
+int enum(int x) {
+if (x == 0) return 42;
+return enum(x-1) + 1;
+}
+
+int export(int x) {
+if (x == 0) return 42;
+return export(x-1) + 1;
+}
+
+int extends(int x) {
+if (x == 0) return 42;
+return extends(x-1) + 1;
+}
+
+int extension(int x) {
+if (x == 0) return 42;
+return extension(x-1) + 1;
+}
+
+int external(int x) {
+if (x == 0) return 42;
+return external(x-1) + 1;
+}
+
+int factory(int x) {
+if (x == 0) return 42;
+return factory(x-1) + 1;
+}
+
+int false(int x) {
+if (x == 0) return 42;
+return false(x-1) + 1;
+}
+
+int final(int x) {
+if (x == 0) return 42;
+return final(x-1) + 1;
+}
+
+int finally(int x) {
+if (x == 0) return 42;
+return finally(x-1) + 1;
+}
+
+int for(int x) {
+if (x == 0) return 42;
+return for(x-1) + 1;
+}
+
+int Function(int x) {
+if (x == 0) return 42;
+return Function(x-1) + 1;
+}
+
+int get(int x) {
+if (x == 0) return 42;
+return get(x-1) + 1;
+}
+
+int hide(int x) {
+if (x == 0) return 42;
+return hide(x-1) + 1;
+}
+
+int if(int x) {
+if (x == 0) return 42;
+return if(x-1) + 1;
+}
+
+int implements(int x) {
+if (x == 0) return 42;
+return implements(x-1) + 1;
+}
+
+int import(int x) {
+if (x == 0) return 42;
+return import(x-1) + 1;
+}
+
+int in(int x) {
+if (x == 0) return 42;
+return in(x-1) + 1;
+}
+
+int inout(int x) {
+if (x == 0) return 42;
+return inout(x-1) + 1;
+}
+
+int interface(int x) {
+if (x == 0) return 42;
+return interface(x-1) + 1;
+}
+
+int is(int x) {
+if (x == 0) return 42;
+return is(x-1) + 1;
+}
+
+int late(int x) {
+if (x == 0) return 42;
+return late(x-1) + 1;
+}
+
+int library(int x) {
+if (x == 0) return 42;
+return library(x-1) + 1;
+}
+
+int mixin(int x) {
+if (x == 0) return 42;
+return mixin(x-1) + 1;
+}
+
+int native(int x) {
+if (x == 0) return 42;
+return native(x-1) + 1;
+}
+
+int new(int x) {
+if (x == 0) return 42;
+return new(x-1) + 1;
+}
+
+int null(int x) {
+if (x == 0) return 42;
+return null(x-1) + 1;
+}
+
+int of(int x) {
+if (x == 0) return 42;
+return of(x-1) + 1;
+}
+
+int on(int x) {
+if (x == 0) return 42;
+return on(x-1) + 1;
+}
+
+int operator(int x) {
+if (x == 0) return 42;
+return operator(x-1) + 1;
+}
+
+int out(int x) {
+if (x == 0) return 42;
+return out(x-1) + 1;
+}
+
+int part(int x) {
+if (x == 0) return 42;
+return part(x-1) + 1;
+}
+
+int patch(int x) {
+if (x == 0) return 42;
+return patch(x-1) + 1;
+}
+
+int required(int x) {
+if (x == 0) return 42;
+return required(x-1) + 1;
+}
+
+int rethrow(int x) {
+if (x == 0) return 42;
+return rethrow(x-1) + 1;
+}
+
+int return(int x) {
+if (x == 0) return 42;
+return return(x-1) + 1;
+}
+
+int set(int x) {
+if (x == 0) return 42;
+return set(x-1) + 1;
+}
+
+int show(int x) {
+if (x == 0) return 42;
+return show(x-1) + 1;
+}
+
+int source(int x) {
+if (x == 0) return 42;
+return source(x-1) + 1;
+}
+
+int static(int x) {
+if (x == 0) return 42;
+return static(x-1) + 1;
+}
+
+int super(int x) {
+if (x == 0) return 42;
+return super(x-1) + 1;
+}
+
+int switch(int x) {
+if (x == 0) return 42;
+return switch(x-1) + 1;
+}
+
+int sync(int x) {
+if (x == 0) return 42;
+return sync(x-1) + 1;
+}
+
+int this(int x) {
+if (x == 0) return 42;
+return this(x-1) + 1;
+}
+
+int throw(int x) {
+if (x == 0) return 42;
+return throw(x-1) + 1;
+}
+
+int true(int x) {
+if (x == 0) return 42;
+return true(x-1) + 1;
+}
+
+int try(int x) {
+if (x == 0) return 42;
+return try(x-1) + 1;
+}
+
+int typedef(int x) {
+if (x == 0) return 42;
+return typedef(x-1) + 1;
+}
+
+int var(int x) {
+if (x == 0) return 42;
+return var(x-1) + 1;
+}
+
+int void(int x) {
+if (x == 0) return 42;
+return void(x-1) + 1;
+}
+
+int while(int x) {
+if (x == 0) return 42;
+return while(x-1) + 1;
+}
+
+int with(int x) {
+if (x == 0) return 42;
+return with(x-1) + 1;
+}
+
+int yield(int x) {
+if (x == 0) return 42;
+return yield(x-1) + 1;
+}
+
+
+int[StringToken] abstract[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] abstract[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] as[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] as[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] assert[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] assert[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] async[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] async[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] await[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] await[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] break[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] break[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] case[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] case[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] catch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] catch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] class[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] class[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] const[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] const[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] continue[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] continue[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] covariant[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] covariant[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] default[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] default[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] deferred[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] deferred[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] do[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] do[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] dynamic[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] dynamic[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] else[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] else[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] enum[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] enum[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] export[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] export[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extends[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extends[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] extension[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] extension[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] external[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] external[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] factory[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] factory[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] false[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] false[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] final[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] final[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] finally[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] finally[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] for[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] for[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] Function[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] Function[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] get[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] get[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] hide[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] hide[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] if[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] if[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] implements[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] implements[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] import[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] import[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] in[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] in[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] inout[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] inout[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] interface[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] interface[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] is[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] is[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] late[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] late[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] library[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] library[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] mixin[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] mixin[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] native[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] native[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] new[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] new[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] null[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] null[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] of[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] of[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] on[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] on[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] operator[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] operator[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] out[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] out[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] part[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] part[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] patch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] patch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] required[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] required[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] rethrow[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] rethrow[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] return[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] return[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] set[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] set[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] show[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] show[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] source[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] source[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] static[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+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]
+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]
+
+int[StringToken] switch[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] switch[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] sync[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] sync[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] this[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] throw[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] throw[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] true[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] true[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] try[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] try[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] typedef[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] typedef[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] var[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] var[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] void[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] void[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] while[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] while[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] with[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] with[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+
+int[StringToken] yield[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]x[StringToken] ==[SimpleToken] 0[StringToken])[SimpleToken] return[KeywordToken] 42[StringToken];[SimpleToken]
+return[KeywordToken] yield[KeywordToken]([BeginToken]x[StringToken]-[SimpleToken]1[StringToken])[SimpleToken] +[SimpleToken] 1[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
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 1bafbb1..d5c4e85 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
@@ -54,7 +54,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(7)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -68,7 +68,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(7)
             endFieldInitializer(=, 7)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -85,7 +85,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(7)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -110,7 +110,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, void, (, null, })
+          endMethod(DeclarationKind.Class, set, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
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 ff73b68..90410b4 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
@@ -35,7 +35,7 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, with, DeclarationKind.Class, C, true)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, with, DeclarationKind.Class, C, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, with, C)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(with)
@@ -61,6 +61,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -69,7 +71,7 @@
                     ensureSemicolon(7)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -91,13 +93,15 @@
                 parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(7)
                   listener: endFieldInitializer(=, 7)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -107,7 +111,7 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(=>)
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, with, DeclarationKind.Class, C, true)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, with, DeclarationKind.Class, C, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, with, C)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -130,6 +134,8 @@
                 parseFunctionBody(with, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -138,7 +144,7 @@
                     ensureSemicolon(7)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -148,7 +154,7 @@
               listener: beginMember()
               isReservedKeyword(with)
               indicatesMethodOrField(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, with, DeclarationKind.Class, C, true)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, with, DeclarationKind.Class, C, true)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, with, C)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, true)
@@ -185,7 +191,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
@@ -221,6 +227,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -251,6 +259,8 @@
         parseFieldInitializerOpt(with, with, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
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 51cb72c..c02478b 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
@@ -27,7 +27,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(7)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -40,7 +40,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(7)
             endFieldInitializer(=, 7)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -56,7 +56,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(7)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -80,7 +80,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(set, void, (, null, })
+          endMethod(DeclarationKind.Class, set, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
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 a572c4b..634019c 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, With, DeclarationKind.Class, C, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, With, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, With, C)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(With)
@@ -57,6 +57,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -65,7 +67,7 @@
                     ensureSemicolon(7)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -83,13 +85,15 @@
                 parseFieldInitializerOpt(With, With, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(7)
                   listener: endFieldInitializer(=, 7)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -97,7 +101,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, With, DeclarationKind.Class, C, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, With, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, With, C)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -118,6 +122,8 @@
                 parseFunctionBody(With, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -126,7 +132,7 @@
                     ensureSemicolon(7)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -134,7 +140,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, With, DeclarationKind.Class, C, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, With, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, With, C)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -169,7 +175,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(set, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
@@ -201,6 +207,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -227,6 +235,8 @@
         parseFieldInitializerOpt(With, With, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
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 c090264..b434da7 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
@@ -70,7 +70,7 @@
             handleIdentifier(foo, fieldDeclaration)
             handleNoFieldInitializer(class)
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], foo, foo)
-          endClassFields(null, null, null, null, null, null, null, 1, foo, ;)
+          endFields(DeclarationKind.Class, 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 427c4c7..b82d697 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
@@ -100,7 +100,7 @@
                   reportRecoverableError(foo, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], foo, foo)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, null, 1, foo, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, foo, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, class)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, M1)
@@ -108,7 +108,7 @@
                 listener: beginMetadataStar(class)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, DeclarationKind.Class, M1)
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, M1)
                 reportAndSkipClassInClass(class)
                   reportRecoverableError(class, ClassInClass)
                     listener: handleRecoverableError(ClassInClass, class, class)
diff --git a/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_1.dart.intertwined.expect
index 000a88d..c8fb93e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_1.dart.intertwined.expect
@@ -66,6 +66,8 @@
                     parseVariableInitializerOpt(b)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_2.dart.intertwined.expect
index 27f302e..1e12bc8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_bad_2.dart.intertwined.expect
@@ -66,6 +66,8 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_ok.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_ok.dart.intertwined.expect
index 1e9cd0c..aa37420 100644
--- a/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_ok.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/missing_identifier_in_type_argument_ok.dart.intertwined.expect
@@ -63,6 +63,8 @@
                     parseVariableInitializerOpt(a)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
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 9bcbabc..adb189b 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -51,6 +53,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -78,6 +82,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -100,6 +106,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -120,6 +128,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -140,6 +150,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -160,6 +172,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -180,6 +194,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -200,6 +216,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -220,6 +238,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -240,6 +260,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -260,6 +282,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -280,6 +304,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -300,6 +326,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -320,6 +348,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -340,6 +370,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -360,6 +392,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -380,6 +414,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -400,6 +436,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -420,6 +458,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -440,6 +480,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -460,6 +502,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -480,6 +524,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -500,6 +546,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -520,6 +568,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -540,6 +590,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -560,6 +612,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -580,6 +634,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -600,6 +656,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -620,6 +678,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -640,6 +700,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -660,6 +722,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -680,6 +744,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -700,6 +766,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -720,6 +788,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -740,6 +810,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -762,6 +834,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -784,6 +858,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -806,6 +882,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -828,6 +906,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -850,6 +930,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -872,6 +954,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -894,6 +978,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -916,6 +1002,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -938,6 +1026,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -960,6 +1050,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -982,6 +1074,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1004,6 +1098,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1026,6 +1122,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1048,6 +1146,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1070,6 +1170,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1092,6 +1194,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1114,6 +1218,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1136,6 +1242,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1158,6 +1266,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1180,6 +1290,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1202,6 +1314,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1224,6 +1338,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1246,6 +1362,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1268,6 +1386,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1290,6 +1410,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1312,6 +1434,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1334,6 +1458,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1356,6 +1482,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1378,6 +1506,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1400,6 +1530,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1422,6 +1554,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1444,6 +1578,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1466,6 +1602,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1488,6 +1626,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1510,6 +1650,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1532,6 +1674,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1554,6 +1698,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1576,6 +1722,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1598,6 +1746,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1620,6 +1770,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1642,6 +1794,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1664,6 +1818,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1686,6 +1842,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1708,6 +1866,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1730,6 +1890,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1752,6 +1914,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1774,6 +1938,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1796,6 +1962,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1818,6 +1986,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1840,6 +2010,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1862,6 +2034,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1884,6 +2058,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1906,6 +2082,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1928,6 +2106,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1950,6 +2130,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1972,6 +2154,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1994,6 +2178,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2016,6 +2202,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2038,6 +2226,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2060,6 +2250,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2082,6 +2274,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2104,6 +2298,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -2126,6 +2322,8 @@
                   looksLikeLocalFunction(#)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
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 a923b36..8885ef0 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
Binary files differ
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/folder.options b/pkg/front_end/parser_testcases/error_recovery/with_outline/folder.options
new file mode 100644
index 0000000..d050950
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/folder.options
@@ -0,0 +1 @@
+--with-outline
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.expect
index ff29347..21be4b2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.expect
@@ -59,7 +59,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -74,7 +74,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -105,7 +105,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -120,7 +120,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.intertwined.expect
index 4c46eda..cce03f9 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -59,9 +59,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -94,9 +96,11 @@
                                 parseStatementX({)
                                   parseIfStatement({)
                                     listener: beginIfStatement(if)
-                                    ensureParenthesizedCondition(if, allowCase: false)
-                                      parseExpressionInParenthesisRest((, allowCase: false)
+                                    ensureParenthesizedCondition(if, allowCase: true)
+                                      parseExpressionInParenthesisRest((, allowCase: true)
                                         parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -134,7 +138,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -142,7 +146,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -165,7 +169,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -202,7 +206,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, bar_method1, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, bar_method1, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method1, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -225,7 +229,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -233,7 +237,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, bar_method2, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, bar_method2, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method2, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -256,7 +260,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.outline.expect
index bd7a9c8..b8bce4c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_01.dart.outline.expect
@@ -1,6 +1,6 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Class: Bar
-Class method: Bar.bar_method1
-Class method: Bar.bar_method2
+Method: Bar.bar_method1
+Method: Bar.bar_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.expect
index f9a507d..6c397eb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.expect
@@ -45,7 +45,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -60,7 +60,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.intertwined.expect
index 0860657..aebcf1e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -59,9 +59,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -95,7 +97,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -103,7 +105,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -126,7 +128,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_02.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.expect
index 6489ba0..60970a8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.expect
@@ -87,7 +87,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -102,7 +102,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -133,7 +133,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -148,7 +148,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.intertwined.expect
index ec34c80..8bb9a8d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -59,9 +59,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -94,9 +96,11 @@
                                 parseStatementX({)
                                   parseIfStatement({)
                                     listener: beginIfStatement(if)
-                                    ensureParenthesizedCondition(if, allowCase: false)
-                                      parseExpressionInParenthesisRest((, allowCase: false)
+                                    ensureParenthesizedCondition(if, allowCase: true)
+                                      parseExpressionInParenthesisRest((, allowCase: true)
                                         parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -129,9 +133,11 @@
                                             parseStatementX({)
                                               parseIfStatement({)
                                                 listener: beginIfStatement(if)
-                                                ensureParenthesizedCondition(if, allowCase: false)
-                                                  parseExpressionInParenthesisRest((, allowCase: false)
+                                                ensureParenthesizedCondition(if, allowCase: true)
+                                                  parseExpressionInParenthesisRest((, allowCase: true)
                                                     parseExpression(()
+                                                      looksLikeOuterPatternEquals(()
+                                                        skipOuterPattern(()
                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -164,9 +170,11 @@
                                                         parseStatementX({)
                                                           parseIfStatement({)
                                                             listener: beginIfStatement(if)
-                                                            ensureParenthesizedCondition(if, allowCase: false)
-                                                              parseExpressionInParenthesisRest((, allowCase: false)
+                                                            ensureParenthesizedCondition(if, allowCase: true)
+                                                              parseExpressionInParenthesisRest((, allowCase: true)
                                                                 parseExpression(()
+                                                                  looksLikeOuterPatternEquals(()
+                                                                    skipOuterPattern(()
                                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -212,7 +220,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -220,7 +228,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -243,7 +251,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -280,7 +288,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, bar_method1, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, bar_method1, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method1, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -303,7 +311,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -311,7 +319,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, bar_method2, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, bar_method2, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method2, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -334,7 +342,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.outline.expect
index bd7a9c8..b8bce4c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_03.dart.outline.expect
@@ -1,6 +1,6 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Class: Bar
-Class method: Bar.bar_method1
-Class method: Bar.bar_method2
+Method: Bar.bar_method1
+Method: Bar.bar_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.expect
index 8d2e050..0699780 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.expect
@@ -96,7 +96,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -111,7 +111,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -142,7 +142,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -157,7 +157,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.intertwined.expect
index a577401..a7f4afb 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -59,9 +59,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -94,9 +96,11 @@
                                 parseStatementX({)
                                   parseIfStatement({)
                                     listener: beginIfStatement(if)
-                                    ensureParenthesizedCondition(if, allowCase: false)
-                                      parseExpressionInParenthesisRest((, allowCase: false)
+                                    ensureParenthesizedCondition(if, allowCase: true)
+                                      parseExpressionInParenthesisRest((, allowCase: true)
                                         parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -129,9 +133,11 @@
                                             parseStatementX({)
                                               parseIfStatement({)
                                                 listener: beginIfStatement(if)
-                                                ensureParenthesizedCondition(if, allowCase: false)
-                                                  parseExpressionInParenthesisRest((, allowCase: false)
+                                                ensureParenthesizedCondition(if, allowCase: true)
+                                                  parseExpressionInParenthesisRest((, allowCase: true)
                                                     parseExpression(()
+                                                      looksLikeOuterPatternEquals(()
+                                                        skipOuterPattern(()
                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -163,6 +169,8 @@
                                                       parseStatement({)
                                                         parseStatementX({)
                                                           parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                                                            skipOuterPattern(var)
+                                                              skipObjectPatternRest(x)
                                                             looksLikeLocalFunction(x)
                                                             listener: beginMetadataStar(var)
                                                             listener: endMetadataStar(0)
@@ -176,18 +184,24 @@
                                                                 parseVariableInitializerOpt(x)
                                                                   listener: beginVariableInitializer(=)
                                                                   parseExpression(=)
+                                                                    looksLikeOuterPatternEquals(=)
+                                                                      skipOuterPattern(=)
                                                                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                                                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                                                                         parsePrimary(=, expression, ConstantPatternContext.none)
                                                                           listener: handleNoTypeArguments({)
                                                                           parseLiteralSetOrMapSuffix(=, null)
                                                                             parseExpression({)
+                                                                              looksLikeOuterPatternEquals({)
+                                                                                skipOuterPattern({)
                                                                               parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                                                 parseUnaryExpression({, true, ConstantPatternContext.none)
                                                                                   parsePrimary({, expression, ConstantPatternContext.none)
                                                                                     parseLiteralInt({)
                                                                                       listener: handleLiteralInt(1)
                                                                             parseExpression(:)
+                                                                              looksLikeOuterPatternEquals(:)
+                                                                                skipOuterPattern(:)
                                                                               parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                                                 parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                                                   parsePrimary(:, expression, ConstantPatternContext.none)
@@ -195,12 +209,16 @@
                                                                                       listener: handleLiteralInt(2)
                                                                             listener: handleLiteralMapEntry(:, ,, null, null)
                                                                             parseExpression(,)
+                                                                              looksLikeOuterPatternEquals(,)
+                                                                                skipOuterPattern(,)
                                                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                                   parsePrimary(,, expression, ConstantPatternContext.none)
                                                                                     parseLiteralInt(,)
                                                                                       listener: handleLiteralInt(3)
                                                                             parseExpression(:)
+                                                                              looksLikeOuterPatternEquals(:)
+                                                                                skipOuterPattern(:)
                                                                               parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                                                 parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                                                   parsePrimary(:, expression, ConstantPatternContext.none)
@@ -229,7 +247,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -237,7 +255,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -260,7 +278,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -297,7 +315,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, bar_method1, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, bar_method1, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method1, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -320,7 +338,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -328,7 +346,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, bar_method2, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, bar_method2, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method2, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -351,7 +369,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.outline.expect
index bd7a9c8..b8bce4c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_04.dart.outline.expect
@@ -1,6 +1,6 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Class: Bar
-Class method: Bar.bar_method1
-Class method: Bar.bar_method2
+Method: Bar.bar_method1
+Method: Bar.bar_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.expect
index b54aafe..b525357 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.expect
@@ -98,7 +98,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -113,7 +113,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -144,7 +144,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -159,7 +159,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.intertwined.expect
index 29e0b6e..efe7715 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -59,9 +59,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -94,9 +96,11 @@
                                 parseStatementX({)
                                   parseIfStatement({)
                                     listener: beginIfStatement(if)
-                                    ensureParenthesizedCondition(if, allowCase: false)
-                                      parseExpressionInParenthesisRest((, allowCase: false)
+                                    ensureParenthesizedCondition(if, allowCase: true)
+                                      parseExpressionInParenthesisRest((, allowCase: true)
                                         parseExpression(()
+                                          looksLikeOuterPatternEquals(()
+                                            skipOuterPattern(()
                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -129,9 +133,11 @@
                                             parseStatementX({)
                                               parseIfStatement({)
                                                 listener: beginIfStatement(if)
-                                                ensureParenthesizedCondition(if, allowCase: false)
-                                                  parseExpressionInParenthesisRest((, allowCase: false)
+                                                ensureParenthesizedCondition(if, allowCase: true)
+                                                  parseExpressionInParenthesisRest((, allowCase: true)
                                                     parseExpression(()
+                                                      looksLikeOuterPatternEquals(()
+                                                        skipOuterPattern(()
                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -163,6 +169,8 @@
                                                       parseStatement({)
                                                         parseStatementX({)
                                                           parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                                                            skipOuterPattern(var)
+                                                              skipObjectPatternRest(x)
                                                             looksLikeLocalFunction(x)
                                                             listener: beginMetadataStar(var)
                                                             listener: endMetadataStar(0)
@@ -176,6 +184,8 @@
                                                                 parseVariableInitializerOpt(x)
                                                                   listener: beginVariableInitializer(=)
                                                                   parseExpression(=)
+                                                                    looksLikeOuterPatternEquals(=)
+                                                                      skipOuterPattern(=)
                                                                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                                                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                                                                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -184,12 +194,16 @@
                                                                             listener: handleNoTypeArguments({)
                                                                             parseLiteralSetOrMapSuffix(const, const)
                                                                               parseExpression({)
+                                                                                looksLikeOuterPatternEquals({)
+                                                                                  skipOuterPattern({)
                                                                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                                                                     parsePrimary({, expression, ConstantPatternContext.none)
                                                                                       parseLiteralInt({)
                                                                                         listener: handleLiteralInt(1)
                                                                               parseExpression(:)
+                                                                                looksLikeOuterPatternEquals(:)
+                                                                                  skipOuterPattern(:)
                                                                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -197,12 +211,16 @@
                                                                                         listener: handleLiteralInt(2)
                                                                               listener: handleLiteralMapEntry(:, ,, null, null)
                                                                               parseExpression(,)
+                                                                                looksLikeOuterPatternEquals(,)
+                                                                                  skipOuterPattern(,)
                                                                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                                     parsePrimary(,, expression, ConstantPatternContext.none)
                                                                                       parseLiteralInt(,)
                                                                                         listener: handleLiteralInt(3)
                                                                               parseExpression(:)
+                                                                                looksLikeOuterPatternEquals(:)
+                                                                                  skipOuterPattern(:)
                                                                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -232,7 +250,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -240,7 +258,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -263,7 +281,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -300,7 +318,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, bar_method1, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, bar_method1, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method1, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -323,7 +341,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -331,7 +349,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, bar_method2, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, bar_method2, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar_method2, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -354,7 +372,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.outline.expect
index bd7a9c8..b8bce4c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_05.dart.outline.expect
@@ -1,6 +1,6 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Class: Bar
-Class method: Bar.bar_method1
-Class method: Bar.bar_method2
+Method: Bar.bar_method1
+Method: Bar.bar_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.expect
index e8ba1d99..260c213 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.expect
@@ -58,7 +58,7 @@
                 endWhileStatementBody(})
               endWhileStatement(while, })
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -73,7 +73,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.intertwined.expect
index 21ed6b9..859104b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -73,6 +73,8 @@
                             parseVariableInitializerOpt(i)
                               listener: beginVariableInitializer(=)
                               parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
                                 parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(=, true, ConstantPatternContext.none)
                                     parsePrimary(=, expression, ConstantPatternContext.none)
@@ -90,6 +92,9 @@
                         ensureParenthesizedCondition(while, allowCase: false)
                           parseExpressionInParenthesisRest((, allowCase: false)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(i)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -122,7 +127,7 @@
                         listener: endWhileStatement(while, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -130,7 +135,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -153,7 +158,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_06.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.expect
index 5346a75..b9f306e 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.expect
@@ -65,7 +65,7 @@
                 endForStatementBody(})
               endForStatement(})
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -80,7 +80,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.intertwined.expect
index a685327..de7f4e7 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -77,6 +77,8 @@
                               parseVariableInitializerOpt(i)
                                 listener: beginVariableInitializer(=)
                                 parseExpression(=)
+                                  looksLikeOuterPatternEquals(=)
+                                    skipOuterPattern(=)
                                   parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(=, true, ConstantPatternContext.none)
                                       parsePrimary(=, expression, ConstantPatternContext.none)
@@ -91,6 +93,9 @@
                             ensureSemicolon(0)
                             parseExpressionStatement(;)
                               parseExpression(;)
+                                looksLikeOuterPatternEquals(;)
+                                  skipOuterPattern(;)
+                                    skipObjectPatternRest(i)
                                 parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(;, true, ConstantPatternContext.none)
                                     parsePrimary(;, expression, ConstantPatternContext.none)
@@ -112,6 +117,9 @@
                               ensureSemicolon(42)
                               listener: handleExpressionStatement(i, ;)
                             parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                                  skipObjectPatternRest(i)
                               parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(;, true, ConstantPatternContext.none)
                                   parsePrimary(;, expression, ConstantPatternContext.none)
@@ -137,7 +145,7 @@
                           listener: endForStatement(})
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -145,7 +153,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -168,7 +176,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_07.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.expect
index 32f7ce7..26c1b5f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.expect
@@ -49,7 +49,7 @@
                 endSwitchBlock(0, {, })
               endSwitchStatement(switch, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -64,7 +64,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.intertwined.expect
index 02918cb5..69fe427 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -74,6 +74,9 @@
                         ensureParenthesizedCondition(switch, allowCase: false)
                           parseExpressionInParenthesisRest((, allowCase: false)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(input)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -95,7 +98,7 @@
                         listener: endSwitchStatement(switch, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -103,7 +106,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -126,7 +129,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_08.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.expect
index 34e71e3..58f5951 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.expect
@@ -66,7 +66,7 @@
                 endElseStatement(else, })
               endIfStatement(if, else, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -81,7 +81,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.intertwined.expect
index 124b7fa..85e3273 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -71,9 +71,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -108,6 +110,9 @@
                                     looksLikeLocalFunction(print)
                                     parseExpressionStatement({)
                                       parseExpression({)
+                                        looksLikeOuterPatternEquals({)
+                                          skipOuterPattern({)
+                                            skipObjectPatternRest(print)
                                         parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression({, true, ConstantPatternContext.none)
                                             parsePrimary({, expression, ConstantPatternContext.none)
@@ -143,7 +148,7 @@
                         listener: endIfStatement(if, else, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -151,7 +156,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -174,7 +179,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_09.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.expect
index 9ecb652..449766f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.expect
@@ -78,7 +78,7 @@
                 endElseStatement(else, })
               endIfStatement(if, else, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -93,7 +93,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.intertwined.expect
index feb3aa5..82f190d 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -71,9 +71,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -108,6 +110,9 @@
                                     looksLikeLocalFunction(print)
                                     parseExpressionStatement({)
                                       parseExpression({)
+                                        looksLikeOuterPatternEquals({)
+                                          skipOuterPattern({)
+                                            skipObjectPatternRest(print)
                                         parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression({, true, ConstantPatternContext.none)
                                             parsePrimary({, expression, ConstantPatternContext.none)
@@ -136,9 +141,11 @@
                           parseStatementX(else)
                             parseIfStatement(else)
                               listener: beginIfStatement(if)
-                              ensureParenthesizedCondition(if, allowCase: false)
-                                parseExpressionInParenthesisRest((, allowCase: false)
+                              ensureParenthesizedCondition(if, allowCase: true)
+                                parseExpressionInParenthesisRest((, allowCase: true)
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -174,7 +181,7 @@
                         listener: endIfStatement(if, else, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -182,7 +189,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -205,7 +212,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_10.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.expect
index 3883531..10d4d37 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.expect
@@ -49,7 +49,7 @@
                 handleRecoverableError(OnlyTry, try, try)
               endTryStatement(0, try, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -64,7 +64,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.intertwined.expect
index 71fc8f8..b479924 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -81,7 +81,7 @@
                         listener: endTryStatement(0, try, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -89,7 +89,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -112,7 +112,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_11.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.expect
index ad8a642..0e9bab8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.expect
@@ -58,7 +58,7 @@
                 handleCatchBlock(null, catch, null)
               endTryStatement(1, try, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -73,7 +73,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.intertwined.expect
index 612b999..8b18158 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -101,7 +101,7 @@
                         listener: endTryStatement(1, try, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -109,7 +109,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -132,7 +132,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_12.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.expect
index fe139ca..9ccefd6 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.expect
@@ -61,7 +61,7 @@
                 handleFinallyBlock(finally)
               endTryStatement(1, try, finally, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -76,7 +76,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.intertwined.expect
index 4e2b98b..dd2e31f 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -107,7 +107,7 @@
                         listener: endTryStatement(1, try, finally, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -115,7 +115,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -138,7 +138,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_13.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.expect
index b4c7141..eb33e74 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.expect
@@ -74,7 +74,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -98,7 +98,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.intertwined.expect
index 40ad79f..2c8c969 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -71,9 +71,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -108,6 +110,9 @@
                                     looksLikeLocalFunction(foo_method2)
                                     parseExpressionStatement({)
                                       parseExpression({)
+                                        looksLikeOuterPatternEquals({)
+                                          skipOuterPattern({)
+                                            skipObjectPatternRest(foo_method2)
                                         parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression({, true, ConstantPatternContext.none)
                                             parsePrimary({, expression, ConstantPatternContext.none)
@@ -123,24 +128,32 @@
                                                         listener: beginArguments(()
                                                         allowedToShortcutParseExpression()
                                                         parseExpression(()
+                                                          looksLikeOuterPatternEquals(()
+                                                            skipOuterPattern(()
                                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                                               parsePrimary((, expression, ConstantPatternContext.none)
                                                                 listener: handleNoTypeArguments({)
                                                                 parseLiteralSetOrMapSuffix((, null)
                                                                   parseExpression({)
+                                                                    looksLikeOuterPatternEquals({)
+                                                                      skipOuterPattern({)
                                                                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                                       parseUnaryExpression({, true, ConstantPatternContext.none)
                                                                         parsePrimary({, expression, ConstantPatternContext.none)
                                                                           parseLiteralInt({)
                                                                             listener: handleLiteralInt(1)
                                                                   parseExpression(,)
+                                                                    looksLikeOuterPatternEquals(,)
+                                                                      skipOuterPattern(,)
                                                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                         parsePrimary(,, expression, ConstantPatternContext.none)
                                                                           parseLiteralInt(,)
                                                                             listener: handleLiteralInt(2)
                                                                   parseExpression(,)
+                                                                    looksLikeOuterPatternEquals(,)
+                                                                      skipOuterPattern(,)
                                                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -160,7 +173,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -168,7 +181,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -203,7 +216,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_14.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.expect
index 6895278..5ed5fcc 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.expect
@@ -54,7 +54,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -128,7 +128,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.intertwined.expect
index 5418464..71f421c 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, foo_method1, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, VoidType(), null, null, foo_method1, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method1, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -71,9 +71,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -107,7 +109,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -115,7 +117,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, foo_method2, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, foo_method2, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo_method2, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -141,9 +143,11 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -282,7 +286,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.outline.expect
index 96af17b..f467bf3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_15.dart.outline.expect
@@ -1,5 +1,5 @@
 Class: Foo
-Class method: Foo.foo_method1
-Class method: Foo.foo_method2
+Method: Foo.foo_method1
+Method: Foo.foo_method2
 Top-level method: toplevel_method1
 Top-level method: toplevel_method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.expect
index 1a3c704..d593917 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.expect
@@ -35,7 +35,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -50,7 +50,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -105,7 +105,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -120,7 +120,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -151,7 +151,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -166,7 +166,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.intertwined.expect
index c9ca8c4..e5969c8 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.intertwined.expect
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, A)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -57,7 +57,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, A)
@@ -66,7 +66,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, A, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, A)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -89,7 +89,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -127,7 +127,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, B, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, B, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, B)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -167,6 +167,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -182,6 +185,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -189,6 +194,8 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString(")
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -212,7 +219,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, B)
@@ -221,7 +228,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, B, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, B, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, B)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -244,7 +251,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -282,7 +289,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, C, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -305,7 +312,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -314,7 +321,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, C, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, C)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -337,7 +344,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.outline.expect
index b45256a..b9091d3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_1.dart.outline.expect
@@ -1,9 +1,9 @@
 Class: A
-Class method: A.method1
-Class method: A.method2
+Method: A.method1
+Method: A.method2
 Class: B
-Class method: B.method1
-Class method: B.method2
+Method: B.method1
+Method: B.method2
 Class: C
-Class method: C.method1
-Class method: C.method2
+Method: C.method1
+Method: C.method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.expect
index e19d388..55c9568 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.expect
@@ -67,7 +67,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -82,7 +82,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -156,7 +156,7 @@
               handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ");", ");")
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -171,7 +171,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -202,7 +202,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -217,7 +217,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.intertwined.expect
index 566f949..8d57ca2 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.intertwined.expect
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, A)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -57,7 +57,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, A)
@@ -66,7 +66,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, A, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, A)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -89,7 +89,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -127,7 +127,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, B, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, B, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, B)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -167,6 +167,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -182,6 +185,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -189,6 +194,8 @@
                                                       parseSingleLiteralString(()
                                                         listener: beginLiteralString(")
                                                         parseExpression(${)
+                                                          looksLikeOuterPatternEquals(${)
+                                                            skipOuterPattern(${)
                                                           parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                               parsePrimary(${, expression, ConstantPatternContext.none)
@@ -212,6 +219,9 @@
                                               rewriter()
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(length)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -229,6 +239,9 @@
                                               rewriter()
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(hello)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -246,6 +259,9 @@
                                               rewriter()
                                             allowedToShortcutParseExpression()
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
+                                                  skipObjectPatternRest(world)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -273,7 +289,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, B)
@@ -282,7 +298,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, B, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, B, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, B)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -305,7 +321,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -343,7 +359,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, C, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -366,7 +382,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -375,7 +391,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, C, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, C)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -398,7 +414,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.outline.expect
index b45256a..b9091d3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_interpolation_2.dart.outline.expect
@@ -1,9 +1,9 @@
 Class: A
-Class method: A.method1
-Class method: A.method2
+Method: A.method1
+Method: A.method2
 Class: B
-Class method: B.method1
-Class method: B.method2
+Method: B.method1
+Method: B.method2
 Class: C
-Class method: C.method1
-Class method: C.method2
+Method: C.method1
+Method: C.method2
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.expect
index a0461fb..3f9e496 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.expect
@@ -39,7 +39,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -54,7 +54,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -103,7 +103,7 @@
               handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], "hello world", "hello world")
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -118,7 +118,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
@@ -149,7 +149,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method1, (, null, })
+          endMethod(DeclarationKind.Class, null, method1, (, null, })
         endMember()
         beginMetadataStar(method2)
         endMetadataStar(0)
@@ -164,7 +164,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, method2, (, null, })
+          endMethod(DeclarationKind.Class, null, method2, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.intertwined.expect
index d6955a5..7c5711b 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.intertwined.expect
@@ -34,7 +34,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, A)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -57,7 +57,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, A)
@@ -66,7 +66,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, A, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, A)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -89,7 +89,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -127,7 +127,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, B, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, B, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, B)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -167,6 +167,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -192,7 +195,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, B)
@@ -201,7 +204,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, B, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, B, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, B)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -224,7 +227,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -262,7 +265,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method1, DeclarationKind.Class, C, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method1, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method1, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -285,7 +288,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method1, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method1, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, method2)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -294,7 +297,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, method2, DeclarationKind.Class, C, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, method2, DeclarationKind.Class, C, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method2, C)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -317,7 +320,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, method2, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, method2, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.outline.expect b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.outline.expect
index b45256a..b9091d3 100644
--- a/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.outline.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/with_outline/typing_string_missing_end_quote.dart.outline.expect
@@ -1,9 +1,9 @@
 Class: A
-Class method: A.method1
-Class method: A.method2
+Method: A.method1
+Method: A.method2
 Class: B
-Class method: B.method1
-Class method: B.method2
+Method: B.method1
+Method: B.method2
 Class: C
-Class method: C.method1
-Class method: C.method2
+Method: C.method1
+Method: C.method2
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 168c8e7..a624d8c 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
@@ -32,6 +32,9 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
+                  skipObjectPatternRest(value)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -55,6 +58,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -105,6 +110,9 @@
               parseYieldStatement({)
                 listener: beginYieldStatement(yield)
                 parseExpression(yield)
+                  looksLikeOuterPatternEquals(yield)
+                    skipOuterPattern(yield)
+                      skipObjectPatternRest(f)
                   parsePrecedenceExpression(yield, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(yield, true, ConstantPatternContext.none)
                       parsePrimary(yield, expression, ConstantPatternContext.none)
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 1d39bbb..be4bcf8 100644
--- a/pkg/front_end/parser_testcases/extension_named_type.dart.expect
+++ b/pkg/front_end/parser_testcases/extension_named_type.dart.expect
@@ -53,7 +53,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(null, method, (, null, })
+          endMethod(DeclarationKind.ExtensionType, null, method, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
     endExtensionTypeDeclaration(extension, null, extension, type, })
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 1ea8b8e..0fa784a 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
@@ -71,7 +71,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, method, DeclarationKind.ExtensionType, on, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, method, DeclarationKind.ExtensionType, on, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, method, on)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -94,7 +94,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(null, method, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, null, method, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
@@ -137,6 +137,9 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
+                  skipObjectPatternRest(type)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -152,6 +155,8 @@
                               listener: beginArguments(()
                               allowedToShortcutParseExpression()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/extensions/const.dart.intertwined.expect b/pkg/front_end/parser_testcases/extensions/const.dart.intertwined.expect
index 27d23c9..94a24f2 100644
--- a/pkg/front_end/parser_testcases/extensions/const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/const.dart.intertwined.expect
@@ -39,8 +39,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(})
       listener: beginTopLevelMember(const)
-      skipOuterPattern(const)
-        skipObjectPatternRest(Extension)
       parseFields(}, null, null, null, null, null, null, const, const, SimpleType(), on, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, })
         listener: handleIdentifier(Extension, typeReference)
diff --git a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
index 8b4e07c0b..7005a48 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.expect
@@ -71,7 +71,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionMethod(null, addChild, (, null, })
+          endMethod(DeclarationKind.Extension, null, addChild, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, extension, on, })
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 cb79021..b6e8250 100644
--- a/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/covariant.dart.intertwined.expect
@@ -85,7 +85,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, addChild, DeclarationKind.Extension, null, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, addChild, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild, null)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -122,7 +122,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionMethod(null, addChild, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, addChild, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
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 7bb8438..ef85623 100644
--- a/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/not_covariant.dart.expect
@@ -64,7 +64,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionMethod(null, addChild, (, null, })
+          endMethod(DeclarationKind.Extension, null, addChild, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, extension, on, })
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 c6c116c..e5ba132 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
@@ -85,7 +85,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, addChild, DeclarationKind.Extension, null, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, addChild, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, addChild, null)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -120,7 +120,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionMethod(null, addChild, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, addChild, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
diff --git a/pkg/front_end/parser_testcases/extensions/static.dart.expect b/pkg/front_end/parser_testcases/extensions/static.dart.expect
index fa3aa3d..5898cca 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.expect
@@ -64,7 +64,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Extension, null, static, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, extension, on, })
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 9db940d..e6d1e17 100644
--- a/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/extensions/static.dart.intertwined.expect
@@ -85,7 +85,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, static, null, null, null, static, NoType(), null, addChild, DeclarationKind.Extension, null, false)
+              parseMethod({, null, null, null, static, null, null, null, static, NoType(), null, null, addChild, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild, null)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
@@ -119,7 +119,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
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 9226339..27dbae8 100644
--- a/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
+++ b/pkg/front_end/parser_testcases/extensions/static_covariant.dart.expect
@@ -71,7 +71,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Extension, null, static, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, extension, on, })
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 a917b9f..62f2127 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
@@ -85,7 +85,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, static, null, null, null, static, NoType(), null, addChild, DeclarationKind.Extension, null, false)
+              parseMethod({, null, null, null, static, null, null, null, static, NoType(), null, null, addChild, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, static, null, null, null, addChild, null)
                 listener: handleNoType(static)
                 ensureIdentifierPotentiallyRecovered(static, methodDeclaration, false)
@@ -121,7 +121,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
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 a01c120..4321bb0 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
@@ -64,6 +64,8 @@
         parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -134,6 +136,8 @@
         parseFieldInitializerOpt(z, z, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -170,9 +174,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
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 ede33db..e88e0f2 100644
--- a/pkg/front_end/parser_testcases/general/assignment.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/assignment.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(foo)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart b/pkg/front_end/parser_testcases/general/augment_super.dart
index ef21ddf..534e5cc 100644
--- a/pkg/front_end/parser_testcases/general/augment_super.dart
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 augment void topLevelMethod() {
   augment super();
 }
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.expect
index 82a3e0d..9eea16c 100644
--- a/pkg/front_end/parser_testcases/general/augment_super.dart.expect
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.expect
@@ -1,170 +1,170 @@
 Problems reported:
 
-parser/general/augment_super:1:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:2:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 augment void topLevelMethod() {
 ^^^^^^^
 
-parser/general/augment_super:1:1: Expected ';' after this.
+parser/general/augment_super:2:1: Expected ';' after this.
 augment void topLevelMethod() {
 ^^^^^^^
 
-parser/general/augment_super:2:11: 'super' can't be used as an identifier because it's a keyword.
+parser/general/augment_super:3:11: 'super' can't be used as an identifier because it's a keyword.
   augment super();
           ^^^^^
 
-parser/general/augment_super:2:11: Expected ';' after this.
+parser/general/augment_super:3:11: Expected ';' after this.
   augment super();
           ^^^^^
 
-parser/general/augment_super:5:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:6:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 augment void topLevelMethodError() {
 ^^^^^^^
 
-parser/general/augment_super:5:1: Expected ';' after this.
+parser/general/augment_super:6:1: Expected ';' after this.
 augment void topLevelMethodError() {
 ^^^^^^^
 
-parser/general/augment_super:6:11: Expected ';' after this.
+parser/general/augment_super:7:11: Expected ';' after this.
   augment int local;
           ^^^
 
-parser/general/augment_super:11:9: A function declaration needs an explicit list of parameters.
+parser/general/augment_super:12:9: A function declaration needs an explicit list of parameters.
 augment List<int> get topLevelProperty {
         ^^^^
 
-parser/general/augment_super:11:19: Expected a function body, but got 'get'.
+parser/general/augment_super:12:19: Expected a function body, but got 'get'.
 augment List<int> get topLevelProperty {
                   ^^^
 
-parser/general/augment_super:12:23: Expected ',' before this.
+parser/general/augment_super:13:23: Expected ',' before this.
   return [... augment super, augment super[0]];
                       ^^^^^
 
-parser/general/augment_super:12:38: Expected ',' before this.
+parser/general/augment_super:13:38: Expected ',' before this.
   return [... augment super, augment super[0]];
                                      ^^^^^
 
-parser/general/augment_super:15:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:16:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 augment void set topLevelProperty(List<int> value) {
 ^^^^^^^
 
-parser/general/augment_super:15:1: Expected ';' after this.
+parser/general/augment_super:16:1: Expected ';' after this.
 augment void set topLevelProperty(List<int> value) {
 ^^^^^^^
 
-parser/general/augment_super:16:11: 'super' can't be used as an identifier because it's a keyword.
-  augment super[0] = value[1];
-          ^^^^^
-
-parser/general/augment_super:16:11: Expected ';' after this.
-  augment super[0] = value[1];
-          ^^^^^
-
 parser/general/augment_super:17:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super:17:11: Expected ';' after this.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super:18:11: 'super' can't be used as an identifier because it's a keyword.
   augment super = value;
           ^^^^^
 
-parser/general/augment_super:21:11: 'super' can't be used as an identifier because it's a keyword.
-  augment super();
-          ^^^^^
-
-parser/general/augment_super:21:11: Expected ';' after this.
-  augment super();
-          ^^^^^
-
 parser/general/augment_super:22:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:22:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super:23:11: 'super' can't be used as an identifier because it's a keyword.
   augment super;
           ^^^^^
 
-parser/general/augment_super:23:11: Expected ';' after this.
+parser/general/augment_super:24:11: Expected ';' after this.
   augment int local;
           ^^^
 
-parser/general/augment_super:27:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:28:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
 augment class Class {
 ^^^^^^^
 
-parser/general/augment_super:27:1: Expected ';' after this.
+parser/general/augment_super:28:1: Expected ';' after this.
 augment class Class {
 ^^^^^^^
 
-parser/general/augment_super:28:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:29:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
   augment void instanceMethod() {
   ^^^^^^^
 
-parser/general/augment_super:28:3: Expected ';' after this.
+parser/general/augment_super:29:3: Expected ';' after this.
   augment void instanceMethod() {
   ^^^^^^^
 
-parser/general/augment_super:29:13: 'super' can't be used as an identifier because it's a keyword.
+parser/general/augment_super:30:13: 'super' can't be used as an identifier because it's a keyword.
     augment super();
             ^^^^^
 
-parser/general/augment_super:29:13: Expected ';' after this.
+parser/general/augment_super:30:13: Expected ';' after this.
     augment super();
             ^^^^^
 
-parser/general/augment_super:32:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:33:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
   augment void instanceMethodErrors() {
   ^^^^^^^
 
-parser/general/augment_super:32:3: Expected ';' after this.
+parser/general/augment_super:33:3: Expected ';' after this.
   augment void instanceMethodErrors() {
   ^^^^^^^
 
-parser/general/augment_super:33:13: Expected ';' after this.
+parser/general/augment_super:34:13: Expected ';' after this.
     augment int local;
             ^^^
 
-parser/general/augment_super:37:11: Expected ';' after this.
+parser/general/augment_super:38:11: Expected ';' after this.
   augment int get instanceProperty {
           ^^^
 
-parser/general/augment_super:38:13: 'super' can't be used as an identifier because it's a keyword.
+parser/general/augment_super:39:13: 'super' can't be used as an identifier because it's a keyword.
     augment super++;
             ^^^^^
 
-parser/general/augment_super:38:13: Expected ';' after this.
+parser/general/augment_super:39:13: Expected ';' after this.
     augment super++;
             ^^^^^
 
-parser/general/augment_super:38:20: Expected an identifier, but got ';'.
+parser/general/augment_super:39:20: Expected an identifier, but got ';'.
     augment super++;
                    ^
 
-parser/general/augment_super:39:7: Expected ';' after this.
+parser/general/augment_super:40:7: Expected ';' after this.
     --augment super;
       ^^^^^^^
 
-parser/general/augment_super:40:13: Expected ';' after this.
+parser/general/augment_super:41:13: Expected ';' after this.
     return -augment super;
             ^^^^^^^
 
-parser/general/augment_super:43:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+parser/general/augment_super:44:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
   augment void set instanceProperty(int value) {
   ^^^^^^^
 
-parser/general/augment_super:43:3: Expected ';' after this.
+parser/general/augment_super:44:3: Expected ';' after this.
   augment void set instanceProperty(int value) {
   ^^^^^^^
 
-parser/general/augment_super:44:13: 'super' can't be used as an identifier because it's a keyword.
+parser/general/augment_super:45:13: 'super' can't be used as an identifier because it's a keyword.
     augment super = value;
             ^^^^^
 
-parser/general/augment_super:48:13: 'super' can't be used as an identifier because it's a keyword.
-    augment super();
-            ^^^^^
-
-parser/general/augment_super:48:13: Expected ';' after this.
-    augment super();
-            ^^^^^
-
 parser/general/augment_super:49:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:49:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super:50:13: 'super' can't be used as an identifier because it's a keyword.
     augment super;
             ^^^^^
 
-parser/general/augment_super:50:13: Expected ';' after this.
+parser/general/augment_super:51:13: Expected ';' after this.
     augment int local;
             ^^^
 
@@ -490,7 +490,7 @@
             handleIdentifier(augment, fieldDeclaration)
             handleNoFieldInitializer(void)
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
-          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -521,7 +521,7 @@
               endRecordLiteral((, 0, null)
               handleExpressionStatement((, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -532,7 +532,7 @@
             handleIdentifier(augment, fieldDeclaration)
             handleNoFieldInitializer(void)
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
-          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -569,7 +569,7 @@
               handleSend(augment, augment)
               handleExpressionStatement(augment, ;)
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -581,7 +581,7 @@
             handleIdentifier(int, fieldDeclaration)
             handleNoFieldInitializer(get)
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
-          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(get)
         endMetadataStar(0)
@@ -634,7 +634,7 @@
               handleSuperExpression(super, expression)
               handleExpressionStatement(super, ;)
             endBlockFunctionBody(6, {, })
-          endClassMethod(get, get, {, null, })
+          endMethod(DeclarationKind.Class, get, get, {, null, })
         endMember()
         beginMetadataStar(augment)
         endMetadataStar(0)
@@ -645,7 +645,7 @@
             handleIdentifier(augment, fieldDeclaration)
             handleNoFieldInitializer(void)
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
-          endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -686,7 +686,7 @@
                 endInitializedIdentifier(super)
               endVariablesDeclaration(1, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(set, void, (, null, })
+          endMethod(DeclarationKind.Class, set, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -751,7 +751,7 @@
               handleSend(augment, augment)
               handleExpressionStatement(augment, ;)
             endBlockFunctionBody(6, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
index f5ff751..4b519e2 100644
--- a/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/augment_super.dart.intertwined.expect
@@ -744,7 +744,7 @@
                   reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -752,7 +752,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, instanceMethod, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, instanceMethod, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -819,7 +819,7 @@
                             listener: handleExpressionStatement((, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -842,7 +842,7 @@
                   reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -850,7 +850,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, instanceMethodErrors, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -937,7 +937,7 @@
                           listener: handleExpressionStatement(augment, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -958,7 +958,7 @@
                   reportRecoverableError(int, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, get)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -966,7 +966,7 @@
                 listener: beginMetadataStar(get)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, instanceProperty, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, null, instanceProperty, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty, Class)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
@@ -1121,7 +1121,7 @@
                             listener: handleExpressionStatement(super, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(get, get, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, get, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, augment)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1144,7 +1144,7 @@
                   reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, null, 1, augment, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -1152,7 +1152,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, instanceProperty, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, instanceProperty, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1223,7 +1223,7 @@
                           listener: endVariablesDeclaration(1, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(set, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, set, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -1231,7 +1231,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod, Class)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -1385,7 +1385,7 @@
                           listener: handleExpressionStatement(augment, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(6, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
diff --git a/pkg/front_end/parser_testcases/general/augment_super_2.dart b/pkg/front_end/parser_testcases/general/augment_super_2.dart
new file mode 100644
index 0000000..ef21ddf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super_2.dart
@@ -0,0 +1,53 @@
+augment void topLevelMethod() {
+  augment super();
+}
+
+augment void topLevelMethodError() {
+  augment int local;
+  augment;
+}
+
+
+augment List<int> get topLevelProperty {
+  return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+  augment super[0] = value[1];
+  augment super = value;
+}
+
+void injectedTopLevelMethod() {
+  augment super();
+  augment super;
+  augment int local;
+  augment;
+}
+
+augment class Class {
+  augment void instanceMethod() {
+    augment super();
+  }
+
+  augment void instanceMethodErrors() {
+    augment int local;
+    augment;
+  }
+
+  augment int get instanceProperty {
+    augment super++;
+    --augment super;
+    return -augment super;
+  }
+
+  augment void set instanceProperty(int value) {
+    augment super = value;
+  }
+
+  void injectedInstanceMethod() {
+    augment super();
+    augment super;
+    augment int local;
+    augment;
+  }
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/general/augment_super_2.dart.expect b/pkg/front_end/parser_testcases/general/augment_super_2.dart.expect
new file mode 100644
index 0000000..6f6e56c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super_2.dart.expect
@@ -0,0 +1,765 @@
+Problems reported:
+
+parser/general/augment_super_2:1:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void topLevelMethod() {
+^^^^^^^
+
+parser/general/augment_super_2:1:1: Expected ';' after this.
+augment void topLevelMethod() {
+^^^^^^^
+
+parser/general/augment_super_2:2:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super_2:2:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super_2:5:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void topLevelMethodError() {
+^^^^^^^
+
+parser/general/augment_super_2:5:1: Expected ';' after this.
+augment void topLevelMethodError() {
+^^^^^^^
+
+parser/general/augment_super_2:6:11: Expected ';' after this.
+  augment int local;
+          ^^^
+
+parser/general/augment_super_2:11:9: A function declaration needs an explicit list of parameters.
+augment List<int> get topLevelProperty {
+        ^^^^
+
+parser/general/augment_super_2:11:19: Expected a function body, but got 'get'.
+augment List<int> get topLevelProperty {
+                  ^^^
+
+parser/general/augment_super_2:12:23: Expected ',' before this.
+  return [... augment super, augment super[0]];
+                      ^^^^^
+
+parser/general/augment_super_2:12:38: Expected ',' before this.
+  return [... augment super, augment super[0]];
+                                     ^^^^^
+
+parser/general/augment_super_2:15:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment void set topLevelProperty(List<int> value) {
+^^^^^^^
+
+parser/general/augment_super_2:15:1: Expected ';' after this.
+augment void set topLevelProperty(List<int> value) {
+^^^^^^^
+
+parser/general/augment_super_2:16:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super_2:16:11: Expected ';' after this.
+  augment super[0] = value[1];
+          ^^^^^
+
+parser/general/augment_super_2:17:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super = value;
+          ^^^^^
+
+parser/general/augment_super_2:21:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super_2:21:11: Expected ';' after this.
+  augment super();
+          ^^^^^
+
+parser/general/augment_super_2:22:11: 'super' can't be used as an identifier because it's a keyword.
+  augment super;
+          ^^^^^
+
+parser/general/augment_super_2:23:11: Expected ';' after this.
+  augment int local;
+          ^^^
+
+parser/general/augment_super_2:27:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+augment class Class {
+^^^^^^^
+
+parser/general/augment_super_2:27:1: Expected ';' after this.
+augment class Class {
+^^^^^^^
+
+parser/general/augment_super_2:28:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void instanceMethod() {
+  ^^^^^^^
+
+parser/general/augment_super_2:28:3: Expected ';' after this.
+  augment void instanceMethod() {
+  ^^^^^^^
+
+parser/general/augment_super_2:29:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super_2:29:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super_2:32:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void instanceMethodErrors() {
+  ^^^^^^^
+
+parser/general/augment_super_2:32:3: Expected ';' after this.
+  augment void instanceMethodErrors() {
+  ^^^^^^^
+
+parser/general/augment_super_2:33:13: Expected ';' after this.
+    augment int local;
+            ^^^
+
+parser/general/augment_super_2:37:11: Expected ';' after this.
+  augment int get instanceProperty {
+          ^^^
+
+parser/general/augment_super_2:38:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super++;
+            ^^^^^
+
+parser/general/augment_super_2:38:13: Expected ';' after this.
+    augment super++;
+            ^^^^^
+
+parser/general/augment_super_2:38:20: Expected an identifier, but got ';'.
+    augment super++;
+                   ^
+
+parser/general/augment_super_2:39:7: Expected ';' after this.
+    --augment super;
+      ^^^^^^^
+
+parser/general/augment_super_2:40:13: Expected ';' after this.
+    return -augment super;
+            ^^^^^^^
+
+parser/general/augment_super_2:43:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
+  augment void set instanceProperty(int value) {
+  ^^^^^^^
+
+parser/general/augment_super_2:43:3: Expected ';' after this.
+  augment void set instanceProperty(int value) {
+  ^^^^^^^
+
+parser/general/augment_super_2:44:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super = value;
+            ^^^^^
+
+parser/general/augment_super_2:48:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super_2:48:13: Expected ';' after this.
+    augment super();
+            ^^^^^
+
+parser/general/augment_super_2:49:13: 'super' can't be used as an identifier because it's a keyword.
+    augment super;
+            ^^^^^
+
+parser/general/augment_super_2:50:13: Expected ';' after this.
+    augment int local;
+            ^^^
+
+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(void)
+      handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[Template(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, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        beginParenthesizedExpressionOrRecordLiteral(()
+        endRecordLiteral((, 0, null)
+        handleExpressionStatement((, ;)
+      endBlockFunctionBody(2, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(})
+  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(void)
+      handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(int)
+        handleType(augment, null)
+        beginVariablesDeclaration(int, null, null)
+          handleIdentifier(int, localVariableDeclaration)
+          beginInitializedIdentifier(int)
+            handleNoVariableInitializer(int)
+          endInitializedIdentifier(int)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(local, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(local, local)
+        handleExpressionStatement(local, ;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, augment)
+        handleExpressionStatement(augment, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(augment)
+  endMetadataStar(0)
+  beginTopLevelMember(augment)
+    beginTopLevelMethod(}, null, null)
+      handleIdentifier(augment, typeReference)
+      handleNoTypeArguments(List)
+      handleType(augment, null)
+      handleIdentifier(List, topLevelFunctionDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        handleIdentifier(int, typeVariableDeclaration)
+        beginTypeVariable(int)
+          handleTypeVariablesDefined(int, 1)
+          handleNoType(int)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      handleRecoverableError(MissingFunctionParameters, List, List)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
+      handleInvalidFunctionBody({)
+    endTopLevelMethod(augment, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(get)
+  endMetadataStar(0)
+  beginTopLevelMember(get)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables({)
+      handleNoFormalParameters({, MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments([)
+          handleIdentifier(augment, expression)
+          handleNoTypeArguments(super)
+          handleNoArguments(super)
+          handleSend(augment, augment)
+          handleSpreadExpression(...)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], super, super)
+          handleSuperExpression(super, expression)
+          handleIdentifier(augment, expression)
+          handleNoTypeArguments(super)
+          handleNoArguments(super)
+          handleSend(augment, augment)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], super, super)
+          handleSuperExpression(super, expression)
+          handleLiteralInt(0)
+          handleIndexedExpression(null, [, ])
+          handleLiteralList(4, [, null, ])
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(get, get, })
+  endTopLevelDeclaration(})
+  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(void)
+      handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(;, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          beginTypeArguments(<)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(>)
+            handleType(int, null)
+          endTypeArguments(1, <, >)
+          handleType(List, null)
+          handleIdentifier(value, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[Template(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, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        beginPattern(;)
+          handleNoTypeArguments([)
+          beginPattern([)
+            beginConstantPattern(null)
+              handleLiteralInt(0)
+            endConstantPattern(null)
+          endPattern(0)
+          handleListPattern(1, [, ])
+        endPattern(])
+        handleIdentifier(value, expression)
+        handleNoTypeArguments([)
+        handleNoArguments([)
+        handleSend(value, value)
+        handleLiteralInt(1)
+        handleIndexedExpression(null, [, ])
+        handlePatternAssignment(=)
+        handleExpressionStatement([, ;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[Template(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, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            beginVariableInitializer(=)
+              handleIdentifier(value, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(value, value)
+            endVariableInitializer(=)
+          endInitializedIdentifier(super)
+        endVariablesDeclaration(1, ;)
+      endBlockFunctionBody(3, {, })
+    endTopLevelMethod(void, set, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[Template(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, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+        endVariablesDeclaration(1, ;)
+        beginParenthesizedExpressionOrRecordLiteral(()
+        endRecordLiteral((, 0, null)
+        handleExpressionStatement((, ;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(super)
+        handleType(augment, null)
+        beginVariablesDeclaration(super, null, null)
+          handleRecoverableError(Message[Template(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, localVariableDeclaration)
+          beginInitializedIdentifier(super)
+            handleNoVariableInitializer(super)
+          endInitializedIdentifier(super)
+        endVariablesDeclaration(1, ;)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        handleIdentifier(augment, typeReference)
+        handleNoTypeArguments(int)
+        handleType(augment, null)
+        beginVariablesDeclaration(int, null, null)
+          handleIdentifier(int, localVariableDeclaration)
+          beginInitializedIdentifier(int)
+            handleNoVariableInitializer(int)
+          endInitializedIdentifier(int)
+          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+        endVariablesDeclaration(1, ;)
+        handleIdentifier(local, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(local, local)
+        handleExpressionStatement(local, ;)
+        handleIdentifier(augment, expression)
+        handleNoTypeArguments(;)
+        handleNoArguments(;)
+        handleSend(augment, augment)
+        handleExpressionStatement(augment, ;)
+      endBlockFunctionBody(6, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(})
+  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[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+    endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(Class, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, Class)
+      handleNoPrimaryConstructor(Class, null, false)
+      handleNoType(Class)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType({)
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod, Class)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              beginParenthesizedExpressionOrRecordLiteral(()
+              endRecordLiteral((, 0, null)
+              handleExpressionStatement((, ;)
+            endBlockFunctionBody(2, {, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType(})
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors, Class)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceMethodErrors, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(int)
+              handleType(augment, null)
+              beginVariablesDeclaration(int, null, null)
+                handleIdentifier(int, localVariableDeclaration)
+                beginInitializedIdentifier(int)
+                  handleNoVariableInitializer(int)
+                endInitializedIdentifier(int)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(local, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(local, local)
+              handleExpressionStatement(local, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, augment)
+              handleExpressionStatement(augment, ;)
+            endBlockFunctionBody(3, {, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleIdentifier(augment, typeReference)
+            handleNoTypeArguments(int)
+            handleType(augment, null)
+            handleIdentifier(int, fieldDeclaration)
+            handleNoFieldInitializer(get)
+            handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(get)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty, Class)
+            handleNoType(;)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables({)
+            handleNoFormalParameters({, MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(, )
+              handleUnaryPrefixAssignmentExpression(++)
+              handleExpressionStatement(++, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(super)
+              handleNoArguments(super)
+              handleSend(augment, augment)
+              handleUnaryPrefixAssignmentExpression(--)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+              handleExpressionStatement(--, ;)
+              handleSuperExpression(super, expression)
+              handleExpressionStatement(super, ;)
+              beginReturnStatement(return)
+                handleIdentifier(augment, expression)
+                handleNoTypeArguments(super)
+                handleNoArguments(super)
+                handleSend(augment, augment)
+                handleUnaryPrefixExpression(-)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+              endReturnStatement(true, return, ;)
+              handleSuperExpression(super, expression)
+              handleExpressionStatement(super, ;)
+            endBlockFunctionBody(6, {, })
+          endMethod(DeclarationKind.Class, get, get, {, null, })
+        endMember()
+        beginMetadataStar(augment)
+        endMetadataStar(0)
+        beginMember()
+          beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+            handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+            handleNoType(})
+            handleIdentifier(augment, fieldDeclaration)
+            handleNoFieldInitializer(void)
+            handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty, Class)
+            handleVoidKeyword(void)
+            handleIdentifier(instanceProperty, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(int)
+              endMetadataStar(0)
+              beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                handleIdentifier(int, typeReference)
+                handleNoTypeArguments(value)
+                handleType(int, null)
+                handleIdentifier(value, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  beginVariableInitializer(=)
+                    handleIdentifier(value, expression)
+                    handleNoTypeArguments(;)
+                    handleNoArguments(;)
+                    handleSend(value, value)
+                  endVariableInitializer(=)
+                endInitializedIdentifier(super)
+              endVariablesDeclaration(1, ;)
+            endBlockFunctionBody(1, {, })
+          endMethod(DeclarationKind.Class, set, void, (, null, })
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod, Class)
+            handleVoidKeyword(void)
+            handleIdentifier(injectedInstanceMethod, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+              endVariablesDeclaration(1, ;)
+              beginParenthesizedExpressionOrRecordLiteral(()
+              endRecordLiteral((, 0, null)
+              handleExpressionStatement((, ;)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(super)
+              handleType(augment, null)
+              beginVariablesDeclaration(super, null, null)
+                handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                beginInitializedIdentifier(super)
+                  handleNoVariableInitializer(super)
+                endInitializedIdentifier(super)
+              endVariablesDeclaration(1, ;)
+              beginMetadataStar(augment)
+              endMetadataStar(0)
+              handleIdentifier(augment, typeReference)
+              handleNoTypeArguments(int)
+              handleType(augment, null)
+              beginVariablesDeclaration(int, null, null)
+                handleIdentifier(int, localVariableDeclaration)
+                beginInitializedIdentifier(int)
+                  handleNoVariableInitializer(int)
+                endInitializedIdentifier(int)
+                handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+              endVariablesDeclaration(1, ;)
+              handleIdentifier(local, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(local, local)
+              handleExpressionStatement(local, ;)
+              handleIdentifier(augment, expression)
+              handleNoTypeArguments(;)
+              handleNoArguments(;)
+              handleSend(augment, augment)
+              handleExpressionStatement(augment, ;)
+            endBlockFunctionBody(6, {, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/general/augment_super_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/augment_super_2.dart.intertwined.expect
new file mode 100644
index 0000000..4e4840b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super_2.dart.intertwined.expect
@@ -0,0 +1,1472 @@
+parseUnit(augment)
+  skipErrorTokens(augment)
+  listener: beginCompilationUnit(augment)
+  syntheticPreviousToken(augment)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(topLevelMethod)
+      parseFields(, null, null, null, null, null, null, null, , 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(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, VoidType(), null, topLevelMethod, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethod, topLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethod, 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                        listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                ensureCloseParen((, ()
+                                listener: endRecordLiteral((, 0, null)
+                    ensureSemicolon())
+                    listener: handleExpressionStatement((, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(2, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(topLevelMethodError)
+      parseFields(}, null, null, null, null, null, null, null, }, 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(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, VoidType(), null, topLevelMethodError, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelMethodError, topLevelFunctionDeclaration)
+        parseMethodTypeVar(topLevelMethodError)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelMethodError, topLevelMethodError, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelMethodError, 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                looksLikeLocalFunction(int)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(int, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      listener: handleIdentifier(int, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(int)
+                    parseVariableInitializerOpt(int)
+                      listener: handleNoVariableInitializer(int)
+                    listener: endInitializedIdentifier(int)
+                  ensureSemicolon(int)
+                    reportRecoverableError(int, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, local)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(local)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(local)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(local, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(local)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(local, local)
+                  ensureSemicolon(local)
+                  listener: handleExpressionStatement(local, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(augment)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(augment)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(augment, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(augment)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(augment, augment)
+                  ensureSemicolon(augment)
+                  listener: handleExpressionStatement(augment, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      parseTopLevelMethod(}, null, null, }, SimpleType(), null, List, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleIdentifier(augment, typeReference)
+        listener: handleNoTypeArguments(List)
+        listener: handleType(augment, null)
+        ensureIdentifierPotentiallyRecovered(augment, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(List, topLevelFunctionDeclaration)
+        parseMethodTypeVar(List)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(int)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(int, typeVariableDeclaration)
+          listener: beginTypeVariable(int)
+          listener: handleTypeVariablesDefined(int, 1)
+          listener: handleNoType(int)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+        parseGetterOrFormalParameters(>, List, false, MemberKind.TopLevelMethod)
+          missingParameterMessage(MemberKind.TopLevelMethod)
+          reportRecoverableError(List, MissingFunctionParameters)
+            listener: handleRecoverableError(MissingFunctionParameters, List, List)
+          rewriter()
+          parseFormalParametersRest((, MemberKind.TopLevelMethod)
+            listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+            listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          ensureBlock(), BlockKind(function body))
+            reportRecoverableError(get, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'get'., null, {lexeme: get}])
+              listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'get'., null, {lexeme: get}], get, get)
+            insertBlock())
+              rewriter()
+              rewriter()
+          listener: handleInvalidFunctionBody({)
+        listener: endTopLevelMethod(augment, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(get)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(get)
+      isReservedKeyword({)
+      parseTopLevelMethod(}, null, null, }, NoType(), get, topLevelProperty, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(get, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables({)
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, true, MemberKind.TopLevelMethod)
+          listener: handleNoFormalParameters({, MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt(topLevelProperty)
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(topLevelProperty, false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments([)
+                        parseLiteralListSuffix(return, null)
+                          parseExpression(...)
+                            looksLikeOuterPatternEquals(...)
+                              skipOuterPattern(...)
+                                skipObjectPatternRest(augment)
+                            parsePrecedenceExpression(..., 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(..., true, ConstantPatternContext.none)
+                                parsePrimary(..., expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(..., expression, ConstantPatternContext.none)
+                                    parseSend(..., expression, ConstantPatternContext.none)
+                                      ensureIdentifier(..., expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(super)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(super)
+                                      listener: handleSend(augment, augment)
+                          listener: handleSpreadExpression(...)
+                          rewriteAndRecover(augment, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], ,)
+                            reportRecoverableError(super, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}])
+                              listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], super, super)
+                            rewriter()
+                          parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
+                            parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(,, true, ConstantPatternContext.none)
+                                parsePrimary(,, expression, ConstantPatternContext.none)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                          parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
+                                skipObjectPatternRest(augment)
+                            parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(,, true, ConstantPatternContext.none)
+                                parsePrimary(,, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(,, expression, ConstantPatternContext.none)
+                                    parseSend(,, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(,, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(super)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(super)
+                                      listener: handleSend(augment, augment)
+                          rewriteAndRecover(augment, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], ,)
+                            reportRecoverableError(super, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}])
+                              listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], super, super)
+                            rewriter()
+                          parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
+                            parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(,, true, ConstantPatternContext.none)
+                                parsePrimary(,, expression, ConstantPatternContext.none)
+                                  parseSuperExpression(,, expression)
+                                    listener: handleSuperExpression(super, expression)
+                              parseArgumentOrIndexStar(super, NoTypeParamOrArg(), false)
+                                parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                  parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                    parseUnaryExpression([, true, ConstantPatternContext.none)
+                                      parsePrimary([, expression, ConstantPatternContext.none)
+                                        parseLiteralInt([)
+                                          listener: handleLiteralInt(0)
+                                listener: handleIndexedExpression(null, [, ])
+                          listener: handleLiteralList(4, [, null, ])
+                ensureSemicolon(])
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(get, get, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(void)
+      indicatesMethodOrField(set)
+      parseFields(}, null, null, null, null, null, null, null, }, 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(void)
+        ensureSemicolon(augment)
+          reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(;, null, null, ;, VoidType(), set, topLevelProperty, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(set, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(topLevelProperty, topLevelFunctionDeclaration)
+        listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(topLevelProperty, topLevelProperty, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(topLevelProperty, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(int, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(List, null)
+                ensureIdentifier(>, formalParameterDeclaration)
+                  listener: handleIdentifier(value, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                        listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, [)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction([)
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePatternAssignment(;)
+                        parsePattern(;, PatternContext.assignment, precedence: 1)
+                          listener: beginPattern(;)
+                          parsePrimaryPattern(;, PatternContext.assignment)
+                            listener: handleNoTypeArguments([)
+                            parseListPatternSuffix(;, PatternContext.assignment)
+                              parsePattern([, PatternContext.assignment, precedence: 1)
+                                listener: beginPattern([)
+                                parsePrimaryPattern([, PatternContext.assignment)
+                                  listener: beginConstantPattern(null)
+                                  parsePrecedenceExpression([, 7, false, ConstantPatternContext.implicit)
+                                    parseUnaryExpression([, false, ConstantPatternContext.implicit)
+                                      parsePrimary([, expression, ConstantPatternContext.implicit)
+                                        parseLiteralInt([)
+                                          listener: handleLiteralInt(0)
+                                  listener: endConstantPattern(null)
+                                listener: endPattern(0)
+                              listener: handleListPattern(1, [, ])
+                          listener: endPattern(])
+                        parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(value)
+                          parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(=, true, ConstantPatternContext.none)
+                              parsePrimary(=, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
+                                  parseSend(=, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(=, expression)
+                                      listener: handleIdentifier(value, expression)
+                                    listener: handleNoTypeArguments([)
+                                    parseArgumentsOpt(value)
+                                      listener: handleNoArguments([)
+                                    listener: handleSend(value, value)
+                            parseArgumentOrIndexStar(value, NoTypeParamOrArg(), false)
+                              parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
+                                parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression([, true, ConstantPatternContext.none)
+                                    parsePrimary([, expression, ConstantPatternContext.none)
+                                      parseLiteralInt([)
+                                        listener: handleLiteralInt(1)
+                              listener: handleIndexedExpression(null, [, ])
+                        listener: handlePatternAssignment(=)
+                    ensureSemicolon(])
+                    listener: handleExpressionStatement([, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                        listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: beginVariableInitializer(=)
+                      parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(value)
+                        parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                          parseUnaryExpression(=, true, ConstantPatternContext.none)
+                            parsePrimary(=, expression, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
+                                parseSend(=, expression, ConstantPatternContext.none)
+                                  ensureIdentifier(=, expression)
+                                    listener: handleIdentifier(value, expression)
+                                  listener: handleNoTypeArguments(;)
+                                  parseArgumentsOpt(value)
+                                    listener: handleNoArguments(;)
+                                  listener: handleSend(value, value)
+                      listener: endVariableInitializer(=)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(value)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(3, {, })
+        listener: endTopLevelMethod(void, set, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, null, }, VoidType(), null, injectedTopLevelMethod, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(injectedTopLevelMethod, topLevelFunctionDeclaration)
+        parseMethodTypeVar(injectedTopLevelMethod)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(injectedTopLevelMethod, injectedTopLevelMethod, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(injectedTopLevelMethod, 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                        listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                    reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, ()
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclaration(;, null)
+                parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                  looksLikeLocalFunction(()
+                  parseExpressionStatement(;)
+                    parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                      parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(;, true, ConstantPatternContext.none)
+                          parsePrimary(;, expression, ConstantPatternContext.none)
+                            parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                              parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                ensureCloseParen((, ()
+                                listener: endRecordLiteral((, 0, null)
+                    ensureSemicolon())
+                    listener: handleExpressionStatement((, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(super)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(super)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(super, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                        listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(super)
+                    parseVariableInitializerOpt(super)
+                      listener: handleNoVariableInitializer(super)
+                    listener: endInitializedIdentifier(super)
+                  ensureSemicolon(super)
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(int)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                listener: beginVariablesDeclaration(int, null, null)
+                parseVariablesDeclarationRest(augment, true)
+                  parseOptionallyInitializedIdentifier(augment)
+                    ensureIdentifier(augment, localVariableDeclaration)
+                      listener: handleIdentifier(int, localVariableDeclaration)
+                    listener: beginInitializedIdentifier(int)
+                    parseVariableInitializerOpt(int)
+                      listener: handleNoVariableInitializer(int)
+                    listener: endInitializedIdentifier(int)
+                  ensureSemicolon(int)
+                    reportRecoverableError(int, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+                    rewriter()
+                  listener: endVariablesDeclaration(1, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, local)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(local)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(local)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(local, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(local)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(local, local)
+                  ensureSemicolon(local)
+                  listener: handleExpressionStatement(local, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, augment)
+          parseStatement(;)
+            parseStatementX(;)
+              parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                looksLikeLocalFunction(augment)
+                parseExpressionStatement(;)
+                  parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(augment)
+                    parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                      parseUnaryExpression(;, true, ConstantPatternContext.none)
+                        parsePrimary(;, expression, ConstantPatternContext.none)
+                          parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                            parseSend(;, expression, ConstantPatternContext.none)
+                              ensureIdentifier(;, expression)
+                                listener: handleIdentifier(augment, expression)
+                              listener: handleNoTypeArguments(;)
+                              parseArgumentsOpt(augment)
+                                listener: handleNoArguments(;)
+                              listener: handleSend(augment, augment)
+                  ensureSemicolon(augment)
+                  listener: handleExpressionStatement(augment, ;)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(6, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(augment)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(augment)
+      isReservedKeyword(class)
+      indicatesMethodOrField(Class)
+      parseFields(}, null, null, null, null, null, null, null, }, 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[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+          rewriter()
+        listener: endTopLevelFields(null, null, null, null, null, null, 1, augment, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(Class, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, Class)
+        parseClass(Class, class, class, null, Class)
+          parsePrimaryConstructorOpt(Class, null, false)
+            listener: handleNoPrimaryConstructor(Class, null, false)
+          parseClassHeaderOpt(Class, class, class)
+            parseClassExtendsOpt(Class, DeclarationHeaderKind.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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+              parseMetadataStar({)
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(instanceMethod)
+              parseFields({, null, null, null, null, null, null, null, {, NoType(), augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, instanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethod, Class)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethod, instanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethod, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                                listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        ensureCloseParen((, ()
+                                        listener: endRecordLiteral((, 0, null)
+                            ensureSemicolon())
+                            listener: handleExpressionStatement((, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(2, {, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(instanceMethodErrors)
+              parseFields(}, null, null, null, null, null, null, null, }, NoType(), augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, instanceMethodErrors, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, instanceMethodErrors, Class)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(instanceMethodErrors, methodDeclaration)
+                parseQualifiedRestOpt(instanceMethodErrors, methodDeclarationContinuation)
+                parseMethodTypeVar(instanceMethodErrors)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceMethodErrors, instanceMethodErrors, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceMethodErrors, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                        looksLikeLocalFunction(int)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(int)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(int, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              listener: handleIdentifier(int, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(int)
+                            parseVariableInitializerOpt(int)
+                              listener: handleNoVariableInitializer(int)
+                            listener: endInitializedIdentifier(int)
+                          ensureSemicolon(int)
+                            reportRecoverableError(int, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, local)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(local)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(local)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(local, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(local)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(local, local)
+                          ensureSemicolon(local)
+                          listener: handleExpressionStatement(local, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(augment)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(augment)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(augment, augment)
+                          ensureSemicolon(augment)
+                          listener: handleExpressionStatement(augment, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(3, {, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFields(}, null, null, null, null, null, null, null, }, SimpleType(), int, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                listener: handleIdentifier(augment, typeReference)
+                listener: handleNoTypeArguments(int)
+                listener: handleType(augment, null)
+                ensureIdentifierPotentiallyRecovered(augment, fieldDeclaration, false)
+                  listener: handleIdentifier(int, fieldDeclaration)
+                parseFieldInitializerOpt(int, int, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(get)
+                ensureSemicolon(int)
+                  reportRecoverableError(int, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+                  rewriter()
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, get)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(get)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), get, null, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceProperty, Class)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(get, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables({)
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, true, MemberKind.NonStaticMethod)
+                  listener: handleNoFormalParameters({, MemberKind.NonStaticMethod)
+                parseInitializersOpt(instanceProperty)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(instanceProperty)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(instanceProperty, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                                listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ++)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(++)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrecedenceExpression(++, 16, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(++, true, ConstantPatternContext.none)
+                                      parsePrimary(++, expression, ConstantPatternContext.none)
+                                        parseSend(++, expression, ConstantPatternContext.none)
+                                          ensureIdentifier(++, expression)
+                                            reportRecoverableErrorWithToken(;, Template(ExpectedIdentifier))
+                                              listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
+                                            rewriter()
+                                            listener: handleIdentifier(, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt()
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(, )
+                                  listener: handleUnaryPrefixAssignmentExpression(++)
+                            ensureSemicolon()
+                            listener: handleExpressionStatement(++, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, --)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(--)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrecedenceExpression(--, 16, true, ConstantPatternContext.none)
+                                    parseUnaryExpression(--, true, ConstantPatternContext.none)
+                                      parsePrimary(--, expression, ConstantPatternContext.none)
+                                        parseSendOrFunctionLiteral(--, expression, ConstantPatternContext.none)
+                                          parseSend(--, expression, ConstantPatternContext.none)
+                                            ensureIdentifier(--, expression)
+                                              listener: handleIdentifier(augment, expression)
+                                            listener: handleNoTypeArguments(super)
+                                            parseArgumentsOpt(augment)
+                                              listener: handleNoArguments(super)
+                                            listener: handleSend(augment, augment)
+                                  listener: handleUnaryPrefixAssignmentExpression(--)
+                            ensureSemicolon(augment)
+                              reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+                              rewriter()
+                            listener: handleExpressionStatement(--, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, super)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(super)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseSuperExpression(;, expression)
+                                      listener: handleSuperExpression(super, expression)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(super, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, return)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseReturnStatement(;)
+                        listener: beginReturnStatement(return)
+                        parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                          parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(return, true, ConstantPatternContext.none)
+                              parsePrecedenceExpression(-, 16, true, ConstantPatternContext.none)
+                                parseUnaryExpression(-, true, ConstantPatternContext.none)
+                                  parsePrimary(-, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(-, expression, ConstantPatternContext.none)
+                                      parseSend(-, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(-, expression)
+                                          listener: handleIdentifier(augment, expression)
+                                        listener: handleNoTypeArguments(super)
+                                        parseArgumentsOpt(augment)
+                                          listener: handleNoArguments(super)
+                                        listener: handleSend(augment, augment)
+                              listener: handleUnaryPrefixExpression(-)
+                        ensureSemicolon(augment)
+                          reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                            listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+                          rewriter()
+                        listener: endReturnStatement(true, return, ;)
+                        inGenerator()
+                  notEofOrType(CLOSE_CURLY_BRACKET, super)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(super)
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseSuperExpression(;, expression)
+                                      listener: handleSuperExpression(super, expression)
+                            ensureSemicolon(super)
+                            listener: handleExpressionStatement(super, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endMethod(DeclarationKind.Class, get, get, {, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, augment)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(augment)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(void)
+              indicatesMethodOrField(set)
+              parseFields(}, null, null, null, null, null, null, null, }, NoType(), augment, DeclarationKind.Class, Class, false)
+                listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, })
+                reportRecoverableError(augment, MissingConstFinalVarOrType)
+                  listener: handleRecoverableError(MissingConstFinalVarOrType, augment, augment)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, fieldDeclaration, false)
+                  listener: handleIdentifier(augment, fieldDeclaration)
+                parseFieldInitializerOpt(augment, augment, null, null, null, null, null, DeclarationKind.Class, Class)
+                  listener: handleNoFieldInitializer(void)
+                ensureSemicolon(augment)
+                  reportRecoverableError(augment, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], augment, augment)
+                  rewriter()
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, augment, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, instanceProperty, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceProperty, Class)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
+                  listener: handleIdentifier(instanceProperty, methodDeclaration)
+                parseQualifiedRestOpt(instanceProperty, methodDeclarationContinuation)
+                listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(instanceProperty, instanceProperty, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(instanceProperty, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(int)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
+                        listener: handleIdentifier(int, typeReference)
+                        listener: handleNoTypeArguments(value)
+                        listener: handleType(int, null)
+                        ensureIdentifier(int, formalParameterDeclaration)
+                          listener: handleIdentifier(value, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, null, null, null, value, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                                listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: beginVariableInitializer(=)
+                              parseExpression(=)
+                                looksLikeOuterPatternEquals(=)
+                                  skipOuterPattern(=)
+                                    skipObjectPatternRest(value)
+                                parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                    parsePrimary(=, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral(=, expression, ConstantPatternContext.none)
+                                        parseSend(=, expression, ConstantPatternContext.none)
+                                          ensureIdentifier(=, expression)
+                                            listener: handleIdentifier(value, expression)
+                                          listener: handleNoTypeArguments(;)
+                                          parseArgumentsOpt(value)
+                                            listener: handleNoArguments(;)
+                                          listener: handleSend(value, value)
+                              listener: endVariableInitializer(=)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(value)
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(1, {, })
+                listener: endMethod(DeclarationKind.Class, set, void, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
+              parseMetadataStar(})
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, injectedInstanceMethod, DeclarationKind.Class, Class, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, injectedInstanceMethod, Class)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(injectedInstanceMethod, methodDeclaration)
+                parseQualifiedRestOpt(injectedInstanceMethod, methodDeclarationContinuation)
+                parseMethodTypeVar(injectedInstanceMethod)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(injectedInstanceMethod, injectedInstanceMethod, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(injectedInstanceMethod, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement({)
+                    parseStatementX({)
+                      parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                                listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                            reportRecoverableError(super, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], super, super)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, ()
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclaration(;, null)
+                        parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                          looksLikeLocalFunction(()
+                          parseExpressionStatement(;)
+                            parseExpression(;)
+                              looksLikeOuterPatternEquals(;)
+                                skipOuterPattern(;)
+                              parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                  parsePrimary(;, expression, ConstantPatternContext.none)
+                                    parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(;, ConstantPatternContext.none)
+                                      parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
+                                        listener: beginParenthesizedExpressionOrRecordLiteral(()
+                                        ensureCloseParen((, ()
+                                        listener: endRecordLiteral((, 0, null)
+                            ensureSemicolon())
+                            listener: handleExpressionStatement((, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(super)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(super)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(super, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              reportRecoverableErrorWithToken(super, Template(ExpectedIdentifierButGotKeyword))
+                                listener: handleRecoverableError(Message[Template(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, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(super)
+                            parseVariableInitializerOpt(super)
+                              listener: handleNoVariableInitializer(super)
+                            listener: endInitializedIdentifier(super)
+                          ensureSemicolon(super)
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(int)
+                        listener: beginMetadataStar(augment)
+                        listener: endMetadataStar(0)
+                        listener: handleIdentifier(augment, typeReference)
+                        listener: handleNoTypeArguments(int)
+                        listener: handleType(augment, null)
+                        listener: beginVariablesDeclaration(int, null, null)
+                        parseVariablesDeclarationRest(augment, true)
+                          parseOptionallyInitializedIdentifier(augment)
+                            ensureIdentifier(augment, localVariableDeclaration)
+                              listener: handleIdentifier(int, localVariableDeclaration)
+                            listener: beginInitializedIdentifier(int)
+                            parseVariableInitializerOpt(int)
+                              listener: handleNoVariableInitializer(int)
+                            listener: endInitializedIdentifier(int)
+                          ensureSemicolon(int)
+                            reportRecoverableError(int, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                              listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
+                            rewriter()
+                          listener: endVariablesDeclaration(1, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, local)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(local)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(local)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(local, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(local)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(local, local)
+                          ensureSemicolon(local)
+                          listener: handleExpressionStatement(local, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, augment)
+                  parseStatement(;)
+                    parseStatementX(;)
+                      parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                        looksLikeLocalFunction(augment)
+                        parseExpressionStatement(;)
+                          parseExpression(;)
+                            looksLikeOuterPatternEquals(;)
+                              skipOuterPattern(;)
+                                skipObjectPatternRest(augment)
+                            parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                parsePrimary(;, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(;, expression, ConstantPatternContext.none)
+                                    parseSend(;, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(;, expression)
+                                        listener: handleIdentifier(augment, expression)
+                                      listener: handleNoTypeArguments(;)
+                                      parseArgumentsOpt(augment)
+                                        listener: handleNoArguments(;)
+                                      listener: handleSend(augment, augment)
+                          ensureSemicolon(augment)
+                          listener: handleExpressionStatement(augment, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(6, {, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 9, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(augment)
+  listener: endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/general/augment_super_2.dart.parser.expect b/pkg/front_end/parser_testcases/general/augment_super_2.dart.parser.expect
new file mode 100644
index 0000000..6bf8a8f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super_2.dart.parser.expect
@@ -0,0 +1,109 @@
+NOTICE: Stream was rewritten by parser!
+
+augment ;void topLevelMethod() {
+augment super;();
+}
+
+augment ;void topLevelMethodError() {
+augment int ;local;
+augment;
+}
+
+
+augment List<int> (){}get topLevelProperty {
+return [... augment ,super, augment ,super[0]];
+}
+
+augment ;void set topLevelProperty(List<int> value) {
+augment super;[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super;();
+augment super;
+augment int ;local;
+augment;
+}
+
+augment ;class Class {
+augment ;void instanceMethod() {
+augment super;();
+}
+
+augment ;void instanceMethodErrors() {
+augment int ;local;
+augment;
+}
+
+augment int ;get instanceProperty {
+augment super;++*synthetic*;
+--augment ;super;
+return -augment ;super;
+}
+
+augment ;void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super;();
+augment super;
+augment int ;local;
+augment;
+}
+}
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[StringToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[StringToken] ,[SyntheticToken]super[KeywordToken],[SimpleToken] augment[StringToken] ,[SyntheticToken]super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] int[StringToken] ;[SyntheticToken]get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]++[SimpleToken][SyntheticStringToken];[SimpleToken]
+--[SimpleToken]augment[StringToken] ;[SyntheticToken]super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[StringToken] ;[SyntheticToken]super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] ;[SyntheticToken]void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken];[SyntheticToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] ;[SyntheticToken]local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/augment_super_2.dart.scanner.expect b/pkg/front_end/parser_testcases/general/augment_super_2.dart.scanner.expect
new file mode 100644
index 0000000..b6d4e43
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/augment_super_2.dart.scanner.expect
@@ -0,0 +1,107 @@
+augment void topLevelMethod() {
+augment super();
+}
+
+augment void topLevelMethodError() {
+augment int local;
+augment;
+}
+
+
+augment List<int> get topLevelProperty {
+return [... augment super, augment super[0]];
+}
+
+augment void set topLevelProperty(List<int> value) {
+augment super[0] = value[1];
+augment super = value;
+}
+
+void injectedTopLevelMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+
+augment class Class {
+augment void instanceMethod() {
+augment super();
+}
+
+augment void instanceMethodErrors() {
+augment int local;
+augment;
+}
+
+augment int get instanceProperty {
+augment super++;
+--augment super;
+return -augment super;
+}
+
+augment void set instanceProperty(int value) {
+augment super = value;
+}
+
+void injectedInstanceMethod() {
+augment super();
+augment super;
+augment int local;
+augment;
+}
+}
+
+augment[StringToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+
+augment[StringToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
+return[KeywordToken] [[BeginToken]...[SimpleToken] augment[StringToken] super[KeywordToken],[SimpleToken] augment[StringToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] class[KeywordToken] Class[StringToken] {[BeginToken]
+augment[StringToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
+--[SimpleToken]augment[StringToken] super[KeywordToken];[SimpleToken]
+return[KeywordToken] -[SimpleToken]augment[StringToken] super[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+augment[StringToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
+}[SimpleToken]
+
+void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+augment[StringToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+augment[StringToken] super[KeywordToken];[SimpleToken]
+augment[StringToken] int[StringToken] local[StringToken];[SimpleToken]
+augment[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken][SimpleToken]
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 a276dfa..6575537 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
@@ -23,7 +23,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -36,7 +36,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -49,7 +49,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -62,7 +62,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -75,7 +75,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -88,7 +88,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -101,7 +101,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -114,7 +114,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -127,7 +127,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -140,7 +140,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -153,7 +153,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -166,7 +166,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -179,7 +179,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -192,7 +192,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -205,7 +205,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -218,7 +218,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -231,7 +231,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -244,7 +244,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -257,7 +257,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -270,7 +270,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 15f23f1..1ac672d 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
@@ -43,13 +43,15 @@
                 parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -67,13 +69,15 @@
                 parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -91,13 +95,15 @@
                 parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -115,13 +121,15 @@
                 parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -139,13 +147,15 @@
                 parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -163,13 +173,15 @@
                 parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -187,13 +199,15 @@
                 parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -211,13 +225,15 @@
                 parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -235,13 +251,15 @@
                 parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -260,13 +278,15 @@
                 parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -284,13 +304,15 @@
                 parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -308,13 +330,15 @@
                 parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -332,13 +356,15 @@
                 parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -356,13 +382,15 @@
                 parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -381,13 +409,15 @@
                 parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -405,13 +435,15 @@
                 parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -429,13 +461,15 @@
                 parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -454,13 +488,15 @@
                 parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -478,13 +514,15 @@
                 parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, WrapperClass)
@@ -502,13 +540,15 @@
                 parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.Class, WrapperClass)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 1c4b51d..e1f8c39 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
@@ -65,7 +65,7 @@
                 handleSend(abstract, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -120,7 +120,7 @@
                 handleSend(as, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -175,7 +175,7 @@
                 handleSend(covariant, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -230,7 +230,7 @@
                 handleSend(deferred, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -285,7 +285,7 @@
                 handleSend(dynamic, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -340,7 +340,7 @@
                 handleSend(export, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -395,7 +395,7 @@
                 handleSend(external, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -450,7 +450,7 @@
                 handleSend(factory, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -505,7 +505,7 @@
                 handleSend(Function, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -560,7 +560,7 @@
                 handleSend(get, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -615,7 +615,7 @@
                 handleSend(implements, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -670,7 +670,7 @@
                 handleSend(import, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -725,7 +725,7 @@
                 handleSend(interface, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -780,7 +780,7 @@
                 handleSend(library, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -835,7 +835,7 @@
                 handleSend(operator, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -890,7 +890,7 @@
                 handleSend(mixin, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -945,7 +945,7 @@
                 handleSend(part, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1000,7 +1000,7 @@
                 handleSend(set, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1055,7 +1055,7 @@
                 handleSend(static, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -1110,7 +1110,7 @@
                 handleSend(typedef, ))
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(2, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
     endClassDeclaration(class, })
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 88bfc51..5f07ff1 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, abstract, DeclarationKind.Class, WrapperClass, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, abstract, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, abstract, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(abstract)
@@ -73,9 +73,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -102,6 +105,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -118,6 +123,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(abstract)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -135,6 +143,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -160,7 +171,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -168,7 +179,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, as, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, as, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, as, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(as)
@@ -208,9 +219,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -237,6 +251,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -253,6 +269,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(as)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -270,6 +289,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -295,7 +317,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -303,7 +325,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, covariant, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, covariant, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, covariant, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(covariant)
@@ -343,9 +365,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -372,6 +397,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -388,6 +415,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(covariant)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -405,6 +435,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -430,7 +463,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -438,7 +471,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, deferred, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, deferred, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, deferred, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(deferred)
@@ -478,9 +511,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -507,6 +543,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -523,6 +561,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(deferred)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -540,6 +581,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -565,7 +609,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -573,7 +617,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, dynamic, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, dynamic, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, dynamic, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(dynamic)
@@ -613,9 +657,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -642,6 +689,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -658,6 +707,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(dynamic)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -675,6 +727,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -700,7 +755,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -708,7 +763,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, export, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, export, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, export, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(export)
@@ -748,9 +803,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -777,6 +835,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -793,6 +853,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(export)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -810,6 +873,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -835,7 +901,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -843,7 +909,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, external, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, external, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, external, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(external)
@@ -883,9 +949,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -912,6 +981,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -928,6 +999,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(external)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -945,6 +1019,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -970,7 +1047,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -978,7 +1055,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, factory, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, factory, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(factory)
@@ -1018,9 +1095,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1047,6 +1127,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1063,6 +1145,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(factory)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1080,6 +1165,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1105,7 +1193,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1113,7 +1201,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, Function, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, Function, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Function, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(Function)
@@ -1153,9 +1241,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1182,6 +1273,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1198,6 +1291,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(Function)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1215,6 +1311,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1240,7 +1339,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1249,7 +1348,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, get, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, get, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -1289,9 +1388,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1318,6 +1420,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1334,6 +1438,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(get)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1351,6 +1458,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1376,7 +1486,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1384,7 +1494,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, implements, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, implements, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, implements, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(implements)
@@ -1424,9 +1534,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1453,6 +1566,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1469,6 +1584,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(implements)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1486,6 +1604,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1511,7 +1632,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1519,7 +1640,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, import, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, import, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, import, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(import)
@@ -1559,9 +1680,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1588,6 +1712,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1604,6 +1730,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(import)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1621,6 +1750,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1646,7 +1778,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1654,7 +1786,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, interface, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, interface, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, interface, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(interface)
@@ -1694,9 +1826,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1723,6 +1858,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1739,6 +1876,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(interface)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1756,6 +1896,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1781,7 +1924,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1789,7 +1932,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, library, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, library, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, library, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(library)
@@ -1829,9 +1972,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1858,6 +2004,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1874,6 +2022,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(library)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1891,6 +2042,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -1916,7 +2070,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -1925,7 +2079,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isUnaryMinus(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, operator, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, WrapperClass, false)
                 isUnaryMinus(()
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
@@ -1966,9 +2120,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1995,6 +2152,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2011,6 +2170,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(operator)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2028,6 +2190,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -2053,7 +2218,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2061,7 +2226,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, mixin, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, mixin, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, mixin, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(mixin)
@@ -2101,9 +2266,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2130,6 +2298,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2146,6 +2316,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(mixin)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2163,6 +2336,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -2188,7 +2364,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2196,7 +2372,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, part, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, part, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, part, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(part)
@@ -2236,9 +2412,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2265,6 +2444,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2281,6 +2462,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(part)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2298,6 +2482,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -2323,7 +2510,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2332,7 +2519,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, set, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, set, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(set)
@@ -2372,9 +2559,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2401,6 +2591,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2417,6 +2609,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(set)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2434,6 +2629,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -2459,7 +2657,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2467,7 +2665,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, static, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, static, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, static, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(static)
@@ -2507,9 +2705,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2536,6 +2737,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2552,6 +2755,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(static)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2569,6 +2775,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -2594,7 +2803,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, WrapperClass)
@@ -2602,7 +2811,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, typedef, DeclarationKind.Class, WrapperClass, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, typedef, DeclarationKind.Class, WrapperClass, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, typedef, WrapperClass)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(typedef)
@@ -2642,9 +2851,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2671,6 +2883,8 @@
                             parseReturnStatement())
                               listener: beginReturnStatement(return)
                               parseExpression(return)
+                                looksLikeOuterPatternEquals(return)
+                                  skipOuterPattern(return)
                                 parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(return, true, ConstantPatternContext.none)
                                     parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2687,6 +2901,9 @@
                       parseReturnStatement(;)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(typedef)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2704,6 +2921,9 @@
                                           listener: beginArguments(()
                                           allowedToShortcutParseExpression()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
+                                                skipObjectPatternRest(x)
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -2729,7 +2949,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(2, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 20, {, })
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 bcf9ba6..792c278 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
@@ -18,6 +18,8 @@
         parseFieldInitializerOpt(abstract, abstract, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -42,6 +44,8 @@
         parseFieldInitializerOpt(as, as, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -66,6 +70,8 @@
         parseFieldInitializerOpt(covariant, covariant, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -90,6 +96,8 @@
         parseFieldInitializerOpt(deferred, deferred, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -114,6 +122,8 @@
         parseFieldInitializerOpt(dynamic, dynamic, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -138,6 +148,8 @@
         parseFieldInitializerOpt(export, export, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -162,6 +174,8 @@
         parseFieldInitializerOpt(external, external, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -186,6 +200,8 @@
         parseFieldInitializerOpt(factory, factory, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -210,6 +226,8 @@
         parseFieldInitializerOpt(Function, Function, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -234,6 +252,8 @@
         parseFieldInitializerOpt(get, get, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -258,6 +278,8 @@
         parseFieldInitializerOpt(implements, implements, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -282,6 +304,8 @@
         parseFieldInitializerOpt(import, import, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -306,6 +330,8 @@
         parseFieldInitializerOpt(interface, interface, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -330,6 +356,8 @@
         parseFieldInitializerOpt(library, library, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -354,6 +382,8 @@
         parseFieldInitializerOpt(operator, operator, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -378,6 +408,8 @@
         parseFieldInitializerOpt(mixin, mixin, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -402,6 +434,8 @@
         parseFieldInitializerOpt(part, part, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -426,6 +460,8 @@
         parseFieldInitializerOpt(set, set, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -450,6 +486,8 @@
         parseFieldInitializerOpt(static, static, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -474,6 +512,8 @@
         parseFieldInitializerOpt(typedef, typedef, null, null, null, null, null, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
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 80cc1c6..c9b7389 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
@@ -44,9 +44,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -73,6 +76,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -89,6 +94,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(abstract)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -106,6 +114,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -175,9 +186,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -204,6 +218,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -220,6 +236,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(as)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -237,6 +256,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -306,9 +328,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -335,6 +360,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -351,6 +378,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(covariant)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -368,6 +398,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -437,9 +470,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -466,6 +502,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -482,6 +520,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(deferred)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -499,6 +540,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -568,9 +612,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -597,6 +644,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -613,6 +662,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(dynamic)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -630,6 +682,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -699,9 +754,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -728,6 +786,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -744,6 +804,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(export)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -761,6 +824,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -830,9 +896,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -859,6 +928,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -875,6 +946,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(external)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -892,6 +966,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -961,9 +1038,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -990,6 +1070,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1006,6 +1088,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(factory)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1023,6 +1108,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1092,9 +1180,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1121,6 +1212,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1137,6 +1230,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(Function)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1154,6 +1250,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1223,9 +1322,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1252,6 +1354,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1268,6 +1372,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(get)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1285,6 +1392,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1354,9 +1464,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1383,6 +1496,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1399,6 +1514,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(implements)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1416,6 +1534,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1485,9 +1606,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1514,6 +1638,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1530,6 +1656,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(import)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1547,6 +1676,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1616,9 +1748,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1645,6 +1780,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1661,6 +1798,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(interface)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1678,6 +1818,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1747,9 +1890,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1776,6 +1922,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1792,6 +1940,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(library)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1809,6 +1960,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -1878,9 +2032,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1907,6 +2064,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1923,6 +2082,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(operator)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1940,6 +2102,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -2009,9 +2174,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -2038,6 +2206,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2054,6 +2224,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(mixin)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2071,6 +2244,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -2140,9 +2316,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -2169,6 +2348,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2185,6 +2366,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(part)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2202,6 +2386,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -2271,9 +2458,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -2300,6 +2490,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2316,6 +2508,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(set)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2333,6 +2528,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -2402,9 +2600,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -2431,6 +2632,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2447,6 +2650,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(static)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2464,6 +2670,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -2533,9 +2742,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(x)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -2562,6 +2774,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2578,6 +2792,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(typedef)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2595,6 +2812,9 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(x)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
index b997c5e..57f1309 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block2_prime.dart.intertwined.expect
@@ -136,6 +136,9 @@
                 looksLikeLocalFunction(onX)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(onX)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
index e6d6b4b..d682609 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3.dart.intertwined.expect
@@ -130,6 +130,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(})
                     parseExpression(})
+                      looksLikeOuterPatternEquals(})
+                        skipOuterPattern(})
                       parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(}, true, ConstantPatternContext.none)
                           parsePrimary(}, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
index 5914263..81f5c98 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block3_prime.dart.intertwined.expect
@@ -103,6 +103,9 @@
                 looksLikeLocalFunction(onX)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(toString)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
index c4e3fcd..1e7e518 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4.dart.intertwined.expect
@@ -124,6 +124,8 @@
                   looksLikeLocalFunction(=)
                   parseExpressionStatement(})
                     parseExpression(})
+                      looksLikeOuterPatternEquals(})
+                        skipOuterPattern(})
                       parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(}, true, ConstantPatternContext.none)
                           parsePrimary(}, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
index 5e33d65..9d06aa0 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block4_prime.dart.intertwined.expect
@@ -103,6 +103,9 @@
                 looksLikeLocalFunction(onX)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(onX)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
index 41bc093..0e03496 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block5_prime.dart.intertwined.expect
@@ -103,6 +103,9 @@
                 looksLikeLocalFunction(onX)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(onX)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
index 6de2f95..a9f04ab 100644
--- a/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/call_on_after_try_block_prime.dart.intertwined.expect
@@ -91,6 +91,9 @@
                 looksLikeLocalFunction(onX)
                 parseExpressionStatement(})
                   parseExpression(})
+                    looksLikeOuterPatternEquals(})
+                      skipOuterPattern(})
+                        skipObjectPatternRest(onX)
                     parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(}, true, ConstantPatternContext.none)
                         parsePrimary(}, expression, ConstantPatternContext.none)
@@ -106,6 +109,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
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 d56304c..bd44ad0 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 95fe981..128f465 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 f23b9dd..cd8078b 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 36dca41..32f2ea4 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 12c5549..aefdfa1 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
@@ -45,6 +45,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -52,6 +54,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(e)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
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 570aaf7..2469025 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
@@ -45,6 +45,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -52,6 +54,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(f)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
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 8aaef98..373c5d3 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart
deleted file mode 100644
index 2460f73..0000000
--- a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart
+++ /dev/null
@@ -1,47 +0,0 @@
-class C() {}
-class C(a) {}
-class C(a b) {}
-class C(var a) {}
-class C(final a) {}
-class C(var a b) {}
-class C(final a b) {}
-class C(var f()) {}
-class C(final f()) {}
-class C(var void f()) {}
-class C(final void f()) {}
-class C(var f<T>()) {}
-class C(final f<T>()) {}
-class C(var void f<T>()) {}
-class C(final void f<T>()) {}
-
-enum E() {}
-enum E(a) {}
-enum E(a b) {}
-enum E(var a) {}
-enum E(final a) {}
-enum E(var a b) {}
-enum E(final a b) {}
-enum E(var f()) {}
-enum E(final f()) {}
-enum E(var void f()) {}
-enum E(final void f()) {}
-enum E(var f<T>()) {}
-enum E(final f<T>()) {}
-enum E(var void f<T>()) {}
-enum E(final void f<T>()) {}
-
-extension type ET() {}
-extension type ET(a) {}
-extension type ET(a b) {}
-extension type ET(var a) {}
-extension type ET(final a) {}
-extension type ET(var a b) {}
-extension type ET(final a b) {}
-extension type ET(var f()) {}
-extension type ET(final f()) {}
-extension type ET(var void f()) {}
-extension type ET(final void f()) {}
-extension type ET(var f<T>()) {}
-extension type ET(final f<T>()) {}
-extension type ET(var void f<T>()) {}
-extension type ET(final void f<T>()) {}
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.expect b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.expect
deleted file mode 100644
index 400033e..0000000
--- a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.expect
+++ /dev/null
@@ -1,1462 +0,0 @@
-Problems reported:
-
-parser/general/declaring_parameter_pre_feature:6:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var a b) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:8:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var f()) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:9:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(final f()) {}
-        ^^^^^
-
-parser/general/declaring_parameter_pre_feature:10:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var void f()) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:10:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var void f()) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:11:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(final void f()) {}
-        ^^^^^
-
-parser/general/declaring_parameter_pre_feature:12:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var f<T>()) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:13:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(final f<T>()) {}
-        ^^^^^
-
-parser/general/declaring_parameter_pre_feature:14:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var void f<T>()) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:14:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(var void f<T>()) {}
-        ^^^
-
-parser/general/declaring_parameter_pre_feature:15:9: This requires the experimental 'declaring-constructors' language feature to be enabled.
-class C(final void f<T>()) {}
-        ^^^^^
-
-parser/general/declaring_parameter_pre_feature:22:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var a b) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:24:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var f()) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:25:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(final f()) {}
-       ^^^^^
-
-parser/general/declaring_parameter_pre_feature:26:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var void f()) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:26:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var void f()) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:27:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(final void f()) {}
-       ^^^^^
-
-parser/general/declaring_parameter_pre_feature:28:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var f<T>()) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:29:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(final f<T>()) {}
-       ^^^^^
-
-parser/general/declaring_parameter_pre_feature:30:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var void f<T>()) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:30:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(var void f<T>()) {}
-       ^^^
-
-parser/general/declaring_parameter_pre_feature:31:8: This requires the experimental 'declaring-constructors' language feature to be enabled.
-enum E(final void f<T>()) {}
-       ^^^^^
-
-parser/general/declaring_parameter_pre_feature:38:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var a b) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:40:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var f()) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:41:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(final f()) {}
-                  ^^^^^
-
-parser/general/declaring_parameter_pre_feature:42:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var void f()) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:42:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var void f()) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:43:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(final void f()) {}
-                  ^^^^^
-
-parser/general/declaring_parameter_pre_feature:44:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var f<T>()) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:45:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(final f<T>()) {}
-                  ^^^^^
-
-parser/general/declaring_parameter_pre_feature:46:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var void f<T>()) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:46:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(var void f<T>()) {}
-                  ^^^
-
-parser/general/declaring_parameter_pre_feature:47:19: This requires the experimental 'declaring-constructors' language feature to be enabled.
-extension type ET(final void f<T>()) {}
-                  ^^^^^
-
-beginCompilationUnit(class)
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(a)
-          endMetadataStar(0)
-          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-            handleNoType(()
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(a)
-          endMetadataStar(0)
-          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleNoType(var)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleNoType(final)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(var)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(final)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(var)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(final)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(class)
-  endMetadataStar(0)
-  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-    handleIdentifier(C, classOrMixinDeclaration)
-    handleNoTypeVariables(()
-    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleClassHeader(class, class, null)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(a)
-          endMetadataStar(0)
-          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-            handleNoType(()
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(a)
-          endMetadataStar(0)
-          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleNoType(var)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleNoType(final)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(var)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(final)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(var)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(final)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(enum)
-  endMetadataStar(0)
-  beginEnumDeclarationPrelude(enum)
-    handleIdentifier(E, enumDeclaration)
-    handleNoTypeVariables(()
-    beginEnumDeclaration(enum, null, enum, E)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, false)
-      handleEnumNoWithClause()
-      handleImplements(null, 0)
-      handleEnumHeader(null, enum, {)
-      beginEnumBody({)
-        handleEnumElements(}, 0)
-      endEnumBody({, })
-    endEnumDeclaration(enum, enum, {, 0, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(a)
-          endMetadataStar(0)
-          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-            handleNoType(()
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(a)
-          endMetadataStar(0)
-          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleNoType(var)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleNoType(final)
-            handleIdentifier(a, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleIdentifier(a, typeReference)
-            handleNoTypeArguments(b)
-            handleType(a, null)
-            handleIdentifier(b, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(var)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleNoType(final)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            handleNoTypeVariables(()
-            beginFunctionTypedFormalParameter(()
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(var)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleNoType(final)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(var)
-          endMetadataStar(0)
-          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(extension)
-  endMetadataStar(0)
-  beginExtensionDeclarationPrelude(extension)
-    handleNoTypeVariables(()
-    beginExtensionTypeDeclaration(null, extension, ET)
-      beginPrimaryConstructor(()
-        beginFormalParameters((, MemberKind.PrimaryConstructor)
-          beginMetadataStar(final)
-          endMetadataStar(0)
-          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-            handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-            beginTypeVariables(<)
-              beginMetadataStar(T)
-              endMetadataStar(0)
-              handleIdentifier(T, typeVariableDeclaration)
-              beginTypeVariable(T)
-                handleTypeVariablesDefined(T, 1)
-                handleNoType(T)
-              endTypeVariable(>, 0, null, null)
-            endTypeVariables(<, >)
-            beginFunctionTypedFormalParameter(<)
-              handleVoidKeyword(void)
-              beginFormalParameters((, MemberKind.FunctionTypedParameter)
-              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-            endFunctionTypedFormalParameter(f, null)
-            handleIdentifier(f, formalParameterDeclaration)
-            handleFormalParameterWithoutValue())
-          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-      endPrimaryConstructor((, null, false, true)
-      handleImplements(null, 0)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.intertwined.expect
deleted file mode 100644
index adee58f..0000000
--- a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.intertwined.expect
+++ /dev/null
@@ -1,2094 +0,0 @@
-parseUnit(class)
-  skipErrorTokens(class)
-  listener: beginCompilationUnit(class)
-  syntheticPreviousToken(class)
-  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
-    parseMetadataStar()
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(a)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-                  listener: handleNoType(()
-                  ensureIdentifier((, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(a)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  listener: handleNoType(var)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  listener: handleNoType(final)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleNoType(var)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleNoType(final)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleNoType(var)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleNoType(final)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(class)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
-        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
-        ensureIdentifier(class, classOrMixinDeclaration)
-          listener: handleIdentifier(C, classOrMixinDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
-        parseClass(C, class, class, null, C)
-          parsePrimaryConstructorOpt(C, null, false)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(C, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, false)
-          parseClassHeaderOpt(), class, class)
-            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
-              listener: handleNoType())
-              listener: handleClassExtends(null, 1)
-            parseClassWithClauseOpt())
-              listener: handleClassNoWithClause()
-            parseClassOrMixinOrEnumImplementsOpt())
-              listener: handleImplements(null, 0)
-            listener: handleClassHeader(class, class, null)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(a)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-                listener: handleNoType(()
-                ensureIdentifier((, formalParameterDeclaration)
-                  listener: handleIdentifier(a, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(a)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                listener: handleNoType(var)
-                ensureIdentifier(var, formalParameterDeclaration)
-                  listener: handleIdentifier(a, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(final)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                listener: handleNoType(final)
-                ensureIdentifier(final, formalParameterDeclaration)
-                  listener: handleIdentifier(a, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(final)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                listener: handleIdentifier(a, typeReference)
-                listener: handleNoTypeArguments(b)
-                listener: handleType(a, null)
-                ensureIdentifier(a, formalParameterDeclaration)
-                  listener: handleIdentifier(b, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                listener: handleNoTypeVariables(()
-                listener: beginFunctionTypedFormalParameter(()
-                listener: handleNoType(var)
-                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(var, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(final)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                listener: handleNoTypeVariables(()
-                listener: beginFunctionTypedFormalParameter(()
-                listener: handleNoType(final)
-                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(final, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                listener: handleNoTypeVariables(()
-                listener: beginFunctionTypedFormalParameter(()
-                listener: handleVoidKeyword(void)
-                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(void, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(final)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                listener: handleNoTypeVariables(()
-                listener: beginFunctionTypedFormalParameter(()
-                listener: handleVoidKeyword(void)
-                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(void, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                listener: beginTypeVariables(<)
-                listener: beginMetadataStar(T)
-                listener: endMetadataStar(0)
-                listener: handleIdentifier(T, typeVariableDeclaration)
-                listener: beginTypeVariable(T)
-                listener: handleTypeVariablesDefined(T, 1)
-                listener: handleNoType(T)
-                listener: endTypeVariable(>, 0, null, null)
-                listener: endTypeVariables(<, >)
-                listener: beginFunctionTypedFormalParameter(<)
-                listener: handleNoType(var)
-                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(var, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(final)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                listener: beginTypeVariables(<)
-                listener: beginMetadataStar(T)
-                listener: endMetadataStar(0)
-                listener: handleIdentifier(T, typeVariableDeclaration)
-                listener: beginTypeVariable(T)
-                listener: handleTypeVariablesDefined(T, 1)
-                listener: handleNoType(T)
-                listener: endTypeVariable(>, 0, null, null)
-                listener: endTypeVariables(<, >)
-                listener: beginFunctionTypedFormalParameter(<)
-                listener: handleNoType(final)
-                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(final, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(var)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                listener: beginTypeVariables(<)
-                listener: beginMetadataStar(T)
-                listener: endMetadataStar(0)
-                listener: handleIdentifier(T, typeVariableDeclaration)
-                listener: beginTypeVariable(T)
-                listener: handleTypeVariablesDefined(T, 1)
-                listener: handleNoType(T)
-                listener: endTypeVariable(>, 0, null, null)
-                listener: endTypeVariables(<, >)
-                listener: beginFunctionTypedFormalParameter(<)
-                listener: handleVoidKeyword(void)
-                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(void, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(enum)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseEnum(enum, null, enum)
-        listener: beginEnumDeclarationPrelude(enum)
-        ensureIdentifier(enum, enumDeclaration)
-          listener: handleIdentifier(E, enumDeclaration)
-        listener: handleNoTypeVariables(()
-        listener: beginEnumDeclaration(enum, null, enum, E)
-        parsePrimaryConstructorOpt(E, null, false)
-          listener: beginPrimaryConstructor(()
-          parseFormalParameters(E, MemberKind.PrimaryConstructor)
-            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                parseMetadataStar(()
-                  listener: beginMetadataStar(final)
-                  listener: endMetadataStar(0)
-                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                listener: beginTypeVariables(<)
-                listener: beginMetadataStar(T)
-                listener: endMetadataStar(0)
-                listener: handleIdentifier(T, typeVariableDeclaration)
-                listener: beginTypeVariable(T)
-                listener: handleTypeVariablesDefined(T, 1)
-                listener: handleNoType(T)
-                listener: endTypeVariable(>, 0, null, null)
-                listener: endTypeVariables(<, >)
-                listener: beginFunctionTypedFormalParameter(<)
-                listener: handleVoidKeyword(void)
-                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                listener: endFunctionTypedFormalParameter(f, null)
-                ensureIdentifier(void, formalParameterDeclaration)
-                  listener: handleIdentifier(f, formalParameterDeclaration)
-                listener: handleFormalParameterWithoutValue())
-                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-          listener: endPrimaryConstructor((, null, false, false)
-        parseEnumHeaderOpt(), enum)
-          parseEnumWithClauseOpt())
-            listener: handleEnumNoWithClause()
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-        listener: handleEnumHeader(null, enum, {)
-        listener: beginEnumBody({)
-        listener: handleEnumElements(}, 0)
-        listener: endEnumBody({, })
-        listener: endEnumDeclaration(enum, enum, {, 0, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(a)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-                  listener: handleNoType(()
-                  ensureIdentifier((, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(a)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  listener: handleNoType(var)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  listener: handleNoType(final)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(a, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  listener: handleIdentifier(a, typeReference)
-                  listener: handleNoTypeArguments(b)
-                  listener: handleType(a, null)
-                  ensureIdentifier(a, formalParameterDeclaration)
-                    listener: handleIdentifier(b, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleNoType(var)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleNoType(final)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: handleNoTypeVariables(()
-                  listener: beginFunctionTypedFormalParameter(()
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleNoType(var)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(var, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleNoType(final)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(final, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(var)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, var, var)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(extension)
-      listener: endMetadataStar(0)
-    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
-      parseExtension(extension, null, extension)
-        listener: beginExtensionDeclarationPrelude(extension)
-        parseExtensionTypeDeclaration(extension, type, null, extension, type)
-          listener: handleNoTypeVariables(()
-          listener: beginExtensionTypeDeclaration(null, extension, ET)
-          parsePrimaryConstructorOpt(ET, null, true)
-            listener: beginPrimaryConstructor(()
-            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
-              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
-                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
-                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                  parseMetadataStar(()
-                    listener: beginMetadataStar(final)
-                    listener: endMetadataStar(0)
-                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
-                  reportExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                    listener: handleExperimentNotEnabled(ExperimentalFlag.declaringConstructors, final, final)
-                  listener: beginTypeVariables(<)
-                  listener: beginMetadataStar(T)
-                  listener: endMetadataStar(0)
-                  listener: handleIdentifier(T, typeVariableDeclaration)
-                  listener: beginTypeVariable(T)
-                  listener: handleTypeVariablesDefined(T, 1)
-                  listener: handleNoType(T)
-                  listener: endTypeVariable(>, 0, null, null)
-                  listener: endTypeVariables(<, >)
-                  listener: beginFunctionTypedFormalParameter(<)
-                  listener: handleVoidKeyword(void)
-                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
-                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
-                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
-                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
-                  listener: endFunctionTypedFormalParameter(f, null)
-                  ensureIdentifier(void, formalParameterDeclaration)
-                    listener: handleIdentifier(f, formalParameterDeclaration)
-                  listener: handleFormalParameterWithoutValue())
-                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
-                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
-            listener: endPrimaryConstructor((, null, false, true)
-          parseClassOrMixinOrEnumImplementsOpt())
-            listener: handleImplements(null, 0)
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  reportAllErrorTokens(class)
-  listener: endCompilationUnit(45, )
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 d637216c..0890f86 100644
--- a/pkg/front_end/parser_testcases/general/for.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/for.dart.intertwined.expect
@@ -49,6 +49,8 @@
                       parseVariableInitializerOpt(i)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -63,6 +65,9 @@
                     ensureSemicolon(0)
                     parseExpressionStatement(;)
                       parseExpression(;)
+                        looksLikeOuterPatternEquals(;)
+                          skipOuterPattern(;)
+                            skipObjectPatternRest(i)
                         parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(;, true, ConstantPatternContext.none)
                             parsePrimary(;, expression, ConstantPatternContext.none)
@@ -84,6 +89,9 @@
                       ensureSemicolon(10)
                       listener: handleExpressionStatement(i, ;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(i)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
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 a799955..ff8e482df 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
@@ -34,6 +34,8 @@
                 parseForLoopPartsStart(null, for, ForPartsContext(null))
                   parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                     parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                      skipOuterPattern(var)
+                        skipObjectPatternRest(i)
                       listener: beginMetadataStar(var)
                       listener: endMetadataStar(0)
                       listener: handleNoType(var)
@@ -53,6 +55,8 @@
                   parseForInLoopPartsRest(i, null, for, null, i)
                     listener: beginForInExpression([])
                     parseExpression(in)
+                      looksLikeOuterPatternEquals(in)
+                        skipOuterPattern(in)
                       parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(in, true, ConstantPatternContext.none)
                           parsePrimary(in, expression, ConstantPatternContext.none)
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 8fc8ade..c31dfb7 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(i)
                 looksLikeLocalFunction(i)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -55,6 +57,9 @@
                     parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, ForPartsContext(null))
                 parseForLoopPartsMid((, null, for)
                   parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
+                        skipObjectPatternRest(i)
                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression((, true, ConstantPatternContext.none)
                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -71,6 +76,8 @@
                   parseForInLoopPartsRest(i, null, for, null, i)
                     listener: beginForInExpression([])
                     parseExpression(in)
+                      looksLikeOuterPatternEquals(in)
+                        skipOuterPattern(in)
                       parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(in, true, ConstantPatternContext.none)
                           parsePrimary(in, expression, ConstantPatternContext.none)
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 b7fabd2..b4381f5 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
@@ -57,6 +57,9 @@
                     parseExpressionStatementOrDeclarationAfterModifiers((, (, null, null, null, ForPartsContext(null))
                 parseForLoopPartsMid((, null, for)
                   parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
+                        skipObjectPatternRest(i)
                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression((, true, ConstantPatternContext.none)
                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -80,6 +83,9 @@
                     ensureSemicolon(0)
                     parseExpressionStatement(;)
                       parseExpression(;)
+                        looksLikeOuterPatternEquals(;)
+                          skipOuterPattern(;)
+                            skipObjectPatternRest(i)
                         parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(;, true, ConstantPatternContext.none)
                             parsePrimary(;, expression, ConstantPatternContext.none)
@@ -101,6 +107,9 @@
                       ensureSemicolon(10)
                       listener: handleExpressionStatement(i, ;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(i)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
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 863a477..0dfcb14 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
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 79c3cca..711b3d1 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
@@ -18,12 +18,17 @@
         parseFieldInitializerOpt(typeArgs_closeBrace, typeArgs_closeBrace, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
                   listener: handleNoTypeArguments({)
                   parseLiteralSetOrMapSuffix(=, null)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
+                          skipObjectPatternRest(f)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -64,12 +69,17 @@
         parseFieldInitializerOpt(typeArgs_closeBracket, typeArgs_closeBracket, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
                   listener: handleNoTypeArguments([)
                   parseLiteralListSuffix(=, null)
                     parseExpression([)
+                      looksLikeOuterPatternEquals([)
+                        skipOuterPattern([)
+                          skipObjectPatternRest(f)
                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression([, true, ConstantPatternContext.none)
                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -110,6 +120,9 @@
         parseFieldInitializerOpt(typeArgs_closeParen, typeArgs_closeParen, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(g)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -125,6 +138,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(f)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -166,12 +182,17 @@
         parseFieldInitializerOpt(typeArgs_colon, typeArgs_colon, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
                   listener: handleNoTypeArguments({)
                   parseLiteralSetOrMapSuffix(=, null)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
+                          skipObjectPatternRest(f)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -193,6 +214,8 @@
                         listener: endTypeArguments(2, <, >)
                         listener: handleTypeArgumentApplication(<)
                     parseExpression(:)
+                      looksLikeOuterPatternEquals(:)
+                        skipOuterPattern(:)
                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -219,12 +242,17 @@
         parseFieldInitializerOpt(typeArgs_comma, typeArgs_comma, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
                   listener: handleNoTypeArguments([)
                   parseLiteralListSuffix(=, null)
                     parseExpression([)
+                      looksLikeOuterPatternEquals([)
+                        skipOuterPattern([)
+                          skipObjectPatternRest(f)
                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression([, true, ConstantPatternContext.none)
                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -246,6 +274,8 @@
                         listener: endTypeArguments(2, <, >)
                         listener: handleTypeArgumentApplication(<)
                     parseExpression(,)
+                      looksLikeOuterPatternEquals(,)
+                        skipOuterPattern(,)
                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -271,6 +301,9 @@
         parseFieldInitializerOpt(typeArgs_equals, typeArgs_equals, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -317,6 +350,9 @@
         parseFieldInitializerOpt(typeArgs_not_equals, typeArgs_not_equals, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -363,6 +399,9 @@
         parseFieldInitializerOpt(typeArgs_openParen, typeArgs_openParen, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -404,6 +443,9 @@
         parseFieldInitializerOpt(typeArgs_period_methodInvocation, typeArgs_period_methodInvocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parseImplicitCreationExpression(=, <, ComplexTypeParamOrArgInfo(start: <, inDeclaration: false, allowsVariance: false, typeArgumentCount: 2, skipEnd: >, recovered: false))
@@ -448,6 +490,9 @@
         parseFieldInitializerOpt(typeArgs_period_methodInvocation_generic, typeArgs_period_methodInvocation_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -504,6 +549,9 @@
         parseFieldInitializerOpt(typeArgs_period_propertyAccess, typeArgs_period_propertyAccess, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -553,6 +601,9 @@
         parseFieldInitializerOpt(typeArgs_semicolon, typeArgs_semicolon, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -592,6 +643,9 @@
         parseFieldInitializerOpt(operators_ampersand, operators_ampersand, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -607,6 +661,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -633,6 +690,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -693,6 +753,9 @@
         parseFieldInitializerOpt(operators_as, operators_as, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -708,6 +771,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -734,6 +800,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -781,6 +850,9 @@
         parseFieldInitializerOpt(operators_asterisk, operators_asterisk, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -796,6 +868,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -822,6 +897,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -882,6 +960,9 @@
         parseFieldInitializerOpt(operators_bang_openBracket, operators_bang_openBracket, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -897,6 +978,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -923,6 +1007,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -943,6 +1030,9 @@
                                           listener: handleNoTypeArguments([)
                                           parseLiteralListSuffix(!, null)
                                             parseExpression([)
+                                              looksLikeOuterPatternEquals([)
+                                                skipOuterPattern([)
+                                                  skipObjectPatternRest(d)
                                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -978,6 +1068,9 @@
         parseFieldInitializerOpt(operators_bang_paren, operators_bang_paren, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -993,6 +1086,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1019,6 +1115,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1040,6 +1139,9 @@
                                             parseParenthesizedExpressionOrRecordLiteral(!, null, ConstantPatternContext.none)
                                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                                               parseExpression(()
+                                                looksLikeOuterPatternEquals(()
+                                                  skipOuterPattern(()
+                                                    skipObjectPatternRest(d)
                                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -1076,6 +1178,9 @@
         parseFieldInitializerOpt(operators_bar, operators_bar, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1091,6 +1196,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1117,6 +1225,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1177,6 +1288,9 @@
         parseFieldInitializerOpt(operators_caret, operators_caret, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1192,6 +1306,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1218,6 +1335,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1278,6 +1398,9 @@
         parseFieldInitializerOpt(operators_is, operators_is, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1293,6 +1416,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1319,6 +1445,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1376,6 +1505,9 @@
         parseFieldInitializerOpt(operators_lessThan, operators_lessThan, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1440,6 +1572,9 @@
         parseFieldInitializerOpt(operators_minus, operators_minus, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1455,6 +1590,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1481,6 +1619,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1529,6 +1670,9 @@
         parseFieldInitializerOpt(operators_openBracket, operators_openBracket, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1544,6 +1688,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1570,6 +1717,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1588,6 +1738,9 @@
                                       listener: handleNoTypeArguments([)
                                       parseLiteralListSuffix(>, null)
                                         parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                              skipObjectPatternRest(d)
                                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression([, true, ConstantPatternContext.none)
                                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -1622,6 +1775,9 @@
         parseFieldInitializerOpt(operators_openBracket_error, operators_openBracket_error, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1637,6 +1793,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1663,6 +1822,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1681,6 +1843,9 @@
                                       listener: handleNoTypeArguments([)
                                       parseLiteralListSuffix(>, null)
                                         parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                              skipObjectPatternRest(d)
                                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression([, true, ConstantPatternContext.none)
                                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -1730,6 +1895,9 @@
         parseFieldInitializerOpt(operators_openBracket_unambiguous, operators_openBracket_unambiguous, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1745,6 +1913,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1771,6 +1942,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1789,6 +1963,9 @@
                                       listener: handleNoTypeArguments([)
                                       parseLiteralListSuffix(>, null)
                                         parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                              skipObjectPatternRest(d)
                                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression([, true, ConstantPatternContext.none)
                                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -1801,6 +1978,9 @@
                                                       listener: handleNoArguments(,)
                                                     listener: handleSend(d, d)
                                         parseExpression(,)
+                                          looksLikeOuterPatternEquals(,)
+                                            skipOuterPattern(,)
+                                              skipObjectPatternRest(e)
                                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1835,6 +2015,9 @@
         parseFieldInitializerOpt(operators_percent, operators_percent, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1850,6 +2033,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1876,6 +2062,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1936,6 +2125,9 @@
         parseFieldInitializerOpt(operators_period_period, operators_period_period, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1951,6 +2143,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1977,6 +2172,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2039,6 +2237,9 @@
         parseFieldInitializerOpt(operators_plus, operators_plus, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2054,6 +2255,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2080,6 +2284,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2142,6 +2349,9 @@
         parseFieldInitializerOpt(operators_question, operators_question, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2157,6 +2367,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2183,6 +2396,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2247,6 +2463,9 @@
         parseFieldInitializerOpt(operators_question_period_methodInvocation, operators_question_period_methodInvocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2262,6 +2481,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2288,6 +2510,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2348,6 +2573,9 @@
         parseFieldInitializerOpt(operators_question_period_methodInvocation_generic, operators_question_period_methodInvocation_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2363,6 +2591,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2389,6 +2620,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2453,6 +2687,9 @@
         parseFieldInitializerOpt(operators_question_period_period, operators_question_period_period, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2468,6 +2705,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2494,6 +2734,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2526,6 +2769,9 @@
                               rewriter()
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(toString)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2562,6 +2808,9 @@
         parseFieldInitializerOpt(operators_question_period_propertyAccess, operators_question_period_propertyAccess, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2577,6 +2826,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2603,6 +2855,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2660,6 +2915,9 @@
         parseFieldInitializerOpt(operators_question_question, operators_question_question, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2675,6 +2933,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2701,6 +2962,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2761,6 +3025,9 @@
         parseFieldInitializerOpt(operators_slash, operators_slash, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2776,6 +3043,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2802,6 +3072,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2862,6 +3135,9 @@
         parseFieldInitializerOpt(operators_tilde_slash, operators_tilde_slash, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -2877,6 +3153,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(a)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2903,6 +3182,9 @@
                                 listener: endBinaryExpression(<, b)
                             allowedToShortcutParseExpression()
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(c)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
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 04c3455..c7faab1 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
@@ -18,6 +18,9 @@
         parseFieldInitializerOpt(simpleIdentifier, simpleIdentifier, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -57,6 +60,9 @@
         parseFieldInitializerOpt(method, method, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -110,6 +116,9 @@
         parseFieldInitializerOpt(prefixedIdentifier, prefixedIdentifier, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(f)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -159,6 +168,9 @@
         parseFieldInitializerOpt(three_identifiers, three_identifiers, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(ClassName)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/issue_18090.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_18090.dart.intertwined.expect
index 01b87d5..4dc681c 100644
--- a/pkg/front_end/parser_testcases/general/issue_18090.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_18090.dart.intertwined.expect
Binary files differ
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 548025e..d943793 100644
--- a/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_41121.dart.expect
@@ -63,12 +63,12 @@
             handleType(Configuration, null)
             handleIdentifier(_configuration, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, Configuration, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Configuration, ;)
         endMember()
         beginMetadataStar(ConfigurationService)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ConfigurationService, ConfigurationService)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, ConfigurationService, ConfigurationService)
             handleNoType(;)
             handleIdentifier(ConfigurationService, methodDeclaration)
             handleNoTypeVariables(()
@@ -110,12 +110,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, ConfigurationService, (, :, })
+          endConstructor(DeclarationKind.Class, ConfigurationService, null, (, :, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, set, configuration, ConfigurationService)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, configuration, ConfigurationService)
             handleVoidKeyword(void)
             handleIdentifier(configuration, methodDeclaration)
             handleNoTypeVariables(()
@@ -160,12 +160,12 @@
             handleRecoverableError(ConstructorWithWrongName, configuration, configuration)
             handleRecoverableError(SetterConstructor, set, set)
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(set, void, (, :, })
+          endConstructor(DeclarationKind.Class, void, null, (, :, })
         endMember()
         beginMetadataStar(Configuration)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, get, configuration, ConfigurationService)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, configuration, ConfigurationService)
             handleIdentifier(Configuration, typeReference)
             handleNoTypeArguments(get)
             handleType(Configuration, null)
@@ -215,12 +215,12 @@
             handleRecoverableError(ConstructorWithWrongName, configuration, configuration)
             handleRecoverableError(GetterConstructor, get, get)
             handleRecoverableError(ConstructorWithReturnType, Configuration, Configuration)
-          endClassConstructor(get, Configuration, (, :, })
+          endConstructor(DeclarationKind.Class, Configuration, null, (, :, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method, ConfigurationService)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, method, ConfigurationService)
             handleVoidKeyword(void)
             handleIdentifier(method, methodDeclaration)
             handleNoTypeVariables(()
@@ -241,12 +241,12 @@
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, method, method)
             handleRecoverableError(ConstructorWithReturnType, void, void)
-          endClassConstructor(null, void, (, :, })
+          endConstructor(DeclarationKind.Class, void, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, ConfigurationService)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, ConfigurationService)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -266,7 +266,7 @@
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
             handleRecoverableError(ConstructorWithWrongName, Foo, Foo)
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
@@ -298,7 +298,7 @@
             handleAsyncModifier(null, null)
             handleThisExpression(this, expression)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, Configuration, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, Configuration, =>, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 62eab35..ad344cb 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
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(_configuration, fieldDeclaration)
                 parseFieldInitializerOpt(_configuration, _configuration, null, null, null, null, null, DeclarationKind.Class, ConfigurationService)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, Configuration, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, Configuration, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ConfigurationService)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, ConfigurationService)
@@ -51,8 +51,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, ConfigurationService, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, ConfigurationService, ConfigurationService)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, ConfigurationService, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, ConfigurationService, ConfigurationService)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(ConfigurationService, methodDeclaration)
@@ -84,6 +84,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(configuration)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -108,6 +111,9 @@
                       listener: beginInitializer(_configuration)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -141,7 +147,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, ConfigurationService, (, :, })
+                listener: endConstructor(DeclarationKind.Class, ConfigurationService, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, ConfigurationService)
@@ -149,8 +155,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), set, configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, configuration, ConfigurationService)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), set, null, configuration, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, set, null, configuration, ConfigurationService)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
                   listener: handleIdentifier(configuration, methodDeclaration)
@@ -181,6 +187,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(configuration)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -205,6 +214,9 @@
                       listener: beginInitializer(_configuration)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -245,7 +257,7 @@
                   listener: handleRecoverableError(SetterConstructor, set, set)
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(set, void, (, :, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Configuration)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, ConfigurationService)
@@ -253,8 +265,8 @@
                 listener: beginMetadataStar(Configuration)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, configuration, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, configuration, ConfigurationService)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), get, null, configuration, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, get, null, configuration, ConfigurationService)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(get)
                 listener: handleType(Configuration, null)
@@ -278,6 +290,9 @@
                       parseAssert(:, Assert.Initializer)
                         listener: beginAssert(assert, Assert.Initializer)
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -302,6 +317,9 @@
                       listener: beginInitializer(_configuration)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -350,6 +368,9 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -372,7 +393,7 @@
                   listener: handleRecoverableError(GetterConstructor, get, get)
                 reportRecoverableError(Configuration, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, Configuration, Configuration)
-                listener: endClassConstructor(get, Configuration, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Configuration, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, ConfigurationService)
@@ -380,8 +401,8 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, method, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, method, ConfigurationService)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, method, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, method, ConfigurationService)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
                   listener: handleIdentifier(method, methodDeclaration)
@@ -400,6 +421,9 @@
                       listener: beginInitializer(_configuration)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -431,7 +455,7 @@
                   listener: handleRecoverableError(ConstructorWithWrongName, method, method)
                 reportRecoverableError(void, ConstructorWithReturnType)
                   listener: handleRecoverableError(ConstructorWithReturnType, void, void)
-                listener: endClassConstructor(null, void, (, :, })
+                listener: endConstructor(DeclarationKind.Class, void, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, ConfigurationService)
@@ -440,8 +464,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, ConfigurationService, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, ConfigurationService)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, ConfigurationService, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, ConfigurationService)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -460,6 +484,9 @@
                       listener: beginInitializer(_configuration)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(_configuration)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -489,7 +516,7 @@
                   listener: endBlockFunctionBody(0, {, })
                 reportRecoverableError(Foo, ConstructorWithWrongName)
                   listener: handleRecoverableError(ConstructorWithWrongName, Foo, Foo)
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
@@ -526,7 +553,7 @@
                 listener: beginMetadataStar(Configuration)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, foo, DeclarationKind.Class, Configuration, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), get, null, foo, DeclarationKind.Class, Configuration, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, foo, Configuration)
                 listener: handleIdentifier(Configuration, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -547,6 +574,8 @@
                 parseFunctionBody(foo, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -555,7 +584,7 @@
                     ensureSemicolon(this)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, Configuration, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, Configuration, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 59edcde..0d9a34d 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
@@ -21,6 +21,8 @@
               listener: beginArguments(()
               allowedToShortcutParseExpression()
               parseExpression(()
+                looksLikeOuterPatternEquals(()
+                  skipOuterPattern(()
                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                   parseUnaryExpression((, true, ConstantPatternContext.none)
                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -54,6 +56,8 @@
                   listener: beginArguments(()
                   allowedToShortcutParseExpression()
                   parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression((, true, ConstantPatternContext.none)
                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -89,6 +93,8 @@
                   listener: beginArguments(()
                   allowedToShortcutParseExpression()
                   parseExpression(()
+                    looksLikeOuterPatternEquals(()
+                      skipOuterPattern(()
                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression((, true, ConstantPatternContext.none)
                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -130,6 +136,8 @@
                         listener: beginArguments(()
                         allowedToShortcutParseExpression()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -195,6 +203,8 @@
                           listener: beginArguments(()
                           allowedToShortcutParseExpression()
                           parseExpression(()
+                            looksLikeOuterPatternEquals(()
+                              skipOuterPattern(()
                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -225,6 +235,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -263,6 +275,8 @@
                                   listener: beginArguments(()
                                   allowedToShortcutParseExpression()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -290,6 +304,8 @@
                       parseVariableInitializerOpt(f)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
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 fb17352..55edc21 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
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -175,6 +180,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -190,6 +198,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -216,6 +227,8 @@
                                         listener: endBinaryExpression(<, y)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -223,6 +236,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(o)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -291,6 +307,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -306,6 +325,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -313,6 +334,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -320,6 +343,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -338,6 +363,8 @@
                                                   parseFunctionBody(), true, false)
                                                     parseExpressionFunctionBody(=>, true)
                                                       parseExpression(=>)
+                                                        looksLikeOuterPatternEquals(=>)
+                                                          skipOuterPattern(=>)
                                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                             parsePrimary(=>, expression, ConstantPatternContext.none)
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 9b43a20..cf8b840 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
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -175,6 +180,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -190,6 +198,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -197,6 +207,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(x)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -225,6 +238,8 @@
                                                 listener: endParenthesizedExpression(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -232,6 +247,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(o)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -300,6 +318,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -315,6 +336,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -322,6 +345,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -329,6 +354,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -347,6 +374,8 @@
                                                   parseFunctionBody(), true, false)
                                                     parseExpressionFunctionBody(=>, true)
                                                       parseExpression(=>)
+                                                        looksLikeOuterPatternEquals(=>)
+                                                          skipOuterPattern(=>)
                                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                             parsePrimary(=>, expression, ConstantPatternContext.none)
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 0bb6b85..6331be9 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
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -175,6 +180,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -190,6 +198,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -217,6 +228,8 @@
                                         listener: endBinaryExpression(<, y)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -230,6 +243,9 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
+                                                        skipObjectPatternRest(o)
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -292,6 +308,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -307,6 +326,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -314,6 +335,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -321,6 +344,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
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 2e3aa15..41b1e8f 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
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -175,6 +180,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -190,6 +198,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -197,6 +207,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(x)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -225,6 +238,8 @@
                                                 listener: endParenthesizedExpression(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -238,6 +253,9 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
+                                                        skipObjectPatternRest(o)
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -300,6 +318,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -315,6 +336,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -322,6 +345,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -329,6 +354,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
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 8ce1fda..7caa67e 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
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -187,6 +192,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -202,6 +210,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -229,6 +240,8 @@
                                         listener: endBinaryExpression(<, y)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -236,6 +249,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(o)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -266,6 +282,9 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
+                                                        skipObjectPatternRest(p)
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -328,6 +347,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -343,6 +365,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -350,6 +374,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -357,6 +383,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -364,6 +392,8 @@
                                               listener: handleLiteralInt(2)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
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 53c54f3..c325651 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
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -187,6 +192,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -202,6 +210,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -209,6 +219,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(x)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -237,6 +250,8 @@
                                                 listener: endParenthesizedExpression(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -244,6 +259,9 @@
                                               parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
+                                                      skipObjectPatternRest(o)
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -274,6 +292,9 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
+                                                        skipObjectPatternRest(p)
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -336,6 +357,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -351,6 +375,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -358,6 +384,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -365,6 +393,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -372,6 +402,8 @@
                                               listener: handleLiteralInt(2)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
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 70b6fd9..9a898f4 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
@@ -67,6 +67,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 24cf827..c4b4433 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
@@ -67,6 +67,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_05.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_05.dart.intertwined.expect
index 71aa8ee..0be88dd 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_05.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_05.dart.intertwined.expect
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -187,6 +192,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -202,6 +210,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -224,6 +235,9 @@
                                                       listener: beginArguments(()
                                                       allowedToShortcutParseExpression()
                                                       parseExpression(()
+                                                        looksLikeOuterPatternEquals(()
+                                                          skipOuterPattern(()
+                                                            skipObjectPatternRest(p)
                                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -333,6 +347,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -348,6 +365,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -414,6 +434,9 @@
                 looksLikeLocalFunction(g1)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g1)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -429,6 +452,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -436,6 +461,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -443,6 +470,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -450,6 +479,8 @@
                                               listener: handleLiteralInt(2)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -466,6 +497,9 @@
                 looksLikeLocalFunction(g2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(g2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -481,6 +515,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -488,6 +524,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -495,6 +533,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -502,6 +542,8 @@
                                               listener: handleLiteralInt(2)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_06.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_06.dart.expect
index 44d3219..5c9417e 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_06.dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_06.dart.expect
@@ -196,7 +196,7 @@
                 handleLiteralBool(true)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, bool, (, null, })
+          endMethod(DeclarationKind.Extension, null, bool, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
     endExtensionDeclaration(extension, extension, on, })
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_06.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_06.dart.intertwined.expect
index 6bdbce9..edc4be4 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_06.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_06.dart.intertwined.expect
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -186,6 +191,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -201,6 +209,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -234,6 +245,9 @@
                                                       listener: beginArguments(()
                                                       allowedToShortcutParseExpression()
                                                       parseExpression(()
+                                                        looksLikeOuterPatternEquals(()
+                                                          skipOuterPattern(()
+                                                            skipObjectPatternRest(p)
                                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -294,6 +308,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -309,6 +326,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -316,6 +335,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -323,6 +344,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -330,6 +353,8 @@
                                               listener: handleLiteralInt(2)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -364,7 +389,7 @@
                 listener: beginMetadataStar(bool)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Extension, null, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, null)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -404,6 +429,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -414,7 +441,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, bool, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, bool, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 1, {, })
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_07.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_07.dart.intertwined.expect
index eabff99..8b4a5ec 100644
--- a/pkg/front_end/parser_testcases/general/issue_45848_07.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/issue_45848_07.dart.intertwined.expect
@@ -56,6 +56,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -71,6 +74,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -211,6 +216,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -226,6 +234,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -317,6 +328,9 @@
                 looksLikeLocalFunction(g)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(g)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -332,6 +346,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -339,6 +355,8 @@
                                               listener: handleLiteralInt(0)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -346,6 +364,8 @@
                                               listener: handleLiteralInt(1)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -353,6 +373,8 @@
                                               listener: handleLiteralInt(2)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -360,6 +382,8 @@
                                               listener: handleLiteralInt(3)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -367,6 +391,8 @@
                                               listener: handleLiteralInt(5)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
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 f818a98..9ccba43 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -75,6 +81,9 @@
                                         listener: endBinaryExpression(<, c)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(d)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -101,6 +110,8 @@
                                         listener: endBinaryExpression(<, e)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -114,6 +125,8 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
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 4fc8ce9..65744ba 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -75,6 +81,9 @@
                                         listener: endBinaryExpression(<, c)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(d)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -101,6 +110,9 @@
                                         listener: endBinaryExpression(<, e)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(f)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -127,6 +139,8 @@
                                         listener: endBinaryExpression(<, g)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -140,6 +154,8 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>>>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
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 3017749..9c7f6a6 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -75,6 +81,9 @@
                                         listener: endBinaryExpression(<, c)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(as)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -96,6 +105,8 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
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 509ad75..ccad02a 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -75,6 +81,9 @@
                                         listener: endBinaryExpression(<, c)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(d)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -101,6 +110,9 @@
                                         listener: endBinaryExpression(<, e)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(as)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -122,6 +134,8 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
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 e424f0f..f5a9dc8 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -75,6 +81,9 @@
                                         listener: endBinaryExpression(<, c)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(d)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -101,6 +110,9 @@
                                         listener: endBinaryExpression(<, e)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(f)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -127,6 +139,9 @@
                                         listener: endBinaryExpression(<, g)
                                     allowedToShortcutParseExpression()
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
+                                          skipObjectPatternRest(as)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -148,6 +163,8 @@
                                                 parseParenthesizedExpressionOrRecordLiteral(>>>, null, ConstantPatternContext.none)
                                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/issue_60785.crash_dart b/pkg/front_end/parser_testcases/general/issue_60785.crash_dart
index 449aec6..673ce37 100644
--- a/pkg/front_end/parser_testcases/general/issue_60785.crash_dart
+++ b/pkg/front_end/parser_testcases/general/issue_60785.crash_dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 void foo(String s) {
   switch (s) {
     case 'foo') {
diff --git a/pkg/front_end/parser_testcases/general/issue_60785.crash_dart.expect b/pkg/front_end/parser_testcases/general/issue_60785.crash_dart.expect
index 6c1ec98..8e09c46 100644
--- a/pkg/front_end/parser_testcases/general/issue_60785.crash_dart.expect
+++ b/pkg/front_end/parser_testcases/general/issue_60785.crash_dart.expect
@@ -1,34 +1,34 @@
 Problems reported:
 
-parser/general/issue_60785.crash:3:15: Expected ':' before this.
+parser/general/issue_60785.crash:4:15: Expected ':' before this.
     case 'foo') {
               ^
 
-parser/general/issue_60785.crash:3:15: Expected an identifier, but got ')'.
+parser/general/issue_60785.crash:4:15: Expected an identifier, but got ')'.
     case 'foo') {
               ^
 
-parser/general/issue_60785.crash:3:10: Expected ';' after this.
+parser/general/issue_60785.crash:4:10: Expected ';' after this.
     case 'foo') {
          ^^^^^
 
-parser/general/issue_60785.crash:3:15: Unexpected token ')'.
+parser/general/issue_60785.crash:4:15: Unexpected token ')'.
     case 'foo') {
               ^
 
-parser/general/issue_60785.crash:5:5: Expected an identifier, but got 'else'.
+parser/general/issue_60785.crash:6:5: Expected an identifier, but got 'else'.
   } else {
     ^^^^
 
-parser/general/issue_60785.crash:5:3: Expected ';' after this.
+parser/general/issue_60785.crash:6:3: Expected ';' after this.
   } else {
   ^
 
-parser/general/issue_60785.crash:5:5: Unexpected token 'else'.
+parser/general/issue_60785.crash:6:5: Unexpected token 'else'.
   } else {
     ^^^^
 
-parser/general/issue_60785.crash:2:14: Can't find '}' to match '{'.
+parser/general/issue_60785.crash:3:14: Can't find '}' to match '{'.
   switch (s) {
              ^
 
diff --git a/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart
new file mode 100644
index 0000000..449aec6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart
@@ -0,0 +1,8 @@
+void foo(String s) {
+  switch (s) {
+    case 'foo') {
+    print('foo');
+  } else {
+    print('bar');
+  }
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.expect b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.expect
new file mode 100644
index 0000000..d1338eb5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.expect
@@ -0,0 +1,118 @@
+Problems reported:
+
+parser/general/issue_60785_2.crash:3:15: Expected ':' before this.
+    case 'foo') {
+              ^
+
+parser/general/issue_60785_2.crash:3:15: Expected an identifier, but got ')'.
+    case 'foo') {
+              ^
+
+parser/general/issue_60785_2.crash:3:10: Expected ';' after this.
+    case 'foo') {
+         ^^^^^
+
+parser/general/issue_60785_2.crash:3:15: Unexpected token ')'.
+    case 'foo') {
+              ^
+
+parser/general/issue_60785_2.crash:5:5: Expected an identifier, but got 'else'.
+  } else {
+    ^^^^
+
+parser/general/issue_60785_2.crash:5:3: Expected ';' after this.
+  } else {
+  ^
+
+parser/general/issue_60785_2.crash:5:5: Unexpected token 'else'.
+  } else {
+    ^^^^
+
+parser/general/issue_60785_2.crash:2:14: Can't find '}' to match '{'.
+  switch (s) {
+             ^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(UnmatchedToken({), null, null)
+      handleVoidKeyword(void)
+      handleIdentifier(foo, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(String, typeReference)
+          handleNoTypeArguments(s)
+          handleType(String, null)
+          handleIdentifier(s, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, null, s, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginSwitchStatement(switch)
+          handleIdentifier(s, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(s, s)
+          handleParenthesizedCondition((, null, null)
+          beginSwitchBlock({)
+            beginCaseExpression(case)
+              beginPattern(case)
+                beginConstantPattern(null)
+                  beginLiteralString('foo')
+                  endLiteralString(0, ))
+                endConstantPattern(null)
+              endPattern('foo')
+              handleSwitchCaseNoWhenClause('foo')
+              handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], ), ))
+            endCaseExpression(case, null, :)
+            beginSwitchCase(0, 1, case)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+              handleIdentifier(, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 'foo', 'foo')
+              handleExpressionStatement(), ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ')'., null, {lexeme: )}], ), ))
+              beginBlock({, BlockKind(statement))
+                handleIdentifier(print, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  beginLiteralString('foo')
+                  endLiteralString(0, ))
+                endArguments(1, (, ))
+                handleSend(print, ))
+                handleExpressionStatement(print, ;)
+              endBlock(1, {, }, BlockKind(statement))
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], }, })
+              handleExpressionStatement(else, ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token 'else'., null, {lexeme: else}], else, else)
+              beginBlock({, BlockKind(statement))
+                handleIdentifier(print, expression)
+                handleNoTypeArguments(()
+                beginArguments(()
+                  beginLiteralString('bar')
+                  endLiteralString(0, ))
+                endArguments(1, (, ))
+                handleSend(print, ))
+                handleExpressionStatement(print, ;)
+              endBlock(1, {, }, BlockKind(statement))
+            endSwitchCase(0, 1, null, null, 4, case, })
+          endSwitchBlock(1, {, })
+        endSwitchStatement(switch, })
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(})
+  handleErrorToken(UnmatchedToken({))
+  handleRecoverableError(Message[Template(UnmatchedToken), Can't find '}' to match '{'., null, {string: }, lexeme: {}], UnmatchedToken({), UnmatchedToken({))
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.intertwined.expect
new file mode 100644
index 0000000..1651e32
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.intertwined.expect
@@ -0,0 +1,241 @@
+parseUnit(UnmatchedToken({))
+  skipErrorTokens(UnmatchedToken({))
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(UnmatchedToken({), DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar(UnmatchedToken({))
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(UnmatchedToken({))
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(UnmatchedToken({), null, null, UnmatchedToken({), VoidType(), null, foo, false)
+        listener: beginTopLevelMethod(UnmatchedToken({), null, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(foo, topLevelFunctionDeclaration)
+        parseMethodTypeVar(foo)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(foo, foo, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(foo, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(String)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(s)
+                listener: handleType(String, null)
+                ensureIdentifier(String, formalParameterDeclaration)
+                  listener: handleIdentifier(s, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, s, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, switch)
+          parseStatement({)
+            parseStatementX({)
+              parseSwitchStatement({)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(s)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(s, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt(s)
+                                  listener: handleNoArguments())
+                                listener: handleSend(s, s)
+                    ensureCloseParen(s, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                parseSwitchBlock())
+                  ensureBlock(), BlockKind(switch statement))
+                  listener: beginSwitchBlock({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, case)
+                  peekPastLabels(case)
+                  listener: beginCaseExpression(case)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    listener: beginPattern(case)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      listener: beginConstantPattern(null)
+                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
+                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
+                          parsePrimary(case, expression, ConstantPatternContext.implicit)
+                            parseLiteralString(case)
+                              parseSingleLiteralString(case)
+                                listener: beginLiteralString('foo')
+                                listener: endLiteralString(0, ))
+                      listener: endConstantPattern(null)
+                    listener: endPattern('foo')
+                  listener: handleSwitchCaseNoWhenClause('foo')
+                  ensureColon('foo')
+                    rewriteAndRecover('foo', Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], :)
+                      reportRecoverableError(), Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}])
+                        listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], ), ))
+                      rewriter()
+                  listener: endCaseExpression(case, null, :)
+                  peekPastLabels())
+                  parseStatementsInSwitchCase(:, ), case, 0, 1, null, null)
+                    listener: beginSwitchCase(0, 1, case)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseExpressionStatementOrDeclaration(:, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+                            looksLikeLocalFunction())
+                            parseExpressionStatement(:)
+                              parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
+                                parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                    parsePrimary(:, expression, ConstantPatternContext.none)
+                                      parseSend(:, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(:, expression)
+                                          reportRecoverableErrorWithToken(), Template(ExpectedIdentifier))
+                                            listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ')'., Try inserting an identifier before ')'., {lexeme: )}], ), ))
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments())
+                                        listener: handleSend(, )
+                              ensureSemicolon()
+                                reportRecoverableError('foo', Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 'foo', 'foo')
+                                rewriter()
+                              listener: handleExpressionStatement(), ;)
+                    reportRecoverableError(), Message[Template(UnexpectedToken), Unexpected token ')'., null, {lexeme: )}])
+                      listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ')'., null, {lexeme: )}], ), ))
+                    peekPastLabels({)
+                    parseStatement())
+                      parseStatementX())
+                        parseBlock(), BlockKind(statement))
+                          ensureBlock(), BlockKind(statement))
+                          listener: beginBlock({, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, print)
+                          parseStatement({)
+                            parseStatementX({)
+                              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                                looksLikeLocalFunction(print)
+                                parseExpressionStatement({)
+                                  parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
+                                        skipObjectPatternRest(print)
+                                    parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression({, true, ConstantPatternContext.none)
+                                        parsePrimary({, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral({, expression, ConstantPatternContext.none)
+                                            looksLikeFunctionBody(;)
+                                            parseSend({, expression, ConstantPatternContext.none)
+                                              ensureIdentifier({, expression)
+                                                listener: handleIdentifier(print, expression)
+                                              listener: handleNoTypeArguments(()
+                                              parseArgumentsOpt(print)
+                                                parseArguments(print)
+                                                  parseArgumentsRest(()
+                                                    listener: beginArguments(()
+                                                    allowedToShortcutParseExpression()
+                                                    listener: beginLiteralString('foo')
+                                                    listener: endLiteralString(0, ))
+                                                    listener: endArguments(1, (, ))
+                                              listener: handleSend(print, ))
+                                  ensureSemicolon())
+                                  listener: handleExpressionStatement(print, ;)
+                          notEofOrType(CLOSE_CURLY_BRACKET, })
+                          listener: endBlock(1, {, }, BlockKind(statement))
+                    peekPastLabels(else)
+                    parseStatement(})
+                      parseStatementX(})
+                        parseExpressionStatementOrDeclaration(}, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(}, }, null, null, null, null)
+                            looksLikeLocalFunction(else)
+                            parseExpressionStatement(})
+                              parseExpression(})
+                                looksLikeOuterPatternEquals(})
+                                  skipOuterPattern(})
+                                parsePrecedenceExpression(}, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(}, true, ConstantPatternContext.none)
+                                    parsePrimary(}, expression, ConstantPatternContext.none)
+                                      inPlainSync()
+                                      parseSend(}, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(}, expression)
+                                          reportRecoverableErrorWithToken(else, Template(ExpectedIdentifier))
+                                            listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'else'., Try inserting an identifier before 'else'., {lexeme: else}], else, else)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(else)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(else)
+                                        listener: handleSend(, )
+                              ensureSemicolon()
+                                reportRecoverableError(}, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], }, })
+                                rewriter()
+                              listener: handleExpressionStatement(else, ;)
+                    reportRecoverableError(else, Message[Template(UnexpectedToken), Unexpected token 'else'., null, {lexeme: else}])
+                      listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token 'else'., null, {lexeme: else}], else, else)
+                    peekPastLabels({)
+                    parseStatement(else)
+                      parseStatementX(else)
+                        parseBlock(else, BlockKind(statement))
+                          ensureBlock(else, BlockKind(statement))
+                          listener: beginBlock({, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, print)
+                          parseStatement({)
+                            parseStatementX({)
+                              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                                looksLikeLocalFunction(print)
+                                parseExpressionStatement({)
+                                  parseExpression({)
+                                    looksLikeOuterPatternEquals({)
+                                      skipOuterPattern({)
+                                        skipObjectPatternRest(print)
+                                    parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression({, true, ConstantPatternContext.none)
+                                        parsePrimary({, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral({, expression, ConstantPatternContext.none)
+                                            looksLikeFunctionBody(;)
+                                            parseSend({, expression, ConstantPatternContext.none)
+                                              ensureIdentifier({, expression)
+                                                listener: handleIdentifier(print, expression)
+                                              listener: handleNoTypeArguments(()
+                                              parseArgumentsOpt(print)
+                                                parseArguments(print)
+                                                  parseArgumentsRest(()
+                                                    listener: beginArguments(()
+                                                    allowedToShortcutParseExpression()
+                                                    listener: beginLiteralString('bar')
+                                                    listener: endLiteralString(0, ))
+                                                    listener: endArguments(1, (, ))
+                                              listener: handleSend(print, ))
+                                  ensureSemicolon())
+                                  listener: handleExpressionStatement(print, ;)
+                          notEofOrType(CLOSE_CURLY_BRACKET, })
+                          listener: endBlock(1, {, }, BlockKind(statement))
+                    peekPastLabels(})
+                    listener: endSwitchCase(0, 1, null, null, 4, case, })
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endSwitchBlock(1, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(UnmatchedToken({))
+    listener: handleErrorToken(UnmatchedToken({))
+    listener: handleRecoverableError(Message[Template(UnmatchedToken), Can't find '}' to match '{'., null, {string: }, lexeme: {}], UnmatchedToken({), UnmatchedToken({))
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.parser.expect
new file mode 100644
index 0000000..c6a1787
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.parser.expect
@@ -0,0 +1,21 @@
+NOTICE: Stream was rewritten by parser!
+
+void foo(String s) {
+switch (s) {
+case 'foo':*synthetic*;) {
+print('foo');
+} *synthetic*;else {
+print('bar');
+}
+}}
+
+
+[UnmatchedToken]void[KeywordToken] foo[StringToken]([BeginToken]String[StringToken] s[StringToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken] ([BeginToken]s[StringToken])[SimpleToken] {[BeginToken]
+case[KeywordToken] 'foo'[StringToken]:[SyntheticToken][SyntheticStringToken];[SyntheticToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'foo'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken] [SyntheticStringToken];[SyntheticToken]else[KeywordToken] {[BeginToken]
+print[StringToken]([BeginToken]'bar'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SyntheticToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.scanner.expect
new file mode 100644
index 0000000..daa9b3a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_60785_2.crash_dart.scanner.expect
@@ -0,0 +1,19 @@
+void foo(String s) {
+switch (s) {
+case 'foo') {
+print('foo');
+} else {
+print('bar');
+}
+}}
+
+
+[UnmatchedToken]void[KeywordToken] foo[StringToken]([BeginToken]String[StringToken] s[StringToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken] ([BeginToken]s[StringToken])[SimpleToken] {[BeginToken]
+case[KeywordToken] 'foo'[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'foo'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken] else[KeywordToken] {[BeginToken]
+print[StringToken]([BeginToken]'bar'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SyntheticToken]}[SimpleToken]
+[SimpleToken]
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 0a5e0e7..ca2ea3e 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
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 4505349..9b24767 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
@@ -12,34 +12,22 @@
   C.constructor_field_initializer() : this.new = null;
                                            ^^^
 
-parser/general/new_as_identifier:16:44: Expected a class member, but got 'new'.
+parser/general/new_as_identifier:16:44: This requires the experimental 'primary-constructors' language feature to be enabled.
   C.constructor_field_initializer() : this.new = null;
                                            ^^^
 
-parser/general/new_as_identifier:16:48: Operator declarations must be preceded by the keyword 'operator'.
+parser/general/new_as_identifier:16:44: A method declaration needs an explicit list of parameters.
+  C.constructor_field_initializer() : this.new = null;
+                                           ^^^
+
+parser/general/new_as_identifier:16:48: Only factory constructor can specify '=' redirection.
   C.constructor_field_initializer() : this.new = null;
                                                ^
 
-parser/general/new_as_identifier:16:48: The string '=' isn't a user-definable operator.
-  C.constructor_field_initializer() : this.new = null;
-                                               ^
-
-parser/general/new_as_identifier:16:48: A method declaration needs an explicit list of parameters.
-  C.constructor_field_initializer() : this.new = null;
-                                               ^
-
-parser/general/new_as_identifier:16:50: Expected a function body, but got 'null'.
+parser/general/new_as_identifier:16:50: 'null' can't be used as an identifier because it's a keyword.
   C.constructor_field_initializer() : this.new = null;
                                                  ^^^^
 
-parser/general/new_as_identifier:16:50: Expected a class member, but got 'null'.
-  C.constructor_field_initializer() : this.new = null;
-                                                 ^^^^
-
-parser/general/new_as_identifier:16:54: Expected a class member, but got ';'.
-  C.constructor_field_initializer() : this.new = null;
-                                                     ^
-
 beginCompilationUnit(class)
   beginMetadataStar(class)
   endMetadataStar(0)
@@ -57,7 +45,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNewAsIdentifier(new)
@@ -69,12 +57,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(constructor_field_initializer, methodDeclarationContinuation)
@@ -102,45 +90,33 @@
             handleAsyncModifier(null, null)
             handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
             handleInvalidFunctionBody({)
-          endClassConstructor(null, C, (, :, })
+          endConstructor(DeclarationKind.Class, C, null, (, :, })
         endMember()
         beginMetadataStar(new)
         endMetadataStar(0)
         beginMember()
-          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got 'new'., null, {lexeme: new}], new, new)
-          handleInvalidMember(new)
-        endMember()
-        beginMetadataStar(=)
-        endMetadataStar(0)
-        beginMember()
-          handleRecoverableError(MissingOperatorKeyword, =, =)
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, C)
-            handleNoType(new)
-            handleRecoverableError(Message[Template(InvalidOperator), The string '=' isn't a user-definable operator., null, {lexeme: =}], =, =)
-            handleInvalidOperatorName(operator, =)
-            handleNoTypeVariables(null)
-            handleRecoverableError(MissingMethodParameters, =, =)
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
             beginFormalParameters((, MemberKind.NonStaticMethod)
             endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
             handleNoInitializers()
             handleAsyncModifier(null, null)
-            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'null'., null, {lexeme: null}], null, null)
-            handleInvalidFunctionBody({)
-          endClassMethod(null, operator, (, null, })
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(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, constructorReference)
+              beginConstructorReference(null)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(null)
+              endConstructorReference(null, null, null, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
         endMember()
-        beginMetadataStar(null)
-        endMetadataStar(0)
-        beginMember()
-          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got 'null'., null, {lexeme: null}], null, null)
-          handleInvalidMember(null)
-        endMember()
-        beginMetadataStar(;)
-        endMetadataStar(0)
-        beginMember()
-          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
-          handleInvalidMember(;)
-        endMember()
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
   endTopLevelDeclaration(})
   beginMetadataStar(class)
@@ -159,7 +135,7 @@
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.Class, {, null, null)
+          beginFactory(DeclarationKind.Class, {, null, null)
             handleIdentifier(D, methodDeclaration)
             handleNewAsIdentifier(new)
             handleIdentifier(new, methodDeclarationContinuation)
@@ -174,12 +150,12 @@
             endArguments(0, (, ))
             handleSend(C, ))
             handleExpressionFunctionBody(=>, ;)
-          endClassFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+          beginFactory(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection, methodDeclarationContinuation)
             handleQualified(.)
@@ -197,12 +173,12 @@
                 handleNoConstructorReferenceContinuationAfterTypeArguments(new)
               endConstructorReference(C, null, new, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
-          endClassFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+          beginFactory(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection_generic, methodDeclarationContinuation)
             handleQualified(.)
@@ -222,12 +198,12 @@
                 handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
               endConstructorReference(C, ., new, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
-          endClassFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+          beginFactory(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection_prefixed, methodDeclarationContinuation)
             handleQualified(.)
@@ -245,12 +221,12 @@
                 handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
               endConstructorReference(prefix, ., new, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
-          endClassFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+          beginFactory(DeclarationKind.Class, ;, null, null)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(factory_redirection_prefixed_generic, methodDeclarationContinuation)
             handleQualified(.)
@@ -272,12 +248,12 @@
                 handleIdentifier(new, constructorReferenceContinuationAfterTypeArguments)
               endConstructorReference(prefix, ., new, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
-          endClassFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
         endMember()
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
             handleNoType(;)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(super_invocation, methodDeclarationContinuation)
@@ -299,12 +275,12 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, D, (, :, ;)
+          endConstructor(DeclarationKind.Class, D, null, (, :, ;)
         endMember()
         beginMetadataStar(D)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
             handleNoType(;)
             handleIdentifier(D, methodDeclaration)
             handleIdentifier(this_redirection, methodDeclarationContinuation)
@@ -326,7 +302,7 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, D, (, :, ;)
+          endConstructor(DeclarationKind.Class, D, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
     endClassDeclaration(class, })
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 3a7634b..7727b9a 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
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -61,7 +61,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -70,8 +70,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -103,6 +103,9 @@
                       rewriter()
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -144,7 +147,7 @@
                       rewriter()
                       rewriter()
                   listener: handleInvalidFunctionBody({)
-                listener: endClassConstructor(null, C, (, :, })
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, new)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
@@ -152,80 +155,47 @@
                 listener: beginMetadataStar(new)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, C)
-                reportRecoverableErrorWithToken(new, Template(ExpectedClassMember))
-                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got 'new'., null, {lexeme: new}], new, new)
-                listener: handleInvalidMember(new)
-                listener: endMember()
-            notEofOrType(CLOSE_CURLY_BRACKET, =)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl(new, DeclarationKind.Class, C)
-              parseMetadataStar(new)
-                listener: beginMetadataStar(=)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(new, new, null, null, null, null, null, null, null, new, NoType(), null, DeclarationKind.Class, C)
-                parseInvalidOperatorDeclaration(new, null, null, null, null, null, null, null, new, DeclarationKind.Class, C)
-                  reportRecoverableError(=, MissingOperatorKeyword)
-                    listener: handleRecoverableError(MissingOperatorKeyword, =, =)
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
                   rewriter()
-                  parseMethod(new, null, null, null, null, null, null, null, new, NoType(), null, operator, DeclarationKind.Class, C, false)
-                    listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, C)
-                    listener: handleNoType(new)
-                    parseOperatorName(new)
-                      isUnaryMinus(=)
-                      reportRecoverableErrorWithToken(=, Template(InvalidOperator))
-                        listener: handleRecoverableError(Message[Template(InvalidOperator), The string '=' isn't a user-definable operator., null, {lexeme: =}], =, =)
-                      listener: handleInvalidOperatorName(operator, =)
-                    parseMethodTypeVar(=)
-                      listener: handleNoTypeVariables(null)
-                    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(), BlockKind(function body))
-                        reportRecoverableError(null, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'null'., null, {lexeme: null}])
-                          listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'null'., null, {lexeme: null}], null, null)
-                        insertBlock())
-                          rewriter()
-                          rewriter()
-                      listener: handleInvalidFunctionBody({)
-                    listener: endClassMethod(null, operator, (, null, })
-                  listener: endMember()
-            notEofOrType(CLOSE_CURLY_BRACKET, null)
-            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
-              parseMetadataStar(})
-                listener: beginMetadataStar(null)
-                listener: endMetadataStar(0)
-              listener: beginMember()
-              recoverFromInvalidMember(}, }, null, null, null, null, null, null, null, }, NoType(), null, DeclarationKind.Class, C)
-                reportRecoverableErrorWithToken(null, Template(ExpectedClassMember))
-                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got 'null'., null, {lexeme: null}], null, null)
-                listener: handleInvalidMember(null)
-                listener: endMember()
-            notEofOrType(CLOSE_CURLY_BRACKET, ;)
-            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, NoType(), null, DeclarationKind.Class, C)
-                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
-                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
-                listener: handleInvalidMember(;)
-                listener: endMember()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      reportRecoverableErrorWithToken(null, Template(ExpectedIdentifierButGotKeyword))
+                        listener: handleRecoverableError(Message[Template(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, constructorReference)
+                    listener: beginConstructorReference(null)
+                    parseQualifiedRestOpt(null, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(null)
+                    listener: endConstructorReference(null, null, null, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(null)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
           listener: endClassDeclaration(class, })
   listener: endTopLevelDeclaration(})
   parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
@@ -259,8 +229,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod({, DeclarationKind.Class, {, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.Class, {, null, null)
+              parseFactoryMethod({, DeclarationKind.Class, {, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, {, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -283,6 +253,9 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -301,7 +274,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -309,8 +282,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -346,7 +319,7 @@
                     listener: endConstructorReference(C, null, new, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endClassFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -354,8 +327,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -392,7 +365,7 @@
                     listener: endConstructorReference(C, ., new, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endClassFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -400,8 +373,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -438,7 +411,7 @@
                     listener: endConstructorReference(prefix, ., new, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endClassFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -446,8 +419,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.Class, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(D, methodDeclaration)
                 parseQualifiedRestOpt(D, methodDeclarationContinuation)
@@ -488,7 +461,7 @@
                     listener: endConstructorReference(prefix, ., new, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(new)
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endClassFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, D)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -497,8 +470,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, D, DeclarationKind.Class, D, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -524,6 +497,8 @@
                         listener: handleNewAsIdentifier(new)
                         parseInitializerExpressionRest(:)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -550,7 +525,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, D, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, D, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, D)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, D)
@@ -559,8 +534,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, D, DeclarationKind.Class, D, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, D, D)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, D, DeclarationKind.Class, D, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, D, D)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(D, methodDeclaration)
@@ -585,6 +560,8 @@
                       listener: handleNewAsIdentifier(new)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -611,7 +588,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, D, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, D, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
@@ -633,6 +610,8 @@
         parseFieldInitializerOpt(constructor_invocation_const, constructor_invocation_const, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -676,6 +655,8 @@
         parseFieldInitializerOpt(constructor_invocation_const_generic, constructor_invocation_const_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -720,6 +701,8 @@
         parseFieldInitializerOpt(constructor_invocation_const_prefixed, constructor_invocation_const_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -764,6 +747,8 @@
         parseFieldInitializerOpt(constructor_invocation_const_prefixed_generic, constructor_invocation_const_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -812,6 +797,8 @@
         parseFieldInitializerOpt(constructor_invocation_explicit, constructor_invocation_explicit, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -855,6 +842,8 @@
         parseFieldInitializerOpt(constructor_invocation_explicit_generic, constructor_invocation_explicit_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -899,6 +888,8 @@
         parseFieldInitializerOpt(constructor_invocation_explicit_prefixed, constructor_invocation_explicit_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -943,6 +934,8 @@
         parseFieldInitializerOpt(constructor_invocation_explicit_prefixed_generic, constructor_invocation_explicit_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -991,6 +984,8 @@
         parseFieldInitializerOpt(constructor_invocation_implicit, constructor_invocation_implicit, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1036,6 +1031,9 @@
         parseFieldInitializerOpt(constructor_invocation_implicit_generic, constructor_invocation_implicit_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parseImplicitCreationExpression(=, <, SimpleTypeArgument1())
@@ -1079,6 +1077,9 @@
         parseFieldInitializerOpt(constructor_invocation_implicit_prefixed, constructor_invocation_implicit_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1134,6 +1135,9 @@
         parseFieldInitializerOpt(constructor_invocation_implicit_prefixed_generic, constructor_invocation_implicit_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parseImplicitCreationExpression(=, <, SimpleTypeArgument1())
@@ -1181,6 +1185,8 @@
         parseFieldInitializerOpt(constructor_tearoff, constructor_tearoff, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1223,6 +1229,9 @@
         parseFieldInitializerOpt(constructor_tearoff_generic, constructor_tearoff_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1271,6 +1280,9 @@
         parseFieldInitializerOpt(constructor_tearoff_generic_method_invocation, constructor_tearoff_generic_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1332,6 +1344,8 @@
         parseFieldInitializerOpt(constructor_tearoff_method_invocation, constructor_tearoff_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1387,6 +1401,9 @@
         parseFieldInitializerOpt(constructor_tearoff_prefixed, constructor_tearoff_prefixed, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1439,6 +1456,9 @@
         parseFieldInitializerOpt(constructor_tearoff_prefixed_generic, constructor_tearoff_prefixed_generic, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1497,6 +1517,9 @@
         parseFieldInitializerOpt(constructor_tearoff_prefixed_generic_method_invocation, constructor_tearoff_prefixed_generic_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
@@ -1568,6 +1591,9 @@
         parseFieldInitializerOpt(constructor_tearoff_prefixed_method_invocation, constructor_tearoff_prefixed_method_invocation, null, null, null, null, var, DeclarationKind.TopLevel, null)
           listener: beginFieldInitializer(=)
           parseExpression(=)
+            looksLikeOuterPatternEquals(=)
+              skipOuterPattern(=)
+                skipObjectPatternRest(C)
             parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
               parseUnaryExpression(=, true, ConstantPatternContext.none)
                 parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.parser.expect b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.parser.expect
index 9dae5dc..36215c2 100644
--- a/pkg/front_end/parser_testcases/general/new_as_identifier.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/general/new_as_identifier.dart.parser.expect
@@ -5,7 +5,7 @@
 
 
 
-C.constructor_field_initializer() : *synthetic*=this.*synthetic*{}new operator= (){}null;
+C.constructor_field_initializer() : *synthetic*=this.*synthetic*{}new ()= null;
 }
 
 class D {
@@ -46,7 +46,7 @@
 
 
 
-C[StringToken].[SimpleToken]constructor_field_initializer[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] operator[SyntheticKeywordToken]=[SimpleToken] ([SyntheticBeginToken])[SyntheticToken]{[SyntheticBeginToken]}[SyntheticToken]null[KeywordToken];[SimpleToken]
+C[StringToken].[SimpleToken]constructor_field_initializer[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] null[KeywordToken];[SimpleToken]
 }[SimpleToken]
 
 class[KeywordToken] D[StringToken] {[BeginToken]
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 b34925c..577de62 100644
--- a/pkg/front_end/parser_testcases/general/operator_01.dart.expect
+++ b/pkg/front_end/parser_testcases/general/operator_01.dart.expect
@@ -39,7 +39,7 @@
                 handleLiteralBool(true)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, bool, (, null, })
+          endMethod(DeclarationKind.Class, null, bool, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -68,7 +68,7 @@
                 handleLiteralInt(42)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(bool)
         endMetadataStar(0)
@@ -97,7 +97,7 @@
                 handleLiteralBool(true)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, bool, (, null, })
+          endMethod(DeclarationKind.Class, null, bool, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -126,7 +126,7 @@
                 handleLiteralInt(42)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -155,7 +155,7 @@
                 handleLiteralInt(42)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, int, (, null, })
+          endMethod(DeclarationKind.Class, null, int, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
     endClassDeclaration(class, })
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 67949c7..bb0d2dd 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(bool)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -73,6 +73,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -83,7 +85,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, bool, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, bool, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -91,7 +93,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -131,6 +133,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -141,7 +145,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, bool)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -149,7 +153,7 @@
                 listener: beginMetadataStar(bool)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 listener: handleIdentifier(bool, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -189,6 +193,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -199,7 +205,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, bool, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, bool, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -207,7 +213,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -247,6 +253,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -257,7 +265,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -265,7 +273,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -305,6 +313,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -315,7 +325,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, int, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
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 7b05c58..1e63933 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
@@ -22,7 +22,7 @@
         beginMetadataStar(operator)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, operator)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, operator)
             handleNoType({)
             handleOperatorName(operator, ^)
             handleNoTypeVariables(()
@@ -41,7 +41,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, operator, (, null, })
+          endConstructor(DeclarationKind.Class, operator, null, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 2c2511f..b7e41e3 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
@@ -35,8 +35,8 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, operator, DeclarationKind.Class, operator, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, operator)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, operator, DeclarationKind.Class, operator, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, operator, operator)
                 listener: handleNoType({)
                 parseOperatorName({)
                   listener: handleOperatorName(operator, ^)
@@ -69,7 +69,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, operator, (, null, })
+                listener: endConstructor(DeclarationKind.Class, operator, null, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/general/toplevel_get_called_get.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/toplevel_get_called_get.dart.intertwined.expect
index 0fdbe32..8e0ccc9 100644
--- a/pkg/front_end/parser_testcases/general/toplevel_get_called_get.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/toplevel_get_called_get.dart.intertwined.expect
@@ -25,8 +25,12 @@
         parseFunctionBody(get, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -70,8 +74,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -109,8 +117,12 @@
         parseFunctionBody(async, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -154,8 +166,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -193,8 +209,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -239,8 +259,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -278,8 +302,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -324,8 +352,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
index 89cdae1..63b2a9d 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.expect
@@ -113,7 +113,7 @@
         beginMetadataStar(ExtensionType4)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
             handleNoType({)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(constructor, methodDeclarationContinuation)
@@ -131,12 +131,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endExtensionTypeConstructor(null, ExtensionType4, (, null, ;)
+          endConstructor(DeclarationKind.ExtensionType, ExtensionType4, null, (, null, ;)
         endMember()
         beginMetadataStar(ExtensionType4)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
             handleNoType(;)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(redirect, methodDeclarationContinuation)
@@ -168,12 +168,12 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endExtensionTypeConstructor(null, ExtensionType4, (, :, ;)
+          endConstructor(DeclarationKind.ExtensionType, ExtensionType4, null, (, :, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, null)
+          beginFactory(DeclarationKind.ExtensionType, ;, null, null)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(fact, methodDeclarationContinuation)
             handleQualified(.)
@@ -200,12 +200,12 @@
             endArguments(1, (, ))
             handleSend(ExtensionType4, ))
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.ExtensionType, factory, factory, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, null)
+          beginFactory(DeclarationKind.ExtensionType, ;, null, null)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(redirectingFactory, methodDeclarationContinuation)
             handleQualified(.)
@@ -229,7 +229,7 @@
                 handleNoConstructorReferenceContinuationAfterTypeArguments(ExtensionType4)
               endConstructorReference(ExtensionType4, null, ExtensionType4, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
-          endExtensionTypeFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.ExtensionType, factory, factory, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -243,7 +243,7 @@
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
             handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
-          endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -262,7 +262,7 @@
             handleNoArguments(;)
             handleSend(it, it)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.ExtensionType, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -286,7 +286,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(set, void, (, null, })
+          endMethod(DeclarationKind.ExtensionType, set, void, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -306,7 +306,7 @@
             handleNoArguments(;)
             handleSend(it, it)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -335,7 +335,7 @@
             handleNoArguments(;)
             handleSend(it, it)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -368,7 +368,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(null, void, (, null, })
+          endMethod(DeclarationKind.ExtensionType, null, void, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -381,7 +381,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endExtensionTypeFields(null, null, null, static, null, null, null, 1, static, ;)
+          endFields(DeclarationKind.ExtensionType, null, null, null, static, null, null, null, 1, static, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -397,7 +397,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.ExtensionType, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -421,7 +421,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(set, static, (, null, })
+          endMethod(DeclarationKind.ExtensionType, set, static, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -438,7 +438,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.ExtensionType, null, static, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 14, {, })
     endExtensionTypeDeclaration(extension, null, extension, type, })
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
index 638a069..e4b3944 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type.dart.intertwined.expect
@@ -171,8 +171,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
-                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
@@ -206,7 +206,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endExtensionTypeConstructor(null, ExtensionType4, (, null, ;)
+                listener: endConstructor(DeclarationKind.ExtensionType, ExtensionType4, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ExtensionType4)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -215,8 +215,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
-                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, ExtensionType4, ExtensionType4)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
@@ -251,6 +251,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -275,7 +277,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endExtensionTypeConstructor(null, ExtensionType4, (, :, ;)
+                listener: endConstructor(DeclarationKind.ExtensionType, ExtensionType4, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -283,8 +285,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.ExtensionType, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.ExtensionType, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.ExtensionType, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
                 parseQualifiedRestOpt(ExtensionType4, methodDeclarationContinuation)
@@ -317,6 +319,9 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(ExtensionType4)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -340,7 +345,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.ExtensionType, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -348,8 +353,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.ExtensionType, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.ExtensionType, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.ExtensionType, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
                 parseQualifiedRestOpt(ExtensionType4, methodDeclarationContinuation)
@@ -391,7 +396,7 @@
                     listener: endConstructorReference(ExtensionType4, null, ExtensionType4, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(ExtensionType4)
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endExtensionTypeFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.ExtensionType, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -409,6 +414,8 @@
                 parseFieldInitializerOpt(field, field, null, null, null, null, null, DeclarationKind.ExtensionType, ExtensionType4)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -417,7 +424,7 @@
                   listener: endFieldInitializer(=, 42)
                 reportRecoverableError(field, ExtensionTypeDeclaresInstanceField)
                   listener: handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
-                listener: endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -425,7 +432,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, getter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, getter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, get, getter, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -446,6 +453,9 @@
                 parseFunctionBody(getter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(it)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -460,7 +470,7 @@
                     ensureSemicolon(it)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -468,7 +478,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, setter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, setter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, set, setter, ExtensionType4)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -503,7 +513,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(set, void, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, set, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.ExtensionType, ExtensionType4)
@@ -511,7 +521,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, method, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, method, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, method, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(method)
@@ -535,6 +545,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(it)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -549,7 +562,7 @@
                     ensureSemicolon(it)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -557,7 +570,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, operator, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -592,6 +605,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(it)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -606,7 +622,7 @@
                     ensureSemicolon(it)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -614,7 +630,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, operator, ExtensionType4)
                 listener: handleVoidKeyword(void)
                 parseOperatorName(void)
@@ -660,7 +676,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.ExtensionType, ExtensionType4)
@@ -678,13 +694,15 @@
                 parseFieldInitializerOpt(staticField, staticField, null, null, null, null, null, DeclarationKind.ExtensionType, ExtensionType4)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endExtensionTypeFields(null, null, null, static, null, null, null, 1, static, ;)
+                listener: endFields(DeclarationKind.ExtensionType, null, null, null, static, null, null, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -692,7 +710,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, SimpleType(), get, staticGetter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, SimpleType(), get, null, staticGetter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, static, null, null, get, staticGetter, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -712,6 +730,8 @@
                 parseFunctionBody(staticGetter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -720,7 +740,7 @@
                     ensureSemicolon(42)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -728,7 +748,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, staticSetter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, null, staticSetter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, static, null, null, set, staticSetter, ExtensionType4)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -762,7 +782,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(set, static, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, set, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.ExtensionType, ExtensionType4)
@@ -770,7 +790,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, SimpleType(), null, staticMethod, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, SimpleType(), null, null, staticMethod, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, static, null, null, null, staticMethod, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(staticMethod)
@@ -793,6 +813,8 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -801,7 +823,7 @@
                     ensureSemicolon(42)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 14, {, })
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
index 4c8080a..91e796e 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.expect
@@ -113,7 +113,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, const, null, ExtensionType4, ExtensionType4)
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, const, null, null, ExtensionType4, ExtensionType4)
             handleNoType(const)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(constructor, methodDeclarationContinuation)
@@ -131,12 +131,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endExtensionTypeConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.ExtensionType, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, const, null, ExtensionType4, ExtensionType4)
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, const, null, null, ExtensionType4, ExtensionType4)
             handleNoType(const)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(redirect, methodDeclarationContinuation)
@@ -168,12 +168,12 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endExtensionTypeConstructor(null, const, (, :, ;)
+          endConstructor(DeclarationKind.ExtensionType, const, null, (, :, ;)
         endMember()
         beginMetadataStar(factory)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, null)
+          beginFactory(DeclarationKind.ExtensionType, ;, null, null)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(fact, methodDeclarationContinuation)
             handleQualified(.)
@@ -200,12 +200,12 @@
             endArguments(1, (, ))
             handleSend(ExtensionType4, ))
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeFactoryMethod(factory, factory, ;)
+          endFactory(DeclarationKind.ExtensionType, factory, factory, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, const)
+          beginFactory(DeclarationKind.ExtensionType, ;, null, const)
             handleIdentifier(ExtensionType4, methodDeclaration)
             handleIdentifier(redirectingFactory, methodDeclarationContinuation)
             handleQualified(.)
@@ -229,7 +229,7 @@
                 handleNoConstructorReferenceContinuationAfterTypeArguments(ExtensionType4)
               endConstructorReference(ExtensionType4, null, ExtensionType4, ConstructorReferenceContext.RedirectingFactory)
             endRedirectingFactoryBody(=, ;)
-          endExtensionTypeFactoryMethod(const, factory, ;)
+          endFactory(DeclarationKind.ExtensionType, const, factory, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -243,7 +243,7 @@
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
             handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
-          endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -262,7 +262,7 @@
             handleNoArguments(;)
             handleSend(it, it)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(get, int, =>, null, ;)
+          endMethod(DeclarationKind.ExtensionType, get, int, =>, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -286,7 +286,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(set, void, (, null, })
+          endMethod(DeclarationKind.ExtensionType, set, void, (, null, })
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -306,7 +306,7 @@
             handleNoArguments(;)
             handleSend(it, it)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -335,7 +335,7 @@
             handleNoArguments(;)
             handleSend(it, it)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -368,7 +368,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(null, void, (, null, })
+          endMethod(DeclarationKind.ExtensionType, null, void, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -381,7 +381,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endExtensionTypeFields(null, null, null, static, null, null, null, 1, static, ;)
+          endFields(DeclarationKind.ExtensionType, null, null, null, static, null, null, null, 1, static, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -397,7 +397,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.ExtensionType, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -421,7 +421,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endExtensionTypeMethod(set, static, (, null, })
+          endMethod(DeclarationKind.ExtensionType, set, static, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -438,7 +438,7 @@
             handleAsyncModifier(null, null)
             handleLiteralInt(42)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionTypeMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.ExtensionType, null, static, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 14, {, })
     endExtensionTypeDeclaration(extension, null, extension, type, })
diff --git a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
index e542a7b..fbd61e8 100644
--- a/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/extension_type_const.dart.intertwined.expect
@@ -170,10 +170,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(constructor)
-              parseMethod({, null, null, null, null, null, null, const, const, NoType(), null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
-                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, const, null, ExtensionType4, ExtensionType4)
+              parseMethod({, null, null, null, null, null, null, const, const, NoType(), null, null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, const, null, null, ExtensionType4, ExtensionType4)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
@@ -207,7 +205,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endExtensionTypeConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.ExtensionType, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -215,10 +213,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(redirect)
-              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
-                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, const, null, ExtensionType4, ExtensionType4)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, ExtensionType4, DeclarationKind.ExtensionType, ExtensionType4, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, const, null, null, ExtensionType4, ExtensionType4)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
@@ -253,6 +249,8 @@
                       listener: beginInitializer(this)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -277,7 +275,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endExtensionTypeConstructor(null, const, (, :, ;)
+                listener: endConstructor(DeclarationKind.ExtensionType, const, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, factory)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -285,8 +283,8 @@
                 listener: beginMetadataStar(factory)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseFactoryMethod(;, DeclarationKind.ExtensionType, ;, null, null, null)
-                listener: beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, null)
+              parseFactoryMethod(;, DeclarationKind.ExtensionType, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.ExtensionType, ;, null, null)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
                 parseQualifiedRestOpt(ExtensionType4, methodDeclarationContinuation)
@@ -319,6 +317,9 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(ExtensionType4)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -342,7 +343,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeFactoryMethod(factory, factory, ;)
+                listener: endFactory(DeclarationKind.ExtensionType, factory, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -350,10 +351,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(factory)
-              parseFactoryMethod(const, DeclarationKind.ExtensionType, ;, null, null, const)
-                listener: beginFactoryMethod(DeclarationKind.ExtensionType, ;, null, const)
+              parseFactoryMethod(const, DeclarationKind.ExtensionType, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.ExtensionType, ;, null, const)
                 ensureIdentifier(factory, methodDeclaration)
                   listener: handleIdentifier(ExtensionType4, methodDeclaration)
                 parseQualifiedRestOpt(ExtensionType4, methodDeclarationContinuation)
@@ -395,7 +394,7 @@
                     listener: endConstructorReference(ExtensionType4, null, ExtensionType4, ConstructorReferenceContext.RedirectingFactory)
                   ensureSemicolon(ExtensionType4)
                   listener: endRedirectingFactoryBody(=, ;)
-                listener: endExtensionTypeFactoryMethod(const, factory, ;)
+                listener: endFactory(DeclarationKind.ExtensionType, const, factory, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -413,6 +412,8 @@
                 parseFieldInitializerOpt(field, field, null, null, null, null, null, DeclarationKind.ExtensionType, ExtensionType4)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -421,7 +422,7 @@
                   listener: endFieldInitializer(=, 42)
                 reportRecoverableError(field, ExtensionTypeDeclaresInstanceField)
                   listener: handleRecoverableError(ExtensionTypeDeclaresInstanceField, field, field)
-                listener: endExtensionTypeFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -429,7 +430,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, getter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), get, null, getter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, get, getter, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -450,6 +451,9 @@
                 parseFunctionBody(getter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(it)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -464,7 +468,7 @@
                     ensureSemicolon(it)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(get, int, =>, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, get, int, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -472,7 +476,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, setter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, setter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, set, setter, ExtensionType4)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -507,7 +511,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(set, void, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, set, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.ExtensionType, ExtensionType4)
@@ -515,7 +519,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, method, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, SimpleType(), null, null, method, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, method, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(method)
@@ -539,6 +543,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(it)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -553,7 +560,7 @@
                     ensureSemicolon(it)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -561,7 +568,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, operator, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -596,6 +603,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(it)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -610,7 +620,7 @@
                     ensureSemicolon(it)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -618,7 +628,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, operator, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, operator, ExtensionType4)
                 listener: handleVoidKeyword(void)
                 parseOperatorName(void)
@@ -664,7 +674,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.ExtensionType, ExtensionType4)
@@ -682,13 +692,15 @@
                 parseFieldInitializerOpt(staticField, staticField, null, null, null, null, null, DeclarationKind.ExtensionType, ExtensionType4)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endExtensionTypeFields(null, null, null, static, null, null, null, 1, static, ;)
+                listener: endFields(DeclarationKind.ExtensionType, null, null, null, static, null, null, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -696,7 +708,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, SimpleType(), get, staticGetter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, SimpleType(), get, null, staticGetter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, static, null, null, get, staticGetter, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(get)
@@ -716,6 +728,8 @@
                 parseFunctionBody(staticGetter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -724,7 +738,7 @@
                     ensureSemicolon(42)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.ExtensionType, ExtensionType4)
@@ -732,7 +746,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, staticSetter, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, null, staticSetter, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, static, null, null, set, staticSetter, ExtensionType4)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -766,7 +780,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endExtensionTypeMethod(set, static, (, null, })
+                listener: endMethod(DeclarationKind.ExtensionType, set, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.ExtensionType, ExtensionType4)
@@ -774,7 +788,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, SimpleType(), null, staticMethod, DeclarationKind.ExtensionType, ExtensionType4, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, SimpleType(), null, null, staticMethod, DeclarationKind.ExtensionType, ExtensionType4, false)
                 listener: beginMethod(DeclarationKind.ExtensionType, null, null, static, null, null, null, staticMethod, ExtensionType4)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(staticMethod)
@@ -797,6 +811,8 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -805,7 +821,7 @@
                     ensureSemicolon(42)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionTypeMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.ExtensionType, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 14, {, })
diff --git a/pkg/front_end/parser_testcases/inline_class/no_body.dart.expect b/pkg/front_end/parser_testcases/inline_class/no_body.dart.expect
index e1b3aef..ee76929 100644
--- a/pkg/front_end/parser_testcases/inline_class/no_body.dart.expect
+++ b/pkg/front_end/parser_testcases/inline_class/no_body.dart.expect
@@ -1,10 +1,6 @@
 Problems reported:
 
-parser/inline_class/no_body:1:7: A class declaration must have a body, even if it is empty.
-class C;
-      ^
-
-parser/inline_class/no_body:1:8: Unexpected token ';'.
+parser/inline_class/no_body:1:8: This requires the experimental 'primary-constructors' language feature to be enabled.
 class C;
        ^
 
@@ -24,27 +20,15 @@
 extension E on int;
                   ^
 
-parser/inline_class/no_body:4:25: An extension type declaration must have a body, even if it is empty.
-extension type ET1(int i);
-                        ^
-
-parser/inline_class/no_body:4:26: Unexpected token ';'.
+parser/inline_class/no_body:4:26: This requires the experimental 'primary-constructors' language feature to be enabled.
 extension type ET1(int i);
                          ^
 
-parser/inline_class/no_body:5:38: An extension type declaration must have a body, even if it is empty.
-extension type ET2(int i) implements Foo;
-                                     ^^^
-
-parser/inline_class/no_body:5:41: Unexpected token ';'.
+parser/inline_class/no_body:5:41: This requires the experimental 'primary-constructors' language feature to be enabled.
 extension type ET2(int i) implements Foo;
                                         ^
 
-parser/inline_class/no_body:6:43: An extension type declaration must have a body, even if it is empty.
-extension type ET3(int i) implements Foo, Bar;
-                                          ^^^
-
-parser/inline_class/no_body:6:46: Unexpected token ';'.
+parser/inline_class/no_body:6:46: This requires the experimental 'primary-constructors' language feature to be enabled.
 extension type ET3(int i) implements Foo, Bar;
                                              ^
 
@@ -61,21 +45,9 @@
       handleClassNoWithClause()
       handleImplements(null, 0)
       handleClassHeader(class, class, null)
-      handleNoType(C)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleRecoverDeclarationHeader(DeclarationHeaderKind.Class)
-      handleRecoverableError(ExpectedClassBody, C, C)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-    endClassDeclaration(class, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(;)
-  endMetadataStar(0)
-  beginTopLevelMember(;)
-    handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-    handleInvalidTopLevelDeclaration(;)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
   endTopLevelDeclaration(;)
   beginMetadataStar(mixin)
   endMetadataStar(0)
@@ -138,21 +110,9 @@
         endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
       endPrimaryConstructor((, null, false, true)
       handleImplements(null, 0)
-      handleNoType())
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleRecoverDeclarationHeader(DeclarationHeaderKind.ExtensionType)
-      handleRecoverableError(ExpectedExtensionTypeBody, ), ))
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(;)
-  endMetadataStar(0)
-  beginTopLevelMember(;)
-    handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-    handleInvalidTopLevelDeclaration(;)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
   endTopLevelDeclaration(;)
   beginMetadataStar(extension)
   endMetadataStar(0)
@@ -176,21 +136,9 @@
       handleNoTypeArguments(;)
       handleType(Foo, null)
       handleImplements(implements, 1)
-      handleNoType(Foo)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleRecoverDeclarationHeader(DeclarationHeaderKind.ExtensionType)
-      handleRecoverableError(ExpectedExtensionTypeBody, Foo, Foo)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(;)
-  endMetadataStar(0)
-  beginTopLevelMember(;)
-    handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-    handleInvalidTopLevelDeclaration(;)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
   endTopLevelDeclaration(;)
   beginMetadataStar(extension)
   endMetadataStar(0)
@@ -217,20 +165,8 @@
       handleNoTypeArguments(;)
       handleType(Bar, null)
       handleImplements(implements, 2)
-      handleNoType(Bar)
-      handleClassExtends(null, 1)
-      handleClassNoWithClause()
-      handleImplements(null, 0)
-      handleRecoverDeclarationHeader(DeclarationHeaderKind.ExtensionType)
-      handleRecoverableError(ExpectedExtensionTypeBody, Bar, Bar)
-      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-    endExtensionTypeDeclaration(extension, null, extension, type, })
-  endTopLevelDeclaration(})
-  beginMetadataStar(;)
-  endMetadataStar(0)
-  beginTopLevelMember(;)
-    handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-    handleInvalidTopLevelDeclaration(;)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
   endTopLevelDeclaration(;)
-endCompilationUnit(12, )
+endCompilationUnit(8, )
diff --git a/pkg/front_end/parser_testcases/inline_class/no_body.dart.intertwined.expect b/pkg/front_end/parser_testcases/inline_class/no_body.dart.intertwined.expect
index 62ea95b..2110573 100644
--- a/pkg/front_end/parser_testcases/inline_class/no_body.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/inline_class/no_body.dart.intertwined.expect
@@ -25,42 +25,10 @@
             parseClassOrMixinOrEnumImplementsOpt(C)
               listener: handleImplements(null, 0)
             listener: handleClassHeader(class, class, null)
-          parseClassHeaderRecovery(C, class, class)
-            parseDeclarationHeaderRecoveryInternal(C, class, class, DeclarationHeaderKind.Class)
-              parseClassHeaderOpt(C, class, class)
-                parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
-                parseClassWithClauseOpt(C)
-                parseClassOrMixinOrEnumImplementsOpt(C)
-              skipUnexpectedTokenOpt(C, [extends, with, implements, {])
-              parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
-                listener: handleNoType(C)
-                listener: handleClassExtends(null, 1)
-              parseClassWithClauseOpt(C)
-                listener: handleClassNoWithClause()
-              parseClassOrMixinOrEnumImplementsOpt(C)
-                listener: handleImplements(null, 0)
-              listener: handleRecoverDeclarationHeader(DeclarationHeaderKind.Class)
-          ensureBlock(C, BlockKind(class declaration))
-            reportRecoverableError(C, ExpectedClassBody)
-              listener: handleRecoverableError(ExpectedClassBody, C, C)
-            insertBlock(C)
-              rewriter()
-              rewriter()
-          parseClassOrMixinOrExtensionBody(C, DeclarationKind.Class, C)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
-          listener: endClassDeclaration(class, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(;)
-      listener: endMetadataStar(0)
-    listener: beginTopLevelMember(;)
-    parseInvalidTopLevelDeclaration(})
-      reportRecoverableErrorWithToken(;, Template(UnexpectedToken))
-        listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-      listener: handleInvalidTopLevelDeclaration(;)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
   listener: endTopLevelDeclaration(;)
   parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(;)
@@ -177,39 +145,10 @@
             listener: endPrimaryConstructor((, null, false, true)
           parseClassOrMixinOrEnumImplementsOpt())
             listener: handleImplements(null, 0)
-          parseExtensionTypeHeaderRecovery(), extension)
-            parseDeclarationHeaderRecoveryInternal(), extension, extension, DeclarationHeaderKind.ExtensionType)
-              parseClassOrMixinOrEnumImplementsOpt())
-              skipUnexpectedTokenOpt(), [extends, with, implements, {])
-              parseClassExtendsOpt(), DeclarationHeaderKind.ExtensionType)
-                listener: handleNoType())
-                listener: handleClassExtends(null, 1)
-              parseClassWithClauseOpt())
-                listener: handleClassNoWithClause()
-              parseClassOrMixinOrEnumImplementsOpt())
-                listener: handleImplements(null, 0)
-              listener: handleRecoverDeclarationHeader(DeclarationHeaderKind.ExtensionType)
-          ensureBlock(), BlockKind(extension type declaration))
-            reportRecoverableError(), ExpectedExtensionTypeBody)
-              listener: handleRecoverableError(ExpectedExtensionTypeBody, ), ))
-            insertBlock())
-              rewriter()
-              rewriter()
-          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET1)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(;)
-      listener: endMetadataStar(0)
-    listener: beginTopLevelMember(;)
-    parseInvalidTopLevelDeclaration(})
-      reportRecoverableErrorWithToken(;, Template(UnexpectedToken))
-        listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-      listener: handleInvalidTopLevelDeclaration(;)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
   listener: endTopLevelDeclaration(;)
   parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(;)
@@ -245,39 +184,10 @@
             listener: handleNoTypeArguments(;)
             listener: handleType(Foo, null)
             listener: handleImplements(implements, 1)
-          parseExtensionTypeHeaderRecovery(), extension)
-            parseDeclarationHeaderRecoveryInternal(), extension, extension, DeclarationHeaderKind.ExtensionType)
-              parseClassOrMixinOrEnumImplementsOpt())
-              skipUnexpectedTokenOpt(Foo, [extends, with, implements, {])
-              parseClassExtendsOpt(Foo, DeclarationHeaderKind.ExtensionType)
-                listener: handleNoType(Foo)
-                listener: handleClassExtends(null, 1)
-              parseClassWithClauseOpt(Foo)
-                listener: handleClassNoWithClause()
-              parseClassOrMixinOrEnumImplementsOpt(Foo)
-                listener: handleImplements(null, 0)
-              listener: handleRecoverDeclarationHeader(DeclarationHeaderKind.ExtensionType)
-          ensureBlock(Foo, BlockKind(extension type declaration))
-            reportRecoverableError(Foo, ExpectedExtensionTypeBody)
-              listener: handleRecoverableError(ExpectedExtensionTypeBody, Foo, Foo)
-            insertBlock(Foo)
-              rewriter()
-              rewriter()
-          parseClassOrMixinOrExtensionBody(Foo, DeclarationKind.ExtensionType, ET2)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(;)
-      listener: endMetadataStar(0)
-    listener: beginTopLevelMember(;)
-    parseInvalidTopLevelDeclaration(})
-      reportRecoverableErrorWithToken(;, Template(UnexpectedToken))
-        listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-      listener: handleInvalidTopLevelDeclaration(;)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
   listener: endTopLevelDeclaration(;)
   parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
     parseMetadataStar(;)
@@ -316,39 +226,10 @@
             listener: handleNoTypeArguments(;)
             listener: handleType(Bar, null)
             listener: handleImplements(implements, 2)
-          parseExtensionTypeHeaderRecovery(), extension)
-            parseDeclarationHeaderRecoveryInternal(), extension, extension, DeclarationHeaderKind.ExtensionType)
-              parseClassOrMixinOrEnumImplementsOpt())
-              skipUnexpectedTokenOpt(Bar, [extends, with, implements, {])
-              parseClassExtendsOpt(Bar, DeclarationHeaderKind.ExtensionType)
-                listener: handleNoType(Bar)
-                listener: handleClassExtends(null, 1)
-              parseClassWithClauseOpt(Bar)
-                listener: handleClassNoWithClause()
-              parseClassOrMixinOrEnumImplementsOpt(Bar)
-                listener: handleImplements(null, 0)
-              listener: handleRecoverDeclarationHeader(DeclarationHeaderKind.ExtensionType)
-          ensureBlock(Bar, BlockKind(extension type declaration))
-            reportRecoverableError(Bar, ExpectedExtensionTypeBody)
-              listener: handleRecoverableError(ExpectedExtensionTypeBody, Bar, Bar)
-            insertBlock(Bar)
-              rewriter()
-              rewriter()
-          parseClassOrMixinOrExtensionBody(Bar, DeclarationKind.ExtensionType, ET3)
-            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
-            notEofOrType(CLOSE_CURLY_BRACKET, })
-            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
-          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
-  listener: endTopLevelDeclaration(})
-  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
-    parseMetadataStar(})
-      listener: beginMetadataStar(;)
-      listener: endMetadataStar(0)
-    listener: beginTopLevelMember(;)
-    parseInvalidTopLevelDeclaration(})
-      reportRecoverableErrorWithToken(;, Template(UnexpectedToken))
-        listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ';'., null, {lexeme: ;}], ;, ;)
-      listener: handleInvalidTopLevelDeclaration(;)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
   listener: endTopLevelDeclaration(;)
   reportAllErrorTokens(class)
-  listener: endCompilationUnit(12, )
+  listener: endCompilationUnit(8, )
diff --git a/pkg/front_end/parser_testcases/inline_class/no_body.dart.parser.expect b/pkg/front_end/parser_testcases/inline_class/no_body.dart.parser.expect
index 44b388b..b83a973 100644
--- a/pkg/front_end/parser_testcases/inline_class/no_body.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/inline_class/no_body.dart.parser.expect
@@ -1,15 +1,15 @@
 NOTICE: Stream was rewritten by parser!
 
-class C{};
+class C;
 mixin M{};
 extension E on int{};
-extension type ET1(int i){};
-extension type ET2(int i) implements Foo{};
-extension type ET3(int i) implements Foo, Bar{};
+extension type ET1(int i);
+extension type ET2(int i) implements Foo;
+extension type ET3(int i) implements Foo, Bar;
 
-class[KeywordToken] C[StringToken]{[SyntheticBeginToken]}[SyntheticToken];[SimpleToken]
+class[KeywordToken] C[StringToken];[SimpleToken]
 mixin[KeywordToken] M[StringToken]{[SyntheticBeginToken]}[SyntheticToken];[SimpleToken]
 extension[KeywordToken] E[StringToken] on[KeywordToken] int[StringToken]{[SyntheticBeginToken]}[SyntheticToken];[SimpleToken]
-extension[KeywordToken] type[StringToken] ET1[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken]{[SyntheticBeginToken]}[SyntheticToken];[SimpleToken]
-extension[KeywordToken] type[StringToken] ET2[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] Foo[StringToken]{[SyntheticBeginToken]}[SyntheticToken];[SimpleToken]
-extension[KeywordToken] type[StringToken] ET3[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] Foo[StringToken],[SimpleToken] Bar[StringToken]{[SyntheticBeginToken]}[SyntheticToken];[SimpleToken][SimpleToken]
+extension[KeywordToken] type[StringToken] ET1[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET2[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] Foo[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET3[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] Foo[StringToken],[SimpleToken] Bar[StringToken];[SimpleToken][SimpleToken]
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 18b4f00..7dadb47 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 282e087..727b256 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 20c4f50..92a660e 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 50a0d0b..3dffd5d 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 5421961..282ecf8 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
@@ -45,6 +45,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -52,6 +54,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(e)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -96,6 +101,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -103,6 +110,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(e)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
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 e46a8e9..75d8bdb 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
@@ -45,6 +45,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -52,6 +54,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(e)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -101,6 +106,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -108,6 +115,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(e)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
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 f1b6406..825b7be 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 037f214..5984859 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 145eb0d..6f8372b 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -57,6 +60,9 @@
                               listener: handleSend(e, e)
                       parseArgumentOrIndexStar(e, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(e)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -93,6 +99,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(e)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -107,6 +116,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(e)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -131,6 +143,9 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(e)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
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 71c0c8a..ec75899 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
@@ -76,7 +76,7 @@
             handleType(int, null)
             handleIdentifier(i1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -86,7 +86,7 @@
             handleNoType(abstract)
             handleIdentifier(i2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
@@ -98,7 +98,7 @@
             handleType(num, null)
             handleIdentifier(i3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, covariant, null, null, 1, covariant, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, null, 1, covariant, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
@@ -108,7 +108,7 @@
             handleNoType(var)
             handleIdentifier(i4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, covariant, null, var, 1, covariant, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, var, 1, covariant, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -118,7 +118,7 @@
             handleNoType(abstract)
             handleIdentifier(i5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(var)
         endMetadataStar(0)
@@ -128,7 +128,7 @@
             handleNoType(abstract)
             handleIdentifier(i6, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
@@ -140,7 +140,7 @@
             handleIdentifier(abstract, fieldDeclaration)
             handleNoFieldInitializer(i7)
             handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], abstract, abstract)
-          endClassFields(null, null, null, null, null, null, null, 1, C, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, C, ;)
         endMember()
         beginMetadataStar(i7)
         endMetadataStar(0)
@@ -150,7 +150,7 @@
             handleNoType(;)
             handleIdentifier(i7, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, i7, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, i7, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
     endClassDeclaration(abstract, })
@@ -189,7 +189,7 @@
             handleNoType(required)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, covariant, null, null, 1, covariant, ;)
+          endFields(DeclarationKind.Class, 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 ba4b543..1d93e4d 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
@@ -46,7 +46,7 @@
                   listener: handleIdentifier(i1, fieldDeclaration)
                 parseFieldInitializerOpt(i1, i1, null, abstract, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -65,7 +65,7 @@
                   listener: handleIdentifier(i2, fieldDeclaration)
                 parseFieldInitializerOpt(i2, i2, null, abstract, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -84,7 +84,7 @@
                   listener: handleIdentifier(i3, fieldDeclaration)
                 parseFieldInitializerOpt(i3, i3, null, abstract, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, covariant, null, null, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -103,7 +103,7 @@
                   listener: handleIdentifier(i4, fieldDeclaration)
                 parseFieldInitializerOpt(i4, i4, null, abstract, null, null, var, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, covariant, null, var, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -122,7 +122,7 @@
                   listener: handleIdentifier(i5, fieldDeclaration)
                 parseFieldInitializerOpt(i5, i5, null, abstract, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, var)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -141,7 +141,7 @@
                   listener: handleIdentifier(i6, fieldDeclaration)
                 parseFieldInitializerOpt(i6, i6, null, abstract, null, null, var, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -162,7 +162,7 @@
                   reportRecoverableError(abstract, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
                     listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], abstract, abstract)
                   rewriter()
-                listener: endClassFields(null, null, null, null, null, null, null, 1, C, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, C, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, i7)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -180,7 +180,7 @@
                   listener: handleIdentifier(i7, fieldDeclaration)
                 parseFieldInitializerOpt(i7, i7, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, i7, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, i7, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
@@ -252,7 +252,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Bar)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, covariant, null, null, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 fd93a78..bf3c0d2 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
@@ -82,7 +82,7 @@
             handleType(num, null)
             handleIdentifier(i3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, null, covariant, null, null, 1, covariant, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, covariant, null, null, 1, covariant, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -94,7 +94,7 @@
             handleType(int, null)
             handleIdentifier(i4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -104,7 +104,7 @@
             handleNoType(external)
             handleIdentifier(i5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, external, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -114,7 +114,7 @@
             handleNoType(final)
             handleIdentifier(i6, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, static, null, null, final, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, external, static, null, null, final, 1, static, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -124,7 +124,7 @@
             handleNoType(external)
             handleIdentifier(i7, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, static, null, null, final, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, external, static, null, null, final, 1, static, ;)
         endMember()
         beginMetadataStar(final)
         endMetadataStar(0)
@@ -135,7 +135,7 @@
             handleNoType(external)
             handleIdentifier(i8, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, external, static, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, 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 5dbb221..782da25 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
@@ -84,7 +84,7 @@
                   listener: handleIdentifier(i3, fieldDeclaration)
                 parseFieldInitializerOpt(i3, i3, null, null, null, external, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, external, null, covariant, null, null, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, external, null, covariant, null, null, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -105,7 +105,7 @@
                   listener: handleIdentifier(i4, fieldDeclaration)
                 parseFieldInitializerOpt(i4, i4, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, external, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, external, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -124,7 +124,7 @@
                   listener: handleIdentifier(i5, fieldDeclaration)
                 parseFieldInitializerOpt(i5, i5, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, external, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, external, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -143,7 +143,7 @@
                   listener: handleIdentifier(i6, fieldDeclaration)
                 parseFieldInitializerOpt(i6, i6, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, external, static, null, null, final, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, external, static, null, null, final, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -162,7 +162,7 @@
                   listener: handleIdentifier(i7, fieldDeclaration)
                 parseFieldInitializerOpt(i7, i7, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, external, static, null, null, final, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, external, static, null, null, final, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, final)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -183,7 +183,7 @@
                   listener: handleIdentifier(i8, fieldDeclaration)
                 parseFieldInitializerOpt(i8, i8, null, null, null, external, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, external, static, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, external, static, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 536f1d4..1e8b675 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
@@ -76,7 +76,7 @@
             handleNoType(late)
             handleIdentifier(z, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -101,7 +101,7 @@
                 endInitializedIdentifier(x)
               endVariablesDeclaration(1, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -126,7 +126,7 @@
                 endInitializedIdentifier(x)
               endVariablesDeclaration(1, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 74b93f2..8773695 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
@@ -110,7 +110,7 @@
                   listener: handleIdentifier(z, fieldDeclaration)
                 parseFieldInitializerOpt(z, z, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -118,7 +118,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, foo, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -163,7 +163,7 @@
                             listener: endVariablesDeclaration(1, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -171,7 +171,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, VoidType(), null, bar, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, VoidType(), null, null, bar, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, bar, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -215,7 +215,7 @@
                             listener: endVariablesDeclaration(1, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 c81a7dd..6e6bb08 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(x)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 4b91116..91b917f 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(x)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -83,6 +86,8 @@
                         listener: handleDotAccess(., ), false)
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 f9c50a2..8c872e8 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(x)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -81,6 +84,8 @@
                         listener: handleDotAccess(., ), false)
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 444fda1..6423b17 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(x)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 c740839..abf1043 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(c)
                 looksLikeLocalFunction(c)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -52,6 +54,9 @@
                 looksLikeLocalFunction(c)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -67,6 +72,8 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -89,6 +96,9 @@
                 looksLikeLocalFunction(c)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -107,6 +117,8 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -117,6 +129,8 @@
                                   parseLiteralInt(=)
                       parseArgumentOrIndexStar(c, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -138,6 +152,9 @@
                 looksLikeLocalFunction(c)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -156,6 +173,8 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -166,6 +185,8 @@
                                   parseLiteralInt(=)
                       parseArgumentOrIndexStar(c, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 c14967b..cc945ad 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
@@ -25,6 +25,9 @@
         parseFunctionBody(log, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
+                  skipObjectPatternRest(current)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -48,6 +51,9 @@
                 listener: handleDotAccess(., current, false)
                 parseArgumentOrIndexStar(current, NoTypeParamOrArg(), false)
                   parseExpression([)
+                    looksLikeOuterPatternEquals([)
+                      skipOuterPattern([)
+                        skipObjectPatternRest(logKey)
                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression([, true, ConstantPatternContext.none)
                         parsePrimary([, expression, ConstantPatternContext.none)
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 e485e18..284897a 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
@@ -25,6 +25,8 @@
         parseFunctionBody(log, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -32,6 +34,9 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                              skipObjectPatternRest(current)
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -55,6 +60,9 @@
                             listener: handleDotAccess(., current, false)
                             parseArgumentOrIndexStar(current, NoTypeParamOrArg(), false)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
+                                    skipObjectPatternRest(logKey)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
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 8898e45..8fd3c99 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39723.dart.expect
@@ -37,7 +37,7 @@
             handleNoArguments(;)
             handleSend(index, index)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, operator, (, null, ;)
+          endMethod(DeclarationKind.Class, null, operator, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 e702087..0659336 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, operator, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, operator, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, A)
                 listener: handleNoType({)
                 parseOperatorName({)
@@ -66,6 +66,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(index)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -80,7 +83,7 @@
                     ensureSemicolon(index)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, operator, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, operator, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -134,6 +137,8 @@
                     parseVariableInitializerOpt(a)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -150,6 +155,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -184,6 +192,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -200,6 +211,8 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -216,6 +229,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -235,12 +251,16 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
                                           parseLiteralInt([)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -256,6 +276,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -275,12 +298,16 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
                                           parseLiteralInt([)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 ef133c5..c5e3dbe 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
@@ -37,7 +37,7 @@
             handleNoArguments(;)
             handleSend(index, index)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, operator, (, null, ;)
+          endMethod(DeclarationKind.Class, null, operator, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 f5ad63d..b029b8a 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, operator, DeclarationKind.Class, A, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, operator, DeclarationKind.Class, A, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, A)
                 listener: handleNoType({)
                 parseOperatorName({)
@@ -66,6 +66,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(index)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -80,7 +83,7 @@
                     ensureSemicolon(index)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, operator, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, operator, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -134,6 +137,8 @@
                     parseVariableInitializerOpt(a)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -151,6 +156,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -158,6 +165,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -195,6 +205,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -202,6 +214,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -220,6 +235,8 @@
                           listener: handleNoTypeArguments([)
                           parseLiteralListSuffix(?., null)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -237,6 +254,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -244,6 +263,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -265,12 +287,16 @@
                                 parsePrimary(?, expression, ConstantPatternContext.none)
                                   parseLiteralListSuffix(?, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
                                             parseLiteralInt([)
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), true)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -287,6 +313,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -294,6 +322,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -315,12 +346,16 @@
                                 parsePrimary(?, expression, ConstantPatternContext.none)
                                   parseLiteralListSuffix(?, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
                                             parseLiteralInt([)
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), true)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 733a443..4e969d3 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
@@ -40,6 +40,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -98,6 +100,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -160,6 +164,9 @@
                       parseVariableInitializerOpt(f1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -182,6 +189,9 @@
                 looksLikeLocalFunction(f1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -201,6 +211,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -230,6 +242,9 @@
                       parseVariableInitializerOpt(f2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -252,6 +267,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -275,6 +293,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
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 a44a93b..09fa3b2 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
@@ -40,6 +40,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -98,6 +100,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -160,6 +164,9 @@
                       parseVariableInitializerOpt(f1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -182,6 +189,9 @@
                 looksLikeLocalFunction(f1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -201,6 +211,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -230,6 +242,9 @@
                       parseVariableInitializerOpt(f2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -252,6 +267,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -271,6 +289,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
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 38e308e..a4ebdc3 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
@@ -40,6 +40,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -98,6 +100,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -160,6 +164,9 @@
                       parseVariableInitializerOpt(f1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(foo)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -182,6 +189,9 @@
                 looksLikeLocalFunction(f1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -201,6 +211,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -230,6 +242,9 @@
                       parseVariableInitializerOpt(f2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -253,6 +268,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -260,6 +277,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(f2)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -285,6 +305,8 @@
                               listener: beginArguments(()
                               allowedToShortcutParseExpression()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
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 883f652..3a6867a 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
@@ -70,6 +70,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -124,6 +126,9 @@
                       parseVariableInitializerOpt(f2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -146,6 +151,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -172,6 +180,8 @@
                             listener: beginArguments(()
                             allowedToShortcutParseExpression()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
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 66f2523..3860dba 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
@@ -70,6 +70,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -124,6 +126,9 @@
                       parseVariableInitializerOpt(f2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
+                              skipObjectPatternRest(bar)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -146,6 +151,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -168,6 +176,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
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 b184006..6071279 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
@@ -29,6 +29,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -74,6 +76,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
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 9b26457..434f73d 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
@@ -27,6 +27,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -70,6 +72,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
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 53c647e..a053f1a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_39858.dart.expect
@@ -46,7 +46,7 @@
             handleNoType(late)
             handleIdentifier(x1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -56,7 +56,7 @@
             handleNoType(late)
             handleIdentifier(x2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, late, null, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
@@ -66,7 +66,7 @@
             handleNoType(late)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, 1, covariant, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -78,7 +78,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -90,7 +90,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, late, null, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
@@ -102,7 +102,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
+          endFields(DeclarationKind.Class, 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 d81400e..fc4b6ea 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
@@ -43,7 +43,7 @@
                   listener: handleIdentifier(x1, fieldDeclaration)
                 parseFieldInitializerOpt(x1, x1, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -61,7 +61,7 @@
                   listener: handleIdentifier(x2, fieldDeclaration)
                 parseFieldInitializerOpt(x2, x2, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, late, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -79,7 +79,7 @@
                   listener: handleIdentifier(x3, fieldDeclaration)
                 parseFieldInitializerOpt(x3, x3, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -98,13 +98,15 @@
                 parseFieldInitializerOpt(x4, x4, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -123,13 +125,15 @@
                 parseFieldInitializerOpt(x5, x5, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, static, null, late, null, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, late, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -148,13 +152,15 @@
                 parseFieldInitializerOpt(x6, x6, late, null, null, null, null, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, null, covariant, late, null, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, covariant, late, null, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 6357061..cba2841 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
@@ -19,7 +19,7 @@
             handleNoType(var)
             handleIdentifier(x1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -28,7 +28,7 @@
             handleNoType(var)
             handleIdentifier(x2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, var, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
@@ -37,7 +37,7 @@
             handleNoType(var)
             handleIdentifier(x3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, 1, covariant, ;)
         endMember()
         beginMetadataStar(var)
         endMetadataStar(0)
@@ -48,7 +48,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -59,7 +59,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, var, 1, static, ;)
         endMember()
         beginMetadataStar(covariant)
         endMetadataStar(0)
@@ -70,7 +70,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(0)
             endFieldInitializer(=, 0)
-          endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
+          endFields(DeclarationKind.Class, 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 9c1ac88..4ab5e7c 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
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(x1, fieldDeclaration)
                 parseFieldInitializerOpt(x1, x1, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -59,7 +59,7 @@
                   listener: handleIdentifier(x2, fieldDeclaration)
                 parseFieldInitializerOpt(x2, x2, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, var, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -76,7 +76,7 @@
                   listener: handleIdentifier(x3, fieldDeclaration)
                 parseFieldInitializerOpt(x3, x3, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, var)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -94,13 +94,15 @@
                 parseFieldInitializerOpt(x4, x4, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -118,13 +120,15 @@
                 parseFieldInitializerOpt(x5, x5, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, static, null, null, var, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, var, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, covariant)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, X)
@@ -142,13 +146,15 @@
                 parseFieldInitializerOpt(x6, x6, null, null, null, null, var, DeclarationKind.Class, X)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(0)
                   listener: endFieldInitializer(=, 0)
-                listener: endClassFields(null, null, null, null, covariant, null, var, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, covariant, null, var, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart
index 8658825..3b7495b 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 main() {
   switch(a) {
     // Parse as conditional expression.
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart
new file mode 100644
index 0000000..8658825
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart
@@ -0,0 +1,6 @@
+main() {
+  switch(a) {
+    // Parse as conditional expression.
+    case b ? [c] : d: e;
+  }
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.expect
new file mode 100644
index 0000000..5cdd7ed
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.expect
@@ -0,0 +1,87 @@
+Problems reported:
+
+parser/nnbd/issue_40267_case_01_2:4:14: Expected ':' before this.
+    case b ? [c] : d: e;
+             ^
+
+parser/nnbd/issue_40267_case_01_2:4:16: Expected ';' after this.
+    case b ? [c] : d: e;
+               ^
+
+parser/nnbd/issue_40267_case_01_2:4:18: Expected an identifier, but got ':'.
+    case b ? [c] : d: e;
+                 ^
+
+parser/nnbd/issue_40267_case_01_2:4:16: Expected ';' after this.
+    case b ? [c] : d: e;
+               ^
+
+parser/nnbd/issue_40267_case_01_2:4:18: Unexpected token ':'.
+    case b ? [c] : d: e;
+                 ^
+
+beginCompilationUnit(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({)
+        beginSwitchStatement(switch)
+          handleIdentifier(a, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(a, a)
+          handleParenthesizedCondition((, null, null)
+          beginSwitchBlock({)
+            beginCaseExpression(case)
+              beginPattern(case)
+                beginConstantPattern(null)
+                  handleIdentifier(b, expression)
+                  handleNoTypeArguments(?)
+                  handleNoArguments(?)
+                  handleSend(b, b)
+                endConstantPattern(null)
+                handleNullCheckPattern(?)
+              endPattern(?)
+              handleSwitchCaseNoWhenClause(?)
+              handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], [, [)
+            endCaseExpression(case, null, :)
+            beginSwitchCase(0, 1, case)
+              handleNoTypeArguments([)
+              handleIdentifier(c, expression)
+              handleNoTypeArguments(])
+              handleNoArguments(])
+              handleSend(c, c)
+              handleLiteralList(1, [, null, ])
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+              handleExpressionStatement([, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+              handleExpressionStatement(:, ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}], :, :)
+              handleIdentifier(d, labelDeclaration)
+              handleLabel(:)
+              beginLabeledStatement(e, 1)
+                handleIdentifier(e, expression)
+                handleNoTypeArguments(;)
+                handleNoArguments(;)
+                handleSend(e, e)
+                handleExpressionStatement(e, ;)
+              endLabeledStatement(1)
+            endSwitchCase(0, 1, null, null, 3, case, ;)
+          endSwitchBlock(1, {, })
+        endSwitchStatement(switch, })
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.intertwined.expect
new file mode 100644
index 0000000..386b815
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.intertwined.expect
@@ -0,0 +1,219 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, switch)
+          parseStatement({)
+            parseStatementX({)
+              parseSwitchStatement({)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(a, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt(a)
+                                  listener: handleNoArguments())
+                                listener: handleSend(a, a)
+                    ensureCloseParen(a, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                parseSwitchBlock())
+                  ensureBlock(), BlockKind(switch statement))
+                  listener: beginSwitchBlock({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, case)
+                  peekPastLabels(case)
+                  listener: beginCaseExpression(case)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    listener: beginPattern(case)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      listener: beginConstantPattern(null)
+                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
+                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
+                          parsePrimary(case, expression, ConstantPatternContext.implicit)
+                            parseSendOrFunctionLiteral(case, expression, ConstantPatternContext.implicit)
+                              parseSend(case, expression, ConstantPatternContext.implicit)
+                                ensureIdentifier(case, expression)
+                                  listener: handleIdentifier(b, expression)
+                                listener: handleNoTypeArguments(?)
+                                parseArgumentsOpt(b)
+                                  listener: handleNoArguments(?)
+                                listener: handleSend(b, b)
+                        canParseAsConditional(?)
+                          parseExpressionWithoutCascade(?)
+                            parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(?, false, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseLiteralListSuffix(?, null)
+                                    parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                          skipObjectPatternRest(c)
+                                      parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression([, true, ConstantPatternContext.none)
+                                          parsePrimary([, expression, ConstantPatternContext.none)
+                                            parseSendOrFunctionLiteral([, expression, ConstantPatternContext.none)
+                                              parseSend([, expression, ConstantPatternContext.none)
+                                                ensureIdentifier([, expression)
+                                                parseArgumentsOpt(c)
+                          parseExpressionWithoutCascade(:)
+                            parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(:, false, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                    parseSend(:, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(:, expression)
+                                      parseArgumentsOpt(d)
+                      listener: endConstantPattern(null)
+                    listener: handleNullCheckPattern(?)
+                    listener: endPattern(?)
+                  listener: handleSwitchCaseNoWhenClause(?)
+                  ensureColon(?)
+                    rewriteAndRecover(?, Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], :)
+                      reportRecoverableError([, Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}])
+                        listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], [, [)
+                      rewriter()
+                  listener: endCaseExpression(case, null, :)
+                  peekPastLabels([)
+                  parseStatementsInSwitchCase(:, [, case, 0, 1, null, null)
+                    listener: beginSwitchCase(0, 1, case)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseExpressionStatementOrDeclaration(:, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+                            looksLikeLocalFunction([)
+                            parseExpressionStatement(:)
+                              parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
+                                parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                    parsePrimary(:, expression, ConstantPatternContext.none)
+                                      listener: handleNoTypeArguments([)
+                                      parseLiteralListSuffix(:, null)
+                                        parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                              skipObjectPatternRest(c)
+                                          parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression([, true, ConstantPatternContext.none)
+                                              parsePrimary([, expression, ConstantPatternContext.none)
+                                                parseSendOrFunctionLiteral([, expression, ConstantPatternContext.none)
+                                                  parseSend([, expression, ConstantPatternContext.none)
+                                                    ensureIdentifier([, expression)
+                                                      listener: handleIdentifier(c, expression)
+                                                    listener: handleNoTypeArguments(])
+                                                    parseArgumentsOpt(c)
+                                                      listener: handleNoArguments(])
+                                                    listener: handleSend(c, c)
+                                        listener: handleLiteralList(1, [, null, ])
+                              ensureSemicolon(])
+                                reportRecoverableError(], Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+                                rewriter()
+                              listener: handleExpressionStatement([, ;)
+                    peekPastLabels(:)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseExpressionStatementOrDeclaration(;, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                            looksLikeLocalFunction(:)
+                            parseExpressionStatement(;)
+                              parseExpression(;)
+                                looksLikeOuterPatternEquals(;)
+                                  skipOuterPattern(;)
+                                parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                    parsePrimary(;, expression, ConstantPatternContext.none)
+                                      parseSend(;, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(;, expression)
+                                          reportRecoverableErrorWithToken(:, Template(ExpectedIdentifier))
+                                            listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(:)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(:)
+                                        listener: handleSend(, )
+                              ensureSemicolon()
+                                reportRecoverableError(], Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+                                rewriter()
+                              listener: handleExpressionStatement(:, ;)
+                    reportRecoverableError(:, Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}])
+                      listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}], :, :)
+                    peekPastLabels(d)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseLabeledStatement(:)
+                          parseLabel(:)
+                            ensureIdentifier(:, labelDeclaration)
+                              listener: handleIdentifier(d, labelDeclaration)
+                            listener: handleLabel(:)
+                          listener: beginLabeledStatement(e, 1)
+                          parseStatement(:)
+                            parseStatementX(:)
+                              parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+                                looksLikeLocalFunction(e)
+                                parseExpressionStatement(:)
+                                  parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
+                                        skipObjectPatternRest(e)
+                                    parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                                      parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                        parsePrimary(:, expression, ConstantPatternContext.none)
+                                          parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                            parseSend(:, expression, ConstantPatternContext.none)
+                                              ensureIdentifier(:, expression)
+                                                listener: handleIdentifier(e, expression)
+                                              listener: handleNoTypeArguments(;)
+                                              parseArgumentsOpt(e)
+                                                listener: handleNoArguments(;)
+                                              listener: handleSend(e, e)
+                                  ensureSemicolon(e)
+                                  listener: handleExpressionStatement(e, ;)
+                          listener: endLabeledStatement(1)
+                    peekPastLabels(})
+                    listener: endSwitchCase(0, 1, null, null, 3, case, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endSwitchBlock(1, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.parser.expect
new file mode 100644
index 0000000..bac69eb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+main() {
+switch(a) {
+
+case b ? :[c] ;*synthetic*;: d: e;
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] b[StringToken] ?[SimpleToken] :[SyntheticToken][[BeginToken]c[StringToken]][SimpleToken] ;[SyntheticToken][SyntheticStringToken];[SyntheticToken]:[SimpleToken] d[StringToken]:[SimpleToken] e[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.scanner.expect
new file mode 100644
index 0000000..8fa4fa9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_01_2.dart.scanner.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case b ? [c] : d: e;
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] b[StringToken] ?[SimpleToken] [[BeginToken]c[StringToken]][SimpleToken] :[SimpleToken] d[StringToken]:[SimpleToken] e[StringToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart
index 064552e..8ada7767 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 main() {
   switch(a) {
     // Parse as null aware index.
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart
new file mode 100644
index 0000000..064552e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart
@@ -0,0 +1,6 @@
+main() {
+  switch(a) {
+    // Parse as null aware index.
+    case b?[c] : {{break;}}
+  }
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.expect
new file mode 100644
index 0000000..0382837
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.expect
@@ -0,0 +1,48 @@
+beginCompilationUnit(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({)
+        beginSwitchStatement(switch)
+          handleIdentifier(a, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(a, a)
+          handleParenthesizedCondition((, null, null)
+          beginSwitchBlock({)
+            beginCaseExpression(case)
+              beginPattern(case)
+                beginConstantPattern(null)
+                  handleIdentifier(b, expression)
+                  handleNoTypeArguments(?)
+                  handleNoArguments(?)
+                  handleSend(b, b)
+                  handleIdentifier(c, expression)
+                  handleNoTypeArguments(])
+                  handleNoArguments(])
+                  handleSend(c, c)
+                  handleIndexedExpression(?, [, ])
+                endConstantPattern(null)
+              endPattern(])
+              handleSwitchCaseNoWhenClause(])
+            endCaseExpression(case, null, :)
+            beginSwitchCase(0, 1, case)
+              beginBlock({, BlockKind(statement))
+                beginBlock({, BlockKind(statement))
+                  handleBreakStatement(false, break, ;)
+                endBlock(1, {, }, BlockKind(statement))
+              endBlock(1, {, }, BlockKind(statement))
+            endSwitchCase(0, 1, null, null, 1, case, })
+          endSwitchBlock(1, {, })
+        endSwitchStatement(switch, })
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.intertwined.expect
new file mode 100644
index 0000000..e725cd1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.intertwined.expect
@@ -0,0 +1,173 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, switch)
+          parseStatement({)
+            parseStatementX({)
+              parseSwitchStatement({)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(a, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt(a)
+                                  listener: handleNoArguments())
+                                listener: handleSend(a, a)
+                    ensureCloseParen(a, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                parseSwitchBlock())
+                  ensureBlock(), BlockKind(switch statement))
+                  listener: beginSwitchBlock({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, case)
+                  peekPastLabels(case)
+                  listener: beginCaseExpression(case)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    listener: beginPattern(case)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      listener: beginConstantPattern(null)
+                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
+                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
+                          parsePrimary(case, expression, ConstantPatternContext.implicit)
+                            parseSendOrFunctionLiteral(case, expression, ConstantPatternContext.implicit)
+                              parseSend(case, expression, ConstantPatternContext.implicit)
+                                ensureIdentifier(case, expression)
+                                  listener: handleIdentifier(b, expression)
+                                listener: handleNoTypeArguments(?)
+                                parseArgumentsOpt(b)
+                                  listener: handleNoArguments(?)
+                                listener: handleSend(b, b)
+                        canParseAsConditional(?)
+                          parseExpressionWithoutCascade(?)
+                            parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(?, false, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseLiteralListSuffix(?, null)
+                                    parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                          skipObjectPatternRest(c)
+                                      parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression([, true, ConstantPatternContext.none)
+                                          parsePrimary([, expression, ConstantPatternContext.none)
+                                            parseSendOrFunctionLiteral([, expression, ConstantPatternContext.none)
+                                              parseSend([, expression, ConstantPatternContext.none)
+                                                ensureIdentifier([, expression)
+                                                parseArgumentsOpt(c)
+                          parseExpressionWithoutCascade(:)
+                            parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(:, false, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralSetOrMapSuffix(:, null)
+                                    parseExpression({)
+                                      looksLikeOuterPatternEquals({)
+                                        skipOuterPattern({)
+                                      parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression({, true, ConstantPatternContext.none)
+                                          parsePrimary({, expression, ConstantPatternContext.none)
+                                            parseLiteralSetOrMapSuffix({, null)
+                                              parseExpression({)
+                                                looksLikeOuterPatternEquals({)
+                                                  skipOuterPattern({)
+                                                parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                  parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                    parsePrimary({, expression, ConstantPatternContext.none)
+                                                      inPlainSync()
+                                                      parseSend({, expression, ConstantPatternContext.none)
+                                                        ensureIdentifier({, expression)
+                                                          reportRecoverableErrorWithToken(break, Template(ExpectedIdentifier))
+                                                          rewriter()
+                                                        parseArgumentsOpt()
+                                              reportRecoverableError(break, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+                        parseArgumentOrIndexStar(b, NoTypeParamOrArg(), true)
+                          parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(c)
+                            parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression([, true, ConstantPatternContext.none)
+                                parsePrimary([, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral([, expression, ConstantPatternContext.none)
+                                    parseSend([, expression, ConstantPatternContext.none)
+                                      ensureIdentifier([, expression)
+                                        listener: handleIdentifier(c, expression)
+                                      listener: handleNoTypeArguments(])
+                                      parseArgumentsOpt(c)
+                                        listener: handleNoArguments(])
+                                      listener: handleSend(c, c)
+                          listener: handleIndexedExpression(?, [, ])
+                      listener: endConstantPattern(null)
+                    listener: endPattern(])
+                  listener: handleSwitchCaseNoWhenClause(])
+                  ensureColon(])
+                  listener: endCaseExpression(case, null, :)
+                  peekPastLabels({)
+                  parseStatementsInSwitchCase(:, {, case, 0, 1, null, null)
+                    listener: beginSwitchCase(0, 1, case)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseBlock(:, BlockKind(statement))
+                          ensureBlock(:, BlockKind(statement))
+                          listener: beginBlock({, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, {)
+                          parseStatement({)
+                            parseStatementX({)
+                              parseBlock({, BlockKind(statement))
+                                ensureBlock({, BlockKind(statement))
+                                listener: beginBlock({, BlockKind(statement))
+                                notEofOrType(CLOSE_CURLY_BRACKET, break)
+                                parseStatement({)
+                                  parseStatementX({)
+                                    parseBreakStatement({)
+                                      isBreakAllowed()
+                                      ensureSemicolon(break)
+                                      listener: handleBreakStatement(false, break, ;)
+                                notEofOrType(CLOSE_CURLY_BRACKET, })
+                                listener: endBlock(1, {, }, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, })
+                          listener: endBlock(1, {, }, BlockKind(statement))
+                    peekPastLabels(})
+                    listener: endSwitchCase(0, 1, null, null, 1, case, })
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endSwitchBlock(1, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.parser.expect
new file mode 100644
index 0000000..476f425
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.parser.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case b?[c] : {{break;}}
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] b[StringToken]?[SimpleToken][[BeginToken]c[StringToken]][SimpleToken] :[SimpleToken] {[BeginToken]{[BeginToken]break[KeywordToken];[SimpleToken]}[SimpleToken]}[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.scanner.expect
new file mode 100644
index 0000000..476f425
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_02_2.dart.scanner.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case b?[c] : {{break;}}
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] b[StringToken]?[SimpleToken][[BeginToken]c[StringToken]][SimpleToken] :[SimpleToken] {[BeginToken]{[BeginToken]break[KeywordToken];[SimpleToken]}[SimpleToken]}[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart
index 4bbdfc0..0766ac0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 main() {
   switch(a) {
     // Parse as conditional.
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart
new file mode 100644
index 0000000..4bbdfc0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart
@@ -0,0 +1,6 @@
+main() {
+  switch(a) {
+    // Parse as conditional.
+    case x?[4]:baz:break; // as case (x?[4]:baz): break;
+  }
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.expect
new file mode 100644
index 0000000..73ee9a5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.expect
@@ -0,0 +1,80 @@
+Problems reported:
+
+parser/nnbd/issue_40267_case_03_2:4:12: Expected ':' before this.
+    case x?[4]:baz:break; // as case (x?[4]:baz): break;
+           ^
+
+parser/nnbd/issue_40267_case_03_2:4:14: Expected ';' after this.
+    case x?[4]:baz:break; // as case (x?[4]:baz): break;
+             ^
+
+parser/nnbd/issue_40267_case_03_2:4:15: Expected an identifier, but got ':'.
+    case x?[4]:baz:break; // as case (x?[4]:baz): break;
+              ^
+
+parser/nnbd/issue_40267_case_03_2:4:14: Expected ';' after this.
+    case x?[4]:baz:break; // as case (x?[4]:baz): break;
+             ^
+
+parser/nnbd/issue_40267_case_03_2:4:15: Unexpected token ':'.
+    case x?[4]:baz:break; // as case (x?[4]:baz): break;
+              ^
+
+beginCompilationUnit(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({)
+        beginSwitchStatement(switch)
+          handleIdentifier(a, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(a, a)
+          handleParenthesizedCondition((, null, null)
+          beginSwitchBlock({)
+            beginCaseExpression(case)
+              beginPattern(case)
+                beginConstantPattern(null)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(?)
+                  handleNoArguments(?)
+                  handleSend(x, x)
+                endConstantPattern(null)
+                handleNullCheckPattern(?)
+              endPattern(?)
+              handleSwitchCaseNoWhenClause(?)
+              handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], [, [)
+            endCaseExpression(case, null, :)
+            beginSwitchCase(0, 1, case)
+              handleNoTypeArguments([)
+              handleLiteralInt(4)
+              handleLiteralList(1, [, null, ])
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+              handleExpressionStatement([, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+              handleExpressionStatement(:, ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}], :, :)
+              handleIdentifier(baz, labelDeclaration)
+              handleLabel(:)
+              beginLabeledStatement(break, 1)
+                handleBreakStatement(false, break, ;)
+              endLabeledStatement(1)
+            endSwitchCase(0, 1, null, null, 3, case, ;)
+          endSwitchBlock(1, {, })
+        endSwitchStatement(switch, })
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.intertwined.expect
new file mode 100644
index 0000000..e338da4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.intertwined.expect
@@ -0,0 +1,192 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, switch)
+          parseStatement({)
+            parseStatementX({)
+              parseSwitchStatement({)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(a, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt(a)
+                                  listener: handleNoArguments())
+                                listener: handleSend(a, a)
+                    ensureCloseParen(a, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                parseSwitchBlock())
+                  ensureBlock(), BlockKind(switch statement))
+                  listener: beginSwitchBlock({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, case)
+                  peekPastLabels(case)
+                  listener: beginCaseExpression(case)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    listener: beginPattern(case)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      listener: beginConstantPattern(null)
+                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
+                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
+                          parsePrimary(case, expression, ConstantPatternContext.implicit)
+                            parseSendOrFunctionLiteral(case, expression, ConstantPatternContext.implicit)
+                              parseSend(case, expression, ConstantPatternContext.implicit)
+                                ensureIdentifier(case, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(?)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(?)
+                                listener: handleSend(x, x)
+                        canParseAsConditional(?)
+                          parseExpressionWithoutCascade(?)
+                            parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(?, false, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseLiteralListSuffix(?, null)
+                                    parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                      parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression([, true, ConstantPatternContext.none)
+                                          parsePrimary([, expression, ConstantPatternContext.none)
+                                            parseLiteralInt([)
+                          parseExpressionWithoutCascade(:)
+                            parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(:, false, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                    parseSend(:, expression, ConstantPatternContext.none)
+                                      ensureIdentifier(:, expression)
+                                      parseArgumentsOpt(baz)
+                      listener: endConstantPattern(null)
+                    listener: handleNullCheckPattern(?)
+                    listener: endPattern(?)
+                  listener: handleSwitchCaseNoWhenClause(?)
+                  ensureColon(?)
+                    rewriteAndRecover(?, Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], :)
+                      reportRecoverableError([, Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}])
+                        listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], [, [)
+                      rewriter()
+                  listener: endCaseExpression(case, null, :)
+                  peekPastLabels([)
+                  parseStatementsInSwitchCase(:, [, case, 0, 1, null, null)
+                    listener: beginSwitchCase(0, 1, case)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseExpressionStatementOrDeclaration(:, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+                            looksLikeLocalFunction([)
+                            parseExpressionStatement(:)
+                              parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
+                                parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                    parsePrimary(:, expression, ConstantPatternContext.none)
+                                      listener: handleNoTypeArguments([)
+                                      parseLiteralListSuffix(:, null)
+                                        parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                          parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression([, true, ConstantPatternContext.none)
+                                              parsePrimary([, expression, ConstantPatternContext.none)
+                                                parseLiteralInt([)
+                                                  listener: handleLiteralInt(4)
+                                        listener: handleLiteralList(1, [, null, ])
+                              ensureSemicolon(])
+                                reportRecoverableError(], Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+                                rewriter()
+                              listener: handleExpressionStatement([, ;)
+                    peekPastLabels(:)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseExpressionStatementOrDeclaration(;, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                            looksLikeLocalFunction(:)
+                            parseExpressionStatement(;)
+                              parseExpression(;)
+                                looksLikeOuterPatternEquals(;)
+                                  skipOuterPattern(;)
+                                parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                    parsePrimary(;, expression, ConstantPatternContext.none)
+                                      parseSend(;, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(;, expression)
+                                          reportRecoverableErrorWithToken(:, Template(ExpectedIdentifier))
+                                            listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(:)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(:)
+                                        listener: handleSend(, )
+                              ensureSemicolon()
+                                reportRecoverableError(], Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+                                rewriter()
+                              listener: handleExpressionStatement(:, ;)
+                    reportRecoverableError(:, Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}])
+                      listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}], :, :)
+                    peekPastLabels(baz)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseLabeledStatement(:)
+                          parseLabel(:)
+                            ensureIdentifier(:, labelDeclaration)
+                              listener: handleIdentifier(baz, labelDeclaration)
+                            listener: handleLabel(:)
+                          listener: beginLabeledStatement(break, 1)
+                          parseStatement(:)
+                            parseStatementX(:)
+                              parseBreakStatement(:)
+                                isBreakAllowed()
+                                ensureSemicolon(break)
+                                listener: handleBreakStatement(false, break, ;)
+                          listener: endLabeledStatement(1)
+                    peekPastLabels(})
+                    listener: endSwitchCase(0, 1, null, null, 3, case, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endSwitchBlock(1, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.parser.expect
new file mode 100644
index 0000000..c0d43bd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+main() {
+switch(a) {
+
+case x?:[4];*synthetic*;:baz:break;
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] x[StringToken]?[SimpleToken]:[SyntheticToken][[BeginToken]4[StringToken]][SimpleToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]:[SimpleToken]baz[StringToken]:[SimpleToken]break[KeywordToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.scanner.expect
new file mode 100644
index 0000000..d6b9978
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_03_2.dart.scanner.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case x?[4]:baz:break;
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] x[StringToken]?[SimpleToken][[BeginToken]4[StringToken]][SimpleToken]:[SimpleToken]baz[StringToken]:[SimpleToken]break[KeywordToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart
index beb586c..bf7522f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 main() {
   switch(a) {
     // Parse as conditional (with missing colon for the case).
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 c352831..3fc1841 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
@@ -1,6 +1,6 @@
 Problems reported:
 
-parser/nnbd/issue_40267_case_04:4:23: Expected ':' before this.
+parser/nnbd/issue_40267_case_04:5:23: Expected ':' before this.
     case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
                       ^
 
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart
new file mode 100644
index 0000000..beb586c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart
@@ -0,0 +1,6 @@
+main() {
+  switch(a) {
+    // Parse as conditional (with missing colon for the case).
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+  }
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.expect
new file mode 100644
index 0000000..5296b15
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.expect
@@ -0,0 +1,89 @@
+Problems reported:
+
+parser/nnbd/issue_40267_case_04_2:4:12: Expected ':' before this.
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+           ^
+
+parser/nnbd/issue_40267_case_04_2:4:14: Expected ';' after this.
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+             ^
+
+parser/nnbd/issue_40267_case_04_2:4:15: Expected an identifier, but got ':'.
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+              ^
+
+parser/nnbd/issue_40267_case_04_2:4:14: Expected ';' after this.
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+             ^
+
+parser/nnbd/issue_40267_case_04_2:4:15: Unexpected token ':'.
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+              ^
+
+parser/nnbd/issue_40267_case_04_2:4:19: Expected ';' after this.
+    case x?[4]:{{{2}}}; // as case (x?[4]:{{{2}}}) [missing :]
+                  ^
+
+beginCompilationUnit(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({)
+        beginSwitchStatement(switch)
+          handleIdentifier(a, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(a, a)
+          handleParenthesizedCondition((, null, null)
+          beginSwitchBlock({)
+            beginCaseExpression(case)
+              beginPattern(case)
+                beginConstantPattern(null)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(?)
+                  handleNoArguments(?)
+                  handleSend(x, x)
+                endConstantPattern(null)
+                handleNullCheckPattern(?)
+              endPattern(?)
+              handleSwitchCaseNoWhenClause(?)
+              handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], [, [)
+            endCaseExpression(case, null, :)
+            beginSwitchCase(0, 1, case)
+              handleNoTypeArguments([)
+              handleLiteralInt(4)
+              handleLiteralList(1, [, null, ])
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+              handleExpressionStatement([, ;)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+              handleIdentifier(, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(, )
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+              handleExpressionStatement(:, ;)
+              handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}], :, :)
+              beginBlock({, BlockKind(statement))
+                beginBlock({, BlockKind(statement))
+                  beginBlock({, BlockKind(statement))
+                    handleLiteralInt(2)
+                    handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 2, 2)
+                    handleExpressionStatement(2, ;)
+                  endBlock(1, {, }, BlockKind(statement))
+                endBlock(1, {, }, BlockKind(statement))
+              endBlock(1, {, }, BlockKind(statement))
+              handleEmptyStatement(;)
+            endSwitchCase(0, 1, null, null, 4, case, ;)
+          endSwitchBlock(1, {, })
+        endSwitchStatement(switch, })
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.intertwined.expect
new file mode 100644
index 0000000..253baba
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.intertwined.expect
@@ -0,0 +1,243 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, switch)
+          parseStatement({)
+            parseStatementX({)
+              parseSwitchStatement({)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(a, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt(a)
+                                  listener: handleNoArguments())
+                                listener: handleSend(a, a)
+                    ensureCloseParen(a, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                parseSwitchBlock())
+                  ensureBlock(), BlockKind(switch statement))
+                  listener: beginSwitchBlock({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, case)
+                  peekPastLabels(case)
+                  listener: beginCaseExpression(case)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    listener: beginPattern(case)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      listener: beginConstantPattern(null)
+                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
+                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
+                          parsePrimary(case, expression, ConstantPatternContext.implicit)
+                            parseSendOrFunctionLiteral(case, expression, ConstantPatternContext.implicit)
+                              parseSend(case, expression, ConstantPatternContext.implicit)
+                                ensureIdentifier(case, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(?)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(?)
+                                listener: handleSend(x, x)
+                        canParseAsConditional(?)
+                          parseExpressionWithoutCascade(?)
+                            parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(?, false, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseLiteralListSuffix(?, null)
+                                    parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                      parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression([, true, ConstantPatternContext.none)
+                                          parsePrimary([, expression, ConstantPatternContext.none)
+                                            parseLiteralInt([)
+                          parseExpressionWithoutCascade(:)
+                            parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(:, false, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralSetOrMapSuffix(:, null)
+                                    parseExpression({)
+                                      looksLikeOuterPatternEquals({)
+                                        skipOuterPattern({)
+                                      parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression({, true, ConstantPatternContext.none)
+                                          parsePrimary({, expression, ConstantPatternContext.none)
+                                            parseLiteralSetOrMapSuffix({, null)
+                                              parseExpression({)
+                                                looksLikeOuterPatternEquals({)
+                                                  skipOuterPattern({)
+                                                parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                  parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                    parsePrimary({, expression, ConstantPatternContext.none)
+                                                      parseLiteralSetOrMapSuffix({, null)
+                                                        parseExpression({)
+                                                          looksLikeOuterPatternEquals({)
+                                                            skipOuterPattern({)
+                                                          parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                            parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                              parsePrimary({, expression, ConstantPatternContext.none)
+                                                                parseLiteralInt({)
+                      listener: endConstantPattern(null)
+                    listener: handleNullCheckPattern(?)
+                    listener: endPattern(?)
+                  listener: handleSwitchCaseNoWhenClause(?)
+                  ensureColon(?)
+                    rewriteAndRecover(?, Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], :)
+                      reportRecoverableError([, Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}])
+                        listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ':' before this., null, {string: :}], [, [)
+                      rewriter()
+                  listener: endCaseExpression(case, null, :)
+                  peekPastLabels([)
+                  parseStatementsInSwitchCase(:, [, case, 0, 1, null, null)
+                    listener: beginSwitchCase(0, 1, case)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseExpressionStatementOrDeclaration(:, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+                            looksLikeLocalFunction([)
+                            parseExpressionStatement(:)
+                              parseExpression(:)
+                                looksLikeOuterPatternEquals(:)
+                                  skipOuterPattern(:)
+                                parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                    parsePrimary(:, expression, ConstantPatternContext.none)
+                                      listener: handleNoTypeArguments([)
+                                      parseLiteralListSuffix(:, null)
+                                        parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                          parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                            parseUnaryExpression([, true, ConstantPatternContext.none)
+                                              parsePrimary([, expression, ConstantPatternContext.none)
+                                                parseLiteralInt([)
+                                                  listener: handleLiteralInt(4)
+                                        listener: handleLiteralList(1, [, null, ])
+                              ensureSemicolon(])
+                                reportRecoverableError(], Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+                                rewriter()
+                              listener: handleExpressionStatement([, ;)
+                    peekPastLabels(:)
+                    parseStatement(;)
+                      parseStatementX(;)
+                        parseExpressionStatementOrDeclaration(;, null)
+                          parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, null)
+                            looksLikeLocalFunction(:)
+                            parseExpressionStatement(;)
+                              parseExpression(;)
+                                looksLikeOuterPatternEquals(;)
+                                  skipOuterPattern(;)
+                                parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression(;, true, ConstantPatternContext.none)
+                                    parsePrimary(;, expression, ConstantPatternContext.none)
+                                      parseSend(;, expression, ConstantPatternContext.none)
+                                        ensureIdentifier(;, expression)
+                                          reportRecoverableErrorWithToken(:, Template(ExpectedIdentifier))
+                                            listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got ':'., Try inserting an identifier before ':'., {lexeme: :}], :, :)
+                                          rewriter()
+                                          listener: handleIdentifier(, expression)
+                                        listener: handleNoTypeArguments(:)
+                                        parseArgumentsOpt()
+                                          listener: handleNoArguments(:)
+                                        listener: handleSend(, )
+                              ensureSemicolon()
+                                reportRecoverableError(], Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                  listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], ], ])
+                                rewriter()
+                              listener: handleExpressionStatement(:, ;)
+                    reportRecoverableError(:, Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}])
+                      listener: handleRecoverableError(Message[Template(UnexpectedToken), Unexpected token ':'., null, {lexeme: :}], :, :)
+                    peekPastLabels({)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseBlock(:, BlockKind(statement))
+                          ensureBlock(:, BlockKind(statement))
+                          listener: beginBlock({, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, {)
+                          parseStatement({)
+                            parseStatementX({)
+                              parseBlock({, BlockKind(statement))
+                                ensureBlock({, BlockKind(statement))
+                                listener: beginBlock({, BlockKind(statement))
+                                notEofOrType(CLOSE_CURLY_BRACKET, {)
+                                parseStatement({)
+                                  parseStatementX({)
+                                    parseBlock({, BlockKind(statement))
+                                      ensureBlock({, BlockKind(statement))
+                                      listener: beginBlock({, BlockKind(statement))
+                                      notEofOrType(CLOSE_CURLY_BRACKET, 2)
+                                      parseStatement({)
+                                        parseStatementX({)
+                                          parseExpressionStatementOrDeclaration({, null)
+                                            parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                                              looksLikeLocalFunction(2)
+                                              parseExpressionStatement({)
+                                                parseExpression({)
+                                                  looksLikeOuterPatternEquals({)
+                                                    skipOuterPattern({)
+                                                  parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                      parsePrimary({, expression, ConstantPatternContext.none)
+                                                        parseLiteralInt({)
+                                                          listener: handleLiteralInt(2)
+                                                ensureSemicolon(2)
+                                                  reportRecoverableError(2, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                                                    listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], 2, 2)
+                                                  rewriter()
+                                                listener: handleExpressionStatement(2, ;)
+                                      notEofOrType(CLOSE_CURLY_BRACKET, })
+                                      listener: endBlock(1, {, }, BlockKind(statement))
+                                notEofOrType(CLOSE_CURLY_BRACKET, })
+                                listener: endBlock(1, {, }, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, })
+                          listener: endBlock(1, {, }, BlockKind(statement))
+                    peekPastLabels(;)
+                    parseStatement(})
+                      parseStatementX(})
+                        parseEmptyStatement(})
+                          listener: handleEmptyStatement(;)
+                    peekPastLabels(})
+                    listener: endSwitchCase(0, 1, null, null, 4, case, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endSwitchBlock(1, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.parser.expect
new file mode 100644
index 0000000..6fb8fd6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.parser.expect
@@ -0,0 +1,17 @@
+NOTICE: Stream was rewritten by parser!
+
+main() {
+switch(a) {
+
+case x?:[4];*synthetic*;:{{{2;}}};
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] x[StringToken]?[SimpleToken]:[SyntheticToken][[BeginToken]4[StringToken]][SimpleToken];[SyntheticToken][SyntheticStringToken];[SyntheticToken]:[SimpleToken]{[BeginToken]{[BeginToken]{[BeginToken]2[StringToken];[SyntheticToken]}[SimpleToken]}[SimpleToken]}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.scanner.expect
new file mode 100644
index 0000000..621a525
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_04_2.dart.scanner.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case x?[4]:{{{2}}};
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] x[StringToken]?[SimpleToken][[BeginToken]4[StringToken]][SimpleToken]:[SimpleToken]{[BeginToken]{[BeginToken]{[BeginToken]2[StringToken]}[SimpleToken]}[SimpleToken]}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart
index 783900d..cda890f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05.dart
@@ -1,3 +1,4 @@
+// @dart=2.19
 main() {
   switch(a) {
     // Parse as null aware index.
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart
new file mode 100644
index 0000000..783900d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart
@@ -0,0 +1,6 @@
+main() {
+  switch(a) {
+    // Parse as null aware index.
+    case x?[4]:{{{2;}}}; // as case (x?[4]):{{{2;}}}
+  }
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.expect
new file mode 100644
index 0000000..42fe921
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.expect
@@ -0,0 +1,49 @@
+beginCompilationUnit(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({)
+        beginSwitchStatement(switch)
+          handleIdentifier(a, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(a, a)
+          handleParenthesizedCondition((, null, null)
+          beginSwitchBlock({)
+            beginCaseExpression(case)
+              beginPattern(case)
+                beginConstantPattern(null)
+                  handleIdentifier(x, expression)
+                  handleNoTypeArguments(?)
+                  handleNoArguments(?)
+                  handleSend(x, x)
+                  handleLiteralInt(4)
+                  handleIndexedExpression(?, [, ])
+                endConstantPattern(null)
+              endPattern(])
+              handleSwitchCaseNoWhenClause(])
+            endCaseExpression(case, null, :)
+            beginSwitchCase(0, 1, case)
+              beginBlock({, BlockKind(statement))
+                beginBlock({, BlockKind(statement))
+                  beginBlock({, BlockKind(statement))
+                    handleLiteralInt(2)
+                    handleExpressionStatement(2, ;)
+                  endBlock(1, {, }, BlockKind(statement))
+                endBlock(1, {, }, BlockKind(statement))
+              endBlock(1, {, }, BlockKind(statement))
+              handleEmptyStatement(;)
+            endSwitchCase(0, 1, null, null, 2, case, ;)
+          endSwitchBlock(1, {, })
+        endSwitchStatement(switch, })
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.intertwined.expect
new file mode 100644
index 0000000..f98aef6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.intertwined.expect
@@ -0,0 +1,187 @@
+parseUnit(main)
+  skipErrorTokens(main)
+  listener: beginCompilationUnit(main)
+  syntheticPreviousToken(main)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , 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({)
+          notEofOrType(CLOSE_CURLY_BRACKET, switch)
+          parseStatement({)
+            parseStatementX({)
+              parseSwitchStatement({)
+                listener: beginSwitchStatement(switch)
+                ensureParenthesizedCondition(switch, allowCase: false)
+                  parseExpressionInParenthesisRest((, allowCase: false)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                              parseSend((, expression, ConstantPatternContext.none)
+                                ensureIdentifier((, expression)
+                                  listener: handleIdentifier(a, expression)
+                                listener: handleNoTypeArguments())
+                                parseArgumentsOpt(a)
+                                  listener: handleNoArguments())
+                                listener: handleSend(a, a)
+                    ensureCloseParen(a, ()
+                    listener: handleParenthesizedCondition((, null, null)
+                parseSwitchBlock())
+                  ensureBlock(), BlockKind(switch statement))
+                  listener: beginSwitchBlock({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, case)
+                  peekPastLabels(case)
+                  listener: beginCaseExpression(case)
+                  parsePattern(case, PatternContext.matching, precedence: 1)
+                    listener: beginPattern(case)
+                    parsePrimaryPattern(case, PatternContext.matching)
+                      listener: beginConstantPattern(null)
+                      parsePrecedenceExpression(case, 7, false, ConstantPatternContext.implicit)
+                        parseUnaryExpression(case, false, ConstantPatternContext.implicit)
+                          parsePrimary(case, expression, ConstantPatternContext.implicit)
+                            parseSendOrFunctionLiteral(case, expression, ConstantPatternContext.implicit)
+                              parseSend(case, expression, ConstantPatternContext.implicit)
+                                ensureIdentifier(case, expression)
+                                  listener: handleIdentifier(x, expression)
+                                listener: handleNoTypeArguments(?)
+                                parseArgumentsOpt(x)
+                                  listener: handleNoArguments(?)
+                                listener: handleSend(x, x)
+                        canParseAsConditional(?)
+                          parseExpressionWithoutCascade(?)
+                            parsePrecedenceExpression(?, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(?, false, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseLiteralListSuffix(?, null)
+                                    parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                      parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression([, true, ConstantPatternContext.none)
+                                          parsePrimary([, expression, ConstantPatternContext.none)
+                                            parseLiteralInt([)
+                          parseExpressionWithoutCascade(:)
+                            parsePrecedenceExpression(:, 1, false, ConstantPatternContext.none)
+                              parseUnaryExpression(:, false, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralSetOrMapSuffix(:, null)
+                                    parseExpression({)
+                                      looksLikeOuterPatternEquals({)
+                                        skipOuterPattern({)
+                                      parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                        parseUnaryExpression({, true, ConstantPatternContext.none)
+                                          parsePrimary({, expression, ConstantPatternContext.none)
+                                            parseLiteralSetOrMapSuffix({, null)
+                                              parseExpression({)
+                                                looksLikeOuterPatternEquals({)
+                                                  skipOuterPattern({)
+                                                parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                  parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                    parsePrimary({, expression, ConstantPatternContext.none)
+                                                      parseLiteralSetOrMapSuffix({, null)
+                                                        parseExpression({)
+                                                          looksLikeOuterPatternEquals({)
+                                                            skipOuterPattern({)
+                                                          parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                            parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                              parsePrimary({, expression, ConstantPatternContext.none)
+                                                                parseLiteralInt({)
+                                                        reportRecoverableError(;, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+                        parseArgumentOrIndexStar(x, NoTypeParamOrArg(), true)
+                          parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                            parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression([, true, ConstantPatternContext.none)
+                                parsePrimary([, expression, ConstantPatternContext.none)
+                                  parseLiteralInt([)
+                                    listener: handleLiteralInt(4)
+                          listener: handleIndexedExpression(?, [, ])
+                      listener: endConstantPattern(null)
+                    listener: endPattern(])
+                  listener: handleSwitchCaseNoWhenClause(])
+                  ensureColon(])
+                  listener: endCaseExpression(case, null, :)
+                  peekPastLabels({)
+                  parseStatementsInSwitchCase(:, {, case, 0, 1, null, null)
+                    listener: beginSwitchCase(0, 1, case)
+                    parseStatement(:)
+                      parseStatementX(:)
+                        parseBlock(:, BlockKind(statement))
+                          ensureBlock(:, BlockKind(statement))
+                          listener: beginBlock({, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, {)
+                          parseStatement({)
+                            parseStatementX({)
+                              parseBlock({, BlockKind(statement))
+                                ensureBlock({, BlockKind(statement))
+                                listener: beginBlock({, BlockKind(statement))
+                                notEofOrType(CLOSE_CURLY_BRACKET, {)
+                                parseStatement({)
+                                  parseStatementX({)
+                                    parseBlock({, BlockKind(statement))
+                                      ensureBlock({, BlockKind(statement))
+                                      listener: beginBlock({, BlockKind(statement))
+                                      notEofOrType(CLOSE_CURLY_BRACKET, 2)
+                                      parseStatement({)
+                                        parseStatementX({)
+                                          parseExpressionStatementOrDeclaration({, null)
+                                            parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, null)
+                                              looksLikeLocalFunction(2)
+                                              parseExpressionStatement({)
+                                                parseExpression({)
+                                                  looksLikeOuterPatternEquals({)
+                                                    skipOuterPattern({)
+                                                  parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression({, true, ConstantPatternContext.none)
+                                                      parsePrimary({, expression, ConstantPatternContext.none)
+                                                        parseLiteralInt({)
+                                                          listener: handleLiteralInt(2)
+                                                ensureSemicolon(2)
+                                                listener: handleExpressionStatement(2, ;)
+                                      notEofOrType(CLOSE_CURLY_BRACKET, })
+                                      listener: endBlock(1, {, }, BlockKind(statement))
+                                notEofOrType(CLOSE_CURLY_BRACKET, })
+                                listener: endBlock(1, {, }, BlockKind(statement))
+                          notEofOrType(CLOSE_CURLY_BRACKET, })
+                          listener: endBlock(1, {, }, BlockKind(statement))
+                    peekPastLabels(;)
+                    parseStatement(})
+                      parseStatementX(})
+                        parseEmptyStatement(})
+                          listener: handleEmptyStatement(;)
+                    peekPastLabels(})
+                    listener: endSwitchCase(0, 1, null, null, 2, case, ;)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endSwitchBlock(1, {, })
+                listener: endSwitchStatement(switch, })
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(main)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.parser.expect
new file mode 100644
index 0000000..8335b2f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.parser.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case x?[4]:{{{2;}}};
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] x[StringToken]?[SimpleToken][[BeginToken]4[StringToken]][SimpleToken]:[SimpleToken]{[BeginToken]{[BeginToken]{[BeginToken]2[StringToken];[SimpleToken]}[SimpleToken]}[SimpleToken]}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.scanner.expect
new file mode 100644
index 0000000..8335b2f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_40267_case_05_2.dart.scanner.expect
@@ -0,0 +1,15 @@
+main() {
+switch(a) {
+
+case x?[4]:{{{2;}}};
+}
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+
+case[KeywordToken] x[StringToken]?[SimpleToken][[BeginToken]4[StringToken]][SimpleToken]:[SimpleToken]{[BeginToken]{[BeginToken]{[BeginToken]2[StringToken];[SimpleToken]}[SimpleToken]}[SimpleToken]}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
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 22a1644..8fcd322 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -66,6 +68,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -84,6 +89,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -108,6 +116,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -144,6 +155,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -162,6 +176,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -186,6 +203,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -222,6 +242,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -240,6 +263,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -271,6 +297,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -320,6 +349,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -338,6 +370,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -369,6 +404,9 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -418,6 +456,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -443,6 +484,9 @@
                                   listener: endTypeArguments(1, <, >)
                                   parseLiteralListSuffix(>, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -469,6 +513,9 @@
                                   listener: endTypeArguments(1, <, >)
                                   parseLiteralListSuffix(>, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
+                                          skipObjectPatternRest(c)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -491,6 +538,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -512,12 +562,17 @@
                                   parseParenthesizedExpressionOrRecordLiteral(?, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             listener: handleNoTypeArguments([)
                                             parseLiteralListSuffix((, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
+                                                    skipObjectPatternRest(b)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -542,12 +597,17 @@
                                   parseParenthesizedExpressionOrRecordLiteral(:, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             listener: handleNoTypeArguments([)
                                             parseLiteralListSuffix((, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
+                                                    skipObjectPatternRest(c)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
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 6157a1d..733ea8f 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -58,6 +60,9 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(a)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -76,6 +81,9 @@
                             parsePrimary(?, expression, ConstantPatternContext.none)
                               parseLiteralListSuffix(?, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(b)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -88,6 +96,8 @@
                                                 parseArgumentsRest(()
                                                   allowedToShortcutParseExpression()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -109,6 +119,9 @@
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(?, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(b)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -124,6 +137,8 @@
                                                   listener: beginArguments(()
                                                   allowedToShortcutParseExpression()
                                                   parseExpression(()
+                                                    looksLikeOuterPatternEquals(()
+                                                      skipOuterPattern(()
                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                         parsePrimary((, expression, ConstantPatternContext.none)
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 fd52db5..7363e4d 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -59,6 +61,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -74,6 +79,9 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -96,6 +104,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -114,6 +125,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -123,6 +137,9 @@
                                               parseArgumentsOpt(b)
                       parseArgumentOrIndexStar(a, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(b)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -144,6 +161,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -162,6 +182,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -171,6 +194,9 @@
                                               parseArgumentsOpt(b)
                       parseArgumentOrIndexStar(a, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(b)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 363ba99..60c076a 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -66,6 +68,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -81,6 +86,9 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -115,6 +123,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -133,6 +144,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -149,6 +163,9 @@
                                       parseArgumentsOpt(c)
                       parseArgumentOrIndexStar(a, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(b)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -182,6 +199,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -200,6 +220,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(b)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -216,6 +239,9 @@
                                       parseArgumentsOpt(c)
                       parseArgumentOrIndexStar(a, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(b)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 a372acf..7d4aec3 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
@@ -45,6 +45,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -63,6 +66,8 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -73,6 +78,8 @@
                                   parseLiteralInt(+)
                       parseArgumentOrIndexStar(a, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 65dbe86..a963d45 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
@@ -57,6 +57,9 @@
                 looksLikeLocalFunction(x)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -75,6 +78,9 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
+                                        skipObjectPatternRest(i)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -84,6 +90,9 @@
                                               parseArgumentsOpt(i)
                       parseArgumentOrIndexStar(x, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(i)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 eff2524..3163dd3 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -59,6 +61,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -97,6 +102,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -118,6 +126,9 @@
                                   parseParenthesizedExpressionOrRecordLiteral(?, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(b)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
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 4751e71..d0b908e 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
@@ -30,6 +30,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(a)
                 looksLikeLocalFunction(a)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -59,6 +61,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -101,6 +106,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
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 a7820cf..2449e55 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
@@ -58,6 +58,8 @@
                   looksLikeLocalFunction(++)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrecedenceExpression(++, 16, true, ConstantPatternContext.none)
@@ -78,6 +80,9 @@
                                     parsePrimary(?, expression, ConstantPatternContext.none)
                                       parseLiteralListSuffix(?, null)
                                         parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
+                                              skipObjectPatternRest(i)
                                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression([, true, ConstantPatternContext.none)
                                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -87,6 +92,9 @@
                                                     parseArgumentsOpt(i)
                             parseArgumentOrIndexStar(x, NoTypeParamOrArg(), true)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
+                                    skipObjectPatternRest(i)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
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 89e4e1a..deaec99 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
@@ -42,9 +42,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(value)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -89,6 +92,9 @@
                             looksLikeLocalFunction(print)
                             parseExpressionStatement({)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
+                                    skipObjectPatternRest(print)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
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 5d1d3f7..ada49d1 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
@@ -42,9 +42,11 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -52,6 +54,9 @@
                               parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(value)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -98,6 +103,9 @@
                             looksLikeLocalFunction(print)
                             parseExpressionStatement({)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
+                                    skipObjectPatternRest(print)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
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 8433994..0bca22f 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
@@ -42,9 +42,11 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -52,6 +54,9 @@
                               parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(value)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -97,6 +102,9 @@
                             looksLikeLocalFunction(print)
                             parseExpressionStatement({)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
+                                    skipObjectPatternRest(print)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
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 31584b4..45272cc 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
@@ -42,9 +42,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(value)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -88,6 +91,9 @@
                             looksLikeLocalFunction(print)
                             parseExpressionStatement({)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
+                                    skipObjectPatternRest(print)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
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 f44e273..65f2181 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 a7ac582..967202a 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
@@ -44,6 +44,9 @@
                 looksLikeLocalFunction(e)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(x)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
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 0a57801..953ea66 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
@@ -21,7 +21,7 @@
             handleType(int, null)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, covariant, late, final, 1, covariant, ;)
+          endFields(DeclarationKind.Class, 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 df7bda5..f928dcf 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
@@ -44,7 +44,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, late, null, null, null, final, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, covariant, late, final, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, covariant, late, final, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 8dfda80..4951411 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
@@ -30,7 +30,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, late, final, 1, covariant, ;)
+          endFields(DeclarationKind.Class, 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 3472c4d..08090a8 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
@@ -47,13 +47,15 @@
                 parseFieldInitializerOpt(x, x, late, null, null, null, final, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, late, final, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, final, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 d35abc4..f13ef7b 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
@@ -30,7 +30,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, final, 1, covariant, ;)
+          endFields(DeclarationKind.Class, 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 ab71cfc..6681c81 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
@@ -47,13 +47,15 @@
                 parseFieldInitializerOpt(x, x, null, null, null, null, final, DeclarationKind.Class, C)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, final, 1, covariant, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, covariant, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 a1ec280..67cf39c 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
@@ -21,7 +21,7 @@
             handleType(String, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, String, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, String, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -32,12 +32,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -81,12 +81,12 @@
             endInitializers(2, :, 0)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(a, methodDeclarationContinuation)
@@ -145,12 +145,12 @@
             endInitializers(2, :, null)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(b, methodDeclarationContinuation)
@@ -209,12 +209,12 @@
             endInitializers(2, :, null)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(c, methodDeclarationContinuation)
@@ -273,12 +273,12 @@
             endInitializers(2, :, null)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(d, methodDeclarationContinuation)
@@ -337,7 +337,7 @@
             endInitializers(2, :, null)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
     endClassDeclaration(class, })
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 d9148cc..ffb11ec 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
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, String, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, String, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -59,7 +59,7 @@
                   listener: handleIdentifier(y, fieldDeclaration)
                 parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -68,8 +68,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -100,6 +100,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -137,6 +140,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -162,7 +168,7 @@
                 inPlainSync()
                 parseFunctionBody(0, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -171,8 +177,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -207,6 +213,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -277,6 +286,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -302,7 +314,7 @@
                 inPlainSync()
                 parseFunctionBody(null, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -311,8 +323,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -347,6 +359,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -417,6 +432,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -442,7 +460,7 @@
                 inPlainSync()
                 parseFunctionBody(null, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -451,8 +469,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -487,6 +505,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -557,6 +578,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -582,7 +606,7 @@
                 inPlainSync()
                 parseFunctionBody(null, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -591,8 +615,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -627,6 +651,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -697,6 +724,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -722,7 +752,7 @@
                 inPlainSync()
                 parseFunctionBody(null, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 7, {, })
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 2e229d5..9aefa29 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
@@ -21,7 +21,7 @@
             handleType(String, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, String, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, String, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -32,12 +32,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -81,7 +81,7 @@
             endInitializers(2, :, 0)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
     endClassDeclaration(class, })
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 e54abee..d2191fb 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
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, String, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, String, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -59,7 +59,7 @@
                   listener: handleIdentifier(y, fieldDeclaration)
                 parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -68,8 +68,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -100,6 +100,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -137,6 +140,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -162,7 +168,7 @@
                 inPlainSync()
                 parseFunctionBody(0, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
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 cddaa5b..7af401d 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
@@ -21,7 +21,7 @@
             handleType(String, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, String, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, String, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -32,12 +32,12 @@
             handleType(int, null)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -92,7 +92,7 @@
             endInitializers(2, :, 0)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -149,7 +149,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -206,7 +206,7 @@
                 endThenStatement({, })
               endIfStatement(if, null, })
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
     endClassDeclaration(class, })
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 a91ce71..ae5d3aa 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
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, String, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, String, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -59,7 +59,7 @@
                   listener: handleIdentifier(y, fieldDeclaration)
                 parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -68,8 +68,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -100,6 +100,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -167,6 +170,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -192,7 +198,7 @@
                 inPlainSync()
                 parseFunctionBody(0, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -200,7 +206,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, foo, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, foo, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -238,9 +244,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -300,6 +309,9 @@
                                     looksLikeLocalFunction(print)
                                     parseExpressionStatement({)
                                       parseExpression({)
+                                        looksLikeOuterPatternEquals({)
+                                          skipOuterPattern({)
+                                            skipObjectPatternRest(print)
                                         parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression({, true, ConstantPatternContext.none)
                                             parsePrimary({, expression, ConstantPatternContext.none)
@@ -326,7 +338,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -334,7 +346,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, bar, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, VoidType(), null, null, bar, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, bar, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
@@ -372,9 +384,12 @@
                     parseStatementX({)
                       parseIfStatement({)
                         listener: beginIfStatement(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(x)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -434,6 +449,9 @@
                                     looksLikeLocalFunction(print)
                                     parseExpressionStatement({)
                                       parseExpression({)
+                                        looksLikeOuterPatternEquals({)
+                                          skipOuterPattern({)
+                                            skipObjectPatternRest(print)
                                         parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression({, true, ConstantPatternContext.none)
                                             parsePrimary({, expression, ConstantPatternContext.none)
@@ -460,7 +478,7 @@
                         listener: endIfStatement(if, null, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
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 140a02b..1f126ea 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
@@ -61,6 +61,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -75,6 +78,8 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -90,6 +95,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -108,12 +116,16 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
                                           parseLiteralInt([)
                       parseArgumentOrIndexStar(a, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -129,6 +141,9 @@
                 looksLikeLocalFunction(a)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(a)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -148,12 +163,16 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
                                           parseLiteralInt([)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -170,6 +189,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -177,6 +198,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(a)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -198,12 +222,16 @@
                                 parsePrimary(?, expression, ConstantPatternContext.none)
                                   parseLiteralListSuffix(?, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
                                             parseLiteralInt([)
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), true)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -219,6 +247,9 @@
                 looksLikeLocalFunction(b)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(b)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -238,6 +269,8 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -256,6 +289,8 @@
                                 listener: handleNoTypeArguments([)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -281,6 +316,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -288,6 +325,9 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(b)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -309,6 +349,8 @@
                                 parsePrimary(?, expression, ConstantPatternContext.none)
                                   parseLiteralListSuffix(?, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
@@ -327,6 +369,8 @@
                                   listener: handleNoTypeArguments([)
                                   parseLiteralListSuffix(?, null)
                                     parseExpression([)
+                                      looksLikeOuterPatternEquals([)
+                                        skipOuterPattern([)
                                       parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression([, true, ConstantPatternContext.none)
                                           parsePrimary([, expression, ConstantPatternContext.none)
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 a5cfff8..43eacaa 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_41597.dart.expect
@@ -83,7 +83,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(c0, methodDeclarationContinuation)
@@ -102,12 +102,12 @@
             endInitializers(1, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleIdentifier(c1, methodDeclarationContinuation)
@@ -127,7 +127,7 @@
             endInitializers(1, :, !)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, :, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, :, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
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 88df9e0..5c232ba 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
@@ -67,6 +67,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -96,6 +99,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -111,6 +117,9 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(x)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -134,6 +143,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -149,6 +161,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrecedenceExpression(!, 16, true, ConstantPatternContext.none)
@@ -203,8 +217,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -228,6 +242,8 @@
                       parseSuperInitializerExpression(:)
                         parseInitializerExpressionRest(:)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -247,7 +263,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -256,8 +272,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -281,6 +297,8 @@
                       parseSuperInitializerExpression(:)
                         parseInitializerExpressionRest(:)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -301,7 +319,7 @@
                 inPlainSync()
                 parseFunctionBody(!, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
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 d37e52b..21c2120 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_42621.dart.expect
@@ -326,7 +326,7 @@
             handleType(List, ?)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
         endMember()
         beginMetadataStar(int)
         endMetadataStar(0)
@@ -337,7 +337,7 @@
             handleType(int, ?)
             handleIdentifier(y, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 85fd605..de9fb79 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
@@ -53,6 +53,9 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(Order)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -93,6 +96,8 @@
                                   listener: handleSend(json, json)
                           parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -137,6 +142,8 @@
                                   listener: handleSend(json, json)
                           parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -214,6 +221,9 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(Order)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -254,6 +264,8 @@
                                   listener: handleSend(json, json)
                           parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -298,6 +310,8 @@
                                   listener: handleSend(json, json)
                           parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -375,6 +389,9 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(Order)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -409,6 +426,9 @@
                                 parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
+                                        skipObjectPatternRest(json)
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -422,6 +442,8 @@
                                               listener: handleSend(json, json)
                                       parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                                         parseExpression([)
+                                          looksLikeOuterPatternEquals([)
+                                            skipOuterPattern([)
                                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression([, true, ConstantPatternContext.none)
                                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -468,6 +490,8 @@
                                   listener: handleSend(json, json)
                           parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -545,6 +569,9 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
+                      skipObjectPatternRest(Order)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -585,6 +612,8 @@
                                   listener: handleSend(json, json)
                           parseArgumentOrIndexStar(json, NoTypeParamOrArg(), false)
                             parseExpression([)
+                              looksLikeOuterPatternEquals([)
+                                skipOuterPattern([)
                               parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression([, true, ConstantPatternContext.none)
                                   parsePrimary([, expression, ConstantPatternContext.none)
@@ -651,7 +680,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Order)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, List, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, List, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, int)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Order)
@@ -668,7 +697,7 @@
                   listener: handleIdentifier(y, fieldDeclaration)
                 parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Order)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect
index 45fd3ea..38c672a 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_47020.dart.intertwined.expect
@@ -50,6 +50,9 @@
                                         looksLikeLocalFunction(print)
                                         parseExpressionStatement({)
                                           parseExpression({)
+                                            looksLikeOuterPatternEquals({)
+                                              skipOuterPattern({)
+                                                skipObjectPatternRest(print)
                                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -62,6 +65,8 @@
                                                           parseArgumentsRest(()
                                                             allowedToShortcutParseExpression()
                                                             parseExpression(()
+                                                              looksLikeOuterPatternEquals(()
+                                                                skipOuterPattern(()
                                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -84,6 +89,8 @@
                       parseVariableInitializerOpt(f)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -108,6 +115,9 @@
                                               looksLikeLocalFunction(print)
                                               parseExpressionStatement({)
                                                 parseExpression({)
+                                                  looksLikeOuterPatternEquals({)
+                                                    skipOuterPattern({)
+                                                      skipObjectPatternRest(print)
                                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -123,6 +133,8 @@
                                                                   listener: beginArguments(()
                                                                   allowedToShortcutParseExpression()
                                                                   parseExpression(()
+                                                                    looksLikeOuterPatternEquals(()
+                                                                      skipOuterPattern(()
                                                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -149,6 +161,9 @@
                 looksLikeLocalFunction(f)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect
index 4c28c71..143d343 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect
@@ -45,6 +45,8 @@
                       parseVariableInitializerOpt(i)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -61,6 +63,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -76,6 +81,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -83,6 +90,9 @@
                                               parseSingleLiteralString(()
                                                 listener: beginLiteralString(')
                                                 parseExpression(${)
+                                                  looksLikeOuterPatternEquals(${)
+                                                    skipOuterPattern(${)
+                                                      skipObjectPatternRest(i)
                                                   parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                       parsePrimary(${, expression, ConstantPatternContext.none)
@@ -118,6 +128,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -133,6 +146,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -140,6 +155,9 @@
                                               parseSingleLiteralString(()
                                                 listener: beginLiteralString(')
                                                 parseExpression(${)
+                                                  looksLikeOuterPatternEquals(${)
+                                                    skipOuterPattern(${)
+                                                      skipObjectPatternRest(i)
                                                   parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                       parsePrimary(${, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect
index 59faa56..30c59f4 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect
@@ -45,6 +45,8 @@
                       parseVariableInitializerOpt(i)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -61,6 +63,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -76,6 +81,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -83,6 +90,8 @@
                                               parseSingleLiteralString(()
                                                 listener: beginLiteralString(')
                                                 parseExpression(${)
+                                                  looksLikeOuterPatternEquals(${)
+                                                    skipOuterPattern(${)
                                                   parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                       parsePrimary(${, expression, ConstantPatternContext.none)
@@ -90,6 +99,9 @@
                                                           parseParenthesizedExpressionOrRecordLiteral(${, null, ConstantPatternContext.none)
                                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                             parseExpression(()
+                                                              looksLikeOuterPatternEquals(()
+                                                                skipOuterPattern(()
+                                                                  skipObjectPatternRest(i)
                                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -127,6 +139,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -142,6 +157,8 @@
                                     listener: beginArguments(()
                                     allowedToShortcutParseExpression()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -149,6 +166,8 @@
                                               parseSingleLiteralString(()
                                                 listener: beginLiteralString(')
                                                 parseExpression(${)
+                                                  looksLikeOuterPatternEquals(${)
+                                                    skipOuterPattern(${)
                                                   parsePrecedenceExpression(${, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression(${, true, ConstantPatternContext.none)
                                                       parsePrimary(${, expression, ConstantPatternContext.none)
@@ -156,6 +175,9 @@
                                                           parseParenthesizedExpressionOrRecordLiteral(${, null, ConstantPatternContext.none)
                                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                             parseExpression(()
+                                                              looksLikeOuterPatternEquals(()
+                                                                skipOuterPattern(()
+                                                                  skipObjectPatternRest(i)
                                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                   parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.expect
index f7002e5..20012aa 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.expect
@@ -15,7 +15,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo1, methodDeclarationContinuation)
@@ -79,12 +79,12 @@
             endInitializers(2, :, ?)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo2, methodDeclarationContinuation)
@@ -148,12 +148,12 @@
             endInitializers(2, :, ?)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo3, methodDeclarationContinuation)
@@ -217,12 +217,12 @@
             endInitializers(2, :, int)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo4, methodDeclarationContinuation)
@@ -286,12 +286,12 @@
             endInitializers(2, :, int)
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar1, methodDeclarationContinuation)
@@ -356,12 +356,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar2, methodDeclarationContinuation)
@@ -426,12 +426,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar3, methodDeclarationContinuation)
@@ -496,12 +496,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar4, methodDeclarationContinuation)
@@ -566,7 +566,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.intertwined.expect
index 3114112..566b32d0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132.dart.intertwined.expect
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -82,6 +82,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -119,6 +122,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -159,7 +165,7 @@
                 inPlainSync()
                 parseFunctionBody(?, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -168,8 +174,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -216,6 +222,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -253,6 +262,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -293,7 +305,7 @@
                 inPlainSync()
                 parseFunctionBody(?, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -302,8 +314,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -350,6 +362,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -387,6 +402,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -427,7 +445,7 @@
                 inPlainSync()
                 parseFunctionBody(int, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -436,8 +454,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -484,6 +502,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -521,6 +542,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -561,7 +585,7 @@
                 inPlainSync()
                 parseFunctionBody(int, false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -570,8 +594,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -618,6 +642,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -655,6 +682,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -703,7 +733,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -712,8 +742,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -760,6 +790,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -797,6 +830,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -845,7 +881,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -854,8 +890,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -902,6 +938,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -939,6 +978,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -981,7 +1023,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -990,8 +1032,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -1038,6 +1080,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1075,6 +1120,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1117,7 +1165,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect
index 8f7be63..b87d002 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect
@@ -21,12 +21,12 @@
             handleType(dynamic, null)
             handleIdentifier(x, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, dynamic, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, dynamic, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo1, methodDeclarationContinuation)
@@ -72,12 +72,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo2, methodDeclarationContinuation)
@@ -132,12 +132,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo3, methodDeclarationContinuation)
@@ -183,12 +183,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo4, methodDeclarationContinuation)
@@ -243,7 +243,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect
index 560cff0..75eec76 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(x, fieldDeclaration)
                 parseFieldInitializerOpt(x, x, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, dynamic, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, dynamic, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -51,8 +51,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -87,6 +87,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -165,7 +168,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -174,8 +177,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -210,6 +213,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -242,12 +248,16 @@
                                           parsePrimary(?, expression, ConstantPatternContext.none)
                                             parseLiteralSetOrMapSuffix(?, null)
                                               parseExpression({)
+                                                looksLikeOuterPatternEquals({)
+                                                  skipOuterPattern({)
                                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                                     parsePrimary({, expression, ConstantPatternContext.none)
                                                       parseLiteralString({)
                                                         parseSingleLiteralString({)
                                               parseExpression(:)
+                                                looksLikeOuterPatternEquals(:)
+                                                  skipOuterPattern(:)
                                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -259,12 +269,16 @@
                                           parsePrimary(:, expression, ConstantPatternContext.none)
                                             parseLiteralListSuffix(:, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
                                                       parseLiteralString([)
                                                         parseSingleLiteralString([)
                                               parseExpression(,)
+                                                looksLikeOuterPatternEquals(,)
+                                                  skipOuterPattern(,)
                                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -285,6 +299,8 @@
                                         listener: handleNoTypeArguments({)
                                         parseLiteralSetOrMapSuffix(?, null)
                                           parseExpression({)
+                                            looksLikeOuterPatternEquals({)
+                                              skipOuterPattern({)
                                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -293,6 +309,8 @@
                                                       listener: beginLiteralString("a")
                                                       listener: endLiteralString(0, :)
                                           parseExpression(:)
+                                            looksLikeOuterPatternEquals(:)
+                                              skipOuterPattern(:)
                                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -311,6 +329,8 @@
                                         listener: handleNoTypeArguments([)
                                         parseLiteralListSuffix(:, null)
                                           parseExpression([)
+                                            looksLikeOuterPatternEquals([)
+                                              skipOuterPattern([)
                                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -319,6 +339,8 @@
                                                       listener: beginLiteralString("a")
                                                       listener: endLiteralString(0, ,)
                                           parseExpression(,)
+                                            looksLikeOuterPatternEquals(,)
+                                              skipOuterPattern(,)
                                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -339,7 +361,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -348,8 +370,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -384,6 +406,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -462,7 +487,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -471,8 +496,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -507,6 +532,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -539,12 +567,16 @@
                                           parsePrimary(?, expression, ConstantPatternContext.none)
                                             parseLiteralSetOrMapSuffix(?, null)
                                               parseExpression({)
+                                                looksLikeOuterPatternEquals({)
+                                                  skipOuterPattern({)
                                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                                     parsePrimary({, expression, ConstantPatternContext.none)
                                                       parseLiteralString({)
                                                         parseSingleLiteralString({)
                                               parseExpression(:)
+                                                looksLikeOuterPatternEquals(:)
+                                                  skipOuterPattern(:)
                                                 parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                     parsePrimary(:, expression, ConstantPatternContext.none)
@@ -556,12 +588,16 @@
                                           parsePrimary(:, expression, ConstantPatternContext.none)
                                             parseLiteralListSuffix(:, null)
                                               parseExpression([)
+                                                looksLikeOuterPatternEquals([)
+                                                  skipOuterPattern([)
                                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                                     parsePrimary([, expression, ConstantPatternContext.none)
                                                       parseLiteralString([)
                                                         parseSingleLiteralString([)
                                               parseExpression(,)
+                                                looksLikeOuterPatternEquals(,)
+                                                  skipOuterPattern(,)
                                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -582,6 +618,8 @@
                                         listener: handleNoTypeArguments({)
                                         parseLiteralSetOrMapSuffix(?, null)
                                           parseExpression({)
+                                            looksLikeOuterPatternEquals({)
+                                              skipOuterPattern({)
                                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -590,6 +628,8 @@
                                                       listener: beginLiteralString("a")
                                                       listener: endLiteralString(0, :)
                                           parseExpression(:)
+                                            looksLikeOuterPatternEquals(:)
+                                              skipOuterPattern(:)
                                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -608,6 +648,8 @@
                                         listener: handleNoTypeArguments([)
                                         parseLiteralListSuffix(:, null)
                                           parseExpression([)
+                                            looksLikeOuterPatternEquals([)
+                                              skipOuterPattern([)
                                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -616,6 +658,8 @@
                                                       listener: beginLiteralString("a")
                                                       listener: endLiteralString(0, ,)
                                           parseExpression(,)
+                                            looksLikeOuterPatternEquals(,)
+                                              skipOuterPattern(,)
                                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -636,7 +680,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 5, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.expect
index e14cad4..a9eb0a2 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.expect
@@ -15,7 +15,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo1, methodDeclarationContinuation)
@@ -83,12 +83,12 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo2, methodDeclarationContinuation)
@@ -156,12 +156,12 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo3, methodDeclarationContinuation)
@@ -229,12 +229,12 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(foo4, methodDeclarationContinuation)
@@ -302,12 +302,12 @@
             endInitializers(2, :, ))
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, :, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar1, methodDeclarationContinuation)
@@ -376,12 +376,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar2, methodDeclarationContinuation)
@@ -450,12 +450,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar3, methodDeclarationContinuation)
@@ -524,12 +524,12 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(})
             handleIdentifier(Foo, methodDeclaration)
             handleIdentifier(bar4, methodDeclarationContinuation)
@@ -598,7 +598,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassConstructor(null, Foo, (, :, })
+          endConstructor(DeclarationKind.Class, Foo, null, (, :, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.intertwined.expect
index eb2abcf..8190f404 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132_prime.dart.intertwined.expect
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -82,6 +82,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -100,6 +103,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -128,6 +134,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -146,6 +155,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -177,7 +189,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -186,8 +198,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -234,6 +246,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -252,6 +267,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -280,6 +298,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -298,6 +319,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -329,7 +353,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -338,8 +362,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -386,6 +410,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -404,6 +431,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -432,6 +462,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -450,6 +483,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -481,7 +517,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -490,8 +526,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -538,6 +574,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -556,6 +595,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -584,6 +626,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -602,6 +647,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -633,7 +681,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, :, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -642,8 +690,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -690,6 +738,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -708,6 +759,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -736,6 +790,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -754,6 +811,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -787,7 +847,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -796,8 +856,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -844,6 +904,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -862,6 +925,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -890,6 +956,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -908,6 +977,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -941,7 +1013,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -950,8 +1022,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -998,6 +1070,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1016,6 +1091,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -1044,6 +1122,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1062,6 +1143,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -1095,7 +1179,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -1104,8 +1188,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(.)
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -1152,6 +1236,9 @@
                       listener: beginInitializer(x)
                       parseInitializerExpressionRest(:)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1170,6 +1257,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(a)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -1198,6 +1288,9 @@
                       listener: beginInitializer(y)
                       parseInitializerExpressionRest(,)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1216,6 +1309,9 @@
                                     parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                       listener: beginParenthesizedExpressionOrRecordLiteral(()
                                       parseExpression(()
+                                        looksLikeOuterPatternEquals(()
+                                          skipOuterPattern(()
+                                            skipObjectPatternRest(b)
                                         parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression((, true, ConstantPatternContext.none)
                                             parsePrimary((, expression, ConstantPatternContext.none)
@@ -1249,7 +1345,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassConstructor(null, Foo, (, :, })
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, :, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect
index a821b79..01d029f 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect
@@ -66,18 +66,24 @@
                     parseVariableInitializerOpt(m)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
                               listener: handleNoTypeArguments({)
                               parseLiteralSetOrMapSuffix(=, null)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
                                         parseLiteralInt({)
                                           listener: handleLiteralInt(0)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -96,6 +102,9 @@
                 looksLikeLocalFunction(m)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(m)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -109,6 +118,9 @@
                               listener: handleSend(m, m)
                       parseArgumentOrIndexStar(m, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(i)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -136,6 +148,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(list)
                 looksLikeLocalFunction(list)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -149,12 +163,17 @@
                     parseVariableInitializerOpt(list)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(=, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(i)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -176,6 +195,9 @@
                                       listener: handleAsOperator(as)
                                       skipChainedAsIsOperators(?)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
+                                      skipObjectPatternRest(i)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -197,6 +219,9 @@
                                       listener: handleAsOperator(as)
                                       skipChainedAsIsOperators(?)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
+                                      skipObjectPatternRest(i)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -226,6 +251,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(list2)
                 looksLikeLocalFunction(list2)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -239,12 +266,17 @@
                     parseVariableInitializerOpt(list2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(=, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
+                                      skipObjectPatternRest(i)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -266,6 +298,9 @@
                                       listener: handleIsOperator(is, null)
                                       skipChainedAsIsOperators(?)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
+                                      skipObjectPatternRest(i)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -287,6 +322,9 @@
                                       listener: handleIsOperator(is, null)
                                       skipChainedAsIsOperators(?)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
+                                      skipObjectPatternRest(i)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -318,12 +356,17 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(return, null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(first)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -346,6 +389,9 @@
                                     listener: handleSend(first, first)
                               listener: handleDotAccess(., first, false)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
+                                skipObjectPatternRest(first)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect
index da21577..80cd5c7 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect
@@ -66,18 +66,24 @@
                     parseVariableInitializerOpt(m)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
                               listener: handleNoTypeArguments({)
                               parseLiteralSetOrMapSuffix(=, null)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
                                         parseLiteralInt({)
                                           listener: handleLiteralInt(0)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -96,6 +102,9 @@
                 looksLikeLocalFunction(m)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(m)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -109,6 +118,8 @@
                               listener: handleSend(m, m)
                       parseArgumentOrIndexStar(m, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -116,6 +127,9 @@
                                   parseParenthesizedExpressionOrRecordLiteral([, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
+                                          skipObjectPatternRest(i)
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -145,6 +159,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(list)
                 looksLikeLocalFunction(list)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -158,12 +174,16 @@
                     parseVariableInitializerOpt(list)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(=, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -171,6 +191,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral([, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(i)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -194,6 +217,8 @@
                                             ensureCloseParen(?, ()
                                             listener: endParenthesizedExpression(()
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -201,6 +226,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(i)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -224,6 +252,8 @@
                                             ensureCloseParen(?, ()
                                             listener: endParenthesizedExpression(()
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -231,6 +261,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(i)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -262,6 +295,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(list2)
                 looksLikeLocalFunction(list2)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -275,12 +310,16 @@
                     parseVariableInitializerOpt(list2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
                               listener: handleNoTypeArguments([)
                               parseLiteralListSuffix(=, null)
                                 parseExpression([)
+                                  looksLikeOuterPatternEquals([)
+                                    skipOuterPattern([)
                                   parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression([, true, ConstantPatternContext.none)
                                       parsePrimary([, expression, ConstantPatternContext.none)
@@ -288,6 +327,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral([, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(i)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -311,6 +353,8 @@
                                             ensureCloseParen(?, ()
                                             listener: endParenthesizedExpression(()
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -318,6 +362,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(i)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -341,6 +388,8 @@
                                             ensureCloseParen(?, ()
                                             listener: endParenthesizedExpression(()
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -348,6 +397,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(i)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -381,12 +433,17 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(return, null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(first)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -409,6 +466,9 @@
                                     listener: handleSend(first, first)
                               listener: handleDotAccess(., first, false)
                           parseExpression(,)
+                            looksLikeOuterPatternEquals(,)
+                              skipOuterPattern(,)
+                                skipObjectPatternRest(first)
                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                 parsePrimary(,, expression, ConstantPatternContext.none)
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 04adf5a..18960ac 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_member.dart.expect
@@ -152,7 +152,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, late, (, null, })
+          endMethod(DeclarationKind.Class, null, late, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -181,7 +181,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 366916f..921dc77 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
@@ -46,6 +46,8 @@
                       parseVariableInitializerOpt(foo)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -72,6 +74,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(bar)
                 looksLikeLocalFunction(bar)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -85,6 +89,9 @@
                     parseVariableInitializerOpt(bar)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(late)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -120,6 +127,9 @@
                   looksLikeLocalFunction(late)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(late)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -146,6 +156,9 @@
                 looksLikeLocalFunction(bar)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -171,6 +184,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -214,6 +229,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -281,6 +298,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -336,7 +356,7 @@
                 listener: beginMetadataStar(late)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, late, DeclarationKind.Class, X, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, late, DeclarationKind.Class, X, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late, X)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -364,6 +384,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -386,7 +409,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, late, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, late, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -433,13 +456,15 @@
                 parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 7b535a0..d5184dd 100644
--- a/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/late_modifier.dart.expect
@@ -170,7 +170,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, late, (, null, })
+          endMethod(DeclarationKind.Class, null, late, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -199,7 +199,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 ec19d84..a37ed52 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
@@ -46,6 +46,8 @@
                       parseVariableInitializerOpt(foo)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -72,6 +74,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(bar)
                 looksLikeLocalFunction(bar)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -85,6 +89,9 @@
                     parseVariableInitializerOpt(bar)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(late)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -120,6 +127,9 @@
                   looksLikeLocalFunction(late)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(late)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -146,6 +156,9 @@
                 looksLikeLocalFunction(bar)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -171,6 +184,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -214,6 +229,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -275,6 +292,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(foo)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -329,6 +349,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -384,7 +407,7 @@
                 listener: beginMetadataStar(late)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, late, DeclarationKind.Class, X, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, late, DeclarationKind.Class, X, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, late, X)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -412,6 +435,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -434,7 +460,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, late, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, late, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -481,13 +507,15 @@
                 parseFieldInitializerOpt(late, late, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
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 41e30c2..ed3b59e 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckBeforeIndex.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -67,6 +70,9 @@
                       listener: handleDotAccess(., baz, false)
                       parseArgumentOrIndexStar(baz, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 8e0afa1..001b760 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(bar)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -77,6 +82,9 @@
                         listener: handleDotAccess(., baz, false)
                         parseArgumentOrIndexStar(baz, NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 78c5a8f..7c832ef 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(obj)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(obj)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -47,6 +50,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 aba6605..fa2d4a7 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex2.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(obj)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(obj)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -47,6 +50,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -62,6 +68,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg2)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 c51ec91..c88b732 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,8 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -48,6 +52,8 @@
                                           parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -55,6 +61,9 @@
                                                       parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                         parseExpression(()
+                                                          looksLikeOuterPatternEquals(()
+                                                            skipOuterPattern(()
+                                                              skipObjectPatternRest(obj)
                                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -71,6 +80,9 @@
                                                         listener: endParenthesizedExpression(()
                                                 parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                                                   parseExpression([)
+                                                    looksLikeOuterPatternEquals([)
+                                                      skipOuterPattern([)
+                                                        skipObjectPatternRest(arg)
                                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -90,6 +102,9 @@
                                 listener: endParenthesizedExpression(()
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg2)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 8861a1c..59d5e01 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex3.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -57,6 +60,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 3c8652c..f4b286c 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(bar)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -67,6 +72,9 @@
                         listener: handleNonNullAssertExpression(!)
                         parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 58353ef..dba9b7d 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex4.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(foo)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -58,6 +61,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 c6904f6..489eab7 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,8 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -48,6 +52,9 @@
                                           parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
+                                                  skipObjectPatternRest(foo)
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -77,6 +84,9 @@
                                 listener: endParenthesizedExpression(()
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 799d0d1..33a8f90 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex5.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -57,6 +60,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -72,6 +78,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg2)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 22ea996..cd96c15 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,8 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -48,6 +52,8 @@
                                           parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -55,6 +61,9 @@
                                                       parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                         parseExpression(()
+                                                          looksLikeOuterPatternEquals(()
+                                                            skipOuterPattern(()
+                                                              skipObjectPatternRest(bar)
                                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -81,6 +90,9 @@
                                                         listener: endParenthesizedExpression(()
                                                 parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                                                   parseExpression([)
+                                                    looksLikeOuterPatternEquals([)
+                                                      skipOuterPattern([)
+                                                        skipObjectPatternRest(arg)
                                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -100,6 +112,9 @@
                                 listener: endParenthesizedExpression(()
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg2)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 b88e7a8..fa444b6 100644
--- a/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/nullCheckOnIndex6.dart.intertwined.expect
@@ -33,6 +33,9 @@
                 looksLikeLocalFunction(foo)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(foo)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -58,6 +61,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -73,6 +79,9 @@
                       listener: handleNonNullAssertExpression(!)
                       parseArgumentOrIndexStar(!, NoTypeParamOrArg(), false)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
+                              skipObjectPatternRest(arg2)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 201bff0..e563104 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,8 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -48,6 +52,8 @@
                                           parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -55,6 +61,8 @@
                                                       parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                         parseExpression(()
+                                                          looksLikeOuterPatternEquals(()
+                                                            skipOuterPattern(()
                                                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                             parseUnaryExpression((, true, ConstantPatternContext.none)
                                                               parsePrimary((, expression, ConstantPatternContext.none)
@@ -62,6 +70,9 @@
                                                                   parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
+                                                                          skipObjectPatternRest(foo)
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -91,6 +102,9 @@
                                                         listener: endParenthesizedExpression(()
                                                 parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                                                   parseExpression([)
+                                                    looksLikeOuterPatternEquals([)
+                                                      skipOuterPattern([)
+                                                        skipObjectPatternRest(arg)
                                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -110,6 +124,9 @@
                                 listener: endParenthesizedExpression(()
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg2)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 31e46f0..e658996 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
@@ -34,6 +34,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -41,6 +43,9 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
+                                      skipObjectPatternRest(obj)
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -57,6 +62,9 @@
                                 listener: endParenthesizedExpression(()
                         parseArgumentOrIndexStar(), NoTypeParamOrArg(), false)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
+                                skipObjectPatternRest(arg)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
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 22e6a42..b997884 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
@@ -39,7 +39,7 @@
             handleNoArguments(;)
             handleSend(index, index)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, int, (, null, ;)
+          endMethod(DeclarationKind.Class, null, int, (, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -72,7 +72,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, void, (, null, })
+          endMethod(DeclarationKind.Class, null, void, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
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 313a6d3..1d636c7 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(int)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Class, Class1, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Class, Class1, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Class1)
                 listener: handleIdentifier(int, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -68,6 +68,9 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(index)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -82,7 +85,7 @@
                     ensureSemicolon(index)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, int, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, int, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class1)
@@ -90,7 +93,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, operator, DeclarationKind.Class, Class1, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, operator, DeclarationKind.Class, Class1, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Class1)
                 listener: handleVoidKeyword(void)
                 parseOperatorName(void)
@@ -136,7 +139,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, void, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
@@ -194,6 +197,9 @@
                 looksLikeLocalFunction(c1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -209,6 +215,8 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -225,6 +233,9 @@
                 looksLikeLocalFunction(c1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -240,6 +251,8 @@
                         listener: handleNoTypeArguments([)
                         parseLiteralListSuffix(?., null)
                           parseExpression([)
+                            looksLikeOuterPatternEquals([)
+                              skipOuterPattern([)
                             parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression([, true, ConstantPatternContext.none)
                                 parsePrimary([, expression, ConstantPatternContext.none)
@@ -262,6 +275,9 @@
                 looksLikeLocalFunction(c1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -280,12 +296,16 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
                                           parseLiteralInt([)
                       parseArgumentOrIndexStar(c1, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -301,6 +321,9 @@
                 looksLikeLocalFunction(c1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -319,6 +342,8 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -329,6 +354,8 @@
                                   parseLiteralInt(=)
                       parseArgumentOrIndexStar(c1, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -350,6 +377,9 @@
                 looksLikeLocalFunction(c1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -368,12 +398,16 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
                                           parseLiteralInt([)
                       parseArgumentOrIndexStar(c1, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
@@ -389,6 +423,9 @@
                 looksLikeLocalFunction(c1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(c1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -407,6 +444,8 @@
                               parsePrimary(?, expression, ConstantPatternContext.none)
                                 parseLiteralListSuffix(?, null)
                                   parseExpression([)
+                                    looksLikeOuterPatternEquals([)
+                                      skipOuterPattern([)
                                     parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression([, true, ConstantPatternContext.none)
                                         parsePrimary([, expression, ConstantPatternContext.none)
@@ -417,6 +456,8 @@
                                   parseLiteralInt(=)
                       parseArgumentOrIndexStar(c1, NoTypeParamOrArg(), true)
                         parseExpression([)
+                          looksLikeOuterPatternEquals([)
+                            skipOuterPattern([)
                           parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression([, true, ConstantPatternContext.none)
                               parsePrimary([, expression, ConstantPatternContext.none)
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 7ef4cdd..8564054 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_member.dart.expect
@@ -152,7 +152,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, required, (, null, })
+          endMethod(DeclarationKind.Class, null, required, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -181,7 +181,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 9edf82c..e961a05 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
@@ -46,6 +46,8 @@
                       parseVariableInitializerOpt(foo)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -72,6 +74,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(bar)
                 looksLikeLocalFunction(bar)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -85,6 +89,9 @@
                     parseVariableInitializerOpt(bar)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(required)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -120,6 +127,9 @@
                   looksLikeLocalFunction(required)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(required)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -146,6 +156,9 @@
                 looksLikeLocalFunction(bar)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -171,6 +184,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -214,6 +229,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -281,6 +298,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -336,7 +356,7 @@
                 listener: beginMetadataStar(required)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, required, DeclarationKind.Class, X, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, required, DeclarationKind.Class, X, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required, X)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -364,6 +384,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -386,7 +409,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, required, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, required, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -433,13 +456,15 @@
                 parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             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 8a855c2..c753220 100644
--- a/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/required_modifier.dart.expect
@@ -163,7 +163,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, required, (, null, })
+          endMethod(DeclarationKind.Class, null, required, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -192,7 +192,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(42)
             endFieldInitializer(=, 42)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, 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 8d35e8e..9b1d1d5 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
@@ -46,6 +46,8 @@
                       parseVariableInitializerOpt(foo)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -72,6 +74,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(bar)
                 looksLikeLocalFunction(bar)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -85,6 +89,9 @@
                     parseVariableInitializerOpt(bar)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(required)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -120,6 +127,9 @@
                   looksLikeLocalFunction(required)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
+                          skipObjectPatternRest(required)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -146,6 +156,9 @@
                 looksLikeLocalFunction(bar)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(bar)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -171,6 +184,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -214,6 +229,8 @@
                   looksLikeLocalFunction(new)
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -297,6 +314,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement({)
                   parseExpression({)
+                    looksLikeOuterPatternEquals({)
+                      skipOuterPattern({)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression({, true, ConstantPatternContext.none)
                         parsePrimary({, expression, ConstantPatternContext.none)
@@ -352,7 +372,7 @@
                 listener: beginMetadataStar(required)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, required, DeclarationKind.Class, X, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, required, DeclarationKind.Class, X, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, required, X)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
@@ -380,6 +400,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -402,7 +425,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, required, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, required, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -449,13 +472,15 @@
                 parseFieldInitializerOpt(required, required, null, null, null, null, null, DeclarationKind.Class, Y)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
                           parseLiteralInt(=)
                             listener: handleLiteralInt(42)
                   listener: endFieldInitializer(=, 42)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart
index a0c220e..2ed8d56 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method.dart
@@ -1,3 +1,4 @@
+// @dart=2.12
 class Foo {
   Foo operator >>>(_) => this;
 }
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 83a46e4..d4735a5 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
@@ -1,22 +1,22 @@
 Problems reported:
 
-parser/no-triple-shift/define_triple_shift_method:2:16: This requires the 'triple-shift' language feature to be enabled.
+parser/no-triple-shift/define_triple_shift_method:3:16: This requires the 'triple-shift' language feature to be enabled.
   Foo operator >>>(_) => this;
                ^^^
 
-parser/no-triple-shift/define_triple_shift_method:7:7: This requires the 'triple-shift' language feature to be enabled.
+parser/no-triple-shift/define_triple_shift_method:8:7: This requires the 'triple-shift' language feature to be enabled.
   foo >>> 42;
       ^^^
 
-parser/no-triple-shift/define_triple_shift_method:8:13: This requires the 'triple-shift' language feature to be enabled.
+parser/no-triple-shift/define_triple_shift_method:9:13: This requires the 'triple-shift' language feature to be enabled.
   print(foo >>> 42);
             ^^^
 
-parser/no-triple-shift/define_triple_shift_method:9:13: This requires the 'triple-shift' language feature to be enabled.
+parser/no-triple-shift/define_triple_shift_method:10:13: This requires the 'triple-shift' language feature to be enabled.
   print(foo >>>= 42);
             ^^^^
 
-parser/no-triple-shift/define_triple_shift_method:10:12: This requires the 'triple-shift' language feature to be enabled.
+parser/no-triple-shift/define_triple_shift_method:11:12: This requires the 'triple-shift' language feature to be enabled.
   if ((foo >>>= 42) == foo) {
            ^^^^
 
@@ -57,7 +57,7 @@
             handleAsyncModifier(null, null)
             handleThisExpression(this, expression)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, Foo, (, null, ;)
+          endMethod(DeclarationKind.Class, null, Foo, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 5947f75..04a5e9b 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Foo)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 reportExperimentNotEnabled(ExperimentalFlag.tripleShift, >>, >)
                   listener: handleExperimentNotEnabled(ExperimentalFlag.tripleShift, >>, >)
                 rewriter()
@@ -77,7 +77,7 @@
                     ensureSemicolon(this)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, Foo, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, Foo, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart
index c093e29..f73524a 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart
+++ b/pkg/front_end/parser_testcases/no-triple-shift/define_triple_shift_method_prime.dart
@@ -1,3 +1,4 @@
+// @dart=2.12
 class Foo {
   Foo operator >>(_) => this;
 }
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 a05fff3..c0e92a4 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
@@ -34,7 +34,7 @@
             handleAsyncModifier(null, null)
             handleThisExpression(this, expression)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, Foo, (, null, ;)
+          endMethod(DeclarationKind.Class, null, Foo, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
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 eb757f6..700d572 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
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(Foo)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 listener: handleIdentifier(Foo, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -74,7 +74,7 @@
                     ensureSemicolon(this)
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, Foo, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, Foo, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart
index 5ca7d9e..88eabfa 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart
+++ b/pkg/front_end/parser_testcases/no-triple-shift/simple_attempted_usage_of_triple_shift.dart
@@ -1,3 +1,4 @@
+// @dart=2.12
 // From https://github.com/dart-lang/sdk/issues/46886
 
 void main(List<String> arguments) {
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 0285dff..027056a 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
@@ -1,6 +1,6 @@
 Problems reported:
 
-parser/no-triple-shift/simple_attempted_usage_of_triple_shift:4:14: This requires the 'triple-shift' language feature to be enabled.
+parser/no-triple-shift/simple_attempted_usage_of_triple_shift:5:14: This requires the 'triple-shift' language feature to be enabled.
   var x = 10 >>> 2;
              ^^^
 
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart
index bb5247d..95c58ad 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_not_triple_shift.dart
@@ -1,3 +1,4 @@
+// @dart=2.12
 // From https://github.com/dart-lang/sdk/issues/46886
 extension on Symbol {
   String operator >(_) => "Greater Than used";
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 20d32c1..84d43bc 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
@@ -31,7 +31,7 @@
             beginLiteralString("Greater Than used")
             endLiteralString(0, ;)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionMethod(null, String, (, null, ;)
+          endMethod(DeclarationKind.Extension, null, String, (, null, ;)
         endMember()
         beginMetadataStar(String)
         endMetadataStar(0)
@@ -56,7 +56,7 @@
             beginLiteralString("Called")
             endLiteralString(0, ;)
             handleExpressionFunctionBody(=>, ;)
-          endExtensionMethod(null, String, (, null, ;)
+          endMethod(DeclarationKind.Extension, null, String, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 2, {, })
     endExtensionDeclaration(extension, extension, on, })
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 4d35e83..0b259d9 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
@@ -23,7 +23,7 @@
                 listener: beginMetadataStar(String)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, operator, DeclarationKind.Extension, null, false)
+              parseMethod({, null, null, null, null, null, null, null, {, SimpleType(), null, null, operator, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, null)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(operator)
@@ -66,7 +66,7 @@
                     ensureSemicolon("Greater Than used")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionMethod(null, String, (, null, ;)
+                listener: endMethod(DeclarationKind.Extension, null, String, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, String)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Extension, null)
@@ -74,7 +74,7 @@
                 listener: beginMetadataStar(String)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, call, DeclarationKind.Extension, null, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, SimpleType(), null, null, call, DeclarationKind.Extension, null, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, call, null)
                 listener: handleIdentifier(String, typeReference)
                 listener: handleNoTypeArguments(call)
@@ -118,7 +118,7 @@
                     ensureSemicolon("Called")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endExtensionMethod(null, String, (, null, ;)
+                listener: endMethod(DeclarationKind.Extension, null, String, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 2, {, })
diff --git a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart
index a2b84b0..4ed0b20 100644
--- a/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart
+++ b/pkg/front_end/parser_testcases/no-triple-shift/triple_shift_symbol.dart
@@ -1,3 +1,4 @@
+// @dart=2.12
 main() {
   print(#>>>);
 }
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 d85bf30..99f2bed 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
@@ -1,6 +1,6 @@
 Problems reported:
 
-parser/no-triple-shift/triple_shift_symbol:2:13: Expected an identifier, but got ')'.
+parser/no-triple-shift/triple_shift_symbol:3:13: Expected an identifier, but got ')'.
   print(#>>>);
             ^
 
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect
index 343d7d7..133876b 100644
--- a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect
@@ -87,6 +87,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -96,6 +98,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -114,6 +118,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -129,9 +136,12 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(p)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -156,6 +166,9 @@
                               listener: handleParenthesizedCondition((, null, null)
                           listener: handleThenControlFlow())
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -275,6 +288,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -284,6 +299,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -302,6 +319,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -317,9 +337,12 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(p)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -344,6 +367,9 @@
                               listener: handleParenthesizedCondition((, null, null)
                           listener: handleThenControlFlow())
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -358,6 +384,9 @@
                           listener: handleNullAwareElement(?)
                           listener: handleElseControlFlow(else)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -446,15 +475,20 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments({)
                         parseLiteralSetOrMapSuffix(return, null)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(t)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -473,6 +507,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -491,6 +527,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -506,6 +545,9 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -606,15 +648,20 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments({)
                         parseLiteralSetOrMapSuffix(return, null)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(t)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -633,6 +680,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -651,6 +700,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -666,6 +718,9 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -684,6 +739,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -702,6 +759,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -717,6 +777,9 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -824,6 +887,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -833,6 +898,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -851,6 +918,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -866,9 +936,12 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(p)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -893,6 +966,9 @@
                               listener: handleParenthesizedCondition((, null, null)
                           listener: handleThenControlFlow())
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -905,6 +981,8 @@
                                         listener: handleNoArguments(:)
                                       listener: handleSend(a, a)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1020,6 +1098,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1029,6 +1109,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -1047,6 +1129,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -1062,9 +1147,12 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(p)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -1089,6 +1177,9 @@
                               listener: handleParenthesizedCondition((, null, null)
                           listener: handleThenControlFlow())
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1101,6 +1192,8 @@
                                         listener: handleNoArguments(:)
                                       listener: handleSend(a, a)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1111,6 +1204,9 @@
                           listener: handleLiteralMapEntry(:, else, ?, null)
                           listener: handleElseControlFlow(else)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1123,6 +1219,8 @@
                                         listener: handleNoArguments(:)
                                       listener: handleSend(b, b)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1207,15 +1305,20 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments({)
                         parseLiteralSetOrMapSuffix(return, null)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(t)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -1234,6 +1337,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -1252,6 +1357,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -1267,6 +1375,9 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1279,6 +1390,8 @@
                                         listener: handleNoArguments(:)
                                       listener: handleSend(a, a)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1375,15 +1488,20 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments({)
                         parseLiteralSetOrMapSuffix(return, null)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(t)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -1402,6 +1520,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -1420,6 +1540,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -1435,6 +1558,9 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1447,6 +1573,8 @@
                                         listener: handleNoArguments(:)
                                       listener: handleSend(a, a)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1461,6 +1589,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -1479,6 +1609,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -1494,6 +1627,9 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1506,6 +1642,8 @@
                                         listener: handleNoArguments(:)
                                       listener: handleSend(b, b)
                           parseExpression(:)
+                            looksLikeOuterPatternEquals(:)
+                              skipOuterPattern(:)
                             parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(:, true, ConstantPatternContext.none)
                                 parsePrimary(:, expression, ConstantPatternContext.none)
@@ -1609,6 +1747,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1618,6 +1758,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -1636,6 +1778,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -1651,9 +1796,12 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(p)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -1678,6 +1826,8 @@
                               listener: handleParenthesizedCondition((, null, null)
                           listener: handleThenControlFlow())
                           parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
                             parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(), true, ConstantPatternContext.none)
                                 parsePrimary(), expression, ConstantPatternContext.none)
@@ -1686,6 +1836,9 @@
                                       listener: beginLiteralString("key")
                                       listener: endLiteralString(0, :)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1805,6 +1958,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1814,6 +1969,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -1832,6 +1989,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -1847,9 +2007,12 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(p)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -1874,6 +2037,8 @@
                               listener: handleParenthesizedCondition((, null, null)
                           listener: handleThenControlFlow())
                           parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
                             parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(), true, ConstantPatternContext.none)
                                 parsePrimary(), expression, ConstantPatternContext.none)
@@ -1882,6 +2047,9 @@
                                       listener: beginLiteralString("key")
                                       listener: endLiteralString(0, :)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1896,6 +2064,8 @@
                           listener: handleLiteralMapEntry(:, else, null, ?)
                           listener: handleElseControlFlow(else)
                           parseExpression(else)
+                            looksLikeOuterPatternEquals(else)
+                              skipOuterPattern(else)
                             parsePrecedenceExpression(else, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(else, true, ConstantPatternContext.none)
                                 parsePrimary(else, expression, ConstantPatternContext.none)
@@ -1904,6 +2074,9 @@
                                       listener: beginLiteralString("key")
                                       listener: endLiteralString(0, :)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1992,15 +2165,20 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments({)
                         parseLiteralSetOrMapSuffix(return, null)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(t)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -2019,6 +2197,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -2037,6 +2217,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -2052,6 +2235,8 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
                             parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(), true, ConstantPatternContext.none)
                                 parsePrimary(), expression, ConstantPatternContext.none)
@@ -2060,6 +2245,9 @@
                                       listener: beginLiteralString("key")
                                       listener: endLiteralString(0, :)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -2160,15 +2348,20 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
                         listener: handleNoTypeArguments({)
                         parseLiteralSetOrMapSuffix(return, null)
                           listener: beginIfControlFlow(if)
-                          ensureParenthesizedCondition(if, allowCase: false)
-                            parseExpressionInParenthesisRest((, allowCase: false)
+                          ensureParenthesizedCondition(if, allowCase: true)
+                            parseExpressionInParenthesisRest((, allowCase: true)
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
+                                    skipObjectPatternRest(t)
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
@@ -2187,6 +2380,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -2205,6 +2400,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -2220,6 +2418,8 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
                             parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(), true, ConstantPatternContext.none)
                                 parsePrimary(), expression, ConstantPatternContext.none)
@@ -2228,6 +2428,9 @@
                                       listener: beginLiteralString("key")
                                       listener: endLiteralString(0, :)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(a)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
@@ -2246,6 +2449,8 @@
                           parseForLoopPartsStart(null, for, ForPartsContext(null))
                             parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                               parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                skipOuterPattern(var)
+                                  skipObjectPatternRest(element)
                                 listener: beginMetadataStar(var)
                                 listener: endMetadataStar(0)
                                 listener: handleNoType(var)
@@ -2264,6 +2469,9 @@
                           parseForInLoopPartsRest(element, null, for, null, element)
                             listener: beginForInExpression(list)
                             parseExpression(in)
+                              looksLikeOuterPatternEquals(in)
+                                skipOuterPattern(in)
+                                  skipObjectPatternRest(list)
                               parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(in, true, ConstantPatternContext.none)
                                   parsePrimary(in, expression, ConstantPatternContext.none)
@@ -2279,6 +2487,8 @@
                             listener: endForInExpression())
                             listener: handleForInLoopParts(null, for, (, null, in)
                           parseExpression())
+                            looksLikeOuterPatternEquals())
+                              skipOuterPattern())
                             parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(), true, ConstantPatternContext.none)
                                 parsePrimary(), expression, ConstantPatternContext.none)
@@ -2287,6 +2497,9 @@
                                       listener: beginLiteralString("key")
                                       listener: endLiteralString(0, :)
                           parseExpression(?)
+                            looksLikeOuterPatternEquals(?)
+                              skipOuterPattern(?)
+                                skipObjectPatternRest(b)
                             parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(?, true, ConstantPatternContext.none)
                                 parsePrimary(?, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect
index a052ba1..4b52650 100644
--- a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect
@@ -39,6 +39,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -50,6 +52,9 @@
                       listener: endTypeArguments(1, <, >)
                       parseLiteralListSuffix(>, null)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -105,6 +110,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -116,6 +123,9 @@
                       listener: endTypeArguments(1, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -183,6 +193,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -197,6 +209,9 @@
                       listener: endTypeArguments(2, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -209,6 +224,9 @@
                                       listener: handleNoArguments(:)
                                     listener: handleSend(x, x)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -264,6 +282,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -275,6 +295,9 @@
                       listener: endTypeArguments(1, <, >)
                       parseLiteralListSuffix(>, null)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -342,6 +365,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -353,9 +378,12 @@
                       listener: endTypeArguments(1, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         listener: beginIfControlFlow(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(b)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -371,6 +399,9 @@
                             listener: handleParenthesizedCondition((, null, null)
                         listener: handleThenControlFlow())
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -427,6 +458,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -441,6 +474,8 @@
                         parseForLoopPartsStart(null, for, ForPartsContext(null))
                           parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                             parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                              skipOuterPattern(var)
+                                skipObjectPatternRest(_)
                               listener: beginMetadataStar(var)
                               listener: endMetadataStar(0)
                               listener: handleNoType(var)
@@ -459,6 +494,8 @@
                         parseForInLoopPartsRest(_, null, for, null, _)
                           listener: beginForInExpression([])
                           parseExpression(in)
+                            looksLikeOuterPatternEquals(in)
+                              skipOuterPattern(in)
                             parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(in, true, ConstantPatternContext.none)
                                 parsePrimary(in, expression, ConstantPatternContext.none)
@@ -472,6 +509,9 @@
                           listener: endForInExpression())
                           listener: handleForInLoopParts(null, for, (, null, in)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -540,6 +580,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -554,6 +596,9 @@
                       listener: endTypeArguments(2, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         parseExpression({)
+                          looksLikeOuterPatternEquals({)
+                            skipOuterPattern({)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression({, true, ConstantPatternContext.none)
                               parsePrimary({, expression, ConstantPatternContext.none)
@@ -566,6 +611,9 @@
                                       listener: handleNoArguments(:)
                                     listener: handleSend(x, x)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -633,6 +681,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -647,6 +697,9 @@
                       listener: endTypeArguments(2, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -659,6 +712,9 @@
                                       listener: handleNoArguments(:)
                                     listener: handleSend(x, x)
                         parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(:, true, ConstantPatternContext.none)
                               parsePrimary(:, expression, ConstantPatternContext.none)
@@ -726,6 +782,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -740,6 +798,9 @@
                       listener: endTypeArguments(2, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -752,6 +813,9 @@
                                       listener: handleNoArguments(:)
                                     listener: handleSend(x, x)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -831,6 +895,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -845,9 +911,12 @@
                       listener: endTypeArguments(2, <, >)
                       parseLiteralSetOrMapSuffix(>, null)
                         listener: beginIfControlFlow(if)
-                        ensureParenthesizedCondition(if, allowCase: false)
-                          parseExpressionInParenthesisRest((, allowCase: false)
+                        ensureParenthesizedCondition(if, allowCase: true)
+                          parseExpressionInParenthesisRest((, allowCase: true)
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
+                                  skipObjectPatternRest(b)
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -863,6 +932,9 @@
                             listener: handleParenthesizedCondition((, null, null)
                         listener: handleThenControlFlow())
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -875,6 +947,9 @@
                                       listener: handleNoArguments(:)
                                     listener: handleSend(x, x)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -943,6 +1018,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -960,6 +1037,8 @@
                         parseForLoopPartsStart(null, for, ForPartsContext(null))
                           parseExpressionStatementOrDeclaration((, ForPartsContext(null))
                             parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                              skipOuterPattern(var)
+                                skipObjectPatternRest(_)
                               listener: beginMetadataStar(var)
                               listener: endMetadataStar(0)
                               listener: handleNoType(var)
@@ -978,6 +1057,8 @@
                         parseForInLoopPartsRest(_, null, for, null, _)
                           listener: beginForInExpression([])
                           parseExpression(in)
+                            looksLikeOuterPatternEquals(in)
+                              skipOuterPattern(in)
                             parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(in, true, ConstantPatternContext.none)
                                 parsePrimary(in, expression, ConstantPatternContext.none)
@@ -991,6 +1072,9 @@
                           listener: endForInExpression())
                           listener: handleForInLoopParts(null, for, (, null, in)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(x)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
@@ -1003,6 +1087,9 @@
                                       listener: handleNoArguments(:)
                                     listener: handleSend(x, x)
                         parseExpression(?)
+                          looksLikeOuterPatternEquals(?)
+                            skipOuterPattern(?)
+                              skipObjectPatternRest(y)
                           parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(?, true, ConstantPatternContext.none)
                               parsePrimary(?, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/split_question_period.dart.intertwined.expect b/pkg/front_end/parser_testcases/null_aware_elements/split_question_period.dart.intertwined.expect
index b670ff5..c7e8932 100644
--- a/pkg/front_end/parser_testcases/null_aware_elements/split_question_period.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/null_aware_elements/split_question_period.dart.intertwined.expect
@@ -32,6 +32,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -43,6 +45,8 @@
                           listener: endTypeArguments(1, <, >)
                           parseLiteralListSuffix(>, null)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -63,6 +67,8 @@
                                 listener: handleDotShorthandContext(.)
                             listener: handleNullAwareElement(?)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -120,6 +126,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -131,6 +139,8 @@
                           listener: endTypeArguments(1, <, >)
                           parseLiteralSetOrMapSuffix(>, null)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -151,6 +161,8 @@
                                 listener: handleDotShorthandContext(.)
                             listener: handleNullAwareElement(?)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -208,6 +220,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -222,6 +236,8 @@
                           listener: endTypeArguments(2, <, >)
                           parseLiteralSetOrMapSuffix(>, null)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -241,6 +257,8 @@
                                 listener: handleDotShorthandHead(.)
                                 listener: handleDotShorthandContext(.)
                             parseExpression(:)
+                              looksLikeOuterPatternEquals(:)
+                                skipOuterPattern(:)
                               parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(:, true, ConstantPatternContext.none)
                                   parsePrimary(:, expression, ConstantPatternContext.none)
@@ -248,12 +266,16 @@
                                       listener: handleLiteralInt(0)
                             listener: handleLiteralMapEntry(:, ,, ?, null)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
                                     parseLiteralInt(,)
                                       listener: handleLiteralInt(0)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -274,6 +296,8 @@
                                 listener: handleDotShorthandContext(.)
                             listener: handleLiteralMapEntry(:, ,, null, ?)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -293,6 +317,8 @@
                                 listener: handleDotShorthandHead(.)
                                 listener: handleDotShorthandContext(.)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -313,6 +339,8 @@
                                 listener: handleDotShorthandContext(.)
                             listener: handleLiteralMapEntry(:, ,, ?, ?)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -332,6 +360,8 @@
                                 listener: handleDotShorthandHead(.)
                                 listener: handleDotShorthandContext(.)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -352,6 +382,8 @@
                                 listener: handleDotShorthandContext(.)
                             listener: handleLiteralMapEntry(:, ,, ?, ?)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -371,6 +403,8 @@
                                 listener: handleDotShorthandHead(.)
                                 listener: handleDotShorthandContext(.)
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/unsplit_question_period.dart.intertwined.expect b/pkg/front_end/parser_testcases/null_aware_elements/unsplit_question_period.dart.intertwined.expect
index a99695b..c7bf64e 100644
--- a/pkg/front_end/parser_testcases/null_aware_elements/unsplit_question_period.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/null_aware_elements/unsplit_question_period.dart.intertwined.expect
@@ -32,6 +32,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -45,6 +47,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -67,6 +71,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -124,6 +130,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -137,6 +145,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -159,6 +169,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -216,6 +228,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -232,6 +246,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -251,6 +267,8 @@
                                 listener: handleDotShorthandHead(.)
                                 listener: handleDotShorthandContext(.)
                             parseExpression(:)
+                              looksLikeOuterPatternEquals(:)
+                                skipOuterPattern(:)
                               parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(:, true, ConstantPatternContext.none)
                                   parsePrimary(:, expression, ConstantPatternContext.none)
@@ -258,6 +276,8 @@
                                       listener: handleLiteralInt(0)
                             listener: handleLiteralMapEntry(:, ,, ?, null)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -266,6 +286,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -288,6 +310,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -309,6 +333,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -331,6 +357,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -352,6 +380,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -374,6 +404,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
@@ -395,6 +427,8 @@
                             rewriter()
                             rewriter()
                             parseExpression(?)
+                              looksLikeOuterPatternEquals(?)
+                                skipOuterPattern(?)
                               parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
                                 parsePrimary(., expressionContinuation, ConstantPatternContext.none)
                                   parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.expect
index bd2756a..d7201f5 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect
index 2f93041..56781e2 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect
index d0f742f..8fd949d 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index 3a08f1d..cb4bdbe 100644
--- a/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/cast_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/const_patterns.dart.expect b/pkg/front_end/parser_testcases/patterns/const_patterns.dart.expect
index d888cd4..400a60b 100644
--- a/pkg/front_end/parser_testcases/patterns/const_patterns.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/const_patterns.dart.expect
@@ -262,7 +262,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Class, Class)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Class, Class)
             handleNoType(const)
             handleIdentifier(Class, methodDeclaration)
             handleNoTypeVariables(()
@@ -280,12 +280,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Class, const, null, (, null, ;)
         endMember()
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Class, Class)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Class, Class)
             handleNoType(const)
             handleIdentifier(Class, methodDeclaration)
             handleIdentifier(named, methodDeclarationContinuation)
@@ -296,7 +296,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Class, const, null, (, null, ;)
         endMember()
         beginMetadataStar(call)
         endMetadataStar(0)
@@ -311,7 +311,7 @@
             handleAsyncModifier(null, null)
             beginBlockFunctionBody({)
             endBlockFunctionBody(0, {, })
-          endClassMethod(null, call, (, null, })
+          endMethod(DeclarationKind.Class, null, call, (, null, })
         endMember()
         beginMetadataStar(test)
         endMetadataStar(0)
@@ -1736,7 +1736,7 @@
                 endSwitchBlock(2, {, })
               endSwitchStatement(switch, })
             endBlockFunctionBody(3, {, })
-          endClassMethod(null, test, (, null, })
+          endMethod(DeclarationKind.Class, null, test, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
@@ -1765,7 +1765,7 @@
         beginMetadataStar(const)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, GenericClass, GenericClass)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, GenericClass, GenericClass)
             handleNoType(const)
             handleIdentifier(GenericClass, methodDeclaration)
             handleNoTypeVariables(()
@@ -1783,7 +1783,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, const, (, null, ;)
+          endConstructor(DeclarationKind.Class, const, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/const_patterns.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/const_patterns.dart.intertwined.expect
index e440847..0697c85 100644
--- a/pkg/front_end/parser_testcases/patterns/const_patterns.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/const_patterns.dart.intertwined.expect
@@ -33,8 +33,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(const)
-      skipOuterPattern(const)
-        skipObjectPatternRest(int)
       parseFields(;, null, null, null, null, null, null, const, const, SimpleType(), value, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, ;)
         listener: handleIdentifier(int, typeReference)
@@ -113,10 +111,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(Class)
-              parseMethod({, null, null, null, null, null, null, const, const, NoType(), null, Class, DeclarationKind.Class, Class, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Class, Class)
+              parseMethod({, null, null, null, null, null, null, const, const, NoType(), null, null, Class, DeclarationKind.Class, Class, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Class, Class)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Class, methodDeclaration)
@@ -150,7 +146,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, const)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -158,10 +154,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(named)
-              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, Class, DeclarationKind.Class, Class, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, Class, Class)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, Class, DeclarationKind.Class, Class, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, Class, Class)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(Class, methodDeclaration)
@@ -185,7 +179,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, call)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -194,7 +188,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, call, DeclarationKind.Class, Class, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, call, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, call, Class)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
@@ -217,7 +211,7 @@
                   listener: beginBlockFunctionBody({)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(0, {, })
-                listener: endClassMethod(null, call, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, call, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, test)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Class)
@@ -226,7 +220,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, test, DeclarationKind.Class, Class, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, test, DeclarationKind.Class, Class, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, test, Class)
                 listener: handleNoType(})
                 ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
@@ -3177,7 +3171,7 @@
                         listener: endSwitchStatement(switch, })
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(3, {, })
-                listener: endClassMethod(null, test, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, test, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
@@ -3222,10 +3216,8 @@
                 listener: beginMetadataStar(const)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(GenericClass)
-              parseMethod({, null, null, null, null, null, null, const, const, NoType(), null, GenericClass, DeclarationKind.Class, GenericClass, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, GenericClass, GenericClass)
+              parseMethod({, null, null, null, null, null, null, const, const, NoType(), null, null, GenericClass, DeclarationKind.Class, GenericClass, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, null, GenericClass, GenericClass)
                 listener: handleNoType(const)
                 ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
                   listener: handleIdentifier(GenericClass, methodDeclaration)
@@ -3259,7 +3251,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, const, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, const, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.expect b/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.expect
index c6b5980..6d5a8d2 100644
--- a/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.expect
@@ -308,7 +308,7 @@
             beginFieldInitializer(=)
               handleLiteralInt(2)
             endFieldInitializer(=, 2)
-          endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, const, 1, static, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.intertwined.expect
index 0b0dac5..05fa942 100644
--- a/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/const_patterns_binary.dart.intertwined.expect
@@ -33,8 +33,6 @@
       listener: endMetadataStar(0)
     parseTopLevelMemberImpl(;)
       listener: beginTopLevelMember(const)
-      skipOuterPattern(const)
-        skipObjectPatternRest(value)
       parseFields(;, null, null, null, null, null, null, const, const, NoType(), value, DeclarationKind.TopLevel, null, false)
         listener: beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, const, ;)
         listener: handleNoType(const)
@@ -84,8 +82,6 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
-                skipObjectPatternRest(value)
               parseFields({, null, null, null, static, null, null, const, const, NoType(), value, DeclarationKind.Class, Class, false)
                 listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, const, {)
                 listener: handleNoType(const)
@@ -102,7 +98,7 @@
                           parseLiteralInt(=)
                             listener: handleLiteralInt(2)
                   listener: endFieldInitializer(=, 2)
-                listener: endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, const, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.expect
index c336b07..2b00c66 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect
index ae07871..d4a5b3d 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_cast.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.expect
index 825bd49..71ea3ef 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect
index 3bd2cf1..5fbdea2 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_assert.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.expect
index 8beae78..afec8cb 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect
index c7b80cc..8482611 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_inside_null_check.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.expect
index d231124..2e67468 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.expect
@@ -29,7 +29,7 @@
             handleType(T, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, T, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, T, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
index 29baf9c..3306f60 100644
--- a/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/extractor_pattern_with_type_args_inside_null_assert.dart.intertwined.expect
@@ -50,7 +50,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, T, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, T, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect
index e40ec0c..34c91bc 100644
--- a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect
@@ -21,12 +21,12 @@
             handleType(dynamic, null)
             handleIdentifier(field, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, dynamic, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, dynamic, ;)
         endMember()
         beginMetadataStar(Class)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Class, Class)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Class, Class)
             handleNoType(;)
             handleIdentifier(Class, methodDeclaration)
             handleNoTypeVariables(()
@@ -42,7 +42,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Class, (, null, ;)
+          endConstructor(DeclarationKind.Class, Class, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect
index 3664d38..a94e080 100644
--- a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(field, fieldDeclaration)
                 parseFieldInitializerOpt(field, field, null, null, null, null, null, DeclarationKind.Class, Class)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, dynamic, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, dynamic, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Class)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
@@ -51,8 +51,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Class, DeclarationKind.Class, Class, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Class, Class)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Class, DeclarationKind.Class, Class, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Class, Class)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Class, methodDeclaration)
@@ -82,7 +82,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Class, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, Class, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.expect
index 4617eda..98c838e 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect
index db4b6f7..8d3a0c3 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect
index fdf0328..05d3c62 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index 672be26..573e0e0 100644
--- a/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_assert_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.expect
index aae774f..49af934 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect
index c8ca35c..f0e6dcb 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect
index e15c3dd..4f9cc60 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
index 6cc7528..8d85ca1 100644
--- a/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/null_check_inside_extractor_pattern_implicitly_named.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.expect
index 1759e20..1e977d4 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.expect
@@ -31,7 +31,7 @@
                 handleLiteralInt(1)
               endRecordLiteral((, 2, null)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.intertwined.expect
index 6020223..f7c946a 100644
--- a/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/patternVariableDeclaration_inClass.dart.intertwined.expect
@@ -73,7 +73,7 @@
                               ensureCloseParen(1, ()
                               listener: endRecordLiteral((, 2, null)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, var, 1, var, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, var, 1, var, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.expect
index 2f2aec6..cc788d9 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, ?)
             handleIdentifier(f, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect
index 506cd3c..3d12fed 100644
--- a/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/relational_inside_extractor_pattern.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(f, fieldDeclaration)
                 parseFieldInitializerOpt(f, f, null, null, null, null, null, DeclarationKind.Class, C)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, null, null, 1, int, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, null, 1, int, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart
new file mode 100644
index 0000000..eb93361
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart
@@ -0,0 +1,15 @@
+class C1() {
+  this {}
+}
+
+class C2() {
+  this : assert(1 > 2) {}
+}
+
+class C3() {
+  this;
+}
+
+class C4() {
+  this : assert(1 > 2);
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.expect
new file mode 100644
index 0000000..900ec45
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.expect
@@ -0,0 +1,134 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C1, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endPrimaryConstructorBody(this, this, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C2, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endPrimaryConstructorBody(this, this, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C3, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endPrimaryConstructorBody(this, this, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C4, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endPrimaryConstructorBody(this, this, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.intertwined.expect
new file mode 100644
index 0000000..0d49641
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.intertwined.expect
@@ -0,0 +1,264 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C1, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
+        parseClass(C1, class, class, null, C1)
+          parsePrimaryConstructorOpt(C1, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C1, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C1)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C1)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(this)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(this, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endPrimaryConstructorBody(this, this, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C2, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
+        parseClass(C2, class, class, null, C2)
+          parsePrimaryConstructorOpt(C2, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C2, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C2)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C2)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endPrimaryConstructorBody(this, this, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C3, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
+        parseClass(C3, class, class, null, C3)
+          parsePrimaryConstructorOpt(C3, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C3, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C3)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C3)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(this)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(this, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endPrimaryConstructorBody(this, this, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C4, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
+        parseClass(C4, class, class, null, C4)
+          parsePrimaryConstructorOpt(C4, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C4, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C4)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C4)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endPrimaryConstructorBody(this, this, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.parser.expect
new file mode 100644
index 0000000..a66ca35
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.parser.expect
@@ -0,0 +1,33 @@
+class C1() {
+this {}
+}
+
+class C2() {
+this : assert(1 > 2) {}
+}
+
+class C3() {
+this;
+}
+
+class C4() {
+this : assert(1 > 2);
+}
+
+
+class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.scanner.expect
new file mode 100644
index 0000000..a66ca35
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body.dart.scanner.expect
@@ -0,0 +1,33 @@
+class C1() {
+this {}
+}
+
+class C2() {
+this : assert(1 > 2) {}
+}
+
+class C3() {
+this;
+}
+
+class C4() {
+this : assert(1 > 2);
+}
+
+
+class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart
new file mode 100644
index 0000000..2ab967e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart
@@ -0,0 +1,15 @@
+class C1() {
+  this() {}
+}
+
+class C2() {
+  this(int x) : assert(1 > 2) {}
+}
+
+class C3() {
+  this();
+}
+
+class C4() {
+  this(int x) : assert(1 > 2);
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.expect
new file mode 100644
index 0000000..9c50c94
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.expect
@@ -0,0 +1,204 @@
+Problems reported:
+
+parser/primary_constructors/class_primary_constructor_body_error:2:3: 'this' can't be used as an identifier because it's a keyword.
+  this() {}
+  ^^^^
+
+parser/primary_constructors/class_primary_constructor_body_error:6:3: 'this' can't be used as an identifier because it's a keyword.
+  this(int x) : assert(1 > 2) {}
+  ^^^^
+
+parser/primary_constructors/class_primary_constructor_body_error:6:3: The name of a constructor must match the name of the enclosing class.
+  this(int x) : assert(1 > 2) {}
+  ^^^^
+
+parser/primary_constructors/class_primary_constructor_body_error:10:3: 'this' can't be used as an identifier because it's a keyword.
+  this();
+  ^^^^
+
+parser/primary_constructors/class_primary_constructor_body_error:14:3: 'this' can't be used as an identifier because it's a keyword.
+  this(int x) : assert(1 > 2);
+  ^^^^
+
+parser/primary_constructors/class_primary_constructor_body_error:14:3: The name of a constructor must match the name of the enclosing class.
+  this(int x) : assert(1 > 2);
+  ^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C1, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C1)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.Class, null, this, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C2, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, this, C2)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+            handleRecoverableError(ConstructorWithWrongName, this, this)
+          endConstructor(DeclarationKind.Class, this, null, (, :, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C3, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C3)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endMethod(DeclarationKind.Class, null, this, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C4, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, this, C4)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+            handleRecoverableError(ConstructorWithWrongName, this, this)
+          endConstructor(DeclarationKind.Class, this, null, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.intertwined.expect
new file mode 100644
index 0000000..acda8f8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.intertwined.expect
@@ -0,0 +1,344 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C1, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C1)
+        parseClass(C1, class, class, null, C1)
+          parsePrimaryConstructorOpt(C1, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C1, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C1)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C1)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.Class, C1, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C1)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(this, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endMethod(DeclarationKind.Class, null, this, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C2, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C2)
+        parseClass(C2, class, class, null, C2)
+          parsePrimaryConstructorOpt(C2, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C2, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C2)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C2)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.Class, C2, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, this, C2)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(this, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                reportRecoverableError(this, ConstructorWithWrongName)
+                  listener: handleRecoverableError(ConstructorWithWrongName, this, this)
+                listener: endConstructor(DeclarationKind.Class, this, null, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C3, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C3)
+        parseClass(C3, class, class, null, C3)
+          parsePrimaryConstructorOpt(C3, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C3, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C3)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C3)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.Class, C3, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, this, C3)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(this, 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: endMethod(DeclarationKind.Class, null, this, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C4, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C4)
+        parseClass(C4, class, class, null, C4)
+          parsePrimaryConstructorOpt(C4, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C4, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C4)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C4)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.Class, C4, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, this, C4)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(this, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                reportRecoverableError(this, ConstructorWithWrongName)
+                  listener: handleRecoverableError(ConstructorWithWrongName, this, this)
+                listener: endConstructor(DeclarationKind.Class, this, null, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.parser.expect
new file mode 100644
index 0000000..8e768c1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.parser.expect
@@ -0,0 +1,33 @@
+class C1() {
+this() {}
+}
+
+class C2() {
+this(int x) : assert(1 > 2) {}
+}
+
+class C3() {
+this();
+}
+
+class C4() {
+this(int x) : assert(1 > 2);
+}
+
+
+class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.scanner.expect
new file mode 100644
index 0000000..8e768c1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_body_error.dart.scanner.expect
@@ -0,0 +1,33 @@
+class C1() {
+this() {}
+}
+
+class C2() {
+this(int x) : assert(1 > 2) {}
+}
+
+class C3() {
+this();
+}
+
+class C4() {
+this(int x) : assert(1 > 2);
+}
+
+
+class[KeywordToken] C1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+class[KeywordToken] C4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart
diff --git a/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.expect
new file mode 100644
index 0000000..7b882bc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.expect
@@ -0,0 +1,451 @@
+Problems reported:
+
+parser/primary_constructors/class_primary_constructor_error:1:11: Named parameter lists cannot be empty.
+class C( {}
+          ^
+
+parser/primary_constructors/class_primary_constructor_error:2:1: Expected ')' before this.
+class C) {}
+^^^^^
+
+parser/primary_constructors/class_primary_constructor_error:3:10: Expected an identifier, but got '{'.
+class C. {}
+         ^
+
+parser/primary_constructors/class_primary_constructor_error:4:9: Expected an identifier, but got '('.
+class C.() {}
+        ^
+
+parser/primary_constructors/class_primary_constructor_error:5:7: 'const' can only be used together with a primary constructor declaration.
+class const C {}
+      ^^^^^
+
+parser/primary_constructors/class_primary_constructor_error:6:14: Named parameter lists cannot be empty.
+class C<T>( {}
+             ^
+
+parser/primary_constructors/class_primary_constructor_error:7:1: Expected ')' before this.
+class C<T>) {}
+^^^^^
+
+parser/primary_constructors/class_primary_constructor_error:8:7: 'const' can only be used together with a primary constructor declaration.
+class const C<T> {}
+      ^^^^^
+
+parser/primary_constructors/class_primary_constructor_error:9:13: Expected an identifier, but got '{'.
+class C<T>. {}
+            ^
+
+parser/primary_constructors/class_primary_constructor_error:10:12: Expected an identifier, but got '('.
+class C<T>.() {}
+           ^
+
+parser/primary_constructors/class_primary_constructor_error:11:19: Expected an identifier, but got '{'.
+class const C<T>. {}
+                  ^
+
+parser/primary_constructors/class_primary_constructor_error:12:18: Expected an identifier, but got '('.
+class const C<T>.() {}
+                 ^
+
+parser/primary_constructors/class_primary_constructor_error:16:7: 'const' can only be used together with a primary constructor declaration.
+class const C = O with M;
+      ^^^^^
+
+parser/primary_constructors/class_primary_constructor_error:17:7: 'const' can only be used together with a primary constructor declaration.
+class const C<T> = O with M;
+      ^^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginOptionalFormalParameters({)
+            handleRecoverableError(EmptyNamedParameterList, }, })
+            beginMetadataStar()
+            endMetadataStar(0)
+            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
+              handleNoType({)
+              handleIdentifier(, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(})
+            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
+          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], class, class)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType()
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
+      handleNoPrimaryConstructor(C, const, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginOptionalFormalParameters({)
+            handleRecoverableError(EmptyNamedParameterList, }, })
+            beginMetadataStar()
+            endMetadataStar(0)
+            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
+              handleNoType({)
+              handleIdentifier(, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(})
+            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
+          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], class, class)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
+      handleNoPrimaryConstructor(>, const, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType()
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType()
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType(named)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType(named)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(=)
+    handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
+    beginNamedMixinApplication(class, null, null, null, null, null, null, null, null, C)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
+    beginNamedMixinApplication(class, null, null, null, null, null, null, null, null, C)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleNamedMixinApplicationWithClause(with)
+    endNamedMixinApplication(class, class, =, null, ;)
+  endTopLevelDeclaration(;)
+endCompilationUnit(15, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/class_primary_constructor_error.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/class_primary_constructor_error.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart
new file mode 100644
index 0000000..d4e81c4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart
@@ -0,0 +1,18 @@
+class C {
+  new ();
+  new () : x = 0;
+  new () {}
+  new () : x = 0 {}
+  const new ();
+  const new () : x = 0;
+  const new () {}
+  const new () : x = 0 {}
+  new named();
+  new named() : x = 0;
+  new named() {}
+  new named() : x = 0 {}
+  const new named();
+  const new named() : x = 0;
+  const new named() {}
+  const new named() : x = 0 {}
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.expect
new file mode 100644
index 0000000..8308cc2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.expect
@@ -0,0 +1,322 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType({)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, null, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, null, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 16, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.intertwined.expect
new file mode 100644
index 0000000..f4192f3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.intertwined.expect
@@ -0,0 +1,707 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType({)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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: endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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: endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 16, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.parser.expect
new file mode 100644
index 0000000..ef0d6d9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.parser.expect
@@ -0,0 +1,37 @@
+class C {
+new ();
+new () : x = 0;
+new () {}
+new () : x = 0 {}
+const new ();
+const new () : x = 0;
+const new () {}
+const new () : x = 0 {}
+new named();
+new named() : x = 0;
+new named() {}
+new named() : x = 0 {}
+const new named();
+const new named() : x = 0;
+const new named() {}
+const new named() : x = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.scanner.expect
new file mode 100644
index 0000000..ef0d6d9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head.dart.scanner.expect
@@ -0,0 +1,37 @@
+class C {
+new ();
+new () : x = 0;
+new () {}
+new () : x = 0 {}
+const new ();
+const new () : x = 0;
+const new () {}
+const new () : x = 0 {}
+new named();
+new named() : x = 0;
+new named() {}
+new named() : x = 0 {}
+const new named();
+const new named() : x = 0;
+const new named() {}
+const new named() : x = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart
new file mode 100644
index 0000000..1d3a4fa
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart
@@ -0,0 +1,6 @@
+class C {
+  new = 42;
+  new() = 42;
+  C() = C;
+  C.name() = C;
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.expect
new file mode 100644
index 0000000..1ee3835
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.expect
@@ -0,0 +1,187 @@
+Problems reported:
+
+parser/primary_constructors/constructor_head_error:2:3: A method declaration needs an explicit list of parameters.
+  new = 42;
+  ^^^
+
+parser/primary_constructors/constructor_head_error:2:7: Only factory constructor can specify '=' redirection.
+  new = 42;
+      ^
+
+parser/primary_constructors/constructor_head_error:2:9: Expected an identifier, but got '42'.
+  new = 42;
+        ^^
+
+parser/primary_constructors/constructor_head_error:2:7: Expected ';' after this.
+  new = 42;
+      ^
+
+parser/primary_constructors/constructor_head_error:2:9: Expected a class member, but got '42'.
+  new = 42;
+        ^^
+
+parser/primary_constructors/constructor_head_error:2:11: Expected a class member, but got ';'.
+  new = 42;
+          ^
+
+parser/primary_constructors/constructor_head_error:3:9: Only factory constructor can specify '=' redirection.
+  new() = 42;
+        ^
+
+parser/primary_constructors/constructor_head_error:3:11: Expected an identifier, but got '42'.
+  new() = 42;
+          ^^
+
+parser/primary_constructors/constructor_head_error:3:9: Expected ';' after this.
+  new() = 42;
+        ^
+
+parser/primary_constructors/constructor_head_error:3:11: Expected a class member, but got '42'.
+  new() = 42;
+          ^^
+
+parser/primary_constructors/constructor_head_error:3:13: Expected a class member, but got ';'.
+  new() = 42;
+            ^
+
+parser/primary_constructors/constructor_head_error:4:7: Only factory constructor can specify '=' redirection.
+  C() = C;
+      ^
+
+parser/primary_constructors/constructor_head_error:5:12: Only factory constructor can specify '=' redirection.
+  C.name() = C;
+           ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType({)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}], 42, 42)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(42)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(42)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '42'., null, {lexeme: 42}], 42, 42)
+          handleInvalidMember(42)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}], 42, 42)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(42)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(42)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '42'., null, {lexeme: 42}], 42, 42)
+          handleInvalidMember(42)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
+        endMember()
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.intertwined.expect
new file mode 100644
index 0000000..c9c3c8d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.intertwined.expect
@@ -0,0 +1,258 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType({)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}], messageOnToken: null)
+                        reportRecoverableError(42, Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}], 42, 42)
+                        rewriter()
+                      listener: handleIdentifier(, constructorReference)
+                    listener: beginConstructorReference()
+                    parseQualifiedRestOpt(, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(42)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 42)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(42)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(42, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '42'., null, {lexeme: 42}], 42, 42)
+                listener: handleInvalidMember(42)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ;)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(42, DeclarationKind.Class, C)
+              parseMetadataStar(42)
+                listener: beginMetadataStar(;)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(42, 42, null, null, null, null, null, null, null, 42, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}], messageOnToken: null)
+                        reportRecoverableError(42, Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '42'., Try inserting an identifier before '42'., {lexeme: 42}], 42, 42)
+                        rewriter()
+                      listener: handleIdentifier(, constructorReference)
+                    listener: beginConstructorReference()
+                    parseQualifiedRestOpt(, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(42)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 42)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(42)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(42, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '42'., null, {lexeme: 42}], 42, 42)
+                listener: handleInvalidMember(42)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ;)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(42, DeclarationKind.Class, C)
+              parseMetadataStar(42)
+                listener: beginMetadataStar(;)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(42, 42, null, null, null, null, null, null, null, 42, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, 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())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(.)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(name, C, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(name, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.parser.expect
new file mode 100644
index 0000000..81454ba
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.parser.expect
@@ -0,0 +1,15 @@
+NOTICE: Stream was rewritten by parser!
+
+class C {
+new ()= *synthetic*;42;
+new() = *synthetic*;42;
+C() = C;
+C.name() = C;
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]42[StringToken];[SimpleToken]
+new[KeywordToken]([BeginToken])[SimpleToken] =[SimpleToken] [SyntheticStringToken];[SyntheticToken]42[StringToken];[SimpleToken]
+C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.scanner.expect
new file mode 100644
index 0000000..a38dd62
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_error.dart.scanner.expect
@@ -0,0 +1,13 @@
+class C {
+new = 42;
+new() = 42;
+C() = C;
+C.name() = C;
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+new[KeywordToken]([BeginToken])[SimpleToken] =[SimpleToken] 42[StringToken];[SimpleToken]
+C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart
new file mode 100644
index 0000000..81c88bb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart
@@ -0,0 +1,20 @@
+// @dart=3.10
+
+class C {
+  new ();
+  new () : x = 0;
+  new () {}
+  new () : x = 0 {}
+  const new ();
+  const new () : x = 0;
+  const new () {}
+  const new () : x = 0 {}
+  new named();
+  new named() : x = 0;
+  new named() {}
+  new named() : x = 0 {}
+  const new named();
+  const new named() : x = 0;
+  const new named() {}
+  const new named() : x = 0 {}
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.expect
new file mode 100644
index 0000000..04de931
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.expect
@@ -0,0 +1,404 @@
+Problems reported:
+
+parser/primary_constructors/constructor_head_pre_feature:4:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new ();
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:5:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new () : x = 0;
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:6:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new () {}
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:7:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new () : x = 0 {}
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:8:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new ();
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:9:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new () : x = 0;
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:10:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new () {}
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:11:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new () : x = 0 {}
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:12:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new named();
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:13:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new named() : x = 0;
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:14:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new named() {}
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:15:3: This requires the experimental 'primary-constructors' language feature to be enabled.
+  new named() : x = 0 {}
+  ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:16:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new named();
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:17:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new named() : x = 0;
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:18:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new named() {}
+        ^^^
+
+parser/primary_constructors/constructor_head_pre_feature:19:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+  const new named() : x = 0 {}
+        ^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType({)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, null, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, null, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(x)
+                handleIdentifier(x, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 16, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.intertwined.expect
new file mode 100644
index 0000000..2dd2795
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.intertwined.expect
@@ -0,0 +1,739 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType({)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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: endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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: endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+                listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, new, new)
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(x)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest(x)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(x, x)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 16, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.parser.expect
new file mode 100644
index 0000000..ef0d6d9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.parser.expect
@@ -0,0 +1,37 @@
+class C {
+new ();
+new () : x = 0;
+new () {}
+new () : x = 0 {}
+const new ();
+const new () : x = 0;
+const new () {}
+const new () : x = 0 {}
+new named();
+new named() : x = 0;
+new named() {}
+new named() : x = 0 {}
+const new named();
+const new named() : x = 0;
+const new named() {}
+const new named() : x = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.scanner.expect
new file mode 100644
index 0000000..ef0d6d9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/constructor_head_pre_feature.dart.scanner.expect
@@ -0,0 +1,37 @@
+class C {
+new ();
+new () : x = 0;
+new () {}
+new () : x = 0 {}
+const new ();
+const new () : x = 0;
+const new () {}
+const new () : x = 0 {}
+new named();
+new named() : x = 0;
+new named() {}
+new named() : x = 0 {}
+const new named();
+const new named() : x = 0;
+const new named() {}
+const new named() : x = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] ([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart
diff --git a/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.expect
new file mode 100644
index 0000000..98f4015
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.expect
@@ -0,0 +1,1125 @@
+Problems reported:
+
+parser/primary_constructors/declaring_parameter_error:1:3: Variables can't be declared using both 'var' and a type name.
+m(var a b) {}
+  ^^^
+
+parser/primary_constructors/declaring_parameter_error:4:5: Variables can't be declared using both 'var' and a type name.
+  C(var a b) {}
+    ^^^
+
+parser/primary_constructors/declaring_parameter_error:7:9: Can't have modifier 'covariant' in a primary constructor.
+class C(covariant a) {}
+        ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:8:9: Can't have modifier 'covariant' in a primary constructor.
+class C(covariant a b) {}
+        ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:9:9: Can't have modifier 'covariant' in a primary constructor.
+class C(covariant var a) {}
+        ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:10:9: Can't have modifier 'covariant' in a primary constructor.
+class C(covariant final a) {}
+        ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:11:9: Can't have modifier 'covariant' in a primary constructor.
+class C(covariant var a b) {}
+        ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:12:9: Can't have modifier 'covariant' in a primary constructor.
+class C(covariant final a b) {}
+        ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:13:9: Can't have modifier 'const' here.
+class C(const f()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:14:9: Can't have modifier 'const' here.
+class C(const f<T>()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:15:9: Can't have modifier 'const' here.
+class C(const void f()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:16:9: Can't have modifier 'const' here.
+class C(const void f<T>()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:18:8: Can't have modifier 'covariant' in a primary constructor.
+enum E(covariant a) {}
+       ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:19:8: Can't have modifier 'covariant' in a primary constructor.
+enum E(covariant a b) {}
+       ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:20:8: Can't have modifier 'covariant' in a primary constructor.
+enum E(covariant var a) {}
+       ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:21:8: Can't have modifier 'covariant' in a primary constructor.
+enum E(covariant final a) {}
+       ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:22:8: Can't have modifier 'covariant' in a primary constructor.
+enum E(covariant var a b) {}
+       ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:23:8: Can't have modifier 'covariant' in a primary constructor.
+enum E(covariant final a b) {}
+       ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:24:8: Can't have modifier 'const' here.
+enum E(const f()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:25:8: Can't have modifier 'const' here.
+enum E(const f<T>()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:26:8: Can't have modifier 'const' here.
+enum E(const void f()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:27:8: Can't have modifier 'const' here.
+enum E(const void f<T>()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:30:6: Variables can't be declared using both 'var' and a type name.
+  ET(var a b) {}
+     ^^^
+
+parser/primary_constructors/declaring_parameter_error:33:19: Can't have modifier 'covariant' in a primary constructor.
+extension type ET(covariant a) {}
+                  ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:34:19: Can't have modifier 'covariant' in a primary constructor.
+extension type ET(covariant a b) {}
+                  ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:35:19: Can't have modifier 'covariant' in a primary constructor.
+extension type ET(covariant var a) {}
+                  ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:36:19: Can't have modifier 'covariant' in a primary constructor.
+extension type ET(covariant final a) {}
+                  ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:37:19: Can't have modifier 'covariant' in a primary constructor.
+extension type ET(covariant var a b) {}
+                  ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:38:19: Can't have modifier 'covariant' in a primary constructor.
+extension type ET(covariant final a b) {}
+                  ^^^^^^^^^
+
+parser/primary_constructors/declaring_parameter_error:39:19: Can't have modifier 'const' here.
+extension type ET(const f()) {}
+                  ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:40:19: Can't have modifier 'const' here.
+extension type ET(const f<T>()) {}
+                  ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:41:19: Can't have modifier 'const' here.
+extension type ET(const void f()) {}
+                  ^^^^^
+
+parser/primary_constructors/declaring_parameter_error:42:19: Can't have modifier 'const' here.
+extension type ET(const void f<T>()) {}
+                  ^^^^^
+
+beginCompilationUnit(m)
+  beginMetadataStar(m)
+  endMetadataStar(0)
+  beginTopLevelMember(m)
+    beginTopLevelMethod(, null, null)
+      handleNoType()
+      handleIdentifier(m, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        beginFormalParameter(var, MemberKind.TopLevelMethod, null, null, var)
+          handleRecoverableError(TypeAfterVar, var, var)
+          handleIdentifier(a, typeReference)
+          handleNoTypeArguments(b)
+          handleType(a, null)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(m, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(C)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              beginFormalParameter(var, MemberKind.NonStaticMethod, null, null, var)
+                handleRecoverableError(TypeAfterVar, var, var)
+                handleIdentifier(a, typeReference)
+                handleNoTypeArguments(b)
+                handleType(a, null)
+                handleIdentifier(b, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, C, null, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+            handleNoType(covariant)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+            handleNoType(covariant)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(ET)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, ET, ET)
+            handleNoType({)
+            handleIdentifier(ET, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              beginFormalParameter(var, MemberKind.ExtensionTypeNonStaticMethod, null, null, var)
+                handleRecoverableError(TypeAfterVar, var, var)
+                handleIdentifier(a, typeReference)
+                handleNoTypeArguments(b)
+                handleType(a, null)
+                handleIdentifier(b, formalParameterDeclaration)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.ExtensionType, ET, null, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+            handleNoType(covariant)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(covariant)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+          beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(const)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(const)
+          endMetadataStar(0)
+          handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+          beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.intertwined.expect
new file mode 100644
index 0000000..c7e1b0c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.intertwined.expect
@@ -0,0 +1,1596 @@
+parseUnit(m)
+  skipErrorTokens(m)
+  listener: beginCompilationUnit(m)
+  syntheticPreviousToken(m)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(m)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(m)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , NoType(), null, m, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(m, topLevelFunctionDeclaration)
+        parseMethodTypeVar(m)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(m, m, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(m, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.TopLevelMethod, null, null, var)
+                reportRecoverableError(var, TypeAfterVar)
+                  listener: handleRecoverableError(TypeAfterVar, var, var)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrType(CLOSE_CURLY_BRACKET, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(m, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, C)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(C)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, 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.requiredPositional, MemberKind.NonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(var)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(var, MemberKind.NonStaticMethod, null, null, var)
+                        reportRecoverableError(var, TypeAfterVar)
+                          listener: handleRecoverableError(TypeAfterVar, var, var)
+                        listener: handleIdentifier(a, typeReference)
+                        listener: handleNoTypeArguments(b)
+                        listener: handleType(a, null)
+                        ensureIdentifier(a, formalParameterDeclaration)
+                          listener: handleIdentifier(b, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+                  listener: handleNoType(covariant)
+                  ensureIdentifier(covariant, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+                  listener: handleNoType(var)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+                  listener: handleNoType(final)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(covariant)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+                listener: handleNoType(covariant)
+                ensureIdentifier(covariant, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(covariant)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(covariant)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+                listener: handleNoType(var)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(covariant)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+                listener: handleNoType(final)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(covariant)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(covariant)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(const)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(const, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(const)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(const, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(const)
+                  listener: endMetadataStar(0)
+                reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                  listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, ET)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, ET)
+              parseMetadataStar({)
+                listener: beginMetadataStar(ET)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              isReservedKeyword(()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, ET, DeclarationKind.ExtensionType, ET, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, ET, ET)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  listener: handleIdentifier(ET, methodDeclaration)
+                parseQualifiedRestOpt(ET, methodDeclarationContinuation)
+                parseMethodTypeVar(ET)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(ET, ET, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(ET, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(var)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(var, MemberKind.ExtensionTypeNonStaticMethod, null, null, var)
+                        reportRecoverableError(var, TypeAfterVar)
+                          listener: handleRecoverableError(TypeAfterVar, var, var)
+                        listener: handleIdentifier(a, typeReference)
+                        listener: handleNoTypeArguments(b)
+                        listener: handleType(a, null)
+                        ensureIdentifier(a, formalParameterDeclaration)
+                          listener: handleIdentifier(b, formalParameterDeclaration)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.ExtensionType, ET, null, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+                  listener: handleNoType(covariant)
+                  ensureIdentifier(covariant, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, null)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+                  listener: handleNoType(var)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+                  listener: handleNoType(final)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, var)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(covariant)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(covariant, Template(ExtraneousModifierInPrimaryConstructor))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifierInPrimaryConstructor), Can't have modifier 'covariant' in a primary constructor., Try removing 'covariant'., {lexeme: covariant}], covariant, covariant)
+                  listener: beginFormalParameter(covariant, MemberKind.PrimaryConstructor, null, covariant, final)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(const)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(const, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(const)
+                    listener: endMetadataStar(0)
+                  reportRecoverableErrorWithToken(const, Template(ExtraneousModifier))
+                    listener: handleRecoverableError(Message[Template(ExtraneousModifier), Can't have modifier 'const' here., Try removing 'const'., {lexeme: const}], const, const)
+                  listener: beginFormalParameter(const, MemberKind.PrimaryConstructor, null, null, const)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(m)
+  listener: endCompilationUnit(33, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/declaring_parameter_error.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_error.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart
new file mode 100644
index 0000000..4d13fec
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart
@@ -0,0 +1,48 @@
+// @dart=3.10
+class C() {}
+class C(a) {}
+class C(a b) {}
+class C(var a) {}
+class C(final a) {}
+class C(var a b) {}
+class C(final a b) {}
+class C(var f()) {}
+class C(final f()) {}
+class C(var void f()) {}
+class C(final void f()) {}
+class C(var f<T>()) {}
+class C(final f<T>()) {}
+class C(var void f<T>()) {}
+class C(final void f<T>()) {}
+
+enum E() {}
+enum E(a) {}
+enum E(a b) {}
+enum E(var a) {}
+enum E(final a) {}
+enum E(var a b) {}
+enum E(final a b) {}
+enum E(var f()) {}
+enum E(final f()) {}
+enum E(var void f()) {}
+enum E(final void f()) {}
+enum E(var f<T>()) {}
+enum E(final f<T>()) {}
+enum E(var void f<T>()) {}
+enum E(final void f<T>()) {}
+
+extension type ET() {}
+extension type ET(a) {}
+extension type ET(a b) {}
+extension type ET(var a) {}
+extension type ET(final a) {}
+extension type ET(var a b) {}
+extension type ET(final a b) {}
+extension type ET(var f()) {}
+extension type ET(final f()) {}
+extension type ET(var void f()) {}
+extension type ET(final void f()) {}
+extension type ET(var f<T>()) {}
+extension type ET(final f<T>()) {}
+extension type ET(var void f<T>()) {}
+extension type ET(final void f<T>()) {}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.expect
new file mode 100644
index 0000000..72d1b1e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.expect
@@ -0,0 +1,1462 @@
+Problems reported:
+
+parser/primary_constructors/declaring_parameter_pre_feature:7:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var a b) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:9:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var f()) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:10:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(final f()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:11:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var void f()) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:11:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var void f()) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:12:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(final void f()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:13:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var f<T>()) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:14:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(final f<T>()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:15:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var void f<T>()) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:15:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(var void f<T>()) {}
+        ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:16:9: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C(final void f<T>()) {}
+        ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:23:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var a b) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:25:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var f()) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:26:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(final f()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:27:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var void f()) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:27:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var void f()) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:28:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(final void f()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:29:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var f<T>()) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:30:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(final f<T>()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:31:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var void f<T>()) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:31:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(var void f<T>()) {}
+       ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:32:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+enum E(final void f<T>()) {}
+       ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:39:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var a b) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:41:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var f()) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:42:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(final f()) {}
+                  ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:43:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var void f()) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:43:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var void f()) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:44:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(final void f()) {}
+                  ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:45:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var f<T>()) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:46:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(final f<T>()) {}
+                  ^^^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:47:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var void f<T>()) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:47:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(var void f<T>()) {}
+                  ^^^
+
+parser/primary_constructors/declaring_parameter_pre_feature:48:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(final void f<T>()) {}
+                  ^^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleNoType(()
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleNoType(()
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleNoType(()
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(a)
+          endMetadataStar(0)
+          beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleNoType(var)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleNoType(final)
+            handleIdentifier(a, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleIdentifier(a, typeReference)
+            handleNoTypeArguments(b)
+            handleType(a, null)
+            handleIdentifier(b, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            handleNoTypeVariables(()
+            beginFunctionTypedFormalParameter(()
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(var)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleNoType(final)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(var)
+          endMetadataStar(0)
+          beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(final)
+          endMetadataStar(0)
+          beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+            handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+            beginTypeVariables(<)
+              beginMetadataStar(T)
+              endMetadataStar(0)
+              handleIdentifier(T, typeVariableDeclaration)
+              beginTypeVariable(T)
+                handleTypeVariablesDefined(T, 1)
+                handleNoType(T)
+              endTypeVariable(>, 0, null, null)
+            endTypeVariables(<, >)
+            beginFunctionTypedFormalParameter(<)
+              handleVoidKeyword(void)
+              beginFormalParameters((, MemberKind.FunctionTypedParameter)
+              endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+            endFunctionTypedFormalParameter(f, null)
+            handleIdentifier(f, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.intertwined.expect
new file mode 100644
index 0000000..42f2c2f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.intertwined.expect
@@ -0,0 +1,2094 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleNoType(()
+                  ensureIdentifier((, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoType(var)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoType(final)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, }, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.Class, C)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 0, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(a)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                listener: handleNoType(()
+                ensureIdentifier((, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(a)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                listener: handleNoType(var)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: handleNoType(final)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                listener: handleIdentifier(a, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(a, null)
+                ensureIdentifier(a, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(var)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleNoType(final)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                listener: handleNoTypeVariables(()
+                listener: beginFunctionTypedFormalParameter(()
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(var)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(var, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleNoType(final)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(final, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(var)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(enum, enumDeclaration)
+          listener: handleIdentifier(E, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E)
+        parsePrimaryConstructorOpt(E, null, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(final)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                listener: beginTypeVariables(<)
+                listener: beginMetadataStar(T)
+                listener: endMetadataStar(0)
+                listener: handleIdentifier(T, typeVariableDeclaration)
+                listener: beginTypeVariable(T)
+                listener: handleTypeVariablesDefined(T, 1)
+                listener: handleNoType(T)
+                listener: endTypeVariable(>, 0, null, null)
+                listener: endTypeVariables(<, >)
+                listener: beginFunctionTypedFormalParameter(<)
+                listener: handleVoidKeyword(void)
+                parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                  parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                    listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                    listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                listener: endFunctionTypedFormalParameter(f, null)
+                ensureIdentifier(void, formalParameterDeclaration)
+                  listener: handleIdentifier(f, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, null, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        listener: handleEnumElements(}, 0)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleNoType(()
+                  ensureIdentifier((, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(a)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(a, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  listener: handleNoType(var)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleNoType(final)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(a, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  listener: handleIdentifier(a, typeReference)
+                  listener: handleNoTypeArguments(b)
+                  listener: handleType(a, null)
+                  ensureIdentifier(a, formalParameterDeclaration)
+                    listener: handleIdentifier(b, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: handleNoTypeVariables(()
+                  listener: beginFunctionTypedFormalParameter(()
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(f, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(var)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(var, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleNoType(final)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(final, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(var)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(var, MemberKind.PrimaryConstructor, null, null, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, var, var)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(var, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(final)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(final, MemberKind.PrimaryConstructor, null, null, final)
+                  reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                    listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, final, final)
+                  listener: beginTypeVariables(<)
+                  listener: beginMetadataStar(T)
+                  listener: endMetadataStar(0)
+                  listener: handleIdentifier(T, typeVariableDeclaration)
+                  listener: beginTypeVariable(T)
+                  listener: handleTypeVariablesDefined(T, 1)
+                  listener: handleNoType(T)
+                  listener: endTypeVariable(>, 0, null, null)
+                  listener: endTypeVariables(<, >)
+                  listener: beginFunctionTypedFormalParameter(<)
+                  listener: handleVoidKeyword(void)
+                  parseFormalParametersRequiredOpt(>, MemberKind.FunctionTypedParameter)
+                    parseFormalParametersRest((, MemberKind.FunctionTypedParameter)
+                      listener: beginFormalParameters((, MemberKind.FunctionTypedParameter)
+                      listener: endFormalParameters(0, (, ), MemberKind.FunctionTypedParameter)
+                  listener: endFunctionTypedFormalParameter(f, null)
+                  ensureIdentifier(void, formalParameterDeclaration)
+                    listener: handleIdentifier(f, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(final, null, null, null, f, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, ET)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(45, )
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/general/declaring_parameter_pre_feature.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/declaring_parameter_pre_feature.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart
new file mode 100644
index 0000000..c0f080a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart
@@ -0,0 +1,19 @@
+enum const E1() {
+  e;
+  this {}
+}
+
+enum const E2() {
+  e;
+  this : assert(1 > 2) {}
+}
+
+enum const E3() {
+  e;
+  this;
+}
+
+enum const E4() {
+  e;
+  this : assert(1 > 2);
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.expect
new file mode 100644
index 0000000..177aac5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.expect
@@ -0,0 +1,170 @@
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E1, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E1)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(e)
+        endMetadataStar(0)
+        handleIdentifier(e, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(;)
+        beginConstructorReference(e)
+          handleNoTypeArguments(;)
+          handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+        endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+        handleNoArguments(e)
+        handleEnumElement({, null)
+        handleEnumElements(;, 1)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endPrimaryConstructorBody(this, this, })
+        endMember()
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 1, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E2, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E2)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(e)
+        endMetadataStar(0)
+        handleIdentifier(e, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(;)
+        beginConstructorReference(e)
+          handleNoTypeArguments(;)
+          handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+        endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+        handleNoArguments(e)
+        handleEnumElement({, null)
+        handleEnumElements(;, 1)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endPrimaryConstructorBody(this, this, })
+        endMember()
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 1, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E3, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E3)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(e)
+        endMetadataStar(0)
+        handleIdentifier(e, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(;)
+        beginConstructorReference(e)
+          handleNoTypeArguments(;)
+          handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+        endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+        handleNoArguments(e)
+        handleEnumElement({, null)
+        handleEnumElements(;, 1)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endPrimaryConstructorBody(this, this, ;)
+        endMember()
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 1, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E4, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E4)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(e)
+        endMetadataStar(0)
+        handleIdentifier(e, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(;)
+        beginConstructorReference(e)
+          handleNoTypeArguments(;)
+          handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+        endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+        handleNoArguments(e)
+        handleEnumElement({, null)
+        handleEnumElements(;, 1)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endPrimaryConstructorBody(this, this, ;)
+        endMember()
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 1, })
+  endTopLevelDeclaration(})
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.intertwined.expect
new file mode 100644
index 0000000..86fadf0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.intertwined.expect
@@ -0,0 +1,300 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, , enum, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E1, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E1)
+        parsePrimaryConstructorOpt(E1, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E1, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(e)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(e, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(;)
+          listener: beginConstructorReference(e)
+          listener: handleNoTypeArguments(;)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+          listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(e)
+          listener: handleEnumElement({, null)
+        listener: handleEnumElements(;, 1)
+        notEofOrType(CLOSE_CURLY_BRACKET, this)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E1)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parsePrimaryConstructorBody(this)
+            listener: beginPrimaryConstructorBody(this)
+            parseInitializersOpt(this)
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt(this)
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(this, false, true)
+              listener: beginBlockFunctionBody({)
+              notEofOrType(CLOSE_CURLY_BRACKET, })
+              listener: endBlockFunctionBody(0, {, })
+            listener: endPrimaryConstructorBody(this, this, })
+          listener: endMember()
+        notEofOrType(CLOSE_CURLY_BRACKET, })
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 1, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E2, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E2)
+        parsePrimaryConstructorOpt(E2, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E2, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(e)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(e, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(;)
+          listener: beginConstructorReference(e)
+          listener: handleNoTypeArguments(;)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+          listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(e)
+          listener: handleEnumElement({, null)
+        listener: handleEnumElements(;, 1)
+        notEofOrType(CLOSE_CURLY_BRACKET, this)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E2)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parsePrimaryConstructorBody(this)
+            listener: beginPrimaryConstructorBody(this)
+            parseInitializersOpt(this)
+              parseInitializers(:)
+                listener: beginInitializers(:)
+                parseInitializer(:)
+                  listener: beginInitializer(assert)
+                  parseAssert(:, Assert.Initializer)
+                    listener: beginAssert(assert, Assert.Initializer)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseLiteralInt(()
+                              listener: handleLiteralInt(1)
+                        listener: beginBinaryExpression(>)
+                        parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                          parseUnaryExpression(>, true, ConstantPatternContext.none)
+                            parsePrimary(>, expression, ConstantPatternContext.none)
+                              parseLiteralInt(>)
+                                listener: handleLiteralInt(2)
+                        listener: endBinaryExpression(>, 2)
+                    listener: endAssert(assert, Assert.Initializer, (, null, ))
+                  listener: endInitializer())
+                listener: endInitializers(1, :, ))
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: beginBlockFunctionBody({)
+              notEofOrType(CLOSE_CURLY_BRACKET, })
+              listener: endBlockFunctionBody(0, {, })
+            listener: endPrimaryConstructorBody(this, this, })
+          listener: endMember()
+        notEofOrType(CLOSE_CURLY_BRACKET, })
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 1, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E3, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E3)
+        parsePrimaryConstructorOpt(E3, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E3, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(e)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(e, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(;)
+          listener: beginConstructorReference(e)
+          listener: handleNoTypeArguments(;)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+          listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(e)
+          listener: handleEnumElement({, null)
+        listener: handleEnumElements(;, 1)
+        notEofOrType(CLOSE_CURLY_BRACKET, this)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E3)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parsePrimaryConstructorBody(this)
+            listener: beginPrimaryConstructorBody(this)
+            parseInitializersOpt(this)
+              listener: handleNoInitializers()
+            parseAsyncModifierOpt(this)
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(this, false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endPrimaryConstructorBody(this, this, ;)
+          listener: endMember()
+        notEofOrType(CLOSE_CURLY_BRACKET, })
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 1, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E4, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E4)
+        parsePrimaryConstructorOpt(E4, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E4, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(e)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            listener: handleIdentifier(e, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(;)
+          listener: beginConstructorReference(e)
+          listener: handleNoTypeArguments(;)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(e)
+          listener: endConstructorReference(e, null, e, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(e)
+          listener: handleEnumElement({, null)
+        listener: handleEnumElements(;, 1)
+        notEofOrType(CLOSE_CURLY_BRACKET, this)
+        parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Enum, E4)
+          parseMetadataStar(;)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          listener: beginMember()
+          parsePrimaryConstructorBody(this)
+            listener: beginPrimaryConstructorBody(this)
+            parseInitializersOpt(this)
+              parseInitializers(:)
+                listener: beginInitializers(:)
+                parseInitializer(:)
+                  listener: beginInitializer(assert)
+                  parseAssert(:, Assert.Initializer)
+                    listener: beginAssert(assert, Assert.Initializer)
+                    parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                      parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression((, true, ConstantPatternContext.none)
+                          parsePrimary((, expression, ConstantPatternContext.none)
+                            parseLiteralInt(()
+                              listener: handleLiteralInt(1)
+                        listener: beginBinaryExpression(>)
+                        parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                          parseUnaryExpression(>, true, ConstantPatternContext.none)
+                            parsePrimary(>, expression, ConstantPatternContext.none)
+                              parseLiteralInt(>)
+                                listener: handleLiteralInt(2)
+                        listener: endBinaryExpression(>, 2)
+                    listener: endAssert(assert, Assert.Initializer, (, null, ))
+                  listener: endInitializer())
+                listener: endInitializers(1, :, ))
+            parseAsyncModifierOpt())
+              listener: handleAsyncModifier(null, null)
+              inPlainSync()
+            inPlainSync()
+            parseFunctionBody(), false, true)
+              listener: handleEmptyFunctionBody(;)
+            listener: endPrimaryConstructorBody(this, this, ;)
+          listener: endMember()
+        notEofOrType(CLOSE_CURLY_BRACKET, })
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 1, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.parser.expect
new file mode 100644
index 0000000..b4e1efd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.parser.expect
@@ -0,0 +1,41 @@
+enum const E1() {
+e;
+this {}
+}
+
+enum const E2() {
+e;
+this : assert(1 > 2) {}
+}
+
+enum const E3() {
+e;
+this;
+}
+
+enum const E4() {
+e;
+this : assert(1 > 2);
+}
+
+
+enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.scanner.expect
new file mode 100644
index 0000000..b4e1efd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body.dart.scanner.expect
@@ -0,0 +1,41 @@
+enum const E1() {
+e;
+this {}
+}
+
+enum const E2() {
+e;
+this : assert(1 > 2) {}
+}
+
+enum const E3() {
+e;
+this;
+}
+
+enum const E4() {
+e;
+this : assert(1 > 2);
+}
+
+
+enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+e[StringToken];[SimpleToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart
new file mode 100644
index 0000000..9853cc7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart
@@ -0,0 +1,23 @@
+enum const E1() {
+  this() {}
+}
+
+enum const E2() {
+  this(int x) : assert(1 > 2) {}
+}
+
+enum const E3() {
+  this();
+}
+
+enum const E4() {
+  this(int x) : assert(1 > 2);
+}
+
+enum const E5() { // missing constants
+  this : assert(1 > 2);
+}
+
+enum const E6() { // missing constants
+  this {}
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.expect
new file mode 100644
index 0000000..4cea20e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.expect
@@ -0,0 +1,257 @@
+Problems reported:
+
+parser/primary_constructors/enum_primary_constructor_body_error:2:3: 'this' can't be used as an identifier because it's a keyword.
+  this() {}
+  ^^^^
+
+parser/primary_constructors/enum_primary_constructor_body_error:2:10: Expected '}' before this.
+  this() {}
+         ^
+
+parser/primary_constructors/enum_primary_constructor_body_error:6:3: 'this' can't be used as an identifier because it's a keyword.
+  this(int x) : assert(1 > 2) {}
+  ^^^^
+
+parser/primary_constructors/enum_primary_constructor_body_error:6:12: Expected ',' before this.
+  this(int x) : assert(1 > 2) {}
+           ^
+
+parser/primary_constructors/enum_primary_constructor_body_error:6:15: Expected '}' before this.
+  this(int x) : assert(1 > 2) {}
+              ^
+
+parser/primary_constructors/enum_primary_constructor_body_error:10:3: 'this' can't be used as an identifier because it's a keyword.
+  this();
+  ^^^^
+
+parser/primary_constructors/enum_primary_constructor_body_error:14:3: 'this' can't be used as an identifier because it's a keyword.
+  this(int x) : assert(1 > 2);
+  ^^^^
+
+parser/primary_constructors/enum_primary_constructor_body_error:14:12: Expected ',' before this.
+  this(int x) : assert(1 > 2);
+           ^
+
+parser/primary_constructors/enum_primary_constructor_body_error:14:15: Expected '}' before this.
+  this(int x) : assert(1 > 2);
+              ^
+
+parser/primary_constructors/enum_primary_constructor_body_error:18:3: 'this' can't be used as an identifier because it's a keyword.
+  this : assert(1 > 2);
+  ^^^^
+
+parser/primary_constructors/enum_primary_constructor_body_error:18:8: Expected '}' before this.
+  this : assert(1 > 2);
+       ^
+
+parser/primary_constructors/enum_primary_constructor_body_error:22:3: 'this' can't be used as an identifier because it's a keyword.
+  this {}
+  ^^^^
+
+parser/primary_constructors/enum_primary_constructor_body_error:22:8: Expected '}' before this.
+  this {}
+       ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E1, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E1)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        handleRecoverableError(Message[Template(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, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(()
+        beginConstructorReference(this)
+          handleNoTypeArguments(()
+          handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+        endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+        beginArguments(()
+        endArguments(0, (, ))
+        handleEnumElement({, null)
+        handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
+        handleEnumElements(}, 1)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E2, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E2)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        handleRecoverableError(Message[Template(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, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(()
+        beginConstructorReference(this)
+          handleNoTypeArguments(()
+          handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+        endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+        beginArguments(()
+          handleIdentifier(int, expression)
+          handleNoTypeArguments(x)
+          handleNoArguments(x)
+          handleSend(int, int)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(x, x)
+        endArguments(2, (, ))
+        handleEnumElement({, null)
+        handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
+        handleEnumElements(}, 1)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E3, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E3)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        handleRecoverableError(Message[Template(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, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(()
+        beginConstructorReference(this)
+          handleNoTypeArguments(()
+          handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+        endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+        beginArguments(()
+        endArguments(0, (, ))
+        handleEnumElement({, null)
+        handleEnumElements(;, 1)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E4, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E4)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        handleRecoverableError(Message[Template(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, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(()
+        beginConstructorReference(this)
+          handleNoTypeArguments(()
+          handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+        endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+        beginArguments(()
+          handleIdentifier(int, expression)
+          handleNoTypeArguments(x)
+          handleNoArguments(x)
+          handleSend(int, int)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
+          handleIdentifier(x, expression)
+          handleNoTypeArguments())
+          handleNoArguments())
+          handleSend(x, x)
+        endArguments(2, (, ))
+        handleEnumElement({, null)
+        handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
+        handleEnumElements(}, 1)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E5, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E5)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        handleRecoverableError(Message[Template(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, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference(:)
+        beginConstructorReference(this)
+          handleNoTypeArguments(:)
+          handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+        endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+        handleNoArguments(this)
+        handleEnumElement({, null)
+        handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
+        handleEnumElements(}, 1)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E6, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E6)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        handleRecoverableError(Message[Template(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, enumValueDeclaration)
+        handleNoTypeNameInConstructorReference({)
+        beginConstructorReference(this)
+          handleNoTypeArguments({)
+          handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+        endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+        handleNoArguments(this)
+        handleEnumElement({, null)
+        handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
+        handleEnumElements(}, 1)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.intertwined.expect
new file mode 100644
index 0000000..447685c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.intertwined.expect
@@ -0,0 +1,343 @@
+parseUnit(enum)
+  skipErrorTokens(enum)
+  listener: beginCompilationUnit(enum)
+  syntheticPreviousToken(enum)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, , enum, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E1, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E1)
+        parsePrimaryConstructorOpt(E1, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E1, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+              listener: handleRecoverableError(Message[Template(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, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(()
+          listener: beginConstructorReference(this)
+          listener: handleNoTypeArguments(()
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+          listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(this)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({, null)
+        reportRecoverableError({, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+          listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
+        listener: handleEnumElements(}, 1)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E2, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E2)
+        parsePrimaryConstructorOpt(E2, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E2, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+              listener: handleRecoverableError(Message[Template(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, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(()
+          listener: beginConstructorReference(this)
+          listener: handleNoTypeArguments(()
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+          listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(this)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              allowedToShortcutParseExpression()
+              parseExpression(()
+                looksLikeOuterPatternEquals(()
+                  skipOuterPattern(()
+                    skipObjectPatternRest(int)
+                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                    parsePrimary((, expression, ConstantPatternContext.none)
+                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                        parseSend((, expression, ConstantPatternContext.none)
+                          ensureIdentifier((, expression)
+                            listener: handleIdentifier(int, expression)
+                          listener: handleNoTypeArguments(x)
+                          parseArgumentsOpt(int)
+                            listener: handleNoArguments(x)
+                          listener: handleSend(int, int)
+              rewriteAndRecover(int, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], ,)
+                reportRecoverableError(x, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}])
+                  listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
+                rewriter()
+              allowedToShortcutParseExpression()
+              listener: handleIdentifier(x, expression)
+              listener: handleNoTypeArguments())
+              listener: handleNoArguments())
+              listener: handleSend(x, x)
+              listener: endArguments(2, (, ))
+          listener: handleEnumElement({, null)
+        reportRecoverableError(:, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+          listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
+        listener: handleEnumElements(}, 1)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E3, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E3)
+        parsePrimaryConstructorOpt(E3, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E3, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+              listener: handleRecoverableError(Message[Template(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, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(()
+          listener: beginConstructorReference(this)
+          listener: handleNoTypeArguments(()
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+          listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(this)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              listener: endArguments(0, (, ))
+          listener: handleEnumElement({, null)
+        listener: handleEnumElements(;, 1)
+        notEofOrType(CLOSE_CURLY_BRACKET, })
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E4, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E4)
+        parsePrimaryConstructorOpt(E4, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E4, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+              listener: handleRecoverableError(Message[Template(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, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(()
+          listener: beginConstructorReference(this)
+          listener: handleNoTypeArguments(()
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+          listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+          parseConstructorInvocationArguments(this)
+            parseArgumentsRest(()
+              listener: beginArguments(()
+              allowedToShortcutParseExpression()
+              parseExpression(()
+                looksLikeOuterPatternEquals(()
+                  skipOuterPattern(()
+                    skipObjectPatternRest(int)
+                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                    parsePrimary((, expression, ConstantPatternContext.none)
+                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                        parseSend((, expression, ConstantPatternContext.none)
+                          ensureIdentifier((, expression)
+                            listener: handleIdentifier(int, expression)
+                          listener: handleNoTypeArguments(x)
+                          parseArgumentsOpt(int)
+                            listener: handleNoArguments(x)
+                          listener: handleSend(int, int)
+              rewriteAndRecover(int, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], ,)
+                reportRecoverableError(x, Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}])
+                  listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected ',' before this., null, {string: ,}], x, x)
+                rewriter()
+              allowedToShortcutParseExpression()
+              listener: handleIdentifier(x, expression)
+              listener: handleNoTypeArguments())
+              listener: handleNoArguments())
+              listener: handleSend(x, x)
+              listener: endArguments(2, (, ))
+          listener: handleEnumElement({, null)
+        reportRecoverableError(:, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+          listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
+        listener: handleEnumElements(}, 1)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E5, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E5)
+        parsePrimaryConstructorOpt(E5, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E5, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+              listener: handleRecoverableError(Message[Template(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, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference(:)
+          listener: beginConstructorReference(this)
+          listener: handleNoTypeArguments(:)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+          listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(this)
+          listener: handleEnumElement({, null)
+        reportRecoverableError(:, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+          listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], :, :)
+        listener: handleEnumElements(}, 1)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(enum)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(enum, }, enum, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseEnum(enum, null, enum)
+        listener: beginEnumDeclarationPrelude(enum)
+        ensureIdentifier(const, enumDeclaration)
+          listener: handleIdentifier(E6, enumDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginEnumDeclaration(enum, null, enum, E6)
+        parsePrimaryConstructorOpt(E6, const, false)
+          listener: beginPrimaryConstructor(()
+          parseFormalParameters(E6, MemberKind.PrimaryConstructor)
+            parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+              listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+              listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+          listener: endPrimaryConstructor((, const, false, false)
+        parseEnumHeaderOpt(), enum)
+          parseEnumWithClauseOpt())
+            listener: handleEnumNoWithClause()
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+        listener: handleEnumHeader(null, enum, {)
+        listener: beginEnumBody({)
+        parseEnumElement({)
+          parseMetadataStar({)
+            listener: beginMetadataStar(this)
+            listener: endMetadataStar(0)
+          ensureIdentifier({, enumValueDeclaration)
+            reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+              listener: handleRecoverableError(Message[Template(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, enumValueDeclaration)
+          listener: handleNoTypeNameInConstructorReference({)
+          listener: beginConstructorReference(this)
+          listener: handleNoTypeArguments({)
+          listener: handleNoConstructorReferenceContinuationAfterTypeArguments(this)
+          listener: endConstructorReference(this, null, this, ConstructorReferenceContext.Const)
+          listener: handleNoArguments(this)
+          listener: handleEnumElement({, null)
+        reportRecoverableError({, Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}])
+          listener: handleRecoverableError(Message[Template(ExpectedButGot), Expected '}' before this., null, {string: }}], {, {)
+        listener: handleEnumElements(}, 1)
+        listener: endEnumBody({, })
+        listener: endEnumDeclaration(enum, enum, {, 0, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(enum)
+  listener: endCompilationUnit(6, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.parser.expect
new file mode 100644
index 0000000..dae1e1f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.parser.expect
@@ -0,0 +1,51 @@
+NOTICE: Stream was rewritten by parser!
+
+enum const E1() {
+this() {}
+}
+
+enum const E2() {
+this(int ,x) : assert(1 > 2) {}
+}
+
+enum const E3() {
+this();
+}
+
+enum const E4() {
+this(int ,x) : assert(1 > 2);
+}
+
+enum const E5() {
+this : assert(1 > 2);
+}
+
+enum const E6() {
+this {}
+}
+
+
+enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] ,[SyntheticToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] ,[SyntheticToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E5[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E6[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.scanner.expect
new file mode 100644
index 0000000..a26c6e3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_body_error.dart.scanner.expect
@@ -0,0 +1,49 @@
+enum const E1() {
+this() {}
+}
+
+enum const E2() {
+this(int x) : assert(1 > 2) {}
+}
+
+enum const E3() {
+this();
+}
+
+enum const E4() {
+this(int x) : assert(1 > 2);
+}
+
+enum const E5() {
+this : assert(1 > 2);
+}
+
+enum const E6() {
+this {}
+}
+
+
+enum[KeywordToken] const[KeywordToken] E1[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E2[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E3[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E4[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E5[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+enum[KeywordToken] const[KeywordToken] E6[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart
diff --git a/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.expect
new file mode 100644
index 0000000..75455a8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.expect
@@ -0,0 +1,386 @@
+Problems reported:
+
+parser/primary_constructors/enum_primary_constructor_error:1:10: Named parameter lists cannot be empty.
+enum E( {}
+         ^
+
+parser/primary_constructors/enum_primary_constructor_error:2:1: Expected ')' before this.
+enum E) {}
+^^^^
+
+parser/primary_constructors/enum_primary_constructor_error:3:9: Expected an identifier, but got '{'.
+enum E. {}
+        ^
+
+parser/primary_constructors/enum_primary_constructor_error:4:8: Expected an identifier, but got '('.
+enum E.() {}
+       ^
+
+parser/primary_constructors/enum_primary_constructor_error:5:6: 'const' can only be used together with a primary constructor declaration.
+enum const E {}
+     ^^^^^
+
+parser/primary_constructors/enum_primary_constructor_error:6:13: Named parameter lists cannot be empty.
+enum E<T>( {}
+            ^
+
+parser/primary_constructors/enum_primary_constructor_error:7:1: Expected ')' before this.
+enum E<T>) {}
+^^^^
+
+parser/primary_constructors/enum_primary_constructor_error:8:6: 'const' can only be used together with a primary constructor declaration.
+enum const E<T> {}
+     ^^^^^
+
+parser/primary_constructors/enum_primary_constructor_error:9:12: Expected an identifier, but got '{'.
+enum E<T>. {}
+           ^
+
+parser/primary_constructors/enum_primary_constructor_error:10:11: Expected an identifier, but got '('.
+enum E<T>.() {}
+          ^
+
+parser/primary_constructors/enum_primary_constructor_error:11:18: Expected an identifier, but got '{'.
+enum const E<T>. {}
+                 ^
+
+parser/primary_constructors/enum_primary_constructor_error:12:17: Expected an identifier, but got '('.
+enum const E<T>.() {}
+                ^
+
+beginCompilationUnit(enum)
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(()
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginOptionalFormalParameters({)
+            handleRecoverableError(EmptyNamedParameterList, }, })
+            beginMetadataStar()
+            endMetadataStar(0)
+            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
+              handleNoType({)
+              handleIdentifier(, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(})
+            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
+          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], enum, enum)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(.)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables(.)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    handleNoTypeVariables({)
+    beginEnumDeclaration(enum, null, enum, E)
+      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
+      handleNoPrimaryConstructor(E, const, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginOptionalFormalParameters({)
+            handleRecoverableError(EmptyNamedParameterList, }, })
+            beginMetadataStar()
+            endMetadataStar(0)
+            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
+              handleNoType({)
+              handleIdentifier(, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(})
+            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
+          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], enum, enum)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      handleRecoverableError(ConstWithoutPrimaryConstructor, const, const)
+      handleNoPrimaryConstructor(>, const, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(enum)
+  endMetadataStar(0)
+  beginEnumDeclarationPrelude(enum)
+    handleIdentifier(E, enumDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginEnumDeclaration(enum, null, enum, E)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleEnumNoWithClause()
+      handleImplements(null, 0)
+      handleEnumHeader(null, enum, {)
+      beginEnumBody({)
+        handleEnumElements(}, 0)
+      endEnumBody({, })
+    endEnumDeclaration(enum, enum, {, 0, })
+  endTopLevelDeclaration(})
+endCompilationUnit(13, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/enum_primary_constructor_error.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/enum_primary_constructor_error.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart
new file mode 100644
index 0000000..634e4a6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart
@@ -0,0 +1,15 @@
+extension type E1(int x) {
+  this {}
+}
+
+extension type E2(int x) {
+  this : assert(1 > 2) {}
+}
+
+extension type E3(int x) {
+  this;
+}
+
+extension type E4(int x) {
+  this : assert(1 > 2);
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.expect
new file mode 100644
index 0000000..8c3ed0a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.expect
@@ -0,0 +1,150 @@
+beginCompilationUnit(extension)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E1)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endPrimaryConstructorBody(this, this, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E2)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endPrimaryConstructorBody(this, this, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E3)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endPrimaryConstructorBody(this, this, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E4)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginPrimaryConstructorBody(this)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endPrimaryConstructorBody(this, this, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.intertwined.expect
new file mode 100644
index 0000000..0476cda
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.intertwined.expect
@@ -0,0 +1,276 @@
+parseUnit(extension)
+  skipErrorTokens(extension)
+  listener: beginCompilationUnit(extension)
+  syntheticPreviousToken(extension)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, , extension, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E1)
+          parsePrimaryConstructorOpt(E1, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E1, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E1)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E1)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(this)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(this, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endPrimaryConstructorBody(this, this, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E2)
+          parsePrimaryConstructorOpt(E2, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E2, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E2)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E2)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endPrimaryConstructorBody(this, this, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E3)
+          parsePrimaryConstructorOpt(E3, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E3, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E3)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E3)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt(this)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(this, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endPrimaryConstructorBody(this, this, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E4)
+          parsePrimaryConstructorOpt(E4, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E4, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E4)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E4)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parsePrimaryConstructorBody(this)
+                listener: beginPrimaryConstructorBody(this)
+                parseInitializersOpt(this)
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endPrimaryConstructorBody(this, this, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(extension)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.parser.expect
new file mode 100644
index 0000000..7ea6456
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.parser.expect
@@ -0,0 +1,33 @@
+extension type E1(int x) {
+this {}
+}
+
+extension type E2(int x) {
+this : assert(1 > 2) {}
+}
+
+extension type E3(int x) {
+this;
+}
+
+extension type E4(int x) {
+this : assert(1 > 2);
+}
+
+
+extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.scanner.expect
new file mode 100644
index 0000000..7ea6456
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body.dart.scanner.expect
@@ -0,0 +1,33 @@
+extension type E1(int x) {
+this {}
+}
+
+extension type E2(int x) {
+this : assert(1 > 2) {}
+}
+
+extension type E3(int x) {
+this;
+}
+
+extension type E4(int x) {
+this : assert(1 > 2);
+}
+
+
+extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken];[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart
new file mode 100644
index 0000000..ef6f47b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart
@@ -0,0 +1,15 @@
+extension type E1(int x) {
+  this(this.x) {}
+}
+
+extension type E2(int x) {
+  this(this.x)  : assert(1 > 2) {}
+}
+
+extension type E3(int x) {
+  this(this.x) ;
+}
+
+extension type E4(int x) {
+  this(this.x)  : assert(1 > 2);
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.expect
new file mode 100644
index 0000000..4eb838a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.expect
@@ -0,0 +1,235 @@
+Problems reported:
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:2:3: 'this' can't be used as an identifier because it's a keyword.
+  this(this.x) {}
+  ^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:6:3: 'this' can't be used as an identifier because it's a keyword.
+  this(this.x)  : assert(1 > 2) {}
+  ^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:6:3: The name of a constructor must match the name of the enclosing class.
+  this(this.x)  : assert(1 > 2) {}
+  ^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:10:3: 'this' can't be used as an identifier because it's a keyword.
+  this(this.x) ;
+  ^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:10:3: Extension types can't declare abstract members.
+  this(this.x) ;
+  ^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:14:3: 'this' can't be used as an identifier because it's a keyword.
+  this(this.x)  : assert(1 > 2);
+  ^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_body_error:14:3: The name of a constructor must match the name of the enclosing class.
+  this(this.x)  : assert(1 > 2);
+  ^^^^
+
+beginCompilationUnit(extension)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E1)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E1)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+              beginMetadataStar(this)
+              endMetadataStar(0)
+              beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(x, fieldInitializer)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.ExtensionType, null, this, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E2)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, this, E2)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+              beginMetadataStar(this)
+              endMetadataStar(0)
+              beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(x, fieldInitializer)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+            handleRecoverableError(ConstructorWithWrongName, this, this)
+          endConstructor(DeclarationKind.ExtensionType, this, null, (, :, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E3)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E3)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+              beginMetadataStar(this)
+              endMetadataStar(0)
+              beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(x, fieldInitializer)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+            handleRecoverableError(ExtensionTypeDeclaresAbstractMember, this, this)
+          endMethod(DeclarationKind.ExtensionType, null, this, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E4)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(x)
+            handleType(int, null)
+            handleIdentifier(x, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, this, E4)
+            handleNoType({)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+              beginMetadataStar(this)
+              endMetadataStar(0)
+              beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                handleNoType(()
+                handleIdentifier(x, fieldInitializer)
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+            endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(assert)
+                beginAssert(assert, Assert.Initializer)
+                  handleLiteralInt(1)
+                  beginBinaryExpression(>)
+                    handleLiteralInt(2)
+                  endBinaryExpression(>, 2)
+                endAssert(assert, Assert.Initializer, (, null, ))
+              endInitializer())
+            endInitializers(1, :, ))
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+            handleRecoverableError(ConstructorWithWrongName, this, this)
+          endConstructor(DeclarationKind.ExtensionType, this, null, (, :, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.intertwined.expect
new file mode 100644
index 0000000..0d9374d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.intertwined.expect
@@ -0,0 +1,374 @@
+parseUnit(extension)
+  skipErrorTokens(extension)
+  listener: beginCompilationUnit(extension)
+  syntheticPreviousToken(extension)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, , extension, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E1)
+          parsePrimaryConstructorOpt(E1, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E1, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E1)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E1)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.ExtensionType, E1, false)
+                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E1)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(this)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier(., fieldInitializer)
+                          listener: handleIdentifier(x, fieldInitializer)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endMethod(DeclarationKind.ExtensionType, null, this, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E2)
+          parsePrimaryConstructorOpt(E2, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E2, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E2)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E2)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.ExtensionType, E2, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, this, E2)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(this)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier(., fieldInitializer)
+                          listener: handleIdentifier(x, fieldInitializer)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                reportRecoverableError(this, ConstructorWithWrongName)
+                  listener: handleRecoverableError(ConstructorWithWrongName, this, this)
+                listener: endConstructor(DeclarationKind.ExtensionType, this, null, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E3)
+          parsePrimaryConstructorOpt(E3, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E3, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E3)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E3)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.ExtensionType, E3, false)
+                listener: beginMethod(DeclarationKind.ExtensionType, null, null, null, null, null, null, this, E3)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(this)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier(., fieldInitializer)
+                          listener: handleIdentifier(x, fieldInitializer)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                reportRecoverableError(this, ExtensionTypeDeclaresAbstractMember)
+                  listener: handleRecoverableError(ExtensionTypeDeclaresAbstractMember, this, this)
+                listener: endMethod(DeclarationKind.ExtensionType, null, this, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, }, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, E4)
+          parsePrimaryConstructorOpt(E4, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(E4, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, 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, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          parseClassOrMixinOrExtensionBody(), DeclarationKind.ExtensionType, E4)
+            listener: beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.ExtensionType, E4)
+              parseMetadataStar({)
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, this, DeclarationKind.ExtensionType, E4, false)
+                listener: beginConstructor(DeclarationKind.ExtensionType, null, null, null, null, null, null, null, this, E4)
+                listener: handleNoType({)
+                ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                parseMethodTypeVar(this)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(this, this, false, MemberKind.ExtensionTypeNonStaticMethod)
+                  parseFormalParameters(this, MemberKind.ExtensionTypeNonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.ExtensionTypeNonStaticMethod)
+                      parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                        parseMetadataStar(()
+                          listener: beginMetadataStar(this)
+                          listener: endMetadataStar(0)
+                        listener: beginFormalParameter(this, MemberKind.ExtensionTypeNonStaticMethod, null, null, null)
+                        listener: handleNoType(()
+                        ensureIdentifier(., fieldInitializer)
+                          listener: handleIdentifier(x, fieldInitializer)
+                        listener: handleFormalParameterWithoutValue())
+                        listener: endFormalParameter(null, this, null, ., x, null, null, FormalParameterKind.requiredPositional, MemberKind.ExtensionTypeNonStaticMethod)
+                      listener: endFormalParameters(1, (, ), MemberKind.ExtensionTypeNonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(assert)
+                      parseAssert(:, Assert.Initializer)
+                        listener: beginAssert(assert, Assert.Initializer)
+                        parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
+                          parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression((, true, ConstantPatternContext.none)
+                              parsePrimary((, expression, ConstantPatternContext.none)
+                                parseLiteralInt(()
+                                  listener: handleLiteralInt(1)
+                            listener: beginBinaryExpression(>)
+                            parsePrecedenceExpression(>, 9, true, ConstantPatternContext.none)
+                              parseUnaryExpression(>, true, ConstantPatternContext.none)
+                                parsePrimary(>, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(>)
+                                    listener: handleLiteralInt(2)
+                            listener: endBinaryExpression(>, 2)
+                        listener: endAssert(assert, Assert.Initializer, (, null, ))
+                      listener: endInitializer())
+                    listener: endInitializers(1, :, ))
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                reportRecoverableError(this, ConstructorWithWrongName)
+                  listener: handleRecoverableError(ConstructorWithWrongName, this, this)
+                listener: endConstructor(DeclarationKind.ExtensionType, this, null, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 1, {, })
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(extension)
+  listener: endCompilationUnit(4, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.parser.expect
new file mode 100644
index 0000000..5246fe9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.parser.expect
@@ -0,0 +1,33 @@
+extension type E1(int x) {
+this(this.x) {}
+}
+
+extension type E2(int x) {
+this(this.x) : assert(1 > 2) {}
+}
+
+extension type E3(int x) {
+this(this.x) ;
+}
+
+extension type E4(int x) {
+this(this.x) : assert(1 > 2);
+}
+
+
+extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] ;[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.scanner.expect
new file mode 100644
index 0000000..5246fe9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_body_error.dart.scanner.expect
@@ -0,0 +1,33 @@
+extension type E1(int x) {
+this(this.x) {}
+}
+
+extension type E2(int x) {
+this(this.x) : assert(1 > 2) {}
+}
+
+extension type E3(int x) {
+this(this.x) ;
+}
+
+extension type E4(int x) {
+this(this.x) : assert(1 > 2);
+}
+
+
+extension[KeywordToken] type[StringToken] E1[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E2[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E3[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] ;[SimpleToken]
+}[SimpleToken]
+
+extension[KeywordToken] type[StringToken] E4[StringToken]([BeginToken]int[StringToken] x[StringToken])[SimpleToken] {[BeginToken]
+this[KeywordToken]([BeginToken]this[KeywordToken].[SimpleToken]x[StringToken])[SimpleToken] :[SimpleToken] assert[KeywordToken]([BeginToken]1[StringToken] >[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart
diff --git a/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.expect
new file mode 100644
index 0000000..5e4fcda
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.expect
@@ -0,0 +1,359 @@
+Problems reported:
+
+parser/primary_constructors/extension_type_primary_constructor_error:1:20: Named parameter lists cannot be empty.
+extension type E( {}
+                   ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:2:1: Expected ')' before this.
+extension type E) {}
+^^^^^^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_error:3:19: Expected an identifier, but got '{'.
+extension type E. {}
+                  ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:3:19: A primary constructor declaration must have formal parameters.
+extension type E. {}
+                  ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:4:18: Expected an identifier, but got '('.
+extension type E.() {}
+                 ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:5:22: An extension type declaration must have a primary constructor declaration.
+extension type const E {}
+                     ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:6:23: Named parameter lists cannot be empty.
+extension type E<T>( {}
+                      ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:7:1: Expected ')' before this.
+extension type E<T>) {}
+^^^^^^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_error:8:25: An extension type declaration must have a primary constructor declaration.
+extension type const E<T> {}
+                        ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:9:22: Expected an identifier, but got '{'.
+extension type E<T>. {}
+                     ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:9:22: A primary constructor declaration must have formal parameters.
+extension type E<T>. {}
+                     ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:10:21: Expected an identifier, but got '('.
+extension type E<T>.() {}
+                    ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:11:28: Expected an identifier, but got '{'.
+extension type const E<T>. {}
+                           ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:11:28: A primary constructor declaration must have formal parameters.
+extension type const E<T>. {}
+                           ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:12:27: Expected an identifier, but got '('.
+extension type const E<T>.() {}
+                          ^
+
+parser/primary_constructors/extension_type_primary_constructor_error:13:21: A primary constructor declaration must have formal parameters.
+extension type E<T>.named {}
+                    ^^^^^
+
+parser/primary_constructors/extension_type_primary_constructor_error:15:27: A primary constructor declaration must have formal parameters.
+extension type const E<T>.named {}
+                          ^^^^^
+
+beginCompilationUnit(extension)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginOptionalFormalParameters({)
+            handleRecoverableError(EmptyNamedParameterList, }, })
+            beginMetadataStar()
+            endMetadataStar(0)
+            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
+              handleNoType({)
+              handleIdentifier(, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(})
+            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
+          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], extension, extension)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleRecoverableError(MissingPrimaryConstructorParameters, {, {)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables({)
+    beginExtensionTypeDeclaration(null, extension, E)
+      handleRecoverableError(MissingPrimaryConstructor, E, E)
+      handleNoPrimaryConstructor(E, const, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginOptionalFormalParameters({)
+            handleRecoverableError(EmptyNamedParameterList, }, })
+            beginMetadataStar()
+            endMetadataStar(0)
+            beginFormalParameter(, MemberKind.PrimaryConstructor, null, null, null)
+              handleNoType({)
+              handleIdentifier(, formalParameterDeclaration)
+              handleFormalParameterWithoutValue(})
+            endFormalParameter(null, null, null, null, , null, null, FormalParameterKind.optionalNamed, MemberKind.PrimaryConstructor)
+          endOptionalFormalParameters(1, {, }, MemberKind.PrimaryConstructor)
+          handleRecoverableError(Message[Template(ExpectedButGot), Expected ')' before this., null, {string: )}], extension, extension)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      handleRecoverableError(MissingPrimaryConstructor, >, >)
+      handleNoPrimaryConstructor(>, const, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleRecoverableError(MissingPrimaryConstructorParameters, {, {)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+        handleIdentifier(, primaryConstructorDeclaration)
+        handleRecoverableError(MissingPrimaryConstructorParameters, {, {)
+        handleNoFormalParameters(, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '('., Try inserting an identifier before '('., {lexeme: (}], (, ()
+        handleIdentifier(, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        handleRecoverableError(MissingPrimaryConstructorParameters, named, named)
+        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, E)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        handleRecoverableError(MissingPrimaryConstructorParameters, named, named)
+        handleNoFormalParameters(named, MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, {)
+      endClassOrMixinOrExtensionBody(DeclarationKind.ExtensionType, 0, {, })
+    endExtensionTypeDeclaration(extension, null, extension, type, })
+  endTopLevelDeclaration(})
+endCompilationUnit(13, )
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.intertwined.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.intertwined.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.intertwined.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.parser.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.parser.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.parser.expect
diff --git a/pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.scanner.expect
similarity index 100%
rename from pkg/front_end/parser_testcases/declaring_constructors/extension_type_primary_constructor_error.dart.scanner.expect
rename to pkg/front_end/parser_testcases/primary_constructors/extension_type_primary_constructor_error.dart.scanner.expect
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart
new file mode 100644
index 0000000..5865c01
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart
@@ -0,0 +1,36 @@
+class C {
+  external factory ();
+  external factory C();
+  external factory name();
+  external factory C.name();
+  factory () => C();
+  factory C() => C();
+  factory name() => C();
+  factory C.name() => C();
+  factory () {}
+  factory C() {}
+  factory name() {}
+  factory C.name() {}
+  factory () = C;
+  factory C() = C;
+  factory name() = C;
+  factory C.name() = C;
+  external const factory ();
+  external const factory C();
+  external const factory name();
+  external const factory C.name();
+  const factory () => C();
+  const factory C() => C();
+  const factory name() => C();
+  const factory C.name() => C();
+  const factory () {}
+  const factory C() {}
+  const factory name() {}
+  const factory C.name() {}
+  const factory () = C;
+  const factory C() = C;
+  const factory name() = C;
+  const factory C.name() = C;
+
+  void factory() => C(); // Not a factory constructor.
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.expect
new file mode 100644
index 0000000..c33eebf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.expect
@@ -0,0 +1,541 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, {, external, null)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleNoIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+            handleVoidKeyword(void)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endMethod(DeclarationKind.Class, null, void, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 33, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.intertwined.expect
new file mode 100644
index 0000000..85b9026
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.intertwined.expect
@@ -0,0 +1,1182 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, {, external, null, null, false)
+                listener: beginFactory(DeclarationKind.Class, {, external, null)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, false)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, false)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, false)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, false)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, false)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, false)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, false)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                listener: handleNoIdentifier(factory, methodDeclaration)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(factory, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 33, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.parser.expect
new file mode 100644
index 0000000..1c57736
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.parser.expect
@@ -0,0 +1,73 @@
+class C {
+external factory ();
+external factory C();
+external factory name();
+external factory C.name();
+factory () => C();
+factory C() => C();
+factory name() => C();
+factory C.name() => C();
+factory () {}
+factory C() {}
+factory name() {}
+factory C.name() {}
+factory () = C;
+factory C() = C;
+factory name() = C;
+factory C.name() = C;
+external const factory ();
+external const factory C();
+external const factory name();
+external const factory C.name();
+const factory () => C();
+const factory C() => C();
+const factory name() => C();
+const factory C.name() => C();
+const factory () {}
+const factory C() {}
+const factory name() {}
+const factory C.name() {}
+const factory () = C;
+const factory C() = C;
+const factory name() = C;
+const factory C.name() = C;
+
+void factory() => C();
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+external[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+
+void[KeywordToken] factory[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.scanner.expect
new file mode 100644
index 0000000..1c57736
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head.dart.scanner.expect
@@ -0,0 +1,73 @@
+class C {
+external factory ();
+external factory C();
+external factory name();
+external factory C.name();
+factory () => C();
+factory C() => C();
+factory name() => C();
+factory C.name() => C();
+factory () {}
+factory C() {}
+factory name() {}
+factory C.name() {}
+factory () = C;
+factory C() = C;
+factory name() = C;
+factory C.name() = C;
+external const factory ();
+external const factory C();
+external const factory name();
+external const factory C.name();
+const factory () => C();
+const factory C() => C();
+const factory name() => C();
+const factory C.name() => C();
+const factory () {}
+const factory C() {}
+const factory name() {}
+const factory C.name() {}
+const factory () = C;
+const factory C() = C;
+const factory name() = C;
+const factory C.name() = C;
+
+void factory() => C();
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+external[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+
+void[KeywordToken] factory[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart
new file mode 100644
index 0000000..a732663
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart
@@ -0,0 +1,37 @@
+// @dart=3.10
+class C {
+  external factory ();
+  external factory C();
+  external factory name();
+  external factory C.name();
+  factory () => C();
+  factory C() => C();
+  factory name() => C();
+  factory C.name() => C();
+  factory () {}
+  factory C() {}
+  factory name() {}
+  factory C.name() {}
+  factory () = C;
+  factory C() = C;
+  factory name() = C;
+  factory C.name() = C;
+  external const factory ();
+  external const factory C();
+  external const factory name();
+  external const factory C.name();
+  const factory () => C();
+  const factory C() => C();
+  const factory name() => C();
+  const factory C.name() => C();
+  const factory () {}
+  const factory C() {}
+  const factory name() {}
+  const factory C.name() {}
+  const factory () = C;
+  const factory C() = C;
+  const factory name() = C;
+  const factory C.name() = C;
+
+  void factory() => C(); // Not a factory constructor.
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.expect
new file mode 100644
index 0000000..b614805
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.expect
@@ -0,0 +1,587 @@
+Problems reported:
+
+parser/primary_constructors/factory_constructor_head_pre_feature:15:14: Only factory constructor can specify '=' redirection.
+  factory () = C;
+             ^
+
+parser/primary_constructors/factory_constructor_head_pre_feature:19:12: Getters, setters and methods can't be declared to be 'const'.
+  external const factory ();
+           ^^^^^
+
+parser/primary_constructors/factory_constructor_head_pre_feature:23:3: Getters, setters and methods can't be declared to be 'const'.
+  const factory () => C();
+  ^^^^^
+
+parser/primary_constructors/factory_constructor_head_pre_feature:27:3: Getters, setters and methods can't be declared to be 'const'.
+  const factory () {}
+  ^^^^^
+
+parser/primary_constructors/factory_constructor_head_pre_feature:31:20: Only factory constructor can specify '=' redirection.
+  const factory () = C;
+                   ^
+
+parser/primary_constructors/factory_constructor_head_pre_feature:31:3: Getters, setters and methods can't be declared to be 'const'.
+  const factory () = C;
+  ^^^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, null, null, factory, C)
+            handleNoType(external)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endMethod(DeclarationKind.Class, null, external, (, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+            handleNoType(;)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endMethod(DeclarationKind.Class, null, factory, (, null, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+            handleNoType(;)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.Class, null, factory, (, null, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, factory, factory, })
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+            handleNoType(})
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endMethod(DeclarationKind.Class, null, factory, (, null, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, external, null, null, const, null, factory, C)
+            handleNoType(const)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+            handleRecoverableError(ConstMethod, const, const)
+          endMethod(DeclarationKind.Class, null, external, (, null, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, factory, C)
+            handleNoType(const)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+            handleRecoverableError(ConstMethod, const, const)
+          endMethod(DeclarationKind.Class, null, const, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, factory, C)
+            handleNoType(const)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+            handleRecoverableError(ConstMethod, const, const)
+          endMethod(DeclarationKind.Class, null, const, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, }, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endFactory(DeclarationKind.Class, const, factory, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, const, null, factory, C)
+            handleNoType(const)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+            handleRecoverableError(ConstMethod, const, const)
+          endMethod(DeclarationKind.Class, null, const, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(name, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(name, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(void)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+            handleVoidKeyword(void)
+            handleIdentifier(factory, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleIdentifier(C, expression)
+            handleNoTypeArguments(()
+            beginArguments(()
+            endArguments(0, (, ))
+            handleSend(C, ))
+            handleExpressionFunctionBody(=>, ;)
+          endMethod(DeclarationKind.Class, null, void, (, null, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 33, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.intertwined.expect
new file mode 100644
index 0000000..5643e8c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.intertwined.expect
@@ -0,0 +1,1238 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, external, null, null, null, null, external, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, null, null, factory, C)
+                listener: handleNoType(external)
+                ensureIdentifierPotentiallyRecovered(external, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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: endMethod(DeclarationKind.Class, null, external, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endMethod(DeclarationKind.Class, null, factory, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+                listener: handleNoType(;)
+                ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endMethod(DeclarationKind.Class, null, factory, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(}, DeclarationKind.Class, }, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, factory, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endMethod(DeclarationKind.Class, null, factory, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, external, null, null, null, const, const, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, external, null, null, const, null, factory, C)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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(;)
+                reportRecoverableError(const, ConstMethod)
+                  listener: handleRecoverableError(ConstMethod, const, const)
+                listener: endMethod(DeclarationKind.Class, null, external, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, factory, C)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                reportRecoverableError(const, ConstMethod)
+                  listener: handleRecoverableError(ConstMethod, const, const)
+                listener: endMethod(DeclarationKind.Class, null, const, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, factory, C)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                reportRecoverableError(const, ConstMethod)
+                  listener: handleRecoverableError(ConstMethod, const, const)
+                listener: endMethod(DeclarationKind.Class, null, const, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, }, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, }, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endFactory(DeclarationKind.Class, const, factory, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, const, null, factory, C)
+                listener: handleNoType(const)
+                ensureIdentifierPotentiallyRecovered(const, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                reportRecoverableError(const, ConstMethod)
+                  listener: handleRecoverableError(ConstMethod, const, const)
+                listener: endMethod(DeclarationKind.Class, null, const, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                parseMethodTypeVar(C)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(C, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(name, methodDeclaration)
+                parseQualifiedRestOpt(name, methodDeclarationContinuation)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(name, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(name)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(name, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, void)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(void)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), null, null, factory, DeclarationKind.Class, C, false)
+                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, factory, C)
+                listener: handleVoidKeyword(void)
+                ensureIdentifierPotentiallyRecovered(void, methodDeclaration, false)
+                  listener: handleIdentifier(factory, methodDeclaration)
+                parseQualifiedRestOpt(factory, methodDeclarationContinuation)
+                parseMethodTypeVar(factory)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(factory, factory, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(factory, 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)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                          skipObjectPatternRest(C)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseSendOrFunctionLiteral(=>, expression, ConstantPatternContext.none)
+                              looksLikeFunctionBody(;)
+                              parseSend(=>, expression, ConstantPatternContext.none)
+                                ensureIdentifier(=>, expression)
+                                  listener: handleIdentifier(C, expression)
+                                listener: handleNoTypeArguments(()
+                                parseArgumentsOpt(C)
+                                  parseArguments(C)
+                                    parseArgumentsRest(()
+                                      listener: beginArguments(()
+                                      listener: endArguments(0, (, ))
+                                listener: handleSend(C, ))
+                    ensureSemicolon())
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endMethod(DeclarationKind.Class, null, void, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 33, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.parser.expect
new file mode 100644
index 0000000..1c57736
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.parser.expect
@@ -0,0 +1,73 @@
+class C {
+external factory ();
+external factory C();
+external factory name();
+external factory C.name();
+factory () => C();
+factory C() => C();
+factory name() => C();
+factory C.name() => C();
+factory () {}
+factory C() {}
+factory name() {}
+factory C.name() {}
+factory () = C;
+factory C() = C;
+factory name() = C;
+factory C.name() = C;
+external const factory ();
+external const factory C();
+external const factory name();
+external const factory C.name();
+const factory () => C();
+const factory C() => C();
+const factory name() => C();
+const factory C.name() => C();
+const factory () {}
+const factory C() {}
+const factory name() {}
+const factory C.name() {}
+const factory () = C;
+const factory C() = C;
+const factory name() = C;
+const factory C.name() = C;
+
+void factory() => C();
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+external[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+
+void[KeywordToken] factory[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.scanner.expect
new file mode 100644
index 0000000..1c57736
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_constructor_head_pre_feature.dart.scanner.expect
@@ -0,0 +1,73 @@
+class C {
+external factory ();
+external factory C();
+external factory name();
+external factory C.name();
+factory () => C();
+factory C() => C();
+factory name() => C();
+factory C.name() => C();
+factory () {}
+factory C() {}
+factory name() {}
+factory C.name() {}
+factory () = C;
+factory C() = C;
+factory name() = C;
+factory C.name() = C;
+external const factory ();
+external const factory C();
+external const factory name();
+external const factory C.name();
+const factory () => C();
+const factory C() => C();
+const factory name() => C();
+const factory C.name() => C();
+const factory () {}
+const factory C() {}
+const factory name() {}
+const factory C.name() {}
+const factory () = C;
+const factory C() = C;
+const factory name() = C;
+const factory C.name() = C;
+
+void factory() => C();
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+external[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] factory[KeywordToken] ([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] C[StringToken].[SimpleToken]name[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+
+void[KeywordToken] factory[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart
new file mode 100644
index 0000000..3db288e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart
@@ -0,0 +1,15 @@
+class C {
+  external factory new();
+  external const factory new();
+  factory new() => 0;
+  const factory new() => 0;
+  factory new() = C;
+  const factory new() = C;
+
+  external factory new.named();
+  external const factory new.named();
+  factory new.named() => 0;
+  const factory new.named() => 0;
+  factory new.named() = C;
+  const factory new.named() = C;
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.expect
new file mode 100644
index 0000000..c193285f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.expect
@@ -0,0 +1,266 @@
+Problems reported:
+
+parser/primary_constructors/factory_new:2:20: Factory constructors can't be named 'new'.
+  external factory new();
+                   ^^^
+
+parser/primary_constructors/factory_new:3:26: Factory constructors can't be named 'new'.
+  external const factory new();
+                         ^^^
+
+parser/primary_constructors/factory_new:4:11: Factory constructors can't be named 'new'.
+  factory new() => 0;
+          ^^^
+
+parser/primary_constructors/factory_new:5:17: Factory constructors can't be named 'new'.
+  const factory new() => 0;
+                ^^^
+
+parser/primary_constructors/factory_new:6:11: Factory constructors can't be named 'new'.
+  factory new() = C;
+          ^^^
+
+parser/primary_constructors/factory_new:7:17: Factory constructors can't be named 'new'.
+  const factory new() = C;
+                ^^^
+
+parser/primary_constructors/factory_new:9:20: 'new' can't be used as an identifier because it's a keyword.
+  external factory new.named();
+                   ^^^
+
+parser/primary_constructors/factory_new:10:26: 'new' can't be used as an identifier because it's a keyword.
+  external const factory new.named();
+                         ^^^
+
+parser/primary_constructors/factory_new:11:11: 'new' can't be used as an identifier because it's a keyword.
+  factory new.named() => 0;
+          ^^^
+
+parser/primary_constructors/factory_new:12:17: 'new' can't be used as an identifier because it's a keyword.
+  const factory new.named() => 0;
+                ^^^
+
+parser/primary_constructors/factory_new:13:11: 'new' can't be used as an identifier because it's a keyword.
+  factory new.named() = C;
+          ^^^
+
+parser/primary_constructors/factory_new:14:17: 'new' can't be used as an identifier because it's a keyword.
+  const factory new.named() = C;
+                ^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, {, external, null)
+            handleRecoverableError(FactoryConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleRecoverableError(FactoryConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleRecoverableError(FactoryConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleRecoverableError(FactoryConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleRecoverableError(FactoryConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleRecoverableError(FactoryConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, null)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(external)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, external, const)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endFactory(DeclarationKind.Class, external, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            handleConstFactory(const)
+            handleLiteralInt(0)
+            handleExpressionFunctionBody(=>, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+        beginMetadataStar(factory)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, null)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, factory, factory, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginFactory(DeclarationKind.Class, ;, null, const)
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.Factory)
+            endFormalParameters(0, (, ), MemberKind.Factory)
+            handleAsyncModifier(null, null)
+            beginRedirectingFactoryBody(=)
+              handleIdentifier(C, constructorReference)
+              beginConstructorReference(C)
+                handleNoTypeArguments(;)
+                handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+              endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+            endRedirectingFactoryBody(=, ;)
+          endFactory(DeclarationKind.Class, const, factory, ;)
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 12, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.intertwined.expect
new file mode 100644
index 0000000..6df1d59
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.intertwined.expect
@@ -0,0 +1,457 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, {, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, {, external, null)
+                reportRecoverableError(new, FactoryConstructorNewName)
+                  listener: handleRecoverableError(FactoryConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(new, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                reportRecoverableError(new, FactoryConstructorNewName)
+                  listener: handleRecoverableError(FactoryConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(new, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                reportRecoverableError(new, FactoryConstructorNewName)
+                  listener: handleRecoverableError(FactoryConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(new, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                reportRecoverableError(new, FactoryConstructorNewName)
+                  listener: handleRecoverableError(FactoryConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(new, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                reportRecoverableError(new, FactoryConstructorNewName)
+                  listener: handleRecoverableError(FactoryConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(new, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                reportRecoverableError(new, FactoryConstructorNewName)
+                  listener: handleRecoverableError(FactoryConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(new, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(external, DeclarationKind.Class, ;, external, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                  parseQualifiedRest(new, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(named, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, external)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(external)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, external, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, external, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                  parseQualifiedRest(new, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(named, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endFactory(DeclarationKind.Class, external, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                  parseQualifiedRest(new, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(named, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                  parseQualifiedRest(new, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(named, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                listener: handleConstFactory(const)
+                parseFunctionBody(), false, false)
+                  parseExpressionFunctionBody(=>, false)
+                    parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
+                      parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                        parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                          parsePrimary(=>, expression, ConstantPatternContext.none)
+                            parseLiteralInt(=>)
+                              listener: handleLiteralInt(0)
+                    ensureSemicolon(0)
+                    listener: handleExpressionFunctionBody(=>, ;)
+                    inGenerator()
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, factory)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(factory)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(;, DeclarationKind.Class, ;, null, null, null, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, null)
+                ensureIdentifier(factory, methodDeclaration)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                  parseQualifiedRest(new, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(named, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, factory, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseFactoryMethod(const, DeclarationKind.Class, ;, null, null, const, true)
+                listener: beginFactory(DeclarationKind.Class, ;, null, const)
+                ensureIdentifier(factory, methodDeclaration)
+                  reportRecoverableErrorWithToken(new, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(new, methodDeclarationContinuation)
+                  parseQualifiedRest(new, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseFormalParametersRequiredOpt(named, MemberKind.Factory)
+                  parseFormalParametersRest((, MemberKind.Factory)
+                    listener: beginFormalParameters((, MemberKind.Factory)
+                    listener: endFormalParameters(0, (, ), MemberKind.Factory)
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      listener: handleIdentifier(C, constructorReference)
+                    listener: beginConstructorReference(C)
+                    parseQualifiedRestOpt(C, constructorReferenceContinuation)
+                    listener: handleNoTypeArguments(;)
+                    listener: handleNoConstructorReferenceContinuationAfterTypeArguments(C)
+                    listener: endConstructorReference(C, null, C, ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon(C)
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endFactory(DeclarationKind.Class, const, factory, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 12, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.parser.expect
new file mode 100644
index 0000000..b71710d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.parser.expect
@@ -0,0 +1,31 @@
+class C {
+external factory new();
+external const factory new();
+factory new() => 0;
+const factory new() => 0;
+factory new() = C;
+const factory new() = C;
+
+external factory new.named();
+external const factory new.named();
+factory new.named() => 0;
+const factory new.named() => 0;
+factory new.named() = C;
+const factory new.named() = C;
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+external[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+
+external[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.scanner.expect
new file mode 100644
index 0000000..b71710d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/factory_new.dart.scanner.expect
@@ -0,0 +1,31 @@
+class C {
+external factory new();
+external const factory new();
+factory new() => 0;
+const factory new() => 0;
+factory new() = C;
+const factory new() = C;
+
+external factory new.named();
+external const factory new.named();
+factory new.named() => 0;
+const factory new.named() => 0;
+factory new.named() = C;
+const factory new.named() = C;
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+external[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+
+external[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+external[KeywordToken] const[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =>[SimpleToken] 0[StringToken];[SimpleToken]
+factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+const[KeywordToken] factory[KeywordToken] new[KeywordToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] =[SimpleToken] C[StringToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/folder.options b/pkg/front_end/parser_testcases/primary_constructors/folder.options
new file mode 100644
index 0000000..79601a4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/folder.options
@@ -0,0 +1 @@
+--enable-experiment=primary-constructors
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart
new file mode 100644
index 0000000..15c9561
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart
@@ -0,0 +1,11 @@
+// TODO(johnniwinther): Improve error recovery.
+class C {
+  new() : this.new = 0;
+  const new() this.new = 0;
+  new() : this.new = 0 {}
+  const new() : this.new = 0 {}
+  new named() : this.new = 0;
+  const new named() : this.new = 0;
+  new named() : this.new = 0 {}
+  const new named() : this.new = 0 {}
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.expect
new file mode 100644
index 0000000..948165e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.expect
@@ -0,0 +1,893 @@
+Problems reported:
+
+parser/primary_constructors/new_in_initializer:3:16: Expected an identifier, but got 'new'.
+  new() : this.new = 0;
+               ^^^
+
+parser/primary_constructors/new_in_initializer:3:11: Expected an assignment after the field name.
+  new() : this.new = 0;
+          ^^^^
+
+parser/primary_constructors/new_in_initializer:3:16: Expected a function body, but got 'new'.
+  new() : this.new = 0;
+               ^^^
+
+parser/primary_constructors/new_in_initializer:3:16: A method declaration needs an explicit list of parameters.
+  new() : this.new = 0;
+               ^^^
+
+parser/primary_constructors/new_in_initializer:3:20: Only factory constructor can specify '=' redirection.
+  new() : this.new = 0;
+                   ^
+
+parser/primary_constructors/new_in_initializer:3:22: Expected an identifier, but got '0'.
+  new() : this.new = 0;
+                     ^
+
+parser/primary_constructors/new_in_initializer:3:20: Expected ';' after this.
+  new() : this.new = 0;
+                   ^
+
+parser/primary_constructors/new_in_initializer:3:22: Expected a class member, but got '0'.
+  new() : this.new = 0;
+                     ^
+
+parser/primary_constructors/new_in_initializer:3:23: Expected a class member, but got ';'.
+  new() : this.new = 0;
+                      ^
+
+parser/primary_constructors/new_in_initializer:4:15: Expected a function body, but got 'this'.
+  const new() this.new = 0;
+              ^^^^
+
+parser/primary_constructors/new_in_initializer:4:15: 'this' can't be used as an identifier because it's a keyword.
+  const new() this.new = 0;
+              ^^^^
+
+parser/primary_constructors/new_in_initializer:4:15: A method declaration needs an explicit list of parameters.
+  const new() this.new = 0;
+              ^^^^
+
+parser/primary_constructors/new_in_initializer:4:24: Only factory constructor can specify '=' redirection.
+  const new() this.new = 0;
+                       ^
+
+parser/primary_constructors/new_in_initializer:4:26: Expected an identifier, but got '0'.
+  const new() this.new = 0;
+                         ^
+
+parser/primary_constructors/new_in_initializer:4:24: Expected ';' after this.
+  const new() this.new = 0;
+                       ^
+
+parser/primary_constructors/new_in_initializer:4:15: The name of a constructor must match the name of the enclosing class.
+  const new() this.new = 0;
+              ^^^^
+
+parser/primary_constructors/new_in_initializer:4:26: Expected a class member, but got '0'.
+  const new() this.new = 0;
+                         ^
+
+parser/primary_constructors/new_in_initializer:4:27: Expected a class member, but got ';'.
+  const new() this.new = 0;
+                          ^
+
+parser/primary_constructors/new_in_initializer:5:16: Expected an identifier, but got 'new'.
+  new() : this.new = 0 {}
+               ^^^
+
+parser/primary_constructors/new_in_initializer:5:11: Expected an assignment after the field name.
+  new() : this.new = 0 {}
+          ^^^^
+
+parser/primary_constructors/new_in_initializer:5:16: Expected a function body, but got 'new'.
+  new() : this.new = 0 {}
+               ^^^
+
+parser/primary_constructors/new_in_initializer:5:16: A method declaration needs an explicit list of parameters.
+  new() : this.new = 0 {}
+               ^^^
+
+parser/primary_constructors/new_in_initializer:5:20: Only factory constructor can specify '=' redirection.
+  new() : this.new = 0 {}
+                   ^
+
+parser/primary_constructors/new_in_initializer:5:22: Expected an identifier, but got '0'.
+  new() : this.new = 0 {}
+                     ^
+
+parser/primary_constructors/new_in_initializer:5:20: Expected ';' after this.
+  new() : this.new = 0 {}
+                   ^
+
+parser/primary_constructors/new_in_initializer:5:22: Expected a class member, but got '0'.
+  new() : this.new = 0 {}
+                     ^
+
+parser/primary_constructors/new_in_initializer:5:24: Expected an identifier, but got '{'.
+  new() : this.new = 0 {}
+                       ^
+
+parser/primary_constructors/new_in_initializer:5:24: A method declaration needs an explicit list of parameters.
+  new() : this.new = 0 {}
+                       ^
+
+parser/primary_constructors/new_in_initializer:6:22: Expected an identifier, but got 'new'.
+  const new() : this.new = 0 {}
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:6:17: Expected an assignment after the field name.
+  const new() : this.new = 0 {}
+                ^^^^
+
+parser/primary_constructors/new_in_initializer:6:22: Expected a function body, but got 'new'.
+  const new() : this.new = 0 {}
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:6:22: A method declaration needs an explicit list of parameters.
+  const new() : this.new = 0 {}
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:6:26: Only factory constructor can specify '=' redirection.
+  const new() : this.new = 0 {}
+                         ^
+
+parser/primary_constructors/new_in_initializer:6:28: Expected an identifier, but got '0'.
+  const new() : this.new = 0 {}
+                           ^
+
+parser/primary_constructors/new_in_initializer:6:26: Expected ';' after this.
+  const new() : this.new = 0 {}
+                         ^
+
+parser/primary_constructors/new_in_initializer:6:28: Expected a class member, but got '0'.
+  const new() : this.new = 0 {}
+                           ^
+
+parser/primary_constructors/new_in_initializer:6:30: Expected an identifier, but got '{'.
+  const new() : this.new = 0 {}
+                             ^
+
+parser/primary_constructors/new_in_initializer:6:30: A method declaration needs an explicit list of parameters.
+  const new() : this.new = 0 {}
+                             ^
+
+parser/primary_constructors/new_in_initializer:7:22: Expected an identifier, but got 'new'.
+  new named() : this.new = 0;
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:7:17: Expected an assignment after the field name.
+  new named() : this.new = 0;
+                ^^^^
+
+parser/primary_constructors/new_in_initializer:7:22: Expected a function body, but got 'new'.
+  new named() : this.new = 0;
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:7:22: A method declaration needs an explicit list of parameters.
+  new named() : this.new = 0;
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:7:26: Only factory constructor can specify '=' redirection.
+  new named() : this.new = 0;
+                         ^
+
+parser/primary_constructors/new_in_initializer:7:28: Expected an identifier, but got '0'.
+  new named() : this.new = 0;
+                           ^
+
+parser/primary_constructors/new_in_initializer:7:26: Expected ';' after this.
+  new named() : this.new = 0;
+                         ^
+
+parser/primary_constructors/new_in_initializer:7:28: Expected a class member, but got '0'.
+  new named() : this.new = 0;
+                           ^
+
+parser/primary_constructors/new_in_initializer:7:29: Expected a class member, but got ';'.
+  new named() : this.new = 0;
+                            ^
+
+parser/primary_constructors/new_in_initializer:8:28: Expected an identifier, but got 'new'.
+  const new named() : this.new = 0;
+                           ^^^
+
+parser/primary_constructors/new_in_initializer:8:23: Expected an assignment after the field name.
+  const new named() : this.new = 0;
+                      ^^^^
+
+parser/primary_constructors/new_in_initializer:8:28: Expected a function body, but got 'new'.
+  const new named() : this.new = 0;
+                           ^^^
+
+parser/primary_constructors/new_in_initializer:8:28: A method declaration needs an explicit list of parameters.
+  const new named() : this.new = 0;
+                           ^^^
+
+parser/primary_constructors/new_in_initializer:8:32: Only factory constructor can specify '=' redirection.
+  const new named() : this.new = 0;
+                               ^
+
+parser/primary_constructors/new_in_initializer:8:34: Expected an identifier, but got '0'.
+  const new named() : this.new = 0;
+                                 ^
+
+parser/primary_constructors/new_in_initializer:8:32: Expected ';' after this.
+  const new named() : this.new = 0;
+                               ^
+
+parser/primary_constructors/new_in_initializer:8:34: Expected a class member, but got '0'.
+  const new named() : this.new = 0;
+                                 ^
+
+parser/primary_constructors/new_in_initializer:8:35: Expected a class member, but got ';'.
+  const new named() : this.new = 0;
+                                  ^
+
+parser/primary_constructors/new_in_initializer:9:22: Expected an identifier, but got 'new'.
+  new named() : this.new = 0 {}
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:9:17: Expected an assignment after the field name.
+  new named() : this.new = 0 {}
+                ^^^^
+
+parser/primary_constructors/new_in_initializer:9:22: Expected a function body, but got 'new'.
+  new named() : this.new = 0 {}
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:9:22: A method declaration needs an explicit list of parameters.
+  new named() : this.new = 0 {}
+                     ^^^
+
+parser/primary_constructors/new_in_initializer:9:26: Only factory constructor can specify '=' redirection.
+  new named() : this.new = 0 {}
+                         ^
+
+parser/primary_constructors/new_in_initializer:9:28: Expected an identifier, but got '0'.
+  new named() : this.new = 0 {}
+                           ^
+
+parser/primary_constructors/new_in_initializer:9:26: Expected ';' after this.
+  new named() : this.new = 0 {}
+                         ^
+
+parser/primary_constructors/new_in_initializer:9:28: Expected a class member, but got '0'.
+  new named() : this.new = 0 {}
+                           ^
+
+parser/primary_constructors/new_in_initializer:9:30: Expected an identifier, but got '{'.
+  new named() : this.new = 0 {}
+                             ^
+
+parser/primary_constructors/new_in_initializer:9:30: A method declaration needs an explicit list of parameters.
+  new named() : this.new = 0 {}
+                             ^
+
+parser/primary_constructors/new_in_initializer:10:28: Expected an identifier, but got 'new'.
+  const new named() : this.new = 0 {}
+                           ^^^
+
+parser/primary_constructors/new_in_initializer:10:23: Expected an assignment after the field name.
+  const new named() : this.new = 0 {}
+                      ^^^^
+
+parser/primary_constructors/new_in_initializer:10:28: Expected a function body, but got 'new'.
+  const new named() : this.new = 0 {}
+                           ^^^
+
+parser/primary_constructors/new_in_initializer:10:28: A method declaration needs an explicit list of parameters.
+  const new named() : this.new = 0 {}
+                           ^^^
+
+parser/primary_constructors/new_in_initializer:10:32: Only factory constructor can specify '=' redirection.
+  const new named() : this.new = 0 {}
+                               ^
+
+parser/primary_constructors/new_in_initializer:10:34: Expected an identifier, but got '0'.
+  const new named() : this.new = 0 {}
+                                 ^
+
+parser/primary_constructors/new_in_initializer:10:32: Expected ';' after this.
+  const new named() : this.new = 0 {}
+                               ^
+
+parser/primary_constructors/new_in_initializer:10:34: Expected a class member, but got '0'.
+  const new named() : this.new = 0 {}
+                                 ^
+
+parser/primary_constructors/new_in_initializer:10:36: Expected an identifier, but got '{'.
+  const new named() : this.new = 0 {}
+                                   ^
+
+parser/primary_constructors/new_in_initializer:10:36: A method declaration needs an explicit list of parameters.
+  const new named() : this.new = 0 {}
+                                   ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType({)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'this'., null, {lexeme: this}], this, this)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+        beginMetadataStar(this)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, this, C)
+            handleNoType(})
+            handleRecoverableError(Message[Template(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, methodDeclaration)
+            handleNewAsIdentifier(new)
+            handleIdentifier(new, methodDeclarationContinuation)
+            handleQualified(.)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, this, this)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+            handleRecoverableError(ConstructorWithWrongName, this, this)
+          endConstructor(DeclarationKind.Class, this, null, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar({)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+            handleNoType(0)
+            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+            handleIdentifier(, methodDeclaration)
+            handleNoTypeVariables({)
+            handleRecoverableError(MissingMethodParameters, {, {)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.Class, null, , (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar({)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+            handleNoType(0)
+            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+            handleIdentifier(, methodDeclaration)
+            handleNoTypeVariables({)
+            handleRecoverableError(MissingMethodParameters, {, {)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.Class, null, , (, null, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar(;)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+          handleInvalidMember(;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar({)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+            handleNoType(0)
+            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+            handleIdentifier(, methodDeclaration)
+            handleNoTypeVariables({)
+            handleRecoverableError(MissingMethodParameters, {, {)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.Class, null, , (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(named, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                handleIdentifier(, expression)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(, )
+                handleThisExpression(this, expression)
+                handleIdentifier(, expressionContinuation)
+                handleNoTypeArguments(new)
+                handleNoArguments(new)
+                handleSend(, )
+                handleDotAccess(., , false)
+                handleAssignmentExpression(=, )
+              endInitializer()
+            endInitializers(1, :, )
+            handleAsyncModifier(null, null)
+            handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+            handleInvalidFunctionBody({)
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleNoIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(=)
+            handleRecoverableError(MissingMethodParameters, new, new)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleRecoverableError(RedirectionInNonFactory, =, =)
+            beginRedirectingFactoryBody(=)
+              handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], 0, 0)
+              handleIdentifier(, constructorReference)
+              beginConstructorReference()
+                handleNoTypeArguments(0)
+                handleNoConstructorReferenceContinuationAfterTypeArguments()
+              endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+              handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+            endRedirectingFactoryBody(=, ;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(0)
+        endMetadataStar(0)
+        beginMember()
+          handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+          handleInvalidMember(0)
+        endMember()
+        beginMetadataStar({)
+        endMetadataStar(0)
+        beginMember()
+          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+            handleNoType(0)
+            handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}], {, {)
+            handleIdentifier(, methodDeclaration)
+            handleNoTypeVariables({)
+            handleRecoverableError(MissingMethodParameters, {, {)
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endMethod(DeclarationKind.Class, null, , (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 32, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.intertwined.expect
new file mode 100644
index 0000000..829c4c1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.intertwined.expect
@@ -0,0 +1,1309 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType({)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ;)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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)
+                  ensureBlock(), BlockKind(function body))
+                    reportRecoverableError(this, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'this'., null, {lexeme: this}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'this'., null, {lexeme: this}], this, this)
+                    insertBlock())
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, this)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(this)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, this, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, this, C)
+                listener: handleNoType(})
+                ensureIdentifierPotentiallyRecovered(}, methodDeclaration, false)
+                  reportRecoverableErrorWithToken(this, Template(ExpectedIdentifierButGotKeyword))
+                    listener: handleRecoverableError(Message[Template(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, methodDeclaration)
+                parseQualifiedRestOpt(this, methodDeclarationContinuation)
+                  parseQualifiedRest(this, methodDeclarationContinuation)
+                    rewriter()
+                    listener: handleNewAsIdentifier(new)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(new, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, this, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(this, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, this, this)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                reportRecoverableError(this, ConstructorWithWrongName)
+                  listener: handleRecoverableError(ConstructorWithWrongName, this, this)
+                listener: endConstructor(DeclarationKind.Class, this, null, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ;)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, {)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                parseMethod(0, null, null, null, null, null, null, null, 0, NoType(), null, null, {, DeclarationKind.Class, C, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+                  listener: handleNoType(0)
+                  ensureIdentifierPotentiallyRecovered(0, methodDeclaration, false)
+                    insertSyntheticIdentifier(0, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError({, Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}])
+                        listener: handleRecoverableError(Message[Template(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)
+                    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)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrType(CLOSE_CURLY_BRACKET, })
+                    listener: endBlockFunctionBody(0, {, })
+                  listener: endMethod(DeclarationKind.Class, null, , (, null, })
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, {)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                parseMethod(0, null, null, null, null, null, null, null, 0, NoType(), null, null, {, DeclarationKind.Class, C, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+                  listener: handleNoType(0)
+                  ensureIdentifierPotentiallyRecovered(0, methodDeclaration, false)
+                    insertSyntheticIdentifier(0, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError({, Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}])
+                        listener: handleRecoverableError(Message[Template(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)
+                    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)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrType(CLOSE_CURLY_BRACKET, })
+                    listener: endBlockFunctionBody(0, {, })
+                  listener: endMethod(DeclarationKind.Class, null, , (, null, })
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ;)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, ;)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(;, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
+                listener: handleInvalidMember(;)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, {)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                parseMethod(0, null, null, null, null, null, null, null, 0, NoType(), null, null, {, DeclarationKind.Class, C, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+                  listener: handleNoType(0)
+                  ensureIdentifierPotentiallyRecovered(0, methodDeclaration, false)
+                    insertSyntheticIdentifier(0, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError({, Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}])
+                        listener: handleRecoverableError(Message[Template(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)
+                    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)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrType(CLOSE_CURLY_BRACKET, })
+                    listener: endBlockFunctionBody(0, {, })
+                  listener: endMethod(DeclarationKind.Class, null, , (, null, })
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(named, methodDeclaration)
+                parseQualifiedRestOpt(named, methodDeclarationContinuation)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      insertSyntheticIdentifier(., fieldInitializer, message: null, messageOnToken: null)
+                        reportRecoverableError(new, Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}])
+                          listener: handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got 'new'., Try inserting an identifier before 'new'., {lexeme: new}], new, new)
+                        rewriter()
+                      insertSyntheticIdentifier(:, fieldInitializer, message: MissingAssignmentInInitializer, messageOnToken: null)
+                        reportRecoverableError(this, MissingAssignmentInInitializer)
+                          listener: handleRecoverableError(MissingAssignmentInInitializer, this, this)
+                        rewriter()
+                      rewriter()
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                              skipObjectPatternRest()
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(, expression)
+                                    listener: handleNoTypeArguments(=)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(=)
+                                    listener: handleSend(, )
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseThisExpression(=, expression)
+                                    listener: handleThisExpression(this, expression)
+                              parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                  parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                    ensureIdentifier(., expressionContinuation)
+                                      listener: handleIdentifier(, expressionContinuation)
+                                    listener: handleNoTypeArguments(new)
+                                    parseArgumentsOpt()
+                                      listener: handleNoArguments(new)
+                                    listener: handleSend(, )
+                              listener: handleDotAccess(., , false)
+                            listener: handleAssignmentExpression(=, )
+                        listener: endInitializer()
+                    listener: endInitializers(1, :, )
+                parseAsyncModifierOpt()
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(, false, true)
+                  ensureBlock(, BlockKind(function body))
+                    reportRecoverableError(new, Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}])
+                      listener: handleRecoverableError(Message[Template(ExpectedFunctionBody), Expected a function body, but got 'new'., null, {lexeme: new}], new, new)
+                    insertBlock()
+                      rewriter()
+                      rewriter()
+                  listener: handleInvalidFunctionBody({)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleNoIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(=)
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  missingParameterMessage(MemberKind.NonStaticMethod)
+                  reportRecoverableError(new, MissingMethodParameters)
+                    listener: handleRecoverableError(MissingMethodParameters, new, new)
+                  rewriter()
+                  parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                    listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                    listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  listener: handleNoInitializers()
+                parseAsyncModifierOpt())
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                reportRecoverableError(=, RedirectionInNonFactory)
+                  listener: handleRecoverableError(RedirectionInNonFactory, =, =)
+                parseRedirectingFactoryBody())
+                  listener: beginRedirectingFactoryBody(=)
+                  parseConstructorReference(=, ConstructorReferenceContext.RedirectingFactory, null)
+                    ensureIdentifier(=, constructorReference)
+                      insertSyntheticIdentifier(=, constructorReference, message: Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}], messageOnToken: null)
+                        reportRecoverableError(0, Message[Template(ExpectedIdentifier), Expected an identifier, but got '0'., Try inserting an identifier before '0'., {lexeme: 0}])
+                          listener: handleRecoverableError(Message[Template(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()
+                    listener: endConstructorReference(, null, , ConstructorReferenceContext.RedirectingFactory)
+                  ensureSemicolon()
+                    reportRecoverableError(=, Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}])
+                      listener: handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], =, =)
+                    rewriter()
+                  listener: endRedirectingFactoryBody(=, ;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, 0)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(0)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              recoverFromInvalidMember(;, ;, null, null, null, null, null, null, null, ;, NoType(), null, null, DeclarationKind.Class, C)
+                reportRecoverableErrorWithToken(0, Template(ExpectedClassMember))
+                  listener: handleRecoverableError(Message[Template(ExpectedClassMember), Expected a class member, but got '0'., null, {lexeme: 0}], 0, 0)
+                listener: handleInvalidMember(0)
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, {)
+            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, NoType(), null, null, DeclarationKind.Class, C)
+                parseMethod(0, null, null, null, null, null, null, null, 0, NoType(), null, null, {, DeclarationKind.Class, C, false)
+                  listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, {, C)
+                  listener: handleNoType(0)
+                  ensureIdentifierPotentiallyRecovered(0, methodDeclaration, false)
+                    insertSyntheticIdentifier(0, methodDeclaration, message: null, messageOnToken: null)
+                      reportRecoverableError({, Message[Template(ExpectedIdentifier), Expected an identifier, but got '{'., Try inserting an identifier before '{'., {lexeme: {}])
+                        listener: handleRecoverableError(Message[Template(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)
+                    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)
+                    listener: beginBlockFunctionBody({)
+                    notEofOrType(CLOSE_CURLY_BRACKET, })
+                    listener: endBlockFunctionBody(0, {, })
+                  listener: endMethod(DeclarationKind.Class, null, , (, null, })
+                listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 32, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.parser.expect
new file mode 100644
index 0000000..c6dfd39
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.parser.expect
@@ -0,0 +1,23 @@
+NOTICE: Stream was rewritten by parser!
+
+class C {
+new() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0;
+const new() {}this.new ()= *synthetic*;0;
+new() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0 *synthetic*(){}
+const new() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0 *synthetic*(){}
+new named() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0;
+const new named() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0;
+new named() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0 *synthetic*(){}
+const new named() : *synthetic*=this.*synthetic*{}new ()= *synthetic*;0 *synthetic*(){}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] {[SyntheticBeginToken]}[SyntheticToken]this[KeywordToken].[SimpleToken]new[StringToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken];[SimpleToken]
+new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken]{[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken]{[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken]{[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] [SyntheticStringToken]=[SyntheticToken]this[KeywordToken].[SimpleToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken]new[KeywordToken] ([SyntheticBeginToken])[SyntheticToken]=[SimpleToken] [SyntheticStringToken];[SyntheticToken]0[StringToken] [SyntheticStringToken]([SyntheticBeginToken])[SyntheticToken]{[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.scanner.expect
new file mode 100644
index 0000000..1fc1507
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_in_initializer.dart.scanner.expect
@@ -0,0 +1,21 @@
+class C {
+new() : this.new = 0;
+const new() this.new = 0;
+new() : this.new = 0 {}
+const new() : this.new = 0 {}
+new named() : this.new = 0;
+const new named() : this.new = 0;
+new named() : this.new = 0 {}
+const new named() : this.new = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]new[KeywordToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_new.dart b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart
new file mode 100644
index 0000000..45ad98b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart
@@ -0,0 +1,10 @@
+class C {
+  new new();
+  const new new();
+  new new() : this.x = 0;
+  const new new() : this.x = 0;
+  new new() {}
+  const new new() {}
+  new new() : this.x = 0 {}
+  const new new() : this.x = 0 {}
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.expect
new file mode 100644
index 0000000..f2dede8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.expect
@@ -0,0 +1,220 @@
+Problems reported:
+
+parser/primary_constructors/new_new:2:7: Constructors declared with the 'new' keyword can't be named 'new'.
+  new new();
+      ^^^
+
+parser/primary_constructors/new_new:3:13: Constructors declared with the 'new' keyword can't be named 'new'.
+  const new new();
+            ^^^
+
+parser/primary_constructors/new_new:4:7: Constructors declared with the 'new' keyword can't be named 'new'.
+  new new() : this.x = 0;
+      ^^^
+
+parser/primary_constructors/new_new:5:13: Constructors declared with the 'new' keyword can't be named 'new'.
+  const new new() : this.x = 0;
+            ^^^
+
+parser/primary_constructors/new_new:6:7: Constructors declared with the 'new' keyword can't be named 'new'.
+  new new() {}
+      ^^^
+
+parser/primary_constructors/new_new:7:13: Constructors declared with the 'new' keyword can't be named 'new'.
+  const new new() {}
+            ^^^
+
+parser/primary_constructors/new_new:8:7: Constructors declared with the 'new' keyword can't be named 'new'.
+  new new() : this.x = 0 {}
+      ^^^
+
+parser/primary_constructors/new_new:9:13: Constructors declared with the 'new' keyword can't be named 'new'.
+  const new new() : this.x = 0 {}
+            ^^^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType({)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(x, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleDotAccess(., x, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(x, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleDotAccess(., x, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(x, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleDotAccess(., x, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleRecoverableError(NewConstructorNewName, new, new)
+            handleIdentifier(new, methodDeclaration)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(x, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(x, x)
+                handleDotAccess(., x, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.intertwined.expect
new file mode 100644
index 0000000..7a5abbd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.intertwined.expect
@@ -0,0 +1,395 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType({)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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: endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(x, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(x)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(x, x)
+                            listener: handleDotAccess(., x, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(x, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(x)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(x, x)
+                            listener: handleDotAccess(., x, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(x, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(x)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(x, x)
+                            listener: handleDotAccess(., x, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                reportRecoverableError(new, NewConstructorNewName)
+                  listener: handleRecoverableError(NewConstructorNewName, new, new)
+                listener: handleIdentifier(new, methodDeclaration)
+                parseMethodTypeVar(new)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(new, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(new, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(x, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(x)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(x, x)
+                            listener: handleDotAccess(., x, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.parser.expect
new file mode 100644
index 0000000..444f8a3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.parser.expect
@@ -0,0 +1,21 @@
+class C {
+new new();
+const new new();
+new new() : this.x = 0;
+const new new() : this.x = 0;
+new new() {}
+const new new() {}
+new new() : this.x = 0 {}
+const new new() : this.x = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.scanner.expect
new file mode 100644
index 0000000..444f8a3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_new.dart.scanner.expect
@@ -0,0 +1,21 @@
+class C {
+new new();
+const new new();
+new new() : this.x = 0;
+const new new() : this.x = 0;
+new new() {}
+const new new() {}
+new new() : this.x = 0 {}
+const new new() : this.x = 0 {}
+}
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] new[KeywordToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]x[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart
new file mode 100644
index 0000000..eee11b3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart
@@ -0,0 +1,10 @@
+class C {
+  new C.named();
+  new C.named() : this.i = 0;
+  new C.named() : this.i = 0 {}
+  new C.named() {}
+  const new C.named();
+  const new C.named() : this.i = 0;
+  const new C.named() : this.i = 0 {}
+  const new C.named() {}
+}
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.expect
new file mode 100644
index 0000000..c846a40
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.expect
@@ -0,0 +1,236 @@
+Problems reported:
+
+parser/primary_constructors/new_qualified_name:2:7: Constructors declared with the 'new' keyword can't have qualified names.
+  new C.named();
+      ^
+
+parser/primary_constructors/new_qualified_name:3:7: Constructors declared with the 'new' keyword can't have qualified names.
+  new C.named() : this.i = 0;
+      ^
+
+parser/primary_constructors/new_qualified_name:4:7: Constructors declared with the 'new' keyword can't have qualified names.
+  new C.named() : this.i = 0 {}
+      ^
+
+parser/primary_constructors/new_qualified_name:5:7: Constructors declared with the 'new' keyword can't have qualified names.
+  new C.named() {}
+      ^
+
+parser/primary_constructors/new_qualified_name:6:13: Constructors declared with the 'new' keyword can't have qualified names.
+  const new C.named();
+            ^
+
+parser/primary_constructors/new_qualified_name:7:13: Constructors declared with the 'new' keyword can't have qualified names.
+  const new C.named() : this.i = 0;
+            ^
+
+parser/primary_constructors/new_qualified_name:8:13: Constructors declared with the 'new' keyword can't have qualified names.
+  const new C.named() : this.i = 0 {}
+            ^
+
+parser/primary_constructors/new_qualified_name:9:13: Constructors declared with the 'new' keyword can't have qualified names.
+  const new C.named() {}
+            ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables({)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType({)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(i, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(i, i)
+                handleDotAccess(., i, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(;)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(i, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(i, i)
+                handleDotAccess(., i, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, :, })
+        endMember()
+        beginMetadataStar(new)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+            handleNoType(})
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, new, new, (, null, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(i, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(i, i)
+                handleDotAccess(., i, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            handleEmptyFunctionBody(;)
+          endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            beginInitializers(:)
+              beginInitializer(this)
+                handleThisExpression(this, expression)
+                handleIdentifier(i, expressionContinuation)
+                handleNoTypeArguments(=)
+                handleNoArguments(=)
+                handleSend(i, i)
+                handleDotAccess(., i, false)
+                handleLiteralInt(0)
+                handleAssignmentExpression(=, 0)
+              endInitializer(0)
+            endInitializers(1, :, 0)
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, :, })
+        endMember()
+        beginMetadataStar(const)
+        endMetadataStar(0)
+        beginMember()
+          beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+            handleNoType(const)
+            handleIdentifier(C, methodDeclaration)
+            handleIdentifier(named, methodDeclarationContinuation)
+            handleQualified(.)
+            handleRecoverableError(NewConstructorQualifiedName, C, C)
+            handleNoTypeVariables(()
+            beginFormalParameters((, MemberKind.NonStaticMethod)
+            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+            handleNoInitializers()
+            handleAsyncModifier(null, null)
+            beginBlockFunctionBody({)
+            endBlockFunctionBody(0, {, })
+          endConstructor(DeclarationKind.Class, const, new, (, null, })
+        endMember()
+      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
+    endClassDeclaration(class, })
+  endTopLevelDeclaration(})
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.intertwined.expect
new file mode 100644
index 0000000..467f954
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.intertwined.expect
@@ -0,0 +1,435 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables({)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              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, {)
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, C)
+              parseMetadataStar({)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType({)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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: endConstructor(DeclarationKind.Class, new, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(i, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(i)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(i, i)
+                            listener: handleDotAccess(., i, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(;)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(i, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(i)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(i, i)
+                            listener: handleDotAccess(., i, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, new)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(new)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, new, new, C)
+                listener: handleNoType(})
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, new, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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: endConstructor(DeclarationKind.Class, const, new, (, null, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(i, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(i)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(i, i)
+                            listener: handleDotAccess(., i, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: handleEmptyFunctionBody(;)
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, ;)
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
+              parseMetadataStar(;)
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(;, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, MemberKind.NonStaticMethod)
+                    parseFormalParametersRest((, MemberKind.NonStaticMethod)
+                      listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+                      listener: endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
+                parseInitializersOpt())
+                  parseInitializers(:)
+                    listener: beginInitializers(:)
+                    parseInitializer(:)
+                      listener: beginInitializer(this)
+                      parseInitializerExpressionRest(:)
+                        parseExpression(:)
+                          looksLikeOuterPatternEquals(:)
+                            skipOuterPattern(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseThisExpression(:, expression)
+                                  listener: handleThisExpression(this, expression)
+                            parsePrimary(., expressionContinuation, ConstantPatternContext.none)
+                              parseSendOrFunctionLiteral(., expressionContinuation, ConstantPatternContext.none)
+                                parseSend(., expressionContinuation, ConstantPatternContext.none)
+                                  ensureIdentifier(., expressionContinuation)
+                                    listener: handleIdentifier(i, expressionContinuation)
+                                  listener: handleNoTypeArguments(=)
+                                  parseArgumentsOpt(i)
+                                    listener: handleNoArguments(=)
+                                  listener: handleSend(i, i)
+                            listener: handleDotAccess(., i, false)
+                            parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(=, true, ConstantPatternContext.none)
+                                parsePrimary(=, expression, ConstantPatternContext.none)
+                                  parseLiteralInt(=)
+                                    listener: handleLiteralInt(0)
+                            listener: handleAssignmentExpression(=, 0)
+                        listener: endInitializer(0)
+                    listener: endInitializers(1, :, 0)
+                parseAsyncModifierOpt(0)
+                  listener: handleAsyncModifier(null, null)
+                  inPlainSync()
+                inPlainSync()
+                parseFunctionBody(0, false, true)
+                  listener: beginBlockFunctionBody({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, :, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, const)
+            parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, C)
+              parseMetadataStar(})
+                listener: beginMetadataStar(const)
+                listener: endMetadataStar(0)
+              listener: beginMember()
+              parseMethod(}, null, null, null, null, null, null, const, const, NoType(), null, new, new, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, const, null, new, new, C)
+                listener: handleNoType(const)
+                listener: handleIdentifier(C, methodDeclaration)
+                parseQualifiedRestOpt(C, methodDeclarationContinuation)
+                  parseQualifiedRest(C, methodDeclarationContinuation)
+                    ensureIdentifier(., methodDeclarationContinuation)
+                      listener: handleIdentifier(named, methodDeclarationContinuation)
+                    listener: handleQualified(.)
+                reportRecoverableError(C, NewConstructorQualifiedName)
+                  listener: handleRecoverableError(NewConstructorQualifiedName, C, C)
+                parseMethodTypeVar(named)
+                  listener: handleNoTypeVariables(()
+                parseGetterOrFormalParameters(named, new, false, MemberKind.NonStaticMethod)
+                  parseFormalParameters(named, 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({)
+                  notEofOrType(CLOSE_CURLY_BRACKET, })
+                  listener: endBlockFunctionBody(0, {, })
+                listener: endConstructor(DeclarationKind.Class, const, new, (, null, })
+              listener: endMember()
+            notEofOrType(CLOSE_CURLY_BRACKET, })
+            listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
+          listener: endClassDeclaration(class, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.parser.expect
new file mode 100644
index 0000000..385050c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.parser.expect
@@ -0,0 +1,23 @@
+class C {
+new C.named();
+new C.named() : this.i = 0;
+new C.named() : this.i = 0 {}
+new C.named() {}
+const new C.named();
+const new C.named() : this.i = 0;
+const new C.named() : this.i = 0 {}
+const new C.named() {}
+}
+
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.scanner.expect
new file mode 100644
index 0000000..385050c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/new_qualified_name.dart.scanner.expect
@@ -0,0 +1,23 @@
+class C {
+new C.named();
+new C.named() : this.i = 0;
+new C.named() : this.i = 0 {}
+new C.named() {}
+const new C.named();
+const new C.named() : this.i = 0;
+const new C.named() : this.i = 0 {}
+const new C.named() {}
+}
+
+
+class[KeywordToken] C[StringToken] {[BeginToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken];[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] :[SimpleToken] this[KeywordToken].[SimpleToken]i[StringToken] =[SimpleToken] 0[StringToken] {[BeginToken]}[SimpleToken]
+const[KeywordToken] new[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart
new file mode 100644
index 0000000..2bd98b5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart
@@ -0,0 +1,80 @@
+class C;
+class C extends O;
+class C extends O implements I;
+class C extends O with M implements I;
+class C extends O with M;
+class C implements I;
+class C with M implements I;
+class C with M;
+class C<T>;
+class C<T> extends O<T>;
+class C<T> extends O<T> implements I<T>;
+class C<T> extends O<T> with M<T> implements I<T>;
+class C<T> extends O<T> with M<T>;
+class C<T> implements I<T>;
+class C<T> with M<T> implements I<T>;
+class C<T> with M<T>;
+class C();
+class C() extends O;
+class C() extends O implements I;
+class C() extends O with M implements I;
+class C() extends O with M;
+class C() implements I;
+class C() with M implements I;
+class C() with M;
+class C<T>();
+class C<T>() extends O<T>;
+class C<T>() extends O<T> implements I<T>;
+class C<T>() extends O<T> with M<T> implements I<T>;
+class C<T>() extends O<T> with M<T>;
+class C<T>() implements I<T>;
+class C<T>() with M<T> implements I<T>;
+class C<T>() with M<T>;
+class const C();
+class const C() extends O;
+class const C() extends O implements I;
+class const C() extends O with M implements I;
+class const C() extends O with M;
+class const C() implements I;
+class const C() with M implements I;
+class const C() with M;
+class const C<T>();
+class const C<T>() extends O<T>;
+class const C<T>() extends O<T> implements I<T>;
+class const C<T>() extends O<T> with M<T> implements I<T>;
+class const C<T>() extends O<T> with M<T>;
+class const C<T>() implements I<T>;
+class const C<T>() with M<T> implements I<T>;
+class const C<T>() with M<T>;
+class C.named();
+class C.named() extends O;
+class C.named() extends O implements I;
+class C.named() extends O with M implements I;
+class C.named() extends O with M;
+class C.named() implements I;
+class C.named() with M implements I;
+class C.named() with M;
+class C<T>.named();
+class C<T>.named() extends O<T>;
+class C<T>.named() extends O<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T>;
+class C<T>.named() implements I<T>;
+class C<T>.named() with M<T> implements I<T>;
+class C<T>.named() with M<T>;
+class const C.named();
+class const C.named() extends O;
+class const C.named() extends O implements I;
+class const C.named() extends O with M implements I;
+class const C.named() extends O with M;
+class const C.named() implements I;
+class const C.named() with M implements I;
+class const C.named() with M;
+class const C<T>.named();
+class const C<T>.named() extends O<T>;
+class const C<T>.named() extends O<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T>;
+class const C<T>.named() implements I<T>;
+class const C<T>.named() with M<T> implements I<T>;
+class const C<T>.named() with M<T>;
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.expect
new file mode 100644
index 0000000..3ba8ff2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.expect
@@ -0,0 +1,2386 @@
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(;)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(implements)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(with)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(with)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+endCompilationUnit(80, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.intertwined.expect
new file mode 100644
index 0000000..ad663de
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.intertwined.expect
@@ -0,0 +1,3510 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(;)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(implements)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(with)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(with)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(80, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.parser.expect
new file mode 100644
index 0000000..5631b3a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.parser.expect
@@ -0,0 +1,163 @@
+class C;
+class C extends O;
+class C extends O implements I;
+class C extends O with M implements I;
+class C extends O with M;
+class C implements I;
+class C with M implements I;
+class C with M;
+class C<T>;
+class C<T> extends O<T>;
+class C<T> extends O<T> implements I<T>;
+class C<T> extends O<T> with M<T> implements I<T>;
+class C<T> extends O<T> with M<T>;
+class C<T> implements I<T>;
+class C<T> with M<T> implements I<T>;
+class C<T> with M<T>;
+class C();
+class C() extends O;
+class C() extends O implements I;
+class C() extends O with M implements I;
+class C() extends O with M;
+class C() implements I;
+class C() with M implements I;
+class C() with M;
+class C<T>();
+class C<T>() extends O<T>;
+class C<T>() extends O<T> implements I<T>;
+class C<T>() extends O<T> with M<T> implements I<T>;
+class C<T>() extends O<T> with M<T>;
+class C<T>() implements I<T>;
+class C<T>() with M<T> implements I<T>;
+class C<T>() with M<T>;
+class const C();
+class const C() extends O;
+class const C() extends O implements I;
+class const C() extends O with M implements I;
+class const C() extends O with M;
+class const C() implements I;
+class const C() with M implements I;
+class const C() with M;
+class const C<T>();
+class const C<T>() extends O<T>;
+class const C<T>() extends O<T> implements I<T>;
+class const C<T>() extends O<T> with M<T> implements I<T>;
+class const C<T>() extends O<T> with M<T>;
+class const C<T>() implements I<T>;
+class const C<T>() with M<T> implements I<T>;
+class const C<T>() with M<T>;
+class C.named();
+class C.named() extends O;
+class C.named() extends O implements I;
+class C.named() extends O with M implements I;
+class C.named() extends O with M;
+class C.named() implements I;
+class C.named() with M implements I;
+class C.named() with M;
+class C<T>.named();
+class C<T>.named() extends O<T>;
+class C<T>.named() extends O<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T>;
+class C<T>.named() implements I<T>;
+class C<T>.named() with M<T> implements I<T>;
+class C<T>.named() with M<T>;
+class const C.named();
+class const C.named() extends O;
+class const C.named() extends O implements I;
+class const C.named() extends O with M implements I;
+class const C.named() extends O with M;
+class const C.named() implements I;
+class const C.named() with M implements I;
+class const C.named() with M;
+class const C<T>.named();
+class const C<T>.named() extends O<T>;
+class const C<T>.named() extends O<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T>;
+class const C<T>.named() implements I<T>;
+class const C<T>.named() with M<T> implements I<T>;
+class const C<T>.named() with M<T>;
+
+
+class[KeywordToken] C[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.scanner.expect
new file mode 100644
index 0000000..5631b3a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_body.dart.scanner.expect
@@ -0,0 +1,163 @@
+class C;
+class C extends O;
+class C extends O implements I;
+class C extends O with M implements I;
+class C extends O with M;
+class C implements I;
+class C with M implements I;
+class C with M;
+class C<T>;
+class C<T> extends O<T>;
+class C<T> extends O<T> implements I<T>;
+class C<T> extends O<T> with M<T> implements I<T>;
+class C<T> extends O<T> with M<T>;
+class C<T> implements I<T>;
+class C<T> with M<T> implements I<T>;
+class C<T> with M<T>;
+class C();
+class C() extends O;
+class C() extends O implements I;
+class C() extends O with M implements I;
+class C() extends O with M;
+class C() implements I;
+class C() with M implements I;
+class C() with M;
+class C<T>();
+class C<T>() extends O<T>;
+class C<T>() extends O<T> implements I<T>;
+class C<T>() extends O<T> with M<T> implements I<T>;
+class C<T>() extends O<T> with M<T>;
+class C<T>() implements I<T>;
+class C<T>() with M<T> implements I<T>;
+class C<T>() with M<T>;
+class const C();
+class const C() extends O;
+class const C() extends O implements I;
+class const C() extends O with M implements I;
+class const C() extends O with M;
+class const C() implements I;
+class const C() with M implements I;
+class const C() with M;
+class const C<T>();
+class const C<T>() extends O<T>;
+class const C<T>() extends O<T> implements I<T>;
+class const C<T>() extends O<T> with M<T> implements I<T>;
+class const C<T>() extends O<T> with M<T>;
+class const C<T>() implements I<T>;
+class const C<T>() with M<T> implements I<T>;
+class const C<T>() with M<T>;
+class C.named();
+class C.named() extends O;
+class C.named() extends O implements I;
+class C.named() extends O with M implements I;
+class C.named() extends O with M;
+class C.named() implements I;
+class C.named() with M implements I;
+class C.named() with M;
+class C<T>.named();
+class C<T>.named() extends O<T>;
+class C<T>.named() extends O<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T>;
+class C<T>.named() implements I<T>;
+class C<T>.named() with M<T> implements I<T>;
+class C<T>.named() with M<T>;
+class const C.named();
+class const C.named() extends O;
+class const C.named() extends O implements I;
+class const C.named() extends O with M implements I;
+class const C.named() extends O with M;
+class const C.named() implements I;
+class const C.named() with M implements I;
+class const C.named() with M;
+class const C<T>.named();
+class const C<T>.named() extends O<T>;
+class const C<T>.named() extends O<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T>;
+class const C<T>.named() implements I<T>;
+class const C<T>.named() with M<T> implements I<T>;
+class const C<T>.named() with M<T>;
+
+
+class[KeywordToken] C[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart
new file mode 100644
index 0000000..8bb0b46
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart
@@ -0,0 +1,98 @@
+// @dart=3.10
+class C;
+class C extends O;
+class C extends O implements I;
+class C extends O with M implements I;
+class C extends O with M;
+class C implements I;
+class C with M implements I;
+class C with M;
+class C<T>;
+class C<T> extends O<T>;
+class C<T> extends O<T> implements I<T>;
+class C<T> extends O<T> with M<T> implements I<T>;
+class C<T> extends O<T> with M<T>;
+class C<T> implements I<T>;
+class C<T> with M<T> implements I<T>;
+class C<T> with M<T>;
+class C();
+class C() extends O;
+class C() extends O implements I;
+class C() extends O with M implements I;
+class C() extends O with M;
+class C() implements I;
+class C() with M implements I;
+class C() with M;
+class C<T>();
+class C<T>() extends O<T>;
+class C<T>() extends O<T> implements I<T>;
+class C<T>() extends O<T> with M<T> implements I<T>;
+class C<T>() extends O<T> with M<T>;
+class C<T>() implements I<T>;
+class C<T>() with M<T> implements I<T>;
+class C<T>() with M<T>;
+class const C();
+class const C() extends O;
+class const C() extends O implements I;
+class const C() extends O with M implements I;
+class const C() extends O with M;
+class const C() implements I;
+class const C() with M implements I;
+class const C() with M;
+class const C<T>();
+class const C<T>() extends O<T>;
+class const C<T>() extends O<T> implements I<T>;
+class const C<T>() extends O<T> with M<T> implements I<T>;
+class const C<T>() extends O<T> with M<T>;
+class const C<T>() implements I<T>;
+class const C<T>() with M<T> implements I<T>;
+class const C<T>() with M<T>;
+class C.named();
+class C.named() extends O;
+class C.named() extends O implements I;
+class C.named() extends O with M implements I;
+class C.named() extends O with M;
+class C.named() implements I;
+class C.named() with M implements I;
+class C.named() with M;
+class C<T>.named();
+class C<T>.named() extends O<T>;
+class C<T>.named() extends O<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T>;
+class C<T>.named() implements I<T>;
+class C<T>.named() with M<T> implements I<T>;
+class C<T>.named() with M<T>;
+class const C.named();
+class const C.named() extends O;
+class const C.named() extends O implements I;
+class const C.named() extends O with M implements I;
+class const C.named() extends O with M;
+class const C.named() implements I;
+class const C.named() with M implements I;
+class const C.named() with M;
+class const C<T>.named();
+class const C<T>.named() extends O<T>;
+class const C<T>.named() extends O<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T>;
+class const C<T>.named() implements I<T>;
+class const C<T>.named() with M<T> implements I<T>;
+class const C<T>.named() with M<T>;
+
+extension type ET(int i);
+extension type ET(int i) implements I;
+extension type ET<T>(int i);
+extension type ET<T>(int i) implements I<T>;
+extension type const ET(int i);
+extension type const ET(int i) implements I;
+extension type const ET<T>(int i);
+extension type const ET<T>(int i) implements I<T>;
+extension type ET.named(int i);
+extension type ET.named(int i) implements I;
+extension type ET<T>.named(int i);
+extension type ET<T>.named(int i) implements I<T>;
+extension type const ET.named(int i);
+extension type const ET.named(int i) implements I;
+extension type const ET<T>.named(int i);
+extension type const ET<T>.named(int i) implements I<T>;
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.expect
new file mode 100644
index 0000000..a017561
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.expect
@@ -0,0 +1,3332 @@
+Problems reported:
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:2:8: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C;
+       ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:3:18: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C extends O;
+                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:4:31: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C extends O implements I;
+                              ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:5:38: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C extends O with M implements I;
+                                     ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:6:25: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C extends O with M;
+                        ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:7:21: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C implements I;
+                    ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:8:28: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C with M implements I;
+                           ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:9:15: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C with M;
+              ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:10:11: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>;
+          ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:11:24: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> extends O<T>;
+                       ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:12:40: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> extends O<T> implements I<T>;
+                                       ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:13:50: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> extends O<T> with M<T> implements I<T>;
+                                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:14:34: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> extends O<T> with M<T>;
+                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:15:27: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> implements I<T>;
+                          ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:16:37: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> with M<T> implements I<T>;
+                                    ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:17:21: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T> with M<T>;
+                    ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:18:10: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C();
+         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:19:20: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() extends O;
+                   ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:20:33: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() extends O implements I;
+                                ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:21:40: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() extends O with M implements I;
+                                       ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:22:27: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() extends O with M;
+                          ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:23:23: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() implements I;
+                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:24:30: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() with M implements I;
+                             ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:25:17: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C() with M;
+                ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:26:13: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>();
+            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:27:26: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() extends O<T>;
+                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:28:42: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() extends O<T> implements I<T>;
+                                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:29:52: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() extends O<T> with M<T> implements I<T>;
+                                                   ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:30:36: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() extends O<T> with M<T>;
+                                   ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:31:29: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() implements I<T>;
+                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:32:39: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() with M<T> implements I<T>;
+                                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:33:23: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>() with M<T>;
+                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:34:16: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C();
+               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:35:26: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() extends O;
+                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:36:39: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() extends O implements I;
+                                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:37:46: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() extends O with M implements I;
+                                             ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:38:33: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() extends O with M;
+                                ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:39:29: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() implements I;
+                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:40:36: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() with M implements I;
+                                   ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:41:23: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C() with M;
+                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:42:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>();
+                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:43:32: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() extends O<T>;
+                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:44:48: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() extends O<T> implements I<T>;
+                                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:45:58: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() extends O<T> with M<T> implements I<T>;
+                                                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:46:42: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() extends O<T> with M<T>;
+                                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:47:35: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() implements I<T>;
+                                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:48:45: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() with M<T> implements I<T>;
+                                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:49:29: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>() with M<T>;
+                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:50:16: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named();
+               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:51:26: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() extends O;
+                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:52:39: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() extends O implements I;
+                                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:53:46: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() extends O with M implements I;
+                                             ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:54:33: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() extends O with M;
+                                ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:55:29: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() implements I;
+                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:56:36: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() with M implements I;
+                                   ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:57:23: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C.named() with M;
+                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:58:19: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named();
+                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:59:32: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() extends O<T>;
+                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:60:48: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() extends O<T> implements I<T>;
+                                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:61:58: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+                                                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:62:42: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() extends O<T> with M<T>;
+                                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:63:35: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() implements I<T>;
+                                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:64:45: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() with M<T> implements I<T>;
+                                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:65:29: This requires the experimental 'primary-constructors' language feature to be enabled.
+class C<T>.named() with M<T>;
+                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:66:22: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named();
+                     ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:67:32: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() extends O;
+                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:68:45: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() extends O implements I;
+                                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:69:52: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() extends O with M implements I;
+                                                   ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:70:39: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() extends O with M;
+                                      ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:71:35: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() implements I;
+                                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:72:42: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() with M implements I;
+                                         ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:73:29: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C.named() with M;
+                            ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:74:25: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named();
+                        ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:75:38: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() extends O<T>;
+                                     ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:76:54: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() extends O<T> implements I<T>;
+                                                     ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:77:64: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+                                                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:78:48: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() extends O<T> with M<T>;
+                                               ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:79:41: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() implements I<T>;
+                                        ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:80:51: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() with M<T> implements I<T>;
+                                                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:81:35: This requires the experimental 'primary-constructors' language feature to be enabled.
+class const C<T>.named() with M<T>;
+                                  ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:83:25: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(int i);
+                        ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:84:38: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET(int i) implements I;
+                                     ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:85:28: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET<T>(int i);
+                           ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:86:44: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET<T>(int i) implements I<T>;
+                                           ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:87:31: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET(int i);
+                              ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:88:44: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET(int i) implements I;
+                                           ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:89:34: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET<T>(int i);
+                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:90:50: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET<T>(int i) implements I<T>;
+                                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:91:31: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET.named(int i);
+                              ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:92:44: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET.named(int i) implements I;
+                                           ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:93:34: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET<T>.named(int i);
+                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:94:50: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type ET<T>.named(int i) implements I<T>;
+                                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:95:37: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET.named(int i);
+                                    ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:96:50: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET.named(int i) implements I;
+                                                 ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:97:40: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET<T>.named(int i);
+                                       ^
+
+parser/primary_constructors/no_class_extension_type_body_pre_feature:98:56: This requires the experimental 'primary-constructors' language feature to be enabled.
+extension type const ET<T>.named(int i) implements I<T>;
+                                                       ^
+
+beginCompilationUnit(class)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(;)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(extends)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(implements)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(with)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(with)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(C, null, false)
+      handleNoType(C)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      handleNoPrimaryConstructor(>, null, false)
+      handleNoType(>)
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(()
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(;)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(implements)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      handleNoTypeArguments(with)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(implements)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    handleNoTypeVariables(.)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        handleNoTypeArguments(;)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleIdentifier(O, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(O, null)
+      handleClassExtends(extends, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      handleClassNoWithClause()
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(class)
+  endMetadataStar(0)
+  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+    handleIdentifier(C, classOrMixinDeclaration)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+        endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, false)
+      handleNoType())
+      handleClassExtends(null, 1)
+      beginTypeList(M)
+        handleIdentifier(M, typeReference)
+        beginTypeArguments(<)
+          handleIdentifier(T, typeReference)
+          handleNoTypeArguments(>)
+          handleType(T, null)
+        endTypeArguments(1, <, >)
+        handleType(M, null)
+      endTypeList(1)
+      handleClassWithClause(with)
+      handleImplements(null, 0)
+      handleClassHeader(class, class, null)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoClassBody(;)
+    endClassDeclaration(class, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+endCompilationUnit(96, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.intertwined.expect
new file mode 100644
index 0000000..7bd0b1f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.intertwined.expect
@@ -0,0 +1,4366 @@
+parseUnit(class)
+  skipErrorTokens(class)
+  listener: beginCompilationUnit(class)
+  syntheticPreviousToken(class)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, , class, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(;)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(extends)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, C, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(implements)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(C)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(with)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(with)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: handleNoPrimaryConstructor(C, null, false)
+          parseClassHeaderOpt(C, class, class)
+            parseClassExtendsOpt(C, DeclarationHeaderKind.Class)
+              listener: handleNoType(C)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(C)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, >, DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: handleNoPrimaryConstructor(>, null, false)
+          parseClassHeaderOpt(>, class, class)
+            parseClassExtendsOpt(>, DeclarationHeaderKind.Class)
+              listener: handleNoType(>)
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(()
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(C, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, null, C)
+          parsePrimaryConstructorOpt(C, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(class, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, null, C)
+          parsePrimaryConstructorOpt(>, null, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(O)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: handleNoTypeArguments(with)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(O)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(implements)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleIdentifier(I, typeReference)
+              listener: handleNoTypeArguments(;)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: handleNoTypeVariables(.)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(C, class, class, const, C)
+          parsePrimaryConstructorOpt(C, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: handleNoTypeArguments(;)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(M)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              parseClassExtendsSeenExtendsClause(extends, ), DeclarationHeaderKind.Class)
+                listener: handleIdentifier(O, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(O, null)
+                listener: handleClassExtends(extends, 1)
+            parseClassWithClauseOpt(>)
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              listener: handleClassNoWithClause()
+            parseClassOrMixinOrEnumImplementsOpt())
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleIdentifier(I, typeReference)
+              listener: beginTypeArguments(<)
+              listener: handleIdentifier(T, typeReference)
+              listener: handleNoTypeArguments(>)
+              listener: handleType(T, null)
+              listener: endTypeArguments(1, <, >)
+              listener: handleType(I, null)
+              listener: handleImplements(implements, 1)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(class)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(class, ;, class, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseClassOrNamedMixinApplication(class, null, null, null, null, null, null, null, null, class)
+        listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+        ensureIdentifier(const, classOrMixinDeclaration)
+          listener: handleIdentifier(C, classOrMixinDeclaration)
+        listener: beginTypeVariables(<)
+        listener: beginMetadataStar(T)
+        listener: endMetadataStar(0)
+        listener: handleIdentifier(T, typeVariableDeclaration)
+        listener: beginTypeVariable(T)
+        listener: handleTypeVariablesDefined(T, 1)
+        listener: handleNoType(T)
+        listener: endTypeVariable(>, 0, null, null)
+        listener: endTypeVariables(<, >)
+        listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, C)
+        parseClass(>, class, class, const, C)
+          parsePrimaryConstructorOpt(>, const, false)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(0, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, false)
+          parseClassHeaderOpt(), class, class)
+            parseClassExtendsOpt(), DeclarationHeaderKind.Class)
+              listener: handleNoType())
+              listener: handleClassExtends(null, 1)
+            parseClassWithClauseOpt())
+              parseTypeList(with)
+                listener: beginTypeList(M)
+                listener: handleIdentifier(M, typeReference)
+                listener: beginTypeArguments(<)
+                listener: handleIdentifier(T, typeReference)
+                listener: handleNoTypeArguments(>)
+                listener: handleType(T, null)
+                listener: endTypeArguments(1, <, >)
+                listener: handleType(M, null)
+                listener: endTypeList(1)
+              listener: handleClassWithClause(with)
+            parseClassOrMixinOrEnumImplementsOpt(>)
+              listener: handleImplements(null, 0)
+            listener: handleClassHeader(class, class, null)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoClassBody(;)
+          listener: endClassDeclaration(class, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          reportExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+            listener: handleExperimentNotEnabled(ExperimentalFlag.primaryConstructors, ;, ;)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  reportAllErrorTokens(class)
+  listener: endCompilationUnit(96, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.parser.expect
new file mode 100644
index 0000000..60d4b1a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.parser.expect
@@ -0,0 +1,197 @@
+class C;
+class C extends O;
+class C extends O implements I;
+class C extends O with M implements I;
+class C extends O with M;
+class C implements I;
+class C with M implements I;
+class C with M;
+class C<T>;
+class C<T> extends O<T>;
+class C<T> extends O<T> implements I<T>;
+class C<T> extends O<T> with M<T> implements I<T>;
+class C<T> extends O<T> with M<T>;
+class C<T> implements I<T>;
+class C<T> with M<T> implements I<T>;
+class C<T> with M<T>;
+class C();
+class C() extends O;
+class C() extends O implements I;
+class C() extends O with M implements I;
+class C() extends O with M;
+class C() implements I;
+class C() with M implements I;
+class C() with M;
+class C<T>();
+class C<T>() extends O<T>;
+class C<T>() extends O<T> implements I<T>;
+class C<T>() extends O<T> with M<T> implements I<T>;
+class C<T>() extends O<T> with M<T>;
+class C<T>() implements I<T>;
+class C<T>() with M<T> implements I<T>;
+class C<T>() with M<T>;
+class const C();
+class const C() extends O;
+class const C() extends O implements I;
+class const C() extends O with M implements I;
+class const C() extends O with M;
+class const C() implements I;
+class const C() with M implements I;
+class const C() with M;
+class const C<T>();
+class const C<T>() extends O<T>;
+class const C<T>() extends O<T> implements I<T>;
+class const C<T>() extends O<T> with M<T> implements I<T>;
+class const C<T>() extends O<T> with M<T>;
+class const C<T>() implements I<T>;
+class const C<T>() with M<T> implements I<T>;
+class const C<T>() with M<T>;
+class C.named();
+class C.named() extends O;
+class C.named() extends O implements I;
+class C.named() extends O with M implements I;
+class C.named() extends O with M;
+class C.named() implements I;
+class C.named() with M implements I;
+class C.named() with M;
+class C<T>.named();
+class C<T>.named() extends O<T>;
+class C<T>.named() extends O<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T>;
+class C<T>.named() implements I<T>;
+class C<T>.named() with M<T> implements I<T>;
+class C<T>.named() with M<T>;
+class const C.named();
+class const C.named() extends O;
+class const C.named() extends O implements I;
+class const C.named() extends O with M implements I;
+class const C.named() extends O with M;
+class const C.named() implements I;
+class const C.named() with M implements I;
+class const C.named() with M;
+class const C<T>.named();
+class const C<T>.named() extends O<T>;
+class const C<T>.named() extends O<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T>;
+class const C<T>.named() implements I<T>;
+class const C<T>.named() with M<T> implements I<T>;
+class const C<T>.named() with M<T>;
+
+extension type ET(int i);
+extension type ET(int i) implements I;
+extension type ET<T>(int i);
+extension type ET<T>(int i) implements I<T>;
+extension type const ET(int i);
+extension type const ET(int i) implements I;
+extension type const ET<T>(int i);
+extension type const ET<T>(int i) implements I<T>;
+extension type ET.named(int i);
+extension type ET.named(int i) implements I;
+extension type ET<T>.named(int i);
+extension type ET<T>.named(int i) implements I<T>;
+extension type const ET.named(int i);
+extension type const ET.named(int i) implements I;
+extension type const ET<T>.named(int i);
+extension type const ET<T>.named(int i) implements I<T>;
+
+
+class[KeywordToken] C[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.scanner.expect
new file mode 100644
index 0000000..60d4b1a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_class_extension_type_body_pre_feature.dart.scanner.expect
@@ -0,0 +1,197 @@
+class C;
+class C extends O;
+class C extends O implements I;
+class C extends O with M implements I;
+class C extends O with M;
+class C implements I;
+class C with M implements I;
+class C with M;
+class C<T>;
+class C<T> extends O<T>;
+class C<T> extends O<T> implements I<T>;
+class C<T> extends O<T> with M<T> implements I<T>;
+class C<T> extends O<T> with M<T>;
+class C<T> implements I<T>;
+class C<T> with M<T> implements I<T>;
+class C<T> with M<T>;
+class C();
+class C() extends O;
+class C() extends O implements I;
+class C() extends O with M implements I;
+class C() extends O with M;
+class C() implements I;
+class C() with M implements I;
+class C() with M;
+class C<T>();
+class C<T>() extends O<T>;
+class C<T>() extends O<T> implements I<T>;
+class C<T>() extends O<T> with M<T> implements I<T>;
+class C<T>() extends O<T> with M<T>;
+class C<T>() implements I<T>;
+class C<T>() with M<T> implements I<T>;
+class C<T>() with M<T>;
+class const C();
+class const C() extends O;
+class const C() extends O implements I;
+class const C() extends O with M implements I;
+class const C() extends O with M;
+class const C() implements I;
+class const C() with M implements I;
+class const C() with M;
+class const C<T>();
+class const C<T>() extends O<T>;
+class const C<T>() extends O<T> implements I<T>;
+class const C<T>() extends O<T> with M<T> implements I<T>;
+class const C<T>() extends O<T> with M<T>;
+class const C<T>() implements I<T>;
+class const C<T>() with M<T> implements I<T>;
+class const C<T>() with M<T>;
+class C.named();
+class C.named() extends O;
+class C.named() extends O implements I;
+class C.named() extends O with M implements I;
+class C.named() extends O with M;
+class C.named() implements I;
+class C.named() with M implements I;
+class C.named() with M;
+class C<T>.named();
+class C<T>.named() extends O<T>;
+class C<T>.named() extends O<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T> implements I<T>;
+class C<T>.named() extends O<T> with M<T>;
+class C<T>.named() implements I<T>;
+class C<T>.named() with M<T> implements I<T>;
+class C<T>.named() with M<T>;
+class const C.named();
+class const C.named() extends O;
+class const C.named() extends O implements I;
+class const C.named() extends O with M implements I;
+class const C.named() extends O with M;
+class const C.named() implements I;
+class const C.named() with M implements I;
+class const C.named() with M;
+class const C<T>.named();
+class const C<T>.named() extends O<T>;
+class const C<T>.named() extends O<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T> implements I<T>;
+class const C<T>.named() extends O<T> with M<T>;
+class const C<T>.named() implements I<T>;
+class const C<T>.named() with M<T> implements I<T>;
+class const C<T>.named() with M<T>;
+
+extension type ET(int i);
+extension type ET(int i) implements I;
+extension type ET<T>(int i);
+extension type ET<T>(int i) implements I<T>;
+extension type const ET(int i);
+extension type const ET(int i) implements I;
+extension type const ET<T>(int i);
+extension type const ET<T>(int i) implements I<T>;
+extension type ET.named(int i);
+extension type ET.named(int i) implements I;
+extension type ET<T>.named(int i);
+extension type ET<T>.named(int i) implements I<T>;
+extension type const ET.named(int i);
+extension type const ET.named(int i) implements I;
+extension type const ET<T>.named(int i);
+extension type const ET<T>.named(int i) implements I<T>;
+
+
+class[KeywordToken] C[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] extends[KeywordToken] O[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] C[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken])[SimpleToken] with[KeywordToken] M[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart
new file mode 100644
index 0000000..868b547
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart
@@ -0,0 +1,16 @@
+extension type ET(int i);
+extension type ET(int i) implements I;
+extension type ET<T>(int i);
+extension type ET<T>(int i) implements I<T>;
+extension type const ET(int i);
+extension type const ET(int i) implements I;
+extension type const ET<T>(int i);
+extension type const ET<T>(int i) implements I<T>;
+extension type ET.named(int i);
+extension type ET.named(int i) implements I;
+extension type ET<T>.named(int i);
+extension type ET<T>.named(int i) implements I<T>;
+extension type const ET.named(int i);
+extension type const ET.named(int i) implements I;
+extension type const ET<T>.named(int i);
+extension type const ET<T>.named(int i) implements I<T>;
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.expect b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.expect
new file mode 100644
index 0000000..69eb83b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.expect
@@ -0,0 +1,466 @@
+beginCompilationUnit(extension)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, null, false, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(()
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(()
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor((, const, false, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., null, true, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    handleNoTypeVariables(.)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleIdentifier(I, typeReference)
+      handleNoTypeArguments(;)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleImplements(null, 0)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(extension)
+  endMetadataStar(0)
+  beginExtensionDeclarationPrelude(extension)
+    beginTypeVariables(<)
+      beginMetadataStar(T)
+      endMetadataStar(0)
+      handleIdentifier(T, typeVariableDeclaration)
+      beginTypeVariable(T)
+        handleTypeVariablesDefined(T, 1)
+        handleNoType(T)
+      endTypeVariable(>, 0, null, null)
+    endTypeVariables(<, >)
+    beginExtensionTypeDeclaration(null, extension, ET)
+      beginPrimaryConstructor(.)
+        handleIdentifier(named, primaryConstructorDeclaration)
+        beginFormalParameters((, MemberKind.PrimaryConstructor)
+          beginMetadataStar(int)
+          endMetadataStar(0)
+          beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments(i)
+            handleType(int, null)
+            handleIdentifier(i, formalParameterDeclaration)
+            handleFormalParameterWithoutValue())
+          endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+        endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+      endPrimaryConstructor(., const, true, true)
+      handleIdentifier(I, typeReference)
+      beginTypeArguments(<)
+        handleIdentifier(T, typeReference)
+        handleNoTypeArguments(>)
+        handleType(T, null)
+      endTypeArguments(1, <, >)
+      handleType(I, null)
+      handleImplements(implements, 1)
+      handleNoExtensionTypeBody(;)
+    endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  endTopLevelDeclaration(;)
+endCompilationUnit(16, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.intertwined.expect b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.intertwined.expect
new file mode 100644
index 0000000..c418237
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.intertwined.expect
@@ -0,0 +1,670 @@
+parseUnit(extension)
+  skipErrorTokens(extension)
+  listener: beginCompilationUnit(extension)
+  syntheticPreviousToken(extension)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, , extension, null, null, null, null, DirectiveContext(DirectiveState.Unknown))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, null, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(()
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(ET, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(()
+            parseFormalParameters(>, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor((, const, false, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, null, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., null, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: handleNoTypeVariables(.)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(ET, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: handleNoTypeArguments(;)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleImplements(null, 0)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(extension)
+      listener: endMetadataStar(0)
+    parseTopLevelKeywordDeclaration(extension, ;, extension, null, null, null, null, DirectiveContext(DirectiveState.Declarations))
+      parseExtension(extension, null, extension)
+        listener: beginExtensionDeclarationPrelude(extension)
+        parseExtensionTypeDeclaration(extension, type, null, extension, type)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+          listener: beginExtensionTypeDeclaration(null, extension, ET)
+          parsePrimaryConstructorOpt(>, const, true)
+            listener: beginPrimaryConstructor(.)
+            ensureIdentifier(., primaryConstructorDeclaration)
+              listener: handleIdentifier(named, primaryConstructorDeclaration)
+            parseFormalParameters(named, MemberKind.PrimaryConstructor)
+              parseFormalParametersRest((, MemberKind.PrimaryConstructor)
+                listener: beginFormalParameters((, MemberKind.PrimaryConstructor)
+                parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                  parseMetadataStar(()
+                    listener: beginMetadataStar(int)
+                    listener: endMetadataStar(0)
+                  listener: beginFormalParameter(int, MemberKind.PrimaryConstructor, null, null, null)
+                  listener: handleIdentifier(int, typeReference)
+                  listener: handleNoTypeArguments(i)
+                  listener: handleType(int, null)
+                  ensureIdentifier(int, formalParameterDeclaration)
+                    listener: handleIdentifier(i, formalParameterDeclaration)
+                  listener: handleFormalParameterWithoutValue())
+                  listener: endFormalParameter(null, null, null, null, i, null, null, FormalParameterKind.requiredPositional, MemberKind.PrimaryConstructor)
+                listener: endFormalParameters(1, (, ), MemberKind.PrimaryConstructor)
+            listener: endPrimaryConstructor(., const, true, true)
+          parseClassOrMixinOrEnumImplementsOpt())
+            listener: handleIdentifier(I, typeReference)
+            listener: beginTypeArguments(<)
+            listener: handleIdentifier(T, typeReference)
+            listener: handleNoTypeArguments(>)
+            listener: handleType(T, null)
+            listener: endTypeArguments(1, <, >)
+            listener: handleType(I, null)
+            listener: handleImplements(implements, 1)
+          listener: handleNoExtensionTypeBody(;)
+          listener: endExtensionTypeDeclaration(extension, null, extension, type, ;)
+  listener: endTopLevelDeclaration(;)
+  reportAllErrorTokens(extension)
+  listener: endCompilationUnit(16, )
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.parser.expect b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.parser.expect
new file mode 100644
index 0000000..7fadac6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.parser.expect
@@ -0,0 +1,35 @@
+extension type ET(int i);
+extension type ET(int i) implements I;
+extension type ET<T>(int i);
+extension type ET<T>(int i) implements I<T>;
+extension type const ET(int i);
+extension type const ET(int i) implements I;
+extension type const ET<T>(int i);
+extension type const ET<T>(int i) implements I<T>;
+extension type ET.named(int i);
+extension type ET.named(int i) implements I;
+extension type ET<T>.named(int i);
+extension type ET<T>.named(int i) implements I<T>;
+extension type const ET.named(int i);
+extension type const ET.named(int i) implements I;
+extension type const ET<T>.named(int i);
+extension type const ET<T>.named(int i) implements I<T>;
+
+
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.scanner.expect b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.scanner.expect
new file mode 100644
index 0000000..7fadac6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/primary_constructors/no_extension_type_body.dart.scanner.expect
@@ -0,0 +1,35 @@
+extension type ET(int i);
+extension type ET(int i) implements I;
+extension type ET<T>(int i);
+extension type ET<T>(int i) implements I<T>;
+extension type const ET(int i);
+extension type const ET(int i) implements I;
+extension type const ET<T>(int i);
+extension type const ET<T>(int i) implements I<T>;
+extension type ET.named(int i);
+extension type ET.named(int i) implements I;
+extension type ET<T>.named(int i);
+extension type ET<T>.named(int i) implements I<T>;
+extension type const ET.named(int i);
+extension type const ET.named(int i) implements I;
+extension type const ET<T>.named(int i);
+extension type const ET<T>.named(int i) implements I<T>;
+
+
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken];[SimpleToken]
+extension[KeywordToken] type[StringToken] const[KeywordToken] ET[StringToken]<[BeginToken]T[StringToken]>[SimpleToken].[SimpleToken]named[StringToken]([BeginToken]int[StringToken] i[StringToken])[SimpleToken] implements[KeywordToken] I[StringToken]<[BeginToken]T[StringToken]>[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.expect b/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.expect
index a40d4d8..8ff6902 100644
--- a/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.expect
+++ b/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.expect
@@ -15,7 +15,7 @@
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType({)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -50,12 +50,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -92,12 +92,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -134,12 +134,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -174,12 +174,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -216,12 +216,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
         beginMetadataStar(C)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
             handleNoType(;)
             handleIdentifier(C, methodDeclaration)
             handleNoTypeVariables(()
@@ -258,7 +258,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, C, (, null, ;)
+          endConstructor(DeclarationKind.Class, C, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.intertwined.expect
index 4c85022..384c2e0 100644
--- a/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/field_formal_parameter_with_explicit_record_type.dart.intertwined.expect
@@ -34,8 +34,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -93,7 +93,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -102,8 +102,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -165,7 +165,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -174,8 +174,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -237,7 +237,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -246,8 +246,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -305,7 +305,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -314,8 +314,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -377,7 +377,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, C)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, C)
@@ -386,8 +386,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, C, DeclarationKind.Class, C, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, C, C)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, C, DeclarationKind.Class, C, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, C, C)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(C, methodDeclaration)
@@ -449,7 +449,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, C, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, C, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
diff --git a/pkg/front_end/parser_testcases/record/is_and_as.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/is_and_as.dart.intertwined.expect
index 64f4e3e..4cc1b88 100644
--- a/pkg/front_end/parser_testcases/record/is_and_as.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/is_and_as.dart.intertwined.expect
@@ -42,6 +42,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
+                skipOuterPattern(final)
+                  skipObjectPatternRest(b)
                 looksLikeLocalFunction(b)
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
@@ -55,6 +57,9 @@
                     parseVariableInitializerOpt(b)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(a)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -75,9 +80,12 @@
             parseStatementX(;)
               parseIfStatement(;)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(a)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -133,6 +141,9 @@
                             looksLikeLocalFunction(print)
                             parseExpressionStatement({)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
+                                    skipObjectPatternRest(print)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -161,6 +172,8 @@
           parseStatement(})
             parseStatementX(})
               parseExpressionStatementOrDeclarationAfterModifiers(final, }, null, final, null, null)
+                skipOuterPattern(final)
+                  skipObjectPatternRest(c)
                 looksLikeLocalFunction(c)
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
@@ -174,6 +187,9 @@
                     parseVariableInitializerOpt(c)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(b)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/is_record_conditional_expression.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/is_record_conditional_expression.dart.intertwined.expect
index e0c55b4..de188a9 100644
--- a/pkg/front_end/parser_testcases/record/is_record_conditional_expression.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/is_record_conditional_expression.dart.intertwined.expect
@@ -42,6 +42,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
+                skipOuterPattern(final)
+                  skipObjectPatternRest(b)
                 looksLikeLocalFunction(b)
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
@@ -55,6 +57,9 @@
                     parseVariableInitializerOpt(b)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
+                            skipObjectPatternRest(a)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/issue_52365.dart.expect b/pkg/front_end/parser_testcases/record/issue_52365.dart.expect
index 63ef00f..d154e36 100644
--- a/pkg/front_end/parser_testcases/record/issue_52365.dart.expect
+++ b/pkg/front_end/parser_testcases/record/issue_52365.dart.expect
@@ -703,7 +703,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Extension, null, operator, (, null, })
         endMember()
         beginMetadataStar(operator)
         endMetadataStar(0)
@@ -744,7 +744,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Extension, null, operator, (, null, })
         endMember()
         beginMetadataStar(operator)
         endMetadataStar(0)
@@ -785,7 +785,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Extension, null, operator, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
     endExtensionDeclaration(extension, extension, on, })
@@ -838,7 +838,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Extension, null, operator, (, null, })
         endMember()
         beginMetadataStar(operator)
         endMetadataStar(0)
@@ -879,7 +879,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Extension, null, operator, (, null, })
         endMember()
         beginMetadataStar(operator)
         endMetadataStar(0)
@@ -920,7 +920,7 @@
               handleSend(print, ))
               handleExpressionStatement(print, ;)
             endBlockFunctionBody(1, {, })
-          endExtensionMethod(null, operator, (, null, })
+          endMethod(DeclarationKind.Extension, null, operator, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
     endExtensionDeclaration(extension, extension, on, })
diff --git a/pkg/front_end/parser_testcases/record/issue_52365.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/issue_52365.dart.intertwined.expect
index abc761c..879aa5e 100644
--- a/pkg/front_end/parser_testcases/record/issue_52365.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/issue_52365.dart.intertwined.expect
@@ -29,6 +29,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(f0)
                 looksLikeLocalFunction(f0)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -42,6 +44,8 @@
                     parseVariableInitializerOpt(f0)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -60,6 +64,9 @@
                                     parseFunctionBody(), true, false)
                                       parseExpressionFunctionBody(=>, true)
                                         parseExpression(=>)
+                                          looksLikeOuterPatternEquals(=>)
+                                            skipOuterPattern(=>)
+                                              skipObjectPatternRest(print)
                                           parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                               parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -92,6 +99,9 @@
                 looksLikeLocalFunction(f0)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f0)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -120,6 +130,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -127,6 +139,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -145,6 +159,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -184,6 +201,9 @@
                 looksLikeLocalFunction(f0)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f0)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -212,6 +232,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -219,6 +241,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -237,6 +261,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -276,6 +303,9 @@
                 looksLikeLocalFunction(f0)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f0)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -304,6 +334,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -311,6 +343,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -329,6 +363,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -365,6 +402,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(f1)
                 looksLikeLocalFunction(f1)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -378,6 +417,8 @@
                     parseVariableInitializerOpt(f1)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -406,6 +447,9 @@
                                     parseFunctionBody(), true, false)
                                       parseExpressionFunctionBody(=>, true)
                                         parseExpression(=>)
+                                          looksLikeOuterPatternEquals(=>)
+                                            skipOuterPattern(=>)
+                                              skipObjectPatternRest(print)
                                           parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                               parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -421,6 +465,8 @@
                                                           listener: beginArguments(()
                                                           allowedToShortcutParseExpression()
                                                           parseExpression(()
+                                                            looksLikeOuterPatternEquals(()
+                                                              skipOuterPattern(()
                                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -455,6 +501,9 @@
                 looksLikeLocalFunction(f1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -483,6 +532,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -490,6 +541,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -518,6 +571,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -533,6 +589,8 @@
                                                                     listener: beginArguments(()
                                                                     allowedToShortcutParseExpression()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -574,6 +632,9 @@
                 looksLikeLocalFunction(f1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -602,6 +663,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -609,6 +672,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -637,6 +702,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -652,6 +720,8 @@
                                                                     listener: beginArguments(()
                                                                     allowedToShortcutParseExpression()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -693,6 +763,9 @@
                 looksLikeLocalFunction(f1)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f1)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -721,6 +794,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -728,6 +803,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -756,6 +833,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -771,6 +851,8 @@
                                                                     listener: beginArguments(()
                                                                     allowedToShortcutParseExpression()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -809,6 +891,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(f2)
                 looksLikeLocalFunction(f2)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -822,6 +906,8 @@
                     parseVariableInitializerOpt(f2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -860,6 +946,9 @@
                                     parseFunctionBody(), true, false)
                                       parseExpressionFunctionBody(=>, true)
                                         parseExpression(=>)
+                                          looksLikeOuterPatternEquals(=>)
+                                            skipOuterPattern(=>)
+                                              skipObjectPatternRest(print)
                                           parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                             parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                               parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -875,6 +964,8 @@
                                                           listener: beginArguments(()
                                                           allowedToShortcutParseExpression()
                                                           parseExpression(()
+                                                            looksLikeOuterPatternEquals(()
+                                                              skipOuterPattern(()
                                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                 parsePrimary((, expression, ConstantPatternContext.none)
@@ -920,6 +1011,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -948,6 +1042,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -955,6 +1051,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -993,6 +1091,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1008,6 +1109,8 @@
                                                                     listener: beginArguments(()
                                                                     allowedToShortcutParseExpression()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1060,6 +1163,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1088,6 +1194,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1095,6 +1203,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1133,6 +1243,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1148,6 +1261,8 @@
                                                                     listener: beginArguments(()
                                                                     allowedToShortcutParseExpression()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1200,6 +1315,9 @@
                 looksLikeLocalFunction(f2)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(f2)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1228,6 +1346,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1235,6 +1355,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1273,6 +1395,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1288,6 +1413,8 @@
                                                                     listener: beginArguments(()
                                                                     allowedToShortcutParseExpression()
                                                                     parseExpression(()
+                                                                      looksLikeOuterPatternEquals(()
+                                                                        skipOuterPattern(()
                                                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -1341,6 +1468,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1348,6 +1477,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1366,6 +1497,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1406,6 +1540,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1413,6 +1549,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1431,6 +1569,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1471,6 +1612,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1478,6 +1621,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1496,6 +1641,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1536,6 +1684,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1543,6 +1693,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1561,6 +1713,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1583,6 +1738,8 @@
                                                   inGenerator()
                                             listener: endFunctionExpression((, ))
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1601,6 +1758,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1641,6 +1801,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1648,6 +1810,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1666,6 +1830,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1688,6 +1855,8 @@
                                                   inGenerator()
                                             listener: endFunctionExpression((, ))
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1706,6 +1875,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1746,6 +1918,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1753,6 +1927,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -1771,6 +1947,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1793,6 +1972,8 @@
                                                   inGenerator()
                                             listener: endFunctionExpression((, ))
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1811,6 +1992,9 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
+                                                        skipObjectPatternRest(print)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1868,7 +2052,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, operator, DeclarationKind.Extension, FunctionExtension, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, operator, DeclarationKind.Extension, FunctionExtension, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, FunctionExtension)
                 listener: handleNoType({)
                 parseOperatorName({)
@@ -1907,6 +2091,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -1922,6 +2109,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -1951,7 +2140,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, operator, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, operator, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, operator)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Extension, FunctionExtension)
@@ -1959,7 +2148,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, operator, DeclarationKind.Extension, FunctionExtension, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Extension, FunctionExtension, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, FunctionExtension)
                 listener: handleNoType(})
                 parseOperatorName(})
@@ -1998,6 +2187,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2013,6 +2205,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2042,7 +2236,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, operator, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, operator, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, operator)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Extension, FunctionExtension)
@@ -2050,7 +2244,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, operator, DeclarationKind.Extension, FunctionExtension, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Extension, FunctionExtension, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, FunctionExtension)
                 listener: handleNoType(})
                 parseOperatorName(})
@@ -2089,6 +2283,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2104,6 +2301,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2133,7 +2332,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, operator, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, operator, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
@@ -2160,7 +2359,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, operator, DeclarationKind.Extension, RecordExtension, false)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, operator, DeclarationKind.Extension, RecordExtension, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, RecordExtension)
                 listener: handleNoType({)
                 parseOperatorName({)
@@ -2199,6 +2398,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2214,6 +2416,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2243,7 +2447,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, operator, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, operator, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, operator)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Extension, RecordExtension)
@@ -2251,7 +2455,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, operator, DeclarationKind.Extension, RecordExtension, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Extension, RecordExtension, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, RecordExtension)
                 listener: handleNoType(})
                 parseOperatorName(})
@@ -2290,6 +2494,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2305,6 +2512,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2334,7 +2543,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, operator, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, operator, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, operator)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Extension, RecordExtension)
@@ -2342,7 +2551,7 @@
                 listener: beginMetadataStar(operator)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, operator, DeclarationKind.Extension, RecordExtension, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, NoType(), null, null, operator, DeclarationKind.Extension, RecordExtension, false)
                 listener: beginMethod(DeclarationKind.Extension, null, null, null, null, null, null, operator, RecordExtension)
                 listener: handleNoType(})
                 parseOperatorName(})
@@ -2381,6 +2590,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -2396,6 +2608,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
@@ -2425,7 +2639,7 @@
                           listener: handleExpressionStatement(print, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endExtensionMethod(null, operator, (, null, })
+                listener: endMethod(DeclarationKind.Extension, null, operator, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Extension, 3, {, })
diff --git a/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.expect b/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.expect
index 4c9eec1..66fbe1e 100644
--- a/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.expect
+++ b/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.expect
@@ -21,7 +21,7 @@
             handleType(int, null)
             handleIdentifier(foo1, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -32,7 +32,7 @@
             handleType(int, ?)
             handleIdentifier(foo2, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -58,7 +58,7 @@
             endRecordType((, null, 2, false)
             handleIdentifier(foo3, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -84,7 +84,7 @@
             endRecordType((, ?, 2, false)
             handleIdentifier(foo4, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -107,7 +107,7 @@
             endFunctionType(Function, null)
             handleIdentifier(foo5, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -130,7 +130,7 @@
             endFunctionType(Function, ?)
             handleIdentifier(foo6, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -155,7 +155,7 @@
             endFunctionType(Function, null)
             handleIdentifier(foo7, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -180,7 +180,7 @@
             endFunctionType(Function, ?)
             handleIdentifier(foo8, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -220,7 +220,7 @@
             endFunctionType(Function, null)
             handleIdentifier(foo9, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -260,7 +260,7 @@
             endFunctionType(Function, ?)
             handleIdentifier(foo10, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -300,7 +300,7 @@
             endFunctionType(Function, null)
             handleIdentifier(foo11, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
         beginMetadataStar(abstract)
         endMetadataStar(0)
@@ -340,7 +340,7 @@
             endFunctionType(Function, ?)
             handleIdentifier(foo12, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+          endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 12, {, })
     endClassDeclaration(abstract, })
diff --git a/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.intertwined.expect
index f82c00a..0baece8 100644
--- a/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/modifier_before_type_question.dart.intertwined.expect
@@ -42,7 +42,7 @@
                   listener: handleIdentifier(foo1, fieldDeclaration)
                 parseFieldInitializerOpt(foo1, foo1, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -59,7 +59,7 @@
                   listener: handleIdentifier(foo2, fieldDeclaration)
                 parseFieldInitializerOpt(foo2, foo2, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -96,7 +96,7 @@
                   listener: handleIdentifier(foo3, fieldDeclaration)
                 parseFieldInitializerOpt(foo3, foo3, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -133,7 +133,7 @@
                   listener: handleIdentifier(foo4, fieldDeclaration)
                 parseFieldInitializerOpt(foo4, foo4, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -166,7 +166,7 @@
                   listener: handleIdentifier(foo5, fieldDeclaration)
                 parseFieldInitializerOpt(foo5, foo5, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -199,7 +199,7 @@
                   listener: handleIdentifier(foo6, fieldDeclaration)
                 parseFieldInitializerOpt(foo6, foo6, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -235,7 +235,7 @@
                   listener: handleIdentifier(foo7, fieldDeclaration)
                 parseFieldInitializerOpt(foo7, foo7, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -271,7 +271,7 @@
                   listener: handleIdentifier(foo8, fieldDeclaration)
                 parseFieldInitializerOpt(foo8, foo8, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -326,7 +326,7 @@
                   listener: handleIdentifier(foo9, fieldDeclaration)
                 parseFieldInitializerOpt(foo9, foo9, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -381,7 +381,7 @@
                   listener: handleIdentifier(foo10, fieldDeclaration)
                 parseFieldInitializerOpt(foo10, foo10, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -436,7 +436,7 @@
                   listener: handleIdentifier(foo11, fieldDeclaration)
                 parseFieldInitializerOpt(foo11, foo11, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, abstract)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -491,7 +491,7 @@
                   listener: handleIdentifier(foo12, fieldDeclaration)
                 parseFieldInitializerOpt(foo12, foo12, null, abstract, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(abstract, null, null, null, null, null, null, 1, abstract, ;)
+                listener: endFields(DeclarationKind.Class, abstract, null, null, null, null, null, null, 1, abstract, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 12, {, })
diff --git a/pkg/front_end/parser_testcases/record/on.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/on.dart.intertwined.expect
index 9d8e8cf..26f56f5 100644
--- a/pkg/front_end/parser_testcases/record/on.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/on.dart.intertwined.expect
@@ -41,6 +41,9 @@
                         looksLikeLocalFunction(print)
                         parseExpressionStatement({)
                           parseExpression({)
+                            looksLikeOuterPatternEquals({)
+                              skipOuterPattern({)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression({, true, ConstantPatternContext.none)
                                 parsePrimary({, expression, ConstantPatternContext.none)
@@ -56,6 +59,8 @@
                                             listener: beginArguments(()
                                             allowedToShortcutParseExpression()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/operator_returning_record.dart.expect b/pkg/front_end/parser_testcases/record/operator_returning_record.dart.expect
index d200695..afbf574 100644
--- a/pkg/front_end/parser_testcases/record/operator_returning_record.dart.expect
+++ b/pkg/front_end/parser_testcases/record/operator_returning_record.dart.expect
@@ -57,7 +57,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, (, (, null, })
+          endMethod(DeclarationKind.Class, null, (, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
@@ -120,7 +120,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, (, (, null, })
+          endMethod(DeclarationKind.Class, null, (, (, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/operator_returning_record.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/operator_returning_record.dart.intertwined.expect
index ec8b9fe..4afe68e 100644
--- a/pkg/front_end/parser_testcases/record/operator_returning_record.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/operator_returning_record.dart.intertwined.expect
@@ -33,7 +33,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, operator, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, operator, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Foo)
                 parseRecordType((, {, false)
                   listener: beginRecordType(()
@@ -93,6 +93,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -100,12 +102,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -118,7 +124,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, (, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
@@ -155,7 +161,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: ), end: ?, typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, operator, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: ), end: ?, typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, operator, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, operator, Bar)
                 parseRecordType((, {, true)
                   listener: beginRecordType(()
@@ -215,6 +221,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -222,12 +230,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -240,7 +252,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, (, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/record/record_and_commas.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_and_commas.dart.intertwined.expect
index 8c95c70..c22ceef 100644
--- a/pkg/front_end/parser_testcases/record/record_and_commas.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_and_commas.dart.intertwined.expect
@@ -46,6 +46,8 @@
                       parseVariableInitializerOpt(emptyRecord1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -80,6 +82,8 @@
                       parseVariableInitializerOpt(emptyRecord2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -112,6 +116,8 @@
                       parseVariableInitializerOpt(emptyRecord3)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -148,6 +154,8 @@
                       parseVariableInitializerOpt(emptyRecord4)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -205,6 +213,8 @@
                       parseVariableInitializerOpt(emptyRecord5)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -212,18 +222,24 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
                                             parseLiteralInt(,)
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -296,6 +312,8 @@
                       parseVariableInitializerOpt(emptyRecord6)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -303,18 +321,24 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
                                             parseLiteralInt(,)
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -390,6 +414,8 @@
                       parseVariableInitializerOpt(emptyRecord7)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -397,18 +423,24 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
                                             parseLiteralInt(,)
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -423,6 +455,8 @@
                                                 listener: handleNoArguments(,)
                                               listener: handleSend(, )
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -508,6 +542,8 @@
                       parseVariableInitializerOpt(emptyRecord8)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -515,18 +551,24 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
                                             parseLiteralInt(,)
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -541,6 +583,8 @@
                                                 listener: handleNoArguments(,)
                                               listener: handleSend(, )
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_literal_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_literal_01.dart.intertwined.expect
index a0c5890..f29f355 100644
--- a/pkg/front_end/parser_testcases/record/record_literal_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_literal_01.dart.intertwined.expect
@@ -29,6 +29,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(record1)
                 looksLikeLocalFunction(record1)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -42,6 +44,8 @@
                     parseVariableInitializerOpt(record1)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -49,12 +53,16 @@
                                 parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
                                           parseLiteralInt(()
                                             listener: handleLiteralInt(1)
                                   parseExpression(,)
+                                    looksLikeOuterPatternEquals(,)
+                                      skipOuterPattern(,)
                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -63,6 +71,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(a, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -72,6 +82,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(b, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -88,6 +100,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(record2)
                 looksLikeLocalFunction(record2)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -101,6 +115,8 @@
                     parseVariableInitializerOpt(record2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -108,6 +124,8 @@
                                 parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -116,6 +134,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(a, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -123,6 +143,8 @@
                                             listener: handleLiteralInt(2)
                                   listener: handleNamedRecordField(:)
                                   parseExpression(,)
+                                    looksLikeOuterPatternEquals(,)
+                                      skipOuterPattern(,)
                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -131,6 +153,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(b, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -150,6 +174,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -184,6 +211,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -218,6 +248,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
@@ -252,6 +285,9 @@
                 looksLikeLocalFunction(print)
                 parseExpressionStatement(;)
                   parseExpression(;)
+                    looksLikeOuterPatternEquals(;)
+                      skipOuterPattern(;)
+                        skipObjectPatternRest(print)
                     parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(;, true, ConstantPatternContext.none)
                         parsePrimary(;, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_literal_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_literal_02.dart.intertwined.expect
index 72758e8..a9fa845 100644
--- a/pkg/front_end/parser_testcases/record/record_literal_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_literal_02.dart.intertwined.expect
@@ -33,6 +33,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression({, true, ConstantPatternContext.none)
                           parsePrimary({, expression, ConstantPatternContext.none)
@@ -40,18 +42,24 @@
                               parseParenthesizedExpressionOrRecordLiteral({, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
                                         parseLiteralInt(,)
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -69,6 +77,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -78,6 +88,8 @@
                                 ensureIdentifier((, namedRecordFieldReference)
                                   listener: handleIdentifier(foo, namedRecordFieldReference)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -87,6 +99,8 @@
                                 ensureIdentifier(,, namedRecordFieldReference)
                                   listener: handleIdentifier(bar, namedRecordFieldReference)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -94,6 +108,8 @@
                                           listener: handleLiteralInt(42)
                                 listener: handleNamedRecordField(:)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -102,6 +118,8 @@
                                 ensureIdentifier(,, namedRecordFieldReference)
                                   listener: handleIdentifier(baz, namedRecordFieldReference)
                                 parseExpression(:)
+                                  looksLikeOuterPatternEquals(:)
+                                    skipOuterPattern(:)
                                   parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(:, true, ConstantPatternContext.none)
                                       parsePrimary(:, expression, ConstantPatternContext.none)
@@ -120,6 +138,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -127,6 +147,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -134,12 +156,16 @@
                                           parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                                             parseExpression(()
+                                              looksLikeOuterPatternEquals(()
+                                                skipOuterPattern(()
                                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                                   parsePrimary((, expression, ConstantPatternContext.none)
                                                     parseLiteralInt(()
                                                       listener: handleLiteralInt(42)
                                             parseExpression(,)
+                                              looksLikeOuterPatternEquals(,)
+                                                skipOuterPattern(,)
                                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -148,6 +174,8 @@
                                             ensureCloseParen(42, ()
                                             listener: endRecordLiteral((, 2, null)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -165,6 +193,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -172,6 +202,8 @@
                               parseParenthesizedExpressionOrRecordLiteral(;, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
@@ -210,6 +242,8 @@
                                               parseFunctionBody(), true, false)
                                                 parseExpressionFunctionBody(=>, true)
                                                   parseExpression(=>)
+                                                    looksLikeOuterPatternEquals(=>)
+                                                      skipOuterPattern(=>)
                                                     parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                                       parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                                         parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -219,6 +253,8 @@
                                                   inGenerator()
                                             listener: endFunctionExpression((, 42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_literal_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_literal_03.dart.intertwined.expect
index ddc1420..5b7e6a7 100644
--- a/pkg/front_end/parser_testcases/record/record_literal_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_literal_03.dart.intertwined.expect
@@ -29,6 +29,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r1)
                 looksLikeLocalFunction(r1)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -42,6 +44,8 @@
                     parseVariableInitializerOpt(r1)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -49,6 +53,8 @@
                                 parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -64,6 +70,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r2)
                 looksLikeLocalFunction(r2)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -77,6 +85,8 @@
                     parseVariableInitializerOpt(r2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -86,6 +96,8 @@
                                   ensureIdentifier((, namedRecordFieldReference)
                                     listener: handleIdentifier(hello, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -102,6 +114,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r3)
                 looksLikeLocalFunction(r3)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -115,6 +129,8 @@
                     parseVariableInitializerOpt(r3)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -124,6 +140,8 @@
                                   ensureIdentifier((, namedRecordFieldReference)
                                     listener: handleIdentifier(hello, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -140,6 +158,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r4)
                 looksLikeLocalFunction(r4)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -153,6 +173,8 @@
                     parseVariableInitializerOpt(r4)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -160,6 +182,8 @@
                                 parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_literal_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_literal_04.dart.intertwined.expect
index f86fe51..706fd63 100644
--- a/pkg/front_end/parser_testcases/record/record_literal_04.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_literal_04.dart.intertwined.expect
@@ -29,6 +29,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r1)
                 looksLikeLocalFunction(r1)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -42,6 +44,8 @@
                     parseVariableInitializerOpt(r1)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -50,6 +54,8 @@
                                 parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -66,6 +72,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r2)
                 looksLikeLocalFunction(r2)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -79,6 +87,8 @@
                     parseVariableInitializerOpt(r2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -87,12 +97,16 @@
                                 parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
                                           parseLiteralInt(()
                                             listener: handleLiteralInt(1)
                                   parseExpression(,)
+                                    looksLikeOuterPatternEquals(,)
+                                      skipOuterPattern(,)
                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -101,6 +115,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(a, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -110,6 +126,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(b, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -127,6 +145,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r3)
                 looksLikeLocalFunction(r3)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -140,6 +160,8 @@
                     parseVariableInitializerOpt(r3)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -148,6 +170,8 @@
                                 parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -156,6 +180,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(a, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -163,6 +189,8 @@
                                             listener: handleLiteralInt(2)
                                   listener: handleNamedRecordField(:)
                                   parseExpression(,)
+                                    looksLikeOuterPatternEquals(,)
+                                      skipOuterPattern(,)
                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -171,6 +199,8 @@
                                   ensureIdentifier(,, namedRecordFieldReference)
                                     listener: handleIdentifier(b, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -188,6 +218,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r4)
                 looksLikeLocalFunction(r4)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -201,6 +233,8 @@
                     parseVariableInitializerOpt(r4)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -211,6 +245,8 @@
                                   ensureIdentifier((, namedRecordFieldReference)
                                     listener: handleIdentifier(hello, namedRecordFieldReference)
                                   parseExpression(:)
+                                    looksLikeOuterPatternEquals(:)
+                                      skipOuterPattern(:)
                                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -228,6 +264,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r5)
                 looksLikeLocalFunction(r5)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -241,6 +279,8 @@
                     parseVariableInitializerOpt(r5)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -249,6 +289,8 @@
                                 parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
@@ -267,6 +309,8 @@
           parseStatement(;)
             parseStatementX(;)
               parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+                skipOuterPattern(var)
+                  skipObjectPatternRest(r6)
                 looksLikeLocalFunction(r6)
                 listener: beginMetadataStar(var)
                 listener: endMetadataStar(0)
@@ -280,6 +324,8 @@
                     parseVariableInitializerOpt(r6)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -329,6 +375,8 @@
                     listener: handleIdentifier(record1, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -336,12 +384,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -364,6 +416,8 @@
                     listener: handleIdentifier(record2, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -372,12 +426,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(const, const, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_01.dart.intertwined.expect
index b72e85b..d412a25 100644
--- a/pkg/front_end/parser_testcases/record/record_type_01.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_01.dart.intertwined.expect
@@ -65,6 +65,8 @@
                       parseVariableInitializerOpt(record1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -72,12 +74,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -131,6 +137,8 @@
                       parseVariableInitializerOpt(record1Named)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -138,12 +146,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -195,6 +207,8 @@
                       parseVariableInitializerOpt(record2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -202,12 +216,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -261,6 +279,8 @@
                       parseVariableInitializerOpt(record2Named)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -268,12 +288,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -351,6 +375,8 @@
                       parseVariableInitializerOpt(record3)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -358,12 +384,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -372,6 +402,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(a, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -381,6 +413,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(b, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -461,6 +495,8 @@
                       parseVariableInitializerOpt(record3Named)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -468,12 +504,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -482,6 +522,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(a, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -491,6 +533,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(b, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -569,6 +613,8 @@
                       parseVariableInitializerOpt(record4)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -576,12 +622,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -590,6 +640,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(a, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -599,6 +651,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(b, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -679,6 +733,8 @@
                       parseVariableInitializerOpt(record4Named)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -686,12 +742,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -700,6 +760,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(a, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -709,6 +771,8 @@
                                     ensureIdentifier(,, namedRecordFieldReference)
                                       listener: handleIdentifier(b, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -830,6 +894,8 @@
                       parseVariableInitializerOpt(record5)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -837,6 +903,8 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -844,12 +912,16 @@
                                               parseParenthesizedExpressionOrRecordLiteral((, null, ConstantPatternContext.none)
                                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                                 parseExpression(()
+                                                  looksLikeOuterPatternEquals(()
+                                                    skipOuterPattern(()
                                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                                       parsePrimary((, expression, ConstantPatternContext.none)
                                                         parseLiteralInt(()
                                                           listener: handleLiteralInt(1)
                                                 parseExpression(,)
+                                                  looksLikeOuterPatternEquals(,)
+                                                    skipOuterPattern(,)
                                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -858,6 +930,8 @@
                                                 ensureCloseParen(2, ()
                                                 listener: endRecordLiteral((, 2, null)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -930,6 +1004,9 @@
                             looksLikeLocalFunction(print)
                             parseExpressionStatement({)
                               parseExpression({)
+                                looksLikeOuterPatternEquals({)
+                                  skipOuterPattern({)
+                                    skipObjectPatternRest(print)
                                 parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression({, true, ConstantPatternContext.none)
                                     parsePrimary({, expression, ConstantPatternContext.none)
@@ -1037,6 +1114,9 @@
                               looksLikeLocalFunction(print)
                               parseExpressionStatement({)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
+                                      skipObjectPatternRest(print)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
@@ -1138,6 +1218,9 @@
                       parseFunctionBody(), false, false)
                         parseExpressionFunctionBody(=>, false)
                           parseExpression(=>)
+                            looksLikeOuterPatternEquals(=>)
+                              skipOuterPattern(=>)
+                                skipObjectPatternRest(print)
                             parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                               parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                 parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1168,6 +1251,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1216,6 +1301,9 @@
                                           looksLikeLocalFunction(print)
                                           parseExpressionStatement({)
                                             parseExpression({)
+                                              looksLikeOuterPatternEquals({)
+                                                skipOuterPattern({)
+                                                  skipObjectPatternRest(print)
                                               parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression({, true, ConstantPatternContext.none)
                                                   parsePrimary({, expression, ConstantPatternContext.none)
@@ -1256,6 +1344,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1298,6 +1388,9 @@
                                   parseFunctionBody(), true, false)
                                     parseExpressionFunctionBody(=>, true)
                                       parseExpression(=>)
+                                        looksLikeOuterPatternEquals(=>)
+                                          skipOuterPattern(=>)
+                                            skipObjectPatternRest(print)
                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                             parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1329,6 +1422,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1377,6 +1472,9 @@
                                           looksLikeLocalFunction(print)
                                           parseExpressionStatement({)
                                             parseExpression({)
+                                              looksLikeOuterPatternEquals({)
+                                                skipOuterPattern({)
+                                                  skipObjectPatternRest(print)
                                               parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                                 parseUnaryExpression({, true, ConstantPatternContext.none)
                                                   parsePrimary({, expression, ConstantPatternContext.none)
@@ -1417,6 +1515,8 @@
                   looksLikeLocalFunction(()
                   parseExpressionStatement(;)
                     parseExpression(;)
+                      looksLikeOuterPatternEquals(;)
+                        skipOuterPattern(;)
                       parsePrecedenceExpression(;, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(;, true, ConstantPatternContext.none)
                           parsePrimary(;, expression, ConstantPatternContext.none)
@@ -1459,6 +1559,9 @@
                                   parseFunctionBody(async, true, false)
                                     parseExpressionFunctionBody(=>, true)
                                       parseExpression(=>)
+                                        looksLikeOuterPatternEquals(=>)
+                                          skipOuterPattern(=>)
+                                            skipObjectPatternRest(print)
                                         parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                                           parseUnaryExpression(=>, true, ConstantPatternContext.none)
                                             parsePrimary(=>, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_02.dart.intertwined.expect
index 155110a..1bbca56 100644
--- a/pkg/front_end/parser_testcases/record/record_type_02.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_02.dart.intertwined.expect
@@ -71,6 +71,8 @@
                       parseVariableInitializerOpt(record1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -78,12 +80,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(1)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -127,6 +133,8 @@
                       parseVariableInitializerOpt(record2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -134,6 +142,8 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -202,6 +212,8 @@
                       parseVariableInitializerOpt(record1)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -209,6 +221,8 @@
                                   parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -255,6 +269,8 @@
                       parseVariableInitializerOpt(record2)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
@@ -264,6 +280,8 @@
                                     ensureIdentifier((, namedRecordFieldReference)
                                       listener: handleIdentifier(ok, namedRecordFieldReference)
                                     parseExpression(:)
+                                      looksLikeOuterPatternEquals(:)
+                                        skipOuterPattern(:)
                                       parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(:, true, ConstantPatternContext.none)
                                           parsePrimary(:, expression, ConstantPatternContext.none)
@@ -296,6 +314,8 @@
                       parseVariableInitializerOpt(record3)
                         listener: beginVariableInitializer(=)
                         parseExpression(=)
+                          looksLikeOuterPatternEquals(=)
+                            skipOuterPattern(=)
                           parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(=, true, ConstantPatternContext.none)
                               parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_03.dart.expect b/pkg/front_end/parser_testcases/record/record_type_03.dart.expect
index 80643ab..f59b2ab 100644
--- a/pkg/front_end/parser_testcases/record/record_type_03.dart.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_03.dart.expect
@@ -229,7 +229,7 @@
               handleLiteralInt(42)
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, (, (, null, ;)
+          endMethod(DeclarationKind.Class, null, (, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_03.dart.intertwined.expect
index 8d7d707..868fe1d 100644
--- a/pkg/front_end/parser_testcases/record/record_type_03.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_03.dart.intertwined.expect
@@ -101,9 +101,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(b)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -133,6 +136,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -140,12 +145,16 @@
                                 parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
                                           parseLiteralInt(()
                                             listener: handleLiteralInt(42)
                                   parseExpression(,)
+                                    looksLikeOuterPatternEquals(,)
+                                      skipOuterPattern(,)
                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -164,6 +173,8 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -171,12 +182,16 @@
                           parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
                                     parseLiteralInt(()
                                       listener: handleLiteralInt(1)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -278,9 +293,12 @@
             parseStatementX({)
               parseIfStatement({)
                 listener: beginIfStatement(if)
-                ensureParenthesizedCondition(if, allowCase: false)
-                  parseExpressionInParenthesisRest((, allowCase: false)
+                ensureParenthesizedCondition(if, allowCase: true)
+                  parseExpressionInParenthesisRest((, allowCase: true)
                     parseExpression(()
+                      looksLikeOuterPatternEquals(()
+                        skipOuterPattern(()
+                          skipObjectPatternRest(b)
                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression((, true, ConstantPatternContext.none)
                           parsePrimary((, expression, ConstantPatternContext.none)
@@ -310,6 +328,8 @@
                     parseReturnStatement())
                       listener: beginReturnStatement(return)
                       parseExpression(return)
+                        looksLikeOuterPatternEquals(return)
+                          skipOuterPattern(return)
                         parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(return, true, ConstantPatternContext.none)
                             parsePrimary(return, expression, ConstantPatternContext.none)
@@ -317,12 +337,16 @@
                                 parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                   listener: beginParenthesizedExpressionOrRecordLiteral(()
                                   parseExpression(()
+                                    looksLikeOuterPatternEquals(()
+                                      skipOuterPattern(()
                                     parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression((, true, ConstantPatternContext.none)
                                         parsePrimary((, expression, ConstantPatternContext.none)
                                           parseLiteralInt(()
                                             listener: handleLiteralInt(42)
                                   parseExpression(,)
+                                    looksLikeOuterPatternEquals(,)
+                                      skipOuterPattern(,)
                                     parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                       parseUnaryExpression(,, true, ConstantPatternContext.none)
                                         parsePrimary(,, expression, ConstantPatternContext.none)
@@ -341,6 +365,8 @@
               parseReturnStatement(;)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -348,12 +374,16 @@
                           parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
                                     parseLiteralInt(()
                                       listener: handleLiteralInt(1)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -399,7 +429,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, foo, DeclarationKind.Class, Baz, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, foo, DeclarationKind.Class, Baz, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, foo, Baz)
                 parseRecordType((, {, false)
                   listener: beginRecordType(()
@@ -455,6 +485,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -462,12 +494,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -478,7 +514,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, (, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 1, {, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_as_named_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_as_named_parameter.dart.intertwined.expect
index 200feba..22ec257 100644
--- a/pkg/front_end/parser_testcases/record/record_type_as_named_parameter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_as_named_parameter.dart.intertwined.expect
@@ -148,6 +148,8 @@
                     listener: handleIdentifier(foo1, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -155,12 +157,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(:, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -203,6 +209,8 @@
                     listener: handleIdentifier(foo2, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(:)
+                    looksLikeOuterPatternEquals(:)
+                      skipOuterPattern(:)
                     parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(:, true, ConstantPatternContext.none)
                         parsePrimary(:, expression, ConstantPatternContext.none)
@@ -210,12 +218,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(:, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -289,6 +301,8 @@
                     listener: handleIdentifier(foo1, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -296,12 +310,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -344,6 +362,8 @@
                     listener: handleIdentifier(foo2, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -351,12 +371,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_as_optional_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_as_optional_parameter.dart.intertwined.expect
index 6f4c4a6..95b5903 100644
--- a/pkg/front_end/parser_testcases/record/record_type_as_optional_parameter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_as_optional_parameter.dart.intertwined.expect
@@ -148,6 +148,8 @@
                     listener: handleIdentifier(foo1, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -155,12 +157,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -203,6 +209,8 @@
                     listener: handleIdentifier(foo2, formalParameterDeclaration)
                   listener: beginFormalParameterDefaultValueExpression()
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -210,12 +218,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_as_type_arguments.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_as_type_arguments.dart.intertwined.expect
index 7efb4d3..37d6d8e 100644
--- a/pkg/front_end/parser_testcases/record/record_type_as_type_arguments.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_as_type_arguments.dart.intertwined.expect
@@ -29,6 +29,8 @@
           parseStatement({)
             parseStatementX({)
               parseExpressionStatementOrDeclarationAfterModifiers(final, {, null, final, null, null)
+                skipOuterPattern(final)
+                  skipObjectPatternRest(x)
                 looksLikeLocalFunction(x)
                 listener: beginMetadataStar(final)
                 listener: endMetadataStar(0)
@@ -42,6 +44,8 @@
                     parseVariableInitializerOpt(x)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -124,6 +128,8 @@
                     parseVariableInitializerOpt(y)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -204,6 +210,8 @@
                     parseVariableInitializerOpt(z)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
@@ -315,6 +323,8 @@
                     parseVariableInitializerOpt(y2)
                       listener: beginVariableInitializer(=)
                       parseExpression(=)
+                        looksLikeOuterPatternEquals(=)
+                          skipOuterPattern(=)
                         parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                           parseUnaryExpression(=, true, ConstantPatternContext.none)
                             parsePrimary(=, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_getter.dart.expect b/pkg/front_end/parser_testcases/record/record_type_getter.dart.expect
index 82c2083..9af1b7d 100644
--- a/pkg/front_end/parser_testcases/record/record_type_getter.dart.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_getter.dart.expect
@@ -948,7 +948,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, (, (, null, ;)
+          endMethod(DeclarationKind.Class, null, (, (, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -996,7 +996,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, (, (, null, })
+          endMethod(DeclarationKind.Class, null, (, (, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1039,7 +1039,7 @@
             endLiteralString(0, ;)
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, (, (, null, ;)
+          endMethod(DeclarationKind.Class, null, (, (, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1084,7 +1084,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, (, (, null, })
+          endMethod(DeclarationKind.Class, null, (, (, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1128,7 +1128,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(null, (, (, null, ;)
+          endMethod(DeclarationKind.Class, null, (, (, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1173,7 +1173,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, (, (, null, })
+          endMethod(DeclarationKind.Class, null, (, (, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1217,7 +1217,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(null, (, (, null, ;)
+          endMethod(DeclarationKind.Class, null, (, (, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1262,7 +1262,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, (, (, null, })
+          endMethod(DeclarationKind.Class, null, (, (, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1297,7 +1297,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, (, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, (, =>, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1335,7 +1335,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, {, null, })
+          endMethod(DeclarationKind.Class, get, (, {, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1368,7 +1368,7 @@
             endLiteralString(0, ;)
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, (, async, null, ;)
+          endMethod(DeclarationKind.Class, get, (, async, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1403,7 +1403,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, async, null, })
+          endMethod(DeclarationKind.Class, get, (, async, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1437,7 +1437,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, (, async, null, ;)
+          endMethod(DeclarationKind.Class, get, (, async, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1472,7 +1472,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, async, null, })
+          endMethod(DeclarationKind.Class, get, (, async, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1506,7 +1506,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, (, sync, null, ;)
+          endMethod(DeclarationKind.Class, get, (, sync, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1541,7 +1541,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, sync, null, })
+          endMethod(DeclarationKind.Class, get, (, sync, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1576,7 +1576,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, (, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, (, =>, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1614,7 +1614,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, {, null, })
+          endMethod(DeclarationKind.Class, get, (, {, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1647,7 +1647,7 @@
             endLiteralString(0, ;)
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, (, async, null, ;)
+          endMethod(DeclarationKind.Class, get, (, async, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1683,7 +1683,7 @@
                 handleThrowExpression(throw, "hello")
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, async, null, })
+          endMethod(DeclarationKind.Class, get, (, async, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1717,7 +1717,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, (, async, null, ;)
+          endMethod(DeclarationKind.Class, get, (, async, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1754,7 +1754,7 @@
               endReturnStatement(true, return, ;)
               handleInvalidStatement(return, GeneratorReturnsValue)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, async, null, })
+          endMethod(DeclarationKind.Class, get, (, async, null, })
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1788,7 +1788,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, (, sync, null, ;)
+          endMethod(DeclarationKind.Class, get, (, sync, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -1825,7 +1825,7 @@
               endReturnStatement(true, return, ;)
               handleInvalidStatement(return, GeneratorReturnsValue)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, (, sync, null, })
+          endMethod(DeclarationKind.Class, get, (, sync, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 24, {, })
     endClassDeclaration(class, })
@@ -1886,7 +1886,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.Class, null, static, (, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1934,7 +1934,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -1977,7 +1977,7 @@
             endLiteralString(0, ;)
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.Class, null, static, (, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2022,7 +2022,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2066,7 +2066,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.Class, null, static, (, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2111,7 +2111,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2155,7 +2155,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.Class, null, static, (, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2200,7 +2200,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(null, static, (, null, })
+          endMethod(DeclarationKind.Class, null, static, (, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2235,7 +2235,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2273,7 +2273,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, {, null, })
+          endMethod(DeclarationKind.Class, get, static, {, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2306,7 +2306,7 @@
             endLiteralString(0, ;)
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, async, null, ;)
+          endMethod(DeclarationKind.Class, get, static, async, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2341,7 +2341,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, async, null, })
+          endMethod(DeclarationKind.Class, get, static, async, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2375,7 +2375,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, static, async, null, ;)
+          endMethod(DeclarationKind.Class, get, static, async, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2410,7 +2410,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, async, null, })
+          endMethod(DeclarationKind.Class, get, static, async, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2444,7 +2444,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, static, sync, null, ;)
+          endMethod(DeclarationKind.Class, get, static, sync, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2479,7 +2479,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, sync, null, })
+          endMethod(DeclarationKind.Class, get, static, sync, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2514,7 +2514,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2552,7 +2552,7 @@
                 endRecordLiteral((, 2, null)
               endReturnStatement(true, return, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, {, null, })
+          endMethod(DeclarationKind.Class, get, static, {, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2585,7 +2585,7 @@
             endLiteralString(0, ;)
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, async, null, ;)
+          endMethod(DeclarationKind.Class, get, static, async, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2620,7 +2620,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, async, null, })
+          endMethod(DeclarationKind.Class, get, static, async, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2654,7 +2654,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, static, async, null, ;)
+          endMethod(DeclarationKind.Class, get, static, async, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2689,7 +2689,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, async, null, })
+          endMethod(DeclarationKind.Class, get, static, async, null, })
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2723,7 +2723,7 @@
             handleThrowExpression(throw, "hello")
             handleExpressionFunctionBody(=>, ;)
             handleInvalidStatement(=>, GeneratorReturnsValue)
-          endClassMethod(get, static, sync, null, ;)
+          endMethod(DeclarationKind.Class, get, static, sync, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -2758,7 +2758,7 @@
               handleThrowExpression(throw, "hello")
               handleExpressionStatement(throw, ;)
             endBlockFunctionBody(1, {, })
-          endClassMethod(get, static, sync, null, })
+          endMethod(DeclarationKind.Class, get, static, sync, null, })
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 24, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_getter.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_getter.dart.intertwined.expect
index 2ea2218..0c53eeb 100644
--- a/pkg/front_end/parser_testcases/record/record_type_getter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_getter.dart.intertwined.expect
@@ -62,6 +62,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -69,12 +71,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -154,6 +160,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -161,12 +169,16 @@
                           parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
                                     parseLiteralInt(()
                                       listener: handleLiteralInt(42)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -243,8 +255,12 @@
         parseFunctionBody(async, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -325,8 +341,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -401,8 +421,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -484,8 +508,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -560,8 +588,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -643,8 +675,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -704,6 +740,8 @@
         parseFunctionBody(get, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -711,12 +749,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -781,6 +823,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -788,12 +832,16 @@
                           parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
                                     parseLiteralInt(()
                                       listener: handleLiteralInt(42)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -855,8 +903,12 @@
         parseFunctionBody(async, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -922,8 +974,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -983,8 +1039,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1051,8 +1111,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1112,8 +1176,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1180,8 +1248,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1241,6 +1313,8 @@
         parseFunctionBody(topLevelGetter, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1248,12 +1322,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1318,6 +1396,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1325,12 +1405,16 @@
                           parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
                                     parseLiteralInt(()
                                       listener: handleLiteralInt(42)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1392,8 +1476,12 @@
         parseFunctionBody(async, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1459,8 +1547,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1520,8 +1612,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1588,8 +1684,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1649,8 +1749,12 @@
         parseFunctionBody(*, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parseThrowExpression(=>, true)
                 parseExpression(throw)
+                  looksLikeOuterPatternEquals(throw)
+                    skipOuterPattern(throw)
                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1717,8 +1821,12 @@
                   looksLikeLocalFunction(throw)
                   parseExpressionStatement({)
                     parseExpression({)
+                      looksLikeOuterPatternEquals({)
+                        skipOuterPattern({)
                       parseThrowExpression({, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -1765,7 +1873,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, {, false)
                   listener: beginRecordType(()
@@ -1823,6 +1931,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1830,12 +1940,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1848,7 +1962,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, (, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -1857,7 +1971,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -1920,6 +2034,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -1927,12 +2043,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1947,7 +2067,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, (, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -1956,7 +2076,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2014,8 +2134,12 @@
                 parseFunctionBody(async, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2027,7 +2151,7 @@
                     ensureSemicolon("hello")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, (, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2036,7 +2160,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -2101,8 +2225,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2115,7 +2243,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, (, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -2124,7 +2252,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2182,8 +2310,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2196,7 +2328,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(null, (, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2205,7 +2337,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -2270,8 +2402,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2284,7 +2420,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, (, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -2293,7 +2429,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2351,8 +2487,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2365,7 +2505,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(null, (, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2374,7 +2514,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -2439,8 +2579,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2453,7 +2597,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, (, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -2461,7 +2605,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2504,6 +2648,8 @@
                 parseFunctionBody(get, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -2511,12 +2657,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2529,7 +2679,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, (, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2537,7 +2687,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -2585,6 +2735,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -2592,12 +2744,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -2612,7 +2768,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -2620,7 +2776,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2663,8 +2819,12 @@
                 parseFunctionBody(async, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2676,7 +2836,7 @@
                     ensureSemicolon("hello")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, (, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2684,7 +2844,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -2734,8 +2894,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2748,7 +2912,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -2756,7 +2920,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2799,8 +2963,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2813,7 +2981,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, (, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2821,7 +2989,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -2871,8 +3039,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2885,7 +3057,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -2893,7 +3065,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -2936,8 +3108,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -2950,7 +3126,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, (, sync, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, sync, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -2958,7 +3134,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, get, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -3008,8 +3184,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3022,7 +3202,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, sync, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, sync, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -3030,7 +3210,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -3073,6 +3253,8 @@
                 parseFunctionBody(instanceGetter, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -3080,12 +3262,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -3098,7 +3284,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, (, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -3106,7 +3292,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -3154,6 +3340,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -3161,12 +3349,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -3181,7 +3373,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -3189,7 +3381,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -3232,8 +3424,12 @@
                 parseFunctionBody(async, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3245,7 +3441,7 @@
                     ensureSemicolon("hello")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, (, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -3253,7 +3449,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -3301,8 +3497,12 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parseThrowExpression(return, true)
                             parseExpression(throw)
+                              looksLikeOuterPatternEquals(throw)
+                                skipOuterPattern(throw)
                               parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                   parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3316,7 +3516,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -3324,7 +3524,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -3367,8 +3567,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3381,7 +3585,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, (, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -3389,7 +3593,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -3437,8 +3641,12 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parseThrowExpression(return, true)
                             parseExpression(throw)
+                              looksLikeOuterPatternEquals(throw)
+                                skipOuterPattern(throw)
                               parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                   parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3453,7 +3661,7 @@
                         listener: handleInvalidStatement(return, GeneratorReturnsValue)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Foo)
@@ -3461,7 +3669,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(}, null, null, null, null, null, null, null, }, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, }, false)
                   listener: beginRecordType(()
@@ -3504,8 +3712,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3518,7 +3730,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, (, sync, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, sync, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -3526,7 +3738,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, instanceGetter, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, instanceGetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, instanceGetter, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -3574,8 +3786,12 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parseThrowExpression(return, true)
                             parseExpression(throw)
+                              looksLikeOuterPatternEquals(throw)
+                                skipOuterPattern(throw)
                               parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                   parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3590,7 +3806,7 @@
                         listener: handleInvalidStatement(return, GeneratorReturnsValue)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, (, sync, null, })
+                listener: endMethod(DeclarationKind.Class, get, (, sync, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 24, {, })
@@ -3628,7 +3844,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -3685,6 +3901,8 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -3692,12 +3910,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -3710,7 +3932,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -3719,7 +3941,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -3781,6 +4003,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -3788,12 +4012,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -3808,7 +4036,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -3817,7 +4045,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -3874,8 +4102,12 @@
                 parseFunctionBody(async, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3887,7 +4119,7 @@
                     ensureSemicolon("hello")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -3896,7 +4128,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -3960,8 +4192,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -3974,7 +4210,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -3983,7 +4219,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4040,8 +4276,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4054,7 +4294,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4063,7 +4303,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4127,8 +4367,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4141,7 +4385,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -4150,7 +4394,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4207,8 +4451,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4221,7 +4469,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4230,7 +4478,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4294,8 +4542,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4308,7 +4560,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(null, static, (, null, })
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -4316,7 +4568,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4358,6 +4610,8 @@
                 parseFunctionBody(get, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -4365,12 +4619,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -4383,7 +4641,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4391,7 +4649,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4438,6 +4696,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -4445,12 +4705,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -4465,7 +4729,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -4473,7 +4737,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4515,8 +4779,12 @@
                 parseFunctionBody(async, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4528,7 +4796,7 @@
                     ensureSemicolon("hello")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4536,7 +4804,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4585,8 +4853,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4599,7 +4871,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -4607,7 +4879,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4649,8 +4921,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4663,7 +4939,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, static, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4671,7 +4947,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4720,8 +4996,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4734,7 +5014,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -4742,7 +5022,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4784,8 +5064,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4798,7 +5082,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, static, sync, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, sync, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4806,7 +5090,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, get, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, get, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, get, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4855,8 +5139,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -4869,7 +5157,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, sync, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, sync, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -4877,7 +5165,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4919,6 +5207,8 @@
                 parseFunctionBody(staticGetter, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -4926,12 +5216,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -4944,7 +5238,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -4952,7 +5246,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -4999,6 +5293,8 @@
                       parseReturnStatement({)
                         listener: beginReturnStatement(return)
                         parseExpression(return)
+                          looksLikeOuterPatternEquals(return)
+                            skipOuterPattern(return)
                           parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(return, true, ConstantPatternContext.none)
                               parsePrimary(return, expression, ConstantPatternContext.none)
@@ -5006,12 +5302,16 @@
                                   parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                                     listener: beginParenthesizedExpressionOrRecordLiteral(()
                                     parseExpression(()
+                                      looksLikeOuterPatternEquals(()
+                                        skipOuterPattern(()
                                       parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression((, true, ConstantPatternContext.none)
                                           parsePrimary((, expression, ConstantPatternContext.none)
                                             parseLiteralInt(()
                                               listener: handleLiteralInt(42)
                                     parseExpression(,)
+                                      looksLikeOuterPatternEquals(,)
+                                        skipOuterPattern(,)
                                       parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                         parseUnaryExpression(,, true, ConstantPatternContext.none)
                                           parsePrimary(,, expression, ConstantPatternContext.none)
@@ -5026,7 +5326,7 @@
                         inGenerator()
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, {, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, {, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -5034,7 +5334,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -5076,8 +5376,12 @@
                 parseFunctionBody(async, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -5089,7 +5393,7 @@
                     ensureSemicolon("hello")
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -5097,7 +5401,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -5146,8 +5450,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -5160,7 +5468,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -5168,7 +5476,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -5210,8 +5518,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -5224,7 +5536,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, static, async, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -5232,7 +5544,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -5281,8 +5593,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -5295,7 +5611,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, async, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, async, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(}, DeclarationKind.Class, Bar)
@@ -5303,7 +5619,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(}, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -5345,8 +5661,12 @@
                 parseFunctionBody(*, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parseThrowExpression(=>, true)
                         parseExpression(throw)
+                          looksLikeOuterPatternEquals(throw)
+                            skipOuterPattern(throw)
                           parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(throw, true, ConstantPatternContext.none)
                               parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -5359,7 +5679,7 @@
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
                     listener: handleInvalidStatement(=>, GeneratorReturnsValue)
-                listener: endClassMethod(get, static, sync, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, sync, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -5367,7 +5687,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, staticGetter, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, staticGetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, staticGetter, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -5416,8 +5736,12 @@
                           looksLikeLocalFunction(throw)
                           parseExpressionStatement({)
                             parseExpression({)
+                              looksLikeOuterPatternEquals({)
+                                skipOuterPattern({)
                               parseThrowExpression({, true)
                                 parseExpression(throw)
+                                  looksLikeOuterPatternEquals(throw)
+                                    skipOuterPattern(throw)
                                   parsePrecedenceExpression(throw, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(throw, true, ConstantPatternContext.none)
                                       parsePrimary(throw, expression, ConstantPatternContext.none)
@@ -5430,7 +5754,7 @@
                             listener: handleExpressionStatement(throw, ;)
                   notEofOrType(CLOSE_CURLY_BRACKET, })
                   listener: endBlockFunctionBody(1, {, })
-                listener: endClassMethod(get, static, sync, null, })
+                listener: endMethod(DeclarationKind.Class, get, static, sync, null, })
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 24, {, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_in_for_loop.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_in_for_loop.dart.intertwined.expect
index 5c68e8d..0964173 100644
--- a/pkg/front_end/parser_testcases/record/record_type_in_for_loop.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_in_for_loop.dart.intertwined.expect
@@ -75,12 +75,16 @@
                   parseForInLoopPartsRest(x, null, for, null, x)
                     listener: beginForInExpression([)
                     parseExpression(in)
+                      looksLikeOuterPatternEquals(in)
+                        skipOuterPattern(in)
                       parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(in, true, ConstantPatternContext.none)
                           parsePrimary(in, expression, ConstantPatternContext.none)
                             listener: handleNoTypeArguments([)
                             parseLiteralListSuffix(in, null)
                               parseExpression([)
+                                looksLikeOuterPatternEquals([)
+                                  skipOuterPattern([)
                                 parsePrecedenceExpression([, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression([, true, ConstantPatternContext.none)
                                     parsePrimary([, expression, ConstantPatternContext.none)
@@ -88,12 +92,16 @@
                                         parseParenthesizedExpressionOrRecordLiteral([, null, ConstantPatternContext.none)
                                           listener: beginParenthesizedExpressionOrRecordLiteral(()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
                                                   parseLiteralInt(()
                                                     listener: handleLiteralInt(42)
                                           parseExpression(,)
+                                            looksLikeOuterPatternEquals(,)
+                                              skipOuterPattern(,)
                                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -102,6 +110,8 @@
                                           ensureCloseParen(42, ()
                                           listener: endRecordLiteral((, 2, null)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -109,12 +119,16 @@
                                         parseParenthesizedExpressionOrRecordLiteral(,, null, ConstantPatternContext.none)
                                           listener: beginParenthesizedExpressionOrRecordLiteral(()
                                           parseExpression(()
+                                            looksLikeOuterPatternEquals(()
+                                              skipOuterPattern(()
                                             parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression((, true, ConstantPatternContext.none)
                                                 parsePrimary((, expression, ConstantPatternContext.none)
                                                   parseLiteralInt(()
                                                     listener: handleLiteralInt(21)
                                           parseExpression(,)
+                                            looksLikeOuterPatternEquals(,)
+                                              skipOuterPattern(,)
                                             parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                               parseUnaryExpression(,, true, ConstantPatternContext.none)
                                                 parsePrimary(,, expression, ConstantPatternContext.none)
@@ -139,6 +153,9 @@
                               looksLikeLocalFunction(print)
                               parseExpressionStatement({)
                                 parseExpression({)
+                                  looksLikeOuterPatternEquals({)
+                                    skipOuterPattern({)
+                                      skipObjectPatternRest(print)
                                   parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression({, true, ConstantPatternContext.none)
                                       parsePrimary({, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_return_on_function_with_type_parameter.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_return_on_function_with_type_parameter.dart.intertwined.expect
index 5a493b8b..92efd0f 100644
--- a/pkg/front_end/parser_testcases/record/record_type_return_on_function_with_type_parameter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_return_on_function_with_type_parameter.dart.intertwined.expect
@@ -73,6 +73,8 @@
               parseReturnStatement({)
                 listener: beginReturnStatement(return)
                 parseExpression(return)
+                  looksLikeOuterPatternEquals(return)
+                    skipOuterPattern(return)
                   parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
                     parseUnaryExpression(return, true, ConstantPatternContext.none)
                       parsePrimary(return, expression, ConstantPatternContext.none)
@@ -80,12 +82,17 @@
                           parseParenthesizedExpressionOrRecordLiteral(return, null, ConstantPatternContext.none)
                             listener: beginParenthesizedExpressionOrRecordLiteral(()
                             parseExpression(()
+                              looksLikeOuterPatternEquals(()
+                                skipOuterPattern(()
                               parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression((, true, ConstantPatternContext.none)
                                   parsePrimary((, expression, ConstantPatternContext.none)
                                     parseLiteralInt(()
                                       listener: handleLiteralInt(42)
                             parseExpression(,)
+                              looksLikeOuterPatternEquals(,)
+                                skipOuterPattern(,)
+                                  skipObjectPatternRest(t)
                               parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                 parseUnaryExpression(,, true, ConstantPatternContext.none)
                                   parsePrimary(,, expression, ConstantPatternContext.none)
@@ -172,6 +179,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -179,12 +188,17 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
+                              skipObjectPatternRest(t)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
diff --git a/pkg/front_end/parser_testcases/record/record_type_setter.dart.expect b/pkg/front_end/parser_testcases/record/record_type_setter.dart.expect
index 226a91a..f577774 100644
--- a/pkg/front_end/parser_testcases/record/record_type_setter.dart.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_setter.dart.expect
@@ -217,7 +217,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, (, (, null, ;)
+          endMethod(DeclarationKind.Class, null, (, (, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -260,7 +260,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(set, void, (, null, ;)
+          endMethod(DeclarationKind.Class, set, void, (, null, ;)
         endMember()
         beginMetadataStar(()
         endMetadataStar(0)
@@ -295,7 +295,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, (, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, (, =>, null, ;)
         endMember()
         beginMetadataStar(void)
         endMetadataStar(0)
@@ -338,7 +338,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(set, void, (, null, ;)
+          endMethod(DeclarationKind.Class, set, void, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
@@ -399,7 +399,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(null, static, (, null, ;)
+          endMethod(DeclarationKind.Class, null, static, (, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -442,7 +442,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(set, static, (, null, ;)
+          endMethod(DeclarationKind.Class, set, static, (, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -477,7 +477,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(get, static, =>, null, ;)
+          endMethod(DeclarationKind.Class, get, static, =>, null, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -520,7 +520,7 @@
               endLiteralString(0, ))
             endRecordLiteral((, 2, null)
             handleExpressionFunctionBody(=>, ;)
-          endClassMethod(set, static, (, null, ;)
+          endMethod(DeclarationKind.Class, set, static, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_setter.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_setter.dart.intertwined.expect
index e7c9008..d59bf4b 100644
--- a/pkg/front_end/parser_testcases/record/record_type_setter.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_setter.dart.intertwined.expect
@@ -62,6 +62,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -69,12 +71,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -147,6 +153,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -154,12 +162,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -219,6 +231,8 @@
         parseFunctionBody(set, false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -226,12 +240,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -304,6 +322,8 @@
         parseFunctionBody(), false, false)
           parseExpressionFunctionBody(=>, false)
             parseExpression(=>)
+              looksLikeOuterPatternEquals(=>)
+                skipOuterPattern(=>)
               parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                 parseUnaryExpression(=>, true, ConstantPatternContext.none)
                   parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -311,12 +331,16 @@
                       parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                         listener: beginParenthesizedExpressionOrRecordLiteral(()
                         parseExpression(()
+                          looksLikeOuterPatternEquals(()
+                            skipOuterPattern(()
                           parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression((, true, ConstantPatternContext.none)
                               parsePrimary((, expression, ConstantPatternContext.none)
                                 parseLiteralInt(()
                                   listener: handleLiteralInt(42)
                         parseExpression(,)
+                          looksLikeOuterPatternEquals(,)
+                            skipOuterPattern(,)
                           parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                             parseUnaryExpression(,, true, ConstantPatternContext.none)
                               parsePrimary(,, expression, ConstantPatternContext.none)
@@ -363,7 +387,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, set, DeclarationKind.Class, Foo, false)
+              parseMethod({, null, null, null, null, null, null, null, {, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, set, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, set, Foo)
                 parseRecordType((, {, false)
                   listener: beginRecordType(()
@@ -421,6 +445,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -428,12 +454,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -446,7 +476,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, (, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, (, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -454,7 +484,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, set, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, set, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, set, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -510,6 +540,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -517,12 +549,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -535,7 +571,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(set, void, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, void, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, ()
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -543,7 +579,7 @@
                 listener: beginMetadataStar(()
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, set, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, set, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, get, set, Foo)
                 parseRecordType((, ;, false)
                   listener: beginRecordType(()
@@ -586,6 +622,8 @@
                 parseFunctionBody(set, false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -593,12 +631,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -611,7 +653,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, (, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, (, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, void)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -619,7 +661,7 @@
                 listener: beginMetadataStar(void)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, instanceSetter, DeclarationKind.Class, Foo, false)
+              parseMethod(;, null, null, null, null, null, null, null, ;, VoidType(), set, null, instanceSetter, DeclarationKind.Class, Foo, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, set, instanceSetter, Foo)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -675,6 +717,8 @@
                 parseFunctionBody(), false, true)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -682,12 +726,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -700,7 +748,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(set, void, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, void, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
@@ -738,7 +786,7 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, set, DeclarationKind.Class, Bar, false)
+              parseMethod({, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), null, null, set, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, null, set, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -795,6 +843,8 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -802,12 +852,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -820,7 +874,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(null, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, null, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -828,7 +882,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, set, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, null, set, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, set, set, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -883,6 +937,8 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -890,12 +946,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -908,7 +968,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(set, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -916,7 +976,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, set, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), get, null, set, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, get, set, Bar)
                 parseRecordType((, static, false)
                   listener: beginRecordType(()
@@ -958,6 +1018,8 @@
                 parseFunctionBody(set, false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -965,12 +1027,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -983,7 +1049,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(get, static, =>, null, ;)
+                listener: endMethod(DeclarationKind.Class, get, static, =>, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Bar)
@@ -991,7 +1057,7 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, staticSetter, DeclarationKind.Class, Bar, false)
+              parseMethod(;, null, null, null, static, null, null, null, static, VoidType(), set, null, staticSetter, DeclarationKind.Class, Bar, false)
                 listener: beginMethod(DeclarationKind.Class, null, null, static, null, null, set, staticSetter, Bar)
                 listener: handleVoidKeyword(void)
                 ensureIdentifierPotentiallyRecovered(set, methodDeclaration, false)
@@ -1046,6 +1112,8 @@
                 parseFunctionBody(), false, false)
                   parseExpressionFunctionBody(=>, false)
                     parseExpression(=>)
+                      looksLikeOuterPatternEquals(=>)
+                        skipOuterPattern(=>)
                       parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
                         parseUnaryExpression(=>, true, ConstantPatternContext.none)
                           parsePrimary(=>, expression, ConstantPatternContext.none)
@@ -1053,12 +1121,16 @@
                               parseParenthesizedExpressionOrRecordLiteral(=>, null, ConstantPatternContext.none)
                                 listener: beginParenthesizedExpressionOrRecordLiteral(()
                                 parseExpression(()
+                                  looksLikeOuterPatternEquals(()
+                                    skipOuterPattern(()
                                   parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression((, true, ConstantPatternContext.none)
                                       parsePrimary((, expression, ConstantPatternContext.none)
                                         parseLiteralInt(()
                                           listener: handleLiteralInt(42)
                                 parseExpression(,)
+                                  looksLikeOuterPatternEquals(,)
+                                    skipOuterPattern(,)
                                   parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                     parseUnaryExpression(,, true, ConstantPatternContext.none)
                                       parsePrimary(,, expression, ConstantPatternContext.none)
@@ -1071,7 +1143,7 @@
                     ensureSemicolon())
                     listener: handleExpressionFunctionBody(=>, ;)
                     inGenerator()
-                listener: endClassMethod(set, static, (, null, ;)
+                listener: endMethod(DeclarationKind.Class, set, static, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.expect b/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.expect
index e2c5119..090ff84 100644
--- a/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.expect
@@ -41,7 +41,7 @@
                 handleLiteralInt(42)
               endRecordLiteral((, 2, null)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -72,7 +72,7 @@
                 handleLiteralInt(42)
               endRecordLiteral((, 2, null)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, static, null, null, null, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, null, 1, static, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -103,7 +103,7 @@
                 handleLiteralInt(42)
               endRecordLiteral((, 2, null)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, static, null, null, final, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, final, 1, static, ;)
         endMember()
         beginMetadataStar(static)
         endMetadataStar(0)
@@ -134,7 +134,7 @@
                 handleLiteralInt(42)
               endRecordLiteral((, 2, null)
             endFieldInitializer(=, ))
-          endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+          endFields(DeclarationKind.Class, null, null, null, static, null, null, const, 1, static, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -160,7 +160,7 @@
             endRecordType((, null, 2, false)
             handleIdentifier(c, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
         endMember()
         beginMetadataStar(late)
         endMetadataStar(0)
@@ -186,7 +186,7 @@
             endRecordType((, null, 2, false)
             handleIdentifier(d, fieldDeclaration)
             handleNoFieldInitializer(;)
-          endClassFields(null, null, null, null, null, late, final, 1, late, ;)
+          endFields(DeclarationKind.Class, null, null, null, null, null, late, final, 1, late, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.intertwined.expect
index 62f9052..db15529 100644
--- a/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/record_type_with_modifiers.dart.intertwined.expect
@@ -66,6 +66,8 @@
                 parseFieldInitializerOpt(x, x, null, null, null, null, final, DeclarationKind.Class, Foo)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -73,12 +75,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -87,7 +93,7 @@
                               ensureCloseParen(42, ()
                               listener: endRecordLiteral((, 2, null)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, null, final, 1, final, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -127,6 +133,8 @@
                 parseFieldInitializerOpt(y, y, null, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -134,12 +142,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -148,7 +160,7 @@
                               ensureCloseParen(42, ()
                               listener: endRecordLiteral((, 2, null)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, static, null, null, null, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, null, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -189,6 +201,8 @@
                 parseFieldInitializerOpt(z, z, null, null, null, null, final, DeclarationKind.Class, Foo)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -196,12 +210,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -210,7 +228,7 @@
                               ensureCloseParen(42, ()
                               listener: endRecordLiteral((, 2, null)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, static, null, null, final, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, final, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, static)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -218,7 +236,6 @@
                 listener: beginMetadataStar(static)
                 listener: endMetadataStar(0)
               listener: beginMember()
-              skipOuterPattern(const)
               parseFields(;, null, null, null, static, null, null, const, const, ComplexTypeInfo(start: (, typeArguments: NoTypeParamOrArg(), beforeQuestionMark: null, end: ), typeVariableStarters: [], gftHasReturnType: null, isRecordType: true, gftReturnTypeHasRecordType: false, recovered: false), b, DeclarationKind.Class, Foo, false)
                 listener: beginFields(DeclarationKind.Class, null, null, null, static, null, null, const, ;)
                 parseRecordType((, const, false)
@@ -251,6 +268,8 @@
                 parseFieldInitializerOpt(b, b, null, null, null, null, const, DeclarationKind.Class, Foo)
                   listener: beginFieldInitializer(=)
                   parseExpression(=)
+                    looksLikeOuterPatternEquals(=)
+                      skipOuterPattern(=)
                     parsePrecedenceExpression(=, 1, true, ConstantPatternContext.none)
                       parseUnaryExpression(=, true, ConstantPatternContext.none)
                         parsePrimary(=, expression, ConstantPatternContext.none)
@@ -258,12 +277,16 @@
                             parseParenthesizedExpressionOrRecordLiteral(=, null, ConstantPatternContext.none)
                               listener: beginParenthesizedExpressionOrRecordLiteral(()
                               parseExpression(()
+                                looksLikeOuterPatternEquals(()
+                                  skipOuterPattern(()
                                 parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression((, true, ConstantPatternContext.none)
                                     parsePrimary((, expression, ConstantPatternContext.none)
                                       parseLiteralInt(()
                                         listener: handleLiteralInt(42)
                               parseExpression(,)
+                                looksLikeOuterPatternEquals(,)
+                                  skipOuterPattern(,)
                                 parsePrecedenceExpression(,, 1, true, ConstantPatternContext.none)
                                   parseUnaryExpression(,, true, ConstantPatternContext.none)
                                     parsePrimary(,, expression, ConstantPatternContext.none)
@@ -272,7 +295,7 @@
                               ensureCloseParen(42, ()
                               listener: endRecordLiteral((, 2, null)
                   listener: endFieldInitializer(=, ))
-                listener: endClassFields(null, null, null, static, null, null, const, 1, static, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, static, null, null, const, 1, static, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -311,7 +334,7 @@
                   listener: handleIdentifier(c, fieldDeclaration)
                 parseFieldInitializerOpt(c, c, late, null, null, null, null, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, null, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, null, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, late)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -351,7 +374,7 @@
                   listener: handleIdentifier(d, fieldDeclaration)
                 parseFieldInitializerOpt(d, d, late, null, null, null, final, DeclarationKind.Class, Foo)
                   listener: handleNoFieldInitializer(;)
-                listener: endClassFields(null, null, null, null, null, late, final, 1, late, ;)
+                listener: endFields(DeclarationKind.Class, null, null, null, null, null, late, final, 1, late, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 6, {, })
diff --git a/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.expect b/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.expect
index 273247e..2f5ad00 100644
--- a/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.expect
+++ b/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.expect
@@ -17,7 +17,7 @@
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType({)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -50,12 +50,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, null, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -90,12 +90,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, null, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -130,12 +130,12 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, null, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
         endMember()
         beginMetadataStar(Foo)
         endMetadataStar(0)
         beginMember()
-          beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+          beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
             handleNoType(;)
             handleIdentifier(Foo, methodDeclaration)
             handleNoTypeVariables(()
@@ -170,7 +170,7 @@
             handleNoInitializers()
             handleAsyncModifier(null, null)
             handleEmptyFunctionBody(;)
-          endClassConstructor(null, Foo, (, null, ;)
+          endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
         endMember()
       endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
     endClassDeclaration(class, })
diff --git a/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.intertwined.expect b/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.intertwined.expect
index 68b868a..e0292ab 100644
--- a/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/record/super_parameters_record_type.dart.intertwined.expect
@@ -37,8 +37,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod({, null, null, null, null, null, null, null, {, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType({)
                 ensureIdentifierPotentiallyRecovered({, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -90,7 +90,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -99,8 +99,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -156,7 +156,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -165,8 +165,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -222,7 +222,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, Foo)
             parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Foo)
@@ -231,8 +231,8 @@
                 listener: endMetadataStar(0)
               listener: beginMember()
               isReservedKeyword(()
-              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, Foo, DeclarationKind.Class, Foo, false)
-                listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Foo, Foo)
+              parseMethod(;, null, null, null, null, null, null, null, ;, NoType(), null, null, Foo, DeclarationKind.Class, Foo, false)
+                listener: beginConstructor(DeclarationKind.Class, null, null, null, null, null, null, null, Foo, Foo)
                 listener: handleNoType(;)
                 ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
                   listener: handleIdentifier(Foo, methodDeclaration)
@@ -288,7 +288,7 @@
                 inPlainSync()
                 parseFunctionBody(), false, true)
                   listener: handleEmptyFunctionBody(;)
-                listener: endClassConstructor(null, Foo, (, null, ;)
+                listener: endConstructor(DeclarationKind.Class, Foo, null, (, null, ;)
               listener: endMember()
             notEofOrType(CLOSE_CURLY_BRACKET, })
             listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 4, {, })
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 9657a3e..e412b4d 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -1576,25 +1576,35 @@
           if (child.isClass()) {
             // Also try to remove all content of the class.
             ClassDeclarationEnd decl = child.asClass();
-            ClassOrMixinOrExtensionBodyEnd body = decl
+            ClassOrMixinOrExtensionBodyEnd? body = decl
                 .getClassOrMixinOrExtensionBody();
-            if (body.beginToken.offset + 2 < body.endToken.offset) {
-              helper.replacements.add(
-                new _Replacement(body.beginToken.offset, body.endToken.offset),
-              );
-              what = "class body";
-              success = await _tryReplaceAndCompile(
-                helper,
-                uri,
-                initialComponent,
-                what,
-              );
-              if (helper.shouldQuit) return;
-            }
+            Token bodyBegin;
+            if (body != null) {
+              bodyBegin = body.beginToken;
+              if (body.beginToken.offset + 2 < body.endToken.offset) {
+                helper.replacements.add(
+                  new _Replacement(
+                    body.beginToken.offset,
+                    body.endToken.offset,
+                  ),
+                );
+                what = "class body";
+                success = await _tryReplaceAndCompile(
+                  helper,
+                  uri,
+                  initialComponent,
+                  what,
+                );
+                if (helper.shouldQuit) return;
+              }
 
-            if (!success) {
-              // Also try to remove members one at a time.
-              await _deleteBlocksHelper(body, helper, uri, initialComponent);
+              if (!success) {
+                // Also try to remove members one at a time.
+                await _deleteBlocksHelper(body, helper, uri, initialComponent);
+              }
+            } else {
+              NoClassBodyHandle body = decl.getNoClassBody()!;
+              bodyBegin = body.semicolonToken;
             }
 
             // Try to remove "extends", "implements" etc.
@@ -1606,7 +1616,7 @@
               helper.replacements.add(
                 new _Replacement(
                   decl.getClassExtends().extendsKeyword!.offset - 1,
-                  body.beginToken.offset,
+                  bodyBegin.offset,
                 ),
               );
               what = "class extends";
@@ -1622,7 +1632,7 @@
               helper.replacements.add(
                 new _Replacement(
                   decl.getClassImplements().implementsKeyword!.offset - 1,
-                  body.beginToken.offset,
+                  bodyBegin.offset,
                 ),
               );
               what = "class implements";
@@ -1638,7 +1648,7 @@
               helper.replacements.add(
                 new _Replacement(
                   decl.getClassWithClause()!.withKeyword.offset - 1,
-                  body.beginToken.offset,
+                  bodyBegin.offset,
                 ),
               );
               what = "class with clause";
@@ -1675,24 +1685,29 @@
           } else if (child.isExtensionType()) {
             // Also try to remove all content of the extension type.
             ExtensionTypeDeclarationEnd decl = child.asExtensionType();
-            ClassOrMixinOrExtensionBodyEnd body = decl
+            ClassOrMixinOrExtensionBodyEnd? body = decl
                 .getClassOrMixinOrExtensionBody();
-            if (body.beginToken.offset + 2 < body.endToken.offset) {
-              helper.replacements.add(
-                new _Replacement(body.beginToken.offset, body.endToken.offset),
-              );
-              what = "extension type body";
-              success = await _tryReplaceAndCompile(
-                helper,
-                uri,
-                initialComponent,
-                what,
-              );
-              if (helper.shouldQuit) return;
-            }
+            if (body != null) {
+              if (body.beginToken.offset + 2 < body.endToken.offset) {
+                helper.replacements.add(
+                  new _Replacement(
+                    body.beginToken.offset,
+                    body.endToken.offset,
+                  ),
+                );
+                what = "extension type body";
+                success = await _tryReplaceAndCompile(
+                  helper,
+                  uri,
+                  initialComponent,
+                  what,
+                );
+                if (helper.shouldQuit) return;
+              }
 
-            if (!success) {
-              await _deleteBlocksHelper(body, helper, uri, initialComponent);
+              if (!success) {
+                await _deleteBlocksHelper(body, helper, uri, initialComponent);
+              }
             }
           } else if (child.isTopLevelMethod()) {
             // Try to remove parameters.
@@ -1734,18 +1749,18 @@
       bool shouldCompile = false;
       String what = "";
       if (child is MemberEnd) {
-        if (child.isClassConstructor()) {
-          ClassConstructorEnd memberDecl = child.getClassConstructor();
+        if (child.isConstructor()) {
+          ConstructorEnd memberDecl = child.getConstructor();
           helper.replacements.add(
             new _Replacement(
               memberDecl.beginToken.offset - 1,
               memberDecl.endToken.offset + 1,
             ),
           );
-          what = "class constructor";
+          what = "constructor";
           shouldCompile = true;
-        } else if (child.isClassFields()) {
-          ClassFieldsEnd memberDecl = child.getClassFields();
+        } else if (child.isFields()) {
+          FieldsEnd memberDecl = child.getFields();
           helper.replacements.add(
             new _Replacement(
               memberDecl.beginToken.offset - 1,
@@ -1754,147 +1769,25 @@
           );
           what = "class fields";
           shouldCompile = true;
-        } else if (child.isClassMethod()) {
-          ClassMethodEnd memberDecl = child.getClassMethod();
+        } else if (child.isMethod()) {
+          MethodEnd memberDecl = child.getMethod();
           helper.replacements.add(
             new _Replacement(
               memberDecl.beginToken.offset - 1,
               memberDecl.endToken.offset + 1,
             ),
           );
-          what = "class method";
+          what = "method";
           shouldCompile = true;
-        } else if (child.isClassFactoryMethod()) {
-          ClassFactoryMethodEnd memberDecl = child.getClassFactoryMethod();
+        } else if (child.isFactory()) {
+          FactoryEnd memberDecl = child.getFactory();
           helper.replacements.add(
             new _Replacement(
               memberDecl.beginToken.offset - 1,
               memberDecl.endToken.offset + 1,
             ),
           );
-          what = "class factory method";
-          shouldCompile = true;
-        } else if (child.isMixinConstructor()) {
-          MixinConstructorEnd memberDecl = child.getMixinConstructor();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "mixin constructor";
-          shouldCompile = true;
-        } else if (child.isMixinFields()) {
-          MixinFieldsEnd memberDecl = child.getMixinFields();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "mixin fields";
-          shouldCompile = true;
-        } else if (child.isMixinMethod()) {
-          MixinMethodEnd memberDecl = child.getMixinMethod();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "mixin method";
-          shouldCompile = true;
-        } else if (child.isMixinFactoryMethod()) {
-          MixinFactoryMethodEnd memberDecl = child.getMixinFactoryMethod();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "mixin factory method";
-          shouldCompile = true;
-        } else if (child.isExtensionTypeConstructor()) {
-          var memberDecl = child.getExtensionTypeConstructor();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension type constructor";
-          shouldCompile = true;
-        } else if (child.isExtensionTypeFields()) {
-          ExtensionTypeFieldsEnd memberDecl = child.getExtensionTypeFields();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension type fields";
-          shouldCompile = true;
-        } else if (child.isExtensionTypeMethod()) {
-          ExtensionTypeMethodEnd memberDecl = child.getExtensionTypeMethod();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension type method";
-          shouldCompile = true;
-        } else if (child.isExtensionTypeFactoryMethod()) {
-          ExtensionTypeFactoryMethodEnd memberDecl = child
-              .getExtensionTypeFactoryMethod();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension type factory method";
-          shouldCompile = true;
-        } else if (child.isExtensionConstructor()) {
-          var memberDecl = child.getExtensionConstructor();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension constructor";
-          shouldCompile = true;
-        } else if (child.isExtensionFields()) {
-          ExtensionFieldsEnd memberDecl = child.getExtensionFields();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension fields";
-          shouldCompile = true;
-        } else if (child.isExtensionMethod()) {
-          ExtensionMethodEnd memberDecl = child.getExtensionMethod();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension method";
-          shouldCompile = true;
-        } else if (child.isExtensionFactoryMethod()) {
-          ExtensionFactoryMethodEnd memberDecl = child
-              .getExtensionFactoryMethod();
-          helper.replacements.add(
-            new _Replacement(
-              memberDecl.beginToken.offset - 1,
-              memberDecl.endToken.offset + 1,
-            ),
-          );
-          what = "extension factory method";
+          what = "factory";
           shouldCompile = true;
         } else {
           // throw "$child --- ${child.children}";
@@ -1925,10 +1818,10 @@
         if (!success) {
           BlockFunctionBodyEnd? decl;
           if (child is MemberEnd) {
-            if (child.isClassMethod()) {
-              decl = child.getClassMethod().getBlockFunctionBody();
-            } else if (child.isClassConstructor()) {
-              decl = child.getClassConstructor().getBlockFunctionBody();
+            if (child.isMethod()) {
+              decl = child.getMethod().getBlockFunctionBody();
+            } else if (child.isConstructor()) {
+              decl = child.getConstructor().getBlockFunctionBody();
             }
             // TODO(jensj): The other ones too maybe?
           }
diff --git a/pkg/front_end/test/id_tests/assigned_variables_test.dart b/pkg/front_end/test/id_tests/assigned_variables_test.dart
index f00b3a2..ac419a2 100644
--- a/pkg/front_end/test/id_tests/assigned_variables_test.dart
+++ b/pkg/front_end/test/id_tests/assigned_variables_test.dart
@@ -53,7 +53,7 @@
     SourceMemberBuilder memberBuilder =
         lookupMemberBuilder(testResultData.compilerResult, member)
             as SourceMemberBuilder;
-    AssignedVariablesForTesting<TreeNode, VariableDeclaration>?
+    AssignedVariablesForTesting<TreeNode, ExpressionVariable>?
     assignedVariables = memberBuilder
         .dataForTesting!
         .inferenceData
@@ -72,7 +72,7 @@
 
 class AssignedVariablesDataExtractor extends CfeDataExtractor<_Data> {
   final SourceLoaderDataForTesting _sourceLoaderDataForTesting;
-  final AssignedVariablesForTesting<TreeNode, VariableDeclaration>
+  final AssignedVariablesForTesting<TreeNode, ExpressionVariable>
   _assignedVariables;
 
   AssignedVariablesDataExtractor(
@@ -95,7 +95,7 @@
   }
 
   Set<String> _convertVars(Iterable<int> x) =>
-      x.map((e) => _assignedVariables.variableForKey(e).name!).toSet();
+      x.map((e) => _assignedVariables.variableForKey(e).cosmeticName!).toSet();
 
   @override
   _Data? computeNodeValue(Id id, TreeNode node) {
diff --git a/pkg/front_end/test/lint_suite.dart b/pkg/front_end/test/lint_suite.dart
index 48fc90d..79c4cbe 100644
--- a/pkg/front_end/test/lint_suite.dart
+++ b/pkg/front_end/test/lint_suite.dart
@@ -9,7 +9,7 @@
     show DefaultExperimentalFeatures;
 import 'package:_fe_analyzer_shared/src/parser/listener.dart' show Listener;
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
-    show FormalParameterKind, MemberKind, Parser;
+    show FormalParameterKind, MemberKind, Parser, DeclarationKind;
 import 'package:_fe_analyzer_shared/src/scanner/abstract_scanner.dart'
     show ScannerConfiguration;
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
@@ -261,7 +261,8 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
diff --git a/pkg/front_end/test/parser/parser_ast_test.dart b/pkg/front_end/test/parser/parser_ast_test.dart
index 9267a7f..361e816 100644
--- a/pkg/front_end/test/parser/parser_ast_test.dart
+++ b/pkg/front_end/test/parser/parser_ast_test.dart
@@ -185,11 +185,11 @@
   expect(null, withClauseDecl);
   List<MemberEnd> members = cls.getClassOrMixinOrExtensionBody().getMembers();
   expect(5, members.length);
-  expect(members[0].isClassConstructor(), true);
-  expect(members[1].isClassFactoryMethod(), true);
-  expect(members[2].isClassMethod(), true);
-  expect(members[3].isClassMethod(), true);
-  expect(members[4].isClassFields(), true);
+  expect(members[0].isConstructor(), true);
+  expect(members[1].isFactory(), true);
+  expect(members[2].isMethod(), true);
+  expect(members[3].isMethod(), true);
+  expect(members[4].isFields(), true);
 
   List<String> chunks = splitIntoChunks(
     cls.getClassOrMixinOrExtensionBody(),
@@ -209,25 +209,19 @@
   expect("int field1, field2 = 42;", chunks[4]);
 
   chunks = processItem(
-    members[0].getClassConstructor().getBlockFunctionBody()!,
+    members[0].getConstructor().getBlockFunctionBody()!,
     data,
   );
   expect(1, chunks.length);
   expect("""{
     // Constructor
   }""", chunks[0]);
-  chunks = processItem(
-    members[2].getClassMethod().getBlockFunctionBody()!,
-    data,
-  );
+  chunks = processItem(members[2].getMethod().getBlockFunctionBody()!, data);
   expect(1, chunks.length);
   expect("""{
     // instance method.
   }""", chunks[0]);
-  chunks = processItem(
-    members[3].getClassMethod().getBlockFunctionBody()!,
-    data,
-  );
+  chunks = processItem(members[3].getMethod().getBlockFunctionBody()!, data);
   expect(1, chunks.length);
   expect("""{
     // static method.
@@ -235,10 +229,10 @@
 
   // TODO: Move (something like) this into the check-all-files-thing.
   for (MemberEnd member in cls.getClassOrMixinOrExtensionBody().getMembers()) {
-    if (member.isClassConstructor()) continue;
-    if (member.isClassFactoryMethod()) continue;
-    if (member.isClassFields()) continue;
-    if (member.isClassMethod()) continue;
+    if (member.isConstructor()) continue;
+    if (member.isFactory()) continue;
+    if (member.isFields()) continue;
+    if (member.isMethod()) continue;
     throw "$member --- ${member.children}";
   }
 
@@ -272,10 +266,10 @@
 
   List<MemberEnd> members = mxn.getClassOrMixinOrExtensionBody().getMembers();
   expect(4, members.length);
-  expect(members[0].isMixinFields(), true);
-  expect(members[1].isMixinMethod(), true);
-  expect(members[2].isMixinFactoryMethod(), true);
-  expect(members[3].isMixinConstructor(), true);
+  expect(members[0].isFields(), true);
+  expect(members[1].isMethod(), true);
+  expect(members[2].isFactory(), true);
+  expect(members[3].isConstructor(), true);
 
   List<String> chunks = splitIntoChunks(
     mxn.getClassOrMixinOrExtensionBody(),
@@ -298,10 +292,13 @@
   if (expect != actual) throw "Expected '$expect' but got '$actual'";
 }
 
-List<String> splitIntoChunks(ParserAstNode ast, List<int> data) {
+List<String> splitIntoChunks(ParserAstNode? ast, List<int> data) {
   List<String> foundChunks = [];
-  for (ParserAstNode child in ast.children!) {
-    foundChunks.addAll(processItem(child, data));
+  List<ParserAstNode>? children = ast?.children;
+  if (children != null) {
+    for (ParserAstNode child in children) {
+      foundChunks.addAll(processItem(child, data));
+    }
   }
   return foundChunks;
 }
@@ -481,8 +478,8 @@
       ),
     ];
   } else if (item is MemberEnd) {
-    if (item.isClassConstructor()) {
-      ClassConstructorEnd decl = item.getClassConstructor();
+    if (item.isConstructor()) {
+      ConstructorEnd decl = item.getConstructor();
       // Check that we can get the identifiers without throwing.
       decl.getIdentifiers();
       return [
@@ -492,8 +489,8 @@
           decl.endToken.offset + decl.endToken.length,
         ),
       ];
-    } else if (item.isClassFactoryMethod()) {
-      ClassFactoryMethodEnd decl = item.getClassFactoryMethod();
+    } else if (item.isFactory()) {
+      FactoryEnd decl = item.getFactory();
       // Check that we can get the identifiers without throwing.
       decl.getIdentifiers();
       return [
@@ -503,8 +500,8 @@
           decl.endToken.offset + decl.endToken.length,
         ),
       ];
-    } else if (item.isClassMethod()) {
-      ClassMethodEnd decl = item.getClassMethod();
+    } else if (item.isMethod()) {
+      MethodEnd decl = item.getMethod();
       // Check that we can get the identifier without throwing.
       decl.getNameIdentifier();
       return [
@@ -514,8 +511,8 @@
           decl.endToken.offset + decl.endToken.length,
         ),
       ];
-    } else if (item.isClassFields()) {
-      ClassFieldsEnd decl = item.getClassFields();
+    } else if (item.isFields()) {
+      FieldsEnd decl = item.getFields();
       // Check that we can get the identifiers without throwing.
       decl.getFieldIdentifiers();
       return [
@@ -525,175 +522,8 @@
           decl.endToken.offset + decl.endToken.length,
         ),
       ];
-    } else if (item.isMixinFields()) {
-      MixinFieldsEnd decl = item.getMixinFields();
-      // Check that we can get the identifiers without throwing.
-      decl.getFieldIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isMixinMethod()) {
-      MixinMethodEnd decl = item.getMixinMethod();
-      // Check that we can get the identifier without throwing.
-      decl.getNameIdentifier();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isMixinFactoryMethod()) {
-      MixinFactoryMethodEnd decl = item.getMixinFactoryMethod();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isMixinConstructor()) {
-      MixinConstructorEnd decl = item.getMixinConstructor();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionMethod()) {
-      ExtensionMethodEnd decl = item.getExtensionMethod();
-      // Check that we can get the identifier without throwing.
-      decl.getNameIdentifier();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionFields()) {
-      ExtensionFieldsEnd decl = item.getExtensionFields();
-      // Check that we can get the identifiers without throwing.
-      decl.getFieldIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionConstructor()) {
-      ExtensionConstructorEnd decl = item.getExtensionConstructor();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionFactoryMethod()) {
-      ExtensionFactoryMethodEnd decl = item.getExtensionFactoryMethod();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionTypeMethod()) {
-      ExtensionTypeMethodEnd decl = item.getExtensionTypeMethod();
-      // Check that we can get the identifier without throwing.
-      decl.getNameIdentifier();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionTypeFields()) {
-      ExtensionTypeFieldsEnd decl = item.getExtensionTypeFields();
-      // Check that we can get the identifiers without throwing.
-      decl.getFieldIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionTypeConstructor()) {
-      ExtensionTypeConstructorEnd decl = item.getExtensionTypeConstructor();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isExtensionTypeFactoryMethod()) {
-      ExtensionTypeFactoryMethodEnd decl = item.getExtensionTypeFactoryMethod();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isEnumMethod()) {
-      EnumMethodEnd decl = item.getEnumMethod();
-      // Check that we can get the identifier without throwing.
-      decl.getNameIdentifier();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isEnumFields()) {
-      EnumFieldsEnd decl = item.getEnumFields();
-      // Check that we can get the identifiers without throwing.
-      decl.getFieldIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isEnumConstructor()) {
-      EnumConstructorEnd decl = item.getEnumConstructor();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
-      return [
-        getCutContent(
-          data,
-          decl.beginToken.offset,
-          decl.endToken.offset + decl.endToken.length,
-        ),
-      ];
-    } else if (item.isEnumFactoryMethod()) {
-      EnumFactoryMethodEnd decl = item.getEnumFactoryMethod();
-      // Check that we can get the identifiers without throwing.
-      decl.getIdentifiers();
+    } else if (item.isPrimaryConstructorBody()) {
+      PrimaryConstructorBodyEnd decl = item.getPrimaryConstructorBody();
       return [
         getCutContent(
           data,
diff --git a/pkg/front_end/test/parser_all_suite.dart b/pkg/front_end/test/parser_all_suite.dart
index 9e8b4b5..4c54318 100644
--- a/pkg/front_end/test/parser_all_suite.dart
+++ b/pkg/front_end/test/parser_all_suite.dart
@@ -18,5 +18,11 @@
   Chain suite,
   Map<String, String> environment,
 ) {
-  return new Future.value(new ContextChecksOnly(suite.name));
+  return new Future.value(
+    new ContextChecksOnly(
+      baseUri: suite.root,
+      suiteName: suite.name,
+      environment: environment,
+    ),
+  );
 }
diff --git a/pkg/front_end/test/parser_equivalence_suite.dart b/pkg/front_end/test/parser_equivalence_suite.dart
index 4d8421d..a152981 100644
--- a/pkg/front_end/test/parser_equivalence_suite.dart
+++ b/pkg/front_end/test/parser_equivalence_suite.dart
@@ -4,10 +4,12 @@
 
 import 'dart:io';
 
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
 import 'package:testing/testing.dart'
     show Chain, ChainContext, Result, Step, TestDescription;
 import "package:yaml/yaml.dart" show YamlMap, loadYamlNode;
 
+import 'testing/folder_options.dart';
 import 'utils/suite_utils.dart';
 import 'parser_suite.dart'
     show ListenerStep, ParserTestListenerWithMessageFormatting;
@@ -24,13 +26,18 @@
   const Set<String> knownEnvironmentKeys = {};
   checkEnvironment(environment, knownEnvironmentKeys);
 
-  return new Future.value(new Context(suite.name));
+  return new Future.value(new Context(suite.root, suite.name, environment));
 }
 
 class Context extends ChainContext {
+  final SuiteFolderOptions folderOptions;
   final String suiteName;
+  final Map<ExperimentalFlag, bool> forcedExperimentalFlags;
 
-  Context(this.suiteName);
+  Context(Uri baseUri, this.suiteName, Map<String, String> environment)
+    : folderOptions = new SuiteFolderOptions(baseUri),
+      forcedExperimentalFlags =
+          SuiteFolderOptions.computeForcedExperimentalFlags(environment);
 
   @override
   final List<Step> steps = const <Step>[const ListenerCompareStep()];
@@ -48,6 +55,8 @@
     TestDescription description,
     Context context,
   ) {
+    Map<ExperimentalFlag, bool> experimentalFlags = description
+        .computeExplicitExperimentalFlags(context);
     Uri uri = description.uri;
     String contents = new File.fromUri(uri).readAsStringSync();
     YamlMap yaml = loadYamlNode(contents, sourceUrl: uri) as YamlMap;
@@ -61,6 +70,7 @@
         ListenerStep.doListenerParsing(
           files[0],
           context.suiteName,
+          experimentalFlags,
           description.shortName,
         );
     if (parserTestListenerFirst == null) {
@@ -72,6 +82,7 @@
           ListenerStep.doListenerParsing(
             files[i],
             context.suiteName,
+            experimentalFlags,
             description.shortName,
           );
       if (parserTestListener == null) {
@@ -164,3 +175,17 @@
     return s.substring(0, index);
   }
 }
+
+extension on TestDescription {
+  FolderOptions computeFolderOptions(Context context) {
+    return context.folderOptions.computeFolderOptions(this);
+  }
+
+  Map<ExperimentalFlag, bool> computeExplicitExperimentalFlags(
+    Context context,
+  ) {
+    return computeFolderOptions(
+      context,
+    ).computeExplicitExperimentalFlags(context.forcedExperimentalFlags);
+  }
+}
diff --git a/pkg/front_end/test/parser_suite.dart b/pkg/front_end/test/parser_suite.dart
index bc8de94..cb8c9f2 100644
--- a/pkg/front_end/test/parser_suite.dart
+++ b/pkg/front_end/test/parser_suite.dart
@@ -11,14 +11,19 @@
 import 'package:_fe_analyzer_shared/src/experiments/flags.dart'
     as shared
     show ExperimentalFlag;
-import 'package:_fe_analyzer_shared/src/parser/experimental_features.dart'
-    show DefaultExperimentalFeatures;
 import 'package:_fe_analyzer_shared/src/parser/parser.dart'
     show Parser, lengthOfSpan;
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
-    show ErrorToken, ScannerConfiguration, ScannerResult, Token, scan;
+    show
+        ErrorToken,
+        ScannerConfiguration,
+        ScannerResult,
+        Token,
+        scan,
+        LanguageVersionChanged;
 import 'package:_fe_analyzer_shared/src/scanner/token.dart'
     show SyntheticStringToken;
+import 'package:front_end/src/api_prototype/experimental_flags.dart';
 import 'package:front_end/src/base/command_line_reporting.dart'
     as command_line_reporting;
 import 'package:front_end/src/base/messages.dart' show Message;
@@ -32,12 +37,14 @@
 import 'package:testing/testing.dart'
     show Chain, ChainContext, ExpectationSet, Result, Step, TestDescription;
 
-import 'utils/suite_utils.dart';
-import 'testing/environment_keys.dart';
 import 'parser_test_listener.dart' show ParserTestListener;
 import 'parser_test_parser.dart' show TestParser;
+import 'testing/environment_keys.dart';
+import 'testing/experimental_features.dart';
+import 'testing/folder_options.dart';
 import 'testing_utils.dart' show checkEnvironment;
 import 'utils/kernel_chain.dart' show MatchContext;
+import 'utils/suite_utils.dart';
 
 const String EXPECTATIONS = '''
 [
@@ -73,7 +80,14 @@
   bool annotateLines = environment[EnvironmentKeys.annotateLines] == "true";
 
   return new Future.value(
-    new Context(suite.name, updateExpectations, trace, annotateLines),
+    new Context(
+      baseUri: suite.root,
+      suiteName: suite.name,
+      updateExpectations: updateExpectations,
+      addTrace: trace,
+      annotateLines: annotateLines,
+      environment: environment,
+    ),
   );
 }
 
@@ -108,13 +122,19 @@
   final bool addTrace;
   final bool annotateLines;
   final String suiteName;
+  final SuiteFolderOptions folderOptions;
 
-  Context(
-    this.suiteName,
-    this.updateExpectations,
-    this.addTrace,
-    this.annotateLines,
-  );
+  final Map<ExperimentalFlag, bool> forcedExperimentalFlags;
+  Context({
+    required Uri baseUri,
+    required this.suiteName,
+    required this.updateExpectations,
+    required this.addTrace,
+    required this.annotateLines,
+    required Map<String, String> environment,
+  }) : folderOptions = new SuiteFolderOptions(baseUri),
+       forcedExperimentalFlags =
+           SuiteFolderOptions.computeForcedExperimentalFlags(environment);
 
   @override
   final List<Step> steps = const <Step>[
@@ -132,7 +152,18 @@
 }
 
 class ContextChecksOnly extends Context {
-  ContextChecksOnly(String suiteName) : super(suiteName, false, false, false);
+  ContextChecksOnly({
+    required Uri baseUri,
+    required String suiteName,
+    required Map<String, String> environment,
+  }) : super(
+         baseUri: baseUri,
+         suiteName: suiteName,
+         updateExpectations: false,
+         addTrace: false,
+         annotateLines: false,
+         environment: environment,
+       );
 
   @override
   final List<Step> steps = const <Step>[
@@ -158,6 +189,7 @@
     TestDescription description,
     Context context,
   ) {
+    FolderOptions folderOptions = description.computeFolderOptions(context);
     Uri uri = description.uri;
     File f = new File.fromUri(uri);
     Uint8List rawBytes = f.readAsBytesSync();
@@ -166,7 +198,7 @@
       throw "Expected a single element for 'CompilationUnit' "
           "but got ${ast.what}";
     }
-    if (enablePossibleExpectFile && shouldDoOutline(description.shortName)) {
+    if (enablePossibleExpectFile && folderOptions.withOutline) {
       ExtractSomeMembers indexer = new ExtractSomeMembers();
       ast.accept(indexer);
       return context.match<TestDescription>(
@@ -199,10 +231,8 @@
   }
 
   @override
-  void visitClassMethodEnd(ClassMethodEnd node) {
-    sb.writeln(
-      "Class method: $currentContainerName.${node.getNameIdentifier()}",
-    );
+  void visitMethodEnd(MethodEnd node) {
+    sb.writeln("Method: $currentContainerName.${node.getNameIdentifier()}");
   }
 }
 
@@ -220,12 +250,20 @@
   static ParserTestListenerWithMessageFormatting? doListenerParsing(
     Uri uri,
     String suiteName,
+    Map<ExperimentalFlag, bool> explicitExperimentalFlags,
     String shortName, {
     bool addTrace = false,
     bool annotateLines = false,
   }) {
+    ExperimentalFeaturesFromFlags experimentalFeatures =
+        new ExperimentalFeaturesFromFlags(explicitExperimentalFlags);
     List<int> lineStarts = <int>[];
-    Token firstToken = scanUri(uri, shortName, lineStarts: lineStarts);
+    Token firstToken = scanUri(
+      uri,
+      experimentalFeatures,
+      lineStarts: lineStarts,
+      languageVersionChanged: experimentalFeatures.onLanguageVersionChanged,
+    );
 
     File f = new File.fromUri(uri);
     Uint8List rawBytes = f.readAsBytesSync();
@@ -241,7 +279,7 @@
     Parser parser = new Parser(
       parserTestListener,
       useImplicitCreationExpression: useImplicitCreationExpressionInCfe,
-      experimentalFeatures: new TestDescriptionExperimentalFeatures(shortName),
+      experimentalFeatures: experimentalFeatures,
     );
     parser.parseUnit(firstToken);
     return parserTestListener;
@@ -253,11 +291,11 @@
     Context context,
   ) {
     Uri uri = description.uri;
-
     ParserTestListenerWithMessageFormatting? parserTestListener =
         doListenerParsing(
           uri,
           context.suiteName,
+          description.computeExplicitExperimentalFlags(context),
           description.shortName,
           addTrace: context.addTrace,
           annotateLines: context.annotateLines,
@@ -298,10 +336,15 @@
     Context context,
   ) {
     List<int> lineStarts = <int>[];
+    Map<ExperimentalFlag, bool> explicitExperimentalFlags = description
+        .computeExplicitExperimentalFlags(context);
+    ExperimentalFeaturesFromFlags experimentalFeatures =
+        new ExperimentalFeaturesFromFlags(explicitExperimentalFlags);
     Token firstToken = scanUri(
       description.uri,
-      description.shortName,
+      experimentalFeatures,
       lineStarts: lineStarts,
+      languageVersionChanged: experimentalFeatures.onLanguageVersionChanged,
     );
 
     File f = new File.fromUri(description.uri);
@@ -322,9 +365,7 @@
     TestParser parser = new TestParser(
       parserTestListener,
       context.addTrace,
-      experimentalFeatures: new TestDescriptionExperimentalFeatures(
-        description.shortName,
-      ),
+      experimentalFeatures: experimentalFeatures,
     );
     parserTestListener.parser = parser;
     parser.sb = parserTestListener.sb;
@@ -339,26 +380,6 @@
   }
 }
 
-class TestDescriptionExperimentalFeatures extends DefaultExperimentalFeatures {
-  final String shortName;
-
-  TestDescriptionExperimentalFeatures(this.shortName);
-
-  @override
-  bool isExperimentEnabled(shared.ExperimentalFlag flag) {
-    return switch (flag) {
-      // TODO(johnniwinther): Use 'folder.options' for this instead.
-      shared.ExperimentalFlag.patterns => shouldAllowPatterns(shortName),
-      shared.ExperimentalFlag.enhancedParts => shouldAllowEnhancedParts(
-        shortName,
-      ),
-      shared.ExperimentalFlag.declaringConstructors =>
-        shouldAllowDeclaringConstructors(shortName),
-      _ => super.isExperimentEnabled(flag),
-    };
-  }
-}
-
 class TokenStep extends Step<TestDescription, TestDescription, Context> {
   final bool onlyScanner;
   final String suffix;
@@ -373,11 +394,16 @@
     TestDescription description,
     Context context,
   ) {
+    Map<ExperimentalFlag, bool> explicitExperimentalFlags = description
+        .computeExplicitExperimentalFlags(context);
+    ExperimentalFeaturesFromFlags experimentalFeatures =
+        new ExperimentalFeaturesFromFlags(explicitExperimentalFlags);
     List<int> lineStarts = <int>[];
     Token firstToken = scanUri(
       description.uri,
-      description.shortName,
+      experimentalFeatures,
       lineStarts: lineStarts,
+      languageVersionChanged: experimentalFeatures.onLanguageVersionChanged,
     );
 
     StringBuffer beforeParser = tokenStreamToString(firstToken, lineStarts);
@@ -401,9 +427,7 @@
     Parser parser = new Parser(
       parserTestListener,
       useImplicitCreationExpression: useImplicitCreationExpressionInCfe,
-      experimentalFeatures: new TestDescriptionExperimentalFeatures(
-        description.shortName,
-      ),
+      experimentalFeatures: experimentalFeatures,
     );
     bool parserCrashed = false;
     dynamic parserCrashedE;
@@ -526,57 +550,33 @@
   return sb;
 }
 
-Token scanUri(Uri uri, String shortName, {List<int>? lineStarts}) {
+Token scanUri(
+  Uri uri,
+  ExperimentalFeaturesFromFlags experimentalFeatures, {
+  List<int>? lineStarts,
+  LanguageVersionChanged? languageVersionChanged,
+}) {
   File f = new File.fromUri(uri);
   Uint8List rawBytes = f.readAsBytesSync();
-  return scanRawBytes(rawBytes, _getConfig(shortName), lineStarts);
-}
-
-ScannerConfiguration _getConfig(String shortName) {
-  ScannerConfiguration config;
-
-  String firstDir = shortName.split("/")[0];
-  if (firstDir == "also-nnbd") {
-    config = scannerConfigurationNonTripleShift;
-  } else if (firstDir == "no-triple-shift") {
-    config = scannerConfigurationNonTripleShift;
-  } else if (firstDir == "augmentation") {
-    config = scannerConfigurationAugmentation;
-  } else {
-    config = scannerConfiguration;
-  }
-  return config;
-}
-
-bool shouldDoOutline(String shortName) {
-  List<String> split = shortName.split("/");
-  return (split.length > 1 && split[split.length - 2] == "with_outline");
-}
-
-bool shouldAllowPatterns(String shortName) {
-  String firstDir = shortName.split("/")[0];
-  return firstDir == "patterns";
-}
-
-bool shouldAllowEnhancedParts(String shortName) {
-  String firstDir = shortName.split("/")[0];
-  return firstDir == "enhanced_parts";
-}
-
-bool shouldAllowDeclaringConstructors(String shortName) {
-  String firstDir = shortName.split("/")[0];
-  return firstDir == "declaring_constructors";
+  return scanRawBytes(
+    rawBytes,
+    experimentalFeatures.scannerConfiguration,
+    lineStarts,
+    languageVersionChanged: languageVersionChanged,
+  );
 }
 
 Token scanRawBytes(
   Uint8List rawBytes,
   ScannerConfiguration config,
-  List<int>? lineStarts,
-) {
+  List<int>? lineStarts, {
+  LanguageVersionChanged? languageVersionChanged,
+}) {
   ScannerResult scanResult = scan(
     rawBytes,
     configuration: config,
     includeComments: true,
+    languageVersionChanged: languageVersionChanged,
   );
   Token firstToken = scanResult.tokens;
   if (lineStarts != null) {
@@ -715,3 +715,17 @@
     super.indent = prevIndent;
   }
 }
+
+extension on TestDescription {
+  FolderOptions computeFolderOptions(Context context) {
+    return context.folderOptions.computeFolderOptions(this);
+  }
+
+  Map<ExperimentalFlag, bool> computeExplicitExperimentalFlags(
+    Context context,
+  ) {
+    return computeFolderOptions(
+      context,
+    ).computeExplicitExperimentalFlags(context.forcedExperimentalFlags);
+  }
+}
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 3833454..611c856 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -373,6 +373,24 @@
   }
 
   @override
+  void handleNoClassBody(Token semicolonToken) {
+    seen(semicolonToken);
+    doPrint(
+      'handleNoClassBody('
+      '$semicolonToken)',
+    );
+  }
+
+  @override
+  void handleNoExtensionTypeBody(Token semicolonToken) {
+    seen(semicolonToken);
+    doPrint(
+      'handleNoExtensionTypeBody('
+      '$semicolonToken)',
+    );
+  }
+
+  @override
   void beginMixinDeclaration(
     Token beginToken,
     Token? augmentToken,
@@ -579,6 +597,34 @@
   }
 
   @override
+  void beginPrimaryConstructorBody(Token token) {
+    seen(token);
+    doPrint(
+      'beginPrimaryConstructorBody('
+      '$token)',
+    );
+    indent++;
+  }
+
+  @override
+  void endPrimaryConstructorBody(
+    Token beginToken,
+    Token? beginInitializers,
+    Token endToken,
+  ) {
+    indent--;
+    seen(beginToken);
+    seen(beginInitializers);
+    seen(endToken);
+    doPrint(
+      'endPrimaryConstructorBody('
+      '$beginToken, '
+      '$beginInitializers, '
+      '$endToken)',
+    );
+  }
+
+  @override
   void beginCombinators(Token token) {
     seen(token);
     doPrint(
@@ -796,30 +842,6 @@
   }
 
   @override
-  void endEnumConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endEnumConstructor('
-      '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
   void handleEnumElements(Token elementsEndToken, int elementsCount) {
     seen(elementsEndToken);
     doPrint(
@@ -880,24 +902,6 @@
   }
 
   @override
-  void endEnumFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    indent--;
-    seen(beginToken);
-    seen(factoryKeyword);
-    seen(endToken);
-    doPrint(
-      'endEnumFactoryMethod('
-      '$beginToken, '
-      '$factoryKeyword, '
-      '$endToken)',
-    );
-  }
-
-  @override
   void beginExport(Token token) {
     seen(token);
     doPrint(
@@ -941,7 +945,7 @@
   }
 
   @override
-  void beginFactoryMethod(
+  void beginFactory(
     DeclarationKind declarationKind,
     Token lastConsumed,
     Token? externalToken,
@@ -951,7 +955,7 @@
     seen(externalToken);
     seen(constToken);
     doPrint(
-      'beginFactoryMethod('
+      'beginFactory('
       '$declarationKind, '
       '$lastConsumed, '
       '$externalToken, '
@@ -961,7 +965,8 @@
   }
 
   @override
-  void endClassFactoryMethod(
+  void endFactory(
+    DeclarationKind kind,
     Token beginToken,
     Token factoryKeyword,
     Token endToken,
@@ -971,61 +976,8 @@
     seen(factoryKeyword);
     seen(endToken);
     doPrint(
-      'endClassFactoryMethod('
-      '$beginToken, '
-      '$factoryKeyword, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endMixinFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    indent--;
-    seen(beginToken);
-    seen(factoryKeyword);
-    seen(endToken);
-    doPrint(
-      'endMixinFactoryMethod('
-      '$beginToken, '
-      '$factoryKeyword, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    indent--;
-    seen(beginToken);
-    seen(factoryKeyword);
-    seen(endToken);
-    doPrint(
-      'endExtensionFactoryMethod('
-      '$beginToken, '
-      '$factoryKeyword, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionTypeFactoryMethod(
-    Token beginToken,
-    Token factoryKeyword,
-    Token endToken,
-  ) {
-    indent--;
-    seen(beginToken);
-    seen(factoryKeyword);
-    seen(endToken);
-    doPrint(
-      'endExtensionTypeFactoryMethod('
+      'endFactory('
+      '$kind, '
       '$beginToken, '
       '$factoryKeyword, '
       '$endToken)',
@@ -1130,7 +1082,8 @@
   }
 
   @override
-  void endClassFields(
+  void endFields(
+    DeclarationKind kind,
     Token? abstractToken,
     Token? augmentToken,
     Token? externalToken,
@@ -1153,7 +1106,8 @@
     seen(beginToken);
     seen(endToken);
     doPrint(
-      'endClassFields('
+      'endFields('
+      '$kind, '
       '$abstractToken, '
       '$augmentToken, '
       '$externalToken, '
@@ -1168,182 +1122,6 @@
   }
 
   @override
-  void endMixinFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    indent--;
-    seen(abstractToken);
-    seen(augmentToken);
-    seen(externalToken);
-    seen(staticToken);
-    seen(covariantToken);
-    seen(lateToken);
-    seen(varFinalOrConst);
-    seen(beginToken);
-    seen(endToken);
-    doPrint(
-      'endMixinFields('
-      '$abstractToken, '
-      '$augmentToken, '
-      '$externalToken, '
-      '$staticToken, '
-      '$covariantToken, '
-      '$lateToken, '
-      '$varFinalOrConst, '
-      '$count, '
-      '$beginToken, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    indent--;
-    seen(abstractToken);
-    seen(augmentToken);
-    seen(externalToken);
-    seen(staticToken);
-    seen(covariantToken);
-    seen(lateToken);
-    seen(varFinalOrConst);
-    seen(beginToken);
-    seen(endToken);
-    doPrint(
-      'endExtensionFields('
-      '$abstractToken, '
-      '$augmentToken, '
-      '$externalToken, '
-      '$staticToken, '
-      '$covariantToken, '
-      '$lateToken, '
-      '$varFinalOrConst, '
-      '$count, '
-      '$beginToken, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionTypeFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    indent--;
-    seen(abstractToken);
-    seen(augmentToken);
-    seen(externalToken);
-    seen(staticToken);
-    seen(covariantToken);
-    seen(lateToken);
-    seen(varFinalOrConst);
-    seen(beginToken);
-    seen(endToken);
-    doPrint(
-      'endExtensionTypeFields('
-      '$abstractToken, '
-      '$augmentToken, '
-      '$externalToken, '
-      '$staticToken, '
-      '$covariantToken, '
-      '$lateToken, '
-      '$varFinalOrConst, '
-      '$count, '
-      '$beginToken, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endEnumFields(
-    Token? abstractToken,
-    Token? augmentToken,
-    Token? externalToken,
-    Token? staticToken,
-    Token? covariantToken,
-    Token? lateToken,
-    Token? varFinalOrConst,
-    int count,
-    Token beginToken,
-    Token endToken,
-  ) {
-    indent--;
-    seen(abstractToken);
-    seen(augmentToken);
-    seen(externalToken);
-    seen(staticToken);
-    seen(covariantToken);
-    seen(lateToken);
-    seen(varFinalOrConst);
-    seen(beginToken);
-    seen(endToken);
-    doPrint(
-      'endEnumFields('
-      '$abstractToken, '
-      '$augmentToken, '
-      '$externalToken, '
-      '$staticToken, '
-      '$covariantToken, '
-      '$lateToken, '
-      '$varFinalOrConst, '
-      '$count, '
-      '$beginToken, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endEnumMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endEnumMethod('
-      '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
   void handleForInitializerEmptyStatement(Token token) {
     seen(token);
     doPrint(
@@ -2370,7 +2148,8 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
@@ -2384,7 +2163,8 @@
     seen(beginInitializers);
     seen(endToken);
     doPrint(
-      'endClassMethod('
+      'endMethod('
+      '$kind, '
       '$getOrSet, '
       '$beginToken, '
       '$beginParam, '
@@ -2394,167 +2174,62 @@
   }
 
   @override
-  void endMixinMethod(
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
     Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
   ) {
-    indent--;
+    seen(augmentToken);
+    seen(externalToken);
+    seen(staticToken);
+    seen(covariantToken);
+    seen(varFinalOrConst);
     seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
+    seen(newToken);
+    seen(name);
     doPrint(
-      'endMixinMethod('
+      'beginConstructor('
+      '$declarationKind, '
+      '$augmentToken, '
+      '$externalToken, '
+      '$staticToken, '
+      '$covariantToken, '
+      '$varFinalOrConst, '
       '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
+      '$newToken, '
+      '$name, '
+      '$enclosingDeclarationName)',
     );
+    indent++;
   }
 
   @override
-  void endExtensionMethod(
-    Token? getOrSet,
+  void endConstructor(
+    DeclarationKind kind,
     Token beginToken,
+    Token? newToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
   ) {
     indent--;
-    seen(getOrSet);
     seen(beginToken);
+    seen(newToken);
     seen(beginParam);
     seen(beginInitializers);
     seen(endToken);
     doPrint(
-      'endExtensionMethod('
-      '$getOrSet, '
+      'endConstructor('
+      '$kind, '
       '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionTypeMethod(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endExtensionTypeMethod('
-      '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endClassConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endClassConstructor('
-      '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endMixinConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endMixinConstructor('
-      '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endExtensionConstructor('
-      '$getOrSet, '
-      '$beginToken, '
-      '$beginParam, '
-      '$beginInitializers, '
-      '$endToken)',
-    );
-  }
-
-  @override
-  void endExtensionTypeConstructor(
-    Token? getOrSet,
-    Token beginToken,
-    Token beginParam,
-    Token? beginInitializers,
-    Token endToken,
-  ) {
-    indent--;
-    seen(getOrSet);
-    seen(beginToken);
-    seen(beginParam);
-    seen(beginInitializers);
-    seen(endToken);
-    doPrint(
-      'endExtensionTypeConstructor('
-      '$getOrSet, '
-      '$beginToken, '
+      '$newToken, '
       '$beginParam, '
       '$beginInitializers, '
       '$endToken)',
@@ -4151,6 +3826,16 @@
   }
 
   @override
+  void handleNoIdentifier(Token token, IdentifierContext identifierContext) {
+    seen(token);
+    doPrint(
+      'handleNoIdentifier('
+      '$token, '
+      '$identifierContext)',
+    );
+  }
+
+  @override
   void handleNoTypeNameInConstructorReference(Token token) {
     seen(token);
     doPrint(
diff --git a/pkg/front_end/test/parser_test_listener_creator.dart b/pkg/front_end/test/parser_test_listener_creator.dart
index ba42ddc..0c6ad49 100644
--- a/pkg/front_end/test/parser_test_listener_creator.dart
+++ b/pkg/front_end/test/parser_test_listener_creator.dart
@@ -157,6 +157,22 @@
   }
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    currentMethodName = name.lexeme;
+  }
+
+  @override
   void beginMethod(
     DeclarationKind declarationKind,
     Token? augmentToken,
@@ -182,7 +198,8 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
diff --git a/pkg/front_end/test/parser_test_parser.dart b/pkg/front_end/test/parser_test_parser.dart
index 361b010..6e0deaf 100644
--- a/pkg/front_end/test/parser_test_parser.dart
+++ b/pkg/front_end/test/parser_test_parser.dart
@@ -1236,6 +1236,18 @@
   }
 
   @override
+  Token parsePrimaryConstructorBody(Token token) {
+    doPrint(
+      'parsePrimaryConstructorBody('
+      '$token)',
+    );
+    indent++;
+    var result = super.parsePrimaryConstructorBody(token);
+    indent--;
+    return result;
+  }
+
+  @override
   Token parseExtensionTypeDeclaration(
     Token beginToken,
     Token token,
@@ -1881,6 +1893,7 @@
     Token beforeType,
     TypeInfo typeInfo,
     Token? getOrSet,
+    Token? newToken,
     Token name,
     DeclarationKind kind,
     String? enclosingDeclarationName,
@@ -1899,6 +1912,7 @@
       '$beforeType, '
       '$typeInfo, '
       '$getOrSet, '
+      '$newToken, '
       '$name, '
       '$kind, '
       '$enclosingDeclarationName, '
@@ -1917,6 +1931,7 @@
       beforeType,
       typeInfo,
       getOrSet,
+      newToken,
       name,
       kind,
       enclosingDeclarationName,
@@ -1934,6 +1949,7 @@
     Token? externalToken,
     Token? staticOrCovariant,
     Token? varFinalOrConst,
+    bool hasName,
   ) {
     doPrint(
       'parseFactoryMethod('
@@ -1942,7 +1958,8 @@
       '$beforeStart, '
       '$externalToken, '
       '$staticOrCovariant, '
-      '$varFinalOrConst)',
+      '$varFinalOrConst, '
+      '$hasName)',
     );
     indent++;
     var result = super.parseFactoryMethod(
@@ -1952,6 +1969,7 @@
       externalToken,
       staticOrCovariant,
       varFinalOrConst,
+      hasName,
     );
     indent--;
     return result;
@@ -3519,6 +3537,7 @@
     Token beforeType,
     TypeInfo typeInfo,
     Token? getOrSet,
+    Token? newToken,
     DeclarationKind kind,
     String? enclosingDeclarationName,
   ) {
@@ -3536,6 +3555,7 @@
       '$beforeType, '
       '$typeInfo, '
       '$getOrSet, '
+      '$newToken, '
       '$kind, '
       '$enclosingDeclarationName)',
     );
@@ -3553,6 +3573,7 @@
       beforeType,
       typeInfo,
       getOrSet,
+      newToken,
       kind,
       enclosingDeclarationName,
     );
diff --git a/pkg/front_end/test/parser_test_parser_creator.dart b/pkg/front_end/test/parser_test_parser_creator.dart
index ddf9484..710b1dc 100644
--- a/pkg/front_end/test/parser_test_parser_creator.dart
+++ b/pkg/front_end/test/parser_test_parser_creator.dart
@@ -159,6 +159,22 @@
   }
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    currentMethodName = name.lexeme;
+  }
+
+  @override
   void beginMethod(
     DeclarationKind declarationKind,
     Token? augmentToken,
@@ -174,9 +190,10 @@
   }
 
   @override
-  void endClassConstructor(
-    Token? getOrSet,
+  void endConstructor(
+    DeclarationKind kind,
     Token beginToken,
+    Token? newToken,
     Token beginParam,
     Token? beginInitializers,
     Token endToken,
@@ -187,7 +204,8 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
diff --git a/pkg/front_end/test/scanner_cfe_test.dart b/pkg/front_end/test/scanner_cfe_test.dart
index ed88b95..067fc86 100644
--- a/pkg/front_end/test/scanner_cfe_test.dart
+++ b/pkg/front_end/test/scanner_cfe_test.dart
@@ -12,8 +12,8 @@
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token_constants.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/dart/scanner/translate_error_token.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:front_end/src/codes/cfe_codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -255,7 +255,7 @@
     expect(token.next!.isEof, isTrue);
     expect(listener.errors, hasLength(1));
     TestError error = listener.errors[0];
-    expect(error.diagnosticCode, ScannerErrorCode.missingDigit);
+    expect(error.diagnosticCode, diag.missingDigit);
     expect(error.offset, source.length - 1);
   }
 
@@ -283,8 +283,8 @@
     expect(openBrace.endToken, same(closeBrace));
     expect(openParen2.endToken, same(closeParen2));
     listener.assertErrors([
-      new TestError(6, ParserErrorCode.expectedToken, [')']),
-      new TestError(7, ParserErrorCode.expectedToken, [')']),
+      new TestError(6, diag.expectedToken, [')']),
+      new TestError(7, diag.expectedToken, [')']),
     ]);
   }
 
@@ -327,9 +327,9 @@
     expect(openBracket.endToken, same(closeBracket));
     expect(openParen.endToken, same(closeParen));
     listener.assertErrors([
-      new TestError(3, ParserErrorCode.expectedToken, ['}']),
-      new TestError(3, ParserErrorCode.expectedToken, [']']),
-      new TestError(3, ParserErrorCode.expectedToken, [')']),
+      new TestError(3, diag.expectedToken, ['}']),
+      new TestError(3, diag.expectedToken, [']']),
+      new TestError(3, diag.expectedToken, [')']),
     ]);
   }
 }
diff --git a/pkg/front_end/test/scanner_replacement_test.dart b/pkg/front_end/test/scanner_replacement_test.dart
index bd785e0..25aca09 100644
--- a/pkg/front_end/test/scanner_replacement_test.dart
+++ b/pkg/front_end/test/scanner_replacement_test.dart
@@ -6,10 +6,9 @@
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart'
-    show ScannerErrorCode, ParserErrorCode;
 import 'package:analyzer/src/dart/scanner/translate_error_token.dart'
     show translateErrorToken;
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -73,7 +72,7 @@
     expect(open.isSynthetic, isFalse);
     expect(close.isSynthetic, isTrue);
     listener.assertErrors([
-      new TestError(1, ParserErrorCode.expectedToken, [expectedCloser]),
+      new TestError(1, diag.expectedToken, [expectedCloser]),
     ]);
   }
 
@@ -92,7 +91,7 @@
     expect(token.next!.isEof, isTrue);
     expect(listener.errors, hasLength(1));
     TestError error = listener.errors[0];
-    expect(error.diagnosticCode, ScannerErrorCode.missingDigit);
+    expect(error.diagnosticCode, diag.missingDigit);
     expect(error.offset, source.length - 1);
   }
 
@@ -166,8 +165,8 @@
     expect(closeParen2.isSynthetic, isTrue);
     expect(eof.isEof, isTrue);
     listener.assertErrors([
-      new TestError(6, ParserErrorCode.expectedToken, [')']),
-      new TestError(7, ParserErrorCode.expectedToken, [')']),
+      new TestError(6, diag.expectedToken, [')']),
+      new TestError(7, diag.expectedToken, [')']),
     ]);
   }
 
@@ -190,9 +189,9 @@
     expect(eof.isEof, true);
 
     listener.assertErrors([
-      new TestError(4, ParserErrorCode.expectedToken, [')']),
-      new TestError(4, ParserErrorCode.expectedToken, [']']),
-      new TestError(4, ParserErrorCode.expectedToken, ['}']),
+      new TestError(4, diag.expectedToken, [')']),
+      new TestError(4, diag.expectedToken, [']']),
+      new TestError(4, diag.expectedToken, ['}']),
     ]);
   }
 
diff --git a/pkg/front_end/test/scanner_test.dart b/pkg/front_end/test/scanner_test.dart
index 9c1ad68..45b9a06 100644
--- a/pkg/front_end/test/scanner_test.dart
+++ b/pkg/front_end/test/scanner_test.dart
@@ -7,7 +7,7 @@
     show AbstractScanner, ScannerConfiguration;
 import 'package:_fe_analyzer_shared/src/scanner/reader.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -231,7 +231,7 @@
   }
 
   void test_comment_multi_unterminated() {
-    _assertError(ScannerErrorCode.unterminatedMultiLineComment, 3, "/* x");
+    _assertError(diag.unterminatedMultiLineComment, 3, "/* x");
   }
 
   void test_comment_nested() {
@@ -274,7 +274,7 @@
   }
 
   void test_double_missingDigitInExponent() {
-    _assertError(ScannerErrorCode.missingDigit, 1, "1e");
+    _assertError(diag.missingDigit, 1, "1e");
   }
 
   void test_double_whole_E() {
@@ -334,7 +334,7 @@
   }
 
   void test_hexadecimal_missingDigit() {
-    var token = _assertError(ScannerErrorCode.missingHexDigit, 5, "a = 0x");
+    var token = _assertError(diag.missingHexDigit, 5, "a = 0x");
     expect(token.lexeme, 'a');
     token = token.next!;
     expect(token.lexeme, '=');
@@ -344,7 +344,7 @@
 
   void test_hexadecimal_unexpectedSeparator() {
     var token = _assertError(
-      ScannerErrorCode.unexpectedSeparatorInNumber,
+      diag.unexpectedSeparatorInNumber,
       // TODO(srawlins): Should be 5?
       4,
       "a = 0x5_",
@@ -362,12 +362,7 @@
 
   void test_illegalChar_cyrillicLetter_middle() {
     final identifier = "Shche\u0433lov";
-    final token = _assertError(
-      ScannerErrorCode.illegalCharacter,
-      5,
-      identifier,
-      [0x433],
-    );
+    final token = _assertError(diag.illegalCharacter, 5, identifier, [0x433]);
     expect(token.type, TokenType.IDENTIFIER);
     expect(token.lexeme, identifier);
   }
@@ -376,8 +371,8 @@
     ErrorListener listener = new ErrorListener();
     var tokens = scanWithListener("a = Shche\u0433lov\u0429x;", listener);
     listener.assertErrors([
-      new TestError(9, ScannerErrorCode.illegalCharacter, [0x433]),
-      new TestError(13, ScannerErrorCode.illegalCharacter, [0x429]),
+      new TestError(9, diag.illegalCharacter, [0x433]),
+      new TestError(13, diag.illegalCharacter, [0x429]),
     ]);
     var token = tokens;
     expect(token.lexeme, 'a');
@@ -392,23 +387,13 @@
 
   void test_illegalChar_cyrillicLetter_start() {
     final identifier = "\u0429";
-    final token = _assertError(
-      ScannerErrorCode.illegalCharacter,
-      0,
-      identifier,
-      [0x429],
-    );
+    final token = _assertError(diag.illegalCharacter, 0, identifier, [0x429]);
     expect(token.type, TokenType.IDENTIFIER);
     expect(token.lexeme, identifier);
   }
 
   void test_illegalChar_cyrillicLetter_start_expression() {
-    var token = _assertError(
-      ScannerErrorCode.illegalCharacter,
-      4,
-      'a = \u0429;',
-      [0x429],
-    );
+    var token = _assertError(diag.illegalCharacter, 4, 'a = \u0429;', [0x429]);
     expect(token.lexeme, 'a');
     token = token.next!;
     expect(token.lexeme, '=');
@@ -420,11 +405,11 @@
   }
 
   void test_illegalChar_nbsp() {
-    _assertError(ScannerErrorCode.illegalCharacter, 0, "\u00A0", [0xa0]);
+    _assertError(diag.illegalCharacter, 0, "\u00A0", [0xa0]);
   }
 
   void test_illegalChar_notLetter() {
-    _assertError(ScannerErrorCode.illegalCharacter, 0, "\u0312", [0x312]);
+    _assertError(diag.illegalCharacter, 0, "\u0312", [0x312]);
   }
 
   void test_incomplete_string_interpolation() {
@@ -435,7 +420,7 @@
       new StringToken(TokenType.IDENTIFIER, "bar", 7),
     ];
     var expectedErrors = [
-      new TestError(9, ScannerErrorCode.unterminatedStringLiteral, null),
+      new TestError(9, diag.unterminatedStringLiteral, null),
     ];
     // The scanner inserts synthetic closers
     expectedTokens.addAll([
@@ -443,7 +428,7 @@
       new SyntheticStringToken(TokenType.STRING, "\"", 10, 0),
     ]);
     expectedErrors.addAll([
-      new TestError(10, ParserErrorCode.expectedToken, ['}']),
+      new TestError(10, diag.expectedToken, ['}']),
     ]);
     ErrorListener listener = new ErrorListener();
     Token token = scanWithListener("\"foo \${bar", listener);
@@ -849,7 +834,7 @@
     expect(openBracket.endToken, same(closeBracket));
     expect(openParen.endToken, same(closeParen));
     listener.assertErrors([
-      new TestError(2, ParserErrorCode.expectedToken, [')']),
+      new TestError(2, diag.expectedToken, [')']),
     ]);
   }
 
@@ -872,7 +857,7 @@
     expect(openBracket.endToken, closeBracket);
     expect(openParen.endToken, closeParen);
     listener.assertErrors([
-      new TestError(2, ParserErrorCode.expectedToken, [']']),
+      new TestError(2, diag.expectedToken, [']']),
     ]);
   }
 
@@ -1077,7 +1062,7 @@
       new StringToken(TokenType.IDENTIFIER, "name", 5),
     ];
     var expectedErrors = [
-      new TestError(8, ScannerErrorCode.unterminatedStringLiteral, null),
+      new TestError(8, diag.unterminatedStringLiteral, null),
     ];
     // Fasta inserts synthetic closers.
     expectedTokens.addAll([
@@ -1085,7 +1070,7 @@
       new SyntheticStringToken(TokenType.STRING, "'''", 9, 0),
     ]);
     expectedErrors.addAll([
-      new TestError(9, ParserErrorCode.expectedToken, ['}']),
+      new TestError(9, diag.expectedToken, ['}']),
     ]);
     ErrorListener listener = new ErrorListener();
     Token token = scanWithListener("'''\${name", listener);
@@ -1104,7 +1089,7 @@
       new SyntheticStringToken(TokenType.STRING, "'''", 8, 0),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       7,
       "'''\$name",
       expectedTokens,
@@ -1127,7 +1112,7 @@
       new SyntheticStringToken(TokenType.STRING, "r'''string'''", 0, 10),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       9,
       source,
       expectedTokens,
@@ -1150,7 +1135,7 @@
       new SyntheticStringToken(TokenType.STRING, "r'string'", 0, 8),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       7,
       source,
       expectedTokens,
@@ -1165,7 +1150,7 @@
       new SyntheticStringToken(TokenType.STRING, "r'string'", 0, 8),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       7,
       source,
       expectedTokens,
@@ -1254,9 +1239,7 @@
       new SyntheticStringToken(TokenType.IDENTIFIER, "", 4, 0),
       new StringToken(TokenType.STRING, "'", 4),
     ]);
-    expectedErrors.addAll([
-      new TestError(4, ParserErrorCode.missingIdentifier, null),
-    ]);
+    expectedErrors.addAll([new TestError(4, diag.missingIdentifier, null)]);
     ErrorListener listener = new ErrorListener();
     Token token = scanWithListener("'\$x\$'", listener);
     listener.assertErrors(expectedErrors);
@@ -1272,9 +1255,7 @@
     expectedTokens.addAll([
       new SyntheticStringToken(TokenType.IDENTIFIER, "", 2),
     ]);
-    expectedErrors.addAll([
-      new TestError(2, ParserErrorCode.missingIdentifier, null),
-    ]);
+    expectedErrors.addAll([new TestError(2, diag.missingIdentifier, null)]);
     expectedTokens.addAll([new StringToken(TokenType.STRING, "1'", 2)]);
     ErrorListener listener = new ErrorListener();
     Token token = scanWithListener("'\$1'", listener);
@@ -1294,7 +1275,7 @@
       new SyntheticStringToken(TokenType.STRING, "'string'", 0, 7),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       6,
       source,
       expectedTokens,
@@ -1309,7 +1290,7 @@
       new SyntheticStringToken(TokenType.STRING, "'string'", 0, 7),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       6,
       source,
       expectedTokens,
@@ -1323,7 +1304,7 @@
       new StringToken(TokenType.IDENTIFIER, "name", 3),
     ];
     List<TestError> expectedErrors = [
-      new TestError(6, ScannerErrorCode.unterminatedStringLiteral, null),
+      new TestError(6, diag.unterminatedStringLiteral, null),
     ];
     // Fasta inserts synthetic closers.
     expectedTokens.addAll([
@@ -1331,7 +1312,7 @@
       new SyntheticStringToken(TokenType.STRING, "'", 7, 0),
     ]);
     expectedErrors.addAll([
-      new TestError(7, ParserErrorCode.expectedToken, ['}']),
+      new TestError(7, diag.expectedToken, ['}']),
     ]);
     ErrorListener listener = new ErrorListener();
     Token token = scanWithListener("'\${name", listener);
@@ -1350,7 +1331,7 @@
       new SyntheticStringToken(TokenType.STRING, "'", 6, 0),
     ]);
     _assertErrorAndTokens(
-      ScannerErrorCode.unterminatedStringLiteral,
+      diag.unterminatedStringLiteral,
       5,
       "'\$name",
       expectedTokens,
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index d0fddcf..7feef6c 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -524,6 +524,8 @@
 collections
 collector
 collects
+collide
+colliding
 colon
 colons
 color
@@ -2766,6 +2768,7 @@
 save
 saved
 says
+scaffolding
 scalar
 scan
 scanned
@@ -2827,6 +2830,7 @@
 serializes
 serializing
 serious
+served
 set
 sets
 setter
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 8996518..b0e0812 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -253,6 +253,7 @@
 dfast
 dfuzz
 di
+diag
 diagnosticable
 dictionaries
 dictionary
@@ -489,6 +490,7 @@
 joo
 jsonrpc
 jumped
+kbytes
 kernels
 kitty
 ko
@@ -560,6 +562,7 @@
 moo
 mouse
 mrelease
+msec
 mstat
 mul
 mv
@@ -738,6 +741,7 @@
 row
 rows
 rr
+rss
 rt
 ruin
 runtimes
@@ -932,6 +936,7 @@
 vte
 waited
 waits
+wall
 walt
 warmup
 warmups
diff --git a/pkg/front_end/test/testing/experimental_features.dart b/pkg/front_end/test/testing/experimental_features.dart
index f609335..e9bc882 100644
--- a/pkg/front_end/test/testing/experimental_features.dart
+++ b/pkg/front_end/test/testing/experimental_features.dart
@@ -5,18 +5,55 @@
 import 'package:_fe_analyzer_shared/src/experiments/flags.dart' as shared;
 import 'package:_fe_analyzer_shared/src/parser/experimental_features.dart'
     as parser;
+import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
+    show LanguageVersionToken, Scanner, ScannerConfiguration;
 import 'package:front_end/src/api_prototype/experimental_flags.dart' as cfe;
+import 'package:kernel/ast.dart';
 
 class ExperimentalFeaturesFromFlags implements parser.ExperimentalFeatures {
-  Map<cfe.ExperimentalFlag, bool> _experimentalFlags;
+  Version? _version;
+  Map<cfe.ExperimentalFlag, bool> _explicitExperimentalFlags;
 
-  ExperimentalFeaturesFromFlags(this._experimentalFlags);
+  ExperimentalFeaturesFromFlags(this._explicitExperimentalFlags);
 
   @override
   bool isExperimentEnabled(shared.ExperimentalFlag flag) {
-    return cfe.isExperimentEnabled(
-      cfe.fromSharedExperimentalFlag(flag),
-      explicitExperimentalFlags: _experimentalFlags,
+    cfe.ExperimentalFlag experimentalFlag = cfe.fromSharedExperimentalFlag(
+      flag,
     );
+
+    if (_version != null) {
+      return cfe.isExperimentEnabledInLibraryByVersion(
+        experimentalFlag,
+        dummyUri,
+        _version!,
+        explicitExperimentalFlags: _explicitExperimentalFlags,
+      );
+    } else {
+      return cfe.isExperimentEnabled(
+        experimentalFlag,
+        explicitExperimentalFlags: _explicitExperimentalFlags,
+      );
+    }
   }
+
+  /// Updates the experimental flags and scanner configuration according to the
+  /// [languageVersion].
+  void onLanguageVersionChanged(
+    Scanner scanner,
+    LanguageVersionToken languageVersion,
+  ) {
+    _version = new Version(languageVersion.major, languageVersion.minor);
+
+    scanner.configuration = scannerConfiguration;
+  }
+
+  /// Returns the current [ScannerConfiguration] given the explicit experimental
+  /// flags and current language version.
+  ScannerConfiguration get scannerConfiguration => new ScannerConfiguration(
+    enableTripleShift: isExperimentEnabled(shared.ExperimentalFlag.tripleShift),
+    forAugmentationLibrary: isExperimentEnabled(
+      shared.ExperimentalFlag.augmentations,
+    ),
+  );
 }
diff --git a/pkg/front_end/test/testing/folder_options.dart b/pkg/front_end/test/testing/folder_options.dart
index dc0f77c..f1c4d5d 100644
--- a/pkg/front_end/test/testing/folder_options.dart
+++ b/pkg/front_end/test/testing/folder_options.dart
@@ -21,6 +21,12 @@
   const BoolValue(false),
 );
 
+/// Options used by the parser suite to include outline expectations.
+const Option<bool> withOutlineOption = const Option(
+  '--with-outline',
+  const BoolValue(false),
+);
+
 const List<Option> folderOptionsSpecification = [
   Options.enableExperiment,
   Options.enableUnscheduledExperiments,
@@ -36,6 +42,7 @@
   Options.target,
   Options.defines,
   Options.showOffsets,
+  withOutlineOption,
 ];
 
 class SuiteFolderOptions {
@@ -58,6 +65,7 @@
       String target = "vm";
       bool showOffsets = false;
       bool forceClosureContextLowering = false;
+      bool withOutline = withOutlineOption.spec.defaultValue!;
       if (directory.uri == baseUri) {
         folderOptions = new FolderOptions(
           {},
@@ -117,6 +125,7 @@
           }
           noVerify = noVerifyCmd.read(parsedOptions);
           target = Options.target.read(parsedOptions);
+          withOutline = withOutlineOption.read(parsedOptions);
           folderOptions = new FolderOptions(
             parseExperimentalFlags(
               parseExperimentalArguments(experimentalFlagsArguments),
@@ -131,6 +140,7 @@
             forceConstructorTearOffLowering: forceConstructorTearOffLowering,
             defines: defines,
             noVerify: noVerify,
+            withOutline: withOutline,
             target: target,
             overwriteCurrentSdkVersion: overwriteCurrentSdkVersionArgument,
             showOffsets: showOffsets,
@@ -188,6 +198,7 @@
   final int? forceConstructorTearOffLowering;
   final Map<String, String>? defines;
   final bool noVerify;
+  final bool withOutline;
   final String target;
   final String? overwriteCurrentSdkVersion;
   final bool showOffsets;
@@ -203,6 +214,7 @@
     this.forceConstructorTearOffLowering,
     this.defines = const {},
     this.noVerify = false,
+    this.withOutline = false,
     this.target = "vm",
     // can be null
     this.overwriteCurrentSdkVersion,
diff --git a/pkg/front_end/test/textual_outline_suite.dart b/pkg/front_end/test/textual_outline_suite.dart
index eef541d..26d6577 100644
--- a/pkg/front_end/test/textual_outline_suite.dart
+++ b/pkg/front_end/test/textual_outline_suite.dart
@@ -112,6 +112,8 @@
     Uint8List bytes = new File.fromUri(description.uri).readAsBytesSync();
     for (bool modelled in [false, true]) {
       TextualOutlineInfoForTesting info = new TextualOutlineInfoForTesting();
+      ExperimentalFeaturesFromFlags experimentalFeatures =
+          new ExperimentalFeaturesFromFlags(experimentalFlags);
       String? result = textualOutline(
         bytes,
         new ScannerConfiguration(
@@ -123,9 +125,7 @@
         throwOnUnexpected: true,
         performModelling: modelled,
         returnNullOnError: false,
-        experimentalFeatures: new ExperimentalFeaturesFromFlags(
-          experimentalFlags,
-        ),
+        experimentalFeatures: experimentalFeatures,
         infoForTesting: info,
       );
       if (result == null) {
diff --git a/pkg/front_end/test/weekly_tester.dart b/pkg/front_end/test/weekly_tester.dart
index 5807b70..a5385d4 100644
--- a/pkg/front_end/test/weekly_tester.dart
+++ b/pkg/front_end/test/weekly_tester.dart
@@ -6,6 +6,9 @@
 import 'dart:convert' show LineSplitter, utf8;
 import 'dart:io' show File, Platform, Process, ProcessResult;
 
+// Temporarily disable because the weekly bot fails - maybe because of this?
+const bool doCoverage = false;
+
 Future<void> main(List<String> args) async {
   // General idea: Launch - in separate processes - whatever we want to run
   // concurrently, capturing the stdout and stderr, printing it with some
@@ -111,12 +114,14 @@
   }
 
   // Now run all coverage and print a diff.
-  WrappedProcess coverageProcess = await run([
-    Platform.script.resolve("run_all_coverage_update.dart").toString(),
-  ], "coverage update");
-  await coverageProcess.process.exitCode;
-  ProcessResult coverageDiffResult = Process.runSync("git", ["diff"]);
-  print(coverageDiffResult.stdout);
+  if (doCoverage) {
+    WrappedProcess coverageProcess = await run([
+      Platform.script.resolve("run_all_coverage_update.dart").toString(),
+    ], "coverage update");
+    await coverageProcess.process.exitCode;
+    ProcessResult coverageDiffResult = Process.runSync("git", ["diff"]);
+    print(coverageDiffResult.stdout);
+  }
 
   if (shouldThrow) throw "There were failures!";
 }
diff --git a/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.expect b/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.expect
index 818021c..5cf1d0a 100644
--- a/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.expect
+++ b/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.expect
@@ -66,7 +66,9 @@
 }
 class ExtendsInterface extends ffi::Finalizable {
   synthetic constructor •() → self::ExtendsInterface
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/class_modifiers/ffi_exception.dart:26:7: Error: The superclass, 'Finalizable', has no unnamed constructor that takes no arguments.
+class ExtendsInterface extends Finalizable {} /* Error */
+      ^"
     ;
 }
 abstract final class _WithFinal&Object&Double = core::Object with ffi::Double /*isAnonymousMixin,hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.modular.expect b/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.modular.expect
index 818021c..5cf1d0a 100644
--- a/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.modular.expect
@@ -66,7 +66,9 @@
 }
 class ExtendsInterface extends ffi::Finalizable {
   synthetic constructor •() → self::ExtendsInterface
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/class_modifiers/ffi_exception.dart:26:7: Error: The superclass, 'Finalizable', has no unnamed constructor that takes no arguments.
+class ExtendsInterface extends Finalizable {} /* Error */
+      ^"
     ;
 }
 abstract final class _WithFinal&Object&Double = core::Object with ffi::Double /*isAnonymousMixin,hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.transformed.expect b/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.transformed.expect
index b1bee68..ad4a81b 100644
--- a/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/class_modifiers/ffi_exception.dart.strong.transformed.expect
@@ -73,7 +73,9 @@
 }
 class ExtendsInterface extends ffi::Finalizable {
   synthetic constructor •() → self::ExtendsInterface
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/class_modifiers/ffi_exception.dart:26:7: Error: The superclass, 'Finalizable', has no unnamed constructor that takes no arguments.
+class ExtendsInterface extends Finalizable {} /* Error */
+      ^"
     ;
 }
 abstract final class _WithFinal&Object&Double extends core::Object implements ffi::Double /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/closure_context_lowering/local_variables.dart b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart
new file mode 100644
index 0000000..29c8094
--- /dev/null
+++ b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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() {
+  int a = 0;
+  return a;
+}
diff --git a/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.expect b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.expect
new file mode 100644
index 0000000..520539b
--- /dev/null
+++ b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+
+static method test() → dynamic {
+  a := 0;
+  return a;
+}
diff --git a/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.modular.expect b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.modular.expect
new file mode 100644
index 0000000..520539b
--- /dev/null
+++ b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.modular.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+
+static method test() → dynamic {
+  a := 0;
+  return a;
+}
diff --git a/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.outline.expect b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.outline.expect
new file mode 100644
index 0000000..531df3f
--- /dev/null
+++ b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.strong.outline.expect
@@ -0,0 +1,5 @@
+library;
+import self as self;
+
+static method test() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.textual_outline.expect b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.textual_outline.expect
new file mode 100644
index 0000000..a9f9e5f
--- /dev/null
+++ b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.textual_outline.expect
@@ -0,0 +1 @@
+test() {}
diff --git a/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..a9f9e5f
--- /dev/null
+++ b/pkg/front_end/testcases/closure_context_lowering/local_variables.dart.textual_outline_modelled.expect
@@ -0,0 +1 @@
+test() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect
index 196d716..0b4c034 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.expect
@@ -12,7 +12,7 @@
   const constructor _(core::String name) → self::MessageType
     : self::MessageType::name = name, super core::Object::•()
     ;
-  static factory parse(core::String name) → self::MessageType {
+  static const factory parse(core::String name) → self::MessageType {
     if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.modular.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.modular.expect
index 196d716..0b4c034 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.modular.expect
@@ -12,7 +12,7 @@
   const constructor _(core::String name) → self::MessageType
     : self::MessageType::name = name, super core::Object::•()
     ;
-  static factory parse(core::String name) → self::MessageType {
+  static const factory parse(core::String name) → self::MessageType {
     if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
diff --git a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect
index 196d716..0b4c034 100644
--- a/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/const_functions/const_functions_const_factory.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
   const constructor _(core::String name) → self::MessageType
     : self::MessageType::name = name, super core::Object::•()
     ;
-  static factory parse(core::String name) → self::MessageType {
+  static const factory parse(core::String name) → self::MessageType {
     if(name =={core::String::==}{(core::Object) → core::bool} "print") {
       return #C2;
     }
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
index 8d6c687..8b71f2b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.expect
@@ -37,7 +37,7 @@
     return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
-  static factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
+  static const factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
     return new self::_ConstImpl::•<dynamic>();
   static synthetic method _#impl#tearOff() → self::Const
     return new self::_ConstImpl::•<dynamic>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.modular.expect
index 8d6c687..8b71f2b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.modular.expect
@@ -37,7 +37,7 @@
     return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
-  static factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
+  static const factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
     return new self::_ConstImpl::•<dynamic>();
   static synthetic method _#impl#tearOff() → self::Const
     return new self::_ConstImpl::•<dynamic>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect
index 2b8e83e..385b7b0 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.outline.expect
@@ -36,7 +36,7 @@
     return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
-  static factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
+  static const factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
     return new self::_ConstImpl::•<dynamic>();
   static synthetic method _#impl#tearOff() → self::Const
     return new self::_ConstImpl::•<dynamic>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
index 8d6c687..8b71f2b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/const_redirect.dart.strong.transformed.expect
@@ -37,7 +37,7 @@
     return new self::Class::named(constants: constants);
 }
 abstract class Const extends core::Object {
-  static factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
+  static const factory impl() → self::Const /* redirection-target: self::_ConstImpl::•<dynamic>*/
     return new self::_ConstImpl::•<dynamic>();
   static synthetic method _#impl#tearOff() → self::Const
     return new self::_ConstImpl::•<dynamic>();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.expect
index 0a26a2f..26a8f11 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.expect
@@ -23,7 +23,9 @@
 }
 class E = pri::B with self::M {
   synthetic constructor •() → self::E
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart:11:7: Error: The superclass, 'B', has no unnamed constructor that takes no arguments.
+class E = B with M; // TODO(johnniwinther): This should not be an error.
+      ^"
     ;
   static synthetic method _#new#tearOff() → self::E
     return new self::E::•();
@@ -121,7 +123,7 @@
 }
 class G extends self::D {
   constructor _() → pri::G
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
   G._() : super._(); // Error
           ^^^^^"
     ;
@@ -130,7 +132,7 @@
 }
 class H extends self::E {
   constructor _() → pri::H
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
   H._() : super._(); // Error
           ^^^^^"
     ;
@@ -142,7 +144,7 @@
     : super self::F::named()
     ;
   constructor _() → pri::I
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
   I._() : super._(); // Error
           ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.modular.expect
index 0a26a2f..26a8f11 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.modular.expect
@@ -23,7 +23,9 @@
 }
 class E = pri::B with self::M {
   synthetic constructor •() → self::E
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart:11:7: Error: The superclass, 'B', has no unnamed constructor that takes no arguments.
+class E = B with M; // TODO(johnniwinther): This should not be an error.
+      ^"
     ;
   static synthetic method _#new#tearOff() → self::E
     return new self::E::•();
@@ -121,7 +123,7 @@
 }
 class G extends self::D {
   constructor _() → pri::G
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
   G._() : super._(); // Error
           ^^^^^"
     ;
@@ -130,7 +132,7 @@
 }
 class H extends self::E {
   constructor _() → pri::H
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
   H._() : super._(); // Error
           ^^^^^"
     ;
@@ -142,7 +144,7 @@
     : super self::F::named()
     ;
   constructor _() → pri::I
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
   I._() : super._(); // Error
           ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.transformed.expect
index 5b49d0c..1cb0c1e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart.strong.transformed.expect
@@ -23,7 +23,9 @@
 }
 class E extends pri::B implements self::M /*isEliminatedMixin*/  {
   synthetic constructor •() → self::E
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private.dart:11:7: Error: The superclass, 'B', has no unnamed constructor that takes no arguments.
+class E = B with M; // TODO(johnniwinther): This should not be an error.
+      ^"
     ;
   static synthetic method _#new#tearOff() → self::E
     return new self::E::•();
@@ -121,7 +123,7 @@
 }
 class G extends self::D {
   constructor _() → pri::G
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
   G._() : super._(); // Error
           ^^^^^"
     ;
@@ -130,7 +132,7 @@
 }
 class H extends self::E {
   constructor _() → pri::H
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
   H._() : super._(); // Error
           ^^^^^"
     ;
@@ -142,7 +144,7 @@
     : super self::F::named()
     ;
   constructor _() → pri::I
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/lowering/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
   I._() : super._(); // Error
           ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.expect
index 5e2ba92..4e51436 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.expect
@@ -21,7 +21,9 @@
 }
 class E = pri::B with self::M {
   synthetic constructor •() → self::E
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private.dart:11:7: Error: The superclass, 'B', has no unnamed constructor that takes no arguments.
+class E = B with M; // TODO(johnniwinther): This should not be an error.
+      ^"
     ;
 }
 class F = pri::C with self::M {
@@ -103,14 +105,14 @@
 }
 class G extends self::D {
   constructor _() → pri::G
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
   G._() : super._(); // Error
           ^^^^^"
     ;
 }
 class H extends self::E {
   constructor _() → pri::H
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
   H._() : super._(); // Error
           ^^^^^"
     ;
@@ -120,7 +122,7 @@
     : super self::F::named()
     ;
   constructor _() → pri::I
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
   I._() : super._(); // Error
           ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.modular.expect
index 5e2ba92..4e51436 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.modular.expect
@@ -21,7 +21,9 @@
 }
 class E = pri::B with self::M {
   synthetic constructor •() → self::E
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private.dart:11:7: Error: The superclass, 'B', has no unnamed constructor that takes no arguments.
+class E = B with M; // TODO(johnniwinther): This should not be an error.
+      ^"
     ;
 }
 class F = pri::C with self::M {
@@ -103,14 +105,14 @@
 }
 class G extends self::D {
   constructor _() → pri::G
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
   G._() : super._(); // Error
           ^^^^^"
     ;
 }
 class H extends self::E {
   constructor _() → pri::H
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
   H._() : super._(); // Error
           ^^^^^"
     ;
@@ -120,7 +122,7 @@
     : super self::F::named()
     ;
   constructor _() → pri::I
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
   I._() : super._(); // Error
           ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.transformed.expect
index 73e86d9..2b6d96b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/private.dart.strong.transformed.expect
@@ -21,7 +21,9 @@
 }
 class E extends pri::B implements self::M /*isEliminatedMixin*/  {
   synthetic constructor •() → self::E
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private.dart:11:7: Error: The superclass, 'B', has no unnamed constructor that takes no arguments.
+class E = B with M; // TODO(johnniwinther): This should not be an error.
+      ^"
     ;
 }
 class F extends pri::C implements self::M /*isEliminatedMixin*/  {
@@ -103,14 +105,14 @@
 }
 class G extends self::D {
   constructor _() → pri::G
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:23:11: Error: Superclass has no constructor named 'A._'.
   G._() : super._(); // Error
           ^^^^^"
     ;
 }
 class H extends self::E {
   constructor _() → pri::H
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:27:11: Error: Superclass has no constructor named 'B._'.
   H._() : super._(); // Error
           ^^^^^"
     ;
@@ -120,7 +122,7 @@
     : super self::F::named()
     ;
   constructor _() → pri::I
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/private_lib.dart:32:11: Error: Superclass has no constructor named 'C._'.
   I._() : super._(); // Error
           ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect
index a145520..40354c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.expect
@@ -486,22 +486,22 @@
 }
 class Class extends self::Super {
   constructor constructor1() → self::Class
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
   Class.constructor1() : super();
                          ^^^^^"
     ;
   constructor constructor2() → self::Class
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
   Class.constructor2() : super.unresolved();
                          ^^^^^"
     ;
   constructor constructor3() → self::Class
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
   Class.constructor3() : this();
                          ^^^^"
     ;
   constructor constructor4() → self::Class
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:31: Error: Couldn't find constructor 'Class.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:31: Error: Couldn't find constructor 'Class.unresolved'.
   Class.constructor4() : this.unresolved();
                               ^^^^^^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.modular.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.modular.expect
index a145520..40354c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.modular.expect
@@ -486,22 +486,22 @@
 }
 class Class extends self::Super {
   constructor constructor1() → self::Class
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
   Class.constructor1() : super();
                          ^^^^^"
     ;
   constructor constructor2() → self::Class
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
   Class.constructor2() : super.unresolved();
                          ^^^^^"
     ;
   constructor constructor3() → self::Class
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
   Class.constructor3() : this();
                          ^^^^"
     ;
   constructor constructor4() → self::Class
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:31: Error: Couldn't find constructor 'Class.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:31: Error: Couldn't find constructor 'Class.unresolved'.
   Class.constructor4() : this.unresolved();
                               ^^^^^^^^^^"
     ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect
index a145520..40354c4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -486,22 +486,22 @@
 }
 class Class extends self::Super {
   constructor constructor1() → self::Class
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:12:26: Error: Superclass has no constructor named 'Super'.
   Class.constructor1() : super();
                          ^^^^^"
     ;
   constructor constructor2() → self::Class
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:13:26: Error: Superclass has no constructor named 'Super.unresolved'.
   Class.constructor2() : super.unresolved();
                          ^^^^^"
     ;
   constructor constructor3() → self::Class
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:14:26: Error: Couldn't find constructor 'Class'.
   Class.constructor3() : this();
                          ^^^^"
     ;
   constructor constructor4() → self::Class
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:31: Error: Couldn't find constructor 'Class.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/constructor_tearoffs/unresolved_constructor_invocation.dart:15:31: Error: Couldn't find constructor 'Class.unresolved'.
   Class.constructor4() : this.unresolved();
                               ^^^^^^^^^^"
     ;
diff --git a/pkg/front_end/testcases/coverage/external_test.dart.strong.expect b/pkg/front_end/testcases/coverage/external_test.dart.strong.expect
index 455f779..925ed14 100644
--- a/pkg/front_end/testcases/coverage/external_test.dart.strong.expect
+++ b/pkg/front_end/testcases/coverage/external_test.dart.strong.expect
@@ -16,7 +16,7 @@
     : self::Foo::x = 0, super core::Object::•()
     ;
   external constructor n24(core::int x) → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/coverage/external_test.dart:10:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/coverage/external_test.dart:10:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external Foo.n24(this.x); // Error
                         ^";
diff --git a/pkg/front_end/testcases/coverage/external_test.dart.strong.modular.expect b/pkg/front_end/testcases/coverage/external_test.dart.strong.modular.expect
index 455f779..925ed14 100644
--- a/pkg/front_end/testcases/coverage/external_test.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/coverage/external_test.dart.strong.modular.expect
@@ -16,7 +16,7 @@
     : self::Foo::x = 0, super core::Object::•()
     ;
   external constructor n24(core::int x) → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/coverage/external_test.dart:10:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/coverage/external_test.dart:10:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external Foo.n24(this.x); // Error
                         ^";
diff --git a/pkg/front_end/testcases/coverage/external_test.dart.strong.transformed.expect b/pkg/front_end/testcases/coverage/external_test.dart.strong.transformed.expect
index 4796a15..dce7ee4d4 100644
--- a/pkg/front_end/testcases/coverage/external_test.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/coverage/external_test.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
     : self::Foo::x = 0, super core::Object::•()
     ;
   external constructor n24(core::int x) → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/coverage/external_test.dart:10:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/coverage/external_test.dart:10:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external Foo.n24(this.x); // Error
                         ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.expect
index c4f71ba..30b16a4 100644
--- a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::• */
+  static const factory •() → self::B /* redirection-target: self::C::• */
     return new self::C::•();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•();
diff --git a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.modular.expect
index c4f71ba..30b16a4 100644
--- a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.modular.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::• */
+  static const factory •() → self::B /* redirection-target: self::C::• */
     return new self::C::•();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•();
diff --git a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.outline.expect
index 8e39a74..c03e65d 100644
--- a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::• */
+  static const factory •() → self::B /* redirection-target: self::C::• */
     return new self::C::•();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•();
diff --git a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.transformed.expect
index c4f71ba..30b16a4 100644
--- a/pkg/front_end/testcases/dart2js/issue47916.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916.dart.strong.transformed.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::• */
+  static const factory •() → self::B /* redirection-target: self::C::• */
     return new self::C::•();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•();
diff --git a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.expect
index edc3513..8550bb3 100644
--- a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
     return self::B::•<dynamic, self::A::•::T%>();
   static synthetic method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
     return new self::C::•<self::A::_#new#tearOff::T%, dynamic, dynamic>();
 }
 abstract class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
+  static const factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
     return new self::C::•<self::B::•::T%, self::B::•::S%, dynamic>();
   static synthetic method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::S%, self::B::_#new#tearOff::T%>
     return new self::C::•<self::B::_#new#tearOff::T%, self::B::_#new#tearOff::S%, dynamic>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.modular.expect
index edc3513..8550bb3 100644
--- a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.modular.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
     return self::B::•<dynamic, self::A::•::T%>();
   static synthetic method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
     return new self::C::•<self::A::_#new#tearOff::T%, dynamic, dynamic>();
 }
 abstract class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
+  static const factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
     return new self::C::•<self::B::•::T%, self::B::•::S%, dynamic>();
   static synthetic method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::S%, self::B::_#new#tearOff::T%>
     return new self::C::•<self::B::_#new#tearOff::T%, self::B::_#new#tearOff::S%, dynamic>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.outline.expect
index 7a14ed9..9ad8eab 100644
--- a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
     return self::B::•<dynamic, self::A::•::T%>();
   static synthetic method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
     return new self::C::•<self::A::_#new#tearOff::T%, dynamic, dynamic>();
 }
 abstract class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
+  static const factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
     return new self::C::•<self::B::•::T%, self::B::•::S%, dynamic>();
   static synthetic method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::S%, self::B::_#new#tearOff::T%>
     return new self::C::•<self::B::_#new#tearOff::T%, self::B::_#new#tearOff::S%, dynamic>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.transformed.expect
index edc3513..8550bb3 100644
--- a/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916b.dart.strong.transformed.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%> /* redirection-target: self::B::•<dynamic, self::A::•::T%>*/
     return self::B::•<dynamic, self::A::•::T%>();
   static synthetic method _#new#tearOff<T extends core::Object? = dynamic>() → self::A<self::A::_#new#tearOff::T%>
     return new self::C::•<self::A::_#new#tearOff::T%, dynamic, dynamic>();
 }
 abstract class B<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
+  static const factory •<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::•::S%, self::B::•::T%> /* redirection-target: self::C::•<self::B::•::T%, self::B::•::S%, dynamic>*/
     return new self::C::•<self::B::•::T%, self::B::•::S%, dynamic>();
   static synthetic method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>() → self::B<self::B::_#new#tearOff::S%, self::B::_#new#tearOff::T%>
     return new self::C::•<self::B::_#new#tearOff::T%, self::B::_#new#tearOff::S%, dynamic>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.expect
index 8767013..cfa061d 100644
--- a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•<core::int>();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::•<core::int>*/
+  static const factory •() → self::B /* redirection-target: self::C::•<core::int>*/
     return new self::C::•<core::int>();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•<core::int>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.modular.expect
index 8767013..cfa061d 100644
--- a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.modular.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•<core::int>();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::•<core::int>*/
+  static const factory •() → self::B /* redirection-target: self::C::•<core::int>*/
     return new self::C::•<core::int>();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•<core::int>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.outline.expect
index e6061bf..9500a28 100644
--- a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•<core::int>();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::•<core::int>*/
+  static const factory •() → self::B /* redirection-target: self::C::•<core::int>*/
     return new self::C::•<core::int>();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•<core::int>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.transformed.expect
index 8767013..cfa061d 100644
--- a/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916c.dart.strong.transformed.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A /* redirection-target: self::B::• */
+  static const factory •() → self::A /* redirection-target: self::B::• */
     return self::B::•();
   static synthetic method _#new#tearOff() → self::A
     return new self::C::•<core::int>();
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B /* redirection-target: self::C::•<core::int>*/
+  static const factory •() → self::B /* redirection-target: self::C::•<core::int>*/
     return new self::C::•<core::int>();
   static synthetic method _#new#tearOff() → self::B
     return new self::C::•<core::int>();
diff --git a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.expect
index 7d4687f..3d24505 100644
--- a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:6:17: Error: Cyclic definition of factory 'A'.
   const factory A() = B;
                 ^";
@@ -28,7 +28,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -38,7 +38,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = A;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.modular.expect
index 7d4687f..3d24505 100644
--- a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.modular.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:6:17: Error: Cyclic definition of factory 'A'.
   const factory A() = B;
                 ^";
@@ -28,7 +28,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -38,7 +38,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = A;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.outline.expect
index 261afb0..daa5613 100644
--- a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.outline.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:6:17: Error: Cyclic definition of factory 'A'.
   const factory A() = B;
                 ^";
@@ -28,7 +28,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -38,7 +38,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = A;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.transformed.expect
index 7d4687f..3d24505 100644
--- a/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916d.dart.strong.transformed.expect
@@ -18,7 +18,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:6:17: Error: Cyclic definition of factory 'A'.
   const factory A() = B;
                 ^";
@@ -28,7 +28,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -38,7 +38,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916d.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = A;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.expect
index fa55d98..40f4fcb 100644
--- a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A
+  static const factory •() → self::A
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
@@ -20,7 +20,7 @@
                       ^";
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B
+  static const factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.modular.expect
index fa55d98..40f4fcb 100644
--- a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.modular.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A
+  static const factory •() → self::A
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
@@ -20,7 +20,7 @@
                       ^";
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B
+  static const factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.outline.expect
index c4a7eeb..fad0e11 100644
--- a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.outline.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A
+  static const factory •() → self::A
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
@@ -20,7 +20,7 @@
                       ^";
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B
+  static const factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.transformed.expect
index fa55d98..40f4fcb 100644
--- a/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916e.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  static factory •() → self::A
+  static const factory •() → self::A
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
@@ -20,7 +20,7 @@
                       ^";
 }
 abstract class B extends core::Object implements self::A {
-  static factory •() → self::B
+  static const factory •() → self::B
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916e.dart:10:23: Error: Redirection constructor target not found: 'C.named'
   const factory B() = C.named;
                       ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.expect
index 05c102e..db98bc4 100644
--- a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -24,7 +24,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -34,7 +34,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = B;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.modular.expect
index 05c102e..db98bc4 100644
--- a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.modular.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -24,7 +24,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -34,7 +34,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = B;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.outline.expect
index 53f6f35..8bab841 100644
--- a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.outline.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -24,7 +24,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -34,7 +34,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = B;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.transformed.expect
index 05c102e..db98bc4 100644
--- a/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue47916f.dart.strong.transformed.expect
@@ -14,7 +14,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::A<self::A::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -24,7 +24,7 @@
                 ^";
 }
 abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::B<self::B::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:10:17: Error: Cyclic definition of factory 'B'.
   const factory B() = C;
                 ^";
@@ -34,7 +34,7 @@
                 ^";
 }
 class C<T extends core::Object? = dynamic> extends core::Object implements self::B<self::C::T%> {
-  static factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
+  static const factory •<T extends core::Object? = dynamic>() → self::C<self::C::•::T%>
     return invalid-expression "pkg/front_end/testcases/dart2js/issue47916f.dart:14:17: Error: Cyclic definition of factory 'C'.
   const factory C() = B;
                 ^";
diff --git a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.expect b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.expect
index 5d3271a..7d9aa20e 100644
--- a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.expect
@@ -10,13 +10,13 @@
   constructor tearoff • = self::Ext|constructor#_#new#tearOff;
 }
 static const field core::String? maybe = #C5;
-static extension-type-member method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = _;
   return #this;
 }
 static extension-type-member synthetic method Ext|constructor#_#_#tearOff(core::String _) → self::Ext /* erasure=core::String */
   return self::Ext|constructor#_(_);
-static extension-type-member method Ext|constructor#() → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#() → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = "OK";
   assert(!(#C5 == null), "Must not be null");
   return #this;
diff --git a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.modular.expect b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.modular.expect
index 5d3271a..7d9aa20e 100644
--- a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.modular.expect
@@ -10,13 +10,13 @@
   constructor tearoff • = self::Ext|constructor#_#new#tearOff;
 }
 static const field core::String? maybe = #C5;
-static extension-type-member method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = _;
   return #this;
 }
 static extension-type-member synthetic method Ext|constructor#_#_#tearOff(core::String _) → self::Ext /* erasure=core::String */
   return self::Ext|constructor#_(_);
-static extension-type-member method Ext|constructor#() → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#() → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = "OK";
   assert(!(#C5 == null), "Must not be null");
   return #this;
diff --git a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.outline.expect b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.outline.expect
index 6af9236..b8b149c 100644
--- a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.outline.expect
@@ -10,13 +10,13 @@
   constructor tearoff • = self::Ext|constructor#_#new#tearOff;
 }
 static const field core::String? maybe = const core::bool::fromEnvironment("not there") ?{core::String?} "string" : null;
-static extension-type-member method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = _;
   return #this;
 }
 static extension-type-member synthetic method Ext|constructor#_#_#tearOff(core::String _) → self::Ext /* erasure=core::String */
   return self::Ext|constructor#_(_);
-static extension-type-member method Ext|constructor#() → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#() → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = "OK";
   assert(!(self::maybe == null), "Must not be null");
   return #this;
diff --git a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.transformed.expect
index d37d22d..cfaffaa 100644
--- a/pkg/front_end/testcases/dart2js/issue56803.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2js/issue56803.dart.strong.transformed.expect
@@ -10,13 +10,13 @@
   constructor tearoff • = self::Ext|constructor#_#new#tearOff;
 }
 static const field core::String? maybe = #C5;
-static extension-type-member method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#_(core::String _) → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = _;
   return #this;
 }
 static extension-type-member synthetic method Ext|constructor#_#_#tearOff(core::String _) → self::Ext /* erasure=core::String */
   return self::Ext|constructor#_(_);
-static extension-type-member method Ext|constructor#() → self::Ext /* erasure=core::String */ {
+static extension-type-member const method Ext|constructor#() → self::Ext /* erasure=core::String */ {
   lowered final self::Ext /* erasure=core::String */ #this = "OK";
   assert(!(#C5 == null), "Must not be null");
   return #this;
diff --git a/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.expect b/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.expect
index 95cce0d..580f72f 100644
--- a/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.expect
+++ b/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.expect
@@ -47,20 +47,20 @@
       #t4.{core::List::add}{Invariant}(new self::C::v1()){(self::C) → void};
   } =>#t4;
 }
-static extension-type-member method E|constructor#_(core::int? _) → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#_(core::int? _) → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this = _;
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#_#tearOff(core::int? _) → self::E% /* erasure=core::int?, declared=! */
   return self::E|constructor#_(_);
-static extension-type-member method E|constructor#vn() → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#vn() → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this;
   #this = self::E|constructor#_(null);
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#vn#tearOff() → self::E% /* erasure=core::int?, declared=! */
   return self::E|constructor#vn();
-static extension-type-member method E|constructor#v1() → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#v1() → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this;
   #this = self::E|constructor#_(1);
   return #this;
diff --git a/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.transformed.expect
index dbc960c..d19e409 100644
--- a/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dart2wasm/issue61222.dart.strong.transformed.expect
@@ -44,20 +44,20 @@
       #t4.{core::List::add}{Invariant}(new self::C::v1()){(self::C) → void};
   } =>#t4;
 }
-static extension-type-member method E|constructor#_(final core::int? _) → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#_(final core::int? _) → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this = _;
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#_#tearOff(final core::int? _) → self::E% /* erasure=core::int?, declared=! */
   return self::E|constructor#_(_);
-static extension-type-member method E|constructor#vn() → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#vn() → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this;
   #this = self::E|constructor#_(null);
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#vn#tearOff() → self::E% /* erasure=core::int?, declared=! */
   return self::E|constructor#vn();
-static extension-type-member method E|constructor#v1() → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#v1() → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this;
   #this = self::E|constructor#_(1);
   return #this;
diff --git a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.expect b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.expect
index 114d7fd..a369c6c 100644
--- a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.expect
@@ -35,25 +35,25 @@
 static const field #lib1::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = #C1;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = #C3;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = #C1;
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
@@ -163,25 +163,25 @@
 static const field self2::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ libGeneric0 = #C1;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric1 = #C3;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric2 = #C1;
-static extension-type-member method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#new#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#(s);
-static extension-type-member method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#named#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#named(s);
-static extension-type-member method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
   lowered final self2::ExtNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtNullable|constructor#_#new#tearOff(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */
   return self2::ExtNullable|constructor#(s);
-static extension-type-member method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
   lowered final self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.modular.expect b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.modular.expect
index 01b9559..7b9b4d2 100644
--- a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.modular.expect
@@ -35,25 +35,25 @@
 static const field #lib1::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = #C1;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = #C3;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = #C1;
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.outline.expect b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.outline.expect
index 4469bbc..a4c1420 100644
--- a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.outline.expect
@@ -36,25 +36,25 @@
 static const field mai::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = const mai::ExtGeneric|constructor#<core::String>("hello");
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = const mai::ExtGeneric|constructor#<core::String?>(null);
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = const mai::ExtGeneric|constructor#<core::String?>("hello");
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
@@ -111,25 +111,25 @@
 static const field mai::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ libGeneric0 = const mai::ExtGeneric|constructor#<core::String>("hello");
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric1 = const mai::ExtGeneric|constructor#<core::String?>(null);
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric2 = const mai::ExtGeneric|constructor#<core::String?>("hello");
-static extension-type-member method ExtString|constructor#(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
   lowered final mai::ExtString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#new#tearOff(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */
   return mai::ExtString|constructor#(s);
-static extension-type-member method ExtString|constructor#named(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#named(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
   lowered final mai::ExtString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#named#tearOff(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */
   return mai::ExtString|constructor#named(s);
-static extension-type-member method ExtNullable|constructor#(core::String? s) → mai::ExtNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method ExtNullable|constructor#(core::String? s) → mai::ExtNullable% /* erasure=core::String?, declared=! */ {
   lowered final mai::ExtNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtNullable|constructor#_#new#tearOff(core::String? s) → mai::ExtNullable% /* erasure=core::String?, declared=! */
   return mai::ExtNullable|constructor#(s);
-static extension-type-member method ExtGeneric|constructor#<T extends core::Object? = dynamic>(mai::ExtGeneric|constructor#::T% s) → mai::ExtGeneric<mai::ExtGeneric|constructor#::T%>% /* erasure=mai::ExtGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtGeneric|constructor#<T extends core::Object? = dynamic>(mai::ExtGeneric|constructor#::T% s) → mai::ExtGeneric<mai::ExtGeneric|constructor#::T%>% /* erasure=mai::ExtGeneric|constructor#::T%, declared=! */ {
   lowered final mai::ExtGeneric<mai::ExtGeneric|constructor#::T%>% /* erasure=mai::ExtGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.transformed.expect
index 114d7fd..a369c6c 100644
--- a/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/extension_types/issue54008/main.dart.strong.transformed.expect
@@ -35,25 +35,25 @@
 static const field #lib1::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = #C1;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = #C3;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = #C1;
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
@@ -163,25 +163,25 @@
 static const field self2::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ libGeneric0 = #C1;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric1 = #C3;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric2 = #C1;
-static extension-type-member method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#new#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#(s);
-static extension-type-member method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#named#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#named(s);
-static extension-type-member method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
   lowered final self2::ExtNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtNullable|constructor#_#new#tearOff(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */
   return self2::ExtNullable|constructor#(s);
-static extension-type-member method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
   lowered final self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
index 050ceb6..751d3ab 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.expect
@@ -29,7 +29,7 @@
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
     return test::Class::fact(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
     return test::Class::constFact(defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.modular.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.modular.expect
index 050ceb6..751d3ab 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.modular.expect
@@ -29,7 +29,7 @@
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
     return test::Class::fact(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
     return test::Class::constFact(defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.outline.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.outline.expect
index 5006438..5e0814e 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.outline.expect
@@ -27,7 +27,7 @@
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#fact#tearOff({has-declared-initializer core::bool defaultValue}) → self2::Class
     return self2::Class::fact(defaultValue: defaultValue);
   @_in::patch
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = true}) → self2::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = true}) → self2::Class
     ;
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#constFact#tearOff({has-declared-initializer core::bool defaultValue}) → self2::Class
     return self2::Class::constFact(defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect
index 050ceb6..751d3ab 100644
--- a/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dartdevc/factory_patch/main.dart.strong.transformed.expect
@@ -29,7 +29,7 @@
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#fact#tearOff({core::bool defaultValue = #C3}) → test::Class
     return test::Class::fact(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
   static synthetic method /* from org-dartlang-testcase:///patch_lib.dart */ _#constFact#tearOff({core::bool defaultValue = #C3}) → test::Class
     return test::Class::constFact(defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart
new file mode 100644
index 0000000..e1d5333
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart
@@ -0,0 +1,3 @@
+import 'main_lib1.dart';
+
+C c = new C();
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.expect b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.expect
new file mode 100644
index 0000000..cb71cdc
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+
+static field mai::C c = new mai::C::•();
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+class C extends mai::_C&Object&M {
+  synthetic constructor •() → mai::C
+    : super mai::_C&Object&M::•()
+    ;
+  static synthetic method _#new#tearOff() → mai::C
+    return new mai::C::•();
+}
+abstract class _C&Object&M = core::Object with mai2::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → mai::_C&Object&M
+    : super core::Object::•()
+    ;
+  synthetic mixin-super-stub method m1() → core::String
+    return super.{mai2::M::m1}();
+  synthetic mixin-super-stub method m2() → core::String
+    return super.{mai2::M::m2}();
+}
+
+library;
+import self as mai2;
+import "dart:core" as core;
+
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+  method m1() → core::String {
+    return "hello";
+  }
+  method m2() → core::String {
+    return "hello";
+  }
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.modular.expect b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.modular.expect
new file mode 100644
index 0000000..cb71cdc
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.modular.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+
+static field mai::C c = new mai::C::•();
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+class C extends mai::_C&Object&M {
+  synthetic constructor •() → mai::C
+    : super mai::_C&Object&M::•()
+    ;
+  static synthetic method _#new#tearOff() → mai::C
+    return new mai::C::•();
+}
+abstract class _C&Object&M = core::Object with mai2::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → mai::_C&Object&M
+    : super core::Object::•()
+    ;
+  synthetic mixin-super-stub method m1() → core::String
+    return super.{mai2::M::m1}();
+  synthetic mixin-super-stub method m2() → core::String
+    return super.{mai2::M::m2}();
+}
+
+library;
+import self as mai2;
+import "dart:core" as core;
+
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+  method m1() → core::String {
+    return "hello";
+  }
+  method m2() → core::String {
+    return "hello";
+  }
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.outline.expect b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.outline.expect
new file mode 100644
index 0000000..cc1ed7b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.outline.expect
@@ -0,0 +1,41 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+
+static field mai::C c;
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+class C extends mai::_C&Object&M {
+  synthetic constructor •() → mai::C
+    ;
+  static synthetic method _#new#tearOff() → mai::C
+    return new mai::C::•();
+}
+abstract class _C&Object&M = core::Object with mai2::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → mai::_C&Object&M
+    : super core::Object::•()
+    ;
+  synthetic mixin-super-stub method m1() → core::String
+    return super.{mai2::M::m1}();
+  synthetic mixin-super-stub method m2() → core::String
+    return super.{mai2::M::m2}();
+}
+
+library;
+import self as mai2;
+import "dart:core" as core;
+
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+  method m1() → core::String
+    ;
+  method m2() → core::String
+    ;
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..cb71cdc
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.strong.transformed.expect
@@ -0,0 +1,44 @@
+library;
+import self as self;
+import "main_lib1.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib1.dart";
+
+static field mai::C c = new mai::C::•();
+
+library;
+import self as mai;
+import "dart:core" as core;
+import "main_lib2.dart" as mai2;
+
+import "org-dartlang-testcase:///main_lib2.dart";
+
+class C extends mai::_C&Object&M {
+  synthetic constructor •() → mai::C
+    : super mai::_C&Object&M::•()
+    ;
+  static synthetic method _#new#tearOff() → mai::C
+    return new mai::C::•();
+}
+abstract class _C&Object&M = core::Object with mai2::M /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → mai::_C&Object&M
+    : super core::Object::•()
+    ;
+  synthetic mixin-super-stub method m1() → core::String
+    return super.{mai2::M::m1}();
+  synthetic mixin-super-stub method m2() → core::String
+    return super.{mai2::M::m2}();
+}
+
+library;
+import self as mai2;
+import "dart:core" as core;
+
+abstract class M extends core::Object /*isMixinDeclaration*/  {
+  method m1() → core::String {
+    return "hello";
+  }
+  method m2() → core::String {
+    return "hello";
+  }
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.textual_outline.expect b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.textual_outline.expect
new file mode 100644
index 0000000..e1d5333
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+import 'main_lib1.dart';
+
+C c = new C();
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e1d5333
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+import 'main_lib1.dart';
+
+C c = new C();
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main_lib1.dart b/pkg/front_end/testcases/dartdevc/mixin_collection/main_lib1.dart
new file mode 100644
index 0000000..2abd8d6
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main_lib1.dart
@@ -0,0 +1,3 @@
+import 'main_lib2.dart';
+
+class C with M {}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_collection/main_lib2.dart b/pkg/front_end/testcases/dartdevc/mixin_collection/main_lib2.dart
new file mode 100644
index 0000000..e29fa79
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_collection/main_lib2.dart
@@ -0,0 +1,9 @@
+mixin M {
+  String m1() {
+    return 'hello';
+  }
+
+  String m2() {
+    return 'hello';
+  }
+}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart
deleted file mode 100644
index f5c0143..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
-// for 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 C1() {}
-
-class const C2() {}
-
-class C3() {
-  final int? i; // Error
-}
-
-class const C4() { // Error
-  int? i;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.expect b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.expect
deleted file mode 100644
index 0fb3b50..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.expect
+++ /dev/null
@@ -1,41 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:10:14: Error: Final field 'i' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? i; // Error
-//              ^
-//
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
-// class const C4() { // Error
-//               ^
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:14:8: Context: Field isn't final, but constructor is 'const'.
-//   int? i;
-//        ^
-//
-import self as self;
-import "dart:core" as core;
-
-class C1 extends core::Object {
-  constructor •() → self::C1
-    : super core::Object::•()
-    ;
-}
-class C2 extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C2
-    : super core::Object::•()
-    ;
-}
-class C3 extends core::Object {
-  final field core::int? i = null;
-  constructor •() → self::C3
-    : super core::Object::•()
-    ;
-}
-class C4 extends core::Object /*hasConstConstructor*/  {
-  field core::int? i = null;
-  const constructor •() → self::C4
-    : super core::Object::•()
-    ;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.modular.expect
deleted file mode 100644
index 0fb3b50..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.modular.expect
+++ /dev/null
@@ -1,41 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:10:14: Error: Final field 'i' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? i; // Error
-//              ^
-//
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
-// class const C4() { // Error
-//               ^
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:14:8: Context: Field isn't final, but constructor is 'const'.
-//   int? i;
-//        ^
-//
-import self as self;
-import "dart:core" as core;
-
-class C1 extends core::Object {
-  constructor •() → self::C1
-    : super core::Object::•()
-    ;
-}
-class C2 extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C2
-    : super core::Object::•()
-    ;
-}
-class C3 extends core::Object {
-  final field core::int? i = null;
-  constructor •() → self::C3
-    : super core::Object::•()
-    ;
-}
-class C4 extends core::Object /*hasConstConstructor*/  {
-  field core::int? i = null;
-  const constructor •() → self::C4
-    : super core::Object::•()
-    ;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.outline.expect b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.outline.expect
deleted file mode 100644
index ba997af..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.outline.expect
+++ /dev/null
@@ -1,24 +0,0 @@
-library;
-import self as self;
-import "dart:core" as core;
-
-class C1 extends core::Object {
-  constructor •() → self::C1
-    ;
-}
-class C2 extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C2
-    : super core::Object::•()
-    ;
-}
-class C3 extends core::Object {
-  final field core::int? i;
-  constructor •() → self::C3
-    ;
-}
-class C4 extends core::Object /*hasConstConstructor*/  {
-  field core::int? i;
-  const constructor •() → self::C4
-    : super core::Object::•()
-    ;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.transformed.expect
deleted file mode 100644
index 0fb3b50..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.strong.transformed.expect
+++ /dev/null
@@ -1,41 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:10:14: Error: Final field 'i' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? i; // Error
-//              ^
-//
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
-// class const C4() { // Error
-//               ^
-// pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart:14:8: Context: Field isn't final, but constructor is 'const'.
-//   int? i;
-//        ^
-//
-import self as self;
-import "dart:core" as core;
-
-class C1 extends core::Object {
-  constructor •() → self::C1
-    : super core::Object::•()
-    ;
-}
-class C2 extends core::Object /*hasConstConstructor*/  {
-  const constructor •() → self::C2
-    : super core::Object::•()
-    ;
-}
-class C3 extends core::Object {
-  final field core::int? i = null;
-  constructor •() → self::C3
-    : super core::Object::•()
-    ;
-}
-class C4 extends core::Object /*hasConstConstructor*/  {
-  field core::int? i = null;
-  const constructor •() → self::C4
-    : super core::Object::•()
-    ;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.textual_outline.expect
deleted file mode 100644
index bed589d..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.textual_outline.expect
+++ /dev/null
@@ -1,11 +0,0 @@
-class C1() {}
-
-class const C2() {}
-
-class C3() {
-  final int? i;
-}
-
-class const C4() {
-  int? i;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.textual_outline_modelled.expect
deleted file mode 100644
index 1eaf42f..0000000
--- a/pkg/front_end/testcases/declaring_constructors/class_primary_constructor.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,11 +0,0 @@
-class C1() {}
-
-class C3() {
-  final int? i;
-}
-
-class const C2() {}
-
-class const C4() {
-  int? i;
-}
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart b/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart
deleted file mode 100644
index 026ac51..0000000
--- a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
-// for 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): Avoid reporting error on no-args super constructor.
-enum E1() { // Error
-  a
-}
-
-enum const E2() {
-  a
-}
-
-enum const E3() {
-  a;
-  final int? b; // Error
-}
-
-enum const E4() { // Error
-  a;
-  int? b;
-}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.expect b/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.expect
deleted file mode 100644
index fc2b974..0000000
--- a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.expect
+++ /dev/null
@@ -1,97 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: Generative enum constructors must be marked as 'const'.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-// Try using a constructor or factory that is 'const'.
-//   a
-//   ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: The superclass, '_Enum', has no unnamed constructor that takes no arguments.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:16:14: Error: Final field 'b' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? b; // Error
-//              ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:19:14: Error: Constructor is marked 'const' so all fields must be final.
-// enum const E4() { // Error
-//              ^
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:21:8: Context: Field isn't final, but constructor is 'const'.
-//   int? b;
-//        ^
-//
-import self as self;
-import "dart:core" as core;
-
-class E1 extends core::_Enum /*isEnum*/  {
-  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  constructor •(core::int #index, core::String #name) → self::E1
-    : invalid-initializer
-    ;
-  method core::_enumToString() → core::String
-    return "E1.${this.{core::_Enum::_name}{core::String}}";
-}
-class E2 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E2 a = #C3;
-  static const field core::List<self::E2> values = #C4;
-  const constructor •(core::int #index, core::String #name) → self::E2
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E2.${this.{core::_Enum::_name}{core::String}}";
-}
-class E3 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E3 a = #C6;
-  final field core::int? b = null;
-  static const field core::List<self::E3> values = #C7;
-  const constructor •(core::int #index, core::String #name) → self::E3
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E3.${this.{core::_Enum::_name}{core::String}}";
-}
-class E4 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E4 a = #C8;
-  field core::int? b = null;
-  static const field core::List<self::E4> values = #C9;
-  const constructor •(core::int #index, core::String #name) → self::E4
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E4.${this.{core::_Enum::_name}{core::String}}";
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "a"
-  #C3 = self::E2 {index:#C1, _name:#C2}
-  #C4 = <self::E2>[#C3]
-  #C5 = null
-  #C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
-  #C7 = <self::E3>[#C6]
-  #C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
-  #C9 = <self::E4>[#C8]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///enum_primary_constructor.dart:
-- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:10:14)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
-- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:14:14)
-- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:19:14)
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.modular.expect
deleted file mode 100644
index fc2b974..0000000
--- a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.modular.expect
+++ /dev/null
@@ -1,97 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: Generative enum constructors must be marked as 'const'.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-// Try using a constructor or factory that is 'const'.
-//   a
-//   ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: The superclass, '_Enum', has no unnamed constructor that takes no arguments.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:16:14: Error: Final field 'b' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? b; // Error
-//              ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:19:14: Error: Constructor is marked 'const' so all fields must be final.
-// enum const E4() { // Error
-//              ^
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:21:8: Context: Field isn't final, but constructor is 'const'.
-//   int? b;
-//        ^
-//
-import self as self;
-import "dart:core" as core;
-
-class E1 extends core::_Enum /*isEnum*/  {
-  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  constructor •(core::int #index, core::String #name) → self::E1
-    : invalid-initializer
-    ;
-  method core::_enumToString() → core::String
-    return "E1.${this.{core::_Enum::_name}{core::String}}";
-}
-class E2 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E2 a = #C3;
-  static const field core::List<self::E2> values = #C4;
-  const constructor •(core::int #index, core::String #name) → self::E2
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E2.${this.{core::_Enum::_name}{core::String}}";
-}
-class E3 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E3 a = #C6;
-  final field core::int? b = null;
-  static const field core::List<self::E3> values = #C7;
-  const constructor •(core::int #index, core::String #name) → self::E3
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E3.${this.{core::_Enum::_name}{core::String}}";
-}
-class E4 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E4 a = #C8;
-  field core::int? b = null;
-  static const field core::List<self::E4> values = #C9;
-  const constructor •(core::int #index, core::String #name) → self::E4
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E4.${this.{core::_Enum::_name}{core::String}}";
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "a"
-  #C3 = self::E2 {index:#C1, _name:#C2}
-  #C4 = <self::E2>[#C3]
-  #C5 = null
-  #C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
-  #C7 = <self::E3>[#C6]
-  #C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
-  #C9 = <self::E4>[#C8]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///enum_primary_constructor.dart:
-- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:10:14)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
-- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:14:14)
-- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:19:14)
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.outline.expect b/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.outline.expect
deleted file mode 100644
index 2f3f14a..0000000
--- a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.outline.expect
+++ /dev/null
@@ -1,66 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: Generative enum constructors must be marked as 'const'.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-// Try using a constructor or factory that is 'const'.
-//   a
-//   ^
-//
-import self as self;
-import "dart:core" as core;
-
-class E1 extends core::_Enum /*isEnum*/  {
-  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  static const field core::List<self::E1> values = const <self::E1>[self::E1::a];
-  constructor •(core::int #index, core::String #name) → self::E1
-    ;
-  method core::_enumToString() → core::String
-    return "E1.${this.{core::_Enum::_name}{core::String}}";
-}
-class E2 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E2 a = const self::E2::•(0, "a");
-  static const field core::List<self::E2> values = const <self::E2>[self::E2::a];
-  const constructor •(core::int #index, core::String #name) → self::E2
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E2.${this.{core::_Enum::_name}{core::String}}";
-}
-class E3 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E3 a = const self::E3::•(0, "a");
-  final field core::int? b;
-  static const field core::List<self::E3> values = const <self::E3>[self::E3::a];
-  const constructor •(core::int #index, core::String #name) → self::E3
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E3.${this.{core::_Enum::_name}{core::String}}";
-}
-class E4 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E4 a = const self::E4::•(0, "a");
-  field core::int? b;
-  static const field core::List<self::E4> values = const <self::E4>[self::E4::a];
-  const constructor •(core::int #index, core::String #name) → self::E4
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E4.${this.{core::_Enum::_name}{core::String}}";
-}
-
-
-Extra constant evaluation status:
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:11:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "a"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:10:12 -> ListConstant(const <E2>[const E2{_Enum.index: 0, _Enum._name: "a"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:15:3 -> InstanceConstant(const E3{E3.b: null, _Enum.index: 0, _Enum._name: "a"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:14:12 -> ListConstant(const <E3>[const E3{E3.b: null, _Enum.index: 0, _Enum._name: "a"}])
-Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:20:3 -> InstanceConstant(const E4{E4.b: null, _Enum.index: 0, _Enum._name: "a"})
-Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:19:12 -> ListConstant(const <E4>[const E4{E4.b: null, _Enum.index: 0, _Enum._name: "a"}])
-Extra constant evaluation: evaluated: 26, effectively constant: 6
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.transformed.expect
deleted file mode 100644
index fc2b974..0000000
--- a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.strong.transformed.expect
+++ /dev/null
@@ -1,97 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: Generative enum constructors must be marked as 'const'.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-// Try using a constructor or factory that is 'const'.
-//   a
-//   ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:6:8: Error: The superclass, '_Enum', has no unnamed constructor that takes no arguments.
-// enum E1() { // Error
-//        ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:16:14: Error: Final field 'b' is not initialized.
-// Try to initialize the field in the declaration or in every constructor.
-//   final int? b; // Error
-//              ^
-//
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:19:14: Error: Constructor is marked 'const' so all fields must be final.
-// enum const E4() { // Error
-//              ^
-// pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:21:8: Context: Field isn't final, but constructor is 'const'.
-//   int? b;
-//        ^
-//
-import self as self;
-import "dart:core" as core;
-
-class E1 extends core::_Enum /*isEnum*/  {
-  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart:7:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
-Try using a constructor or factory that is 'const'.
-  a
-  ^";
-  constructor •(core::int #index, core::String #name) → self::E1
-    : invalid-initializer
-    ;
-  method core::_enumToString() → core::String
-    return "E1.${this.{core::_Enum::_name}{core::String}}";
-}
-class E2 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E2 a = #C3;
-  static const field core::List<self::E2> values = #C4;
-  const constructor •(core::int #index, core::String #name) → self::E2
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E2.${this.{core::_Enum::_name}{core::String}}";
-}
-class E3 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E3 a = #C6;
-  final field core::int? b = null;
-  static const field core::List<self::E3> values = #C7;
-  const constructor •(core::int #index, core::String #name) → self::E3
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E3.${this.{core::_Enum::_name}{core::String}}";
-}
-class E4 extends core::_Enum /*isEnum*/  {
-  enum-element static const field self::E4 a = #C8;
-  field core::int? b = null;
-  static const field core::List<self::E4> values = #C9;
-  const constructor •(core::int #index, core::String #name) → self::E4
-    : super core::_Enum::•(#index, #name)
-    ;
-  method core::_enumToString() → core::String
-    return "E4.${this.{core::_Enum::_name}{core::String}}";
-}
-
-constants  {
-  #C1 = 0
-  #C2 = "a"
-  #C3 = self::E2 {index:#C1, _name:#C2}
-  #C4 = <self::E2>[#C3]
-  #C5 = null
-  #C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
-  #C7 = <self::E3>[#C6]
-  #C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
-  #C9 = <self::E4>[#C8]
-}
-
-
-Constructor coverage from constants:
-org-dartlang-testcase:///enum_primary_constructor.dart:
-- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:10:14)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
-- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
-- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:14:14)
-- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:19:14)
diff --git a/pkg/front_end/testcases/declaring_constructors/folder.options b/pkg/front_end/testcases/declaring_constructors/folder.options
deleted file mode 100644
index 5f80075..0000000
--- a/pkg/front_end/testcases/declaring_constructors/folder.options
+++ /dev/null
@@ -1 +0,0 @@
---enable-experiment=declaring-constructors
\ No newline at end of file
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.expect b/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.expect
deleted file mode 100644
index e333c9e..0000000
--- a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.expect
+++ /dev/null
@@ -1,93 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
-// extension type ET3(final int i) {}
-//                              ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
-// extension type ET4(i) {} // Error
-//                    ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
-// extension type ET5(var i) {} // Error
-//                        ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-import self as self;
-import "dart:core" as core;
-
-extension type ET1(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET1|constructor#;
-  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
-}
-extension type ET2(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET2|constructor#;
-  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
-}
-extension type ET3(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET3|constructor#;
-  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
-}
-extension type ET4(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET4|constructor#;
-  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
-}
-extension type ET5(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET5|constructor#;
-  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
-}
-extension type ET6(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET6|constructor#;
-  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
-}
-static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
-  lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
-  return self::ET1|constructor#(i);
-static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */ {
-  lowered final self::ET2% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
-  return self::ET2|constructor#(i);
-static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
-  lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
-  return self::ET3|constructor#(i);
-static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET4% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
-  return self::ET4|constructor#(i);
-static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET5% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
-  return self::ET5|constructor#(i);
-static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET6% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
-  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.modular.expect b/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.modular.expect
deleted file mode 100644
index e333c9e..0000000
--- a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.modular.expect
+++ /dev/null
@@ -1,93 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
-// extension type ET3(final int i) {}
-//                              ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
-// extension type ET4(i) {} // Error
-//                    ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
-// extension type ET5(var i) {} // Error
-//                        ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-import self as self;
-import "dart:core" as core;
-
-extension type ET1(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET1|constructor#;
-  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
-}
-extension type ET2(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET2|constructor#;
-  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
-}
-extension type ET3(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET3|constructor#;
-  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
-}
-extension type ET4(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET4|constructor#;
-  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
-}
-extension type ET5(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET5|constructor#;
-  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
-}
-extension type ET6(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET6|constructor#;
-  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
-}
-static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
-  lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
-  return self::ET1|constructor#(i);
-static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */ {
-  lowered final self::ET2% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
-  return self::ET2|constructor#(i);
-static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
-  lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
-  return self::ET3|constructor#(i);
-static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET4% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
-  return self::ET4|constructor#(i);
-static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET5% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
-  return self::ET5|constructor#(i);
-static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET6% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
-  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.outline.expect b/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.outline.expect
deleted file mode 100644
index 25a5958..0000000
--- a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.outline.expect
+++ /dev/null
@@ -1,81 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
-// extension type ET3(final int i) {}
-//                              ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
-// extension type ET4(i) {} // Error
-//                    ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
-// extension type ET5(var i) {} // Error
-//                        ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-import self as self;
-import "dart:core" as core;
-
-extension type ET1(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET1|constructor#;
-  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
-}
-extension type ET2(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET2|constructor#;
-  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
-}
-extension type ET3(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET3|constructor#;
-  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
-}
-extension type ET4(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET4|constructor#;
-  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
-}
-extension type ET5(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET5|constructor#;
-  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
-}
-extension type ET6(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET6|constructor#;
-  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
-}
-static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */
-  ;
-static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
-  return self::ET1|constructor#(i);
-static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */
-  ;
-static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
-  return self::ET2|constructor#(i);
-static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */
-  ;
-static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
-  return self::ET3|constructor#(i);
-static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
-  ;
-static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
-  return self::ET4|constructor#(i);
-static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
-  ;
-static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
-  return self::ET5|constructor#(i);
-static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
-  ;
-static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
-  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.transformed.expect b/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.transformed.expect
deleted file mode 100644
index e333c9e..0000000
--- a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.strong.transformed.expect
+++ /dev/null
@@ -1,93 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
-// extension type ET3(final int i) {}
-//                              ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
-// extension type ET4(i) {} // Error
-//                    ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
-// extension type ET5(var i) {} // Error
-//                        ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-// pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
-// extension type ET6(final i) {} // Error
-//                          ^
-//
-import self as self;
-import "dart:core" as core;
-
-extension type ET1(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET1|constructor#;
-  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
-}
-extension type ET2(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET2|constructor#;
-  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
-}
-extension type ET3(core::int i) {
-  abstract extension-type-member representation-field get i() → core::int;
-  constructor • = self::ET3|constructor#;
-  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
-}
-extension type ET4(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET4|constructor#;
-  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
-}
-extension type ET5(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET5|constructor#;
-  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
-}
-extension type ET6(invalid-type i) {
-  abstract extension-type-member representation-field get i() → invalid-type;
-  constructor • = self::ET6|constructor#;
-  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
-}
-static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
-  lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
-  return self::ET1|constructor#(i);
-static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */ {
-  lowered final self::ET2% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
-  return self::ET2|constructor#(i);
-static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
-  lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
-  return self::ET3|constructor#(i);
-static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET4% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
-  return self::ET4|constructor#(i);
-static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET5% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
-  return self::ET5|constructor#(i);
-static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */ {
-  lowered final self::ET6% /* erasure=invalid-type, declared=! */ #this = i;
-  return #this;
-}
-static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
-  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.expect b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.expect
index b0e35fe..20347df 100644
--- a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.expect
@@ -7,7 +7,7 @@
   const constructor red(core::int x) → self::Color
     : self::Color::x = x, super core::Object::•()
     ;
-  static factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
+  static const factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
     return new self::Color::red(x);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.modular.expect b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.modular.expect
index b0e35fe..20347df 100644
--- a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.modular.expect
@@ -7,7 +7,7 @@
   const constructor red(core::int x) → self::Color
     : self::Color::x = x, super core::Object::•()
     ;
-  static factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
+  static const factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
     return new self::Color::red(x);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.outline.expect b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.outline.expect
index 67c221b..049cdd3 100644
--- a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.outline.expect
@@ -7,7 +7,7 @@
   const constructor red(core::int x) → self::Color
     : self::Color::x = x, super core::Object::•()
     ;
-  static factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
+  static const factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
     return new self::Color::red(x);
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.transformed.expect
index b0e35fe..20347df 100644
--- a/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/dot_shorthands/const_constructor_factory.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   const constructor red(core::int x) → self::Color
     : self::Color::x = x, super core::Object::•()
     ;
-  static factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
+  static const factory red2(core::int x) → self::Color /* redirection-target: self::Color::red */
     return new self::Color::red(x);
 }
 static method main() → void {
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
index 26bea1d..abb0c89 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -88,7 +88,7 @@
     return const E(); // Error.
                  ^";
   }
-  static factory f3() → self::E
+  static const 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.
                          ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.modular.expect
index 26bea1d..abb0c89 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.modular.expect
@@ -88,7 +88,7 @@
     return const E(); // Error.
                  ^";
   }
-  static factory f3() → self::E
+  static const 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.
                          ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.outline.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.outline.expect
index d114681..f893eb0 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.outline.expect
@@ -48,7 +48,7 @@
     ;
   static factory f2() → self::E
     ;
-  static factory f3() → self::E
+  static const 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.
                          ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
index 26bea1d..abb0c89 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -88,7 +88,7 @@
     return const E(); // Error.
                  ^";
   }
-  static factory f3() → self::E
+  static const 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.
                          ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.expect
index 355811d..d460c38 100644
--- a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.expect
@@ -25,7 +25,7 @@
   final field core::int x;
   static const field core::List<self::E> values = invalid-expression "External constructors can't be evaluated in constant expressions.";
   external const constructor •(core::int #index, core::String #name, core::int x) → self::E
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external const E(this.x);
                         ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.modular.expect
index 355811d..d460c38 100644
--- a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.modular.expect
@@ -25,7 +25,7 @@
   final field core::int x;
   static const field core::List<self::E> values = invalid-expression "External constructors can't be evaluated in constant expressions.";
   external const constructor •(core::int #index, core::String #name, core::int x) → self::E
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external const E(this.x);
                         ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.outline.expect b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.outline.expect
index 5918efa..cc52df4 100644
--- a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.outline.expect
@@ -15,7 +15,7 @@
   final field core::int x;
   static const field core::List<self::E> values = const <self::E>[self::E::a];
   external const constructor •(core::int #index, core::String #name, core::int x) → self::E
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external const E(this.x);
                         ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.transformed.expect
index 355811d..d460c38 100644
--- a/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/external_constructor.dart.strong.transformed.expect
@@ -25,7 +25,7 @@
   final field core::int x;
   static const field core::List<self::E> values = invalid-expression "External constructors can't be evaluated in constant expressions.";
   external const constructor •(core::int #index, core::String #name, core::int x) → self::E
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
+    : invalid-initializer "pkg/front_end/testcases/enhanced_enums/external_constructor.dart:9:25: Error: An external constructor can't initialize fields.
 Try removing the field initializers, or removing the keyword 'external'.
   external const E(this.x);
                         ^";
diff --git a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.expect
index 72c89b3..d49a356 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.modular.expect
index 72c89b3..d49a356 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.modular.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect
index d9e334b..022ba02 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.outline.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.transformed.expect
index 72c89b3..d49a356 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue49429.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart
new file mode 100644
index 0000000..b1e1bd1
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2);
+
+  final int? a;
+  final int b;
+  final int c;
+
+  const E1({this.a, required this.b, this.c = 42});
+}
+
+enum E2 {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2);
+
+  final int a;
+  final int? b;
+  final int c;
+
+  const E2(this.a, [this.b, this.c = 42]);
+}
+
+enum E3 {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2);
+
+  const E3({int? a, required int b, int c = 42});
+}
+
+enum E4 {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2);
+
+  const E4(int a, [int? b, int c = 42]);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.expect
new file mode 100644
index 0000000..ba1dd45
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = #C6;
+  enum-element static const field self::E1 y = #C8;
+  enum-element static const field self::E1 z = #C11;
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  static const field core::List<self::E1> values = #C12;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C1, required core::int b, core::int c = #C3}) → self::E1
+    : self::E1::a = a, self::E1::b = b, self::E1::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 x = #C13;
+  enum-element static const field self::E2 y = #C14;
+  enum-element static const field self::E2 z = #C15;
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  static const field core::List<self::E2> values = #C16;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C1, core::int c = #C3]) → self::E2
+    : self::E2::a = a, self::E2::b = b, self::E2::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 x = #C17;
+  enum-element static const field self::E3 y = #C18;
+  enum-element static const field self::E3 z = #C19;
+  static const field core::List<self::E3> values = #C20;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C1, required core::int b, core::int c = #C3}) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 x = #C21;
+  enum-element static const field self::E4 y = #C22;
+  enum-element static const field self::E4 z = #C23;
+  static const field core::List<self::E4> values = #C24;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C1, core::int c = #C3]) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+  #C3 = 42
+  #C4 = 0
+  #C5 = "x"
+  #C6 = self::E1 {a:#C1, b:#C2, c:#C3, index:#C4, _name:#C5}
+  #C7 = "y"
+  #C8 = self::E1 {a:#C4, b:#C2, c:#C3, index:#C2, _name:#C7}
+  #C9 = 2
+  #C10 = "z"
+  #C11 = self::E1 {a:#C1, b:#C2, c:#C9, index:#C9, _name:#C10}
+  #C12 = <self::E1>[#C6, #C8, #C11]
+  #C13 = self::E2 {a:#C4, b:#C1, c:#C3, index:#C4, _name:#C5}
+  #C14 = self::E2 {a:#C4, b:#C2, c:#C3, index:#C2, _name:#C7}
+  #C15 = self::E2 {a:#C4, b:#C2, c:#C9, index:#C9, _name:#C10}
+  #C16 = <self::E2>[#C13, #C14, #C15]
+  #C17 = self::E3 {index:#C4, _name:#C5}
+  #C18 = self::E3 {index:#C2, _name:#C7}
+  #C19 = self::E3 {index:#C9, _name:#C10}
+  #C20 = <self::E3>[#C17, #C18, #C19]
+  #C21 = self::E4 {index:#C4, _name:#C5}
+  #C22 = self::E4 {index:#C2, _name:#C7}
+  #C23 = self::E4 {index:#C9, _name:#C10}
+  #C24 = <self::E4>[#C21, #C22, #C23]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///optional_parameters.dart:
+- E1. (from org-dartlang-testcase:///optional_parameters.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E2. (from org-dartlang-testcase:///optional_parameters.dart:26:9)
+- E3. (from org-dartlang-testcase:///optional_parameters.dart:34:9)
+- E4. (from org-dartlang-testcase:///optional_parameters.dart:42:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.modular.expect b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.modular.expect
new file mode 100644
index 0000000..ba1dd45
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.modular.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = #C6;
+  enum-element static const field self::E1 y = #C8;
+  enum-element static const field self::E1 z = #C11;
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  static const field core::List<self::E1> values = #C12;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C1, required core::int b, core::int c = #C3}) → self::E1
+    : self::E1::a = a, self::E1::b = b, self::E1::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 x = #C13;
+  enum-element static const field self::E2 y = #C14;
+  enum-element static const field self::E2 z = #C15;
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  static const field core::List<self::E2> values = #C16;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C1, core::int c = #C3]) → self::E2
+    : self::E2::a = a, self::E2::b = b, self::E2::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 x = #C17;
+  enum-element static const field self::E3 y = #C18;
+  enum-element static const field self::E3 z = #C19;
+  static const field core::List<self::E3> values = #C20;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C1, required core::int b, core::int c = #C3}) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 x = #C21;
+  enum-element static const field self::E4 y = #C22;
+  enum-element static const field self::E4 z = #C23;
+  static const field core::List<self::E4> values = #C24;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C1, core::int c = #C3]) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+  #C3 = 42
+  #C4 = 0
+  #C5 = "x"
+  #C6 = self::E1 {a:#C1, b:#C2, c:#C3, index:#C4, _name:#C5}
+  #C7 = "y"
+  #C8 = self::E1 {a:#C4, b:#C2, c:#C3, index:#C2, _name:#C7}
+  #C9 = 2
+  #C10 = "z"
+  #C11 = self::E1 {a:#C1, b:#C2, c:#C9, index:#C9, _name:#C10}
+  #C12 = <self::E1>[#C6, #C8, #C11]
+  #C13 = self::E2 {a:#C4, b:#C1, c:#C3, index:#C4, _name:#C5}
+  #C14 = self::E2 {a:#C4, b:#C2, c:#C3, index:#C2, _name:#C7}
+  #C15 = self::E2 {a:#C4, b:#C2, c:#C9, index:#C9, _name:#C10}
+  #C16 = <self::E2>[#C13, #C14, #C15]
+  #C17 = self::E3 {index:#C4, _name:#C5}
+  #C18 = self::E3 {index:#C2, _name:#C7}
+  #C19 = self::E3 {index:#C9, _name:#C10}
+  #C20 = <self::E3>[#C17, #C18, #C19]
+  #C21 = self::E4 {index:#C4, _name:#C5}
+  #C22 = self::E4 {index:#C2, _name:#C7}
+  #C23 = self::E4 {index:#C9, _name:#C10}
+  #C24 = <self::E4>[#C21, #C22, #C23]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///optional_parameters.dart:
+- E1. (from org-dartlang-testcase:///optional_parameters.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E2. (from org-dartlang-testcase:///optional_parameters.dart:26:9)
+- E3. (from org-dartlang-testcase:///optional_parameters.dart:34:9)
+- E4. (from org-dartlang-testcase:///optional_parameters.dart:42:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.outline.expect b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.outline.expect
new file mode 100644
index 0000000..4d8349f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.outline.expect
@@ -0,0 +1,74 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = const self::E1::•(0, "x", b: 1);
+  enum-element static const field self::E1 y = const self::E1::•(1, "y", a: 0, b: 1);
+  enum-element static const field self::E1 z = const self::E1::•(2, "z", b: 1, c: 2);
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::x, self::E1::y, self::E1::z];
+  const constructor •(core::int #index, core::String #name, {core::int? a = null, required core::int b, core::int c = 42}) → self::E1
+    : self::E1::a = a, self::E1::b = b, self::E1::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 x = const self::E2::•(0, "x", 0);
+  enum-element static const field self::E2 y = const self::E2::•(1, "y", 0, 1);
+  enum-element static const field self::E2 z = const self::E2::•(2, "z", 0, 1, 2);
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::x, self::E2::y, self::E2::z];
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = null, core::int c = 42]) → self::E2
+    : self::E2::a = a, self::E2::b = b, self::E2::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 x = const self::E3::•(0, "x", b: 1);
+  enum-element static const field self::E3 y = const self::E3::•(1, "y", a: 0, b: 1);
+  enum-element static const field self::E3 z = const self::E3::•(2, "z", b: 1, c: 2);
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::x, self::E3::y, self::E3::z];
+  const constructor •(core::int #index, core::String #name, {core::int? a = null, required core::int b, core::int c = 42}) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 x = const self::E4::•(0, "x", 0);
+  enum-element static const field self::E4 y = const self::E4::•(1, "y", 0, 1);
+  enum-element static const field self::E4 z = const self::E4::•(2, "z", 0, 1, 2);
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::x, self::E4::y, self::E4::z];
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = null, core::int c = 42]) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:6:3 -> InstanceConstant(const E1{E1.a: null, E1.b: 1, E1.c: 42, _Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:7:3 -> InstanceConstant(const E1{E1.a: 0, E1.b: 1, E1.c: 42, _Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:8:3 -> InstanceConstant(const E1{E1.a: null, E1.b: 1, E1.c: 2, _Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///optional_parameters.dart:5:6 -> ListConstant(const <E1>[const E1{E1.a: null, E1.b: 1, E1.c: 42, _Enum.index: 0, _Enum._name: "x"}, const E1{E1.a: 0, E1.b: 1, E1.c: 42, _Enum.index: 1, _Enum._name: "y"}, const E1{E1.a: null, E1.b: 1, E1.c: 2, _Enum.index: 2, _Enum._name: "z"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:18:3 -> InstanceConstant(const E2{E2.a: 0, E2.b: null, E2.c: 42, _Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:19:3 -> InstanceConstant(const E2{E2.a: 0, E2.b: 1, E2.c: 42, _Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:20:3 -> InstanceConstant(const E2{E2.a: 0, E2.b: 1, E2.c: 2, _Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///optional_parameters.dart:17:6 -> ListConstant(const <E2>[const E2{E2.a: 0, E2.b: null, E2.c: 42, _Enum.index: 0, _Enum._name: "x"}, const E2{E2.a: 0, E2.b: 1, E2.c: 42, _Enum.index: 1, _Enum._name: "y"}, const E2{E2.a: 0, E2.b: 1, E2.c: 2, _Enum.index: 2, _Enum._name: "z"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:30:3 -> InstanceConstant(const E3{_Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:31:3 -> InstanceConstant(const E3{_Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:32:3 -> InstanceConstant(const E3{_Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///optional_parameters.dart:29:6 -> ListConstant(const <E3>[const E3{_Enum.index: 0, _Enum._name: "x"}, const E3{_Enum.index: 1, _Enum._name: "y"}, const E3{_Enum.index: 2, _Enum._name: "z"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:38:3 -> InstanceConstant(const E4{_Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:39:3 -> InstanceConstant(const E4{_Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///optional_parameters.dart:40:3 -> InstanceConstant(const E4{_Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///optional_parameters.dart:37:6 -> ListConstant(const <E4>[const E4{_Enum.index: 0, _Enum._name: "x"}, const E4{_Enum.index: 1, _Enum._name: "y"}, const E4{_Enum.index: 2, _Enum._name: "z"}])
+Extra constant evaluation: evaluated: 42, effectively constant: 16
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..ba1dd45
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.strong.transformed.expect
@@ -0,0 +1,91 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = #C6;
+  enum-element static const field self::E1 y = #C8;
+  enum-element static const field self::E1 z = #C11;
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  static const field core::List<self::E1> values = #C12;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C1, required core::int b, core::int c = #C3}) → self::E1
+    : self::E1::a = a, self::E1::b = b, self::E1::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 x = #C13;
+  enum-element static const field self::E2 y = #C14;
+  enum-element static const field self::E2 z = #C15;
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  static const field core::List<self::E2> values = #C16;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C1, core::int c = #C3]) → self::E2
+    : self::E2::a = a, self::E2::b = b, self::E2::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 x = #C17;
+  enum-element static const field self::E3 y = #C18;
+  enum-element static const field self::E3 z = #C19;
+  static const field core::List<self::E3> values = #C20;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C1, required core::int b, core::int c = #C3}) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 x = #C21;
+  enum-element static const field self::E4 y = #C22;
+  enum-element static const field self::E4 z = #C23;
+  static const field core::List<self::E4> values = #C24;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C1, core::int c = #C3]) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+  #C3 = 42
+  #C4 = 0
+  #C5 = "x"
+  #C6 = self::E1 {a:#C1, b:#C2, c:#C3, index:#C4, _name:#C5}
+  #C7 = "y"
+  #C8 = self::E1 {a:#C4, b:#C2, c:#C3, index:#C2, _name:#C7}
+  #C9 = 2
+  #C10 = "z"
+  #C11 = self::E1 {a:#C1, b:#C2, c:#C9, index:#C9, _name:#C10}
+  #C12 = <self::E1>[#C6, #C8, #C11]
+  #C13 = self::E2 {a:#C4, b:#C1, c:#C3, index:#C4, _name:#C5}
+  #C14 = self::E2 {a:#C4, b:#C2, c:#C3, index:#C2, _name:#C7}
+  #C15 = self::E2 {a:#C4, b:#C2, c:#C9, index:#C9, _name:#C10}
+  #C16 = <self::E2>[#C13, #C14, #C15]
+  #C17 = self::E3 {index:#C4, _name:#C5}
+  #C18 = self::E3 {index:#C2, _name:#C7}
+  #C19 = self::E3 {index:#C9, _name:#C10}
+  #C20 = <self::E3>[#C17, #C18, #C19]
+  #C21 = self::E4 {index:#C4, _name:#C5}
+  #C22 = self::E4 {index:#C2, _name:#C7}
+  #C23 = self::E4 {index:#C9, _name:#C10}
+  #C24 = <self::E4>[#C21, #C22, #C23]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///optional_parameters.dart:
+- E1. (from org-dartlang-testcase:///optional_parameters.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E2. (from org-dartlang-testcase:///optional_parameters.dart:26:9)
+- E3. (from org-dartlang-testcase:///optional_parameters.dart:34:9)
+- E4. (from org-dartlang-testcase:///optional_parameters.dart:42:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..13a3fd3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.textual_outline.expect
@@ -0,0 +1,37 @@
+enum E1 {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2);
+
+  final int? a;
+  final int b;
+  final int c;
+  const E1({this.a, required this.b, this.c = 42});
+}
+
+enum E2 {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2);
+
+  final int a;
+  final int? b;
+  final int c;
+  const E2(this.a, [this.b, this.c = 42]);
+}
+
+enum E3 {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2);
+
+  const E3({int? a, required int b, int c = 42});
+}
+
+enum E4 {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2);
+
+  const E4(int a, [int? b, int c = 42]);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..13a3fd3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/optional_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,37 @@
+enum E1 {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2);
+
+  final int? a;
+  final int b;
+  final int c;
+  const E1({this.a, required this.b, this.c = 42});
+}
+
+enum E2 {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2);
+
+  final int a;
+  final int? b;
+  final int c;
+  const E2(this.a, [this.b, this.c = 42]);
+}
+
+enum E3 {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2);
+
+  const E3({int? a, required int b, int c = 42});
+}
+
+enum E4 {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2);
+
+  const E4(int a, [int? b, int c = 42]);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.expect
index 393c09c..b31e147 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.expect
@@ -19,7 +19,7 @@
     ;
   method core::_enumToString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  static factory redir() → self::E
+  static const factory redir() → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart:9:29: Error: The constructor function type 'A Function()' isn't a subtype of 'E Function()'.
  - 'A' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.modular.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.modular.expect
index 393c09c..b31e147 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.modular.expect
@@ -19,7 +19,7 @@
     ;
   method core::_enumToString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  static factory redir() → self::E
+  static const factory redir() → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart:9:29: Error: The constructor function type 'A Function()' isn't a subtype of 'E Function()'.
  - 'A' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.outline.expect
index 9d0e06c..58ea685 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.outline.expect
@@ -19,7 +19,7 @@
     ;
   method core::_enumToString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  static factory redir() → self::E
+  static const factory redir() → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart:9:29: Error: The constructor function type 'A Function()' isn't a subtype of 'E Function()'.
  - 'A' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.transformed.expect
index 393c09c..b31e147 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     ;
   method core::_enumToString() → core::String
     return "E.${this.{core::_Enum::_name}{core::String}}";
-  static factory redir() → self::E
+  static const factory redir() → self::E
     return invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart:9:29: Error: The constructor function type 'A Function()' isn't a subtype of 'E Function()'.
  - 'A' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
  - 'E' is from 'pkg/front_end/testcases/enhanced_enums/redirecting_to_unrelated_factory.dart'.
diff --git a/pkg/front_end/testcases/expression/beyond_dart_semantics_01.expression.yaml.expect b/pkg/front_end/testcases/expression/beyond_dart_semantics_01.expression.yaml.expect
index 6e8784a..0d24593 100644
--- a/pkg/front_end/testcases/expression/beyond_dart_semantics_01.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/beyond_dart_semantics_01.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_GrowableList<#lib1::A> list) → dynamic
-  return list.{dart.core::_GrowableList::first}{#lib1::A}{dynamic}.value;
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::List<#lib1::A> list) → dynamic
+  return list.{dart.core::Iterable::first}{#lib1::A}{dynamic}.value;
diff --git a/pkg/front_end/testcases/expression/beyond_dart_semantics_02.expression.yaml.expect b/pkg/front_end/testcases/expression/beyond_dart_semantics_02.expression.yaml.expect
index f894a0f..97a27c3 100644
--- a/pkg/front_end/testcases/expression/beyond_dart_semantics_02.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/beyond_dart_semantics_02.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_GrowableList<#lib1::A> list) → dynamic
-  return list.{dart.core::_GrowableList::first}{#lib1::A}{dynamic}._value;
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::List<#lib1::A> list) → dynamic
+  return list.{dart.core::Iterable::first}{#lib1::A}{dynamic}._value;
diff --git a/pkg/front_end/testcases/expression/evaluate_const_local_01.expression.yaml.expect b/pkg/front_end/testcases/expression/evaluate_const_local_01.expression.yaml.expect
index 8dd960d..53b1ce1 100644
--- a/pkg/front_end/testcases/expression/evaluate_const_local_01.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/evaluate_const_local_01.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_OneByteString foo, dart.core::_GrowableList<dart.core::String> list) → dynamic
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::String foo, dart.core::List<dart.core::String> list) → dynamic
   return foo;
diff --git a/pkg/front_end/testcases/expression/evaluate_const_local_02.expression.yaml.expect b/pkg/front_end/testcases/expression/evaluate_const_local_02.expression.yaml.expect
index 2fc2a9a..372b823 100644
--- a/pkg/front_end/testcases/expression/evaluate_const_local_02.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/evaluate_const_local_02.expression.yaml.expect
@@ -1,6 +1,6 @@
 Errors: {
 }
-static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_GrowableList<dart.core::String> list, dart.core::_OneByteString input) → dynamic
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::List<dart.core::String> list, dart.core::String input) → dynamic
   return #C1;
 constants  {
   #C1 = "hello from foo"
diff --git a/pkg/front_end/testcases/expression/extension_type_with_type_parameter.expression.yaml b/pkg/front_end/testcases/expression/extension_type_with_type_parameter.expression.yaml
new file mode 100644
index 0000000..64636d3
--- /dev/null
+++ b/pkg/front_end/testcases/expression/extension_type_with_type_parameter.expression.yaml
@@ -0,0 +1,43 @@
+# Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Definition, offset, method etc extracted by starting the VM with
+# `-DDFE_VERBOSE=true`, e.g.
+# ```
+# out/ReleaseX64/dart -DDFE_VERBOSE=true --enable-vm-service inputFile.dart
+# ```
+# and then issuing the expression compilation.
+#
+# Inside an extension type with type parameters - shouldn't crash on
+# serialization.
+
+sources:
+  main.dart: |
+    import "dart:developer";
+
+    extension type Foo<T extends Enum>(int foo) {
+      void bar(T constant) {
+        debugger();
+        print(constant.index);
+      }
+    }
+
+    enum Bar { bar, baz }
+
+    void main() {
+      var x = Foo<Bar>(0);
+      x.bar(Bar.bar);
+    }
+
+definitions: ["#this", "constant"]
+definition_types: ["dart:core", "_Smi", "1", "0", "file:///usr/local/google/home/jensj/code/dart-sdk/sdk/t.dart", "Bar", "1", "0"]
+type_definitions: ["T"]
+type_bounds: ["dart:core", "Enum", "1", "0"]
+type_defaults: ["dart:core", "Enum", "1", "0"]
+method: "Foo.bar"
+static: true
+offset: 105
+scriptUri: main.dart
+expression: |
+ constant.index
diff --git a/pkg/front_end/testcases/expression/extension_type_with_type_parameter.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_type_with_type_parameter.expression.yaml.expect
new file mode 100644
index 0000000..2ec96a3
--- /dev/null
+++ b/pkg/front_end/testcases/expression/extension_type_with_type_parameter.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<T extends dart.core::Enum>(lowered #lib1::Foo<#lib2::debugExpr::T>% /* erasure=dart.core::int, declared=! */ #this, #lib2::debugExpr::T constant) → dynamic
+  return constant.{dart.core::Enum::index}{dart.core::int};
diff --git a/pkg/front_end/testcases/expression/extension_with_inner_function_declaration.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_with_inner_function_declaration.expression.yaml.expect
index 2ac8b7f..90ad65a 100644
--- a/pkg/front_end/testcases/expression/extension_with_inner_function_declaration.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/extension_with_inner_function_declaration.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::_Smi #this) → dynamic
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::int #this) → dynamic
   return #this;
diff --git a/pkg/front_end/testcases/expression/extension_with_inner_function_declaration_vm_sending_in_weird_order.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_with_inner_function_declaration_vm_sending_in_weird_order.expression.yaml.expect
index cdb0642..bbd3d2d2 100644
--- a/pkg/front_end/testcases/expression/extension_with_inner_function_declaration_vm_sending_in_weird_order.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/extension_with_inner_function_declaration_vm_sending_in_weird_order.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_Smi offset, lowered dart.core::_OneByteString #this) → dynamic
-  return offset.{dart.core::_IntegerImplementation::+}(#this.{dart.core::_StringBase::length}{dart.core::int}){(dart.core::num) → dart.core::num};
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::int offset, lowered dart.core::String #this) → dynamic
+  return offset.{dart.core::num::+}(#this.{dart.core::String::length}{dart.core::int}){(dart.core::num) → dart.core::int};
diff --git a/pkg/front_end/testcases/expression/extension_with_inner_function_expression.expression.yaml.expect b/pkg/front_end/testcases/expression/extension_with_inner_function_expression.expression.yaml.expect
index 2ac8b7f..90ad65a 100644
--- a/pkg/front_end/testcases/expression/extension_with_inner_function_expression.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/extension_with_inner_function_expression.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::_Smi #this) → dynamic
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::int #this) → dynamic
   return #this;
diff --git a/pkg/front_end/testcases/expression/issue_56911_03.expression.yaml b/pkg/front_end/testcases/expression/issue_56911_03.expression.yaml
new file mode 100644
index 0000000..81893f1
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_56911_03.expression.yaml
@@ -0,0 +1,35 @@
+# Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# https://github.com/dart-lang/sdk/issues/56911
+
+sources: |
+  void main() {
+    List<ExtensionType> list = [new ExtensionType(0)];
+    list.forEach((ExtensionType input) {
+      print(input.value);
+    });
+  }
+
+  extension type ExtensionType._(String s) {
+    ExtensionType(int i) : this._("$i");
+    int get value => s.codeUnitAt(0);
+  }
+
+definitions: ["#this"]
+# String
+definition_types: ["dart:core", "_OneByteString", "1", "0"]
+type_definitions: []
+type_bounds: []
+type_defaults: []
+method: "ExtensionType.value"
+static: true
+offset: 231 # at the 'value' of 'int get value => s.codeUnitAt(0);' line.
+scriptUri: main.dart
+expression: |
+  () {
+    s;
+    s.codeUnitAt(0);
+    value;
+  }()
diff --git a/pkg/front_end/testcases/expression/issue_56911_03.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_56911_03.expression.yaml.expect
new file mode 100644
index 0000000..4aaaffe
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_56911_03.expression.yaml.expect
@@ -0,0 +1,8 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered #lib1::ExtensionType% /* erasure=dart.core::String, declared=! */ #this) → dynamic
+  return (() → Null {
+    #this as{Unchecked} dart.core::String;
+    (#this as{Unchecked} dart.core::String).{dart.core::String::codeUnitAt}(0){(dart.core::int) → dart.core::int};
+    #lib1::ExtensionType|get#value(#this);
+  })(){() → Null};
diff --git a/pkg/front_end/testcases/expression/issue_56911_04.expression.yaml b/pkg/front_end/testcases/expression/issue_56911_04.expression.yaml
new file mode 100644
index 0000000..621f37f
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_56911_04.expression.yaml
@@ -0,0 +1,34 @@
+# Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# https://github.com/dart-lang/sdk/issues/56911
+
+sources: |
+  void main() {
+    List<ExtensionType> list = [new ExtensionType("0")];
+    list.forEach((ExtensionType input) {
+      print(input.value);
+    });
+  }
+
+  extension type ExtensionType<E extends String>(E e) {
+    int get value => e.codeUnitAt(0);
+  }
+
+definitions: ["#this"]
+# String
+definition_types: ["dart:core", "_OneByteString", "1", "0"]
+type_definitions: ["E"]
+type_bounds: ["dart:core", "String", "1", "0"]
+type_defaults: ["dart:core", "String", "1", "0"]
+method: "ExtensionType.value"
+static: true
+offset: 205 # at the 'value' of 'int get value => s.codeUnitAt(0);' line.
+scriptUri: main.dart
+expression: |
+  () {
+    s;
+    s.codeUnitAt(0);
+    value;
+  }()
diff --git a/pkg/front_end/testcases/expression/issue_56911_04.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_56911_04.expression.yaml.expect
new file mode 100644
index 0000000..14b3383
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_56911_04.expression.yaml.expect
@@ -0,0 +1,8 @@
+Errors: {
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(lowered #lib1::ExtensionType<#lib2::debugExpr::E>% /* erasure=#lib2::debugExpr::E, declared=! */ #this) → dynamic
+  return (() → Null {
+    #this{dynamic}.s;
+    #this{dynamic}.s{dynamic}.codeUnitAt(0);
+    #lib1::ExtensionType|get#value<#lib2::debugExpr::E>(#this);
+  })(){() → Null};
diff --git a/pkg/front_end/testcases/expression/issue_57040_01.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_57040_01.expression.yaml.expect
index 47f872f..7e73be7 100644
--- a/pkg/front_end/testcases/expression/issue_57040_01.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/issue_57040_01.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::_OneByteString str) → dynamic
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::String str) → dynamic
   return #lib1::_extension#0|get#isNullOrEmpty(str);
diff --git a/pkg/front_end/testcases/expression/issue_61294_01.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_61294_01.expression.yaml.expect
index 2cd9499..d8cc403 100644
--- a/pkg/front_end/testcases/expression/issue_61294_01.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/issue_61294_01.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::_OneByteString #this, dart.core::_OneByteString str) → dynamic
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::String #this, dart.core::String str) → dynamic
   return str;
diff --git a/pkg/front_end/testcases/expression/issue_61294_02.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_61294_02.expression.yaml.expect
index 2cd9499..d8cc403 100644
--- a/pkg/front_end/testcases/expression/issue_61294_02.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/issue_61294_02.expression.yaml.expect
@@ -1,4 +1,4 @@
 Errors: {
 }
-method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::_OneByteString #this, dart.core::_OneByteString str) → dynamic
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(lowered dart.core::String #this, dart.core::String str) → dynamic
   return str;
diff --git a/pkg/front_end/testcases/expression/issue_61894.expression.yaml b/pkg/front_end/testcases/expression/issue_61894.expression.yaml
new file mode 100644
index 0000000..aa999a2
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_61894.expression.yaml
@@ -0,0 +1,31 @@
+# Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# https://github.com/dart-lang/sdk/issues/61894
+
+sources:
+  main.dart: |
+    import "dart:developer";
+
+    void main() {
+      foo(0);
+    }
+
+    void foo(int a) {
+      if (a > 2) return;
+      debugger();
+      foo(a + 1);
+    }
+
+definitions: ["a"]
+definition_types: ["dart:core", "_Smi", "1", "0"]
+type_definitions: []
+type_bounds: []
+type_defaults: []
+method: "foo"
+static: true
+offset: 102
+scriptUri: main.dart
+expression: |
+  foo(a + 1)
diff --git a/pkg/front_end/testcases/expression/issue_61894.expression.yaml.expect b/pkg/front_end/testcases/expression/issue_61894.expression.yaml.expect
new file mode 100644
index 0000000..f8da500
--- /dev/null
+++ b/pkg/front_end/testcases/expression/issue_61894.expression.yaml.expect
@@ -0,0 +1,4 @@
+Errors: {
+}
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr(dart.core::int a) → dynamic
+  return #lib1::foo(a.{dart.core::num::+}(1){(dart.core::num) → dart.core::int});
diff --git a/pkg/front_end/testcases/expression/list_type_arguments_1.expression.yaml b/pkg/front_end/testcases/expression/list_type_arguments_1.expression.yaml
new file mode 100644
index 0000000..db552a4
--- /dev/null
+++ b/pkg/front_end/testcases/expression/list_type_arguments_1.expression.yaml
@@ -0,0 +1,46 @@
+# Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Copy of (parts of) pkg/vm_service/test/evaluate_type_arguments_test.dart.
+
+sources:
+  main.dart: |
+    import "dart:developer";
+
+    void testFunction2<E extends String>(List<E> x) {
+      debugger();
+      print('x = $x');
+      () {
+        List<E> y = List<E>.from(["hello"]);
+        x.addAll(y);
+        return x.last;
+      }();
+      print('x = $x');
+      () {
+        List<E> y = [];
+        y.addAll(x);
+        return y.last;
+      }();
+      print('x = $x');
+    }
+
+    void main() {
+      testFunction2<String>(<String>['a', 'b', 'c']);
+    }
+
+definitions: ["x"]
+definition_types: ["dart:core", "_GrowableList", "1", "1", "dart:core", "String", "1", "0"]
+type_definitions: ["E"]
+type_bounds: ["dart:core", "String", "1", "0"]
+type_defaults: ["dart:core", "String", "1", "0"]
+method: "testFunction2"
+static: true
+offset: 78
+scriptUri: main.dart
+expression: |
+  () {
+    List<E> y = List<E>.from(["hello"]);
+    x.addAll(y);
+    return x.last;
+  }()
\ No newline at end of file
diff --git a/pkg/front_end/testcases/expression/list_type_arguments_1.expression.yaml.expect b/pkg/front_end/testcases/expression/list_type_arguments_1.expression.yaml.expect
new file mode 100644
index 0000000..b18cb4d
--- /dev/null
+++ b/pkg/front_end/testcases/expression/list_type_arguments_1.expression.yaml.expect
@@ -0,0 +1,8 @@
+Errors: {
+}
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(dart.core::List<#lib1::debugExpr::E> x) → dynamic
+  return (() → #lib1::debugExpr::E {
+    dart.core::List<#lib1::debugExpr::E> y = dart.core::List::from<#lib1::debugExpr::E>(dart.core::_GrowableList::_literal1<dynamic>("hello"));
+    x.{dart.core::List::addAll}(y){(dart.core::Iterable<#lib1::debugExpr::E>) → void};
+    return x.{dart.core::Iterable::last}{#lib1::debugExpr::E};
+  })(){() → #lib1::debugExpr::E};
diff --git a/pkg/front_end/testcases/expression/list_type_arguments_2.expression.yaml b/pkg/front_end/testcases/expression/list_type_arguments_2.expression.yaml
new file mode 100644
index 0000000..477a65d
--- /dev/null
+++ b/pkg/front_end/testcases/expression/list_type_arguments_2.expression.yaml
@@ -0,0 +1,46 @@
+# Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+# Copy of (parts of) pkg/vm_service/test/evaluate_type_arguments_test.dart.
+
+sources:
+  main.dart: |
+    import "dart:developer";
+
+    void testFunction2<E extends String>(List<E> x) {
+      debugger();
+      print('x = $x');
+      () {
+        List<E> y = List<E>.from(["hello"]);
+        x.addAll(y);
+        return x.last;
+      }();
+      print('x = $x');
+      () {
+        List<E> y = [];
+        y.addAll(x);
+        return y.last;
+      }();
+      print('x = $x');
+    }
+
+    void main() {
+      testFunction2<String>(<String>['a', 'b', 'c']);
+    }
+
+definitions: ["x"]
+definition_types: ["dart:core", "_GrowableList", "1", "1", "dart:core", "String", "1", "0"]
+type_definitions: ["E"]
+type_bounds: ["dart:core", "String", "1", "0"]
+type_defaults: ["dart:core", "String", "1", "0"]
+method: "testFunction2"
+static: true
+offset: 78
+scriptUri: main.dart
+expression: |
+  () {
+    List<E> y = [];
+    y.addAll(x);
+    return y.last;
+  }()
\ No newline at end of file
diff --git a/pkg/front_end/testcases/expression/list_type_arguments_2.expression.yaml.expect b/pkg/front_end/testcases/expression/list_type_arguments_2.expression.yaml.expect
new file mode 100644
index 0000000..cb5abf3
--- /dev/null
+++ b/pkg/front_end/testcases/expression/list_type_arguments_2.expression.yaml.expect
@@ -0,0 +1,8 @@
+Errors: {
+}
+static method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr<E extends dart.core::String>(dart.core::List<#lib1::debugExpr::E> x) → dynamic
+  return (() → #lib1::debugExpr::E {
+    dart.core::List<#lib1::debugExpr::E> y = dart.core::_GrowableList::•<#lib1::debugExpr::E>(0);
+    y.{dart.core::List::addAll}(x){(dart.core::Iterable<#lib1::debugExpr::E>) → void};
+    return y.{dart.core::Iterable::last}{#lib1::debugExpr::E};
+  })(){() → #lib1::debugExpr::E};
diff --git a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.expect b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.expect
index e94af0e7..6bddf86 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.expect
@@ -33,7 +33,7 @@
   static redirecting-factory redirect2 = self::Class|constructor#redirect2;
   static redirecting-factory tearoff redirect2 = self::Class|constructor#_#redirect2#tearOff;
 }
-static extension-type-member method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
+static extension-type-member const method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
   lowered final self::Class% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
@@ -45,7 +45,7 @@
 }
 static extension-type-member synthetic method Class|constructor#_#named#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#named(i);
-static extension-type-member method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
+static extension-type-member const method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
   return self::Class|constructor#(i);
 static extension-type-member synthetic method Class|constructor#_#redirect#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#(i);
diff --git a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.modular.expect
index e94af0e7..6bddf86 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.modular.expect
@@ -33,7 +33,7 @@
   static redirecting-factory redirect2 = self::Class|constructor#redirect2;
   static redirecting-factory tearoff redirect2 = self::Class|constructor#_#redirect2#tearOff;
 }
-static extension-type-member method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
+static extension-type-member const method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
   lowered final self::Class% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
@@ -45,7 +45,7 @@
 }
 static extension-type-member synthetic method Class|constructor#_#named#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#named(i);
-static extension-type-member method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
+static extension-type-member const method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
   return self::Class|constructor#(i);
 static extension-type-member synthetic method Class|constructor#_#redirect#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#(i);
diff --git a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.outline.expect
index ec69ccd..e335616 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.outline.expect
@@ -15,7 +15,7 @@
   static redirecting-factory redirect2 = self::Class|constructor#redirect2;
   static redirecting-factory tearoff redirect2 = self::Class|constructor#_#redirect2#tearOff;
 }
-static extension-type-member method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
+static extension-type-member const method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
   lowered final self::Class% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
@@ -25,7 +25,7 @@
   ;
 static extension-type-member synthetic method Class|constructor#_#named#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#named(i);
-static extension-type-member method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
+static extension-type-member const method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
   return self::Class|constructor#(i);
 static extension-type-member synthetic method Class|constructor#_#redirect#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#(i);
diff --git a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.transformed.expect
index e94af0e7..6bddf86 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
   static redirecting-factory redirect2 = self::Class|constructor#redirect2;
   static redirecting-factory tearoff redirect2 = self::Class|constructor#_#redirect2#tearOff;
 }
-static extension-type-member method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
+static extension-type-member const method Class|constructor#(core::int i) → self::Class% /* erasure=core::int, declared=! */ {
   lowered final self::Class% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
@@ -45,7 +45,7 @@
 }
 static extension-type-member synthetic method Class|constructor#_#named#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#named(i);
-static extension-type-member method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
+static extension-type-member const method Class|constructor#redirect(core::int i) → self::Class% /* erasure=core::int, declared=! */ /* redirection-target: self::Class|constructor# */
   return self::Class|constructor#(i);
 static extension-type-member synthetic method Class|constructor#_#redirect#tearOff(core::int i) → self::Class% /* erasure=core::int, declared=! */
   return self::Class|constructor#(i);
diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect
index e48f17f..b160262 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.expect
@@ -91,7 +91,7 @@
 }
 static extension-type-member synthetic method ExtensionType1|constructor#_#new#tearOff(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */
   return self::ExtensionType1|constructor#(i);
-static extension-type-member method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType2% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect
index e48f17f..b160262 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.modular.expect
@@ -91,7 +91,7 @@
 }
 static extension-type-member synthetic method ExtensionType1|constructor#_#new#tearOff(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */
   return self::ExtensionType1|constructor#(i);
-static extension-type-member method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType2% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect
index 19f3ac4..bb3fea9 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.outline.expect
@@ -83,7 +83,7 @@
   ;
 static extension-type-member synthetic method ExtensionType1|constructor#_#new#tearOff(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */
   return self::ExtensionType1|constructor#(i);
-static extension-type-member method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType2% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect
index e48f17f..b160262 100644
--- a/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/const_constructor_access.dart.strong.transformed.expect
@@ -91,7 +91,7 @@
 }
 static extension-type-member synthetic method ExtensionType1|constructor#_#new#tearOff(core::int i) → self::ExtensionType1% /* erasure=core::int, declared=! */
   return self::ExtensionType1|constructor#(i);
-static extension-type-member method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType2|constructor#(core::int i) → self::ExtensionType2% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType2% /* erasure=core::int, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.expect b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.expect
index 72f609c..e9d611a 100644
--- a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.expect
@@ -20,7 +20,7 @@
 static const field self::ExtensionType<self::Class<core::int>>% /* erasure=self::Class<core::int>, declared=! */ b2 = #C3;
 static const field self::Class<core::bool> b3 = #C4;
 static const field self::ExtensionType<self::Class<core::bool>>% /* erasure=self::Class<core::bool>, declared=! */ b4 = #C4;
-static extension-type-member method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
   lowered final self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.modular.expect
index 72f609c..e9d611a 100644
--- a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.modular.expect
@@ -20,7 +20,7 @@
 static const field self::ExtensionType<self::Class<core::int>>% /* erasure=self::Class<core::int>, declared=! */ b2 = #C3;
 static const field self::Class<core::bool> b3 = #C4;
 static const field self::ExtensionType<self::Class<core::bool>>% /* erasure=self::Class<core::bool>, declared=! */ b4 = #C4;
-static extension-type-member method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
   lowered final self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.outline.expect
index f2d2ac5..16040fa 100644
--- a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.outline.expect
@@ -20,7 +20,7 @@
 static const field self::ExtensionType<self::Class<core::int>>% /* erasure=self::Class<core::int>, declared=! */ b2 = const self::ExtensionType|constructor#<self::Class<core::int>>(const self::Class::•<core::int>());
 static const field self::Class<core::bool> b3 = const self::Class::•<core::bool>();
 static const field self::ExtensionType<self::Class<core::bool>>% /* erasure=self::Class<core::bool>, declared=! */ b4 = const self::ExtensionType|constructor#<self::Class<core::bool>>(const self::Class::•<core::bool>());
-static extension-type-member method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
   lowered final self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.transformed.expect
index 01745b0..62b5084 100644
--- a/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/const_extension_type.dart.strong.transformed.expect
@@ -20,7 +20,7 @@
 static const field self::ExtensionType<self::Class<core::int>>% /* erasure=self::Class<core::int>, declared=! */ b2 = #C3;
 static const field self::Class<core::bool> b3 = #C4;
 static const field self::ExtensionType<self::Class<core::bool>>% /* erasure=self::Class<core::bool>, declared=! */ b4 = #C4;
-static extension-type-member method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtensionType|constructor#<T extends core::Object? = dynamic>(self::ExtensionType|constructor#::T% id) → self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ {
   lowered final self::ExtensionType<self::ExtensionType|constructor#::T%>% /* erasure=self::ExtensionType|constructor#::T%, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.expect b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.expect
index 944cf12..5ce4882 100644
--- a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.expect
@@ -149,7 +149,7 @@
   return self::ET2|constructor#(id);
 static extension-type-member method ET2|n() → core::int
   return 2;
-static extension-type-member method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
   lowered final self::ET2% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.modular.expect
index 944cf12..5ce4882 100644
--- a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.modular.expect
@@ -149,7 +149,7 @@
   return self::ET2|constructor#(id);
 static extension-type-member method ET2|n() → core::int
   return 2;
-static extension-type-member method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
   lowered final self::ET2% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.outline.expect
index 6e8d437..aaa521e 100644
--- a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.outline.expect
@@ -140,7 +140,7 @@
   return self::ET2|constructor#(id);
 static extension-type-member method ET2|n() → core::int
   ;
-static extension-type-member method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
   lowered final self::ET2% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.transformed.expect
index 944cf12..5ce4882 100644
--- a/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/constructor_vs_static_member.dart.strong.transformed.expect
@@ -149,7 +149,7 @@
   return self::ET2|constructor#(id);
 static extension-type-member method ET2|n() → core::int
   return 2;
-static extension-type-member method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET2|constructor#n(core::int id) → self::ET2% /* erasure=core::int, declared=! */ {
   lowered final self::ET2% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
index 73a0ebd..b15b2c6 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.expect
@@ -89,13 +89,13 @@
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#new#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#(it);
-static extension-type-member method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#constructor#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#constructor(it);
-static extension-type-member method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this;
   #this = self::ExtensionType4|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.modular.expect
index 73a0ebd..b15b2c6 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.modular.expect
@@ -89,13 +89,13 @@
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#new#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#(it);
-static extension-type-member method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#constructor#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#constructor(it);
-static extension-type-member method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this;
   #this = self::ExtensionType4|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.outline.expect
index 56dfb4e..33de624 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.outline.expect
@@ -81,13 +81,13 @@
   ;
 static extension-type-member synthetic method ExtensionType4|constructor#_#new#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#(it);
-static extension-type-member method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#constructor#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#constructor(it);
-static extension-type-member method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this;
   #this = self::ExtensionType4|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
index 73a0ebd..b15b2c6 100644
--- a/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/extension_type_declarations.dart.strong.transformed.expect
@@ -89,13 +89,13 @@
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#new#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#(it);
-static extension-type-member method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#constructor(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method ExtensionType4|constructor#_#constructor#tearOff(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */
   return self::ExtensionType4|constructor#constructor(it);
-static extension-type-member method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ExtensionType4|constructor#redirect(core::int it) → self::ExtensionType4% /* erasure=core::int, declared=! */ {
   lowered final self::ExtensionType4% /* erasure=core::int, declared=! */ #this;
   #this = self::ExtensionType4|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
index 5b96e87..a8a6074 100644
--- a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.expect
@@ -47,7 +47,7 @@
 }
 static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ {
   lowered final self::ET1% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
 extension type ET1(int id) {
                        ^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.modular.expect
index 5b96e87..a8a6074 100644
--- a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.modular.expect
@@ -47,7 +47,7 @@
 }
 static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ {
   lowered final self::ET1% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
 extension type ET1(int id) {
                        ^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
index 5b96e87..a8a6074 100644
--- a/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/field_initializer.dart.strong.transformed.expect
@@ -47,7 +47,7 @@
 }
 static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ {
   lowered final self::ET1% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/field_initializer.dart:5:24: Error: Can't use 'id' because it is declared more than once.
 extension type ET1(int id) {
                        ^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.expect b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.expect
index dff7b5d..cccc370 100644
--- a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.expect
@@ -11,13 +11,13 @@
   static redirecting-factory f1 = self::ET3|constructor#f1;
   static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
 }
-static extension-type-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
 static extension-type-member synthetic method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T>% /* erasure=core::int, declared=! */
   return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
-static extension-type-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ #this;
   #this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.modular.expect
index dff7b5d..cccc370 100644
--- a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.modular.expect
@@ -11,13 +11,13 @@
   static redirecting-factory f1 = self::ET3|constructor#f1;
   static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
 }
-static extension-type-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
 static extension-type-member synthetic method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T>% /* erasure=core::int, declared=! */
   return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
-static extension-type-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ #this;
   #this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.outline.expect
index dff7b5d..cccc370 100644
--- a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.outline.expect
@@ -11,13 +11,13 @@
   static redirecting-factory f1 = self::ET3|constructor#f1;
   static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
 }
-static extension-type-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
 static extension-type-member synthetic method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T>% /* erasure=core::int, declared=! */
   return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
-static extension-type-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ #this;
   #this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.transformed.expect
index dff7b5d..cccc370 100644
--- a/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/generic_factory.dart.strong.transformed.expect
@@ -11,13 +11,13 @@
   static redirecting-factory f1 = self::ET3|constructor#f1;
   static redirecting-factory tearoff f1 = self::ET3|constructor#_#f1#tearOff;
 }
-static extension-type-member method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#::T>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
 static extension-type-member synthetic method ET3|constructor#_#new#tearOff<T extends core::num>(core::int id) → self::ET3<self::ET3|constructor#_#new#tearOff::T>% /* erasure=core::int, declared=! */
   return self::ET3|constructor#<self::ET3|constructor#_#new#tearOff::T>(id);
-static extension-type-member method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method ET3|constructor#c1<T extends core::num>() → self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ {
   lowered final self::ET3<self::ET3|constructor#c1::T>% /* erasure=core::int, declared=! */ #this;
   #this = self::ET3|constructor#<self::ET3|constructor#c1::T>(0);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/initializers.dart.strong.expect b/pkg/front_end/testcases/extension_types/initializers.dart.strong.expect
index 40efab7..f16725e 100644
--- a/pkg/front_end/testcases/extension_types/initializers.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/initializers.dart.strong.expect
@@ -95,7 +95,7 @@
   return self::Class4|constructor#_(field);
 static extension-type-member method Class4|constructor#(core::int field, dynamic nonexisting) → self::Class4% /* erasure=core::int, declared=! */ {
   lowered final self::Class4% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
   Class4(this.field, this.nonexisting); // Error
                           ^^^^^^^^^^^";
   return #this;
@@ -110,7 +110,7 @@
   return self::Class5|constructor#_(field);
 static extension-type-member method Class5|constructor#(core::int field) → self::Class5% /* erasure=core::int, declared=! */ {
   lowered final self::Class5% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
   Class5(this.field) : this.field = 42; // Error
                                   ^";
   return #this;
@@ -125,7 +125,7 @@
   return self::Class6|constructor#_(field);
 static extension-type-member method Class6|constructor#(core::int field) → self::Class6% /* erasure=core::int, declared=! */ {
   lowered final self::Class6% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
   Class6(this.field) : this.nonexisting = 42; // Error
                             ^^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/initializers.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/initializers.dart.strong.modular.expect
index 40efab7..f16725e 100644
--- a/pkg/front_end/testcases/extension_types/initializers.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/initializers.dart.strong.modular.expect
@@ -95,7 +95,7 @@
   return self::Class4|constructor#_(field);
 static extension-type-member method Class4|constructor#(core::int field, dynamic nonexisting) → self::Class4% /* erasure=core::int, declared=! */ {
   lowered final self::Class4% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
   Class4(this.field, this.nonexisting); // Error
                           ^^^^^^^^^^^";
   return #this;
@@ -110,7 +110,7 @@
   return self::Class5|constructor#_(field);
 static extension-type-member method Class5|constructor#(core::int field) → self::Class5% /* erasure=core::int, declared=! */ {
   lowered final self::Class5% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
   Class5(this.field) : this.field = 42; // Error
                                   ^";
   return #this;
@@ -125,7 +125,7 @@
   return self::Class6|constructor#_(field);
 static extension-type-member method Class6|constructor#(core::int field) → self::Class6% /* erasure=core::int, declared=! */ {
   lowered final self::Class6% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
   Class6(this.field) : this.nonexisting = 42; // Error
                             ^^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/initializers.dart.strong.transformed.expect
index 40efab7..f16725e 100644
--- a/pkg/front_end/testcases/extension_types/initializers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/initializers.dart.strong.transformed.expect
@@ -95,7 +95,7 @@
   return self::Class4|constructor#_(field);
 static extension-type-member method Class4|constructor#(core::int field, dynamic nonexisting) → self::Class4% /* erasure=core::int, declared=! */ {
   lowered final self::Class4% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
+  invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:16:27: Error: 'nonexisting' isn't an instance field of this class.
   Class4(this.field, this.nonexisting); // Error
                           ^^^^^^^^^^^";
   return #this;
@@ -110,7 +110,7 @@
   return self::Class5|constructor#_(field);
 static extension-type-member method Class5|constructor#(core::int field) → self::Class5% /* erasure=core::int, declared=! */ {
   lowered final self::Class5% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
+  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:20:35: Error: 'field' was already initialized by this constructor.
   Class5(this.field) : this.field = 42; // Error
                                   ^";
   return #this;
@@ -125,7 +125,7 @@
   return self::Class6|constructor#_(field);
 static extension-type-member method Class6|constructor#(core::int field) → self::Class6% /* erasure=core::int, declared=! */ {
   lowered final self::Class6% /* erasure=core::int, declared=! */ #this = field;
-  final dynamic #t3 = invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
+  invalid-expression "pkg/front_end/testcases/extension_types/initializers.dart:24:29: Error: 'nonexisting' isn't an instance field of this class.
   Class6(this.field) : this.nonexisting = 42; // Error
                             ^^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect
index 57b44f7..d619b27 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.expect
@@ -84,7 +84,7 @@
   return self::Foo|constructor#named(value, subtract: subtract);
 static extension-type-member erroneous method Foo|constructor#erroneous() → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  invalid-expression "pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
   Foo.erroneous() : this.unresolved(); // Error
                          ^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.modular.expect
index 57b44f7..d619b27 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.modular.expect
@@ -84,7 +84,7 @@
   return self::Foo|constructor#named(value, subtract: subtract);
 static extension-type-member erroneous method Foo|constructor#erroneous() → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  invalid-expression "pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
   Foo.erroneous() : this.unresolved(); // Error
                          ^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect
index 57b44f7..d619b27 100644
--- a/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue52119.dart.strong.transformed.expect
@@ -84,7 +84,7 @@
   return self::Foo|constructor#named(value, subtract: subtract);
 static extension-type-member erroneous method Foo|constructor#erroneous() → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
+  invalid-expression "pkg/front_end/testcases/extension_types/issue52119.dart:12:26: Error: Couldn't find constructor 'Foo.unresolved'.
   Foo.erroneous() : this.unresolved(); // Error
                          ^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.expect
index f1fa721..1afb9ed 100644
--- a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.expect
@@ -15,7 +15,7 @@
   constructor tearoff • = self::Option|constructor#_#new#tearOff;
 }
 static const field self::Option<Never>% /* erasure=core::Object?, declared=! */ Option|none = #C1;
-static extension-type-member method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ #this = _value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.modular.expect
index f1fa721..1afb9ed 100644
--- a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.modular.expect
@@ -15,7 +15,7 @@
   constructor tearoff • = self::Option|constructor#_#new#tearOff;
 }
 static const field self::Option<Never>% /* erasure=core::Object?, declared=! */ Option|none = #C1;
-static extension-type-member method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ #this = _value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.outline.expect
index d6f409d..c4a99bf 100644
--- a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.outline.expect
@@ -15,7 +15,7 @@
   constructor tearoff • = self::Option|constructor#_#new#tearOff;
 }
 static const field self::Option<Never>% /* erasure=core::Object?, declared=! */ Option|none = const self::None::•() as self::Option<Never>% /* erasure=core::Object?, declared=! */;
-static extension-type-member method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ #this = _value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.transformed.expect
index f1fa721..1afb9ed 100644
--- a/pkg/front_end/testcases/extension_types/issue52542.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue52542.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
   constructor tearoff • = self::Option|constructor#_#new#tearOff;
 }
 static const field self::Option<Never>% /* erasure=core::Object?, declared=! */ Option|none = #C1;
-static extension-type-member method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Option|constructor#<V extends core::Object? = dynamic>(core::Object? _value) → self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::Option<self::Option|constructor#::V%>% /* erasure=core::Object?, declared=! */ #this = _value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.expect
index 765efa7..a29b8ff 100644
--- a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::V|constructor#_#new#tearOff;
 }
 static const field self::V<core::int>% /* erasure=core::int, declared=! */ c = #C1;
-static extension-type-member method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
   lowered final self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.modular.expect
index 765efa7..a29b8ff 100644
--- a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.modular.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::V|constructor#_#new#tearOff;
 }
 static const field self::V<core::int>% /* erasure=core::int, declared=! */ c = #C1;
-static extension-type-member method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
   lowered final self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.outline.expect
index 401d1dd..83b2941 100644
--- a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.outline.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::V|constructor#_#new#tearOff;
 }
 static const field self::V<core::int>% /* erasure=core::int, declared=! */ c = const self::V|constructor#<core::int>(0);
-static extension-type-member method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
   lowered final self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.transformed.expect
index 765efa7..a29b8ff 100644
--- a/pkg/front_end/testcases/extension_types/issue52595.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue52595.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::V|constructor#_#new#tearOff;
 }
 static const field self::V<core::int>% /* erasure=core::int, declared=! */ c = #C1;
-static extension-type-member method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
+static extension-type-member const method V|constructor#<T extends core::Object? = dynamic>(core::int id) → self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ {
   lowered final self::V<self::V|constructor#::T%>% /* erasure=core::int, declared=! */ #this = id;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.expect
index df72489..875de16 100644
--- a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.expect
@@ -6,7 +6,7 @@
   constructor • = self::N|constructor#;
   constructor tearoff • = self::N|constructor#_#new#tearOff;
 }
-static extension-type-member method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
+static extension-type-member const method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
   lowered final self::N% /* erasure=Null, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.modular.expect
index df72489..875de16 100644
--- a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.modular.expect
@@ -6,7 +6,7 @@
   constructor • = self::N|constructor#;
   constructor tearoff • = self::N|constructor#_#new#tearOff;
 }
-static extension-type-member method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
+static extension-type-member const method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
   lowered final self::N% /* erasure=Null, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.outline.expect
index 868d3e8..e47721f 100644
--- a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.outline.expect
@@ -6,7 +6,7 @@
   constructor • = self::N|constructor#;
   constructor tearoff • = self::N|constructor#_#new#tearOff;
 }
-static extension-type-member method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
+static extension-type-member const method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
   lowered final self::N% /* erasure=Null, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.transformed.expect
index 31f21fe..358d254 100644
--- a/pkg/front_end/testcases/extension_types/issue53610.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53610.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   constructor • = self::N|constructor#;
   constructor tearoff • = self::N|constructor#_#new#tearOff;
 }
-static extension-type-member method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
+static extension-type-member const method N|constructor#(Null _) → self::N% /* erasure=Null, declared=! */ {
   lowered final self::N% /* erasure=Null, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.expect
index 2d4791f..2887fb2 100644
--- a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
 static const field self::E% /* erasure=core::int?, declared=! */ e = #C1;
-static extension-type-member method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this = n;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.modular.expect
index 2d4791f..2887fb2 100644
--- a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.modular.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
 static const field self::E% /* erasure=core::int?, declared=! */ e = #C1;
-static extension-type-member method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this = n;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.outline.expect
index 065389c..0750308 100644
--- a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.outline.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
 static const field self::E% /* erasure=core::int?, declared=! */ e = null as self::E% /* erasure=core::int?, declared=! */;
-static extension-type-member method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this = n;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.transformed.expect
index 2d4791f..2887fb2 100644
--- a/pkg/front_end/testcases/extension_types/issue53751.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53751.dart.strong.transformed.expect
@@ -8,7 +8,7 @@
   constructor tearoff • = self::E|constructor#_#new#tearOff;
 }
 static const field self::E% /* erasure=core::int?, declared=! */ e = #C1;
-static extension-type-member method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method E|constructor#(core::int? n) → self::E% /* erasure=core::int?, declared=! */ {
   lowered final self::E% /* erasure=core::int?, declared=! */ #this = n;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.expect
index 9ead275..776a834 100644
--- a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.expect
@@ -15,20 +15,20 @@
   constructor • = self::TypeOf|constructor#;
   constructor tearoff • = self::TypeOf|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ #this = o;
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#_#new#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#<self::E|constructor#_#new#tearOff::T%>(o);
-static extension-type-member method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ #this;
   #this = self::E|constructor#<self::E|constructor#cast::T%>(v as self::E|constructor#cast::T%);
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#cast#tearOff<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#_#cast#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#cast<self::E|constructor#_#cast#tearOff::T%>(v);
-static extension-type-member method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
+static extension-type-member const method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
   lowered final self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.modular.expect
index 9ead275..776a834 100644
--- a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.modular.expect
@@ -15,20 +15,20 @@
   constructor • = self::TypeOf|constructor#;
   constructor tearoff • = self::TypeOf|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ #this = o;
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#_#new#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#<self::E|constructor#_#new#tearOff::T%>(o);
-static extension-type-member method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ #this;
   #this = self::E|constructor#<self::E|constructor#cast::T%>(v as self::E|constructor#cast::T%);
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#cast#tearOff<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#_#cast#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#cast<self::E|constructor#_#cast#tearOff::T%>(v);
-static extension-type-member method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
+static extension-type-member const method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
   lowered final self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.outline.expect
index b0bbfbf..24eb076 100644
--- a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.outline.expect
@@ -15,20 +15,20 @@
   constructor • = self::TypeOf|constructor#;
   constructor tearoff • = self::TypeOf|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ #this = o;
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#_#new#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#<self::E|constructor#_#new#tearOff::T%>(o);
-static extension-type-member method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ #this;
   #this = self::E|constructor#<self::E|constructor#cast::T%>(v as self::E|constructor#cast::T%);
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#cast#tearOff<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#_#cast#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#cast<self::E|constructor#_#cast#tearOff::T%>(v);
-static extension-type-member method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
+static extension-type-member const method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
   lowered final self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.transformed.expect
index 9ead275..776a834 100644
--- a/pkg/front_end/testcases/extension_types/issue53936.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue53936.dart.strong.transformed.expect
@@ -15,20 +15,20 @@
   constructor • = self::TypeOf|constructor#;
   constructor tearoff • = self::TypeOf|constructor#_#new#tearOff;
 }
-static extension-type-member method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#::T%>% /* erasure=core::Object?, declared=! */ #this = o;
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#new#tearOff<T extends core::Object? = dynamic>(core::Object? o) → self::E<self::E|constructor#_#new#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#<self::E|constructor#_#new#tearOff::T%>(o);
-static extension-type-member method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method E|constructor#cast<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ {
   lowered final self::E<self::E|constructor#cast::T%>% /* erasure=core::Object?, declared=! */ #this;
   #this = self::E|constructor#<self::E|constructor#cast::T%>(v as self::E|constructor#cast::T%);
   return #this;
 }
 static extension-type-member synthetic method E|constructor#_#cast#tearOff<T extends core::Object? = dynamic>(core::Object? v) → self::E<self::E|constructor#_#cast#tearOff::T%>% /* erasure=core::Object?, declared=! */
   return self::E|constructor#cast<self::E|constructor#_#cast#tearOff::T%>(v);
-static extension-type-member method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
+static extension-type-member const method TypeOf|constructor#<T extends core::Object? = dynamic>(self::TypeOf|constructor#::T% _) → self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ {
   lowered final self::TypeOf<self::TypeOf|constructor#::T%>% /* erasure=self::TypeOf|constructor#::T%, declared=! */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.expect
index 114d7fd..a369c6c 100644
--- a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.expect
@@ -35,25 +35,25 @@
 static const field #lib1::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = #C1;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = #C3;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = #C1;
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
@@ -163,25 +163,25 @@
 static const field self2::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ libGeneric0 = #C1;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric1 = #C3;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric2 = #C1;
-static extension-type-member method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#new#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#(s);
-static extension-type-member method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#named#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#named(s);
-static extension-type-member method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
   lowered final self2::ExtNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtNullable|constructor#_#new#tearOff(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */
   return self2::ExtNullable|constructor#(s);
-static extension-type-member method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
   lowered final self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.modular.expect
index 01b9559..7b9b4d2 100644
--- a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.modular.expect
@@ -35,25 +35,25 @@
 static const field #lib1::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = #C1;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = #C3;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = #C1;
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.outline.expect
index 4469bbc..a4c1420 100644
--- a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.outline.expect
@@ -36,25 +36,25 @@
 static const field mai::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = const mai::ExtGeneric|constructor#<core::String>("hello");
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = const mai::ExtGeneric|constructor#<core::String?>(null);
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = const mai::ExtGeneric|constructor#<core::String?>("hello");
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
@@ -111,25 +111,25 @@
 static const field mai::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ libGeneric0 = const mai::ExtGeneric|constructor#<core::String>("hello");
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric1 = const mai::ExtGeneric|constructor#<core::String?>(null);
 static const field mai::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric2 = const mai::ExtGeneric|constructor#<core::String?>("hello");
-static extension-type-member method ExtString|constructor#(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
   lowered final mai::ExtString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#new#tearOff(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */
   return mai::ExtString|constructor#(s);
-static extension-type-member method ExtString|constructor#named(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#named(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */ {
   lowered final mai::ExtString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#named#tearOff(core::String s) → mai::ExtString% /* erasure=core::String, declared=! */
   return mai::ExtString|constructor#named(s);
-static extension-type-member method ExtNullable|constructor#(core::String? s) → mai::ExtNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method ExtNullable|constructor#(core::String? s) → mai::ExtNullable% /* erasure=core::String?, declared=! */ {
   lowered final mai::ExtNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtNullable|constructor#_#new#tearOff(core::String? s) → mai::ExtNullable% /* erasure=core::String?, declared=! */
   return mai::ExtNullable|constructor#(s);
-static extension-type-member method ExtGeneric|constructor#<T extends core::Object? = dynamic>(mai::ExtGeneric|constructor#::T% s) → mai::ExtGeneric<mai::ExtGeneric|constructor#::T%>% /* erasure=mai::ExtGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtGeneric|constructor#<T extends core::Object? = dynamic>(mai::ExtGeneric|constructor#::T% s) → mai::ExtGeneric<mai::ExtGeneric|constructor#::T%>% /* erasure=mai::ExtGeneric|constructor#::T%, declared=! */ {
   lowered final mai::ExtGeneric<mai::ExtGeneric|constructor#::T%>% /* erasure=mai::ExtGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.transformed.expect
index 114d7fd..a369c6c 100644
--- a/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54008/main.dart.strong.transformed.expect
@@ -35,25 +35,25 @@
 static const field #lib1::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ valGeneric0 = #C1;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric1 = #C3;
 static const field #lib1::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ valGeneric2 = #C1;
-static extension-type-member method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#new#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#(s);
-static extension-type-member method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method SameString|constructor#named(core::String s) → self::SameString% /* erasure=core::String, declared=! */ {
   lowered final self::SameString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method SameString|constructor#_#named#tearOff(core::String s) → self::SameString% /* erasure=core::String, declared=! */
   return self::SameString|constructor#named(s);
-static extension-type-member method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method SameNullable|constructor#(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */ {
   lowered final self::SameNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method SameNullable|constructor#_#new#tearOff(core::String? s) → self::SameNullable% /* erasure=core::String?, declared=! */
   return self::SameNullable|constructor#(s);
-static extension-type-member method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method SameGeneric|constructor#<T extends core::Object? = dynamic>(self::SameGeneric|constructor#::T% s) → self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ {
   lowered final self::SameGeneric<self::SameGeneric|constructor#::T%>% /* erasure=self::SameGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
@@ -163,25 +163,25 @@
 static const field self2::ExtGeneric<core::String>% /* erasure=core::String, declared=! */ libGeneric0 = #C1;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric1 = #C3;
 static const field self2::ExtGeneric<core::String?>% /* erasure=core::String?, declared=! */ libGeneric2 = #C1;
-static extension-type-member method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#new#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#(s);
-static extension-type-member method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
+static extension-type-member const method ExtString|constructor#named(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */ {
   lowered final self2::ExtString% /* erasure=core::String, declared=! */ #this = "${s} world";
   return #this;
 }
 static extension-type-member synthetic method ExtString|constructor#_#named#tearOff(core::String s) → self2::ExtString% /* erasure=core::String, declared=! */
   return self2::ExtString|constructor#named(s);
-static extension-type-member method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
+static extension-type-member const method ExtNullable|constructor#(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */ {
   lowered final self2::ExtNullable% /* erasure=core::String?, declared=! */ #this = s;
   return #this;
 }
 static extension-type-member synthetic method ExtNullable|constructor#_#new#tearOff(core::String? s) → self2::ExtNullable% /* erasure=core::String?, declared=! */
   return self2::ExtNullable|constructor#(s);
-static extension-type-member method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
+static extension-type-member const method ExtGeneric|constructor#<T extends core::Object? = dynamic>(self2::ExtGeneric|constructor#::T% s) → self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ {
   lowered final self2::ExtGeneric<self2::ExtGeneric|constructor#::T%>% /* erasure=self2::ExtGeneric|constructor#::T%, declared=! */ #this = s;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.expect b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.expect
index 0d2361d..aaf579e 100644
--- a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.expect
@@ -30,7 +30,7 @@
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> m3s4 = #C13;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms43 = #C14;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms3s4 = #C13;
-static extension-type-member method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
+static extension-type-member const method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
   lowered final self::ExInt /* erasure=core::int */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.modular.expect
index 0d2361d..aaf579e 100644
--- a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.modular.expect
@@ -30,7 +30,7 @@
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> m3s4 = #C13;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms43 = #C14;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms3s4 = #C13;
-static extension-type-member method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
+static extension-type-member const method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
   lowered final self::ExInt /* erasure=core::int */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.outline.expect
index 6cf0803..b82a91a 100644
--- a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.outline.expect
@@ -30,7 +30,7 @@
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> m3s4 = const <self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */>{self::ex3: self::ex3} + self::m4;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms43 = self::m4 + const <self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */>{self::ex3: self::ex3};
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms3s4 = self::m3 + self::m4;
-static extension-type-member method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
+static extension-type-member const method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
   lowered final self::ExInt /* erasure=core::int */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.transformed.expect
index 0d2361d..aaf579e 100644
--- a/pkg/front_end/testcases/extension_types/issue54357.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/issue54357.dart.strong.transformed.expect
@@ -30,7 +30,7 @@
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> m3s4 = #C13;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms43 = #C14;
 static const field core::Map<self::ExInt /* erasure=core::int */, self::ExInt /* erasure=core::int */> ms3s4 = #C13;
-static extension-type-member method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
+static extension-type-member const method ExInt|constructor#(core::int _) → self::ExInt /* erasure=core::int */ {
   lowered final self::ExInt /* erasure=core::int */ #this = _;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
index 23b063f..da2764e 100644
--- a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.expect
@@ -59,7 +59,7 @@
 }
 static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ {
   lowered final self::ET1% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
 extension type ET1(int id) {
                        ^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.modular.expect
index 23b063f..da2764e 100644
--- a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.modular.expect
@@ -59,7 +59,7 @@
 }
 static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ {
   lowered final self::ET1% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
 extension type ET1(int id) {
                        ^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
index 23b063f..da2764e 100644
--- a/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/late_fields.dart.strong.transformed.expect
@@ -59,7 +59,7 @@
 }
 static extension-type-member method ET1|constructor#(core::int id) → self::ET1% /* erasure=core::int, declared=! */ {
   lowered final self::ET1% /* erasure=core::int, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/late_fields.dart:5:24: Error: Can't use 'id' because it is declared more than once.
 extension type ET1(int id) {
                        ^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.expect b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.expect
index f9402aa..9549465 100644
--- a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.expect
@@ -10,7 +10,7 @@
 static const field dynamic a = #C1;
 static const field dynamic b = #C2;
 static const field core::List<core::int?> c = #C3;
-static extension-type-member method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
   lowered final self::ET% /* erasure=core::int?, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.modular.expect
index f9402aa..9549465 100644
--- a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.modular.expect
@@ -10,7 +10,7 @@
 static const field dynamic a = #C1;
 static const field dynamic b = #C2;
 static const field core::List<core::int?> c = #C3;
-static extension-type-member method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
   lowered final self::ET% /* erasure=core::int?, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.outline.expect
index b71470c..3ebc5e5 100644
--- a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.outline.expect
@@ -10,7 +10,7 @@
 static const field dynamic a = const self::ET|constructor#(null);
 static const field dynamic b = const self::ET|constructor#(0);
 static const field core::List<core::int?> c = const <core::int?>[self::a as{TypeError,ForDynamic} core::int?, self::b as{TypeError,ForDynamic} core::int?];
-static extension-type-member method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
   lowered final self::ET% /* erasure=core::int?, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.transformed.expect
index f9402aa..9549465 100644
--- a/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/nullable_constant.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 static const field dynamic a = #C1;
 static const field dynamic b = #C2;
 static const field core::List<core::int?> c = #C3;
-static extension-type-member method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
+static extension-type-member const method ET|constructor#(core::int? i) → self::ET% /* erasure=core::int?, declared=! */ {
   lowered final self::ET% /* erasure=core::int?, declared=! */ #this = i;
   return #this;
 }
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.expect
index d37c8ae..31c448b 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.expect
@@ -7,7 +7,7 @@
   const constructor •(core::int foo) → self::A1
     : self::A1::foo = foo, super core::Object::•()
     ;
-  static factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
+  static const factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
     return self::E1|constructor#redir(it);
 }
 class A2 extends core::Object /*hasConstConstructor*/  {
@@ -15,7 +15,7 @@
   const constructor •(core::int foo) → self::A2
     : self::A2::foo = foo, super core::Object::•()
     ;
-  static factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
+  static const factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
     return self::E2|constructor#pick(b);
 }
 class B2 extends self::A2 /*hasConstConstructor*/  {
@@ -44,13 +44,13 @@
   constructor pick = self::E2|constructor#pick;
   constructor tearoff pick = self::E2|constructor#_#pick#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
   lowered final self::E1 /* erasure=self::A1 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
+static extension-type-member const method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
   return self::E1|constructor#(it);
 static extension-type-member synthetic method E1|constructor#_#redir#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
@@ -58,13 +58,13 @@
   const self::A1 a1 = #C4;
   self::expectIdentical(#C4, #C4);
 }
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2 /* erasure=self::A2 */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this;
   #this = self::E2|constructor#(b ?{self::A2} #C2 : #C3);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.modular.expect
index d37c8ae..31c448b 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.modular.expect
@@ -7,7 +7,7 @@
   const constructor •(core::int foo) → self::A1
     : self::A1::foo = foo, super core::Object::•()
     ;
-  static factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
+  static const factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
     return self::E1|constructor#redir(it);
 }
 class A2 extends core::Object /*hasConstConstructor*/  {
@@ -15,7 +15,7 @@
   const constructor •(core::int foo) → self::A2
     : self::A2::foo = foo, super core::Object::•()
     ;
-  static factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
+  static const factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
     return self::E2|constructor#pick(b);
 }
 class B2 extends self::A2 /*hasConstConstructor*/  {
@@ -44,13 +44,13 @@
   constructor pick = self::E2|constructor#pick;
   constructor tearoff pick = self::E2|constructor#_#pick#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
   lowered final self::E1 /* erasure=self::A1 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
+static extension-type-member const method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
   return self::E1|constructor#(it);
 static extension-type-member synthetic method E1|constructor#_#redir#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
@@ -58,13 +58,13 @@
   const self::A1 a1 = #C4;
   self::expectIdentical(#C4, #C4);
 }
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2 /* erasure=self::A2 */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this;
   #this = self::E2|constructor#(b ?{self::A2} #C2 : #C3);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.outline.expect
index c983bc2..382bb2d 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.outline.expect
@@ -7,7 +7,7 @@
   const constructor •(core::int foo) → self::A1
     : self::A1::foo = foo, super core::Object::•()
     ;
-  static factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
+  static const factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
     return self::E1|constructor#redir(it);
 }
 class A2 extends core::Object /*hasConstConstructor*/  {
@@ -15,7 +15,7 @@
   const constructor •(core::int foo) → self::A2
     : self::A2::foo = foo, super core::Object::•()
     ;
-  static factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
+  static const factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
     return self::E2|constructor#pick(b);
 }
 class B2 extends self::A2 /*hasConstConstructor*/  {
@@ -44,25 +44,25 @@
   constructor pick = self::E2|constructor#pick;
   constructor tearoff pick = self::E2|constructor#_#pick#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
   lowered final self::E1 /* erasure=self::A1 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
+static extension-type-member const method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
   return self::E1|constructor#(it);
 static extension-type-member synthetic method E1|constructor#_#redir#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
 static method test1() → dynamic
   ;
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2 /* erasure=self::A2 */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this;
   #this = self::E2|constructor#(b ?{self::A2} self::B2::element : self::C2::element);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.transformed.expect
index d37c8ae..31c448b 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_class.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   const constructor •(core::int foo) → self::A1
     : self::A1::foo = foo, super core::Object::•()
     ;
-  static factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
+  static const factory redir(self::A1 it) → self::A1 /* redirection-target: self::E1|constructor#redir */
     return self::E1|constructor#redir(it);
 }
 class A2 extends core::Object /*hasConstConstructor*/  {
@@ -15,7 +15,7 @@
   const constructor •(core::int foo) → self::A2
     : self::A2::foo = foo, super core::Object::•()
     ;
-  static factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
+  static const factory redir(core::bool b) → self::A2 /* redirection-target: self::E2|constructor#pick */
     return self::E2|constructor#pick(b);
 }
 class B2 extends self::A2 /*hasConstConstructor*/  {
@@ -44,13 +44,13 @@
   constructor pick = self::E2|constructor#pick;
   constructor tearoff pick = self::E2|constructor#_#pick#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1 /* erasure=self::A1 */ {
   lowered final self::E1 /* erasure=self::A1 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
+static extension-type-member const method E1|constructor#redir(self::A1 it) → self::E1 /* erasure=self::A1 */ /* redirection-target: self::E1|constructor# */
   return self::E1|constructor#(it);
 static extension-type-member synthetic method E1|constructor#_#redir#tearOff(self::A1 it) → self::E1 /* erasure=self::A1 */
   return self::E1|constructor#(it);
@@ -58,13 +58,13 @@
   const self::A1 a1 = #C4;
   self::expectIdentical(#C4, #C4);
 }
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2 /* erasure=self::A2 */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
+static extension-type-member const method E2|constructor#pick(core::bool b) → self::E2 /* erasure=self::A2 */ {
   lowered final self::E2 /* erasure=self::A2 */ #this;
   #this = self::E2|constructor#(b ?{self::A2} #C2 : #C3);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.expect
index 9f61ecf..76c3a84 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.expect
@@ -19,7 +19,7 @@
   const constructor •() → self::A1
     : super core::Object::•()
     ;
-  static factory named(self::A1 it) → self::A1
+  static const factory named(self::A1 it) → self::A1
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:7:35: Error: The constructor function type 'E1 Function(A1)' isn't a subtype of 'A1 Function(A1)'.
  - 'A1' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A1.named(A1 it) = E1.named; // Error.
@@ -33,7 +33,7 @@
     ;
   method core::_enumToString() → core::String
     return "A2.${this.{core::_Enum::_name}{core::String}}";
-  static factory named(self::A2 it) → self::A2
+  static const factory named(self::A2 it) → self::A2
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:17:35: Error: The constructor function type 'E2 Function(A2)' isn't a subtype of 'A2 Function(A2)'.
  - 'A2' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A2.named(A2 it) = E2.named; // Error.
@@ -53,26 +53,26 @@
   constructor named = self::E2|constructor#named;
   constructor tearoff named = self::E2|constructor#_#named#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this;
   #this = self::E1|constructor#(it);
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#named#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#named(it);
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this;
   #this = self::E2|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.modular.expect
index 9f61ecf..76c3a84 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.modular.expect
@@ -19,7 +19,7 @@
   const constructor •() → self::A1
     : super core::Object::•()
     ;
-  static factory named(self::A1 it) → self::A1
+  static const factory named(self::A1 it) → self::A1
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:7:35: Error: The constructor function type 'E1 Function(A1)' isn't a subtype of 'A1 Function(A1)'.
  - 'A1' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A1.named(A1 it) = E1.named; // Error.
@@ -33,7 +33,7 @@
     ;
   method core::_enumToString() → core::String
     return "A2.${this.{core::_Enum::_name}{core::String}}";
-  static factory named(self::A2 it) → self::A2
+  static const factory named(self::A2 it) → self::A2
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:17:35: Error: The constructor function type 'E2 Function(A2)' isn't a subtype of 'A2 Function(A2)'.
  - 'A2' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A2.named(A2 it) = E2.named; // Error.
@@ -53,26 +53,26 @@
   constructor named = self::E2|constructor#named;
   constructor tearoff named = self::E2|constructor#_#named#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this;
   #this = self::E1|constructor#(it);
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#named#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#named(it);
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this;
   #this = self::E2|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.outline.expect
index fbf13a9..34d70cb 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.outline.expect
@@ -19,7 +19,7 @@
   const constructor •() → self::A1
     : super core::Object::•()
     ;
-  static factory named(self::A1 it) → self::A1
+  static const factory named(self::A1 it) → self::A1
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:7:35: Error: The constructor function type 'E1 Function(A1)' isn't a subtype of 'A1 Function(A1)'.
  - 'A1' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A1.named(A1 it) = E1.named; // Error.
@@ -33,7 +33,7 @@
     ;
   method core::_enumToString() → core::String
     return "A2.${this.{core::_Enum::_name}{core::String}}";
-  static factory named(self::A2 it) → self::A2
+  static const factory named(self::A2 it) → self::A2
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:17:35: Error: The constructor function type 'E2 Function(A2)' isn't a subtype of 'A2 Function(A2)'.
  - 'A2' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A2.named(A2 it) = E2.named; // Error.
@@ -53,26 +53,26 @@
   constructor named = self::E2|constructor#named;
   constructor tearoff named = self::E2|constructor#_#named#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this;
   #this = self::E1|constructor#(it);
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#named#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#named(it);
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this;
   #this = self::E2|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.transformed.expect
index 9f61ecf..76c3a84 100644
--- a/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
   const constructor •() → self::A1
     : super core::Object::•()
     ;
-  static factory named(self::A1 it) → self::A1
+  static const factory named(self::A1 it) → self::A1
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:7:35: Error: The constructor function type 'E1 Function(A1)' isn't a subtype of 'A1 Function(A1)'.
  - 'A1' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A1.named(A1 it) = E1.named; // Error.
@@ -33,7 +33,7 @@
     ;
   method core::_enumToString() → core::String
     return "A2.${this.{core::_Enum::_name}{core::String}}";
-  static factory named(self::A2 it) → self::A2
+  static const factory named(self::A2 it) → self::A2
     return invalid-expression "pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart:17:35: Error: The constructor function type 'E2 Function(A2)' isn't a subtype of 'A2 Function(A2)'.
  - 'A2' is from 'pkg/front_end/testcases/extension_types/redirecting_factory_from_enum.dart'.
   const factory A2.named(A2 it) = E2.named; // Error.
@@ -53,26 +53,26 @@
   constructor named = self::E2|constructor#named;
   constructor tearoff named = self::E2|constructor#_#named#tearOff;
 }
-static extension-type-member method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#new#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#(it);
-static extension-type-member method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
+static extension-type-member const method E1|constructor#named(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */ {
   lowered final self::E1% /* erasure=self::A1, declared=! */ #this;
   #this = self::E1|constructor#(it);
   return #this;
 }
 static extension-type-member synthetic method E1|constructor#_#named#tearOff(self::A1 it) → self::E1% /* erasure=self::A1, declared=! */
   return self::E1|constructor#named(it);
-static extension-type-member method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this = it;
   return #this;
 }
 static extension-type-member synthetic method E2|constructor#_#new#tearOff(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */
   return self::E2|constructor#(it);
-static extension-type-member method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
+static extension-type-member const method E2|constructor#named(self::A2 it) → self::E2% /* erasure=self::A2, declared=! */ {
   lowered final self::E2% /* erasure=self::A2, declared=! */ #this;
   #this = self::E2|constructor#(it);
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
index 1d27754..5f1f5b2 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.expect
@@ -60,10 +60,10 @@
   return self::Multiple|constructor#(instanceField1, instanceField2);
 static extension-type-member method Duplicate|constructor#(core::bool instanceField, core::bool instanceField) → self::Duplicate% /* erasure=core::bool, declared=! */ {
   lowered final self::Duplicate% /* erasure=core::bool, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
                               ^^^^^^^^^^^^^";
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
                                                  ^^^^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.modular.expect
index 1d27754..5f1f5b2 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.modular.expect
@@ -60,10 +60,10 @@
   return self::Multiple|constructor#(instanceField1, instanceField2);
 static extension-type-member method Duplicate|constructor#(core::bool instanceField, core::bool instanceField) → self::Duplicate% /* erasure=core::bool, declared=! */ {
   lowered final self::Duplicate% /* erasure=core::bool, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
                               ^^^^^^^^^^^^^";
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
                                                  ^^^^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
index 1d27754..5f1f5b2 100644
--- a/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/representation.dart.strong.transformed.expect
@@ -60,10 +60,10 @@
   return self::Multiple|constructor#(instanceField1, instanceField2);
 static extension-type-member method Duplicate|constructor#(core::bool instanceField, core::bool instanceField) → self::Duplicate% /* erasure=core::bool, declared=! */ {
   lowered final self::Duplicate% /* erasure=core::bool, declared=! */ #this;
-  final dynamic #t1 = invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:31: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
                               ^^^^^^^^^^^^^";
-  final dynamic #t2 = invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
+  invalid-expression "pkg/front_end/testcases/extension_types/representation.dart:9:50: Error: Can't use 'instanceField' because it is declared more than once.
 extension type Duplicate(bool instanceField, int instanceField) {} // Error
                                                  ^^^^^^^^^^^^^";
   return #this;
diff --git a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.outline.expect
index d8650bf..74d4e62 100644
--- a/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/representation_field_error.dart.strong.outline.expect
@@ -251,7 +251,7 @@
   ;
 static extension-type-member synthetic method E11|constructor#_#new#tearOff(core::bool foo) → self::E11% /* erasure=core::bool, declared=! */
   return self::E11|constructor#(foo);
-static extension-type-member method E12|constructor#(has-declared-initializer core::bool foo) → self::E12% /* erasure=core::bool, declared=! */
+static extension-type-member method E12|constructor#(core::bool foo = false) → self::E12% /* erasure=core::bool, declared=! */
   ;
 static extension-type-member synthetic method E12|constructor#_#new#tearOff(has-declared-initializer core::bool foo) → self::E12% /* erasure=core::bool, declared=! */
   return self::E12|constructor#(foo);
diff --git a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.expect b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.expect
index 6197de3..7e79199 100644
--- a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // class A(String foo) {
 //        ^
 //
diff --git a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.modular.expect b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.modular.expect
index d713dae..94008a5 100644
--- a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.modular.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // class A(String foo) {
 //        ^
 //
diff --git a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.outline.expect b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.outline.expect
index 6c74593..3a1b4cd 100644
--- a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.outline.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // class A(String foo) {
 //        ^
 //
diff --git a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.transformed.expect b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.transformed.expect
index 6197de3..7e79199 100644
--- a/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/extension_types/with_dependencies/issue53209_2/main.dart:7:8: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // class A(String foo) {
 //        ^
 //
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.expect
index 6577934..92f3bb6 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.expect
@@ -19,7 +19,7 @@
 @#C2
 @#C3
 class ParallaxOptions extends core::Object {
-  external static factory •() → self::ParallaxOptions;
+  external static const factory •() → self::ParallaxOptions;
   static synthetic method _#new#tearOff() → self::ParallaxOptions
     return self::ParallaxOptions::•();
 }
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.modular.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.modular.expect
index 6577934..92f3bb6 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.modular.expect
@@ -19,7 +19,7 @@
 @#C2
 @#C3
 class ParallaxOptions extends core::Object {
-  external static factory •() → self::ParallaxOptions;
+  external static const factory •() → self::ParallaxOptions;
   static synthetic method _#new#tearOff() → self::ParallaxOptions
     return self::ParallaxOptions::•();
 }
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.outline.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.outline.expect
index 4884e9e..34f1947 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.outline.expect
@@ -9,7 +9,7 @@
 @_js::JS::•()
 @js_::anonymous
 class ParallaxOptions extends core::Object {
-  external static factory •() → self::ParallaxOptions;
+  external static const factory •() → self::ParallaxOptions;
   static synthetic method _#new#tearOff() → self::ParallaxOptions
     return self::ParallaxOptions::•();
 }
diff --git a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.transformed.expect b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.transformed.expect
index 6577934..92f3bb6 100644
--- a/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/js_semantics/issue46123.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
 @#C2
 @#C3
 class ParallaxOptions extends core::Object {
-  external static factory •() → self::ParallaxOptions;
+  external static const factory •() → self::ParallaxOptions;
   static synthetic method _#new#tearOff() → self::ParallaxOptions
     return self::ParallaxOptions::•();
 }
diff --git a/pkg/front_end/testcases/general/constants/various.dart.strong.expect b/pkg/front_end/testcases/general/constants/various.dart.strong.expect
index 358adbe..92343f4 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.strong.expect
@@ -237,7 +237,9 @@
 }
 class ExtendsFoo1 extends self::Foo {
   synthetic constructor •() → self::ExtendsFoo1
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/general/constants/various.dart:124:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+class ExtendsFoo1 extends Foo {
+      ^"
     ;
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/constants/various.dart.strong.modular.expect b/pkg/front_end/testcases/general/constants/various.dart.strong.modular.expect
index 358adbe..92343f4 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.strong.modular.expect
@@ -237,7 +237,9 @@
 }
 class ExtendsFoo1 extends self::Foo {
   synthetic constructor •() → self::ExtendsFoo1
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/general/constants/various.dart:124:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+class ExtendsFoo1 extends Foo {
+      ^"
     ;
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/constants/various.dart.strong.transformed.expect b/pkg/front_end/testcases/general/constants/various.dart.strong.transformed.expect
index d4d8740..0fd28bf 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.strong.transformed.expect
@@ -237,7 +237,9 @@
 }
 class ExtendsFoo1 extends self::Foo {
   synthetic constructor •() → self::ExtendsFoo1
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/general/constants/various.dart:124:7: Error: The superclass, 'Foo', has no unnamed constructor that takes no arguments.
+class ExtendsFoo1 extends Foo {
+      ^"
     ;
 }
 class ExtendsFoo2 extends self::Foo /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.expect b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.expect
index 8dbc6b6..8fb9af9 100644
--- a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.expect
@@ -12,7 +12,7 @@
   const constructor •({required () →? self::C? foo}) → self::B<self::B::X%>
     : self::B::foo = foo, super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = #C1}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = #C1}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
     return new self::A::•<self::B::redir::X%>(foo: foo);
 }
 abstract class M extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.modular.expect b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.modular.expect
index 8dbc6b6..8fb9af9 100644
--- a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.modular.expect
@@ -12,7 +12,7 @@
   const constructor •({required () →? self::C? foo}) → self::B<self::B::X%>
     : self::B::foo = foo, super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = #C1}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = #C1}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
     return new self::A::•<self::B::redir::X%>(foo: foo);
 }
 abstract class M extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.outline.expect b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.outline.expect
index 858f213..0de6a41 100644
--- a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.outline.expect
@@ -11,7 +11,7 @@
   const constructor •({required () →? self::C? foo}) → self::B<self::B::X%>
     : self::B::foo = foo, super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = null}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = null}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
     return new self::A::•<self::B::redir::X%>(foo: foo);
 }
 abstract class M extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.transformed.expect b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.transformed.expect
index 54fae1c..1413780 100644
--- a/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_inference_interdependence.dart.strong.transformed.expect
@@ -12,7 +12,7 @@
   const constructor •({required () →? self::C? foo}) → self::B<self::B::X%>
     : self::B::foo = foo, super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = #C1}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>({() →? self::C? foo = #C1}) → self::B<self::B::redir::X%> /* redirection-target: self::A::•<self::B::redir::X%>*/
     return new self::A::•<self::B::redir::X%>(foo: foo);
 }
 abstract class M extends core::Object /*isMixinDeclaration*/  {
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
index b37d519..52594ac 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.expect
@@ -26,7 +26,7 @@
 class C1 extends core::Object {
   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.
+    : invalid-initializer "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
 class C1 { var f; C1() : ; }
                          ^"
     ;
@@ -42,7 +42,7 @@
 class C3 extends core::Object {
   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.
+    : invalid-initializer "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
 class C3 { var f; C3() : f++; }
                          ^"
     ;
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.modular.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.modular.expect
index b37d519..52594ac 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.modular.expect
@@ -26,7 +26,7 @@
 class C1 extends core::Object {
   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.
+    : invalid-initializer "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
 class C1 { var f; C1() : ; }
                          ^"
     ;
@@ -42,7 +42,7 @@
 class C3 extends core::Object {
   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.
+    : invalid-initializer "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
 class C3 { var f; C3() : f++; }
                          ^"
     ;
diff --git a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
index b37d519..52594ac 100644
--- a/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/constructor_initializer_invalid.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
 class C1 extends core::Object {
   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.
+    : invalid-initializer "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
 class C1 { var f; C1() : ; }
                          ^"
     ;
@@ -42,7 +42,7 @@
 class C3 extends core::Object {
   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.
+    : invalid-initializer "pkg/front_end/testcases/general/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
 class C3 { var f; C3() : f++; }
                          ^"
     ;
diff --git a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.expect b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.expect
index 81fb047..6fc897e 100644
--- a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.expect
+++ b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // extension type ET1(var int a) {}
 //                    ^^^
 //
diff --git a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.modular.expect b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.modular.expect
index 81fb047..6fc897e 100644
--- a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.modular.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // extension type ET1(var int a) {}
 //                    ^^^
 //
diff --git a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.outline.expect b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.outline.expect
index 0e7e9b7..97157e3 100644
--- a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.outline.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // extension type ET1(var int a) {}
 //                    ^^^
 //
diff --git a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.transformed.expect b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.transformed.expect
index 81fb047..6fc897e 100644
--- a/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart.strong.transformed.expect
@@ -2,8 +2,8 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'declaring-constructors' language feature to be enabled.
-// Try passing the '--enable-experiment=declaring-constructors' command line option.
+// pkg/front_end/testcases/general/declaring_parameter_pre_feature.dart:6:20: Error: This requires the experimental 'primary-constructors' language feature to be enabled.
+// Try passing the '--enable-experiment=primary-constructors' command line option.
 // extension type ET1(var int a) {}
 //                    ^^^
 //
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect
index dc3ae29..7be67dd 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.expect
@@ -381,7 +381,7 @@
 }
 class Sub extends core::Object {
   constructor •() → self::Sub
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:70:11: Error: Can't use 'new' because it is declared more than once.
+    : invalid-initializer "pkg/front_end/testcases/general/duplicated_declarations.dart:70:11: Error: Can't use 'new' because it is declared more than once.
   Sub() : super(null);
           ^"
     ;
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.modular.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.modular.expect
index dc3ae29..7be67dd 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.modular.expect
@@ -381,7 +381,7 @@
 }
 class Sub extends core::Object {
   constructor •() → self::Sub
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:70:11: Error: Can't use 'new' because it is declared more than once.
+    : invalid-initializer "pkg/front_end/testcases/general/duplicated_declarations.dart:70:11: Error: Can't use 'new' because it is declared more than once.
   Sub() : super(null);
           ^"
     ;
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect
index dc3ae29..7be67dd 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.strong.transformed.expect
@@ -381,7 +381,7 @@
 }
 class Sub extends core::Object {
   constructor •() → self::Sub
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/duplicated_declarations.dart:70:11: Error: Can't use 'new' because it is declared more than once.
+    : invalid-initializer "pkg/front_end/testcases/general/duplicated_declarations.dart:70:11: Error: Can't use 'new' because it is declared more than once.
   Sub() : super(null);
           ^"
     ;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
index 2163b60..36f7a5e 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.expect
@@ -15,7 +15,7 @@
 class A extends core::Object {
   field core::int a;
   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.
+    : invalid-initializer "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);
          ^"
     ;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.modular.expect
index 2163b60..36f7a5e 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.modular.expect
@@ -15,7 +15,7 @@
 class A extends core::Object {
   field core::int a;
   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.
+    : invalid-initializer "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);
          ^"
     ;
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
index 2163b60..36f7a5e 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
 class A extends core::Object {
   field core::int a;
   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.
+    : invalid-initializer "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);
          ^"
     ;
diff --git a/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml b/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml
index 204751b..50ed9c2 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml
+++ b/pkg/front_end/testcases/general/dynamic_modules/dynamic_interface.yaml
@@ -54,6 +54,21 @@
   - library: 'main_lib1.dart'
     member: '_privateMethodForC7'
   - library: 'main_lib1.dart'
+    class: 'C8'
+    member: 'fact3'
+  - library: 'main_lib1.dart'
+    class: 'C8'
+    member: ''
+  - library: 'main_lib1.dart'
+    class: 'C8'
+    member: 'constConstr'
+  - library: 'main_lib1.dart'
     class: 'C9'
-    member: '_'
+    member: 'fact1'
+  - library: 'main_lib1.dart'
+    class: 'C9'
+    member: 'fact2'
+  - library: 'main_lib1.dart'
+    class: 'C9'
+    member: 'fact4'
   - library: 'main_lib2.dart'
diff --git a/pkg/front_end/testcases/general/dynamic_modules/main.dart b/pkg/front_end/testcases/general/dynamic_modules/main.dart
index 4159c53..ba85151 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/main.dart
+++ b/pkg/front_end/testcases/general/dynamic_modules/main.dart
@@ -119,11 +119,16 @@
   print(field2);
   field2 = 42;
 
-  // Not allowed - target of redirecting factory is not callable.
-  print(C8());
+  // Not allowed - redirecting factories are not callable
+  // (although their targets are callable).
+  print(C8.fact1());
+  print(C8.fact2());
+  print(const C8.fact4());
 
-  // Allowed - target of redirecting factory is callable.
-  print(C9());
+  // Allowed - redirecting factories are callable.
+  print(C9.fact1());
+  print(C9.fact2());
+  print(const C9.fact4());
 
   // Not allowed.
   print(ExtType1);
diff --git a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.expect b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.expect
index ec63fd5..e8a65db 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.expect
@@ -165,22 +165,32 @@
 //   field1 = 42;
 //   ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:123:9: Error: Cannot invoke constructor 'C8._' from a dynamic module.
-// Try removing the call or update the dynamic interface to list constructor 'C8._' as callable.
-//   print(C8());
-//         ^
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:124:12: Error: Cannot invoke member 'C8.fact1' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact1' as callable.
+//   print(C8.fact1());
+//            ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:129:9: Error: Cannot use extension type 'ExtType1' in a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:125:12: Error: Cannot invoke member 'C8.fact2' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact2' as callable.
+//   print(C8.fact2());
+//            ^
+//
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:126:15: Error: Cannot invoke member 'C8.fact4' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact4' as callable.
+//   print(const C8.fact4());
+//               ^
+//
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:134:9: Error: Cannot use extension type 'ExtType1' in a dynamic module.
 // Try removing the reference to extension type 'ExtType1' or update the dynamic interface to list extension type 'ExtType1' as callable.
 //   print(ExtType1);
 //         ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:130:9: Error: Cannot invoke member 'ExtType1.new' from a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:135:9: Error: Cannot invoke member 'ExtType1.new' from a dynamic module.
 // Try removing the call or update the dynamic interface to list member 'ExtType1.new' as callable.
 //   print(ExtType1(42));
 //         ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:131:12: Error: Cannot invoke member 'Ext1.isPositive' from a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:136:12: Error: Cannot invoke member 'Ext1.isPositive' from a dynamic module.
 // Try removing the call or update the dynamic interface to list member 'Ext1.isPositive' as callable.
 //   print(42.isPositive);
 //            ^
@@ -332,15 +342,19 @@
   mai::field1 = 42;
   core::print(mai::field2);
   mai::field2 = 42;
-  core::print(new mai::C8::_());
-  core::print(new mai::C9::_());
+  core::print(new mai::C8::•());
+  core::print(mai::C8::fact3());
   core::print(#C13);
+  core::print(new mai::C9::•());
+  core::print(mai::C9::fact3());
+  core::print(#C14);
+  core::print(#C15);
   core::print(mai::ExtType1|constructor#(42));
   core::print(mai::Ext1|get#isPositive(42));
   core::print(new mai2::Lib3Class::•());
   mai2::lib3Method();
   mai2::lib3Field = 42;
-  core::print(#C13);
+  core::print(#C15);
   core::print(mai2::Lib3ExtType|constructor#(42));
   core::print(mai2::Lib3Ext|get#lib3IsPositive(42));
 }
@@ -441,17 +455,35 @@
     : super core::Object::•()
     ;
 }
-class C8 extends core::Object {
-  constructor _() → mai::C8
+class C8 extends core::Object /*hasConstConstructor*/  {
+  constructor •() → mai::C8
     : super core::Object::•() {}
-  static factory •() → mai::C8 /* redirection-target: mai::C8::_ */
-    return new mai::C8::_();
+  const constructor constConstr() → mai::C8
+    : super core::Object::•()
+    ;
+  static factory fact1() → mai::C8 /* redirection-target: mai::C8::• */
+    return new mai::C8::•();
+  static factory fact2() → mai::C8 /* redirection-target: mai::C8::fact3 */
+    return mai::C8::fact3();
+  static factory fact3() → mai::C8
+    return new mai::C8::•();
+  static const factory fact4() → mai::C8 /* redirection-target: mai::C8::constConstr */
+    return new mai::C8::constConstr();
 }
-class C9 extends core::Object {
-  constructor _() → mai::C9
+class C9 extends core::Object /*hasConstConstructor*/  {
+  constructor •() → mai::C9
     : super core::Object::•() {}
-  static factory •() → mai::C9 /* redirection-target: mai::C9::_ */
-    return new mai::C9::_();
+  const constructor constConstr() → mai::C9
+    : super core::Object::•()
+    ;
+  static factory fact1() → mai::C9 /* redirection-target: mai::C9::• */
+    return new mai::C9::•();
+  static factory fact2() → mai::C9 /* redirection-target: mai::C9::fact3 */
+    return mai::C9::fact3();
+  static factory fact3() → mai::C9
+    return new mai::C9::•();
+  static const factory fact4() → mai::C9 /* redirection-target: mai::C9::constConstr */
+    return new mai::C9::constConstr();
 }
 extension Ext1 on core::int {
   get isPositive = mai::Ext1|get#isPositive;
@@ -463,8 +495,8 @@
 }
 static field core::int field1 = 4;
 static field core::int field2 = 4;
-static const field mai::_C5 const1 = #C15;
-static const field mai::_C5 const2 = #C17;
+static const field mai::_C5 const1 = #C17;
+static const field mai::_C5 const2 = #C19;
 static method method1() → void {}
 static method method2() → void {}
 static method _privateMethod1() → void {}
@@ -534,11 +566,13 @@
   #C10 = constructor-tearoff mai::C2::•
   #C11 = static-tearoff mai::method1
   #C12 = static-tearoff mai::method2
-  #C13 = TypeLiteralConstant(core::int)
-  #C14 = static-tearoff mai::_privateMethod1
-  #C15 = mai::_C5 {func:#C14}
-  #C16 = static-tearoff mai::_privateMethod2
+  #C13 = mai::C8 {}
+  #C14 = mai::C9 {}
+  #C15 = TypeLiteralConstant(core::int)
+  #C16 = static-tearoff mai::_privateMethod1
   #C17 = mai::_C5 {func:#C16}
+  #C18 = static-tearoff mai::_privateMethod2
+  #C19 = mai::_C5 {func:#C18}
 }
 
 
@@ -548,3 +582,8 @@
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
 - _ConstForC7. (from org-dartlang-testcase:///main_lib1.dart:82:9)
 - _C5. (from org-dartlang-testcase:///main_lib1.dart:60:9)
+
+org-dartlang-testcase:///main.dart:
+- C8.constConstr (from org-dartlang-testcase:///main_lib1.dart:98:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C9.constConstr (from org-dartlang-testcase:///main_lib1.dart:107:9)
diff --git a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.modular.expect b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.modular.expect
index 0873ce8..7158ed4 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.modular.expect
@@ -165,22 +165,32 @@
 //   field1 = 42;
 //   ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:123:9: Error: Cannot invoke constructor 'C8._' from a dynamic module.
-// Try removing the call or update the dynamic interface to list constructor 'C8._' as callable.
-//   print(C8());
-//         ^
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:124:12: Error: Cannot invoke member 'C8.fact1' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact1' as callable.
+//   print(C8.fact1());
+//            ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:129:9: Error: Cannot use extension type 'ExtType1' in a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:125:12: Error: Cannot invoke member 'C8.fact2' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact2' as callable.
+//   print(C8.fact2());
+//            ^
+//
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:126:15: Error: Cannot invoke member 'C8.fact4' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact4' as callable.
+//   print(const C8.fact4());
+//               ^
+//
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:134:9: Error: Cannot use extension type 'ExtType1' in a dynamic module.
 // Try removing the reference to extension type 'ExtType1' or update the dynamic interface to list extension type 'ExtType1' as callable.
 //   print(ExtType1);
 //         ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:130:9: Error: Cannot invoke member 'ExtType1.new' from a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:135:9: Error: Cannot invoke member 'ExtType1.new' from a dynamic module.
 // Try removing the call or update the dynamic interface to list member 'ExtType1.new' as callable.
 //   print(ExtType1(42));
 //         ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:131:12: Error: Cannot invoke member 'Ext1.isPositive' from a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:136:12: Error: Cannot invoke member 'Ext1.isPositive' from a dynamic module.
 // Try removing the call or update the dynamic interface to list member 'Ext1.isPositive' as callable.
 //   print(42.isPositive);
 //            ^
@@ -332,15 +342,19 @@
   mai::field1 = 42;
   core::print(mai::field2);
   mai::field2 = 42;
-  core::print(new mai::C8::_());
-  core::print(new mai::C9::_());
+  core::print(new mai::C8::•());
+  core::print(mai::C8::fact3());
   core::print(#C13);
+  core::print(new mai::C9::•());
+  core::print(mai::C9::fact3());
+  core::print(#C14);
+  core::print(#C15);
   core::print(mai::ExtType1|constructor#(42));
   core::print(mai::Ext1|get#isPositive(42));
   core::print(new mai2::Lib3Class::•());
   mai2::lib3Method();
   mai2::lib3Field = 42;
-  core::print(#C13);
+  core::print(#C15);
   core::print(mai2::Lib3ExtType|constructor#(42));
   core::print(mai2::Lib3Ext|get#lib3IsPositive(42));
 }
@@ -359,7 +373,9 @@
   #C10 = constructor-tearoff mai::C2::•
   #C11 = static-tearoff mai::method1
   #C12 = static-tearoff mai::method2
-  #C13 = TypeLiteralConstant(core::int)
+  #C13 = mai::C8 {}
+  #C14 = mai::C9 {}
+  #C15 = TypeLiteralConstant(core::int)
 }
 
 
@@ -368,3 +384,5 @@
 - _ConstForC6. (from org-dartlang-testcase:///main_lib1.dart:71:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
 - _ConstForC7. (from org-dartlang-testcase:///main_lib1.dart:82:9)
+- C8.constConstr (from org-dartlang-testcase:///main_lib1.dart:98:9)
+- C9.constConstr (from org-dartlang-testcase:///main_lib1.dart:107:9)
diff --git a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.outline.expect
index 74e5a36..442b918 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.outline.expect
@@ -184,17 +184,35 @@
   constructor •({core::Object param = const mai::_ConstForC7::•(mai::_privateMethodForC7)}) → mai::C7
     ;
 }
-class C8 extends core::Object {
-  constructor _() → mai::C8
+class C8 extends core::Object /*hasConstConstructor*/  {
+  constructor •() → mai::C8
     ;
-  static factory •() → mai::C8 /* redirection-target: mai::C8::_ */
-    return new mai::C8::_();
+  const constructor constConstr() → mai::C8
+    : super core::Object::•()
+    ;
+  static factory fact1() → mai::C8 /* redirection-target: mai::C8::• */
+    return new mai::C8::•();
+  static factory fact2() → mai::C8 /* redirection-target: mai::C8::fact3 */
+    return mai::C8::fact3();
+  static factory fact3() → mai::C8
+    ;
+  static const factory fact4() → mai::C8 /* redirection-target: mai::C8::constConstr */
+    return new mai::C8::constConstr();
 }
-class C9 extends core::Object {
-  constructor _() → mai::C9
+class C9 extends core::Object /*hasConstConstructor*/  {
+  constructor •() → mai::C9
     ;
-  static factory •() → mai::C9 /* redirection-target: mai::C9::_ */
-    return new mai::C9::_();
+  const constructor constConstr() → mai::C9
+    : super core::Object::•()
+    ;
+  static factory fact1() → mai::C9 /* redirection-target: mai::C9::• */
+    return new mai::C9::•();
+  static factory fact2() → mai::C9 /* redirection-target: mai::C9::fact3 */
+    return mai::C9::fact3();
+  static factory fact3() → mai::C9
+    ;
+  static const factory fact4() → mai::C9 /* redirection-target: mai::C9::constConstr */
+    return new mai::C9::constConstr();
 }
 extension Ext1 on core::int {
   get isPositive = mai::Ext1|get#isPositive;
@@ -274,4 +292,4 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main_lib1.dart:89:28 -> InstanceConstant(const _ConstForC7{_ConstForC7._f: _privateMethodForC7})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main_lib1.dart:67:16 -> InstanceConstant(const _C5{_C5.func: _privateMethod1})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main_lib1.dart:68:16 -> InstanceConstant(const _C5{_C5.func: _privateMethod2})
-Extra constant evaluation: evaluated: 16, effectively constant: 6
+Extra constant evaluation: evaluated: 20, effectively constant: 6
diff --git a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.transformed.expect
index adb8245..16c65ca 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/dynamic_modules/main.dart.strong.transformed.expect
@@ -165,22 +165,32 @@
 //   field1 = 42;
 //   ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:123:9: Error: Cannot invoke constructor 'C8._' from a dynamic module.
-// Try removing the call or update the dynamic interface to list constructor 'C8._' as callable.
-//   print(C8());
-//         ^
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:124:12: Error: Cannot invoke member 'C8.fact1' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact1' as callable.
+//   print(C8.fact1());
+//            ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:129:9: Error: Cannot use extension type 'ExtType1' in a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:125:12: Error: Cannot invoke member 'C8.fact2' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact2' as callable.
+//   print(C8.fact2());
+//            ^
+//
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:126:15: Error: Cannot invoke member 'C8.fact4' from a dynamic module.
+// Try removing the call or update the dynamic interface to list member 'C8.fact4' as callable.
+//   print(const C8.fact4());
+//               ^
+//
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:134:9: Error: Cannot use extension type 'ExtType1' in a dynamic module.
 // Try removing the reference to extension type 'ExtType1' or update the dynamic interface to list extension type 'ExtType1' as callable.
 //   print(ExtType1);
 //         ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:130:9: Error: Cannot invoke member 'ExtType1.new' from a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:135:9: Error: Cannot invoke member 'ExtType1.new' from a dynamic module.
 // Try removing the call or update the dynamic interface to list member 'ExtType1.new' as callable.
 //   print(ExtType1(42));
 //         ^
 //
-// pkg/front_end/testcases/general/dynamic_modules/main.dart:131:12: Error: Cannot invoke member 'Ext1.isPositive' from a dynamic module.
+// pkg/front_end/testcases/general/dynamic_modules/main.dart:136:12: Error: Cannot invoke member 'Ext1.isPositive' from a dynamic module.
 // Try removing the call or update the dynamic interface to list member 'Ext1.isPositive' as callable.
 //   print(42.isPositive);
 //            ^
@@ -331,15 +341,19 @@
   mai::field1 = 42;
   core::print(mai::field2);
   mai::field2 = 42;
-  core::print(new mai::C8::_());
-  core::print(new mai::C9::_());
+  core::print(new mai::C8::•());
+  core::print(mai::C8::fact3());
   core::print(#C13);
+  core::print(new mai::C9::•());
+  core::print(mai::C9::fact3());
+  core::print(#C14);
+  core::print(#C15);
   core::print(mai::ExtType1|constructor#(42));
   core::print(mai::Ext1|get#isPositive(42));
   core::print(new mai2::Lib3Class::•());
   mai2::lib3Method();
   mai2::lib3Field = 42;
-  core::print(#C13);
+  core::print(#C15);
   core::print(mai2::Lib3ExtType|constructor#(42));
   core::print(mai2::Lib3Ext|get#lib3IsPositive(42));
 }
@@ -440,17 +454,35 @@
     : super core::Object::•()
     ;
 }
-class C8 extends core::Object {
-  constructor _() → mai::C8
+class C8 extends core::Object /*hasConstConstructor*/  {
+  constructor •() → mai::C8
     : super core::Object::•() {}
-  static factory •() → mai::C8 /* redirection-target: mai::C8::_ */
-    return new mai::C8::_();
+  const constructor constConstr() → mai::C8
+    : super core::Object::•()
+    ;
+  static factory fact1() → mai::C8 /* redirection-target: mai::C8::• */
+    return new mai::C8::•();
+  static factory fact2() → mai::C8 /* redirection-target: mai::C8::fact3 */
+    return mai::C8::fact3();
+  static factory fact3() → mai::C8
+    return new mai::C8::•();
+  static const factory fact4() → mai::C8 /* redirection-target: mai::C8::constConstr */
+    return new mai::C8::constConstr();
 }
-class C9 extends core::Object {
-  constructor _() → mai::C9
+class C9 extends core::Object /*hasConstConstructor*/  {
+  constructor •() → mai::C9
     : super core::Object::•() {}
-  static factory •() → mai::C9 /* redirection-target: mai::C9::_ */
-    return new mai::C9::_();
+  const constructor constConstr() → mai::C9
+    : super core::Object::•()
+    ;
+  static factory fact1() → mai::C9 /* redirection-target: mai::C9::• */
+    return new mai::C9::•();
+  static factory fact2() → mai::C9 /* redirection-target: mai::C9::fact3 */
+    return mai::C9::fact3();
+  static factory fact3() → mai::C9
+    return new mai::C9::•();
+  static const factory fact4() → mai::C9 /* redirection-target: mai::C9::constConstr */
+    return new mai::C9::constConstr();
 }
 extension Ext1 on core::int {
   get isPositive = mai::Ext1|get#isPositive;
@@ -462,8 +494,8 @@
 }
 static field core::int field1 = 4;
 static field core::int field2 = 4;
-static const field mai::_C5 const1 = #C15;
-static const field mai::_C5 const2 = #C17;
+static const field mai::_C5 const1 = #C17;
+static const field mai::_C5 const2 = #C19;
 static method method1() → void {}
 static method method2() → void {}
 static method _privateMethod1() → void {}
@@ -533,11 +565,13 @@
   #C10 = constructor-tearoff mai::C2::•
   #C11 = static-tearoff mai::method1
   #C12 = static-tearoff mai::method2
-  #C13 = TypeLiteralConstant(core::int)
-  #C14 = static-tearoff mai::_privateMethod1
-  #C15 = mai::_C5 {func:#C14}
-  #C16 = static-tearoff mai::_privateMethod2
+  #C13 = mai::C8 {}
+  #C14 = mai::C9 {}
+  #C15 = TypeLiteralConstant(core::int)
+  #C16 = static-tearoff mai::_privateMethod1
   #C17 = mai::_C5 {func:#C16}
+  #C18 = static-tearoff mai::_privateMethod2
+  #C19 = mai::_C5 {func:#C18}
 }
 
 
@@ -547,3 +581,8 @@
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
 - _ConstForC7. (from org-dartlang-testcase:///main_lib1.dart:82:9)
 - _C5. (from org-dartlang-testcase:///main_lib1.dart:60:9)
+
+org-dartlang-testcase:///main.dart:
+- C8.constConstr (from org-dartlang-testcase:///main_lib1.dart:98:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C9.constConstr (from org-dartlang-testcase:///main_lib1.dart:107:9)
diff --git a/pkg/front_end/testcases/general/dynamic_modules/main_lib1.dart b/pkg/front_end/testcases/general/dynamic_modules/main_lib1.dart
index 640f75a..7cd6819 100644
--- a/pkg/front_end/testcases/general/dynamic_modules/main_lib1.dart
+++ b/pkg/front_end/testcases/general/dynamic_modules/main_lib1.dart
@@ -90,13 +90,21 @@
 }
 
 class C8 {
-  factory C8() = C8._;
-  C8._() {}
+  factory C8.fact1() = C8;
+  factory C8.fact2() = C8.fact3;
+  factory C8.fact3() => C8();
+  C8() {}
+  const factory C8.fact4() = C8.constConstr;
+  const C8.constConstr();
 }
 
 class C9 {
-  factory C9() = C9._;
-  C9._() {}
+  factory C9.fact1() = C9;
+  factory C9.fact2() = C9.fact3;
+  factory C9.fact3() => C9();
+  C9() {}
+  const factory C9.fact4() = C9.constConstr;
+  const C9.constConstr();
 }
 
 extension type ExtType1(int raw) {}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.expect
index 8f518d5..1fc1794 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.expect
@@ -335,7 +335,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:7:11: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:7:11: Error: 'initializer' isn't an instance field of this class.
   foo() : initializer = true { }
           ^^^^^^^^^^^" {}
   constructor X() → self::Foo
@@ -345,7 +345,7 @@
   get Foo.X => 0;
                ^";
   constructor •() → self::Foo
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:13: Error: 'bla' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:13: Error: 'bla' isn't an instance field of this class.
   get Foo : bla = null => 0;
             ^^^"
     invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:27: Error: Constructors can't have a return type.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.modular.expect
index 8f518d5..1fc1794 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.modular.expect
@@ -335,7 +335,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:7:11: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:7:11: Error: 'initializer' isn't an instance field of this class.
   foo() : initializer = true { }
           ^^^^^^^^^^^" {}
   constructor X() → self::Foo
@@ -345,7 +345,7 @@
   get Foo.X => 0;
                ^";
   constructor •() → self::Foo
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:13: Error: 'bla' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:13: Error: 'bla' isn't an instance field of this class.
   get Foo : bla = null => 0;
             ^^^"
     invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:27: Error: Constructors can't have a return type.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.transformed.expect
index 8f518d5..1fc1794 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart.strong.transformed.expect
@@ -335,7 +335,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:7:11: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:7:11: Error: 'initializer' isn't an instance field of this class.
   foo() : initializer = true { }
           ^^^^^^^^^^^" {}
   constructor X() → self::Foo
@@ -345,7 +345,7 @@
   get Foo.X => 0;
                ^";
   constructor •() → self::Foo
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:13: Error: 'bla' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:13: Error: 'bla' isn't an instance field of this class.
   get Foo : bla = null => 0;
             ^^^"
     invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_general.crash_dart:16:27: Error: Constructors can't have a return type.
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.expect
index d0c189b..975c77f 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.expect
@@ -56,7 +56,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
   get foo() : initializer = true { }
               ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.modular.expect
index d0c189b..975c77f 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.modular.expect
@@ -56,7 +56,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
   get foo() : initializer = true { }
               ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.transformed.expect
index d0c189b..975c77f 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart.strong.transformed.expect
@@ -56,7 +56,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_get.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
   get foo() : initializer = true { }
               ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.expect
index 6aeffa7..7167ac7 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.expect
@@ -51,7 +51,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:7:16: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:7:16: Error: 'initializer' isn't an instance field of this class.
   void foo() : initializer = true {}
                ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.modular.expect
index 6aeffa7..7167ac7 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.modular.expect
@@ -51,7 +51,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:7:16: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:7:16: Error: 'initializer' isn't an instance field of this class.
   void foo() : initializer = true {}
                ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.transformed.expect
index 6aeffa7..7167ac7 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart.strong.transformed.expect
@@ -51,7 +51,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:7:16: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_return_type.crash_dart:7:16: Error: 'initializer' isn't an instance field of this class.
   void foo() : initializer = true {}
                ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.expect
index 2c16aea..340c061 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.expect
@@ -51,7 +51,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
   set foo() : initializer = true { }
               ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.modular.expect
index 2c16aea..340c061 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.modular.expect
@@ -51,7 +51,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
   set foo() : initializer = true { }
               ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.transformed.expect
index 2c16aea..340c061 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart.strong.transformed.expect
@@ -51,7 +51,7 @@
   constructor x() → self::Foo
     : super core::Object::•() {}
   constructor foo() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_bad_name_set.crash_dart:7:15: Error: 'initializer' isn't an instance field of this class.
   set foo() : initializer = true { }
               ^^^^^^^^^^^" {}
 }
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.expect
index 1a55722..2f8dc9b 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.expect
@@ -52,7 +52,7 @@
 
 class Foo extends core::Object {
   constructor •() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:15: Error: 'initializer' isn't an instance field of this class.
   get Foo() : initializer = true { }
               ^^^^^^^^^^^" {}
   constructor x() → self::Foo
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.modular.expect
index 1a55722..2f8dc9b 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.modular.expect
@@ -52,7 +52,7 @@
 
 class Foo extends core::Object {
   constructor •() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:15: Error: 'initializer' isn't an instance field of this class.
   get Foo() : initializer = true { }
               ^^^^^^^^^^^" {}
   constructor x() → self::Foo
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.transformed.expect
index 1a55722..2f8dc9b 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart.strong.transformed.expect
@@ -52,7 +52,7 @@
 
 class Foo extends core::Object {
   constructor •() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_get.dart:9:15: Error: 'initializer' isn't an instance field of this class.
   get Foo() : initializer = true { }
               ^^^^^^^^^^^" {}
   constructor x() → self::Foo
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.expect
index fcbfdc4..e54bc9b 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.expect
@@ -20,10 +20,6 @@
 //   Foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:3:9: Error: Operator '/' should have exactly one parameter.
-//   Foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:8: Error: Expected '{' before this.
 //   Foo()./ : super() {}
 //        ^
@@ -46,10 +42,6 @@
 //   Foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: Operator '/' should have exactly one parameter.
-//   Foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Expected '{' before this.
 //   foo() / : super() {}
 //         ^
@@ -68,10 +60,6 @@
 //   foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Operator '/' should have exactly one parameter.
-//   foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:8: Error: Expected '{' before this.
 //   foo()./ : super() {}
 //        ^
@@ -94,10 +82,6 @@
 //   foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:9: Error: Operator '/' should have exactly one parameter.
-//   foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo()./ : super() {}
 //   ^^^
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.modular.expect
index fcbfdc4..e54bc9b 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.modular.expect
@@ -20,10 +20,6 @@
 //   Foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:3:9: Error: Operator '/' should have exactly one parameter.
-//   Foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:8: Error: Expected '{' before this.
 //   Foo()./ : super() {}
 //        ^
@@ -46,10 +42,6 @@
 //   Foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: Operator '/' should have exactly one parameter.
-//   Foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Expected '{' before this.
 //   foo() / : super() {}
 //         ^
@@ -68,10 +60,6 @@
 //   foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Operator '/' should have exactly one parameter.
-//   foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:8: Error: Expected '{' before this.
 //   foo()./ : super() {}
 //        ^
@@ -94,10 +82,6 @@
 //   foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:9: Error: Operator '/' should have exactly one parameter.
-//   foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo()./ : super() {}
 //   ^^^
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.outline.expect
index ff466a4..86f6653 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.outline.expect
@@ -20,10 +20,6 @@
 //   Foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:3:9: Error: Operator '/' should have exactly one parameter.
-//   Foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:8: Error: Expected '{' before this.
 //   Foo()./ : super() {}
 //        ^
@@ -46,10 +42,6 @@
 //   Foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: Operator '/' should have exactly one parameter.
-//   Foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Expected '{' before this.
 //   foo() / : super() {}
 //         ^
@@ -68,10 +60,6 @@
 //   foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Operator '/' should have exactly one parameter.
-//   foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:8: Error: Expected '{' before this.
 //   foo()./ : super() {}
 //        ^
@@ -94,10 +82,6 @@
 //   foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:9: Error: Operator '/' should have exactly one parameter.
-//   foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo()./ : super() {}
 //   ^^^
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.transformed.expect
index fcbfdc4..e54bc9b 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart.strong.transformed.expect
@@ -20,10 +20,6 @@
 //   Foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:3:9: Error: Operator '/' should have exactly one parameter.
-//   Foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:8: Error: Expected '{' before this.
 //   Foo()./ : super() {}
 //        ^
@@ -46,10 +42,6 @@
 //   Foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:9: Error: Operator '/' should have exactly one parameter.
-//   Foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Expected '{' before this.
 //   foo() / : super() {}
 //         ^
@@ -68,10 +60,6 @@
 //   foo() / : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:7:9: Error: Operator '/' should have exactly one parameter.
-//   foo() / : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:8: Error: Expected '{' before this.
 //   foo()./ : super() {}
 //        ^
@@ -94,10 +82,6 @@
 //   foo()./ : super() {}
 //         ^
 //
-// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:9:9: Error: Operator '/' should have exactly one parameter.
-//   foo()./ : super() {}
-//         ^
-//
 // pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator.crash_dart:5:3: Error: 'Foo' is already declared in this scope.
 //   Foo()./ : super() {}
 //   ^^^
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart
new file mode 100644
index 0000000..b2918cb
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart
@@ -0,0 +1,4 @@
+class C {
+  operator unary-() : this();
+  operator unary- : this();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.expect
new file mode 100644
index 0000000..3f6177e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:12: Error: Unexpected token 'unary'.
+//   operator unary-() : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary-() : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:12: Error: Unexpected token 'unary'.
+//   operator unary- : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary- : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: 'C.-' is already declared in this scope.
+//   operator unary- : this();
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:17: Context: Previous declaration of 'C.-'.
+//   operator unary-() : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:23: Error: Couldn't find constructor 'C'.
+//   operator unary-() : this();
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:21: Error: Couldn't find constructor 'C'.
+//   operator unary- : this();
+//                     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor -() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:23: Error: Couldn't find constructor 'C'.
+  operator unary-() : this();
+                      ^^^^"
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.modular.expect
new file mode 100644
index 0000000..3f6177e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.modular.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:12: Error: Unexpected token 'unary'.
+//   operator unary-() : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary-() : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:12: Error: Unexpected token 'unary'.
+//   operator unary- : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary- : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: 'C.-' is already declared in this scope.
+//   operator unary- : this();
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:17: Context: Previous declaration of 'C.-'.
+//   operator unary-() : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:23: Error: Couldn't find constructor 'C'.
+//   operator unary-() : this();
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:21: Error: Couldn't find constructor 'C'.
+//   operator unary- : this();
+//                     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor -() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:23: Error: Couldn't find constructor 'C'.
+  operator unary-() : this();
+                      ^^^^"
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.outline.expect
new file mode 100644
index 0000000..4d4cf15
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.outline.expect
@@ -0,0 +1,39 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:12: Error: Unexpected token 'unary'.
+//   operator unary-() : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary-() : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:12: Error: Unexpected token 'unary'.
+//   operator unary- : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary- : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: 'C.-' is already declared in this scope.
+//   operator unary- : this();
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:17: Context: Previous declaration of 'C.-'.
+//   operator unary-() : this();
+//                 ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor -() → self::C
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.transformed.expect
new file mode 100644
index 0000000..3f6177e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.strong.transformed.expect
@@ -0,0 +1,50 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:12: Error: Unexpected token 'unary'.
+//   operator unary-() : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary-() : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:12: Error: Unexpected token 'unary'.
+//   operator unary- : this();
+//            ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   operator unary- : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:3: Error: The name of a constructor must match the name of the enclosing class.
+//   operator unary- : this();
+//   ^^^^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:17: Error: 'C.-' is already declared in this scope.
+//   operator unary- : this();
+//                 ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:17: Context: Previous declaration of 'C.-'.
+//   operator unary-() : this();
+//                 ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:23: Error: Couldn't find constructor 'C'.
+//   operator unary-() : this();
+//                       ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:3:21: Error: Couldn't find constructor 'C'.
+//   operator unary- : this();
+//                     ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  constructor -() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart:2:23: Error: Couldn't find constructor 'C'.
+  operator unary-() : this();
+                      ^^^^"
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.textual_outline.expect
new file mode 100644
index 0000000..73e3833
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+class C {
+  operator unary-() : this();
+  operator unary- (): this();
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..73e3833
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_operator_unary_minus.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+class C {
+  operator unary-() : this();
+  operator unary- (): this();
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.expect
index e8f0976..a1e62ff 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.expect
@@ -46,7 +46,7 @@
 
 class Foo extends core::Object {
   constructor •() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:15: Error: 'initializer' isn't an instance field of this class.
   set Foo() : initializer = true {}
               ^^^^^^^^^^^" {}
   constructor x() → self::Foo
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.modular.expect
index e8f0976..a1e62ff 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.modular.expect
@@ -46,7 +46,7 @@
 
 class Foo extends core::Object {
   constructor •() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:15: Error: 'initializer' isn't an instance field of this class.
   set Foo() : initializer = true {}
               ^^^^^^^^^^^" {}
   constructor x() → self::Foo
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.transformed.expect
index e8f0976..a1e62ff 100644
--- a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart.strong.transformed.expect
@@ -46,7 +46,7 @@
 
 class Foo extends core::Object {
   constructor •() → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:15: Error: 'initializer' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_set.dart:9:15: Error: 'initializer' isn't an instance field of this class.
   set Foo() : initializer = true {}
               ^^^^^^^^^^^" {}
   constructor x() → self::Foo
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart
new file mode 100644
index 0000000..7da8dc4
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart
@@ -0,0 +1,6 @@
+class C {
+  C<T>() : this();
+  C!<T>() : this();
+  C<T() : this();
+  C<T>=() : this();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.expect
new file mode 100644
index 0000000..4e1afdf
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.expect
@@ -0,0 +1,110 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: 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'.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: Expected ';' after this.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The string '!' isn't a user-definable operator.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The name of a constructor must match the name of the enclosing class.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:5: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C!<T>() : this();
+//     ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:5: Error: Expected '>' after this.
+//   C<T() : this();
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   C<T() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T() : this();
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:7: Error: Unexpected token '='.
+//   C<T>=() : this();
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>=() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: 'C' is already declared in this scope.
+//   C<T() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:3: Error: 'C' is already declared in this scope.
+//   C<T>=() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:12: Error: Couldn't find constructor 'C'.
+//   C<T>() : this();
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:13: Error: Couldn't find constructor 'C'.
+//   C!<T>() : this();
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:11: Error: Couldn't find constructor 'C'.
+//   C<T() : this();
+//           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:13: Error: Couldn't find constructor 'C'.
+//   C<T>=() : this();
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic C = null;
+  constructor •() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:12: Error: Couldn't find constructor 'C'.
+  C<T>() : this();
+           ^^^^"
+    ;
+  constructor !() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:13: Error: Couldn't find constructor 'C'.
+  C!<T>() : this();
+            ^^^^"
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.modular.expect
new file mode 100644
index 0000000..4e1afdf
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.modular.expect
@@ -0,0 +1,110 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: 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'.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: Expected ';' after this.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The string '!' isn't a user-definable operator.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The name of a constructor must match the name of the enclosing class.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:5: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C!<T>() : this();
+//     ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:5: Error: Expected '>' after this.
+//   C<T() : this();
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   C<T() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T() : this();
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:7: Error: Unexpected token '='.
+//   C<T>=() : this();
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>=() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: 'C' is already declared in this scope.
+//   C<T() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:3: Error: 'C' is already declared in this scope.
+//   C<T>=() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:12: Error: Couldn't find constructor 'C'.
+//   C<T>() : this();
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:13: Error: Couldn't find constructor 'C'.
+//   C!<T>() : this();
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:11: Error: Couldn't find constructor 'C'.
+//   C<T() : this();
+//           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:13: Error: Couldn't find constructor 'C'.
+//   C<T>=() : this();
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic C = null;
+  constructor •() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:12: Error: Couldn't find constructor 'C'.
+  C<T>() : this();
+           ^^^^"
+    ;
+  constructor !() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:13: Error: Couldn't find constructor 'C'.
+  C!<T>() : this();
+            ^^^^"
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.outline.expect
new file mode 100644
index 0000000..b9ce16e
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.outline.expect
@@ -0,0 +1,88 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: 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'.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: Expected ';' after this.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The string '!' isn't a user-definable operator.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The name of a constructor must match the name of the enclosing class.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:5: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C!<T>() : this();
+//     ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:5: Error: Expected '>' after this.
+//   C<T() : this();
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   C<T() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T() : this();
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:7: Error: Unexpected token '='.
+//   C<T>=() : this();
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>=() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: 'C' is already declared in this scope.
+//   C<T() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:3: Error: 'C' is already declared in this scope.
+//   C<T>=() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic C;
+  constructor •() → self::C
+    ;
+  constructor !() → self::C
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..4e1afdf
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.strong.transformed.expect
@@ -0,0 +1,110 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: 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'.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: A class member can't have the same name as the enclosing class.
+// Try renaming the member.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:3: Error: Expected ';' after this.
+//   C!<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: Operator declarations must be preceded by the keyword 'operator'.
+// Try adding the keyword 'operator'.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The string '!' isn't a user-definable operator.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:4: Error: The name of a constructor must match the name of the enclosing class.
+//   C!<T>() : this();
+//    ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:5: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C!<T>() : this();
+//     ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:5: Error: Expected '>' after this.
+//   C<T() : this();
+//     ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   C<T() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T() : this();
+//    ^^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:7: Error: Unexpected token '='.
+//   C<T>=() : this();
+//       ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:4: Error: Constructors can't have type parameters.
+// Try removing the type parameters.
+//   C<T>=() : this();
+//    ^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:3: Error: 'C' is already declared in this scope.
+//   C<T() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:3: Error: 'C' is already declared in this scope.
+//   C<T>=() : this();
+//   ^
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:3: Context: Previous declaration of 'C'.
+//   C<T>() : this();
+//   ^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:12: Error: Couldn't find constructor 'C'.
+//   C<T>() : this();
+//            ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:13: Error: Couldn't find constructor 'C'.
+//   C!<T>() : this();
+//             ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:4:11: Error: Couldn't find constructor 'C'.
+//   C<T() : this();
+//           ^^^^
+//
+// pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:5:13: Error: Couldn't find constructor 'C'.
+//   C<T>=() : this();
+//             ^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field dynamic C = null;
+  constructor •() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:2:12: Error: Couldn't find constructor 'C'.
+  C<T>() : this();
+           ^^^^"
+    ;
+  constructor !() → self::C
+    : invalid-initializer "pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart:3:13: Error: Couldn't find constructor 'C'.
+  C!<T>() : this();
+            ^^^^"
+    ;
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..c5aeff0
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class C {
+  C<T>() : this();
+  C;
+  operator!<T>() : this();
+  C<T() >(): this();
+  C<T>=() : this();
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..3578876
--- /dev/null
+++ b/pkg/front_end/testcases/general/error_recovery/constructor_recovery_type_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class C {
+  C;
+  C<T() >(): this();
+  C<T>() : this();
+  C<T>=() : this();
+  operator!<T>() : this();
+}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.expect b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.expect
index e141627..8777550 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.expect
@@ -20,10 +20,6 @@
 //     /
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Operator '/' should have exactly one parameter.
-//     /
-//     ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.modular.expect
index e141627..8777550 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.modular.expect
@@ -20,10 +20,6 @@
 //     /
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Operator '/' should have exactly one parameter.
-//     /
-//     ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.outline.expect
index 8dbe6be..bf339e2 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.outline.expect
@@ -20,10 +20,6 @@
 //     /
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Operator '/' should have exactly one parameter.
-//     /
-//     ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.transformed.expect
index e141627..8777550 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart.strong.transformed.expect
@@ -20,10 +20,6 @@
 //     /
 //     ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39230.crash_dart:3:5: Error: Operator '/' should have exactly one parameter.
-//     /
-//     ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect
index 78de2b2..d2114f8 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.expect
@@ -33,10 +33,10 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({erroneously-initialized core::bool defaultValue = #C2}) → test::Class /* redirection-target: test::Class::_internal */
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({erroneously-initialized core::bool defaultValue = #C2}) → test::Class /* redirection-target: test::Class::_internal */
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.modular.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.modular.expect
index 78de2b2..d2114f8 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.modular.expect
@@ -33,10 +33,10 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({erroneously-initialized core::bool defaultValue = #C2}) → test::Class /* redirection-target: test::Class::_internal */
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({erroneously-initialized core::bool defaultValue = #C2}) → test::Class /* redirection-target: test::Class::_internal */
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.outline.expect
index 72b8df1..8af35c0 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.outline.expect
@@ -23,10 +23,10 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = true}) → self2::Class
     ;
   @_in::patch
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = true}) → self2::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = true}) → self2::Class
     ;
   @_in::patch
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = false}) → self2::Class /* redirection-target: self2::Class::_internal */
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({core::bool defaultValue = false}) → self2::Class /* redirection-target: self2::Class::_internal */
     return new self2::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.transformed.expect
index 78de2b2..d2114f8 100644
--- a/pkg/front_end/testcases/general/factory_patch/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/factory_patch/main.dart.strong.transformed.expect
@@ -33,10 +33,10 @@
   static factory /* from org-dartlang-testcase:///patch_lib.dart */ fact({core::bool defaultValue = #C3}) → test::Class
     return new test::Class::_internal(defaultValue: defaultValue);
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ constFact({core::bool defaultValue = #C3}) → test::Class
     return throw "unsupported";
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({erroneously-initialized core::bool defaultValue = #C2}) → test::Class /* redirection-target: test::Class::_internal */
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ redirect({erroneously-initialized core::bool defaultValue = #C2}) → test::Class /* redirection-target: test::Class::_internal */
     return new test::Class::_internal(defaultValue: defaultValue);
 }
 
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart b/pkg/front_end/testcases/general/invalid_initializer.dart
new file mode 100644
index 0000000..b8c0509
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 {
+  Super.named();
+}
+
+class Sub extends Super {
+  Sub();
+}
+
+main() {
+  new Sub(); // This should crash.
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart.strong.expect b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.expect
new file mode 100644
index 0000000..b6192fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.expect
@@ -0,0 +1,26 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_initializer.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+//   Sub();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_initializer.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+  Sub();
+  ^^^"
+    ;
+}
+static method main() → dynamic {
+  new self::Sub::•();
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.modular.expect
new file mode 100644
index 0000000..b6192fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.modular.expect
@@ -0,0 +1,26 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_initializer.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+//   Sub();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_initializer.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+  Sub();
+  ^^^"
+    ;
+}
+static method main() → dynamic {
+  new self::Sub::•();
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart.strong.outline.expect b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.outline.expect
new file mode 100644
index 0000000..edfbe66
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..b6192fb
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart.strong.transformed.expect
@@ -0,0 +1,26 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_initializer.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+//   Sub();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_initializer.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+  Sub();
+  ^^^"
+    ;
+}
+static method main() → dynamic {
+  new self::Sub::•();
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..86830bc
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+class Super {
+  Super.named();
+}
+
+class Sub extends Super {
+  Sub();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_initializer.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1596561
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+class Sub extends Super {
+  Sub();
+}
+
+class Super {
+  Super.named();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart b/pkg/front_end/testcases/general/invalid_initializer2.dart
new file mode 100644
index 0000000..995fdfc
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 {
+  Super.named();
+}
+
+class Sub extends Super {
+  Sub();
+}
+
+main() {
+  throws(() => new Sub());
+}
+
+throws(void Function() f) {
+  try {
+    f();
+  } catch (e) {
+    print(e);
+    return;
+  }
+  throw 'Expected exception';
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.expect b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.expect
new file mode 100644
index 0000000..23ea4b2
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_initializer2.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+//   Sub();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_initializer2.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+  Sub();
+  ^^^"
+    ;
+}
+static method main() → dynamic {
+  self::throws(() → void => new self::Sub::•());
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.modular.expect b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.modular.expect
new file mode 100644
index 0000000..23ea4b2
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.modular.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_initializer2.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+//   Sub();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_initializer2.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+  Sub();
+  ^^^"
+    ;
+}
+static method main() → dynamic {
+  self::throws(() → void => new self::Sub::•());
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.outline.expect b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.outline.expect
new file mode 100644
index 0000000..20d3db4
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.outline.expect
@@ -0,0 +1,16 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    ;
+}
+static method main() → dynamic
+  ;
+static method throws(() → void f) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.transformed.expect
new file mode 100644
index 0000000..23ea4b2
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart.strong.transformed.expect
@@ -0,0 +1,36 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_initializer2.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+//   Sub();
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Super extends core::Object {
+  constructor named() → self::Super
+    : super core::Object::•()
+    ;
+}
+class Sub extends self::Super {
+  constructor •() → self::Sub
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/invalid_initializer2.dart:10:3: Error: The superclass, 'Super', has no unnamed constructor that takes no arguments.
+  Sub();
+  ^^^"
+    ;
+}
+static method main() → dynamic {
+  self::throws(() → void => new self::Sub::•());
+}
+static method throws(() → void f) → dynamic {
+  try {
+    f(){() → void};
+  }
+  on core::Object catch(final core::Object e) {
+    core::print(e);
+    return;
+  }
+  throw "Expected exception";
+}
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart.textual_outline.expect b/pkg/front_end/testcases/general/invalid_initializer2.dart.textual_outline.expect
new file mode 100644
index 0000000..454e20a
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+class Super {
+  Super.named();
+}
+
+class Sub extends Super {
+  Sub();
+}
+
+main() {}
+
+throws(void Function() f) {}
diff --git a/pkg/front_end/testcases/general/invalid_initializer2.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/invalid_initializer2.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..db31880
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_initializer2.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+class Sub extends Super {
+  Sub();
+}
+
+class Super {
+  Super.named();
+}
+
+main() {}
+
+throws(void Function() f) {}
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
index 4bb56cd..1b30c67 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
@@ -465,100 +465,100 @@
 //   operator ~(a, {b}) => true;
 //            ^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:137:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ==<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:138:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ><T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:139:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:140:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:141:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>() => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:142:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:143:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator +<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:144:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator /<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:145:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~/<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:146:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator *<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:147:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator %<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:148:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator |<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:149:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ^<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:150:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator &<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:151:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <<<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:152:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >><T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:153:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []=<T>(a, b) => true;
-//                ^
+//               ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:154:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:155:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~<T>() => true;
-//              ^
+//             ^^^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Can't infer types for '==' as the overridden members don't have a combined signature.
 // Try adding explicit types.
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.modular.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.modular.expect
index 4bb56cd..1b30c67 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.modular.expect
@@ -465,100 +465,100 @@
 //   operator ~(a, {b}) => true;
 //            ^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:137:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ==<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:138:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ><T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:139:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:140:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:141:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>() => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:142:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:143:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator +<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:144:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator /<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:145:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~/<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:146:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator *<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:147:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator %<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:148:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator |<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:149:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ^<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:150:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator &<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:151:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <<<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:152:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >><T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:153:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []=<T>(a, b) => true;
-//                ^
+//               ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:154:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:155:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~<T>() => true;
-//              ^
+//             ^^^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Can't infer types for '==' as the overridden members don't have a combined signature.
 // Try adding explicit types.
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.outline.expect
index dc8e8be..d79d7f0 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.outline.expect
@@ -465,100 +465,100 @@
 //   operator ~(a, {b}) => true;
 //            ^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:137:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ==<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:138:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ><T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:139:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:140:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:141:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>() => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:142:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:143:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator +<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:144:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator /<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:145:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~/<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:146:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator *<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:147:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator %<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:148:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator |<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:149:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ^<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:150:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator &<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:151:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <<<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:152:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >><T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:153:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []=<T>(a, b) => true;
-//                ^
+//               ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:154:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:155:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~<T>() => true;
-//              ^
+//             ^^^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Can't infer types for '==' as the overridden members don't have a combined signature.
 // Try adding explicit types.
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.transformed.expect
index 4bb56cd..1b30c67 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.transformed.expect
@@ -465,100 +465,100 @@
 //   operator ~(a, {b}) => true;
 //            ^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:137:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:137:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ==<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:138:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:138:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ><T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:139:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:139:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:140:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:140:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >=<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:141:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:141:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>() => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:142:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:142:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator -<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:143:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:143:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator +<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:144:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:144:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator /<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:145:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:145:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~/<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:146:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:146:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator *<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:147:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:147:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator %<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:148:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:148:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator |<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:149:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:149:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ^<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:150:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:150:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator &<T>(a) => true;
-//              ^
+//             ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:151:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:151:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator <<<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:152:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:152:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >><T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:153:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:153:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []=<T>(a, b) => true;
-//                ^
+//               ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:154:15: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:154:14: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator []<T>(a) => true;
-//               ^
+//              ^^^
 //
-// pkg/front_end/testcases/general/invalid_operator.dart:155:14: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/general/invalid_operator.dart:155:13: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator ~<T>() => true;
-//              ^
+//             ^^^
 //
 // pkg/front_end/testcases/general/invalid_operator.dart:137:12: Error: Can't infer types for '==' as the overridden members don't have a combined signature.
 // Try adding explicit types.
diff --git a/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.expect b/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.expect
index 7ea2af6..a05adb4 100644
--- a/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.expect
@@ -21,10 +21,9 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
+    : invalid-initializer "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:17: Error: Expected an initializer.
   B(): super()?.foo() {}
-       ^" in #t2 == null ?{dynamic} null : #t2{dynamic}.foo() {}
+                ^" {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.modular.expect
index 7ea2af6..a05adb4 100644
--- a/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.modular.expect
@@ -21,10 +21,9 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
+    : invalid-initializer "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:17: Error: Expected an initializer.
   B(): super()?.foo() {}
-       ^" in #t2 == null ?{dynamic} null : #t2{dynamic}.foo() {}
+                ^" {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.transformed.expect
index 7ea2af6..a05adb4 100644
--- a/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/invalid_super_initializer.dart.strong.transformed.expect
@@ -21,10 +21,9 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = let final invalid-type #t2 = invalid-expression "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:8: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
+    : invalid-initializer "pkg/front_end/testcases/general/invalid_super_initializer.dart:8:17: Error: Expected an initializer.
   B(): super()?.foo() {}
-       ^" in #t2 == null ?{dynamic} null : #t2{dynamic}.foo() {}
+                ^" {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.expect
index dd56910..bf7606e0 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.expect
@@ -15,7 +15,7 @@
 class A extends core::Object {
   field core::int? v;
   constructor •(core::int? v) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
+    : invalid-initializer "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.modular.expect
index dd56910..bf7606e0 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.modular.expect
@@ -15,7 +15,7 @@
 class A extends core::Object {
   field core::int? v;
   constructor •(core::int? v) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
+    : invalid-initializer "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
diff --git a/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
index dd56910..bf7606e0 100644
--- a/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue38938.dart.strong.transformed.expect
@@ -15,7 +15,7 @@
 class A extends core::Object {
   field core::int? v;
   constructor •(core::int? v) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
+    : invalid-initializer "pkg/front_end/testcases/general/issue38938.dart:8:10: Error: Can't use 'v' because it is declared more than once.
   A(this.v);
          ^"
     ;
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.expect
index d16ec61..2d3100c 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.expect
@@ -2,45 +2,91 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: '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.
 //         this.y = 2;
 //         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
 //         this.y = 2;
-//             ^
+//         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: 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'.
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
 //         this.y = 2;
-//              ^
+//                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
+// Try inserting an identifier before '2'.
 //         this.y = 2;
-//              ^
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
-//   final int y;
-//             ^
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
+//         this.y = 2;
+//         ^^^^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
+//         this.y = 2;
+//                   ^
 //
 // pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
 //         this.x = 1;
 //                ^
 //
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected a function body or '=>'.
+// Try adding {}.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
+// Try removing the return type.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'x' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//         this.y = 2;
+//         ^
+// pkg/front_end/testcases/general/issue43363.dart:6:13: Context: 'x' is defined here.
+//   final int x;
+//             ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'y' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//         this.y = 2;
+//         ^
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: 'y' is defined here.
+//   final int y;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
   final field core::int y;
+  erroneous constructor y() → self::E
+    : self::E::y = null, self::E::x = null, super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
+Try removing the return type.
+        this.y = 2;
+                 ^";
   erroneous constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
                ^", this self::E::named()
     ;
   constructor named() → self::E
-    : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-              this.y = 6;
-                   ^"
+    : self::E::x = 5, self::E::y = 6, super core::Object::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.modular.expect
index d16ec61..2d3100c 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.modular.expect
@@ -2,45 +2,91 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: '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.
 //         this.y = 2;
 //         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
 //         this.y = 2;
-//             ^
+//         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: 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'.
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
 //         this.y = 2;
-//              ^
+//                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
+// Try inserting an identifier before '2'.
 //         this.y = 2;
-//              ^
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
-//   final int y;
-//             ^
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
+//         this.y = 2;
+//         ^^^^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
+//         this.y = 2;
+//                   ^
 //
 // pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
 //         this.x = 1;
 //                ^
 //
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected a function body or '=>'.
+// Try adding {}.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
+// Try removing the return type.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'x' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//         this.y = 2;
+//         ^
+// pkg/front_end/testcases/general/issue43363.dart:6:13: Context: 'x' is defined here.
+//   final int x;
+//             ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'y' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//         this.y = 2;
+//         ^
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: 'y' is defined here.
+//   final int y;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
   final field core::int y;
+  erroneous constructor y() → self::E
+    : self::E::y = null, self::E::x = null, super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
+Try removing the return type.
+        this.y = 2;
+                 ^";
   erroneous constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
                ^", this self::E::named()
     ;
   constructor named() → self::E
-    : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-              this.y = 6;
-                   ^"
+    : self::E::x = 5, self::E::y = 6, super core::Object::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.outline.expect
index 21d01c4..00476c2 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.outline.expect
@@ -2,25 +2,41 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: '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.
 //         this.y = 2;
 //         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
 //         this.y = 2;
-//             ^
+//         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: 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'.
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
 //         this.y = 2;
-//              ^
+//                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
+// Try inserting an identifier before '2'.
 //         this.y = 2;
-//              ^
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
-//   final int y;
-//             ^
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
+//         this.y = 2;
+//         ^^^^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
+//         this.y = 2;
+//                   ^
 //
 import self as self;
 import "dart:core" as core;
@@ -28,6 +44,8 @@
 class E extends core::Object {
   final field core::int x;
   final field core::int y;
+  constructor y() → self::E
+    ;
   constructor •() → self::E
     ;
   constructor named() → self::E
diff --git a/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
index d16ec61..2d3100c 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.strong.transformed.expect
@@ -2,45 +2,91 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Expected a class member, but got 'this'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: '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.
 //         this.y = 2;
 //         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:13: Error: Expected a class member, but got '.'.
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
 //         this.y = 2;
-//             ^
+//         ^^^^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: 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'.
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
 //         this.y = 2;
-//              ^
+//                ^
 //
-// pkg/front_end/testcases/general/issue43363.dart:10:14: Error: 'y' is already declared in this scope.
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected an identifier, but got '2'.
+// Try inserting an identifier before '2'.
 //         this.y = 2;
-//              ^
-// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: Previous declaration of 'y'.
-//   final int y;
-//             ^
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected ';' after this.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: The name of a constructor must match the name of the enclosing class.
+//         this.y = 2;
+//         ^^^^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Expected a class member, but got '2'.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:19: Error: Expected a class member, but got ';'.
+//         this.y = 2;
+//                   ^
 //
 // pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
 //         this.x = 1;
 //                ^
 //
+// pkg/front_end/testcases/general/issue43363.dart:10:16: Error: Expected a function body or '=>'.
+// Try adding {}.
+//         this.y = 2;
+//                ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
+// Try removing the return type.
+//         this.y = 2;
+//                  ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'x' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//         this.y = 2;
+//         ^
+// pkg/front_end/testcases/general/issue43363.dart:6:13: Context: 'x' is defined here.
+//   final int x;
+//             ^
+//
+// pkg/front_end/testcases/general/issue43363.dart:10:9: Error: Final field 'y' is not initialized by this constructor.
+// Try to initialize the field using an initializing formal or a field initializer.
+//         this.y = 2;
+//         ^
+// pkg/front_end/testcases/general/issue43363.dart:7:13: Context: 'y' is defined here.
+//   final int y;
+//             ^
+//
 import self as self;
 import "dart:core" as core;
 
 class E extends core::Object {
   final field core::int x;
   final field core::int y;
+  erroneous constructor y() → self::E
+    : self::E::y = null, self::E::x = null, super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/general/issue43363.dart:10:18: Error: Constructors can't have a return type.
+Try removing the return type.
+        this.y = 2;
+                 ^";
   erroneous constructor •() → self::E
     : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:9:16: Error: A redirecting constructor can't have other initializers.
         this.x = 1;
                ^", this self::E::named()
     ;
   constructor named() → self::E
-    : self::E::x = 5, final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/issue43363.dart:13:20: Error: Can't use 'y' because it is declared more than once.
-              this.y = 6;
-                   ^"
+    : self::E::x = 5, self::E::y = 6, super core::Object::•()
     ;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect
index 789eed9..b80822e 100644
--- a/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/issue43363.dart.textual_outline.expect
@@ -2,8 +2,8 @@
   final int x;
   final int y;
   E() : this.named(), this.x = 1;
-  this.
-  y = 2;
+  this.y ()= ;
+  2;
   E.named() : this.x = 5, this.y = 6;
 }
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.strong.expect b/pkg/front_end/testcases/general/issue45003/main.dart.strong.expect
index 1ef0b54..2888955 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.strong.expect
@@ -21,7 +21,7 @@
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
-  static factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
+  static const factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
     return new bar::Bar::•<dynamic>();
 }
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue45003/main.dart.strong.modular.expect
index 1ef0b54..2888955 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.strong.modular.expect
@@ -21,7 +21,7 @@
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
-  static factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
+  static const factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
     return new bar::Bar::•<dynamic>();
 }
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect
index f8cb6b1..bfb46b8 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.strong.outline.expect
@@ -23,7 +23,7 @@
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
-  static factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
+  static const factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
     return new bar::Bar::•<dynamic>();
 }
 
diff --git a/pkg/front_end/testcases/general/issue45003/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue45003/main.dart.strong.transformed.expect
index 1ef0b54..2888955 100644
--- a/pkg/front_end/testcases/general/issue45003/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003/main.dart.strong.transformed.expect
@@ -21,7 +21,7 @@
   const constructor •() → foo::Foo
     : super core::Object::•()
     ;
-  static factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
+  static const factory bar() → foo::Foo /* redirection-target: bar::Bar::•<dynamic>*/
     return new bar::Bar::•<dynamic>();
 }
 
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.strong.expect b/pkg/front_end/testcases/general/issue45003_2.dart.strong.expect
index 5691b85..8d8949b 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.strong.expect
@@ -16,7 +16,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue45003_2.dart.strong.modular.expect
index 5691b85..8d8949b 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.strong.modular.expect
@@ -16,7 +16,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect
index dc23927..ed07176 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.strong.outline.expect
@@ -16,7 +16,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/issue45003_2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue45003_2.dart.strong.transformed.expect
index 5691b85..8d8949b 100644
--- a/pkg/front_end/testcases/general/issue45003_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45003_2.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory foo() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect
index 55463c0..ab9cb0c 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.expect
@@ -16,7 +16,7 @@
 @/* from org-dartlang-testcase:///patch_lib.dart */ #C4
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
     return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.modular.expect
index 55463c0..ab9cb0c 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.modular.expect
@@ -16,7 +16,7 @@
 @/* from org-dartlang-testcase:///patch_lib.dart */ #C4
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
     return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect
index a14d1ea..b5f8fcd 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.outline.expect
@@ -17,7 +17,7 @@
 @/* from org-dartlang-testcase:///patch_lib.dart *//*original= core::pragma::•*/ const core::pragma::_("vm:entry-point")
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @_in::patch
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
     return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
diff --git a/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect
index 55463c0..ab9cb0c 100644
--- a/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45101/main.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 @/* from org-dartlang-testcase:///patch_lib.dart */ #C4
 class Array<T extends core::Object? = dynamic> extends core::Object {
   @#C1
-  static factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
+  static const factory /* from org-dartlang-testcase:///patch_lib.dart */ •<T extends core::Object? = dynamic>(core::int foo) → self2::Array<self2::Array::•::T%> /* redirection-target: self2::_ArraySize::•<self2::Array::•::T%>*/
     return new self2::_ArraySize::•<self2::Array::•::T%>(foo);
 }
 class _ArraySize<T extends core::Object? = dynamic> extends core::Object implements self2::Array<self2::_ArraySize::T%> /*hasConstConstructor*/  { // from org-dartlang-testcase:///patch_lib.dart
diff --git a/pkg/front_end/testcases/general/issue47036.dart.strong.expect b/pkg/front_end/testcases/general/issue47036.dart.strong.expect
index 0eb8f3f..e49c741 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.strong.expect
@@ -9,15 +9,15 @@
     ;
 }
 class Settings extends core::Object {
-  static factory •({@#C2 self::Sidebar sidebar = #C1}) → self::Settings /* redirection-target: self::_SSettings::• */
+  static const factory •({@#C2 self::Sidebar sidebar = #C1}) → self::Settings /* redirection-target: self::_SSettings::• */
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
+  static const factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static factory •({self::Sidebar sidebar = #C1}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
+  static const factory •({self::Sidebar sidebar = #C1}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -27,7 +27,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
+  static const factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
     return new self::_$_SSidebar::•();
 }
 class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue47036.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue47036.dart.strong.modular.expect
index 0eb8f3f..e49c741 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.strong.modular.expect
@@ -9,15 +9,15 @@
     ;
 }
 class Settings extends core::Object {
-  static factory •({@#C2 self::Sidebar sidebar = #C1}) → self::Settings /* redirection-target: self::_SSettings::• */
+  static const factory •({@#C2 self::Sidebar sidebar = #C1}) → self::Settings /* redirection-target: self::_SSettings::• */
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
+  static const factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static factory •({self::Sidebar sidebar = #C1}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
+  static const factory •({self::Sidebar sidebar = #C1}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -27,7 +27,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
+  static const factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
     return new self::_$_SSidebar::•();
 }
 class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect
index b3f211d..3ee1f1a 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.strong.outline.expect
@@ -9,15 +9,15 @@
     ;
 }
 class Settings extends core::Object {
-  static factory •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::Settings /* redirection-target: self::_SSettings::• */
+  static const factory •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::Settings /* redirection-target: self::_SSettings::• */
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
+  static const factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static factory •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
+  static const factory •({self::Sidebar sidebar = /*original=self::Sidebar::•*/ const self::_$_SSidebar::•()}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -27,7 +27,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
+  static const factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
     return new self::_$_SSidebar::•();
 }
 class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue47036.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue47036.dart.strong.transformed.expect
index 0eb8f3f..e49c741 100644
--- a/pkg/front_end/testcases/general/issue47036.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47036.dart.strong.transformed.expect
@@ -9,15 +9,15 @@
     ;
 }
 class Settings extends core::Object {
-  static factory •({@#C2 self::Sidebar sidebar = #C1}) → self::Settings /* redirection-target: self::_SSettings::• */
+  static const factory •({@#C2 self::Sidebar sidebar = #C1}) → self::Settings /* redirection-target: self::_SSettings::• */
     return self::_SSettings::•(sidebar: sidebar);
 }
 class Sidebar extends core::Object {
-  static factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
+  static const factory •() → self::Sidebar /* redirection-target: self::_SSidebar::• */
     return self::_SSidebar::•();
 }
 abstract class _SSettings extends core::Object implements self::Settings {
-  static factory •({self::Sidebar sidebar = #C1}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
+  static const factory •({self::Sidebar sidebar = #C1}) → self::_SSettings /* redirection-target: self::_$_SSettings::• */
     return new self::_$_SSettings::•(sidebar: sidebar);
 }
 class _$_SSettings extends core::Object implements self::_SSettings /*hasConstConstructor*/  {
@@ -27,7 +27,7 @@
     ;
 }
 abstract class _SSidebar extends core::Object implements self::Sidebar {
-  static factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
+  static const factory •() → self::_SSidebar /* redirection-target: self::_$_SSidebar::• */
     return new self::_$_SSidebar::•();
 }
 class _$_SSidebar extends core::Object implements self::_SSidebar /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue47339.dart.strong.expect b/pkg/front_end/testcases/general/issue47339.dart.strong.expect
index 9cd7e42..bd22be5 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.strong.expect
@@ -8,14 +8,14 @@
   const constructor named() → self::Foo
     : super core::Object::•()
     ;
-  static factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
+  static const factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
     return new self::Foo::named();
 }
 class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
   const constructor named() → self::FooGeneric<self::FooGeneric::X%>
     : super core::Object::•()
     ;
-  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
+  static const factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
 static const field self::Foo bar = #C1;
diff --git a/pkg/front_end/testcases/general/issue47339.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue47339.dart.strong.modular.expect
index 9cd7e42..bd22be5 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.strong.modular.expect
@@ -8,14 +8,14 @@
   const constructor named() → self::Foo
     : super core::Object::•()
     ;
-  static factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
+  static const factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
     return new self::Foo::named();
 }
 class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
   const constructor named() → self::FooGeneric<self::FooGeneric::X%>
     : super core::Object::•()
     ;
-  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
+  static const factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
 static const field self::Foo bar = #C1;
diff --git a/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect
index e4a543e..7884db5 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.strong.outline.expect
@@ -8,14 +8,14 @@
   const constructor named() → self::Foo
     : super core::Object::•()
     ;
-  static factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
+  static const factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
     return new self::Foo::named();
 }
 class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
   const constructor named() → self::FooGeneric<self::FooGeneric::X%>
     : super core::Object::•()
     ;
-  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
+  static const factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
 static const field self::Foo bar = const self::Foo::named();
diff --git a/pkg/front_end/testcases/general/issue47339.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue47339.dart.strong.transformed.expect
index 9cd7e42..bd22be5 100644
--- a/pkg/front_end/testcases/general/issue47339.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47339.dart.strong.transformed.expect
@@ -8,14 +8,14 @@
   const constructor named() → self::Foo
     : super core::Object::•()
     ;
-  static factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
+  static const factory namedFactory() → self::Foo /* redirection-target: self::Foo::named */
     return new self::Foo::named();
 }
 class FooGeneric<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
   const constructor named() → self::FooGeneric<self::FooGeneric::X%>
     : super core::Object::•()
     ;
-  static factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
+  static const factory namedFactory<X extends core::Object? = dynamic>() → self::FooGeneric<self::FooGeneric::namedFactory::X%> /* redirection-target: self::FooGeneric::named<self::FooGeneric::namedFactory::X%>*/
     return new self::FooGeneric::named<self::FooGeneric::namedFactory::X%>();
 }
 static const field self::Foo bar = #C1;
diff --git a/pkg/front_end/testcases/general/issue49087.dart.strong.expect b/pkg/front_end/testcases/general/issue49087.dart.strong.expect
index 66e839c..cb691f9 100644
--- a/pkg/front_end/testcases/general/issue49087.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue49087.dart.strong.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x, {core::String? y = #C1}) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x, y: y);
 }
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/general/issue49087.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue49087.dart.strong.modular.expect
index 66e839c..cb691f9 100644
--- a/pkg/front_end/testcases/general/issue49087.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue49087.dart.strong.modular.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x, {core::String? y = #C1}) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x, y: y);
 }
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/general/issue49087.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue49087.dart.strong.outline.expect
index 3580b1f..fecc699 100644
--- a/pkg/front_end/testcases/general/issue49087.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue49087.dart.strong.outline.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x, {core::String? y = null}) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x, {core::String? y = null}) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x, {core::String? y = null}) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x, y: y);
 }
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/general/issue49087.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue49087.dart.strong.transformed.expect
index 66e839c..cb691f9 100644
--- a/pkg/front_end/testcases/general/issue49087.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue49087.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x, {core::String? y = #C1}) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x, {core::String? y = #C1}) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x, y: y);
 }
 static method test1() → dynamic
diff --git a/pkg/front_end/testcases/general/issue54267b.dart.strong.expect b/pkg/front_end/testcases/general/issue54267b.dart.strong.expect
index 8233bc0..db13e73 100644
--- a/pkg/front_end/testcases/general/issue54267b.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue54267b.dart.strong.expect
@@ -26,7 +26,7 @@
   const A(this.value);
                ^^^^^";
   const constructor •(core::int #index, core::String #name, dynamic value) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
   const A(this.value);
                ^^^^^"
     ;
@@ -35,7 +35,7 @@
 }
 static method fn(self::A a) → core::int
   return block {
-    core::int #t2;
+    core::int #t1;
     #L1:
     switch(a) /* isExplicitlyExhaustive, self::A */ {
       #L2:
@@ -43,7 +43,7 @@
   const A(this.value);
                ^^^^^":
         {
-          #t2 = 0;
+          #t1 = 0;
           break #L1;
         }
       #L3:
@@ -51,11 +51,11 @@
   const A(this.value);
                ^^^^^":
         {
-          #t2 = 1;
+          #t1 = 1;
           break #L1;
         }
     }
-  } =>#t2;
+  } =>#t1;
 
 
 
diff --git a/pkg/front_end/testcases/general/issue54267b.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue54267b.dart.strong.modular.expect
index 8233bc0..db13e73 100644
--- a/pkg/front_end/testcases/general/issue54267b.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue54267b.dart.strong.modular.expect
@@ -26,7 +26,7 @@
   const A(this.value);
                ^^^^^";
   const constructor •(core::int #index, core::String #name, dynamic value) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
   const A(this.value);
                ^^^^^"
     ;
@@ -35,7 +35,7 @@
 }
 static method fn(self::A a) → core::int
   return block {
-    core::int #t2;
+    core::int #t1;
     #L1:
     switch(a) /* isExplicitlyExhaustive, self::A */ {
       #L2:
@@ -43,7 +43,7 @@
   const A(this.value);
                ^^^^^":
         {
-          #t2 = 0;
+          #t1 = 0;
           break #L1;
         }
       #L3:
@@ -51,11 +51,11 @@
   const A(this.value);
                ^^^^^":
         {
-          #t2 = 1;
+          #t1 = 1;
           break #L1;
         }
     }
-  } =>#t2;
+  } =>#t1;
 
 
 
diff --git a/pkg/front_end/testcases/general/issue54267b.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue54267b.dart.strong.outline.expect
index 60c9488..95c027d 100644
--- a/pkg/front_end/testcases/general/issue54267b.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue54267b.dart.strong.outline.expect
@@ -15,7 +15,7 @@
   final field core::int value2;
   static const field core::List<self::A> values = const <self::A>[self::A::a, self::A::b];
   const constructor •(core::int #index, core::String #name, dynamic value) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
   const A(this.value);
                ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/issue54267b.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue54267b.dart.strong.transformed.expect
index 8233bc0..db13e73 100644
--- a/pkg/front_end/testcases/general/issue54267b.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue54267b.dart.strong.transformed.expect
@@ -26,7 +26,7 @@
   const A(this.value);
                ^^^^^";
   const constructor •(core::int #index, core::String #name, dynamic value) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/general/issue54267b.dart:10:16: Error: 'value' isn't an instance field of this class.
   const A(this.value);
                ^^^^^"
     ;
@@ -35,7 +35,7 @@
 }
 static method fn(self::A a) → core::int
   return block {
-    core::int #t2;
+    core::int #t1;
     #L1:
     switch(a) /* isExplicitlyExhaustive, self::A */ {
       #L2:
@@ -43,7 +43,7 @@
   const A(this.value);
                ^^^^^":
         {
-          #t2 = 0;
+          #t1 = 0;
           break #L1;
         }
       #L3:
@@ -51,11 +51,11 @@
   const A(this.value);
                ^^^^^":
         {
-          #t2 = 1;
+          #t1 = 1;
           break #L1;
         }
     }
-  } =>#t2;
+  } =>#t1;
 
 
 
diff --git a/pkg/front_end/testcases/general/issue55152.dart.strong.expect b/pkg/front_end/testcases/general/issue55152.dart.strong.expect
index 4ca36cf..103efad 100644
--- a/pkg/front_end/testcases/general/issue55152.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55152.dart.strong.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
     return new self::A::•<self::A::redir::X%>();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/general/issue55152.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55152.dart.strong.modular.expect
index 4ca36cf..103efad 100644
--- a/pkg/front_end/testcases/general/issue55152.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55152.dart.strong.modular.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
     return new self::A::•<self::A::redir::X%>();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect
index 388278c..3c92336 100644
--- a/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152.dart.strong.outline.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
     return new self::A::•<self::A::redir::X%>();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/general/issue55152.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55152.dart.strong.transformed.expect
index 4ca36cf..103efad 100644
--- a/pkg/front_end/testcases/general/issue55152.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55152.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A<self::A::X%>
     : super core::Object::•()
     ;
-  static factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
+  static const factory redir<X extends core::Object? = dynamic>() → self::A<self::A::redir::X%> /* redirection-target: self::A::•<self::A::redir::X%>*/
     return new self::A::•<self::A::redir::X%>();
 }
 class E extends core::_Enum /*isEnum*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_2.dart.strong.expect b/pkg/front_end/testcases/general/issue55152_2.dart.strong.expect
index e9b6ee5..70825c2 100644
--- a/pkg/front_end/testcases/general/issue55152_2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55152_2.dart.strong.expect
@@ -13,13 +13,13 @@
   const constructor named2() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory redir2() → self::A /* redirection-target: self::B::• */
+  static const factory redir2() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
-  static factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
+  static const factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
     return new self::A::named2();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_2.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55152_2.dart.strong.modular.expect
index e9b6ee5..70825c2 100644
--- a/pkg/front_end/testcases/general/issue55152_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55152_2.dart.strong.modular.expect
@@ -13,13 +13,13 @@
   const constructor named2() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory redir2() → self::A /* redirection-target: self::B::• */
+  static const factory redir2() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
-  static factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
+  static const factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
     return new self::A::named2();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152_2.dart.strong.outline.expect
index 1fd2334..fcd3634 100644
--- a/pkg/front_end/testcases/general/issue55152_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152_2.dart.strong.outline.expect
@@ -13,13 +13,13 @@
   const constructor named2() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory redir2() → self::A /* redirection-target: self::B::• */
+  static const factory redir2() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
-  static factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
+  static const factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
     return new self::A::named2();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55152_2.dart.strong.transformed.expect
index e9b6ee5..70825c2 100644
--- a/pkg/front_end/testcases/general/issue55152_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55152_2.dart.strong.transformed.expect
@@ -13,13 +13,13 @@
   const constructor named2() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory redir2() → self::A /* redirection-target: self::B::• */
+  static const factory redir2() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
-  static factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
+  static const factory selfRedir2() → self::A /* redirection-target: self::A::named2 */
     return new self::A::named2();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_3.dart.strong.expect b/pkg/front_end/testcases/general/issue55152_3.dart.strong.expect
index 3535285..36ba047 100644
--- a/pkg/front_end/testcases/general/issue55152_3.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55152_3.dart.strong.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class Const<X extends core::Object? = dynamic> extends core::Object {
-  static factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
+  static const factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
     return new self::_ConstImpl::•<self::Const::impl::X%>();
 }
 class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const<self::_ConstImpl::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_3.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55152_3.dart.strong.modular.expect
index 3535285..36ba047 100644
--- a/pkg/front_end/testcases/general/issue55152_3.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55152_3.dart.strong.modular.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class Const<X extends core::Object? = dynamic> extends core::Object {
-  static factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
+  static const factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
     return new self::_ConstImpl::•<self::Const::impl::X%>();
 }
 class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const<self::_ConstImpl::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_3.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152_3.dart.strong.outline.expect
index 3535285..36ba047 100644
--- a/pkg/front_end/testcases/general/issue55152_3.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152_3.dart.strong.outline.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class Const<X extends core::Object? = dynamic> extends core::Object {
-  static factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
+  static const factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
     return new self::_ConstImpl::•<self::Const::impl::X%>();
 }
 class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const<self::_ConstImpl::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_3.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55152_3.dart.strong.transformed.expect
index 3535285..36ba047 100644
--- a/pkg/front_end/testcases/general/issue55152_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55152_3.dart.strong.transformed.expect
@@ -19,7 +19,7 @@
     ;
 }
 abstract class Const<X extends core::Object? = dynamic> extends core::Object {
-  static factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
+  static const factory impl<X extends core::Object? = dynamic>() → self::Const<self::Const::impl::X%> /* redirection-target: self::_ConstImpl::•<self::Const::impl::X%>*/
     return new self::_ConstImpl::•<self::Const::impl::X%>();
 }
 class _ConstImpl<T extends core::Object? = dynamic> extends core::Object implements self::Const<self::_ConstImpl::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_4.dart.strong.expect b/pkg/front_end/testcases/general/issue55152_4.dart.strong.expect
index 8e41906..ef65ee6 100644
--- a/pkg/front_end/testcases/general/issue55152_4.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55152_4.dart.strong.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 static const field core::List<self::A> test1 = #C2;
diff --git a/pkg/front_end/testcases/general/issue55152_4.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55152_4.dart.strong.modular.expect
index 8e41906..ef65ee6 100644
--- a/pkg/front_end/testcases/general/issue55152_4.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55152_4.dart.strong.modular.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 static const field core::List<self::A> test1 = #C2;
diff --git a/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect
index 18df973..ba0ea40 100644
--- a/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152_4.dart.strong.outline.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 static const field core::List<self::A> test1 = const <self::A>[/*original=self::A::redir*/ const self::A::•()];
diff --git a/pkg/front_end/testcases/general/issue55152_4.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55152_4.dart.strong.transformed.expect
index 8e41906..ef65ee6 100644
--- a/pkg/front_end/testcases/general/issue55152_4.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55152_4.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::A::• */
+  static const factory redir() → self::A /* redirection-target: self::A::• */
     return new self::A::•();
 }
 static const field core::List<self::A> test1 = #C2;
diff --git a/pkg/front_end/testcases/general/issue55152_5.dart.strong.expect b/pkg/front_end/testcases/general/issue55152_5.dart.strong.expect
index 1e7823b..6a8572c 100644
--- a/pkg/front_end/testcases/general/issue55152_5.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55152_5.dart.strong.expect
@@ -10,9 +10,9 @@
   const constructor named() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_5.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55152_5.dart.strong.modular.expect
index 1e7823b..6a8572c 100644
--- a/pkg/front_end/testcases/general/issue55152_5.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55152_5.dart.strong.modular.expect
@@ -10,9 +10,9 @@
   const constructor named() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect
index daf7eac..6e5c5db 100644
--- a/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55152_5.dart.strong.outline.expect
@@ -10,9 +10,9 @@
   const constructor named() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55152_5.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55152_5.dart.strong.transformed.expect
index 1e7823b..6a8572c 100644
--- a/pkg/front_end/testcases/general/issue55152_5.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55152_5.dart.strong.transformed.expect
@@ -10,9 +10,9 @@
   const constructor named() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
-  static factory selfRedir() → self::A /* redirection-target: self::A::named */
+  static const factory selfRedir() → self::A /* redirection-target: self::A::named */
     return new self::A::named();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55849_2.dart.strong.expect b/pkg/front_end/testcases/general/issue55849_2.dart.strong.expect
index ae13b5a..b844187 100644
--- a/pkg/front_end/testcases/general/issue55849_2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55849_2.dart.strong.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x);
 }
 @#C1
diff --git a/pkg/front_end/testcases/general/issue55849_2.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55849_2.dart.strong.modular.expect
index ae13b5a..b844187 100644
--- a/pkg/front_end/testcases/general/issue55849_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55849_2.dart.strong.modular.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x);
 }
 @#C1
diff --git a/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect
index 0496ab0..057958c 100644
--- a/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55849_2.dart.strong.outline.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x);
 }
 @/*original=self::A::redir*/ const self::A::•(1)
diff --git a/pkg/front_end/testcases/general/issue55849_2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55849_2.dart.strong.transformed.expect
index ae13b5a..b844187 100644
--- a/pkg/front_end/testcases/general/issue55849_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55849_2.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   const constructor •(core::int x) → self::A
     : super core::Object::•()
     ;
-  static factory redir(core::int x) → self::A /* redirection-target: self::A::• */
+  static const factory redir(core::int x) → self::A /* redirection-target: self::A::• */
     return new self::A::•(x);
 }
 @#C1
diff --git a/pkg/front_end/testcases/general/issue55849_3.dart.strong.expect b/pkg/front_end/testcases/general/issue55849_3.dart.strong.expect
index b09cbc3..fa978ed 100644
--- a/pkg/front_end/testcases/general/issue55849_3.dart.strong.expect
+++ b/pkg/front_end/testcases/general/issue55849_3.dart.strong.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55849_3.dart.strong.modular.expect b/pkg/front_end/testcases/general/issue55849_3.dart.strong.modular.expect
index b09cbc3..fa978ed 100644
--- a/pkg/front_end/testcases/general/issue55849_3.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/issue55849_3.dart.strong.modular.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect b/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect
index afeb964..8167f9c 100644
--- a/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/issue55849_3.dart.strong.outline.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/issue55849_3.dart.strong.transformed.expect b/pkg/front_end/testcases/general/issue55849_3.dart.strong.transformed.expect
index b09cbc3..fa978ed 100644
--- a/pkg/front_end/testcases/general/issue55849_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/issue55849_3.dart.strong.transformed.expect
@@ -6,7 +6,7 @@
   const constructor •() → self::A
     : super core::Object::•()
     ;
-  static factory redir() → self::A /* redirection-target: self::B::• */
+  static const factory redir() → self::A /* redirection-target: self::B::• */
     return new self::B::•();
 }
 class B extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.strong.expect b/pkg/front_end/testcases/general/missing_constructor.dart.strong.expect
index ced21f9..150ebf4 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.strong.expect
@@ -36,24 +36,24 @@
 }
 class Sub extends self::Super {
   constructor •() → self::Sub
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
   Sub() : super();
           ^^^^^"
     ;
   constructor foo() → self::Sub
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
   Sub.foo() : super.foo();
               ^^^^^"
     ;
 }
 class Bad extends core::Object {
   constructor foo() → self::Bad
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
   Bad.foo() : this();
               ^^^^"
     ;
   constructor bar() → self::Bad
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
   Bad.bar() : this.baz();
                    ^^^"
     ;
@@ -62,12 +62,12 @@
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
   constructor •() → self::MixinApplication
-    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
   MixinApplication() : super();
                        ^^^^^"
     ;
   constructor foo() → self::MixinApplication
-    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
   MixinApplication.foo() : super.foo();
                            ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/general/missing_constructor.dart.strong.modular.expect
index ced21f9..150ebf4 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.strong.modular.expect
@@ -36,24 +36,24 @@
 }
 class Sub extends self::Super {
   constructor •() → self::Sub
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
   Sub() : super();
           ^^^^^"
     ;
   constructor foo() → self::Sub
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
   Sub.foo() : super.foo();
               ^^^^^"
     ;
 }
 class Bad extends core::Object {
   constructor foo() → self::Bad
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
   Bad.foo() : this();
               ^^^^"
     ;
   constructor bar() → self::Bad
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
   Bad.bar() : this.baz();
                    ^^^"
     ;
@@ -62,12 +62,12 @@
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
   constructor •() → self::MixinApplication
-    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
   MixinApplication() : super();
                        ^^^^^"
     ;
   constructor foo() → self::MixinApplication
-    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
   MixinApplication.foo() : super.foo();
                            ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/missing_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/general/missing_constructor.dart.strong.transformed.expect
index 8a09b98..9040c0f 100644
--- a/pkg/front_end/testcases/general/missing_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_constructor.dart.strong.transformed.expect
@@ -36,24 +36,24 @@
 }
 class Sub extends self::Super {
   constructor •() → self::Sub
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
   Sub() : super();
           ^^^^^"
     ;
   constructor foo() → self::Sub
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
   Sub.foo() : super.foo();
               ^^^^^"
     ;
 }
 class Bad extends core::Object {
   constructor foo() → self::Bad
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
   Bad.foo() : this();
               ^^^^"
     ;
   constructor bar() → self::Bad
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
   Bad.bar() : this.baz();
                    ^^^"
     ;
@@ -62,12 +62,12 @@
 }
 class MixinApplication extends self::_MixinApplication&Super&M {
   constructor •() → self::MixinApplication
-    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
   MixinApplication() : super();
                        ^^^^^"
     ;
   constructor foo() → self::MixinApplication
-    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
+    : invalid-initializer "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
   MixinApplication.foo() : super.foo();
                            ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.expect
index 2d6194a..d9570b2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.expect
@@ -9,7 +9,7 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.modular.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.modular.expect
index 2d6194a..d9570b2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.modular.expect
@@ -9,7 +9,7 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect
index cb76085..3e00228 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.outline.expect
@@ -8,7 +8,7 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.transformed.expect
index 2d6194a..d9570b2 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir() → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>();
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.expect
index 8db2dcf..55ce276 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.expect
@@ -12,9 +12,9 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
-  static factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.modular.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.modular.expect
index 8db2dcf..55ce276 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.modular.expect
@@ -12,9 +12,9 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
-  static factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect
index 6df6f15..45a5920 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.outline.expect
@@ -10,9 +10,9 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
-  static factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.transformed.expect
index 105c064..e591b62 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_2.dart.strong.transformed.expect
@@ -12,9 +12,9 @@
     ;
 }
 abstract class A extends core::Object {
-  static factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir1(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
-  static factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
+  static const factory redir2(core::int x, {required core::String s}) → self::A /* redirection-target: self::B::•<dynamic>*/
     return new self::B::•<dynamic>(x, s: s);
 }
 class B<X extends core::Object? = dynamic> extends core::Object implements self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.expect
index 61b3f85..a52dd75 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.expect
@@ -12,9 +12,9 @@
     ;
 }
 abstract class A<X extends core::Object? = dynamic> extends core::Object {
-  static factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
+  static const factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
     return new self::B::•<self::A::redir1::X%>(x, s: s);
-  static factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
+  static const factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
     return new self::B::•<self::A::redir2::X%>(x, s: s);
 }
 class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.modular.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.modular.expect
index 61b3f85..a52dd75 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.modular.expect
@@ -12,9 +12,9 @@
     ;
 }
 abstract class A<X extends core::Object? = dynamic> extends core::Object {
-  static factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
+  static const factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
     return new self::B::•<self::A::redir1::X%>(x, s: s);
-  static factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
+  static const factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
     return new self::B::•<self::A::redir2::X%>(x, s: s);
 }
 class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect
index c631fd1..751c520 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.outline.expect
@@ -10,9 +10,9 @@
     ;
 }
 abstract class A<X extends core::Object? = dynamic> extends core::Object {
-  static factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
+  static const factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
     return new self::B::•<self::A::redir1::X%>(x, s: s);
-  static factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
+  static const factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
     return new self::B::•<self::A::redir2::X%>(x, s: s);
 }
 class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.transformed.expect
index c1da56f..8ad8f35 100644
--- a/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_constructors_declaration_order_3.dart.strong.transformed.expect
@@ -12,9 +12,9 @@
     ;
 }
 abstract class A<X extends core::Object? = dynamic> extends core::Object {
-  static factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
+  static const factory redir1<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir1::X%> /* redirection-target: self::B::•<self::A::redir1::X%>*/
     return new self::B::•<self::A::redir1::X%>(x, s: s);
-  static factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
+  static const factory redir2<X extends core::Object? = dynamic>(core::int x, {required core::String s}) → self::A<self::A::redir2::X%> /* redirection-target: self::B::•<self::A::redir2::X%>*/
     return new self::B::•<self::A::redir2::X%>(x, s: s);
 }
 class B<Y extends core::Object? = dynamic> extends core::Object implements self::A<self::B::Y%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect
index a8b3d51..66f915b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
     return new self::_Y::•<self::_X::•::T%>();
 }
 class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.modular.expect
index a8b3d51..66f915b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.modular.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
     return new self::_Y::•<self::_X::•::T%>();
 }
 class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.outline.expect
index ca624a3..4a2d8ec 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
     return new self::_Y::•<self::_X::•::T%>();
 }
 class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect
index a8b3d51..66f915b 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_const_inference.dart.strong.transformed.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class _X<T extends core::Object? = dynamic> extends core::Object {
-  static factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
+  static const factory •<T extends core::Object? = dynamic>() → self::_X<self::_X::•::T%> /* redirection-target: self::_Y::•<self::_X::•::T%>*/
     return new self::_Y::•<self::_X::•::T%>();
 }
 class _Y<T extends core::Object? = dynamic> extends core::Object implements self::_X<self::_Y::T%> /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.expect
index 9bbd0e5..6045b27 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.expect
@@ -23,7 +23,7 @@
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
-  static factory •() → self::Const /* redirection-target: self::Const::internal */
+  static const factory •() → self::Const /* redirection-target: self::Const::internal */
     return new self::Const::internal();
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.modular.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.modular.expect
index 9bbd0e5..6045b27 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.modular.expect
@@ -23,7 +23,7 @@
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
-  static factory •() → self::Const /* redirection-target: self::Const::internal */
+  static const factory •() → self::Const /* redirection-target: self::Const::internal */
     return new self::Const::internal();
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect
index d837f6b..134e030 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.outline.expect
@@ -20,7 +20,7 @@
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
-  static factory •() → self::Const /* redirection-target: self::Const::internal */
+  static const factory •() → self::Const /* redirection-target: self::Const::internal */
     return new self::Const::internal();
 }
 class Class<@/*original=self::Const::•*/ const self::Const::internal() T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.transformed.expect
index 9bbd0e5..6045b27 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_invocation_metadata.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
   const constructor internal() → self::Const
     : super core::Object::•()
     ;
-  static factory •() → self::Const /* redirection-target: self::Const::internal */
+  static const factory •() → self::Const /* redirection-target: self::Const::internal */
     return new self::Const::internal();
 }
 class Class<@#C1 T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect
index 9077b46..6aef3db 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.expect
@@ -9,7 +9,7 @@
   const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A /* redirection-target: self::B::•<core::String>*/
+  static const factory •() → self::A /* redirection-target: self::B::•<core::String>*/
     return new self::B::•<core::String>();
 }
 class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.modular.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.modular.expect
index 9077b46..6aef3db 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.modular.expect
@@ -9,7 +9,7 @@
   const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A /* redirection-target: self::B::•<core::String>*/
+  static const factory •() → self::A /* redirection-target: self::B::•<core::String>*/
     return new self::B::•<core::String>();
 }
 class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.outline.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.outline.expect
index e3ec556..aea0be4 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.outline.expect
@@ -8,7 +8,7 @@
   const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A /* redirection-target: self::B::•<core::String>*/
+  static const factory •() → self::A /* redirection-target: self::B::•<core::String>*/
     return new self::B::•<core::String>();
 }
 class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect
index 9077b46..6aef3db 100644
--- a/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/redirection_type_arguments.dart.strong.transformed.expect
@@ -9,7 +9,7 @@
   const constructor empty() → self::A
     : super core::Object::•()
     ;
-  static factory •() → self::A /* redirection-target: self::B::•<core::String>*/
+  static const factory •() → self::A /* redirection-target: self::B::•<core::String>*/
     return new self::B::•<core::String>();
 }
 class B<T extends core::Object? = dynamic> extends self::A /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.expect b/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.expect
index 80e6903..ab03457 100644
--- a/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.expect
@@ -111,31 +111,31 @@
     : super core::Object::•()
     ;
   constructor constructor1() → self::Super
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:38:26: Error: Couldn't find constructor 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:38:26: Error: Couldn't find constructor 'Super'.
   Super.constructor1() : this(); // Error
                          ^^^^"
     ;
   constructor constructor2() → self::Super
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:39:31: Error: Couldn't find constructor 'Super.named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:39:31: Error: Couldn't find constructor 'Super.named'.
   Super.constructor2() : this.named(); // Error
                               ^^^^^"
     ;
 }
 class Class1 extends self::Super {
   constructor •() → self::Class1
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:43:14: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:43:14: Error: Superclass has no constructor named 'Super'.
   Class1() : super(); // Error
              ^^^^^"
     ;
   constructor named() → self::Class1
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:44:20: Error: Superclass has no constructor named 'Super.named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:44:20: Error: Superclass has no constructor named 'Super.named'.
   Class1.named() : super.named(); // Error
                    ^^^^^"
     ;
 }
 class Class2 extends unr::Private {
   constructor named() → self::Class2
-    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:48:20: Error: Superclass has no constructor named 'Private._named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:48:20: Error: Superclass has no constructor named 'Private._named'.
   Class2.named() : super._named(); // Error
                    ^^^^^"
     ;
@@ -144,7 +144,7 @@
 }
 class Class3 extends self::_Class3&Private&Mixin {
   constructor named() → self::Class3
-    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:54:20: Error: Superclass has no constructor named 'Private._named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:54:20: Error: Superclass has no constructor named 'Private._named'.
   Class3.named() : super._named(); // Error
                    ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.modular.expect
index 80e6903..ab03457 100644
--- a/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.modular.expect
@@ -111,31 +111,31 @@
     : super core::Object::•()
     ;
   constructor constructor1() → self::Super
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:38:26: Error: Couldn't find constructor 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:38:26: Error: Couldn't find constructor 'Super'.
   Super.constructor1() : this(); // Error
                          ^^^^"
     ;
   constructor constructor2() → self::Super
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:39:31: Error: Couldn't find constructor 'Super.named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:39:31: Error: Couldn't find constructor 'Super.named'.
   Super.constructor2() : this.named(); // Error
                               ^^^^^"
     ;
 }
 class Class1 extends self::Super {
   constructor •() → self::Class1
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:43:14: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:43:14: Error: Superclass has no constructor named 'Super'.
   Class1() : super(); // Error
              ^^^^^"
     ;
   constructor named() → self::Class1
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:44:20: Error: Superclass has no constructor named 'Super.named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:44:20: Error: Superclass has no constructor named 'Super.named'.
   Class1.named() : super.named(); // Error
                    ^^^^^"
     ;
 }
 class Class2 extends unr::Private {
   constructor named() → self::Class2
-    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:48:20: Error: Superclass has no constructor named 'Private._named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:48:20: Error: Superclass has no constructor named 'Private._named'.
   Class2.named() : super._named(); // Error
                    ^^^^^"
     ;
@@ -144,7 +144,7 @@
 }
 class Class3 extends self::_Class3&Private&Mixin {
   constructor named() → self::Class3
-    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:54:20: Error: Superclass has no constructor named 'Private._named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:54:20: Error: Superclass has no constructor named 'Private._named'.
   Class3.named() : super._named(); // Error
                    ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.transformed.expect
index d7f6d61..1ffbba7 100644
--- a/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/unresolved_constructor.dart.strong.transformed.expect
@@ -111,31 +111,31 @@
     : super core::Object::•()
     ;
   constructor constructor1() → self::Super
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:38:26: Error: Couldn't find constructor 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:38:26: Error: Couldn't find constructor 'Super'.
   Super.constructor1() : this(); // Error
                          ^^^^"
     ;
   constructor constructor2() → self::Super
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:39:31: Error: Couldn't find constructor 'Super.named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:39:31: Error: Couldn't find constructor 'Super.named'.
   Super.constructor2() : this.named(); // Error
                               ^^^^^"
     ;
 }
 class Class1 extends self::Super {
   constructor •() → self::Class1
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:43:14: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:43:14: Error: Superclass has no constructor named 'Super'.
   Class1() : super(); // Error
              ^^^^^"
     ;
   constructor named() → self::Class1
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:44:20: Error: Superclass has no constructor named 'Super.named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:44:20: Error: Superclass has no constructor named 'Super.named'.
   Class1.named() : super.named(); // Error
                    ^^^^^"
     ;
 }
 class Class2 extends unr::Private {
   constructor named() → self::Class2
-    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:48:20: Error: Superclass has no constructor named 'Private._named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:48:20: Error: Superclass has no constructor named 'Private._named'.
   Class2.named() : super._named(); // Error
                    ^^^^^"
     ;
@@ -144,7 +144,7 @@
 }
 class Class3 extends self::_Class3&Private&Mixin {
   constructor named() → self::Class3
-    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor.dart:54:20: Error: Superclass has no constructor named 'Private._named'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor.dart:54:20: Error: Superclass has no constructor named 'Private._named'.
   Class3.named() : super._named(); // Error
                    ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.expect
index 8f9f6d4..6bff275 100644
--- a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.expect
@@ -494,22 +494,22 @@
 }
 class Class extends self::Super {
   constructor constructor1() → self::Class
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
   Class.constructor1() : super();
                          ^^^^^"
     ;
   constructor constructor2() → self::Class
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
   Class.constructor2() : super.unresolved();
                          ^^^^^"
     ;
   constructor constructor3() → self::Class
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
   Class.constructor3() : this();
                          ^^^^"
     ;
   constructor constructor4() → self::Class
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:31: Error: Couldn't find constructor 'Class.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:31: Error: Couldn't find constructor 'Class.unresolved'.
   Class.constructor4() : this.unresolved();
                               ^^^^^^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.modular.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.modular.expect
index 8f9f6d4..6bff275 100644
--- a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.modular.expect
@@ -494,22 +494,22 @@
 }
 class Class extends self::Super {
   constructor constructor1() → self::Class
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
   Class.constructor1() : super();
                          ^^^^^"
     ;
   constructor constructor2() → self::Class
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
   Class.constructor2() : super.unresolved();
                          ^^^^^"
     ;
   constructor constructor3() → self::Class
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
   Class.constructor3() : this();
                          ^^^^"
     ;
   constructor constructor4() → self::Class
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:31: Error: Couldn't find constructor 'Class.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:31: Error: Couldn't find constructor 'Class.unresolved'.
   Class.constructor4() : this.unresolved();
                               ^^^^^^^^^^"
     ;
diff --git a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.transformed.expect
index 8f9f6d4..6bff275 100644
--- a/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/unresolved_constructor_invocation.dart.strong.transformed.expect
@@ -494,22 +494,22 @@
 }
 class Class extends self::Super {
   constructor constructor1() → self::Class
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:14:26: Error: Superclass has no constructor named 'Super'.
   Class.constructor1() : super();
                          ^^^^^"
     ;
   constructor constructor2() → self::Class
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:15:26: Error: Superclass has no constructor named 'Super.unresolved'.
   Class.constructor2() : super.unresolved();
                          ^^^^^"
     ;
   constructor constructor3() → self::Class
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:16:26: Error: Couldn't find constructor 'Class'.
   Class.constructor3() : this();
                          ^^^^"
     ;
   constructor constructor4() → self::Class
-    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:31: Error: Couldn't find constructor 'Class.unresolved'.
+    : invalid-initializer "pkg/front_end/testcases/general/unresolved_constructor_invocation.dart:17:31: Error: Couldn't find constructor 'Class.unresolved'.
   Class.constructor4() : this.unresolved();
                               ^^^^^^^^^^"
     ;
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.1.expect b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.1.expect
index a2d080b..247cbab 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.1.expect
@@ -7,11 +7,12 @@
   static method foo() → dynamic {}
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
index e0d2f8e..41fe942 100644
--- a/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/await_in_non_async.yaml.world.2.expect
@@ -14,11 +14,12 @@
   static method foo() → dynamic {}
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
index 96f1f9d..95cc2e0 100644
--- a/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/bad_sdk_uri.yaml.world.3.expect
@@ -26,10 +26,11 @@
   }
 }
 
-And 19 platform libraries:
+And 20 platform libraries:
  - dart:_builtin
  - dart:_compact_hash
  - dart:_internal
+ - dart:_vm
  - dart:_vmservice
  - dart:async
  - dart:cli
diff --git a/pkg/front_end/testcases/incremental/extension_type.yaml.world.1.expect b/pkg/front_end/testcases/incremental/extension_type.yaml.world.1.expect
index 7b12fb3..3eb414c 100644
--- a/pkg/front_end/testcases/incremental/extension_type.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/extension_type.yaml.world.1.expect
@@ -7,7 +7,7 @@
     constructor _ = main::_Foo|constructor#_;
     constructor tearoff _ = main::_Foo|constructor#_#_#tearOff;
   }
-  static extension-type-member method _Foo|constructor#_(dart.core::int _foo) → main::_Foo% /* erasure=dart.core::int, declared=! */ {
+  static extension-type-member const method _Foo|constructor#_(dart.core::int _foo) → main::_Foo% /* erasure=dart.core::int, declared=! */ {
     lowered final main::_Foo% /* erasure=dart.core::int, declared=! */ #this = _foo;
     return #this;
   }
diff --git a/pkg/front_end/testcases/incremental/extension_type.yaml.world.2.expect b/pkg/front_end/testcases/incremental/extension_type.yaml.world.2.expect
index 7b12fb3..3eb414c 100644
--- a/pkg/front_end/testcases/incremental/extension_type.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/extension_type.yaml.world.2.expect
@@ -7,7 +7,7 @@
     constructor _ = main::_Foo|constructor#_;
     constructor tearoff _ = main::_Foo|constructor#_#_#tearOff;
   }
-  static extension-type-member method _Foo|constructor#_(dart.core::int _foo) → main::_Foo% /* erasure=dart.core::int, declared=! */ {
+  static extension-type-member const method _Foo|constructor#_(dart.core::int _foo) → main::_Foo% /* erasure=dart.core::int, declared=! */ {
     lowered final main::_Foo% /* erasure=dart.core::int, declared=! */ #this = _foo;
     return #this;
   }
diff --git a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.1.expect b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.1.expect
index cb47cd1..ea5befc 100644
--- a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.1.expect
@@ -8,7 +8,7 @@
       ;
   }
   abstract class BarX extends dart.core::Object {
-    static factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
+    static const factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
       return new lib::FooX::•(bar: bar);
   }
   class HelperClassX extends dart.core::Object {
@@ -44,7 +44,7 @@
     }
   }
   abstract class Bar extends dart.core::Object {
-    static factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
+    static const factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
       return block {
         final synthesized main::Foo :expressionValueWrappedFinalizable = new main::Foo::•(bar: bar);
         dart._internal::reachabilityFence(bar);
diff --git a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.2.expect b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.2.expect
index cb47cd1..ea5befc 100644
--- a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.2.expect
@@ -8,7 +8,7 @@
       ;
   }
   abstract class BarX extends dart.core::Object {
-    static factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
+    static const factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
       return new lib::FooX::•(bar: bar);
   }
   class HelperClassX extends dart.core::Object {
@@ -44,7 +44,7 @@
     }
   }
   abstract class Bar extends dart.core::Object {
-    static factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
+    static const factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
       return block {
         final synthesized main::Foo :expressionValueWrappedFinalizable = new main::Foo::•(bar: bar);
         dart._internal::reachabilityFence(bar);
diff --git a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.3.expect b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.3.expect
index cb47cd1..ea5befc 100644
--- a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.3.expect
@@ -8,7 +8,7 @@
       ;
   }
   abstract class BarX extends dart.core::Object {
-    static factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
+    static const factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
       return new lib::FooX::•(bar: bar);
   }
   class HelperClassX extends dart.core::Object {
@@ -44,7 +44,7 @@
     }
   }
   abstract class Bar extends dart.core::Object {
-    static factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
+    static const factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
       return block {
         final synthesized main::Foo :expressionValueWrappedFinalizable = new main::Foo::•(bar: bar);
         dart._internal::reachabilityFence(bar);
diff --git a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.4.expect b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.4.expect
index cb47cd1..ea5befc 100644
--- a/pkg/front_end/testcases/incremental/ffi_03.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/ffi_03.yaml.world.4.expect
@@ -8,7 +8,7 @@
       ;
   }
   abstract class BarX extends dart.core::Object {
-    static factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
+    static const factory •({required lib::HelperClassX bar}) → lib::BarX /* redirection-target: lib::FooX::• */
       return new lib::FooX::•(bar: bar);
   }
   class HelperClassX extends dart.core::Object {
@@ -44,7 +44,7 @@
     }
   }
   abstract class Bar extends dart.core::Object {
-    static factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
+    static const factory •({required main::HelperClass bar}) → main::Bar /* redirection-target: main::Foo::• */
       return block {
         final synthesized main::Foo :expressionValueWrappedFinalizable = new main::Foo::•(bar: bar);
         dart._internal::reachabilityFence(bar);
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
index 8355ccd..966a720 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.1.expect
@@ -54,7 +54,7 @@
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
-    static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar /* redirection-target: foo::Bar::_ */
+    static const factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar /* redirection-target: foo::Bar::_ */
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static synthetic method _#new#tearOff() → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
@@ -69,7 +69,7 @@
       return #C22;
     static synthetic method _#new#tearOff() → foo::Baz
       return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
-    static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz /* redirection-target: foo::Baz::__ */
+    static const factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz /* redirection-target: foo::Baz::__ */
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static synthetic method _#_#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
index 1833553..669d6bf 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.2.expect
@@ -54,7 +54,7 @@
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
-    static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar /* redirection-target: foo::Bar::_ */
+    static const factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar /* redirection-target: foo::Bar::_ */
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static synthetic method _#new#tearOff() → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
@@ -69,7 +69,7 @@
       return #C22;
     static synthetic method _#new#tearOff() → foo::Baz
       return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
-    static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz /* redirection-target: foo::Baz::__ */
+    static const factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz /* redirection-target: foo::Baz::__ */
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static synthetic method _#_#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
diff --git a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
index 518290d..bf07837 100644
--- a/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/flutter_widget_transform_const.yaml.world.3.expect
@@ -54,7 +54,7 @@
     const constructor _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar
       : super fra::Widget::•($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4)
       ;
-    static factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar /* redirection-target: foo::Bar::_ */
+    static const factory •({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Bar /* redirection-target: foo::Bar::_ */
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static synthetic method _#new#tearOff() → foo::Bar
       return new foo::Bar::_($creationLocationd_0dea112b090073317d4: #C16);
@@ -69,7 +69,7 @@
       return #C22;
     static synthetic method _#new#tearOff() → foo::Baz
       return foo::Baz::•($creationLocationd_0dea112b090073317d4: #C23);
-    static factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz /* redirection-target: foo::Baz::__ */
+    static const factory _({wid::_Location? $creationLocationd_0dea112b090073317d4 = #C1}) → foo::Baz /* redirection-target: foo::Baz::__ */
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: $creationLocationd_0dea112b090073317d4);
     static synthetic method _#_#tearOff() → foo::Baz
       return new foo::Baz::__($creationLocationd_0dea112b090073317d4: #C25);
diff --git a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
index b9a726a..f0b3df6 100644
--- a/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/issue_32366.yaml.world.2.expect
@@ -39,7 +39,7 @@
     final field invalid-type kjsdf = null;
     field dynamic ksjdf = null;
     constructor •(dynamic a) → main::Foo
-      : final dynamic #t1 = invalid-expression "org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.\n  Foo(this.a);\n           ^"
+      : invalid-initializer "org-dartlang-test:///main.dart:5:12: Error: 'a' isn't an instance field of this class.\n  Foo(this.a);\n           ^"
       ;
   }
   static method main() → dynamic {
diff --git a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
index 5e750fa..33462db 100644
--- a/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_41976.yaml.world.1.expect
@@ -5,7 +5,7 @@
     const constructor empty() → foo::Key
       : super dart.core::Object::•()
       ;
-    static factory •(dart.core::String value) → foo::Key /* redirection-target: foo::ValueKey::• */
+    static const factory •(dart.core::String value) → foo::Key /* redirection-target: foo::ValueKey::• */
       return new foo::ValueKey::•(value);
   }
   abstract class LocalKey extends foo::Key /*hasConstConstructor*/  {
diff --git a/pkg/front_end/testcases/incremental/issue_55357.yaml.world.1.expect b/pkg/front_end/testcases/incremental/issue_55357.yaml.world.1.expect
index a718626..2bd36b6 100644
--- a/pkg/front_end/testcases/incremental/issue_55357.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/issue_55357.yaml.world.1.expect
@@ -8,11 +8,12 @@
     return 42;
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/issue_55357.yaml.world.3.expect b/pkg/front_end/testcases/incremental/issue_55357.yaml.world.3.expect
index a718626..2bd36b6 100644
--- a/pkg/front_end/testcases/incremental/issue_55357.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/issue_55357.yaml.world.3.expect
@@ -8,11 +8,12 @@
     return 42;
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect
index 4968524..d3258cd 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.1.expect
@@ -16,11 +16,12 @@
   }
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect
index 4968524..d3258cd 100644
--- a/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/load_from_component_explicitly_import_dart_core.yaml.world.2.expect
@@ -16,11 +16,12 @@
   }
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.1.expect b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.1.expect
index 6cb4114..20980e1 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.1.expect
@@ -6,11 +6,12 @@
   }
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.4.expect b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.4.expect
index f7602a6..8ac8472 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.4.expect
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.4.expect
@@ -14,11 +14,12 @@
   }
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect
index 5342a05..3808d31 100644
--- a/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect
+++ b/pkg/front_end/testcases/incremental/omit_platform_works_3.yaml.world.5.expect
@@ -14,11 +14,12 @@
   }
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/patterns.yaml.world.1.expect b/pkg/front_end/testcases/incremental/patterns.yaml.world.1.expect
index d49cd13..7fadaf0 100644
--- a/pkg/front_end/testcases/incremental/patterns.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/patterns.yaml.world.1.expect
@@ -27,11 +27,12 @@
   #C1 = 0
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/patterns.yaml.world.2.expect b/pkg/front_end/testcases/incremental/patterns.yaml.world.2.expect
index 0db2f84..1ef9430 100644
--- a/pkg/front_end/testcases/incremental/patterns.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/patterns.yaml.world.2.expect
@@ -29,11 +29,12 @@
   #C1 = 0
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/incremental/patterns.yaml.world.3.expect b/pkg/front_end/testcases/incremental/patterns.yaml.world.3.expect
index d49cd13..7fadaf0 100644
--- a/pkg/front_end/testcases/incremental/patterns.yaml.world.3.expect
+++ b/pkg/front_end/testcases/incremental/patterns.yaml.world.3.expect
@@ -27,11 +27,12 @@
   #C1 = 0
 }
 
-And 20 platform libraries:
+And 21 platform libraries:
  - dart:_http
  - dart:_builtin
  - dart:vmservice_io
  - dart:_compact_hash
+ - dart:_vm
  - dart:async
  - dart:cli
  - dart:collection
diff --git a/pkg/front_end/testcases/modular.status b/pkg/front_end/testcases/modular.status
index eeb9583..ad115be 100644
--- a/pkg/front_end/testcases/modular.status
+++ b/pkg/front_end/testcases/modular.status
@@ -21,4 +21,5 @@
 coverage/static2_test: TypeCheckError
 
 # Temporarily unimplemented binary serialization, see https://github.com/dart-lang/sdk/issues/61765
-closure_context_lowering/local_functions: ExpectationFileMismatchSerialized
\ No newline at end of file
+closure_context_lowering/local_functions: ExpectationFileMismatchSerialized
+closure_context_lowering/local_variables: Crash
\ No newline at end of file
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
index a213072..c405121 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.expect
@@ -190,10 +190,10 @@
   static final field core::int finalStaticField = null;
   late field core::int lateInstanceField;
   constructor •(core::int initializedField1) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
-         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
+         ^^^^^^^^^^^^^^^^^", invalid-initializer "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
                                    ^^^^^^^^^^^^^^^^^"
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.modular.expect
index a213072..c405121 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.modular.expect
@@ -190,10 +190,10 @@
   static final field core::int finalStaticField = null;
   late field core::int lateInstanceField;
   constructor •(core::int initializedField1) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
-         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
+         ^^^^^^^^^^^^^^^^^", invalid-initializer "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
                                    ^^^^^^^^^^^^^^^^^"
diff --git a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
index a213072..c405121 100644
--- a/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/abstract_field_errors.dart.strong.transformed.expect
@@ -190,10 +190,10 @@
   static final field core::int finalStaticField = null;
   late field core::int lateInstanceField;
   constructor •(core::int initializedField1) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:10: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
-         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
+         ^^^^^^^^^^^^^^^^^", invalid-initializer "pkg/front_end/testcases/nnbd/abstract_field_errors.dart:18:36: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
                                    ^^^^^^^^^^^^^^^^^"
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect
index 30cc8af..6b9f931 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.expect
@@ -77,10 +77,10 @@
 
 abstract class A extends core::Object {
   constructor •(core::int initializedField1) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
 Try removing the field initializer or the 'external' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
-         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
+         ^^^^^^^^^^^^^^^^^", invalid-initializer "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
 Try removing the field initializer or the 'external' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
                                    ^^^^^^^^^^^^^^^^^"
@@ -111,7 +111,7 @@
 external static get topLevelField() → core::int;
 external static set topLevelField(synthesized core::int #externalFieldValue) → void;
 external static get finalTopLevelField() → core::int;
-external static get constField() → core::int;
+external static const get constField() → core::int;
 external static set constField(synthesized core::int #externalFieldValue) → void;
 external static extension-member method Extension|get#extensionInstanceField(lowered self::A #this) → core::int;
 external static extension-member method Extension|set#extensionInstanceField(lowered self::A #this, synthesized core::int #externalFieldValue) → void;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.modular.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.modular.expect
index 30cc8af..6b9f931 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.modular.expect
@@ -77,10 +77,10 @@
 
 abstract class A extends core::Object {
   constructor •(core::int initializedField1) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
 Try removing the field initializer or the 'external' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
-         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
+         ^^^^^^^^^^^^^^^^^", invalid-initializer "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
 Try removing the field initializer or the 'external' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
                                    ^^^^^^^^^^^^^^^^^"
@@ -111,7 +111,7 @@
 external static get topLevelField() → core::int;
 external static set topLevelField(synthesized core::int #externalFieldValue) → void;
 external static get finalTopLevelField() → core::int;
-external static get constField() → core::int;
+external static const get constField() → core::int;
 external static set constField(synthesized core::int #externalFieldValue) → void;
 external static extension-member method Extension|get#extensionInstanceField(lowered self::A #this) → core::int;
 external static extension-member method Extension|set#extensionInstanceField(lowered self::A #this, synthesized core::int #externalFieldValue) → void;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.outline.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.outline.expect
index a97de27..5f6d606 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.outline.expect
@@ -31,7 +31,7 @@
 external static get topLevelField() → core::int;
 external static set topLevelField(synthesized core::int #externalFieldValue) → void;
 external static get finalTopLevelField() → core::int;
-external static get constField() → core::int;
+external static const get constField() → core::int;
 external static set constField(synthesized core::int #externalFieldValue) → void;
 external static extension-member method Extension|get#extensionInstanceField(lowered self::A #this) → core::int;
 external static extension-member method Extension|set#extensionInstanceField(lowered self::A #this, synthesized core::int #externalFieldValue) → void;
diff --git a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect
index 30cc8af..6b9f931 100644
--- a/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/external_field_errors.dart.strong.transformed.expect
@@ -77,10 +77,10 @@
 
 abstract class A extends core::Object {
   constructor •(core::int initializedField1) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:10: Error: External fields cannot have initializers.
 Try removing the field initializer or the 'external' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
-         ^^^^^^^^^^^^^^^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
+         ^^^^^^^^^^^^^^^^^", invalid-initializer "pkg/front_end/testcases/nnbd/external_field_errors.dart:18:36: Error: External fields cannot have initializers.
 Try removing the field initializer or the 'external' keyword from the field declaration.
   A(this.initializedField1) : this.initializedField2 = 0;
                                    ^^^^^^^^^^^^^^^^^"
@@ -111,7 +111,7 @@
 external static get topLevelField() → core::int;
 external static set topLevelField(synthesized core::int #externalFieldValue) → void;
 external static get finalTopLevelField() → core::int;
-external static get constField() → core::int;
+external static const get constField() → core::int;
 external static set constField(synthesized core::int #externalFieldValue) → void;
 external static extension-member method Extension|get#extensionInstanceField(lowered self::A #this) → core::int;
 external static extension-member method Extension|set#extensionInstanceField(lowered self::A #this, synthesized core::int #externalFieldValue) → void;
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart
new file mode 100644
index 0000000..bcf5ca7
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 C1() {}
+
+class const C2() {}
+
+class C3() {
+  final int? i; // Error
+}
+
+class const C4() { // Error
+  int? i;
+}
+
+test() {
+  new C3();
+  new C4();
+  const C4();
+}
+
+main() {
+  new C1();
+  new C2();
+  const C2();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.expect
new file mode 100644
index 0000000..a1e22b2
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.expect
@@ -0,0 +1,64 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:10:14: Error: Final field 'i' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? i; // Error
+//              ^
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
+// class const C4() { // Error
+//               ^
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:14:8: Context: Field isn't final, but constructor is 'const'.
+//   int? i;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C2
+    : super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int? i = null;
+  constructor •() → self::C3
+    : super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  field core::int? i = null;
+  const constructor •() → self::C4
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C3::•();
+  new self::C4::•();
+  #C2;
+}
+static method main() → dynamic {
+  new self::C1::•();
+  new self::C2::•();
+  #C3;
+}
+
+constants  {
+  #C1 = null
+  #C2 = self::C4 {i:#C1}
+  #C3 = self::C2 {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_primary_constructor.dart:
+- C4. (from org-dartlang-testcase:///class_primary_constructor.dart:13:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C2. (from org-dartlang-testcase:///class_primary_constructor.dart:7:15)
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.modular.expect
new file mode 100644
index 0000000..a1e22b2
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.modular.expect
@@ -0,0 +1,64 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:10:14: Error: Final field 'i' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? i; // Error
+//              ^
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
+// class const C4() { // Error
+//               ^
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:14:8: Context: Field isn't final, but constructor is 'const'.
+//   int? i;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C2
+    : super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int? i = null;
+  constructor •() → self::C3
+    : super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  field core::int? i = null;
+  const constructor •() → self::C4
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C3::•();
+  new self::C4::•();
+  #C2;
+}
+static method main() → dynamic {
+  new self::C1::•();
+  new self::C2::•();
+  #C3;
+}
+
+constants  {
+  #C1 = null
+  #C2 = self::C4 {i:#C1}
+  #C3 = self::C2 {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_primary_constructor.dart:
+- C4. (from org-dartlang-testcase:///class_primary_constructor.dart:13:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C2. (from org-dartlang-testcase:///class_primary_constructor.dart:7:15)
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.outline.expect
new file mode 100644
index 0000000..69622e3
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.outline.expect
@@ -0,0 +1,28 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C2
+    : super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int? i;
+  constructor •() → self::C3
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  field core::int? i;
+  const constructor •() → self::C4
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..a1e22b2
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.strong.transformed.expect
@@ -0,0 +1,64 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:10:14: Error: Final field 'i' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? i; // Error
+//              ^
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
+// class const C4() { // Error
+//               ^
+// pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart:14:8: Context: Field isn't final, but constructor is 'const'.
+//   int? i;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C2
+    : super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int? i = null;
+  constructor •() → self::C3
+    : super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  field core::int? i = null;
+  const constructor •() → self::C4
+    : super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  new self::C3::•();
+  new self::C4::•();
+  #C2;
+}
+static method main() → dynamic {
+  new self::C1::•();
+  new self::C2::•();
+  #C3;
+}
+
+constants  {
+  #C1 = null
+  #C2 = self::C4 {i:#C1}
+  #C3 = self::C2 {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_primary_constructor.dart:
+- C4. (from org-dartlang-testcase:///class_primary_constructor.dart:13:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C2. (from org-dartlang-testcase:///class_primary_constructor.dart:7:15)
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..f19a0fa
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.textual_outline.expect
@@ -0,0 +1,15 @@
+class C1() {}
+
+class const C2() {}
+
+class C3() {
+  final int? i;
+}
+
+class const C4() {
+  int? i;
+}
+
+test() {}
+
+main() {}
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..efbb357
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class C1() {}
+
+class C3() {
+  final int? i;
+}
+
+class const C2() {}
+
+class const C4() {
+  int? i;
+}
+
+main() {}
+
+test() {}
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart
new file mode 100644
index 0000000..32264cb
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 C1(int a, [int? b, int c = 42]) {}
+
+class C2(var int a, [var int? b, var int c = 42]) {}
+
+class C3(final int a, [final int? b, final int c = 42]) {}
+
+class const C4(int a) {}
+
+class const C5(var int a) {} // Error
+
+class const C6(final int b) {}
+
+class C7({int? a, required int b, int c = 42}) {}
+
+class C8({var int? a, required var int b, var int c = 42}) {}
+
+class C9({final int? a, required final int b, final int c = 42}) {}
+
+class const C10(final int a, [final int? b, final int c = 42]) {}
+
+class const C11({final int? a, required final int b, final int c = 42}) {}
+
+
+main() {
+  new C1(0);
+  new C1(0, 1);
+  new C1(0, 1, 2);
+  new C2(0);
+  new C2(0, 1);
+  new C2(0, 1, 2);
+  new C3(0);
+  new C3(0, 1);
+  new C3(0, 1, 2);
+  new C4(0);
+  const C4(0);
+  new C5(0);
+  new C6(0);
+  const C6(0);
+  new C7(b: 1);
+  new C7(a: 0, b: 1);
+  new C7(a: 0, b: 1, c: 2);
+  new C8(b: 1);
+  new C8(a: 0, b: 1);
+  new C8(a: 0, b: 1, c: 2);
+  new C9(b: 1);
+  new C9(a: 0, b: 1);
+  new C9(a: 0, b: 1, c: 2);
+  new C10(0);
+  new C10(0, 1);
+  new C10(0, 1, 2);
+  const C10(0);
+  const C10(0, 1);
+  const C10(0, 1, 2);
+  new C11(b: 1);
+  new C11(a: 0, b: 1);
+  new C11(a: 0, b: 1, c: 2);
+  const C11(b: 1);
+  const C11(a: 0, b: 1);
+  const C11(a: 0, b: 1, c: 2);
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.expect
new file mode 100644
index 0000000..c9d8e23
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.expect
@@ -0,0 +1,151 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
+// class const C5(var int a) {} // Error
+//               ^
+// pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart:13:24: Context: Field isn't final, but constructor is 'const'.
+// class const C5(var int a) {} // Error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •(core::int a, [core::int? b = #C1, core::int c = #C2]) → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  field core::int a;
+  field core::int? b;
+  field core::int c;
+  constructor •(core::int a, [core::int? b = #C1, core::int c = #C2]) → self::C2
+    : self::C2::a = a, self::C2::b = b, self::C2::c = c, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  constructor •(final core::int a, [final core::int? b = #C1, final core::int c = #C2]) → self::C3
+    : self::C3::a = a, self::C3::b = b, self::C3::c = c, super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int a) → self::C4
+    : super core::Object::•()
+    ;
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  field core::int a;
+  const constructor •(core::int a) → self::C5
+    : self::C5::a = a, super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int b;
+  const constructor •(final core::int b) → self::C6
+    : self::C6::b = b, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •({core::int? a = #C1, required core::int b, core::int c = #C2}) → self::C7
+    : super core::Object::•()
+    ;
+}
+class C8 extends core::Object {
+  field core::int? a;
+  field core::int b;
+  field core::int c;
+  constructor •({core::int? a = #C1, required core::int b, core::int c = #C2}) → self::C8
+    : self::C8::a = a, self::C8::b = b, self::C8::c = c, super core::Object::•()
+    ;
+}
+class C9 extends core::Object {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  constructor •({final core::int? a = #C1, required final core::int b, final core::int c = #C2}) → self::C9
+    : self::C9::a = a, self::C9::b = b, self::C9::c = c, super core::Object::•()
+    ;
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  const constructor •(final core::int a, [final core::int? b = #C1, final core::int c = #C2]) → self::C10
+    : self::C10::a = a, self::C10::b = b, self::C10::c = c, super core::Object::•()
+    ;
+}
+class C11 extends core::Object /*hasConstConstructor*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  const constructor •({final core::int? a = #C1, required final core::int b, final core::int c = #C2}) → self::C11
+    : self::C11::a = a, self::C11::b = b, self::C11::c = c, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C1::•(0);
+  new self::C1::•(0, 1);
+  new self::C1::•(0, 1, 2);
+  new self::C2::•(0);
+  new self::C2::•(0, 1);
+  new self::C2::•(0, 1, 2);
+  new self::C3::•(0);
+  new self::C3::•(0, 1);
+  new self::C3::•(0, 1, 2);
+  new self::C4::•(0);
+  #C3;
+  new self::C5::•(0);
+  new self::C6::•(0);
+  #C5;
+  new self::C7::•(b: 1);
+  new self::C7::•(a: 0, b: 1);
+  new self::C7::•(a: 0, b: 1, c: 2);
+  new self::C8::•(b: 1);
+  new self::C8::•(a: 0, b: 1);
+  new self::C8::•(a: 0, b: 1, c: 2);
+  new self::C9::•(b: 1);
+  new self::C9::•(a: 0, b: 1);
+  new self::C9::•(a: 0, b: 1, c: 2);
+  new self::C10::•(0);
+  new self::C10::•(0, 1);
+  new self::C10::•(0, 1, 2);
+  #C6;
+  #C8;
+  #C10;
+  new self::C11::•(b: 1);
+  new self::C11::•(a: 0, b: 1);
+  new self::C11::•(a: 0, b: 1, c: 2);
+  #C11;
+  #C12;
+  #C13;
+}
+
+constants  {
+  #C1 = null
+  #C2 = 42
+  #C3 = self::C4 {}
+  #C4 = 0
+  #C5 = self::C6 {b:#C4}
+  #C6 = self::C10 {a:#C4, b:#C1, c:#C2}
+  #C7 = 1
+  #C8 = self::C10 {a:#C4, b:#C7, c:#C2}
+  #C9 = 2
+  #C10 = self::C10 {a:#C4, b:#C7, c:#C9}
+  #C11 = self::C11 {a:#C1, b:#C7, c:#C2}
+  #C12 = self::C11 {a:#C4, b:#C7, c:#C2}
+  #C13 = self::C11 {a:#C4, b:#C7, c:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_primary_declaring_parameters.dart:
+- C4. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:11:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C6. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:15:15)
+- C10. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:23:16)
+- C11. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:25:16)
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.modular.expect
new file mode 100644
index 0000000..c9d8e23
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.modular.expect
@@ -0,0 +1,151 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
+// class const C5(var int a) {} // Error
+//               ^
+// pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart:13:24: Context: Field isn't final, but constructor is 'const'.
+// class const C5(var int a) {} // Error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •(core::int a, [core::int? b = #C1, core::int c = #C2]) → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  field core::int a;
+  field core::int? b;
+  field core::int c;
+  constructor •(core::int a, [core::int? b = #C1, core::int c = #C2]) → self::C2
+    : self::C2::a = a, self::C2::b = b, self::C2::c = c, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  constructor •(final core::int a, [final core::int? b = #C1, final core::int c = #C2]) → self::C3
+    : self::C3::a = a, self::C3::b = b, self::C3::c = c, super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int a) → self::C4
+    : super core::Object::•()
+    ;
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  field core::int a;
+  const constructor •(core::int a) → self::C5
+    : self::C5::a = a, super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int b;
+  const constructor •(final core::int b) → self::C6
+    : self::C6::b = b, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •({core::int? a = #C1, required core::int b, core::int c = #C2}) → self::C7
+    : super core::Object::•()
+    ;
+}
+class C8 extends core::Object {
+  field core::int? a;
+  field core::int b;
+  field core::int c;
+  constructor •({core::int? a = #C1, required core::int b, core::int c = #C2}) → self::C8
+    : self::C8::a = a, self::C8::b = b, self::C8::c = c, super core::Object::•()
+    ;
+}
+class C9 extends core::Object {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  constructor •({final core::int? a = #C1, required final core::int b, final core::int c = #C2}) → self::C9
+    : self::C9::a = a, self::C9::b = b, self::C9::c = c, super core::Object::•()
+    ;
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  const constructor •(final core::int a, [final core::int? b = #C1, final core::int c = #C2]) → self::C10
+    : self::C10::a = a, self::C10::b = b, self::C10::c = c, super core::Object::•()
+    ;
+}
+class C11 extends core::Object /*hasConstConstructor*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  const constructor •({final core::int? a = #C1, required final core::int b, final core::int c = #C2}) → self::C11
+    : self::C11::a = a, self::C11::b = b, self::C11::c = c, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C1::•(0);
+  new self::C1::•(0, 1);
+  new self::C1::•(0, 1, 2);
+  new self::C2::•(0);
+  new self::C2::•(0, 1);
+  new self::C2::•(0, 1, 2);
+  new self::C3::•(0);
+  new self::C3::•(0, 1);
+  new self::C3::•(0, 1, 2);
+  new self::C4::•(0);
+  #C3;
+  new self::C5::•(0);
+  new self::C6::•(0);
+  #C5;
+  new self::C7::•(b: 1);
+  new self::C7::•(a: 0, b: 1);
+  new self::C7::•(a: 0, b: 1, c: 2);
+  new self::C8::•(b: 1);
+  new self::C8::•(a: 0, b: 1);
+  new self::C8::•(a: 0, b: 1, c: 2);
+  new self::C9::•(b: 1);
+  new self::C9::•(a: 0, b: 1);
+  new self::C9::•(a: 0, b: 1, c: 2);
+  new self::C10::•(0);
+  new self::C10::•(0, 1);
+  new self::C10::•(0, 1, 2);
+  #C6;
+  #C8;
+  #C10;
+  new self::C11::•(b: 1);
+  new self::C11::•(a: 0, b: 1);
+  new self::C11::•(a: 0, b: 1, c: 2);
+  #C11;
+  #C12;
+  #C13;
+}
+
+constants  {
+  #C1 = null
+  #C2 = 42
+  #C3 = self::C4 {}
+  #C4 = 0
+  #C5 = self::C6 {b:#C4}
+  #C6 = self::C10 {a:#C4, b:#C1, c:#C2}
+  #C7 = 1
+  #C8 = self::C10 {a:#C4, b:#C7, c:#C2}
+  #C9 = 2
+  #C10 = self::C10 {a:#C4, b:#C7, c:#C9}
+  #C11 = self::C11 {a:#C1, b:#C7, c:#C2}
+  #C12 = self::C11 {a:#C4, b:#C7, c:#C2}
+  #C13 = self::C11 {a:#C4, b:#C7, c:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_primary_declaring_parameters.dart:
+- C4. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:11:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C6. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:15:15)
+- C10. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:23:16)
+- C11. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:25:16)
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.outline.expect
new file mode 100644
index 0000000..4d9cf64
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.outline.expect
@@ -0,0 +1,75 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •(core::int a, [core::int? b = null, core::int c = 42]) → self::C1
+    ;
+}
+class C2 extends core::Object {
+  field core::int a;
+  field core::int? b;
+  field core::int c;
+  constructor •(core::int a, [core::int? b = null, core::int c = 42]) → self::C2
+    ;
+}
+class C3 extends core::Object {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  constructor •(final core::int a, [final core::int? b = null, final core::int c = 42]) → self::C3
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int a) → self::C4
+    : super core::Object::•()
+    ;
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  field core::int a;
+  const constructor •(core::int a) → self::C5
+    : self::C5::a = a, super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int b;
+  const constructor •(final core::int b) → self::C6
+    : self::C6::b = b, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •({core::int? a = null, required core::int b, core::int c = 42}) → self::C7
+    ;
+}
+class C8 extends core::Object {
+  field core::int? a;
+  field core::int b;
+  field core::int c;
+  constructor •({core::int? a = null, required core::int b, core::int c = 42}) → self::C8
+    ;
+}
+class C9 extends core::Object {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  constructor •({final core::int? a = null, required final core::int b, final core::int c = 42}) → self::C9
+    ;
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  const constructor •(final core::int a, [final core::int? b = null, final core::int c = 42]) → self::C10
+    : self::C10::a = a, self::C10::b = b, self::C10::c = c, super core::Object::•()
+    ;
+}
+class C11 extends core::Object /*hasConstConstructor*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  const constructor •({final core::int? a = null, required final core::int b, final core::int c = 42}) → self::C11
+    : self::C11::a = a, self::C11::b = b, self::C11::c = c, super core::Object::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..c9d8e23
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.strong.transformed.expect
@@ -0,0 +1,151 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart:13:15: Error: Constructor is marked 'const' so all fields must be final.
+// class const C5(var int a) {} // Error
+//               ^
+// pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart:13:24: Context: Field isn't final, but constructor is 'const'.
+// class const C5(var int a) {} // Error
+//                        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •(core::int a, [core::int? b = #C1, core::int c = #C2]) → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  field core::int a;
+  field core::int? b;
+  field core::int c;
+  constructor •(core::int a, [core::int? b = #C1, core::int c = #C2]) → self::C2
+    : self::C2::a = a, self::C2::b = b, self::C2::c = c, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  constructor •(final core::int a, [final core::int? b = #C1, final core::int c = #C2]) → self::C3
+    : self::C3::a = a, self::C3::b = b, self::C3::c = c, super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  const constructor •(core::int a) → self::C4
+    : super core::Object::•()
+    ;
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  field core::int a;
+  const constructor •(core::int a) → self::C5
+    : self::C5::a = a, super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int b;
+  const constructor •(final core::int b) → self::C6
+    : self::C6::b = b, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •({core::int? a = #C1, required core::int b, core::int c = #C2}) → self::C7
+    : super core::Object::•()
+    ;
+}
+class C8 extends core::Object {
+  field core::int? a;
+  field core::int b;
+  field core::int c;
+  constructor •({core::int? a = #C1, required core::int b, core::int c = #C2}) → self::C8
+    : self::C8::a = a, self::C8::b = b, self::C8::c = c, super core::Object::•()
+    ;
+}
+class C9 extends core::Object {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  constructor •({final core::int? a = #C1, required final core::int b, final core::int c = #C2}) → self::C9
+    : self::C9::a = a, self::C9::b = b, self::C9::c = c, super core::Object::•()
+    ;
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  const constructor •(final core::int a, [final core::int? b = #C1, final core::int c = #C2]) → self::C10
+    : self::C10::a = a, self::C10::b = b, self::C10::c = c, super core::Object::•()
+    ;
+}
+class C11 extends core::Object /*hasConstConstructor*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  const constructor •({final core::int? a = #C1, required final core::int b, final core::int c = #C2}) → self::C11
+    : self::C11::a = a, self::C11::b = b, self::C11::c = c, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C1::•(0);
+  new self::C1::•(0, 1);
+  new self::C1::•(0, 1, 2);
+  new self::C2::•(0);
+  new self::C2::•(0, 1);
+  new self::C2::•(0, 1, 2);
+  new self::C3::•(0);
+  new self::C3::•(0, 1);
+  new self::C3::•(0, 1, 2);
+  new self::C4::•(0);
+  #C3;
+  new self::C5::•(0);
+  new self::C6::•(0);
+  #C5;
+  new self::C7::•(b: 1);
+  new self::C7::•(a: 0, b: 1);
+  new self::C7::•(a: 0, b: 1, c: 2);
+  new self::C8::•(b: 1);
+  new self::C8::•(a: 0, b: 1);
+  new self::C8::•(a: 0, b: 1, c: 2);
+  new self::C9::•(b: 1);
+  new self::C9::•(a: 0, b: 1);
+  new self::C9::•(a: 0, b: 1, c: 2);
+  new self::C10::•(0);
+  new self::C10::•(0, 1);
+  new self::C10::•(0, 1, 2);
+  #C6;
+  #C8;
+  #C10;
+  new self::C11::•(b: 1);
+  new self::C11::•(a: 0, b: 1);
+  new self::C11::•(a: 0, b: 1, c: 2);
+  #C11;
+  #C12;
+  #C13;
+}
+
+constants  {
+  #C1 = null
+  #C2 = 42
+  #C3 = self::C4 {}
+  #C4 = 0
+  #C5 = self::C6 {b:#C4}
+  #C6 = self::C10 {a:#C4, b:#C1, c:#C2}
+  #C7 = 1
+  #C8 = self::C10 {a:#C4, b:#C7, c:#C2}
+  #C9 = 2
+  #C10 = self::C10 {a:#C4, b:#C7, c:#C9}
+  #C11 = self::C11 {a:#C1, b:#C7, c:#C2}
+  #C12 = self::C11 {a:#C4, b:#C7, c:#C2}
+  #C13 = self::C11 {a:#C4, b:#C7, c:#C9}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///class_primary_declaring_parameters.dart:
+- C4. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:11:15)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C6. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:15:15)
+- C10. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:23:16)
+- C11. (from org-dartlang-testcase:///class_primary_declaring_parameters.dart:25:16)
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..d5d8519
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+class C1(int a, [int? b, int c = 42]) {}
+
+class C2(var int a, [var int? b, var int c = 42]) {}
+
+class C3(final int a, [final int? b, final int c = 42]) {}
+
+class const C4(int a) {}
+
+class const C5(var int a) {}
+
+class const C6(final int b) {}
+
+class C7({int? a, required int b, int c = 42}) {}
+
+class C8({var int? a, required var int b, var int c = 42}) {}
+
+class C9({final int? a, required final int b, final int c = 42}) {}
+
+class const C10(final int a, [final int? b, final int c = 42]) {}
+
+class const C11({final int? a, required final int b, final int c = 42}) {}
+
+main() {}
diff --git a/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5f1c174
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/class_primary_declaring_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,23 @@
+class C1(int a, [int? b, int c = 42]) {}
+
+class C2(var int a, [var int? b, var int c = 42]) {}
+
+class C3(final int a, [final int? b, final int c = 42]) {}
+
+class C7({int? a, required int b, int c = 42}) {}
+
+class C8({var int? a, required var int b, var int c = 42}) {}
+
+class C9({final int? a, required final int b, final int c = 42}) {}
+
+class const C10(final int a, [final int? b, final int c = 42]) {}
+
+class const C11({final int? a, required final int b, final int c = 42}) {}
+
+class const C4(int a) {}
+
+class const C5(var int a) {}
+
+class const C6(final int b) {}
+
+main() {}
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart b/pkg/front_end/testcases/primary_constructors/constructor_head.dart
new file mode 100644
index 0000000..432b231
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 C1 {
+  new ();
+}
+
+class C2 {
+  var x;
+  new () : x = 0;
+}
+
+class C3 {
+  new () {}
+}
+
+class C4 {
+  var x;
+  new () : x = 0 {}
+}
+
+class C5 {
+  const new ();
+}
+
+class C6 {
+  var x;
+  const new () : x = 0;
+}
+
+class C7 {
+  const new () {}
+}
+
+class C8 {
+  var x;
+  const new () : x = 0 {}
+}
+
+class C9 {
+  new named();
+}
+
+class C10 {
+  var x;
+  new named() : x = 0;
+}
+
+class C11 {
+  new named() {}
+}
+
+class C12 {
+  var x;
+  new named() : x = 0 {}
+}
+
+class C13 {
+  const new named();
+}
+
+class C14 {
+  final x;
+  const new named() : x = 0;
+}
+
+class C15 {
+  const new named() {}
+}
+
+class C16 {
+  final x;
+  const new named() : x = 0 {}
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.expect
new file mode 100644
index 0000000..4b59ceb
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.expect
@@ -0,0 +1,114 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:33:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:38:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:69:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:74:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:29:9: Error: Constructor is marked 'const' so all fields must be final.
+//   const new () : x = 0;
+//         ^
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:28:7: Context: Field isn't final, but constructor is 'const'.
+//   var x;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C2
+    : self::C2::x = 0, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    : super core::Object::•() {}
+}
+class C4 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C4
+    : self::C4::x = 0, super core::Object::•() {}
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C5
+    : super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  field dynamic x;
+  const constructor •() → self::C6
+    : self::C6::x = 0, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •() → self::C7
+    : super core::Object::•() {}
+}
+class C8 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C8
+    : self::C8::x = 0, super core::Object::•() {}
+}
+class C9 extends core::Object {
+  constructor named() → self::C9
+    : super core::Object::•()
+    ;
+}
+class C10 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C10
+    : self::C10::x = 0, super core::Object::•()
+    ;
+}
+class C11 extends core::Object {
+  constructor named() → self::C11
+    : super core::Object::•() {}
+}
+class C12 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C12
+    : self::C12::x = 0, super core::Object::•() {}
+}
+class C13 extends core::Object /*hasConstConstructor*/  {
+  const constructor named() → self::C13
+    : super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x;
+  const constructor named() → self::C14
+    : self::C14::x = 0, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  constructor named() → self::C15
+    : super core::Object::•() {}
+}
+class C16 extends core::Object {
+  final field dynamic x;
+  constructor named() → self::C16
+    : self::C16::x = 0, super core::Object::•() {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.modular.expect
new file mode 100644
index 0000000..4b59ceb
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.modular.expect
@@ -0,0 +1,114 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:33:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:38:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:69:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:74:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:29:9: Error: Constructor is marked 'const' so all fields must be final.
+//   const new () : x = 0;
+//         ^
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:28:7: Context: Field isn't final, but constructor is 'const'.
+//   var x;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C2
+    : self::C2::x = 0, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    : super core::Object::•() {}
+}
+class C4 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C4
+    : self::C4::x = 0, super core::Object::•() {}
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C5
+    : super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  field dynamic x;
+  const constructor •() → self::C6
+    : self::C6::x = 0, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •() → self::C7
+    : super core::Object::•() {}
+}
+class C8 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C8
+    : self::C8::x = 0, super core::Object::•() {}
+}
+class C9 extends core::Object {
+  constructor named() → self::C9
+    : super core::Object::•()
+    ;
+}
+class C10 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C10
+    : self::C10::x = 0, super core::Object::•()
+    ;
+}
+class C11 extends core::Object {
+  constructor named() → self::C11
+    : super core::Object::•() {}
+}
+class C12 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C12
+    : self::C12::x = 0, super core::Object::•() {}
+}
+class C13 extends core::Object /*hasConstConstructor*/  {
+  const constructor named() → self::C13
+    : super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x;
+  const constructor named() → self::C14
+    : self::C14::x = 0, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  constructor named() → self::C15
+    : super core::Object::•() {}
+}
+class C16 extends core::Object {
+  final field dynamic x;
+  constructor named() → self::C16
+    : self::C16::x = 0, super core::Object::•() {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.outline.expect
new file mode 100644
index 0000000..1e82db6
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.outline.expect
@@ -0,0 +1,103 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:33:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:38:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:69:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:74:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() : x = 0 {}
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    ;
+}
+class C2 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C2
+    ;
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    ;
+}
+class C4 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C4
+    ;
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C5
+    : super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  field dynamic x;
+  const constructor •() → self::C6
+    : self::C6::x = 0, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •() → self::C7
+    ;
+}
+class C8 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C8
+    ;
+}
+class C9 extends core::Object {
+  constructor named() → self::C9
+    ;
+}
+class C10 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C10
+    ;
+}
+class C11 extends core::Object {
+  constructor named() → self::C11
+    ;
+}
+class C12 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C12
+    ;
+}
+class C13 extends core::Object /*hasConstConstructor*/  {
+  const constructor named() → self::C13
+    : super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x;
+  const constructor named() → self::C14
+    : self::C14::x = 0, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  constructor named() → self::C15
+    ;
+}
+class C16 extends core::Object {
+  final field dynamic x;
+  constructor named() → self::C16
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.transformed.expect
new file mode 100644
index 0000000..4b59ceb
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.strong.transformed.expect
@@ -0,0 +1,114 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:33:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:38:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new () : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:69:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:74:3: Error: A const constructor can't have a body.
+// Try removing either the 'const' keyword or the body.
+//   const new named() : x = 0 {}
+//   ^^^^^
+//
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:29:9: Error: Constructor is marked 'const' so all fields must be final.
+//   const new () : x = 0;
+//         ^
+// pkg/front_end/testcases/primary_constructors/constructor_head.dart:28:7: Context: Field isn't final, but constructor is 'const'.
+//   var x;
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    ;
+}
+class C2 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C2
+    : self::C2::x = 0, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    : super core::Object::•() {}
+}
+class C4 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C4
+    : self::C4::x = 0, super core::Object::•() {}
+}
+class C5 extends core::Object /*hasConstConstructor*/  {
+  const constructor •() → self::C5
+    : super core::Object::•()
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  field dynamic x;
+  const constructor •() → self::C6
+    : self::C6::x = 0, super core::Object::•()
+    ;
+}
+class C7 extends core::Object {
+  constructor •() → self::C7
+    : super core::Object::•() {}
+}
+class C8 extends core::Object {
+  field dynamic x;
+  constructor •() → self::C8
+    : self::C8::x = 0, super core::Object::•() {}
+}
+class C9 extends core::Object {
+  constructor named() → self::C9
+    : super core::Object::•()
+    ;
+}
+class C10 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C10
+    : self::C10::x = 0, super core::Object::•()
+    ;
+}
+class C11 extends core::Object {
+  constructor named() → self::C11
+    : super core::Object::•() {}
+}
+class C12 extends core::Object {
+  field dynamic x;
+  constructor named() → self::C12
+    : self::C12::x = 0, super core::Object::•() {}
+}
+class C13 extends core::Object /*hasConstConstructor*/  {
+  const constructor named() → self::C13
+    : super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field dynamic x;
+  const constructor named() → self::C14
+    : self::C14::x = 0, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  constructor named() → self::C15
+    : super core::Object::•() {}
+}
+class C16 extends core::Object {
+  final field dynamic x;
+  constructor named() → self::C16
+    : self::C16::x = 0, super core::Object::•() {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.textual_outline.expect
new file mode 100644
index 0000000..0beaddb
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.textual_outline.expect
@@ -0,0 +1,71 @@
+class C1 {
+  new ();
+}
+
+class C2 {
+  var x;
+  new () : x = 0;
+}
+
+class C3 {
+  new () {}
+}
+
+class C4 {
+  var x;
+  new () : x = 0 {}
+}
+
+class C5 {
+  const new ();
+}
+
+class C6 {
+  var x;
+  const new () : x = 0;
+}
+
+class C7 {
+  const new () {}
+}
+
+class C8 {
+  var x;
+  const new () : x = 0 {}
+}
+
+class C9 {
+  new named();
+}
+
+class C10 {
+  var x;
+  new named() : x = 0;
+}
+
+class C11 {
+  new named() {}
+}
+
+class C12 {
+  var x;
+  new named() : x = 0 {}
+}
+
+class C13 {
+  const new named();
+}
+
+class C14 {
+  final x;
+  const new named() : x = 0;
+}
+
+class C15 {
+  const new named() {}
+}
+
+class C16 {
+  final x;
+  const new named() : x = 0 {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructor_head.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..b8a4511
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructor_head.dart.textual_outline_modelled.expect
@@ -0,0 +1,71 @@
+class C1 {
+  new ();
+}
+
+class C10 {
+  new named() : x = 0;
+  var x;
+}
+
+class C11 {
+  new named() {}
+}
+
+class C12 {
+  new named() : x = 0 {}
+  var x;
+}
+
+class C13 {
+  const new named();
+}
+
+class C14 {
+  const new named() : x = 0;
+  final x;
+}
+
+class C15 {
+  const new named() {}
+}
+
+class C16 {
+  const new named() : x = 0 {}
+  final x;
+}
+
+class C2 {
+  new () : x = 0;
+  var x;
+}
+
+class C3 {
+  new () {}
+}
+
+class C4 {
+  new () : x = 0 {}
+  var x;
+}
+
+class C5 {
+  const new ();
+}
+
+class C6 {
+  const new () : x = 0;
+  var x;
+}
+
+class C7 {
+  const new () {}
+}
+
+class C8 {
+  const new () : x = 0 {}
+  var x;
+}
+
+class C9 {
+  new named();
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart b/pkg/front_end/testcases/primary_constructors/constructors.dart
new file mode 100644
index 0000000..211206d
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart
@@ -0,0 +1,212 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 C1 {
+  int i;
+
+  new (this.i);
+}
+
+class C2 {
+  final int i;
+
+  const new (this.i);
+}
+
+class C3 {
+  int i;
+
+  new named({required this.i});
+}
+
+class C4 {
+  final int i;
+
+  const new named({required this.i});
+}
+
+class C5 {
+  int i;
+
+  factory (int i) => new C5._(i);
+
+  new _ (this.i);
+}
+
+class C6 {
+  final int i;
+
+  factory (int i) => C6._(i);
+
+  const new _ (this.i);
+}
+
+
+class C7 {
+  int i;
+
+  factory ({required int i}) = C7._;
+
+  new _ ({required this.i});
+}
+
+class C8 {
+  final int i;
+
+  const factory (int i) = C8._;
+
+  const new _ (this.i);
+}
+
+class C9 {
+  int i;
+
+  factory named (int i) => new C9._(i);
+
+  new _ (this.i);
+}
+
+class C10 {
+  final int i;
+
+  factory named (int i) => C10._(i);
+
+  const new _ (this.i);
+}
+
+
+class C11 {
+  int i;
+
+  factory named ({required int i}) = C11._;
+
+  new _ ({required this.i});
+}
+
+class C12 {
+  final int i;
+
+  const factory named (int i) = C12._;
+
+  const new _ (this.i);
+}
+
+class C13 {
+  int i;
+
+  new (int i) : this._(i);
+
+  new _ (this.i);
+}
+
+class C14 {
+  final int i;
+
+  const new (int i) : this._(i);
+
+  const new _ (this.i);
+}
+
+class C15 {
+  int i;
+
+  new named({required int i}) : this._(i);
+
+  new _ (this.i);
+}
+
+class C16 {
+  final int i;
+
+  const new named({required int i}) : this._(i);
+
+  const new _ (this.i);
+}
+
+
+main() {
+  C1(0);
+  new C1(1);
+
+  C2(0);
+  new C2(1);
+  const C2(2);
+
+  C3.named(i: 0);
+  new C3.named(i: 1);
+
+  C4.named(i: 0);
+  new C4.named(i: 1);
+  const C4.named(i: 2);
+
+  C5(0);
+  new C5(1);
+  C5._(2);
+  new C5._(3);
+
+  C6(0);
+  new C6(1);
+  C6._(2);
+  new C6._(3);
+  const C6._(4);
+
+  C7(i: 0);
+  new C7(i: 1);
+  C7._(i: 2);
+  new C7._(i: 3);
+
+  C8(0);
+  new C8(1);
+  const C8(2);
+  C8._(3);
+  new C8._(4);
+  const C8._(5);
+
+  C9.named(0);
+  new C9.named(1);
+  C9._(2);
+  new C9._(3);
+
+  C10.named(0);
+  new C10.named(1);
+  C10._(2);
+  new C10._(3);
+  const C10._(4);
+
+  C11.named(i: 0);
+  new C11.named(i: 1);
+  C11._(i: 2);
+  new C11._(i: 3);
+
+  C12.named(0);
+  new C12.named(1);
+  const C12.named(2);
+  C12._(3);
+  new C12._(4);
+  const C12._(5);
+
+  C13(0);
+  new C13(1);
+  C13._(2);
+  new C13._(3);
+
+  C14(0);
+  new C14(1);
+  const C14(2);
+  C14._(3);
+  new C14._(4);
+  const C14._(5);
+
+  C15.named(i: 0);
+  new C15.named(i: 1);
+  C15._(2);
+  new C15._(3);
+
+  C16.named(i: 0);
+  new C16.named(i: 1);
+  const C16.named(i: 2);
+  C16._(3);
+  new C16._(4);
+  const C16._(5);
+}
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.expect
new file mode 100644
index 0000000..57d95bd
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.expect
@@ -0,0 +1,231 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C1
+    : self::C1::i = i, super core::Object::•()
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C2
+    : self::C2::i = i, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C3
+    : self::C3::i = i, super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C4
+    : self::C4::i = i, super core::Object::•()
+    ;
+}
+class C5 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C5
+    : self::C5::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C5
+    return new self::C5::_(i);
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C6
+    : self::C6::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C6
+    return new self::C6::_(i);
+}
+class C7 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C7
+    : self::C7::i = i, super core::Object::•()
+    ;
+  static factory •({required core::int i}) → self::C7 /* redirection-target: self::C7::_ */
+    return new self::C7::_(i: i);
+}
+class C8 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C8
+    : self::C8::i = i, super core::Object::•()
+    ;
+  static const factory •(core::int i) → self::C8 /* redirection-target: self::C8::_ */
+    return new self::C8::_(i);
+}
+class C9 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C9
+    : self::C9::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C9
+    return new self::C9::_(i);
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C10
+    : self::C10::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C10
+    return new self::C10::_(i);
+}
+class C11 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C11
+    : self::C11::i = i, super core::Object::•()
+    ;
+  static factory named({required core::int i}) → self::C11 /* redirection-target: self::C11::_ */
+    return new self::C11::_(i: i);
+}
+class C12 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C12
+    : self::C12::i = i, super core::Object::•()
+    ;
+  static const factory named(core::int i) → self::C12 /* redirection-target: self::C12::_ */
+    return new self::C12::_(i);
+}
+class C13 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C13
+    : this self::C13::_(i)
+    ;
+  constructor _(core::int i) → self::C13
+    : self::C13::i = i, super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C14
+    : this self::C14::_(i)
+    ;
+  const constructor _(core::int i) → self::C14
+    : self::C14::i = i, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C15
+    : this self::C15::_(i)
+    ;
+  constructor _(core::int i) → self::C15
+    : self::C15::i = i, super core::Object::•()
+    ;
+}
+class C16 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C16
+    : this self::C16::_(i)
+    ;
+  const constructor _(core::int i) → self::C16
+    : self::C16::i = i, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C1::•(0);
+  new self::C1::•(1);
+  new self::C2::•(0);
+  new self::C2::•(1);
+  #C2;
+  new self::C3::named(i: 0);
+  new self::C3::named(i: 1);
+  new self::C4::named(i: 0);
+  new self::C4::named(i: 1);
+  #C3;
+  self::C5::•(0);
+  self::C5::•(1);
+  new self::C5::_(2);
+  new self::C5::_(3);
+  self::C6::•(0);
+  self::C6::•(1);
+  new self::C6::_(2);
+  new self::C6::_(3);
+  #C5;
+  new self::C7::_(i: 0);
+  new self::C7::_(i: 1);
+  new self::C7::_(i: 2);
+  new self::C7::_(i: 3);
+  new self::C8::_(0);
+  new self::C8::_(1);
+  #C6;
+  new self::C8::_(3);
+  new self::C8::_(4);
+  #C8;
+  self::C9::named(0);
+  self::C9::named(1);
+  new self::C9::_(2);
+  new self::C9::_(3);
+  self::C10::named(0);
+  self::C10::named(1);
+  new self::C10::_(2);
+  new self::C10::_(3);
+  #C9;
+  new self::C11::_(i: 0);
+  new self::C11::_(i: 1);
+  new self::C11::_(i: 2);
+  new self::C11::_(i: 3);
+  new self::C12::_(0);
+  new self::C12::_(1);
+  #C10;
+  new self::C12::_(3);
+  new self::C12::_(4);
+  #C11;
+  new self::C13::•(0);
+  new self::C13::•(1);
+  new self::C13::_(2);
+  new self::C13::_(3);
+  new self::C14::•(0);
+  new self::C14::•(1);
+  #C12;
+  new self::C14::_(3);
+  new self::C14::_(4);
+  #C13;
+  new self::C15::named(i: 0);
+  new self::C15::named(i: 1);
+  new self::C15::_(2);
+  new self::C15::_(3);
+  new self::C16::named(i: 0);
+  new self::C16::named(i: 1);
+  #C14;
+  new self::C16::_(3);
+  new self::C16::_(4);
+  #C15;
+}
+
+constants  {
+  #C1 = 2
+  #C2 = self::C2 {i:#C1}
+  #C3 = self::C4 {i:#C1}
+  #C4 = 4
+  #C5 = self::C6 {i:#C4}
+  #C6 = self::C8 {i:#C1}
+  #C7 = 5
+  #C8 = self::C8 {i:#C7}
+  #C9 = self::C10 {i:#C4}
+  #C10 = self::C12 {i:#C1}
+  #C11 = self::C12 {i:#C7}
+  #C12 = self::C14 {i:#C1}
+  #C13 = self::C14 {i:#C7}
+  #C14 = self::C16 {i:#C1}
+  #C15 = self::C16 {i:#C7}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructors.dart:
+- C2. (from org-dartlang-testcase:///constructors.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C4.named (from org-dartlang-testcase:///constructors.dart:26:13)
+- C6._ (from org-dartlang-testcase:///constructors.dart:42:13)
+- C8._ (from org-dartlang-testcase:///constructors.dart:59:13)
+- C10._ (from org-dartlang-testcase:///constructors.dart:75:13)
+- C12._ (from org-dartlang-testcase:///constructors.dart:92:13)
+- C14. (from org-dartlang-testcase:///constructors.dart:106:9)
+- C14._ (from org-dartlang-testcase:///constructors.dart:108:13)
+- C16.named (from org-dartlang-testcase:///constructors.dart:122:13)
+- C16._ (from org-dartlang-testcase:///constructors.dart:124:13)
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.modular.expect
new file mode 100644
index 0000000..57d95bd
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.modular.expect
@@ -0,0 +1,231 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C1
+    : self::C1::i = i, super core::Object::•()
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C2
+    : self::C2::i = i, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C3
+    : self::C3::i = i, super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C4
+    : self::C4::i = i, super core::Object::•()
+    ;
+}
+class C5 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C5
+    : self::C5::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C5
+    return new self::C5::_(i);
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C6
+    : self::C6::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C6
+    return new self::C6::_(i);
+}
+class C7 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C7
+    : self::C7::i = i, super core::Object::•()
+    ;
+  static factory •({required core::int i}) → self::C7 /* redirection-target: self::C7::_ */
+    return new self::C7::_(i: i);
+}
+class C8 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C8
+    : self::C8::i = i, super core::Object::•()
+    ;
+  static const factory •(core::int i) → self::C8 /* redirection-target: self::C8::_ */
+    return new self::C8::_(i);
+}
+class C9 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C9
+    : self::C9::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C9
+    return new self::C9::_(i);
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C10
+    : self::C10::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C10
+    return new self::C10::_(i);
+}
+class C11 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C11
+    : self::C11::i = i, super core::Object::•()
+    ;
+  static factory named({required core::int i}) → self::C11 /* redirection-target: self::C11::_ */
+    return new self::C11::_(i: i);
+}
+class C12 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C12
+    : self::C12::i = i, super core::Object::•()
+    ;
+  static const factory named(core::int i) → self::C12 /* redirection-target: self::C12::_ */
+    return new self::C12::_(i);
+}
+class C13 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C13
+    : this self::C13::_(i)
+    ;
+  constructor _(core::int i) → self::C13
+    : self::C13::i = i, super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C14
+    : this self::C14::_(i)
+    ;
+  const constructor _(core::int i) → self::C14
+    : self::C14::i = i, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C15
+    : this self::C15::_(i)
+    ;
+  constructor _(core::int i) → self::C15
+    : self::C15::i = i, super core::Object::•()
+    ;
+}
+class C16 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C16
+    : this self::C16::_(i)
+    ;
+  const constructor _(core::int i) → self::C16
+    : self::C16::i = i, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C1::•(0);
+  new self::C1::•(1);
+  new self::C2::•(0);
+  new self::C2::•(1);
+  #C2;
+  new self::C3::named(i: 0);
+  new self::C3::named(i: 1);
+  new self::C4::named(i: 0);
+  new self::C4::named(i: 1);
+  #C3;
+  self::C5::•(0);
+  self::C5::•(1);
+  new self::C5::_(2);
+  new self::C5::_(3);
+  self::C6::•(0);
+  self::C6::•(1);
+  new self::C6::_(2);
+  new self::C6::_(3);
+  #C5;
+  new self::C7::_(i: 0);
+  new self::C7::_(i: 1);
+  new self::C7::_(i: 2);
+  new self::C7::_(i: 3);
+  new self::C8::_(0);
+  new self::C8::_(1);
+  #C6;
+  new self::C8::_(3);
+  new self::C8::_(4);
+  #C8;
+  self::C9::named(0);
+  self::C9::named(1);
+  new self::C9::_(2);
+  new self::C9::_(3);
+  self::C10::named(0);
+  self::C10::named(1);
+  new self::C10::_(2);
+  new self::C10::_(3);
+  #C9;
+  new self::C11::_(i: 0);
+  new self::C11::_(i: 1);
+  new self::C11::_(i: 2);
+  new self::C11::_(i: 3);
+  new self::C12::_(0);
+  new self::C12::_(1);
+  #C10;
+  new self::C12::_(3);
+  new self::C12::_(4);
+  #C11;
+  new self::C13::•(0);
+  new self::C13::•(1);
+  new self::C13::_(2);
+  new self::C13::_(3);
+  new self::C14::•(0);
+  new self::C14::•(1);
+  #C12;
+  new self::C14::_(3);
+  new self::C14::_(4);
+  #C13;
+  new self::C15::named(i: 0);
+  new self::C15::named(i: 1);
+  new self::C15::_(2);
+  new self::C15::_(3);
+  new self::C16::named(i: 0);
+  new self::C16::named(i: 1);
+  #C14;
+  new self::C16::_(3);
+  new self::C16::_(4);
+  #C15;
+}
+
+constants  {
+  #C1 = 2
+  #C2 = self::C2 {i:#C1}
+  #C3 = self::C4 {i:#C1}
+  #C4 = 4
+  #C5 = self::C6 {i:#C4}
+  #C6 = self::C8 {i:#C1}
+  #C7 = 5
+  #C8 = self::C8 {i:#C7}
+  #C9 = self::C10 {i:#C4}
+  #C10 = self::C12 {i:#C1}
+  #C11 = self::C12 {i:#C7}
+  #C12 = self::C14 {i:#C1}
+  #C13 = self::C14 {i:#C7}
+  #C14 = self::C16 {i:#C1}
+  #C15 = self::C16 {i:#C7}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructors.dart:
+- C2. (from org-dartlang-testcase:///constructors.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C4.named (from org-dartlang-testcase:///constructors.dart:26:13)
+- C6._ (from org-dartlang-testcase:///constructors.dart:42:13)
+- C8._ (from org-dartlang-testcase:///constructors.dart:59:13)
+- C10._ (from org-dartlang-testcase:///constructors.dart:75:13)
+- C12._ (from org-dartlang-testcase:///constructors.dart:92:13)
+- C14. (from org-dartlang-testcase:///constructors.dart:106:9)
+- C14._ (from org-dartlang-testcase:///constructors.dart:108:13)
+- C16.named (from org-dartlang-testcase:///constructors.dart:122:13)
+- C16._ (from org-dartlang-testcase:///constructors.dart:124:13)
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.outline.expect
new file mode 100644
index 0000000..d58f4c2
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.outline.expect
@@ -0,0 +1,120 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C1
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C2
+    : self::C2::i = i, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C3
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C4
+    : self::C4::i = i, super core::Object::•()
+    ;
+}
+class C5 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C5
+    ;
+  static factory •(core::int i) → self::C5
+    ;
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C6
+    : self::C6::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C6
+    ;
+}
+class C7 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C7
+    ;
+  static factory •({required core::int i}) → self::C7 /* redirection-target: self::C7::_ */
+    return new self::C7::_(i: i);
+}
+class C8 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C8
+    : self::C8::i = i, super core::Object::•()
+    ;
+  static const factory •(core::int i) → self::C8 /* redirection-target: self::C8::_ */
+    return new self::C8::_(i);
+}
+class C9 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C9
+    ;
+  static factory named(core::int i) → self::C9
+    ;
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C10
+    : self::C10::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C10
+    ;
+}
+class C11 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C11
+    ;
+  static factory named({required core::int i}) → self::C11 /* redirection-target: self::C11::_ */
+    return new self::C11::_(i: i);
+}
+class C12 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C12
+    : self::C12::i = i, super core::Object::•()
+    ;
+  static const factory named(core::int i) → self::C12 /* redirection-target: self::C12::_ */
+    return new self::C12::_(i);
+}
+class C13 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C13
+    ;
+  constructor _(core::int i) → self::C13
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C14
+    : this self::C14::_(i)
+    ;
+  const constructor _(core::int i) → self::C14
+    : self::C14::i = i, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C15
+    ;
+  constructor _(core::int i) → self::C15
+    ;
+}
+class C16 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C16
+    : this self::C16::_(i)
+    ;
+  const constructor _(core::int i) → self::C16
+    : self::C16::i = i, super core::Object::•()
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..57d95bd
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart.strong.transformed.expect
@@ -0,0 +1,231 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C1
+    : self::C1::i = i, super core::Object::•()
+    ;
+}
+class C2 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C2
+    : self::C2::i = i, super core::Object::•()
+    ;
+}
+class C3 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C3
+    : self::C3::i = i, super core::Object::•()
+    ;
+}
+class C4 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C4
+    : self::C4::i = i, super core::Object::•()
+    ;
+}
+class C5 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C5
+    : self::C5::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C5
+    return new self::C5::_(i);
+}
+class C6 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C6
+    : self::C6::i = i, super core::Object::•()
+    ;
+  static factory •(core::int i) → self::C6
+    return new self::C6::_(i);
+}
+class C7 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C7
+    : self::C7::i = i, super core::Object::•()
+    ;
+  static factory •({required core::int i}) → self::C7 /* redirection-target: self::C7::_ */
+    return new self::C7::_(i: i);
+}
+class C8 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C8
+    : self::C8::i = i, super core::Object::•()
+    ;
+  static const factory •(core::int i) → self::C8 /* redirection-target: self::C8::_ */
+    return new self::C8::_(i);
+}
+class C9 extends core::Object {
+  field core::int i;
+  constructor _(core::int i) → self::C9
+    : self::C9::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C9
+    return new self::C9::_(i);
+}
+class C10 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C10
+    : self::C10::i = i, super core::Object::•()
+    ;
+  static factory named(core::int i) → self::C10
+    return new self::C10::_(i);
+}
+class C11 extends core::Object {
+  field core::int i;
+  constructor _({required core::int i}) → self::C11
+    : self::C11::i = i, super core::Object::•()
+    ;
+  static factory named({required core::int i}) → self::C11 /* redirection-target: self::C11::_ */
+    return new self::C11::_(i: i);
+}
+class C12 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor _(core::int i) → self::C12
+    : self::C12::i = i, super core::Object::•()
+    ;
+  static const factory named(core::int i) → self::C12 /* redirection-target: self::C12::_ */
+    return new self::C12::_(i);
+}
+class C13 extends core::Object {
+  field core::int i;
+  constructor •(core::int i) → self::C13
+    : this self::C13::_(i)
+    ;
+  constructor _(core::int i) → self::C13
+    : self::C13::i = i, super core::Object::•()
+    ;
+}
+class C14 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor •(core::int i) → self::C14
+    : this self::C14::_(i)
+    ;
+  const constructor _(core::int i) → self::C14
+    : self::C14::i = i, super core::Object::•()
+    ;
+}
+class C15 extends core::Object {
+  field core::int i;
+  constructor named({required core::int i}) → self::C15
+    : this self::C15::_(i)
+    ;
+  constructor _(core::int i) → self::C15
+    : self::C15::i = i, super core::Object::•()
+    ;
+}
+class C16 extends core::Object /*hasConstConstructor*/  {
+  final field core::int i;
+  const constructor named({required core::int i}) → self::C16
+    : this self::C16::_(i)
+    ;
+  const constructor _(core::int i) → self::C16
+    : self::C16::i = i, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::C1::•(0);
+  new self::C1::•(1);
+  new self::C2::•(0);
+  new self::C2::•(1);
+  #C2;
+  new self::C3::named(i: 0);
+  new self::C3::named(i: 1);
+  new self::C4::named(i: 0);
+  new self::C4::named(i: 1);
+  #C3;
+  self::C5::•(0);
+  self::C5::•(1);
+  new self::C5::_(2);
+  new self::C5::_(3);
+  self::C6::•(0);
+  self::C6::•(1);
+  new self::C6::_(2);
+  new self::C6::_(3);
+  #C5;
+  new self::C7::_(i: 0);
+  new self::C7::_(i: 1);
+  new self::C7::_(i: 2);
+  new self::C7::_(i: 3);
+  new self::C8::_(0);
+  new self::C8::_(1);
+  #C6;
+  new self::C8::_(3);
+  new self::C8::_(4);
+  #C8;
+  self::C9::named(0);
+  self::C9::named(1);
+  new self::C9::_(2);
+  new self::C9::_(3);
+  self::C10::named(0);
+  self::C10::named(1);
+  new self::C10::_(2);
+  new self::C10::_(3);
+  #C9;
+  new self::C11::_(i: 0);
+  new self::C11::_(i: 1);
+  new self::C11::_(i: 2);
+  new self::C11::_(i: 3);
+  new self::C12::_(0);
+  new self::C12::_(1);
+  #C10;
+  new self::C12::_(3);
+  new self::C12::_(4);
+  #C11;
+  new self::C13::•(0);
+  new self::C13::•(1);
+  new self::C13::_(2);
+  new self::C13::_(3);
+  new self::C14::•(0);
+  new self::C14::•(1);
+  #C12;
+  new self::C14::_(3);
+  new self::C14::_(4);
+  #C13;
+  new self::C15::named(i: 0);
+  new self::C15::named(i: 1);
+  new self::C15::_(2);
+  new self::C15::_(3);
+  new self::C16::named(i: 0);
+  new self::C16::named(i: 1);
+  #C14;
+  new self::C16::_(3);
+  new self::C16::_(4);
+  #C15;
+}
+
+constants  {
+  #C1 = 2
+  #C2 = self::C2 {i:#C1}
+  #C3 = self::C4 {i:#C1}
+  #C4 = 4
+  #C5 = self::C6 {i:#C4}
+  #C6 = self::C8 {i:#C1}
+  #C7 = 5
+  #C8 = self::C8 {i:#C7}
+  #C9 = self::C10 {i:#C4}
+  #C10 = self::C12 {i:#C1}
+  #C11 = self::C12 {i:#C7}
+  #C12 = self::C14 {i:#C1}
+  #C13 = self::C14 {i:#C7}
+  #C14 = self::C16 {i:#C1}
+  #C15 = self::C16 {i:#C7}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///constructors.dart:
+- C2. (from org-dartlang-testcase:///constructors.dart:14:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- C4.named (from org-dartlang-testcase:///constructors.dart:26:13)
+- C6._ (from org-dartlang-testcase:///constructors.dart:42:13)
+- C8._ (from org-dartlang-testcase:///constructors.dart:59:13)
+- C10._ (from org-dartlang-testcase:///constructors.dart:75:13)
+- C12._ (from org-dartlang-testcase:///constructors.dart:92:13)
+- C14. (from org-dartlang-testcase:///constructors.dart:106:9)
+- C14._ (from org-dartlang-testcase:///constructors.dart:108:13)
+- C16.named (from org-dartlang-testcase:///constructors.dart:122:13)
+- C16._ (from org-dartlang-testcase:///constructors.dart:124:13)
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..f3c2f3b
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart.textual_outline.expect
@@ -0,0 +1,93 @@
+class C1 {
+  int i;
+  new (this.i);
+}
+
+class C2 {
+  final int i;
+  const new (this.i);
+}
+
+class C3 {
+  int i;
+  new named({required this.i});
+}
+
+class C4 {
+  final int i;
+  const new named({required this.i});
+}
+
+class C5 {
+  int i;
+  factory (int i) => new C5._(i);
+  new _ (this.i);
+}
+
+class C6 {
+  final int i;
+  factory (int i) => C6._(i);
+  const new _ (this.i);
+}
+
+class C7 {
+  int i;
+  factory ({required int i}) = C7._;
+  new _ ({required this.i});
+}
+
+class C8 {
+  final int i;
+  const factory (int i) = C8._;
+  const new _ (this.i);
+}
+
+class C9 {
+  int i;
+  factory named (int i) => new C9._(i);
+  new _ (this.i);
+}
+
+class C10 {
+  final int i;
+  factory named (int i) => C10._(i);
+  const new _ (this.i);
+}
+
+class C11 {
+  int i;
+  factory named ({required int i}) = C11._;
+  new _ ({required this.i});
+}
+
+class C12 {
+  final int i;
+  const factory named (int i) = C12._;
+  const new _ (this.i);
+}
+
+class C13 {
+  int i;
+  new (int i) : this._(i);
+  new _ (this.i);
+}
+
+class C14 {
+  final int i;
+  const new (int i) : this._(i);
+  const new _ (this.i);
+}
+
+class C15 {
+  int i;
+  new named({required int i}) : this._(i);
+  new _ (this.i);
+}
+
+class C16 {
+  final int i;
+  const new named({required int i}) : this._(i);
+  const new _ (this.i);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/primary_constructors/constructors.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/constructors.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..8772ac05
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/constructors.dart.textual_outline_modelled.expect
@@ -0,0 +1,93 @@
+class C1 {
+  int i;
+  new (this.i);
+}
+
+class C10 {
+  const new _ (this.i);
+  factory named (int i) => C10._(i);
+  final int i;
+}
+
+class C11 {
+  factory named ({required int i}) = C11._;
+  int i;
+  new _ ({required this.i});
+}
+
+class C12 {
+  const factory named (int i) = C12._;
+  const new _ (this.i);
+  final int i;
+}
+
+class C13 {
+  int i;
+  new (int i) : this._(i);
+  new _ (this.i);
+}
+
+class C14 {
+  const new (int i) : this._(i);
+  const new _ (this.i);
+  final int i;
+}
+
+class C15 {
+  int i;
+  new _ (this.i);
+  new named({required int i}) : this._(i);
+}
+
+class C16 {
+  const new _ (this.i);
+  const new named({required int i}) : this._(i);
+  final int i;
+}
+
+class C2 {
+  const new (this.i);
+  final int i;
+}
+
+class C3 {
+  int i;
+  new named({required this.i});
+}
+
+class C4 {
+  const new named({required this.i});
+  final int i;
+}
+
+class C5 {
+  factory (int i) => new C5._(i);
+  int i;
+  new _ (this.i);
+}
+
+class C6 {
+  const new _ (this.i);
+  factory (int i) => C6._(i);
+  final int i;
+}
+
+class C7 {
+  factory ({required int i}) = C7._;
+  int i;
+  new _ ({required this.i});
+}
+
+class C8 {
+  const factory (int i) = C8._;
+  const new _ (this.i);
+  final int i;
+}
+
+class C9 {
+  factory named (int i) => new C9._(i);
+  int i;
+  new _ (this.i);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart
new file mode 100644
index 0000000..95c27ed
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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() { // Error
+  a
+}
+
+enum const E2() {
+  a
+}
+
+enum const E3() {
+  a;
+  final int? b; // Error
+}
+
+enum const E4() { // Error
+  a;
+  int? b;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.expect
new file mode 100644
index 0000000..58259f3
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
+// enum E1() { // Error
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+//   a
+//   ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:15:14: Error: Final field 'b' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? b; // Error
+//              ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:18:14: Error: Constructor is marked 'const' so all fields must be final.
+// enum const E4() { // Error
+//              ^
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:20:8: Context: Field isn't final, but constructor is 'const'.
+//   int? b;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  constructor •(core::int #index, core::String #name) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 a = #C3;
+  static const field core::List<self::E2> values = #C4;
+  const constructor •(core::int #index, core::String #name) → self::E2
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 a = #C6;
+  final field core::int? b = null;
+  static const field core::List<self::E3> values = #C7;
+  const constructor •(core::int #index, core::String #name) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 a = #C8;
+  field core::int? b = null;
+  static const field core::List<self::E4> values = #C9;
+  const constructor •(core::int #index, core::String #name) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::E2 {index:#C1, _name:#C2}
+  #C4 = <self::E2>[#C3]
+  #C5 = null
+  #C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
+  #C7 = <self::E3>[#C6]
+  #C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
+  #C9 = <self::E4>[#C8]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_primary_constructor.dart:
+- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:13:14)
+- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:18:14)
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.modular.expect
new file mode 100644
index 0000000..58259f3
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.modular.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
+// enum E1() { // Error
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+//   a
+//   ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:15:14: Error: Final field 'b' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? b; // Error
+//              ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:18:14: Error: Constructor is marked 'const' so all fields must be final.
+// enum const E4() { // Error
+//              ^
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:20:8: Context: Field isn't final, but constructor is 'const'.
+//   int? b;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  constructor •(core::int #index, core::String #name) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 a = #C3;
+  static const field core::List<self::E2> values = #C4;
+  const constructor •(core::int #index, core::String #name) → self::E2
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 a = #C6;
+  final field core::int? b = null;
+  static const field core::List<self::E3> values = #C7;
+  const constructor •(core::int #index, core::String #name) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 a = #C8;
+  field core::int? b = null;
+  static const field core::List<self::E4> values = #C9;
+  const constructor •(core::int #index, core::String #name) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::E2 {index:#C1, _name:#C2}
+  #C4 = <self::E2>[#C3]
+  #C5 = null
+  #C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
+  #C7 = <self::E3>[#C6]
+  #C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
+  #C9 = <self::E4>[#C8]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_primary_constructor.dart:
+- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:13:14)
+- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:18:14)
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.outline.expect
new file mode 100644
index 0000000..a68ed91
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.outline.expect
@@ -0,0 +1,66 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
+// enum E1() { // Error
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+//   a
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::a];
+  constructor •(core::int #index, core::String #name) → self::E1
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 a = const self::E2::•(0, "a");
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::a];
+  const constructor •(core::int #index, core::String #name) → self::E2
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 a = const self::E3::•(0, "a");
+  final field core::int? b;
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::a];
+  const constructor •(core::int #index, core::String #name) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 a = const self::E4::•(0, "a");
+  field core::int? b;
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::a];
+  const constructor •(core::int #index, core::String #name) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:10:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:9:12 -> ListConstant(const <E2>[const E2{_Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:14:3 -> InstanceConstant(const E3{E3.b: null, _Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:13:12 -> ListConstant(const <E3>[const E3{E3.b: null, _Enum.index: 0, _Enum._name: "a"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_constructor.dart:19:3 -> InstanceConstant(const E4{E4.b: null, _Enum.index: 0, _Enum._name: "a"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_constructor.dart:18:12 -> ListConstant(const <E4>[const E4{E4.b: null, _Enum.index: 0, _Enum._name: "a"}])
+Extra constant evaluation: evaluated: 26, effectively constant: 6
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..58259f3
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.strong.transformed.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:5:8: Error: Generative enum constructors must be marked as 'const'.
+// enum E1() { // Error
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+//   a
+//   ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:15:14: Error: Final field 'b' is not initialized.
+// Try to initialize the field in the declaration or in every constructor.
+//   final int? b; // Error
+//              ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:18:14: Error: Constructor is marked 'const' so all fields must be final.
+// enum const E4() { // Error
+//              ^
+// pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart:20:8: Context: Field isn't final, but constructor is 'const'.
+//   int? b;
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field invalid-type a = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/primary_constructors/enum_primary_constructor.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'.
+  a
+  ^";
+  constructor •(core::int #index, core::String #name) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E2 a = #C3;
+  static const field core::List<self::E2> values = #C4;
+  const constructor •(core::int #index, core::String #name) → self::E2
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E3 a = #C6;
+  final field core::int? b = null;
+  static const field core::List<self::E3> values = #C7;
+  const constructor •(core::int #index, core::String #name) → self::E3
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E4 a = #C8;
+  field core::int? b = null;
+  static const field core::List<self::E4> values = #C9;
+  const constructor •(core::int #index, core::String #name) → self::E4
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::E2 {index:#C1, _name:#C2}
+  #C4 = <self::E2>[#C3]
+  #C5 = null
+  #C6 = self::E3 {b:#C5, index:#C1, _name:#C2}
+  #C7 = <self::E3>[#C6]
+  #C8 = self::E4 {b:#C5, index:#C1, _name:#C2}
+  #C9 = <self::E4>[#C8]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_primary_constructor.dart:
+- E2. (from org-dartlang-testcase:///enum_primary_constructor.dart:9:14)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E3. (from org-dartlang-testcase:///enum_primary_constructor.dart:13:14)
+- E4. (from org-dartlang-testcase:///enum_primary_constructor.dart:18:14)
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.textual_outline.expect
similarity index 100%
rename from pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.textual_outline.expect
rename to pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.textual_outline.expect
diff --git a/pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.textual_outline_modelled.expect
similarity index 100%
rename from pkg/front_end/testcases/declaring_constructors/enum_primary_constructor.dart.textual_outline_modelled.expect
rename to pkg/front_end/testcases/primary_constructors/enum_primary_constructor.dart.textual_outline_modelled.expect
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart
new file mode 100644
index 0000000..40077f0
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 const E1(int a) { x(0) }
+
+enum const E2(var int i) { x(0) } // Error
+
+enum const E3(final int i) { x(0) }
+
+enum const E4({final int? a, required final int b, final int c = 42}) {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2),
+}
+
+enum const E5(final int a, [final int? b, final int c = 42]) {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2),
+}
+
+
+enum const E6(int a, [int? b, int c = 42]) {
+  x(0),
+  y(0, 1),
+  z(0, 1, 2),
+}
+
+
+enum const E7({int? a, required int b, int c = 42]) {
+  x(b: 1),
+  y(a: 0, b: 1),
+  z(b: 1, c: 2),
+}
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.expect
new file mode 100644
index 0000000..cf13570
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.expect
@@ -0,0 +1,147 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:15: Error: Can't find '}' to match '{'.
+// enum const E7({int? a, required int b, int c = 42]) {
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:50: Error: Expected '}' before this.
+// enum const E7({int? a, required int b, int c = 42]) {
+//                                                  ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:7:14: Error: Constructor is marked 'const' so all fields must be final.
+// enum const E2(var int i) { x(0) } // Error
+//              ^
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:7:23: Context: Field isn't final, but constructor is 'const'.
+// enum const E2(var int i) { x(0) } // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = #C3;
+  static const field core::List<self::E1> values = #C4;
+  const constructor •(core::int #index, core::String #name, core::int a) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  field core::int i;
+  enum-element static const field self::E2 x = #C5;
+  static const field core::List<self::E2> values = #C6;
+  const constructor •(core::int #index, core::String #name, core::int i) → self::E2
+    : self::E2::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  final field core::int i;
+  enum-element static const field self::E3 x = #C7;
+  static const field core::List<self::E3> values = #C8;
+  const constructor •(core::int #index, core::String #name, final core::int i) → self::E3
+    : self::E3::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  enum-element static const field self::E4 x = #C12;
+  enum-element static const field self::E4 y = #C14;
+  enum-element static const field self::E4 z = #C17;
+  static const field core::List<self::E4> values = #C18;
+  const constructor •(core::int #index, core::String #name, {final core::int? a = #C9, required final core::int b, final core::int c = #C11}) → self::E4
+    : self::E4::a = a, self::E4::b = b, self::E4::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  enum-element static const field self::E5 x = #C19;
+  enum-element static const field self::E5 y = #C20;
+  enum-element static const field self::E5 z = #C21;
+  static const field core::List<self::E5> values = #C22;
+  const constructor •(core::int #index, core::String #name, final core::int a, [final core::int? b = #C9, final core::int c = #C11]) → self::E5
+    : self::E5::a = a, self::E5::b = b, self::E5::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E6 x = #C23;
+  enum-element static const field self::E6 y = #C24;
+  enum-element static const field self::E6 z = #C25;
+  static const field core::List<self::E6> values = #C26;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C9, core::int c = #C11]) → self::E6
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E7 x = #C27;
+  enum-element static const field self::E7 y = #C28;
+  enum-element static const field self::E7 z = #C29;
+  static const field core::List<self::E7> values = #C30;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C9, required core::int b, core::int c = #C11}) → self::E7
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "x"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {i:#C1, index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {i:#C1, index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = null
+  #C10 = 1
+  #C11 = 42
+  #C12 = self::E4 {a:#C9, b:#C10, c:#C11, index:#C1, _name:#C2}
+  #C13 = "y"
+  #C14 = self::E4 {a:#C1, b:#C10, c:#C11, index:#C10, _name:#C13}
+  #C15 = 2
+  #C16 = "z"
+  #C17 = self::E4 {a:#C9, b:#C10, c:#C15, index:#C15, _name:#C16}
+  #C18 = <self::E4>[#C12, #C14, #C17]
+  #C19 = self::E5 {a:#C1, b:#C9, c:#C11, index:#C1, _name:#C2}
+  #C20 = self::E5 {a:#C1, b:#C10, c:#C11, index:#C10, _name:#C13}
+  #C21 = self::E5 {a:#C1, b:#C10, c:#C15, index:#C15, _name:#C16}
+  #C22 = <self::E5>[#C19, #C20, #C21]
+  #C23 = self::E6 {index:#C1, _name:#C2}
+  #C24 = self::E6 {index:#C10, _name:#C13}
+  #C25 = self::E6 {index:#C15, _name:#C16}
+  #C26 = <self::E6>[#C23, #C24, #C25]
+  #C27 = self::E7 {index:#C1, _name:#C2}
+  #C28 = self::E7 {index:#C10, _name:#C13}
+  #C29 = self::E7 {index:#C15, _name:#C16}
+  #C30 = <self::E7>[#C27, #C28, #C29]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_primary_declaring_parameters.dart:
+- E1. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:5:14)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E2. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:7:14)
+- E3. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:9:14)
+- E4. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:11:14)
+- E5. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:17:14)
+- E6. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:24:14)
+- E7. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:31:14)
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.modular.expect
new file mode 100644
index 0000000..cf13570
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.modular.expect
@@ -0,0 +1,147 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:15: Error: Can't find '}' to match '{'.
+// enum const E7({int? a, required int b, int c = 42]) {
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:50: Error: Expected '}' before this.
+// enum const E7({int? a, required int b, int c = 42]) {
+//                                                  ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:7:14: Error: Constructor is marked 'const' so all fields must be final.
+// enum const E2(var int i) { x(0) } // Error
+//              ^
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:7:23: Context: Field isn't final, but constructor is 'const'.
+// enum const E2(var int i) { x(0) } // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = #C3;
+  static const field core::List<self::E1> values = #C4;
+  const constructor •(core::int #index, core::String #name, core::int a) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  field core::int i;
+  enum-element static const field self::E2 x = #C5;
+  static const field core::List<self::E2> values = #C6;
+  const constructor •(core::int #index, core::String #name, core::int i) → self::E2
+    : self::E2::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  final field core::int i;
+  enum-element static const field self::E3 x = #C7;
+  static const field core::List<self::E3> values = #C8;
+  const constructor •(core::int #index, core::String #name, final core::int i) → self::E3
+    : self::E3::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  enum-element static const field self::E4 x = #C12;
+  enum-element static const field self::E4 y = #C14;
+  enum-element static const field self::E4 z = #C17;
+  static const field core::List<self::E4> values = #C18;
+  const constructor •(core::int #index, core::String #name, {final core::int? a = #C9, required final core::int b, final core::int c = #C11}) → self::E4
+    : self::E4::a = a, self::E4::b = b, self::E4::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  enum-element static const field self::E5 x = #C19;
+  enum-element static const field self::E5 y = #C20;
+  enum-element static const field self::E5 z = #C21;
+  static const field core::List<self::E5> values = #C22;
+  const constructor •(core::int #index, core::String #name, final core::int a, [final core::int? b = #C9, final core::int c = #C11]) → self::E5
+    : self::E5::a = a, self::E5::b = b, self::E5::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E6 x = #C23;
+  enum-element static const field self::E6 y = #C24;
+  enum-element static const field self::E6 z = #C25;
+  static const field core::List<self::E6> values = #C26;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C9, core::int c = #C11]) → self::E6
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E7 x = #C27;
+  enum-element static const field self::E7 y = #C28;
+  enum-element static const field self::E7 z = #C29;
+  static const field core::List<self::E7> values = #C30;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C9, required core::int b, core::int c = #C11}) → self::E7
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "x"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {i:#C1, index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {i:#C1, index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = null
+  #C10 = 1
+  #C11 = 42
+  #C12 = self::E4 {a:#C9, b:#C10, c:#C11, index:#C1, _name:#C2}
+  #C13 = "y"
+  #C14 = self::E4 {a:#C1, b:#C10, c:#C11, index:#C10, _name:#C13}
+  #C15 = 2
+  #C16 = "z"
+  #C17 = self::E4 {a:#C9, b:#C10, c:#C15, index:#C15, _name:#C16}
+  #C18 = <self::E4>[#C12, #C14, #C17]
+  #C19 = self::E5 {a:#C1, b:#C9, c:#C11, index:#C1, _name:#C2}
+  #C20 = self::E5 {a:#C1, b:#C10, c:#C11, index:#C10, _name:#C13}
+  #C21 = self::E5 {a:#C1, b:#C10, c:#C15, index:#C15, _name:#C16}
+  #C22 = <self::E5>[#C19, #C20, #C21]
+  #C23 = self::E6 {index:#C1, _name:#C2}
+  #C24 = self::E6 {index:#C10, _name:#C13}
+  #C25 = self::E6 {index:#C15, _name:#C16}
+  #C26 = <self::E6>[#C23, #C24, #C25]
+  #C27 = self::E7 {index:#C1, _name:#C2}
+  #C28 = self::E7 {index:#C10, _name:#C13}
+  #C29 = self::E7 {index:#C15, _name:#C16}
+  #C30 = <self::E7>[#C27, #C28, #C29]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_primary_declaring_parameters.dart:
+- E1. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:5:14)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E2. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:7:14)
+- E3. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:9:14)
+- E4. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:11:14)
+- E5. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:17:14)
+- E6. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:24:14)
+- E7. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:31:14)
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.outline.expect
new file mode 100644
index 0000000..caa91ea
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.outline.expect
@@ -0,0 +1,120 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:15: Error: Can't find '}' to match '{'.
+// enum const E7({int? a, required int b, int c = 42]) {
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:50: Error: Expected '}' before this.
+// enum const E7({int? a, required int b, int c = 42]) {
+//                                                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = const self::E1::•(0, "x", 0);
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::x];
+  const constructor •(core::int #index, core::String #name, core::int a) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  field core::int i;
+  enum-element static const field self::E2 x = const self::E2::•(0, "x", 0);
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::x];
+  const constructor •(core::int #index, core::String #name, core::int i) → self::E2
+    : self::E2::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  final field core::int i;
+  enum-element static const field self::E3 x = const self::E3::•(0, "x", 0);
+  static const field core::List<self::E3> values = const <self::E3>[self::E3::x];
+  const constructor •(core::int #index, core::String #name, final core::int i) → self::E3
+    : self::E3::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  enum-element static const field self::E4 x = const self::E4::•(0, "x", b: 1);
+  enum-element static const field self::E4 y = const self::E4::•(1, "y", a: 0, b: 1);
+  enum-element static const field self::E4 z = const self::E4::•(2, "z", b: 1, c: 2);
+  static const field core::List<self::E4> values = const <self::E4>[self::E4::x, self::E4::y, self::E4::z];
+  const constructor •(core::int #index, core::String #name, {final core::int? a = null, required final core::int b, final core::int c = 42}) → self::E4
+    : self::E4::a = a, self::E4::b = b, self::E4::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  enum-element static const field self::E5 x = const self::E5::•(0, "x", 0);
+  enum-element static const field self::E5 y = const self::E5::•(1, "y", 0, 1);
+  enum-element static const field self::E5 z = const self::E5::•(2, "z", 0, 1, 2);
+  static const field core::List<self::E5> values = const <self::E5>[self::E5::x, self::E5::y, self::E5::z];
+  const constructor •(core::int #index, core::String #name, final core::int a, [final core::int? b = null, final core::int c = 42]) → self::E5
+    : self::E5::a = a, self::E5::b = b, self::E5::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E6 x = const self::E6::•(0, "x", 0);
+  enum-element static const field self::E6 y = const self::E6::•(1, "y", 0, 1);
+  enum-element static const field self::E6 z = const self::E6::•(2, "z", 0, 1, 2);
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::x, self::E6::y, self::E6::z];
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = null, core::int c = 42]) → self::E6
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E7 x = const self::E7::•(0, "x", b: 1);
+  enum-element static const field self::E7 y = const self::E7::•(1, "y", a: 0, b: 1);
+  enum-element static const field self::E7 z = const self::E7::•(2, "z", b: 1, c: 2);
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::x, self::E7::y, self::E7::z];
+  const constructor •(core::int #index, core::String #name, {core::int? a = null, required core::int b, core::int c = 42}) → self::E7
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+
+
+Extra constant evaluation status:
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:5:24 -> InstanceConstant(const E1{_Enum.index: 0, _Enum._name: "x"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:5:12 -> ListConstant(const <E1>[const E1{_Enum.index: 0, _Enum._name: "x"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:7:28 -> InstanceConstant(const E2{E2.i: 0, _Enum.index: 0, _Enum._name: "x"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:7:12 -> ListConstant(const <E2>[const E2{E2.i: 0, _Enum.index: 0, _Enum._name: "x"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:9:30 -> InstanceConstant(const E3{E3.i: 0, _Enum.index: 0, _Enum._name: "x"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:9:12 -> ListConstant(const <E3>[const E3{E3.i: 0, _Enum.index: 0, _Enum._name: "x"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:12:3 -> InstanceConstant(const E4{E4.a: null, E4.b: 1, E4.c: 42, _Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:13:3 -> InstanceConstant(const E4{E4.a: 0, E4.b: 1, E4.c: 42, _Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:14:3 -> InstanceConstant(const E4{E4.a: null, E4.b: 1, E4.c: 2, _Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:11:12 -> ListConstant(const <E4>[const E4{E4.a: null, E4.b: 1, E4.c: 42, _Enum.index: 0, _Enum._name: "x"}, const E4{E4.a: 0, E4.b: 1, E4.c: 42, _Enum.index: 1, _Enum._name: "y"}, const E4{E4.a: null, E4.b: 1, E4.c: 2, _Enum.index: 2, _Enum._name: "z"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:18:3 -> InstanceConstant(const E5{E5.a: 0, E5.b: null, E5.c: 42, _Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:19:3 -> InstanceConstant(const E5{E5.a: 0, E5.b: 1, E5.c: 42, _Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:20:3 -> InstanceConstant(const E5{E5.a: 0, E5.b: 1, E5.c: 2, _Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:17:12 -> ListConstant(const <E5>[const E5{E5.a: 0, E5.b: null, E5.c: 42, _Enum.index: 0, _Enum._name: "x"}, const E5{E5.a: 0, E5.b: 1, E5.c: 42, _Enum.index: 1, _Enum._name: "y"}, const E5{E5.a: 0, E5.b: 1, E5.c: 2, _Enum.index: 2, _Enum._name: "z"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:25:3 -> InstanceConstant(const E6{_Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:26:3 -> InstanceConstant(const E6{_Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:27:3 -> InstanceConstant(const E6{_Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:24:12 -> ListConstant(const <E6>[const E6{_Enum.index: 0, _Enum._name: "x"}, const E6{_Enum.index: 1, _Enum._name: "y"}, const E6{_Enum.index: 2, _Enum._name: "z"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:32:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "x"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:33:3 -> InstanceConstant(const E7{_Enum.index: 1, _Enum._name: "y"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:34:3 -> InstanceConstant(const E7{_Enum.index: 2, _Enum._name: "z"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///enum_primary_declaring_parameters.dart:31:12 -> ListConstant(const <E7>[const E7{_Enum.index: 0, _Enum._name: "x"}, const E7{_Enum.index: 1, _Enum._name: "y"}, const E7{_Enum.index: 2, _Enum._name: "z"}])
+Extra constant evaluation: evaluated: 65, effectively constant: 22
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.transformed.expect
new file mode 100644
index 0000000..cf13570
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.strong.transformed.expect
@@ -0,0 +1,147 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:15: Error: Can't find '}' to match '{'.
+// enum const E7({int? a, required int b, int c = 42]) {
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:31:50: Error: Expected '}' before this.
+// enum const E7({int? a, required int b, int c = 42]) {
+//                                                  ^
+//
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:7:14: Error: Constructor is marked 'const' so all fields must be final.
+// enum const E2(var int i) { x(0) } // Error
+//              ^
+// pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart:7:23: Context: Field isn't final, but constructor is 'const'.
+// enum const E2(var int i) { x(0) } // Error
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E1 x = #C3;
+  static const field core::List<self::E1> values = #C4;
+  const constructor •(core::int #index, core::String #name, core::int a) → self::E1
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  field core::int i;
+  enum-element static const field self::E2 x = #C5;
+  static const field core::List<self::E2> values = #C6;
+  const constructor •(core::int #index, core::String #name, core::int i) → self::E2
+    : self::E2::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  final field core::int i;
+  enum-element static const field self::E3 x = #C7;
+  static const field core::List<self::E3> values = #C8;
+  const constructor •(core::int #index, core::String #name, final core::int i) → self::E3
+    : self::E3::i = i, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  final field core::int? a;
+  final field core::int b;
+  final field core::int c;
+  enum-element static const field self::E4 x = #C12;
+  enum-element static const field self::E4 y = #C14;
+  enum-element static const field self::E4 z = #C17;
+  static const field core::List<self::E4> values = #C18;
+  const constructor •(core::int #index, core::String #name, {final core::int? a = #C9, required final core::int b, final core::int c = #C11}) → self::E4
+    : self::E4::a = a, self::E4::b = b, self::E4::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  final field core::int a;
+  final field core::int? b;
+  final field core::int c;
+  enum-element static const field self::E5 x = #C19;
+  enum-element static const field self::E5 y = #C20;
+  enum-element static const field self::E5 z = #C21;
+  static const field core::List<self::E5> values = #C22;
+  const constructor •(core::int #index, core::String #name, final core::int a, [final core::int? b = #C9, final core::int c = #C11]) → self::E5
+    : self::E5::a = a, self::E5::b = b, self::E5::c = c, super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E6 x = #C23;
+  enum-element static const field self::E6 y = #C24;
+  enum-element static const field self::E6 z = #C25;
+  static const field core::List<self::E6> values = #C26;
+  const constructor •(core::int #index, core::String #name, core::int a, [core::int? b = #C9, core::int c = #C11]) → self::E6
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  enum-element static const field self::E7 x = #C27;
+  enum-element static const field self::E7 y = #C28;
+  enum-element static const field self::E7 z = #C29;
+  static const field core::List<self::E7> values = #C30;
+  const constructor •(core::int #index, core::String #name, {core::int? a = #C9, required core::int b, core::int c = #C11}) → self::E7
+    : super core::_Enum::•(#index, #name)
+    ;
+  method core::_enumToString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "x"
+  #C3 = self::E1 {index:#C1, _name:#C2}
+  #C4 = <self::E1>[#C3]
+  #C5 = self::E2 {i:#C1, index:#C1, _name:#C2}
+  #C6 = <self::E2>[#C5]
+  #C7 = self::E3 {i:#C1, index:#C1, _name:#C2}
+  #C8 = <self::E3>[#C7]
+  #C9 = null
+  #C10 = 1
+  #C11 = 42
+  #C12 = self::E4 {a:#C9, b:#C10, c:#C11, index:#C1, _name:#C2}
+  #C13 = "y"
+  #C14 = self::E4 {a:#C1, b:#C10, c:#C11, index:#C10, _name:#C13}
+  #C15 = 2
+  #C16 = "z"
+  #C17 = self::E4 {a:#C9, b:#C10, c:#C15, index:#C15, _name:#C16}
+  #C18 = <self::E4>[#C12, #C14, #C17]
+  #C19 = self::E5 {a:#C1, b:#C9, c:#C11, index:#C1, _name:#C2}
+  #C20 = self::E5 {a:#C1, b:#C10, c:#C11, index:#C10, _name:#C13}
+  #C21 = self::E5 {a:#C1, b:#C10, c:#C15, index:#C15, _name:#C16}
+  #C22 = <self::E5>[#C19, #C20, #C21]
+  #C23 = self::E6 {index:#C1, _name:#C2}
+  #C24 = self::E6 {index:#C10, _name:#C13}
+  #C25 = self::E6 {index:#C15, _name:#C16}
+  #C26 = <self::E6>[#C23, #C24, #C25]
+  #C27 = self::E7 {index:#C1, _name:#C2}
+  #C28 = self::E7 {index:#C10, _name:#C13}
+  #C29 = self::E7 {index:#C15, _name:#C16}
+  #C30 = <self::E7>[#C27, #C28, #C29]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_primary_declaring_parameters.dart:
+- E1. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:5:14)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart)
+- E2. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:7:14)
+- E3. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:9:14)
+- E4. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:11:14)
+- E5. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:17:14)
+- E6. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:24:14)
+- E7. (from org-dartlang-testcase:///enum_primary_declaring_parameters.dart:31:14)
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.textual_outline.expect
new file mode 100644
index 0000000..bff864c
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+enum const E1(int i) { x(0) }
+
+enum const E2(var int i) { x(0) }
+
+enum const E3(final int i) { x(0) }
+
+enum const E4({final int? a, required final int b, final int c = 42}) { x(b: 1), y(a: 0, b: 1), z(b: 1, c: 2), }
+
+enum const E5(final int a, [final int? b, final int c = 42]) { x(0), y(0, 1), z(0, 1, 2), }
diff --git a/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..bff864c
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/enum_primary_declaring_parameters.dart.textual_outline_modelled.expect
@@ -0,0 +1,9 @@
+enum const E1(int i) { x(0) }
+
+enum const E2(var int i) { x(0) }
+
+enum const E3(final int i) { x(0) }
+
+enum const E4({final int? a, required final int b, final int c = 42}) { x(b: 1), y(a: 0, b: 1), z(b: 1, c: 2), }
+
+enum const E5(final int a, [final int? b, final int c = 42]) { x(0), y(0, 1), z(0, 1, 2), }
diff --git a/pkg/front_end/testcases/primary_constructors/folder.options b/pkg/front_end/testcases/primary_constructors/folder.options
new file mode 100644
index 0000000..79601a4
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/folder.options
@@ -0,0 +1 @@
+--enable-experiment=primary-constructors
diff --git a/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart
new file mode 100644
index 0000000..2eb7930
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Foo {
+  // TODO(johnniwinther): Improve error recovery here.
+  Foo() : this.new = 42;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.expect
new file mode 100644
index 0000000..9aa6c9f
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.expect
@@ -0,0 +1,76 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got 'new'.
+// Try inserting an identifier before 'new'.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Foo() : this.new = 42;
+//           ^^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected '{' before this.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected ';' after this.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected a class member, but got '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:24: Error: Expected a class member, but got ';'.
+//   Foo() : this.new = 42;
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: 'Foo' is already declared in this scope.
+//   Foo() : this.new = 42;
+//                ^^^
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:3: Context: Previous declaration of 'Foo'.
+//   Foo() : this.new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   Foo() : this.new = 42;
+//                ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   Foo() : this.new = 42;
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo
+    : invalid-initializer "pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: This couldn't be parsed.
+  Foo() : this.new = 42;
+          ^" {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.modular.expect
new file mode 100644
index 0000000..9aa6c9f
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.modular.expect
@@ -0,0 +1,76 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got 'new'.
+// Try inserting an identifier before 'new'.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Foo() : this.new = 42;
+//           ^^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected '{' before this.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected ';' after this.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected a class member, but got '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:24: Error: Expected a class member, but got ';'.
+//   Foo() : this.new = 42;
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: 'Foo' is already declared in this scope.
+//   Foo() : this.new = 42;
+//                ^^^
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:3: Context: Previous declaration of 'Foo'.
+//   Foo() : this.new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   Foo() : this.new = 42;
+//                ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   Foo() : this.new = 42;
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo
+    : invalid-initializer "pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: This couldn't be parsed.
+  Foo() : this.new = 42;
+          ^" {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.outline.expect
new file mode 100644
index 0000000..081d666
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.outline.expect
@@ -0,0 +1,59 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got 'new'.
+// Try inserting an identifier before 'new'.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Foo() : this.new = 42;
+//           ^^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected '{' before this.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected ';' after this.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected a class member, but got '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:24: Error: Expected a class member, but got ';'.
+//   Foo() : this.new = 42;
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: 'Foo' is already declared in this scope.
+//   Foo() : this.new = 42;
+//                ^^^
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:3: Context: Previous declaration of 'Foo'.
+//   Foo() : this.new = 42;
+//   ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..9aa6c9f
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.strong.transformed.expect
@@ -0,0 +1,76 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got 'new'.
+// Try inserting an identifier before 'new'.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: Expected an assignment after the field name.
+// To initialize a field, use the syntax 'name = value'.
+//   Foo() : this.new = 42;
+//           ^^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected '{' before this.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   Foo() : this.new = 42;
+//                ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected ';' after this.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Expected a class member, but got '42'.
+//   Foo() : this.new = 42;
+//                      ^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:24: Error: Expected a class member, but got ';'.
+//   Foo() : this.new = 42;
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: 'Foo' is already declared in this scope.
+//   Foo() : this.new = 42;
+//                ^^^
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:3: Context: Previous declaration of 'Foo'.
+//   Foo() : this.new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:16: Error: Expected an identifier, but got ''.
+// Try inserting an identifier before ''.
+//   Foo() : this.new = 42;
+//                ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:20: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   Foo() : this.new = 42;
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:22: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   Foo() : this.new = 42;
+//                      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  constructor •() → self::Foo
+    : invalid-initializer "pkg/front_end/testcases/primary_constructors/new_in_initializer.dart:7:11: Error: This couldn't be parsed.
+  Foo() : this.new = 42;
+          ^" {}
+}
diff --git a/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..2fcf07d
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/new_in_initializer.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+class Foo {
+  Foo() : =this.{}
+  new ()= ;
+  42;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart
new file mode 100644
index 0000000..082810e
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 C1 {
+  factory a.b() => throw '';
+}
+
+class C2 {
+  new a.b();
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.expect
new file mode 100644
index 0000000..c87e5f8
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:6:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory a.b() => throw '';
+//           ^
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:5:7: Context: The name of the enclosing class is 'C1'.
+// class C1 {
+//       ^^
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:10:7: Error: Constructors declared with the 'new' keyword can't have qualified names.
+// Try removing the class name prefix from the qualified name or removing the 'new' keyword.
+//   new a.b();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  static factory b() → self::C1
+    return throw "";
+}
+class C2 extends core::Object {
+  constructor b() → self::C2
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.modular.expect
new file mode 100644
index 0000000..c87e5f8
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.modular.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:6:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory a.b() => throw '';
+//           ^
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:5:7: Context: The name of the enclosing class is 'C1'.
+// class C1 {
+//       ^^
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:10:7: Error: Constructors declared with the 'new' keyword can't have qualified names.
+// Try removing the class name prefix from the qualified name or removing the 'new' keyword.
+//   new a.b();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  static factory b() → self::C1
+    return throw "";
+}
+class C2 extends core::Object {
+  constructor b() → self::C2
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.outline.expect
new file mode 100644
index 0000000..d2bc788
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.outline.expect
@@ -0,0 +1,27 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:6:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory a.b() => throw '';
+//           ^
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:5:7: Context: The name of the enclosing class is 'C1'.
+// class C1 {
+//       ^^
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:10:7: Error: Constructors declared with the 'new' keyword can't have qualified names.
+// Try removing the class name prefix from the qualified name or removing the 'new' keyword.
+//   new a.b();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  static factory b() → self::C1
+    ;
+}
+class C2 extends core::Object {
+  constructor b() → self::C2
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.transformed.expect
new file mode 100644
index 0000000..c87e5f8
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.strong.transformed.expect
@@ -0,0 +1,28 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:6:11: Error: The name of a constructor must match the name of the enclosing class.
+//   factory a.b() => throw '';
+//           ^
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:5:7: Context: The name of the enclosing class is 'C1'.
+// class C1 {
+//       ^^
+//
+// pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart:10:7: Error: Constructors declared with the 'new' keyword can't have qualified names.
+// Try removing the class name prefix from the qualified name or removing the 'new' keyword.
+//   new a.b();
+//       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  static factory b() → self::C1
+    return throw "";
+}
+class C2 extends core::Object {
+  constructor b() → self::C2
+    : super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.textual_outline.expect
new file mode 100644
index 0000000..82f7254
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class C1 {
+  factory a.b() => throw '';
+}
+
+class C2 {
+  new a.b();
+}
diff --git a/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..82f7254
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/qualified_constructor_name.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class C1 {
+  factory a.b() => throw '';
+}
+
+class C2 {
+  new a.b();
+}
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart
new file mode 100644
index 0000000..dcd2415
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart
@@ -0,0 +1,19 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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 C1 {
+  new = 42;
+}
+
+class C2 {
+  new() = 42;
+}
+
+class C3 {
+  C3() = C3;
+}
+
+class C4 {
+  C4.name() = C4;
+}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.expect
new file mode 100644
index 0000000..b98bf6c
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.expect
@@ -0,0 +1,142 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected ';' after this.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected a class member, but got '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:11: Error: Expected a class member, but got ';'.
+//   new = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected ';' after this.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected a class member, but got '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:13: Error: Expected a class member, but got ';'.
+//   new() = 42;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Couldn't find constructor 'C4'.
+//   C4.name() = C4;
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   new = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   new() = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:10: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C3() = C3;
+//          ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C4.name() = C4;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Constructors can't have a return type.
+Try removing the return type.
+  new = 42;
+        ^";
+}
+class C2 extends core::Object {
+  constructor •() → self::C2
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Constructors can't have a return type.
+Try removing the return type.
+  new() = 42;
+          ^";
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:10: Error: Constructors can't have a return type.
+Try removing the return type.
+  C3() = C3;
+         ^";
+}
+class C4 extends core::Object {
+  constructor name() → self::C4
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Constructors can't have a return type.
+Try removing the return type.
+  C4.name() = C4;
+              ^";
+}
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.modular.expect
new file mode 100644
index 0000000..b98bf6c
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.modular.expect
@@ -0,0 +1,142 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected ';' after this.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected a class member, but got '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:11: Error: Expected a class member, but got ';'.
+//   new = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected ';' after this.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected a class member, but got '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:13: Error: Expected a class member, but got ';'.
+//   new() = 42;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Couldn't find constructor 'C4'.
+//   C4.name() = C4;
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   new = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   new() = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:10: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C3() = C3;
+//          ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C4.name() = C4;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Constructors can't have a return type.
+Try removing the return type.
+  new = 42;
+        ^";
+}
+class C2 extends core::Object {
+  constructor •() → self::C2
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Constructors can't have a return type.
+Try removing the return type.
+  new() = 42;
+          ^";
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:10: Error: Constructors can't have a return type.
+Try removing the return type.
+  C3() = C3;
+         ^";
+}
+class C4 extends core::Object {
+  constructor name() → self::C4
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Constructors can't have a return type.
+Try removing the return type.
+  C4.name() = C4;
+              ^";
+}
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.outline.expect
new file mode 100644
index 0000000..7e3a233
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.outline.expect
@@ -0,0 +1,86 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected ';' after this.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected a class member, but got '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:11: Error: Expected a class member, but got ';'.
+//   new = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected ';' after this.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected a class member, but got '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:13: Error: Expected a class member, but got ';'.
+//   new() = 42;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Couldn't find constructor 'C4'.
+//   C4.name() = C4;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    ;
+}
+class C2 extends core::Object {
+  constructor •() → self::C2
+    ;
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    ;
+}
+class C4 extends core::Object {
+  constructor name() → self::C4
+    ;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.transformed.expect
new file mode 100644
index 0000000..b98bf6c
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.strong.transformed.expect
@@ -0,0 +1,142 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:3: Error: A method declaration needs an explicit list of parameters.
+// Try adding a parameter list to the method declaration.
+//   new = 42;
+//   ^^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected ';' after this.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Expected a class member, but got '42'.
+//   new = 42;
+//         ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:11: Error: Expected a class member, but got ';'.
+//   new = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected an identifier, but got '42'.
+// Try inserting an identifier before '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected ';' after this.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Expected a class member, but got '42'.
+//   new() = 42;
+//           ^^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:13: Error: Expected a class member, but got ';'.
+//   new() = 42;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Only factory constructor can specify '=' redirection.
+// Try making this a factory constructor, or remove the redirection.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Couldn't find constructor 'C4'.
+//   C4.name() = C4;
+//               ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:7: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   new = 42;
+//       ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   new = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:9: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   new() = 42;
+//         ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   new() = 42;
+//           ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:8: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C3() = C3;
+//        ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:10: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C3() = C3;
+//          ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:13: Error: Expected a function body or '=>'.
+// Try adding {}.
+//   C4.name() = C4;
+//             ^
+//
+// pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Constructors can't have a return type.
+// Try removing the return type.
+//   C4.name() = C4;
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  constructor •() → self::C1
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:6:9: Error: Constructors can't have a return type.
+Try removing the return type.
+  new = 42;
+        ^";
+}
+class C2 extends core::Object {
+  constructor •() → self::C2
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:10:11: Error: Constructors can't have a return type.
+Try removing the return type.
+  new() = 42;
+          ^";
+}
+class C3 extends core::Object {
+  constructor •() → self::C3
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:14:10: Error: Constructors can't have a return type.
+Try removing the return type.
+  C3() = C3;
+         ^";
+}
+class C4 extends core::Object {
+  constructor name() → self::C4
+    : super core::Object::•()
+    invalid-expression "pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart:18:15: Error: Constructors can't have a return type.
+Try removing the return type.
+  C4.name() = C4;
+              ^";
+}
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.textual_outline.expect
new file mode 100644
index 0000000..757efa6
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.textual_outline.expect
@@ -0,0 +1,17 @@
+class C1 {
+  new ()= ;
+  42;
+}
+
+class C2 {
+  new() = ;
+  42;
+}
+
+class C3 {
+  C3() = C3;
+}
+
+class C4 {
+  C4.name() = C4;
+}
diff --git a/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..778ea86
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/redirecting_non_factory.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+class C {
+  C.name() = C;
+}
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart
similarity index 100%
rename from pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart
rename to pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart
diff --git a/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.expect b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.expect
new file mode 100644
index 0000000..11a086e
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
+// extension type ET3(final int i) {}
+//                              ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
+// extension type ET4(i) {} // Error
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
+// extension type ET5(var i) {} // Error
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
+  lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
+  return self::ET1|constructor#(i);
+static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */ {
+  lowered final self::ET2% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
+  return self::ET2|constructor#(i);
+static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
+  lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
+  return self::ET3|constructor#(i);
+static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET4% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
+  return self::ET4|constructor#(i);
+static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET5% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
+  return self::ET5|constructor#(i);
+static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET6% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
+  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.modular.expect b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.modular.expect
new file mode 100644
index 0000000..11a086e
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.modular.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
+// extension type ET3(final int i) {}
+//                              ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
+// extension type ET4(i) {} // Error
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
+// extension type ET5(var i) {} // Error
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
+  lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
+  return self::ET1|constructor#(i);
+static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */ {
+  lowered final self::ET2% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
+  return self::ET2|constructor#(i);
+static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
+  lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
+  return self::ET3|constructor#(i);
+static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET4% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
+  return self::ET4|constructor#(i);
+static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET5% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
+  return self::ET5|constructor#(i);
+static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET6% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
+  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.outline.expect b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.outline.expect
new file mode 100644
index 0000000..dc6fd19
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.outline.expect
@@ -0,0 +1,81 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
+// extension type ET3(final int i) {}
+//                              ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
+// extension type ET4(i) {} // Error
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
+// extension type ET5(var i) {} // Error
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */
+  ;
+static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
+  return self::ET1|constructor#(i);
+static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */
+  ;
+static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
+  return self::ET2|constructor#(i);
+static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */
+  ;
+static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
+  return self::ET3|constructor#(i);
+static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
+  ;
+static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
+  return self::ET4|constructor#(i);
+static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
+  ;
+static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
+  return self::ET5|constructor#(i);
+static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
+  ;
+static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
+  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.transformed.expect b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.transformed.expect
new file mode 100644
index 0000000..11a086e
--- /dev/null
+++ b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.strong.transformed.expect
@@ -0,0 +1,93 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:11:30: Error: Representation fields can't have modifiers.
+// extension type ET3(final int i) {}
+//                              ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:13:20: Error: Expected a representation type.
+// extension type ET4(i) {} // Error
+//                    ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:15:24: Error: Expected a representation type.
+// extension type ET5(var i) {} // Error
+//                        ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Expected a representation type.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+// pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart:17:26: Error: Representation fields can't have modifiers.
+// extension type ET6(final i) {} // Error
+//                          ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension type ET1(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET1|constructor#;
+  constructor tearoff • = self::ET1|constructor#_#new#tearOff;
+}
+extension type ET2(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET2|constructor#;
+  constructor tearoff • = self::ET2|constructor#_#new#tearOff;
+}
+extension type ET3(core::int i) {
+  abstract extension-type-member representation-field get i() → core::int;
+  constructor • = self::ET3|constructor#;
+  constructor tearoff • = self::ET3|constructor#_#new#tearOff;
+}
+extension type ET4(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET4|constructor#;
+  constructor tearoff • = self::ET4|constructor#_#new#tearOff;
+}
+extension type ET5(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET5|constructor#;
+  constructor tearoff • = self::ET5|constructor#_#new#tearOff;
+}
+extension type ET6(invalid-type i) {
+  abstract extension-type-member representation-field get i() → invalid-type;
+  constructor • = self::ET6|constructor#;
+  constructor tearoff • = self::ET6|constructor#_#new#tearOff;
+}
+static extension-type-member method ET1|constructor#(core::int i) → self::ET1% /* erasure=core::int, declared=! */ {
+  lowered final self::ET1% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET1|constructor#_#new#tearOff(core::int i) → self::ET1% /* erasure=core::int, declared=! */
+  return self::ET1|constructor#(i);
+static extension-type-member method ET2|constructor#(core::int i) → self::ET2% /* erasure=core::int, declared=! */ {
+  lowered final self::ET2% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET2|constructor#_#new#tearOff(core::int i) → self::ET2% /* erasure=core::int, declared=! */
+  return self::ET2|constructor#(i);
+static extension-type-member method ET3|constructor#(final core::int i) → self::ET3% /* erasure=core::int, declared=! */ {
+  lowered final self::ET3% /* erasure=core::int, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET3|constructor#_#new#tearOff(core::int i) → self::ET3% /* erasure=core::int, declared=! */
+  return self::ET3|constructor#(i);
+static extension-type-member method ET4|constructor#(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET4% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET4|constructor#_#new#tearOff(invalid-type i) → self::ET4% /* erasure=invalid-type, declared=! */
+  return self::ET4|constructor#(i);
+static extension-type-member method ET5|constructor#(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET5% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET5|constructor#_#new#tearOff(invalid-type i) → self::ET5% /* erasure=invalid-type, declared=! */
+  return self::ET5|constructor#(i);
+static extension-type-member method ET6|constructor#(final invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */ {
+  lowered final self::ET6% /* erasure=invalid-type, declared=! */ #this = i;
+  return #this;
+}
+static extension-type-member synthetic method ET6|constructor#_#new#tearOff(invalid-type i) → self::ET6% /* erasure=invalid-type, declared=! */
+  return self::ET6|constructor#(i);
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.textual_outline.expect b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.textual_outline.expect
similarity index 100%
rename from pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.textual_outline.expect
rename to pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.textual_outline.expect
diff --git a/pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.textual_outline_modelled.expect
similarity index 100%
rename from pkg/front_end/testcases/declaring_constructors/representation_field_modifier.dart.textual_outline_modelled.expect
rename to pkg/front_end/testcases/primary_constructors/representation_field_modifier.dart.textual_outline_modelled.expect
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart
new file mode 100644
index 0000000..41914ac
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 {
+  int? _x;
+  int? _y;
+  C({this._x}) : _y = _x;
+}
+
+main() {
+  var c = C(x: 1);
+  print(c._y);
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.expect b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.expect
new file mode 100644
index 0000000..efd06ef
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  field core::int? _y;
+  constructor •({core::int? x = #C1}) → self::C
+    : self::C::_x = x, self::C::_y = x, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C c = new self::C::•(x: 1);
+  core::print(c.{self::C::_y}{core::int?});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.modular.expect
new file mode 100644
index 0000000..efd06ef
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.modular.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  field core::int? _y;
+  constructor •({core::int? x = #C1}) → self::C
+    : self::C::_x = x, self::C::_y = x, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C c = new self::C::•(x: 1);
+  core::print(c.{self::C::_y}{core::int?});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.outline.expect b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.outline.expect
new file mode 100644
index 0000000..4334a7b
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.outline.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  field core::int? _y;
+  constructor •({core::int? x = null}) → self::C
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.transformed.expect
new file mode 100644
index 0000000..efd06ef
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  field core::int? _y;
+  constructor •({core::int? x = #C1}) → self::C
+    : self::C::_x = x, self::C::_y = x, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C c = new self::C::•(x: 1);
+  core::print(c.{self::C::_y}{core::int?});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.textual_outline.expect b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.textual_outline.expect
new file mode 100644
index 0000000..3c8e91d
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+class C {
+  int? _x;
+  int? _y;
+  C({this._x}) : _y = _x;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..43bdc22
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/access_in_initializer.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+class C {
+  C({this._x}) : _y = _x;
+  int? _x;
+  int? _y;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart
new file mode 100644
index 0000000..ca95275
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 {
+  int? _foo;
+  C({this._foo});
+}
+
+main() {
+  var c = C(foo: 1);
+  print(c._foo);
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.expect
new file mode 100644
index 0000000..f3e0b2f
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _foo;
+  constructor •({core::int? foo = #C1}) → self::C
+    : self::C::_foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C c = new self::C::•(foo: 1);
+  core::print(c.{self::C::_foo}{core::int?});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.modular.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.modular.expect
new file mode 100644
index 0000000..f3e0b2f
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.modular.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _foo;
+  constructor •({core::int? foo = #C1}) → self::C
+    : self::C::_foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C c = new self::C::•(foo: 1);
+  core::print(c.{self::C::_foo}{core::int?});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.outline.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.outline.expect
new file mode 100644
index 0000000..01c08bb
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _foo;
+  constructor •({core::int? foo = null}) → self::C
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.transformed.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.transformed.expect
new file mode 100644
index 0000000..f3e0b2f
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _foo;
+  constructor •({core::int? foo = #C1}) → self::C
+    : self::C::_foo = foo, super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::C c = new self::C::•(foo: 1);
+  core::print(c.{self::C::_foo}{core::int?});
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.textual_outline.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.textual_outline.expect
new file mode 100644
index 0000000..ee2d656
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+class C {
+  int? _foo;
+  C({this._foo});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..1f13d26
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+class C {
+  C({this._foo});
+  int? _foo;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart
new file mode 100644
index 0000000..4864f00
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Colliding initializing formals.
+class C1 {
+  final String? _foo;
+  C1({required this._foo, required this._foo}) {}
+}
+
+/// Collide with previous public initializing formal.
+class C2 {
+  final String? _foo;
+  C2({required this._foo, String? _foo}) {}
+}
+
+/// Collide with later private named.
+class C3 {
+  final String? _foo;
+  C3({required this._foo, String? foo}) {}
+}
+
+/// Collide with later public named.
+class C4 {
+  final String? _foo;
+  C4({String? _foo, required this._foo}) {}
+}
+
+/// Collide with previous private named.
+class C5 {
+  final String? _foo;
+  C5(String _foo, {required this._foo}) {}
+}
+
+/// Collide with previous public named.
+class C6 {
+  final String? foo;
+  final String? _foo;
+  C6({required this.foo, required this._foo}) {}
+}
+
+/// Collide with previous private positional.
+class C7 {
+  final String? _foo;
+  C7({String? foo, required this._foo}) {}
+}
+
+/// Collide with previous public positional.
+class C8 {
+  final String? _foo;
+  C8(String? foo, {required this._foo}) {}
+}
+
+/// More than two parameters.
+class C9 {
+  final String? _foo;
+  C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.expect
new file mode 100644
index 0000000..d092138
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.expect
@@ -0,0 +1,152 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: Duplicated parameter name '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:21: Context: Other parameter named '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: Duplicated parameter name '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:21: Context: Other parameter named '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:21: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C3({required this._foo, String? foo}) {}
+//                     ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:35: Context: Other parameter named 'foo'.
+//   C3({required this._foo, String? foo}) {}
+//                                   ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:35: Error: Duplicated parameter name '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Context: Other parameter named '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:34: Error: Duplicated parameter name '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:13: Context: Other parameter named '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:40: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C6({required this.foo, required this._foo}) {}
+//                                        ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:21: Context: Other parameter named 'foo'.
+//   C6({required this.foo, required this._foo}) {}
+//                     ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C7({String? foo, required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:15: Context: Other parameter named 'foo'.
+//   C7({String? foo, required this._foo}) {}
+//               ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C8(String? foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:14: Context: Other parameter named 'foo'.
+//   C8(String? foo, {required this._foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: Duplicated parameter name '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Context: Other parameter named '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:56: Error: Duplicated parameter name 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                                        ^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: '_foo' was already initialized by this constructor.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C1
+    : self::C1::_foo = foo, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: '_foo' was already initialized by this constructor.
+  C1({required this._foo, required this._foo}) {}
+                                        ^", super core::Object::•() {}
+}
+class C2 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? _foo = #C1}) → self::C2
+    : self::C2::_foo = foo, super core::Object::•() {}
+}
+class C3 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? foo = #C1}) → self::C3
+    : self::C3::_foo = foo, super core::Object::•() {}
+}
+class C4 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? _foo = #C1, required core::String? foo}) → self::C4
+    : self::C4::_foo = foo, super core::Object::•() {}
+}
+class C5 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String _foo, {required core::String? foo}) → self::C5
+    : self::C5::_foo = foo, super core::Object::•() {}
+}
+class C6 extends core::Object {
+  final field core::String? foo;
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C6
+    : self::C6::foo = foo, self::C6::_foo = foo, super core::Object::•() {}
+}
+class C7 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? foo = #C1, required core::String? foo}) → self::C7
+    : self::C7::_foo = foo, super core::Object::•() {}
+}
+class C8 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo}) → self::C8
+    : self::C8::_foo = foo, super core::Object::•() {}
+}
+class C9 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo, core::int? _foo = #C1, core::int? foo = #C1}) → self::C9
+    : self::C9::_foo = foo, super core::Object::•() {}
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.modular.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.modular.expect
new file mode 100644
index 0000000..d092138
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.modular.expect
@@ -0,0 +1,152 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: Duplicated parameter name '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:21: Context: Other parameter named '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: Duplicated parameter name '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:21: Context: Other parameter named '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:21: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C3({required this._foo, String? foo}) {}
+//                     ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:35: Context: Other parameter named 'foo'.
+//   C3({required this._foo, String? foo}) {}
+//                                   ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:35: Error: Duplicated parameter name '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Context: Other parameter named '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:34: Error: Duplicated parameter name '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:13: Context: Other parameter named '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:40: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C6({required this.foo, required this._foo}) {}
+//                                        ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:21: Context: Other parameter named 'foo'.
+//   C6({required this.foo, required this._foo}) {}
+//                     ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C7({String? foo, required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:15: Context: Other parameter named 'foo'.
+//   C7({String? foo, required this._foo}) {}
+//               ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C8(String? foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:14: Context: Other parameter named 'foo'.
+//   C8(String? foo, {required this._foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: Duplicated parameter name '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Context: Other parameter named '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:56: Error: Duplicated parameter name 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                                        ^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: '_foo' was already initialized by this constructor.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C1
+    : self::C1::_foo = foo, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: '_foo' was already initialized by this constructor.
+  C1({required this._foo, required this._foo}) {}
+                                        ^", super core::Object::•() {}
+}
+class C2 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? _foo = #C1}) → self::C2
+    : self::C2::_foo = foo, super core::Object::•() {}
+}
+class C3 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? foo = #C1}) → self::C3
+    : self::C3::_foo = foo, super core::Object::•() {}
+}
+class C4 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? _foo = #C1, required core::String? foo}) → self::C4
+    : self::C4::_foo = foo, super core::Object::•() {}
+}
+class C5 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String _foo, {required core::String? foo}) → self::C5
+    : self::C5::_foo = foo, super core::Object::•() {}
+}
+class C6 extends core::Object {
+  final field core::String? foo;
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C6
+    : self::C6::foo = foo, self::C6::_foo = foo, super core::Object::•() {}
+}
+class C7 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? foo = #C1, required core::String? foo}) → self::C7
+    : self::C7::_foo = foo, super core::Object::•() {}
+}
+class C8 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo}) → self::C8
+    : self::C8::_foo = foo, super core::Object::•() {}
+}
+class C9 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo, core::int? _foo = #C1, core::int? foo = #C1}) → self::C9
+    : self::C9::_foo = foo, super core::Object::•() {}
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.outline.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.outline.expect
new file mode 100644
index 0000000..8be855f
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.outline.expect
@@ -0,0 +1,142 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: Duplicated parameter name '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:21: Context: Other parameter named '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: Duplicated parameter name '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:21: Context: Other parameter named '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:21: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C3({required this._foo, String? foo}) {}
+//                     ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:35: Context: Other parameter named 'foo'.
+//   C3({required this._foo, String? foo}) {}
+//                                   ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:35: Error: Duplicated parameter name '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Context: Other parameter named '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:34: Error: Duplicated parameter name '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:13: Context: Other parameter named '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:40: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C6({required this.foo, required this._foo}) {}
+//                                        ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:21: Context: Other parameter named 'foo'.
+//   C6({required this.foo, required this._foo}) {}
+//                     ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C7({String? foo, required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:15: Context: Other parameter named 'foo'.
+//   C7({String? foo, required this._foo}) {}
+//               ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C8(String? foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:14: Context: Other parameter named 'foo'.
+//   C8(String? foo, {required this._foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: Duplicated parameter name '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Context: Other parameter named '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:56: Error: Duplicated parameter name 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                                        ^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C1
+    ;
+}
+class C2 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? _foo = null}) → self::C2
+    ;
+}
+class C3 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? foo = null}) → self::C3
+    ;
+}
+class C4 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? _foo = null, required core::String? foo}) → self::C4
+    ;
+}
+class C5 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String _foo, {required core::String? foo}) → self::C5
+    ;
+}
+class C6 extends core::Object {
+  final field core::String? foo;
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C6
+    ;
+}
+class C7 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? foo = null, required core::String? foo}) → self::C7
+    ;
+}
+class C8 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo}) → self::C8
+    ;
+}
+class C9 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo, core::int? _foo = null, core::int? foo = null}) → self::C9
+    ;
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.transformed.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.transformed.expect
new file mode 100644
index 0000000..d092138
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.strong.transformed.expect
@@ -0,0 +1,152 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: Duplicated parameter name '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:21: Context: Other parameter named '_foo'.
+//   C1({required this._foo, required this._foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:35: Error: Duplicated parameter name '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:14:21: Context: Other parameter named '_foo'.
+//   C2({required this._foo, String? _foo}) {}
+//                     ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:21: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C3({required this._foo, String? foo}) {}
+//                     ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:20:35: Context: Other parameter named 'foo'.
+//   C3({required this._foo, String? foo}) {}
+//                                   ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:35: Error: Duplicated parameter name '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//                                   ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:26:15: Context: Other parameter named '_foo'.
+//   C4({String? _foo, required this._foo}) {}
+//               ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:34: Error: Duplicated parameter name '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:32:13: Context: Other parameter named '_foo'.
+//   C5(String _foo, {required this._foo}) {}
+//             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:40: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C6({required this.foo, required this._foo}) {}
+//                                        ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:39:21: Context: Other parameter named 'foo'.
+//   C6({required this.foo, required this._foo}) {}
+//                     ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C7({String? foo, required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:45:15: Context: Other parameter named 'foo'.
+//   C7({String? foo, required this._foo}) {}
+//               ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C8(String? foo, {required this._foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:51:14: Context: Other parameter named 'foo'.
+//   C8(String? foo, {required this._foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: A named parameter that doesn't refer to an instance variable can't start with an underscore ('_').
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:45: Error: Duplicated parameter name '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                             ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Context: Other parameter named '_foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:56: Error: Duplicated parameter name 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                                        ^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:34: Error: The corresponding public name 'foo' is already the name of another parameter.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//                                  ^^^^
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:57:14: Context: Other parameter named 'foo'.
+//   C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+//              ^^^
+//
+// pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: '_foo' was already initialized by this constructor.
+//   C1({required this._foo, required this._foo}) {}
+//                                         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C1 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C1
+    : self::C1::_foo = foo, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart:8:41: Error: '_foo' was already initialized by this constructor.
+  C1({required this._foo, required this._foo}) {}
+                                        ^", super core::Object::•() {}
+}
+class C2 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? _foo = #C1}) → self::C2
+    : self::C2::_foo = foo, super core::Object::•() {}
+}
+class C3 extends core::Object {
+  final field core::String? _foo;
+  constructor •({required core::String? foo, core::String? foo = #C1}) → self::C3
+    : self::C3::_foo = foo, super core::Object::•() {}
+}
+class C4 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? _foo = #C1, required core::String? foo}) → self::C4
+    : self::C4::_foo = foo, super core::Object::•() {}
+}
+class C5 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String _foo, {required core::String? foo}) → self::C5
+    : self::C5::_foo = foo, super core::Object::•() {}
+}
+class C6 extends core::Object {
+  final field core::String? foo;
+  final field core::String? _foo;
+  constructor •({required core::String? foo, required core::String? foo}) → self::C6
+    : self::C6::foo = foo, self::C6::_foo = foo, super core::Object::•() {}
+}
+class C7 extends core::Object {
+  final field core::String? _foo;
+  constructor •({core::String? foo = #C1, required core::String? foo}) → self::C7
+    : self::C7::_foo = foo, super core::Object::•() {}
+}
+class C8 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo}) → self::C8
+    : self::C8::_foo = foo, super core::Object::•() {}
+}
+class C9 extends core::Object {
+  final field core::String? _foo;
+  constructor •(core::String? foo, {required core::String? foo, core::int? _foo = #C1, core::int? foo = #C1}) → self::C9
+    : self::C9::_foo = foo, super core::Object::•() {}
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.textual_outline.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.textual_outline.expect
new file mode 100644
index 0000000..9528723
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.textual_outline.expect
@@ -0,0 +1,45 @@
+class C1 {
+  final String? _foo;
+  C1({required this._foo, required this._foo}) {}
+}
+
+class C2 {
+  final String? _foo;
+  C2({required this._foo, String? _foo}) {}
+}
+
+class C3 {
+  final String? _foo;
+  C3({required this._foo, String? foo}) {}
+}
+
+class C4 {
+  final String? _foo;
+  C4({String? _foo, required this._foo}) {}
+}
+
+class C5 {
+  final String? _foo;
+  C5(String _foo, {required this._foo}) {}
+}
+
+class C6 {
+  final String? foo;
+  final String? _foo;
+  C6({required this.foo, required this._foo}) {}
+}
+
+class C7 {
+  final String? _foo;
+  C7({String? foo, required this._foo}) {}
+}
+
+class C8 {
+  final String? _foo;
+  C8(String? foo, {required this._foo}) {}
+}
+
+class C9 {
+  final String? _foo;
+  C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9631027
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/initializing_formal_collision.dart.textual_outline_modelled.expect
@@ -0,0 +1,45 @@
+class C1 {
+  C1({required this._foo, required this._foo}) {}
+  final String? _foo;
+}
+
+class C2 {
+  C2({required this._foo, String? _foo}) {}
+  final String? _foo;
+}
+
+class C3 {
+  C3({required this._foo, String? foo}) {}
+  final String? _foo;
+}
+
+class C4 {
+  C4({String? _foo, required this._foo}) {}
+  final String? _foo;
+}
+
+class C5 {
+  C5(String _foo, {required this._foo}) {}
+  final String? _foo;
+}
+
+class C6 {
+  C6({required this.foo, required this._foo}) {}
+  final String? _foo;
+  final String? foo;
+}
+
+class C7 {
+  C7({String? foo, required this._foo}) {}
+  final String? _foo;
+}
+
+class C8 {
+  C8(String? foo, {required this._foo}) {}
+  final String? _foo;
+}
+
+class C9 {
+  C9(String? foo, {required this._foo, int? _foo, int? foo}) {}
+  final String? _foo;
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart
new file mode 100644
index 0000000..30ea998
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 {
+  int? _x;
+  C({this._x});
+}
+
+test() {
+  C(_x: 123); // Error
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.expect b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.expect
new file mode 100644
index 0000000..7afd8e1
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:11:5: Error: No named parameter with the name '_x'.
+//   C(_x: 123); // Error
+//     ^^
+// pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:7:3: Context: Found this candidate, but the arguments don't match.
+//   C({this._x});
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  constructor •({core::int? x = #C1}) → self::C
+    : self::C::_x = x, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:11:5: Error: No named parameter with the name '_x'.
+  C(_x: 123); // Error
+    ^^";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.modular.expect b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.modular.expect
new file mode 100644
index 0000000..7afd8e1
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.modular.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:11:5: Error: No named parameter with the name '_x'.
+//   C(_x: 123); // Error
+//     ^^
+// pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:7:3: Context: Found this candidate, but the arguments don't match.
+//   C({this._x});
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  constructor •({core::int? x = #C1}) → self::C
+    : self::C::_x = x, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:11:5: Error: No named parameter with the name '_x'.
+  C(_x: 123); // Error
+    ^^";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.outline.expect b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.outline.expect
new file mode 100644
index 0000000..26eb1ee
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  constructor •({core::int? x = null}) → self::C
+    ;
+}
+static method test() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.transformed.expect b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.transformed.expect
new file mode 100644
index 0000000..7afd8e1
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.strong.transformed.expect
@@ -0,0 +1,29 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:11:5: Error: No named parameter with the name '_x'.
+//   C(_x: 123); // Error
+//     ^^
+// pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:7:3: Context: Found this candidate, but the arguments don't match.
+//   C({this._x});
+//   ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int? _x;
+  constructor •({core::int? x = #C1}) → self::C
+    : self::C::_x = x, super core::Object::•()
+    ;
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/private_named_parameters/private_named_argument.dart:11:5: Error: No named parameter with the name '_x'.
+  C(_x: 123); // Error
+    ^^";
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.textual_outline.expect b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.textual_outline.expect
new file mode 100644
index 0000000..9aa2ce5
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+class C {
+  int? _x;
+  C({this._x});
+}
+
+test() {}
diff --git a/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f80ede2
--- /dev/null
+++ b/pkg/front_end/testcases/private_named_parameters/private_named_argument.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+class C {
+  C({this._x});
+  int? _x;
+}
+
+test() {}
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.expect
index 8ea402c..fe42f99 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.expect
@@ -21,7 +21,9 @@
 }
 class B extends self::A {
   synthetic constructor •() → self::B
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_default_constructor.dart:9:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+class B extends A {}
+      ^"
     ;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.modular.expect
index 8ea402c..fe42f99 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.modular.expect
@@ -21,7 +21,9 @@
 }
 class B extends self::A {
   synthetic constructor •() → self::B
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_default_constructor.dart:9:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+class B extends A {}
+      ^"
     ;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.transformed.expect
index 8ea402c..fe42f99 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.strong.transformed.expect
@@ -21,7 +21,9 @@
 }
 class B extends self::A {
   synthetic constructor •() → self::B
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_default_constructor.dart:9:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+class B extends A {}
+      ^"
     ;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.expect
index 6551f74..a7c6ea8 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.expect
@@ -16,14 +16,14 @@
 
 class A extends core::Object {
   constructor •(dynamic x) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
   A(this.x);
          ^"
     ;
 }
 class B extends self::A /*hasConstConstructor*/  {
   const constructor •() → self::B
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The implicitly called unnamed constructor from 'A' has required parameters.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The implicitly called unnamed constructor from 'A' has required parameters.
 Try adding an explicit super initializer with the required arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.modular.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.modular.expect
index 6551f74..a7c6ea8 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.modular.expect
@@ -16,14 +16,14 @@
 
 class A extends core::Object {
   constructor •(dynamic x) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
   A(this.x);
          ^"
     ;
 }
 class B extends self::A /*hasConstConstructor*/  {
   const constructor •() → self::B
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The implicitly called unnamed constructor from 'A' has required parameters.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The implicitly called unnamed constructor from 'A' has required parameters.
 Try adding an explicit super initializer with the required arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.transformed.expect
index 6551f74..a7c6ea8 100644
--- a/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart.strong.transformed.expect
@@ -16,14 +16,14 @@
 
 class A extends core::Object {
   constructor •(dynamic x) → self::A
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:6:10: Error: 'x' isn't an instance field of this class.
   A(this.x);
          ^"
     ;
 }
 class B extends self::A /*hasConstConstructor*/  {
   const constructor •() → self::B
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The implicitly called unnamed constructor from 'A' has required parameters.
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_implicit_super_constructor.dart:10:9: Error: The implicitly called unnamed constructor from 'A' has required parameters.
 Try adding an explicit super initializer with the required arguments.
   const B();
         ^"
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.expect
index ad364e1..07b589e 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
   C() : field = null;
         ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.modular.expect
index ad364e1..07b589e 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.modular.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
   C() : field = null;
         ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.transformed.expect
index ad364e1..07b589e 100644
--- a/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/bad_setter_initializer.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
+    : invalid-initializer "pkg/front_end/testcases/rasta/bad_setter_initializer.dart:6:9: Error: 'field' isn't an instance field of this class.
   C() : field = null;
         ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.expect
index c90355e..79fb9dd 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.expect
@@ -16,7 +16,7 @@
 
 class C extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.modular.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.modular.expect
index c90355e..79fb9dd 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.modular.expect
@@ -16,7 +16,7 @@
 
 class C extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.outline.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.outline.expect
index a609141..313cc6b 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.outline.expect
@@ -16,7 +16,7 @@
 
 class C extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.transformed.expect
index c90355e..79fb9dd 100644
--- a/pkg/front_end/testcases/rasta/issue_000034.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000034.dart.strong.transformed.expect
@@ -16,7 +16,7 @@
 
 class C extends core::Object /*hasConstConstructor*/  {
   const constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000034.dart:6:15: Error: This couldn't be parsed.
   const C() : this.x;
               ^"
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.strong.expect
index f53aba2..aaedc14 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.strong.expect
@@ -35,6 +35,8 @@
 }
 class B extends self::A {
   synthetic constructor •() → self::B
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+class B extends A {
+      ^"
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.strong.modular.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.strong.modular.expect
index f53aba2..aaedc14 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.strong.modular.expect
@@ -35,6 +35,8 @@
 }
 class B extends self::A {
   synthetic constructor •() → self::B
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+class B extends A {
+      ^"
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.strong.transformed.expect
index f53aba2..aaedc14 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.strong.transformed.expect
@@ -35,6 +35,8 @@
 }
 class B extends self::A {
   synthetic constructor •() → self::B
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/rasta/issue_000039.dart:13:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+class B extends A {
+      ^"
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
index 04bcb59..fbb99c7 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.expect
@@ -68,7 +68,7 @@
 Try removing the return type.
   C.missingFactoryKeyword() = C.constant;
                               ^";
-  static factory good() → self::C /* redirection-target: self::C::constant */
+  static const factory good() → self::C /* redirection-target: self::C::constant */
     return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the type 'C'.
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.modular.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.modular.expect
index 04bcb59..fbb99c7 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.modular.expect
@@ -68,7 +68,7 @@
 Try removing the return type.
   C.missingFactoryKeyword() = C.constant;
                               ^";
-  static factory good() → self::C /* redirection-target: self::C::constant */
+  static const factory good() → self::C /* redirection-target: self::C::constant */
     return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the type 'C'.
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.outline.expect
index b91a7ea..60da0e4 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.outline.expect
@@ -34,7 +34,7 @@
     ;
   constructor missingFactoryKeyword() → self::C
     ;
-  static factory good() → self::C /* redirection-target: self::C::constant */
+  static const factory good() → self::C /* redirection-target: self::C::constant */
     return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
index 0d6d6f8..c1df8ac 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.strong.transformed.expect
@@ -68,7 +68,7 @@
 Try removing the return type.
   C.missingFactoryKeyword() = C.constant;
                               ^";
-  static factory good() → self::C /* redirection-target: self::C::constant */
+  static const factory good() → self::C /* redirection-target: self::C::constant */
     return new self::C::constant();
   method notEvenAConstructor(dynamic a) → self::C
     return invalid-expression "pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: The getter 'h' isn't defined for the type 'C'.
diff --git a/pkg/front_end/testcases/records/issue54491.dart.strong.expect b/pkg/front_end/testcases/records/issue54491.dart.strong.expect
index 12487a36..46e0f49 100644
--- a/pkg/front_end/testcases/records/issue54491.dart.strong.expect
+++ b/pkg/front_end/testcases/records/issue54491.dart.strong.expect
@@ -24,7 +24,7 @@
   #C1;
   #C1;
 }
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/issue54491.dart.strong.modular.expect b/pkg/front_end/testcases/records/issue54491.dart.strong.modular.expect
index 12487a36..46e0f49 100644
--- a/pkg/front_end/testcases/records/issue54491.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/records/issue54491.dart.strong.modular.expect
@@ -24,7 +24,7 @@
   #C1;
   #C1;
 }
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/issue54491.dart.strong.outline.expect b/pkg/front_end/testcases/records/issue54491.dart.strong.outline.expect
index fd72260..5af2d67 100644
--- a/pkg/front_end/testcases/records/issue54491.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/records/issue54491.dart.strong.outline.expect
@@ -14,7 +14,7 @@
 }
 static method main() → void
   ;
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/issue54491.dart.strong.transformed.expect b/pkg/front_end/testcases/records/issue54491.dart.strong.transformed.expect
index 12487a36..46e0f49 100644
--- a/pkg/front_end/testcases/records/issue54491.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/records/issue54491.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
   #C1;
   #C1;
 }
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.expect b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.expect
index 8a88863..4e12091 100644
--- a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.expect
+++ b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.expect
@@ -24,7 +24,7 @@
   #C1;
   #C1;
 }
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.modular.expect b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.modular.expect
index 8a88863..4e12091 100644
--- a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.modular.expect
@@ -24,7 +24,7 @@
   #C1;
   #C1;
 }
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.outline.expect b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.outline.expect
index fd72260..5af2d67 100644
--- a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.outline.expect
@@ -14,7 +14,7 @@
 }
 static method main() → void
   ;
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.transformed.expect b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.transformed.expect
index 8a88863..4e12091 100644
--- a/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/records/record_named_constant_evaluation.dart.strong.transformed.expect
@@ -24,7 +24,7 @@
   #C1;
   #C1;
 }
-static extension-type-member method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
+static extension-type-member const method Ex|constructor#(core::Object? value) → self::Ex% /* erasure=core::Object?, declared=! */ {
   lowered final self::Ex% /* erasure=core::Object?, declared=! */ #this = value;
   return #this;
 }
diff --git a/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.expect b/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.expect
index 85a3f16d..055cf73 100644
--- a/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.expect
@@ -23,10 +23,10 @@
 
 abstract class Foo extends core::Object {
   constructor •(core::int foo, core::int foo) → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:12: Error: Abstract fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:12: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   Foo(this.foo, this.foo) {}
-           ^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:22: Error: 'foo' was already initialized by this constructor.
+           ^^^", final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:22: Error: 'foo' was already initialized by this constructor.
   Foo(this.foo, this.foo) {}
                      ^" {}
   abstract get foo() → core::int;
diff --git a/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.modular.expect b/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.modular.expect
index 85a3f16d..055cf73 100644
--- a/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.modular.expect
@@ -23,10 +23,10 @@
 
 abstract class Foo extends core::Object {
   constructor •(core::int foo, core::int foo) → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:12: Error: Abstract fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:12: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   Foo(this.foo, this.foo) {}
-           ^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:22: Error: 'foo' was already initialized by this constructor.
+           ^^^", final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:22: Error: 'foo' was already initialized by this constructor.
   Foo(this.foo, this.foo) {}
                      ^" {}
   abstract get foo() → core::int;
diff --git a/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.transformed.expect
index 85a3f16d..055cf73 100644
--- a/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart.strong.transformed.expect
@@ -23,10 +23,10 @@
 
 abstract class Foo extends core::Object {
   constructor •(core::int foo, core::int foo) → self::Foo
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:12: Error: Abstract fields cannot have initializers.
+    : invalid-initializer "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:12: Error: Abstract fields cannot have initializers.
 Try removing the field initializer or the 'abstract' keyword from the field declaration.
   Foo(this.foo, this.foo) {}
-           ^^^", final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:22: Error: 'foo' was already initialized by this constructor.
+           ^^^", final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/abstract_field_duplicate_initializer.dart:7:22: Error: 'foo' was already initialized by this constructor.
   Foo(this.foo, this.foo) {}
                      ^" {}
   abstract get foo() → core::int;
diff --git a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.expect
index d609055..816ff50 100644
--- a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.expect
@@ -29,7 +29,10 @@
 static abstract extension-type-member method Foo|set#y(lowered core::int #this, synthesized core::int #externalFieldValue) → void;
 static extension-type-member method Foo|constructor#secondConstructor() → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this = 42;
-  final dynamic #t1 = invalid-expression;
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
   return #this;
 }
 static extension-type-member synthetic method Foo|constructor#_#secondConstructor#tearOff() → self::Foo% /* erasure=core::int, declared=! */
diff --git a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.modular.expect b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.modular.expect
index d609055..816ff50 100644
--- a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.modular.expect
@@ -29,7 +29,10 @@
 static abstract extension-type-member method Foo|set#y(lowered core::int #this, synthesized core::int #externalFieldValue) → void;
 static extension-type-member method Foo|constructor#secondConstructor() → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this = 42;
-  final dynamic #t1 = invalid-expression;
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
   return #this;
 }
 static extension-type-member synthetic method Foo|constructor#_#secondConstructor#tearOff() → self::Foo% /* erasure=core::int, declared=! */
diff --git a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.transformed.expect
index d609055..816ff50 100644
--- a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart.strong.transformed.expect
@@ -29,7 +29,10 @@
 static abstract extension-type-member method Foo|set#y(lowered core::int #this, synthesized core::int #externalFieldValue) → void;
 static extension-type-member method Foo|constructor#secondConstructor() → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this = 42;
-  final dynamic #t1 = invalid-expression;
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_01.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
   return #this;
 }
 static extension-type-member synthetic method Foo|constructor#_#secondConstructor#tearOff() → self::Foo% /* erasure=core::int, declared=! */
diff --git a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.expect
index 19abd6d..d019f395 100644
--- a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.expect
@@ -29,8 +29,14 @@
 static abstract extension-type-member method Foo|set#y(lowered core::int #this, synthesized core::int #externalFieldValue) → void;
 static extension-type-member method Foo|constructor#(core::int _x, core::int y) → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this = _x;
-  final dynamic #t1 = invalid-expression;
-  final dynamic #t2 = invalid-expression;
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
   return #this;
 }
 static extension-type-member synthetic method Foo|constructor#_#new#tearOff(core::int _x, core::int y) → self::Foo% /* erasure=core::int, declared=! */
diff --git a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.modular.expect b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.modular.expect
index 19abd6d..d019f395 100644
--- a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.modular.expect
@@ -29,8 +29,14 @@
 static abstract extension-type-member method Foo|set#y(lowered core::int #this, synthesized core::int #externalFieldValue) → void;
 static extension-type-member method Foo|constructor#(core::int _x, core::int y) → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this = _x;
-  final dynamic #t1 = invalid-expression;
-  final dynamic #t2 = invalid-expression;
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
   return #this;
 }
 static extension-type-member synthetic method Foo|constructor#_#new#tearOff(core::int _x, core::int y) → self::Foo% /* erasure=core::int, declared=! */
diff --git a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.transformed.expect
index 19abd6d..d019f395 100644
--- a/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart.strong.transformed.expect
@@ -29,8 +29,14 @@
 static abstract extension-type-member method Foo|set#y(lowered core::int #this, synthesized core::int #externalFieldValue) → void;
 static extension-type-member method Foo|constructor#(core::int _x, core::int y) → self::Foo% /* erasure=core::int, declared=! */ {
   lowered final self::Foo% /* erasure=core::int, declared=! */ #this = _x;
-  final dynamic #t1 = invalid-expression;
-  final dynamic #t2 = invalid-expression;
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
+  invalid-expression "pkg/front_end/testcases/regress/extension_type_declared_instance_field_03.dart:6:7: Error: Extension types can't declare instance fields
+Try removing the field declaration or making it a static field
+  int y;
+      ^";
   return #this;
 }
 static extension-type-member synthetic method Foo|constructor#_#new#tearOff(core::int _x, core::int y) → self::Foo% /* erasure=core::int, declared=! */
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
index e660e40..73ab345 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -17,7 +17,7 @@
 class Increment extends core::Object {
   late field core::int x;
   constructor •() → self::Increment
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
   Increment() : x++ {}
                 ^" {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.modular.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.modular.expect
index e660e40..73ab345 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.modular.expect
@@ -17,7 +17,7 @@
 class Increment extends core::Object {
   late field core::int x;
   constructor •() → self::Increment
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
   Increment() : x++ {}
                 ^" {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect
index e660e40..73ab345 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.transformed.expect
@@ -17,7 +17,7 @@
 class Increment extends core::Object {
   late field core::int x;
   constructor •() → self::Increment
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: This couldn't be parsed.
   Increment() : x++ {}
                 ^" {}
 }
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
index d2cf480..03913a3 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
@@ -30,16 +30,15 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:8:16: Error: Expected an initializer.
   B(): super().foo() {}
-       ^"{dynamic}.foo() {}
+               ^" {}
   constructor named1() → self::B
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
   B.named1(): super().super() {}
                       ^^^^^" {}
   constructor named2() → self::B
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   B.named2(): super().() {}
                       ^" {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.modular.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.modular.expect
index d2cf480..03913a3 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.modular.expect
@@ -30,16 +30,15 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:8:16: Error: Expected an initializer.
   B(): super().foo() {}
-       ^"{dynamic}.foo() {}
+               ^" {}
   constructor named1() → self::B
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
   B.named1(): super().super() {}
                       ^^^^^" {}
   constructor named2() → self::B
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   B.named2(): super().() {}
                       ^" {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.transformed.expect
index d2cf480..03913a3 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.transformed.expect
@@ -30,16 +30,15 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
-To delegate a constructor to a super constructor, put the super call as an initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:8:16: Error: Expected an initializer.
   B(): super().foo() {}
-       ^"{dynamic}.foo() {}
+               ^" {}
   constructor named1() → self::B
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:9:23: Error: Expected identifier, but got 'super'.
   B.named1(): super().super() {}
                       ^^^^^" {}
   constructor named2() → self::B
-    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_31198.dart:10:23: Error: Expected an identifier, but got '('.
 Try inserting an identifier before '('.
   B.named2(): super().() {}
                       ^" {}
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect b/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect
index 49521ad..15e89ae 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.strong.expect
@@ -27,7 +27,7 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   B() : super.a = 42;
               ^"
@@ -35,7 +35,7 @@
 }
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
   C() : super = 42;
         ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect b/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect
index 49521ad..15e89ae 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.strong.modular.expect
@@ -27,7 +27,7 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   B() : super.a = 42;
               ^"
@@ -35,7 +35,7 @@
 }
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
   C() : super = 42;
         ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect
index 49521ad..15e89ae 100644
--- a/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_35151.dart.strong.transformed.expect
@@ -27,7 +27,7 @@
 }
 class B extends self::A {
   constructor •() → self::B
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_35151.dart:10:15: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   B() : super.a = 42;
               ^"
@@ -35,7 +35,7 @@
 }
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_35151.dart:14:9: Error: Can't access 'super' in a field initializer.
   C() : super = 42;
         ^^^^^"
     ;
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.strong.expect b/pkg/front_end/testcases/regress/issue_36669.dart.strong.expect
index da2ecc3..66c29c4 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.strong.expect
@@ -18,7 +18,9 @@
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
   synthetic constructor •() → self::Foo
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_36669.dart:11:7: Error: The superclass, 'NoUnnamedConstructor with MixMeIn', has no unnamed constructor that takes no arguments.
+class Foo extends NoUnnamedConstructor with MixMeIn {}
+      ^"
     ;
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn = self::NoUnnamedConstructor with self::MixMeIn /*isAnonymousMixin*/  {
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.strong.modular.expect b/pkg/front_end/testcases/regress/issue_36669.dart.strong.modular.expect
index da2ecc3..66c29c4 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.strong.modular.expect
@@ -18,7 +18,9 @@
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
   synthetic constructor •() → self::Foo
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_36669.dart:11:7: Error: The superclass, 'NoUnnamedConstructor with MixMeIn', has no unnamed constructor that takes no arguments.
+class Foo extends NoUnnamedConstructor with MixMeIn {}
+      ^"
     ;
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn = self::NoUnnamedConstructor with self::MixMeIn /*isAnonymousMixin*/  {
diff --git a/pkg/front_end/testcases/regress/issue_36669.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_36669.dart.strong.transformed.expect
index b2945c2..a67d79c 100644
--- a/pkg/front_end/testcases/regress/issue_36669.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_36669.dart.strong.transformed.expect
@@ -18,7 +18,9 @@
 }
 class Foo extends self::_Foo&NoUnnamedConstructor&MixMeIn {
   synthetic constructor •() → self::Foo
-    : invalid-initializer
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_36669.dart:11:7: Error: The superclass, 'NoUnnamedConstructor with MixMeIn', has no unnamed constructor that takes no arguments.
+class Foo extends NoUnnamedConstructor with MixMeIn {}
+      ^"
     ;
 }
 abstract class _Foo&NoUnnamedConstructor&MixMeIn extends self::NoUnnamedConstructor implements self::MixMeIn /*isAnonymousMixin,isEliminatedMixin*/  {
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.strong.expect b/pkg/front_end/testcases/regress/issue_37285.dart.strong.expect
index 4f848b0..336c881 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.strong.expect
@@ -22,7 +22,7 @@
 
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   C() : super()[];
                ^"
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.strong.modular.expect b/pkg/front_end/testcases/regress/issue_37285.dart.strong.modular.expect
index 4f848b0..336c881 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.strong.modular.expect
@@ -22,7 +22,7 @@
 
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   C() : super()[];
                ^"
diff --git a/pkg/front_end/testcases/regress/issue_37285.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_37285.dart.strong.transformed.expect
index 4f848b0..336c881 100644
--- a/pkg/front_end/testcases/regress/issue_37285.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_37285.dart.strong.transformed.expect
@@ -22,7 +22,7 @@
 
 class C extends core::Object {
   constructor •() → self::C
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
+    : invalid-initializer "pkg/front_end/testcases/regress/issue_37285.dart:6:16: Error: Not a valid initializer.
 To initialize a field, use the syntax 'name = value'.
   C() : super()[];
                ^"
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 724161f..dd6a6f9 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -73,6 +73,9 @@
 patterns/issue55310: semiFuzzFailureOnForceRebuildBodies # can't split because of sealed class.
 patterns/pattern_matching: semiFuzzFailureOnForceRebuildBodies # can't split because of sealed class.
 patterns/private_names_in_object_patterns: semiFuzzFailureOnForceRebuildBodies # can't match on private field in split out library.
+primary_constructors/constructors: semiFuzzFailureOnForceRebuildBodies
+private_named_parameters/access_in_initializer: semiFuzzFailureOnForceRebuildBodies # private fields in class.
+private_named_parameters/initializing_formal: semiFuzzFailureOnForceRebuildBodies # private field in class.
 records/issue51940: semiFuzzFailureOnForceRebuildBodies # can't split because of sealed class.
 regress/issue_39682: semiFuzzFailureOnForceRebuildBodies # has private method
 dart2wasm/inference_update_2/issue52452: semiFuzzFailureOnForceRebuildBodies # private fields in class.
@@ -177,6 +180,7 @@
 general/expressions: RuntimeError
 general/hierarchy/conflict: TypeCheckError
 general/hierarchy/duplicates: TypeCheckError
+general/invalid_initializer: RuntimeError # Deliberate crash using InvalidInitializer
 general/invocations: RuntimeError
 general/issue37776: RuntimeError
 general/issue47994b: RuntimeError
@@ -254,4 +258,5 @@
 wildcard_variables/top_level_function_no_shadow: semiFuzzFailureOnForceRebuildBodies # Expected
 
 # Temporarily unimplemented binary serialization, see https://github.com/dart-lang/sdk/issues/61765
-closure_context_lowering/local_functions: ExpectationFileMismatchSerialized
\ No newline at end of file
+closure_context_lowering/local_functions: ExpectationFileMismatchSerialized
+closure_context_lowering/local_variables: Crash
\ No newline at end of file
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 12225c7..4a9eaa5 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -35,6 +35,7 @@
 general/error_recovery/issue_39024.crash: EmptyOutput
 general/error_recovery/issue_39058.crash: EmptyOutput
 general/issue49357a: EmptyOutput
+primary_constructors/enum_primary_declaring_parameters: EmptyOutput
 rasta/bad_interpolation: EmptyOutput
 rasta/issue_000035: EmptyOutput
 rasta/issue_000035a: EmptyOutput
@@ -55,6 +56,8 @@
 general/issue41842: UnknownChunk # Test has parser errors
 general/issue43363: UnknownChunk # Test has parser errors
 general/issue54006: UnknownChunk # Test has parser errors
+primary_constructors/new_in_initializer: UnknownChunk # Test has parser errors
+primary_constructors/redirecting_non_factory: UnknownChunk # Test has parser errors
 rasta/issue_000046: UnknownChunk # Test has parser errors
 rasta/malformed_const_constructor: UnknownChunk # Test has parser errors
 regress/ambiguous_builder_01: UnknownChunk # Test has parser errors
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect
index 502e955..63fed39 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.expect
@@ -26,10 +26,10 @@
 //   operator >>>(a, {b}) => true;
 //            ^^^
 //
-// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >>><T>(a) => true;
-//                ^
+//               ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.modular.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.modular.expect
index 502e955..63fed39 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.modular.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.modular.expect
@@ -26,10 +26,10 @@
 //   operator >>>(a, {b}) => true;
 //            ^^^
 //
-// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >>><T>(a) => true;
-//                ^
+//               ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.outline.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.outline.expect
index 33f2fd1..4bb9144 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.outline.expect
@@ -26,10 +26,10 @@
 //   operator >>>(a, {b}) => true;
 //            ^^^
 //
-// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >>><T>(a) => true;
-//                ^
+//               ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect
index 502e955..63fed39 100644
--- a/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/triple_shift/invalid_operator.dart.strong.transformed.expect
@@ -26,10 +26,10 @@
 //   operator >>>(a, {b}) => true;
 //            ^^^
 //
-// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:16: Error: Types parameters aren't allowed when defining an operator.
+// pkg/front_end/testcases/triple_shift/invalid_operator.dart:30:15: Error: Types parameters aren't allowed when defining an operator.
 // Try removing the type parameters.
 //   operator >>><T>(a) => true;
-//                ^
+//               ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 0946062..4febd64 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -124,9 +124,10 @@
   'TypedefTearOffConstant': {'parameters': FieldRule(isDeclaration: true)},
   'LocalInitializer': {'variable': FieldRule(isDeclaration: true)},
   'Let': {'variable': FieldRule(isDeclaration: true)},
-  'VariableGet': {'variable': FieldRule(isDeclaration: false)},
-  'VariableSet': {'variable': FieldRule(isDeclaration: false)},
+  'VariableGet': {'expressionVariable': FieldRule(isDeclaration: false)},
+  'VariableSet': {'expressionVariable': FieldRule(isDeclaration: false)},
   'LocalFunctionInvocation': {'variable': FieldRule(isDeclaration: false)},
+  'LocalVariable': {'variableInitialization': FieldRule(isDeclaration: false)},
   'BreakStatement': {'target': FieldRule(isDeclaration: false)},
   'ForStatement': {'variables': FieldRule(isDeclaration: true)},
   'ForInStatement': {'variable': FieldRule(isDeclaration: true)},
@@ -140,8 +141,13 @@
   'FunctionType': {'typeParameters': FieldRule(isDeclaration: true)},
   'TypeParameterType': {'parameter': FieldRule(isDeclaration: false)},
   'StructuralParameterType': {'parameter': FieldRule(isDeclaration: false)},
+  'SyntheticVariable': {
+    'variableInitialization': FieldRule(isDeclaration: false),
+  },
   'VariableStatement': {'_name': FieldRule(name: 'name')},
-  'AssignedVariablePattern': {'variable': FieldRule(isDeclaration: false)},
+  'AssignedVariablePattern': {
+    'expressionVariable': FieldRule(isDeclaration: false),
+  },
   'InvalidPattern': {'declaredVariables': FieldRule(isDeclaration: true)},
   'OrPattern': {'orPatternJointVariables': FieldRule(isDeclaration: false)},
   'VariablePattern': {'variable': FieldRule(isDeclaration: true)},
diff --git a/pkg/front_end/tool/benchmarker.dart b/pkg/front_end/tool/benchmarker.dart
index 2fc004b..499ac45 100644
--- a/pkg/front_end/tool/benchmarker.dart
+++ b/pkg/front_end/tool/benchmarker.dart
@@ -11,7 +11,7 @@
 
 void main(List<String> args) {
   if (args.contains("--help")) return _help();
-  _checkEnvironment();
+  checkEnvironment();
   bool doCacheBenchmarkingToo = false;
   bool doDisabledGcBenchmarkToo = false;
   bool silent = false;
@@ -30,8 +30,8 @@
       gcRuns = int.parse(arg.substring("--gcs=".length));
     } else if (arg.startsWith("--core=")) {
       core = int.parse(arg.substring("--core=".length));
-    } else if (arg.startsWith("--aotruntime")) {
-      aotRuntime = arg.substring("--aotruntime".length);
+    } else if (arg.startsWith("--aotruntime=")) {
+      aotRuntime = arg.substring("--aotruntime=".length);
     } else if (arg.startsWith("--snapshot=")) {
       snapshots.add(arg.substring("--snapshot=".length));
     } else if (arg.startsWith("--arguments=")) {
@@ -383,7 +383,7 @@
   );
 }
 
-late final RegExp _extractNumbers = new RegExp(
+late final RegExp _extractPerfNumbers = new RegExp(
   r"([\d+\,\.]+)\s+(.+)\s*",
   caseSensitive: false,
 );
@@ -412,7 +412,9 @@
         "LLC-loads:u,"
         "LLC-load-misses:u";
   }
-  ProcessResult processResult = Process.runSync("perf", [
+  ProcessResult processResult = Process.runSync("time", [
+    "-v",
+    "perf",
     "stat",
     "-B",
     "-e",
@@ -463,7 +465,7 @@
       }
       line = line.substring(0, pos);
     }
-    for (RegExpMatch match in _extractNumbers.allMatches(line)) {
+    for (RegExpMatch match in _extractPerfNumbers.allMatches(line)) {
       String stringValue = match.group(1)!.trim();
       String caption = match.group(2)!.trim();
       stringValue = stringValue.replaceAll(",", "");
@@ -479,6 +481,16 @@
         warnings?.scalingInEffect = true;
       }
     }
+    String trimmed = line.trim();
+    const String searchedTimeDashVCaption =
+        "Maximum resident set size (kbytes): ";
+    if (trimmed.startsWith(searchedTimeDashVCaption)) {
+      String maxRssString = trimmed
+          .substring(searchedTimeDashVCaption.length)
+          .trim();
+      result["maxRssKbytes"] = int.parse(maxRssString);
+      result["maxRssBytes"] = int.parse(maxRssString) * 1024;
+    }
   }
 
   return result;
@@ -521,7 +533,7 @@
   }
 }
 
-void _checkEnvironment() {
+void checkEnvironment() {
   if (!Platform.isLinux) {
     throw "This (probably) only works in Linux";
   }
diff --git a/pkg/front_end/tool/benchmarker_golem.dart b/pkg/front_end/tool/benchmarker_golem.dart
new file mode 100644
index 0000000..a0f130c
--- /dev/null
+++ b/pkg/front_end/tool/benchmarker_golem.dart
@@ -0,0 +1,112 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "benchmarker.dart";
+
+void main(List<String> args) {
+  checkEnvironment();
+  String? name;
+  String? aotRuntime;
+  String? snapshot;
+  List<String> arguments = [];
+  for (String arg in args) {
+    if (arg.startsWith("--aotruntime=")) {
+      aotRuntime = arg.substring("--aotruntime=".length);
+    } else if (arg.startsWith("--snapshot=")) {
+      snapshot = arg.substring("--snapshot=".length);
+    } else if (arg.startsWith("--arguments=")) {
+      arguments.add(arg.substring("--arguments=".length));
+    } else if (arg.startsWith("--name=")) {
+      name = arg.substring("--name=".length);
+    } else {
+      throw "Don't know argument '$arg'";
+    }
+  }
+  aotRuntime!;
+  snapshot!;
+  name!;
+
+  printData(
+    benchmark(
+      snapshot,
+      [],
+      arguments,
+      aotRuntime: aotRuntime,
+      cacheBenchmarking: false,
+      core: 3,
+    ),
+    "${name}_",
+  );
+  printData(
+    benchmark(
+      snapshot,
+      [],
+      arguments,
+      aotRuntime: aotRuntime,
+      cacheBenchmarking: true,
+      core: 3,
+    ),
+    "${name}_cache_",
+  );
+  printData(
+    benchmark(
+      snapshot,
+      ["--new_gen_semi_initial_size=10000", "--new_gen_semi_max_size=20000"],
+      arguments,
+      aotRuntime: aotRuntime,
+      cacheBenchmarking: false,
+      core: 3,
+    ),
+    "${name}_no_gc_",
+  );
+}
+
+void printData(Map<String, num> data, String prefix) {
+  printElement(
+    "cpu_time",
+    data["msec task-clock:u"],
+    prefix,
+    "RunTimeRaw",
+    "ms",
+  );
+  printElement(
+    "wall_clock",
+    data["seconds time elapsed"],
+    prefix,
+    "RunTimeRaw",
+    "s",
+  );
+  printElement(
+    "L1_icache_load_misses",
+    data["L1-icache-load-misses"],
+    prefix,
+    "PerfCount",
+  );
+  printElement("LLC_loads", data["LLC-loads"], prefix, "PerfCount");
+  printElement("LLC_load_misses", data["LLC-load-misses"], prefix, "PerfCount");
+  printElement("cycles", data["cycles:u"], prefix, "CpuCycles", "CpuCycles");
+  printElement(
+    "instructions",
+    data["instructions:u"],
+    prefix,
+    "PerfInstructions",
+  );
+  printElement("branch_misses", data["branch-misses:u"], prefix, "PerfCount");
+  printElement("max_rss_bytes", data["maxRssBytes"], prefix, "MemoryUse", "b");
+}
+
+void printElement(
+  String name,
+  num? data,
+  String prefix,
+  String type, [
+  String? unit,
+]) {
+  if (data == null) return;
+  if (unit == null) {
+    print("${prefix}${name}($type): $data");
+  } else {
+    print("${prefix}${name}($type): $data $unit");
+  }
+}
diff --git a/pkg/front_end/tool/generate_messages_lib.dart b/pkg/front_end/tool/generate_messages_lib.dart
index fd1f6bc..4c3a8b1 100644
--- a/pkg/front_end/tool/generate_messages_lib.dart
+++ b/pkg/front_end/tool/generate_messages_lib.dart
@@ -6,6 +6,7 @@
 library;
 
 import 'package:analyzer_utilities/extensions/string.dart';
+import 'package:analyzer_utilities/located_error.dart';
 import 'package:analyzer_utilities/messages.dart';
 
 Uri computeSharedGeneratedFile(Uri repoDir) {
diff --git a/pkg/front_end/tool/kernel_ast_file_rewriter.dart b/pkg/front_end/tool/kernel_ast_file_rewriter.dart
index 30f89a1..316e692 100644
--- a/pkg/front_end/tool/kernel_ast_file_rewriter.dart
+++ b/pkg/front_end/tool/kernel_ast_file_rewriter.dart
@@ -59,14 +59,14 @@
     }
 
     ClassDeclarationEnd classDeclaration = cls.getClassDeclaration();
-    ClassOrMixinOrExtensionBodyEnd classOrMixinBody = classDeclaration
+    ClassOrMixinOrExtensionBodyEnd? classOrMixinBody = classDeclaration
         .getClassOrMixinOrExtensionBody();
 
     Set<String> namedClassConstructors = {};
     Set<String> namedFields = {};
     for (MemberEnd member in classOrMixinBody.getMembers()) {
-      if (member.isClassConstructor()) {
-        ClassConstructorEnd constructor = member.getClassConstructor();
+      if (member.isConstructor()) {
+        ConstructorEnd constructor = member.getConstructor();
         Token nameToken = constructor.beginToken;
         // String name = nameToken.lexeme;
         if (nameToken.next!.lexeme == ".") {
@@ -77,9 +77,9 @@
         if (nameToken.next!.lexeme == ".") {
           throw "Unexpected";
         }
-      } else if (member.isClassFields()) {
-        ClassFieldsEnd classFields = member.getClassFields();
-        Token identifierToken = classFields.getFieldIdentifiers().single.token;
+      } else if (member.isFields()) {
+        FieldsEnd fields = member.getFields();
+        Token identifierToken = fields.getFieldIdentifiers().single.token;
         String identifier = identifierToken.toString();
         namedFields.add(identifier);
       }
@@ -87,7 +87,7 @@
 
     // If there isn't a `frozen` field in `TreeNode` we insert one.
     if (entry.key == "TreeNode" && !namedFields.contains("frozen")) {
-      Token classBraceToken = classOrMixinBody.beginToken;
+      Token classBraceToken = classOrMixinBody!.beginToken;
       assert(classBraceToken.lexeme == "{");
       replacements[classBraceToken] = new Replacement(
         classBraceToken,
@@ -97,14 +97,14 @@
     }
 
     for (MemberEnd member in classOrMixinBody.getMembers()) {
-      if (member.isClassConstructor()) {
+      if (member.isConstructor()) {
         processConstructor(
           member,
           replacements,
           namedClassConstructors,
           namedFields,
         );
-      } else if (member.isClassFields()) {
+      } else if (member.isFields()) {
         processField(member, entry, replacements);
       }
     }
@@ -152,26 +152,26 @@
   MapEntry<String, TopLevelDeclarationEnd> entry,
   Map<Token, Replacement> replacements,
 ) {
-  ClassFieldsEnd classFields = member.getClassFields();
+  FieldsEnd fields = member.getFields();
 
-  if (classFields.count != 1) {
-    throw "Notice ${classFields.count}";
+  if (fields.count != 1) {
+    throw "Notice ${fields.count}";
   }
 
-  Token identifierToken = classFields.getFieldIdentifiers().single.token;
+  Token identifierToken = fields.getFieldIdentifiers().single.token;
   String identifier = identifierToken.toString();
 
   if (identifier == "frozen" && entry.key == "TreeNode") return;
 
-  if (classFields.staticToken != null) {
+  if (fields.staticToken != null) {
     return;
   }
   bool isFinal = false;
-  if (classFields.varFinalOrConst?.toString() == "final") {
+  if (fields.varFinalOrConst?.toString() == "final") {
     isFinal = true;
   }
 
-  TypeHandle? type = classFields.getFirstType();
+  TypeHandle? type = fields.getFirstType();
   String typeString = "dynamic";
   if (type != null) {
     Token token = type.beginToken;
@@ -183,7 +183,7 @@
     typeString = typeString.trim();
   }
 
-  FieldInitializerEnd? initializer = classFields.getFieldInitializer();
+  FieldInitializerEnd? initializer = fields.getFieldInitializer();
   String initializerString = "";
   if (initializer != null) {
     Token token = initializer.assignment;
@@ -195,8 +195,8 @@
     initializerString = initializerString.trim();
   }
 
-  Token beginToken = classFields.beginToken;
-  Token endToken = classFields.endToken;
+  Token beginToken = fields.beginToken;
+  Token endToken = fields.endToken;
 
   String frozenCheckCode =
       """if (frozen) throw "Trying to modify frozen node!";""";
@@ -247,7 +247,7 @@
   Set<String> namedClassConstructors,
   Set<String> namedFields,
 ) {
-  ClassConstructorEnd constructor = member.getClassConstructor();
+  ConstructorEnd constructor = member.getConstructor();
   FormalParametersEnd formalParameters = constructor.getFormalParameters();
   List<FormalParameterEnd> parameters = formalParameters.getFormalParameters();
 
diff --git a/pkg/front_end/tool/parser_ast_helper_creator.dart b/pkg/front_end/tool/parser_ast_helper_creator.dart
index f3d2bf7..5c728ee 100644
--- a/pkg/front_end/tool/parser_ast_helper_creator.dart
+++ b/pkg/front_end/tool/parser_ast_helper_creator.dart
@@ -219,6 +219,22 @@
   }
 
   @override
+  void beginConstructor(
+    DeclarationKind declarationKind,
+    Token? augmentToken,
+    Token? externalToken,
+    Token? staticToken,
+    Token? covariantToken,
+    Token? varFinalOrConst,
+    Token? getOrSet,
+    Token? newToken,
+    Token name,
+    String? enclosingDeclarationName,
+  ) {
+    currentMethodName = name.lexeme;
+  }
+
+  @override
   void beginMethod(
     DeclarationKind declarationKind,
     Token? augmentToken,
@@ -244,7 +260,8 @@
   }
 
   @override
-  void endClassMethod(
+  void endMethod(
+    DeclarationKind kind,
     Token? getOrSet,
     Token beginToken,
     Token beginParam,
diff --git a/pkg/front_end/tool/parser_ast_indexer.dart b/pkg/front_end/tool/parser_ast_indexer.dart
index 229e682..85d0274 100644
--- a/pkg/front_end/tool/parser_ast_indexer.dart
+++ b/pkg/front_end/tool/parser_ast_indexer.dart
@@ -226,102 +226,22 @@
   }
 
   @override
-  void visitClassConstructorEnd(ClassConstructorEnd node) {
+  void visitConstructorEnd(ConstructorEnd node) {
     containerMethod(node, node.getIdentifiers().last.token.lexeme);
   }
 
   @override
-  void visitClassFactoryMethodEnd(ClassFactoryMethodEnd node) {
+  void visitFactoryEnd(FactoryEnd node) {
     containerMethod(node, node.getIdentifiers().last.token.lexeme);
   }
 
   @override
-  void visitClassFieldsEnd(ClassFieldsEnd node) {
+  void visitFieldsEnd(FieldsEnd node) {
     containerFields(node, node.getFieldIdentifiers());
   }
 
   @override
-  void visitClassMethodEnd(ClassMethodEnd node) {
-    containerMethod(node, node.getNameIdentifier());
-  }
-
-  @override
-  void visitMixinConstructorEnd(MixinConstructorEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitMixinFactoryMethodEnd(MixinFactoryMethodEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitMixinFieldsEnd(MixinFieldsEnd node) {
-    containerFields(node, node.getFieldIdentifiers());
-  }
-
-  @override
-  void visitMixinMethodEnd(MixinMethodEnd node) {
-    containerMethod(node, node.getNameIdentifier());
-  }
-
-  @override
-  void visitEnumConstructorEnd(EnumConstructorEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitEnumFactoryMethodEnd(EnumFactoryMethodEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitEnumFieldsEnd(EnumFieldsEnd node) {
-    containerFields(node, node.getFieldIdentifiers());
-  }
-
-  @override
-  void visitEnumMethodEnd(EnumMethodEnd node) {
-    containerMethod(node, node.getNameIdentifier());
-  }
-
-  @override
-  void visitExtensionConstructorEnd(ExtensionConstructorEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitExtensionFactoryMethodEnd(ExtensionFactoryMethodEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitExtensionFieldsEnd(ExtensionFieldsEnd node) {
-    containerFields(node, node.getFieldIdentifiers());
-  }
-
-  @override
-  void visitExtensionMethodEnd(ExtensionMethodEnd node) {
-    containerMethod(node, node.getNameIdentifier());
-  }
-
-  @override
-  void visitExtensionTypeConstructorEnd(ExtensionTypeConstructorEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitExtensionTypeFactoryMethodEnd(ExtensionTypeFactoryMethodEnd node) {
-    containerMethod(node, node.getIdentifiers().last.token.lexeme);
-  }
-
-  @override
-  void visitExtensionTypeFieldsEnd(ExtensionTypeFieldsEnd node) {
-    containerFields(node, node.getFieldIdentifiers());
-  }
-
-  @override
-  void visitExtensionTypeMethodEnd(ExtensionTypeMethodEnd node) {
+  void visitMethodEnd(MethodEnd node) {
     containerMethod(node, node.getNameIdentifier());
   }
 }
diff --git a/pkg/front_end/tool/unreachable_if_finder.dart b/pkg/front_end/tool/unreachable_if_finder.dart
index f7b0a4d..aaf62f4 100644
--- a/pkg/front_end/tool/unreachable_if_finder.dart
+++ b/pkg/front_end/tool/unreachable_if_finder.dart
@@ -54,7 +54,7 @@
 
   List<Warning> warnings = [];
 
-  Map<VariableDeclaration, bool> knownValues = {};
+  Map<ExpressionVariable, bool> knownValues = {};
 
   @override
   void visitIfStatement(IfStatement node) {
@@ -75,7 +75,7 @@
     // TODO(jensj): We could make the visit return a bool? instead and use that
     // from the condition instead of doing special casing on `Not` and
     // `VariableGet`.
-    VariableDeclaration? newKnownValueHere;
+    ExpressionVariable? newKnownValueHere;
     bool conditionNegated = false;
 
     if (condition is Not) {
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index 39a15dc..3247bbf 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -73,6 +73,9 @@
       defaultsTo: true)
   ..addFlag('protobuf-tree-shaker-v2',
       help: 'Enable protobuf tree shaker v2 in AOT mode.', defaultsTo: false)
+  ..addFlag('protobuf-tree-shaker-mixins',
+      help: 'Include protobuf messages with mixins in the tree shaker pass.',
+      defaultsTo: false)
   ..addFlag('minimal-kernel',
       help: 'Produce minimal tree-shaken kernel file.', defaultsTo: false)
   ..addFlag('link-platform',
@@ -214,7 +217,10 @@
   ..addOption('libraries-spec',
       help: 'A path or uri to the libraries specification JSON file')
   ..addFlag('debugger-module-names',
-      help: 'Use debugger-friendly modules names', defaultsTo: false)
+      help: "Use debugger-friendly modules names that assume the 'lib/' "
+          "directories of packages are present in the served directory "
+          "structure at runtime.",
+      defaultsTo: false)
   ..addFlag('experimental-emit-debug-metadata',
       help: 'Emit module and library metadata for the debugger',
       defaultsTo: false)
@@ -701,6 +707,7 @@
               environmentDefines: environmentDefines,
               enableAsserts: options['enable-asserts'],
               useProtobufTreeShakerV2: options['protobuf-tree-shaker-v2'],
+              protobufTreeShakerMixins: options['protobuf-tree-shaker-mixins'],
               minimalKernel: options['minimal-kernel'],
               treeShakeWriteOnlyFields: options['tree-shake-write-only-fields'],
               fromDillFile: options['from-dill'])));
diff --git a/pkg/frontend_server/lib/src/javascript_bundle.dart b/pkg/frontend_server/lib/src/javascript_bundle.dart
index 8114e5a02..ae148b3 100644
--- a/pkg/frontend_server/lib/src/javascript_bundle.dart
+++ b/pkg/frontend_server/lib/src/javascript_bundle.dart
@@ -351,7 +351,9 @@
         customScheme: _fileSystemScheme,
         compiler: compiler,
         component: summaryComponent,
-        packageConfig: packageConfig,
+        // Only pass a package configuration if the serve time package paths are
+        // not being enforced by the `useDebuggerModuleNames` option.
+        packageConfig: useDebuggerModuleNames ? null : packageConfig,
       );
       final Uint8List codeBytes = utf8.encode(code.code);
       final Uint8List sourceMapBytes = utf8.encode(json.encode(code.sourceMap));
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 4c350c5..204f24e 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -2783,6 +2783,181 @@
       });
     });
 
+    group('changes to mixin body invalidate libraries that apply the mixin',
+        () {
+      Future<void> runTests(
+          {required String moduleFormat, bool canary = false}) async {
+        new File('${tempDir.path}/main.dart')
+          ..createSync()
+          ..writeAsStringSync("import 'class2.dart';"
+              "import 'helper.dart';"
+              "final h = new Helper();"
+              "final c = new C2();"
+              "main() {"
+              "  print(c.fn1());"
+              "  print(c.gn1());"
+              "  print(c.fn2());"
+              "  print(c.gn2());"
+              "  print(h.x());"
+              "}");
+        new File('${tempDir.path}/helper.dart')
+          ..createSync()
+          ..writeAsStringSync(
+              "class Helper { String x() { return 'Helper'; } }");
+        new File('${tempDir.path}/class2.dart')
+          ..createSync()
+          ..writeAsStringSync("import 'mixin2.dart';\n"
+              "import 'class1.dart';\n"
+              "class C2 extends C1 with M2 {}\n");
+        new File('${tempDir.path}/class1.dart')
+          ..createSync()
+          ..writeAsStringSync("import 'mixin1.dart';\n"
+              "class C1 with M1 {}\n");
+        new File('${tempDir.path}/mixin1.dart')
+          ..createSync()
+          ..writeAsStringSync("mixin M1 {\n"
+              "  String fn1() { return 'hello'; }\n"
+              "  String gn1() => 'hello';\n"
+              "}\n");
+        new File('${tempDir.path}/mixin2.dart')
+          ..createSync()
+          ..writeAsStringSync("mixin M2 {\n"
+              "  String fn2() { return 'hello'; }\n"
+              "  String gn2() => 'hello';\n"
+              "}\n");
+        File packageConfig =
+            new File('${tempDir.path}/.dart_tool/package_config.json')
+              ..createSync(recursive: true)
+              ..writeAsStringSync('{\n'
+                  '  "configVersion": 2,\n'
+                  '  "packages": [\n'
+                  '    {\n'
+                  '      "name": "hello",\n'
+                  '      "rootUri": "../",\n'
+                  '      "packageUri": "./"\n'
+                  '    }\n'
+                  '  ]\n'
+                  '}\n');
+        final String entrypoint = 'package:hello/main.dart';
+        final File dillFile = new File('${tempDir.path}/out.dill');
+        final List<String> args = <String>[
+          '--sdk-root=${sdkRoot.toFilePath()}',
+          '--incremental',
+          '--platform=${ddcPlatformKernel.path}',
+          '--output-dill=${dillFile.path}',
+          '--target=dartdevc',
+          '--dartdevc-module-format=$moduleFormat',
+          if (canary) '--dartdevc-canary',
+          '--packages=${packageConfig.path}',
+        ];
+        final FrontendServer frontendServer = new FrontendServer();
+        final Future<int> result = frontendServer.open(args);
+        frontendServer.compile(entrypoint);
+        int count = 0;
+        final Completer<bool> expectationCompleter = new Completer<bool>();
+        frontendServer.listen((Result compiledResult) {
+          if (count == 0) {
+            compiledResult.expectNoErrors(filename: dillFile.path);
+            // Should find all files in the output for the initial compile.
+            final File manifestFile = new File('${dillFile.path}.json');
+            expect(manifestFile.existsSync(), true);
+            frontendServer.accept();
+            count++;
+            final Map<String, dynamic> manifest =
+                json.decode(utf8.decode(manifestFile.readAsBytesSync()));
+            expect(
+                manifest.keys,
+                unorderedEquals([
+                  '/packages/hello/main.dart.lib.js',
+                  '/packages/hello/helper.dart.lib.js',
+                  '/packages/hello/class1.dart.lib.js',
+                  '/packages/hello/mixin1.dart.lib.js',
+                  '/packages/hello/class2.dart.lib.js',
+                  '/packages/hello/mixin2.dart.lib.js',
+                ]));
+            // Modify the body expression of an arrow function in the M1 mixin.
+            final File mixinFile = new File('${tempDir.path}/mixin1.dart')
+              ..createSync()
+              ..writeAsStringSync("mixin M1 {\n"
+                  "  String fn1() { return 'hello'; }\n"
+                  "  String gn1() => 'goodbye';\n"
+                  "}\n");
+
+            frontendServer.recompile(mixinFile.uri, entryPoint: entrypoint);
+          } else if (count == 1) {
+            final File dillIncFile =
+                new File('${dillFile.path}.incremental.dill');
+            compiledResult.expectNoErrors(filename: dillIncFile.path);
+            frontendServer.accept();
+            count++;
+            // Find four output files have been invalidated corresponding to the
+            // library that contains the modified mixin and the reverse imports
+            // back to the main entrypoint.
+            //
+            // This is a side effect of the arrow function body expressions
+            // being present in the  incremental compilers "textual outline" so
+            // changes to the body will invalidate the "public" API. This is
+            // more than DDC needs for correctness.
+            final File manifestFile = new File('${dillIncFile.path}.json');
+            final Map<String, dynamic> manifest =
+                json.decode(utf8.decode(manifestFile.readAsBytesSync()));
+            expect(
+                manifest.keys,
+                unorderedEquals([
+                  '/packages/hello/main.dart.lib.js',
+                  '/packages/hello/class2.dart.lib.js',
+                  '/packages/hello/class1.dart.lib.js',
+                  '/packages/hello/mixin1.dart.lib.js'
+                ]));
+            // Modify an expression in the block body of a method in the mixin
+            // M1.
+            final File mixinFile = new File('${tempDir.path}/mixin1.dart')
+              ..createSync()
+              ..writeAsStringSync("mixin M1 {\n"
+                  "  String fn1() { return 'goodbye'; }\n"
+                  "  String gn1() => 'goodbye';\n"
+                  "}\n");
+
+            frontendServer.recompile(mixinFile.uri, entryPoint: entrypoint);
+          } else if (count == 2) {
+            final File dillIncFile =
+                new File('${dillFile.path}.incremental.dill');
+            compiledResult.expectNoErrors(filename: dillIncFile.path);
+            frontendServer.accept();
+            count++;
+            // Find two output files have been invalidated corresponding to the
+            // library that contains the modified mixin and the library contains
+            // an application of the modified mixin.
+            //
+            // DDC needs to reevaluate the library with the mixin application to
+            // ensure the mixin method body is applied.
+            final File manifestFile = new File('${dillIncFile.path}.json');
+            final Map<String, dynamic> manifest =
+                json.decode(utf8.decode(manifestFile.readAsBytesSync()));
+            expect(
+                manifest.keys,
+                unorderedEquals([
+                  '/packages/hello/class1.dart.lib.js',
+                  '/packages/hello/mixin1.dart.lib.js'
+                ]));
+            frontendServer.quit();
+            expectationCompleter.complete(true);
+          }
+        });
+        expect(await result, 0);
+        await expectationCompleter.future;
+        frontendServer.close();
+      }
+
+      test('AMD module format', () async {
+        await runTests(moduleFormat: 'amd');
+      });
+
+      test('DDC module format and canary', () async {
+        await runTests(moduleFormat: 'ddc', canary: true);
+      });
+    });
+
     group('compile expression to JavaScript', () {
       Future<void> runTests(
           {required String moduleFormat, bool canary = false}) async {
diff --git a/pkg/frontend_server_client/CHANGELOG.md b/pkg/frontend_server_client/CHANGELOG.md
new file mode 100644
index 0000000..793ccd8
--- /dev/null
+++ b/pkg/frontend_server_client/CHANGELOG.md
@@ -0,0 +1,61 @@
+## 4.0.1-wip
+
+- Update Dart SDK constraint to `^3.10.0`.
+
+## 4.0.0
+
+- Update Dart SDK constraint to `^3.0.0`.
+- Support changes in the SDK layout for Dart 3.0.
+- By default, start the frontend server from the AOT snapshot shipped in the
+  Dart SDK.
+- Throw an `ArgumentError` when `FrontendServerClient.start` is called with the
+  `frontendServerPath` argument omitted and the `debug` argument set to true.
+- Update `package:vm_service` constraint to `^14.0.0`.
+
+## 3.2.0
+
+- Add `nativeAssets` parameter to `FrontendServerClient`, for passing
+  additional `--native-assets` to the kernel compiler.
+
+## 3.1.0
+
+- Add `additionalSources` parameter to `FrontendServerClient`, for passing
+  additional `--source`s to the kernel compiler.
+
+## 3.0.0
+
+- Update the `compile` api to return a non-null `CompileResult`, and instead
+  make the `dillOutput` field nullable. This allows you to still get compiler
+  output if no dill file was produced.
+
+## 2.1.3
+
+- Update `package:vm_service` to version `^8.0.0`
+
+## 2.1.2
+
+- Force kill the frontend server after one second when calling shutdown. It
+  appears to hang on windows sometimes.
+
+## 2.1.1
+
+- Fix a bug where spaces in the output dill path would cause a parse error when
+  reading the error count output.
+
+## 2.1.0
+
+- Support enabling experiments when starting the compiler.
+
+## 2.0.1
+
+- Widen the upper bound sdk constraint to `<3.0.0`. The frontend server api is
+  now considered quite stable and this package is now depended on by
+  package:test, so a tight constraint would cause unnecessary headaches.
+
+## 2.0.0
+
+- Support null safety.
+
+## 1.0.0
+
+- Initial version
diff --git a/pkg/frontend_server_client/LICENSE b/pkg/frontend_server_client/LICENSE
new file mode 100644
index 0000000..be5c7b4
--- /dev/null
+++ b/pkg/frontend_server_client/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2012, 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/frontend_server_client/OWNERS b/pkg/frontend_server_client/OWNERS
new file mode 100644
index 0000000..0de4909
--- /dev/null
+++ b/pkg/frontend_server_client/OWNERS
@@ -0,0 +1,7 @@
+set noparent
+# Dart Development Infrastructure Team
+file:/tools/OWNERS_DEV_INFRA
+# VM Team
+file:/tools/OWNERS_VM
+# Global owners.
+file:/OWNERS
diff --git a/pkg/frontend_server_client/README.md b/pkg/frontend_server_client/README.md
new file mode 100644
index 0000000..e18c097
--- /dev/null
+++ b/pkg/frontend_server_client/README.md
@@ -0,0 +1,37 @@
+[![pub package](https://img.shields.io/pub/v/frontend_server_client.svg)](https://pub.dev/packages/frontend_server_client)
+[![package publisher](https://img.shields.io/pub/publisher/frontend_server_client.svg)](https://pub.dev/packages/frontend_server_client/publisher)
+
+This package provides a client interface around the frontend_server compiler
+which ships with the Dart SDK.
+
+## SDK Versioning Policy
+
+This package keeps a relatively tight version constraint on the SDK to allow for
+breaking changes in the frontend_server binary itself.
+
+Specifically, releases of this package will have an upper bound of less than the
+next _minor_ (middle) version number of the latest stable SDK. There are no
+requirements for the lower bound (other than the package must pass tests on that
+SDK).
+
+The effect of this policy is that breaking changes will be allowed to the
+frontend_server binary, but only in _minor_ SDK version releases.
+
+**Note**: This also means that when a new stable SDK is released, this package
+will also need a new version published on pub before users can get a valid
+version solve.
+
+### Working with dev SDK releases
+
+By default, when you do a pub get/upgrade, a constraint like `<2.9.0` will
+actually allow dev releases of `2.9.0` if the current SDK is a dev release. It
+emits a warning when it does this, but will happily allow it.
+
+- This means that we don't have to publish versions that explicitly allow dev
+  releases. We will be notified of breakages by our bots if a dev release does
+  break us, and can release a patch.
+
+If we need to depend on some new feature from a dev release, the min sdk
+constraint should be bumped to that version but the max sdk constraint should
+_not_ be changed. So for example we will have constraints like
+`>=2.9.0-dev.1 <2.9.0`.
diff --git a/pkg/frontend_server_client/analysis_options.yaml b/pkg/frontend_server_client/analysis_options.yaml
new file mode 100644
index 0000000..d978f81
--- /dev/null
+++ b/pkg/frontend_server_client/analysis_options.yaml
@@ -0,0 +1 @@
+include: package:dart_flutter_team_lints/analysis_options.yaml
diff --git a/pkg/frontend_server_client/example/app/index.html b/pkg/frontend_server_client/example/app/index.html
new file mode 100644
index 0000000..271b5b4
--- /dev/null
+++ b/pkg/frontend_server_client/example/app/index.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <script defer src="main.dart.js" type="application/javascript"></script>
+    </head>
+</html>
diff --git a/pkg/frontend_server_client/example/app/main.dart b/pkg/frontend_server_client/example/app/main.dart
new file mode 100644
index 0000000..6ee01dd
--- /dev/null
+++ b/pkg/frontend_server_client/example/app/main.dart
@@ -0,0 +1,16 @@
+// Copyright 2020 The Dart 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:path/path.dart' as p;
+
+Future<void> main() async {
+  print(message);
+  while (!message.contains('goodbye')) {
+    print('waiting for hot reload to change message');
+    await Future<void>.delayed(const Duration(seconds: 1));
+  }
+  print(message);
+}
+
+String get message => p.join('hello', 'world');
diff --git a/pkg/frontend_server_client/example/vm_client.dart b/pkg/frontend_server_client/example/vm_client.dart
new file mode 100644
index 0000000..2974f7b
--- /dev/null
+++ b/pkg/frontend_server_client/example/vm_client.dart
@@ -0,0 +1,117 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:frontend_server_client/frontend_server_client.dart';
+import 'package:path/path.dart' as p;
+import 'package:vm_service/vm_service.dart';
+import 'package:vm_service/vm_service_io.dart';
+
+void main(List<String> args) async {
+  // Change to package root so relative paths work in CI
+  final scriptDir = p.dirname(p.fromUri(Platform.script));
+  final packageRoot = p.dirname(scriptDir);
+  Directory.current = packageRoot;
+
+  try {
+    watch.start();
+    if (args.isNotEmpty) {
+      throw ArgumentError('No command line args are supported');
+    }
+
+    final packagesPath = findNearestPackageConfigPath();
+    final client = await FrontendServerClient.start(
+      'org-dartlang-root:///$app',
+      outputDill,
+      p.join(sdkDir, 'lib', '_internal', 'vm_platform_strong.dill'),
+      packagesJson: packagesPath ?? '.dart_tool/package_config.json',
+      target: 'vm',
+      // Use an absolute filesystem root so org-dartlang-root:/// URIs resolve reliably in CI
+      fileSystemRoots: [Directory.current.path],
+      fileSystemScheme: 'org-dartlang-root',
+      verbose: true,
+    );
+    _print('compiling $app');
+    var result = await client.compile();
+    client.accept();
+    _print('done compiling $app');
+
+    Process appProcess;
+    final vmServiceCompleter = Completer<VmService>();
+    appProcess = await Process.start(Platform.resolvedExecutable, [
+      '--enable-vm-service=0',
+      result.dillOutput!,
+    ]);
+    final sawHelloWorld = Completer<void>();
+    appProcess.stdout
+        .transform(utf8.decoder)
+        .transform(const LineSplitter())
+        .listen((line) {
+          stdout.writeln('APP -> $line');
+          if (line == 'hello/world') {
+            sawHelloWorld.complete();
+          }
+          if (line.startsWith(
+            'The Dart DevTools debugger and profiler is available at:',
+          )) {
+            final observatoryUri =
+                '${line.split(' ').last.replaceFirst('http', 'ws')}ws';
+            if (!vmServiceCompleter.isCompleted) {
+              vmServiceCompleter.complete(vmServiceConnectUri(observatoryUri));
+            }
+          }
+        });
+    appProcess.stderr
+        .transform(utf8.decoder)
+        .transform(const LineSplitter())
+        .listen((line) {
+          stderr.writeln('APP -> $line');
+        });
+
+    final vmService = await vmServiceCompleter.future;
+    await sawHelloWorld.future;
+
+    _print('editing $app');
+    final appFile = File(app);
+    final originalContent = await appFile.readAsString();
+    final newContent = originalContent.replaceFirst('hello', 'goodbye');
+    await appFile.writeAsString(newContent);
+
+    _print('recompiling $app with edits');
+    result = await client.compile([Uri.parse('org-dartlang-root:///$app')]);
+    client.accept();
+    _print('done recompiling $app');
+    _print('reloading $app');
+    final vm = await vmService.getVM();
+    await vmService.reloadSources(
+      vm.isolates!.first.id!,
+      rootLibUri: result.dillOutput!,
+    );
+
+    _print('restoring $app to original contents');
+    await appFile.writeAsString(originalContent);
+    _print('exiting');
+    await client.shutdown().timeout(
+      const Duration(seconds: 1),
+      onTimeout: () {
+        client.kill();
+        return 1;
+      },
+    );
+  } finally {
+    Directory(p.join('.dart_tool', 'out')).deleteSync(recursive: true);
+  }
+}
+
+void _print(String message) {
+  print('${watch.elapsed}: $message');
+}
+
+final app = 'example/app/main.dart';
+final outputDill = p.join('.dart_tool', 'out', 'example_app.dill');
+final sdkDir = p.dirname(p.dirname(Platform.resolvedExecutable));
+final watch = Stopwatch();
diff --git a/pkg/frontend_server_client/example/web_client.dart b/pkg/frontend_server_client/example/web_client.dart
new file mode 100644
index 0000000..6d971ac
--- /dev/null
+++ b/pkg/frontend_server_client/example/web_client.dart
@@ -0,0 +1,185 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:async/async.dart';
+import 'package:frontend_server_client/frontend_server_client.dart';
+import 'package:path/path.dart' as p;
+import 'package:shelf/shelf.dart';
+import 'package:shelf/shelf_io.dart' as shelf_io;
+import 'package:shelf_packages_handler/shelf_packages_handler.dart';
+import 'package:shelf_static/shelf_static.dart';
+
+void main(List<String> args) async {
+  // Change to package root so relative paths work in CI
+  final scriptDir = p.dirname(p.fromUri(Platform.script));
+  final packageRoot = p.dirname(scriptDir);
+  Directory.current = packageRoot;
+
+  try {
+    watch.start();
+    if (args.isNotEmpty) {
+      throw ArgumentError('No command line args are supported');
+    }
+
+    _print('compiling the dart sdk');
+    final sdkCompileResult = await Process.run(Platform.resolvedExecutable, [
+      'compile',
+      'js-dev',
+      '--multi-root-scheme=org-dartlang-sdk',
+      '--modules=amd',
+      '--module-name=dart_sdk',
+      '-o',
+      dartSdkJs,
+      p.url.join(sdkDir, sdkKernelPath),
+    ]);
+    if (sdkCompileResult.exitCode != 0) {
+      _print(
+        'Failed to compile the dart sdk to JS:\n'
+        '${sdkCompileResult.stdout}\n'
+        '${sdkCompileResult.stderr}',
+      );
+      exit(sdkCompileResult.exitCode);
+    }
+
+    _print('starting frontend server');
+    final packagesPath = findNearestPackageConfigPath();
+    final client = await DartDevcFrontendServerClient.start(
+      'org-dartlang-root:///$app',
+      outputDill,
+      // Use an absolute filesystem root so org-dartlang-root:/// URIs resolve reliably in CI
+      fileSystemRoots: [Directory.current.path],
+      fileSystemScheme: 'org-dartlang-root',
+      platformKernel: p.toUri(sdkKernelPath).toString(),
+      packagesJson: packagesPath ?? '.dart_tool/package_config.json',
+      verbose: true,
+    );
+
+    _print('compiling $app');
+    await client.compile([]);
+    client.accept();
+    _print('done compiling $app');
+
+    _print('starting shelf server');
+    final cascade = Cascade()
+        .add(_clientHandler(client))
+        .add(createStaticHandler(Directory.current.path))
+        .add(createFileHandler(dartSdkJs, url: 'example/app/dart_sdk.js'))
+        .add(
+          createFileHandler(
+            p.join(
+              sdkDir,
+              'lib',
+              'dev_compiler',
+              'web',
+              'dart_stack_trace_mapper.js',
+            ),
+            url: 'example/app/dart_stack_trace_mapper.js',
+          ),
+        )
+        .add(
+          createFileHandler(
+            p.join(sdkDir, 'lib', 'dev_compiler', 'amd', 'require.js'),
+            url: 'example/app/require.js',
+          ),
+        )
+        .add(packagesDirHandler());
+    final server = await shelf_io.serve(cascade.handler, 'localhost', 8080);
+    _print('server ready');
+
+    // The file we will be editing in the repl
+    final appFile = File(app);
+    final originalContent = await appFile.readAsString();
+    final appLines = const LineSplitter().convert(originalContent);
+    final getterText = 'String get message =>';
+    final messageLine = appLines.indexWhere(
+      (line) => line.startsWith(getterText),
+    );
+
+    final stdinQueue = StreamQueue(
+      stdin.transform(utf8.decoder).transform(const LineSplitter()),
+    );
+    _prompt();
+    while (await stdinQueue.hasNext) {
+      final newMessage = await stdinQueue.next;
+      if (newMessage == 'quit') {
+        await server.close();
+        await stdinQueue.cancel();
+        break;
+      } else if (newMessage == 'reset') {
+        print('resetting');
+        client.reset();
+        _print('restoring $app');
+        await appFile.writeAsString(originalContent);
+      } else {
+        _print('editing $app');
+        appLines[messageLine] = '$getterText "$newMessage";';
+        final newContent = appLines.join('\n');
+        await appFile.writeAsString(newContent);
+
+        _print('recompiling $app with edits');
+        final result = await client.compile([
+          Uri.parse('org-dartlang-root:///$app'),
+        ]);
+        if (result.errorCount > 0) {
+          print('Compile errors: \n${result.compilerOutputLines.join('\n')}');
+          await client.reject();
+        } else {
+          _print('Recompile succeeded for $app');
+          client.accept();
+          // TODO: support hot restart
+          print('reload app to see the new message');
+        }
+      }
+
+      _prompt();
+    }
+
+    _print('restoring $app');
+    await appFile.writeAsString(originalContent);
+    _print('exiting');
+    await client.shutdown();
+  } finally {
+    Directory(p.join('.dart_tool', 'out')).deleteSync(recursive: true);
+  }
+}
+
+Handler _clientHandler(DartDevcFrontendServerClient client) {
+  return (Request request) {
+    var path = request.url.path;
+    final packagesIndex = path.indexOf('/packages/');
+    if (packagesIndex > 0) {
+      path = request.url.path.substring(packagesIndex);
+    } else {
+      path = request.url.path;
+    }
+    if (!path.startsWith('/')) path = '/$path';
+    if (path.endsWith('.dart.js') && path != '/example/app/main.dart.js') {
+      path = path.replaceFirst('.dart.js', '.dart.lib.js', path.length - 8);
+    }
+    final assetBytes = client.assetBytes(path);
+    if (assetBytes == null) return Response.notFound('path not found');
+    return Response.ok(
+      assetBytes,
+      headers: {HttpHeaders.contentTypeHeader: 'application/javascript'},
+    );
+  };
+}
+
+void _print(String message) {
+  print('${watch.elapsed}: $message');
+}
+
+void _prompt() => stdout.write(
+      'Enter a new message to print and recompile, or type `quit` to exit:',
+    );
+
+final app = 'example/app/main.dart';
+final dartSdkJs = p.join('.dart_tool', 'out', 'dart_sdk.js');
+final outputDill = p.join('.dart_tool', 'out', 'example_app.dill');
+final sdkDir = p.dirname(p.dirname(Platform.resolvedExecutable));
+final sdkKernelPath = p.join(sdkDir, 'lib', '_internal', 'ddc_platform.dill');
+final watch = Stopwatch();
diff --git a/pkg/frontend_server_client/lib/frontend_server_client.dart b/pkg/frontend_server_client/lib/frontend_server_client.dart
new file mode 100644
index 0000000..06fba64
--- /dev/null
+++ b/pkg/frontend_server_client/lib/frontend_server_client.dart
@@ -0,0 +1,9 @@
+// Copyright 2020 The Dart 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/dartdevc_frontend_server_client.dart'
+    show DartDevcFrontendServerClient;
+export 'src/frontend_server_client.dart'
+    show CompileResult, FrontendServerClient;
+export 'src/package_config_utils.dart' show findNearestPackageConfigPath;
diff --git a/pkg/frontend_server_client/lib/src/dartdevc_bootstrap_amd.dart b/pkg/frontend_server_client/lib/src/dartdevc_bootstrap_amd.dart
new file mode 100644
index 0000000..50ed7d9
--- /dev/null
+++ b/pkg/frontend_server_client/lib/src/dartdevc_bootstrap_amd.dart
@@ -0,0 +1,61 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/// The JavaScript bootstrap script to support in-browser hot restart.
+///
+/// The [requireUrl] loads our cached RequireJS script file. The [mapperUrl]
+/// loads the special Dart stack trace mapper.
+///
+/// This file is served when the browser requests `$entrypoint.js` in debug
+/// mode, and is responsible for bootstrapping the RequireJS modules and
+/// attaching the hot reload hooks.
+String generateAmdBootstrapScript({
+  required String requireUrl,
+  required String mapperUrl,
+  required String entrypoint,
+}) {
+  return '''
+"use strict";
+
+// Attach source mapping.
+var mapperEl = document.createElement("script");
+mapperEl.defer = true;
+mapperEl.async = false;
+mapperEl.src = "$mapperUrl";
+document.head.appendChild(mapperEl);
+
+// Attach require JS.
+var requireEl = document.createElement("script");
+requireEl.defer = true;
+requireEl.async = false;
+requireEl.src = "$requireUrl";
+
+// This attribute tells require JS what to load as main (defined below).
+requireEl.setAttribute("data-main", "$entrypoint.bootstrap");
+document.head.appendChild(requireEl);
+''';
+}
+
+/// Generate a synthetic main module which captures the application's main
+/// method.
+///
+/// RE: Object.keys usage in app.main:
+/// This attaches the main entrypoint and hot reload functionality to the
+/// window. The app module will have a single property which contains the
+/// actual application code. The property name is based off of the entrypoint
+/// that is generated, for example the file `foo/bar/baz.dart` will generate
+/// a property named approximately `foo__bar__baz`. Rather than attempt to
+/// guess, we assume the first property of this object is the module.
+String generateAmdMainModule({required String entrypoint}) {
+  return '''/* ENTRYPOINT_EXTENTION_MARKER */
+// Create the main module loaded below.
+require(["$entrypoint.lib.js", "dart_sdk"], function(app, dart_sdk) {
+  dart_sdk.dart.setStartAsyncSynchronously(true);
+  dart_sdk._debugger.registerDevtoolsFormatter();
+
+  // See the generateMainModule doc comment.
+  app[Object.keys(app)[0]].main();
+});
+''';
+}
diff --git a/pkg/frontend_server_client/lib/src/dartdevc_frontend_server_client.dart b/pkg/frontend_server_client/lib/src/dartdevc_frontend_server_client.dart
new file mode 100644
index 0000000..15e78cd
--- /dev/null
+++ b/pkg/frontend_server_client/lib/src/dartdevc_frontend_server_client.dart
@@ -0,0 +1,211 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:path/path.dart' as p;
+
+import 'dartdevc_bootstrap_amd.dart';
+import 'frontend_server_client.dart';
+import 'shared.dart';
+
+/// Wraps a [FrontendServerClient] with opinionated web specific functionality,
+/// and provides some typical defaults.
+///
+/// Loads into memory the [CompileResult]s from each [compile] call, and
+/// provides access to the up to date sources and source maps.
+///
+/// Also has the ability to create a bootstrap file for the current entrypoint.
+class DartDevcFrontendServerClient implements FrontendServerClient {
+  final FrontendServerClient _frontendServerClient;
+
+  final _assets = <String, Uint8List>{};
+  final String _entrypoint;
+
+  /// The last compile, or `null` once it has been accepted or rejected.
+  CompileResult? _lastResult;
+
+  /// The bootstrap js contents, provided in [_assets] at
+  /// the path `${_entrypointModule}.js`.
+  ///
+  /// This is `null` if the module format is not supported for bootstrapping.
+  final String? _bootstrapJs;
+
+  /// The generated main module js contents, provided in [_assets] at
+  /// the path `${_entrypointModule}.bootstrap.js`.
+  ///
+  /// This is `null` if the module format is not supported for bootstrapping.
+  final String? _mainModuleJs;
+
+  DartDevcFrontendServerClient._(
+      this._frontendServerClient, this._entrypoint, String moduleFormat)
+      : _bootstrapJs = moduleFormat == 'amd'
+            ? generateAmdBootstrapScript(
+                requireUrl: 'require.js',
+                mapperUrl: 'dart_stack_trace_mapper.js',
+                entrypoint: _entrypoint)
+            : null,
+        _mainModuleJs = moduleFormat == 'amd'
+            ? generateAmdMainModule(entrypoint: _entrypoint)
+            : null {
+    _resetAssets();
+  }
+
+  static Future<DartDevcFrontendServerClient> start(
+    String entrypoint,
+    String outputDillPath, {
+    String dartdevcModuleFormat = 'amd',
+    bool debug = false,
+    bool enableHttpUris = false,
+    List<String> fileSystemRoots = const [], // For `fileSystemScheme` uris,
+    String fileSystemScheme =
+        'org-dartlang-root', // Custom scheme for virtual `fileSystemRoots`.
+    String? frontendServerPath, // Defaults to the snapshot in the sdk.
+    String packagesJson = '.dart_tool/package_config.json',
+    String? platformKernel, // Defaults to the dartdevc platform from the sdk.
+    String? sdkRoot, // Defaults to the current SDK root.
+    bool verbose = false,
+    bool printIncrementalDependencies = true,
+  }) async {
+    final feServer = await FrontendServerClient.start(
+      entrypoint,
+      outputDillPath,
+      platformKernel ?? _dartdevcPlatformKernel,
+      dartdevcModuleFormat: dartdevcModuleFormat,
+      debug: debug,
+      enableHttpUris: enableHttpUris,
+      fileSystemRoots: fileSystemRoots,
+      fileSystemScheme: fileSystemScheme,
+      frontendServerPath: frontendServerPath,
+      packagesJson: packagesJson,
+      sdkRoot: sdkRoot,
+      target: 'dartdevc',
+      verbose: verbose,
+    );
+    return DartDevcFrontendServerClient._(
+        feServer, Uri.parse(entrypoint).path, dartdevcModuleFormat);
+  }
+
+  /// Returns the current bytes for the asset at [path].
+  ///
+  /// The [path] should be exactly as it appears in the
+  /// [CompileResult.jsManifestOutput] file.
+  ///
+  /// **Note**: Assets are not updated until `accept` is called after a
+  /// successful compile. They are not updated if `reject` is called.
+  ///
+  /// Returns `null` if no asset exists at [path].
+  ///
+  /// In addition to any DDC compiled assets, this serves
+  Uint8List? assetBytes(String path) => _assets[path];
+
+  /// The contents of a JS file capable of bootstrapping the current app.
+  ///
+  /// TODO: implement
+  String bootstrapJs() => throw UnimplementedError();
+
+  /// Updates [_assets] for [result].
+  void _updateAssets(CompileResult result) {
+    if (result.dillOutput == null) {
+      return;
+    }
+    final manifest =
+        jsonDecode(File(result.jsManifestOutput!).readAsStringSync())
+            as Map<String, dynamic>;
+    final sourceBytes = File(result.jsSourcesOutput!).readAsBytesSync();
+    final sourceMapBytes = File(result.jsSourceMapsOutput!).readAsBytesSync();
+
+    for (final entry in manifest.entries) {
+      final metadata = entry.value as Map<String, dynamic>;
+      final sourceOffsets = metadata['code'] as List;
+      _assets[entry.key] =
+          sourceBytes.sublist(sourceOffsets[0] as int, sourceOffsets[1] as int);
+      final sourceMapOffsets = metadata['sourcemap'] as List;
+      _assets['${entry.key}.map'] = sourceMapBytes.sublist(
+          sourceMapOffsets[0] as int, sourceMapOffsets[1] as int);
+    }
+  }
+
+  @override
+  Future<CompileResult> compile([List<Uri>? invalidatedUris]) async {
+    return _lastResult = await _frontendServerClient.compile(invalidatedUris);
+  }
+
+  @override
+  Future<CompileResult> compileExpression({
+    required String expression,
+    required List<String> definitions,
+    required bool isStatic,
+    required String klass,
+    required String libraryUri,
+    required List<String> typeDefinitions,
+  }) =>
+      throw UnsupportedError(
+          'Use `compileExpressionToJs` for dartdevc based clients');
+
+  @override
+  Future<CompileResult> compileExpressionToJs({
+    required String expression,
+    required int column,
+    required Map<String, String> jsFrameValues,
+    required Map<String, String> jsModules,
+    required String libraryUri,
+    required int line,
+    required String moduleName,
+  }) =>
+      _frontendServerClient.compileExpressionToJs(
+          expression: expression,
+          column: column,
+          jsFrameValues: jsFrameValues,
+          jsModules: jsModules,
+          libraryUri: libraryUri,
+          line: line,
+          moduleName: moduleName);
+
+  @override
+  void accept() {
+    _frontendServerClient.accept();
+    if (_lastResult != null) _updateAssets(_lastResult!);
+    _lastResult = null;
+  }
+
+  @override
+  Future<void> reject() async {
+    await _frontendServerClient.reject();
+    _lastResult = null;
+  }
+
+  @override
+  void reset() {
+    _frontendServerClient.reset();
+    _resetAssets();
+  }
+
+  @override
+  bool kill({ProcessSignal processSignal = ProcessSignal.sigterm}) =>
+      _frontendServerClient.kill();
+
+  @override
+  Future<int> shutdown() => _frontendServerClient.shutdown();
+
+  /// Clears any previously compiled assets and adds the bootstrap modules as
+  /// assets if available.
+  void _resetAssets() {
+    _assets.clear();
+    final bootstrapJs = _bootstrapJs;
+    if (bootstrapJs != null) {
+      _assets['$_entrypoint.js'] = Uint8List.fromList(utf8.encode(bootstrapJs));
+    }
+    final mainModuleJs = _mainModuleJs;
+    if (mainModuleJs != null) {
+      _assets['$_entrypoint.bootstrap.js'] =
+          Uint8List.fromList(utf8.encode(mainModuleJs));
+    }
+  }
+}
+
+final _dartdevcPlatformKernel =
+    p.toUri(p.join(sdkDir, 'lib', '_internal', 'ddc_sdk.dill')).toString();
diff --git a/pkg/frontend_server_client/lib/src/frontend_server_client.dart b/pkg/frontend_server_client/lib/src/frontend_server_client.dart
new file mode 100644
index 0000000..d8d8d74
--- /dev/null
+++ b/pkg/frontend_server_client/lib/src/frontend_server_client.dart
@@ -0,0 +1,455 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:async/async.dart';
+import 'package:path/path.dart' as p;
+
+import 'shared.dart';
+
+/// Wrapper around the incremental frontend server compiler.
+class FrontendServerClient {
+  final String _entrypoint;
+  final Process _feServer;
+  final StreamQueue<String> _feServerStdoutLines;
+  final bool _verbose;
+
+  _ClientState _state;
+
+  FrontendServerClient._(
+      this._entrypoint, this._feServer, this._feServerStdoutLines,
+      {bool? verbose})
+      : _verbose = verbose ?? false,
+        _state = _ClientState.waitingForFirstCompile {
+    _feServer.stderr.transform(utf8.decoder).listen(stderr.write);
+  }
+
+  /// Starts the frontend server.
+  ///
+  /// Most arguments directly mirror the command line arguments for the
+  /// frontend_server (see `pkg/frontend_server/lib/frontend_server.dart` in
+  /// the sdk). Options are exposed on an as-needed basis.
+  ///
+  /// The [entrypoint] and [packagesJson] may be a relative path or any uri
+  /// supported by the frontend server.
+  ///
+  /// The [outputDillPath] determines where the primary output should be, and
+  /// some targets may output additional files based on that file name (by
+  /// adding file extensions for instance).
+  ///
+  /// When the [frontendServerPath] argument is provided, the frontend server
+  /// will be started from the specified file. The specified file can either be
+  /// a Dart source file or an AppJIT snapshot.
+  ///
+  /// When the [frontendServerPath] argument is provided, setting [debug] to
+  /// true permits debuggers to attach to the frontend server. When the
+  /// [frontendServerPath] argument is omitted, setting [debug] to true will
+  /// cause an [ArgumentError] to be thrown.
+  static Future<FrontendServerClient> start(
+    String entrypoint,
+    String outputDillPath,
+    String platformKernel, {
+    String dartdevcModuleFormat = 'amd',
+    bool debug = false,
+    List<String>? enabledExperiments,
+    bool enableHttpUris = false,
+    List<String> fileSystemRoots = const [], // For `fileSystemScheme` uris,
+    String fileSystemScheme =
+        'org-dartlang-root', // Custom scheme for virtual `fileSystemRoots`.
+    String? frontendServerPath, // Defaults to the snapshot in the sdk.
+    String packagesJson = '.dart_tool/package_config.json',
+    String? sdkRoot, // Defaults to the current SDK root.
+    String target = 'vm', // The kernel target type.
+    bool verbose = false, // Verbose logs, including server/client messages
+    bool printIncrementalDependencies = true,
+    List<String> additionalSources = const [],
+    String? nativeAssets,
+  }) async {
+    final commonArguments = <String>[
+      '--sdk-root',
+      sdkRoot ?? sdkDir,
+      '--platform=$platformKernel',
+      '--target=$target',
+      if (target == 'dartdevc')
+        '--dartdevc-module-format=$dartdevcModuleFormat',
+      for (final root in fileSystemRoots) '--filesystem-root=$root',
+      '--filesystem-scheme',
+      fileSystemScheme,
+      '--output-dill',
+      outputDillPath,
+      '--packages=$packagesJson',
+      if (enableHttpUris) '--enable-http-uris',
+      '--incremental',
+      if (verbose) '--verbose',
+      if (!printIncrementalDependencies) '--no-print-incremental-dependencies',
+      if (enabledExperiments != null)
+        for (final experiment in enabledExperiments)
+          '--enable-experiment=$experiment',
+      for (final source in additionalSources) ...[
+        '--source',
+        source,
+      ],
+      if (nativeAssets != null) ...[
+        '--native-assets',
+        nativeAssets,
+      ],
+    ];
+    late final Process feServer;
+    if (frontendServerPath != null) {
+      feServer = await Process.start(
+        Platform.resolvedExecutable,
+        <String>[
+          if (debug) '--observe',
+          frontendServerPath,
+          ...commonArguments,
+        ],
+      );
+    } else if (File(_feServerAotSnapshotPath).existsSync()) {
+      if (debug) {
+        throw ArgumentError('The debug argument cannot be set to true when the '
+            'frontendServerPath argument is omitted.');
+      }
+      feServer = await Process.start(
+        _dartAotRuntimePath,
+        <String>[_feServerAotSnapshotPath, ...commonArguments],
+      );
+    } else {
+      // AOT snapshots cannot be generated on IA32, so we need this fallback
+      // branch until support for IA32 is dropped (https://dartbug.com/49969).
+      feServer = await Process.start(
+        Platform.resolvedExecutable,
+        <String>[
+          if (debug) '--observe',
+          _feServerAppJitSnapshotPath,
+          ...commonArguments,
+        ],
+      );
+    }
+    final feServerStdoutLines = StreamQueue(feServer.stdout
+        .transform(utf8.decoder)
+        .transform(const LineSplitter()));
+
+    // The frontend_server doesn't appear to recursively create files, so we
+    //  need to make sure the output dir already exists.
+    final outputDir = Directory(p.dirname(outputDillPath));
+    if (!await outputDir.exists()) await outputDir.create();
+
+    return FrontendServerClient._(
+      entrypoint,
+      feServer,
+      feServerStdoutLines,
+      verbose: verbose,
+    );
+  }
+
+  /// Compiles [_entrypoint], using an incremental recompile if possible.
+  ///
+  /// [invalidatedUris] must not be null for all but the very first compile.
+  ///
+  /// The frontend server _does not_ do any of its own invalidation.
+  Future<CompileResult> compile([List<Uri>? invalidatedUris]) async {
+    String action;
+    switch (_state) {
+      case _ClientState.waitingForFirstCompile:
+        action = 'compile';
+        break;
+      case _ClientState.waitingForRecompile:
+        action = 'recompile';
+        break;
+      case _ClientState.waitingForAcceptOrReject:
+        throw StateError(
+            'Previous `CompileResult` must be accepted or rejected by '
+            'calling `accept` or `reject`.');
+      case _ClientState.compiling:
+        throw StateError(
+            'App is already being compiled, you must wait for that to '
+            'complete and `accept` or `reject` the result before compiling '
+            'again.');
+      case _ClientState.rejecting:
+        throw StateError('Still waiting for previous `reject` call to finish. '
+            'You must await that before compiling again.');
+    }
+    _state = _ClientState.compiling;
+
+    try {
+      final command = StringBuffer('$action $_entrypoint');
+      if (action == 'recompile') {
+        if (invalidatedUris == null || invalidatedUris.isEmpty) {
+          throw StateError(
+              'Subsequent compile invocations must provide a non-empty list '
+              'of invalidated uris.');
+        }
+        final boundaryKey = generateUuidV4();
+        command.writeln(' $boundaryKey');
+        for (final uri in invalidatedUris) {
+          command.writeln('$uri');
+        }
+        command.write(boundaryKey);
+      }
+
+      _sendCommand(command.toString());
+      var state = _CompileState.started;
+      late String feBoundaryKey;
+      final newSources = <Uri>{};
+      final removedSources = <Uri>{};
+      final compilerOutputLines = <String>[];
+      var errorCount = 0;
+      String? outputDillPath;
+      while (
+          state != _CompileState.done && await _feServerStdoutLines.hasNext) {
+        final line = await _nextInputLine();
+        switch (state) {
+          case _CompileState.started:
+            assert(line.startsWith('result'));
+            feBoundaryKey = line.substring(line.indexOf(' ') + 1);
+            state = _CompileState.waitingForKey;
+            continue;
+          case _CompileState.waitingForKey:
+            if (line == feBoundaryKey) {
+              state = _CompileState.gettingSourceDiffs;
+            } else {
+              compilerOutputLines.add(line);
+            }
+            continue;
+          case _CompileState.gettingSourceDiffs:
+            if (line.startsWith(feBoundaryKey)) {
+              state = _CompileState.done;
+              final parts = line.split(' ');
+              outputDillPath = parts.getRange(1, parts.length - 1).join(' ');
+              errorCount = int.parse(parts.last);
+              continue;
+            }
+            final diffUri = Uri.parse(line.substring(1));
+            if (line.startsWith('+')) {
+              newSources.add(diffUri);
+            } else if (line.startsWith('-')) {
+              removedSources.add(diffUri);
+            } else {
+              throw StateError(
+                  'unrecognized diff line, should start with a + or - '
+                  'but got: $line');
+            }
+            continue;
+          case _CompileState.done:
+            throw StateError('Unreachable');
+        }
+      }
+
+      return CompileResult._(
+          dillOutput: outputDillPath,
+          errorCount: errorCount,
+          newSources: newSources,
+          removedSources: removedSources,
+          compilerOutputLines: compilerOutputLines);
+    } finally {
+      _state = _ClientState.waitingForAcceptOrReject;
+    }
+  }
+
+  /// TODO: Document
+  Future<CompileResult> compileExpression({
+    required String expression,
+    required List<String> definitions,
+    required bool isStatic,
+    required String klass,
+    required String libraryUri,
+    required List<String> typeDefinitions,
+  }) =>
+      throw UnimplementedError();
+
+  /// TODO: Document
+  Future<CompileResult> compileExpressionToJs({
+    required String expression,
+    required int column,
+    required Map<String, String> jsFrameValues,
+    required Map<String, String> jsModules,
+    required String libraryUri,
+    required int line,
+    required String moduleName,
+  }) =>
+      throw UnimplementedError();
+
+  /// Should be invoked when results of compilation are accepted by the client.
+  ///
+  /// Either [accept] or [reject] should be called after every [compile] call.
+  void accept() {
+    if (_state != _ClientState.waitingForAcceptOrReject) {
+      throw StateError(
+          'Called `accept` but there was no previous compile to accept.');
+    }
+    _sendCommand('accept');
+    _state = _ClientState.waitingForRecompile;
+  }
+
+  /// Should be invoked when results of compilation are rejected by the client.
+  ///
+  /// Either [accept] or [reject] should be called after every [compile] call.
+  ///
+  /// The result of this call must be awaited before a new [compile] can be
+  /// done.
+  Future<void> reject() async {
+    if (_state != _ClientState.waitingForAcceptOrReject) {
+      throw StateError(
+          'Called `reject` but there was no previous compile to reject.');
+    }
+    _state = _ClientState.rejecting;
+    _sendCommand('reject');
+    late String boundaryKey;
+    var rejectState = _RejectState.started;
+    while (rejectState != _RejectState.done &&
+        await _feServerStdoutLines.hasNext) {
+      final line = await _nextInputLine();
+      switch (rejectState) {
+        case _RejectState.started:
+          if (!line.startsWith('result')) {
+            throw StateError(
+                'Expected a line like `result <boundary-key>` after a `reject` '
+                'command, but got:\n$line');
+          }
+          boundaryKey = line.split(' ').last;
+          rejectState = _RejectState.waitingForKey;
+          continue;
+        case _RejectState.waitingForKey:
+          if (line != boundaryKey) {
+            throw StateError('Expected exactly `$boundaryKey` but got:\n$line');
+          }
+          rejectState = _RejectState.done;
+          continue;
+        case _RejectState.done:
+          throw StateError('Unreachable');
+      }
+    }
+    _state = _ClientState.waitingForRecompile;
+  }
+
+  /// Should be invoked when frontend server compiler should forget what was
+  /// accepted previously so that next call to [compile] produces complete
+  /// kernel file.
+  void reset() {
+    if (_state == _ClientState.compiling) {
+      throw StateError(
+          'Called `reset` during an active compile, you must wait for that to '
+          'complete first.');
+    }
+    _sendCommand('reset');
+    _state = _ClientState.waitingForRecompile;
+  }
+
+  /// Stop the service gracefully (using the shutdown command)
+  Future<int> shutdown() async {
+    _sendCommand('quit');
+    final timer = Timer(const Duration(seconds: 1), _feServer.kill);
+    final exitCode = await _feServer.exitCode;
+    timer.cancel();
+    await _feServerStdoutLines.cancel();
+    return exitCode;
+  }
+
+  /// Kills the server forcefully by calling `kill` on the process, and
+  /// returns the result.
+  bool kill({ProcessSignal processSignal = ProcessSignal.sigterm}) {
+    _feServerStdoutLines.cancel();
+    return _feServer.kill(processSignal);
+  }
+
+  /// Sends [command] to the [_feServer] via stdin, and logs it if [_verbose].
+  void _sendCommand(String command) {
+    if (_verbose) {
+      final lines = const LineSplitter().convert(command);
+      for (final line in lines) {
+        print('>> $line');
+      }
+    }
+    _feServer.stdin.writeln(command);
+  }
+
+  /// Reads a line from [_feServerStdoutLines] and logs it if [_verbose].
+  Future<String> _nextInputLine() async {
+    final line = await _feServerStdoutLines.next;
+    if (_verbose) print('<< $line');
+    return line;
+  }
+}
+
+/// The result of a compile call.
+class CompileResult {
+  const CompileResult._(
+      {required this.dillOutput,
+      required this.compilerOutputLines,
+      required this.errorCount,
+      required this.newSources,
+      required this.removedSources});
+
+  /// The produced dill output file, this will either be a full dill file, an
+  /// incremental dill file, or `null` if no file was produced.
+  final String? dillOutput;
+
+  /// All output from the compiler, typically this would contain errors or
+  /// warnings.
+  final Iterable<String> compilerOutputLines;
+
+  /// The total count of errors, details should appear in
+  /// [compilerOutputLines].
+  final int errorCount;
+
+  /// A single file containing all source maps for all JS outputs.
+  ///
+  /// Read [jsManifestOutput] for file offsets for each sourcemap.
+  String? get jsSourceMapsOutput =>
+      dillOutput == null ? null : '$dillOutput.map';
+
+  /// A single file containing all JS outputs.
+  ///
+  /// Read [jsManifestOutput] for file offsets for each source.
+  String? get jsSourcesOutput =>
+      dillOutput == null ? null : '$dillOutput.sources';
+
+  /// A JSON manifest containing offsets for the sources and source maps in
+  /// the [jsSourcesOutput] and [jsSourceMapsOutput] files.
+  String? get jsManifestOutput =>
+      dillOutput == null ? null : '$dillOutput.json';
+
+  /// All the transitive source dependencies that were added as a part of this
+  /// compile.
+  final Iterable<Uri> newSources;
+
+  /// All the transitive source dependencies that were removed as a part of
+  /// this compile.
+  final Iterable<Uri> removedSources;
+}
+
+/// Internal states for the client.
+enum _ClientState {
+  compiling,
+  rejecting,
+  waitingForAcceptOrReject,
+  waitingForFirstCompile,
+  waitingForRecompile,
+}
+
+/// Frontend server interaction states for a `compile` call.
+enum _CompileState {
+  started,
+  waitingForKey,
+  gettingSourceDiffs,
+  done,
+}
+
+/// Frontend server interaction states for a `reject` call.
+enum _RejectState {
+  started,
+  waitingForKey,
+  done,
+}
+
+final _dartAotRuntimePath = p.join(sdkDir, 'bin', 'dartaotruntime');
+
+final _feServerAppJitSnapshotPath =
+    p.join(sdkDir, 'bin', 'snapshots', 'frontend_server.dart.snapshot');
+
+final _feServerAotSnapshotPath =
+    p.join(sdkDir, 'bin', 'snapshots', 'frontend_server_aot.dart.snapshot');
diff --git a/pkg/frontend_server_client/lib/src/package_config_utils.dart b/pkg/frontend_server_client/lib/src/package_config_utils.dart
new file mode 100644
index 0000000..b3eaaa4
--- /dev/null
+++ b/pkg/frontend_server_client/lib/src/package_config_utils.dart
@@ -0,0 +1,46 @@
+// Utility functions to locate a package_config.json for pub/workspace setups.
+
+import 'dart:io';
+
+import 'package:package_config/package_config.dart';
+import 'package:path/path.dart' as p;
+
+/// Walks up from [start] (or the current directory if omitted) to find the
+/// nearest `.dart_tool/package_config.json`.
+///
+/// Returns the absolute file path, or `null` if none is found.
+String? findNearestPackageConfigPath([Directory? start]) {
+  var dir = (start ?? Directory.current).absolute;
+  while (true) {
+    final file = File(p.join(dir.path, '.dart_tool', 'package_config.json'));
+    if (file.existsSync()) return file.path;
+    final parent = dir.parent;
+    if (parent.path == dir.path) return null;
+    dir = parent;
+  }
+}
+
+/// Returns an absolute path under the given [packageName]'s root directory,
+/// resolving using the nearest workspace `.dart_tool/package_config.json`.
+///
+/// This is robust for pub workspace monorepos where the nearest package
+/// config lives at the repo root and contains individual entries for each
+/// package with its own root.
+Future<String> pathFromNearestPackageConfig(
+  String relativePath, {
+  String packageName = 'frontend_server_client',
+}) async {
+  final configPath = findNearestPackageConfigPath();
+  if (configPath == null) {
+    throw StateError('Could not locate .dart_tool/package_config.json');
+  }
+  final config = await loadPackageConfigUri(Uri.file(configPath));
+  final pkg = config.packages.firstWhere(
+    (p0) => p0.name == packageName,
+    orElse: () => throw StateError(
+      'Package $packageName not found in package config at $configPath',
+    ),
+  );
+  final packageRootDir = p.fromUri(pkg.root);
+  return p.normalize(p.join(packageRootDir, relativePath));
+}
diff --git a/pkg/frontend_server_client/lib/src/shared.dart b/pkg/frontend_server_client/lib/src/shared.dart
new file mode 100644
index 0000000..5e6faa6
--- /dev/null
+++ b/pkg/frontend_server_client/lib/src/shared.dart
@@ -0,0 +1,38 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:io';
+import 'dart:math' show Random;
+
+import 'package:path/path.dart' as p;
+
+final sdkDir = p.dirname(p.dirname(Platform.resolvedExecutable));
+final sdkUri = p.toUri(sdkDir).toString();
+
+/// Returns a unique ID in the format:
+///
+///     f47ac10b-58cc-4372-a567-0e02b2c3d479
+///
+/// The generated uuids are 128 bit numbers encoded in a specific string format.
+/// For more information, see
+/// [en.wikipedia.org/wiki/Universally_unique_identifier](http://en.wikipedia.org/wiki/Universally_unique_identifier).
+String generateUuidV4() {
+  final random = Random();
+
+  int generateBits(int bitCount) => random.nextInt(1 << bitCount);
+
+  String printDigits(int value, int count) =>
+      value.toRadixString(16).padLeft(count, '0');
+  String bitsDigits(int bitCount, int digitCount) =>
+      printDigits(generateBits(bitCount), digitCount);
+
+  // Generate xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx / 8-4-4-4-12.
+  final special = 8 + random.nextInt(4);
+
+  return '${bitsDigits(16, 4)}${bitsDigits(16, 4)}-'
+      '${bitsDigits(16, 4)}-'
+      '4${bitsDigits(12, 3)}-'
+      '${printDigits(special, 1)}${bitsDigits(12, 3)}-'
+      '${bitsDigits(16, 4)}${bitsDigits(16, 4)}${bitsDigits(16, 4)}';
+}
diff --git a/pkg/frontend_server_client/pubspec.yaml b/pkg/frontend_server_client/pubspec.yaml
new file mode 100644
index 0000000..742b9a3
--- /dev/null
+++ b/pkg/frontend_server_client/pubspec.yaml
@@ -0,0 +1,26 @@
+name: frontend_server_client
+version: 4.0.1-wip
+description: >-
+  Client code to start and interact with the frontend_server compiler from the
+  Dart SDK.
+repository: https://github.com/dart-lang/webdev/tree/main/frontend_server_client
+
+resolution: workspace
+
+environment:
+  sdk: ^3.10.0-0.0.dev
+
+dependencies:
+  async: ^2.5.0
+  package_config: ^2.1.0
+  path: ^1.8.0
+
+dev_dependencies:
+  dart_flutter_team_lints: any
+  shelf: any
+  shelf_packages_handler: any
+  shelf_static: any
+  test: any
+  test_descriptor: any
+  test_process: any
+  vm_service: any
diff --git a/pkg/frontend_server_client/test/example/vm_client_test.dart b/pkg/frontend_server_client/test/example/vm_client_test.dart
new file mode 100644
index 0000000..846f624
--- /dev/null
+++ b/pkg/frontend_server_client/test/example/vm_client_test.dart
@@ -0,0 +1,33 @@
+// Copyright 2022 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// TODO: The examples don't work on windows
+@TestOn('!windows')
+library;
+
+import 'dart:io';
+
+import 'package:frontend_server_client/src/package_config_utils.dart';
+import 'package:test/test.dart';
+import 'package:test_process/test_process.dart';
+
+void main() {
+  test('vm client example can build and rebuild an app', () async {
+    // Resolve the example script path based on the package root.
+    final exampleFilePath = await pathFromNearestPackageConfig(
+      'example/vm_client.dart',
+    );
+    final process = await TestProcess.start(
+        Platform.resolvedExecutable, ['run', exampleFilePath]);
+    await expectLater(process.stdout,
+        emitsThrough(contains('done compiling example/app/main.dart')));
+    await expectLater(
+        process.stdout, emitsThrough(contains('APP -> hello/world')));
+    await expectLater(process.stdout,
+        emitsThrough(contains('done recompiling example/app/main.dart')));
+    await expectLater(
+        process.stdout, emitsThrough(contains('APP -> goodbye/world')));
+    expect(await process.exitCode, 0);
+  });
+}
diff --git a/pkg/frontend_server_client/test/example/web_client_test.dart b/pkg/frontend_server_client/test/example/web_client_test.dart
new file mode 100644
index 0000000..959ffea
--- /dev/null
+++ b/pkg/frontend_server_client/test/example/web_client_test.dart
@@ -0,0 +1,33 @@
+// Copyright 2022 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// TODO: The examples don't work on windows
+@TestOn('!windows')
+library;
+
+import 'dart:io';
+
+import 'package:frontend_server_client/src/package_config_utils.dart';
+import 'package:test/test.dart';
+import 'package:test_process/test_process.dart';
+
+void main() {
+  test('web client example can build and rebuild an app', () async {
+    // Resolve the example script path based on the package root.
+    final exampleFilePath = await pathFromNearestPackageConfig(
+      'example/web_client.dart',
+    );
+    final process = await TestProcess.start(
+        Platform.resolvedExecutable, ['run', exampleFilePath]);
+    await expectLater(process.stdout,
+        emitsThrough(contains('done compiling example/app/main.dart')));
+    process.stdin.writeln('new message');
+    await expectLater(
+        process.stdout,
+        emitsThrough(
+            contains('Recompile succeeded for example/app/main.dart')));
+    process.stdin.writeln('quit');
+    expect(await process.exitCode, 0);
+  });
+}
diff --git a/pkg/frontend_server_client/test/frontend_server_client_test.dart b/pkg/frontend_server_client/test/frontend_server_client_test.dart
new file mode 100644
index 0000000..9fb98a4
--- /dev/null
+++ b/pkg/frontend_server_client/test/frontend_server_client_test.dart
@@ -0,0 +1,364 @@
+// Copyright 2020 The Dart Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+@TestOn('vm')
+library;
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:async/async.dart';
+import 'package:frontend_server_client/frontend_server_client.dart';
+import 'package:package_config/package_config.dart';
+import 'package:path/path.dart' as p;
+import 'package:test/test.dart';
+import 'package:test_descriptor/test_descriptor.dart' as d;
+import 'package:vm_service/vm_service.dart';
+import 'package:vm_service/vm_service_io.dart';
+
+void main() async {
+  FrontendServerClient? client;
+  late PackageConfig packageConfig;
+  late String packageRoot;
+  late String packagesJsonPath;
+
+  setUp(() async {
+    await d.dir('a', [
+      d.file('pubspec.yaml', '''
+name: a
+dependencies:
+  path: ^1.0.0
+
+environment:
+  sdk: ^3.10.0-0.0.dev
+      '''),
+      d.dir('bin', [
+        d.file('main.dart', '''
+import 'package:path/path.dart' as p;
+
+void main() async {
+  print(message);
+  /// Runs in a loop until it is hot reloaded with a new message.
+  while (!message.contains('goodbye')) {
+    await Future.delayed(const Duration(seconds: 1));
+  }
+  print(message);
+}
+
+String get message => p.join('hello', 'world');
+
+'''),
+      ]),
+    ]).create();
+    packageRoot = p.join(d.sandbox, 'a');
+    await Process.run(
+        Platform.resolvedExecutable,
+        [
+          'pub',
+          'get',
+        ],
+        workingDirectory: packageRoot);
+    packageConfig = (await findPackageConfig(Directory(packageRoot)))!;
+    packagesJsonPath = findNearestPackageConfigPath(Directory(packageRoot)) ??
+        p.join(packageRoot, '.dart_tool', 'package_config.json');
+  });
+
+  tearDown(() async {
+    await client?.shutdown();
+  });
+
+  test('can compile, recompile, and hot reload a vm app', () async {
+    final entrypoint = p.join(packageRoot, 'bin', 'main.dart');
+    client = await FrontendServerClient.start(
+      entrypoint,
+      p.join(packageRoot, 'out.dill'),
+      vmPlatformDill,
+      packagesJson: packagesJsonPath,
+    );
+    var result = await client!.compile();
+    client!.accept();
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.errorCount, 0);
+    expect(
+      result.newSources,
+      containsAll([
+        File(entrypoint).uri,
+        packageConfig.resolve(Uri.parse('package:path/path.dart')),
+      ]),
+    );
+    expect(result.removedSources, isEmpty);
+    expect(result.dillOutput, isNotNull);
+    expect(File(result.dillOutput!).existsSync(), true);
+    final process = await Process.start(Platform.resolvedExecutable, [
+      '--observe',
+      '--no-pause-isolates-on-exit',
+      '--pause-isolates-on-start',
+      result.dillOutput!,
+    ]);
+    addTearDown(process.kill);
+    final stdoutLines = StreamQueue(
+      process.stdout.transform(utf8.decoder).transform(const LineSplitter()),
+    );
+    addTearDown(stdoutLines.cancel);
+
+    final observatoryLine = await stdoutLines.next;
+    final observatoryUri =
+        '${observatoryLine.split(' ').last.replaceFirst('http', 'ws')}ws';
+    final vmService = await vmServiceConnectUri(observatoryUri);
+    addTearDown(vmService.dispose);
+    final isolate = await waitForIsolatesAndResume(vmService);
+
+    await expectLater(stdoutLines, emitsThrough(p.join('hello', 'world')));
+
+    final appFile = File(entrypoint);
+    final originalContent = await appFile.readAsString();
+    final newContent = originalContent.replaceFirst('hello', 'goodbye');
+    await appFile.writeAsString(newContent);
+
+    result = await client!.compile([File(entrypoint).uri]);
+
+    client!.accept();
+    expect(result.newSources, isEmpty);
+    expect(result.removedSources, isEmpty);
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.errorCount, 0);
+    expect(result.dillOutput, endsWith('.incremental.dill'));
+
+    await vmService.reloadSources(isolate.id!, rootLibUri: result.dillOutput);
+
+    expect(await stdoutLines.next, p.join('goodbye', 'world'));
+    expect(await process.exitCode, 0);
+  });
+
+  test('can handle compile errors and reload fixes', () async {
+    final entrypoint = p.join(packageRoot, 'bin', 'main.dart');
+    final entrypointFile = File(entrypoint);
+    final originalContent = await entrypointFile.readAsString();
+    // append two compile errors to the bottom
+    await entrypointFile.writeAsString(
+      '$originalContent\nint foo = 1.0;\nString bar = 4;',
+    );
+
+    client = await FrontendServerClient.start(
+      entrypoint,
+      p.join(packageRoot, 'out.dill'),
+      vmPlatformDill,
+      packagesJson: packagesJsonPath,
+    );
+    var result = await client!.compile();
+
+    client!.accept();
+    expect(result.errorCount, 2);
+    expect(
+      result.compilerOutputLines,
+      allOf(contains('int foo = 1.0;'), contains('String bar = 4;')),
+    );
+    expect(
+      result.newSources,
+      containsAll([
+        File(entrypoint).uri,
+        packageConfig.resolve(Uri.parse('package:path/path.dart')),
+      ]),
+    );
+    expect(result.removedSources, isEmpty);
+    expect(result.dillOutput, isNotNull);
+    expect(File(result.dillOutput!).existsSync(), true);
+
+    final process = await Process.start(Platform.resolvedExecutable, [
+      '--observe',
+      '--no-pause-isolates-on-exit',
+      '--pause-isolates-on-start',
+      result.dillOutput!,
+    ]);
+    addTearDown(process.kill);
+    final stdoutLines = StreamQueue(
+      process.stdout.transform(utf8.decoder).transform(const LineSplitter()),
+    );
+    addTearDown(stdoutLines.cancel);
+
+    final observatoryLine = await stdoutLines.next;
+    final observatoryUri =
+        '${observatoryLine.split(' ').last.replaceFirst('http', 'ws')}ws';
+    final vmService = await vmServiceConnectUri(observatoryUri);
+    addTearDown(vmService.dispose);
+    final isolate = await waitForIsolatesAndResume(vmService);
+
+    // The program actually runs regardless of the errors, as they don't affect
+    // the runtime behavior.
+    await expectLater(stdoutLines, emitsThrough(p.join('hello', 'world')));
+
+    await entrypointFile.writeAsString(
+      originalContent.replaceFirst('hello', 'goodbye'),
+    );
+    result = await client!.compile([entrypointFile.uri]);
+    client!.accept();
+    expect(result.errorCount, 0);
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.newSources, isEmpty);
+    expect(result.removedSources, isEmpty);
+    expect(result.dillOutput, isNotNull);
+    expect(File(result.dillOutput!).existsSync(), true);
+
+    await vmService.reloadSources(isolate.id!, rootLibUri: result.dillOutput);
+
+    expect(await stdoutLines.next, p.join('goodbye', 'world'));
+    expect(await process.exitCode, 0);
+  });
+
+  test('can compile and recompile a dartdevc app', () async {
+    final entrypoint =
+        p.toUri(p.join(packageRoot, 'bin', 'main.dart')).toString();
+    final dartDevcClient = client = await DartDevcFrontendServerClient.start(
+      entrypoint,
+      p.join(packageRoot, 'out.dill'),
+      platformKernel: p
+          .toUri(p.join(sdkDir, 'lib', '_internal', 'ddc_platform.dill'))
+          .toString(),
+      packagesJson: packagesJsonPath,
+    );
+    var result = await client!.compile();
+    client!.accept();
+
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.errorCount, 0);
+    expect(
+      result.newSources,
+      containsAll([
+        Uri.parse(entrypoint),
+        packageConfig.resolve(Uri.parse('package:path/path.dart')),
+      ]),
+    );
+    expect(result.removedSources, isEmpty);
+
+    expect(result.dillOutput, isNotNull);
+    expect(File(result.jsManifestOutput!).existsSync(), true);
+    expect(File(result.jsSourcesOutput!).existsSync(), true);
+    expect(File(result.jsSourceMapsOutput!).existsSync(), true);
+
+    final entrypointUri = Uri.parse(entrypoint);
+    expect(
+      utf8.decode(dartDevcClient.assetBytes('${entrypointUri.path}.lib.js')!),
+      contains('hello'),
+    );
+
+    final appFile = File(entrypointUri.toFilePath());
+    final originalContent = await appFile.readAsString();
+    final newContent = originalContent.replaceFirst('hello', 'goodbye');
+    await appFile.writeAsString(newContent);
+
+    result = await client!.compile([entrypointUri]);
+    client!.accept();
+    expect(result.newSources, isEmpty);
+    expect(result.removedSources, isEmpty);
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.errorCount, 0);
+    expect(result.jsManifestOutput, endsWith('.incremental.dill.json'));
+
+    expect(
+      utf8.decode(dartDevcClient.assetBytes('${entrypointUri.path}.lib.js')!),
+      contains('goodbye'),
+    );
+  });
+
+  test('can enable experiments', () async {
+    await d.dir('a', [
+      d.dir('bin', [
+        d.file('nnbd.dart', '''
+
+// Compile time error if nnbd is enabled
+int x;
+
+void main() {
+  print(x);
+}
+'''),
+      ]),
+    ]).create();
+    final entrypoint = p.join(packageRoot, 'bin', 'nnbd.dart');
+    client = await FrontendServerClient.start(
+      entrypoint,
+      p.join(packageRoot, 'out.dill'),
+      vmPlatformDill,
+      enabledExperiments: ['non-nullable'],
+      packagesJson: packagesJsonPath,
+    );
+    final result = await client!.compile();
+    client!.accept();
+    expect(result.errorCount, 1);
+    expect(result.compilerOutputLines, contains(contains('int x;')));
+  });
+
+  test('can compile and recompile filenames with spaces', () async {
+    await d.dir('a', [
+      d.dir('bin', [
+        d.file('main with spaces.dart', '''
+void main() {
+  print('hello world');
+}
+'''),
+      ]),
+    ]).create();
+
+    final entrypoint = p.join(packageRoot, 'bin', 'main with spaces.dart');
+    client = await FrontendServerClient.start(
+      entrypoint,
+      p.join(packageRoot, 'out with spaces.dill'),
+      vmPlatformDill,
+      packagesJson: packagesJsonPath,
+    );
+    var result = await client!.compile();
+    client!.accept();
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.errorCount, 0);
+    expect(result.newSources, containsAll([File(entrypoint).uri]));
+    expect(result.removedSources, isEmpty);
+    expect(result.dillOutput, isNotNull);
+    expect(File(result.dillOutput!).existsSync(), true);
+    var processResult = await Process.run(Platform.resolvedExecutable, [
+      result.dillOutput!,
+    ]);
+
+    expect(processResult.stdout, startsWith('hello world'));
+    expect(processResult.exitCode, 0);
+
+    final appFile = File(entrypoint);
+    final originalContent = await appFile.readAsString();
+    final newContent = originalContent.replaceFirst('hello', 'goodbye');
+    await appFile.writeAsString(newContent);
+    result = await client!.compile([appFile.uri]);
+    expect(result.compilerOutputLines, isEmpty);
+    expect(result.errorCount, 0);
+    expect(result.newSources, isEmpty);
+    expect(result.removedSources, isEmpty);
+
+    processResult = await Process.run(Platform.resolvedExecutable, [
+      result.dillOutput!,
+    ]);
+    expect(processResult.stdout, startsWith('goodbye world'));
+    expect(processResult.exitCode, 0);
+  });
+}
+
+Future<Isolate> waitForIsolatesAndResume(VmService vmService) async {
+  var vm = await vmService.getVM();
+  var isolates = vm.isolates;
+  while (isolates == null || isolates.isEmpty) {
+    await Future<void>.delayed(const Duration(milliseconds: 100));
+    vm = await vmService.getVM();
+    isolates = vm.isolates;
+  }
+  final isolateRef = isolates.first;
+  var isolate = await vmService.getIsolate(isolateRef.id!);
+  while (isolate.pauseEvent?.kind != EventKind.kPauseStart) {
+    await Future<void>.delayed(const Duration(milliseconds: 100));
+    isolate = await vmService.getIsolate(isolateRef.id!);
+  }
+  await vmService.resume(isolate.id!);
+  return isolate;
+}
+
+final vmPlatformDill = p
+    .toUri(p.join(sdkDir, 'lib', '_internal', 'vm_platform_strong.dill'))
+    .toString();
+final sdkDir = p.dirname(p.dirname(Platform.resolvedExecutable));
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 422d4fb..402db89 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
 
 type ComponentFile {
   UInt32 magic = 0x90ABCDEF;
-  UInt32 formatVersion = 126;
+  UInt32 formatVersion = 127;
   Byte[10] shortSdkHash;
   List<String> problemsAsJson; // Described in problems.md.
   Library[] libraries;
@@ -469,28 +469,28 @@
 
 type InvalidInitializer extends Initializer {
   Byte tag = 7;
-  Byte isSynthetic;
+  FileOffset fileOffset;
+  StringReference message;
 }
 
 type FieldInitializer extends Initializer {
   Byte tag = 8;
-  Byte isSynthetic;
   FileOffset fileOffset;
+  Byte isSynthetic;
   FieldReference field;
   Expression value;
 }
 
 type SuperInitializer extends Initializer {
   Byte tag = 9;
-  Byte isSynthetic;
   FileOffset fileOffset;
+  Byte isSynthetic;
   ConstructorReference target;
   Arguments arguments;
 }
 
 type RedirectingInitializer extends Initializer {
   Byte tag = 10;
-  Byte isSynthetic;
   FileOffset fileOffset;
   ConstructorReference target;
   Arguments arguments;
@@ -498,13 +498,13 @@
 
 type LocalInitializer extends Initializer {
   Byte tag = 11;
-  Byte isSynthetic;
+  FileOffset fileOffset;
   VariableDeclarationPlain variable;
 }
 
 type AssertInitializer extends Initializer {
   Byte tag = 12;
-  Byte isSynthetic;
+  FileOffset fileOffset;
   AssertStatement statement;
 }
 
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 600fae6..6641ec6 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -1904,15 +1904,14 @@
 
   Initializer readInitializer() {
     int tag = readByte();
-    bool isSynthetic = readByte() == 1;
     switch (tag) {
       // 52.71% (43.80% - 59.02%).
       case Tag.FieldInitializer:
-        return _readFieldInitializer(isSynthetic);
+        return _readFieldInitializer();
 
       // 42.01% (28.38% - 55.93%)
       case Tag.SuperInitializer:
-        return _readSuperInitializer(isSynthetic);
+        return _readSuperInitializer();
 
       // 4.69% (0.00% - 16.00%).
       case Tag.AssertInitializer:
@@ -1931,11 +1930,14 @@
   }
 
   Initializer _readInvalidInitializer() {
-    return new InvalidInitializer();
+    int offset = readOffset();
+    String message = readStringReference();
+    return new InvalidInitializer(message)..fileOffset = offset;
   }
 
-  Initializer _readFieldInitializer(bool isSynthetic) {
+  Initializer _readFieldInitializer() {
     int offset = readOffset();
+    bool isSynthetic = readByte() == 1;
     Reference reference = readNonNullMemberReference();
     Expression value = readExpression();
     return new FieldInitializer.byReference(reference, value)
@@ -1943,8 +1945,9 @@
       ..fileOffset = offset;
   }
 
-  Initializer _readSuperInitializer(bool isSynthetic) {
+  Initializer _readSuperInitializer() {
     int offset = readOffset();
+    bool isSynthetic = readByte() == 1;
     Reference reference = readNonNullMemberReference();
     Arguments arguments = readArguments();
     return new SuperInitializer.byReference(reference, arguments)
@@ -1960,11 +1963,15 @@
   }
 
   Initializer _readLocalInitializer() {
-    return new LocalInitializer(readAndPushVariableDeclaration());
+    int offset = readOffset();
+    return new LocalInitializer(readAndPushVariableDeclaration())
+      ..fileOffset = offset;
   }
 
   Initializer _readAssertInitializer() {
-    return new AssertInitializer(readStatement() as AssertStatement);
+    int offset = readOffset();
+    return new AssertInitializer(readStatement() as AssertStatement)
+      ..fileOffset = offset;
   }
 
   FunctionNode readFunctionNode(
@@ -2333,7 +2340,7 @@
   Expression _readInvalidExpression() {
     int offset = readOffset();
     return new InvalidExpression(
-        readStringOrNullIfEmpty(), readExpressionOption())
+        readStringReference(), readExpressionOption())
       ..fileOffset = offset;
   }
 
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 59ab23f..d2cb46c 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1460,14 +1460,15 @@
   @override
   void visitInvalidInitializer(InvalidInitializer node) {
     writeByte(Tag.InvalidInitializer);
-    writeByte(node.isSynthetic ? 1 : 0);
+    writeOffset(node.fileOffset);
+    writeStringReference(node.message);
   }
 
   @override
   void visitFieldInitializer(FieldInitializer node) {
     writeByte(Tag.FieldInitializer);
-    writeByte(node.isSynthetic ? 1 : 0);
     writeOffset(node.fileOffset);
+    writeByte(node.isSynthetic ? 1 : 0);
     writeNonNullReference(node.fieldReference);
     writeNode(node.value);
   }
@@ -1475,8 +1476,8 @@
   @override
   void visitSuperInitializer(SuperInitializer node) {
     writeByte(Tag.SuperInitializer);
-    writeByte(node.isSynthetic ? 1 : 0);
     writeOffset(node.fileOffset);
+    writeByte(node.isSynthetic ? 1 : 0);
     writeNonNullReference(node.targetReference);
     writeArgumentsNode(node.arguments);
   }
@@ -1484,7 +1485,6 @@
   @override
   void visitRedirectingInitializer(RedirectingInitializer node) {
     writeByte(Tag.RedirectingInitializer);
-    writeByte(node.isSynthetic ? 1 : 0);
     writeOffset(node.fileOffset);
     writeNonNullReference(node.targetReference);
     writeArgumentsNode(node.arguments);
@@ -1493,14 +1493,14 @@
   @override
   void visitLocalInitializer(LocalInitializer node) {
     writeByte(Tag.LocalInitializer);
-    writeByte(node.isSynthetic ? 1 : 0);
+    writeOffset(node.fileOffset);
     writeVariableDeclaration(node.variable);
   }
 
   @override
   void visitAssertInitializer(AssertInitializer node) {
     writeByte(Tag.AssertInitializer);
-    writeByte(node.isSynthetic ? 1 : 0);
+    writeOffset(node.fileOffset);
     writeNode(node.statement);
   }
 
@@ -1556,7 +1556,7 @@
   void visitInvalidExpression(InvalidExpression node) {
     writeByte(Tag.InvalidExpression);
     writeOffset(node.fileOffset);
-    writeStringReference(node.message ?? '');
+    writeStringReference(node.message);
     writeOptionalNode(node.expression);
   }
 
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 123673d..5ab7a5b 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -227,7 +227,7 @@
   /// Internal version of kernel binary format.
   /// Bump it when making incompatible changes in kernel binaries.
   /// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
-  static const int BinaryFormatVersion = 126;
+  static const int BinaryFormatVersion = 127;
 }
 
 abstract class ConstantTag {
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index e33020a3..a60bb5e 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -1181,6 +1181,7 @@
     // caching it.
     if (_cachedClassHierarchySubtypes != null) {
       _cachedClassHierarchySubtypes!.invalidated = true;
+      _cachedClassHierarchySubtypes = null;
     }
 
     if (_recordedAmbiguousSupertypes.isNotEmpty &&
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 12aa2fa8..3b245af 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -740,7 +740,7 @@
 
   @override
   TreeNode visitInvalidInitializer(InvalidInitializer node) {
-    return new InvalidInitializer();
+    return new InvalidInitializer(node.message);
   }
 
   @override
diff --git a/pkg/kernel/lib/import_table.dart b/pkg/kernel/lib/import_table.dart
index 66ec6ba..0698253 100644
--- a/pkg/kernel/lib/import_table.dart
+++ b/pkg/kernel/lib/import_table.dart
@@ -86,11 +86,6 @@
     if (isTargetSchemeFileOrCustom && isReferenceSchemeFileOrCustom) {
       String relativeUri = relativeUriPath(targetUri, referenceUri);
       table.addImport(target, relativeUri);
-    } else if (isTargetSchemeFileOrCustom) {
-      // Cannot import a file:URI from a dart:URI or package:URI.
-      // We may want to remove this restriction, but for now it's just a sanity
-      // check.
-      throw '$referenceUri cannot refer to application library $targetUri';
     } else {
       table.addImport(target, target.importUri.toString());
     }
diff --git a/pkg/kernel/lib/src/ast/declarations.dart b/pkg/kernel/lib/src/ast/declarations.dart
index 301a926..d562977 100644
--- a/pkg/kernel/lib/src/ast/declarations.dart
+++ b/pkg/kernel/lib/src/ast/declarations.dart
@@ -360,6 +360,23 @@
     dirty = false;
   }
 
+  void clearCanonicalNames() {
+    reference.canonicalName = null;
+    for (int i = 0; i < fields.length; ++i) {
+      final Field field = fields[i];
+      field.fieldReference.canonicalName = null;
+      field.getterReference.canonicalName = null;
+      field.setterReference?.canonicalName = null;
+    }
+    for (int i = 0; i < procedures.length; ++i) {
+      procedures[i].reference.canonicalName = null;
+    }
+    for (int i = 0; i < constructors.length; ++i) {
+      constructors[i].reference.canonicalName = null;
+    }
+    dirty = true;
+  }
+
   /// This is an advanced feature. Use of this method should be coordinated
   /// with the kernel team.
   ///
diff --git a/pkg/kernel/lib/src/ast/dummies.dart b/pkg/kernel/lib/src/ast/dummies.dart
index a449f59..611e30e 100644
--- a/pkg/kernel/lib/src/ast/dummies.dart
+++ b/pkg/kernel/lib/src/ast/dummies.dart
@@ -317,7 +317,7 @@
 /// This is used as the removal sentinel in [RemovingTransformer] and can be
 /// used for instance as a dummy initial value for the `List.filled`
 /// constructor.
-final Initializer dummyInitializer = new InvalidInitializer();
+final Initializer dummyInitializer = new InvalidInitializer('');
 
 /// Non-nullable [FunctionNode] dummy value.
 ///
diff --git a/pkg/kernel/lib/src/ast/expressions.dart b/pkg/kernel/lib/src/ast/expressions.dart
index 07d24f7..8a60981 100644
--- a/pkg/kernel/lib/src/ast/expressions.dart
+++ b/pkg/kernel/lib/src/ast/expressions.dart
@@ -125,8 +125,7 @@
 /// The [fileOffset] of an [InvalidExpression] indicates the location in the
 /// tree where the expression occurs, rather than the location of the error.
 class InvalidExpression extends Expression {
-  // TODO(johnniwinther): Avoid using `null` as the empty string.
-  String? message;
+  String message;
 
   /// The expression containing the error.
   Expression? expression;
@@ -179,7 +178,7 @@
   @override
   void toTextInternal(AstPrinter printer) {
     printer.write('<invalid:');
-    printer.write(message ?? '');
+    printer.write(message);
     if (expression != null) {
       printer.write(', ');
       printer.writeExpression(expression!);
@@ -188,12 +187,17 @@
   }
 }
 
-/// Read a local variable, a local function, or a function parameter.
 class VariableGet extends Expression {
-  VariableDeclaration variable;
-  DartType? promotedType; // Null if not promoted.
+  /// The target variable as [VariableDeclaration].
+  VariableDeclaration get variable => expressionVariable as VariableDeclaration;
 
-  VariableGet(this.variable, [this.promotedType]);
+  /// The target variable.
+  ExpressionVariable expressionVariable;
+
+  /// Null if not promoted.
+  DartType? promotedType;
+
+  VariableGet(this.expressionVariable, [this.promotedType]);
 
   @override
   DartType getStaticType(StaticTypeContext context) =>
@@ -201,7 +205,7 @@
 
   @override
   DartType getStaticTypeInternal(StaticTypeContext context) {
-    return promotedType ?? variable.type;
+    return promotedType ?? expressionVariable.type;
   }
 
   @override
@@ -242,7 +246,7 @@
 
   @override
   void toTextInternal(AstPrinter printer) {
-    printer.write(printer.getVariableDeclarationName(variable));
+    printer.write(printer.getVariableName(variable));
     if (promotedType != null) {
       printer.write('{');
       printer.writeType(promotedType!);
@@ -255,10 +259,15 @@
 ///
 /// Evaluates to the value of [value].
 class VariableSet extends Expression {
-  VariableDeclaration variable;
+  /// The target variable as [VariableDeclaration].
+  VariableDeclaration get variable => expressionVariable as VariableDeclaration;
+
+  /// The target variable.
+  ExpressionVariable expressionVariable;
+
   Expression value;
 
-  VariableSet(this.variable, this.value) {
+  VariableSet(this.expressionVariable, this.value) {
     value.parent = this;
   }
 
@@ -301,7 +310,7 @@
 
   @override
   void toTextInternal(AstPrinter printer) {
-    printer.write(printer.getVariableDeclarationName(variable));
+    printer.write(printer.getVariableName(variable));
     printer.write(' = ');
     printer.writeExpression(value);
   }
@@ -2211,7 +2220,7 @@
 
   @override
   void toTextInternal(AstPrinter printer) {
-    printer.write(printer.getVariableDeclarationName(variable));
+    printer.write(printer.getVariableName(variable));
     printer.writeArguments(arguments);
   }
 }
diff --git a/pkg/kernel/lib/src/ast/initializers.dart b/pkg/kernel/lib/src/ast/initializers.dart
index e4e1367..f446b76 100644
--- a/pkg/kernel/lib/src/ast/initializers.dart
+++ b/pkg/kernel/lib/src/ast/initializers.dart
@@ -12,7 +12,7 @@
 sealed class Initializer extends TreeNode {
   /// True if this is a synthetic constructor initializer.
   @informative
-  bool isSynthetic = false;
+  bool get isSynthetic => false;
 
   @override
   R accept<R>(InitializerVisitor<R> v);
@@ -33,10 +33,11 @@
 /// An initializer with a compile-time error.
 ///
 /// Should throw an exception at runtime.
-//
-// DESIGN TODO: The frontend should use this in a lot more cases to catch
-// invalid cases.
 class InvalidInitializer extends Initializer {
+  final String message;
+
+  InvalidInitializer(this.message);
+
   @override
   R accept<R>(InitializerVisitor<R> v) => v.visitInvalidInitializer(this);
 
@@ -60,7 +61,9 @@
 
   @override
   void toTextInternal(AstPrinter printer) {
-    // TODO(johnniwinther): Implement this.
+    printer.write('<invalid:');
+    printer.write(message);
+    printer.write('>');
   }
 }
 
@@ -77,6 +80,9 @@
   Reference fieldReference;
   Expression value;
 
+  @override
+  bool isSynthetic = false;
+
   FieldInitializer(Field field, Expression value)
       : this.byReference(field.fieldReference, value);
 
@@ -140,6 +146,9 @@
   Reference targetReference;
   Arguments arguments;
 
+  @override
+  bool isSynthetic = false;
+
   SuperInitializer(Constructor target, Arguments arguments)
       : this.byReference(
             // Getter vs setter doesn't matter for constructors.
diff --git a/pkg/kernel/lib/src/ast/patterns.dart b/pkg/kernel/lib/src/ast/patterns.dart
index 77f9f86..02f3f55 100644
--- a/pkg/kernel/lib/src/ast/patterns.dart
+++ b/pkg/kernel/lib/src/ast/patterns.dart
@@ -877,7 +877,9 @@
 }
 
 class AssignedVariablePattern extends Pattern {
-  final VariableDeclaration variable;
+  VariableDeclaration get variable => expressionVariable as VariableDeclaration;
+
+  final ExpressionVariable expressionVariable;
 
   /// The type of the expression against which this pattern is matched.
   ///
@@ -921,7 +923,7 @@
   /// not.
   bool hasObservableEffect = true;
 
-  AssignedVariablePattern(this.variable);
+  AssignedVariablePattern(this.expressionVariable);
 
   @override
   R accept<R>(PatternVisitor<R> visitor) =>
diff --git a/pkg/kernel/lib/src/ast/statements.dart b/pkg/kernel/lib/src/ast/statements.dart
index 8d17cce..9135228 100644
--- a/pkg/kernel/lib/src/ast/statements.dart
+++ b/pkg/kernel/lib/src/ast/statements.dart
@@ -1405,25 +1405,35 @@
   }
 }
 
-abstract interface class VariableDeclaration implements Annotatable, Statement {
+abstract interface class VariableDeclaration
+    implements
+        Annotatable,
+        Statement,
+        ExpressionVariable,
+        VariableInitialization {
   /// The name of the variable as provided in the source code.
   ///
   /// The name of a variable can only be omitted if the variable is synthesized.
   /// Otherwise, its name is as provided in the source code.
+  @override
   abstract String? name;
 
   /// The declared or inferred type of the variable.
+  @override
   abstract DartType type;
 
   /// For locals, this is the initial value.
   /// For parameters, this is the default value.
   ///
   /// Should be null in other cases.
+  @override
   abstract Expression? initializer;
 
+  @override
   abstract int flags;
 
   /// Whether the parameter is declared with the `covariant` keyword.
+  @override
   abstract bool isCovariantByDeclaration;
 
   /// If this [VariableDeclaration] is a parameter of a method, indicates
@@ -1431,24 +1441,29 @@
   /// deal with generic covariance.
   ///
   /// When `true`, runtime checks may need to be performed.
+  @override
   abstract bool isCovariantByClass;
 
   /// Whether the variable is declared with the `const` keyword.
+  @override
   abstract bool isConst;
 
   /// Whether the variable is declared with the `late` keyword.
   ///
   /// The `late` modifier is only supported on local variables and not on
   /// parameters.
+  @override
   abstract bool isLate;
 
   /// Whether the variable is declared with the `final` keyword.
+  @override
   abstract bool isFinal;
 
   /// Whether the parameter is declared with the `required` keyword.
   ///
   /// The `required` modifier is only supported on named parameters and not on
   /// positional parameters and local variables.
+  @override
   abstract bool isRequired;
 
   /// Whether the variable is part of a lowering.
@@ -1459,6 +1474,7 @@
   ///
   /// Lowering is used for instance of encoding of 'this' in extension instance
   /// members and encoding of late locals.
+  @override
   abstract bool isLowered;
 
   /// Whether the declaration of this variable is has been moved to an earlier
@@ -1467,6 +1483,7 @@
   /// This is for instance the case for variables declared in a pattern, where
   /// the lowering requires the variable to be declared before the expression
   /// that performs that matching in which its initialization occurs.
+  @override
   abstract bool isHoisted;
 
   /// Whether this variable is synthesized, that is, it is _not_ declared in
@@ -1474,25 +1491,30 @@
   ///
   /// The name of a variable can only be omitted if the variable is synthesized.
   /// Otherwise, its name is as provided in the source code.
+  @override
   abstract bool isSynthesized;
 
   /// Whether the variable is assignable.
   ///
   /// This is `true` if the variable is neither constant nor final, or if it
   /// is late final without an initializer.
+  @override
   bool get isAssignable;
 
   /// Whether the variable is declared as an initializing formal parameter of
   /// a constructor.
   @informative
+  @override
   abstract bool isInitializingFormal;
 
   /// Whether the variable is declared as a super initializing formal parameter
   /// of a constructor.
   @informative
+  @override
   abstract bool isSuperInitializingFormal;
 
   @informative
+  @override
   abstract bool isErroneouslyInitialized;
 
   /// Whether the variable has an initializer, either by declaration or copied
@@ -1502,11 +1524,13 @@
   /// so `hasDeclaredInitializer == false` doesn't imply `initializer == null`.
   /// For instance, for duplicate variable names, an invalid expression is set
   /// as the initializer of the second variable.
+  @override
   abstract bool hasDeclaredInitializer;
 
   /// Whether this variable is a wildcard variable.
   ///
   /// Wildcard variables have the name `_`.
+  @override
   abstract bool isWildcard;
 
   /// Offset of the equals sign in the source file it comes from.
@@ -1514,9 +1538,11 @@
   /// Valid values are from 0 and up, or -1 ([TreeNode.noOffset])
   /// if the equals sign offset is not available (e.g. if not initialized)
   /// (this is the default if none is specifically set).
+  @override
   abstract int fileEqualsOffset;
 
   /// Offset of the declaration, set and used when writing the binary.
+  @override
   abstract int binaryOffsetNoTag;
 
   /// List of metadata annotations on the variable declaration.
@@ -1526,6 +1552,7 @@
   @override
   abstract List<Expression> annotations;
 
+  @override
   void clearAnnotations();
 
   factory VariableDeclaration(String? name,
@@ -1880,6 +1907,40 @@
     printer.writeVariableDeclaration(this);
     printer.write(';');
   }
+
+  @override
+  String? get cosmeticName => name;
+
+  @override
+  void set cosmeticName(String? value) {
+    name = value;
+  }
+
+  @override
+  VariableInitialization? get variableInitialization {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set variableInitialization(VariableInitialization? value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  VariableContext get context {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  ExpressionVariable get asExpressionVariable => this;
+
+  @override
+  ExpressionVariable get variable => this;
+
+  @override
+  void set variable(ExpressionVariable value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
 }
 
 /// Declaration a local function.
@@ -1935,8 +1996,7 @@
 
   @override
   void toTextInternal(AstPrinter printer) {
-    printer.writeFunctionNode(
-        function, printer.getVariableDeclarationName(variable));
+    printer.writeFunctionNode(function, printer.getVariableName(variable));
     if (function.body is ReturnStatement) {
       printer.write(';');
     }
@@ -1946,37 +2006,143 @@
 /// The statement that marks the declaration of the variable in the source Dart
 /// program. If the [initializer] is `null`, the variable was declared without
 /// an initializer.
-class VariableInitialization extends Statement {
-  final ExpressionVariable variable;
-  final Expression? initializer;
+class VariableInitialization extends Statement implements Annotatable {
+  ExpressionVariable variable;
 
-  VariableInitialization({required this.variable, required this.initializer});
+  Expression? initializer;
 
-  @override
-  R accept<R>(StatementVisitor<R> v) {
-    // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+  VariableInitialization({required this.variable, required this.initializer}) {
+    variable.variableInitialization = this;
+  }
+
+  static const int FlagHasDeclaredInitializer = 1 << 0;
+  static const int FlagErroneouslyInitialized = 1 << 1;
+
+  int flags = 0;
+
+  bool get hasDeclaredInitializer => flags & FlagHasDeclaredInitializer != 0;
+
+  void set hasDeclaredInitializer(bool value) {
+    flags = value
+        ? (flags | FlagHasDeclaredInitializer)
+        : (flags & ~FlagHasDeclaredInitializer);
+  }
+
+  bool get isErroneouslyInitialized => flags & FlagErroneouslyInitialized != 0;
+
+  void set isErroneouslyInitialized(bool value) {
+    flags = value
+        ? (flags | FlagErroneouslyInitialized)
+        : (flags & ~FlagErroneouslyInitialized);
+  }
+
+  bool get isConst => variable.isConst;
+
+  void set isConst(bool value) {
+    variable.isConst = value;
+  }
+
+  bool get isCovariantByClass => variable.isCovariantByClass;
+
+  void set isCovariantByClass(bool value) {
+    variable.isCovariantByClass = value;
+  }
+
+  bool get isCovariantByDeclaration => variable.isCovariantByDeclaration;
+
+  void set isCovariantByDeclaration(bool value) {
+    variable.isCovariantByDeclaration = value;
+  }
+
+  bool get isFinal => variable.isFinal;
+
+  void set isFinal(bool value) {
+    variable.isFinal = value;
+  }
+
+  bool get isHoisted => variable.isHoisted;
+
+  void set isHoisted(bool value) {
+    variable.isHoisted = value;
+  }
+
+  bool get isInitializingFormal => variable.isInitializingFormal;
+
+  void set isInitializingFormal(bool value) {
+    variable.isInitializingFormal = value;
+  }
+
+  bool get isLate => variable.isLate;
+
+  void set isLate(bool value) {
+    variable.isLate = value;
+  }
+
+  bool get isLowered => variable.isLowered;
+
+  void set isLowered(bool value) {
+    variable.isLowered = value;
+  }
+
+  bool get isRequired => variable.isRequired;
+
+  void set isRequired(bool value) {
+    variable.isRequired = value;
+  }
+
+  bool get isSuperInitializingFormal => variable.isSuperInitializingFormal;
+
+  void set isSuperInitializingFormal(bool value) {
+    variable.isSuperInitializingFormal = value;
+  }
+
+  bool get isSynthesized => variable.isSynthesized;
+
+  void set isSynthesized(bool value) {
+    variable.isSynthesized = value;
+  }
+
+  bool get isWildcard => variable.isWildcard;
+
+  void set isWildcard(bool value) {
+    variable.isWildcard = value;
   }
 
   @override
-  R accept1<R, A>(StatementVisitor1<R, A> v, A arg) {
-    // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
-  }
+  R accept<R>(StatementVisitor<R> v) => v.visitVariableInitialization(this);
+
+  @override
+  R accept1<R, A>(StatementVisitor1<R, A> v, A arg) =>
+      v.visitVariableInitialization(this, arg);
 
   @override
   void transformChildren(Transformer v) {
-    // TODO(cstefantsova): Implement transformChildren.
+    // Note that [variable] is not owned by [VariableInitialization], so it's
+    // not visited.
+    v.transformList(annotations, this);
+    if (initializer != null) {
+      initializer = v.transform(initializer!);
+      initializer?.parent = this;
+    }
   }
 
   @override
   void transformOrRemoveChildren(RemovingTransformer v) {
-    // TODO(cstefantsova): Implement transformOrRemoveChildren.
+    // Note that [variable] is not owned by [VariableInitialization], so it's
+    // not visited.
+    v.transformExpressionList(annotations, this);
+    if (initializer != null) {
+      initializer = v.transformOrRemoveExpression(initializer!);
+      initializer?.parent = this;
+    }
   }
 
   @override
   void visitChildren(Visitor v) {
-    // TODO(cstefantsova): Implement visitChildren.
+    // Note that [variable] is not owned by [VariableInitialization], so it's
+    // not visited.
+    visitList(annotations, v);
+    initializer?.accept(v);
   }
 
   @override
@@ -1993,4 +2159,53 @@
     }
     printer.write(';');
   }
+
+  @override
+  List<Expression> annotations = const <Expression>[];
+
+  int binaryOffsetNoTag = TreeNode.noOffset;
+
+  int fileEqualsOffset = TreeNode.noOffset;
+
+  String? get name => variable.cosmeticName;
+
+  void set name(String? value) {
+    variable.cosmeticName = value;
+  }
+
+  DartType get type => variable.type;
+
+  void set type(DartType value) {
+    variable.type = value;
+  }
+
+  @override
+  void addAnnotation(Expression node) {
+    if (annotations.isEmpty) {
+      annotations = <Expression>[];
+    }
+    annotations.add(node..parent = this);
+  }
+
+  void clearAnnotations() {
+    annotations = const <Expression>[];
+  }
+
+  bool get isAssignable => variable.isAssignable;
+
+  String? get cosmeticName => variable.cosmeticName;
+
+  void set cosmeticName(String? value) {
+    variable.cosmeticName = value;
+  }
+
+  VariableInitialization? get variableInitialization => this;
+
+  void set variableInitialization(VariableInitialization? value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  VariableContext get context => variable.context;
+
+  ExpressionVariable get asExpressionVariable => variable;
 }
diff --git a/pkg/kernel/lib/src/ast/variables.dart b/pkg/kernel/lib/src/ast/variables.dart
index 002bb31f..3fc385d 100644
--- a/pkg/kernel/lib/src/ast/variables.dart
+++ b/pkg/kernel/lib/src/ast/variables.dart
@@ -8,19 +8,96 @@
 sealed class Variable extends TreeNode {
   VariableContext get context => parent as VariableContext;
 
-  // CaptureKind get captureKind => context.captureKind;
-
   /// The cosmetic name of the variable from the source code, if exists.
   String? get cosmeticName;
 
+  void set cosmeticName(String? value);
+
+  int flags = 0;
+
   @override
   void toTextInternal(AstPrinter printer) {
     printer.write(printer.getVariableName(this));
   }
 }
 
+/// This is a helper class to enable mixing a mixin into concrete
+/// implementations of the sealed class [ExpressionVariable]. It's not supposed
+/// to be used as a type annotation, but purely for declaring the class
+/// hierarchy.
+abstract interface class IExpressionVariable implements TreeNode {
+  abstract DartType type;
+  abstract String? cosmeticName;
+  abstract VariableInitialization? variableInitialization;
+  abstract Expression? initializer;
+  abstract bool isFinal;
+  abstract bool isConst;
+  abstract bool isLate;
+  abstract bool isInitializingFormal;
+  abstract bool isSynthesized;
+  abstract bool isHoisted;
+  abstract bool hasDeclaredInitializer;
+  abstract bool isCovariantByClass;
+  abstract bool isRequired;
+  abstract bool isCovariantByDeclaration;
+  abstract bool isLowered;
+  abstract bool isWildcard;
+  abstract bool isSuperInitializingFormal;
+  abstract bool isErroneouslyInitialized;
+  bool get isAssignable;
+  ExpressionVariable get asExpressionVariable;
+}
+
 /// The root of the sealed hierarchy of non-type variables.
-sealed class ExpressionVariable extends Variable {}
+sealed class ExpressionVariable extends Variable
+    implements IExpressionVariable {
+  /// Static type of the variable.
+  @override
+  abstract DartType type;
+
+  /// Initialization node for the variable, if available.
+  @override
+  abstract VariableInitialization? variableInitialization;
+
+  /// Derived from [variableInitialization], if available.
+  @override
+  abstract Expression? initializer;
+
+  @override
+  abstract bool isFinal;
+  @override
+  abstract bool isConst;
+  @override
+  abstract bool isLate;
+  @override
+  abstract bool isInitializingFormal;
+  @override
+  abstract bool isSynthesized;
+  @override
+  abstract bool isHoisted;
+  @override
+  abstract bool hasDeclaredInitializer;
+  @override
+  abstract bool isCovariantByClass;
+  @override
+  abstract bool isRequired;
+  @override
+  abstract bool isCovariantByDeclaration;
+  @override
+  abstract bool isLowered;
+  @override
+  abstract bool isWildcard;
+  @override
+  abstract bool isSuperInitializingFormal;
+  @override
+  abstract bool isErroneouslyInitialized;
+
+  @override
+  bool get isAssignable;
+
+  @override
+  ExpressionVariable get asExpressionVariable => this;
+}
 
 /// Local variables. They aren't Statements. A [LocalVariable] is "declared" in
 /// the [VariableContext] it appears in. [VariableInitialization]
@@ -30,125 +107,461 @@
   @override
   String? cosmeticName;
 
-  LocalVariable({this.cosmeticName});
+  @override
+  DartType type;
 
   @override
-  R accept<R>(TreeVisitor<R> v) {
-    // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+  VariableInitialization? variableInitialization;
+
+  LocalVariable({this.cosmeticName, required DartType? type})
+      : type = type ?? const DynamicType();
+
+  static const int FlagFinal = 1 << 0;
+  static const int FlagWildcard = 1 << 1;
+  static const int FlagConst = 1 << 2;
+  static const int FlagLate = 1 << 3;
+  static const int FlagLowered = 1 << 4;
+  static const int FlagHoisted = 1 << 5;
+
+  @override
+  bool get isFinal => flags & FlagFinal != 0;
+
+  @override
+  void set isFinal(bool value) {
+    flags = value ? (flags | FlagFinal) : (flags & ~FlagFinal);
   }
 
   @override
-  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
-    // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
+  bool get isWildcard => flags & FlagWildcard != 0;
+
+  @override
+  void set isWildcard(bool value) {
+    flags = value ? (flags | FlagWildcard) : (flags & ~FlagWildcard);
   }
 
   @override
-  void transformChildren(Transformer v) {
-    // TODO(cstefantsova): Implement transformChildren.
+  bool get isConst => flags & FlagConst != 0;
+
+  @override
+  void set isConst(bool value) {
+    flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
   }
 
   @override
-  void transformOrRemoveChildren(RemovingTransformer v) {
-    // TODO(cstefantsova): Implement transformOrRemoveChildren.
+  bool get isLate => flags & FlagLate != 0;
+
+  @override
+  void set isLate(bool value) {
+    flags = value ? (flags | FlagLate) : (flags & ~FlagLate);
   }
 
   @override
-  void visitChildren(Visitor v) {
-    // TODO(cstefantsova): Implement visitChildren.
+  bool get isLowered => flags & FlagLowered != 0;
+
+  @override
+  void set isLowered(bool value) {
+    flags = value ? (flags | FlagLowered) : (flags & ~FlagLowered);
   }
 
   @override
+  bool get isHoisted => flags & FlagHoisted != 0;
+
+  @override
+  void set isHoisted(bool value) {
+    flags = value ? (flags | FlagHoisted) : (flags & ~FlagHoisted);
+  }
+
+  @override
+  bool get isCovariantByClass {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isCovariantByClass(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isCovariantByDeclaration {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isCovariantByDeclaration(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isErroneouslyInitialized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isErroneouslyInitialized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get hasDeclaredInitializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set hasDeclaredInitializer(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isInitializingFormal {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isInitializingFormal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isRequired {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isRequired(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSuperInitializingFormal {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSuperInitializingFormal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSynthesized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSynthesized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isAssignable {
+    if (isConst) return false;
+    if (isFinal) {
+      if (isLate) return variableInitialization?.initializer == null;
+      return false;
+    }
+    return true;
+  }
+
+  @override
+  R accept<R>(TreeVisitor<R> v) => v.visitLocalVariable(this);
+
+  @override
+  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
+      v.visitLocalVariable(this, arg);
+
+  @override
+  void transformChildren(Transformer v) {}
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {}
+
+  @override
+  void visitChildren(Visitor v) {}
+
+  @override
   String toString() {
     return "LocalVariable(${toStringInternal()})";
   }
+
+  @override
+  void toTextInternal(AstPrinter printer) {
+    printer.writeExpressionVariable(this);
+  }
+
+  @override
+  Expression? get initializer => variableInitialization?.initializer;
+
+  @override
+  void set initializer(Expression? value) {
+    if (value != null && variableInitialization == null) {
+      throw new StateError("Attempt to assign initializer to variable "
+          "without an initialization node.");
+    }
+    variableInitialization!.initializer = value;
+  }
+
+  String? get name => cosmeticName;
 }
 
 /// Abstract parameter class, the parent for positional and named parameters.
-sealed class FunctionParameter extends ExpressionVariable {}
+sealed class FunctionParameter extends ExpressionVariable {
+  /// Function parameters can't be `const` or `late`, so they are assignable if
+  /// they aren't final.
+  @override
+  bool get isAssignable => !isFinal;
+
+  /// Function parameters don't have initializers, only default values.
+  @override
+  VariableInitialization? get variableInitialization => null;
+
+  @override
+  void set variableInitialization(VariableInitialization? value) {}
+
+  static const int FlagFinal = 1 << 0;
+  static const int FlagWildcard = 1 << 1;
+  static const int FlagCovariantByClass = 1 << 2;
+  static const int FlagCovariantByDeclaration = 1 << 3;
+  static const int FlagInitializingFormal = 1 << 4;
+  static const int FlagSuperInitializingFormal = 1 << 5;
+  static const int FlagRequired = 1 << 6;
+
+  @override
+  bool get isFinal => flags & FlagFinal != 0;
+
+  @override
+  void set isFinal(bool value) {
+    flags = value ? (flags | FlagFinal) : (flags & ~FlagFinal);
+  }
+
+  @override
+  bool get isWildcard => flags & FlagWildcard != 0;
+
+  @override
+  void set isWildcard(bool value) {
+    flags = value ? (flags | FlagWildcard) : (flags & ~FlagWildcard);
+  }
+
+  @override
+  bool get isCovariantByClass => flags & FlagCovariantByClass != 0;
+
+  @override
+  void set isCovariantByClass(bool value) {
+    flags = value
+        ? (flags | FlagCovariantByClass)
+        : (flags & ~FlagCovariantByClass);
+  }
+
+  @override
+  bool get isCovariantByDeclaration => flags & FlagCovariantByDeclaration != 0;
+
+  @override
+  void set isCovariantByDeclaration(bool value) {
+    flags = value
+        ? (flags | FlagCovariantByDeclaration)
+        : (flags & ~FlagCovariantByDeclaration);
+  }
+
+  @override
+  bool get isInitializingFormal => flags & FlagInitializingFormal != 0;
+
+  @override
+  void set isInitializingFormal(bool value) {
+    flags = value
+        ? (flags | FlagInitializingFormal)
+        : (flags & ~FlagInitializingFormal);
+  }
+
+  @override
+  bool get isSuperInitializingFormal =>
+      flags & FlagSuperInitializingFormal != 0;
+
+  @override
+  void set isSuperInitializingFormal(bool value) {
+    flags = value
+        ? (flags | FlagSuperInitializingFormal)
+        : (flags & ~FlagSuperInitializingFormal);
+  }
+
+  @override
+  bool get isRequired => flags & FlagRequired != 0;
+
+  @override
+  void set isRequired(bool value) {
+    flags = value ? (flags | FlagRequired) : (flags & ~FlagRequired);
+  }
+
+  @override
+  bool get isErroneouslyInitialized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isErroneouslyInitialized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get hasDeclaredInitializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set hasDeclaredInitializer(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSynthesized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSynthesized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isConst {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isConst(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isLate {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isLate(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isHoisted {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isHoisted(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isLowered {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isLowered(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+}
 
 /// Positional parameters. The [cosmeticName] field is optional and doesn't
 /// affect the runtime semantics of the program.
 class PositionalParameter extends FunctionParameter {
   @override
-  final String? cosmeticName;
-
-  PositionalParameter(this.cosmeticName);
+  String? cosmeticName;
 
   @override
-  R accept<R>(TreeVisitor<R> v) {
-    // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+  DartType type;
+
+  PositionalParameter({this.cosmeticName, required this.type});
+
+  @override
+  bool get isRequired {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
-    // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
+  void set isRequired(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  void transformChildren(Transformer v) {
-    // TODO(cstefantsova): Implement transformChildren.
-  }
+  R accept<R>(TreeVisitor<R> v) => v.visitPositionalParameter(this);
 
   @override
-  void transformOrRemoveChildren(RemovingTransformer v) {
-    // TODO(cstefantsova): Implement transformOrRemoveChildren.
-  }
+  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
+      v.visitPositionalParameter(this, arg);
 
   @override
-  void visitChildren(Visitor v) {
-    // TODO(cstefantsova): Implement visitChildren.
-  }
+  void transformChildren(Transformer v) {}
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {}
+
+  @override
+  void visitChildren(Visitor v) {}
 
   @override
   String toString() {
     return "PositionalParameter(${toStringInternal()})";
   }
+
+  @override
+  Expression? get initializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set initializer(Expression? value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  String? get name => cosmeticName;
 }
 
 /// Named parameters. The [name] field is mandatory.
 class NamedParameter extends FunctionParameter {
-  final String name;
+  String name;
 
   @override
   String get cosmeticName => name;
 
-  NamedParameter({required this.name});
-
   @override
-  R accept<R>(TreeVisitor<R> v) {
-    // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+  void set cosmeticName(String? value) {
+    name = value!;
   }
 
   @override
-  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
-    // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
-  }
+  DartType type;
+
+  NamedParameter({required this.name, required this.type});
 
   @override
-  void transformChildren(Transformer v) {
-    // TODO(cstefantsova): Implement transformChildren.
-  }
+  R accept<R>(TreeVisitor<R> v) => v.visitNamedParameter(this);
 
   @override
-  void transformOrRemoveChildren(RemovingTransformer v) {
-    // TODO(cstefantsova): Implement transformOrRemoveChildren.
-  }
+  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
+      v.visitNamedParameter(this, arg);
 
   @override
-  void visitChildren(Visitor v) {
-    // TODO(cstefantsova): Implement visitChildren.
-  }
+  void transformChildren(Transformer v) {}
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {}
+
+  @override
+  void visitChildren(Visitor v) {}
 
   @override
   String toString() {
     return "NamedParameter(${toStringInternal()})";
   }
+
+  @override
+  Expression? get initializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set initializer(Expression? value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
 }
 
 /// The variable storage for `this`.
@@ -156,39 +569,195 @@
   @override
   String get cosmeticName => "this";
 
-  ThisVariable();
+  @override
+  void set cosmeticName(String? value) {}
 
   @override
-  R accept<R>(TreeVisitor<R> v) {
-    // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+  VariableInitialization? get variableInitialization => null;
+
+  @override
+  void set variableInitialization(VariableInitialization? value) {}
+
+  @override
+  DartType type;
+
+  ThisVariable({required this.type});
+
+  @override
+  bool get isFinal {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
-    // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
+  void set isFinal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  void transformChildren(Transformer v) {
-    // TODO(cstefantsova): Implement transformChildren.
+  bool get isWildcard {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  void transformOrRemoveChildren(RemovingTransformer v) {
-    // TODO(cstefantsova): Implement transformOrRemoveChildren.
+  void set isWildcard(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  void visitChildren(Visitor v) {
-    // TODO(cstefantsova): Implement visitChildren.
+  bool get isCovariantByClass {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
+  void set isCovariantByClass(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isCovariantByDeclaration {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isCovariantByDeclaration(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isInitializingFormal {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isInitializingFormal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSuperInitializingFormal {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSuperInitializingFormal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isErroneouslyInitialized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isErroneouslyInitialized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get hasDeclaredInitializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set hasDeclaredInitializer(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isRequired {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isRequired(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSynthesized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSynthesized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isConst {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isConst(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isLate {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isLate(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isHoisted {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isHoisted(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isLowered {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isLowered(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  R accept<R>(TreeVisitor<R> v) => v.visitThisVariable(this);
+
+  @override
+  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
+      v.visitThisVariable(this, arg);
+
+  @override
+  void transformChildren(Transformer v) {}
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {}
+
+  @override
+  void visitChildren(Visitor v) {}
+
+  @override
   String toString() {
     return "ThisVariable(${toStringInternal()})";
   }
+
+  @override
+  bool get isAssignable => false;
+
+  @override
+  Expression? get initializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set initializer(Expression? value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  String? get name => cosmeticName;
 }
 
 /// A variable introduced during desugaring. Such variables don't correspond to
@@ -197,39 +766,189 @@
   @override
   String? cosmeticName;
 
-  SyntheticVariable({this.cosmeticName});
+  @override
+  DartType type;
 
   @override
-  R accept<R>(TreeVisitor<R> v) {
-    // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+  VariableInitialization? variableInitialization;
+
+  SyntheticVariable({this.cosmeticName, required this.type});
+
+  static const int FlagFinal = 1 << 0;
+  static const int FlagLowered = 1 << 1;
+  static const int FlagHoisted = 1 << 2;
+
+  @override
+  bool get isFinal => flags & FlagFinal != 0;
+
+  @override
+  void set isFinal(bool value) {
+    flags = value ? (flags | FlagFinal) : (flags & ~FlagFinal);
   }
 
   @override
-  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
-    // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
+  bool get isLowered => flags & FlagLowered != 0;
+
+  @override
+  void set isLowered(bool value) {
+    flags = value ? (flags | FlagLowered) : (flags & ~FlagLowered);
   }
 
   @override
-  void transformChildren(Transformer v) {
-    // TODO(cstefantsova): Implement transformChildren.
+  bool get isHoisted => flags & FlagHoisted != 0;
+
+  @override
+  void set isHoisted(bool value) {
+    flags = value ? (flags | FlagHoisted) : (flags & ~FlagHoisted);
   }
 
   @override
-  void transformOrRemoveChildren(RemovingTransformer v) {
-    // TODO(cstefantsova): Implement transformOrRemoveChildren.
+  bool get isCovariantByClass {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
-  void visitChildren(Visitor v) {
-    // TODO(cstefantsova): Implement visitChildren.
+  void set isCovariantByClass(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
   }
 
   @override
+  bool get isCovariantByDeclaration {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isCovariantByDeclaration(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isErroneouslyInitialized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isErroneouslyInitialized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get hasDeclaredInitializer {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set hasDeclaredInitializer(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isInitializingFormal {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isInitializingFormal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isRequired {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isRequired(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSuperInitializingFormal {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSuperInitializingFormal(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isSynthesized {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isSynthesized(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isConst {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isConst(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isLate {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isLate(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  bool get isWildcard {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  void set isWildcard(bool value) {
+    throw new UnsupportedError("${this.runtimeType}");
+  }
+
+  @override
+  R accept<R>(TreeVisitor<R> v) => v.visitSyntheticVariable(this);
+
+  @override
+  R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
+      v.visitSyntheticVariable(this, arg);
+
+  @override
+  void transformChildren(Transformer v) {}
+
+  @override
+  void transformOrRemoveChildren(RemovingTransformer v) {}
+
+  @override
+  void visitChildren(Visitor v) {}
+
+  @override
   String toString() {
     return "SyntheticVariable(${toStringInternal()})";
   }
+
+  @override
+  bool get isAssignable => !isConst && !isFinal;
+
+  @override
+  Expression? get initializer => variableInitialization?.initializer;
+
+  @override
+  void set initializer(Expression? value) {
+    if (value != null && variableInitialization == null) {
+      throw new StateError("Attempt to assign initializer to variable "
+          "without an initialization node.");
+    }
+    variableInitialization!.initializer = value;
+  }
+
+  String? get name => cosmeticName;
 }
 
 /// The enum reflecting the kind of a variable context. A context is
@@ -253,13 +972,13 @@
   @override
   R accept<R>(TreeVisitor<R> v) {
     // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+    throw new UnimplementedError();
   }
 
   @override
   R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
     // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
+    throw new UnimplementedError();
   }
 
   @override
@@ -303,18 +1022,18 @@
 class Scope extends TreeNode {
   final List<VariableContext> contexts;
 
-  Scope(this.contexts);
+  Scope({required this.contexts});
 
   @override
   R accept<R>(TreeVisitor<R> v) {
     // TODO(cstefantsova): Implement accept.
-    throw UnimplementedError();
+    throw new UnimplementedError();
   }
 
   @override
   R accept1<R, A>(TreeVisitor1<R, A> v, A arg) {
     // TODO(cstefantsova): Implement accept1.
-    throw UnimplementedError();
+    throw new UnimplementedError();
   }
 
   @override
diff --git a/pkg/kernel/lib/src/coverage.dart b/pkg/kernel/lib/src/coverage.dart
index 95493df..d8b66a2 100644
--- a/pkg/kernel/lib/src/coverage.dart
+++ b/pkg/kernel/lib/src/coverage.dart
@@ -963,6 +963,12 @@
   }
 
   @override
+  void visitVariableInitialization(VariableInitialization node) {
+    visited.add(StatementKind.VariableInitialization);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitVariableStatement(VariableStatement node) {
     visited.add(StatementKind.VariableStatement);
     node.visitChildren(this);
@@ -975,12 +981,6 @@
   }
 
   @override
-  void visitVariableInitialization(VariableInitialization node) {
-    visited.add(StatementKind.VariableInitialization);
-    node.visitChildren(this);
-  }
-
-  @override
   void visitSwitchExpressionCase(SwitchExpressionCase node) {
     visited.add(NodeKind.SwitchExpressionCase);
     node.visitChildren(this);
@@ -993,18 +993,6 @@
   }
 
   @override
-  void visitNominalParameter(NominalParameter node) {
-    visited.add(NodeKind.NominalParameter);
-    node.visitChildren(this);
-  }
-
-  @override
-  void visitTypeVariable(TypeVariable node) {
-    visited.add(NodeKind.TypeVariable);
-    node.visitChildren(this);
-  }
-
-  @override
   void visitLocalVariable(LocalVariable node) {
     visited.add(NodeKind.LocalVariable);
     node.visitChildren(this);
@@ -1035,6 +1023,18 @@
   }
 
   @override
+  void visitTypeVariable(TypeVariable node) {
+    visited.add(NodeKind.TypeVariable);
+    node.visitChildren(this);
+  }
+
+  @override
+  void visitNominalParameter(NominalParameter node) {
+    visited.add(NodeKind.NominalParameter);
+    node.visitChildren(this);
+  }
+
+  @override
   void visitVariableContext(VariableContext node) {
     visited.add(NodeKind.VariableContext);
     node.visitChildren(this);
diff --git a/pkg/kernel/lib/src/equivalence.dart b/pkg/kernel/lib/src/equivalence.dart
index a62e3c0..b43c313 100644
--- a/pkg/kernel/lib/src/equivalence.dart
+++ b/pkg/kernel/lib/src/equivalence.dart
@@ -826,6 +826,11 @@
   }
 
   @override
+  bool visitVariableInitialization(VariableInitialization node, Node other) {
+    return strategy.checkVariableInitialization(this, node, other);
+  }
+
+  @override
   bool visitVariableStatement(VariableStatement node, Node other) {
     return strategy.checkVariableStatement(this, node, other);
   }
@@ -836,11 +841,6 @@
   }
 
   @override
-  bool visitVariableInitialization(VariableInitialization node, Node other) {
-    return strategy.checkVariableInitialization(this, node, other);
-  }
-
-  @override
   bool visitSwitchExpressionCase(SwitchExpressionCase node, Node other) {
     return strategy.checkSwitchExpressionCase(this, node, other);
   }
@@ -851,16 +851,6 @@
   }
 
   @override
-  bool visitNominalParameter(NominalParameter node, Node other) {
-    return strategy.checkNominalParameter(this, node, other);
-  }
-
-  @override
-  bool visitTypeVariable(TypeVariable node, Node other) {
-    return strategy.checkTypeVariable(this, node, other);
-  }
-
-  @override
   bool visitLocalVariable(LocalVariable node, Node other) {
     return strategy.checkLocalVariable(this, node, other);
   }
@@ -886,6 +876,16 @@
   }
 
   @override
+  bool visitTypeVariable(TypeVariable node, Node other) {
+    return strategy.checkTypeVariable(this, node, other);
+  }
+
+  @override
+  bool visitNominalParameter(NominalParameter node, Node other) {
+    return strategy.checkNominalParameter(this, node, other);
+  }
+
+  @override
   bool visitVariableContext(VariableContext node, Node other) {
     return strategy.checkVariableContext(this, node, other);
   }
@@ -2380,7 +2380,7 @@
     if (other is! VariableGet) return false;
     visitor.pushNodeState(node, other);
     bool result = true;
-    if (!checkVariableGet_variable(visitor, node, other)) {
+    if (!checkVariableGet_expressionVariable(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
     if (!checkVariableGet_promotedType(visitor, node, other)) {
@@ -2400,7 +2400,7 @@
     if (other is! VariableSet) return false;
     visitor.pushNodeState(node, other);
     bool result = true;
-    if (!checkVariableSet_variable(visitor, node, other)) {
+    if (!checkVariableSet_expressionVariable(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
     if (!checkVariableSet_value(visitor, node, other)) {
@@ -4013,9 +4013,6 @@
     if (other is! AuxiliaryInitializer) return false;
     visitor.pushNodeState(node, other);
     bool result = true;
-    if (!checkAuxiliaryInitializer_isSynthetic(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
     if (!checkAuxiliaryInitializer_fileOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4030,7 +4027,7 @@
     if (other is! InvalidInitializer) return false;
     visitor.pushNodeState(node, other);
     bool result = true;
-    if (!checkInvalidInitializer_isSynthetic(visitor, node, other)) {
+    if (!checkInvalidInitializer_message(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
     if (!checkInvalidInitializer_fileOffset(visitor, node, other)) {
@@ -4099,9 +4096,6 @@
     if (!checkRedirectingInitializer_arguments(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
-    if (!checkRedirectingInitializer_isSynthetic(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
     if (!checkRedirectingInitializer_fileOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4119,9 +4113,6 @@
     if (!checkLocalInitializer_variable(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
-    if (!checkLocalInitializer_isSynthetic(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
     if (!checkLocalInitializer_fileOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4139,9 +4130,6 @@
     if (!checkAssertInitializer_statement(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
-    if (!checkAssertInitializer_isSynthetic(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
     if (!checkAssertInitializer_fileOffset(visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
@@ -4504,7 +4492,8 @@
     if (other is! AssignedVariablePattern) return false;
     visitor.pushNodeState(node, other);
     bool result = true;
-    if (!checkAssignedVariablePattern_variable(visitor, node, other)) {
+    if (!checkAssignedVariablePattern_expressionVariable(
+        visitor, node, other)) {
       result = visitor.resultOnInequivalence;
     }
     if (!checkAssignedVariablePattern_matchedValueType(visitor, node, other)) {
@@ -5316,6 +5305,38 @@
     return result;
   }
 
+  bool checkVariableInitialization(
+      EquivalenceVisitor visitor, VariableInitialization? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! VariableInitialization) return false;
+    if (other is! VariableInitialization) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkVariableInitialization_variable(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkVariableInitialization_initializer(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkVariableInitialization_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkVariableInitialization_annotations(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkVariableInitialization_binaryOffsetNoTag(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkVariableInitialization_fileEqualsOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkVariableInitialization_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
   bool checkVariableStatement(
       EquivalenceVisitor visitor, VariableStatement? node, Object? other) {
     if (identical(node, other)) return true;
@@ -5371,26 +5392,6 @@
     return result;
   }
 
-  bool checkVariableInitialization(
-      EquivalenceVisitor visitor, VariableInitialization? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! VariableInitialization) return false;
-    if (other is! VariableInitialization) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkVariableInitialization_variable(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkVariableInitialization_initializer(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkVariableInitialization_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
   bool checkSwitchExpressionCase(
       EquivalenceVisitor visitor, SwitchExpressionCase? node, Object? other) {
     if (identical(node, other)) return true;
@@ -5439,6 +5440,147 @@
     return result;
   }
 
+  bool checkLocalVariable(
+      EquivalenceVisitor visitor, LocalVariable? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! LocalVariable) return false;
+    if (other is! LocalVariable) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkLocalVariable_cosmeticName(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkLocalVariable_type(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkLocalVariable_variableInitialization(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkLocalVariable_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkLocalVariable_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
+  bool checkPositionalParameter(
+      EquivalenceVisitor visitor, PositionalParameter? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! PositionalParameter) return false;
+    if (other is! PositionalParameter) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkPositionalParameter_cosmeticName(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkPositionalParameter_type(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkPositionalParameter_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkPositionalParameter_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
+  bool checkNamedParameter(
+      EquivalenceVisitor visitor, NamedParameter? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! NamedParameter) return false;
+    if (other is! NamedParameter) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkNamedParameter_name(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkNamedParameter_type(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkNamedParameter_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkNamedParameter_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
+  bool checkThisVariable(
+      EquivalenceVisitor visitor, ThisVariable? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! ThisVariable) return false;
+    if (other is! ThisVariable) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkThisVariable_type(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkThisVariable_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkThisVariable_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
+  bool checkSyntheticVariable(
+      EquivalenceVisitor visitor, SyntheticVariable? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! SyntheticVariable) return false;
+    if (other is! SyntheticVariable) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkSyntheticVariable_cosmeticName(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkSyntheticVariable_type(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkSyntheticVariable_variableInitialization(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkSyntheticVariable_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkSyntheticVariable_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
+  bool checkTypeVariable(
+      EquivalenceVisitor visitor, TypeVariable? node, Object? other) {
+    if (identical(node, other)) return true;
+    if (node is! TypeVariable) return false;
+    if (other is! TypeVariable) return false;
+    visitor.pushNodeState(node, other);
+    bool result = true;
+    if (!checkTypeVariable_cosmeticName(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkTypeVariable_parameter(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkTypeVariable_flags(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    if (!checkTypeVariable_fileOffset(visitor, node, other)) {
+      result = visitor.resultOnInequivalence;
+    }
+    visitor.popState();
+    return result;
+  }
+
   bool checkNominalParameter(
       EquivalenceVisitor visitor, NominalParameter? node, Object? other) {
     if (identical(node, other)) return true;
@@ -5471,108 +5613,6 @@
     return result;
   }
 
-  bool checkTypeVariable(
-      EquivalenceVisitor visitor, TypeVariable? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! TypeVariable) return false;
-    if (other is! TypeVariable) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkTypeVariable_cosmeticName(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkTypeVariable_parameter(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkTypeVariable_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
-  bool checkLocalVariable(
-      EquivalenceVisitor visitor, LocalVariable? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! LocalVariable) return false;
-    if (other is! LocalVariable) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkLocalVariable_cosmeticName(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkLocalVariable_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
-  bool checkPositionalParameter(
-      EquivalenceVisitor visitor, PositionalParameter? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! PositionalParameter) return false;
-    if (other is! PositionalParameter) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkPositionalParameter_cosmeticName(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkPositionalParameter_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
-  bool checkNamedParameter(
-      EquivalenceVisitor visitor, NamedParameter? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! NamedParameter) return false;
-    if (other is! NamedParameter) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkNamedParameter_name(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkNamedParameter_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
-  bool checkThisVariable(
-      EquivalenceVisitor visitor, ThisVariable? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! ThisVariable) return false;
-    if (other is! ThisVariable) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkThisVariable_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
-  bool checkSyntheticVariable(
-      EquivalenceVisitor visitor, SyntheticVariable? node, Object? other) {
-    if (identical(node, other)) return true;
-    if (node is! SyntheticVariable) return false;
-    if (other is! SyntheticVariable) return false;
-    visitor.pushNodeState(node, other);
-    bool result = true;
-    if (!checkSyntheticVariable_cosmeticName(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    if (!checkSyntheticVariable_fileOffset(visitor, node, other)) {
-      result = visitor.resultOnInequivalence;
-    }
-    visitor.popState();
-    return result;
-  }
-
   bool checkVariableContext(
       EquivalenceVisitor visitor, VariableContext? node, Object? other) {
     if (identical(node, other)) return true;
@@ -6934,9 +6974,10 @@
     return checkExpression_fileOffset(visitor, node, other);
   }
 
-  bool checkVariableGet_variable(
+  bool checkVariableGet_expressionVariable(
       EquivalenceVisitor visitor, VariableGet node, VariableGet other) {
-    return visitor.checkDeclarations(node.variable, other.variable, 'variable');
+    return visitor.checkNodes(node.expressionVariable, other.expressionVariable,
+        'expressionVariable');
   }
 
   bool checkVariableGet_promotedType(
@@ -6950,9 +6991,10 @@
     return checkExpression_fileOffset(visitor, node, other);
   }
 
-  bool checkVariableSet_variable(
+  bool checkVariableSet_expressionVariable(
       EquivalenceVisitor visitor, VariableSet node, VariableSet other) {
-    return visitor.checkDeclarations(node.variable, other.variable, 'variable');
+    return visitor.checkNodes(node.expressionVariable, other.expressionVariable,
+        'expressionVariable');
   }
 
   bool checkVariableSet_value(
@@ -8386,17 +8428,6 @@
     return checkTreeNode_fileOffset(visitor, node, other);
   }
 
-  bool checkInitializer_isSynthetic(
-      EquivalenceVisitor visitor, Initializer node, Initializer other) {
-    return visitor.checkValues(
-        node.isSynthetic, other.isSynthetic, 'isSynthetic');
-  }
-
-  bool checkAuxiliaryInitializer_isSynthetic(EquivalenceVisitor visitor,
-      AuxiliaryInitializer node, AuxiliaryInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
-  }
-
   bool checkInitializer_fileOffset(
       EquivalenceVisitor visitor, Initializer node, Initializer other) {
     return checkTreeNode_fileOffset(visitor, node, other);
@@ -8407,9 +8438,9 @@
     return checkInitializer_fileOffset(visitor, node, other);
   }
 
-  bool checkInvalidInitializer_isSynthetic(EquivalenceVisitor visitor,
+  bool checkInvalidInitializer_message(EquivalenceVisitor visitor,
       InvalidInitializer node, InvalidInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
+    return visitor.checkValues(node.message, other.message, 'message');
   }
 
   bool checkInvalidInitializer_fileOffset(EquivalenceVisitor visitor,
@@ -8430,7 +8461,8 @@
 
   bool checkFieldInitializer_isSynthetic(EquivalenceVisitor visitor,
       FieldInitializer node, FieldInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
+    return visitor.checkValues(
+        node.isSynthetic, other.isSynthetic, 'isSynthetic');
   }
 
   bool checkFieldInitializer_fileOffset(EquivalenceVisitor visitor,
@@ -8451,7 +8483,8 @@
 
   bool checkSuperInitializer_isSynthetic(EquivalenceVisitor visitor,
       SuperInitializer node, SuperInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
+    return visitor.checkValues(
+        node.isSynthetic, other.isSynthetic, 'isSynthetic');
   }
 
   bool checkSuperInitializer_fileOffset(EquivalenceVisitor visitor,
@@ -8470,11 +8503,6 @@
     return visitor.checkNodes(node.arguments, other.arguments, 'arguments');
   }
 
-  bool checkRedirectingInitializer_isSynthetic(EquivalenceVisitor visitor,
-      RedirectingInitializer node, RedirectingInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
-  }
-
   bool checkRedirectingInitializer_fileOffset(EquivalenceVisitor visitor,
       RedirectingInitializer node, RedirectingInitializer other) {
     return checkInitializer_fileOffset(visitor, node, other);
@@ -8485,11 +8513,6 @@
     return visitor.checkNodes(node.variable, other.variable, 'variable');
   }
 
-  bool checkLocalInitializer_isSynthetic(EquivalenceVisitor visitor,
-      LocalInitializer node, LocalInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
-  }
-
   bool checkLocalInitializer_fileOffset(EquivalenceVisitor visitor,
       LocalInitializer node, LocalInitializer other) {
     return checkInitializer_fileOffset(visitor, node, other);
@@ -8500,11 +8523,6 @@
     return visitor.checkNodes(node.statement, other.statement, 'statement');
   }
 
-  bool checkAssertInitializer_isSynthetic(EquivalenceVisitor visitor,
-      AssertInitializer node, AssertInitializer other) {
-    return checkInitializer_isSynthetic(visitor, node, other);
-  }
-
   bool checkAssertInitializer_fileOffset(EquivalenceVisitor visitor,
       AssertInitializer node, AssertInitializer other) {
     return checkInitializer_fileOffset(visitor, node, other);
@@ -8889,9 +8907,12 @@
     return checkPattern_fileOffset(visitor, node, other);
   }
 
-  bool checkAssignedVariablePattern_variable(EquivalenceVisitor visitor,
-      AssignedVariablePattern node, AssignedVariablePattern other) {
-    return visitor.checkDeclarations(node.variable, other.variable, 'variable');
+  bool checkAssignedVariablePattern_expressionVariable(
+      EquivalenceVisitor visitor,
+      AssignedVariablePattern node,
+      AssignedVariablePattern other) {
+    return visitor.checkNodes(node.expressionVariable, other.expressionVariable,
+        'expressionVariable');
   }
 
   bool checkAssignedVariablePattern_matchedValueType(EquivalenceVisitor visitor,
@@ -9680,6 +9701,45 @@
     return checkStatement_fileOffset(visitor, node, other);
   }
 
+  bool checkVariableInitialization_variable(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return visitor.checkNodes(node.variable, other.variable, 'variable');
+  }
+
+  bool checkVariableInitialization_initializer(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return visitor.checkNodes(
+        node.initializer, other.initializer, 'initializer');
+  }
+
+  bool checkVariableInitialization_flags(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return visitor.checkValues(node.flags, other.flags, 'flags');
+  }
+
+  bool checkVariableInitialization_annotations(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return visitor.checkLists(
+        node.annotations, other.annotations, visitor.checkNodes, 'annotations');
+  }
+
+  bool checkVariableInitialization_binaryOffsetNoTag(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return visitor.checkValues(
+        node.binaryOffsetNoTag, other.binaryOffsetNoTag, 'binaryOffsetNoTag');
+  }
+
+  bool checkVariableInitialization_fileEqualsOffset(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return visitor.checkValues(
+        node.fileEqualsOffset, other.fileEqualsOffset, 'fileEqualsOffset');
+  }
+
+  bool checkVariableInitialization_fileOffset(EquivalenceVisitor visitor,
+      VariableInitialization node, VariableInitialization other) {
+    return checkStatement_fileOffset(visitor, node, other);
+  }
+
   bool checkVariableStatement_fileEqualsOffset(EquivalenceVisitor visitor,
       VariableStatement node, VariableStatement other) {
     return visitor.checkValues(
@@ -9739,22 +9799,6 @@
     return checkStatement_fileOffset(visitor, node, other);
   }
 
-  bool checkVariableInitialization_variable(EquivalenceVisitor visitor,
-      VariableInitialization node, VariableInitialization other) {
-    return visitor.checkNodes(node.variable, other.variable, 'variable');
-  }
-
-  bool checkVariableInitialization_initializer(EquivalenceVisitor visitor,
-      VariableInitialization node, VariableInitialization other) {
-    return visitor.checkNodes(
-        node.initializer, other.initializer, 'initializer');
-  }
-
-  bool checkVariableInitialization_fileOffset(EquivalenceVisitor visitor,
-      VariableInitialization node, VariableInitialization other) {
-    return checkStatement_fileOffset(visitor, node, other);
-  }
-
   bool checkSwitchExpressionCase_patternGuard(EquivalenceVisitor visitor,
       SwitchExpressionCase node, SwitchExpressionCase other) {
     return visitor.checkNodes(
@@ -9798,6 +9842,168 @@
     return checkTreeNode_fileOffset(visitor, node, other);
   }
 
+  bool checkLocalVariable_cosmeticName(
+      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
+    return visitor.checkValues(
+        node.cosmeticName, other.cosmeticName, 'cosmeticName');
+  }
+
+  bool checkLocalVariable_type(
+      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
+    return visitor.checkNodes(node.type, other.type, 'type');
+  }
+
+  bool checkLocalVariable_variableInitialization(
+      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
+    return visitor.checkNodes(node.variableInitialization,
+        other.variableInitialization, 'variableInitialization');
+  }
+
+  bool checkVariable_flags(
+      EquivalenceVisitor visitor, Variable node, Variable other) {
+    return visitor.checkValues(node.flags, other.flags, 'flags');
+  }
+
+  bool checkExpressionVariable_flags(EquivalenceVisitor visitor,
+      ExpressionVariable node, ExpressionVariable other) {
+    return checkVariable_flags(visitor, node, other);
+  }
+
+  bool checkLocalVariable_flags(
+      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
+    return checkExpressionVariable_flags(visitor, node, other);
+  }
+
+  bool checkVariable_fileOffset(
+      EquivalenceVisitor visitor, Variable node, Variable other) {
+    return checkTreeNode_fileOffset(visitor, node, other);
+  }
+
+  bool checkExpressionVariable_fileOffset(EquivalenceVisitor visitor,
+      ExpressionVariable node, ExpressionVariable other) {
+    return checkVariable_fileOffset(visitor, node, other);
+  }
+
+  bool checkLocalVariable_fileOffset(
+      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
+    return checkExpressionVariable_fileOffset(visitor, node, other);
+  }
+
+  bool checkPositionalParameter_cosmeticName(EquivalenceVisitor visitor,
+      PositionalParameter node, PositionalParameter other) {
+    return visitor.checkValues(
+        node.cosmeticName, other.cosmeticName, 'cosmeticName');
+  }
+
+  bool checkPositionalParameter_type(EquivalenceVisitor visitor,
+      PositionalParameter node, PositionalParameter other) {
+    return visitor.checkNodes(node.type, other.type, 'type');
+  }
+
+  bool checkFunctionParameter_flags(EquivalenceVisitor visitor,
+      FunctionParameter node, FunctionParameter other) {
+    return checkExpressionVariable_flags(visitor, node, other);
+  }
+
+  bool checkPositionalParameter_flags(EquivalenceVisitor visitor,
+      PositionalParameter node, PositionalParameter other) {
+    return checkFunctionParameter_flags(visitor, node, other);
+  }
+
+  bool checkFunctionParameter_fileOffset(EquivalenceVisitor visitor,
+      FunctionParameter node, FunctionParameter other) {
+    return checkExpressionVariable_fileOffset(visitor, node, other);
+  }
+
+  bool checkPositionalParameter_fileOffset(EquivalenceVisitor visitor,
+      PositionalParameter node, PositionalParameter other) {
+    return checkFunctionParameter_fileOffset(visitor, node, other);
+  }
+
+  bool checkNamedParameter_name(
+      EquivalenceVisitor visitor, NamedParameter node, NamedParameter other) {
+    return visitor.checkValues(node.name, other.name, 'name');
+  }
+
+  bool checkNamedParameter_type(
+      EquivalenceVisitor visitor, NamedParameter node, NamedParameter other) {
+    return visitor.checkNodes(node.type, other.type, 'type');
+  }
+
+  bool checkNamedParameter_flags(
+      EquivalenceVisitor visitor, NamedParameter node, NamedParameter other) {
+    return checkFunctionParameter_flags(visitor, node, other);
+  }
+
+  bool checkNamedParameter_fileOffset(
+      EquivalenceVisitor visitor, NamedParameter node, NamedParameter other) {
+    return checkFunctionParameter_fileOffset(visitor, node, other);
+  }
+
+  bool checkThisVariable_type(
+      EquivalenceVisitor visitor, ThisVariable node, ThisVariable other) {
+    return visitor.checkNodes(node.type, other.type, 'type');
+  }
+
+  bool checkThisVariable_flags(
+      EquivalenceVisitor visitor, ThisVariable node, ThisVariable other) {
+    return checkExpressionVariable_flags(visitor, node, other);
+  }
+
+  bool checkThisVariable_fileOffset(
+      EquivalenceVisitor visitor, ThisVariable node, ThisVariable other) {
+    return checkExpressionVariable_fileOffset(visitor, node, other);
+  }
+
+  bool checkSyntheticVariable_cosmeticName(EquivalenceVisitor visitor,
+      SyntheticVariable node, SyntheticVariable other) {
+    return visitor.checkValues(
+        node.cosmeticName, other.cosmeticName, 'cosmeticName');
+  }
+
+  bool checkSyntheticVariable_type(EquivalenceVisitor visitor,
+      SyntheticVariable node, SyntheticVariable other) {
+    return visitor.checkNodes(node.type, other.type, 'type');
+  }
+
+  bool checkSyntheticVariable_variableInitialization(EquivalenceVisitor visitor,
+      SyntheticVariable node, SyntheticVariable other) {
+    return visitor.checkNodes(node.variableInitialization,
+        other.variableInitialization, 'variableInitialization');
+  }
+
+  bool checkSyntheticVariable_flags(EquivalenceVisitor visitor,
+      SyntheticVariable node, SyntheticVariable other) {
+    return checkExpressionVariable_flags(visitor, node, other);
+  }
+
+  bool checkSyntheticVariable_fileOffset(EquivalenceVisitor visitor,
+      SyntheticVariable node, SyntheticVariable other) {
+    return checkExpressionVariable_fileOffset(visitor, node, other);
+  }
+
+  bool checkTypeVariable_cosmeticName(
+      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
+    return visitor.checkValues(
+        node.cosmeticName, other.cosmeticName, 'cosmeticName');
+  }
+
+  bool checkTypeVariable_parameter(
+      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
+    return visitor.checkDeclarations(
+        node.parameter, other.parameter, 'parameter');
+  }
+
+  bool checkTypeVariable_flags(
+      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
+    return checkVariable_flags(visitor, node, other);
+  }
+
+  bool checkTypeVariable_fileOffset(
+      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
+    return checkVariable_fileOffset(visitor, node, other);
+  }
+
   bool checkNominalParameter_flags(EquivalenceVisitor visitor,
       NominalParameter node, NominalParameter other) {
     return visitor.checkValues(node.flags, other.flags, 'flags');
@@ -9835,86 +10041,6 @@
     return checkTreeNode_fileOffset(visitor, node, other);
   }
 
-  bool checkTypeVariable_cosmeticName(
-      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
-    return visitor.checkValues(
-        node.cosmeticName, other.cosmeticName, 'cosmeticName');
-  }
-
-  bool checkTypeVariable_parameter(
-      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
-    return visitor.checkDeclarations(
-        node.parameter, other.parameter, 'parameter');
-  }
-
-  bool checkVariable_fileOffset(
-      EquivalenceVisitor visitor, Variable node, Variable other) {
-    return checkTreeNode_fileOffset(visitor, node, other);
-  }
-
-  bool checkTypeVariable_fileOffset(
-      EquivalenceVisitor visitor, TypeVariable node, TypeVariable other) {
-    return checkVariable_fileOffset(visitor, node, other);
-  }
-
-  bool checkLocalVariable_cosmeticName(
-      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
-    return visitor.checkValues(
-        node.cosmeticName, other.cosmeticName, 'cosmeticName');
-  }
-
-  bool checkExpressionVariable_fileOffset(EquivalenceVisitor visitor,
-      ExpressionVariable node, ExpressionVariable other) {
-    return checkVariable_fileOffset(visitor, node, other);
-  }
-
-  bool checkLocalVariable_fileOffset(
-      EquivalenceVisitor visitor, LocalVariable node, LocalVariable other) {
-    return checkExpressionVariable_fileOffset(visitor, node, other);
-  }
-
-  bool checkPositionalParameter_cosmeticName(EquivalenceVisitor visitor,
-      PositionalParameter node, PositionalParameter other) {
-    return visitor.checkValues(
-        node.cosmeticName, other.cosmeticName, 'cosmeticName');
-  }
-
-  bool checkFunctionParameter_fileOffset(EquivalenceVisitor visitor,
-      FunctionParameter node, FunctionParameter other) {
-    return checkExpressionVariable_fileOffset(visitor, node, other);
-  }
-
-  bool checkPositionalParameter_fileOffset(EquivalenceVisitor visitor,
-      PositionalParameter node, PositionalParameter other) {
-    return checkFunctionParameter_fileOffset(visitor, node, other);
-  }
-
-  bool checkNamedParameter_name(
-      EquivalenceVisitor visitor, NamedParameter node, NamedParameter other) {
-    return visitor.checkValues(node.name, other.name, 'name');
-  }
-
-  bool checkNamedParameter_fileOffset(
-      EquivalenceVisitor visitor, NamedParameter node, NamedParameter other) {
-    return checkFunctionParameter_fileOffset(visitor, node, other);
-  }
-
-  bool checkThisVariable_fileOffset(
-      EquivalenceVisitor visitor, ThisVariable node, ThisVariable other) {
-    return checkExpressionVariable_fileOffset(visitor, node, other);
-  }
-
-  bool checkSyntheticVariable_cosmeticName(EquivalenceVisitor visitor,
-      SyntheticVariable node, SyntheticVariable other) {
-    return visitor.checkValues(
-        node.cosmeticName, other.cosmeticName, 'cosmeticName');
-  }
-
-  bool checkSyntheticVariable_fileOffset(EquivalenceVisitor visitor,
-      SyntheticVariable node, SyntheticVariable other) {
-    return checkExpressionVariable_fileOffset(visitor, node, other);
-  }
-
   bool checkVariableContext_captureKind(
       EquivalenceVisitor visitor, VariableContext node, VariableContext other) {
     return visitor.checkValues(
diff --git a/pkg/kernel/lib/src/node_creator.dart b/pkg/kernel/lib/src/node_creator.dart
index 6a27731..c206291 100644
--- a/pkg/kernel/lib/src/node_creator.dart
+++ b/pkg/kernel/lib/src/node_creator.dart
@@ -790,7 +790,6 @@
         return IntLiteral(42)..fileOffset = _needFileOffset();
       case ExpressionKind.InvalidExpression:
         return _createOneOf(_pendingExpressions, kind, index, [
-          () => InvalidExpression(null)..fileOffset = _needFileOffset(),
           () => InvalidExpression('foo')..fileOffset = _needFileOffset(),
           () => InvalidExpression('foo', _createExpression())
             ..fileOffset = _needFileOffset(),
@@ -1599,7 +1598,7 @@
   /// If there are any pending initializers, one of these is created.
   Initializer _createInitializer() {
     if (_pendingInitializers.isEmpty) {
-      return InvalidInitializer()..fileOffset = _needFileOffset();
+      return InvalidInitializer('')..fileOffset = _needFileOffset();
     }
     InitializerKind kind = _pendingInitializers.keys.first;
     return _createInitializerFromKind(kind);
@@ -1623,7 +1622,7 @@
             _needField(isStatic: false), _createExpression())
           ..fileOffset = _needFileOffset();
       case InitializerKind.InvalidInitializer:
-        return InvalidInitializer()..fileOffset = _needFileOffset();
+        return InvalidInitializer('')..fileOffset = _needFileOffset();
       case InitializerKind.LocalInitializer:
         return LocalInitializer(_createVariableDeclaration())
           ..fileOffset = _needFileOffset();
diff --git a/pkg/kernel/lib/src/printer.dart b/pkg/kernel/lib/src/printer.dart
index 579f6a5..21bee4e 100644
--- a/pkg/kernel/lib/src/printer.dart
+++ b/pkg/kernel/lib/src/printer.dart
@@ -203,28 +203,27 @@
     return _labelNames[node] ??= 'label${_labelNames.length}';
   }
 
-  String getVariableDeclarationName(VariableDeclaration node) {
-    String? name = node.name;
-    if (name != null) {
-      return name;
-    }
-    return _variableDeclarationNames[node] ??=
-        '#${_variableDeclarationNames.length}';
-  }
-
   String getVariableName(Variable node) {
     switch (node) {
       case NamedParameter(:var name):
       case PositionalParameter(cosmeticName: var name?):
       case TypeVariable(cosmeticName: var name?):
+      case LocalVariable(cosmeticName: var name?):
         return name;
       case ThisVariable():
         return 'this';
       case PositionalParameter(cosmeticName: null):
       case TypeVariable(cosmeticName: null):
+      case LocalVariable(cosmeticName: null):
       case SyntheticVariable():
-      case LocalVariable():
         return _variableNames[node] ??= '#${_variableNames.length}';
+      case VariableDeclaration():
+        String? name = node.name;
+        if (name != null) {
+          return name;
+        }
+        return _variableDeclarationNames[node] ??=
+            '#${_variableDeclarationNames.length}';
     }
   }
 
@@ -497,13 +496,42 @@
       writeType(type ?? node.type);
       _sb.write(' ');
     }
-    _sb.write(getVariableDeclarationName(node));
+    _sb.write(getVariableName(node));
     if (includeInitializer && node.initializer != null && !node.isRequired) {
       _sb.write(' = ');
       writeExpression(node.initializer!);
     }
   }
 
+  /// Writes the variable declaration [node] to the printer buffer.
+  ///
+  /// If [includeModifiersAndType] is `true`, the declaration is prefixed by
+  /// the modifiers and declared type of the variable. Otherwise only the
+  /// name and the initializer, if present, are included.
+  ///
+  /// If [isLate] and [type] are provided, these values are used instead of
+  /// the corresponding properties on [node].
+  void writeExpressionVariable(ExpressionVariable node,
+      {bool includeModifiersAndType = true, bool? isLate, DartType? type}) {
+    if (includeModifiersAndType) {
+      if (node is FunctionParameter && node.isRequired) {
+        _sb.write('required ');
+      }
+      if (isLate ?? (node is! FunctionParameter && node.isLate)) {
+        _sb.write('late ');
+      }
+      if (node is! FunctionParameter && node.isFinal) {
+        _sb.write('final ');
+      }
+      if (node is! FunctionParameter && node.isConst) {
+        _sb.write('const ');
+      }
+      writeType(type ?? node.type);
+      _sb.write(' ');
+    }
+    _sb.write(getVariableName(node));
+  }
+
   void writeFunctionNode(FunctionNode node, String name) {
     writeType(node.returnType);
     _sb.write(' ');
diff --git a/pkg/kernel/lib/target/targets.dart b/pkg/kernel/lib/target/targets.dart
index add0eba..b01a10d 100644
--- a/pkg/kernel/lib/target/targets.dart
+++ b/pkg/kernel/lib/target/targets.dart
@@ -492,19 +492,6 @@
   Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
       String name, Arguments arguments, int offset, bool isSuper);
 
-  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});
-
   /// Configure the given [Component] in a target specific way.
   /// Returns the configured component.
   Component configureComponent(Component component) => component;
@@ -555,6 +542,14 @@
 
   /// Should this target-specific pragma be recognized by annotation parsers?
   bool isSupportedPragma(String pragmaName) => false;
+
+  /// When `true` the incremental compiler will always include libraries that
+  /// apply invalidated mixins in the output of a recompile.
+  ///
+  /// They will be included even when only the mixin was edited, and even if the
+  /// invalidation was only within the body of the mixin member.
+  bool get incrementalCompilerIncludeMixinApplicationInvalidatedLibraries =>
+      false;
 }
 
 class NoneConstantsBackend extends ConstantsBackend {
@@ -607,23 +602,8 @@
   @override
   Expression instantiateInvocation(CoreTypes coreTypes, Expression receiver,
       String name, Arguments arguments, int offset, bool isSuper) {
-    return new InvalidExpression(null);
-  }
-
-  @override
-  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}) {
-    return new InvalidExpression(null);
+    return new InvalidExpression(
+        'Unsupported: NoneTarget.instantiateInvocation');
   }
 
   @override
@@ -760,11 +740,10 @@
       this.forceConstructorTearOffLoweringForTesting,
       this.supportedDartLibraries = const {},
       this.unsupportedDartLibraries = const {},
-      bool? isClosureContextLoweringEnabled})
+      bool isClosureContextLoweringEnabled = false})
       : super(
             trackWidgetCreation: trackWidgetCreation,
-            isClosureContextLoweringEnabled:
-                isClosureContextLoweringEnabled ?? false);
+            isClosureContextLoweringEnabled: isClosureContextLoweringEnabled);
 }
 
 mixin TestTargetMixin on Target {
@@ -920,33 +899,6 @@
   }
 
   @override
-  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}) {
-    return _target.instantiateNoSuchMethodError(
-        coreTypes, receiver, name, arguments, offset,
-        isMethod: isMethod,
-        isGetter: isGetter,
-        isSetter: isSetter,
-        isField: isField,
-        isLocalVariable: isLocalVariable,
-        isDynamic: isDynamic,
-        isSuper: isSuper,
-        isStatic: isStatic,
-        isConstructor: isConstructor,
-        isTopLevel: isTopLevel);
-  }
-
-  @override
   bool mayDefineRestrictedType(Uri uri) {
     return _target.mayDefineRestrictedType(uri);
   }
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 9a9655d..bedbb12 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -137,7 +137,7 @@
 }
 
 class NameSystem {
-  final Namer<VariableDeclaration> variables =
+  final Namer<ExpressionVariable> variables =
       new NormalNamer<VariableDeclaration>('#t');
   final Namer<Reference> libraries = new NormalNamer<Reference>('#lib');
   final Namer<TypeParameter> typeParameters =
@@ -149,7 +149,7 @@
   final Disambiguator<Reference, CanonicalName> prefixes =
       new Disambiguator<Reference, CanonicalName>();
 
-  String nameVariable(VariableDeclaration node) => variables.getName(node);
+  String nameVariable(ExpressionVariable node) => variables.getName(node);
   String nameLibrary(Reference node) => libraries.getName(node);
   String nameTypeParameter(TypeParameter node) => typeParameters.getName(node);
   String nameStructuralParameter(StructuralParameter node) =>
@@ -344,11 +344,11 @@
     }
   }
 
-  String getVariableName(VariableDeclaration node) {
-    return node.name ?? syntheticNames.nameVariable(node);
+  String getVariableName(ExpressionVariable node) {
+    return node.cosmeticName ?? syntheticNames.nameVariable(node);
   }
 
-  String getVariableReference(VariableDeclaration node) {
+  String getVariableReference(ExpressionVariable node) {
     return getVariableName(node);
   }
 
@@ -1025,7 +1025,7 @@
     writeWord(getTypedefReference(typedefNode));
   }
 
-  void writeVariableReference(VariableDeclaration variable) {
+  void writeVariableReference(ExpressionVariable variable) {
     final bool highlight = shouldHighlight(variable);
     if (highlight) {
       startHighlight(variable);
@@ -1161,6 +1161,7 @@
     writeModifier(node.isExtensionMember, 'extension-member');
     writeModifier(node.isExtensionTypeMember, 'extension-type-member');
     writeModifier(node.isSynthetic, 'synthetic');
+    writeModifier(node.isConst, 'const');
     writeModifier(node.isErroneous, 'erroneous');
     switch (node.stubKind) {
       case ProcedureStubKind.Regular:
@@ -1483,9 +1484,7 @@
   @override
   void visitInvalidExpression(InvalidExpression node) {
     writeWord('invalid-expression');
-    if (node.message != null) {
-      writeWord('"${escapeString(node.message!)}"');
-    }
+    writeWord('"${escapeString(node.message)}"');
     if (node.expression != null) {
       writeSpaced('in');
       writeNode(node.expression!);
@@ -2061,7 +2060,7 @@
 
   @override
   void visitVariableGet(VariableGet node) {
-    writeVariableReference(node.variable);
+    writeVariableReference(node.expressionVariable);
     DartType? promotedType = node.promotedType;
     if (promotedType != null) {
       writeSymbol('{');
@@ -2073,7 +2072,7 @@
 
   @override
   void visitVariableSet(VariableSet node) {
-    writeVariableReference(node.variable);
+    writeVariableReference(node.expressionVariable);
     writeSpaced('=');
     writeExpression(node.value);
   }
@@ -2499,6 +2498,13 @@
   }
 
   @override
+  void visitVariableInitialization(VariableInitialization node) {
+    writeIndentation();
+    writeVariableInitialization(node);
+    endLine(';');
+  }
+
+  @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
     writeAnnotationList(node.variable.annotations);
     writeIndentation();
@@ -2543,6 +2549,32 @@
     }
   }
 
+  void writeVariableInitialization(
+    VariableInitialization node,
+  ) {
+    if (showOffsets) writeWord("[${node.fileOffset}]");
+    if (showMetadata) writeMetadata(node);
+    writeAnnotationList(node.annotations, separateLines: false);
+    writeModifier(node.isErroneouslyInitialized, 'erroneously-initialized');
+    bool hasImplicitInitializer = node.initializer is NullLiteral ||
+        (node.initializer is ConstantExpression &&
+            (node.initializer as ConstantExpression).constant is NullConstant);
+    if ((node.initializer == null || hasImplicitInitializer) &&
+        node.hasDeclaredInitializer) {
+      writeModifier(node.hasDeclaredInitializer, 'has-declared-initializer');
+    } else if (node.initializer != null &&
+        !hasImplicitInitializer &&
+        !node.hasDeclaredInitializer) {
+      writeModifier(node.hasDeclaredInitializer, 'has-no-declared-initializer');
+    }
+    writeWord(getVariableName(node.variable));
+    Expression? initializer = node.initializer;
+    if (initializer != null) {
+      writeSpaced(':=');
+      writeExpression(initializer);
+    }
+  }
+
   @override
   void visitArguments(Arguments node) {
     if (node.types.isNotEmpty) {
@@ -2573,6 +2605,7 @@
   @override
   void visitInvalidInitializer(InvalidInitializer node) {
     writeWord('invalid-initializer');
+    writeWord('"${escapeString(node.message)}"');
   }
 
   @override
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index c98bd50..2201854 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -1350,21 +1350,21 @@
   @override
   void visitVariableInitialization(VariableInitialization node) {
     // TODO(cstefantsova): Implement visitVariableInitialization.
-    throw UnimplementedError(
+    throw new UnimplementedError(
         "Unimplemented support for $node (${node.runtimeType}).");
   }
 
   @override
   DartType visitVariableRead(VariableRead node) {
     // TODO(cstefantsova): Implement visitVariableRead.
-    throw UnimplementedError(
+    throw new UnimplementedError(
         "Unimplemented support for $node (${node.runtimeType}).");
   }
 
   @override
   DartType visitVariableWrite(VariableWrite node) {
     // TODO(cstefantsova): Implement visitVariableWrite.
-    throw UnimplementedError(
+    throw new UnimplementedError(
         "Unimplemented support for $node (${node.runtimeType}).");
   }
 
diff --git a/pkg/kernel/lib/verifier.dart b/pkg/kernel/lib/verifier.dart
index 7e712ea..38e6dbf 100644
--- a/pkg/kernel/lib/verifier.dart
+++ b/pkg/kernel/lib/verifier.dart
@@ -134,9 +134,9 @@
   Set<TypeParameter> typeParametersInScope = new Set<TypeParameter>();
   Set<StructuralParameter> structuralParametersInScope =
       new Set<StructuralParameter>();
-  Set<VariableDeclaration> variableDeclarationsInScope =
-      new Set<VariableDeclaration>();
-  final List<VariableDeclaration> variableStack = <VariableDeclaration>[];
+  Set<ExpressionVariable> variableDeclarationsInScope =
+      new Set<ExpressionVariable>();
+  final List<ExpressionVariable> variableStack = <ExpressionVariable>[];
   final Map<Typedef, TypedefState> typedefState = <Typedef, TypedefState>{};
   final Set<Constant> seenConstants = <Constant>{};
 
@@ -286,7 +286,7 @@
     exitTreeNode(node);
   }
 
-  void declareVariable(VariableDeclaration variable) {
+  void declareVariable(ExpressionVariable variable) {
     if (variableDeclarationsInScope.contains(variable)) {
       problem(variable, "Variable '$variable' declared more than once.");
     }
@@ -294,7 +294,7 @@
     variableStack.add(variable);
   }
 
-  void undeclareVariable(VariableDeclaration variable) {
+  void undeclareVariable(ExpressionVariable variable) {
     variableDeclarationsInScope.remove(variable);
   }
 
@@ -342,7 +342,7 @@
     structuralParametersInScope.removeAll(parameters);
   }
 
-  void checkVariableInScope(VariableDeclaration variable, TreeNode where) {
+  void checkVariableInScope(ExpressionVariable variable, TreeNode where) {
     if (!variableDeclarationsInScope.contains(variable)) {
       problem(where, "Variable '$variable' used out of scope.");
     }
@@ -417,7 +417,17 @@
     enterTreeNode(node);
     fileUri = checkLocation(node, node.name, node.fileUri);
     currentLibrary = node;
-    super.visitLibrary(node);
+    TreeNode? oldParent = enterParent(node);
+    _visitAnnotations(node.annotations);
+    visitList(node.dependencies, this);
+    visitList(node.parts, this);
+    visitList(node.typedefs, this);
+    visitList(node.classes, this);
+    visitList(node.extensions, this);
+    visitList(node.extensionTypeDeclarations, this);
+    visitList(node.procedures, this);
+    visitList(node.fields, this);
+    exitParent(oldParent);
     currentLibrary = null;
     exitTreeNode(node);
     _extensionsMembers = null;
@@ -465,6 +475,25 @@
     return _extensionsMembers!;
   }
 
+  @override
+  void visitLibraryPart(LibraryPart node) {
+    enterTreeNode(node);
+    TreeNode? oldParent = enterParent(node);
+    _visitAnnotations(node.annotations);
+    exitParent(oldParent);
+    exitTreeNode(node);
+  }
+
+  @override
+  void visitLibraryDependency(LibraryDependency node) {
+    enterTreeNode(node);
+    TreeNode? oldParent = enterParent(node);
+    _visitAnnotations(node.annotations);
+    visitList(node.combinators, this);
+    exitParent(oldParent);
+    exitTreeNode(node);
+  }
+
   Map<Reference, ExtensionTypeMemberDescriptor> _computeExtensionTypeMembers(
       Library library) {
     if (_extensionTypeMembers == null) {
@@ -518,7 +547,9 @@
     _computeExtensionMembers(node.enclosingLibrary);
     declareTypeParameters(node.typeParameters);
     final TreeNode? oldParent = enterParent(node);
-    node.visitChildren(this);
+    _visitAnnotations(node.annotations);
+    visitList(node.typeParameters, this);
+    node.onType.accept(this);
     exitParent(oldParent);
     undeclareTypeParameters(node.typeParameters);
     currentExtension = null;
@@ -548,7 +579,10 @@
             "Found $type.");
       }
     }
-    node.visitChildren(this);
+    _visitAnnotations(node.annotations);
+    visitList(node.typeParameters, this);
+    node.declaredRepresentationType.accept(this);
+    visitList(node.procedures, this);
     exitParent(oldParent);
     undeclareTypeParameters(node.typeParameters);
     currentExtensionTypeDeclaration = null;
@@ -570,7 +604,9 @@
     currentParent = node;
     // Visit children without checking the parent pointer on the typedef itself
     // since this can be called from a context other than its true parent.
-    node.visitChildren(this);
+    _visitAnnotations(node.annotations);
+    visitList(node.typeParameters, this);
+    node.type?.accept(this);
     currentParent = savedParent;
     typeParametersInScope = savedTypeParameters;
     typedefState[node] = TypedefState.Done;
@@ -667,12 +703,27 @@
     node.initializer?.accept(this);
     node.type.accept(this);
     classTypeParametersAreInScope = false;
-    visitList(node.annotations, this);
+    _visitAnnotations(node.annotations);
     exitParent(oldParent);
     currentMember = null;
     exitTreeNode(node);
   }
 
+  void _visitAnnotations(List<Expression> annotations) {
+    for (Expression annotation in annotations) {
+      if (stage >= VerificationStage.afterConstantEvaluation) {
+        if (!(annotation is ConstantExpression ||
+            annotation is InvalidExpression)) {
+          problem(
+              annotation,
+              "Unexpected annotation $annotation (${annotation.runtimeType}). "
+                  "Expected a ConstantExpression or InvalidExpression.");
+        }
+      }
+      annotation.accept(this);
+    }
+  }
+
   @override
   void visitProcedure(Procedure node) {
     enterTreeNode(node);
@@ -742,7 +793,7 @@
     }
     node.function.accept(this);
     classTypeParametersAreInScope = false;
-    visitList(node.annotations, this);
+    _visitAnnotations(node.annotations);
     exitParent(oldParent);
     // TODO(johnniwinther): Enable this invariant. Possibly by removing bodies
     // from external procedures declared with a body or by removing the external
@@ -788,7 +839,7 @@
     }
     exitLocalScope(stackHeight);
     classTypeParametersAreInScope = false;
-    visitList(node.annotations, this);
+    _visitAnnotations(node.annotations);
     exitParent(oldParent);
     // TODO(johnniwinther): Enable this invariant. Possibly by removing bodies
     // from external constructors declared with a body or by removing the
@@ -815,7 +866,7 @@
     declareTypeParameters(node.typeParameters);
     TreeNode? oldParent = enterParent(node);
     classTypeParametersAreInScope = false;
-    visitList(node.annotations, this);
+    _visitAnnotations(node.annotations);
     classTypeParametersAreInScope = true;
     visitList(node.typeParameters, this);
     visitList(node.fields, this);
@@ -993,6 +1044,15 @@
 
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
+    return _verifyVariableInitialization(node);
+  }
+
+  @override
+  void visitVariableInitialization(VariableInitialization node) {
+    return _verifyVariableInitialization(node);
+  }
+
+  void _verifyVariableInitialization(VariableInitialization node) {
     enterTreeNode(node);
     TreeNode? parent = node.parent;
     if (parent is! Block &&
@@ -1009,8 +1069,11 @@
           "VariableDeclaration must be a direct child of a Block, "
           "not ${parent.runtimeType}.");
     }
-    visitChildren(node);
-    declareVariable(node);
+    TreeNode? oldParent = enterParent(node);
+    _visitAnnotations(node.annotations);
+    node.initializer?.accept(this);
+    exitParent(oldParent);
+    declareVariable(node.variable);
     if (afterConst && node.isConst && constantLocalsShouldBeRemoved) {
       Expression? initializer = node.initializer;
       if (!(initializer is InvalidExpression ||
@@ -1025,13 +1088,14 @@
   @override
   void visitVariableGet(VariableGet node) {
     enterTreeNode(node);
-    checkVariableInScope(node.variable, node);
+    checkVariableInScope(node.expressionVariable, node);
     visitChildren(node);
     if (constantsAreAlwaysInlined &&
         afterConst &&
-        node.variable.isConst &&
+        node.expressionVariable.isConst &&
         !inUnevaluatedConstant) {
-      problem(node, "VariableGet of const variable '${node.variable}'.");
+      problem(
+          node, "VariableGet of const variable '${node.expressionVariable}'.");
     }
     exitTreeNode(node);
   }
@@ -1039,7 +1103,7 @@
   @override
   void visitVariableSet(VariableSet node) {
     enterTreeNode(node);
-    checkVariableInScope(node.variable, node);
+    checkVariableInScope(node.expressionVariable, node);
     visitChildren(node);
     exitTreeNode(node);
   }
diff --git a/pkg/kernel/test/class_hierarchy_test.dart b/pkg/kernel/test/class_hierarchy_test.dart
index f9b8236..ff59904 100644
--- a/pkg/kernel/test/class_hierarchy_test.dart
+++ b/pkg/kernel/test/class_hierarchy_test.dart
@@ -139,8 +139,22 @@
     expect(hierarchy.isSubclassOf(a, c), false);
     expect(hierarchy.isSubclassOf(c, a), true);
 
-    // Remove so A should no longer be a super of anything.
+    // Remove C - after this C should be unknown.
     expect(hierarchy.applyTreeChanges([libWithC], [], []), same(hierarchy));
+    expectThrows(() => hierarchy.isSubclassOf(a, c));
+    expectThrows(() => hierarchy.isSubclassOf(c, a));
+  }
+
+  void expectThrows(Function() f) {
+    bool hasThrown = false;
+    try {
+      f();
+    } catch (e) {
+      hasThrown = true;
+    }
+    if (!hasThrown) {
+      throw "Expected the function to throw an exception.";
+    }
   }
 
   void test_applyMemberChanges() {
@@ -310,6 +324,24 @@
     expect(cwchst.getSubtypesOf(f), unorderedEquals([f]));
     expect(cwchst.getSubtypesOf(g), unorderedEquals([g, h]));
     expect(cwchst.getSubtypesOf(h), unorderedEquals([h]));
+
+    // Update hierarchy.
+    expect(
+        hierarchy.applyTreeChanges([library], [library], []), same(hierarchy));
+
+    // The existing ClassHierarchySubtypes should be invalidated.
+    expect((cwchst as dynamic).invalidated, true);
+
+    // Asking for it again gives one that works.
+    cwchst = cwch.computeSubtypesInformation();
+    expect(cwchst.getSubtypesOf(a), unorderedEquals([a, d, f, h]));
+    expect(cwchst.getSubtypesOf(b), unorderedEquals([b, e, f]));
+    expect(cwchst.getSubtypesOf(c), unorderedEquals([c, e, f, h]));
+    expect(cwchst.getSubtypesOf(d), unorderedEquals([d]));
+    expect(cwchst.getSubtypesOf(e), unorderedEquals([e, f]));
+    expect(cwchst.getSubtypesOf(f), unorderedEquals([f]));
+    expect(cwchst.getSubtypesOf(g), unorderedEquals([g, h]));
+    expect(cwchst.getSubtypesOf(h), unorderedEquals([h]));
   }
 
   /// Return the new or existing instance of [ClassHierarchy].
diff --git a/pkg/linter/CHANGELOG.md b/pkg/linter/CHANGELOG.md
index f3ec9b0..d2062bf 100644
--- a/pkg/linter/CHANGELOG.md
+++ b/pkg/linter/CHANGELOG.md
@@ -1,4 +1,8 @@
-# 3.10.0-wip
+# 3.11.0-wip
+
+- deprecated lint: `prefer_final_parameters`
+
+# 3.10.0
 
 - new lint: `remove_deprecations_in_breaking_versions`
 
diff --git a/pkg/linter/example/all.yaml b/pkg/linter/example/all.yaml
index 4c987ee..c856935 100644
--- a/pkg/linter/example/all.yaml
+++ b/pkg/linter/example/all.yaml
@@ -134,7 +134,6 @@
     - prefer_final_fields
     - prefer_final_in_for_each
     - prefer_final_locals
-    - prefer_final_parameters
     - prefer_for_elements_to_map_fromIterable
     - prefer_foreach
     - prefer_function_declarations_over_variables
diff --git a/pkg/linter/lib/src/analyzer.dart b/pkg/linter/lib/src/analyzer.dart
index 450be2c..d0c0cff 100644
--- a/pkg/linter/lib/src/analyzer.dart
+++ b/pkg/linter/lib/src/analyzer.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 export 'package:analyzer/src/dart/error/lint_codes.dart';
-export 'package:analyzer/src/lint/linter.dart' show LintRule, LinterContext;
 
 export 'lint_codes.dart';
 export 'lint_names.dart';
diff --git a/pkg/linter/lib/src/ast.dart b/pkg/linter/lib/src/ast.dart
index b78ca68..c197c95 100644
--- a/pkg/linter/lib/src/ast.dart
+++ b/pkg/linter/lib/src/ast.dart
@@ -47,19 +47,20 @@
   // TODO(srawlins): Convert to a switch expression over `Declaration` subtypes,
   // assuming `Declaration` becomes an exhaustive type.
   if (node is ClassDeclaration) {
-    return node.name;
+    return node.namePart.typeName;
   }
   if (node is ClassTypeAlias) {
     return node.name;
   }
   if (node is ConstructorDeclaration) {
-    return node.name ?? node.returnType;
+    // TODO(scheglov): support primary constructors
+    return node.name ?? node.typeName!;
   }
   if (node is EnumConstantDeclaration) {
     return node.name;
   }
   if (node is EnumDeclaration) {
-    return node.name;
+    return node.namePart.typeName;
   }
   if (node is ExtensionDeclaration) {
     return node.name ?? node;
@@ -92,7 +93,7 @@
     return node.name;
   }
   if (node is ExtensionTypeDeclaration) {
-    return node.name;
+    return node.primaryConstructor.typeName;
   }
   assert(false, "Unaccounted for Declaration subtype: '${node.runtimeType}'");
   return node;
@@ -241,7 +242,7 @@
       // the same
       if (staticElement.enclosingElement == enclosingElement) {
         var variable = staticElement.variable;
-        return staticElement.isSynthetic && variable.isPrivate;
+        return staticElement.isOriginVariable && variable.isPrivate;
       }
     }
   }
@@ -260,7 +261,7 @@
   var rightHandSide = expression.rightHandSide;
   if (leftHandSide is SimpleIdentifier && rightHandSide is SimpleIdentifier) {
     var leftElement = expression.writeElement;
-    if (leftElement is! SetterElement || !leftElement.isSynthetic) {
+    if (leftElement is! SetterElement || leftElement.isOriginDeclaration) {
       return false;
     }
 
diff --git a/pkg/linter/lib/src/diagnostic.dart b/pkg/linter/lib/src/diagnostic.dart
new file mode 100644
index 0000000..97644f3
--- /dev/null
+++ b/pkg/linter/lib/src/diagnostic.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'analyzer.dart';
+import 'diagnostic.dart' as diag;
+
+part 'package:linter/src/diagnostic.g.dart';
diff --git a/pkg/linter/lib/src/diagnostic.g.dart b/pkg/linter/lib/src/diagnostic.g.dart
new file mode 100644
index 0000000..355fcdd
--- /dev/null
+++ b/pkg/linter/lib/src/diagnostic.g.dart
@@ -0,0 +1,4335 @@
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
+// for 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.
+//
+// Instead modify 'pkg/analyzer/messages.yaml' and run
+// 'dart run pkg/analyzer/tool/messages/generate.dart' to update.
+
+// Code generation is easier if we don't have to decide whether to generate an
+// expression function body or a block function body.
+// ignore_for_file: prefer_expression_function_bodies
+
+// Code generation is easier using double quotes (since we can use json.convert
+// to quote strings).
+// ignore_for_file: prefer_single_quotes
+
+// Generated comments don't quite align with flutter style.
+// ignore_for_file: flutter_style_todos
+
+part of "package:linter/src/diagnostic.dart";
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+alwaysDeclareReturnTypesOfFunctions = LinterLintTemplate(
+  name: 'always_declare_return_types',
+  problemMessage: "The function '{0}' should have a return type but doesn't.",
+  correctionMessage: "Try adding a return type to the function.",
+  hasPublishedDocs: true,
+  uniqueName: 'always_declare_return_types_of_functions',
+  withArguments: _withArgumentsAlwaysDeclareReturnTypesOfFunctions,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+alwaysDeclareReturnTypesOfMethods = LinterLintTemplate(
+  name: 'always_declare_return_types',
+  problemMessage: "The method '{0}' should have a return type but doesn't.",
+  correctionMessage: "Try adding a return type to the method.",
+  hasPublishedDocs: true,
+  uniqueName: 'always_declare_return_types_of_methods',
+  withArguments: _withArgumentsAlwaysDeclareReturnTypesOfMethods,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments alwaysPutControlBodyOnNewLine =
+    LinterLintWithoutArguments(
+      name: 'always_put_control_body_on_new_line',
+      problemMessage: "Statement should be on a separate line.",
+      correctionMessage: "Try moving the statement to a new line.",
+      hasPublishedDocs: true,
+      uniqueName: 'always_put_control_body_on_new_line',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+alwaysPutRequiredNamedParametersFirst = LinterLintWithoutArguments(
+  name: 'always_put_required_named_parameters_first',
+  problemMessage:
+      "Required named parameters should be before optional named parameters.",
+  correctionMessage:
+      "Try moving the required named parameter to be before any optional "
+      "named parameters.",
+  hasPublishedDocs: true,
+  uniqueName: 'always_put_required_named_parameters_first',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments alwaysRequireNonNullNamedParameters =
+    LinterLintWithoutArguments(
+      name: 'always_require_non_null_named_parameters',
+      problemMessage: "",
+      uniqueName: 'always_require_non_null_named_parameters',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments alwaysSpecifyTypesAddType =
+    LinterLintWithoutArguments(
+      name: 'always_specify_types',
+      problemMessage: "Missing type annotation.",
+      correctionMessage: "Try adding a type annotation.",
+      uniqueName: 'always_specify_types_add_type',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+alwaysSpecifyTypesReplaceKeyword = LinterLintTemplate(
+  name: 'always_specify_types',
+  problemMessage: "Missing type annotation.",
+  correctionMessage: "Try replacing '{0}' with '{1}'.",
+  uniqueName: 'always_specify_types_replace_keyword',
+  withArguments: _withArgumentsAlwaysSpecifyTypesReplaceKeyword,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+alwaysSpecifyTypesSpecifyType = LinterLintTemplate(
+  name: 'always_specify_types',
+  problemMessage: "Missing type annotation.",
+  correctionMessage: "Try specifying the type '{0}'.",
+  uniqueName: 'always_specify_types_specify_type',
+  withArguments: _withArgumentsAlwaysSpecifyTypesSpecifyType,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments alwaysSpecifyTypesSplitToTypes =
+    LinterLintWithoutArguments(
+      name: 'always_specify_types',
+      problemMessage: "Missing type annotation.",
+      correctionMessage:
+          "Try splitting the declaration and specify the different type "
+          "annotations.",
+      uniqueName: 'always_specify_types_split_to_types',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments alwaysUsePackageImports =
+    LinterLintWithoutArguments(
+      name: 'always_use_package_imports',
+      problemMessage:
+          "Use 'package:' imports for files in the 'lib' directory.",
+      correctionMessage: "Try converting the URI to a 'package:' URI.",
+      hasPublishedDocs: true,
+      uniqueName: 'always_use_package_imports',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments analyzerElementModelTrackingBad =
+    LinterLintWithoutArguments(
+      name: 'analyzer_element_model_tracking_bad',
+      problemMessage: "Bad tracking annotation for this member.",
+      uniqueName: 'analyzer_element_model_tracking_bad',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments analyzerElementModelTrackingMoreThanOne =
+    LinterLintWithoutArguments(
+      name: 'analyzer_element_model_tracking_more_than_one',
+      problemMessage: "There can be only one tracking annotation.",
+      uniqueName: 'analyzer_element_model_tracking_more_than_one',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments analyzerElementModelTrackingZero =
+    LinterLintWithoutArguments(
+      name: 'analyzer_element_model_tracking_zero',
+      problemMessage: "No required tracking annotation.",
+      uniqueName: 'analyzer_element_model_tracking_zero',
+      expectedTypes: [],
+    );
+
+/// Lint issued if a file in the analyzer public API contains a `part`
+/// directive that points to a file that's not in the analyzer public API.
+///
+/// The rationale for this lint is that if such a `part` directive were to
+/// exist, it would cause all the members of the part file to become part of
+/// the analyzer's public API, even though they don't appear to be public API.
+///
+/// Note that the analyzer doesn't make very much use of `part` directives,
+/// but it may do so in the future once augmentations and enhanced parts are
+/// supported.
+///
+/// No parameters.
+const LinterLintWithoutArguments
+analyzerPublicApiBadPartDirective = LinterLintWithoutArguments(
+  name: 'analyzer_public_api_bad_part_directive',
+  problemMessage:
+      "Part directives in the analyzer public API should point to files in the "
+      "analyzer public API.",
+  uniqueName: 'analyzer_public_api_bad_part_directive',
+  expectedTypes: [],
+);
+
+/// Lint issued if a method, function, getter, or setter in the analyzer
+/// public API makes use of a type that's not part of the analyzer public API,
+/// or if a non-public type appears in an `extends`, `implements`, `with`, or
+/// `on` clause.
+///
+/// The reason this is a problem is that it makes it possible for analyzer
+/// clients to implicitly reference analyzer internal types. This can happen
+/// in many ways; here are some examples:
+///
+/// - If `C` is a public API class that implements `B`, and `B` is a private
+///   class with a getter called `x`, then a client can access `B.x` via `C`.
+///
+/// - If `f` has return type `T`, and `T` is a private class with a getter
+///   called `x`, then a client can access `T.x` via `f().x`.
+///
+/// - If `f` has type `void Function(T)`, and `T` is a private class with a
+///   getter called `x`, then a client can access `T.x` via
+///   `var g = f; g = (t) { print(t.x); }`.
+///
+/// This lint can be suppressed either with an `ignore` comment, or by marking
+/// the referenced type with `@AnalyzerPublicApi(...)`. The advantage of
+/// marking the referenced type with `@AnalyzerPublicApi(...)` is that it
+/// causes the members of referenced type to be checked by this lint.
+///
+/// Parameters:
+/// String types: list of types, separated by `, `
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String types})
+>
+analyzerPublicApiBadType = LinterLintTemplate(
+  name: 'analyzer_public_api_bad_type',
+  problemMessage:
+      "Element makes use of type(s) which is not part of the analyzer public "
+      "API: {0}.",
+  uniqueName: 'analyzer_public_api_bad_type',
+  withArguments: _withArgumentsAnalyzerPublicApiBadType,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Lint issued if an element in the analyzer public API makes use
+/// of a type that's annotated `@experimental`, but the element
+/// itself is not annotated `@experimental`.
+///
+/// The reason this is a problem is that it makes it possible for
+/// analyzer clients to implicitly reference analyzer experimental
+/// types. This can happen in many ways; here are some examples:
+///
+/// - If `C` is a non-experimental public API class that implements
+///   `B`, and `B` is an experimental public API class with a getter
+///   called `x`, then a client can access `B.x` via `C`.
+///
+/// - If `f` has return type `T`, and `T` is an experimental public
+///   API class with a getter called `x`, then a client can access
+///   `T.x` via `f().x`.
+///
+/// - If `f` has type `void Function(T)`, and `T` is an experimental
+///   public API class with a getter called `x`, then a client can
+///   access `T.x` via `var g = f; g = (t) { print(t.x); }`.
+///
+/// Parameters:
+/// String types: list of types, separated by `, `
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String types})
+>
+analyzerPublicApiExperimentalInconsistency = LinterLintTemplate(
+  name: 'analyzer_public_api_experimental_inconsistency',
+  problemMessage:
+      "Element makes use of experimental type(s), but is not itself marked with "
+      "`@experimental`: {0}.",
+  uniqueName: 'analyzer_public_api_experimental_inconsistency',
+  withArguments: _withArgumentsAnalyzerPublicApiExperimentalInconsistency,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Lint issued if a file in the analyzer public API contains an `export`
+/// directive that exports a name that's not part of the analyzer public API.
+///
+/// This lint can be suppressed either with an `ignore` comment, or by marking
+/// the exported declaration with `@AnalyzerPublicApi(...)`. The advantage of
+/// marking the exported declaration with `@AnalyzerPublicApi(...)` is that it
+/// causes the members of the exported declaration to be checked by this lint.
+///
+/// Parameters:
+/// String elements: List of elements, separated by `, `
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required String elements})
+>
+analyzerPublicApiExportsNonPublicName = LinterLintTemplate(
+  name: 'analyzer_public_api_exports_non_public_name',
+  problemMessage:
+      "Export directive exports element(s) that are not part of the analyzer "
+      "public API: {0}.",
+  uniqueName: 'analyzer_public_api_exports_non_public_name',
+  withArguments: _withArgumentsAnalyzerPublicApiExportsNonPublicName,
+  expectedTypes: [ExpectedType.string],
+);
+
+/// Lint issued if a top level declaration in the analyzer public API has a
+/// name ending in `Impl`.
+///
+/// Such declarations are not meant to be members of the analyzer public API,
+/// so if they are either declared outside of `package:analyzer/src`, or
+/// marked with `@AnalyzerPublicApi(...)`, that is almost certainly a mistake.
+///
+/// No parameters.
+const LinterLintWithoutArguments analyzerPublicApiImplInPublicApi =
+    LinterLintWithoutArguments(
+      name: 'analyzer_public_api_impl_in_public_api',
+      problemMessage:
+          "Declarations in the analyzer public API should not end in \"Impl\".",
+      uniqueName: 'analyzer_public_api_impl_in_public_api',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+annotateOverrides = LinterLintTemplate(
+  name: 'annotate_overrides',
+  problemMessage:
+      "The member '{0}' overrides an inherited member but isn't annotated with "
+      "'@override'.",
+  correctionMessage: "Try adding the '@override' annotation.",
+  hasPublishedDocs: true,
+  uniqueName: 'annotate_overrides',
+  withArguments: _withArgumentsAnnotateOverrides,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+annotateRedeclares = LinterLintTemplate(
+  name: 'annotate_redeclares',
+  problemMessage:
+      "The member '{0}' is redeclaring but isn't annotated with '@redeclare'.",
+  correctionMessage: "Try adding the '@redeclare' annotation.",
+  uniqueName: 'annotate_redeclares',
+  withArguments: _withArgumentsAnnotateRedeclares,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidAnnotatingWithDynamic =
+    LinterLintWithoutArguments(
+      name: 'avoid_annotating_with_dynamic',
+      problemMessage: "Unnecessary 'dynamic' type annotation.",
+      correctionMessage: "Try removing the type 'dynamic'.",
+      uniqueName: 'avoid_annotating_with_dynamic',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidAs = LinterLintWithoutArguments(
+  name: 'avoid_as',
+  problemMessage: "",
+  uniqueName: 'avoid_as',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidBoolLiteralsInConditionalExpressions =
+    LinterLintWithoutArguments(
+      name: 'avoid_bool_literals_in_conditional_expressions',
+      problemMessage:
+          "Conditional expressions with a 'bool' literal can be simplified.",
+      correctionMessage:
+          "Try rewriting the expression to use either '&&' or '||'.",
+      uniqueName: 'avoid_bool_literals_in_conditional_expressions',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidCatchesWithoutOnClauses =
+    LinterLintWithoutArguments(
+      name: 'avoid_catches_without_on_clauses',
+      problemMessage:
+          "Catch clause should use 'on' to specify the type of exception being "
+          "caught.",
+      correctionMessage: "Try adding an 'on' clause before the 'catch'.",
+      uniqueName: 'avoid_catches_without_on_clauses',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidCatchingErrorsClass =
+    LinterLintWithoutArguments(
+      name: 'avoid_catching_errors',
+      problemMessage: "The type 'Error' should not be caught.",
+      correctionMessage:
+          "Try removing the catch or catching an 'Exception' instead.",
+      uniqueName: 'avoid_catching_errors_class',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+avoidCatchingErrorsSubclass = LinterLintTemplate(
+  name: 'avoid_catching_errors',
+  problemMessage:
+      "The type '{0}' should not be caught because it is a subclass of 'Error'.",
+  correctionMessage:
+      "Try removing the catch or catching an 'Exception' instead.",
+  uniqueName: 'avoid_catching_errors_subclass',
+  withArguments: _withArgumentsAvoidCatchingErrorsSubclass,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+avoidClassesWithOnlyStaticMembers = LinterLintWithoutArguments(
+  name: 'avoid_classes_with_only_static_members',
+  problemMessage: "Classes should define instance members.",
+  correctionMessage:
+      "Try adding instance behavior or moving the members out of the class.",
+  uniqueName: 'avoid_classes_with_only_static_members',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidDoubleAndIntChecks =
+    LinterLintWithoutArguments(
+      name: 'avoid_double_and_int_checks',
+      problemMessage: "Explicit check for double or int.",
+      correctionMessage: "Try removing the check.",
+      uniqueName: 'avoid_double_and_int_checks',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidDynamicCalls = LinterLintWithoutArguments(
+  name: 'avoid_dynamic_calls',
+  problemMessage: "Method invocation or property access on a 'dynamic' target.",
+  correctionMessage: "Try giving the target a type.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_dynamic_calls',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidEmptyElse = LinterLintWithoutArguments(
+  name: 'avoid_empty_else',
+  problemMessage: "Empty statements are not allowed in an 'else' clause.",
+  correctionMessage:
+      "Try removing the empty statement or removing the else clause.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_empty_else',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+avoidEqualsAndHashCodeOnMutableClasses = LinterLintTemplate(
+  name: 'avoid_equals_and_hash_code_on_mutable_classes',
+  problemMessage:
+      "The method '{0}' should not be overridden in classes not annotated with "
+      "'@immutable'.",
+  correctionMessage:
+      "Try removing the override or annotating the class with '@immutable'.",
+  uniqueName: 'avoid_equals_and_hash_code_on_mutable_classes',
+  withArguments: _withArgumentsAvoidEqualsAndHashCodeOnMutableClasses,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+avoidEscapingInnerQuotes = LinterLintTemplate(
+  name: 'avoid_escaping_inner_quotes',
+  problemMessage: "Unnecessary escape of '{0}'.",
+  correctionMessage: "Try changing the outer quotes to '{1}'.",
+  uniqueName: 'avoid_escaping_inner_quotes',
+  withArguments: _withArgumentsAvoidEscapingInnerQuotes,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidFieldInitializersInConstClasses =
+    LinterLintWithoutArguments(
+      name: 'avoid_field_initializers_in_const_classes',
+      problemMessage: "Fields in 'const' classes should not have initializers.",
+      correctionMessage:
+          "Try converting the field to a getter or initialize the field in the "
+          "constructors.",
+      uniqueName: 'avoid_field_initializers_in_const_classes',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidFinalParameters =
+    LinterLintWithoutArguments(
+      name: 'avoid_final_parameters',
+      problemMessage: "Parameters should not be marked as 'final'.",
+      correctionMessage: "Try removing the keyword 'final'.",
+      uniqueName: 'avoid_final_parameters',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidFunctionLiteralsInForeachCalls =
+    LinterLintWithoutArguments(
+      name: 'avoid_function_literals_in_foreach_calls',
+      problemMessage: "Function literals shouldn't be passed to 'forEach'.",
+      correctionMessage: "Try using a 'for' loop.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_function_literals_in_foreach_calls',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidFutureorVoid = LinterLintWithoutArguments(
+  name: 'avoid_futureor_void',
+  problemMessage: "Don't use the type 'FutureOr<void>'.",
+  correctionMessage: "Try using 'Future<void>?' or 'void'.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_futureor_void',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidImplementingValueTypes =
+    LinterLintWithoutArguments(
+      name: 'avoid_implementing_value_types',
+      problemMessage: "Classes that override '==' should not be implemented.",
+      correctionMessage: "Try removing the class from the 'implements' clause.",
+      uniqueName: 'avoid_implementing_value_types',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidInitToNull = LinterLintWithoutArguments(
+  name: 'avoid_init_to_null',
+  problemMessage: "Redundant initialization to 'null'.",
+  correctionMessage: "Try removing the initializer.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_init_to_null',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+avoidJsRoundedInts = LinterLintWithoutArguments(
+  name: 'avoid_js_rounded_ints',
+  problemMessage:
+      "Integer literal can't be represented exactly when compiled to JavaScript.",
+  correctionMessage: "Try using a 'BigInt' to represent the value.",
+  uniqueName: 'avoid_js_rounded_ints',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidMultipleDeclarationsPerLine =
+    LinterLintWithoutArguments(
+      name: 'avoid_multiple_declarations_per_line',
+      problemMessage: "Multiple variables declared on a single line.",
+      correctionMessage:
+          "Try splitting the variable declarations into multiple lines.",
+      uniqueName: 'avoid_multiple_declarations_per_line',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidNullChecksInEqualityOperators =
+    LinterLintWithoutArguments(
+      name: 'avoid_null_checks_in_equality_operators',
+      problemMessage: "Unnecessary null comparison in implementation of '=='.",
+      correctionMessage: "Try removing the comparison.",
+      uniqueName: 'avoid_null_checks_in_equality_operators',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidPositionalBooleanParameters =
+    LinterLintWithoutArguments(
+      name: 'avoid_positional_boolean_parameters',
+      problemMessage: "'bool' parameters should be named parameters.",
+      correctionMessage: "Try converting the parameter to a named parameter.",
+      uniqueName: 'avoid_positional_boolean_parameters',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidPrint = LinterLintWithoutArguments(
+  name: 'avoid_print',
+  problemMessage: "Don't invoke 'print' in production code.",
+  correctionMessage: "Try using a logging framework.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_print',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidPrivateTypedefFunctions =
+    LinterLintWithoutArguments(
+      name: 'avoid_private_typedef_functions',
+      problemMessage:
+          "The typedef is unnecessary because it is only used in one place.",
+      correctionMessage: "Try inlining the type or using it in other places.",
+      uniqueName: 'avoid_private_typedef_functions',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+avoidRedundantArgumentValues = LinterLintWithoutArguments(
+  name: 'avoid_redundant_argument_values',
+  problemMessage:
+      "The value of the argument is redundant because it matches the default "
+      "value.",
+  correctionMessage: "Try removing the argument.",
+  uniqueName: 'avoid_redundant_argument_values',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidRelativeLibImports =
+    LinterLintWithoutArguments(
+      name: 'avoid_relative_lib_imports',
+      problemMessage: "Can't use a relative path to import a library in 'lib'.",
+      correctionMessage:
+          "Try fixing the relative path or changing the import to a 'package:' "
+          "import.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_relative_lib_imports',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+avoidRenamingMethodParameters = LinterLintTemplate(
+  name: 'avoid_renaming_method_parameters',
+  problemMessage:
+      "The parameter name '{0}' doesn't match the name '{1}' in the overridden "
+      "method.",
+  correctionMessage: "Try changing the name to '{1}'.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_renaming_method_parameters',
+  withArguments: _withArgumentsAvoidRenamingMethodParameters,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidReturningNull =
+    LinterLintWithoutArguments(
+      name: 'avoid_returning_null',
+      problemMessage: "",
+      uniqueName: 'avoid_returning_null',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidReturningNullForFuture =
+    LinterLintWithoutArguments(
+      name: 'avoid_returning_null_for_future',
+      problemMessage: "",
+      uniqueName: 'avoid_returning_null_for_future',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidReturningNullForVoidFromFunction =
+    LinterLintWithoutArguments(
+      name: 'avoid_returning_null_for_void',
+      problemMessage:
+          "Don't return 'null' from a function with a return type of 'void'.",
+      correctionMessage: "Try removing the 'null'.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_returning_null_for_void_from_function',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidReturningNullForVoidFromMethod =
+    LinterLintWithoutArguments(
+      name: 'avoid_returning_null_for_void',
+      problemMessage:
+          "Don't return 'null' from a method with a return type of 'void'.",
+      correctionMessage: "Try removing the 'null'.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_returning_null_for_void_from_method',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidReturningThis =
+    LinterLintWithoutArguments(
+      name: 'avoid_returning_this',
+      problemMessage: "Don't return 'this' from a method.",
+      correctionMessage:
+          "Try changing the return type to 'void' and removing the return.",
+      uniqueName: 'avoid_returning_this',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidReturnTypesOnSetters =
+    LinterLintWithoutArguments(
+      name: 'avoid_return_types_on_setters',
+      problemMessage: "Unnecessary return type on a setter.",
+      correctionMessage: "Try removing the return type.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_return_types_on_setters',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidSettersWithoutGetters =
+    LinterLintWithoutArguments(
+      name: 'avoid_setters_without_getters',
+      problemMessage: "Setter has no corresponding getter.",
+      correctionMessage:
+          "Try adding a corresponding getter or removing the setter.",
+      uniqueName: 'avoid_setters_without_getters',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+avoidShadowingTypeParameters = LinterLintTemplate(
+  name: 'avoid_shadowing_type_parameters',
+  problemMessage:
+      "The type parameter '{0}' shadows a type parameter from the enclosing {1}.",
+  correctionMessage: "Try renaming one of the type parameters.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_shadowing_type_parameters',
+  withArguments: _withArgumentsAvoidShadowingTypeParameters,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+avoidSingleCascadeInExpressionStatements = LinterLintTemplate(
+  name: 'avoid_single_cascade_in_expression_statements',
+  problemMessage: "Unnecessary cascade expression.",
+  correctionMessage: "Try using the operator '{0}'.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_single_cascade_in_expression_statements',
+  withArguments: _withArgumentsAvoidSingleCascadeInExpressionStatements,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidSlowAsyncIo = LinterLintWithoutArguments(
+  name: 'avoid_slow_async_io',
+  problemMessage: "Use of an async 'dart:io' method.",
+  correctionMessage: "Try using the synchronous version of the method.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_slow_async_io',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+avoidTypesAsParameterNamesFormalParameter = LinterLintTemplate(
+  name: 'avoid_types_as_parameter_names',
+  problemMessage: "The parameter name '{0}' matches a visible type name.",
+  correctionMessage:
+      "Try adding a name for the parameter or changing the parameter name to "
+      "not match an existing type.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_types_as_parameter_names_formal_parameter',
+  withArguments: _withArgumentsAvoidTypesAsParameterNamesFormalParameter,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+avoidTypesAsParameterNamesTypeParameter = LinterLintTemplate(
+  name: 'avoid_types_as_parameter_names',
+  problemMessage: "The type parameter name '{0}' matches a visible type name.",
+  correctionMessage:
+      "Try changing the type parameter name to not match an existing type.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_types_as_parameter_names_type_parameter',
+  withArguments: _withArgumentsAvoidTypesAsParameterNamesTypeParameter,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidTypesOnClosureParameters =
+    LinterLintWithoutArguments(
+      name: 'avoid_types_on_closure_parameters',
+      problemMessage:
+          "Unnecessary type annotation on a function expression parameter.",
+      correctionMessage: "Try removing the type annotation.",
+      uniqueName: 'avoid_types_on_closure_parameters',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidTypeToString = LinterLintWithoutArguments(
+  name: 'avoid_type_to_string',
+  problemMessage:
+      "Using 'toString' on a 'Type' is not safe in production code.",
+  correctionMessage:
+      "Try a normal type check or compare the 'runtimeType' directly.",
+  hasPublishedDocs: true,
+  uniqueName: 'avoid_type_to_string',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidUnnecessaryContainers =
+    LinterLintWithoutArguments(
+      name: 'avoid_unnecessary_containers',
+      problemMessage: "Unnecessary instance of 'Container'.",
+      correctionMessage:
+          "Try removing the 'Container' (but not its children) from the widget "
+          "tree.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_unnecessary_containers',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments avoidUnstableFinalFields =
+    LinterLintWithoutArguments(
+      name: 'avoid_unstable_final_fields',
+      problemMessage: "",
+      uniqueName: 'avoid_unstable_final_fields',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+avoidUnusedConstructorParameters = LinterLintTemplate(
+  name: 'avoid_unused_constructor_parameters',
+  problemMessage: "The parameter '{0}' is not used in the constructor.",
+  correctionMessage: "Try using the parameter or removing it.",
+  uniqueName: 'avoid_unused_constructor_parameters',
+  withArguments: _withArgumentsAvoidUnusedConstructorParameters,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidVoidAsync = LinterLintWithoutArguments(
+  name: 'avoid_void_async',
+  problemMessage:
+      "An 'async' function should have a 'Future' return type when it doesn't "
+      "return a value.",
+  correctionMessage: "Try changing the return type.",
+  uniqueName: 'avoid_void_async',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments avoidWebLibrariesInFlutter =
+    LinterLintWithoutArguments(
+      name: 'avoid_web_libraries_in_flutter',
+      problemMessage:
+          "Don't use web-only libraries outside Flutter web plugins.",
+      correctionMessage: "Try finding a different library for your needs.",
+      hasPublishedDocs: true,
+      uniqueName: 'avoid_web_libraries_in_flutter',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+awaitOnlyFutures = LinterLintTemplate(
+  name: 'await_only_futures',
+  problemMessage:
+      "Uses 'await' on an instance of '{0}', which is not a subtype of 'Future'.",
+  correctionMessage: "Try removing the 'await' or changing the expression.",
+  hasPublishedDocs: true,
+  uniqueName: 'await_only_futures',
+  withArguments: _withArgumentsAwaitOnlyFutures,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+camelCaseExtensions = LinterLintTemplate(
+  name: 'camel_case_extensions',
+  problemMessage:
+      "The extension name '{0}' isn't an UpperCamelCase identifier.",
+  correctionMessage:
+      "Try changing the name to follow the UpperCamelCase style.",
+  hasPublishedDocs: true,
+  uniqueName: 'camel_case_extensions',
+  withArguments: _withArgumentsCamelCaseExtensions,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+camelCaseTypes = LinterLintTemplate(
+  name: 'camel_case_types',
+  problemMessage: "The type name '{0}' isn't an UpperCamelCase identifier.",
+  correctionMessage:
+      "Try changing the name to follow the UpperCamelCase style.",
+  hasPublishedDocs: true,
+  uniqueName: 'camel_case_types',
+  withArguments: _withArgumentsCamelCaseTypes,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments cancelSubscriptions =
+    LinterLintWithoutArguments(
+      name: 'cancel_subscriptions',
+      problemMessage: "Uncancelled instance of 'StreamSubscription'.",
+      correctionMessage:
+          "Try invoking 'cancel' in the function in which the "
+          "'StreamSubscription' was created.",
+      hasPublishedDocs: true,
+      uniqueName: 'cancel_subscriptions',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments cascadeInvocations =
+    LinterLintWithoutArguments(
+      name: 'cascade_invocations',
+      problemMessage: "Unnecessary duplication of receiver.",
+      correctionMessage: "Try using a cascade to avoid the duplication.",
+      uniqueName: 'cascade_invocations',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+castNullableToNonNullable = LinterLintWithoutArguments(
+  name: 'cast_nullable_to_non_nullable',
+  problemMessage: "Don't cast a nullable value to a non-nullable type.",
+  correctionMessage:
+      "Try adding a not-null assertion ('!') to make the type non-nullable.",
+  uniqueName: 'cast_nullable_to_non_nullable',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments closeSinks = LinterLintWithoutArguments(
+  name: 'close_sinks',
+  problemMessage: "Unclosed instance of 'Sink'.",
+  correctionMessage:
+      "Try invoking 'close' in the function in which the 'Sink' was created.",
+  hasPublishedDocs: true,
+  uniqueName: 'close_sinks',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+collectionMethodsUnrelatedType = LinterLintTemplate(
+  name: 'collection_methods_unrelated_type',
+  problemMessage: "The argument type '{0}' isn't related to '{1}'.",
+  correctionMessage: "Try changing the argument or element type to match.",
+  hasPublishedDocs: true,
+  uniqueName: 'collection_methods_unrelated_type',
+  withArguments: _withArgumentsCollectionMethodsUnrelatedType,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments combinatorsOrdering =
+    LinterLintWithoutArguments(
+      name: 'combinators_ordering',
+      problemMessage: "Sort combinator names alphabetically.",
+      correctionMessage: "Try sorting the combinator names alphabetically.",
+      uniqueName: 'combinators_ordering',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments commentReferences = LinterLintWithoutArguments(
+  name: 'comment_references',
+  problemMessage: "The referenced name isn't visible in scope.",
+  correctionMessage: "Try adding an import for the referenced name.",
+  uniqueName: 'comment_references',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+conditionalUriDoesNotExist = LinterLintTemplate(
+  name: 'conditional_uri_does_not_exist',
+  problemMessage: "The target of the conditional URI '{0}' doesn't exist.",
+  correctionMessage:
+      "Try creating the file referenced by the URI, or try using a URI for a "
+      "file that does exist.",
+  uniqueName: 'conditional_uri_does_not_exist',
+  withArguments: _withArgumentsConditionalUriDoesNotExist,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+constantIdentifierNames = LinterLintTemplate(
+  name: 'constant_identifier_names',
+  problemMessage: "The constant name '{0}' isn't a lowerCamelCase identifier.",
+  correctionMessage:
+      "Try changing the name to follow the lowerCamelCase style.",
+  hasPublishedDocs: true,
+  uniqueName: 'constant_identifier_names',
+  withArguments: _withArgumentsConstantIdentifierNames,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+controlFlowInFinally = LinterLintTemplate(
+  name: 'control_flow_in_finally',
+  problemMessage: "Use of '{0}' in a 'finally' clause.",
+  correctionMessage: "Try restructuring the code.",
+  hasPublishedDocs: true,
+  uniqueName: 'control_flow_in_finally',
+  withArguments: _withArgumentsControlFlowInFinally,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+curlyBracesInFlowControlStructures = LinterLintTemplate(
+  name: 'curly_braces_in_flow_control_structures',
+  problemMessage: "Statements in {0} should be enclosed in a block.",
+  correctionMessage: "Try wrapping the statement in a block.",
+  hasPublishedDocs: true,
+  uniqueName: 'curly_braces_in_flow_control_structures',
+  withArguments: _withArgumentsCurlyBracesInFlowControlStructures,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments danglingLibraryDocComments =
+    LinterLintWithoutArguments(
+      name: 'dangling_library_doc_comments',
+      problemMessage: "Dangling library doc comment.",
+      correctionMessage: "Add a 'library' directive after the library comment.",
+      hasPublishedDocs: true,
+      uniqueName: 'dangling_library_doc_comments',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+dependOnReferencedPackages = LinterLintTemplate(
+  name: 'depend_on_referenced_packages',
+  problemMessage:
+      "The imported package '{0}' isn't a dependency of the importing package.",
+  correctionMessage:
+      "Try adding a dependency for '{0}' in the 'pubspec.yaml' file.",
+  hasPublishedDocs: true,
+  uniqueName: 'depend_on_referenced_packages',
+  withArguments: _withArgumentsDependOnReferencedPackages,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments deprecatedConsistencyConstructor =
+    LinterLintWithoutArguments(
+      name: 'deprecated_consistency',
+      problemMessage:
+          "Constructors in a deprecated class should be deprecated.",
+      correctionMessage: "Try marking the constructor as deprecated.",
+      uniqueName: 'deprecated_consistency_constructor',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments deprecatedConsistencyField =
+    LinterLintWithoutArguments(
+      name: 'deprecated_consistency',
+      problemMessage:
+          "Fields that are initialized by a deprecated parameter should be "
+          "deprecated.",
+      correctionMessage: "Try marking the field as deprecated.",
+      uniqueName: 'deprecated_consistency_field',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments deprecatedConsistencyParameter =
+    LinterLintWithoutArguments(
+      name: 'deprecated_consistency',
+      problemMessage:
+          "Parameters that initialize a deprecated field should be deprecated.",
+      correctionMessage: "Try marking the parameter as deprecated.",
+      uniqueName: 'deprecated_consistency_parameter',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+deprecatedMemberUseFromSamePackageWithMessage = LinterLintTemplate(
+  name: 'deprecated_member_use_from_same_package',
+  problemMessage: "'{0}' is deprecated and shouldn't be used. {1}",
+  correctionMessage:
+      "Try replacing the use of the deprecated member with the replacement, "
+      "if a replacement is specified.",
+  uniqueName: 'deprecated_member_use_from_same_package_with_message',
+  withArguments: _withArgumentsDeprecatedMemberUseFromSamePackageWithMessage,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+deprecatedMemberUseFromSamePackageWithoutMessage = LinterLintTemplate(
+  name: 'deprecated_member_use_from_same_package',
+  problemMessage: "'{0}' is deprecated and shouldn't be used.",
+  correctionMessage:
+      "Try replacing the use of the deprecated member with the replacement, "
+      "if a replacement is specified.",
+  uniqueName: 'deprecated_member_use_from_same_package_without_message',
+  withArguments: _withArgumentsDeprecatedMemberUseFromSamePackageWithoutMessage,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+diagnosticDescribeAllProperties = LinterLintWithoutArguments(
+  name: 'diagnostic_describe_all_properties',
+  problemMessage:
+      "The public property isn't described by either 'debugFillProperties' or "
+      "'debugDescribeChildren'.",
+  correctionMessage: "Try describing the property.",
+  hasPublishedDocs: true,
+  uniqueName: 'diagnostic_describe_all_properties',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments directivesOrderingAlphabetical =
+    LinterLintWithoutArguments(
+      name: 'directives_ordering',
+      problemMessage: "Sort directive sections alphabetically.",
+      correctionMessage: "Try sorting the directives.",
+      uniqueName: 'directives_ordering_alphabetical',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+directivesOrderingDart = LinterLintTemplate(
+  name: 'directives_ordering',
+  problemMessage: "Place 'dart:' {0} before other {0}.",
+  correctionMessage: "Try sorting the directives.",
+  uniqueName: 'directives_ordering_dart',
+  withArguments: _withArgumentsDirectivesOrderingDart,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments directivesOrderingExports =
+    LinterLintWithoutArguments(
+      name: 'directives_ordering',
+      problemMessage:
+          "Specify exports in a separate section after all imports.",
+      correctionMessage: "Try sorting the directives.",
+      uniqueName: 'directives_ordering_exports',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+directivesOrderingPackageBeforeRelative = LinterLintTemplate(
+  name: 'directives_ordering',
+  problemMessage: "Place 'package:' {0} before relative {0}.",
+  correctionMessage: "Try sorting the directives.",
+  uniqueName: 'directives_ordering_package_before_relative',
+  withArguments: _withArgumentsDirectivesOrderingPackageBeforeRelative,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments discardedFutures = LinterLintWithoutArguments(
+  name: 'discarded_futures',
+  problemMessage: "'Future'-returning calls in a non-'async' function.",
+  correctionMessage:
+      "Try converting the enclosing function to be 'async' and then 'await' "
+      "the future, or wrap the expression in 'unawaited'.",
+  uniqueName: 'discarded_futures',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments documentIgnores = LinterLintWithoutArguments(
+  name: 'document_ignores',
+  problemMessage:
+      "Missing documentation explaining why the diagnostic is ignored.",
+  correctionMessage:
+      "Try adding a comment immediately above the ignore comment.",
+  uniqueName: 'document_ignores',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments doNotUseEnvironment =
+    LinterLintWithoutArguments(
+      name: 'do_not_use_environment',
+      problemMessage: "Invalid use of an environment declaration.",
+      correctionMessage: "Try removing the environment declaration usage.",
+      uniqueName: 'do_not_use_environment',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments emptyCatches = LinterLintWithoutArguments(
+  name: 'empty_catches',
+  problemMessage: "Empty catch block.",
+  correctionMessage:
+      "Try adding statements to the block, adding a comment to the block, or "
+      "removing the 'catch' clause.",
+  hasPublishedDocs: true,
+  uniqueName: 'empty_catches',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+emptyConstructorBodies = LinterLintWithoutArguments(
+  name: 'empty_constructor_bodies',
+  problemMessage:
+      "Empty constructor bodies should be written using a ';' rather than '{}'.",
+  correctionMessage: "Try replacing the constructor body with ';'.",
+  hasPublishedDocs: true,
+  uniqueName: 'empty_constructor_bodies',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments emptyStatements = LinterLintWithoutArguments(
+  name: 'empty_statements',
+  problemMessage: "Unnecessary empty statement.",
+  correctionMessage:
+      "Try removing the empty statement or restructuring the code.",
+  hasPublishedDocs: true,
+  uniqueName: 'empty_statements',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments enableNullSafety = LinterLintWithoutArguments(
+  name: 'enable_null_safety',
+  problemMessage: "",
+  uniqueName: 'enable_null_safety',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments eolAtEndOfFile = LinterLintWithoutArguments(
+  name: 'eol_at_end_of_file',
+  problemMessage: "Missing a newline at the end of the file.",
+  correctionMessage: "Try adding a newline at the end of the file.",
+  uniqueName: 'eol_at_end_of_file',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+eraseDartTypeExtensionTypes = LinterLintWithoutArguments(
+  name: 'erase_dart_type_extension_types',
+  problemMessage: "Unsafe use of 'DartType' in an 'is' check.",
+  correctionMessage:
+      "Ensure DartType extension types are erased by using a helper method.",
+  uniqueName: 'erase_dart_type_extension_types',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+exhaustiveCases = LinterLintTemplate(
+  name: 'exhaustive_cases',
+  problemMessage: "Missing case clauses for some constants in '{0}'.",
+  correctionMessage: "Try adding case clauses for the missing constants.",
+  uniqueName: 'exhaustive_cases',
+  withArguments: _withArgumentsExhaustiveCases,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+fileNames = LinterLintTemplate(
+  name: 'file_names',
+  problemMessage:
+      "The file name '{0}' isn't a lower_case_with_underscores identifier.",
+  correctionMessage:
+      "Try changing the name to follow the lower_case_with_underscores "
+      "style.",
+  hasPublishedDocs: true,
+  uniqueName: 'file_names',
+  withArguments: _withArgumentsFileNames,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments flutterStyleTodos = LinterLintWithoutArguments(
+  name: 'flutter_style_todos',
+  problemMessage: "To-do comment doesn't follow the Flutter style.",
+  correctionMessage: "Try following the Flutter style for to-do comments.",
+  uniqueName: 'flutter_style_todos',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+hashAndEquals = LinterLintTemplate(
+  name: 'hash_and_equals',
+  problemMessage: "Missing a corresponding override of '{0}'.",
+  correctionMessage: "Try overriding '{0}' or removing '{1}'.",
+  hasPublishedDocs: true,
+  uniqueName: 'hash_and_equals',
+  withArguments: _withArgumentsHashAndEquals,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+implementationImports = LinterLintWithoutArguments(
+  name: 'implementation_imports',
+  problemMessage:
+      "Import of a library in the 'lib/src' directory of another package.",
+  correctionMessage:
+      "Try importing a public library that exports this library, or removing "
+      "the import.",
+  hasPublishedDocs: true,
+  uniqueName: 'implementation_imports',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments implicitCallTearoffs =
+    LinterLintWithoutArguments(
+      name: 'implicit_call_tearoffs',
+      problemMessage: "Implicit tear-off of the 'call' method.",
+      correctionMessage: "Try explicitly tearing off the 'call' method.",
+      hasPublishedDocs: true,
+      uniqueName: 'implicit_call_tearoffs',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+/// Object p2: undocumented
+/// Object p3: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({
+    required Object p0,
+    required Object p1,
+    required Object p2,
+    required Object p3,
+  })
+>
+implicitReopen = LinterLintTemplate(
+  name: 'implicit_reopen',
+  problemMessage: "The {0} '{1}' reopens '{2}' because it is not marked '{3}'.",
+  correctionMessage: "Try marking '{1}' '{3}' or annotating it with '@reopen'.",
+  uniqueName: 'implicit_reopen',
+  withArguments: _withArgumentsImplicitReopen,
+  expectedTypes: [
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+    ExpectedType.object,
+  ],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments invalidCasePatterns =
+    LinterLintWithoutArguments(
+      name: 'invalid_case_patterns',
+      problemMessage:
+          "This expression is not valid in a 'case' clause in Dart 3.0.",
+      correctionMessage: "Try refactoring the expression to be valid in 3.0.",
+      uniqueName: 'invalid_case_patterns',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesDartAsJs = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Cast from '{0}' to '{1}' casts a Dart value to a JS interop type, which "
+      "might not be platform-consistent.",
+  correctionMessage:
+      "Try using conversion methods from 'dart:js_interop' to convert "
+      "between Dart types and JS interop types.",
+  hasPublishedDocs: true,
+  uniqueName: 'invalid_runtime_check_with_js_interop_types_dart_as_js',
+  withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartAsJs,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesDartIsJs = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Runtime check between '{0}' and '{1}' checks whether a Dart value is a JS "
+      "interop type, which might not be platform-consistent.",
+  uniqueName: 'invalid_runtime_check_with_js_interop_types_dart_is_js',
+  withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartIsJs,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesJsAsDart = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Cast from '{0}' to '{1}' casts a JS interop value to a Dart type, which "
+      "might not be platform-consistent.",
+  correctionMessage:
+      "Try using conversion methods from 'dart:js_interop' to convert "
+      "between JS interop types and Dart types.",
+  uniqueName: 'invalid_runtime_check_with_js_interop_types_js_as_dart',
+  withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsDart,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Cast from '{0}' to '{1}' casts a JS interop value to an incompatible JS "
+      "interop type, which might not be platform-consistent.",
+  uniqueName:
+      'invalid_runtime_check_with_js_interop_types_js_as_incompatible_js',
+  withArguments:
+      _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesJsIsDart = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Runtime check between '{0}' and '{1}' checks whether a JS interop value "
+      "is a Dart type, which might not be platform-consistent.",
+  uniqueName: 'invalid_runtime_check_with_js_interop_types_js_is_dart',
+  withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsDart,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Runtime check between '{0}' and '{1}' involves a non-trivial runtime "
+      "check between two JS interop types that might not be "
+      "platform-consistent.",
+  correctionMessage:
+      "Try using a JS interop member like 'isA' from 'dart:js_interop' to "
+      "check the underlying type of JS interop values.",
+  uniqueName:
+      'invalid_runtime_check_with_js_interop_types_js_is_inconsistent_js',
+  withArguments:
+      _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs = LinterLintTemplate(
+  name: 'invalid_runtime_check_with_js_interop_types',
+  problemMessage:
+      "Runtime check between '{0}' and '{1}' involves a runtime check between a "
+      "JS interop value and an unrelated JS interop type that will always be "
+      "true and won't check the underlying type.",
+  correctionMessage:
+      "Try using a JS interop member like 'isA' from 'dart:js_interop' to "
+      "check the underlying type of JS interop values, or make the JS "
+      "interop type a supertype using 'implements'.",
+  uniqueName: 'invalid_runtime_check_with_js_interop_types_js_is_unrelated_js',
+  withArguments:
+      _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments invariantBooleans = LinterLintWithoutArguments(
+  name: 'invariant_booleans',
+  problemMessage: "",
+  uniqueName: 'invariant_booleans',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments iterableContainsUnrelatedType =
+    LinterLintWithoutArguments(
+      name: 'iterable_contains_unrelated_type',
+      problemMessage: "",
+      uniqueName: 'iterable_contains_unrelated_type',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments joinReturnWithAssignment =
+    LinterLintWithoutArguments(
+      name: 'join_return_with_assignment',
+      problemMessage: "Assignment could be inlined in 'return' statement.",
+      correctionMessage:
+          "Try inlining the assigned value in the 'return' statement.",
+      uniqueName: 'join_return_with_assignment',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments leadingNewlinesInMultilineStrings =
+    LinterLintWithoutArguments(
+      name: 'leading_newlines_in_multiline_strings',
+      problemMessage:
+          "Missing a newline at the beginning of a multiline string.",
+      correctionMessage: "Try adding a newline at the beginning of the string.",
+      uniqueName: 'leading_newlines_in_multiline_strings',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments libraryAnnotations =
+    LinterLintWithoutArguments(
+      name: 'library_annotations',
+      problemMessage:
+          "This annotation should be attached to a library directive.",
+      correctionMessage: "Try attaching the annotation to a library directive.",
+      hasPublishedDocs: true,
+      uniqueName: 'library_annotations',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+libraryNames = LinterLintTemplate(
+  name: 'library_names',
+  problemMessage:
+      "The library name '{0}' isn't a lower_case_with_underscores identifier.",
+  correctionMessage:
+      "Try changing the name to follow the lower_case_with_underscores "
+      "style.",
+  hasPublishedDocs: true,
+  uniqueName: 'library_names',
+  withArguments: _withArgumentsLibraryNames,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+libraryPrefixes = LinterLintTemplate(
+  name: 'library_prefixes',
+  problemMessage:
+      "The prefix '{0}' isn't a lower_case_with_underscores identifier.",
+  correctionMessage:
+      "Try changing the prefix to follow the lower_case_with_underscores "
+      "style.",
+  hasPublishedDocs: true,
+  uniqueName: 'library_prefixes',
+  withArguments: _withArgumentsLibraryPrefixes,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments libraryPrivateTypesInPublicApi =
+    LinterLintWithoutArguments(
+      name: 'library_private_types_in_public_api',
+      problemMessage: "Invalid use of a private type in a public API.",
+      correctionMessage:
+          "Try making the private type public, or making the API that uses the "
+          "private type also be private.",
+      hasPublishedDocs: true,
+      uniqueName: 'library_private_types_in_public_api',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments linesLongerThan80Chars =
+    LinterLintWithoutArguments(
+      name: 'lines_longer_than_80_chars',
+      problemMessage: "The line length exceeds the 80-character limit.",
+      correctionMessage: "Try breaking the line across multiple lines.",
+      uniqueName: 'lines_longer_than_80_chars',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments listRemoveUnrelatedType =
+    LinterLintWithoutArguments(
+      name: 'list_remove_unrelated_type',
+      problemMessage: "",
+      uniqueName: 'list_remove_unrelated_type',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments literalOnlyBooleanExpressions =
+    LinterLintWithoutArguments(
+      name: 'literal_only_boolean_expressions',
+      problemMessage: "The Boolean expression has a constant value.",
+      correctionMessage: "Try changing the expression.",
+      hasPublishedDocs: true,
+      uniqueName: 'literal_only_boolean_expressions',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+matchingSuperParameters = LinterLintTemplate(
+  name: 'matching_super_parameters',
+  problemMessage:
+      "The super parameter named '{0}'' does not share the same name as the "
+      "corresponding parameter in the super constructor, '{1}'.",
+  correctionMessage:
+      "Try using the name of the corresponding parameter in the super "
+      "constructor.",
+  uniqueName: 'matching_super_parameters',
+  withArguments: _withArgumentsMatchingSuperParameters,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments missingCodeBlockLanguageInDocComment =
+    LinterLintWithoutArguments(
+      name: 'missing_code_block_language_in_doc_comment',
+      problemMessage: "The code block is missing a specified language.",
+      correctionMessage: "Try adding a language to the code block.",
+      uniqueName: 'missing_code_block_language_in_doc_comment',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments missingWhitespaceBetweenAdjacentStrings =
+    LinterLintWithoutArguments(
+      name: 'missing_whitespace_between_adjacent_strings',
+      problemMessage: "Missing whitespace between adjacent strings.",
+      correctionMessage: "Try adding whitespace between the strings.",
+      hasPublishedDocs: true,
+      uniqueName: 'missing_whitespace_between_adjacent_strings',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments noAdjacentStringsInList =
+    LinterLintWithoutArguments(
+      name: 'no_adjacent_strings_in_list',
+      problemMessage: "Don't use adjacent strings in a list literal.",
+      correctionMessage: "Try adding a comma between the strings.",
+      hasPublishedDocs: true,
+      uniqueName: 'no_adjacent_strings_in_list',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments noDefaultCases = LinterLintWithoutArguments(
+  name: 'no_default_cases',
+  problemMessage: "Invalid use of 'default' member in a switch.",
+  correctionMessage:
+      "Try enumerating all the possible values of the switch expression.",
+  uniqueName: 'no_default_cases',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+noDuplicateCaseValues = LinterLintTemplate(
+  name: 'no_duplicate_case_values',
+  problemMessage:
+      "The value of the case clause ('{0}') is equal to the value of an earlier "
+      "case clause ('{1}').",
+  correctionMessage: "Try removing or changing the value.",
+  hasPublishedDocs: true,
+  uniqueName: 'no_duplicate_case_values',
+  withArguments: _withArgumentsNoDuplicateCaseValues,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+noLeadingUnderscoresForLibraryPrefixes = LinterLintTemplate(
+  name: 'no_leading_underscores_for_library_prefixes',
+  problemMessage: "The library prefix '{0}' starts with an underscore.",
+  correctionMessage: "Try renaming the prefix to not start with an underscore.",
+  hasPublishedDocs: true,
+  uniqueName: 'no_leading_underscores_for_library_prefixes',
+  withArguments: _withArgumentsNoLeadingUnderscoresForLibraryPrefixes,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+noLeadingUnderscoresForLocalIdentifiers = LinterLintTemplate(
+  name: 'no_leading_underscores_for_local_identifiers',
+  problemMessage: "The local variable '{0}' starts with an underscore.",
+  correctionMessage:
+      "Try renaming the variable to not start with an underscore.",
+  hasPublishedDocs: true,
+  uniqueName: 'no_leading_underscores_for_local_identifiers',
+  withArguments: _withArgumentsNoLeadingUnderscoresForLocalIdentifiers,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments noLiteralBoolComparisons =
+    LinterLintWithoutArguments(
+      name: 'no_literal_bool_comparisons',
+      problemMessage: "Unnecessary comparison to a boolean literal.",
+      correctionMessage:
+          "Remove the comparison and use the negate `!` operator if necessary.",
+      uniqueName: 'no_literal_bool_comparisons',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments noLogicInCreateState =
+    LinterLintWithoutArguments(
+      name: 'no_logic_in_create_state',
+      problemMessage: "Don't put any logic in 'createState'.",
+      correctionMessage: "Try moving the logic out of 'createState'.",
+      hasPublishedDocs: true,
+      uniqueName: 'no_logic_in_create_state',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+nonConstantIdentifierNames = LinterLintTemplate(
+  name: 'non_constant_identifier_names',
+  problemMessage: "The variable name '{0}' isn't a lowerCamelCase identifier.",
+  correctionMessage:
+      "Try changing the name to follow the lowerCamelCase style.",
+  hasPublishedDocs: true,
+  uniqueName: 'non_constant_identifier_names',
+  withArguments: _withArgumentsNonConstantIdentifierNames,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments noopPrimitiveOperations =
+    LinterLintWithoutArguments(
+      name: 'noop_primitive_operations',
+      problemMessage: "The expression has no effect and can be removed.",
+      correctionMessage: "Try removing the expression.",
+      uniqueName: 'noop_primitive_operations',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments noRuntimetypeTostring =
+    LinterLintWithoutArguments(
+      name: 'no_runtimeType_toString',
+      problemMessage:
+          "Using 'toString' on a 'Type' is not safe in production code.",
+      correctionMessage:
+          "Try removing the usage of 'toString' or restructuring the code.",
+      uniqueName: 'no_runtimeType_toString',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments noSelfAssignments = LinterLintWithoutArguments(
+  name: 'no_self_assignments',
+  problemMessage: "The variable or property is being assigned to itself.",
+  correctionMessage: "Try removing the assignment that has no direct effect.",
+  uniqueName: 'no_self_assignments',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments noSoloTests = LinterLintWithoutArguments(
+  name: 'no_solo_tests',
+  problemMessage: "Don't commit soloed tests.",
+  correctionMessage:
+      "Try removing the 'soloTest' annotation or 'solo_' prefix.",
+  hasPublishedDocs: true,
+  uniqueName: 'no_solo_tests',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments noTrailingSpaces = LinterLintWithoutArguments(
+  name: 'no_trailing_spaces',
+  problemMessage: "Don't create string literals with trailing spaces in tests.",
+  correctionMessage: "Try removing the trailing spaces.",
+  hasPublishedDocs: true,
+  uniqueName: 'no_trailing_spaces',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments noWildcardVariableUses =
+    LinterLintWithoutArguments(
+      name: 'no_wildcard_variable_uses',
+      problemMessage: "The referenced identifier is a wildcard.",
+      correctionMessage: "Use an identifier name that is not a wildcard.",
+      hasPublishedDocs: true,
+      uniqueName: 'no_wildcard_variable_uses',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+nullCheckOnNullableTypeParameter = LinterLintWithoutArguments(
+  name: 'null_check_on_nullable_type_parameter',
+  problemMessage:
+      "The null check operator shouldn't be used on a variable whose type is a "
+      "potentially nullable type parameter.",
+  correctionMessage: "Try explicitly testing for 'null'.",
+  hasPublishedDocs: true,
+  uniqueName: 'null_check_on_nullable_type_parameter',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments nullClosures = LinterLintWithoutArguments(
+  name: 'null_closures',
+  problemMessage: "Closure can't be 'null' because it might be invoked.",
+  correctionMessage: "Try providing a non-null closure.",
+  uniqueName: 'null_closures',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments omitLocalVariableTypes =
+    LinterLintWithoutArguments(
+      name: 'omit_local_variable_types',
+      problemMessage: "Unnecessary type annotation on a local variable.",
+      correctionMessage: "Try removing the type annotation.",
+      uniqueName: 'omit_local_variable_types',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+omitObviousLocalVariableTypes = LinterLintWithoutArguments(
+  name: 'omit_obvious_local_variable_types',
+  problemMessage:
+      "Omit the type annotation on a local variable when the type is obvious.",
+  correctionMessage: "Try removing the type annotation.",
+  uniqueName: 'omit_obvious_local_variable_types',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments omitObviousPropertyTypes =
+    LinterLintWithoutArguments(
+      name: 'omit_obvious_property_types',
+      problemMessage: "The type annotation isn't needed because it is obvious.",
+      correctionMessage: "Try removing the type annotation.",
+      uniqueName: 'omit_obvious_property_types',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+oneMemberAbstracts = LinterLintTemplate(
+  name: 'one_member_abstracts',
+  problemMessage: "Unnecessary use of an abstract class.",
+  correctionMessage:
+      "Try making '{0}' a top-level function and removing the class.",
+  uniqueName: 'one_member_abstracts',
+  withArguments: _withArgumentsOneMemberAbstracts,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments onlyThrowErrors = LinterLintWithoutArguments(
+  name: 'only_throw_errors',
+  problemMessage:
+      "Don't throw instances of classes that don't extend either 'Exception' or "
+      "'Error'.",
+  correctionMessage: "Try throwing a different class of object.",
+  hasPublishedDocs: true,
+  uniqueName: 'only_throw_errors',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+overriddenFields = LinterLintTemplate(
+  name: 'overridden_fields',
+  problemMessage: "Field overrides a field inherited from '{0}'.",
+  correctionMessage:
+      "Try removing the field, overriding the getter and setter if "
+      "necessary.",
+  hasPublishedDocs: true,
+  uniqueName: 'overridden_fields',
+  withArguments: _withArgumentsOverriddenFields,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments packageApiDocs = LinterLintWithoutArguments(
+  name: 'package_api_docs',
+  problemMessage: "Missing documentation for public API.",
+  correctionMessage: "Try adding a documentation comment.",
+  uniqueName: 'package_api_docs',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+packageNames = LinterLintTemplate(
+  name: 'package_names',
+  problemMessage:
+      "The package name '{0}' isn't a lower_case_with_underscores identifier.",
+  correctionMessage:
+      "Try changing the name to follow the lower_case_with_underscores "
+      "style.",
+  hasPublishedDocs: true,
+  uniqueName: 'package_names',
+  withArguments: _withArgumentsPackageNames,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+packagePrefixedLibraryNames = LinterLintTemplate(
+  name: 'package_prefixed_library_names',
+  problemMessage:
+      "The library name is not a dot-separated path prefixed by the package "
+      "name.",
+  correctionMessage: "Try changing the name to '{0}'.",
+  hasPublishedDocs: true,
+  uniqueName: 'package_prefixed_library_names',
+  withArguments: _withArgumentsPackagePrefixedLibraryNames,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+parameterAssignments = LinterLintTemplate(
+  name: 'parameter_assignments',
+  problemMessage: "Invalid assignment to the parameter '{0}'.",
+  correctionMessage: "Try using a local variable in place of the parameter.",
+  uniqueName: 'parameter_assignments',
+  withArguments: _withArgumentsParameterAssignments,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferAdjacentStringConcatenation =
+    LinterLintWithoutArguments(
+      name: 'prefer_adjacent_string_concatenation',
+      problemMessage:
+          "String literals shouldn't be concatenated by the '+' operator.",
+      correctionMessage: "Try removing the operator to use adjacent strings.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_adjacent_string_concatenation',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferAssertsInInitializerLists =
+    LinterLintWithoutArguments(
+      name: 'prefer_asserts_in_initializer_lists',
+      problemMessage: "Assert should be in the initializer list.",
+      correctionMessage: "Try moving the assert to the initializer list.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_asserts_in_initializer_lists',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferAssertsWithMessage =
+    LinterLintWithoutArguments(
+      name: 'prefer_asserts_with_message',
+      problemMessage: "Missing a message in an assert.",
+      correctionMessage: "Try adding a message to the assert.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_asserts_with_message',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferBoolInAsserts =
+    LinterLintWithoutArguments(
+      name: 'prefer_bool_in_asserts',
+      problemMessage: "",
+      uniqueName: 'prefer_bool_in_asserts',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferCollectionLiterals =
+    LinterLintWithoutArguments(
+      name: 'prefer_collection_literals',
+      problemMessage: "Unnecessary constructor invocation.",
+      correctionMessage: "Try using a collection literal.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_collection_literals',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferConditionalAssignment =
+    LinterLintWithoutArguments(
+      name: 'prefer_conditional_assignment',
+      problemMessage:
+          "The 'if' statement could be replaced by a null-aware assignment.",
+      correctionMessage:
+          "Try using the '??=' operator to conditionally assign a value.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_conditional_assignment',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferConstConstructors =
+    LinterLintWithoutArguments(
+      name: 'prefer_const_constructors',
+      problemMessage:
+          "Use 'const' with the constructor to improve performance.",
+      correctionMessage:
+          "Try adding the 'const' keyword to the constructor invocation.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_const_constructors',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferConstConstructorsInImmutables =
+    LinterLintWithoutArguments(
+      name: 'prefer_const_constructors_in_immutables',
+      problemMessage:
+          "Constructors in '@immutable' classes should be declared as 'const'.",
+      correctionMessage: "Try adding 'const' to the constructor declaration.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_const_constructors_in_immutables',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferConstDeclarations =
+    LinterLintWithoutArguments(
+      name: 'prefer_const_declarations',
+      problemMessage:
+          "Use 'const' for final variables initialized to a constant value.",
+      correctionMessage: "Try replacing 'final' with 'const'.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_const_declarations',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferConstLiteralsToCreateImmutables =
+    LinterLintWithoutArguments(
+      name: 'prefer_const_literals_to_create_immutables',
+      problemMessage:
+          "Use 'const' literals as arguments to constructors of '@immutable' "
+          "classes.",
+      correctionMessage: "Try adding 'const' before the literal.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_const_literals_to_create_immutables',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferConstructorsOverStaticMethods =
+    LinterLintWithoutArguments(
+      name: 'prefer_constructors_over_static_methods',
+      problemMessage: "Static method should be a constructor.",
+      correctionMessage: "Try converting the method into a constructor.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_constructors_over_static_methods',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferContainsAlwaysFalse = LinterLintWithoutArguments(
+  name: 'prefer_contains',
+  problemMessage:
+      "Always 'false' because 'indexOf' is always greater than or equal to -1.",
+  uniqueName: 'prefer_contains_always_false',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferContainsAlwaysTrue = LinterLintWithoutArguments(
+  name: 'prefer_contains',
+  problemMessage:
+      "Always 'true' because 'indexOf' is always greater than or equal to -1.",
+  uniqueName: 'prefer_contains_always_true',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferContainsUseContains =
+    LinterLintWithoutArguments(
+      name: 'prefer_contains',
+      problemMessage: "Unnecessary use of 'indexOf' to test for containment.",
+      correctionMessage: "Try using 'contains'.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_contains_use_contains',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferDoubleQuotes =
+    LinterLintWithoutArguments(
+      name: 'prefer_double_quotes',
+      problemMessage: "Unnecessary use of single quotes.",
+      correctionMessage:
+          "Try using double quotes unless the string contains double quotes.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_double_quotes',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferEqualForDefaultValues =
+    LinterLintWithoutArguments(
+      name: 'prefer_equal_for_default_values',
+      problemMessage: "",
+      uniqueName: 'prefer_equal_for_default_values',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferExpressionFunctionBodies =
+    LinterLintWithoutArguments(
+      name: 'prefer_expression_function_bodies',
+      problemMessage: "Unnecessary use of a block function body.",
+      correctionMessage: "Try using an expression function body.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_expression_function_bodies',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+preferFinalFields = LinterLintTemplate(
+  name: 'prefer_final_fields',
+  problemMessage: "The private field {0} could be 'final'.",
+  correctionMessage: "Try making the field 'final'.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_final_fields',
+  withArguments: _withArgumentsPreferFinalFields,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferFinalInForEachPattern =
+    LinterLintWithoutArguments(
+      name: 'prefer_final_in_for_each',
+      problemMessage: "The pattern should be final.",
+      correctionMessage: "Try making the pattern final.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_final_in_for_each_pattern',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+preferFinalInForEachVariable = LinterLintTemplate(
+  name: 'prefer_final_in_for_each',
+  problemMessage: "The variable '{0}' should be final.",
+  correctionMessage: "Try making the variable final.",
+  uniqueName: 'prefer_final_in_for_each_variable',
+  withArguments: _withArgumentsPreferFinalInForEachVariable,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferFinalLocals = LinterLintWithoutArguments(
+  name: 'prefer_final_locals',
+  problemMessage: "Local variables should be final.",
+  correctionMessage: "Try making the variable final.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_final_locals',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+preferFinalParameters = LinterLintTemplate(
+  name: 'prefer_final_parameters',
+  problemMessage: "The parameter '{0}' should be final.",
+  correctionMessage: "Try making the parameter final.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_final_parameters',
+  withArguments: _withArgumentsPreferFinalParameters,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferForeach = LinterLintWithoutArguments(
+  name: 'prefer_foreach',
+  problemMessage:
+      "Use 'forEach' and a tear-off rather than a 'for' loop to apply a function "
+      "to every element.",
+  correctionMessage:
+      "Try using 'forEach' and a tear-off rather than a 'for' loop.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_foreach',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferForElementsToMapFromiterable =
+    LinterLintWithoutArguments(
+      name: 'prefer_for_elements_to_map_fromIterable',
+      problemMessage: "Use 'for' elements when building maps from iterables.",
+      correctionMessage: "Try using a collection literal with a 'for' element.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_for_elements_to_map_fromIterable',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferFunctionDeclarationsOverVariables = LinterLintWithoutArguments(
+  name: 'prefer_function_declarations_over_variables',
+  problemMessage:
+      "Use a function declaration rather than a variable assignment to bind a "
+      "function to a name.",
+  correctionMessage:
+      "Try rewriting the closure assignment as a function declaration.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_function_declarations_over_variables',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+preferGenericFunctionTypeAliases = LinterLintTemplate(
+  name: 'prefer_generic_function_type_aliases',
+  problemMessage: "Use the generic function type syntax in 'typedef's.",
+  correctionMessage: "Try using the generic function type syntax ('{0}').",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_generic_function_type_aliases',
+  withArguments: _withArgumentsPreferGenericFunctionTypeAliases,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferIfElementsToConditionalExpressions =
+    LinterLintWithoutArguments(
+      name: 'prefer_if_elements_to_conditional_expressions',
+      problemMessage: "Use an 'if' element to conditionally add elements.",
+      correctionMessage:
+          "Try using an 'if' element rather than a conditional expression.",
+      uniqueName: 'prefer_if_elements_to_conditional_expressions',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferIfNullOperators =
+    LinterLintWithoutArguments(
+      name: 'prefer_if_null_operators',
+      problemMessage:
+          "Use the '??' operator rather than '?:' when testing for 'null'.",
+      correctionMessage: "Try rewriting the code to use '??'.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_if_null_operators',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+preferInitializingFormals = LinterLintTemplate(
+  name: 'prefer_initializing_formals',
+  problemMessage:
+      "Use an initializing formal to assign a parameter to a field.",
+  correctionMessage:
+      "Try using an initialing formal ('this.{0}') to initialize the field.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_initializing_formals',
+  withArguments: _withArgumentsPreferInitializingFormals,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferInlinedAddsMultiple =
+    LinterLintWithoutArguments(
+      name: 'prefer_inlined_adds',
+      problemMessage: "The addition of multiple list items could be inlined.",
+      correctionMessage: "Try adding the items to the list literal directly.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_inlined_adds_multiple',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferInlinedAddsSingle =
+    LinterLintWithoutArguments(
+      name: 'prefer_inlined_adds',
+      problemMessage: "The addition of a list item could be inlined.",
+      correctionMessage: "Try adding the item to the list literal directly.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_inlined_adds_single',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferInterpolationToComposeStrings =
+    LinterLintWithoutArguments(
+      name: 'prefer_interpolation_to_compose_strings',
+      problemMessage: "Use interpolation to compose strings and values.",
+      correctionMessage:
+          "Try using string interpolation to build the composite string.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_interpolation_to_compose_strings',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferIntLiterals = LinterLintWithoutArguments(
+  name: 'prefer_int_literals',
+  problemMessage: "Unnecessary use of a 'double' literal.",
+  correctionMessage: "Try using an 'int' literal.",
+  uniqueName: 'prefer_int_literals',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferIsEmptyAlwaysFalse = LinterLintWithoutArguments(
+  name: 'prefer_is_empty',
+  problemMessage:
+      "The comparison is always 'false' because the length is always greater "
+      "than or equal to 0.",
+  uniqueName: 'prefer_is_empty_always_false',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferIsEmptyAlwaysTrue = LinterLintWithoutArguments(
+  name: 'prefer_is_empty',
+  problemMessage:
+      "The comparison is always 'true' because the length is always greater than "
+      "or equal to 0.",
+  uniqueName: 'prefer_is_empty_always_true',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferIsEmptyUseIsEmpty =
+    LinterLintWithoutArguments(
+      name: 'prefer_is_empty',
+      problemMessage:
+          "Use 'isEmpty' instead of 'length' to test whether the collection is "
+          "empty.",
+      correctionMessage: "Try rewriting the expression to use 'isEmpty'.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_is_empty_use_is_empty',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferIsEmptyUseIsNotEmpty = LinterLintWithoutArguments(
+  name: 'prefer_is_empty',
+  problemMessage:
+      "Use 'isNotEmpty' instead of 'length' to test whether the collection is "
+      "empty.",
+  correctionMessage: "Try rewriting the expression to use 'isNotEmpty'.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_is_empty_use_is_not_empty',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferIsNotEmpty = LinterLintWithoutArguments(
+  name: 'prefer_is_not_empty',
+  problemMessage:
+      "Use 'isNotEmpty' rather than negating the result of 'isEmpty'.",
+  correctionMessage: "Try rewriting the expression to use 'isNotEmpty'.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_is_not_empty',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferIsNotOperator =
+    LinterLintWithoutArguments(
+      name: 'prefer_is_not_operator',
+      problemMessage:
+          "Use the 'is!' operator rather than negating the value of the 'is' "
+          "operator.",
+      correctionMessage:
+          "Try rewriting the condition to use the 'is!' operator.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_is_not_operator',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferIterableWheretype =
+    LinterLintWithoutArguments(
+      name: 'prefer_iterable_whereType',
+      problemMessage: "Use 'whereType' to select elements of a given type.",
+      correctionMessage: "Try rewriting the expression to use 'whereType'.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_iterable_whereType',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+preferMixin = LinterLintTemplate(
+  name: 'prefer_mixin',
+  problemMessage: "Only mixins should be mixed in.",
+  correctionMessage: "Try converting '{0}' to a mixin.",
+  uniqueName: 'prefer_mixin',
+  withArguments: _withArgumentsPreferMixin,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferNullAwareMethodCalls = LinterLintWithoutArguments(
+  name: 'prefer_null_aware_method_calls',
+  problemMessage:
+      "Use a null-aware invocation of the 'call' method rather than explicitly "
+      "testing for 'null'.",
+  correctionMessage: "Try using '?.call()' to invoke the function.",
+  uniqueName: 'prefer_null_aware_method_calls',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferNullAwareOperators =
+    LinterLintWithoutArguments(
+      name: 'prefer_null_aware_operators',
+      problemMessage:
+          "Use the null-aware operator '?.' rather than an explicit 'null' "
+          "comparison.",
+      correctionMessage: "Try using '?.'.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_null_aware_operators',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferRelativeImports =
+    LinterLintWithoutArguments(
+      name: 'prefer_relative_imports',
+      problemMessage: "Use relative imports for files in the 'lib' directory.",
+      correctionMessage: "Try converting the URI to a relative URI.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_relative_imports',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferSingleQuotes =
+    LinterLintWithoutArguments(
+      name: 'prefer_single_quotes',
+      problemMessage: "Unnecessary use of double quotes.",
+      correctionMessage:
+          "Try using single quotes unless the string contains single quotes.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_single_quotes',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferSpreadCollections =
+    LinterLintWithoutArguments(
+      name: 'prefer_spread_collections',
+      problemMessage: "The addition of multiple elements could be inlined.",
+      correctionMessage:
+          "Try using the spread operator ('...') to inline the addition.",
+      uniqueName: 'prefer_spread_collections',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments preferTypingUninitializedVariablesForField =
+    LinterLintWithoutArguments(
+      name: 'prefer_typing_uninitialized_variables',
+      problemMessage:
+          "An uninitialized field should have an explicit type annotation.",
+      correctionMessage: "Try adding a type annotation.",
+      hasPublishedDocs: true,
+      uniqueName: 'prefer_typing_uninitialized_variables_for_field',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+preferTypingUninitializedVariablesForLocalVariable = LinterLintWithoutArguments(
+  name: 'prefer_typing_uninitialized_variables',
+  problemMessage:
+      "An uninitialized variable should have an explicit type annotation.",
+  correctionMessage: "Try adding a type annotation.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_typing_uninitialized_variables_for_local_variable',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments preferVoidToNull = LinterLintWithoutArguments(
+  name: 'prefer_void_to_null',
+  problemMessage: "Unnecessary use of the type 'Null'.",
+  correctionMessage: "Try using 'void' instead.",
+  hasPublishedDocs: true,
+  uniqueName: 'prefer_void_to_null',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments provideDeprecationMessage =
+    LinterLintWithoutArguments(
+      name: 'provide_deprecation_message',
+      problemMessage: "Missing a deprecation message.",
+      correctionMessage:
+          "Try using the constructor to provide a message "
+          "('@Deprecated(\"message\")').",
+      hasPublishedDocs: true,
+      uniqueName: 'provide_deprecation_message',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments publicMemberApiDocs =
+    LinterLintWithoutArguments(
+      name: 'public_member_api_docs',
+      problemMessage: "Missing documentation for a public member.",
+      correctionMessage: "Try adding documentation for the member.",
+      hasPublishedDocs: true,
+      uniqueName: 'public_member_api_docs',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+recursiveGetters = LinterLintTemplate(
+  name: 'recursive_getters',
+  problemMessage: "The getter '{0}' recursively returns itself.",
+  correctionMessage: "Try changing the value being returned.",
+  hasPublishedDocs: true,
+  uniqueName: 'recursive_getters',
+  withArguments: _withArgumentsRecursiveGetters,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments removeDeprecationsInBreakingVersions =
+    LinterLintWithoutArguments(
+      name: 'remove_deprecations_in_breaking_versions',
+      problemMessage: "Remove deprecated elements in breaking versions.",
+      correctionMessage: "Try removing the deprecated element.",
+      hasPublishedDocs: true,
+      uniqueName: 'remove_deprecations_in_breaking_versions',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments requireTrailingCommas =
+    LinterLintWithoutArguments(
+      name: 'require_trailing_commas',
+      problemMessage: "Missing a required trailing comma.",
+      correctionMessage: "Try adding a trailing comma.",
+      uniqueName: 'require_trailing_commas',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+securePubspecUrls = LinterLintTemplate(
+  name: 'secure_pubspec_urls',
+  problemMessage:
+      "The '{0}' protocol shouldn't be used because it isn't secure.",
+  correctionMessage: "Try using a secure protocol, such as 'https'.",
+  hasPublishedDocs: true,
+  uniqueName: 'secure_pubspec_urls',
+  withArguments: _withArgumentsSecurePubspecUrls,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments sizedBoxForWhitespace =
+    LinterLintWithoutArguments(
+      name: 'sized_box_for_whitespace',
+      problemMessage: "Use a 'SizedBox' to add whitespace to a layout.",
+      correctionMessage: "Try using a 'SizedBox' rather than a 'Container'.",
+      hasPublishedDocs: true,
+      uniqueName: 'sized_box_for_whitespace',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+sizedBoxShrinkExpand = LinterLintTemplate(
+  name: 'sized_box_shrink_expand',
+  problemMessage:
+      "Use 'SizedBox.{0}' to avoid needing to specify the 'height' and 'width'.",
+  correctionMessage:
+      "Try using 'SizedBox.{0}' and removing the 'height' and 'width' "
+      "arguments.",
+  hasPublishedDocs: true,
+  uniqueName: 'sized_box_shrink_expand',
+  withArguments: _withArgumentsSizedBoxShrinkExpand,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments slashForDocComments =
+    LinterLintWithoutArguments(
+      name: 'slash_for_doc_comments',
+      problemMessage: "Use the end-of-line form ('///') for doc comments.",
+      correctionMessage: "Try rewriting the comment to use '///'.",
+      hasPublishedDocs: true,
+      uniqueName: 'slash_for_doc_comments',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+sortChildPropertiesLast = LinterLintTemplate(
+  name: 'sort_child_properties_last',
+  problemMessage:
+      "The '{0}' argument should be last in widget constructor invocations.",
+  correctionMessage: "Try moving the argument to the end of the argument list.",
+  hasPublishedDocs: true,
+  uniqueName: 'sort_child_properties_last',
+  withArguments: _withArgumentsSortChildPropertiesLast,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+sortConstructorsFirst = LinterLintWithoutArguments(
+  name: 'sort_constructors_first',
+  problemMessage:
+      "Constructor declarations should be before non-constructor declarations.",
+  correctionMessage:
+      "Try moving the constructor declaration before all other members.",
+  hasPublishedDocs: true,
+  uniqueName: 'sort_constructors_first',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments sortPubDependencies =
+    LinterLintWithoutArguments(
+      name: 'sort_pub_dependencies',
+      problemMessage: "Dependencies not sorted alphabetically.",
+      correctionMessage:
+          "Try sorting the dependencies alphabetically (A to Z).",
+      hasPublishedDocs: true,
+      uniqueName: 'sort_pub_dependencies',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments sortUnnamedConstructorsFirst =
+    LinterLintWithoutArguments(
+      name: 'sort_unnamed_constructors_first',
+      problemMessage: "Invalid location for the unnamed constructor.",
+      correctionMessage:
+          "Try moving the unnamed constructor before all other constructors.",
+      hasPublishedDocs: true,
+      uniqueName: 'sort_unnamed_constructors_first',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments specifyNonobviousLocalVariableTypes =
+    LinterLintWithoutArguments(
+      name: 'specify_nonobvious_local_variable_types',
+      problemMessage:
+          "Specify the type of a local variable when the type is non-obvious.",
+      correctionMessage: "Try adding a type annotation.",
+      uniqueName: 'specify_nonobvious_local_variable_types',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments specifyNonobviousPropertyTypes =
+    LinterLintWithoutArguments(
+      name: 'specify_nonobvious_property_types',
+      problemMessage: "A type annotation is needed because it isn't obvious.",
+      correctionMessage: "Try adding a type annotation.",
+      uniqueName: 'specify_nonobvious_property_types',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments strictTopLevelInferenceAddType =
+    LinterLintWithoutArguments(
+      name: 'strict_top_level_inference',
+      problemMessage: "Missing type annotation.",
+      correctionMessage: "Try adding a type annotation.",
+      uniqueName: 'strict_top_level_inference_add_type',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+strictTopLevelInferenceReplaceKeyword = LinterLintTemplate(
+  name: 'strict_top_level_inference',
+  problemMessage: "Missing type annotation.",
+  correctionMessage: "Try replacing '{0}' with a type annotation.",
+  uniqueName: 'strict_top_level_inference_replace_keyword',
+  withArguments: _withArgumentsStrictTopLevelInferenceReplaceKeyword,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments strictTopLevelInferenceSplitToTypes =
+    LinterLintWithoutArguments(
+      name: 'strict_top_level_inference',
+      problemMessage: "Missing type annotation.",
+      correctionMessage:
+          "Try splitting the declaration and specify the different type "
+          "annotations.",
+      uniqueName: 'strict_top_level_inference_split_to_types',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments superGoesLast = LinterLintWithoutArguments(
+  name: 'super_goes_last',
+  problemMessage: "",
+  uniqueName: 'super_goes_last',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments switchOnType = LinterLintWithoutArguments(
+  name: 'switch_on_type',
+  problemMessage: "Avoid switch statements on a 'Type'.",
+  correctionMessage: "Try using pattern matching on a variable instead.",
+  hasPublishedDocs: true,
+  uniqueName: 'switch_on_type',
+  expectedTypes: [],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+testTypesInEquals = LinterLintTemplate(
+  name: 'test_types_in_equals',
+  problemMessage: "Missing type test for '{0}' in '=='.",
+  correctionMessage: "Try testing the type of '{0}'.",
+  hasPublishedDocs: true,
+  uniqueName: 'test_types_in_equals',
+  withArguments: _withArgumentsTestTypesInEquals,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+throwInFinally = LinterLintTemplate(
+  name: 'throw_in_finally',
+  problemMessage: "Use of '{0}' in 'finally' block.",
+  correctionMessage: "Try moving the '{0}' outside the 'finally' block.",
+  hasPublishedDocs: true,
+  uniqueName: 'throw_in_finally',
+  withArguments: _withArgumentsThrowInFinally,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+tightenTypeOfInitializingFormals = LinterLintWithoutArguments(
+  name: 'tighten_type_of_initializing_formals',
+  problemMessage:
+      "Use a type annotation rather than 'assert' to enforce non-nullability.",
+  correctionMessage: "Try adding a type annotation and removing the 'assert'.",
+  hasPublishedDocs: true,
+  uniqueName: 'tighten_type_of_initializing_formals',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments typeAnnotatePublicApis =
+    LinterLintWithoutArguments(
+      name: 'type_annotate_public_apis',
+      problemMessage: "Missing type annotation on a public API.",
+      correctionMessage: "Try adding a type annotation.",
+      hasPublishedDocs: true,
+      uniqueName: 'type_annotate_public_apis',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments typeInitFormals = LinterLintWithoutArguments(
+  name: 'type_init_formals',
+  problemMessage: "Don't needlessly type annotate initializing formals.",
+  correctionMessage: "Try removing the type.",
+  hasPublishedDocs: true,
+  uniqueName: 'type_init_formals',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments typeLiteralInConstantPattern =
+    LinterLintWithoutArguments(
+      name: 'type_literal_in_constant_pattern',
+      problemMessage: "Use 'TypeName _' instead of a type literal.",
+      correctionMessage: "Replace with 'TypeName _'.",
+      hasPublishedDocs: true,
+      uniqueName: 'type_literal_in_constant_pattern',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unawaitedFutures = LinterLintWithoutArguments(
+  name: 'unawaited_futures',
+  problemMessage:
+      "Missing an 'await' for the 'Future' computed by this expression.",
+  correctionMessage:
+      "Try adding an 'await' or wrapping the expression with 'unawaited'.",
+  hasPublishedDocs: true,
+  uniqueName: 'unawaited_futures',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unintendedHtmlInDocComment =
+    LinterLintWithoutArguments(
+      name: 'unintended_html_in_doc_comment',
+      problemMessage: "Angle brackets will be interpreted as HTML.",
+      correctionMessage:
+          "Try using backticks around the content with angle brackets, or try "
+          "replacing `<` with `&lt;` and `>` with `&gt;`.",
+      hasPublishedDocs: true,
+      uniqueName: 'unintended_html_in_doc_comment',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryAsync = LinterLintWithoutArguments(
+  name: 'unnecessary_async',
+  problemMessage: "Don't make a function 'async' if it doesn't use 'await'.",
+  correctionMessage: "Try removing the 'async' modifier.",
+  uniqueName: 'unnecessary_async',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryAwaitInReturn =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_await_in_return',
+      problemMessage: "Unnecessary 'await'.",
+      correctionMessage: "Try removing the 'await'.",
+      uniqueName: 'unnecessary_await_in_return',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryBraceInStringInterps =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_brace_in_string_interps',
+      problemMessage: "Unnecessary braces in a string interpolation.",
+      correctionMessage: "Try removing the braces.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_brace_in_string_interps',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryBreaks = LinterLintWithoutArguments(
+  name: 'unnecessary_breaks',
+  problemMessage: "Unnecessary 'break' statement.",
+  correctionMessage: "Try removing the 'break'.",
+  uniqueName: 'unnecessary_breaks',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryConst = LinterLintWithoutArguments(
+  name: 'unnecessary_const',
+  problemMessage: "Unnecessary 'const' keyword.",
+  correctionMessage: "Try removing the keyword.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_const',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryConstructorName =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_constructor_name',
+      problemMessage: "Unnecessary '.new' constructor name.",
+      correctionMessage: "Try removing the '.new'.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_constructor_name',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryFinalWithoutType =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_final',
+      problemMessage: "Local variables should not be marked as 'final'.",
+      correctionMessage: "Replace 'final' with 'var'.",
+      uniqueName: 'unnecessary_final_without_type',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryFinalWithType =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_final',
+      problemMessage: "Local variables should not be marked as 'final'.",
+      correctionMessage: "Remove the 'final'.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_final_with_type',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryGettersSetters =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_getters_setters',
+      problemMessage: "Unnecessary use of getter and setter to wrap a field.",
+      correctionMessage:
+          "Try removing the getter and setter and renaming the field.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_getters_setters',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unnecessaryIgnore = LinterLintTemplate(
+  name: 'unnecessary_ignore',
+  problemMessage:
+      "The diagnostic '{0}' isn't produced at this location so it doesn't need "
+      "to be ignored.",
+  correctionMessage: "Try removing the ignore comment.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_ignore',
+  withArguments: _withArgumentsUnnecessaryIgnore,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unnecessaryIgnoreFile = LinterLintTemplate(
+  name: 'unnecessary_ignore',
+  problemMessage:
+      "The diagnostic '{0}' isn't produced in this file so it doesn't need to be "
+      "ignored.",
+  correctionMessage: "Try removing the ignore comment.",
+  uniqueName: 'unnecessary_ignore_file',
+  withArguments: _withArgumentsUnnecessaryIgnoreFile,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unnecessaryIgnoreName = LinterLintTemplate(
+  name: 'unnecessary_ignore',
+  problemMessage:
+      "The diagnostic '{0}' isn't produced at this location so it doesn't need "
+      "to be ignored.",
+  correctionMessage: "Try removing the name from the list.",
+  uniqueName: 'unnecessary_ignore_name',
+  withArguments: _withArgumentsUnnecessaryIgnoreName,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unnecessaryIgnoreNameFile = LinterLintTemplate(
+  name: 'unnecessary_ignore',
+  problemMessage:
+      "The diagnostic '{0}' isn't produced in this file so it doesn't need to be "
+      "ignored.",
+  correctionMessage: "Try removing the name from the list.",
+  uniqueName: 'unnecessary_ignore_name_file',
+  withArguments: _withArgumentsUnnecessaryIgnoreNameFile,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryLambdas =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_lambdas',
+      problemMessage: "Closure should be a tearoff.",
+      correctionMessage: "Try using a tearoff rather than a closure.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_lambdas',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryLate = LinterLintWithoutArguments(
+  name: 'unnecessary_late',
+  problemMessage: "Unnecessary 'late' modifier.",
+  correctionMessage: "Try removing the 'late'.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_late',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+unnecessaryLibraryDirective = LinterLintWithoutArguments(
+  name: 'unnecessary_library_directive',
+  problemMessage:
+      "Library directives without comments or annotations should be avoided.",
+  correctionMessage: "Try deleting the library directive.",
+  uniqueName: 'unnecessary_library_directive',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryLibraryName =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_library_name',
+      problemMessage: "Library names are not necessary.",
+      correctionMessage: "Remove the library name.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_library_name',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryNew = LinterLintWithoutArguments(
+  name: 'unnecessary_new',
+  problemMessage: "Unnecessary 'new' keyword.",
+  correctionMessage: "Try removing the 'new' keyword.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_new',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+unnecessaryNullableForFinalVariableDeclarations = LinterLintWithoutArguments(
+  name: 'unnecessary_nullable_for_final_variable_declarations',
+  problemMessage: "Type could be non-nullable.",
+  correctionMessage: "Try changing the type to be non-nullable.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_nullable_for_final_variable_declarations',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryNullAwareAssignments =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_null_aware_assignments',
+      problemMessage: "Unnecessary assignment of 'null'.",
+      correctionMessage: "Try removing the assignment.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_null_aware_assignments',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+unnecessaryNullAwareOperatorOnExtensionOnNullable = LinterLintWithoutArguments(
+  name: 'unnecessary_null_aware_operator_on_extension_on_nullable',
+  problemMessage:
+      "Unnecessary use of a null-aware operator to invoke an extension method on "
+      "a nullable type.",
+  correctionMessage: "Try removing the '?'.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_null_aware_operator_on_extension_on_nullable',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryNullChecks =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_null_checks',
+      problemMessage: "Unnecessary use of a null check ('!').",
+      correctionMessage: "Try removing the null check.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_null_checks',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryNullInIfNullOperators =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_null_in_if_null_operators',
+      problemMessage: "Unnecessary use of '??' with 'null'.",
+      correctionMessage:
+          "Try removing the '??' operator and the 'null' operand.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_null_in_if_null_operators',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryOverrides =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_overrides',
+      problemMessage: "Unnecessary override.",
+      correctionMessage:
+          "Try adding behavior in the overriding member or removing the "
+          "override.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_overrides',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryParenthesis =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_parenthesis',
+      problemMessage: "Unnecessary use of parentheses.",
+      correctionMessage: "Try removing the parentheses.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_parenthesis',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryRawStrings =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_raw_strings',
+      problemMessage: "Unnecessary use of a raw string.",
+      correctionMessage: "Try using a normal string.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_raw_strings',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryStatements =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_statements',
+      problemMessage: "Unnecessary statement.",
+      correctionMessage: "Try completing the statement or breaking it up.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_statements',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryStringEscapes =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_string_escapes',
+      problemMessage: "Unnecessary escape in string literal.",
+      correctionMessage: "Remove the '\\' escape.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_string_escapes',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryStringInterpolations =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_string_interpolations',
+      problemMessage: "Unnecessary use of string interpolation.",
+      correctionMessage:
+          "Try replacing the string literal with the variable name.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_string_interpolations',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryThis = LinterLintWithoutArguments(
+  name: 'unnecessary_this',
+  problemMessage: "Unnecessary 'this.' qualifier.",
+  correctionMessage: "Try removing 'this.'.",
+  hasPublishedDocs: true,
+  uniqueName: 'unnecessary_this',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryToListInSpreads =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_to_list_in_spreads',
+      problemMessage: "Unnecessary use of 'toList' in a spread.",
+      correctionMessage: "Try removing the invocation of 'toList'.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_to_list_in_spreads',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryUnawaited =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_unawaited',
+      problemMessage: "Unnecessary use of 'unawaited'.",
+      correctionMessage:
+          "Try removing the use of 'unawaited', as the unawaited element is "
+          "annotated with '@awaitNotRequired'.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_unawaited',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments unnecessaryUnderscores =
+    LinterLintWithoutArguments(
+      name: 'unnecessary_underscores',
+      problemMessage: "Unnecessary use of multiple underscores.",
+      correctionMessage: "Try using '_'.",
+      hasPublishedDocs: true,
+      uniqueName: 'unnecessary_underscores',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unreachableFromMain = LinterLintTemplate(
+  name: 'unreachable_from_main',
+  problemMessage: "Unreachable member '{0}' in an executable library.",
+  correctionMessage: "Try referencing the member or removing it.",
+  uniqueName: 'unreachable_from_main',
+  withArguments: _withArgumentsUnreachableFromMain,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+unrelatedTypeEqualityChecksInExpression = LinterLintTemplate(
+  name: 'unrelated_type_equality_checks',
+  problemMessage:
+      "The type of the right operand ('{0}') isn't a subtype or a supertype of "
+      "the left operand ('{1}').",
+  correctionMessage: "Try changing one or both of the operands.",
+  hasPublishedDocs: true,
+  uniqueName: 'unrelated_type_equality_checks_in_expression',
+  withArguments: _withArgumentsUnrelatedTypeEqualityChecksInExpression,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+/// Object p1: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0, required Object p1})
+>
+unrelatedTypeEqualityChecksInPattern = LinterLintTemplate(
+  name: 'unrelated_type_equality_checks',
+  problemMessage:
+      "The type of the operand ('{0}') isn't a subtype or a supertype of the "
+      "value being matched ('{1}').",
+  correctionMessage: "Try changing one or both of the operands.",
+  hasPublishedDocs: true,
+  uniqueName: 'unrelated_type_equality_checks_in_pattern',
+  withArguments: _withArgumentsUnrelatedTypeEqualityChecksInPattern,
+  expectedTypes: [ExpectedType.object, ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unsafeHtmlAttribute = LinterLintTemplate(
+  name: 'unsafe_html',
+  problemMessage: "Assigning to the attribute '{0}' is unsafe.",
+  correctionMessage: "Try finding a different way to implement the page.",
+  uniqueName: 'unsafe_html_attribute',
+  withArguments: _withArgumentsUnsafeHtmlAttribute,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unsafeHtmlConstructor = LinterLintTemplate(
+  name: 'unsafe_html',
+  problemMessage: "Invoking the constructor '{0}' is unsafe.",
+  correctionMessage: "Try finding a different way to implement the page.",
+  uniqueName: 'unsafe_html_constructor',
+  withArguments: _withArgumentsUnsafeHtmlConstructor,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+unsafeHtmlMethod = LinterLintTemplate(
+  name: 'unsafe_html',
+  problemMessage: "Invoking the method '{0}' is unsafe.",
+  correctionMessage: "Try finding a different way to implement the page.",
+  uniqueName: 'unsafe_html_method',
+  withArguments: _withArgumentsUnsafeHtmlMethod,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments unsafeVariance = LinterLintWithoutArguments(
+  name: 'unsafe_variance',
+  problemMessage:
+      "This type is unsafe: a type parameter occurs in a non-covariant position.",
+  correctionMessage:
+      "Try using a more general type that doesn't contain any type "
+      "parameters in such a position.",
+  hasPublishedDocs: true,
+  uniqueName: 'unsafe_variance',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useBuildContextSynchronouslyAsyncUse =
+    LinterLintWithoutArguments(
+      name: 'use_build_context_synchronously',
+      problemMessage: "Don't use 'BuildContext's across async gaps.",
+      correctionMessage:
+          "Try rewriting the code to not use the 'BuildContext', or guard the "
+          "use with a 'mounted' check.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_build_context_synchronously_async_use',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments
+useBuildContextSynchronouslyWrongMounted = LinterLintWithoutArguments(
+  name: 'use_build_context_synchronously',
+  problemMessage:
+      "Don't use 'BuildContext's across async gaps, guarded by an unrelated "
+      "'mounted' check.",
+  correctionMessage:
+      "Guard a 'State.context' use with a 'mounted' check on the State, and "
+      "other BuildContext use with a 'mounted' check on the BuildContext.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_build_context_synchronously_wrong_mounted',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useColoredBox = LinterLintWithoutArguments(
+  name: 'use_colored_box',
+  problemMessage:
+      "Use a 'ColoredBox' rather than a 'Container' with only a 'Color'.",
+  correctionMessage: "Try replacing the 'Container' with a 'ColoredBox'.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_colored_box',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useDecoratedBox = LinterLintWithoutArguments(
+  name: 'use_decorated_box',
+  problemMessage:
+      "Use 'DecoratedBox' rather than a 'Container' with only a 'Decoration'.",
+  correctionMessage: "Try replacing the 'Container' with a 'DecoratedBox'.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_decorated_box',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useEnums = LinterLintWithoutArguments(
+  name: 'use_enums',
+  problemMessage: "Class should be an enum.",
+  correctionMessage: "Try using an enum rather than a class.",
+  uniqueName: 'use_enums',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useFullHexValuesForFlutterColors =
+    LinterLintWithoutArguments(
+      name: 'use_full_hex_values_for_flutter_colors',
+      problemMessage:
+          "Instances of 'Color' should be created using an 8-digit hexadecimal "
+          "integer (such as '0xFFFFFFFF').",
+      hasPublishedDocs: true,
+      uniqueName: 'use_full_hex_values_for_flutter_colors',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+useFunctionTypeSyntaxForParameters = LinterLintTemplate(
+  name: 'use_function_type_syntax_for_parameters',
+  problemMessage:
+      "Use the generic function type syntax to declare the parameter '{0}'.",
+  correctionMessage: "Try using the generic function type syntax.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_function_type_syntax_for_parameters',
+  withArguments: _withArgumentsUseFunctionTypeSyntaxForParameters,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useIfNullToConvertNullsToBools =
+    LinterLintWithoutArguments(
+      name: 'use_if_null_to_convert_nulls_to_bools',
+      problemMessage:
+          "Use an if-null operator to convert a 'null' to a 'bool'.",
+      correctionMessage: "Try using an if-null operator.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_if_null_to_convert_nulls_to_bools',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+useIsEvenRatherThanModulo = LinterLintTemplate(
+  name: 'use_is_even_rather_than_modulo',
+  problemMessage: "Use '{0}' rather than '% 2'.",
+  correctionMessage: "Try using '{0}'.",
+  uniqueName: 'use_is_even_rather_than_modulo',
+  withArguments: _withArgumentsUseIsEvenRatherThanModulo,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments
+useKeyInWidgetConstructors = LinterLintWithoutArguments(
+  name: 'use_key_in_widget_constructors',
+  problemMessage:
+      "Constructors for public widgets should have a named 'key' parameter.",
+  correctionMessage: "Try adding a named parameter to the constructor.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_key_in_widget_constructors',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useLateForPrivateFieldsAndVariables =
+    LinterLintWithoutArguments(
+      name: 'use_late_for_private_fields_and_variables',
+      problemMessage:
+          "Use 'late' for private members with a non-nullable type.",
+      correctionMessage: "Try making adding the modifier 'late'.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_late_for_private_fields_and_variables',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+useNamedConstants = LinterLintTemplate(
+  name: 'use_named_constants',
+  problemMessage:
+      "Use the constant '{0}' rather than a constructor returning the same "
+      "object.",
+  correctionMessage: "Try using '{0}'.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_named_constants',
+  withArguments: _withArgumentsUseNamedConstants,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useNullAwareElements =
+    LinterLintWithoutArguments(
+      name: 'use_null_aware_elements',
+      problemMessage:
+          "Use the null-aware marker '?' rather than a null check via an 'if'.",
+      correctionMessage: "Try using '?'.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_null_aware_elements',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments useRawStrings = LinterLintWithoutArguments(
+  name: 'use_raw_strings',
+  problemMessage: "Use a raw string to avoid using escapes.",
+  correctionMessage:
+      "Try making the string a raw string and removing the escapes.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_raw_strings',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useRethrowWhenPossible =
+    LinterLintWithoutArguments(
+      name: 'use_rethrow_when_possible',
+      problemMessage: "Use 'rethrow' to rethrow a caught exception.",
+      correctionMessage: "Try replacing the 'throw' with a 'rethrow'.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_rethrow_when_possible',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments useSettersToChangeProperties =
+    LinterLintWithoutArguments(
+      name: 'use_setters_to_change_properties',
+      problemMessage: "The method is used to change a property.",
+      correctionMessage: "Try converting the method to a setter.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_setters_to_change_properties',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments useStringBuffers = LinterLintWithoutArguments(
+  name: 'use_string_buffers',
+  problemMessage: "Use a string buffer rather than '+' to compose strings.",
+  correctionMessage: "Try writing the parts of a string to a string buffer.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_string_buffers',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useStringInPartOfDirectives =
+    LinterLintWithoutArguments(
+      name: 'use_string_in_part_of_directives',
+      problemMessage: "The part-of directive uses a library name.",
+      correctionMessage:
+          "Try converting the directive to use the URI of the library.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_string_in_part_of_directives',
+      expectedTypes: [],
+    );
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+useSuperParametersMultiple = LinterLintTemplate(
+  name: 'use_super_parameters',
+  problemMessage: "Parameters '{0}' could be super parameters.",
+  correctionMessage: "Trying converting '{0}' to super parameters.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_super_parameters_multiple',
+  withArguments: _withArgumentsUseSuperParametersMultiple,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// Parameters:
+/// Object p0: undocumented
+const DiagnosticWithArguments<
+  LocatableDiagnostic Function({required Object p0})
+>
+useSuperParametersSingle = LinterLintTemplate(
+  name: 'use_super_parameters',
+  problemMessage: "Parameter '{0}' could be a super parameter.",
+  correctionMessage: "Trying converting '{0}' to a super parameter.",
+  hasPublishedDocs: true,
+  uniqueName: 'use_super_parameters_single',
+  withArguments: _withArgumentsUseSuperParametersSingle,
+  expectedTypes: [ExpectedType.object],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments useTestThrowsMatchers =
+    LinterLintWithoutArguments(
+      name: 'use_test_throws_matchers',
+      problemMessage:
+          "Use the 'throwsA' matcher instead of using 'fail' when there is no "
+          "exception thrown.",
+      correctionMessage:
+          "Try removing the try-catch and using 'throwsA' to expect an "
+          "exception.",
+      uniqueName: 'use_test_throws_matchers',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments useToAndAsIfApplicable =
+    LinterLintWithoutArguments(
+      name: 'use_to_and_as_if_applicable',
+      problemMessage: "Start the name of the method with 'to' or 'as'.",
+      correctionMessage: "Try renaming the method to use either 'to' or 'as'.",
+      uniqueName: 'use_to_and_as_if_applicable',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments useTruncatingDivision =
+    LinterLintWithoutArguments(
+      name: 'use_truncating_division',
+      problemMessage: "Use truncating division.",
+      correctionMessage:
+          "Try using truncating division, '~/', instead of regular division "
+          "('/') followed by 'toInt()'.",
+      hasPublishedDocs: true,
+      uniqueName: 'use_truncating_division',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments validRegexps = LinterLintWithoutArguments(
+  name: 'valid_regexps',
+  problemMessage: "Invalid regular expression syntax.",
+  correctionMessage: "Try correcting the regular expression.",
+  hasPublishedDocs: true,
+  uniqueName: 'valid_regexps',
+  expectedTypes: [],
+);
+
+/// No parameters.
+const LinterLintWithoutArguments visitRegisteredNodes =
+    LinterLintWithoutArguments(
+      name: 'visit_registered_nodes',
+      problemMessage: "Declare 'visit' methods for all registered node types.",
+      correctionMessage:
+          "Try declaring a 'visit' method for all registered node types.",
+      hasPublishedDocs: true,
+      uniqueName: 'visit_registered_nodes',
+      expectedTypes: [],
+    );
+
+/// No parameters.
+const LinterLintWithoutArguments voidChecks = LinterLintWithoutArguments(
+  name: 'void_checks',
+  problemMessage: "Assignment to a variable of type 'void'.",
+  correctionMessage:
+      "Try removing the assignment or changing the type of the variable.",
+  hasPublishedDocs: true,
+  uniqueName: 'void_checks',
+  expectedTypes: [],
+);
+
+LocatableDiagnostic _withArgumentsAlwaysDeclareReturnTypesOfFunctions({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.alwaysDeclareReturnTypesOfFunctions, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAlwaysDeclareReturnTypesOfMethods({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.alwaysDeclareReturnTypesOfMethods, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAlwaysSpecifyTypesReplaceKeyword({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.alwaysSpecifyTypesReplaceKeyword, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAlwaysSpecifyTypesSpecifyType({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.alwaysSpecifyTypesSpecifyType, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAnalyzerPublicApiBadType({
+  required String types,
+}) {
+  return LocatableDiagnosticImpl(diag.analyzerPublicApiBadType, [types]);
+}
+
+LocatableDiagnostic _withArgumentsAnalyzerPublicApiExperimentalInconsistency({
+  required String types,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.analyzerPublicApiExperimentalInconsistency,
+    [types],
+  );
+}
+
+LocatableDiagnostic _withArgumentsAnalyzerPublicApiExportsNonPublicName({
+  required String elements,
+}) {
+  return LocatableDiagnosticImpl(diag.analyzerPublicApiExportsNonPublicName, [
+    elements,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAnnotateOverrides({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.annotateOverrides, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAnnotateRedeclares({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.annotateRedeclares, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidCatchingErrorsSubclass({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidCatchingErrorsSubclass, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidEqualsAndHashCodeOnMutableClasses({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidEqualsAndHashCodeOnMutableClasses, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidEscapingInnerQuotes({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidEscapingInnerQuotes, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidRenamingMethodParameters({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidRenamingMethodParameters, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidShadowingTypeParameters({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidShadowingTypeParameters, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidSingleCascadeInExpressionStatements({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.avoidSingleCascadeInExpressionStatements,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsAvoidTypesAsParameterNamesFormalParameter({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.avoidTypesAsParameterNamesFormalParameter,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsAvoidTypesAsParameterNamesTypeParameter({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidTypesAsParameterNamesTypeParameter, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsAvoidUnusedConstructorParameters({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.avoidUnusedConstructorParameters, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsAwaitOnlyFutures({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.awaitOnlyFutures, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsCamelCaseExtensions({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.camelCaseExtensions, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsCamelCaseTypes({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.camelCaseTypes, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsCollectionMethodsUnrelatedType({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.collectionMethodsUnrelatedType, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsConditionalUriDoesNotExist({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.conditionalUriDoesNotExist, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsConstantIdentifierNames({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.constantIdentifierNames, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsControlFlowInFinally({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.controlFlowInFinally, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsCurlyBracesInFlowControlStructures({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.curlyBracesInFlowControlStructures, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDependOnReferencedPackages({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.dependOnReferencedPackages, [p0]);
+}
+
+LocatableDiagnostic
+_withArgumentsDeprecatedMemberUseFromSamePackageWithMessage({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.deprecatedMemberUseFromSamePackageWithMessage,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsDeprecatedMemberUseFromSamePackageWithoutMessage({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.deprecatedMemberUseFromSamePackageWithoutMessage,
+    [p0],
+  );
+}
+
+LocatableDiagnostic _withArgumentsDirectivesOrderingDart({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.directivesOrderingDart, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsDirectivesOrderingPackageBeforeRelative({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.directivesOrderingPackageBeforeRelative, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsExhaustiveCases({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.exhaustiveCases, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsFileNames({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.fileNames, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsHashAndEquals({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.hashAndEquals, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsImplicitReopen({
+  required Object p0,
+  required Object p1,
+  required Object p2,
+  required Object p3,
+}) {
+  return LocatableDiagnosticImpl(diag.implicitReopen, [p0, p1, p2, p3]);
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartAsJs({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesDartAsJs,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartIsJs({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesDartIsJs,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsDart({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesJsAsDart,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsDart({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesJsIsDart,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic
+_withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(
+    diag.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
+    [p0, p1],
+  );
+}
+
+LocatableDiagnostic _withArgumentsLibraryNames({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.libraryNames, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsLibraryPrefixes({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.libraryPrefixes, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsMatchingSuperParameters({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.matchingSuperParameters, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsNoDuplicateCaseValues({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.noDuplicateCaseValues, [p0, p1]);
+}
+
+LocatableDiagnostic _withArgumentsNoLeadingUnderscoresForLibraryPrefixes({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.noLeadingUnderscoresForLibraryPrefixes, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNoLeadingUnderscoresForLocalIdentifiers({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.noLeadingUnderscoresForLocalIdentifiers, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsNonConstantIdentifierNames({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.nonConstantIdentifierNames, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsOneMemberAbstracts({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.oneMemberAbstracts, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsOverriddenFields({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.overriddenFields, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPackageNames({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.packageNames, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPackagePrefixedLibraryNames({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.packagePrefixedLibraryNames, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsParameterAssignments({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.parameterAssignments, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPreferFinalFields({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.preferFinalFields, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPreferFinalInForEachVariable({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.preferFinalInForEachVariable, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPreferFinalParameters({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.preferFinalParameters, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPreferGenericFunctionTypeAliases({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.preferGenericFunctionTypeAliases, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPreferInitializingFormals({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.preferInitializingFormals, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsPreferMixin({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.preferMixin, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsRecursiveGetters({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.recursiveGetters, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsSecurePubspecUrls({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.securePubspecUrls, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsSizedBoxShrinkExpand({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.sizedBoxShrinkExpand, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsSortChildPropertiesLast({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.sortChildPropertiesLast, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsStrictTopLevelInferenceReplaceKeyword({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.strictTopLevelInferenceReplaceKeyword, [
+    p0,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsTestTypesInEquals({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.testTypesInEquals, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsThrowInFinally({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.throwInFinally, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryIgnore({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryIgnore, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryIgnoreFile({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryIgnoreFile, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryIgnoreName({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryIgnoreName, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnnecessaryIgnoreNameFile({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.unnecessaryIgnoreNameFile, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnreachableFromMain({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unreachableFromMain, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnrelatedTypeEqualityChecksInExpression({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.unrelatedTypeEqualityChecksInExpression, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUnrelatedTypeEqualityChecksInPattern({
+  required Object p0,
+  required Object p1,
+}) {
+  return LocatableDiagnosticImpl(diag.unrelatedTypeEqualityChecksInPattern, [
+    p0,
+    p1,
+  ]);
+}
+
+LocatableDiagnostic _withArgumentsUnsafeHtmlAttribute({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unsafeHtmlAttribute, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsafeHtmlConstructor({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unsafeHtmlConstructor, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUnsafeHtmlMethod({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.unsafeHtmlMethod, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUseFunctionTypeSyntaxForParameters({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.useFunctionTypeSyntaxForParameters, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUseIsEvenRatherThanModulo({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.useIsEvenRatherThanModulo, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUseNamedConstants({required Object p0}) {
+  return LocatableDiagnosticImpl(diag.useNamedConstants, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUseSuperParametersMultiple({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.useSuperParametersMultiple, [p0]);
+}
+
+LocatableDiagnostic _withArgumentsUseSuperParametersSingle({
+  required Object p0,
+}) {
+  return LocatableDiagnosticImpl(diag.useSuperParametersSingle, [p0]);
+}
diff --git a/pkg/linter/lib/src/extensions.dart b/pkg/linter/lib/src/extensions.dart
index 47f2cd5..28b4f7a 100644
--- a/pkg/linter/lib/src/extensions.dart
+++ b/pkg/linter/lib/src/extensions.dart
@@ -28,10 +28,14 @@
 
   /// Whether this is the child of a private compilation unit member.
   bool get inPrivateMember {
-    var parent = this.parent;
+    var parent = this.parent?.parent;
     return switch (parent) {
-      NamedCompilationUnitMember() => parent.name.isPrivate,
+      ClassDeclaration() => parent.namePart.typeName.isPrivate,
+      EnumDeclaration() => parent.namePart.typeName.isPrivate,
       ExtensionDeclaration() => parent.name == null || parent.name.isPrivate,
+      ExtensionTypeDeclaration() =>
+        parent.primaryConstructor.typeName.isPrivate,
+      MixinDeclaration() => parent.name.isPrivate,
       _ => false,
     };
   }
@@ -205,7 +209,7 @@
     var enumConstants = <DartObject, Set<FieldElement>>{};
     for (var field in fields) {
       // Ensure static const.
-      if (field.isSynthetic || !field.isConst || !field.isStatic) {
+      if (field.isOriginGetterSetter || !field.isConst || !field.isStatic) {
         continue;
       }
       // Check for type equality.
@@ -460,7 +464,7 @@
 
 extension FieldDeclarationExtension on FieldDeclaration {
   bool get isInvalidExtensionTypeField =>
-      !isStatic && parent is ExtensionTypeDeclaration;
+      !isStatic && parent?.parent is ExtensionTypeDeclaration;
 }
 
 extension FunctionBodyExtension on FunctionBody? {
diff --git a/pkg/linter/lib/src/lint_codes.dart b/pkg/linter/lib/src/lint_codes.dart
index 6b99a21..a2936c5 100644
--- a/pkg/linter/lib/src/lint_codes.dart
+++ b/pkg/linter/lib/src/lint_codes.dart
@@ -4,4 +4,51 @@
 
 import 'analyzer.dart';
 
-part 'lint_codes.g.dart';
+class LinterLintCode extends LintCodeWithExpectedTypes {
+  const LinterLintCode({
+    required super.name,
+    required super.problemMessage,
+    required super.uniqueName,
+    super.expectedTypes,
+    super.correctionMessage,
+    super.hasPublishedDocs,
+  });
+
+  @override
+  String get url {
+    if (hasPublishedDocs) {
+      return 'https://dart.dev/diagnostics/$name';
+    }
+    return 'https://dart.dev/lints/$name';
+  }
+}
+
+final class LinterLintTemplate<T extends Function> extends LinterLintCode
+    implements DiagnosticWithArguments<T> {
+  @override
+  final T withArguments;
+
+  /// Initialize a newly created error code to have the given [name].
+  const LinterLintTemplate({
+    required super.name,
+    required super.problemMessage,
+    required this.withArguments,
+    required super.expectedTypes,
+    required super.uniqueName,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+  });
+}
+
+final class LinterLintWithoutArguments extends LinterLintCode
+    with DiagnosticWithoutArguments {
+  /// Initialize a newly created error code to have the given [name].
+  const LinterLintWithoutArguments({
+    required super.name,
+    required super.problemMessage,
+    required super.expectedTypes,
+    required super.uniqueName,
+    super.correctionMessage,
+    super.hasPublishedDocs = false,
+  });
+}
diff --git a/pkg/linter/lib/src/lint_codes.g.dart b/pkg/linter/lib/src/lint_codes.g.dart
deleted file mode 100644
index bc249c2..0000000
--- a/pkg/linter/lib/src/lint_codes.g.dart
+++ /dev/null
@@ -1,4499 +0,0 @@
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for 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.
-//
-// Instead modify 'pkg/linter/messages.yaml' and run
-// 'dart run pkg/linter/tool/generate_lints.dart' to update.
-
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-// Generator currently outputs double quotes for simplicity.
-// ignore_for_file: prefer_single_quotes
-
-// Generated `withArguments` methods always use block bodies for simplicity.
-// ignore_for_file: prefer_expression_function_bodies
-
-part of 'lint_codes.dart';
-
-class LinterLintCode extends LintCodeWithExpectedTypes {
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  alwaysDeclareReturnTypesOfFunctions = LinterLintTemplate(
-    name: LintNames.always_declare_return_types,
-    problemMessage: "The function '{0}' should have a return type but doesn't.",
-    correctionMessage: "Try adding a return type to the function.",
-    hasPublishedDocs: true,
-    uniqueName: 'always_declare_return_types_of_functions',
-    uniqueNameCheck: 'LintCode.always_declare_return_types_of_functions',
-    withArguments: _withArgumentsAlwaysDeclareReturnTypesOfFunctions,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  alwaysDeclareReturnTypesOfMethods = LinterLintTemplate(
-    name: LintNames.always_declare_return_types,
-    problemMessage: "The method '{0}' should have a return type but doesn't.",
-    correctionMessage: "Try adding a return type to the method.",
-    hasPublishedDocs: true,
-    uniqueName: 'always_declare_return_types_of_methods',
-    uniqueNameCheck: 'LintCode.always_declare_return_types_of_methods',
-    withArguments: _withArgumentsAlwaysDeclareReturnTypesOfMethods,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments alwaysPutControlBodyOnNewLine =
-      LinterLintWithoutArguments(
-        name: LintNames.always_put_control_body_on_new_line,
-        problemMessage: "Statement should be on a separate line.",
-        correctionMessage: "Try moving the statement to a new line.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.always_put_control_body_on_new_line',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  alwaysPutRequiredNamedParametersFirst = LinterLintWithoutArguments(
-    name: LintNames.always_put_required_named_parameters_first,
-    problemMessage:
-        "Required named parameters should be before optional named parameters.",
-    correctionMessage:
-        "Try moving the required named parameter to be before any optional "
-        "named parameters.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.always_put_required_named_parameters_first',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments alwaysSpecifyTypesAddType =
-      LinterLintWithoutArguments(
-        name: LintNames.always_specify_types,
-        problemMessage: "Missing type annotation.",
-        correctionMessage: "Try adding a type annotation.",
-        uniqueName: 'always_specify_types_add_type',
-        uniqueNameCheck: 'LintCode.always_specify_types_add_type',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  alwaysSpecifyTypesReplaceKeyword = LinterLintTemplate(
-    name: LintNames.always_specify_types,
-    problemMessage: "Missing type annotation.",
-    correctionMessage: "Try replacing '{0}' with '{1}'.",
-    uniqueName: 'always_specify_types_replace_keyword',
-    uniqueNameCheck: 'LintCode.always_specify_types_replace_keyword',
-    withArguments: _withArgumentsAlwaysSpecifyTypesReplaceKeyword,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  alwaysSpecifyTypesSpecifyType = LinterLintTemplate(
-    name: LintNames.always_specify_types,
-    problemMessage: "Missing type annotation.",
-    correctionMessage: "Try specifying the type '{0}'.",
-    uniqueName: 'always_specify_types_specify_type',
-    uniqueNameCheck: 'LintCode.always_specify_types_specify_type',
-    withArguments: _withArgumentsAlwaysSpecifyTypesSpecifyType,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments alwaysSpecifyTypesSplitToTypes =
-      LinterLintWithoutArguments(
-        name: LintNames.always_specify_types,
-        problemMessage: "Missing type annotation.",
-        correctionMessage:
-            "Try splitting the declaration and specify the different type "
-            "annotations.",
-        uniqueName: 'always_specify_types_split_to_types',
-        uniqueNameCheck: 'LintCode.always_specify_types_split_to_types',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments alwaysUsePackageImports =
-      LinterLintWithoutArguments(
-        name: LintNames.always_use_package_imports,
-        problemMessage:
-            "Use 'package:' imports for files in the 'lib' directory.",
-        correctionMessage: "Try converting the URI to a 'package:' URI.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.always_use_package_imports',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments analyzerElementModelTrackingBad =
-      LinterLintWithoutArguments(
-        name: LintNames.analyzer_element_model_tracking_bad,
-        problemMessage: "Bad tracking annotation for this member.",
-        uniqueNameCheck: 'LintCode.analyzer_element_model_tracking_bad',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  analyzerElementModelTrackingMoreThanOne = LinterLintWithoutArguments(
-    name: LintNames.analyzer_element_model_tracking_more_than_one,
-    problemMessage: "There can be only one tracking annotation.",
-    uniqueNameCheck: 'LintCode.analyzer_element_model_tracking_more_than_one',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments analyzerElementModelTrackingZero =
-      LinterLintWithoutArguments(
-        name: LintNames.analyzer_element_model_tracking_zero,
-        problemMessage: "No required tracking annotation.",
-        uniqueNameCheck: 'LintCode.analyzer_element_model_tracking_zero',
-        expectedTypes: [],
-      );
-
-  /// Lint issued if a file in the analyzer public API contains a `part`
-  /// directive that points to a file that's not in the analyzer public API.
-  ///
-  /// The rationale for this lint is that if such a `part` directive were to
-  /// exist, it would cause all the members of the part file to become part of
-  /// the analyzer's public API, even though they don't appear to be public API.
-  ///
-  /// Note that the analyzer doesn't make very much use of `part` directives,
-  /// but it may do so in the future once augmentations and enhanced parts are
-  /// supported.
-  ///
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  analyzerPublicApiBadPartDirective = LinterLintWithoutArguments(
-    name: LintNames.analyzer_public_api_bad_part_directive,
-    problemMessage:
-        "Part directives in the analyzer public API should point to files in the "
-        "analyzer public API.",
-    uniqueNameCheck: 'LintCode.analyzer_public_api_bad_part_directive',
-    expectedTypes: [],
-  );
-
-  /// Lint issued if a method, function, getter, or setter in the analyzer
-  /// public API makes use of a type that's not part of the analyzer public API,
-  /// or if a non-public type appears in an `extends`, `implements`, `with`, or
-  /// `on` clause.
-  ///
-  /// The reason this is a problem is that it makes it possible for analyzer
-  /// clients to implicitly reference analyzer internal types. This can happen
-  /// in many ways; here are some examples:
-  ///
-  /// - If `C` is a public API class that implements `B`, and `B` is a private
-  ///   class with a getter called `x`, then a client can access `B.x` via `C`.
-  ///
-  /// - If `f` has return type `T`, and `T` is a private class with a getter
-  ///   called `x`, then a client can access `T.x` via `f().x`.
-  ///
-  /// - If `f` has type `void Function(T)`, and `T` is a private class with a
-  ///   getter called `x`, then a client can access `T.x` via
-  ///   `var g = f; g = (t) { print(t.x); }`.
-  ///
-  /// This lint can be suppressed either with an `ignore` comment, or by marking
-  /// the referenced type with `@AnalyzerPublicApi(...)`. The advantage of
-  /// marking the referenced type with `@AnalyzerPublicApi(...)` is that it
-  /// causes the members of referenced type to be checked by this lint.
-  ///
-  /// Parameters:
-  /// String types: list of types, separated by `, `
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required String types})
-  >
-  analyzerPublicApiBadType = LinterLintTemplate(
-    name: LintNames.analyzer_public_api_bad_type,
-    problemMessage:
-        "Element makes use of type(s) which is not part of the analyzer public "
-        "API: {0}.",
-    uniqueNameCheck: 'LintCode.analyzer_public_api_bad_type',
-    withArguments: _withArgumentsAnalyzerPublicApiBadType,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Lint issued if an element in the analyzer public API makes use
-  /// of a type that's annotated `@experimental`, but the element
-  /// itself is not annotated `@experimental`.
-  ///
-  /// The reason this is a problem is that it makes it possible for
-  /// analyzer clients to implicitly reference analyzer experimental
-  /// types. This can happen in many ways; here are some examples:
-  ///
-  /// - If `C` is a non-experimental public API class that implements
-  ///   `B`, and `B` is an experimental public API class with a getter
-  ///   called `x`, then a client can access `B.x` via `C`.
-  ///
-  /// - If `f` has return type `T`, and `T` is an experimental public
-  ///   API class with a getter called `x`, then a client can access
-  ///   `T.x` via `f().x`.
-  ///
-  /// - If `f` has type `void Function(T)`, and `T` is an experimental
-  ///   public API class with a getter called `x`, then a client can
-  ///   access `T.x` via `var g = f; g = (t) { print(t.x); }`.
-  ///
-  /// Parameters:
-  /// String types: list of types, separated by `, `
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required String types})
-  >
-  analyzerPublicApiExperimentalInconsistency = LinterLintTemplate(
-    name: LintNames.analyzer_public_api_experimental_inconsistency,
-    problemMessage:
-        "Element makes use of experimental type(s), but is not itself marked with "
-        "`@experimental`: {0}.",
-    uniqueNameCheck: 'LintCode.analyzer_public_api_experimental_inconsistency',
-    withArguments: _withArgumentsAnalyzerPublicApiExperimentalInconsistency,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Lint issued if a file in the analyzer public API contains an `export`
-  /// directive that exports a name that's not part of the analyzer public API.
-  ///
-  /// This lint can be suppressed either with an `ignore` comment, or by marking
-  /// the exported declaration with `@AnalyzerPublicApi(...)`. The advantage of
-  /// marking the exported declaration with `@AnalyzerPublicApi(...)` is that it
-  /// causes the members of the exported declaration to be checked by this lint.
-  ///
-  /// Parameters:
-  /// String elements: List of elements, separated by `, `
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required String elements})
-  >
-  analyzerPublicApiExportsNonPublicName = LinterLintTemplate(
-    name: LintNames.analyzer_public_api_exports_non_public_name,
-    problemMessage:
-        "Export directive exports element(s) that are not part of the analyzer "
-        "public API: {0}.",
-    uniqueNameCheck: 'LintCode.analyzer_public_api_exports_non_public_name',
-    withArguments: _withArgumentsAnalyzerPublicApiExportsNonPublicName,
-    expectedTypes: [ExpectedType.string],
-  );
-
-  /// Lint issued if a top level declaration in the analyzer public API has a
-  /// name ending in `Impl`.
-  ///
-  /// Such declarations are not meant to be members of the analyzer public API,
-  /// so if they are either declared outside of `package:analyzer/src`, or
-  /// marked with `@AnalyzerPublicApi(...)`, that is almost certainly a mistake.
-  ///
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  analyzerPublicApiImplInPublicApi = LinterLintWithoutArguments(
-    name: LintNames.analyzer_public_api_impl_in_public_api,
-    problemMessage:
-        "Declarations in the analyzer public API should not end in \"Impl\".",
-    uniqueNameCheck: 'LintCode.analyzer_public_api_impl_in_public_api',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  annotateOverrides = LinterLintTemplate(
-    name: LintNames.annotate_overrides,
-    problemMessage:
-        "The member '{0}' overrides an inherited member but isn't annotated with "
-        "'@override'.",
-    correctionMessage: "Try adding the '@override' annotation.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.annotate_overrides',
-    withArguments: _withArgumentsAnnotateOverrides,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  annotateRedeclares = LinterLintTemplate(
-    name: LintNames.annotate_redeclares,
-    problemMessage:
-        "The member '{0}' is redeclaring but isn't annotated with '@redeclare'.",
-    correctionMessage: "Try adding the '@redeclare' annotation.",
-    uniqueNameCheck: 'LintCode.annotate_redeclares',
-    withArguments: _withArgumentsAnnotateRedeclares,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidAnnotatingWithDynamic =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_annotating_with_dynamic,
-        problemMessage: "Unnecessary 'dynamic' type annotation.",
-        correctionMessage: "Try removing the type 'dynamic'.",
-        uniqueNameCheck: 'LintCode.avoid_annotating_with_dynamic',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidBoolLiteralsInConditionalExpressions = LinterLintWithoutArguments(
-    name: LintNames.avoid_bool_literals_in_conditional_expressions,
-    problemMessage:
-        "Conditional expressions with a 'bool' literal can be simplified.",
-    correctionMessage:
-        "Try rewriting the expression to use either '&&' or '||'.",
-    uniqueNameCheck: 'LintCode.avoid_bool_literals_in_conditional_expressions',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidCatchesWithoutOnClauses = LinterLintWithoutArguments(
-    name: LintNames.avoid_catches_without_on_clauses,
-    problemMessage:
-        "Catch clause should use 'on' to specify the type of exception being "
-        "caught.",
-    correctionMessage: "Try adding an 'on' clause before the 'catch'.",
-    uniqueNameCheck: 'LintCode.avoid_catches_without_on_clauses',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidCatchingErrorsClass =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_catching_errors,
-        problemMessage: "The type 'Error' should not be caught.",
-        correctionMessage:
-            "Try removing the catch or catching an 'Exception' instead.",
-        uniqueName: 'avoid_catching_errors_class',
-        uniqueNameCheck: 'LintCode.avoid_catching_errors_class',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  avoidCatchingErrorsSubclass = LinterLintTemplate(
-    name: LintNames.avoid_catching_errors,
-    problemMessage:
-        "The type '{0}' should not be caught because it is a subclass of 'Error'.",
-    correctionMessage:
-        "Try removing the catch or catching an 'Exception' instead.",
-    uniqueName: 'avoid_catching_errors_subclass',
-    uniqueNameCheck: 'LintCode.avoid_catching_errors_subclass',
-    withArguments: _withArgumentsAvoidCatchingErrorsSubclass,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidClassesWithOnlyStaticMembers = LinterLintWithoutArguments(
-    name: LintNames.avoid_classes_with_only_static_members,
-    problemMessage: "Classes should define instance members.",
-    correctionMessage:
-        "Try adding instance behavior or moving the members out of the class.",
-    uniqueNameCheck: 'LintCode.avoid_classes_with_only_static_members',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidDoubleAndIntChecks =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_double_and_int_checks,
-        problemMessage: "Explicit check for double or int.",
-        correctionMessage: "Try removing the check.",
-        uniqueNameCheck: 'LintCode.avoid_double_and_int_checks',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidDynamicCalls =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_dynamic_calls,
-        problemMessage:
-            "Method invocation or property access on a 'dynamic' target.",
-        correctionMessage: "Try giving the target a type.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_dynamic_calls',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidEmptyElse =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_empty_else,
-        problemMessage: "Empty statements are not allowed in an 'else' clause.",
-        correctionMessage:
-            "Try removing the empty statement or removing the else clause.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_empty_else',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  avoidEqualsAndHashCodeOnMutableClasses = LinterLintTemplate(
-    name: LintNames.avoid_equals_and_hash_code_on_mutable_classes,
-    problemMessage:
-        "The method '{0}' should not be overridden in classes not annotated with "
-        "'@immutable'.",
-    correctionMessage:
-        "Try removing the override or annotating the class with '@immutable'.",
-    uniqueNameCheck: 'LintCode.avoid_equals_and_hash_code_on_mutable_classes',
-    withArguments: _withArgumentsAvoidEqualsAndHashCodeOnMutableClasses,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  avoidEscapingInnerQuotes = LinterLintTemplate(
-    name: LintNames.avoid_escaping_inner_quotes,
-    problemMessage: "Unnecessary escape of '{0}'.",
-    correctionMessage: "Try changing the outer quotes to '{1}'.",
-    uniqueNameCheck: 'LintCode.avoid_escaping_inner_quotes',
-    withArguments: _withArgumentsAvoidEscapingInnerQuotes,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidFieldInitializersInConstClasses = LinterLintWithoutArguments(
-    name: LintNames.avoid_field_initializers_in_const_classes,
-    problemMessage: "Fields in 'const' classes should not have initializers.",
-    correctionMessage:
-        "Try converting the field to a getter or initialize the field in the "
-        "constructors.",
-    uniqueNameCheck: 'LintCode.avoid_field_initializers_in_const_classes',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidFinalParameters =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_final_parameters,
-        problemMessage: "Parameters should not be marked as 'final'.",
-        correctionMessage: "Try removing the keyword 'final'.",
-        uniqueNameCheck: 'LintCode.avoid_final_parameters',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidFunctionLiteralsInForeachCalls =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_function_literals_in_foreach_calls,
-        problemMessage: "Function literals shouldn't be passed to 'forEach'.",
-        correctionMessage: "Try using a 'for' loop.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_function_literals_in_foreach_calls',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidFutureorVoid =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_futureor_void,
-        problemMessage: "Don't use the type 'FutureOr<void>'.",
-        correctionMessage: "Try using 'Future<void>?' or 'void'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_futureor_void',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidImplementingValueTypes =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_implementing_value_types,
-        problemMessage: "Classes that override '==' should not be implemented.",
-        correctionMessage:
-            "Try removing the class from the 'implements' clause.",
-        uniqueNameCheck: 'LintCode.avoid_implementing_value_types',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidInitToNull =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_init_to_null,
-        problemMessage: "Redundant initialization to 'null'.",
-        correctionMessage: "Try removing the initializer.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_init_to_null',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidJsRoundedInts = LinterLintWithoutArguments(
-    name: LintNames.avoid_js_rounded_ints,
-    problemMessage:
-        "Integer literal can't be represented exactly when compiled to JavaScript.",
-    correctionMessage: "Try using a 'BigInt' to represent the value.",
-    uniqueNameCheck: 'LintCode.avoid_js_rounded_ints',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidMultipleDeclarationsPerLine =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_multiple_declarations_per_line,
-        problemMessage: "Multiple variables declared on a single line.",
-        correctionMessage:
-            "Try splitting the variable declarations into multiple lines.",
-        uniqueNameCheck: 'LintCode.avoid_multiple_declarations_per_line',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidNullChecksInEqualityOperators =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_null_checks_in_equality_operators,
-        problemMessage:
-            "Unnecessary null comparison in implementation of '=='.",
-        correctionMessage: "Try removing the comparison.",
-        uniqueNameCheck: 'LintCode.avoid_null_checks_in_equality_operators',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidPositionalBooleanParameters =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_positional_boolean_parameters,
-        problemMessage: "'bool' parameters should be named parameters.",
-        correctionMessage: "Try converting the parameter to a named parameter.",
-        uniqueNameCheck: 'LintCode.avoid_positional_boolean_parameters',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidPrint =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_print,
-        problemMessage: "Don't invoke 'print' in production code.",
-        correctionMessage: "Try using a logging framework.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_print',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidPrivateTypedefFunctions =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_private_typedef_functions,
-        problemMessage:
-            "The typedef is unnecessary because it is only used in one place.",
-        correctionMessage: "Try inlining the type or using it in other places.",
-        uniqueNameCheck: 'LintCode.avoid_private_typedef_functions',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidRedundantArgumentValues = LinterLintWithoutArguments(
-    name: LintNames.avoid_redundant_argument_values,
-    problemMessage:
-        "The value of the argument is redundant because it matches the default "
-        "value.",
-    correctionMessage: "Try removing the argument.",
-    uniqueNameCheck: 'LintCode.avoid_redundant_argument_values',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidRelativeLibImports = LinterLintWithoutArguments(
-    name: LintNames.avoid_relative_lib_imports,
-    problemMessage: "Can't use a relative path to import a library in 'lib'.",
-    correctionMessage:
-        "Try fixing the relative path or changing the import to a 'package:' "
-        "import.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.avoid_relative_lib_imports',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  avoidRenamingMethodParameters = LinterLintTemplate(
-    name: LintNames.avoid_renaming_method_parameters,
-    problemMessage:
-        "The parameter name '{0}' doesn't match the name '{1}' in the overridden "
-        "method.",
-    correctionMessage: "Try changing the name to '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.avoid_renaming_method_parameters',
-    withArguments: _withArgumentsAvoidRenamingMethodParameters,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidReturningNullForVoidFromFunction = LinterLintWithoutArguments(
-    name: LintNames.avoid_returning_null_for_void,
-    problemMessage:
-        "Don't return 'null' from a function with a return type of 'void'.",
-    correctionMessage: "Try removing the 'null'.",
-    hasPublishedDocs: true,
-    uniqueName: 'avoid_returning_null_for_void_from_function',
-    uniqueNameCheck: 'LintCode.avoid_returning_null_for_void_from_function',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidReturningNullForVoidFromMethod =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_returning_null_for_void,
-        problemMessage:
-            "Don't return 'null' from a method with a return type of 'void'.",
-        correctionMessage: "Try removing the 'null'.",
-        hasPublishedDocs: true,
-        uniqueName: 'avoid_returning_null_for_void_from_method',
-        uniqueNameCheck: 'LintCode.avoid_returning_null_for_void_from_method',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidReturningThis =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_returning_this,
-        problemMessage: "Don't return 'this' from a method.",
-        correctionMessage:
-            "Try changing the return type to 'void' and removing the return.",
-        uniqueNameCheck: 'LintCode.avoid_returning_this',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidReturnTypesOnSetters =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_return_types_on_setters,
-        problemMessage: "Unnecessary return type on a setter.",
-        correctionMessage: "Try removing the return type.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_return_types_on_setters',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidSettersWithoutGetters =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_setters_without_getters,
-        problemMessage: "Setter has no corresponding getter.",
-        correctionMessage:
-            "Try adding a corresponding getter or removing the setter.",
-        uniqueNameCheck: 'LintCode.avoid_setters_without_getters',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  avoidShadowingTypeParameters = LinterLintTemplate(
-    name: LintNames.avoid_shadowing_type_parameters,
-    problemMessage:
-        "The type parameter '{0}' shadows a type parameter from the enclosing {1}.",
-    correctionMessage: "Try renaming one of the type parameters.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.avoid_shadowing_type_parameters',
-    withArguments: _withArgumentsAvoidShadowingTypeParameters,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  avoidSingleCascadeInExpressionStatements = LinterLintTemplate(
-    name: LintNames.avoid_single_cascade_in_expression_statements,
-    problemMessage: "Unnecessary cascade expression.",
-    correctionMessage: "Try using the operator '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.avoid_single_cascade_in_expression_statements',
-    withArguments: _withArgumentsAvoidSingleCascadeInExpressionStatements,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidSlowAsyncIo =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_slow_async_io,
-        problemMessage: "Use of an async 'dart:io' method.",
-        correctionMessage: "Try using the synchronous version of the method.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_slow_async_io',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  avoidTypesAsParameterNamesFormalParameter = LinterLintTemplate(
-    name: LintNames.avoid_types_as_parameter_names,
-    problemMessage: "The parameter name '{0}' matches a visible type name.",
-    correctionMessage:
-        "Try adding a name for the parameter or changing the parameter name to "
-        "not match an existing type.",
-    hasPublishedDocs: true,
-    uniqueName: 'avoid_types_as_parameter_names_formal_parameter',
-    uniqueNameCheck: 'LintCode.avoid_types_as_parameter_names_formal_parameter',
-    withArguments: _withArgumentsAvoidTypesAsParameterNamesFormalParameter,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  avoidTypesAsParameterNamesTypeParameter = LinterLintTemplate(
-    name: LintNames.avoid_types_as_parameter_names,
-    problemMessage:
-        "The type parameter name '{0}' matches a visible type name.",
-    correctionMessage:
-        "Try changing the type parameter name to not match an existing type.",
-    hasPublishedDocs: true,
-    uniqueName: 'avoid_types_as_parameter_names_type_parameter',
-    uniqueNameCheck: 'LintCode.avoid_types_as_parameter_names_type_parameter',
-    withArguments: _withArgumentsAvoidTypesAsParameterNamesTypeParameter,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidTypesOnClosureParameters =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_types_on_closure_parameters,
-        problemMessage:
-            "Unnecessary type annotation on a function expression parameter.",
-        correctionMessage: "Try removing the type annotation.",
-        uniqueNameCheck: 'LintCode.avoid_types_on_closure_parameters',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidTypeToString =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_type_to_string,
-        problemMessage:
-            "Using 'toString' on a 'Type' is not safe in production code.",
-        correctionMessage:
-            "Try a normal type check or compare the 'runtimeType' directly.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_type_to_string',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidUnnecessaryContainers = LinterLintWithoutArguments(
-    name: LintNames.avoid_unnecessary_containers,
-    problemMessage: "Unnecessary instance of 'Container'.",
-    correctionMessage:
-        "Try removing the 'Container' (but not its children) from the widget "
-        "tree.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.avoid_unnecessary_containers',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  avoidUnusedConstructorParameters = LinterLintTemplate(
-    name: LintNames.avoid_unused_constructor_parameters,
-    problemMessage: "The parameter '{0}' is not used in the constructor.",
-    correctionMessage: "Try using the parameter or removing it.",
-    uniqueNameCheck: 'LintCode.avoid_unused_constructor_parameters',
-    withArguments: _withArgumentsAvoidUnusedConstructorParameters,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  avoidVoidAsync = LinterLintWithoutArguments(
-    name: LintNames.avoid_void_async,
-    problemMessage:
-        "An 'async' function should have a 'Future' return type when it doesn't "
-        "return a value.",
-    correctionMessage: "Try changing the return type.",
-    uniqueNameCheck: 'LintCode.avoid_void_async',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments avoidWebLibrariesInFlutter =
-      LinterLintWithoutArguments(
-        name: LintNames.avoid_web_libraries_in_flutter,
-        problemMessage:
-            "Don't use web-only libraries outside Flutter web plugins.",
-        correctionMessage: "Try finding a different library for your needs.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.avoid_web_libraries_in_flutter',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  awaitOnlyFutures = LinterLintTemplate(
-    name: LintNames.await_only_futures,
-    problemMessage:
-        "Uses 'await' on an instance of '{0}', which is not a subtype of 'Future'.",
-    correctionMessage: "Try removing the 'await' or changing the expression.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.await_only_futures',
-    withArguments: _withArgumentsAwaitOnlyFutures,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  camelCaseExtensions = LinterLintTemplate(
-    name: LintNames.camel_case_extensions,
-    problemMessage:
-        "The extension name '{0}' isn't an UpperCamelCase identifier.",
-    correctionMessage:
-        "Try changing the name to follow the UpperCamelCase style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.camel_case_extensions',
-    withArguments: _withArgumentsCamelCaseExtensions,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  camelCaseTypes = LinterLintTemplate(
-    name: LintNames.camel_case_types,
-    problemMessage: "The type name '{0}' isn't an UpperCamelCase identifier.",
-    correctionMessage:
-        "Try changing the name to follow the UpperCamelCase style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.camel_case_types',
-    withArguments: _withArgumentsCamelCaseTypes,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments cancelSubscriptions =
-      LinterLintWithoutArguments(
-        name: LintNames.cancel_subscriptions,
-        problemMessage: "Uncancelled instance of 'StreamSubscription'.",
-        correctionMessage:
-            "Try invoking 'cancel' in the function in which the "
-            "'StreamSubscription' was created.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.cancel_subscriptions',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments cascadeInvocations =
-      LinterLintWithoutArguments(
-        name: LintNames.cascade_invocations,
-        problemMessage: "Unnecessary duplication of receiver.",
-        correctionMessage: "Try using a cascade to avoid the duplication.",
-        uniqueNameCheck: 'LintCode.cascade_invocations',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  castNullableToNonNullable = LinterLintWithoutArguments(
-    name: LintNames.cast_nullable_to_non_nullable,
-    problemMessage: "Don't cast a nullable value to a non-nullable type.",
-    correctionMessage:
-        "Try adding a not-null assertion ('!') to make the type non-nullable.",
-    uniqueNameCheck: 'LintCode.cast_nullable_to_non_nullable',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  closeSinks = LinterLintWithoutArguments(
-    name: LintNames.close_sinks,
-    problemMessage: "Unclosed instance of 'Sink'.",
-    correctionMessage:
-        "Try invoking 'close' in the function in which the 'Sink' was created.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.close_sinks',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  collectionMethodsUnrelatedType = LinterLintTemplate(
-    name: LintNames.collection_methods_unrelated_type,
-    problemMessage: "The argument type '{0}' isn't related to '{1}'.",
-    correctionMessage: "Try changing the argument or element type to match.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.collection_methods_unrelated_type',
-    withArguments: _withArgumentsCollectionMethodsUnrelatedType,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments combinatorsOrdering =
-      LinterLintWithoutArguments(
-        name: LintNames.combinators_ordering,
-        problemMessage: "Sort combinator names alphabetically.",
-        correctionMessage: "Try sorting the combinator names alphabetically.",
-        uniqueNameCheck: 'LintCode.combinators_ordering',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments commentReferences =
-      LinterLintWithoutArguments(
-        name: LintNames.comment_references,
-        problemMessage: "The referenced name isn't visible in scope.",
-        correctionMessage: "Try adding an import for the referenced name.",
-        uniqueNameCheck: 'LintCode.comment_references',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  conditionalUriDoesNotExist = LinterLintTemplate(
-    name: LintNames.conditional_uri_does_not_exist,
-    problemMessage: "The target of the conditional URI '{0}' doesn't exist.",
-    correctionMessage:
-        "Try creating the file referenced by the URI, or try using a URI for a "
-        "file that does exist.",
-    uniqueNameCheck: 'LintCode.conditional_uri_does_not_exist',
-    withArguments: _withArgumentsConditionalUriDoesNotExist,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  constantIdentifierNames = LinterLintTemplate(
-    name: LintNames.constant_identifier_names,
-    problemMessage:
-        "The constant name '{0}' isn't a lowerCamelCase identifier.",
-    correctionMessage:
-        "Try changing the name to follow the lowerCamelCase style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.constant_identifier_names',
-    withArguments: _withArgumentsConstantIdentifierNames,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  controlFlowInFinally = LinterLintTemplate(
-    name: LintNames.control_flow_in_finally,
-    problemMessage: "Use of '{0}' in a 'finally' clause.",
-    correctionMessage: "Try restructuring the code.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.control_flow_in_finally',
-    withArguments: _withArgumentsControlFlowInFinally,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  curlyBracesInFlowControlStructures = LinterLintTemplate(
-    name: LintNames.curly_braces_in_flow_control_structures,
-    problemMessage: "Statements in {0} should be enclosed in a block.",
-    correctionMessage: "Try wrapping the statement in a block.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.curly_braces_in_flow_control_structures',
-    withArguments: _withArgumentsCurlyBracesInFlowControlStructures,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments danglingLibraryDocComments =
-      LinterLintWithoutArguments(
-        name: LintNames.dangling_library_doc_comments,
-        problemMessage: "Dangling library doc comment.",
-        correctionMessage:
-            "Add a 'library' directive after the library comment.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.dangling_library_doc_comments',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  dependOnReferencedPackages = LinterLintTemplate(
-    name: LintNames.depend_on_referenced_packages,
-    problemMessage:
-        "The imported package '{0}' isn't a dependency of the importing package.",
-    correctionMessage:
-        "Try adding a dependency for '{0}' in the 'pubspec.yaml' file.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.depend_on_referenced_packages',
-    withArguments: _withArgumentsDependOnReferencedPackages,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments deprecatedConsistencyConstructor =
-      LinterLintWithoutArguments(
-        name: LintNames.deprecated_consistency,
-        problemMessage:
-            "Constructors in a deprecated class should be deprecated.",
-        correctionMessage: "Try marking the constructor as deprecated.",
-        uniqueName: 'deprecated_consistency_constructor',
-        uniqueNameCheck: 'LintCode.deprecated_consistency_constructor',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments deprecatedConsistencyField =
-      LinterLintWithoutArguments(
-        name: LintNames.deprecated_consistency,
-        problemMessage:
-            "Fields that are initialized by a deprecated parameter should be "
-            "deprecated.",
-        correctionMessage: "Try marking the field as deprecated.",
-        uniqueName: 'deprecated_consistency_field',
-        uniqueNameCheck: 'LintCode.deprecated_consistency_field',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  deprecatedConsistencyParameter = LinterLintWithoutArguments(
-    name: LintNames.deprecated_consistency,
-    problemMessage:
-        "Parameters that initialize a deprecated field should be deprecated.",
-    correctionMessage: "Try marking the parameter as deprecated.",
-    uniqueName: 'deprecated_consistency_parameter',
-    uniqueNameCheck: 'LintCode.deprecated_consistency_parameter',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  deprecatedMemberUseFromSamePackageWithMessage = LinterLintTemplate(
-    name: LintNames.deprecated_member_use_from_same_package,
-    problemMessage: "'{0}' is deprecated and shouldn't be used. {1}",
-    correctionMessage:
-        "Try replacing the use of the deprecated member with the replacement, "
-        "if a replacement is specified.",
-    uniqueName: 'deprecated_member_use_from_same_package_with_message',
-    uniqueNameCheck:
-        'LintCode.deprecated_member_use_from_same_package_with_message',
-    withArguments: _withArgumentsDeprecatedMemberUseFromSamePackageWithMessage,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  deprecatedMemberUseFromSamePackageWithoutMessage = LinterLintTemplate(
-    name: LintNames.deprecated_member_use_from_same_package,
-    problemMessage: "'{0}' is deprecated and shouldn't be used.",
-    correctionMessage:
-        "Try replacing the use of the deprecated member with the replacement, "
-        "if a replacement is specified.",
-    uniqueName: 'deprecated_member_use_from_same_package_without_message',
-    uniqueNameCheck:
-        'LintCode.deprecated_member_use_from_same_package_without_message',
-    withArguments:
-        _withArgumentsDeprecatedMemberUseFromSamePackageWithoutMessage,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  diagnosticDescribeAllProperties = LinterLintWithoutArguments(
-    name: LintNames.diagnostic_describe_all_properties,
-    problemMessage:
-        "The public property isn't described by either 'debugFillProperties' or "
-        "'debugDescribeChildren'.",
-    correctionMessage: "Try describing the property.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.diagnostic_describe_all_properties',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments directivesOrderingAlphabetical =
-      LinterLintWithoutArguments(
-        name: LintNames.directives_ordering,
-        problemMessage: "Sort directive sections alphabetically.",
-        correctionMessage: "Try sorting the directives.",
-        uniqueName: 'directives_ordering_alphabetical',
-        uniqueNameCheck: 'LintCode.directives_ordering_alphabetical',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  directivesOrderingDart = LinterLintTemplate(
-    name: LintNames.directives_ordering,
-    problemMessage: "Place 'dart:' {0} before other {0}.",
-    correctionMessage: "Try sorting the directives.",
-    uniqueName: 'directives_ordering_dart',
-    uniqueNameCheck: 'LintCode.directives_ordering_dart',
-    withArguments: _withArgumentsDirectivesOrderingDart,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments directivesOrderingExports =
-      LinterLintWithoutArguments(
-        name: LintNames.directives_ordering,
-        problemMessage:
-            "Specify exports in a separate section after all imports.",
-        correctionMessage: "Try sorting the directives.",
-        uniqueName: 'directives_ordering_exports',
-        uniqueNameCheck: 'LintCode.directives_ordering_exports',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  directivesOrderingPackageBeforeRelative = LinterLintTemplate(
-    name: LintNames.directives_ordering,
-    problemMessage: "Place 'package:' {0} before relative {0}.",
-    correctionMessage: "Try sorting the directives.",
-    uniqueName: 'directives_ordering_package_before_relative',
-    uniqueNameCheck: 'LintCode.directives_ordering_package_before_relative',
-    withArguments: _withArgumentsDirectivesOrderingPackageBeforeRelative,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  discardedFutures = LinterLintWithoutArguments(
-    name: LintNames.discarded_futures,
-    problemMessage: "'Future'-returning calls in a non-'async' function.",
-    correctionMessage:
-        "Try converting the enclosing function to be 'async' and then 'await' "
-        "the future, or wrap the expression in 'unawaited'.",
-    uniqueNameCheck: 'LintCode.discarded_futures',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments documentIgnores =
-      LinterLintWithoutArguments(
-        name: LintNames.document_ignores,
-        problemMessage:
-            "Missing documentation explaining why the diagnostic is ignored.",
-        correctionMessage:
-            "Try adding a comment immediately above the ignore comment.",
-        uniqueNameCheck: 'LintCode.document_ignores',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments doNotUseEnvironment =
-      LinterLintWithoutArguments(
-        name: LintNames.do_not_use_environment,
-        problemMessage: "Invalid use of an environment declaration.",
-        correctionMessage: "Try removing the environment declaration usage.",
-        uniqueNameCheck: 'LintCode.do_not_use_environment',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  emptyCatches = LinterLintWithoutArguments(
-    name: LintNames.empty_catches,
-    problemMessage: "Empty catch block.",
-    correctionMessage:
-        "Try adding statements to the block, adding a comment to the block, or "
-        "removing the 'catch' clause.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.empty_catches',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  emptyConstructorBodies = LinterLintWithoutArguments(
-    name: LintNames.empty_constructor_bodies,
-    problemMessage:
-        "Empty constructor bodies should be written using a ';' rather than '{}'.",
-    correctionMessage: "Try replacing the constructor body with ';'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.empty_constructor_bodies',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments emptyStatements =
-      LinterLintWithoutArguments(
-        name: LintNames.empty_statements,
-        problemMessage: "Unnecessary empty statement.",
-        correctionMessage:
-            "Try removing the empty statement or restructuring the code.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.empty_statements',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments eolAtEndOfFile =
-      LinterLintWithoutArguments(
-        name: LintNames.eol_at_end_of_file,
-        problemMessage: "Missing a newline at the end of the file.",
-        correctionMessage: "Try adding a newline at the end of the file.",
-        uniqueNameCheck: 'LintCode.eol_at_end_of_file',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  eraseDartTypeExtensionTypes = LinterLintWithoutArguments(
-    name: LintNames.erase_dart_type_extension_types,
-    problemMessage: "Unsafe use of 'DartType' in an 'is' check.",
-    correctionMessage:
-        "Ensure DartType extension types are erased by using a helper method.",
-    uniqueNameCheck: 'LintCode.erase_dart_type_extension_types',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  exhaustiveCases = LinterLintTemplate(
-    name: LintNames.exhaustive_cases,
-    problemMessage: "Missing case clauses for some constants in '{0}'.",
-    correctionMessage: "Try adding case clauses for the missing constants.",
-    uniqueNameCheck: 'LintCode.exhaustive_cases',
-    withArguments: _withArgumentsExhaustiveCases,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  fileNames = LinterLintTemplate(
-    name: LintNames.file_names,
-    problemMessage:
-        "The file name '{0}' isn't a lower_case_with_underscores identifier.",
-    correctionMessage:
-        "Try changing the name to follow the lower_case_with_underscores "
-        "style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.file_names',
-    withArguments: _withArgumentsFileNames,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments flutterStyleTodos =
-      LinterLintWithoutArguments(
-        name: LintNames.flutter_style_todos,
-        problemMessage: "To-do comment doesn't follow the Flutter style.",
-        correctionMessage:
-            "Try following the Flutter style for to-do comments.",
-        uniqueNameCheck: 'LintCode.flutter_style_todos',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  hashAndEquals = LinterLintTemplate(
-    name: LintNames.hash_and_equals,
-    problemMessage: "Missing a corresponding override of '{0}'.",
-    correctionMessage: "Try overriding '{0}' or removing '{1}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.hash_and_equals',
-    withArguments: _withArgumentsHashAndEquals,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  implementationImports = LinterLintWithoutArguments(
-    name: LintNames.implementation_imports,
-    problemMessage:
-        "Import of a library in the 'lib/src' directory of another package.",
-    correctionMessage:
-        "Try importing a public library that exports this library, or removing "
-        "the import.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.implementation_imports',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments implicitCallTearoffs =
-      LinterLintWithoutArguments(
-        name: LintNames.implicit_call_tearoffs,
-        problemMessage: "Implicit tear-off of the 'call' method.",
-        correctionMessage: "Try explicitly tearing off the 'call' method.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.implicit_call_tearoffs',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  /// Object p2: undocumented
-  /// Object p3: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({
-      required Object p0,
-      required Object p1,
-      required Object p2,
-      required Object p3,
-    })
-  >
-  implicitReopen = LinterLintTemplate(
-    name: LintNames.implicit_reopen,
-    problemMessage:
-        "The {0} '{1}' reopens '{2}' because it is not marked '{3}'.",
-    correctionMessage:
-        "Try marking '{1}' '{3}' or annotating it with '@reopen'.",
-    uniqueNameCheck: 'LintCode.implicit_reopen',
-    withArguments: _withArgumentsImplicitReopen,
-    expectedTypes: [
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-      ExpectedType.object,
-    ],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments invalidCasePatterns =
-      LinterLintWithoutArguments(
-        name: LintNames.invalid_case_patterns,
-        problemMessage:
-            "This expression is not valid in a 'case' clause in Dart 3.0.",
-        correctionMessage: "Try refactoring the expression to be valid in 3.0.",
-        uniqueNameCheck: 'LintCode.invalid_case_patterns',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesDartAsJs = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Cast from '{0}' to '{1}' casts a Dart value to a JS interop type, which "
-        "might not be platform-consistent.",
-    correctionMessage:
-        "Try using conversion methods from 'dart:js_interop' to convert "
-        "between Dart types and JS interop types.",
-    hasPublishedDocs: true,
-    uniqueName: 'invalid_runtime_check_with_js_interop_types_dart_as_js',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_dart_as_js',
-    withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartAsJs,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesDartIsJs = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Runtime check between '{0}' and '{1}' checks whether a Dart value is a JS "
-        "interop type, which might not be platform-consistent.",
-    uniqueName: 'invalid_runtime_check_with_js_interop_types_dart_is_js',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_dart_is_js',
-    withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartIsJs,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesJsAsDart = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Cast from '{0}' to '{1}' casts a JS interop value to a Dart type, which "
-        "might not be platform-consistent.",
-    correctionMessage:
-        "Try using conversion methods from 'dart:js_interop' to convert "
-        "between JS interop types and Dart types.",
-    uniqueName: 'invalid_runtime_check_with_js_interop_types_js_as_dart',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_js_as_dart',
-    withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsDart,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Cast from '{0}' to '{1}' casts a JS interop value to an incompatible JS "
-        "interop type, which might not be platform-consistent.",
-    uniqueName:
-        'invalid_runtime_check_with_js_interop_types_js_as_incompatible_js',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_js_as_incompatible_js',
-    withArguments:
-        _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesJsIsDart = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Runtime check between '{0}' and '{1}' checks whether a JS interop value "
-        "is a Dart type, which might not be platform-consistent.",
-    uniqueName: 'invalid_runtime_check_with_js_interop_types_js_is_dart',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_js_is_dart',
-    withArguments: _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsDart,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Runtime check between '{0}' and '{1}' involves a non-trivial runtime "
-        "check between two JS interop types that might not be "
-        "platform-consistent.",
-    correctionMessage:
-        "Try using a JS interop member like 'isA' from 'dart:js_interop' to "
-        "check the underlying type of JS interop values.",
-    uniqueName:
-        'invalid_runtime_check_with_js_interop_types_js_is_inconsistent_js',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_js_is_inconsistent_js',
-    withArguments:
-        _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs = LinterLintTemplate(
-    name: LintNames.invalid_runtime_check_with_js_interop_types,
-    problemMessage:
-        "Runtime check between '{0}' and '{1}' involves a runtime check between a "
-        "JS interop value and an unrelated JS interop type that will always be "
-        "true and won't check the underlying type.",
-    correctionMessage:
-        "Try using a JS interop member like 'isA' from 'dart:js_interop' to "
-        "check the underlying type of JS interop values, or make the JS "
-        "interop type a supertype using 'implements'.",
-    uniqueName:
-        'invalid_runtime_check_with_js_interop_types_js_is_unrelated_js',
-    uniqueNameCheck:
-        'LintCode.invalid_runtime_check_with_js_interop_types_js_is_unrelated_js',
-    withArguments:
-        _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments joinReturnWithAssignment =
-      LinterLintWithoutArguments(
-        name: LintNames.join_return_with_assignment,
-        problemMessage: "Assignment could be inlined in 'return' statement.",
-        correctionMessage:
-            "Try inlining the assigned value in the 'return' statement.",
-        uniqueNameCheck: 'LintCode.join_return_with_assignment',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  leadingNewlinesInMultilineStrings = LinterLintWithoutArguments(
-    name: LintNames.leading_newlines_in_multiline_strings,
-    problemMessage: "Missing a newline at the beginning of a multiline string.",
-    correctionMessage: "Try adding a newline at the beginning of the string.",
-    uniqueNameCheck: 'LintCode.leading_newlines_in_multiline_strings',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments libraryAnnotations =
-      LinterLintWithoutArguments(
-        name: LintNames.library_annotations,
-        problemMessage:
-            "This annotation should be attached to a library directive.",
-        correctionMessage:
-            "Try attaching the annotation to a library directive.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.library_annotations',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  libraryNames = LinterLintTemplate(
-    name: LintNames.library_names,
-    problemMessage:
-        "The library name '{0}' isn't a lower_case_with_underscores identifier.",
-    correctionMessage:
-        "Try changing the name to follow the lower_case_with_underscores "
-        "style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.library_names',
-    withArguments: _withArgumentsLibraryNames,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  libraryPrefixes = LinterLintTemplate(
-    name: LintNames.library_prefixes,
-    problemMessage:
-        "The prefix '{0}' isn't a lower_case_with_underscores identifier.",
-    correctionMessage:
-        "Try changing the prefix to follow the lower_case_with_underscores "
-        "style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.library_prefixes',
-    withArguments: _withArgumentsLibraryPrefixes,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  libraryPrivateTypesInPublicApi = LinterLintWithoutArguments(
-    name: LintNames.library_private_types_in_public_api,
-    problemMessage: "Invalid use of a private type in a public API.",
-    correctionMessage:
-        "Try making the private type public, or making the API that uses the "
-        "private type also be private.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.library_private_types_in_public_api',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments linesLongerThan80Chars =
-      LinterLintWithoutArguments(
-        name: LintNames.lines_longer_than_80_chars,
-        problemMessage: "The line length exceeds the 80-character limit.",
-        correctionMessage: "Try breaking the line across multiple lines.",
-        uniqueNameCheck: 'LintCode.lines_longer_than_80_chars',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments literalOnlyBooleanExpressions =
-      LinterLintWithoutArguments(
-        name: LintNames.literal_only_boolean_expressions,
-        problemMessage: "The Boolean expression has a constant value.",
-        correctionMessage: "Try changing the expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.literal_only_boolean_expressions',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  matchingSuperParameters = LinterLintTemplate(
-    name: LintNames.matching_super_parameters,
-    problemMessage:
-        "The super parameter named '{0}'' does not share the same name as the "
-        "corresponding parameter in the super constructor, '{1}'.",
-    correctionMessage:
-        "Try using the name of the corresponding parameter in the super "
-        "constructor.",
-    uniqueNameCheck: 'LintCode.matching_super_parameters',
-    withArguments: _withArgumentsMatchingSuperParameters,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments missingCodeBlockLanguageInDocComment =
-      LinterLintWithoutArguments(
-        name: LintNames.missing_code_block_language_in_doc_comment,
-        problemMessage: "The code block is missing a specified language.",
-        correctionMessage: "Try adding a language to the code block.",
-        uniqueNameCheck: 'LintCode.missing_code_block_language_in_doc_comment',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  missingWhitespaceBetweenAdjacentStrings = LinterLintWithoutArguments(
-    name: LintNames.missing_whitespace_between_adjacent_strings,
-    problemMessage: "Missing whitespace between adjacent strings.",
-    correctionMessage: "Try adding whitespace between the strings.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.missing_whitespace_between_adjacent_strings',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noAdjacentStringsInList =
-      LinterLintWithoutArguments(
-        name: LintNames.no_adjacent_strings_in_list,
-        problemMessage: "Don't use adjacent strings in a list literal.",
-        correctionMessage: "Try adding a comma between the strings.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.no_adjacent_strings_in_list',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noDefaultCases =
-      LinterLintWithoutArguments(
-        name: LintNames.no_default_cases,
-        problemMessage: "Invalid use of 'default' member in a switch.",
-        correctionMessage:
-            "Try enumerating all the possible values of the switch expression.",
-        uniqueNameCheck: 'LintCode.no_default_cases',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  noDuplicateCaseValues = LinterLintTemplate(
-    name: LintNames.no_duplicate_case_values,
-    problemMessage:
-        "The value of the case clause ('{0}') is equal to the value of an earlier "
-        "case clause ('{1}').",
-    correctionMessage: "Try removing or changing the value.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.no_duplicate_case_values',
-    withArguments: _withArgumentsNoDuplicateCaseValues,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  noLeadingUnderscoresForLibraryPrefixes = LinterLintTemplate(
-    name: LintNames.no_leading_underscores_for_library_prefixes,
-    problemMessage: "The library prefix '{0}' starts with an underscore.",
-    correctionMessage:
-        "Try renaming the prefix to not start with an underscore.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.no_leading_underscores_for_library_prefixes',
-    withArguments: _withArgumentsNoLeadingUnderscoresForLibraryPrefixes,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  noLeadingUnderscoresForLocalIdentifiers = LinterLintTemplate(
-    name: LintNames.no_leading_underscores_for_local_identifiers,
-    problemMessage: "The local variable '{0}' starts with an underscore.",
-    correctionMessage:
-        "Try renaming the variable to not start with an underscore.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.no_leading_underscores_for_local_identifiers',
-    withArguments: _withArgumentsNoLeadingUnderscoresForLocalIdentifiers,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  noLiteralBoolComparisons = LinterLintWithoutArguments(
-    name: LintNames.no_literal_bool_comparisons,
-    problemMessage: "Unnecessary comparison to a boolean literal.",
-    correctionMessage:
-        "Remove the comparison and use the negate `!` operator if necessary.",
-    uniqueNameCheck: 'LintCode.no_literal_bool_comparisons',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noLogicInCreateState =
-      LinterLintWithoutArguments(
-        name: LintNames.no_logic_in_create_state,
-        problemMessage: "Don't put any logic in 'createState'.",
-        correctionMessage: "Try moving the logic out of 'createState'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.no_logic_in_create_state',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  nonConstantIdentifierNames = LinterLintTemplate(
-    name: LintNames.non_constant_identifier_names,
-    problemMessage:
-        "The variable name '{0}' isn't a lowerCamelCase identifier.",
-    correctionMessage:
-        "Try changing the name to follow the lowerCamelCase style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.non_constant_identifier_names',
-    withArguments: _withArgumentsNonConstantIdentifierNames,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noopPrimitiveOperations =
-      LinterLintWithoutArguments(
-        name: LintNames.noop_primitive_operations,
-        problemMessage: "The expression has no effect and can be removed.",
-        correctionMessage: "Try removing the expression.",
-        uniqueNameCheck: 'LintCode.noop_primitive_operations',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noRuntimetypeTostring =
-      LinterLintWithoutArguments(
-        name: LintNames.no_runtimeType_toString,
-        problemMessage:
-            "Using 'toString' on a 'Type' is not safe in production code.",
-        correctionMessage:
-            "Try removing the usage of 'toString' or restructuring the code.",
-        uniqueNameCheck: 'LintCode.no_runtimeType_toString',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noSelfAssignments =
-      LinterLintWithoutArguments(
-        name: LintNames.no_self_assignments,
-        problemMessage: "The variable or property is being assigned to itself.",
-        correctionMessage:
-            "Try removing the assignment that has no direct effect.",
-        uniqueNameCheck: 'LintCode.no_self_assignments',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noSoloTests =
-      LinterLintWithoutArguments(
-        name: LintNames.no_solo_tests,
-        problemMessage: "Don't commit soloed tests.",
-        correctionMessage:
-            "Try removing the 'soloTest' annotation or 'solo_' prefix.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.no_solo_tests',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noTrailingSpaces =
-      LinterLintWithoutArguments(
-        name: LintNames.no_trailing_spaces,
-        problemMessage:
-            "Don't create string literals with trailing spaces in tests.",
-        correctionMessage: "Try removing the trailing spaces.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.no_trailing_spaces',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments noWildcardVariableUses =
-      LinterLintWithoutArguments(
-        name: LintNames.no_wildcard_variable_uses,
-        problemMessage: "The referenced identifier is a wildcard.",
-        correctionMessage: "Use an identifier name that is not a wildcard.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.no_wildcard_variable_uses',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  nullCheckOnNullableTypeParameter = LinterLintWithoutArguments(
-    name: LintNames.null_check_on_nullable_type_parameter,
-    problemMessage:
-        "The null check operator shouldn't be used on a variable whose type is a "
-        "potentially nullable type parameter.",
-    correctionMessage: "Try explicitly testing for 'null'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.null_check_on_nullable_type_parameter',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments nullClosures =
-      LinterLintWithoutArguments(
-        name: LintNames.null_closures,
-        problemMessage: "Closure can't be 'null' because it might be invoked.",
-        correctionMessage: "Try providing a non-null closure.",
-        uniqueNameCheck: 'LintCode.null_closures',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments omitLocalVariableTypes =
-      LinterLintWithoutArguments(
-        name: LintNames.omit_local_variable_types,
-        problemMessage: "Unnecessary type annotation on a local variable.",
-        correctionMessage: "Try removing the type annotation.",
-        uniqueNameCheck: 'LintCode.omit_local_variable_types',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  omitObviousLocalVariableTypes = LinterLintWithoutArguments(
-    name: LintNames.omit_obvious_local_variable_types,
-    problemMessage:
-        "Omit the type annotation on a local variable when the type is obvious.",
-    correctionMessage: "Try removing the type annotation.",
-    uniqueNameCheck: 'LintCode.omit_obvious_local_variable_types',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments omitObviousPropertyTypes =
-      LinterLintWithoutArguments(
-        name: LintNames.omit_obvious_property_types,
-        problemMessage:
-            "The type annotation isn't needed because it is obvious.",
-        correctionMessage: "Try removing the type annotation.",
-        uniqueNameCheck: 'LintCode.omit_obvious_property_types',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  oneMemberAbstracts = LinterLintTemplate(
-    name: LintNames.one_member_abstracts,
-    problemMessage: "Unnecessary use of an abstract class.",
-    correctionMessage:
-        "Try making '{0}' a top-level function and removing the class.",
-    uniqueNameCheck: 'LintCode.one_member_abstracts',
-    withArguments: _withArgumentsOneMemberAbstracts,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  onlyThrowErrors = LinterLintWithoutArguments(
-    name: LintNames.only_throw_errors,
-    problemMessage:
-        "Don't throw instances of classes that don't extend either 'Exception' or "
-        "'Error'.",
-    correctionMessage: "Try throwing a different class of object.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.only_throw_errors',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  overriddenFields = LinterLintTemplate(
-    name: LintNames.overridden_fields,
-    problemMessage: "Field overrides a field inherited from '{0}'.",
-    correctionMessage:
-        "Try removing the field, overriding the getter and setter if "
-        "necessary.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.overridden_fields',
-    withArguments: _withArgumentsOverriddenFields,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  packageNames = LinterLintTemplate(
-    name: LintNames.package_names,
-    problemMessage:
-        "The package name '{0}' isn't a lower_case_with_underscores identifier.",
-    correctionMessage:
-        "Try changing the name to follow the lower_case_with_underscores "
-        "style.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.package_names',
-    withArguments: _withArgumentsPackageNames,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  packagePrefixedLibraryNames = LinterLintTemplate(
-    name: LintNames.package_prefixed_library_names,
-    problemMessage:
-        "The library name is not a dot-separated path prefixed by the package "
-        "name.",
-    correctionMessage: "Try changing the name to '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.package_prefixed_library_names',
-    withArguments: _withArgumentsPackagePrefixedLibraryNames,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  parameterAssignments = LinterLintTemplate(
-    name: LintNames.parameter_assignments,
-    problemMessage: "Invalid assignment to the parameter '{0}'.",
-    correctionMessage: "Try using a local variable in place of the parameter.",
-    uniqueNameCheck: 'LintCode.parameter_assignments',
-    withArguments: _withArgumentsParameterAssignments,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferAdjacentStringConcatenation =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_adjacent_string_concatenation,
-        problemMessage:
-            "String literals shouldn't be concatenated by the '+' operator.",
-        correctionMessage: "Try removing the operator to use adjacent strings.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_adjacent_string_concatenation',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferAssertsInInitializerLists =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_asserts_in_initializer_lists,
-        problemMessage: "Assert should be in the initializer list.",
-        correctionMessage: "Try moving the assert to the initializer list.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_asserts_in_initializer_lists',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferAssertsWithMessage =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_asserts_with_message,
-        problemMessage: "Missing a message in an assert.",
-        correctionMessage: "Try adding a message to the assert.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_asserts_with_message',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferCollectionLiterals =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_collection_literals,
-        problemMessage: "Unnecessary constructor invocation.",
-        correctionMessage: "Try using a collection literal.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_collection_literals',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferConditionalAssignment =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_conditional_assignment,
-        problemMessage:
-            "The 'if' statement could be replaced by a null-aware assignment.",
-        correctionMessage:
-            "Try using the '??=' operator to conditionally assign a value.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_conditional_assignment',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferConstConstructors =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_const_constructors,
-        problemMessage:
-            "Use 'const' with the constructor to improve performance.",
-        correctionMessage:
-            "Try adding the 'const' keyword to the constructor invocation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_const_constructors',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferConstConstructorsInImmutables = LinterLintWithoutArguments(
-    name: LintNames.prefer_const_constructors_in_immutables,
-    problemMessage:
-        "Constructors in '@immutable' classes should be declared as 'const'.",
-    correctionMessage: "Try adding 'const' to the constructor declaration.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_const_constructors_in_immutables',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferConstDeclarations =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_const_declarations,
-        problemMessage:
-            "Use 'const' for final variables initialized to a constant value.",
-        correctionMessage: "Try replacing 'final' with 'const'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_const_declarations',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferConstLiteralsToCreateImmutables = LinterLintWithoutArguments(
-    name: LintNames.prefer_const_literals_to_create_immutables,
-    problemMessage:
-        "Use 'const' literals as arguments to constructors of '@immutable' "
-        "classes.",
-    correctionMessage: "Try adding 'const' before the literal.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_const_literals_to_create_immutables',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferConstructorsOverStaticMethods =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_constructors_over_static_methods,
-        problemMessage: "Static method should be a constructor.",
-        correctionMessage: "Try converting the method into a constructor.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_constructors_over_static_methods',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferContainsAlwaysFalse = LinterLintWithoutArguments(
-    name: LintNames.prefer_contains,
-    problemMessage:
-        "Always 'false' because 'indexOf' is always greater than or equal to -1.",
-    uniqueName: 'prefer_contains_always_false',
-    uniqueNameCheck: 'LintCode.prefer_contains_always_false',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferContainsAlwaysTrue = LinterLintWithoutArguments(
-    name: LintNames.prefer_contains,
-    problemMessage:
-        "Always 'true' because 'indexOf' is always greater than or equal to -1.",
-    uniqueName: 'prefer_contains_always_true',
-    uniqueNameCheck: 'LintCode.prefer_contains_always_true',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferContainsUseContains =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_contains,
-        problemMessage: "Unnecessary use of 'indexOf' to test for containment.",
-        correctionMessage: "Try using 'contains'.",
-        hasPublishedDocs: true,
-        uniqueName: 'prefer_contains_use_contains',
-        uniqueNameCheck: 'LintCode.prefer_contains_use_contains',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferDoubleQuotes =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_double_quotes,
-        problemMessage: "Unnecessary use of single quotes.",
-        correctionMessage:
-            "Try using double quotes unless the string contains double quotes.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_double_quotes',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferExpressionFunctionBodies =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_expression_function_bodies,
-        problemMessage: "Unnecessary use of a block function body.",
-        correctionMessage: "Try using an expression function body.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_expression_function_bodies',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  preferFinalFields = LinterLintTemplate(
-    name: LintNames.prefer_final_fields,
-    problemMessage: "The private field {0} could be 'final'.",
-    correctionMessage: "Try making the field 'final'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_final_fields',
-    withArguments: _withArgumentsPreferFinalFields,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferFinalInForEachPattern =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_final_in_for_each,
-        problemMessage: "The pattern should be final.",
-        correctionMessage: "Try making the pattern final.",
-        hasPublishedDocs: true,
-        uniqueName: 'prefer_final_in_for_each_pattern',
-        uniqueNameCheck: 'LintCode.prefer_final_in_for_each_pattern',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  preferFinalInForEachVariable = LinterLintTemplate(
-    name: LintNames.prefer_final_in_for_each,
-    problemMessage: "The variable '{0}' should be final.",
-    correctionMessage: "Try making the variable final.",
-    uniqueName: 'prefer_final_in_for_each_variable',
-    uniqueNameCheck: 'LintCode.prefer_final_in_for_each_variable',
-    withArguments: _withArgumentsPreferFinalInForEachVariable,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferFinalLocals =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_final_locals,
-        problemMessage: "Local variables should be final.",
-        correctionMessage: "Try making the variable final.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_final_locals',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  preferFinalParameters = LinterLintTemplate(
-    name: LintNames.prefer_final_parameters,
-    problemMessage: "The parameter '{0}' should be final.",
-    correctionMessage: "Try making the parameter final.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_final_parameters',
-    withArguments: _withArgumentsPreferFinalParameters,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferForeach = LinterLintWithoutArguments(
-    name: LintNames.prefer_foreach,
-    problemMessage:
-        "Use 'forEach' and a tear-off rather than a 'for' loop to apply a function "
-        "to every element.",
-    correctionMessage:
-        "Try using 'forEach' and a tear-off rather than a 'for' loop.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_foreach',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferForElementsToMapFromiterable =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_for_elements_to_map_fromIterable,
-        problemMessage: "Use 'for' elements when building maps from iterables.",
-        correctionMessage:
-            "Try using a collection literal with a 'for' element.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_for_elements_to_map_fromIterable',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferFunctionDeclarationsOverVariables = LinterLintWithoutArguments(
-    name: LintNames.prefer_function_declarations_over_variables,
-    problemMessage:
-        "Use a function declaration rather than a variable assignment to bind a "
-        "function to a name.",
-    correctionMessage:
-        "Try rewriting the closure assignment as a function declaration.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_function_declarations_over_variables',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  preferGenericFunctionTypeAliases = LinterLintTemplate(
-    name: LintNames.prefer_generic_function_type_aliases,
-    problemMessage: "Use the generic function type syntax in 'typedef's.",
-    correctionMessage: "Try using the generic function type syntax ('{0}').",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_generic_function_type_aliases',
-    withArguments: _withArgumentsPreferGenericFunctionTypeAliases,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferIfElementsToConditionalExpressions = LinterLintWithoutArguments(
-    name: LintNames.prefer_if_elements_to_conditional_expressions,
-    problemMessage: "Use an 'if' element to conditionally add elements.",
-    correctionMessage:
-        "Try using an 'if' element rather than a conditional expression.",
-    uniqueNameCheck: 'LintCode.prefer_if_elements_to_conditional_expressions',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferIfNullOperators =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_if_null_operators,
-        problemMessage:
-            "Use the '??' operator rather than '?:' when testing for 'null'.",
-        correctionMessage: "Try rewriting the code to use '??'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_if_null_operators',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  preferInitializingFormals = LinterLintTemplate(
-    name: LintNames.prefer_initializing_formals,
-    problemMessage:
-        "Use an initializing formal to assign a parameter to a field.",
-    correctionMessage:
-        "Try using an initialing formal ('this.{0}') to initialize the field.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.prefer_initializing_formals',
-    withArguments: _withArgumentsPreferInitializingFormals,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferInlinedAddsMultiple =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_inlined_adds,
-        problemMessage: "The addition of multiple list items could be inlined.",
-        correctionMessage: "Try adding the items to the list literal directly.",
-        hasPublishedDocs: true,
-        uniqueName: 'prefer_inlined_adds_multiple',
-        uniqueNameCheck: 'LintCode.prefer_inlined_adds_multiple',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferInlinedAddsSingle =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_inlined_adds,
-        problemMessage: "The addition of a list item could be inlined.",
-        correctionMessage: "Try adding the item to the list literal directly.",
-        hasPublishedDocs: true,
-        uniqueName: 'prefer_inlined_adds_single',
-        uniqueNameCheck: 'LintCode.prefer_inlined_adds_single',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferInterpolationToComposeStrings =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_interpolation_to_compose_strings,
-        problemMessage: "Use interpolation to compose strings and values.",
-        correctionMessage:
-            "Try using string interpolation to build the composite string.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_interpolation_to_compose_strings',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferIntLiterals =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_int_literals,
-        problemMessage: "Unnecessary use of a 'double' literal.",
-        correctionMessage: "Try using an 'int' literal.",
-        uniqueNameCheck: 'LintCode.prefer_int_literals',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferIsEmptyAlwaysFalse = LinterLintWithoutArguments(
-    name: LintNames.prefer_is_empty,
-    problemMessage:
-        "The comparison is always 'false' because the length is always greater "
-        "than or equal to 0.",
-    uniqueName: 'prefer_is_empty_always_false',
-    uniqueNameCheck: 'LintCode.prefer_is_empty_always_false',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferIsEmptyAlwaysTrue = LinterLintWithoutArguments(
-    name: LintNames.prefer_is_empty,
-    problemMessage:
-        "The comparison is always 'true' because the length is always greater than "
-        "or equal to 0.",
-    uniqueName: 'prefer_is_empty_always_true',
-    uniqueNameCheck: 'LintCode.prefer_is_empty_always_true',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferIsEmptyUseIsEmpty = LinterLintWithoutArguments(
-    name: LintNames.prefer_is_empty,
-    problemMessage:
-        "Use 'isEmpty' instead of 'length' to test whether the collection is "
-        "empty.",
-    correctionMessage: "Try rewriting the expression to use 'isEmpty'.",
-    hasPublishedDocs: true,
-    uniqueName: 'prefer_is_empty_use_is_empty',
-    uniqueNameCheck: 'LintCode.prefer_is_empty_use_is_empty',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferIsEmptyUseIsNotEmpty = LinterLintWithoutArguments(
-    name: LintNames.prefer_is_empty,
-    problemMessage:
-        "Use 'isNotEmpty' instead of 'length' to test whether the collection is "
-        "empty.",
-    correctionMessage: "Try rewriting the expression to use 'isNotEmpty'.",
-    hasPublishedDocs: true,
-    uniqueName: 'prefer_is_empty_use_is_not_empty',
-    uniqueNameCheck: 'LintCode.prefer_is_empty_use_is_not_empty',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferIsNotEmpty =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_is_not_empty,
-        problemMessage:
-            "Use 'isNotEmpty' rather than negating the result of 'isEmpty'.",
-        correctionMessage: "Try rewriting the expression to use 'isNotEmpty'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_is_not_empty',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferIsNotOperator =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_is_not_operator,
-        problemMessage:
-            "Use the 'is!' operator rather than negating the value of the 'is' "
-            "operator.",
-        correctionMessage:
-            "Try rewriting the condition to use the 'is!' operator.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_is_not_operator',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferIterableWheretype =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_iterable_whereType,
-        problemMessage: "Use 'whereType' to select elements of a given type.",
-        correctionMessage: "Try rewriting the expression to use 'whereType'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_iterable_whereType',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  preferMixin = LinterLintTemplate(
-    name: LintNames.prefer_mixin,
-    problemMessage: "Only mixins should be mixed in.",
-    correctionMessage: "Try converting '{0}' to a mixin.",
-    uniqueNameCheck: 'LintCode.prefer_mixin',
-    withArguments: _withArgumentsPreferMixin,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferNullAwareMethodCalls = LinterLintWithoutArguments(
-    name: LintNames.prefer_null_aware_method_calls,
-    problemMessage:
-        "Use a null-aware invocation of the 'call' method rather than explicitly "
-        "testing for 'null'.",
-    correctionMessage: "Try using '?.call()' to invoke the function.",
-    uniqueNameCheck: 'LintCode.prefer_null_aware_method_calls',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferNullAwareOperators =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_null_aware_operators,
-        problemMessage:
-            "Use the null-aware operator '?.' rather than an explicit 'null' "
-            "comparison.",
-        correctionMessage: "Try using '?.'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_null_aware_operators',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferRelativeImports =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_relative_imports,
-        problemMessage:
-            "Use relative imports for files in the 'lib' directory.",
-        correctionMessage: "Try converting the URI to a relative URI.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_relative_imports',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferSingleQuotes =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_single_quotes,
-        problemMessage: "Unnecessary use of double quotes.",
-        correctionMessage:
-            "Try using single quotes unless the string contains single quotes.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_single_quotes',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferSpreadCollections =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_spread_collections,
-        problemMessage: "The addition of multiple elements could be inlined.",
-        correctionMessage:
-            "Try using the spread operator ('...') to inline the addition.",
-        uniqueNameCheck: 'LintCode.prefer_spread_collections',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferTypingUninitializedVariablesForField = LinterLintWithoutArguments(
-    name: LintNames.prefer_typing_uninitialized_variables,
-    problemMessage:
-        "An uninitialized field should have an explicit type annotation.",
-    correctionMessage: "Try adding a type annotation.",
-    hasPublishedDocs: true,
-    uniqueName: 'prefer_typing_uninitialized_variables_for_field',
-    uniqueNameCheck: 'LintCode.prefer_typing_uninitialized_variables_for_field',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  preferTypingUninitializedVariablesForLocalVariable =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_typing_uninitialized_variables,
-        problemMessage:
-            "An uninitialized variable should have an explicit type annotation.",
-        correctionMessage: "Try adding a type annotation.",
-        hasPublishedDocs: true,
-        uniqueName: 'prefer_typing_uninitialized_variables_for_local_variable',
-        uniqueNameCheck:
-            'LintCode.prefer_typing_uninitialized_variables_for_local_variable',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments preferVoidToNull =
-      LinterLintWithoutArguments(
-        name: LintNames.prefer_void_to_null,
-        problemMessage: "Unnecessary use of the type 'Null'.",
-        correctionMessage: "Try using 'void' instead.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.prefer_void_to_null',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments provideDeprecationMessage =
-      LinterLintWithoutArguments(
-        name: LintNames.provide_deprecation_message,
-        problemMessage: "Missing a deprecation message.",
-        correctionMessage:
-            "Try using the constructor to provide a message "
-            "('@Deprecated(\"message\")').",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.provide_deprecation_message',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments publicMemberApiDocs =
-      LinterLintWithoutArguments(
-        name: LintNames.public_member_api_docs,
-        problemMessage: "Missing documentation for a public member.",
-        correctionMessage: "Try adding documentation for the member.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.public_member_api_docs',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  recursiveGetters = LinterLintTemplate(
-    name: LintNames.recursive_getters,
-    problemMessage: "The getter '{0}' recursively returns itself.",
-    correctionMessage: "Try changing the value being returned.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.recursive_getters',
-    withArguments: _withArgumentsRecursiveGetters,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments removeDeprecationsInBreakingVersions =
-      LinterLintWithoutArguments(
-        name: LintNames.remove_deprecations_in_breaking_versions,
-        problemMessage: "Remove deprecated elements in breaking versions.",
-        correctionMessage: "Try removing the deprecated element.",
-        uniqueNameCheck: 'LintCode.remove_deprecations_in_breaking_versions',
-        expectedTypes: [],
-      );
-
-  /// A lint code that removed lints can specify as their `lintCode`.
-  ///
-  /// Avoid other usages as it should be made unnecessary and removed.
-  static const LintCode removedLint = LinterLintCode.internal(
-    name: 'removed_lint',
-    problemMessage: 'Removed lint.',
-    expectedTypes: [],
-    uniqueNameCheck: 'LintCode.removed_lint',
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments requireTrailingCommas =
-      LinterLintWithoutArguments(
-        name: LintNames.require_trailing_commas,
-        problemMessage: "Missing a required trailing comma.",
-        correctionMessage: "Try adding a trailing comma.",
-        uniqueNameCheck: 'LintCode.require_trailing_commas',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  securePubspecUrls = LinterLintTemplate(
-    name: LintNames.secure_pubspec_urls,
-    problemMessage:
-        "The '{0}' protocol shouldn't be used because it isn't secure.",
-    correctionMessage: "Try using a secure protocol, such as 'https'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.secure_pubspec_urls',
-    withArguments: _withArgumentsSecurePubspecUrls,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments sizedBoxForWhitespace =
-      LinterLintWithoutArguments(
-        name: LintNames.sized_box_for_whitespace,
-        problemMessage: "Use a 'SizedBox' to add whitespace to a layout.",
-        correctionMessage: "Try using a 'SizedBox' rather than a 'Container'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.sized_box_for_whitespace',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  sizedBoxShrinkExpand = LinterLintTemplate(
-    name: LintNames.sized_box_shrink_expand,
-    problemMessage:
-        "Use 'SizedBox.{0}' to avoid needing to specify the 'height' and 'width'.",
-    correctionMessage:
-        "Try using 'SizedBox.{0}' and removing the 'height' and 'width' "
-        "arguments.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.sized_box_shrink_expand',
-    withArguments: _withArgumentsSizedBoxShrinkExpand,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments slashForDocComments =
-      LinterLintWithoutArguments(
-        name: LintNames.slash_for_doc_comments,
-        problemMessage: "Use the end-of-line form ('///') for doc comments.",
-        correctionMessage: "Try rewriting the comment to use '///'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.slash_for_doc_comments',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  sortChildPropertiesLast = LinterLintTemplate(
-    name: LintNames.sort_child_properties_last,
-    problemMessage:
-        "The '{0}' argument should be last in widget constructor invocations.",
-    correctionMessage:
-        "Try moving the argument to the end of the argument list.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.sort_child_properties_last',
-    withArguments: _withArgumentsSortChildPropertiesLast,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  sortConstructorsFirst = LinterLintWithoutArguments(
-    name: LintNames.sort_constructors_first,
-    problemMessage:
-        "Constructor declarations should be before non-constructor declarations.",
-    correctionMessage:
-        "Try moving the constructor declaration before all other members.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.sort_constructors_first',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments sortPubDependencies =
-      LinterLintWithoutArguments(
-        name: LintNames.sort_pub_dependencies,
-        problemMessage: "Dependencies not sorted alphabetically.",
-        correctionMessage:
-            "Try sorting the dependencies alphabetically (A to Z).",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.sort_pub_dependencies',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments sortUnnamedConstructorsFirst =
-      LinterLintWithoutArguments(
-        name: LintNames.sort_unnamed_constructors_first,
-        problemMessage: "Invalid location for the unnamed constructor.",
-        correctionMessage:
-            "Try moving the unnamed constructor before all other constructors.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.sort_unnamed_constructors_first',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  specifyNonobviousLocalVariableTypes = LinterLintWithoutArguments(
-    name: LintNames.specify_nonobvious_local_variable_types,
-    problemMessage:
-        "Specify the type of a local variable when the type is non-obvious.",
-    correctionMessage: "Try adding a type annotation.",
-    uniqueNameCheck: 'LintCode.specify_nonobvious_local_variable_types',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments specifyNonobviousPropertyTypes =
-      LinterLintWithoutArguments(
-        name: LintNames.specify_nonobvious_property_types,
-        problemMessage: "A type annotation is needed because it isn't obvious.",
-        correctionMessage: "Try adding a type annotation.",
-        uniqueNameCheck: 'LintCode.specify_nonobvious_property_types',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments strictTopLevelInferenceAddType =
-      LinterLintWithoutArguments(
-        name: LintNames.strict_top_level_inference,
-        problemMessage: "Missing type annotation.",
-        correctionMessage: "Try adding a type annotation.",
-        uniqueName: 'strict_top_level_inference_add_type',
-        uniqueNameCheck: 'LintCode.strict_top_level_inference_add_type',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  strictTopLevelInferenceReplaceKeyword = LinterLintTemplate(
-    name: LintNames.strict_top_level_inference,
-    problemMessage: "Missing type annotation.",
-    correctionMessage: "Try replacing '{0}' with a type annotation.",
-    uniqueName: 'strict_top_level_inference_replace_keyword',
-    uniqueNameCheck: 'LintCode.strict_top_level_inference_replace_keyword',
-    withArguments: _withArgumentsStrictTopLevelInferenceReplaceKeyword,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments strictTopLevelInferenceSplitToTypes =
-      LinterLintWithoutArguments(
-        name: LintNames.strict_top_level_inference,
-        problemMessage: "Missing type annotation.",
-        correctionMessage:
-            "Try splitting the declaration and specify the different type "
-            "annotations.",
-        uniqueName: 'strict_top_level_inference_split_to_types',
-        uniqueNameCheck: 'LintCode.strict_top_level_inference_split_to_types',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments switchOnType =
-      LinterLintWithoutArguments(
-        name: LintNames.switch_on_type,
-        problemMessage: "Avoid switch statements on a 'Type'.",
-        correctionMessage: "Try using pattern matching on a variable instead.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.switch_on_type',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  testTypesInEquals = LinterLintTemplate(
-    name: LintNames.test_types_in_equals,
-    problemMessage: "Missing type test for '{0}' in '=='.",
-    correctionMessage: "Try testing the type of '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.test_types_in_equals',
-    withArguments: _withArgumentsTestTypesInEquals,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  throwInFinally = LinterLintTemplate(
-    name: LintNames.throw_in_finally,
-    problemMessage: "Use of '{0}' in 'finally' block.",
-    correctionMessage: "Try moving the '{0}' outside the 'finally' block.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.throw_in_finally',
-    withArguments: _withArgumentsThrowInFinally,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  tightenTypeOfInitializingFormals = LinterLintWithoutArguments(
-    name: LintNames.tighten_type_of_initializing_formals,
-    problemMessage:
-        "Use a type annotation rather than 'assert' to enforce non-nullability.",
-    correctionMessage:
-        "Try adding a type annotation and removing the 'assert'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.tighten_type_of_initializing_formals',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments typeAnnotatePublicApis =
-      LinterLintWithoutArguments(
-        name: LintNames.type_annotate_public_apis,
-        problemMessage: "Missing type annotation on a public API.",
-        correctionMessage: "Try adding a type annotation.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.type_annotate_public_apis',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments typeInitFormals =
-      LinterLintWithoutArguments(
-        name: LintNames.type_init_formals,
-        problemMessage: "Don't needlessly type annotate initializing formals.",
-        correctionMessage: "Try removing the type.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.type_init_formals',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments typeLiteralInConstantPattern =
-      LinterLintWithoutArguments(
-        name: LintNames.type_literal_in_constant_pattern,
-        problemMessage: "Use 'TypeName _' instead of a type literal.",
-        correctionMessage: "Replace with 'TypeName _'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.type_literal_in_constant_pattern',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  unawaitedFutures = LinterLintWithoutArguments(
-    name: LintNames.unawaited_futures,
-    problemMessage:
-        "Missing an 'await' for the 'Future' computed by this expression.",
-    correctionMessage:
-        "Try adding an 'await' or wrapping the expression with 'unawaited'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.unawaited_futures',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  unintendedHtmlInDocComment = LinterLintWithoutArguments(
-    name: LintNames.unintended_html_in_doc_comment,
-    problemMessage: "Angle brackets will be interpreted as HTML.",
-    correctionMessage:
-        "Try using backticks around the content with angle brackets, or try "
-        "replacing `<` with `&lt;` and `>` with `&gt;`.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.unintended_html_in_doc_comment',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryAsync =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_async,
-        problemMessage:
-            "Don't make a function 'async' if it doesn't use 'await'.",
-        correctionMessage: "Try removing the 'async' modifier.",
-        uniqueNameCheck: 'LintCode.unnecessary_async',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryAwaitInReturn =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_await_in_return,
-        problemMessage: "Unnecessary 'await'.",
-        correctionMessage: "Try removing the 'await'.",
-        uniqueNameCheck: 'LintCode.unnecessary_await_in_return',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryBraceInStringInterps =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_brace_in_string_interps,
-        problemMessage: "Unnecessary braces in a string interpolation.",
-        correctionMessage: "Try removing the braces.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_brace_in_string_interps',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryBreaks =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_breaks,
-        problemMessage: "Unnecessary 'break' statement.",
-        correctionMessage: "Try removing the 'break'.",
-        uniqueNameCheck: 'LintCode.unnecessary_breaks',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryConst =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_const,
-        problemMessage: "Unnecessary 'const' keyword.",
-        correctionMessage: "Try removing the keyword.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_const',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryConstructorName =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_constructor_name,
-        problemMessage: "Unnecessary '.new' constructor name.",
-        correctionMessage: "Try removing the '.new'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_constructor_name',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryFinalWithoutType =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_final,
-        problemMessage: "Local variables should not be marked as 'final'.",
-        correctionMessage: "Replace 'final' with 'var'.",
-        uniqueName: 'unnecessary_final_without_type',
-        uniqueNameCheck: 'LintCode.unnecessary_final_without_type',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryFinalWithType =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_final,
-        problemMessage: "Local variables should not be marked as 'final'.",
-        correctionMessage: "Remove the 'final'.",
-        hasPublishedDocs: true,
-        uniqueName: 'unnecessary_final_with_type',
-        uniqueNameCheck: 'LintCode.unnecessary_final_with_type',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryGettersSetters =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_getters_setters,
-        problemMessage: "Unnecessary use of getter and setter to wrap a field.",
-        correctionMessage:
-            "Try removing the getter and setter and renaming the field.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_getters_setters',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unnecessaryIgnore = LinterLintTemplate(
-    name: LintNames.unnecessary_ignore,
-    problemMessage:
-        "The diagnostic '{0}' isn't produced at this location so it doesn't need "
-        "to be ignored.",
-    correctionMessage: "Try removing the ignore comment.",
-    hasPublishedDocs: true,
-    uniqueName: 'unnecessary_ignore',
-    uniqueNameCheck: 'LintCode.unnecessary_ignore',
-    withArguments: _withArgumentsUnnecessaryIgnore,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unnecessaryIgnoreFile = LinterLintTemplate(
-    name: LintNames.unnecessary_ignore,
-    problemMessage:
-        "The diagnostic '{0}' isn't produced in this file so it doesn't need to be "
-        "ignored.",
-    correctionMessage: "Try removing the ignore comment.",
-    uniqueName: 'unnecessary_ignore_file',
-    uniqueNameCheck: 'LintCode.unnecessary_ignore_file',
-    withArguments: _withArgumentsUnnecessaryIgnoreFile,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unnecessaryIgnoreName = LinterLintTemplate(
-    name: LintNames.unnecessary_ignore,
-    problemMessage:
-        "The diagnostic '{0}' isn't produced at this location so it doesn't need "
-        "to be ignored.",
-    correctionMessage: "Try removing the name from the list.",
-    uniqueName: 'unnecessary_ignore_name',
-    uniqueNameCheck: 'LintCode.unnecessary_ignore_name',
-    withArguments: _withArgumentsUnnecessaryIgnoreName,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unnecessaryIgnoreNameFile = LinterLintTemplate(
-    name: LintNames.unnecessary_ignore,
-    problemMessage:
-        "The diagnostic '{0}' isn't produced in this file so it doesn't need to be "
-        "ignored.",
-    correctionMessage: "Try removing the name from the list.",
-    uniqueName: 'unnecessary_ignore_name_file',
-    uniqueNameCheck: 'LintCode.unnecessary_ignore_name_file',
-    withArguments: _withArgumentsUnnecessaryIgnoreNameFile,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryLambdas =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_lambdas,
-        problemMessage: "Closure should be a tearoff.",
-        correctionMessage: "Try using a tearoff rather than a closure.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_lambdas',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryLate =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_late,
-        problemMessage: "Unnecessary 'late' modifier.",
-        correctionMessage: "Try removing the 'late'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_late',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  unnecessaryLibraryDirective = LinterLintWithoutArguments(
-    name: LintNames.unnecessary_library_directive,
-    problemMessage:
-        "Library directives without comments or annotations should be avoided.",
-    correctionMessage: "Try deleting the library directive.",
-    uniqueNameCheck: 'LintCode.unnecessary_library_directive',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryLibraryName =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_library_name,
-        problemMessage: "Library names are not necessary.",
-        correctionMessage: "Remove the library name.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_library_name',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryNew =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_new,
-        problemMessage: "Unnecessary 'new' keyword.",
-        correctionMessage: "Try removing the 'new' keyword.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_new',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  unnecessaryNullableForFinalVariableDeclarations = LinterLintWithoutArguments(
-    name: LintNames.unnecessary_nullable_for_final_variable_declarations,
-    problemMessage: "Type could be non-nullable.",
-    correctionMessage: "Try changing the type to be non-nullable.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'LintCode.unnecessary_nullable_for_final_variable_declarations',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryNullAwareAssignments =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_null_aware_assignments,
-        problemMessage: "Unnecessary assignment of 'null'.",
-        correctionMessage: "Try removing the assignment.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_null_aware_assignments',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  unnecessaryNullAwareOperatorOnExtensionOnNullable = LinterLintWithoutArguments(
-    name: LintNames.unnecessary_null_aware_operator_on_extension_on_nullable,
-    problemMessage:
-        "Unnecessary use of a null-aware operator to invoke an extension method on "
-        "a nullable type.",
-    correctionMessage: "Try removing the '?'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck:
-        'LintCode.unnecessary_null_aware_operator_on_extension_on_nullable',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryNullChecks =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_null_checks,
-        problemMessage: "Unnecessary use of a null check ('!').",
-        correctionMessage: "Try removing the null check.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_null_checks',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryNullInIfNullOperators =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_null_in_if_null_operators,
-        problemMessage: "Unnecessary use of '??' with 'null'.",
-        correctionMessage:
-            "Try removing the '??' operator and the 'null' operand.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_null_in_if_null_operators',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryOverrides =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_overrides,
-        problemMessage: "Unnecessary override.",
-        correctionMessage:
-            "Try adding behavior in the overriding member or removing the "
-            "override.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_overrides',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryParenthesis =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_parenthesis,
-        problemMessage: "Unnecessary use of parentheses.",
-        correctionMessage: "Try removing the parentheses.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_parenthesis',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryRawStrings =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_raw_strings,
-        problemMessage: "Unnecessary use of a raw string.",
-        correctionMessage: "Try using a normal string.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_raw_strings',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryStatements =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_statements,
-        problemMessage: "Unnecessary statement.",
-        correctionMessage: "Try completing the statement or breaking it up.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_statements',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryStringEscapes =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_string_escapes,
-        problemMessage: "Unnecessary escape in string literal.",
-        correctionMessage: "Remove the '\\' escape.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_string_escapes',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryStringInterpolations =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_string_interpolations,
-        problemMessage: "Unnecessary use of string interpolation.",
-        correctionMessage:
-            "Try replacing the string literal with the variable name.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_string_interpolations',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryThis =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_this,
-        problemMessage: "Unnecessary 'this.' qualifier.",
-        correctionMessage: "Try removing 'this.'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_this',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryToListInSpreads =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_to_list_in_spreads,
-        problemMessage: "Unnecessary use of 'toList' in a spread.",
-        correctionMessage: "Try removing the invocation of 'toList'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_to_list_in_spreads',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryUnawaited =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_unawaited,
-        problemMessage: "Unnecessary use of 'unawaited'.",
-        correctionMessage:
-            "Try removing the use of 'unawaited', as the unawaited element is "
-            "annotated with '@awaitNotRequired'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_unawaited',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments unnecessaryUnderscores =
-      LinterLintWithoutArguments(
-        name: LintNames.unnecessary_underscores,
-        problemMessage: "Unnecessary use of multiple underscores.",
-        correctionMessage: "Try using '_'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.unnecessary_underscores',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  unreachableFromMain = LinterLintTemplate(
-    name: LintNames.unreachable_from_main,
-    problemMessage: "Unreachable member '{0}' in an executable library.",
-    correctionMessage: "Try referencing the member or removing it.",
-    uniqueNameCheck: 'LintCode.unreachable_from_main',
-    withArguments: _withArgumentsUnreachableFromMain,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  unrelatedTypeEqualityChecksInExpression = LinterLintTemplate(
-    name: LintNames.unrelated_type_equality_checks,
-    problemMessage:
-        "The type of the right operand ('{0}') isn't a subtype or a supertype of "
-        "the left operand ('{1}').",
-    correctionMessage: "Try changing one or both of the operands.",
-    hasPublishedDocs: true,
-    uniqueName: 'unrelated_type_equality_checks_in_expression',
-    uniqueNameCheck: 'LintCode.unrelated_type_equality_checks_in_expression',
-    withArguments: _withArgumentsUnrelatedTypeEqualityChecksInExpression,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  /// Object p1: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0, required Object p1})
-  >
-  unrelatedTypeEqualityChecksInPattern = LinterLintTemplate(
-    name: LintNames.unrelated_type_equality_checks,
-    problemMessage:
-        "The type of the operand ('{0}') isn't a subtype or a supertype of the "
-        "value being matched ('{1}').",
-    correctionMessage: "Try changing one or both of the operands.",
-    hasPublishedDocs: true,
-    uniqueName: 'unrelated_type_equality_checks_in_pattern',
-    uniqueNameCheck: 'LintCode.unrelated_type_equality_checks_in_pattern',
-    withArguments: _withArgumentsUnrelatedTypeEqualityChecksInPattern,
-    expectedTypes: [ExpectedType.object, ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  unsafeVariance = LinterLintWithoutArguments(
-    name: LintNames.unsafe_variance,
-    problemMessage:
-        "This type is unsafe: a type parameter occurs in a non-covariant position.",
-    correctionMessage:
-        "Try using a more general type that doesn't contain any type "
-        "parameters in such a position.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.unsafe_variance',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useBuildContextSynchronouslyAsyncUse = LinterLintWithoutArguments(
-    name: LintNames.use_build_context_synchronously,
-    problemMessage: "Don't use 'BuildContext's across async gaps.",
-    correctionMessage:
-        "Try rewriting the code to not use the 'BuildContext', or guard the "
-        "use with a 'mounted' check.",
-    hasPublishedDocs: true,
-    uniqueName: 'use_build_context_synchronously_async_use',
-    uniqueNameCheck: 'LintCode.use_build_context_synchronously_async_use',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useBuildContextSynchronouslyWrongMounted = LinterLintWithoutArguments(
-    name: LintNames.use_build_context_synchronously,
-    problemMessage:
-        "Don't use 'BuildContext's across async gaps, guarded by an unrelated "
-        "'mounted' check.",
-    correctionMessage:
-        "Guard a 'State.context' use with a 'mounted' check on the State, and "
-        "other BuildContext use with a 'mounted' check on the BuildContext.",
-    hasPublishedDocs: true,
-    uniqueName: 'use_build_context_synchronously_wrong_mounted',
-    uniqueNameCheck: 'LintCode.use_build_context_synchronously_wrong_mounted',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useColoredBox =
-      LinterLintWithoutArguments(
-        name: LintNames.use_colored_box,
-        problemMessage:
-            "Use a 'ColoredBox' rather than a 'Container' with only a 'Color'.",
-        correctionMessage: "Try replacing the 'Container' with a 'ColoredBox'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_colored_box',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useDecoratedBox = LinterLintWithoutArguments(
-    name: LintNames.use_decorated_box,
-    problemMessage:
-        "Use 'DecoratedBox' rather than a 'Container' with only a 'Decoration'.",
-    correctionMessage: "Try replacing the 'Container' with a 'DecoratedBox'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_decorated_box',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useEnums = LinterLintWithoutArguments(
-    name: LintNames.use_enums,
-    problemMessage: "Class should be an enum.",
-    correctionMessage: "Try using an enum rather than a class.",
-    uniqueNameCheck: 'LintCode.use_enums',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useFullHexValuesForFlutterColors = LinterLintWithoutArguments(
-    name: LintNames.use_full_hex_values_for_flutter_colors,
-    problemMessage:
-        "Instances of 'Color' should be created using an 8-digit hexadecimal "
-        "integer (such as '0xFFFFFFFF').",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_full_hex_values_for_flutter_colors',
-    expectedTypes: [],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  useFunctionTypeSyntaxForParameters = LinterLintTemplate(
-    name: LintNames.use_function_type_syntax_for_parameters,
-    problemMessage:
-        "Use the generic function type syntax to declare the parameter '{0}'.",
-    correctionMessage: "Try using the generic function type syntax.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_function_type_syntax_for_parameters',
-    withArguments: _withArgumentsUseFunctionTypeSyntaxForParameters,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useIfNullToConvertNullsToBools =
-      LinterLintWithoutArguments(
-        name: LintNames.use_if_null_to_convert_nulls_to_bools,
-        problemMessage:
-            "Use an if-null operator to convert a 'null' to a 'bool'.",
-        correctionMessage: "Try using an if-null operator.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_if_null_to_convert_nulls_to_bools',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  useIsEvenRatherThanModulo = LinterLintTemplate(
-    name: LintNames.use_is_even_rather_than_modulo,
-    problemMessage: "Use '{0}' rather than '% 2'.",
-    correctionMessage: "Try using '{0}'.",
-    uniqueNameCheck: 'LintCode.use_is_even_rather_than_modulo',
-    withArguments: _withArgumentsUseIsEvenRatherThanModulo,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useKeyInWidgetConstructors = LinterLintWithoutArguments(
-    name: LintNames.use_key_in_widget_constructors,
-    problemMessage:
-        "Constructors for public widgets should have a named 'key' parameter.",
-    correctionMessage: "Try adding a named parameter to the constructor.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_key_in_widget_constructors',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useLateForPrivateFieldsAndVariables =
-      LinterLintWithoutArguments(
-        name: LintNames.use_late_for_private_fields_and_variables,
-        problemMessage:
-            "Use 'late' for private members with a non-nullable type.",
-        correctionMessage: "Try making adding the modifier 'late'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_late_for_private_fields_and_variables',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  useNamedConstants = LinterLintTemplate(
-    name: LintNames.use_named_constants,
-    problemMessage:
-        "Use the constant '{0}' rather than a constructor returning the same "
-        "object.",
-    correctionMessage: "Try using '{0}'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_named_constants',
-    withArguments: _withArgumentsUseNamedConstants,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useNullAwareElements = LinterLintWithoutArguments(
-    name: LintNames.use_null_aware_elements,
-    problemMessage:
-        "Use the null-aware marker '?' rather than a null check via an 'if'.",
-    correctionMessage: "Try using '?'.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_null_aware_elements',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useRawStrings =
-      LinterLintWithoutArguments(
-        name: LintNames.use_raw_strings,
-        problemMessage: "Use a raw string to avoid using escapes.",
-        correctionMessage:
-            "Try making the string a raw string and removing the escapes.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_raw_strings',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useRethrowWhenPossible =
-      LinterLintWithoutArguments(
-        name: LintNames.use_rethrow_when_possible,
-        problemMessage: "Use 'rethrow' to rethrow a caught exception.",
-        correctionMessage: "Try replacing the 'throw' with a 'rethrow'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_rethrow_when_possible',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useSettersToChangeProperties =
-      LinterLintWithoutArguments(
-        name: LintNames.use_setters_to_change_properties,
-        problemMessage: "The method is used to change a property.",
-        correctionMessage: "Try converting the method to a setter.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_setters_to_change_properties',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useStringBuffers = LinterLintWithoutArguments(
-    name: LintNames.use_string_buffers,
-    problemMessage: "Use a string buffer rather than '+' to compose strings.",
-    correctionMessage: "Try writing the parts of a string to a string buffer.",
-    hasPublishedDocs: true,
-    uniqueNameCheck: 'LintCode.use_string_buffers',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useStringInPartOfDirectives =
-      LinterLintWithoutArguments(
-        name: LintNames.use_string_in_part_of_directives,
-        problemMessage: "The part-of directive uses a library name.",
-        correctionMessage:
-            "Try converting the directive to use the URI of the library.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_string_in_part_of_directives',
-        expectedTypes: [],
-      );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  useSuperParametersMultiple = LinterLintTemplate(
-    name: LintNames.use_super_parameters,
-    problemMessage: "Parameters '{0}' could be super parameters.",
-    correctionMessage: "Trying converting '{0}' to super parameters.",
-    hasPublishedDocs: true,
-    uniqueName: 'use_super_parameters_multiple',
-    uniqueNameCheck: 'LintCode.use_super_parameters_multiple',
-    withArguments: _withArgumentsUseSuperParametersMultiple,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// Parameters:
-  /// Object p0: undocumented
-  static const LinterLintTemplate<
-    LocatableDiagnostic Function({required Object p0})
-  >
-  useSuperParametersSingle = LinterLintTemplate(
-    name: LintNames.use_super_parameters,
-    problemMessage: "Parameter '{0}' could be a super parameter.",
-    correctionMessage: "Trying converting '{0}' to a super parameter.",
-    hasPublishedDocs: true,
-    uniqueName: 'use_super_parameters_single',
-    uniqueNameCheck: 'LintCode.use_super_parameters_single',
-    withArguments: _withArgumentsUseSuperParametersSingle,
-    expectedTypes: [ExpectedType.object],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments
-  useTestThrowsMatchers = LinterLintWithoutArguments(
-    name: LintNames.use_test_throws_matchers,
-    problemMessage:
-        "Use the 'throwsA' matcher instead of using 'fail' when there is no "
-        "exception thrown.",
-    correctionMessage:
-        "Try removing the try-catch and using 'throwsA' to expect an "
-        "exception.",
-    uniqueNameCheck: 'LintCode.use_test_throws_matchers',
-    expectedTypes: [],
-  );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useToAndAsIfApplicable =
-      LinterLintWithoutArguments(
-        name: LintNames.use_to_and_as_if_applicable,
-        problemMessage: "Start the name of the method with 'to' or 'as'.",
-        correctionMessage:
-            "Try renaming the method to use either 'to' or 'as'.",
-        uniqueNameCheck: 'LintCode.use_to_and_as_if_applicable',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments useTruncatingDivision =
-      LinterLintWithoutArguments(
-        name: LintNames.use_truncating_division,
-        problemMessage: "Use truncating division.",
-        correctionMessage:
-            "Try using truncating division, '~/', instead of regular division "
-            "('/') followed by 'toInt()'.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.use_truncating_division',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments validRegexps =
-      LinterLintWithoutArguments(
-        name: LintNames.valid_regexps,
-        problemMessage: "Invalid regular expression syntax.",
-        correctionMessage: "Try correcting the regular expression.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.valid_regexps',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments visitRegisteredNodes =
-      LinterLintWithoutArguments(
-        name: LintNames.visit_registered_nodes,
-        problemMessage:
-            "Declare 'visit' methods for all registered node types.",
-        correctionMessage:
-            "Try declaring a 'visit' method for all registered node types.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.visit_registered_nodes',
-        expectedTypes: [],
-      );
-
-  /// No parameters.
-  static const LinterLintWithoutArguments voidChecks =
-      LinterLintWithoutArguments(
-        name: LintNames.void_checks,
-        problemMessage: "Assignment to a variable of type 'void'.",
-        correctionMessage:
-            "Try removing the assignment or changing the type of the variable.",
-        hasPublishedDocs: true,
-        uniqueNameCheck: 'LintCode.void_checks',
-        expectedTypes: [],
-      );
-
-  @Deprecated('Please use LintCode instead')
-  const LinterLintCode(
-    String name,
-    String problemMessage, {
-    super.expectedTypes,
-    super.correctionMessage,
-    super.hasPublishedDocs,
-    String? uniqueName,
-  }) : super(
-         name: name,
-         problemMessage: problemMessage,
-         uniqueName: 'LintCode.${uniqueName ?? name}',
-         uniqueNameCheck: null,
-       );
-
-  const LinterLintCode.internal({
-    required super.name,
-    required super.problemMessage,
-    required super.uniqueNameCheck,
-    super.expectedTypes,
-    super.correctionMessage,
-    super.hasPublishedDocs,
-    String? uniqueName,
-  }) : super(uniqueName: 'LintCode.${uniqueName ?? name}');
-
-  @override
-  String get url {
-    if (hasPublishedDocs) {
-      return 'https://dart.dev/diagnostics/$name';
-    }
-    return 'https://dart.dev/lints/$name';
-  }
-
-  static LocatableDiagnostic _withArgumentsAlwaysDeclareReturnTypesOfFunctions({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.alwaysDeclareReturnTypesOfFunctions,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAlwaysDeclareReturnTypesOfMethods({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.alwaysDeclareReturnTypesOfMethods,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAlwaysSpecifyTypesReplaceKeyword({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.alwaysSpecifyTypesReplaceKeyword,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAlwaysSpecifyTypesSpecifyType({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.alwaysSpecifyTypesSpecifyType,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAnalyzerPublicApiBadType({
-    required String types,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.analyzerPublicApiBadType, [
-      types,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAnalyzerPublicApiExperimentalInconsistency({
-    required String types,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.analyzerPublicApiExperimentalInconsistency,
-      [types],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAnalyzerPublicApiExportsNonPublicName({
-    required String elements,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.analyzerPublicApiExportsNonPublicName,
-      [elements],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAnnotateOverrides({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.annotateOverrides, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsAnnotateRedeclares({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.annotateRedeclares, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsAvoidCatchingErrorsSubclass({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.avoidCatchingErrorsSubclass, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAvoidEqualsAndHashCodeOnMutableClasses({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidEqualsAndHashCodeOnMutableClasses,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAvoidEscapingInnerQuotes({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.avoidEscapingInnerQuotes, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsAvoidRenamingMethodParameters({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidRenamingMethodParameters,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAvoidShadowingTypeParameters({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidShadowingTypeParameters,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAvoidSingleCascadeInExpressionStatements({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidSingleCascadeInExpressionStatements,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAvoidTypesAsParameterNamesFormalParameter({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidTypesAsParameterNamesFormalParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsAvoidTypesAsParameterNamesTypeParameter({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidTypesAsParameterNamesTypeParameter,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAvoidUnusedConstructorParameters({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.avoidUnusedConstructorParameters,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsAwaitOnlyFutures({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.awaitOnlyFutures, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsCamelCaseExtensions({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.camelCaseExtensions, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsCamelCaseTypes({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.camelCaseTypes, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsCollectionMethodsUnrelatedType({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.collectionMethodsUnrelatedType,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsConditionalUriDoesNotExist({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.conditionalUriDoesNotExist, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsConstantIdentifierNames({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.constantIdentifierNames, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsControlFlowInFinally({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.controlFlowInFinally, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsCurlyBracesInFlowControlStructures({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.curlyBracesInFlowControlStructures,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDependOnReferencedPackages({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.dependOnReferencedPackages, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsDeprecatedMemberUseFromSamePackageWithMessage({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.deprecatedMemberUseFromSamePackageWithMessage,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsDeprecatedMemberUseFromSamePackageWithoutMessage({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.deprecatedMemberUseFromSamePackageWithoutMessage,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsDirectivesOrderingDart({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.directivesOrderingDart, [p0]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsDirectivesOrderingPackageBeforeRelative({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.directivesOrderingPackageBeforeRelative,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsExhaustiveCases({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.exhaustiveCases, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsFileNames({required Object p0}) {
-    return LocatableDiagnosticImpl(LinterLintCode.fileNames, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsHashAndEquals({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.hashAndEquals, [p0, p1]);
-  }
-
-  static LocatableDiagnostic _withArgumentsImplicitReopen({
-    required Object p0,
-    required Object p1,
-    required Object p2,
-    required Object p3,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.implicitReopen, [
-      p0,
-      p1,
-      p2,
-      p3,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartAsJs({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesDartAsJs,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesDartIsJs({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesDartIsJs,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsDart({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsAsDart,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsDart({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsDart,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsInvalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsLibraryNames({required Object p0}) {
-    return LocatableDiagnosticImpl(LinterLintCode.libraryNames, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsLibraryPrefixes({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.libraryPrefixes, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsMatchingSuperParameters({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.matchingSuperParameters, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsNoDuplicateCaseValues({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.noDuplicateCaseValues, [
-      p0,
-      p1,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNoLeadingUnderscoresForLibraryPrefixes({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.noLeadingUnderscoresForLibraryPrefixes,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsNoLeadingUnderscoresForLocalIdentifiers({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.noLeadingUnderscoresForLocalIdentifiers,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsNonConstantIdentifierNames({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.nonConstantIdentifierNames, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsOneMemberAbstracts({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.oneMemberAbstracts, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsOverriddenFields({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.overriddenFields, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPackageNames({required Object p0}) {
-    return LocatableDiagnosticImpl(LinterLintCode.packageNames, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPackagePrefixedLibraryNames({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.packagePrefixedLibraryNames, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsParameterAssignments({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.parameterAssignments, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPreferFinalFields({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.preferFinalFields, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPreferFinalInForEachVariable({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.preferFinalInForEachVariable,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPreferFinalParameters({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.preferFinalParameters, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPreferGenericFunctionTypeAliases({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.preferGenericFunctionTypeAliases,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsPreferInitializingFormals({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.preferInitializingFormals, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsPreferMixin({required Object p0}) {
-    return LocatableDiagnosticImpl(LinterLintCode.preferMixin, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsRecursiveGetters({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.recursiveGetters, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSecurePubspecUrls({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.securePubspecUrls, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSizedBoxShrinkExpand({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.sizedBoxShrinkExpand, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsSortChildPropertiesLast({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.sortChildPropertiesLast, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsStrictTopLevelInferenceReplaceKeyword({required Object p0}) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.strictTopLevelInferenceReplaceKeyword,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsTestTypesInEquals({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.testTypesInEquals, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsThrowInFinally({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.throwInFinally, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryIgnore({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.unnecessaryIgnore, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryIgnoreFile({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.unnecessaryIgnoreFile, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryIgnoreName({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.unnecessaryIgnoreName, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnnecessaryIgnoreNameFile({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.unnecessaryIgnoreNameFile, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUnreachableFromMain({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.unreachableFromMain, [p0]);
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUnrelatedTypeEqualityChecksInExpression({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.unrelatedTypeEqualityChecksInExpression,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic
-  _withArgumentsUnrelatedTypeEqualityChecksInPattern({
-    required Object p0,
-    required Object p1,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.unrelatedTypeEqualityChecksInPattern,
-      [p0, p1],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUseFunctionTypeSyntaxForParameters({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(
-      LinterLintCode.useFunctionTypeSyntaxForParameters,
-      [p0],
-    );
-  }
-
-  static LocatableDiagnostic _withArgumentsUseIsEvenRatherThanModulo({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.useIsEvenRatherThanModulo, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUseNamedConstants({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.useNamedConstants, [p0]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUseSuperParametersMultiple({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.useSuperParametersMultiple, [
-      p0,
-    ]);
-  }
-
-  static LocatableDiagnostic _withArgumentsUseSuperParametersSingle({
-    required Object p0,
-  }) {
-    return LocatableDiagnosticImpl(LinterLintCode.useSuperParametersSingle, [
-      p0,
-    ]);
-  }
-}
-
-final class LinterLintTemplate<T extends Function> extends LinterLintCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const LinterLintTemplate({
-    required super.name,
-    required super.problemMessage,
-    required this.withArguments,
-    required super.expectedTypes,
-    required String super.uniqueNameCheck,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.uniqueName,
-  }) : super.internal();
-}
-
-final class LinterLintWithoutArguments extends LinterLintCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const LinterLintWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    required super.expectedTypes,
-    required String super.uniqueNameCheck,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.uniqueName,
-  }) : super.internal();
-}
diff --git a/pkg/linter/lib/src/rules.dart b/pkg/linter/lib/src/rules.dart
index 98c0e09..5aaf3c5 100644
--- a/pkg/linter/lib/src/rules.dart
+++ b/pkg/linter/lib/src/rules.dart
@@ -263,7 +263,7 @@
     ..registerLintRule(AlwaysDeclareReturnTypes())
     ..registerLintRule(AlwaysPutControlBodyOnNewLine())
     ..registerLintRule(AlwaysPutRequiredNamedParametersFirst())
-    ..registerLintRule(AlwaysRequireNonNullNamedParameters())
+    ..registerLintRule(alwaysRequireNonNullNamedParameters)
     ..registerLintRule(AlwaysSpecifyTypes())
     ..registerLintRule(AlwaysUsePackageImports())
     ..registerLintRule(AnalyzerElementModelTracking())
@@ -271,7 +271,7 @@
     ..registerLintRule(AnnotateOverrides())
     ..registerLintRule(AnnotateRedeclares())
     ..registerLintRule(AvoidAnnotatingWithDynamic())
-    ..registerLintRule(AvoidAs())
+    ..registerLintRule(avoidAs)
     ..registerLintRule(AvoidBoolLiteralsInConditionalExpressions())
     ..registerLintRule(AvoidCatchesWithoutOnClauses())
     ..registerLintRule(AvoidCatchingErrors())
@@ -297,8 +297,8 @@
     ..registerLintRule(AvoidRelativeLibImports())
     ..registerLintRule(AvoidRenamingMethodParameters())
     ..registerLintRule(AvoidReturnTypesOnSetters())
-    ..registerLintRule(AvoidReturningNull())
-    ..registerLintRule(AvoidReturningNullForFuture())
+    ..registerLintRule(avoidReturningNull)
+    ..registerLintRule(avoidReturningNullForFuture)
     ..registerLintRule(AvoidReturningNullForVoid())
     ..registerLintRule(AvoidReturningThis())
     ..registerLintRule(AvoidSettersWithoutGetters())
@@ -309,7 +309,7 @@
     ..registerLintRule(AvoidTypesAsParameterNames())
     ..registerLintRule(AvoidTypesOnClosureParameters())
     ..registerLintRule(AvoidUnnecessaryContainers())
-    ..registerLintRule(AvoidUnstableFinalFields())
+    ..registerLintRule(avoidUnstableFinalFields)
     ..registerLintRule(AvoidUnusedConstructorParameters())
     ..registerLintRule(AvoidVoidAsync())
     ..registerLintRule(AvoidWebLibrariesInFlutter())
@@ -339,7 +339,7 @@
     ..registerLintRule(EmptyCatches())
     ..registerLintRule(EmptyConstructorBodies())
     ..registerLintRule(EmptyStatements())
-    ..registerLintRule(EnableNullSafety())
+    ..registerLintRule(enableNullSafety)
     ..registerLintRule(EolAtEndOfFile())
     ..registerLintRule(EraseDartTypeExtensionTypes())
     ..registerLintRule(ExhaustiveCases())
@@ -350,8 +350,8 @@
     ..registerLintRule(ImplicitCallTearoffs())
     ..registerLintRule(ImplicitReopen())
     ..registerLintRule(InvalidCasePatterns())
-    ..registerLintRule(InvariantBooleans())
-    ..registerLintRule(IterableContainsUnrelatedType())
+    ..registerLintRule(invariantBooleans)
+    ..registerLintRule(iterableContainsUnrelatedType)
     ..registerLintRule(InvalidRuntimeCheckWithJSInteropTypes())
     ..registerLintRule(JoinReturnWithAssignment())
     ..registerLintRule(LeadingNewlinesInMultilineStrings())
@@ -360,7 +360,7 @@
     ..registerLintRule(LibraryPrefixes())
     ..registerLintRule(LibraryPrivateTypesInPublicApi())
     ..registerLintRule(LinesLongerThan80Chars())
-    ..registerLintRule(ListRemoveUnrelatedType())
+    ..registerLintRule(listRemoveUnrelatedType)
     ..registerLintRule(LiteralOnlyBooleanExpressions())
     ..registerLintRule(MatchingSuperParameters())
     ..registerLintRule(MissingCodeBlockLanguageInDocComment())
@@ -385,14 +385,14 @@
     ..registerLintRule(OneMemberAbstracts())
     ..registerLintRule(OnlyThrowErrors())
     ..registerLintRule(OverriddenFields())
-    ..registerLintRule(PackageApiDocs())
+    ..registerLintRule(packageApiDocs)
     ..registerLintRule(PackageNames())
     ..registerLintRule(PackagePrefixedLibraryNames())
     ..registerLintRule(ParameterAssignments())
     ..registerLintRule(PreferAdjacentStringConcatenation())
     ..registerLintRule(PreferAssertsInInitializerLists())
     ..registerLintRule(PreferAssertsWithMessage())
-    ..registerLintRule(PreferBoolInAsserts())
+    ..registerLintRule(preferBoolInAsserts)
     ..registerLintRule(PreferCollectionLiterals())
     ..registerLintRule(PreferConditionalAssignment())
     ..registerLintRule(PreferConstConstructors())
@@ -402,7 +402,7 @@
     ..registerLintRule(PreferConstructorsOverStaticMethods())
     ..registerLintRule(PreferContains())
     ..registerLintRule(PreferDoubleQuotes())
-    ..registerLintRule(PreferEqualForDefaultValues())
+    ..registerLintRule(preferEqualForDefaultValues)
     ..registerLintRule(PreferExpressionFunctionBodies())
     ..registerLintRule(PreferFinalFields())
     ..registerLintRule(PreferFinalInForEach())
@@ -443,7 +443,7 @@
     ..registerLintRule(SortConstructorsFirst())
     ..registerLintRule(SortPubDependencies())
     ..registerLintRule(SortUnnamedConstructorsFirst())
-    ..registerLintRule(SuperGoesLast())
+    ..registerLintRule(superGoesLast)
     ..registerLintRule(SpecifyNonObviousLocalVariableTypes())
     ..registerLintRule(SpecifyNonObviousPropertyTypes())
     ..registerLintRule(StrictTopLevelInference())
@@ -487,7 +487,7 @@
     ..registerLintRule(UnnecessaryUnderscores())
     ..registerLintRule(UnreachableFromMain())
     ..registerLintRule(UnrelatedTypeEqualityChecks())
-    ..registerLintRule(UnsafeHtml())
+    ..registerLintRule(unsafeHtml)
     ..registerLintRule(UnsafeVariance())
     ..registerLintRule(UseBuildContextSynchronously())
     ..registerLintRule(UseColoredBox())
diff --git a/pkg/linter/lib/src/rules/always_declare_return_types.dart b/pkg/linter/lib/src/rules/always_declare_return_types.dart
index e150917..40ded3b 100644
--- a/pkg/linter/lib/src/rules/always_declare_return_types.dart
+++ b/pkg/linter/lib/src/rules/always_declare_return_types.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Declare method return types.';
@@ -21,8 +22,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.alwaysDeclareReturnTypesOfFunctions,
-    LinterLintCode.alwaysDeclareReturnTypesOfMethods,
+    diag.alwaysDeclareReturnTypesOfFunctions,
+    diag.alwaysDeclareReturnTypesOfMethods,
   ];
 
   @override
@@ -49,7 +50,7 @@
       rule.reportAtToken(
         node.name,
         arguments: [node.name.lexeme],
-        diagnosticCode: LinterLintCode.alwaysDeclareReturnTypesOfFunctions,
+        diagnosticCode: diag.alwaysDeclareReturnTypesOfFunctions,
       );
     }
   }
@@ -60,7 +61,7 @@
       rule.reportAtToken(
         node.name,
         arguments: [node.name.lexeme],
-        diagnosticCode: LinterLintCode.alwaysDeclareReturnTypesOfFunctions,
+        diagnosticCode: diag.alwaysDeclareReturnTypesOfFunctions,
       );
     }
   }
@@ -82,7 +83,7 @@
     rule.reportAtToken(
       node.name,
       arguments: [node.name.lexeme],
-      diagnosticCode: LinterLintCode.alwaysDeclareReturnTypesOfMethods,
+      diagnosticCode: diag.alwaysDeclareReturnTypesOfMethods,
     );
   }
 }
diff --git a/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart b/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart
index 7b377d9..ef7a5fd 100644
--- a/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart
+++ b/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Separate the control structure expression from its statement.';
 
@@ -21,8 +22,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.alwaysPutControlBodyOnNewLine;
+  DiagnosticCode get diagnosticCode => diag.alwaysPutControlBodyOnNewLine;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart b/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart
index 93d9150..9b68c36 100644
--- a/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart
+++ b/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Put required named parameters first.';
 
@@ -22,7 +23,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.alwaysPutRequiredNamedParametersFirst;
+      diag.alwaysPutRequiredNamedParametersFirst;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart b/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart
index edcc04d..b6ef2de 100644
--- a/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart
+++ b/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Specify `@required` on named parameters without defaults.';
 
-class AlwaysRequireNonNullNamedParameters extends AnalysisRule {
-  AlwaysRequireNonNullNamedParameters()
-    : super(
-        name: LintNames.always_require_non_null_named_parameters,
-        description: _desc,
-        state: RuleState.removed(since: dart3_3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final alwaysRequireNonNullNamedParameters = RemovedAnalysisRule(
+  name: LintNames.always_require_non_null_named_parameters,
+  description: _desc,
+  since: dart3_3,
+);
diff --git a/pkg/linter/lib/src/rules/always_specify_types.dart b/pkg/linter/lib/src/rules/always_specify_types.dart
index 985b671..1b17a1d 100644
--- a/pkg/linter/lib/src/rules/always_specify_types.dart
+++ b/pkg/linter/lib/src/rules/always_specify_types.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/ascii_utils.dart';
 
 const _desc = r'Specify type annotations.';
@@ -23,10 +24,10 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.alwaysSpecifyTypesAddType,
-    LinterLintCode.alwaysSpecifyTypesReplaceKeyword,
-    LinterLintCode.alwaysSpecifyTypesSpecifyType,
-    LinterLintCode.alwaysSpecifyTypesSplitToTypes,
+    diag.alwaysSpecifyTypesAddType,
+    diag.alwaysSpecifyTypesReplaceKeyword,
+    diag.alwaysSpecifyTypesSpecifyType,
+    diag.alwaysSpecifyTypesSplitToTypes,
   ];
 
   @override
@@ -62,7 +63,7 @@
     if (literal.typeArguments == null) {
       rule.reportAtToken(
         literal.beginToken,
-        diagnosticCode: LinterLintCode.alwaysSpecifyTypesAddType,
+        diagnosticCode: diag.alwaysSpecifyTypesAddType,
       );
     }
   }
@@ -76,13 +77,13 @@
         if (keyword.keyword == Keyword.VAR) {
           rule.reportAtToken(
             keyword,
-            diagnosticCode: LinterLintCode.alwaysSpecifyTypesReplaceKeyword,
+            diagnosticCode: diag.alwaysSpecifyTypesReplaceKeyword,
             arguments: [keyword.lexeme, element!.type],
           );
         } else {
           rule.reportAtToken(
             keyword,
-            diagnosticCode: LinterLintCode.alwaysSpecifyTypesSpecifyType,
+            diagnosticCode: diag.alwaysSpecifyTypesSpecifyType,
             arguments: [element!.type],
           );
         }
@@ -100,13 +101,13 @@
         rule.reportAtToken(
           tokenToLint,
           arguments: [keyword.lexeme, type],
-          diagnosticCode: LinterLintCode.alwaysSpecifyTypesReplaceKeyword,
+          diagnosticCode: diag.alwaysSpecifyTypesReplaceKeyword,
         );
       } else {
         rule.reportAtToken(
           tokenToLint,
           arguments: [type],
-          diagnosticCode: LinterLintCode.alwaysSpecifyTypesSpecifyType,
+          diagnosticCode: diag.alwaysSpecifyTypesSpecifyType,
         );
       }
     }
@@ -129,7 +130,7 @@
           !element.metadata.hasOptionalTypeArgs) {
         rule.reportAtNode(
           namedType,
-          diagnosticCode: LinterLintCode.alwaysSpecifyTypesAddType,
+          diagnosticCode: diag.alwaysSpecifyTypesAddType,
         );
       }
     }
@@ -153,25 +154,25 @@
           rule.reportAtToken(
             keyword,
             arguments: [keyword.lexeme, type],
-            diagnosticCode: LinterLintCode.alwaysSpecifyTypesReplaceKeyword,
+            diagnosticCode: diag.alwaysSpecifyTypesReplaceKeyword,
           );
         } else {
           rule.reportAtToken(
             keyword,
-            diagnosticCode: LinterLintCode.alwaysSpecifyTypesAddType,
+            diagnosticCode: diag.alwaysSpecifyTypesAddType,
           );
         }
       } else if (type != null) {
         if (type is DynamicType) {
           rule.reportAtNode(
             param,
-            diagnosticCode: LinterLintCode.alwaysSpecifyTypesAddType,
+            diagnosticCode: diag.alwaysSpecifyTypesAddType,
           );
         } else {
           rule.reportAtNode(
             param,
             arguments: [type],
-            diagnosticCode: LinterLintCode.alwaysSpecifyTypesSpecifyType,
+            diagnosticCode: diag.alwaysSpecifyTypesSpecifyType,
           );
         }
       }
@@ -202,22 +203,22 @@
       DiagnosticCode lintCode;
       if (types.isEmpty) {
         arguments = [];
-        lintCode = LinterLintCode.alwaysSpecifyTypesAddType;
+        lintCode = diag.alwaysSpecifyTypesAddType;
       } else if (keyword.type == Keyword.VAR) {
         if (singleType) {
           arguments = [keyword.lexeme, types.first];
-          lintCode = LinterLintCode.alwaysSpecifyTypesReplaceKeyword;
+          lintCode = diag.alwaysSpecifyTypesReplaceKeyword;
         } else {
           arguments = [];
-          lintCode = LinterLintCode.alwaysSpecifyTypesSplitToTypes;
+          lintCode = diag.alwaysSpecifyTypesSplitToTypes;
         }
       } else {
         if (singleType) {
           arguments = [types.first];
-          lintCode = LinterLintCode.alwaysSpecifyTypesSpecifyType;
+          lintCode = diag.alwaysSpecifyTypesSpecifyType;
         } else {
           arguments = [];
-          lintCode = LinterLintCode.alwaysSpecifyTypesAddType;
+          lintCode = diag.alwaysSpecifyTypesAddType;
         }
       }
       rule.reportAtToken(
diff --git a/pkg/linter/lib/src/rules/always_use_package_imports.dart b/pkg/linter/lib/src/rules/always_use_package_imports.dart
index 88a8b46..c09d0c1 100644
--- a/pkg/linter/lib/src/rules/always_use_package_imports.dart
+++ b/pkg/linter/lib/src/rules/always_use_package_imports.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid relative imports for files in `lib/`.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.always_use_package_imports, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.alwaysUsePackageImports;
+  DiagnosticCode get diagnosticCode => diag.alwaysUsePackageImports;
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/analyzer_element_model_tracking.dart b/pkg/linter/lib/src/rules/analyzer_element_model_tracking.dart
index 3bea37c..3f1e903 100644
--- a/pkg/linter/lib/src/rules/analyzer_element_model_tracking.dart
+++ b/pkg/linter/lib/src/rules/analyzer_element_model_tracking.dart
@@ -12,7 +12,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 
-import '../lint_codes.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = 'Specify element model tracking annotation.';
 
@@ -28,9 +28,9 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.analyzerElementModelTrackingBad,
-    LinterLintCode.analyzerElementModelTrackingMoreThanOne,
-    LinterLintCode.analyzerElementModelTrackingZero,
+    diag.analyzerElementModelTrackingBad,
+    diag.analyzerElementModelTrackingMoreThanOne,
+    diag.analyzerElementModelTrackingZero,
   ];
 
   @override
@@ -59,98 +59,103 @@
   void visitClassDeclaration(ClassDeclaration node) {
     var element = node.declaredFragment!.element;
     if (element.isElementClass) {
-      for (var member in node.members) {
-        var trackingAnnotations = member.metadata
-            .map((node) => node.asTrackingAnnotation)
-            .nonNulls
-            .toList();
+      if (node.body case BlockClassBody body) {
+        for (var member in body.members) {
+          var trackingAnnotations = member.metadata
+              .map((node) => node.asTrackingAnnotation)
+              .nonNulls
+              .toList();
 
-        switch (member) {
-          case ConstructorDeclaration():
-            trackingAnnotations.forEach(_reportBad);
-          case FieldDeclaration fieldDeclaration:
-            for (var field in fieldDeclaration.fields.variables) {
-              var fieldElement =
-                  field.declaredFragment!.element as FieldElement;
-              if (fieldElement.isPublic && fieldElement.isInstance) {
-                var hasRequired = false;
-                for (var annotation in trackingAnnotations) {
-                  if (annotation.element.isTrackedIncludedInId ||
-                      annotation.element.isTrackedIndirectly ||
-                      annotation.element.isTrackedInternal) {
-                    if (hasRequired) {
-                      _reportMoreThanOne(annotation);
+          switch (member) {
+            case ConstructorDeclaration():
+              trackingAnnotations.forEach(_reportBad);
+            case FieldDeclaration fieldDeclaration:
+              for (var field in fieldDeclaration.fields.variables) {
+                var fieldElement =
+                    field.declaredFragment!.element as FieldElement;
+                if (fieldElement.isPublic && fieldElement.isInstance) {
+                  var hasRequired = false;
+                  for (var annotation in trackingAnnotations) {
+                    if (annotation.element.isTrackedIncludedInId ||
+                        annotation.element.isTrackedIndirectly ||
+                        annotation.element.isTrackedInternal) {
+                      if (hasRequired) {
+                        _reportMoreThanOne(annotation);
+                      }
+                      hasRequired = true;
+                    } else {
+                      _reportBad(annotation);
                     }
-                    hasRequired = true;
-                  } else {
-                    _reportBad(annotation);
                   }
+                  if (!hasRequired) {
+                    _reportMissing(field.name);
+                  }
+                } else {
+                  trackingAnnotations.forEach(_reportBad);
                 }
-                if (!hasRequired) {
-                  _reportMissing(field.name);
-                }
-              } else {
-                trackingAnnotations.forEach(_reportBad);
               }
-            }
-          case MethodDeclaration methodDeclaration:
-            var element = methodDeclaration.declaredFragment!.element;
-            switch (element) {
-              case GetterElement getterElement:
-                if (getterElement.isPublic &&
-                    getterElement.isInstance &&
-                    !getterElement.isAbstract) {
-                  var hasRequired = false;
-                  for (var annotation in trackingAnnotations) {
-                    if (annotation.element.isTrackedDirectly ||
-                        annotation.element.isTrackedDirectlyExpensive ||
-                        annotation.element.isTrackedDirectlyOpaque ||
-                        annotation.element.isTrackedIncludedInId ||
-                        annotation.element.isTrackedIndirectly ||
-                        annotation.element.isTrackedInternal) {
-                      if (hasRequired) {
-                        _reportMoreThanOne(annotation);
+            case MethodDeclaration methodDeclaration:
+              var element = methodDeclaration.declaredFragment!.element;
+              switch (element) {
+                case GetterElement getterElement:
+                  if (getterElement.isPublic &&
+                      getterElement.isInstance &&
+                      !getterElement.isAbstract) {
+                    var hasRequired = false;
+                    for (var annotation in trackingAnnotations) {
+                      if (annotation.element.isTrackedDirectly ||
+                          annotation.element.isTrackedDirectlyExpensive ||
+                          annotation.element.isTrackedDirectlyOpaque ||
+                          annotation.element.isTrackedIncludedInId ||
+                          annotation.element.isTrackedIndirectly ||
+                          annotation.element.isTrackedInternal) {
+                        if (hasRequired) {
+                          _reportMoreThanOne(annotation);
+                        }
+                        hasRequired = true;
+                      } else {
+                        _reportBad(annotation);
                       }
-                      hasRequired = true;
-                    } else {
-                      _reportBad(annotation);
                     }
+                    if (!hasRequired) {
+                      _reportMissing(methodDeclaration.name);
+                    }
+                  } else {
+                    trackingAnnotations.forEach(_reportBad);
                   }
-                  if (!hasRequired) {
-                    _reportMissing(methodDeclaration.name);
-                  }
-                } else {
+                case SetterElement():
                   trackingAnnotations.forEach(_reportBad);
-                }
-              case SetterElement():
-                trackingAnnotations.forEach(_reportBad);
-              case MethodElement methodElement:
-                if (methodElement.isPublic &&
-                    methodElement.isInstance &&
-                    !methodElement.isAbstract) {
-                  var hasRequired = false;
-                  for (var annotation in trackingAnnotations) {
-                    if (annotation.element.isTrackedDirectly ||
-                        annotation.element.isTrackedDirectlyExpensive ||
-                        annotation.element.isTrackedDirectlyOpaque ||
-                        annotation.element.isTrackedIncludedInId ||
-                        annotation.element.isTrackedIndirectly ||
-                        annotation.element.isTrackedInternal) {
-                      if (hasRequired) {
-                        _reportMoreThanOne(annotation);
+                case MethodElement methodElement:
+                  if (methodElement.isPublic &&
+                      methodElement.isInstance &&
+                      !methodElement.isAbstract) {
+                    var hasRequired = false;
+                    for (var annotation in trackingAnnotations) {
+                      if (annotation.element.isTrackedDirectly ||
+                          annotation.element.isTrackedDirectlyExpensive ||
+                          annotation.element.isTrackedDirectlyOpaque ||
+                          annotation.element.isTrackedIncludedInId ||
+                          annotation.element.isTrackedIndirectly ||
+                          annotation.element.isTrackedInternal) {
+                        if (hasRequired) {
+                          _reportMoreThanOne(annotation);
+                        }
+                        hasRequired = true;
+                      } else {
+                        _reportBad(annotation);
                       }
-                      hasRequired = true;
-                    } else {
-                      _reportBad(annotation);
                     }
+                    if (!hasRequired) {
+                      _reportMissing(methodDeclaration.name);
+                    }
+                  } else {
+                    trackingAnnotations.forEach(_reportBad);
                   }
-                  if (!hasRequired) {
-                    _reportMissing(methodDeclaration.name);
-                  }
-                } else {
-                  trackingAnnotations.forEach(_reportBad);
-                }
-            }
+              }
+            case PrimaryConstructorBody():
+              // TODO(scheglov): Handle this case.
+              throw UnimplementedError();
+          }
         }
       }
     }
@@ -159,21 +164,21 @@
   void _reportBad(_TrackingAnnotation annotation) {
     rule.reportAtNode(
       annotation.node,
-      diagnosticCode: LinterLintCode.analyzerElementModelTrackingBad,
+      diagnosticCode: diag.analyzerElementModelTrackingBad,
     );
   }
 
   void _reportMissing(Token name) {
     rule.reportAtToken(
       name,
-      diagnosticCode: LinterLintCode.analyzerElementModelTrackingZero,
+      diagnosticCode: diag.analyzerElementModelTrackingZero,
     );
   }
 
   void _reportMoreThanOne(_TrackingAnnotation annotation) {
     rule.reportAtNode(
       annotation.node,
-      diagnosticCode: LinterLintCode.analyzerElementModelTrackingMoreThanOne,
+      diagnosticCode: diag.analyzerElementModelTrackingMoreThanOne,
     );
   }
 }
diff --git a/pkg/linter/lib/src/rules/analyzer_public_api.dart b/pkg/linter/lib/src/rules/analyzer_public_api.dart
index 72edce2..36d6d61 100644
--- a/pkg/linter/lib/src/rules/analyzer_public_api.dart
+++ b/pkg/linter/lib/src/rules/analyzer_public_api.dart
@@ -13,7 +13,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
 
-import '../lint_codes.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     'Do not expose implementation details through the analyzer public API.';
@@ -30,11 +30,11 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.analyzerPublicApiBadPartDirective,
-    LinterLintCode.analyzerPublicApiBadType,
-    LinterLintCode.analyzerPublicApiExperimentalInconsistency,
-    LinterLintCode.analyzerPublicApiExportsNonPublicName,
-    LinterLintCode.analyzerPublicApiImplInPublicApi,
+    diag.analyzerPublicApiBadPartDirective,
+    diag.analyzerPublicApiBadType,
+    diag.analyzerPublicApiExperimentalInconsistency,
+    diag.analyzerPublicApiExportsNonPublicName,
+    diag.analyzerPublicApiImplInPublicApi,
   ];
 
   @override
@@ -119,7 +119,7 @@
     if (badNames != null) {
       rule.reportAtNode(
         node,
-        diagnosticCode: LinterLintCode.analyzerPublicApiExportsNonPublicName,
+        diagnosticCode: diag.analyzerPublicApiExportsNonPublicName,
         arguments: [badNames.join(', ')],
       );
     }
@@ -136,7 +136,7 @@
     if (!partElement.includedFragment!.source.uri.isInAnalyzerPublicLib) {
       rule.reportAtNode(
         node,
-        diagnosticCode: LinterLintCode.analyzerPublicApiBadPartDirective,
+        diagnosticCode: diag.analyzerPublicApiBadPartDirective,
       );
     }
   }
@@ -171,7 +171,7 @@
       rule.reportAtOffset(
         fragment.nameOffset!,
         name.length,
-        diagnosticCode: LinterLintCode.analyzerPublicApiImplInPublicApi,
+        diagnosticCode: diag.analyzerPublicApiImplInPublicApi,
       );
     }
     var isUsageSiteExperimental = fragment.element.metadata.hasExperimental;
@@ -279,7 +279,7 @@
       rule.reportAtOffset(
         offsetAndLength.offset,
         offsetAndLength.length,
-        diagnosticCode: LinterLintCode.analyzerPublicApiBadType,
+        diagnosticCode: diag.analyzerPublicApiBadType,
         arguments: [nonPublicProblems.join(', ')],
       );
     }
@@ -287,8 +287,7 @@
       rule.reportAtOffset(
         offsetAndLength.offset,
         offsetAndLength.length,
-        diagnosticCode:
-            LinterLintCode.analyzerPublicApiExperimentalInconsistency,
+        diagnosticCode: diag.analyzerPublicApiExperimentalInconsistency,
         arguments: [nonPublicProblems.join(', ')],
       );
     }
@@ -436,19 +435,19 @@
 extension on Element {
   bool get isInAnalyzerPublicApi {
     if (this case PropertyAccessorElement(
-      isSynthetic: true,
+      isOriginVariable: true,
       :var variable,
     ) when variable.isInAnalyzerPublicApi) {
       return true;
     }
     if (this case PropertyInducingElement(
-      isSynthetic: true,
+      isOriginGetterSetter: true,
       :var getter?,
     ) when getter.isInAnalyzerPublicApi) {
       return true;
     }
     if (this case PropertyInducingElement(
-      isSynthetic: true,
+      isOriginGetterSetter: true,
       :var setter?,
     ) when setter.isInAnalyzerPublicApi) {
       return true;
diff --git a/pkg/linter/lib/src/rules/annotate_overrides.dart b/pkg/linter/lib/src/rules/annotate_overrides.dart
index cb6f886..7a70726 100644
--- a/pkg/linter/lib/src/rules/annotate_overrides.dart
+++ b/pkg/linter/lib/src/rules/annotate_overrides.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Annotate overridden members.';
@@ -21,7 +22,7 @@
     : super(name: LintNames.annotate_overrides, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.annotateOverrides;
+  DiagnosticCode get diagnosticCode => diag.annotateOverrides;
 
   @override
   void registerNodeProcessors(
@@ -54,7 +55,7 @@
   void visitFieldDeclaration(FieldDeclaration node) {
     if (node.isAugmentation) return;
     if (node.isStatic) return;
-    if (node.parent is ExtensionTypeDeclaration) return;
+    if (node.parent?.parent is ExtensionTypeDeclaration) return;
 
     for (var field in node.fields.variables) {
       check(field.declaredFragment?.element, field.name);
@@ -65,7 +66,7 @@
   void visitMethodDeclaration(MethodDeclaration node) {
     if (node.isAugmentation) return;
     if (node.isStatic) return;
-    if (node.parent is ExtensionTypeDeclaration) return;
+    if (node.parent?.parent is ExtensionTypeDeclaration) return;
 
     check(node.declaredFragment?.element, node.name);
   }
diff --git a/pkg/linter/lib/src/rules/annotate_redeclares.dart b/pkg/linter/lib/src/rules/annotate_redeclares.dart
index d05116c..faf4b4c 100644
--- a/pkg/linter/lib/src/rules/annotate_redeclares.dart
+++ b/pkg/linter/lib/src/rules/annotate_redeclares.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Annotate redeclared members.';
 
@@ -24,7 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.annotateRedeclares;
+  DiagnosticCode get diagnosticCode => diag.annotateRedeclares;
 
   @override
   void registerNodeProcessors(
@@ -43,12 +44,14 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    node.members.whereType<MethodDeclaration>().forEach(_check);
+    if (node.body case BlockClassBody body) {
+      body.members.whereType<MethodDeclaration>().forEach(_check);
+    }
   }
 
   void _check(MethodDeclaration node) {
     if (node.isStatic) return;
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     // Shouldn't happen.
     if (parent is! ExtensionTypeDeclaration) return;
 
diff --git a/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart b/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart
index 28d520e..35d55b0 100644
--- a/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart
+++ b/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid annotating with `dynamic` when not required.';
@@ -20,8 +21,7 @@
     : super(name: LintNames.avoid_annotating_with_dynamic, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidAnnotatingWithDynamic;
+  DiagnosticCode get diagnosticCode => diag.avoidAnnotatingWithDynamic;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_as.dart b/pkg/linter/lib/src/rules/avoid_as.dart
index 5a8f54d..819fa91 100644
--- a/pkg/linter/lib/src/rules/avoid_as.dart
+++ b/pkg/linter/lib/src/rules/avoid_as.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Avoid using `as`.';
 
-class AvoidAs extends AnalysisRule {
-  AvoidAs()
-    : super(
-        name: LintNames.avoid_as,
-        description: _desc,
-        state: RuleState.removed(since: dart2_12),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final avoidAs = RemovedAnalysisRule(
+  name: LintNames.avoid_as,
+  description: _desc,
+  since: dart2_12,
+);
diff --git a/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart b/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
index ee1f582..94e73d5 100644
--- a/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
+++ b/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid `bool` literals in conditional expressions.';
 
@@ -22,7 +23,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidBoolLiteralsInConditionalExpressions;
+      diag.avoidBoolLiteralsInConditionalExpressions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart b/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart
index 4d0fef7..64555c0 100644
--- a/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart
+++ b/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid catches without on clauses.';
@@ -24,8 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidCatchesWithoutOnClauses;
+  DiagnosticCode get diagnosticCode => diag.avoidCatchesWithoutOnClauses;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_catching_errors.dart b/pkg/linter/lib/src/rules/avoid_catching_errors.dart
index 29df961..03ebf73 100644
--- a/pkg/linter/lib/src/rules/avoid_catching_errors.dart
+++ b/pkg/linter/lib/src/rules/avoid_catching_errors.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r"Don't explicitly catch `Error` or types that implement it.";
@@ -20,8 +21,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.avoidCatchingErrorsClass,
-    LinterLintCode.avoidCatchingErrorsSubclass,
+    diag.avoidCatchingErrorsClass,
+    diag.avoidCatchingErrorsSubclass,
   ];
 
   @override
@@ -44,14 +45,11 @@
     var exceptionType = node.exceptionType?.type;
     if (exceptionType.implementsInterface('Error', 'dart.core')) {
       if (exceptionType.isSameAs('Error', 'dart.core')) {
-        rule.reportAtNode(
-          node,
-          diagnosticCode: LinterLintCode.avoidCatchingErrorsClass,
-        );
+        rule.reportAtNode(node, diagnosticCode: diag.avoidCatchingErrorsClass);
       } else {
         rule.reportAtNode(
           node,
-          diagnosticCode: LinterLintCode.avoidCatchingErrorsSubclass,
+          diagnosticCode: diag.avoidCatchingErrorsSubclass,
           arguments: [exceptionType!.getDisplayString()],
         );
       }
diff --git a/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart b/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart
index 01f4673..692e914 100644
--- a/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart
+++ b/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid defining a class that contains only static members.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidClassesWithOnlyStaticMembers;
+  DiagnosticCode get diagnosticCode => diag.avoidClassesWithOnlyStaticMembers;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart b/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart
index c9bb8a8..6a6ea44 100644
--- a/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart
+++ b/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid `double` and `int` checks.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.avoid_double_and_int_checks, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidDoubleAndIntChecks;
+  DiagnosticCode get diagnosticCode => diag.avoidDoubleAndIntChecks;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart b/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart
index 0700769..083259c 100644
--- a/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart
+++ b/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid method calls or property accesses on a `dynamic` target.';
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.avoid_dynamic_calls, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidDynamicCalls;
+  DiagnosticCode get diagnosticCode => diag.avoidDynamicCalls;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_empty_else.dart b/pkg/linter/lib/src/rules/avoid_empty_else.dart
index 9ae7e96..a39bbb1 100644
--- a/pkg/linter/lib/src/rules/avoid_empty_else.dart
+++ b/pkg/linter/lib/src/rules/avoid_empty_else.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid empty statements in else clauses.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.avoid_empty_else, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidEmptyElse;
+  DiagnosticCode get diagnosticCode => diag.avoidEmptyElse;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart b/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart
index 019d1d4..a18ac223 100644
--- a/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart
+++ b/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart
@@ -13,6 +13,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -27,7 +28,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidEqualsAndHashCodeOnMutableClasses;
+      diag.avoidEqualsAndHashCodeOnMutableClasses;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart b/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart
index ee6d80f..eace041 100644
--- a/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart
+++ b/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid escaping inner quotes by converting surrounding quotes.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.avoid_escaping_inner_quotes, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidEscapingInnerQuotes;
+  DiagnosticCode get diagnosticCode => diag.avoidEscapingInnerQuotes;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart b/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart
index 3825d28..95647c0 100644
--- a/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart
+++ b/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid field initializers in const classes.';
@@ -24,7 +25,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidFieldInitializersInConstClasses;
+      diag.avoidFieldInitializersInConstClasses;
 
   @override
   void registerNodeProcessors(
@@ -91,7 +92,7 @@
     if (node.isStatic) return;
     if (!node.fields.isFinal) return;
     // only const class
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent is ClassDeclaration) {
       var declaredElement = parent.declaredFragment?.element;
       if (declaredElement == null) return;
diff --git a/pkg/linter/lib/src/rules/avoid_final_parameters.dart b/pkg/linter/lib/src/rules/avoid_final_parameters.dart
index 39e701e..4d133fa 100644
--- a/pkg/linter/lib/src/rules/avoid_final_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_final_parameters.dart
@@ -5,11 +5,13 @@
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_context.dart';
 import 'package:analyzer/analysis_rule/rule_visitor_registry.dart';
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid `final` for parameter declarations.';
 
@@ -18,7 +20,7 @@
     : super(name: LintNames.avoid_final_parameters, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidFinalParameters;
+  DiagnosticCode get diagnosticCode => diag.avoidFinalParameters;
 
   @override
   List<String> get incompatibleRules => const [
@@ -30,6 +32,11 @@
     RuleVisitorRegistry registry,
     RuleContext context,
   ) {
+    // This lint isn't relevant with primary constructors enabled
+    // as `final` is no longer used to indicate a parameter is final,
+    // but rather as a declaring parameter in a primary constructor.
+    if (context.isFeatureEnabled(Feature.primary_constructors)) return;
+
     var visitor = _Visitor(this);
     registry.addConstructorDeclaration(this, visitor);
     registry.addFunctionExpression(this, visitor);
diff --git a/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart b/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart
index 6120a6a..6159af1 100644
--- a/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart
+++ b/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid using `forEach` with a function literal.';
@@ -46,8 +47,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidFunctionLiteralsInForeachCalls;
+  DiagnosticCode get diagnosticCode => diag.avoidFunctionLiteralsInForeachCalls;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_futureor_void.dart b/pkg/linter/lib/src/rules/avoid_futureor_void.dart
index ad11172..82de4f9 100644
--- a/pkg/linter/lib/src/rules/avoid_futureor_void.dart
+++ b/pkg/linter/lib/src/rules/avoid_futureor_void.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/variance_checker.dart';
 
 const _desc = r"Avoid using 'FutureOr<void>' as the type of a result.";
@@ -25,7 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidFutureorVoid;
+  DiagnosticCode get diagnosticCode => diag.avoidFutureorVoid;
 
   @override
   void registerNodeProcessors(
@@ -43,7 +44,7 @@
     registry.addMethodDeclaration(this, visitor);
     registry.addMixinOnClause(this, visitor);
     registry.addObjectPattern(this, visitor);
-    registry.addRepresentationDeclaration(this, visitor);
+    registry.addPrimaryConstructorDeclaration(this, visitor);
     registry.addTypeParameter(this, visitor);
     registry.addVariableDeclarationList(this, visitor);
     registry.addWithClause(this, visitor);
@@ -127,8 +128,13 @@
   void visitObjectPattern(ObjectPattern node) => checker.checkOut(node.type);
 
   @override
-  void visitRepresentationDeclaration(RepresentationDeclaration node) =>
-      checker.checkOut(node.fieldType);
+  void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
+    for (var formalParameter in node.formalParameters.parameters) {
+      if (formalParameter is SimpleFormalParameter) {
+        checker.checkOut(formalParameter.type);
+      }
+    }
+  }
 
   @override
   void visitTypeParameter(TypeParameter node) => checker.checkInOut(node.bound);
diff --git a/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart b/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart
index c421684..0ead81d 100644
--- a/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart
+++ b/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't implement classes that override `==`.";
 
@@ -20,8 +21,7 @@
     : super(name: LintNames.avoid_implementing_value_types, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidImplementingValueTypes;
+  DiagnosticCode get diagnosticCode => diag.avoidImplementingValueTypes;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_init_to_null.dart b/pkg/linter/lib/src/rules/avoid_init_to_null.dart
index 7cb003c..2bac5ed 100644
--- a/pkg/linter/lib/src/rules/avoid_init_to_null.dart
+++ b/pkg/linter/lib/src/rules/avoid_init_to_null.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r"Don't explicitly initialize variables to `null`.";
@@ -21,7 +22,7 @@
     : super(name: LintNames.avoid_init_to_null, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidInitToNull;
+  DiagnosticCode get diagnosticCode => diag.avoidInitToNull;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart b/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart
index 85fd419..3eec137 100644
--- a/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart
+++ b/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid JavaScript rounded ints.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.avoid_js_rounded_ints, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidJsRoundedInts;
+  DiagnosticCode get diagnosticCode => diag.avoidJsRoundedInts;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart b/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart
index 03391ef..f1c464a 100644
--- a/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart
+++ b/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't declare multiple variables on a single line.";
 
@@ -21,8 +22,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidMultipleDeclarationsPerLine;
+  DiagnosticCode get diagnosticCode => diag.avoidMultipleDeclarationsPerLine;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart b/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart
index b3e50ec..90f94d1 100644
--- a/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart
+++ b/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r"Don't check for `null` in custom `==` operators.";
@@ -45,8 +46,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidNullChecksInEqualityOperators;
+  DiagnosticCode get diagnosticCode => diag.avoidNullChecksInEqualityOperators;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart b/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart
index a087b9b..c68182d 100644
--- a/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart
@@ -13,6 +13,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid positional boolean parameters.';
@@ -25,8 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidPositionalBooleanParameters;
+  DiagnosticCode get diagnosticCode => diag.avoidPositionalBooleanParameters;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_print.dart b/pkg/linter/lib/src/rules/avoid_print.dart
index c901789..50bf675 100644
--- a/pkg/linter/lib/src/rules/avoid_print.dart
+++ b/pkg/linter/lib/src/rules/avoid_print.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/flutter_utils.dart';
 
@@ -19,7 +20,7 @@
   AvoidPrint() : super(name: LintNames.avoid_print, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidPrint;
+  DiagnosticCode get diagnosticCode => diag.avoidPrint;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart b/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart
index 7524034..a7974a4 100644
--- a/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart
+++ b/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid private typedef functions.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidPrivateTypedefFunctions;
+  DiagnosticCode get diagnosticCode => diag.avoidPrivateTypedefFunctions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart b/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart
index 505284b..4358bef 100644
--- a/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart
+++ b/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart
@@ -12,6 +12,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid redundant argument values.';
 
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidRedundantArgumentValues;
+  DiagnosticCode get diagnosticCode => diag.avoidRedundantArgumentValues;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart b/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart
index 437a73e..9fc61a2 100644
--- a/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart
+++ b/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid relative imports for files in `lib/`.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.avoid_relative_lib_imports, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidRelativeLibImports;
+  DiagnosticCode get diagnosticCode => diag.avoidRelativeLibImports;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart b/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
index c1c509f..710addb 100644
--- a/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r"Don't rename parameters of overridden methods.";
@@ -26,8 +27,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidRenamingMethodParameters;
+  DiagnosticCode get diagnosticCode => diag.avoidRenamingMethodParameters;
 
   @override
   void registerNodeProcessors(
@@ -68,7 +68,7 @@
     var previousFragment = node.declaredFragment?.previousFragment;
     if (previousFragment == null) {
       // If it's the first fragment, check for an inherited member.
-      var parentNode = node.parent;
+      var parentNode = node.parent?.parent;
       if (parentNode is! Declaration) return;
 
       var parentElement = parentNode.declaredFragment?.element;
diff --git a/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart b/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart
index eac61cf..d0f1fd1 100644
--- a/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart
+++ b/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid return types on setters.';
 
@@ -21,7 +22,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidReturnTypesOnSetters;
+  DiagnosticCode get diagnosticCode => diag.avoidReturnTypesOnSetters;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_returning_null.dart b/pkg/linter/lib/src/rules/avoid_returning_null.dart
index 1045b47..a342934 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_null.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_null.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
@@ -12,14 +11,8 @@
     r'Avoid returning null from members whose return type is bool, double, int,'
     r' or num.';
 
-class AvoidReturningNull extends AnalysisRule {
-  AvoidReturningNull()
-    : super(
-        name: LintNames.avoid_returning_null,
-        description: _desc,
-        state: RuleState.removed(since: dart3_3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final avoidReturningNull = RemovedAnalysisRule(
+  name: LintNames.avoid_returning_null,
+  description: _desc,
+  since: dart3_3,
+);
diff --git a/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart b/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart
index ac91f5d..6b326803 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Avoid returning null for Future.';
 
-class AvoidReturningNullForFuture extends AnalysisRule {
-  AvoidReturningNullForFuture()
-    : super(
-        name: LintNames.avoid_returning_null_for_future,
-        description: _desc,
-        state: RuleState.removed(since: dart3_3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final avoidReturningNullForFuture = RemovedAnalysisRule(
+  name: LintNames.avoid_returning_null_for_future,
+  description: _desc,
+  since: dart3_3,
+);
diff --git a/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart b/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart
index 73a11a2..785ef1b 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid returning `null` for `void`.';
 
@@ -20,8 +21,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.avoidReturningNullForVoidFromFunction,
-    LinterLintCode.avoidReturningNullForVoidFromMethod,
+    diag.avoidReturningNullForVoidFromFunction,
+    diag.avoidReturningNullForVoidFromMethod,
   ];
 
   @override
@@ -64,12 +65,12 @@
       FunctionExpression() => (
         parent.declaredFragment?.element.returnType,
         parent.body.isAsynchronous,
-        LinterLintCode.avoidReturningNullForVoidFromFunction,
+        diag.avoidReturningNullForVoidFromFunction,
       ),
       MethodDeclaration() => (
         parent.declaredFragment?.element.returnType,
         parent.body.isAsynchronous,
-        LinterLintCode.avoidReturningNullForVoidFromMethod,
+        diag.avoidReturningNullForVoidFromMethod,
       ),
       _ => throw StateError('Unexpected type'),
     };
diff --git a/pkg/linter/lib/src/rules/avoid_returning_this.dart b/pkg/linter/lib/src/rules/avoid_returning_this.dart
index 9221703..312ddb9 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_this.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_this.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -23,7 +24,7 @@
     : super(name: LintNames.avoid_returning_this, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidReturningThis;
+  DiagnosticCode get diagnosticCode => diag.avoidReturningThis;
 
   @override
   void registerNodeProcessors(
@@ -74,7 +75,7 @@
   void visitMethodDeclaration(MethodDeclaration node) {
     if (node.isOperator) return;
 
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent is ClassDeclaration ||
         parent is EnumDeclaration ||
         parent is MixinDeclaration) {
diff --git a/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart b/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart
index 971449e..d4024e8 100644
--- a/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart
+++ b/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid setters without getters.';
 
@@ -19,8 +20,7 @@
     : super(name: LintNames.avoid_setters_without_getters, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidSettersWithoutGetters;
+  DiagnosticCode get diagnosticCode => diag.avoidSettersWithoutGetters;
 
   @override
   void registerNodeProcessors(
@@ -42,17 +42,21 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    visitMembers(node.members);
+    if (node.body case BlockClassBody body) {
+      visitMembers(body.members);
+    }
   }
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    visitMembers(node.members);
+    visitMembers(node.body.members);
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    visitMembers(node.members);
+    if (node.body case BlockClassBody body) {
+      visitMembers(body.members);
+    }
   }
 
   void visitMembers(NodeList<ClassMember> members) {
diff --git a/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart b/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart
index f849cb7..826f16a 100644
--- a/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid shadowing type parameters.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidShadowingTypeParameters;
+  DiagnosticCode get diagnosticCode => diag.avoidShadowingTypeParameters;
 
   @override
   void registerNodeProcessors(
@@ -85,15 +85,23 @@
 
     while (parent != null) {
       if (parent is ClassDeclaration) {
-        _checkForShadowing(typeParameters, parent.typeParameters, 'class');
+        _checkForShadowing(
+          typeParameters,
+          parent.namePart.typeParameters,
+          'class',
+        );
       } else if (parent is EnumDeclaration) {
-        _checkForShadowing(typeParameters, parent.typeParameters, 'enum');
+        _checkForShadowing(
+          typeParameters,
+          parent.namePart.typeParameters,
+          'enum',
+        );
       } else if (parent is ExtensionDeclaration) {
         _checkForShadowing(typeParameters, parent.typeParameters, 'extension');
       } else if (parent is ExtensionTypeDeclaration) {
         _checkForShadowing(
           typeParameters,
-          parent.typeParameters,
+          parent.primaryConstructor.typeParameters,
           'extension type',
         );
       } else if (parent is MethodDeclaration) {
diff --git a/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart b/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart
index 165384b..4f4a2d2 100644
--- a/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart
+++ b/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid single cascade in expression statements.';
 
@@ -23,7 +24,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidSingleCascadeInExpressionStatements;
+      diag.avoidSingleCascadeInExpressionStatements;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_slow_async_io.dart b/pkg/linter/lib/src/rules/avoid_slow_async_io.dart
index 17fe98a..8846709 100644
--- a/pkg/linter/lib/src/rules/avoid_slow_async_io.dart
+++ b/pkg/linter/lib/src/rules/avoid_slow_async_io.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid slow asynchronous `dart:io` methods.';
@@ -36,7 +37,7 @@
     : super(name: LintNames.avoid_slow_async_io, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidSlowAsyncIo;
+  DiagnosticCode get diagnosticCode => diag.avoidSlowAsyncIo;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_type_to_string.dart b/pkg/linter/lib/src/rules/avoid_type_to_string.dart
index 9329d3b..7629813 100644
--- a/pkg/linter/lib/src/rules/avoid_type_to_string.dart
+++ b/pkg/linter/lib/src/rules/avoid_type_to_string.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Avoid <Type>.toString() in production code since results may be minified.';
@@ -22,7 +23,7 @@
     : super(name: LintNames.avoid_type_to_string, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidTypeToString;
+  DiagnosticCode get diagnosticCode => diag.avoidTypeToString;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart b/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart
index 65264a5..1dfafbf 100644
--- a/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart
+++ b/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart
@@ -14,6 +14,7 @@
     show Element2Extension;
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/scope.dart';
 
 const _desc = r'Avoid types as parameter names.';
@@ -24,8 +25,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.avoidTypesAsParameterNamesTypeParameter,
-    LinterLintCode.avoidTypesAsParameterNamesFormalParameter,
+    diag.avoidTypesAsParameterNamesTypeParameter,
+    diag.avoidTypesAsParameterNamesFormalParameter,
   ];
 
   @override
@@ -53,8 +54,7 @@
       rule.reportAtNode(
         parameter,
         arguments: [parameter.name.lexeme],
-        diagnosticCode:
-            LinterLintCode.avoidTypesAsParameterNamesFormalParameter,
+        diagnosticCode: diag.avoidTypesAsParameterNamesFormalParameter,
       );
     }
   }
@@ -72,8 +72,7 @@
         rule.reportAtToken(
           name,
           arguments: [name.lexeme],
-          diagnosticCode:
-              LinterLintCode.avoidTypesAsParameterNamesFormalParameter,
+          diagnosticCode: diag.avoidTypesAsParameterNamesFormalParameter,
         );
       }
     }
@@ -113,8 +112,7 @@
         rule.reportAtToken(
           name,
           arguments: [name.lexeme],
-          diagnosticCode:
-              LinterLintCode.avoidTypesAsParameterNamesTypeParameter,
+          diagnosticCode: diag.avoidTypesAsParameterNamesTypeParameter,
         );
       }
     }
diff --git a/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart b/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart
index f513ac7..29f0fe2 100644
--- a/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid annotating types for function expression parameters.';
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidTypesOnClosureParameters;
+  DiagnosticCode get diagnosticCode => diag.avoidTypesOnClosureParameters;
 
   @override
   List<String> get incompatibleRules => const [LintNames.always_specify_types];
diff --git a/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart b/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart
index bda39ce..20ae89e 100644
--- a/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart
+++ b/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 const _desc = r'Avoid unnecessary containers.';
@@ -19,8 +20,7 @@
     : super(name: LintNames.avoid_unnecessary_containers, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidUnnecessaryContainers;
+  DiagnosticCode get diagnosticCode => diag.avoidUnnecessaryContainers;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart b/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart
index 82134b0..5e86eef 100644
--- a/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart
+++ b/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
-import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
@@ -12,14 +10,7 @@
     r'Avoid overriding a final field to return '
     'different values if called multiple times.';
 
-class AvoidUnstableFinalFields extends AnalysisRule {
-  AvoidUnstableFinalFields()
-    : super(
-        name: LintNames.avoid_unstable_final_fields,
-        description: _desc,
-        state: const RuleState.removed(),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final avoidUnstableFinalFields = RemovedAnalysisRule(
+  name: LintNames.avoid_unstable_final_fields,
+  description: _desc,
+);
diff --git a/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart b/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart
index 70f91c9..0fc53ef 100644
--- a/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/ascii_utils.dart';
 
@@ -24,8 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidUnusedConstructorParameters;
+  DiagnosticCode get diagnosticCode => diag.avoidUnusedConstructorParameters;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_void_async.dart b/pkg/linter/lib/src/rules/avoid_void_async.dart
index 5726dc5..45e1c3c 100644
--- a/pkg/linter/lib/src/rules/avoid_void_async.dart
+++ b/pkg/linter/lib/src/rules/avoid_void_async.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid `async` functions that return `void`.';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.avoid_void_async, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.avoidVoidAsync;
+  DiagnosticCode get diagnosticCode => diag.avoidVoidAsync;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart b/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart
index 96b0a23..b4294d8 100644
--- a/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart
+++ b/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart
@@ -14,6 +14,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Avoid using web-only libraries outside Flutter web plugin packages.';
@@ -40,8 +41,7 @@
     : super(name: LintNames.avoid_web_libraries_in_flutter, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.avoidWebLibrariesInFlutter;
+  DiagnosticCode get diagnosticCode => diag.avoidWebLibrariesInFlutter;
 
   bool hasFlutterDep(File? pubspec) {
     if (pubspec == null) {
diff --git a/pkg/linter/lib/src/rules/await_only_futures.dart b/pkg/linter/lib/src/rules/await_only_futures.dart
index 48e13a9..f28f2d7 100644
--- a/pkg/linter/lib/src/rules/await_only_futures.dart
+++ b/pkg/linter/lib/src/rules/await_only_futures.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Await only futures.';
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.await_only_futures, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.awaitOnlyFutures;
+  DiagnosticCode get diagnosticCode => diag.awaitOnlyFutures;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/camel_case_extensions.dart b/pkg/linter/lib/src/rules/camel_case_extensions.dart
index 6c31599..a9238ad 100644
--- a/pkg/linter/lib/src/rules/camel_case_extensions.dart
+++ b/pkg/linter/lib/src/rules/camel_case_extensions.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../utils.dart';
 
 const _desc = r'Name extensions using UpperCamelCase.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.camel_case_extensions, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.camelCaseExtensions;
+  DiagnosticCode get diagnosticCode => diag.camelCaseExtensions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/camel_case_types.dart b/pkg/linter/lib/src/rules/camel_case_types.dart
index 365222a..c930753 100644
--- a/pkg/linter/lib/src/rules/camel_case_types.dart
+++ b/pkg/linter/lib/src/rules/camel_case_types.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../utils.dart';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.camel_case_types, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.camelCaseTypes;
+  DiagnosticCode get diagnosticCode => diag.camelCaseTypes;
 
   @override
   void registerNodeProcessors(
@@ -55,7 +56,7 @@
   void visitClassDeclaration(ClassDeclaration node) {
     if (node.isAugmentation) return;
 
-    check(node.name);
+    check(node.namePart.typeName);
   }
 
   @override
@@ -67,14 +68,14 @@
   void visitEnumDeclaration(EnumDeclaration node) {
     if (node.isAugmentation) return;
 
-    check(node.name);
+    check(node.namePart.typeName);
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
     if (node.isAugmentation) return;
 
-    check(node.name);
+    check(node.primaryConstructor.typeName);
   }
 
   @override
diff --git a/pkg/linter/lib/src/rules/cancel_subscriptions.dart b/pkg/linter/lib/src/rules/cancel_subscriptions.dart
index 234cb6f..ed7ed98 100644
--- a/pkg/linter/lib/src/rules/cancel_subscriptions.dart
+++ b/pkg/linter/lib/src/rules/cancel_subscriptions.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/leak_detector_visitor.dart';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.cancel_subscriptions, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.cancelSubscriptions;
+  DiagnosticCode get diagnosticCode => diag.cancelSubscriptions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/cascade_invocations.dart b/pkg/linter/lib/src/rules/cascade_invocations.dart
index 5bb9b81..aaec9c1 100644
--- a/pkg/linter/lib/src/rules/cascade_invocations.dart
+++ b/pkg/linter/lib/src/rules/cascade_invocations.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Cascade consecutive method invocations on the same reference.';
@@ -76,7 +77,7 @@
     : super(name: LintNames.cascade_invocations, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.cascadeInvocations;
+  DiagnosticCode get diagnosticCode => diag.cascadeInvocations;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart b/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart
index ff85943..b45fe7c 100644
--- a/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart
+++ b/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't cast a nullable value to a non nullable type.";
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.cast_nullable_to_non_nullable, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.castNullableToNonNullable;
+  DiagnosticCode get diagnosticCode => diag.castNullableToNonNullable;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/close_sinks.dart b/pkg/linter/lib/src/rules/close_sinks.dart
index f8016ea..2da72d8 100644
--- a/pkg/linter/lib/src/rules/close_sinks.dart
+++ b/pkg/linter/lib/src/rules/close_sinks.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/leak_detector_visitor.dart';
 
@@ -18,7 +19,7 @@
   CloseSinks() : super(name: LintNames.close_sinks, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.closeSinks;
+  DiagnosticCode get diagnosticCode => diag.closeSinks;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart b/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart
index 2647342..d577482 100644
--- a/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart
+++ b/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/dart_type_utilities.dart';
 
 const _desc =
@@ -28,8 +29,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.collectionMethodsUnrelatedType;
+  DiagnosticCode get diagnosticCode => diag.collectionMethodsUnrelatedType;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/combinators_ordering.dart b/pkg/linter/lib/src/rules/combinators_ordering.dart
index f300ea4..aee4827 100644
--- a/pkg/linter/lib/src/rules/combinators_ordering.dart
+++ b/pkg/linter/lib/src/rules/combinators_ordering.dart
@@ -11,6 +11,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Sort combinator names alphabetically.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.combinators_ordering, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.combinatorsOrdering;
+  DiagnosticCode get diagnosticCode => diag.combinatorsOrdering;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/comment_references.dart b/pkg/linter/lib/src/rules/comment_references.dart
index ccb444d..019c4fc 100644
--- a/pkg/linter/lib/src/rules/comment_references.dart
+++ b/pkg/linter/lib/src/rules/comment_references.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Only reference in-scope identifiers in doc comments.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.comment_references, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.commentReferences;
+  DiagnosticCode get diagnosticCode => diag.commentReferences;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart b/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart
index 809789e..ba19098 100644
--- a/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart
+++ b/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Missing conditional import.';
 
@@ -19,8 +20,7 @@
     : super(name: LintNames.conditional_uri_does_not_exist, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.conditionalUriDoesNotExist;
+  DiagnosticCode get diagnosticCode => diag.conditionalUriDoesNotExist;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/constant_identifier_names.dart b/pkg/linter/lib/src/rules/constant_identifier_names.dart
index 1dbcc2d..d971c1b 100644
--- a/pkg/linter/lib/src/rules/constant_identifier_names.dart
+++ b/pkg/linter/lib/src/rules/constant_identifier_names.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../utils.dart';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.constant_identifier_names, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.constantIdentifierNames;
+  DiagnosticCode get diagnosticCode => diag.constantIdentifierNames;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/control_flow_in_finally.dart b/pkg/linter/lib/src/rules/control_flow_in_finally.dart
index 5406e7b..3d3c7e7 100644
--- a/pkg/linter/lib/src/rules/control_flow_in_finally.dart
+++ b/pkg/linter/lib/src/rules/control_flow_in_finally.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid control flow in `finally` blocks.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.control_flow_in_finally, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.controlFlowInFinally;
+  DiagnosticCode get diagnosticCode => diag.controlFlowInFinally;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart b/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart
index 1724072..c929598 100644
--- a/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart
+++ b/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'DO use curly braces for all flow control structures.';
 
@@ -24,8 +25,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.curlyBracesInFlowControlStructures;
+  DiagnosticCode get diagnosticCode => diag.curlyBracesInFlowControlStructures;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart b/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart
index 666c6ff..a9bc0f8 100644
--- a/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart
+++ b/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/dart/ast/token.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Attach library doc comments to library directives.';
 
@@ -20,8 +21,7 @@
     : super(name: LintNames.dangling_library_doc_comments, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.danglingLibraryDocComments;
+  DiagnosticCode get diagnosticCode => diag.danglingLibraryDocComments;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/deprecated_consistency.dart b/pkg/linter/lib/src/rules/deprecated_consistency.dart
index 8cdb6ce..e53565d 100644
--- a/pkg/linter/lib/src/rules/deprecated_consistency.dart
+++ b/pkg/linter/lib/src/rules/deprecated_consistency.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Missing deprecated annotation.';
 
@@ -20,9 +21,9 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.deprecatedConsistencyConstructor,
-    LinterLintCode.deprecatedConsistencyField,
-    LinterLintCode.deprecatedConsistencyParameter,
+    diag.deprecatedConsistencyConstructor,
+    diag.deprecatedConsistencyField,
+    diag.deprecatedConsistencyParameter,
   ];
 
   @override
@@ -47,11 +48,12 @@
     if (constructorElement != null &&
         constructorElement.enclosingElement.hasDeprecated &&
         !constructorElement.hasDeprecated) {
-      var nodeToAnnotate = node.name ?? node.returnType;
+      // TODO(scheglov): support primary constructors
+      var nodeToAnnotate = node.name ?? node.typeName!;
       rule.reportAtOffset(
         nodeToAnnotate.offset,
         nodeToAnnotate.length,
-        diagnosticCode: LinterLintCode.deprecatedConsistencyConstructor,
+        diagnosticCode: diag.deprecatedConsistencyConstructor,
       );
     }
   }
@@ -65,10 +67,7 @@
     if (field == null) return;
 
     if (field.hasDeprecated && !declaredElement.hasDeprecated) {
-      rule.reportAtNode(
-        node,
-        diagnosticCode: LinterLintCode.deprecatedConsistencyField,
-      );
+      rule.reportAtNode(node, diagnosticCode: diag.deprecatedConsistencyField);
     }
     if (!field.hasDeprecated && declaredElement.hasDeprecated) {
       var fieldFragment = field.firstFragment;
@@ -79,7 +78,7 @@
       rule.reportAtOffset(
         nameOffset,
         nameLength,
-        diagnosticCode: LinterLintCode.deprecatedConsistencyParameter,
+        diagnosticCode: diag.deprecatedConsistencyParameter,
       );
     }
   }
diff --git a/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart b/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart
index 80b050c..2eb5861 100644
--- a/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart
+++ b/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart
@@ -23,6 +23,7 @@
 import 'package:analyzer/workspace/workspace.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     'Avoid using deprecated elements from within the package in which they are '
@@ -37,8 +38,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.deprecatedMemberUseFromSamePackageWithMessage,
-    LinterLintCode.deprecatedMemberUseFromSamePackageWithoutMessage,
+    diag.deprecatedMemberUseFromSamePackageWithMessage,
+    diag.deprecatedMemberUseFromSamePackageWithoutMessage,
   ];
 
   @override
@@ -74,16 +75,14 @@
         usageSite.offset,
         usageSite.length,
         arguments: [displayName, message],
-        diagnosticCode:
-            LinterLintCode.deprecatedMemberUseFromSamePackageWithMessage,
+        diagnosticCode: diag.deprecatedMemberUseFromSamePackageWithMessage,
       );
     } else {
       _rule.reportAtOffset(
         usageSite.offset,
         usageSite.length,
         arguments: [displayName],
-        diagnosticCode:
-            LinterLintCode.deprecatedMemberUseFromSamePackageWithoutMessage,
+        diagnosticCode: diag.deprecatedMemberUseFromSamePackageWithoutMessage,
       );
     }
   }
diff --git a/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart b/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart
index 35db20a..582acb7 100644
--- a/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart
+++ b/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart
@@ -14,6 +14,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/flutter_utils.dart';
 
@@ -27,8 +28,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.diagnosticDescribeAllProperties;
+  DiagnosticCode get diagnosticCode => diag.diagnosticDescribeAllProperties;
 
   @override
   void registerNodeProcessors(
@@ -86,8 +86,13 @@
     var type = node.declaredFragment?.element.thisType;
     if (!type.implementsInterface('Diagnosticable', '')) return;
 
+    var body = node.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     var properties = <Token>[];
-    for (var member in node.members) {
+    for (var member in body.members) {
       if (member is MethodDeclaration && member.isGetter) {
         if (!member.isStatic &&
             !skipForDiagnostic(
@@ -115,8 +120,8 @@
 
     if (properties.isEmpty) return;
 
-    var debugFillProperties = node.members.getMethod('debugFillProperties');
-    var debugDescribeChildren = node.members.getMethod('debugDescribeChildren');
+    var debugFillProperties = body.members.getMethod('debugFillProperties');
+    var debugDescribeChildren = body.members.getMethod('debugDescribeChildren');
 
     // Remove any defined in debugFillProperties.
     removeReferences(debugFillProperties, properties);
diff --git a/pkg/linter/lib/src/rules/directives_ordering.dart b/pkg/linter/lib/src/rules/directives_ordering.dart
index 3aea743..7a3ae2a 100644
--- a/pkg/linter/lib/src/rules/directives_ordering.dart
+++ b/pkg/linter/lib/src/rules/directives_ordering.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Adhere to Effective Dart Guide directives sorting conventions.';
 
@@ -62,10 +63,10 @@
 
 class DirectivesOrdering extends MultiAnalysisRule {
   static const List<DiagnosticCode> allCodes = [
-    LinterLintCode.directivesOrderingAlphabetical,
-    LinterLintCode.directivesOrderingDart,
-    LinterLintCode.directivesOrderingExports,
-    LinterLintCode.directivesOrderingPackageBeforeRelative,
+    diag.directivesOrderingAlphabetical,
+    diag.directivesOrderingDart,
+    diag.directivesOrderingExports,
+    diag.directivesOrderingPackageBeforeRelative,
   ];
 
   DirectivesOrdering()
@@ -86,7 +87,7 @@
   void _reportLintWithDartDirectiveGoFirstMessage(AstNode node, String type) {
     reportAtNode(
       node,
-      diagnosticCode: LinterLintCode.directivesOrderingDart,
+      diagnosticCode: diag.directivesOrderingDart,
       arguments: ['${type}s'],
     );
   }
@@ -94,17 +95,11 @@
   void _reportLintWithDirectiveSectionOrderedAlphabeticallyMessage(
     AstNode node,
   ) {
-    reportAtNode(
-      node,
-      diagnosticCode: LinterLintCode.directivesOrderingAlphabetical,
-    );
+    reportAtNode(node, diagnosticCode: diag.directivesOrderingAlphabetical);
   }
 
   void _reportLintWithExportDirectiveAfterImportDirectiveMessage(AstNode node) {
-    reportAtNode(
-      node,
-      diagnosticCode: LinterLintCode.directivesOrderingExports,
-    );
+    reportAtNode(node, diagnosticCode: diag.directivesOrderingExports);
   }
 
   void _reportLintWithPackageDirectiveBeforeRelativeMessage(
@@ -113,7 +108,7 @@
   ) {
     reportAtNode(
       node,
-      diagnosticCode: LinterLintCode.directivesOrderingPackageBeforeRelative,
+      diagnosticCode: diag.directivesOrderingPackageBeforeRelative,
       arguments: ['${type}s'],
     );
   }
diff --git a/pkg/linter/lib/src/rules/discarded_futures.dart b/pkg/linter/lib/src/rules/discarded_futures.dart
index fde4af2..0224924 100644
--- a/pkg/linter/lib/src/rules/discarded_futures.dart
+++ b/pkg/linter/lib/src/rules/discarded_futures.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/unused_futures.dart';
 
 const _desc =
@@ -19,7 +20,7 @@
     : super(name: LintNames.discarded_futures, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.discardedFutures;
+  DiagnosticCode get diagnosticCode => diag.discardedFutures;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/do_not_use_environment.dart b/pkg/linter/lib/src/rules/do_not_use_environment.dart
index 0e1fac9..9e6da07 100644
--- a/pkg/linter/lib/src/rules/do_not_use_environment.dart
+++ b/pkg/linter/lib/src/rules/do_not_use_environment.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Do not use environment declared variables.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.do_not_use_environment, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.doNotUseEnvironment;
+  DiagnosticCode get diagnosticCode => diag.doNotUseEnvironment;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/document_ignores.dart b/pkg/linter/lib/src/rules/document_ignores.dart
index e04fbb0..9d99075 100644
--- a/pkg/linter/lib/src/rules/document_ignores.dart
+++ b/pkg/linter/lib/src/rules/document_ignores.dart
@@ -17,6 +17,7 @@
     show IntExtension;
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Document ignore comments.';
 
@@ -25,7 +26,7 @@
     : super(name: LintNames.document_ignores, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.documentIgnores;
+  DiagnosticCode get diagnosticCode => diag.documentIgnores;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/empty_catches.dart b/pkg/linter/lib/src/rules/empty_catches.dart
index f957e02..0e920b7 100644
--- a/pkg/linter/lib/src/rules/empty_catches.dart
+++ b/pkg/linter/lib/src/rules/empty_catches.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/ascii_utils.dart';
 
 const _desc = r'Avoid empty catch blocks.';
@@ -18,7 +19,7 @@
   EmptyCatches() : super(name: LintNames.empty_catches, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.emptyCatches;
+  DiagnosticCode get diagnosticCode => diag.emptyCatches;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/empty_constructor_bodies.dart b/pkg/linter/lib/src/rules/empty_constructor_bodies.dart
index b5a00f4..14c7b25 100644
--- a/pkg/linter/lib/src/rules/empty_constructor_bodies.dart
+++ b/pkg/linter/lib/src/rules/empty_constructor_bodies.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use `;` instead of `{}` for empty constructor bodies.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.empty_constructor_bodies, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.emptyConstructorBodies;
+  DiagnosticCode get diagnosticCode => diag.emptyConstructorBodies;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/empty_statements.dart b/pkg/linter/lib/src/rules/empty_statements.dart
index 0f1a4f6..2f16519 100644
--- a/pkg/linter/lib/src/rules/empty_statements.dart
+++ b/pkg/linter/lib/src/rules/empty_statements.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid empty statements.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.empty_statements, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.emptyStatements;
+  DiagnosticCode get diagnosticCode => diag.emptyStatements;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/enable_null_safety.dart b/pkg/linter/lib/src/rules/enable_null_safety.dart
index 84da8ba..a30e411 100644
--- a/pkg/linter/lib/src/rules/enable_null_safety.dart
+++ b/pkg/linter/lib/src/rules/enable_null_safety.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Do use sound null safety.';
 
-class EnableNullSafety extends AnalysisRule {
-  EnableNullSafety()
-    : super(
-        name: LintNames.enable_null_safety,
-        description: _desc,
-        state: RuleState.removed(since: dart3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final enableNullSafety = RemovedAnalysisRule(
+  name: LintNames.enable_null_safety,
+  description: _desc,
+  since: dart3,
+);
diff --git a/pkg/linter/lib/src/rules/eol_at_end_of_file.dart b/pkg/linter/lib/src/rules/eol_at_end_of_file.dart
index fe9e23a..4c7022d 100644
--- a/pkg/linter/lib/src/rules/eol_at_end_of_file.dart
+++ b/pkg/linter/lib/src/rules/eol_at_end_of_file.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Put a single newline at end of file.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.eol_at_end_of_file, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.eolAtEndOfFile;
+  DiagnosticCode get diagnosticCode => diag.eolAtEndOfFile;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart b/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart
index 6b617f9..143aecb 100644
--- a/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart
+++ b/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 // TODO(nshahan): update description as scope increases.
@@ -25,8 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.eraseDartTypeExtensionTypes;
+  DiagnosticCode get diagnosticCode => diag.eraseDartTypeExtensionTypes;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/exhaustive_cases.dart b/pkg/linter/lib/src/rules/exhaustive_cases.dart
index 69e3cb0..844e892 100644
--- a/pkg/linter/lib/src/rules/exhaustive_cases.dart
+++ b/pkg/linter/lib/src/rules/exhaustive_cases.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Define case clauses for all constants in enum-like classes.';
@@ -21,7 +22,7 @@
     : super(name: LintNames.exhaustive_cases, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.exhaustiveCases;
+  DiagnosticCode get diagnosticCode => diag.exhaustiveCases;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/file_names.dart b/pkg/linter/lib/src/rules/file_names.dart
index f357833..db8f7bb 100644
--- a/pkg/linter/lib/src/rules/file_names.dart
+++ b/pkg/linter/lib/src/rules/file_names.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/ascii_utils.dart';
 
 const _desc = r'Name source files using `lowercase_with_underscores`.';
@@ -18,7 +19,7 @@
   FileNames() : super(name: LintNames.file_names, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.fileNames;
+  DiagnosticCode get diagnosticCode => diag.fileNames;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/flutter_style_todos.dart b/pkg/linter/lib/src/rules/flutter_style_todos.dart
index c3c403e..e62e7ba 100644
--- a/pkg/linter/lib/src/rules/flutter_style_todos.dart
+++ b/pkg/linter/lib/src/rules/flutter_style_todos.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Use Flutter TODO format: '
@@ -27,7 +28,7 @@
     : super(name: LintNames.flutter_style_todos, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.flutterStyleTodos;
+  DiagnosticCode get diagnosticCode => diag.flutterStyleTodos;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/hash_and_equals.dart b/pkg/linter/lib/src/rules/hash_and_equals.dart
index 5cbb811..ef3cf7a 100644
--- a/pkg/linter/lib/src/rules/hash_and_equals.dart
+++ b/pkg/linter/lib/src/rules/hash_and_equals.dart
@@ -13,6 +13,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Always override `hashCode` if overriding `==`.';
 
@@ -20,7 +21,7 @@
   HashAndEquals() : super(name: LintNames.hash_and_equals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.hashAndEquals;
+  DiagnosticCode get diagnosticCode => diag.hashAndEquals;
 
   @override
   void registerNodeProcessors(
@@ -39,9 +40,14 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
+    var body = node.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     MethodDeclaration? eq;
     ClassMember? hash;
-    for (var member in node.members) {
+    for (var member in body.members) {
       if (isEquals(member)) {
         eq = member as MethodDeclaration;
       } else if (isHashCode(member)) {
diff --git a/pkg/linter/lib/src/rules/implementation_imports.dart b/pkg/linter/lib/src/rules/implementation_imports.dart
index c33ae4d..4a92373 100644
--- a/pkg/linter/lib/src/rules/implementation_imports.dart
+++ b/pkg/linter/lib/src/rules/implementation_imports.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/utilities/extensions/uri.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't import implementation files from another package.";
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.implementation_imports, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.implementationImports;
+  DiagnosticCode get diagnosticCode => diag.implementationImports;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart b/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart
index 0a70fdd..265a68f 100644
--- a/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart
+++ b/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Explicitly tear-off `call` methods when using an object as a Function.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.implicit_call_tearoffs, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.implicitCallTearoffs;
+  DiagnosticCode get diagnosticCode => diag.implicitCallTearoffs;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/implicit_reopen.dart b/pkg/linter/lib/src/rules/implicit_reopen.dart
index 0494757..3b917a9 100644
--- a/pkg/linter/lib/src/rules/implicit_reopen.dart
+++ b/pkg/linter/lib/src/rules/implicit_reopen.dart
@@ -7,11 +7,13 @@
 import 'package:analyzer/analysis_rule/rule_state.dart';
 import 'package:analyzer/analysis_rule/rule_visitor_registry.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't implicitly reopen classes.";
 
@@ -24,7 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.implicitReopen;
+  DiagnosticCode get diagnosticCode => diag.implicitReopen;
 
   @override
   void registerNodeProcessors(
@@ -42,9 +44,9 @@
 
   _Visitor(this.rule);
 
-  void checkElement(
-    InterfaceElement? element,
-    NamedCompilationUnitMember node, {
+  void checkElement({
+    required InterfaceElement? element,
+    required Token nameToken,
     required String type,
   }) {
     if (element is! ClassElement) return;
@@ -60,7 +62,7 @@
     if (element.isBase) {
       if (supertype.isFinal) {
         reportLint(
-          node,
+          nameToken: nameToken,
           target: element,
           other: supertype,
           reason: 'final',
@@ -69,7 +71,7 @@
         return;
       } else if (supertype.isInterface) {
         reportLint(
-          node,
+          nameToken: nameToken,
           target: element,
           other: supertype,
           reason: 'interface',
@@ -80,7 +82,7 @@
     } else if (element.hasNoModifiers) {
       if (supertype.isInterface) {
         reportLint(
-          node,
+          nameToken: nameToken,
           target: element,
           other: supertype,
           reason: 'interface',
@@ -91,8 +93,8 @@
     }
   }
 
-  void reportLint(
-    NamedCompilationUnitMember member, {
+  void reportLint({
+    required Token nameToken,
     required String type,
     required InterfaceElement target,
     required InterfaceElement other,
@@ -102,7 +104,7 @@
     var otherName = other.name;
     if (targetName != null && otherName != null) {
       rule.reportAtToken(
-        member.name,
+        nameToken,
         arguments: [type, targetName, otherName, reason],
       );
     }
@@ -110,12 +112,20 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    checkElement(node.declaredFragment?.element, node, type: 'class');
+    checkElement(
+      element: node.declaredFragment?.element,
+      nameToken: node.namePart.typeName,
+      type: 'class',
+    );
   }
 
   @override
   visitClassTypeAlias(ClassTypeAlias node) {
-    checkElement(node.declaredFragment?.element, node, type: 'class');
+    checkElement(
+      element: node.declaredFragment?.element,
+      nameToken: node.name,
+      type: 'class',
+    );
   }
 }
 
diff --git a/pkg/linter/lib/src/rules/invalid_case_patterns.dart b/pkg/linter/lib/src/rules/invalid_case_patterns.dart
index 78e0b41..8aa9c22 100644
--- a/pkg/linter/lib/src/rules/invalid_case_patterns.dart
+++ b/pkg/linter/lib/src/rules/invalid_case_patterns.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/ast/token.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use case expressions that are valid in Dart 3.0.';
 
@@ -28,7 +29,7 @@
   // TODO(pq): update to add specific messages w/ specific corrections
   // https://github.com/dart-lang/linter/issues/4172
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.invalidCasePatterns;
+  DiagnosticCode get diagnosticCode => diag.invalidCasePatterns;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart b/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
index c0e3f1e..1746966 100644
--- a/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
+++ b/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
@@ -21,6 +21,7 @@
 import 'package:analyzer/src/dart/element/type_visitor.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const String _dartJsInteropUri = 'dart:js_interop';
 const String _dartJsUri = 'dart:js';
@@ -217,13 +218,13 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesDartAsJs,
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesDartIsJs,
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsAsDart,
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsDart,
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
-    LinterLintCode.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
+    diag.invalidRuntimeCheckWithJsInteropTypesDartAsJs,
+    diag.invalidRuntimeCheckWithJsInteropTypesDartIsJs,
+    diag.invalidRuntimeCheckWithJsInteropTypesJsAsDart,
+    diag.invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs,
+    diag.invalidRuntimeCheckWithJsInteropTypesJsIsDart,
+    diag.invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs,
+    diag.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs,
   ];
 
   @override
@@ -336,14 +337,12 @@
           if (check) {
             if (!erasedLeftIsSubtype && !erasedRightIsDynamic) {
               if (leftIsInteropType && rightIsInteropType) {
-                lintCode = LinterLintCode
+                lintCode = diag
                     .invalidRuntimeCheckWithJsInteropTypesJsIsInconsistentJs;
               } else if (leftIsInteropType) {
-                lintCode = LinterLintCode
-                    .invalidRuntimeCheckWithJsInteropTypesJsIsDart;
+                lintCode = diag.invalidRuntimeCheckWithJsInteropTypesJsIsDart;
               } else {
-                lintCode = LinterLintCode
-                    .invalidRuntimeCheckWithJsInteropTypesDartIsJs;
+                lintCode = diag.invalidRuntimeCheckWithJsInteropTypesDartIsJs;
               }
             } else if (erasedLeftIsSubtype &&
                 leftIsInteropType &&
@@ -362,8 +361,8 @@
                       keepUserInteropTypes: true,
                     ),
                   )) {
-                lintCode = LinterLintCode
-                    .invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs;
+                lintCode =
+                    diag.invalidRuntimeCheckWithJsInteropTypesJsIsUnrelatedJs;
               }
             }
           } else {
@@ -372,14 +371,12 @@
                 !erasedLeftIsDynamic &&
                 !erasedRightIsDynamic) {
               if (leftIsInteropType && rightIsInteropType) {
-                lintCode = LinterLintCode
+                lintCode = diag
                     .invalidRuntimeCheckWithJsInteropTypesJsAsIncompatibleJs;
               } else if (leftIsInteropType) {
-                lintCode = LinterLintCode
-                    .invalidRuntimeCheckWithJsInteropTypesJsAsDart;
+                lintCode = diag.invalidRuntimeCheckWithJsInteropTypesJsAsDart;
               } else {
-                lintCode = LinterLintCode
-                    .invalidRuntimeCheckWithJsInteropTypesDartAsJs;
+                lintCode = diag.invalidRuntimeCheckWithJsInteropTypesDartAsJs;
               }
             }
           }
diff --git a/pkg/linter/lib/src/rules/invariant_booleans.dart b/pkg/linter/lib/src/rules/invariant_booleans.dart
index c96e137..7c45fb1 100644
--- a/pkg/linter/lib/src/rules/invariant_booleans.dart
+++ b/pkg/linter/lib/src/rules/invariant_booleans.dart
@@ -4,21 +4,14 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc =
     r'Conditions should not unconditionally evaluate to `true` or to `false`.';
 
-class InvariantBooleans extends AnalysisRule {
-  InvariantBooleans()
-    : super(
-        name: LintNames.invariant_booleans,
-        description: _desc,
-        state: RuleState.removed(since: dart3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final invariantBooleans = RemovedAnalysisRule(
+  name: LintNames.invariant_booleans,
+  description: _desc,
+  since: dart3,
+);
diff --git a/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart b/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart
index 403c66b9..e672a7a 100644
--- a/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart
+++ b/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
@@ -12,14 +11,8 @@
     r'Invocation of `Iterable<E>.contains` with references of'
     r' unrelated types.';
 
-class IterableContainsUnrelatedType extends AnalysisRule {
-  IterableContainsUnrelatedType()
-    : super(
-        name: LintNames.iterable_contains_unrelated_type,
-        description: _desc,
-        state: RuleState.removed(since: dart3_3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final iterableContainsUnrelatedType = RemovedAnalysisRule(
+  name: LintNames.iterable_contains_unrelated_type,
+  description: _desc,
+  since: dart3_3,
+);
diff --git a/pkg/linter/lib/src/rules/join_return_with_assignment.dart b/pkg/linter/lib/src/rules/join_return_with_assignment.dart
index be81242..5dba28d 100644
--- a/pkg/linter/lib/src/rules/join_return_with_assignment.dart
+++ b/pkg/linter/lib/src/rules/join_return_with_assignment.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/dart_type_utilities.dart' as type_utils;
 
 const _desc = r'Join return statement with assignment when possible.';
@@ -36,7 +37,7 @@
     : super(name: LintNames.join_return_with_assignment, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.joinReturnWithAssignment;
+  DiagnosticCode get diagnosticCode => diag.joinReturnWithAssignment;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart b/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart
index a753b62..f64149a 100644
--- a/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart
+++ b/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/source/line_info.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Start multiline strings with a newline.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.leadingNewlinesInMultilineStrings;
+  DiagnosticCode get diagnosticCode => diag.leadingNewlinesInMultilineStrings;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/library_annotations.dart b/pkg/linter/lib/src/rules/library_annotations.dart
index dc98b00..aeaf42d 100644
--- a/pkg/linter/lib/src/rules/library_annotations.dart
+++ b/pkg/linter/lib/src/rules/library_annotations.dart
@@ -14,6 +14,7 @@
 import 'package:meta/meta_meta.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Attach library annotations to library directives.';
 
@@ -22,7 +23,7 @@
     : super(name: LintNames.library_annotations, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.libraryAnnotations;
+  DiagnosticCode get diagnosticCode => diag.libraryAnnotations;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/library_names.dart b/pkg/linter/lib/src/rules/library_names.dart
index 0806c3d..21e6160 100644
--- a/pkg/linter/lib/src/rules/library_names.dart
+++ b/pkg/linter/lib/src/rules/library_names.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../utils.dart';
 
 const _desc = r'Name libraries using `lowercase_with_underscores`.';
@@ -18,7 +19,7 @@
   LibraryNames() : super(name: LintNames.library_names, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.libraryNames;
+  DiagnosticCode get diagnosticCode => diag.libraryNames;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/library_prefixes.dart b/pkg/linter/lib/src/rules/library_prefixes.dart
index 95c9868..efe3d59 100644
--- a/pkg/linter/lib/src/rules/library_prefixes.dart
+++ b/pkg/linter/lib/src/rules/library_prefixes.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../utils.dart';
 
 const _desc =
@@ -21,7 +22,7 @@
     : super(name: LintNames.library_prefixes, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.libraryPrefixes;
+  DiagnosticCode get diagnosticCode => diag.libraryPrefixes;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart b/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart
index 0e2cb49..8f58481 100644
--- a/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart
+++ b/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid using private types in public APIs.';
@@ -24,8 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.libraryPrivateTypesInPublicApi;
+  DiagnosticCode get diagnosticCode => diag.libraryPrivateTypesInPublicApi;
 
   @override
   void registerNodeProcessors(
@@ -44,16 +44,22 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    if (Identifier.isPrivateName(node.name.lexeme)) {
+    var namePart = node.namePart;
+    if (isPrivateName(namePart.typeName.lexeme)) {
       return;
     }
-    node.typeParameters?.accept(this);
-    node.members.accept(this);
+    namePart.typeParameters?.accept(this);
+    if (node.body case BlockClassBody body) {
+      body.members.accept(this);
+    }
+    if (namePart is PrimaryConstructorDeclaration) {
+      visitPrimaryConstructorDeclaration(namePart);
+    }
   }
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    if (Identifier.isPrivateName(node.name.lexeme)) {
+    if (isPrivateName(node.name.lexeme)) {
       return;
     }
     node.superclass.accept(this);
@@ -62,18 +68,8 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    var name = node.name;
-    if (name != null && Identifier.isPrivateName(name.lexeme)) {
-      return;
-    }
-
-    var parent = node.parent;
-
-    // Enum constructors are effectively private so don't visit their params.
-    if (parent is EnumDeclaration) return;
-
-    // Select modified class types are also effectively private.
-    if (parent != null && parent.isEffectivelyPrivate) return;
+    if (isPrivateName(node.name?.lexeme)) return;
+    if (isEffectivelyPrivate(node)) return;
 
     node.parameters.accept(this);
   }
@@ -85,11 +81,11 @@
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    if (Identifier.isPrivateName(node.name.lexeme)) {
+    if (Identifier.isPrivateName(node.namePart.typeName.lexeme)) {
       return;
     }
-    node.typeParameters?.accept(this);
-    node.members.accept(this);
+    node.namePart.typeParameters?.accept(this);
+    node.body.members.accept(this);
   }
 
   @override
@@ -100,18 +96,29 @@
     }
     node.typeParameters?.accept(this);
     node.onClause?.extendedType.accept(this);
-    node.members.accept(this);
+    node.body.members.accept(this);
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    if (Identifier.isPrivateName(node.name.lexeme)) return;
-    node.typeParameters?.accept(this);
-    var representation = node.representation;
-    if (!Identifier.isPrivateName(representation.fieldName.lexeme)) {
-      representation.fieldType.accept(this);
+    if (Identifier.isPrivateName(node.primaryConstructor.typeName.lexeme)) {
+      return;
     }
-    node.members.accept(this);
+    node.primaryConstructor.typeParameters?.accept(this);
+
+    for (var formalParameter
+        in node.primaryConstructor.formalParameters.parameters) {
+      if (formalParameter is SimpleFormalParameter) {
+        var name = formalParameter.name;
+        if (name != null && !Identifier.isPrivateName(name.lexeme)) {
+          formalParameter.type!.accept(this);
+        }
+      }
+    }
+
+    if (node.body case BlockClassBody body) {
+      body.members.accept(this);
+    }
   }
 
   @override
@@ -214,7 +221,7 @@
     }
     node.onClause?.superclassConstraints.accept(this);
     node.typeParameters?.accept(this);
-    node.members.accept(this);
+    node.body.members.accept(this);
   }
 
   @override
@@ -227,6 +234,14 @@
   }
 
   @override
+  void visitPrimaryConstructorDeclaration(PrimaryConstructorDeclaration node) {
+    if (isPrivateName(node.constructorName?.name.lexeme)) return;
+    if (isEffectivelyPrivate(node)) return;
+
+    node.formalParameters.accept(this);
+  }
+
+  @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
     var name = node.name;
     if (name != null && node.isNamed && Identifier.isPrivateName(name.lexeme)) {
@@ -282,6 +297,16 @@
     node.typeParameters.accept(this);
   }
 
+  static bool isEffectivelyPrivate(AstNode node) {
+    var parent = node.parent?.parent;
+
+    // Enum constructors are effectively private so don't visit their params.
+    if (parent is EnumDeclaration) return true;
+
+    // Select modified class types are also effectively private.
+    return parent != null && parent.isEffectivelyPrivate;
+  }
+
   /// Return `true` if the given [element] is private or is defined in a private
   /// library.
   static bool isPrivate(Element element) => isPrivateName(element.name);
diff --git a/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart b/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
index 5615b6d..644d906 100644
--- a/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
+++ b/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/source/line_info.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _cr = '\r';
 
@@ -28,7 +29,7 @@
     : super(name: LintNames.lines_longer_than_80_chars, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.linesLongerThan80Chars;
+  DiagnosticCode get diagnosticCode => diag.linesLongerThan80Chars;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart b/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart
index 35c2f85..31c2a43 100644
--- a/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart
+++ b/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Invocation of `remove` with references of unrelated types.';
 
-class ListRemoveUnrelatedType extends AnalysisRule {
-  ListRemoveUnrelatedType()
-    : super(
-        name: LintNames.list_remove_unrelated_type,
-        description: _desc,
-        state: RuleState.removed(since: dart3_3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final listRemoveUnrelatedType = RemovedAnalysisRule(
+  name: LintNames.list_remove_unrelated_type,
+  description: _desc,
+  since: dart3_3,
+);
diff --git a/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart b/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart
index d58c1e2..b1f0e17 100644
--- a/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart
+++ b/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart
@@ -8,16 +8,18 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Boolean expression composed only with literals.';
 
 bool _onlyLiterals(Expression? rawExpression) {
   var expression = rawExpression?.unParenthesized;
   if (expression is Literal) {
-    return expression is! StringInterpolation ||
+    return expression is! StringLiteral ||
         expression.computeConstantValue() != null;
   }
   if (expression is PrefixExpression) {
@@ -30,6 +32,10 @@
     return _onlyLiterals(expression.leftOperand) &&
         _onlyLiterals(expression.rightOperand);
   }
+  if (expression is IsExpression) {
+    if (expression.type.type?.element is TypeParameterElement) return false;
+    return _onlyLiterals(expression.expression);
+  }
   return false;
 }
 
@@ -41,8 +47,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.literalOnlyBooleanExpressions;
+  DiagnosticCode get diagnosticCode => diag.literalOnlyBooleanExpressions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/matching_super_parameters.dart b/pkg/linter/lib/src/rules/matching_super_parameters.dart
index 188ec94..f63d969 100644
--- a/pkg/linter/lib/src/rules/matching_super_parameters.dart
+++ b/pkg/linter/lib/src/rules/matching_super_parameters.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use matching super parameter names.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.matching_super_parameters, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.matchingSuperParameters;
+  DiagnosticCode get diagnosticCode => diag.matchingSuperParameters;
 
   @override
   void registerNodeProcessors(
@@ -53,7 +54,7 @@
         .firstOrNull;
     var superConstructor = superInvocation?.element;
     if (superConstructor == null) {
-      var class_ = node.parent;
+      var class_ = node.parent?.parent;
       if (class_ is ClassDeclaration) {
         superConstructor = class_
             .declaredFragment
diff --git a/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart b/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart
index 1296894..f3263b8 100644
--- a/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart
+++ b/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'A code block is missing a specified language.';
 
@@ -23,7 +24,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.missingCodeBlockLanguageInDocComment;
+      diag.missingCodeBlockLanguageInDocComment;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart b/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart
index 6904131..bbf8881 100644
--- a/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart
+++ b/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Missing whitespace between adjacent strings.';
 
@@ -22,7 +23,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.missingWhitespaceBetweenAdjacentStrings;
+      diag.missingWhitespaceBetweenAdjacentStrings;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart b/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart
index 542da8f..dee4ce7 100644
--- a/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart
+++ b/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't use adjacent strings in list.";
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.no_adjacent_strings_in_list, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noAdjacentStringsInList;
+  DiagnosticCode get diagnosticCode => diag.noAdjacentStringsInList;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_default_cases.dart b/pkg/linter/lib/src/rules/no_default_cases.dart
index d148505..261e8c6 100644
--- a/pkg/linter/lib/src/rules/no_default_cases.dart
+++ b/pkg/linter/lib/src/rules/no_default_cases.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'No default cases.';
@@ -26,7 +27,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noDefaultCases;
+  DiagnosticCode get diagnosticCode => diag.noDefaultCases;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_duplicate_case_values.dart b/pkg/linter/lib/src/rules/no_duplicate_case_values.dart
index 156ec72..1ddd323 100644
--- a/pkg/linter/lib/src/rules/no_duplicate_case_values.dart
+++ b/pkg/linter/lib/src/rules/no_duplicate_case_values.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't use more than one case with same value.";
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.no_duplicate_case_values, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noDuplicateCaseValues;
+  DiagnosticCode get diagnosticCode => diag.noDuplicateCaseValues;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart b/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart
index 9f0888c..ee37f5d 100644
--- a/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart
+++ b/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/ascii_utils.dart';
 
 const _desc = r'Avoid leading underscores for library prefixes.';
@@ -24,7 +25,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.noLeadingUnderscoresForLibraryPrefixes;
+      diag.noLeadingUnderscoresForLibraryPrefixes;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart b/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart
index d63307a..41ebe54 100644
--- a/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart
+++ b/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/ascii_utils.dart';
 
@@ -25,7 +26,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.noLeadingUnderscoresForLocalIdentifiers;
+      diag.noLeadingUnderscoresForLocalIdentifiers;
 
   @override
   void registerNodeProcessors(
@@ -75,6 +76,12 @@
 
   @override
   void visitFormalParameterList(FormalParameterList node) {
+    if (node.parent case PrimaryConstructorDeclaration primary) {
+      if (primary.parent is ExtensionTypeDeclaration) {
+        return;
+      }
+    }
+
     for (var parameter in node.parameters) {
       if (parameter is DefaultFormalParameter) {
         parameter = parameter.parameter;
diff --git a/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart b/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart
index 31a24e1..7e5d424 100644
--- a/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart
+++ b/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't compare boolean expressions to boolean literals.";
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.no_literal_bool_comparisons, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noLiteralBoolComparisons;
+  DiagnosticCode get diagnosticCode => diag.noLiteralBoolComparisons;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_logic_in_create_state.dart b/pkg/linter/lib/src/rules/no_logic_in_create_state.dart
index 8b10a2f..17d1763 100644
--- a/pkg/linter/lib/src/rules/no_logic_in_create_state.dart
+++ b/pkg/linter/lib/src/rules/no_logic_in_create_state.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 const _desc = r"Don't put any logic in createState.";
@@ -19,7 +20,7 @@
     : super(name: LintNames.no_logic_in_create_state, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noLogicInCreateState;
+  DiagnosticCode get diagnosticCode => diag.noLogicInCreateState;
 
   @override
   void registerNodeProcessors(
@@ -42,7 +43,7 @@
       return;
     }
 
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent is! ClassDeclaration ||
         !isStatefulWidget(parent.declaredFragment?.element)) {
       return;
diff --git a/pkg/linter/lib/src/rules/no_runtimeType_toString.dart b/pkg/linter/lib/src/rules/no_runtimeType_toString.dart
index a507069..25e1eb3 100644
--- a/pkg/linter/lib/src/rules/no_runtimeType_toString.dart
+++ b/pkg/linter/lib/src/rules/no_runtimeType_toString.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid calling `toString()` on `runtimeType`.';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.no_runtimeType_toString, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noRuntimetypeTostring;
+  DiagnosticCode get diagnosticCode => diag.noRuntimetypeTostring;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_self_assignments.dart b/pkg/linter/lib/src/rules/no_self_assignments.dart
index 773df6e..0530022 100644
--- a/pkg/linter/lib/src/rules/no_self_assignments.dart
+++ b/pkg/linter/lib/src/rules/no_self_assignments.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't assign a variable to itself.";
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.no_self_assignments, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noSelfAssignments;
+  DiagnosticCode get diagnosticCode => diag.noSelfAssignments;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart b/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
index b1a1e1f..6d73b5b 100644
--- a/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
+++ b/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/dart/element/extensions.dart'; //ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/ascii_utils.dart';
 
 const _desc = r"Don't use wildcard parameters or variables.";
@@ -21,7 +22,7 @@
     : super(name: LintNames.no_wildcard_variable_uses, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noWildcardVariableUses;
+  DiagnosticCode get diagnosticCode => diag.noWildcardVariableUses;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/non_constant_identifier_names.dart b/pkg/linter/lib/src/rules/non_constant_identifier_names.dart
index 2f8f708..23ba9c5 100644
--- a/pkg/linter/lib/src/rules/non_constant_identifier_names.dart
+++ b/pkg/linter/lib/src/rules/non_constant_identifier_names.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/ascii_utils.dart';
 import '../utils.dart';
@@ -22,8 +23,7 @@
     : super(name: LintNames.non_constant_identifier_names, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.nonConstantIdentifierNames;
+  DiagnosticCode get diagnosticCode => diag.nonConstantIdentifierNames;
 
   @override
   void registerNodeProcessors(
@@ -40,6 +40,7 @@
     registry.addFunctionDeclaration(this, visitor);
     registry.addMethodDeclaration(this, visitor);
     registry.addPatternField(this, visitor);
+    registry.addPrimaryConstructorName(this, visitor);
     registry.addRecordLiteral(this, visitor);
     registry.addRecordTypeAnnotation(this, visitor);
     registry.addVariableDeclaration(this, visitor);
@@ -88,7 +89,7 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    checkIdentifier(node.representation.constructorName?.name);
+    checkIdentifier(node.primaryConstructor.constructorName?.name);
   }
 
   @override
@@ -131,6 +132,11 @@
   }
 
   @override
+  void visitPrimaryConstructorName(PrimaryConstructorName node) {
+    checkIdentifier(node.name, underscoresOk: true);
+  }
+
+  @override
   void visitRecordLiteral(RecordLiteral node) {
     for (var fieldExpression in node.fields) {
       if (fieldExpression is NamedExpression) {
diff --git a/pkg/linter/lib/src/rules/noop_primitive_operations.dart b/pkg/linter/lib/src/rules/noop_primitive_operations.dart
index 719e877..c70fc0f 100644
--- a/pkg/linter/lib/src/rules/noop_primitive_operations.dart
+++ b/pkg/linter/lib/src/rules/noop_primitive_operations.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Noop primitive operations.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.noop_primitive_operations, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.noopPrimitiveOperations;
+  DiagnosticCode get diagnosticCode => diag.noopPrimitiveOperations;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart b/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart
index 70cab0e..843578e 100644
--- a/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart
+++ b/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import 'unnecessary_null_checks.dart';
 
 const _desc =
@@ -25,8 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.nullCheckOnNullableTypeParameter;
+  DiagnosticCode get diagnosticCode => diag.nullCheckOnNullableTypeParameter;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/null_closures.dart b/pkg/linter/lib/src/rules/null_closures.dart
index 00025cc..6b5e273 100644
--- a/pkg/linter/lib/src/rules/null_closures.dart
+++ b/pkg/linter/lib/src/rules/null_closures.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Do not pass `null` as an argument where a closure is expected.';
@@ -193,7 +194,7 @@
   NullClosures() : super(name: LintNames.null_closures, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.nullClosures;
+  DiagnosticCode get diagnosticCode => diag.nullClosures;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/omit_local_variable_types.dart b/pkg/linter/lib/src/rules/omit_local_variable_types.dart
index 3162d67..b10ab6c 100644
--- a/pkg/linter/lib/src/rules/omit_local_variable_types.dart
+++ b/pkg/linter/lib/src/rules/omit_local_variable_types.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Omit type annotations for local variables.';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.omit_local_variable_types, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.omitLocalVariableTypes;
+  DiagnosticCode get diagnosticCode => diag.omitLocalVariableTypes;
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart b/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart
index ee82d20..16bc95d 100644
--- a/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart
+++ b/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/obvious_types.dart';
 
 const _desc = r'Omit obvious type annotations for local variables.';
@@ -25,8 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.omitObviousLocalVariableTypes;
+  DiagnosticCode get diagnosticCode => diag.omitObviousLocalVariableTypes;
 
   @override
   List<String> get incompatibleRules => const [LintNames.always_specify_types];
diff --git a/pkg/linter/lib/src/rules/omit_obvious_property_types.dart b/pkg/linter/lib/src/rules/omit_obvious_property_types.dart
index c6cbf52..c0c7c4e 100644
--- a/pkg/linter/lib/src/rules/omit_obvious_property_types.dart
+++ b/pkg/linter/lib/src/rules/omit_obvious_property_types.dart
@@ -10,7 +10,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/error/error.dart';
 
-import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/obvious_types.dart';
 
 const _desc =
@@ -25,7 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.omitObviousPropertyTypes;
+  DiagnosticCode get diagnosticCode => diag.omitObviousPropertyTypes;
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/one_member_abstracts.dart b/pkg/linter/lib/src/rules/one_member_abstracts.dart
index 3654be5..e5634c4 100644
--- a/pkg/linter/lib/src/rules/one_member_abstracts.dart
+++ b/pkg/linter/lib/src/rules/one_member_abstracts.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -20,7 +21,7 @@
     : super(name: LintNames.one_member_abstracts, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.oneMemberAbstracts;
+  DiagnosticCode get diagnosticCode => diag.oneMemberAbstracts;
 
   @override
   void registerNodeProcessors(
@@ -60,6 +61,6 @@
     var name = method.name;
     if (name == null) return;
 
-    rule.reportAtToken(node.name, arguments: [name]);
+    rule.reportAtToken(node.namePart.typeName, arguments: [name]);
   }
 }
diff --git a/pkg/linter/lib/src/rules/only_throw_errors.dart b/pkg/linter/lib/src/rules/only_throw_errors.dart
index 582289b..a2e5bb9 100644
--- a/pkg/linter/lib/src/rules/only_throw_errors.dart
+++ b/pkg/linter/lib/src/rules/only_throw_errors.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/dart_type_utilities.dart';
 
@@ -35,7 +36,7 @@
     : super(name: LintNames.only_throw_errors, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.onlyThrowErrors;
+  DiagnosticCode get diagnosticCode => diag.onlyThrowErrors;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/overridden_fields.dart b/pkg/linter/lib/src/rules/overridden_fields.dart
index c096fcc..eecbacf 100644
--- a/pkg/linter/lib/src/rules/overridden_fields.dart
+++ b/pkg/linter/lib/src/rules/overridden_fields.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/dart/element/element.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r"Don't override fields.";
@@ -21,7 +22,7 @@
     : super(name: LintNames.overridden_fields, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.overriddenFields;
+  DiagnosticCode get diagnosticCode => diag.overriddenFields;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/package_api_docs.dart b/pkg/linter/lib/src/rules/package_api_docs.dart
index 134d192..8fd2b83 100644
--- a/pkg/linter/lib/src/rules/package_api_docs.dart
+++ b/pkg/linter/lib/src/rules/package_api_docs.dart
@@ -3,20 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
-import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 import 'package:pub_semver/pub_semver.dart';
 
 import '../analyzer.dart';
 
-class PackageApiDocs extends AnalysisRule {
-  PackageApiDocs()
-    : super(
-        name: LintNames.package_api_docs,
-        description: r'Provide doc comments for all public APIs.',
-        state: RuleState.removed(since: Version(3, 7, 0)),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final packageApiDocs = RemovedAnalysisRule(
+  name: LintNames.package_api_docs,
+  description: r'Provide doc comments for all public APIs.',
+  since: Version(3, 7, 0),
+);
diff --git a/pkg/linter/lib/src/rules/package_prefixed_library_names.dart b/pkg/linter/lib/src/rules/package_prefixed_library_names.dart
index 75cf50c..0386094 100644
--- a/pkg/linter/lib/src/rules/package_prefixed_library_names.dart
+++ b/pkg/linter/lib/src/rules/package_prefixed_library_names.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Prefix library names with the package name and a dot-separated path.';
@@ -24,8 +25,7 @@
     : super(name: LintNames.package_prefixed_library_names, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.packagePrefixedLibraryNames;
+  DiagnosticCode get diagnosticCode => diag.packagePrefixedLibraryNames;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/parameter_assignments.dart b/pkg/linter/lib/src/rules/parameter_assignments.dart
index db8a696..ad64afd 100644
--- a/pkg/linter/lib/src/rules/parameter_assignments.dart
+++ b/pkg/linter/lib/src/rules/parameter_assignments.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r"Don't reassign references to parameters of functions or methods.";
@@ -32,7 +33,7 @@
     : super(name: LintNames.parameter_assignments, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.parameterAssignments;
+  DiagnosticCode get diagnosticCode => diag.parameterAssignments;
 
   @override
   void registerNodeProcessors(
@@ -42,6 +43,8 @@
     var visitor = _Visitor(this);
     registry.addFunctionDeclaration(this, visitor);
     registry.addMethodDeclaration(this, visitor);
+    registry.addFunctionExpression(this, visitor);
+    registry.addConstructorDeclaration(this, visitor);
   }
 }
 
@@ -92,17 +95,22 @@
   }
 
   @override
-  visitAssignmentExpression(AssignmentExpression node) {
+  void visitAssignmentExpression(AssignmentExpression node) {
+    if (!_isFormalParameterReassigned(parameter, node)) return;
+
     if (paramIsNotNullByDefault) {
-      if (_isFormalParameterReassigned(parameter, node)) {
-        reportLint(node);
-      }
-    } else if (paramDefaultsToNull) {
-      if (_isFormalParameterReassigned(parameter, node)) {
+      reportLint(node);
+      return;
+    }
+
+    if (paramDefaultsToNull) {
+      if (node.operator.type.lexeme == '??=') {
         if (hasBeenAssigned) {
           reportLint(node);
         }
         hasBeenAssigned = true;
+      } else {
+        reportLint(node);
       }
     }
 
@@ -147,6 +155,11 @@
   _Visitor(this.rule);
 
   @override
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
+    _checkParameters(node.parameters, node.body);
+  }
+
+  @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
     _checkParameters(
       node.functionExpression.parameters,
@@ -155,6 +168,13 @@
   }
 
   @override
+  void visitFunctionExpression(FunctionExpression node) {
+    if (node.parent is! FunctionDeclaration) {
+      _checkParameters(node.parameters, node.body);
+    }
+  }
+
+  @override
   void visitMethodDeclaration(MethodDeclaration node) {
     _checkParameters(node.parameters, node.body);
   }
diff --git a/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart b/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart
index 57e2285..81fe475 100644
--- a/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart
+++ b/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use adjacent strings to concatenate string literals.';
 
@@ -21,8 +22,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferAdjacentStringConcatenation;
+  DiagnosticCode get diagnosticCode => diag.preferAdjacentStringConcatenation;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart b/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart
index 89da066..ab518d6 100644
--- a/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart
+++ b/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart
@@ -12,6 +12,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer putting asserts in initializer lists.';
 
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferAssertsInInitializerLists;
+  DiagnosticCode get diagnosticCode => diag.preferAssertsInInitializerLists;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart b/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart
index e755620..63ece8f 100644
--- a/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart
+++ b/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer asserts with message.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.prefer_asserts_with_message, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferAssertsWithMessage;
+  DiagnosticCode get diagnosticCode => diag.preferAssertsWithMessage;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart b/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart
index 69d53c4..74ffdd9 100644
--- a/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart
+++ b/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Prefer using a boolean as the assert condition.';
 
-class PreferBoolInAsserts extends AnalysisRule {
-  PreferBoolInAsserts()
-    : super(
-        name: LintNames.prefer_bool_in_asserts,
-        description: _desc,
-        state: RuleState.removed(since: dart3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final preferBoolInAsserts = RemovedAnalysisRule(
+  name: LintNames.prefer_bool_in_asserts,
+  description: _desc,
+  since: dart3,
+);
diff --git a/pkg/linter/lib/src/rules/prefer_collection_literals.dart b/pkg/linter/lib/src/rules/prefer_collection_literals.dart
index dd268e6..2ea3cf8 100644
--- a/pkg/linter/lib/src/rules/prefer_collection_literals.dart
+++ b/pkg/linter/lib/src/rules/prefer_collection_literals.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use collection literals when possible.';
@@ -22,7 +23,7 @@
     : super(name: LintNames.prefer_collection_literals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferCollectionLiterals;
+  DiagnosticCode get diagnosticCode => diag.preferCollectionLiterals;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart b/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart
index edca54f..c5fade0 100644
--- a/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart
+++ b/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/dart_type_utilities.dart' as type_utils;
 
@@ -52,8 +53,7 @@
     : super(name: LintNames.prefer_conditional_assignment, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferConditionalAssignment;
+  DiagnosticCode get diagnosticCode => diag.preferConditionalAssignment;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_const_constructors.dart b/pkg/linter/lib/src/rules/prefer_const_constructors.dart
index b781472..d7126a8 100644
--- a/pkg/linter/lib/src/rules/prefer_const_constructors.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_constructors.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Prefer `const` with constant constructors.';
@@ -21,7 +22,7 @@
     : super(name: LintNames.prefer_const_constructors, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferConstConstructors;
+  DiagnosticCode get diagnosticCode => diag.preferConstConstructors;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart b/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart
index 2fe2b60..30e2957f 100644
--- a/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart
@@ -13,6 +13,7 @@
 import 'package:collection/collection.dart' show IterableExtension;
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer declaring `const` constructors on `@immutable` classes.';
 
@@ -24,8 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferConstConstructorsInImmutables;
+  DiagnosticCode get diagnosticCode => diag.preferConstConstructorsInImmutables;
 
   @override
   void registerNodeProcessors(
@@ -67,11 +67,11 @@
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    if (node.constKeyword != null) return;
+    if (node.primaryConstructor.constKeyword != null) return;
     var element = node.declaredFragment?.element;
     if (element == null) return;
     if (element.metadata.hasImmutable) {
-      rule.reportAtToken(node.name);
+      rule.reportAtToken(node.primaryConstructor.typeName);
     }
   }
 
diff --git a/pkg/linter/lib/src/rules/prefer_const_declarations.dart b/pkg/linter/lib/src/rules/prefer_const_declarations.dart
index ea231fc1..7ed0e3b 100644
--- a/pkg/linter/lib/src/rules/prefer_const_declarations.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_declarations.dart
@@ -12,6 +12,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer `const` over `final` for declarations.';
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.prefer_const_declarations, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferConstDeclarations;
+  DiagnosticCode get diagnosticCode => diag.preferConstDeclarations;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart b/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart
index 6977fe8..e0a516d 100644
--- a/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const desc =
     'Prefer const literals as parameters of constructors on @immutable classes.';
@@ -24,7 +25,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferConstLiteralsToCreateImmutables;
+      diag.preferConstLiteralsToCreateImmutables;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart b/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart
index 26a14cc..62c95f2 100644
--- a/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart
+++ b/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Prefer defining constructors instead of static methods to create '
@@ -27,8 +28,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferConstructorsOverStaticMethods;
+  DiagnosticCode get diagnosticCode => diag.preferConstructorsOverStaticMethods;
 
   @override
   void registerNodeProcessors(
@@ -75,7 +75,7 @@
     var returnType = node.returnType?.type;
     if (returnType is! InterfaceType) return;
 
-    var interfaceType = node.parent.typeToCheckOrNull();
+    var interfaceType = node.parent?.parent.typeToCheckOrNull();
     if (interfaceType != returnType) return;
 
     if (_hasNewInvocation(returnType, node.body)) {
@@ -87,9 +87,13 @@
 extension on AstNode? {
   InterfaceType? typeToCheckOrNull() => switch (this) {
     ExtensionTypeDeclaration e =>
-      e.typeParameters == null ? e.declaredFragment?.element.thisType : null,
+      e.primaryConstructor.typeParameters == null
+          ? e.declaredFragment?.element.thisType
+          : null,
     ClassDeclaration c =>
-      c.typeParameters == null ? c.declaredFragment?.element.thisType : null,
+      c.namePart.typeParameters == null
+          ? c.declaredFragment?.element.thisType
+          : null,
     _ => null,
   };
 }
diff --git a/pkg/linter/lib/src/rules/prefer_contains.dart b/pkg/linter/lib/src/rules/prefer_contains.dart
index d65c227..3b0cf03 100644
--- a/pkg/linter/lib/src/rules/prefer_contains.dart
+++ b/pkg/linter/lib/src/rules/prefer_contains.dart
@@ -12,6 +12,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/dart_type_utilities.dart';
 
@@ -25,9 +26,9 @@
   //  preference.
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.preferContainsAlwaysFalse,
-    LinterLintCode.preferContainsAlwaysTrue,
-    LinterLintCode.preferContainsUseContains,
+    diag.preferContainsAlwaysFalse,
+    diag.preferContainsAlwaysTrue,
+    diag.preferContainsUseContains,
   ];
 
   @override
@@ -83,19 +84,19 @@
           type == TokenType.GT) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferContainsUseContains,
+          diagnosticCode: diag.preferContainsUseContains,
         );
       } else if (type == TokenType.LT) {
         // indexOf < -1 is always false
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferContainsAlwaysFalse,
+          diagnosticCode: diag.preferContainsAlwaysFalse,
         );
       } else if (type == TokenType.GT_EQ) {
         // indexOf >= -1 is always true
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferContainsAlwaysTrue,
+          diagnosticCode: diag.preferContainsAlwaysTrue,
         );
       }
     } else if (value == 0) {
@@ -104,7 +105,7 @@
       if (type == TokenType.GT_EQ || type == TokenType.LT) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferContainsUseContains,
+          diagnosticCode: diag.preferContainsUseContains,
         );
       }
     } else if (value < -1) {
@@ -115,14 +116,14 @@
           type == TokenType.LT) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferContainsAlwaysFalse,
+          diagnosticCode: diag.preferContainsAlwaysFalse,
         );
       } else if (type == TokenType.BANG_EQ ||
           type == TokenType.GT_EQ ||
           type == TokenType.GT) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferContainsAlwaysTrue,
+          diagnosticCode: diag.preferContainsAlwaysTrue,
         );
       }
     }
diff --git a/pkg/linter/lib/src/rules/prefer_double_quotes.dart b/pkg/linter/lib/src/rules/prefer_double_quotes.dart
index 9582e03..cbab8302 100644
--- a/pkg/linter/lib/src/rules/prefer_double_quotes.dart
+++ b/pkg/linter/lib/src/rules/prefer_double_quotes.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../rules/prefer_single_quotes.dart';
 
 const _desc =
@@ -18,7 +19,7 @@
     : super(name: LintNames.prefer_double_quotes, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferDoubleQuotes;
+  DiagnosticCode get diagnosticCode => diag.preferDoubleQuotes;
 
   @override
   List<String> get incompatibleRules => const [LintNames.prefer_single_quotes];
diff --git a/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart b/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart
index f129fe9..1d5b1c6 100644
--- a/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart
+++ b/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart
@@ -4,20 +4,13 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc = r'Use `=` to separate a named parameter from its default value.';
 
-class PreferEqualForDefaultValues extends AnalysisRule {
-  PreferEqualForDefaultValues()
-    : super(
-        name: LintNames.prefer_equal_for_default_values,
-        description: _desc,
-        state: RuleState.removed(since: dart3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final preferEqualForDefaultValues = RemovedAnalysisRule(
+  name: LintNames.prefer_equal_for_default_values,
+  description: _desc,
+  since: dart3,
+);
diff --git a/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart b/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart
index 06c8e36..356150e 100644
--- a/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart
+++ b/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Use => for short members whose body is a single return statement.';
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferExpressionFunctionBodies;
+  DiagnosticCode get diagnosticCode => diag.preferExpressionFunctionBodies;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_final_fields.dart b/pkg/linter/lib/src/rules/prefer_final_fields.dart
index 5285194..523831e4 100644
--- a/pkg/linter/lib/src/rules/prefer_final_fields.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_fields.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Private field could be `final`.';
@@ -21,7 +22,7 @@
     : super(name: LintNames.prefer_final_fields, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferFinalFields;
+  DiagnosticCode get diagnosticCode => diag.preferFinalFields;
 
   @override
   void registerNodeProcessors(
@@ -49,7 +50,7 @@
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
     if (node.isInvalidExtensionTypeField) return;
-    if (node.parent is EnumDeclaration) return;
+    if (node.parent?.parent is EnumDeclaration) return;
     if (node.fields.isFinal || node.fields.isConst) {
       return;
     }
@@ -128,10 +129,15 @@
       // TODO(srawlins): We could look at the constructors once and store a set
       // of which fields are initialized by any, and a set of which fields are
       // initialized by all. This would conceivably improve performance.
-      var classDeclaration = variable.parent?.parent?.parent;
-      var constructors = classDeclaration is ClassDeclaration
-          ? classDeclaration.members.whereType<ConstructorDeclaration>()
-          : <ConstructorDeclaration>[];
+      var classDeclaration = variable.parent?.parent?.parent?.parent;
+      var constructors = <ConstructorDeclaration>[];
+      if (classDeclaration is ClassDeclaration) {
+        if (classDeclaration.body case BlockClassBody body) {
+          constructors = body.members
+              .whereType<ConstructorDeclaration>()
+              .toList();
+        }
+      }
 
       var isSetInAnyConstructor = constructors.any(
         (constructor) => field.isSetInConstructor(constructor),
diff --git a/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart b/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart
index b2161b9..d38b70d 100644
--- a/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -21,8 +22,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.preferFinalInForEachPattern,
-    LinterLintCode.preferFinalInForEachVariable,
+    diag.preferFinalInForEachPattern,
+    diag.preferFinalInForEachVariable,
   ];
 
   @override
@@ -57,7 +58,7 @@
       var name = loopVariable.name;
       rule.reportAtToken(
         name,
-        diagnosticCode: LinterLintCode.preferFinalInForEachVariable,
+        diagnosticCode: diag.preferFinalInForEachVariable,
         arguments: [name.lexeme],
       );
     }
@@ -75,21 +76,21 @@
       if (!function.potentiallyMutatesAnyField(pattern.fields)) {
         rule.reportAtNode(
           pattern,
-          diagnosticCode: LinterLintCode.preferFinalInForEachPattern,
+          diagnosticCode: diag.preferFinalInForEachPattern,
         );
       }
     } else if (pattern is ObjectPattern) {
       if (!function.potentiallyMutatesAnyField(pattern.fields)) {
         rule.reportAtNode(
           pattern,
-          diagnosticCode: LinterLintCode.preferFinalInForEachPattern,
+          diagnosticCode: diag.preferFinalInForEachPattern,
         );
       }
     } else if (pattern is ListPattern) {
       if (!pattern.elements.any((e) => function.potentiallyMutates(e))) {
         rule.reportAtNode(
           pattern,
-          diagnosticCode: LinterLintCode.preferFinalInForEachPattern,
+          diagnosticCode: diag.preferFinalInForEachPattern,
         );
       }
     } else if (pattern is MapPattern) {
@@ -98,7 +99,7 @@
       )) {
         rule.reportAtNode(
           pattern,
-          diagnosticCode: LinterLintCode.preferFinalInForEachPattern,
+          diagnosticCode: diag.preferFinalInForEachPattern,
         );
       }
     }
diff --git a/pkg/linter/lib/src/rules/prefer_final_locals.dart b/pkg/linter/lib/src/rules/prefer_final_locals.dart
index 465eb02..1a2d52c 100644
--- a/pkg/linter/lib/src/rules/prefer_final_locals.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_locals.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/dart/element/extensions.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -22,7 +23,7 @@
     : super(name: LintNames.prefer_final_locals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferFinalLocals;
+  DiagnosticCode get diagnosticCode => diag.preferFinalLocals;
 
   @override
   List<String> get incompatibleRules => const [LintNames.unnecessary_final];
diff --git a/pkg/linter/lib/src/rules/prefer_final_parameters.dart b/pkg/linter/lib/src/rules/prefer_final_parameters.dart
index 66e183f..1f86339 100644
--- a/pkg/linter/lib/src/rules/prefer_final_parameters.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_parameters.dart
@@ -4,23 +4,31 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_context.dart';
+import 'package:analyzer/analysis_rule/rule_state.dart';
 import 'package:analyzer/analysis_rule/rule_visitor_registry.dart';
+import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/element/extensions.dart'; //ignore: implementation_imports
+import 'package:pub_semver/pub_semver.dart' show Version;
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Prefer final for parameter declarations if they are not reassigned.';
 
 class PreferFinalParameters extends AnalysisRule {
   PreferFinalParameters()
-    : super(name: LintNames.prefer_final_parameters, description: _desc);
+    : super(
+        name: LintNames.prefer_final_parameters,
+        description: _desc,
+        state: RuleState.deprecated(since: Version(3, 11, 0)),
+      );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferFinalParameters;
+  DiagnosticCode get diagnosticCode => diag.preferFinalParameters;
 
   @override
   List<String> get incompatibleRules => const [
@@ -33,6 +41,11 @@
     RuleVisitorRegistry registry,
     RuleContext context,
   ) {
+    // This lint isn't relevant with primary constructors enabled
+    // as `final` is no longer used to indicate a parameter is final,
+    // but rather as a declaring parameter in a primary constructor.
+    if (context.isFeatureEnabled(Feature.primary_constructors)) return;
+
     var visitor = _Visitor(this);
     registry.addConstructorDeclaration(this, visitor);
     registry.addFunctionExpression(this, visitor);
diff --git a/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart b/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart
index ebb0b38..36f35c3 100644
--- a/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart
+++ b/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer `for` elements when building maps from iterables.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferForElementsToMapFromiterable;
+  DiagnosticCode get diagnosticCode => diag.preferForElementsToMapFromiterable;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_foreach.dart b/pkg/linter/lib/src/rules/prefer_foreach.dart
index 274fa2c..d2e1d2a 100644
--- a/pkg/linter/lib/src/rules/prefer_foreach.dart
+++ b/pkg/linter/lib/src/rules/prefer_foreach.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use `forEach` to only apply a function to all the elements.';
@@ -19,7 +20,7 @@
   PreferForeach() : super(name: LintNames.prefer_foreach, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferForeach;
+  DiagnosticCode get diagnosticCode => diag.preferForeach;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart b/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart
index f977dc3..7f51278 100644
--- a/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart
+++ b/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use a function declaration to bind a function to a name.';
 
@@ -22,7 +23,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferFunctionDeclarationsOverVariables;
+      diag.preferFunctionDeclarationsOverVariables;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart b/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart
index 2387958..8845852 100644
--- a/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart
+++ b/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer generic function type aliases.';
 
@@ -24,8 +25,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferGenericFunctionTypeAliases;
+  DiagnosticCode get diagnosticCode => diag.preferGenericFunctionTypeAliases;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart b/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart
index 9ca2242..21f46cb 100644
--- a/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart
+++ b/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer if elements to conditional expressions where possible.';
 
@@ -22,7 +23,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferIfElementsToConditionalExpressions;
+      diag.preferIfElementsToConditionalExpressions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_if_null_operators.dart b/pkg/linter/lib/src/rules/prefer_if_null_operators.dart
index 00f140e..e673480 100644
--- a/pkg/linter/lib/src/rules/prefer_if_null_operators.dart
+++ b/pkg/linter/lib/src/rules/prefer_if_null_operators.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer using `??` operators.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.prefer_if_null_operators, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferIfNullOperators;
+  DiagnosticCode get diagnosticCode => diag.preferIfNullOperators;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_initializing_formals.dart b/pkg/linter/lib/src/rules/prefer_initializing_formals.dart
index 40a9edf..da8692b 100644
--- a/pkg/linter/lib/src/rules/prefer_initializing_formals.dart
+++ b/pkg/linter/lib/src/rules/prefer_initializing_formals.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use initializing formals when possible.';
@@ -50,7 +51,7 @@
     : super(name: LintNames.prefer_initializing_formals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferInitializingFormals;
+  DiagnosticCode get diagnosticCode => diag.preferInitializingFormals;
 
   @override
   void registerNodeProcessors(
@@ -87,7 +88,7 @@
           leftElement.name == rightElement.name &&
           !leftElement.isPrivate &&
           leftElement is FieldElement &&
-          !leftElement.isSynthetic &&
+          leftElement.isOriginDeclaration &&
           leftElement.enclosingElement ==
               node.declaredFragment?.element.enclosingElement &&
           parameters.contains(rightElement) &&
diff --git a/pkg/linter/lib/src/rules/prefer_inlined_adds.dart b/pkg/linter/lib/src/rules/prefer_inlined_adds.dart
index 6e9e5ce..2cf78ee 100644
--- a/pkg/linter/lib/src/rules/prefer_inlined_adds.dart
+++ b/pkg/linter/lib/src/rules/prefer_inlined_adds.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Inline list item declarations where possible.';
 
@@ -19,8 +20,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.preferInlinedAddsMultiple,
-    LinterLintCode.preferInlinedAddsSingle,
+    diag.preferInlinedAddsMultiple,
+    diag.preferInlinedAddsSingle,
   ];
 
   @override
@@ -64,8 +65,8 @@
     rule.reportAtNode(
       invocation.methodName,
       diagnosticCode: addAll
-          ? LinterLintCode.preferInlinedAddsMultiple
-          : LinterLintCode.preferInlinedAddsSingle,
+          ? diag.preferInlinedAddsMultiple
+          : diag.preferInlinedAddsSingle,
     );
   }
 }
diff --git a/pkg/linter/lib/src/rules/prefer_int_literals.dart b/pkg/linter/lib/src/rules/prefer_int_literals.dart
index fcc2c83..647dfe9 100644
--- a/pkg/linter/lib/src/rules/prefer_int_literals.dart
+++ b/pkg/linter/lib/src/rules/prefer_int_literals.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = 'Prefer int literals over double literals.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.prefer_int_literals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferIntLiterals;
+  DiagnosticCode get diagnosticCode => diag.preferIntLiterals;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart b/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart
index 8f271c6..892adc6 100644
--- a/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart
+++ b/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart
@@ -12,6 +12,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use interpolation to compose strings and values.';
 
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferInterpolationToComposeStrings;
+  DiagnosticCode get diagnosticCode => diag.preferInterpolationToComposeStrings;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_is_empty.dart b/pkg/linter/lib/src/rules/prefer_is_empty.dart
index b324b88..e638295 100644
--- a/pkg/linter/lib/src/rules/prefer_is_empty.dart
+++ b/pkg/linter/lib/src/rules/prefer_is_empty.dart
@@ -13,6 +13,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use `isEmpty` for `Iterable`s and `Map`s.';
@@ -25,10 +26,10 @@
   //  preference.
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.preferIsEmptyAlwaysFalse,
-    LinterLintCode.preferIsEmptyAlwaysTrue,
-    LinterLintCode.preferIsEmptyUseIsEmpty,
-    LinterLintCode.preferIsEmptyUseIsNotEmpty,
+    diag.preferIsEmptyAlwaysFalse,
+    diag.preferIsEmptyAlwaysTrue,
+    diag.preferIsEmptyUseIsEmpty,
+    diag.preferIsEmptyUseIsNotEmpty,
   ];
 
   @override
@@ -95,23 +96,23 @@
           operator.type == TokenType.LT_EQ) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferIsEmptyUseIsEmpty,
+          diagnosticCode: diag.preferIsEmptyUseIsEmpty,
         );
       } else if (operator.type == TokenType.GT ||
           operator.type == TokenType.BANG_EQ) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferIsEmptyUseIsNotEmpty,
+          diagnosticCode: diag.preferIsEmptyUseIsNotEmpty,
         );
       } else if (operator.type == TokenType.LT) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferIsEmptyAlwaysFalse,
+          diagnosticCode: diag.preferIsEmptyAlwaysFalse,
         );
       } else if (operator.type == TokenType.GT_EQ) {
         rule.reportAtNode(
           expression,
-          diagnosticCode: LinterLintCode.preferIsEmptyAlwaysTrue,
+          diagnosticCode: diag.preferIsEmptyAlwaysTrue,
         );
       }
     } else if (value == 1) {
@@ -121,12 +122,12 @@
         if (operator.type == TokenType.GT_EQ) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyUseIsNotEmpty,
+            diagnosticCode: diag.preferIsEmptyUseIsNotEmpty,
           );
         } else if (operator.type == TokenType.LT) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyUseIsEmpty,
+            diagnosticCode: diag.preferIsEmptyUseIsEmpty,
           );
         }
       } else {
@@ -135,12 +136,12 @@
         if (operator.type == TokenType.LT_EQ) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyUseIsNotEmpty,
+            diagnosticCode: diag.preferIsEmptyUseIsNotEmpty,
           );
         } else if (operator.type == TokenType.GT) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyUseIsEmpty,
+            diagnosticCode: diag.preferIsEmptyUseIsEmpty,
           );
         }
       }
@@ -152,14 +153,14 @@
             operator.type == TokenType.LT) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyAlwaysFalse,
+            diagnosticCode: diag.preferIsEmptyAlwaysFalse,
           );
         } else if (operator.type == TokenType.BANG_EQ ||
             operator.type == TokenType.GT_EQ ||
             operator.type == TokenType.GT) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyAlwaysTrue,
+            diagnosticCode: diag.preferIsEmptyAlwaysTrue,
           );
         }
       } else {
@@ -169,14 +170,14 @@
             operator.type == TokenType.GT) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyAlwaysFalse,
+            diagnosticCode: diag.preferIsEmptyAlwaysFalse,
           );
         } else if (operator.type == TokenType.BANG_EQ ||
             operator.type == TokenType.LT_EQ ||
             operator.type == TokenType.LT) {
           rule.reportAtNode(
             expression,
-            diagnosticCode: LinterLintCode.preferIsEmptyAlwaysTrue,
+            diagnosticCode: diag.preferIsEmptyAlwaysTrue,
           );
         }
       }
diff --git a/pkg/linter/lib/src/rules/prefer_is_not_empty.dart b/pkg/linter/lib/src/rules/prefer_is_not_empty.dart
index 558f979..5687b2a 100644
--- a/pkg/linter/lib/src/rules/prefer_is_not_empty.dart
+++ b/pkg/linter/lib/src/rules/prefer_is_not_empty.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use `isNotEmpty` for `Iterable`s and `Map`s.';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.prefer_is_not_empty, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferIsNotEmpty;
+  DiagnosticCode get diagnosticCode => diag.preferIsNotEmpty;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_is_not_operator.dart b/pkg/linter/lib/src/rules/prefer_is_not_operator.dart
index 60f9052..4428510 100644
--- a/pkg/linter/lib/src/rules/prefer_is_not_operator.dart
+++ b/pkg/linter/lib/src/rules/prefer_is_not_operator.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer is! operator.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.prefer_is_not_operator, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferIsNotOperator;
+  DiagnosticCode get diagnosticCode => diag.preferIsNotOperator;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart b/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart
index 8fd1387..0012da9 100644
--- a/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart
+++ b/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Prefer to use `whereType` on iterable.';
@@ -20,7 +21,7 @@
     : super(name: LintNames.prefer_iterable_whereType, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferIterableWheretype;
+  DiagnosticCode get diagnosticCode => diag.preferIterableWheretype;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_mixin.dart b/pkg/linter/lib/src/rules/prefer_mixin.dart
index 8f08450..6017ddf 100644
--- a/pkg/linter/lib/src/rules/prefer_mixin.dart
+++ b/pkg/linter/lib/src/rules/prefer_mixin.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer using mixins.';
 
@@ -19,7 +20,7 @@
   PreferMixin() : super(name: LintNames.prefer_mixin, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferMixin;
+  DiagnosticCode get diagnosticCode => diag.preferMixin;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart b/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart
index 126ab6e..0397e1c 100644
--- a/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart
+++ b/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer `null`-aware method calls.';
 
@@ -19,8 +20,7 @@
     : super(name: LintNames.prefer_null_aware_method_calls, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.preferNullAwareMethodCalls;
+  DiagnosticCode get diagnosticCode => diag.preferNullAwareMethodCalls;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart b/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart
index 554412a..e454aa3 100644
--- a/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart
+++ b/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer using `null`-aware operators.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.prefer_null_aware_operators, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferNullAwareOperators;
+  DiagnosticCode get diagnosticCode => diag.preferNullAwareOperators;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_relative_imports.dart b/pkg/linter/lib/src/rules/prefer_relative_imports.dart
index 8ed096b..4db723f 100644
--- a/pkg/linter/lib/src/rules/prefer_relative_imports.dart
+++ b/pkg/linter/lib/src/rules/prefer_relative_imports.dart
@@ -13,6 +13,7 @@
 import 'package:path/path.dart' as path;
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer relative imports for files in `lib/`.';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.prefer_relative_imports, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferRelativeImports;
+  DiagnosticCode get diagnosticCode => diag.preferRelativeImports;
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/prefer_single_quotes.dart b/pkg/linter/lib/src/rules/prefer_single_quotes.dart
index 88c53e4..4fd2d33 100644
--- a/pkg/linter/lib/src/rules/prefer_single_quotes.dart
+++ b/pkg/linter/lib/src/rules/prefer_single_quotes.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Only use double quotes for strings containing single quotes.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.prefer_single_quotes, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferSingleQuotes;
+  DiagnosticCode get diagnosticCode => diag.preferSingleQuotes;
 
   @override
   List<String> get incompatibleRules => const [LintNames.prefer_double_quotes];
diff --git a/pkg/linter/lib/src/rules/prefer_spread_collections.dart b/pkg/linter/lib/src/rules/prefer_spread_collections.dart
index 70a3609..528c9b1 100644
--- a/pkg/linter/lib/src/rules/prefer_spread_collections.dart
+++ b/pkg/linter/lib/src/rules/prefer_spread_collections.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use spread collections when possible.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.prefer_spread_collections, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferSpreadCollections;
+  DiagnosticCode get diagnosticCode => diag.preferSpreadCollections;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart b/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart
index 0260554..7616181 100644
--- a/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart
+++ b/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Prefer typing uninitialized variables and fields.';
@@ -23,8 +24,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.preferTypingUninitializedVariablesForField,
-    LinterLintCode.preferTypingUninitializedVariablesForLocalVariable,
+    diag.preferTypingUninitializedVariablesForField,
+    diag.preferTypingUninitializedVariablesForLocalVariable,
   ];
 
   @override
@@ -49,8 +50,8 @@
     for (var v in node.variables) {
       if (v.initializer == null && !v.isAugmentation) {
         var code = node.parent is FieldDeclaration
-            ? LinterLintCode.preferTypingUninitializedVariablesForField
-            : LinterLintCode.preferTypingUninitializedVariablesForLocalVariable;
+            ? diag.preferTypingUninitializedVariablesForField
+            : diag.preferTypingUninitializedVariablesForLocalVariable;
         rule.reportAtNode(v, diagnosticCode: code);
       }
     }
diff --git a/pkg/linter/lib/src/rules/prefer_void_to_null.dart b/pkg/linter/lib/src/rules/prefer_void_to_null.dart
index 7b973e0..01c3bfb 100644
--- a/pkg/linter/lib/src/rules/prefer_void_to_null.dart
+++ b/pkg/linter/lib/src/rules/prefer_void_to_null.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -21,7 +22,7 @@
     : super(name: LintNames.prefer_void_to_null, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.preferVoidToNull;
+  DiagnosticCode get diagnosticCode => diag.preferVoidToNull;
 
   @override
   void registerNodeProcessors(
@@ -106,8 +107,14 @@
     }
 
     // extension type N(Null _) ...
-    if (parent is RepresentationDeclaration) {
-      return;
+    if (parent is SimpleFormalParameter) {
+      if (parent.parent case FormalParameterList parent2) {
+        if (parent2.parent case PrimaryConstructorDeclaration parent3) {
+          if (parent3.parent is ExtensionTypeDeclaration) {
+            return;
+          }
+        }
+      }
     }
 
     // https://github.com/dart-lang/linter/issues/2792
@@ -118,9 +125,7 @@
 
     if (parent != null) {
       AstNode? declaration = parent.thisOrAncestorOfType<ClassMember>();
-      declaration ??= parent.thisOrAncestorOfType<NamedCompilationUnitMember>();
-      declaration ??= parent
-          .thisOrAncestorOfType<TopLevelVariableDeclaration>();
+      declaration ??= parent.thisOrAncestorOfType<CompilationUnitMember>();
       if (declaration?.isAugmentation ?? false) return;
     }
 
diff --git a/pkg/linter/lib/src/rules/provide_deprecation_message.dart b/pkg/linter/lib/src/rules/provide_deprecation_message.dart
index 7151a6ac..314183a 100644
--- a/pkg/linter/lib/src/rules/provide_deprecation_message.dart
+++ b/pkg/linter/lib/src/rules/provide_deprecation_message.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Provide a deprecation message, via `@Deprecated("message")`.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.provide_deprecation_message, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.provideDeprecationMessage;
+  DiagnosticCode get diagnosticCode => diag.provideDeprecationMessage;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart b/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart
index da3cf5d..65bb08a 100644
--- a/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart
+++ b/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart
@@ -12,6 +12,7 @@
 
 import '../../analyzer.dart';
 import '../../ast.dart';
+import '../../diagnostic.dart' as diag;
 
 const _desc = r'Depend on referenced packages.';
 
@@ -20,8 +21,7 @@
     : super(name: LintNames.depend_on_referenced_packages, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.dependOnReferencedPackages;
+  DiagnosticCode get diagnosticCode => diag.dependOnReferencedPackages;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/pub/package_names.dart b/pkg/linter/lib/src/rules/pub/package_names.dart
index e6f87b6..d85efff 100644
--- a/pkg/linter/lib/src/rules/pub/package_names.dart
+++ b/pkg/linter/lib/src/rules/pub/package_names.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../../analyzer.dart';
+import '../../diagnostic.dart' as diag;
 import '../../utils.dart';
 
 const _desc = r'Use `lowercase_with_underscores` for package names.';
@@ -15,7 +16,7 @@
   PackageNames() : super(name: LintNames.package_names, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.packageNames;
+  DiagnosticCode get diagnosticCode => diag.packageNames;
 
   @override
   PubspecVisitor<void> get pubspecVisitor => Visitor(this);
diff --git a/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart b/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart
index ea4bb95..425ee4d 100644
--- a/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart
+++ b/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../../analyzer.dart';
+import '../../diagnostic.dart' as diag;
 
 const _desc = r'Use secure urls in `pubspec.yaml`.';
 
@@ -15,7 +16,7 @@
     : super(name: LintNames.secure_pubspec_urls, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.securePubspecUrls;
+  DiagnosticCode get diagnosticCode => diag.securePubspecUrls;
 
   @override
   PubspecVisitor<void> get pubspecVisitor => Visitor(this);
diff --git a/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart b/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart
index 78087ee3..fe37a5e 100644
--- a/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart
+++ b/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart
@@ -8,6 +8,7 @@
 import 'package:source_span/source_span.dart';
 
 import '../../analyzer.dart';
+import '../../diagnostic.dart' as diag;
 
 const _desc = r'Sort pub dependencies alphabetically.';
 
@@ -16,7 +17,7 @@
     : super(name: LintNames.sort_pub_dependencies, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.sortPubDependencies;
+  DiagnosticCode get diagnosticCode => diag.sortPubDependencies;
 
   @override
   PubspecVisitor<void> get pubspecVisitor => Visitor(this);
diff --git a/pkg/linter/lib/src/rules/public_member_api_docs.dart b/pkg/linter/lib/src/rules/public_member_api_docs.dart
index a4fec8c..b6fbe6e 100644
--- a/pkg/linter/lib/src/rules/public_member_api_docs.dart
+++ b/pkg/linter/lib/src/rules/public_member_api_docs.dart
@@ -12,6 +12,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Document all public members.';
@@ -25,7 +26,7 @@
     : super(name: LintNames.public_member_api_docs, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.publicMemberApiDocs;
+  DiagnosticCode get diagnosticCode => diag.publicMemberApiDocs;
 
   @override
   void registerNodeProcessors(
@@ -119,7 +120,9 @@
   @override
   void visitClassDeclaration(ClassDeclaration node) {
     if (node.declaredFragment?.element == null) return;
-    _visitMembers(node, node.name, node.members);
+    if (node.body case BlockClassBody body) {
+      _visitMembers(node, node.namePart.typeName, body.members);
+    }
   }
 
   @override
@@ -178,7 +181,7 @@
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     if (node.inPrivateMember || node.name.isPrivate) return;
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent is EnumDeclaration) return;
     if (parent != null && parent.isEffectivelyPrivate) return;
 
@@ -194,10 +197,10 @@
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    if (node.name.isPrivate) return;
+    if (node.namePart.typeName.isPrivate) return;
 
     check(node);
-    checkMethods(node.members);
+    checkMethods(node.body.members);
   }
 
   @override
@@ -206,13 +209,15 @@
     if (node.isInternal) return;
 
     check(node);
-    checkMethods(node.members);
+    checkMethods(node.body.members);
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
     if (node.declaredFragment?.element == null) return;
-    _visitMembers(node, node.name, node.members);
+    if (node.body case BlockClassBody body) {
+      _visitMembers(node, node.primaryConstructor.typeName, body.members);
+    }
   }
 
   @override
@@ -245,7 +250,7 @@
 
   @override
   void visitMixinDeclaration(MixinDeclaration node) {
-    _visitMembers(node, node.name, node.members);
+    _visitMembers(node, node.name, node.body.members);
   }
 
   @override
diff --git a/pkg/linter/lib/src/rules/recursive_getters.dart b/pkg/linter/lib/src/rules/recursive_getters.dart
index 79770e5..e16261f 100644
--- a/pkg/linter/lib/src/rules/recursive_getters.dart
+++ b/pkg/linter/lib/src/rules/recursive_getters.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Property getter recursively returns itself.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.recursive_getters, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.recursiveGetters;
+  DiagnosticCode get diagnosticCode => diag.recursiveGetters;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/remove_deprecations_in_breaking_version.dart b/pkg/linter/lib/src/rules/remove_deprecations_in_breaking_version.dart
index 967b933..5454675 100644
--- a/pkg/linter/lib/src/rules/remove_deprecations_in_breaking_version.dart
+++ b/pkg/linter/lib/src/rules/remove_deprecations_in_breaking_version.dart
@@ -12,6 +12,7 @@
 import 'package:pub_semver/pub_semver.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Deprecation in major version.';
 
@@ -31,7 +32,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.removeDeprecationsInBreakingVersions;
+      diag.removeDeprecationsInBreakingVersions;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/require_trailing_commas.dart b/pkg/linter/lib/src/rules/require_trailing_commas.dart
index 50993f9..abc71be 100644
--- a/pkg/linter/lib/src/rules/require_trailing_commas.dart
+++ b/pkg/linter/lib/src/rules/require_trailing_commas.dart
@@ -13,6 +13,7 @@
 import 'package:pub_semver/pub_semver.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Use trailing commas for all parameter lists and argument lists.';
@@ -25,7 +26,7 @@
     : super(name: LintNames.require_trailing_commas, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.requireTrailingCommas;
+  DiagnosticCode get diagnosticCode => diag.requireTrailingCommas;
 
   @override
   void registerNodeProcessors(
@@ -92,6 +93,13 @@
   @override
   void visitFormalParameterList(FormalParameterList node) {
     super.visitFormalParameterList(node);
+
+    if (node.parent case PrimaryConstructorDeclaration primary) {
+      if (primary.parent is ExtensionTypeDeclaration) {
+        return;
+      }
+    }
+
     if (node.parameters.isEmpty) return;
     _checkTrailingComma(
       openingToken: node.leftParenthesis,
diff --git a/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart b/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart
index 25a260a..5dbc8ea 100644
--- a/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart
+++ b/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 const _desc = r'`SizedBox` for whitespace.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.sized_box_for_whitespace, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.sizedBoxForWhitespace;
+  DiagnosticCode get diagnosticCode => diag.sizedBoxForWhitespace;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart b/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart
index e228d84..bd7b0b0 100644
--- a/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart
+++ b/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 class SizedBoxShrinkExpand extends AnalysisRule {
@@ -20,7 +21,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.sizedBoxShrinkExpand;
+  DiagnosticCode get diagnosticCode => diag.sizedBoxShrinkExpand;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/slash_for_doc_comments.dart b/pkg/linter/lib/src/rules/slash_for_doc_comments.dart
index 98a2409..1a8f7f3 100644
--- a/pkg/linter/lib/src/rules/slash_for_doc_comments.dart
+++ b/pkg/linter/lib/src/rules/slash_for_doc_comments.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Prefer using `///` for doc comments.';
 
@@ -30,7 +31,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.slashForDocComments;
+  DiagnosticCode get diagnosticCode => diag.slashForDocComments;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/sort_child_properties_last.dart b/pkg/linter/lib/src/rules/sort_child_properties_last.dart
index 95f0949..1f898e0 100644
--- a/pkg/linter/lib/src/rules/sort_child_properties_last.dart
+++ b/pkg/linter/lib/src/rules/sort_child_properties_last.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 const _desc = r'Sort child properties last in widget instance creations.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.sort_child_properties_last, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.sortChildPropertiesLast;
+  DiagnosticCode get diagnosticCode => diag.sortChildPropertiesLast;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/sort_constructors_first.dart b/pkg/linter/lib/src/rules/sort_constructors_first.dart
index 3cb2648..1f96aed 100644
--- a/pkg/linter/lib/src/rules/sort_constructors_first.dart
+++ b/pkg/linter/lib/src/rules/sort_constructors_first.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Sort constructor declarations before other members.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.sort_constructors_first, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.sortConstructorsFirst;
+  DiagnosticCode get diagnosticCode => diag.sortConstructorsFirst;
 
   @override
   void registerNodeProcessors(
@@ -43,7 +44,8 @@
     for (var member in members) {
       if (member is ConstructorDeclaration) {
         if (other) {
-          rule.reportAtNode(member.returnType);
+          // TODO(scheglov): support primary constructors
+          rule.reportAtNode(member.typeName);
         }
       } else {
         other = true;
@@ -53,16 +55,20 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    check(node.members);
+    if (node.body case BlockClassBody body) {
+      check(body.members);
+    }
   }
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    check(node.members);
+    check(node.body.members);
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    check(node.members);
+    if (node.body case BlockClassBody body) {
+      check(body.members);
+    }
   }
 }
diff --git a/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart b/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart
index defd6b4..fbd9b31 100644
--- a/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart
+++ b/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Sort unnamed constructor declarations first.';
 
@@ -21,8 +22,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.sortUnnamedConstructorsFirst;
+  DiagnosticCode get diagnosticCode => diag.sortUnnamedConstructorsFirst;
 
   @override
   void registerNodeProcessors(
@@ -48,7 +48,8 @@
       if (member is ConstructorDeclaration) {
         if (member.name == null) {
           if (seenConstructor) {
-            rule.reportAtNode(member.returnType);
+            // TODO(scheglov): support primary constructors
+            rule.reportAtNode(member.typeName);
           }
         } else {
           seenConstructor = true;
@@ -59,17 +60,21 @@
 
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    check(node.members);
+    if (node.body case BlockClassBody body) {
+      check(body.members);
+    }
   }
 
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
-    check(node.members);
+    check(node.body.members);
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
-    if (node.representation.constructorName == null) return;
-    check(node.members);
+    if (node.primaryConstructor.constructorName == null) return;
+    if (node.body case BlockClassBody body) {
+      check(body.members);
+    }
   }
 }
diff --git a/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart b/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart
index bf2f109..8a4a203 100644
--- a/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart
+++ b/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/obvious_types.dart';
 
 const _desc = r'Specify non-obvious type annotations for local variables.';
@@ -25,8 +26,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.specifyNonobviousLocalVariableTypes;
+  DiagnosticCode get diagnosticCode => diag.specifyNonobviousLocalVariableTypes;
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/specify_nonobvious_property_types.dart b/pkg/linter/lib/src/rules/specify_nonobvious_property_types.dart
index f2c7ff5..7bc35e1 100644
--- a/pkg/linter/lib/src/rules/specify_nonobvious_property_types.dart
+++ b/pkg/linter/lib/src/rules/specify_nonobvious_property_types.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/obvious_types.dart';
 
 const _desc =
@@ -26,8 +27,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.specifyNonobviousPropertyTypes;
+  DiagnosticCode get diagnosticCode => diag.specifyNonobviousPropertyTypes;
 
   @override
   List<String> get incompatibleRules => const [];
diff --git a/pkg/linter/lib/src/rules/strict_top_level_inference.dart b/pkg/linter/lib/src/rules/strict_top_level_inference.dart
index 193384c..5b707f2 100644
--- a/pkg/linter/lib/src/rules/strict_top_level_inference.dart
+++ b/pkg/linter/lib/src/rules/strict_top_level_inference.dart
@@ -16,6 +16,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Specify type annotations.';
@@ -26,9 +27,9 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.strictTopLevelInferenceAddType,
-    LinterLintCode.strictTopLevelInferenceReplaceKeyword,
-    LinterLintCode.strictTopLevelInferenceSplitToTypes,
+    diag.strictTopLevelInferenceAddType,
+    diag.strictTopLevelInferenceReplaceKeyword,
+    diag.strictTopLevelInferenceSplitToTypes,
   ];
 
   @override
@@ -124,7 +125,7 @@
         if (overriddenMember == null) {
           rule.reportAtToken(
             variable.name,
-            diagnosticCode: LinterLintCode.strictTopLevelInferenceSplitToTypes,
+            diagnosticCode: diag.strictTopLevelInferenceSplitToTypes,
           );
         }
       }
@@ -184,7 +185,7 @@
     if (!_isOverride(node, element)) {
       rule.reportAtToken(
         node.name,
-        diagnosticCode: LinterLintCode.strictTopLevelInferenceAddType,
+        diagnosticCode: diag.strictTopLevelInferenceAddType,
       );
     }
   }
@@ -207,7 +208,7 @@
       if (node.returnType == null) {
         rule.reportAtToken(
           node.name,
-          diagnosticCode: LinterLintCode.strictTopLevelInferenceAddType,
+          diagnosticCode: diag.strictTopLevelInferenceAddType,
         );
       }
       if (node.parameters case var parameters?) {
@@ -240,7 +241,7 @@
     if (!_isOverride(node, element)) {
       rule.reportAtToken(
         node.name,
-        diagnosticCode: LinterLintCode.strictTopLevelInferenceAddType,
+        diagnosticCode: diag.strictTopLevelInferenceAddType,
       );
     }
   }
@@ -258,13 +259,13 @@
     if (keyword == null || keyword.type == Keyword.FINAL) {
       rule.reportAtToken(
         errorToken,
-        diagnosticCode: LinterLintCode.strictTopLevelInferenceAddType,
+        diagnosticCode: diag.strictTopLevelInferenceAddType,
       );
     } else if (keyword.type == Keyword.VAR) {
       rule.reportAtToken(
         errorToken,
         arguments: [keyword.lexeme],
-        diagnosticCode: LinterLintCode.strictTopLevelInferenceReplaceKeyword,
+        diagnosticCode: diag.strictTopLevelInferenceReplaceKeyword,
       );
     }
   }
diff --git a/pkg/linter/lib/src/rules/super_goes_last.dart b/pkg/linter/lib/src/rules/super_goes_last.dart
index 43c6033..aa410e2 100644
--- a/pkg/linter/lib/src/rules/super_goes_last.dart
+++ b/pkg/linter/lib/src/rules/super_goes_last.dart
@@ -4,21 +4,14 @@
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
 import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
 
 const _desc =
     r'Place the `super` call last in a constructor initialization list.';
 
-class SuperGoesLast extends AnalysisRule {
-  SuperGoesLast()
-    : super(
-        name: LintNames.super_goes_last,
-        description: _desc,
-        state: RuleState.removed(since: dart3),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final superGoesLast = RemovedAnalysisRule(
+  name: LintNames.super_goes_last,
+  description: _desc,
+  since: dart3,
+);
diff --git a/pkg/linter/lib/src/rules/switch_on_type.dart b/pkg/linter/lib/src/rules/switch_on_type.dart
index b19eafe..450ce89 100644
--- a/pkg/linter/lib/src/rules/switch_on_type.dart
+++ b/pkg/linter/lib/src/rules/switch_on_type.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = "Avoid switch statements on a 'Type'.";
 
@@ -23,7 +24,7 @@
   SwitchOnType() : super(name: LintNames.switch_on_type, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.switchOnType;
+  DiagnosticCode get diagnosticCode => diag.switchOnType;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/test_types_in_equals.dart b/pkg/linter/lib/src/rules/test_types_in_equals.dart
index 628d622..5b7d978 100644
--- a/pkg/linter/lib/src/rules/test_types_in_equals.dart
+++ b/pkg/linter/lib/src/rules/test_types_in_equals.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Test type of argument in `operator ==(Object other)`.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.test_types_in_equals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.testTypesInEquals;
+  DiagnosticCode get diagnosticCode => diag.testTypesInEquals;
 
   @override
   void registerNodeProcessors(
@@ -54,9 +55,9 @@
   String _getTypeName(MethodDeclaration method) {
     var parent = method.parent;
     if (parent is ClassDeclaration) {
-      return parent.name.lexeme;
+      return parent.namePart.typeName.lexeme;
     } else if (parent is EnumDeclaration) {
-      return parent.name.lexeme;
+      return parent.namePart.typeName.lexeme;
     } else if (parent is MixinDeclaration) {
       return parent.name.lexeme;
     } else if (parent is ExtensionDeclaration) {
diff --git a/pkg/linter/lib/src/rules/throw_in_finally.dart b/pkg/linter/lib/src/rules/throw_in_finally.dart
index 28c24f2..826a390 100644
--- a/pkg/linter/lib/src/rules/throw_in_finally.dart
+++ b/pkg/linter/lib/src/rules/throw_in_finally.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../rules/control_flow_in_finally.dart';
 
 const _desc = r'Avoid `throw` in `finally` block.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.throw_in_finally, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.throwInFinally;
+  DiagnosticCode get diagnosticCode => diag.throwInFinally;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart b/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart
index 7731e22..2930dc4 100644
--- a/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart
+++ b/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Tighten type of initializing formal.';
 
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.tightenTypeOfInitializingFormals;
+  DiagnosticCode get diagnosticCode => diag.tightenTypeOfInitializingFormals;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/type_annotate_public_apis.dart b/pkg/linter/lib/src/rules/type_annotate_public_apis.dart
index 443e4aa..816e01b 100644
--- a/pkg/linter/lib/src/rules/type_annotate_public_apis.dart
+++ b/pkg/linter/lib/src/rules/type_annotate_public_apis.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/ascii_utils.dart';
 
@@ -21,7 +22,7 @@
     : super(name: LintNames.type_annotate_public_apis, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.typeAnnotatePublicApis;
+  DiagnosticCode get diagnosticCode => diag.typeAnnotatePublicApis;
 
   @override
   List<String> get incompatibleRules => const ['omit_obvious_property_types'];
diff --git a/pkg/linter/lib/src/rules/type_init_formals.dart b/pkg/linter/lib/src/rules/type_init_formals.dart
index b5b38ed..b189d24 100644
--- a/pkg/linter/lib/src/rules/type_init_formals.dart
+++ b/pkg/linter/lib/src/rules/type_init_formals.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = "Don't type annotate initializing formals.";
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.type_init_formals, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.typeInitFormals;
+  DiagnosticCode get diagnosticCode => diag.typeInitFormals;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart b/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart
index add24c6..ace850e 100644
--- a/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart
+++ b/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't use constant patterns with type literals.";
 
@@ -21,8 +22,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.typeLiteralInConstantPattern;
+  DiagnosticCode get diagnosticCode => diag.typeLiteralInConstantPattern;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unawaited_futures.dart b/pkg/linter/lib/src/rules/unawaited_futures.dart
index e70e7f6..75261f7 100644
--- a/pkg/linter/lib/src/rules/unawaited_futures.dart
+++ b/pkg/linter/lib/src/rules/unawaited_futures.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/unused_futures.dart';
 
 const _desc =
@@ -22,7 +23,7 @@
     : super(name: LintNames.unawaited_futures, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unawaitedFutures;
+  DiagnosticCode get diagnosticCode => diag.unawaitedFutures;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart b/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart
index 69bf073..0325a1e 100644
--- a/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart
+++ b/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart
@@ -11,6 +11,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Use of angle brackets in a doc comment is treated as HTML by '
@@ -126,8 +127,7 @@
     : super(name: LintNames.unintended_html_in_doc_comment, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unintendedHtmlInDocComment;
+  DiagnosticCode get diagnosticCode => diag.unintendedHtmlInDocComment;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_async.dart b/pkg/linter/lib/src/rules/unnecessary_async.dart
index f578f26..4e0e5a0 100644
--- a/pkg/linter/lib/src/rules/unnecessary_async.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_async.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'No await no async.';
 
@@ -26,7 +27,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryAsync;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryAsync;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart b/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart
index b8ca351..2db0d1a 100644
--- a/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Unnecessary `await` keyword in return.';
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.unnecessary_await_in_return, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryAwaitInReturn;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryAwaitInReturn;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart b/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart
index 8f97fe8..618428e 100644
--- a/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/dart/ast/token.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid using braces in interpolation when not needed.';
 
@@ -28,8 +29,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryBraceInStringInterps;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryBraceInStringInterps;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_breaks.dart b/pkg/linter/lib/src/rules/unnecessary_breaks.dart
index dbf6831..4d8ce40 100644
--- a/pkg/linter/lib/src/rules/unnecessary_breaks.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_breaks.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't use explicit `break`s when a break is implied.";
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.unnecessary_breaks, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryBreaks;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryBreaks;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_const.dart b/pkg/linter/lib/src/rules/unnecessary_const.dart
index d4805ed..2f910c9 100644
--- a/pkg/linter/lib/src/rules/unnecessary_const.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_const.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid `const` keyword.';
 
@@ -22,7 +23,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryConst;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryConst;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart b/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart
index a6c86b0..f418bbc 100644
--- a/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Unnecessary `.new` constructor name.';
 
@@ -19,8 +20,7 @@
     : super(name: LintNames.unnecessary_constructor_name, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryConstructorName;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryConstructorName;
 
   @override
   void registerNodeProcessors(
@@ -29,7 +29,7 @@
   ) {
     var visitor = _Visitor(this);
     registry.addConstructorDeclaration(this, visitor);
-    registry.addRepresentationConstructorName(this, visitor);
+    registry.addPrimaryConstructorName(this, visitor);
     registry.addInstanceCreationExpression(this, visitor);
   }
 }
@@ -41,9 +41,9 @@
 
   @override
   void visitConstructorDeclaration(ConstructorDeclaration node) {
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent is ExtensionTypeDeclaration &&
-        parent.representation.constructorName == null) {
+        parent.primaryConstructor.constructorName == null) {
       return;
     }
 
@@ -56,7 +56,7 @@
   }
 
   @override
-  void visitRepresentationConstructorName(RepresentationConstructorName node) {
+  void visitPrimaryConstructorName(PrimaryConstructorName node) {
     _check(node.name);
   }
 
diff --git a/pkg/linter/lib/src/rules/unnecessary_final.dart b/pkg/linter/lib/src/rules/unnecessary_final.dart
index f42f749..c98f112 100644
--- a/pkg/linter/lib/src/rules/unnecessary_final.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_final.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = "Don't use `final` for local variables.";
@@ -21,8 +22,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.unnecessaryFinalWithType,
-    LinterLintCode.unnecessaryFinalWithoutType,
+    diag.unnecessaryFinalWithType,
+    diag.unnecessaryFinalWithoutType,
   ];
 
   @override
@@ -52,8 +53,8 @@
   _Visitor(this.rule);
 
   DiagnosticCode getErrorCode(Object? type) => type == null
-      ? LinterLintCode.unnecessaryFinalWithoutType
-      : LinterLintCode.unnecessaryFinalWithType;
+      ? diag.unnecessaryFinalWithoutType
+      : diag.unnecessaryFinalWithType;
 
   (Token?, AstNode?) getParameterDetails(FormalParameter node) {
     var parameter = node is DefaultFormalParameter ? node.parameter : node;
@@ -110,7 +111,7 @@
       if (keyword.isFinal) {
         rule.reportAtToken(
           keyword,
-          diagnosticCode: LinterLintCode.unnecessaryFinalWithoutType,
+          diagnosticCode: diag.unnecessaryFinalWithoutType,
         );
       }
     }
diff --git a/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart b/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart
index 1f2765e..a2d5a9a 100644
--- a/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart
@@ -11,6 +11,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -21,7 +22,7 @@
     : super(name: LintNames.unnecessary_getters_setters, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryGettersSetters;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryGettersSetters;
 
   @override
   void registerNodeProcessors(
@@ -43,14 +44,18 @@
   void visitClassDeclaration(ClassDeclaration node) {
     if (node.isAugmentation) return;
 
-    _check(node.members);
+    if (node.body case BlockClassBody body) {
+      _check(body.members);
+    }
   }
 
   @override
   void visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
     if (node.isAugmentation) return;
 
-    _check(node.members);
+    if (node.body case BlockClassBody body) {
+      _check(body.members);
+    }
   }
 
   void _check(NodeList<ClassMember> members) {
diff --git a/pkg/linter/lib/src/rules/unnecessary_ignore.dart b/pkg/linter/lib/src/rules/unnecessary_ignore.dart
index e7a7acf..f30611f 100644
--- a/pkg/linter/lib/src/rules/unnecessary_ignore.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_ignore.dart
@@ -7,7 +7,7 @@
 // ignore: implementation_imports
 import 'package:analyzer/src/error/ignore_validator.dart';
 
-import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't ignore a diagnostic code that is not produced.";
 
@@ -16,22 +16,20 @@
     // Register the unnecessary_ignore lint codes with the analyzer's validator.
     // We do this here to avoid having to introduce a dependency from the analyzer
     // on the linter.
-    IgnoreValidator.unnecessaryIgnoreFileLintCode =
-        LinterLintCode.unnecessaryIgnoreFile;
-    IgnoreValidator.unnecessaryIgnoreLocationLintCode =
-        LinterLintCode.unnecessaryIgnore;
+    IgnoreValidator.unnecessaryIgnoreFileLintCode = diag.unnecessaryIgnoreFile;
+    IgnoreValidator.unnecessaryIgnoreLocationLintCode = diag.unnecessaryIgnore;
     IgnoreValidator.unnecessaryIgnoreNameFileLintCode =
-        LinterLintCode.unnecessaryIgnoreNameFile;
+        diag.unnecessaryIgnoreNameFile;
     IgnoreValidator.unnecessaryIgnoreNameLocationLintCode =
-        LinterLintCode.unnecessaryIgnoreName;
+        diag.unnecessaryIgnoreName;
   }
 
   @override
   List<DiagnosticCode> get diagnosticCodes => const [
-    LinterLintCode.unnecessaryIgnore,
-    LinterLintCode.unnecessaryIgnoreFile,
-    LinterLintCode.unnecessaryIgnoreName,
-    LinterLintCode.unnecessaryIgnoreNameFile,
+    diag.unnecessaryIgnore,
+    diag.unnecessaryIgnoreFile,
+    diag.unnecessaryIgnoreName,
+    diag.unnecessaryIgnoreNameFile,
   ];
 
   /// Note that there is intentionally no registration logic as there is no visiting or
diff --git a/pkg/linter/lib/src/rules/unnecessary_lambdas.dart b/pkg/linter/lib/src/rules/unnecessary_lambdas.dart
index 05ee7f7..644f6e9 100644
--- a/pkg/linter/lib/src/rules/unnecessary_lambdas.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_lambdas.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/dart_type_utilities.dart';
 
@@ -26,7 +27,7 @@
     : super(name: LintNames.unnecessary_lambdas, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryLambdas;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryLambdas;
 
   @override
   void registerNodeProcessors(
@@ -247,8 +248,8 @@
 extension on Element? {
   /// Returns whether this is a `final` variable or property and not `late`.
   bool get isFinal => switch (this) {
-    PropertyAccessorElement(:var isSynthetic, :var variable) =>
-      isSynthetic && variable.isFinal && !variable.isLate,
+    PropertyAccessorElement(:var isOriginVariable, :var variable) =>
+      isOriginVariable && variable.isFinal && !variable.isLate,
     VariableElement(:var isLate, :var isFinal) => isFinal && !isLate,
     // TODO(pq): [element model] this preserves existing v1 semantics but looks fishy
     _ => true,
diff --git a/pkg/linter/lib/src/rules/unnecessary_late.dart b/pkg/linter/lib/src/rules/unnecessary_late.dart
index 28ae33f..8dc4f79 100644
--- a/pkg/linter/lib/src/rules/unnecessary_late.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_late.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't specify the `late` modifier when it is not needed.";
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.unnecessary_late, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryLate;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryLate;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_library_directive.dart b/pkg/linter/lib/src/rules/unnecessary_library_directive.dart
index 78f321d..9884d3c 100644
--- a/pkg/linter/lib/src/rules/unnecessary_library_directive.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_library_directive.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     'Avoid library directives unless they have documentation comments or '
@@ -20,8 +21,7 @@
     : super(name: LintNames.unnecessary_library_directive, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryLibraryDirective;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryLibraryDirective;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_library_name.dart b/pkg/linter/lib/src/rules/unnecessary_library_name.dart
index ba1151b..9751281 100644
--- a/pkg/linter/lib/src/rules/unnecessary_library_name.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_library_name.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't have a library name in a `library` declaration.";
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.unnecessary_library_name, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryLibraryName;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryLibraryName;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_new.dart b/pkg/linter/lib/src/rules/unnecessary_new.dart
index a51fa41..1bd2da6 100644
--- a/pkg/linter/lib/src/rules/unnecessary_new.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_new.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Unnecessary new keyword.';
 
@@ -21,7 +22,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryNew;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryNew;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart b/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart
index 0f0f57d..dd96b9b 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid `null` in `null`-aware assignment.';
@@ -24,8 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryNullAwareAssignments;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryNullAwareAssignments;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart b/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart
index 9972827..8a27bdf 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Unnecessary null aware operator on extension on a nullable type.';
@@ -25,7 +26,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryNullAwareOperatorOnExtensionOnNullable;
+      diag.unnecessaryNullAwareOperatorOnExtensionOnNullable;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_checks.dart b/pkg/linter/lib/src/rules/unnecessary_null_checks.dart
index 6a0f66f..04f479f 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_checks.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_checks.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Unnecessary `null` checks.';
 
@@ -147,7 +148,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryNullChecks;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryNullChecks;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart b/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart
index 5af2c8f..1a7c34f 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Avoid using `null` in `??` operators.';
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryNullInIfNullOperators;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryNullInIfNullOperators;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart b/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart
index e949d5b..58a6006 100644
--- a/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Use a non-nullable type for a final variable initialized '
@@ -26,7 +27,7 @@
 
   @override
   DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryNullableForFinalVariableDeclarations;
+      diag.unnecessaryNullableForFinalVariableDeclarations;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_overrides.dart b/pkg/linter/lib/src/rules/unnecessary_overrides.dart
index 6843268..73224ed 100644
--- a/pkg/linter/lib/src/rules/unnecessary_overrides.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_overrides.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/dart_type_utilities.dart';
 
@@ -23,7 +24,7 @@
     : super(name: LintNames.unnecessary_overrides, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryOverrides;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryOverrides;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart b/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart
index f126a01..9429bfb 100644
--- a/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Unnecessary parentheses can be removed.';
@@ -23,7 +24,7 @@
     : super(name: LintNames.unnecessary_parenthesis, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryParenthesis;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryParenthesis;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart b/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart
index b4c0479..9b0cd3e 100644
--- a/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Unnecessary raw string.';
 
@@ -18,7 +19,7 @@
     : super(name: LintNames.unnecessary_raw_strings, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryRawStrings;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryRawStrings;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_statements.dart b/pkg/linter/lib/src/rules/unnecessary_statements.dart
index a9a34f4..94ace08 100644
--- a/pkg/linter/lib/src/rules/unnecessary_statements.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_statements.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Avoid using unnecessary statements.';
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.unnecessary_statements, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryStatements;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryStatements;
 
   @override
   void registerNodeProcessors(
@@ -130,7 +131,7 @@
     // Allow getters; getters with side effects were the main cause of false
     // positives.
     var element = node.identifier.element;
-    if (element is GetterElement && !element.isSynthetic) {
+    if (element is GetterElement && element.isOriginDeclaration) {
       return;
     }
 
@@ -151,7 +152,7 @@
     // Allow getters; previously getters with side effects were the main cause
     // of false positives.
     var element = node.propertyName.element;
-    if (element is GetterElement && !element.isSynthetic) {
+    if (element is GetterElement && element.isOriginDeclaration) {
       return;
     }
 
@@ -168,7 +169,7 @@
     // Allow getter (in this case with an implicit `this.`); previously, getters
     // with side effects were the main cause of false positives.
     var element = node.element;
-    if (element is GetterElement && !element.isSynthetic) {
+    if (element is GetterElement && element.isOriginDeclaration) {
       return;
     }
 
diff --git a/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart b/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
index 3f7762f..5c1a538 100644
--- a/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Remove unnecessary backslashes in strings.';
 
@@ -22,7 +23,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryStringEscapes;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryStringEscapes;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart b/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart
index 50d1d34..1221b39 100644
--- a/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Unnecessary string interpolation.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryStringInterpolations;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryStringInterpolations;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_this.dart b/pkg/linter/lib/src/rules/unnecessary_this.dart
index d10a34f9..c11d4af 100644
--- a/pkg/linter/lib/src/rules/unnecessary_this.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_this.dart
@@ -12,6 +12,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../util/scope.dart';
 
 const _desc = r"Don't access members with `this` unless avoiding shadowing.";
@@ -21,7 +22,7 @@
     : super(name: LintNames.unnecessary_this, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryThis;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryThis;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart b/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart
index 2c101f3..b4f8a2c 100644
--- a/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Unnecessary `toList()` in spreads.';
@@ -19,8 +20,7 @@
     : super(name: LintNames.unnecessary_to_list_in_spreads, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.unnecessaryToListInSpreads;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryToListInSpreads;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_unawaited.dart b/pkg/linter/lib/src/rules/unnecessary_unawaited.dart
index 8034e5d..fd09710 100644
--- a/pkg/linter/lib/src/rules/unnecessary_unawaited.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_unawaited.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r"Unnecessary use of 'unawaited'.";
@@ -19,7 +20,7 @@
     : super(name: LintNames.unnecessary_unawaited, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryUnawaited;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryUnawaited;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/unnecessary_underscores.dart b/pkg/linter/lib/src/rules/unnecessary_underscores.dart
index 4070537..4f92732 100644
--- a/pkg/linter/lib/src/rules/unnecessary_underscores.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_underscores.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/utilities/extensions/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/ascii_utils.dart';
 
 const _desc = r'Unnecessary underscores can be removed.';
@@ -23,7 +24,7 @@
     : super(name: LintNames.unnecessary_underscores, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unnecessaryUnderscores;
+  DiagnosticCode get diagnosticCode => diag.unnecessaryUnderscores;
 
   @override
   void registerNodeProcessors(
@@ -55,7 +56,13 @@
 
   @override
   void visitFormalParameterList(FormalParameterList node) {
-    late Set<Element> referencedElements = collectReferences(node.parent);
+    late Set<Element> referencedElements = {
+      ...collectReferences(node.parent),
+      if (node.parent?.parent case FunctionDeclaration(
+        :var documentationComment,
+      ))
+        ...collectReferences(documentationComment),
+    };
 
     for (var parameter in node.parameters) {
       var parameterName = parameter.name;
diff --git a/pkg/linter/lib/src/rules/unreachable_from_main.dart b/pkg/linter/lib/src/rules/unreachable_from_main.dart
index 8011236..d65d62c 100644
--- a/pkg/linter/lib/src/rules/unreachable_from_main.dart
+++ b/pkg/linter/lib/src/rules/unreachable_from_main.dart
@@ -17,6 +17,7 @@
 import 'package:pub_semver/pub_semver.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = 'Unreachable top-level members in executable libraries.';
@@ -30,7 +31,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unreachableFromMain;
+  DiagnosticCode get diagnosticCode => diag.unreachableFromMain;
 
   @override
   void registerNodeProcessors(
@@ -62,23 +63,30 @@
           continue;
         }
         if (declaration is ClassDeclaration) {
-          _addMembers(
-            containerElement: declaration.declaredFragment?.element,
-            members: declaration.members,
-          );
+          if (declaration.body case BlockClassBody body) {
+            _addMembers(
+              containerElement: declaration.declaredFragment?.element,
+              members: body.members,
+            );
+          }
         } else if (declaration is EnumDeclaration) {
           _addMembers(
             containerElement: declaration.declaredFragment?.element,
-            members: declaration.members,
+            members: declaration.body.members,
           );
         } else if (declaration is ExtensionDeclaration) {
-          _addMembers(containerElement: null, members: declaration.members);
+          _addMembers(
+            containerElement: null,
+            members: declaration.body.members,
+          );
         } else if (declaration is ExtensionTypeDeclaration) {
-          _addMembers(containerElement: null, members: declaration.members);
+          if (declaration.body case BlockClassBody body) {
+            _addMembers(containerElement: null, members: body.members);
+          }
         } else if (declaration is MixinDeclaration) {
           _addMembers(
             containerElement: declaration.declaredFragment?.element,
-            members: declaration.members,
+            members: declaration.body.members,
           );
         }
       }
@@ -110,7 +118,9 @@
       switch (member) {
         case ConstructorDeclaration():
           var e = member.declaredFragment?.element;
-          if (e != null && e.isPublic && member.parent is! EnumDeclaration) {
+          if (e != null &&
+              e.isPublic &&
+              member.parent?.parent is! EnumDeclaration) {
             declarations.add(member);
           }
         case FieldDeclaration():
@@ -137,6 +147,9 @@
               declarations.add(member);
             }
           }
+        case PrimaryConstructorBody():
+          // TODO(scheglov): Handle this case.
+          throw UnimplementedError();
       }
     }
   }
@@ -180,9 +193,10 @@
     var element = node.declaredFragment?.element;
 
     if (element != null) {
-      var hasConstructors = node.members.any(
-        (e) => e is ConstructorDeclaration,
-      );
+      var body = node.body;
+      var hasConstructors =
+          body is BlockClassBody &&
+          body.members.any((e) => e is ConstructorDeclaration);
       if (!hasConstructors) {
         // The default constructor will have an implicit super-initializer to
         // the super-type's unnamed constructor.
@@ -227,7 +241,7 @@
       (e) => e is SuperConstructorInvocation,
     );
     if (!hasSuperInitializer) {
-      var enclosingClass = node.parent;
+      var enclosingClass = node.parent?.parent;
       if (enclosingClass is ClassDeclaration) {
         _addDefaultSuperConstructorDeclaration(enclosingClass);
       }
@@ -531,30 +545,51 @@
     }).toList();
 
     for (var member in unusedMembers) {
-      if (member is ConstructorDeclaration) {
-        var name = member.name;
-        if (name == null) {
-          rule.reportAtNode(
-            member.returnType,
+      switch (member) {
+        case ClassDeclaration():
+          rule.reportAtToken(
+            member.namePart.typeName,
             arguments: [member.nameForError],
           );
-        } else {
-          rule.reportAtToken(name, arguments: [member.nameForError]);
-        }
-      } else if (member is NamedCompilationUnitMember) {
-        rule.reportAtToken(member.name, arguments: [member.nameForError]);
-      } else if (member is MethodDeclaration) {
-        rule.reportAtToken(member.name, arguments: [member.name.lexeme]);
-      } else if (member is VariableDeclaration) {
-        rule.reportAtToken(member.name, arguments: [member.nameForError]);
-      } else if (member is ExtensionDeclaration) {
-        var name = member.name;
-        rule.reportAtToken(
-          name ?? member.extensionKeyword,
-          arguments: [name?.lexeme ?? '<unnamed>'],
-        );
-      } else {
-        throw UnimplementedError('(${member.runtimeType}) $member');
+        case ConstructorDeclaration():
+          var name = member.name;
+          if (name == null) {
+            rule.reportAtNode(
+              // TODO(scheglov): support primary constructors
+              member.typeName,
+              arguments: [member.nameForError],
+            );
+          } else {
+            rule.reportAtToken(name, arguments: [member.nameForError]);
+          }
+        case EnumDeclaration():
+          rule.reportAtToken(
+            member.namePart.typeName,
+            arguments: [member.nameForError],
+          );
+        case ExtensionDeclaration():
+          var name = member.name;
+          rule.reportAtToken(
+            name ?? member.extensionKeyword,
+            arguments: [name?.lexeme ?? '<unnamed>'],
+          );
+        case ExtensionTypeDeclaration():
+          rule.reportAtToken(
+            member.primaryConstructor.typeName,
+            arguments: [member.nameForError],
+          );
+        case FunctionDeclaration():
+          rule.reportAtToken(member.name, arguments: [member.name.lexeme]);
+        case MethodDeclaration():
+          rule.reportAtToken(member.name, arguments: [member.name.lexeme]);
+        case MixinDeclaration():
+          rule.reportAtToken(member.name, arguments: [member.name.lexeme]);
+        case TypeAlias():
+          rule.reportAtToken(member.name, arguments: [member.name.lexeme]);
+        case VariableDeclaration():
+          rule.reportAtToken(member.name, arguments: [member.nameForError]);
+        default:
+          throw UnimplementedError('(${member.runtimeType}) $member');
       }
     }
   }
@@ -669,24 +704,36 @@
   String get nameForError {
     // TODO(srawlins): Move this to analyzer when other uses are found.
     var self = this;
-    if (self is ConstructorDeclaration) {
-      var name = self.name?.lexeme ?? 'new';
-      return '${self.returnType.name}.$name';
-    } else if (self is EnumConstantDeclaration) {
-      return self.name.lexeme;
-    } else if (self is ExtensionDeclaration) {
-      var name = self.name;
-      return name?.lexeme ?? 'the unnamed extension';
-    } else if (self is MethodDeclaration) {
-      return self.name.lexeme;
-    } else if (self is NamedCompilationUnitMember) {
-      return self.name.lexeme;
-    } else if (self is VariableDeclaration) {
-      return self.name.lexeme;
+    switch (self) {
+      case ClassDeclaration():
+        return self.namePart.typeName.lexeme;
+      case ConstructorDeclaration():
+        var name = self.name?.lexeme ?? 'new';
+        // TODO(scheglov): support primary constructors
+        return '${self.typeName!.name}.$name';
+      case EnumConstantDeclaration():
+        return self.name.lexeme;
+      case EnumDeclaration():
+        return self.namePart.typeName.lexeme;
+      case ExtensionDeclaration():
+        var name = self.name;
+        return name?.lexeme ?? 'the unnamed extension';
+      case ExtensionTypeDeclaration():
+        return self.primaryConstructor.typeName.lexeme;
+      case FunctionDeclaration():
+        return self.name.lexeme;
+      case MethodDeclaration():
+        return self.name.lexeme;
+      case MixinDeclaration():
+        return self.name.lexeme;
+      case TypeAlias():
+        return self.name.lexeme;
+      case VariableDeclaration():
+        return self.name.lexeme;
+      default:
+        assert(false, 'Uncovered Declaration subtype: ${self.runtimeType}');
+        return '';
     }
-
-    assert(false, 'Uncovered Declaration subtype: ${self.runtimeType}');
-    return '';
   }
 }
 
diff --git a/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart b/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart
index b13b0ab..97ca870 100644
--- a/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart
+++ b/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/dart_type_utilities.dart';
 
 const _desc =
@@ -24,8 +25,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.unrelatedTypeEqualityChecksInExpression,
-    LinterLintCode.unrelatedTypeEqualityChecksInPattern,
+    diag.unrelatedTypeEqualityChecksInExpression,
+    diag.unrelatedTypeEqualityChecksInPattern,
   ];
 
   @override
@@ -64,7 +65,7 @@
 
     rule.reportAtToken(
       node.operator,
-      diagnosticCode: LinterLintCode.unrelatedTypeEqualityChecksInExpression,
+      diagnosticCode: diag.unrelatedTypeEqualityChecksInExpression,
       arguments: [rightType.getDisplayString(), leftType.getDisplayString()],
     );
   }
@@ -80,7 +81,7 @@
 
     rule.reportAtNode(
       node,
-      diagnosticCode: LinterLintCode.unrelatedTypeEqualityChecksInPattern,
+      diagnosticCode: diag.unrelatedTypeEqualityChecksInPattern,
       arguments: [operandType.getDisplayString(), valueType.getDisplayString()],
     );
   }
diff --git a/pkg/linter/lib/src/rules/unsafe_html.dart b/pkg/linter/lib/src/rules/unsafe_html.dart
index 770e1c5..183bbff 100644
--- a/pkg/linter/lib/src/rules/unsafe_html.dart
+++ b/pkg/linter/lib/src/rules/unsafe_html.dart
@@ -3,20 +3,12 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/analysis_rule/analysis_rule.dart';
-import 'package:analyzer/analysis_rule/rule_state.dart';
-import 'package:analyzer/error/error.dart';
 import 'package:pub_semver/pub_semver.dart';
 
 import '../analyzer.dart';
 
-class UnsafeHtml extends AnalysisRule {
-  UnsafeHtml()
-    : super(
-        name: LintNames.unsafe_html,
-        description: 'Avoid unsafe HTML APIs.',
-        state: RuleState.removed(since: Version(3, 7, 0)),
-      );
-
-  @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.removedLint;
-}
+final unsafeHtml = RemovedAnalysisRule(
+  name: LintNames.unsafe_html,
+  description: 'Avoid unsafe HTML APIs.',
+  since: Version(3, 7, 0),
+);
diff --git a/pkg/linter/lib/src/rules/unsafe_variance.dart b/pkg/linter/lib/src/rules/unsafe_variance.dart
index 3ce2b35..7397564 100644
--- a/pkg/linter/lib/src/rules/unsafe_variance.dart
+++ b/pkg/linter/lib/src/rules/unsafe_variance.dart
@@ -15,6 +15,7 @@
     show TypeParameterElementImpl;
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/variance_checker.dart';
 
 const _desc = r'Unsafe type: Has a type variable in a non-covariant position.';
@@ -28,7 +29,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.unsafeVariance;
+  DiagnosticCode get diagnosticCode => diag.unsafeVariance;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_build_context_synchronously.dart b/pkg/linter/lib/src/rules/use_build_context_synchronously.dart
index f71974b..e4c9ac2 100644
--- a/pkg/linter/lib/src/rules/use_build_context_synchronously.dart
+++ b/pkg/linter/lib/src/rules/use_build_context_synchronously.dart
@@ -17,6 +17,7 @@
 import 'package:pub_semver/pub_semver.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/flutter_utils.dart';
 
@@ -931,8 +932,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.useBuildContextSynchronouslyAsyncUse,
-    LinterLintCode.useBuildContextSynchronouslyWrongMounted,
+    diag.useBuildContextSynchronouslyAsyncUse,
+    diag.useBuildContextSynchronouslyWrongMounted,
   ];
 
   @override
@@ -1123,8 +1124,8 @@
 
       if (asyncState == AsyncState.asynchronous) {
         var errorCode = asyncStateTracker.hasUnrelatedMountedCheck
-            ? LinterLintCode.useBuildContextSynchronouslyWrongMounted
-            : LinterLintCode.useBuildContextSynchronouslyAsyncUse;
+            ? diag.useBuildContextSynchronouslyWrongMounted
+            : diag.useBuildContextSynchronouslyAsyncUse;
         rule.reportAtNode(node, diagnosticCode: errorCode);
         return;
       }
@@ -1271,7 +1272,7 @@
       if (callback == argument.expression) {
         rule.reportAtNode(
           errorNode,
-          diagnosticCode: LinterLintCode.useBuildContextSynchronouslyAsyncUse,
+          diagnosticCode: diag.useBuildContextSynchronouslyAsyncUse,
         );
       }
     }
@@ -1290,7 +1291,7 @@
           callback == positionalArguments[position]) {
         rule.reportAtNode(
           errorNode,
-          diagnosticCode: LinterLintCode.useBuildContextSynchronouslyAsyncUse,
+          diagnosticCode: diag.useBuildContextSynchronouslyAsyncUse,
         );
       }
     }
diff --git a/pkg/linter/lib/src/rules/use_colored_box.dart b/pkg/linter/lib/src/rules/use_colored_box.dart
index e1af782..21535d4 100644
--- a/pkg/linter/lib/src/rules/use_colored_box.dart
+++ b/pkg/linter/lib/src/rules/use_colored_box.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 const _desc = r'Use `ColoredBox`.';
@@ -19,7 +20,7 @@
   UseColoredBox() : super(name: LintNames.use_colored_box, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useColoredBox;
+  DiagnosticCode get diagnosticCode => diag.useColoredBox;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_decorated_box.dart b/pkg/linter/lib/src/rules/use_decorated_box.dart
index af85cf0..831d01e 100644
--- a/pkg/linter/lib/src/rules/use_decorated_box.dart
+++ b/pkg/linter/lib/src/rules/use_decorated_box.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../util/flutter_utils.dart';
 
 const _desc = r'Use `DecoratedBox`.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.use_decorated_box, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useDecoratedBox;
+  DiagnosticCode get diagnosticCode => diag.useDecoratedBox;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_enums.dart b/pkg/linter/lib/src/rules/use_enums.dart
index 738b99d..377886c 100644
--- a/pkg/linter/lib/src/rules/use_enums.dart
+++ b/pkg/linter/lib/src/rules/use_enums.dart
@@ -13,6 +13,7 @@
 
 import '../analyzer.dart';
 import '../ast.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use enums rather than classes that behave like enums.';
@@ -21,7 +22,7 @@
   UseEnums() : super(name: LintNames.use_enums, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useEnums;
+  DiagnosticCode get diagnosticCode => diag.useEnums;
 
   @override
   void registerNodeProcessors(
@@ -153,9 +154,14 @@
       return;
     }
 
+    var body = node.body;
+    if (body is! BlockClassBody) {
+      return;
+    }
+
     var candidateConstants = <VariableDeclaration>[];
 
-    for (var member in node.members) {
+    for (var member in body.members) {
       if (isHashCode(member)) return;
       if (isIndex(member)) return;
       if (isEquals(member)) return;
@@ -200,6 +206,6 @@
       return;
     }
 
-    rule.reportAtToken(node.name);
+    rule.reportAtToken(node.namePart.typeName);
   }
 }
diff --git a/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart b/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
index 94acb6d..94e16ce 100644
--- a/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
+++ b/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -24,8 +25,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useFullHexValuesForFlutterColors;
+  DiagnosticCode get diagnosticCode => diag.useFullHexValuesForFlutterColors;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart b/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart
index 4bf0767..fb5266d 100644
--- a/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart
+++ b/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use generic function type syntax for parameters.';
 
@@ -24,8 +25,7 @@
   bool get canUseParsedResult => true;
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useFunctionTypeSyntaxForParameters;
+  DiagnosticCode get diagnosticCode => diag.useFunctionTypeSyntaxForParameters;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart b/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart
index acd0fb0..8e12617 100644
--- a/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart
+++ b/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use `??` operators to convert `null`s to `bool`s.';
 
@@ -23,8 +24,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useIfNullToConvertNullsToBools;
+  DiagnosticCode get diagnosticCode => diag.useIfNullToConvertNullsToBools;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart b/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart
index 5e629aa..d94c319 100644
--- a/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart
+++ b/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc =
     r'Prefer intValue.isOdd/isEven instead of checking the result of % 2.';
@@ -20,7 +21,7 @@
     : super(name: LintNames.use_is_even_rather_than_modulo, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useIsEvenRatherThanModulo;
+  DiagnosticCode get diagnosticCode => diag.useIsEvenRatherThanModulo;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart b/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart
index 69373dd..1913085 100644
--- a/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart
+++ b/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 import '../util/flutter_utils.dart';
 
@@ -22,8 +23,7 @@
     : super(name: LintNames.use_key_in_widget_constructors, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useKeyInWidgetConstructors;
+  DiagnosticCode get diagnosticCode => diag.useKeyInWidgetConstructors;
 
   @override
   void registerNodeProcessors(
@@ -47,8 +47,8 @@
     if (classElement != null &&
         classElement.isPublic &&
         classElement.extendsWidget &&
-        classElement.constructors.where((e) => !e.isSynthetic).isEmpty) {
-      rule.reportAtToken(node.name);
+        classElement.constructors.where((e) => e.isOriginDeclaration).isEmpty) {
+      rule.reportAtToken(node.namePart.typeName);
     }
     super.visitClassDeclaration(node);
   }
@@ -83,7 +83,8 @@
           }
           return false;
         })) {
-      var errorNode = node.name ?? node.returnType;
+      // TODO(scheglov): support primary constructors
+      var errorNode = node.name ?? node.typeName!;
       rule.reportAtOffset(errorNode.offset, errorNode.length);
     }
     super.visitConstructorDeclaration(node);
diff --git a/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart b/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart
index 21aa414..ba00e5d 100644
--- a/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart
+++ b/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart
@@ -14,6 +14,7 @@
 import 'package:collection/collection.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use late for private members with a non-nullable type.';
@@ -35,8 +36,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useLateForPrivateFieldsAndVariables;
+  DiagnosticCode get diagnosticCode => diag.useLateForPrivateFieldsAndVariables;
 
   @override
   void registerNodeProcessors(
@@ -104,9 +104,11 @@
   @override
   void visitClassDeclaration(ClassDeclaration node) {
     // See: https://dart.dev/tools/diagnostic-messages#late_final_field_with_const_constructor
-    for (var member in node.members) {
-      if (member is ConstructorDeclaration && member.constKeyword != null) {
-        return;
+    if (node.body case BlockClassBody body) {
+      for (var member in body.members) {
+        if (member is ConstructorDeclaration && member.constKeyword != null) {
+          return;
+        }
       }
     }
 
@@ -129,7 +131,7 @@
 
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
-    var parent = node.parent;
+    var parent = node.parent?.parent;
     if (parent is ExtensionTypeDeclaration && !node.isStatic) return;
     if (parent != null) {
       var parentIsPrivateExtension = _isPrivateExtension(parent);
diff --git a/pkg/linter/lib/src/rules/use_named_constants.dart b/pkg/linter/lib/src/rules/use_named_constants.dart
index 4a2635c..bd1ba1b 100644
--- a/pkg/linter/lib/src/rules/use_named_constants.dart
+++ b/pkg/linter/lib/src/rules/use_named_constants.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use predefined named constants.';
 
@@ -20,7 +21,7 @@
     : super(name: LintNames.use_named_constants, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useNamedConstants;
+  DiagnosticCode get diagnosticCode => diag.useNamedConstants;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_null_aware_elements.dart b/pkg/linter/lib/src/rules/use_null_aware_elements.dart
index f03832c..6749a50 100644
--- a/pkg/linter/lib/src/rules/use_null_aware_elements.dart
+++ b/pkg/linter/lib/src/rules/use_null_aware_elements.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -25,7 +26,7 @@
     : super(name: LintNames.use_null_aware_elements, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useNullAwareElements;
+  DiagnosticCode get diagnosticCode => diag.useNullAwareElements;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_raw_strings.dart b/pkg/linter/lib/src/rules/use_raw_strings.dart
index 1ecc4d7..985855e 100644
--- a/pkg/linter/lib/src/rules/use_raw_strings.dart
+++ b/pkg/linter/lib/src/rules/use_raw_strings.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use raw string to avoid escapes.';
 
@@ -17,7 +18,7 @@
   UseRawStrings() : super(name: LintNames.use_raw_strings, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useRawStrings;
+  DiagnosticCode get diagnosticCode => diag.useRawStrings;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart b/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart
index b2ce1f6..99eb781 100644
--- a/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart
+++ b/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc = r'Use rethrow to rethrow a caught exception.';
@@ -19,7 +20,7 @@
     : super(name: LintNames.use_rethrow_when_possible, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useRethrowWhenPossible;
+  DiagnosticCode get diagnosticCode => diag.useRethrowWhenPossible;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart b/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart
index a951dac..f6314dc 100644
--- a/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart
+++ b/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -26,8 +27,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useSettersToChangeProperties;
+  DiagnosticCode get diagnosticCode => diag.useSettersToChangeProperties;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_string_buffers.dart b/pkg/linter/lib/src/rules/use_string_buffers.dart
index c9a37db..fd8f104 100644
--- a/pkg/linter/lib/src/rules/use_string_buffers.dart
+++ b/pkg/linter/lib/src/rules/use_string_buffers.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use string buffers to compose strings.';
 
@@ -30,7 +31,7 @@
     : super(name: LintNames.use_string_buffers, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useStringBuffers;
+  DiagnosticCode get diagnosticCode => diag.useStringBuffers;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart b/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart
index 85cd942..4841377 100644
--- a/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart
+++ b/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use string in part of directives.';
 
@@ -22,8 +23,7 @@
       );
 
   @override
-  DiagnosticCode get diagnosticCode =>
-      LinterLintCode.useStringInPartOfDirectives;
+  DiagnosticCode get diagnosticCode => diag.useStringInPartOfDirectives;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_super_parameters.dart b/pkg/linter/lib/src/rules/use_super_parameters.dart
index a4b6e7e..d3ccf89 100644
--- a/pkg/linter/lib/src/rules/use_super_parameters.dart
+++ b/pkg/linter/lib/src/rules/use_super_parameters.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/utilities/extensions/string.dart'; // ignore: implementation_imports
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use super-initializer parameters where possible.';
 
@@ -37,8 +38,8 @@
 
   @override
   List<DiagnosticCode> get diagnosticCodes => [
-    LinterLintCode.useSuperParametersMultiple,
-    LinterLintCode.useSuperParametersSingle,
+    diag.useSuperParametersMultiple,
+    diag.useSuperParametersSingle,
   ];
 
   @override
@@ -254,20 +255,21 @@
 
   void _reportLint(ConstructorDeclaration node, List<String> identifiers) {
     if (identifiers.isEmpty) return;
-    var target = node.name ?? node.returnType;
+    // TODO(scheglov): support primary constructors
+    var target = node.name ?? node.typeName!;
     if (identifiers.length > 1) {
       var msg = identifiers.quotedAndCommaSeparatedWithAnd;
       rule.reportAtOffset(
         target.offset,
         target.length,
-        diagnosticCode: LinterLintCode.useSuperParametersMultiple,
+        diagnosticCode: diag.useSuperParametersMultiple,
         arguments: [msg],
       );
     } else {
       rule.reportAtOffset(
         target.offset,
         target.length,
-        diagnosticCode: LinterLintCode.useSuperParametersSingle,
+        diagnosticCode: diag.useSuperParametersSingle,
         arguments: [identifiers.first],
       );
     }
diff --git a/pkg/linter/lib/src/rules/use_test_throws_matchers.dart b/pkg/linter/lib/src/rules/use_test_throws_matchers.dart
index 4e4fd6e..6470be3 100644
--- a/pkg/linter/lib/src/rules/use_test_throws_matchers.dart
+++ b/pkg/linter/lib/src/rules/use_test_throws_matchers.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use throwsA matcher instead of fail().';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.use_test_throws_matchers, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useTestThrowsMatchers;
+  DiagnosticCode get diagnosticCode => diag.useTestThrowsMatchers;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart b/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart
index cdcddd2..ab27fb9 100644
--- a/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart
+++ b/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 import '../extensions.dart';
 
 const _desc =
@@ -29,7 +30,7 @@
     : super(name: LintNames.use_to_and_as_if_applicable, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useToAndAsIfApplicable;
+  DiagnosticCode get diagnosticCode => diag.useToAndAsIfApplicable;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/use_truncating_division.dart b/pkg/linter/lib/src/rules/use_truncating_division.dart
index 8f5f84d..2e080cd 100644
--- a/pkg/linter/lib/src/rules/use_truncating_division.dart
+++ b/pkg/linter/lib/src/rules/use_truncating_division.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use truncating division.';
 
@@ -19,7 +20,7 @@
     : super(name: LintNames.use_truncating_division, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.useTruncatingDivision;
+  DiagnosticCode get diagnosticCode => diag.useTruncatingDivision;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/valid_regexps.dart b/pkg/linter/lib/src/rules/valid_regexps.dart
index abce175..2a296aa 100644
--- a/pkg/linter/lib/src/rules/valid_regexps.dart
+++ b/pkg/linter/lib/src/rules/valid_regexps.dart
@@ -10,6 +10,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r'Use valid regular expression syntax.';
 
@@ -17,7 +18,7 @@
   ValidRegexps() : super(name: LintNames.valid_regexps, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.validRegexps;
+  DiagnosticCode get diagnosticCode => diag.validRegexps;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/rules/void_checks.dart b/pkg/linter/lib/src/rules/void_checks.dart
index 1cf4c33..10c55f5 100644
--- a/pkg/linter/lib/src/rules/void_checks.dart
+++ b/pkg/linter/lib/src/rules/void_checks.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 
 import '../analyzer.dart';
+import '../diagnostic.dart' as diag;
 
 const _desc = r"Don't assign to `void`.";
 
@@ -20,7 +21,7 @@
   VoidChecks() : super(name: LintNames.void_checks, description: _desc);
 
   @override
-  DiagnosticCode get diagnosticCode => LinterLintCode.voidChecks;
+  DiagnosticCode get diagnosticCode => diag.voidChecks;
 
   @override
   void registerNodeProcessors(
diff --git a/pkg/linter/lib/src/util/leak_detector_visitor.dart b/pkg/linter/lib/src/util/leak_detector_visitor.dart
index b49cbca..901bcbf 100644
--- a/pkg/linter/lib/src/util/leak_detector_visitor.dart
+++ b/pkg/linter/lib/src/util/leak_detector_visitor.dart
@@ -82,9 +82,10 @@
   VariableElement variableElement,
 ) {
   if (n is PostfixExpression) {
-    var operand = n.operand;
-    return operand is SimpleIdentifier &&
-        _isElementEqualToVariable(operand.element, variableElement);
+    return _isSimpleIdentifierElementEqualToVariable(
+      n.operand,
+      variableElement,
+    );
   }
   return false;
 }
@@ -198,9 +199,11 @@
   @override
   void visitAssignmentExpression(AssignmentExpression node) {
     // Being assigned another reference.
-    if (node.rightHandSide is SimpleIdentifier) {
+    var rightHandSide = node.rightHandSide;
+    if (rightHandSide is SimpleIdentifier) {
+      var assignedElement = node.writeElement;
       if (_isElementEqualToVariable(
-        node.writeElement,
+        assignedElement,
         variable.declaredFragment?.element,
       )) {
         containsValidUse = true;
@@ -213,6 +216,15 @@
         containsValidUse = true;
         return;
       }
+      // Assigned element is instance member.
+      if (assignedElement == null &&
+          _isSimpleIdentifierElementEqualToVariable(
+            rightHandSide,
+            variableElement,
+          )) {
+        containsValidUse = true;
+        return;
+      }
     }
     super.visitAssignmentExpression(node);
   }
@@ -310,8 +322,13 @@
 enum _VariableType { field, local }
 
 extension on Element? {
-  bool matches(VariableElement? requested) => switch (this) {
-    PropertyAccessorElement(:var variable) => variable == requested,
-    _ => false,
-  };
+  bool matches(VariableElement? requested) {
+    var baseElement = this?.baseElement;
+    if (baseElement is PropertyAccessorElement) {
+      return baseElement.variable == requested;
+    } else if (baseElement is FieldElement) {
+      return baseElement == requested;
+    }
+    return false;
+  }
 }
diff --git a/pkg/linter/messages.yaml b/pkg/linter/messages.yaml
index 7d1c4d0..30a3fc2 100644
--- a/pkg/linter/messages.yaml
+++ b/pkg/linter/messages.yaml
@@ -29,6 +29,7 @@
 
 LinterLintCode:
   always_declare_return_types_of_functions:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: always_declare_return_types
@@ -92,6 +93,7 @@
       typedef predicate = bool Function(Object o);
       ```
   always_declare_return_types_of_methods:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: always_declare_return_types
@@ -99,6 +101,7 @@
     correctionMessage: "Try adding a return type to the method."
     hasPublishedDocs: true
   always_put_control_body_on_new_line:
+    type: lint
     parameters: none
     problemMessage: "Statement should be on a separate line."
     correctionMessage: "Try moving the statement to a new line."
@@ -173,6 +176,7 @@
       [Dart formatter](https://dart.dev/tools/dart-format), and should not be enabled
       when the Dart formatter is used.
   always_put_required_named_parameters_first:
+    type: lint
     parameters: none
     problemMessage: "Required named parameters should be before optional named parameters."
     correctionMessage: "Try moving the required named parameter to be before any optional named parameters."
@@ -226,6 +230,7 @@
       m({@required a, b, c}) ;
       ```
   always_require_non_null_named_parameters:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -257,6 +262,7 @@
 
       NOTE: Only asserts at the start of the bodies will be taken into account.
   always_specify_types_add_type:
+    type: lint
     parameters: none
     sharedName: always_specify_types
     problemMessage: "Missing type annotation."
@@ -309,6 +315,7 @@
       }
       ```
   always_specify_types_replace_keyword:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -317,6 +324,7 @@
     correctionMessage: "Try replacing '#p0' with '#p1'."
     hasPublishedDocs: false
   always_specify_types_specify_type:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: always_specify_types
@@ -324,12 +332,14 @@
     correctionMessage: "Try specifying the type '#p0'."
     hasPublishedDocs: false
   always_specify_types_split_to_types:
+    type: lint
     parameters: none
     sharedName: always_specify_types
     problemMessage: "Missing type annotation."
     correctionMessage: "Try splitting the declaration and specify the different type annotations."
     hasPublishedDocs: false
   always_use_package_imports:
+    type: lint
     parameters: none
     problemMessage: "Use 'package:' imports for files in the 'lib' directory."
     correctionMessage: "Try converting the URI to a 'package:' URI."
@@ -395,6 +405,7 @@
       ...
       ```
   analyzer_element_model_tracking_bad:
+    type: lint
     parameters: none
     problemMessage: "Bad tracking annotation for this member."
     state:
@@ -403,6 +414,7 @@
     deprecatedDetails: "For internal use only."
     hasPublishedDocs: false
   analyzer_element_model_tracking_more_than_one:
+    type: lint
     parameters: none
     problemMessage: "There can be only one tracking annotation."
     state:
@@ -411,6 +423,7 @@
     deprecatedDetails: "For internal use only."
     hasPublishedDocs: false
   analyzer_element_model_tracking_zero:
+    type: lint
     parameters: none
     problemMessage: "No required tracking annotation."
     state:
@@ -419,6 +432,7 @@
     deprecatedDetails: "For internal use only."
     hasPublishedDocs: false
   analyzer_public_api_bad_part_directive:
+    type: lint
     parameters: none
     problemMessage: "Part directives in the analyzer public API should point to files in the analyzer public API."
     hasPublishedDocs: false
@@ -438,6 +452,7 @@
       but it may do so in the future once augmentations and enhanced parts are
       supported.
   analyzer_public_api_bad_type:
+    type: lint
     parameters:
       String types: "list of types, separated by `, `"
     problemMessage: "Element makes use of type(s) which is not part of the analyzer public API: #types."
@@ -471,6 +486,7 @@
       marking the referenced type with `@AnalyzerPublicApi(...)` is that it
       causes the members of referenced type to be checked by this lint.
   analyzer_public_api_experimental_inconsistency:
+    type: lint
     parameters:
       String types: "list of types, separated by `, `"
     problemMessage: "Element makes use of experimental type(s), but is not itself marked with `@experimental`: #types."
@@ -500,6 +516,7 @@
         public API class with a getter called `x`, then a client can
         access `T.x` via `var g = f; g = (t) { print(t.x); }`.
   analyzer_public_api_exports_non_public_name:
+    type: lint
     parameters:
       String elements: "List of elements, separated by `, `"
     problemMessage: "Export directive exports element(s) that are not part of the analyzer public API: #elements."
@@ -517,6 +534,7 @@
       marking the exported declaration with `@AnalyzerPublicApi(...)` is that it
       causes the members of the exported declaration to be checked by this lint.
   analyzer_public_api_impl_in_public_api:
+    type: lint
     parameters: none
     problemMessage: 'Declarations in the analyzer public API should not end in "Impl".'
     hasPublishedDocs: false
@@ -532,6 +550,7 @@
       so if they are either declared outside of `package:analyzer/src`, or
       marked with `@AnalyzerPublicApi(...)`, that is almost certainly a mistake.
   annotate_overrides:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The member '#p0' overrides an inherited member but isn't annotated with '@override'."
@@ -622,6 +641,7 @@
       }
       ```
   annotate_redeclares:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The member '#p0' is redeclaring but isn't annotated with '@redeclare'."
@@ -666,6 +686,7 @@
       }
       ```
   avoid_annotating_with_dynamic:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'dynamic' type annotation."
     correctionMessage: "Try removing the type 'dynamic'."
@@ -697,6 +718,7 @@
       }
       ```
   avoid_as:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -741,6 +763,7 @@
       HasScrollDirection scrollable = renderObject as dynamic;
       ```
   avoid_bool_literals_in_conditional_expressions:
+    type: lint
     parameters: none
     problemMessage: "Conditional expressions with a 'bool' literal can be simplified."
     correctionMessage: "Try rewriting the expression to use either '&&' or '||'."
@@ -767,6 +790,7 @@
       condition && boolExpression
       ```
   avoid_catches_without_on_clauses:
+    type: lint
     parameters: none
     problemMessage: "Catch clause should use 'on' to specify the type of exception being caught."
     correctionMessage: "Try adding an 'on' clause before the 'catch'."
@@ -813,6 +837,7 @@
       referenced _before_ the relevant code, for example to instantiate a wrapper
       exception, the variable is not "directly used."
   avoid_catching_errors_class:
+    type: lint
     parameters: none
     sharedName: avoid_catching_errors
     problemMessage: "The type 'Error' should not be caught."
@@ -845,6 +870,7 @@
       }
       ```
   avoid_catching_errors_subclass:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: avoid_catching_errors
@@ -852,6 +878,7 @@
     correctionMessage: "Try removing the catch or catching an 'Exception' instead."
     hasPublishedDocs: false
   avoid_classes_with_only_static_members:
+    type: lint
     parameters: none
     problemMessage: "Classes should define instance members."
     correctionMessage: "Try adding instance behavior or moving the members out of the class."
@@ -890,6 +917,7 @@
       const _favoriteMammal = 'weasel';
       ```
   avoid_double_and_int_checks:
+    type: lint
     parameters: none
     problemMessage: "Explicit check for double or int."
     correctionMessage: "Try removing the check."
@@ -926,6 +954,7 @@
       }
       ```
   avoid_dynamic_calls:
+    type: lint
     parameters: none
     problemMessage: "Method invocation or property access on a 'dynamic' target."
     correctionMessage: "Try giving the target a type."
@@ -1040,6 +1069,7 @@
       }
       ```
   avoid_empty_else:
+    type: lint
     parameters: none
     problemMessage: "Empty statements are not allowed in an 'else' clause."
     correctionMessage: "Try removing the empty statement or removing the else clause."
@@ -1136,6 +1166,7 @@
       print('2');
       ```
   avoid_equals_and_hash_code_on_mutable_classes:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The method '#p0' should not be overridden in classes not annotated with '@immutable'."
@@ -1192,6 +1223,7 @@
       }
       ```
   avoid_escaping_inner_quotes:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -1214,6 +1246,7 @@
       var s = "It's not fun";
       ```
   avoid_field_initializers_in_const_classes:
+    type: lint
     parameters: none
     problemMessage: "Fields in 'const' classes should not have initializers."
     correctionMessage: "Try converting the field to a getter or initialize the field in the constructors."
@@ -1246,6 +1279,7 @@
       }
       ```
   avoid_final_parameters:
+    type: lint
     parameters: none
     problemMessage: "Parameters should not be marked as 'final'."
     correctionMessage: "Try removing the keyword 'final'."
@@ -1293,6 +1327,7 @@
       [1, 4, 6, 8].forEach((value) => print(value + 2)); // OK
       ```
   avoid_function_literals_in_foreach_calls:
+    type: lint
     parameters: none
     problemMessage: "Function literals shouldn't be passed to 'forEach'."
     correctionMessage: "Try using a 'for' loop."
@@ -1360,6 +1395,7 @@
       }
       ```
   avoid_futureor_void:
+    type: lint
     parameters: none
     problemMessage: "Don't use the type 'FutureOr<void>'."
     correctionMessage: "Try using 'Future<void>?' or 'void'."
@@ -1456,6 +1492,7 @@
       or removed. Feedback on its behavior is welcome! The main issue is here:
       https://github.com/dart-lang/sdk/issues/59232.
   avoid_implementing_value_types:
+    type: lint
     parameters: none
     problemMessage: "Classes that override '==' should not be implemented."
     correctionMessage: "Try removing the class from the 'implements' clause."
@@ -1538,6 +1575,7 @@
       }
       ```
   avoid_init_to_null:
+    type: lint
     parameters: none
     problemMessage: "Redundant initialization to 'null'."
     correctionMessage: "Try removing the initializer."
@@ -1632,6 +1670,7 @@
       }
       ```
   avoid_js_rounded_ints:
+    type: lint
     parameters: none
     problemMessage: "Integer literal can't be represented exactly when compiled to JavaScript."
     correctionMessage: "Try using a 'BigInt' to represent the value."
@@ -1660,6 +1699,7 @@
       BigInt value = BigInt.parse('9007199254740995');
       ```
   avoid_multiple_declarations_per_line:
+    type: lint
     parameters: none
     problemMessage: "Multiple variables declared on a single line."
     correctionMessage: "Try splitting the variable declarations into multiple lines."
@@ -1682,6 +1722,7 @@
       String? baz;
       ```
   avoid_null_checks_in_equality_operators:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary null comparison in implementation of '=='."
     correctionMessage: "Try removing the comparison."
@@ -1721,6 +1762,7 @@
       }
       ```
   avoid_positional_boolean_parameters:
+    type: lint
     parameters: none
     problemMessage: "'bool' parameters should be named parameters."
     correctionMessage: "Try converting the parameter to a named parameter."
@@ -1754,6 +1796,7 @@
       Button(ButtonState.enabled);
       ```
   avoid_print:
+    type: lint
     parameters: none
     problemMessage: "Don't invoke 'print' in production code."
     correctionMessage: "Try using a logging framework."
@@ -1841,6 +1884,7 @@
       }
       ```
   avoid_private_typedef_functions:
+    type: lint
     parameters: none
     problemMessage: "The typedef is unnecessary because it is only used in one place."
     correctionMessage: "Try inlining the type or using it in other places."
@@ -1863,6 +1907,7 @@
       m(void Function() f);
       ```
   avoid_redundant_argument_values:
+    type: lint
     parameters: none
     problemMessage: "The value of the argument is redundant because it matches the default value."
     correctionMessage: "Try removing the argument."
@@ -1910,6 +1955,7 @@
       }
       ```
   avoid_relative_lib_imports:
+    type: lint
     parameters: none
     problemMessage: "Can't use a relative path to import a library in 'lib'."
     correctionMessage: "Try fixing the relative path or changing the import to a 'package:' import."
@@ -1975,6 +2021,7 @@
       ...
       ```
   avoid_renaming_method_parameters:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -2051,6 +2098,7 @@
       }
       ```
   avoid_return_types_on_setters:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary return type on a setter."
     correctionMessage: "Try removing the return type."
@@ -2098,6 +2146,7 @@
       set speed(int ms);
       ```
   avoid_returning_null:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -2129,6 +2178,7 @@
       double getDouble() => -1.0;
       ```
   avoid_returning_null_for_future:
+    type: lint
     parameters: none
     state:
       stable: "2.1"
@@ -2142,6 +2192,7 @@
       It is almost always wrong to return `null` for a `Future`.  Most of the time the
       developer simply forgot to put an `async` keyword on the function.
   avoid_returning_null_for_void_from_function:
+    type: lint
     parameters: none
     sharedName: avoid_returning_null_for_void
     problemMessage: "Don't return 'null' from a function with a return type of 'void'."
@@ -2205,12 +2256,14 @@
       }
       ```
   avoid_returning_null_for_void_from_method:
+    type: lint
     parameters: none
     sharedName: avoid_returning_null_for_void
     problemMessage: "Don't return 'null' from a method with a return type of 'void'."
     correctionMessage: "Try removing the 'null'."
     hasPublishedDocs: true
   avoid_returning_this:
+    type: lint
     parameters: none
     problemMessage: "Don't return 'this' from a method."
     correctionMessage: "Try changing the return type to 'void' and removing the return."
@@ -2249,6 +2302,7 @@
         ..write('three');
       ```
   avoid_setters_without_getters:
+    type: lint
     parameters: none
     problemMessage: "Setter has no corresponding getter."
     correctionMessage: "Try adding a corresponding getter or removing the setter."
@@ -2287,6 +2341,7 @@
       }
       ```
   avoid_shadowing_type_parameters:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -2343,6 +2398,7 @@
       }
       ```
   avoid_single_cascade_in_expression_statements:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Unnecessary cascade expression."
@@ -2391,6 +2447,7 @@
       o.m();
       ```
   avoid_slow_async_io:
+    type: lint
     parameters: none
     problemMessage: "Use of an async 'dart:io' method."
     correctionMessage: "Try using the synchronous version of the method."
@@ -2476,6 +2533,7 @@
       }
       ```
   avoid_type_to_string:
+    type: lint
     parameters: none
     problemMessage: "Using 'toString' on a 'Type' is not safe in production code."
     correctionMessage: "Try a normal type check or compare the 'runtimeType' directly."
@@ -2555,6 +2613,7 @@
       }
       ```
   avoid_types_as_parameter_names_formal_parameter:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: avoid_types_as_parameter_names
@@ -2562,6 +2621,7 @@
     correctionMessage: "Try adding a name for the parameter or changing the parameter name to not match an existing type."
     hasPublishedDocs: true
   avoid_types_as_parameter_names_type_parameter:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: avoid_types_as_parameter_names
@@ -2626,6 +2686,7 @@
       m(f(int v));
       ```
   avoid_types_on_closure_parameters:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary type annotation on a function expression parameter."
     correctionMessage: "Try removing the type annotation."
@@ -2650,6 +2711,7 @@
       var names = people.map((person) => person.name);
       ```
   avoid_unnecessary_containers:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary instance of 'Container'."
     correctionMessage: "Try removing the 'Container' (but not its children) from the widget tree."
@@ -2755,6 +2817,7 @@
       }
       ```
   avoid_unstable_final_fields:
+    type: lint
     parameters: none
     state:
       experimental: "3.3"
@@ -2763,6 +2826,7 @@
     deprecatedDetails: |-
       This rule has been removed.
   avoid_unused_constructor_parameters:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The parameter '#p0' is not used in the constructor."
@@ -2791,6 +2855,7 @@
       }
       ```
   avoid_void_async:
+    type: lint
     parameters: none
     problemMessage: "An 'async' function should have a 'Future' return type when it doesn't return a value."
     correctionMessage: "Try changing the return type."
@@ -2830,6 +2895,7 @@
       }
       ```
   avoid_web_libraries_in_flutter:
+    type: lint
     parameters: none
     problemMessage: "Don't use web-only libraries outside Flutter web plugins."
     correctionMessage: "Try finding a different library for your needs."
@@ -2901,6 +2967,7 @@
 
       otherwise, imports of `dart:html`, `dart:js` and  `dart:js_util` are disallowed.
   await_only_futures:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Uses 'await' on an instance of '#p0', which is not a subtype of 'Future'."
@@ -2966,6 +3033,7 @@
       }
       ```
   camel_case_extensions:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The extension name '#p0' isn't an UpperCamelCase identifier."
@@ -3023,6 +3091,7 @@
       }
       ```
   camel_case_types:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The type name '#p0' isn't an UpperCamelCase identifier."
@@ -3075,6 +3144,7 @@
       typedef num Adder(num x, num y);
       ```
   cancel_subscriptions:
+    type: lint
     parameters: none
     problemMessage: "Uncancelled instance of 'StreamSubscription'."
     correctionMessage: "Try invoking 'cancel' in the function in which the 'StreamSubscription' was created."
@@ -3165,6 +3235,7 @@
       cancellations. See [linter#317](https://github.com/dart-lang/sdk/issues/57387)
       for more information.
   cascade_invocations:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary duplication of receiver."
     correctionMessage: "Try using a cascade to avoid the duplication."
@@ -3210,6 +3281,7 @@
           ..secondMethod();
       ```
   cast_nullable_to_non_nullable:
+    type: lint
     parameters: none
     problemMessage: "Don't cast a nullable value to a non-nullable type."
     correctionMessage: "Try adding a not-null assertion ('!') to make the type non-nullable."
@@ -3241,6 +3313,7 @@
       var v = a!;
       ```
   close_sinks:
+    type: lint
     parameters: none
     problemMessage: "Unclosed instance of 'Sink'."
     correctionMessage: "Try invoking 'close' in the function in which the 'Sink' was created."
@@ -3331,6 +3404,7 @@
       closures. See [sdk#57882](https://github.com/dart-lang/sdk/issues/57882)
       for more information.
   collection_methods_unrelated_type:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -3435,6 +3509,7 @@
       }
       ```
   combinators_ordering:
+    type: lint
     parameters: none
     problemMessage: "Sort combinator names alphabetically."
     correctionMessage: "Try sorting the combinator names alphabetically."
@@ -3457,6 +3532,7 @@
       export 'a.dart' show A, B hide C, D;
       ```
   comment_references:
+    type: lint
     parameters: none
     problemMessage: "The referenced name isn't visible in scope."
     correctionMessage: "Try adding an import for the referenced name."
@@ -3518,6 +3594,7 @@
       [sdk#57783](https://github.com/dart-lang/sdk/issues/57783) for more
       information.
   conditional_uri_does_not_exist:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The target of the conditional URI '#p0' doesn't exist."
@@ -3544,6 +3621,7 @@
         if (condition) 'file_that_also_does_exist.dart';
       ```
   constant_identifier_names:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The constant name '#p0' isn't a lowerCamelCase identifier."
@@ -3604,6 +3682,7 @@
       }
       ```
   control_flow_in_finally:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use of '#p0' in a 'finally' clause."
@@ -3735,6 +3814,7 @@
       }
       ```
   curly_braces_in_flow_control_structures:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Statements in #p0 should be enclosed in a block."
@@ -3813,6 +3893,7 @@
       }
       ```
   dangling_library_doc_comments:
+    type: lint
     parameters: none
     problemMessage: "Dangling library doc comment."
     correctionMessage: "Add a 'library' directive after the library comment."
@@ -3899,6 +3980,7 @@
       2.19 and later. Code which might run in earlier versions of Dart will need to
       provide a name in the `library` directive.
   depend_on_referenced_packages:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The imported package '#p0' isn't a dependency of the importing package."
@@ -3992,6 +4074,7 @@
         a: ^1.0.0
       ```
   deprecated_consistency_constructor:
+    type: lint
     parameters: none
     sharedName: deprecated_consistency
     problemMessage: "Constructors in a deprecated class should be deprecated."
@@ -4042,18 +4125,21 @@
       }
       ```
   deprecated_consistency_field:
+    type: lint
     parameters: none
     sharedName: deprecated_consistency
     problemMessage: "Fields that are initialized by a deprecated parameter should be deprecated."
     correctionMessage: "Try marking the field as deprecated."
     hasPublishedDocs: false
   deprecated_consistency_parameter:
+    type: lint
     parameters: none
     sharedName: deprecated_consistency
     problemMessage: "Parameters that initialize a deprecated field should be deprecated."
     correctionMessage: "Try marking the parameter as deprecated."
     hasPublishedDocs: false
   deprecated_member_use_from_same_package_with_message:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -4122,6 +4208,7 @@
       }
       ```
   deprecated_member_use_from_same_package_without_message:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: deprecated_member_use_from_same_package
@@ -4129,6 +4216,7 @@
     correctionMessage: "Try replacing the use of the deprecated member with the replacement, if a replacement is specified."
     hasPublishedDocs: false
   diagnostic_describe_all_properties:
+    type: lint
     parameters: none
     problemMessage: "The public property isn't described by either 'debugFillProperties' or 'debugDescribeChildren'."
     correctionMessage: "Try describing the property."
@@ -4240,6 +4328,7 @@
       }
       ```
   directives_ordering_alphabetical:
+    type: lint
     parameters: none
     sharedName: directives_ordering
     problemMessage: "Sort directive sections alphabetically."
@@ -4347,6 +4436,7 @@
       import 'a/b.dart'; // OK
       ```
   directives_ordering_dart:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: directives_ordering
@@ -4354,12 +4444,14 @@
     correctionMessage: "Try sorting the directives."
     hasPublishedDocs: false
   directives_ordering_exports:
+    type: lint
     parameters: none
     sharedName: directives_ordering
     problemMessage: "Specify exports in a separate section after all imports."
     correctionMessage: "Try sorting the directives."
     hasPublishedDocs: false
   directives_ordering_package_before_relative:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: directives_ordering
@@ -4367,6 +4459,7 @@
     correctionMessage: "Try sorting the directives."
     hasPublishedDocs: false
   discarded_futures:
+    type: lint
     parameters: none
     problemMessage: "'Future'-returning calls in a non-'async' function."
     correctionMessage: "Try converting the enclosing function to be 'async' and then 'await' the future, or wrap the expression in 'unawaited'."
@@ -4405,6 +4498,7 @@
       Future<void> createDir(String path) async {}
       ```
   do_not_use_environment:
+    type: lint
     parameters: none
     problemMessage: "Invalid use of an environment declaration."
     correctionMessage: "Try removing the environment declaration usage."
@@ -4424,6 +4518,7 @@
         bool.hasEnvironment('logging') ? String.fromEnvironment('logging') : null;
       ```
   document_ignores:
+    type: lint
     parameters: none
     problemMessage: "Missing documentation explaining why the diagnostic is ignored."
     correctionMessage: "Try adding a comment immediately above the ignore comment."
@@ -4447,6 +4542,7 @@
       int _x = 1;
       ```
   empty_catches:
+    type: lint
     parameters: none
     problemMessage: "Empty catch block."
     correctionMessage: "Try adding statements to the block, adding a comment to the block, or removing the 'catch' clause."
@@ -4547,6 +4643,7 @@
       }
       ```
   empty_constructor_bodies:
+    type: lint
     parameters: none
     problemMessage: "Empty constructor bodies should be written using a ';' rather than '{}'."
     correctionMessage: "Try replacing the constructor body with ';'."
@@ -4605,6 +4702,7 @@
       }
       ```
   empty_statements:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary empty statement."
     correctionMessage: "Try removing the empty statement or restructuring the code."
@@ -4701,6 +4799,7 @@
         bar();
       ```
   enable_null_safety:
+    type: lint
     parameters: none
     state:
       stable: "2.19"
@@ -4724,6 +4823,7 @@
       }
       ```
   eol_at_end_of_file:
+    type: lint
     parameters: none
     problemMessage: "Missing a newline at the end of the file."
     correctionMessage: "Try adding a newline at the end of the file."
@@ -4748,6 +4848,7 @@
       ```
   erase_dart_type_extension_types:
     # TODO(nshahan): Update.
+    type: lint
     parameters: none
     problemMessage: "Unsafe use of 'DartType' in an 'is' check."
     correctionMessage: "Ensure DartType extension types are erased by using a helper method."
@@ -4760,6 +4861,7 @@
 
       **For internal use only.**
   exhaustive_cases:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Missing case clauses for some constants in '#p0'."
@@ -4829,6 +4931,7 @@
       }
       ```
   file_names:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The file name '#p0' isn't a lower_case_with_underscores identifier."
@@ -4882,6 +4985,7 @@
       The lint `library_names` can be used to enforce the same kind of naming on the
       library.
   flutter_style_todos:
+    type: lint
     parameters: none
     problemMessage: "To-do comment doesn't follow the Flutter style."
     correctionMessage: "Try following the Flutter style for to-do comments."
@@ -4908,6 +5012,7 @@
       // TODO(username): message, https://URL-to-issue.
       ```
   hash_and_equals:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5018,6 +5123,7 @@
       }
       ```
   implementation_imports:
+    type: lint
     parameters: none
     problemMessage: "Import of a library in the 'lib/src' directory of another package."
     correctionMessage: "Try importing a public library that exports this library, or removing the import."
@@ -5079,6 +5185,7 @@
       import 'package:acme/src/internals.dart';
       ```
   implicit_call_tearoffs:
+    type: lint
     parameters: none
     problemMessage: "Implicit tear-off of the 'call' method."
     correctionMessage: "Try explicitly tearing off the 'call' method."
@@ -5159,6 +5266,7 @@
       callIt(Callable().call);
       ```
   implicit_reopen:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5206,6 +5314,7 @@
       class C extends I {}
       ```
   invalid_case_patterns:
+    type: lint
     parameters: none
     problemMessage: "This expression is not valid in a 'case' clause in Dart 3.0."
     correctionMessage: "Try refactoring the expression to be valid in 3.0."
@@ -5437,6 +5546,7 @@
       }
       ```
   invalid_runtime_check_with_js_interop_types_dart_as_js:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5601,6 +5711,7 @@
       }
       ```
   invalid_runtime_check_with_js_interop_types_dart_is_js:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5608,6 +5719,7 @@
     problemMessage: "Runtime check between '#p0' and '#p1' checks whether a Dart value is a JS interop type, which might not be platform-consistent."
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_js_as_dart:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5616,6 +5728,7 @@
     correctionMessage: "Try using conversion methods from 'dart:js_interop' to convert between JS interop types and Dart types."
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_js_as_incompatible_js:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5623,6 +5736,7 @@
     problemMessage: "Cast from '#p0' to '#p1' casts a JS interop value to an incompatible JS interop type, which might not be platform-consistent."
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_js_is_dart:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5630,6 +5744,7 @@
     problemMessage: "Runtime check between '#p0' and '#p1' checks whether a JS interop value is a Dart type, which might not be platform-consistent."
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_js_is_inconsistent_js:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5638,6 +5753,7 @@
     correctionMessage: "Try using a JS interop member like 'isA' from 'dart:js_interop' to check the underlying type of JS interop values."
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_js_is_unrelated_js:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -5646,6 +5762,7 @@
     correctionMessage: "Try using a JS interop member like 'isA' from 'dart:js_interop' to check the underlying type of JS interop values, or make the JS interop type a supertype using 'implements'."
     hasPublishedDocs: false
   invariant_booleans:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -5733,6 +5850,7 @@
       }
       ```
   iterable_contains_unrelated_type:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -5847,6 +5965,7 @@
       class DerivedClass3 extends ClassBase implements Mixin {}
       ```
   join_return_with_assignment:
+    type: lint
     parameters: none
     problemMessage: "Assignment could be inlined in 'return' statement."
     correctionMessage: "Try inlining the assigned value in the 'return' statement."
@@ -5876,6 +5995,7 @@
       }
       ```
   leading_newlines_in_multiline_strings:
+    type: lint
     parameters: none
     problemMessage: "Missing a newline at the beginning of a multiline string."
     correctionMessage: "Try adding a newline at the beginning of the string."
@@ -5906,6 +6026,7 @@
       var s2 = '''This one-liner multiline string is ok. It usually allows to escape both ' and " in the string.''';
       ```
   library_annotations:
+    type: lint
     parameters: none
     problemMessage: "This annotation should be attached to a library directive."
     correctionMessage: "Try attaching the annotation to a library directive."
@@ -5973,6 +6094,7 @@
       2.19 and later. Code which might run in earlier versions of Dart will need to
       provide a name in the `library` directive.
   library_names:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The library name '#p0' isn't a lower_case_with_underscores identifier."
@@ -6032,6 +6154,7 @@
       The lint `file_names` can be used to enforce the same kind of naming on the
       file.
   library_prefixes:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The prefix '#p0' isn't a lower_case_with_underscores identifier."
@@ -6082,6 +6205,7 @@
       import 'package:javascript_utils/javascript_utils.dart' as js_utils;
       ```
   library_private_types_in_public_api:
+    type: lint
     parameters: none
     problemMessage: "Invalid use of a private type in a public API."
     correctionMessage: "Try making the private type public, or making the API that uses the private type also be private."
@@ -6155,6 +6279,7 @@
       f(String s) { ... }
       ```
   lines_longer_than_80_chars:
+    type: lint
     parameters: none
     problemMessage: "The line length exceeds the 80-character limit."
     correctionMessage: "Try breaking the line across multiple lines."
@@ -6184,6 +6309,7 @@
       if they go over the line limit. This makes it easier to search source files for
       a given path.
   list_remove_unrelated_type:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -6299,6 +6425,7 @@
       class DerivedClass3 extends ClassBase implements Mixin {}
       ```
   literal_only_boolean_expressions:
+    type: lint
     parameters: none
     problemMessage: "The Boolean expression has a constant value."
     correctionMessage: "Try changing the expression."
@@ -6441,6 +6568,7 @@
       }
       ```
   matching_super_parameters:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -6496,6 +6624,7 @@
       }
       ```
   missing_code_block_language_in_doc_comment:
+    type: lint
     parameters: none
     problemMessage: "The code block is missing a specified language."
     correctionMessage: "Try adding a language to the code block."
@@ -6531,6 +6660,7 @@
       class A {}
       ```
   missing_whitespace_between_adjacent_strings:
+    type: lint
     parameters: none
     problemMessage: "Missing whitespace between adjacent strings."
     correctionMessage: "Try adding whitespace between the strings."
@@ -6588,6 +6718,7 @@
         'do eiusmod tempor incididunt ut labore et dolore magna';
       ```
   no_adjacent_strings_in_list:
+    type: lint
     parameters: none
     problemMessage: "Don't use adjacent strings in a list literal."
     correctionMessage: "Try adding a comma between the strings."
@@ -6656,6 +6787,7 @@
       ];
       ```
   no_default_cases:
+    type: lint
     parameters: none
     problemMessage: "Invalid use of 'default' member in a switch."
     correctionMessage: "Try enumerating all the possible values of the switch expression."
@@ -6697,6 +6829,7 @@
         return null;
       ```
   no_duplicate_case_values:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -6790,6 +6923,7 @@
       and below. In Dart 3.0 and after, duplicate cases are reported as dead code
       by the analyzer.
   no_leading_underscores_for_library_prefixes:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The library prefix '#p0' starts with an underscore."
@@ -6839,6 +6973,7 @@
       import 'dart:core' as core;
       ```
   no_leading_underscores_for_local_identifiers:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The local variable '#p0' starts with an underscore."
@@ -6908,6 +7043,7 @@
       [1,2,3].map((_) => print('Hello'));
       ```
   no_literal_bool_comparisons:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary comparison to a boolean literal."
     correctionMessage: "Remove the comparison and use the negate `!` operator if necessary."
@@ -6942,6 +7078,7 @@
       }
       ```
   no_logic_in_create_state:
+    type: lint
     parameters: none
     problemMessage: "Don't put any logic in 'createState'."
     correctionMessage: "Try moving the logic out of 'createState'."
@@ -7041,6 +7178,7 @@
       }
       ```
   no_runtimeType_toString:
+    type: lint
     parameters: none
     problemMessage: "Using 'toString' on a 'Type' is not safe in production code."
     correctionMessage: "Try removing the usage of 'toString' or restructuring the code."
@@ -7075,6 +7213,7 @@
       * in a mixin declaration
       * in an abstract class declaration
   no_self_assignments:
+    type: lint
     parameters: none
     problemMessage: "The variable or property is being assigned to itself."
     correctionMessage: "Try removing the assignment that has no direct effect."
@@ -7182,6 +7321,7 @@
       }
       ```
   no_solo_tests:
+    type: lint
     parameters: none
     problemMessage: "Don't commit soloed tests."
     correctionMessage: "Try removing the 'soloTest' annotation or 'solo_' prefix."
@@ -7191,6 +7331,7 @@
     categories: [errorProne]
     deprecatedDetails: "For internal use only."
   no_trailing_spaces:
+    type: lint
     parameters: none
     problemMessage: "Don't create string literals with trailing spaces in tests."
     correctionMessage: 'Try removing the trailing spaces.'
@@ -7200,6 +7341,7 @@
     categories: [errorProne]
     deprecatedDetails: "For internal use only."
   no_wildcard_variable_uses:
+    type: lint
     parameters: none
     problemMessage: "The referenced identifier is a wildcard."
     correctionMessage: "Use an identifier name that is not a wildcard."
@@ -7289,6 +7431,7 @@
       var [a, _, b, _] = [1, 2, 3, 4];
       ```
   non_constant_identifier_names:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The variable name '#p0' isn't a lowerCamelCase identifier."
@@ -7340,6 +7483,7 @@
       }
       ```
   noop_primitive_operations:
+    type: lint
     parameters: none
     problemMessage: "The expression has no effect and can be removed."
     correctionMessage: "Try removing the expression."
@@ -7385,6 +7529,7 @@
           '';
       ```
   null_check_on_nullable_type_parameter:
+    type: lint
     parameters: none
     problemMessage: "The null check operator shouldn't be used on a variable whose type is a potentially nullable type parameter."
     correctionMessage: "Try explicitly testing for 'null'."
@@ -7454,6 +7599,7 @@
       }
       ```
   null_closures:
+    type: lint
     parameters: none
     problemMessage: "Closure can't be 'null' because it might be invoked."
     correctionMessage: "Try providing a non-null closure."
@@ -7528,6 +7674,7 @@
       [1, 3, 5].firstWhere((e) => e.isOdd, orElse: () => null);
       ```
   omit_local_variable_types:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary type annotation on a local variable."
     correctionMessage: "Try removing the type annotation."
@@ -7585,6 +7732,7 @@
       }
       ```
   omit_obvious_local_variable_types:
+    type: lint
     parameters: none
     problemMessage: "Omit the type annotation on a local variable when the type is obvious."
     correctionMessage: "Try removing the type annotation."
@@ -7657,6 +7805,7 @@
       or removed. Feedback on its behavior is welcome! The main issue is here:
       https://github.com/dart-lang/sdk/issues/58773.
   omit_obvious_property_types:
+    type: lint
     parameters: none
     problemMessage: "The type annotation isn't needed because it is obvious."
     correctionMessage: "Try removing the type annotation."
@@ -7709,6 +7858,7 @@
       or removed. Feedback on its behavior is welcome! The main issue is here:
       https://github.com/dart-lang/sdk/issues/59550.
   one_member_abstracts:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Unnecessary use of an abstract class."
@@ -7740,6 +7890,7 @@
       typedef Predicate = bool Function(item);
       ```
   only_throw_errors:
+    type: lint
     parameters: none
     problemMessage: "Don't throw instances of classes that don't extend either 'Exception' or 'Error'."
     correctionMessage: "Try throwing a different class of object."
@@ -7793,6 +7944,7 @@
       }
       ```
   overridden_fields:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Field overrides a field inherited from '#p0'."
@@ -7908,6 +8060,7 @@
       }
       ```
   package_api_docs:
+    type: lint
     parameters: none
     problemMessage: "Missing documentation for public API."
     correctionMessage: "Try adding a documentation comment."
@@ -7966,6 +8119,7 @@
       Advice for writing good doc comments can be found in the
       [Doc Writing Guidelines](https://dart.dev/effective-dart/documentation).
   package_names:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The package name '#p0' isn't a lower_case_with_underscores identifier."
@@ -8007,6 +8161,7 @@
       Also, make sure the name is a valid Dart identifier -- that it doesn't start
       with digits and isn't a reserved word.
   package_prefixed_library_names:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The library name is not a dot-separated path prefixed by the package name."
@@ -8095,6 +8250,7 @@
       library my_package.src.private;
       ```
   parameter_assignments:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Invalid assignment to the parameter '#p0'."
@@ -8170,6 +8326,7 @@
       }
       ```
   prefer_adjacent_string_concatenation:
+    type: lint
     parameters: none
     problemMessage: "String literals shouldn't be concatenated by the '+' operator."
     correctionMessage: "Try removing the operator to use adjacent strings."
@@ -8216,6 +8373,7 @@
           'parts are overrun by martians. Unclear which are which.');
       ```
   prefer_asserts_in_initializer_lists:
+    type: lint
     parameters: none
     problemMessage: "Assert should be in the initializer list."
     correctionMessage: "Try moving the assert to the initializer list."
@@ -8271,6 +8429,7 @@
       }
       ```
   prefer_asserts_with_message:
+    type: lint
     parameters: none
     problemMessage: "Missing a message in an assert."
     correctionMessage: "Try adding a message to the assert."
@@ -8330,6 +8489,7 @@
       }
       ```
   prefer_bool_in_asserts:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -8359,6 +8519,7 @@
       }());
       ```
   prefer_collection_literals:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary constructor invocation."
     correctionMessage: "Try using a collection literal."
@@ -8431,6 +8592,7 @@
       void printHashMap(LinkedHashMap map) => printMap(map);
       ```
   prefer_conditional_assignment:
+    type: lint
     parameters: none
     problemMessage: "The 'if' statement could be replaced by a null-aware assignment."
     correctionMessage: "Try using the '??=' operator to conditionally assign a value."
@@ -8493,6 +8655,7 @@
       }
       ```
   prefer_const_constructors:
+    type: lint
     parameters: none
     problemMessage: "Use 'const' with the constructor to improve performance."
     correctionMessage: "Try adding the 'const' keyword to the constructor invocation."
@@ -8581,6 +8744,7 @@
       A foo(int x) => new A(x);
       ```
   prefer_const_constructors_in_immutables:
+    type: lint
     parameters: none
     problemMessage: "Constructors in '@immutable' classes should be declared as 'const'."
     correctionMessage: "Try adding 'const' to the constructor declaration."
@@ -8659,6 +8823,7 @@
       }
       ```
   prefer_const_declarations:
+    type: lint
     parameters: none
     problemMessage: "Use 'const' for final variables initialized to a constant value."
     correctionMessage: "Try replacing 'final' with 'const'."
@@ -8735,6 +8900,7 @@
       }
       ```
   prefer_const_literals_to_create_immutables:
+    type: lint
     parameters: none
     problemMessage: "Use 'const' literals as arguments to constructors of '@immutable' classes."
     correctionMessage: "Try adding 'const' before the literal."
@@ -8840,6 +9006,7 @@
       A a2 = new A(const {});
       ```
   prefer_constructors_over_static_methods:
+    type: lint
     parameters: none
     problemMessage: "Static method should be a constructor."
     correctionMessage: "Try converting the method into a constructor."
@@ -8908,6 +9075,7 @@
   prefer_contains_always_false:
     # TODO(brianwilkerson): Should be warning rather than lint,
     # as represents a bug rather than style preference.
+    type: lint
     parameters: none
     sharedName: prefer_contains
     problemMessage: "Always 'false' because 'indexOf' is always greater than or equal to -1."
@@ -8916,11 +9084,13 @@
   prefer_contains_always_true:
     # TODO(brianwilkerson): Should be warning rather than lint,
     # as represents a bug rather than style preference.
+    type: lint
     parameters: none
     sharedName: prefer_contains
     problemMessage: "Always 'true' because 'indexOf' is always greater than or equal to -1."
     hasPublishedDocs: false
   prefer_contains_use_contains:
+    type: lint
     parameters: none
     sharedName: prefer_contains
     problemMessage: "Unnecessary use of 'indexOf' to test for containment."
@@ -8977,6 +9147,7 @@
       if (!lunchBox.contains('sandwich')) return 'so hungry...';
       ```
   prefer_double_quotes:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of single quotes."
     correctionMessage: "Try using double quotes unless the string contains double quotes."
@@ -9042,6 +9213,7 @@
           "and nested \${a ? 'strings' : 'can be double quoted themselves'}");
       ```
   prefer_equal_for_default_values:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -9062,6 +9234,7 @@
       m({a = 1})
       ```
   prefer_expression_function_bodies:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of a block function body."
     correctionMessage: "Try using an expression function body."
@@ -9134,6 +9307,7 @@
       containsValue(String value) => getValues().contains(value);
       ```
   prefer_final_fields:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The private field #p0 could be 'final'."
@@ -9243,6 +9417,7 @@
       }
       ```
   prefer_final_in_for_each_pattern:
+    type: lint
     parameters: none
     sharedName: prefer_final_in_for_each
     problemMessage: "The pattern should be final."
@@ -9312,6 +9487,7 @@
       }
       ```
   prefer_final_in_for_each_variable:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: prefer_final_in_for_each
@@ -9319,6 +9495,7 @@
     correctionMessage: "Try making the variable final."
     hasPublishedDocs: false
   prefer_final_locals:
+    type: lint
     parameters: none
     problemMessage: "Local variables should be final."
     correctionMessage: "Try making the variable final."
@@ -9388,12 +9565,14 @@
       }
       ```
   prefer_final_parameters:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The parameter '#p0' should be final."
     correctionMessage: "Try making the parameter final."
     state:
       stable: "2.14"
+      deprecated: "3.11"
     categories: [style]
     hasPublishedDocs: true
     documentation: |-
@@ -9419,6 +9598,16 @@
       String f(final String s) => s;
       ```
     deprecatedDetails: |-
+      **Note:** This lint rule was deprecated in Dart 3.11 and
+      is set to be removed in a future release of the Dart SDK.
+      Also note that the lint is not applied to code that is opted
+      in to the `primary-constructors` language feature where using
+      `final` for a parameter becomes a compile-time error.
+      If you want to ensure parameters aren't reassigned in function bodies,
+      consider enabling the
+      [`parameter_assignments`](https://dart.dev/lints/parameter_assignments)
+      lint rule instead.
+
       **DO** prefer declaring parameters as final if they are not reassigned in
       the function body.
 
@@ -9468,6 +9657,7 @@
       }
       ```
   prefer_for_elements_to_map_fromIterable:
+    type: lint
     parameters: none
     problemMessage: "Use 'for' elements when building maps from iterables."
     correctionMessage: "Try using a collection literal with a 'for' element."
@@ -9547,6 +9737,7 @@
       };
       ```
   prefer_foreach:
+    type: lint
     parameters: none
     problemMessage: "Use 'forEach' and a tear-off rather than a 'for' loop to apply a function to every element."
     correctionMessage: "Try using 'forEach' and a tear-off rather than a 'for' loop."
@@ -9614,6 +9805,7 @@
       myList.forEach(foo().f); // But this one invokes foo() just once.
       ```
   prefer_function_declarations_over_variables:
+    type: lint
     parameters: none
     problemMessage: "Use a function declaration rather than a variable assignment to bind a function to a name."
     correctionMessage: "Try rewriting the closure assignment as a function declaration."
@@ -9675,6 +9867,7 @@
       }
       ```
   prefer_generic_function_type_aliases:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use the generic function type syntax in 'typedef's."
@@ -9727,6 +9920,7 @@
       typedef F = void Function();
       ```
   prefer_if_elements_to_conditional_expressions:
+    type: lint
     parameters: none
     problemMessage: "Use an 'if' element to conditionally add elements."
     correctionMessage: "Try using an 'if' element rather than a conditional expression."
@@ -9748,6 +9942,7 @@
       var list = ['a', 'b', if (condition) 'c'];
       ```
   prefer_if_null_operators:
+    type: lint
     parameters: none
     problemMessage: "Use the '??' operator rather than '?:' when testing for 'null'."
     correctionMessage: "Try rewriting the code to use '??'."
@@ -9793,6 +9988,7 @@
       v = a ?? b;
       ```
   prefer_initializing_formals:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use an initializing formal to assign a parameter to a field."
@@ -9904,6 +10100,7 @@
       }
       ```
   prefer_inlined_adds_multiple:
+    type: lint
     parameters: none
     sharedName: prefer_inlined_adds
     problemMessage: "The addition of multiple list items could be inlined."
@@ -9929,6 +10126,7 @@
       var l2 = ['a', 'b', 'c'];
       ```
   prefer_inlined_adds_single:
+    type: lint
     parameters: none
     sharedName: prefer_inlined_adds
     problemMessage: "The addition of a list item could be inlined."
@@ -9983,6 +10181,7 @@
       }
       ```
   prefer_int_literals:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of a 'double' literal."
     correctionMessage: "Try using an 'int' literal."
@@ -10011,6 +10210,7 @@
       }
       ```
   prefer_interpolation_to_compose_strings:
+    type: lint
     parameters: none
     problemMessage: "Use interpolation to compose strings and values."
     correctionMessage: "Try using string interpolation to build the composite string."
@@ -10063,6 +10263,7 @@
   prefer_is_empty_always_false:
     # TODO(brianwilkerson): Should be warning rather than lint,
     # as represents a bug rather than style preference.
+    type: lint
     parameters: none
     sharedName: prefer_is_empty
     problemMessage: "The comparison is always 'false' because the length is always greater than or equal to 0."
@@ -10071,11 +10272,13 @@
   prefer_is_empty_always_true:
     # TODO(brianwilkerson): Should be warning rather than lint,
     # as represents a bug rather than style preference.
+    type: lint
     parameters: none
     sharedName: prefer_is_empty
     problemMessage: "The comparison is always 'true' because the length is always greater than or equal to 0."
     hasPublishedDocs: false
   prefer_is_empty_use_is_empty:
+    type: lint
     parameters: none
     sharedName: prefer_is_empty
     problemMessage: "Use 'isEmpty' instead of 'length' to test whether the collection is empty."
@@ -10129,12 +10332,14 @@
       if (words.isNotEmpty) return words.join(' ');
       ```
   prefer_is_empty_use_is_not_empty:
+    type: lint
     parameters: none
     sharedName: prefer_is_empty
     problemMessage: "Use 'isNotEmpty' instead of 'length' to test whether the collection is empty."
     correctionMessage: "Try rewriting the expression to use 'isNotEmpty'."
     hasPublishedDocs: true
   prefer_is_not_empty:
+    type: lint
     parameters: none
     problemMessage: "Use 'isNotEmpty' rather than negating the result of 'isEmpty'."
     correctionMessage: "Try rewriting the expression to use 'isNotEmpty'."
@@ -10184,6 +10389,7 @@
       }
       ```
   prefer_is_not_operator:
+    type: lint
     parameters: none
     problemMessage: "Use the 'is!' operator rather than negating the value of the 'is' operator."
     correctionMessage: "Try rewriting the condition to use the 'is!' operator."
@@ -10240,6 +10446,7 @@
       }
       ```
   prefer_iterable_whereType:
+    type: lint
     parameters: none
     problemMessage: "Use 'whereType' to select elements of a given type."
     correctionMessage: "Try rewriting the expression to use 'whereType'."
@@ -10285,6 +10492,7 @@
       iterable.whereType<MyClass>();
       ```
   prefer_mixin:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Only mixins should be mixed in."
@@ -10311,6 +10519,7 @@
       class C with M {}
       ```
   prefer_null_aware_method_calls:
+    type: lint
     parameters: none
     problemMessage: "Use a null-aware invocation of the 'call' method rather than explicitly testing for 'null'."
     correctionMessage: "Try using '?.call()' to invoke the function."
@@ -10332,6 +10541,7 @@
       f?.call();
       ```
   prefer_null_aware_operators:
+    type: lint
     parameters: none
     problemMessage: "Use the null-aware operator '?.' rather than an explicit 'null' comparison."
     correctionMessage: "Try using '?.'."
@@ -10381,6 +10591,7 @@
       v = a?.b;
       ```
   prefer_relative_imports:
+    type: lint
     parameters: none
     problemMessage: "Use relative imports for files in the 'lib' directory."
     correctionMessage: "Try converting the URI to a relative URI."
@@ -10429,6 +10640,7 @@
       import 'bar.dart';
       ```
   prefer_single_quotes:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of double quotes."
     correctionMessage: "Try using single quotes unless the string contains single quotes."
@@ -10494,6 +10706,7 @@
           'and nested \${a ? "strings" : "can be double quoted themselves"}');
       ```
   prefer_spread_collections:
+    type: lint
     parameters: none
     problemMessage: "The addition of multiple elements could be inlined."
     correctionMessage: "Try using the spread operator ('...') to inline the addition."
@@ -10558,6 +10771,7 @@
       var l = ['a', ...?things];
       ```
   prefer_typing_uninitialized_variables_for_field:
+    type: lint
     parameters: none
     sharedName: prefer_typing_uninitialized_variables
     problemMessage: "An uninitialized field should have an explicit type annotation."
@@ -10654,12 +10868,14 @@
       }
       ```
   prefer_typing_uninitialized_variables_for_local_variable:
+    type: lint
     parameters: none
     sharedName: prefer_typing_uninitialized_variables
     problemMessage: "An uninitialized variable should have an explicit type annotation."
     correctionMessage: "Try adding a type annotation."
     hasPublishedDocs: true
   prefer_void_to_null:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of the type 'Null'."
     correctionMessage: "Try using 'void' instead."
@@ -10723,6 +10939,7 @@
       <int, Null>{};
       ```
   provide_deprecation_message:
+    type: lint
     parameters: none
     problemMessage: "Missing a deprecation message."
     correctionMessage: "Try using the constructor to provide a message ('@Deprecated(\"message\")')."
@@ -10774,6 +10991,7 @@
       void oldFunction(arg1, arg2) {}
       ```
   public_member_api_docs:
+    type: lint
     parameters: none
     problemMessage: "Missing documentation for a public member."
     correctionMessage: "Try adding documentation for the member."
@@ -10851,6 +11069,7 @@
       documented getters have corresponding undocumented setters.  In this case the
       setters inherit the docs from the getters.
   recursive_getters:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The getter '#p0' recursively returns itself."
@@ -10912,13 +11131,14 @@
       int get field => _field;
       ```
   remove_deprecations_in_breaking_versions:
+    type: lint
     parameters: none
     problemMessage: "Remove deprecated elements in breaking versions."
     correctionMessage: "Try removing the deprecated element."
     state:
       stable: "3.10"
     categories: [publicInterface]
-    hasPublishedDocs: false
+    hasPublishedDocs: true
     documentation: |-
       #### Description
 
@@ -10999,6 +11219,7 @@
         sdk: ^3.9.0
       ```
   require_trailing_commas:
+    type: lint
     parameters: none
     problemMessage: "Missing a required trailing comma."
     correctionMessage: "Try adding a trailing comma."
@@ -11038,6 +11259,7 @@
       **NOTE:** This lint rule assumes that code has been formatted with `dart format`
       and may produce false positives on unformatted code.
   secure_pubspec_urls:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The '#p0' protocol shouldn't be used because it isn't secure."
@@ -11092,6 +11314,7 @@
       repository: https://github.com/dart-lang/example
       ```
   sized_box_for_whitespace:
+    type: lint
     parameters: none
     problemMessage: "Use a 'SizedBox' to add whitespace to a layout."
     correctionMessage: "Try using a 'SizedBox' rather than a 'Container'."
@@ -11187,6 +11410,7 @@
       }
       ```
   sized_box_shrink_expand:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use 'SizedBox.#p0' to avoid needing to specify the 'height' and 'width'."
@@ -11307,6 +11531,7 @@
       }
       ```
   slash_for_doc_comments:
+    type: lint
     parameters: none
     problemMessage: "Use the end-of-line form ('///') for doc comments."
     correctionMessage: "Try rewriting the comment to use '///'."
@@ -11362,6 +11587,7 @@
 
       Within a doc comment, you can use markdown for formatting.
   sort_child_properties_last:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "The '#p0' argument should be last in widget constructor invocations."
@@ -11476,6 +11702,7 @@
       Exception: It's allowed to have parameter with a function expression after the
       `child` property.
   sort_constructors_first:
+    type: lint
     parameters: none
     problemMessage: "Constructor declarations should be before non-constructor declarations."
     correctionMessage: "Try moving the constructor declaration before all other members."
@@ -11534,6 +11761,7 @@
       }
       ```
   sort_pub_dependencies:
+    type: lint
     parameters: none
     problemMessage: "Dependencies not sorted alphabetically."
     correctionMessage: "Try sorting the dependencies alphabetically (A to Z)."
@@ -11574,6 +11802,7 @@
 
       Sorting list of pub dependencies makes maintenance easier.
   sort_unnamed_constructors_first:
+    type: lint
     parameters: none
     problemMessage: "Invalid location for the unnamed constructor."
     correctionMessage: "Try moving the unnamed constructor before all other constructors."
@@ -11632,6 +11861,7 @@
       }
       ```
   specify_nonobvious_local_variable_types:
+    type: lint
     parameters: none
     problemMessage: "Specify the type of a local variable when the type is non-obvious."
     correctionMessage: "Try adding a type annotation."
@@ -11715,6 +11945,7 @@
       or removed. Feedback on its behavior is welcome! The main issue is here:
       https://github.com/dart-lang/sdk/issues/58773.
   specify_nonobvious_property_types:
+    type: lint
     parameters: none
     problemMessage: "A type annotation is needed because it isn't obvious."
     correctionMessage: "Try adding a type annotation."
@@ -11786,6 +12017,7 @@
       or removed. Feedback on its behavior is welcome! The main issue is here:
       https://github.com/dart-lang/sdk/issues/59550.
   strict_top_level_inference_add_type:
+    type: lint
     parameters: none
     sharedName: strict_top_level_inference
     problemMessage: "Missing type annotation."
@@ -11837,6 +12069,7 @@
       int _sq(int v) => v * v;
       ```
   strict_top_level_inference_replace_keyword:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: strict_top_level_inference
@@ -11844,12 +12077,14 @@
     correctionMessage: "Try replacing '#p0' with a type annotation."
     hasPublishedDocs: false
   strict_top_level_inference_split_to_types:
+    type: lint
     parameters: none
     sharedName: strict_top_level_inference
     problemMessage: "Missing type annotation."
     correctionMessage: "Try splitting the declaration and specify the different type annotations."
     hasPublishedDocs: false
   super_goes_last:
+    type: lint
     parameters: none
     state:
       stable: "2.0"
@@ -11888,6 +12123,7 @@
             super(style) {
       ```
   switch_on_type:
+    type: lint
     parameters: none
     problemMessage: "Avoid switch statements on a 'Type'."
     correctionMessage: "Try using pattern matching on a variable instead."
@@ -11965,6 +12201,7 @@
       }
       ```
   test_types_in_equals:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Missing type test for '#p0' in '=='."
@@ -12069,6 +12306,7 @@
       }
       ```
   throw_in_finally:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use of '#p0' in 'finally' block."
@@ -12151,6 +12389,7 @@
       }
       ```
   tighten_type_of_initializing_formals:
+    type: lint
     parameters: none
     problemMessage: "Use a type annotation rather than 'assert' to enforce non-nullability."
     correctionMessage: "Try adding a type annotation and removing the 'assert'."
@@ -12222,6 +12461,7 @@
       }
       ```
   type_annotate_public_apis:
+    type: lint
     parameters: none
     problemMessage: "Missing type annotation on a public API."
     correctionMessage: "Try adding a type annotation."
@@ -12287,6 +12527,7 @@
 
       With types, all of this is clarified.
   type_init_formals:
+    type: lint
     parameters: none
     problemMessage: "Don't needlessly type annotate initializing formals."
     correctionMessage: "Try removing the type."
@@ -12399,6 +12640,7 @@
       }
       ```
   type_literal_in_constant_pattern:
+    type: lint
     parameters: none
     problemMessage: "Use 'TypeName _' instead of a type literal."
     correctionMessage: "Replace with 'TypeName _'."
@@ -12501,6 +12743,7 @@
       }
       ```
   unawaited_futures:
+    type: lint
     parameters: none
     problemMessage: "Missing an 'await' for the 'Future' computed by this expression."
     correctionMessage: "Try adding an 'await' or wrapping the expression with 'unawaited'."
@@ -12591,6 +12834,7 @@
       }
       ```
   unintended_html_in_doc_comment:
+    type: lint
     parameters: none
     problemMessage: "Angle brackets will be interpreted as HTML."
     correctionMessage: "Try using backticks around the content with angle brackets, or try replacing `<` with `&lt;` and `>` with `&gt;`."
@@ -12710,6 +12954,7 @@
       /// <https://example.com/example>
       ```
   unnecessary_async:
+    type: lint
     parameters: none
     problemMessage: "Don't make a function 'async' if it doesn't use 'await'."
     correctionMessage: "Try removing the 'async' modifier."
@@ -12740,6 +12985,7 @@
       }
       ```
   unnecessary_await_in_return:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'await'."
     correctionMessage: "Try removing the 'await'."
@@ -12770,6 +13016,7 @@
       }
       ```
   unnecessary_brace_in_string_interps:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary braces in a string interpolation."
     correctionMessage: "Try removing the braces."
@@ -12820,6 +13067,7 @@
       print("Hi, $name!");
       ```
   unnecessary_breaks:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'break' statement."
     correctionMessage: "Try removing the 'break'."
@@ -12876,6 +13124,7 @@
       [language version](https://dart.dev/resources/language/evolution#language-versioning)
       of 3.0 or greater. Explicit breaks are still required in Dart 2.19 and below.
   unnecessary_const:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'const' keyword."
     correctionMessage: "Try removing the keyword."
@@ -12929,6 +13178,7 @@
       }
       ```
   unnecessary_constructor_name:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary '.new' constructor name."
     correctionMessage: "Try removing the '.new'."
@@ -12987,6 +13237,7 @@
       var makeA = A.new;
       ```
   unnecessary_final_with_type:
+    type: lint
     parameters: none
     sharedName: unnecessary_final
     problemMessage: "Local variables should not be marked as 'final'."
@@ -13064,12 +13315,14 @@
       }
       ```
   unnecessary_final_without_type:
+    type: lint
     parameters: none
     sharedName: unnecessary_final
     problemMessage: "Local variables should not be marked as 'final'."
     correctionMessage: "Replace 'final' with 'var'."
     hasPublishedDocs: false
   unnecessary_getters_setters:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of getter and setter to wrap a field."
     correctionMessage: "Try removing the getter and setter and renaming the field."
@@ -13141,6 +13394,7 @@
       }
       ```
   unnecessary_ignore:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unnecessary_ignore
@@ -13176,6 +13430,7 @@
     deprecatedDetails: |-
       **DON'T** specify an ignore for a diagnostic that is not produced.
   unnecessary_ignore_file:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unnecessary_ignore
@@ -13183,6 +13438,7 @@
     correctionMessage: "Try removing the ignore comment."
     hasPublishedDocs: false
   unnecessary_ignore_name:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unnecessary_ignore
@@ -13190,6 +13446,7 @@
     correctionMessage: "Try removing the name from the list."
     hasPublishedDocs: false
   unnecessary_ignore_name_file:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unnecessary_ignore
@@ -13197,6 +13454,7 @@
     correctionMessage: "Try removing the name from the list."
     hasPublishedDocs: false
   unnecessary_lambdas:
+    type: lint
     parameters: none
     problemMessage: "Closure should be a tearoff."
     correctionMessage: "Try using a tearoff rather than a closure."
@@ -13249,6 +13507,7 @@
       names.forEach(print);
       ```
   unnecessary_late:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'late' modifier."
     correctionMessage: "Try removing the 'late'."
@@ -13315,6 +13574,7 @@
       }
       ```
   unnecessary_library_directive:
+    type: lint
     parameters: none
     problemMessage: "Library directives without comments or annotations should be avoided."
     correctionMessage: "Try deleting the library directive."
@@ -13345,6 +13605,7 @@
       NOTE: Due to limitations with this lint, libraries with parts will not be
       flagged for unnecessary library directives.
   unnecessary_library_name:
+    type: lint
     parameters: none
     problemMessage: "Library names are not necessary."
     correctionMessage: "Remove the library name."
@@ -13418,6 +13679,7 @@
       part "apart.dart"; // contains: `part of "good_library.dart";`
       ```
   unnecessary_new:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'new' keyword."
     correctionMessage: "Try removing the 'new' keyword."
@@ -13466,6 +13728,7 @@
       }
       ```
   unnecessary_null_aware_assignments:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary assignment of 'null'."
     correctionMessage: "Try removing the assignment."
@@ -13526,6 +13789,7 @@
       x ??= 1;
       ```
   unnecessary_null_aware_operator_on_extension_on_nullable:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of a null-aware operator to invoke an extension method on a nullable type."
     correctionMessage: "Try removing the '?'."
@@ -13586,6 +13850,7 @@
       f(int? i) => i.m();
       ```
   unnecessary_null_checks:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of a null check ('!')."
     correctionMessage: "Try removing the null check."
@@ -13641,6 +13906,7 @@
       }
       ```
   unnecessary_null_in_if_null_operators:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of '??' with 'null'."
     correctionMessage: "Try removing the '??' operator and the 'null' operand."
@@ -13695,6 +13961,7 @@
       var x = a ?? 1;
       ```
   unnecessary_nullable_for_final_variable_declarations:
+    type: lint
     parameters: none
     problemMessage: "Type could be non-nullable."
     correctionMessage: "Try changing the type to be non-nullable."
@@ -13738,6 +14005,7 @@
       final int i = 1;
       ```
   unnecessary_overrides:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary override."
     correctionMessage: "Try adding behavior in the overriding member or removing the override."
@@ -13847,6 +14115,7 @@
 
       `noSuchMethod` is a special method and is not checked by this rule.
   unnecessary_parenthesis:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of parentheses."
     correctionMessage: "Try removing the parentheses."
@@ -13905,6 +14174,7 @@
         grouping defined by precedence. For example, the expression
         `(a && b) || c && d`.
   unnecessary_raw_strings:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of a raw string."
     correctionMessage: "Try using a normal string."
@@ -13950,6 +14220,7 @@
       var s3 = r'\a';
       ```
   unnecessary_statements:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary statement."
     correctionMessage: "Try completing the statement or breaking it up."
@@ -14033,6 +14304,7 @@
       return myvar;
       ```
   unnecessary_string_escapes:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary escape in string literal."
     correctionMessage: "Remove the '\\' escape."
@@ -14077,6 +14349,7 @@
       "this string contains 2 'single quotes' ";
       ```
   unnecessary_string_interpolations:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of string interpolation."
     correctionMessage: "Try replacing the string literal with the variable name."
@@ -14123,6 +14396,7 @@
       String o = message;
       ```
   unnecessary_this:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary 'this.' qualifier."
     correctionMessage: "Try removing 'this.'."
@@ -14195,6 +14469,7 @@
       }
       ```
   unnecessary_to_list_in_spreads:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of 'toList' in a spread."
     correctionMessage: "Try removing the invocation of 'toList'."
@@ -14252,6 +14527,7 @@
       ]
       ```
   unnecessary_unawaited:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of 'unawaited'."
     correctionMessage: "Try removing the use of 'unawaited', as the unawaited element is annotated with '@awaitNotRequired'."
@@ -14324,6 +14600,7 @@
       }
       ```
   unnecessary_underscores:
+    type: lint
     parameters: none
     problemMessage: "Unnecessary use of multiple underscores."
     correctionMessage: "Try using '_'."
@@ -14368,6 +14645,7 @@
 
 
   unreachable_from_main:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Unreachable member '#p0' in an executable library."
@@ -14402,6 +14680,7 @@
       void f() {}
       ```
   unrelated_type_equality_checks_in_expression:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -14567,6 +14846,7 @@
       class DerivedClass2 extends ClassBase with Mixin {}
       ```
   unrelated_type_equality_checks_in_pattern:
+    type: lint
     parameters:
       Object p0: undocumented
       Object p1: undocumented
@@ -14575,6 +14855,7 @@
     correctionMessage: "Try changing one or both of the operands."
     hasPublishedDocs: true
   unsafe_html_attribute:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unsafe_html
@@ -14609,6 +14890,7 @@
 
       This rule has been removed.
   unsafe_html_constructor:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unsafe_html
@@ -14616,6 +14898,7 @@
     correctionMessage: "Try finding a different way to implement the page."
     hasPublishedDocs: false
   unsafe_html_method:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: unsafe_html
@@ -14623,6 +14906,7 @@
     correctionMessage: "Try finding a different way to implement the page."
     hasPublishedDocs: false
   unsafe_variance:
+    type: lint
     parameters: none
     problemMessage: "This type is unsafe: a type parameter occurs in a non-covariant position."
     correctionMessage: "Try using a more general type that doesn't contain any type parameters in such a position."
@@ -14809,6 +15093,7 @@
       }
       ```
   use_build_context_synchronously_async_use:
+    type: lint
     parameters: none
     sharedName: use_build_context_synchronously
     problemMessage: "Don't use 'BuildContext's across async gaps."
@@ -14925,12 +15210,14 @@
       }
       ```
   use_build_context_synchronously_wrong_mounted:
+    type: lint
     parameters: none
     sharedName: use_build_context_synchronously
     problemMessage: "Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check."
     correctionMessage: "Guard a 'State.context' use with a 'mounted' check on the State, and other BuildContext use with a 'mounted' check on the BuildContext."
     hasPublishedDocs: true
   use_colored_box:
+    type: lint
     parameters: none
     problemMessage: "Use a 'ColoredBox' rather than a 'Container' with only a 'Color'."
     correctionMessage: "Try replacing the 'Container' with a 'ColoredBox'."
@@ -15000,6 +15287,7 @@
       }
       ```
   use_decorated_box:
+    type: lint
     parameters: none
     problemMessage: "Use 'DecoratedBox' rather than a 'Container' with only a 'Decoration'."
     correctionMessage: "Try replacing the 'Container' with a 'DecoratedBox'."
@@ -15089,6 +15377,7 @@
       }
       ```
   use_enums:
+    type: lint
     parameters: none
     problemMessage: "Class should be an enum."
     correctionMessage: "Try using an enum rather than a class."
@@ -15143,6 +15432,7 @@
       }
       ```
   use_full_hex_values_for_flutter_colors:
+    type: lint
     parameters: none
     problemMessage: "Instances of 'Color' should be created using an 8-digit hexadecimal integer (such as '0xFFFFFFFF')."
     state:
@@ -15192,6 +15482,7 @@
       Color(0x00000001);
       ```
   use_function_type_syntax_for_parameters:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use the generic function type syntax to declare the parameter '#p0'."
@@ -15235,6 +15526,7 @@
       Iterable<T> where(bool Function(T) predicate) {}
       ```
   use_if_null_to_convert_nulls_to_bools:
+    type: lint
     parameters: none
     problemMessage: "Use an if-null operator to convert a 'null' to a 'bool'."
     correctionMessage: "Try using an if-null operator."
@@ -15293,6 +15585,7 @@
       }
       ```
   use_is_even_rather_than_modulo:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use '#p0' rather than '% 2'."
@@ -15316,6 +15609,7 @@
       bool isOdd = 13.isOdd;
       ```
   use_key_in_widget_constructors:
+    type: lint
     parameters: none
     problemMessage: "Constructors for public widgets should have a named 'key' parameter."
     correctionMessage: "Try adding a named parameter to the constructor."
@@ -15383,6 +15677,7 @@
       }
       ```
   use_late_for_private_fields_and_variables:
+    type: lint
     parameters: none
     problemMessage: "Use 'late' for private members with a non-nullable type."
     correctionMessage: "Try making adding the modifier 'late'."
@@ -15453,6 +15748,7 @@
       }
       ```
   use_named_constants:
+    type: lint
     parameters:
       Object p0: undocumented
     problemMessage: "Use the constant '#p0' rather than a constructor returning the same object."
@@ -15498,6 +15794,7 @@
       Duration.zero;
       ```
   use_null_aware_elements:
+    type: lint
     parameters: none
     problemMessage: "Use the null-aware marker '?' rather than a null check via an 'if'."
     correctionMessage: "Try using '?'."
@@ -15541,6 +15838,7 @@
       f(String? key) => {?key: "value"};
       ```
   use_raw_strings:
+    type: lint
     parameters: none
     problemMessage: "Use a raw string to avoid using escapes."
     correctionMessage: "Try making the string a raw string and removing the escapes."
@@ -15585,6 +15883,7 @@
       var s = r'A string with only \ and $';
       ```
   use_rethrow_when_possible:
+    type: lint
     parameters: none
     problemMessage: "Use 'rethrow' to rethrow a caught exception."
     correctionMessage: "Try replacing the 'throw' with a 'rethrow'."
@@ -15654,6 +15953,7 @@
       }
       ```
   use_setters_to_change_properties:
+    type: lint
     parameters: none
     problemMessage: "The method is used to change a property."
     correctionMessage: "Try converting the method to a setter."
@@ -15707,6 +16007,7 @@
       button.visible = false;
       ```
   use_string_buffers:
+    type: lint
     parameters: none
     problemMessage: "Use a string buffer rather than '+' to compose strings."
     correctionMessage: "Try writing the parts of a string to a string buffer."
@@ -15777,6 +16078,7 @@
       }
       ```
   use_string_in_part_of_directives:
+    type: lint
     parameters: none
     problemMessage: "The part-of directive uses a library name."
     correctionMessage: "Try converting the directive to use the URI of the library."
@@ -15833,6 +16135,7 @@
       part of '../../my_library.dart';
       ```
   use_super_parameters_multiple:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: use_super_parameters
@@ -15904,6 +16207,7 @@
       }
       ```
   use_super_parameters_single:
+    type: lint
     parameters:
       Object p0: undocumented
     sharedName: use_super_parameters
@@ -15911,6 +16215,7 @@
     correctionMessage: "Trying converting '#p0' to a super parameter."
     hasPublishedDocs: true
   use_test_throws_matchers:
+    type: lint
     parameters: none
     problemMessage: "Use the 'throwsA' matcher instead of using 'fail' when there is no exception thrown."
     correctionMessage: "Try removing the try-catch and using 'throwsA' to expect an exception."
@@ -15956,6 +16261,7 @@
       );
       ```
   use_to_and_as_if_applicable:
+    type: lint
     parameters: none
     problemMessage: "Start the name of the method with 'to' or 'as'."
     correctionMessage: "Try renaming the method to use either 'to' or 'as'."
@@ -15999,6 +16305,7 @@
       }
       ```
   use_truncating_division:
+    type: lint
     parameters: none
     problemMessage: "Use truncating division."
     correctionMessage: "Try using truncating division, '~/', instead of regular division ('/') followed by 'toInt()'."
@@ -16049,6 +16356,7 @@
       var x = 2 ~/ 3;
       ```
   valid_regexps:
+    type: lint
     parameters: none
     problemMessage: "Invalid regular expression syntax."
     correctionMessage: "Try correcting the regular expression."
@@ -16099,6 +16407,7 @@
       print(RegExp(r'\(').hasMatch('foo()'));
       ```
   visit_registered_nodes:
+    type: lint
     parameters: none
     problemMessage: "Declare 'visit' methods for all registered node types."
     correctionMessage: "Try declaring a 'visit' method for all registered node types."
@@ -16108,6 +16417,7 @@
     categories: [errorProne]
     deprecatedDetails: "For internal use only."
   void_checks:
+    type: lint
     parameters: none
     problemMessage: "Assignment to a variable of type 'void'."
     correctionMessage: "Try removing the assignment or changing the type of the variable."
diff --git a/pkg/linter/test/doc_test.dart b/pkg/linter/test/doc_test.dart
index ec6dd83..e2fae9c 100644
--- a/pkg/linter/test/doc_test.dart
+++ b/pkg/linter/test/doc_test.dart
@@ -15,7 +15,7 @@
       // Doc generation reads the fix status map to associate fix status
       // badges with rule documentation.  Here we check one for sanity.
       // If the file moves or format changes, we'd expect this to fail.
-      expect(fixStatusMap['LintCode.prefer_single_quotes'], 'hasFix');
+      expect(fixStatusMap['prefer_single_quotes'], 'hasFix');
     });
   });
 }
diff --git a/pkg/linter/test/lint_code_test.dart b/pkg/linter/test/lint_code_test.dart
index 7db6158..4e08cf1 100644
--- a/pkg/linter/test/lint_code_test.dart
+++ b/pkg/linter/test/lint_code_test.dart
@@ -27,19 +27,19 @@
   });
 }
 
-const LintCode _customCode = LinterLintCode.internal(
+const LintCode _customCode = LinterLintCode(
   name: 'hash_and_equals',
   problemMessage: 'Override `==` if overriding `hashCode`.',
   correctionMessage: 'Implement `==`.',
   expectedTypes: [],
-  uniqueNameCheck: 'LintCode.hash_and_equals',
+  uniqueName: 'LintCode.hash_and_equals',
 );
 
-const LintCode _customCodeWithDocs = LinterLintCode.internal(
+const LintCode _customCodeWithDocs = LinterLintCode(
   name: 'hash_and_equals',
   problemMessage: 'Override `==` if overriding `hashCode`.',
   correctionMessage: 'Implement `==`.',
   hasPublishedDocs: true,
   expectedTypes: [],
-  uniqueNameCheck: 'LintCode.hash_and_equals',
+  uniqueName: 'LintCode.hash_and_equals',
 );
diff --git a/pkg/linter/test/mocks.dart b/pkg/linter/test/mocks.dart
index 872e074..5ee279e 100644
--- a/pkg/linter/test/mocks.dart
+++ b/pkg/linter/test/mocks.dart
@@ -71,7 +71,6 @@
          problemMessage: message,
          name: name,
          uniqueName: 'TestErrorCode.$name',
-         uniqueNameCheck: 'TestErrorCode.$name',
        );
 
   @override
diff --git a/pkg/linter/test/rules/always_put_control_body_on_new_line_test.dart b/pkg/linter/test/rules/always_put_control_body_on_new_line_test.dart
index b1dabd6..4d89500 100644
--- a/pkg/linter/test/rules/always_put_control_body_on_new_line_test.dart
+++ b/pkg/linter/test/rules/always_put_control_body_on_new_line_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -17,8 +18,8 @@
 class AlwaysPutControlBodyOnNewLineTest extends LintRuleTest {
   @override
   List<DiagnosticCode> get ignoredDiagnosticCodes => [
-    WarningCode.deadCode,
-    WarningCode.unusedLocalVariable,
+    diag.deadCode,
+    diag.unusedLocalVariable,
   ];
 
   @override
diff --git a/pkg/linter/test/rules/always_put_required_named_parameters_first_test.dart b/pkg/linter/test/rules/always_put_required_named_parameters_first_test.dart
index 44323fa..31f1c4f 100644
--- a/pkg/linter/test/rules/always_put_required_named_parameters_first_test.dart
+++ b/pkg/linter/test/rules/always_put_required_named_parameters_first_test.dart
@@ -54,6 +54,7 @@
   test_constructor_requiredAnnotationAfterOptional() async {
     await assertDiagnostics(
       r'''
+// ignore_for_file: deprecated_member_use
 import 'package:meta/meta.dart';
 class C {
   C.f({
@@ -62,12 +63,13 @@
   });
 }
 ''',
-      [lint(82, 1)],
+      [lint(124, 1)],
     );
   }
 
   test_constructor_requiredAnnotationAfterRequiredAnnotation() async {
     await assertNoDiagnostics(r'''
+// ignore_for_file: deprecated_member_use
 import 'package:meta/meta.dart';
 class C {
   C.f({
@@ -102,18 +104,20 @@
   test_topLevelFunction_requiredAnnotationAfterOptional() async {
     await assertDiagnostics(
       r'''
+// ignore_for_file: deprecated_member_use
 import 'package:meta/meta.dart';
 void f({
   int? a,
   @required int? b,
 }) {}
 ''',
-      [lint(69, 1)],
+      [lint(111, 1)],
     );
   }
 
   test_topLevelFunction_requiredAnnotationAfterRequiredAnnotation() async {
     await assertNoDiagnostics(r'''
+// ignore_for_file: deprecated_member_use
 import 'package:meta/meta.dart';
 void f({
   @required int? a,
diff --git a/pkg/linter/test/rules/analyzer_public_api_test.dart b/pkg/linter/test/rules/analyzer_public_api_test.dart
index 984eb57..668600a 100644
--- a/pkg/linter/test/rules/analyzer_public_api_test.dart
+++ b/pkg/linter/test/rules/analyzer_public_api_test.dart
@@ -2,8 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
-import 'package:linter/src/lint_codes.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 import 'package:linter/src/rules/analyzer_public_api.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -18,18 +19,18 @@
 @reflectiveTest
 class AnalyzerPublicApiTest extends LintRuleTest {
   static String get badPartDirective =>
-      LinterLintCode.analyzerPublicApiBadPartDirective.name;
+      diag.analyzerPublicApiBadPartDirective.name;
 
-  static String get badType => LinterLintCode.analyzerPublicApiBadType.name;
+  static String get badType => diag.analyzerPublicApiBadType.name;
 
   static String get experimentalInconsistency =>
-      LinterLintCode.analyzerPublicApiExperimentalInconsistency.name;
+      diag.analyzerPublicApiExperimentalInconsistency.name;
 
   static String get exportsNonPublicName =>
-      LinterLintCode.analyzerPublicApiExportsNonPublicName.name;
+      diag.analyzerPublicApiExportsNonPublicName.name;
 
   static String get implInPublicApi =>
-      LinterLintCode.analyzerPublicApiImplInPublicApi.name;
+      diag.analyzerPublicApiImplInPublicApi.name;
 
   String get libFile => '$testPackageRootPath/lib/file.dart';
 
@@ -2188,7 +2189,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(72, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 74, 1),
+      error(diag.experimentalMemberUse, 74, 1),
     ]);
   }
 
@@ -2218,7 +2219,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(66, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 76, 1),
+      error(diag.experimentalMemberUse, 76, 1),
     ]);
   }
 
@@ -2246,7 +2247,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(66, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 79, 1),
+      error(diag.experimentalMemberUse, 79, 1),
     ]);
   }
 
@@ -2274,7 +2275,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(66, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 78, 1),
+      error(diag.experimentalMemberUse, 78, 1),
     ]);
   }
 
@@ -2302,7 +2303,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(66, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 73, 1),
+      error(diag.experimentalMemberUse, 73, 1),
     ]);
   }
 
@@ -2330,7 +2331,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(70, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 75, 1),
+      error(diag.experimentalMemberUse, 75, 1),
     ]);
   }
 
@@ -2358,7 +2359,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(65, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 67, 1),
+      error(diag.experimentalMemberUse, 67, 1),
     ]);
   }
 
@@ -2386,7 +2387,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(73, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 75, 1),
+      error(diag.experimentalMemberUse, 75, 1),
     ]);
   }
 
@@ -2414,7 +2415,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(73, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 85, 1),
+      error(diag.experimentalMemberUse, 85, 1),
     ]);
   }
 
@@ -2442,7 +2443,7 @@
 ''');
     await assertDiagnosticsInFile(libFile, [
       lint(66, 1, name: experimentalInconsistency),
-      error(WarningCode.experimentalMemberUse, 71, 1),
+      error(diag.experimentalMemberUse, 71, 1),
     ]);
   }
 
diff --git a/pkg/linter/test/rules/annotate_overrides_test.dart b/pkg/linter/test/rules/annotate_overrides_test.dart
index ff4e2e5..89fd296 100644
--- a/pkg/linter/test/rules/annotate_overrides_test.dart
+++ b/pkg/linter/test/rules/annotate_overrides_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -264,7 +265,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 69, 1),
+        error(diag.extensionTypeDeclaresInstanceField, 69, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_empty_else_test.dart b/pkg/linter/test/rules/avoid_empty_else_test.dart
index 6d795b1..eaa2bb9 100644
--- a/pkg/linter/test/rules/avoid_empty_else_test.dart
+++ b/pkg/linter/test/rules/avoid_empty_else_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -92,8 +92,8 @@
 ''',
       [
         // No lint
-        error(ParserErrorCode.expectedToken, 67, 4),
-        error(ParserErrorCode.missingIdentifier, 72, 1),
+        error(diag.expectedToken, 67, 4),
+        error(diag.missingIdentifier, 72, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_equals_and_hash_code_on_mutable_classes_test.dart b/pkg/linter/test/rules/avoid_equals_and_hash_code_on_mutable_classes_test.dart
index ff76756..7434884 100644
--- a/pkg/linter/test/rules/avoid_equals_and_hash_code_on_mutable_classes_test.dart
+++ b/pkg/linter/test/rules/avoid_equals_and_hash_code_on_mutable_classes_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -32,12 +33,8 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 83, 2),
-        error(
-          CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration,
-          145,
-          8,
-        ),
+        error(diag.illegalConcreteEnumMemberDeclaration, 83, 2),
+        error(diag.illegalConcreteEnumMemberDeclaration, 145, 8),
         // No lint.
       ],
     );
diff --git a/pkg/linter/test/rules/avoid_final_parameters_test.dart b/pkg/linter/test/rules/avoid_final_parameters_test.dart
index 161cc84..b24e7ca 100644
--- a/pkg/linter/test/rules/avoid_final_parameters_test.dart
+++ b/pkg/linter/test/rules/avoid_final_parameters_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/dart/analysis/features.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -9,11 +11,17 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AvoidFinalParametersTest);
+    defineReflectiveTests(AvoidFinalParametersPrePrimaryConstructorsTest);
   });
 }
 
 @reflectiveTest
-class AvoidFinalParametersTest extends LintRuleTest {
+class AvoidFinalParametersPrePrimaryConstructorsTest extends LintRuleTest {
+  @override
+  List<String> get experiments => super.experiments
+      .where((e) => e != Feature.primary_constructors.enableString)
+      .toList();
+
   @override
   String get lintRule => LintNames.avoid_final_parameters;
 
@@ -30,7 +38,7 @@
       [
         // TODO(srawlins): Do not report this lint rule here, as it is redundant
         // with the Warning.
-        error(WarningCode.unnecessaryFinal, 23, 5),
+        error(diag.unnecessaryFinal, 23, 5),
         lint(23, 12),
       ],
     );
@@ -214,11 +222,28 @@
       [
         // TODO(srawlins): Do not report this lint rule here, as it is redundant
         // with the Hint.
-        error(WarningCode.unnecessaryFinal, 83, 5),
-        error(WarningCode.unnecessaryFinal, 98, 5),
+        error(diag.unnecessaryFinal, 83, 5),
+        error(diag.unnecessaryFinal, 98, 5),
         lint(83, 13),
         lint(98, 13),
       ],
     );
   }
 }
+
+@reflectiveTest
+class AvoidFinalParametersTest extends LintRuleTest {
+  @override
+  String get lintRule => LintNames.avoid_final_parameters;
+
+  // With primary constructors, this lint is disabled.
+  // No need to repeat all the tests; one will do.
+  test_constructorSimple_final() async {
+    await assertNoDiagnostics(r'''
+class C {
+  // Would be flagged.
+  C(final int p);
+}
+''');
+  }
+}
diff --git a/pkg/linter/test/rules/avoid_function_literals_in_foreach_calls_test.dart b/pkg/linter/test/rules/avoid_function_literals_in_foreach_calls_test.dart
index f49492d..c3419e9 100644
--- a/pkg/linter/test/rules/avoid_function_literals_in_foreach_calls_test.dart
+++ b/pkg/linter/test/rules/avoid_function_literals_in_foreach_calls_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -25,7 +25,7 @@
 ''',
       [
         // No lint
-        error(ParserErrorCode.missingIdentifier, 38, 3),
+        error(diag.missingIdentifier, 38, 3),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_init_to_null_test.dart b/pkg/linter/test/rules/avoid_init_to_null_test.dart
index 03a2701..6dc07ce 100644
--- a/pkg/linter/test/rules/avoid_init_to_null_test.dart
+++ b/pkg/linter/test/rules/avoid_init_to_null_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -129,7 +130,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.invalidAssignment, 20, 4),
+        error(diag.invalidAssignment, 20, 4),
       ],
     );
   }
@@ -143,7 +144,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.invalidAssignment, 23, 4),
+        error(diag.invalidAssignment, 23, 4),
       ],
     );
   }
@@ -158,7 +159,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.invalidAssignment, 33, 4),
+        error(diag.invalidAssignment, 33, 4),
       ],
     );
   }
@@ -170,7 +171,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.invalidAssignment, 8, 4),
+        error(diag.invalidAssignment, 8, 4),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_null_checks_in_equality_operators_test.dart b/pkg/linter/test/rules/avoid_null_checks_in_equality_operators_test.dart
index c847522..bc65d65 100644
--- a/pkg/linter/test/rules/avoid_null_checks_in_equality_operators_test.dart
+++ b/pkg/linter/test/rules/avoid_null_checks_in_equality_operators_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -29,7 +30,7 @@
   }
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 52, 2)],
+      [error(diag.nonNullableEqualsParameter, 52, 2)],
     );
   }
 
@@ -42,7 +43,7 @@
   operator ==(dynamic other) => other is C && foo == other.foo;
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 52, 2)],
+      [error(diag.nonNullableEqualsParameter, 52, 2)],
     );
   }
 
@@ -58,7 +59,7 @@
   }
 }
 ''',
-      [error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 88, 7)],
+      [error(diag.unnecessaryNullComparisonNeverNullTrue, 88, 7)],
     );
   }
 
@@ -72,7 +73,7 @@
           !(other == null) && other is C && foo == other.foo;
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 52, 2), lint(85, 13)],
+      [error(diag.nonNullableEqualsParameter, 52, 2), lint(85, 13)],
     );
   }
 
@@ -86,7 +87,7 @@
           !((other) == null) && (other) is C && foo == (other.foo);
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 52, 2), lint(85, 15)],
+      [error(diag.nonNullableEqualsParameter, 52, 2), lint(85, 15)],
     );
   }
 
@@ -108,10 +109,10 @@
 }
 ''',
       [
-        error(WarningCode.nonNullableEqualsParameter, 62, 2),
+        error(diag.nonNullableEqualsParameter, 62, 2),
         lint(126, 14),
-        error(WarningCode.deadCode, 132, 8),
-        error(StaticWarningCode.deadNullAwareExpression, 135, 5),
+        error(diag.deadCode, 132, 8),
+        error(diag.deadNullAwareExpression, 135, 5),
       ],
     );
   }
@@ -126,7 +127,7 @@
           other != null && other is C && foo == other.foo;
 }
 ''',
-      [error(WarningCode.nonNullableEqualsParameter, 52, 2), lint(83, 13)],
+      [error(diag.nonNullableEqualsParameter, 52, 2), lint(83, 13)],
     );
   }
 
@@ -140,9 +141,9 @@
 }
 ''',
       [
-        error(WarningCode.nonNullableEqualsParameter, 52, 2),
+        error(diag.nonNullableEqualsParameter, 52, 2),
         lint(94, 10),
-        error(StaticWarningCode.invalidNullAwareOperator, 99, 2),
+        error(diag.invalidNullAwareOperator, 99, 2),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_redundant_argument_values_test.dart b/pkg/linter/test/rules/avoid_redundant_argument_values_test.dart
index 03688fb..90b5cba 100644
--- a/pkg/linter/test/rules/avoid_redundant_argument_values_test.dart
+++ b/pkg/linter/test/rules/avoid_redundant_argument_values_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -237,8 +238,8 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 30, 5),
-        error(CompileTimeErrorCode.recursiveFactoryRedirect, 57, 5),
+        error(diag.recursiveFactoryRedirect, 30, 5),
+        error(diag.recursiveFactoryRedirect, 57, 5),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_relative_lib_imports_test.dart b/pkg/linter/test/rules/avoid_relative_lib_imports_test.dart
index 17d8222..d742afe1 100644
--- a/pkg/linter/test/rules/avoid_relative_lib_imports_test.dart
+++ b/pkg/linter/test/rules/avoid_relative_lib_imports_test.dart
@@ -15,15 +15,20 @@
 @reflectiveTest
 class AvoidRelativeLibImportsTest extends LintRuleTest {
   @override
-  bool get addJsPackageDep => true;
+  String get lintRule => LintNames.avoid_relative_lib_imports;
 
   @override
-  String get lintRule => LintNames.avoid_relative_lib_imports;
+  void setUp() {
+    newPackage('foo').addFile('lib/foo.dart', r'''
+class Foo {}
+''');
+    super.setUp();
+  }
 
   test_externalPackage() async {
     await assertNoDiagnostics(r'''
-/// This provides [JS].
-import 'package:js/js.dart';
+/// This provides [Foo].
+import 'package:foo/foo.dart';
 ''');
   }
 
diff --git a/pkg/linter/test/rules/avoid_shadowing_type_parameters_test.dart b/pkg/linter/test/rules/avoid_shadowing_type_parameters_test.dart
index 67b23af..76f328c 100644
--- a/pkg/linter/test/rules/avoid_shadowing_type_parameters_test.dart
+++ b/pkg/linter/test/rules/avoid_shadowing_type_parameters_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -212,10 +212,10 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.wrongNumberOfTypeArguments, 20, 8),
-        error(CompileTimeErrorCode.nonTypeAsTypeArgument, 26, 1),
-        error(ParserErrorCode.expectedToken, 28, 1),
-        error(CompileTimeErrorCode.undefinedClass, 29, 1),
+        error(diag.wrongNumberOfTypeArguments, 20, 8),
+        error(diag.nonTypeAsTypeArgument, 26, 1),
+        error(diag.expectedToken, 28, 1),
+        error(diag.undefinedClass, 29, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/avoid_types_as_parameter_names_test.dart b/pkg/linter/test/rules/avoid_types_as_parameter_names_test.dart
index b56a3c4..f8a3f71 100644
--- a/pkg/linter/test/rules/avoid_types_as_parameter_names_test.dart
+++ b/pkg/linter/test/rules/avoid_types_as_parameter_names_test.dart
@@ -157,6 +157,16 @@
     );
   }
 
+  test_primaryConstructorParameter() async {
+    await assertDiagnostics(
+      r'''
+class A {}
+class B(A);
+''',
+      [lint(19, 1)],
+    );
+  }
+
   test_super() async {
     await assertDiagnostics(
       r'''
diff --git a/pkg/linter/test/rules/await_only_futures_test.dart b/pkg/linter/test/rules/await_only_futures_test.dart
index 28f9712..7f59348 100644
--- a/pkg/linter/test/rules/await_only_futures_test.dart
+++ b/pkg/linter/test/rules/await_only_futures_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -56,7 +57,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.awaitOfIncompatibleType, 48, 5),
+        error(diag.awaitOfIncompatibleType, 48, 5),
       ],
     );
   }
@@ -159,7 +160,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.undefinedClass, 0, 9),
+        error(diag.undefinedClass, 0, 9),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/camel_case_types_test.dart b/pkg/linter/test/rules/camel_case_types_test.dart
index 0c583f1..f4ba582 100644
--- a/pkg/linter/test/rules/camel_case_types_test.dart
+++ b/pkg/linter/test/rules/camel_case_types_test.dart
@@ -95,6 +95,21 @@
     );
   }
 
+  test_class_primaryConstructor_test_class_lowerCamel() async {
+    await assertDiagnostics(
+      r'''
+class fooBar(var int x);
+''',
+      [lint(6, 6)],
+    );
+  }
+
+  test_class_primaryConstructor_upperCamel() async {
+    await assertNoDiagnostics(r'''
+class FooBar(var int x);
+''');
+  }
+
   test_class_upperCamel() async {
     await assertNoDiagnostics(r'''
 class FooBar {}
@@ -143,6 +158,21 @@
     );
   }
 
+  test_enum_primaryConstructor_lowerCamel() async {
+    await assertDiagnostics(
+      r'''
+enum fooBar(var String name) { a('') }
+''',
+      [lint(5, 6)],
+    );
+  }
+
+  test_enum_primaryConstructor_upperCamel() async {
+    await assertNoDiagnostics(r'''
+enum FooBar(var String name) { a('') }
+''');
+  }
+
   test_enum_upperCamel() async {
     await assertNoDiagnostics(r'''
 enum FoooBar { a }
diff --git a/pkg/linter/test/rules/cancel_subscriptions_test.dart b/pkg/linter/test/rules/cancel_subscriptions_test.dart
index 79fcb5a..6fb993b 100644
--- a/pkg/linter/test/rules/cancel_subscriptions_test.dart
+++ b/pkg/linter/test/rules/cancel_subscriptions_test.dart
@@ -112,6 +112,21 @@
 ''');
   }
 
+  test_privateField_canceled_withNullCheck() async {
+    await assertNoDiagnostics(r'''
+import 'dart:async';
+class C<T> {
+  StreamSubscription<T>? subscription;
+  void unsubscribe() {
+    if (subscription != null) {
+      subscription!.cancel();
+      subscription = null;
+    }
+  }
+}
+''');
+  }
+
   test_privateField_notCanceled() async {
     await assertDiagnostics(
       r'''
diff --git a/pkg/linter/test/rules/cast_nullable_to_non_nullable_test.dart b/pkg/linter/test/rules/cast_nullable_to_non_nullable_test.dart
index 25fcc74..4b655e7 100644
--- a/pkg/linter/test/rules/cast_nullable_to_non_nullable_test.dart
+++ b/pkg/linter/test/rules/cast_nullable_to_non_nullable_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -62,7 +63,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.undefinedClass, 0, 9),
+        error(diag.undefinedClass, 0, 9),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/combinators_ordering_test.dart b/pkg/linter/test/rules/combinators_ordering_test.dart
index 2c2e465..c2a0818 100644
--- a/pkg/linter/test/rules/combinators_ordering_test.dart
+++ b/pkg/linter/test/rules/combinators_ordering_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -16,7 +17,7 @@
 @reflectiveTest
 class CombinatorsOrderingTest extends LintRuleTest {
   @override
-  List<DiagnosticCode> get ignoredDiagnosticCodes => [WarningCode.unusedImport];
+  List<DiagnosticCode> get ignoredDiagnosticCodes => [diag.unusedImport];
 
   @override
   String get lintRule => LintNames.combinators_ordering;
diff --git a/pkg/linter/test/rules/conditional_uri_does_not_exist_test.dart b/pkg/linter/test/rules/conditional_uri_does_not_exist_test.dart
index dcac883..a673925 100644
--- a/pkg/linter/test/rules/conditional_uri_does_not_exist_test.dart
+++ b/pkg/linter/test/rules/conditional_uri_does_not_exist_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -37,7 +38,7 @@
       [
         // The imported library '' can't have a part-of directive,
         // but that's OK for the purposes of verifying the lint.
-        error(CompileTimeErrorCode.importOfNonLibrary, 26, 2),
+        error(diag.importOfNonLibrary, 26, 2),
         lint(54, 16),
         lint(139, 16),
       ],
@@ -53,7 +54,7 @@
     if (dart.library.async) 'dart:missing_2';
 ''',
       [
-        error(WarningCode.unusedImport, 7, 2),
+        error(diag.unusedImport, 7, 2),
         lint(35, 16, messageContainsAll: ['dart:missing_1']),
         lint(120, 16, messageContainsAll: ['dart:missing_2']),
       ],
@@ -71,7 +72,7 @@
     if (dart.library.async) 'missing_2.dart';
 ''',
       [
-        error(WarningCode.unusedImport, 7, 2),
+        error(diag.unusedImport, 7, 2),
         lint(35, 16, messageContainsAll: ['missing_1.dart']),
         lint(121, 16, messageContainsAll: ['missing_2.dart']),
       ],
@@ -87,7 +88,7 @@
     if (dart.library.io) 'package:foo/missing_2.dart';
 ''',
       [
-        error(WarningCode.unusedImport, 7, 2),
+        error(diag.unusedImport, 7, 2),
         lint(35, 29, messageContainsAll: ['missing_1.dart']),
         lint(142, 28, messageContainsAll: ['missing_2.dart']),
       ],
@@ -108,7 +109,7 @@
 
 part 'a.dart';
 ''',
-      [error(WarningCode.unusedImport, 7, 2), lint(35, 16), lint(120, 16)],
+      [error(diag.unusedImport, 7, 2), lint(35, 16), lint(120, 16)],
     );
   }
 }
diff --git a/pkg/linter/test/rules/deprecated_member_use_from_same_package_test.dart b/pkg/linter/test/rules/deprecated_member_use_from_same_package_test.dart
index 902cf11..e1f2d44 100644
--- a/pkg/linter/test/rules/deprecated_member_use_from_same_package_test.dart
+++ b/pkg/linter/test/rules/deprecated_member_use_from_same_package_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -16,9 +17,7 @@
 @reflectiveTest
 class DeprecatedMemberUseFromSamePackageTest extends LintRuleTest {
   @override
-  List<DiagnosticCode> get ignoredDiagnosticCodes => [
-    WarningCode.unusedLocalVariable,
-  ];
+  List<DiagnosticCode> get ignoredDiagnosticCodes => [diag.unusedLocalVariable];
 
   @override
   String get lintRule => LintNames.deprecated_member_use_from_same_package;
@@ -296,7 +295,7 @@
 ''',
       [
         // No lint.
-        error(WarningCode.unusedImport, 7, 10),
+        error(diag.unusedImport, 7, 10),
       ],
     );
   }
@@ -310,7 +309,7 @@
       r'''
 import 'lib.dart' show C;
 ''',
-      [error(WarningCode.unusedImport, 7, 10), lint(23, 1)],
+      [error(diag.unusedImport, 7, 10), lint(23, 1)],
     );
   }
 
@@ -650,7 +649,7 @@
       r'''
 import 'lib.dart';
 ''',
-      [lint(0, 18), error(WarningCode.unusedImport, 7, 10)],
+      [lint(0, 18), error(diag.unusedImport, 7, 10)],
     );
   }
 
diff --git a/pkg/linter/test/rules/directives_ordering_test.dart b/pkg/linter/test/rules/directives_ordering_test.dart
index 70b1a41..c7791b4 100644
--- a/pkg/linter/test/rules/directives_ordering_test.dart
+++ b/pkg/linter/test/rules/directives_ordering_test.dart
@@ -74,14 +74,17 @@
   bool get addFlutterPackageDep => true;
 
   @override
-  bool get addJsPackageDep => true;
-
-  @override
   bool get addMetaPackageDep => true;
 
   @override
   String get lintRule => LintNames.directives_ordering;
 
+  @override
+  void setUp() {
+    newPackage('foo').addFile('lib/foo.dart', '');
+    super.setUp();
+  }
+
   test_dartDirectivesGoFirst_docImports() async {
     newFile('$testPackageLibPath/a.dart', '');
     await assertDiagnostics(
@@ -193,13 +196,13 @@
     await assertDiagnostics(
       r'''
 /// @docImport 'dart:math';
-/// @docImport 'package:js/js.dart';
+/// @docImport 'package:foo/foo.dart';
 /// @docImport 'a.dart';
 /// @docImport 'package:meta/meta.dart';
 /// @docImport 'b.dart';
 library;
 ''',
-      [lint(98, 32)],
+      [lint(100, 32)],
     );
   }
 
@@ -210,12 +213,12 @@
       r'''
 export 'dart:math';
 export 'a.dart';
-export 'package:js/js.dart';
+export 'package:foo/foo.dart';
 export 'package:meta/meta.dart';
 export 'b.dart';
 // ignore_for_file: unused_import
 ''',
-      [lint(37, 28), lint(66, 32)],
+      [lint(37, 30), lint(68, 32)],
     );
   }
 
@@ -225,13 +228,13 @@
     await assertDiagnostics(
       r'''
 import 'dart:math';
-import 'package:js/js.dart';
+import 'package:foo/foo.dart';
 import 'a.dart';
 import 'package:meta/meta.dart';
 import 'b.dart';
 // ignore_for_file: unused_import
 ''',
-      [lint(66, 32)],
+      [lint(68, 32)],
     );
   }
 
@@ -291,10 +294,10 @@
       r'''
 import 'package:meta/meta.dart';
 import 'a.dart';
-import 'package:js/js.dart';
+import 'package:foo/foo.dart';
 // ignore_for_file: unused_import
 ''',
-      [lint(50, 28)],
+      [lint(50, 30)],
     );
   }
 
@@ -365,7 +368,7 @@
     newFile('$testPackageLibPath/c.dart', '');
     await assertDiagnostics(
       r'''
-export 'package:js/js.dart';
+export 'package:foo/foo.dart';
 export 'package:meta/meta.dart';
 export 'package:flutter/widgets.dart';
 
@@ -373,7 +376,7 @@
 export 'package:test/c.dart';
 export 'package:test/b.dart';
 ''',
-      [lint(62, 38), lint(162, 29)],
+      [lint(64, 38), lint(164, 29)],
     );
   }
 
@@ -383,7 +386,7 @@
     newFile('$testPackageLibPath/c.dart', '');
     await assertDiagnostics(
       r'''
-import 'package:js/js.dart';
+import 'package:foo/foo.dart';
 import 'package:meta/meta.dart';
 import 'package:flutter/widgets.dart';
 
@@ -392,7 +395,7 @@
 import 'package:test/b.dart';
 // ignore_for_file: unused_import
 ''',
-      [lint(62, 38), lint(162, 29)],
+      [lint(64, 38), lint(164, 29)],
     );
   }
 
diff --git a/pkg/linter/test/rules/discarded_futures_test.dart b/pkg/linter/test/rules/discarded_futures_test.dart
index 2ca500b..3bb85fd 100644
--- a/pkg/linter/test/rules/discarded_futures_test.dart
+++ b/pkg/linter/test/rules/discarded_futures_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -272,7 +273,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.awaitInWrongContext, 13, 5),
+        error(diag.awaitInWrongContext, 13, 5),
       ],
     );
   }
@@ -290,7 +291,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.awaitInWrongContext, 27, 5),
+        error(diag.awaitInWrongContext, 27, 5),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/erase_dart_type_extension_types_test.dart b/pkg/linter/test/rules/erase_dart_type_extension_types_test.dart
index 3ea96a3..41e90fb 100644
--- a/pkg/linter/test/rules/erase_dart_type_extension_types_test.dart
+++ b/pkg/linter/test/rules/erase_dart_type_extension_types_test.dart
@@ -15,10 +15,21 @@
 @reflectiveTest
 class EraseDartTypeExtensionTypesTest extends LintRuleTest {
   @override
-  bool get addKernelPackageDep => true;
+  String get lintRule => LintNames.erase_dart_type_extension_types;
 
   @override
-  String get lintRule => LintNames.erase_dart_type_extension_types;
+  void setUp() {
+    newPackage('kernel').addFile('lib/ast.dart', r'''
+library kernel.ast;
+
+abstract class Node {}
+
+class DartType extends Node {}
+
+class InterfaceType extends DartType {}
+''');
+    super.setUp();
+  }
 
   test_isDartType() async {
     await assertDiagnostics(
diff --git a/pkg/linter/test/rules/exhaustive_cases_test.dart b/pkg/linter/test/rules/exhaustive_cases_test.dart
index cedc820..7d90b7e 100644
--- a/pkg/linter/test/rules/exhaustive_cases_test.dart
+++ b/pkg/linter/test/rules/exhaustive_cases_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -347,7 +348,7 @@
 
   test_enum_ok() async {
     await assertDiagnostics(actualEnumSource, [
-      error(CompileTimeErrorCode.nonExhaustiveSwitchStatement, 52, 6),
+      error(diag.nonExhaustiveSwitchStatement, 52, 6),
     ]);
   }
 }
@@ -357,7 +358,7 @@
     with LanguageVersion219Mixin {
   test_enum_ok() async {
     await assertDiagnostics(actualEnumSource, [
-      error(StaticWarningCode.missingEnumConstantInSwitch, 52, 10),
+      error(diag.missingEnumConstantInSwitch, 52, 10),
     ]);
   }
 }
diff --git a/pkg/linter/test/rules/flutter_style_todos_test.dart b/pkg/linter/test/rules/flutter_style_todos_test.dart
index 454ce2f..dceb927 100644
--- a/pkg/linter/test/rules/flutter_style_todos_test.dart
+++ b/pkg/linter/test/rules/flutter_style_todos_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -37,66 +38,94 @@
 ''',
       [
         lint(0, 17),
+        error(diag.todo, 3, 14),
         lint(18, 17),
         lint(36, 17),
         lint(54, 27),
+        error(diag.todo, 57, 24),
         lint(82, 18),
+        error(diag.todo, 85, 15),
         lint(101, 28),
         lint(130, 28),
         lint(159, 28),
+        error(diag.todo, 191, 53),
         lint(245, 64),
       ],
     );
   }
 
   test_badUsername_comma() async {
-    await assertDiagnostics(r'// TODO(user1,user2): bla', [lint(0, 25)]);
+    await assertDiagnostics(r'// TODO(user1,user2): bla', [
+      lint(0, 25),
+      error(diag.todo, 3, 22),
+    ]);
   }
 
   test_badUsername_extraSymbols() async {
-    await assertDiagnostics(r'// TODO(#12357): bla', [lint(0, 20)]);
+    await assertDiagnostics(r'// TODO(#12357): bla', [
+      lint(0, 20),
+      error(diag.todo, 3, 17),
+    ]);
   }
 
   test_charactersBeforeTODO() async {
-    await assertNoDiagnostics(r'''
+    await assertDiagnostics(
+      r'''
 // comment TODO(user): bla
 /// final todo = Todo(name: 'test todo', description: 'todo description');
 /// Something interesting. TODO(someone): this is an ugly test case.
-''');
+''',
+      [error(diag.todo, 11, 15), error(diag.todo, 129, 41)],
+    );
   }
 
   test_docComment() async {
-    await assertDiagnostics(r'/// TODO(user): bla', [lint(0, 19)]);
+    await assertDiagnostics(r'/// TODO(user): bla', [
+      lint(0, 19),
+      error(diag.todo, 4, 15),
+    ]);
   }
 
   test_extraColon() async {
-    await assertDiagnostics(r'// TODO:(user): bla', [lint(0, 19)]);
+    await assertDiagnostics(r'// TODO:(user): bla', [
+      lint(0, 19),
+      error(diag.todo, 3, 16),
+    ]);
   }
 
   test_goodPatterns() async {
-    await assertNoDiagnostics(r'''
+    await assertDiagnostics(
+      r'''
 // TODO(somebody): something
 // TODO(somebody): something, https://github.com/flutter/flutter
-''');
+''',
+      [error(diag.todo, 3, 25), error(diag.todo, 32, 61)],
+    );
   }
 
   test_goodPatterns_noLeadingSpace() async {
-    await assertNoDiagnostics(r'''
+    await assertDiagnostics(
+      r'''
 //TODO(somebody): something
 //TODO(somebody): something, https://github.com/flutter/flutter
-''');
+''',
+      [error(diag.todo, 2, 25), error(diag.todo, 30, 61)],
+    );
   }
 
   test_justTodo() async {
-    await assertDiagnostics(r'// TODO', [lint(0, 7)]);
+    await assertDiagnostics(r'// TODO', [lint(0, 7), error(diag.todo, 3, 4)]);
   }
 
   test_justTodo_noLeadingSpace() async {
-    await assertDiagnostics(r'//TODO', [lint(0, 6)]);
+    await assertDiagnostics(r'//TODO', [lint(0, 6), error(diag.todo, 2, 4)]);
   }
 
   test_missingColon() async {
-    await assertDiagnostics(r'// TODO(user) bla', [lint(0, 17)]);
+    await assertDiagnostics(r'// TODO(user) bla', [
+      lint(0, 17),
+      error(diag.todo, 3, 14),
+    ]);
   }
 
   test_missingMessage() async {
@@ -105,35 +134,52 @@
 //TODO(somebody):
 // TODO(somebody):
 ''',
-      [lint(0, 17), lint(18, 18)],
+      [
+        lint(0, 17),
+        error(diag.todo, 2, 15),
+        lint(18, 18),
+        error(diag.todo, 21, 15),
+      ],
     );
   }
 
   test_missingParens() async {
-    await assertDiagnostics(r'// TODO: bla', [lint(0, 12)]);
+    await assertDiagnostics(r'// TODO: bla', [
+      lint(0, 12),
+      error(diag.todo, 3, 9),
+    ]);
   }
 
   test_properFormat_dottedUsername() async {
-    await assertNoDiagnostics(r'// TODO(user.name): bla');
+    await assertDiagnostics(r'// TODO(user.name): bla', [
+      error(diag.todo, 3, 20),
+    ]);
   }
 
   test_properFormat_hyphenatedUsername() async {
-    await assertNoDiagnostics(r'// TODO(user-name): bla');
+    await assertDiagnostics(r'// TODO(user-name): bla', [
+      error(diag.todo, 3, 20),
+    ]);
   }
 
   test_properFormat_simpleUsername() async {
-    await assertNoDiagnostics(r'// TODO(username): bla');
+    await assertDiagnostics(r'// TODO(username): bla', [
+      error(diag.todo, 3, 19),
+    ]);
   }
 
   test_slashStar() async {
-    await assertNoDiagnostics(r'/* TODO bla */');
+    await assertDiagnostics(r'/* TODO bla */', [error(diag.todo, 3, 8)]);
   }
 
   test_slashStarStar() async {
-    await assertNoDiagnostics(r'/** TODO bla **/');
+    await assertDiagnostics(r'/** TODO bla **/', [error(diag.todo, 4, 10)]);
   }
 
   test_spaceBeforeColon() async {
-    await assertDiagnostics(r'// TODO(user) : bla', [lint(0, 19)]);
+    await assertDiagnostics(r'// TODO(user) : bla', [
+      lint(0, 19),
+      error(diag.todo, 3, 16),
+    ]);
   }
 }
diff --git a/pkg/linter/test/rules/hash_and_equals_test.dart b/pkg/linter/test/rules/hash_and_equals_test.dart
index 8437f52..7f39162 100644
--- a/pkg/linter/test/rules/hash_and_equals_test.dart
+++ b/pkg/linter/test/rules/hash_and_equals_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -64,7 +65,7 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.illegalConcreteEnumMemberDeclaration, 46, 2),
+        error(diag.illegalConcreteEnumMemberDeclaration, 46, 2),
         // no lint
       ],
     );
@@ -115,7 +116,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.extensionTypeDeclaresMemberOfObject, 45, 2),
+        error(diag.extensionTypeDeclaresMemberOfObject, 45, 2),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/implementation_imports_test.dart b/pkg/linter/test/rules/implementation_imports_test.dart
index 3ba8536..6fd09db 100644
--- a/pkg/linter/test/rules/implementation_imports_test.dart
+++ b/pkg/linter/test/rules/implementation_imports_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -30,7 +31,7 @@
 
 import 'package:flutter/src/material/colors.dart';
 ''',
-      [error(WarningCode.unusedImport, 26, 42), lint(26, 42)],
+      [error(diag.unusedImport, 26, 42), lint(26, 42)],
     );
   }
 }
diff --git a/pkg/linter/test/rules/implicit_reopen_test.dart b/pkg/linter/test/rules/implicit_reopen_test.dart
index 6d577a1..da9fcd7 100644
--- a/pkg/linter/test/rules/implicit_reopen_test.dart
+++ b/pkg/linter/test/rules/implicit_reopen_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -67,7 +67,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.subtypeOfBaseIsNotBaseFinalOrSealed, 84, 1),
+        error(diag.subtypeOfBaseIsNotBaseFinalOrSealed, 84, 1),
       ],
     );
   }
@@ -151,7 +151,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed, 51, 1),
+        error(diag.subtypeOfFinalIsNotBaseFinalOrSealed, 51, 1),
       ],
     );
   }
@@ -174,7 +174,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.subtypeOfFinalIsNotBaseFinalOrSealed, 24, 1),
+        error(diag.subtypeOfFinalIsNotBaseFinalOrSealed, 24, 1),
       ],
     );
   }
@@ -203,11 +203,7 @@
 ''',
       [
         // No lint.
-        error(
-          CompileTimeErrorCode.interfaceClassExtendedOutsideOfLibrary,
-          34,
-          1,
-        ),
+        error(diag.interfaceClassExtendedOutsideOfLibrary, 34, 1),
       ],
     );
   }
@@ -262,11 +258,7 @@
 ''',
       [
         // No lint.
-        error(
-          CompileTimeErrorCode.mixinClassDeclarationExtendsNotObject,
-          44,
-          1,
-        ),
+        error(diag.mixinClassDeclarationExtendsNotObject, 44, 1),
       ],
     );
   }
@@ -313,7 +305,7 @@
 ''',
       [
         // No lint.
-        error(ParserErrorCode.expectedInstead, 30, 7),
+        error(diag.expectedInstead, 30, 7),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/invalid_case_patterns_test.dart b/pkg/linter/test/rules/invalid_case_patterns_test.dart
index 267f579..2757878 100644
--- a/pkg/linter/test/rules/invalid_case_patterns_test.dart
+++ b/pkg/linter/test/rules/invalid_case_patterns_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -53,7 +54,7 @@
   }
 }
 ''',
-      [lint(43, 12), error(WarningCode.deadCode, 54, 1)],
+      [lint(43, 12), error(diag.deadCode, 54, 1)],
     );
   }
 
@@ -109,7 +110,7 @@
   }
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 43, 8), lint(43, 8)],
+      [error(diag.unnecessaryTypeCheckTrue, 43, 8), lint(43, 8)],
     );
   }
 
@@ -122,7 +123,7 @@
   }
 }
 ''',
-      [error(WarningCode.unnecessaryTypeCheckFalse, 43, 9), lint(43, 9)],
+      [error(diag.unnecessaryTypeCheckFalse, 43, 9), lint(43, 9)],
     );
   }
 
diff --git a/pkg/linter/test/rules/invalid_runtime_check_with_js_interop_types_test.dart b/pkg/linter/test/rules/invalid_runtime_check_with_js_interop_types_test.dart
index 9356b0a..ab2eb78 100644
--- a/pkg/linter/test/rules/invalid_runtime_check_with_js_interop_types_test.dart
+++ b/pkg/linter/test/rules/invalid_runtime_check_with_js_interop_types_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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -16,10 +17,18 @@
 @reflectiveTest
 class InvalidRuntimeCheckWithJSInteropTypesTest extends LintRuleTest {
   @override
-  bool get addJsPackageDep => true;
+  String get lintRule => LintNames.invalid_runtime_check_with_js_interop_types;
 
   @override
-  String get lintRule => LintNames.invalid_runtime_check_with_js_interop_types;
+  void setUp() {
+    newPackage('js').addFile('lib/js.dart', r'''
+library js;
+
+// ignore: EXPORT_INTERNAL_LIBRARY
+export 'dart:_js_annotations' show JS, staticInterop;
+''');
+    super.setUp();
+  }
 
   test_baseTypesAs_dart_type_as_js_type() async {
     await _testCasts([_AsCast('int', 'JSNumber')]);
@@ -444,8 +453,8 @@
     }
     ''',
       [
-        error(WarningCode.castFromNullAlwaysFails, 54, 13),
-        error(WarningCode.deadCode, 75, 17),
+        error(diag.castFromNullAlwaysFails, 54, 13),
+        error(diag.deadCode, 75, 17),
       ],
     );
   }
@@ -501,7 +510,7 @@
       null is JSArray?;
     }
     ''',
-      [error(WarningCode.unnecessaryTypeCheckTrue, 75, 16)],
+      [error(diag.unnecessaryTypeCheckTrue, 75, 16)],
     );
   }
 
@@ -1268,16 +1277,10 @@
       if (typeTest.lint) lints.add(lint(code.length, test.length));
       if (typeTest.unnecessary) {
         if (cast) {
-          lints.add(
-            error(WarningCode.unnecessaryCast, code.length, test.length),
-          );
+          lints.add(error(diag.unnecessaryCast, code.length, test.length));
         } else {
           lints.add(
-            error(
-              WarningCode.unnecessaryTypeCheckTrue,
-              code.length,
-              test.length,
-            ),
+            error(diag.unnecessaryTypeCheckTrue, code.length, test.length),
           );
         }
       }
diff --git a/pkg/linter/test/rules/library_prefixes_test.dart b/pkg/linter/test/rules/library_prefixes_test.dart
index df3cc86..b23f434 100644
--- a/pkg/linter/test/rules/library_prefixes_test.dart
+++ b/pkg/linter/test/rules/library_prefixes_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -17,8 +18,8 @@
 class LibraryPrefixesTest extends LintRuleTest {
   @override
   List<DiagnosticCode> get ignoredDiagnosticCodes => [
-    WarningCode.unusedImport,
-    WarningCode.unusedLocalVariable,
+    diag.unusedImport,
+    diag.unusedLocalVariable,
   ];
 
   @override
diff --git a/pkg/linter/test/rules/library_private_types_in_public_api_test.dart b/pkg/linter/test/rules/library_private_types_in_public_api_test.dart
index cdc4e7c..30f06dc 100644
--- a/pkg/linter/test/rules/library_private_types_in_public_api_test.dart
+++ b/pkg/linter/test/rules/library_private_types_in_public_api_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -139,7 +140,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 47, 1),
+        error(diag.extensionTypeDeclaresInstanceField, 47, 1),
       ],
     );
   }
@@ -562,6 +563,40 @@
     );
   }
 
+  test_primaryConstructor_declaring_privateParameterType() async {
+    await assertDiagnostics(
+      r'''
+class C(_P p);
+class _P {}
+''',
+      [lint(8, 2)],
+    );
+  }
+
+  test_primaryConstructor_declaring_publicParameterType() async {
+    await assertNoDiagnostics(r'''
+class C(P p);
+class P {}
+''');
+  }
+
+  test_primaryConstructor_named_privateParameterType() async {
+    await assertDiagnostics(
+      r'''
+class C.named(_P p);
+class _P {}
+''',
+      [lint(14, 2)],
+    );
+  }
+
+  test_primaryConstructor_named_publicParameterType() async {
+    await assertNoDiagnostics(r'''
+class C.named(P p);
+class P {}
+''');
+  }
+
   test_topLevelGetter_private_privateReturnType() async {
     await assertNoDiagnostics(r'''
 _P get _g => _P();
diff --git a/pkg/linter/test/rules/literal_only_boolean_expressions_test.dart b/pkg/linter/test/rules/literal_only_boolean_expressions_test.dart
index 61d5c5e..30e20b7 100644
--- a/pkg/linter/test/rules/literal_only_boolean_expressions_test.dart
+++ b/pkg/linter/test/rules/literal_only_boolean_expressions_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -17,6 +18,26 @@
   @override
   String get lintRule => LintNames.literal_only_boolean_expressions;
 
+  test_adjacent_string_interpolation_constant() async {
+    await assertDiagnostics(
+      r'''
+void f() {
+  const a = 20;
+  if ('$a' '0' == 20) {}
+}
+''',
+      [lint(29, 22)],
+    );
+  }
+
+  test_adjacent_string_interpolation_nonconstant() async {
+    await assertNoDiagnostics(r'''
+void f(int a) {
+  if ('$a' '0' == 20) {}
+}
+''');
+  }
+
   test_doWhile_false() async {
     await assertDiagnostics(
       r'''
@@ -57,7 +78,7 @@
   if (!true) {}
 }
 ''',
-      [lint(13, 13), error(WarningCode.deadCode, 24, 2)],
+      [lint(13, 13), error(diag.deadCode, 24, 2)],
     );
   }
 
@@ -120,7 +141,7 @@
   if (true && false) {}
 }
 ''',
-      [lint(15, 21), error(WarningCode.deadCode, 34, 2)],
+      [lint(15, 21), error(diag.deadCode, 34, 2)],
     );
   }
 
@@ -146,7 +167,7 @@
 ''',
       [
         // No lint
-        error(WarningCode.patternNeverMatchesValueType, 24, 5),
+        error(diag.patternNeverMatchesValueType, 24, 5),
       ],
     );
   }
@@ -197,6 +218,33 @@
 ''');
   }
 
+  test_is_expression_both_operands_known() async {
+    await assertDiagnostics(
+      r'''
+void f() {
+  if (20 is int) {}
+}
+''',
+      [lint(13, 17), error(diag.unnecessaryTypeCheckTrue, 17, 9)],
+    );
+  }
+
+  test_is_expression_only_left_operand_unknown() async {
+    await assertNoDiagnostics(r'''
+void f(a) {
+  if (a is int) {}
+}
+''');
+  }
+
+  test_is_expression_only_right_operand_unknown() async {
+    await assertNoDiagnostics(r'''
+void f<T>(a) {
+  if (20 is T) {}
+}
+''');
+  }
+
   test_nullAware() async {
     await assertDiagnostics(
       r'''
@@ -249,7 +297,7 @@
   }
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 35, 7), lint(43, 9)],
+      [error(diag.patternNeverMatchesValueType, 35, 7), lint(43, 9)],
     );
   }
 
@@ -260,7 +308,7 @@
   while (!true) {}
 }
 ''',
-      [lint(13, 16), error(WarningCode.deadCode, 27, 2)],
+      [lint(13, 16), error(diag.deadCode, 27, 2)],
     );
   }
 
diff --git a/pkg/linter/test/rules/matching_super_parameters_test.dart b/pkg/linter/test/rules/matching_super_parameters_test.dart
index c423560..32c4fe6 100644
--- a/pkg/linter/test/rules/matching_super_parameters_test.dart
+++ b/pkg/linter/test/rules/matching_super_parameters_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -217,11 +218,7 @@
 ''',
       [
         // No lint.
-        error(
-          CompileTimeErrorCode.superFormalParameterWithoutAssociatedPositional,
-          79,
-          1,
-        ),
+        error(diag.superFormalParameterWithoutAssociatedPositional, 79, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/missing_whitespace_between_adjacent_strings_test.dart b/pkg/linter/test/rules/missing_whitespace_between_adjacent_strings_test.dart
index 5040469..5b7e858 100644
--- a/pkg/linter/test/rules/missing_whitespace_between_adjacent_strings_test.dart
+++ b/pkg/linter/test/rules/missing_whitespace_between_adjacent_strings_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -39,7 +40,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.newWithNonType, 17, 10),
+        error(diag.newWithNonType, 17, 10),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/no_duplicate_case_values_test.dart b/pkg/linter/test/rules/no_duplicate_case_values_test.dart
index 000799c..024b6d3 100644
--- a/pkg/linter/test/rules/no_duplicate_case_values_test.dart
+++ b/pkg/linter/test/rules/no_duplicate_case_values_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -41,7 +41,7 @@
   }
 }
 ''',
-      [error(WarningCode.unreachableSwitchCase, 237, 4)],
+      [error(diag.unreachableSwitchCase, 237, 4)],
     );
   }
 
@@ -68,8 +68,8 @@
 ''',
       [
         // No lint.
-        error(WarningCode.unreachableSwitchCase, 139, 4),
-        error(WarningCode.unreachableSwitchDefault, 155, 7),
+        error(diag.unreachableSwitchCase, 139, 4),
+        error(diag.unreachableSwitchDefault, 155, 7),
       ],
     );
   }
@@ -93,8 +93,8 @@
 ''',
       [
         // No lint.
-        error(WarningCode.unreachableSwitchCase, 95, 4),
-        error(WarningCode.unreachableSwitchCase, 107, 4),
+        error(diag.unreachableSwitchCase, 95, 4),
+        error(diag.unreachableSwitchCase, 107, 4),
       ],
     );
   }
@@ -118,10 +118,10 @@
 ''',
       [
         // No lint.
-        error(WarningCode.unreachableSwitchCase, 115, 4),
-        error(ParserErrorCode.invalidConstantPatternBinary, 122, 1),
-        error(WarningCode.unreachableSwitchCase, 131, 4),
-        error(ParserErrorCode.invalidConstantPatternBinary, 153, 1),
+        error(diag.unreachableSwitchCase, 115, 4),
+        error(diag.invalidConstantPatternBinary, 122, 1),
+        error(diag.unreachableSwitchCase, 131, 4),
+        error(diag.invalidConstantPatternBinary, 153, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/no_leading_underscores_for_library_prefixes_test.dart b/pkg/linter/test/rules/no_leading_underscores_for_library_prefixes_test.dart
index 8a18c23..620a958 100644
--- a/pkg/linter/test/rules/no_leading_underscores_for_library_prefixes_test.dart
+++ b/pkg/linter/test/rules/no_leading_underscores_for_library_prefixes_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -17,8 +18,8 @@
 class NoLeadingUnderscoresForLibraryPrefixesTest extends LintRuleTest {
   @override
   List<DiagnosticCode> get ignoredDiagnosticCodes => [
-    WarningCode.unusedImport,
-    WarningCode.unusedLocalVariable,
+    diag.unusedImport,
+    diag.unusedLocalVariable,
   ];
 
   @override
diff --git a/pkg/linter/test/rules/no_leading_underscores_for_local_identifiers_test.dart b/pkg/linter/test/rules/no_leading_underscores_for_local_identifiers_test.dart
index c77068f..b9ba2ae 100644
--- a/pkg/linter/test/rules/no_leading_underscores_for_local_identifiers_test.dart
+++ b/pkg/linter/test/rules/no_leading_underscores_for_local_identifiers_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -17,7 +18,7 @@
 class NoLeadingUnderscoresForLocalIdentifiersTest extends LintRuleTest {
   @override
   List<DiagnosticCode> get ignoredDiagnosticCodes => [
-    WarningCode.unusedCatchStack,
+    diag.unusedCatchStack,
     ...super.ignoredDiagnosticCodes,
   ];
 
diff --git a/pkg/linter/test/rules/non_constant_identifier_names_test.dart b/pkg/linter/test/rules/non_constant_identifier_names_test.dart
index 73fdcd2..bbe8793 100644
--- a/pkg/linter/test/rules/non_constant_identifier_names_test.dart
+++ b/pkg/linter/test/rules/non_constant_identifier_names_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -166,7 +166,7 @@
 ''',
       [
         // No Lint.
-        error(CompileTimeErrorCode.duplicateFieldName, 15, 1),
+        error(diag.duplicateFieldName, 15, 1),
       ],
     );
   }
@@ -179,7 +179,7 @@
 ''',
       [
         // No Lint.
-        error(CompileTimeErrorCode.invalidFieldNameFromObject, 9, 8),
+        error(diag.invalidFieldNameFromObject, 9, 8),
       ],
     );
   }
@@ -192,7 +192,7 @@
 ''',
       [
         // No Lint.
-        error(CompileTimeErrorCode.invalidFieldNamePositional, 12, 2),
+        error(diag.invalidFieldNamePositional, 12, 2),
       ],
     );
   }
@@ -205,7 +205,7 @@
 ''',
       [
         // No Lint.
-        error(CompileTimeErrorCode.invalidFieldNamePrivate, 9, 2),
+        error(diag.invalidFieldNamePrivate, 9, 2),
       ],
     );
   }
@@ -433,7 +433,7 @@
   } catch(__, ___) {}
 }
 ''',
-      [lint(24, 2), error(WarningCode.unusedCatchStack, 28, 3), lint(28, 3)],
+      [lint(24, 2), error(diag.unusedCatchStack, 28, 3), lint(28, 3)],
     );
   }
 
@@ -689,9 +689,9 @@
 ''',
       [
         // No lint
-        error(ParserErrorCode.missingFunctionParameters, 15, 1),
-        error(CompileTimeErrorCode.duplicateDefinition, 15, 1),
-        error(ParserErrorCode.missingFunctionBody, 21, 1),
+        error(diag.missingFunctionParameters, 15, 1),
+        error(diag.duplicateDefinition, 15, 1),
+        error(diag.missingFunctionBody, 21, 1),
       ],
     );
   }
@@ -802,6 +802,27 @@
     );
   }
 
+  test_primaryConstructor_lowerCase() async {
+    await assertNoDiagnostics(r'''
+class C.named();
+''');
+  }
+
+  test_primaryConstructor_underscores() async {
+    await assertNoDiagnostics(r'''
+class C.___();
+    ''');
+  }
+
+  test_primaryConstructor_upperCase() async {
+    await assertDiagnostics(
+      r'''
+class C.Named();
+''',
+      [lint(8, 5)],
+    );
+  }
+
   test_topLevelFunction() async {
     await assertDiagnostics(
       r'''
diff --git a/pkg/linter/test/rules/null_check_on_nullable_type_parameter_test.dart b/pkg/linter/test/rules/null_check_on_nullable_type_parameter_test.dart
index 4e19dd6..120a53f 100644
--- a/pkg/linter/test/rules/null_check_on_nullable_type_parameter_test.dart
+++ b/pkg/linter/test/rules/null_check_on_nullable_type_parameter_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -185,7 +186,7 @@
   }
 }
 ''',
-      [lint(40, 1), error(WarningCode.deadCode, 42, 9), lint(50, 1)],
+      [lint(40, 1), error(diag.deadCode, 42, 9), lint(50, 1)],
     );
   }
 
diff --git a/pkg/linter/test/rules/null_closures_test.dart b/pkg/linter/test/rules/null_closures_test.dart
index 0c49173..a6396d5 100644
--- a/pkg/linter/test/rules/null_closures_test.dart
+++ b/pkg/linter/test/rules/null_closures_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -122,9 +123,9 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 41, 1),
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 81, 4),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 41, 1),
+        error(diag.argumentTypeNotAssignable, 81, 4),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/overridden_fields_test.dart b/pkg/linter/test/rules/overridden_fields_test.dart
index 1d65e6b..ac2a7c94 100644
--- a/pkg/linter/test/rules/overridden_fields_test.dart
+++ b/pkg/linter/test/rules/overridden_fields_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -78,7 +79,7 @@
   int x = 9;
 }
 ''',
-      [error(CompileTimeErrorCode.conflictingFieldAndMethod, 55, 1)],
+      [error(diag.conflictingFieldAndMethod, 55, 1)],
     );
   }
 
@@ -302,18 +303,18 @@
 }
 ''',
       [
-        error(WarningCode.overrideOnNonOverridingField, 120, 1),
+        error(diag.overrideOnNonOverridingField, 120, 1),
         lint(127, 5),
         lint(194, 9),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 273, 4),
+        error(diag.mixinInheritsFromNotObject, 273, 4),
         lint(301, 9),
         lint(343, 5),
         lint(418, 9),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 472, 4),
+        error(diag.mixinInheritsFromNotObject, 472, 4),
         lint(500, 9),
         lint(542, 5),
         lint(617, 9),
-        error(CompileTimeErrorCode.mixinInheritsFromNotObject, 751, 4),
+        error(diag.mixinInheritsFromNotObject, 751, 4),
         lint(779, 9),
         lint(821, 4),
         lint(883, 1),
@@ -391,8 +392,8 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 6, 1),
-        error(CompileTimeErrorCode.recursiveInterfaceInheritance, 27, 1),
+        error(diag.recursiveInterfaceInheritance, 6, 1),
+        error(diag.recursiveInterfaceInheritance, 27, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/parameter_assignments_test.dart b/pkg/linter/test/rules/parameter_assignments_test.dart
index ee20f96..41ecc38 100644
--- a/pkg/linter/test/rules/parameter_assignments_test.dart
+++ b/pkg/linter/test/rules/parameter_assignments_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -17,6 +18,58 @@
   @override
   String get lintRule => LintNames.parameter_assignments;
 
+  test_anonymousFunction_assignment() async {
+    await assertDiagnostics(
+      r'''
+void main() {
+  (int i) {
+    i = 42;
+  }(0);
+}
+''',
+      [lint(30, 6)],
+    );
+  }
+
+  test_anonymousFunction_assignment_arrowBody() async {
+    await assertDiagnostics(
+      r'''
+void main() {
+  (int i) => i = 42;
+}
+''',
+      [lint(27, 6)],
+    );
+  }
+
+  test_anonymousFunction_assignment_notInvoked() async {
+    await assertDiagnostics(
+      r'''
+void main() {
+  (int i) {
+    i = 42;
+  };
+}
+''',
+      [lint(30, 6)],
+    );
+  }
+
+  test_assignment_inIfElseBranches() async {
+    await assertDiagnostics(
+      r'''
+void foo({String? value}) {
+  if (1 == 1) {
+    value = ' $value';
+  } else {
+    value = ' $value';
+  }
+}
+''',
+      [lint(48, 17), lint(82, 17)],
+    );
+  }
+
   test_assignment_nullableParameter() async {
     await assertDiagnostics(
       r'''
@@ -50,12 +103,11 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.undefinedIdentifier, 21, 1),
+        error(diag.undefinedIdentifier, 21, 1),
       ],
     );
   }
 
-  @FailingTest(reason: 'Closures not implemented')
   test_closure_assignment() async {
     await assertDiagnostics(
       r'''
@@ -80,6 +132,19 @@
     );
   }
 
+  test_constructor_assignment() async {
+    await assertDiagnostics(
+      r'''
+class Foo {
+  Foo(int x) {
+    x = 4;
+  }
+}
+''',
+      [lint(31, 5)],
+    );
+  }
+
   test_function_assignment() async {
     await assertDiagnostics(
       r'''
@@ -149,9 +214,9 @@
 }
 ''',
       [
-        error(StaticWarningCode.deadNullAwareExpression, 59, 2),
+        error(diag.deadNullAwareExpression, 59, 2),
         lint(46, 15),
-        error(WarningCode.deadCode, 59, 3),
+        error(diag.deadCode, 59, 3),
       ],
     );
   }
@@ -306,7 +371,7 @@
   p ??= 8;
 }
 ''',
-      [lint(65, 7), error(WarningCode.deadCode, 71, 2)],
+      [lint(65, 7), error(diag.deadCode, 71, 2)],
     );
   }
 
@@ -318,7 +383,7 @@
   p ??= 8;
 }
 ''',
-      [lint(65, 7), error(WarningCode.deadCode, 71, 2)],
+      [lint(65, 7), error(diag.deadCode, 71, 2)],
     );
   }
 
@@ -347,7 +412,7 @@
   p ??= 16;
 }
 ''',
-      [lint(72, 8), error(WarningCode.deadCode, 78, 3)],
+      [lint(72, 8), error(diag.deadCode, 78, 3)],
     );
   }
 
diff --git a/pkg/linter/test/rules/prefer_asserts_in_initializer_lists_test.dart b/pkg/linter/test/rules/prefer_asserts_in_initializer_lists_test.dart
index 5848ecf..0d3de6f 100644
--- a/pkg/linter/test/rules/prefer_asserts_in_initializer_lists_test.dart
+++ b/pkg/linter/test/rules/prefer_asserts_in_initializer_lists_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -331,7 +332,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.nonBoolExpression, 40, 50),
+        error(diag.nonBoolExpression, 40, 50),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_collection_literals_test.dart b/pkg/linter/test/rules/prefer_collection_literals_test.dart
index 98a370d..b5fae46 100644
--- a/pkg/linter/test/rules/prefer_collection_literals_test.dart
+++ b/pkg/linter/test/rules/prefer_collection_literals_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -548,7 +549,7 @@
 ''',
       [
         // No lints.
-        error(CompileTimeErrorCode.undefinedFunction, 40, 15),
+        error(diag.undefinedFunction, 40, 15),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_const_constructors_in_immutables_test.dart b/pkg/linter/test/rules/prefer_const_constructors_in_immutables_test.dart
index b412aef..6833bac 100644
--- a/pkg/linter/test/rules/prefer_const_constructors_in_immutables_test.dart
+++ b/pkg/linter/test/rules/prefer_const_constructors_in_immutables_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -401,13 +402,7 @@
   B();
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.undefinedConstructorInInitializerDefault,
-          99,
-          1,
-        ),
-      ],
+      [error(diag.undefinedConstructorInInitializerDefault, 99, 1)],
     );
   }
 
@@ -438,7 +433,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromConstructor, 75, 4),
+        error(diag.returnOfInvalidTypeFromConstructor, 75, 4),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_const_constructors_test.dart b/pkg/linter/test/rules/prefer_const_constructors_test.dart
index 2029760..dc95d78 100644
--- a/pkg/linter/test/rules/prefer_const_constructors_test.dart
+++ b/pkg/linter/test/rules/prefer_const_constructors_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -317,6 +318,19 @@
 ''');
   }
 
+  test_constructorArgument_rhsOfLogicalOperation() async {
+    // Note: prior to the fix for https://github.com/dart-lang/sdk/issues/61761,
+    // this caused an exception to be thrown in the linter.
+    await assertNoDiagnostics(r'''
+class C {
+  final bool x;
+  const C(this.x);
+}
+const C a = C(true);
+final C b = C(false || a.x);
+''');
+  }
+
   test_deferred_arg() async {
     newFile('$testPackageLibPath/a.dart', '''
 class A {
@@ -391,7 +405,7 @@
 ''',
       [
         // No lint
-        error(WarningCode.nonConstCallToLiteralConstructor, 90, 3),
+        error(diag.nonConstCallToLiteralConstructor, 90, 3),
       ],
     );
   }
@@ -413,7 +427,7 @@
 ''',
       [
         // No lint
-        error(WarningCode.nonConstCallToLiteralConstructor, 88, 6),
+        error(diag.nonConstCallToLiteralConstructor, 88, 6),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_const_literals_to_create_immutables_test.dart b/pkg/linter/test/rules/prefer_const_literals_to_create_immutables_test.dart
index 2983abe..7bd2916 100644
--- a/pkg/linter/test/rules/prefer_const_literals_to_create_immutables_test.dart
+++ b/pkg/linter/test/rules/prefer_const_literals_to_create_immutables_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -256,7 +257,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.missingRequiredArgument, 178, 1),
+        error(diag.missingRequiredArgument, 178, 1),
       ],
     );
   }
@@ -282,7 +283,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.newWithNonType, 13, 1),
+        error(diag.newWithNonType, 13, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_contains_test.dart b/pkg/linter/test/rules/prefer_contains_test.dart
index 29d05df..375fa55 100644
--- a/pkg/linter/test/rules/prefer_contains_test.dart
+++ b/pkg/linter/test/rules/prefer_contains_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -28,7 +29,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 77, 3),
+        error(diag.argumentTypeNotAssignable, 77, 3),
       ],
     );
   }
@@ -497,7 +498,7 @@
       r'''
 bool le3 = ([].indexOf(1) as int) > -1;
 ''',
-      [lint(11, 27), error(WarningCode.unnecessaryCast, 12, 20)],
+      [lint(11, 27), error(diag.unnecessaryCast, 12, 20)],
     );
   }
 
diff --git a/pkg/linter/test/rules/prefer_final_fields_test.dart b/pkg/linter/test/rules/prefer_final_fields_test.dart
index 43d9c40..25f6934 100644
--- a/pkg/linter/test/rules/prefer_final_fields_test.dart
+++ b/pkg/linter/test/rules/prefer_final_fields_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -27,7 +28,7 @@
 ''',
       [
         // No Lint.
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 35, 2),
+        error(diag.extensionTypeDeclaresInstanceField, 35, 2),
       ],
     );
   }
@@ -149,7 +150,7 @@
 ''',
       [
         // No Lint.
-        error(CompileTimeErrorCode.nonFinalFieldInEnum, 24, 2),
+        error(diag.nonFinalFieldInEnum, 24, 2),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_final_locals_test.dart b/pkg/linter/test/rules/prefer_final_locals_test.dart
index a91df6c..73860260 100644
--- a/pkg/linter/test/rules/prefer_final_locals_test.dart
+++ b/pkg/linter/test/rules/prefer_final_locals_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -607,7 +608,7 @@
 ''',
       [
         // No lint.
-        error(WarningCode.unnecessaryWildcardPattern, 79, 5),
+        error(diag.unnecessaryWildcardPattern, 79, 5),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_final_parameters_test.dart b/pkg/linter/test/rules/prefer_final_parameters_test.dart
index 56db5ce..037f080 100644
--- a/pkg/linter/test/rules/prefer_final_parameters_test.dart
+++ b/pkg/linter/test/rules/prefer_final_parameters_test.dart
@@ -2,20 +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.
 
-import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(PreferFinalParametersBeforePrimaryConstructorsTest);
     defineReflectiveTests(PreferFinalParametersTest);
     // TODO(srawlins): Add tests of abstract functions.
   });
 }
 
 @reflectiveTest
-class PreferFinalParametersTest extends LintRuleTest {
+class PreferFinalParametersBeforePrimaryConstructorsTest extends LintRuleTest {
+  @override
+  List<String> get experiments => super.experiments
+      .where(
+        (experiment) => experiment != Feature.primary_constructors.enableString,
+      )
+      .toList();
+
   @override
   String get lintRule => LintNames.prefer_final_parameters;
 
@@ -340,7 +349,7 @@
       [
         // No lint.
         // https://github.com/dart-lang/language/blob/main/working/wildcards/feature-specification.md#declarations-that-are-capable-of-declaring-a-wildcard
-        error(ParserErrorCode.privateNamedNonFieldParameter, 22, 1),
+        error(diag.privateNamedNonFieldParameter, 22, 1),
       ],
     );
   }
@@ -372,7 +381,7 @@
       [
         // No lint.
         // https://github.com/dart-lang/language/blob/main/working/wildcards/feature-specification.md#declarations-that-are-capable-of-declaring-a-wildcard
-        error(ParserErrorCode.privateNamedNonFieldParameter, 24, 1),
+        error(diag.privateNamedNonFieldParameter, 24, 1),
       ],
     );
   }
@@ -408,3 +417,17 @@
 ''');
   }
 }
+
+@reflectiveTest
+class PreferFinalParametersTest extends LintRuleTest {
+  @override
+  String get lintRule => LintNames.prefer_final_parameters;
+
+  test_basicFunction() async {
+    await assertNoDiagnostics(r'''
+void f(String p) {
+  print(p);
+}
+''');
+  }
+}
diff --git a/pkg/linter/test/rules/prefer_generic_function_type_aliases_test.dart b/pkg/linter/test/rules/prefer_generic_function_type_aliases_test.dart
index a1a6173..6a04f29 100644
--- a/pkg/linter/test/rules/prefer_generic_function_type_aliases_test.dart
+++ b/pkg/linter/test/rules/prefer_generic_function_type_aliases_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -62,8 +62,8 @@
 ''',
       [
         // No lint
-        error(ParserErrorCode.expectedToken, 8, 3),
-        error(ParserErrorCode.missingTypedefParameters, 12, 0),
+        error(diag.expectedToken, 8, 3),
+        error(diag.missingTypedefParameters, 12, 0),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_is_empty_test.dart b/pkg/linter/test/rules/prefer_is_empty_test.dart
index 76215da..880becd 100644
--- a/pkg/linter/test/rules/prefer_is_empty_test.dart
+++ b/pkg/linter/test/rules/prefer_is_empty_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -32,7 +33,7 @@
       r'''
 var x = ([].length as int) > 0;
 ''',
-      [lint(8, 22), error(WarningCode.unnecessaryCast, 9, 16)],
+      [lint(8, 22), error(diag.unnecessaryCast, 9, 16)],
     );
   }
 
diff --git a/pkg/linter/test/rules/prefer_relative_imports_test.dart b/pkg/linter/test/rules/prefer_relative_imports_test.dart
index 57a1da6..c1163dc 100644
--- a/pkg/linter/test/rules/prefer_relative_imports_test.dart
+++ b/pkg/linter/test/rules/prefer_relative_imports_test.dart
@@ -16,15 +16,20 @@
 @reflectiveTest
 class PreferRelativeImportsTest extends LintRuleTest {
   @override
-  bool get addJsPackageDep => true;
+  String get lintRule => LintNames.prefer_relative_imports;
 
   @override
-  String get lintRule => LintNames.prefer_relative_imports;
+  void setUp() {
+    newPackage('foo').addFile('lib/foo.dart', r'''
+class Foo {}
+''');
+    super.setUp();
+  }
 
   test_externalPackage() async {
     await assertNoDiagnostics(r'''
-/// This provides [JS].
-import 'package:js/js.dart';
+/// This provides [Foo].
+import 'package:foo/foo.dart';
 ''');
   }
 
diff --git a/pkg/linter/test/rules/prefer_spread_collections_test.dart b/pkg/linter/test/rules/prefer_spread_collections_test.dart
index e928e9f..5a6c067 100644
--- a/pkg/linter/test/rules/prefer_spread_collections_test.dart
+++ b/pkg/linter/test/rules/prefer_spread_collections_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -29,11 +30,7 @@
 ''',
       [
         // No lint
-        error(
-          CompileTimeErrorCode.constInitializedWithNonConstantValue,
-          30,
-          18,
-        ),
+        error(diag.constInitializedWithNonConstantValue, 30, 18),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/prefer_void_to_null_test.dart b/pkg/linter/test/rules/prefer_void_to_null_test.dart
index 51807dc..5285f449 100644
--- a/pkg/linter/test/rules/prefer_void_to_null_test.dart
+++ b/pkg/linter/test/rules/prefer_void_to_null_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -134,7 +135,7 @@
   }
 }
 ''',
-      [error(WarningCode.patternNeverMatchesValueType, 49, 4)],
+      [error(diag.patternNeverMatchesValueType, 49, 4)],
     );
   }
 
diff --git a/pkg/linter/test/rules/public_member_api_docs_test.dart b/pkg/linter/test/rules/public_member_api_docs_test.dart
index 6d113f3..58fe419 100644
--- a/pkg/linter/test/rules/public_member_api_docs_test.dart
+++ b/pkg/linter/test/rules/public_member_api_docs_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/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/utilities/package_config_file_builder.dart';
 import 'package:analyzer_testing/utilities/utilities.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -44,7 +45,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 42, 1),
+        error(diag.extensionTypeDeclaresInstanceField, 42, 1),
       ],
     );
   }
@@ -248,7 +249,7 @@
 ''',
       [
         // Technically not in the private API but we can ignore that for testing.
-        error(WarningCode.invalidInternalAnnotation, 35, 8),
+        error(diag.invalidInternalAnnotation, 35, 8),
       ],
     );
   }
@@ -270,7 +271,7 @@
 ''',
       [
         // Technically not in the private API but we can ignore that for testing.
-        error(WarningCode.invalidInternalAnnotation, 35, 8),
+        error(diag.invalidInternalAnnotation, 35, 8),
       ],
     );
   }
@@ -290,7 +291,7 @@
 ''',
       [
         // Technically not in the private API but we can ignore that for testing.
-        error(WarningCode.invalidInternalAnnotation, 35, 8),
+        error(diag.invalidInternalAnnotation, 35, 8),
       ],
     );
   }
@@ -306,7 +307,7 @@
 ''',
       [
         // Technically not in the private API but we can ignore that for testing.
-        error(WarningCode.invalidInternalAnnotation, 35, 8),
+        error(diag.invalidInternalAnnotation, 35, 8),
       ],
     );
   }
@@ -326,7 +327,7 @@
 ''',
       [
         // Technically not in the private API but we can ignore that for testing.
-        error(WarningCode.invalidInternalAnnotation, 35, 8),
+        error(diag.invalidInternalAnnotation, 35, 8),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/sort_unnamed_constructors_first_test.dart b/pkg/linter/test/rules/sort_unnamed_constructors_first_test.dart
index cc255c8..65eb65a 100644
--- a/pkg/linter/test/rules/sort_unnamed_constructors_first_test.dart
+++ b/pkg/linter/test/rules/sort_unnamed_constructors_first_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -88,7 +89,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.duplicateConstructorDefault, 46, 1),
+        error(diag.duplicateConstructorDefault, 46, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/strict_top_level_inference_test.dart b/pkg/linter/test/rules/strict_top_level_inference_test.dart
index bab7074..a055977 100644
--- a/pkg/linter/test/rules/strict_top_level_inference_test.dart
+++ b/pkg/linter/test/rules/strict_top_level_inference_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -582,7 +583,7 @@
 ''',
       [
         // In the presense of this error, we do not report.
-        error(CompileTimeErrorCode.noCombinedSuperSignature, 104, 1),
+        error(diag.noCombinedSuperSignature, 104, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/tighten_type_of_initializing_formals_test.dart b/pkg/linter/test/rules/tighten_type_of_initializing_formals_test.dart
index 4820e08..4e63063 100644
--- a/pkg/linter/test/rules/tighten_type_of_initializing_formals_test.dart
+++ b/pkg/linter/test/rules/tighten_type_of_initializing_formals_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -96,8 +97,8 @@
 ''',
       [
         // No lint
-        error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 53, 7),
-        error(WarningCode.unnecessaryNullComparisonNeverNullTrue, 93, 7),
+        error(diag.unnecessaryNullComparisonNeverNullTrue, 53, 7),
+        error(diag.unnecessaryNullComparisonNeverNullTrue, 93, 7),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/type_init_formals_test.dart b/pkg/linter/test/rules/type_init_formals_test.dart
index ff5f0d3..f1618b7 100644
--- a/pkg/linter/test/rules/type_init_formals_test.dart
+++ b/pkg/linter/test/rules/type_init_formals_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -28,11 +29,7 @@
 ''',
       [
         // No lint
-        error(
-          CompileTimeErrorCode.fieldInitializingFormalNotAssignable,
-          49,
-          24,
-        ),
+        error(diag.fieldInitializingFormalNotAssignable, 49, 24),
       ],
     );
   }
@@ -46,11 +43,7 @@
 ''',
       [
         // No lint
-        error(
-          CompileTimeErrorCode.initializingFormalForNonExistentField,
-          26,
-          10,
-        ),
+        error(diag.initializingFormalForNonExistentField, 26, 10),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/type_literal_in_constant_pattern_test.dart b/pkg/linter/test/rules/type_literal_in_constant_pattern_test.dart
index 1632e06..b227983 100644
--- a/pkg/linter/test/rules/type_literal_in_constant_pattern_test.dart
+++ b/pkg/linter/test/rules/type_literal_in_constant_pattern_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -32,7 +33,7 @@
   if (x case 0) {}
 }
 ''',
-      [error(WarningCode.constantPatternNeverMatchesValueType, 30, 1)],
+      [error(diag.constantPatternNeverMatchesValueType, 30, 1)],
     );
   }
 
diff --git a/pkg/linter/test/rules/unawaited_futures_test.dart b/pkg/linter/test/rules/unawaited_futures_test.dart
index cdd4dd1..3c684f3 100644
--- a/pkg/linter/test/rules/unawaited_futures_test.dart
+++ b/pkg/linter/test/rules/unawaited_futures_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -351,7 +352,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.undefinedIdentifier, 59, 3),
+        error(diag.undefinedIdentifier, 59, 3),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/unnecessary_async_test.dart b/pkg/linter/test/rules/unnecessary_async_test.dart
index 675631f..79d2b25 100644
--- a/pkg/linter/test/rules/unnecessary_async_test.dart
+++ b/pkg/linter/test/rules/unnecessary_async_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -322,7 +323,7 @@
       r'''
 Future<int?>? f() async {}
 ''',
-      [error(WarningCode.bodyMightCompleteNormallyNullable, 14, 1)],
+      [error(diag.bodyMightCompleteNormallyNullable, 14, 1)],
     );
   }
 
diff --git a/pkg/linter/test/rules/unnecessary_breaks_test.dart b/pkg/linter/test/rules/unnecessary_breaks_test.dart
index b56c76c..000815f 100644
--- a/pkg/linter/test/rules/unnecessary_breaks_test.dart
+++ b/pkg/linter/test/rules/unnecessary_breaks_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -70,7 +71,7 @@
 ''',
       [
         // No lint.
-        error(WarningCode.deadCode, 86, 8),
+        error(diag.deadCode, 86, 8),
       ],
     );
   }
@@ -188,7 +189,7 @@
 ''',
       [
         // No lint.
-        error(WarningCode.deadCode, 58, 8),
+        error(diag.deadCode, 58, 8),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/unnecessary_constructor_name_test.dart b/pkg/linter/test/rules/unnecessary_constructor_name_test.dart
index 4e02e24..0ecaaa9 100644
--- a/pkg/linter/test/rules/unnecessary_constructor_name_test.dart
+++ b/pkg/linter/test/rules/unnecessary_constructor_name_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -49,7 +50,7 @@
 }
 ''',
       [
-        error(CompileTimeErrorCode.duplicateConstructorDefault, 19, 5),
+        error(diag.duplicateConstructorDefault, 19, 5),
         // A lint should likely not get reported here since we're already
         // producing a compilation error.
       ],
@@ -73,7 +74,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.duplicateConstructorDefault, 28, 5),
+        error(diag.duplicateConstructorDefault, 28, 5),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/unnecessary_ignore_test.dart b/pkg/linter/test/rules/unnecessary_ignore_test.dart
index 2f8b1e6e..724819f 100644
--- a/pkg/linter/test/rules/unnecessary_ignore_test.dart
+++ b/pkg/linter/test/rules/unnecessary_ignore_test.dart
@@ -74,6 +74,26 @@
     );
   }
 
+  test_file_necessaryIgnore_sharedName() async {
+    // Note: the diagnostic's shared name is `invalid_null_aware_operator`, but
+    // its unique name is `invalid_null_aware_operator_after_short_circuit`, so
+    // this test specifically exercises the shared name of the diagnostic.
+    await assertDiagnostics(r'''
+// ignore_for_file: invalid_null_aware_operator
+f(int? x) => x?.abs()?.isEven;
+''', []);
+  }
+
+  test_file_necessaryIgnore_uniqueName() async {
+    // Note: the diagnostic's shared name is `invalid_null_aware_operator`, but
+    // its unique name is `invalid_null_aware_operator_after_short_circuit`, so
+    // this test specifically exercises the unique name of the diagnostic.
+    await assertDiagnostics(r'''
+// ignore_for_file: invalid_null_aware_operator_after_short_circuit
+f(int? x) => x?.abs()?.isEven;
+''', []);
+  }
+
   test_file_unrecognizedDiagnostic() async {
     await assertNoDiagnostics(r'''
 // ignore_for_file: undefined_diagnostic_code
@@ -91,6 +111,26 @@
     );
   }
 
+  test_line_necessaryIgnore_sharedName() async {
+    // Note: the diagnostic's shared name is `invalid_null_aware_operator`, but
+    // its unique name is `invalid_null_aware_operator_after_short_circuit`, so
+    // this test specifically exercises the shared name of the diagnostic.
+    await assertDiagnostics(r'''
+// ignore: invalid_null_aware_operator
+f(int? x) => x?.abs()?.isEven;
+''', []);
+  }
+
+  test_line_necessaryIgnore_uniqueName() async {
+    // Note: the diagnostic's shared name is `invalid_null_aware_operator`, but
+    // its unique name is `invalid_null_aware_operator_after_short_circuit`, so
+    // this test specifically exercises the unique name of the diagnostic.
+    await assertDiagnostics(r'''
+// ignore: invalid_null_aware_operator_after_short_circuit
+f(int? x) => x?.abs()?.isEven;
+''', []);
+  }
+
   test_line_unrecognizedDiagnostic() async {
     await assertNoDiagnostics(r'''
 // ignore: undefined_diagnostic_code
diff --git a/pkg/linter/test/rules/unnecessary_null_checks_test.dart b/pkg/linter/test/rules/unnecessary_null_checks_test.dart
index a514789..54a1d8f 100644
--- a/pkg/linter/test/rules/unnecessary_null_checks_test.dart
+++ b/pkg/linter/test/rules/unnecessary_null_checks_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -24,10 +25,7 @@
   i = await future!;
 }
 ''',
-      [
-        error(StaticWarningCode.unnecessaryNonNullAssertion, 78, 1),
-        lint(78, 1),
-      ],
+      [error(diag.unnecessaryNonNullAssertion, 78, 1), lint(78, 1)],
     );
   }
 
@@ -377,7 +375,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.undefinedFunction, 22, 1),
+        error(diag.undefinedFunction, 22, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/unnecessary_null_in_if_null_operators_test.dart b/pkg/linter/test/rules/unnecessary_null_in_if_null_operators_test.dart
index 1e4b6c1..e7e2064 100644
--- a/pkg/linter/test/rules/unnecessary_null_in_if_null_operators_test.dart
+++ b/pkg/linter/test/rules/unnecessary_null_in_if_null_operators_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -24,10 +25,7 @@
   var x = 1 ?? 1;
 }
 ''',
-      [
-        error(WarningCode.deadCode, 23, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 26, 1),
-      ],
+      [error(diag.deadCode, 23, 4), error(diag.deadNullAwareExpression, 26, 1)],
     );
   }
 
@@ -50,9 +48,9 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 23, 7),
+        error(diag.deadCode, 23, 7),
         lint(26, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 26, 4),
+        error(diag.deadNullAwareExpression, 26, 4),
       ],
     );
   }
@@ -68,9 +66,9 @@
 }
 ''',
       [
-        error(WarningCode.deadCode, 32, 7),
+        error(diag.deadCode, 32, 7),
         lint(35, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 35, 4),
+        error(diag.deadNullAwareExpression, 35, 4),
         lint(53, 4),
       ],
     );
@@ -87,8 +85,8 @@
 ''',
       [
         // No lint.
-        error(WarningCode.deadCode, 32, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 35, 1),
+        error(diag.deadCode, 32, 4),
+        error(diag.deadNullAwareExpression, 35, 1),
       ],
     );
   }
@@ -100,9 +98,9 @@
 var y = null ?? 1;
 ''',
       [
-        error(WarningCode.deadCode, 10, 7),
+        error(diag.deadCode, 10, 7),
         lint(13, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 13, 4),
+        error(diag.deadNullAwareExpression, 13, 4),
         lint(27, 4),
       ],
     );
@@ -115,8 +113,8 @@
 ''',
       [
         // No lint.
-        error(WarningCode.deadCode, 10, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 13, 1),
+        error(diag.deadCode, 10, 4),
+        error(diag.deadNullAwareExpression, 13, 1),
       ],
     );
   }
@@ -126,10 +124,7 @@
       r'''
 var x = 1 ?? 1;
 ''',
-      [
-        error(WarningCode.deadCode, 10, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 13, 1),
-      ],
+      [error(diag.deadCode, 10, 4), error(diag.deadNullAwareExpression, 13, 1)],
     );
   }
 
@@ -148,9 +143,9 @@
 var x = 1 ?? null;
 ''',
       [
-        error(WarningCode.deadCode, 10, 7),
+        error(diag.deadCode, 10, 7),
         lint(13, 4),
-        error(StaticWarningCode.deadNullAwareExpression, 13, 4),
+        error(diag.deadNullAwareExpression, 13, 4),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/unnecessary_parenthesis_test.dart b/pkg/linter/test/rules/unnecessary_parenthesis_test.dart
index 9704468..7e46562 100644
--- a/pkg/linter/test/rules/unnecessary_parenthesis_test.dart
+++ b/pkg/linter/test/rules/unnecessary_parenthesis_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -906,13 +907,7 @@
   (int,) r = (3);
 }
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          24,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 24, 3)],
     );
   }
 
@@ -925,13 +920,7 @@
 
 void g({required (int,) i}) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          18,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 18, 3)],
     );
   }
 
@@ -945,13 +934,7 @@
 
 void g((int,) i) {}
 ''',
-      [
-        error(
-          CompileTimeErrorCode.recordLiteralOnePositionalNoTrailingCommaByType,
-          15,
-          3,
-        ),
-      ],
+      [error(diag.recordLiteralOnePositionalNoTrailingCommaByType, 15, 3)],
     );
   }
 
diff --git a/pkg/linter/test/rules/unnecessary_string_escapes_test.dart b/pkg/linter/test/rules/unnecessary_string_escapes_test.dart
index b80456e..a859011 100644
--- a/pkg/linter/test/rules/unnecessary_string_escapes_test.dart
+++ b/pkg/linter/test/rules/unnecessary_string_escapes_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -214,8 +214,8 @@
 ''',
       [
         // Ensure linter does not crash.
-        error(ParserErrorCode.invalidUnicodeEscapeStarted, 27, 1),
-        error(ScannerErrorCode.unterminatedStringLiteral, 27, 1),
+        error(diag.invalidUnicodeEscapeStarted, 27, 1),
+        error(diag.unterminatedStringLiteral, 27, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/unnecessary_underscores_test.dart b/pkg/linter/test/rules/unnecessary_underscores_test.dart
index 8ec4f94..c14bcb5 100644
--- a/pkg/linter/test/rules/unnecessary_underscores_test.dart
+++ b/pkg/linter/test/rules/unnecessary_underscores_test.dart
@@ -17,6 +17,22 @@
   @override
   String get lintRule => 'unnecessary_underscores';
 
+  test_commentReferenceFunction() async {
+    await assertNoDiagnostics('''
+/// This is a reference to [__].
+void f(int __) {}
+''');
+  }
+
+  test_commentReferenceMethod() async {
+    await assertNoDiagnostics('''
+class C {
+  /// This is a reference to [__].
+  void m(int __) {}
+}
+''');
+  }
+
   test_enum_field_unused() async {
     await assertNoDiagnostics(r'''
 enum E {
diff --git a/pkg/linter/test/rules/unreachable_from_main_test.dart b/pkg/linter/test/rules/unreachable_from_main_test.dart
index 1985329..69294f3 100644
--- a/pkg/linter/test/rules/unreachable_from_main_test.dart
+++ b/pkg/linter/test/rules/unreachable_from_main_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -1694,7 +1695,7 @@
 ''',
       [
         lint(109, 1),
-        error(WarningCode.invalidWidgetPreviewApplication, 177, 7),
+        error(diag.invalidWidgetPreviewApplication, 177, 7),
         lint(196, 3),
       ],
     );
@@ -1729,7 +1730,7 @@
   const B();
 }
 ''',
-      [lint(70, 1), error(WarningCode.invalidWidgetPreviewApplication, 77, 7)],
+      [lint(70, 1), error(diag.invalidWidgetPreviewApplication, 77, 7)],
     );
   }
 
@@ -1749,7 +1750,7 @@
 ''',
       [
         lint(70, 1),
-        error(WarningCode.invalidWidgetPreviewApplication, 77, 7),
+        error(diag.invalidWidgetPreviewApplication, 77, 7),
         lint(122, 1),
       ],
     );
@@ -1779,10 +1780,10 @@
 ''',
       [
         lint(168, 1),
-        error(WarningCode.invalidWidgetPreviewApplication, 175, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 218, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 241, 7),
-        error(WarningCode.invalidWidgetPreviewApplication, 291, 7),
+        error(diag.invalidWidgetPreviewApplication, 175, 7),
+        error(diag.invalidWidgetPreviewApplication, 218, 7),
+        error(diag.invalidWidgetPreviewApplication, 241, 7),
+        error(diag.invalidWidgetPreviewApplication, 291, 7),
       ],
     );
   }
@@ -1797,7 +1798,7 @@
 @Preview()
 void f6() {}
 ''',
-      [error(WarningCode.invalidWidgetPreviewApplication, 65, 7)],
+      [error(diag.invalidWidgetPreviewApplication, 65, 7)],
     );
   }
 
diff --git a/pkg/linter/test/rules/unrelated_type_equality_checks_test.dart b/pkg/linter/test/rules/unrelated_type_equality_checks_test.dart
index f8e6c3c..e23bdec 100644
--- a/pkg/linter/test/rules/unrelated_type_equality_checks_test.dart
+++ b/pkg/linter/test/rules/unrelated_type_equality_checks_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -298,8 +299,8 @@
 ''',
       [
         // No lint.
-        error(WarningCode.unnecessaryNullComparisonNeverNullFalse, 23, 7),
-        error(WarningCode.deadCode, 32, 2),
+        error(diag.unnecessaryNullComparisonNeverNullFalse, 23, 7),
+        error(diag.deadCode, 32, 2),
       ],
     );
   }
@@ -323,10 +324,7 @@
   };
 }
 ''',
-      [
-        error(CompileTimeErrorCode.nonExhaustiveSwitchExpression, 49, 6),
-        lint(69, 10),
-      ],
+      [error(diag.nonExhaustiveSwitchExpression, 49, 6), lint(69, 10)],
     );
   }
 
@@ -341,7 +339,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.nonExhaustiveSwitchExpression, 27, 6),
+        error(diag.nonExhaustiveSwitchExpression, 27, 6),
       ],
     );
   }
@@ -357,10 +355,7 @@
   };
 }
 ''',
-      [
-        error(CompileTimeErrorCode.nonExhaustiveSwitchExpression, 49, 6),
-        lint(69, 10),
-      ],
+      [error(diag.nonExhaustiveSwitchExpression, 49, 6), lint(69, 10)],
     );
   }
 
@@ -375,7 +370,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.nonExhaustiveSwitchExpression, 33, 6),
+        error(diag.nonExhaustiveSwitchExpression, 33, 6),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/use_build_context_synchronously_test.dart b/pkg/linter/test/rules/use_build_context_synchronously_test.dart
index 03392d4..e6de101 100644
--- a/pkg/linter/test/rules/use_build_context_synchronously_test.dart
+++ b/pkg/linter/test/rules/use_build_context_synchronously_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
 import 'package:linter/src/rules/use_build_context_synchronously.dart';
@@ -2613,7 +2614,7 @@
       [
         // Just don't crash when one argument references BuildContext, and not all
         // positional arguments are given.
-        error(CompileTimeErrorCode.argumentTypeNotAssignable, 95, 36),
+        error(diag.argumentTypeNotAssignable, 95, 36),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/use_enums_test.dart b/pkg/linter/test/rules/use_enums_test.dart
index 0ced68e..a42c255 100644
--- a/pkg/linter/test/rules/use_enums_test.dart
+++ b/pkg/linter/test/rules/use_enums_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -141,9 +142,9 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.recursiveConstantConstructor, 76, 2),
+        error(diag.recursiveConstantConstructor, 76, 2),
         // We are reversing the deprecation: This code will remain a `HintCode`.
-        error(WarningCode.unusedElementParameter, 83, 1),
+        error(diag.unusedElementParameter, 83, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/use_is_even_rather_than_modulo_test.dart b/pkg/linter/test/rules/use_is_even_rather_than_modulo_test.dart
index a4e842e..8f7e37d 100644
--- a/pkg/linter/test/rules/use_is_even_rather_than_modulo_test.dart
+++ b/pkg/linter/test/rules/use_is_even_rather_than_modulo_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -113,7 +114,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.undefinedClass, 0, 5),
+        error(diag.undefinedClass, 0, 5),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/use_late_for_private_fields_and_variables_test.dart b/pkg/linter/test/rules/use_late_for_private_fields_and_variables_test.dart
index 73a0882..9217b32 100644
--- a/pkg/linter/test/rules/use_late_for_private_fields_and_variables_test.dart
+++ b/pkg/linter/test/rules/use_late_for_private_fields_and_variables_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -26,7 +27,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.extensionTypeDeclaresInstanceField, 33, 2),
+        error(diag.extensionTypeDeclaresInstanceField, 33, 2),
       ],
     );
   }
@@ -116,7 +117,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 54, 2),
+        error(diag.patternAssignmentNotLocalVariable, 54, 2),
       ],
     );
   }
@@ -133,7 +134,7 @@
 ''',
       [
         // No lint.
-        error(CompileTimeErrorCode.patternAssignmentNotLocalVariable, 31, 2),
+        error(diag.patternAssignmentNotLocalVariable, 31, 2),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/use_null_aware_elements_test.dart b/pkg/linter/test/rules/use_null_aware_elements_test.dart
index 4010e89..7202347 100644
--- a/pkg/linter/test/rules/use_null_aware_elements_test.dart
+++ b/pkg/linter/test/rules/use_null_aware_elements_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -31,16 +32,8 @@
 ''',
       [
         // No lints, since `x` is not promotable.
-        error(
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-          84,
-          1,
-        ),
-        error(
-          CompileTimeErrorCode.listElementTypeNotAssignableNullability,
-          106,
-          1,
-        ),
+        error(diag.listElementTypeNotAssignableNullability, 84, 1),
+        error(diag.listElementTypeNotAssignableNullability, 106, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/rules/use_string_in_part_of_directives_test.dart b/pkg/linter/test/rules/use_string_in_part_of_directives_test.dart
index ba89b14..d8a745c 100644
--- a/pkg/linter/test/rules/use_string_in_part_of_directives_test.dart
+++ b/pkg/linter/test/rules/use_string_in_part_of_directives_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.
 
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -30,7 +30,7 @@
       r'''
 part of lib;
 ''',
-      [error(ParserErrorCode.partOfName, 8, 3)],
+      [error(diag.partOfName, 8, 3)],
     );
   }
 
diff --git a/pkg/linter/test/rules/void_checks_test.dart b/pkg/linter/test/rules/void_checks_test.dart
index f512503..1e9a3e5 100644
--- a/pkg/linter/test/rules/void_checks_test.dart
+++ b/pkg/linter/test/rules/void_checks_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/diagnostic/diagnostic.dart' as diag;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../rule_test_support.dart';
@@ -62,7 +63,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.extraPositionalArguments, 57, 1),
+        error(diag.extraPositionalArguments, 57, 1),
       ],
     );
   }
@@ -372,7 +373,7 @@
 ''',
       [
         // No lint
-        error(CompileTimeErrorCode.returnOfInvalidTypeFromFunction, 26, 1),
+        error(diag.returnOfInvalidTypeFromFunction, 26, 1),
       ],
     );
   }
diff --git a/pkg/linter/test/scope_util_test.dart b/pkg/linter/test/scope_util_test.dart
index cc96132..1f68f16 100644
--- a/pkg/linter/test/scope_util_test.dart
+++ b/pkg/linter/test/scope_util_test.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
 import 'package:analyzer/src/test_utilities/find_element2.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
 import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
@@ -38,23 +39,6 @@
     return result;
   }
 
-  test_class_getter_different_fromExtends_thisClassSetter() async {
-    await assertNoDiagnostics('''
-class A {
-  int get foo => 0;
-}
-
-class B extends A {
-  set foo(int _) {}
-
-  void bar() {
-    this.foo;
-  }
-}
-''');
-    _checkGetterDifferent(findElement.setter('foo'));
-  }
-
   test_class_getter_different_importScope() async {
     newFile('$testPackageLibPath/a.dart', r'''
 set foo(int _) {}
@@ -73,7 +57,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 8)],
+      [error(diag.unusedImport, 7, 8)],
     );
     var import = findElement.importFind('package:test/a.dart');
     _checkGetterDifferent(import.topSet('foo'));
@@ -122,6 +106,36 @@
     _checkGetterNone();
   }
 
+  test_class_getter_none_fromThisClass() async {
+    await assertNoDiagnostics('''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  set foo(int _) {}
+
+  void bar() {
+    this.foo;
+  }
+}
+''');
+    _checkGetterNone();
+  }
+
+  test_class_getter_none_thisClass() async {
+    await assertNoDiagnostics('''
+class A {
+  int get foo => 0;
+
+  void bar() {
+    this.foo;
+  }
+}
+''');
+    _checkGetterNone();
+  }
+
   test_class_getter_requested_importScope() async {
     newFile('$testPackageLibPath/a.dart', r'''
 int get foo => 0;
@@ -140,25 +154,12 @@
   }
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 8)],
+      [error(diag.unusedImport, 7, 8)],
     );
     var import = findElement.importFind('package:test/a.dart');
     _checkGetterRequested(import.topGet('foo'));
   }
 
-  test_class_getter_requested_thisClass() async {
-    await assertNoDiagnostics('''
-class A {
-  int get foo => 0;
-
-  void bar() {
-    this.foo;
-  }
-}
-''');
-    _checkGetterRequested(findElement.getter('foo'));
-  }
-
   test_class_method_different_fromExtends_topSetter() async {
     await assertNoDiagnostics('''
 class A {
@@ -206,6 +207,19 @@
     _checkMethodNone();
   }
 
+  test_class_method_none_thisClass() async {
+    await assertNoDiagnostics('''
+class A {
+  void foo() {}
+
+  void bar() {
+    this.foo();
+  }
+}
+''');
+    _checkMethodNone();
+  }
+
   test_class_method_requested_formalParameter_constructor() async {
     await assertNoDiagnostics('''
 class A {
@@ -301,7 +315,7 @@
   }
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 8)],
+      [error(diag.unusedImport, 7, 8)],
     );
     var import = findElement.importFind('package:test/a.dart');
     _checkMethodRequested(import.topFunction('foo'));
@@ -476,19 +490,6 @@
     _checkMethodRequestedLocalVariable();
   }
 
-  test_class_method_requested_thisClass() async {
-    await assertNoDiagnostics('''
-class A {
-  void foo() {}
-
-  void bar() {
-    this.foo();
-  }
-}
-''');
-    _checkMethodRequested(findElement.method('foo'));
-  }
-
   test_class_method_requested_typeParameter_method() async {
     await assertNoDiagnostics('''
 class A {
@@ -574,6 +575,34 @@
     _checkSetterNone();
   }
 
+  test_class_setter_none_thisClass() async {
+    await assertNoDiagnostics('''
+class A {
+  set foo(int _) {}
+
+  void bar() {
+    this.foo = 0;
+  }
+}
+''');
+    _checkSetterNone();
+  }
+
+  test_class_setter_none_thisClass_topLevelFunction() async {
+    await assertNoDiagnostics('''
+class A {
+  set foo(int _) {}
+
+  void bar() {
+    this.foo = 0;
+  }
+}
+
+void foo() {}
+''');
+    _checkSetterNone();
+  }
+
   test_class_setter_requested_fromExtends_topLevelVariable() async {
     await assertNoDiagnostics('''
 class A {
@@ -609,40 +638,12 @@
   }
 }
 ''',
-      [error(WarningCode.unusedImport, 7, 8)],
+      [error(diag.unusedImport, 7, 8)],
     );
     var import = findElement.importFind('package:test/a.dart');
     _checkSetterRequested(import.topSet('foo'));
   }
 
-  test_class_setter_requested_thisClass() async {
-    await assertNoDiagnostics('''
-class A {
-  set foo(int _) {}
-
-  void bar() {
-    this.foo = 0;
-  }
-}
-''');
-    _checkSetterRequested(findElement.setter('foo'));
-  }
-
-  test_class_setter_requested_thisClass_topLevelFunction() async {
-    await assertNoDiagnostics('''
-class A {
-  set foo(int _) {}
-
-  void bar() {
-    this.foo = 0;
-  }
-}
-
-void foo() {}
-''');
-    _checkSetterRequested(findElement.setter('foo'));
-  }
-
   test_class_typeParameter_inConstructor() async {
     await assertNoDiagnostics('''
 class A<T> {
@@ -780,6 +781,19 @@
     _resultRequested(node, 'T', false, findElement.typeParameter('T'));
   }
 
+  test_mixin_method_none_thisClass() async {
+    await assertNoDiagnostics('''
+mixin M {
+  void foo() {}
+
+  void bar() {
+    this.foo();
+  }
+}
+''');
+    _checkMethodNone();
+  }
+
   test_mixin_method_requested_formalParameter_method() async {
     await assertNoDiagnostics('''
 mixin M {
@@ -793,19 +807,6 @@
     _checkMethodRequested(findElement.parameter('foo'));
   }
 
-  test_mixin_method_requested_thisClass() async {
-    await assertNoDiagnostics('''
-mixin M {
-  void foo() {}
-
-  void bar() {
-    this.foo();
-  }
-}
-''');
-    _checkMethodRequested(findElement.method('foo'));
-  }
-
   test_mixin_typeParameter_inField() async {
     await assertNoDiagnostics('''
 mixin A<T> {
diff --git a/pkg/linter/test/verify_generated_files_test.dart b/pkg/linter/test/verify_generated_files_test.dart
index 4077d9c..fbebff7 100644
--- a/pkg/linter/test/verify_generated_files_test.dart
+++ b/pkg/linter/test/verify_generated_files_test.dart
@@ -20,16 +20,5 @@
             "Run 'dart run pkg/linter/tool/generate_lints.dart' to update.",
       );
     });
-
-    test('ensure lint codes are up to date', () async {
-      expect(
-        await generatedCodesFile.check(pkg_root.packageRoot),
-        isTrue,
-        reason:
-            "The generated lint codes at 'lib/src/lint_codes.g.dart' need "
-            'to be regenerated. '
-            "Run 'dart run pkg/linter/tool/generate_lints.dart' to update.",
-      );
-    });
   });
 }
diff --git a/pkg/linter/tool/checks/rules/no_solo_tests.dart b/pkg/linter/tool/checks/rules/no_solo_tests.dart
index 3a59445..37394db 100644
--- a/pkg/linter/tool/checks/rules/no_solo_tests.dart
+++ b/pkg/linter/tool/checks/rules/no_solo_tests.dart
@@ -9,10 +9,10 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:linter/src/analyzer.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 
 class NoSoloTests extends AnalysisRule {
-  static const DiagnosticCode code = LinterLintCode.noSoloTests;
+  static const DiagnosticCode code = diag.noSoloTests;
 
   NoSoloTests()
     : super(name: 'no_solo_tests', description: "Don't commit soloed tests.");
diff --git a/pkg/linter/tool/checks/rules/no_trailing_spaces.dart b/pkg/linter/tool/checks/rules/no_trailing_spaces.dart
index e769f9d..47ed46e 100644
--- a/pkg/linter/tool/checks/rules/no_trailing_spaces.dart
+++ b/pkg/linter/tool/checks/rules/no_trailing_spaces.dart
@@ -9,10 +9,10 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:linter/src/analyzer.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 
 class NoTrailingSpaces extends AnalysisRule {
-  static const DiagnosticCode code = LinterLintCode.noTrailingSpaces;
+  static const DiagnosticCode code = diag.noTrailingSpaces;
 
   NoTrailingSpaces()
     : super(
diff --git a/pkg/linter/tool/checks/rules/visit_registered_nodes.dart b/pkg/linter/tool/checks/rules/visit_registered_nodes.dart
index 47ffda6..0a53d13 100644
--- a/pkg/linter/tool/checks/rules/visit_registered_nodes.dart
+++ b/pkg/linter/tool/checks/rules/visit_registered_nodes.dart
@@ -10,10 +10,10 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:linter/src/analyzer.dart';
+import 'package:linter/src/diagnostic.dart' as diag;
 
 class VisitRegisteredNodes extends AnalysisRule {
-  static const DiagnosticCode code = LinterLintCode.visitRegisteredNodes;
+  static const DiagnosticCode code = diag.visitRegisteredNodes;
 
   VisitRegisteredNodes()
     : super(
diff --git a/pkg/linter/tool/generate_lints.dart b/pkg/linter/tool/generate_lints.dart
index 5cca581..9ed89a5 100644
--- a/pkg/linter/tool/generate_lints.dart
+++ b/pkg/linter/tool/generate_lints.dart
@@ -7,7 +7,6 @@
 library;
 
 import 'package:analyzer_testing/package_root.dart' as pkg_root;
-import 'package:analyzer_utilities/analyzer_messages.dart';
 import 'package:analyzer_utilities/tools.dart';
 
 import 'messages_info.dart';
@@ -15,138 +14,11 @@
 void main() async {
   await GeneratedContent.generateAll(pkg_root.packageRoot, [
     generatedNamesFile,
-    generatedCodesFile,
   ]);
 }
 
 const String generatedNamesPath = 'linter/lib/src/lint_names.g.dart';
 
-GeneratedFile get generatedCodesFile =>
-    GeneratedFile(generatedLintCodesPath, (pkgRoot) async {
-      var out = StringBuffer('''
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for 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.
-//
-// Instead modify 'pkg/linter/messages.yaml' and run
-// 'dart run pkg/linter/tool/generate_lints.dart' to update.
-
-// Generated comments don't quite align with flutter style.
-// ignore_for_file: flutter_style_todos
-
-// Generator currently outputs double quotes for simplicity.
-// ignore_for_file: prefer_single_quotes
-
-// Generated `withArguments` methods always use block bodies for simplicity.
-// ignore_for_file: prefer_expression_function_bodies
-
-part of 'lint_codes.dart';
-
-class LinterLintCode extends LintCodeWithExpectedTypes {
-''');
-      var memberAccumulator = MemberAccumulator();
-      for (var message in lintMessages) {
-        var analyzerCode = message.analyzerCode;
-        var lintName = message.sharedName ?? analyzerCode.snakeCaseName;
-        if (messagesRuleInfo[lintName]!.removed) continue;
-        message.toAnalyzerCode(
-          sharedNameReference: 'LintNames.$lintName',
-          memberAccumulator: memberAccumulator,
-        );
-      }
-
-      var removedLintName = 'removedLint';
-      memberAccumulator.constants[removedLintName] =
-          '''
-  /// A lint code that removed lints can specify as their `lintCode`.
-  ///
-  /// Avoid other usages as it should be made unnecessary and removed.
-  static const LintCode $removedLintName = LinterLintCode.internal(
-    name: 'removed_lint',
-    problemMessage: 'Removed lint.',
-    expectedTypes: [],
-    uniqueNameCheck: 'LintCode.removed_lint',
-  );
-''';
-
-      memberAccumulator.constructors[''] = '''
-  @Deprecated('Please use LintCode instead')
-  const LinterLintCode(
-    String name,
-    String problemMessage, {
-    super.expectedTypes,
-    super.correctionMessage,
-    super.hasPublishedDocs,
-    String? uniqueName,
-  }) : super(
-         name: name,
-         problemMessage: problemMessage,
-         uniqueName: 'LintCode.\${uniqueName ?? name}',
-         uniqueNameCheck: null
-       );
-''';
-
-      memberAccumulator.constructors['internal'] = '''
-  const LinterLintCode.internal({
-    required super.name,
-    required super.problemMessage,
-    required super.uniqueNameCheck,
-    super.expectedTypes,
-    super.correctionMessage,
-    super.hasPublishedDocs,
-    String? uniqueName,
-  }) : super(uniqueName: 'LintCode.\${uniqueName ?? name}');
-''';
-
-      memberAccumulator.accessors['url'] = '''
-  @override
-  String get url {
-    if (hasPublishedDocs) {
-      return 'https://dart.dev/diagnostics/\$name';
-    }
-    return 'https://dart.dev/lints/\$name';
-  }
-''';
-      memberAccumulator.writeTo(out);
-      out.writeln('}');
-
-      out.write('''
-
-final class LinterLintTemplate<T extends Function> extends LinterLintCode {
-  final T withArguments;
-
-  /// Initialize a newly created error code to have the given [name].
-  const LinterLintTemplate({
-    required super.name,
-    required super.problemMessage,
-    required this.withArguments,
-    required super.expectedTypes,
-    required String super.uniqueNameCheck,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.uniqueName,
-  }) : super.internal();
-}
-
-final class LinterLintWithoutArguments extends LinterLintCode
-    with DiagnosticWithoutArguments {
-  /// Initialize a newly created error code to have the given [name].
-  const LinterLintWithoutArguments({
-    required super.name,
-    required super.problemMessage,
-    required super.expectedTypes,
-    required String super.uniqueNameCheck,
-    super.correctionMessage,
-    super.hasPublishedDocs = false,
-    super.uniqueName,
-  }) : super.internal();
-}
-''');
-      return out.toString();
-    });
-
 GeneratedFile get generatedNamesFile =>
     GeneratedFile(generatedNamesPath, (pkgRoot) async {
       var out = StringBuffer('''
diff --git a/pkg/linter/tool/machine.dart b/pkg/linter/tool/machine.dart
index 12c0fc4..631c216 100644
--- a/pkg/linter/tool/machine.dart
+++ b/pkg/linter/tool/machine.dart
@@ -68,7 +68,7 @@
         'incompatible': rule.incompatibleRules,
         'sets': const [],
         'fixStatus':
-            fixStatusMap[rule.diagnosticCodes.first.uniqueName] ??
+            fixStatusMap[rule.diagnosticCodes.first.uniqueName.suffix] ??
             'unregistered',
         'details': info.deprecatedDetails,
         'sinceDartSdk': _versionToString(info.states.first.since),
@@ -96,7 +96,7 @@
   var yaml = loadYamlNode(contents) as YamlMap;
   return <String, String>{
     for (var MapEntry(key: String code, :YamlMap value) in yaml.entries)
-      if (code.startsWith('LintCode.')) code: value['status'] as String,
+      code: value['status'] as String,
   };
 }
 
@@ -105,3 +105,19 @@
 
   return '${version.major}.${version.minor}';
 }
+
+class _Error extends Error {
+  final String message;
+
+  _Error(this.message);
+
+  @override
+  String toString() => message;
+}
+
+extension on String {
+  String get suffix => switch (split('.')) {
+    [_, var s] => s,
+    _ => throw _Error('Expected ErrorClass.ERROR_CODE, found $this'),
+  };
+}
diff --git a/pkg/linter/tool/machine/rules.json b/pkg/linter/tool/machine/rules.json
index 1cd652b..e12f46a 100644
--- a/pkg/linter/tool/machine/rules.json
+++ b/pkg/linter/tool/machine/rules.json
@@ -143,7 +143,7 @@
     "state": "stable",
     "incompatible": [],
     "sets": [],
-    "fixStatus": "needsFix",
+    "fixStatus": "hasFix",
     "details": "**AVOID** `bool` literals in conditional expressions.\n\n**BAD:**\n```dart\ncondition ? true : boolExpression\ncondition ? false : boolExpression\ncondition ? boolExpression : true\ncondition ? boolExpression : false\n```\n\n**GOOD:**\n```dart\ncondition || boolExpression\n!condition && boolExpression\n!condition || boolExpression\ncondition && boolExpression\n```",
     "sinceDartSdk": "2.0"
   },
@@ -1922,14 +1922,14 @@
     "categories": [
       "style"
     ],
-    "state": "stable",
+    "state": "deprecated",
     "incompatible": [
       "unnecessary_final",
       "avoid_final_parameters"
     ],
     "sets": [],
     "fixStatus": "hasFix",
-    "details": "**DO** prefer declaring parameters as final if they are not reassigned in\nthe function body.\n\nDeclaring parameters as final when possible is a good practice because it helps\navoid accidental reassignments.\n\n**BAD:**\n```dart\nvoid badParameter(String label) { // LINT\n  print(label);\n}\n```\n\n**GOOD:**\n```dart\nvoid goodParameter(final String label) { // OK\n  print(label);\n}\n```\n\n**BAD:**\n```dart\nvoid badExpression(int value) => print(value); // LINT\n```\n\n**GOOD:**\n```dart\nvoid goodExpression(final int value) => print(value); // OK\n```\n\n**BAD:**\n```dart\n[1, 4, 6, 8].forEach((value) => print(value + 2)); // LINT\n```\n\n**GOOD:**\n```dart\n[1, 4, 6, 8].forEach((final value) => print(value + 2)); // OK\n```\n\n**GOOD:**\n```dart\nvoid mutableParameter(String label) { // OK\n  print(label);\n  label = 'Hello Linter!';\n  print(label);\n}\n```",
+    "details": "**Note:** This lint rule was deprecated in Dart 3.11 and\nis set to be removed in a future release of the Dart SDK.\nIf you want to ensure parameters aren't reassigned in function bodies,\nconsider enabling the\n[`parameter_assignments`](https://dart.dev/lints/parameter_assignments)\nlint rule instead.\n\n**DO** prefer declaring parameters as final if they are not reassigned in\nthe function body.\n\nDeclaring parameters as final when possible is a good practice because it helps\navoid accidental reassignments.\n\n**BAD:**\n```dart\nvoid badParameter(String label) { // LINT\n  print(label);\n}\n```\n\n**GOOD:**\n```dart\nvoid goodParameter(final String label) { // OK\n  print(label);\n}\n```\n\n**BAD:**\n```dart\nvoid badExpression(int value) => print(value); // LINT\n```\n\n**GOOD:**\n```dart\nvoid goodExpression(final int value) => print(value); // OK\n```\n\n**BAD:**\n```dart\n[1, 4, 6, 8].forEach((value) => print(value + 2)); // LINT\n```\n\n**GOOD:**\n```dart\n[1, 4, 6, 8].forEach((final value) => print(value + 2)); // OK\n```\n\n**GOOD:**\n```dart\nvoid mutableParameter(String label) { // OK\n  print(label);\n  label = 'Hello Linter!';\n  print(label);\n}\n```",
     "sinceDartSdk": "2.14"
   },
   {
@@ -2276,6 +2276,19 @@
     "sinceDartSdk": "2.0"
   },
   {
+    "name": "remove_deprecations_in_breaking_versions",
+    "description": "Deprecation in major version.",
+    "categories": [
+      "publicInterface"
+    ],
+    "state": "stable",
+    "incompatible": [],
+    "sets": [],
+    "fixStatus": "needsFix",
+    "details": "**DO** Remove deprecated elements in breaking version numbers.\nBreaking version numbers are on the form `x.0.0` or `0.x.0`.\n\nFor example given a package with a `pubspec.yaml` file containing:\n\n```yaml\nname: p\nversion: 2.0.0\nenvironment:\n  sdk: ^3.9.0\n```\n\n**BAD:**\n```dart\n@deprecated\nvoid f() {}\n```\n\n**GOOD:**\n```dart\n// (f is removed).\n```\n\n**GOOD:**\n```yaml\nname: p\nversion: 1.0.1\nenvironment:\n  sdk: ^3.9.0\n```",
+    "sinceDartSdk": "3.10"
+  },
+  {
     "name": "require_trailing_commas",
     "description": "Use trailing commas for all parameter lists and argument lists.",
     "categories": [
@@ -3337,4 +3350,4 @@
     "details": "**DON'T** assign to `void`.\n\n**BAD:**\n```dart\nclass A<T> {\n  T value;\n  void test(T arg) { }\n}\n\nvoid main() {\n  A<void> a = A<void>();\n  a.value = 1; // LINT\n  a.test(1); // LINT\n}\n```",
     "sinceDartSdk": "2.0"
   }
-]
\ No newline at end of file
+]
diff --git a/pkg/linter/tool/messages_info.dart b/pkg/linter/tool/messages_info.dart
index 8b9807c..40fe517 100644
--- a/pkg/linter/tool/messages_info.dart
+++ b/pkg/linter/tool/messages_info.dart
@@ -391,6 +391,10 @@
             'stable' => RuleState.stable(since: state.version),
             'internal' => RuleState.internal(since: state.version),
             'deprecated' => RuleState.deprecated(since: state.version),
+            // Note: the reason `RuleState.removed` is deprecated is to
+            // encourage clients to use `AbstractAnalysisRule`, so this
+            // reference is ok.
+            // ignore: deprecated_member_use
             'removed' => RuleState.removed(since: state.version),
             _ => _throwLintError('Unexpected state name: ${state.name}.'),
           },
diff --git a/pkg/linter/tool/test_linter.dart b/pkg/linter/tool/test_linter.dart
index 745c0fb..af4b22d 100644
--- a/pkg/linter/tool/test_linter.dart
+++ b/pkg/linter/tool/test_linter.dart
@@ -66,6 +66,7 @@
         analysisOptions.lintRules = _rules;
       },
       enableLintRuleTiming: true,
+      withFineDependencies: true,
     );
 
     var result = <Diagnostic>[];
diff --git a/pkg/native_compiler/analysis_options.yaml b/pkg/native_compiler/analysis_options.yaml
index f2dd6ae..771ab79 100644
--- a/pkg/native_compiler/analysis_options.yaml
+++ b/pkg/native_compiler/analysis_options.yaml
@@ -3,3 +3,8 @@
 # BSD-style license that can be found in the LICENSE file.
 
 include: package:lints/core.yaml
+
+linter:
+  rules:
+    - omit_obvious_local_variable_types
+    - type_annotate_public_apis
diff --git a/pkg/native_stack_traces/lib/src/macho.dart b/pkg/native_stack_traces/lib/src/macho.dart
index 1e0b38e..cb25baf 100644
--- a/pkg/native_stack_traces/lib/src/macho.dart
+++ b/pkg/native_stack_traces/lib/src/macho.dart
@@ -189,6 +189,7 @@
   final int initprot;
   final int nsects;
   final int flags;
+  final List<Section> sectionsInOrder;
   final Map<String, Section> sections;
 
   SegmentCommand._(
@@ -203,8 +204,10 @@
       this.initprot,
       this.nsects,
       this.flags,
-      this.sections)
-      : super._();
+      this.sectionsInOrder)
+      : sections = Map.fromEntries(
+            sectionsInOrder.map((s) => MapEntry(s.sectname, s))),
+        super._();
 
   static SegmentCommand fromReader(Reader reader, int cmd, int cmdsize) {
     final segname = reader.readFixedLengthNullTerminatedString(16);
@@ -216,13 +219,13 @@
     final initprot = _readMachOUint32(reader);
     final nsects = _readMachOUint32(reader);
     final flags = _readMachOUint32(reader);
-    final sections = <String, Section>{};
+    final sectionsInOrder = <Section>[];
     for (int i = 0; i < nsects; i++) {
       final section = Section.fromReader(reader);
-      sections[section.sectname] = section;
+      sectionsInOrder.add(section);
     }
     return SegmentCommand._(cmd, cmdsize, segname, vmaddr, vmsize, fileoff,
-        filesize, maxprot, initprot, nsects, flags, sections);
+        filesize, maxprot, initprot, nsects, flags, sectionsInOrder);
   }
 
   @override
@@ -235,7 +238,7 @@
       ..write(' at offset 0x')
       ..writeln(fileoff.toRadixString(16));
     buffer.writeln('Sections:');
-    for (final section in sections.values) {
+    for (final section in sectionsInOrder) {
       section.writeToStringBuffer(buffer);
       buffer.writeln();
     }
@@ -698,14 +701,14 @@
 }
 
 class MachO extends DwarfContainer {
-  final MachOHeader _header;
+  final MachOHeader header;
   final List<LoadCommand> _commands;
   final SymbolTable _symbolTable;
   final SegmentCommand? _dwarfSegment;
   final StringTable? _debugStringTable;
   final StringTable? _debugLineStringTable;
 
-  MachO._(this._header, this._commands, this._symbolTable, this._dwarfSegment,
+  MachO._(this.header, this._commands, this._symbolTable, this._dwarfSegment,
       this._debugStringTable, this._debugLineStringTable);
 
   static MachO? fromReader(Reader machOReader) {
@@ -770,19 +773,19 @@
   static MachO? fromFile(String fileName) =>
       MachO.fromReader(Reader.fromFile(MachO.handleDSYM(fileName)));
 
-  bool get isDSYM => _header.isDSYM;
+  bool get isDSYM => header.isDSYM;
   bool get hasDwarf => _dwarfSegment != null;
 
   Reader applyWordSizeAndEndian(Reader reader) =>
       Reader.fromTypedData(reader.bdata,
-          wordSize: _header.wordSize, endian: _header.endian);
+          wordSize: header.wordSize, endian: header.endian);
 
   Iterable<LoadCommand> get commands => _commands;
   Iterable<T> commandsWhereType<T extends LoadCommand>() =>
       _commands.whereType<T>();
 
   @override
-  String? get architecture => CpuType.fromCode(_header.cputype)?.dartName;
+  String? get architecture => CpuType.fromCode(header.cputype)?.dartName;
 
   @override
   Reader? abbreviationsTableReader(Reader containerReader) =>
@@ -834,7 +837,7 @@
       ..writeln('               Header')
       ..writeln('----------------------------------------')
       ..writeln('');
-    _header.writeToStringBuffer(buffer);
+    header.writeToStringBuffer(buffer);
     buffer
       ..writeln('')
       ..writeln('')
diff --git a/pkg/pkg.status b/pkg/pkg.status
index f5a2695..b6c03ef 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -256,6 +256,8 @@
 [ $system == windows ]
 front_end/test/bootstrap_test: Skip # Issue 31902
 front_end/test/incremental_dart2js_load_from_dill_test: Pass, Slow
+frontend_server_client/test/example/vm_client_test: SkipByDesign # Test is incompatible with Windows platform.
+frontend_server_client/test/example/web_client_test: SkipByDesign # Test is incompatible with Windows platform.
 vm_service/test/private_rpcs/dev_fs_http_put_test: Skip # Windows disallows "?" in paths
 vm_service/test/private_rpcs/dev_fs_http_put_weird_char_test: Skip # Windows disallows "\r" in paths
 vm_service/test/private_rpcs/dev_fs_weird_char_test: Skip # Windows disallows "\r" in paths
diff --git a/pkg/record_use/CHANGELOG.md b/pkg/record_use/CHANGELOG.md
deleted file mode 100644
index e0d7d56..0000000
--- a/pkg/record_use/CHANGELOG.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## 0.4.2
-
-- Fix empty instance parsing.
-
-## 0.4.1
-
-- Fix bug in signature parsing.
-
-## 0.4.0
-
-- Update SDK constraint to `^3.5.0`.
-- Rewrite API to expose less symbols.
-- Remove locations for easier caching.
-
-## 0.3.0
-
-- Make `InstanceConstant` a `Constant`.
-- Separate import from location uri.
-
-## 0.2.0
-
-- Use maps instead of lists in serialization.
-
-## 0.1.1
-
-- Fix repository link.
-
-## 0.1.0
-
-- Initial version.
diff --git a/pkg/record_use/LICENSE b/pkg/record_use/LICENSE
deleted file mode 100644
index b03a788..0000000
--- a/pkg/record_use/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright 2024, 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/record_use/OWNERS b/pkg/record_use/OWNERS
deleted file mode 100644
index cd245e3..0000000
--- a/pkg/record_use/OWNERS
+++ /dev/null
@@ -1,5 +0,0 @@
-set noparent
-file:/tools/OWNERS_ECOSYSTEM
-file:/tools/OWNERS_VM
-# Global owners
-file:/OWNERS
diff --git a/pkg/record_use/README.md b/pkg/record_use/README.md
deleted file mode 100644
index ce0778c..0000000
--- a/pkg/record_use/README.md
+++ /dev/null
@@ -1,117 +0,0 @@
-> [!CAUTION]
-> This is an experimental package, and it's API can break at any time. Use at
-> your own discretion.
-
-This package provides the data classes for the usage recording feature in the
-Dart SDK.
-
-Dart objects with the `@RecordUse` annotation are being recorded at compile 
-time, providing the user with information. The information depends on the object
-being recorded.
-
-- If placed on a static method, the annotation means that arguments passed to
-the method will be recorded, as far as they can be inferred at compile time.
-- If placed on a class with a constant constructor, the annotation means that
-any constant instance of the class will be recorded. This is particularly useful
-when using the class as an annotation.
-
-## Example
-
-```dart
-import 'package:meta/meta.dart' show RecordUse;
-
-void main() {
-  print(SomeClass.stringMetadata(42));
-  print(SomeClass.doubleMetadata(42));
-  print(SomeClass.intMetadata(42));
-  print(SomeClass.boolMetadata(42));
-}
-
-class SomeClass {
-  @RecordMetadata('leroyjenkins')
-  @RecordUse()
-  static stringMetadata(int i) {
-    return i + 1;
-  }
-
-  @RecordMetadata(3.14)
-  @RecordUse()
-  static doubleMetadata(int i) {
-    return i + 1;
-  }
-
-  @RecordMetadata(42)
-  @RecordUse()
-  static intMetadata(int i) {
-    return i + 1;
-  }
-
-  @RecordMetadata(true)
-  @RecordUse()
-  static boolMetadata(int i) {
-    return i + 1;
-  }
-}
-
-@RecordUse()
-class RecordMetadata {
-  final Object metadata;
-
-  const RecordMetadata(this.metadata);
-}
-
-```
-This code will generate a data file that contains both the `metadata` values of
-the `RecordMetadata` instances, as well as the arguments for the different
-methods annotated with `@RecordUse()`.
-
-This information can then be accessed in a link hook as follows:
-```dart
-import 'dart:convert';
-
-import 'package:hooks/hooks.dart';
-import 'package:record_use/record_use_internal.dart';
-
-final methodId = Identifier(
-  uri: 'myfile.dart',
-  name: 'myMethod',
-);
-
-final classId = Identifier(
-  uri: 'myfile.dart',
-  name: 'myClass',
-);
-
-void main(List<String> arguments){
-  link(arguments, (config, output) async {
-    final usesUri = config.recordedUses;
-    final usesJson = await File,fromUri(usesUri).readAsString();
-    final uses = UsageRecord.fromJson(jsonDecode(usesJson));
-
-    final args = uses.argumentsTo(methodId));
-    //[args] is an iterable of arguments, in this case containing "42"
-
-    final fields = uses.instancesOf(classId);
-    //[fields] is an iterable of the fields of the class, in this case
-    //containing
-    // {"arguments": "leroyjenkins"}
-    // {"arguments": 3.14}
-    // {"arguments": 42}
-    // {"arguments": true}
-
-    ... // Do something with the information, such as tree-shaking native assets
-  });
-}
-```
-
-## Limitations
-As this is designed to work on both web and native platforms, we have to adapt 
-to the platform pecularities. One of them is that javascript does not support
-named arguments, so the dart2js compiler rewrites functions to only accept named
-parameters.
-While you can use named parameters to record functions, we advise caution as the
-retrieval behavior might change once we work around this dart2js limitation and
-implement separate positional and named parameters.
-
-## Contributing
-Contributions are welcome! Please open an issue or submit a pull request.
diff --git a/pkg/record_use/analysis_options.yaml b/pkg/record_use/analysis_options.yaml
deleted file mode 100644
index 1272826..0000000
--- a/pkg/record_use/analysis_options.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-include: package:dart_flutter_team_lints/analysis_options.yaml
-
-analyzer:
-  exclude: [test_data/**]
diff --git a/pkg/record_use/example/record_use_example.dart b/pkg/record_use/example/record_use_example.dart
deleted file mode 100644
index 8c7ef36..0000000
--- a/pkg/record_use/example/record_use_example.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:record_use/record_use.dart';
-
-void doStuffInLinkHook(
-  RecordedUsages usage,
-  Identifier identifier1,
-  Identifier identifier2,
-  Identifier identifier3,
-) {
-  print(usage.metadata);
-  print(usage.constArgumentsFor(identifier1));
-  print(usage.constantsOf(identifier2));
-  print(usage.hasNonConstArguments(identifier3));
-}
diff --git a/pkg/record_use/lib/record_use.dart b/pkg/record_use/lib/record_use.dart
deleted file mode 100644
index 8ef2d7e..0000000
--- a/pkg/record_use/lib/record_use.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for 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/identifier.dart' show Identifier;
-export 'src/metadata.dart' show Metadata, MetadataExt;
-export 'src/record_use.dart' show ConstantInstance, RecordedUsages;
-export 'src/recorded_usage_from_file.dart' show parseFromFile;
diff --git a/pkg/record_use/lib/record_use_internal.dart b/pkg/record_use/lib/record_use_internal.dart
deleted file mode 100644
index f532a18..0000000
--- a/pkg/record_use/lib/record_use_internal.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for 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/constant.dart'
-    show
-        BoolConstant,
-        Constant,
-        InstanceConstant,
-        IntConstant,
-        ListConstant,
-        MapConstant,
-        NullConstant,
-        PrimitiveConstant,
-        StringConstant;
-export 'src/definition.dart' show Definition;
-export 'src/identifier.dart' show Identifier;
-export 'src/location.dart' show Location;
-export 'src/metadata.dart' show Metadata, MetadataExt;
-export 'src/record_use.dart' show RecordedUsages;
-export 'src/recordings.dart' show Recordings;
-export 'src/reference.dart'
-    show CallReference, CallTearOff, CallWithArguments, InstanceReference;
diff --git a/pkg/record_use/lib/src/constant.dart b/pkg/record_use/lib/src/constant.dart
deleted file mode 100644
index e86f559..0000000
--- a/pkg/record_use/lib/src/constant.dart
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'helper.dart';
-
-const _typeKey = 'type';
-const _valueKey = 'value';
-
-/// A constant value that can be recorded and serialized.
-///
-/// This supports basic constants such as [bool]s or [int]s, as well as
-/// [ListConstant], [MapConstant] or [InstanceConstant] for more complex
-/// structures.
-///
-/// This follows the AST constant concept from the Dart SDK.
-sealed class Constant {
-  /// Creates a [Constant] object.
-  const Constant();
-
-  /// Converts this [Constant] object to a JSON representation.
-  ///
-  /// [constants] needs to be passed, as the [Constant]s are normalized and
-  /// stored separately in the JSON.
-  Map<String, Object?> toJson(Map<Constant, int> constants);
-
-  /// Converts this [Constant] to the value it represents.
-  Object? toValue() => switch (this) {
-    NullConstant() => null,
-    PrimitiveConstant p => p.value,
-    ListConstant<Constant> l => l.value.map((c) => c.toValue()).toList(),
-    MapConstant<Constant> m => m.value.map(
-      (key, value) => MapEntry(key, value.toValue()),
-    ),
-    InstanceConstant i => i.fields.map(
-      (key, value) => MapEntry(key, value.toValue()),
-    ),
-  };
-
-  /// Creates a [Constant] object from its JSON representation.
-  ///
-  /// [constants] needs to be passed, as the [Constant]s are normalized and
-  /// stored separately in the JSON.
-  static Constant fromJson(
-    Map<String, Object?> value,
-    List<Constant> constants,
-  ) => switch (value[_typeKey] as String) {
-    NullConstant._type => const NullConstant(),
-    BoolConstant._type => BoolConstant(value[_valueKey] as bool),
-    IntConstant._type => IntConstant(value[_valueKey] as int),
-    StringConstant._type => StringConstant(value[_valueKey] as String),
-    ListConstant._type => ListConstant(
-      (value[_valueKey] as List<dynamic>)
-          .map((value) => value as int)
-          .map((value) => constants[value])
-          .toList(),
-    ),
-    MapConstant._type => MapConstant(
-      (value[_valueKey] as Map<String, Object?>).map(
-        (key, value) => MapEntry(key, constants[value as int]),
-      ),
-    ),
-    InstanceConstant._type => InstanceConstant(
-      fields: (value[_valueKey] as Map<String, Object?>? ?? {}).map(
-        (key, value) => MapEntry(key, constants[value as int]),
-      ),
-    ),
-    String() =>
-      throw UnimplementedError('This type is not a supported constant'),
-  };
-}
-
-/// Represents the `null` constant value.
-final class NullConstant extends Constant {
-  /// The type identifier for JSON serialization.
-  static const _type = 'Null';
-
-  /// Creates a [NullConstant] object.
-  const NullConstant() : super();
-
-  @override
-  Map<String, Object?> toJson(Map<Constant, int> constants) =>
-      _toJson(_type, null);
-
-  @override
-  bool operator ==(Object other) => other is NullConstant;
-
-  @override
-  int get hashCode => 0;
-}
-
-/// Represents a constant value of a primitive type.
-sealed class PrimitiveConstant<T extends Object> extends Constant {
-  /// The underlying value of this constant.
-  final T value;
-
-  /// Creates a [PrimitiveConstant] object with the given [value].
-  const PrimitiveConstant(this.value);
-
-  @override
-  int get hashCode => value.hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is PrimitiveConstant<T> && other.value == value;
-  }
-
-  @override
-  Map<String, Object?> toJson(Map<Constant, int> constants) => valueToJson();
-
-  /// Converts this primitive constant to a JSON representation.
-  Map<String, Object?> valueToJson();
-}
-
-/// Represents a constant boolean value.
-final class BoolConstant extends PrimitiveConstant<bool> {
-  /// The type identifier for JSON serialization.
-  static const _type = 'bool';
-
-  /// Creates a [BoolConstant] object with the given boolean [value].
-  const BoolConstant(super.value);
-
-  @override
-  Map<String, Object?> valueToJson() => _toJson(_type, value);
-}
-
-/// Represents a constant integer value.
-final class IntConstant extends PrimitiveConstant<int> {
-  /// The type identifier for JSON serialization.
-  static const _type = 'int';
-
-  /// Creates an [IntConstant] object with the given integer [value].
-  const IntConstant(super.value);
-
-  @override
-  Map<String, Object?> valueToJson() => _toJson(_type, value);
-}
-
-/// Represents a constant string value.
-final class StringConstant extends PrimitiveConstant<String> {
-  /// The type identifier for JSON serialization.
-  static const _type = 'String';
-
-  /// Creates a [StringConstant] object with the given string [value].
-  const StringConstant(super.value);
-
-  @override
-  Map<String, Object?> valueToJson() => _toJson(_type, value);
-}
-
-/// Represents a constant list of [Constant] values.
-final class ListConstant<T extends Constant> extends Constant {
-  /// The type identifier for JSON serialization.
-  static const _type = 'list';
-
-  /// The underlying list of constant values.
-  final List<T> value;
-
-  /// Creates a [ListConstant] object with the given list of [value]s.
-  const ListConstant(this.value);
-
-  @override
-  int get hashCode => deepHash(value);
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is ListConstant && deepEquals(other.value, value);
-  }
-
-  @override
-  Map<String, Object?> toJson(Map<Constant, int> constants) =>
-      _toJson(_type, value.map((constant) => constants[constant]).toList());
-}
-
-/// Represents a constant map from string keys to [Constant] values.
-final class MapConstant<T extends Constant> extends Constant {
-  /// The type identifier for JSON serialization.
-  static const _type = 'map';
-
-  /// The underlying map of constant values.
-  final Map<String, T> value;
-
-  /// Creates a [MapConstant] object with the given map of [value]s.
-  const MapConstant(this.value);
-
-  @override
-  int get hashCode => deepHash(value);
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is MapConstant && deepEquals(other.value, value);
-  }
-
-  @override
-  Map<String, Object?> toJson(Map<Constant, int> constants) => _toJson(
-    _type,
-    value.map((key, constant) => MapEntry(key, constants[constant]!)),
-  );
-}
-
-/// A constant instance of a class with its fields
-///
-/// Only as far as they can also be represented by constants. This is more or
-/// less the same as a [MapConstant].
-final class InstanceConstant extends Constant {
-  /// The type identifier for JSON serialization.
-  static const _type = 'Instance';
-
-  /// The fields of this instance, mapped from field name to [Constant] value.
-  final Map<String, Constant> fields;
-
-  /// Creates an [InstanceConstant] object with the given [fields].
-  const InstanceConstant({required this.fields});
-
-  /// Creates an [InstanceConstant] object from JSON.
-  ///
-  /// [json] is a map representing the JSON structure.
-  /// [constants] is a list of [Constant] objects that are referenced by index
-  /// in the JSON.
-  factory InstanceConstant.fromJson(
-    Map<String, Object?> json,
-    List<Constant> constants,
-  ) {
-    return InstanceConstant(
-      fields: json.map(
-        (key, constantIndex) => MapEntry(key, constants[constantIndex as int]),
-      ),
-    );
-  }
-
-  @override
-  Map<String, Object?> toJson(Map<Constant, int> constants) => _toJson(
-    _type,
-    fields.isNotEmpty
-        ? fields.map(
-          (name, constantIndex) => MapEntry(name, constants[constantIndex]!),
-        )
-        : null,
-  );
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is InstanceConstant && deepEquals(other.fields, fields);
-  }
-
-  @override
-  int get hashCode => deepHash(fields);
-}
-
-/// Helper to create the JSON structure of constants by storing the value with
-/// the type.
-Map<String, Object?> _toJson(String type, Object? value) {
-  return {_typeKey: type, if (value != null) _valueKey: value};
-}
diff --git a/pkg/record_use/lib/src/definition.dart b/pkg/record_use/lib/src/definition.dart
deleted file mode 100644
index ffc04ff..0000000
--- a/pkg/record_use/lib/src/definition.dart
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'identifier.dart' show Identifier;
-
-/// A defintion is an [identifier] with its [loadingUnit].
-class Definition {
-  final Identifier identifier;
-  final String? loadingUnit;
-
-  const Definition({required this.identifier, this.loadingUnit});
-
-  static const _identifierKey = 'identifier';
-  static const _loadingUnitKey = 'loading_unit';
-
-  factory Definition.fromJson(Map<String, Object?> json) {
-    return Definition(
-      identifier: Identifier.fromJson(
-        json[_identifierKey] as Map<String, Object?>,
-      ),
-      loadingUnit: json[_loadingUnitKey] as String?,
-    );
-  }
-
-  Map<String, Object?> toJson() => {
-    _identifierKey: identifier.toJson(),
-    if (loadingUnit != null) _loadingUnitKey: loadingUnit,
-  };
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is Definition &&
-        other.identifier == identifier &&
-        other.loadingUnit == loadingUnit;
-  }
-
-  @override
-  int get hashCode => Object.hash(identifier, loadingUnit);
-}
diff --git a/pkg/record_use/lib/src/helper.dart b/pkg/record_use/lib/src/helper.dart
deleted file mode 100644
index 4141938..0000000
--- a/pkg/record_use/lib/src/helper.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:collection/collection.dart';
-
-final deepEquals = const DeepCollectionEquality().equals;
-
-final deepHash = const DeepCollectionEquality().hash;
diff --git a/pkg/record_use/lib/src/identifier.dart b/pkg/record_use/lib/src/identifier.dart
deleted file mode 100644
index b50a730..0000000
--- a/pkg/record_use/lib/src/identifier.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Represents a unique identifier for a code element, such as a class, method,
-/// or field, within a Dart program.
-///
-/// An [Identifier] is used to pinpoint a specific element based on its
-/// location and name. It consists of:
-///
-/// - `importUri`: The URI of the library where the element is defined.
-/// - `parent`: The name of the parent element (e.g., the class name for a
-///   method or field). This is optional, as not all elements have parents (e.g.
-///   top-level functions).
-/// - `name`: The name of the element itself.
-class Identifier {
-  /// The URI of the library where the element is defined.
-  ///
-  /// This is given in the form of its package import uri, so that it is OS- and
-  /// user independent.
-  final String importUri;
-
-  /// The name of the parent element (e.g., the class name for a method or
-  /// field). This is optional, as not all elements have parents (e.g. top-level
-  /// functions).
-  final String? scope;
-
-  /// The name of the element itself.
-  final String name;
-
-  /// Creates an [Identifier] object.
-  ///
-  /// [importUri] is the URI of the library where the element is defined.
-  /// [scope] is the optional name of the parent element.
-  /// [name] is the name of the element.
-  const Identifier({required this.importUri, this.scope, required this.name});
-
-  static const String _uriKey = 'uri';
-  static const String _scopeKey = 'scope';
-  static const String _nameKey = 'name';
-
-  /// Creates an [Identifier] object from its JSON representation.
-  factory Identifier.fromJson(Map<String, Object?> json) => Identifier(
-    importUri: json[_uriKey] as String,
-    scope: json[_scopeKey] as String?,
-    name: json[_nameKey] as String,
-  );
-
-  /// Converts this [Identifier] object to a JSON representation.
-  Map<String, Object?> toJson() => {
-    _uriKey: importUri,
-    if (scope != null) _scopeKey: scope,
-    _nameKey: name,
-  };
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is Identifier &&
-        other.importUri == importUri &&
-        other.scope == scope &&
-        other.name == name;
-  }
-
-  @override
-  int get hashCode => Object.hash(importUri, scope, name);
-}
diff --git a/pkg/record_use/lib/src/location.dart b/pkg/record_use/lib/src/location.dart
deleted file mode 100644
index 73ce20605..0000000
--- a/pkg/record_use/lib/src/location.dart
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for 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 Location {
-  final String uri;
-  final int? line;
-  final int? column;
-
-  const Location({required this.uri, this.line, this.column});
-
-  static const _uriKey = 'uri';
-  static const _lineKey = 'line';
-  static const _columnKey = 'column';
-
-  factory Location.fromJson(Map<String, Object?> map) {
-    return Location(
-      uri: map[_uriKey] as String,
-      line: map[_lineKey] as int?,
-      column: map[_columnKey] as int?,
-    );
-  }
-
-  Map<String, Object?> toJson() {
-    return {
-      _uriKey: uri,
-      if (line != null) _lineKey: line,
-      if (line != null) _columnKey: column,
-    };
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is Location &&
-        other.uri == uri &&
-        other.line == line &&
-        other.column == column;
-  }
-
-  @override
-  int get hashCode => Object.hash(uri, line, column);
-}
diff --git a/pkg/record_use/lib/src/metadata.dart b/pkg/record_use/lib/src/metadata.dart
deleted file mode 100644
index 819b614..0000000
--- a/pkg/record_use/lib/src/metadata.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:pub_semver/pub_semver.dart';
-
-import 'helper.dart';
-
-/// Metadata attached to a recorded usages file.
-///
-/// Whatever [Metadata] should be added to the usage recording. Care should be
-/// applied to not include non-deterministic or dynamic data such as timestamps,
-/// as this would mess with the usage recording caching.
-class Metadata {
-  /// The underlying data.
-  ///
-  /// Together with the metadata extension [MetadataExt], this makes the
-  /// metadata extensible by the user implementing the recording. For example,
-  /// dart2js might want to store different metadata than the Dart VM.
-  final Map<String, Object?> json;
-
-  const Metadata._({required this.json});
-
-  factory Metadata.fromJson(Map<String, Object?> json) =>
-      Metadata._(json: json);
-
-  @override
-  bool operator ==(covariant Metadata other) {
-    if (identical(this, other)) return true;
-
-    return deepEquals(other.json, json);
-  }
-
-  @override
-  int get hashCode => deepHash(json);
-}
-
-extension MetadataExt on Metadata {
-  Version get version => Version.parse(json['version'] as String);
-  String get comment => json['comment'] as String;
-}
diff --git a/pkg/record_use/lib/src/record_use.dart b/pkg/record_use/lib/src/record_use.dart
deleted file mode 100644
index 22e956a..0000000
--- a/pkg/record_use/lib/src/record_use.dart
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import '../record_use_internal.dart';
-
-/// Holds all information recorded during compilation.
-///
-/// This can be queried using the methods provided, which each take an
-/// [Identifier] which must be annotated with `@RecordUse` from `package:meta`.
-extension type RecordedUsages._(Recordings _recordings) {
-  RecordedUsages.fromJson(Map<String, Object?> json)
-    : this._(Recordings.fromJson(json));
-
-  /// Show the metadata for this recording of usages.
-  Metadata get metadata => _recordings.metadata;
-
-  /// Finds all const arguments for calls to the [identifier].
-  ///
-  /// The definition must be annotated with `@RecordUse()`. If there are no
-  /// calls to the definition, either because it was treeshaken, because it was
-  /// not annotated, or because it does not exist, returns empty.
-  ///
-  /// Returns an empty iterable if the arguments were not collected.
-  ///
-  /// Example:
-  /// ```dart
-  /// import 'package:meta/meta.dart' show ResourceIdentifier;
-  /// void main() {
-  ///   print(SomeClass.someStaticMethod(42));
-  /// }
-  ///
-  /// class SomeClass {
-  ///   @ResourceIdentifier('id')
-  ///   static someStaticMethod(int i) {
-  ///     return i + 1;
-  ///   }
-  /// }
-  /// ```
-  ///
-  /// Would mean that
-  /// ```
-  /// argumentsTo(Identifier(
-  ///           uri: 'path/to/file.dart',
-  ///           parent: 'SomeClass',
-  ///           name: 'someStaticMethod'),
-  ///       ).first ==
-  ///       [
-  ///         {1: 42}
-  ///       ]
-  /// ```
-  Iterable<({Map<String, Object?> named, List<Object?> positional})>
-  constArgumentsFor(Identifier identifier) {
-    return _recordings.calls[identifier]?.whereType<CallWithArguments>().map(
-          (call) => (
-            named: call.namedArguments.map(
-              (name, argument) => MapEntry(name, argument?.toValue()),
-            ),
-            positional:
-                call.positionalArguments
-                    .map((argument) => argument?.toValue())
-                    .toList(),
-          ),
-        ) ??
-        [];
-  }
-
-  /// Finds all constant fields of a const instance of the class [identifier].
-  ///
-  /// The definition must be annotated with `@RecordUse()`. If there are
-  /// no instances of the definition, either because it was treeshaken, because
-  /// it was not annotated, or because it does not exist, returns empty.
-  ///
-  /// The types of fields supported are defined at
-  ///
-  /// Example:
-  /// ```dart
-  /// void main() {
-  ///   print(SomeClass.someStaticMethod(42));
-  /// }
-  ///
-  /// class SomeClass {
-  ///   @AnnotationClass('freddie')
-  ///   static someStaticMethod(int i) {
-  ///     return i + 1;
-  ///   }
-  /// }
-  ///
-  /// @RecordUse()
-  /// class AnnotationClass {
-  ///   final String s;
-  ///   const AnnotationClass(this.s);
-  /// }
-  /// ```
-  ///
-  /// Would mean that
-  /// ```
-  /// constantsOf(Identifier(
-  ///           uri: 'path/to/file.dart',
-  ///           name: 'AnnotationClass'),
-  ///       ).first['s'] == 'freddie';
-  /// ```
-  ///
-  /// What kinds of fields can be recorded depends on the implementation of
-  /// https://dart-review.googlesource.com/c/sdk/+/369620/13/pkg/vm/lib/transformations/record_use/record_instance.dart
-  Iterable<ConstantInstance> constantsOf(Identifier identifier) {
-    return _recordings.instances[identifier]?.map(
-          (reference) => ConstantInstance(reference.instanceConstant.fields),
-        ) ??
-        [];
-  }
-
-  /// Checks if any call to [identifier] has non-const arguments, or if any
-  /// tear-off was recorded.
-  ///
-  /// The definition must be annotated with `@RecordUse()`. If there are no
-  /// calls to the definition, either because it was treeshaken, because it was
-  /// not annotated, or because it does not exist, returns `false`.
-  bool hasNonConstArguments(Identifier identifier) {
-    return (_recordings.calls[identifier] ?? []).any(
-      (element) => switch (element) {
-        CallTearOff() => true,
-        CallWithArguments call => call.positionalArguments.any(
-          (argument) => argument == null,
-        ),
-      },
-    );
-  }
-}
-
-extension type ConstantInstance(Map<String, Constant> _fields) {
-  bool hasField(String key) => _fields.containsKey(key);
-
-  Object? operator [](String key) {
-    if (!hasField(key)) {
-      throw ArgumentError('No field with name $key found.');
-    }
-    return _fields[key]!.toValue();
-  }
-}
diff --git a/pkg/record_use/lib/src/recorded_usage_from_file.dart b/pkg/record_use/lib/src/recorded_usage_from_file.dart
deleted file mode 100644
index 4bbe9c4..0000000
--- a/pkg/record_use/lib/src/recorded_usage_from_file.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-import 'dart:convert' show jsonDecode;
-import 'dart:io' show File;
-
-import '../record_use_internal.dart' show RecordedUsages;
-
-RecordedUsages? parseFromFile(Uri? recordedUsagesFile) {
-  if (recordedUsagesFile == null) {
-    return null;
-  }
-  final usagesContent = File.fromUri(recordedUsagesFile).readAsStringSync();
-  final usagesJson = jsonDecode(usagesContent) as Map<String, dynamic>;
-  return RecordedUsages.fromJson(usagesJson);
-}
diff --git a/pkg/record_use/lib/src/recordings.dart b/pkg/record_use/lib/src/recordings.dart
deleted file mode 100644
index 01349e4..0000000
--- a/pkg/record_use/lib/src/recordings.dart
+++ /dev/null
@@ -1,237 +0,0 @@
-// ignore_for_file: public_member_api_docs, sort_constructors_first
-// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'constant.dart';
-import 'definition.dart';
-import 'helper.dart';
-import 'identifier.dart';
-import 'location.dart' show Location;
-import 'metadata.dart';
-import 'reference.dart';
-
-/// [Recordings] combines recordings of calls and instances with metadata.
-///
-/// This class acts as the top-level container for recorded usage information.
-/// The metadata provides context for the recording, such as version and
-/// commentary. The [callsForDefinition] and [instancesForDefinition] store the
-/// core data, associating each [Definition] with its corresponding [Reference]
-/// details.
-///
-/// The class uses a normalized JSON format, allowing the reuse of locations and
-/// constants across multiple recordings to optimize storage.
-class Recordings {
-  /// [Metadata] such as the recording protocol version.
-  final Metadata metadata;
-
-  /// The collected [CallReference]s for each [Definition].
-  final Map<Definition, List<CallReference>> callsForDefinition;
-
-  late final Map<Identifier, List<CallReference>> calls = callsForDefinition
-      .map((definition, calls) => MapEntry(definition.identifier, calls));
-
-  /// The collected [InstanceReference]s for each [Definition].
-  final Map<Definition, List<InstanceReference>> instancesForDefinition;
-
-  late final Map<Identifier, List<InstanceReference>> instances =
-      instancesForDefinition.map(
-        (definition, instances) => MapEntry(definition.identifier, instances),
-      );
-
-  static const _metadataKey = 'metadata';
-  static const _constantsKey = 'constants';
-  static const _locationsKey = 'locations';
-  static const _recordingsKey = 'recordings';
-  static const _callsKey = 'calls';
-  static const _instancesKey = 'instances';
-  static const _definitionKey = 'definition';
-
-  Recordings({
-    required this.metadata,
-    required this.callsForDefinition,
-    required this.instancesForDefinition,
-  });
-
-  /// Decodes a JSON representation into a [Recordings] object.
-  ///
-  /// The format is specifically designed to reduce redundancy and improve
-  /// efficiency. Identifiers and constants are stored in separate tables,
-  /// allowing them to be referenced by index in the `recordings` map.
-  factory Recordings.fromJson(Map<String, Object?> json) {
-    final constants = <Constant>[];
-    for (final constantJsonObj in json[_constantsKey] as List? ?? []) {
-      final constantJson = constantJsonObj as Map<String, Object?>;
-      constants.add(Constant.fromJson(constantJson, constants));
-    }
-    final locations = <Location>[];
-    for (final locationJsonObj in json[_locationsKey] as List? ?? []) {
-      final locationJson = locationJsonObj as Map<String, Object?>;
-      locations.add(Location.fromJson(locationJson));
-    }
-
-    final recordings =
-        (json[_recordingsKey] as List?)?.whereType<Map<String, Object?>>() ??
-        [];
-    final recordedCalls = recordings.where(
-      (recording) => recording[_callsKey] != null,
-    );
-    final recordedInstances = recordings.where(
-      (recording) => recording[_instancesKey] != null,
-    );
-    return Recordings(
-      metadata: Metadata.fromJson(json[_metadataKey] as Map<String, Object?>),
-      callsForDefinition: {
-        for (final recording in recordedCalls)
-          Definition.fromJson(
-                recording[_definitionKey] as Map<String, Object?>,
-              ):
-              (recording[_callsKey] as List)
-                  .map(
-                    (json) => CallReference.fromJson(
-                      json as Map<String, Object?>,
-                      constants,
-                      locations,
-                    ),
-                  )
-                  .toList(),
-      },
-      instancesForDefinition: {
-        for (final recording in recordedInstances)
-          Definition.fromJson(
-                recording[_definitionKey] as Map<String, Object?>,
-              ):
-              (recording[_instancesKey] as List)
-                  .map(
-                    (json) => InstanceReference.fromJson(
-                      json as Map<String, Object?>,
-                      constants,
-                      locations,
-                    ),
-                  )
-                  .toList(),
-      },
-    );
-  }
-
-  /// Encodes this object into a JSON representation.
-  ///
-  /// This method normalizes identifiers and constants for storage efficiency.
-  Map<String, Object?> toJson() {
-    final constants =
-        {
-          ...callsForDefinition.values
-              .expand((element) => element)
-              .whereType<CallWithArguments>()
-              .expand(
-                (call) => [
-                  ...call.positionalArguments,
-                  ...call.namedArguments.values,
-                ],
-              )
-              .nonNulls,
-          ...instancesForDefinition.values
-              .expand((element) => element)
-              .expand(
-                (instance) => {
-                  ...instance.instanceConstant.fields.values,
-                  instance.instanceConstant,
-                },
-              ),
-        }.flatten().asMapToIndices;
-    final locations =
-        {
-          ...callsForDefinition.values
-              .expand((calls) => calls)
-              .map((call) => call.location),
-          ...instancesForDefinition.values
-              .expand((instances) => instances)
-              .map((instance) => instance.location),
-        }.asMapToIndices;
-    return {
-      _metadataKey: metadata.json,
-      if (constants.isNotEmpty)
-        _constantsKey:
-            constants.keys
-                .map((constant) => constant.toJson(constants))
-                .toList(),
-      if (locations.isNotEmpty)
-        _locationsKey:
-            locations.keys.map((location) => location.toJson()).toList(),
-      if (callsForDefinition.isNotEmpty || instancesForDefinition.isNotEmpty)
-        _recordingsKey: [
-          if (callsForDefinition.isNotEmpty)
-            ...callsForDefinition.entries.map(
-              (entry) => {
-                _definitionKey: entry.key.toJson(),
-                _callsKey:
-                    entry.value
-                        .map((call) => call.toJson(constants, locations))
-                        .toList(),
-              },
-            ),
-          if (instancesForDefinition.isNotEmpty)
-            ...instancesForDefinition.entries.map(
-              (entry) => {
-                _definitionKey: entry.key.toJson(),
-                _instancesKey:
-                    entry.value
-                        .map(
-                          (instance) => instance.toJson(constants, locations),
-                        )
-                        .toList(),
-              },
-            ),
-        ],
-    };
-  }
-
-  @override
-  bool operator ==(covariant Recordings other) {
-    if (identical(this, other)) return true;
-
-    return other.metadata == metadata &&
-        deepEquals(other.callsForDefinition, callsForDefinition) &&
-        deepEquals(other.instancesForDefinition, instancesForDefinition);
-  }
-
-  @override
-  int get hashCode => Object.hash(
-    metadata.hashCode,
-    deepHash(callsForDefinition),
-    deepHash(instancesForDefinition),
-  );
-}
-
-extension on Iterable<Constant> {
-  Set<Constant> flatten() {
-    final constants = <Constant>{};
-    for (final constant in this) {
-      depthFirstSearch(constant, constants);
-    }
-    return constants;
-  }
-
-  void depthFirstSearch(Constant constant, Set<Constant> collected) {
-    final children = switch (constant) {
-      ListConstant<Constant>() => constant.value,
-      MapConstant<Constant>() => constant.value.values,
-      InstanceConstant() => constant.fields.values,
-      _ => <Constant>[],
-    };
-    for (final child in children) {
-      if (!collected.contains(child)) {
-        depthFirstSearch(child, collected);
-      }
-    }
-    collected.add(constant);
-  }
-}
-
-extension _PrivateIterableExtension<T> on Iterable<T> {
-  /// Transform list to map, faster than using list.indexOf
-  Map<T, int> get asMapToIndices {
-    var i = 0;
-    return {for (final element in this) element: i++};
-  }
-}
diff --git a/pkg/record_use/lib/src/reference.dart b/pkg/record_use/lib/src/reference.dart
deleted file mode 100644
index bcf23e9..0000000
--- a/pkg/record_use/lib/src/reference.dart
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'constant.dart';
-import 'helper.dart';
-import 'identifier.dart';
-import 'location.dart' show Location;
-
-const _loadingUnitKey = 'loading_unit';
-
-/// A reference to *something*.
-///
-/// The something might be a call or an instance, matching a [CallReference] or
-/// an [InstanceReference].
-/// All references have in common that they occur in a [loadingUnit], which we
-/// record to be able to piece together which loading units are "related", for
-/// example all needing the same asset.
-sealed class Reference {
-  final String? loadingUnit;
-  final Location location;
-
-  const Reference({required this.loadingUnit, required this.location});
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-
-    return other is Reference &&
-        other.loadingUnit == loadingUnit &&
-        other.location == location;
-  }
-
-  @override
-  int get hashCode => Object.hash(loadingUnit, location);
-
-  Map<String, Object?> toJson(
-    Map<Constant, int> constants,
-    Map<Location, int> locations,
-  ) => {_loadingUnitKey: loadingUnit, _locationKey: locations[location]};
-}
-
-const _locationKey = '@';
-const _positionalKey = 'positional';
-const _namedKey = 'named';
-const _typeKey = 'type';
-
-/// A reference to a call to some [Identifier].
-///
-/// This might be an actual call, in which case we record the arguments, or a
-/// tear-off, in which case we can't record the arguments.
-sealed class CallReference extends Reference {
-  const CallReference({required super.loadingUnit, required super.location});
-
-  static CallReference fromJson(
-    Map<String, Object?> json,
-    List<Constant> constants,
-    List<Location> locations,
-  ) {
-    final loadingUnit = json[_loadingUnitKey] as String?;
-    final location = locations[json[_locationKey] as int];
-    return json[_typeKey] == 'tearoff'
-        ? CallTearOff(loadingUnit: loadingUnit, location: location)
-        : CallWithArguments(
-          positionalArguments:
-              (json[_positionalKey] as List<dynamic>? ?? [])
-                  .whereType<int?>()
-                  .map(
-                    (constantsIndex) =>
-                        constantsIndex != null
-                            ? constants[constantsIndex]
-                            : null,
-                  )
-                  .toList(),
-          namedArguments: (json[_namedKey] as Map<String, Object?>? ?? {})
-              .map((key, value) => MapEntry(key, value as int?))
-              .map(
-                (name, constantsIndex) => MapEntry(
-                  name,
-                  constantsIndex != null ? constants[constantsIndex] : null,
-                ),
-              ),
-          loadingUnit: loadingUnit,
-          location: location,
-        );
-  }
-}
-
-/// A reference to a call to some [Identifier] with [positionalArguments] and
-/// [namedArguments].
-final class CallWithArguments extends CallReference {
-  final List<Constant?> positionalArguments;
-  final Map<String, Constant?> namedArguments;
-
-  const CallWithArguments({
-    required this.positionalArguments,
-    required this.namedArguments,
-    required super.loadingUnit,
-    required super.location,
-  });
-
-  @override
-  Map<String, Object?> toJson(
-    Map<Constant, int> constants,
-    Map<Location, int> locations,
-  ) {
-    final positionalJson =
-        positionalArguments.map((constant) => constants[constant]).toList();
-    final namedJson = namedArguments.map(
-      (name, constant) => MapEntry(name, constants[constant]),
-    );
-    return {
-      _typeKey: 'with_arguments',
-      if (positionalJson.isNotEmpty) _positionalKey: positionalJson,
-      if (namedJson.isNotEmpty) _namedKey: namedJson,
-      ...super.toJson(constants, locations),
-    };
-  }
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-    if (!(super == other)) return false;
-
-    return other is CallWithArguments &&
-        deepEquals(other.positionalArguments, positionalArguments) &&
-        deepEquals(other.namedArguments, namedArguments);
-  }
-
-  @override
-  int get hashCode => Object.hash(
-    deepHash(positionalArguments),
-    deepHash(namedArguments),
-    super.hashCode,
-  );
-}
-
-/// A reference to a tear-off use of the [Identifier]. This means that we can't
-/// record the arguments possibly passed to the method somewhere else.
-final class CallTearOff extends CallReference {
-  const CallTearOff({required super.loadingUnit, required super.location});
-
-  @override
-  Map<String, Object?> toJson(
-    Map<Constant, int> constants,
-    Map<Location, int> locations,
-  ) {
-    return {_typeKey: 'tearoff', ...super.toJson(constants, locations)};
-  }
-}
-
-final class InstanceReference extends Reference {
-  final InstanceConstant instanceConstant;
-
-  const InstanceReference({
-    required this.instanceConstant,
-    required super.loadingUnit,
-    required super.location,
-  });
-
-  static const _constantKey = 'constant_index';
-
-  factory InstanceReference.fromJson(
-    Map<String, Object?> json,
-    List<Constant> constants,
-    List<Location> locations,
-  ) {
-    return InstanceReference(
-      instanceConstant:
-          constants[json[_constantKey] as int] as InstanceConstant,
-      loadingUnit: json[_loadingUnitKey] as String?,
-      location: locations[json[_locationKey] as int],
-    );
-  }
-
-  @override
-  Map<String, Object?> toJson(
-    Map<Constant, int> constants,
-    Map<Location, int> locations,
-  ) => {
-    _constantKey: constants[instanceConstant]!,
-    ...super.toJson(constants, locations),
-  };
-
-  @override
-  bool operator ==(Object other) {
-    if (identical(this, other)) return true;
-    if (!(super == other)) return false;
-
-    return other is InstanceReference &&
-        other.instanceConstant == instanceConstant;
-  }
-
-  @override
-  int get hashCode => Object.hash(instanceConstant, super.hashCode);
-}
diff --git a/pkg/record_use/pubspec.yaml b/pkg/record_use/pubspec.yaml
deleted file mode 100644
index d7c093f..0000000
--- a/pkg/record_use/pubspec.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: record_use
-description: >
-  The serialization logic and API for the usage recording SDK feature.
-version: 0.4.2
-repository: https://github.com/dart-lang/sdk/tree/main/pkg/record_use
-
-environment:
-  sdk: ^3.7.0
-
-resolution: workspace
-
-dependencies:
-  collection: ^1.18.0
-  pub_semver: ^2.1.4
-
-dev_dependencies:
-  dart_flutter_team_lints: any
-  lints: any
-  test: any
diff --git a/pkg/record_use/test/storage_test.dart b/pkg/record_use/test/storage_test.dart
deleted file mode 100644
index d62610d..0000000
--- a/pkg/record_use/test/storage_test.dart
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:record_use/record_use_internal.dart';
-import 'package:test/test.dart';
-
-import 'test_data.dart';
-
-void main() {
-  group('object 1', () {
-    final json = jsonDecode(recordedUsesJson) as Map<String, Object?>;
-    test('JSON', () => expect(recordedUses.toJson(), json));
-
-    test('Object', () => expect(Recordings.fromJson(json), recordedUses));
-
-    test('Json->Object->Json', () {
-      expect(Recordings.fromJson(json).toJson(), json);
-    });
-
-    test('Object->Json->Object', () {
-      expect(Recordings.fromJson(recordedUses.toJson()), recordedUses);
-    });
-  });
-
-  group('object 2', () {
-    final json2 = jsonDecode(recordedUsesJson2) as Map<String, Object?>;
-    test('JSON', () => expect(recordedUses2.toJson(), json2));
-
-    test('Object', () => expect(Recordings.fromJson(json2), recordedUses2));
-
-    test('Json->Object->Json', () {
-      expect(Recordings.fromJson(json2).toJson(), json2);
-    });
-
-    test('Object->Json->Object', () {
-      expect(Recordings.fromJson(recordedUses2.toJson()), recordedUses2);
-    });
-  });
-}
diff --git a/pkg/record_use/test/test_data.dart b/pkg/record_use/test/test_data.dart
deleted file mode 100644
index 95fd839..0000000
--- a/pkg/record_use/test/test_data.dart
+++ /dev/null
@@ -1,326 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:pub_semver/pub_semver.dart';
-import 'package:record_use/record_use_internal.dart';
-
-final callId = Identifier(
-  importUri:
-      Uri.parse(
-        'file://lib/_internal/js_runtime/lib/js_helper.dart',
-      ).toString(),
-  scope: 'MyClass',
-  name: 'get:loadDeferredLibrary',
-);
-final instanceId = Identifier(
-  importUri:
-      Uri.parse(
-        'file://lib/_internal/js_runtime/lib/js_helper.dart',
-      ).toString(),
-  name: 'MyAnnotation',
-);
-
-final recordedUses = Recordings(
-  metadata: Metadata.fromJson({
-    'version': Version(1, 6, 2, pre: 'wip', build: '5.-.2.z').toString(),
-    'comment':
-        'Recorded references at compile time and their argument values, as'
-        ' far as known, to definitions annotated with @RecordUse',
-  }),
-  callsForDefinition: {
-    Definition(identifier: callId, loadingUnit: 'part_15.js'): [
-      const CallWithArguments(
-        positionalArguments: [
-          StringConstant('lib_SHA1'),
-          BoolConstant(false),
-          IntConstant(1),
-        ],
-        namedArguments: {
-          'freddy': StringConstant('mercury'),
-          'leroy': StringConstant('jenkins'),
-        },
-        loadingUnit: 'o.js',
-        location: Location(uri: 'lib/test.dart'),
-      ),
-      const CallWithArguments(
-        positionalArguments: [
-          StringConstant('lib_SHA1'),
-          MapConstant<IntConstant>({'key': IntConstant(99)}),
-          ListConstant([
-            StringConstant('camus'),
-            ListConstant([
-              StringConstant('einstein'),
-              StringConstant('insert'),
-              BoolConstant(false),
-            ]),
-            StringConstant('einstein'),
-          ]),
-        ],
-        namedArguments: {
-          'freddy': IntConstant(0),
-          'leroy': StringConstant('jenkins'),
-        },
-        loadingUnit: 'o.js',
-        location: Location(uri: 'lib/test2.dart'),
-      ),
-    ],
-  },
-  instancesForDefinition: {
-    Definition(identifier: instanceId): [
-      const InstanceReference(
-        instanceConstant: InstanceConstant(
-          fields: {'a': IntConstant(42), 'b': NullConstant()},
-        ),
-        loadingUnit: '3',
-        location: Location(uri: 'lib/test3.dart'),
-      ),
-      const InstanceReference(
-        instanceConstant: InstanceConstant(fields: {}),
-        loadingUnit: '3',
-        location: Location(uri: 'lib/test3.dart'),
-      ),
-    ],
-  },
-);
-
-final recordedUses2 = Recordings(
-  metadata: Metadata.fromJson({
-    'version': Version(1, 6, 2, pre: 'wip', build: '5.-.2.z').toString(),
-    'comment':
-        'Recorded references at compile time and their argument values, as'
-        ' far as known, to definitions annotated with @RecordUse',
-  }),
-  callsForDefinition: {
-    Definition(identifier: callId, loadingUnit: 'part_15.js'): [
-      const CallWithArguments(
-        positionalArguments: [BoolConstant(false), IntConstant(1)],
-        namedArguments: {
-          'freddy': StringConstant('mercury'),
-          'answer': IntConstant(42),
-        },
-        loadingUnit: 'o.js',
-        location: Location(uri: 'lib/test3.dart'),
-      ),
-    ],
-  },
-  instancesForDefinition: {},
-);
-
-final recordedUsesJson = '''{
-  "metadata": {
-    "version": "1.6.2-wip+5.-.2.z",
-    "comment": "Recorded references at compile time and their argument values, as far as known, to definitions annotated with @RecordUse"
-  },
-  "constants": [
-    {
-      "type": "String",
-      "value": "lib_SHA1"
-    },
-    {
-      "type": "bool",
-      "value": false
-    },
-    {
-      "type": "int",
-      "value": 1
-    },
-    {
-      "type": "String",
-      "value": "mercury"
-    },
-    {
-      "type": "String",
-      "value": "jenkins"
-    },
-    {
-      "type": "int",
-      "value": 99
-    },
-    {
-      "type": "map",
-      "value": {
-        "key": 5
-      }
-    },
-    {
-      "type": "String",
-      "value": "camus"
-    },
-    {
-      "type": "String",
-      "value": "einstein"
-    },
-    {
-      "type": "String",
-      "value": "insert"
-    },
-    {
-      "type": "list",
-      "value": [
-        8,
-        9,
-        1
-      ]
-    },
-    {
-      "type": "list",
-      "value": [
-        7,
-        10,
-        8
-      ]
-    },
-    {
-      "type": "int",
-      "value": 0
-    },
-    {
-      "type": "int",
-      "value": 42
-    },
-    {
-      "type": "Null"
-    },
-    {
-      "type": "Instance",
-      "value": {
-        "a": 13,
-        "b": 14
-      }
-    },
-    {
-      "type": "Instance"
-    }
-  ],
-  "locations": [
-    {
-      "uri": "lib/test.dart"
-    },
-    {
-      "uri": "lib/test2.dart"
-    },
-    {
-      "uri": "lib/test3.dart"
-    }
-  ],
-  "recordings": [
-    {
-      "definition": {
-        "identifier": {
-          "uri": "file://lib/_internal/js_runtime/lib/js_helper.dart",
-          "scope": "MyClass",
-          "name": "get:loadDeferredLibrary"
-        },
-        "loading_unit": "part_15.js"
-      },
-      "calls": [
-        {
-          "type": "with_arguments",
-          "positional": [
-            0,
-            1,
-            2
-          ],
-          "named": {
-            "freddy": 3,
-            "leroy": 4
-          },
-          "loading_unit": "o.js",
-          "@": 0
-        },
-        {
-          "type": "with_arguments",
-          "positional": [
-            0,
-            6,
-            11
-          ],
-          "named": {
-            "freddy": 12,
-            "leroy": 4
-          },
-          "loading_unit": "o.js",
-          "@": 1
-        }
-      ]
-    },
-    {
-      "definition": {
-        "identifier": {
-          "uri": "file://lib/_internal/js_runtime/lib/js_helper.dart",
-          "name": "MyAnnotation"
-        }
-      },
-      "instances": [
-        {
-          "constant_index": 15,
-          "loading_unit": "3",
-          "@": 2
-        },
-        {
-          "constant_index": 16,
-          "loading_unit": "3",
-          "@": 2
-        }
-      ]
-    }
-  ]
-}''';
-
-final recordedUsesJson2 = '''{
-  "metadata": {
-    "version": "1.6.2-wip+5.-.2.z",
-    "comment": "Recorded references at compile time and their argument values, as far as known, to definitions annotated with @RecordUse"
-  },
-  "constants": [
-    {
-      "type": "bool",
-      "value": false
-    },
-    {
-      "type": "int",
-      "value": 1
-    },
-    {
-      "type": "String",
-      "value": "mercury"
-    },
-    {
-      "type": "int",
-      "value": 42
-    }
-  ],
-  "locations": [
-    {
-      "uri": "lib/test3.dart"
-    }
-  ],
-  "recordings": [
-    {
-      "definition": {
-        "identifier": {
-          "uri": "file://lib/_internal/js_runtime/lib/js_helper.dart",
-          "scope": "MyClass",
-          "name": "get:loadDeferredLibrary"
-        },
-        "loading_unit": "part_15.js"
-      },
-      "calls": [
-        {
-          "type": "with_arguments",
-          "positional": [
-            0,
-            1
-          ],
-          "named": {
-            "freddy": 2,
-            "answer": 3
-          },
-          "loading_unit": "o.js",
-          "@": 0
-        }
-      ]
-    }
-  ]
-}''';
diff --git a/pkg/record_use/test/usage_test.dart b/pkg/record_use/test/usage_test.dart
deleted file mode 100644
index e3b2c18..0000000
--- a/pkg/record_use/test/usage_test.dart
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:record_use/record_use_internal.dart';
-import 'package:test/test.dart';
-
-import 'test_data.dart';
-
-void main() {
-  test('All API calls', () {
-    expect(
-      RecordedUsages.fromJson(
-            jsonDecode(recordedUsesJson) as Map<String, Object?>,
-          )
-          .constArgumentsFor(
-            Identifier(
-              importUri:
-                  Uri.parse(
-                    'file://lib/_internal/js_runtime/lib/js_helper.dart',
-                  ).toString(),
-              scope: 'MyClass',
-              name: 'get:loadDeferredLibrary',
-            ),
-          )
-          .length,
-      2,
-    );
-  });
-
-  test('All API instances', () {
-    final instance =
-        RecordedUsages.fromJson(
-              jsonDecode(recordedUsesJson) as Map<String, Object?>,
-            )
-            .constantsOf(
-              Identifier(
-                importUri:
-                    Uri.parse(
-                      'file://lib/_internal/js_runtime/lib/js_helper.dart',
-                    ).toString(),
-                name: 'MyAnnotation',
-              ),
-            )
-            .first;
-    final instanceMap =
-        recordedUses.instancesForDefinition.values
-            .expand((usage) => usage)
-            .map(
-              (instance) => instance.instanceConstant.fields.map(
-                (key, constant) => MapEntry(key, constant.toValue()),
-              ),
-            )
-            .first;
-    for (final entry in instanceMap.entries) {
-      expect(instance[entry.key], entry.value);
-    }
-  });
-
-  test('Specific API calls', () {
-    var arguments =
-        RecordedUsages.fromJson(
-              jsonDecode(recordedUsesJson) as Map<String, Object?>,
-            )
-            .constArgumentsFor(
-              Identifier(
-                importUri:
-                    Uri.parse(
-                      'file://lib/_internal/js_runtime/lib/js_helper.dart',
-                    ).toString(),
-                scope: 'MyClass',
-                name: 'get:loadDeferredLibrary',
-              ),
-            )
-            .toList();
-    var (named: named0, positional: positional0) = arguments[0];
-    expect(named0, const {'freddy': 'mercury', 'leroy': 'jenkins'});
-    expect(positional0, const ['lib_SHA1', false, 1]);
-    var (named: named1, positional: positional1) = arguments[1];
-    expect(named1, const {'freddy': 0, 'leroy': 'jenkins'});
-    expect(positional1, const [
-      'lib_SHA1',
-      {'key': 99},
-      [
-        'camus',
-        ['einstein', 'insert', false],
-        'einstein',
-      ],
-    ]);
-  });
-
-  test('Specific API instances', () {
-    final instance =
-        RecordedUsages.fromJson(
-              jsonDecode(recordedUsesJson) as Map<String, Object?>,
-            )
-            .constantsOf(
-              Identifier(
-                importUri:
-                    Uri.parse(
-                      'file://lib/_internal/js_runtime/lib/js_helper.dart',
-                    ).toString(),
-                name: 'MyAnnotation',
-              ),
-            )
-            .first;
-    expect(instance['a'], 42);
-    expect(instance['b'], null);
-  });
-
-  test('HasNonConstInstance', () {
-    expect(
-      RecordedUsages.fromJson(
-        jsonDecode(recordedUsesJson2) as Map<String, Object?>,
-      ).hasNonConstArguments(
-        const Identifier(
-          importUri:
-              'package:drop_dylib_recording/src/drop_dylib_recording.dart',
-          name: 'getMathMethod',
-        ),
-      ),
-      false,
-    );
-  });
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/.gitignore b/pkg/record_use/test_data/drop_dylib_recording/.gitignore
deleted file mode 100644
index f486ed6..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-bin/drop_dylib_recording*/
diff --git a/pkg/record_use/test_data/drop_dylib_recording/README.md b/pkg/record_use/test_data/drop_dylib_recording/README.md
deleted file mode 100644
index 892aca7..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-This sample builds a native library for adding and multiplying. It then uses
-the recorded usages feature to tree-shake unused libraries out.
-
-## Usage:
-
-### Keep all:
-```
-dart --enable-experiment=record-use build bin/drop_dylib_recording_all.dart
-```
-The `lib/` folder now contains both libraries
-```
-./bin/drop_dylib_recording_all/drop_dylib_recording_all.exe add
-```
-Prints `Hello world: 7!`
-
-
-### Treeshake using calls:
-```
-dart --enable-experiment=record-use build bin/drop_dylib_recording_calls.dart
-```
-The `lib/` folder now contains only the `add` library.
-```
-./bin/drop_dylib_recording_calls/drop_dylib_recording_calls.exe
-```
-Prints `Hello world: 7!`
-
-### Treeshake using instances:
-```
-dart --enable-experiment=record-use build bin/drop_dylib_recording_instances.dart
-```
-The `lib/` folder now contains only the `add` library.
-```
-./bin/drop_dylib_recording_calls/drop_dylib_recording_instances.exe
-```
-Prints `Hello world: 7!`
diff --git a/pkg/record_use/test_data/drop_dylib_recording/bin/drop_dylib_recording_calls.dart b/pkg/record_use/test_data/drop_dylib_recording/bin/drop_dylib_recording_calls.dart
deleted file mode 100644
index d6d7731..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/bin/drop_dylib_recording_calls.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:drop_dylib_recording/drop_dylib_recording.dart';
-
-void main(List<String> arguments) {
-  print('Hello world: ${MyMath.add(3, 4)}!');
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/bin/drop_dylib_recording_instances.dart b/pkg/record_use/test_data/drop_dylib_recording/bin/drop_dylib_recording_instances.dart
deleted file mode 100644
index f216587..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/bin/drop_dylib_recording_instances.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:drop_dylib_recording/drop_dylib_recording.dart';
-
-void main(List<String> arguments) {
-  print('Hello world: ${MyMath.double(3)}!');
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/hook/build.dart b/pkg/record_use/test_data/drop_dylib_recording/hook/build.dart
deleted file mode 100644
index 726b701..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/hook/build.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:logging/logging.dart';
-import 'package:hooks/hooks.dart';
-import 'package:code_assets/code_assets.dart';
-import 'package:native_toolchain_c/native_toolchain_c.dart';
-
-void main(List<String> arguments) async {
-  await build(arguments, (input, output) async {
-    final logger =
-        Logger('')
-          ..level = Level.ALL
-          ..onRecord.listen((record) {
-            print('${record.level.name}: ${record.time}: ${record.message}');
-          });
-    final List<AssetRouting> routing =
-        input.config.linkingEnabled
-            ? [ToLinkHook(input.packageName)]
-            : const [ToAppBundle()];
-    await CBuilder.library(
-      name: 'add',
-      assetName: 'dylib_add',
-      sources: ['src/native_add.c'],
-      linkModePreference: LinkModePreference.dynamic,
-    ).run(input: input, output: output, logger: logger, routing: routing);
-
-    await CBuilder.library(
-      name: 'multiply',
-      assetName: 'dylib_multiply',
-      sources: ['src/native_multiply.c'],
-      linkModePreference: LinkModePreference.dynamic,
-    ).run(input: input, output: output, logger: logger, routing: routing);
-  });
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/hook/link.dart b/pkg/record_use/test_data/drop_dylib_recording/hook/link.dart
deleted file mode 100644
index 0795977..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/hook/link.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:hooks/hooks.dart';
-import 'package:code_assets/code_assets.dart';
-import 'package:record_use/record_use.dart';
-
-void main(List<String> arguments) async {
-  await link(arguments, (input, output) async {
-    final recordedUsagesFile = input.recordedUsagesFile;
-    if (recordedUsagesFile == null) {
-      throw ArgumentError(
-        'Enable the --enable-experiments=record-use experiment to use this app.',
-      );
-    }
-    final usages = await recordedUsages(recordedUsagesFile);
-    final codeAssets = input.assets.code;
-    print('Received assets: ${codeAssets.map((a) => a.id).join(', ')}.');
-
-    final symbols = <String>{};
-    final argumentsFile =
-        await File.fromUri(
-          input.outputDirectory.resolve('arguments.txt'),
-        ).create();
-
-    final dataLines = <String>[];
-    // Tree-shake unused assets using calls
-    for (final methodName in ['add', 'multiply']) {
-      final calls = usages.constArgumentsFor(
-        Identifier(
-          importUri:
-              'package:drop_dylib_recording/src/drop_dylib_recording.dart',
-          scope: 'MyMath',
-          name: methodName,
-        ),
-      );
-      for (var call in calls) {
-        dataLines.add(
-          'A call was made to "$methodName" with the arguments (${call.positional[0] as int},${call.positional[1] as int})',
-        );
-        symbols.add(methodName);
-      }
-    }
-
-    argumentsFile.writeAsStringSync(dataLines.join('\n'));
-
-    // Tree-shake unused assets
-    final instances = usages.constantsOf(
-      Identifier(
-        importUri: 'package:drop_dylib_recording/src/drop_dylib_recording.dart',
-        name: 'RecordCallToC',
-      ),
-    );
-    for (final instance in instances) {
-      final symbol = instance['symbol'] as String;
-      symbols.add(symbol);
-    }
-
-    final neededCodeAssets = [
-      for (final codeAsset in codeAssets)
-        if (symbols.any(codeAsset.id.endsWith)) codeAsset,
-    ];
-
-    print('Keeping only ${neededCodeAssets.map((e) => e.id).join(', ')}.');
-    output.assets.code.addAll(neededCodeAssets);
-
-    output.addDependency(recordedUsagesFile);
-  });
-}
-
-Future<RecordedUsages> recordedUsages(Uri recordedUsagesFile) async {
-  final file = File.fromUri(recordedUsagesFile);
-  final string = await file.readAsString();
-  final usages = RecordedUsages.fromJson(
-    jsonDecode(string) as Map<String, Object?>,
-  );
-  return usages;
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/lib/drop_dylib_recording.dart b/pkg/record_use/test_data/drop_dylib_recording/lib/drop_dylib_recording.dart
deleted file mode 100644
index 4041f22..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/lib/drop_dylib_recording.dart
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for 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/drop_dylib_recording.dart';
diff --git a/pkg/record_use/test_data/drop_dylib_recording/lib/src/drop_dylib_recording.dart b/pkg/record_use/test_data/drop_dylib_recording/lib/src/drop_dylib_recording.dart
deleted file mode 100644
index d031ddc..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/lib/src/drop_dylib_recording.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:meta/meta.dart';
-
-import 'drop_dylib_recording_bindings.dart' as bindings;
-
-class MyMath {
-  @RecordUse()
-  static int add(int a, int b) => bindings.add(a, b);
-
-  @RecordUse()
-  static int multiply(int a, int b) => bindings.multiply(a, b);
-
-  @RecordCallToC('add')
-  static int double(int a) => bindings.add(a, a);
-
-  @RecordCallToC('multiply')
-  static int square(int a) => bindings.multiply(a, a);
-}
-
-@RecordUse()
-class RecordCallToC {
-  final String symbol;
-
-  const RecordCallToC(this.symbol);
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/lib/src/drop_dylib_recording_bindings.dart b/pkg/record_use/test_data/drop_dylib_recording/lib/src/drop_dylib_recording_bindings.dart
deleted file mode 100644
index 8a1c412..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/lib/src/drop_dylib_recording_bindings.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. 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:ffi' as ffi;
-
-@ffi.Native<ffi.Int32 Function(ffi.Int32, ffi.Int32)>(
-    assetId: 'package:drop_dylib_recording/dylib_add')
-external int add(
-  int a,
-  int b,
-);
-
-@ffi.Native<ffi.Int32 Function(ffi.Int32, ffi.Int32)>(
-    assetId: 'package:drop_dylib_recording/dylib_multiply')
-external int multiply(
-  int a,
-  int b,
-);
diff --git a/pkg/record_use/test_data/drop_dylib_recording/pubspec.yaml b/pkg/record_use/test_data/drop_dylib_recording/pubspec.yaml
deleted file mode 100644
index 8dc3fc3..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/pubspec.yaml
+++ /dev/null
@@ -1,28 +0,0 @@
-name: drop_dylib_recording
-description: Generate two dylibs, remove one in linking based on recorded usage.
-version: 1.0.0
-
-publish_to: none
-
-environment:
-  sdk: ^3.0.0
-
-dependencies:
-  logging: ^1.1.1
-  meta: any
-  hooks:
-    path: ../../../../third_party/pkg/native/pkgs/hooks/
-  code_assets:
-    path: ../../../../third_party/pkg/native/pkgs/code_assets/
-  native_toolchain_c:
-    path: ../../../../third_party/pkg/native/pkgs/native_toolchain_c/
-  record_use:
-    path: ../../../record_use/
-
-dev_dependencies:
-  lints: any
-  test: any
-
-dependency_overrides:
-  meta:
-    path: ../../../meta/
diff --git a/pkg/record_use/test_data/drop_dylib_recording/src/native_add.c b/pkg/record_use/test_data/drop_dylib_recording/src/native_add.c
deleted file mode 100644
index 570e754..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/src/native_add.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "native_add.h"
-
-MYLIB_EXPORT int32_t add(int32_t a, int32_t b) {
-   return a + b;
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/src/native_add.h b/pkg/record_use/test_data/drop_dylib_recording/src/native_add.h
deleted file mode 100644
index 275878f..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/src/native_add.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include <stdint.h>
-
-#if _WIN32
-#define MYLIB_EXPORT __declspec(dllexport)
-#else
-#define MYLIB_EXPORT
-#endif
-
-MYLIB_EXPORT int32_t add(int32_t a, int32_t b);
diff --git a/pkg/record_use/test_data/drop_dylib_recording/src/native_multiply.c b/pkg/record_use/test_data/drop_dylib_recording/src/native_multiply.c
deleted file mode 100644
index 37ad926..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/src/native_multiply.c
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "native_multiply.h"
-
-MYLIB_EXPORT intptr_t multiply(intptr_t a, intptr_t b) {
-  return a * b;
-}
diff --git a/pkg/record_use/test_data/drop_dylib_recording/src/native_multiply.h b/pkg/record_use/test_data/drop_dylib_recording/src/native_multiply.h
deleted file mode 100644
index 1c326f4..0000000
--- a/pkg/record_use/test_data/drop_dylib_recording/src/native_multiply.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include <stdint.h>
-
-#if _WIN32
-#define MYLIB_EXPORT __declspec(dllexport)
-#else
-#define MYLIB_EXPORT
-#endif
-
-MYLIB_EXPORT intptr_t multiply(intptr_t a, intptr_t b);
diff --git a/pkg/record_use/test_data/manifest.yaml b/pkg/record_use/test_data/manifest.yaml
deleted file mode 100644
index ea0d2db..0000000
--- a/pkg/record_use/test_data/manifest.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-- drop_dylib_recording/pubspec.yaml
-- drop_dylib_recording/lib/src/drop_dylib_recording_bindings.dart
-- drop_dylib_recording/lib/src/drop_dylib_recording.dart
-- drop_dylib_recording/lib/drop_dylib_recording.dart
-- drop_dylib_recording/src/native_add.h
-- drop_dylib_recording/src/native_multiply.h
-- drop_dylib_recording/src/native_add.c
-- drop_dylib_recording/src/native_multiply.c
-- drop_dylib_recording/hook/link.dart
-- drop_dylib_recording/hook/build.dart
-- drop_dylib_recording/bin/drop_dylib_recording_calls.dart
-- drop_dylib_recording/bin/drop_dylib_recording_instances.dart
diff --git a/pkg/scrape/example/generic_classes.dart b/pkg/scrape/example/generic_classes.dart
index 0d961c1..acc93e3 100644
--- a/pkg/scrape/example/generic_classes.dart
+++ b/pkg/scrape/example/generic_classes.dart
@@ -15,10 +15,10 @@
 class GenericClassVisitor extends ScrapeVisitor {
   @override
   void visitClassDeclaration(ClassDeclaration node) {
-    if (node.typeParameters == null) {
+    if (node.namePart.typeParameters == null) {
       record('Classes', 0);
     } else {
-      record('Classes', node.typeParameters!.typeParameters.length);
+      record('Classes', node.namePart.typeParameters!.typeParameters.length);
     }
     super.visitClassDeclaration(node);
   }
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 8bf2d4b..9398ac2 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -134,7 +134,7 @@
       }
     }
 
-    T? enumOption<T extends NamedEnum>(
+    T? enumOption<T extends Enum>(
         String option, List<String> allowed, T Function(String) parse) {
       // Look up the value from the words in the name.
       T? fromName;
@@ -715,51 +715,37 @@
   }
 }
 
-class Architecture extends NamedEnum {
-  static const ia32 = Architecture._('ia32');
-  static const x64 = Architecture._('x64');
-  static const x64c = Architecture._('x64c');
-  static const simx64 = Architecture._('simx64');
-  static const simx64c = Architecture._('simx64c');
-  static const arm = Architecture._('arm');
+enum Architecture {
+  ia32._('ia32'),
+  x64._('x64'),
+  x64c._('x64c'),
+  simx64._('simx64', isSimulator: true),
+  simx64c._('simx64c', isSimulator: true),
+  arm._('arm'),
   // ignore: constant_identifier_names
-  static const arm_x64 = Architecture._('arm_x64');
-  static const arm64 = Architecture._('arm64');
-  static const arm64c = Architecture._('arm64c');
-  static const simarm = Architecture._('simarm');
+  arm_x64._('arm_x64'),
+  arm64._('arm64'),
+  arm64c._('arm64c'),
+  simarm._('simarm', isSimulator: true),
   // ignore: constant_identifier_names
-  static const simarm_x64 = Architecture._('simarm_x64');
-  static const simarm64 = Architecture._('simarm64');
+  simarm_x64._('simarm_x64', isSimulator: true),
+  simarm64._('simarm64', isSimulator: true),
   // ignore: constant_identifier_names
-  static const simarm64_arm64 = Architecture._('simarm64_arm64');
-  static const simarm64c = Architecture._('simarm64c');
-  static const riscv32 = Architecture._('riscv32');
-  static const riscv64 = Architecture._('riscv64');
-  static const simriscv32 = Architecture._('simriscv32');
-  static const simriscv64 = Architecture._('simriscv64');
+  simarm64_arm64._('simarm64_arm64', isSimulator: true),
+  simarm64c._('simarm64c', isSimulator: true),
+  riscv32._('riscv32'),
+  riscv64._('riscv64'),
+  simriscv32._('simriscv32', isSimulator: true),
+  simriscv64._('simriscv64', isSimulator: true);
+
+  final String name;
+  final bool isSimulator;
+  const Architecture._(this.name, {this.isSimulator = false});
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, Architecture>.fromIterable([
-    ia32,
-    x64,
-    x64c,
-    simx64,
-    simx64c,
-    arm,
-    arm_x64,
-    arm64,
-    arm64c,
-    simarm,
-    simarm_x64,
-    simarm64,
-    simarm64_arm64,
-    simarm64c,
-    riscv32,
-    riscv64,
-    simriscv32,
-    simriscv64,
-  ], key: (architecture) => (architecture as Architecture).name);
+  static final _all = Map<String, Architecture>.fromIterable(values,
+      key: (a) => (a as Architecture).name);
 
   static Architecture find(String name) {
     var architecture = _all[name];
@@ -768,23 +754,9 @@
     throw ArgumentError('Unknown architecture "$name".');
   }
 
-  const Architecture._(super.name);
-
-  bool get isSimulator => _simulators.contains(this);
-  static final _simulators = <Architecture>{
-    simx64,
-    simx64c,
-    simarm,
-    simarm_x64,
-    simarm64,
-    simarm64c,
-    simriscv32,
-    simriscv64,
-  };
-
   static final Architecture host = _computeHost();
   static Architecture _computeHost() {
-    if (!const bool.hasEnvironment('dart.library.ffi')){
+    if (!const bool.hasEnvironment('dart.library.ffi')) {
       // We're inside a test which very likely uses the `isXConfiguration`
       // getters from  `package:expect/config.dart` which makes us
       // try to guess the [Configuration]`s architecture if it wasn't passed as
@@ -833,61 +805,92 @@
 
     throw "Unknown host architecture: $arch";
   }
+
+  @override
+  String toString() => name;
 }
 
 /// Specifies the output format used by gen_snapshot to create AOT snapshots.
-class GenSnapshotFormat extends NamedEnum {
-  static const assembly = GenSnapshotFormat._('assembly', 'assembly');
-  static const elf = GenSnapshotFormat._('elf', 'elf');
-  static const machODylib = GenSnapshotFormat._('macho-dylib', 'macho');
+enum GenSnapshotFormat {
+  assembly('assembly', 'assembly'),
+  elf('elf', 'elf'),
+  machODylib('macho-dylib', 'macho');
+
+  final String name;
+  final String fileOption;
+
+  const GenSnapshotFormat(this.name, this.fileOption);
+
+  static final _all = Map<String, GenSnapshotFormat>.fromIterable(
+    values,
+    key: (f) => (f as GenSnapshotFormat).name,
+  );
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, GenSnapshotFormat>.fromIterable([
-    assembly,
-    elf,
-    machODylib,
-  ], key: (format) => (format as GenSnapshotFormat).name);
-
   static GenSnapshotFormat find(String name) {
     var format = _all[name];
     if (format != null) return format;
-
     throw ArgumentError('Unknown gen_snapshot format "$name".');
   }
 
   String get snapshotType => 'app-aot-$name';
 
-  final String fileOption;
-  const GenSnapshotFormat._(super.name, this.fileOption);
+  @override
+  String toString() => name;
 }
 
-class Compiler extends NamedEnum {
-  static const dart2js = Compiler._('dart2js');
-  static const dart2analyzer = Compiler._('dart2analyzer');
-  static const dart2wasm = Compiler._('dart2wasm');
-  static const ddc = Compiler._('ddc');
-  static const appJitk = Compiler._('app_jitk');
-  static const dartk = Compiler._('dartk');
-  static const dartkp = Compiler._('dartkp');
-  static const specParser = Compiler._('spec_parser');
-  static const fasta = Compiler._('fasta');
-  static const dart2bytecode = Compiler._('dart2bytecode');
+enum Compiler {
+  // Note: by adding 'none' as a configuration, if the user
+  // runs test.py -c dart2js -r drt,none the dart2js_none and
+  // dart2js_drt will be duplicating work. If later we don't need 'none'
+  // with dart2js, we should remove it from here.
+  dart2js._('dart2js',
+      supportedRuntimes: [
+        Runtime.d8,
+        Runtime.jsshell,
+        Runtime.none,
+        Runtime.firefox,
+        Runtime.chrome,
+        Runtime.safari,
+        Runtime.edge,
+        Runtime.chromeOnAndroid,
+      ],
+      defaultMode: Mode.release),
+  dart2analyzer._('dart2analyzer', defaultMode: Mode.release),
+  dart2wasm._('dart2wasm',
+      supportedRuntimes: [
+        Runtime.none,
+        Runtime.jsc,
+        Runtime.jsshell,
+        Runtime.d8,
+        Runtime.chrome,
+        Runtime.firefox,
+        Runtime.safari,
+      ],
+      defaultMode: Mode.release),
+  ddc._('ddc',
+      supportedRuntimes: [
+        Runtime.none,
+        Runtime.d8,
+        Runtime.chrome,
+        Runtime.edge,
+        Runtime.firefox,
+        Runtime.safari,
+      ],
+      defaultMode: Mode.release),
+  appJitk._('app_jitk', supportedRuntimes: [Runtime.vm]),
+  dartk._('dartk', supportedRuntimes: [Runtime.vm]),
+  dartkp._('dartkp', supportedRuntimes: [Runtime.dartPrecompiled]),
+  specParser._('spec_parser'),
+  fasta._('fasta', defaultMode: Mode.release),
+  dart2bytecode._('dart2bytecode',
+      supportedRuntimes: [Runtime.vm, Runtime.dartPrecompiled]);
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, Compiler>.fromIterable([
-    dart2js,
-    dart2analyzer,
-    dart2wasm,
-    ddc,
-    appJitk,
-    dartk,
-    dartkp,
-    specParser,
-    fasta,
-    dart2bytecode,
-  ], key: (compiler) => (compiler as Compiler).name);
+  static final _all = Map<String, Compiler>.fromIterable(values,
+      key: (c) => (c as Compiler).name);
 
   static Compiler find(String name) {
     var compiler = _all[name];
@@ -896,64 +899,12 @@
     throw ArgumentError('Unknown compiler "$name".');
   }
 
-  const Compiler._(super.name);
-
-  /// Gets the runtimes this compiler can target.
-  List<Runtime> get supportedRuntimes {
-    switch (this) {
-      case Compiler.dart2js:
-        // Note: by adding 'none' as a configuration, if the user
-        // runs test.py -c dart2js -r drt,none the dart2js_none and
-        // dart2js_drt will be duplicating work. If later we don't need 'none'
-        // with dart2js, we should remove it from here.
-        return const [
-          Runtime.d8,
-          Runtime.jsshell,
-          Runtime.none,
-          Runtime.firefox,
-          Runtime.chrome,
-          Runtime.safari,
-          Runtime.edge,
-          Runtime.chromeOnAndroid,
-        ];
-
-      case Compiler.ddc:
-        return const [
-          Runtime.none,
-          Runtime.d8,
-          Runtime.chrome,
-          Runtime.edge,
-          Runtime.firefox,
-          Runtime.safari,
-        ];
-
-      case Compiler.dart2wasm:
-        return const [
-          Runtime.none,
-          Runtime.jsc,
-          Runtime.jsshell,
-          Runtime.d8,
-          Runtime.chrome,
-          Runtime.firefox,
-          Runtime.safari,
-        ];
-      case Compiler.dart2analyzer:
-        return const [Runtime.none];
-      case Compiler.appJitk:
-      case Compiler.dartk:
-        return const [Runtime.vm];
-      case Compiler.dartkp:
-        return const [Runtime.dartPrecompiled];
-      case Compiler.specParser:
-        return const [Runtime.none];
-      case Compiler.fasta:
-        return const [Runtime.none];
-      case Compiler.dart2bytecode:
-        return const [Runtime.vm, Runtime.dartPrecompiled];
-    }
-
-    throw "unreachable";
-  }
+  final String name;
+  final List<Runtime> supportedRuntimes;
+  final Mode defaultMode;
+  const Compiler._(this.name,
+      {this.supportedRuntimes = const [Runtime.none],
+      this.defaultMode = Mode.debug});
 
   /// The preferred runtime to use with this compiler if no other runtime is
   /// specified.
@@ -965,47 +916,28 @@
         return Runtime.d8;
       case Compiler.ddc:
         return Runtime.chrome;
-      case Compiler.dart2analyzer:
-        return Runtime.none;
-      case Compiler.appJitk:
-      case Compiler.dartk:
-        return Runtime.vm;
       case Compiler.dartkp:
         return Runtime.dartPrecompiled;
-      case Compiler.specParser:
-      case Compiler.fasta:
-        return Runtime.none;
       case Compiler.dart2bytecode:
         return Runtime.dartPrecompiled;
-    }
-
-    throw "unreachable";
-  }
-
-  Mode get defaultMode {
-    switch (this) {
-      case Compiler.dart2analyzer:
-      case Compiler.dart2js:
-      case Compiler.dart2wasm:
-      case Compiler.ddc:
-      case Compiler.fasta:
-        return Mode.release;
-
       default:
-        return Mode.debug;
+        return supportedRuntimes.first;
     }
   }
+
+  @override
+  String toString() => name;
 }
 
-class Mode extends NamedEnum {
-  static const debug = Mode._('debug');
-  static const product = Mode._('product');
-  static const release = Mode._('release');
+enum Mode {
+  debug._('debug'),
+  product._('product'),
+  release._('release');
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, Mode>.fromIterable([debug, product, release],
-      key: (mode) => (mode as Mode).name);
+  static final _all =
+      Map<String, Mode>.fromIterable(values, key: (m) => (m as Mode).name);
 
   static Mode find(String name) {
     var mode = _all[name];
@@ -1014,25 +946,28 @@
     throw ArgumentError('Unknown mode "$name".');
   }
 
-  const Mode._(super.name);
+  final String name;
+  const Mode._(this.name);
 
   bool get isDebug => this == debug;
+
+  @override
+  String toString() => name;
 }
 
-class Sanitizer extends NamedEnum {
-  static const none = Sanitizer._('none');
-  static const asan = Sanitizer._('asan');
-  static const hwasan = Sanitizer._('hwasan');
-  static const lsan = Sanitizer._('lsan');
-  static const msan = Sanitizer._('msan');
-  static const tsan = Sanitizer._('tsan');
-  static const ubsan = Sanitizer._('ubsan');
+enum Sanitizer {
+  none._('none'),
+  asan._('asan'),
+  hwasan._('hwasan'),
+  lsan._('lsan'),
+  msan._('msan'),
+  tsan._('tsan'),
+  ubsan._('ubsan');
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, Sanitizer>.fromIterable(
-      [none, asan, hwasan, lsan, msan, tsan, ubsan],
-      key: (mode) => (mode as Sanitizer).name);
+  static final _all = Map<String, Sanitizer>.fromIterable(values,
+      key: (s) => (s as Sanitizer).name);
 
   static Sanitizer find(String name) {
     var mode = _all[name];
@@ -1041,39 +976,31 @@
     throw ArgumentError('Unknown sanitizer "$name".');
   }
 
-  const Sanitizer._(super.name);
+  final String name;
+  const Sanitizer._(this.name);
+
+  @override
+  String toString() => name;
 }
 
-class Runtime extends NamedEnum {
-  static const vm = Runtime._('vm');
-  static const flutter = Runtime._('flutter');
-  static const dartPrecompiled = Runtime._('dart_precompiled');
-  static const d8 = Runtime._('d8');
-  static const jsc = Runtime._('jsc');
-  static const jsshell = Runtime._('jsshell');
-  static const firefox = Runtime._('firefox');
-  static const chrome = Runtime._('chrome');
-  static const safari = Runtime._('safari');
-  static const edge = Runtime._('edge');
-  static const chromeOnAndroid = Runtime._('chromeOnAndroid');
-  static const none = Runtime._('none');
+enum Runtime {
+  vm._('vm'),
+  flutter._('flutter'),
+  dartPrecompiled._('dart_precompiled'),
+  d8._('d8', isJSCommandLine: true),
+  jsc._('jsc', isJSCommandLine: true),
+  jsshell._('jsshell', isJSCommandLine: true),
+  firefox._('firefox', isBrowser: true),
+  chrome._('chrome', isBrowser: true),
+  safari._('safari', isBrowser: true),
+  edge._('edge', isBrowser: true),
+  chromeOnAndroid._('chromeOnAndroid', isBrowser: true),
+  none._('none');
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, Runtime>.fromIterable([
-    vm,
-    flutter,
-    dartPrecompiled,
-    d8,
-    jsc,
-    jsshell,
-    firefox,
-    chrome,
-    safari,
-    edge,
-    chromeOnAndroid,
-    none
-  ], key: (runtime) => (runtime as Runtime).name);
+  static final _all = Map<String, Runtime>.fromIterable(values,
+      key: (r) => (r as Runtime).name);
 
   static Runtime find(String name) {
     var runtime = _all[name];
@@ -1082,15 +1009,15 @@
     throw ArgumentError('Unknown runtime "$name".');
   }
 
-  const Runtime._(super.name);
-
-  bool get isBrowser =>
-      const [edge, safari, chrome, firefox, chromeOnAndroid].contains(this);
-
-  bool get isSafari => name.startsWith("safari");
+  final String name;
+  final bool isBrowser;
 
   /// Whether this runtime is a command-line JavaScript environment.
-  bool get isJSCommandLine => const [d8, jsc, jsshell].contains(this);
+  final bool isJSCommandLine;
+  const Runtime._(this.name,
+      {this.isBrowser = false, this.isJSCommandLine = false});
+
+  bool get isSafari => name.startsWith("safari");
 
   /// The preferred compiler to use with this runtime if no other compiler is
   /// specified.
@@ -1119,82 +1046,73 @@
         // If we aren't running it, we probably just want to analyze it.
         return Compiler.dart2analyzer;
     }
-
-    throw "unreachable";
   }
+
+  @override
+  String toString() => name;
 }
 
-class System extends NamedEnum {
-  static const android = System._('android');
-  static const fuchsia = System._('fuchsia');
-  static const linux = System._('linux');
-  static const mac = System._('mac');
-  static const win = System._('win');
+enum System {
+  android._('android'),
+  fuchsia._('fuchsia'),
+  linux._('linux'),
+  mac._('mac', outputDirectory: 'xcodebuild/'),
+  win._('win');
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = Map<String, System>.fromIterable(
-      [android, fuchsia, linux, mac, win],
-      key: (system) => (system as System).name);
+  static final _all =
+      Map<String, System>.fromIterable(values, key: (s) => (s as System).name);
 
   /// Gets the system of the current machine.
   static System get host => find(Platform.operatingSystem);
 
+  // Alternate allowed names, e.g., the names used by dart:io, that shouldn't
+  // be reported in the [names] getter.
+  static final _alternateNames = <String, System>{
+    "macos": mac,
+    "windows": win,
+  };
+
   static System find(String name) {
     var system = _all[name];
     if (system != null) return system;
-
-    // Also allow dart:io's names for the operating systems.
-    switch (Platform.operatingSystem) {
-      case "macos":
-        return mac;
-      case "windows":
-        return win;
-    }
+    system = _alternateNames[name];
+    if (system != null) return system;
     // TODO(rnystrom): What about ios?
 
     throw ArgumentError('Unknown operating system "$name".');
   }
 
-  const System._(super.name);
+  final String name;
 
   /// The root directory name for build outputs on this system.
-  String get outputDirectory {
-    switch (this) {
-      case android:
-      case fuchsia:
-      case linux:
-      case win:
-        return 'out/';
+  final String outputDirectory;
+  const System._(this.name, {this.outputDirectory = 'out/'});
 
-      case mac:
-        return 'xcodebuild/';
-    }
-
-    throw "unreachable";
-  }
+  @override
+  String toString() => name;
 }
 
 // TODO(rnystrom): NnbdMode.legacy can be removed now that opted out code is no
 // longer supported. This entire enum and the notion of "NNBD modes" can be
 // removed once it's no longer possible to run programs in unsound weak mode.
 /// What level of non-nullability support should be applied to the test files.
-class NnbdMode extends NamedEnum {
+enum NnbdMode {
   /// "Opted out" legacy mode with no NNBD features allowed.
-  static const legacy = NnbdMode._('legacy');
+  legacy._('legacy'),
 
   /// Opted in to NNBD features, but only static checking and weak runtime
   /// checks.
-  static const weak = NnbdMode._('weak');
+  weak._('weak'),
 
   /// Opted in to NNBD features and with full sound runtime checks.
-  static const strong = NnbdMode._('strong');
+  strong._('strong');
 
   static final List<String> names = _all.keys.toList();
 
-  static final _all = {
-    for (var mode in [legacy, weak, strong]) mode.name: mode
-  };
+  static final _all = Map<String, NnbdMode>.fromIterable(values,
+      key: (m) => (m as NnbdMode).name);
 
   static NnbdMode find(String name) {
     var mode = _all[name];
@@ -1203,14 +1121,8 @@
     throw ArgumentError('Unknown NNBD mode "$name".');
   }
 
-  const NnbdMode._(super.name);
-}
-
-/// Base class for an enum-like class whose values are identified by name.
-abstract class NamedEnum {
   final String name;
-
-  const NamedEnum(this.name);
+  const NnbdMode._(this.name);
 
   @override
   String toString() => name;
diff --git a/pkg/test_runner/analysis_options.yaml b/pkg/test_runner/analysis_options.yaml
index a2884c0..a8d712d 100644
--- a/pkg/test_runner/analysis_options.yaml
+++ b/pkg/test_runner/analysis_options.yaml
@@ -3,9 +3,6 @@
 analyzer:
   language:
     strict-casts: true
-  errors:
-    # TODO: These issues should be addressed.
-    exhaustive_cases: ignore
 
 linter:
   rules:
diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart
index c284468..5f95f8e 100644
--- a/pkg/test_runner/lib/src/compiler_configuration.dart
+++ b/pkg/test_runner/lib/src/compiler_configuration.dart
@@ -108,8 +108,6 @@
       case Compiler.dart2bytecode:
         return BytecodeCompilerConfiguration(configuration);
     }
-
-    throw "unreachable";
   }
 
   CompilerConfiguration._subclass(this._configuration);
@@ -1086,6 +1084,8 @@
         case Architecture.simriscv64:
           target = ['-arch', 'riscv64'];
           break;
+        default:
+          throw 'Unhandled architecture: ${_configuration.architecture}';
       }
     } else if (Platform.isWindows) {
       cc = 'buildtools\\win-x64\\clang\\bin\\clang.exe';
@@ -1103,6 +1103,8 @@
         case Architecture.simarm64c:
           target = ['--target=arm64-windows'];
           break;
+        default:
+          throw 'Unhandled architecture: ${_configuration.architecture}';
       }
       ldFlags.add('-nostdlib');
       ldFlags.add('-Wl,/NOENTRY');
@@ -1443,6 +1445,9 @@
     var dillFile = tempKernelFile(tempDir);
 
     var isProductMode = _configuration.configuration.mode == Mode.product;
+    var isAsan = _configuration.configuration.sanitizer == Sanitizer.asan;
+    var isMsan = _configuration.configuration.sanitizer == Sanitizer.msan;
+    var isTsan = _configuration.configuration.sanitizer == Sanitizer.tsan;
 
     var args = [
       _isAot ? '--aot' : '--no-aot',
@@ -1457,6 +1462,9 @@
           name.startsWith('--enable-experiment=') ||
           name.startsWith('--keep-class-names-implementing=')),
       '-Ddart.vm.product=$isProductMode',
+      '-Ddart.vm.asan=$isAsan',
+      '-Ddart.vm.msan=$isMsan',
+      '-Ddart.vm.tsan=$isTsan',
       if (_enableAsserts ||
           arguments.contains('--enable-asserts') ||
           arguments.contains('--enable_asserts'))
@@ -1607,6 +1615,9 @@
       Map<String, String> environmentOverrides) {
     final bytecodeFile = tempBytecodeFile(tempDir);
     final isProductMode = _configuration.configuration.mode == Mode.product;
+    final isAsan = _configuration.configuration.sanitizer == Sanitizer.asan;
+    final isMsan = _configuration.configuration.sanitizer == Sanitizer.msan;
+    final isTsan = _configuration.configuration.sanitizer == Sanitizer.tsan;
 
     final args = [
       dart2bytecodeSnapshot(),
@@ -1620,6 +1631,9 @@
           name.startsWith('--packages=') ||
           name.startsWith('--enable-experiment=')),
       '-Ddart.vm.product=$isProductMode',
+      '-Ddart.vm.asan=$isAsan',
+      '-Ddart.vm.msan=$isMsan',
+      '-Ddart.vm.tsan=$isTsan',
       if (_enableAsserts ||
           arguments.contains('--enable-asserts') ||
           arguments.contains('--enable_asserts'))
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index 5183c38..dea6e14 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -380,6 +380,8 @@
       case Runtime.firefox:
         location = firefoxPath;
         break;
+      default:
+        break;
     }
 
     if (location != null) return location;
diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart
index e7ef000..b56ae10 100644
--- a/pkg/test_runner/lib/src/runtime_configuration.dart
+++ b/pkg/test_runner/lib/src/runtime_configuration.dart
@@ -57,10 +57,12 @@
           return DartkFuchsiaEmulatorRuntimeConfiguration(true);
         }
         return DartPrecompiledRuntimeConfiguration(
-            configuration.genSnapshotFormat == GenSnapshotFormat.elf,
-          );
+          configuration.genSnapshotFormat == GenSnapshotFormat.elf,
+        );
+
+      default:
+        throw "unreachable";
     }
-    throw "unreachable";
   }
 
   factory RuntimeConfiguration(TestConfiguration configuration) {
@@ -290,32 +292,33 @@
   }
 }
 
-class QemuConfig {
+enum QemuConfig {
+  ia32._('qemu-i386', '/usr/lib/i386-linux-gnu/'),
+  x64._('qemu-x86_64', '/usr/lib/x86_64-linux-gnu/'),
+  arm._('qemu-arm', '/usr/arm-linux-gnueabihf/'),
+  arm64._('qemu-aarch64', '/usr/aarch64-linux-gnu/'),
+  riscv32._('qemu-riscv32', '/usr/riscv32-linux-gnu/'),
+  riscv64._('qemu-riscv64', '/usr/riscv64-linux-gnu/');
+
   static const all = <Architecture, QemuConfig>{
-    Architecture.ia32:
-        QemuConfig('qemu-i386', '/usr/lib/i386-linux-gnu/'),
-    Architecture.x64:
-        QemuConfig('qemu-x86_64', '/usr/lib/x86_64-linux-gnu/'),
-    Architecture.x64c:
-        QemuConfig('qemu-x86_64', '/usr/lib/x86_64-linux-gnu/'),
-    Architecture.arm:
-        QemuConfig('qemu-arm', '/usr/arm-linux-gnueabihf/'),
-    Architecture.arm64:
-        QemuConfig('qemu-aarch64', '/usr/aarch64-linux-gnu/'),
-    Architecture.simarm64_arm64:
-        QemuConfig('qemu-aarch64', '/usr/aarch64-linux-gnu/'),
-    Architecture.arm64c:
-        QemuConfig('qemu-aarch64', '/usr/aarch64-linux-gnu/'),
-    Architecture.riscv32:
-        QemuConfig('qemu-riscv32', '/usr/riscv32-linux-gnu/'),
-    Architecture.riscv64:
-        QemuConfig('qemu-riscv64', '/usr/riscv64-linux-gnu/'),
+    Architecture.ia32: QemuConfig.ia32,
+    Architecture.x64: QemuConfig.x64,
+    Architecture.x64c: QemuConfig.x64,
+    Architecture.arm: QemuConfig.arm,
+    Architecture.arm64: QemuConfig.arm64,
+    Architecture.simarm64_arm64: QemuConfig.arm64,
+    Architecture.arm64c: QemuConfig.arm64,
+    Architecture.riscv32: QemuConfig.riscv32,
+    Architecture.riscv64: QemuConfig.riscv64,
   };
 
   final String executable;
   final String elfInterpreterPrefix;
 
-  const QemuConfig(this.executable, this.elfInterpreterPrefix);
+  const QemuConfig._(this.executable, this.elfInterpreterPrefix);
+
+  @override
+  String toString() => executable;
 }
 
 /// Common runtime configuration for runtimes based on the Dart VM.
@@ -339,6 +342,8 @@
       case Architecture.simriscv64:
         multiplier *= 4;
         break;
+      default:
+        break;
     }
 
     if (_configuration.useQemu) {
@@ -371,6 +376,7 @@
       case Sanitizer.ubsan:
         multiplier *= 1;
         break;
+      case Sanitizer.hwasan:
       case Sanitizer.asan:
       case Sanitizer.msan:
         multiplier *= 2;
diff --git a/pkg/test_runner/lib/src/static_error.dart b/pkg/test_runner/lib/src/static_error.dart
index 3868dc7..6a1587c 100644
--- a/pkg/test_runner/lib/src/static_error.dart
+++ b/pkg/test_runner/lib/src/static_error.dart
@@ -329,6 +329,8 @@
         // TODO(rnystrom): If the web compilers report warnings, encode that in
         // the message somehow and then look for it here.
         return false;
+      default:
+        break;
     }
 
     throw UnsupportedError("ErrorSource ${source.name}");
diff --git a/pkg/test_runner/lib/src/test_configurations.dart b/pkg/test_runner/lib/src/test_configurations.dart
index 6153692..2eb3289 100644
--- a/pkg/test_runner/lib/src/test_configurations.dart
+++ b/pkg/test_runner/lib/src/test_configurations.dart
@@ -46,6 +46,7 @@
   Path('third_party/pkg/native/pkgs/hooks_runner'),
   Path('third_party/pkg/native/pkgs/hooks'),
   Path('third_party/pkg/native/pkgs/native_toolchain_c'),
+  Path('third_party/pkg/native/pkgs/record_use'),
   Path('third_party/pkg/package_config'),
   Path('utils/tests/peg'),
 ];
diff --git a/pkg/test_runner/lib/src/test_progress.dart b/pkg/test_runner/lib/src/test_progress.dart
index dbfcc85..75b30b5 100644
--- a/pkg/test_runner/lib/src/test_progress.dart
+++ b/pkg/test_runner/lib/src/test_progress.dart
@@ -426,11 +426,13 @@
   static EventListener? fromProgress(
       Progress progress, DateTime startTime, Formatter formatter) {
     switch (progress) {
+      case Progress.color:
       case Progress.compact:
         return CompactProgressIndicator(startTime, formatter);
       case Progress.line:
       case Progress.verbose:
         return LineProgressIndicator(startTime);
+      case Progress.silent:
       case Progress.status:
         return null;
     }
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 92cdb3e..adc6700 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -188,6 +188,11 @@
     help: 'Enable protobuf tree shaker v2 in AOT mode.',
     defaultsTo: false,
   );
+  args.addFlag(
+    'protobuf-tree-shaker-mixins',
+    help: 'Include protobuf messages with mixins in the tree shaker pass.',
+    defaultsTo: false,
+  );
   args.addMultiOption(
     'define',
     abbr: 'D',
@@ -318,6 +323,7 @@
   final bool embedSources = options['embed-sources'];
   final bool enableAsserts = options['enable-asserts'];
   final bool useProtobufTreeShakerV2 = options['protobuf-tree-shaker-v2'];
+  final bool protobufTreeShakerMixins = options['protobuf-tree-shaker-mixins'];
   final String? manifestFilename = options['manifest'];
   final String? dataDir = options['component-name'] ?? options['data-dir'];
   final bool? supportMirrors = options['support-mirrors'];
@@ -456,6 +462,7 @@
       environmentDefines: environmentDefines,
       enableAsserts: enableAsserts,
       useProtobufTreeShakerV2: useProtobufTreeShakerV2,
+      protobufTreeShakerMixins: protobufTreeShakerMixins,
       minimalKernel: minimalKernel,
       treeShakeWriteOnlyFields: treeShakeWriteOnlyFields,
       targetOS: targetOS,
@@ -580,6 +587,7 @@
   final bool useRapidTypeAnalysis;
   final bool treeShakeWriteOnlyFields;
   final bool useProtobufTreeShakerV2;
+  final bool protobufTreeShakerMixins;
   final bool minimalKernel;
   final String? targetOS;
   final String? fromDillFile;
@@ -603,6 +611,7 @@
     this.useRapidTypeAnalysis = true,
     this.treeShakeWriteOnlyFields = false,
     this.useProtobufTreeShakerV2 = false,
+    this.protobufTreeShakerMixins = false,
     this.minimalKernel = false,
     this.targetOS,
     this.fromDillFile,
@@ -825,6 +834,7 @@
       treeShakeSignatures: !args.minimalKernel,
       treeShakeWriteOnlyFields: args.treeShakeWriteOnlyFields,
       treeShakeProtobufs: args.useProtobufTreeShakerV2,
+      treeShakeProtobufMixins: args.protobufTreeShakerMixins,
       useRapidTypeAnalysis: args.useRapidTypeAnalysis,
     );
   } else {
diff --git a/pkg/vm/lib/modular/target/dart_runner.dart b/pkg/vm/lib/modular/target/dart_runner.dart
index fbd4124..828e957 100644
--- a/pkg/vm/lib/modular/target/dart_runner.dart
+++ b/pkg/vm/lib/modular/target/dart_runner.dart
@@ -30,6 +30,7 @@
     'dart:mirrors',
 
     'dart:typed_data',
+    'dart:_vm',
     'dart:nativewrappers',
     'dart:io',
 
diff --git a/pkg/vm/lib/modular/target/flutter.dart b/pkg/vm/lib/modular/target/flutter.dart
index 8dae83e..67aaeff 100644
--- a/pkg/vm/lib/modular/target/flutter.dart
+++ b/pkg/vm/lib/modular/target/flutter.dart
@@ -36,6 +36,7 @@
     'dart:mirrors',
 
     'dart:typed_data',
+    'dart:_vm',
     'dart:nativewrappers',
     'dart:io',
 
diff --git a/pkg/vm/lib/modular/target/flutter_runner.dart b/pkg/vm/lib/modular/target/flutter_runner.dart
index 478fb46..ddd13bc 100644
--- a/pkg/vm/lib/modular/target/flutter_runner.dart
+++ b/pkg/vm/lib/modular/target/flutter_runner.dart
@@ -30,6 +30,7 @@
     'dart:mirrors',
 
     'dart:typed_data',
+    'dart:_vm',
     'dart:nativewrappers',
     'dart:io',
 
diff --git a/pkg/vm/lib/modular/target/vm.dart b/pkg/vm/lib/modular/target/vm.dart
index 9ec3b38..90ae40a 100644
--- a/pkg/vm/lib/modular/target/vm.dart
+++ b/pkg/vm/lib/modular/target/vm.dart
@@ -98,6 +98,7 @@
     'dart:mirrors',
 
     'dart:typed_data',
+    'dart:_vm',
     'dart:vmservice_io',
     'dart:_vmservice',
     'dart:_builtin',
@@ -364,52 +365,6 @@
     );
   }
 
-  @override
-  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,
-  }) {
-    int type = _invocationType(
-      isMethod: isMethod,
-      isGetter: isGetter,
-      isSetter: isSetter,
-      isField: isField,
-      isLocalVariable: isLocalVariable,
-      isDynamic: isDynamic,
-      isSuper: isSuper,
-      isStatic: isStatic,
-      isConstructor: isConstructor,
-      isTopLevel: isTopLevel,
-    );
-    return new StaticInvocation(
-      coreTypes.noSuchMethodErrorDefaultConstructor,
-      new Arguments(<Expression>[
-        receiver,
-        _instantiateInvocationMirrorWithType(
-          coreTypes,
-          receiver,
-          name,
-          arguments,
-          offset,
-          type,
-        ),
-      ]),
-    );
-  }
-
   int _invocationType({
     bool isMethod = false,
     bool isGetter = false,
diff --git a/pkg/vm/lib/modular/transformations/deeply_immutable.dart b/pkg/vm/lib/modular/transformations/deeply_immutable.dart
index e4a8c02..0b6bf0b 100644
--- a/pkg/vm/lib/modular/transformations/deeply_immutable.dart
+++ b/pkg/vm/lib/modular/transformations/deeply_immutable.dart
@@ -139,6 +139,16 @@
       }
     }
 
+    if ((node.name == 'ScopedThreadLocal' || node.name == 'FinalThreadLocal')) {
+      final uri = node.enclosingLibrary.importUri;
+      if (uri.isScheme('dart') && uri.path == '_vm') {
+        // ScopedThreadLocal has non-deeply-immutable initializer,
+        // but we allow it.
+        // TODO(dartbug.com/61962): remove this once the bug is fixed.
+        return;
+      }
+    }
+
     // All instance fields should be non-late final and deeply immutable.
     for (final field in node.fields) {
       if (field.isStatic) {
diff --git a/pkg/vm/lib/transformations/dynamic_interface_annotator.dart b/pkg/vm/lib/transformations/dynamic_interface_annotator.dart
index 96939a7..e105c41 100644
--- a/pkg/vm/lib/transformations/dynamic_interface_annotator.dart
+++ b/pkg/vm/lib/transformations/dynamic_interface_annotator.dart
@@ -262,6 +262,7 @@
         annotateMember(tearOff as Member);
       }
     }
+    node.declaredRepresentationType.accept(this);
   }
 }
 
@@ -397,6 +398,9 @@
       final target = node.function.redirectingFactoryTarget?.target;
       target?.acceptReference(this);
     }
+    if (node.isConst) {
+      node.visitChildren(this);
+    }
   }
 
   @override
diff --git a/pkg/vm/lib/transformations/mixin_deduplication.dart b/pkg/vm/lib/transformations/mixin_deduplication.dart
index ab82813..c345998 100644
--- a/pkg/vm/lib/transformations/mixin_deduplication.dart
+++ b/pkg/vm/lib/transformations/mixin_deduplication.dart
@@ -4,24 +4,54 @@
 
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart' show CoreTypes;
+import 'package:kernel/import_table.dart';
 import 'package:kernel/target/targets.dart' show Target;
 import 'package:kernel/type_algebra.dart';
 
 import 'pragma.dart';
 
+const String _dedupLibraryName = 'dart:mixin_deduplication';
+
 /// De-duplication of identical mixin applications.
+///
+/// Moves all canonicalized mixin application into a new library so that the
+/// users of the mixin application can import that library without importing
+/// everything else from the canonical mixin's source library.
+///
+/// If [useUniqueDeduplicationLibrary] is true, each deduplicated mixin
+/// application will be moved into its own library. This reduces the number of
+/// libraries that need to be imported by the users of the mixin application.
 void transformLibraries(
   List<Library> libraries,
   CoreTypes coreTypes,
-  Target target,
-) {
-  final deduplicateMixins = new DeduplicateMixinsTransformer(coreTypes, target);
-  final referenceUpdater = ReferenceUpdater(deduplicateMixins);
+  Target target, {
+  bool useUniqueDeduplicationLibrary = false,
+}) {
+  if (libraries.isEmpty) return;
+  final deduplicateMixins = new _DeduplicateMixinsTransformer(
+    coreTypes,
+    target,
+  );
+
+  final Map<Library, Set<Library>> addedImports = {};
+
+  final relocator = _DeduplicateRelocator(
+    libraries.first.enclosingComponent!,
+    addedImports,
+    useUniqueDeduplicationLibrary,
+  );
+
+  final referenceUpdater = _ReferenceUpdater(deduplicateMixins, addedImports);
 
   // Deduplicate mixins and re-resolve super initializers.
   // (this is a shallow transformation)
   libraries.forEach((library) => deduplicateMixins.visitLibrary(library, null));
 
+  relocator.relocateCanonicalClasses(
+    deduplicateMixins._canonicalMixins.values,
+    deduplicateMixins._superRemapped,
+  );
+
   // Do a deep transformation to update references to the removed mixin
   // application classes in the interface targets and types.
   //
@@ -40,15 +70,40 @@
   // CFE decides to consistently let the interface target point to the mixin
   // class (instead of mixin application).
   libraries.forEach(referenceUpdater.visitLibrary);
+
+  // Add imports to the new mixin deduplication library(-ies).
+  for (final library in relocator.newLibraries) {
+    final importTable = LibraryImportTable(library);
+    for (final importedLibrary in importTable.importedLibraries) {
+      if (library != importedLibrary &&
+          (addedImports[library] ??= {}).add(importedLibrary)) {
+        library.addDependency(LibraryDependency.import(importedLibrary));
+      }
+    }
+  }
 }
 
 /// De-duplication of identical mixin applications.
+///
+/// Moves all canonicalized mixin application into a new library so that the
+/// users of the mixin application can import that library without importing
+/// everything else from the canonical mixin's source library.
+///
+/// If [useUniqueDeduplicationLibrary] is true, each deduplicated mixin
+/// application will be moved into its own library. This reduces the number of
+/// libraries that need to be imported by the users of the mixin application.
 void transformComponent(
   Component component,
   CoreTypes coreTypes,
-  Target target,
-) {
-  transformLibraries(component.libraries, coreTypes, target);
+  Target target, {
+  bool useUniqueDeduplicationLibrary = false,
+}) {
+  transformLibraries(
+    component.libraries,
+    coreTypes,
+    target,
+    useUniqueDeduplicationLibrary: useUniqueDeduplicationLibrary,
+  );
 }
 
 class _DeduplicateMixinKey {
@@ -75,6 +130,12 @@
     final otherSupertype = otherClass.supertype!;
     if (thisSupertype.classNode != otherSupertype.classNode) return false;
 
+    // Treat 'dart:*' libraries as distinct from libraries not in 'dart:*'.
+    if (thisClass.enclosingLibrary.importUri.isScheme('dart') !=
+        otherClass.enclosingLibrary.importUri.isScheme('dart')) {
+      return false;
+    }
+
     final thisParameters = thisClass.typeParameters;
     final otherParameters = otherClass.typeParameters;
     if (thisParameters.length != otherParameters.length) return false;
@@ -131,13 +192,15 @@
   }
 }
 
-class DeduplicateMixinsTransformer extends RemovingTransformer {
+class _DeduplicateMixinsTransformer extends RemovingTransformer {
   final ConstantPragmaAnnotationParser pragmaParser;
   final _canonicalMixins = new Map<_DeduplicateMixinKey, Class>();
   final _duplicatedMixins = new Map<Class, Class>();
+  final _superRemapped = new Map<Class, Set<Class>>();
+  final CoreTypes coreTypes;
 
-  DeduplicateMixinsTransformer(CoreTypes coreTypes, Target target)
-    : pragmaParser = ConstantPragmaAnnotationParser(coreTypes, target);
+  _DeduplicateMixinsTransformer(this.coreTypes, Target target)
+    : pragmaParser = ConstantPragmaAnnotationParser(coreTypes, target) {}
 
   @override
   TreeNode visitLibrary(Library node, TreeNode? removalSentinel) {
@@ -223,14 +286,121 @@
   @override
   TreeNode defaultTreeNode(TreeNode node, TreeNode? removalSentinel) =>
       throw 'Unexpected node ${node.runtimeType}: $node';
+
+  /// Corrects forwarding constructors inserted by mixin resolution after
+  /// replacing superclass.
+  void _correctForwardingConstructors(Class c, Class oldSuper, Class newSuper) {
+    for (var constructor in c.constructors) {
+      for (var initializer in constructor.initializers) {
+        if ((initializer is SuperInitializer) &&
+            initializer.target.enclosingClass == oldSuper) {
+          Constructor? replacement = null;
+          for (var c in newSuper.constructors) {
+            if (c.name == initializer.target.name) {
+              replacement = c;
+              break;
+            }
+          }
+          if (replacement == null) {
+            throw 'Unable to find a replacement for $c in $newSuper';
+          }
+          (_superRemapped[c] ??= {}).add(newSuper);
+          initializer.target = replacement;
+        }
+      }
+    }
+  }
+}
+
+class _DeduplicateRelocator {
+  int deduplicatedMixinCount = 0;
+  Library? sharedDedupLibrary;
+  final Component component;
+  final bool useUniqueDeduplicationLibrary;
+  final Map<Library, Set<Library>> addedImports;
+  final List<Library> newLibraries = [];
+  final Uri placeholderFileUri = Uri();
+
+  _DeduplicateRelocator(
+    this.component,
+    this.addedImports,
+    this.useUniqueDeduplicationLibrary,
+  );
+
+  Library getLibraryForClass(int mixinIndex) {
+    if (useUniqueDeduplicationLibrary) {
+      final library = new Library(
+        Uri.parse('$_dedupLibraryName$mixinIndex'),
+        fileUri: placeholderFileUri,
+      )..parent = component;
+      component.libraries.add(library);
+      newLibraries.add(library);
+      return library;
+    }
+    return sharedDedupLibrary ??=
+        (() {
+          final library = new Library(
+            Uri.parse(_dedupLibraryName),
+            fileUri: placeholderFileUri,
+          )..parent = component;
+          component.libraries.add(library);
+          newLibraries.add(library);
+          return library;
+        })();
+  }
+
+  void relocateCanonicalClasses(
+    Iterable<Class> classes,
+    Map<Class, Set<Class>> remappedSupers,
+  ) {
+    for (final cls in classes) {
+      // Leave 'dart:*' libraries in their own libraries as these might be
+      // referenced in VM bootstrapping.
+      if (cls.enclosingLibrary.importUri.isScheme('dart')) continue;
+
+      // Move class to shared library.
+      final oldLibrary = cls.enclosingLibrary;
+      final mixinIndex = deduplicatedMixinCount++;
+      final newLibrary = getLibraryForClass(mixinIndex);
+      oldLibrary.classes.remove(cls);
+      newLibrary.addClass(cls);
+      cls.name =
+          '_MixinApplication$mixinIndex'
+          '${cls.name.substring(cls.name.indexOf('&'))}';
+      cls.clearCanonicalNames();
+      if ((addedImports[oldLibrary] ??= {}).add(newLibrary)) {
+        oldLibrary.addDependency(LibraryDependency.import(newLibrary));
+      }
+      for (final member in cls.constructors) {
+        if (member.name.isPrivate) {
+          // Private constructors belong to the mixin application itself and
+          // should be rescoped to the new library. Other members are copied
+          // from the mixin body and are therefore scoped to the mixin's
+          // library.
+          member.name = Name(member.name.text, newLibrary);
+        }
+      }
+    }
+
+    remappedSupers.forEach((cls, newSupers) {
+      final clsLibrary = cls.enclosingLibrary;
+      for (final newSuper in newSupers) {
+        final newSuperLibrary = newSuper.enclosingLibrary;
+        if ((addedImports[clsLibrary] ??= {}).add(newSuperLibrary)) {
+          clsLibrary.addDependency(LibraryDependency.import(newSuperLibrary));
+        }
+      }
+    });
+  }
 }
 
 /// Rewrites references to the deduplicated mixin application
 /// classes. Updates interface targets and types.
-class ReferenceUpdater extends RecursiveVisitor {
-  final DeduplicateMixinsTransformer transformer;
+class _ReferenceUpdater extends RecursiveVisitor {
+  final _DeduplicateMixinsTransformer transformer;
+  final Map<Library, Set<Library>> _addedImports;
 
-  ReferenceUpdater(this.transformer);
+  _ReferenceUpdater(this.transformer, this._addedImports);
 
   @override
   void visitProcedure(Procedure node) {
@@ -295,6 +465,14 @@
     if (c != null && c.isAnonymousMixin) {
       final Class? replacement = transformer._duplicatedMixins[c];
       if (replacement != null) {
+        final replacementLibrary = replacement.enclosingLibrary;
+        final cLibrary = c.enclosingLibrary;
+        if (replacementLibrary != cLibrary &&
+            (_addedImports[cLibrary] ??= {}).add(replacementLibrary)) {
+          c.enclosingLibrary.addDependency(
+            LibraryDependency.import(replacementLibrary),
+          );
+        }
         // The class got removed, so we need to re-resolve the interface target.
         return _findMember(replacement, m!);
       }
@@ -324,26 +502,3 @@
     super.visitClassReference(node);
   }
 }
-
-/// Corrects forwarding constructors inserted by mixin resolution after
-/// replacing superclass.
-void _correctForwardingConstructors(Class c, Class oldSuper, Class newSuper) {
-  for (var constructor in c.constructors) {
-    for (var initializer in constructor.initializers) {
-      if ((initializer is SuperInitializer) &&
-          initializer.target.enclosingClass == oldSuper) {
-        Constructor? replacement = null;
-        for (var c in newSuper.constructors) {
-          if (c.name == initializer.target.name) {
-            replacement = c;
-            break;
-          }
-        }
-        if (replacement == null) {
-          throw 'Unable to find a replacement for $c in $newSuper';
-        }
-        initializer.target = replacement;
-      }
-    }
-  }
-}
diff --git a/pkg/vm/lib/transformations/record_use/record_use.dart b/pkg/vm/lib/transformations/record_use/record_use.dart
index 9f8c6a9..5a8d33d 100644
--- a/pkg/vm/lib/transformations/record_use/record_use.dart
+++ b/pkg/vm/lib/transformations/record_use/record_use.dart
@@ -9,7 +9,6 @@
     show relativizeUri;
 import 'package:collection/collection.dart';
 import 'package:kernel/ast.dart' as ast;
-import 'package:pub_semver/pub_semver.dart';
 import 'package:record_use/record_use_internal.dart';
 import 'package:vm/metadata/loading_units.dart';
 import 'package:vm/transformations/record_use/record_call.dart';
@@ -92,7 +91,7 @@
     metadata: Metadata.fromJson({
       'comment':
           'Recorded usages of objects tagged with a `RecordUse` annotation',
-      'version': Version(0, 2, 0).toString(),
+      'version': version.toString(),
     }),
     callsForDefinition: calls.map(
       (key, value) => MapEntry(
diff --git a/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart b/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
index ed86d8e..29a7264 100644
--- a/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
+++ b/pkg/vm/lib/transformations/type_flow/protobuf_handler.dart
@@ -43,6 +43,7 @@
   };
 
   final CoreTypes coreTypes;
+  final bool handleMixins;
   final Class _generatedMessageClass;
   final Class _tagNumberClass;
   final Field _tagNumberField;
@@ -59,35 +60,43 @@
   /// Returns null if protobuf library is not used.
   static ProtobufHandler? forComponent(
     Component component,
-    CoreTypes coreTypes,
-  ) {
+    CoreTypes coreTypes, {
+    bool handleMixins = false,
+  }) {
     final libraryIndex = LibraryIndex(component, [protobufLibraryUri]);
     if (!libraryIndex.containsLibrary(protobufLibraryUri)) {
       return null;
     }
-    return ProtobufHandler._internal(libraryIndex, coreTypes);
+    return ProtobufHandler._internal(
+      libraryIndex,
+      coreTypes,
+      handleMixins: handleMixins,
+    );
   }
 
-  ProtobufHandler._internal(LibraryIndex libraryIndex, this.coreTypes)
-    : _generatedMessageClass = libraryIndex.getClass(
-        protobufLibraryUri,
-        'GeneratedMessage',
-      ),
-      _tagNumberClass = libraryIndex.getClass(protobufLibraryUri, 'TagNumber'),
-      _tagNumberField = libraryIndex.getField(
-        protobufLibraryUri,
-        'TagNumber',
-        'tagNumber',
-      ),
-      _builderInfoClass = libraryIndex.getClass(
-        protobufLibraryUri,
-        'BuilderInfo',
-      ),
-      _builderInfoAddMethod = libraryIndex.getProcedure(
-        protobufLibraryUri,
-        'BuilderInfo',
-        'add',
-      ) {
+  ProtobufHandler._internal(
+    LibraryIndex libraryIndex,
+    this.coreTypes, {
+    this.handleMixins = false,
+  }) : _generatedMessageClass = libraryIndex.getClass(
+         protobufLibraryUri,
+         'GeneratedMessage',
+       ),
+       _tagNumberClass = libraryIndex.getClass(protobufLibraryUri, 'TagNumber'),
+       _tagNumberField = libraryIndex.getField(
+         protobufLibraryUri,
+         'TagNumber',
+         'tagNumber',
+       ),
+       _builderInfoClass = libraryIndex.getClass(
+         protobufLibraryUri,
+         'BuilderInfo',
+       ),
+       _builderInfoAddMethod = libraryIndex.getProcedure(
+         protobufLibraryUri,
+         'BuilderInfo',
+         'add',
+       ) {
     final functionType = _builderInfoAddMethod.getterType as FunctionType;
     _typeOfBuilderInfoAddOfNull = FunctionTypeInstantiator.instantiate(
       functionType,
@@ -98,6 +107,24 @@
 
   bool usesAnnotationClass(Class cls) => cls == _tagNumberClass;
 
+  static bool _hasNonMixinSuperclass(Class? cls, Class superclass) {
+    while (cls != null) {
+      if (cls == superclass) {
+        return true;
+      }
+      if (!cls.isEliminatedMixin) {
+        return false;
+      }
+      cls = cls.superclass;
+    }
+    return false;
+  }
+
+  bool isMessageClass(Class cls) =>
+      cls.superclass == _generatedMessageClass ||
+      (handleMixins &&
+          _hasNonMixinSuperclass(cls.superclass, _generatedMessageClass));
+
   /// This method is called from summary collector when analysis discovered
   /// that [member] is called and needs to construct a summary for its body.
   ///
@@ -107,7 +134,7 @@
   void beforeSummaryCreation(Member member) {
     // Only interested in members of subclasses of GeneratedMessage class.
     final cls = member.enclosingClass;
-    if (cls == null || cls.superclass != _generatedMessageClass) {
+    if (cls == null || !isMessageClass(cls)) {
       return;
     }
     final messageClass = (_messageClasses[cls] ??= _MessageClass());
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index d090774..b5d245e 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -57,6 +57,7 @@
   bool treeShakeSignatures = true,
   bool treeShakeWriteOnlyFields = true,
   bool treeShakeProtobufs = false,
+  bool treeShakeProtobufMixins = false,
   bool useRapidTypeAnalysis = true,
 }) {
   void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
@@ -75,7 +76,11 @@
   );
   final protobufHandler =
       treeShakeProtobufs
-          ? ProtobufHandler.forComponent(component, coreTypes)
+          ? ProtobufHandler.forComponent(
+            component,
+            coreTypes,
+            handleMixins: treeShakeProtobufMixins,
+          )
           : null;
 
   Statistics.reset();
diff --git a/pkg/vm/pubspec.yaml b/pkg/vm/pubspec.yaml
index 77047d4..3685cfe 100644
--- a/pkg/vm/pubspec.yaml
+++ b/pkg/vm/pubspec.yaml
@@ -19,7 +19,6 @@
   kernel: any
   package_config: any
   path: any
-  pub_semver: any
   record_use: any
   yaml: any
 
diff --git a/pkg/vm/test/transformations/mixin_deduplication_test.dart b/pkg/vm/test/transformations/mixin_deduplication_test.dart
index 0a0e3f1..9f6cb5e 100644
--- a/pkg/vm/test/transformations/mixin_deduplication_test.dart
+++ b/pkg/vm/test/transformations/mixin_deduplication_test.dart
@@ -14,7 +14,7 @@
 
 import '../common_test_utils.dart';
 
-final String pkgVmDir = Platform.script.resolve('../..').toFilePath();
+final Uri _pkgVmDir = Platform.script.resolve('../..');
 
 runTestCase(Uri source) async {
   final target = VmTarget(new TargetFlags());
@@ -29,21 +29,30 @@
     component,
   );
 
-  final actual = kernelLibraryToString(component.mainMethod!.enclosingLibrary);
+  final actual = component.libraries
+      .where(
+        (l) =>
+            l.importUri.path.contains('testcases') ||
+            (l.importUri.scheme == 'dart' &&
+                l.importUri.path.startsWith('mixin_deduplication')),
+      )
+      .map(kernelLibraryToString)
+      .join('\n\n')
+      .replaceAll(_pkgVmDir.toString(), 'file:pkg/vm/');
   compareResultWithExpectationsFile(source, actual);
 }
 
 main() {
   group('mixin-deduplication', () {
-    final testCasesDir = Directory(
-      pkgVmDir + '/testcases/transformations/mixin_deduplication',
+    final testCasesDir = Directory.fromUri(
+      _pkgVmDir.resolve('testcases/transformations/mixin_deduplication'),
     );
 
     for (var entry
         in testCasesDir
             .listSync(recursive: true, followLinks: false)
             .reversed) {
-      if (entry.path.endsWith(".dart")) {
+      if (entry.path.endsWith(".dart") && !entry.path.contains('helper')) {
         test(entry.path, () => runTestCase(entry.uri));
       }
     }
diff --git a/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart b/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart
index cca4b1a..5e9318b 100644
--- a/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart
+++ b/pkg/vm/test/transformations/protobuf_aware_treeshaker/treeshaker_test.dart
@@ -25,11 +25,16 @@
 final String pkgVmDir = Platform.script.resolve('../../..').toFilePath();
 
 runTestCase(Uri source) async {
-  await shakeAndRun(source);
-  await compileAOT(source);
+  await shakeAndRun(source, treeShakeProtobufMixins: false);
+  await shakeAndRun(source, treeShakeProtobufMixins: true);
+  await compileAOT(source, treeShakeProtobufMixins: false);
+  await compileAOT(source, treeShakeProtobufMixins: true);
 }
 
-Future<void> shakeAndRun(Uri source) async {
+Future<void> shakeAndRun(
+  Uri source, {
+  required bool treeShakeProtobufMixins,
+}) async {
   final target = VmTarget(TargetFlags());
   Component component = await compileTestCaseToKernelProgram(
     source,
@@ -41,8 +46,8 @@
           .expand(
             (lib) => lib.classes.where(
               (klass) =>
-                  klass.superclass != null &&
-                  klass.superclass!.name == "GeneratedMessage",
+                  !klass.isEliminatedMixin &&
+                  _hasGeneratedMessageSuper(klass.superclass),
             ),
           )
           .toList();
@@ -53,12 +58,15 @@
     component,
     treeShakeProtobufs: true,
     treeShakeSignatures: false,
+    treeShakeProtobufMixins: treeShakeProtobufMixins,
   );
 
   for (Class messageClass in messageClasses) {
     expect(
       messageClass.enclosingLibrary.classes.contains(messageClass),
-      messageClass.name.endsWith('Keep'),
+      // Either a keep class or a keep& mixin class.
+      (messageClass.name.endsWith('Keep') ||
+          messageClass.name.contains('Keep&')),
       reason: '${messageClass.toText(astTextStrategyForTesting)}',
     );
   }
@@ -85,7 +93,10 @@
   }
 }
 
-Future<void> compileAOT(Uri source) async {
+Future<void> compileAOT(
+  Uri source, {
+  required bool treeShakeProtobufMixins,
+}) async {
   final target = VmTarget(TargetFlags(supportMirrors: false));
   Component component = await compileTestCaseToKernelProgram(
     source,
@@ -104,10 +115,21 @@
       useGlobalTypeFlowAnalysis: true,
       enableAsserts: false,
       useProtobufTreeShakerV2: true,
+      protobufTreeShakerMixins: treeShakeProtobufMixins,
     ),
   );
 }
 
+bool _hasGeneratedMessageSuper(Class? cls) {
+  while (cls != null) {
+    if (cls.name == 'GeneratedMessage') {
+      return true;
+    }
+    cls = cls.superclass;
+  }
+  return false;
+}
+
 main() {
   group('protobuf-aware-treeshaker', () {
     final testCases = Directory(
diff --git a/pkg/vm/test/transformations/type_flow/transformer_test.dart b/pkg/vm/test/transformations/type_flow/transformer_test.dart
index 85e99fb..8131dea 100644
--- a/pkg/vm/test/transformations/type_flow/transformer_test.dart
+++ b/pkg/vm/test/transformations/type_flow/transformer_test.dart
@@ -60,6 +60,7 @@
     matcher: new ConstantPragmaAnnotationParser(coreTypes, target),
     config: tfaConfig,
     treeShakeProtobufs: true,
+    treeShakeProtobufMixins: true,
     useRapidTypeAnalysis: useRapidTypeAnalysis,
   );
 
diff --git a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
index 44060f2..9a640b5 100644
--- a/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
+++ b/pkg/vm/testcases/transformations/deferred_loading/main.dart.expect
@@ -10,6 +10,7 @@
   dart:_builtin
   dart:_vmservice
   dart:vmservice_io
+  dart:_vm
   dart:typed_data
   dart:mirrors
   dart:math
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/generic.dart.expect b/pkg/vm/testcases/transformations/mixin_deduplication/generic.dart.expect
index ef1c91e..cf71f13 100644
--- a/pkg/vm/testcases/transformations/mixin_deduplication/generic.dart.expect
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/generic.dart.expect
@@ -1,6 +1,9 @@
 library #lib;
 import self as self;
 import "dart:core" as core;
+import "dart:mixin_deduplication" as mix;
+
+import "dart:mixin_deduplication";
 
 class B1 extends core::Object {
   synthetic constructor •() → self::B1
@@ -9,19 +12,19 @@
 }
 abstract class M1<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
-class SA1<T extends core::Object? = dynamic> extends self::_SA1&B1&M1<self::SA1::T%> {
+class SA1<T extends core::Object? = dynamic> extends mix::_MixinApplication0&B1&M1<self::SA1::T%> {
   synthetic constructor •() → self::SA1<self::SA1::T%>
-    : super self::_SA1&B1&M1::•()
+    : super mix::_MixinApplication0&B1&M1::•()
     ;
 }
-class SA2<T extends core::Object? = dynamic> extends self::_SA1&B1&M1<self::SA2::T%> {
+class SA2<T extends core::Object? = dynamic> extends mix::_MixinApplication0&B1&M1<self::SA2::T%> {
   synthetic constructor •() → self::SA2<self::SA2::T%>
-    : super self::_SA1&B1&M1::•()
+    : super mix::_MixinApplication0&B1&M1::•()
     ;
 }
-class SA3<T extends core::Object? = dynamic> extends self::_SA3&B1&M1<self::SA3::T%> {
+class SA3<T extends core::Object? = dynamic> extends mix::_MixinApplication1&B1&M1<self::SA3::T%> {
   synthetic constructor •() → self::SA3<self::SA3::T%>
-    : super self::_SA3&B1&M1::•()
+    : super mix::_MixinApplication1&B1&M1::•()
     ;
 }
 class B2<T extends core::Object? = dynamic> extends core::Object {
@@ -31,19 +34,19 @@
 }
 abstract class M2 extends core::Object /*isMixinDeclaration*/  {
 }
-class SB1<T extends core::Object? = dynamic> extends self::_SB1&B2&M2<self::SB1::T%> {
+class SB1<T extends core::Object? = dynamic> extends mix::_MixinApplication2&B2&M2<self::SB1::T%> {
   synthetic constructor •() → self::SB1<self::SB1::T%>
-    : super self::_SB1&B2&M2::•()
+    : super mix::_MixinApplication2&B2&M2::•()
     ;
 }
-class SB2<T extends core::Object? = dynamic> extends self::_SB1&B2&M2<self::SB2::T%> {
+class SB2<T extends core::Object? = dynamic> extends mix::_MixinApplication2&B2&M2<self::SB2::T%> {
   synthetic constructor •() → self::SB2<self::SB2::T%>
-    : super self::_SB1&B2&M2::•()
+    : super mix::_MixinApplication2&B2&M2::•()
     ;
 }
-class SB3<T extends core::Object? = dynamic> extends self::_SB3&B2&M2<self::SB3::T%> {
+class SB3<T extends core::Object? = dynamic> extends mix::_MixinApplication3&B2&M2<self::SB3::T%> {
   synthetic constructor •() → self::SB3<self::SB3::T%>
-    : super self::_SB3&B2&M2::•()
+    : super mix::_MixinApplication3&B2&M2::•()
     ;
 }
 class B3<T extends core::Object? = dynamic> extends core::Object {
@@ -53,49 +56,59 @@
 }
 abstract class M3 extends core::Object /*isMixinDeclaration*/  {
 }
-class SC1<T extends core::Object> extends self::_SC1&B3&M2<self::SC1::T> {
+class SC1<T extends core::Object> extends mix::_MixinApplication4&B3&M2<self::SC1::T> {
   synthetic constructor •() → self::SC1<self::SC1::T>
-    : super self::_SC1&B3&M2::•()
+    : super mix::_MixinApplication4&B3&M2::•()
     ;
 }
-class SC2<T extends core::Object> extends self::_SC1&B3&M2<self::SC2::T> {
+class SC2<T extends core::Object> extends mix::_MixinApplication4&B3&M2<self::SC2::T> {
   synthetic constructor •() → self::SC2<self::SC2::T>
-    : super self::_SC1&B3&M2::•()
+    : super mix::_MixinApplication4&B3&M2::•()
     ;
 }
-class SC3<T extends core::Object?> extends self::_SC3&B3&M2<self::SC3::T%> {
+class SC3<T extends core::Object?> extends mix::_MixinApplication5&B3&M2<self::SC3::T%> {
   synthetic constructor •() → self::SC3<self::SC3::T%>
-    : super self::_SC3&B3&M2::•()
-    ;
-}
-abstract class _SA1&B1&M1<T extends core::Object? = dynamic> extends self::B1 implements self::M1<self::_SA1&B1&M1::T%> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SA1&B1&M1<self::_SA1&B1&M1::T%>
-    : super self::B1::•()
-    ;
-}
-abstract class _SA3&B1&M1<T extends core::Object? = dynamic> extends self::B1 implements self::M1<self::_SA3&B1&M1::T?> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SA3&B1&M1<self::_SA3&B1&M1::T%>
-    : super self::B1::•()
-    ;
-}
-abstract class _SB1&B2&M2<T extends core::Object? = dynamic> extends self::B2<self::_SB1&B2&M2::T%> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SB1&B2&M2<self::_SB1&B2&M2::T%>
-    : super self::B2::•()
-    ;
-}
-abstract class _SB3&B2&M2<T extends core::Object? = dynamic> extends self::B2<self::_SB3&B2&M2::T?> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SB3&B2&M2<self::_SB3&B2&M2::T%>
-    : super self::B2::•()
-    ;
-}
-abstract class _SC1&B3&M2<T extends core::Object> extends self::B3<self::_SC1&B3&M2::T> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SC1&B3&M2<self::_SC1&B3&M2::T>
-    : super self::B3::•()
-    ;
-}
-abstract class _SC3&B3&M2<T extends core::Object?> extends self::B3<self::_SC3&B3&M2::T%> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SC3&B3&M2<self::_SC3&B3&M2::T%>
-    : super self::B3::•()
+    : super mix::_MixinApplication5&B3&M2::•()
     ;
 }
 static method main() → dynamic {}
+
+
+library;
+import self as self;
+import "dart:core" as core;
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart" as #lib;
+
+import "dart:core";
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart";
+
+abstract class _MixinApplication0&B1&M1<T extends core::Object? = dynamic> extends #lib::B1 implements #lib::M1<self::_MixinApplication0&B1&M1::T%> /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
+  synthetic constructor •() → self::_MixinApplication0&B1&M1<self::_MixinApplication0&B1&M1::T%>
+    : super #lib::B1::•()
+    ;
+}
+abstract class _MixinApplication1&B1&M1<T extends core::Object? = dynamic> extends #lib::B1 implements #lib::M1<self::_MixinApplication1&B1&M1::T?> /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
+  synthetic constructor •() → self::_MixinApplication1&B1&M1<self::_MixinApplication1&B1&M1::T%>
+    : super #lib::B1::•()
+    ;
+}
+abstract class _MixinApplication2&B2&M2<T extends core::Object? = dynamic> extends #lib::B2<self::_MixinApplication2&B2&M2::T%> implements #lib::M2 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
+  synthetic constructor •() → self::_MixinApplication2&B2&M2<self::_MixinApplication2&B2&M2::T%>
+    : super #lib::B2::•()
+    ;
+}
+abstract class _MixinApplication3&B2&M2<T extends core::Object? = dynamic> extends #lib::B2<self::_MixinApplication3&B2&M2::T?> implements #lib::M2 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
+  synthetic constructor •() → self::_MixinApplication3&B2&M2<self::_MixinApplication3&B2&M2::T%>
+    : super #lib::B2::•()
+    ;
+}
+abstract class _MixinApplication4&B3&M2<T extends core::Object> extends #lib::B3<self::_MixinApplication4&B3&M2::T> implements #lib::M2 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
+  synthetic constructor •() → self::_MixinApplication4&B3&M2<self::_MixinApplication4&B3&M2::T>
+    : super #lib::B3::•()
+    ;
+}
+abstract class _MixinApplication5&B3&M2<T extends core::Object?> extends #lib::B3<self::_MixinApplication5&B3&M2::T%> implements #lib::M2 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
+  synthetic constructor •() → self::_MixinApplication5&B3&M2<self::_MixinApplication5&B3&M2::T%>
+    : super #lib::B3::•()
+    ;
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart.expect b/pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart.expect
index 52fc22c..5b23a36 100644
--- a/pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart.expect
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart.expect
@@ -1,6 +1,9 @@
 library #lib;
 import self as self;
 import "dart:core" as core;
+import "dart:mixin_deduplication" as mix;
+
+import "dart:mixin_deduplication";
 
 class B1<T extends core::Object? = dynamic> extends core::Object {
   synthetic constructor •() → self::B1<self::B1::T%>
@@ -9,39 +12,49 @@
 }
 abstract class M1 extends core::Object /*isMixinDeclaration*/  {
 }
-class SC1<A extends self::SC1::B = dynamic, B extends core::List<self::SC1::A> = core::List<dynamic>> extends self::_SC1&B1&M1<self::SC1::A, self::SC1::B> {
+class SC1<A extends self::SC1::B = dynamic, B extends core::List<self::SC1::A> = core::List<dynamic>> extends mix::_MixinApplication0&B1&M1<self::SC1::A, self::SC1::B> {
   synthetic constructor •() → self::SC1<self::SC1::A, self::SC1::B>
-    : super self::_SC1&B1&M1::•()
+    : super mix::_MixinApplication0&B1&M1::•()
     ;
 }
-class SC2<A extends self::SC2::B = dynamic, B extends core::List<self::SC2::A> = core::List<dynamic>> extends self::_SC1&B1&M1<self::SC2::A, self::SC2::B> {
+class SC2<A extends self::SC2::B = dynamic, B extends core::List<self::SC2::A> = core::List<dynamic>> extends mix::_MixinApplication0&B1&M1<self::SC2::A, self::SC2::B> {
   synthetic constructor •() → self::SC2<self::SC2::A, self::SC2::B>
-    : super self::_SC1&B1&M1::•()
+    : super mix::_MixinApplication0&B1&M1::•()
     ;
 }
-class SC3<A extends self::SC3::B = dynamic, B extends core::List<self::SC3::A?> = core::List<dynamic>> extends self::_SC3&B1&M1<self::SC3::A, self::SC3::B> {
+class SC3<A extends self::SC3::B = dynamic, B extends core::List<self::SC3::A?> = core::List<dynamic>> extends mix::_MixinApplication1&B1&M1<self::SC3::A, self::SC3::B> {
   synthetic constructor •() → self::SC3<self::SC3::A, self::SC3::B>
-    : super self::_SC3&B1&M1::•()
+    : super mix::_MixinApplication1&B1&M1::•()
     ;
 }
-class SC4<A extends self::SC4::B% = dynamic, B extends core::List<self::SC4::A%>? = core::List<dynamic>?> extends self::_SC4&B1&M1<self::SC4::A%, self::SC4::B%> {
+class SC4<A extends self::SC4::B% = dynamic, B extends core::List<self::SC4::A%>? = core::List<dynamic>?> extends mix::_MixinApplication2&B1&M1<self::SC4::A%, self::SC4::B%> {
   synthetic constructor •() → self::SC4<self::SC4::A%, self::SC4::B%>
-    : super self::_SC4&B1&M1::•()
-    ;
-}
-abstract class _SC1&B1&M1<A extends self::_SC1&B1&M1::B = dynamic, B extends core::List<self::_SC1&B1&M1::A> = core::List<dynamic>> extends self::B1<self::_SC1&B1&M1::A> implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SC1&B1&M1<self::_SC1&B1&M1::A, self::_SC1&B1&M1::B>
-    : super self::B1::•()
-    ;
-}
-abstract class _SC3&B1&M1<A extends self::_SC3&B1&M1::B = dynamic, B extends core::List<self::_SC3&B1&M1::A?> = core::List<dynamic>> extends self::B1<self::_SC3&B1&M1::A> implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SC3&B1&M1<self::_SC3&B1&M1::A, self::_SC3&B1&M1::B>
-    : super self::B1::•()
-    ;
-}
-abstract class _SC4&B1&M1<A extends self::_SC4&B1&M1::B% = dynamic, B extends core::List<self::_SC4&B1&M1::A%>? = core::List<dynamic>?> extends self::B1<self::_SC4&B1&M1::A%> implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SC4&B1&M1<self::_SC4&B1&M1::A%, self::_SC4&B1&M1::B%>
-    : super self::B1::•()
+    : super mix::_MixinApplication2&B1&M1::•()
     ;
 }
 static method main() → dynamic {}
+
+
+library;
+import self as self;
+import "dart:core" as core;
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart" as #lib;
+
+import "dart:core";
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart";
+
+abstract class _MixinApplication0&B1&M1<A extends self::_MixinApplication0&B1&M1::B = dynamic, B extends core::List<self::_MixinApplication0&B1&M1::A> = core::List<dynamic>> extends #lib::B1<self::_MixinApplication0&B1&M1::A> implements #lib::M1 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart
+  synthetic constructor •() → self::_MixinApplication0&B1&M1<self::_MixinApplication0&B1&M1::A, self::_MixinApplication0&B1&M1::B>
+    : super #lib::B1::•()
+    ;
+}
+abstract class _MixinApplication1&B1&M1<A extends self::_MixinApplication1&B1&M1::B = dynamic, B extends core::List<self::_MixinApplication1&B1&M1::A?> = core::List<dynamic>> extends #lib::B1<self::_MixinApplication1&B1&M1::A> implements #lib::M1 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart
+  synthetic constructor •() → self::_MixinApplication1&B1&M1<self::_MixinApplication1&B1&M1::A, self::_MixinApplication1&B1&M1::B>
+    : super #lib::B1::•()
+    ;
+}
+abstract class _MixinApplication2&B1&M1<A extends self::_MixinApplication2&B1&M1::B% = dynamic, B extends core::List<self::_MixinApplication2&B1&M1::A%>? = core::List<dynamic>?> extends #lib::B1<self::_MixinApplication2&B1&M1::A%> implements #lib::M1 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart
+  synthetic constructor •() → self::_MixinApplication2&B1&M1<self::_MixinApplication2&B1&M1::A%, self::_MixinApplication2&B1&M1::B%>
+    : super #lib::B1::•()
+    ;
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper1.dart b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper1.dart
new file mode 100644
index 0000000..762bf0f
--- /dev/null
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper1.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multiple_libraries_shared_helper.dart';
+
+class SA1 extends B1 with M1<int> {
+  SA1() {
+    super.foo();
+  }
+}
+
+class SA3 extends B1 with M1<String> {
+  SA3() {
+    super.foo();
+  }
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper2.dart b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper2.dart
new file mode 100644
index 0000000..ec655da
--- /dev/null
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper2.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multiple_libraries_shared_helper.dart';
+
+class SA2 extends B1 with M1<int> {
+  SA2() {
+    super.foo();
+  }
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_main.dart b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_main.dart
new file mode 100644
index 0000000..7d37582
--- /dev/null
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_main.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'multiple_libraries_helper1.dart';
+import 'multiple_libraries_helper2.dart';
+
+main() {
+  SA1();
+  SA2();
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_main.dart.expect b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_main.dart.expect
new file mode 100644
index 0000000..ef7fcc6
--- /dev/null
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_main.dart.expect
@@ -0,0 +1,84 @@
+library #lib;
+import self as self;
+import "multiple_libraries_helper1.dart" as mul;
+import "multiple_libraries_helper2.dart" as mul2;
+
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper1.dart";
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper2.dart";
+
+static method main() → dynamic {
+  new mul::SA1::•();
+  new mul2::SA2::•();
+}
+
+
+library;
+import self as self;
+import "dart:mixin_deduplication" as mix;
+
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart";
+import "dart:mixin_deduplication";
+
+class SA1 extends mix::_MixinApplication0&B1&M1 {
+  constructor •() → self::SA1
+    : super mix::_MixinApplication0&B1&M1::•() {
+    super.{mix::_MixinApplication0&B1&M1::foo}();
+  }
+}
+class SA3 extends mix::_MixinApplication1&B1&M1 {
+  constructor •() → self::SA3
+    : super mix::_MixinApplication1&B1&M1::•() {
+    super.{mix::_MixinApplication1&B1&M1::foo}();
+  }
+}
+
+
+library;
+import self as self;
+import "dart:mixin_deduplication" as mix;
+
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart";
+import "dart:mixin_deduplication";
+
+class SA2 extends mix::_MixinApplication0&B1&M1 {
+  constructor •() → self::SA2
+    : super mix::_MixinApplication0&B1&M1::•() {
+    super.{mix::_MixinApplication0&B1&M1::foo}();
+  }
+}
+
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class B1 extends core::Object {
+  synthetic constructor •() → self::B1
+    : super core::Object::•()
+    ;
+}
+abstract class M1<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
+  method foo() → void {}
+}
+
+
+library;
+import self as self;
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart" as mul;
+import "dart:core" as core;
+
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart";
+import "dart:core";
+
+abstract class _MixinApplication0&B1&M1 extends mul::B1 implements mul::M1<core::int> /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper1.dart
+  synthetic constructor •() → self::_MixinApplication0&B1&M1
+    : super mul::B1::•()
+    ;
+  method /* from file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart */ foo() → void {}
+}
+abstract class _MixinApplication1&B1&M1 extends mul::B1 implements mul::M1<core::String> /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_helper1.dart
+  synthetic constructor •() → self::_MixinApplication1&B1&M1
+    : super mul::B1::•()
+    ;
+  method /* from file:pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart */ foo() → void {}
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart
new file mode 100644
index 0000000..be1ea14
--- /dev/null
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/multiple_libraries_shared_helper.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 B1 {}
+
+mixin M1<T> {
+  void foo() {}
+}
diff --git a/pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart.expect b/pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart.expect
index bc73ebf..590e273d 100644
--- a/pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart.expect
+++ b/pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart.expect
@@ -1,6 +1,9 @@
 library #lib;
 import self as self;
 import "dart:core" as core;
+import "dart:mixin_deduplication" as mix;
+
+import "dart:mixin_deduplication";
 
 class B1 extends core::Object {
   synthetic constructor •() → self::B1
@@ -9,19 +12,19 @@
 }
 abstract class M1<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/  {
 }
-class SA1 extends self::_SA1&B1&M1 {
+class SA1 extends mix::_MixinApplication0&B1&M1 {
   synthetic constructor •() → self::SA1
-    : super self::_SA1&B1&M1::•()
+    : super mix::_MixinApplication0&B1&M1::•()
     ;
 }
-class SA2 extends self::_SA1&B1&M1 {
+class SA2 extends mix::_MixinApplication0&B1&M1 {
   synthetic constructor •() → self::SA2
-    : super self::_SA1&B1&M1::•()
+    : super mix::_MixinApplication0&B1&M1::•()
     ;
 }
-class SA3 extends self::_SA3&B1&M1 {
+class SA3 extends mix::_MixinApplication1&B1&M1 {
   synthetic constructor •() → self::SA3
-    : super self::_SA3&B1&M1::•()
+    : super mix::_MixinApplication1&B1&M1::•()
     ;
 }
 class B2<T extends core::Object? = dynamic> extends core::Object {
@@ -31,39 +34,49 @@
 }
 abstract class M2 extends core::Object /*isMixinDeclaration*/  {
 }
-class SB1 extends self::_SB1&B2&M2 {
+class SB1 extends mix::_MixinApplication2&B2&M2 {
   synthetic constructor •() → self::SB1
-    : super self::_SB1&B2&M2::•()
+    : super mix::_MixinApplication2&B2&M2::•()
     ;
 }
-class SB2 extends self::_SB1&B2&M2 {
+class SB2 extends mix::_MixinApplication2&B2&M2 {
   synthetic constructor •() → self::SB2
-    : super self::_SB1&B2&M2::•()
+    : super mix::_MixinApplication2&B2&M2::•()
     ;
 }
-class SB3 extends self::_SB3&B2&M2 {
+class SB3 extends mix::_MixinApplication3&B2&M2 {
   synthetic constructor •() → self::SB3
-    : super self::_SB3&B2&M2::•()
-    ;
-}
-abstract class _SA1&B1&M1 extends self::B1 implements self::M1<core::int> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SA1&B1&M1
-    : super self::B1::•()
-    ;
-}
-abstract class _SA3&B1&M1 extends self::B1 implements self::M1<core::String> /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SA3&B1&M1
-    : super self::B1::•()
-    ;
-}
-abstract class _SB1&B2&M2 extends self::B2<core::int> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SB1&B2&M2
-    : super self::B2::•()
-    ;
-}
-abstract class _SB3&B2&M2 extends self::B2<core::String> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/  {
-  synthetic constructor •() → self::_SB3&B2&M2
-    : super self::B2::•()
+    : super mix::_MixinApplication3&B2&M2::•()
     ;
 }
 static method main() → dynamic {}
+
+
+library;
+import self as self;
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart" as #lib;
+import "dart:core" as core;
+
+import "file:pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart";
+import "dart:core";
+
+abstract class _MixinApplication0&B1&M1 extends #lib::B1 implements #lib::M1<core::int> /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart
+  synthetic constructor •() → self::_MixinApplication0&B1&M1
+    : super #lib::B1::•()
+    ;
+}
+abstract class _MixinApplication1&B1&M1 extends #lib::B1 implements #lib::M1<core::String> /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart
+  synthetic constructor •() → self::_MixinApplication1&B1&M1
+    : super #lib::B1::•()
+    ;
+}
+abstract class _MixinApplication2&B2&M2 extends #lib::B2<core::int> implements #lib::M2 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart
+  synthetic constructor •() → self::_MixinApplication2&B2&M2
+    : super #lib::B2::•()
+    ;
+}
+abstract class _MixinApplication3&B2&M2 extends #lib::B2<core::String> implements #lib::M2 /*isAnonymousMixin,isEliminatedMixin*/  { // from file:pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart
+  synthetic constructor •() → self::_MixinApplication3&B2&M2
+    : super #lib::B2::•()
+    ;
+}
diff --git a/pkg/vm/testcases/transformations/record_use/complex.dart.json.expect b/pkg/vm/testcases/transformations/record_use/complex.dart.json.expect
index b9496ea..e3faebc 100644
--- a/pkg/vm/testcases/transformations/record_use/complex.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/complex.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/different.dart.json.expect b/pkg/vm/testcases/transformations/record_use/different.dart.json.expect
index e463d4d..f07ae08 100644
--- a/pkg/vm/testcases/transformations/record_use/different.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/different.dart.json.expect
@@ -1,6 +1,6 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   }
 }
\ No newline at end of file
diff --git a/pkg/vm/testcases/transformations/record_use/extension.dart.json.expect b/pkg/vm/testcases/transformations/record_use/extension.dart.json.expect
index a911545..65e3b4f 100644
--- a/pkg/vm/testcases/transformations/record_use/extension.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/extension.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/instance_class.dart.json.expect b/pkg/vm/testcases/transformations/record_use/instance_class.dart.json.expect
index 937c503..62e6b94 100644
--- a/pkg/vm/testcases/transformations/record_use/instance_class.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/instance_class.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/instance_complex.dart.json.expect b/pkg/vm/testcases/transformations/record_use/instance_complex.dart.json.expect
index e8eb867..36445c7 100644
--- a/pkg/vm/testcases/transformations/record_use/instance_complex.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/instance_complex.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/instance_duplicates.dart.json.expect b/pkg/vm/testcases/transformations/record_use/instance_duplicates.dart.json.expect
index 815b624..798b552 100644
--- a/pkg/vm/testcases/transformations/record_use/instance_duplicates.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/instance_duplicates.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/instance_method.dart.json.expect b/pkg/vm/testcases/transformations/record_use/instance_method.dart.json.expect
index 4fb90b6..9e69768 100644
--- a/pkg/vm/testcases/transformations/record_use/instance_method.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/instance_method.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/instance_not_annotation.dart.json.expect b/pkg/vm/testcases/transformations/record_use/instance_not_annotation.dart.json.expect
index b15ce8e..2337ae1 100644
--- a/pkg/vm/testcases/transformations/record_use/instance_not_annotation.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/instance_not_annotation.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/loading_units_multiple.dart.json.expect b/pkg/vm/testcases/transformations/record_use/loading_units_multiple.dart.json.expect
index 6bc799f..0e1b628 100644
--- a/pkg/vm/testcases/transformations/record_use/loading_units_multiple.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/loading_units_multiple.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/loading_units_simple.dart.json.expect b/pkg/vm/testcases/transformations/record_use/loading_units_simple.dart.json.expect
index 0a46bc9..39aff98 100644
--- a/pkg/vm/testcases/transformations/record_use/loading_units_simple.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/loading_units_simple.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/named_and_positional.dart.json.expect b/pkg/vm/testcases/transformations/record_use/named_and_positional.dart.json.expect
index 8173d9f..7cdc4d5 100644
--- a/pkg/vm/testcases/transformations/record_use/named_and_positional.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/named_and_positional.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/named_both.dart.json.expect b/pkg/vm/testcases/transformations/record_use/named_both.dart.json.expect
index 6554aa1..f9aa8f9 100644
--- a/pkg/vm/testcases/transformations/record_use/named_both.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/named_both.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/named_optional.dart.json.expect b/pkg/vm/testcases/transformations/record_use/named_optional.dart.json.expect
index 6ab0085..af75793 100644
--- a/pkg/vm/testcases/transformations/record_use/named_optional.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/named_optional.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/named_required.dart.json.expect b/pkg/vm/testcases/transformations/record_use/named_required.dart.json.expect
index 2b9cd08..b41859c 100644
--- a/pkg/vm/testcases/transformations/record_use/named_required.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/named_required.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/named_with_function_arg.dart.json.expect b/pkg/vm/testcases/transformations/record_use/named_with_function_arg.dart.json.expect
index 9c4645e..6482937 100644
--- a/pkg/vm/testcases/transformations/record_use/named_with_function_arg.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/named_with_function_arg.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/nested.dart.json.expect b/pkg/vm/testcases/transformations/record_use/nested.dart.json.expect
index eb0bfe4..500b3c0 100644
--- a/pkg/vm/testcases/transformations/record_use/nested.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/nested.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/partfile_main.dart.json.expect b/pkg/vm/testcases/transformations/record_use/partfile_main.dart.json.expect
index 7401831..178ea74 100644
--- a/pkg/vm/testcases/transformations/record_use/partfile_main.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/partfile_main.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/positional_both.dart.json.expect b/pkg/vm/testcases/transformations/record_use/positional_both.dart.json.expect
index a12ed12..ad16ec8 100644
--- a/pkg/vm/testcases/transformations/record_use/positional_both.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/positional_both.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/positional_optional.dart.json.expect b/pkg/vm/testcases/transformations/record_use/positional_optional.dart.json.expect
index 9bf24a4..9af6d45 100644
--- a/pkg/vm/testcases/transformations/record_use/positional_optional.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/positional_optional.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/record_enum.dart.json.expect b/pkg/vm/testcases/transformations/record_use/record_enum.dart.json.expect
index 3d66bb8..0315b1f 100644
--- a/pkg/vm/testcases/transformations/record_use/record_enum.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/record_enum.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/record_instance_constant.dart.json.expect b/pkg/vm/testcases/transformations/record_use/record_instance_constant.dart.json.expect
index 8014626..56006c4 100644
--- a/pkg/vm/testcases/transformations/record_use/record_instance_constant.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/record_instance_constant.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
@@ -44,4 +44,4 @@
       ]
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/pkg/vm/testcases/transformations/record_use/record_instance_constant_empty.dart.json.expect b/pkg/vm/testcases/transformations/record_use/record_instance_constant_empty.dart.json.expect
index 861020d..26736b6 100644
--- a/pkg/vm/testcases/transformations/record_use/record_instance_constant_empty.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/record_instance_constant_empty.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/simple.dart.json.expect b/pkg/vm/testcases/transformations/record_use/simple.dart.json.expect
index f78583c..58bf6e9 100644
--- a/pkg/vm/testcases/transformations/record_use/simple.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/simple.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/tearoff.dart.json.expect b/pkg/vm/testcases/transformations/record_use/tearoff.dart.json.expect
index 777ad9e..6894338 100644
--- a/pkg/vm/testcases/transformations/record_use/tearoff.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/tearoff.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "locations": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/top_level_method.dart.json.expect b/pkg/vm/testcases/transformations/record_use/top_level_method.dart.json.expect
index c3cf404..46c8046 100644
--- a/pkg/vm/testcases/transformations/record_use/top_level_method.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/top_level_method.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/record_use/types_of_arguments.dart.json.expect b/pkg/vm/testcases/transformations/record_use/types_of_arguments.dart.json.expect
index 64c863f..c13a460 100644
--- a/pkg/vm/testcases/transformations/record_use/types_of_arguments.dart.json.expect
+++ b/pkg/vm/testcases/transformations/record_use/types_of_arguments.dart.json.expect
@@ -1,7 +1,7 @@
 {
   "metadata": {
     "comment": "Recorded usages of objects tagged with a `RecordUse` annotation",
-    "version": "0.2.0"
+    "version": "0.4.0"
   },
   "constants": [
     {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/compile_protos.sh b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/compile_protos.sh
index d4f6355..14c9470 100755
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/compile_protos.sh
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/compile_protos.sh
@@ -13,7 +13,8 @@
 # Directory of the script
 GENERATED_DIR=$DIR/lib/generated
 
-protoc --dart_out=$GENERATED_DIR -I$DIR/protos $DIR/protos/*.proto
-rm $GENERATED_DIR/*.pbenum.dart $GENERATED_DIR/*.pbjson.dart $GENERATED_DIR/*.pbserver.dart
+protoc --dart_out=disable_constructor_args:$GENERATED_DIR -I$DIR/protos $DIR/protos/*.proto
+
+rm $GENERATED_DIR/*.pbenum.dart $GENERATED_DIR/*.pbjson.dart
 
 dart format $DIR/lib/generated
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart
index 6b019c2..f47db84 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart
@@ -11,12 +11,14 @@
       FooKeep()
         ..barKeep = (BarKeep()..aKeep = 5)
         ..mapKeep['foo'] = (BarKeep()..aKeep = 2)
-        ..aKeep = 43;
+        ..aKeep = 43
+        ..mixinKeep = (MixinKeep()..aKeep = 42);
   test('retrieving values', () {
     expect(foo.barKeep.aKeep, 5);
     expect(foo.mapKeep['foo']!.aKeep, 2);
     expect(foo.hasHasKeep(), false);
     expect(foo.aKeep, 43);
+    expect(foo.mixinKeep.aKeep, 42);
     foo.clearClearKeep();
   });
 }
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 299e652..0eec540 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
@@ -1,6 +1,7 @@
 library #lib;
 import self as self;
 import "generated/foo.pb.dart" as pb;
+import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
 import "dart:core" as core;
 import "package:test_core/src/scaffolding.dart" as sca;
 import "package:matcher/src/expect/expect.dart" as exp;
@@ -48,16 +49,20 @@
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
     } =>#t2;
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:library package:protobuf/src/protobuf/pb_map.dart::PbMap<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapKeep}{pb_::PbMap<core::String, pb::BarKeep>}.{pb_::PbMap::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
     } =>#t3){(core::String, pb::BarKeep) → void};
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mixinKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::mixinKeep} = let final pb::MixinKeep #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep] pb::MixinKeep::•() in block {
+      [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t4.{pb::MixinKeep::aKeep} = 42;
+    } =>#t4;
   } =>#t1;
   sca::test([@vm.closure-id=1]() → Null {
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] foo.{pb::FooKeep::barKeep}{pb::BarKeep}.{pb::BarKeep::aKeep}{core::int}, 5);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep? (skip check)] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] foo.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 2);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep? (skip check)] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] foo.{pb::FooKeep::mapKeep}{pb_::PbMap<core::String, pb::BarKeep>}.{pb_::PbMap::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 2);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() → core::bool}, false);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int}, 43);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mixinKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep] foo.{pb::FooKeep::mixinKeep}{pb::MixinKeep}.{pb::MixinKeep::aKeep}{core::int}, 42);
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() → void};
   });
 }
@@ -65,9 +70,12 @@
 import self as self;
 import "package:protobuf/src/protobuf/internal.dart" as int;
 import "dart:core" as core;
+import "package:protobuf/src/protobuf/annotations.dart" as ann;
 import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
+import "../mixins.lib.dart" as lib;
 
 import "dart:core" as $core;
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart" as $mixin;
 import "package:protobuf/src/protobuf/internal.dart";
 
 class FooKeep extends int::GeneratedMessage {
@@ -78,9 +86,11 @@
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     let final core::String #t2 = #C1 ?{core::String} "" : "mapKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::BarKeep>(){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    let final core::String #t3 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::a}<core::int>(5){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    let final core::String #t3 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aI}(5){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::HasKeep}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::ClearKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::MixinKeep>(8, #C1 ?{core::String} "" : "mixinKeep", #C5){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::MixinKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -97,62 +107,74 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::FooKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::FooKeep]
-  @#C7
+  @#C8
   static method create() → self::FooKeep
     return new self::FooKeep::_();
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]
-  @#C9
+  @#C10
   get barKeep() → self::BarKeep
-    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::BarKeep>(0){(core::int) → self::BarKeep};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]
-  @#C9
-  set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::setField}(v){(core::int, core::Object) → void};
-  }
+  @#C10
+  set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(1, value){(core::int, core::Object) → void};
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]
-  @#C11
-  get mapKeep() → core::Map<core::String, self::BarKeep>
+  @#C12
+  get mapKeep() → pb_::PbMap<core::String, self::BarKeep>
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap (skip check)] this.{int::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(){(core::int) → pb_::PbMap<core::String, self::BarKeep>};
 
   [@vm.inferred-return-type.metadata=int]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]
   [@vm.unboxing-info.metadata=()->i]
-  @#C13
+  @#C14
   get aKeep() → core::int
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C13
-  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
-  }
+  @#C14
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(4, value){(core::int, core::int) → void};
 
   [@vm.inferred-return-type.metadata=dart.core::bool]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]
-  @#C15
+  @#C16
   method hasHasKeep() → core::bool
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{int::GeneratedMessage::$_has}(){(core::int) → core::bool};
 
   [@vm.inferred-return-type.metadata=dart.core::Null? (value: null)]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]
-  @#C17
+  @#C18
   method clearClearKeep() → void
-    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::clearField}(){(core::int) → void};
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_clearField}(){(core::int) → void};
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  @#C20
+  get mixinKeep() → self::MixinKeep
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::MixinKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::MixinKeep>(7){(core::int) → self::MixinKeep};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  @#C20
+  set mixinKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::MixinKeep] self::MixinKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(8, value){(core::int, core::Object) → void};
 }
 class BarKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
   static final field int::BuilderInfo _i = let final int::BuilderInfo #t4 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
-    let final core::String #t5 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::a}<core::int>(1){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    let final core::String #t5 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::aI}(1){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
+
+  [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?]
+  static field self::BarKeep? _defaultInstance = null;
   constructor _() → self::BarKeep
     : super int::GeneratedMessage::•()
     ;
@@ -167,31 +189,35 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::BarKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
-  @#C7
+  @#C8
   static method create() → self::BarKeep
     return new self::BarKeep::_();
 
+  [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
+  @#C8
+  static method getDefault() → self::BarKeep
+    return let final self::BarKeep? #t6 = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?] self::BarKeep::_defaultInstance in #t6 == null ?{self::BarKeep} self::BarKeep::_defaultInstance = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] int::GeneratedMessage::$_defaultFor<self::BarKeep>() : #t6{self::BarKeep};
+
   [@vm.inferred-return-type.metadata=int]
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]
   [@vm.unboxing-info.metadata=()->i]
-  @#C9
+  @#C10
   get aKeep() → core::int
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
 
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C9
-  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
-  }
+  @#C10
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
 }
 class HasKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t6 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t6.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t6.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t6;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t7 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t7;
   constructor _() → self::HasKeep
     : super int::GeneratedMessage::•()
     ;
@@ -202,17 +228,17 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::HasKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::HasKeep]
-  @#C7
+  @#C8
   static method create() → self::HasKeep
     return new self::HasKeep::_();
 }
 class ClearKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t7 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t7;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t8 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t8;
   constructor _() → self::ClearKeep
     : super int::GeneratedMessage::•()
     ;
@@ -223,26 +249,79 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::ClearKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::ClearKeep]
-  @#C7
+  @#C8
   static method create() → self::ClearKeep
     return new self::ClearKeep::_();
 }
+class MixinKeep extends self::_MixinKeep&GeneratedMessage&MyMixin {
+
+  [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t9 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "MixinKeep") in block {
+    let final core::String #t10 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::aI}(1){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t9;
+  constructor _() → self::MixinKeep
+    : super self::_MixinKeep&GeneratedMessage&MyMixin::•()
+    ;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  static factory •() → self::MixinKeep
+    return [@vm.inferred-type.metadata=foo.pb.dart::MixinKeep] self::MixinKeep::create();
+
+  [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]
+  get info_() → int::BuilderInfo
+    return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::MixinKeep::_i;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  @#C8
+  static method create() → self::MixinKeep
+    return new self::MixinKeep::_();
+
+  [@vm.inferred-return-type.metadata=int]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]
+  [@vm.unboxing-info.metadata=()->i]
+  @#C10
+  get aKeep() → core::int
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]
+  [@vm.unboxing-info.metadata=(i)->b]
+  @#C10
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 42)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
+}
+abstract class _MixinKeep&GeneratedMessage&MyMixin extends int::GeneratedMessage implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_MixinKeep&GeneratedMessage&MyMixin
+    : super int::GeneratedMessage::•()
+    ;
+}
 constants  {
   #C1 = false
   #C2 = static-tearoff self::BarKeep::create
   #C3 = static-tearoff self::HasKeep::create
   #C4 = static-tearoff self::ClearKeep::create
-  #C5 = "dart2js:noInline"
-  #C6 = null
-  #C7 = core::pragma {name:#C5, options:#C6}
-  #C8 = 1
-  #C9 = int::TagNumber {tagNumber:#C8}
-  #C10 = 3
-  #C11 = int::TagNumber {tagNumber:#C10}
-  #C12 = 5
-  #C13 = int::TagNumber {tagNumber:#C12}
-  #C14 = 6
-  #C15 = int::TagNumber {tagNumber:#C14}
-  #C16 = 7
-  #C17 = int::TagNumber {tagNumber:#C16}
+  #C5 = static-tearoff self::MixinKeep::create
+  #C6 = "dart2js:noInline"
+  #C7 = null
+  #C8 = core::pragma {name:#C6, options:#C7}
+  #C9 = 1
+  #C10 = ann::TagNumber {tagNumber:#C9}
+  #C11 = 3
+  #C12 = ann::TagNumber {tagNumber:#C11}
+  #C13 = 5
+  #C14 = ann::TagNumber {tagNumber:#C13}
+  #C15 = 6
+  #C16 = ann::TagNumber {tagNumber:#C15}
+  #C17 = 7
+  #C18 = ann::TagNumber {tagNumber:#C17}
+  #C19 = 8
+  #C20 = ann::TagNumber {tagNumber:#C19}
+}
+library mixins.lib.dart;
+import self as self;
+import "dart:core" as core;
+
+abstract class MyMixin extends core::Object /*isMixinDeclaration*/  {
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart
index 7e96839..ce36ec5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart
@@ -13,7 +13,8 @@
   8, 42, 34, 9, 10,
   3, 122, 111, 112, 18,
   2, 8, 3, 40, 43,
-  50, 0, 58, 0,
+  50, 0, 58, 0, 66,
+  2, 8, 42,
 ];
 
 main() {
@@ -23,6 +24,7 @@
     expect(foo.barKeep.aKeep, 5);
     expect(foo.aKeep, 43);
     expect(foo.hasHasKeep(), true);
+    expect(foo.mixinKeep.aKeep, 42);
     foo.clearClearKeep();
   });
 }
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 8723df0..134e78d 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
@@ -3,6 +3,7 @@
 import "generated/foo.pb.dart" as pb;
 import "package:test_core/src/scaffolding.dart" as sca;
 import "package:matcher/src/expect/expect.dart" as exp;
+import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
 import "dart:core" as core;
 
 import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart";
@@ -42,17 +43,18 @@
 
 
 [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>]
-static field core::List<core::int> buffer = <core::int>[10, 4, 8, 5, 16, 4, 26, 9, 10, 3, 102, 111, 111, 18, 2, 8, 42, 34, 9, 10, 3, 122, 111, 112, 18, 2, 8, 3, 40, 43, 50, 0, 58, 0];
+static field core::List<core::int> buffer = <core::int>[10, 4, 8, 5, 16, 4, 26, 9, 10, 3, 102, 111, 111, 18, 2, 8, 42, 34, 9, 10, 3, 122, 111, 112, 18, 2, 8, 3, 40, 43, 50, 0, 58, 0, 66, 2, 8, 42];
 
 [@vm.inferred-return-type.metadata=dart.core::Null? (value: null)]
 [@vm.closure-id=1]
 static method main() → dynamic {
   [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep foo = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep] pb::FooKeep::fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] self::buffer);
   sca::test([@vm.closure-id=1]() → Null {
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep? (skip check)] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] foo.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 42);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep? (skip check)] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] foo.{pb::FooKeep::mapKeep}{pb_::PbMap<core::String, pb::BarKeep>}.{pb_::PbMap::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 42);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] foo.{pb::FooKeep::barKeep}{pb::BarKeep}.{pb::BarKeep::aKeep}{core::int}, 5);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int}, 43);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() → core::bool}, true);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mixinKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep] foo.{pb::FooKeep::mixinKeep}{pb::MixinKeep}.{pb::MixinKeep::aKeep}{core::int}, 42);
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=? (skip check)] foo.{pb::FooKeep::clearClearKeep}(){() → void};
   });
 }
@@ -60,9 +62,13 @@
 import self as self;
 import "package:protobuf/src/protobuf/internal.dart" as int;
 import "dart:core" as core;
+import "package:protobuf/src/protobuf/annotations.dart" as ann;
 import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
+import "../mixins.lib.dart" as lib;
+additionalExports = (int::GeneratedMessageGenericExtensions)
 
 import "dart:core" as $core;
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart" as $mixin;
 import "package:protobuf/src/protobuf/internal.dart";
 
 class FooKeep extends int::GeneratedMessage {
@@ -73,9 +79,11 @@
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     let final core::String #t2 = #C1 ?{core::String} "" : "mapKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::BarKeep>(){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    let final core::String #t3 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::a}<core::int>(5){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    let final core::String #t3 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aI}(5){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", #C4){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::HasKeep}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", #C5){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::ClearKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::MixinKeep>(8, #C1 ?{core::String} "" : "mixinKeep", #C6){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::MixinKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -83,9 +91,9 @@
     ;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::FooKeep]
-  static factory fromBuffer([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::FooKeep
+  static factory fromBuffer([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> data) → self::FooKeep
     return let final self::FooKeep #t4 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create() in block {
-      [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [int::ExtensionRegistry]) → void};
+      [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::GeneratedMessage::mergeFromBuffer}(data){(core::List<core::int>, [int::ExtensionRegistry]) → void};
     } =>#t4;
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
@@ -94,49 +102,58 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::FooKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::FooKeep]
-  @#C8
+  @#C9
   static method create() → self::FooKeep
     return new self::FooKeep::_();
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:2]
-  @#C10
+  @#C11
   get barKeep() → self::BarKeep
-    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::BarKeep>(0){(core::int) → self::BarKeep};
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]
-  @#C12
-  get mapKeep() → core::Map<core::String, self::BarKeep>
+  @#C13
+  get mapKeep() → pb_::PbMap<core::String, self::BarKeep>
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap (skip check)] this.{int::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(){(core::int) → pb_::PbMap<core::String, self::BarKeep>};
 
   [@vm.inferred-return-type.metadata=int]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]
   [@vm.unboxing-info.metadata=()->i]
-  @#C14
+  @#C15
   get aKeep() → core::int
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
 
   [@vm.inferred-return-type.metadata=dart.core::bool]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]
-  @#C16
+  @#C17
   method hasHasKeep() → core::bool
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{int::GeneratedMessage::$_has}(){(core::int) → core::bool};
 
   [@vm.inferred-return-type.metadata=dart.core::Null? (value: null)]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]
-  @#C18
+  @#C19
   method clearClearKeep() → void
-    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::clearField}(){(core::int) → void};
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_clearField}(){(core::int) → void};
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:9]
+  @#C21
+  get mixinKeep() → self::MixinKeep
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::MixinKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::MixinKeep>(7){(core::int) → self::MixinKeep};
 }
 class BarKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
   static final field int::BuilderInfo _i = let final int::BuilderInfo #t5 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep", createEmptyInstance: #C3) in block {
-    let final core::String #t6 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::a}<core::int>(1){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    let final core::String #t6 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::aI}(1){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t5;
+
+  [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?]
+  static field self::BarKeep? _defaultInstance = null;
   constructor _() → self::BarKeep
     : super int::GeneratedMessage::•()
     ;
@@ -147,24 +164,29 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::BarKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
-  @#C8
+  @#C9
   static method create() → self::BarKeep
     return new self::BarKeep::_();
 
+  [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
+  @#C9
+  static method getDefault() → self::BarKeep
+    return let final self::BarKeep? #t7 = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?] self::BarKeep::_defaultInstance in #t7 == null ?{self::BarKeep} self::BarKeep::_defaultInstance = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] int::GeneratedMessage::$_defaultFor<self::BarKeep>() : #t7{self::BarKeep};
+
   [@vm.inferred-return-type.metadata=int]
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:9]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:10]
   [@vm.unboxing-info.metadata=()->i]
-  @#C10
+  @#C11
   get aKeep() → core::int
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
 }
 class HasKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t7 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep", createEmptyInstance: #C4) in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t7;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t8 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep", createEmptyInstance: #C4) in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t8;
   constructor _() → self::HasKeep
     : super int::GeneratedMessage::•()
     ;
@@ -175,17 +197,17 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::HasKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::HasKeep]
-  @#C8
+  @#C9
   static method create() → self::HasKeep
     return new self::HasKeep::_();
 }
 class ClearKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t8 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep", createEmptyInstance: #C5) in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t8;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t9 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep", createEmptyInstance: #C5) in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t9;
   constructor _() → self::ClearKeep
     : super int::GeneratedMessage::•()
     ;
@@ -196,27 +218,70 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::ClearKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::ClearKeep]
-  @#C8
+  @#C9
   static method create() → self::ClearKeep
     return new self::ClearKeep::_();
 }
+class MixinKeep extends self::_MixinKeep&GeneratedMessage&MyMixin {
+
+  [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t10 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "MixinKeep", createEmptyInstance: #C6) in block {
+    let final core::String #t11 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t10.{int::BuilderInfo::aI}(1){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t10.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t10.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t10;
+  constructor _() → self::MixinKeep
+    : super self::_MixinKeep&GeneratedMessage&MyMixin::•()
+    ;
+
+  [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]
+  get info_() → int::BuilderInfo
+    return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::MixinKeep::_i;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  @#C9
+  static method create() → self::MixinKeep
+    return new self::MixinKeep::_();
+
+  [@vm.inferred-return-type.metadata=int]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:11]
+  [@vm.unboxing-info.metadata=()->i]
+  @#C11
+  get aKeep() → core::int
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
+}
+abstract class _MixinKeep&GeneratedMessage&MyMixin extends int::GeneratedMessage implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_MixinKeep&GeneratedMessage&MyMixin
+    : super int::GeneratedMessage::•()
+    ;
+}
 constants  {
   #C1 = false
   #C2 = static-tearoff self::FooKeep::create
   #C3 = static-tearoff self::BarKeep::create
   #C4 = static-tearoff self::HasKeep::create
   #C5 = static-tearoff self::ClearKeep::create
-  #C6 = "dart2js:noInline"
-  #C7 = null
-  #C8 = core::pragma {name:#C6, options:#C7}
-  #C9 = 1
-  #C10 = int::TagNumber {tagNumber:#C9}
-  #C11 = 3
-  #C12 = int::TagNumber {tagNumber:#C11}
-  #C13 = 5
-  #C14 = int::TagNumber {tagNumber:#C13}
-  #C15 = 6
-  #C16 = int::TagNumber {tagNumber:#C15}
-  #C17 = 7
-  #C18 = int::TagNumber {tagNumber:#C17}
+  #C6 = static-tearoff self::MixinKeep::create
+  #C7 = "dart2js:noInline"
+  #C8 = null
+  #C9 = core::pragma {name:#C7, options:#C8}
+  #C10 = 1
+  #C11 = ann::TagNumber {tagNumber:#C10}
+  #C12 = 3
+  #C13 = ann::TagNumber {tagNumber:#C12}
+  #C14 = 5
+  #C15 = ann::TagNumber {tagNumber:#C14}
+  #C16 = 6
+  #C17 = ann::TagNumber {tagNumber:#C16}
+  #C18 = 7
+  #C19 = ann::TagNumber {tagNumber:#C18}
+  #C20 = 8
+  #C21 = ann::TagNumber {tagNumber:#C20}
+}
+library mixins.lib.dart;
+import self as self;
+import "dart:core" as core;
+
+abstract class MyMixin extends core::Object /*isMixinDeclaration*/  {
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart
index 2ed7884..62933bb 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart
@@ -17,6 +17,7 @@
         ..mapDrop['zop'] = (ZopDrop()..aDrop = 3)
         ..aKeep = 43
         ..hasKeep = HasKeep()
+        ..mixinKeep = (MixinKeep()..aKeep = 42)
         ..clearKeep = ClearKeep();
   final buffer = foo.writeToBuffer();
   print('List<int> buffer = <int>[');
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 4a5a6e9..2fcbfd9 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
@@ -1,6 +1,7 @@
 library #lib;
 import self as self;
 import "generated/foo.pb.dart" as pb;
+import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
 import "dart:core" as core;
 import "dart:typed_data" as typ;
 import "package:protobuf/src/protobuf/internal.dart" as int;
@@ -17,14 +18,17 @@
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.bDrop] [@vm.inferred-type.metadata=? (skip check)] #t2.{pb::BarKeep::bDrop} = 4;
     } =>#t2;
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:library package:protobuf/src/protobuf/pb_map.dart::PbMap<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapKeep}{pb_::PbMap<core::String, pb::BarKeep>}.{pb_::PbMap::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t3.{pb::BarKeep::aKeep} = 42;
     } =>#t3){(core::String, pb::BarKeep) → void};
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapDrop}{core::Map<core::String, pb::ZopDrop>}.{core::Map::[]=}("zop", let final pb::ZopDrop #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:library package:protobuf/src/protobuf/pb_map.dart::PbMap<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapDrop] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapDrop}{pb_::PbMap<core::String, pb::ZopDrop>}.{pb_::PbMap::[]=}("zop", let final pb::ZopDrop #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop] pb::ZopDrop::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ZopDrop.aDrop] [@vm.inferred-type.metadata=? (skip check)] #t4.{pb::ZopDrop::aDrop} = 3;
     } =>#t4){(core::String, pb::ZopDrop) → void};
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::hasKeep} = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::HasKeep] pb::HasKeep::•();
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mixinKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::mixinKeep} = let final pb::MixinKeep #t5 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep] pb::MixinKeep::•() in block {
+      [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t5.{pb::MixinKeep::aKeep} = 42;
+    } =>#t5;
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::clearKeep} = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::ClearKeep] pb::ClearKeep::•();
   } =>#t1;
   final typ::Uint8List buffer = [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.writeToBuffer] [@vm.inferred-type.metadata=dart.typed_data::_Uint8List (skip check)] foo.{int::GeneratedMessage::writeToBuffer}(){() → typ::Uint8List};
@@ -39,9 +43,12 @@
 import self as self;
 import "package:protobuf/src/protobuf/internal.dart" as int;
 import "dart:core" as core;
+import "package:protobuf/src/protobuf/annotations.dart" as ann;
 import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
+import "../mixins.lib.dart" as lib;
 
 import "dart:core" as $core;
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart" as $mixin;
 import "package:protobuf/src/protobuf/internal.dart";
 
 class FooKeep extends int::GeneratedMessage {
@@ -50,11 +57,13 @@
   static final field int::BuilderInfo _i = let final int::BuilderInfo #t1 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", #C2){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::BarKeep}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::BarKeep>(3, #C1 ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", #C2){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::ZopDrop>(4, #C1 ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", #C3){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", #C4){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::HasKeep}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", #C5){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::ClearKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::BarKeep>(3, #C1 ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", #C2, #C3){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::ZopDrop>(4, #C1 ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", #C4, #C5){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aI}(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", #C6){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::HasKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", #C7){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::ClearKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::MixinKeep>(8, #C1 ?{core::String} "" : "mixinKeep", #C8){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::MixinKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -71,55 +80,59 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::FooKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::FooKeep]
-  @#C8
+  @#C11
   static method create() → self::FooKeep
     return new self::FooKeep::_();
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2]
-  @#C10
-  set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::setField}(1, v){(core::int, core::Object) → void};
-  }
+  @#C13
+  set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(1, value){(core::int, core::Object) → void};
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]
-  @#C12
-  get mapKeep() → core::Map<core::String, self::BarKeep>
+  @#C15
+  get mapKeep() → pb_::PbMap<core::String, self::BarKeep>
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap (skip check)] this.{int::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(2){(core::int) → pb_::PbMap<core::String, self::BarKeep>};
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]
-  @#C14
-  get mapDrop() → core::Map<core::String, self::ZopDrop>
+  @#C17
+  get mapDrop() → pb_::PbMap<core::String, self::ZopDrop>
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap (skip check)] this.{int::GeneratedMessage::$_getMap}<core::String, self::ZopDrop>(3){(core::int) → pb_::PbMap<core::String, self::ZopDrop>};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C16
-  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
-  }
+  @#C19
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(4, value){(core::int, core::int) → void};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6]
-  @#C18
-  set hasKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::HasKeep] self::HasKeep v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::setField}(6, v){(core::int, core::Object) → void};
-  }
+  @#C21
+  set hasKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::HasKeep] self::HasKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(6, value){(core::int, core::Object) → void};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7]
-  @#C20
-  set clearKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::setField}(7, v){(core::int, core::Object) → void};
-  }
+  @#C23
+  set clearKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(7, value){(core::int, core::Object) → void};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8]
+  @#C25
+  set mixinKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::MixinKeep] self::MixinKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(8, value){(core::int, core::Object) → void};
 }
 class BarKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
   static final field int::BuilderInfo _i = let final int::BuilderInfo #t2 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t2.{int::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t2.{int::BuilderInfo::a}<core::int>(2, #C1 ?{core::String} "" : "bDrop"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t2.{int::BuilderInfo::aI}(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t2.{int::BuilderInfo::aI}(2, #C1 ?{core::String} "" : "bDrop"){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t2.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
+
+  [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?]
+  static field self::BarKeep? _defaultInstance = null;
   constructor _() → self::BarKeep
     : super int::GeneratedMessage::•()
     ;
@@ -134,31 +147,34 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::BarKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
-  @#C8
+  @#C11
   static method create() → self::BarKeep
     return new self::BarKeep::_();
 
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8]
-  [@vm.unboxing-info.metadata=(i)->b]
-  @#C10
-  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
-  }
+  [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
+  @#C11
+  static method getDefault() → self::BarKeep
+    return let final self::BarKeep? #t3 = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?] self::BarKeep::_defaultInstance in #t3 == null ?{self::BarKeep} self::BarKeep::_defaultInstance = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] int::GeneratedMessage::$_defaultFor<self::BarKeep>(#C2) : #t3{self::BarKeep};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C22
-  set bDrop([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(1, v){(core::int, core::int) → void};
-  }
+  @#C13
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10]
+  [@vm.unboxing-info.metadata=(i)->b]
+  @#C27
+  set bDrop([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(1, value){(core::int, core::int) → void};
 }
 class HasKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t3 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t3.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t3.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t3;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t4 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t4;
   constructor _() → self::HasKeep
     : super int::GeneratedMessage::•()
     ;
@@ -173,17 +189,17 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::HasKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::HasKeep]
-  @#C8
+  @#C11
   static method create() → self::HasKeep
     return new self::HasKeep::_();
 }
 class ClearKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t4 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t4;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t5 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t5;
   constructor _() → self::ClearKeep
     : super int::GeneratedMessage::•()
     ;
@@ -198,17 +214,20 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::ClearKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::ClearKeep]
-  @#C8
+  @#C11
   static method create() → self::ClearKeep
     return new self::ClearKeep::_();
 }
 class ZopDrop extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t5 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ZopDrop") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aDrop"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t5.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t5;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t6 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ZopDrop") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t6.{int::BuilderInfo::aI}(1, #C1 ?{core::String} "" : "aDrop"){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t6.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t6;
+
+  [@vm.inferred-type.metadata=foo.pb.dart::ZopDrop?]
+  static field self::ZopDrop? _defaultInstance = null;
   constructor _() → self::ZopDrop
     : super int::GeneratedMessage::•()
     ;
@@ -223,38 +242,90 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::ZopDrop::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::ZopDrop]
-  @#C8
+  @#C11
   static method create() → self::ZopDrop
     return new self::ZopDrop::_();
 
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10]
+  [@vm.inferred-return-type.metadata=foo.pb.dart::ZopDrop]
+  @#C11
+  static method getDefault() → self::ZopDrop
+    return let final self::ZopDrop? #t7 = [@vm.inferred-type.metadata=foo.pb.dart::ZopDrop?] self::ZopDrop::_defaultInstance in #t7 == null ?{self::ZopDrop} self::ZopDrop::_defaultInstance = [@vm.inferred-type.metadata=foo.pb.dart::ZopDrop] int::GeneratedMessage::$_defaultFor<self::ZopDrop>(#C4) : #t7{self::ZopDrop};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C10
-  set aDrop([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
-  }
+  @#C13
+  set aDrop([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
+}
+class MixinKeep extends self::_MixinKeep&GeneratedMessage&MyMixin {
+
+  [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t8 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "MixinKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::aI}(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t8;
+  constructor _() → self::MixinKeep
+    : super self::_MixinKeep&GeneratedMessage&MyMixin::•()
+    ;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  static factory •() → self::MixinKeep
+    return [@vm.inferred-type.metadata=foo.pb.dart::MixinKeep] self::MixinKeep::create();
+
+  [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]
+  get info_() → int::BuilderInfo
+    return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::MixinKeep::_i;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  @#C11
+  static method create() → self::MixinKeep
+    return new self::MixinKeep::_();
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:12]
+  [@vm.unboxing-info.metadata=(i)->b]
+  @#C13
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 42)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
+}
+abstract class _MixinKeep&GeneratedMessage&MyMixin extends int::GeneratedMessage implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_MixinKeep&GeneratedMessage&MyMixin
+    : super int::GeneratedMessage::•()
+    ;
 }
 constants  {
   #C1 = false
   #C2 = static-tearoff self::BarKeep::create
-  #C3 = static-tearoff self::ZopDrop::create
-  #C4 = static-tearoff self::HasKeep::create
-  #C5 = static-tearoff self::ClearKeep::create
-  #C6 = "dart2js:noInline"
-  #C7 = null
-  #C8 = core::pragma {name:#C6, options:#C7}
-  #C9 = 1
-  #C10 = int::TagNumber {tagNumber:#C9}
-  #C11 = 3
-  #C12 = int::TagNumber {tagNumber:#C11}
-  #C13 = 4
-  #C14 = int::TagNumber {tagNumber:#C13}
-  #C15 = 5
-  #C16 = int::TagNumber {tagNumber:#C15}
-  #C17 = 6
-  #C18 = int::TagNumber {tagNumber:#C17}
-  #C19 = 7
-  #C20 = int::TagNumber {tagNumber:#C19}
-  #C21 = 2
-  #C22 = int::TagNumber {tagNumber:#C21}
+  #C3 = static-tearoff self::BarKeep::getDefault
+  #C4 = static-tearoff self::ZopDrop::create
+  #C5 = static-tearoff self::ZopDrop::getDefault
+  #C6 = static-tearoff self::HasKeep::create
+  #C7 = static-tearoff self::ClearKeep::create
+  #C8 = static-tearoff self::MixinKeep::create
+  #C9 = "dart2js:noInline"
+  #C10 = null
+  #C11 = core::pragma {name:#C9, options:#C10}
+  #C12 = 1
+  #C13 = ann::TagNumber {tagNumber:#C12}
+  #C14 = 3
+  #C15 = ann::TagNumber {tagNumber:#C14}
+  #C16 = 4
+  #C17 = ann::TagNumber {tagNumber:#C16}
+  #C18 = 5
+  #C19 = ann::TagNumber {tagNumber:#C18}
+  #C20 = 6
+  #C21 = ann::TagNumber {tagNumber:#C20}
+  #C22 = 7
+  #C23 = ann::TagNumber {tagNumber:#C22}
+  #C24 = 8
+  #C25 = ann::TagNumber {tagNumber:#C24}
+  #C26 = 2
+  #C27 = ann::TagNumber {tagNumber:#C26}
+}
+library mixins.lib.dart;
+import self as self;
+import "dart:core" as core;
+
+abstract class MyMixin extends core::Object /*isMixinDeclaration*/  {
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart
index 3511f1d..cf09a9e 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart
@@ -11,6 +11,7 @@
       FooKeep()
         ..barKeep = (BarKeep()..aKeep = 5)
         ..mapKeep['foo'] = (BarKeep()..aKeep = 2)
+        ..mixinKeep = (MixinKeep()..aKeep = 42)
         ..aKeep = 43;
   test('Freezing a message works', () {
     foo.freeze();
@@ -18,6 +19,7 @@
     expect(foo.mapKeep['foo']!.aKeep, 2);
     expect(foo.hasHasKeep(), false);
     expect(foo.aKeep, 43);
+    expect(foo.mixinKeep.aKeep, 42);
     expect(
       () => foo.clearClearKeep(),
       throwsA(const TypeMatcher<UnsupportedError>()),
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 88206c2..d0634d7 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
@@ -1,6 +1,7 @@
 library #lib;
 import self as self;
 import "generated/foo.pb.dart" as pb;
+import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
 import "dart:core" as core;
 import "package:test_core/src/scaffolding.dart" as sca;
 import "package:protobuf/src/protobuf/internal.dart" as int;
@@ -52,17 +53,21 @@
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::barKeep} = let final pb::BarKeep #t2 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t2.{pb::BarKeep::aKeep} = 5;
     } =>#t2;
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
+    [@vm.call-site-attributes.metadata=receiverType:library package:protobuf/src/protobuf/pb_map.dart::PbMap<dart.core::String, library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep>] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]=] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] #t1.{pb::FooKeep::mapKeep}{pb_::PbMap<core::String, pb::BarKeep>}.{pb_::PbMap::[]=}("foo", let final pb::BarKeep #t3 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] pb::BarKeep::•() in block {
       [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t3.{pb::BarKeep::aKeep} = 2;
     } =>#t3){(core::String, pb::BarKeep) → void};
+    [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mixinKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::mixinKeep} = let final pb::MixinKeep #t4 = [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep] pb::MixinKeep::•() in block {
+      [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t4.{pb::MixinKeep::aKeep} = 42;
+    } =>#t4;
     [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=? (skip check)] #t1.{pb::FooKeep::aKeep} = 43;
   } =>#t1;
   sca::test([@vm.closure-id=1]() → Null {
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.freeze] [@vm.inferred-type.metadata=? (skip check)] foo.{int::GeneratedMessage::freeze}(){() → int::GeneratedMessage};
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.barKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep] foo.{pb::FooKeep::barKeep}{pb::BarKeep}.{pb::BarKeep::aKeep}{core::int}, 5);
-    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep? (skip check)] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] foo.{pb::FooKeep::mapKeep}{core::Map<core::String, pb::BarKeep>}.{core::Map::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 2);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap.[]] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::BarKeep? (skip check)] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mapKeep] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap] foo.{pb::FooKeep::mapKeep}{pb_::PbMap<core::String, pb::BarKeep>}.{pb_::PbMap::[]}("foo"){(core::Object?) → pb::BarKeep?}!.{pb::BarKeep::aKeep}{core::int}, 2);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.hasHasKeep] [@vm.inferred-type.metadata=dart.core::bool (skip check)] foo.{pb::FooKeep::hasHasKeep}(){() → core::bool}, false);
     exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.aKeep] [@vm.inferred-type.metadata=int] foo.{pb::FooKeep::aKeep}{core::int}, 43);
+    exp::expect([@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep.aKeep] [@vm.inferred-type.metadata=int] [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.mixinKeep] [@vm.inferred-type.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::MixinKeep] foo.{pb::FooKeep::mixinKeep}{pb::MixinKeep}.{pb::MixinKeep::aKeep}{core::int}, 42);
     exp::expect([@vm.closure-id=2]() → void => [@vm.direct-call.metadata=library file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart::FooKeep.clearClearKeep] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] foo.{pb::FooKeep::clearClearKeep}(){() → void}, [@vm.inferred-type.metadata=library package:matcher/src/expect/throws_matcher.dart::Throws] thr::throwsA());
   });
 }
@@ -70,9 +75,12 @@
 import self as self;
 import "package:protobuf/src/protobuf/internal.dart" as int;
 import "dart:core" as core;
+import "package:protobuf/src/protobuf/annotations.dart" as ann;
 import "package:protobuf/src/protobuf/pb_map.dart" as pb_;
+import "../mixins.lib.dart" as lib;
 
 import "dart:core" as $core;
+import "file:pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart" as $mixin;
 import "package:protobuf/src/protobuf/internal.dart";
 
 class FooKeep extends int::GeneratedMessage {
@@ -83,9 +91,11 @@
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     let final core::String #t2 = #C1 ?{core::String} "" : "mapKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.m] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::m}<core::String, self::BarKeep>(){(core::int, core::String, {defaultEnumValue: int::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<int::ProtobufEnum>?, required keyFieldType: core::int, packageName: int::PackageName, protoName: core::String?, valueCreator: () →? int::GeneratedMessage, valueDefaultOrMaker: dynamic, required valueFieldType: core::int, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    let final core::String #t3 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::a}<core::int>(5){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    let final core::String #t3 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aI}(5){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::HasKeep}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::ClearKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aOM] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::aOM}<self::MixinKeep>(8, #C1 ?{core::String} "" : "mixinKeep", #C5){(core::int, core::String, {protoName: core::String?, required subBuilder: () → self::MixinKeep}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t1.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t1;
   constructor _() → self::FooKeep
@@ -102,62 +112,74 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::FooKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::FooKeep]
-  @#C7
+  @#C8
   static method create() → self::FooKeep
     return new self::FooKeep::_();
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]
-  @#C9
+  @#C10
   get barKeep() → self::BarKeep
-    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::BarKeep>(0){(core::int) → self::BarKeep};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3]
-  @#C9
-  set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::setField}(v){(core::int, core::Object) → void};
-  }
+  @#C10
+  set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(1, value){(core::int, core::Object) → void};
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4]
-  @#C11
-  get mapKeep() → core::Map<core::String, self::BarKeep>
+  @#C12
+  get mapKeep() → pb_::PbMap<core::String, self::BarKeep>
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/pb_map.dart::PbMap (skip check)] this.{int::GeneratedMessage::$_getMap}<core::String, self::BarKeep>(){(core::int) → pb_::PbMap<core::String, self::BarKeep>};
 
   [@vm.inferred-return-type.metadata=int]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]
   [@vm.unboxing-info.metadata=()->i]
-  @#C13
+  @#C14
   get aKeep() → core::int
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
 
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C13
-  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
-  }
+  @#C14
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(4, value){(core::int, core::int) → void};
 
   [@vm.inferred-return-type.metadata=dart.core::bool]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]
-  @#C15
+  @#C16
   method hasHasKeep() → core::bool
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_has] [@vm.inferred-type.metadata=dart.core::bool (skip check)] this.{int::GeneratedMessage::$_has}(){(core::int) → core::bool};
 
   [@vm.inferred-return-type.metadata=dart.core::Null? (value: null)]
   [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]
-  @#C17
+  @#C18
   method clearClearKeep() → void
-    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::clearField}(){(core::int) → void};
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_clearField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_clearField}(){(core::int) → void};
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  @#C20
+  get mixinKeep() → self::MixinKeep
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::MixinKeep (skip check)] this.{int::GeneratedMessage::$_getN}<self::MixinKeep>(7){(core::int) → self::MixinKeep};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  @#C20
+  set mixinKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::MixinKeep] self::MixinKeep value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setField] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setField}(8, value){(core::int, core::Object) → void};
 }
 class BarKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
   static final field int::BuilderInfo _i = let final int::BuilderInfo #t4 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
-    let final core::String #t5 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.a] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::a}<core::int>(1){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<int::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? int::GeneratedMessage, valueOf: (core::int) →? int::ProtobufEnum?}) → void};
+    let final core::String #t5 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::aI}(1){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
+
+  [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?]
+  static field self::BarKeep? _defaultInstance = null;
   constructor _() → self::BarKeep
     : super int::GeneratedMessage::•()
     ;
@@ -172,31 +194,35 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::BarKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
-  @#C7
+  @#C8
   static method create() → self::BarKeep
     return new self::BarKeep::_();
 
+  [@vm.inferred-return-type.metadata=foo.pb.dart::BarKeep]
+  @#C8
+  static method getDefault() → self::BarKeep
+    return let final self::BarKeep? #t6 = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep?] self::BarKeep::_defaultInstance in #t6 == null ?{self::BarKeep} self::BarKeep::_defaultInstance = [@vm.inferred-type.metadata=foo.pb.dart::BarKeep] int::GeneratedMessage::$_defaultFor<self::BarKeep>() : #t6{self::BarKeep};
+
   [@vm.inferred-return-type.metadata=int]
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]
   [@vm.unboxing-info.metadata=()->i]
-  @#C9
+  @#C10
   get aKeep() → core::int
     return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
 
-  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]
   [@vm.unboxing-info.metadata=(i)->b]
-  @#C9
-  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int v) → void {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=? (skip check)] this.{int::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
-  }
+  @#C10
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
 }
 class HasKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t6 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t6.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t6.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t6;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t7 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t7;
   constructor _() → self::HasKeep
     : super int::GeneratedMessage::•()
     ;
@@ -207,17 +233,17 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::HasKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::HasKeep]
-  @#C7
+  @#C8
   static method create() → self::HasKeep
     return new self::HasKeep::_();
 }
 class ClearKeep extends int::GeneratedMessage {
 
   [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
-  static final field int::BuilderInfo _i = let final int::BuilderInfo #t7 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
-    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t7.{int::BuilderInfo::hasRequiredFields} = false;
-  } =>#t7;
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t8 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t8.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t8;
   constructor _() → self::ClearKeep
     : super int::GeneratedMessage::•()
     ;
@@ -228,26 +254,79 @@
     return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::ClearKeep::_i;
 
   [@vm.inferred-return-type.metadata=foo.pb.dart::ClearKeep]
-  @#C7
+  @#C8
   static method create() → self::ClearKeep
     return new self::ClearKeep::_();
 }
+class MixinKeep extends self::_MixinKeep&GeneratedMessage&MyMixin {
+
+  [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  static final field int::BuilderInfo _i = let final int::BuilderInfo #t9 = new int::BuilderInfo::•(#C1 ?{core::String} "" : "MixinKeep") in block {
+    let final core::String #t10 = #C1 ?{core::String} "" : "aKeep" in [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.aI] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::aI}(1){(core::int, core::String, {defaultOrMaker: dynamic, fieldType: core::int, protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.add] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? int::GeneratedMessage, (core::int) →? int::ProtobufEnum?, core::List<int::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=? (skip check)] #t9.{int::BuilderInfo::hasRequiredFields} = false;
+  } =>#t9;
+  constructor _() → self::MixinKeep
+    : super self::_MixinKeep&GeneratedMessage&MyMixin::•()
+    ;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  static factory •() → self::MixinKeep
+    return [@vm.inferred-type.metadata=foo.pb.dart::MixinKeep] self::MixinKeep::create();
+
+  [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1]
+  get info_() → int::BuilderInfo
+    return [@vm.inferred-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo] self::MixinKeep::_i;
+
+  [@vm.inferred-return-type.metadata=foo.pb.dart::MixinKeep]
+  @#C8
+  static method create() → self::MixinKeep
+    return new self::MixinKeep::_();
+
+  [@vm.inferred-return-type.metadata=int]
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]
+  [@vm.unboxing-info.metadata=()->i]
+  @#C10
+  get aKeep() → core::int
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{int::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
+
+  [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]
+  [@vm.unboxing-info.metadata=(i)->b]
+  @#C10
+  set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 42)] core::int value) → void
+    return [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=dart.core::Null? (skip check) (value: null)] this.{int::GeneratedMessage::$_setSignedInt32}(0, value){(core::int, core::int) → void};
+}
+abstract class _MixinKeep&GeneratedMessage&MyMixin extends int::GeneratedMessage implements lib::MyMixin /*isAnonymousMixin,isEliminatedMixin*/  {
+  synthetic constructor •() → self::_MixinKeep&GeneratedMessage&MyMixin
+    : super int::GeneratedMessage::•()
+    ;
+}
 constants  {
   #C1 = false
   #C2 = static-tearoff self::BarKeep::create
   #C3 = static-tearoff self::HasKeep::create
   #C4 = static-tearoff self::ClearKeep::create
-  #C5 = "dart2js:noInline"
-  #C6 = null
-  #C7 = core::pragma {name:#C5, options:#C6}
-  #C8 = 1
-  #C9 = int::TagNumber {tagNumber:#C8}
-  #C10 = 3
-  #C11 = int::TagNumber {tagNumber:#C10}
-  #C12 = 5
-  #C13 = int::TagNumber {tagNumber:#C12}
-  #C14 = 6
-  #C15 = int::TagNumber {tagNumber:#C14}
-  #C16 = 7
-  #C17 = int::TagNumber {tagNumber:#C16}
+  #C5 = static-tearoff self::MixinKeep::create
+  #C6 = "dart2js:noInline"
+  #C7 = null
+  #C8 = core::pragma {name:#C6, options:#C7}
+  #C9 = 1
+  #C10 = ann::TagNumber {tagNumber:#C9}
+  #C11 = 3
+  #C12 = ann::TagNumber {tagNumber:#C11}
+  #C13 = 5
+  #C14 = ann::TagNumber {tagNumber:#C13}
+  #C15 = 6
+  #C16 = ann::TagNumber {tagNumber:#C15}
+  #C17 = 7
+  #C18 = ann::TagNumber {tagNumber:#C17}
+  #C19 = 8
+  #C20 = ann::TagNumber {tagNumber:#C19}
+}
+library mixins.lib.dart;
+import self as self;
+import "dart:core" as core;
+
+abstract class MyMixin extends core::Object /*isMixinDeclaration*/  {
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/dart_options.pb.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/dart_options.pb.dart
new file mode 100644
index 0000000..0711c0d
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/dart_options.pb.dart
@@ -0,0 +1,154 @@
+// This is a generated file - do not edit.
+//
+// Generated from dart_options.proto.
+
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
+
+import 'dart:core' as $core;
+
+import 'package:protobuf/protobuf.dart' as $pb;
+
+export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
+
+/// A mixin that can be used in the 'with' clause of the generated Dart class
+/// for a proto message.
+class DartMixin extends $pb.GeneratedMessage {
+  factory DartMixin() => create();
+
+  DartMixin._();
+
+  factory DartMixin.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory DartMixin.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'DartMixin',
+      package: const $pb.PackageName(_omitMessageNames ? '' : 'dart_options'),
+      createEmptyInstance: create)
+    ..aOS(1, _omitFieldNames ? '' : 'name')
+    ..aOS(2, _omitFieldNames ? '' : 'importFrom')
+    ..hasRequiredFields = false;
+
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  DartMixin clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  DartMixin copyWith(void Function(DartMixin) updates) =>
+      super.copyWith((message) => updates(message as DartMixin)) as DartMixin;
+
+  @$core.override
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static DartMixin create() => DartMixin._();
+  @$core.override
+  DartMixin createEmptyInstance() => create();
+  @$core.pragma('dart2js:noInline')
+  static DartMixin getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<DartMixin>(create);
+  static DartMixin? _defaultInstance;
+
+  /// The name of the mixin class.
+  @$pb.TagNumber(1)
+  $core.String get name => $_getSZ(0);
+  @$pb.TagNumber(1)
+  set name($core.String value) => $_setString(0, value);
+  @$pb.TagNumber(1)
+  $core.bool hasName() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearName() => $_clearField(1);
+
+  /// A URI pointing to the Dart library that defines the mixin.
+  /// The generated Dart code will use this in an import statement.
+  @$pb.TagNumber(2)
+  $core.String get importFrom => $_getSZ(1);
+  @$pb.TagNumber(2)
+  set importFrom($core.String value) => $_setString(1, value);
+  @$pb.TagNumber(2)
+  $core.bool hasImportFrom() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearImportFrom() => $_clearField(2);
+}
+
+/// Defines additional Dart imports to be used with messages in this file.
+class Imports extends $pb.GeneratedMessage {
+  factory Imports() => create();
+
+  Imports._();
+
+  factory Imports.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory Imports.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'Imports',
+      package: const $pb.PackageName(_omitMessageNames ? '' : 'dart_options'),
+      createEmptyInstance: create)
+    ..pPM<DartMixin>(1, _omitFieldNames ? '' : 'mixins',
+        subBuilder: DartMixin.create)
+    ..hasRequiredFields = false;
+
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  Imports clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  Imports copyWith(void Function(Imports) updates) =>
+      super.copyWith((message) => updates(message as Imports)) as Imports;
+
+  @$core.override
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static Imports create() => Imports._();
+  @$core.override
+  Imports createEmptyInstance() => create();
+  @$core.pragma('dart2js:noInline')
+  static Imports getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Imports>(create);
+  static Imports? _defaultInstance;
+
+  /// Mixins to be used on messages in this file.
+  /// These mixins are in addition to internally defined mixins (e.g PbMapMixin)
+  /// and may override them.
+  ///
+  /// Warning: mixins are experimental. The protoc Dart plugin doesn't check
+  /// for name conflicts between mixin class members and generated class members,
+  /// so the generated code may contain errors. Therefore, running dartanalyzer
+  /// on the generated file is a good idea.
+  @$pb.TagNumber(1)
+  $pb.PbList<DartMixin> get mixins => $_getList(0);
+}
+
+class Dart_options {
+  static final imports = $pb.Extension<Imports>(
+      _omitMessageNames ? '' : 'google.protobuf.FileOptions',
+      _omitFieldNames ? '' : 'imports',
+      28125061,
+      $pb.PbFieldType.OM,
+      defaultOrMaker: Imports.getDefault,
+      subBuilder: Imports.create);
+  static final mixin = $pb.Extension<$core.String>(
+      _omitMessageNames ? '' : 'google.protobuf.MessageOptions',
+      _omitFieldNames ? '' : 'mixin',
+      96128839,
+      $pb.PbFieldType.OS);
+  static void registerAllExtensions($pb.ExtensionRegistry registry) {
+    registry.add(imports);
+    registry.add(mixin);
+  }
+}
+
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
+    $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart
index db9725c..6f0cfeb 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/foo.pb.dart
@@ -1,100 +1,80 @@
-///
-//  Generated code. Do not modify.
-//  source: foo.proto
+// This is a generated file - do not edit.
 //
-// @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+// Generated from foo.proto.
+
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
+import '../mixins.lib.dart' as $mixin;
+
+export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
+
 class FooKeep extends $pb.GeneratedMessage {
+  factory FooKeep() => create();
+
+  FooKeep._();
+
+  factory FooKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory FooKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'FooKeep',
+      _omitMessageNames ? '' : 'FooKeep',
       createEmptyInstance: create)
-    ..aOM<BarKeep>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'barKeep',
-        protoName: 'barKeep',
-        subBuilder: BarKeep.create)
-    ..aOM<BarKeep>(
-        2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'barDrop',
-        protoName: 'barDrop',
-        subBuilder: BarKeep.create)
-    ..m<$core.String, BarKeep>(
-        3,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'mapKeep',
+    ..aOM<BarKeep>(1, _omitFieldNames ? '' : 'barKeep',
+        protoName: 'barKeep', subBuilder: BarKeep.create)
+    ..aOM<BarKeep>(2, _omitFieldNames ? '' : 'barDrop',
+        protoName: 'barDrop', subBuilder: BarKeep.create)
+    ..m<$core.String, BarKeep>(3, _omitFieldNames ? '' : 'mapKeep',
         protoName: 'mapKeep',
         entryClassName: 'FooKeep.MapKeepEntry',
         keyFieldType: $pb.PbFieldType.OS,
         valueFieldType: $pb.PbFieldType.OM,
-        valueCreator: BarKeep.create)
-    ..m<$core.String, ZopDrop>(
-        4,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'mapDrop',
+        valueCreator: BarKeep.create,
+        valueDefaultOrMaker: BarKeep.getDefault)
+    ..m<$core.String, ZopDrop>(4, _omitFieldNames ? '' : 'mapDrop',
         protoName: 'mapDrop',
         entryClassName: 'FooKeep.MapDropEntry',
         keyFieldType: $pb.PbFieldType.OS,
         valueFieldType: $pb.PbFieldType.OM,
-        valueCreator: ZopDrop.create)
-    ..a<$core.int>(
-        5,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'aKeep',
-        $pb.PbFieldType.O3,
-        protoName: 'aKeep')
-    ..aOM<HasKeep>(
-        6,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'hasKeep',
-        protoName: 'hasKeep',
-        subBuilder: HasKeep.create)
-    ..aOM<ClearKeep>(
-        7,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'clearKeep',
-        protoName: 'clearKeep',
-        subBuilder: ClearKeep.create)
+        valueCreator: ZopDrop.create,
+        valueDefaultOrMaker: ZopDrop.getDefault)
+    ..aI(5, _omitFieldNames ? '' : 'aKeep', protoName: 'aKeep')
+    ..aOM<HasKeep>(6, _omitFieldNames ? '' : 'hasKeep',
+        protoName: 'hasKeep', subBuilder: HasKeep.create)
+    ..aOM<ClearKeep>(7, _omitFieldNames ? '' : 'clearKeep',
+        protoName: 'clearKeep', subBuilder: ClearKeep.create)
+    ..aOM<MixinKeep>(8, _omitFieldNames ? '' : 'mixinKeep',
+        protoName: 'mixinKeep', subBuilder: MixinKeep.create)
+    ..aOM<MixinDrop>(9, _omitFieldNames ? '' : 'mixinDrop',
+        protoName: 'mixinDrop', subBuilder: MixinDrop.create)
     ..hasRequiredFields = false;
 
-  FooKeep._() : super();
-  factory FooKeep() => create();
-  factory FooKeep.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory FooKeep.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  FooKeep clone() => FooKeep()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  FooKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   FooKeep copyWith(void Function(FooKeep) updates) =>
-      super.copyWith((message) => updates(message as FooKeep))
-          as FooKeep; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as FooKeep)) as FooKeep;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static FooKeep create() => FooKeep._();
+  @$core.override
   FooKeep createEmptyInstance() => create();
-  static $pb.PbList<FooKeep> createRepeated() => $pb.PbList<FooKeep>();
   @$core.pragma('dart2js:noInline')
   static FooKeep getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<FooKeep>(create);
@@ -103,123 +83,117 @@
   @$pb.TagNumber(1)
   BarKeep get barKeep => $_getN(0);
   @$pb.TagNumber(1)
-  set barKeep(BarKeep v) {
-    setField(1, v);
-  }
-
+  set barKeep(BarKeep value) => $_setField(1, value);
   @$pb.TagNumber(1)
   $core.bool hasBarKeep() => $_has(0);
   @$pb.TagNumber(1)
-  void clearBarKeep() => clearField(1);
+  void clearBarKeep() => $_clearField(1);
   @$pb.TagNumber(1)
   BarKeep ensureBarKeep() => $_ensure(0);
 
   @$pb.TagNumber(2)
   BarKeep get barDrop => $_getN(1);
   @$pb.TagNumber(2)
-  set barDrop(BarKeep v) {
-    setField(2, v);
-  }
-
+  set barDrop(BarKeep value) => $_setField(2, value);
   @$pb.TagNumber(2)
   $core.bool hasBarDrop() => $_has(1);
   @$pb.TagNumber(2)
-  void clearBarDrop() => clearField(2);
+  void clearBarDrop() => $_clearField(2);
   @$pb.TagNumber(2)
   BarKeep ensureBarDrop() => $_ensure(1);
 
   @$pb.TagNumber(3)
-  $core.Map<$core.String, BarKeep> get mapKeep => $_getMap(2);
+  $pb.PbMap<$core.String, BarKeep> get mapKeep => $_getMap(2);
 
   @$pb.TagNumber(4)
-  $core.Map<$core.String, ZopDrop> get mapDrop => $_getMap(3);
+  $pb.PbMap<$core.String, ZopDrop> get mapDrop => $_getMap(3);
 
   @$pb.TagNumber(5)
   $core.int get aKeep => $_getIZ(4);
   @$pb.TagNumber(5)
-  set aKeep($core.int v) {
-    $_setSignedInt32(4, v);
-  }
-
+  set aKeep($core.int value) => $_setSignedInt32(4, value);
   @$pb.TagNumber(5)
   $core.bool hasAKeep() => $_has(4);
   @$pb.TagNumber(5)
-  void clearAKeep() => clearField(5);
+  void clearAKeep() => $_clearField(5);
 
   @$pb.TagNumber(6)
   HasKeep get hasKeep => $_getN(5);
   @$pb.TagNumber(6)
-  set hasKeep(HasKeep v) {
-    setField(6, v);
-  }
-
+  set hasKeep(HasKeep value) => $_setField(6, value);
   @$pb.TagNumber(6)
   $core.bool hasHasKeep() => $_has(5);
   @$pb.TagNumber(6)
-  void clearHasKeep() => clearField(6);
+  void clearHasKeep() => $_clearField(6);
   @$pb.TagNumber(6)
   HasKeep ensureHasKeep() => $_ensure(5);
 
   @$pb.TagNumber(7)
   ClearKeep get clearKeep => $_getN(6);
   @$pb.TagNumber(7)
-  set clearKeep(ClearKeep v) {
-    setField(7, v);
-  }
-
+  set clearKeep(ClearKeep value) => $_setField(7, value);
   @$pb.TagNumber(7)
   $core.bool hasClearKeep() => $_has(6);
   @$pb.TagNumber(7)
-  void clearClearKeep() => clearField(7);
+  void clearClearKeep() => $_clearField(7);
   @$pb.TagNumber(7)
   ClearKeep ensureClearKeep() => $_ensure(6);
+
+  @$pb.TagNumber(8)
+  MixinKeep get mixinKeep => $_getN(7);
+  @$pb.TagNumber(8)
+  set mixinKeep(MixinKeep value) => $_setField(8, value);
+  @$pb.TagNumber(8)
+  $core.bool hasMixinKeep() => $_has(7);
+  @$pb.TagNumber(8)
+  void clearMixinKeep() => $_clearField(8);
+  @$pb.TagNumber(8)
+  MixinKeep ensureMixinKeep() => $_ensure(7);
+
+  @$pb.TagNumber(9)
+  MixinDrop get mixinDrop => $_getN(8);
+  @$pb.TagNumber(9)
+  set mixinDrop(MixinDrop value) => $_setField(9, value);
+  @$pb.TagNumber(9)
+  $core.bool hasMixinDrop() => $_has(8);
+  @$pb.TagNumber(9)
+  void clearMixinDrop() => $_clearField(9);
+  @$pb.TagNumber(9)
+  MixinDrop ensureMixinDrop() => $_ensure(8);
 }
 
 class BarKeep extends $pb.GeneratedMessage {
+  factory BarKeep() => create();
+
+  BarKeep._();
+
+  factory BarKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory BarKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'BarKeep',
+      _omitMessageNames ? '' : 'BarKeep',
       createEmptyInstance: create)
-    ..a<$core.int>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'aKeep',
-        $pb.PbFieldType.O3,
-        protoName: 'aKeep')
-    ..a<$core.int>(
-        2,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'bDrop',
-        $pb.PbFieldType.O3,
-        protoName: 'bDrop')
+    ..aI(1, _omitFieldNames ? '' : 'aKeep', protoName: 'aKeep')
+    ..aI(2, _omitFieldNames ? '' : 'bDrop', protoName: 'bDrop')
     ..hasRequiredFields = false;
 
-  BarKeep._() : super();
-  factory BarKeep() => create();
-  factory BarKeep.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory BarKeep.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  BarKeep clone() => BarKeep()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  BarKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   BarKeep copyWith(void Function(BarKeep) updates) =>
-      super.copyWith((message) => updates(message as BarKeep))
-          as BarKeep; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as BarKeep)) as BarKeep;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static BarKeep create() => BarKeep._();
+  @$core.override
   BarKeep createEmptyInstance() => create();
-  static $pb.PbList<BarKeep> createRepeated() => $pb.PbList<BarKeep>();
   @$core.pragma('dart2js:noInline')
   static BarKeep getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<BarKeep>(create);
@@ -228,66 +202,53 @@
   @$pb.TagNumber(1)
   $core.int get aKeep => $_getIZ(0);
   @$pb.TagNumber(1)
-  set aKeep($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set aKeep($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasAKeep() => $_has(0);
   @$pb.TagNumber(1)
-  void clearAKeep() => clearField(1);
+  void clearAKeep() => $_clearField(1);
 
   @$pb.TagNumber(2)
   $core.int get bDrop => $_getIZ(1);
   @$pb.TagNumber(2)
-  set bDrop($core.int v) {
-    $_setSignedInt32(1, v);
-  }
-
+  set bDrop($core.int value) => $_setSignedInt32(1, value);
   @$pb.TagNumber(2)
   $core.bool hasBDrop() => $_has(1);
   @$pb.TagNumber(2)
-  void clearBDrop() => clearField(2);
+  void clearBDrop() => $_clearField(2);
 }
 
 class HasKeep extends $pb.GeneratedMessage {
+  factory HasKeep() => create();
+
+  HasKeep._();
+
+  factory HasKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory HasKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'HasKeep',
+      _omitMessageNames ? '' : 'HasKeep',
       createEmptyInstance: create)
-    ..a<$core.int>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'aDrop',
-        $pb.PbFieldType.O3,
-        protoName: 'aDrop')
+    ..aI(1, _omitFieldNames ? '' : 'aDrop', protoName: 'aDrop')
     ..hasRequiredFields = false;
 
-  HasKeep._() : super();
-  factory HasKeep() => create();
-  factory HasKeep.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory HasKeep.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  HasKeep clone() => HasKeep()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  HasKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   HasKeep copyWith(void Function(HasKeep) updates) =>
-      super.copyWith((message) => updates(message as HasKeep))
-          as HasKeep; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as HasKeep)) as HasKeep;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static HasKeep create() => HasKeep._();
+  @$core.override
   HasKeep createEmptyInstance() => create();
-  static $pb.PbList<HasKeep> createRepeated() => $pb.PbList<HasKeep>();
   @$core.pragma('dart2js:noInline')
   static HasKeep getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<HasKeep>(create);
@@ -296,54 +257,44 @@
   @$pb.TagNumber(1)
   $core.int get aDrop => $_getIZ(0);
   @$pb.TagNumber(1)
-  set aDrop($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set aDrop($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasADrop() => $_has(0);
   @$pb.TagNumber(1)
-  void clearADrop() => clearField(1);
+  void clearADrop() => $_clearField(1);
 }
 
 class ClearKeep extends $pb.GeneratedMessage {
+  factory ClearKeep() => create();
+
+  ClearKeep._();
+
+  factory ClearKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ClearKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ClearKeep',
+      _omitMessageNames ? '' : 'ClearKeep',
       createEmptyInstance: create)
-    ..a<$core.int>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'aDrop',
-        $pb.PbFieldType.O3,
-        protoName: 'aDrop')
+    ..aI(1, _omitFieldNames ? '' : 'aDrop', protoName: 'aDrop')
     ..hasRequiredFields = false;
 
-  ClearKeep._() : super();
-  factory ClearKeep() => create();
-  factory ClearKeep.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ClearKeep.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ClearKeep clone() => ClearKeep()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ClearKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ClearKeep copyWith(void Function(ClearKeep) updates) =>
-      super.copyWith((message) => updates(message as ClearKeep))
-          as ClearKeep; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as ClearKeep)) as ClearKeep;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ClearKeep create() => ClearKeep._();
+  @$core.override
   ClearKeep createEmptyInstance() => create();
-  static $pb.PbList<ClearKeep> createRepeated() => $pb.PbList<ClearKeep>();
   @$core.pragma('dart2js:noInline')
   static ClearKeep getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ClearKeep>(create);
@@ -352,54 +303,44 @@
   @$pb.TagNumber(1)
   $core.int get aDrop => $_getIZ(0);
   @$pb.TagNumber(1)
-  set aDrop($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set aDrop($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasADrop() => $_has(0);
   @$pb.TagNumber(1)
-  void clearADrop() => clearField(1);
+  void clearADrop() => $_clearField(1);
 }
 
 class ZopDrop extends $pb.GeneratedMessage {
+  factory ZopDrop() => create();
+
+  ZopDrop._();
+
+  factory ZopDrop.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ZopDrop.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'ZopDrop',
+      _omitMessageNames ? '' : 'ZopDrop',
       createEmptyInstance: create)
-    ..a<$core.int>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'aDrop',
-        $pb.PbFieldType.O3,
-        protoName: 'aDrop')
+    ..aI(1, _omitFieldNames ? '' : 'aDrop', protoName: 'aDrop')
     ..hasRequiredFields = false;
 
-  ZopDrop._() : super();
-  factory ZopDrop() => create();
-  factory ZopDrop.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ZopDrop.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ZopDrop clone() => ZopDrop()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ZopDrop clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ZopDrop copyWith(void Function(ZopDrop) updates) =>
-      super.copyWith((message) => updates(message as ZopDrop))
-          as ZopDrop; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as ZopDrop)) as ZopDrop;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static ZopDrop create() => ZopDrop._();
+  @$core.override
   ZopDrop createEmptyInstance() => create();
-  static $pb.PbList<ZopDrop> createRepeated() => $pb.PbList<ZopDrop>();
   @$core.pragma('dart2js:noInline')
   static ZopDrop getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<ZopDrop>(create);
@@ -408,54 +349,44 @@
   @$pb.TagNumber(1)
   $core.int get aDrop => $_getIZ(0);
   @$pb.TagNumber(1)
-  set aDrop($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set aDrop($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasADrop() => $_has(0);
   @$pb.TagNumber(1)
-  void clearADrop() => clearField(1);
+  void clearADrop() => $_clearField(1);
 }
 
 class MobDrop extends $pb.GeneratedMessage {
+  factory MobDrop() => create();
+
+  MobDrop._();
+
+  factory MobDrop.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory MobDrop.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'MobDrop',
+      _omitMessageNames ? '' : 'MobDrop',
       createEmptyInstance: create)
-    ..a<$core.int>(
-        1,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'aDrop',
-        $pb.PbFieldType.O3,
-        protoName: 'aDrop')
+    ..aI(1, _omitFieldNames ? '' : 'aDrop', protoName: 'aDrop')
     ..hasRequiredFields = false;
 
-  MobDrop._() : super();
-  factory MobDrop() => create();
-  factory MobDrop.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory MobDrop.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  MobDrop clone() => MobDrop()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  MobDrop clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   MobDrop copyWith(void Function(MobDrop) updates) =>
-      super.copyWith((message) => updates(message as MobDrop))
-          as MobDrop; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as MobDrop)) as MobDrop;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static MobDrop create() => MobDrop._();
+  @$core.override
   MobDrop createEmptyInstance() => create();
-  static $pb.PbList<MobDrop> createRepeated() => $pb.PbList<MobDrop>();
   @$core.pragma('dart2js:noInline')
   static MobDrop getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MobDrop>(create);
@@ -464,12 +395,116 @@
   @$pb.TagNumber(1)
   $core.int get aDrop => $_getIZ(0);
   @$pb.TagNumber(1)
-  set aDrop($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set aDrop($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasADrop() => $_has(0);
   @$pb.TagNumber(1)
-  void clearADrop() => clearField(1);
+  void clearADrop() => $_clearField(1);
 }
+
+class MixinKeep extends $pb.GeneratedMessage with $mixin.MyMixin {
+  factory MixinKeep() => create();
+
+  MixinKeep._();
+
+  factory MixinKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory MixinKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'MixinKeep',
+      createEmptyInstance: create)
+    ..aI(1, _omitFieldNames ? '' : 'aKeep', protoName: 'aKeep')
+    ..aI(2, _omitFieldNames ? '' : 'bDrop', protoName: 'bDrop')
+    ..hasRequiredFields = false;
+
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  MixinKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  MixinKeep copyWith(void Function(MixinKeep) updates) =>
+      super.copyWith((message) => updates(message as MixinKeep)) as MixinKeep;
+
+  @$core.override
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static MixinKeep create() => MixinKeep._();
+  @$core.override
+  MixinKeep createEmptyInstance() => create();
+  @$core.pragma('dart2js:noInline')
+  static MixinKeep getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MixinKeep>(create);
+  static MixinKeep? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get aKeep => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set aKeep($core.int value) => $_setSignedInt32(0, value);
+  @$pb.TagNumber(1)
+  $core.bool hasAKeep() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearAKeep() => $_clearField(1);
+
+  @$pb.TagNumber(2)
+  $core.int get bDrop => $_getIZ(1);
+  @$pb.TagNumber(2)
+  set bDrop($core.int value) => $_setSignedInt32(1, value);
+  @$pb.TagNumber(2)
+  $core.bool hasBDrop() => $_has(1);
+  @$pb.TagNumber(2)
+  void clearBDrop() => $_clearField(2);
+}
+
+class MixinDrop extends $pb.GeneratedMessage with $mixin.MyMixin {
+  factory MixinDrop() => create();
+
+  MixinDrop._();
+
+  factory MixinDrop.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory MixinDrop.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
+  static final $pb.BuilderInfo _i = $pb.BuilderInfo(
+      _omitMessageNames ? '' : 'MixinDrop',
+      createEmptyInstance: create)
+    ..aI(1, _omitFieldNames ? '' : 'aDrop', protoName: 'aDrop')
+    ..hasRequiredFields = false;
+
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  MixinDrop clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  MixinDrop copyWith(void Function(MixinDrop) updates) =>
+      super.copyWith((message) => updates(message as MixinDrop)) as MixinDrop;
+
+  @$core.override
+  $pb.BuilderInfo get info_ => _i;
+
+  @$core.pragma('dart2js:noInline')
+  static MixinDrop create() => MixinDrop._();
+  @$core.override
+  MixinDrop createEmptyInstance() => create();
+  @$core.pragma('dart2js:noInline')
+  static MixinDrop getDefault() =>
+      _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<MixinDrop>(create);
+  static MixinDrop? _defaultInstance;
+
+  @$pb.TagNumber(1)
+  $core.int get aDrop => $_getIZ(0);
+  @$pb.TagNumber(1)
+  set aDrop($core.int value) => $_setSignedInt32(0, value);
+  @$pb.TagNumber(1)
+  $core.bool hasADrop() => $_has(0);
+  @$pb.TagNumber(1)
+  void clearADrop() => $_clearField(1);
+}
+
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
+    $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart
index c42141a..31170b6 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/generated/name_mangling.pb.dart
@@ -1,45 +1,51 @@
-///
-//  Generated code. Do not modify.
-//  source: name_mangling.proto
+// This is a generated file - do not edit.
 //
-// @dart = 2.12
-// ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
+// Generated from name_mangling.proto.
+
+// @dart = 3.3
+
+// ignore_for_file: annotate_overrides, camel_case_types, comment_references
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
+export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
+
 class AKeep extends $pb.GeneratedMessage {
+  factory AKeep() => create();
+
+  AKeep._();
+
+  factory AKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory AKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'AKeep',
+      _omitMessageNames ? '' : 'AKeep',
       createEmptyInstance: create)
     ..hasRequiredFields = false;
 
-  AKeep._() : super();
-  factory AKeep() => create();
-  factory AKeep.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory AKeep.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  AKeep clone() => AKeep()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  AKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   AKeep copyWith(void Function(AKeep) updates) =>
-      super.copyWith((message) => updates(message as AKeep))
-          as AKeep; // ignore: deprecated_member_use
+      super.copyWith((message) => updates(message as AKeep)) as AKeep;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static AKeep create() => AKeep._();
+  @$core.override
   AKeep createEmptyInstance() => create();
-  static $pb.PbList<AKeep> createRepeated() => $pb.PbList<AKeep>();
   @$core.pragma('dart2js:noInline')
   static AKeep getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<AKeep>(create);
@@ -47,59 +53,58 @@
 }
 
 class NameManglingKeep extends $pb.GeneratedMessage {
+  factory NameManglingKeep() => create();
+
+  NameManglingKeep._();
+
+  factory NameManglingKeep.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory NameManglingKeep.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
+
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
-      const $core.bool.fromEnvironment('protobuf.omit_message_names')
-          ? ''
-          : 'NameManglingKeep',
+      _omitMessageNames ? '' : 'NameManglingKeep',
       createEmptyInstance: create)
-    ..aOM<AKeep>(
-        10,
-        const $core.bool.fromEnvironment('protobuf.omit_field_names')
-            ? ''
-            : 'clone',
-        subBuilder: AKeep.create)
+    ..aOM<AKeep>(10, _omitFieldNames ? '' : 'clone', subBuilder: AKeep.create)
     ..hasRequiredFields = false;
 
-  NameManglingKeep._() : super();
-  factory NameManglingKeep() => create();
-  factory NameManglingKeep.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory NameManglingKeep.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  NameManglingKeep clone() => NameManglingKeep()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  NameManglingKeep clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   NameManglingKeep copyWith(void Function(NameManglingKeep) updates) =>
       super.copyWith((message) => updates(message as NameManglingKeep))
-          as NameManglingKeep; // ignore: deprecated_member_use
+          as NameManglingKeep;
+
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
+
   @$core.pragma('dart2js:noInline')
   static NameManglingKeep create() => NameManglingKeep._();
+  @$core.override
   NameManglingKeep createEmptyInstance() => create();
-  static $pb.PbList<NameManglingKeep> createRepeated() =>
-      $pb.PbList<NameManglingKeep>();
   @$core.pragma('dart2js:noInline')
   static NameManglingKeep getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<NameManglingKeep>(create);
   static NameManglingKeep? _defaultInstance;
 
+  /// the name `clone` is mangled by the protoc_plugin to not conflict with
+  /// `GeneratedMessage.clone`.
+  /// Still we should be able to detect usages of this field.
   @$pb.TagNumber(10)
   AKeep get clone_10 => $_getN(0);
   @$pb.TagNumber(10)
-  set clone_10(AKeep v) {
-    setField(10, v);
-  }
-
+  set clone_10(AKeep value) => $_setField(10, value);
   @$pb.TagNumber(10)
   $core.bool hasClone_10() => $_has(0);
   @$pb.TagNumber(10)
-  void clearClone_10() => clearField(10);
+  void clearClone_10() => $_clearField(10);
   @$pb.TagNumber(10)
   AKeep ensureClone_10() => $_ensure(0);
 }
+
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
+    $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart
new file mode 100644
index 0000000..8e783b1
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/mixins.lib.dart
@@ -0,0 +1,3 @@
+mixin MyMixin {
+  final mixinField = 42;
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
index 3a02a7a..47fd645 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/name_mangling_test.dart.expect
@@ -17,6 +17,8 @@
 import self as self;
 import "package:protobuf/src/protobuf/internal.dart" as int;
 import "dart:core" as core;
+import "package:protobuf/src/protobuf/annotations.dart" as ann;
+additionalExports = (int::GeneratedMessageGenericExtensions)
 
 import "dart:core" as $core;
 import "package:protobuf/src/protobuf/internal.dart";
@@ -53,9 +55,9 @@
     ;
 
   [@vm.inferred-return-type.metadata=name_mangling.pb.dart::NameManglingKeep]
-  static factory fromBuffer([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::NameManglingKeep
+  static factory fromBuffer([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> data) → self::NameManglingKeep
     return let final self::NameManglingKeep #t4 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create() in block {
-      [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [int::ExtensionRegistry]) → void};
+      [@vm.direct-call.metadata=library package:protobuf/src/protobuf/internal.dart::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=? (skip check)] #t4.{int::GeneratedMessage::mergeFromBuffer}(data){(core::List<core::int>, [int::ExtensionRegistry]) → void};
     } =>#t4;
 
   [@vm.inferred-return-type.metadata=library package:protobuf/src/protobuf/internal.dart::BuilderInfo]
@@ -82,5 +84,5 @@
   #C5 = core::pragma {name:#C3, options:#C4}
   #C6 = static-tearoff self::NameManglingKeep::create
   #C7 = 10
-  #C8 = int::TagNumber {tagNumber:#C7}
+  #C8 = ann::TagNumber {tagNumber:#C7}
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/dart_options.proto b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/dart_options.proto
new file mode 100644
index 0000000..cabf840
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/dart_options.proto
@@ -0,0 +1,41 @@
+// Experimental options controlling Dart code generation.
+syntax = "proto2";
+
+package dart_options;
+
+import "google/protobuf/descriptor.proto";
+
+// A mixin that can be used in the 'with' clause of the generated Dart class
+// for a proto message.
+message DartMixin {
+  // The name of the mixin class.
+  optional string name = 1;
+
+  // A URI pointing to the Dart library that defines the mixin.
+  // The generated Dart code will use this in an import statement.
+  optional string import_from = 2;
+}
+
+// Defines additional Dart imports to be used with messages in this file.
+message Imports {
+  // Mixins to be used on messages in this file.
+  // These mixins are in addition to internally defined mixins (e.g PbMapMixin)
+  // and may override them.
+  //
+  // Warning: mixins are experimental. The protoc Dart plugin doesn't check
+  // for name conflicts between mixin class members and generated class members,
+  // so the generated code may contain errors. Therefore, running dartanalyzer
+  // on the generated file is a good idea.
+  repeated DartMixin mixins = 1;
+}
+
+extend google.protobuf.FileOptions {
+  optional Imports imports = 28125061;
+}
+
+extend google.protobuf.MessageOptions {
+  // Applies the named mixin.
+  // For now, "PbMapMixin" is the only available mixin.
+  // The empty string can be used to turn off mixins for this message.
+  optional string mixin = 96128839;
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/foo.proto b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/foo.proto
index 1f10872..1fe1be8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/foo.proto
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/foo.proto
@@ -4,6 +4,13 @@
 
 syntax = "proto3";
 
+import "dart_options.proto";
+
+option (dart_options.imports) = {
+  mixins: [ { name: "MyMixin" import_from: "../mixins.lib.dart" } ];
+}
+;
+
 message FooKeep {
   BarKeep barKeep = 1;
   BarKeep barDrop = 2;
@@ -12,6 +19,8 @@
   int32 aKeep = 5;
   HasKeep hasKeep = 6;
   ClearKeep clearKeep = 7;
+  MixinKeep mixinKeep = 8;
+  MixinDrop mixinDrop = 9;
 }
 
 message BarKeep {
@@ -34,3 +43,16 @@
 message MobDrop {
   int32 aDrop = 1;
 }
+
+message MixinKeep {
+  option (dart_options.mixin) = "MyMixin";
+
+  int32 aKeep = 1;
+  int32 bDrop = 2;
+}
+
+message MixinDrop {
+  option (dart_options.mixin) = "MyMixin";
+
+  int32 aDrop = 1;
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/google/protobuf/descriptor.proto b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/google/protobuf/descriptor.proto
new file mode 100644
index 0000000..5839e38
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/protos/google/protobuf/descriptor.proto
@@ -0,0 +1,1422 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// https://developers.google.com/protocol-buffers/
+//
+// 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.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// The messages in this file describe the definitions found in .proto files.
+// A valid .proto file can be translated directly to a FileDescriptorProto
+// without any other information (e.g. without reading its imports).
+
+syntax = "proto2";
+
+package google.protobuf;
+
+option go_package = "google.golang.org/protobuf/types/descriptorpb";
+option java_package = "com.google.protobuf";
+option java_outer_classname = "DescriptorProtos";
+option csharp_namespace = "Google.Protobuf.Reflection";
+option objc_class_prefix = "GPB";
+option cc_enable_arenas = true;
+
+// descriptor.proto must be optimized for speed because reflection-based
+// algorithms don't work during bootstrapping.
+option optimize_for = SPEED;
+
+// The protocol compiler can output a FileDescriptorSet containing the .proto
+// files it parses.
+message FileDescriptorSet {
+  repeated FileDescriptorProto file = 1;
+
+  // Extensions for tooling.
+  extensions 536000000 [declaration = {
+    number: 536000000
+    type: ".buf.descriptor.v1.FileDescriptorSetExtension"
+    full_name: ".buf.descriptor.v1.buf_file_descriptor_set_extension"
+  }];
+}
+
+// The full set of known editions.
+enum Edition {
+  // A placeholder for an unknown edition value.
+  EDITION_UNKNOWN = 0;
+
+  // A placeholder edition for specifying default behaviors *before* a feature
+  // was first introduced.  This is effectively an "infinite past".
+  EDITION_LEGACY = 900;
+
+  // Legacy syntax "editions".  These pre-date editions, but behave much like
+  // distinct editions.  These can't be used to specify the edition of proto
+  // files, but feature definitions must supply proto2/proto3 defaults for
+  // backwards compatibility.
+  EDITION_PROTO2 = 998;
+  EDITION_PROTO3 = 999;
+
+  // Editions that have been released.  The specific values are arbitrary and
+  // should not be depended on, but they will always be time-ordered for easy
+  // comparison.
+  EDITION_2023 = 1000;
+  EDITION_2024 = 1001;
+
+  // Placeholder editions for testing feature resolution.  These should not be
+  // used or relied on outside of tests.
+  EDITION_1_TEST_ONLY = 1;
+  EDITION_2_TEST_ONLY = 2;
+  EDITION_99997_TEST_ONLY = 99997;
+  EDITION_99998_TEST_ONLY = 99998;
+  EDITION_99999_TEST_ONLY = 99999;
+
+  // Placeholder for specifying unbounded edition support.  This should only
+  // ever be used by plugins that can expect to never require any changes to
+  // support a new edition.
+  EDITION_MAX = 0x7FFFFFFF;
+}
+
+// Describes a complete .proto file.
+message FileDescriptorProto {
+  optional string name = 1;     // file name, relative to root of source tree
+  optional string package = 2;  // e.g. "foo", "foo.bar", etc.
+
+  // Names of files imported by this file.
+  repeated string dependency = 3;
+  // Indexes of the public imported files in the dependency list above.
+  repeated int32 public_dependency = 10;
+  // Indexes of the weak imported files in the dependency list.
+  // For Google-internal migration only. Do not use.
+  repeated int32 weak_dependency = 11;
+
+  // Names of files imported by this file purely for the purpose of providing
+  // option extensions. These are excluded from the dependency list above.
+  repeated string option_dependency = 15;
+
+  // All top-level definitions in this file.
+  repeated DescriptorProto message_type = 4;
+  repeated EnumDescriptorProto enum_type = 5;
+  repeated ServiceDescriptorProto service = 6;
+  repeated FieldDescriptorProto extension = 7;
+
+  optional FileOptions options = 8;
+
+  // This field contains optional information about the original source code.
+  // You may safely remove this entire field without harming runtime
+  // functionality of the descriptors -- the information is needed only by
+  // development tools.
+  optional SourceCodeInfo source_code_info = 9;
+
+  // The syntax of the proto file.
+  // The supported values are "proto2", "proto3", and "editions".
+  //
+  // If `edition` is present, this value must be "editions".
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional string syntax = 12;
+
+  // The edition of the proto file.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional Edition edition = 14;
+}
+
+// Describes a message type.
+message DescriptorProto {
+  optional string name = 1;
+
+  repeated FieldDescriptorProto field = 2;
+  repeated FieldDescriptorProto extension = 6;
+
+  repeated DescriptorProto nested_type = 3;
+  repeated EnumDescriptorProto enum_type = 4;
+
+  message ExtensionRange {
+    optional int32 start = 1;  // Inclusive.
+    optional int32 end = 2;    // Exclusive.
+
+    optional ExtensionRangeOptions options = 3;
+  }
+  repeated ExtensionRange extension_range = 5;
+
+  repeated OneofDescriptorProto oneof_decl = 8;
+
+  optional MessageOptions options = 7;
+
+  // Range of reserved tag numbers. Reserved tag numbers may not be used by
+  // fields or extension ranges in the same message. Reserved ranges may
+  // not overlap.
+  message ReservedRange {
+    optional int32 start = 1;  // Inclusive.
+    optional int32 end = 2;    // Exclusive.
+  }
+  repeated ReservedRange reserved_range = 9;
+  // Reserved field names, which may not be used by fields in the same message.
+  // A given name may only be reserved once.
+  repeated string reserved_name = 10;
+
+  // Support for `export` and `local` keywords on enums.
+  optional SymbolVisibility visibility = 11;
+}
+
+message ExtensionRangeOptions {
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  message Declaration {
+    // The extension number declared within the extension range.
+    optional int32 number = 1;
+
+    // The fully-qualified name of the extension field. There must be a leading
+    // dot in front of the full name.
+    optional string full_name = 2;
+
+    // The fully-qualified type name of the extension field. Unlike
+    // Metadata.type, Declaration.type must have a leading dot for messages
+    // and enums.
+    optional string type = 3;
+
+    // If true, indicates that the number is reserved in the extension range,
+    // and any extension field with the number will fail to compile. Set this
+    // when a declared extension field is deleted.
+    optional bool reserved = 5;
+
+    // If true, indicates that the extension must be defined as repeated.
+    // Otherwise the extension must be defined as optional.
+    optional bool repeated = 6;
+
+    reserved 4;  // removed is_repeated
+  }
+
+  // For external users: DO NOT USE. We are in the process of open sourcing
+  // extension declaration and executing internal cleanups before it can be
+  // used externally.
+  repeated Declaration declaration = 2 [retention = RETENTION_SOURCE];
+
+  // Any features defined in the specific edition.
+  optional FeatureSet features = 50;
+
+  // The verification state of the extension range.
+  enum VerificationState {
+    // All the extensions of the range must be declared.
+    DECLARATION = 0;
+    UNVERIFIED = 1;
+  }
+
+  // The verification state of the range.
+  // TODO: flip the default to DECLARATION once all empty ranges
+  // are marked as UNVERIFIED.
+  optional VerificationState verification = 3
+      [default = UNVERIFIED, retention = RETENTION_SOURCE];
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+// Describes a field within a message.
+message FieldDescriptorProto {
+  enum Type {
+    // 0 is reserved for errors.
+    // Order is weird for historical reasons.
+    TYPE_DOUBLE = 1;
+    TYPE_FLOAT = 2;
+    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
+    // negative values are likely.
+    TYPE_INT64 = 3;
+    TYPE_UINT64 = 4;
+    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
+    // negative values are likely.
+    TYPE_INT32 = 5;
+    TYPE_FIXED64 = 6;
+    TYPE_FIXED32 = 7;
+    TYPE_BOOL = 8;
+    TYPE_STRING = 9;
+    // Tag-delimited aggregate.
+    // Group type is deprecated and not supported after google.protobuf. However, Proto3
+    // implementations should still be able to parse the group wire format and
+    // treat group fields as unknown fields.  In Editions, the group wire format
+    // can be enabled via the `message_encoding` feature.
+    TYPE_GROUP = 10;
+    TYPE_MESSAGE = 11;  // Length-delimited aggregate.
+
+    // New in version 2.
+    TYPE_BYTES = 12;
+    TYPE_UINT32 = 13;
+    TYPE_ENUM = 14;
+    TYPE_SFIXED32 = 15;
+    TYPE_SFIXED64 = 16;
+    TYPE_SINT32 = 17;  // Uses ZigZag encoding.
+    TYPE_SINT64 = 18;  // Uses ZigZag encoding.
+  }
+
+  enum Label {
+    // 0 is reserved for errors
+    LABEL_OPTIONAL = 1;
+    LABEL_REPEATED = 3;
+    // The required label is only allowed in google.protobuf.  In proto3 and Editions
+    // it's explicitly prohibited.  In Editions, the `field_presence` feature
+    // can be used to get this behavior.
+    LABEL_REQUIRED = 2;
+  }
+
+  optional string name = 1;
+  optional int32 number = 3;
+  optional Label label = 4;
+
+  // If type_name is set, this need not be set.  If both this and type_name
+  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
+  optional Type type = 5;
+
+  // For message and enum types, this is the name of the type.  If the name
+  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+  // rules are used to find the type (i.e. first the nested types within this
+  // message are searched, then within the parent, on up to the root
+  // namespace).
+  optional string type_name = 6;
+
+  // For extensions, this is the name of the type being extended.  It is
+  // resolved in the same manner as type_name.
+  optional string extendee = 2;
+
+  // For numeric types, contains the original text representation of the value.
+  // For booleans, "true" or "false".
+  // For strings, contains the default text contents (not escaped in any way).
+  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+  optional string default_value = 7;
+
+  // If set, gives the index of a oneof in the containing type's oneof_decl
+  // list.  This field is a member of that oneof.
+  optional int32 oneof_index = 9;
+
+  // JSON name of this field. The value is set by protocol compiler. If the
+  // user has set a "json_name" option on this field, that option's value
+  // will be used. Otherwise, it's deduced from the field's name by converting
+  // it to camelCase.
+  optional string json_name = 10;
+
+  optional FieldOptions options = 8;
+
+  // If true, this is a proto3 "optional". When a proto3 field is optional, it
+  // tracks presence regardless of field type.
+  //
+  // When proto3_optional is true, this field must belong to a oneof to signal
+  // to old proto3 clients that presence is tracked for this field. This oneof
+  // is known as a "synthetic" oneof, and this field must be its sole member
+  // (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs
+  // exist in the descriptor only, and do not generate any API. Synthetic oneofs
+  // must be ordered after all "real" oneofs.
+  //
+  // For message fields, proto3_optional doesn't create any semantic change,
+  // since non-repeated message fields always track presence. However it still
+  // indicates the semantic detail of whether the user wrote "optional" or not.
+  // This can be useful for round-tripping the .proto file. For consistency we
+  // give message fields a synthetic oneof also, even though it is not required
+  // to track presence. This is especially important because the parser can't
+  // tell if a field is a message or an enum, so it must always create a
+  // synthetic oneof.
+  //
+  // Proto2 optional fields do not set this flag, because they already indicate
+  // optional with `LABEL_OPTIONAL`.
+  optional bool proto3_optional = 17;
+}
+
+// Describes a oneof.
+message OneofDescriptorProto {
+  optional string name = 1;
+  optional OneofOptions options = 2;
+}
+
+// Describes an enum type.
+message EnumDescriptorProto {
+  optional string name = 1;
+
+  repeated EnumValueDescriptorProto value = 2;
+
+  optional EnumOptions options = 3;
+
+  // Range of reserved numeric values. Reserved values may not be used by
+  // entries in the same enum. Reserved ranges may not overlap.
+  //
+  // Note that this is distinct from DescriptorProto.ReservedRange in that it
+  // is inclusive such that it can appropriately represent the entire int32
+  // domain.
+  message EnumReservedRange {
+    optional int32 start = 1;  // Inclusive.
+    optional int32 end = 2;    // Inclusive.
+  }
+
+  // Range of reserved numeric values. Reserved numeric values may not be used
+  // by enum values in the same enum declaration. Reserved ranges may not
+  // overlap.
+  repeated EnumReservedRange reserved_range = 4;
+
+  // Reserved enum value names, which may not be reused. A given name may only
+  // be reserved once.
+  repeated string reserved_name = 5;
+
+  // Support for `export` and `local` keywords on enums.
+  optional SymbolVisibility visibility = 6;
+}
+
+// Describes a value within an enum.
+message EnumValueDescriptorProto {
+  optional string name = 1;
+  optional int32 number = 2;
+
+  optional EnumValueOptions options = 3;
+}
+
+// Describes a service.
+message ServiceDescriptorProto {
+  optional string name = 1;
+  repeated MethodDescriptorProto method = 2;
+
+  optional ServiceOptions options = 3;
+
+  reserved 4;
+  reserved "stream";
+}
+
+// Describes a method of a service.
+message MethodDescriptorProto {
+  optional string name = 1;
+
+  // Input and output type names.  These are resolved in the same way as
+  // FieldDescriptorProto.type_name, but must refer to a message type.
+  optional string input_type = 2;
+  optional string output_type = 3;
+
+  optional MethodOptions options = 4;
+
+  // Identifies if client streams multiple client messages
+  optional bool client_streaming = 5 [default = false];
+  // Identifies if server streams multiple server messages
+  optional bool server_streaming = 6 [default = false];
+}
+
+// ===================================================================
+// Options
+
+// Each of the definitions above may have "options" attached.  These are
+// just annotations which may cause code to be generated slightly differently
+// or may contain hints for code that manipulates protocol messages.
+//
+// Clients may define custom options as extensions of the *Options messages.
+// These extensions may not yet be known at parsing time, so the parser cannot
+// store the values in them.  Instead it stores them in a field in the *Options
+// message called uninterpreted_option. This field must have the same name
+// across all *Options messages. We then use this field to populate the
+// extensions when we build a descriptor, at which point all protos have been
+// parsed and so all extensions are known.
+//
+// Extension numbers for custom options may be chosen as follows:
+// * For options which will only be used within a single application or
+//   organization, or for experimental options, use field numbers 50000
+//   through 99999.  It is up to you to ensure that you do not use the
+//   same number for multiple options.
+// * For options which will be published and used publicly by multiple
+//   independent entities, e-mail protobuf-global-extension-registry@google.com
+//   to reserve extension numbers. Simply provide your project name (e.g.
+//   Objective-C plugin) and your project website (if available) -- there's no
+//   need to explain how you intend to use them. Usually you only need one
+//   extension number. You can declare multiple options with only one extension
+//   number by putting them in a sub-message. See the Custom Options section of
+//   the docs for examples:
+//   https://developers.google.com/protocol-buffers/docs/proto#options
+//   If this turns out to be popular, a web service will be set up
+//   to automatically assign option numbers.
+
+message FileOptions {
+  // Sets the Java package where classes generated from this .proto will be
+  // placed.  By default, the proto package is used, but this is often
+  // inappropriate because proto packages do not normally start with backwards
+  // domain names.
+  optional string java_package = 1;
+
+  // Controls the name of the wrapper Java class generated for the .proto file.
+  // That class will always contain the .proto file's getDescriptor() method as
+  // well as any top-level extensions defined in the .proto file.
+  // If java_multiple_files is disabled, then all the other classes from the
+  // .proto file will be nested inside the single wrapper outer class.
+  optional string java_outer_classname = 8;
+
+  // If enabled, then the Java code generator will generate a separate .java
+  // file for each top-level message, enum, and service defined in the .proto
+  // file.  Thus, these types will *not* be nested inside the wrapper class
+  // named by java_outer_classname.  However, the wrapper class will still be
+  // generated to contain the file's getDescriptor() method as well as any
+  // top-level extensions defined in the file.
+  optional bool java_multiple_files = 10 [default = false];
+
+  // This option does nothing.
+  optional bool java_generate_equals_and_hash = 20 [deprecated = true];
+
+  // A proto2 file can set this to true to opt in to UTF-8 checking for Java,
+  // which will throw an exception if invalid UTF-8 is parsed from the wire or
+  // assigned to a string field.
+  //
+  // TODO: clarify exactly what kinds of field types this option
+  // applies to, and update these docs accordingly.
+  //
+  // Proto3 files already perform these checks. Setting the option explicitly to
+  // false has no effect: it cannot be used to opt proto3 files out of UTF-8
+  // checks.
+  optional bool java_string_check_utf8 = 27 [default = false];
+
+  // Generated classes can be optimized for speed or code size.
+  enum OptimizeMode {
+    SPEED = 1;         // Generate complete code for parsing, serialization,
+                       // etc.
+    CODE_SIZE = 2;     // Use ReflectionOps to implement these methods.
+    LITE_RUNTIME = 3;  // Generate code using MessageLite and the lite runtime.
+  }
+  optional OptimizeMode optimize_for = 9 [default = SPEED];
+
+  // Sets the Go package where structs generated from this .proto will be
+  // placed. If omitted, the Go package will be derived from the following:
+  //   - The basename of the package import path, if provided.
+  //   - Otherwise, the package statement in the .proto file, if present.
+  //   - Otherwise, the basename of the .proto file, without extension.
+  optional string go_package = 11;
+
+  // Should generic services be generated in each language?  "Generic" services
+  // are not specific to any particular RPC system.  They are generated by the
+  // main code generators in each language (without additional plugins).
+  // Generic services were the only kind of service generation supported by
+  // early versions of google.protobuf.
+  //
+  // Generic services are now considered deprecated in favor of using plugins
+  // that generate code specific to your particular RPC system.  Therefore,
+  // these default to false.  Old code which depends on generic services should
+  // explicitly set them to true.
+  optional bool cc_generic_services = 16 [default = false];
+  optional bool java_generic_services = 17 [default = false];
+  optional bool py_generic_services = 18 [default = false];
+  reserved 42;  // removed php_generic_services
+  reserved "php_generic_services";
+
+  // Is this file deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for everything in the file, or it will be completely ignored; in the very
+  // least, this is a formalization for deprecating files.
+  optional bool deprecated = 23 [default = false];
+
+  // Enables the use of arenas for the proto messages in this file. This applies
+  // only to generated classes for C++.
+  optional bool cc_enable_arenas = 31 [default = true];
+
+  // Sets the objective c class prefix which is prepended to all objective c
+  // generated classes from this .proto. There is no default.
+  optional string objc_class_prefix = 36;
+
+  // Namespace for generated classes; defaults to the package.
+  optional string csharp_namespace = 37;
+
+  // By default Swift generators will take the proto package and CamelCase it
+  // replacing '.' with underscore and use that to prefix the types/symbols
+  // defined. When this options is provided, they will use this value instead
+  // to prefix the types/symbols defined.
+  optional string swift_prefix = 39;
+
+  // Sets the php class prefix which is prepended to all php generated classes
+  // from this .proto. Default is empty.
+  optional string php_class_prefix = 40;
+
+  // Use this option to change the namespace of php generated classes. Default
+  // is empty. When this option is empty, the package name will be used for
+  // determining the namespace.
+  optional string php_namespace = 41;
+
+  // Use this option to change the namespace of php generated metadata classes.
+  // Default is empty. When this option is empty, the proto file name will be
+  // used for determining the namespace.
+  optional string php_metadata_namespace = 44;
+
+  // Use this option to change the package of ruby generated classes. Default
+  // is empty. When this option is not set, the package name will be used for
+  // determining the ruby package.
+  optional string ruby_package = 45;
+
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 50;
+
+  // The parser stores options it doesn't recognize here.
+  // See the documentation for the "Options" section above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message.
+  // See the documentation for the "Options" section above.
+  extensions 1000 to max;
+
+  reserved 38;
+}
+
+message MessageOptions {
+  // Set true to use the old proto1 MessageSet wire format for extensions.
+  // This is provided for backwards-compatibility with the MessageSet wire
+  // format.  You should not use this for any other reason:  It's less
+  // efficient, has fewer features, and is more complicated.
+  //
+  // The message must be defined exactly as follows:
+  //   message Foo {
+  //     option message_set_wire_format = true;
+  //     extensions 4 to max;
+  //   }
+  // Note that the message cannot have any defined fields; MessageSets only
+  // have extensions.
+  //
+  // All extensions of your type must be singular messages; e.g. they cannot
+  // be int32s, enums, or repeated messages.
+  //
+  // Because this is an option, the above two restrictions are not enforced by
+  // the protocol compiler.
+  optional bool message_set_wire_format = 1 [default = false];
+
+  // Disables the generation of the standard "descriptor()" accessor, which can
+  // conflict with a field of the same name.  This is meant to make migration
+  // from proto1 easier; new code should avoid fields named "descriptor".
+  optional bool no_standard_descriptor_accessor = 2 [default = false];
+
+  // Is this message deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the message, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating messages.
+  optional bool deprecated = 3 [default = false];
+
+  reserved 4, 5, 6;
+
+  // Whether the message is an automatically generated map entry type for the
+  // maps field.
+  //
+  // For maps fields:
+  //     map<KeyType, ValueType> map_field = 1;
+  // The parsed descriptor looks like:
+  //     message MapFieldEntry {
+  //         option map_entry = true;
+  //         optional KeyType key = 1;
+  //         optional ValueType value = 2;
+  //     }
+  //     repeated MapFieldEntry map_field = 1;
+  //
+  // Implementations may choose not to generate the map_entry=true message, but
+  // use a native map in the target language to hold the keys and values.
+  // The reflection APIs in such implementations still need to work as
+  // if the field is a repeated message field.
+  //
+  // NOTE: Do not set the option in .proto files. Always use the maps syntax
+  // instead. The option should only be implicitly set by the proto compiler
+  // parser.
+  optional bool map_entry = 7;
+
+  reserved 8;  // javalite_serializable
+  reserved 9;  // javanano_as_lite
+
+  // Enable the legacy handling of JSON field name conflicts.  This lowercases
+  // and strips underscored from the fields before comparison in proto3 only.
+  // The new behavior takes `json_name` into account and applies to proto2 as
+  // well.
+  //
+  // This should only be used as a temporary measure against broken builds due
+  // to the change in behavior for JSON field name conflicts.
+  //
+  // TODO This is legacy behavior we plan to remove once downstream
+  // teams have had time to migrate.
+  optional bool deprecated_legacy_json_field_conflicts = 11 [deprecated = true];
+
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 12;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message FieldOptions {
+  // NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead.
+  // The ctype option instructs the C++ code generator to use a different
+  // representation of the field than it normally would.  See the specific
+  // options below.  This option is only implemented to support use of
+  // [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of
+  // type "bytes" in the open source release.
+  // TODO: make ctype actually deprecated.
+  optional CType ctype = 1 [/*deprecated = true,*/ default = STRING];
+  enum CType {
+    // Default mode.
+    STRING = 0;
+
+    // The option [ctype=CORD] may be applied to a non-repeated field of type
+    // "bytes". It indicates that in C++, the data should be stored in a Cord
+    // instead of a string.  For very large strings, this may reduce memory
+    // fragmentation. It may also allow better performance when parsing from a
+    // Cord, or when parsing with aliasing enabled, as the parsed Cord may then
+    // alias the original buffer.
+    CORD = 1;
+
+    STRING_PIECE = 2;
+  }
+  // The packed option can be enabled for repeated primitive fields to enable
+  // a more efficient representation on the wire. Rather than repeatedly
+  // writing the tag and type for each element, the entire array is encoded as
+  // a single length-delimited blob. In proto3, only explicit setting it to
+  // false will avoid using packed encoding.  This option is prohibited in
+  // Editions, but the `repeated_field_encoding` feature can be used to control
+  // the behavior.
+  optional bool packed = 2;
+
+  // The jstype option determines the JavaScript type used for values of the
+  // field.  The option is permitted only for 64 bit integral and fixed types
+  // (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING
+  // is represented as JavaScript string, which avoids loss of precision that
+  // can happen when a large value is converted to a floating point JavaScript.
+  // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
+  // use the JavaScript "number" type.  The behavior of the default option
+  // JS_NORMAL is implementation dependent.
+  //
+  // This option is an enum to permit additional types to be added, e.g.
+  // goog.math.Integer.
+  optional JSType jstype = 6 [default = JS_NORMAL];
+  enum JSType {
+    // Use the default type.
+    JS_NORMAL = 0;
+
+    // Use JavaScript strings.
+    JS_STRING = 1;
+
+    // Use JavaScript numbers.
+    JS_NUMBER = 2;
+  }
+
+  // Should this field be parsed lazily?  Lazy applies only to message-type
+  // fields.  It means that when the outer message is initially parsed, the
+  // inner message's contents will not be parsed but instead stored in encoded
+  // form.  The inner message will actually be parsed when it is first accessed.
+  //
+  // This is only a hint.  Implementations are free to choose whether to use
+  // eager or lazy parsing regardless of the value of this option.  However,
+  // setting this option true suggests that the protocol author believes that
+  // using lazy parsing on this field is worth the additional bookkeeping
+  // overhead typically needed to implement it.
+  //
+  // This option does not affect the public interface of any generated code;
+  // all method signatures remain the same.  Furthermore, thread-safety of the
+  // interface is not affected by this option; const methods remain safe to
+  // call from multiple threads concurrently, while non-const methods continue
+  // to require exclusive access.
+  //
+  // Note that lazy message fields are still eagerly verified to check
+  // ill-formed wireformat or missing required fields. Calling IsInitialized()
+  // on the outer message would fail if the inner message has missing required
+  // fields. Failed verification would result in parsing failure (except when
+  // uninitialized messages are acceptable).
+  optional bool lazy = 5 [default = false];
+
+  // unverified_lazy does no correctness checks on the byte stream. This should
+  // only be used where lazy with verification is prohibitive for performance
+  // reasons.
+  optional bool unverified_lazy = 15 [default = false];
+
+  // Is this field deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for accessors, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating fields.
+  optional bool deprecated = 3 [default = false];
+
+  // DEPRECATED. DO NOT USE!
+  // For Google-internal migration only. Do not use.
+  optional bool weak = 10 [default = false, deprecated = true];
+
+  // Indicate that the field value should not be printed out when using debug
+  // formats, e.g. when the field contains sensitive credentials.
+  optional bool debug_redact = 16 [default = false];
+
+  // If set to RETENTION_SOURCE, the option will be omitted from the binary.
+  enum OptionRetention {
+    RETENTION_UNKNOWN = 0;
+    RETENTION_RUNTIME = 1;
+    RETENTION_SOURCE = 2;
+  }
+
+  optional OptionRetention retention = 17;
+
+  // This indicates the types of entities that the field may apply to when used
+  // as an option. If it is unset, then the field may be freely used as an
+  // option on any kind of entity.
+  enum OptionTargetType {
+    TARGET_TYPE_UNKNOWN = 0;
+    TARGET_TYPE_FILE = 1;
+    TARGET_TYPE_EXTENSION_RANGE = 2;
+    TARGET_TYPE_MESSAGE = 3;
+    TARGET_TYPE_FIELD = 4;
+    TARGET_TYPE_ONEOF = 5;
+    TARGET_TYPE_ENUM = 6;
+    TARGET_TYPE_ENUM_ENTRY = 7;
+    TARGET_TYPE_SERVICE = 8;
+    TARGET_TYPE_METHOD = 9;
+  }
+
+  repeated OptionTargetType targets = 19;
+
+  message EditionDefault {
+    optional Edition edition = 3;
+    optional string value = 2;  // Textproto value.
+  }
+  repeated EditionDefault edition_defaults = 20;
+
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 21;
+
+  // Information about the support window of a feature.
+  message FeatureSupport {
+    // The edition that this feature was first available in.  In editions
+    // earlier than this one, the default assigned to EDITION_LEGACY will be
+    // used, and proto files will not be able to override it.
+    optional Edition edition_introduced = 1;
+
+    // The edition this feature becomes deprecated in.  Using this after this
+    // edition may trigger warnings.
+    optional Edition edition_deprecated = 2;
+
+    // The deprecation warning text if this feature is used after the edition it
+    // was marked deprecated in.
+    optional string deprecation_warning = 3;
+
+    // The edition this feature is no longer available in.  In editions after
+    // this one, the last default assigned will be used, and proto files will
+    // not be able to override it.
+    optional Edition edition_removed = 4;
+  }
+  optional FeatureSupport feature_support = 22;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+
+  reserved 4;   // removed jtype
+  reserved 18;  // reserve target, target_obsolete_do_not_use
+}
+
+message OneofOptions {
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 1;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumOptions {
+  // Set this option to true to allow mapping different tag names to the same
+  // value.
+  optional bool allow_alias = 2;
+
+  // Is this enum deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the enum, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating enums.
+  optional bool deprecated = 3 [default = false];
+
+  reserved 5;  // javanano_as_lite
+
+  // Enable the legacy handling of JSON field name conflicts.  This lowercases
+  // and strips underscored from the fields before comparison in proto3 only.
+  // The new behavior takes `json_name` into account and applies to proto2 as
+  // well.
+  // TODO Remove this legacy behavior once downstream teams have
+  // had time to migrate.
+  optional bool deprecated_legacy_json_field_conflicts = 6 [deprecated = true];
+
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 7;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumValueOptions {
+  // Is this enum value deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the enum value, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating enum values.
+  optional bool deprecated = 1 [default = false];
+
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 2;
+
+  // Indicate that fields annotated with this enum value should not be printed
+  // out when using debug formats, e.g. when the field contains sensitive
+  // credentials.
+  optional bool debug_redact = 3 [default = false];
+
+  // Information about the support window of a feature value.
+  optional FieldOptions.FeatureSupport feature_support = 4;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message ServiceOptions {
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 34;
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // Is this service deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the service, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating services.
+  optional bool deprecated = 33 [default = false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message MethodOptions {
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // Is this method deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for the method, or it will be completely ignored; in the very least,
+  // this is a formalization for deprecating methods.
+  optional bool deprecated = 33 [default = false];
+
+  // Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
+  // or neither? HTTP based RPC implementation may choose GET verb for safe
+  // methods, and PUT verb for idempotent methods instead of the default POST.
+  enum IdempotencyLevel {
+    IDEMPOTENCY_UNKNOWN = 0;
+    NO_SIDE_EFFECTS = 1;  // implies idempotent
+    IDEMPOTENT = 2;       // idempotent, but may have side effects
+  }
+  optional IdempotencyLevel idempotency_level = 34
+      [default = IDEMPOTENCY_UNKNOWN];
+
+  // Any features defined in the specific edition.
+  // WARNING: This field should only be used by protobuf plugins or special
+  // cases like the proto compiler. Other uses are discouraged and
+  // developers should rely on the protoreflect APIs for their client language.
+  optional FeatureSet features = 35;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+// A message representing a option the parser does not recognize. This only
+// appears in options protos created by the compiler::Parser class.
+// DescriptorPool resolves these when building Descriptor objects. Therefore,
+// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+// in them.
+message UninterpretedOption {
+  // The name of the uninterpreted option.  Each string represents a segment in
+  // a dot-separated name.  is_extension is true iff a segment represents an
+  // extension (denoted with parentheses in options specs in .proto files).
+  // E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents
+  // "foo.(bar.baz).moo".
+  message NamePart {
+    required string name_part = 1;
+    required bool is_extension = 2;
+  }
+  repeated NamePart name = 2;
+
+  // The value of the uninterpreted option, in whatever type the tokenizer
+  // identified it as during parsing. Exactly one of these should be set.
+  optional string identifier_value = 3;
+  optional uint64 positive_int_value = 4;
+  optional int64 negative_int_value = 5;
+  optional double double_value = 6;
+  optional bytes string_value = 7;
+  optional string aggregate_value = 8;
+}
+
+// ===================================================================
+// Features
+
+// TODO Enums in C++ gencode (and potentially other languages) are
+// not well scoped.  This means that each of the feature enums below can clash
+// with each other.  The short names we've chosen maximize call-site
+// readability, but leave us very open to this scenario.  A future feature will
+// be designed and implemented to handle this, hopefully before we ever hit a
+// conflict here.
+message FeatureSet {
+  enum FieldPresence {
+    FIELD_PRESENCE_UNKNOWN = 0;
+    EXPLICIT = 1;
+    IMPLICIT = 2;
+    LEGACY_REQUIRED = 3;
+  }
+  optional FieldPresence field_presence = 1 [
+    retention = RETENTION_RUNTIME,
+    targets = TARGET_TYPE_FIELD,
+    targets = TARGET_TYPE_FILE,
+    feature_support = {
+      edition_introduced: EDITION_2023,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "EXPLICIT" },
+    edition_defaults = { edition: EDITION_PROTO3, value: "IMPLICIT" },
+    edition_defaults = { edition: EDITION_2023, value: "EXPLICIT" }
+  ];
+
+  enum EnumType {
+    ENUM_TYPE_UNKNOWN = 0;
+    OPEN = 1;
+    CLOSED = 2;
+  }
+  optional EnumType enum_type = 2 [
+    retention = RETENTION_RUNTIME,
+    targets = TARGET_TYPE_ENUM,
+    targets = TARGET_TYPE_FILE,
+    feature_support = {
+      edition_introduced: EDITION_2023,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "CLOSED" },
+    edition_defaults = { edition: EDITION_PROTO3, value: "OPEN" }
+  ];
+
+  enum RepeatedFieldEncoding {
+    REPEATED_FIELD_ENCODING_UNKNOWN = 0;
+    PACKED = 1;
+    EXPANDED = 2;
+  }
+  optional RepeatedFieldEncoding repeated_field_encoding = 3 [
+    retention = RETENTION_RUNTIME,
+    targets = TARGET_TYPE_FIELD,
+    targets = TARGET_TYPE_FILE,
+    feature_support = {
+      edition_introduced: EDITION_2023,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "EXPANDED" },
+    edition_defaults = { edition: EDITION_PROTO3, value: "PACKED" }
+  ];
+
+  enum Utf8Validation {
+    UTF8_VALIDATION_UNKNOWN = 0;
+    VERIFY = 2;
+    NONE = 3;
+    reserved 1;
+  }
+  optional Utf8Validation utf8_validation = 4 [
+    retention = RETENTION_RUNTIME,
+    targets = TARGET_TYPE_FIELD,
+    targets = TARGET_TYPE_FILE,
+    feature_support = {
+      edition_introduced: EDITION_2023,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "NONE" },
+    edition_defaults = { edition: EDITION_PROTO3, value: "VERIFY" }
+  ];
+
+  enum MessageEncoding {
+    MESSAGE_ENCODING_UNKNOWN = 0;
+    LENGTH_PREFIXED = 1;
+    DELIMITED = 2;
+  }
+  optional MessageEncoding message_encoding = 5 [
+    retention = RETENTION_RUNTIME,
+    targets = TARGET_TYPE_FIELD,
+    targets = TARGET_TYPE_FILE,
+    feature_support = {
+      edition_introduced: EDITION_2023,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "LENGTH_PREFIXED" }
+  ];
+
+  enum JsonFormat {
+    JSON_FORMAT_UNKNOWN = 0;
+    ALLOW = 1;
+    LEGACY_BEST_EFFORT = 2;
+  }
+  optional JsonFormat json_format = 6 [
+    retention = RETENTION_RUNTIME,
+    targets = TARGET_TYPE_MESSAGE,
+    targets = TARGET_TYPE_ENUM,
+    targets = TARGET_TYPE_FILE,
+    feature_support = {
+      edition_introduced: EDITION_2023,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "LEGACY_BEST_EFFORT" },
+    edition_defaults = { edition: EDITION_PROTO3, value: "ALLOW" }
+  ];
+
+  enum EnforceNamingStyle {
+    ENFORCE_NAMING_STYLE_UNKNOWN = 0;
+    STYLE2024 = 1;
+    STYLE_LEGACY = 2;
+  }
+  optional EnforceNamingStyle enforce_naming_style = 7 [
+    retention = RETENTION_SOURCE,
+    targets = TARGET_TYPE_FILE,
+    targets = TARGET_TYPE_EXTENSION_RANGE,
+    targets = TARGET_TYPE_MESSAGE,
+    targets = TARGET_TYPE_FIELD,
+    targets = TARGET_TYPE_ONEOF,
+    targets = TARGET_TYPE_ENUM,
+    targets = TARGET_TYPE_ENUM_ENTRY,
+    targets = TARGET_TYPE_SERVICE,
+    targets = TARGET_TYPE_METHOD,
+    feature_support = {
+      edition_introduced: EDITION_2024,
+    },
+    edition_defaults = { edition: EDITION_LEGACY, value: "STYLE_LEGACY" },
+    edition_defaults = { edition: EDITION_2024, value: "STYLE2024" }
+  ];
+
+  message VisibilityFeature {
+    enum DefaultSymbolVisibility {
+      DEFAULT_SYMBOL_VISIBILITY_UNKNOWN = 0;
+
+      // Default pre-EDITION_2024, all UNSET visibility are export.
+      EXPORT_ALL = 1;
+
+      // All top-level symbols default to export, nested default to local.
+      EXPORT_TOP_LEVEL = 2;
+
+      // All symbols default to local.
+      LOCAL_ALL = 3;
+
+      // All symbols local by default. Nested types cannot be exported.
+      // With special case caveat for message { enum {} reserved 1 to max; }
+      // This is the recommended setting for new protos.
+      STRICT = 4;
+    }
+    reserved 1 to max;
+  }
+  optional VisibilityFeature.DefaultSymbolVisibility default_symbol_visibility =
+      8 [
+        retention = RETENTION_SOURCE,
+        targets = TARGET_TYPE_FILE,
+        feature_support = {
+          edition_introduced: EDITION_2024,
+        },
+        edition_defaults = { edition: EDITION_LEGACY, value: "EXPORT_ALL" },
+        edition_defaults = { edition: EDITION_2024, value: "EXPORT_TOP_LEVEL" }
+      ];
+
+  reserved 999;
+
+  extensions 1000 to 9994 [
+    declaration = {
+      number: 1000,
+      full_name: ".pb.cpp",
+      type: ".pb.CppFeatures"
+    },
+    declaration = {
+      number: 1001,
+      full_name: ".pb.java",
+      type: ".pb.JavaFeatures"
+    },
+    declaration = { number: 1002, full_name: ".pb.go", type: ".pb.GoFeatures" },
+    declaration = {
+      number: 1003,
+      full_name: ".pb.python",
+      type: ".pb.PythonFeatures"
+    },
+    declaration = {
+      number: 9989,
+      full_name: ".pb.java_mutable",
+      type: ".pb.JavaMutableFeatures"
+    },
+    declaration = {
+      number: 9990,
+      full_name: ".pb.proto1",
+      type: ".pb.Proto1Features"
+    }
+  ];
+
+  extensions 9995 to 9999;  // For internal testing
+  extensions 10000;         // for https://github.com/bufbuild/protobuf-es
+}
+
+// A compiled specification for the defaults of a set of features.  These
+// messages are generated from FeatureSet extensions and can be used to seed
+// feature resolution. The resolution with this object becomes a simple search
+// for the closest matching edition, followed by proto merges.
+message FeatureSetDefaults {
+  // A map from every known edition with a unique set of defaults to its
+  // defaults. Not all editions may be contained here.  For a given edition,
+  // the defaults at the closest matching edition ordered at or before it should
+  // be used.  This field must be in strict ascending order by edition.
+  message FeatureSetEditionDefault {
+    optional Edition edition = 3;
+
+    // Defaults of features that can be overridden in this edition.
+    optional FeatureSet overridable_features = 4;
+
+    // Defaults of features that can't be overridden in this edition.
+    optional FeatureSet fixed_features = 5;
+
+    reserved 1, 2;
+    reserved "features";
+  }
+  repeated FeatureSetEditionDefault defaults = 1;
+
+  // The minimum supported edition (inclusive) when this was constructed.
+  // Editions before this will not have defaults.
+  optional Edition minimum_edition = 4;
+
+  // The maximum known edition (inclusive) when this was constructed. Editions
+  // after this will not have reliable defaults.
+  optional Edition maximum_edition = 5;
+}
+
+// ===================================================================
+// Optional source code info
+
+// Encapsulates information about the original source file from which a
+// FileDescriptorProto was generated.
+message SourceCodeInfo {
+  // A Location identifies a piece of source code in a .proto file which
+  // corresponds to a particular definition.  This information is intended
+  // to be useful to IDEs, code indexers, documentation generators, and similar
+  // tools.
+  //
+  // For example, say we have a file like:
+  //   message Foo {
+  //     optional string foo = 1;
+  //   }
+  // Let's look at just the field definition:
+  //   optional string foo = 1;
+  //   ^       ^^     ^^  ^  ^^^
+  //   a       bc     de  f  ghi
+  // We have the following locations:
+  //   span   path               represents
+  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+  //
+  // Notes:
+  // - A location may refer to a repeated field itself (i.e. not to any
+  //   particular index within it).  This is used whenever a set of elements are
+  //   logically enclosed in a single code segment.  For example, an entire
+  //   extend block (possibly containing multiple extension definitions) will
+  //   have an outer location whose path refers to the "extensions" repeated
+  //   field without an index.
+  // - Multiple locations may have the same path.  This happens when a single
+  //   logical declaration is spread out across multiple places.  The most
+  //   obvious example is the "extend" block again -- there may be multiple
+  //   extend blocks in the same scope, each of which will have the same path.
+  // - A location's span is not always a subset of its parent's span.  For
+  //   example, the "extendee" of an extension declaration appears at the
+  //   beginning of the "extend" block and is shared by all extensions within
+  //   the block.
+  // - Just because a location's span is a subset of some other location's span
+  //   does not mean that it is a descendant.  For example, a "group" defines
+  //   both a type and a field in a single declaration.  Thus, the locations
+  //   corresponding to the type and field and their components will overlap.
+  // - Code which tries to interpret locations should probably be designed to
+  //   ignore those that it doesn't understand, as more types of locations could
+  //   be recorded in the future.
+  repeated Location location = 1;
+  message Location {
+    // Identifies which part of the FileDescriptorProto was defined at this
+    // location.
+    //
+    // Each element is a field number or an index.  They form a path from
+    // the root FileDescriptorProto to the place where the definition appears.
+    // For example, this path:
+    //   [ 4, 3, 2, 7, 1 ]
+    // refers to:
+    //   file.message_type(3)  // 4, 3
+    //       .field(7)         // 2, 7
+    //       .name()           // 1
+    // This is because FileDescriptorProto.message_type has field number 4:
+    //   repeated DescriptorProto message_type = 4;
+    // and DescriptorProto.field has field number 2:
+    //   repeated FieldDescriptorProto field = 2;
+    // and FieldDescriptorProto.name has field number 1:
+    //   optional string name = 1;
+    //
+    // Thus, the above path gives the location of a field name.  If we removed
+    // the last element:
+    //   [ 4, 3, 2, 7 ]
+    // this path refers to the whole field declaration (from the beginning
+    // of the label to the terminating semicolon).
+    repeated int32 path = 1 [packed = true];
+
+    // Always has exactly three or four elements: start line, start column,
+    // end line (optional, otherwise assumed same as start line), end column.
+    // These are packed into a single field for efficiency.  Note that line
+    // and column numbers are zero-based -- typically you will want to add
+    // 1 to each before displaying to a user.
+    repeated int32 span = 2 [packed = true];
+
+    // If this SourceCodeInfo represents a complete declaration, these are any
+    // comments appearing before and after the declaration which appear to be
+    // attached to the declaration.
+    //
+    // A series of line comments appearing on consecutive lines, with no other
+    // tokens appearing on those lines, will be treated as a single comment.
+    //
+    // leading_detached_comments will keep paragraphs of comments that appear
+    // before (but not connected to) the current element. Each paragraph,
+    // separated by empty lines, will be one comment element in the repeated
+    // field.
+    //
+    // Only the comment content is provided; comment markers (e.g. //) are
+    // stripped out.  For block comments, leading whitespace and an asterisk
+    // will be stripped from the beginning of each line other than the first.
+    // Newlines are included in the output.
+    //
+    // Examples:
+    //
+    //   optional int32 foo = 1;  // Comment attached to foo.
+    //   // Comment attached to bar.
+    //   optional int32 bar = 2;
+    //
+    //   optional string baz = 3;
+    //   // Comment attached to baz.
+    //   // Another line attached to baz.
+    //
+    //   // Comment attached to moo.
+    //   //
+    //   // Another line attached to moo.
+    //   optional double moo = 4;
+    //
+    //   // Detached comment for corge. This is not leading or trailing comments
+    //   // to moo or corge because there are blank lines separating it from
+    //   // both.
+    //
+    //   // Detached comment for corge paragraph 2.
+    //
+    //   optional string corge = 5;
+    //   /* Block comment attached
+    //    * to corge.  Leading asterisks
+    //    * will be removed. */
+    //   /* Block comment attached to
+    //    * grault. */
+    //   optional int32 grault = 6;
+    //
+    //   // ignored detached comments.
+    optional string leading_comments = 3;
+    optional string trailing_comments = 4;
+    repeated string leading_detached_comments = 6;
+  }
+
+  // Extensions for tooling.
+  extensions 536000000 [declaration = {
+    number: 536000000
+    type: ".buf.descriptor.v1.SourceCodeInfoExtension"
+    full_name: ".buf.descriptor.v1.buf_source_code_info_extension"
+  }];
+}
+
+// Describes the relationship between generated code and its original source
+// file. A GeneratedCodeInfo message is associated with only one generated
+// source file, but may contain references to different source .proto files.
+message GeneratedCodeInfo {
+  // An Annotation connects some span of text in generated code to an element
+  // of its generating .proto file.
+  repeated Annotation annotation = 1;
+  message Annotation {
+    // Identifies the element in the original source .proto file. This field
+    // is formatted the same as SourceCodeInfo.Location.path.
+    repeated int32 path = 1 [packed = true];
+
+    // Identifies the filesystem path to the original source .proto.
+    optional string source_file = 2;
+
+    // Identifies the starting offset in bytes in the generated code
+    // that relates to the identified object.
+    optional int32 begin = 3;
+
+    // Identifies the ending offset in bytes in the generated code that
+    // relates to the identified object. The end offset should be one past
+    // the last relevant byte (so the length of the text = end - begin).
+    optional int32 end = 4;
+
+    // Represents the identified object's effect on the element in the original
+    // .proto file.
+    enum Semantic {
+      // There is no effect or the effect is indescribable.
+      NONE = 0;
+      // The element is set or otherwise mutated.
+      SET = 1;
+      // An alias to the element is returned.
+      ALIAS = 2;
+    }
+    optional Semantic semantic = 5;
+  }
+}
+
+// Describes the 'visibility' of a symbol with respect to the proto import
+// system. Symbols can only be imported when the visibility rules do not prevent
+// it (ex: local symbols cannot be imported).  Visibility modifiers can only set
+// on `message` and `enum` as they are the only types available to be referenced
+// from other files.
+enum SymbolVisibility {
+  VISIBILITY_UNSET = 0;
+  VISIBILITY_LOCAL = 1;
+  VISIBILITY_EXPORT = 2;
+}
diff --git a/pkg/vm_service/test/evaluate_optimized_out_variable_test.dart b/pkg/vm_service/test/evaluate_optimized_out_variable_test.dart
index 0f96c06..b3df49e 100644
--- a/pkg/vm_service/test/evaluate_optimized_out_variable_test.dart
+++ b/pkg/vm_service/test/evaluate_optimized_out_variable_test.dart
@@ -58,12 +58,14 @@
   (VmService service, IsolateRef isolateRef) async {
     final isolateId = isolateRef.id!;
     try {
-      await service.evaluateInFrame(
+      final dynamic result = await service.evaluateInFrame(
         isolateId,
         1,
         'data.length',
       );
-      fail('Expected evaluateInFrame to throw an RPCError');
+      // Check in case the variable isn't optimized out, e.g., if the code is
+      // interpreted via bytecode instead of compiled to native code.
+      expect(result.valueAsString, '3');
     } on RPCError catch (e) {
       expect(e.code, RPCErrorKind.kExpressionCompilationError.code);
       expect(e.message, 'Expression compilation error');
diff --git a/pkg/vm_service/test/evaluate_type_arguments_test.dart b/pkg/vm_service/test/evaluate_type_arguments_test.dart
index 6ee81f2..8fc00b9 100644
--- a/pkg/vm_service/test/evaluate_type_arguments_test.dart
+++ b/pkg/vm_service/test/evaluate_type_arguments_test.dart
@@ -5,7 +5,6 @@
 import 'dart:collection';
 import 'dart:developer';
 
-import 'package:test/test.dart';
 import 'package:vm_service/vm_service.dart';
 
 import 'common/service_test_common.dart';
@@ -17,9 +16,9 @@
 //
 // dart pkg/vm_service/test/update_line_numbers.dart pkg/vm_service/test/evaluate_type_arguments_test.dart
 //
-const LINE_A = 39;
-const LINE_B = 44;
-const LINE_C = 50;
+const LINE_A = 38;
+const LINE_B = 43;
+const LINE_C = 49;
 // AUTOGENERATED END
 
 class A {}
@@ -87,20 +86,16 @@
         return y.last;
       }()
       ''';
-      // Can't add List<String> to List<E extends String> directly.
-      try {
-        await service.evaluateInFrame(isolateId, 0, expression);
-        fail("Can't add List<String> to List<E extends String> directly.");
-      } on RPCError catch (e) {
-        expect(e.code, RPCErrorKind.kExpressionCompilationError.code);
-        expect(
-          e.details,
-          contains(
-            "The argument type '_GrowableList<String>' can't be assigned "
-            "to the parameter type 'Iterable<E>'",
-          ),
-        );
-      }
+      // We wouldnt be able to add List<String> to List<E extends String>,
+      // but the CFE now uses static types for "dart:" definitions, making this
+      // adding List<E extends String> to List<E extends String>.
+      await evaluateInFrameAndExpect(
+        service,
+        isolateId,
+        expression,
+        'hello',
+        kind: InstanceKind.kString,
+      );
     }
     {
       // Can add List<String> to List<E extends String> via cast.
diff --git a/pkg/vm_service_protos/CHANGELOG.md b/pkg/vm_service_protos/CHANGELOG.md
index d8e9340..2f03de1 100644
--- a/pkg/vm_service_protos/CHANGELOG.md
+++ b/pkg/vm_service_protos/CHANGELOG.md
@@ -1,4 +1,4 @@
-## 2.0.1-wip
+## 2.0.1
 
 - Include support for `package:protobuf` 5.0.
 
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pb.dart
index 0623393..615271e 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/common/builtin_clock.proto
-//
+// Generated from protos/perfetto/common/builtin_clock.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbenum.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbenum.dart
index 4771209..2c7f45a 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbenum.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbenum.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/common/builtin_clock.proto
-//
+// Generated from protos/perfetto/common/builtin_clock.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -33,7 +34,8 @@
       $pb.ProtobufEnum.initByValue(values);
   static BuiltinClock? valueOf($core.int value) => _byValue[value];
 
-  const BuiltinClock._(super.v, super.n);
+  const BuiltinClock._(super.value, super.name);
 }
 
-const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
+const $core.bool _omitEnumNames =
+    $core.bool.fromEnvironment('protobuf.omit_enum_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbjson.dart
index be263f8..03f76d6 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/common/builtin_clock.proto
-//
+// Generated from protos/perfetto/common/builtin_clock.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbserver.dart
deleted file mode 100644
index b563b3c..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/common/builtin_clock.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/common/builtin_clock.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'builtin_clock.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pb.dart
index 8cb45c2..496b56d 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/clock_snapshot.proto
-//
+// Generated from protos/perfetto/trace/clock_snapshot.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -31,52 +32,46 @@
     $core.int? clockId,
     $fixnum.Int64? timestamp,
   }) {
-    final $result = create();
-    if (clockId != null) {
-      $result.clockId = clockId;
-    }
-    if (timestamp != null) {
-      $result.timestamp = timestamp;
-    }
-    return $result;
+    final result = create();
+    if (clockId != null) result.clockId = clockId;
+    if (timestamp != null) result.timestamp = timestamp;
+    return result;
   }
-  ClockSnapshot_Clock._() : super();
-  factory ClockSnapshot_Clock.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ClockSnapshot_Clock.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ClockSnapshot_Clock._();
+
+  factory ClockSnapshot_Clock.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ClockSnapshot_Clock.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ClockSnapshot.Clock',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..a<$core.int>(1, _omitFieldNames ? '' : 'clockId', $pb.PbFieldType.OU3)
+    ..aI(1, _omitFieldNames ? '' : 'clockId', fieldType: $pb.PbFieldType.OU3)
     ..a<$fixnum.Int64>(
         2, _omitFieldNames ? '' : 'timestamp', $pb.PbFieldType.OU6,
         defaultOrMaker: $fixnum.Int64.ZERO)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ClockSnapshot_Clock clone() => ClockSnapshot_Clock()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ClockSnapshot_Clock clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ClockSnapshot_Clock copyWith(void Function(ClockSnapshot_Clock) updates) =>
       super.copyWith((message) => updates(message as ClockSnapshot_Clock))
           as ClockSnapshot_Clock;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ClockSnapshot_Clock create() => ClockSnapshot_Clock._();
+  @$core.override
   ClockSnapshot_Clock createEmptyInstance() => create();
-  static $pb.PbList<ClockSnapshot_Clock> createRepeated() =>
-      $pb.PbList<ClockSnapshot_Clock>();
   @$core.pragma('dart2js:noInline')
   static ClockSnapshot_Clock getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClockSnapshot_Clock>(create);
@@ -94,10 +89,7 @@
   @$pb.TagNumber(1)
   $core.int get clockId => $_getIZ(0);
   @$pb.TagNumber(1)
-  set clockId($core.int v) {
-    $_setUnsignedInt32(0, v);
-  }
-
+  set clockId($core.int value) => $_setUnsignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasClockId() => $_has(0);
   @$pb.TagNumber(1)
@@ -108,10 +100,7 @@
   @$pb.TagNumber(2)
   $fixnum.Int64 get timestamp => $_getI64(1);
   @$pb.TagNumber(2)
-  set timestamp($fixnum.Int64 v) {
-    $_setInt64(1, v);
-  }
-
+  set timestamp($fixnum.Int64 value) => $_setInt64(1, value);
   @$pb.TagNumber(2)
   $core.bool hasTimestamp() => $_has(1);
   @$pb.TagNumber(2)
@@ -124,56 +113,46 @@
     $core.Iterable<ClockSnapshot_Clock>? clocks,
     $0.BuiltinClock? primaryTraceClock,
   }) {
-    final $result = create();
-    if (clocks != null) {
-      $result.clocks.addAll(clocks);
-    }
-    if (primaryTraceClock != null) {
-      $result.primaryTraceClock = primaryTraceClock;
-    }
-    return $result;
+    final result = create();
+    if (clocks != null) result.clocks.addAll(clocks);
+    if (primaryTraceClock != null) result.primaryTraceClock = primaryTraceClock;
+    return result;
   }
-  ClockSnapshot._() : super();
-  factory ClockSnapshot.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ClockSnapshot.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ClockSnapshot._();
+
+  factory ClockSnapshot.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ClockSnapshot.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ClockSnapshot',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..pc<ClockSnapshot_Clock>(
-        1, _omitFieldNames ? '' : 'clocks', $pb.PbFieldType.PM,
+    ..pPM<ClockSnapshot_Clock>(1, _omitFieldNames ? '' : 'clocks',
         subBuilder: ClockSnapshot_Clock.create)
-    ..e<$0.BuiltinClock>(
-        2, _omitFieldNames ? '' : 'primaryTraceClock', $pb.PbFieldType.OE,
-        defaultOrMaker: $0.BuiltinClock.BUILTIN_CLOCK_MONOTONIC,
-        valueOf: $0.BuiltinClock.valueOf,
+    ..aE<$0.BuiltinClock>(2, _omitFieldNames ? '' : 'primaryTraceClock',
         enumValues: $0.BuiltinClock.values)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ClockSnapshot clone() => ClockSnapshot()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ClockSnapshot clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ClockSnapshot copyWith(void Function(ClockSnapshot) updates) =>
       super.copyWith((message) => updates(message as ClockSnapshot))
           as ClockSnapshot;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ClockSnapshot create() => ClockSnapshot._();
+  @$core.override
   ClockSnapshot createEmptyInstance() => create();
-  static $pb.PbList<ClockSnapshot> createRepeated() =>
-      $pb.PbList<ClockSnapshot>();
   @$core.pragma('dart2js:noInline')
   static ClockSnapshot getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ClockSnapshot>(create);
@@ -189,16 +168,14 @@
   @$pb.TagNumber(2)
   $0.BuiltinClock get primaryTraceClock => $_getN(1);
   @$pb.TagNumber(2)
-  set primaryTraceClock($0.BuiltinClock v) {
-    $_setField(2, v);
-  }
-
+  set primaryTraceClock($0.BuiltinClock value) => $_setField(2, value);
   @$pb.TagNumber(2)
   $core.bool hasPrimaryTraceClock() => $_has(1);
   @$pb.TagNumber(2)
   void clearPrimaryTraceClock() => $_clearField(2);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbjson.dart
index 2511507..944b342 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/clock_snapshot.proto
-//
+// Generated from protos/perfetto/trace/clock_snapshot.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbserver.dart
deleted file mode 100644
index d1cdf54..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/clock_snapshot.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/clock_snapshot.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'clock_snapshot.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pb.dart
index ed86ccd..d176572 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,177 +6,154 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/interned_data/interned_data.proto
-//
+// Generated from protos/perfetto/trace/interned_data/interned_data.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import '../profiling/profile_common.pb.dart' as $3;
+import '../profiling/profile_common.pb.dart' as $2;
 import '../track_event/debug_annotation.pb.dart' as $1;
-import '../track_event/track_event.pb.dart' as $2;
+import '../track_event/track_event.pb.dart' as $0;
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
-///  Message that contains new entries for the interning indices of a packet
-///  sequence.
+/// Message that contains new entries for the interning indices of a packet
+/// sequence.
 ///
-///  The writer will usually emit new entries in the same TracePacket that first
-///  refers to them (since the last reset of interning state). They may also be
-///  emitted proactively in advance of referring to them in later packets.
+/// The writer will usually emit new entries in the same TracePacket that first
+/// refers to them (since the last reset of interning state). They may also be
+/// emitted proactively in advance of referring to them in later packets.
 ///
-///  Next reserved id: 8 (up to 15).
-///  Next id: 29.
+/// Next reserved id: 8 (up to 15).
+/// Next id: 29.
 class InternedData extends $pb.GeneratedMessage {
   factory InternedData({
-    $core.Iterable<$2.EventCategory>? eventCategories,
-    $core.Iterable<$2.EventName>? eventNames,
+    $core.Iterable<$0.EventCategory>? eventCategories,
+    $core.Iterable<$0.EventName>? eventNames,
     $core.Iterable<$1.DebugAnnotationName>? debugAnnotationNames,
-    $core.Iterable<$3.InternedString>? functionNames,
-    $core.Iterable<$3.Frame>? frames,
-    $core.Iterable<$3.Callstack>? callstacks,
-    $core.Iterable<$3.InternedString>? mappingPaths,
-    $core.Iterable<$3.Mapping>? mappings,
-    $core.Iterable<$3.InternedString>? debugAnnotationStringValues,
+    $core.Iterable<$2.InternedString>? functionNames,
+    $core.Iterable<$2.Frame>? frames,
+    $core.Iterable<$2.Callstack>? callstacks,
+    $core.Iterable<$2.InternedString>? mappingPaths,
+    $core.Iterable<$2.Mapping>? mappings,
+    $core.Iterable<$2.InternedString>? debugAnnotationStringValues,
   }) {
-    final $result = create();
-    if (eventCategories != null) {
-      $result.eventCategories.addAll(eventCategories);
-    }
-    if (eventNames != null) {
-      $result.eventNames.addAll(eventNames);
-    }
-    if (debugAnnotationNames != null) {
-      $result.debugAnnotationNames.addAll(debugAnnotationNames);
-    }
-    if (functionNames != null) {
-      $result.functionNames.addAll(functionNames);
-    }
-    if (frames != null) {
-      $result.frames.addAll(frames);
-    }
-    if (callstacks != null) {
-      $result.callstacks.addAll(callstacks);
-    }
-    if (mappingPaths != null) {
-      $result.mappingPaths.addAll(mappingPaths);
-    }
-    if (mappings != null) {
-      $result.mappings.addAll(mappings);
-    }
-    if (debugAnnotationStringValues != null) {
-      $result.debugAnnotationStringValues.addAll(debugAnnotationStringValues);
-    }
-    return $result;
+    final result = create();
+    if (eventCategories != null) result.eventCategories.addAll(eventCategories);
+    if (eventNames != null) result.eventNames.addAll(eventNames);
+    if (debugAnnotationNames != null)
+      result.debugAnnotationNames.addAll(debugAnnotationNames);
+    if (functionNames != null) result.functionNames.addAll(functionNames);
+    if (frames != null) result.frames.addAll(frames);
+    if (callstacks != null) result.callstacks.addAll(callstacks);
+    if (mappingPaths != null) result.mappingPaths.addAll(mappingPaths);
+    if (mappings != null) result.mappings.addAll(mappings);
+    if (debugAnnotationStringValues != null)
+      result.debugAnnotationStringValues.addAll(debugAnnotationStringValues);
+    return result;
   }
-  InternedData._() : super();
-  factory InternedData.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory InternedData.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  InternedData._();
+
+  factory InternedData.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory InternedData.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'InternedData',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..pc<$2.EventCategory>(
-        1, _omitFieldNames ? '' : 'eventCategories', $pb.PbFieldType.PM,
-        subBuilder: $2.EventCategory.create)
-    ..pc<$2.EventName>(
-        2, _omitFieldNames ? '' : 'eventNames', $pb.PbFieldType.PM,
-        subBuilder: $2.EventName.create)
-    ..pc<$1.DebugAnnotationName>(
-        3, _omitFieldNames ? '' : 'debugAnnotationNames', $pb.PbFieldType.PM,
+    ..pPM<$0.EventCategory>(1, _omitFieldNames ? '' : 'eventCategories',
+        subBuilder: $0.EventCategory.create)
+    ..pPM<$0.EventName>(2, _omitFieldNames ? '' : 'eventNames',
+        subBuilder: $0.EventName.create)
+    ..pPM<$1.DebugAnnotationName>(
+        3, _omitFieldNames ? '' : 'debugAnnotationNames',
         subBuilder: $1.DebugAnnotationName.create)
-    ..pc<$3.InternedString>(
-        5, _omitFieldNames ? '' : 'functionNames', $pb.PbFieldType.PM,
-        subBuilder: $3.InternedString.create)
-    ..pc<$3.Frame>(6, _omitFieldNames ? '' : 'frames', $pb.PbFieldType.PM,
-        subBuilder: $3.Frame.create)
-    ..pc<$3.Callstack>(
-        7, _omitFieldNames ? '' : 'callstacks', $pb.PbFieldType.PM,
-        subBuilder: $3.Callstack.create)
-    ..pc<$3.InternedString>(
-        17, _omitFieldNames ? '' : 'mappingPaths', $pb.PbFieldType.PM,
-        subBuilder: $3.InternedString.create)
-    ..pc<$3.Mapping>(19, _omitFieldNames ? '' : 'mappings', $pb.PbFieldType.PM,
-        subBuilder: $3.Mapping.create)
-    ..pc<$3.InternedString>(
-        29,
-        _omitFieldNames ? '' : 'debugAnnotationStringValues',
-        $pb.PbFieldType.PM,
-        subBuilder: $3.InternedString.create)
+    ..pPM<$2.InternedString>(5, _omitFieldNames ? '' : 'functionNames',
+        subBuilder: $2.InternedString.create)
+    ..pPM<$2.Frame>(6, _omitFieldNames ? '' : 'frames',
+        subBuilder: $2.Frame.create)
+    ..pPM<$2.Callstack>(7, _omitFieldNames ? '' : 'callstacks',
+        subBuilder: $2.Callstack.create)
+    ..pPM<$2.InternedString>(17, _omitFieldNames ? '' : 'mappingPaths',
+        subBuilder: $2.InternedString.create)
+    ..pPM<$2.Mapping>(19, _omitFieldNames ? '' : 'mappings',
+        subBuilder: $2.Mapping.create)
+    ..pPM<$2.InternedString>(
+        29, _omitFieldNames ? '' : 'debugAnnotationStringValues',
+        subBuilder: $2.InternedString.create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  InternedData clone() => InternedData()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  InternedData clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   InternedData copyWith(void Function(InternedData) updates) =>
       super.copyWith((message) => updates(message as InternedData))
           as InternedData;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static InternedData create() => InternedData._();
+  @$core.override
   InternedData createEmptyInstance() => create();
-  static $pb.PbList<InternedData> createRepeated() =>
-      $pb.PbList<InternedData>();
   @$core.pragma('dart2js:noInline')
   static InternedData getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<InternedData>(create);
   static InternedData? _defaultInstance;
 
   @$pb.TagNumber(1)
-  $pb.PbList<$2.EventCategory> get eventCategories => $_getList(0);
+  $pb.PbList<$0.EventCategory> get eventCategories => $_getList(0);
 
   @$pb.TagNumber(2)
-  $pb.PbList<$2.EventName> get eventNames => $_getList(1);
+  $pb.PbList<$0.EventName> get eventNames => $_getList(1);
 
   @$pb.TagNumber(3)
   $pb.PbList<$1.DebugAnnotationName> get debugAnnotationNames => $_getList(2);
 
   /// Names of functions used in frames below.
   @$pb.TagNumber(5)
-  $pb.PbList<$3.InternedString> get functionNames => $_getList(3);
+  $pb.PbList<$2.InternedString> get functionNames => $_getList(3);
 
   /// Frames of callstacks of a program.
   @$pb.TagNumber(6)
-  $pb.PbList<$3.Frame> get frames => $_getList(4);
+  $pb.PbList<$2.Frame> get frames => $_getList(4);
 
   /// A callstack of a program.
   @$pb.TagNumber(7)
-  $pb.PbList<$3.Callstack> get callstacks => $_getList(5);
+  $pb.PbList<$2.Callstack> get callstacks => $_getList(5);
 
   /// Paths to executable files.
   @$pb.TagNumber(17)
-  $pb.PbList<$3.InternedString> get mappingPaths => $_getList(6);
+  $pb.PbList<$2.InternedString> get mappingPaths => $_getList(6);
 
   /// Executable files mapped into processes.
   @$pb.TagNumber(19)
-  $pb.PbList<$3.Mapping> get mappings => $_getList(7);
+  $pb.PbList<$2.Mapping> get mappings => $_getList(7);
 
   /// Interned string values in the DebugAnnotation proto.
   @$pb.TagNumber(29)
-  $pb.PbList<$3.InternedString> get debugAnnotationStringValues => $_getList(8);
+  $pb.PbList<$2.InternedString> get debugAnnotationStringValues => $_getList(8);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbjson.dart
index 71190b5..1a6b7f1 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/interned_data/interned_data.proto
-//
+// Generated from protos/perfetto/trace/interned_data/interned_data.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbserver.dart
deleted file mode 100644
index f363a3f..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/interned_data/interned_data.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/interned_data/interned_data.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'interned_data.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pb.dart
index 74fbcfd..82c2206 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/profiling/profile_common.proto
-//
+// Generated from protos/perfetto/trace/profiling/profile_common.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -35,22 +36,20 @@
     $fixnum.Int64? iid,
     $core.List<$core.int>? str,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (str != null) {
-      $result.str = str;
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (str != null) result.str = str;
+    return result;
   }
-  InternedString._() : super();
-  factory InternedString.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory InternedString.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  InternedString._();
+
+  factory InternedString.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory InternedString.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'InternedString',
@@ -63,24 +62,20 @@
         2, _omitFieldNames ? '' : 'str', $pb.PbFieldType.OY)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  InternedString clone() => InternedString()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  InternedString clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   InternedString copyWith(void Function(InternedString) updates) =>
       super.copyWith((message) => updates(message as InternedString))
           as InternedString;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static InternedString create() => InternedString._();
+  @$core.override
   InternedString createEmptyInstance() => create();
-  static $pb.PbList<InternedString> createRepeated() =>
-      $pb.PbList<InternedString>();
   @$core.pragma('dart2js:noInline')
   static InternedString getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<InternedString>(create);
@@ -89,10 +84,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -101,10 +93,7 @@
   @$pb.TagNumber(2)
   $core.List<$core.int> get str => $_getN(1);
   @$pb.TagNumber(2)
-  set str($core.List<$core.int> v) {
-    $_setBytes(1, v);
-  }
-
+  set str($core.List<$core.int> value) => $_setBytes(1, value);
   @$pb.TagNumber(2)
   $core.bool hasStr() => $_has(1);
   @$pb.TagNumber(2)
@@ -116,22 +105,20 @@
     $fixnum.Int64? iid,
     $core.Iterable<$fixnum.Int64>? pathStringIds,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (pathStringIds != null) {
-      $result.pathStringIds.addAll(pathStringIds);
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (pathStringIds != null) result.pathStringIds.addAll(pathStringIds);
+    return result;
   }
-  Mapping._() : super();
-  factory Mapping.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory Mapping.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  Mapping._();
+
+  factory Mapping.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory Mapping.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'Mapping',
@@ -144,22 +131,19 @@
         7, _omitFieldNames ? '' : 'pathStringIds', $pb.PbFieldType.PU6)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  Mapping clone() => Mapping()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  Mapping clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   Mapping copyWith(void Function(Mapping) updates) =>
       super.copyWith((message) => updates(message as Mapping)) as Mapping;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static Mapping create() => Mapping._();
+  @$core.override
   Mapping createEmptyInstance() => create();
-  static $pb.PbList<Mapping> createRepeated() => $pb.PbList<Mapping>();
   @$core.pragma('dart2js:noInline')
   static Mapping getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Mapping>(create);
@@ -169,10 +153,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -191,28 +172,22 @@
     $fixnum.Int64? mappingId,
     $fixnum.Int64? relPc,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (functionNameId != null) {
-      $result.functionNameId = functionNameId;
-    }
-    if (mappingId != null) {
-      $result.mappingId = mappingId;
-    }
-    if (relPc != null) {
-      $result.relPc = relPc;
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (functionNameId != null) result.functionNameId = functionNameId;
+    if (mappingId != null) result.mappingId = mappingId;
+    if (relPc != null) result.relPc = relPc;
+    return result;
   }
-  Frame._() : super();
-  factory Frame.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory Frame.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  Frame._();
+
+  factory Frame.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory Frame.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'Frame',
@@ -231,22 +206,19 @@
         defaultOrMaker: $fixnum.Int64.ZERO)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  Frame clone() => Frame()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  Frame clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   Frame copyWith(void Function(Frame) updates) =>
       super.copyWith((message) => updates(message as Frame)) as Frame;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static Frame create() => Frame._();
+  @$core.override
   Frame createEmptyInstance() => create();
-  static $pb.PbList<Frame> createRepeated() => $pb.PbList<Frame>();
   @$core.pragma('dart2js:noInline')
   static Frame getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Frame>(create);
@@ -256,10 +228,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -270,10 +239,7 @@
   @$pb.TagNumber(2)
   $fixnum.Int64 get functionNameId => $_getI64(1);
   @$pb.TagNumber(2)
-  set functionNameId($fixnum.Int64 v) {
-    $_setInt64(1, v);
-  }
-
+  set functionNameId($fixnum.Int64 value) => $_setInt64(1, value);
   @$pb.TagNumber(2)
   $core.bool hasFunctionNameId() => $_has(1);
   @$pb.TagNumber(2)
@@ -282,10 +248,7 @@
   @$pb.TagNumber(3)
   $fixnum.Int64 get mappingId => $_getI64(2);
   @$pb.TagNumber(3)
-  set mappingId($fixnum.Int64 v) {
-    $_setInt64(2, v);
-  }
-
+  set mappingId($fixnum.Int64 value) => $_setInt64(2, value);
   @$pb.TagNumber(3)
   $core.bool hasMappingId() => $_has(2);
   @$pb.TagNumber(3)
@@ -294,10 +257,7 @@
   @$pb.TagNumber(4)
   $fixnum.Int64 get relPc => $_getI64(3);
   @$pb.TagNumber(4)
-  set relPc($fixnum.Int64 v) {
-    $_setInt64(3, v);
-  }
-
+  set relPc($fixnum.Int64 value) => $_setInt64(3, value);
   @$pb.TagNumber(4)
   $core.bool hasRelPc() => $_has(3);
   @$pb.TagNumber(4)
@@ -309,22 +269,20 @@
     $fixnum.Int64? iid,
     $core.Iterable<$fixnum.Int64>? frameIds,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (frameIds != null) {
-      $result.frameIds.addAll(frameIds);
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (frameIds != null) result.frameIds.addAll(frameIds);
+    return result;
   }
-  Callstack._() : super();
-  factory Callstack.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory Callstack.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  Callstack._();
+
+  factory Callstack.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory Callstack.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'Callstack',
@@ -337,22 +295,19 @@
         2, _omitFieldNames ? '' : 'frameIds', $pb.PbFieldType.PU6)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  Callstack clone() => Callstack()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  Callstack clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   Callstack copyWith(void Function(Callstack) updates) =>
       super.copyWith((message) => updates(message as Callstack)) as Callstack;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static Callstack create() => Callstack._();
+  @$core.override
   Callstack createEmptyInstance() => create();
-  static $pb.PbList<Callstack> createRepeated() => $pb.PbList<Callstack>();
   @$core.pragma('dart2js:noInline')
   static Callstack getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Callstack>(create);
@@ -361,10 +316,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -375,6 +327,7 @@
   $pb.PbList<$fixnum.Int64> get frameIds => $_getList(1);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbjson.dart
index 25262f0..7078038 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/profiling/profile_common.proto
-//
+// Generated from protos/perfetto/trace/profiling/profile_common.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbserver.dart
deleted file mode 100644
index a9f6713..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_common.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/profiling/profile_common.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'profile_common.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pb.dart
index 464f581..037c0dc 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/profiling/profile_packet.proto
-//
+// Generated from protos/perfetto/trace/profiling/profile_packet.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -24,20 +25,20 @@
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
-///  Packet emitted by the traced_perf sampling performance profiler, which
-///  gathers data via the perf_event_open syscall. Each packet contains an
-///  individual sample with a counter value, and optionally a
-///  callstack.
+/// Packet emitted by the traced_perf sampling performance profiler, which
+/// gathers data via the perf_event_open syscall. Each packet contains an
+/// individual sample with a counter value, and optionally a
+/// callstack.
 ///
-///  Timestamps are within the root packet. The config can specify the clock, or
-///  the implementation will default to CLOCK_MONOTONIC_RAW. Within the Android R
-///  timeframe, the default was CLOCK_BOOTTIME.
+/// Timestamps are within the root packet. The config can specify the clock, or
+/// the implementation will default to CLOCK_MONOTONIC_RAW. Within the Android R
+/// timeframe, the default was CLOCK_BOOTTIME.
 ///
-///  There are several distinct views of this message:
-///  * indication of kernel buffer data loss (kernel_records_lost set)
-///  * indication of skipped samples (sample_skipped_reason set)
-///  * notable event in the sampling implementation (producer_event set)
-///  * normal sample (timebase_count set, typically also callstack_iid)
+/// There are several distinct views of this message:
+/// * indication of kernel buffer data loss (kernel_records_lost set)
+/// * indication of skipped samples (sample_skipped_reason set)
+/// * notable event in the sampling implementation (producer_event set)
+/// * normal sample (timebase_count set, typically also callstack_iid)
 class PerfSample extends $pb.GeneratedMessage {
   factory PerfSample({
     $core.int? cpu,
@@ -45,58 +46,49 @@
     $core.int? tid,
     $fixnum.Int64? callstackIid,
   }) {
-    final $result = create();
-    if (cpu != null) {
-      $result.cpu = cpu;
-    }
-    if (pid != null) {
-      $result.pid = pid;
-    }
-    if (tid != null) {
-      $result.tid = tid;
-    }
-    if (callstackIid != null) {
-      $result.callstackIid = callstackIid;
-    }
-    return $result;
+    final result = create();
+    if (cpu != null) result.cpu = cpu;
+    if (pid != null) result.pid = pid;
+    if (tid != null) result.tid = tid;
+    if (callstackIid != null) result.callstackIid = callstackIid;
+    return result;
   }
-  PerfSample._() : super();
-  factory PerfSample.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory PerfSample.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  PerfSample._();
+
+  factory PerfSample.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory PerfSample.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'PerfSample',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..a<$core.int>(1, _omitFieldNames ? '' : 'cpu', $pb.PbFieldType.OU3)
-    ..a<$core.int>(2, _omitFieldNames ? '' : 'pid', $pb.PbFieldType.OU3)
-    ..a<$core.int>(3, _omitFieldNames ? '' : 'tid', $pb.PbFieldType.OU3)
+    ..aI(1, _omitFieldNames ? '' : 'cpu', fieldType: $pb.PbFieldType.OU3)
+    ..aI(2, _omitFieldNames ? '' : 'pid', fieldType: $pb.PbFieldType.OU3)
+    ..aI(3, _omitFieldNames ? '' : 'tid', fieldType: $pb.PbFieldType.OU3)
     ..a<$fixnum.Int64>(
         4, _omitFieldNames ? '' : 'callstackIid', $pb.PbFieldType.OU6,
         defaultOrMaker: $fixnum.Int64.ZERO)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  PerfSample clone() => PerfSample()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  PerfSample clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   PerfSample copyWith(void Function(PerfSample) updates) =>
       super.copyWith((message) => updates(message as PerfSample)) as PerfSample;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static PerfSample create() => PerfSample._();
+  @$core.override
   PerfSample createEmptyInstance() => create();
-  static $pb.PbList<PerfSample> createRepeated() => $pb.PbList<PerfSample>();
   @$core.pragma('dart2js:noInline')
   static PerfSample getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<PerfSample>(create);
@@ -105,10 +97,7 @@
   @$pb.TagNumber(1)
   $core.int get cpu => $_getIZ(0);
   @$pb.TagNumber(1)
-  set cpu($core.int v) {
-    $_setUnsignedInt32(0, v);
-  }
-
+  set cpu($core.int value) => $_setUnsignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasCpu() => $_has(0);
   @$pb.TagNumber(1)
@@ -117,10 +106,7 @@
   @$pb.TagNumber(2)
   $core.int get pid => $_getIZ(1);
   @$pb.TagNumber(2)
-  set pid($core.int v) {
-    $_setUnsignedInt32(1, v);
-  }
-
+  set pid($core.int value) => $_setUnsignedInt32(1, value);
   @$pb.TagNumber(2)
   $core.bool hasPid() => $_has(1);
   @$pb.TagNumber(2)
@@ -129,10 +115,7 @@
   @$pb.TagNumber(3)
   $core.int get tid => $_getIZ(2);
   @$pb.TagNumber(3)
-  set tid($core.int v) {
-    $_setUnsignedInt32(2, v);
-  }
-
+  set tid($core.int value) => $_setUnsignedInt32(2, value);
   @$pb.TagNumber(3)
   $core.bool hasTid() => $_has(2);
   @$pb.TagNumber(3)
@@ -143,16 +126,14 @@
   @$pb.TagNumber(4)
   $fixnum.Int64 get callstackIid => $_getI64(3);
   @$pb.TagNumber(4)
-  set callstackIid($fixnum.Int64 v) {
-    $_setInt64(3, v);
-  }
-
+  set callstackIid($fixnum.Int64 value) => $_setInt64(3, value);
   @$pb.TagNumber(4)
   $core.bool hasCallstackIid() => $_has(3);
   @$pb.TagNumber(4)
   void clearCallstackIid() => $_clearField(4);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbjson.dart
index d97d95a..cce5306 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/profiling/profile_packet.proto
-//
+// Generated from protos/perfetto/trace/profiling/profile_packet.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbserver.dart
deleted file mode 100644
index 019ab33..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/profiling/profile_packet.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/profiling/profile_packet.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'profile_packet.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pb.dart
index a7c3906..04fa47d 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,78 +6,76 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace.proto
-//
+// Generated from protos/perfetto/trace/trace.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import 'trace_packet.pb.dart' as $10;
+import 'trace_packet.pb.dart' as $0;
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
 class Trace extends $pb.GeneratedMessage {
   factory Trace({
-    $core.Iterable<$10.TracePacket>? packet,
+    $core.Iterable<$0.TracePacket>? packet,
   }) {
-    final $result = create();
-    if (packet != null) {
-      $result.packet.addAll(packet);
-    }
-    return $result;
+    final result = create();
+    if (packet != null) result.packet.addAll(packet);
+    return result;
   }
-  Trace._() : super();
-  factory Trace.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory Trace.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  Trace._();
+
+  factory Trace.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory Trace.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'Trace',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..pc<$10.TracePacket>(
-        1, _omitFieldNames ? '' : 'packet', $pb.PbFieldType.PM,
-        subBuilder: $10.TracePacket.create)
+    ..pPM<$0.TracePacket>(1, _omitFieldNames ? '' : 'packet',
+        subBuilder: $0.TracePacket.create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  Trace clone() => Trace()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  Trace clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   Trace copyWith(void Function(Trace) updates) =>
       super.copyWith((message) => updates(message as Trace)) as Trace;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static Trace create() => Trace._();
+  @$core.override
   Trace createEmptyInstance() => create();
-  static $pb.PbList<Trace> createRepeated() => $pb.PbList<Trace>();
   @$core.pragma('dart2js:noInline')
   static Trace getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Trace>(create);
   static Trace? _defaultInstance;
 
   @$pb.TagNumber(1)
-  $pb.PbList<$10.TracePacket> get packet => $_getList(0);
+  $pb.PbList<$0.TracePacket> get packet => $_getList(0);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbjson.dart
index c5d10e7..08e314d 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace.proto
-//
+// Generated from protos/perfetto/trace/trace.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbserver.dart
deleted file mode 100644
index aeafa2b..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'trace.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pb.dart
index 8d953a8..e7195a3 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,27 +6,28 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace_packet.proto
-//
+// Generated from protos/perfetto/trace/trace_packet.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:fixnum/fixnum.dart' as $fixnum;
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import 'clock_snapshot.pb.dart' as $6;
-import 'interned_data/interned_data.pb.dart' as $7;
-import 'profiling/profile_packet.pb.dart' as $9;
-import 'track_event/track_descriptor.pb.dart' as $8;
-import 'track_event/track_event.pb.dart' as $2;
+import 'clock_snapshot.pb.dart' as $0;
+import 'interned_data/interned_data.pb.dart' as $2;
+import 'profiling/profile_packet.pb.dart' as $4;
+import 'track_event/track_descriptor.pb.dart' as $3;
+import 'track_event/track_event.pb.dart' as $1;
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
@@ -45,76 +46,61 @@
   notSet
 }
 
-///  TracePacket is the root object of a Perfetto trace.
-///  A Perfetto trace is a linear sequence of TracePacket(s).
+/// TracePacket is the root object of a Perfetto trace.
+/// A Perfetto trace is a linear sequence of TracePacket(s).
 ///
-///  The tracing service guarantees that all TracePacket(s) written by a given
-///  TraceWriter are seen in-order, without gaps or duplicates. If, for any
-///  reason, a TraceWriter sequence becomes invalid, no more packets are returned
-///  to the Consumer (or written into the trace file).
-///  TracePacket(s) written by different TraceWriter(s), hence even different
-///  data sources, can be seen in arbitrary order.
-///  The consumer can re-establish a total order, if interested, using the packet
-///  timestamps, after having synchronized the different clocks onto a global
-///  clock.
+/// The tracing service guarantees that all TracePacket(s) written by a given
+/// TraceWriter are seen in-order, without gaps or duplicates. If, for any
+/// reason, a TraceWriter sequence becomes invalid, no more packets are returned
+/// to the Consumer (or written into the trace file).
+/// TracePacket(s) written by different TraceWriter(s), hence even different
+/// data sources, can be seen in arbitrary order.
+/// The consumer can re-establish a total order, if interested, using the packet
+/// timestamps, after having synchronized the different clocks onto a global
+/// clock.
 ///
-///  The tracing service is agnostic of the content of TracePacket, with the
-///  exception of few fields (e.g.. trusted_*, trace_config) that are written by
-///  the service itself.
+/// The tracing service is agnostic of the content of TracePacket, with the
+/// exception of few fields (e.g.. trusted_*, trace_config) that are written by
+/// the service itself.
 ///
-///  See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
+/// See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
 ///
-///  Next reserved id: 14 (up to 15).
-///  Next id: 88.
+/// Next reserved id: 14 (up to 15).
+/// Next id: 88.
 class TracePacket extends $pb.GeneratedMessage {
   factory TracePacket({
-    $6.ClockSnapshot? clockSnapshot,
+    $0.ClockSnapshot? clockSnapshot,
     $fixnum.Int64? timestamp,
     $core.int? trustedPacketSequenceId,
-    $2.TrackEvent? trackEvent,
-    $7.InternedData? internedData,
+    $1.TrackEvent? trackEvent,
+    $2.InternedData? internedData,
     $core.int? sequenceFlags,
     $core.int? timestampClockId,
-    $8.TrackDescriptor? trackDescriptor,
-    $9.PerfSample? perfSample,
+    $3.TrackDescriptor? trackDescriptor,
+    $4.PerfSample? perfSample,
   }) {
-    final $result = create();
-    if (clockSnapshot != null) {
-      $result.clockSnapshot = clockSnapshot;
-    }
-    if (timestamp != null) {
-      $result.timestamp = timestamp;
-    }
-    if (trustedPacketSequenceId != null) {
-      $result.trustedPacketSequenceId = trustedPacketSequenceId;
-    }
-    if (trackEvent != null) {
-      $result.trackEvent = trackEvent;
-    }
-    if (internedData != null) {
-      $result.internedData = internedData;
-    }
-    if (sequenceFlags != null) {
-      $result.sequenceFlags = sequenceFlags;
-    }
-    if (timestampClockId != null) {
-      $result.timestampClockId = timestampClockId;
-    }
-    if (trackDescriptor != null) {
-      $result.trackDescriptor = trackDescriptor;
-    }
-    if (perfSample != null) {
-      $result.perfSample = perfSample;
-    }
-    return $result;
+    final result = create();
+    if (clockSnapshot != null) result.clockSnapshot = clockSnapshot;
+    if (timestamp != null) result.timestamp = timestamp;
+    if (trustedPacketSequenceId != null)
+      result.trustedPacketSequenceId = trustedPacketSequenceId;
+    if (trackEvent != null) result.trackEvent = trackEvent;
+    if (internedData != null) result.internedData = internedData;
+    if (sequenceFlags != null) result.sequenceFlags = sequenceFlags;
+    if (timestampClockId != null) result.timestampClockId = timestampClockId;
+    if (trackDescriptor != null) result.trackDescriptor = trackDescriptor;
+    if (perfSample != null) result.perfSample = perfSample;
+    return result;
   }
-  TracePacket._() : super();
-  factory TracePacket.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory TracePacket.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  TracePacket._();
+
+  factory TracePacket.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory TracePacket.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static const $core.Map<$core.int, TracePacket_Data> _TracePacket_DataByTag = {
     6: TracePacket_Data.clockSnapshot,
@@ -135,70 +121,74 @@
       createEmptyInstance: create)
     ..oo(0, [6, 11, 60, 66])
     ..oo(1, [10])
-    ..aOM<$6.ClockSnapshot>(6, _omitFieldNames ? '' : 'clockSnapshot',
-        subBuilder: $6.ClockSnapshot.create)
+    ..aOM<$0.ClockSnapshot>(6, _omitFieldNames ? '' : 'clockSnapshot',
+        subBuilder: $0.ClockSnapshot.create)
     ..a<$fixnum.Int64>(
         8, _omitFieldNames ? '' : 'timestamp', $pb.PbFieldType.OU6,
         defaultOrMaker: $fixnum.Int64.ZERO)
-    ..a<$core.int>(10, _omitFieldNames ? '' : 'trustedPacketSequenceId',
-        $pb.PbFieldType.OU3)
-    ..aOM<$2.TrackEvent>(11, _omitFieldNames ? '' : 'trackEvent',
-        subBuilder: $2.TrackEvent.create)
-    ..aOM<$7.InternedData>(12, _omitFieldNames ? '' : 'internedData',
-        subBuilder: $7.InternedData.create)
-    ..a<$core.int>(
-        13, _omitFieldNames ? '' : 'sequenceFlags', $pb.PbFieldType.OU3)
-    ..a<$core.int>(
-        58, _omitFieldNames ? '' : 'timestampClockId', $pb.PbFieldType.OU3)
-    ..aOM<$8.TrackDescriptor>(60, _omitFieldNames ? '' : 'trackDescriptor',
-        subBuilder: $8.TrackDescriptor.create)
-    ..aOM<$9.PerfSample>(66, _omitFieldNames ? '' : 'perfSample',
-        subBuilder: $9.PerfSample.create)
+    ..aI(10, _omitFieldNames ? '' : 'trustedPacketSequenceId',
+        fieldType: $pb.PbFieldType.OU3)
+    ..aOM<$1.TrackEvent>(11, _omitFieldNames ? '' : 'trackEvent',
+        subBuilder: $1.TrackEvent.create)
+    ..aOM<$2.InternedData>(12, _omitFieldNames ? '' : 'internedData',
+        subBuilder: $2.InternedData.create)
+    ..aI(13, _omitFieldNames ? '' : 'sequenceFlags',
+        fieldType: $pb.PbFieldType.OU3)
+    ..aI(58, _omitFieldNames ? '' : 'timestampClockId',
+        fieldType: $pb.PbFieldType.OU3)
+    ..aOM<$3.TrackDescriptor>(60, _omitFieldNames ? '' : 'trackDescriptor',
+        subBuilder: $3.TrackDescriptor.create)
+    ..aOM<$4.PerfSample>(66, _omitFieldNames ? '' : 'perfSample',
+        subBuilder: $4.PerfSample.create)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  TracePacket clone() => TracePacket()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  TracePacket clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   TracePacket copyWith(void Function(TracePacket) updates) =>
       super.copyWith((message) => updates(message as TracePacket))
           as TracePacket;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static TracePacket create() => TracePacket._();
+  @$core.override
   TracePacket createEmptyInstance() => create();
-  static $pb.PbList<TracePacket> createRepeated() => $pb.PbList<TracePacket>();
   @$core.pragma('dart2js:noInline')
   static TracePacket getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<TracePacket>(create);
   static TracePacket? _defaultInstance;
 
+  @$pb.TagNumber(6)
+  @$pb.TagNumber(11)
+  @$pb.TagNumber(60)
+  @$pb.TagNumber(66)
   TracePacket_Data whichData() => _TracePacket_DataByTag[$_whichOneof(0)]!;
+  @$pb.TagNumber(6)
+  @$pb.TagNumber(11)
+  @$pb.TagNumber(60)
+  @$pb.TagNumber(66)
   void clearData() => $_clearField($_whichOneof(0));
 
+  @$pb.TagNumber(10)
   TracePacket_OptionalTrustedPacketSequenceId
       whichOptionalTrustedPacketSequenceId() =>
           _TracePacket_OptionalTrustedPacketSequenceIdByTag[$_whichOneof(1)]!;
+  @$pb.TagNumber(10)
   void clearOptionalTrustedPacketSequenceId() => $_clearField($_whichOneof(1));
 
   @$pb.TagNumber(6)
-  $6.ClockSnapshot get clockSnapshot => $_getN(0);
+  $0.ClockSnapshot get clockSnapshot => $_getN(0);
   @$pb.TagNumber(6)
-  set clockSnapshot($6.ClockSnapshot v) {
-    $_setField(6, v);
-  }
-
+  set clockSnapshot($0.ClockSnapshot value) => $_setField(6, value);
   @$pb.TagNumber(6)
   $core.bool hasClockSnapshot() => $_has(0);
   @$pb.TagNumber(6)
   void clearClockSnapshot() => $_clearField(6);
   @$pb.TagNumber(6)
-  $6.ClockSnapshot ensureClockSnapshot() => $_ensure(0);
+  $0.ClockSnapshot ensureClockSnapshot() => $_ensure(0);
 
   /// The timestamp of the TracePacket.
   /// By default this timestamps refers to the trace clock (CLOCK_BOOTTIME on
@@ -209,10 +199,7 @@
   @$pb.TagNumber(8)
   $fixnum.Int64 get timestamp => $_getI64(1);
   @$pb.TagNumber(8)
-  set timestamp($fixnum.Int64 v) {
-    $_setInt64(1, v);
-  }
-
+  set timestamp($fixnum.Int64 value) => $_setInt64(1, value);
   @$pb.TagNumber(8)
   $core.bool hasTimestamp() => $_has(1);
   @$pb.TagNumber(8)
@@ -221,28 +208,22 @@
   @$pb.TagNumber(10)
   $core.int get trustedPacketSequenceId => $_getIZ(2);
   @$pb.TagNumber(10)
-  set trustedPacketSequenceId($core.int v) {
-    $_setUnsignedInt32(2, v);
-  }
-
+  set trustedPacketSequenceId($core.int value) => $_setUnsignedInt32(2, value);
   @$pb.TagNumber(10)
   $core.bool hasTrustedPacketSequenceId() => $_has(2);
   @$pb.TagNumber(10)
   void clearTrustedPacketSequenceId() => $_clearField(10);
 
   @$pb.TagNumber(11)
-  $2.TrackEvent get trackEvent => $_getN(3);
+  $1.TrackEvent get trackEvent => $_getN(3);
   @$pb.TagNumber(11)
-  set trackEvent($2.TrackEvent v) {
-    $_setField(11, v);
-  }
-
+  set trackEvent($1.TrackEvent value) => $_setField(11, value);
   @$pb.TagNumber(11)
   $core.bool hasTrackEvent() => $_has(3);
   @$pb.TagNumber(11)
   void clearTrackEvent() => $_clearField(11);
   @$pb.TagNumber(11)
-  $2.TrackEvent ensureTrackEvent() => $_ensure(3);
+  $1.TrackEvent ensureTrackEvent() => $_ensure(3);
 
   /// Incrementally emitted interned data, valid only on the packet's sequence
   /// (packets with the same |trusted_packet_sequence_id|). The writer will
@@ -250,26 +231,20 @@
   /// it (since the last reset of interning state). It may also be emitted
   /// proactively in advance of referring to them in later packets.
   @$pb.TagNumber(12)
-  $7.InternedData get internedData => $_getN(4);
+  $2.InternedData get internedData => $_getN(4);
   @$pb.TagNumber(12)
-  set internedData($7.InternedData v) {
-    $_setField(12, v);
-  }
-
+  set internedData($2.InternedData value) => $_setField(12, value);
   @$pb.TagNumber(12)
   $core.bool hasInternedData() => $_has(4);
   @$pb.TagNumber(12)
   void clearInternedData() => $_clearField(12);
   @$pb.TagNumber(12)
-  $7.InternedData ensureInternedData() => $_ensure(4);
+  $2.InternedData ensureInternedData() => $_ensure(4);
 
   @$pb.TagNumber(13)
   $core.int get sequenceFlags => $_getIZ(5);
   @$pb.TagNumber(13)
-  set sequenceFlags($core.int v) {
-    $_setUnsignedInt32(5, v);
-  }
-
+  set sequenceFlags($core.int value) => $_setUnsignedInt32(5, value);
   @$pb.TagNumber(13)
   $core.bool hasSequenceFlags() => $_has(5);
   @$pb.TagNumber(13)
@@ -283,10 +258,7 @@
   @$pb.TagNumber(58)
   $core.int get timestampClockId => $_getIZ(6);
   @$pb.TagNumber(58)
-  set timestampClockId($core.int v) {
-    $_setUnsignedInt32(6, v);
-  }
-
+  set timestampClockId($core.int value) => $_setUnsignedInt32(6, value);
   @$pb.TagNumber(58)
   $core.bool hasTimestampClockId() => $_has(6);
   @$pb.TagNumber(58)
@@ -294,34 +266,29 @@
 
   /// Only used by TrackEvent.
   @$pb.TagNumber(60)
-  $8.TrackDescriptor get trackDescriptor => $_getN(7);
+  $3.TrackDescriptor get trackDescriptor => $_getN(7);
   @$pb.TagNumber(60)
-  set trackDescriptor($8.TrackDescriptor v) {
-    $_setField(60, v);
-  }
-
+  set trackDescriptor($3.TrackDescriptor value) => $_setField(60, value);
   @$pb.TagNumber(60)
   $core.bool hasTrackDescriptor() => $_has(7);
   @$pb.TagNumber(60)
   void clearTrackDescriptor() => $_clearField(60);
   @$pb.TagNumber(60)
-  $8.TrackDescriptor ensureTrackDescriptor() => $_ensure(7);
+  $3.TrackDescriptor ensureTrackDescriptor() => $_ensure(7);
 
   @$pb.TagNumber(66)
-  $9.PerfSample get perfSample => $_getN(8);
+  $4.PerfSample get perfSample => $_getN(8);
   @$pb.TagNumber(66)
-  set perfSample($9.PerfSample v) {
-    $_setField(66, v);
-  }
-
+  set perfSample($4.PerfSample value) => $_setField(66, value);
   @$pb.TagNumber(66)
   $core.bool hasPerfSample() => $_has(8);
   @$pb.TagNumber(66)
   void clearPerfSample() => $_clearField(66);
   @$pb.TagNumber(66)
-  $9.PerfSample ensurePerfSample() => $_ensure(8);
+  $4.PerfSample ensurePerfSample() => $_ensure(8);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbenum.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbenum.dart
index 2ddf7f1..df2d2f1 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbenum.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbenum.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace_packet.proto
-//
+// Generated from protos/perfetto/trace/trace_packet.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -25,20 +26,20 @@
   static const TracePacket_SequenceFlags SEQ_UNSPECIFIED =
       TracePacket_SequenceFlags._(0, _omitEnumNames ? '' : 'SEQ_UNSPECIFIED');
 
-  ///  Set by the writer to indicate that it will re-emit any incremental data
-  ///  for the packet's sequence before referring to it again. This includes
-  ///  interned data as well as periodically emitted data like
-  ///  Process/ThreadDescriptors. This flag only affects the current packet
-  ///  sequence (see |trusted_packet_sequence_id|).
+  /// Set by the writer to indicate that it will re-emit any incremental data
+  /// for the packet's sequence before referring to it again. This includes
+  /// interned data as well as periodically emitted data like
+  /// Process/ThreadDescriptors. This flag only affects the current packet
+  /// sequence (see |trusted_packet_sequence_id|).
   ///
-  ///  When set, this TracePacket and subsequent TracePackets on the same
-  ///  sequence will not refer to any incremental data emitted before this
-  ///  TracePacket. For example, previously emitted interned data will be
-  ///  re-emitted if it is referred to again.
+  /// When set, this TracePacket and subsequent TracePackets on the same
+  /// sequence will not refer to any incremental data emitted before this
+  /// TracePacket. For example, previously emitted interned data will be
+  /// re-emitted if it is referred to again.
   ///
-  ///  When the reader detects packet loss (|previous_packet_dropped|), it needs
-  ///  to skip packets in the sequence until the next one with this flag set, to
-  ///  ensure intact incremental data.
+  /// When the reader detects packet loss (|previous_packet_dropped|), it needs
+  /// to skip packets in the sequence until the next one with this flag set, to
+  /// ensure intact incremental data.
   static const TracePacket_SequenceFlags SEQ_INCREMENTAL_STATE_CLEARED =
       TracePacket_SequenceFlags._(
           1, _omitEnumNames ? '' : 'SEQ_INCREMENTAL_STATE_CLEARED');
@@ -59,11 +60,13 @@
     SEQ_NEEDS_INCREMENTAL_STATE,
   ];
 
-  static final $core.Map<$core.int, TracePacket_SequenceFlags> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static TracePacket_SequenceFlags? valueOf($core.int value) => _byValue[value];
+  static final $core.List<TracePacket_SequenceFlags?> _byValue =
+      $pb.ProtobufEnum.$_initByValueList(values, 2);
+  static TracePacket_SequenceFlags? valueOf($core.int value) =>
+      value < 0 || value >= _byValue.length ? null : _byValue[value];
 
-  const TracePacket_SequenceFlags._(super.v, super.n);
+  const TracePacket_SequenceFlags._(super.value, super.name);
 }
 
-const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
+const $core.bool _omitEnumNames =
+    $core.bool.fromEnvironment('protobuf.omit_enum_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbjson.dart
index bdbbc55..73f4671 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace_packet.proto
-//
+// Generated from protos/perfetto/trace/trace_packet.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbserver.dart
deleted file mode 100644
index d9e7960..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/trace_packet.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/trace_packet.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'trace_packet.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pb.dart
index 75c4866..39783df 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/debug_annotation.proto
-//
+// Generated from protos/perfetto/trace/track_event/debug_annotation.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -33,47 +34,47 @@
   notSet
 }
 
-///  Proto representation of untyped key/value annotations provided in TRACE_EVENT
-///  macros. Users of the Perfetto SDK should prefer to use the
-///  perfetto::TracedValue API to fill these protos, rather than filling them
-///  manually.
+/// Proto representation of untyped key/value annotations provided in TRACE_EVENT
+/// macros. Users of the Perfetto SDK should prefer to use the
+/// perfetto::TracedValue API to fill these protos, rather than filling them
+/// manually.
 ///
-///  Debug annotations are intended for debug use and are not considered a stable
-///  API of the trace contents. Trace-based metrics that use debug annotation
-///  values are prone to breakage, so please rely on typed TrackEvent fields for
-///  these instead.
+/// Debug annotations are intended for debug use and are not considered a stable
+/// API of the trace contents. Trace-based metrics that use debug annotation
+/// values are prone to breakage, so please rely on typed TrackEvent fields for
+/// these instead.
 ///
-///  DebugAnnotations support nested arrays and dictionaries. Each entry is
-///  encoded as a single DebugAnnotation message. Only dictionary entries
-///  set the "name" field. The TrackEvent message forms an implicit root
-///  dictionary.
+/// DebugAnnotations support nested arrays and dictionaries. Each entry is
+/// encoded as a single DebugAnnotation message. Only dictionary entries
+/// set the "name" field. The TrackEvent message forms an implicit root
+/// dictionary.
 ///
-///  Example TrackEvent with nested annotations:
-///    track_event {
-///      debug_annotations {
-///        name: "foo"
-///        dict_entries {
-///          name: "a"
-///          bool_value: true
-///        }
-///        dict_entries {
-///          name: "b"
-///          int_value: 123
-///        }
-///      }
-///      debug_annotations {
-///        name: "bar"
-///        array_values {
-///          string_value: "hello"
-///        }
-///        array_values {
-///          string_value: "world"
-///        }
-///      }
-///    }
+/// Example TrackEvent with nested annotations:
+///   track_event {
+///     debug_annotations {
+///       name: "foo"
+///       dict_entries {
+///         name: "a"
+///         bool_value: true
+///       }
+///       dict_entries {
+///         name: "b"
+///         int_value: 123
+///       }
+///     }
+///     debug_annotations {
+///       name: "bar"
+///       array_values {
+///         string_value: "hello"
+///       }
+///       array_values {
+///         string_value: "world"
+///       }
+///     }
+///   }
 ///
-///  Next ID: 17.
-///  Reserved ID: 15
+/// Next ID: 17.
+/// Reserved ID: 15
 class DebugAnnotation extends $pb.GeneratedMessage {
   factory DebugAnnotation({
     $fixnum.Int64? nameIid,
@@ -82,31 +83,23 @@
     $core.String? name,
     $fixnum.Int64? stringValueIid,
   }) {
-    final $result = create();
-    if (nameIid != null) {
-      $result.nameIid = nameIid;
-    }
-    if (stringValue != null) {
-      $result.stringValue = stringValue;
-    }
-    if (legacyJsonValue != null) {
-      $result.legacyJsonValue = legacyJsonValue;
-    }
-    if (name != null) {
-      $result.name = name;
-    }
-    if (stringValueIid != null) {
-      $result.stringValueIid = stringValueIid;
-    }
-    return $result;
+    final result = create();
+    if (nameIid != null) result.nameIid = nameIid;
+    if (stringValue != null) result.stringValue = stringValue;
+    if (legacyJsonValue != null) result.legacyJsonValue = legacyJsonValue;
+    if (name != null) result.name = name;
+    if (stringValueIid != null) result.stringValueIid = stringValueIid;
+    return result;
   }
-  DebugAnnotation._() : super();
-  factory DebugAnnotation.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory DebugAnnotation.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  DebugAnnotation._();
+
+  factory DebugAnnotation.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory DebugAnnotation.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static const $core.Map<$core.int, DebugAnnotation_NameField>
       _DebugAnnotation_NameFieldByTag = {
@@ -138,45 +131,48 @@
         defaultOrMaker: $fixnum.Int64.ZERO)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  DebugAnnotation clone() => DebugAnnotation()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  DebugAnnotation clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   DebugAnnotation copyWith(void Function(DebugAnnotation) updates) =>
       super.copyWith((message) => updates(message as DebugAnnotation))
           as DebugAnnotation;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static DebugAnnotation create() => DebugAnnotation._();
+  @$core.override
   DebugAnnotation createEmptyInstance() => create();
-  static $pb.PbList<DebugAnnotation> createRepeated() =>
-      $pb.PbList<DebugAnnotation>();
   @$core.pragma('dart2js:noInline')
   static DebugAnnotation getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<DebugAnnotation>(create);
   static DebugAnnotation? _defaultInstance;
 
+  @$pb.TagNumber(1)
+  @$pb.TagNumber(10)
   DebugAnnotation_NameField whichNameField() =>
       _DebugAnnotation_NameFieldByTag[$_whichOneof(0)]!;
+  @$pb.TagNumber(1)
+  @$pb.TagNumber(10)
   void clearNameField() => $_clearField($_whichOneof(0));
 
+  @$pb.TagNumber(6)
+  @$pb.TagNumber(9)
+  @$pb.TagNumber(17)
   DebugAnnotation_Value whichValue() =>
       _DebugAnnotation_ValueByTag[$_whichOneof(1)]!;
+  @$pb.TagNumber(6)
+  @$pb.TagNumber(9)
+  @$pb.TagNumber(17)
   void clearValue() => $_clearField($_whichOneof(1));
 
   /// interned DebugAnnotationName.
   @$pb.TagNumber(1)
   $fixnum.Int64 get nameIid => $_getI64(0);
   @$pb.TagNumber(1)
-  set nameIid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set nameIid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasNameIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -186,10 +182,7 @@
   @$pb.TagNumber(6)
   $core.String get stringValue => $_getSZ(1);
   @$pb.TagNumber(6)
-  set stringValue($core.String v) {
-    $_setString(1, v);
-  }
-
+  set stringValue($core.String value) => $_setString(1, value);
   @$pb.TagNumber(6)
   $core.bool hasStringValue() => $_has(1);
   @$pb.TagNumber(6)
@@ -200,10 +193,7 @@
   @$pb.TagNumber(9)
   $core.String get legacyJsonValue => $_getSZ(2);
   @$pb.TagNumber(9)
-  set legacyJsonValue($core.String v) {
-    $_setString(2, v);
-  }
-
+  set legacyJsonValue($core.String value) => $_setString(2, value);
   @$pb.TagNumber(9)
   $core.bool hasLegacyJsonValue() => $_has(2);
   @$pb.TagNumber(9)
@@ -213,10 +203,7 @@
   @$pb.TagNumber(10)
   $core.String get name => $_getSZ(3);
   @$pb.TagNumber(10)
-  set name($core.String v) {
-    $_setString(3, v);
-  }
-
+  set name($core.String value) => $_setString(3, value);
   @$pb.TagNumber(10)
   $core.bool hasName() => $_has(3);
   @$pb.TagNumber(10)
@@ -226,10 +213,7 @@
   @$pb.TagNumber(17)
   $fixnum.Int64 get stringValueIid => $_getI64(4);
   @$pb.TagNumber(17)
-  set stringValueIid($fixnum.Int64 v) {
-    $_setInt64(4, v);
-  }
-
+  set stringValueIid($fixnum.Int64 value) => $_setInt64(4, value);
   @$pb.TagNumber(17)
   $core.bool hasStringValueIid() => $_has(4);
   @$pb.TagNumber(17)
@@ -241,22 +225,20 @@
     $fixnum.Int64? iid,
     $core.String? name,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (name != null) {
-      $result.name = name;
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (name != null) result.name = name;
+    return result;
   }
-  DebugAnnotationName._() : super();
-  factory DebugAnnotationName.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory DebugAnnotationName.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  DebugAnnotationName._();
+
+  factory DebugAnnotationName.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory DebugAnnotationName.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'DebugAnnotationName',
@@ -268,24 +250,20 @@
     ..aOS(2, _omitFieldNames ? '' : 'name')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  DebugAnnotationName clone() => DebugAnnotationName()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  DebugAnnotationName clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   DebugAnnotationName copyWith(void Function(DebugAnnotationName) updates) =>
       super.copyWith((message) => updates(message as DebugAnnotationName))
           as DebugAnnotationName;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static DebugAnnotationName create() => DebugAnnotationName._();
+  @$core.override
   DebugAnnotationName createEmptyInstance() => create();
-  static $pb.PbList<DebugAnnotationName> createRepeated() =>
-      $pb.PbList<DebugAnnotationName>();
   @$core.pragma('dart2js:noInline')
   static DebugAnnotationName getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<DebugAnnotationName>(create);
@@ -294,10 +272,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -306,16 +281,14 @@
   @$pb.TagNumber(2)
   $core.String get name => $_getSZ(1);
   @$pb.TagNumber(2)
-  set name($core.String v) {
-    $_setString(1, v);
-  }
-
+  set name($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasName() => $_has(1);
   @$pb.TagNumber(2)
   void clearName() => $_clearField(2);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbjson.dart
index 98a4b97..1595e97 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/debug_annotation.proto
-//
+// Generated from protos/perfetto/trace/track_event/debug_annotation.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbserver.dart
deleted file mode 100644
index 589ca4f..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/debug_annotation.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/debug_annotation.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'debug_annotation.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pb.dart
index aa5b823..ccddd32 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/process_descriptor.proto
-//
+// Generated from protos/perfetto/trace/track_event/process_descriptor.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -23,59 +24,53 @@
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
-///  Describes a process's attributes. Emitted as part of a TrackDescriptor,
-///  usually by the process's main thread.
+/// Describes a process's attributes. Emitted as part of a TrackDescriptor,
+/// usually by the process's main thread.
 ///
-///  Next id: 9.
+/// Next id: 9.
 class ProcessDescriptor extends $pb.GeneratedMessage {
   factory ProcessDescriptor({
     $core.int? pid,
     $core.String? processName,
   }) {
-    final $result = create();
-    if (pid != null) {
-      $result.pid = pid;
-    }
-    if (processName != null) {
-      $result.processName = processName;
-    }
-    return $result;
+    final result = create();
+    if (pid != null) result.pid = pid;
+    if (processName != null) result.processName = processName;
+    return result;
   }
-  ProcessDescriptor._() : super();
-  factory ProcessDescriptor.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ProcessDescriptor.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ProcessDescriptor._();
+
+  factory ProcessDescriptor.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ProcessDescriptor.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ProcessDescriptor',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..a<$core.int>(1, _omitFieldNames ? '' : 'pid', $pb.PbFieldType.O3)
+    ..aI(1, _omitFieldNames ? '' : 'pid')
     ..aOS(6, _omitFieldNames ? '' : 'processName')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ProcessDescriptor clone() => ProcessDescriptor()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ProcessDescriptor clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ProcessDescriptor copyWith(void Function(ProcessDescriptor) updates) =>
       super.copyWith((message) => updates(message as ProcessDescriptor))
           as ProcessDescriptor;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ProcessDescriptor create() => ProcessDescriptor._();
+  @$core.override
   ProcessDescriptor createEmptyInstance() => create();
-  static $pb.PbList<ProcessDescriptor> createRepeated() =>
-      $pb.PbList<ProcessDescriptor>();
   @$core.pragma('dart2js:noInline')
   static ProcessDescriptor getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ProcessDescriptor>(create);
@@ -84,10 +79,7 @@
   @$pb.TagNumber(1)
   $core.int get pid => $_getIZ(0);
   @$pb.TagNumber(1)
-  set pid($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set pid($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasPid() => $_has(0);
   @$pb.TagNumber(1)
@@ -96,16 +88,14 @@
   @$pb.TagNumber(6)
   $core.String get processName => $_getSZ(1);
   @$pb.TagNumber(6)
-  set processName($core.String v) {
-    $_setString(1, v);
-  }
-
+  set processName($core.String value) => $_setString(1, value);
   @$pb.TagNumber(6)
   $core.bool hasProcessName() => $_has(1);
   @$pb.TagNumber(6)
   void clearProcessName() => $_clearField(6);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbjson.dart
index a35a6b0..f96cb0e 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/process_descriptor.proto
-//
+// Generated from protos/perfetto/trace/track_event/process_descriptor.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbserver.dart
deleted file mode 100644
index 462fcb3..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/process_descriptor.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/process_descriptor.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'process_descriptor.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pb.dart
index 8a8588a..4c95be9 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/thread_descriptor.proto
-//
+// Generated from protos/perfetto/trace/track_event/thread_descriptor.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -23,64 +24,56 @@
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
-///  Describes a thread's attributes. Emitted as part of a TrackDescriptor,
-///  usually by the thread's trace writer.
+/// Describes a thread's attributes. Emitted as part of a TrackDescriptor,
+/// usually by the thread's trace writer.
 ///
-///  Next id: 9.
+/// Next id: 9.
 class ThreadDescriptor extends $pb.GeneratedMessage {
   factory ThreadDescriptor({
     $core.int? pid,
     $core.int? tid,
     $core.String? threadName,
   }) {
-    final $result = create();
-    if (pid != null) {
-      $result.pid = pid;
-    }
-    if (tid != null) {
-      $result.tid = tid;
-    }
-    if (threadName != null) {
-      $result.threadName = threadName;
-    }
-    return $result;
+    final result = create();
+    if (pid != null) result.pid = pid;
+    if (tid != null) result.tid = tid;
+    if (threadName != null) result.threadName = threadName;
+    return result;
   }
-  ThreadDescriptor._() : super();
-  factory ThreadDescriptor.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory ThreadDescriptor.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  ThreadDescriptor._();
+
+  factory ThreadDescriptor.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory ThreadDescriptor.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'ThreadDescriptor',
       package:
           const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
       createEmptyInstance: create)
-    ..a<$core.int>(1, _omitFieldNames ? '' : 'pid', $pb.PbFieldType.O3)
-    ..a<$core.int>(2, _omitFieldNames ? '' : 'tid', $pb.PbFieldType.O3)
+    ..aI(1, _omitFieldNames ? '' : 'pid')
+    ..aI(2, _omitFieldNames ? '' : 'tid')
     ..aOS(5, _omitFieldNames ? '' : 'threadName')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  ThreadDescriptor clone() => ThreadDescriptor()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  ThreadDescriptor clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   ThreadDescriptor copyWith(void Function(ThreadDescriptor) updates) =>
       super.copyWith((message) => updates(message as ThreadDescriptor))
           as ThreadDescriptor;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static ThreadDescriptor create() => ThreadDescriptor._();
+  @$core.override
   ThreadDescriptor createEmptyInstance() => create();
-  static $pb.PbList<ThreadDescriptor> createRepeated() =>
-      $pb.PbList<ThreadDescriptor>();
   @$core.pragma('dart2js:noInline')
   static ThreadDescriptor getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<ThreadDescriptor>(create);
@@ -89,10 +82,7 @@
   @$pb.TagNumber(1)
   $core.int get pid => $_getIZ(0);
   @$pb.TagNumber(1)
-  set pid($core.int v) {
-    $_setSignedInt32(0, v);
-  }
-
+  set pid($core.int value) => $_setSignedInt32(0, value);
   @$pb.TagNumber(1)
   $core.bool hasPid() => $_has(0);
   @$pb.TagNumber(1)
@@ -101,10 +91,7 @@
   @$pb.TagNumber(2)
   $core.int get tid => $_getIZ(1);
   @$pb.TagNumber(2)
-  set tid($core.int v) {
-    $_setSignedInt32(1, v);
-  }
-
+  set tid($core.int value) => $_setSignedInt32(1, value);
   @$pb.TagNumber(2)
   $core.bool hasTid() => $_has(1);
   @$pb.TagNumber(2)
@@ -113,16 +100,14 @@
   @$pb.TagNumber(5)
   $core.String get threadName => $_getSZ(2);
   @$pb.TagNumber(5)
-  set threadName($core.String v) {
-    $_setString(2, v);
-  }
-
+  set threadName($core.String value) => $_setString(2, value);
   @$pb.TagNumber(5)
   $core.bool hasThreadName() => $_has(2);
   @$pb.TagNumber(5)
   void clearThreadName() => $_clearField(5);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbjson.dart
index 8e7ada8..955060e 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/thread_descriptor.proto
-//
+// Generated from protos/perfetto/trace/track_event/thread_descriptor.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbserver.dart
deleted file mode 100644
index 1a9546d..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/thread_descriptor.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/thread_descriptor.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'thread_descriptor.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pb.dart
index 55bccab..2f39799 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,74 +6,67 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_descriptor.proto
-//
+// Generated from protos/perfetto/trace/track_event/track_descriptor.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:fixnum/fixnum.dart' as $fixnum;
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import 'process_descriptor.pb.dart' as $4;
-import 'thread_descriptor.pb.dart' as $5;
+import 'process_descriptor.pb.dart' as $0;
+import 'thread_descriptor.pb.dart' as $1;
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
 
-///  Defines a track for TrackEvents. Slices and instant events on the same track
-///  will be nested based on their timestamps, see TrackEvent::Type.
+/// Defines a track for TrackEvents. Slices and instant events on the same track
+/// will be nested based on their timestamps, see TrackEvent::Type.
 ///
-///  A TrackDescriptor only needs to be emitted by one trace writer / producer and
-///  is valid for the entirety of the trace. To ensure the descriptor isn't lost
-///  when the ring buffer wraps, it should be reemitted whenever incremental state
-///  is cleared.
+/// A TrackDescriptor only needs to be emitted by one trace writer / producer and
+/// is valid for the entirety of the trace. To ensure the descriptor isn't lost
+/// when the ring buffer wraps, it should be reemitted whenever incremental state
+/// is cleared.
 ///
-///  As a fallback, TrackEvents emitted without an explicit track association will
-///  be associated with an implicit trace-global track (uuid = 0), see also
-///  |TrackEvent::track_uuid|. It is possible but not necessary to emit a
-///  TrackDescriptor for this implicit track.
+/// As a fallback, TrackEvents emitted without an explicit track association will
+/// be associated with an implicit trace-global track (uuid = 0), see also
+/// |TrackEvent::track_uuid|. It is possible but not necessary to emit a
+/// TrackDescriptor for this implicit track.
 ///
-///  Next id: 9.
+/// Next id: 9.
 class TrackDescriptor extends $pb.GeneratedMessage {
   factory TrackDescriptor({
     $fixnum.Int64? uuid,
     $core.String? name,
-    $4.ProcessDescriptor? process,
-    $5.ThreadDescriptor? thread,
+    $0.ProcessDescriptor? process,
+    $1.ThreadDescriptor? thread,
     $fixnum.Int64? parentUuid,
   }) {
-    final $result = create();
-    if (uuid != null) {
-      $result.uuid = uuid;
-    }
-    if (name != null) {
-      $result.name = name;
-    }
-    if (process != null) {
-      $result.process = process;
-    }
-    if (thread != null) {
-      $result.thread = thread;
-    }
-    if (parentUuid != null) {
-      $result.parentUuid = parentUuid;
-    }
-    return $result;
+    final result = create();
+    if (uuid != null) result.uuid = uuid;
+    if (name != null) result.name = name;
+    if (process != null) result.process = process;
+    if (thread != null) result.thread = thread;
+    if (parentUuid != null) result.parentUuid = parentUuid;
+    return result;
   }
-  TrackDescriptor._() : super();
-  factory TrackDescriptor.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory TrackDescriptor.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  TrackDescriptor._();
+
+  factory TrackDescriptor.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory TrackDescriptor.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'TrackDescriptor',
@@ -83,51 +76,44 @@
     ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'uuid', $pb.PbFieldType.OU6,
         defaultOrMaker: $fixnum.Int64.ZERO)
     ..aOS(2, _omitFieldNames ? '' : 'name')
-    ..aOM<$4.ProcessDescriptor>(3, _omitFieldNames ? '' : 'process',
-        subBuilder: $4.ProcessDescriptor.create)
-    ..aOM<$5.ThreadDescriptor>(4, _omitFieldNames ? '' : 'thread',
-        subBuilder: $5.ThreadDescriptor.create)
+    ..aOM<$0.ProcessDescriptor>(3, _omitFieldNames ? '' : 'process',
+        subBuilder: $0.ProcessDescriptor.create)
+    ..aOM<$1.ThreadDescriptor>(4, _omitFieldNames ? '' : 'thread',
+        subBuilder: $1.ThreadDescriptor.create)
     ..a<$fixnum.Int64>(
         5, _omitFieldNames ? '' : 'parentUuid', $pb.PbFieldType.OU6,
         defaultOrMaker: $fixnum.Int64.ZERO)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  TrackDescriptor clone() => TrackDescriptor()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  TrackDescriptor clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   TrackDescriptor copyWith(void Function(TrackDescriptor) updates) =>
       super.copyWith((message) => updates(message as TrackDescriptor))
           as TrackDescriptor;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static TrackDescriptor create() => TrackDescriptor._();
+  @$core.override
   TrackDescriptor createEmptyInstance() => create();
-  static $pb.PbList<TrackDescriptor> createRepeated() =>
-      $pb.PbList<TrackDescriptor>();
   @$core.pragma('dart2js:noInline')
   static TrackDescriptor getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<TrackDescriptor>(create);
   static TrackDescriptor? _defaultInstance;
 
-  ///  Unique ID that identifies this track. This ID is global to the whole trace.
-  ///  Producers should ensure that it is unlikely to clash with IDs emitted by
-  ///  other producers. A value of 0 denotes the implicit trace-global track.
+  /// Unique ID that identifies this track. This ID is global to the whole trace.
+  /// Producers should ensure that it is unlikely to clash with IDs emitted by
+  /// other producers. A value of 0 denotes the implicit trace-global track.
   ///
-  ///  For example, legacy TRACE_EVENT macros may use a hash involving the async
-  ///  event id + id_scope, pid, and/or tid to compute this ID.
+  /// For example, legacy TRACE_EVENT macros may use a hash involving the async
+  /// event id + id_scope, pid, and/or tid to compute this ID.
   @$pb.TagNumber(1)
   $fixnum.Int64 get uuid => $_getI64(0);
   @$pb.TagNumber(1)
-  set uuid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set uuid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasUuid() => $_has(0);
   @$pb.TagNumber(1)
@@ -139,57 +125,48 @@
   @$pb.TagNumber(2)
   $core.String get name => $_getSZ(1);
   @$pb.TagNumber(2)
-  set name($core.String v) {
-    $_setString(1, v);
-  }
-
+  set name($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasName() => $_has(1);
   @$pb.TagNumber(2)
   void clearName() => $_clearField(2);
 
-  ///  Associate the track with a process, making it the process-global track.
-  ///  There should only be one such track per process (usually for instant
-  ///  events; trace processor uses this fact to detect pid reuse). If you need
-  ///  more (e.g. for asynchronous events), create child tracks using parent_uuid.
+  /// Associate the track with a process, making it the process-global track.
+  /// There should only be one such track per process (usually for instant
+  /// events; trace processor uses this fact to detect pid reuse). If you need
+  /// more (e.g. for asynchronous events), create child tracks using parent_uuid.
   ///
-  ///  Trace processor will merge events on a process track with slice-type events
-  ///  from other sources (e.g. ftrace) for the same process into a single
-  ///  timeline view.
+  /// Trace processor will merge events on a process track with slice-type events
+  /// from other sources (e.g. ftrace) for the same process into a single
+  /// timeline view.
   @$pb.TagNumber(3)
-  $4.ProcessDescriptor get process => $_getN(2);
+  $0.ProcessDescriptor get process => $_getN(2);
   @$pb.TagNumber(3)
-  set process($4.ProcessDescriptor v) {
-    $_setField(3, v);
-  }
-
+  set process($0.ProcessDescriptor value) => $_setField(3, value);
   @$pb.TagNumber(3)
   $core.bool hasProcess() => $_has(2);
   @$pb.TagNumber(3)
   void clearProcess() => $_clearField(3);
   @$pb.TagNumber(3)
-  $4.ProcessDescriptor ensureProcess() => $_ensure(2);
+  $0.ProcessDescriptor ensureProcess() => $_ensure(2);
 
-  ///  Associate the track with a thread, indicating that the track's events
-  ///  describe synchronous code execution on the thread. There should only be one
-  ///  such track per thread (trace processor uses this fact to detect tid reuse).
+  /// Associate the track with a thread, indicating that the track's events
+  /// describe synchronous code execution on the thread. There should only be one
+  /// such track per thread (trace processor uses this fact to detect tid reuse).
   ///
-  ///  Trace processor will merge events on a thread track with slice-type events
-  ///  from other sources (e.g. ftrace) for the same thread into a single timeline
-  ///  view.
+  /// Trace processor will merge events on a thread track with slice-type events
+  /// from other sources (e.g. ftrace) for the same thread into a single timeline
+  /// view.
   @$pb.TagNumber(4)
-  $5.ThreadDescriptor get thread => $_getN(3);
+  $1.ThreadDescriptor get thread => $_getN(3);
   @$pb.TagNumber(4)
-  set thread($5.ThreadDescriptor v) {
-    $_setField(4, v);
-  }
-
+  set thread($1.ThreadDescriptor value) => $_setField(4, value);
   @$pb.TagNumber(4)
   $core.bool hasThread() => $_has(3);
   @$pb.TagNumber(4)
   void clearThread() => $_clearField(4);
   @$pb.TagNumber(4)
-  $5.ThreadDescriptor ensureThread() => $_ensure(3);
+  $1.ThreadDescriptor ensureThread() => $_ensure(3);
 
   /// A parent track reference can be used to describe relationships between
   /// tracks. For example, to define an asynchronous track which is scoped to a
@@ -199,16 +176,14 @@
   @$pb.TagNumber(5)
   $fixnum.Int64 get parentUuid => $_getI64(4);
   @$pb.TagNumber(5)
-  set parentUuid($fixnum.Int64 v) {
-    $_setInt64(4, v);
-  }
-
+  set parentUuid($fixnum.Int64 value) => $_setInt64(4, value);
   @$pb.TagNumber(5)
   $core.bool hasParentUuid() => $_has(4);
   @$pb.TagNumber(5)
   void clearParentUuid() => $_clearField(5);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbjson.dart
index cd942ba..390f074 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_descriptor.proto
-//
+// Generated from protos/perfetto/trace/track_event/track_descriptor.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbserver.dart
deleted file mode 100644
index 94e9c3e..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_descriptor.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_descriptor.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'track_descriptor.pb.dart';
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pb.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pb.dart
index ca13343..f624165 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pb.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pb.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,23 +6,24 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_event.proto
-//
+// Generated from protos/perfetto/trace/track_event/track_event.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
 import 'package:fixnum/fixnum.dart' as $fixnum;
 import 'package:protobuf/protobuf.dart' as $pb;
 
-import 'debug_annotation.pb.dart' as $1;
+import 'debug_annotation.pb.dart' as $0;
 import 'track_event.pbenum.dart';
 
 export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions;
@@ -31,73 +32,73 @@
 
 enum TrackEvent_NameField { nameIid, name, notSet }
 
-///  Trace events emitted by client instrumentation library (TRACE_EVENT macros),
-///  which describe activity on a track, such as a thread or asynchronous event
-///  track. The track is specified using separate TrackDescriptor messages and
-///  referred to via the track's UUID.
+/// Trace events emitted by client instrumentation library (TRACE_EVENT macros),
+/// which describe activity on a track, such as a thread or asynchronous event
+/// track. The track is specified using separate TrackDescriptor messages and
+/// referred to via the track's UUID.
 ///
-///  A simple TrackEvent packet specifies a timestamp, category, name and type:
-///  ```protobuf
-///    trace_packet {
-///      timestamp: 1000
-///      track_event {
-///        categories: ["my_cat"]
-///        name: "my_event"
-///        type: TYPE_INSTANT
+/// A simple TrackEvent packet specifies a timestamp, category, name and type:
+/// ```protobuf
+///   trace_packet {
+///     timestamp: 1000
+///     track_event {
+///       categories: ["my_cat"]
+///       name: "my_event"
+///       type: TYPE_INSTANT
+///      }
+///    }
+/// ```
+///
+/// To associate an event with a custom track (e.g. a thread), the track is
+/// defined in a separate packet and referred to from the TrackEvent by its UUID:
+/// ```protobuf
+///   trace_packet {
+///     track_descriptor {
+///       track_uuid: 1234
+///       name: "my_track"
+///
+///       // Optionally, associate the track with a thread.
+///       thread_descriptor {
+///         pid: 10
+///         tid: 10
+///         ..
 ///       }
 ///     }
-///  ```
+///   }
+/// ```
 ///
-///  To associate an event with a custom track (e.g. a thread), the track is
-///  defined in a separate packet and referred to from the TrackEvent by its UUID:
-///  ```protobuf
-///    trace_packet {
-///      track_descriptor {
-///        track_uuid: 1234
-///        name: "my_track"
+/// A pair of TYPE_SLICE_BEGIN and _END events form a slice on the track:
 ///
-///        // Optionally, associate the track with a thread.
-///        thread_descriptor {
-///          pid: 10
-///          tid: 10
-///          ..
-///        }
-///      }
-///    }
-///  ```
+/// ```protobuf
+///   trace_packet {
+///     timestamp: 1200
+///     track_event {
+///       track_uuid: 1234
+///       categories: ["my_cat"]
+///       name: "my_slice"
+///       type: TYPE_SLICE_BEGIN
+///     }
+///   }
+///   trace_packet {
+///     timestamp: 1400
+///     track_event {
+///       track_uuid: 1234
+///       type: TYPE_SLICE_END
+///     }
+///   }
+/// ```
+/// TrackEvents also support optimizations to reduce data repetition and encoded
+/// data size, e.g. through data interning (names, categories, ...) and delta
+/// encoding of timestamps/counters. For details, see the InternedData message.
+/// Further, default values for attributes of events on the same sequence (e.g.
+/// their default track association) can be emitted as part of a
+/// TrackEventDefaults message.
 ///
-///  A pair of TYPE_SLICE_BEGIN and _END events form a slice on the track:
-///
-///  ```protobuf
-///    trace_packet {
-///      timestamp: 1200
-///      track_event {
-///        track_uuid: 1234
-///        categories: ["my_cat"]
-///        name: "my_slice"
-///        type: TYPE_SLICE_BEGIN
-///      }
-///    }
-///    trace_packet {
-///      timestamp: 1400
-///      track_event {
-///        track_uuid: 1234
-///        type: TYPE_SLICE_END
-///      }
-///    }
-///  ```
-///  TrackEvents also support optimizations to reduce data repetition and encoded
-///  data size, e.g. through data interning (names, categories, ...) and delta
-///  encoding of timestamps/counters. For details, see the InternedData message.
-///  Further, default values for attributes of events on the same sequence (e.g.
-///  their default track association) can be emitted as part of a
-///  TrackEventDefaults message.
-///
-///  Next reserved id: 13 (up to 15). Next id: 50.
+/// Next reserved id: 13 (up to 15). Next id: 50.
 class TrackEvent extends $pb.GeneratedMessage {
   factory TrackEvent({
     $core.Iterable<$fixnum.Int64>? categoryIids,
-    $core.Iterable<$1.DebugAnnotation>? debugAnnotations,
+    $core.Iterable<$0.DebugAnnotation>? debugAnnotations,
     TrackEvent_Type? type,
     $fixnum.Int64? nameIid,
     $fixnum.Int64? trackUuid,
@@ -106,43 +107,29 @@
     $core.Iterable<$fixnum.Int64>? flowIds,
     $core.Iterable<$fixnum.Int64>? terminatingFlowIds,
   }) {
-    final $result = create();
-    if (categoryIids != null) {
-      $result.categoryIids.addAll(categoryIids);
-    }
-    if (debugAnnotations != null) {
-      $result.debugAnnotations.addAll(debugAnnotations);
-    }
-    if (type != null) {
-      $result.type = type;
-    }
-    if (nameIid != null) {
-      $result.nameIid = nameIid;
-    }
-    if (trackUuid != null) {
-      $result.trackUuid = trackUuid;
-    }
-    if (categories != null) {
-      $result.categories.addAll(categories);
-    }
-    if (name != null) {
-      $result.name = name;
-    }
-    if (flowIds != null) {
-      $result.flowIds.addAll(flowIds);
-    }
-    if (terminatingFlowIds != null) {
-      $result.terminatingFlowIds.addAll(terminatingFlowIds);
-    }
-    return $result;
+    final result = create();
+    if (categoryIids != null) result.categoryIids.addAll(categoryIids);
+    if (debugAnnotations != null)
+      result.debugAnnotations.addAll(debugAnnotations);
+    if (type != null) result.type = type;
+    if (nameIid != null) result.nameIid = nameIid;
+    if (trackUuid != null) result.trackUuid = trackUuid;
+    if (categories != null) result.categories.addAll(categories);
+    if (name != null) result.name = name;
+    if (flowIds != null) result.flowIds.addAll(flowIds);
+    if (terminatingFlowIds != null)
+      result.terminatingFlowIds.addAll(terminatingFlowIds);
+    return result;
   }
-  TrackEvent._() : super();
-  factory TrackEvent.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory TrackEvent.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  TrackEvent._();
+
+  factory TrackEvent.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory TrackEvent.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static const $core.Map<$core.int, TrackEvent_NameField>
       _TrackEvent_NameFieldByTag = {
@@ -158,12 +145,9 @@
     ..oo(0, [10, 23])
     ..p<$fixnum.Int64>(
         3, _omitFieldNames ? '' : 'categoryIids', $pb.PbFieldType.PU6)
-    ..pc<$1.DebugAnnotation>(
-        4, _omitFieldNames ? '' : 'debugAnnotations', $pb.PbFieldType.PM,
-        subBuilder: $1.DebugAnnotation.create)
-    ..e<TrackEvent_Type>(9, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE,
-        defaultOrMaker: TrackEvent_Type.TYPE_UNSPECIFIED,
-        valueOf: TrackEvent_Type.valueOf,
+    ..pPM<$0.DebugAnnotation>(4, _omitFieldNames ? '' : 'debugAnnotations',
+        subBuilder: $0.DebugAnnotation.create)
+    ..aE<TrackEvent_Type>(9, _omitFieldNames ? '' : 'type',
         enumValues: TrackEvent_Type.values)
     ..a<$fixnum.Int64>(
         10, _omitFieldNames ? '' : 'nameIid', $pb.PbFieldType.OU6,
@@ -179,29 +163,30 @@
         48, _omitFieldNames ? '' : 'terminatingFlowIds', $pb.PbFieldType.PF6)
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  TrackEvent clone() => TrackEvent()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  TrackEvent clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   TrackEvent copyWith(void Function(TrackEvent) updates) =>
       super.copyWith((message) => updates(message as TrackEvent)) as TrackEvent;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static TrackEvent create() => TrackEvent._();
+  @$core.override
   TrackEvent createEmptyInstance() => create();
-  static $pb.PbList<TrackEvent> createRepeated() => $pb.PbList<TrackEvent>();
   @$core.pragma('dart2js:noInline')
   static TrackEvent getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<TrackEvent>(create);
   static TrackEvent? _defaultInstance;
 
+  @$pb.TagNumber(10)
+  @$pb.TagNumber(23)
   TrackEvent_NameField whichNameField() =>
       _TrackEvent_NameFieldByTag[$_whichOneof(0)]!;
+  @$pb.TagNumber(10)
+  @$pb.TagNumber(23)
   void clearNameField() => $_clearField($_whichOneof(0));
 
   /// Names of categories of the event. In the client library, categories are a
@@ -213,15 +198,12 @@
   /// Unstable key/value annotations shown in the trace viewer but not intended
   /// for metrics use.
   @$pb.TagNumber(4)
-  $pb.PbList<$1.DebugAnnotation> get debugAnnotations => $_getList(1);
+  $pb.PbList<$0.DebugAnnotation> get debugAnnotations => $_getList(1);
 
   @$pb.TagNumber(9)
   TrackEvent_Type get type => $_getN(2);
   @$pb.TagNumber(9)
-  set type(TrackEvent_Type v) {
-    $_setField(9, v);
-  }
-
+  set type(TrackEvent_Type value) => $_setField(9, value);
   @$pb.TagNumber(9)
   $core.bool hasType() => $_has(2);
   @$pb.TagNumber(9)
@@ -231,10 +213,7 @@
   @$pb.TagNumber(10)
   $fixnum.Int64 get nameIid => $_getI64(3);
   @$pb.TagNumber(10)
-  set nameIid($fixnum.Int64 v) {
-    $_setInt64(3, v);
-  }
-
+  set nameIid($fixnum.Int64 value) => $_setInt64(3, value);
   @$pb.TagNumber(10)
   $core.bool hasNameIid() => $_has(3);
   @$pb.TagNumber(10)
@@ -248,10 +227,7 @@
   @$pb.TagNumber(11)
   $fixnum.Int64 get trackUuid => $_getI64(4);
   @$pb.TagNumber(11)
-  set trackUuid($fixnum.Int64 v) {
-    $_setInt64(4, v);
-  }
-
+  set trackUuid($fixnum.Int64 value) => $_setInt64(4, value);
   @$pb.TagNumber(11)
   $core.bool hasTrackUuid() => $_has(4);
   @$pb.TagNumber(11)
@@ -265,29 +241,26 @@
   @$pb.TagNumber(23)
   $core.String get name => $_getSZ(6);
   @$pb.TagNumber(23)
-  set name($core.String v) {
-    $_setString(6, v);
-  }
-
+  set name($core.String value) => $_setString(6, value);
   @$pb.TagNumber(23)
   $core.bool hasName() => $_has(6);
   @$pb.TagNumber(23)
   void clearName() => $_clearField(23);
 
-  ///  IDs of flows originating, passing through, or ending at this event.
-  ///  Flow IDs are global within a trace.
+  /// IDs of flows originating, passing through, or ending at this event.
+  /// Flow IDs are global within a trace.
   ///
-  ///  A flow connects a sequence of TrackEvents within or across tracks, e.g.
-  ///  an input event may be handled on one thread but cause another event on
-  ///  a different thread - a flow between the two events can associate them.
+  /// A flow connects a sequence of TrackEvents within or across tracks, e.g.
+  /// an input event may be handled on one thread but cause another event on
+  /// a different thread - a flow between the two events can associate them.
   ///
-  ///  The direction of the flows between events is inferred from the events'
-  ///  timestamps. The earliest event with the same flow ID becomes the source
-  ///  of the flow. Any events thereafter are intermediate steps of the flow,
-  ///  until the flow terminates at the last event with the flow ID.
+  /// The direction of the flows between events is inferred from the events'
+  /// timestamps. The earliest event with the same flow ID becomes the source
+  /// of the flow. Any events thereafter are intermediate steps of the flow,
+  /// until the flow terminates at the last event with the flow ID.
   ///
-  ///  Flows can also be explicitly terminated (see |terminating_flow_ids|), so
-  ///  that the same ID can later be reused for another flow.
+  /// Flows can also be explicitly terminated (see |terminating_flow_ids|), so
+  /// that the same ID can later be reused for another flow.
   @$pb.TagNumber(47)
   $pb.PbList<$fixnum.Int64> get flowIds => $_getList(7);
 
@@ -304,22 +277,20 @@
     $fixnum.Int64? iid,
     $core.String? name,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (name != null) {
-      $result.name = name;
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (name != null) result.name = name;
+    return result;
   }
-  EventCategory._() : super();
-  factory EventCategory.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory EventCategory.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  EventCategory._();
+
+  factory EventCategory.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory EventCategory.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'EventCategory',
@@ -331,24 +302,20 @@
     ..aOS(2, _omitFieldNames ? '' : 'name')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  EventCategory clone() => EventCategory()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  EventCategory clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   EventCategory copyWith(void Function(EventCategory) updates) =>
       super.copyWith((message) => updates(message as EventCategory))
           as EventCategory;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static EventCategory create() => EventCategory._();
+  @$core.override
   EventCategory createEmptyInstance() => create();
-  static $pb.PbList<EventCategory> createRepeated() =>
-      $pb.PbList<EventCategory>();
   @$core.pragma('dart2js:noInline')
   static EventCategory getDefault() => _defaultInstance ??=
       $pb.GeneratedMessage.$_defaultFor<EventCategory>(create);
@@ -357,10 +324,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -369,10 +333,7 @@
   @$pb.TagNumber(2)
   $core.String get name => $_getSZ(1);
   @$pb.TagNumber(2)
-  set name($core.String v) {
-    $_setString(1, v);
-  }
-
+  set name($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasName() => $_has(1);
   @$pb.TagNumber(2)
@@ -384,22 +345,20 @@
     $fixnum.Int64? iid,
     $core.String? name,
   }) {
-    final $result = create();
-    if (iid != null) {
-      $result.iid = iid;
-    }
-    if (name != null) {
-      $result.name = name;
-    }
-    return $result;
+    final result = create();
+    if (iid != null) result.iid = iid;
+    if (name != null) result.name = name;
+    return result;
   }
-  EventName._() : super();
-  factory EventName.fromBuffer($core.List<$core.int> i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromBuffer(i, r);
-  factory EventName.fromJson($core.String i,
-          [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
-      create()..mergeFromJson(i, r);
+
+  EventName._();
+
+  factory EventName.fromBuffer($core.List<$core.int> data,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromBuffer(data, registry);
+  factory EventName.fromJson($core.String json,
+          [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) =>
+      create()..mergeFromJson(json, registry);
 
   static final $pb.BuilderInfo _i = $pb.BuilderInfo(
       _omitMessageNames ? '' : 'EventName',
@@ -411,22 +370,19 @@
     ..aOS(2, _omitFieldNames ? '' : 'name')
     ..hasRequiredFields = false;
 
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
-      'Will be removed in next major version')
-  EventName clone() => EventName()..mergeFromMessage(this);
-  @$core.Deprecated('Using this can add significant overhead to your binary. '
-      'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
-      'Will be removed in next major version')
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
+  EventName clone() => deepCopy();
+  @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.')
   EventName copyWith(void Function(EventName) updates) =>
       super.copyWith((message) => updates(message as EventName)) as EventName;
 
+  @$core.override
   $pb.BuilderInfo get info_ => _i;
 
   @$core.pragma('dart2js:noInline')
   static EventName create() => EventName._();
+  @$core.override
   EventName createEmptyInstance() => create();
-  static $pb.PbList<EventName> createRepeated() => $pb.PbList<EventName>();
   @$core.pragma('dart2js:noInline')
   static EventName getDefault() =>
       _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<EventName>(create);
@@ -435,10 +391,7 @@
   @$pb.TagNumber(1)
   $fixnum.Int64 get iid => $_getI64(0);
   @$pb.TagNumber(1)
-  set iid($fixnum.Int64 v) {
-    $_setInt64(0, v);
-  }
-
+  set iid($fixnum.Int64 value) => $_setInt64(0, value);
   @$pb.TagNumber(1)
   $core.bool hasIid() => $_has(0);
   @$pb.TagNumber(1)
@@ -447,16 +400,14 @@
   @$pb.TagNumber(2)
   $core.String get name => $_getSZ(1);
   @$pb.TagNumber(2)
-  set name($core.String v) {
-    $_setString(1, v);
-  }
-
+  set name($core.String value) => $_setString(1, value);
   @$pb.TagNumber(2)
   $core.bool hasName() => $_has(1);
   @$pb.TagNumber(2)
   void clearName() => $_clearField(2);
 }
 
-const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
-const _omitMessageNames =
+const $core.bool _omitFieldNames =
+    $core.bool.fromEnvironment('protobuf.omit_field_names');
+const $core.bool _omitMessageNames =
     $core.bool.fromEnvironment('protobuf.omit_message_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbenum.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbenum.dart
index 264b3cb..fae21b7 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbenum.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbenum.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_event.proto
-//
+// Generated from protos/perfetto/trace/track_event/track_event.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names
 
 import 'dart:core' as $core;
 
@@ -26,22 +27,22 @@
   static const TrackEvent_Type TYPE_UNSPECIFIED =
       TrackEvent_Type._(0, _omitEnumNames ? '' : 'TYPE_UNSPECIFIED');
 
-  ///  Slice events are events that have a begin and end timestamp, i.e. a
-  ///  duration. They can be nested similar to a callstack: If, on the same
-  ///  track, event B begins after event A, but before A ends, B is a child
-  ///  event of A and will be drawn as a nested event underneath A in the UI.
-  ///  Note that child events should always end before their parents (e.g. B
-  ///  before A).
+  /// Slice events are events that have a begin and end timestamp, i.e. a
+  /// duration. They can be nested similar to a callstack: If, on the same
+  /// track, event B begins after event A, but before A ends, B is a child
+  /// event of A and will be drawn as a nested event underneath A in the UI.
+  /// Note that child events should always end before their parents (e.g. B
+  /// before A).
   ///
-  ///  Each slice event is formed by a pair of BEGIN + END events. The END event
-  ///  does not need to repeat any TrackEvent fields it has in common with its
-  ///  corresponding BEGIN event. Arguments and debug annotations of the BEGIN +
-  ///  END pair will be merged during trace import.
+  /// Each slice event is formed by a pair of BEGIN + END events. The END event
+  /// does not need to repeat any TrackEvent fields it has in common with its
+  /// corresponding BEGIN event. Arguments and debug annotations of the BEGIN +
+  /// END pair will be merged during trace import.
   ///
-  ///  Note that we deliberately chose not to support COMPLETE events (which
-  ///  would specify a duration directly) since clients would need to delay
-  ///  writing them until the slice is completed, which can result in reordered
-  ///  events in the trace and loss of unfinished events at the end of a trace.
+  /// Note that we deliberately chose not to support COMPLETE events (which
+  /// would specify a duration directly) since clients would need to delay
+  /// writing them until the slice is completed, which can result in reordered
+  /// events in the trace and loss of unfinished events at the end of a trace.
   static const TrackEvent_Type TYPE_SLICE_BEGIN =
       TrackEvent_Type._(1, _omitEnumNames ? '' : 'TYPE_SLICE_BEGIN');
   static const TrackEvent_Type TYPE_SLICE_END =
@@ -59,11 +60,13 @@
     TYPE_INSTANT,
   ];
 
-  static final $core.Map<$core.int, TrackEvent_Type> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static TrackEvent_Type? valueOf($core.int value) => _byValue[value];
+  static final $core.List<TrackEvent_Type?> _byValue =
+      $pb.ProtobufEnum.$_initByValueList(values, 3);
+  static TrackEvent_Type? valueOf($core.int value) =>
+      value < 0 || value >= _byValue.length ? null : _byValue[value];
 
-  const TrackEvent_Type._(super.v, super.n);
+  const TrackEvent_Type._(super.value, super.name);
 }
 
-const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
+const $core.bool _omitEnumNames =
+    $core.bool.fromEnvironment('protobuf.omit_enum_names');
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbjson.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbjson.dart
index daf0f9e..48d0753 100644
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbjson.dart
+++ b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbjson.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -6,16 +6,17 @@
 // corresponding .proto file and then running
 // `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
 // SDK root directory.
+// This is a generated file - do not edit.
 //
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_event.proto
-//
+// Generated from protos/perfetto/trace/track_event/track_event.proto.
+
 // @dart = 3.3
 
 // ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: curly_braces_in_flow_control_structures
+// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
+// ignore_for_file: non_constant_identifier_names, unused_import
 
 import 'dart:convert' as $convert;
 import 'dart:core' as $core;
diff --git a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbserver.dart b/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbserver.dart
deleted file mode 100644
index 602c345..0000000
--- a/pkg/vm_service_protos/lib/src/protos/perfetto/trace/track_event/track_event.pbserver.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// IMPORTANT: This file should only ever be modified by modifying the
-// corresponding .proto file and then running
-// `dart third_party/perfetto/tools/compile_perfetto_protos.dart` from the
-// SDK root directory.
-//
-//  Generated code. Do not modify.
-//  source: protos/perfetto/trace/track_event/track_event.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names
-// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
-
-export 'track_event.pb.dart';
diff --git a/pkg/vm_service_protos/lib/vm_service_protos.dart b/pkg/vm_service_protos/lib/vm_service_protos.dart
index 66b102c..c58a2a2 100644
--- a/pkg/vm_service_protos/lib/vm_service_protos.dart
+++ b/pkg/vm_service_protos/lib/vm_service_protos.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -10,39 +10,27 @@
 export 'src/protos/perfetto/common/builtin_clock.pb.dart';
 export 'src/protos/perfetto/common/builtin_clock.pbenum.dart';
 export 'src/protos/perfetto/common/builtin_clock.pbjson.dart';
-export 'src/protos/perfetto/common/builtin_clock.pbserver.dart';
 export 'src/protos/perfetto/trace/clock_snapshot.pb.dart';
 export 'src/protos/perfetto/trace/clock_snapshot.pbjson.dart';
-export 'src/protos/perfetto/trace/clock_snapshot.pbserver.dart';
 export 'src/protos/perfetto/trace/interned_data/interned_data.pb.dart';
 export 'src/protos/perfetto/trace/interned_data/interned_data.pbjson.dart';
-export 'src/protos/perfetto/trace/interned_data/interned_data.pbserver.dart';
 export 'src/protos/perfetto/trace/profiling/profile_common.pb.dart';
 export 'src/protos/perfetto/trace/profiling/profile_common.pbjson.dart';
-export 'src/protos/perfetto/trace/profiling/profile_common.pbserver.dart';
 export 'src/protos/perfetto/trace/profiling/profile_packet.pb.dart';
 export 'src/protos/perfetto/trace/profiling/profile_packet.pbjson.dart';
-export 'src/protos/perfetto/trace/profiling/profile_packet.pbserver.dart';
 export 'src/protos/perfetto/trace/trace.pb.dart';
 export 'src/protos/perfetto/trace/trace.pbjson.dart';
-export 'src/protos/perfetto/trace/trace.pbserver.dart';
 export 'src/protos/perfetto/trace/trace_packet.pb.dart';
 export 'src/protos/perfetto/trace/trace_packet.pbenum.dart';
 export 'src/protos/perfetto/trace/trace_packet.pbjson.dart';
-export 'src/protos/perfetto/trace/trace_packet.pbserver.dart';
 export 'src/protos/perfetto/trace/track_event/debug_annotation.pb.dart';
 export 'src/protos/perfetto/trace/track_event/debug_annotation.pbjson.dart';
-export 'src/protos/perfetto/trace/track_event/debug_annotation.pbserver.dart';
 export 'src/protos/perfetto/trace/track_event/process_descriptor.pb.dart';
 export 'src/protos/perfetto/trace/track_event/process_descriptor.pbjson.dart';
-export 'src/protos/perfetto/trace/track_event/process_descriptor.pbserver.dart';
 export 'src/protos/perfetto/trace/track_event/thread_descriptor.pb.dart';
 export 'src/protos/perfetto/trace/track_event/thread_descriptor.pbjson.dart';
-export 'src/protos/perfetto/trace/track_event/thread_descriptor.pbserver.dart';
 export 'src/protos/perfetto/trace/track_event/track_descriptor.pb.dart';
 export 'src/protos/perfetto/trace/track_event/track_descriptor.pbjson.dart';
-export 'src/protos/perfetto/trace/track_event/track_descriptor.pbserver.dart';
 export 'src/protos/perfetto/trace/track_event/track_event.pb.dart';
 export 'src/protos/perfetto/trace/track_event/track_event.pbenum.dart';
 export 'src/protos/perfetto/trace/track_event/track_event.pbjson.dart';
-export 'src/protos/perfetto/trace/track_event/track_event.pbserver.dart';
diff --git a/pkg/vm_service_protos/pubspec.yaml b/pkg/vm_service_protos/pubspec.yaml
index 2f7a529..446441f 100644
--- a/pkg/vm_service_protos/pubspec.yaml
+++ b/pkg/vm_service_protos/pubspec.yaml
@@ -1,5 +1,5 @@
 name: vm_service_protos
-version: 2.0.1-wip
+version: 2.0.1
 description: >-
   A library for decoding protos returned by a service implementing the Dart VM
   service protocol.
@@ -13,7 +13,7 @@
 
 dependencies:
   fixnum: ^1.0.0
-  protobuf: '>=4.0.0 <6.0.0'
+  protobuf: ^6.0.0
 
 # We use 'any' version constraints here as we get our package versions from
 # the dart-lang/sdk repo's DEPS file. Note that this is a special case; the
diff --git a/pkg/wasm_builder/lib/src/builder/builder.dart b/pkg/wasm_builder/lib/src/builder/builder.dart
index 6a380e1..6e154b5 100644
--- a/pkg/wasm_builder/lib/src/builder/builder.dart
+++ b/pkg/wasm_builder/lib/src/builder/builder.dart
@@ -11,6 +11,7 @@
 export 'global.dart' show GlobalBuilder;
 export 'functions.dart' show FunctionsBuilder;
 export 'function.dart' show FunctionBuilder;
+export 'elements.dart' show ElementsBuilder;
 export 'memories.dart' show MemoriesBuilder;
 export 'module.dart' show ModuleBuilder;
 export 'tables.dart' show TablesBuilder;
diff --git a/pkg/wasm_builder/lib/src/builder/elements.dart b/pkg/wasm_builder/lib/src/builder/elements.dart
new file mode 100644
index 0000000..a3082f9
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/builder/elements.dart
@@ -0,0 +1,107 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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 '../ir/ir.dart' as ir;
+import 'builder.dart';
+
+/// Builder for the elements section of a wasm module.
+class ElementsBuilder with Builder<ir.Elements> {
+  final ModuleBuilder _moduleBuilder;
+  final _functionTableBuilders = <ir.Table, ActiveFunctionSegmentBuilder>{};
+
+  late final declarativeSegmentBuilder =
+      DeclarativeSegmentBuilder(_moduleBuilder);
+
+  ElementsBuilder(this._moduleBuilder);
+
+  ActiveFunctionSegmentBuilder activeFunctionSegmentBuilderFor(ir.Table table) {
+    assert(table.type.isSubtypeOf(ir.RefType.func(nullable: true)));
+    assert(table.enclosingModule == _moduleBuilder.module);
+    return _functionTableBuilders.putIfAbsent(
+        table, () => ActiveFunctionSegmentBuilder(table));
+  }
+
+  @override
+  ir.Elements forceBuild() {
+    final segments = <ir.ElementSegment>[];
+    for (final b in _functionTableBuilders.values) {
+      segments.addAll(b.build());
+    }
+    if (declarativeSegmentBuilder._declaredFunctions.isNotEmpty) {
+      segments.add(declarativeSegmentBuilder.build());
+    }
+    return ir.Elements(segments);
+  }
+}
+
+class DeclarativeSegmentBuilder with Builder<ir.DeclarativeElementSegment> {
+  final ModuleBuilder _moduleBuilder;
+  final _declaredFunctions = <ir.BaseFunction>{};
+
+  DeclarativeSegmentBuilder(this._moduleBuilder);
+
+  /// Pre-declare [function] in a declared segment which allows using that
+  /// function in `ref.func` constant instructions.
+  void declare(ir.BaseFunction function) {
+    assert(function.enclosingModule == _moduleBuilder.module);
+    _declaredFunctions.add(function);
+  }
+
+  @override
+  ir.DeclarativeElementSegment forceBuild() =>
+      ir.DeclarativeElementSegment(_declaredFunctions.toList());
+}
+
+class ActiveFunctionSegmentBuilder with Builder<List<ir.ActiveElementSegment>> {
+  final ir.Table table;
+  final Map<int, ir.BaseFunction> _functions = {};
+
+  ActiveFunctionSegmentBuilder(this.table);
+
+  void setFunctionAt(int index, ir.BaseFunction function) {
+    assert(function.enclosingModule == table.enclosingModule);
+    assert(table.maxSize == null || index < table.maxSize!,
+        'Index $index greater than max table size ${table.maxSize}');
+    _functions[index] = function;
+    table.minSize = math.max(table.minSize, index + 1);
+  }
+
+  @override
+  List<ir.ActiveElementSegment> forceBuild() {
+    final entries = _functions.entries.toList()
+      ..sort((a, b) => a.key.compareTo(b.key));
+
+    final segments = <ir.ActiveElementSegment>[];
+    if (const ir.RefType.func(nullable: false).isSubtypeOf(table.type)) {
+      ir.ActiveFunctionElementSegment? current;
+      int lastIndex = -2;
+      for (final entry in entries) {
+        final index = entry.key;
+        final function = entry.value;
+        if (index != lastIndex + 1) {
+          current = ir.ActiveFunctionElementSegment(table, index);
+          segments.add(current);
+        }
+        current!.entries.add(function);
+        lastIndex = index;
+      }
+    } else {
+      ir.ActiveExpressionElementSegment? current;
+      int lastIndex = -2;
+      for (final entry in entries) {
+        final index = entry.key;
+        final function = entry.value;
+        if (index != lastIndex + 1) {
+          current = ir.ActiveExpressionElementSegment(table, table.type, index);
+          segments.add(current);
+        }
+        current!.expressions.add([ir.RefFunc(function), ir.End()]);
+        lastIndex = index;
+      }
+    }
+    return segments;
+  }
+}
diff --git a/pkg/wasm_builder/lib/src/builder/functions.dart b/pkg/wasm_builder/lib/src/builder/functions.dart
index 6e957d5a..0999e08 100644
--- a/pkg/wasm_builder/lib/src/builder/functions.dart
+++ b/pkg/wasm_builder/lib/src/builder/functions.dart
@@ -11,7 +11,6 @@
   final ModuleBuilder _moduleBuilder;
   final _functionBuilders = <FunctionBuilder>[];
   final _importedFunctions = <ir.ImportedFunction>[];
-  final _declaredFunctions = <ir.BaseFunction>{};
 
   FunctionsBuilder(this._moduleBuilder);
 
@@ -45,17 +44,10 @@
     return function;
   }
 
-  /// Declare [function] as a module element so it can be used in a constant
-  /// context.
-  void declare(ir.BaseFunction function) {
-    assert(function.enclosingModule == _moduleBuilder.module);
-    _declaredFunctions.add(function);
-  }
-
   @override
   ir.Functions forceBuild() {
     final built = finalizeImportsAndBuilders<ir.DefinedFunction>(
         _importedFunctions, _functionBuilders);
-    return ir.Functions(_importedFunctions, built, [..._declaredFunctions]);
+    return ir.Functions(_importedFunctions, built);
   }
 }
diff --git a/pkg/wasm_builder/lib/src/builder/module.dart b/pkg/wasm_builder/lib/src/builder/module.dart
index 088db5c..668d195 100644
--- a/pkg/wasm_builder/lib/src/builder/module.dart
+++ b/pkg/wasm_builder/lib/src/builder/module.dart
@@ -26,7 +26,8 @@
   final List<int> watchPoints;
   late final TypesBuilder types;
   late final functions = FunctionsBuilder(this);
-  late final tables = TablesBuilder(module);
+  late final elements = ElementsBuilder(this);
+  late final tables = TablesBuilder(this);
   late final memories = MemoriesBuilder(module);
   late final tags = TagsBuilder(module);
   final dataSegments = DataSegmentsBuilder();
@@ -54,6 +55,7 @@
   ir.Module forceBuild() {
     final finalFunctions = functions.build();
     final finalTables = tables.build();
+    final finalElements = elements.build();
     final finalMemories = memories.build();
     final finalGlobals = globals.build();
     final finalTags = tags.build();
@@ -70,6 +72,7 @@
           finalFunctions,
           _startFunction,
           finalTables,
+          finalElements,
           finalTags,
           finalMemories,
           exports.build(),
diff --git a/pkg/wasm_builder/lib/src/builder/table.dart b/pkg/wasm_builder/lib/src/builder/table.dart
index 3c30615..caea162 100644
--- a/pkg/wasm_builder/lib/src/builder/table.dart
+++ b/pkg/wasm_builder/lib/src/builder/table.dart
@@ -7,25 +7,13 @@
 
 /// A table defined in a module.
 class TableBuilder extends ir.Table with IndexableBuilder<ir.DefinedTable> {
-  final List<ir.BaseFunction?> elements;
+  final ModuleBuilder moduleBuilder;
 
-  TableBuilder(super.enclosingModule, super.index, super.type, super.minSize,
-      super.maxSize)
-      : elements = List.filled(minSize, null, growable: true);
-
-  void setElement(int index, ir.BaseFunction function) {
-    assert(type.isSubtypeOf(ir.RefType.func(nullable: true)),
-        "Elements are only supported for funcref tables");
-    assert(maxSize == null || index < maxSize!,
-        'Index $index greater than max table size $maxSize');
-    assert(function.enclosingModule == enclosingModule);
-    if (index >= elements.length) {
-      elements.length = index + 1;
-    }
-    elements[index] = function;
-  }
+  TableBuilder(this.moduleBuilder, ir.FinalizableIndex index, ir.RefType type,
+      int minSize, int? maxSize)
+      : super(moduleBuilder.module, index, type, minSize, maxSize);
 
   @override
   ir.DefinedTable forceBuild() => ir.DefinedTable(
-      enclosingModule, elements, finalizableIndex, type, minSize, maxSize);
+      enclosingModule, finalizableIndex, type, minSize, maxSize);
 }
diff --git a/pkg/wasm_builder/lib/src/builder/tables.dart b/pkg/wasm_builder/lib/src/builder/tables.dart
index 4cb9dd8..793141d 100644
--- a/pkg/wasm_builder/lib/src/builder/tables.dart
+++ b/pkg/wasm_builder/lib/src/builder/tables.dart
@@ -8,16 +8,16 @@
 
 /// The interface for the tables in a module.
 class TablesBuilder with Builder<ir.Tables> {
-  final ir.Module _module;
+  final ModuleBuilder _moduleBuilder;
   final _tableBuilders = <TableBuilder>[];
   final _importedTables = <ir.ImportedTable>[];
 
-  TablesBuilder(this._module);
+  TablesBuilder(this._moduleBuilder);
 
   /// Defines a new table in this module.
   TableBuilder define(ir.RefType type, int minSize, [int? maxSize]) {
-    final table =
-        TableBuilder(_module, ir.FinalizableIndex(), type, minSize, maxSize);
+    final table = TableBuilder(
+        _moduleBuilder, ir.FinalizableIndex(), type, minSize, maxSize);
     _tableBuilders.add(table);
     return table;
   }
@@ -26,8 +26,8 @@
   ir.ImportedTable import(
       String module, String name, ir.RefType type, int minSize,
       [int? maxSize]) {
-    final table = ir.ImportedTable(
-        _module, module, name, ir.FinalizableIndex(), type, minSize, maxSize);
+    final table = ir.ImportedTable(_moduleBuilder.module, module, name,
+        ir.FinalizableIndex(), type, minSize, maxSize);
     _importedTables.add(table);
     return table;
   }
diff --git a/pkg/wasm_builder/lib/src/builder/types.dart b/pkg/wasm_builder/lib/src/builder/types.dart
index daed2b9..3ea4ad6 100644
--- a/pkg/wasm_builder/lib/src/builder/types.dart
+++ b/pkg/wasm_builder/lib/src/builder/types.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.
 
-import 'dart:collection';
-
 import 'package:collection/collection.dart';
 import '../ir/ir.dart' as ir;
 import 'builder.dart';
@@ -130,22 +128,16 @@
     // (1) group length
     // (2) length of first struct
     // (3) group structural equality
-    final equivalenceGroups =
-        LinkedHashMap<(int, int, List<ir.DefType>), List<List<ir.DefType>>>(
-      hashCode: (a) => Object.hash(a.$1, a.$2),
-      equals: (a, b) =>
-          a.$1 == b.$1 &&
-          a.$2 == b.$2 &&
-          _areGroupsStructurallyEqual(a.$3, b.$3),
-    );
+    final equivalenceGroups = <_RecursionGroupKey, List<List<ir.DefType>>>{};
 
     for (final group in groups) {
       final structIndex = group.indexWhere((g) => g is ir.StructType);
       // Skip groups with no struct types.
       if (structIndex == -1) continue;
       final structType = group[structIndex] as ir.StructType;
-      equivalenceGroups.putIfAbsent(
-          (group.length, structType.fields.length, group), () => []).add(group);
+      final key =
+          _RecursionGroupKey(group.length, structType.fields.length, group);
+      equivalenceGroups.putIfAbsent(key, () => []).add(group);
     }
 
     for (final equalGroups in equivalenceGroups.values) {
@@ -351,3 +343,22 @@
     return (inputHash * 2 + 1) * (outputHash * 2 + 1);
   }
 }
+
+class _RecursionGroupKey {
+  final int groupLength;
+  final int lengthOfFirstStruct;
+  final List<ir.DefType> types;
+
+  _RecursionGroupKey(this.groupLength, this.lengthOfFirstStruct, this.types);
+
+  @override
+  int get hashCode => Object.hash(groupLength, lengthOfFirstStruct);
+
+  @override
+  bool operator ==(other) {
+    if (other is! _RecursionGroupKey) return false;
+    if (groupLength != other.groupLength) return false;
+    if (lengthOfFirstStruct != other.lengthOfFirstStruct) return false;
+    return _RecGroupBuilder._areGroupsStructurallyEqual(types, other.types);
+  }
+}
diff --git a/pkg/wasm_builder/lib/src/ir/data_segment.dart b/pkg/wasm_builder/lib/src/ir/data_segment.dart
index d6b9d34..ead81bf 100644
--- a/pkg/wasm_builder/lib/src/ir/data_segment.dart
+++ b/pkg/wasm_builder/lib/src/ir/data_segment.dart
@@ -5,15 +5,20 @@
 import 'dart:typed_data';
 
 import '../serialize/serialize.dart';
+import '../serialize/printer.dart';
 import 'ir.dart';
 
-class BaseDataSegment {
+abstract class BaseDataSegment {
   late final int index;
   late final Memory? memory;
   late final int? offset;
 
   BaseDataSegment(this.index, this.memory, this.offset);
   BaseDataSegment.uninitialized();
+
+  void printTo(IrPrinter p) {
+    throw UnimplementedError();
+  }
 }
 
 /// A data segment in a module.
@@ -43,4 +48,13 @@
     s.writeUnsigned(content.length);
     s.writeBytes(content);
   }
+
+  @override
+  void printTo(IrPrinter p) {
+    p.write('(data ');
+    p.writeDataReference(this);
+    p.write(' ');
+    p.write('<... ${content.length} bytes ...>');
+    p.write(')');
+  }
 }
diff --git a/pkg/wasm_builder/lib/src/ir/element.dart b/pkg/wasm_builder/lib/src/ir/element.dart
new file mode 100644
index 0000000..4e172dd
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/ir/element.dart
@@ -0,0 +1,199 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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/serialize.dart';
+import 'ir.dart';
+
+sealed class ElementSegment implements Serializable {}
+
+sealed class ActiveElementSegment extends ElementSegment {
+  final Table table;
+  final int startIndex;
+
+  ActiveElementSegment(this.table, this.startIndex);
+}
+
+/// Initializes a specific table with function references.
+///
+/// NOTE: Can only be used if the table type is `RefType.func(nullable: true)`.
+final class ActiveFunctionElementSegment extends ActiveElementSegment {
+  final List<BaseFunction> entries;
+
+  ActiveFunctionElementSegment(super.table, super.startIndex,
+      [List<BaseFunction>? entries])
+      : entries = entries ?? [];
+
+  @override
+  void serialize(Serializer s) {
+    final useTable0Encoding = table.index == 0;
+    if (useTable0Encoding) {
+      s.writeByte(0x00);
+    } else {
+      s.writeByte(0x02);
+      s.writeUnsigned(table.index);
+    }
+    s.serializeTableOffset(startIndex);
+
+    if (!useTable0Encoding) {
+      s.writeByte(_ElemKind.refFunc);
+    }
+
+    s.writeUnsigned(entries.length);
+    for (var entry in entries) {
+      s.writeUnsigned(entry.index);
+    }
+  }
+
+  static ActiveFunctionElementSegment deserialize(
+    Deserializer d,
+    Module module,
+    Types types,
+    Functions functions,
+    Tables tables,
+    Globals globals,
+  ) {
+    const int tableIndex = 0;
+    final byte = d.readByte();
+    assert(byte == 0x00 || byte == 0x02);
+
+    final offset = d.deserializeTableOffset(types, functions, globals);
+
+    if (byte == 0x02) {
+      final elemKind = d.readByte();
+      if (elemKind != _ElemKind.refFunc) {
+        throw UnimplementedError('Unsupported element kind.');
+      }
+    }
+
+    final table = tables[tableIndex];
+    final tableElement = ActiveFunctionElementSegment(table, offset);
+    final count = d.readUnsigned();
+    for (int i = 0; i < count; i++) {
+      tableElement.entries.add(functions[d.readUnsigned()]);
+    }
+    return tableElement;
+  }
+}
+
+/// Initializes a specific table with initialization expressions.
+final class ActiveExpressionElementSegment extends ActiveElementSegment {
+  final RefType type;
+  final List<List<Instruction>> expressions = [];
+
+  ActiveExpressionElementSegment(super.table, this.type, super.startIndex);
+
+  @override
+  void serialize(Serializer s) {
+    final useTableTable0RefNullFuncEncoding =
+        table.index == 0 && type == RefType.func(nullable: true);
+    if (useTableTable0RefNullFuncEncoding) {
+      s.writeByte(0x04);
+    } else {
+      s.writeByte(0x06);
+      s.writeUnsigned(table.index);
+    }
+    s.serializeTableOffset(startIndex);
+    if (!useTableTable0RefNullFuncEncoding) {
+      s.write(type);
+    }
+    s.writeUnsigned(expressions.length);
+    for (final expression in expressions) {
+      for (final instruction in expression) {
+        instruction.serialize(s);
+      }
+    }
+  }
+
+  static ActiveExpressionElementSegment deserialize(
+    Deserializer d,
+    Module module,
+    Types types,
+    Functions functions,
+    Tables tables,
+    Globals globals,
+  ) {
+    final kind = d.readByte();
+    assert(kind == 0x04 || kind == 0x06);
+
+    final useTableTable0RefNullFuncEncoding = kind == 0x04;
+    final tableIndex = useTableTable0RefNullFuncEncoding ? 0 : d.readUnsigned();
+    final offset = d.deserializeTableOffset(types, functions, globals);
+    final type = useTableTable0RefNullFuncEncoding
+        ? RefType.func(nullable: true)
+        : RefType.deserialize(d, types.defined);
+
+    final table = tables[tableIndex];
+    final tableElement = ActiveExpressionElementSegment(table, type, offset);
+    final count = d.readUnsigned();
+    for (int i = 0; i < count; i++) {
+      final instructions = <Instruction>[];
+      while (true) {
+        final instruction =
+            Instruction.deserializeConst(d, types, functions, globals);
+        instructions.add(instruction);
+        if (instruction is End) break;
+      }
+      tableElement.expressions.add(instructions);
+    }
+    return tableElement;
+  }
+}
+
+final class DeclarativeElementSegment implements ElementSegment {
+  final List<BaseFunction> entries;
+
+  DeclarativeElementSegment(this.entries);
+
+  @override
+  void serialize(Serializer s) {
+    if (entries.isEmpty) return;
+    s.writeByte(0x03);
+    s.writeByte(_ElemKind.refFunc);
+
+    s.writeUnsigned(entries.length);
+    for (final entry in entries) {
+      s.writeUnsigned(entry.index);
+    }
+  }
+
+  static DeclarativeElementSegment deserialize(
+      Deserializer d, Functions functions) {
+    if (d.readByte() != 0x03) {
+      throw StateError('Expected declarative segment to start with 0x03.');
+    }
+
+    final elemkind = d.readByte();
+    if (elemkind != _ElemKind.refFunc) {
+      throw UnsupportedError('Unsupported element kind: $elemkind');
+    }
+
+    final declaredFunctions = d.readList((d) => functions[d.readUnsigned()]);
+    return DeclarativeElementSegment(declaredFunctions);
+  }
+}
+
+abstract class _ElemKind {
+  static const refFunc = 0;
+}
+
+extension on Serializer {
+  void serializeTableOffset(int offset) {
+    I32Const(offset).serialize(this);
+    End().serialize(this);
+  }
+}
+
+extension on Deserializer {
+  int deserializeTableOffset(
+      Types types, Functions functions, Globals globals) {
+    final i0 = Instruction.deserializeConst(this, types, functions, globals);
+    final i1 = Instruction.deserializeConst(this, types, functions, globals);
+    if (i0 is! I32Const || i1 is! End) {
+      throw StateError('Expected offset to be encoded as '
+          '`(i32.const <value>) (end)`. '
+          'Got instead: (${i0.name}) (${i1.name})');
+    }
+    return i0.value;
+  }
+}
diff --git a/pkg/wasm_builder/lib/src/ir/elements.dart b/pkg/wasm_builder/lib/src/ir/elements.dart
new file mode 100644
index 0000000..8dde374
--- /dev/null
+++ b/pkg/wasm_builder/lib/src/ir/elements.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'ir.dart';
+
+class Elements {
+  final List<ElementSegment> segments;
+
+  Elements(this.segments);
+}
diff --git a/pkg/wasm_builder/lib/src/ir/functions.dart b/pkg/wasm_builder/lib/src/ir/functions.dart
index 6ea06ddc..1f15e45 100644
--- a/pkg/wasm_builder/lib/src/ir/functions.dart
+++ b/pkg/wasm_builder/lib/src/ir/functions.dart
@@ -12,12 +12,7 @@
   /// Defined functions.
   final List<DefinedFunction> defined;
 
-  /// Declared functions.
-  late final List<BaseFunction> declared;
-
-  Functions(this.imported, this.defined, this.declared);
-
-  Functions.withoutDeclared(this.imported, this.defined);
+  Functions(this.imported, this.defined);
 
   BaseFunction operator [](int index) => index < imported.length
       ? imported[index]
diff --git a/pkg/wasm_builder/lib/src/ir/instruction.dart b/pkg/wasm_builder/lib/src/ir/instruction.dart
index 1b5f617..898971c 100644
--- a/pkg/wasm_builder/lib/src/ir/instruction.dart
+++ b/pkg/wasm_builder/lib/src/ir/instruction.dart
@@ -102,51 +102,19 @@
       case 0x01:
         return Nop.deserialize(d);
       case 0x02:
-        {
-          if (d.peekByte() == 0x40) {
-            return BeginNoEffectBlock.deserialize(d);
-          }
-
-          final oldOffset = d.offset;
-          final value = d.readSigned();
-          d.offset = oldOffset;
-          if (value >= 0) {
-            return BeginFunctionBlock.deserialize(d, types);
-          }
-
-          return BeginOneOutputBlock.deserialize(d, types);
-        }
+        return d.deserializeBlock(types, tags, BeginNoEffectBlock.deserialize,
+            BeginOneOutputBlock.deserialize, BeginFunctionBlock.deserialize);
       case 0x03:
-        {
-          if (d.peekByte() == 0x40) {
-            return BeginNoEffectLoop.deserialize(d);
-          }
-          return BeginOneOutputLoop.deserialize(d, types);
-        }
+        return d.deserializeBlock(types, tags, BeginNoEffectLoop.deserialize,
+            BeginOneOutputLoop.deserialize, BeginFunctionLoop.deserialize);
       case 0x04:
-        {
-          if (d.peekByte() == 0x40) {
-            return BeginNoEffectIf.deserialize(d);
-          }
-          return BeginOneOutputIf.deserialize(d, types);
-        }
+        return d.deserializeBlock(types, tags, BeginNoEffectIf.deserialize,
+            BeginOneOutputIf.deserialize, BeginFunctionIf.deserialize);
       case 0x05:
         return Else.deserialize(d);
       case 0x06:
-        {
-          if (d.peekByte() == 0x40) {
-            return BeginNoEffectTry.deserialize(d);
-          }
-
-          final oldOffset = d.offset;
-          final value = d.readSigned();
-          d.offset = oldOffset;
-          if (value >= 0) {
-            return BeginFunctionTry.deserialize(d, types);
-          }
-
-          return BeginOneOutputTry.deserialize(d, types);
-        }
+        return d.deserializeBlock(types, tags, BeginNoEffectTry.deserialize,
+            BeginOneOutputTry.deserialize, BeginFunctionTry.deserialize);
       case 0x07:
         return CatchLegacy.deserialize(d, tags);
       case 0x08:
@@ -178,12 +146,12 @@
       case 0x1C:
         return SelectWithType.deserialize(d, types);
       case 0x1F:
-        {
-          if (d.peekByte() == 0x40) {
-            return BeginNoEffectTryTable.deserialize(d, tags);
-          }
-          return BeginOneOutputTryTable.deserialize(d, types, tags);
-        }
+        return d.deserializeBlock(
+            types,
+            tags,
+            BeginNoEffectTryTable.deserialize,
+            BeginOneOutputTryTable.deserialize,
+            BeginFunctionTryTable.deserialize);
       case 0x20:
         return LocalGet.deserialize(d);
       case 0x21:
@@ -628,7 +596,7 @@
 class BeginNoEffectBlock extends Instruction {
   const BeginNoEffectBlock();
 
-  static BeginNoEffectBlock deserialize(Deserializer d) {
+  static BeginNoEffectBlock deserialize(Deserializer d, Tags _) {
     d.readByte();
     return const BeginNoEffectBlock();
   }
@@ -658,7 +626,7 @@
 
   BeginOneOutputBlock(this.type);
 
-  static BeginOneOutputBlock deserialize(Deserializer d, Types types) {
+  static BeginOneOutputBlock deserialize(Deserializer d, Tags _, Types types) {
     final type = ValueType.deserialize(d, types.defined);
     assert(type is! FunctionType);
     return BeginOneOutputBlock(type);
@@ -693,7 +661,7 @@
 
   BeginFunctionBlock(this.type);
 
-  static BeginFunctionBlock deserialize(Deserializer d, Types types) {
+  static BeginFunctionBlock deserialize(Deserializer d, Tags _, Types types) {
     return BeginFunctionBlock(types.defined[d.readSigned()] as FunctionType);
   }
 
@@ -725,7 +693,7 @@
     s.writeByte(0x40);
   }
 
-  static BeginNoEffectLoop deserialize(Deserializer d) {
+  static BeginNoEffectLoop deserialize(Deserializer d, Tags _) {
     d.readByte();
     return const BeginNoEffectLoop();
   }
@@ -749,7 +717,7 @@
 
   BeginOneOutputLoop(this.type);
 
-  static BeginOneOutputLoop deserialize(Deserializer d, Types types) {
+  static BeginOneOutputLoop deserialize(Deserializer d, Tags _, Types types) {
     final type = ValueType.deserialize(d, types.defined);
     return BeginOneOutputLoop(type);
   }
@@ -781,6 +749,10 @@
 
   BeginFunctionLoop(this.type);
 
+  static BeginFunctionLoop deserialize(Deserializer d, Tags _, Types types) {
+    return BeginFunctionLoop(types.defined[d.readSigned()] as FunctionType);
+  }
+
   @override
   void serialize(Serializer s) {
     s.writeByte(0x03);
@@ -809,7 +781,7 @@
     s.writeByte(0x40);
   }
 
-  static BeginNoEffectIf deserialize(Deserializer d) {
+  static BeginNoEffectIf deserialize(Deserializer d, Tags _) {
     d.readByte();
     return const BeginNoEffectIf();
   }
@@ -826,7 +798,7 @@
 
   BeginOneOutputIf(this.type);
 
-  static BeginOneOutputIf deserialize(Deserializer d, Types types) {
+  static BeginOneOutputIf deserialize(Deserializer d, Tags _, Types types) {
     final type = ValueType.deserialize(d, types.defined);
     return BeginOneOutputIf(type);
   }
@@ -857,6 +829,10 @@
 
   BeginFunctionIf(this.type);
 
+  static BeginFunctionIf deserialize(Deserializer d, Tags _, Types types) {
+    return BeginFunctionIf(types.defined[d.readSigned()] as FunctionType);
+  }
+
   @override
   void serialize(Serializer s) {
     s.writeByte(0x04);
@@ -886,7 +862,7 @@
 class BeginNoEffectTry extends Instruction {
   const BeginNoEffectTry();
 
-  static BeginNoEffectTry deserialize(Deserializer d) {
+  static BeginNoEffectTry deserialize(Deserializer d, Tags _) {
     d.readByte();
     return const BeginNoEffectTry();
   }
@@ -916,7 +892,7 @@
 
   BeginOneOutputTry(this.type);
 
-  static BeginOneOutputTry deserialize(Deserializer d, Types types) {
+  static BeginOneOutputTry deserialize(Deserializer d, Tags _, Types types) {
     final type = ValueType.deserialize(d, types.defined);
     assert(type is! FunctionType);
     return BeginOneOutputTry(type);
@@ -949,7 +925,7 @@
 
   BeginFunctionTry(this.type);
 
-  static BeginFunctionTry deserialize(Deserializer d, Types types) {
+  static BeginFunctionTry deserialize(Deserializer d, Tags _, Types types) {
     return BeginFunctionTry(types.defined[d.readSigned()] as FunctionType);
   }
 
@@ -4348,7 +4324,7 @@
   BeginOneOutputTryTable(this.type, this.catches);
 
   static BeginOneOutputTryTable deserialize(
-      Deserializer d, Types types, Tags tags) {
+      Deserializer d, Tags tags, Types types) {
     final type = ValueType.deserialize(d, types.defined);
     final catches = d.readList((d) => TryTableCatch.deserialize(d, tags));
     return BeginOneOutputTryTable(type, catches);
@@ -4374,6 +4350,13 @@
 
   BeginFunctionTryTable(this.type, this.catches);
 
+  static BeginFunctionTryTable deserialize(
+      Deserializer d, Tags tags, Types types) {
+    final type = types.defined[d.readSigned()] as FunctionType;
+    final catches = d.readList((d) => TryTableCatch.deserialize(d, tags));
+    return BeginFunctionTryTable(type, catches);
+  }
+
   @override
   List<DefType> get usedDefTypes => [type];
 
@@ -4473,4 +4456,27 @@
 
 extension on Deserializer {
   int readTypeIndex() => readUnsigned();
+
+  Instruction deserializeBlock(
+      Types types,
+      Tags tags,
+      Instruction Function(Deserializer, Tags) deserializeNoInputNoOutput,
+      Instruction Function(Deserializer, Tags, Types) deserializeOneOutput,
+      Instruction Function(Deserializer, Tags, Types) deserializeGeneral) {
+    if (peekByte() == 0x40) {
+      // 0x40 means empty type, the block has neither inputs nor outputs.
+      return deserializeNoInputNoOutput(this, tags);
+    }
+    final oldOffset = offset;
+    final value = readSigned();
+    offset = oldOffset;
+    if (value < 0) {
+      // not positive signed integer, the block has no inputs and exactly one
+      // output.
+      return deserializeOneOutput(this, tags, types);
+    }
+    // positive signed integer is index into defined types and must be a
+    // function type representing the input & output types.
+    return deserializeGeneral(this, tags, types);
+  }
 }
diff --git a/pkg/wasm_builder/lib/src/ir/ir.dart b/pkg/wasm_builder/lib/src/ir/ir.dart
index b6cf0a2..481c4a7 100644
--- a/pkg/wasm_builder/lib/src/ir/ir.dart
+++ b/pkg/wasm_builder/lib/src/ir/ir.dart
@@ -21,6 +21,14 @@
 export 'memory.dart' show DefinedMemory, ImportedMemory, Memory, MemoryExport;
 export 'module.dart' show Module;
 export 'tables.dart' show Tables;
+export 'elements.dart' show Elements;
+export 'element.dart'
+    show
+        ElementSegment,
+        ActiveElementSegment,
+        ActiveFunctionElementSegment,
+        ActiveExpressionElementSegment,
+        DeclarativeElementSegment;
 export 'table.dart' show DefinedTable, ImportedTable, Table, TableExport;
 export 'tags.dart' show DefinedTag, ImportedTag, Tag, Tags, TagExport;
 export 'types.dart' show Types;
diff --git a/pkg/wasm_builder/lib/src/ir/module.dart b/pkg/wasm_builder/lib/src/ir/module.dart
index 29cda4c..12ea820 100644
--- a/pkg/wasm_builder/lib/src/ir/module.dart
+++ b/pkg/wasm_builder/lib/src/ir/module.dart
@@ -26,6 +26,7 @@
   late final Functions _functions;
   late final BaseFunction? _start;
   late final Tables _tables;
+  late final Elements _elements;
   late final Tags _tags;
   late final Memories _memories;
   late final Exports _exports;
@@ -43,6 +44,7 @@
     Functions functions,
     BaseFunction? start,
     Tables tables,
+    Elements elements,
     Tags tags,
     Memories memories,
     Exports exports,
@@ -60,6 +62,7 @@
     _functions = functions;
     _start = start;
     _tables = tables;
+    _elements = elements;
     _tags = tags;
     _memories = memories;
     _exports = exports;
@@ -75,6 +78,7 @@
   Functions get functions => _functions;
   BaseFunction? get start => _start;
   Tables get tables => _tables;
+  Elements get elements => _elements;
   Tags get tags => _tags;
   Memories get memories => _memories;
   Exports get exports => _exports;
@@ -103,9 +107,7 @@
     GlobalSection(globals.defined, watchPoints).serialize(s);
     ExportSection(exports.exported, watchPoints).serialize(s);
     StartSection(start, watchPoints).serialize(s);
-    ElementSection(
-            tables.defined, tables.imported, functions.declared, watchPoints)
-        .serialize(s);
+    ElementSection(elements, watchPoints).serialize(s);
     DataCountSection(dataSegments.defined, watchPoints).serialize(s);
     CodeSection(functions.defined, watchPoints).serialize(s);
     DataSection(dataSegments.defined, watchPoints).serialize(s);
@@ -198,10 +200,7 @@
         StartSection.deserialize(startFunctionSections?.single, functions);
 
     final elementSections = sections[ElementSection.sectionId];
-    // As side-effect initializes [Table.elements]
-    // As side-effect initializes [ImprotedTable.setElements]
-    // As side-effect initializes [Functions.declaredFunctions]
-    ElementSection.deserialize(
+    final elements = ElementSection.deserialize(
         elementSections?.single, module, types, functions, tables, globals);
 
     final dataCountSections = sections[DataCountSection.sectionId];
@@ -230,6 +229,7 @@
         functions,
         start,
         tables,
+        elements,
         tags,
         memories,
         exports,
@@ -257,39 +257,27 @@
     if (settings.hasFilters) {
       // If we have any filters, we treat those as roots.
       if (settings.typeFilters.isNotEmpty) {
-        for (final type in types.defined) {
-          final name = mp.typeNamer
-              .nameDefType(type, activateOnReferenceCallback: false);
-          if (settings.printTypeConstituents(name)) {
-            mp.enqueueType(type);
-          }
+        for (final type in mp.typeNamer.sort(mp.typeNamer
+            .filter(types.defined, settings.printTypeConstituents))) {
+          mp.enqueueType(type);
         }
       }
       if (settings.globalFilters.isNotEmpty) {
-        for (final global in globals.defined) {
-          final name = mp.globalNamer
-              .nameGlobal(global, activateOnReferenceCallback: false);
-          if (settings.printGlobalInitializer(name)) {
-            mp.enqueueGlobal(global);
-          }
+        for (final global in mp.globalNamer.sort(mp.globalNamer
+            .filter(globals.defined, settings.printGlobalInitializer))) {
+          mp.enqueueGlobal(global);
         }
       }
       if (settings.functionFilters.isNotEmpty) {
-        for (final function in functions.defined) {
-          final name = mp.functionNamer
-              .nameFunction(function, activateOnReferenceCallback: false);
-          if (settings.printFunctionBody(name)) {
-            mp.enqueueFunction(function);
-          }
+        for (final function in mp.functionNamer.sort(mp.functionNamer
+            .filter(functions.defined, settings.printFunctionBody))) {
+          mp.enqueueFunction(function);
         }
       }
       if (settings.tableFilters.isNotEmpty) {
-        for (final table in tables.defined) {
-          final name = mp.tableNamer
-              .nameTable(table, activateOnReferenceCallback: false);
-          if (settings.printFunctionBody(name)) {
-            mp.enqueueTable(table);
-          }
+        for (final table in mp.tableNamer.sort(mp.tableNamer
+            .filter(tables.defined, settings.printTableElements))) {
+          mp.enqueueTable(table);
         }
       }
     } else {
diff --git a/pkg/wasm_builder/lib/src/ir/table.dart b/pkg/wasm_builder/lib/src/ir/table.dart
index dc760d8..23d35b5 100644
--- a/pkg/wasm_builder/lib/src/ir/table.dart
+++ b/pkg/wasm_builder/lib/src/ir/table.dart
@@ -41,14 +41,10 @@
 
 /// A table defined in a module.
 class DefinedTable extends Table {
-  final List<BaseFunction?> elements;
+  DefinedTable(super.enclosingModule, super.finalizableIndex, super.type,
+      super.minSize, super.maxSize);
 
-  DefinedTable(super.enclosingModule, this.elements, super.finalizableIndex,
-      super.type, super.minSize, super.maxSize);
-
-  void printTo(IrPrinter p, {bool includeElements = true}) {
-    // NOTE: This format differs from what V8's `wami` will print.
-    // It makes it easier to see the exact values of the table.
+  void printTo(IrPrinter p) {
     p.write('(table ');
     p.writeTableReference(this, alwaysPrint: true);
     String? exportName;
@@ -65,23 +61,6 @@
 
     p.write(' $minSize ');
     p.writeValueType(type);
-    if (includeElements) {
-      if (elements.any((e) => e != null)) {
-        p.writeln();
-        p.withIndent(() {
-          for (int i = 0; i < elements.length; ++i) {
-            final function = elements[i];
-            if (function != null) {
-              p.write('(def $i ');
-              p.writeFunctionReference(function);
-              p.writeln(')');
-            }
-          }
-        });
-      }
-    } else {
-      p.write(' <...>');
-    }
     p.write(')');
   }
 }
@@ -93,9 +72,6 @@
   @override
   final String name;
 
-  /// Functions to be inserted via the elements section.
-  final Map<int, BaseFunction> setElements = {};
-
   ImportedTable(super.enclosingModule, this.module, this.name,
       super.finalizableIndex, super.type, super.minSize, super.maxSize);
 
@@ -107,29 +83,13 @@
     super.serialize(s);
   }
 
-  void printTo(IrPrinter p, {bool includeElements = true}) {
-    // NOTE: This format differs from what V8's `wami` will print.
-    // It makes it easier to see the exact values of the table.
+  void printTo(IrPrinter p) {
     p.write('(table ');
     p.writeTableReference(this, alwaysPrint: true);
     p.write(' ');
     p.writeImport(module, name);
     p.write(' $minSize ');
     p.writeValueType(type);
-    if (includeElements) {
-      if (setElements.isNotEmpty) {
-        p.writeln();
-        p.withIndent(() {
-          setElements.forEach((int i, function) {
-            p.write('(set $i ');
-            p.writeFunctionReference(function);
-            p.writeln(')');
-          });
-        });
-      }
-    } else {
-      p.write(' <...>');
-    }
     p.write(')');
   }
 }
diff --git a/pkg/wasm_builder/lib/src/serialize/printer.dart b/pkg/wasm_builder/lib/src/serialize/printer.dart
index 3bdf46d..da5197ce 100644
--- a/pkg/wasm_builder/lib/src/serialize/printer.dart
+++ b/pkg/wasm_builder/lib/src/serialize/printer.dart
@@ -11,21 +11,27 @@
   final ir.Module _module;
 
   late final typeNamer =
-      _TypeNamer(settings.scrubAbsoluteUris, _module, enqueueType);
+      TypeNamer(settings.scrubAbsoluteUris, _module, enqueueType);
   late final globalNamer =
-      _GlobalNamer(settings.scrubAbsoluteUris, _module, enqueueGlobal);
+      GlobalNamer(settings.scrubAbsoluteUris, _module, enqueueGlobal);
   late final functionNamer =
-      _FunctionNamer(settings.scrubAbsoluteUris, _module, enqueueFunction);
+      FunctionNamer(settings.scrubAbsoluteUris, _module, enqueueFunction);
   late final tagNamer =
-      _TagNamer(settings.scrubAbsoluteUris, _module, enqueueTag);
+      TagNamer(settings.scrubAbsoluteUris, _module, enqueueTag);
   late final tableNamer =
-      _TableNamer(settings.scrubAbsoluteUris, _module, enqueueTable);
+      TableNamer(settings.scrubAbsoluteUris, _module, enqueueTable);
+  late final dataNamer =
+      DataNamer(settings.scrubAbsoluteUris, _module, enqueueDataSegment);
 
   final _types = <ir.DefType, String>{};
   final _tags = <ir.Tag, String>{};
   final _tables = <ir.Table, String>{};
+  final _elementSegments = <ir.ElementSegment>{};
+  final _activeElementSegments = <ir.Table, Map<int, String>>{};
+  final _declarativeElements = <ir.DeclarativeElementSegment, String>{};
   final _globals = <ir.Global, String>{};
   final _functions = <ir.BaseFunction, String>{};
+  final _dataSegments = <ir.BaseDataSegment, String>{};
 
   final _typeQueue = Queue<ir.DefType>();
   final _functionsQueue = Queue<ir.DefinedFunction>();
@@ -37,14 +43,14 @@
   ModulePrinter(this._module, {this.settings = const ModulePrintSettings()});
 
   IrPrinter newIrPrinter() => IrPrinter._(settings.preferMultiline, _module,
-      typeNamer, globalNamer, functionNamer, tagNamer, tableNamer);
+      typeNamer, globalNamer, functionNamer, tagNamer, tableNamer, dataNamer);
 
   void enqueueType(ir.DefType type) {
     if (!_types.containsKey(type)) {
       _types[type] = '';
       _generateDefType(type,
           includeConstituents: settings.printTypeConstituents(
-              typeNamer.nameDefType(type, activateOnReferenceCallback: false)));
+              typeNamer.name(type, activateOnReferenceCallback: false)));
     }
   }
 
@@ -52,8 +58,8 @@
     if (!_globals.containsKey(global)) {
       _globals[global] = '';
       _generateGlobal(global,
-          includeInitializer: settings.printGlobalInitializer(globalNamer
-              .nameGlobal(global, activateOnReferenceCallback: false)));
+          includeInitializer: settings.printGlobalInitializer(
+              globalNamer.name(global, activateOnReferenceCallback: false)));
     }
   }
 
@@ -78,9 +84,95 @@
   void enqueueTable(ir.Table table) {
     if (!_tables.containsKey(table)) {
       _tables[table] = '';
-      _generateTable(table,
-          includeElements: settings.printTableElements(
-              tableNamer.nameTable(table, activateOnReferenceCallback: false)));
+      _generateTable(table);
+
+      for (final segment in _module.elements.segments) {
+        if (segment is ir.ActiveElementSegment && segment.table == table) {
+          enqueueElementSegment(segment);
+        }
+      }
+    }
+  }
+
+  void enqueueElementSegment(ir.ElementSegment segment) {
+    if (_elementSegments.add(segment)) {
+      switch (segment) {
+        case ir.ActiveFunctionElementSegment(
+            startIndex: final start,
+            table: final table,
+            entries: final entries
+          ):
+          final printedEntries =
+              _activeElementSegments.putIfAbsent(table, () => {});
+          if (settings.printTableElements(tableNamer.name(segment.table,
+              activateOnReferenceCallback: false))) {
+            for (int i = 0; i < entries.length; ++i) {
+              final index = start + i;
+              final ip = newIrPrinter();
+              ip.write('(');
+              ir.RefFunc(entries[i]).printTo(ip);
+              ip.write(')');
+              printedEntries[index] = ip.getText();
+            }
+          }
+
+          break;
+        case ir.ActiveExpressionElementSegment(
+            startIndex: final start,
+            table: final table,
+            expressions: final expressions
+          ):
+          final printedEntries =
+              _activeElementSegments.putIfAbsent(table, () => {});
+          if (settings.printTableElements(tableNamer.name(segment.table,
+              activateOnReferenceCallback: false))) {
+            for (int i = 0; i < expressions.length; ++i) {
+              final index = start + i;
+              final expression = expressions[i];
+              final ip = newIrPrinter();
+              for (int j = 0; j < expression.length; ++j) {
+                ip.write(j > 0 ? ' (' : '(');
+                expression[j].printTo(ip);
+                ip.write(')');
+              }
+              printedEntries[index] = ip.getText();
+            }
+          }
+          break;
+        case ir.DeclarativeElementSegment(entries: final entries):
+          final ip = newIrPrinter();
+          ip.write('(elem declare');
+          if (ip.preferMultiline) {
+            ip.indent();
+          }
+          for (final entry in entries) {
+            if (ip.preferMultiline) {
+              ip.writeln();
+            } else {
+              ip.write(' ');
+            }
+            ip.write('(');
+            ir.RefFunc(entry).printTo(ip);
+            ip.write(')');
+          }
+          if (ip.preferMultiline) {
+            ip.deindent();
+          }
+          ip.write(')');
+          _declarativeElements[segment] = ip.getText();
+          break;
+      }
+    }
+  }
+
+  void enqueueDataSegment(ir.BaseDataSegment dataSegment) {
+    if (!_dataSegments.containsKey(dataSegment)) {
+      // Since below `printTo` will call namer to name the data segment which
+      // will trigger this callback again if not pre-initialized to ''.
+      _dataSegments[dataSegment] = '';
+      final ip = newIrPrinter();
+      dataSegment.printTo(ip);
+      _dataSegments[dataSegment] = ip.getText();
     }
   }
 
@@ -90,15 +182,34 @@
         final fun = _functionsQueue.removeFirst();
 
         _generateFunction(fun,
-            includingBody: settings.printFunctionBody(functionNamer
-                .nameFunction(fun, activateOnReferenceCallback: false)));
+            includingBody: settings.printFunctionBody(
+                functionNamer.name(fun, activateOnReferenceCallback: false)));
       }
     }
 
     final mp = IndentPrinter();
     mp.writeln('(module \$${_module.moduleName}');
     mp.withIndent(() {
-      for (final group in _module.types.recursionGroups) {
+      final groups = _module.types.recursionGroups
+          .where((group) => group.any((t) => _types.containsKey(t)))
+          .toList();
+      if (settings.printInSortedOrder) {
+        groups.sort((a, b) {
+          final firstA = typeNamer.name(
+              a.firstWhere((t) => !typeNamer
+                  .name(t, activateOnReferenceCallback: false)
+                  .startsWith('\$brand')),
+              activateOnReferenceCallback: false);
+          final firstB = typeNamer.name(
+              b.firstWhere((t) => !typeNamer
+                  .name(t, activateOnReferenceCallback: false)
+                  .startsWith('\$brand')),
+              activateOnReferenceCallback: false);
+          return firstA.compareTo(firstB);
+        });
+      }
+
+      for (final group in groups) {
         final filtered = group.where((t) => _types.containsKey(t)).toList();
         if (filtered.isNotEmpty) {
           if (filtered.length == 1) {
@@ -116,55 +227,54 @@
           }
         }
       }
-      for (final fun in _module.functions.imported) {
-        final s = _functions[fun];
-        if (s != null) {
-          mp.write(s);
+
+      void printOrdered<T>(
+          List<T> all, Namer<T> namer, Map<T, String> enqueued) {
+        /// Either we print the elements in the name order (defined by a
+        /// [Namer]) or we print them in same order as they appear in the wasm
+        /// module.
+        final filtered = all.where((v) => enqueued.containsKey(v)).toList();
+        for (final key in (settings.printInSortedOrder
+            ? namer.sort(filtered)
+            : filtered)) {
+          mp.write(enqueued[key]!);
           mp.writeln();
         }
       }
-      for (final global in _module.globals.imported) {
-        final s = _globals[global];
-        if (s != null) {
-          mp.write(s);
-          mp.writeln();
+
+      printOrdered(_module.functions.imported, functionNamer, _functions);
+      printOrdered(_module.globals.imported, globalNamer, _globals);
+      printOrdered(_module.tables.imported, tableNamer, _tables);
+      printOrdered(_module.tables.defined, tableNamer, _tables);
+      printOrdered(_module.tags.defined, tagNamer, _tags);
+      printOrdered(_module.globals.defined, globalNamer, _globals);
+
+      _activeElementSegments.forEach((table, values) {
+        final ip = newIrPrinter();
+        ip.write('(elem ');
+        ip.writeTableReference(table, alwaysPrint: true);
+        if (values.isEmpty) {
+          ip.write(' <...>');
+        } else {
+          ip.withIndent(() {
+            final indices = values.keys.toList()..sort();
+            for (int i = 0; i < indices.length; ++i) {
+              ip.writeln();
+              final index = indices[i];
+              final value = values[index]!;
+              ip.write('(set $index $value)');
+            }
+          });
         }
-      }
-      for (final table in _module.tables.imported) {
-        final s = _tables[table];
-        if (s != null) {
-          mp.write(s);
-          mp.writeln();
-        }
-      }
-      for (final tag in _module.tags.defined) {
-        final s = _tags[tag];
-        if (s != null) {
-          mp.write(s);
-          mp.writeln();
-        }
-      }
-      for (final global in _module.globals.defined) {
-        final s = _globals[global];
-        if (s != null) {
-          mp.write(s);
-          mp.writeln();
-        }
-      }
-      for (final table in _module.tables.defined) {
-        final s = _tables[table];
-        if (s != null) {
-          mp.write(s);
-          mp.writeln();
-        }
-      }
-      for (final fun in _module.functions.defined) {
-        final s = _functions[fun];
-        if (s != null) {
-          mp.write(s);
-          mp.writeln();
-        }
-      }
+        ip.write(')');
+        mp.writeln(ip.getText());
+      });
+      _declarativeElements.forEach((_, value) {
+        mp.writeln(value);
+      });
+
+      printOrdered(_module.functions.defined, functionNamer, _functions);
+      printOrdered(_module.dataSegments.defined, dataNamer, _dataSegments);
     });
     mp.write(')');
     return mp.getText();
@@ -176,12 +286,12 @@
     _tags[tag] = p.getText();
   }
 
-  void _generateTable(ir.Table table, {required bool includeElements}) {
+  void _generateTable(ir.Table table) {
     final p = newIrPrinter();
     if (table is ir.DefinedTable) {
-      table.printTo(p, includeElements: includeElements);
+      table.printTo(p);
     } else if (table is ir.ImportedTable) {
-      table.printTo(p, includeElements: includeElements);
+      table.printTo(p);
     } else {
       return;
     }
@@ -225,6 +335,7 @@
   final List<RegExp> typeFilters;
   final bool preferMultiline;
   final bool scrubAbsoluteUris;
+  final bool printInSortedOrder;
 
   const ModulePrintSettings(
       {this.functionFilters = const [],
@@ -232,7 +343,8 @@
       this.globalFilters = const [],
       this.typeFilters = const [],
       this.preferMultiline = false,
-      this.scrubAbsoluteUris = false});
+      this.scrubAbsoluteUris = false,
+      this.printInSortedOrder = false});
 
   bool printFunctionBody(String name) {
     if (functionFilters.isEmpty) return true;
@@ -338,22 +450,30 @@
   final bool preferMultiline;
   final ir.Module module;
 
-  final _TypeNamer _typeNamer;
-  final _GlobalNamer _globalNamer;
-  final _FunctionNamer _functionNamer;
-  final _TagNamer _tagNamer;
-  final _TableNamer _tableNamer;
+  final TypeNamer _typeNamer;
+  final GlobalNamer _globalNamer;
+  final FunctionNamer _functionNamer;
+  final TagNamer _tagNamer;
+  final TableNamer _tableNamer;
+  final DataNamer _dataNamer;
 
   _LocalNamer? _localNamer;
   final _labelNamer = _LabelNamer();
 
-  IrPrinter._(this.preferMultiline, this.module, this._typeNamer,
-      this._globalNamer, this._functionNamer, this._tagNamer, this._tableNamer);
+  IrPrinter._(
+      this.preferMultiline,
+      this.module,
+      this._typeNamer,
+      this._globalNamer,
+      this._functionNamer,
+      this._tagNamer,
+      this._tableNamer,
+      this._dataNamer);
 
   /// Returns a new [IrPrinter] with same settings, but empty indentation,
   /// empty text content and no local namer.
   IrPrinter dup() => IrPrinter._(preferMultiline, module, _typeNamer,
-      _globalNamer, _functionNamer, _tagNamer, _tableNamer);
+      _globalNamer, _functionNamer, _tagNamer, _tableNamer, _dataNamer);
 
   void beginLabeledBlock(ir.Instruction? instruction) {
     _labelNamer.stack.add(LabelInfo(instruction));
@@ -374,11 +494,11 @@
   }
 
   void writeLocalReference(ir.Local local) {
-    write(_localNamer!.nameLocal(local.index));
+    write(_localNamer!.name(local.index));
   }
 
   void writeLocalIndexReference(int localIndex) {
-    write(_localNamer!.nameLocal(localIndex));
+    write(_localNamer!.name(localIndex));
   }
 
   void withLocalNames(Map<int, String> names, void Function() fun) {
@@ -397,7 +517,7 @@
   }
 
   String _defTypeName(ir.DefType type, bool nullable, bool ref) {
-    final name = _typeNamer.nameDefType(type);
+    final name = _typeNamer.name(type);
     if (ref) {
       return nullable ? '(ref null $name)' : '(ref $name)';
     }
@@ -434,7 +554,7 @@
   }
 
   void writeDefTypeReference(ir.DefType type) {
-    write(_typeNamer.nameDefType(type));
+    write(_typeNamer.name(type));
   }
 
   void writeFunctionType(ir.FunctionType type) {
@@ -450,7 +570,7 @@
   }
 
   void writeTableReference(ir.Table? table, {bool alwaysPrint = false}) {
-    final name = _tableNamer.nameTable(table);
+    final name = _tableNamer.name(table);
     if (alwaysPrint) {
       write(name);
       return;
@@ -468,19 +588,19 @@
   }
 
   void writeGlobalReference(ir.Global global) {
-    write(_globalNamer.nameGlobal(global));
+    write(_globalNamer.name(global));
   }
 
   void writeFunctionReference(ir.BaseFunction function) {
-    write(_functionNamer.nameFunction(function));
+    write(_functionNamer.name(function));
   }
 
   void writeTagReference(ir.Tag tag) {
-    write(_tagNamer.nameTag(tag));
+    write(_tagNamer.name(tag));
   }
 
   void writeDataReference(ir.BaseDataSegment dataSegment) {
-    throw UnimplementedError();
+    write(_dataNamer.name(dataSegment));
   }
 
   void writeMemoryReference(ir.Memory memory) {
@@ -488,7 +608,7 @@
   }
 }
 
-class _Namer<T> {
+abstract class Namer<T> {
   final ir.Module _module;
   final bool _scrubAbsoluteFileUris;
 
@@ -515,7 +635,9 @@
     return map;
   })();
 
-  _Namer(this._scrubAbsoluteFileUris, this._module, this._onReference);
+  Namer(this._scrubAbsoluteFileUris, this._module, this._onReference);
+
+  String name(T key, {bool activateOnReferenceCallback = true});
 
   String _name(T key, String? name, String unnamedPrefix,
       bool activateOnReferenceCallback) {
@@ -535,37 +657,51 @@
     if (name != null && _scrubAbsoluteFileUris) {
       name = _sanitizeAbsoluteFileUris(name);
     }
-    final sanitizedName =
-        name != null ? _sanitizeName(name) : '$unnamedPrefix${_nextId++}';
+    final sanitizedName = name != null
+        ? _sanitizeName(name)
+        : '$unnamedPrefix${activateOnReferenceCallback ? _nextId++ : 0}';
     final quotedName = '\$$sanitizedName';
     return activateOnReferenceCallback
         ? _names[key] ??= quotedName
         : quotedName;
   }
+
+  List<T> filter(List<T> values, bool Function(String) filter) => values
+      .where((value) => filter(name(value, activateOnReferenceCallback: false)))
+      .toList();
+
+  List<T> sort(List<T> values) => values.toList()
+    ..sort((a, b) {
+      return name(a, activateOnReferenceCallback: false)
+          .compareTo(name(b, activateOnReferenceCallback: false));
+    });
 }
 
-class _FunctionNamer extends _Namer<ir.BaseFunction> {
-  _FunctionNamer(super.scrubAbsoluteUris, super.module, super.onReference);
+class FunctionNamer extends Namer<ir.BaseFunction> {
+  FunctionNamer(super.scrubAbsoluteUris, super.module, super.onReference);
 
-  String nameFunction(ir.BaseFunction function,
+  @override
+  String name(ir.BaseFunction function,
       {bool activateOnReferenceCallback = true}) {
     return super._name(
         function, function.functionName, '', activateOnReferenceCallback);
   }
 }
 
-class _TagNamer extends _Namer<ir.Tag> {
-  _TagNamer(super.scrubAbsoluteUris, super.module, super.onReference);
+class TagNamer extends Namer<ir.Tag> {
+  TagNamer(super.scrubAbsoluteUris, super.module, super.onReference);
 
-  String nameTag(ir.Tag tag, {bool activateOnReferenceCallback = true}) {
+  @override
+  String name(ir.Tag tag, {bool activateOnReferenceCallback = true}) {
     return super._name(tag, null, 'tag', activateOnReferenceCallback);
   }
 }
 
-class _TableNamer extends _Namer<ir.Table> {
-  _TableNamer(super.scubUris, super.module, super.onReference);
+class TableNamer extends Namer<ir.Table> {
+  TableNamer(super.scubUris, super.module, super.onReference);
 
-  String nameTable(ir.Table? table, {bool activateOnReferenceCallback = true}) {
+  @override
+  String name(ir.Table? table, {bool activateOnReferenceCallback = true}) {
     table ??= _module.tables.defined.first;
 
     // Try to use cache first to avoid O(n) scan in the exports.
@@ -577,33 +713,34 @@
   }
 }
 
-class _TypeNamer extends _Namer<ir.DefType> {
-  _TypeNamer(super.scrubAbsoluteUris, super.module, super.onReference);
+class TypeNamer extends Namer<ir.DefType> {
+  TypeNamer(super.scrubAbsoluteUris, super.module, super.onReference);
 
-  String nameDefType(ir.DefType type,
-      {bool activateOnReferenceCallback = true}) {
+  @override
+  String name(ir.DefType type, {bool activateOnReferenceCallback = true}) {
     return super._name(type, type is ir.DataType ? type.name : null, 'type',
         activateOnReferenceCallback);
   }
 }
 
-class _LocalNamer extends _Namer<int> {
+class _LocalNamer extends Namer<int> {
   final Map<int, String> _namedVariables;
 
   _LocalNamer(bool scrubAbsoluteUris, ir.Module module, this._namedVariables)
       : super(scrubAbsoluteUris, module, (_) {});
 
-  String nameLocal(int index, {bool activateOnReferenceCallback = true}) {
+  @override
+  String name(int index, {bool activateOnReferenceCallback = true}) {
     return super._name(
         index, _namedVariables[index], 'var', activateOnReferenceCallback);
   }
 }
 
-class _GlobalNamer extends _Namer<ir.Global> {
-  _GlobalNamer(super.scrubAbsoluteUris, super.module, super.onReference);
+class GlobalNamer extends Namer<ir.Global> {
+  GlobalNamer(super.scrubAbsoluteUris, super.module, super.onReference);
 
-  String nameGlobal(ir.Global global,
-      {bool activateOnReferenceCallback = true}) {
+  @override
+  String name(ir.Global global, {bool activateOnReferenceCallback = true}) {
     String? gn = global.globalName;
     if (gn == null && global is ir.ImportedGlobal) {
       gn = '${global.module}.${global.name}';
@@ -612,6 +749,16 @@
   }
 }
 
+class DataNamer extends Namer<ir.BaseDataSegment> {
+  DataNamer(super.scubUris, super.module, super.onReference);
+
+  @override
+  String name(ir.BaseDataSegment data,
+      {bool activateOnReferenceCallback = true}) {
+    return super._name(data, null, 'data', true);
+  }
+}
+
 class _LabelNamer {
   int _nextId = 0;
   final stack = <LabelInfo>[];
diff --git a/pkg/wasm_builder/lib/src/serialize/sections.dart b/pkg/wasm_builder/lib/src/serialize/sections.dart
index 7077a61..6b73699 100644
--- a/pkg/wasm_builder/lib/src/serialize/sections.dart
+++ b/pkg/wasm_builder/lib/src/serialize/sections.dart
@@ -88,6 +88,7 @@
     final List<List<ir.DefType>> recursionGroups = [];
 
     final count = d.readUnsigned();
+    int typeIndex = 0;
     for (int i = 0; i < count; i++) {
       late int recursionGroupMemberCount;
       if (d.peekByte() == 0x4E) {
@@ -111,6 +112,7 @@
       final startOffset = d.offset;
       for (int j = 0; j < recursionGroupMemberCount; j++) {
         final type = ir.DefType.deserializeAllocate(d, definedTypes);
+        type.index = typeIndex++;
         typesInGroup.add(type);
         definedTypes.add(type);
       }
@@ -200,8 +202,11 @@
           case 0x04: // Tag
             final exceptionByte = d.readByte();
             if (exceptionByte != 0x00) throw 'unexpected';
-            d.readUnsigned(); // typeIndex
-            throw 'runtimeType';
+            final type = types[d.readUnsigned()] as ir.FunctionType;
+            final tag = ir.ImportedTag(
+                module, moduleName, name, ir.FinalizableIndex(), type);
+            tag.finalizableIndex.value = importedTags.length;
+            importedTags.add(tag);
           default:
             throw "Invalid import kind: $kind";
         }
@@ -235,7 +240,7 @@
   static ir.Functions deserialize(Deserializer? d, ir.Module module,
       ir.Types types, List<ir.ImportedFunction> imported) {
     if (d == null) {
-      return ir.Functions.withoutDeclared(imported, []);
+      return ir.Functions(imported, []);
     }
 
     final List<ir.DefinedFunction> defined = [];
@@ -247,7 +252,7 @@
           module, ir.FinalizableIndex()..value = imported.length + i, type);
       defined.add(function);
     }
-    return ir.Functions.withoutDeclared(imported, defined);
+    return ir.Functions(imported, defined);
   }
 }
 
@@ -281,7 +286,6 @@
       final maxSize = limits == 0x01 ? d.readUnsigned() : null;
       final table = ir.DefinedTable(
           module,
-          [],
           ir.FinalizableIndex()..value = imported.length + i,
           type,
           minSize,
@@ -495,188 +499,24 @@
   }
 }
 
-sealed class _Element implements Serializable {}
-
-class _TableElement implements _Element {
-  final ir.Table table;
-  final int startIndex;
-  final List<ir.BaseFunction> entries = [];
-
-  _TableElement(this.table, this.startIndex);
-
-  @override
-  void serialize(Serializer s) {
-    final int kind;
-    if (table.index == 0) {
-      kind = 0x00;
-      s.writeByte(kind);
-    } else {
-      kind = 0x06;
-      s.writeByte(kind);
-      s.writeUnsigned(table.index);
-    }
-
-    ir.I32Const(startIndex).serialize(s);
-    ir.End().serialize(s);
-
-    if (kind == 0x06) {
-      s.write(table.type);
-    }
-    s.writeUnsigned(entries.length);
-    for (var entry in entries) {
-      if (kind == 0x0) {
-        s.writeUnsigned(entry.index);
-      } else {
-        ir.RefFunc(entry).serialize(s);
-        ir.End().serialize(s);
-      }
-    }
-  }
-
-  static _TableElement deserialize(
-    Deserializer d,
-    ir.Module module,
-    ir.Types types,
-    ir.Functions functions,
-    ir.Tables tables,
-    ir.Globals globals,
-  ) {
-    final int tableIndex;
-    final kind = d.readByte();
-    switch (kind) {
-      case 0x00:
-        tableIndex = 0;
-        break;
-      case 0x06:
-        tableIndex = d.readUnsigned();
-        break;
-      default:
-        throw "unsupported element segment kind $kind";
-    }
-
-    final i0 = ir.Instruction.deserializeConst(d, types, functions, globals);
-    final i1 = ir.Instruction.deserializeConst(d, types, functions, globals);
-    if (i0 is! ir.I32Const || i1 is! ir.End) {
-      throw StateError('Expected offset to be encoded as '
-          '`(i32.const <value>) (end)`. '
-          'Got instead: (${i0.name}) (${i1.name})');
-    }
-    final offset = i0.value;
-
-    if (kind == 0x06) {
-      ir.RefType.deserialize(d, types.defined);
-    }
-
-    final table = tables[tableIndex];
-    final tableElement = _TableElement(table, offset);
-    final count = d.readUnsigned();
-    for (int i = 0; i < count; i++) {
-      if (kind == 0x0) {
-        tableElement.entries.add(functions[d.readUnsigned()]);
-      } else {
-        final i0 =
-            ir.Instruction.deserializeConst(d, types, functions, globals);
-        final i1 =
-            ir.Instruction.deserializeConst(d, types, functions, globals);
-        if (i0 is! ir.RefFunc || i1 is! ir.End) {
-          throw StateError('Expected function reference to be encoded as '
-              '`(ref.func <value>) (end)`. '
-              'Got instead: (${i0.name}) (${i1.name})');
-        }
-        tableElement.entries.add(i0.function);
-      }
-    }
-    return tableElement;
-  }
-}
-
-class _DeclaredElement implements _Element {
-  final List<ir.BaseFunction> entries;
-
-  _DeclaredElement(this.entries);
-
-  @override
-  void serialize(Serializer s) {
-    if (entries.isEmpty) return;
-    s.writeByte(0x03);
-    s.writeByte(0x00);
-
-    s.writeUnsigned(entries.length);
-    for (final entry in entries) {
-      s.writeUnsigned(entry.index);
-    }
-  }
-
-  static _DeclaredElement deserialize(Deserializer d, ir.Functions functions) {
-    if (d.readByte() != 0x03) throw 'bad encoding';
-
-    final elemkind = d.readByte();
-    if (elemkind != 0x00) throw "unsupported elemkind";
-
-    final declaredFunctions = d.readList((d) => functions[d.readUnsigned()]);
-    return _DeclaredElement(declaredFunctions);
-  }
-}
-
 class ElementSection extends Section {
   static const int sectionId = 9;
 
-  final List<ir.DefinedTable> definedTables;
-  final List<ir.ImportedTable> importedTables;
-  final List<ir.BaseFunction> declaredFunctions;
+  final ir.Elements elementSegments;
 
-  ElementSection(this.definedTables, this.importedTables,
-      this.declaredFunctions, super.watchPoints);
+  ElementSection(this.elementSegments, super.watchPoints);
 
   @override
   int get id => sectionId;
 
   @override
   void serializeContents(Serializer s) {
-    // Group nonempty element entries into contiguous stretches and serialize
-    // each stretch as an element.
-    List<_Element> elements = [];
-    for (final table in definedTables) {
-      _TableElement? current;
-      for (int i = 0; i < table.elements.length; i++) {
-        ir.BaseFunction? function = table.elements[i];
-        if (function != null) {
-          if (current == null) {
-            current = _TableElement(table, i);
-            elements.add(current);
-          }
-          current.entries.add(function);
-        } else {
-          current = null;
-        }
-      }
-    }
-    for (final table in importedTables) {
-      final entries = [...table.setElements.entries]
-        ..sort((a, b) => a.key.compareTo(b.key));
-
-      _TableElement? current;
-      int lastIndex = -2;
-      for (final entry in entries) {
-        final index = entry.key;
-        final function = entry.value;
-        if (index != lastIndex + 1) {
-          current = _TableElement(table, index);
-          elements.add(current);
-        }
-        current!.entries.add(function);
-        lastIndex = index;
-      }
-    }
-    if (declaredFunctions.isNotEmpty) {
-      elements.add(_DeclaredElement(declaredFunctions));
-    }
-    if (elements.isNotEmpty) {
-      s.writeList(elements);
+    if (elementSegments.segments.isNotEmpty) {
+      s.writeList(elementSegments.segments);
     }
   }
 
-  static void deserialize(
+  static ir.Elements deserialize(
     Deserializer? d,
     ir.Module module,
     ir.Types types,
@@ -685,38 +525,36 @@
     ir.Globals globals,
   ) {
     if (d == null) {
-      functions.declared = [];
-      return;
+      return ir.Elements([]);
     }
-    final declaredFunctions = <ir.BaseFunction>[];
+
+    final segments = <ir.ElementSegment>[];
     final count = d.readUnsigned();
     for (int i = 0; i < count; i++) {
-      if (d.peekByte() == 0x03) {
-        final declaredElement = _DeclaredElement.deserialize(d, functions);
-        declaredFunctions.addAll(declaredElement.entries);
+      final byte = d.peekByte();
+      if (byte == 0x03) {
+        // Declarative segment, only to forward-declare functions.
+        final es = ir.DeclarativeElementSegment.deserialize(d, functions);
+        segments.add(es);
         continue;
       }
-      final tableElement = _TableElement.deserialize(
-          d, module, types, functions, tables, globals);
-      for (int i = 0; i < tableElement.entries.length; i++) {
-        final table = tableElement.table;
-        final offset = tableElement.startIndex;
-        final function = tableElement.entries[i];
-
-        if (table is ir.DefinedTable) {
-          if (table.elements.length <= offset + i) {
-            table.elements.length = offset + i + 1;
-          }
-          table.elements[offset + i] = function;
-        } else if (table is ir.ImportedTable) {
-          table.setElements[offset + i] = function;
-        } else {
-          throw "unsupported table type $table";
-        }
+      if (byte == 0x00 || byte == 0x02) {
+        // Active element, table values are function indices.
+        final es = ir.ActiveFunctionElementSegment.deserialize(
+            d, module, types, functions, tables, globals);
+        segments.add(es);
+        continue;
+      }
+      if (byte == 0x04 || byte == 0x06) {
+        // Active element, table values are expressions.
+        final es = ir.ActiveExpressionElementSegment.deserialize(
+            d, module, types, functions, tables, globals);
+        segments.add(es);
+        continue;
       }
     }
 
-    functions.declared = declaredFunctions;
+    return ir.Elements(segments);
   }
 }
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 26ab9d7..9d606fb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -48,6 +48,7 @@
   - pkg/_fe_analyzer_shared
   - pkg/front_end
   - pkg/frontend_server
+  - pkg/frontend_server_client
   - pkg/heap_snapshot
   - pkg/js
   - pkg/js_ast
@@ -62,7 +63,6 @@
   - pkg/native_compiler
   - pkg/native_stack_traces
   - pkg/node_preamble
-  - pkg/record_use
   - pkg/reload_test
   - pkg/scrape
   - pkg/server_plugin
@@ -96,8 +96,6 @@
 
 # All third_party packages are retrieved via the DEPS-file and overridden here.
 dependency_overrides:
-  analysis_config:
-    path: third_party/pkg/webdev/_analysis_config
   args:
     path: third_party/pkg/core/pkgs/args
   async:
@@ -156,8 +154,6 @@
     path: third_party/pkg/tools/pkgs/file_testing
   fixnum:
     path: third_party/pkg/core/pkgs/fixnum
-  frontend_server_client:
-    path: third_party/pkg/webdev/frontend_server_client
   glob:
     path: third_party/pkg/tools/pkgs/glob
   graphs:
@@ -230,6 +226,8 @@
     path: third_party/pkg/native/pkgs/pub_formats
   pub_semver:
     path: third_party/pkg/tools/pkgs/pub_semver
+  record_use:
+    path: third_party/pkg/native/pkgs/record_use
   regression_tests:
     path: third_party/pkg/test/integration_tests/regression
   shelf:
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index be80ef1..fd0cbf9 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -31,6 +31,9 @@
     }
     assert(!dart_debug)
     defines += [ "PRODUCT" ]
+    if (target_os == "linux") {
+      defines += [ "DART_DISABLE_TIMELINE" ]
+    }
   }
 }
 
@@ -48,6 +51,9 @@
         "-fvisibility=hidden",
       ]
     }
+    if (dart_runtime_mode == "release" && target_os == "linux") {
+      defines += [ "DART_DISABLE_TIMELINE" ]
+    }
   }
 }
 
@@ -106,10 +112,12 @@
 
   # In our GN build rules we'll always compile AOT compiler & AOT runtime in
   # the same mode (TSAN or non-TSAN).
-  if (is_tsan) {
-    defines += [ "TARGET_USES_THREAD_SANITIZER" ]
+  if (is_asan && !is_win) {
+    defines += [ "TARGET_USES_ADDRESS_SANITIZER" ]
   } else if (is_msan) {
     defines += [ "TARGET_USES_MEMORY_SANITIZER" ]
+  } else if (is_tsan) {
+    defines += [ "TARGET_USES_THREAD_SANITIZER" ]
   }
 }
 
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 87a6967..6785943 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -1084,9 +1084,7 @@
   }
 }
 
-# This flag is set in runtime/runtime_args.gni
-# The analyze_snapshot tool is only supported on 64 bit AOT builds running under
-# linux and android platforms
+# This flag is set in runtime/runtime_args.gni.
 if (build_analyze_snapshot) {
   dart_executable("analyze_snapshot") {
     use_product_mode = dart_runtime_mode == "release"
@@ -1130,6 +1128,11 @@
   include_dirs = [ ".." ]
 }
 
+executable("create_process_test_helper") {
+  sources = [ "create_process_test_helper.cc" ]
+  include_dirs = [ ".." ]
+}
+
 source_set("run_vm_tests_set") {
   if (target_os == "fuchsia") {
     testonly = true
diff --git a/runtime/bin/analyze_snapshot.cc b/runtime/bin/analyze_snapshot.cc
index 4165180..eb77134d 100644
--- a/runtime/bin/analyze_snapshot.cc
+++ b/runtime/bin/analyze_snapshot.cc
@@ -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.
 
-#include "bin/elf_loader.h"
 #include "bin/error_exit.h"
 #include "bin/file.h"
+#include "bin/snapshot_utils.h"
 
 #include "bin/options.h"
 #include "bin/platform.h"
 
-#if defined(TARGET_ARCH_IS_64_BIT) && defined(DART_PRECOMPILED_RUNTIME) &&     \
-    (defined(DART_TARGET_OS_ANDROID) || defined(DART_TARGET_OS_LINUX) ||       \
-     defined(DART_TARGET_OS_MACOS))
+#if defined(TARGET_ARCH_IS_64_BIT) && defined(DART_PRECOMPILED_RUNTIME)
 #define SUPPORT_ANALYZE_SNAPSHOT
 #endif
 
@@ -170,24 +168,14 @@
   const char* script_name = nullptr;
   script_name = inputs.GetArgument(0);
 
-  // Dart_LoadELF will crash on nonexistent file non-gracefully
-  // even though it should return `nullptr`.
-  File* const file = File::Open(/*namespc=*/nullptr, script_name, File::kRead);
-  if (file == nullptr) {
-    Syslog::PrintErr("Snapshot file does not exist\n");
+  auto* const app_snapshot = Snapshot::TryReadAppSnapshot(
+      script_name, /*force_load_from_memory=*/true);
+  if (app_snapshot == nullptr) {
+    Syslog::PrintErr("Cannot load snapshot file.\n");
     return kErrorExitCode;
   }
-  file->Release();
-
-  const char* loader_error = nullptr;
-  Dart_LoadedElf* loaded_elf = Dart_LoadELF(
-      script_name, 0, &loader_error, &vm_snapshot_data,
-      &vm_snapshot_instructions, &vm_isolate_data, &vm_isolate_instructions);
-
-  if (loaded_elf == nullptr) {
-    Syslog::PrintErr("Failure calling Dart_LoadELF:\n%s\n", loader_error);
-    return kErrorExitCode;
-  }
+  app_snapshot->SetBuffers(&vm_snapshot_data, &vm_snapshot_instructions,
+                           &vm_isolate_data, &vm_isolate_instructions);
 
   // Begin initialization
   Dart_InitializeParams init_params = {};
@@ -245,8 +233,8 @@
 
   Dart_ExitScope();
   Dart_ShutdownIsolate();
-  // Unload our DartELF to avoid leaks
-  Dart_UnloadELF(loaded_elf);
+  // Delete the returned AppSnapshot to avoid leaks.
+  delete app_snapshot;
   return 0;
 }
 #endif
@@ -260,8 +248,7 @@
   dart::Syslog::PrintErr("Unsupported platform.\n");
   dart::Syslog::PrintErr(
       "Requires SDK with following "
-      "flags:\n\tTARGET_ARCH_IS_64_BIT\n\tDART_PRECOMPILED_RUNTIME\n\tDART_"
-      "TARGET_OS_ANDROID || DART_TARGET_OS_LINUX");
+      "flags:\n\tTARGET_ARCH_IS_64_BIT\n\tDART_PRECOMPILED_RUNTIME");
   return dart::bin::kErrorExitCode;
 #endif
 }
diff --git a/runtime/bin/builtin.h b/runtime/bin/builtin.h
index 37a75c1..70a0c64 100644
--- a/runtime/bin/builtin.h
+++ b/runtime/bin/builtin.h
@@ -31,6 +31,7 @@
     kIOLibrary,
     kHttpLibrary,
     kCLILibrary,
+    kVMLibrary,
   };
 
   // Setup native resolver method built in library specified in 'id'.
diff --git a/runtime/bin/create_process_test_helper.cc b/runtime/bin/create_process_test_helper.cc
new file mode 100644
index 0000000..5e37e03
--- /dev/null
+++ b/runtime/bin/create_process_test_helper.cc
@@ -0,0 +1,138 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 utility program for testing that Dart binary correctly handles
+// situations when stdout and stderr handles are the same.
+//
+// This can happen in certain terminal emulators, e.g. one used by GitBash
+// see https://github.com/dart-lang/sdk/issues/61981 for an example.
+
+#include "platform/globals.h"
+#if defined(DART_HOST_OS_WINDOWS)
+
+#include <cstdio>
+#include <source_location>
+#include <sstream>
+#include <vector>
+
+struct StdioHandles {
+  HANDLE in;
+  HANDLE out;
+  HANDLE err;
+};
+
+static void ReportErrorAndAbort(
+    std::source_location location = std::source_location::current()) {
+  const auto code = GetLastError();
+
+  wchar_t buffer[512];
+  auto message_size =
+      FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+                     nullptr, code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                     buffer, ARRAY_SIZE(buffer), nullptr);
+  if (message_size == 0) {
+    _snwprintf(buffer, ARRAY_SIZE(buffer), L"OS Error %d", code);
+  }
+  fprintf(stderr, "error at %s:%d: %ls", location.file_name(), location.line(),
+          buffer);
+  abort();
+}
+
+static void LaunchProcessWith(wchar_t* command_line,
+                              const StdioHandles& stdio_handles) {
+  fprintf(stderr, "LAUNCHING %ls\n", command_line);
+
+  // Setup info
+  STARTUPINFOEXW startup_info;
+  ZeroMemory(&startup_info, sizeof(startup_info));
+  startup_info.StartupInfo.cb = sizeof(startup_info);
+
+  // Setup the handles to inherit. We only want to inherit the three
+  // handles for stdin, stdout and stderr.
+  startup_info.StartupInfo.hStdInput = stdio_handles.in;
+  startup_info.StartupInfo.hStdOutput = stdio_handles.out;
+  startup_info.StartupInfo.hStdError = stdio_handles.err;
+  startup_info.StartupInfo.dwFlags = STARTF_USESTDHANDLES;
+  SIZE_T size = 0;
+  // The call to determine the size of an attribute list always fails with
+  // ERROR_INSUFFICIENT_BUFFER and that error should be ignored.
+  if (!InitializeProcThreadAttributeList(nullptr, 1, 0, &size) &&
+      (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) {
+    return ReportErrorAndAbort();
+  }
+  auto attribute_list =
+      reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(malloc(size));
+  ZeroMemory(attribute_list, size);
+  if (!InitializeProcThreadAttributeList(attribute_list, 1, 0, &size)) {
+    return ReportErrorAndAbort();
+  }
+  std::vector<HANDLE> inherited_handles = {stdio_handles.in};
+  if (stdio_handles.out != stdio_handles.in) {
+    inherited_handles.push_back(stdio_handles.out);
+  }
+  if (stdio_handles.err != stdio_handles.out &&
+      stdio_handles.err != stdio_handles.in) {
+    inherited_handles.push_back(stdio_handles.err);
+  }
+  if (!UpdateProcThreadAttribute(
+          attribute_list, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
+          inherited_handles.data(), inherited_handles.size() * sizeof(HANDLE),
+          nullptr, nullptr)) {
+    return ReportErrorAndAbort();
+  }
+  startup_info.lpAttributeList = attribute_list;
+
+  PROCESS_INFORMATION process_info;
+  ZeroMemory(&process_info, sizeof(process_info));
+
+  // Create process.
+  BOOL result = CreateProcessW(
+      /*lpApplicationName=*/nullptr, command_line,
+      /*lpProcessAttributes=*/nullptr,
+      /*lpThreadAttributes=*/nullptr,
+      /*bInheritHandles=*/TRUE,
+      /*dwCreationFlags=*/EXTENDED_STARTUPINFO_PRESENT,
+      /*lpEnvironment=*/nullptr,
+      /*lpCurrentDirectory=*/nullptr,
+      reinterpret_cast<STARTUPINFOW*>(&startup_info), &process_info);
+
+  if (result == 0) {
+    return ReportErrorAndAbort();
+  }
+
+  WaitForSingleObject(process_info.hProcess, INFINITE);
+  CloseHandle(process_info.hProcess);
+  CloseHandle(process_info.hThread);
+}
+
+int main(int argc, char* argv[]) {
+  if (argc <= 1) {
+    fprintf(stderr, "Usage: %s <executable> <arg0> ... <argN>\n", argv[0]);
+    return -1;
+  }
+
+  // Generate command line. Assume that it does not contain any white-space
+  // in the arguments.
+  std::wstringstream wstr;
+  for (int i = 1; i < argc; i++) {
+    wstr << (i > 1 ? " " : "") << argv[i];
+  }
+
+  HANDLE stdin_handle = GetStdHandle(STD_INPUT_HANDLE);
+  HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
+  LaunchProcessWith(
+      wstr.str().data(),
+      {.in = stdin_handle, .out = stdout_handle, .err = stdout_handle});
+  CloseHandle(stdin_handle);
+  CloseHandle(stdout_handle);
+  return 0;
+}
+
+#else
+
+int main() {
+  return -1;
+}
+
+#endif  // defined(DART_HOST_OS_WINDOWS)
diff --git a/runtime/bin/dart_api_win.c b/runtime/bin/dart_api_win.c
index 34a1e3b..ef97095 100644
--- a/runtime/bin/dart_api_win.c
+++ b/runtime/bin/dart_api_win.c
@@ -359,6 +359,8 @@
 typedef Dart_Handle (*Dart_LoadScriptFromKernelType)(const uint8_t*, intptr_t);
 typedef Dart_Handle (*Dart_LoadScriptFromBytecodeType)(const uint8_t*,
                                                        intptr_t);
+typedef Dart_Handle (*Dart_LoadModuleSnapshotType)(const uint8_t*,
+                                                   const uint8_t*);
 typedef Dart_Handle (*Dart_RootLibraryType)();
 typedef Dart_Handle (*Dart_SetRootLibraryType)(Dart_Handle);
 typedef Dart_Handle (*Dart_GetTypeType)(Dart_Handle,
@@ -445,6 +447,15 @@
     void*,
     const char*,
     const char*);
+typedef Dart_Handle (*Dart_CreateAppAOTSnapshotAndRelocatableObjectType)(
+    Dart_AotBinaryFormat,
+    Dart_StreamingWriteCallback,
+    void*,
+    void*,
+    bool,
+    void*,
+    const char*,
+    const char*);
 typedef Dart_Handle (*Dart_CreateVMAOTSnapshotAsAssemblyType)(
     Dart_StreamingWriteCallback,
     void*);
@@ -713,6 +724,7 @@
     NULL;
 static Dart_LoadScriptFromKernelType Dart_LoadScriptFromKernelFn = NULL;
 static Dart_LoadScriptFromBytecodeType Dart_LoadScriptFromBytecodeFn = NULL;
+static Dart_LoadModuleSnapshotType Dart_LoadModuleSnapshotFn = NULL;
 static Dart_RootLibraryType Dart_RootLibraryFn = NULL;
 static Dart_SetRootLibraryType Dart_SetRootLibraryFn = NULL;
 static Dart_GetTypeType Dart_GetTypeFn = NULL;
@@ -756,6 +768,8 @@
     NULL;
 static Dart_CreateAppAOTSnapshotAsBinaryType
     Dart_CreateAppAOTSnapshotAsBinaryFn = NULL;
+static Dart_CreateAppAOTSnapshotAndRelocatableObjectType
+    Dart_CreateAppAOTSnapshotAndRelocatableObjectFn = NULL;
 static Dart_CreateVMAOTSnapshotAsAssemblyType
     Dart_CreateVMAOTSnapshotAsAssemblyFn = NULL;
 static Dart_SortClassesType Dart_SortClassesFn = NULL;
@@ -1262,6 +1276,8 @@
     Dart_LoadScriptFromBytecodeFn =
         (Dart_LoadScriptFromBytecodeType)GetProcAddress(
             process, "Dart_LoadScriptFromBytecode");
+    Dart_LoadModuleSnapshotFn = (Dart_LoadModuleSnapshotType)GetProcAddress(
+        process, "Dart_LoadModuleSnapshot");
     Dart_RootLibraryFn =
         (Dart_RootLibraryType)GetProcAddress(process, "Dart_RootLibrary");
     Dart_SetRootLibraryFn =
@@ -1346,6 +1362,9 @@
     Dart_CreateAppAOTSnapshotAsBinaryFn =
         (Dart_CreateAppAOTSnapshotAsBinaryType)GetProcAddress(
             process, "Dart_CreateAppAOTSnapshotAsBinary");
+    Dart_CreateAppAOTSnapshotAndRelocatableObjectFn =
+        (Dart_CreateAppAOTSnapshotAndRelocatableObjectType)GetProcAddress(
+            process, "Dart_CreateAppAOTSnapshotAndRelocatableObject");
     Dart_CreateVMAOTSnapshotAsAssemblyFn =
         (Dart_CreateVMAOTSnapshotAsAssemblyType)GetProcAddress(
             process, "Dart_CreateVMAOTSnapshotAsAssembly");
@@ -2445,6 +2464,11 @@
   return Dart_LoadScriptFromBytecodeFn(kernel_buffer, kernel_size);
 }
 
+Dart_Handle Dart_LoadModuleSnapshot(const uint8_t* snapshot_data,
+                                    const uint8_t* snapshot_instructions) {
+  return Dart_LoadModuleSnapshotFn(snapshot_data, snapshot_instructions);
+}
+
 Dart_Handle Dart_RootLibrary() {
   return Dart_RootLibraryFn();
 }
@@ -2657,6 +2681,20 @@
                                              identifier, path);
 }
 
+Dart_Handle Dart_CreateAppAOTSnapshotAndRelocatableObject(
+    Dart_AotBinaryFormat format,
+    Dart_StreamingWriteCallback callback,
+    void* snapshot_callback_data,
+    void* object_callback_data,
+    bool stripped,
+    void* debug_callback_data,
+    const char* identifier,
+    const char* path) {
+  return Dart_CreateAppAOTSnapshotAndRelocatableObjectFn(
+      format, callback, snapshot_callback_data, object_callback_data, stripped,
+      debug_callback_data, identifier, path);
+}
+
 Dart_Handle Dart_CreateVMAOTSnapshotAsAssembly(
     Dart_StreamingWriteCallback callback,
     void* callback_data) {
diff --git a/runtime/bin/dartdev.cc b/runtime/bin/dartdev.cc
index 3066a22..42938f6 100644
--- a/runtime/bin/dartdev.cc
+++ b/runtime/bin/dartdev.cc
@@ -642,6 +642,9 @@
     } else {
       argc_ = argc + num_vm_options + 4;
     }
+    if (package_config_override_ != nullptr) {
+      argc_++;
+    }
 
     // Array of arguments to be passed to the script being execed.
     argv_ = std::unique_ptr<char*[], void (*)(char**)>(new char*[argc_ + 1],
@@ -687,6 +690,16 @@
     if (mark_main_isolate_as_system_isolate) {
       argv_[idx++] = Utils::StrDup("--mark_main_isolate_as_system_isolate");
     }
+    if (package_config_override_ != nullptr) {
+#if defined(DART_HOST_OS_WINDOWS)
+      char* packages_arg =
+          Utils::SCreate("--packages=%s", package_config_override_);
+      argv_[idx++] = StringUtilsWin::ArgumentEscape(packages_arg);
+      free(packages_arg);
+#else
+      argv_[idx++] = Utils::SCreate("--packages=%s", package_config_override_);
+#endif
+    }
     // Copy in name of the script to run.
     argv_[idx++] = Utils::StrDup(GetArrayItem(message, 1)->value.as_string);
     // Copy in the dart options that need to be passed to the script.
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index a7db208..9890dc1 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -337,6 +337,7 @@
   static constexpr const char* kCLILibPatchURL = "dart:cli-patch";
   static constexpr const char* kUriLibURL = "dart:uri";
   static constexpr const char* kHttpScheme = "http:";
+  static constexpr const char* kVMLibURL = "dart:_vm";
   static constexpr const char* kVMServiceLibURL = "dart:vmservice";
 
   static void SetEnvironment(dart::SimpleHashMap* environment);
diff --git a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
index 2525802..6bdc16d 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
@@ -1170,6 +1170,26 @@
   *reinterpret_cast<intptr_t*>(token) = 42;
 }
 
+DART_EXPORT Dart_PersistentHandle NewPersistentHandle(Dart_Handle object) {
+  return Dart_NewPersistentHandle(object);
+}
+
+DART_EXPORT void DeletePersistentHandleFinalizer(void* handle) {
+  printf("C: Finalizer deleting persistent handle %p\n", handle);
+  Dart_DeletePersistentHandle(reinterpret_cast<Dart_PersistentHandle>(handle));
+}
+
+DART_EXPORT Dart_WeakPersistentHandle
+NewWeakPersistentHandle(Dart_Handle object) {
+  return Dart_NewWeakPersistentHandle(object, nullptr, 0, [](void*, void*) {});
+}
+
+DART_EXPORT void DeleteWeakPersistentHandleFinalizer(void* handle) {
+  printf("C: Finalizer deleting weak persistent handle %p\n", handle);
+  Dart_DeleteWeakPersistentHandle(
+      reinterpret_cast<Dart_WeakPersistentHandle>(handle));
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // Functions for testing @Native.
 
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index b59fb29..b4cafce 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -111,6 +111,7 @@
   V(assembly, assembly_filename)                                               \
   V(elf, elf_filename)                                                         \
   V(macho, macho_filename)                                                     \
+  V(macho_object, macho_object_filename)                                       \
   V(loading_unit_manifest, loading_unit_manifest_filename)                     \
   V(save_debugging_info, debugging_info_filename)                              \
   V(save_obfuscation_map, obfuscation_map_filename)
@@ -640,6 +641,7 @@
   Dart_AotBinaryFormat format;
   const char* kind_str = nullptr;
   const char* filename = nullptr;
+  const char* object_filename = nullptr;
   // Default to the assembly ones just to avoid having to type-specify here.
   auto* next_callback = NextAsmCallback;
   auto* create_multiple_callback = Dart_CreateAppAOTSnapshotAsAssemblies;
@@ -659,6 +661,7 @@
     case kAppAOTMachODylib:
       kind_str = "MachO dynamic library";
       filename = macho_filename;
+      object_filename = macho_object_filename;
       format = Dart_AotBinaryFormat_MachO_Dylib;
       // Not currently implemented.
       next_callback = nullptr;
@@ -691,9 +694,17 @@
     if (debugging_info_filename != nullptr) {
       debug_file = OpenFile(debugging_info_filename);
     }
-    result = Dart_CreateAppAOTSnapshotAsBinary(format, StreamingWriteCallback,
-                                               file, strip, debug_file,
-                                               identifier, filename);
+    if (object_filename != nullptr) {
+      File* object_file = OpenFile(object_filename);
+      result = Dart_CreateAppAOTSnapshotAndRelocatableObject(
+          format, StreamingWriteCallback, file, object_file, strip, debug_file,
+          identifier, object_filename);
+      object_file->Release();
+    } else {
+      result = Dart_CreateAppAOTSnapshotAsBinary(format, StreamingWriteCallback,
+                                                 file, strip, debug_file,
+                                                 identifier, filename);
+    }
     if (debug_file != nullptr) debug_file->Release();
     if (identifier != nullptr) {
       free(identifier);
diff --git a/runtime/bin/isolate_data.cc b/runtime/bin/isolate_data.cc
index af117e0..3097039 100644
--- a/runtime/bin/isolate_data.cc
+++ b/runtime/bin/isolate_data.cc
@@ -29,8 +29,8 @@
 }
 
 IsolateGroupData::~IsolateGroupData() {
-  for (intptr_t i = 0; i < loading_units_.length(); i++) {
-    delete loading_units_[i];
+  for (intptr_t i = 0; i < loaded_snapshots_.length(); i++) {
+    delete loaded_snapshots_[i];
   }
   free(script_url);
   free(asset_resolution_base);
diff --git a/runtime/bin/isolate_data.h b/runtime/bin/isolate_data.h
index b2de0a1..0c5e856 100644
--- a/runtime/bin/isolate_data.h
+++ b/runtime/bin/isolate_data.h
@@ -95,15 +95,17 @@
     return app_snapshot_ != nullptr || isolate_run_app_snapshot_;
   }
 
-  void AddLoadingUnit(AppSnapshot* loading_unit) {
-    loading_units_.Add(loading_unit);
+  // Take ownership of the loaded snapshot.
+  // Snapshot will be freed when isolate group shuts down.
+  void AddLoadedSnapshot(AppSnapshot* snapshot) {
+    loaded_snapshots_.Add(snapshot);
   }
 
  private:
   friend class IsolateData;  // For packages_file_
 
   std::unique_ptr<AppSnapshot> app_snapshot_;
-  MallocGrowableArray<AppSnapshot*> loading_units_;
+  MallocGrowableArray<AppSnapshot*> loaded_snapshots_;
   char* resolved_packages_config_;
   std::shared_ptr<uint8_t> kernel_buffer_;
   intptr_t kernel_buffer_size_;
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index dbd6069..9f9ec9c 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -146,7 +146,7 @@
   AppSnapshot* loading_unit_snapshot = Snapshot::TryReadAppSnapshot(unit_url);
   Dart_Handle result;
   if (loading_unit_snapshot != nullptr) {
-    isolate_group_data->AddLoadingUnit(loading_unit_snapshot);
+    isolate_group_data->AddLoadedSnapshot(loading_unit_snapshot);
     const uint8_t* isolate_snapshot_data = nullptr;
     const uint8_t* isolate_snapshot_instructions = nullptr;
     const uint8_t* ignore_vm_snapshot_data;
diff --git a/runtime/bin/main_impl.cc b/runtime/bin/main_impl.cc
index e984475..966f527 100644
--- a/runtime/bin/main_impl.cc
+++ b/runtime/bin/main_impl.cc
@@ -280,6 +280,7 @@
   CHECK_RESULT(result);
 
   auto isolate_data = reinterpret_cast<IsolateData*>(Dart_IsolateData(isolate));
+  auto isolate_group_data = isolate_data->isolate_group_data();
 
   const char* resolved_packages_config = nullptr;
   result =
@@ -289,7 +290,6 @@
   CHECK_RESULT(result);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  auto isolate_group_data = isolate_data->isolate_group_data();
   const uint8_t* kernel_buffer = isolate_group_data->kernel_buffer().get();
   intptr_t kernel_buffer_size = isolate_group_data->kernel_buffer_size();
   if (!isolate_run_app_snapshot && kernel_buffer == nullptr &&
@@ -385,6 +385,28 @@
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
   }
 
+  if (Options::load_module_snapshot() != nullptr) {
+    auto snapshot =
+        Snapshot::TryReadAppSnapshot(Options::load_module_snapshot());
+    if (snapshot == nullptr) {
+      Syslog::PrintErr("Unable to load module snapshot %s.\n",
+                       Options::load_module_snapshot());
+      Dart_ExitScope();
+      Dart_ShutdownIsolate();
+      return nullptr;
+    }
+    isolate_group_data->AddLoadedSnapshot(snapshot);
+    const uint8_t* ignore_vm_snapshot_data;
+    const uint8_t* ignore_vm_snapshot_instructions;
+    const uint8_t* snapshot_data = nullptr;
+    const uint8_t* snapshot_instructions = nullptr;
+    snapshot->SetBuffers(&ignore_vm_snapshot_data,
+                         &ignore_vm_snapshot_instructions, &snapshot_data,
+                         &snapshot_instructions);
+    result = Dart_LoadModuleSnapshot(snapshot_data, snapshot_instructions);
+    CHECK_RESULT(result);
+  }
+
   if ((Options::gen_snapshot_kind() == kAppJIT) && is_main_isolate) {
     result = Dart_SortClasses();
     CHECK_RESULT(result);
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index fb901e7..7210550 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -30,6 +30,7 @@
   V(write_service_info, vm_write_service_info_filename)                        \
   V(executable_name, executable_name)                                          \
   V(resolved_executable_name, resolved_executable_name)                        \
+  V(load_module_snapshot, load_module_snapshot)                                \
   /* The purpose of these flags is documented in */                            \
   /* pkg/dartdev/lib/src/commands/compilation_server.dart. */                  \
   V(resident_server_info_file, resident_server_info_file_path)                 \
diff --git a/runtime/bin/native_assets_api_impl.cc b/runtime/bin/native_assets_api_impl.cc
index 36d6281..3f460a9 100644
--- a/runtime/bin/native_assets_api_impl.cc
+++ b/runtime/bin/native_assets_api_impl.cc
@@ -32,7 +32,7 @@
   snprintf(msg, len + 1, format, __VA_ARGS__);                                 \
   *error_msg = msg
 
-#if defined(DART_TARGET_OS_WINDOWS)
+#if defined(DART_HOST_OS_WINDOWS)
 // Replaces back slashes with forward slashes in place.
 static void ReplaceBackSlashes(char* cstr) {
   const intptr_t length = strlen(cstr);
@@ -114,7 +114,7 @@
   }
   void* handle = nullptr;
 
-#if defined(DART_TARGET_OS_WINDOWS)
+#if defined(DART_HOST_OS_WINDOWS)
   char* path_copy = strdup(path);
   char* base_path_copy = strdup(base_path);
   ReplaceBackSlashes(path_copy);
@@ -129,7 +129,7 @@
     SET_ERROR_MSG(error, "Failed to resolve '%s' relative to '%s'.", path,
                   base_path);
   } else {
-#if defined(DART_TARGET_OS_WINDOWS)
+#if defined(DART_HOST_OS_WINDOWS)
     ReplaceForwardSlashes(target_path.get());
 #endif
     handle = LoadDynamicLibrary(target_path.get(),
diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc
index 027734d..4691823 100644
--- a/runtime/bin/process.cc
+++ b/runtime/bin/process.cc
@@ -155,7 +155,7 @@
   Dart_Handle stderr_handle = Dart_GetNativeArgument(args, 9);
   Dart_Handle exit_handle = Dart_GetNativeArgument(args, 10);
   intptr_t pid = -1;
-  char* os_error_message = nullptr;  // Scope allocated by Process::Start.
+  char* os_error_message = nullptr;
 
   int error_code = Process::Start(
       namespc, path, string_args, args_length, working_directory,
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 902797b..01368f7 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -9,6 +9,7 @@
 
 #include <process.h>  // NOLINT
 #include <psapi.h>    // NOLINT
+#include <source_location>
 #include <vector>
 
 #include "bin/builtin.h"
@@ -294,12 +295,15 @@
   CloseProcessPipe(handles4);
 }
 
-static int SetOsErrorMessage(char** os_error_message) {
+static int SetOsErrorMessage(
+    CStringUniquePtr* os_error_message,
+    std::source_location location = std::source_location::current()) {
   int error_code = GetLastError();
   const int kMaxMessageLength = 256;
   wchar_t message[kMaxMessageLength];
   FormatMessageIntoBuffer(error_code, message, kMaxMessageLength);
-  *os_error_message = StringUtilsWin::WideToUtf8(message);
+  os_error_message->reset(Utils::SCreate(
+      "%ls (at %s:%d)", message, location.file_name(), location.line()));
   return error_code;
 }
 
@@ -356,7 +360,7 @@
                  intptr_t* err,
                  intptr_t* id,
                  intptr_t* exit_handler,
-                 char** os_error_message)
+                 CStringUniquePtr* os_error_message)
       : path_(path),
         working_directory_(working_directory),
         mode_(mode),
@@ -617,7 +621,13 @@
     if (!InitializeProcThreadAttributeList(attribute_list_, 1, 0, &size)) {
       return CleanupAndReturnError();
     }
-    inherited_handles_ = {stdin_handle, stdout_handle, stderr_handle};
+    inherited_handles_ = {stdin_handle};
+    if (stdout_handle != stdin_handle) {
+      inherited_handles_.push_back(stdout_handle);
+    }
+    if (stderr_handle != stdout_handle && stderr_handle != stdin_handle) {
+      inherited_handles_.push_back(stderr_handle);
+    }
     if (!UpdateProcThreadAttribute(
             attribute_list_, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
             inherited_handles_.data(),
@@ -707,8 +717,9 @@
     return 0;
   }
 
-  int CleanupAndReturnError() {
-    int error_code = SetOsErrorMessage(os_error_message_);
+  int CleanupAndReturnError(
+      std::source_location location = std::source_location::current()) {
+    int error_code = SetOsErrorMessage(os_error_message_, location);
     CloseProcessPipes(stdin_handles_, stdout_handles_, stderr_handles_,
                       exit_handles_);
     return error_code;
@@ -734,7 +745,7 @@
   intptr_t* err_;
   intptr_t* id_;
   intptr_t* exit_handler_;
-  char** os_error_message_;
+  CStringUniquePtr* os_error_message_;
 
  private:
   DISALLOW_ALLOCATION();
@@ -755,10 +766,15 @@
                    intptr_t* id,
                    intptr_t* exit_handler,
                    char** os_error_message) {
+  CStringUniquePtr error;
   ProcessStarter starter(path, arguments, arguments_length, working_directory,
                          environment, environment_length, mode, in, out, err,
-                         id, exit_handler, os_error_message);
-  return starter.Start();
+                         id, exit_handler, &error);
+  const auto result = starter.Start();
+  if (result != 0 && error != nullptr) {
+    *os_error_message = DartUtils::ScopedCopyCString(error.get());
+  }
+  return result;
 }
 
 class BufferList : public BufferListBase {
@@ -981,7 +997,7 @@
   HANDLE hjob = CreateJobObject(nullptr, nullptr);
   if (hjob == nullptr) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - CreateJobObject failed %d\n", GetLastError());
+    f.Printf("Process::Exec - CreateJobObject failed %d", GetLastError());
     return -1;
   }
   JOBOBJECT_EXTENDED_LIMIT_INFORMATION info;
@@ -991,7 +1007,7 @@
                                  sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION),
                                  &qresult)) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - QueryInformationJobObject failed %d\n",
+    f.Printf("Process::Exec - QueryInformationJobObject failed %d",
              GetLastError());
     return -1;
   }
@@ -1005,7 +1021,7 @@
   if (!SetInformationJobObject(hjob, JobObjectExtendedLimitInformation, &info,
                                sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION))) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - SetInformationJobObject failed %d\n",
+    f.Printf("Process::Exec - SetInformationJobObject failed %d",
              GetLastError());
     return -1;
   }
@@ -1015,7 +1031,7 @@
   // we haven't spawned any children yet this race is harmless)
   if (!AssignProcessToJobObject(hjob, GetCurrentProcess())) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - AssignProcessToJobObject failed %d\n",
+    f.Printf("Process::Exec - AssignProcessToJobObject failed %d",
              GetLastError());
     return -1;
   }
@@ -1028,14 +1044,14 @@
   // as the value passed in 'path', we strip that off when starting the
   // process.
   intptr_t pid = -1;
-  char* os_error_message = nullptr;  // Scope allocated by Process::Start.
+  CStringUniquePtr os_error_message;
   ProcessStarter starter(path, &(arguments[1]), (arguments_length - 1),
                          working_directory, nullptr, 0, kInheritStdio, nullptr,
                          nullptr, nullptr, &pid, nullptr, &os_error_message);
   int result = starter.StartForExec(hjob);
   if (result != 0) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - %s\n", os_error_message);
+    f.Printf("ProcessStarter::StartForExec failed: %s", os_error_message.get());
     return -1;
   }
 
@@ -1047,14 +1063,14 @@
   DWORD wait_result = WaitForSingleObject(child_process, INFINITE);
   if (wait_result != WAIT_OBJECT_0) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - WaitForSingleObject failed %d\n", GetLastError());
+    f.Printf("Process::Exec - WaitForSingleObject failed %d", GetLastError());
     CloseHandle(child_process);
     return -1;
   }
   int retval;
   if (!GetExitCodeProcess(child_process, reinterpret_cast<DWORD*>(&retval))) {
     BufferFormatter f(errmsg, errmsg_len);
-    f.Printf("Process::Exec - GetExitCodeProcess failed %d\n", GetLastError());
+    f.Printf("Process::Exec - GetExitCodeProcess failed %d", GetLastError());
     CloseHandle(child_process);
     return -1;
   }
diff --git a/runtime/bin/snapshot_utils.cc b/runtime/bin/snapshot_utils.cc
index 79543bf..3d8a6db 100644
--- a/runtime/bin/snapshot_utils.cc
+++ b/runtime/bin/snapshot_utils.cc
@@ -175,7 +175,6 @@
   return DartUtils::SniffForMagicNumber(header, read_size);
 }
 
-#if defined(DART_PRECOMPILED_RUNTIME)
 class DylibAppSnapshot : public AppSnapshot {
  public:
   DylibAppSnapshot(DartUtils::MagicNumber magic_number,
@@ -214,16 +213,18 @@
 static AppSnapshot* TryReadAppSnapshotDynamicLibrary(
     DartUtils::MagicNumber magic_number,
     const char* script_name,
-    const char** error) {
+    char** error) {
 #if defined(DART_INCLUDE_SIMULATOR)
-  *error = "running on a simulated architecture";
+  *error = Utils::StrDup("running on a simulated architecture");
   return nullptr;
 #else
-#if defined(DART_TARGET_OS_LINUX) || defined(DART_TARGET_OS_MACOS)
+#if defined(DART_HOST_OS_LINUX) || defined(DART_HOST_OS_MACOS)
   // On Linux and OSX, resolve the script path before passing into dlopen()
   // since dlopen will not search the filesystem for paths like 'libtest.so'.
-  CStringUniquePtr absolute_path(realpath(script_name, nullptr));
-  script_name = absolute_path.get();
+  const size_t kPathBufSize = PATH_MAX + 1;
+  char canon_path[kPathBufSize];
+  script_name =
+      File::GetCanonicalPath(nullptr, script_name, canon_path, kPathBufSize);
   if (script_name == nullptr) {
     const intptr_t err = errno;
     const int kBufferSize = 1024;
@@ -237,17 +238,18 @@
   if (library == nullptr) {
 #if defined(NATIVE_SHARED_OBJECT_FORMAT_ELF)
     if (*error == nullptr && magic_number != DartUtils::kAotELFMagicNumber) {
-      *error = "not an ELF shared object";
+      *error = Utils::StrDup("not an ELF shared object");
     }
 #elif defined(NATIVE_SHARED_OBJECT_FORMAT_MACHO)
     if (*error == nullptr &&
         magic_number != DartUtils::kAotMachO32MagicNumber &&
         magic_number != DartUtils::kAotMachO64MagicNumber) {
-      *error = "not a Mach-O shared object";
+      *error = Utils::StrDup("not a Mach-O shared object");
     }
 #endif
     if (*error == nullptr) {
-      *error = "unknown failure loading dynamic library (wrong format?)";
+      *error = Utils::StrDup(
+          "unknown failure loading dynamic library (wrong format?)");
     }
     return nullptr;
   }
@@ -280,6 +282,7 @@
 #endif  // defined(DART_INCLUDE_SIMULATOR)
 }
 
+#if defined(DART_PRECOMPILED_RUNTIME)
 class ElfAppSnapshot : public AppSnapshot {
  public:
   ElfAppSnapshot(Dart_LoadedElf* elf,
@@ -317,16 +320,17 @@
 static AppSnapshot* TryReadAppSnapshotElf(const char* script_name,
                                           uint64_t file_offset,
                                           bool force_load_from_memory) {
-  const char* error = nullptr;
 #if defined(NATIVE_SHARED_OBJECT_FORMAT_ELF)
   if (file_offset == 0 && !force_load_from_memory) {
     // The load as a dynamic library should succeed, since this is a platform
     // that natively understands ELF.
+    char* error = nullptr;
     if (auto* const snapshot = TryReadAppSnapshotDynamicLibrary(
             DartUtils::kAotELFMagicNumber, script_name, &error)) {
       return snapshot;
     }
     Syslog::PrintErr("Loading dynamic library failed: %s\n", error);
+    free(error);
     return nullptr;
   }
 #endif
@@ -334,6 +338,7 @@
                 *isolate_data_buffer = nullptr,
                 *isolate_instructions_buffer = nullptr;
   Dart_LoadedElf* handle = nullptr;
+  const char* error = nullptr;
   if (force_load_from_memory) {
     File* const file =
         File::Open(/*namespc=*/nullptr, script_name, File::kRead);
@@ -402,16 +407,17 @@
     const char* script_name,
     uint64_t file_offset,
     bool force_load_from_memory) {
-  const char* error = nullptr;
 #if defined(NATIVE_SHARED_OBJECT_FORMAT_MACHO)
   if (file_offset == 0 && !force_load_from_memory) {
     // The load as a dynamic library should succeed, since this is a platform
     // that natively understands Mach-O.
+    char* error = nullptr;
     if (auto* const snapshot = TryReadAppSnapshotDynamicLibrary(
             magic_number, script_name, &error)) {
       return snapshot;
     }
     Syslog::PrintErr("Loading dynamic library failed: %s\n", error);
+    free(error);
     return nullptr;
   }
 #endif
@@ -419,6 +425,7 @@
                 *isolate_data_buffer = nullptr,
                 *isolate_instructions_buffer = nullptr;
   Dart_LoadedMachODylib* handle = nullptr;
+  const char* error = nullptr;
   if (force_load_from_memory) {
     File* const file =
         File::Open(/*namespc=*/nullptr, script_name, File::kRead);
@@ -471,12 +478,13 @@
   if (file_offset == 0) {
     // This is a non-appended snapshot which is not handled by any of the
     // non-native loaders, so attempt to load it as a native dynamic library.
-    const char* error = nullptr;
+    char* error = nullptr;
     if (auto* const snapshot = TryReadAppSnapshotDynamicLibrary(
             magic_number, script_name, &error)) {
       return snapshot;
     }
     Syslog::PrintErr("Loading dynamic library failed: %s\n", error);
+    free(error);
   }
 
   return nullptr;
@@ -801,6 +809,17 @@
     // Return the JIT snapshot.
     return TryReadAppSnapshotBlobs(script_name, file);
   }
+  if (magic_number == DartUtils::kAotMachO64MagicNumber) {
+    // Read module snapshot.
+    char* error = nullptr;
+    if (auto* const snapshot = TryReadAppSnapshotDynamicLibrary(
+            magic_number, script_name, &error)) {
+      return snapshot;
+    }
+    Syslog::PrintErr("Loading dynamic library failed: %s\n", error);
+    free(error);
+    return nullptr;
+  }
   // We create a dummy snapshot object just to remember the type which
   // has already been identified by sniffing the magic number.
   return new DummySnapshot(magic_number);
diff --git a/runtime/bin/utils_win.cc b/runtime/bin/utils_win.cc
index c73d972..7a0217e 100644
--- a/runtime/bin/utils_win.cc
+++ b/runtime/bin/utils_win.cc
@@ -46,9 +46,17 @@
                        code, GetLastError());
     }
     _snwprintf(buffer, buffer_length, L"OS Error %d", code);
+    return;
   }
-  // Ensure string termination.
-  buffer[buffer_length - 1] = 0;
+
+  // Strip trailing whitespace and a dot.
+  while (message_size > 0 && iswspace(buffer[message_size - 1])) {
+    message_size--;
+  }
+  if (message_size > 0 && buffer[message_size - 1] == L'.') {
+    message_size--;
+  }
+  buffer[Utils::Minimum<int>(message_size, buffer_length - 1)] = 0;
 }
 
 FILETIME GetFiletimeFromMillis(int64_t millis) {
diff --git a/runtime/docs/compressed-pointers.md b/runtime/docs/compressed-pointers.md
new file mode 100644
index 0000000..77e3eae
--- /dev/null
+++ b/runtime/docs/compressed-pointers.md
@@ -0,0 +1,26 @@
+# Compressed Pointers
+
+Some Dart applications run in memory-constrained environments such as smart phones and assistant devices. They don’t need a full 64-bit address space, easily fitting into the 4GB available to a 32-bit address space, so memory can be saved by reducing the size of object pointers from 64 to 32 bits.
+
+If the heap is restricted to some 4GB-aligned region of the 64-bit address space, pointers can be compressed to 32-bits by dropping the upper bits during a store, and decompressed back to 64-bits after a load by adding the heap base address. (If our heap was at the low 4GB, adding the heap base would be unnecessary, but this portion of the address space is already occupied by [ART](https://source.android.com/docs/core/runtime).)
+
+If the heap was nothing but pointers, this would reduce memory usage by half. In practice the heap is a mixture of pointers and bytes that won’t be compressed. Also some objects won’t be smaller because all sizes are rounded up to the allocation unit. In practice heap usage is reduced by 20-30% rather than 50%. Also a program's memory usage involves more than the Dart heap, the rest of which is not reduced by Dart pointer compression.
+
+Because we decompress by unconditionally adding the heap base, if the pointer was in fact a [Smi](glossary.md), the upper 32 bits are now garbage instead of sign extended. To account for this, uses of Smis must use 32-bit operations instead of 64-bit operations for things like comparison or using a Smi value as an array index. [V8](https://v8.dev/blog/pointer-compression) follows the same strategy and called it "Smi-corrupting".
+
+| Operation     | Uncompressed     | Compressed                           |
+| ------------- | ---------------- | ------------------------------------ |
+| Load pointer  | `ldr x0, [x1, #9]` | `ldr w0, [x1, #9]`<br>`add x0, x0, x28` |
+| Load pointer, known Smi  | `ldr x0, [x1, #9]` | `ldrs w0, [x1, #9]`  |
+| Store pointer | `str x0, [x1, #9]` | `str w0, [x1, #9]` |
+| Smi add       | `add x0, x1, x2` | `add w0, w1, w2` |
+| Smi compare   | `cmp x0, x1` | `cmp w0, w1` |
+| Smi indexing  | `ldr x0, [x1, x2 lsl 2]` | `ldr x0, [x1, w2 sxtw 2]` |
+
+We do not compress every pointer in the Dart heap. In particular, ObjectPool is uncompressed. Every entry in the pool exists because it will be used by at least one load in the compiled code. Saving 32 bits per entry costs an additional 32-bit instruction on the load side, and some entries are used by more than one load, so using compressed pointers for the pool would be a net size increase.
+
+Some applications do need more than 4GB of memory, so we support both compressed and full pointer modes as a build-time option. We generally use full pointers for desktop/server and compressed pointers for mobile.
+
+Because all isolate groups share some read-only objects such as null and common stub code, all isolate groups occupy the same 4GB region. If we were to move these objects into the isolate groups' own heaps, each isolate group could have an independent 4GB allocation limit.
+
+Because we do not control the address of snapshots loaded by dlopen, such that they might be outside the 4GB region, we do not place read-only data objects like strings into the snapshot image to be directly referenced and loaded lazily by demand paging. Instead they are deserialized into the compressed heap and so brought into memory eagerly.
diff --git a/runtime/docs/gc.md b/runtime/docs/gc.md
index 479d9b8..99859b1 100644
--- a/runtime/docs/gc.md
+++ b/runtime/docs/gc.md
@@ -45,6 +45,8 @@
 
 Because a safepoint operation excludes execution of Dart code, it is sometimes used for non-GC tasks that requires only this property. For example, when a background compilation has completed and wants to install its result, it uses a safepoint operation to ensure no Dart execution sees the intermediate states during installation.
 
+The state of each thread is represented using `Thread::ExecutionState` enum. A thread is considered to be at a safepoint if its state is `kThreadInNative` (executing external native code) or `kThreadInBlockedState` (blocked on a lock). Conversely, a thread in `kThreadInVM` (executing C++ VM code) or `kThreadInGenerated` (executing compiled Dart code) is not at a safepoint. The VM relies on threads transitioning between these states carefully to ensure that a safepoint operation can begin only when all threads are in a safe state.
+
 ## Scavenge
 
 See [Cheney's algorithm](https://en.wikipedia.org/wiki/Cheney's_algorithm).
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index be40c8a..b146d32 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -3607,6 +3607,18 @@
 Dart_LoadScriptFromBytecode(const uint8_t* kernel_buffer, intptr_t kernel_size);
 
 /**
+ * Loads a module snapshot.
+ *
+ * \param snapshot_data Buffer containing the module snapshot data.
+ *   Must remain valid until isolate group shutdown.
+ * \param snapshot_instructions Buffer containing the module snapshot
+ *   instructions. Must remain valid until isolate group shutdown.
+ */
+DART_EXPORT DART_API_WARN_UNUSED_RESULT Dart_Handle
+Dart_LoadModuleSnapshot(const uint8_t* snapshot_data,
+                        const uint8_t* snapshot_instructions);
+
+/**
  * Gets the library for the root script for the current isolate.
  *
  * If the root script has not yet been set for the current isolate,
@@ -4176,6 +4188,58 @@
                                   const char* path);
 
 /**
+ *  Creates a precompiled snapshot along with a relocatable object file.
+ *   - A root library must have been loaded.
+ *   - Dart_Precompile must have been called.
+ *
+ *  Outputs both a snapshot and a relocatable object file in
+ *  the specified binary format defining the symbols
+ *   - _kDartVmSnapshotData
+ *   - _kDartVmSnapshotInstructions
+ *   - _kDartIsolateSnapshotData
+ *   - _kDartIsolateSnapshotInstructions
+ *  Whether or not the snapshot is stripped, the relocatable object file
+ *  contains all debugging information.
+ *
+ *  The shared library should be dynamically loaded by the embedder.
+ *  Running this snapshot requires a VM compiled with DART_PRECOMPILED_RUNTIME.
+ *  The kDartVmSnapshotData and kDartVmSnapshotInstructions should be passed to
+ *  Dart_Initialize. The kDartIsolateSnapshotData and
+ *  kDartIsolateSnapshotInstructions should be passed to Dart_CreateIsolate.
+ *
+ *  The callback will be invoked one or more times to provide the binary output.
+ *
+ *  If stripped is true, then the binary output will not include DWARF
+ *  debugging sections.
+ *
+ *  If debug_callback_data is provided, debug_callback_data will be used with
+ *  the callback to provide separate debugging information.
+ *
+ *  The identifier should be an appropriate string for identifying the resulting
+ *  dynamic library. For example, the identifier is used in ID_DYLIB and
+ *  CODE_SIGNATURE load commands for Mach-O dynamic libraries and for DW_AT_name
+ *  in the Dart progam's root DWARF compilation unit.
+ *
+ *  The path should be the full path of the resulting relocatable object file.
+ *  Currently, it is only used in Mach-O relocatable object files and snapshots
+ *  to create an appropriate N_OSO symbolic debugging variable
+ *  so dsymutil can be used. Note that an external strip utility is needed to
+ *  remove the N_OSO symbolic debugging variable after dsymutil usage.
+ *
+ * \return A valid handle if no error occurs during the operation.
+ */
+DART_EXPORT DART_API_WARN_UNUSED_RESULT Dart_Handle
+Dart_CreateAppAOTSnapshotAndRelocatableObject(
+    Dart_AotBinaryFormat format,
+    Dart_StreamingWriteCallback callback,
+    void* snapshot_callback_data,
+    void* object_callback_data,
+    bool stripped,
+    void* debug_callback_data,
+    const char* identifier,
+    const char* path);
+
+/**
  *  Like Dart_CreateAppAOTSnapshotAsAssembly, but only includes
  *  kDartVmSnapshotData and kDartVmSnapshotInstructions. It also does
  *  not strip DWARF information from the generated assembly or allow for
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index d3ad05e..280228e 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -1278,6 +1278,84 @@
   return Object::null();
 }
 
+static void EnsureThreadLocalsTableExistsAndBigEnough(Thread* thread,
+                                                      intptr_t index) {
+  GrowableObjectArray& locals =
+      GrowableObjectArray::Handle(thread->thread_locals());
+  if (locals.IsNull()) {
+    locals = GrowableObjectArray::New();
+    thread->set_thread_locals(locals);
+  }
+  if (index >= locals.Length()) {
+    locals.Grow(index + 1);
+    intptr_t old_length = locals.Length();
+    locals.SetLength(locals.Capacity());
+    for (intptr_t i = old_length; i < locals.Capacity(); i++) {
+      locals.SetAt(i, Object::sentinel());
+    }
+  }
+}
+
+DEFINE_NATIVE_ENTRY(ScopedThreadLocal_allocateId, 0, 0) {
+  auto isolate_group = thread->isolate_group();
+  isolate_group->increment_scoped_thread_locals_count();
+  intptr_t new_index = isolate_group->scoped_thread_locals_count() - 1;
+  EnsureThreadLocalsTableExistsAndBigEnough(thread, new_index);
+  GrowableObjectArray& locals =
+      GrowableObjectArray::Handle(thread->thread_locals());
+  locals.SetAt(new_index, Object::sentinel());
+  return Integer::New(new_index);
+}
+
+static void ValidateScopedThreadLocalId(Thread* thread, intptr_t id) {
+  if (id < 0 || id >= thread->isolate_group()->scoped_thread_locals_count()) {
+    const String& msg = String::Handle(String::New("Invalid local id."));
+    Exceptions::ThrowStateError(msg);
+    UNREACHABLE();
+  }
+  EnsureThreadLocalsTableExistsAndBigEnough(thread, id);
+}
+
+DEFINE_NATIVE_ENTRY(ScopedThreadLocal_hasValue, 0, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Integer, id_obj, arguments->NativeArgAt(0));
+  intptr_t id = id_obj.Value();
+  ValidateScopedThreadLocalId(thread, id);
+  GrowableObjectArray& locals =
+      GrowableObjectArray::Handle(thread->thread_locals());
+  return locals.At(id) == Object::sentinel().ptr() ? Bool::False().ptr()
+                                                   : Bool::True().ptr();
+}
+
+DEFINE_NATIVE_ENTRY(ScopedThreadLocal_getValue, 0, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Integer, id_obj, arguments->NativeArgAt(0));
+  intptr_t id = id_obj.Value();
+  ValidateScopedThreadLocalId(thread, id);
+  GrowableObjectArray& locals =
+      GrowableObjectArray::Handle(thread->thread_locals());
+  return locals.At(id);
+}
+
+DEFINE_NATIVE_ENTRY(ScopedThreadLocal_setValue, 0, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Integer, id_obj, arguments->NativeArgAt(0));
+  intptr_t id = id_obj.Value();
+  ValidateScopedThreadLocalId(thread, id);
+  GET_NON_NULL_NATIVE_ARGUMENT(Instance, value, arguments->NativeArgAt(1));
+  GrowableObjectArray& locals =
+      GrowableObjectArray::Handle(thread->thread_locals());
+  locals.SetAt(id, value);
+  return Object::null();
+}
+
+DEFINE_NATIVE_ENTRY(ScopedThreadLocal_clearValue, 0, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Integer, id_obj, arguments->NativeArgAt(0));
+  intptr_t id = id_obj.Value();
+  ValidateScopedThreadLocalId(thread, id);
+  GrowableObjectArray& locals =
+      GrowableObjectArray::Handle(thread->thread_locals());
+  locals.SetAt(id, Object::sentinel());
+  return Object::null();
+}
+
 static void ExternalTypedDataFinalizer(void* isolate_callback_data,
                                        void* peer) {
   free(peer);
diff --git a/runtime/platform/atomic.h b/runtime/platform/atomic.h
index cbba54e..8b6180c 100644
--- a/runtime/platform/atomic.h
+++ b/runtime/platform/atomic.h
@@ -153,6 +153,28 @@
       std::memory_order_relaxed);
 }
 
+inline void StoreStoreFence() {
+#if defined(HOST_ARCH_ARM) && defined(_MSC_VER)
+  __dmb(_ARM_BARRIER_ISHST);
+#elif defined(HOST_ARCH_ARM64) && defined(_MSC_VER)
+  __dmb(_ARM64_BARRIER_ISHST);
+#elif defined(HOST_ARCH_ARM64) && defined(__GNUC__)
+  __asm__ __volatile__("dmb ishst" : : : "memory");
+#elif defined(HOST_ARCH_ARM) && defined(__GNUC__)
+  __asm__ __volatile__("dmb ishst" : : : "memory");
+#elif defined(HOST_ARCH_RISCV32) && defined(__GNUC__)
+  __asm__ __volatile__("fence w,w" : : : "memory");
+#elif defined(HOST_ARCH_RISCV64) && defined(__GNUC__)
+  __asm__ __volatile__("fence w,w" : : : "memory");
+#else
+  // GCC warns that TSAN doesn't understand thread fences.
+#if defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic ignored "-Wtsan"
+#endif
+  std::atomic_thread_fence(std::memory_order_release);
+#endif
+}
+
 }  // namespace dart
 
 #endif  // RUNTIME_PLATFORM_ATOMIC_H_
diff --git a/runtime/platform/mach_o.h b/runtime/platform/mach_o.h
index f104279..07fa36f 100644
--- a/runtime/platform/mach_o.h
+++ b/runtime/platform/mach_o.h
@@ -86,7 +86,7 @@
 
 // Filetypes for the Mach-O header.
 
-// A relocatable object file (e.g., an executable).
+// A relocatable object file that has all sections in a single unnamed segment.
 static constexpr uint32_t MH_OBJECT = 0x1;
 // A dynamically bound shared library.
 static constexpr uint32_t MH_DYLIB = 0x6;
@@ -167,7 +167,7 @@
   uint32_t nsects;
   //
   uint32_t flags;
-  // section_command[]
+  // section[]
 };
 
 // Contains the same fields as segment_command, but the starting memory
@@ -184,7 +184,7 @@
   vm_prot_t initprot;
   uint32_t nsects;
   uint32_t flags;
-  // section_command_64[]
+  // section_64[]
 };
 
 struct section {
@@ -271,6 +271,12 @@
 // table and code signature.
 static constexpr char SEG_LINKEDIT[] = "__LINKEDIT";
 
+// Segment/section names used for relocatable object files.
+static constexpr char SEG_UNNAMED[] = "";
+
+static constexpr char SEG_LD[] = "__LD";
+static constexpr char SECT_COMPACT_UNWIND[] = "__compact_unwind";
+
 struct symtab_command {
   uint32_t cmd;  // LC_SYMTAB
   uint32_t cmdsize;
@@ -654,6 +660,89 @@
   // ... regular and compressed second level pages ...
 };
 
+// Relocation information in relocatable objects. The reloff field in
+// the section and section_64 structs gives the starting file offset for
+// the section's relocation information, and nreloc gives the number of
+// structs found starting from that offset.
+struct relocation_info {
+  // The "address" of the relocation entry is the offset into the
+  // corresponding section.
+  int32_t address;
+  // The metadata contains the following bit fields, from low to high:
+  // 0-23:  The index of the section or symbol on which this relation entry
+  //        is based. Note that, as with other parts of the Mach-O format,
+  //        section indices are 1-based, while symbol indices are 0-based.
+  // 24:    Whether or not this relocation is PC-relative.
+  // 25-26: log2(n), where n is the size of the relocation entry in bytes.
+  // 27:    Whether or not this relocation is "external". An external
+  //        relocation is based on a symbol in the symbol table. If false,
+  //        then the relocation is based on a section instead.
+  // 28-31: The type of the relocation entry, see the RELOC_TYPE_*
+  //        constants below.
+  uint32_t metadata;
+};
+
+// The number of low bits used to store the symbol or section index in
+// the relocation entry.
+static constexpr uint32_t RELOC_METADATA_INDEX_BITS = 24;
+
+// The size of the relocation in the section contents.
+static constexpr uint32_t RELOC_SIZE_BYTE = 0 << 25;
+static constexpr uint32_t RELOC_SIZE_2BYTES = 1 << 25;
+static constexpr uint32_t RELOC_SIZE_4BYTES = 2 << 25;
+static constexpr uint32_t RELOC_SIZE_8BYTES = 3 << 25;
+
+// This bit is set if the index in the payload is the index of a symbol
+// in the symbol table. It is unset if the index in the payload is the
+// (1-based) index of a section.
+static constexpr uint32_t RELOC_EXTERN = 1 << 27;
+
+// For our purposes, the MachOWriter only emits two types of relocation entries:
+// UNSIGNED and SUBTRACTOR. The numeric encoding of these types are
+// platform dependent, but the semantics are the same for both X64 and ARM64:
+//
+// Consider a relocation comprised of the following parts:
+//   (Target + TOffset) - (Source + SOffset)
+// at the offset ROffset in section Section with virtual address
+//   RAddress = Section.addr + ROffset
+// in the relocatable object.
+//
+// An UNSIGNED relocation entry specifies Target. It refers either to a section
+// or a symbol via the stored index.
+//
+// A SUBTRACTOR relocation entry specifies Source. It always refers to a symbol,
+// never a section. Additionally, SUBTRACTOR relocation entries are always found
+// immediately before the corresponding UNSIGNED relocation entries.
+//
+// The offsets are combined into a single addend, which is stored in the section
+// contents at the offset of the relocation. If the relocation entries are
+// symbol based, then
+//   addend = TOffset - SOffset
+// and for section-based relocation entries (which have no Source/SOffset),
+//   addend = RAddress + TOffset
+// That is, the virtual address of the relocation is included in the addend for
+// section-based relocation entries.
+
+// X64-specific constants for relocation types.
+
+// A relocation specifying a section or symbol that is the target
+// of the relocation.
+static constexpr uint32_t RELOC_TYPE_X64_UNSIGNED = 0 << 28;
+// A relocation specifying a symbol that is the source of the relocation.
+// Note that in the list of the relocations, the source comes immediately
+// _before_ the target (UNSIGNED) entry that it is subtracted from.
+static constexpr uint32_t RELOC_TYPE_X64_SUBTRACTOR = 5 << 28;
+
+// ARM64-specific constants for relocation types.
+
+// A relocation specifying a section or symbol that is the target
+// of the relocation.
+static constexpr uint32_t RELOC_TYPE_ARM64_UNSIGNED = 0 << 28;
+// A relocation specifying a symbol that is the source of the relocation.
+// Note that in the list of the relocations, the source comes immediately
+// _before_ the target (UNSIGNED) entry that it is subtracted from.
+static constexpr uint32_t RELOC_TYPE_ARM64_SUBTRACTOR = 1 << 28;
+
 #pragma pack(pop)
 
 }  // namespace mach_o
diff --git a/runtime/platform/unwinding_records.h b/runtime/platform/unwinding_records.h
index 67df344..6ec353b 100644
--- a/runtime/platform/unwinding_records.h
+++ b/runtime/platform/unwinding_records.h
@@ -47,6 +47,11 @@
 #endif
 
 #if defined(TARGET_ARCH_X64)
+
+#if !defined(HOST_ARCH_X64)
+#define UNWINDING_RECORDS_HOST_TARGET_MISMATCH 1
+#endif
+
 //
 // Refer to https://learn.microsoft.com/en-us/cpp/build/exception-handling-x64
 //
@@ -120,6 +125,10 @@
 
 #elif defined(TARGET_ARCH_ARM64)
 
+#if !defined(HOST_ARCH_ARM64)
+#define UNWINDING_RECORDS_HOST_TARGET_MISMATCH 1
+#endif
+
 // ARM64 unwind codes are defined in below doc.
 // https://docs.microsoft.com/en-us/cpp/build/arm64-exception-handling#unwind-codes
 enum UnwindOp8Bit {
@@ -252,7 +261,10 @@
 //
 // Make sure that the sizes match, so that TargetRuntimeFunction values
 // can be used as RUNTIME_FUNCTION values and vice versa in the runtime.
-#if defined(UNWINDING_RECORDS_WINDOWS_HOST)
+// The check doesn't make sense when host and target platforms are different
+// though, and no code depends on it in such cross-platform scenario.
+#if defined(UNWINDING_RECORDS_WINDOWS_HOST) &&                                 \
+    !defined(UNWINDING_RECORDS_HOST_TARGET_MISMATCH)
 static_assert(sizeof(TargetRuntimeFunction) == sizeof(RUNTIME_FUNCTION));
 #endif
 
diff --git a/runtime/runtime_args.gni b/runtime/runtime_args.gni
index ea0aaae..a246292 100644
--- a/runtime/runtime_args.gni
+++ b/runtime/runtime_args.gni
@@ -85,23 +85,23 @@
   # from being built on platforms which have a problem linking in the
   # Perfetto library, e.g. watchOS.
   #
-  # We also exclude perfetto support when producing product builds for
-  # mobile OSes.
+  # We also exclude perfetto support when producing builds which set
+  # dart_runtime_mode to release e.g. Dart Product builds or Flutter
+  # release engine variants. This does not affect product AOT runtime
+  # which shipped with Dart SDK.
+  #
+  # Note: including Perfetto support automatically includes profiler
+  # into the resulting binary.
   #
   # is_watchos may be undefined when Dart SDK is built from the Flutter
   # engine tree.
   dart_support_perfetto =
-      !((defined(is_watchos) && is_watchos) ||
-        (dart_runtime_mode == "release" &&
-         ((defined(is_ios) && is_ios) || (defined(is_android) && is_android))))
+      !((defined(is_watchos) && is_watchos) || dart_runtime_mode == "release")
 
-  # The analyze_snapshot tool is only supported on 64 bit AOT builds that use
-  # ELF.
+  # The analyze_snapshot tool is only supported on 64 bit AOT builds.
   build_analyze_snapshot =
-      (target_os == "linux" || target_os == "mac" || target_os == "android" ||
-       target_os == "fuchsia") &&
-      (dart_target_arch == "x64" || dart_target_arch == "arm64" ||
-       dart_target_arch == "riscv64")
+      dart_target_arch == "x64" || dart_target_arch == "arm64" ||
+      dart_target_arch == "riscv64"
 }
 
 if (is_fuchsia) {
diff --git a/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart b/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart
index a31dcfe..2e3a9f1 100644
--- a/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart
+++ b/runtime/tests/vm/dart/analyze_snapshot_binary_test.dart
@@ -10,6 +10,7 @@
 import 'package:collection/collection.dart';
 import 'package:expect/expect.dart';
 import 'package:native_stack_traces/elf.dart';
+import 'package:native_stack_traces/src/macho.dart' as macho;
 import 'package:path/path.dart' as path;
 
 import 'use_flag_test_helper.dart';
@@ -22,27 +23,81 @@
 // Used to ensure we don't have multiple equivalent calls to test.
 final _seenDescriptions = <String>{};
 
+enum Format {
+  assembly('assembly'),
+  elf('ELF'),
+  machO('Mach-O');
+
+  final String description;
+  const Format(this.description);
+}
+
+void verifyFileFormatBasics(Format format, String snapshotPath) {
+  Elf? elf;
+  if (format == Format.elf || format == Format.assembly) {
+    elf = Elf.fromFile(snapshotPath);
+    if (format == Format.elf) {
+      Expect.isNotNull(elf);
+    }
+  }
+  macho.MachO? m;
+  if (format == Format.machO || (elf == null && format == Format.assembly)) {
+    m = macho.MachO.fromFile(snapshotPath);
+    if (format == Format.machO) {
+      Expect.isNotNull(m);
+    }
+  }
+
+  if (elf != null) {
+    // Verify some ELF file format parameters.
+    final textSections = elf.namedSections(".text");
+    Expect.isNotEmpty(textSections);
+    Expect.isTrue(textSections.length <= 2, "More text sections than expected");
+    final dataSections = elf.namedSections(".rodata");
+    Expect.isNotEmpty(dataSections);
+    Expect.isTrue(dataSections.length <= 2, "More data sections than expected");
+  }
+
+  if (m != null) {
+    // Verify some Mach-O file format parameters.
+    final textSegment = m
+        .commandsWhereType<macho.SegmentCommand>()
+        .where((s) => s.segname == '__TEXT')
+        .firstOrNull;
+    Expect.isNotNull(textSegment);
+    if (textSegment != null) {
+      final textSection = textSegment.sections['__text'];
+      Expect.isNotNull(textSection);
+      final constSection = textSegment.sections['__const'];
+      Expect.isNotNull(constSection);
+    }
+  }
+}
+
 Future<void> testAOT(
-  String dillPath, {
-  bool useAsm = false,
+  String dillPath,
+  Format format, {
   bool forceDrops = false,
   bool stripUtil = false, // Note: forced true if useAsm.
   bool stripFlag = false,
 }) async {
   const isProduct = const bool.fromEnvironment('dart.vm.product');
 
-  final analyzeSnapshot = path.join(buildDir, 'analyze_snapshot');
+  final analyzeSnapshot = path.join(
+    buildDir,
+    'analyze_snapshot' + (Platform.isWindows ? '.exe' : ''),
+  );
 
   // For assembly, we can't test the sizes of the snapshot sections, since we
   // don't have a Mach-O reader for Mac snapshots and for ELF, the assembler
   // merges the text/data sections and the VM/isolate section symbols may not
   // have length information. Thus, we force external stripping so we can test
   // the approximate size of the stripped snapshot.
-  if (useAsm) {
+  if (format == Format.assembly) {
     stripUtil = true;
   }
 
-  final descriptionBuilder = StringBuffer()..write(useAsm ? 'assembly' : 'elf');
+  final descriptionBuilder = StringBuffer()..write(format.description);
   if (forceDrops) {
     descriptionBuilder.write('-dropped');
   }
@@ -75,53 +130,45 @@
     ];
 
     final int textSectionSize;
-    if (useAsm) {
-      final assemblyPath = path.join(tempDir, 'test.S');
+    switch (format) {
+      case Format.assembly:
+        final assemblyPath = path.join(tempDir, 'test.S');
 
-      textSectionSize = _findTextSectionSize(
-        await runOutput(genSnapshot, <String>[
-          '--snapshot-kind=app-aot-assembly',
-          '--assembly=$assemblyPath',
-          '--print-snapshot-sizes',
-          ...commonSnapshotArgs,
-        ], ignoreStdErr: true),
-      );
-
-      await assembleSnapshot(assemblyPath, snapshotPath);
-    } else {
-      textSectionSize = _findTextSectionSize(
-        await runOutput(genSnapshot, <String>[
-          '--snapshot-kind=app-aot-elf',
-          '--elf=$snapshotPath',
-          '--print-snapshot-sizes',
-          ...commonSnapshotArgs,
-        ], ignoreStdErr: true),
-      );
+        textSectionSize = _findTextSectionSize(
+          await runOutput(genSnapshot, <String>[
+            '--snapshot-kind=app-aot-assembly',
+            '--assembly=$assemblyPath',
+            '--print-snapshot-sizes',
+            ...commonSnapshotArgs,
+          ], ignoreStdErr: true),
+        );
+        await assembleSnapshot(assemblyPath, snapshotPath);
+        break;
+      case Format.elf:
+        textSectionSize = _findTextSectionSize(
+          await runOutput(genSnapshot, <String>[
+            '--snapshot-kind=app-aot-elf',
+            '--elf=$snapshotPath',
+            '--print-snapshot-sizes',
+            ...commonSnapshotArgs,
+          ], ignoreStdErr: true),
+        );
+        break;
+      case Format.machO:
+        textSectionSize = _findTextSectionSize(
+          await runOutput(genSnapshot, <String>[
+            '--snapshot-kind=app-aot-macho-dylib',
+            '--macho=$snapshotPath',
+            '--print-snapshot-sizes',
+            ...commonSnapshotArgs,
+          ], ignoreStdErr: true),
+        );
+        break;
     }
 
     print("Snapshot generated at $snapshotPath.");
 
-    // May not be ELF, but another format.
-    final elf = Elf.fromFile(snapshotPath);
-    if (!useAsm) {
-      Expect.isNotNull(elf);
-    }
-
-    if (elf != null) {
-      // Verify some ELF file format parameters.
-      final textSections = elf.namedSections(".text");
-      Expect.isNotEmpty(textSections);
-      Expect.isTrue(
-        textSections.length <= 2,
-        "More text sections than expected",
-      );
-      final dataSections = elf.namedSections(".rodata");
-      Expect.isNotEmpty(dataSections);
-      Expect.isTrue(
-        dataSections.length <= 2,
-        "More data sections than expected",
-      );
-    }
+    verifyFileFormatBasics(format, snapshotPath);
 
     final analyzerOutputPath = path.join(tempDir, 'analyze_test.json');
 
@@ -624,31 +671,33 @@
     ]);
 
     // Just as a reminder for AOT tests:
-    // * If useAsm is true, then stripUtil is forced (as the assembler may add
-    //   extra information that needs stripping), so no need to specify
-    //   stripUtil for useAsm tests.
+    // * If format == Format.assembly, then stripUtil is forced (as
+    //   the assembler may add extra information that needs stripping),
+    //   so no need to specify stripUtil for useAsm tests.
 
-    await Future.wait([
-      // Test unstripped ELF generation directly.
-      testAOT(aotDillPath),
-      testAOT(aotDillPath, forceDrops: true),
+    for (final format in Format.values) {
+      // Assembly is handled separately after the for loop.
+      if (format == Format.assembly) continue;
+      await Future.wait([
+        // Test unstripped generation directly.
+        testAOT(aotDillPath, format),
+        testAOT(aotDillPath, format, forceDrops: true),
 
-      // Test flag-stripped ELF generation.
-      testAOT(aotDillPath, stripFlag: true),
-    ]);
+        // Test flag-stripped generation.
+        testAOT(aotDillPath, format, stripFlag: true),
 
-    // Test unstripped ELF generation that is then externally stripped.
-    await Future.wait([testAOT(aotDillPath, stripUtil: true)]);
+        // Test unstripped generation that is then externally stripped.
+        testAOT(aotDillPath, format, stripUtil: true),
+      ]);
+    }
 
-    // Dont test assembled snapshot for simulated platforms or macos
-    if (!buildDir.endsWith("SIMARM64") &&
-        !buildDir.endsWith("SIMARM64C") &&
-        !Platform.isMacOS) {
+    // Dont test assembled snapshot for simulated platforms.
+    if (!isSimulator) {
       await Future.wait([
         // Test unstripped assembly generation that is then externally stripped.
-        testAOT(aotDillPath, useAsm: true),
+        testAOT(aotDillPath, Format.assembly),
         // Test stripped assembly generation that is then externally stripped.
-        testAOT(aotDillPath, useAsm: true, stripFlag: true),
+        testAOT(aotDillPath, Format.assembly, stripFlag: true),
       ]);
     }
   });
diff --git a/runtime/tests/vm/dart/awaiter_stacks/zone_callback_stack_traces_test.dart b/runtime/tests/vm/dart/awaiter_stacks/zone_callback_stack_traces_test.dart
index 03124bf..381d02e 100644
--- a/runtime/tests/vm/dart/awaiter_stacks/zone_callback_stack_traces_test.dart
+++ b/runtime/tests/vm/dart/awaiter_stacks/zone_callback_stack_traces_test.dart
@@ -96,7 +96,7 @@
 #1    _CustomZone.registerUnaryCallback (zone.dart)
 #2    foo (%test%)
 #3    bar (%test%)
-#4    _rootRun (zone.dart)
+#4    _rootRun (zone_root.dart)
 #5    _CustomZone.run (zone.dart)
 #6    runTest (%test%)
 #7    main (%test%)
@@ -107,7 +107,7 @@
 #1    _CustomZone.registerBinaryCallback (zone.dart)
 #2    foo (%test%)
 #3    bar (%test%)
-#4    _rootRun (zone.dart)
+#4    _rootRun (zone_root.dart)
 #5    _CustomZone.run (zone.dart)
 #6    runTest (%test%)
 #7    main (%test%)
@@ -117,7 +117,7 @@
 #0    _registerUnaryCallback (%test%)
 #1    _CustomZone.registerUnaryCallback (zone.dart)
 #2    bar (%test%)
-#3    _rootRun (zone.dart)
+#3    _rootRun (zone_root.dart)
 #4    _CustomZone.run (zone.dart)
 #5    runTest (%test%)
 #6    main (%test%)
@@ -127,7 +127,7 @@
 #0    _registerBinaryCallback (%test%)
 #1    _CustomZone.registerBinaryCallback (zone.dart)
 #2    bar (%test%)
-#3    _rootRun (zone.dart)
+#3    _rootRun (zone_root.dart)
 #4    _CustomZone.run (zone.dart)
 #5    runTest (%test%)
 #6    main (%test%)
@@ -166,7 +166,7 @@
 <asynchronous suspension>""",
   """
 #0    bar.<anonymous closure> (%test%)
-#1    _rootRun (zone.dart)
+#1    _rootRun (zone_root.dart)
 #2    _CustomZone.run (zone.dart)
 #3    Future.timeout.<anonymous closure> (future_impl.dart)
 <asynchronous suspension>
diff --git a/runtime/tests/vm/dart/exported_symbols_test.dart b/runtime/tests/vm/dart/exported_symbols_test.dart
index c27f525..34ab7fe 100644
--- a/runtime/tests/vm/dart/exported_symbols_test.dart
+++ b/runtime/tests/vm/dart/exported_symbols_test.dart
@@ -70,6 +70,7 @@
     "Dart_CompileAll",
     "Dart_CompileToKernel",
     "Dart_CopyUTF8EncodingOfString",
+    "Dart_CreateAppAOTSnapshotAndRelocatableObject",
     "Dart_CreateAppAOTSnapshotAsAssemblies",
     "Dart_CreateAppAOTSnapshotAsAssembly",
     "Dart_CreateAppAOTSnapshotAsElf",
@@ -233,6 +234,7 @@
     "Dart_LoadLibrary",
     "Dart_LoadLibraryFromBytecode",
     "Dart_LoadLibraryFromKernel",
+    "Dart_LoadModuleSnapshot",
     "Dart_LoadScriptFromBytecode",
     "Dart_LoadScriptFromKernel",
     "Dart_LookupLibrary",
diff --git a/runtime/tests/vm/dart/generated/regress_flutter_176619_generator.dart b/runtime/tests/vm/dart/generated/regress_flutter_176619_generator.dart
new file mode 100644
index 0000000..e1cd57b
--- /dev/null
+++ b/runtime/tests/vm/dart/generated/regress_flutter_176619_generator.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 generator for quadratic behavior in processing of
+// safepoints in linear scan register allocator.
+//
+// See https://github.com/flutter/flutter/issues/176619
+
+void main() {
+  const n = 5000;
+
+  print('''
+@pragma('vm:never-inline')
+String foo(String a, String b) {
+  return '<\$a:\$b>';
+}
+
+@pragma('vm:never-inline')
+String bar(String v) {
+  switch(v) {
+''');
+  for (var i = 0; i < n; i++) {
+    print('    case "v$i": return foo("a$i", v);');
+  }
+  print('''
+    default: return '?';
+  }
+}
+''');
+
+  print('''
+
+void main(List<String> args) {
+  final a = args.length == 2 ? args[0] : 'a';
+  final b = args.length == 2 ? args[1] : 'b';
+  print(bar(foo(a, b)));
+}
+''');
+}
diff --git a/runtime/tests/vm/dart/profiler_deep_stack_test.dart b/runtime/tests/vm/dart/profiler_deep_stack_test.dart
new file mode 100644
index 0000000..2e5ae80
--- /dev/null
+++ b/runtime/tests/vm/dart/profiler_deep_stack_test.dart
@@ -0,0 +1,147 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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=--profiler --profile-vm=true
+// VMOptions=--profiler --profile-vm=false
+
+main() {
+  for (var i = 0; i < 100; i++) {
+    foo1();
+  }
+}
+
+@pragma("vm:never-inline")
+foo1() => foo2();
+@pragma("vm:never-inline")
+foo2() => foo3();
+@pragma("vm:never-inline")
+foo3() => foo4();
+@pragma("vm:never-inline")
+foo4() => foo5();
+@pragma("vm:never-inline")
+foo5() => foo6();
+@pragma("vm:never-inline")
+foo6() => foo7();
+@pragma("vm:never-inline")
+foo7() => foo8();
+@pragma("vm:never-inline")
+foo8() => foo9();
+@pragma("vm:never-inline")
+foo9() => foo10();
+@pragma("vm:never-inline")
+foo10() => foo11();
+@pragma("vm:never-inline")
+foo11() => foo12();
+@pragma("vm:never-inline")
+foo12() => foo13();
+@pragma("vm:never-inline")
+foo13() => foo14();
+@pragma("vm:never-inline")
+foo14() => foo15();
+@pragma("vm:never-inline")
+foo15() => foo16();
+@pragma("vm:never-inline")
+foo16() => foo17();
+@pragma("vm:never-inline")
+foo17() => foo18();
+@pragma("vm:never-inline")
+foo18() => foo19();
+@pragma("vm:never-inline")
+foo19() => foo20();
+@pragma("vm:never-inline")
+foo20() => foo21();
+@pragma("vm:never-inline")
+foo21() => foo22();
+@pragma("vm:never-inline")
+foo22() => foo23();
+@pragma("vm:never-inline")
+foo23() => foo24();
+@pragma("vm:never-inline")
+foo24() => foo25();
+@pragma("vm:never-inline")
+foo25() => foo26();
+@pragma("vm:never-inline")
+foo26() => foo27();
+@pragma("vm:never-inline")
+foo27() => foo28();
+@pragma("vm:never-inline")
+foo28() => foo29();
+@pragma("vm:never-inline")
+foo29() => foo30();
+@pragma("vm:never-inline")
+foo30() => foo31();
+@pragma("vm:never-inline")
+foo31() => foo32();
+@pragma("vm:never-inline")
+foo32() => foo33();
+@pragma("vm:never-inline")
+foo33() => foo34();
+@pragma("vm:never-inline")
+foo34() => foo35();
+@pragma("vm:never-inline")
+foo35() => foo36();
+@pragma("vm:never-inline")
+foo36() => foo37();
+@pragma("vm:never-inline")
+foo37() => foo38();
+@pragma("vm:never-inline")
+foo38() => foo39();
+@pragma("vm:never-inline")
+foo39() => foo40();
+@pragma("vm:never-inline")
+foo40() => foo41();
+@pragma("vm:never-inline")
+foo41() => foo42();
+@pragma("vm:never-inline")
+foo42() => foo43();
+@pragma("vm:never-inline")
+foo43() => foo44();
+@pragma("vm:never-inline")
+foo44() => foo45();
+@pragma("vm:never-inline")
+foo45() => foo46();
+@pragma("vm:never-inline")
+foo46() => foo47();
+@pragma("vm:never-inline")
+foo47() => foo48();
+@pragma("vm:never-inline")
+foo48() => foo49();
+@pragma("vm:never-inline")
+foo49() => foo50();
+@pragma("vm:never-inline")
+foo50() => foo51();
+@pragma("vm:never-inline")
+foo51() => foo52();
+@pragma("vm:never-inline")
+foo52() => foo53();
+@pragma("vm:never-inline")
+foo53() => foo54();
+@pragma("vm:never-inline")
+foo54() => foo55();
+@pragma("vm:never-inline")
+foo55() => foo56();
+@pragma("vm:never-inline")
+foo56() => foo57();
+@pragma("vm:never-inline")
+foo57() => foo58();
+@pragma("vm:never-inline")
+foo58() => foo59();
+@pragma("vm:never-inline")
+foo59() => foo60();
+@pragma("vm:never-inline")
+foo60() => foo61();
+@pragma("vm:never-inline")
+foo61() => foo62();
+@pragma("vm:never-inline")
+foo62() => foo63();
+@pragma("vm:never-inline")
+foo63() => foo64();
+
+int global = 0;
+@pragma("vm:never-inline")
+foo64() {
+  for (int i = 0; i < 1000000; i++) {
+    global = global ^ (global + i);
+  }
+}
diff --git a/runtime/tests/vm/dart/regress_61981_test.dart b/runtime/tests/vm/dart/regress_61981_test.dart
new file mode 100644
index 0000000..2fa8b76
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_61981_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 Dart binary correctly handles situations when stdout and stderr
+// handles are the same.
+//
+// This can happen in certain terminal emulators, e.g. one used by GitBash
+// see https://github.com/dart-lang/sdk/issues/61981 for an example.
+
+import 'dart:io';
+
+import 'package:expect/expect.dart';
+import 'package:path/path.dart' as p;
+
+void main(List<String> args) {
+  if (args case ['child-process']) {
+    print('OK');
+    return;
+  }
+
+  if (!Platform.isWindows ||
+      p.basenameWithoutExtension(Platform.executable) != 'dart') {
+    return;
+  }
+
+  final createProcessHelper = p.join(
+    p.dirname(Platform.executable),
+    'create_process_test_helper.exe',
+  );
+
+  final result = Process.runSync(createProcessHelper, [
+    Platform.executable,
+    'run',
+    Platform.script.toFilePath(),
+    'child-process',
+  ]);
+  if (result.exitCode != 0) {
+    print(result.stdout);
+    print(result.stderr);
+    Expect.fail('process exited with ${result.exitCode}');
+  }
+  Expect.equals('OK', (result.stdout as String).trim());
+}
diff --git a/runtime/tests/vm/dart/regress_cl_463021_test.dart b/runtime/tests/vm/dart/regress_cl_463021_test.dart
new file mode 100644
index 0000000..031cfe0
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_cl_463021_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 tracing debugging stacktraces with frames involving an implicit
+// instance method (here, _AsyncStarStreamController.runBody which is in the
+// stacktrace for _Future._runError when run with --dart-dynamic-modules)
+// doesn't crash.
+
+// VMOptions=--stacktrace-filter=_hasError --trace-debugger-stacktrace
+
+Stream<int> foobar() async* {
+  yield 1;
+  yield 2;
+}
+
+Future<void> helper() async {
+  await for (var i in foobar()) {
+    print(i);
+  }
+  return;
+}
+
+Future<void> main() async {
+  await helper();
+}
diff --git a/runtime/tests/vm/dart/sanitizer_compatibility_test.dart b/runtime/tests/vm/dart/sanitizer_compatibility_test.dart
index 61a1e30..03848bb 100644
--- a/runtime/tests/vm/dart/sanitizer_compatibility_test.dart
+++ b/runtime/tests/vm/dart/sanitizer_compatibility_test.dart
@@ -27,11 +27,12 @@
 }
 
 main() async {
-  var sanitizer = find(Platform.executable, ["MSAN", "TSAN"]);
+  var sanitizer = find(Platform.executable, ["ASAN", "MSAN", "TSAN"]);
   var mode = find(Platform.executable, ["Debug", "Release", "Product"]);
   var arch = find(Platform.executable, ["X64", "ARM64", "RISCV64"]);
   var out = find(Platform.executable, ["out", "xcodebuild"]);
   var targetFlag = {
+    "ASAN": "--target_address_sanitizer",
     "MSAN": "--target_memory_sanitizer",
     "TSAN": "--target_thread_sanitizer",
   }[sanitizer]!;
diff --git a/runtime/tests/vm/dart/sanitizer_environment_test.dart b/runtime/tests/vm/dart/sanitizer_environment_test.dart
new file mode 100644
index 0000000..184e639
--- /dev/null
+++ b/runtime/tests/vm/dart/sanitizer_environment_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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";
+
+main() {
+  print("new dart.vm.asan = ${new bool.fromEnvironment('dart.vm.asan')}");
+  print("new dart.vm.msan = ${new bool.fromEnvironment('dart.vm.msan')}");
+  print("new dart.vm.tsan = ${new bool.fromEnvironment('dart.vm.tsan')}");
+  print("new dart.vm.product = ${new bool.fromEnvironment('dart.vm.product')}");
+  print("const dart.vm.asan = ${const bool.fromEnvironment('dart.vm.asan')}");
+  print("const dart.vm.msan = ${const bool.fromEnvironment('dart.vm.msan')}");
+  print("const dart.vm.tsan = ${const bool.fromEnvironment('dart.vm.tsan')}");
+  print(
+    "const dart.vm.product = ${const bool.fromEnvironment('dart.vm.product')}",
+  );
+
+  // From package:test_runner.
+  print("DART_CONFIGURATION = ${Platform.environment['DART_CONFIGURATION']}");
+
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("ASAN"),
+    new bool.fromEnvironment("dart.vm.asan"),
+    "new dart.vm.asan",
+  );
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("MSAN"),
+    new bool.fromEnvironment("dart.vm.msan"),
+    "new dart.vm.msan",
+  );
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("TSAN"),
+    new bool.fromEnvironment("dart.vm.tsan"),
+    "new dart.vm.tsan",
+  );
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("Product"),
+    new bool.fromEnvironment("dart.vm.product"),
+    "new dart.vm.product",
+  );
+
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("ASAN"),
+    const bool.fromEnvironment("dart.vm.asan"),
+    "const dart.vm.asan",
+  );
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("MSAN"),
+    const bool.fromEnvironment("dart.vm.msan"),
+    "const dart.vm.msan",
+  );
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("TSAN"),
+    const bool.fromEnvironment("dart.vm.tsan"),
+    "const dart.vm.tsan",
+  );
+  Expect.equals(
+    Platform.environment["DART_CONFIGURATION"]!.contains("Product"),
+    const bool.fromEnvironment("dart.vm.product"),
+    "const dart.vm.product",
+  );
+}
diff --git a/runtime/tests/vm/dart/scoped_thread_local_test.dart b/runtime/tests/vm/dart/scoped_thread_local_test.dart
new file mode 100644
index 0000000..eb7c67e
--- /dev/null
+++ b/runtime/tests/vm/dart/scoped_thread_local_test.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 ScopedThreadLocal.
+//
+// VMOptions=--experimental-shared-data
+
+import 'package:dart_internal/isolate_group.dart' show IsolateGroup;
+import 'dart:_vm' show ScopedThreadLocal;
+
+import "package:expect/expect.dart";
+
+/// A collection used to identify cyclic lists during `toString` calls.
+@pragma('vm:shared')
+final toStringVisiting = ScopedThreadLocal<List<Object>>(() => <Object>[]);
+
+/// Check if we are currently visiting [object] in a `toString` call.
+bool isToStringVisiting(List<Object> toStringVisitingValue, Object object) {
+  for (int i = 0; i < toStringVisitingValue.length; i++) {
+    if (identical(object, toStringVisitingValue[i])) return true;
+  }
+  return false;
+}
+
+void _iterablePartsToStrings(Iterable<Object> iterable, List<String> parts) {
+  Iterator<Object> it = iterable.iterator;
+  // Initial run of elements, at least headCount, and then continue until
+  // passing at most lengthLimit characters.
+  while (it.moveNext()) {
+    if (it.current is Iterable<Object>) {
+      parts.add(iterableToShortString(it.current as Iterable<Object>));
+    } else {
+      parts.add("${it.current}");
+    }
+  }
+}
+
+String iterableToShortString(
+  Iterable<Object> iterable, [
+  String leftDelimiter = '(',
+  String rightDelimiter = ')',
+]) {
+  return toStringVisiting.runInitialized((toStringVisitingValue) {
+    if (isToStringVisiting(toStringVisitingValue, iterable)) {
+      return "$leftDelimiter...$rightDelimiter";
+    }
+    List<String> parts = <String>[];
+    toStringVisitingValue.add(iterable);
+    try {
+      _iterablePartsToStrings(iterable, parts);
+    } finally {
+      assert(identical(toStringVisitingValue.last, iterable));
+      toStringVisitingValue.removeLast();
+    }
+    return (StringBuffer(leftDelimiter)
+          ..writeAll(parts, ", ")
+          ..write(rightDelimiter))
+        .toString();
+  });
+}
+
+@pragma('vm:shared')
+final threadName = ScopedThreadLocal<String>();
+
+main() {
+  Expect.isFalse(toStringVisiting.isBound);
+  Expect.throws(
+    () {
+      IsolateGroup.runSync(() {
+        var l = <Object>["foo", "bar"];
+        l.add(l);
+        l.add("baz");
+        final isBoundBefore = toStringVisiting.isBound;
+        final result = iterableToShortString(l);
+        final isBoundAfter = toStringVisiting.isBound;
+        throw "isBoundBefore: $isBoundBefore, $result, isBoundAfter: $isBoundAfter";
+      });
+    },
+    (e) =>
+        e.toString() ==
+        "isBoundBefore: false, (foo, bar, (...), baz), isBoundAfter: false",
+  );
+  {
+    Expect.isFalse(toStringVisiting.isBound);
+    var l = <Object>["foo", "bar"];
+    l.add(l);
+    l.add("baz");
+    Expect.equals("(foo, bar, (...), baz)", iterableToShortString(l));
+    Expect.isFalse(toStringVisiting.isBound);
+  }
+
+  Expect.equals(
+    "123",
+    IsolateGroup.runSync(() {
+      return threadName.runWith("123", (s) {
+        Expect.isTrue(threadName.isBound);
+        return s;
+      });
+    }),
+  );
+  Expect.throws(
+    () => IsolateGroup.runSync(() => threadName.value),
+    (e) => e is StateError,
+  );
+  Expect.throws(() => threadName.value, (e) => e is StateError);
+  Expect.equals(
+    "name:123",
+    threadName.runWith<String>("123", (String name) {
+      Expect.isTrue(threadName.isBound);
+      return "name:$name";
+    }),
+  );
+  Expect.isFalse(threadName.isBound);
+}
diff --git a/runtime/tests/vm/dart/tsan/array_data_race_test.dart b/runtime/tests/vm/dart/tsan/array_data_race_test.dart
index a9cde1d2..db24255 100644
--- a/runtime/tests/vm/dart/tsan/array_data_race_test.dart
+++ b/runtime/tests/vm/dart/tsan/array_data_race_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.
 
-// VMOptions=--experimental-shared-data
+// VMOptions=--experimental-shared-data --no-osr --no-background-compilation
 
 import "dart:ffi";
 import "dart:io";
@@ -16,28 +16,30 @@
 List<dynamic>? box;
 
 @pragma("vm:never-inline")
-noopt() {}
-
-@pragma("vm:never-inline")
 dataRaceFromMain() {
   final localBox = box!;
-  for (var i = 0; i < 1000000; i++) {
-    localBox[0] += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox[0];
+    usleep(100);
+    localBox[0] = t + 1;
   }
 }
 
 @pragma("vm:never-inline")
 dataRaceFromChild() {
   final localBox = box!;
-  for (var i = 0; i < 1000000; i++) {
-    localBox[0] += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox[0];
+    usleep(100);
+    localBox[0] = t + 1;
   }
 }
 
-child(_) {
+child(replyPort) {
   dataRaceFromChild();
+  replyPort.send(null);
 }
 
 final nativeLib = dlopenPlatformSpecific('ffi_test_functions');
@@ -53,6 +55,13 @@
 @Native<IntPtr Function(Handle, Handle, Handle)>(symbol: 'UnsafeSetSharedTo')
 external int unsafeSetSharedTo(Object library_name, String name, Object value);
 
+// Leaf: we don't want the two threads to synchronize via safepoint.
+final usleep = DynamicLibrary.process()
+    .lookupFunction<Void Function(Long), void Function(int)>(
+      'usleep',
+      isLeaf: true,
+    );
+
 main(List<String> arguments) {
   if (arguments.contains("--testee")) {
     setFfiNativeResolverForTest(getRootLibraryUrl());
@@ -60,8 +69,13 @@
     // Still we want to use it here to test data race detection.
     unsafeSetSharedTo(getRootLibraryUrl(), "box", List<dynamic>.filled(1, 0));
 
-    print(box); // side effect initialization
-    Isolate.spawn(child, null);
+    // Avoid synchronizing via lazy compilation and initialization.
+    usleep(0);
+    box![0] += 0;
+
+    var port = new RawReceivePort();
+    port.handler = (_) => port.close();
+    Isolate.spawn(child, port.sendPort);
     dataRaceFromMain();
     return;
   }
diff --git a/runtime/tests/vm/dart/tsan/field_data_race_no_sanitize_test.dart b/runtime/tests/vm/dart/tsan/field_data_race_no_sanitize_test.dart
index c1238e4..06d7045 100644
--- a/runtime/tests/vm/dart/tsan/field_data_race_no_sanitize_test.dart
+++ b/runtime/tests/vm/dart/tsan/field_data_race_no_sanitize_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.
 
-// VMOptions=--experimental-shared-data
+// VMOptions=--experimental-shared-data --no-osr --no-background-compilation
 
 import "dart:ffi";
 import "dart:io";
@@ -21,28 +21,30 @@
 Box? box;
 
 @pragma("vm:never-inline")
-noopt() {}
-
-@pragma("vm:never-inline")
 dataRaceFromMain() {
   final localBox = box!;
-  for (var i = 0; i < 1000000; i++) {
-    localBox.foo += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox.foo;
+    usleep(100);
+    localBox.foo = t + 1;
   }
 }
 
 @pragma("vm:never-inline")
 dataRaceFromChild() {
   final localBox = box!;
-  for (var i = 0; i < 1000000; i++) {
-    localBox.foo += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox.foo;
+    usleep(100);
+    localBox.foo = t + 1;
   }
 }
 
-child(_) {
+child(replyPort) {
   dataRaceFromChild();
+  replyPort.send(null);
 }
 
 final nativeLib = dlopenPlatformSpecific('ffi_test_functions');
@@ -58,12 +60,25 @@
 @Native<IntPtr Function(Handle, Handle, Handle)>(symbol: 'UnsafeSetSharedTo')
 external int unsafeSetSharedTo(Object library_name, String name, Object value);
 
+// Leaf: we don't want the two threads to synchronize via safepoint.
+final usleep = DynamicLibrary.process()
+    .lookupFunction<Void Function(Long), void Function(int)>(
+      'usleep',
+      isLeaf: true,
+    );
+
 main(List<String> arguments) {
   if (arguments.contains("--testee")) {
     setFfiNativeResolverForTest(getRootLibraryUrl());
     unsafeSetSharedTo(getRootLibraryUrl(), "box", Box());
-    print(box); // side effect initialization
-    Isolate.spawn(child, null);
+
+    // Avoid synchronizing via lazy compilation.
+    usleep(0);
+    box!.foo += 0;
+
+    var port = new RawReceivePort();
+    port.handler = (_) => port.close();
+    Isolate.spawn(child, port.sendPort);
     dataRaceFromMain();
     return;
   }
diff --git a/runtime/tests/vm/dart/tsan/field_data_race_test.dart b/runtime/tests/vm/dart/tsan/field_data_race_test.dart
index 9b7e7a1..0c9a745 100644
--- a/runtime/tests/vm/dart/tsan/field_data_race_test.dart
+++ b/runtime/tests/vm/dart/tsan/field_data_race_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.
 
-// VMOptions=--experimental-shared-data
+// VMOptions=--experimental-shared-data --no-osr --no-background-compilation
 
 import "dart:ffi";
 import "dart:io";
@@ -20,23 +20,24 @@
 Box? box;
 
 @pragma("vm:never-inline")
-noopt() {}
-
-@pragma("vm:never-inline")
 dataRaceFromMain() {
   final localBox = box!;
-  for (var i = 0; i < 1000000; i++) {
-    localBox.foo += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox.foo;
+    usleep(100);
+    localBox.foo = t + 1;
   }
 }
 
 @pragma("vm:never-inline")
 dataRaceFromChild() {
   final localBox = box!;
-  for (var i = 0; i < 1000000; i++) {
-    localBox.foo += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox.foo;
+    usleep(100);
+    localBox.foo = t + 1;
   }
 }
 
@@ -52,8 +53,9 @@
 @pragma("vm:never-inline")
 dataRaceFromChildCallerCaller() => dataRaceFromChildCaller();
 
-child(_) {
+child(replyPort) {
   dataRaceFromChildCallerCaller();
+  replyPort.send(null);
 }
 
 final nativeLib = dlopenPlatformSpecific('ffi_test_functions');
@@ -69,14 +71,27 @@
 @Native<IntPtr Function(Handle, Handle, Handle)>(symbol: 'UnsafeSetSharedTo')
 external int unsafeSetSharedTo(Object library_name, String name, Object value);
 
+// Leaf: we don't want the two threads to synchronize via safepoint.
+final usleep = DynamicLibrary.process()
+    .lookupFunction<Void Function(Long), void Function(int)>(
+      'usleep',
+      isLeaf: true,
+    );
+
 main(List<String> arguments) {
   if (arguments.contains("--testee")) {
     setFfiNativeResolverForTest(getRootLibraryUrl());
     // At this point List is not allowed to be stored in shaded fields.
     // Still we want to use it here to test data race detection.
     unsafeSetSharedTo(getRootLibraryUrl(), "box", Box());
-    print(box); // side effect initialization
-    Isolate.spawn(child, null);
+
+    // Avoid synchronizing via lazy compilation.
+    usleep(0);
+    box!.foo += 0;
+
+    var port = new RawReceivePort();
+    port.handler = (_) => port.close();
+    Isolate.spawn(child, port.sendPort);
     dataRaceFromMainCallerCaller();
     return;
   }
diff --git a/runtime/tests/vm/dart/tsan/typed_data_race_test.dart b/runtime/tests/vm/dart/tsan/typed_data_race_test.dart
index cc174ea..0e39989 100644
--- a/runtime/tests/vm/dart/tsan/typed_data_race_test.dart
+++ b/runtime/tests/vm/dart/tsan/typed_data_race_test.dart
@@ -2,8 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// VMOptions=--experimental-shared-data
+// VMOptions=--experimental-shared-data --no-osr --no-background-compilation
 
+import "dart:ffi";
 import "dart:io";
 import "dart:isolate";
 import "dart:typed_data";
@@ -13,34 +14,48 @@
 Uint8List box = Uint8List(1);
 
 @pragma("vm:never-inline")
-noopt() {}
-
-@pragma("vm:never-inline")
 dataRaceFromMain() {
   final localBox = box;
-  for (var i = 0; i < 10000000; i++) {
-    localBox[0] += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox[0];
+    usleep(100);
+    localBox[0] = t + 1;
   }
 }
 
 @pragma("vm:never-inline")
 dataRaceFromChild() {
   final localBox = box;
-  for (var i = 0; i < 10000000; i++) {
-    localBox[0] += 1;
-    noopt();
+  for (var i = 0; i < 50000; i++) {
+    usleep(100);
+    var t = localBox[0];
+    usleep(100);
+    localBox[0] = t + 1;
   }
 }
 
-child(_) {
+child(replyPort) {
   dataRaceFromChild();
+  replyPort.send(null);
 }
 
+// Leaf: we don't want the two threads to synchronize via safepoint.
+final usleep = DynamicLibrary.process()
+    .lookupFunction<Void Function(Long), void Function(int)>(
+      'usleep',
+      isLeaf: true,
+    );
+
 main(List<String> arguments) {
   if (arguments.contains("--testee")) {
-    print(box); // side effect initialization
-    Isolate.spawn(child, null);
+    // Avoid synchronizing via lazy compilation and initialization.
+    usleep(0);
+    box![0] += 0;
+
+    var port = new RawReceivePort();
+    port.handler = (_) => port.close();
+    Isolate.spawn(child, port.sendPort);
     dataRaceFromMain();
     return;
   }
diff --git a/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart b/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
index 9ec3370..797dc37 100644
--- a/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
+++ b/runtime/tests/vm/dart/use_dwarf_stack_traces_flag_test.dart
@@ -19,6 +19,16 @@
 import 'use_dwarf_stack_traces_flag_helper.dart';
 
 Future<void> main() async {
+  bool hasDsymutil = true;
+  if (isSimulator) {
+    // Output of Mach-O relocatable objects isn't supported for most
+    // simulated architectures, so don't run that specific test.
+    hasDsymutil = false;
+  } else if (Platform.isWindows) {
+    // Currently dsymutil isn't available in this case, so don't run
+    // the corresponding test (but do in the future if it becomes available).
+    hasDsymutil = llvmTool('dsymutil') != null;
+  }
   await runTests(
     'dwarf-flag-test',
     path.join(
@@ -33,6 +43,7 @@
     [
       runElf,
       runMachODylib,
+      if (hasDsymutil) runMachODsym,
       // Don't run assembly on Windows since DLLs don't contain DWARF.
       if (!Platform.isWindows) runAssembly,
     ],
@@ -311,6 +322,60 @@
   );
 }
 
+class DwarfDsymState extends DwarfState<Dwarf> {
+  DwarfDsymState(
+    super.output,
+    super.outputWithOppositeFlag,
+    super.snapshot,
+    super.debugInfo,
+  );
+
+  @override
+  String get description => 'dSYM';
+
+  @override
+  Future<void> check(Trace trace, Dwarf dwarf) =>
+      compareTraces(trace, output, outputWithOppositeFlag, dwarf);
+}
+
+Future<DwarfDsymState> runMachODsym(String tempDir, String scriptDill) async {
+  final dsymutil = llvmTool('dsymutil', verbose: true)!;
+
+  print("Generating Mach-O snapshots");
+  final snapshotPath = path.join(tempDir, 'dwarf_dsym.dylib');
+  final objectPath = path.join(tempDir, 'dwarf_dsym.o');
+  final debugInfoPath = path.join(tempDir, 'debug_info_dsym.so');
+  await run(genSnapshot, <String>[
+    '--dwarf-stack-traces-mode',
+    '--save-debugging-info=$debugInfoPath',
+    '--snapshot-kind=app-aot-macho-dylib',
+    '--macho=$snapshotPath',
+    '--macho-object=$objectPath',
+    scriptDill,
+  ]);
+
+  print("Generating dSYM");
+  final dsymPath = path.join(tempDir, 'dwarf_dsym.dSYM');
+  await run(dsymutil, ['-o', dsymPath, snapshotPath]);
+
+  final dsym = Dwarf.fromFile(dsymPath)!;
+  final debugInfo = Dwarf.fromFile(debugInfoPath)!;
+
+  // Run the resulting Dwarf-AOT compiled script.
+  print("Generating Mach-O snapshot outputs");
+  final output = await runTestProgram(dartPrecompiledRuntime, <String>[
+    '--dwarf-stack-traces-mode',
+    snapshotPath,
+    scriptDill,
+  ]);
+  final outputWithOppositeFlag = await runTestProgram(
+    dartPrecompiledRuntime,
+    <String>['--no-dwarf-stack-traces-mode', snapshotPath, scriptDill],
+  );
+
+  return DwarfDsymState(output, outputWithOppositeFlag, dsym, debugInfo);
+}
+
 Future<void> compareTraces(
   List<String> nonDwarfTrace,
   DwarfTestOutput output1,
diff --git a/runtime/tests/vm/dart/use_flag_test_helper.dart b/runtime/tests/vm/dart/use_flag_test_helper.dart
index 8853977..aea773d 100644
--- a/runtime/tests/vm/dart/use_flag_test_helper.dart
+++ b/runtime/tests/vm/dart/use_flag_test_helper.dart
@@ -39,7 +39,8 @@
   'gen_kernel' + (Platform.isWindows ? '.bat' : ''),
 );
 final genKernelDart = path.join('pkg', 'vm', 'bin', 'gen_kernel.dart');
-final _genSnapshotBase = 'gen_snapshot' + (Platform.isWindows ? '.exe' : '');
+final exeSuffix = Platform.isWindows ? '.exe' : '';
+final _genSnapshotBase = 'gen_snapshot$exeSuffix';
 // Lazily initialize `genSnapshot` so that tests that don't use it on platforms
 // that don't have a `gen_snapshot` don't fail.
 late final genSnapshot = () {
@@ -58,22 +59,19 @@
   }
   throw 'Could not find gen_snapshot for build directory $buildDir';
 }();
-final dart = path.join(buildDir, 'dartvm' + (Platform.isWindows ? '.exe' : ''));
-final dartPrecompiledRuntime = path.join(
-  buildDir,
-  'dartaotruntime' + (Platform.isWindows ? '.exe' : ''),
-);
+final dart = path.join(buildDir, 'dartvm$exeSuffix');
+final dartPrecompiledRuntime = path.join(buildDir, 'dartaotruntime$exeSuffix');
 final checkedInDartVM = path.join(
   'tools',
   'sdks',
   'dart-sdk',
   'bin',
-  'dart' + (Platform.isWindows ? '.exe' : ''),
+  'dart$exeSuffix',
 );
 String? llvmTool(String name, {bool verbose = false}) {
   final clangBuildTools = clangBuildToolsDir;
   if (clangBuildTools != null) {
-    final toolPath = path.join(clangBuildTools, name);
+    final toolPath = path.join(clangBuildTools, '$name$exeSuffix');
     if (File(toolPath).existsSync()) {
       return toolPath;
     }
@@ -91,30 +89,18 @@
 final isSimulator = path.basename(buildDir).contains('SIM');
 
 String? get clangBuildToolsDir {
-  String archDir;
-  switch (Abi.current()) {
-    case Abi.linuxX64:
-      archDir = 'linux-x64';
-      break;
-    case Abi.linuxArm64:
-      archDir = 'linux-arm64';
-      break;
-    case Abi.macosX64:
-      archDir = 'mac-x64';
-      break;
-    case Abi.macosArm64:
-      archDir = 'mac-arm64';
-      break;
-    case Abi.windowsX64:
-    case Abi.windowsArm64: // We don't have a proper host win-arm64 toolchain.
-      archDir = 'win-x64';
-      break;
-    default:
-      return null;
+  for (var archDir in [
+    'mac-arm64',
+    'mac-x64',
+    'win-arm64',
+    'win-x64',
+    'linux-arm64',
+    'linux-x64',
+  ]) {
+    var clangDir = path.join(sdkDir, 'buildtools', archDir, 'clang', 'bin');
+    if (Directory(clangDir).existsSync()) return clangDir;
   }
-  var clangDir = path.join(sdkDir, 'buildtools', archDir, 'clang', 'bin');
-  print(clangDir);
-  return Directory(clangDir).existsSync() ? clangDir : null;
+  return null;
 }
 
 Future<void> assembleSnapshot(
@@ -133,7 +119,7 @@
 
   final clangBuildTools = clangBuildToolsDir;
   if (clangBuildTools != null) {
-    cc = path.join(clangBuildTools, Platform.isWindows ? 'clang.exe' : 'clang');
+    cc = path.join(clangBuildTools, 'clang$exeSuffix');
   } else {
     throw 'Cannot assemble for ${path.basename(buildDir)} '
         'without //buildtools on ${Platform.operatingSystem}';
@@ -141,15 +127,13 @@
 
   if (Platform.isMacOS) {
     shared = '-dynamiclib';
-    // Tell Mac linker to give up generating eh_frame from dwarf.
-    ldFlags.add('-Wl,-no_compact_unwind');
     if (buildDir.endsWith('ARM64')) {
       ccFlags.add('--target=arm64-apple-darwin');
     } else {
       ccFlags.add('--target=x86_64-apple-darwin');
     }
   } else if (Platform.isLinux) {
-    if (buildDir.endsWith('ARM')) {
+    if (buildDir.endsWith('ARM') || buildDir.endsWith('SIMARM_X64')) {
       ccFlags.add('--target=armv7-linux-gnueabihf');
     } else if (buildDir.endsWith('ARM64')) {
       ccFlags.add('--target=aarch64-linux-gnu');
@@ -188,10 +172,7 @@
 
   final clangBuildTools = clangBuildToolsDir;
   if (clangBuildTools != null) {
-    strip = path.join(
-      clangBuildTools,
-      Platform.isWindows ? 'llvm-strip.exe' : 'llvm-strip',
-    );
+    strip = path.join(clangBuildTools, 'llvm-strip$exeSuffix');
   } else {
     throw 'Cannot strip ELF files for ${path.basename(buildDir)} '
         'without //buildtools on ${Platform.operatingSystem}';
diff --git a/runtime/tests/vm/dart/use_macho_reduce_padding_flag_test.dart b/runtime/tests/vm/dart/use_macho_reduce_padding_flag_test.dart
new file mode 100644
index 0000000..0dde1fc
--- /dev/null
+++ b/runtime/tests/vm/dart/use_macho_reduce_padding_flag_test.dart
@@ -0,0 +1,192 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 using the --macho-reduce-padding flag actually
+// reduces the padding used for segments and text/const sections in Mach-O
+// outputs.
+
+import "dart:async";
+import "dart:io";
+
+import 'package:native_stack_traces/src/macho.dart' show MachO, SegmentCommand;
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+
+import 'use_flag_test_helper.dart';
+
+Future<void> main() async {
+  if (!isAOTRuntime) {
+    return; // Running in JIT: AOT binaries not available.
+  }
+
+  if (Platform.isAndroid) {
+    return; // SDK tree and dart_bootstrap not available on the test device.
+  }
+
+  if (isSimulator) {
+    // Output of Mach-O relocatable objects isn't supported for most
+    // simulated architectures, so don't run the test.
+    return;
+  }
+
+  if (Platform.isWindows) {
+    // Currently dsymutil isn't available in this case (but if it is
+    // in the future, go ahead and run them).
+    if (llvmTool('dsymutil') == null) return;
+  }
+
+  // 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(dartPrecompiledRuntime)) {
+    throw "Cannot run test as $dartPrecompiledRuntime not available";
+  }
+  if (!File(platformDill).existsSync()) {
+    throw "Cannot run test as $platformDill does not exist";
+  }
+
+  await withTempDir('macho-reduce-padding', (String tempDir) async {
+    // We have to use the program in its original location so it can use
+    // the dart:_internal library (as opposed to adding it as an OtherResources
+    // option to the test).
+    final scriptPath = path.join(
+      sdkDir,
+      'runtime',
+      'tests',
+      'vm',
+      'dart',
+      'use_dwarf_stack_traces_flag_program.dart',
+    );
+    final scriptDill = path.join(tempDir, 'flag_program.dill');
+
+    // Compile script to Kernel IR.
+    await run(genKernel, <String>[
+      '--aot',
+      '--platform=$platformDill',
+      '-o',
+      scriptDill,
+      scriptPath,
+    ]);
+
+    final defaultPaddingTestCase = await createTestCase(
+      tempDir,
+      scriptDill,
+      'default_padding',
+      14,
+      const [],
+    );
+
+    final reducedPaddingTestCase = await createTestCase(
+      tempDir,
+      scriptDill,
+      'reduced_padding',
+      6,
+      const ['--macho-reduce-padding'],
+    );
+
+    test(
+      "Testing default MachO padding",
+      checkTestCase(defaultPaddingTestCase),
+    );
+
+    test(
+      "Testing reduced MachO padding",
+      checkTestCase(reducedPaddingTestCase),
+    );
+  });
+}
+
+class TestCase {
+  int segmentAlignment;
+  MachO snapshot;
+  MachO debugInfo;
+  MachO relocatableObject;
+
+  TestCase(
+    this.segmentAlignment,
+    this.snapshot,
+    this.debugInfo,
+    this.relocatableObject,
+  );
+}
+
+Future<TestCase> createTestCase(
+  String tempDir,
+  String scriptDill,
+  String prefix,
+  int alignment,
+  List<String> extraArgs,
+) async {
+  final dsymutil = llvmTool('dsymutil', verbose: true)!;
+
+  print("Generating Mach-O snapshots with segment alignment ${1 << alignment}");
+  final snapshotPath = path.join(tempDir, '$prefix.dylib');
+  final objectPath = path.join(tempDir, '$prefix.o');
+  final debugInfoPath = path.join(tempDir, 'debug_info_$prefix.so');
+  await run(genSnapshot, <String>[
+    '--dwarf-stack-traces-mode',
+    '--save-debugging-info=$debugInfoPath',
+    '--snapshot-kind=app-aot-macho-dylib',
+    '--macho=$snapshotPath',
+    '--macho-object=$objectPath',
+    ...extraArgs,
+    scriptDill,
+  ]);
+
+  // Make sure dsymutil doesn't have any issue with the snapshot or
+  // relocatable object.
+  print("Generating dSYM for segment alignment ${1 << alignment}");
+  final dsymPath = path.join(tempDir, '$prefix.dSYM');
+  await run(dsymutil, ['-o', dsymPath, snapshotPath]);
+
+  return TestCase(
+    alignment,
+    MachO.fromFile(snapshotPath)!,
+    MachO.fromFile(debugInfoPath)!,
+    MachO.fromFile(objectPath)!,
+  );
+}
+
+int align(int n, int alignLog2) {
+  final alignment = 1 << alignLog2;
+  final extra = n % alignment;
+  final padding = (extra == 0) ? 0 : (alignment - extra);
+  return n + padding;
+}
+
+void Function() checkTestCase(TestCase testCase) => () {
+  for (final macho in [
+    testCase.snapshot,
+    testCase.debugInfo,
+    testCase.relocatableObject,
+  ]) {
+    for (final segment in macho.commandsWhereType<SegmentCommand>()) {
+      print(segment);
+      // Skip the linkedit segment, which isn't padded to a specific alignment.
+      if (segment.segname == '__LINKEDIT') continue;
+      int contentsSize = 0;
+      if (segment.segname == '__TEXT') {
+        // The header and load commands are contained within the initial (text)
+        // segment for non-relocatable objects.
+        contentsSize += macho.header.size + macho.header.sizeofcmds;
+      }
+      for (final section in segment.sectionsInOrder) {
+        expect(
+          section.align,
+          lessThanOrEqualTo(testCase.segmentAlignment),
+          reason:
+              'Section "${section.segname}", "${section.sectname}" has '
+              'an alignment of ${section.align} > ${testCase.segmentAlignment}',
+        );
+        contentsSize = align(contentsSize, section.align);
+        contentsSize += section.size;
+      }
+      expect(
+        segment.filesize,
+        lessThanOrEqualTo(align(contentsSize, testCase.segmentAlignment)),
+      );
+    }
+  }
+};
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 65a77db..fea00cb 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -251,6 +251,7 @@
 dart/reachability_test: SkipByDesign # Test takes too long on the simulator
 dart/regress_41971_test: SkipByDesign # https://dartbug.com/37299 dart:ffi is not supported on simulator
 dart/regress_b_216834909_test: SkipByDesign # No FFI on simulators
+dart/scoped_thread_local_test: SkipByDesign # No FFI on simulators
 dart/sdk_hash_test: SkipSlow # gen_kernel is slow to run on simarm
 dart/sendport_api_test: SkipByDesign # No FFI on simulators
 dart/shared_collect_all_garbage_test: SkipByDesign # No FFI on simulators
@@ -333,6 +334,7 @@
 dart/regress_52703_test: SkipSlow
 dart/use_dwarf_stack_traces_flag_deferred_test: SkipSlow
 dart/use_dwarf_stack_traces_flag_test: SkipSlow
+dart/use_macho_reduce_padding_flag_test: SkipSlow
 
 [ $compiler == dartkp && $simulator ]
 dart/awaiter_stacks/stream_methods_test/1: Pass, Slow
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index a03b9db..f3320c5 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -4,6 +4,7 @@
 
 import("//build_overrides/build.gni")
 import("../../build/executable_suffix.gni")
+import("../../sdk/lib/_vm/vm_sources.gni")
 import("../../sdk/lib/async/async_sources.gni")
 import("../../sdk/lib/collection/collection_sources.gni")
 import("../../sdk/lib/concurrent/concurrent_sources.gni")
@@ -176,6 +177,9 @@
     args = [ "dart:core" ]
     args += [
       "-Ddart.vm.product=$is_product_flag",
+      "-Ddart.vm.asan=$is_asan",
+      "-Ddart.vm.msan=$is_msan",
+      "-Ddart.vm.tsan=$is_tsan",
       "-Ddart.isVM=true",
     ]
     if (defined(invoker.exclude_source) && invoker.exclude_source) {
diff --git a/runtime/vm/bit_vector.cc b/runtime/vm/bit_vector.cc
index 49dd496..e905482 100644
--- a/runtime/vm/bit_vector.cc
+++ b/runtime/vm/bit_vector.cc
@@ -49,6 +49,11 @@
   return true;
 }
 
+void BitVector::CopyFrom(const BitVector* from) {
+  ASSERT(data_length_ == from->data_length_);
+  memmove(data_, from->data_, data_length_ * sizeof(uword));
+}
+
 bool BitVector::AddAll(const BitVector* from) {
   ASSERT(data_length_ == from->data_length_);
   bool changed = false;
diff --git a/runtime/vm/bit_vector.h b/runtime/vm/bit_vector.h
index a6a61f7..ab8e624 100644
--- a/runtime/vm/bit_vector.h
+++ b/runtime/vm/bit_vector.h
@@ -51,10 +51,7 @@
     Clear();
   }
 
-  void CopyFrom(const BitVector* other) {
-    Clear();
-    AddAll(other);
-  }
+  void CopyFrom(const BitVector* other);
 
   static intptr_t SizeFor(intptr_t length) {
     return 1 + ((length - 1) / kBitsPerWord);
diff --git a/runtime/vm/bootstrap_natives.cc b/runtime/vm/bootstrap_natives.cc
index cf2184d..75317eb 100644
--- a/runtime/vm/bootstrap_natives.cc
+++ b/runtime/vm/bootstrap_natives.cc
@@ -141,6 +141,11 @@
   library.set_native_entry_symbol_resolver(symbol_resolver);
   library.set_ffi_native_resolver(ffi_native_resolver);
 
+  library = Library::VMLibrary();
+  ASSERT(!library.IsNull());
+  library.set_native_entry_resolver(resolver);
+  library.set_native_entry_symbol_resolver(symbol_resolver);
+
   library = Library::IsolateLibrary();
   ASSERT(!library.IsNull());
   library.set_native_entry_resolver(resolver);
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 0ee2739..30c181d 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -281,6 +281,11 @@
   V(Internal_allocateObjectInstructionsEnd, 0)                                 \
   V(InvocationMirror_unpackTypeArguments, 2)                                   \
   V(NoSuchMethodError_existingMethodSignature, 3)                              \
+  V(ScopedThreadLocal_allocateId, 0)                                           \
+  V(ScopedThreadLocal_clearValue, 1)                                           \
+  V(ScopedThreadLocal_getValue, 1)                                             \
+  V(ScopedThreadLocal_hasValue, 1)                                             \
+  V(ScopedThreadLocal_setValue, 2)                                             \
   V(Uri_isWindowsPlatform, 0)                                                  \
   V(UserTag_new, 2)                                                            \
   V(UserTag_label, 1)                                                          \
diff --git a/runtime/vm/bytecode_reader.cc b/runtime/vm/bytecode_reader.cc
index b2905c7..bb50f1e 100644
--- a/runtime/vm/bytecode_reader.cc
+++ b/runtime/vm/bytecode_reader.cc
@@ -334,7 +334,8 @@
   auto& function = Function::Handle(Z);
   for (intptr_t i = 0; i < len; i++) {
     function ^= ReadObject();
-    ASSERT(function.IsConstructor() && function.is_const());
+    // Const constructors from extension types can be desugared into procedures.
+    ASSERT(function.IsFunction() && function.is_const());
     constant_coverage.SetAt(i, function);
   }
   script.set_collected_constant_coverage(constant_coverage);
@@ -1122,6 +1123,13 @@
             cls.ptr() == scoped_function_class_.ptr()) {
           return scoped_function_.ptr();
         }
+        // If this is a reference to the expression evaluation function, then
+        // reading the class has substituted in the real class.
+        if (name.ptr() == Symbols::DebugProcedureName().ptr() &&
+            cls.ptr() == thread_->bytecode_loader()
+                             ->GetExpressionEvaluationRealClass()) {
+          return thread_->bytecode_loader()->GetExpressionEvaluationFunction();
+        }
         FunctionPtr function = Function::null();
         if ((flags & kFlagIsConstructor) != 0) {
           if (cls.EnsureIsAllocateFinalized(thread_) == Error::null()) {
@@ -1781,6 +1789,7 @@
   const int kHasAnnotationsFlag = 1 << 14;
   const int kHasPragmaFlag = 1 << 15;
   const int kHasCustomScriptFlag = 1 << 16;
+  const int kIsExtensionTypeMemberFlag = 1 << 17;
 
   const int num_fields = reader_.ReadListLength();
   if ((num_fields == 0) && !cls.is_enum_class()) {
@@ -1806,6 +1815,8 @@
         (flags & kHasNontrivialInitializerFlag) != 0;
     const bool has_pragma = (flags & kHasPragmaFlag) != 0;
     const bool is_extension_member = (flags & kIsExtensionMemberFlag) != 0;
+    const bool is_extension_type_member =
+        (flags & kIsExtensionTypeMemberFlag) != 0;
     const bool has_initializer = (flags & kHasInitializerFlag) != 0;
 
     name ^= ReadObject();
@@ -1835,6 +1846,7 @@
     field.set_is_generic_covariant_impl((flags & kIsCovariantByClassFlag) != 0);
     field.set_has_nontrivial_initializer(has_nontrivial_initializer);
     field.set_is_extension_member(is_extension_member);
+    field.set_is_extension_type_member(is_extension_type_member);
     field.set_has_initializer(has_initializer);
 
     if (!has_nontrivial_initializer) {
@@ -1880,6 +1892,7 @@
       function.set_is_debuggable(false);
       function.set_accessor_field(field);
       function.set_is_extension_member(is_extension_member);
+      function.set_is_extension_type_member(is_extension_type_member);
       SetupFieldAccessorFunction(cls, function, type);
       if (is_static) {
         function.AttachBytecode(Object::implicit_static_getter_bytecode());
@@ -1906,6 +1919,7 @@
       function.set_is_debuggable(false);
       function.set_accessor_field(field);
       function.set_is_extension_member(is_extension_member);
+      function.set_is_extension_type_member(is_extension_type_member);
       SetupFieldAccessorFunction(cls, function, type);
       if (is_static) {
         function.AttachBytecode(Object::implicit_static_setter_bytecode());
@@ -2031,6 +2045,7 @@
   const int kHasAnnotationsFlag = 1 << 21;
   const int kHasPragmaFlag = 1 << 22;
   const int kHasCustomScriptFlag = 1 << 23;
+  const int kIsExtensionTypeMemberFlag = 1 << 24;
 
   const intptr_t num_functions = reader_.ReadListLength();
   ASSERT(function_index_ + num_functions == functions_->Length());
@@ -2056,6 +2071,8 @@
     const bool is_native = (flags & kIsNativeFlag) != 0;
     const bool has_pragma = (flags & kHasPragmaFlag) != 0;
     const bool is_extension_member = (flags & kIsExtensionMemberFlag) != 0;
+    const bool is_extension_type_member =
+        (flags & kIsExtensionTypeMemberFlag) != 0;
 
     name ^= ReadObject();
 
@@ -2099,12 +2116,20 @@
     FunctionScope function_scope(this, function, name, cls);
     FunctionTypeScope function_type_scope(this, signature);
 
+    // Set the expression evaluation function now so that references to it
+    // can be appropriately substituted as needed when reading objects below.
+    if (is_expression_evaluation) {
+      ASSERT(!function.is_abstract());
+      thread_->bytecode_loader()->SetExpressionEvaluationFunction(function);
+    }
+
     function.set_has_pragma(has_pragma);
     NOT_IN_PRECOMPILED(function.set_end_token_pos(end_position));
     function.set_is_synthetic((flags & kIsNoSuchMethodForwarderFlag) != 0);
     function.set_is_reflectable((flags & kIsReflectableFlag) != 0);
     function.set_is_debuggable((flags & kIsDebuggableFlag) != 0);
     function.set_is_extension_member(is_extension_member);
+    function.set_is_extension_type_member(is_extension_type_member);
 
     if ((flags & kIsSyncStarFlag) != 0) {
       function.set_modifier(UntaggedFunction::kSyncGen);
@@ -2211,17 +2236,7 @@
     }
 
     if (is_expression_evaluation) {
-      ASSERT(!function.is_abstract());
-      BytecodeLoader* loader = thread_->bytecode_loader();
-      ASSERT(loader != nullptr);
-      loader->SetExpressionEvaluationFunction(function);
-      // Read bytecode of expression evaluation function within FunctionScope.
-      // Replace class of the function in scope as we're going to look for
-      // expression evaluation function in a real class.
-      if (!cls.IsTopLevel()) {
-        scoped_function_class_ = loader->GetExpressionEvaluationRealClass();
-      }
-      ReadCode(function, loader->GetOffset(function));
+      ReadCode(function, thread_->bytecode_loader()->GetOffset(function));
     }
 
     functions_->SetAt(function_index_++, function);
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 0f815dc..cce91ac 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -527,11 +527,6 @@
   Emit(encoding);
 }
 
-void Assembler::dmb() {
-  // Emit a `dmb ish` instruction.
-  Emit(kDataMemoryBarrier);
-}
-
 static int32_t BitFieldExtractEncoding(bool sign_extend,
                                        Register rd,
                                        Register rn,
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index b526c7d..7d2bcf4 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -438,12 +438,12 @@
                    const Address& address,
                    OperandSize size = kFourBytes) override {
     Load(dst, address, size);
-    dmb();
+    dmb_ish();
   }
   void StoreRelease(Register src,
                     const Address& address,
                     OperandSize size = kFourBytes) override {
-    dmb();
+    dmb_ish();
     Store(src, address, size);
   }
 
@@ -469,6 +469,8 @@
   // Debugging and bringup support.
   void Breakpoint() override { bkpt(0); }
 
+  void StoreStoreFence() override { dmb_ishst(); }
+
   // Data-processing instructions.
   void and_(Register rd, Register rn, Operand o, Condition cond = AL);
   void ands(Register rd, Register rn, Operand o, Condition cond = AL);
@@ -601,7 +603,8 @@
   void ldrex(Register rd, Register rn, Condition cond = AL);
   void strex(Register rd, Register rt, Register rn, Condition cond = AL);
 
-  void dmb();
+  void dmb_ish() { Emit(kDMB_ISH); }
+  void dmb_ishst() { Emit(kDMB_ISHST); }
 
   // Media instructions.
   void sbfx(Register rd,
@@ -1041,13 +1044,13 @@
   void InitializeHeader(Register tags, Register object) {
     str(tags, FieldAddress(object, target::Object::tags_offset()));
 #if defined(TARGET_HAS_FAST_WRITE_WRITE_FENCE)
-    dmb();
+    StoreStoreFence();
 #endif
   }
   void InitializeHeaderUntagged(Register tags, Register object) {
     str(tags, Address(object, target::Object::tags_offset()));
 #if defined(TARGET_HAS_FAST_WRITE_WRITE_FENCE)
-    dmb();
+    StoreStoreFence();
 #endif
   }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index a12aa1d..f921580 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -564,6 +564,8 @@
   // Debugging and bringup support.
   void Breakpoint() override { brk(0); }
 
+  void StoreStoreFence() override { dmb_ishst(); }
+
   void SetPrologueOffset() {
     if (prologue_offset_ == -1) {
       prologue_offset_ = CodeSize();
@@ -1242,7 +1244,8 @@
   // Breakpoint.
   void brk(uint16_t imm) { EmitExceptionGenOp(BRK, imm); }
 
-  void dmb() { Emit(kDataMemoryBarrier); }
+  void dmb_ish() { Emit(kDMB_ISH); }
+  void dmb_ishst() { Emit(kDMB_ISHST); }
 
   // Double floating point.
   bool fmovdi(VRegister vd, double immd) {
@@ -1963,13 +1966,13 @@
   void InitializeHeader(Register header, Register object) {
     str(header, FieldAddress(object, target::Object::tags_offset()));
 #if defined(TARGET_HAS_FAST_WRITE_WRITE_FENCE)
-    dmb();
+    StoreStoreFence();
 #endif
   }
   void InitializeHeaderUntagged(Register header, Register object) {
     str(header, Address(object, target::Object::tags_offset()));
 #if defined(TARGET_HAS_FAST_WRITE_WRITE_FENCE)
-    dmb();
+    StoreStoreFence();
 #endif
   }
 
@@ -2525,7 +2528,7 @@
       return static_cast<Condition>((instr & kCondMask) >> kCondShift);
     }
     ASSERT(IsCompareAndBranch(instr));
-    return (instr & B24) ? EQ : NE;  // cbz : cbnz
+    return (instr & B24) != 0 ? EQ : NE;  // cbz : cbnz
   }
 
   int32_t EncodeImm19BranchCondition(Condition cond, int32_t instr) {
@@ -2539,7 +2542,7 @@
 
   Condition DecodeImm14BranchCondition(int32_t instr) {
     ASSERT(IsTestAndBranch(instr));
-    return (instr & B24) ? EQ : NE;  // tbz : tbnz
+    return (instr & B24) != 0 ? EQ : NE;  // tbz : tbnz
   }
 
   int32_t EncodeImm14BranchCondition(Condition cond, int32_t instr) {
diff --git a/runtime/vm/compiler/assembler/assembler_arm64_test.cc b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
index 94dca53..a499691 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64_test.cc
@@ -412,13 +412,13 @@
   __ LoadImmediate(R3, 0x7FFFFFFFFFFFFFFF);
   __ adds(IP0, R2, Operand(R1));  // c_out = 1.
   __ adcs(IP0, R3, R0);           // c_in = 1, c_out = 1, v = 1.
-  __ csinc(R0, R0, R0, VS);       // R0 = v ? R0 : R0 + 1.
+  __ cset(R0, VS);                // R0 = v ? 1 : 0
   __ ret();
 }
 
 ASSEMBLER_TEST_RUN(Overflow, test) {
   typedef int64_t (*Int64Return)() DART_UNUSED;
-  EXPECT_EQ(0, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+  EXPECT_EQ(1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
       "movz r0, #0x0\n"
       "movz r1, #0x1\n"
@@ -426,7 +426,7 @@
       "mov r3, 0x7fffffffffffffff\n"
       "adds tmp, r2, r1\n"
       "adcs tmp, r3, r0\n"
-      "csinc r0, r0, r0, vs\n"
+      "cset r0, vs\n"
       "ret\n");
 }
 
@@ -481,13 +481,13 @@
   __ LoadImmediate(R3, 0x7FFFFFFF);
   __ addsw(IP0, R2, Operand(R1));  // c_out = 1.
   __ adcsw(IP0, R3, R0);           // c_in = 1, c_out = 1, v = 1.
-  __ csinc(R0, R0, R0, VS);        // R0 = v ? R0 : R0 + 1.
+  __ cset(R0, VS);                 // R0 = v ? 1 : 0
   __ ret();
 }
 
 ASSEMBLER_TEST_RUN(WordOverflow, test) {
   typedef int64_t (*Int64Return)() DART_UNUSED;
-  EXPECT_EQ(0, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
+  EXPECT_EQ(1, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
   EXPECT_DISASSEMBLY(
       "movz r0, #0x0\n"
       "movz r1, #0x1\n"
@@ -495,7 +495,7 @@
       "mov r3, 0x7fffffff\n"
       "addws tmp, r2, r1\n"
       "adcws tmp, r3, r0\n"
-      "csinc r0, r0, r0, vs\n"
+      "cset r0, vs\n"
       "ret\n");
 }
 
@@ -4165,7 +4165,7 @@
       "movz r1, #0x2a\n"
       "movz r2, #0x4d2\n"
       "cmp r1, r2\n"
-      "cinc r0, r2, ge\n"
+      "csinc r0, r2, r1, lt\n"
       "ret\n");
 }
 
@@ -4245,6 +4245,31 @@
       "ret\n");
 }
 
+ASSEMBLER_TEST_GENERATE(CSelAliases, assembler) {
+  __ csel(R0, R1, R2, LT);
+  __ cset(R0, LT);
+  __ csetm(R0, LT);
+  __ csinc(R0, R1, R2, LT);
+  __ cinc(R0, R1, LT);
+  __ csinv(R0, R1, R2, LT);
+  __ cinv(R0, R1, LT);
+  __ csneg(R0, R1, R2, LT);
+  __ cneg(R0, R1, LT);
+}
+
+ASSEMBLER_TEST_RUN(CSelAliases, test) {
+  EXPECT_DISASSEMBLY(
+      "csel r0, r1, r2, lt\n"
+      "cset r0, lt\n"
+      "csetm r0, lt\n"
+      "csinc r0, r1, r2, lt\n"
+      "cinc r0, r1, lt\n"
+      "csinv r0, r1, r2, lt\n"
+      "cinv r0, r1, lt\n"
+      "csneg r0, r1, r2, lt\n"
+      "cneg r0, r1, lt\n");
+}
+
 ASSEMBLER_TEST_GENERATE(Ubfx, assembler) {
   __ LoadImmediate(R1, 0x819);
   __ LoadImmediate(R0, 0x5a5a5a5a);  // Overwritten.
diff --git a/runtime/vm/compiler/assembler/assembler_base.h b/runtime/vm/compiler/assembler/assembler_base.h
index ce77b10..5962840 100644
--- a/runtime/vm/compiler/assembler/assembler_base.h
+++ b/runtime/vm/compiler/assembler/assembler_base.h
@@ -630,6 +630,8 @@
 
   virtual void Breakpoint() = 0;
 
+  virtual void StoreStoreFence() = 0;
+
   virtual void SmiTag(Register r) = 0;
 
   virtual void Bind(Label* label) = 0;
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 177f5e0..823bb16 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -1199,6 +1199,8 @@
   // Debugging and bringup support.
   void Breakpoint() override { int3(); }
 
+  void StoreStoreFence() override {}
+
   // Check if the given value is an integer value that can be directly
   // embedded into the code without additional XORing with jit_cookie.
   // We consider 16-bit integers, powers of two and corresponding masks
diff --git a/runtime/vm/compiler/assembler/assembler_ia32_test.cc b/runtime/vm/compiler/assembler/assembler_ia32_test.cc
index 27dd563..8c97ffe 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32_test.cc
@@ -5092,7 +5092,8 @@
   }
 }
 
-static const Register kRegRegImmTempReg = EBX;
+// Use a volatile register so we don't have to save it.
+static const Register kRegRegImmTempReg = ECX;
 
 void CheckMovesInputToReturnOnly(Expect& expect,
                                  AssemblerTest* test,
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc
index c40f912..24fbb22 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv.cc
@@ -573,7 +573,7 @@
 
 void MicroAssembler::ecall() {
   ASSERT(Supports(RV_I));
-  EmitIType(ECALL, ZR, F3_0, ZR, SYSTEM);
+  EmitIType(ECALL, ZR, PRIV, ZR, SYSTEM);
 }
 void MicroAssembler::ebreak() {
   ASSERT(Supports(RV_I));
@@ -581,11 +581,11 @@
     c_ebreak();
     return;
   }
-  EmitIType(EBREAK, ZR, F3_0, ZR, SYSTEM);
+  EmitIType(EBREAK, ZR, PRIV, ZR, SYSTEM);
 }
 void MicroAssembler::SimulatorPrintObject(Register rs1) {
   ASSERT(Supports(RV_I));
-  EmitIType(ECALL, rs1, F3_0, ZR, SYSTEM);
+  EmitIType(ECALL, rs1, PRIV, ZR, SYSTEM);
 }
 
 void MicroAssembler::csrrw(Register rd, uint32_t csr, Register rs1) {
@@ -1969,6 +1969,143 @@
   EmitRType(FCMPD, rs2, rs1, FLEQ, rd, OPFP);
 }
 
+void MicroAssembler::mopr(intptr_t n, Register rd, Register rs1) {
+  ASSERT(Supports(RV_Zimop));
+  Emit32(EncodeMoprn(n) | EncodeFunct12(MOP_R) | EncodeRs1(rs1) |
+         EncodeFunct3(MOP) | EncodeRd(rd) | EncodeOpcode(SYSTEM));
+}
+
+void MicroAssembler::moprr(intptr_t n,
+                           Register rd,
+                           Register rs1,
+                           Register rs2) {
+  ASSERT(Supports(RV_Zimop));
+  Emit32(EncodeMoprrn(n) | EncodeFunct7(MOP_RR) | EncodeRs2(rs2) |
+         EncodeRs1(rs1) | EncodeFunct3(MOP) | EncodeRd(rd) |
+         EncodeOpcode(SYSTEM));
+}
+
+void MicroAssembler::cmop(intptr_t n) {
+  ASSERT(Supports(RV_Zcmop));
+  ASSERT(Utils::IsUint(4, n) && ((n & 1) == 1));
+  Emit16(C_LUI | EncodeCMopn(n));
+}
+
+void MicroAssembler::sspush(Register rs2) {
+  ASSERT((rs2 == Register(1)) || (rs2 == Register(5)));
+  if (Supports(RV_Zcmop) && (rs2 == Register(1))) {
+    cmop(1);
+  } else {
+    moprr(7, ZR, ZR, rs2);
+  }
+}
+
+void MicroAssembler::sspopchk(Register rs1) {
+  ASSERT((rs1 == Register(1)) || (rs1 == Register(5)));
+  if (Supports(RV_Zcmop) && (rs1 == Register(5))) {
+    cmop(5);
+  } else {
+    mopr(28, ZR, rs1);
+  }
+}
+
+void MicroAssembler::ssrdp(Register rd) {
+  mopr(28, rd, ZR);
+}
+
+void MicroAssembler::ssamoswapw(Register rd,
+                                Register rs2,
+                                Address addr,
+                                std::memory_order order) {
+  ASSERT(addr.offset() == 0);
+  ASSERT(Supports(RV_Zicfiss));
+  EmitRType(SSAMOSWAP, order, rs2, addr.base(), WIDTH32, rd, AMO);
+}
+
+#if XLEN >= 64
+void MicroAssembler::ssamoswapd(Register rd,
+                                Register rs2,
+                                Address addr,
+                                std::memory_order order) {
+  ASSERT(addr.offset() == 0);
+  ASSERT(Supports(RV_Zicfiss));
+  EmitRType(SSAMOSWAP, order, rs2, addr.base(), WIDTH64, rd, AMO);
+}
+#endif  // XLEN >= 64
+
+void MicroAssembler::vsetvli(Register rd,
+                             Register rs1,
+                             ElementWidth sew,
+                             LengthMultiplier lmul,
+                             TailMode vta,
+                             MaskMode vma) {
+  ASSERT(Supports(RV_V));
+  intx_t vtypei = (vma << 7) | (vta << 6) | (sew << 3) | (lmul << 0);
+  EmitIType(vtypei, rs1, OPCFG, rd, OPV);
+}
+
+void MicroAssembler::vle8v(VRegister vd, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(LOADFP) | EncodeVd(vd) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E8) | vm);
+}
+
+void MicroAssembler::vle16v(VRegister vd, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(LOADFP) | EncodeVd(vd) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E16) | vm);
+}
+
+void MicroAssembler::vle32v(VRegister vd, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(LOADFP) | EncodeVd(vd) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E32) | vm);
+}
+
+void MicroAssembler::vle64v(VRegister vd, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(LOADFP) | EncodeVd(vd) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E64) | vm);
+}
+
+void MicroAssembler::vse8v(VRegister vs3, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(STOREFP) | EncodeVs3(vs3) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E8) | vm);
+}
+
+void MicroAssembler::vse16v(VRegister vs3, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(STOREFP) | EncodeVs3(vs3) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E16) | vm);
+}
+
+void MicroAssembler::vse32v(VRegister vs3, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(STOREFP) | EncodeVs3(vs3) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E32) | vm);
+}
+
+void MicroAssembler::vse64v(VRegister vs3, Address rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  ASSERT(rs1.offset() == 0);
+  Emit32(EncodeOpcode(STOREFP) | EncodeVs3(vs3) | EncodeRs1(rs1.base()) |
+         EncodeFunct3(E64) | vm);
+}
+
+void MicroAssembler::vmvvx(VRegister vd, Register rs1, VectorMask vm) {
+  ASSERT(Supports(RV_V));
+  Emit32(EncodeOpcode(OPV) | EncodeVd(vd) | EncodeRs1(rs1) |
+         EncodeFunct3(OPIVX) | EncodeFunct6(VMV) | vm);
+}
+
 void MicroAssembler::lb(Register rd, Address addr, std::memory_order order) {
   ASSERT(addr.offset() == 0);
   ASSERT((order == std::memory_order_acquire) ||
@@ -2035,6 +2172,43 @@
 }
 #endif
 
+void MicroAssembler::amocasw(Register rd,
+                             Register rs2,
+                             Address addr,
+                             std::memory_order order) {
+  ASSERT(addr.offset() == 0);
+  ASSERT(Supports(RV_Zacas));
+  EmitRType(AMOCAS, order, rs2, addr.base(), WIDTH32, rd, AMO);
+}
+
+void MicroAssembler::amocasd(Register rd,
+                             Register rs2,
+                             Address addr,
+                             std::memory_order order) {
+  ASSERT(addr.offset() == 0);
+#if XLEN == 32
+  ASSERT((rd % 2) == 0);
+  ASSERT((rs2 % 2) == 0);
+#endif
+  ASSERT(Supports(RV_Zacas));
+  EmitRType(AMOCAS, order, rs2, addr.base(), WIDTH64, rd, AMO);
+}
+
+#if XLEN >= 64
+void MicroAssembler::amocasq(Register rd,
+                             Register rs2,
+                             Address addr,
+                             std::memory_order order) {
+  ASSERT(addr.offset() == 0);
+#if XLEN == 64
+  ASSERT((rd % 2) == 0);
+  ASSERT((rs2 % 2) == 0);
+#endif
+  ASSERT(Supports(RV_Zacas));
+  EmitRType(AMOCAS, order, rs2, addr.base(), WIDTH128, rd, AMO);
+}
+#endif
+
 void MicroAssembler::c_lwsp(Register rd, Address addr) {
   ASSERT(rd != ZR);
   ASSERT(addr.base() == SP);
@@ -2187,6 +2361,7 @@
   ASSERT(Supports(RV_C));
   ASSERT(rd != ZR);
   ASSERT(rd != SP);
+  ASSERT(imm != 0);
   Emit16(C_LUI | EncodeCRd(rd) | EncodeCUImm(imm));
 }
 
@@ -2747,6 +2922,20 @@
   Emit32(e);
 }
 
+void MicroAssembler::EmitIType(Funct12 funct12,
+                               Register rs1,
+                               Funct3 funct3,
+                               Register rd,
+                               Opcode opcode) {
+  uint32_t e = 0;
+  e |= EncodeFunct12(funct12);
+  e |= EncodeRs1(rs1);
+  e |= EncodeFunct3(funct3);
+  e |= EncodeRd(rd);
+  e |= EncodeOpcode(opcode);
+  Emit32(e);
+}
+
 void MicroAssembler::EmitIType(intptr_t imm,
                                Register rs1,
                                Funct3 funct3,
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h
index 144a949..b2e8ed0 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.h
+++ b/runtime/vm/compiler/assembler/assembler_riscv.h
@@ -708,6 +708,44 @@
   void fltqd(Register rd, FRegister rs1, FRegister rs2);
   void fleqd(Register rd, FRegister rs1, FRegister rs2);
 
+  // ==== Zimop: May-be-operations ====
+  void mopr(intptr_t n, Register rd, Register rs1);
+  void moprr(intptr_t n, Register rd, Register rs1, Register rs2);
+  // ==== Zcmop: Compressed may-be-operations ====
+  void cmop(intptr_t n);
+
+  // ==== Zicfiss: Shadow stack ====
+  void sspush(Register rs2);
+  void sspopchk(Register rs1);
+  void ssrdp(Register rd);
+  void ssamoswapw(Register rd,
+                  Register rs2,
+                  Address addr,
+                  std::memory_order order = std::memory_order_relaxed);
+#if XLEN >= 64
+  void ssamoswapd(Register rd,
+                  Register rs2,
+                  Address addr,
+                  std::memory_order order = std::memory_order_relaxed);
+#endif  // XLEN >= 64
+
+  // ==== RV32V: Vectors ====
+  void vsetvli(Register rd,
+               Register rs1,
+               ElementWidth sew,
+               LengthMultiplier lmul,
+               TailMode vta,
+               MaskMode vma);
+  void vle8v(VRegister vd, Address rs1, VectorMask vm = unmasked);
+  void vle16v(VRegister vd, Address rs1, VectorMask vm = unmasked);
+  void vle32v(VRegister vd, Address rs1, VectorMask vm = unmasked);
+  void vle64v(VRegister vd, Address rs1, VectorMask vm = unmasked);
+  void vse8v(VRegister vs3, Address rs1, VectorMask vm = unmasked);
+  void vse16v(VRegister vs3, Address rs1, VectorMask vm = unmasked);
+  void vse32v(VRegister vs3, Address rs1, VectorMask vm = unmasked);
+  void vse64v(VRegister vs3, Address rs1, VectorMask vm = unmasked);
+  void vmvvx(VRegister vd, Register rs1, VectorMask vm = unmasked);
+
   // ==== Zalasr: Load-acquire, store-release ====
   void lb(Register rd, Address addr, std::memory_order order);
   void lh(Register rd, Address addr, std::memory_order order);
@@ -721,6 +759,22 @@
   void sd(Register rs2, Address addr, std::memory_order order);
 #endif
 
+  // ==== Zacas: Compare-and-swap ====
+  void amocasw(Register rd,
+               Register rs2,
+               Address addr,
+               std::memory_order order = std::memory_order_relaxed);
+  void amocasd(Register rd,
+               Register rs2,
+               Address addr,
+               std::memory_order order = std::memory_order_relaxed);
+#if XLEN >= 64
+  void amocasq(Register rd,
+               Register rs2,
+               Address addr,
+               std::memory_order order = std::memory_order_relaxed);
+#endif
+
   // ==== Dart Simulator Debugging ====
   void SimulatorPrintObject(Register rs1);
 
@@ -889,6 +943,11 @@
                   FRegister rd,
                   Opcode opcode);
 
+  void EmitIType(Funct12 funct12,
+                 Register rs1,
+                 Funct3 funct3,
+                 Register rd,
+                 Opcode opcode);
   void EmitIType(intptr_t imm,
                  Register rs1,
                  Funct3 funct3,
@@ -1027,6 +1086,8 @@
   // Debugging and bringup support.
   void Breakpoint() override { trap(); }
 
+  void StoreStoreFence() override { fence(kWrite, kWrite); }
+
   void SetPrologueOffset() {
     if (prologue_offset_ == -1) {
       prologue_offset_ = CodeSize();
diff --git a/runtime/vm/compiler/assembler/assembler_riscv_test.cc b/runtime/vm/compiler/assembler/assembler_riscv_test.cc
index 86f36c1..842f646 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv_test.cc
@@ -8479,6 +8479,261 @@
   EXPECT_EQ(0, CallI(test->entry(), qNAN, -3.0));
 }
 
+ASSEMBLER_TEST_GENERATE(VectorMemoryCopy, assembler) {
+  __ SetExtensions(RV_GC | RV_V);
+  Label loop;
+  __ Bind(&loop);
+  __ vsetvli(A4, A2, e8, m8, ta, ma);
+  __ vle8v(V0, Address(A1));
+  __ add(A1, A1, A4);
+  __ sub(A2, A2, A4);
+  __ vse8v(V0, Address(A0));
+  __ add(A0, A0, A4);
+  __ bnez(A2, &loop);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(VectorMemoryCopy, test) {
+  EXPECT_DISASSEMBLY(
+      "0c367757 vsetvli tmp2, a2, e8, m8, ta, ma\n"
+      "02058007 vle8.v v0, (a1)\n"
+      "    95ba add a1, a1, tmp2\n"
+      "    8e19 sub a2, a2, tmp2\n"
+      "02050027 vse8.v v0, (a0)\n"
+      "    953a add a0, a0, tmp2\n"
+      "    f67d bnez a2, -18\n"
+      "    8082 ret\n");
+
+  intptr_t len = 1000;
+  uint8_t* src = reinterpret_cast<uint8_t*>(malloc(len));
+  uint8_t* dst = reinterpret_cast<uint8_t*>(malloc(len));
+  for (intptr_t i = 0; i < len; i++) {
+    src[i] = i & 0xFF;
+    dst[i] = 0xFF;
+  }
+
+  Call(test->entry(), reinterpret_cast<intx_t>(dst),
+       reinterpret_cast<intx_t>(src), len);
+  for (intptr_t i = 0; i < len; i++) {
+    EXPECT_EQ(i & 0xFF, src[i]);
+    EXPECT_EQ(i & 0xFF, dst[i]);
+  }
+
+  // AVL < VLEN
+  dst[0] = 0xFF;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst),
+       reinterpret_cast<intx_t>(src), 1);
+  EXPECT_EQ(0, dst[0]);
+
+  // AVL = 0
+  dst[0] = 0xFF;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst),
+       reinterpret_cast<intx_t>(src), 0);
+  EXPECT_EQ(0xFF, dst[0]);
+
+  free(src);
+  free(dst);
+}
+
+ASSEMBLER_TEST_GENERATE(VectorMemorySet8, assembler) {
+  __ SetExtensions(RV_GC | RV_V);
+  Label loop;
+  __ Bind(&loop);
+  __ vsetvli(A4, A2, e8, m8, ta, ma);
+  __ vmvvx(V0, A1);
+  __ sub(A2, A2, A4);
+  __ vse8v(V0, Address(A0));
+  __ add(A0, A0, A4);
+  __ bnez(A2, &loop);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(VectorMemorySet8, test) {
+  EXPECT_DISASSEMBLY(
+      "0c367757 vsetvli tmp2, a2, e8, m8, ta, ma\n"
+      "5e05c057 vmv.v.x v0, a1\n"
+      "    8e19 sub a2, a2, tmp2\n"
+      "02050027 vse8.v v0, (a0)\n"
+      "    953a add a0, a0, tmp2\n"
+      "    fa65 bnez a2, -16\n"
+      "    8082 ret\n");
+
+  intptr_t len = 100;
+  uint8_t* dst = reinterpret_cast<uint8_t*>(malloc(len * 1));
+  for (intptr_t i = 0; i < len; i++) {
+    dst[i] = 0;
+  }
+
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x12, len);
+  for (intptr_t i = 0; i < len; i++) {
+    EXPECT_EQ(0x12u, dst[i]);
+  }
+
+  // AVL < VLEN
+  dst[0] = 0;
+  dst[1] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x23, 1);
+  EXPECT_EQ(0x23u, dst[0]);
+  EXPECT_EQ(0u, dst[1]);
+
+  // AVL = 0
+  dst[0] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0xFF, 0);
+  EXPECT_EQ(0u, dst[0]);
+
+  free(dst);
+}
+
+ASSEMBLER_TEST_GENERATE(VectorMemorySet16, assembler) {
+  __ SetExtensions(RV_GC | RV_V);
+  Label loop;
+  __ Bind(&loop);
+  __ vsetvli(A4, A2, e16, m8, ta, ma);
+  __ vmvvx(V0, A1);
+  __ sub(A2, A2, A4);
+  __ vse16v(V0, Address(A0));
+  __ slli(A4, A4, 1);
+  __ add(A0, A0, A4);
+  __ bnez(A2, &loop);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(VectorMemorySet16, test) {
+  EXPECT_DISASSEMBLY(
+      "0cb67757 vsetvli tmp2, a2, e16, m8, ta, ma\n"
+      "5e05c057 vmv.v.x v0, a1\n"
+      "    8e19 sub a2, a2, tmp2\n"
+      "02055027 vse16.v v0, (a0)\n"
+      "    0706 slli tmp2, tmp2, 0x1\n"
+      "    953a add a0, a0, tmp2\n"
+      "    f67d bnez a2, -18\n"
+      "    8082 ret\n");
+
+  intptr_t len = 100;
+  uint16_t* dst = reinterpret_cast<uint16_t*>(malloc(len * 2));
+  for (intptr_t i = 0; i < len; i++) {
+    dst[i] = 0;
+  }
+
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x1234, len);
+  for (intptr_t i = 0; i < len; i++) {
+    EXPECT_EQ(0x1234u, dst[i]);
+  }
+
+  // AVL < VLEN
+  dst[0] = 0;
+  dst[1] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x2345, 1);
+  EXPECT_EQ(0x2345u, dst[0]);
+  EXPECT_EQ(0u, dst[1]);
+
+  // AVL = 0
+  dst[0] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0xFFFF, 0);
+  EXPECT_EQ(0u, dst[0]);
+
+  free(dst);
+}
+
+ASSEMBLER_TEST_GENERATE(VectorMemorySet32, assembler) {
+  __ SetExtensions(RV_GC | RV_V);
+  Label loop;
+  __ Bind(&loop);
+  __ vsetvli(A4, A2, e32, m8, ta, ma);
+  __ vmvvx(V0, A1);
+  __ sub(A2, A2, A4);
+  __ vse32v(V0, Address(A0));
+  __ slli(A4, A4, 2);
+  __ add(A0, A0, A4);
+  __ bnez(A2, &loop);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(VectorMemorySet32, test) {
+  EXPECT_DISASSEMBLY(
+      "0d367757 vsetvli tmp2, a2, e32, m8, ta, ma\n"
+      "5e05c057 vmv.v.x v0, a1\n"
+      "    8e19 sub a2, a2, tmp2\n"
+      "02056027 vse32.v v0, (a0)\n"
+      "    070a slli tmp2, tmp2, 0x2\n"
+      "    953a add a0, a0, tmp2\n"
+      "    f67d bnez a2, -18\n"
+      "    8082 ret\n");
+
+  intptr_t len = 100;
+  uint32_t* dst = reinterpret_cast<uint32_t*>(malloc(len * 4));
+  for (intptr_t i = 0; i < len; i++) {
+    dst[i] = 0;
+  }
+
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x12345678, len);
+  for (intptr_t i = 0; i < len; i++) {
+    EXPECT_EQ(0x12345678u, dst[i]);
+  }
+
+  // AVL < VLEN
+  dst[0] = 0;
+  dst[1] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x23456789, 1);
+  EXPECT_EQ(0x23456789u, dst[0]);
+  EXPECT_EQ(0u, dst[1]);
+
+  // AVL = 0
+  dst[0] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0xFFFFFFFF, 0);
+  EXPECT_EQ(0u, dst[0]);
+
+  free(dst);
+}
+
+#if XLEN >= 64
+ASSEMBLER_TEST_GENERATE(VectorMemorySet64, assembler) {
+  __ SetExtensions(RV_GC | RV_V);
+  Label loop;
+  __ Bind(&loop);
+  __ vsetvli(A4, A2, e64, m8, ta, ma);
+  __ vmvvx(V0, A1);
+  __ sub(A2, A2, A4);
+  __ vse64v(V0, Address(A0));
+  __ slli(A4, A4, 3);
+  __ add(A0, A0, A4);
+  __ bnez(A2, &loop);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(VectorMemorySet64, test) {
+  EXPECT_DISASSEMBLY(
+      "0db67757 vsetvli tmp2, a2, e64, m8, ta, ma\n"
+      "5e05c057 vmv.v.x v0, a1\n"
+      "    8e19 sub a2, a2, tmp2\n"
+      "02057027 vse64.v v0, (a0)\n"
+      "    070e slli tmp2, tmp2, 0x3\n"
+      "    953a add a0, a0, tmp2\n"
+      "    f67d bnez a2, -18\n"
+      "    8082 ret\n");
+
+  intptr_t len = 100;
+  uint64_t* dst = reinterpret_cast<uint64_t*>(malloc(len * 8));
+  for (intptr_t i = 0; i < len; i++) {
+    dst[i] = 0;
+  }
+
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x1234567812345678, len);
+  for (intptr_t i = 0; i < len; i++) {
+    EXPECT_EQ(0x1234567812345678u, dst[i]);
+  }
+
+  // AVL < VLEN
+  dst[0] = 0;
+  dst[1] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0x2345678923456789, 1);
+  EXPECT_EQ(0x2345678923456789u, dst[0]);
+  EXPECT_EQ(0u, dst[1]);
+
+  // AVL = 0
+  dst[0] = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(dst), 0xFFFFFFFF, 0);
+  EXPECT_EQ(0u, dst[0]);
+
+  free(dst);
+}
+#endif
+
 ASSEMBLER_TEST_GENERATE(LoadByteAcquire, assembler) {
   __ SetExtensions(RV_GC | RV_Zalasr);
   __ lb(A0, Address(A1), std::memory_order_acquire);
@@ -8597,6 +8852,257 @@
 }
 #endif  // XLEN >= 64
 
+ASSEMBLER_TEST_GENERATE(AmoCompareAndSwapWord, assembler) {
+  __ SetExtensions(RV_GC | RV_Zacas);
+  __ lw(A1, Address(A0));
+  Label retry;
+  __ Bind(&retry);
+  __ addi(A2, A1, 1);
+  __ mv(A3, A1);
+  __ amocasw(A1, A2, Address(A0), std::memory_order_relaxed);
+  __ bne(A1, A3, &retry);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(AmoCompareAndSwapWord, test) {
+  EXPECT_DISASSEMBLY(
+      "    410c lw a1, 0(a0)\n"
+      "00158613 addi a2, a1, 1\n"
+      "    86ae mv tmp, a1\n"
+      "28c525af amocas.w a1, a2, (a0)\n"
+      "fed59be3 bne a1, tmp, -10\n"
+      "    8082 ret\n");
+
+  int32_t counter = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(&counter));
+  EXPECT_EQ(1, counter);
+  Call(test->entry(), reinterpret_cast<intx_t>(&counter));
+  EXPECT_EQ(2, counter);
+  Call(test->entry(), reinterpret_cast<intx_t>(&counter));
+  EXPECT_EQ(3, counter);
+}
+
+#if XLEN >= 64
+ASSEMBLER_TEST_GENERATE(AmoCompareAndSwapDoubleWord, assembler) {
+  __ SetExtensions(RV_GC | RV_Zacas);
+  __ ld(A1, Address(A0));
+  Label retry;
+  __ Bind(&retry);
+  __ addi(A2, A1, 1);
+  __ mv(A3, A1);
+  __ amocasd(A1, A2, Address(A0), std::memory_order_relaxed);
+  __ bne(A1, A3, &retry);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(AmoCompareAndSwapDoubleWord, test) {
+  EXPECT_DISASSEMBLY(
+      "    610c ld a1, 0(a0)\n"
+      "00158613 addi a2, a1, 1\n"
+      "    86ae mv tmp, a1\n"
+      "28c535af amocas.d a1, a2, (a0)\n"
+      "fed59be3 bne a1, tmp, -10\n"
+      "    8082 ret\n");
+
+  int64_t counter = 0;
+  Call(test->entry(), reinterpret_cast<intx_t>(&counter));
+  EXPECT_EQ(1, counter);
+  Call(test->entry(), reinterpret_cast<intx_t>(&counter));
+  EXPECT_EQ(2, counter);
+  Call(test->entry(), reinterpret_cast<intx_t>(&counter));
+  EXPECT_EQ(3, counter);
+}
+
+ASSEMBLER_TEST_GENERATE(AmoCompareAndSwapQuadWord, assembler) {
+  __ SetExtensions(RV_GC | RV_Zacas);
+  __ amocasq(T1, T3, Address(A0), std::memory_order_acq_rel);
+}
+ASSEMBLER_TEST_RUN(AmoCompareAndSwapQuadWord, test) {
+  EXPECT_DISASSEMBLY("2fc5432f amocas.q.aqrl t1, t3, (a0)\n");
+}
+#endif
+
+ASSEMBLER_TEST_GENERATE(MayBeOp_OneSource, assembler) {
+  __ SetExtensions(RV_G | RV_Zimop);
+  __ mopr(1, A0, A1);
+  __ mopr(31, A0, A1);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(MayBeOp_OneSource, test) {
+  EXPECT_DISASSEMBLY(
+      "81d5c573 mop.r.1 a0, a1\n"
+      "cdf5c573 mop.r.31 a0, a1\n"
+      "00008067 ret\n");
+
+  EXPECT_EQ(0, Call(test->entry(), 1, 2));
+}
+
+ASSEMBLER_TEST_GENERATE(MayBeOp_TwoSource, assembler) {
+  __ SetExtensions(RV_G | RV_Zimop);
+  __ moprr(1, A0, A1, A2);
+  __ moprr(7, A0, A1, A2);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(MayBeOp_TwoSource, test) {
+  EXPECT_DISASSEMBLY(
+      "86c5c573 mop.rr.1 a0, a1, a2\n"
+      "cec5c573 mop.rr.7 a0, a1, a2\n"
+      "00008067 ret\n");
+
+  EXPECT_EQ(0, Call(test->entry(), 1, 2, 3));
+}
+
+ASSEMBLER_TEST_GENERATE(CompressedMayBeOp, assembler) {
+  __ SetExtensions(RV_GC | RV_Zcmop);
+  __ cmop(11);
+  __ mv(A0, A1);  // A1=11
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(CompressedMayBeOp, test) {
+  EXPECT_DISASSEMBLY(
+      "    6581 c.mop.11\n"
+      "    852e mv a0, a1\n"
+      "    8082 ret\n");
+
+  EXPECT_EQ(42, Call(test->entry(), 0, 42));
+}
+
+ASSEMBLER_TEST_GENERATE(ShadowStack, assembler) {
+  __ SetExtensions(RV_G | RV_Zicfiss | RV_Zimop);
+  Label f;
+  __ sspush(RA);
+  __ jal(RA2, &f);
+  __ sspopchk(RA);
+  __ ret();
+  __ Bind(&f);
+  __ sspush(RA2);
+  __ sspopchk(RA2);
+  __ jr(RA2);
+}
+ASSEMBLER_TEST_RUN(ShadowStack, test) {
+  EXPECT_DISASSEMBLY(
+      "ce104073 sspush ra\n"
+      "00c002ef jal t0, +12\n"
+      "cdc0c073 sspopchk ra\n"
+      "00008067 ret\n"
+      "ce504073 sspush t0\n"
+      "cdc2c073 sspopchk t0\n"
+      "00028067 jr t0\n");
+  EXPECT_EQ(0, Call(test->entry(), 0));
+}
+
+ASSEMBLER_TEST_GENERATE(CompressedShadowStack, assembler) {
+  __ SetExtensions(RV_GC | RV_Zicfiss | RV_Zimop | RV_Zcmop);
+  Label f;
+  __ sspush(RA);
+  __ jal(RA2, &f);
+  __ sspopchk(RA);
+  __ ret();
+  __ Bind(&f);
+  __ sspush(RA2);
+  __ sspopchk(RA2);
+  __ jr(RA2);
+}
+ASSEMBLER_TEST_RUN(CompressedShadowStack, test) {
+  EXPECT_DISASSEMBLY(
+      "    6081 sspush ra\n"
+      "00a002ef jal t0, +10\n"
+      "cdc0c073 sspopchk ra\n"
+      "    8082 ret\n"
+      "ce504073 sspush t0\n"
+      "    6281 sspopchk t0\n"
+      "    8282 jr t0\n");
+  EXPECT_EQ(0, Call(test->entry(), 0));
+}
+
+ASSEMBLER_TEST_GENERATE(ShadowStackAmoSwapWord, assembler) {
+  __ SetExtensions(RV_G | RV_Zicfiss);
+  __ ssamoswapw(A0, A1, Address(A0));
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(ShadowStackAmoSwapWord, test) {
+  EXPECT_DISASSEMBLY(
+      "48b5252f ssamoswap.w a0, a1, (a0)\n"
+      "00008067 ret\n");
+  // Not running: would trap.
+}
+
+#if XLEN >= 64
+ASSEMBLER_TEST_GENERATE(ShadowStackAmoSwapDoubleWord, assembler) {
+  __ SetExtensions(RV_G | RV_Zicfiss);
+  __ ssamoswapd(A0, A1, Address(A0));
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(ShadowStackAmoSwapDoubleWord, test) {
+  EXPECT_DISASSEMBLY(
+      "48b5352f ssamoswap.d a0, a1, (a0)\n"
+      "00008067 ret\n");
+  // Not running: would trap.
+}
+#endif  // XLEN >= 64
+
+ASSEMBLER_TEST_GENERATE(ShadowStackLongJump, assembler) {
+  __ SetExtensions(RV_GC | RV_Zicfiss | RV_Zimop | RV_Zcmop);
+  Label nlr, func2, setjmp, longjmp, ss_disabled;
+  __ sspush(RA);
+  __ subi(SP, SP, 6 * target::kWordSize);
+  __ sx(RA, Address(SP, 5 * target::kWordSize));
+  __ sx(FP, Address(SP, 4 * target::kWordSize));
+  __ addi(FP, SP, 6 * target::kWordSize);
+  __ addi(A0, SP, 0 * target::kWordSize);
+  __ jal(&setjmp);
+  __ bnez(A0, &nlr);
+  __ addi(A0, SP, 0 * target::kWordSize);
+  __ jal(&func2);
+  __ Bind(&nlr);
+  __ lx(FP, Address(SP, 4 * target::kWordSize));
+  __ lx(RA, Address(SP, 5 * target::kWordSize));
+  __ addi(SP, SP, 6 * target::kWordSize);
+  __ sspopchk(RA);
+  __ ret();
+
+  __ Bind(&func2);
+  __ sspush(RA);
+  __ subi(SP, SP, 2 * target::kWordSize);
+  __ sx(RA, Address(SP, 1 * target::kWordSize));
+  __ sx(FP, Address(SP, 0 * target::kWordSize));
+  __ addi(FP, SP, 1 * target::kWordSize);
+  __ jal(&longjmp);
+  __ lx(FP, Address(SP, 0 * target::kWordSize));
+  __ lx(RA, Address(SP, 1 * target::kWordSize));
+  __ addi(SP, SP, 2 * target::kWordSize);
+  __ sspopchk(RA);
+  __ ret();
+
+  __ Bind(&setjmp);
+  __ sx(RA, Address(A0, 0 * target::kWordSize));
+  __ sx(SP, Address(A0, 1 * target::kWordSize));
+  __ sx(FP, Address(A0, 2 * target::kWordSize));
+  __ ssrdp(A1);
+  __ sx(A1, Address(A0, 3 * target::kWordSize));
+  __ li(A0, 0);
+  __ ret();
+
+  __ Bind(&longjmp);
+  __ lx(RA, Address(A0, 0 * target::kWordSize));
+  __ lx(SP, Address(A0, 1 * target::kWordSize));
+  __ lx(FP, Address(A0, 2 * target::kWordSize));
+  __ lx(A1, Address(A0, 3 * target::kWordSize));
+  __ beqz(A1, &ss_disabled);
+  __ csrw(0x011, A1);
+  __ Bind(&ss_disabled);
+  __ li(A0, 1);
+  __ ret();
+}
+ASSEMBLER_TEST_RUN(ShadowStackLongJump, test) {
+#if defined(DART_INCLUDE_SIMULATOR)
+  Simulator::Current()->set_ss_enabled(true);
+  EXPECT_EQ(1, Call(test->entry()));
+  Simulator::Current()->set_ss_enabled(false);
+  EXPECT_EQ(1, Call(test->entry()));
+#else
+  EXPECT_EQ(1, Call(test->entry()));
+#endif
+}
+
 ASSEMBLER_TEST_GENERATE(LoadImmediate_MaxInt32, assembler) {
   __ SetExtensions(RV_GC);
   __ LoadImmediate(A0, kMaxInt32);
@@ -9067,6 +9573,10 @@
 TEST_ENCODING(FRegister, FRs1)
 TEST_ENCODING(FRegister, FRs2)
 TEST_ENCODING(FRegister, FRs3)
+TEST_ENCODING(VRegister, Vd)
+TEST_ENCODING(VRegister, Vs1)
+TEST_ENCODING(VRegister, Vs2)
+TEST_ENCODING(VRegister, Vs3)
 TEST_ENCODING(Funct2, Funct2)
 TEST_ENCODING(Funct3, Funct3)
 TEST_ENCODING(Funct5, Funct5)
@@ -9078,6 +9588,8 @@
 TEST_ENCODING(intptr_t, ITypeImm)
 TEST_ENCODING(intptr_t, STypeImm)
 TEST_ENCODING(intptr_t, UTypeImm)
+TEST_ENCODING(intptr_t, Moprn)
+TEST_ENCODING(intptr_t, Moprrn)
 
 TEST_ENCODING(Register, CRd)
 TEST_ENCODING(Register, CRs1)
@@ -9106,6 +9618,7 @@
 TEST_ENCODING(intptr_t, CI16Imm)
 TEST_ENCODING(intptr_t, CI4SPNImm)
 TEST_ENCODING(intptr_t, CShamt)
+TEST_ENCODING(intptr_t, CMopn)
 
 #undef TEST_ENCODING
 
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index cdf1202..be1c9ac 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -1345,6 +1345,8 @@
   // Debugging and bringup support.
   void Breakpoint() override { int3(); }
 
+  void StoreStoreFence() override {}
+
   static bool AddressCanHoldConstantIndex(const Object& constant,
                                           bool is_external,
                                           intptr_t cid,
diff --git a/runtime/vm/compiler/assembler/disassembler_arm.cc b/runtime/vm/compiler/assembler/disassembler_arm.cc
index 1bdabf7..57f3979 100644
--- a/runtime/vm/compiler/assembler/disassembler_arm.cc
+++ b/runtime/vm/compiler/assembler/disassembler_arm.cc
@@ -1444,9 +1444,10 @@
   if (instr->ConditionField() == kSpecialCondition) {
     if (instr->InstructionBits() == static_cast<int32_t>(0xf57ff01f)) {
       Format(instr, "clrex");
-    } else if (instr->InstructionBits() ==
-               static_cast<int32_t>(kDataMemoryBarrier)) {
+    } else if (instr->InstructionBits() == static_cast<int32_t>(kDMB_ISH)) {
       Format(instr, "dmb ish");
+    } else if (instr->InstructionBits() == static_cast<int32_t>(kDMB_ISHST)) {
+      Format(instr, "dmb ishst");
     } else {
       if (instr->IsSIMDDataProcessing()) {
         DecodeSIMDDataProcessing(instr);
diff --git a/runtime/vm/compiler/assembler/disassembler_arm64.cc b/runtime/vm/compiler/assembler/disassembler_arm64.cc
index 6d6bcfa..79dba59 100644
--- a/runtime/vm/compiler/assembler/disassembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/disassembler_arm64.cc
@@ -994,10 +994,14 @@
     return;
   }
 
-  if (instr->InstructionBits() == kDataMemoryBarrier) {
+  if (instr->InstructionBits() == kDMB_ISH) {
     Format(instr, "dmb ish");
     return;
   }
+  if (instr->InstructionBits() == kDMB_ISHST) {
+    Format(instr, "dmb ishst");
+    return;
+  }
 
   if ((instr->Bits(0, 8) == 0x1f) && (instr->Bits(12, 4) == 2) &&
       (instr->Bits(16, 3) == 3) && (instr->Bits(19, 2) == 0) &&
@@ -1303,13 +1307,21 @@
     Format(instr, "csel'sf 'rd, 'rn, 'rm, 'cond");
   } else if ((instr->Bits(29, 2) == 0) && (instr->Bits(10, 2) == 1)) {
     if (non_select) {
-      Format(instr, "csinc'sf 'rd, 'rn, 'rm, 'cond");
+      if (instr->RnField() == 31 && instr->RmField() == 31) {
+        Format(instr, "cset'sf 'rd, 'condinverted");
+      } else {
+        Format(instr, "cinc'sf 'rd, 'rn, 'condinverted");
+      }
     } else {
-      Format(instr, "cinc'sf 'rd, 'rn, 'condinverted");
+      Format(instr, "csinc'sf 'rd, 'rn, 'rm, 'cond");
     }
   } else if ((instr->Bits(29, 2) == 2) && (instr->Bits(10, 2) == 0)) {
     if (non_select) {
-      Format(instr, "cinv'sf 'rd, 'rn, 'condinverted");
+      if (instr->RnField() == 31 && instr->RmField() == 31) {
+        Format(instr, "csetm'sf 'rd, 'condinverted");
+      } else {
+        Format(instr, "cinv'sf 'rd, 'rn, 'condinverted");
+      }
     } else {
       Format(instr, "csinv'sf 'rd, 'rn, 'rm, 'cond");
     }
diff --git a/runtime/vm/compiler/assembler/disassembler_kbc.cc b/runtime/vm/compiler/assembler/disassembler_kbc.cc
index 0e1498d..112895b 100644
--- a/runtime/vm/compiler/assembler/disassembler_kbc.cc
+++ b/runtime/vm/compiler/assembler/disassembler_kbc.cc
@@ -330,6 +330,7 @@
 
 void KernelBytecodeDisassembler::Disassemble(uword start,
                                              uword end,
+                                             uword base,
                                              DisassemblyFormatter* formatter,
                                              const Bytecode& bytecode) {
 #if !defined(PRODUCT)
@@ -347,7 +348,7 @@
                       &object, pc);
     formatter->ConsumeInstruction(hex_buffer, sizeof(hex_buffer), human_buffer,
                                   sizeof(human_buffer), object,
-                                  FLAG_disassemble_relative ? pc - start : pc);
+                                  FLAG_disassemble_relative ? pc - base : pc);
     pc += instruction_length;
   }
 #else
diff --git a/runtime/vm/compiler/assembler/disassembler_kbc.h b/runtime/vm/compiler/assembler/disassembler_kbc.h
index 2bea8fe..f320e9a 100644
--- a/runtime/vm/compiler/assembler/disassembler_kbc.h
+++ b/runtime/vm/compiler/assembler/disassembler_kbc.h
@@ -20,16 +20,27 @@
   // Return true if all instructions were successfully decoded, false otherwise.
   static void Disassemble(uword start,
                           uword end,
+                          uword base,
                           DisassemblyFormatter* formatter,
                           const Bytecode& bytecode);
 
   static void Disassemble(uword start,
                           uword end,
+                          uword base,
                           DisassemblyFormatter* formatter) {
-    Disassemble(start, end, formatter, Bytecode::Handle());
+    Disassemble(start, end, base, formatter, Bytecode::Handle());
+  }
+
+  static void Disassemble(uword start,
+                          uword end,
+                          DisassemblyFormatter* formatter,
+                          const Bytecode& bytecode) {
+    ASSERT(!bytecode.IsNull());
+    Disassemble(start, end, bytecode.PayloadStart(), formatter, bytecode);
   }
 
   static void Disassemble(uword start, uword end, const Bytecode& bytecode) {
+    ASSERT(!bytecode.IsNull());
 #if !defined(PRODUCT)
     DisassembleToStdout stdout_formatter;
     LogBlock lb;
@@ -39,16 +50,20 @@
 #endif
   }
 
-  static void Disassemble(uword start, uword end) {
+  static void Disassemble(uword start, uword end, uword base) {
 #if !defined(PRODUCT)
     DisassembleToStdout stdout_formatter;
     LogBlock lb;
-    Disassemble(start, end, &stdout_formatter);
+    Disassemble(start, end, base, &stdout_formatter);
 #else
     UNREACHABLE();
 #endif
   }
 
+  static void Disassemble(uword start, uword end) {
+    Disassemble(start, end, start);
+  }
+
   static void Disassemble(uword start,
                           uword end,
                           char* buffer,
@@ -56,7 +71,7 @@
 #if !defined(PRODUCT)
     DisassembleToMemory memory_formatter(buffer, buffer_size);
     LogBlock lb;
-    Disassemble(start, end, &memory_formatter);
+    Disassemble(start, end, start, &memory_formatter);
 #else
     UNREACHABLE();
 #endif
diff --git a/runtime/vm/compiler/assembler/disassembler_riscv.cc b/runtime/vm/compiler/assembler/disassembler_riscv.cc
index c78efad..3fde181 100644
--- a/runtime/vm/compiler/assembler/disassembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/disassembler_riscv.cc
@@ -84,6 +84,7 @@
   void DisassembleAMO16(Instr instr);
   void DisassembleAMO32(Instr instr);
   void DisassembleAMO64(Instr instr);
+  void DisassembleAMO128(Instr instr);
   void DisassembleLOADFP(Instr instr);
   void DisassembleSTOREFP(Instr instr);
   void DisassembleFMADD(Instr instr);
@@ -91,6 +92,9 @@
   void DisassembleFNMADD(Instr instr);
   void DisassembleFNMSUB(Instr instr);
   void DisassembleOPFP(Instr instr);
+  void DisassembleOPV(Instr instr);
+  void DisassembleOPV_CFG(Instr instr);
+  void DisassembleOPV_IVX(Instr instr);
 
   void UnknownInstruction(Instr instr);
   void UnknownInstruction(CInstr instr);
@@ -181,6 +185,9 @@
     case OPFP:
       DisassembleOPFP(instr);
       break;
+    case OPV:
+      DisassembleOPV(instr);
+      break;
     default:
       if ((instr.encoding() == 0) ||
           (instr.encoding() == static_cast<uint32_t>(-1))) {
@@ -294,8 +301,16 @@
     case C_LUI:
       if (instr.rd() == SP) {
         Print("addi 'rd, 'rs1, 'i16imm", instr, RV_C);
-      } else {
+      } else if ((instr.rd() != ZR) && (instr.u_imm() != 0)) {
         Print("lui 'rd, 'uimm", instr, RV_C);
+      } else if (instr.encoding() == C_SSPUSH) {
+        Print("sspush ra", instr, RV_Zicfiss | RV_C);
+      } else if (instr.encoding() == C_SSPOPCHK) {
+        Print("sspopchk t0", instr, RV_Zicfiss | RV_C);
+      } else if ((instr.encoding() & C_MOP_MASK) == C_MOP) {
+        Print("c.mop.'mopn", instr, RV_Zcmop);
+      } else {
+        UnknownInstruction(instr);
       }
       break;
     case C_ADDI:
@@ -557,12 +572,30 @@
 
 void RISCVDisassembler::DisassembleLOADFP(Instr instr) {
   switch (instr.funct3()) {
+    case H:
+      Print("flh 'frd, 'iimm('rs1)", instr, RV_Zfhmin);
+      break;
     case S:
       Print("flw 'frd, 'iimm('rs1)", instr, RV_F);
       break;
     case D:
       Print("fld 'frd, 'iimm('rs1)", instr, RV_D);
       break;
+    case Q:
+      Print("flq 'frd, 'iimm('rs1)", instr, RV_Q);
+      break;
+    case E8:
+      Print("vle8.v 'vd, ('rs1)'vm", instr, RV_V);
+      break;
+    case E16:
+      Print("vle16.v 'vd, ('rs1)'vm", instr, RV_V);
+      break;
+    case E32:
+      Print("vle32.v 'vd, ('rs1)'vm", instr, RV_V);
+      break;
+    case E64:
+      Print("vle64.v 'vd, ('rs1)'vm", instr, RV_V);
+      break;
     default:
       UnknownInstruction(instr);
   }
@@ -591,12 +624,30 @@
 
 void RISCVDisassembler::DisassembleSTOREFP(Instr instr) {
   switch (instr.funct3()) {
+    case H:
+      Print("fsh 'frs2, 'simm('rs1)", instr, RV_Zfhmin);
+      break;
     case S:
       Print("fsw 'frs2, 'simm('rs1)", instr, RV_F);
       break;
     case D:
       Print("fsd 'frs2, 'simm('rs1)", instr, RV_D);
       break;
+    case Q:
+      Print("fsq 'frs2, 'simm('rs1)", instr, RV_Q);
+      break;
+    case E8:
+      Print("vse8.v 'vs3, ('rs1)'vm", instr, RV_V);
+      break;
+    case E16:
+      Print("vse16.v 'vs3, ('rs1)'vm", instr, RV_V);
+      break;
+    case E32:
+      Print("vse32.v 'vs3, ('rs1)'vm", instr, RV_V);
+      break;
+    case E64:
+      Print("vse64.v 'vs3, ('rs1)'vm", instr, RV_V);
+      break;
     default:
       UnknownInstruction(instr);
   }
@@ -1104,7 +1155,7 @@
 
 void RISCVDisassembler::DisassembleSYSTEM(Instr instr) {
   switch (instr.funct3()) {
-    case 0:
+    case PRIV:
       switch (instr.funct12()) {
         case ECALL:
           if (instr.rs1() == ZR) {
@@ -1120,6 +1171,26 @@
           UnknownInstruction(instr);
       }
       break;
+    case MOP: {
+      if ((instr.funct7() == SSPUSH) && (instr.rd() == ZR) &&
+          (instr.rs1() == ZR) &&
+          ((instr.rs2() == Register(1)) || (instr.rs2() == Register(5)))) {
+        Print("sspush 'rs2", instr, RV_Zicfiss);
+      } else if ((instr.funct12() == SSPOPCHK) && (instr.rd() == ZR) &&
+                 ((instr.rs1() == Register(1)) ||
+                  (instr.rs1() == Register(5)))) {
+        Print("sspopchk 'rs1", instr, RV_Zicfiss);
+      } else if ((instr.funct12() == SSRDP) && (instr.rs1() == ZR)) {
+        Print("ssrdp 'rd", instr, RV_Zicfiss);
+      } else if ((instr.funct12() & MOP_R_MASK) == MOP_R) {
+        Print("mop.r.'moprn 'rd, 'rs1", instr, RV_Zimop);
+      } else if ((instr.funct7() & MOP_RR_MASK) == MOP_RR) {
+        Print("mop.rr.'moprrn 'rd, 'rs1, 'rs2", instr, RV_Zimop);
+      } else {
+        UnknownInstruction(instr);
+      }
+      break;
+    }
     case CSRRW:
       if (instr.rd() == ZR) {
         Print("csrw 'csr, 'rs1", instr, RV_I);
@@ -1183,6 +1254,9 @@
     case WIDTH64:
       DisassembleAMO64(instr);
       break;
+    case WIDTH128:
+      DisassembleAMO128(instr);
+      break;
     default:
       UnknownInstruction(instr);
   }
@@ -1309,6 +1383,12 @@
     case STOREORDERED:
       Print("sw'order 'rs2, ('rs1)", instr, RV_Zalasr);
       break;
+    case SSAMOSWAP:
+      Print("ssamoswap.w'order 'rd, 'rs2, ('rs1)", instr, RV_Zicfiss);
+      break;
+    case AMOCAS:
+      Print("amocas.w'order 'rd, 'rs2, ('rs1)", instr, RV_Zacas);
+      break;
     default:
       UnknownInstruction(instr);
   }
@@ -1356,6 +1436,24 @@
     case STOREORDERED:
       Print("sd'order 'rs2, ('rs1)", instr, RV_Zalasr);
       break;
+    case SSAMOSWAP:
+      Print("ssamoswap.d'order 'rd, 'rs2, ('rs1)", instr, RV_Zicfiss);
+      break;
+#endif
+    case AMOCAS:
+      Print("amocas.d'order 'rd, 'rs2, ('rs1)", instr, RV_Zacas);
+      break;
+    default:
+      UnknownInstruction(instr);
+  }
+}
+
+void RISCVDisassembler::DisassembleAMO128(Instr instr) {
+  switch (instr.funct5()) {
+#if XLEN >= 64
+    case AMOCAS:
+      Print("amocas.q'order 'rd, 'rs2, ('rs1)", instr, RV_Zacas);
+      break;
 #endif
     default:
       UnknownInstruction(instr);
@@ -1772,6 +1870,40 @@
   }
 }
 
+void RISCVDisassembler::DisassembleOPV(Instr instr) {
+  switch (instr.funct3()) {
+    case OPCFG:
+      DisassembleOPV_CFG(instr);
+      break;
+    case OPIVX:
+      DisassembleOPV_IVX(instr);
+      break;
+    default:
+      UnknownInstruction(instr);
+  }
+}
+
+void RISCVDisassembler::DisassembleOPV_CFG(Instr instr) {
+  if ((instr.encoding() & 0x80000000) == 0) {
+    Print("vsetvli 'rd, 'rs1, 'vtypei", instr, RV_V);
+  } else {
+    // vsetivli
+    // vsetvl
+    UnknownInstruction(instr);
+  }
+}
+
+void RISCVDisassembler::DisassembleOPV_IVX(Instr instr) {
+  switch (instr.funct6()) {
+    case VMV:
+      Print("vmv.v.x 'vd, 'rs1'vm", instr, RV_V);
+      break;
+    default:
+      UnknownInstruction(instr);
+      break;
+  }
+}
+
 void RISCVDisassembler::UnknownInstruction(Instr instr) {
   if (instr.encoding() == 0) {
     Print("trap", instr, RV_I);
@@ -1917,6 +2049,12 @@
       if ((succ & HartEffects::kWrite) != 0) Printf("w");
     }
     return format + 8;
+  } else if (STRING_STARTS_WITH(format, "moprn")) {
+    Printf("%" Pd, DecodeMoprn(instr.encoding()));
+    return format + 5;
+  } else if (STRING_STARTS_WITH(format, "moprrn")) {
+    Printf("%" Pd, DecodeMoprrn(instr.encoding()));
+    return format + 6;
   } else if (STRING_STARTS_WITH(format, "frd")) {
     Printf("%s", fpu_reg_names[instr.frd()]);
     return format + 3;
@@ -1963,6 +2101,88 @@
         break;
     }
     return format + 4;
+  } else if (STRING_STARTS_WITH(format, "vd")) {
+    Printf("%s", vector_reg_names[instr.vd()]);
+    return format + 2;
+  } else if (STRING_STARTS_WITH(format, "vs1")) {
+    Printf("%s", vector_reg_names[instr.vs1()]);
+    return format + 3;
+  } else if (STRING_STARTS_WITH(format, "vs2")) {
+    Printf("%s", vector_reg_names[instr.vs2()]);
+    return format + 3;
+  } else if (STRING_STARTS_WITH(format, "vs3")) {
+    Printf("%s", vector_reg_names[instr.vs3()]);
+    return format + 3;
+  } else if (STRING_STARTS_WITH(format, "vtypei")) {
+    intx_t vtypei = instr.itype_imm();
+
+    // SEW
+    switch ((vtypei >> 3) & 0b111) {
+      case e8:
+        Printf("e8");
+        break;
+      case e16:
+        Printf("e16");
+        break;
+      case e32:
+        Printf("e32");
+        break;
+      case e64:
+        Printf("e64");
+        break;
+      default:
+        Printf("invalid sew");
+        break;
+    }
+
+    // LMUL
+    switch ((vtypei >> 0) & 0b111) {
+      case mf8:
+        Printf(", mf8");
+        break;
+      case mf4:
+        Printf(", mf4");
+        break;
+      case mf2:
+        Printf(", mf2");
+        break;
+      case m1:
+        Printf(", m1");
+        break;
+      case m2:
+        Printf(", m2");
+        break;
+      case m4:
+        Printf(", m4");
+        break;
+      case m8:
+        Printf(", m8");
+        break;
+      default:
+        Printf(", invalid lmul");
+        break;
+    }
+
+    // VTA
+    if ((vtypei & (1 << 6)) == 0) {
+      Printf(", tu");
+    } else {
+      Printf(", ta");
+    }
+
+    // VMA
+    if ((vtypei & (1 << 7)) == 0) {
+      Printf(", mu");
+    } else {
+      Printf(", ma");
+    }
+
+    return format + 6;
+  } else if (STRING_STARTS_WITH(format, "vm")) {
+    if (instr.vm()) {
+      Printf(", v0.t");
+    }
+    return format + 2;
   }
 
   FATAL("Bad format %s\n", format);
@@ -2052,6 +2272,9 @@
   } else if (STRING_STARTS_WITH(format, "shamt")) {
     Printf("0x%x", instr.shamt());
     return format + 5;
+  } else if (STRING_STARTS_WITH(format, "mopn")) {
+    Printf("%" Pd, DecodeCMopn(instr.encoding()));
+    return format + 4;
   }
 
   FATAL("Bad format %s\n", format);
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 607f1d1..35ce1c5 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -610,19 +610,17 @@
       intptr_t temp = true_value;
       true_value = false_value;
       false_value = temp;
-    } else {
       true_condition = InvertCondition(true_condition);
     }
   }
 
-  __ cset(result, true_condition);
-
   if (is_power_of_two_kind) {
     const intptr_t shift =
         Utils::ShiftForPowerOfTwo(Utils::Maximum(true_value, false_value));
+    __ cset(result, true_condition);
     __ LslImmediate(result, result, shift + kSmiTagSize);
   } else {
-    __ sub(result, result, compiler::Operand(1));
+    __ csetm(result, true_condition);  // result = cond ? -1 : 0
     const int64_t val = Smi::RawValue(true_value) - Smi::RawValue(false_value);
     __ AndImmediate(result, result, val);
     if (false_value != 0) {
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index 622e95d..ee8421d 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -1703,7 +1703,11 @@
 
   __ PushNativeCalleeSavedRegisters();
 
-#if defined(USING_SHADOW_CALL_STACK)
+#if defined(DART_TARGET_OS_FUCHSIA) || defined(DART_TARGET_OS_ANDROID)
+  __ sx(GP,
+        compiler::Address(
+            THR, compiler::target::Thread::saved_shadow_call_stack_offset()));
+#elif defined(USING_SHADOW_CALL_STACK)
 #error Unimplemented
 #endif
 
diff --git a/runtime/vm/compiler/backend/linearscan.cc b/runtime/vm/compiler/backend/linearscan.cc
index 34eacb3..1fc14ec 100644
--- a/runtime/vm/compiler/backend/linearscan.cc
+++ b/runtime/vm/compiler/backend/linearscan.cc
@@ -105,7 +105,6 @@
       blocked_cpu_registers_(),
       blocked_fpu_registers_(),
       spilled_(),
-      safepoints_(),
       register_kind_(),
       number_of_registers_(0),
       registers_(),
@@ -342,30 +341,19 @@
 }
 
 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);
 
   if (first_safepoint_ == nullptr) {
-    ASSERT(last_safepoint_ == nullptr);
-    first_safepoint_ = last_safepoint_ = safepoint;
+    first_safepoint_ = safepoint;
   } else {
-    ASSERT(last_safepoint_ != nullptr);
     // We assume that safepoints list is sorted by position and that
-    // safepoints are added in this order.
-    ASSERT(last_safepoint_->pos() < pos);
-    last_safepoint_->set_next(safepoint);
-    last_safepoint_ = safepoint;
+    // safepoints are prepended to list, similar to how AddUse/AddUseInterval
+    // work.
+    ASSERT(pos < first_safepoint_->pos());
+    safepoint->set_next(first_safepoint_);
+    first_safepoint_ = safepoint;
   }
 }
 
@@ -602,6 +590,7 @@
   ASSERT(block_order_[0]->IsGraphEntry());
   BitVector* current_interference_set = nullptr;
   Zone* zone = flow_graph_.zone();
+  alive_vregs_ = new (zone) BitVector(zone, flow_graph_.max_vreg());
   for (intptr_t x = block_count - 1; x > 0; --x) {
     BlockEntryInstr* block = block_order_[x];
 
@@ -610,9 +599,9 @@
     // For every SSA value that is live out of this block, create an interval
     // that covers the whole block.  It will be shortened if we encounter a
     // definition of this value in this block.
-    for (BitVector::Iterator it(
-             liveness_.GetLiveOutSetAt(block->postorder_number()));
-         !it.Done(); it.Advance()) {
+    const auto live_out = liveness_.GetLiveOutSetAt(block->postorder_number());
+    alive_vregs_->CopyFrom(live_out);
+    for (BitVector::Iterator it(live_out); !it.Done(); it.Advance()) {
       LiveRange* range = GetLiveRange(it.Current());
       range->AddUseInterval(block->start_pos(), block->end_pos());
     }
@@ -655,9 +644,11 @@
         //
         // Note: a value "live in" for a catch has to be "live in" for this
         // block because its definition must dominate catch.
-        for (BitVector::Iterator it(liveness_.GetLiveInSetAt(
-                 surrounding_catch_block->postorder_number()));
-             !it.Done(); it.Advance()) {
+        const auto live_into_catch = liveness_.GetLiveInSetAt(
+            surrounding_catch_block->postorder_number());
+        alive_vregs_->AddAll(live_into_catch);
+        for (BitVector::Iterator it(live_into_catch); !it.Done();
+             it.Advance()) {
           LiveRange* range = GetLiveRange(it.Current());
           range->AddUseInterval(block->start_pos(), current_pos + 1);
           // Once we extended range on seeing first MayThrow and included
@@ -692,14 +683,31 @@
     } else if (auto catch_entry = block->AsCatchBlockEntry()) {
       // Catch entries are briefly safepoints after catch entry moves execute
       // and before execution jumps to the handler.
-      safepoints_.Add(catch_entry);
+      const auto pos = catch_entry->start_pos();
 
-      // Process initial definitions.
+      // Exception and stack-trace variables arrive to catch entry in registers
+      // and only will be spilled after catch entry is executed. So
+      // we must treat catch entry as the definition of these values and
+      // prune them from alive_vregs_.
+      for (intptr_t i = 0; i < catch_entry->initial_definitions()->length();
+           i++) {
+        if (auto param =
+                catch_entry->initial_definitions()->At(i)->AsParameter()) {
+          if (param->location().IsRegister()) {
+            alive_vregs_->Remove(param->vreg(0));
+          }
+        }
+      }
+
+      // Record safepoint at catch entry for all other values which are live
+      // into the catch entry.
+      AddSafepointToAliveVregs(pos, catch_entry->locs());
+
       for (intptr_t i = 0; i < catch_entry->initial_definitions()->length();
            i++) {
         Definition* defn = (*catch_entry->initial_definitions())[i];
         LiveRange* range = GetLiveRange(defn->vreg(0));
-        range->DefineAt(catch_entry->start_pos());  // Defined at block entry.
+        range->DefineAt(pos);  // Defined at block entry.
         ProcessInitialDefinition(defn, range, catch_entry, i);
       }
     } else if (auto entry = block->AsBlockEntryWithInitialDefs()) {
@@ -741,6 +749,8 @@
     range->DefineAt(graph_entry->start_pos());
     ProcessInitialDefinition(defn, range, graph_entry, i);
   }
+
+  alive_vregs_ = nullptr;
 }
 
 void FlowGraphAllocator::SplitInitialDefinitionAt(LiveRange* range,
@@ -786,8 +796,6 @@
 }
 
 void FlowGraphAllocator::CompleteRange(Definition* defn, LiveRange* range) {
-  AssignSafepoints(defn, range);
-
   if (range->has_uses_which_require_stack()) {
     // Reserve a spill slot on the stack if it is not yet reserved.
     if (range->spill_slot().IsInvalid() ||
@@ -924,6 +932,34 @@
 // at the start of the instruction.
 //
 
+LiveRange* FlowGraphAllocator::AddUseIntervalToRange(intptr_t vreg,
+                                                     intptr_t from,
+                                                     intptr_t to) {
+  LiveRange* range = GetLiveRange(vreg);
+  alive_vregs_->Add(vreg);
+  range->AddUseInterval(from, to);
+  return range;
+}
+
+LiveRange* FlowGraphAllocator::AddUseToRange(intptr_t vreg,
+                                             intptr_t block_start,
+                                             intptr_t pos,
+                                             Location* use_slot) {
+  auto range = AddUseIntervalToRange(vreg, block_start, pos);
+  range->AddUse(pos, use_slot);
+  return range;
+}
+
+LiveRange* FlowGraphAllocator::AddHintedUseToRange(intptr_t vreg,
+                                                   intptr_t block_start,
+                                                   intptr_t pos,
+                                                   Location* use_slot,
+                                                   Location* hint_slot) {
+  auto range = AddUseIntervalToRange(vreg, block_start, pos);
+  range->AddHintedUse(pos, use_slot, hint_slot);
+  return range;
+}
+
 Instruction* FlowGraphAllocator::ConnectOutgoingPhiMoves(
     BlockEntryInstr* block,
     BitVector* interfere_at_backedge) {
@@ -972,23 +1008,19 @@
     //      value    --*
     //
     intptr_t vreg = val->definition()->vreg(0);
-    LiveRange* range = GetLiveRange(vreg);
     if (interfere_at_backedge != nullptr) interfere_at_backedge->Add(vreg);
-
-    range->AddUseInterval(block->start_pos(), pos);
-    range->AddHintedUse(pos, move->src_slot(),
+    AddHintedUseToRange(vreg, block->start_pos(), pos, move->src_slot(),
                         GetLiveRange(phi->vreg(0))->assigned_location_slot());
     move->set_src(Location::PrefersRegister());
 
     if (val->definition()->HasPairRepresentation()) {
       move = parallel_move->MoveOperandsAt(move_index++);
       vreg = val->definition()->vreg(1);
-      range = GetLiveRange(vreg);
+
       if (interfere_at_backedge != nullptr) {
         interfere_at_backedge->Add(vreg);
       }
-      range->AddUseInterval(block->start_pos(), pos);
-      range->AddHintedUse(pos, move->src_slot(),
+      AddHintedUseToRange(vreg, block->start_pos(), pos, move->src_slot(),
                           GetLiveRange(phi->vreg(1))->assigned_location_slot());
       move->set_src(Location::PrefersRegister());
     }
@@ -1049,11 +1081,9 @@
 
     // All phi resolution moves are connected. Phi's live range is
     // complete.
-    AssignSafepoints(phi, range);
     CompleteRange(range, phi->RegisterKindForResult());
     if (is_pair_phi) {
       LiveRange* second_range = GetLiveRange(phi->vreg(1));
-      AssignSafepoints(phi, second_range);
       CompleteRange(second_range, phi->RegisterKindForResult());
     }
 
@@ -1108,8 +1138,7 @@
           // they are still used when resolving control flow.
           ASSERT(def->IsParameter() || def->IsPhi());
           ASSERT(!def->HasPairRepresentation());
-          LiveRange* range = GetLiveRange(def->vreg(0));
-          range->AddUseInterval(block_start_pos, use_pos);
+          AddUseIntervalToRange(def->vreg(0), block_start_pos, use_pos);
         }
         continue;
       }
@@ -1136,22 +1165,12 @@
 
       if (def->HasPairRepresentation()) {
         PairLocation* location_pair = locations[i].AsPairLocation();
-        {
-          // First live range.
-          LiveRange* range = GetLiveRange(def->vreg(0));
-          range->AddUseInterval(block_start_pos, use_pos);
-          range->AddUse(use_pos, location_pair->SlotAt(0));
-        }
-        {
-          // Second live range.
-          LiveRange* range = GetLiveRange(def->vreg(1));
-          range->AddUseInterval(block_start_pos, use_pos);
-          range->AddUse(use_pos, location_pair->SlotAt(1));
-        }
+        AddUseToRange(def->vreg(0), block_start_pos, use_pos,
+                      location_pair->SlotAt(0));
+        AddUseToRange(def->vreg(1), block_start_pos, use_pos,
+                      location_pair->SlotAt(1));
       } else {
-        LiveRange* range = GetLiveRange(def->vreg(0));
-        range->AddUseInterval(block_start_pos, use_pos);
-        range->AddUse(use_pos, &locations[i]);
+        AddUseToRange(def->vreg(0), block_start_pos, use_pos, &locations[i]);
       }
     }
 
@@ -1187,27 +1206,17 @@
     if (def->HasPairRepresentation()) {
       locations[i] = Location::Pair(Location::Any(), Location::Any());
       PairLocation* location_pair = locations[i].AsPairLocation();
-      {
-        // First live range.
-        LiveRange* range = GetLiveRange(def->vreg(0));
-        range->AddUseInterval(block_start_pos, use_pos);
-        range->AddUse(use_pos, location_pair->SlotAt(0));
-      }
-      {
-        // Second live range.
-        LiveRange* range = GetLiveRange(def->vreg(1));
-        range->AddUseInterval(block_start_pos, use_pos);
-        range->AddUse(use_pos, location_pair->SlotAt(1));
-      }
+      AddUseToRange(def->vreg(0), block_start_pos, use_pos,
+                    location_pair->SlotAt(0));
+      AddUseToRange(def->vreg(1), block_start_pos, use_pos,
+                    location_pair->SlotAt(1));
     } else if (def->IsMaterializeObject()) {
       locations[i] = Location::NoLocation();
       ProcessMaterializationUses(block, block_start_pos, use_pos,
                                  def->AsMaterializeObject());
     } else {
       locations[i] = Location::Any();
-      LiveRange* range = GetLiveRange(def->vreg(0));
-      range->AddUseInterval(block_start_pos, use_pos);
-      range->AddUse(use_pos, &locations[i]);
+      AddUseToRange(def->vreg(0), block_start_pos, use_pos, &locations[i]);
     }
   }
 }
@@ -1222,7 +1231,6 @@
   ASSERT(!in_ref->IsPairLocation());
   ASSERT(input != nullptr);
   ASSERT(block != nullptr);
-  LiveRange* range = GetLiveRange(vreg);
   if (in_ref->IsMachineRegister()) {
     // Input is expected in a fixed register. Expected shape of
     // live ranges:
@@ -1231,15 +1239,16 @@
     //      value    --*
     //      register   [-----)
     //
-    if (live_registers != nullptr) {
-      live_registers->Add(*in_ref, range->representation());
-    }
     MoveOperands* move = AddMoveAt(pos - 1, *in_ref, Location::Any());
     ASSERT(!in_ref->IsRegister() ||
            ((1 << in_ref->reg()) & kDartAvailableCpuRegs) != 0);
     BlockLocation(*in_ref, pos - 1, pos + 1);
-    range->AddUseInterval(block->start_pos(), pos - 1);
-    range->AddHintedUse(pos - 1, move->src_slot(), in_ref);
+
+    auto range = AddHintedUseToRange(vreg, block->start_pos(), pos - 1,
+                                     move->src_slot(), in_ref);
+    if (live_registers != nullptr) {
+      live_registers->Add(*in_ref, range->representation());
+    }
   } else if (in_ref->IsUnallocated()) {
     if (in_ref->policy() == Location::kWritableRegister) {
       // Writable unallocated input. Expected shape of
@@ -1252,8 +1261,7 @@
                                      Location::PrefersRegister());
 
       // Add uses to the live range of the input.
-      range->AddUseInterval(block->start_pos(), pos);
-      range->AddUse(pos, move->src_slot());
+      AddUseToRange(vreg, block->start_pos(), pos, move->src_slot());
 
       // Create live range for the temporary.
       LiveRange* temp = MakeLiveRangeForTemporary();
@@ -1263,18 +1271,17 @@
       *in_ref = Location::RequiresRegister();
       CompleteRange(temp, RegisterKindFromPolicy(*in_ref));
     } else {
-      if (in_ref->policy() == Location::kRequiresStack) {
-        range->mark_has_uses_which_require_stack();
-      }
-
       // Normal unallocated input. Expected shape of
       // live ranges:
       //
       //                 i  i'
       //      value    -----*
       //
-      range->AddUseInterval(block->start_pos(), pos + 1);
-      range->AddUse(pos + 1, in_ref);
+      auto range = AddUseToRange(vreg, block->start_pos(), pos + 1, in_ref);
+
+      if (in_ref->policy() == Location::kRequiresStack) {
+        range->mark_has_uses_which_require_stack();
+      }
     }
   } else {
     ASSERT(in_ref->IsConstant());
@@ -1364,9 +1371,7 @@
         block->IsInsideLoop() ? Location::PrefersRegister() : Location::Any());
 
     // Add uses to the live range of the input.
-    LiveRange* input_range = GetLiveRange(input_vreg);
-    input_range->AddUseInterval(block->start_pos(), pos);
-    input_range->AddUse(pos, move->src_slot());
+    AddUseToRange(input_vreg, block->start_pos(), pos, move->src_slot());
 
     // Shorten output live range to the point of definition and add both input
     // and output uses slots to be filled by allocator.
@@ -1395,7 +1400,6 @@
     range->AddUse(pos, out);
   }
 
-  AssignSafepoints(def, range);
   CompleteRange(range, def->RegisterKindForResult());
 }
 
@@ -1435,30 +1439,40 @@
   LocationSummary* locs = current->locs();
 
   Definition* def = current->AsDefinition();
-  if ((def != nullptr) && (def->AsConstant() != nullptr)) {
-    ASSERT(!def->HasPairRepresentation());
-    LiveRange* range =
-        (def->vreg(0) != -1) ? GetLiveRange(def->vreg(0)) : nullptr;
-
-    // Drop definitions of constants that have no uses.
-    if ((range == nullptr) || (range->first_use() == nullptr)) {
-      locs->set_out(0, Location::NoLocation());
-      return;
+  if (def != nullptr) {
+    // Definition is not alive at its own safepoint, so kill it from alive_vregs
+    // early.
+    if (def->HasSSATemp()) {
+      alive_vregs_->Remove(def->vreg(0));
+      if (def->HasPairRepresentation()) {
+        alive_vregs_->Remove(def->vreg(1));
+      }
     }
 
-    // If this constant has only unconstrained uses convert them all
-    // to use the constant directly and drop this definition.
-    // TODO(vegorov): improve allocation when we have enough registers to keep
-    // constants used in the loop in them.
-    if (HasOnlyUnconstrainedUses(range)) {
-      ConstantInstr* constant_instr = def->AsConstant();
-      range->set_assigned_location(Location::Constant(constant_instr));
-      range->set_spill_slot(Location::Constant(constant_instr));
-      range->finger()->Initialize(range);
-      ConvertAllUses(range);
+    if (auto const_def = def->AsConstant()) {
+      ASSERT(!def->HasPairRepresentation());
+      LiveRange* range =
+          (def->vreg(0) != -1) ? GetLiveRange(def->vreg(0)) : nullptr;
 
-      locs->set_out(0, Location::NoLocation());
-      return;
+      // Drop definitions of constants that have no uses.
+      if ((range == nullptr) || (range->first_use() == nullptr)) {
+        locs->set_out(0, Location::NoLocation());
+        return;
+      }
+
+      // If this constant has only unconstrained uses convert them all
+      // to use the constant directly and drop this definition.
+      // TODO(vegorov): improve allocation when we have enough registers to keep
+      // constants used in the loop in them.
+      if (HasOnlyUnconstrainedUses(range)) {
+        range->set_assigned_location(Location::Constant(const_def));
+        range->set_spill_slot(Location::Constant(const_def));
+        range->finger()->Initialize(range);
+        ConvertAllUses(range);
+
+        locs->set_out(0, Location::NoLocation());
+        return;
+      }
     }
   }
 
@@ -1673,7 +1687,7 @@
   }
 
   if (locs->can_call() && !locs->native_leaf_call()) {
-    safepoints_.Add(current);
+    AddSafepointToAliveVregs(pos, locs);
   }
 
   if (def == nullptr) {
@@ -1739,6 +1753,38 @@
   }
 }
 
+void FlowGraphAllocator::AddSafepointToAliveVregs(intptr_t pos,
+                                                  LocationSummary* locs) {
+  // Constants are never spilled to stack across caller safe calls. They
+  // can only end up on the stack on slow paths (which spill all live registers)
+  // or across callee safe calls (which spill all callee-save registers).
+  const bool skip_constants = locs->always_calls() && !locs->callee_safe_call();
+  for (BitVector::Iterator it(alive_vregs_); !it.Done(); it.Advance()) {
+    const intptr_t vreg = it.Current();
+    if (skip_constants && constants_->Contains(vreg)) continue;
+
+    // Note: first_use_interval can be null if the use was eliminated by
+    // register allocator. Should only happen to constants.
+    auto range = GetLiveRange(vreg);
+    ASSERT(range->first_use_interval() != nullptr ||
+           constants_->Contains(vreg));
+
+    // The value might be alive but used at the start of the instruction, e.g.
+    // if this value is moved to a fixed register by ProcessOneInput. To avoid
+    // duplicating/complicating logic we simply check here if first use
+    // internal covers the safepoint.
+    if (range->first_use_interval() != nullptr &&
+        range->first_use_interval()->Contains(pos)) {
+      range->AddSafepoint(pos, locs);
+    }
+  }
+
+  // Mark suspend state variable alive on all safepoints.
+  if (suspend_var_stack_index_ >= 0) {
+    locs->SetStackBit(suspend_var_stack_index_);
+  }
+}
+
 static ParallelMoveInstr* CreateParallelMoveBefore(Instruction* instr,
                                                    intptr_t pos) {
   ASSERT(pos > 0);
@@ -2296,6 +2342,7 @@
     return;
   }
 
+  suspend_var_stack_index_ = spill_slots_.length();
   spill_slots_.Add(kMaxPosition);
   quad_spill_slots_.Add(false);
   untagged_spill_slots_.Add(false);
@@ -2305,27 +2352,10 @@
       -compiler::target::frame_layout.VariableIndexForFrameSlot(
           compiler::target::frame_layout.FrameSlotForVariable(
               flow_graph_.parsed_function().suspend_state_var()));
-  ASSERT(stack_index == spill_slots_.length() - 1);
+  ASSERT(stack_index == suspend_var_stack_index_);
 #endif
 }
 
-void FlowGraphAllocator::UpdateStackmapsForSuspendState() {
-  if (flow_graph_.parsed_function().suspend_state_var() == nullptr) {
-    return;
-  }
-
-  const intptr_t stack_index =
-      -compiler::target::frame_layout.VariableIndexForFrameSlot(
-          compiler::target::frame_layout.FrameSlotForVariable(
-              flow_graph_.parsed_function().suspend_state_var()));
-  ASSERT(stack_index >= 0);
-
-  for (intptr_t i = 0, n = safepoints_.length(); i < n; ++i) {
-    Instruction* safepoint_instr = safepoints_[i];
-    safepoint_instr->locs()->SetStackBit(stack_index);
-  }
-}
-
 intptr_t FlowGraphAllocator::FirstIntersectionWithAllocated(
     intptr_t reg,
     LiveRange* unallocated) {
@@ -2880,53 +2910,6 @@
   return false;
 }
 
-bool FlowGraphAllocator::IsLiveAfterCatchEntry(
-    CatchBlockEntryInstr* catch_entry,
-    ParameterInstr* param) {
-  ASSERT(param->GetBlock() == catch_entry);
-  auto* raw_exception_var = catch_entry->raw_exception_var();
-  if (raw_exception_var != nullptr &&
-      param->env_index() == flow_graph_.EnvIndex(raw_exception_var)) {
-    return true;
-  }
-  auto* raw_stacktrace_var = catch_entry->raw_stacktrace_var();
-  if (raw_stacktrace_var != nullptr &&
-      param->env_index() == flow_graph_.EnvIndex(raw_stacktrace_var)) {
-    return true;
-  }
-  return false;
-}
-
-void FlowGraphAllocator::AssignSafepoints(Definition* defn, LiveRange* range) {
-  for (intptr_t i = safepoints_.length() - 1; i >= 0; i--) {
-    Instruction* safepoint_instr = safepoints_[i];
-    if (safepoint_instr == defn) {
-      // The value is not live until after the definition is fully executed,
-      // don't assign the safepoint inside the definition itself to
-      // definition's liverange.
-      continue;
-    }
-    // Exception and stack trace parameters of CatchBlockEntry are live
-    // only after catch block entry. Their spill slots should not be scanned
-    // if GC occurs during a safepoint with a catch block entry PC
-    // (before control is transferred to the catch entry).
-    if (auto* catch_entry = safepoint_instr->AsCatchBlockEntry()) {
-      if (auto* param = defn->AsParameter()) {
-        if ((param->GetBlock() == catch_entry) &&
-            IsLiveAfterCatchEntry(catch_entry, param)) {
-          continue;
-        }
-      }
-    }
-    const intptr_t pos = GetLifetimePosition(safepoint_instr);
-    if (range->End() <= pos) break;
-
-    if (range->Contains(pos)) {
-      range->AddSafepoint(pos, safepoint_instr->locs());
-    }
-  }
-}
-
 static inline bool ShouldBeAllocatedBefore(LiveRange* a, LiveRange* b) {
   // TODO(vegorov): consider first hint position when ordering live ranges.
   return a->Start() <= b->Start();
@@ -3378,6 +3361,9 @@
 }
 
 void FlowGraphAllocator::CollectRepresentations() {
+  constants_ = new (flow_graph_.zone())
+      BitVector(flow_graph_.zone(), flow_graph_.max_vreg());
+
   // Constants.
   GraphEntryInstr* graph_entry = flow_graph_.graph_entry();
   auto initial_definitions = graph_entry->initial_definitions();
@@ -3389,6 +3375,13 @@
       value_representations_[def->vreg(1)] =
           RepresentationForRange(def->representation());
     }
+
+    if (def->IsConstant()) {
+      constants_->Add(def->vreg(0));
+      if (def->HasPairRepresentation()) {
+        constants_->Add(def->vreg(1));
+      }
+    }
   }
 
   for (auto block : block_order_) {
@@ -3402,6 +3395,13 @@
           value_representations_[def->vreg(1)] =
               RepresentationForRange(def->representation());
         }
+
+        if (def->IsConstant()) {
+          constants_->Add(def->vreg(0));
+          if (def->HasPairRepresentation()) {
+            constants_->Add(def->vreg(1));
+          }
+        }
       }
     } else if (auto join = block->AsJoinEntry()) {
       for (PhiIterator it(join); !it.Done(); it.Advance()) {
@@ -3629,9 +3629,6 @@
 
   BuildLiveRanges();
 
-  // Update stackmaps after all safepoints are collected.
-  UpdateStackmapsForSuspendState();
-
   if (FLAG_print_ssa_liveranges && CompilerState::ShouldTrace()) {
     const Function& function = flow_graph_.function();
     THR_Print("-- [before ssa allocator] ranges [%s] ---------\n",
diff --git a/runtime/vm/compiler/backend/linearscan.h b/runtime/vm/compiler/backend/linearscan.h
index 1eaee0d..57b53ed 100644
--- a/runtime/vm/compiler/backend/linearscan.h
+++ b/runtime/vm/compiler/backend/linearscan.h
@@ -144,6 +144,16 @@
 
   static constexpr intptr_t kNormalEntryPos = 2;
 
+  LiveRange* AddUseIntervalToRange(intptr_t vreg, intptr_t from, intptr_t to);
+  LiveRange* AddUseToRange(intptr_t vreg,
+                           intptr_t block_start,
+                           intptr_t pos,
+                           Location* use_slot);
+  LiveRange* AddHintedUseToRange(intptr_t vreg,
+                                 intptr_t block_start,
+                                 intptr_t pos,
+                                 Location* use_slot,
+                                 Location* hint_slot);
   void CompleteRange(Definition* defn, LiveRange* range);
   void ProcessInitialDefinition(Definition* defn,
                                 LiveRange* range,
@@ -164,12 +174,9 @@
 
   intptr_t NumberOfRegisters() const { return number_of_registers_; }
 
-  // Test if [param] is live only after [catch_entry].
-  bool IsLiveAfterCatchEntry(CatchBlockEntryInstr* catch_entry,
-                             ParameterInstr* param);
-
-  // Find all safepoints that are covered by this live range.
-  void AssignSafepoints(Definition* defn, LiveRange* range);
+  // Add safepoint at position |pos| with location summary |locs| to
+  // live ranges in |alive_vregs| set.
+  void AddSafepointToAliveVregs(intptr_t pos, LocationSummary* locs);
 
   void PrepareForAllocation(Location::Kind register_kind,
                             intptr_t number_of_registers,
@@ -253,10 +260,6 @@
   // Allocate spill slot for synthetic :suspend_state variable.
   void AllocateSpillSlotForSuspendState();
 
-  // Mark synthetic :suspend_state variable as object in stackmaps
-  // at all safepoints.
-  void UpdateStackmapsForSuspendState();
-
   // Returns true if [defn] is an OsrEntry parameter
   // corresponding to a synthetic :suspend_state variable.
   bool IsSuspendStateParameter(Definition* defn);
@@ -311,6 +314,9 @@
   // Representation for SSA values indexed by SSA temp index.
   GrowableArray<Representation> value_representations_;
 
+  // Set of vregs which correspond to |ConstantInstr| definitions.
+  BitVector* constants_;
+
   const GrowableArray<BlockEntryInstr*>& block_order_;
   const GrowableArray<BlockEntryInstr*>& postorder_;
 
@@ -325,6 +331,10 @@
 
   SSALivenessAnalysis liveness_;
 
+  // Temporary vector used to track currently alive vregs while building
+  // live ranges.
+  BitVector* alive_vregs_;
+
   // Number of virtual registers.  Currently equal to the number of
   // SSA values.
   const intptr_t vreg_count_;
@@ -348,9 +358,6 @@
   // List of spilled live ranges.
   GrowableArray<LiveRange*> spilled_;
 
-  // List of instructions containing calls.
-  GrowableArray<Instruction*> safepoints_;
-
   Location::Kind register_kind_;
 
   intptr_t number_of_registers_;
@@ -384,6 +391,8 @@
 
   intptr_t cpu_spill_slot_count_;
 
+  intptr_t suspend_var_stack_index_ = -1;
+
   const bool intrinsic_mode_;
 
   DISALLOW_COPY_AND_ASSIGN(FlowGraphAllocator);
@@ -528,7 +537,6 @@
         first_use_interval_(nullptr),
         last_use_interval_(nullptr),
         first_safepoint_(nullptr),
-        last_safepoint_(nullptr),
         next_sibling_(nullptr),
         has_only_any_uses_in_loops_(0),
         is_loop_phi_(false),
@@ -620,7 +628,6 @@
         first_use_interval_(first_use_interval),
         last_use_interval_(last_use_interval),
         first_safepoint_(first_safepoint),
-        last_safepoint_(nullptr),
         next_sibling_(next_sibling),
         has_only_any_uses_in_loops_(0),
         is_loop_phi_(false),
@@ -636,7 +643,6 @@
   UseInterval* last_use_interval_;
 
   SafepointPosition* first_safepoint_;
-  SafepointPosition* last_safepoint_;
 
   LiveRange* next_sibling_;
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index ac5b6ad..985b3c2 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -240,8 +240,8 @@
       } else if (PeekTag() == kFieldInitializer) {
         has_field_initializers = true;
         ReadTag();
-        ReadBool();
         ReadPosition();
+        ReadBool();
         const NameIndex field_name = ReadCanonicalNameReference();
         const Field& field =
             Field::Handle(Z, H.LookupFieldByKernelField(field_name));
@@ -342,13 +342,20 @@
     intptr_t list_length = ReadListLength();  // read initializers list length.
     for (intptr_t i = 0; i < list_length; ++i) {
       Tag tag = ReadTag();
-      bool isSynthetic = ReadBool();  // read isSynthetic flag.
       switch (tag) {
-        case kInvalidInitializer:
-          UNIMPLEMENTED();
+        case kInvalidInitializer: {
+          ReadPosition();
+          const String& message = H.DartString(ReadStringReference());
+          // Invalid initializer message has pointer to the source code, no
+          // need to report it twice.
+          const auto& script = Script::Handle(Z, Script());
+          H.ReportError(script, TokenPosition::kNoSource, "%s",
+                        message.ToCString());
           return Fragment();
+        }
         case kFieldInitializer: {
           ReadPosition();  // read position.
+          ReadBool();      // read isSynthetic flag.
           ReadCanonicalNameReference();
           instructions += BuildFieldInitializer(
               Field::ZoneHandle(Z, initializer_fields[i]->ptr()),
@@ -356,11 +363,13 @@
           break;
         }
         case kAssertInitializer: {
+          ReadPosition();  // read position.
           instructions += BuildStatement();
           break;
         }
         case kSuperInitializer: {
           TokenPosition position = ReadPosition();  // read position.
+          bool isSynthetic = ReadBool();            // read isSynthetic flag.
           NameIndex canonical_target =
               ReadCanonicalNameReference();  // read target_reference.
 
@@ -402,13 +411,13 @@
 
           const Function& target = Function::ZoneHandle(
               Z, H.LookupConstructorByKernelConstructor(canonical_target));
-          instructions += StaticCall(
-              isSynthetic ? TokenPosition::kNoSource : position, target,
-              argument_count, argument_names, ICData::kStatic);
+          instructions += StaticCall(position, target, argument_count,
+                                     argument_names, ICData::kStatic);
           instructions += Drop();
           break;
         }
         case kLocalInitializer: {
+          ReadPosition();  // read position.
           // The other initializers following this one might read the variable.
           // This is used e.g. for evaluating the arguments to a super call
           // first, run normal field initializers next and then make the actual
@@ -1053,6 +1062,12 @@
   return BuildStatement();  // read statement.
 }
 
+Fragment StreamingFlowGraphBuilder::BuildStatementAtWithBranchCoverage(
+    intptr_t kernel_offset) {
+  SetOffset(kernel_offset);
+  return BuildStatementWithBranchCoverage();  // read statement.
+}
+
 Fragment StreamingFlowGraphBuilder::BuildExpression(TokenPosition* position) {
   ++num_ast_nodes_;
   uint8_t payload = 0;
@@ -1774,7 +1789,7 @@
     intptr_t finalizer_kernel_offset =
         B->try_finally_block_->finalizer_kernel_offset();
     B->try_finally_block_ = B->try_finally_block_->outer();
-    instructions += BuildStatementAt(finalizer_kernel_offset);
+    instructions += BuildStatementAtWithBranchCoverage(finalizer_kernel_offset);
 
     // We only need to make sure that if the finalizer ended normally, we
     // continue towards the next outer try-finally.
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index f058624..292951e 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -51,6 +51,7 @@
   void ReportUnexpectedTag(const char* variant, Tag tag) override;
 
   Fragment BuildStatementAt(intptr_t kernel_offset);
+  Fragment BuildStatementAtWithBranchCoverage(intptr_t kernel_offset);
 
   intptr_t num_ast_nodes() const { return num_ast_nodes_; }
 
diff --git a/runtime/vm/compiler/frontend/kernel_fingerprints.cc b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
index 427d2fa..a30db18 100644
--- a/runtime/vm/compiler/frontend/kernel_fingerprints.cc
+++ b/runtime/vm/compiler/frontend/kernel_fingerprints.cc
@@ -191,17 +191,20 @@
 
 void KernelFingerprintHelper::CalculateInitializerFingerprint() {
   Tag tag = ReadTag();
-  ReadByte();  // read isSynthetic flag.
   switch (tag) {
     case kInvalidInitializer:
+      ReadPosition();                         // read position.
+      CalculateStringReferenceFingerprint();  // read message
       return;
     case kFieldInitializer:
       ReadPosition();  // read position.
+      ReadByte();      // read isSynthetic flag.
       BuildHash(H.DartFieldName(ReadCanonicalNameReference()).Hash());
       CalculateExpressionFingerprint();  // read value.
       return;
     case kSuperInitializer:
       ReadPosition();                       // read position.
+      ReadByte();                           // read isSynthetic flag.
       CalculateCanonicalNameFingerprint();  // read target_reference
       CalculateArgumentsFingerprint();      // read arguments.
       return;
@@ -211,9 +214,11 @@
       CalculateArgumentsFingerprint();      // read arguments.
       return;
     case kLocalInitializer:
+      ReadPosition();                             // read position.
       CalculateVariableDeclarationFingerprint();  // read variable.
       return;
     case kAssertInitializer:
+      ReadPosition();  // read position.
       CalculateStatementFingerprint();
       return;
     default:
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 35e571c..f294eb2 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2511,17 +2511,20 @@
 
 void KernelReaderHelper::SkipInitializer() {
   Tag tag = ReadTag();
-  ReadByte();  // read isSynthetic flag.
   switch (tag) {
     case kInvalidInitializer:
+      ReadPosition();         // read position.
+      ReadStringReference();  // read message
       return;
     case kFieldInitializer:
       ReadPosition();                // read position.
+      ReadByte();                    // read isSynthetic flag.
       SkipCanonicalNameReference();  // read field_reference.
       SkipExpression();              // read value.
       return;
     case kSuperInitializer:
       ReadPosition();                // read position.
+      ReadByte();                    // read isSynthetic flag.
       SkipCanonicalNameReference();  // read target_reference.
       SkipArguments();               // read arguments.
       return;
@@ -2531,9 +2534,11 @@
       SkipArguments();               // read arguments.
       return;
     case kLocalInitializer:
+      ReadPosition();             // read position.
       SkipVariableDeclaration();  // read variable.
       return;
     case kAssertInitializer:
+      ReadPosition();  // read position.
       SkipStatement();
       return;
     default:
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index cd015e5..143e0ab 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -652,17 +652,20 @@
 
 void ScopeBuilder::VisitInitializer() {
   Tag tag = helper_.ReadTag();
-  helper_.ReadByte();  // read isSynthetic flag.
   switch (tag) {
     case kInvalidInitializer:
+      helper_.ReadPosition();         // read position.
+      helper_.ReadStringReference();  // read message
       return;
     case kFieldInitializer:
       helper_.ReadPosition();                // read position.
+      helper_.ReadByte();                    // read isSynthetic flag.
       helper_.SkipCanonicalNameReference();  // read field_reference.
       VisitExpression();                     // read value.
       return;
     case kSuperInitializer:
       helper_.ReadPosition();                // read position.
+      helper_.ReadByte();                    // read isSynthetic flag.
       helper_.SkipCanonicalNameReference();  // read target_reference.
       VisitArguments();                      // read arguments.
       return;
@@ -672,9 +675,11 @@
       VisitArguments();                      // read arguments.
       return;
     case kLocalInitializer:
+      helper_.ReadPosition();      // read position.
       VisitVariableDeclaration();  // read variable.
       return;
     case kAssertInitializer:
+      helper_.ReadPosition();  // read position.
       VisitStatement();
       return;
     default:
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index a5c42a4..3ba9540 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -28,7 +28,7 @@
     SuspendState_setErrorCallback, 0xd5e77404)                                 \
   V(AsyncLibrary, _SuspendState, _clone, SuspendState_clone, 0x751294d7)       \
   V(AsyncLibrary, _SuspendState, _resume, SuspendState_resume, 0x48d39768)     \
-  V(ConvertLibrary, _Utf8Decoder, _scan, Utf8DecoderScan, 0x903cbc3e)          \
+  V(ConvertLibrary, _Utf8Decoder, _scan, Utf8DecoderScan, 0x3948ffb0)          \
   V(CoreLibrary, ::, identical, ObjectIdentical, 0x03f96b55)                   \
   V(CoreLibrary, Object, Object., ObjectConstructor, 0xab6d6cf2)               \
   V(CoreLibrary, _Array, [], ObjectArrayGetIndexed, 0x78d7e092)                \
@@ -233,18 +233,18 @@
     0x56ff3b70)                                                                \
   V(MathLibrary, ::, min, MathMin, 0x63eb7469)                                 \
   V(MathLibrary, ::, max, MathMax, 0xf9320c82)                                 \
-  V(MathLibrary, ::, _doublePow, MathDoublePow, 0x424e2227)                    \
-  V(MathLibrary, ::, _intPow, MathIntPow, 0x9a0d648c)                          \
-  V(MathLibrary, ::, _sin, MathSin, 0x101882d8)                                \
-  V(MathLibrary, ::, _cos, MathCos, 0xf91585da)                                \
-  V(MathLibrary, ::, _tan, MathTan, 0xf720c4ea)                                \
-  V(MathLibrary, ::, _asin, MathAsin, 0xfe7986cb)                              \
-  V(MathLibrary, ::, _acos, MathAcos, 0x174c6974)                              \
-  V(MathLibrary, ::, _atan, MathAtan, 0x1ae3f717)                              \
-  V(MathLibrary, ::, _atan2, MathAtan2, 0x531004a9)                            \
-  V(MathLibrary, ::, _sqrt, MathSqrt, 0x1f167f7a)                              \
-  V(MathLibrary, ::, _exp, MathExp, 0x02565a46)                                \
-  V(MathLibrary, ::, _log, MathLog, 0x106c0978)                                \
+  V(MathLibrary, ::, _doublePow, MathDoublePow, 0x41e7435b)                    \
+  V(MathLibrary, ::, _intPow, MathIntPow, 0x831c7f0a)                          \
+  V(MathLibrary, ::, _sin, MathSin, 0x1e9ad4ea)                                \
+  V(MathLibrary, ::, _cos, MathCos, 0xf75f2165)                                \
+  V(MathLibrary, ::, _tan, MathTan, 0xfb847fa8)                                \
+  V(MathLibrary, ::, _asin, MathAsin, 0xf02d1b9e)                              \
+  V(MathLibrary, ::, _acos, MathAcos, 0xeda3de2d)                              \
+  V(MathLibrary, ::, _atan, MathAtan, 0xfc58e253)                              \
+  V(MathLibrary, ::, _atan2, MathAtan2, 0x751307ef)                            \
+  V(MathLibrary, ::, _sqrt, MathSqrt, 0x1cadc5cf)                              \
+  V(MathLibrary, ::, _exp, MathExp, 0x0c99a26a)                                \
+  V(MathLibrary, ::, _log, MathLog, 0xef163aae)                                \
   V(NativeWrappersLibrary, ::, _getNativeField, GetNativeField, 0x8a67a22d)    \
   V(TypedDataLibrary, _Int8List, [], Int8ArrayGetIndexed, 0x23133682)          \
   V(TypedDataLibrary, _ExternalInt8Array, [], ExternalInt8ArrayGetIndexed,     \
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index e2cc04a..463f4c9 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -249,35 +249,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x210;
+    ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0xec;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x28c;
+    ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x238;
+    ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x234;
+    ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x240;
+    ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0xc;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x4;
@@ -354,13 +354,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x100;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x454;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x44c;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x414;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x458;
+    Thread_service_extension_stream_offset = 0x450;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -967,35 +967,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -1072,13 +1072,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x200;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8a0;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x890;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x840;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8a8;
+    Thread_service_extension_stream_offset = 0x898;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -1685,35 +1685,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x210;
+    ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0xec;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x28c;
+    ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x238;
+    ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x234;
+    ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x240;
+    ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0xc;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x4;
@@ -1790,13 +1790,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x100;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x44c;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x444;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x408;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x450;
+    Thread_service_extension_stream_offset = 0x448;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -2402,35 +2402,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -2507,13 +2507,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x200;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8e8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8d8;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x888;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8f0;
+    Thread_service_extension_stream_offset = 0x8e0;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -3124,35 +3124,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -3229,13 +3229,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x208;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8a8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x898;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x848;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8b0;
+    Thread_service_extension_stream_offset = 0x8a0;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -3843,35 +3843,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -3948,13 +3948,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x208;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8f0;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8e0;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x890;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8f8;
+    Thread_service_extension_stream_offset = 0x8e8;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -4562,35 +4562,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x210;
+    ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0xec;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x28c;
+    ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x238;
+    ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x234;
+    ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x240;
+    ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0xc;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x4;
@@ -4667,13 +4667,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x100;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x47c;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x474;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x43c;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x480;
+    Thread_service_extension_stream_offset = 0x478;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -5281,35 +5281,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -5386,13 +5386,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x200;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8d8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8c8;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x878;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8e0;
+    Thread_service_extension_stream_offset = 0x8d0;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -5993,35 +5993,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x210;
+    ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0xec;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x28c;
+    ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x238;
+    ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x234;
+    ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x240;
+    ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0xc;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x4;
@@ -6098,13 +6098,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x100;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x454;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x44c;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x414;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x458;
+    Thread_service_extension_stream_offset = 0x450;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -6703,35 +6703,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -6808,13 +6808,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x200;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8a0;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x890;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x840;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8a8;
+    Thread_service_extension_stream_offset = 0x898;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -7413,35 +7413,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x210;
+    ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0xec;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x28c;
+    ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x238;
+    ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x234;
+    ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x240;
+    ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0xc;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x4;
@@ -7518,13 +7518,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x100;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x44c;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x444;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x408;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x450;
+    Thread_service_extension_stream_offset = 0x448;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -8122,35 +8122,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -8227,13 +8227,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x200;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8e8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8d8;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x888;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8f0;
+    Thread_service_extension_stream_offset = 0x8e0;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -8836,35 +8836,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -8941,13 +8941,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x208;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8a8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x898;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x848;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8b0;
+    Thread_service_extension_stream_offset = 0x8a0;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -9547,35 +9547,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -9652,13 +9652,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x208;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8f0;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8e0;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x890;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8f8;
+    Thread_service_extension_stream_offset = 0x8e8;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -10258,35 +10258,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x210;
+    ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0xec;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x28c;
+    ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x238;
+    ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x234;
+    ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x240;
+    ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0xc;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x4;
@@ -10363,13 +10363,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x100;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x47c;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x474;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x43c;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x480;
+    Thread_service_extension_stream_offset = 0x478;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -10969,35 +10969,35 @@
 static constexpr dart::compiler::target::word ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    ObjectStore_record_field_names_offset = 0x420;
+    ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word ObjectStore_string_type_offset =
     0x1d8;
 static constexpr dart::compiler::target::word ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    ObjectStore_ffi_callback_code_offset = 0x518;
+    ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_offset = 0x470;
+    ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_offset = 0x468;
+    ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_offset = 0x480;
+    ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word OneByteString_data_offset = 0x10;
 static constexpr dart::compiler::target::word PersistentHandle_ptr_offset = 0x0;
 static constexpr dart::compiler::target::word PointerBase_data_offset = 0x8;
@@ -11074,13 +11074,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x200;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xd0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8d8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x8c8;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     Thread_double_truncate_round_supported_offset = 0x878;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x8e0;
+    Thread_service_extension_stream_offset = 0x8d0;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -11710,35 +11710,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x210;
+    AOT_ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0xec;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x28c;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x238;
+    AOT_ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x234;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x240;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0xc;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -11823,13 +11823,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x454;
+    0x44c;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x414;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x458;
+    AOT_Thread_service_extension_stream_offset = 0x450;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -12506,35 +12506,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -12619,13 +12619,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8a0;
+    0x890;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8a8;
+    AOT_Thread_service_extension_stream_offset = 0x898;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13309,35 +13309,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -13422,13 +13422,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8e8;
+    0x8d8;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x888;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8f0;
+    AOT_Thread_service_extension_stream_offset = 0x8e0;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -14108,35 +14108,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -14221,13 +14221,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8a8;
+    0x898;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8b0;
+    AOT_Thread_service_extension_stream_offset = 0x8a0;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -14907,35 +14907,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -15020,13 +15020,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8f0;
+    0x8e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x890;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8f8;
+    AOT_Thread_service_extension_stream_offset = 0x8e8;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15708,35 +15708,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x210;
+    AOT_ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0xec;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x28c;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x238;
+    AOT_ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x234;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x240;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0xc;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -15821,13 +15821,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x47c;
+    0x474;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x43c;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x480;
+    AOT_Thread_service_extension_stream_offset = 0x478;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -16505,35 +16505,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -16618,13 +16618,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8d8;
+    0x8c8;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x878;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8e0;
+    AOT_Thread_service_extension_stream_offset = 0x8d0;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -17296,35 +17296,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x210;
+    AOT_ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0xec;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x28c;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x238;
+    AOT_ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x234;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x240;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0xc;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -17409,13 +17409,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x454;
+    0x44c;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x414;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x458;
+    AOT_Thread_service_extension_stream_offset = 0x450;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -18083,35 +18083,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -18196,13 +18196,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8a0;
+    0x890;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x840;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8a8;
+    AOT_Thread_service_extension_stream_offset = 0x898;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -18877,35 +18877,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -18990,13 +18990,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8e8;
+    0x8d8;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x888;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8f0;
+    AOT_Thread_service_extension_stream_offset = 0x8e0;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -19667,35 +19667,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -19780,13 +19780,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8a8;
+    0x898;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x848;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8b0;
+    AOT_Thread_service_extension_stream_offset = 0x8a0;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -20457,35 +20457,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -20570,13 +20570,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8f0;
+    0x8e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x70;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x890;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8f8;
+    AOT_Thread_service_extension_stream_offset = 0x8e8;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x258;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -21249,35 +21249,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0xb0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x210;
+    AOT_ObjectStore_record_field_names_offset = 0x214;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0xec;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x9c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x28c;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x290;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x238;
+    AOT_ObjectStore_suspend_state_await_offset = 0x23c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x23c;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x240;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x25c;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x260;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x234;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x238;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x248;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x24c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x254;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x258;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x240;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x244;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x244;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x248;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x250;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x254;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x258;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x25c;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x24c;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x250;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0xc;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -21362,13 +21362,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x47c;
+    0x474;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x34;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x43c;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x480;
+    AOT_Thread_service_extension_stream_offset = 0x478;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x128;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -22037,35 +22037,35 @@
 static constexpr dart::compiler::target::word AOT_ObjectStore_int_type_offset =
     0x160;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_record_field_names_offset = 0x420;
+    AOT_ObjectStore_record_field_names_offset = 0x428;
 static constexpr dart::compiler::target::word
     AOT_ObjectStore_string_type_offset = 0x1d8;
 static constexpr dart::compiler::target::word AOT_ObjectStore_type_type_offset =
     0x138;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_ffi_callback_code_offset = 0x518;
+    AOT_ObjectStore_ffi_callback_code_offset = 0x520;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_offset = 0x470;
+    AOT_ObjectStore_suspend_state_await_offset = 0x478;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x478;
+    AOT_ObjectStore_suspend_state_await_with_type_check_offset = 0x480;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4b8;
+    AOT_ObjectStore_suspend_state_handle_exception_offset = 0x4c0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_offset = 0x468;
+    AOT_ObjectStore_suspend_state_init_async_offset = 0x470;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x490;
+    AOT_ObjectStore_suspend_state_init_async_star_offset = 0x498;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4a8;
+    AOT_ObjectStore_suspend_state_init_sync_star_offset = 0x4b0;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_offset = 0x480;
+    AOT_ObjectStore_suspend_state_return_async_offset = 0x488;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x488;
+    AOT_ObjectStore_suspend_state_return_async_not_future_offset = 0x490;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a0;
+    AOT_ObjectStore_suspend_state_return_async_star_offset = 0x4a8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b0;
+    AOT_ObjectStore_suspend_state_suspend_sync_star_at_start_offset = 0x4b8;
 static constexpr dart::compiler::target::word
-    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x498;
+    AOT_ObjectStore_suspend_state_yield_async_star_offset = 0x4a0;
 static constexpr dart::compiler::target::word AOT_OneByteString_data_offset =
     0x10;
 static constexpr dart::compiler::target::word AOT_PersistentHandle_ptr_offset =
@@ -22150,13 +22150,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xd0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x8d8;
+    0x8c8;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x68;
 static constexpr dart::compiler::target::word
     AOT_Thread_double_truncate_round_supported_offset = 0x878;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x8e0;
+    AOT_Thread_service_extension_stream_offset = 0x8d0;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x250;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
diff --git a/runtime/vm/compiler/stub_code_compiler_riscv.cc b/runtime/vm/compiler/stub_code_compiler_riscv.cc
index d549740..6576d22 100644
--- a/runtime/vm/compiler/stub_code_compiler_riscv.cc
+++ b/runtime/vm/compiler/stub_code_compiler_riscv.cc
@@ -486,7 +486,7 @@
 #if defined(DART_TARGET_OS_FUCHSIA)
     // TODO(https://dartbug.com/52579): Remove.
     if (FLAG_precompiled_mode) {
-      GenerateLoadBSSEntry(BSS::Relocation::DRT_ExitIsolateGroupBoundIsolate,
+      GenerateLoadBSSEntry(BSS::Relocation::DLRT_ExitIsolateGroupBoundIsolate,
                            T1, T2);
     } else {
       const intptr_t kPCRelativeLoadOffset = 12;
@@ -1312,18 +1312,39 @@
                     target::Array::data_offset() - kHeapObjectTag);
     // R3: iterator which initially points to the start of the variable
     // data area to be initialized.
-    Label loop;
-    __ Bind(&loop);
-    for (intptr_t offset = 0; offset < target::kObjectAlignment;
-         offset += target::kCompressedWordSize) {
-      __ StoreCompressedIntoObjectNoBarrier(AllocateArrayABI::kResultReg,
-                                            Address(T3, offset), NULL_REG);
+
+    if (__ Supports(RV_V)) {
+      Register remaining_length = TMP;
+      Register vl = TMP2;
+      __ SmiUntag(remaining_length, AllocateArrayABI::kLengthReg);
+      Label loop;
+      __ Bind(&loop);
+#if XLEN == 32
+      __ vsetvli(vl, remaining_length, e32, m8, ta, ma);
+      __ vmvvx(V0, NULL_REG);
+      __ vse32v(V0, Address(T3));
+#else
+      __ vsetvli(vl, remaining_length, e64, m8, ta, ma);
+      __ vmvvx(V0, NULL_REG);
+      __ vse64v(V0, Address(T3));
+#endif
+      __ sub(remaining_length, remaining_length, vl);
+      __ AddShifted(T3, T3, vl, target::kWordSizeLog2);  // Bump dest.
+      __ bnez(remaining_length, &loop);
+    } else {
+      Label loop;
+      __ Bind(&loop);
+      for (intptr_t offset = 0; offset < target::kObjectAlignment;
+           offset += target::kCompressedWordSize) {
+        __ StoreCompressedIntoObjectNoBarrier(AllocateArrayABI::kResultReg,
+                                              Address(T3, offset), NULL_REG);
+      }
+      // Safe to only check every kObjectAlignment bytes instead of each word.
+      ASSERT(kAllocationRedZoneSize >= target::kObjectAlignment);
+      __ addi(T3, T3, target::kObjectAlignment);
+      __ bltu(T3, T4, &loop);
+      __ WriteAllocationCanary(T4);  // Fix overshoot.
     }
-    // Safe to only check every kObjectAlignment bytes instead of each word.
-    ASSERT(kAllocationRedZoneSize >= target::kObjectAlignment);
-    __ addi(T3, T3, target::kObjectAlignment);
-    __ bltu(T3, T4, &loop);
-    __ WriteAllocationCanary(T4);  // Fix overshoot.
 
     // Done allocating and initializing the array.
     // AllocateArrayABI::kResultReg: new object.
@@ -1417,6 +1438,9 @@
 
 #if defined(DART_TARGET_OS_FUCHSIA) || defined(DART_TARGET_OS_ANDROID)
   __ sx(GP, Address(A3, target::Thread::saved_shadow_call_stack_offset()));
+  // TODO(riscv): Enable once Fuchsia/Android have Zimop in their baseline.
+  // __ ssrdp(TMP);
+  // __ sx(TMP, Address(A3, target::Thread::saved_ss_offset()));
 #elif defined(USING_SHADOW_CALL_STACK)
 #error Unimplemented
 #endif
@@ -1635,10 +1659,26 @@
     // Initialize the context variables.
     // A0: new object.
     // T1: number of context variables.
-    {
+    __ AddImmediate(T3, A0,
+                    target::Context::variable_offset(0) - kHeapObjectTag);
+    if (__ Supports(RV_V)) {
+      Register vl = TMP2;
+      Label loop;
+      __ Bind(&loop);
+#if XLEN == 32
+      __ vsetvli(vl, T1, e32, m8, ta, ma);
+      __ vmvvx(V0, NULL_REG);
+      __ vse32v(V0, Address(T3));
+#else
+      __ vsetvli(vl, T1, e64, m8, ta, ma);
+      __ vmvvx(V0, NULL_REG);
+      __ vse64v(V0, Address(T3));
+#endif
+      __ sub(T1, T1, vl);                                // Remaining elements.
+      __ AddShifted(T3, T3, vl, target::kWordSizeLog2);  // Bump dest.
+      __ bnez(T1, &loop);
+    } else {
       Label loop, done;
-      __ AddImmediate(T3, A0,
-                      target::Context::variable_offset(0) - kHeapObjectTag);
       __ Bind(&loop);
       __ subi(T1, T1, 1);
       __ bltz(T1, &done);
@@ -3001,6 +3041,12 @@
   // and Exceptions::JumpToFrame, otherwise the shadow call stack might
   // eventually overflow.
   __ lx(GP, Address(THR, target::Thread::saved_shadow_call_stack_offset()));
+  // TODO(riscv): Enable once Fuchsia/Android have Zimop in their baseline.
+  // __ lx(TMP, Address(THR, target::Thread::saved_ss_offset()));
+  // Label ss_disabled;
+  // __ beqz(TMP, &ss_disabled);
+  // __ csrw(0x011, TMP);
+  // __ Bind(&ss_disabled);
 #elif defined(USING_SHADOW_CALL_STACK)
 #error Unimplemented
 #endif
@@ -3521,17 +3567,53 @@
     __ AddImmediate(T3, A0, target::TypedData::HeaderSize() - 1);
     __ StoreInternalPointer(
         A0, FieldAddress(A0, target::PointerBase::data_offset()), T3);
-    Label loop;
-    __ Bind(&loop);
-    for (intptr_t offset = 0; offset < target::kObjectAlignment;
-         offset += target::kWordSize) {
-      __ sx(ZR, Address(T3, offset));
+
+    if (__ Supports(RV_V) && element_size <= 8) {
+      Register remaining_length = TMP;
+      Register vl = TMP2;
+      __ SmiUntag(remaining_length, AllocateTypedDataArrayABI::kLengthReg);
+      Label loop;
+      __ Bind(&loop);
+      switch (element_size) {
+        case 1:
+          __ vsetvli(vl, remaining_length, e8, m8, ta, ma);
+          __ vmvvx(V0, ZR);
+          __ vse8v(V0, Address(T3));
+          break;
+        case 2:
+          __ vsetvli(vl, remaining_length, e16, m8, ta, ma);
+          __ vmvvx(V0, ZR);
+          __ vse16v(V0, Address(T3));
+          break;
+        case 4:
+          __ vsetvli(vl, remaining_length, e32, m8, ta, ma);
+          __ vmvvx(V0, ZR);
+          __ vse32v(V0, Address(T3));
+          break;
+        case 8:
+          __ vsetvli(vl, remaining_length, e64, m8, ta, ma);
+          __ vmvvx(V0, ZR);
+          __ vse64v(V0, Address(T3));
+          break;
+        default:
+          UNREACHABLE();
+      }
+      __ sub(remaining_length, remaining_length, vl);
+      __ AddShifted(T3, T3, vl, scale_shift);  // Bump dest.
+      __ bnez(remaining_length, &loop);
+    } else {
+      Label loop;
+      __ Bind(&loop);
+      for (intptr_t offset = 0; offset < target::kObjectAlignment;
+           offset += target::kWordSize) {
+        __ sx(ZR, Address(T3, offset));
+      }
+      // Safe to only check every kObjectAlignment bytes instead of each word.
+      ASSERT(kAllocationRedZoneSize >= target::kObjectAlignment);
+      __ addi(T3, T3, target::kObjectAlignment);
+      __ bltu(T3, T4, &loop);
+      __ WriteAllocationCanary(T4);  // Fix overshoot.
     }
-    // Safe to only check every kObjectAlignment bytes instead of each word.
-    ASSERT(kAllocationRedZoneSize >= target::kObjectAlignment);
-    __ addi(T3, T3, target::kObjectAlignment);
-    __ bltu(T3, T4, &loop);
-    __ WriteAllocationCanary(T4);  // Fix overshoot.
 
     __ Ret();
 
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 19f2ceb..5267665d 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -1318,8 +1318,9 @@
 float ReciprocalSqrtEstimate(float op);
 float ReciprocalSqrtStep(float op1, float op2);
 
-constexpr uword kBreakInstructionFiller = 0xE1200070;   // bkpt #0
-constexpr uword kDataMemoryBarrier = 0xf57ff050 | 0xb;  // dmb ish
+constexpr uword kBreakInstructionFiller = 0xE1200070;  // bkpt #0
+constexpr uword kDMB_ISH = 0xf57ff05b;                 // dmb ish
+constexpr uword kDMB_ISHST = 0xf57ff05a;               // dmb ishst
 
 struct LinkRegister {
   const int32_t code = LR;
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 3f980ed..e32ae63 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -1614,7 +1614,8 @@
 
   static int64_t VFPExpandImm(uint8_t imm8) {
     const int64_t sign = static_cast<int64_t>((imm8 & 0x80) >> 7) << 63;
-    const int64_t hi_exp = static_cast<int64_t>(!((imm8 & 0x40) >> 6)) << 62;
+    const int64_t hi_exp = static_cast<int64_t>(((imm8 & 0x40) >> 6) == 0)
+                           << 62;
     const int64_t mid_exp = (((imm8 & 0x40) >> 6) == 0) ? 0 : (0xffLL << 54);
     const int64_t low_exp = static_cast<int64_t>((imm8 & 0x30) >> 4) << 52;
     const int64_t frac = static_cast<int64_t>(imm8 & 0x0f) << 48;
@@ -1633,7 +1634,8 @@
 };
 
 const uint64_t kBreakInstructionFiller = 0xD4200000D4200000L;  // brk #0; brk #0
-constexpr int32_t kDataMemoryBarrier = 0xD5033BBF;             // dmb ish
+constexpr int32_t kDMB_ISH = 0xD5033BBF;                       // dmb ish
+constexpr int32_t kDMB_ISHST = 0xD5033ABF;                     // dmb ishst
 
 struct LinkRegister {};
 
diff --git a/runtime/vm/constants_riscv.cc b/runtime/vm/constants_riscv.cc
index 49415a2..a52f0c4 100644
--- a/runtime/vm/constants_riscv.cc
+++ b/runtime/vm/constants_riscv.cc
@@ -29,6 +29,12 @@
     "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11",
 };
 
+const char* const vector_reg_names[kNumberOfVectorRegisters] = {
+    "v0",  "v1",  "v2",  "v3",  "v4",  "v5",  "v6",  "v7",  "v8",  "v9",  "v10",
+    "v11", "v12", "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21",
+    "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31",
+};
+
 const Register CallingConventions::ArgumentRegisters[] = {
     // A3/A4/A5 are assigned to TMP/TMP2/PP. This assignment is important for
     // reducing code size. To minimize distruption to the rest of the compiler,
diff --git a/runtime/vm/constants_riscv.h b/runtime/vm/constants_riscv.h
index 00ffd8b..739a860 100644
--- a/runtime/vm/constants_riscv.h
+++ b/runtime/vm/constants_riscv.h
@@ -131,6 +131,43 @@
   kNoFpuRegister = -1,
 };
 
+enum VRegister {
+  V0 = 0,
+  V1 = 1,
+  V2 = 2,
+  V3 = 3,
+  V4 = 4,
+  V5 = 5,
+  V6 = 6,
+  V7 = 7,
+  V8 = 8,
+  V9 = 9,
+  V10 = 10,
+  V11 = 11,
+  V12 = 12,
+  V13 = 13,
+  V14 = 14,
+  V15 = 15,
+  V16 = 16,
+  V17 = 17,
+  V18 = 18,
+  V19 = 19,
+  V20 = 20,
+  V21 = 21,
+  V22 = 22,
+  V23 = 23,
+  V24 = 24,
+  V25 = 25,
+  V26 = 26,
+  V27 = 27,
+  V28 = 28,
+  V29 = 29,
+  V30 = 30,
+  V31 = 31,
+  kNumberOfVectorRegisters = 32,
+  kNoVectorRegister = -1,
+};
+
 // Register alias for floating point scratch register.
 const FRegister FTMP = FT11;
 
@@ -143,6 +180,7 @@
 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 vector_reg_names[kNumberOfVectorRegisters];
 
 // Register aliases.
 constexpr Register TMP = A3;  // Used as scratch register by assembler.
@@ -741,11 +779,17 @@
   FNMSUB = 0b1001011,
   FNMADD = 0b1001111,
   OPFP = 0b1010011,
+  OPV = 0b1010111,
 };
 
 enum Funct12 {
   ECALL = 0,
   EBREAK = 1,
+
+  MOP_R_MASK = 0b101100111100,
+  MOP_R = 0b100000011100,
+  SSPOPCHK = 0b110011011100,
+  SSRDP = 0b110011011100,
 };
 
 enum Funct3 {
@@ -793,12 +837,14 @@
   FENCE = 0b000,
   FENCEI = 0b001,
 
+  PRIV = 0b000,
   CSRRW = 0b001,
   CSRRS = 0b010,
   CSRRC = 0b011,
   CSRRWI = 0b101,
   CSRRSI = 0b110,
   CSRRCI = 0b111,
+  MOP = 0b100,
 
   MUL = 0b000,
   MULH = 0b001,
@@ -819,9 +865,17 @@
   WIDTH16 = 0b001,
   WIDTH32 = 0b010,
   WIDTH64 = 0b011,
+  WIDTH128 = 0b100,
 
+  H = 0b001,
   S = 0b010,
   D = 0b011,
+  Q = 0b100,
+  E8 = 0b000,
+  E16 = 0b101,
+  E32 = 0b110,
+  E64 = 0b111,
+
   J = 0b000,
   JN = 0b001,
   JX = 0b010,
@@ -862,6 +916,15 @@
 
   CZEROEQZ = 0b101,
   CZERONEZ = 0b111,
+
+  OPIVV = 0b000,
+  OPFVV = 0b001,
+  OPMVV = 0b010,
+  OPIVI = 0b011,
+  OPIVX = 0b100,
+  OPFVF = 0b101,
+  OPMVX = 0b110,
+  OPCFG = 0b111,
 };
 
 enum Funct7 {
@@ -913,6 +976,25 @@
   BSET = 0b0010100,
 
   CZERO = 0b0000111,
+
+  MOP_RR_MASK = 0b1011001,
+  MOP_RR = 0b1000001,
+  SSPUSH = 0b1100111,
+};
+
+enum Funct6 {
+  VADD = 0b000000,
+  VSUB = 0b000010,
+  VRSUB = 0b000011,
+  VMINU = 0b000100,
+  VMIN = 0b000101,
+  VMAXU = 0b000110,
+  VMAX = 0b000111,
+  VAND = 0b001001,
+  VOR = 0b001010,
+  VXOR = 0b001011,
+
+  VMV = 0b010111,
 };
 
 enum Funct5 {
@@ -929,6 +1011,8 @@
   AMOMAXU = 0b11100,
   LOADORDERED = 0b00110,
   STOREORDERED = 0b00111,
+  SSAMOSWAP = 0b01001,
+  AMOCAS = 0b00101,
 };
 
 enum Funct2 {
@@ -978,6 +1062,45 @@
 const intptr_t kReleaseShift = 25;
 const intptr_t kAcquireShift = 26;
 
+enum ElementWidth {
+  e8 = 0b000,
+  e16 = 0b001,
+  e32 = 0b010,
+  e64 = 0b011,
+
+  reservedsew1 = 0b100,
+  reservedsew2 = 0b101,
+  reservedsew3 = 0b110,
+  reservedsew4 = 0b111,
+};
+
+enum LengthMultiplier {
+  mf8 = 0b101,
+  mf4 = 0b110,
+  mf2 = 0b111,
+  m1 = 0b000,
+  m2 = 0b001,
+  m4 = 0b010,
+  m8 = 0b011,
+
+  reservedlmul1 = 0b100,
+};
+
+enum MaskMode {
+  mu = 0,  // Mask undisturbed
+  ma = 1,  // Mask agnostic
+};
+
+enum TailMode {
+  tu = 0,  // Tail undisturbed
+  ta = 1,  // Mask agnosticagnostic
+};
+
+enum VectorMask {
+  v0t = 0,
+  unmasked = 1 << 25,
+};
+
 constexpr uint32_t kFlisConstants[32] = {
     0xbf800000,  // -1.0
     0x00800000,  // min positive normal
@@ -1067,6 +1190,10 @@
 DEFINE_REG_ENCODING(FRegister, FRs1, 15)
 DEFINE_REG_ENCODING(FRegister, FRs2, 20)
 DEFINE_REG_ENCODING(FRegister, FRs3, 27)
+DEFINE_REG_ENCODING(VRegister, Vd, 7)
+DEFINE_REG_ENCODING(VRegister, Vs1, 15)
+DEFINE_REG_ENCODING(VRegister, Vs2, 20)
+DEFINE_REG_ENCODING(VRegister, Vs3, 7)
 #undef DEFINE_REG_ENCODING
 
 #define DEFINE_FUNCT_ENCODING(type, name, shift, mask)                         \
@@ -1085,6 +1212,7 @@
 DEFINE_FUNCT_ENCODING(Funct2, Funct2, 25, 0x3)
 DEFINE_FUNCT_ENCODING(Funct3, Funct3, 12, 0x7)
 DEFINE_FUNCT_ENCODING(Funct5, Funct5, 27, 0x1F)
+DEFINE_FUNCT_ENCODING(Funct6, Funct6, 26, 0x3F)
 DEFINE_FUNCT_ENCODING(Funct7, Funct7, 25, 0x7F)
 DEFINE_FUNCT_ENCODING(Funct12, Funct12, 20, 0xFFF)
 #if XLEN == 32
@@ -1186,6 +1314,40 @@
   imm |= (((encoded >> 7) & 0x1f) << 0);
   return SignExtend(12, imm);
 }
+inline bool IsMoprn(intptr_t imm) {
+  return Utils::IsUint(5, imm);
+}
+inline uint32_t EncodeMoprn(intptr_t imm) {
+  ASSERT(IsMoprn(imm));
+  uint32_t encoded = 0;
+  encoded |= ((imm >> 4) & 0x1) << 30;
+  encoded |= ((imm >> 2) & 0x3) << 26;
+  encoded |= ((imm >> 0) & 0x3) << 20;
+  return encoded;
+}
+inline intptr_t DecodeMoprn(uint32_t encoded) {
+  uint32_t n = 0;
+  n |= (((encoded >> 30) & 0x1) << 4);
+  n |= (((encoded >> 26) & 0x3) << 2);
+  n |= (((encoded >> 20) & 0x3) << 0);
+  return n;
+}
+inline bool IsMoprrn(intptr_t imm) {
+  return Utils::IsUint(3, imm);
+}
+inline uint32_t EncodeMoprrn(intptr_t imm) {
+  ASSERT(IsMoprrn(imm));
+  uint32_t encoded = 0;
+  encoded |= ((imm >> 2) & 0x1) << 30;
+  encoded |= ((imm >> 0) & 0x3) << 26;
+  return encoded;
+}
+inline intptr_t DecodeMoprrn(uint32_t encoded) {
+  uint32_t n = 0;
+  n |= (((encoded >> 30) & 0x1) << 2);
+  n |= (((encoded >> 26) & 0x3) << 0);
+  return n;
+}
 
 inline bool IsCInstruction(uint16_t parcel) {
   return (parcel & 3) != 3;
@@ -1209,9 +1371,16 @@
   FRegister frs2() const { return DecodeFRs2(encoding_); }
   FRegister frs3() const { return DecodeFRs3(encoding_); }
 
+  VRegister vd() const { return DecodeVd(encoding_); }
+  VRegister vs1() const { return DecodeVs1(encoding_); }
+  VRegister vs2() const { return DecodeVs2(encoding_); }
+  VRegister vs3() const { return DecodeVs3(encoding_); }
+  bool vm() const { return (encoding_ & 1 << 25) == 0; }
+
   Funct2 funct2() const { return DecodeFunct2(encoding_); }
   Funct3 funct3() const { return DecodeFunct3(encoding_); }
   Funct5 funct5() const { return DecodeFunct5(encoding_); }
+  Funct6 funct6() const { return DecodeFunct6(encoding_); }
   Funct7 funct7() const { return DecodeFunct7(encoding_); }
   Funct12 funct12() const { return DecodeFunct12(encoding_); }
 
@@ -1571,6 +1740,21 @@
   return imm;
 }
 
+inline bool IsCMopn(uint32_t imm) {
+  return (imm < 16) && ((imm & 1) == 1);
+}
+inline uint32_t EncodeCMopn(intptr_t imm) {
+  ASSERT(IsCMopn(imm));
+  uint32_t encoding = 0;
+  encoding |= ((imm >> 0) & 0xF) << 7;
+  return encoding;
+}
+inline intptr_t DecodeCMopn(uint32_t encoding) {
+  uint32_t imm = 0;
+  imm |= ((encoding >> 7) & 0xF) << 0;
+  return imm;
+}
+
 enum COpcode {
   C_OP_MASK = 0b1110000000000011,
 
@@ -1640,6 +1824,11 @@
   C_LHU = 0b1000010000000000,
   C_SB = 0b1000100000000000,
   C_SH = 0b1000110000000000,
+
+  C_MOP_MASK = 0b1111100011111111,
+  C_MOP = 0b0110000010000001,
+  C_SSPUSH = 0b0110000010000001,
+  C_SSPOPCHK = 0b0110001010000001,
 };
 
 class CInstr {
@@ -1752,25 +1941,31 @@
 static constexpr Extension RV_A(2);  // Atomic
 static constexpr Extension RV_F(3);  // Single-precision floating point
 static constexpr Extension RV_D(4);  // Double-precision floating point
-static constexpr Extension RV_C(5);  // Compressed instructions
+static constexpr Extension RV_Q(5);  // Quad-precision floating point
+static constexpr Extension RV_C(6);  // Compressed instructions
 static constexpr ExtensionSet RV_G = RV_I | RV_M | RV_A | RV_F | RV_D;
 static constexpr ExtensionSet RV_GC = RV_G | RV_C;
 static constexpr ExtensionSet RVA20 = RV_GC;
-static constexpr Extension RV_Zba(6);  // Address generation
-static constexpr Extension RV_Zbb(7);  // Basic bit-manipulation
-static constexpr Extension RV_Zbs(8);  // Single-bit instructions
-static constexpr Extension RV_Zbc(9);  // Carry-less multiplication
+static constexpr Extension RV_Zba(7);   // Address generation
+static constexpr Extension RV_Zbb(8);   // Basic bit-manipulation
+static constexpr Extension RV_Zbs(9);   // Single-bit instructions
+static constexpr Extension RV_Zbc(10);  // Carry-less multiplication
 static constexpr ExtensionSet RV_B = RV_Zba | RV_Zbb | RV_Zbs;
 static constexpr ExtensionSet RV_GCB = RV_GC | RV_B;
 static constexpr ExtensionSet RVA22 = RV_GCB;
-static constexpr Extension RV_V(10);       // Vector
-static constexpr Extension RV_Zicond(11);  // Integer conditional operations
-static constexpr Extension RV_Zcb(12);     // More compressed instructions
-static constexpr Extension RV_Zfa(13);     // Additional floating-point
+static constexpr Extension RV_V(11);       // Vector
+static constexpr Extension RV_Zicond(12);  // Integer conditional operations
+static constexpr Extension RV_Zcb(13);     // More compressed instructions
+static constexpr Extension RV_Zfa(14);     // Additional floating-point
+static constexpr Extension RV_Zimop(15);   // May-be-operations
+static constexpr Extension RV_Zcmop(16);   // Compressed may-be-operations
 static constexpr ExtensionSet RVA23 =
-    RV_GCB | RV_V | RV_Zicond | RV_Zcb | RV_Zfa;
-static constexpr Extension RV_Zabha(14);   // Byte and halfword AMOs
-static constexpr Extension RV_Zalasr(15);  // Load-acquire, store-release
+    RVA22 | RV_V | RV_Zicond | RV_Zcb | RV_Zfa | RV_Zimop | RV_Zcmop;
+static constexpr Extension RV_Zicfiss(17);  // Shadow stack
+static constexpr Extension RV_Zabha(18);    // Byte and halfword AMOs
+static constexpr Extension RV_Zalasr(19);   // Load-acquire, store-release
+static constexpr Extension RV_Zfhmin(20);   // Load-acquire, store-release
+static constexpr Extension RV_Zacas(21);    // Compare-and-swap
 
 #if defined(DART_TARGET_OS_ANDROID)
 static constexpr ExtensionSet RV_baseline = RVA23;
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index b18fbf6..0e91d55 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -7,7 +7,6 @@
 
 #include "vm/dart.h"
 
-#include "platform/thread_sanitizer.h"
 #include "platform/unwinding_records.h"
 
 #include "vm/app_snapshot.h"
@@ -1083,8 +1082,9 @@
   if (Snapshot::IncludesCode(kind)) {
     VM_GLOBAL_FLAG_LIST(ADD_P, ADD_R, ADD_C, ADD_D);
 
-    ADD_FLAG(tsan, FLAG_target_thread_sanitizer)
+    ADD_FLAG(asan, FLAG_target_address_sanitizer)
     ADD_FLAG(msan, FLAG_target_memory_sanitizer)
+    ADD_FLAG(tsan, FLAG_target_thread_sanitizer)
     ADD_FLAG(shared_data, FLAG_experimental_shared_data)
 
     if (kind == Snapshot::kFullJIT) {
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 33ab56e..95a804d 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -10,7 +10,10 @@
 #include <utility>
 
 #include "lib/stacktrace.h"
+#include "platform/address_sanitizer.h"
 #include "platform/assert.h"
+#include "platform/memory_sanitizer.h"
+#include "platform/thread_sanitizer.h"
 #include "platform/unicode.h"
 #include "vm/app_snapshot.h"
 #include "vm/bytecode_reader.h"
@@ -36,6 +39,7 @@
 #include "vm/message.h"
 #include "vm/message_handler.h"
 #include "vm/message_snapshot.h"
+#include "vm/module_snapshot.h"
 #include "vm/native_entry.h"
 #include "vm/native_symbol.h"
 #include "vm/object.h"
@@ -1577,23 +1581,23 @@
 }
 
 DART_EXPORT void Dart_ThreadDisableProfiling() {
-#if !defined(PRODUCT)
+#if defined(DART_INCLUDE_PROFILER)
   OSThread* os_thread = OSThread::Current();
   if (os_thread == nullptr) {
     return;
   }
   os_thread->DisableThreadInterrupts();
-#endif  // !defined(PRODUCT)
+#endif  // defined(DART_INCLUDE_PROFILER)
 }
 
 DART_EXPORT void Dart_ThreadEnableProfiling() {
-#if !defined(PRODUCT)
+#if defined(DART_INCLUDE_PROFILER)
   OSThread* os_thread = OSThread::Current();
   if (os_thread == nullptr) {
     return;
   }
   os_thread->EnableThreadInterrupts();
-#endif  // !defined(PRODUCT)
+#endif  // defined(DART_INCLUDE_PROFILER)
 }
 
 DART_EXPORT void Dart_AddSymbols(const char* dso_name,
@@ -5414,6 +5418,30 @@
 #endif
     }
 
+    if (name.Equals(Symbols::DartVMASAN())) {
+#ifdef USING_ADDRESS_SANITIZER
+      return Symbols::True().ptr();
+#else
+      return Symbols::False().ptr();
+#endif
+    }
+
+    if (name.Equals(Symbols::DartVMMSAN())) {
+#ifdef USING_MEMORY_SANITIZER
+      return Symbols::True().ptr();
+#else
+      return Symbols::False().ptr();
+#endif
+    }
+
+    if (name.Equals(Symbols::DartVMTSAN())) {
+#ifdef USING_THREAD_SANITIZER
+      return Symbols::True().ptr();
+#else
+      return Symbols::False().ptr();
+#endif
+    }
+
     if (name.Equals(Symbols::DartDeveloperTimeline())) {
 #ifdef SUPPORT_TIMELINE
       return Symbols::True().ptr();
@@ -5635,6 +5663,39 @@
 #endif  // defined(DART_DYNAMIC_MODULES)
 }
 
+DART_EXPORT DART_API_WARN_UNUSED_RESULT Dart_Handle
+Dart_LoadModuleSnapshot(const uint8_t* snapshot_data,
+                        const uint8_t* snapshot_instructions) {
+#if defined(DART_PRECOMPILED_RUNTIME)
+  return Api::NewError("%s: Cannot load module snapshots on an AOT runtime.",
+                       CURRENT_FUNC);
+#else
+  DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
+  CHECK_CALLBACK_STATE(T);
+
+#if defined(SUPPORT_TIMELINE)
+  TimelineBeginEndScope tbes(T, Timeline::GetIsolateStream(),
+                             "ReadModuleSnapshot");
+#endif  // defined(SUPPORT_TIMELINE)
+  const Snapshot* snapshot = Snapshot::SetupFromBuffer(snapshot_data);
+  if (snapshot == nullptr) {
+    return Api::NewError("Invalid snapshot");
+  }
+  if (snapshot->kind() != Snapshot::kModule) {
+    return Api::NewError("Invalid snapshot kind");
+  }
+
+  const Error& error = Error::Handle(
+      module_snapshot::ReadModuleSnapshot(T, snapshot, snapshot_instructions));
+  if (!error.IsNull()) {
+    return Api::NewHandle(T, error.ptr());
+  }
+
+  return Api::Success();
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
+}
+
 DART_EXPORT Dart_Handle Dart_RootLibrary() {
   Thread* thread = Thread::Current();
   IsolateGroup* isolate_group = thread->isolate_group();
@@ -6616,7 +6677,7 @@
 static constexpr intptr_t kInitialSize = 2 * MB;
 static constexpr intptr_t kInitialDebugSize = 1 * MB;
 
-static void CreateAppAOTSnapshot(
+static void CreateAppAOTSnapshotHelper(
     Dart_StreamingWriteCallback callback,
     void* callback_data,
     bool strip,
@@ -6626,7 +6687,8 @@
     LoadingUnitSerializationData* unit,
     uint32_t program_hash,
     const char* identifier,
-    const char* path) {
+    const char* path,
+    void* object_callback_data) {
   Thread* T = Thread::Current();
 
   NOT_IN_PRODUCT(TimelineBeginEndScope tbes2(T, Timeline::GetIsolateStream(),
@@ -6671,6 +6733,14 @@
                                          : kInitialSize,
                                      callback, callback_data);
 
+  // Should not be directly used below as writing to it when
+  // [object_callback_data] is null causes a crash. Instead, use
+  // [object_stream], which is appropriately nullptr in this case.
+  StreamingWriteStream object_stream_value(kInitialSize, callback,
+                                           object_callback_data);
+  StreamingWriteStream* object_stream =
+      object_callback_data != nullptr ? &object_stream_value : nullptr;
+
   auto const use_output_writer = [&](ImageWriter* image_writer) {
     FullSnapshotWriter writer(Snapshot::kFullAOT, &vm_snapshot_data,
                               &isolate_snapshot_data, image_writer,
@@ -6693,9 +6763,15 @@
     so = new (Z)
         ElfWriter(Z, &output_stream, SharedObjectWriter::Type::Snapshot, dwarf);
   } else if (format == Dart_AotBinaryFormat_MachO_Dylib) {
+    MachOWriter* object_writer = nullptr;
+    if (object_stream != nullptr) {
+      object_writer = new (Z)
+          MachOWriter(Z, object_stream, SharedObjectWriter::Type::Object,
+                      identifier, path, dwarf);
+    }
     so = new (Z)
         MachOWriter(Z, &output_stream, SharedObjectWriter::Type::Snapshot,
-                    identifier, path, dwarf);
+                    identifier, path, dwarf, object_writer);
   }
 
   if (format == Dart_AotBinaryFormat_Assembly) {
@@ -6704,13 +6780,44 @@
                                         strip, debug_so);
     use_output_writer(&assembly_writer);
   } else {
-    BlobImageWriter blob_writer(T, &vm_snapshot_instructions,
-                                &isolate_snapshot_instructions,
-                                deobfuscation_trie, debug_so, so);
+    BlobImageWriter blob_writer(
+        T, &vm_snapshot_instructions, &isolate_snapshot_instructions,
+        deobfuscation_trie, debug_so, so,
+        /*needs_unique_names=*/object_callback_data != nullptr);
     use_output_writer(&blob_writer);
   }
 }
 
+static void CreateAppAOTProgramSnapshot(Dart_StreamingWriteCallback callback,
+                                        void* callback_data,
+                                        bool strip,
+                                        Dart_AotBinaryFormat format,
+                                        void* debug_callback_data,
+                                        const char* identifier = nullptr,
+                                        const char* path = nullptr,
+                                        void* object_callback_data = nullptr) {
+  CreateAppAOTSnapshotHelper(
+      callback, callback_data, strip, format, debug_callback_data,
+      /*units=*/nullptr,
+      /*unit=*/nullptr,
+      /*program_hash=*/0, identifier, path, object_callback_data);
+}
+
+static void CreateAppAOTUnitSnapshot(
+    Dart_StreamingWriteCallback callback,
+    void* callback_data,
+    bool strip,
+    Dart_AotBinaryFormat format,
+    void* debug_callback_data,
+    GrowableArray<LoadingUnitSerializationData*>* units,
+    LoadingUnitSerializationData* unit,
+    uint32_t program_hash) {
+  CreateAppAOTSnapshotHelper(callback, callback_data, strip, format,
+                             debug_callback_data, units, unit, program_hash,
+                             /*identifier=*/nullptr, /*path=*/nullptr,
+                             /*object_callback_data=*/nullptr);
+}
+
 static void Split(Dart_CreateLoadingUnitCallback next_callback,
                   void* next_callback_data,
                   bool strip,
@@ -6746,10 +6853,9 @@
       next_callback(next_callback_data, id, &write_callback_data,
                     &write_debug_callback_data);
     }
-    CreateAppAOTSnapshot(write_callback, write_callback_data, strip, format,
-                         write_debug_callback_data, &data, data[id],
-                         program_hash, /*identifier=*/nullptr,
-                         /*path=*/nullptr);
+    CreateAppAOTUnitSnapshot(write_callback, write_callback_data, strip, format,
+                             write_debug_callback_data, &data, data[id],
+                             program_hash);
     {
       TransitionVMToNative transition(T);
       close_callback(write_callback_data);
@@ -6779,10 +6885,9 @@
   // Mark as not split.
   T->isolate_group()->object_store()->set_loading_units(Object::null_array());
 
-  CreateAppAOTSnapshot(callback, callback_data, strip,
-                       Dart_AotBinaryFormat_Assembly, debug_callback_data,
-                       nullptr, nullptr, 0, /*identifier=*/nullptr,
-                       /*path=*/nullptr);
+  CreateAppAOTProgramSnapshot(callback, callback_data, strip,
+                              Dart_AotBinaryFormat_Assembly,
+                              debug_callback_data);
 
   return Api::Success();
 #endif
@@ -6858,9 +6963,8 @@
   // Mark as not split.
   T->isolate_group()->object_store()->set_loading_units(Object::null_array());
 
-  CreateAppAOTSnapshot(callback, callback_data, strip, Dart_AotBinaryFormat_Elf,
-                       debug_callback_data, nullptr, nullptr, 0,
-                       /*identifier=*/nullptr, /*path=*/nullptr);
+  CreateAppAOTProgramSnapshot(callback, callback_data, strip,
+                              Dart_AotBinaryFormat_Elf, debug_callback_data);
 
   return Api::Success();
 #endif
@@ -6912,9 +7016,42 @@
   // Mark as not split.
   T->isolate_group()->object_store()->set_loading_units(Object::null_array());
 
-  CreateAppAOTSnapshot(callback, callback_data, strip, format,
-                       debug_callback_data, nullptr, nullptr, 0, identifier,
-                       path);
+  CreateAppAOTProgramSnapshot(callback, callback_data, strip, format,
+                              debug_callback_data, identifier, path);
+
+  return Api::Success();
+#endif
+}
+
+DART_EXPORT Dart_Handle Dart_CreateAppAOTSnapshotAndRelocatableObject(
+    Dart_AotBinaryFormat format,
+    Dart_StreamingWriteCallback callback,
+    void* snapshot_callback_data,
+    void* object_callback_data,
+    bool strip,
+    void* debug_callback_data,
+    const char* identifier,
+    const char* path) {
+#if defined(TARGET_ARCH_IA32)
+  return Api::NewError("AOT compilation is not supported on IA32.");
+#elif !defined(DART_PRECOMPILER)
+  return Api::NewError(
+      "This VM was built without support for AOT compilation.");
+#else
+  if (format != Dart_AotBinaryFormat_MachO_Dylib) {
+    return Api::NewError(
+        "Relocatable objects are currently only supported for Mach-O output.");
+  }
+  DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
+  CHECK_NULL(callback);
+
+  // Mark as not split.
+  T->isolate_group()->object_store()->set_loading_units(Object::null_array());
+
+  CreateAppAOTProgramSnapshot(callback, snapshot_callback_data, strip, format,
+                              debug_callback_data, identifier, path,
+                              object_callback_data);
 
   return Api::Success();
 #endif
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 8308757..c59b714 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -52,8 +52,11 @@
 #if defined(USING_SAFE_STACK)
     // Remember the safestack pointer at entry so it can be restored in
     // Exceptions::JumpToFrame when a Dart exception jumps over C++ frames.
-    saved_safestack_limit_ = OSThread::GetCurrentSafestackPointer();
-    thread->set_saved_safestack_limit(saved_safestack_limit_);
+    saved_safestack_ = thread->saved_safestack();
+    thread->set_saved_safestack(OSThread::GetCurrentSafestackPointer());
+#endif
+#if defined(USING_SHADOW_CALL_STACK)
+    saved_shadow_call_stack_ = thread->saved_shadow_call_stack();
 #endif
 
     saved_api_scope_ = thread->api_top_scope();
@@ -67,8 +70,11 @@
       thread()->ExitApiScope();
     }
 
+#if defined(USING_SHADOW_CALL_STACK)
+    thread()->set_saved_shadow_call_stack(saved_shadow_call_stack_);
+#endif
 #if defined(USING_SAFE_STACK)
-    thread()->set_saved_safestack_limit(saved_safestack_limit_);
+    thread()->set_saved_safestack(saved_safestack_);
 #endif
 
     ASSERT(thread()->long_jump_base() == nullptr);
@@ -78,7 +84,10 @@
  private:
   LongJumpScope* saved_long_jump_base_;
 #if defined(USING_SAFE_STACK)
-  uword saved_safestack_limit_ = 0;
+  uword saved_safestack_ = 0;
+#endif
+#if defined(USING_SHADOW_CALL_STACK)
+  uword saved_shadow_call_stack_ = 0;
 #endif
   ApiLocalScope* saved_api_scope_;
 };
@@ -140,13 +149,11 @@
   ASSERT(!function.IsNull());
 
 #if defined(DART_DYNAMIC_MODULES)
-  if (function.HasBytecode()) {
+  if (function.IsInterpreted()) {
     // SuspendLongJumpScope suspend_long_jump_scope(thread);
     TransitionToGenerated transition(thread);
     return Interpreter::Current()->Call(function, arguments_descriptor,
                                         arguments, thread);
-  } else {
-    ASSERT(!function.is_declared_in_bytecode());
   }
 #endif  // defined(DART_DYNAMIC_MODULES)
 
diff --git a/runtime/vm/datastream.cc b/runtime/vm/datastream.cc
index 2dde0cf..3af99d4 100644
--- a/runtime/vm/datastream.cc
+++ b/runtime/vm/datastream.cc
@@ -33,7 +33,12 @@
 }
 
 StreamingWriteStream::~StreamingWriteStream() {
-  Flush();
+  // Allow a StreamingWriteStream to be created for nullptr callback
+  // data as long as no data is ever written.
+  ASSERT(callback_data_ != nullptr || Position() == 0);
+  if (BaseWriteStream::Position() != 0) {
+    Flush();
+  }
   free(buffer_);
 }
 
diff --git a/runtime/vm/datastream.h b/runtime/vm/datastream.h
index 07b53d4..684d9f8 100644
--- a/runtime/vm/datastream.h
+++ b/runtime/vm/datastream.h
@@ -47,6 +47,10 @@
 
 class NonStreamingWriteStream;
 
+namespace module_snapshot {
+class Deserializer;
+}
+
 // Stream for reading various types from a buffer.
 class ReadStream : public ValueObject {
  public:
@@ -324,6 +328,7 @@
   const uint8_t* end_;
 
   friend class Deserializer;
+  friend class module_snapshot::Deserializer;
   DISALLOW_COPY_AND_ASSIGN(ReadStream);
 };
 
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 3c51048..8a9f35a 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -775,7 +775,8 @@
 
 // Get the saved current context of this activation.
 const Context& ActivationFrame::GetSavedCurrentContext() {
-  if (!ctx_.IsNull()) return ctx_;
+  if (context_initialized_) return ctx_;
+  context_initialized_ = true;
   GetVarDescriptors();
   intptr_t var_desc_len = var_descriptors_.Length();
   Object& obj = Object::Handle();
@@ -790,7 +791,14 @@
       }
       const auto variable_index = VariableIndex(var_info.index());
       obj = GetStackVar(variable_index);
-      if (obj.IsClosure()) {
+      if (function_.IsImplicitInstanceClosureFunction()) {
+        // The context of an implicit instance closure contains only one slot
+        // for "this", so the instance is stored as the context and accessed
+        // directly by generated code to avoid allocating a separate context.
+        // Here, we create the elided context object for debugging purposes.
+        ctx_ = Context::New(1);
+        ctx_.SetAt(0, obj);
+      } else if (obj.IsClosure()) {
         ASSERT(function().IsClosureCallDispatcher());
         // Closure.call frames.
         ctx_ = Closure::Cast(obj).GetContext();
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index e78cd24..addb788 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -462,6 +462,7 @@
   const Function& function_;
   const Closure& closure_;
 
+  bool context_initialized_ = false;
   bool token_pos_initialized_ = false;
   TokenPosition token_pos_ = TokenPosition::kNoSource;
   intptr_t try_index_ = -1;
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index b101048..3e36df0 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -650,7 +650,7 @@
   // We are jumping over C++ frames, so we have to set the safestack pointer
   // back to what it was when we entered the runtime from Dart code.
 #if defined(USING_SAFE_STACK)
-  const uword saved_ssp = thread->saved_safestack_limit();
+  const uword saved_ssp = thread->saved_safestack();
   OSThread::SetCurrentSafestackPointer(saved_ssp);
 #endif
 
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 04b5ab7..07ca972 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -5,7 +5,6 @@
 #ifndef RUNTIME_VM_FLAG_LIST_H_
 #define RUNTIME_VM_FLAG_LIST_H_
 
-#include "platform/thread_sanitizer.h"
 #include "vm/globals.h"
 
 // Don't use USING_PRODUCT outside of this file.
diff --git a/runtime/vm/flags.cc b/runtime/vm/flags.cc
index 30dd083..ea28020 100644
--- a/runtime/vm/flags.cc
+++ b/runtime/vm/flags.cc
@@ -74,15 +74,15 @@
 #undef DEBUG_FLAG_MACRO
 
 #if defined(DART_PRECOMPILER)
-#if defined(TARGET_USES_THREAD_SANITIZER)
-constexpr bool kDefaultTargetThreadSanitizer = true;
+#if defined(TARGET_USES_ADDRESS_SANITIZER)
+constexpr bool kDefaultTargetAddressSanitizer = true;
 #else
-constexpr bool kDefaultTargetThreadSanitizer = false;
+constexpr bool kDefaultTargetAddressSanitizer = false;
 #endif
 DEFINE_FLAG(bool,
-            target_thread_sanitizer,
-            kDefaultTargetThreadSanitizer,
-            "Generate Dart code compatible with Thread Sanitizer");
+            target_address_sanitizer,
+            kDefaultTargetAddressSanitizer,
+            "Generate Dart code compatible with Address Sanitizer");
 #if defined(TARGET_USES_MEMORY_SANITIZER)
 constexpr bool kDefaultTargetMemorySanitizer = true;
 #else
@@ -92,6 +92,16 @@
             target_memory_sanitizer,
             kDefaultTargetMemorySanitizer,
             "Generate Dart code compatible with Memory Sanitizer");
+
+#if defined(TARGET_USES_THREAD_SANITIZER)
+constexpr bool kDefaultTargetThreadSanitizer = true;
+#else
+constexpr bool kDefaultTargetThreadSanitizer = false;
+#endif
+DEFINE_FLAG(bool,
+            target_thread_sanitizer,
+            kDefaultTargetThreadSanitizer,
+            "Generate Dart code compatible with Thread Sanitizer");
 #endif
 
 static bool IsMainOrDevChannel() {
diff --git a/runtime/vm/flags.h b/runtime/vm/flags.h
index 0bab225..bf616c2 100644
--- a/runtime/vm/flags.h
+++ b/runtime/vm/flags.h
@@ -5,6 +5,7 @@
 #ifndef RUNTIME_VM_FLAGS_H_
 #define RUNTIME_VM_FLAGS_H_
 
+#include "platform/address_sanitizer.h"
 #include "platform/assert.h"
 #include "platform/memory_sanitizer.h"
 #include "platform/thread_sanitizer.h"
@@ -162,19 +163,25 @@
 #undef PRECOMPILE_FLAG_MACRO
 
 #if defined(DART_PRECOMPILER)
-DECLARE_FLAG(bool, target_thread_sanitizer);
+DECLARE_FLAG(bool, target_address_sanitizer);
 DECLARE_FLAG(bool, target_memory_sanitizer);
+DECLARE_FLAG(bool, target_thread_sanitizer);
 #else
-#if defined(USING_THREAD_SANITIZER)
-constexpr bool FLAG_target_thread_sanitizer = true;
+#if defined(USING_ADDRESS_SANITIZER)
+constexpr bool FLAG_target_address_sanitizer = true;
 #else
-constexpr bool FLAG_target_thread_sanitizer = false;
+constexpr bool FLAG_target_address_sanitizer = false;
 #endif
 #if defined(USING_MEMORY_SANITIZER)
 constexpr bool FLAG_target_memory_sanitizer = true;
 #else
 constexpr bool FLAG_target_memory_sanitizer = false;
 #endif
+#if defined(USING_THREAD_SANITIZER)
+constexpr bool FLAG_target_thread_sanitizer = true;
+#else
+constexpr bool FLAG_target_thread_sanitizer = false;
+#endif
 #endif
 
 DECLARE_FLAG(bool, experimental_shared_data);
diff --git a/runtime/vm/globals.h b/runtime/vm/globals.h
index 370599f..84ba517 100644
--- a/runtime/vm/globals.h
+++ b/runtime/vm/globals.h
@@ -114,11 +114,14 @@
 // whenever timeline with perfetto support is included as well as in
 // precompiler builds (to enable stack dumping when precompiler crashes).
 #if !defined(PRODUCT) ||                                                       \
-    (defined(SUPPORT_TIMELINE) && defined(SUPPORT_PERFETTO)) ||                \
-    defined(DART_PRECOMPILER)
+    (defined(SUPPORT_TIMELINE) && defined(SUPPORT_PERFETTO))
 #define DART_INCLUDE_PROFILER 1
 #endif
 
+#if defined(DART_INCLUDE_PROFILER) || defined(DART_PRECOMPILER)
+#define DART_INCLUDE_STACK_DUMPER 1
+#endif
+
 // Include IL printer and disassembler functionality into non-PRODUCT builds,
 // in all AOT compiler builds or when forced.
 #if !defined(PRODUCT) || defined(DART_PRECOMPILER) ||                          \
@@ -141,15 +144,8 @@
 #define HASH_IN_OBJECT_HEADER 1
 #endif
 
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) ||                   \
-    (defined(TARGET_ARCH_ARM64) && defined(DART_TARGET_OS_MACOS))
 #define TARGET_HAS_FAST_WRITE_WRITE_FENCE 1
-#endif
-
-#if defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64) ||                       \
-    (defined(HOST_ARCH_ARM64) && defined(DART_HOST_OS_MACOS))
 #define HOST_HAS_FAST_WRITE_WRITE_FENCE 1
-#endif
 
 // The expression OFFSET_OF(type, field) computes the byte-offset of
 // the specified field relative to the containing type.
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index 1d1c3c7..f7b5c1d 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -1555,7 +1555,7 @@
         for (size_t i = 0; i < kExistingObjectSlotCount; i++) {
           NewObject* new_object = &new_page->objects[i];
           new_object->header.store(2u, std::memory_order_relaxed);
-          std::atomic_thread_fence(std::memory_order_release);
+          StoreStoreFence();
           for (size_t j = 0; j < kNewObjectSlotCount; j++) {
             new_object->slots[j].store(existing_object,
                                        std::memory_order_relaxed);
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 989015b..a7efdef 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -222,9 +222,12 @@
 #if defined(DART_PRECOMPILER)
 ImageWriter::ImageWriter(Thread* t,
                          bool generates_assembly,
+                         bool needs_unique_names,
                          const Trie<const char>* deobfuscation_trie)
 #else
-ImageWriter::ImageWriter(Thread* t, bool generates_assembly)
+ImageWriter::ImageWriter(Thread* t,
+                         bool generates_assembly,
+                         bool needs_unique_names)
 #endif
     : thread_(ASSERT_NOTNULL(t)),
       zone_(t->zone()),
@@ -235,7 +238,8 @@
 #if defined(DART_PRECOMPILER)
       namer_(t->zone(),
              deobfuscation_trie,
-             /*for_assembly=*/generates_assembly),
+             /*for_assembly=*/generates_assembly,
+             /*create_unique_names=*/needs_unique_names),
 #endif
       image_type_(TagObjectTypeAsReadOnly(zone_, "Image")),
       instructions_section_type_(
@@ -1225,7 +1229,10 @@
     const Trie<const char>* deobfuscation_trie,
     bool strip,
     SharedObjectWriter* debug_so)
-    : ImageWriter(thread, /*generates_assembly=*/true, deobfuscation_trie),
+    : ImageWriter(thread,
+                  /*generates_assembly=*/true,
+                  /*needs_unique_names=*/true,
+                  deobfuscation_trie),
       assembly_stream_(stream),
       assembly_dwarf_(
           AddDwarfIfUnstripped(zone_, strip, debug_so, deobfuscation_trie)),
@@ -1380,6 +1387,10 @@
     buffer->Clear();
     buffer->AddString(result);
   }
+}
+
+void ImageWriter::SnapshotTextObjectNamer::EnsureUniqueName(
+    BaseTextBuffer* buffer) {
   auto* const pair = usage_count_.Lookup(buffer->buffer());
   if (pair == nullptr) {
     usage_count_.Insert({buffer->buffer(), 1});
@@ -1401,6 +1412,9 @@
   if (for_assembly_) {
     ModifyForAssembly(&printer);
   }
+  if (create_unique_names_) {
+    EnsureUniqueName(&printer);
+  }
   return printer.buffer();
 }
 
@@ -1430,6 +1444,9 @@
   if (for_assembly_) {
     ModifyForAssembly(&printer);
   }
+  if (create_unique_names_) {
+    EnsureUniqueName(&printer);
+  }
   return printer.buffer();
 }
 
@@ -1861,15 +1878,20 @@
                                  NonStreamingWriteStream* isolate_instructions,
                                  const Trie<const char>* deobfuscation_trie,
                                  SharedObjectWriter* debug_so,
-                                 SharedObjectWriter* so)
-    : ImageWriter(thread, /*generates_assembly=*/false, deobfuscation_trie),
+                                 SharedObjectWriter* so,
+                                 bool needs_unique_names)
+    : ImageWriter(thread,
+                  /*generates_assembly=*/false,
+                  needs_unique_names,
+                  deobfuscation_trie),
 #else
 BlobImageWriter::BlobImageWriter(Thread* thread,
                                  NonStreamingWriteStream* vm_instructions,
                                  NonStreamingWriteStream* isolate_instructions,
                                  SharedObjectWriter* debug_so,
-                                 SharedObjectWriter* so)
-    : ImageWriter(thread, /*generates_assembly=*/false),
+                                 SharedObjectWriter* so,
+                                 bool needs_unique_names)
+    : ImageWriter(thread, /*generates_assembly=*/false, needs_unique_names),
 #endif
       vm_instructions_(vm_instructions),
       isolate_instructions_(isolate_instructions),
diff --git a/runtime/vm/image_snapshot.h b/runtime/vm/image_snapshot.h
index 10d1c96..60a1c4d 100644
--- a/runtime/vm/image_snapshot.h
+++ b/runtime/vm/image_snapshot.h
@@ -95,6 +95,13 @@
   // Only valid for instructions images from precompiled snapshots.
   bool compiled_to_macho() const;
 
+  // Constants used to denote special values for the offsets in the Image
+  // object header and the fields of the InstructionsSection object.
+  static constexpr intptr_t kNoInstructionsSection = 0;
+  static constexpr intptr_t kNoBssSection = 0;
+  static constexpr intptr_t kNoRelocatedAddress = 0;
+  static constexpr intptr_t kNoBuildId = 0;
+
  private:
   // For snapshots directly compiled to a shared object, returns a pointer to
   // the beginning of the build id container. Otherwise returns nullptr;
@@ -122,13 +129,6 @@
         raw_memory)[static_cast<intptr_t>(field)];
   }
 
-  // Constants used to denote special values for the offsets in the Image
-  // object header and the fields of the InstructionsSection object.
-  static constexpr intptr_t kNoInstructionsSection = 0;
-  static constexpr intptr_t kNoBssSection = 0;
-  static constexpr intptr_t kNoRelocatedAddress = 0;
-  static constexpr intptr_t kNoBuildId = 0;
-
   // The size of the Image object header.
   //
   // Note: Image::kHeaderSize is _not_ an architecture-dependent constant,
@@ -385,9 +385,10 @@
 #if defined(DART_PRECOMPILER)
   ImageWriter(Thread* thread,
               bool generates_assembly,
+              bool needs_unique_names,
               const Trie<const char>* deobfuscation_trie = nullptr);
 #else
-  ImageWriter(Thread* thread, bool generates_assembly);
+  ImageWriter(Thread* thread, bool generates_assembly, bool needs_unique_names);
 #endif
   virtual ~ImageWriter() {}
 
@@ -476,10 +477,22 @@
   // (if vm is true) or application isolate (otherwise) section. Some sections
   // are shared by both.
   static constexpr intptr_t SectionLabel(ProgramSection section, bool vm) {
-    // Both vm and isolate share the build id section.
-    const bool shared = section == ProgramSection::BuildId;
-    // The initial 1 is to ensure the result is positive.
-    return 1 + 2 * static_cast<int>(section) + ((shared || vm) ? 0 : 1);
+    switch (section) {
+      case ProgramSection::Text:
+        return vm ? SharedObjectWriter::kVmInstructionsLabel
+                  : SharedObjectWriter::kIsolateInstructionsLabel;
+      case ProgramSection::Data:
+        return vm ? SharedObjectWriter::kVmDataLabel
+                  : SharedObjectWriter::kIsolateDataLabel;
+      case ProgramSection::Bss:
+        return vm ? SharedObjectWriter::kVmBssLabel
+                  : SharedObjectWriter::kIsolateBssLabel;
+      case ProgramSection::BuildId:
+        // Both vm and isolate share the build id section.
+        return SharedObjectWriter::kBuildIdLabel;
+    }
+    UNREACHABLE();
+    return 0;
   }
 
   static Trie<const char>* CreateReverseObfuscationTrie(Thread* thread);
@@ -675,7 +688,8 @@
    public:
     explicit SnapshotTextObjectNamer(Zone* zone,
                                      const Trie<const char>* deobfuscation_trie,
-                                     bool for_assembly)
+                                     bool for_assembly,
+                                     bool create_unique_names)
         : zone_(ASSERT_NOTNULL(zone)),
           deobfuscation_trie_(deobfuscation_trie),
           lib_(Library::Handle(zone)),
@@ -686,6 +700,7 @@
           insns_(Instructions::Handle(zone)),
           store_(IsolateGroup::Current()->object_store()),
           for_assembly_(for_assembly),
+          create_unique_names_(create_unique_names),
           usage_count_(zone) {}
 
     const char* StubNameForType(const AbstractType& type) const;
@@ -708,6 +723,8 @@
     void AddNonUniqueNameFor(BaseTextBuffer* buffer, const Object& object);
     // Modifies the symbol name in the buffer as needed for assembly use.
     void ModifyForAssembly(BaseTextBuffer* buffer);
+    // Ensures the final symbol name is unique.
+    void EnsureUniqueName(BaseTextBuffer* buffer);
 
     Zone* const zone_;
     const Trie<const char>* const deobfuscation_trie_;
@@ -718,8 +735,10 @@
     String& string_;
     Instructions& insns_;
     ObjectStore* const store_;
-    // Used to decide whether we need to add a uniqueness suffix.
+    // Avoids naming conventions that have meaning to the assembler.
     bool for_assembly_;
+    // Used to decide whether we need to add a uniqueness suffix.
+    bool create_unique_names_;
     CStringIntMap usage_count_;
 
     DISALLOW_COPY_AND_ASSIGN(SnapshotTextObjectNamer);
@@ -727,9 +746,8 @@
 
   SnapshotTextObjectNamer namer_;
 
-  // Reserve two positive labels for each of the ProgramSection values (one for
-  // vm, one for isolate).
-  intptr_t next_label_ = 1 + 2 * kNumProgramSections;
+  intptr_t next_label_ = SharedObjectWriter::kLastReservedLabel + 1;
+
 #endif
 
   IdSpace offset_space_ = IdSpace::kSnapshot;
@@ -874,13 +892,15 @@
                   NonStreamingWriteStream* isolate_instructions,
                   const Trie<const char>* deobfuscation_trie = nullptr,
                   SharedObjectWriter* debug_so = nullptr,
-                  SharedObjectWriter* so = nullptr);
+                  SharedObjectWriter* so = nullptr,
+                  bool needs_unique_names = false);
 #else
   BlobImageWriter(Thread* thread,
                   NonStreamingWriteStream* vm_instructions,
                   NonStreamingWriteStream* isolate_instructions,
                   SharedObjectWriter* debug_so = nullptr,
-                  SharedObjectWriter* so = nullptr);
+                  SharedObjectWriter* so = nullptr,
+                  bool needs_unique_names = false);
 #endif
 
   virtual void Finalize();
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index 6dc2fc6..ca97e19 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -432,12 +432,15 @@
 }
 
 // Prints bytecode instruction at given pc for instruction tracing.
-DART_NOINLINE void Interpreter::TraceInstruction(const KBCInstr* pc) const {
+DART_NOINLINE void Interpreter::TraceInstruction(const KBCInstr* pc,
+                                                 ObjectPtr* FP) const {
   THR_Print("%" Pu64 " ", icount_);
   if (FLAG_support_disassembler) {
+    auto const bytecode = Function::GetBytecode(FrameFunction(FP));
     KernelBytecodeDisassembler::Disassemble(
         reinterpret_cast<uword>(pc),
-        reinterpret_cast<uword>(KernelBytecode::Next(pc)));
+        reinterpret_cast<uword>(KernelBytecode::Next(pc)),
+        Bytecode::PayloadStartOf(bytecode));
   } else {
     THR_Print("Disassembler not supported in this mode.\n");
   }
@@ -692,6 +695,7 @@
                                                    ObjectPtr** FP,
                                                    ObjectPtr** SP) {
   ASSERT(Function::HasBytecode(function));
+  ASSERT(Function::IsInterpreted(function));
 #if defined(DEBUG)
   if (IsTracingExecution()) {
     THR_Print("%" Pu64 " ", icount_);
@@ -726,7 +730,7 @@
   FunctionPtr function = FrameFunction(callee_fp);
 
   for (;;) {
-    if (Function::HasBytecode(function)) {
+    if (Function::IsInterpreted(function)) {
       return InvokeBytecode(thread, function, call_base, call_top, pc, FP, SP);
     } else if (Function::HasCode(function)) {
       return InvokeCompiled(thread, function, call_base, call_top, pc, FP, SP);
@@ -849,7 +853,7 @@
 #if defined(DEBUG)
 #define TRACE_INSTRUCTION                                                      \
   if (IsTracingExecution()) {                                                  \
-    TraceInstruction(pc);                                                      \
+    TraceInstruction(pc, FP);                                                  \
   }                                                                            \
   if (IsWritingTraceFile()) {                                                  \
     WriteInstructionToTrace(pc);                                               \
@@ -4161,7 +4165,7 @@
     FunctionPtr function = Function::RawCast(SP[1]);
 
     for (;;) {
-      if (Function::HasBytecode(function)) {
+      if (Function::IsInterpreted(function)) {
         ASSERT(function->IsFunction());
         BytecodePtr bytecode = Function::GetBytecode(function);
         ASSERT(bytecode->IsBytecode());
diff --git a/runtime/vm/interpreter.h b/runtime/vm/interpreter.h
index cd173b9..994a186 100644
--- a/runtime/vm/interpreter.h
+++ b/runtime/vm/interpreter.h
@@ -255,7 +255,7 @@
   bool IsTracingExecution() const;
 
   // Prints bytecode instruction at given pc for instruction tracing.
-  void TraceInstruction(const KBCInstr* pc) const;
+  void TraceInstruction(const KBCInstr* pc, ObjectPtr* FP) const;
 
   bool IsWritingTraceFile() const;
   void FlushTraceBuffer();
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 95b7ea9..496181c 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -2257,8 +2257,8 @@
       compiler::target::kSmiMax / (6 * kWordSize);
 
   const GrowableObjectArray& caps = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->resume_capabilities());
-  Capability& current = Capability::Handle(current_zone());
+      isolate_object_store()->resume_capabilities());
+  Capability& current = Capability::Handle();
   intptr_t insertion_index = -1;
   for (intptr_t i = 0; i < caps.Length(); i++) {
     current ^= caps.At(i);
@@ -2286,8 +2286,8 @@
 
 bool Isolate::RemoveResumeCapability(const Capability& capability) {
   const GrowableObjectArray& caps = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->resume_capabilities());
-  Capability& current = Capability::Handle(current_zone());
+      isolate_object_store()->resume_capabilities());
+  Capability& current = Capability::Handle();
   for (intptr_t i = 0; i < caps.Length(); i++) {
     current ^= caps.At(i);
     if (!current.IsNull() && (current.Id() == capability.Id())) {
@@ -2307,9 +2307,9 @@
   // Ensure a limit for the number of listeners remembered.
   const intptr_t kMaxListeners = compiler::target::kSmiMax / (12 * kWordSize);
 
-  const GrowableObjectArray& listeners = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->exit_listeners());
-  SendPort& current = SendPort::Handle(current_zone());
+  const GrowableObjectArray& listeners =
+      GrowableObjectArray::Handle(isolate_object_store()->exit_listeners());
+  SendPort& current = SendPort::Handle();
   intptr_t insertion_index = -1;
   for (intptr_t i = 0; i < listeners.Length(); i += 2) {
     current ^= listeners.At(i);
@@ -2338,9 +2338,9 @@
 }
 
 void Isolate::RemoveExitListener(const SendPort& listener) {
-  const GrowableObjectArray& listeners = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->exit_listeners());
-  SendPort& current = SendPort::Handle(current_zone());
+  const GrowableObjectArray& listeners =
+      GrowableObjectArray::Handle(isolate_object_store()->exit_listeners());
+  SendPort& current = SendPort::Handle();
   for (intptr_t i = 0; i < listeners.Length(); i += 2) {
     current ^= listeners.At(i);
     if (!current.IsNull() && (current.Id() == listener.Id())) {
@@ -2354,12 +2354,12 @@
 }
 
 void Isolate::NotifyExitListeners() {
-  const GrowableObjectArray& listeners = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->exit_listeners());
+  const GrowableObjectArray& listeners =
+      GrowableObjectArray::Handle(isolate_object_store()->exit_listeners());
   if (listeners.IsNull()) return;
 
-  SendPort& listener = SendPort::Handle(current_zone());
-  Instance& response = Instance::Handle(current_zone());
+  SendPort& listener = SendPort::Handle();
+  Instance& response = Instance::Handle();
   for (intptr_t i = 0; i < listeners.Length(); i += 2) {
     listener ^= listeners.At(i);
     if (!listener.IsNull()) {
@@ -2374,9 +2374,9 @@
   // Ensure a limit for the number of listeners remembered.
   const intptr_t kMaxListeners = compiler::target::kSmiMax / (6 * kWordSize);
 
-  const GrowableObjectArray& listeners = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->error_listeners());
-  SendPort& current = SendPort::Handle(current_zone());
+  const GrowableObjectArray& listeners =
+      GrowableObjectArray::Handle(isolate_object_store()->error_listeners());
+  SendPort& current = SendPort::Handle();
   intptr_t insertion_index = -1;
   for (intptr_t i = 0; i < listeners.Length(); i++) {
     current ^= listeners.At(i);
@@ -2402,9 +2402,9 @@
 }
 
 void Isolate::RemoveErrorListener(const SendPort& listener) {
-  const GrowableObjectArray& listeners = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->error_listeners());
-  SendPort& current = SendPort::Handle(current_zone());
+  const GrowableObjectArray& listeners =
+      GrowableObjectArray::Handle(isolate_object_store()->error_listeners());
+  SendPort& current = SendPort::Handle();
   for (intptr_t i = 0; i < listeners.Length(); i++) {
     current ^= listeners.At(i);
     if (!current.IsNull() && (current.Id() == listener.Id())) {
@@ -2418,8 +2418,8 @@
 
 bool Isolate::NotifyErrorListeners(const char* message,
                                    const char* stacktrace) {
-  const GrowableObjectArray& listeners = GrowableObjectArray::Handle(
-      current_zone(), isolate_object_store()->error_listeners());
+  const GrowableObjectArray& listeners =
+      GrowableObjectArray::Handle(isolate_object_store()->error_listeners());
   if (listeners.IsNull()) return false;
 
   Dart_CObject arr;
@@ -2440,13 +2440,14 @@
   }
   arr_values[1] = &stack;
 
-  SendPort& listener = SendPort::Handle(current_zone());
+  SendPort& listener = SendPort::Handle();
   bool was_somebody_notified = false;
   for (intptr_t i = 0; i < listeners.Length(); i++) {
     listener ^= listeners.At(i);
     if (!listener.IsNull()) {
       Dart_Port port_id = listener.Id();
-      PortMap::PostMessage(SerializeMessage(current_zone(), port_id, &arr));
+      PortMap::PostMessage(
+          SerializeMessage(Thread::Current()->zone(), port_id, &arr));
       was_somebody_notified = true;
     }
   }
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 48d1707..e880ef1 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -853,6 +853,11 @@
   GrowableObjectArrayPtr tag_table() const { return tag_table_; }
   void set_tag_table(const GrowableObjectArray& value);
 
+  intptr_t scoped_thread_locals_count() { return scoped_thread_locals_count_; }
+  intptr_t increment_scoped_thread_locals_count() {
+    return scoped_thread_locals_count_.fetch_add(1u, std::memory_order_relaxed);
+  }
+
  private:
   friend class Dart;  // For `object_store_ = ` in Dart::Init
   friend class Heap;
@@ -1013,6 +1018,8 @@
 
   SafepointRwLock tag_table_lock_;
   GrowableObjectArrayPtr tag_table_;
+
+  std::atomic<intptr_t> scoped_thread_locals_count_ = 0;
 };
 
 // When an isolate sends-and-exits this class represent things that it passed
@@ -1578,13 +1585,6 @@
       const GrowableObjectArray& value);
 #endif  // !defined(PRODUCT)
 
-  // DEPRECATED: Use Thread's methods instead. During migration, these default
-  // to using the mutator thread (which must also be the current thread).
-  Zone* current_zone() const {
-    ASSERT(Thread::Current() == mutator_thread());
-    return mutator_thread()->zone();
-  }
-
   // Accessed from generated code.
   // ** This block of fields must come first! **
   // For AOT cross-compilation, we rely on these members having the same offsets
diff --git a/runtime/vm/kernel.cc b/runtime/vm/kernel.cc
index f10066a..dd88f9b 100644
--- a/runtime/vm/kernel.cc
+++ b/runtime/vm/kernel.cc
@@ -234,18 +234,19 @@
 
   kernel::KernelReaderHelper kernel_reader(zone, &helper, data, 0);
 
-  // Read "constant coverage constructors".
+  // Read "constant coverage constructors". Note that this also includes
+  // "constructors" for extensions type which is actually toplevel methods.
   const intptr_t constant_coverage_constructors =
       kernel_reader.ReadListLength();
   const Array& constructors =
       Array::Handle(Array::New(constant_coverage_constructors));
+  Object& member = Object::Handle(zone);
+  Function& target = Function::Handle(zone);
   for (intptr_t i = 0; i < constant_coverage_constructors; ++i) {
     kernel::NameIndex kernel_name = kernel_reader.ReadCanonicalNameReference();
-    Class& klass = Class::ZoneHandle(
-        zone,
-        helper.LookupClassByKernelClass(helper.EnclosingName(kernel_name)));
-    const Function& target = Function::ZoneHandle(
-        zone, helper.LookupConstructorByKernelConstructor(klass, kernel_name));
+    member = helper.LookupMemberByMember(kernel_name);
+    ASSERT(member.IsFunction());
+    target = Function::Cast(member).ptr();
     constructors.SetAt(i, target);
   }
   return constructors.ptr();
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index f5f43ad..d0997b1 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -18,7 +18,7 @@
 // package:kernel/binary.md.
 
 static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
-static const uint32_t kSupportedKernelFormatVersion = 126;
+static const uint32_t kSupportedKernelFormatVersion = 127;
 
 // Keep in sync with package:kernel/lib/binary/tag.dart
 #define KERNEL_TAG_LIST(V)                                                     \
diff --git a/runtime/vm/mach_o.cc b/runtime/vm/mach_o.cc
index 9bc6765..cc7ef76 100644
--- a/runtime/vm/mach_o.cc
+++ b/runtime/vm/mach_o.cc
@@ -34,6 +34,12 @@
             "The install name to be used for the dynamic library. "
             "The output filename is used if not provided.");
 
+DEFINE_FLAG(bool,
+            macho_reduce_padding,
+            false,
+            "Whether to use a smaller alignment size for segments and the "
+            "text/const sections in Mach-O outputs.")
+
 #if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
 DEFINE_FLAG(charp,
             macho_min_os_version,
@@ -103,6 +109,9 @@
 FOR_EACH_CONCRETE_MACHO_CONTENTS_TYPE(DECLARE_CONTENTS_TYPE_CLASS)
 #undef DECLARE_CONTENTS_TYPE_CLASS
 
+using MachORelocationsArray = ZoneGrowableArray<mach_o::relocation_info>;
+using MachORelocationAddendsArray = ZoneGrowableArray<intptr_t>;
+
 // The interface for a SharedObjectWriter::WriteStream with MachO-specific
 // utility methods.
 //
@@ -111,10 +120,11 @@
 class MachOWriteStream : public SharedObjectWriter::WriteStream {
   template <typename T, typename S>
   using only_if_unsigned = typename std::enable_if_t<std::is_unsigned_v<T>, S>;
+  using Relocation = SharedObjectWriter::Relocation;
 
  public:
   explicit MachOWriteStream(const MachOWriter& macho)
-      : SharedObjectWriter::WriteStream(), macho_(macho) {}
+      : SharedObjectWriter::WriteStream(macho.type()), macho_(macho) {}
 
   const MachOSegment& TextSegment() const;
 
@@ -179,8 +189,40 @@
   // Call once all content that should be hashed has been written to the stream.
   virtual void FinalizeHashedContent() = 0;
 
+  void set_current_relocation_addends(
+      const MachORelocationAddendsArray* array) {
+    current_relocation_addends_ = array;
+  }
+
  protected:
+  void WriteRelocatableValue(intptr_t address,
+                             const Relocation& reloc,
+                             intptr_t reloc_index) override {
+    if (type() != SharedObjectWriter::Type::Object) {
+      // Use the super implementation.
+      return SharedObjectWriter::WriteStream::WriteRelocatableValue(
+          address, reloc, reloc_index);
+    }
+    // Relocatable objects do not resolve relocations eagerly unless
+    // the source and target are the same, in which case the eagerly
+    // computed value has already been calculated as the "addend".
+    intptr_t to_write = 0;
+#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_ARM64)
+    // For X64 and ARM64, the addend is stored in the relocated location
+    // as the MachOWriter only uses UNSIGNED/SUBTRACTOR relocation entries.
+    RELEASE_ASSERT(current_relocation_addends_ != nullptr);
+    to_write = current_relocation_addends_->At(reloc_index);
+#else
+    // Relocatable objects aren't handled for this architecture.
+    UNREACHABLE();
+#endif
+    ASSERT(Utils::IsInt(reloc.size_in_bytes * kBitsPerByte, to_write));
+    WriteBytes(reinterpret_cast<const uint8_t*>(&to_write),
+               reloc.size_in_bytes);
+  }
+
   const MachOWriter& macho_;
+  const MachORelocationAddendsArray* current_relocation_addends_ = nullptr;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MachOWriteStream);
@@ -574,17 +616,20 @@
  public:
   MachOSection(Zone* zone,
                const char* name,
+               const char* segname,
+               intptr_t alignment,
                intptr_t type = mach_o::S_REGULAR,
                intptr_t attributes = mach_o::S_NO_ATTRIBUTES,
-               bool has_contents = true,
-               intptr_t alignment = MachOWriter::kPageSize)
+               bool has_contents = true)
       : MachOContents(/*needs_offset=*/has_contents,
                       /*in_segment=*/true),
         name_(name),
+        segname_(segname),
         flags_(mach_o::SectionFlags(type, attributes)),
         alignment_(alignment),
         portions_(zone, 0) {
     ASSERT(strlen(name) <= sizeof(SectionType::sectname));
+    ASSERT(strlen(segname) <= sizeof(SectionType::segname));
     ASSERT(Utils::IsPowerOfTwo(alignment));
     ASSERT_EQUAL(type & mach_o::SECTION_TYPE, static_cast<uint32_t>(type));
     ASSERT_EQUAL(attributes & mach_o::SECTION_ATTRIBUTES,
@@ -599,8 +644,22 @@
   intptr_t Alignment() const override { return alignment_; }
 
   const char* name() const { return name_; }
+  const char* segname() const { return segname_; }
 
   bool HasName(const char* name) const { return strcmp(name_, name) == 0; }
+  bool HasSegname(const char* segname) const {
+    return strcmp(segname_, segname) == 0;
+  }
+
+  intptr_t index() const {
+    // The getter should not be called until after an initial index is assigned.
+    ASSERT(index_ != mach_o::NO_SECT);
+    return index_;
+  }
+  void set_index(intptr_t value) {
+    ASSERT(value != mach_o::NO_SECT);
+    index_ = value;
+  }
 
   struct Portion {
     void Write(MachOWriteStream* stream, intptr_t section_start) const {
@@ -662,14 +721,20 @@
     return last.offset + last.size;
   }
 
+  // The first section in relocated objects will have a memory offset of 0, so
+  // don't use the superclass's implementation as all sections are allocated.
+  bool IsAllocated() const override { return true; }
+
   void WriteSelf(MachOWriteStream* stream) const override {
     if (!HasContents()) return;
+    stream->set_current_relocation_addends(relocation_addends_);
     for (const auto& portion : portions_) {
       // Each portion is aligned within the section.
       stream->Align(Alignment());
       ASSERT_EQUAL(stream->Position(), file_offset() + portion.offset);
       portion.Write(stream, memory_address());
     }
+    stream->set_current_relocation_addends(nullptr);
   }
 
   const Portion* FindPortion(const char* symbol_name) const {
@@ -690,20 +755,35 @@
 
   void Accept(Visitor* visitor) override { visitor->VisitMachOSection(this); }
 
+  const MachORelocationsArray* relocations() const { return relocations_; }
+  void set_relocations(const MachORelocationsArray* relocations) {
+    relocations_ = relocations;
+  }
+  intptr_t num_relocations() const {
+    return relocations_ == nullptr ? 0 : relocations_->length();
+  }
+
+  const MachORelocationAddendsArray* relocation_addends() const {
+    return relocation_addends_;
+  }
+  void set_relocation_addends(const MachORelocationAddendsArray* array) {
+    relocation_addends_ = array;
+  }
+
  private:
   uint32_t HeaderInfoSize() const { return sizeof(SectionType); }
 
   // Called during MachOSegment::WriteLoadCommand.
-  void WriteHeaderInfo(MachOWriteStream* stream, const char* segname) const {
+  void WriteHeaderInfo(MachOWriteStream* stream) const {
     auto const start = stream->Position();
     stream->WriteFixedLengthCString(name_, sizeof(SectionType::sectname));
-    stream->WriteFixedLengthCString(segname, sizeof(SectionType::segname));
+    stream->WriteFixedLengthCString(segname_, sizeof(SectionType::segname));
     // While
     stream->WriteWord(memory_address());
     stream->WriteWord(MemorySize());
     stream->Write32(file_offset());
     stream->Write32(Utils::ShiftForPowerOfTwo(Alignment()));
-    stream->WriteOffsetCount(0, 0);  // No relocation entries.
+    stream->WriteOffsetCount(relocations_file_offset(), num_relocations());
     stream->Write32(flags_);
     // All reserved fields are 0 for our purposes.
     stream->Write32(0);  // reserved1
@@ -716,9 +796,26 @@
   }
 
   const char* const name_;
+  const char* const segname_;
   const decltype(SectionType::flags) flags_ = 0;
   const intptr_t alignment_;
+  intptr_t index_ = mach_o::NO_SECT;
   GrowableArray<Portion> portions_;
+  // The array of relocation_info structs that should be output for this
+  // section iff the output format is a relocatable object.
+  const MachORelocationsArray* relocations_ = nullptr;
+  // A list of relocation addends for relocatable objects.
+  const MachORelocationAddendsArray* relocation_addends_ = nullptr;
+
+#define FOR_EACH_CONTENTS_LINEAR_FIELD(M) M(relocations_file_offset)
+
+ public:
+  FOR_EACH_CONTENTS_LINEAR_FIELD(DEFINE_LINEAR_FIELD_METHODS);
+
+ private:
+  FOR_EACH_CONTENTS_LINEAR_FIELD(DEFINE_LINEAR_FIELD);
+
+#undef FOR_EACH_CONTENTS_LINEAR_FIELD
 
   friend class MachOSegment;
 
@@ -771,7 +868,12 @@
     return (initial_vm_protection_ & mach_o::VM_PROT_EXECUTE) != 0;
   }
 
-  intptr_t Alignment() const override { return MachOWriter::kPageSize; }
+  intptr_t Alignment() const override {
+    // TODO(dartbug.com/61973): Use the reduced padding size as the default
+    // for native (macOS/iOS) snapshots once the loading issue is resolved, or
+    // document why we can't use it for native snapshots loaded by the Dart VM.
+    return FLAG_macho_reduce_padding ? 64 : MachOWriter::kPageSize;
+  }
 
   // The text segment has a file and memory offset of 0, so the superclass's
   // implementations give false negatives after ComputeOffsets.
@@ -883,14 +985,25 @@
     // sections instead of these being in separate load commands.
     for (auto* const c : contents_) {
       if (!c->IsMachOSection()) continue;
-      c->AsMachOSection()->WriteHeaderInfo(stream, name_);
+      c->AsMachOSection()->WriteHeaderInfo(stream);
     }
   }
 
-  MachOSection* FindSection(const char* name) const {
+  MachOSection* FindSection(const char* name, const char* segname) const {
+    // Unless this is the unnamed segment in a relocatable object file, there
+    // should be no need to check the segment name of the section.
+    const bool unnamed = HasName(mach_o::SEG_UNNAMED);
+    if (!unnamed && !HasName(segname)) {
+      return nullptr;
+    }
     for (auto* const c : contents_) {
       if (auto* const s = c->AsMachOSection()) {
-        if (s->HasName(name)) return s;
+        if (s->HasName(name)) {
+          ASSERT(unnamed || s->HasSegname(name_));
+          if (!unnamed || s->HasSegname(segname)) {
+            return s;
+          }
+        }
       }
     }
     return nullptr;
@@ -1233,8 +1346,8 @@
  public:
   static constexpr uint32_t kCommandCode = mach_o::LC_SYMTAB;
 
-  explicit MachOSymbolTable(Zone* zone)
-      : MachOCommand(kCommandCode),
+  MachOSymbolTable(Zone* zone, bool in_segment)
+      : MachOCommand(kCommandCode, /*needs_offset=*/true, in_segment),
         zone_(zone),
         strings_(zone),
         symbols_(zone, 0),
@@ -1283,49 +1396,53 @@
   struct Symbol {
     Symbol(intptr_t n_idx,
            intptr_t n_type,
-           intptr_t n_sect,
+           const MachOSection* section,
            intptr_t n_desc,
-           uword n_value)
+           uword section_offset_or_value)
         : name_index(n_idx),
           type(n_type),
-          section_index(n_sect),
+          section(section),
           description(n_desc),
-          value(n_value) {
+          section_offset_or_value(section_offset_or_value) {
       ASSERT(Utils::IsUint(32, n_idx));
       ASSERT(Utils::IsUint(8, n_type));
-      ASSERT(Utils::IsUint(8, n_sect));
       ASSERT(Utils::IsUint(16, n_desc));
-      ASSERT(Utils::IsUint(sizeof(compiler::target::uword) * kBitsPerByte,
-                           n_value));
     }
 
     void Write(MachOWriteStream* stream) const {
       const intptr_t start = stream->Position();
       stream->Write32(name_index);
       stream->WriteByte(type);
-      stream->WriteByte(section_index);
+      stream->WriteByte(section_index());
       stream->Write16(description);
-      stream->WriteWord(value);
+      stream->WriteWord(value());
       ASSERT_EQUAL(stream->Position() - start, sizeof(mach_o::nlist));
     }
 
+    uint8_t section_index() const {
+      ASSERT(section == nullptr || Utils::IsUint(8, section->index()));
+      return section == nullptr ? mach_o::NO_SECT : section->index();
+    }
+
+    compiler::target::uword value() const {
+      const intptr_t base = section != nullptr ? section->memory_address() : 0;
+      ASSERT(Utils::IsUint(sizeof(compiler::target::uword) * kBitsPerByte,
+                           base + section_offset_or_value));
+      return base + section_offset_or_value;
+    }
+
     // The index of the name in the symbol table's string table.
     uint32_t name_index;
     // See the mach_o::N_* constants for the encoding of this field.
     uint8_t type;
-    // The section to which this symbol belongs if not equal to mach_o::NO_SECT.
-    // The sections are indexed by their appearance in the load commands
-    // (e.g., the first section of the first segment command that contains
-    // sections has index 1, and the first section of the second segment command
-    // that contains sections has index [k + 1] if the first segment contains
-    // [k] sections).
-    uint8_t section_index;
+    // The section to which this symbol belongs, if any.
+    const MachOSection* section;
     // See the mach_o::N_* constants for the encoding of this field.
     uint16_t description;
-    // For symbols where section_index != macho_o::NO_SECT, this is the section
-    // offset until finalization, when it is converted to the offset into the
-    // snapshot.
-    compiler::target::uword value;
+    // If section == nullptr, then this is the final value of the symbol.
+    // Otherwise, it is used to calculate the final value, which can be
+    // computed once the section's memory address has been set.
+    intptr_t section_offset_or_value;
 
     DISALLOW_ALLOCATION();
   };
@@ -1336,9 +1453,9 @@
 
   void AddSymbol(const char* name,
                  intptr_t type,
-                 intptr_t section_index,
+                 const MachOSection* section,
                  intptr_t description,
-                 uword value,
+                 uword section_offset_or_value,
                  intptr_t label = -1) {
     // Section symbols should always have labels, and other symbols
     // (including symbolic debugging symbols) do not.
@@ -1351,7 +1468,8 @@
     auto const name_index = strings_.Add(name);
     ASSERT(*name == '\0' || name_index != 0);
     const intptr_t new_index = num_symbols();
-    symbols_.Add({name_index, type, section_index, description, value});
+    symbols_.Add(
+        {name_index, type, section, description, section_offset_or_value});
     if (label > 0) {
       DEBUG_ONLY(max_label_ = max_label_ > label ? max_label_ : label);
       // Store an 1-based index since 0 is kNoValue for IntMap.
@@ -1362,62 +1480,35 @@
   const Symbol* FindLabel(intptr_t label) const {
     ASSERT(label > 0);
     // The stored index is 1-based.
-    const intptr_t symbols_index = by_label_index_.Lookup(label) - 1;
+    const intptr_t symbols_index = IndexForLabel(label);
     if (symbols_index < 0) return nullptr;  // Not found.
     return &symbols_[symbols_index];
   }
 
-  void Initialize(const char* path,
+  intptr_t IndexForLabel(intptr_t label) const {
+    ASSERT(label > 0);
+    // The stored index is 1-based.
+    return by_label_index_.Lookup(label) - 1;
+  }
+
+  void Initialize(SharedObjectWriter::Type type,
+                  const char* path,
                   const GrowableArray<MachOSection*>& sections,
                   bool is_stripped);
 
-  void UpdateSectionIndices(const GrowableArray<intptr_t>& index_map) {
-    const intptr_t map_size = index_map.length();
-#if defined(DEBUG)
-    for (intptr_t i = 0; i < map_size; i++) {
-      const intptr_t new_index = index_map[i];
-      ASSERT(Utils::IsUint(8, new_index));
-      ASSERT(new_index < map_size);
-      if (i == mach_o::NO_SECT) {
-        ASSERT_EQUAL(new_index, mach_o::NO_SECT);
-      } else {
-        ASSERT(new_index != mach_o::NO_SECT);
-      }
-    }
-#endif
-    for (auto& symbol : symbols_) {
-      const uint8_t old_index = symbol.section_index;
-      ASSERT(old_index < map_size);
-      symbol.section_index = index_map[old_index];
-    }
-  }
-
-  void Finalize(const GrowableArray<uword>& address_map) {
-    const intptr_t map_size = address_map.length();
-#if defined(DEBUG)
-    for (intptr_t i = 0; i < map_size; i++) {
-      if (i == mach_o::NO_SECT) {
-        // The entry for NO_SECT must be 0 so that symbols with that index,
-        // like global symbols, are unchanged.
-        ASSERT_EQUAL(address_map[mach_o::NO_SECT], 0);
-      } else {
-        // No valid section begins at the start of the snapshot.
-        ASSERT(address_map[i] > 0);
-      }
-    }
-#endif
-    for (auto& symbol : symbols_) {
-      ASSERT(symbol.section_index < map_size);
-      symbol.value += address_map[symbol.section_index];
-    }
-  }
-
   uint32_t cmdsize() const override { return sizeof(mach_o::symtab_command); }
 
   intptr_t SelfMemorySize() const override {
+    if (!IsAllocated()) return 0;
+    return SelfFileSize();
+  }
+
+  intptr_t SelfFileSize() const override {
     return SymbolsSize() + strings_.FileSize();
   }
 
+  intptr_t FileSize() const override { return SelfFileSize(); }
+
   intptr_t Alignment() const override { return compiler::target::kWordSize; }
 
   void WriteLoadCommand(MachOWriteStream* stream) const override {
@@ -1466,8 +1557,9 @@
  public:
   static constexpr uint32_t kCommandCode = mach_o::LC_DYSYMTAB;
 
-  explicit MachODynamicSymbolTable(const MachOSymbolTable& table)
-      : MachOCommand(kCommandCode), table_(table) {}
+  MachODynamicSymbolTable(const MachOSymbolTable& table, bool in_segment)
+      : MachOCommand(kCommandCode, /*needs_offset=*/true, in_segment),
+        table_(table) {}
 
   uint32_t cmdsize() const override { return sizeof(mach_o::dysymtab_command); }
 
@@ -1492,6 +1584,8 @@
   // Currently no contents are written to the linkedit segment, as the
   // only non-zero fields are indexes/counts into the symbol table.
   intptr_t SelfMemorySize() const override { return 0; }
+  intptr_t SelfFileSize() const override { return 0; }
+  intptr_t FileSize() const override { return SelfFileSize(); }
 
   void Accept(Visitor* visitor) override {
     visitor->VisitMachODynamicSymbolTable(this);
@@ -1658,18 +1752,21 @@
   MachOHeader(Zone* zone,
               SnapshotType type,
               bool is_stripped,
+              bool has_separate_object,
               const char* identifier,
               const char* path,
               Dwarf* dwarf)
-      : MachOContents(),
+      : MachOContents(/*needs_offset=*/true,
+                      /*in_segment=*/type != SnapshotType::Object),
         zone_(zone),
         type_(type),
         is_stripped_(is_stripped),
+        has_separate_object_(has_separate_object),
         identifier_(identifier != nullptr ? identifier : ""),
         path_(path),
         dwarf_(dwarf),
         commands_(zone, 0),
-        full_symtab_(zone) {
+        full_symtab_(zone, /*in_segment=*/type != SnapshotType::Object) {
 #if defined(DART_TARGET_OS_MACOS)
     // A non-nullptr identifier must be provided for MacOS targets.
     ASSERT(identifier != nullptr);
@@ -1691,6 +1788,7 @@
     ASSERT(text_segment_ != nullptr);
     return *text_segment_;
   }
+  SharedObjectWriter::Type type() const { return type_; }
 
   intptr_t NumSections() const {
     intptr_t num_sections = 0;
@@ -1705,7 +1803,7 @@
   // The contents of the header is always at offset/address 0, so the
   // superclass's check returns a false negative here after ComputeOffsets.
   bool HasContents() const override { return true; }
-  bool IsAllocated() const override { return true; }
+  bool IsAllocated() const override { return type_ != SnapshotType::Object; }
   intptr_t Alignment() const override { return compiler::target::kWordSize; }
 
   // The header uses the default MemorySize() implementation, because
@@ -1721,6 +1819,11 @@
   }
 
   intptr_t SelfMemorySize() const override {
+    if (!IsAllocated()) return 0;
+    return SelfFileSize();
+  }
+
+  intptr_t SelfFileSize() const override {
     intptr_t size = SizeWithoutLoadCommands();
     for (auto* const command : commands_) {
       size += command->cmdsize();
@@ -1728,12 +1831,20 @@
     return size;
   }
 
+  intptr_t FileSize() const override { return SelfFileSize(); }
+
   uint32_t filetype() const {
-    if (type_ == SnapshotType::Snapshot) {
-      return mach_o::MH_DYLIB;
+    switch (type_) {
+      case SnapshotType::Snapshot:
+        return mach_o::MH_DYLIB;
+      case SnapshotType::DebugInfo:
+        return mach_o::MH_DSYM;
+      case SnapshotType::Object:
+        return mach_o::MH_OBJECT;
+      default:
+        UNREACHABLE();
+        return 0;
     }
-    ASSERT(type_ == SnapshotType::DebugInfo);
-    return mach_o::MH_DSYM;
   }
 
   uint32_t flags() const {
@@ -1741,7 +1852,7 @@
       return mach_o::MH_NOUNDEFS | mach_o::MH_DYLDLINK |
              mach_o::MH_NO_REEXPORTED_DYLIBS;
     }
-    ASSERT(type_ == SnapshotType::DebugInfo);
+    ASSERT(type_ == SnapshotType::DebugInfo || type_ == SnapshotType::Object);
     return 0;
   }
 
@@ -1855,18 +1966,27 @@
   // Returns the section with name [sectname] in segment [segname]
   // or nullptr if there is none.
   MachOSection* FindSection(const char* segname, const char* sectname) const {
-    auto* const s = FindSegment(segname);
-    if (s == nullptr) return nullptr;
-    return s->FindSection(sectname);
+    // All sections are in the unnamed segment for object files.
+    auto* const segment =
+        type_ == SnapshotType::Object ? text_segment_ : FindSegment(segname);
+    if (segment == nullptr) return nullptr;
+    return segment->FindSection(sectname, segname);
   }
 
   MachOSegment* EnsureTextSegment() {
     if (text_segment_ == nullptr) {
+      // For relocatable objects, all sections are put into a single unnamed
+      // segment.
+      auto* const name = type_ == SnapshotType::Object ? mach_o::SEG_UNNAMED
+                                                       : mach_o::SEG_TEXT;
       // Make sure it didn't get added outside this method.
-      ASSERT(FindSegment(mach_o::SEG_TEXT) == nullptr);
-      auto const vm_protection = mach_o::VM_PROT_READ | mach_o::VM_PROT_EXECUTE;
-      text_segment_ = new (zone())
-          MachOSegment(zone(), mach_o::SEG_TEXT, vm_protection, vm_protection);
+      ASSERT(FindSegment(name) == nullptr);
+      auto const vm_protection =
+          type_ == SnapshotType::Object
+              ? mach_o::VM_PROT_ALL
+              : mach_o::VM_PROT_READ | mach_o::VM_PROT_EXECUTE;
+      text_segment_ =
+          new (zone()) MachOSegment(zone(), name, vm_protection, vm_protection);
       commands_.Add(text_segment_);
     }
     return text_segment_;
@@ -1876,18 +1996,34 @@
 
   void Accept(Visitor* visitor) override { visitor->VisitMachOHeader(this); }
 
-  // Since the header is in the initial segment, visiting the load commands
-  // here and also visiting the header in MachOSegment::VisitChildren() would
-  // cause a cycle if, say, Default() is overridden to be recursive.
-  // Thus, the default VisitChildren implementation here does no recursion,
+  // Since the header is in the initial segment for most snapshot types,
+  // visiting the load commands here and also visiting the header in
+  // MachOSegment::VisitChildren() would cause a cycle if, say, Default()
+  // is overridden to be recursive. Thus, the default VisitChildren
+  // implementation here does no recursion.
   void VisitChildren(Visitor* visitor) override {}
-  void VisitSegments(Visitor* visitor) {
+  void VisitContents(Visitor* visitor) {
+    if (type_ == SnapshotType::Object) {
+      // The header is visited during the initial segment for other types.
+      Accept(visitor);
+    }
     for (auto* const c : commands_) {
-      if (!c->IsMachOSegment()) continue;
+      if (type_ != SnapshotType::Object) {
+        // All commands with non-header content should be part of a segment.
+        if (!c->IsMachOSegment()) continue;
+      }
       c->Accept(visitor);
     }
   }
 
+  // Returns the symbol table that is included in the output, which
+  // may or may not be the full symbol table.
+  //
+  // Returns nullptr if called before symbol table initialization.
+  const MachOSymbolTable* IncludedSymbolTable() const {
+    return const_cast<MachOHeader*>(this)->IncludedSymbolTable();
+  }
+
  private:
   void GenerateUuid();
   void CreateBSS();
@@ -1921,6 +2057,9 @@
   // Used to determine whether to include non-global symbols in the
   // symbol table written to disk.
   bool const is_stripped_;
+  // Whether this is a snapshot that has an associated relocatable object
+  // emitted.
+  bool const has_separate_object_;
   // The identifier, used in the LC_ID_DYLIB command and the code signature.
   const char* const identifier_;
   // The absolute path, used to create an N_OSO symbolic debugging variable
@@ -1930,6 +2069,8 @@
   GrowableArray<MachOCommand*> commands_;
   // Contains all symbols for relocation calculations.
   MachOSymbolTable full_symtab_;
+  // For relocatable objects, the "text" segment is the unnamed segment that
+  // holds all sections. Otherwise, it is the text segment as expected.
   MachOSegment* text_segment_ = nullptr;
 
   DISALLOW_COPY_AND_ASSIGN(MachOHeader);
@@ -1939,6 +2080,8 @@
   ASSERT(c != nullptr);
   // Segment contents are always allocated.
   ASSERT(c->IsAllocated());
+  // Only sections should be added to the unnamed segment.
+  ASSERT(!HasName(mach_o::SEG_UNNAMED) || c->IsMachOSection());
   // The order of segment contents is as follows:
   // 1) The header (if this is the initial segment).
   // 2) Content-containing sections and commands (in the linkedit segment).
@@ -1971,7 +2114,7 @@
   const auto& symtab = header.relocation_symbol_table();
   auto* const symbol = symtab.FindLabel(label);
   if (symbol == nullptr) return false;
-  *value = symbol->value;
+  *value = symbol->value();
   return true;
 }
 
@@ -1984,15 +2127,21 @@
                          Type type,
                          const char* id,
                          const char* path,
-                         Dwarf* dwarf)
+                         Dwarf* dwarf,
+                         MachOWriter* object_writer)
     : SharedObjectWriter(zone, stream, type, dwarf),
+      object_writer_(object_writer),
       header_(*new (zone) MachOHeader(
           zone,
           type,
           IsStripped(dwarf),
+          type == SharedObjectWriter::Type::Snapshot &&
+              object_writer != nullptr,
           FLAG_macho_install_name != nullptr ? FLAG_macho_install_name : id,
           path,
-          dwarf)) {}
+          dwarf)) {
+  ASSERT(type == Type::Snapshot || object_writer == nullptr);
+}
 
 void MachOWriter::AddText(const char* name,
                           intptr_t label,
@@ -2001,16 +2150,21 @@
                           const ZoneGrowableArray<Relocation>* relocations,
                           const ZoneGrowableArray<SymbolData>* symbols) {
   auto* const text_segment = header_.EnsureTextSegment();
-  auto* text_section = text_segment->FindSection(mach_o::SECT_TEXT);
+  auto* text_section =
+      text_segment->FindSection(mach_o::SECT_TEXT, mach_o::SEG_TEXT);
   if (text_section == nullptr) {
-    const bool has_contents = type_ == Type::Snapshot;
+    const bool has_contents = type_ != Type::DebugInfo;
     const intptr_t attributes =
         mach_o::S_ATTR_PURE_INSTRUCTIONS | mach_o::S_ATTR_SOME_INSTRUCTIONS;
     text_section = new (zone()) MachOSection(
-        zone(), mach_o::SECT_TEXT, mach_o::S_REGULAR, attributes, has_contents);
+        zone(), mach_o::SECT_TEXT, mach_o::SEG_TEXT, text_segment->Alignment(),
+        mach_o::S_REGULAR, attributes, has_contents);
     text_segment->AddContents(text_section);
   }
   text_section->AddPortion(bytes, size, relocations, symbols, name, label);
+  if (object_writer_ != nullptr) {
+    object_writer_->AddText(name, label, bytes, size, relocations, symbols);
+  }
 }
 
 void MachOWriter::AddROData(const char* name,
@@ -2021,15 +2175,19 @@
                             const ZoneGrowableArray<SymbolData>* symbols) {
   // Const data goes in the text segment, not the data one.
   auto* const text_segment = header_.EnsureTextSegment();
-  auto* const_section = text_segment->FindSection(mach_o::SECT_CONST);
+  auto* const_section =
+      text_segment->FindSection(mach_o::SECT_CONST, mach_o::SEG_TEXT);
   if (const_section == nullptr) {
-    const bool has_contents = type_ == Type::Snapshot;
-    const_section =
-        new (zone()) MachOSection(zone(), mach_o::SECT_CONST, mach_o::S_REGULAR,
-                                  mach_o::S_NO_ATTRIBUTES, has_contents);
+    const bool has_contents = type_ != Type::DebugInfo;
+    const_section = new (zone()) MachOSection(
+        zone(), mach_o::SECT_CONST, mach_o::SEG_TEXT, text_segment->Alignment(),
+        mach_o::S_REGULAR, mach_o::S_NO_ATTRIBUTES, has_contents);
     text_segment->AddContents(const_section);
   }
   const_section->AddPortion(bytes, size, relocations, symbols, name, label);
+  if (object_writer_ != nullptr) {
+    object_writer_->AddROData(name, label, bytes, size, relocations, symbols);
+  }
 }
 
 class WriteVisitor : public MachOContents::Visitor {
@@ -2058,16 +2216,71 @@
   DISALLOW_COPY_AND_ASSIGN(WriteVisitor);
 };
 
+class WriteRelocationsVisitor : public MachOContents::Visitor {
+ public:
+  explicit WriteRelocationsVisitor(MachOWriteStream* stream)
+      : stream_(stream) {}
+
+  void Default(MachOContents* contents) override {}
+
+  void VisitMachOSegment(MachOSegment* segment) override {
+    segment->VisitChildren(this);
+  }
+
+  void VisitMachOSection(MachOSection* section) override {
+    if (auto* const relocations = section->relocations()) {
+      ASSERT_EQUAL(stream_->Position(), section->relocations_file_offset());
+      for (const auto& reloc : *relocations) {
+        stream_->Write32(reloc.address);
+        stream_->Write32(reloc.metadata);
+      }
+    } else {
+      ASSERT_EQUAL(section->relocations_file_offset(), 0);
+    }
+  }
+
+ private:
+  MachOWriteStream* stream_;
+  DISALLOW_COPY_AND_ASSIGN(WriteRelocationsVisitor);
+};
+
 void MachOWriter::Finalize() {
   header_.Finalize();
   if (header_.HasCommand(MachOCodeSignature::kCommandCode)) {
     HashingMachOWriteStream wrapped(zone_, unwrapped_stream_, *this);
     WriteVisitor visitor(&wrapped);
-    header_.VisitSegments(&visitor);
+    header_.VisitContents(&visitor);
+    // Relocatable objects aren't signed, so no relocations to write.
   } else {
     NonHashingMachOWriteStream wrapped(unwrapped_stream_, *this);
     WriteVisitor visitor(&wrapped);
-    header_.VisitSegments(&visitor);
+    header_.VisitContents(&visitor);
+    if (type_ == SharedObjectWriter::Type::Object) {
+      WriteRelocationsVisitor reloc_visitor(&wrapped);
+      header_.VisitContents(&reloc_visitor);
+    }
+  }
+  if (object_writer_ != nullptr) {
+    object_writer_->Finalize();
+  }
+}
+
+void MachOWriter::AssertConsistency(const SharedObjectWriter* debug) const {
+  if (FLAG_macho_reduce_padding) {
+    // TODO(sstrickl): This currently fails because the reduced padding
+    // and difference in header sizes means the virtual addresses won't
+    // align (though symbolicizing the symbol+offset (PCOffset) information
+    // in traces still gives appropriately matching information).
+    //
+    // However, the only usecase for this reduced padding creates a .dSYM
+    // for symbolization instead of using the separate debug info, so
+    // ignore this mismatch for now.
+    return;
+  }
+  if (auto* const debug_macho = debug->AsMachOWriter()) {
+    AssertConsistency(this, debug_macho);
+  } else {
+    FATAL("Expected both snapshot and debug to be MachO");
   }
 }
 
@@ -2121,12 +2334,12 @@
     if (auto* const snapshot_symbol = snapshot_symtab.FindLabel(i)) {
       auto* const debug_info_symbol = debug_info_symtab.FindLabel(i);
       ASSERT(debug_info_symbol != nullptr);
-      if (snapshot_symbol->value != debug_info_symbol->value) {
+      if (snapshot_symbol->value() != debug_info_symbol->value()) {
         FATAL("Snapshot: %s -> %" Px64 ", %s -> %" Px64 "",
               snapshot_symtab.strings().At(snapshot_symbol->name_index),
-              static_cast<uint64_t>(snapshot_symbol->value),
+              static_cast<uint64_t>(snapshot_symbol->value()),
               debug_info_symtab.strings().At(debug_info_symbol->name_index),
-              static_cast<uint64_t>(debug_info_symbol->value));
+              static_cast<uint64_t>(debug_info_symbol->value()));
       }
     } else {
       ASSERT(debug_info_symtab.FindLabel(i) == nullptr);
@@ -2150,14 +2363,16 @@
 // Any component of the build ID which does not have an associated section
 // in the output is kept as 0.
 void MachOHeader::GenerateUuid() {
+  // Don't create a UUID for a relocatable object.
+  if (type_ == SnapshotType::Object) return;
   // Not idempotent.
   ASSERT(!HasCommand(MachOUuid::kCommandCode));
   // Currently, we construct the UUID out of data from two different
   // sections in the text segment: the text section and the const section.
-  auto* const text_segment = FindSegment(mach_o::SEG_TEXT);
-  if (text_segment == nullptr) return;
+  if (text_segment_ == nullptr) return;
 
-  auto* const text_section = text_segment->FindSection(mach_o::SECT_TEXT);
+  auto* const text_section =
+      text_segment_->FindSection(mach_o::SECT_TEXT, mach_o::SEG_TEXT);
   // If there is no text section, then a UUID is not needed, as it is only
   // used to symbolicize non-symbolic stack traces.
   if (text_section == nullptr) return;
@@ -2169,7 +2384,8 @@
   // All MachO snapshots have at least one of the two instruction sections.
   ASSERT(vm_instructions != nullptr || isolate_instructions != nullptr);
 
-  auto* const data_section = text_segment->FindSection(mach_o::SECT_CONST);
+  auto* const data_section =
+      text_segment_->FindSection(mach_o::SECT_CONST, mach_o::SEG_TEXT);
   auto* const vm_data =
       data_section == nullptr
           ? nullptr
@@ -2195,18 +2411,28 @@
   auto* const text_section = FindSection(mach_o::SEG_TEXT, mach_o::SECT_TEXT);
   ASSERT(text_section != nullptr);
 
-  // Not idempotent. Currently the data segment only contains BSS data, so it
-  // shouldn't already exist.
-  ASSERT(FindSegment(mach_o::SEG_DATA) == nullptr);
-  auto const vm_protection = mach_o::VM_PROT_READ | mach_o::VM_PROT_WRITE;
-  auto* const data_segment = new (zone())
-      MachOSegment(zone(), mach_o::SEG_DATA, vm_protection, vm_protection);
-  commands_.Add(data_segment);
+  // Not idempotent.
+  ASSERT(FindSection(mach_o::SECT_BSS, mach_o::SEG_DATA) == nullptr);
+  MachOSegment* data_segment = nullptr;
+  if (type_ == SnapshotType::Object) {
+    // The "text" segment in a relocatable object is the unnamed segment
+    // that contains all sections.
+    data_segment = EnsureTextSegment();
+    ASSERT(data_segment->HasName(mach_o::SEG_UNNAMED));
+  } else {
+    // Currently the data segment only contains BSS data, so it
+    // shouldn't already exist.
+    ASSERT(FindSegment(mach_o::SEG_DATA) == nullptr);
+    auto const vm_protection = mach_o::VM_PROT_READ | mach_o::VM_PROT_WRITE;
+    data_segment = new (zone())
+        MachOSegment(zone(), mach_o::SEG_DATA, vm_protection, vm_protection);
+    commands_.Add(data_segment);
+  }
 
-  auto* const bss_section =
-      new (zone()) MachOSection(zone(), mach_o::SECT_BSS, mach_o::S_ZEROFILL,
-                                mach_o::S_NO_ATTRIBUTES, /*has_contents=*/false,
-                                /*alignment=*/compiler::target::kWordSize);
+  auto* const bss_section = new (zone()) MachOSection(
+      zone(), mach_o::SECT_BSS, mach_o::SEG_DATA,
+      /*alignment=*/compiler::target::kWordSize, mach_o::S_ZEROFILL,
+      mach_o::S_NO_ATTRIBUTES, /*has_contents=*/false);
   data_segment->AddContents(bss_section);
 
   for (const auto& portion : text_section->portions()) {
@@ -2243,6 +2469,37 @@
 void MachOHeader::GenerateCompactUnwindingInformation(
     DwarfSharedObjectStream& stream,
     const GrowableArray<Dwarf::FrameDescriptionEntry>& fdes) {
+  // Each instructions image starts with the Image header and the
+  // InstructionsSection header.
+  const intptr_t header_size =
+      Image::kHeaderSize + compiler::target::InstructionsSection::HeaderSize();
+
+  if (type_ == SnapshotType::Object) {
+    // In relocatable objects, the compact unwind information is written
+    // differently. In this case, it's just a flat table with entries of
+    // the following format:
+    //   start                (word-sized)
+    //   length               (32 bits)
+    //   encoding             (32 bits)
+    //   personality-function (word-sized, 0 if none)
+    //   ldsa                 (word-sized, 0 if none)
+    for (intptr_t i = 0, n = fdes.length(); i < n; i++) {
+      const auto& fde = fdes[i];
+      // The payload of the InstructionsSection.
+      stream.OffsetFromSymbol(fde.label, header_size);
+      stream.u4(fde.size);
+      stream.u4(mach_o::UNWIND_INFO_ENCODING_ARM64_MODE_FRAME);
+#if defined(TARGET_ARCH_IS_32_BIT)
+      stream.u4(0);  // Personality function
+      stream.u4(0);  // LDSA
+#else
+      stream.u8(0);  // Personality function
+      stream.u8(0);  // LDSA
+#endif
+    }
+    return;
+  }
+
   // Since we currently generate only regular second level pages, there's
   // no need for common encodings as those are only used by compressed
   // second level pages.
@@ -2344,10 +2601,6 @@
   stream.u4(mach_o::UNWIND_INFO_REGULAR_SECOND_LEVEL_PAGE);
   stream.u2(sizeof(mach_o::unwind_info_regular_second_level_page_header));
   stream.u2(second_level_page_entry_count);
-  // Each instructions image starts with the Image header and the
-  // InstructionsSection header.
-  const intptr_t header_size =
-      Image::kHeaderSize + compiler::target::InstructionsSection::HeaderSize();
   // There are no instructions until the first InstructionsSection payload.
   stream.OffsetFromSymbol(fdes[0].label, 0, kInt32Size);
   stream.u4(mach_o::UNWIND_INFO_ENCODING_NONE);
@@ -2369,7 +2622,8 @@
 
 void MachOHeader::GenerateUnwindingInformation() {
 #if !defined(TARGET_ARCH_IA32)
-  // Unwinding information is added to the text segment in Mach-O files.
+  // Unwinding information is added to the text segment in Mach-O files
+  // (except for relocatable object files, where the __LD segment name is used).
   // Thus, we need the size of the unwinding information even for debugging
   // information, since adding the unwinding information changes the memory size
   // of the initial text segment and thus changes the values for symbols
@@ -2380,25 +2634,27 @@
   // just use an appropriate zerofill section for it.
   const bool use_zerofill = type_ == SnapshotType::DebugInfo;
   const intptr_t alignment = compiler::target::kWordSize;
-  auto add_unwind_section =
-      [&](MachOSegment* segment, const char* sectname,
+  auto create_unwind_section =
+      [&](const char* segname, const char* sectname,
           const ZoneWriteStream& stream,
-          const SharedObjectWriter::RelocationArray* relocations = nullptr) {
-        // Not idempotent.
-        ASSERT(segment->FindSection(sectname) == nullptr);
-        auto* const section = new (zone())
-            MachOSection(zone(), sectname,
-                         use_zerofill ? mach_o::S_ZEROFILL : mach_o::S_REGULAR,
-                         mach_o::S_NO_ATTRIBUTES, !use_zerofill, alignment);
-        section->AddPortion(use_zerofill ? nullptr : stream.buffer(),
-                            stream.bytes_written(),
-                            use_zerofill ? nullptr : relocations);
-        segment->AddContents(section);
-      };
+          const SharedObjectWriter::RelocationArray* relocations = nullptr,
+          const SharedObjectWriter::SymbolDataArray* symbols =
+              nullptr) -> MachOSection* {
+    // Not idempotent.
+    ASSERT(FindSection(sectname, segname) == nullptr);
+    auto* const section = new (zone())
+        MachOSection(zone(), sectname, segname, alignment,
+                     use_zerofill ? mach_o::S_ZEROFILL : mach_o::S_REGULAR,
+                     mach_o::S_NO_ATTRIBUTES, !use_zerofill);
+    section->AddPortion(use_zerofill ? nullptr : stream.buffer(),
+                        stream.bytes_written(),
+                        use_zerofill ? nullptr : relocations, symbols);
+    return section;
+  };
 
   ASSERT(text_segment_ != nullptr);
   if (auto* const text_section =
-          text_segment_->FindSection(mach_o::SECT_TEXT)) {
+          text_segment_->FindSection(mach_o::SECT_TEXT, mach_o::SEG_TEXT)) {
     // Generate the DWARF FDEs even for MacOS, because the same information
     // is used to create the compact unwinding info.
     GrowableArray<Dwarf::FrameDescriptionEntry> fdes(zone_, 0);
@@ -2412,38 +2668,63 @@
     ZoneWriteStream stream(zone(), DwarfSharedObjectStream::kInitialBufferSize);
     DwarfSharedObjectStream dwarf_stream(zone(), &stream);
 
+    SharedObjectWriter::SymbolDataArray* symbols = nullptr;
 #if defined(DART_TARGET_OS_MACOS) && defined(TARGET_ARCH_ARM64)
     GenerateCompactUnwindingInformation(dwarf_stream, fdes);
-    auto* const sectname = mach_o::SECT_UNWIND_INFO;
+    auto* const sectname = type_ == SnapshotType::Object
+                               ? mach_o::SECT_COMPACT_UNWIND
+                               : mach_o::SECT_UNWIND_INFO;
 #else
     Dwarf::WriteCallFrameInformationRecords(&dwarf_stream, fdes);
     auto* const sectname = mach_o::SECT_EH_FRAME;
+    if (type_ == SnapshotType::Object) {
+      // To add appropriate relocations for the EH_FRAME section, a local symbol
+      // must be added since this section includes relocations with
+      // kSelfRelative source labels.
+      const size_t size = stream.bytes_written();
+      symbols = new (zone_) SharedObjectWriter::SymbolDataArray(zone_, 1);
+      symbols->Add({"_kDartMachOEhFrameSection",
+                    SharedObjectWriter::SymbolData::Type::Section, 0, size,
+                    SharedObjectWriter::kMachOEhFrameLabel});
+    }
 #endif
 
-    add_unwind_section(text_segment_, sectname, stream,
-                       dwarf_stream.relocations());
+    auto* const segname =
+        type_ == SnapshotType::Object ? mach_o::SEG_LD : mach_o::SEG_TEXT;
+    auto* const section = create_unwind_section(
+        segname, sectname, stream, dwarf_stream.relocations(), symbols);
+    text_segment_->AddContents(section);
   }
 
 #if defined(UNWINDING_RECORDS_WINDOWS_PRECOMPILER)
   // Append Windows unwinding instructions as a __unwind_info section at
   // the end of any executable segments.
-  for (auto* const command : commands_) {
-    if (auto* const segment = command->AsMachOSegment()) {
-      if (segment->IsExecutable()) {
-        // Only more zerofill sections can come after zerofill sections, and
-        // the unwinding instructions cover the entire executable segment up
-        // to the unwinding instructions including zerofill sections.
-        ASSERT(use_zerofill || !segment->HasZerofillSections());
-        const intptr_t records_size = UnwindingRecordsPlatform::SizeInBytes();
-        ZoneWriteStream stream(zone(), /*initial_size=*/records_size);
-        uint8_t* unwinding_instructions = zone()->Alloc<uint8_t>(records_size);
-        const intptr_t section_start =
-            Utils::RoundUp(segment->UnpaddedMemorySize(), alignment);
-        stream.WriteBytes(UnwindingRecords::GenerateRecordsInto(
-                              section_start, unwinding_instructions),
-                          records_size);
-        ASSERT_EQUAL(records_size, stream.Position());
-        add_unwind_section(segment, mach_o::SECT_UNWIND_INFO, stream);
+  //
+  // Don't do this for relocatable objects, because those can't be loaded
+  // by the non-native loader and there's no way to link them into a
+  // program since Mach-O is not a supported object type on Windows anyway.
+  if (type_ != SnapshotType::Object) {
+    for (auto* const command : commands_) {
+      if (auto* const segment = command->AsMachOSegment()) {
+        if (segment->IsExecutable()) {
+          // Only more zerofill sections can come after zerofill sections, and
+          // the unwinding instructions cover the entire executable segment up
+          // to the unwinding instructions including zerofill sections.
+          ASSERT(use_zerofill || !segment->HasZerofillSections());
+          const intptr_t records_size = UnwindingRecordsPlatform::SizeInBytes();
+          ZoneWriteStream stream(zone(), /*initial_size=*/records_size);
+          uint8_t* unwinding_instructions =
+              zone()->Alloc<uint8_t>(records_size);
+          const intptr_t section_start =
+              Utils::RoundUp(segment->UnpaddedMemorySize(), alignment);
+          stream.WriteBytes(UnwindingRecords::GenerateRecordsInto(
+                                section_start, unwinding_instructions),
+                            records_size);
+          ASSERT_EQUAL(records_size, stream.Position());
+          auto* const section = create_unwind_section(
+              segment->name(), mach_o::SECT_UNWIND_INFO, stream);
+          segment->AddContents(section);
+        }
       }
     }
   }
@@ -2457,10 +2738,8 @@
     ASSERT(!HasCommand(MachOIdDylib::kCommandCode));
     commands_.Add(new (zone_) MachOIdDylib(identifier_));
 #if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
-    ASSERT(!HasCommand(MachOBuildVersion::kCommandCode));
     ASSERT(!HasCommand(MachOLoadDylib::kCommandCode));
     ASSERT(!HasCommand(MachORunPath::kCommandCode));
-    commands_.Add(new (zone_) MachOBuildVersion());
     commands_.Add(MachOLoadDylib::CreateLoadSystemDylib(zone_));
     if (FLAG_macho_rpath != nullptr) {
       const char* current = FLAG_macho_rpath;
@@ -2474,6 +2753,12 @@
     }
 #endif
   }
+#if defined(DART_TARGET_OS_MACOS) || defined(DART_TARGET_OS_MACOS_IOS)
+  if (type_ == SnapshotType::Snapshot || type_ == SnapshotType::Object) {
+    ASSERT(!HasCommand(MachOBuildVersion::kCommandCode));
+    commands_.Add(new (zone_) MachOBuildVersion());
+  }
+#endif
 }
 
 void MachOHeader::InitializeSymbolTables() {
@@ -2481,14 +2766,16 @@
   ASSERT_EQUAL(full_symtab_.num_symbols(), 0);
   ASSERT(!HasCommand(MachOSymbolTable::kCommandCode));
 
-  // Grab all the sections in order.
+  // Grab all the sections in order and set their current index.
   GrowableArray<MachOSection*> sections(zone_, 0);
+  intptr_t section_index = 1;  // 1-based.
   for (auto* const command : commands_) {
     // Should be run before ComputeOffsets.
     ASSERT(!command->HasContents() || !command->file_offset_is_set());
     if (auto* const s = command->AsMachOSegment()) {
       for (auto* const c : s->contents()) {
         if (auto* const section = c->AsMachOSection()) {
+          section->set_index(section_index++);
           sections.Add(section);
         }
       }
@@ -2497,19 +2784,21 @@
 
   // This symbol table is for the MachOWriter's internal use. All symbols
   // should be added to it so the writer can resolve relocations.
-  full_symtab_.Initialize(path_, sections, /*is_stripped=*/false);
+  full_symtab_.Initialize(type_, path_, sections, /*is_stripped=*/false);
   auto* table = &full_symtab_;
   if (is_stripped_) {
     // Create a separate symbol table that is actually written to the output.
     // This one will only contain what's needed for the dynamic symbol table.
-    auto* const table = new (zone()) MachOSymbolTable(zone());
-    table->Initialize(path_, sections, is_stripped_);
+    auto* const table = new (zone())
+        MachOSymbolTable(zone(), /*in_segment=*/type_ != SnapshotType::Object);
+    table->Initialize(type_, path_, sections, is_stripped_);
   }
   commands_.Add(table);
 
-  // For snapshots, include a dynamic symbol table as well.
-  if (type_ == SnapshotType::Snapshot) {
-    auto* const dynamic_symtab = new (zone()) MachODynamicSymbolTable(*table);
+  // For non-debugging information, include a dynamic symbol table as well.
+  if (type_ != SnapshotType::DebugInfo) {
+    auto* const dynamic_symtab = new (zone()) MachODynamicSymbolTable(
+        *table, /*in_segment=*/type_ != SnapshotType::Object);
     commands_.Add(dynamic_symtab);
   }
 }
@@ -2517,28 +2806,43 @@
 void MachOHeader::FinalizeDwarfSections() {
   if (dwarf_ == nullptr) return;
 
+  if (has_separate_object_) {
+    // If there is an associated relocatable object, do not emit the DWARF
+    // sections; they'll be emitted in the relocatable object instead.
+    ASSERT(type_ == SnapshotType::Snapshot);
+    return;
+  }
+
   // Currently we only output DWARF information involving code.
 #if defined(DEBUG)
-  auto* const text_segment = FindSegment(mach_o::SEG_TEXT);
-  ASSERT(text_segment != nullptr);
-  ASSERT(text_segment->FindSection(mach_o::SECT_TEXT) != nullptr);
+  ASSERT(text_segment_ != nullptr);
+  ASSERT(text_segment_->FindSection(mach_o::SECT_TEXT, mach_o::SEG_TEXT) !=
+         nullptr);
 #endif
 
-  // Create the DWARF segment, which should not already exist.
-  ASSERT(FindSegment(mach_o::SEG_DWARF) == nullptr);
-  auto const init_vm_protection = mach_o::VM_PROT_READ | mach_o::VM_PROT_WRITE;
-  auto const max_vm_protection = init_vm_protection | mach_o::VM_PROT_EXECUTE;
-  auto* const dwarf_segment = new (zone()) MachOSegment(
-      zone(), mach_o::SEG_DWARF, init_vm_protection, max_vm_protection);
-  commands_.Add(dwarf_segment);
+  MachOSegment* dwarf_segment = nullptr;
+  if (type_ == SnapshotType::Object) {
+    // All sections are put into the unnamed segment.
+    dwarf_segment = text_segment_;
+    ASSERT(dwarf_segment->HasName(mach_o::SEG_UNNAMED));
+  } else {
+    // Create the DWARF segment, which should not already exist.
+    ASSERT(FindSegment(mach_o::SEG_DWARF) == nullptr);
+    auto const init_vm_protection =
+        mach_o::VM_PROT_READ | mach_o::VM_PROT_WRITE;
+    auto const max_vm_protection = init_vm_protection | mach_o::VM_PROT_EXECUTE;
+    dwarf_segment = new (zone()) MachOSegment(
+        zone(), mach_o::SEG_DWARF, init_vm_protection, max_vm_protection);
+    commands_.Add(dwarf_segment);
+  }
 
   const intptr_t alignment = 1;  // No extra padding.
   auto add_debug = [&](const char* name,
                        const DwarfSharedObjectStream& stream) {
-    ASSERT(!dwarf_segment->FindSection(name));
-    auto* const section = new (zone())
-        MachOSection(zone(), name, mach_o::S_REGULAR, mach_o::S_ATTR_DEBUG,
-                     /*has_contents=*/true, alignment);
+    ASSERT(!dwarf_segment->FindSection(name, mach_o::SEG_DWARF));
+    auto* const section =
+        new (zone()) MachOSection(zone(), name, mach_o::SEG_DWARF, alignment,
+                                  mach_o::S_REGULAR, mach_o::S_ATTR_DEBUG);
     section->AddPortion(stream.buffer(), stream.bytes_written(),
                         stream.relocations());
     dwarf_segment->AddContents(section);
@@ -2602,39 +2906,30 @@
   GrowableArray<MachOSegment*> other_segments(zone_, 0);
 
   // Next comes any non-segment load commands that have allocated content
-  // outside of the header like the symbol table. A linkedit segment
-  // is created later to contain the non-header contents of these commands.
+  // outside of the header like the symbol table. For relocatable objects,
+  // the contents of these sections are written after the unnamed segment,
+  // otherwise a linkedit segment is created later to contain the non-header
+  // contents of these commands.
   GrowableArray<MachOCommand*> linkedit_commands(zone_, 0);
-
-  // Maps segments to the section count and old initial section index for
-  // that segment. (Sections are not reordered during this, so this is
-  // all that's needed to calculate new section indices.)
-  using SegmentMapTrait =
-      RawPointerKeyValueTrait<const MachOSegment,
-                              std::pair<intptr_t, intptr_t>>;
-  DirectChainedHashMap<SegmentMapTrait> section_info(zone_, num_commands);
-  intptr_t num_sections = 0;
   for (auto* const command : commands_) {
     // Check that we're not reordering after offsets have been computed.
     ASSERT(!command->HasContents() || !command->file_offset_is_set());
     if (auto* const s = command->AsMachOSegment()) {
-      const intptr_t count = s->NumSections();
-      if (count != 0) {
-        // Section indices start from 1.
-        section_info.Insert({s, {count, num_sections + 1}});
-        num_sections += count;
-      }
-      if (s->HasName(mach_o::SEG_TEXT)) {
+      if (s->HasName(mach_o::SEG_TEXT) || s->HasName(mach_o::SEG_UNNAMED)) {
+        ASSERT_EQUAL(type_ == SnapshotType::Object,
+                     s->HasName(mach_o::SEG_UNNAMED));
         ASSERT(text_segment == s);
       } else if (s->ContainsSymbols()) {
         symbol_segments.Add(s);
       } else {
         other_segments.Add(s);
       }
-    } else if (!command->HasContents()) {
-      header_only_commands.Add(command);
-    } else {
+    } else if (type_ == SnapshotType::Object || command->HasContents()) {
+      // Stick every non-segment into linkedit_commands so that the segment
+      // load command is first in a relocatable object.
       linkedit_commands.Add(command);
+    } else {
+      header_only_commands.Add(command);
     }
   }
 
@@ -2642,19 +2937,21 @@
   // it only contains global exported symbols, which means there should
   // be a linkedit segment.
   ASSERT(!linkedit_commands.is_empty());
-  auto* const linkedit_segment =
-      new (zone_) MachOSegment(zone_, mach_o::SEG_LINKEDIT);
-  num_commands += 1;
-  for (auto* const c : linkedit_commands) {
-    linkedit_segment->AddContents(c);
-  }
-  if (type_ == SnapshotType::Snapshot && FLAG_macho_linker_signature) {
-    // Also include an embedded ad-hoc linker signed code signature as the
-    // last contents of the linkedit segment (which is the last segment).
-    auto* const signature = new (zone_) MachOCodeSignature(identifier_);
-    linkedit_segment->AddContents(signature);
-    linkedit_commands.Add(signature);
+  MachOSegment* linkedit_segment = nullptr;
+  if (type_ != SnapshotType::Object) {
+    linkedit_segment = new (zone_) MachOSegment(zone_, mach_o::SEG_LINKEDIT);
     num_commands += 1;
+    for (auto* const c : linkedit_commands) {
+      linkedit_segment->AddContents(c);
+    }
+    if (type_ == SnapshotType::Snapshot && FLAG_macho_linker_signature) {
+      // Also include an embedded ad-hoc linker signed code signature as the
+      // last contents of the linkedit segment (which is the last segment).
+      auto* const signature = new (zone_) MachOCodeSignature(identifier_);
+      linkedit_segment->AddContents(signature);
+      linkedit_commands.Add(signature);
+      num_commands += 1;
+    }
   }
 
   GrowableArray<MachOSegment*> segments(
@@ -2663,33 +2960,28 @@
   segments.Add(text_segment);
   segments.AddArray(symbol_segments);
   segments.AddArray(other_segments);
-  segments.Add(linkedit_segment);
+  if (type_ != SnapshotType::Object) {
+    segments.Add(linkedit_segment);
+  }
 
-  // The initial segment in the file should have the header as its initial
-  // contents. Since the header is not a section, this won't change the
-  // section numbering.
-  segments[0]->AddContents(this);
+  if (type_ != SnapshotType::Object) {
+    // The initial segment in the file should have the header as its initial
+    // contents. Since the header is not a section, this won't change the
+    // section numbering.
+    segments[0]->AddContents(this);
+  }
 
   // Now populate reordered_commands.
   reordered_commands.AddArray(header_only_commands);
 
-  // While adding segments, also map old section indices to new ones. Include
-  // a map of mach_o::NO_SECT to mach_o::NO_SECT so that changing the section
-  // index on a non-section symbol is a no-op.
-  GrowableArray<intptr_t> index_map(zone_, num_sections + 1);
-  index_map.FillWith(mach_o::NO_SECT, 0, num_sections + 1);
-  // Section indices start from 1.
-  intptr_t current_section_index = 1;
-  for (auto* const s : segments) {
-    reordered_commands.Add(s);
-    auto* const kv = section_info.Lookup(s);
-    if (kv != nullptr) {
-      const auto& [num_sections, old_start] = SegmentMapTrait::ValueOf(*kv);
-      ASSERT(num_sections > 0);  // Otherwise it's not in the map.
-      ASSERT(old_start != mach_o::NO_SECT);
-      for (intptr_t i = 0; i < num_sections; ++i) {
+  // While adding segments, also re-index sections.
+  intptr_t current_section_index = 1;  // 1-based.
+  for (auto* const segment : segments) {
+    reordered_commands.Add(segment);
+    for (auto* const c : segment->contents()) {
+      if (auto* const s = c->AsMachOSection()) {
         ASSERT(current_section_index != mach_o::NO_SECT);
-        index_map[old_start + i] = current_section_index++;
+        s->set_index(current_section_index++);
       }
     }
   }
@@ -2701,33 +2993,17 @@
   // Replace the content of commands_ with the reordered commands.
   commands_.Clear();
   commands_.AddArray(reordered_commands);
-
-  // This must be true for uses of the map to be correct.
-  ASSERT_EQUAL(index_map[mach_o::NO_SECT], mach_o::NO_SECT);
-#if defined(DEBUG)
-  for (intptr_t i = 1; i < num_sections; ++i) {
-    ASSERT(index_map[i] != mach_o::NO_SECT);
-  }
-#endif
-
-  // Update the section indices of any section-owned symbols.
-  full_symtab_.UpdateSectionIndices(index_map);
-  auto* const table = IncludedSymbolTable();
-  if (table != &full_symtab_) {
-    ASSERT(is_stripped_);
-    table->UpdateSectionIndices(index_map);
-  }
 }
 
 struct ContentOffsetsVisitor : public MachOContents::Visitor {
-  explicit ContentOffsetsVisitor(Zone* zone) : address_map(zone, 1) {
-    // Add NO_SECT -> 0 mapping.
-    address_map.Add(0);
-  }
+  explicit ContentOffsetsVisitor(Zone* zone) {}
 
   void Default(MachOContents* contents) {
     ASSERT_EQUAL(contents->IsMachOHeader(), file_offset == 0);
-    ASSERT_EQUAL(contents->IsMachOHeader(), memory_address == 0);
+    // This can't be strictly equal, because the header is not in a segment
+    // in relocatable objects and thus is not allocated, so the first
+    // allocated contents (a section) will have a memory offset of 0.
+    ASSERT(!contents->IsMachOHeader() || memory_address == 0);
     // Increment the file and memory offsets by the appropriate amounts.
     if (contents->HasContents()) {
       file_offset = Utils::RoundUp(file_offset, contents->Alignment());
@@ -2751,7 +3027,8 @@
 
   void VisitMachOSegment(MachOSegment* segment) {
     ASSERT_EQUAL(segment->IsInitial(), file_offset == 0);
-    ASSERT_EQUAL(segment->IsInitial(), memory_address == 0);
+    ASSERT_EQUAL(segment->IsInitial() || segment->HasName(mach_o::SEG_UNNAMED),
+                 memory_address == 0);
     // Segments are always allocated and we set the file offset even
     // when the segment doesn't actually write any contents.
     file_offset = Utils::RoundUp(file_offset, segment->Alignment());
@@ -2770,17 +3047,6 @@
                  segment->memory_address() + segment->MemorySize());
   }
 
-  void VisitMachOSection(MachOSection* section) {
-    // Sections do not contain other sections, so the visitor can use the
-    // default behavior without worrying about adding to the address map in
-    // the wrong order.
-    Visitor::VisitMachOSection(section);
-    address_map.Add(section->memory_address());
-  }
-
-  // Maps indices of allocated sections in the section table to memory offsets.
-  // Note that sections are 1-indexed, with 0 (NO_SECT) mapping to 0.
-  GrowableArray<uword> address_map;
   intptr_t file_offset = 0;
   intptr_t memory_address = 0;
 
@@ -2788,7 +3054,369 @@
   DISALLOW_COPY_AND_ASSIGN(ContentOffsetsVisitor);
 };
 
+class RelocationsConverter : public MachOContents::Visitor {
+  using SnapshotType = SharedObjectWriter::Type;
+  using Relocation = SharedObjectWriter::Relocation;
+
+ public:
+  explicit RelocationsConverter(Zone* zone,
+                                const MachOHeader& header,
+                                intptr_t start)
+      : zone_(zone),
+        output_is_relocatable_object_(header.type() == SnapshotType::Object),
+        symbol_table_(*ASSERT_NOTNULL(header.IncludedSymbolTable())),
+        file_offset_(Utils::RoundUp(start, compiler::target::kWordSize)),
+        portion_and_section_by_label_(zone) {
+    for (auto* const command : header.commands()) {
+      if (auto* const segment = command->AsMachOSegment()) {
+        for (auto* const c : segment->contents()) {
+          if (auto* const s = c->AsMachOSection()) {
+            for (const auto& p : s->portions()) {
+              portion_and_section_by_label_.Insert({p.label, {s, &p}});
+            }
+          }
+        }
+      }
+    }
+  }
+
+  void Default(MachOContents* contents) override {}
+
+  void VisitMachOSegment(MachOSegment* segment) override {
+    segment->VisitChildren(this);
+  }
+
+  void VisitMachOSection(MachOSection* section) override {
+    current_relocations_ = nullptr;
+    current_relocation_addends_ = nullptr;
+    if (output_is_relocatable_object_) {
+      ASSERT(section->file_offset_is_set());
+      current_section_ = section;
+      for (const auto& p : section->portions()) {
+        if (p.relocations == nullptr) continue;
+        if (p.symbols != nullptr && !p.symbols->is_empty()) {
+          // Local symbols are sorted in order of offset into the portion.
+          starting_index_for_self_ =
+              symbol_table_.IndexForLabel(p.symbols->At(0).label);
+        }
+        current_portion_ = &p;
+        for (const auto& reloc : *p.relocations) {
+          ConvertRelocation(reloc);
+        }
+        starting_index_for_self_ = -1;
+        current_portion_ = nullptr;
+      }
+      current_section_ = nullptr;
+    }
+    section->set_relocations(current_relocations_);
+    section->set_relocation_addends(current_relocation_addends_);
+    section->set_relocations_file_offset(
+        current_relocations_ != nullptr ? file_offset_ : 0);
+    file_offset_ +=
+        section->num_relocations() * sizeof(mach_o::relocation_info);
+  }
+
+ private:
+  static uint32_t RelocationSize(intptr_t size) {
+    switch (size) {
+      case 1:
+        return mach_o::RELOC_SIZE_BYTE;
+      case 2:
+        return mach_o::RELOC_SIZE_2BYTES;
+      case 4:
+        return mach_o::RELOC_SIZE_4BYTES;
+      case 8:
+        return mach_o::RELOC_SIZE_8BYTES;
+      default:
+        FATAL("Unexpected relocation size %" Pd "", size);
+        return mach_o::RELOC_SIZE_BYTE;
+    }
+  }
+
+  // Finds the closest symbol to the offset in the given section portion.
+  // Starts the search of local symbols in the symbol table from starting_index
+  // and updates starting_index if the closest symbol is a local symbol with an
+  // appropriate place to start the next search for any portion offsets after
+  // the current one.
+  intptr_t FindClosestSymbolIndexTo(intptr_t portion_offset,
+                                    const MachOSection* section,
+                                    const MachOSection::Portion* portion,
+                                    intptr_t& starting_index) {
+    const uword address =
+        section->memory_address() + portion->offset + portion_offset;
+    MachOSymbolTable::Symbol* current = nullptr;
+    if (starting_index >= 0) {
+      current = &symbol_table_.symbols()[starting_index];
+      if (current->value() == address) {
+        return starting_index;
+      } else if (current->value() < address) {
+        // Since index is the index of a local symbol, we're guaranteed
+        // that there's always at least one more symbol in the symbol table,
+        // as the global symbols come afterwards.
+        auto* next_symbol = &symbol_table_.symbols()[starting_index + 1];
+        // Search until we run out of local symbols for this section.
+        while (next_symbol->section_index() == section->index()) {
+          // Stop if the current symbol is closer than the next.
+          if (Utils::Abs(next_symbol->value() - address) >=
+              Utils::Abs(address - current->value())) {
+            break;
+          }
+          ++starting_index;
+          current = next_symbol;
+          next_symbol = &symbol_table_.symbols()[starting_index + 1];
+        }
+        return starting_index;
+      }
+      // Fall through to see if the closest global symbol preceding
+      // this address is closer.
+    }
+    intptr_t label = portion->label;
+    if (label == 0) {
+      // Search for a global symbol label in the portions preceding this one.
+      for (const auto& p : section->portions()) {
+        if (portion == &p) break;
+        if (p.label != 0) {
+          label = p.label;
+        }
+      }
+    }
+    if (current != nullptr) {
+      // Check to see if the found global symbol (if any) is closer than the
+      // local symbol following this address.
+      intptr_t global_index = symbol_table_.IndexForLabel(label);
+      if (global_index >= 0) {
+        const auto& global_symbol = symbol_table_.symbols()[global_index];
+        if (Utils::Abs(address - global_symbol.value()) <=
+            Utils::Abs(current->value() - address)) {
+          return global_index;
+        }
+      }
+      return starting_index;
+    }
+    // IndexForLabel will return a negative value for label == 0.
+    return symbol_table_.IndexForLabel(label);
+  }
+
+  MachORelocationsArray* EnsureCurrentRelocations() {
+    if (current_relocations_ == nullptr) {
+      current_relocations_ = new (zone_) MachORelocationsArray(zone_, 0);
+    }
+    return current_relocations_;
+  }
+
+  MachORelocationAddendsArray* EnsureCurrentRelocationAddends() {
+    if (current_relocation_addends_ == nullptr) {
+      current_relocation_addends_ =
+          new (zone_) MachORelocationAddendsArray(zone_, 0);
+    }
+    return current_relocation_addends_;
+  }
+
+  void ConvertRelocation(const Relocation& reloc) {
+    // In the Dart VM, we turn relocations into up to three different parts
+    // in a Mach-O relocatable object:
+    //
+    // - A SUBTRACTOR relocation entry for [reloc.source_label].
+    // - An UNSIGNED relocation entry for [reloc.target_label].
+    // - An addend stored at [reloc.section_offset] in the section contents.
+    //
+    // If the source and target labels are the same, then there are no
+    // relocation entries added and the addend is simply:
+    //    [reloc.target_offset] - [reloc.source_offset]
+    //
+    // If there are distinct source and target labels, then a SUBTRACTOR
+    // relocation entry for [reloc.source_label] is emitted followed by the
+    // UNSIGNED relocation entry for [reloc.target_label]. Both relocation
+    // entries are based on symbols. The addend, like the previous case, is:
+    //    [reloc.target_offset] - [reloc.source_offset]
+    //
+    // If [reloc.source_label] is kSnapshotRelative, then only an UNSIGNED
+    // relocation based on the section is emitted. Since a section-based
+    // relocation entry is used, the addend differs from the other two cases:
+    //     [current_section_.memory_address()] + [reloc.section_offset] +
+    //         [reloc.target_offset] - [reloc.source_offset]
+    // That is, the virtual address of the relocation is added to the addend.
+    if (!Utils::IsInt(kBitsPerInt32,
+                      current_portion_->offset + reloc.section_offset)) {
+      FATAL("Offset into section for relocation is not a 32-bit integer.");
+    }
+    int32_t section_offset = current_portion_->offset + reloc.section_offset;
+    const intptr_t address =
+        current_section_->memory_address() + section_offset;
+    if (reloc.target_label == SharedObjectWriter::kBuildIdLabel) {
+      ASSERT_EQUAL(reloc.target_offset, 0);
+      ASSERT_EQUAL(reloc.source_offset, 0);
+      ASSERT_EQUAL(reloc.size_in_bytes, compiler::target::kWordSize);
+      // Build IDs are UUID load commands in Mach-O and so have no
+      // associated symbol to use for relocations.
+      EnsureCurrentRelocationAddends()->Add(Image::kNoBuildId);
+      return;
+    }
+    intptr_t addend = reloc.target_offset - reloc.source_offset;
+    // If there is an emitted subtrahend (the source), emit it before
+    // the minuend (the target).
+    bool emitted_subtrahend = false;
+    if (reloc.source_label == reloc.target_label) {
+      // The relocation can be computed eagerly as the source and target
+      // refer to the same object.
+    } else if (reloc.source_label == Relocation::kSnapshotRelative) {
+      ASSERT_EQUAL(reloc.source_offset, 0);
+      ASSERT_EQUAL(reloc.size_in_bytes, compiler::target::kWordSize);
+      if (auto* const kv =
+              portion_and_section_by_label_.Lookup(reloc.target_label)) {
+        const auto [section, portion] = kv->value;
+        if (section == current_section_) {
+          ASSERT(section->HasName(mach_o::SECT_TEXT) &&
+                 section->HasSegname(mach_o::SEG_TEXT));
+          // This is considered an illegal text relocation by clang, so omit
+          // this relocation.
+          EnsureCurrentRelocationAddends()->Add(Image::kNoRelocatedAddress);
+          return;
+        }
+      }
+    } else {
+      // The subtrahend _must_ be a symbol.
+      intptr_t index = -1;
+      if (reloc.source_label == Relocation::kSelfRelative) {
+        index = FindClosestSymbolIndexTo(reloc.section_offset, current_section_,
+                                         current_portion_,
+                                         starting_index_for_self_);
+        if (index < 0) {
+          FATAL("Cannot find any symbol in section %" Pd "",
+                current_section_->index());
+        }
+        const auto& closest_symbol = symbol_table_.symbols()[index];
+        // Adjust the addend by subtracting the offset from the found symbol.
+        addend -= address - closest_symbol.value();
+      } else {
+        index = symbol_table_.IndexForLabel(reloc.source_label);
+        RELEASE_ASSERT(index >= 0);
+      }
+      if (!Utils::IsUint(mach_o::RELOC_METADATA_INDEX_BITS, index)) {
+        FATAL("Symbol index cannot fit into metadata payload: %" Pd "", index);
+      }
+      uint32_t source_metadata = index | mach_o::RELOC_EXTERN;
+#if defined(TARGET_ARCH_X64)
+      source_metadata |= mach_o::RELOC_TYPE_X64_SUBTRACTOR;
+#elif defined(TARGET_ARCH_ARM64)
+      source_metadata |= mach_o::RELOC_TYPE_ARM64_SUBTRACTOR;
+#else
+      // Relocatable objects aren't handled for this architecture.
+      UNREACHABLE();
+#endif
+      source_metadata |= RelocationSize(reloc.size_in_bytes);
+      EnsureCurrentRelocations()->Add({section_offset, source_metadata});
+      emitted_subtrahend = true;
+    }
+    // Now calculate the relocation entry for the base or minuend (target).
+    // If there is no subtrahend, the base is emitted as a relocation using
+    // a section index. If the target and source are the same, then no entries
+    // are emitted and the relocatable value is computed eagerly and stored as
+    // the addend.
+    //
+    // Note that the base addend for section-based relocations is the virtual
+    // address of the relocation, which is added here after determining which
+    // kind of relocation to use.
+    //
+    // For symbol-based relocations, the base addend is 0.
+    if (reloc.target_label != reloc.source_label) {
+      uint32_t target_metadata = 0;
+      intptr_t index = symbol_table_.IndexForLabel(reloc.target_label);
+      if (index >= 0) {
+        if (emitted_subtrahend) {
+          // Both subtrahend and minuend must be emitted as symbols.
+          target_metadata |= mach_o::RELOC_EXTERN;
+        } else {
+          const auto& symbol = symbol_table_.symbols()[index];
+          index = symbol.section_index();
+          addend += symbol.value();
+        }
+      } else if (reloc.target_label == Relocation::kSelfRelative) {
+        if (emitted_subtrahend) {
+          index = FindClosestSymbolIndexTo(reloc.section_offset,
+                                           current_section_, current_portion_,
+                                           starting_index_for_self_);
+          if (index < 0) {
+            FATAL("Cannot find any symbol in section %" Pd "",
+                  current_section_->index());
+          }
+          const auto& closest_symbol = symbol_table_.symbols()[index];
+          // Adjust the addend by adding the offset from the found symbol.
+          addend += address - closest_symbol.value();
+        } else {
+          index = current_section_->index();
+          addend += address;
+        }
+      } else {
+        auto* const kv =
+            portion_and_section_by_label_.Lookup(reloc.target_label);
+        RELEASE_ASSERT(kv != nullptr);
+        const auto [section, portion] = kv->value;
+        const intptr_t target_address =
+            section->memory_address() + portion->offset;
+        if (emitted_subtrahend) {
+          intptr_t starting_index = symbol_table_.IndexForLabel(portion->label);
+          index = FindClosestSymbolIndexTo(0, section, portion, starting_index);
+          if (index < 0) {
+            FATAL("Cannot find any symbol in section %" Pd "",
+                  section->index());
+          }
+          const auto& closest_symbol = symbol_table_.symbols()[index];
+          // Adjust the addend by adding the offset from the found symbol.
+          addend += target_address - closest_symbol.value();
+        } else {
+          index = section->index();
+          addend += target_address;
+        }
+        ASSERT(index != mach_o::NO_SECT);
+      }
+      if (!Utils::IsUint(mach_o::RELOC_METADATA_INDEX_BITS, index)) {
+        FATAL("Could not convert target label %" Pd
+              " of relocation, got %s index %" Pd " and addend %#" Px "",
+              reloc.target_label,
+              (target_metadata & mach_o::RELOC_EXTERN) != 0 ? "symbol"
+                                                            : "section",
+              index, addend);
+      }
+      target_metadata |= index;
+#if defined(TARGET_ARCH_X64)
+      target_metadata |= mach_o::RELOC_TYPE_X64_UNSIGNED;
+#elif defined(TARGET_ARCH_ARM64)
+      target_metadata |= mach_o::RELOC_TYPE_ARM64_UNSIGNED;
+#else
+      // Relocatable objects aren't handled for this architecture.
+      UNREACHABLE();
+#endif
+      target_metadata |= RelocationSize(reloc.size_in_bytes);
+      EnsureCurrentRelocations()->Add({section_offset, target_metadata});
+    }
+    if (!Utils::IsInt(reloc.size_in_bytes * kBitsPerByte, addend)) {
+      FATAL("Calculated addend for relocation too large: %#" Px "", addend);
+    }
+    EnsureCurrentRelocationAddends()->Add(addend);
+  }
+
+  Zone* const zone_;
+  const bool output_is_relocatable_object_;
+  const MachOSymbolTable& symbol_table_;
+  intptr_t file_offset_;
+  // A mapping of portion labels to the associated section and portion.
+  DirectChainedHashMap<IntKeyRawPointerValueTrait<
+      std::pair<const MachOSection*, const MachOSection::Portion*>>>
+      portion_and_section_by_label_;
+
+  // Internal state fields used by ConvertRelocation/ConvertRelocationLabel.
+  const MachOSection* current_section_ = nullptr;
+  const MachOSection::Portion* current_portion_ = nullptr;
+  MachORelocationsArray* current_relocations_ = nullptr;
+  MachORelocationAddendsArray* current_relocation_addends_ = nullptr;
+  intptr_t starting_index_for_self_ = -1;
+
+  DISALLOW_COPY_AND_ASSIGN(RelocationsConverter);
+};
+
 void MachOHeader::ComputeOffsets() {
+  // First, set the offsets of the load commands in the header.
   intptr_t header_offset = SizeWithoutLoadCommands();
   for (auto* const c : commands_) {
     ASSERT(
@@ -2797,121 +3425,121 @@
     header_offset += c->cmdsize();
   }
 
+  // Next, set the offsets of the contents of load commands with post-header
+  // content (segments, symbol tables, etc.).
   ContentOffsetsVisitor visitor(zone());
-  // All commands with non-header content should be part of a segment.
-  // In addition, the header is visited during the initial segment.
-  VisitSegments(&visitor);
+  VisitContents(&visitor);
 
-  // Finalize the dynamic symbol table, now that the file offset for the
-  // symbol table has been calculated.
-
-  // Entry for NO_SECT + 1-indexed entries for sections.
-  ASSERT_EQUAL(visitor.address_map.length(), NumSections() + 1);
-
-  // Adjust addresses in symbol tables as we now have section memory offsets.
-  full_symtab_.Finalize(visitor.address_map);
-  auto* const table = IncludedSymbolTable();
-  if (table != &full_symtab_) {
-    ASSERT(is_stripped_);
-    table->Finalize(visitor.address_map);
-  }
+  // Finally, for relocatable objects, convert the relocations into appropriate
+  // relocation entries and addends and also set the offsets at which relocation
+  // information is stored for sections, as this information is written into
+  // the file after the other contents.
+  //
+  // For other types of output, there is no converted relocation information (as
+  // the relocatable values are fully computed), so this visitor sets the
+  // section fields for relocations to reflect this.
+  RelocationsConverter relocs_visitor(zone_, *this, visitor.file_offset);
+  VisitContents(&relocs_visitor);
 }
 
-void MachOSymbolTable::Initialize(const char* path,
+void MachOSymbolTable::Initialize(SharedObjectWriter::Type type,
+                                  const char* path,
                                   const GrowableArray<MachOSection*>& sections,
                                   bool is_stripped) {
+  using SnapshotType = SharedObjectWriter::Type;
   // Not idempotent.
   ASSERT(!num_local_symbols_is_set());
 
   // If symbolic debugging symbols are emitted, then any section
   // symbols are marked as alternate entries in favor of the symbolic
   // debugging symbols.
-  const intptr_t desc = is_stripped ? 0 : mach_o::N_ALT_ENTRY;
+  const intptr_t desc =
+      (type == SnapshotType::Object || is_stripped) ? 0 : mach_o::N_ALT_ENTRY;
 
   // For unstripped symbol tables, we do two initial passes. In the first
   // pass, we add section symbols for local static symbols.
   if (!is_stripped) {
     for (intptr_t i = 0, n = sections.length(); i < n; ++i) {
       auto* const section = sections[i];
-      const intptr_t section_index = i + 1;  // 1-indexed, as 0 is NO_SECT.
       for (const auto& portion : section->portions()) {
         if (portion.symbols != nullptr) {
           for (const auto& symbol_data : *portion.symbols) {
-            AddSymbol(symbol_data.name, mach_o::N_SECT, section_index, desc,
+            AddSymbol(symbol_data.name, mach_o::N_SECT, section, desc,
                       portion.offset + symbol_data.offset, symbol_data.label);
           }
         }
       }
     }
 
-    // In the second pass, we add appropriate symbolic debugging symbols.
-    using Type = SharedObjectWriter::SymbolData::Type;
-    if (path != nullptr) {
-      // The value of the OSO symbolic debugging symbol is the mtime of the
-      // object file. However, clang may warn about a mismatch if this is not
-      // 0 and differs from the actual mtime of the object file, so just use 0.
-      AddSymbol(path, mach_o::N_OSO, /*section_index=*/0,
-                /*description=*/1, /*value=*/0);
-    }
-    auto add_symbolic_debugging_symbols =
-        [&](const char* name, Type type, intptr_t section_index,
-            intptr_t offset, intptr_t size, bool is_global) {
-          switch (type) {
-            case Type::Function: {
-              AddSymbol("", mach_o::N_BNSYM, section_index, /*description=*/0,
-                        offset);
-              AddSymbol(name, mach_o::N_FUN, section_index, /*description=*/0,
-                        offset);
-              // The size is output as an unnamed N_FUN symbol with no section
-              // following the actual N_FUN symbol.
-              AddSymbol("", mach_o::N_FUN, mach_o::NO_SECT, /*description=*/0,
-                        size);
-              AddSymbol("", mach_o::N_ENSYM, section_index, /*description=*/0,
-                        offset + size);
+    // The second pass adds appropriate symbolic debugging symbols.  This pass
+    // is skipped for relocatable objects.
+    if (type != SnapshotType::Object) {
+      using Type = SharedObjectWriter::SymbolData::Type;
+      if (path != nullptr) {
+        // The value of the OSO symbolic debugging symbol is the mtime of the
+        // object file. However, clang may warn about a mismatch if this is not
+        // 0 and differs from the actual mtime of the object file.
+        AddSymbol(path, mach_o::N_OSO, /*section=*/nullptr,
+                  /*description=*/1, /*section_offset_or_value=*/0);
+      }
+      auto add_symbolic_debugging_symbols = [&](const char* name, Type type,
+                                                const MachOSection* section,
+                                                intptr_t offset, intptr_t size,
+                                                bool is_global) {
+        switch (type) {
+          case Type::Function: {
+            AddSymbol("", mach_o::N_BNSYM, section, /*description=*/0, offset);
+            AddSymbol(name, mach_o::N_FUN, section, /*description=*/0, offset);
+            // The size is output as an unnamed N_FUN symbol with no section
+            // following the actual N_FUN symbol.
+            AddSymbol("", mach_o::N_FUN, /*section=*/nullptr, /*description=*/0,
+                      size);
+            AddSymbol("", mach_o::N_ENSYM, section, /*description=*/0,
+                      offset + size);
 
-              break;
-            }
-            case Type::Section:
-            case Type::Object: {
-              if (is_global) {
-                AddSymbol(name, mach_o::N_GSYM, mach_o::NO_SECT,
-                          /*description=*/0,
-                          /*value=*/0);
-              } else {
-                AddSymbol(name, mach_o::N_STSYM, section_index,
-                          /*description=*/0, offset);
-              }
-              break;
-            }
+            break;
           }
-        };
-
-    for (intptr_t i = 0, n = sections.length(); i < n; ++i) {
-      auto* const section = sections[i];
-      const intptr_t section_index = i + 1;  // 1-indexed, as 0 is NO_SECT.
-      // We handle global symbols for text sections slightly differently than
-      // those for other sections.
-      const bool is_text_section = section->HasName(mach_o::SECT_TEXT);
-      for (const auto& portion : section->portions()) {
-        if (portion.symbol_name != nullptr) {
-          // Matching the symbolic debugging symbols created for assembled
-          // snapshots.
-          auto const type = is_text_section ? Type::Function : Type::Section;
-          // The "size" of a function symbol created for start of a text portion
-          // is up to the first function symbol.
-          auto const size = is_text_section && portion.symbols != nullptr
-                                ? portion.symbols->At(0).offset
-                                : portion.size;
-          add_symbolic_debugging_symbols(portion.symbol_name, type,
-                                         section_index, portion.offset, size,
-                                         /*is_global=*/true);
+          case Type::Section:
+          case Type::Object: {
+            if (is_global) {
+              AddSymbol(name, mach_o::N_GSYM, /*section=*/nullptr,
+                        /*description=*/0,
+                        /*section_offset_or_value=*/0);
+            } else {
+              AddSymbol(name, mach_o::N_STSYM, section,
+                        /*description=*/0, offset);
+            }
+            break;
+          }
         }
-        if (portion.symbols != nullptr) {
-          for (const auto& symbol_data : *portion.symbols) {
-            add_symbolic_debugging_symbols(
-                symbol_data.name, symbol_data.type, section_index,
-                portion.offset + symbol_data.offset, symbol_data.size,
-                /*is_global=*/false);
+      };
+
+      for (intptr_t i = 0, n = sections.length(); i < n; ++i) {
+        auto* const section = sections[i];
+        // We handle global symbols for text sections slightly differently than
+        // those for other sections.
+        const bool is_text_section = section->HasName(mach_o::SECT_TEXT);
+        for (const auto& portion : section->portions()) {
+          if (portion.symbol_name != nullptr) {
+            // Matching the symbolic debugging symbols created for assembled
+            // snapshots.
+            auto const type = is_text_section ? Type::Function : Type::Section;
+            // The "size" of a function symbol created for start of a text
+            // portion is up to the first function symbol.
+            auto const size = is_text_section && portion.symbols != nullptr
+                                  ? portion.symbols->At(0).offset
+                                  : portion.size;
+            add_symbolic_debugging_symbols(portion.symbol_name, type, section,
+                                           portion.offset, size,
+                                           /*is_global=*/true);
+          }
+          if (portion.symbols != nullptr) {
+            for (const auto& symbol_data : *portion.symbols) {
+              add_symbolic_debugging_symbols(
+                  symbol_data.name, symbol_data.type, section,
+                  portion.offset + symbol_data.offset, symbol_data.size,
+                  /*is_global=*/false);
+            }
           }
         }
       }
@@ -2923,11 +3551,10 @@
   // (so added to both stripped and unstripped symbol tables).
   for (intptr_t i = 0, n = sections.length(); i < n; ++i) {
     auto* const section = sections[i];
-    const intptr_t section_index = i + 1;  // 1-indexed, as 0 is NO_SECT.
     for (const auto& portion : section->portions()) {
       if (portion.symbol_name != nullptr) {
-        AddSymbol(portion.symbol_name, mach_o::N_SECT | mach_o::N_EXT,
-                  section_index, desc, portion.offset, portion.label);
+        AddSymbol(portion.symbol_name, mach_o::N_SECT | mach_o::N_EXT, section,
+                  desc, portion.offset, portion.label);
       }
     }
   }
diff --git a/runtime/vm/mach_o.h b/runtime/vm/mach_o.h
index 7e42445..dac57e5 100644
--- a/runtime/vm/mach_o.h
+++ b/runtime/vm/mach_o.h
@@ -29,7 +29,8 @@
               Type type,
               const char* id,
               const char* path = nullptr,
-              Dwarf* dwarf = nullptr);
+              Dwarf* dwarf = nullptr,
+              MachOWriter* object = nullptr);
 
 #if defined(TARGET_ARCH_ARM64)
   static constexpr intptr_t kPageSize = 16 * KB;
@@ -56,13 +57,7 @@
 
   void Finalize() override;
 
-  void AssertConsistency(const SharedObjectWriter* debug) const override {
-    if (auto* const debug_macho = debug->AsMachOWriter()) {
-      AssertConsistency(this, debug_macho);
-    } else {
-      FATAL("Expected both snapshot and debug to be MachO");
-    }
-  }
+  void AssertConsistency(const SharedObjectWriter* debug) const override;
 
   const MachOWriter* AsMachOWriter() const override { return this; }
 
@@ -70,6 +65,7 @@
   static void AssertConsistency(const MachOWriter* snapshot,
                                 const MachOWriter* debug_info);
 
+  MachOWriter* const object_writer_;
   MachOHeader& header_;
 };
 
diff --git a/runtime/vm/module_snapshot.cc b/runtime/vm/module_snapshot.cc
new file mode 100644
index 0000000..e3fc29f
--- /dev/null
+++ b/runtime/vm/module_snapshot.cc
@@ -0,0 +1,799 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+
+#include <memory>
+#include <utility>
+
+#include "vm/module_snapshot.h"
+
+#include "platform/assert.h"
+#include "vm/bootstrap.h"
+#include "vm/canonical_tables.h"
+#include "vm/class_id.h"
+#include "vm/code_observers.h"
+#include "vm/compiler/api/print_filter.h"
+#include "vm/compiler/assembler/disassembler.h"
+#include "vm/dart.h"
+#include "vm/dart_entry.h"
+#include "vm/dispatch_table.h"
+#include "vm/flag_list.h"
+#include "vm/growable_array.h"
+#include "vm/heap/heap.h"
+#include "vm/image_snapshot.h"
+#include "vm/native_entry.h"
+#include "vm/object.h"
+#include "vm/object_store.h"
+#include "vm/resolver.h"
+#include "vm/stub_code.h"
+#include "vm/symbols.h"
+#include "vm/timeline.h"
+#include "vm/version.h"
+#include "vm/zone_text_buffer.h"
+
+namespace dart {
+namespace module_snapshot {
+
+class ModuleSnapshot : public AllStatic {
+ public:
+  // Version of module snapshot format.
+  // Should match Snapshot.moduleSnapshotFormatVersion
+  // constant declared in pkg/native_compiler/lib/snapshot/snapshot.dart.
+  static constexpr intptr_t kFormatVersion = 1;
+
+  // Predefined clusters in the module snapshot.
+  // Should match PredefinedClusters enum
+  // declared in pkg/native_compiler/lib/snapshot/snapshot.dart.
+  enum PredefinedClusters {
+    kOneByteStrings,
+    kTwoByteStrings,
+    kLibraryRefs,
+    kPrivateNames,
+    kClassRefs,
+    kFieldRefs,
+    kFunctionRefs,
+    kInts,
+    kDoubles,
+    kArrays,
+    kInterfaceTypes,
+    kFunctionTypes,
+    kRecordTypes,
+    kTypeParameterTypes,
+    kTypeArguments,
+    kCodes,
+    kObjectPools,
+    kNumPredefinedClusters,
+  };
+};
+
+class Deserializer;
+
+class DeserializationCluster : public ZoneAllocated {
+ public:
+  explicit DeserializationCluster(const char* name)
+      : name_(name), start_index_(-1), stop_index_(-1) {}
+  virtual ~DeserializationCluster() {}
+
+  // Read references to base objects.
+  virtual void PreLoad(Deserializer* deserializer) {}
+
+  // Allocate memory for all objects in the cluster and write their addresses
+  // into the ref array. Do not touch this memory.
+  virtual void ReadAlloc(Deserializer* deserializer) {}
+
+  // Initialize the cluster's objects. Do not touch the memory of other objects.
+  virtual void ReadFill(Deserializer* deserializer) {}
+
+  // Complete any action that requires the full graph to be deserialized, such
+  // as rehashing.
+  virtual void PostLoad(Deserializer* deserializer, const Array& refs) {}
+
+  const char* name() const { return name_; }
+
+ protected:
+  void ReadAllocFixedSize(Deserializer* deserializer, intptr_t instance_size);
+
+  const char* const name_;
+  // The range of the ref array that belongs to this cluster.
+  intptr_t start_index_;
+  intptr_t stop_index_;
+};
+
+static constexpr intptr_t kFirstReference = 1;
+
+class Deserializer : public ThreadStackResource {
+ public:
+  Deserializer(Thread* thread,
+               const uint8_t* buffer,
+               intptr_t size,
+               const uint8_t* instructions_buffer);
+  ~Deserializer();
+
+  ApiErrorPtr VerifyVersionAndFeatures();
+
+  ObjectPtr Allocate(intptr_t size);
+  static void InitializeHeader(ObjectPtr raw,
+                               intptr_t cid,
+                               intptr_t size,
+                               bool is_canonical = false) {
+    InitializeHeader(raw, cid, size, is_canonical,
+                     ShouldHaveImmutabilityBitSetCid(cid));
+  }
+  static void InitializeHeader(ObjectPtr raw,
+                               intptr_t cid,
+                               intptr_t size,
+                               bool is_canonical,
+                               bool is_immutable);
+
+  // Reads raw data (for basic types).
+  // sizeof(T) must be in {1,2,4,8}.
+  template <typename T>
+  T Read() {
+    return ReadStream::Raw<sizeof(T), T>::Read(&stream_);
+  }
+  intptr_t ReadRefId() { return stream_.ReadRefId(); }
+  intptr_t ReadUnsigned() { return stream_.ReadUnsigned(); }
+  uint64_t ReadUnsigned64() { return stream_.ReadUnsigned<uint64_t>(); }
+  void ReadBytes(uint8_t* addr, intptr_t len) { stream_.ReadBytes(addr, len); }
+
+  intptr_t position() const { return stream_.Position(); }
+  void set_position(intptr_t p) { stream_.SetPosition(p); }
+  const uint8_t* AddressOfCurrentPosition() const {
+    return stream_.AddressOfCurrentPosition();
+  }
+  void Advance(intptr_t value) { stream_.Advance(value); }
+
+  void AddBaseObject(const Object& object) { AssignRefPreLoad(object); }
+
+  void AssignRefPreLoad(const Object& object) {
+    refs_array_.SetAt(next_ref_index_, object);
+    next_ref_index_++;
+  }
+
+  void AssignRef(ObjectPtr object) {
+    ASSERT(next_ref_index_ <= num_objects_);
+    refs_->untag()->data()[next_ref_index_] = object;
+    next_ref_index_++;
+  }
+
+  ObjectPtr Ref(intptr_t index) const {
+    ASSERT(index > 0);
+    ASSERT(index <= num_objects_);
+    return refs_array_.At(index);
+  }
+
+  ObjectPtr ReadRef() { return Ref(ReadRefId()); }
+
+  void Deserialize();
+
+  DeserializationCluster* ReadCluster();
+
+  uword instructions() const {
+    return reinterpret_cast<uword>(instructions_buffer_);
+  }
+  intptr_t next_index() const { return next_ref_index_; }
+  Heap* heap() const { return heap_; }
+  Zone* zone() const { return zone_; }
+
+  // This serves to make the snapshot cursor, ref table and null be locals
+  // during ReadFill, which allows the C compiler to see they are not aliased
+  // and can be kept in registers.
+  class Local : public ReadStream {
+   public:
+    explicit Local(Deserializer* d)
+        : ReadStream(d->stream_.buffer_, d->stream_.current_, d->stream_.end_),
+          d_(d),
+          refs_(d->refs_),
+          null_(Object::null()) {
+#if defined(DEBUG)
+      // Can't mix use of Deserializer::Read*.
+      d->stream_.current_ = nullptr;
+#endif
+    }
+    ~Local() { d_->stream_.current_ = current_; }
+
+    ObjectPtr Ref(intptr_t index) const {
+      ASSERT(index > 0);
+      ASSERT(index <= d_->num_objects_);
+      return refs_->untag()->element(index);
+    }
+
+    template <typename T>
+    T Read() {
+      return ReadStream::Raw<sizeof(T), T>::Read(this);
+    }
+    uint64_t ReadUnsigned64() { return ReadUnsigned<uint64_t>(); }
+
+    ObjectPtr ReadRef() { return Ref(ReadRefId()); }
+
+   private:
+    Deserializer* const d_;
+    const ArrayPtr refs_;
+    const ObjectPtr null_;
+  };
+
+ private:
+  Heap* heap_;
+  PageSpace* old_space_;
+  FreeList* freelist_;
+  Zone* zone_;
+  ReadStream stream_;
+  const uint8_t* instructions_buffer_;
+  intptr_t num_base_objects_ = 0;
+  intptr_t num_objects_ = 0;
+  intptr_t num_clusters_ = 0;
+  Array& refs_array_;
+  ArrayPtr refs_;
+  intptr_t next_ref_index_ = kFirstReference;
+  DeserializationCluster** clusters_ = nullptr;
+};
+
+DART_FORCE_INLINE
+ObjectPtr Deserializer::Allocate(intptr_t size) {
+  return UntaggedObject::FromAddr(
+      old_space_->AllocateSnapshotLocked(freelist_, size));
+}
+
+void Deserializer::InitializeHeader(ObjectPtr raw,
+                                    intptr_t class_id,
+                                    intptr_t size,
+                                    bool is_canonical,
+                                    bool is_immutable) {
+  ASSERT(Utils::IsAligned(size, kObjectAlignment));
+  uword tags = 0;
+  tags = UntaggedObject::ClassIdTag::update(class_id, tags);
+  tags = UntaggedObject::SizeTag::update(size, tags);
+  tags = UntaggedObject::CanonicalBit::update(is_canonical, tags);
+  tags = UntaggedObject::AlwaysSetBit::update(true, tags);
+  tags = UntaggedObject::NotMarkedBit::update(true, tags);
+  tags = UntaggedObject::OldAndNotRememberedBit::update(true, tags);
+  tags = UntaggedObject::NewOrEvacuationCandidateBit::update(false, tags);
+  tags = UntaggedObject::ImmutableBit::update(is_immutable, tags);
+  raw->untag()->tags_ = tags;
+}
+
+DART_NOINLINE
+void DeserializationCluster::ReadAllocFixedSize(Deserializer* d,
+                                                intptr_t instance_size) {
+  start_index_ = d->next_index();
+  intptr_t count = d->ReadUnsigned();
+  for (intptr_t i = 0; i < count; i++) {
+    d->AssignRef(d->Allocate(instance_size));
+  }
+  stop_index_ = d->next_index();
+}
+
+class OneByteStringDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit OneByteStringDeserializationCluster(Zone* zone)
+      : DeserializationCluster("OneByteString"),
+        string_(String::Handle(zone)) {}
+  ~OneByteStringDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      const intptr_t len = d->ReadUnsigned();
+      string_ =
+          Symbols::FromLatin1(d->thread(), d->AddressOfCurrentPosition(), len);
+      d->Advance(len);
+      d->AssignRefPreLoad(string_);
+    }
+  }
+
+ private:
+  String& string_;
+};
+
+class TwoByteStringDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit TwoByteStringDeserializationCluster(Zone* zone)
+      : DeserializationCluster("TwoByteString"),
+        string_(String::Handle(zone)) {}
+  ~TwoByteStringDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      const intptr_t len = d->ReadUnsigned();
+      string_ = Symbols::FromUTF16(
+          d->thread(),
+          reinterpret_cast<const uint16_t*>(d->AddressOfCurrentPosition()),
+          len);
+      d->Advance(len << 1);
+      d->AssignRefPreLoad(string_);
+    }
+  }
+
+ private:
+  String& string_;
+};
+
+class LibraryRefDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit LibraryRefDeserializationCluster(Zone* zone)
+      : DeserializationCluster("LibraryRef"),
+        uri_(String::Handle(zone)),
+        library_(Library::Handle(zone)) {}
+  ~LibraryRefDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      uri_ = static_cast<StringPtr>(d->ReadRef());
+      library_ = Library::LookupLibrary(d->thread(), uri_);
+      if (library_.IsNull()) {
+        FATAL("Unable to find library %s", uri_.ToCString());
+      }
+      d->AssignRefPreLoad(library_);
+    }
+  }
+
+ private:
+  String& uri_;
+  Library& library_;
+};
+
+class ClassRefDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit ClassRefDeserializationCluster(Zone* zone)
+      : DeserializationCluster("ClassRef"),
+        library_(Library::Handle(zone)),
+        class_name_(String::Handle(zone)),
+        class_(Class::Handle(zone)) {}
+  ~ClassRefDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      library_ = static_cast<LibraryPtr>(d->ReadRef());
+      class_name_ = static_cast<StringPtr>(d->ReadRef());
+      class_ = library_.LookupClass(class_name_);
+      if (class_.IsNull()) {
+        FATAL("Unable to find class %s in %s", class_name_.ToCString(),
+              library_.ToCString());
+      }
+      d->AssignRefPreLoad(class_);
+    }
+  }
+
+ private:
+  Library& library_;
+  String& class_name_;
+  Class& class_;
+};
+
+class PrivateNameDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit PrivateNameDeserializationCluster(Zone* zone)
+      : DeserializationCluster("PrivateName"),
+        library_(Library::Handle(zone)),
+        name_(String::Handle(zone)) {}
+  ~PrivateNameDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      library_ = static_cast<LibraryPtr>(d->ReadRef());
+      name_ = static_cast<StringPtr>(d->ReadRef());
+      name_ = library_.PrivateName(name_);
+      d->AssignRefPreLoad(name_);
+    }
+  }
+
+ private:
+  Library& library_;
+  String& name_;
+};
+
+class FieldRefDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit FieldRefDeserializationCluster(Zone* zone)
+      : DeserializationCluster("FieldRef"),
+        owner_(Object::Handle(zone)),
+        field_name_(String::Handle(zone)),
+        field_(Field::Handle(zone)) {}
+  ~FieldRefDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      owner_ = d->ReadRef();
+      field_name_ = static_cast<StringPtr>(d->ReadRef());
+      if (owner_.IsLibrary()) {
+        owner_ = Library::Cast(owner_).toplevel_class();
+      }
+      field_ = Class::Cast(owner_).LookupField(field_name_);
+      if (field_.IsNull()) {
+        FATAL("Unable to find field %s in %s", field_name_.ToCString(),
+              owner_.ToCString());
+      }
+      d->AssignRefPreLoad(field_);
+    }
+  }
+
+ private:
+  Object& owner_;
+  String& field_name_;
+  Field& field_;
+};
+
+class FunctionRefDeserializationCluster : public DeserializationCluster {
+ public:
+  explicit FunctionRefDeserializationCluster(Zone* zone)
+      : DeserializationCluster("FunctionRef"),
+        zone_(zone),
+        owner_(Object::Handle(zone)),
+        function_name_(String::Handle(zone)),
+        function_(Function::Handle(zone)) {}
+  ~FunctionRefDeserializationCluster() {}
+
+  void PreLoad(Deserializer* d) override {
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      owner_ = d->ReadRef();
+      function_name_ = static_cast<StringPtr>(d->ReadRef());
+      if (owner_.IsLibrary()) {
+        owner_ = Library::Cast(owner_).toplevel_class();
+      }
+      // TODO(alexmarkov): support method extractors and closures.
+      function_ =
+          Resolver::ResolveFunction(zone_, Class::Cast(owner_), function_name_);
+      if (function_.IsNull()) {
+        FATAL("Unable to find function %s in %s", function_name_.ToCString(),
+              owner_.ToCString());
+      }
+      d->AssignRefPreLoad(function_);
+    }
+  }
+
+ private:
+  Zone* zone_;
+  Object& owner_;
+  String& function_name_;
+  Function& function_;
+};
+
+class CodeDeserializationCluster : public DeserializationCluster {
+ public:
+  CodeDeserializationCluster() : DeserializationCluster("Code") {}
+  ~CodeDeserializationCluster() {}
+
+  void ReadAlloc(Deserializer* d) override {
+    ReadAllocFixedSize(d, Code::InstanceSize(0));
+  }
+
+  void ReadFill(Deserializer* d) override {
+    uword instructions = d->instructions();
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      auto const code = static_cast<CodePtr>(d->Ref(id));
+
+      Deserializer::InitializeHeader(code, kCodeCid, Code::InstanceSize(0));
+
+      const uword entry_point = instructions;
+      code->untag()->entry_point_ = entry_point;
+      code->untag()->monomorphic_entry_point_ = entry_point;
+      code->untag()->unchecked_entry_point_ = entry_point;
+      code->untag()->monomorphic_unchecked_entry_point_ = entry_point;
+      code->untag()->object_pool_ = static_cast<ObjectPoolPtr>(d->ReadRef());
+      code->untag()->instructions_ = Instructions::null();
+      code->untag()->owner_ = d->ReadRef();
+      code->untag()->exception_handlers_ =
+          Object::empty_exception_handlers().ptr();
+      code->untag()->pc_descriptors_ = Object::empty_descriptors().ptr();
+      code->untag()->catch_entry_ = Object::null();
+      code->untag()->compressed_stackmaps_ = CompressedStackMaps::null();
+      code->untag()->inlined_id_to_function_ = Array::null();
+      code->untag()->code_source_map_ = CodeSourceMap::null();
+      code->untag()->active_instructions_ = Instructions::null();
+      code->untag()->deopt_info_array_ = Array::null();
+      code->untag()->static_calls_target_table_ = Array::null();
+
+#if !defined(PRODUCT)
+      code->untag()->return_address_metadata_ = Object::null();
+      code->untag()->var_descriptors_ = LocalVarDescriptors::null();
+      code->untag()->comments_ = Array::null();
+      code->untag()->compile_timestamp_ = 0;
+#endif
+
+      code->untag()->state_bits_ = Code::OptimizedBit::update(true, 0);
+      code->untag()->unchecked_offset_ = 0;
+
+      const uword instr_size = d->ReadUnsigned();
+      instructions += instr_size;
+    }
+  }
+
+  void PostLoad(Deserializer* d, const Array& refs) override {
+    Code& code = Code::Handle(d->zone());
+    Object& owner = Object::Handle(d->zone());
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      code ^= refs.At(id);
+      owner = code.owner();
+
+      if (owner.IsFunction()) {
+        Function::Cast(owner).SetInstructionsSafe(code);
+
+#if !defined(PRODUCT) || defined(FORCE_INCLUDE_DISASSEMBLER)
+        if ((FLAG_disassemble ||
+             (code.is_optimized() && FLAG_disassemble_optimized)) &&
+            compiler::PrintFilter::ShouldPrint(Function::Cast(owner))) {
+          Disassembler::DisassembleCode(Function::Cast(owner), code,
+                                        code.is_optimized());
+        }
+#endif  // !defined(PRODUCT) || defined(FORCE_INCLUDE_DISASSEMBLER)
+      } else {
+        UNREACHABLE();
+      }
+
+#if !defined(PRODUCT)
+      if (CodeObservers::AreActive()) {
+        Code::NotifyCodeObservers(code, code.is_optimized());
+      }
+#endif
+    }
+  }
+};
+
+class ObjectPoolDeserializationCluster : public DeserializationCluster {
+ public:
+  ObjectPoolDeserializationCluster() : DeserializationCluster("ObjectPool") {}
+  ~ObjectPoolDeserializationCluster() {}
+
+  void ReadAlloc(Deserializer* d) override {
+    start_index_ = d->next_index();
+    const intptr_t count = d->ReadUnsigned();
+    for (intptr_t i = 0; i < count; i++) {
+      const intptr_t length = d->ReadUnsigned();
+      d->AssignRef(d->Allocate(ObjectPool::InstanceSize(length)));
+    }
+    stop_index_ = d->next_index();
+  }
+
+  void ReadFill(Deserializer* d_) override {
+    Deserializer::Local d(d_);
+
+    const uint8_t entry_bits =
+        ObjectPool::EncodeBits(ObjectPool::EntryType::kTaggedObject,
+                               ObjectPool::Patchability::kPatchable,
+                               ObjectPool::SnapshotBehavior::kSnapshotable);
+
+    for (intptr_t id = start_index_, n = stop_index_; id < n; id++) {
+      const intptr_t length = d.ReadUnsigned();
+      ObjectPoolPtr pool = static_cast<ObjectPoolPtr>(d.Ref(id));
+      Deserializer::InitializeHeader(pool, kObjectPoolCid,
+                                     ObjectPool::InstanceSize(length));
+      pool->untag()->length_ = length;
+      for (intptr_t j = 0; j < length; j++) {
+        pool->untag()->entry_bits()[j] = entry_bits;
+        UntaggedObjectPool::Entry& entry = pool->untag()->data()[j];
+        entry.raw_obj_ = d.ReadRef();
+      }
+    }
+  }
+};
+
+Deserializer::Deserializer(Thread* thread,
+                           const uint8_t* buffer,
+                           intptr_t size,
+                           const uint8_t* instructions_buffer)
+    : ThreadStackResource(thread),
+      heap_(thread->isolate_group()->heap()),
+      old_space_(heap_->old_space()),
+      freelist_(old_space_->DataFreeList()),
+      zone_(thread->zone()),
+      stream_(buffer, size),
+      instructions_buffer_(instructions_buffer),
+      refs_array_(Array::Handle(zone_)),
+      refs_(Array::null()) {}
+
+Deserializer::~Deserializer() {
+  delete[] clusters_;
+}
+
+ApiErrorPtr Deserializer::VerifyVersionAndFeatures() {
+  stream_.SetPosition(Snapshot::kHeaderSize);
+
+  const intptr_t format_version = stream_.ReadUnsigned();
+  if (format_version != ModuleSnapshot::kFormatVersion) {
+    return ApiError::New(String::Handle(String::NewFormatted(
+        "Invalid module snapshot format version %" Pd " (expected %" Pd ")",
+        format_version, ModuleSnapshot::kFormatVersion)));
+  }
+
+  const char* features =
+      reinterpret_cast<const char*>(stream_.AddressOfCurrentPosition());
+  const intptr_t features_length =
+      Utils::StrNLen(features, stream_.PendingBytes());
+  if (features_length == stream_.PendingBytes()) {
+    return ApiError::New(
+        String::Handle(String::New("The features string in the module snapshot "
+                                   "was not zero-terminated.")));
+  }
+  stream_.Advance(features_length + 1);
+
+  const char* expected_features = kHostArchitectureName;
+  if (strcmp(expected_features, features) != 0) {
+    return ApiError::New(String::Handle(String::NewFormatted(
+        "Invalid module snapshot configuration '%s' (expected '%s')", features,
+        expected_features)));
+  }
+  return ApiError::null();
+}
+
+DeserializationCluster* Deserializer::ReadCluster() {
+  const intptr_t cluster_id = ReadUnsigned();
+  Zone* Z = zone_;
+  if (cluster_id >= ModuleSnapshot::kNumPredefinedClusters) {
+    // return new (Z) InstanceDeserializationCluster();
+    UNIMPLEMENTED();
+  }
+  switch (cluster_id) {
+    case ModuleSnapshot::kOneByteStrings:
+      return new (Z) OneByteStringDeserializationCluster(Z);
+    case ModuleSnapshot::kTwoByteStrings:
+      return new (Z) TwoByteStringDeserializationCluster(Z);
+    case ModuleSnapshot::kLibraryRefs:
+      return new (Z) LibraryRefDeserializationCluster(Z);
+    case ModuleSnapshot::kPrivateNames:
+      return new (Z) PrivateNameDeserializationCluster(Z);
+    case ModuleSnapshot::kClassRefs:
+      return new (Z) ClassRefDeserializationCluster(Z);
+    case ModuleSnapshot::kFieldRefs:
+      return new (Z) FieldRefDeserializationCluster(Z);
+    case ModuleSnapshot::kFunctionRefs:
+      return new (Z) FunctionRefDeserializationCluster(Z);
+    case ModuleSnapshot::kInts:
+    case ModuleSnapshot::kDoubles:
+    case ModuleSnapshot::kArrays:
+    case ModuleSnapshot::kInterfaceTypes:
+    case ModuleSnapshot::kFunctionTypes:
+    case ModuleSnapshot::kRecordTypes:
+    case ModuleSnapshot::kTypeParameterTypes:
+    case ModuleSnapshot::kTypeArguments:
+      UNIMPLEMENTED();
+      return nullptr;
+    case ModuleSnapshot::kCodes:
+      return new (Z) CodeDeserializationCluster();
+    case ModuleSnapshot::kObjectPools:
+      return new (Z) ObjectPoolDeserializationCluster();
+    default:
+      break;
+  }
+  FATAL("No cluster defined for cluster id %" Pd, cluster_id);
+  return nullptr;
+}
+
+class HeapLocker : public StackResource {
+ public:
+  HeapLocker(Thread* thread, PageSpace* page_space)
+      : StackResource(thread),
+        page_space_(page_space),
+        freelist_(page_space->DataFreeList()) {
+    page_space_->AcquireLock(freelist_);
+  }
+  ~HeapLocker() { page_space_->ReleaseLock(freelist_); }
+
+ private:
+  PageSpace* page_space_;
+  FreeList* freelist_;
+};
+
+void Deserializer::Deserialize() {
+  const void* clustered_start = AddressOfCurrentPosition();
+
+  num_base_objects_ = ReadUnsigned();
+  num_objects_ = ReadUnsigned();
+  const uword instructions_size = ReadUnsigned();
+  num_clusters_ = ReadUnsigned();
+
+  // TODO(alexmarkov): register image pages
+  //
+  // heap_->SetupImagePage(const_cast<uint8_t*>(instructions_buffer_),
+  //                       instructions_size,
+  //                       /* is_executable */ true);
+  USE(instructions_size);
+
+  clusters_ = new DeserializationCluster*[num_clusters_];
+  refs_array_ = Array::New(num_objects_ + kFirstReference, Heap::kOld);
+
+  AddBaseObject(Object::null_object());
+  AddBaseObject(Bool::True());
+  AddBaseObject(Bool::False());
+
+  if (num_base_objects_ != (next_ref_index_ - kFirstReference)) {
+    FATAL("Snapshot expects %" Pd
+          " base objects, but deserializer provided %" Pd,
+          num_base_objects_, next_ref_index_ - kFirstReference);
+  }
+
+  {
+    TIMELINE_DURATION(thread(), Isolate, "PreLoad");
+    for (intptr_t i = 0; i < num_clusters_; i++) {
+      clusters_[i] = ReadCluster();
+      clusters_[i]->PreLoad(this);
+    }
+  }
+
+  {
+    // The deserializer initializes objects without using the write barrier,
+    // partly for speed since we know all the deserialized objects will be
+    // long-lived and partly because the target objects can be not yet
+    // initialized at the time of the write. To make this safe, we must ensure
+    // there are no other threads mutating this heap, and that incremental
+    // marking is not in progress. This is normally the case anyway for the
+    // module snapshots being deserialized at isolate load.
+    HeapIterationScope iter(thread());
+    // For bump-pointer allocation in old-space.
+    HeapLocker hl(thread(), heap_->old_space());
+    // Must not perform any other type of allocation, which might trigger GC
+    // while there are still uninitialized objects.
+    NoSafepointScope no_safepoint(thread());
+    refs_ = refs_array_.ptr();
+
+    {
+      TIMELINE_DURATION(thread(), Isolate, "ReadAlloc");
+      for (intptr_t i = 0; i < num_clusters_; i++) {
+        clusters_[i]->ReadAlloc(this);
+      }
+    }
+
+    // We should have completely filled the ref array.
+    ASSERT_EQUAL(next_ref_index_ - kFirstReference, num_objects_);
+
+    {
+      TIMELINE_DURATION(thread(), Isolate, "ReadFill");
+      for (intptr_t i = 0; i < num_clusters_; i++) {
+        clusters_[i]->ReadFill(this);
+      }
+    }
+
+    refs_ = nullptr;
+  }
+
+  auto isolate_group = thread()->isolate_group();
+#if defined(DEBUG)
+  isolate_group->heap()->Verify("Deserializer::Deserialize");
+#endif
+
+  {
+    TIMELINE_DURATION(thread(), Isolate, "PostLoad");
+    for (intptr_t i = 0; i < num_clusters_; i++) {
+      clusters_[i]->PostLoad(this, refs_array_);
+    }
+  }
+
+  if (isolate_group->snapshot_is_dontneed_safe()) {
+    size_t clustered_length =
+        reinterpret_cast<uword>(AddressOfCurrentPosition()) -
+        reinterpret_cast<uword>(clustered_start);
+    VirtualMemory::DontNeed(const_cast<void*>(clustered_start),
+                            clustered_length);
+  }
+}
+
+ApiErrorPtr ReadModuleSnapshot(Thread* thread,
+                               const Snapshot* snapshot,
+                               const uint8_t* instructions_buffer) {
+  ASSERT(snapshot->kind() == Snapshot::kModule);
+
+  Deserializer deserializer(thread, snapshot->Addr(), snapshot->length(),
+                            instructions_buffer);
+
+  ApiErrorPtr api_error = deserializer.VerifyVersionAndFeatures();
+  if (api_error != ApiError::null()) {
+    return api_error;
+  }
+
+  deserializer.Deserialize();
+
+  return ApiError::null();
+}
+
+}  // namespace module_snapshot
+}  // namespace dart
+
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/module_snapshot.h b/runtime/vm/module_snapshot.h
new file mode 100644
index 0000000..214a0c1
--- /dev/null
+++ b/runtime/vm/module_snapshot.h
@@ -0,0 +1,27 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef RUNTIME_VM_MODULE_SNAPSHOT_H_
+#define RUNTIME_VM_MODULE_SNAPSHOT_H_
+
+#if !defined(DART_PRECOMPILED_RUNTIME)
+
+#include "platform/assert.h"
+#include "vm/allocation.h"
+#include "vm/globals.h"
+#include "vm/snapshot.h"
+#include "vm/thread.h"
+
+namespace dart {
+namespace module_snapshot {
+
+ApiErrorPtr ReadModuleSnapshot(Thread* thread,
+                               const Snapshot* snapshot,
+                               const uint8_t* instructions_buffer);
+
+}  // namespace module_snapshot
+}  // namespace dart
+
+#endif  // !defined(DART_PRECOMPILED_RUNTIME)
+#endif  // RUNTIME_VM_MODULE_SNAPSHOT_H_
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 868014c..41b26ef 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2532,6 +2532,14 @@
     pending_classes.Add(cls);
     RegisterClass(cls, Symbols::FinalizerEntry(), lib);
 
+    lib = Library::LookupLibrary(thread, Symbols::DartVM());
+    if (lib.IsNull()) {
+      lib = Library::NewLibraryHelper(Symbols::DartVM(), true);
+      lib.SetLoadRequested();
+      lib.Register(thread);
+    }
+    object_store->set_bootstrap_library(ObjectStore::kVM, lib);
+
     // Finish the initialization by compiling the bootstrap scripts containing
     // the base interfaces and the implementation of the internal classes.
     const Error& error = Error::Handle(
@@ -2846,11 +2854,7 @@
 
   reinterpret_cast<UntaggedObject*>(address)->tags_ = tags;
 #if defined(HOST_HAS_FAST_WRITE_WRITE_FENCE)
-  // GCC warns that TSAN doesn't understand thread fences.
-#if defined(__GNUC__) && !defined(__clang__)
-#pragma GCC diagnostic ignored "-Wtsan"
-#endif
-  std::atomic_thread_fence(std::memory_order_release);
+  StoreStoreFence();
 #endif
 }
 
@@ -8436,6 +8440,10 @@
   ClearCode();
 }
 
+bool Function::IsInterpreted(FunctionPtr function) {
+  return function->untag()->code() == StubCode::InterpretCall().ptr();
+}
+
 #endif  // defined(DART_DYNAMIC_MODULES)
 
 bool Function::HasCode(FunctionPtr function) {
@@ -15644,6 +15652,10 @@
   return IsolateGroup::Current()->object_store()->_internal_library();
 }
 
+LibraryPtr Library::VMLibrary() {
+  return IsolateGroup::Current()->object_store()->_vm_library();
+}
+
 LibraryPtr Library::IsolateLibrary() {
   return IsolateGroup::Current()->object_store()->isolate_library();
 }
@@ -18729,7 +18741,6 @@
 
 intptr_t Code::GetPrologueOffset() const {
 #if defined(PRODUCT)
-  UNREACHABLE();
   return -1;
 #else
   const Object& object = Object::Handle(untag()->return_address_metadata());
@@ -26635,13 +26646,14 @@
 PointerPtr Pointer::New(uword native_address, Heap::Space space) {
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
+  IsolateGroup* isolate_group = thread->isolate_group();
 
   const auto& type_args = TypeArguments::Handle(
-      zone, IsolateGroup::Current()->object_store()->type_argument_never());
+      zone, isolate_group->object_store()->type_argument_never());
 
   const Class& cls =
-      Class::Handle(IsolateGroup::Current()->class_table()->At(kPointerCid));
-  cls.EnsureIsAllocateFinalized(Thread::Current());
+      Class::Handle(isolate_group->class_table()->At(kPointerCid));
+  cls.EnsureIsAllocateFinalized(thread);
 
   const auto& result = Pointer::Handle(zone, Object::Allocate<Pointer>(space));
   result.SetTypeArguments(type_args);
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 16feff6..fb598e9 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -3287,8 +3287,11 @@
   static inline BytecodePtr GetBytecode(FunctionPtr function);
   inline bool HasBytecode() const;
   static inline bool HasBytecode(FunctionPtr function);
+  static bool IsInterpreted(FunctionPtr function);
+  inline bool IsInterpreted() const { return IsInterpreted(ptr()); }
 #else
   inline bool HasBytecode() const { return false; }
+  inline bool IsInterpreted() const { return false; }
 #endif
 
   virtual uword Hash() const;
@@ -5439,6 +5442,7 @@
   static LibraryPtr DeveloperLibrary();
   static LibraryPtr FfiLibrary();
   static LibraryPtr InternalLibrary();
+  static LibraryPtr VMLibrary();
   static LibraryPtr IsolateLibrary();
   static LibraryPtr MathLibrary();
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -6992,7 +6996,11 @@
                                    : 0;
     return EntryPointOf(code) - entry_offset;
 #else
-    return Instructions::PayloadStart(InstructionsOf(code));
+    auto instr = InstructionsOf(code);
+    if (instr == Instructions::null()) {
+      return code->untag()->entry_point_;
+    }
+    return Instructions::PayloadStart(instr);
 #endif
   }
 
@@ -7002,7 +7010,11 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
     return code->untag()->entry_point_;
 #else
-    return Instructions::EntryPoint(InstructionsOf(code));
+    auto instr = InstructionsOf(code);
+    if (instr == Instructions::null()) {
+      return code->untag()->entry_point_;
+    }
+    return Instructions::EntryPoint(instr);
 #endif
   }
 
@@ -7023,7 +7035,11 @@
 #if defined(DART_PRECOMPILED_RUNTIME)
     return untag()->monomorphic_entry_point_;
 #else
-    return Instructions::MonomorphicEntryPoint(instructions());
+    auto instr = instructions();
+    if (instr == Instructions::null()) {
+      return untag()->monomorphic_entry_point_;
+    }
+    return Instructions::MonomorphicEntryPoint(instr);
 #endif
   }
   // Returns the unchecked monomorphic entry point of [instructions()].
@@ -7042,7 +7058,12 @@
     if (IsUnknownDartCode(code)) return kUwordMax;
     return code->untag()->instructions_length_;
 #else
-    return Instructions::Size(InstructionsOf(code));
+    auto instr = InstructionsOf(code);
+    if (instr == Instructions::null()) {
+      // TODO(alexmarkov): keep size in the Code objects.
+      return 0;
+    }
+    return Instructions::Size(instr);
 #endif
   }
 
@@ -7530,6 +7551,7 @@
   friend class CodeKeyValueTrait;  // for UncheckedEntryPointOffset
   friend class InstanceCall;       // for StorePointerUnaligned
   friend class StaticCall;         // for StorePointerUnaligned
+  friend class module_snapshot::CodeDeserializationCluster;
   friend void DumpStackFrame(intptr_t frame_index, uword pc, uword fp);
 };
 
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index c514623..1550592 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -29,6 +29,7 @@
   M(Math, math)                                                                \
   M(Mirrors, mirrors)                                                          \
   M(TypedData, typed_data)                                                     \
+  M(VM, _vm)                                                                   \
   M(VMService, _vmservice)                                                     \
   M(Concurrent, concurrent)
 
@@ -162,6 +163,7 @@
   RW(Library, native_wrappers_library)                                         \
   RW(Library, root_library)                                                    \
   RW(Library, typed_data_library)                                              \
+  RW(Library, _vm_library)                                                     \
   RW(Library, _vmservice_library)                                              \
   RW(Library, native_assets_library)                                           \
   RW(Array, native_assets_map)                                                 \
@@ -621,6 +623,7 @@
       case Snapshot::kFullJIT:
       case Snapshot::kFullAOT:
         return reinterpret_cast<ObjectPtr*>(&slow_tts_stub_);
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 4f6b563..9211784 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -464,14 +464,10 @@
 #endif
 }
 
-// TODO(5411554):  May need to hoist these architecture dependent code
-// into a architecture specific file e.g: os_ia32_fuchsia.cc
 intptr_t OS::ActivationFrameAlignment() {
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) ||                   \
-    defined(TARGET_ARCH_ARM64)
+#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_ARM64) ||                  \
+    defined(TARGET_ARCH_RISCV64)
   const int kMinimumAlignment = 16;
-#elif defined(TARGET_ARCH_ARM)
-  const int kMinimumAlignment = 8;
 #else
 #error Unsupported architecture.
 #endif
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index bbba518..a6e03ac 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.h
@@ -133,6 +133,11 @@
   void DisableThreadInterrupts();
   void EnableThreadInterrupts();
   bool ThreadInterruptsEnabled();
+#else
+  // Used to temporarily disable or enable thread interrupts.
+  void DisableThreadInterrupts() {}
+  void EnableThreadInterrupts() {}
+  bool ThreadInterruptsEnabled() { return false; }
 #endif  // defined(DART_INCLUDE_PROFILER)
 
   // The currently executing thread, or nullptr if not yet initialized.
diff --git a/runtime/vm/os_thread_fuchsia.cc b/runtime/vm/os_thread_fuchsia.cc
index a1ff522..8b6c962 100644
--- a/runtime/vm/os_thread_fuchsia.cc
+++ b/runtime/vm/os_thread_fuchsia.cc
@@ -153,7 +153,7 @@
 }
 
 void OSThread::Detach(ThreadJoinId id) {
-  int result = pthread_detach(id);
+  int result = pthread_detach(id);  // NOLINT
   VALIDATE_PTHREAD_RESULT(result);
 }
 
@@ -202,6 +202,10 @@
   asm volatile("mrs %0, TPIDR_EL0;\n" _loadword(ZX_TLS_UNSAFE_SP_OFFSET)
                : "=r"(result)  // outputs
   );
+#elif defined(HOST_ARCH_RISCV64)
+  asm volatile("ld %0, " STRINGIFY(ZX_TLS_UNSAFE_SP_OFFSET) "(tp)"
+               : "=r"(result)  // outputs
+  );
 #else
 #error "Architecture not supported"
 #endif
@@ -229,6 +233,12 @@
                : "r"(ssp)   // inputs.
                :            // clobbered.
   );
+#elif defined(HOST_ARCH_RISCV64)
+  asm volatile("sd %0, " STRINGIFY(ZX_TLS_UNSAFE_SP_OFFSET) "(tp)"
+               :           // outputs.
+               : "r"(ssp)  // inputs.
+               :           // clobbered.
+  );
 #else
 #error "Architecture not supported"
 #endif
diff --git a/runtime/vm/perfetto_utils.h b/runtime/vm/perfetto_utils.h
index 11e566c..ae9b8e4 100644
--- a/runtime/vm/perfetto_utils.h
+++ b/runtime/vm/perfetto_utils.h
@@ -308,6 +308,8 @@
  private:
   using SequenceFlags = perfetto::protos::pbzero::TracePacket_SequenceFlags;
 
+  enum class UnknownMappingState { kNotNeeded, kNeeded, kEmitted };
+
  public:
   // InternedData contains multiple independent interning dictionaries which
   // are used for different attributes.
@@ -331,6 +333,12 @@
 
   InternedDataBuilder() = default;
 
+  void MarkNeedUnknownMapping() {
+    if (unknown_mapping_ == UnknownMappingState::kNotNeeded) {
+      unknown_mapping_ = UnknownMappingState::kNeeded;
+    }
+  }
+
   // Emit all strings added since the last invocation of |AttachInternedDataTo|
   // into |interned_data| of the given |TracePacket|.
   //
@@ -372,6 +380,18 @@
       }
     });
 
+    // Perfetto proto message definition claim that mapping iid 0 means
+    // the same as frame not having mapping information. However Perfetto UI
+    // fails to load profiles if they contain any frames without mapping iid or
+    // with 0 mapping iid - but such mapping (with 0 iid) is not present in
+    // interned mappings. To work-around this bug we simply emit an empty
+    // mapping with 0 iid if we need it.
+    if (unknown_mapping_ == UnknownMappingState::kNeeded) {
+      auto mapping = interned_data->add_mappings();
+      mapping->set_iid(0);
+      unknown_mapping_ = UnknownMappingState::kEmitted;
+    }
+
     mappings_.FlushNewlyInternedTo([interned_data](const auto& interned) {
       auto mapping = interned_data->add_mappings();
       mapping->set_iid(interned.iid);
@@ -458,6 +478,8 @@
   uint32_t sequence_flags_ = SequenceFlags::SEQ_INCREMENTAL_STATE_CLEARED |
                              SequenceFlags::SEQ_NEEDS_INCREMENTAL_STATE;
 
+  UnknownMappingState unknown_mapping_ = UnknownMappingState::kNotNeeded;
+
   // These are interned in debug_annotation_string_values space.
   IdToIidMap isolate_id_to_iid_of_formatted_string_;
   IdToIidMap isolate_group_id_to_iid_of_formatted_string_;
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 7148e84..ba9684d 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -15,6 +15,7 @@
 #include "vm/compiler/compiler_state.h"
 #endif
 #include "vm/debugger.h"
+#include "vm/globals.h"
 #include "vm/heap/safepoint.h"
 #include "vm/instructions.h"
 #include "vm/isolate.h"
@@ -70,7 +71,7 @@
     "the oldest ones. This flag itself does not enable the profiler; the "
     "profiler must be enabled separately, e.g. with --profiler.");
 
-#if defined(DART_INCLUDE_PROFILER)
+#if defined(DART_INCLUDE_STACK_DUMPER)
 ProfilerCounters Profiler::counters_ = {};
 
 static void DumpStackFrame(uword pc, uword fp, const char* name, uword offset) {
@@ -129,19 +130,19 @@
  public:
   ProfilerStackWalker(Dart_Port port_id,
                       Sample* head_sample,
-                      SampleBuffer* sample_buffer,
+                      Isolate* isolate,
                       intptr_t skip_count = 0)
       : port_id_(port_id),
         sample_(head_sample),
-        sample_buffer_(sample_buffer),
+        isolate_(isolate),
         skip_count_(skip_count),
         frames_skipped_(0),
         frame_index_(0),
         total_frames_(0) {
     if (sample_ == nullptr) {
-      ASSERT(sample_buffer_ == nullptr);
+      ASSERT(isolate_ == nullptr);
     } else {
-      ASSERT(sample_buffer_ != nullptr);
+      ASSERT(isolate_ != nullptr);
       ASSERT(sample_->head_sample());
     }
   }
@@ -158,13 +159,14 @@
       total_frames_++;
       return true;
     }
+#if defined(DART_INCLUDE_PROFILER)
     if (total_frames_ >= FLAG_max_profile_depth) {
       sample_->set_truncated_trace(true);
       return false;
     }
     ASSERT(sample_ != nullptr);
     if (frame_index_ == Sample::kPCArraySizeInWords) {
-      Sample* new_sample = sample_buffer_->ReserveSampleAndLink(sample_);
+      Sample* new_sample = SampleBlock::ReserveSampleAndLink(sample_, isolate_);
       if (new_sample == nullptr) {
         // Could not reserve new sample- mark this as truncated.
         sample_->set_truncated_trace(true);
@@ -178,12 +180,16 @@
     frame_index_++;
     total_frames_++;
     return true;
+#else
+    UNREACHABLE();
+    return false;
+#endif
   }
 
  protected:
   Dart_Port port_id_;
   Sample* sample_;
-  SampleBuffer* sample_buffer_;
+  Isolate* isolate_;
   intptr_t skip_count_;
   intptr_t frames_skipped_;
   intptr_t frame_index_;
@@ -245,14 +251,14 @@
   ProfilerNativeStackWalker(ProfilerCounters* counters,
                             Dart_Port port_id,
                             Sample* sample,
-                            SampleBuffer* sample_buffer,
+                            Isolate* isolate,
                             uword stack_lower,
                             uword stack_upper,
                             uword pc,
                             uword fp,
                             uword sp,
                             intptr_t skip_count = 0)
-      : ProfilerStackWalker(port_id, sample, sample_buffer, skip_count),
+      : ProfilerStackWalker(port_id, sample, isolate, skip_count),
         counters_(counters),
         stack_upper_(stack_upper),
         original_pc_(pc),
@@ -367,6 +373,7 @@
   return true;
 }
 
+#if defined(DART_INCLUDE_PROFILER)
 // Get |thread|'s stack boundary and verify that |sp| and |fp| are within
 // it. Return |false| if anything looks suspicious.
 static bool GetAndValidateThreadStackBounds(OSThread* os_thread,
@@ -410,6 +417,7 @@
 
   return ValidateThreadStackBounds(fp, sp, *stack_lower, *stack_upper);
 }
+#endif  // defined(DART_INCLUDE_PROFILER)
 
 static bool GetAndValidateCurrentThreadStackBounds(uintptr_t fp,
                                                    uintptr_t sp,
@@ -600,6 +608,9 @@
 
   DumpCompilerState(thread);
 }
+#endif  // defined(DART_INCLUDE_STACK_DUMPER)
+
+#if defined(DART_INCLUDE_PROFILER)
 
 RelaxedAtomic<bool> Profiler::initialized_ = false;
 SampleBlockBuffer* Profiler::sample_block_buffer_ = nullptr;
@@ -845,10 +856,9 @@
   return nullptr;
 }
 
-Sample* SampleBlock::ReserveSampleAndLink(Sample* previous) {
+Sample* SampleBlock::ReserveSampleAndLink(Sample* previous, Isolate* isolate) {
   ASSERT(previous != nullptr);
   SampleBlockBuffer* buffer = Profiler::sample_block_buffer();
-  Isolate* isolate = owner_;
   ASSERT(isolate != nullptr);
   Sample* next = previous->is_allocation_sample()
                      ? buffer->ReserveAllocationSample(isolate)
@@ -899,12 +909,7 @@
   if (block != nullptr) {
     block->MarkCompleted();
     if (!Isolate::IsSystemIsolate(isolate)) {
-      Thread* mutator = isolate->IGNORE_RACE(mutator_thread)();
-      // The mutator thread might be NULL if we sample in the middle of
-      // Thread::Enter/ExitIsolate.
-      if ((mutator != nullptr) && isolate->TrySetHasCompletedBlocks()) {
-        mutator->ScheduleInterrupts(Thread::kVMInterrupt);
-      }
+      isolate->TrySetHasCompletedBlocks();
     }
   }
   return next->ReserveSample();
@@ -1050,20 +1055,16 @@
 class ProfilerDartStackWalker : public ProfilerStackWalker {
  public:
   ProfilerDartStackWalker(Thread* thread,
+                          Dart_Port port,
                           Sample* sample,
-                          SampleBuffer* sample_buffer,
+                          Isolate* isolate,
                           uword pc,
                           uword fp,
                           uword sp,
                           uword lr,
                           bool allocation_sample,
                           intptr_t skip_count = 0)
-      : ProfilerStackWalker((thread->IGNORE_RACE(isolate)() != nullptr)
-                                ? thread->IGNORE_RACE(isolate)()->main_port()
-                                : ILLEGAL_PORT,
-                            sample,
-                            sample_buffer,
-                            skip_count),
+      : ProfilerStackWalker(port, sample, isolate, skip_count),
         thread_(thread),
         pc_(reinterpret_cast<uword*>(pc)),
         fp_(reinterpret_cast<uword*>(fp)),
@@ -1368,7 +1369,7 @@
   }
 
   Sample* sample =
-      SetupSample(thread, /*allocation_block*/ true, os_thread->trace_id());
+      SetupSample(thread, /*allocation_sample=*/true, os_thread->trace_id());
   if (sample == nullptr) {
     // We were unable to assign a sample for this allocation.
     counters_.sample_allocation_failure++;
@@ -1377,16 +1378,16 @@
   sample->SetAllocationCid(cid);
   sample->set_allocation_identity_hash(identity_hash);
 
+  Dart_Port port = (isolate != nullptr) ? isolate->main_port() : ILLEGAL_PORT;
   if (FLAG_profile_vm_allocation) {
-    ProfilerNativeStackWalker native_stack_walker(
-        &counters_, (isolate != nullptr) ? isolate->main_port() : ILLEGAL_PORT,
-        sample, isolate->current_allocation_sample_block(), stack_lower,
-        stack_upper, pc, fp, sp);
+    ProfilerNativeStackWalker native_stack_walker(&counters_, port, sample,
+                                                  isolate, stack_lower,
+                                                  stack_upper, pc, fp, sp);
     native_stack_walker.walk();
   } else if (exited_dart_code) {
-    ProfilerDartStackWalker dart_exit_stack_walker(
-        thread, sample, isolate->current_allocation_sample_block(), pc, fp, sp,
-        lr, /* allocation_sample*/ true);
+    ProfilerDartStackWalker dart_exit_stack_walker(thread, port, sample,
+                                                   isolate, pc, fp, sp, lr,
+                                                   /*allocation_sample=*/true);
     dart_exit_stack_walker.walk();
   } else {
     // Fall back.
@@ -1504,7 +1505,7 @@
 
   // Setup sample.
   Sample* sample =
-      SetupSample(thread, /*allocation_block*/ false, os_thread->trace_id());
+      SetupSample(thread, /*allocation_sample=*/false, os_thread->trace_id());
   if (sample == nullptr) {
     // We were unable to assign a sample for this profiler tick.
     counters_.sample_allocation_failure++;
@@ -1543,14 +1544,13 @@
   }
 #endif
 
+  Dart_Port port = (isolate != nullptr) ? isolate->main_port() : ILLEGAL_PORT;
   ProfilerNativeStackWalker native_stack_walker(
-      &counters_, (isolate != nullptr) ? isolate->main_port() : ILLEGAL_PORT,
-      sample, isolate->current_sample_block(), stack_lower, stack_upper, pc, fp,
-      sp);
+      &counters_, port, sample, isolate, stack_lower, stack_upper, pc, fp, sp);
   const bool exited_dart_code = thread->IGNORE_RACE2(HasExitedDartCode)();
-  ProfilerDartStackWalker dart_stack_walker(
-      thread, sample, isolate->current_sample_block(), pc, fp, sp, lr,
-      /* allocation_sample*/ false);
+  ProfilerDartStackWalker dart_stack_walker(thread, port, sample, isolate, pc,
+                                            fp, sp, lr,
+                                            /*allocation_sample=*/false);
 
   // All memory access is done inside CollectSample.
   CollectSample(isolate, exited_dart_code, in_dart_code, sample,
@@ -1768,7 +1768,7 @@
   }
 
   if (!sample->exit_frame_sample()) {
-    processed_sample->FixupCaller(clt, /* pc_marker */ 0,
+    processed_sample->FixupCaller(clt, /*pc_marker=*/0,
                                   sample->GetStackBuffer());
   }
 
diff --git a/runtime/vm/profiler.h b/runtime/vm/profiler.h
index 820abee..c2d0be6 100644
--- a/runtime/vm/profiler.h
+++ b/runtime/vm/profiler.h
@@ -386,8 +386,8 @@
   uword pc_array_[kPCArraySizeInWords];
   uword vm_tag_;
   uword user_tag_;
-  uint32_t state_;
   Sample* next_;
+  uint32_t state_;
   uint32_t allocation_identity_hash_;
 
   using HeadSampleBit = BitField<decltype(state_), bool, 0, 1>;
@@ -632,9 +632,6 @@
     }
   }
 
-  virtual Sample* ReserveSample() = 0;
-  virtual Sample* ReserveSampleAndLink(Sample* previous) = 0;
-
   Sample* At(intptr_t idx) const {
     ASSERT(idx >= 0);
     ASSERT(idx < capacity_);
@@ -673,8 +670,8 @@
   Isolate* owner() const { return owner_; }
   void set_owner(Isolate* isolate) { owner_ = isolate; }
 
-  virtual Sample* ReserveSample();
-  virtual Sample* ReserveSampleAndLink(Sample* previous);
+  Sample* ReserveSample();
+  static Sample* ReserveSampleAndLink(Sample* previous, Isolate* isolate);
 
   bool TryAllocateFree() {
     State expected = kFree;
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index 8fc4962..e36bca7 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -1976,6 +1976,10 @@
                                                             /*length=*/1);
     }
 
+    if (mapping_iid == 0) {
+      interned_data_builder.MarkNeedUnknownMapping();
+    }
+
     // Add a |Frame| to the interned data table that is linked to |function|'s
     // name and source location (through the interned data table). A Perfetto
     // |Callstack| consists of a stack of |Frame|s, so the |Callstack|s
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index f3270fc..734a26a 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -46,6 +46,12 @@
 class CodeStatistics;
 class StackFrame;
 
+namespace module_snapshot {
+class CodeDeserializationCluster;
+class Deserializer;
+class ObjectPoolDeserializationCluster;
+}  // namespace module_snapshot
+
 #define DEFINE_CONTAINS_COMPRESSED(type)                                       \
   static constexpr bool kContainsCompressedPointers =                          \
       is_compressed_ptr<type>::value;
@@ -886,6 +892,7 @@
   friend class WriteBarrierUpdateVisitor;  // CheckHeapPointerStore
   friend class OffsetsTable;
   friend class Object;
+  friend class module_snapshot::Deserializer;
   friend uword TagsFromUntaggedObject(UntaggedObject*);                // tags_
   friend void SetNewSpaceTaggingWord(ObjectPtr, classid_t, uint32_t);  // tags_
   friend class ObjectCopyBase;  // LoadPointer/StorePointer
@@ -1249,6 +1256,7 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
         return reinterpret_cast<CompressedObjectPtr*>(&dependent_code_);
 #endif
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -1333,6 +1341,7 @@
         UNREACHABLE();
         return nullptr;
 #endif
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -1527,6 +1536,7 @@
       case Snapshot::kFullCore:
       case Snapshot::kFullJIT:
         return reinterpret_cast<CompressedObjectPtr*>(&data_);
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -1692,6 +1702,7 @@
       case Snapshot::kFullJIT:
       case Snapshot::kFullAOT:
         return reinterpret_cast<CompressedObjectPtr*>(&initializer_function_);
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -1761,6 +1772,7 @@
       case Snapshot::kFullCore:
       case Snapshot::kFullJIT:
         return reinterpret_cast<CompressedObjectPtr*>(&kernel_program_info_);
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -1838,6 +1850,7 @@
         UNREACHABLE();
         return nullptr;
 #endif
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -1894,6 +1907,7 @@
       case Snapshot::kFullCore:
       case Snapshot::kFullJIT:
         return reinterpret_cast<CompressedObjectPtr*>(&owner_);
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -2077,6 +2091,7 @@
   friend class UnitSerializationRoots;
   friend class UnitDeserializationRoots;
   friend class CallSiteResetter;
+  friend class module_snapshot::CodeDeserializationCluster;
 };
 
 class UntaggedBytecode : public UntaggedObject {
@@ -2142,6 +2157,7 @@
   friend class Interpreter;
   friend class UnitSerializationRoots;
   friend class UnitDeserializationRoots;
+  friend class module_snapshot::ObjectPoolDeserializationCluster;
 };
 
 class UntaggedInstructions : public UntaggedObject {
@@ -2713,6 +2729,7 @@
       case Snapshot::kFullCore:
       case Snapshot::kFullJIT:
         return to();
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -2851,6 +2868,7 @@
       case Snapshot::kFullCore:
       case Snapshot::kFullJIT:
         return reinterpret_cast<CompressedObjectPtr*>(&importer_);
+      case Snapshot::kModule:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
         break;
@@ -3387,6 +3405,7 @@
   friend class Page;
   friend class MarkingVisitor;
   friend class FastObjectCopy;  // For initializing fields.
+  friend class module_snapshot::Deserializer;
   friend void UpdateLengthField(intptr_t, ObjectPtr, ObjectPtr);  // length_
 };
 
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 3ddc816..9689338 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -3777,7 +3777,7 @@
       // TODO(turnidge): To make --deoptimize_every and
       // --stacktrace-every faster we could move this increment/test to
       // the generated code.
-      int32_t count = thread->IncrementAndGetStackOverflowCount();
+      uint32_t count = thread->IncrementAndGetStackOverflowCount();
       if (FLAG_deoptimize_every > 0 && (count % FLAG_deoptimize_every) == 0) {
         do_deopt = true;
       }
@@ -4831,6 +4831,7 @@
   // We stay in "in generated code" execution state when interpreting code.
   ASSERT(thread->execution_state() == Thread::kThreadInGenerated);
   ASSERT(Function::HasBytecode(function));
+  ASSERT(Function::IsInterpreted(function));
   ASSERT(interpreter != nullptr);
 #endif
   // Tell MemorySanitizer 'argv' is initialized by generated code.
diff --git a/runtime/vm/simulator_arm.cc b/runtime/vm/simulator_arm.cc
index b01fe1a..85b6aef 100644
--- a/runtime/vm/simulator_arm.cc
+++ b/runtime/vm/simulator_arm.cc
@@ -3413,11 +3413,14 @@
     if (instr->InstructionBits() == static_cast<int32_t>(0xf57ff01f)) {
       // Format(instr, "clrex");
       ClearExclusive();
-    } else if (instr->InstructionBits() ==
-               static_cast<int32_t>(kDataMemoryBarrier)) {
+    } else if (instr->InstructionBits() == static_cast<int32_t>(kDMB_ISH)) {
       // Format(instr, "dmb ish");
       memory_.FlushAll();
       std::atomic_thread_fence(std::memory_order_seq_cst);
+    } else if (instr->InstructionBits() == static_cast<int32_t>(kDMB_ISHST)) {
+      // Format(instr, "dmb ishst");
+      memory_.FlushAll();
+      StoreStoreFence();
     } else {
       if (instr->IsSIMDDataProcessing()) {
         DecodeSIMDDataProcessing(instr);
diff --git a/runtime/vm/simulator_arm64.cc b/runtime/vm/simulator_arm64.cc
index a8cdb70..c151428 100644
--- a/runtime/vm/simulator_arm64.cc
+++ b/runtime/vm/simulator_arm64.cc
@@ -1982,12 +1982,18 @@
     return;
   }
 
-  if (instr->InstructionBits() == kDataMemoryBarrier) {
+  if (instr->InstructionBits() == kDMB_ISH) {
     // Format(instr, "dmb ish");
     memory_.FlushAll();
     std::atomic_thread_fence(std::memory_order_seq_cst);
     return;
   }
+  if (instr->InstructionBits() == kDMB_ISHST) {
+    // Format(instr, "dmb ishst");
+    memory_.FlushAll();
+    StoreStoreFence();
+    return;
+  }
 
   if ((instr->Bits(0, 8) == 0x1f) && (instr->Bits(12, 4) == 2) &&
       (instr->Bits(16, 3) == 3) && (instr->Bits(19, 2) == 0) &&
diff --git a/runtime/vm/simulator_riscv.cc b/runtime/vm/simulator_riscv.cc
index 4543d71..40214c4 100644
--- a/runtime/vm/simulator_riscv.cc
+++ b/runtime/vm/simulator_riscv.cc
@@ -5,6 +5,8 @@
 #include <setjmp.h>  // NOLINT
 #include <stdlib.h>
 
+#include <cmath>
+
 #include "vm/globals.h"
 #if defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
 
@@ -192,6 +194,7 @@
   stack_ =
       new char[(OSThread::GetSpecifiedStackSize() +
                 OSThread::kStackSizeBufferMax + kSimulatorStackUnderflowSize)];
+  shadow_stack_ = new char[64 * KB];
   // Low address.
   stack_limit_ = reinterpret_cast<uword>(stack_);
   // Limit for StackOverflowError.
@@ -211,10 +214,17 @@
     // fregs_[i] = bit_cast<double>(random_.NextUInt64());
     fregs_[i] = bit_cast<double>(kNaNBox);
   }
+  for (intptr_t i = 0; i < kNumberOfVectorRegisters; i++) {
+    for (intptr_t j = 0; j < VLEN / 8; j++) {
+      vregs_[i][j] = random_.NextUInt64();
+    }
+  }
 
   // The sp is initialized to point to the bottom (high address) of the
   // allocated stack area.
   set_xreg(SP, stack_base());
+  ssp_ = reinterpret_cast<uintx_t>(shadow_stack_) + 64 * KB;
+  ss_enabled_ = true;
   // The lr and pc are initialized to a known bad value that will cause an
   // access violation if the simulator ever tries to execute it.
   set_xreg(RA, kBadLR);
@@ -223,6 +233,7 @@
 
 Simulator::~Simulator() {
   delete[] stack_;
+  delete[] shadow_stack_;
   Isolate* isolate = Isolate::Current();
   if (isolate != nullptr) {
     isolate->set_simulator(nullptr);
@@ -247,6 +258,12 @@
       fregs_[i] = bit_cast<double>(kNaNBox);
     }
   }
+  for (intptr_t i = 0; i < kNumberOfVectorRegisters; i++) {
+    for (intptr_t j = 0; j < VLEN / 8; j++) {
+      vregs_[i][j] = random_.NextUInt64();
+    }
+  }
+  preserved->ssp = ssp_;
 #endif
 }
 
@@ -267,6 +284,11 @@
       fregs_[i] = bit_cast<double>(kNaNBox);
     }
   }
+  for (intptr_t i = 0; i < kNumberOfVectorRegisters; i++) {
+    for (intptr_t j = 0; j < VLEN / 8; j++) {
+      vregs_[i][j] = random_.NextUInt64();
+    }
+  }
 #endif
 }
 
@@ -278,6 +300,7 @@
   for (intptr_t i = 0; i < kNumberOfFpuRegisters; i++) {
     preserved->fregs[i] = fregs_[i];
   }
+  preserved->ssp = ssp_;
 #endif
 }
 
@@ -305,6 +328,9 @@
       }
     }
   }
+  if (ssp_ != preserved->ssp) {
+    FATAL("ssp was not preserved\n");
+  }
 #endif
 }
 
@@ -480,18 +506,90 @@
          static_cast<intptr_t>(kNumberOfFpuRegisters));
   for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) {
 #if XLEN == 32
-    OS::Print("%4s: %8x %11d", cpu_reg_names[i], xregs_[i], xregs_[i]);
+    OS::Print("%5s: %8x %11d", cpu_reg_names[i], xregs_[i], xregs_[i]);
 #elif XLEN == 64
-    OS::Print("%4s: %16" Px64 " %20" Pd64, cpu_reg_names[i], xregs_[i],
+    OS::Print("%5s: %16" Px64 " %20" Pd64, cpu_reg_names[i], xregs_[i],
               xregs_[i]);
 #endif
-    OS::Print("  %4s: %lf\n", fpu_reg_names[i], fregs_[i]);
+    OS::Print("  %5s: %lf\n", fpu_reg_names[i], fregs_[i]);
   }
 #if XLEN == 32
-  OS::Print("  pc: %8x\n", pc_);
+  OS::Print("   pc: %8x\n", pc_);
 #elif XLEN == 64
-  OS::Print("  pc: %16" Px64 "\n", pc_);
+  OS::Print("   pc: %16" Px64 "\n", pc_);
 #endif
+
+  for (intptr_t i = 0; i < kNumberOfVectorRegisters; i++) {
+    OS::Print("%5s: ", vector_reg_names[i]);
+    for (intptr_t j = VLEN / 8 - 1; j >= 0; j--) {
+      OS::Print("%02x", (unsigned)vregs_[i][j]);
+    }
+    OS::Print("\n");
+  }
+#if XLEN == 32
+  OS::Print("   vl: %8x %11d\n", vl_, vl_);
+#elif XLEN == 64
+  OS::Print("   vl: %16" Px64 " %20" Pd64 "\n", vl_, vl_);
+#endif
+
+#if XLEN == 32
+  OS::Print("vtype: %8x ", vtype_);
+#elif XLEN == 64
+  OS::Print("vtype: %16" Px64 "       ", vtype_);
+#endif
+  switch (vsew()) {
+    case e8:
+      OS::Print("e8");
+      break;
+    case e16:
+      OS::Print("e16");
+      break;
+    case e32:
+      OS::Print("e32");
+      break;
+    case e64:
+      OS::Print("e64");
+      break;
+    default:
+      OS::Print("invalid sew");
+      break;
+  }
+  switch (vlmul()) {
+    case mf8:
+      OS::Print(", mf8");
+      break;
+    case mf4:
+      OS::Print(", mf4");
+      break;
+    case mf2:
+      OS::Print(", mf2");
+      break;
+    case m1:
+      OS::Print(", m1");
+      break;
+    case m2:
+      OS::Print(", m2");
+      break;
+    case m4:
+      OS::Print(", m4");
+      break;
+    case m8:
+      OS::Print(", m8");
+      break;
+    default:
+      OS::Print(", invalid lmul");
+      break;
+  }
+  if ((vtype_ & (1 << 6)) == 0) {
+    OS::Print(", tu");
+  } else {
+    OS::Print(", ta");
+  }
+  if ((vtype_ & (1 << 7)) == 0) {
+    OS::Print(", mu\n");
+  } else {
+    OS::Print(", ma\n");
+  }
 }
 
 void Simulator::PrintStack() {
@@ -572,6 +670,9 @@
     case OPFP:
       InterpretOPFP(instr);
       break;
+    case OPV:
+      InterpretOPV(instr);
+      break;
     default:
       IllegalInstruction(instr);
   }
@@ -1041,10 +1142,28 @@
           set_xreg(instr.rd(),
                    get_xreg(instr.rs1()) + sign_extend(instr.i16_imm()));
         }
-      } else if ((instr.rd() == ZR) || (instr.u_imm() == 0)) {
-        IllegalInstruction(instr);
-      } else {
+      } else if ((instr.rd() != ZR) && (instr.u_imm() != 0)) {
         set_xreg(instr.rd(), sign_extend(instr.u_imm()));
+      } else if (instr.encoding() == C_SSPUSH) {
+        if (ss_enabled_) {
+          uintx_t ra = get_xreg(Register(1));
+          ssp_ -= sizeof(uintx_t);
+          // The shadow stack has special memory protections that only this
+          // write can access.
+          MemoryWrite<uintx_t>(ssp_, ra, ZR);
+        }
+      } else if (instr.encoding() == C_SSPOPCHK) {
+        if (ss_enabled_) {
+          uintx_t ra = MemoryRead<uintx_t>(ssp_, ZR);
+          ssp_ += sizeof(uintx_t);
+          if (ra != get_xreg(Register(5))) {
+            FATAL("Corrupt control flow");
+          }
+        }
+      } else if ((instr.encoding() & C_MOP_MASK) == C_MOP) {
+        // May-be-op
+      } else {
+        IllegalInstruction(instr);
       }
       break;
     case C_ADDI:
@@ -1322,12 +1441,36 @@
     case D:
       set_fregd(instr.frd(), MemoryRead<double>(addr, instr.rs1()));
       break;
+    case E8:
+      InterpretLOADV<uint8_t>(instr);
+      break;
+    case E16:
+      InterpretLOADV<uint16_t>(instr);
+      break;
+    case E32:
+      InterpretLOADV<uint32_t>(instr);
+      break;
+    case E64:
+      InterpretLOADV<uint64_t>(instr);
+      break;
     default:
       IllegalInstruction(instr);
   }
   pc_ += instr.length();
 }
 
+template <typename T>
+void Simulator::InterpretLOADV(Instr instr) {
+  if ((instr.encoding() & 0xFFF00000) != 0x02000000) {
+    UNIMPLEMENTED();  // Only unmasked unit-stride implemented.
+  }
+  uintx_t base = get_xreg(instr.rs1());
+  T* vd = ref_vreg<T>(instr.vd());
+  for (uintx_t i = 0; i < vl_; i++) {
+    vd[i] = MemoryRead<T>(base + i * sizeof(T), instr.rs1());
+  }
+}
+
 DART_FORCE_INLINE
 void Simulator::InterpretSTORE(Instr instr) {
   uintx_t addr = get_xreg(instr.rs1()) + instr.stype_imm();
@@ -1362,12 +1505,36 @@
     case D:
       MemoryWrite<double>(addr, get_fregd(instr.frs2()), instr.rs1());
       break;
+    case E8:
+      InterpretSTOREV<uint8_t>(instr);
+      break;
+    case E16:
+      InterpretSTOREV<uint16_t>(instr);
+      break;
+    case E32:
+      InterpretSTOREV<uint32_t>(instr);
+      break;
+    case E64:
+      InterpretSTOREV<uint64_t>(instr);
+      break;
     default:
       IllegalInstruction(instr);
   }
   pc_ += instr.length();
 }
 
+template <typename T>
+void Simulator::InterpretSTOREV(Instr instr) {
+  if ((instr.encoding() & 0xFFF00000) != 0x02000000) {
+    UNIMPLEMENTED();  // Only unmasked unit-stride implemented.
+  }
+  uintx_t base = get_xreg(instr.rs1());
+  T* vs3 = ref_vreg<T>(instr.vs3());
+  for (uintx_t i = 0; i < vl_; i++) {
+    MemoryWrite<T>(base + i * sizeof(T), vs3[i], instr.rs1());
+  }
+}
+
 DART_FORCE_INLINE
 void Simulator::InterpretOPIMM(Instr instr) {
   switch (instr.funct3()) {
@@ -1941,7 +2108,7 @@
 
 void Simulator::InterpretSYSTEM(Instr instr) {
   switch (instr.funct3()) {
-    case 0:
+    case PRIV:
       switch (instr.funct12()) {
         case ECALL:
           InterpretECALL(instr);
@@ -1953,6 +2120,38 @@
           IllegalInstruction(instr);
       }
       break;
+    case MOP: {
+      if ((instr.funct7() == SSPUSH) && (instr.rd() == ZR) &&
+          (instr.rs1() == ZR) &&
+          ((instr.rs2() == Register(1)) || (instr.rs2() == Register(5)))) {
+        if (ss_enabled_) {
+          uintx_t ra = get_xreg(instr.rs2());
+          ssp_ -= sizeof(uintx_t);
+          // The shadow stack has special memory protections that only this
+          // write can access.
+          MemoryWrite<uintx_t>(ssp_, ra, ZR);
+        }
+      } else if ((instr.funct12() == SSPOPCHK) && (instr.rd() == ZR) &&
+                 ((instr.rs1() == Register(1)) ||
+                  (instr.rs1() == Register(5)))) {
+        if (ss_enabled_) {
+          uintx_t ra = MemoryRead<uintx_t>(ssp_, ZR);
+          ssp_ += sizeof(uintx_t);
+          if (ra != get_xreg(instr.rs1())) {
+            FATAL("Corrupt control flow");
+          }
+        }
+      } else if ((instr.funct12() == SSRDP) && (instr.rs1() == ZR)) {
+        set_xreg(instr.rd(), ss_enabled_ ? ssp_ : 0);
+      } else if ((instr.funct12() & MOP_R_MASK) == MOP_R) {
+        set_xreg(instr.rd(), 0);
+      } else if ((instr.funct7() & MOP_RR_MASK) == MOP_RR) {
+        set_xreg(instr.rd(), 0);
+      } else {
+        IllegalInstruction(instr);
+      }
+      break;
+    }
     case CSRRW: {
       if (instr.rd() == ZR) {
         // No read effect.
@@ -2190,9 +2389,13 @@
     case WIDTH64:
       InterpretAMO64(instr);
       break;
+    case WIDTH128:
+      InterpretAMO128(instr);
+      break;
     default:
       IllegalInstruction(instr);
   }
+  pc_ += instr.length();
 }
 
 // Note: This implementation does not give full LR/SC semantics because it
@@ -2355,6 +2558,19 @@
   atomic->store(value, instr.memory_order());
 }
 
+template <typename type>
+void Simulator::InterpretAMOCAS(Instr instr) {
+  uintx_t addr = get_xreg(instr.rs1());
+  if ((addr & (sizeof(type) - 1)) != 0) {
+    FATAL("Misaligned atomic memory operation");
+  }
+  type expected = get_xreg(instr.rd());
+  type desired = get_xreg(instr.rs2());
+  std::atomic<type>* atomic = reinterpret_cast<std::atomic<type>*>(addr);
+  atomic->compare_exchange_weak(expected, desired, instr.memory_order());
+  set_xreg(instr.rd(), expected);
+}
+
 void Simulator::InterpretAMO8(Instr instr) {
   switch (instr.funct5()) {
     case AMOSWAP:
@@ -2393,7 +2609,6 @@
     default:
       IllegalInstruction(instr);
   }
-  pc_ += instr.length();
 }
 
 void Simulator::InterpretAMO16(Instr instr) {
@@ -2434,7 +2649,6 @@
     default:
       IllegalInstruction(instr);
   }
-  pc_ += instr.length();
 }
 
 void Simulator::InterpretAMO32(Instr instr) {
@@ -2478,10 +2692,12 @@
     case STOREORDERED:
       InterpretSTOREORDERED<int32_t>(instr);
       break;
+    case AMOCAS:
+      InterpretAMOCAS<int32_t>(instr);
+      break;
     default:
       IllegalInstruction(instr);
   }
-  pc_ += instr.length();
 }
 
 void Simulator::InterpretAMO64(Instr instr) {
@@ -2526,11 +2742,30 @@
     case STOREORDERED:
       InterpretSTOREORDERED<int64_t>(instr);
       break;
+    case AMOCAS:
+      InterpretAMOCAS<int64_t>(instr);
+      break;
+#endif  // XLEN >= 64
+#if XLEN == 32
+    case AMOCAS:
+      UNIMPLEMENTED();  // Need double-wide CAS from host.
+      break;
+#endif
+    default:
+      IllegalInstruction(instr);
+  }
+}
+
+void Simulator::InterpretAMO128(Instr instr) {
+  switch (instr.funct5()) {
+#if XLEN >= 64
+    case AMOCAS:
+      UNIMPLEMENTED();  // Need double-wide CAS from host.
+      break;
 #endif  // XLEN >= 64
     default:
       IllegalInstruction(instr);
   }
-  pc_ += instr.length();
 }
 
 void Simulator::InterpretFMADD(Instr instr) {
@@ -2539,14 +2774,14 @@
       float rs1 = get_fregs(instr.frs1());
       float rs2 = get_fregs(instr.frs2());
       float rs3 = get_fregs(instr.frs3());
-      set_fregs(instr.frd(), (rs1 * rs2) + rs3);
+      set_fregs(instr.frd(), std::fma(rs1, rs2, rs3));
       break;
     }
     case F2_D: {
       double rs1 = get_fregd(instr.frs1());
       double rs2 = get_fregd(instr.frs2());
       double rs3 = get_fregd(instr.frs3());
-      set_fregd(instr.frd(), (rs1 * rs2) + rs3);
+      set_fregd(instr.frd(), std::fma(rs1, rs2, rs3));
       break;
     }
     default:
@@ -2561,14 +2796,14 @@
       float rs1 = get_fregs(instr.frs1());
       float rs2 = get_fregs(instr.frs2());
       float rs3 = get_fregs(instr.frs3());
-      set_fregs(instr.frd(), (rs1 * rs2) - rs3);
+      set_fregs(instr.frd(), std::fma(rs1, rs2, -rs3));
       break;
     }
     case F2_D: {
       double rs1 = get_fregd(instr.frs1());
       double rs2 = get_fregd(instr.frs2());
       double rs3 = get_fregd(instr.frs3());
-      set_fregd(instr.frd(), (rs1 * rs2) - rs3);
+      set_fregd(instr.frd(), std::fma(rs1, rs2, -rs3));
       break;
     }
     default:
@@ -2583,14 +2818,14 @@
       float rs1 = get_fregs(instr.frs1());
       float rs2 = get_fregs(instr.frs2());
       float rs3 = get_fregs(instr.frs3());
-      set_fregs(instr.frd(), -(rs1 * rs2) + rs3);
+      set_fregs(instr.frd(), -std::fma(rs1, rs2, -rs3));
       break;
     }
     case F2_D: {
       double rs1 = get_fregd(instr.frs1());
       double rs2 = get_fregd(instr.frs2());
       double rs3 = get_fregd(instr.frs3());
-      set_fregd(instr.frd(), -(rs1 * rs2) + rs3);
+      set_fregd(instr.frd(), -std::fma(rs1, rs2, -rs3));
       break;
     }
     default:
@@ -2605,14 +2840,14 @@
       float rs1 = get_fregs(instr.frs1());
       float rs2 = get_fregs(instr.frs2());
       float rs3 = get_fregs(instr.frs3());
-      set_fregs(instr.frd(), -(rs1 * rs2) - rs3);
+      set_fregs(instr.frd(), -std::fma(rs1, rs2, rs3));
       break;
     }
     case F2_D: {
       double rs1 = get_fregd(instr.frs1());
       double rs2 = get_fregd(instr.frs2());
       double rs3 = get_fregd(instr.frs3());
-      set_fregd(instr.frd(), -(rs1 * rs2) - rs3);
+      set_fregd(instr.frd(), -std::fma(rs1, rs2, rs3));
       break;
     }
     default:
@@ -3337,6 +3572,172 @@
   pc_ += instr.length();
 }
 
+void Simulator::InterpretOPV(Instr instr) {
+  switch (instr.funct3()) {
+    case OPIVV:
+      InterpretOPV_IVV(instr);
+      break;
+    case OPFVV:
+      InterpretOPV_FVV(instr);
+      break;
+    case OPMVV:
+      InterpretOPV_MVV(instr);
+      break;
+    case OPIVI:
+      InterpretOPV_IVI(instr);
+      break;
+    case OPIVX:
+      InterpretOPV_IVX(instr);
+      break;
+    case OPFVF:
+      InterpretOPV_FVF(instr);
+      break;
+    case OPMVX:
+      InterpretOPV_MVX(instr);
+      break;
+    case OPCFG:
+      InterpretOPV_CFG(instr);
+      break;
+    default:
+      IllegalInstruction(instr);
+  }
+  pc_ += instr.length();
+}
+
+void Simulator::InterpretOPV_IVV(Instr instr) {
+  IllegalInstruction(instr);
+}
+
+void Simulator::InterpretOPV_FVV(Instr instr) {
+  IllegalInstruction(instr);
+}
+
+void Simulator::InterpretOPV_MVV(Instr instr) {
+  IllegalInstruction(instr);
+}
+
+void Simulator::InterpretOPV_IVI(Instr instr) {
+  IllegalInstruction(instr);
+}
+
+void Simulator::InterpretOPV_IVX(Instr instr) {
+  switch (vsew()) {
+    case e8:
+      InterpretOPV_IVX<uint8_t>(instr);
+      break;
+    case e16:
+      InterpretOPV_IVX<uint16_t>(instr);
+      break;
+    case e32:
+      InterpretOPV_IVX<uint32_t>(instr);
+      break;
+    case e64:
+      InterpretOPV_IVX<uint64_t>(instr);
+      break;
+    default:
+      FATAL("Invalid SEW");
+  }
+}
+
+template <typename sew_t>
+void Simulator::InterpretOPV_IVX(Instr instr) {
+  if (instr.vm()) UNIMPLEMENTED();
+  sew_t rs1 = get_xreg(instr.rs1());
+  sew_t* vs2 = ref_vreg<sew_t>(instr.vs2());
+  sew_t* vd = ref_vreg<sew_t>(instr.vd());
+  switch (instr.funct6()) {
+    case VADD:
+      for (uintx_t i = 0, n = vl_; i < n; i++) {
+        vd[i] = rs1 + vs2[i];
+      }
+      break;
+    case VMV:
+      for (uintx_t i = 0, n = vl_; i < n; i++) {
+        vd[i] = rs1;
+      }
+      break;
+    default:
+      IllegalInstruction(instr);
+  }
+}
+
+void Simulator::InterpretOPV_FVF(Instr instr) {
+  IllegalInstruction(instr);
+}
+
+void Simulator::InterpretOPV_MVX(Instr instr) {
+  IllegalInstruction(instr);
+}
+
+void Simulator::InterpretOPV_CFG(Instr instr) {
+  if ((instr.encoding() & 0x80000000) == 0) {
+    uintx_t avl = get_xreg(instr.rs1());  // In elements.
+    intx_t vtype = instr.itype_imm();
+    uintx_t sew;
+    switch ((vtype >> 3) & 0b111) {
+      case e8:
+        sew = 8;
+        break;
+      case e16:
+        sew = 16;
+        break;
+      case e32:
+        sew = 32;
+        break;
+      case e64:
+        sew = 64;
+        break;
+      default:
+        FATAL("Invalid SEW");
+    }
+    intx_t lmul;
+    switch ((vtype >> 0) & 0b111) {
+      case mf8:
+        lmul = -8;
+        break;
+      case mf4:
+        lmul = -4;
+        break;
+      case mf2:
+        lmul = -2;
+        break;
+      case m1:
+        lmul = 1;
+        break;
+      case m2:
+        lmul = 2;
+        break;
+      case m4:
+        lmul = 4;
+        break;
+      case m8:
+        lmul = 8;
+        break;
+      default:
+        FATAL("Invalid LMUL");
+    }
+    uintx_t vlmax;
+    if (lmul < 0) {
+      vlmax = VLEN / sew / -lmul;
+    } else {
+      vlmax = VLEN / sew * lmul;
+    }
+    if (instr.rs1() == ZR && instr.rd() != ZR) {
+      vl_ = vlmax;
+    } else if (instr.rs1() == ZR) {
+      // Keep existing vl.
+    } else if (avl < vlmax) {
+      vl_ = avl;
+    } else {
+      vl_ = vlmax;
+    }
+    vtype_ = vtype;
+    set_xreg(instr.rd(), vl_);
+  } else {
+    IllegalInstruction(instr);
+  }
+}
+
 void Simulator::InterpretEBREAK(Instr instr) {
   PrintRegisters();
   PrintStack();
@@ -3404,12 +3805,22 @@
 }
 
 enum ControlStatusRegister {
+  // URW
   fflags = 0x001,
   frm = 0x002,
   fcsr = 0x003,
+  vstart = 0x008,
+  vxsat = 0x009,
+  vxrm = 0x00A,
+  vcsr = 0x00F,
+  ssp = 0x011,
+  // URO
   cycle = 0xC00,
   time = 0xC01,
   instret = 0xC02,
+  vl = 0xC20,
+  vtype = 0xC21,
+  vlenb = 0xC22,
 #if XLEN == 32
   cycleh = 0xC80,
   timeh = 0xC81,
@@ -3421,12 +3832,20 @@
   switch (csr) {
     case fcsr:
       return fcsr_;
+    case ssp:
+      return ssp_;
     case cycle:
       return instret_ / 2;
     case time:
       return 0;
     case instret:
       return instret_;
+    case vl:
+      return vl_;
+    case vtype:
+      return vtype_;
+    case vlenb:
+      return VLEN / 8;
 #if XLEN == 32
     case cycleh:
       return (instret_ / 2) >> 32;
@@ -3441,7 +3860,13 @@
 }
 
 void Simulator::CSRWrite(uint16_t csr, intx_t value) {
-  UNIMPLEMENTED();
+  switch (csr) {
+    case ssp:
+      ssp_ = value;
+      break;
+    default:
+      UNIMPLEMENTED();
+  }
 }
 
 void Simulator::CSRSet(uint16_t csr, intx_t mask) {
diff --git a/runtime/vm/simulator_riscv.h b/runtime/vm/simulator_riscv.h
index 5c49dc2..afc17fd 100644
--- a/runtime/vm/simulator_riscv.h
+++ b/runtime/vm/simulator_riscv.h
@@ -20,6 +20,15 @@
 class SimulatorSetjmpBuffer;
 class Thread;
 
+#define ELEN 64
+#define VLEN 128
+
+COMPILE_ASSERT(ELEN >= 8);
+COMPILE_ASSERT(Utils::IsPowerOfTwo(ELEN));
+COMPILE_ASSERT(VLEN >= ELEN);
+COMPILE_ASSERT(Utils::IsPowerOfTwo(VLEN));
+COMPILE_ASSERT(VLEN <= 0x10000);
+
 // TODO(riscv): Dynamic rounding mode and other FSCR state.
 class Simulator {
  public:
@@ -191,6 +200,7 @@
   uintx_t get_sp() const { return get_xreg(SP); }
   uintx_t get_fp() const { return get_xreg(FP); }
   uintx_t get_lr() const { return get_xreg(RA); }
+  void set_ss_enabled(bool value) { ss_enabled_ = value; }
   void PrintRegisters();
   void PrintStack();
 
@@ -211,6 +221,7 @@
   struct PreservedRegisters {
     uintx_t xregs[kNumberOfCpuRegisters];
     double fregs[kNumberOfFpuRegisters];
+    uintx_t ssp;
   };
   void PrepareCall(PreservedRegisters* preserved);
   void ClobberVolatileRegisters();
@@ -255,6 +266,7 @@
   void InterpretAMO16(Instr instr);
   void InterpretAMO32(Instr instr);
   void InterpretAMO64(Instr instr);
+  void InterpretAMO128(Instr instr);
   template <typename type>
   void InterpretLR(Instr instr);
   template <typename type>
@@ -281,13 +293,30 @@
   void InterpretLOADORDERED(Instr instr);
   template <typename type>
   void InterpretSTOREORDERED(Instr instr);
+  template <typename type>
+  void InterpretAMOCAS(Instr instr);
   void InterpretLOADFP(Instr instr);
+  template <typename type>
+  void InterpretLOADV(Instr instr);
   void InterpretSTOREFP(Instr instr);
+  template <typename type>
+  void InterpretSTOREV(Instr instr);
   void InterpretFMADD(Instr instr);
   void InterpretFMSUB(Instr instr);
   void InterpretFNMADD(Instr instr);
   void InterpretFNMSUB(Instr instr);
   void InterpretOPFP(Instr instr);
+  void InterpretOPV(Instr instr);
+  void InterpretOPV_IVV(Instr instr);
+  void InterpretOPV_FVV(Instr instr);
+  void InterpretOPV_MVV(Instr instr);
+  void InterpretOPV_IVI(Instr instr);
+  void InterpretOPV_IVX(Instr instr);
+  template <typename sew_t>
+  void InterpretOPV_IVX(Instr instr);
+  void InterpretOPV_FVF(Instr instr);
+  void InterpretOPV_MVX(Instr instr);
+  void InterpretOPV_CFG(Instr instr);
   DART_NORETURN void IllegalInstruction(Instr instr);
   DART_NORETURN void IllegalInstruction(CInstr instr);
 
@@ -335,6 +364,17 @@
     fregs_[rd] = bit_cast<double>(bits64);
   }
 
+  template <typename T>
+  T* ref_vreg(VRegister vd) {
+    return reinterpret_cast<T*>(&vregs_[vd][0]);
+  }
+  LengthMultiplier vlmul() const {
+    return static_cast<LengthMultiplier>((vtype_ >> 0) & 7);
+  }
+  ElementWidth vsew() const {
+    return static_cast<ElementWidth>((vtype_ >> 3) & 7);
+  }
+
   // Known bad pc value to ensure that the simulator does not execute
   // without being properly setup.
   static constexpr uword kBadLR = -1;
@@ -357,8 +397,18 @@
   double fregs_[kNumberOfFpuRegisters];
   uint32_t fcsr_ = 0;
 
+  // Zicfissp state
+  bool ss_enabled_ = false;
+  uintx_t ssp_ = 0;
+
+  // V state
+  uint8_t vregs_[kNumberOfVectorRegisters][VLEN / 8];
+  uintx_t vl_;
+  uintx_t vtype_;
+
   // Simulator support.
   char* stack_;
+  char* shadow_stack_;
   uword stack_limit_;
   uword overflow_stack_limit_;
   uword stack_base_;
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 4e35e66..2b743c5 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -26,6 +26,7 @@
     kFullCore,  // Full snapshot of core libraries.
     kFullJIT,   // Full + JIT code
     kFullAOT,   // Full + AOT code
+    kModule,    // Module snapshot with code.
     kNone,      // gen_snapshot
     kInvalid
   };
@@ -65,7 +66,7 @@
            (kind == kFullAOT);
   }
   static bool IncludesCode(Kind kind) {
-    return (kind == kFullJIT) || (kind == kFullAOT);
+    return (kind == kFullJIT) || (kind == kFullAOT) || (kind == kModule);
   }
 
   static bool IncludesStringsInROData(Kind kind) {
diff --git a/runtime/vm/so_writer.cc b/runtime/vm/so_writer.cc
index baa2160..7a05808 100644
--- a/runtime/vm/so_writer.cc
+++ b/runtime/vm/so_writer.cc
@@ -10,6 +10,52 @@
 
 namespace dart {
 
+void SharedObjectWriter::WriteStream::WriteRelocatableValue(
+    intptr_t address,
+    const Relocation& reloc,
+    intptr_t reloc_index) {
+  intptr_t source_address = reloc.source_offset;
+  switch (reloc.source_label) {
+    case Relocation::kSelfRelative:
+      source_address += address;
+      break;
+    case Relocation::kSnapshotRelative:
+      // No change to source_address.
+      break;
+    default:
+      ASSERT(reloc.source_label > 0);
+      source_address += FindValueForLabel(reloc.source_label);
+  }
+  ASSERT(reloc.size_in_bytes <= kWordSize);
+  word to_write = reloc.target_offset - source_address;
+  switch (reloc.target_label) {
+    case Relocation::kSelfRelative:
+      to_write += address;
+      break;
+    case Relocation::kSnapshotRelative:
+      // No change to to_write.
+      break;
+    default: {
+      ASSERT(reloc.target_label > 0);
+      intptr_t value;
+      if (HasValueForLabel(reloc.target_label, &value)) {
+        to_write += value;
+      } else {
+        ASSERT_EQUAL(reloc.target_label, kBuildIdLabel);
+        ASSERT_EQUAL(reloc.target_offset, 0);
+        ASSERT_EQUAL(reloc.source_offset, 0);
+        ASSERT_EQUAL(reloc.size_in_bytes, compiler::target::kWordSize);
+        // TODO(dartbug.com/43516): Special case for snapshots with deferred
+        // sections that handles the build ID relocation in an
+        // InstructionsSection when there is no build ID.
+        to_write = Image::kNoRelocatedAddress;
+      }
+    }
+  }
+  ASSERT(Utils::IsInt(reloc.size_in_bytes * kBitsPerByte, to_write));
+  WriteBytes(reinterpret_cast<const uint8_t*>(&to_write), reloc.size_in_bytes);
+}
+
 void SharedObjectWriter::WriteStream::WriteBytesWithRelocations(
     const uint8_t* bytes,
     intptr_t size,
@@ -17,7 +63,8 @@
     const RelocationArray& relocations) {
   // Resolve relocations as we write.
   intptr_t current_pos = 0;
-  for (const auto& reloc : relocations) {
+  for (intptr_t i = 0; i < relocations.length(); i++) {
+    const auto& reloc = relocations[i];
     // We assume here that the relocations are sorted in increasing order,
     // with unique section offsets.
     const intptr_t preceding = reloc.section_offset - current_pos;
@@ -26,47 +73,7 @@
       current_pos += preceding;
     }
     ASSERT_EQUAL(current_pos, reloc.section_offset);
-    intptr_t source_address = reloc.source_offset;
-    switch (reloc.source_label) {
-      case Relocation::kSelfRelative:
-        source_address += start_address + current_pos;
-        break;
-      case Relocation::kSnapshotRelative:
-        // No change to source_address.
-        break;
-      default:
-        ASSERT(reloc.source_label > 0);
-        source_address += FindValueForLabel(reloc.source_label);
-    }
-    ASSERT(reloc.size_in_bytes <= kWordSize);
-    word to_write = reloc.target_offset - source_address;
-    switch (reloc.target_label) {
-      case Relocation::kSelfRelative:
-        to_write += start_address + current_pos;
-        break;
-      case Relocation::kSnapshotRelative:
-        // No change to to_write.
-        break;
-      default: {
-        ASSERT(reloc.target_label > 0);
-        intptr_t value;
-        if (HasValueForLabel(reloc.target_label, &value)) {
-          to_write += value;
-        } else {
-          ASSERT_EQUAL(reloc.target_label, kBuildIdLabel);
-          ASSERT_EQUAL(reloc.target_offset, 0);
-          ASSERT_EQUAL(reloc.source_offset, 0);
-          ASSERT_EQUAL(reloc.size_in_bytes, compiler::target::kWordSize);
-          // TODO(dartbug.com/43516): Special case for snapshots with deferred
-          // sections that handles the build ID relocation in an
-          // InstructionsSection when there is no build ID.
-          to_write = Image::kNoRelocatedAddress;
-        }
-      }
-    }
-    ASSERT(Utils::IsInt(reloc.size_in_bytes * kBitsPerByte, to_write));
-    WriteBytes(reinterpret_cast<const uint8_t*>(&to_write),
-               reloc.size_in_bytes);
+    WriteRelocatableValue(start_address + current_pos, reloc, i);
     current_pos += reloc.size_in_bytes;
   }
   WriteBytes(bytes + current_pos, size - current_pos);
diff --git a/runtime/vm/so_writer.h b/runtime/vm/so_writer.h
index b2d9c43..b620e9e 100644
--- a/runtime/vm/so_writer.h
+++ b/runtime/vm/so_writer.h
@@ -28,6 +28,8 @@
     // Separately compiled debugging information that should not include
     // most segment contents.
     DebugInfo,
+    // A relocatable object file.
+    Object,
   };
 
   enum class Output {
@@ -55,6 +57,7 @@
 
   Zone* zone() const { return zone_; }
   Dwarf* dwarf() { return dwarf_; }
+  SharedObjectWriter::Type type() const { return type_; }
 
   // Stores the information needed to appropriately generate a
   // relocation from the target to the source at the given section offset.
@@ -125,7 +128,9 @@
   using SymbolDataArray = ZoneGrowableArray<SymbolData>;
 
   struct WriteStream : public AbstractWriteStream {
-    WriteStream() {}
+    explicit WriteStream(SharedObjectWriter::Type type) : type_(type) {}
+
+    SharedObjectWriter::Type type() const { return type_; }
 
     void WriteBytesWithRelocations(const uint8_t* bytes,
                                    intptr_t size,
@@ -142,7 +147,13 @@
       return value;
     }
 
+   protected:
+    virtual void WriteRelocatableValue(intptr_t address,
+                                       const Relocation& reloc,
+                                       intptr_t reloc_index);
+
    private:
+    const SharedObjectWriter::Type type_;
     DISALLOW_COPY_AND_ASSIGN(WriteStream);
   };
 
@@ -150,7 +161,7 @@
    public:
     DelegatingWriteStream(BaseWriteStream* stream,
                           const SharedObjectWriter& writer)
-        : WriteStream(),
+        : WriteStream(writer.type()),
           stream_(ASSERT_NOTNULL(stream)),
           start_(stream->Position()),
           page_size_(writer.page_size()) {
@@ -184,9 +195,17 @@
 
   // Must be the same value as the values returned by ImageWriter::SectionLabel
   // for the appropriate section and vm values.
-  static constexpr intptr_t kVmBssLabel = 5;
-  static constexpr intptr_t kIsolateBssLabel = 6;
-  static constexpr intptr_t kBuildIdLabel = 7;
+  enum ReservedLabels : intptr_t {
+    kVmInstructionsLabel = 1,
+    kIsolateInstructionsLabel = 2,
+    kVmDataLabel = 3,
+    kIsolateDataLabel = 4,
+    kVmBssLabel = 5,
+    kIsolateBssLabel = 6,
+    kBuildIdLabel = 7,
+    kMachOEhFrameLabel = 8,
+    kLastReservedLabel = kMachOEhFrameLabel,
+  };
 
   virtual void AddText(const char* name,
                        intptr_t label,
diff --git a/runtime/vm/source_report.cc b/runtime/vm/source_report.cc
index 3824ff6..9474696 100644
--- a/runtime/vm/source_report.cc
+++ b/runtime/vm/source_report.cc
@@ -341,7 +341,7 @@
   const Script& script = Script::Handle(zone(), function.script());
 
   bool const_constructor_hit = false;
-  if (function.IsConstructor() && function.is_const()) {
+  if (function.IsFunction() && function.is_const()) {
     for (TokenPosition hit :
          script_table_entries_[script_index]->const_constructor_hits) {
       if (hit == begin_pos) {
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index 330a1aa..4a81200 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -1653,6 +1653,131 @@
       buffer);
 }
 
+ISOLATE_UNIT_TEST_CASE(SourceReport_BranchCoverage_finallyEdgeCases) {
+  // Regression test for https://github.com/dart-lang/tools/issues/2241
+  // The cases covered in this test are the same as those listed in
+  // StreamingFlowGraphBuilder::BuildTryFinally.
+  const int kBufferSize = 1024;
+  char buffer[kBufferSize];
+  const char* kScript = R"(
+int viaReturn() {
+  try {
+    return 6 * 7;
+  } finally {
+  }
+}
+
+void viaBreak() {
+  for (int i = 0; i < 10; ++i) {
+    try {
+      break;
+    } finally {
+    }
+  }
+}
+
+void viaContinue() {
+  for (int i = 0; i < 10; ++i) {
+    try {
+      continue;
+    } finally {
+    }
+  }
+}
+
+int viaSwitchContinue(int x) {
+  switch (x) {
+    case 123:
+      try {
+        continue otherCase;
+      } finally {
+      }
+    otherCase:
+    case 456:
+      return 789;
+  }
+  return 0;
+}
+
+void viaOpenBody() {
+  try {
+  } finally {
+  }
+}
+
+void viaThrow() {
+  try {
+    throw 123;
+  } catch (e) {
+  } finally {
+  }
+}
+
+main() {
+  viaReturn();
+  viaBreak();
+  viaContinue();
+  viaSwitchContinue(123);
+  viaOpenBody();
+  viaThrow();
+}
+)";
+
+  Library& lib = Library::Handle();
+  const bool old_branch_coverage = IsolateGroup::Current()->branch_coverage();
+  IsolateGroup::Current()->set_branch_coverage(true);
+  lib ^= ExecuteScript(kScript);
+  IsolateGroup::Current()->set_branch_coverage(old_branch_coverage);
+  ASSERT(!lib.IsNull());
+  const Script& script =
+      Script::Handle(lib.LookupScript(String::Handle(String::New("test-lib"))));
+
+  SourceReport report(SourceReport::kBranchCoverage,
+                      SourceReport::kForceCompile);
+  JSONStream js;
+  report.PrintJSON(&js, script);
+  const char* json_str = js.ToCString();
+  ASSERT(strlen(json_str) < kBufferSize);
+  ElideJSONSubstring("classes", json_str, buffer);
+  ElideJSONSubstring("libraries", buffer, buffer);
+  EXPECT_STREQ(
+      "{\"type\":\"SourceReport\",\"ranges\":["
+
+      // viaReturn's finally is hit.
+      "{\"scriptIndex\":0,\"startPos\":1,\"endPos\":63,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[1,25,57],\"misses\":[]}},"
+
+      // viaBreak's finally is hit.
+      "{\"scriptIndex\":0,\"startPos\":66,\"endPos\":166,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[66,115,125,154],\"misses\":[]}},"
+
+      // viaContinue's finally is hit.
+      "{\"scriptIndex\":0,\"startPos\":169,\"endPos\":275,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[169,221,231,263],\"misses\":[]}},"
+
+      // viaSwitchContinue's finally is hit.
+      "{\"scriptIndex\":0,\"startPos\":278,\"endPos\":467,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[278,328,348,394,408],\"misses\":[]}},"
+
+      // viaOpenBody's finally is hit.
+      "{\"scriptIndex\":0,\"startPos\":470,\"endPos\":517,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[470,497,511],\"misses\":[]}},"
+
+      // viaThrow's finally is hit.
+      "{\"scriptIndex\":0,\"startPos\":520,\"endPos\":595,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[520,544,575,589],\"misses\":[]}},"
+
+      // Main is hit.
+      "{\"scriptIndex\":0,\"startPos\":598,\"endPos\":710,\"compiled\":true,"
+      "\"branchCoverage\":{\"hits\":[598],\"misses\":[]}}],"
+
+      // Only one script in the script table.
+      "\"scripts\":[{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\""
+      "uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"}]}",
+
+      buffer);
+}
+
 #endif  // !PRODUCT
 
 }  // namespace dart
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index 6c699b7..4d98281 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -355,7 +355,7 @@
       // will handle successful completion. This function is not yet executing
       // so we have to use artificial marker offset (1).
 #if defined(DART_DYNAMIC_MODULES)
-      if (function_.HasBytecode()) {
+      if (function_.IsInterpreted()) {
         bytecode_ = function_.GetBytecode();
         code_ = Code::null();
         pc_offset = StackTraceUtils::kFutureListenerPcOffset;
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 9f78afa..cd3c4de 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -74,7 +74,11 @@
   V(DartScheme, "dart:")                                                       \
   V(DartSchemePrivate, "dart:_")                                               \
   V(DartTypedData, "dart:typed_data")                                          \
+  V(DartVM, "dart:_vm")                                                        \
   V(DartVMProduct, "dart.vm.product")                                          \
+  V(DartVMASAN, "dart.vm.asan")                                                \
+  V(DartVMMSAN, "dart.vm.msan")                                                \
+  V(DartVMTSAN, "dart.vm.tsan")                                                \
   V(DartVMService, "dart:_vmservice")                                          \
   V(DebugProcedureName, ":Eval")                                               \
   V(Default, "Default")                                                        \
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index bafc5c9..dde8b3f 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -77,17 +77,12 @@
       active_exception_(Object::null()),
       active_stacktrace_(Object::null()),
       global_object_pool_(ObjectPool::null()),
-      resume_pc_(0),
-      execution_state_(kThreadInNative),
-      safepoint_state_(0),
-      api_top_scope_(nullptr),
       double_truncate_round_supported_(
           TargetCPUFeatures::double_truncate_round_supported() ? 1 : 0),
       random_(),
       tsan_utils_(DO_IF_TSAN(new TsanUtils()) DO_IF_NOT_TSAN(nullptr)),
       current_tag_(UserTag::null()),
       default_tag_(UserTag::null()),
-      task_kind_(kUnknownTask),
 #if defined(SUPPORT_TIMELINE)
       dart_stream_(ASSERT_NOTNULL(Timeline::GetDartStream())),
 #else
@@ -99,23 +94,13 @@
       service_extension_stream_(nullptr),
 #endif
       thread_lock_(),
-      api_reusable_scope_(nullptr),
-      no_callback_scope_depth_(0),
-#if defined(DEBUG)
-      no_safepoint_scope_depth_(0),
-#endif
       reusable_handles_(),
-      stack_overflow_count_(0),
-      hierarchy_info_(nullptr),
-      type_usage_info_(nullptr),
       sticky_error_(Error::null()),
+      thread_locals_(GrowableObjectArray::null()),
       REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS)
           REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT)
-#if defined(USING_SAFE_STACK)
-              saved_safestack_limit_(0),
-#endif
 #if !defined(PRODUCT) || defined(FORCE_INCLUDE_SAMPLING_HEAP_PROFILER)
-      next_(nullptr),
+              next_(nullptr),
       heap_sampler_(this) {
 #else
               next_(nullptr) {
@@ -283,6 +268,10 @@
   default_tag_ = tag.ptr();
 }
 
+void Thread::set_thread_locals(const GrowableObjectArray& thread_locals) {
+  thread_locals_ = thread_locals.ptr();
+}
+
 ErrorPtr Thread::StealStickyError() {
   NoSafepointScope no_safepoint;
   ErrorPtr return_value = sticky_error_;
@@ -373,6 +362,7 @@
 
   ASSERT(default_tag_ == UserTag::null());
   ASSERT(current_tag_ == UserTag::null());
+  ASSERT(thread_locals_ == GrowableObjectArray::null());
 
   // Avoid running these asserts for `vm-isolate`.
   if (active_stacktrace_.untag() != 0) {
@@ -661,7 +651,7 @@
   thread->set_os_thread(os_thread);
   os_thread->set_thread(thread);
   Thread::SetCurrent(thread);
-  NOT_IN_PRODUCT(os_thread->EnableThreadInterrupts());
+  os_thread->EnableThreadInterrupts();
 
 #if !defined(PRODUCT) || defined(FORCE_INCLUDE_SAMPLING_HEAP_PROFILER)
   thread->heap_sampler().Initialize();
@@ -677,7 +667,7 @@
 
   OSThread* os_thread = thread->os_thread();
   ASSERT(os_thread != nullptr);
-  NOT_IN_PRODUCT(os_thread->DisableThreadInterrupts());
+  os_thread->DisableThreadInterrupts();
   os_thread->set_thread(nullptr);
   OSThread::SetCurrent(os_thread);
   thread->set_os_thread(nullptr);
@@ -784,6 +774,7 @@
   thread->ResetStateLocked();
   thread->current_tag_ = UserTag::null();
   thread->default_tag_ = UserTag::null();
+  thread->thread_locals_ = GrowableObjectArray::null();
 
   thread->AssertEmptyThreadInvariants();
   thread_registry->ReturnThreadLocked(thread);
@@ -866,13 +857,6 @@
     }
     heap()->CheckFinalizeMarking(this);
 
-#if !defined(PRODUCT)
-    // TODO(dartbug.com/60508): Allow profiling of isolate-group-shared code.
-    if (isolate() != nullptr && isolate()->TakeHasCompletedBlocks()) {
-      Profiler::ProcessCompletedBlocks(isolate());
-    }
-#endif  // !defined(PRODUCT)
-
 #if !defined(PRODUCT) || defined(FORCE_INCLUDE_SAMPLING_HEAP_PROFILER)
     HeapProfileSampler& sampler = heap_sampler();
     if (sampler.ShouldSetThreadSamplingInterval()) {
@@ -1167,6 +1151,7 @@
 
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&current_tag_));
   visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&default_tag_));
+  visitor->VisitPointer(reinterpret_cast<ObjectPtr*>(&thread_locals_));
 }
 
 class RestoreWriteBarrierInvariantVisitor : public ObjectPointerVisitor {
@@ -1719,7 +1704,7 @@
   });
 }
 
-#if !defined(PRODUCT)
+#if defined(DART_INCLUDE_PROFILER)
 DisableThreadInterruptsScope::DisableThreadInterruptsScope(Thread* thread)
     : StackResource(thread) {
   if (thread != nullptr) {
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 888d69a..2e25f3a 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -425,9 +425,9 @@
   void SetStackLimit(uword value);
   void ClearStackLimit();
 
-  // Access to the current stack limit for generated code. Either the true OS
-  // thread's stack limit minus some headroom, or a special value to trigger
-  // interrupts.
+  // The stack limit used by stack overflow checks in generated code. Either the
+  // true OS thread's stack limit minus some headroom, or a special value to
+  // trigger interrupts.
   uword stack_limit_address() const {
     return reinterpret_cast<uword>(&stack_limit_);
   }
@@ -435,19 +435,27 @@
     return OFFSET_OF(Thread, stack_limit_);
   }
 
-  // The true stack limit for this OS thread.
+  // The true stack limit for this OS thread minus some headroom. Used on ARM64
+  // to keep CSP/R31 signal-handler safe while Dart uses R15 as its stack
+  // pointer.
   static intptr_t saved_stack_limit_offset() {
     return OFFSET_OF(Thread, saved_stack_limit_);
   }
   uword saved_stack_limit() const { return saved_stack_limit_; }
 
 #if defined(USING_SAFE_STACK)
-  uword saved_safestack_limit() const { return saved_safestack_limit_; }
-  void set_saved_safestack_limit(uword limit) {
-    saved_safestack_limit_ = limit;
-  }
+  // The SafeStack pointer during the top-most DartEntry. Needs to be restored
+  // on Dart throw like longjmp would.
+  uword saved_safestack() const { return saved_safestack_; }
+  void set_saved_safestack(uword ssp) { saved_safestack_ = ssp; }
 #endif
+
+  // The ShadowCallStack pointer during the top-most entry frame. Needs to be
+  // restored on Dart throw like longjmp would.
   uword saved_shadow_call_stack() const { return saved_shadow_call_stack_; }
+  void set_saved_shadow_call_stack(uword ssp) {
+    saved_shadow_call_stack_ = ssp;
+  }
   static uword saved_shadow_call_stack_offset() {
     return OFFSET_OF(Thread, saved_shadow_call_stack_);
   }
@@ -476,7 +484,7 @@
     return OFFSET_OF(Thread, stack_overflow_flags_);
   }
 
-  int32_t IncrementAndGetStackOverflowCount() {
+  uint32_t IncrementAndGetStackOverflowCount() {
     return ++stack_overflow_count_;
   }
 
@@ -1383,6 +1391,9 @@
 
   static void VisitMutators(MutatorThreadVisitor* visitor);
 
+  GrowableObjectArrayPtr thread_locals() const { return thread_locals_; }
+  void set_thread_locals(const GrowableObjectArray& thread_locals);
+
  private:
   template <class T>
   T* AllocateReusableHandle();
@@ -1458,7 +1469,7 @@
   ObjectPtr active_stacktrace_;
 
   ObjectPoolPtr global_object_pool_;
-  uword resume_pc_;
+  uword resume_pc_ = 0;
   uword saved_shadow_call_stack_ = 0;
 
   /*
@@ -1474,7 +1485,7 @@
    * to be in [kThreadInNative] and still not be at-safepoint (e.g. due to a
    * pending Dart_TypedDataAcquire() that increases no-callback-scope)
    */
-  uword execution_state_;
+  uword execution_state_ = kThreadInNative;
 
   /*
    * Stores
@@ -1506,14 +1517,14 @@
    *     entering a reload safepoint
    *     [NoReloadScopeField]
    */
-  std::atomic<uword> safepoint_state_;
+  std::atomic<uword> safepoint_state_ = 0;
   uword exit_through_ffi_ = 0;
 
 #define DECLARE_MEMBERS(returntype, name, ...) uword name##_entry_point_;
   LEAF_RUNTIME_ENTRY_LIST(DECLARE_MEMBERS)
 #undef DECLARE_MEMBERS
 
-  ApiLocalScope* api_top_scope_;
+  ApiLocalScope* api_top_scope_ = nullptr;
   uint8_t double_truncate_round_supported_;
   // Memory locations dedicated for passing unboxed int64 and double
   // values from generated code to runtime.
@@ -1530,6 +1541,8 @@
   uword user_tag_ = 0;
   UserTagPtr current_tag_;
   UserTagPtr default_tag_;
+  TimelineStream* const dart_stream_;
+  StreamInfo* const service_extension_stream_;
 
   // ---- End accessed from generated code. ----
 
@@ -1539,22 +1552,20 @@
   // DART_PRECOMPILED_RUNTIME.
 
   uword true_end_ = 0;
-  std::atomic<TaskKind> task_kind_;
-  TimelineStream* const dart_stream_;
-  StreamInfo* const service_extension_stream_;
   mutable Monitor thread_lock_;
-  ApiLocalScope* api_reusable_scope_;
-  int32_t no_callback_scope_depth_;
+  ApiLocalScope* api_reusable_scope_ = nullptr;
+  std::atomic<TaskKind> task_kind_ = kUnknownTask;
+  int32_t no_callback_scope_depth_ = 0;
   int32_t force_growth_scope_depth_ = 0;
-  intptr_t no_reload_scope_depth_ = 0;
-  intptr_t allow_reload_scope_depth_ = 0;
-  intptr_t stopped_mutators_scope_depth_ = 0;
+  int32_t no_reload_scope_depth_ = 0;
+  int32_t allow_reload_scope_depth_ = 0;
+  int32_t stopped_mutators_scope_depth_ = 0;
 #if defined(DEBUG)
-  int32_t no_safepoint_scope_depth_;
+  int32_t no_safepoint_scope_depth_ = 0;
 #endif
-  VMHandles reusable_handles_;
-  int32_t stack_overflow_count_;
+  uint32_t stack_overflow_count_ = 0;
   uint32_t runtime_call_count_ = 0;
+  VMHandles reusable_handles_;
 
   // Deoptimization of stack frames.
   RuntimeCallDeoptAbility runtime_call_deopt_ability_ =
@@ -1563,8 +1574,8 @@
 
   // Compiler state:
   CompilerState* compiler_state_ = nullptr;
-  HierarchyInfo* hierarchy_info_;
-  TypeUsageInfo* type_usage_info_;
+  HierarchyInfo* hierarchy_info_ = nullptr;
+  TypeUsageInfo* type_usage_info_ = nullptr;
   NoActiveIsolateScope* no_active_isolate_scope_ = nullptr;
 
   CompilerTimings* compiler_timings_ = nullptr;
@@ -1576,6 +1587,8 @@
     return shared_field_table_values_;
   }
 
+  GrowableObjectArrayPtr thread_locals_ = nullptr;
+
 // Reusable handles support.
 #define REUSABLE_HANDLE_FIELDS(object) object* object##_handle_;
   REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_FIELDS)
@@ -1629,7 +1642,7 @@
   }
 
 #if defined(USING_SAFE_STACK)
-  uword saved_safestack_limit_;
+  uword saved_safestack_ = 0;
 #endif
 
   Thread* next_;  // Used to chain the thread structures in an isolate.
@@ -1777,7 +1790,7 @@
 void WindowsThreadCleanUp();
 #endif
 
-#if !defined(PRODUCT)
+#if defined(DART_INCLUDE_PROFILER)
 // Disable thread interrupts.
 class DisableThreadInterruptsScope : public StackResource {
  public:
@@ -1791,7 +1804,7 @@
       : StackResource(thread) {}
   ~DisableThreadInterruptsScope() {}
 };
-#endif  // !defined(PRODUCT)
+#endif  // defined(DART_INCLUDE_PROFILER)
 
 // Within a NoSafepointScope, the thread must not reach any safepoint. Used
 // around code that manipulates raw object pointers directly without handles.
diff --git a/runtime/vm/thread_interrupter_fuchsia.cc b/runtime/vm/thread_interrupter_fuchsia.cc
index 1049e53..f9be836 100644
--- a/runtime/vm/thread_interrupter_fuchsia.cc
+++ b/runtime/vm/thread_interrupter_fuchsia.cc
@@ -92,10 +92,10 @@
     state->lr = static_cast<uintptr_t>(regs.lr);
 #elif defined(TARGET_ARCH_RISCV64)
     state->pc = static_cast<uintptr_t>(regs.pc);
-    state->fp = static_cast<uintptr_t>(regs.r[FPREG]);
-    state->csp = static_cast<uintptr_t>(regs.r[SPREG]);
-    state->dsp = static_cast<uintptr_t>(regs.r[SPREG]);
-    state->lr = static_cast<uintptr_t>(regs.r[LINK_REGISTER]);
+    state->fp = static_cast<uintptr_t>(regs.s0);
+    state->csp = static_cast<uintptr_t>(regs.sp);
+    state->dsp = static_cast<uintptr_t>(regs.sp);
+    state->lr = static_cast<uintptr_t>(regs.ra);
 #else
 #error "Unsupported architecture"
 #endif
diff --git a/runtime/vm/virtual_memory_posix.cc b/runtime/vm/virtual_memory_posix.cc
index b47778d..f93abed 100644
--- a/runtime/vm/virtual_memory_posix.cc
+++ b/runtime/vm/virtual_memory_posix.cc
@@ -56,10 +56,6 @@
 #undef MAP_FAILED
 #define MAP_FAILED reinterpret_cast<void*>(-1)
 
-#if defined(DART_HOST_OS_IOS)
-#define LARGE_RESERVATIONS_MAY_FAIL
-#endif
-
 DECLARE_FLAG(bool, write_protect_code);
 
 #if defined(DART_TARGET_OS_LINUX)
@@ -155,30 +151,6 @@
   return page_size;
 }
 
-#if defined(DART_COMPRESSED_POINTERS) && defined(LARGE_RESERVATIONS_MAY_FAIL)
-// Truncate to the largest subregion in [region] that doesn't cross an
-// [alignment] boundary.
-static MemoryRegion ClipToAlignedRegion(MemoryRegion region, size_t alignment) {
-  uword base = region.start();
-  uword aligned_base = Utils::RoundUp(base, alignment);
-  uword size_below =
-      region.end() >= aligned_base ? aligned_base - base : region.size();
-  uword size_above =
-      region.end() >= aligned_base ? region.end() - aligned_base : 0;
-  ASSERT(size_below + size_above == region.size());
-  if (size_below >= size_above) {
-    Unmap(aligned_base, aligned_base + size_above);
-    return MemoryRegion(reinterpret_cast<void*>(base), size_below);
-  }
-  Unmap(base, base + size_below);
-  if (size_above > alignment) {
-    Unmap(aligned_base + alignment, aligned_base + size_above);
-    size_above = alignment;
-  }
-  return MemoryRegion(reinterpret_cast<void*>(aligned_base), size_above);
-}
-#endif  // LARGE_RESERVATIONS_MAY_FAIL
-
 #if defined(DART_ENABLE_RX_WORKAROUNDS)
 // The function NOTIFY_DEBUGGER_ABOUT_RX_PAGES is a hook point for the debugger.
 //
@@ -592,27 +564,7 @@
 
 #if defined(DART_COMPRESSED_POINTERS)
   ASSERT(compressed_heap_ == nullptr);
-#if defined(LARGE_RESERVATIONS_MAY_FAIL)
-  // Try to reserve a region for the compressed heap by requesting decreasing
-  // powers-of-two until one succeeds, and use the largest subregion that does
-  // not cross a 4GB boundary. The subregion itself is not necessarily
-  // 4GB-aligned.
-  for (size_t allocated_size = kCompressedHeapSize + kCompressedHeapAlignment;
-       allocated_size >= kCompressedPageSize; allocated_size >>= 1) {
-    void* address = GenericMapAligned(
-        nullptr, PROT_NONE, allocated_size, kCompressedPageSize,
-        allocated_size + kCompressedPageSize,
-        MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE);
-    if (address == nullptr) continue;
-
-    MemoryRegion region(address, allocated_size);
-    region = ClipToAlignedRegion(region, kCompressedHeapAlignment);
-    compressed_heap_ = new VirtualMemory(region, region);
-    break;
-  }
-#else
   compressed_heap_ = Reserve(kCompressedHeapSize, kCompressedHeapAlignment);
-#endif
   if (compressed_heap_ == nullptr) {
     int error = errno;
     const int kBufferSize = 1024;
@@ -673,25 +625,6 @@
     MemoryRegion region =
         VirtualMemoryCompressedHeap::Allocate(size, alignment);
     if (region.pointer() == nullptr) {
-#if defined(LARGE_RESERVATIONS_MAY_FAIL)
-      // Try a fresh allocation and hope it ends up in the right region. On
-      // macOS/iOS, this works surprisingly often.
-      void* address =
-          GenericMapAligned(nullptr, PROT_READ | PROT_WRITE, size, alignment,
-                            size + alignment, MAP_PRIVATE | MAP_ANONYMOUS);
-      if (address != nullptr) {
-        uword ok_start = Utils::RoundDown(compressed_heap_->start(),
-                                          kCompressedHeapAlignment);
-        uword ok_end = ok_start + kCompressedHeapSize;
-        uword start = reinterpret_cast<uword>(address);
-        uword end = start + size;
-        if ((start >= ok_start) && (end <= ok_end)) {
-          MemoryRegion region(address, size);
-          return new VirtualMemory(region, region);
-        }
-        munmap(address, size);
-      }
-#endif
       return nullptr;
     }
     Commit(region.pointer(), region.size());
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index 56a9942..f3b980a 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -184,6 +184,8 @@
   "metrics.h",
   "microtask_mirror_queues.cc",
   "microtask_mirror_queues.h",
+  "module_snapshot.cc",
+  "module_snapshot.h",
   "native_arguments.h",
   "native_entry.cc",
   "native_entry.h",
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 67d8ba5..362ae8c 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -229,6 +229,7 @@
   "mirrors",
   "svg",
   "typed_data",
+  "_vm",
   "_wasm",
   "web_audio",
   "web_gl",
@@ -373,6 +374,46 @@
   ]
 }
 
+copy_sanitizer_deps = []
+
+# If the default toolchain is already using a sanitizer, the sanitizer variant
+# toolchains will try to use multiple sanitizers at the same time, which
+# doesn't work. If we're not on Linux, the sanitizers are not statically linked
+# and not useable outside our tree. If we're are embedded in another GN
+# buildroot, such as Flutter, the sanitizer variant toolchains might not be
+# defined.
+if (!using_sanitizer && current_os == "linux" &&
+    get_path_info(".", "abspath") == "//sdk/") {
+  sanitizers = []
+  if (current_cpu == "x64" || current_cpu == "arm64") {
+    sanitizers += [
+      "asan",
+      "msan",
+      "tsan",
+    ]
+  } else if (current_cpu == "riscv64") {
+    # Fuchsia Clang is missing the riscv64 MSAN runtime.
+    sanitizers += [
+      "asan",
+      "tsan",
+    ]
+  }
+
+  foreach(sanitizer, sanitizers) {
+    copy("copy_dart_aotruntime_$sanitizer") {
+      visibility = [ ":group_dart2native" ]
+      deps = [ "../runtime/bin:dartaotruntime_product(${current_toolchain}_${sanitizer})" ]
+      src_dir = get_label_info(
+              "../runtime/bin:dartaotruntime_product(${current_toolchain}_${sanitizer})",
+              "root_out_dir")
+      sources =
+          [ "$src_dir/${dart_aotruntime_stripped_binary}${executable_suffix}" ]
+      outputs = [ "$root_out_dir/$dart_sdk_output/bin/dartaotruntime_${sanitizer}${executable_suffix}" ]
+    }
+    copy_sanitizer_deps += [ ":copy_dart_aotruntime_$sanitizer" ]
+  }
+}
+
 group("copy_gen_snapshot") {
   visibility = [ ":group_dart2native" ]
   public_deps = [ ":copy_gen_snapshot_exe" ]
@@ -418,11 +459,11 @@
 
 group("group_dart2native") {
   deps = [
-    ":copy_dart_aotruntime",
-    ":copy_gen_kernel_snapshot",
-    ":copy_gen_snapshot",
-    ":copy_vm_platform_product",
-  ]
+           ":copy_dart_aotruntime",
+           ":copy_gen_kernel_snapshot",
+           ":copy_gen_snapshot",
+           ":copy_vm_platform_product",
+         ] + copy_sanitizer_deps
 }
 
 # A template for copying the things in _platform_sdk_scripts and
diff --git a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
index eb0388e..79b18d2 100644
--- a/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
+++ b/sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart
@@ -193,6 +193,11 @@
     maturity: Maturity.WEB_STABLE,
     platforms: DART2JS_PLATFORM,
   ),
+  '_vm': const LibraryInfo(
+    '_vm/_vm.dart',
+    categories: 'Server',
+    platforms: VM_PLATFORM,
+  ),
   'vmservice_io': const LibraryInfo(
     '_internal/vm/bin/vmservice_io.dart',
     categories: '',
diff --git a/sdk/lib/_internal/vm/lib/core_patch.dart b/sdk/lib/_internal/vm/lib/core_patch.dart
index c9c2365..7e266ac 100644
--- a/sdk/lib/_internal/vm/lib/core_patch.dart
+++ b/sdk/lib/_internal/vm/lib/core_patch.dart
@@ -59,6 +59,8 @@
 
 import "dart:typed_data" show Uint8List, Uint16List, Int32List;
 
+import 'dart:_vm' show FinalThreadLocal;
+
 /// These are the additional parts of this patch library:
 part "array.dart";
 part "double.dart";
diff --git a/sdk/lib/_internal/vm/lib/double.dart b/sdk/lib/_internal/vm/lib/double.dart
index 9a8ca17..7633e21 100644
--- a/sdk/lib/_internal/vm/lib/double.dart
+++ b/sdk/lib/_internal/vm/lib/double.dart
@@ -245,34 +245,26 @@
     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 = List.filled(CACHE_LENGTH, null);
-  static int _cacheEvictIndex = 0;
+  @pragma("vm:shared")
+  static final _cacheThreadLocal = FinalThreadLocal<_DoubleToStringCache>(
+    () => _DoubleToStringCache(),
+  );
 
   @pragma("vm:external-name", "Double_toString")
   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];
-      }
+    final cache = _cacheThreadLocal.value;
+    final cachedValue = cache.lookup(this);
+    if (cachedValue != null) {
+      return cachedValue;
     }
     // 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;
+    return cache.store(this, _toString());
   }
 
   String toStringAsFixed(int fractionDigits) {
@@ -407,3 +399,32 @@
     }
   }
 }
+
+class _DoubleToStringCache {
+  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.
+  final List list = List.filled(_CACHE_LENGTH, null);
+  int evictIndex = 0;
+
+  String? lookup(double v) {
+    // 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(list[i], v)) {
+        return list[i + 1];
+      }
+    }
+    return null;
+  }
+
+  String store(double v, String s) {
+    // Replace the least recently inserted entry.
+    list[evictIndex] = v;
+    list[evictIndex + 1] = s;
+    evictIndex = (evictIndex + 2) & _CACHE_MASK;
+    return s;
+  }
+}
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index ea2832a..6e8f7a6 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -10,6 +10,7 @@
 import "dart:_internal" show patch;
 
 import "dart:typed_data" show Uint32List;
+import "dart:_vm" show FinalThreadLocal;
 
 /// There are no parts of this patch library.
 
@@ -245,7 +246,10 @@
   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 = _Random._withState(_initialSeed());
+  @pragma('vm:shared')
+  static final _prng = FinalThreadLocal<_Random>(
+    () => _Random._withState(_initialSeed()),
+  );
 
   // Thomas Wang 64-bit mix.
   // http://www.concentric.net/~Ttwang/tech/inthash.htm
@@ -270,8 +274,8 @@
 
   static int _nextSeed() {
     // Trigger the PRNG once to change the internal state.
-    _prng._nextState();
-    return _prng._state & 0xFFFFFFFF;
+    _prng.value._nextState();
+    return _prng.value._state & 0xFFFFFFFF;
   }
 }
 
diff --git a/sdk/lib/_internal/wasm/lib/js_helper.dart b/sdk/lib/_internal/wasm/lib/js_helper.dart
index 3b47603..454566a 100644
--- a/sdk/lib/_internal/wasm/lib/js_helper.dart
+++ b/sdk/lib/_internal/wasm/lib/js_helper.dart
@@ -716,3 +716,6 @@
   arg18,
   arg19,
 ]);
+
+@pragma("wasm:intrinsic")
+external WasmExternRef get thisModule;
diff --git a/sdk/lib/_internal/wasm/lib/type.dart b/sdk/lib/_internal/wasm/lib/type.dart
index 2222c78..f6d62ce 100644
--- a/sdk/lib/_internal/wasm/lib/type.dart
+++ b/sdk/lib/_internal/wasm/lib/type.dart
@@ -1780,10 +1780,6 @@
 /// Checks that argument lists have expected number of arguments for the
 /// closure.
 ///
-/// If the type argument list ([typeArguments]) is empty but the closure has
-/// type parameters, updates [typeArguments] with the default bounds of the
-/// type parameters.
-///
 /// [namedArguments] is a list of `Symbol` and `Object?` pairs.
 @pragma("wasm:entry-point")
 bool _checkClosureShape(
diff --git a/sdk/lib/_vm/_vm.dart b/sdk/lib/_vm/_vm.dart
new file mode 100644
index 0000000..5ba32baa
--- /dev/null
+++ b/sdk/lib/_vm/_vm.dart
@@ -0,0 +1,141 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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._vm;
+
+import "dart:_internal" show unsafeCast;
+
+@pragma("vm:deeply-immutable")
+@pragma('vm:entry-point')
+final class ThreadLocal<T> {
+  /// Creates dart thread local variable.
+  ThreadLocal() : _id = _allocateId();
+
+  /// Returns the value of this thread-local variable or throws [StateError]
+  /// if it has no value.
+  T get value {
+    if (!_hasValue(_id)) {
+      throw StateError(
+        "Attempt to access variable that was not assigned a value.",
+      );
+    }
+    return unsafeCast<T>(_getValue(_id));
+  }
+
+  /// Sets the value of this variable. Overwrites old value if it was previously
+  /// set.
+  set value(T newValue) {
+    _setValue(_id, newValue);
+  }
+
+  /// Returns `true` if some value was assigned to this variable.
+  bool get hasValue => _hasValue(_id);
+
+  // Clears this variable of its assigned value.
+  void clearValue() {
+    _clearValue(_id);
+  }
+
+  @pragma("vm:external-name", "ScopedThreadLocal_allocateId")
+  external static int _allocateId();
+
+  @pragma("vm:external-name", "ScopedThreadLocal_hasValue")
+  external static bool _hasValue(int id);
+
+  @pragma("vm:external-name", "ScopedThreadLocal_getValue")
+  external static Object? _getValue(int id);
+
+  @pragma("vm:external-name", "ScopedThreadLocal_setValue")
+  external static void _setValue(int id, Object? value);
+
+  @pragma("vm:external-name", "ScopedThreadLocal_clearValue")
+  external static void _clearValue(int id);
+
+  final int _id;
+}
+
+@pragma("vm:deeply-immutable")
+@pragma('vm:entry-point')
+final class ScopedThreadLocal<T> {
+  /// Creates scoped thread-local variable with given [initializer] function.
+  ///
+  /// [initializer] must be trivially shareable.
+  ScopedThreadLocal([this._initializer]);
+
+  /// Execute [f] binding this [ScopedThreadLocal] to the given
+  /// [value] for the duration of the execution.
+  R runWith<R>(T new_value, R Function(T) f) {
+    bool had_value = variable.hasValue;
+    T? previous_value = had_value ? variable.value : null;
+    variable.value = new_value;
+    R result = f(new_value);
+    if (had_value) {
+      variable.value = previous_value as T;
+    } else {
+      variable.clearValue();
+    }
+    return result;
+  }
+
+  /// Execute [f] initializing this [ScopedThreadLocal] using default initializer if needed.
+  /// Throws [StateError] if this [ScopedThreadLocal] does not have an initializer.
+  R runInitialized<R>(R Function(T) f) {
+    bool had_value = variable.hasValue;
+    T? previous_value = had_value ? variable.value : null;
+    if (!variable.hasValue) {
+      if (_initializer == null) {
+        throw StateError(
+          "No initializer was provided for this ScopedThreadLocal.",
+        );
+      }
+      variable.value = _initializer!();
+    }
+    R result = f(variable.value);
+    if (had_value) {
+      variable.value = previous_value as T;
+    } else {
+      variable.clearValue();
+    }
+    return result;
+  }
+
+  /// Returns the value specified by the closest enclosing invocation of
+  /// [runWith] or [runInititalized] or throws [StateError] if this
+  /// [ScopedThreadLocal] is not bound to a value.
+  T get value => variable.value;
+
+  /// Returns `true` if this [ScopedThreadLocal] is bound to a value.
+  bool get isBound => variable.hasValue;
+  final T Function()? _initializer;
+
+  final variable = ThreadLocal<T>();
+}
+
+@pragma("vm:deeply-immutable")
+@pragma('vm:entry-point')
+final class FinalThreadLocal<T> {
+  /// Creates thread local value with the given [initializer] function.
+  ///
+  /// The value can be assigned only once, remains assigned for the duration
+  /// of this dart thread lifetime.
+  ///
+  /// [initializer] must be trivially shareable.
+  FinalThreadLocal(this._initializer);
+
+  /// Returns the value bound to [FinalThreadLocal].
+  T get value {
+    if (!variable.hasValue) {
+      variable.value = _initializer();
+    }
+    return variable.value;
+  }
+
+  set value(_) {
+    throw StateError("Final value can not be updated");
+  }
+
+  final T Function() _initializer;
+
+  final variable = ThreadLocal<T>();
+}
diff --git a/sdk/lib/_vm/vm_sources.gni b/sdk/lib/_vm/vm_sources.gni
new file mode 100644
index 0000000..4bf07e5
--- /dev/null
+++ b/sdk/lib/_vm/vm_sources.gni
@@ -0,0 +1,6 @@
+# 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.
+
+# This file contains all sources for the dart:_vm library.
+vm_sdk_sources = [ "_vm.dart" ]
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart
index 7808477..06c928e 100644
--- a/sdk/lib/async/async.dart
+++ b/sdk/lib/async/async.dart
@@ -133,3 +133,7 @@
 part 'stream_transformers.dart';
 part 'timer.dart';
 part 'zone.dart';
+part 'zone_api.dart';
+part 'zone_delegate.dart';
+part 'zone_root.dart';
+part 'zone_specification.dart';
diff --git a/sdk/lib/async/async_sources.gni b/sdk/lib/async/async_sources.gni
index 7d1bfab..45b0055 100644
--- a/sdk/lib/async/async_sources.gni
+++ b/sdk/lib/async/async_sources.gni
@@ -21,4 +21,8 @@
   "stream_transformers.dart",
   "timer.dart",
   "zone.dart",
+  "zone_api.dart",
+  "zone_delegate.dart",
+  "zone_root.dart",
+  "zone_specification.dart",
 ]
diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
index e04b882d..f391ab7 100644
--- a/sdk/lib/async/zone.dart
+++ b/sdk/lib/async/zone.dart
@@ -4,600 +4,12 @@
 
 part of 'dart:async';
 
-typedef ZoneCallback<R> = R Function();
-typedef ZoneUnaryCallback<R, T> = R Function(T);
-typedef ZoneBinaryCallback<R, T1, T2> = R Function(T1, T2);
-
-/// The type of a custom [Zone.handleUncaughtError] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The [error] and [stackTrace] are the error and stack trace that
-/// was uncaught in [zone].
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-///
-/// If the uncaught error handler throws, the error will be passed
-/// to `parent.handleUncaughtError`. If the thrown object is [error],
-/// the throw is considered a re-throw and the original [stackTrace]
-/// is retained. This allows an asynchronous error to leave the error zone.
-typedef HandleUncaughtErrorHandler =
-    void Function(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      Object error,
-      StackTrace stackTrace,
-    );
-
-/// The type of a custom [Zone.run] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] is the function which was passed to the
-/// [Zone.run] of [zone].
-///
-/// The default behavior of [Zone.run] is
-/// to call [f] in the current zone, [zone].
-/// A custom handler can do things before, after or instead of
-/// calling [f].
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef RunHandler =
-    R Function<R>(Zone self, ZoneDelegate parent, Zone zone, R Function() f);
-
-/// The type of a custom [Zone.runUnary] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] and value [arg] are the function and argument
-/// which was passed to the [Zone.runUnary] of [zone].
-///
-/// The default behavior of [Zone.runUnary] is
-/// to call [f] with argument [arg] in the current zone, [zone].
-/// A custom handler can do things before, after or instead of
-/// calling [f].
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef RunUnaryHandler =
-    R Function<R, T>(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      R Function(T arg) f,
-      T arg,
-    );
-
-/// The type of a custom [Zone.runBinary] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] and values [arg1] and [arg2] are the function and arguments
-/// which was passed to the [Zone.runBinary] of [zone].
-///
-/// The default behavior of [Zone.runUnary] is
-/// to call [f] with arguments [arg1] and [arg2] in the current zone, [zone].
-/// A custom handler can do things before, after or instead of
-/// calling [f].
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef RunBinaryHandler =
-    R Function<R, T1, T2>(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      R Function(T1 arg1, T2 arg2) f,
-      T1 arg1,
-      T2 arg2,
-    );
-
-/// The type of a custom [Zone.registerCallback] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] is the function which was passed to the
-/// [Zone.registerCallback] of [zone].
-///
-/// The handler should return either the function [f]
-/// or another function replacing [f],
-/// typically by wrapping [f] in a function
-/// which does something extra before and after invoking [f]
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef RegisterCallbackHandler =
-    ZoneCallback<R> Function<R>(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      R Function() f,
-    );
-
-/// The type of a custom [Zone.registerUnaryCallback] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] is the function which was passed to the
-/// which was passed to the [Zone.registerUnaryCallback] of [zone].
-///
-/// The handler should return either the function [f]
-/// or another function replacing [f],
-/// typically by wrapping [f] in a function
-/// which does something extra before and after invoking [f]
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef RegisterUnaryCallbackHandler =
-    ZoneUnaryCallback<R, T> Function<R, T>(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      R Function(T arg) f,
-    );
-
-/// The type of a custom [Zone.registerBinaryCallback] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] is the function which was passed to the
-/// which was passed to the [Zone.registerBinaryCallback] of [zone].
-///
-/// The handler should return either the function [f]
-/// or another function replacing [f],
-/// typically by wrapping [f] in a function
-/// which does something extra before and after invoking [f]
-typedef RegisterBinaryCallbackHandler =
-    ZoneBinaryCallback<R, T1, T2> Function<R, T1, T2>(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      R Function(T1 arg1, T2 arg2) f,
-    );
-
-/// The type of a custom [Zone.errorCallback] implementation function.
-///
-/// The [error] and [stackTrace] are the error and stack trace
-/// passed to [Zone.errorCallback] of [zone].
-///
-/// The function will be called when a synchronous error becomes an
-/// asynchronous error, either by being caught, for example by a `Future.then`
-/// callback throwing, or when used to create an asynchronous error
-/// programmatically, for example using `Future.error` or `Completer.complete`.
-///
-/// If the function does not want to replace the error or stack trace,
-/// it should just return `parent.errorCallback(zone, error, stackTrace)`,
-/// giving the parent zone the chance to intercept.
-///
-/// If the function does want to replace the error and/or stack trace,
-/// say with `error2` and `stackTrace2`, it should still allow the
-/// parent zone to intercept those errors, for examples as:
-/// ```dart
-///   return parent.errorCallback(zone, error, stackTrace) ??
-///       AsyncError(error, stackTrace);
-/// ```
-///
-/// The function returns either `null` if the original error and stack trace
-/// is unchanged, avoiding any allocation in the most common case,
-/// or an [AsyncError] containing a replacement error and stack trace
-/// which will be used in place of the originals as the asynchronous error.
-///
-/// The [self] [Zone] is the zone the handler was registered on,
-/// the [parent] delegate forwards to the handlers of [self]'s parent zone,
-/// and [zone] is the current zone where the error was uncaught,
-/// which will have [self] as an ancestor zone.
-///
-/// The error callback handler **must not** throw.
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef ErrorCallbackHandler =
-    AsyncError? Function(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      Object error,
-      StackTrace? stackTrace,
-    );
-
-/// The type of a custom [Zone.scheduleMicrotask] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The function [f] is the function which was
-/// passed to [Zone.scheduleMicrotask] of [zone].
-///
-/// The custom handler can choose to replace the function [f]
-/// with one that does something before, after or instead of calling [f],
-/// and then call `parent.scheduleMicrotask(zone, replacement)`.
-/// or it can implement its own microtask scheduling queue, which typically
-/// still depends on `parent.scheduleMicrotask` to as a way to get started.
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef ScheduleMicrotaskHandler =
-    void Function(Zone self, ZoneDelegate parent, Zone zone, void Function() f);
-
-/// The type of a custom [Zone.createTimer] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The callback function [f] and [duration] are the ones which were
-/// passed to [Zone.createTimer] of [zone]
-/// (possibly through the [Timer] constructor).
-///
-/// The custom handler can choose to replace the function [f]
-/// with one that does something before, after or instead of calling [f],
-/// and then call `parent.createTimer(zone, replacement)`.
-/// or it can implement its own timer queue, which typically
-/// still depends on `parent.createTimer` to as a way to get started.
-///
-/// The function should return a [Timer] object which can be used
-/// to inspect and control the scheduled timer callback.
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef CreateTimerHandler =
-    Timer Function(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      Duration duration,
-      void Function() f,
-    );
-
-/// The type of a custom [Zone.createPeriodicTimer] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The callback function [f] and [period] are the ones which were
-/// passed to [Zone.createPeriodicTimer] of [zone]
-/// (possibly through the [Timer.periodic] constructor).
-///
-/// The custom handler can choose to replace the function [f]
-/// with one that does something before, after or instead of calling [f],
-/// and then call `parent.createTimer(zone, replacement)`.
-/// or it can implement its own timer queue, which typically
-/// still depends on `parent.createTimer` to as a way to get started.
-///
-/// The function should return a [Timer] object which can be used
-/// to inspect and control the scheduled timer callbacks.
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef CreatePeriodicTimerHandler =
-    Timer Function(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      Duration period,
-      void Function(Timer timer) f,
-    );
-
-/// The type of a custom [Zone.print] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The string [line] is the one which was passed to [Zone.print] of [zone],
-/// (possibly through the global [print] function).
-///
-/// The custom handler can intercept print operations and
-/// redirect them to other targets than the console.
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef PrintHandler =
-    void Function(Zone self, ZoneDelegate parent, Zone zone, String line);
-
-/// The type of a custom [Zone.fork] implementation function.
-///
-/// Receives the [Zone] that the handler was registered on as [self],
-/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
-/// and the current zone where the error was uncaught as [zone],
-/// which will have [self] as a parent zone.
-///
-/// The handler should create a new zone with [zone] as its
-/// immediate parent zone.
-///
-/// The [specification] and [zoneValues] are the ones which were
-/// passed to [Zone.fork] of [zone]. They specify the custom zone
-/// handlers and zone variables that the new zone should have.
-///
-/// The custom handler can change the specification or zone
-/// values before calling `parent.fork(zone, specification, zoneValues)`,
-/// but it has to call the [parent]'s [ZoneDelegate.fork] in order
-/// to create a valid [Zone] object.
-///
-/// The function must only access zone-related functionality through
-/// [self], [parent] or [zone].
-/// It should not depend on the current zone ([Zone.current]).
-typedef ForkHandler =
-    Zone Function(
-      Zone self,
-      ZoneDelegate parent,
-      Zone zone,
-      ZoneSpecification? specification,
-      Map<Object?, Object?>? zoneValues,
-    );
-
 class _ZoneFunction<T extends Function> {
   final _Zone zone;
   final T function;
   const _ZoneFunction(this.zone, this.function);
 }
 
-/// A parameter object with custom zone function handlers for [Zone.fork].
-///
-/// A zone specification is a parameter object passed to [Zone.fork]
-/// and any underlying [ForkHandler] custom implementations.
-/// The individual handlers, if set to a non-null value,
-/// will be the implementation of the corresponding [Zone] methods
-/// for a forked zone created using this zone specification.
-///
-/// Handlers have the same signature as the same-named methods on [Zone],
-/// but receive three additional arguments:
-///
-///   1. The zone the handlers are attached to (the "self" zone).
-///      This is the zone created by [Zone.fork] where the handler is
-///      passed as part of the zone delegation.
-///   2. A [ZoneDelegate] to the parent zone.
-///   3. The "current" zone at the time the request was made.
-///      The self zone is always a parent zone of the current zone.
-///
-/// Handlers can either stop propagating the request (by simply not calling the
-/// parent handler), or forward to the parent zone, potentially modifying the
-/// arguments on the way.
-abstract final class ZoneSpecification {
-  /// Creates a specification with the provided handlers.
-  ///
-  /// If the [handleUncaughtError] is provided, the new zone will be a new
-  /// "error zone" which will prevent errors from flowing into other
-  /// error zones (see [Zone.errorZone], [Zone.inSameErrorZone]).
-  const factory ZoneSpecification({
-    HandleUncaughtErrorHandler? handleUncaughtError,
-    RunHandler? run,
-    RunUnaryHandler? runUnary,
-    RunBinaryHandler? runBinary,
-    RegisterCallbackHandler? registerCallback,
-    RegisterUnaryCallbackHandler? registerUnaryCallback,
-    RegisterBinaryCallbackHandler? registerBinaryCallback,
-    ErrorCallbackHandler? errorCallback,
-    ScheduleMicrotaskHandler? scheduleMicrotask,
-    CreateTimerHandler? createTimer,
-    CreatePeriodicTimerHandler? createPeriodicTimer,
-    PrintHandler? print,
-    ForkHandler? fork,
-  }) = _ZoneSpecification;
-
-  /// Creates a specification from [other] and provided handlers.
-  ///
-  /// The created zone specification has the handlers of [other]
-  /// and any individually provided handlers.
-  /// If a handler is provided both through [other] and individually,
-  /// the individually provided handler overrides the one from [other].
-  factory ZoneSpecification.from(
-    ZoneSpecification other, {
-    HandleUncaughtErrorHandler? handleUncaughtError,
-    RunHandler? run,
-    RunUnaryHandler? runUnary,
-    RunBinaryHandler? runBinary,
-    RegisterCallbackHandler? registerCallback,
-    RegisterUnaryCallbackHandler? registerUnaryCallback,
-    RegisterBinaryCallbackHandler? registerBinaryCallback,
-    ErrorCallbackHandler? errorCallback,
-    ScheduleMicrotaskHandler? scheduleMicrotask,
-    CreateTimerHandler? createTimer,
-    CreatePeriodicTimerHandler? createPeriodicTimer,
-    PrintHandler? print,
-    ForkHandler? fork,
-  }) {
-    return ZoneSpecification(
-      handleUncaughtError: handleUncaughtError ?? other.handleUncaughtError,
-      run: run ?? other.run,
-      runUnary: runUnary ?? other.runUnary,
-      runBinary: runBinary ?? other.runBinary,
-      registerCallback: registerCallback ?? other.registerCallback,
-      registerUnaryCallback:
-          registerUnaryCallback ?? other.registerUnaryCallback,
-      registerBinaryCallback:
-          registerBinaryCallback ?? other.registerBinaryCallback,
-      errorCallback: errorCallback ?? other.errorCallback,
-      scheduleMicrotask: scheduleMicrotask ?? other.scheduleMicrotask,
-      createTimer: createTimer ?? other.createTimer,
-      createPeriodicTimer: createPeriodicTimer ?? other.createPeriodicTimer,
-      print: print ?? other.print,
-      fork: fork ?? other.fork,
-    );
-  }
-
-  /// A custom [Zone.handleUncaughtError] implementation for a new zone.
-  HandleUncaughtErrorHandler? get handleUncaughtError;
-
-  /// A custom [Zone.run] implementation for a new zone.
-  RunHandler? get run;
-
-  /// A custom [Zone.runUnary] implementation for a new zone.
-  RunUnaryHandler? get runUnary;
-
-  /// A custom [Zone.runBinary] implementation for a new zone.
-  RunBinaryHandler? get runBinary;
-
-  /// A custom [Zone.registerCallback] implementation for a new zone.
-  RegisterCallbackHandler? get registerCallback;
-
-  /// A custom [Zone.registerUnaryCallback] implementation for a new zone.
-  RegisterUnaryCallbackHandler? get registerUnaryCallback;
-
-  /// A custom [Zone.registerBinaryCallback] implementation for a new zone.
-  RegisterBinaryCallbackHandler? get registerBinaryCallback;
-
-  /// A custom [Zone.errorCallback] implementation for a new zone.
-  ErrorCallbackHandler? get errorCallback;
-
-  /// A custom [Zone.scheduleMicrotask] implementation for a new zone.
-  ScheduleMicrotaskHandler? get scheduleMicrotask;
-
-  /// A custom [Zone.createTimer] implementation for a new zone.
-  CreateTimerHandler? get createTimer;
-
-  /// A custom [Zone.createPeriodicTimer] implementation for a new zone.
-  CreatePeriodicTimerHandler? get createPeriodicTimer;
-
-  /// A custom [Zone.print] implementation for a new zone.
-  PrintHandler? get print;
-
-  /// A custom [Zone.handleUncaughtError] implementation for a new zone.
-  ForkHandler? get fork;
-}
-
-/// Internal [ZoneSpecification] class.
-///
-/// The implementation wants to rely on the fact that the getters cannot change
-/// dynamically. We thus require users to go through the redirecting
-/// [ZoneSpecification] constructor which instantiates this class.
-base class _ZoneSpecification implements ZoneSpecification {
-  const _ZoneSpecification({
-    this.handleUncaughtError,
-    this.run,
-    this.runUnary,
-    this.runBinary,
-    this.registerCallback,
-    this.registerUnaryCallback,
-    this.registerBinaryCallback,
-    this.errorCallback,
-    this.scheduleMicrotask,
-    this.createTimer,
-    this.createPeriodicTimer,
-    this.print,
-    this.fork,
-  });
-
-  final HandleUncaughtErrorHandler? handleUncaughtError;
-  final RunHandler? run;
-  final RunUnaryHandler? runUnary;
-  final RunBinaryHandler? runBinary;
-  final RegisterCallbackHandler? registerCallback;
-  final RegisterUnaryCallbackHandler? registerUnaryCallback;
-  final RegisterBinaryCallbackHandler? registerBinaryCallback;
-  final ErrorCallbackHandler? errorCallback;
-  final ScheduleMicrotaskHandler? scheduleMicrotask;
-  final CreateTimerHandler? createTimer;
-  final CreatePeriodicTimerHandler? createPeriodicTimer;
-  final PrintHandler? print;
-  final ForkHandler? fork;
-}
-
-/// An adapted view of the parent zone.
-///
-/// This class allows the implementation of a zone method to invoke methods on
-/// the parent zone while retaining knowledge of the originating zone.
-///
-/// Custom zones (created through [Zone.fork] or [runZoned]) can provide
-/// implementations of most methods of zones. This is similar to overriding
-/// methods on [Zone], except that this mechanism doesn't require subclassing.
-///
-/// A custom zone function (provided through a [ZoneSpecification]) typically
-/// records or wraps its parameters and then delegates the operation to its
-/// parent zone using the provided [ZoneDelegate].
-///
-/// While zones have access to their parent zone (through [Zone.parent]) it is
-/// recommended to call the methods on the provided parent delegate for two
-/// reasons:
-/// 1. the delegate methods take an additional `zone` argument which is the
-///   zone the action has been initiated in.
-/// 2. delegate calls are more efficient, since the implementation knows how
-///   to skip zones that would just delegate to their parents.
-abstract final class ZoneDelegate {
-  // Invoke the [HandleUncaughtErrorHandler] of the zone with a current zone.
-  void handleUncaughtError(Zone zone, Object error, StackTrace stackTrace);
-
-  // Invokes the [RunHandler] of the zone with a current zone.
-  R run<R>(Zone zone, R f());
-
-  // Invokes the [RunUnaryHandler] of the zone with a current zone.
-  R runUnary<R, T>(Zone zone, R f(T arg), T arg);
-
-  // Invokes the [RunBinaryHandler] of the zone with a current zone.
-  R runBinary<R, T1, T2>(Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2);
-
-  // Invokes the [RegisterCallbackHandler] of the zone with a current zone.
-  ZoneCallback<R> registerCallback<R>(Zone zone, R f());
-
-  // Invokes the [RegisterUnaryHandler] of the zone with a current zone.
-  ZoneUnaryCallback<R, T> registerUnaryCallback<R, T>(Zone zone, R f(T arg));
-
-  // Invokes the [RegisterBinaryHandler] of the zone with a current zone.
-  ZoneBinaryCallback<R, T1, T2> registerBinaryCallback<R, T1, T2>(
-    Zone zone,
-    R f(T1 arg1, T2 arg2),
-  );
-
-  // Invokes the [ErrorCallbackHandler] of the zone with a current zone.
-  AsyncError? errorCallback(Zone zone, Object error, StackTrace? stackTrace);
-
-  // Invokes the [ScheduleMicrotaskHandler] of the zone with a current zone.
-  void scheduleMicrotask(Zone zone, void f());
-
-  // Invokes the [CreateTimerHandler] of the zone with a current zone.
-  Timer createTimer(Zone zone, Duration duration, void f());
-
-  // Invokes the [CreatePeriodicTimerHandler] of the zone with a current zone.
-  Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer));
-
-  // Invokes the [PrintHandler] of the zone with a current zone.
-  void print(Zone zone, String line);
-
-  // Invokes the [ForkHandler] of the zone with a current zone.
-  Zone fork(Zone zone, ZoneSpecification? specification, Map? zoneValues);
-}
-
 /// A zone represents an environment that remains stable across asynchronous
 /// calls.
 ///
@@ -1024,114 +436,6 @@
   dynamic operator [](Object? key);
 }
 
-base class _ZoneDelegate implements ZoneDelegate {
-  final _Zone _delegationTarget;
-
-  _ZoneDelegate(this._delegationTarget);
-
-  void handleUncaughtError(Zone zone, Object error, StackTrace stackTrace) {
-    _delegationTarget._processUncaughtError(zone, error, stackTrace);
-  }
-
-  R run<R>(Zone zone, R f()) {
-    var implementation = _delegationTarget._run;
-    _Zone implZone = implementation.zone;
-    var handler = implementation.function as RunHandler;
-    return handler(implZone, implZone._parentDelegate, zone, f);
-  }
-
-  R runUnary<R, T>(Zone zone, R f(T arg), T arg) {
-    var implementation = _delegationTarget._runUnary;
-    _Zone implZone = implementation.zone;
-    var handler = implementation.function as RunUnaryHandler;
-    return handler(implZone, implZone._parentDelegate, zone, f, arg);
-  }
-
-  R runBinary<R, T1, T2>(Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2) {
-    var implementation = _delegationTarget._runBinary;
-    _Zone implZone = implementation.zone;
-    var handler = implementation.function as RunBinaryHandler;
-    return handler(implZone, implZone._parentDelegate, zone, f, arg1, arg2);
-  }
-
-  ZoneCallback<R> registerCallback<R>(Zone zone, R f()) {
-    var implementation = _delegationTarget._registerCallback;
-    _Zone implZone = implementation.zone;
-    var handler = implementation.function as RegisterCallbackHandler;
-    return handler(implZone, implZone._parentDelegate, zone, f);
-  }
-
-  ZoneUnaryCallback<R, T> registerUnaryCallback<R, T>(Zone zone, R f(T arg)) {
-    var implementation = _delegationTarget._registerUnaryCallback;
-    _Zone implZone = implementation.zone;
-    var handler = implementation.function as RegisterUnaryCallbackHandler;
-    return handler(implZone, implZone._parentDelegate, zone, f);
-  }
-
-  ZoneBinaryCallback<R, T1, T2> registerBinaryCallback<R, T1, T2>(
-    Zone zone,
-    R f(T1 arg1, T2 arg2),
-  ) {
-    var implementation = _delegationTarget._registerBinaryCallback;
-    _Zone implZone = implementation.zone;
-    var handler = implementation.function as RegisterBinaryCallbackHandler;
-    return handler(implZone, implZone._parentDelegate, zone, f);
-  }
-
-  AsyncError? errorCallback(Zone zone, Object error, StackTrace? stackTrace) {
-    var implementation = _delegationTarget._errorCallback;
-    _Zone implZone = implementation.zone;
-    if (identical(implZone, _rootZone)) return null;
-    ErrorCallbackHandler handler = implementation.function;
-    return handler(implZone, implZone._parentDelegate, zone, error, stackTrace);
-  }
-
-  void scheduleMicrotask(Zone zone, f()) {
-    var implementation = _delegationTarget._scheduleMicrotask;
-    _Zone implZone = implementation.zone;
-    ScheduleMicrotaskHandler handler = implementation.function;
-    handler(implZone, implZone._parentDelegate, zone, f);
-  }
-
-  Timer createTimer(Zone zone, Duration duration, void f()) {
-    var implementation = _delegationTarget._createTimer;
-    _Zone implZone = implementation.zone;
-    CreateTimerHandler handler = implementation.function;
-    return handler(implZone, implZone._parentDelegate, zone, duration, f);
-  }
-
-  Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) {
-    var implementation = _delegationTarget._createPeriodicTimer;
-    _Zone implZone = implementation.zone;
-    CreatePeriodicTimerHandler handler = implementation.function;
-    return handler(implZone, implZone._parentDelegate, zone, period, f);
-  }
-
-  void print(Zone zone, String line) {
-    var implementation = _delegationTarget._print;
-    _Zone implZone = implementation.zone;
-    PrintHandler handler = implementation.function;
-    handler(implZone, implZone._parentDelegate, zone, line);
-  }
-
-  Zone fork(
-    Zone zone,
-    ZoneSpecification? specification,
-    Map<Object?, Object?>? zoneValues,
-  ) {
-    var implementation = _delegationTarget._fork;
-    _Zone implZone = implementation.zone;
-    ForkHandler handler = implementation.function;
-    return handler(
-      implZone,
-      implZone._parentDelegate,
-      zone,
-      specification,
-      zoneValues,
-    );
-  }
-}
-
 /// Base class for Zone implementations.
 abstract base class _Zone implements Zone {
   const _Zone();
@@ -1497,197 +801,6 @@
   }
 }
 
-void _rootHandleUncaughtError(
-  Zone? self,
-  ZoneDelegate? parent,
-  Zone zone,
-  Object error,
-  StackTrace stackTrace,
-) {
-  _rootHandleError(error, stackTrace);
-}
-
-void _rootHandleError(Object error, StackTrace stackTrace) {
-  _schedulePriorityAsyncCallback(() {
-    Error.throwWithStackTrace(error, stackTrace);
-  });
-}
-
-R _rootRun<R>(Zone? self, ZoneDelegate? parent, Zone zone, R f()) {
-  if (identical(Zone._current, zone)) return f();
-
-  if (zone is! _Zone) {
-    throw ArgumentError.value(zone, "zone", "Can only run in platform zones");
-  }
-
-  _Zone old = Zone._enter(zone);
-  try {
-    return f();
-  } finally {
-    Zone._leave(old);
-  }
-}
-
-R _rootRunUnary<R, T>(
-  Zone? self,
-  ZoneDelegate? parent,
-  Zone zone,
-  R f(T arg),
-  T arg,
-) {
-  if (identical(Zone._current, zone)) return f(arg);
-
-  if (zone is! _Zone) {
-    throw ArgumentError.value(zone, "zone", "Can only run in platform zones");
-  }
-
-  _Zone old = Zone._enter(zone);
-  try {
-    return f(arg);
-  } finally {
-    Zone._leave(old);
-  }
-}
-
-R _rootRunBinary<R, T1, T2>(
-  Zone? self,
-  ZoneDelegate? parent,
-  Zone zone,
-  R f(T1 arg1, T2 arg2),
-  T1 arg1,
-  T2 arg2,
-) {
-  if (identical(Zone._current, zone)) return f(arg1, arg2);
-
-  if (zone is! _Zone) {
-    throw ArgumentError.value(zone, "zone", "Can only run in platform zones");
-  }
-
-  _Zone old = Zone._enter(zone);
-  try {
-    return f(arg1, arg2);
-  } finally {
-    Zone._leave(old);
-  }
-}
-
-ZoneCallback<R> _rootRegisterCallback<R>(
-  Zone self,
-  ZoneDelegate parent,
-  Zone zone,
-  R f(),
-) {
-  return f;
-}
-
-ZoneUnaryCallback<R, T> _rootRegisterUnaryCallback<R, T>(
-  Zone self,
-  ZoneDelegate parent,
-  Zone zone,
-  R f(T arg),
-) {
-  return f;
-}
-
-ZoneBinaryCallback<R, T1, T2> _rootRegisterBinaryCallback<R, T1, T2>(
-  Zone self,
-  ZoneDelegate parent,
-  Zone zone,
-  R f(T1 arg1, T2 arg2),
-) {
-  return f;
-}
-
-AsyncError? _rootErrorCallback(
-  Zone self,
-  ZoneDelegate parent,
-  Zone zone,
-  Object error,
-  StackTrace? stackTrace,
-) => null;
-
-void _rootScheduleMicrotask(
-  Zone? self,
-  ZoneDelegate? parent,
-  Zone zone,
-  void f(),
-) {
-  if (!identical(_rootZone, zone)) {
-    bool hasErrorHandler = !_rootZone.inSameErrorZone(zone);
-    if (hasErrorHandler) {
-      f = zone.bindCallbackGuarded(f);
-    } else {
-      f = zone.bindCallback(f);
-    }
-  }
-  _scheduleAsyncCallback(f);
-}
-
-Timer _rootCreateTimer(
-  Zone self,
-  ZoneDelegate parent,
-  Zone zone,
-  Duration duration,
-  void Function() callback,
-) {
-  if (!identical(_rootZone, zone)) {
-    callback = zone.bindCallback(callback);
-  }
-  return Timer._createTimer(duration, callback);
-}
-
-Timer _rootCreatePeriodicTimer(
-  Zone self,
-  ZoneDelegate parent,
-  Zone zone,
-  Duration duration,
-  void callback(Timer timer),
-) {
-  if (!identical(_rootZone, zone)) {
-    callback = zone.bindUnaryCallback<void, Timer>(callback);
-  }
-  return Timer._createPeriodicTimer(duration, callback);
-}
-
-void _rootPrint(Zone self, ZoneDelegate parent, Zone zone, String line) {
-  printToConsole(line);
-}
-
-void _printToZone(String line) {
-  Zone.current.print(line);
-}
-
-Zone _rootFork(
-  Zone? self,
-  ZoneDelegate? parent,
-  Zone zone,
-  ZoneSpecification? specification,
-  Map<Object?, Object?>? zoneValues,
-) {
-  if (zone is! _Zone) {
-    throw ArgumentError.value(zone, "zone", "Can only fork a platform zone");
-  }
-  // TODO(floitsch): it would be nice if we could get rid of this hack.
-  // Change the static zoneOrDirectPrint function to go through zones
-  // from now on.
-  printToZone = _printToZone;
-
-  if (specification == null) {
-    specification = const ZoneSpecification();
-  } else if (specification is! _ZoneSpecification) {
-    specification = ZoneSpecification.from(specification);
-  }
-  Map<Object?, Object?> valueMap;
-  if (zoneValues == null) {
-    valueMap = zone._map;
-  } else {
-    valueMap = HashMap<Object?, Object?>.from(zoneValues);
-  }
-  if (specification == null)
-    throw "unreachable"; // TODO(lrn): Remove when type promotion works.
-  return _CustomZone(zone, specification, valueMap);
-}
-
 base class _RootZone extends _Zone {
   const _RootZone();
 
@@ -1881,154 +994,3 @@
     printToConsole(line);
   }
 }
-
-const _Zone _rootZone = _RootZone();
-
-/// Runs [body] in its own zone.
-///
-/// Creates a new zone using [Zone.fork] based on [zoneSpecification] and
-/// [zoneValues], then runs [body] in that zone and returns the result.
-///
-/// Example use:
-/// ```dart
-/// var secret = "arglebargle"; // Or a random generated string.
-/// var result = runZoned(
-///     () async {
-///       await Future.delayed(Duration(seconds: 5), () {
-///         print("${Zone.current[#_secret]} glop glyf");
-///       });
-///     },
-///     zoneValues: {#_secret: secret},
-///     zoneSpecification:
-///         ZoneSpecification(print: (Zone self, parent, zone, String value) {
-///       if (value.contains(Zone.current[#_secret] as String)) {
-///         value = "--censored--";
-///       }
-///       parent.print(zone, value);
-///     }));
-/// secret = ""; // Erase the evidence.
-/// await result; // Wait for asynchronous computation to complete.
-/// ```
-/// The new zone intercepts `print` and stores a value under the private
-/// symbol `#_secret`. The secret is available from the new [Zone] object,
-/// which is the [Zone.current] for the body,
-/// and is also the first, `self`, parameter to the `print` handler function.
-///
-/// If the [ZoneSpecification.handleUncaughtError] is set, or the deprecated
-/// [onError] callback is passed, the created zone will be an _error zone_.
-/// Asynchronous errors in futures never cross zone boundaries between zones
-/// with a different [Zone.errorZone].
-/// A consequence of that behavior can be that a [Future] which completes as an
-/// error in the created zone will seem to never complete when used from a zone
-/// that belongs to a different error zone.
-/// Multiple attempts to use the future in a zone where the error is
-/// inaccessible will cause the error to be reported *again* in it's original
-/// error zone.
-///
-/// See [runZonedGuarded] in place of using the deprected [onError] argument.
-/// If [onError] is provided this function also tries to catch and handle
-/// synchronous errors from [body], but may throw an error anyway returning
-/// `null` if the generic argument [R] is not nullable.
-R runZoned<R>(
-  R body(), {
-  Map<Object?, Object?>? zoneValues,
-  ZoneSpecification? zoneSpecification,
-  @Deprecated("Use runZonedGuarded instead") Function? onError,
-}) {
-  if (onError != null) {
-    // TODO: Remove this when code have been migrated off using [onError].
-    if (onError is! void Function(Object, StackTrace)) {
-      if (onError is void Function(Object)) {
-        var originalOnError = onError;
-        onError = (Object error, StackTrace stack) => originalOnError(error);
-      } else {
-        throw ArgumentError.value(
-          onError,
-          "onError",
-          "Must be Function(Object) or Function(Object, StackTrace)",
-        );
-      }
-    }
-    return runZonedGuarded(
-          body,
-          onError,
-          zoneSpecification: zoneSpecification,
-          zoneValues: zoneValues,
-        )
-        as R;
-  }
-  return _runZoned<R>(body, zoneValues, zoneSpecification);
-}
-
-/// Runs [body] in its own error zone.
-///
-/// Creates a new zone using [Zone.fork] based on [zoneSpecification] and
-/// [zoneValues], then runs [body] in that zone and returns the result.
-///
-/// The [onError] function is used *both* to handle asynchronous errors
-/// by overriding [ZoneSpecification.handleUncaughtError] in [zoneSpecification],
-/// if any, *and* to handle errors thrown synchronously by the call to [body].
-///
-/// If an error occurs synchronously in [body],
-/// then throwing in the [onError] handler
-/// makes the call to `runZonedGuarded` throw that error,
-/// and otherwise the call to `runZonedGuarded` returns `null`.
-///
-/// The created zone will always be an _error zone_.
-/// Asynchronous errors in futures never cross zone boundaries between zones
-/// with a different [Zone.errorZone].
-/// A consequence of that behavior can be that a [Future] which completes as an
-/// error in the created zone will seem to never complete when used from a zone
-/// that belongs to a different error zone.
-/// Multiple attempts to use the future in a zone where the error is
-/// inaccessible will cause the error to be reported *again* in it's original
-/// error zone.
-R? runZonedGuarded<R>(
-  R body(),
-  void onError(Object error, StackTrace stack), {
-  Map<Object?, Object?>? zoneValues,
-  ZoneSpecification? zoneSpecification,
-}) {
-  _Zone parentZone = Zone._current;
-  HandleUncaughtErrorHandler errorHandler =
-      (
-        Zone self,
-        ZoneDelegate parent,
-        Zone zone,
-        Object error,
-        StackTrace stackTrace,
-      ) {
-        try {
-          parentZone.runBinary(onError, error, stackTrace);
-        } catch (e, s) {
-          if (identical(e, error)) {
-            parent.handleUncaughtError(zone, error, stackTrace);
-          } else {
-            parent.handleUncaughtError(zone, e, s);
-          }
-        }
-      };
-  if (zoneSpecification == null) {
-    zoneSpecification = ZoneSpecification(handleUncaughtError: errorHandler);
-  } else {
-    zoneSpecification = ZoneSpecification.from(
-      zoneSpecification,
-      handleUncaughtError: errorHandler,
-    );
-  }
-  try {
-    return _runZoned<R>(body, zoneValues, zoneSpecification);
-  } catch (error, stackTrace) {
-    onError(error, stackTrace);
-  }
-  return null;
-}
-
-/// Runs [body] in a new zone based on [zoneValues] and [specification].
-R _runZoned<R>(
-  R body(),
-  Map<Object?, Object?>? zoneValues,
-  ZoneSpecification? specification,
-) => Zone.current
-    .fork(specification: specification, zoneValues: zoneValues)
-    .run<R>(body);
diff --git a/sdk/lib/async/zone_api.dart b/sdk/lib/async/zone_api.dart
new file mode 100644
index 0000000..bf2f0a9
--- /dev/null
+++ b/sdk/lib/async/zone_api.dart
@@ -0,0 +1,166 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Top-level Zone-related declarations.
+// Anything public that is not implementing `Zone`, `ZoneDelegate`
+// or `ZoneSpecification`.
+part of 'dart:async';
+
+/// A no-argument function, like the argument to `Zone.run`.
+typedef ZoneCallback<R> = R Function();
+
+/// A one-argument function, like the argument to `Zone.runUnary`.
+typedef ZoneUnaryCallback<R, T> = R Function(T);
+
+/// A two-argument function, like the argument to `Zone.runBinary`.
+typedef ZoneBinaryCallback<R, T1, T2> = R Function(T1, T2);
+
+/// Runs [body] in its own zone.
+///
+/// Creates a new zone using [Zone.fork] based on [zoneSpecification] and
+/// [zoneValues], then runs [body] in that zone and returns the result.
+///
+/// Example use:
+/// ```dart
+/// var secret = "arglebargle"; // Or a random generated string.
+/// var result = runZoned(
+///     () async {
+///       await Future.delayed(Duration(seconds: 5), () {
+///         print("${Zone.current[#_secret]} glop glyf");
+///       });
+///     },
+///     zoneValues: {#_secret: secret},
+///     zoneSpecification:
+///         ZoneSpecification(print: (Zone self, parent, zone, String value) {
+///       if (value.contains(Zone.current[#_secret] as String)) {
+///         value = "--censored--";
+///       }
+///       parent.print(zone, value);
+///     }));
+/// secret = ""; // Erase the evidence.
+/// await result; // Wait for asynchronous computation to complete.
+/// ```
+/// The new zone intercepts `print` and stores a value under the private
+/// symbol `#_secret`. The secret is available from the new [Zone] object,
+/// which is the [Zone.current] for the body,
+/// and is also the first, `self`, parameter to the `print` handler function.
+///
+/// If the [ZoneSpecification.handleUncaughtError] is set, or the deprecated
+/// [onError] callback is passed, the created zone will be an _error zone_.
+/// Asynchronous errors in futures never cross zone boundaries between zones
+/// with a different [Zone.errorZone].
+/// A consequence of that behavior can be that a [Future] which completes as an
+/// error in the created zone will seem to never complete when used from a zone
+/// that belongs to a different error zone.
+/// Multiple attempts to use the future in a zone where the error is
+/// inaccessible will cause the error to be reported *again* in it's original
+/// error zone.
+///
+/// See [runZonedGuarded] in place of using the deprected [onError] argument.
+/// If [onError] is provided this function also tries to catch and handle
+/// synchronous errors from [body], but may throw an error anyway returning
+/// `null` if the generic argument [R] is not nullable.
+R runZoned<R>(
+  R body(), {
+  Map<Object?, Object?>? zoneValues,
+  ZoneSpecification? zoneSpecification,
+  @Deprecated("Use runZonedGuarded instead") Function? onError,
+}) {
+  if (onError != null) {
+    // TODO: Remove this when code have been migrated off using [onError].
+    if (onError is! void Function(Object, StackTrace)) {
+      if (onError is void Function(Object)) {
+        var originalOnError = onError;
+        onError = (Object error, StackTrace stack) => originalOnError(error);
+      } else {
+        throw ArgumentError.value(
+          onError,
+          "onError",
+          "Must be Function(Object) or Function(Object, StackTrace)",
+        );
+      }
+    }
+    return runZonedGuarded(
+          body,
+          onError,
+          zoneSpecification: zoneSpecification,
+          zoneValues: zoneValues,
+        )
+        as R;
+  }
+  return _runZoned<R>(body, zoneValues, zoneSpecification);
+}
+
+/// Runs [body] in its own error zone.
+///
+/// Creates a new zone using [Zone.fork] based on [zoneSpecification] and
+/// [zoneValues], then runs [body] in that zone and returns the result.
+///
+/// The [onError] function is used *both* to handle asynchronous errors
+/// by overriding [ZoneSpecification.handleUncaughtError] in [zoneSpecification],
+/// if any, *and* to handle errors thrown synchronously by the call to [body].
+///
+/// If an error occurs synchronously in [body],
+/// then throwing in the [onError] handler
+/// makes the call to `runZonedGuarded` throw that error,
+/// and otherwise the call to `runZonedGuarded` returns `null`.
+///
+/// The created zone will always be an _error zone_.
+/// Asynchronous errors in futures never cross zone boundaries between zones
+/// with a different [Zone.errorZone].
+/// A consequence of that behavior can be that a [Future] which completes as an
+/// error in the created zone will seem to never complete when used from a zone
+/// that belongs to a different error zone.
+/// Multiple attempts to use the future in a zone where the error is
+/// inaccessible will cause the error to be reported *again* in it's original
+/// error zone.
+R? runZonedGuarded<R>(
+  R body(),
+  void onError(Object error, StackTrace stack), {
+  Map<Object?, Object?>? zoneValues,
+  ZoneSpecification? zoneSpecification,
+}) {
+  _Zone parentZone = Zone._current;
+  HandleUncaughtErrorHandler errorHandler =
+      (
+        Zone self,
+        ZoneDelegate parent,
+        Zone zone,
+        Object error,
+        StackTrace stackTrace,
+      ) {
+        try {
+          parentZone.runBinary(onError, error, stackTrace);
+        } catch (e, s) {
+          if (identical(e, error)) {
+            parent.handleUncaughtError(zone, error, stackTrace);
+          } else {
+            parent.handleUncaughtError(zone, e, s);
+          }
+        }
+      };
+  if (zoneSpecification == null) {
+    zoneSpecification = ZoneSpecification(handleUncaughtError: errorHandler);
+  } else {
+    zoneSpecification = ZoneSpecification.from(
+      zoneSpecification,
+      handleUncaughtError: errorHandler,
+    );
+  }
+  try {
+    return _runZoned<R>(body, zoneValues, zoneSpecification);
+  } catch (error, stackTrace) {
+    onError(error, stackTrace);
+  }
+  return null;
+}
+
+/// Runs [body] in a new zone based on [zoneValues] and [specification].
+R _runZoned<R>(
+  R body(),
+  Map<Object?, Object?>? zoneValues,
+  ZoneSpecification? specification,
+) => Zone.current
+    .fork(specification: specification, zoneValues: zoneValues)
+    .run<R>(body);
diff --git a/sdk/lib/async/zone_delegate.dart b/sdk/lib/async/zone_delegate.dart
new file mode 100644
index 0000000..26d94ab
--- /dev/null
+++ b/sdk/lib/async/zone_delegate.dart
@@ -0,0 +1,177 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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:async';
+
+/// An adapted view of the parent zone.
+///
+/// This class allows the implementation of a zone method to invoke methods on
+/// the parent zone while retaining knowledge of the originating zone.
+///
+/// Custom zones (created through [Zone.fork] or [runZoned]) can provide
+/// implementations of most methods of zones. This is similar to overriding
+/// methods on [Zone], except that this mechanism doesn't require subclassing.
+///
+/// A custom zone function (provided through a [ZoneSpecification]) typically
+/// records or wraps its parameters and then delegates the operation to its
+/// parent zone using the provided [ZoneDelegate].
+///
+/// While zones have access to their parent zone (through [Zone.parent]) it is
+/// recommended to call the methods on the provided parent delegate for two
+/// reasons:
+/// 1. the delegate methods take an additional `zone` argument which is the
+///   zone the action has been initiated in.
+/// 2. delegate calls are more efficient, since the implementation knows how
+///   to skip zones that would just delegate to their parents.
+abstract final class ZoneDelegate {
+  // Invoke the [HandleUncaughtErrorHandler] of the zone with a current zone.
+  void handleUncaughtError(Zone zone, Object error, StackTrace stackTrace);
+
+  // Invokes the [RunHandler] of the zone with a current zone.
+  R run<R>(Zone zone, R f());
+
+  // Invokes the [RunUnaryHandler] of the zone with a current zone.
+  R runUnary<R, T>(Zone zone, R f(T arg), T arg);
+
+  // Invokes the [RunBinaryHandler] of the zone with a current zone.
+  R runBinary<R, T1, T2>(Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2);
+
+  // Invokes the [RegisterCallbackHandler] of the zone with a current zone.
+  ZoneCallback<R> registerCallback<R>(Zone zone, R f());
+
+  // Invokes the [RegisterUnaryHandler] of the zone with a current zone.
+  ZoneUnaryCallback<R, T> registerUnaryCallback<R, T>(Zone zone, R f(T arg));
+
+  // Invokes the [RegisterBinaryHandler] of the zone with a current zone.
+  ZoneBinaryCallback<R, T1, T2> registerBinaryCallback<R, T1, T2>(
+    Zone zone,
+    R f(T1 arg1, T2 arg2),
+  );
+
+  // Invokes the [ErrorCallbackHandler] of the zone with a current zone.
+  AsyncError? errorCallback(Zone zone, Object error, StackTrace? stackTrace);
+
+  // Invokes the [ScheduleMicrotaskHandler] of the zone with a current zone.
+  void scheduleMicrotask(Zone zone, void f());
+
+  // Invokes the [CreateTimerHandler] of the zone with a current zone.
+  Timer createTimer(Zone zone, Duration duration, void f());
+
+  // Invokes the [CreatePeriodicTimerHandler] of the zone with a current zone.
+  Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer));
+
+  // Invokes the [PrintHandler] of the zone with a current zone.
+  void print(Zone zone, String line);
+
+  // Invokes the [ForkHandler] of the zone with a current zone.
+  Zone fork(Zone zone, ZoneSpecification? specification, Map? zoneValues);
+}
+
+base class _ZoneDelegate implements ZoneDelegate {
+  final _Zone _delegationTarget;
+
+  _ZoneDelegate(this._delegationTarget);
+
+  void handleUncaughtError(Zone zone, Object error, StackTrace stackTrace) {
+    _delegationTarget._processUncaughtError(zone, error, stackTrace);
+  }
+
+  R run<R>(Zone zone, R f()) {
+    var implementation = _delegationTarget._run;
+    _Zone implZone = implementation.zone;
+    var handler = implementation.function as RunHandler;
+    return handler(implZone, implZone._parentDelegate, zone, f);
+  }
+
+  R runUnary<R, T>(Zone zone, R f(T arg), T arg) {
+    var implementation = _delegationTarget._runUnary;
+    _Zone implZone = implementation.zone;
+    var handler = implementation.function as RunUnaryHandler;
+    return handler(implZone, implZone._parentDelegate, zone, f, arg);
+  }
+
+  R runBinary<R, T1, T2>(Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2) {
+    var implementation = _delegationTarget._runBinary;
+    _Zone implZone = implementation.zone;
+    var handler = implementation.function as RunBinaryHandler;
+    return handler(implZone, implZone._parentDelegate, zone, f, arg1, arg2);
+  }
+
+  ZoneCallback<R> registerCallback<R>(Zone zone, R f()) {
+    var implementation = _delegationTarget._registerCallback;
+    _Zone implZone = implementation.zone;
+    var handler = implementation.function as RegisterCallbackHandler;
+    return handler(implZone, implZone._parentDelegate, zone, f);
+  }
+
+  ZoneUnaryCallback<R, T> registerUnaryCallback<R, T>(Zone zone, R f(T arg)) {
+    var implementation = _delegationTarget._registerUnaryCallback;
+    _Zone implZone = implementation.zone;
+    var handler = implementation.function as RegisterUnaryCallbackHandler;
+    return handler(implZone, implZone._parentDelegate, zone, f);
+  }
+
+  ZoneBinaryCallback<R, T1, T2> registerBinaryCallback<R, T1, T2>(
+    Zone zone,
+    R f(T1 arg1, T2 arg2),
+  ) {
+    var implementation = _delegationTarget._registerBinaryCallback;
+    _Zone implZone = implementation.zone;
+    var handler = implementation.function as RegisterBinaryCallbackHandler;
+    return handler(implZone, implZone._parentDelegate, zone, f);
+  }
+
+  AsyncError? errorCallback(Zone zone, Object error, StackTrace? stackTrace) {
+    var implementation = _delegationTarget._errorCallback;
+    _Zone implZone = implementation.zone;
+    if (identical(implZone, _rootZone)) return null;
+    ErrorCallbackHandler handler = implementation.function;
+    return handler(implZone, implZone._parentDelegate, zone, error, stackTrace);
+  }
+
+  void scheduleMicrotask(Zone zone, f()) {
+    var implementation = _delegationTarget._scheduleMicrotask;
+    _Zone implZone = implementation.zone;
+    ScheduleMicrotaskHandler handler = implementation.function;
+    handler(implZone, implZone._parentDelegate, zone, f);
+  }
+
+  Timer createTimer(Zone zone, Duration duration, void f()) {
+    var implementation = _delegationTarget._createTimer;
+    _Zone implZone = implementation.zone;
+    CreateTimerHandler handler = implementation.function;
+    return handler(implZone, implZone._parentDelegate, zone, duration, f);
+  }
+
+  Timer createPeriodicTimer(Zone zone, Duration period, void f(Timer timer)) {
+    var implementation = _delegationTarget._createPeriodicTimer;
+    _Zone implZone = implementation.zone;
+    CreatePeriodicTimerHandler handler = implementation.function;
+    return handler(implZone, implZone._parentDelegate, zone, period, f);
+  }
+
+  void print(Zone zone, String line) {
+    var implementation = _delegationTarget._print;
+    _Zone implZone = implementation.zone;
+    PrintHandler handler = implementation.function;
+    handler(implZone, implZone._parentDelegate, zone, line);
+  }
+
+  Zone fork(
+    Zone zone,
+    ZoneSpecification? specification,
+    Map<Object?, Object?>? zoneValues,
+  ) {
+    var implementation = _delegationTarget._fork;
+    _Zone implZone = implementation.zone;
+    ForkHandler handler = implementation.function;
+    return handler(
+      implZone,
+      implZone._parentDelegate,
+      zone,
+      specification,
+      zoneValues,
+    );
+  }
+}
diff --git a/sdk/lib/async/zone_root.dart b/sdk/lib/async/zone_root.dart
new file mode 100644
index 0000000..416a3a6
--- /dev/null
+++ b/sdk/lib/async/zone_root.dart
@@ -0,0 +1,199 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Root-zone and its implementation of zone features.
+part of 'dart:async';
+
+const _Zone _rootZone = _RootZone();
+
+void _rootHandleUncaughtError(
+  Zone? self,
+  ZoneDelegate? parent,
+  Zone zone,
+  Object error,
+  StackTrace stackTrace,
+) {
+  _rootHandleError(error, stackTrace);
+}
+
+void _rootHandleError(Object error, StackTrace stackTrace) {
+  _schedulePriorityAsyncCallback(() {
+    Error.throwWithStackTrace(error, stackTrace);
+  });
+}
+
+R _rootRun<R>(Zone? self, ZoneDelegate? parent, Zone zone, R f()) {
+  if (identical(Zone._current, zone)) return f();
+
+  if (zone is! _Zone) {
+    throw ArgumentError.value(zone, "zone", "Can only run in platform zones");
+  }
+
+  _Zone old = Zone._enter(zone);
+  try {
+    return f();
+  } finally {
+    Zone._leave(old);
+  }
+}
+
+R _rootRunUnary<R, T>(
+  Zone? self,
+  ZoneDelegate? parent,
+  Zone zone,
+  R f(T arg),
+  T arg,
+) {
+  if (identical(Zone._current, zone)) return f(arg);
+
+  if (zone is! _Zone) {
+    throw ArgumentError.value(zone, "zone", "Can only run in platform zones");
+  }
+
+  _Zone old = Zone._enter(zone);
+  try {
+    return f(arg);
+  } finally {
+    Zone._leave(old);
+  }
+}
+
+R _rootRunBinary<R, T1, T2>(
+  Zone? self,
+  ZoneDelegate? parent,
+  Zone zone,
+  R f(T1 arg1, T2 arg2),
+  T1 arg1,
+  T2 arg2,
+) {
+  if (identical(Zone._current, zone)) return f(arg1, arg2);
+
+  if (zone is! _Zone) {
+    throw ArgumentError.value(zone, "zone", "Can only run in platform zones");
+  }
+
+  _Zone old = Zone._enter(zone);
+  try {
+    return f(arg1, arg2);
+  } finally {
+    Zone._leave(old);
+  }
+}
+
+ZoneCallback<R> _rootRegisterCallback<R>(
+  Zone self,
+  ZoneDelegate parent,
+  Zone zone,
+  R f(),
+) {
+  return f;
+}
+
+ZoneUnaryCallback<R, T> _rootRegisterUnaryCallback<R, T>(
+  Zone self,
+  ZoneDelegate parent,
+  Zone zone,
+  R f(T arg),
+) {
+  return f;
+}
+
+ZoneBinaryCallback<R, T1, T2> _rootRegisterBinaryCallback<R, T1, T2>(
+  Zone self,
+  ZoneDelegate parent,
+  Zone zone,
+  R f(T1 arg1, T2 arg2),
+) {
+  return f;
+}
+
+AsyncError? _rootErrorCallback(
+  Zone self,
+  ZoneDelegate parent,
+  Zone zone,
+  Object error,
+  StackTrace? stackTrace,
+) => null;
+
+void _rootScheduleMicrotask(
+  Zone? self,
+  ZoneDelegate? parent,
+  Zone zone,
+  void f(),
+) {
+  if (!identical(_rootZone, zone)) {
+    bool hasErrorHandler = !_rootZone.inSameErrorZone(zone);
+    if (hasErrorHandler) {
+      f = zone.bindCallbackGuarded(f);
+    } else {
+      f = zone.bindCallback(f);
+    }
+  }
+  _scheduleAsyncCallback(f);
+}
+
+Timer _rootCreateTimer(
+  Zone self,
+  ZoneDelegate parent,
+  Zone zone,
+  Duration duration,
+  void Function() callback,
+) {
+  if (!identical(_rootZone, zone)) {
+    callback = zone.bindCallback(callback);
+  }
+  return Timer._createTimer(duration, callback);
+}
+
+Timer _rootCreatePeriodicTimer(
+  Zone self,
+  ZoneDelegate parent,
+  Zone zone,
+  Duration duration,
+  void callback(Timer timer),
+) {
+  if (!identical(_rootZone, zone)) {
+    callback = zone.bindUnaryCallback<void, Timer>(callback);
+  }
+  return Timer._createPeriodicTimer(duration, callback);
+}
+
+void _rootPrint(Zone self, ZoneDelegate parent, Zone zone, String line) {
+  printToConsole(line);
+}
+
+void _printToZone(String line) {
+  Zone.current.print(line);
+}
+
+Zone _rootFork(
+  Zone? self,
+  ZoneDelegate? parent,
+  Zone zone,
+  ZoneSpecification? specification,
+  Map<Object?, Object?>? zoneValues,
+) {
+  if (zone is! _Zone) {
+    throw ArgumentError.value(zone, "zone", "Can only fork a platform zone");
+  }
+  // TODO(floitsch): it would be nice if we could get rid of this hack.
+  // Change the static zoneOrDirectPrint function to go through zones
+  // from now on.
+  printToZone = _printToZone;
+
+  if (specification == null) {
+    specification = const ZoneSpecification();
+  } else if (specification is! _ZoneSpecification) {
+    specification = ZoneSpecification.from(specification);
+  }
+  Map<Object?, Object?> valueMap;
+  if (zoneValues == null) {
+    valueMap = zone._map;
+  } else {
+    valueMap = HashMap<Object?, Object?>.from(zoneValues);
+  }
+  if (specification == null)
+    throw "unreachable"; // TODO(lrn): Remove when type promotion works.
+  return _CustomZone(zone, specification, valueMap);
+}
diff --git a/sdk/lib/async/zone_specification.dart b/sdk/lib/async/zone_specification.dart
new file mode 100644
index 0000000..cb4ec2c
--- /dev/null
+++ b/sdk/lib/async/zone_specification.dart
@@ -0,0 +1,566 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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:async';
+
+/// A parameter object with custom zone function handlers for [Zone.fork].
+///
+/// A zone specification is a parameter object passed to [Zone.fork]
+/// and any underlying [ForkHandler] custom implementations.
+/// The individual handlers, if set to a non-null value,
+/// will be the implementation of the corresponding [Zone] methods
+/// for a forked zone created using this zone specification.
+///
+/// Handlers have the same signature as the same-named methods on [Zone],
+/// but receive three additional arguments:
+///
+///   1. The zone the handlers are attached to (the "self" zone).
+///      This is the zone created by [Zone.fork] where the handler is
+///      passed as part of the zone delegation.
+///   2. A [ZoneDelegate] to the parent zone.
+///   3. The "current" zone at the time the request was made.
+///      The self zone is always a parent zone of the current zone.
+///
+/// Handlers can either stop propagating the request (by simply not calling the
+/// parent handler), or forward to the parent zone, potentially modifying the
+/// arguments on the way.
+abstract final class ZoneSpecification {
+  /// Creates a specification with the provided handlers.
+  ///
+  /// If the [handleUncaughtError] is provided, the new zone will be a new
+  /// "error zone" which will prevent errors from flowing into other
+  /// error zones (see [Zone.errorZone], [Zone.inSameErrorZone]).
+  const factory ZoneSpecification({
+    HandleUncaughtErrorHandler? handleUncaughtError,
+    RunHandler? run,
+    RunUnaryHandler? runUnary,
+    RunBinaryHandler? runBinary,
+    RegisterCallbackHandler? registerCallback,
+    RegisterUnaryCallbackHandler? registerUnaryCallback,
+    RegisterBinaryCallbackHandler? registerBinaryCallback,
+    ErrorCallbackHandler? errorCallback,
+    ScheduleMicrotaskHandler? scheduleMicrotask,
+    CreateTimerHandler? createTimer,
+    CreatePeriodicTimerHandler? createPeriodicTimer,
+    PrintHandler? print,
+    ForkHandler? fork,
+  }) = _ZoneSpecification;
+
+  /// Creates a specification from [other] and provided handlers.
+  ///
+  /// The created zone specification has the handlers of [other]
+  /// and any individually provided handlers.
+  /// If a handler is provided both through [other] and individually,
+  /// the individually provided handler overrides the one from [other].
+  factory ZoneSpecification.from(
+    ZoneSpecification other, {
+    HandleUncaughtErrorHandler? handleUncaughtError,
+    RunHandler? run,
+    RunUnaryHandler? runUnary,
+    RunBinaryHandler? runBinary,
+    RegisterCallbackHandler? registerCallback,
+    RegisterUnaryCallbackHandler? registerUnaryCallback,
+    RegisterBinaryCallbackHandler? registerBinaryCallback,
+    ErrorCallbackHandler? errorCallback,
+    ScheduleMicrotaskHandler? scheduleMicrotask,
+    CreateTimerHandler? createTimer,
+    CreatePeriodicTimerHandler? createPeriodicTimer,
+    PrintHandler? print,
+    ForkHandler? fork,
+  }) {
+    return ZoneSpecification(
+      handleUncaughtError: handleUncaughtError ?? other.handleUncaughtError,
+      run: run ?? other.run,
+      runUnary: runUnary ?? other.runUnary,
+      runBinary: runBinary ?? other.runBinary,
+      registerCallback: registerCallback ?? other.registerCallback,
+      registerUnaryCallback:
+          registerUnaryCallback ?? other.registerUnaryCallback,
+      registerBinaryCallback:
+          registerBinaryCallback ?? other.registerBinaryCallback,
+      errorCallback: errorCallback ?? other.errorCallback,
+      scheduleMicrotask: scheduleMicrotask ?? other.scheduleMicrotask,
+      createTimer: createTimer ?? other.createTimer,
+      createPeriodicTimer: createPeriodicTimer ?? other.createPeriodicTimer,
+      print: print ?? other.print,
+      fork: fork ?? other.fork,
+    );
+  }
+
+  /// A custom [Zone.handleUncaughtError] implementation for a new zone.
+  HandleUncaughtErrorHandler? get handleUncaughtError;
+
+  /// A custom [Zone.run] implementation for a new zone.
+  RunHandler? get run;
+
+  /// A custom [Zone.runUnary] implementation for a new zone.
+  RunUnaryHandler? get runUnary;
+
+  /// A custom [Zone.runBinary] implementation for a new zone.
+  RunBinaryHandler? get runBinary;
+
+  /// A custom [Zone.registerCallback] implementation for a new zone.
+  RegisterCallbackHandler? get registerCallback;
+
+  /// A custom [Zone.registerUnaryCallback] implementation for a new zone.
+  RegisterUnaryCallbackHandler? get registerUnaryCallback;
+
+  /// A custom [Zone.registerBinaryCallback] implementation for a new zone.
+  RegisterBinaryCallbackHandler? get registerBinaryCallback;
+
+  /// A custom [Zone.errorCallback] implementation for a new zone.
+  ErrorCallbackHandler? get errorCallback;
+
+  /// A custom [Zone.scheduleMicrotask] implementation for a new zone.
+  ScheduleMicrotaskHandler? get scheduleMicrotask;
+
+  /// A custom [Zone.createTimer] implementation for a new zone.
+  CreateTimerHandler? get createTimer;
+
+  /// A custom [Zone.createPeriodicTimer] implementation for a new zone.
+  CreatePeriodicTimerHandler? get createPeriodicTimer;
+
+  /// A custom [Zone.print] implementation for a new zone.
+  PrintHandler? get print;
+
+  /// A custom [Zone.handleUncaughtError] implementation for a new zone.
+  ForkHandler? get fork;
+}
+
+/// Internal [ZoneSpecification] class.
+///
+/// The implementation wants to rely on the fact that the getters cannot change
+/// dynamically. We thus require users to go through the redirecting
+/// [ZoneSpecification] constructor which instantiates this class.
+base class _ZoneSpecification implements ZoneSpecification {
+  const _ZoneSpecification({
+    this.handleUncaughtError,
+    this.run,
+    this.runUnary,
+    this.runBinary,
+    this.registerCallback,
+    this.registerUnaryCallback,
+    this.registerBinaryCallback,
+    this.errorCallback,
+    this.scheduleMicrotask,
+    this.createTimer,
+    this.createPeriodicTimer,
+    this.print,
+    this.fork,
+  });
+
+  final HandleUncaughtErrorHandler? handleUncaughtError;
+  final RunHandler? run;
+  final RunUnaryHandler? runUnary;
+  final RunBinaryHandler? runBinary;
+  final RegisterCallbackHandler? registerCallback;
+  final RegisterUnaryCallbackHandler? registerUnaryCallback;
+  final RegisterBinaryCallbackHandler? registerBinaryCallback;
+  final ErrorCallbackHandler? errorCallback;
+  final ScheduleMicrotaskHandler? scheduleMicrotask;
+  final CreateTimerHandler? createTimer;
+  final CreatePeriodicTimerHandler? createPeriodicTimer;
+  final PrintHandler? print;
+  final ForkHandler? fork;
+}
+
+// Names and documentation for the functions of a ZoneSpecification.
+
+/// The type of a custom [Zone.handleUncaughtError] implementation function.
+///
+/// A function used as [ZoneSpecification.handleUncaughtError]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The [error] and [stackTrace] are the error and stack trace that
+/// was uncaught in [zone].
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+///
+/// If the uncaught error handler throws, the error will be passed
+/// to `parent.handleUncaughtError`. If the thrown object is [error],
+/// the throw is considered a re-throw and the original [stackTrace]
+/// is retained. This allows an asynchronous error to leave the error zone.
+typedef HandleUncaughtErrorHandler =
+    void Function(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      Object error,
+      StackTrace stackTrace,
+    );
+
+/// The type of a custom [Zone.run] implementation function.
+///
+/// A function used as [ZoneSpecification.run]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] is the function which was passed to the
+/// [Zone.run] of [zone].
+///
+/// The default behavior of [Zone.run] is
+/// to call [f] in the current zone, [zone].
+/// A custom handler can do things before, after or instead of
+/// calling [f].
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef RunHandler =
+    R Function<R>(Zone self, ZoneDelegate parent, Zone zone, R Function() f);
+
+/// The type of a custom [Zone.runUnary] implementation function.
+///
+/// A function used as [ZoneSpecification.runUnary]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] and value [arg] are the function and argument
+/// which was passed to the [Zone.runUnary] of [zone].
+///
+/// The default behavior of [Zone.runUnary] is
+/// to call [f] with argument [arg] in the current zone, [zone].
+/// A custom handler can do things before, after or instead of
+/// calling [f].
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef RunUnaryHandler =
+    R Function<R, T>(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      R Function(T arg) f,
+      T arg,
+    );
+
+/// The type of a custom [Zone.runBinary] implementation function.
+///
+/// A function used as [ZoneSpecification.runBinary]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] and values [arg1] and [arg2] are the function and arguments
+/// which was passed to the [Zone.runBinary] of [zone].
+///
+/// The default behavior of [Zone.runUnary] is
+/// to call [f] with arguments [arg1] and [arg2] in the current zone, [zone].
+/// A custom handler can do things before, after or instead of
+/// calling [f].
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef RunBinaryHandler =
+    R Function<R, T1, T2>(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      R Function(T1 arg1, T2 arg2) f,
+      T1 arg1,
+      T2 arg2,
+    );
+
+/// The type of a custom [Zone.registerCallback] implementation function.
+///
+/// A function used as [ZoneSpecification.registerCallback]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] is the function which was passed to the
+/// [Zone.registerCallback] of [zone].
+///
+/// The handler should return either the function [f]
+/// or another function replacing [f],
+/// typically by wrapping [f] in a function
+/// which does something extra before and after invoking [f]
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef RegisterCallbackHandler =
+    ZoneCallback<R> Function<R>(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      R Function() f,
+    );
+
+/// The type of a custom [Zone.registerUnaryCallback] implementation function.
+///
+/// A function used as [ZoneSpecification.registerUnaryCallback]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] is the function which was passed to the
+/// which was passed to the [Zone.registerUnaryCallback] of [zone].
+///
+/// The handler should return either the function [f]
+/// or another function replacing [f],
+/// typically by wrapping [f] in a function
+/// which does something extra before and after invoking [f]
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef RegisterUnaryCallbackHandler =
+    ZoneUnaryCallback<R, T> Function<R, T>(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      R Function(T arg) f,
+    );
+
+/// The type of a custom [Zone.registerBinaryCallback] implementation function.
+///
+/// A function used as [ZoneSpecification.registerBinaryCallback]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] is the function which was passed to the
+/// which was passed to the [Zone.registerBinaryCallback] of [zone].
+///
+/// The handler should return either the function [f]
+/// or another function replacing [f],
+/// typically by wrapping [f] in a function
+/// which does something extra before and after invoking [f]
+typedef RegisterBinaryCallbackHandler =
+    ZoneBinaryCallback<R, T1, T2> Function<R, T1, T2>(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      R Function(T1 arg1, T2 arg2) f,
+    );
+
+/// The type of a custom [Zone.errorCallback] implementation function.
+///
+/// A function used as [ZoneSpecification.errorCallback]
+/// to specialize the behavior of a new zone.
+///
+/// The [error] and [stackTrace] are the error and stack trace
+/// passed to [Zone.errorCallback] of [zone].
+///
+/// The function will be called when a synchronous error becomes an
+/// asynchronous error, either by being caught, for example by a `Future.then`
+/// callback throwing, or when used to create an asynchronous error
+/// programmatically, for example using `Future.error` or `Completer.complete`.
+///
+/// If the function does not want to replace the error or stack trace,
+/// it should just return `parent.errorCallback(zone, error, stackTrace)`,
+/// giving the parent zone the chance to intercept.
+///
+/// If the function does want to replace the error and/or stack trace,
+/// say with `error2` and `stackTrace2`, it should still allow the
+/// parent zone to intercept those errors, for examples as:
+/// ```dart
+///   return parent.errorCallback(zone, error, stackTrace) ??
+///       AsyncError(error, stackTrace);
+/// ```
+///
+/// The function returns either `null` if the original error and stack trace
+/// is unchanged, avoiding any allocation in the most common case,
+/// or an [AsyncError] containing a replacement error and stack trace
+/// which will be used in place of the originals as the asynchronous error.
+///
+/// The [self] [Zone] is the zone the handler was registered on,
+/// the [parent] delegate forwards to the handlers of [self]'s parent zone,
+/// and [zone] is the current zone where the error was uncaught,
+/// which will have [self] as an ancestor zone.
+///
+/// The error callback handler **must not** throw.
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef ErrorCallbackHandler =
+    AsyncError? Function(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      Object error,
+      StackTrace? stackTrace,
+    );
+
+/// The type of a custom [Zone.scheduleMicrotask] implementation function.
+///
+/// A function used as [ZoneSpecification.scheduleMicrotask]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The function [f] is the function which was
+/// passed to [Zone.scheduleMicrotask] of [zone].
+///
+/// The custom handler can choose to replace the function [f]
+/// with one that does something before, after or instead of calling [f],
+/// and then call `parent.scheduleMicrotask(zone, replacement)`.
+/// or it can implement its own microtask scheduling queue, which typically
+/// still depends on `parent.scheduleMicrotask` to as a way to get started.
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef ScheduleMicrotaskHandler =
+    void Function(Zone self, ZoneDelegate parent, Zone zone, void Function() f);
+
+/// The type of a custom [Zone.createTimer] implementation function.
+///
+/// A function used as [ZoneSpecification.createTimer]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The callback function [f] and [duration] are the ones which were
+/// passed to [Zone.createTimer] of [zone]
+/// (possibly through the [Timer] constructor).
+///
+/// The custom handler can choose to replace the function [f]
+/// with one that does something before, after or instead of calling [f],
+/// and then call `parent.createTimer(zone, replacement)`.
+/// or it can implement its own timer queue, which typically
+/// still depends on `parent.createTimer` to as a way to get started.
+///
+/// The function should return a [Timer] object which can be used
+/// to inspect and control the scheduled timer callback.
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef CreateTimerHandler =
+    Timer Function(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      Duration duration,
+      void Function() f,
+    );
+
+/// The type of a custom [Zone.createPeriodicTimer] implementation function.
+///
+/// A function used as [ZoneSpecification.createPeriodicTimer]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The callback function [f] and [period] are the ones which were
+/// passed to [Zone.createPeriodicTimer] of [zone]
+/// (possibly through the [Timer.periodic] constructor).
+///
+/// The custom handler can choose to replace the function [f]
+/// with one that does something before, after or instead of calling [f],
+/// and then call `parent.createTimer(zone, replacement)`.
+/// or it can implement its own timer queue, which typically
+/// still depends on `parent.createTimer` to as a way to get started.
+///
+/// The function should return a [Timer] object which can be used
+/// to inspect and control the scheduled timer callbacks.
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef CreatePeriodicTimerHandler =
+    Timer Function(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      Duration period,
+      void Function(Timer timer) f,
+    );
+
+/// The type of a custom [Zone.print] implementation function.
+///
+/// A function used as [ZoneSpecification.print]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The string [line] is the one which was passed to [Zone.print] of [zone],
+/// (possibly through the global [print] function).
+///
+/// The custom handler can intercept print operations and
+/// redirect them to other targets than the console.
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef PrintHandler =
+    void Function(Zone self, ZoneDelegate parent, Zone zone, String line);
+
+/// The type of a custom [Zone.fork] implementation function.
+///
+/// A function used as [ZoneSpecification.fork]
+/// to specialize the behavior of a new zone.
+///
+/// Receives the [Zone] that the handler was registered on as [self],
+/// a delegate forwarding to the handlers of [self]'s parent zone as [parent],
+/// and the current zone where the error was uncaught as [zone],
+/// which will have [self] as a parent zone.
+///
+/// The handler should create a new zone with [zone] as its
+/// immediate parent zone.
+///
+/// The [specification] and [zoneValues] are the ones which were
+/// passed to [Zone.fork] of [zone]. They specify the custom zone
+/// handlers and zone variables that the new zone should have.
+///
+/// The custom handler can change the specification or zone
+/// values before calling `parent.fork(zone, specification, zoneValues)`,
+/// but it has to call the [parent]'s [ZoneDelegate.fork] in order
+/// to create a valid [Zone] object.
+///
+/// The function must only access zone-related functionality through
+/// [self], [parent] or [zone].
+/// It should not depend on the current zone ([Zone.current]).
+typedef ForkHandler =
+    Zone Function(
+      Zone self,
+      ZoneDelegate parent,
+      Zone zone,
+      ZoneSpecification? specification,
+      Map<Object?, Object?>? zoneValues,
+    );
diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart
index e861cf4..d398f68 100644
--- a/sdk/lib/convert/base64.dart
+++ b/sdk/lib/convert/base64.dart
@@ -589,6 +589,7 @@
   /// 62nd and 63rd alphabet characters), and considers `%` a padding
   /// character, which must then be followed by `3D`, the percent-escape
   /// for `=`.
+  @pragma('vm:shared')
   static final List<int> _inverseAlphabet = Int8List.fromList([
     __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, //
     __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, //
diff --git a/sdk/lib/convert/encoding.dart b/sdk/lib/convert/encoding.dart
index 9a59506..605771b 100644
--- a/sdk/lib/convert/encoding.dart
+++ b/sdk/lib/convert/encoding.dart
@@ -44,7 +44,7 @@
 
   // All aliases (in lowercase) of supported encoding from
   // http://www.iana.org/assignments/character-sets/character-sets.xml.
-  static final Map<String, Encoding> _nameToEncoding = <String, Encoding>{
+  static const Map<String, Encoding> _nameToEncoding = const <String, Encoding>{
     // ISO_8859-1:1987.
     "iso_8859-1:1987": latin1,
     "iso-ir-100": latin1,
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index 47012a7..429209e 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -284,10 +284,7 @@
   ]) {
     start ??= 0;
     end = RangeError.checkValidRange(start, end, source.length);
-    if (end == null) {
-      // TODO(dart-lang/language#440): Remove when promotion works.
-      throw "unreachable";
-    }
+
     int length = end - start;
     if (target.length < at + length) {
       throw ArgumentError.value(
diff --git a/sdk/lib/ffi/native_finalizer.dart b/sdk/lib/ffi/native_finalizer.dart
index 2385f25..620557c 100644
--- a/sdk/lib/ffi/native_finalizer.dart
+++ b/sdk/lib/ffi/native_finalizer.dart
@@ -347,13 +347,17 @@
   /// Creates a finalizer with the given finalization callback.
   ///
   /// The [callback] must be a native function which can be executed outside of
-  /// a Dart isolate. This means that passing an FFI trampoline (a function
-  /// pointer obtained via [Pointer.fromFunction]) is not supported.
+  /// a Dart isolate. This also means that passing an FFI trampoline (a function
+  /// a function pointer obtained via [Pointer.fromFunction]) is not supported.
   ///
-  /// The [callback] might be invoked on an arbitrary thread and not necessary
-  /// on the same thread that created [NativeFinalizer].
-  // TODO(https://dartbug.com/47778): Implement isolate independent code and
-  // update the above comment.
+  /// The callback is not allowed to re-enter the Dart VM via Dart C APIs, with
+  /// two exceptions: it is allowed to call `Dart_DeletePersistentHandle` and
+  /// `Dart_DeleteWeakPersistentHandle`. Calling any other Dart C API function
+  /// results in undefined behavior, which means it can cause anything from
+  /// crashes and deadlocks to silent memory corruptions.
+  ///
+  /// The [callback] might be invoked on an arbitrary thread. It will have a
+  /// current isolate group but will not have a current isolate.
   external factory NativeFinalizer(Pointer<NativeFinalizerFunction> callback);
 
   /// Attaches this finalizer to [value].
diff --git a/sdk/lib/libraries.json b/sdk/lib/libraries.json
index e551960..758621f 100644
--- a/sdk/lib/libraries.json
+++ b/sdk/lib/libraries.json
@@ -104,6 +104,9 @@
         "uri": "typed_data/typed_data.dart",
         "patches": "_internal/vm/lib/typed_data_patch.dart"
       },
+      "_vm": {
+        "uri": "_vm/_vm.dart"
+      },
       "_vmservice": {
         "uri": "vmservice/vmservice.dart"
       },
diff --git a/sdk/lib/libraries.yaml b/sdk/lib/libraries.yaml
index e51582a..e172118 100644
--- a/sdk/lib/libraries.yaml
+++ b/sdk/lib/libraries.yaml
@@ -104,6 +104,9 @@
       uri: "typed_data/typed_data.dart"
       patches: "_internal/vm/lib/typed_data_patch.dart"
 
+    _vm:
+      uri: "_vm/_vm.dart"
+
     _vmservice:
       uri: "vmservice/vmservice.dart"
 
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index b8fc378..501363e 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $runtime == dart_precompiled ]
-VM/digit_separators_t01: SkipByDesign # Debugger is disabled in AOT mode.
+VM/*: SkipByDesign # Debugger is disabled in AOT mode.
 
 [ $runtime == vm ]
 LibTest/collection/ListBase/ListBase_class_A01_t02: Slow, Pass # Does many calls
diff --git a/tests/corelib/uri_test.dart b/tests/corelib/uri_test.dart
index 9274096..3ea566e 100644
--- a/tests/corelib/uri_test.dart
+++ b/tests/corelib/uri_test.dart
@@ -131,12 +131,47 @@
   // Additional tests (not from RFC 3986).
   testResolve("http://a/b/g;p/h;s", "../g;p/h;s");
 
+  base = Uri.parse("http://a?q");
+  testResolve("http://a?p", "?p");
+  testResolve("http://a/b/c", "b/c");
+
+  base = Uri.parse("foo:/a/b?q");
+  testResolve("foo:/a/b?p", "?p");
+  testResolve("foo:/c", "../c");
+  testResolve("foo:/a/c", "c");
+  testResolve("foo:/c", "../../c");
+  testResolve("foo:/c", "/c");
+
   // Test non-URI base (no scheme, no authority, relative path).
   base = Uri.parse("a/b/c?_#_");
   testResolve("a/b/g?q#f", "g?q#f");
   testResolve("../", "../../..");
+  testResolve("./", "../..");
   testResolve("a/b/", ".");
   testResolve("c", "../../c");
+  testResolve("//foo/a", "//foo/a");
+  testResolve("a/b/c?_#f", "#f");
+  testResolve("a/b/c?q", "?q");
+  testResolve("a/b/c?q#c", "?q#c");
+  testResolve("a/b/c?_", "");
+  testResolve("/a", "/a");
+  testResolve("/b", "/a/../../b");
+
+  base = Uri.parse("/a/b?_#_");
+  testResolve("/a/c", "c");
+  testResolve("/c", "../../c");
+
+  base = Uri.parse("//foo/a");
+  testResolve("//foo/b", "b");
+  testResolve("//foo/", "..");
+  testResolve("//foo/c", "../c");
+  testResolve("s:/a/b", "s:/a/b");
+  testResolve("//bar/b", "//bar/b");
+
+  base = Uri.parse("?_#_");
+  testResolve("?q", "?q");
+  testResolve("?_#f", "#f");
+  testResolve("a/b", "a/b");
 
   base = Uri.parse("s:a/b");
   testResolve("s:/c", "../c");
diff --git a/tests/ffi/ffi.status b/tests/ffi/ffi.status
index 6b4c9f3..496ccf1 100644
--- a/tests/ffi/ffi.status
+++ b/tests/ffi/ffi.status
@@ -87,7 +87,7 @@
 *: SkipByDesign # FFI is a VM-only feature. (This test suite is part of the default set.)
 
 [ $arch == simarm64_arm64 || $sanitizer == asan || $sanitizer == msan || $sanitizer == tsan ]
-many_listener_callbacks_test/*: Pass, ExtraSlow
+many_listener_callbacks_test: Pass, Slow
 
 # These tests trigger and catch an abort (intentionally) and terminate the VM.
 # They're incompatible with ASAN because not all memory is freed when aborting and
diff --git a/tests/ffi/isolate_group_bound_captured_local_test.dart b/tests/ffi/isolate_group_bound_captured_local_test.dart
index 8113aee..b4cbe59 100644
--- a/tests/ffi/isolate_group_bound_captured_local_test.dart
+++ b/tests/ffi/isolate_group_bound_captured_local_test.dart
@@ -9,9 +9,6 @@
 
 import 'dart:async';
 import 'dart:ffi';
-import 'dart:isolate';
-
-import 'package:dart_internal/isolate_group.dart' show IsolateGroup;
 
 import "package:expect/async_helper.dart";
 import "package:expect/expect.dart";
@@ -19,8 +16,10 @@
 typedef CallbackNativeType = Void Function(Int64, Int32);
 
 Future<void> testCapturedLocalVarNoDecoration() async {
+  // ignore: unused_local_variable
   int foo_result = 42;
   Expect.throws(() {
+    // ignore: unused_local_variable
     final callback = NativeCallable<CallbackNativeType>.isolateGroupBound((
       int a,
       int b,
@@ -32,6 +31,7 @@
 
 Future<void> testCapturedLocalVarPragmaVmShared() async {
   @pragma('vm:shared')
+  // ignore: unused_local_variable
   int foo_result = 42;
   final callback = NativeCallable<CallbackNativeType>.isolateGroupBound((
     int a,
diff --git a/tests/ffi/isolate_group_bound_init_test.dart b/tests/ffi/isolate_group_bound_init_test.dart
index 28fe475..b784d31 100644
--- a/tests/ffi/isolate_group_bound_init_test.dart
+++ b/tests/ffi/isolate_group_bound_init_test.dart
@@ -14,14 +14,11 @@
 
 import 'dart:async';
 import 'dart:concurrent';
-import 'dart:ffi';
-import 'dart:io';
 import 'dart:isolate';
 
 import 'package:dart_internal/isolate_group.dart' show IsolateGroup;
 import "package:expect/async_helper.dart";
 import "package:expect/expect.dart";
-import 'package:ffi/ffi.dart';
 
 @pragma('vm:shared')
 late final Mutex mutex;
@@ -60,7 +57,7 @@
     }
   });
   for (int i = 0; i < nWorkers; i++) {
-    Isolate.spawn(
+    await Isolate.spawn(
       (sendPort) {
         @pragma('vm:shared')
         final sp = sendPort;
@@ -100,7 +97,7 @@
       print('errorCounter: $errorCounter, error: $e');
     });
   for (int i = 0; i < nWorkers; i++) {
-    Isolate.spawn(
+    await Isolate.spawn(
       (sendPort) {
         @pragma('vm:shared')
         final sp = sendPort;
diff --git a/tests/ffi/isolate_group_bound_lazy_deopt_test.dart b/tests/ffi/isolate_group_bound_lazy_deopt_test.dart
index 56dec02..7084a47 100644
--- a/tests/ffi/isolate_group_bound_lazy_deopt_test.dart
+++ b/tests/ffi/isolate_group_bound_lazy_deopt_test.dart
@@ -28,6 +28,7 @@
 T1(C c, bool b) {
   try {
     AA(c, b);
+    // ignore: nullable_type_in_catch_clause
   } on dynamic {}
   return c.x + 1;
 }
diff --git a/tests/ffi/run_isolate_group_run_test.dart b/tests/ffi/run_isolate_group_run_test.dart
index 1e2e7f7..09d1a0a 100644
--- a/tests/ffi/run_isolate_group_run_test.dart
+++ b/tests/ffi/run_isolate_group_run_test.dart
@@ -13,8 +13,10 @@
 // VMOptions=--experimental-shared-data --profiler --profile_vm=false
 
 import 'package:dart_internal/isolate_group.dart' show IsolateGroup;
+import 'dart:convert';
 import 'dart:developer';
 import 'dart:isolate';
+import 'dart:math';
 
 import "package:expect/expect.dart";
 
@@ -82,6 +84,9 @@
 @pragma('vm:shared')
 String default_tag = "";
 
+@pragma('vm:shared')
+double pi = 3.14159;
+
 main(List<String> args) {
   IsolateGroup.runSync(() {
     final l = <int>[];
@@ -247,5 +252,32 @@
   });
   Expect.notEquals("", default_tag);
 
+  final result = IsolateGroup.runSync(() {
+    return pi.toString();
+  });
+  Expect.equals("3.14159", result);
+  final resultIdentical = IsolateGroup.runSync(() {
+    return identical(pi.toString(), pi.toString());
+  });
+  Expect.isTrue(resultIdentical);
+
+  Expect.listEquals(
+    "abcdefghijklmnopqrstuvwxyz".codeUnits,
+    IsolateGroup.runSync(() {
+      return Base64Decoder().convert("YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=");
+    }),
+  );
+
+  IsolateGroup.runSync(() {
+    Random().nextInt(10);
+  });
+
+  Expect.listEquals(
+    [0x31, 0x32, 0x33, 0x61, 0x62, 0x63],
+    IsolateGroup.runSync(
+      () => Encoding.getByName("us-ascii")!.encode("123abc"),
+    ),
+  );
+
   print("All tests completed :)");
 }
diff --git a/tests/ffi/vmspecific_native_finalizer_api_calls_test.dart b/tests/ffi/vmspecific_native_finalizer_api_calls_test.dart
new file mode 100644
index 0000000..ed63b24
--- /dev/null
+++ b/tests/ffi/vmspecific_native_finalizer_api_calls_test.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// SharedObjects=ffi_test_functions
+//
+// VMOptions=--trace-finalizers
+
+import 'dart:ffi';
+
+import 'dylib_utils.dart';
+import 'ffi_test_helpers.dart';
+
+void main() {
+  testDeletePersistentHandleFromFinalizer();
+  testDeleteWeakPersistentHandleFromFinalizer();
+  print('Done.');
+}
+
+final ffiTestFunctions = dlopenPlatformSpecific('ffi_test_functions');
+
+// C functions.
+final newPersistentHandle = ffiTestFunctions
+    .lookupFunction<
+      Pointer<Void> Function(Handle),
+      Pointer<Void> Function(Object)
+    >('NewPersistentHandle');
+
+final deletePersistentHandleFinalizer = ffiTestFunctions
+    .lookup<NativeFunction<Void Function(Pointer<Void>)>>(
+      'DeletePersistentHandleFinalizer',
+    );
+
+final newWeakPersistentHandle = ffiTestFunctions
+    .lookupFunction<
+      Pointer<Void> Function(Handle),
+      Pointer<Void> Function(Object)
+    >('NewWeakPersistentHandle');
+
+final deleteWeakPersistentHandleFinalizer = ffiTestFunctions
+    .lookup<NativeFunction<Void Function(Pointer<Void>)>>(
+      'DeleteWeakPersistentHandleFinalizer',
+    );
+
+class MyClass {
+  final int a;
+  MyClass(this.a);
+}
+
+class MyFinalizable implements Finalizable {
+  final int a;
+  MyFinalizable(this.a);
+}
+
+void testDeletePersistentHandleFromFinalizer() {
+  final finalizer = NativeFinalizer(deletePersistentHandleFinalizer);
+  final objectToKeepAlive = MyClass(1);
+  final persistentHandle = newPersistentHandle(objectToKeepAlive);
+  var gcObject = MyFinalizable(2);
+  finalizer.attach(gcObject, persistentHandle, detach: gcObject);
+
+  // Lose the object, the finalizer should run.
+  gcObject = MyFinalizable(3);
+  doGC();
+  // Test passes if it does not crash.
+}
+
+void testDeleteWeakPersistentHandleFromFinalizer() {
+  final finalizer = NativeFinalizer(deleteWeakPersistentHandleFinalizer);
+  final objectToKeepAlive = MyClass(1);
+  final weakHandle = newWeakPersistentHandle(objectToKeepAlive);
+
+  var gcObject = MyFinalizable(2);
+  finalizer.attach(gcObject, weakHandle, detach: gcObject);
+
+  // Lose the object, the finalizer should run.
+  gcObject = MyFinalizable(3);
+  doGC();
+  // Test passes if it does not crash.
+}
diff --git a/tests/ffi/vmspecific_native_finalizer_isolates_test.dart b/tests/ffi/vmspecific_native_finalizer_isolates_test.dart
index aa27420..3ecf2f8 100644
--- a/tests/ffi/vmspecific_native_finalizer_isolates_test.dart
+++ b/tests/ffi/vmspecific_native_finalizer_isolates_test.dart
@@ -20,6 +20,8 @@
   await testSendAndExitFinalizable();
   await testSendAndExitFinalizer();
   await testFinalizerRunsOnIsolateShutdown();
+  await testDeletePersistentHandleOnIsolateShutdown();
+  await testDeleteWeakPersistentHandleOnIsolateShutdown();
   print('End of test, shutting down.');
 }
 
@@ -48,6 +50,60 @@
   });
 }
 
+void runIsolateDeletePersistentHandleOnShutdown(int objectAddress) {
+  final finalizer = NativeFinalizer(deletePersistentHandleFinalizer);
+  final persistentHandle = Pointer<Void>.fromAddress(objectAddress);
+  final objectToFinalize = MyFinalizableObject();
+  finalizer.attach(
+    objectToFinalize,
+    persistentHandle,
+    detach: objectToFinalize,
+  );
+}
+
+Future<void> testDeletePersistentHandleOnIsolateShutdown() async {
+  final objectToKeepAlive =
+      Object(); // Keep a strong reference to ensure the handle stays alive
+  final persistentHandle = newPersistentHandle(objectToKeepAlive);
+  final portExitMessage = ReceivePort();
+  await Isolate.spawn(
+    runIsolateDeletePersistentHandleOnShutdown,
+    persistentHandle.address,
+    onExit: portExitMessage.sendPort,
+  );
+  await portExitMessage.first; // Wait for the isolate to exit
+  doGC();
+
+  // The test passes if no crash occurred. We can't directly verify the handle deletion
+  // from outside the isolate, but the lack of a crash indicates success.
+  print('Persistent handle deletion test on shutdown completed cleanly.');
+}
+
+void runIsolateDeleteWeakPersistentHandleOnShutdown(int objectAddress) {
+  final finalizer = NativeFinalizer(deleteWeakPersistentHandleFinalizer);
+  final weakHandle = Pointer<Void>.fromAddress(objectAddress);
+  final objectToFinalize = MyFinalizableObject();
+  finalizer.attach(objectToFinalize, weakHandle, detach: objectToFinalize);
+  print('Isolate for weak persistent handle deletion done.');
+}
+
+Future<void> testDeleteWeakPersistentHandleOnIsolateShutdown() async {
+  final objectToKeepAlive =
+      Object(); // Keep a strong reference to ensure the handle stays alive
+  final weakHandle = newWeakPersistentHandle(objectToKeepAlive);
+  final portExitMessage = ReceivePort();
+  await Isolate.spawn(
+    runIsolateDeleteWeakPersistentHandleOnShutdown,
+    weakHandle.address,
+    onExit: portExitMessage.sendPort,
+  );
+  await portExitMessage.first; // Wait for the isolate to exit
+  doGC();
+
+  // The test passes if no crash occurred.
+  print('Weak persistent handle deletion test on shutdown completed cleanly.');
+}
+
 Future<void> testSendAndExitFinalizable() async {
   final receivePort = ReceivePort();
   await Isolate.spawn((SendPort sendPort) {
@@ -75,3 +131,27 @@
   final result = await receivePort.first;
   Expect.contains("Invalid argument: is unsendable", result);
 }
+
+final newPersistentHandle = ffiTestFunctions
+    .lookupFunction<
+      Pointer<Void> Function(Handle),
+      Pointer<Void> Function(Object)
+    >('NewPersistentHandle');
+
+final deletePersistentHandleFinalizer = ffiTestFunctions
+    .lookup<NativeFunction<Void Function(Pointer<Void>)>>(
+      'DeletePersistentHandleFinalizer',
+    );
+
+final newWeakPersistentHandle = ffiTestFunctions
+    .lookupFunction<
+      Pointer<Void> Function(Handle),
+      Pointer<Void> Function(Object)
+    >('NewWeakPersistentHandle');
+
+final deleteWeakPersistentHandleFinalizer = ffiTestFunctions
+    .lookup<NativeFunction<Void Function(Pointer<Void>)>>(
+      'DeleteWeakPersistentHandleFinalizer',
+    );
+
+class MyFinalizableObject implements Finalizable {}
diff --git a/tests/hot_reload/change_mixin_member_body/class.0.dart b/tests/hot_reload/change_mixin_member_body/class.0.dart
new file mode 100644
index 0000000..42bfd95
--- /dev/null
+++ b/tests/hot_reload/change_mixin_member_body/class.0.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'mixin.dart';
+
+class C with M {}
diff --git a/tests/hot_reload/change_mixin_member_body/main.0.dart b/tests/hot_reload/change_mixin_member_body/main.0.dart
new file mode 100644
index 0000000..837ed4b
--- /dev/null
+++ b/tests/hot_reload/change_mixin_member_body/main.0.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:reload_test/reload_test_utils.dart';
+
+import 'class.dart';
+import 'mixin.dart';
+
+var c = C();
+
+Future<void> main() async {
+  Expect.equals('hello', c.fn());
+  await hotReload();
+  Expect.equals('goodbye', c.fn());
+}
diff --git a/tests/hot_reload/change_mixin_member_body/mixin.0.dart b/tests/hot_reload/change_mixin_member_body/mixin.0.dart
new file mode 100644
index 0000000..8e66670
--- /dev/null
+++ b/tests/hot_reload/change_mixin_member_body/mixin.0.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 M {
+  String fn() {
+    return 'hello';
+  }
+}
diff --git a/tests/hot_reload/change_mixin_member_body/mixin.1.dart b/tests/hot_reload/change_mixin_member_body/mixin.1.dart
new file mode 100644
index 0000000..9ca7035
--- /dev/null
+++ b/tests/hot_reload/change_mixin_member_body/mixin.1.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 M {
+  String fn() {
+    return 'goodbye';
+  }
+}
+
+/** DIFF **/
+/*
+ 
+ mixin M {
+   String fn() {
+-    return 'hello';
++    return 'goodbye';
+   }
+ }
+*/
diff --git a/tests/language/declaring_constructors/body/extension_type_error_test.dart b/tests/language/declaring_constructors/body/extension_type_error_test.dart
deleted file mode 100644
index 660b4e0..0000000
--- a/tests/language/declaring_constructors/body/extension_type_error_test.dart
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It's a compile-time error if an extension type does not contain a declaring
-// constructor that has exactly one declaring parameter which is final. This is
-// the test for in-body constructors.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-extension type ET1 {
-  this(var int i);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type ET2 {
-  this(var i);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type ET3 {
-  this(i);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type ET4 {
-  this(final i, final x);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type ET5 {
-  this(int i, int x);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type ET6 {
-  this(int i);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/body/extension_type_test.dart b/tests/language/declaring_constructors/body/extension_type_test.dart
deleted file mode 100644
index bc24a80..0000000
--- a/tests/language/declaring_constructors/body/extension_type_test.dart
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// An in-body declaring constructor in an extension type can have additional
-// parameters, as long as exactly one parameter is declaring and is `final`.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-extension type ET1 {
-  this(final int i);
-}
-
-extension type ET2 {
-  this(int i, final int x);
-}
-
-extension type ET3 {
-  this(int i, final x);
-}
-
-extension type ET4 {
-  this(final i);
-}
-
-void main() {
-  Expect.equals(1, ET1(1).i);
-  Expect.equals(2, ET2(1, 2).x);
-  Expect.equals(2, ET3(1, 2).x);
-  Expect.equals(1, ET4(1).i);
-}
diff --git a/tests/language/declaring_constructors/body/in_body_initializer_test.dart b/tests/language/declaring_constructors/body/in_body_initializer_test.dart
deleted file mode 100644
index 8cb6092..0000000
--- a/tests/language/declaring_constructors/body/in_body_initializer_test.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 declaring body constructor can have a body and an initializer list as well
-// as initializing formals, just like other constructors in the body.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-class C1 {
-  int y;
-  this(final int x) : y = x;
-}
-
-class C2 {
-  this(final int x) : assert(x > 0);
-}
-
-class C3 extends C1 {
-  // Will override the `x` instance variable in `C1`.
-  this(final int x) : super(x + 1);
-}
-
-class C4 extends C1 {
-  int y;
-  this(int z) : y = z, assert(z > 0), super(z + 1);
-}
-
-extension type Ext1 {
-  this(final int x) : assert(x > 0);
-}
-
-enum Enum1 {
-  e(1);
-
-  const this(final int x) : assert(x > 0);
-}
-
-enum const Enum2 {
-  e(1);
-
-  final int y;
-  this(final int x) : y = x;
-}
-
-void main() {
-  Expect.equals(1, C1(1).x);
-  Expect.equals(1, C1(1).y);
-
-  Expect.equals(1, C2(1).x);
-
-  Expect.equals(1, C3(1).x);
-
-  Expect.equals(2, C4(1).x);
-  Expect.equals(1, C4(1).y);
-
-  Expect.equals(1, Ext1(1).x);
-
-  Expect.equals(1, Enum1.e.x);
-  Expect.equals(1, Enum2.e.x);
-}
diff --git a/tests/language/declaring_constructors/body/optional_parameter_nonconstant_default_error_test.dart b/tests/language/declaring_constructors/body/optional_parameter_nonconstant_default_error_test.dart
deleted file mode 100644
index 596a1ff..0000000
--- a/tests/language/declaring_constructors/body/optional_parameter_nonconstant_default_error_test.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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=declaring-constructors
-
-// Tests that declaring constructors with optional parameters cannot have
-// non-constant default values in a body declaring constructor.
-
-int f() => 0;
-
-class C {
-  this([int x = f()]);
-  //            ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-enum E {
-  e;
-
-  const this([int x = f()]) {}
-  //                  ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/header/extension_type_error_test.dart b/tests/language/declaring_constructors/header/extension_type_error_test.dart
deleted file mode 100644
index c047379..0000000
--- a/tests/language/declaring_constructors/header/extension_type_error_test.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is a compile-time error if an extension type does not contain a declaring
-// constructor that has exactly one declaring parameter which is final. This is
-// the test for in-header constructors
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-extension type ET1(var int i);
-//                 ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-extension type ET2(var i);
-//                 ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-extension type ET3(final i, final x);
-//                 ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-// Two `final` declaring parameters are inferred.
-extension type ET4(int i, int x);
-//                 ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-// A final modifier on the first parameter is inferred.
-extension type ET5(int i, final x);
-//                 ^
-// [analyzer] unspecified
-// [cfe] unspecified
diff --git a/tests/language/declaring_constructors/header/extension_type_test.dart b/tests/language/declaring_constructors/header/extension_type_test.dart
deleted file mode 100644
index 08196ae..0000000
--- a/tests/language/declaring_constructors/header/extension_type_test.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 modifier `final` on the representation variable in an extension type
-// primary constructor can be specified or omitted.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-extension type ET1(int i);
-
-extension type ET2(final int i);
-
-extension type ET3(i);
-
-extension type ET4(final i);
-
-void main() {
-  Expect.equals(1, ET1(1).i);
-  Expect.equals(1, ET2(1).i);
-  Expect.equals(1, ET3(1).i);
-  Expect.equals(1, ET4(1).i);
-}
diff --git a/tests/language/declaring_constructors/header/header_generative_constructor_error_test.dart b/tests/language/declaring_constructors/header/header_generative_constructor_error_test.dart
deleted file mode 100644
index ad026ca..0000000
--- a/tests/language/declaring_constructors/header/header_generative_constructor_error_test.dart
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 class that has a declaring header constructor cannot have any other
-// non-redirecting generative constructors.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1(var int x) {
-  C1.named(this.x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C2(final int x) {
-  C2.named(this.x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C3(int x) {
-  C3.named(int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-class C4() {
-  C4.named(int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C5.named(var int x) {
-  C5(this.x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C6.named(final int x) {
-  C6(this.x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C7.named(int x) {
-  C7(int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C8.named() {
-  C8(int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/header/header_generative_constructor_test.dart b/tests/language/declaring_constructors/header/header_generative_constructor_test.dart
deleted file mode 100644
index e750b07..0000000
--- a/tests/language/declaring_constructors/header/header_generative_constructor_test.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 class that has a declaring header constructor can have redirecting
-// generative constructors and factory constructors.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-class C1(final int x) {
-  C1.redirecting(int x): this(x);
-}
-
-class C2.named(final int x) {
-  C2.redirecting(int x): this.named(x);
-}
-
-class C3(final int x) {
-  factory C3.from(int value) => C3(value * 2);
-}
-
-void main() {
-  Expect.equals(1, C1.redirecting(1).x);
-  Expect.equals(2, C2.redirecting(2).x);
-  Expect.equals(6, C3.from(3).x);
-}
diff --git a/tests/language/declaring_constructors/header/in_body_initializer_test.dart b/tests/language/declaring_constructors/header/in_body_initializer_test.dart
deleted file mode 100644
index d65db43..0000000
--- a/tests/language/declaring_constructors/header/in_body_initializer_test.dart
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 declaring header constructor can have a body and/or an initializer list.
-// These elements are placed in the class body in a declaration that provides
-// "the rest" of the constructor declaration which is given in the header.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-class C1(final int x) {
-  int y;
-  this : y = x;
-}
-
-class C2(final int x) {
-  this : assert(x > 0);
-}
-
-class C3(final int x) extends C1 {
-  // Will override the `x` instance variable in `C1`.
-  this : super(x + 1);
-}
-
-class C4(int z) extends C1 {
-  int y;
-  this : y = z, assert(z > 0), super(z + 1);
-}
-
-extension type Ext1(final int x) {
-  this : assert(x > 0);
-}
-
-enum const Enum1(final int x) {
-  e(1);
-
-  this : assert(x > 0);
-}
-
-enum const Enum2(final int x) {
-  e(1);
-
-  final int y;
-  this : y = x;
-}
-
-void main() {
-  Expect.equals(1, C1(1).x);
-  Expect.equals(1, C1(1).y);
-
-  Expect.equals(1, C2(1).x);
-
-  Expect.equals(1, C3(1).x);
-
-  Expect.equals(2, C4(1).x);
-  Expect.equals(1, C4(1).y);
-
-  Expect.equals(1, Ext1(1).x);
-
-  Expect.equals(1, Enum1.e.x);
-  Expect.equals(1, Enum2.e.x);
-}
diff --git a/tests/language/declaring_constructors/header/optional_parameter_nonconstant_default_error_test.dart b/tests/language/declaring_constructors/header/optional_parameter_nonconstant_default_error_test.dart
deleted file mode 100644
index 678bbf5..0000000
--- a/tests/language/declaring_constructors/header/optional_parameter_nonconstant_default_error_test.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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=declaring-constructors
-
-// Tests that declaring constructors with optional parameters cannot have
-// non-constant default values in a header declaring constructor.
-
-int f() => 0;
-
-class C([int x = f()]);
-  //             ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-
-enum E([int x = f()]) {
-  //            ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  e;
-}
diff --git a/tests/language/declaring_constructors/syntax/body_syntax_test.dart b/tests/language/declaring_constructors/syntax/body_syntax_test.dart
deleted file mode 100644
index 31feff0..0000000
--- a/tests/language/declaring_constructors/syntax/body_syntax_test.dart
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 basic declaring body constructor.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-class Point {
-  this(var int x, var int y);
-}
-
-class PointFinal {
-  this(final int x, final int y);
-}
-
-// Constant constructors.
-class CConst {
-  const this(final int x);
-}
-
-extension type ExtConst {
-  const this(final int x);
-}
-
-enum EnumConst {
-  e(1);
-
-  const this(final int x);
-}
-
-// Initializing parameters.
-class CInitParameters {
-  late int y;
-  this(this.y);
-}
-
-// Super parameters.
-class C1(final int y);
-class CSuperParameters extends C1{
-  this(final int x, super.y);
-}
-
-// Named parameters (regular and required).
-class CNamedParameters {
-  this({final int x = 1, required var int y});
-}
-
-enum EnumNamedParameters {
-  e(x: 2, y: 3), f(y: 3);
-
-  const this({final int x = 1, required var int y});
-}
-
-// Optional parameters.
-class COptionalParameters {
-  this([final int x = 1, var int y = 2]);
-}
-
-enum EnumOptionalParameters {
-  e(3, 4), f(3), g();
-
-  const this([final int x = 1, var int y = 2]);
-}
-
-// TODO(kallentu): Add tests for the type being inferred from the default value.
-
-void main() {
-  var p1 = Point(1, 2);
-  Expect.equals(1, p1.x);
-  Expect.equals(2, p1.y);
-
-  p1.x = 3;
-  Expect.equals(3, p1.x);
-
-  var p2 = PointFinal(3, 4);
-  Expect.equals(3, p2.x);
-  Expect.equals(4, p2.y);
-
-  Expect.equals(1, const CConst(1).x);
-
-  Expect.equals(1, const ExtConst(1).x);
-
-  Expect.equals(1, const EnumConst.e.x);
-
-  Expect.equals(1, CInitParameters(1).y);
-
-  Expect.equals(1, CSuperParameters(1, 2).x);
-  Expect.equals(2, CSuperParameters(1, 2).y);
-
-  Expect.equals(1, CNamedParameters(y: 2).x);
-  Expect.equals(2, CNamedParameters(y: 2).y);
-
-  Expect.equals(2, const EnumNamedParameters.e.x);
-  Expect.equals(3, const EnumNamedParameters.e.y);
-  Expect.equals(1, const EnumNamedParameters.f.x);
-  Expect.equals(3, const EnumNamedParameters.f.y);
-
-  Expect.equals(1, COptionalParameters().x);
-  Expect.equals(2, COptionalParameters().y);
-
-  Expect.equals(3, const EnumOptionalParameters.e.x);
-  Expect.equals(4, const EnumOptionalParameters.e.y);
-  Expect.equals(3, const EnumOptionalParameters.f.x);
-  Expect.equals(2, const EnumOptionalParameters.f.y);
-  Expect.equals(1, const EnumOptionalParameters.g.x);
-  Expect.equals(2, const EnumOptionalParameters.g.y);
-}
diff --git a/tests/language/declaring_constructors/syntax/class_header_test.dart b/tests/language/declaring_constructors/syntax/class_header_test.dart
deleted file mode 100644
index f5cef1e..0000000
--- a/tests/language/declaring_constructors/syntax/class_header_test.dart
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 declaring constructors with various clauses.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import "package:expect/expect.dart";
-
-// Generics
-class GenericsHeader<T>(final T x);
-class GenericsBody<T> {
-  this(final T x);
-}
-
-// Extends
-class Base {}
-
-class ExtendsHeader(final int x) extends Base;
-class ExtendsBody extends Base {
-  this(final int x);
-}
-
-// Implements
-abstract class Interface {
-  int method();
-}
-
-class ImplementsHeader(final int x) implements Interface {
-  @override
-  int method() => x + 1;
-}
-class ImplementsBody implements Interface {
-  this(final int x);
-
-  @override
-  int method() => x + 1;
-}
-
-// With
-mixin Mixin {}
-
-class WithHeader(final int x) with Mixin;
-class WithBody with Mixin {
-  this(final int x);
-}
-
-// Combination
-class AllHeader<T>(final T x) extends Base with Mixin implements Interface {
-  @override
-  int method() => 1;
-}
-
-class AllBody<T> extends Base with Mixin implements Interface {
-  this(final T x);
-
-  @override
-  int method() => 1;
-}
-
-void main() {
-  Expect.equals(1, GenericsHeader<int>(1).x);
-  Expect.equals("str", GenericsBody<String>("str").x);
-  Expect.equals(1, ExtendsHeader(1).x);
-  Expect.equals(1, ExtendsBody(1).x);
-  Expect.equals(2, ImplementsHeader(1).method());
-  Expect.equals(1, ImplementsHeader(1).x);
-  Expect.equals(2, ImplementsBody(1).method());
-  Expect.equals(1, ImplementsBody(1).x);
-  Expect.equals(1, WithHeader(1).x);
-  Expect.equals(1, WithBody(1).x);
-  Expect.equals(1, AllHeader<int>(1).method());
-  Expect.equals(1, AllHeader<int>(1).x);
-  Expect.equals(1, AllBody<int>(1).method());
-  Expect.equals(1, AllBody<int>(1).x);
-}
diff --git a/tests/language/declaring_constructors/syntax/const_in_header_and_body_error_test.dart b/tests/language/declaring_constructors/syntax/const_in_header_and_body_error_test.dart
deleted file mode 100644
index de1fdd2..0000000
--- a/tests/language/declaring_constructors/syntax/const_in_header_and_body_error_test.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is an error to have the `const` keyword on both the header and body
-// part of a declaring constructor.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class const C1(final int x) {
-  const this : assert(1 != 2);
-  //^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-sealed class const C2(final int x) {
-  const this : assert(1 != 2);
-  //^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type const C(int x) {
-  const this : assert(1 != 2);
-  //^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-enum const E1(final int x) {
-  one(x: 1);
-  const this : assert(x != 2);
-  //^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/covariant_super_this_error_test.dart b/tests/language/declaring_constructors/syntax/covariant_super_this_error_test.dart
deleted file mode 100644
index 73ec92f..0000000
--- a/tests/language/declaring_constructors/syntax/covariant_super_this_error_test.dart
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 compile-time error occurs if the formal parameter contains a term of the
-// form `this.v`, or `super.v` where `v` is an identifier, and the parameter has
-// the modifier `covariant`.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-// `covariant` with `this.x`
-
-// In-header declaring constructor
-class C1(covariant this.x) {
-  //      ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  int x;
-}
-
-
-class C2({covariant this.x}) {
-  //      ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  int? x;
-}
-
-class C3({required covariant this.x}) {
-  //      ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  int x;
-}
-
-class C4([covariant this.x]) {
-  //      ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  int? x;
-}
-
-// In-body declaring constructor
-class C5 {
-  int? x;
-  this(covariant this.x);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C6 {
-  int x;
-  this({covariant this.x});
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C7 {
-  int x;
-  this({required covariant this.x});
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C8 {
-  int? x;
-  this([covariant this.x]);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-// `covariant` with `super.x`
-
-class A(final int? x);
-
-// In-header declaring constructor
-class C9(covariant super.x) extends A;
-//                 ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C10({covariant super.x}) extends A;
-//                        ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C11({required covariant super.x}) extends A;
-//                                ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C12([covariant super.x]) extends A;
-//                           ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-// In-body declaring constructor
-class C13 extends A {
-  this(covariant super.x);
-  //  ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C14 extends A {
-  this({covariant super.x});
-  //  ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C15 extends A {
-  this({required covariant super.x});
-  //  ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C16 extends A {
-  this([covariant super.x]);
-  //  ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/covariant_var_test.dart b/tests/language/declaring_constructors/syntax/covariant_var_test.dart
deleted file mode 100644
index 7365064..0000000
--- a/tests/language/declaring_constructors/syntax/covariant_var_test.dart
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Allow the modifier `covariant` in declaring parameters.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-class A {}
-class B extends A {}
-
-class C1(covariant var A x);
-class D1(var B x) implements C1;
-
-class C2({covariant var A? x});
-class D2({var B? x}) implements C2;
-
-class C3({required covariant var A x});
-class D3({required var B x}) implements C2;
-
-class C4([covariant var A? x]);
-class D4([var B? x]) implements C2;
-
-class C5 {
-  this(covariant var A x);
-}
-class D5 implements C5 {
-  this(var B x);
-}
-
-class C6 {
-  this({covariant var A? x});
-}
-class D6 {
-  this({var B? x});
-}
-
-class C7 {
-  this({required covariant var A x});
-}
-class D7 {
-  this({required var B x});
-}
-
-class C8 {
-  this([covariant var A? x]);
-}
-class D8 {
-  this([var B? x]);
-}
-
-void main() {
-  A a = A();
-  B b = B();
-
-  // In-header
-  Expect.equals(a, C1(a).x);
-  Expect.equals(b, D1(b).x);
-
-  Expect.equals(a, C2(x: a).x);
-  Expect.equals(b, D2(x: b).x);
-
-  Expect.equals(a, C3(x: a).x);
-  Expect.equals(b, D3(x: b).x);
-
-  Expect.equals(a, C4(a).x);
-  Expect.equals(b, D4(b).x);
-
-  // In-body
-  Expect.equals(a, C5(a).x);
-  Expect.equals(b, D5(b).x);
-
-  Expect.equals(a, C6(x: a).x);
-  Expect.equals(b, D6(x: b).x);
-
-  Expect.equals(a, C7(x: a).x);
-  Expect.equals(b, D7(x: b).x);
-
-  Expect.equals(a, C8(a).x);
-  Expect.equals(b, D8(b).x);
-}
diff --git a/tests/language/declaring_constructors/syntax/covariant_with_final_error_test.dart b/tests/language/declaring_constructors/syntax/covariant_with_final_error_test.dart
deleted file mode 100644
index 268162e..0000000
--- a/tests/language/declaring_constructors/syntax/covariant_with_final_error_test.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is an error for a formal parameter to be both `covariant` and `final`.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1(covariant final int x);
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C2({covariant final int? x = 1});
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C3({required covariant final int x});
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C4([covariant final int? x]);
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C5 {
-  this(covariant final int x);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C6 {
-  this({covariant final int? x});
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C7 {
-  this({required covariant final int x});
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C8 {
-  this([covariant final int? x]);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type E1(covariant final int x);
-//                ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-extension type E2(covariant int x);
-//                ^
-// [analyzer] unspecified
-// [cfe] unspecified
diff --git a/tests/language/declaring_constructors/syntax/covariant_without_var_error_test.dart b/tests/language/declaring_constructors/syntax/covariant_without_var_error_test.dart
deleted file mode 100644
index b141b5c..0000000
--- a/tests/language/declaring_constructors/syntax/covariant_without_var_error_test.dart
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is an error for a formal parameter to have the `covariant` modifier
-// but not the `var` modifier.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1(covariant int x);
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C2({covariant int? x});
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C3({required covariant int x});
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C4([covariant int? x]);
-//      ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-
-class C5 {
-  this(covariant int x);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C6 {
-  this({covariant int? x});
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C7 {
-  this({required covariant int x});
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C8 {
-  this([covariant int? x]);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/declaring_header_body_error_test.dart b/tests/language/declaring_constructors/syntax/declaring_header_body_error_test.dart
deleted file mode 100644
index aacc999..0000000
--- a/tests/language/declaring_constructors/syntax/declaring_header_body_error_test.dart
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is an error to have a declaring parameter list both in the header and in
-// the body.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1(var int x) {
-  this(var int y);
-  //    ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-class C2(final int x) {
-  this(final int y);
-  //    ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/empty_body_error_test.dart b/tests/language/declaring_constructors/syntax/empty_body_error_test.dart
deleted file mode 100644
index d3ad64b..0000000
--- a/tests/language/declaring_constructors/syntax/empty_body_error_test.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// For mixins, an empty body, `{}`, cannot be replaced by `;`. Enums require a
-// non-empty declaration.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1;
-
-mixin M1;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M2 implements C1;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M3 on C1;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-enum E1;
-//   ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-enum E2(final int x);
-//   ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-enum const E3;
-//   ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-enum const E4(final int x);
-//   ^
-// [analyzer] unspecified
-// [cfe] unspecified
diff --git a/tests/language/declaring_constructors/syntax/empty_body_test.dart b/tests/language/declaring_constructors/syntax/empty_body_test.dart
deleted file mode 100644
index 25c6ed4..0000000
--- a/tests/language/declaring_constructors/syntax/empty_body_test.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// An empty class body, `{}`, can be replaced by `;`.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1;
-
-class C2 with M1;
-
-class C3(var int x) extends C1;
-
-mixin class M1 implements C1;
-
-mixin class M2;
-
-extension type E1(int x);
-
-extension type const E2(int x);
-
-void main() {
-  print(C1());
-  print(C2());
-  print(C3(1));
-  print(E1(1));
-  print(E2(1));
-}
diff --git a/tests/language/declaring_constructors/syntax/final_formal_parameter_error_test.dart b/tests/language/declaring_constructors/syntax/final_formal_parameter_error_test.dart
deleted file mode 100644
index 660acf67..0000000
--- a/tests/language/declaring_constructors/syntax/final_formal_parameter_error_test.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Declaring any formal parameters with the `final` modifier is a compile-time
-// error.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C {
-  void method(final int x, [final int y = 1]) {}
-  //          ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  //                        ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-enum E(var int x) {
-  e(1);
-  void method(final int x, {required final int y = 1}) {}
-  //          ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  //                                 ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type ET(final int x) {
-  void method(final int x, {final int y = 1}) {}
-  //          ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-  //                        ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-void main() {
-  [1, 4, 6, 8].forEach((final value) => print(value + 2));
-  //                    ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/header_syntax_test.dart b/tests/language/declaring_constructors/syntax/header_syntax_test.dart
deleted file mode 100644
index 389f297..0000000
--- a/tests/language/declaring_constructors/syntax/header_syntax_test.dart
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for 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 basic declaring header constructor.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import 'package:expect/expect.dart';
-
-class Point(var int x, var int y);
-
-class PointFinal(final int x, final int y);
-
-// Constant constructors.
-class const CConst(final int x);
-
-extension type const ExtConst(final int x);
-
-enum const EnumConst(final int x) {
-  e(1);
-}
-
-// Initializing parameters.
-class CInitParameters(this.y) {
-  late int y;
-}
-
-// Super parameters.
-class C1(final int y);
-class CSuperParameters(final int x, super.y) extends C1;
-
-// Named parameters (regular and required).
-class CNamedParameters({final int x = 1, required var int y});
-
-enum EnumNamedParameters({final int x = 1, required var int y}) {
-  e(x: 2, y: 3), f(y: 3);
-}
-
-// Optional parameters.
-class COptionalParameters([final int x = 1, var int y = 2]);
-
-enum EnumOptionalParameters([final int x = 1, var int y = 2]) {
-  e(3, 4), f(3), g();
-}
-
-// TODO(kallentu): Add tests for the type being inferred from the default value.
-
-void main() {
-  var p1 = Point(1, 2);
-  Expect.equals(1, p1.x);
-  Expect.equals(2, p1.y);
-
-  p1.x = 3;
-  Expect.equals(3, p1.x);
-
-  var p2 = PointFinal(3, 4);
-  Expect.equals(3, p2.x);
-  Expect.equals(4, p2.y);
-
-  Expect.equals(1, const CConst(1).x);
-
-  Expect.equals(1, const ExtConst(1).x);
-
-  Expect.equals(1, const EnumConst.e.x);
-
-  Expect.equals(1, CInitParameters(1).y);
-
-  Expect.equals(1, CSuperParameters(1, 2).x);
-  Expect.equals(2, CSuperParameters(1, 2).y);
-
-  Expect.equals(1, CNamedParameters(y: 2).x);
-  Expect.equals(2, CNamedParameters(y: 2).y);
-
-  Expect.equals(2, const EnumNamedParameters.e.x);
-  Expect.equals(3, const EnumNamedParameters.e.y);
-  Expect.equals(1, const EnumNamedParameters.f.x);
-  Expect.equals(3, const EnumNamedParameters.f.y);
-
-  Expect.equals(1, COptionalParameters().x);
-  Expect.equals(2, COptionalParameters().y);
-
-  Expect.equals(3, const EnumOptionalParameters.e.x);
-  Expect.equals(4, const EnumOptionalParameters.e.y);
-  Expect.equals(3, const EnumOptionalParameters.f.x);
-  Expect.equals(2, const EnumOptionalParameters.f.y);
-  Expect.equals(1, const EnumOptionalParameters.g.x);
-  Expect.equals(2, const EnumOptionalParameters.g.y);
-}
diff --git a/tests/language/declaring_constructors/syntax/late_external_error_test.dart b/tests/language/declaring_constructors/syntax/late_external_error_test.dart
deleted file mode 100644
index 3c05ea8..0000000
--- a/tests/language/declaring_constructors/syntax/late_external_error_test.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// `late` and `external` instance variables cannot be introduced by a declaring
-// parameter.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1(late int x, external double d);
-//       ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C2 {
-  this(late int x, external double d);
-  //   ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/late_external_test.dart b/tests/language/declaring_constructors/syntax/late_external_test.dart
deleted file mode 100644
index beab6ab..0000000
--- a/tests/language/declaring_constructors/syntax/late_external_test.dart
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// `late` and `external` must be initialized in the body.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C2(this.x) {
-  late int x;
-  external double d;
-}
-
-class C2 {
-  late int x;
-  external double d;
-  this(this.x);
-}
diff --git a/tests/language/declaring_constructors/syntax/mixin_class_test.dart b/tests/language/declaring_constructors/syntax/mixin_class_test.dart
deleted file mode 100644
index 8868bd1..0000000
--- a/tests/language/declaring_constructors/syntax/mixin_class_test.dart
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Body and header constructor syntax for mixin classes.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-import "package:expect/expect.dart";
-
-class C1 {}
-
-mixin class M1() implements C1;
-
-mixin class M2() on C1;
-
-mixin class M3();
-
-mixin class M4.named();
-
-mixin class M5 {
-  this();
-}
-
-mixin class M6 {
-  this.named();
-}
-
-class C2<T> {}
-
-mixin class M7<T>() implements C2<T>;
-
-mixin class M8<T>() on C2<T>;
-
-mixin class M9<T>();
-
-mixin class M10<T>.named();
-
-mixin class M11<T> {
-  this();
-}
-
-mixin class M12<T> {
-  this.named();
-}
-
-// Used for testing the mixins.
-
-class CImpl1 with M1;
-class CImpl2 extends C1 with M2;
-class CImpl3 with M3;
-class CImpl4 with M4;
-class CImpl5 with M5;
-class CImpl6 with M6;
-class CImpl7<T> with M7<T>;
-class CImpl8<T> extends C2<T> with M8<T>;
-class CImpl9<T> with M9<T>;
-class CImpl10<T> with M10<T>;
-class CImpl11<T> with M11<T>;
-class CImpl12<T> with M12<T>;
-
-void main() {
-  CImpl1();
-  CImpl2();
-  CImpl3();
-  CImpl4();
-  CImpl5();
-  CImpl6();
-  CImpl7<String>();
-  CImpl8<String>();
-  CImpl9<String>();
-  CImpl10<String>();
-  CImpl11<String>();
-  CImpl12<String>();
-}
diff --git a/tests/language/declaring_constructors/syntax/mixin_error_test.dart b/tests/language/declaring_constructors/syntax/mixin_error_test.dart
deleted file mode 100644
index 5992691..0000000
--- a/tests/language/declaring_constructors/syntax/mixin_error_test.dart
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Mixins cannot have declaring header/body constructors.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1;
-
-mixin M1(var int x) implements C1;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M2(final int x) on C1;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M3(int x);
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M4.named(int x);
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M5();
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M6.named();
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M7 {
-  this(var int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M8 {
-  this(final int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M9 {
-  this(int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M10 {
-  this.named(int x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M11 {
-  this();
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M12 {
-  this.named();
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-class C2<T>;
-
-mixin M13<T>(var T x) implements C2<T>;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M14<T>(final T x) on C2<T>;
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M15<T>(T x);
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M16<T>.named(T x);
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M17<T>();
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M18<T>.named();
-//    ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-mixin M19<T> {
-  this(var T x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M20<T> {
-  this(final T x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M21<T> {
-  this(T x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M22<T> {
-  this.named(T x);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M23<T> {
-  this();
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
-
-mixin M24<T> {
-  this.named();
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified)
-}
diff --git a/tests/language/declaring_constructors/syntax/multiple_declaring_constructors_error_test.dart b/tests/language/declaring_constructors/syntax/multiple_declaring_constructors_error_test.dart
deleted file mode 100644
index 1feaf78..0000000
--- a/tests/language/declaring_constructors/syntax/multiple_declaring_constructors_error_test.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It's an error for a class to have two or more declaring constructors.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C {
-  this(var int x);
-  this.named(var int y);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type E(final int x){
-  this(final int y);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
-
-extension type E(final int x){
-  this.named(final int y);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/no_parameter_list_error_test.dart b/tests/language/declaring_constructors/syntax/no_parameter_list_error_test.dart
deleted file mode 100644
index a17eb9f..0000000
--- a/tests/language/declaring_constructors/syntax/no_parameter_list_error_test.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is an error to have a declaring constructor in the class body, but
-// no declaring parameter list, neither in the header nor in the body.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C {
-  this : assert(1 != 2);
-  // ^
-  // [analyzer] unspecified
-  // [cfe] unspecified
-}
diff --git a/tests/language/declaring_constructors/syntax/required_with_default_error_test.dart b/tests/language/declaring_constructors/syntax/required_with_default_error_test.dart
deleted file mode 100644
index 9264236..0000000
--- a/tests/language/declaring_constructors/syntax/required_with_default_error_test.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// It is an error for a named parameter to be both `required` and have a
-// default value.
-
-// SharedOptions=--enable-experiment=declaring-constructors
-
-class C1({required var int x = 0});
-//       ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C2({required final int x = 0});
-//       ^
-// [analyzer] unspecified
-// [cfe] unspecified
-
-class C3({required int x = 0});
-//       ^
-// [analyzer] unspecified
-// [cfe] unspecified
diff --git a/tests/language/deferred/regression_22995_test.dart b/tests/language/deferred/regression_22995_test.dart
index 857d040..04027df 100644
--- a/tests/language/deferred/regression_22995_test.dart
+++ b/tests/language/deferred/regression_22995_test.dart
@@ -4,7 +4,7 @@
 
 // Test that closurizing a function implies a dependency on its type.
 
-// dart2wasmOptions=--extra-compiler-option=--enable-deferred-loading -O0
+// dart2wasmOptions=--enable-deferred-loading -O0
 
 import "package:expect/expect.dart";
 
diff --git a/tests/language/dot_shorthands/constructor/constructor_abstract_class_error_test.dart b/tests/language/dot_shorthands/constructor/constructor_abstract_class_error_test.dart
new file mode 100644
index 0000000..5219404
--- /dev/null
+++ b/tests/language/dot_shorthands/constructor/constructor_abstract_class_error_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It's a compile-time error if the shorthand context does not denote a
+// declaration and static namespace.
+
+// SharedOptions=--enable-experiment=dot-shorthands
+
+Function getFunction() {
+  return .new();
+  //     ^^^^^^
+  // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
+  //      ^
+  // [cfe] The class 'Function' is abstract and can't be instantiated.
+}
+
+// Even though this is a factory constructor, we still don't allow type
+// arguments in the dot shorthand constructor.
+
+abstract class Foo<T> {
+  factory Foo.a() = _Foo;
+  Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  _Foo();
+}
+
+Foo<T> typeArgsFactory<T>() => .a<T>();
+//                              ^
+// [cfe] A dot shorthand constructor invocation can't have type arguments.
+//                               ^^^
+// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
+
+Foo<T> typeArgsNotFactory<T>() => .new<T>();
+//                                ^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
+//                                 ^
+// [cfe] A dot shorthand constructor invocation can't have type arguments.
+
+Foo<T> noTypeArgsNotFactory<T>() => .new();
+//                                  ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
+//                                   ^
+// [cfe] The class 'Foo' is abstract and can't be instantiated.
diff --git a/tests/language/dot_shorthands/constructor/constructor_abstract_class_test.dart b/tests/language/dot_shorthands/constructor/constructor_abstract_class_test.dart
new file mode 100644
index 0000000..7efed38
--- /dev/null
+++ b/tests/language/dot_shorthands/constructor/constructor_abstract_class_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// We allow shorthand syntax for factory constructors from abstract classes.
+
+// SharedOptions=--enable-experiment=dot-shorthands
+
+abstract class Foo<T> {
+  factory Foo.a() = _Foo;
+  Foo();
+}
+
+class _Foo<T> extends Foo<T> {
+  _Foo();
+}
+
+Foo<T> noTypeArgsFactory<T>() => .a();
+
+void main() async {
+  var iter = [1, 2];
+  await for (var x in .fromIterable(iter)) {
+    print(x);
+  }
+
+  noTypeArgsFactory();
+}
diff --git a/tests/language/dot_shorthands/member/static_method_error_test.dart b/tests/language/dot_shorthands/member/static_method_error_test.dart
new file mode 100644
index 0000000..ea3395c
--- /dev/null
+++ b/tests/language/dot_shorthands/member/static_method_error_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Using dot shorthand syntax on an instance method.
+
+// SharedOptions=--enable-experiment=dot-shorthands
+
+class C {
+  C foo() => C();
+}
+
+void main() {
+  C c = .foo();
+  //     ^^^
+  // [analyzer] COMPILE_TIME_ERROR.DOT_SHORTHAND_UNDEFINED_MEMBER
+  // [cfe] The static method or constructor 'foo' isn't defined for the type 'C'.
+}
diff --git a/tests/language/interface/injection1_test.dart b/tests/language/interface/injection1_test.dart
index db2ec93..4d4e558 100644
--- a/tests/language/interface/injection1_test.dart
+++ b/tests/language/interface/injection1_test.dart
@@ -12,12 +12,9 @@
 //             ^
 // [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
 // [cfe] 'I' is already declared in this scope.
-//                          ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
 //                           ^
-// [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
-// [cfe] Unexpected token ';'.
+// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT
+// [cfe] This requires the experimental 'primary-constructors' language feature to be enabled.
 
 class C implements I { }
 
diff --git a/tests/language/interface/injection2_test.dart b/tests/language/interface/injection2_test.dart
index a467510..2522505 100644
--- a/tests/language/interface/injection2_test.dart
+++ b/tests/language/interface/injection2_test.dart
@@ -12,12 +12,9 @@
 //    ^
 // [analyzer] COMPILE_TIME_ERROR.DUPLICATE_DEFINITION
 // [cfe] 'C' is already declared in this scope.
-//                 ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
 //                  ^
-// [analyzer] SYNTACTIC_ERROR.UNEXPECTED_TOKEN
-// [cfe] Unexpected token ';'.
+// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED_OFF_BY_DEFAULT
+// [cfe] This requires the experimental 'primary-constructors' language feature to be enabled.
 
 main() {
   Expect.isFalse(new C() is S);
diff --git a/tests/language/operator/invalid_operators_test.dart b/tests/language/operator/invalid_operators_test.dart
index bed23b2..e881d05 100644
--- a/tests/language/operator/invalid_operators_test.dart
+++ b/tests/language/operator/invalid_operators_test.dart
@@ -494,97 +494,78 @@
   // [cfe] Declared type variables of 'Operators7.==' doesn't match those on overridden method 'Object.=='.
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator ><T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator <=<T>(a) => true;
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator >=<T>(a) => true;
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator -<T>() => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator -<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator +<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator /<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator ~/<T>(a) => true;
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator *<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator %<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator |<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator ^<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator &<T>(a) => true;
   //        ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator <<<T>(a) => true;
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator >><T>(a) => true;
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator []=<T>(a, b) => true;
   //          ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //           ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator []<T>(a) => true;
   //         ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //          ^
   // [cfe] Types parameters aren't allowed when defining an operator.
   operator ~<T, S>() => true;
   //        ^^^^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //         ^
   // [cfe] Types parameters aren't allowed when defining an operator.
 }
 
diff --git a/tests/language/operator/operator_triple_shift_error_test.dart b/tests/language/operator/operator_triple_shift_error_test.dart
index 02b31c8..6dbdb94 100644
--- a/tests/language/operator/operator_triple_shift_error_test.dart
+++ b/tests/language/operator/operator_triple_shift_error_test.dart
@@ -44,7 +44,6 @@
   Object? operator >>> <T>(T arg1) => arg1;
   //                   ^^^
   // [analyzer] SYNTACTIC_ERROR.TYPE_PARAMETER_ON_OPERATOR
-  //                    ^
   // [cfe] Types parameters aren't allowed when defining an operator.
 }
 
diff --git a/tests/language/declaring_constructors/feature_disabled_error_test.dart b/tests/language/primary_constructors/feature_disabled_error_test.dart
similarity index 100%
rename from tests/language/declaring_constructors/feature_disabled_error_test.dart
rename to tests/language/primary_constructors/feature_disabled_error_test.dart
diff --git a/tests/language/declaring_constructors/feature_enabled_error_test.dart b/tests/language/primary_constructors/feature_enabled_error_test.dart
similarity index 100%
rename from tests/language/declaring_constructors/feature_enabled_error_test.dart
rename to tests/language/primary_constructors/feature_enabled_error_test.dart
diff --git a/tests/language/primary_constructors/header/extension_type_error_test.dart b/tests/language/primary_constructors/header/extension_type_error_test.dart
new file mode 100644
index 0000000..823b734
--- /dev/null
+++ b/tests/language/primary_constructors/header/extension_type_error_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It is a compile-time error if an extension type does not contain a declaring
+// constructor that has exactly one declaring parameter which is final. This is
+// the test for in-header constructors
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+extension type ET1(var int i);
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+extension type ET2(var i);
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+extension type ET3(final i, final x);
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+// Two `final` declaring parameters are inferred.
+extension type ET4(int i, int x);
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+// A final modifier on the first parameter is inferred.
+extension type ET5(int i, final x);
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/header/extension_type_test.dart b/tests/language/primary_constructors/header/extension_type_test.dart
new file mode 100644
index 0000000..c4b0fb5
--- /dev/null
+++ b/tests/language/primary_constructors/header/extension_type_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 modifier `final` on the representation variable in an extension type
+// primary constructor can be specified or omitted.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import 'package:expect/expect.dart';
+
+extension type ET1(int i);
+
+extension type ET2(final int i);
+
+extension type ET3(i);
+
+extension type ET4(final i);
+
+void main() {
+  Expect.equals(1, ET1(1).i);
+  Expect.equals(1, ET2(1).i);
+  Expect.equals(1, ET3(1).i);
+  Expect.equals(1, ET4(1).i);
+}
diff --git a/tests/language/primary_constructors/header/header_generative_constructor_error_test.dart b/tests/language/primary_constructors/header/header_generative_constructor_error_test.dart
new file mode 100644
index 0000000..0730427
--- /dev/null
+++ b/tests/language/primary_constructors/header/header_generative_constructor_error_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 class that has a declaring header constructor cannot have any other
+// non-redirecting generative constructors.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1(var int x) {
+  C1.named(this.x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+class C2(final int x) {
+  C2.named(this.x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+class C3(int x) {
+  C3.named(int x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+class C4() {
+  C4.named(int x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+class C5.named(var int x) {
+  C5(this.x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+class C6.named(final int x) {
+  C6(this.x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+class C7.named(int x) {
+  C7(int x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+class C8.named() {
+  C8(int x);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language/primary_constructors/header/header_generative_constructor_test.dart b/tests/language/primary_constructors/header/header_generative_constructor_test.dart
new file mode 100644
index 0000000..2f2088f
--- /dev/null
+++ b/tests/language/primary_constructors/header/header_generative_constructor_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 class that has a declaring header constructor can have redirecting
+// generative constructors and factory constructors.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import 'package:expect/expect.dart';
+
+class C1(final int x) {
+  C1.redirecting(int x): this(x);
+}
+
+class C2.named(final int x) {
+  C2.redirecting(int x): this.named(x);
+}
+
+class C3(final int x) {
+  factory C3.from(int value) => C3(value * 2);
+}
+
+void main() {
+  Expect.equals(1, C1.redirecting(1).x);
+  Expect.equals(2, C2.redirecting(2).x);
+  Expect.equals(6, C3.from(3).x);
+}
diff --git a/tests/language/primary_constructors/header/in_body_initializer_test.dart b/tests/language/primary_constructors/header/in_body_initializer_test.dart
new file mode 100644
index 0000000..96da020
--- /dev/null
+++ b/tests/language/primary_constructors/header/in_body_initializer_test.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 declaring header constructor can have a body and/or an initializer list.
+// These elements are placed in the class body in a declaration that provides
+// "the rest" of the constructor declaration which is given in the header.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import 'package:expect/expect.dart';
+
+class C1(final int x) {
+  int y;
+  this : y = x;
+}
+
+class C2(final int x) {
+  this : assert(x > 0);
+}
+
+class C3(final int x) extends C1 {
+  // Will override the `x` instance variable in `C1`.
+  this : super(x + 1);
+}
+
+class C4(int z) extends C1 {
+  int y;
+  this : y = z, assert(z > 0), super(z + 1);
+}
+
+extension type Ext1(final int x) {
+  this : assert(x > 0);
+}
+
+enum const Enum1(final int x) {
+  e(1);
+
+  this : assert(x > 0);
+}
+
+enum const Enum2(final int x) {
+  e(1);
+
+  final int y;
+  this : y = x;
+}
+
+void main() {
+  Expect.equals(1, C1(1).x);
+  Expect.equals(1, C1(1).y);
+
+  Expect.equals(1, C2(1).x);
+
+  Expect.equals(1, C3(1).x);
+
+  Expect.equals(2, C4(1).x);
+  Expect.equals(1, C4(1).y);
+
+  Expect.equals(1, Ext1(1).x);
+
+  Expect.equals(1, Enum1.e.x);
+  Expect.equals(1, Enum2.e.x);
+}
diff --git a/tests/language/primary_constructors/header/optional_parameter_nonconstant_default_error_test.dart b/tests/language/primary_constructors/header/optional_parameter_nonconstant_default_error_test.dart
new file mode 100644
index 0000000..7e04b74
--- /dev/null
+++ b/tests/language/primary_constructors/header/optional_parameter_nonconstant_default_error_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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=primary-constructors
+
+// Tests that declaring constructors with optional parameters cannot have
+// non-constant default values in a header declaring constructor.
+
+int f() => 0;
+
+class C([int x = f()]);
+  //             ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+
+enum E([int x = f()]) {
+  //            ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  e;
+}
diff --git a/tests/language/primary_constructors/short_syntax/factory_ambiguity_error_test.dart b/tests/language/primary_constructors/short_syntax/factory_ambiguity_error_test.dart
new file mode 100644
index 0000000..1ababc8
--- /dev/null
+++ b/tests/language/primary_constructors/short_syntax/factory_ambiguity_error_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// `factory() => C();` is a factory constructor whose name is the name of the
+// enclosing class, and not a method.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C {
+  final int x;
+  C.named(this.x);
+  factory() => C.named(1); // Equivalent to `factory C() => C.named();`
+}
+
+void main() {
+  var c = C.named(1);
+  c.factory();
+  //^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language/primary_constructors/short_syntax/factory_named_test.dart b/tests/language/primary_constructors/short_syntax/factory_named_test.dart
new file mode 100644
index 0000000..e0c7845
--- /dev/null
+++ b/tests/language/primary_constructors/short_syntax/factory_named_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Using `factory name()` to declare named factory constructors with new shorter
+// syntax.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import "package:expect/expect.dart";
+
+class C1 {
+  final int x;
+  C1._(this.x);
+
+  // Equivalent to `factory C1.named() => C1._(1);`
+  factory named() => C1._(1);
+}
+
+class C2 {
+  final int x;
+  const C2._() : x = 1;
+
+  // Equivalent to `const factory C2.named() = C2._;`
+  const factory named() = C2._;
+}
+
+void main() {
+  Expect.equals(1, C1.named().x);
+  Expect.equals(1, C2.named().x);
+}
diff --git a/tests/language/primary_constructors/short_syntax/factory_test.dart b/tests/language/primary_constructors/short_syntax/factory_test.dart
new file mode 100644
index 0000000..1ec47df
--- /dev/null
+++ b/tests/language/primary_constructors/short_syntax/factory_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// `factory() => C();` is a factory constructor whose name is the name of the
+// enclosing class, and not a method.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import "package:expect/expect.dart";
+
+class C1 {
+  final int x;
+  C1._(this.x);
+  factory() => C1._(1); // Equivalent to `factory C1() => C1._(1);`
+}
+
+class C2 {
+  final int x;
+  const C2._() : x = 1;
+  const factory() = C2._; // Equivalent to `const factory C2() = C2._;`
+}
+
+void main() {
+  Expect.equals(1, C1().x);
+  Expect.equals(1, C2().x);
+}
diff --git a/tests/language/primary_constructors/short_syntax/new_test.dart b/tests/language/primary_constructors/short_syntax/new_test.dart
new file mode 100644
index 0000000..ca84024
--- /dev/null
+++ b/tests/language/primary_constructors/short_syntax/new_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Using `new` to declare constructors.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import "package:expect/expect.dart";
+
+class C1 {
+  int x;
+  new() : x = 1; // Equivalent to `C1() : x = 1;`
+  new named() : x = 1; // Equivalent to `C1.named() : x = 1;`
+}
+
+class C2 {
+  int x;
+  new() : x = 1 {} // Equivalent to `C1() : x = 1 {}`
+  new named() : x = 1 {}// Equivalent to `C1.named() : x = 1 {}`
+}
+
+class C3 {
+  final int x;
+  const new(this.x); // Equivalent to `const C2(this.x);`
+  const new named(this.x); // Equivalent to `const C2.named(this.x);`
+}
+
+void main() {
+  Expect.equals(1, C1().x);
+  Expect.equals(1, C1.named().x);
+  Expect.equals(1, C2().x);
+  Expect.equals(1, C2.named().x);
+  Expect.equals(1, C3(1).x);
+  Expect.equals(1, C3.named(1).x);
+}
diff --git a/tests/language/primary_constructors/syntax/class_header_test.dart b/tests/language/primary_constructors/syntax/class_header_test.dart
new file mode 100644
index 0000000..59c47e9
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/class_header_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 declaring constructors with various clauses.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import "package:expect/expect.dart";
+
+// Generics
+class GenericsHeader<T>(final T x);
+
+// Extends
+class Base {}
+
+class ExtendsHeader(final int x) extends Base;
+
+// Implements
+abstract class Interface {
+  int method();
+}
+
+class ImplementsHeader(final int x) implements Interface {
+  @override
+  int method() => x + 1;
+}
+
+// With
+mixin Mixin {}
+
+class WithHeader(final int x) with Mixin;
+
+// Combination
+class AllHeader<T>(final T x) extends Base with Mixin implements Interface {
+  @override
+  int method() => 1;
+}
+
+void main() {
+  Expect.equals(1, GenericsHeader<int>(1).x);
+  Expect.equals(1, ExtendsHeader(1).x);
+  Expect.equals(2, ImplementsHeader(1).method());
+  Expect.equals(1, ImplementsHeader(1).x);
+  Expect.equals(1, WithHeader(1).x);
+  Expect.equals(1, AllHeader<int>(1).method());
+  Expect.equals(1, AllHeader<int>(1).x);
+}
diff --git a/tests/language/primary_constructors/syntax/const_in_header_and_body_error_test.dart b/tests/language/primary_constructors/syntax/const_in_header_and_body_error_test.dart
new file mode 100644
index 0000000..2e71494
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/const_in_header_and_body_error_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It is an error to have the `const` keyword on both the header and body
+// part of a declaring constructor.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class const C1(final int x) {
+  const this : assert(1 != 2);
+  //^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+sealed class const C2(final int x) {
+  const this : assert(1 != 2);
+  //^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+extension type const C(int x) {
+  const this : assert(1 != 2);
+  //^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+enum const E1(final int x) {
+  one(x: 1);
+  const this : assert(x != 2);
+  //^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language/primary_constructors/syntax/covariant_super_this_error_test.dart b/tests/language/primary_constructors/syntax/covariant_super_this_error_test.dart
new file mode 100644
index 0000000..44d9516d
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/covariant_super_this_error_test.dart
@@ -0,0 +1,66 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 compile-time error occurs if the formal parameter contains a term of the
+// form `this.v`, or `super.v` where `v` is an identifier, and the parameter has
+// the modifier `covariant`.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+// `covariant` with `this.x`
+
+// In-header declaring constructor
+class C1(covariant this.x) {
+  //      ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  int x;
+}
+
+
+class C2({covariant this.x}) {
+  //      ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  int? x;
+}
+
+class C3({required covariant this.x}) {
+  //      ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  int x;
+}
+
+class C4([covariant this.x]) {
+  //      ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  int? x;
+}
+
+// `covariant` with `super.x`
+
+class A(final int? x);
+
+// In-header declaring constructor
+class C9(covariant super.x) extends A;
+//                 ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C10({covariant super.x}) extends A;
+//                        ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C11({required covariant super.x}) extends A;
+//                                ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C12([covariant super.x]) extends A;
+//                           ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/syntax/covariant_var_test.dart b/tests/language/primary_constructors/syntax/covariant_var_test.dart
new file mode 100644
index 0000000..8cdccc6
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/covariant_var_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Allow the modifier `covariant` in declaring parameters.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import 'package:expect/expect.dart';
+
+class A {}
+class B extends A {}
+
+class C1(covariant var A x);
+class D1(var B x) implements C1;
+
+class C2({covariant var A? x});
+class D2({var B? x}) implements C2;
+
+class C3({required covariant var A x});
+class D3({required var B x}) implements C2;
+
+class C4([covariant var A? x]);
+class D4([var B? x]) implements C2;
+
+void main() {
+  A a = A();
+  B b = B();
+
+  // In-header
+  Expect.equals(a, C1(a).x);
+  Expect.equals(b, D1(b).x);
+
+  Expect.equals(a, C2(x: a).x);
+  Expect.equals(b, D2(x: b).x);
+
+  Expect.equals(a, C3(x: a).x);
+  Expect.equals(b, D3(x: b).x);
+
+  Expect.equals(a, C4(a).x);
+  Expect.equals(b, D4(b).x);
+}
diff --git a/tests/language/primary_constructors/syntax/covariant_with_final_error_test.dart b/tests/language/primary_constructors/syntax/covariant_with_final_error_test.dart
new file mode 100644
index 0000000..08beb55
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/covariant_with_final_error_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It is an error for a formal parameter to be both `covariant` and `final`.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1(covariant final int x);
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2({covariant final int? x = 1});
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C3({required covariant final int x});
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C4([covariant final int? x]);
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+extension type E1(covariant final int x);
+//                ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+extension type E2(covariant int x);
+//                ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/syntax/covariant_without_var_error_test.dart b/tests/language/primary_constructors/syntax/covariant_without_var_error_test.dart
new file mode 100644
index 0000000..9090f46
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/covariant_without_var_error_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It is an error for a formal parameter to have the `covariant` modifier
+// but not the `var` modifier.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1(covariant int x);
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2({covariant int? x});
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C3({required covariant int x});
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C4([covariant int? x]);
+//      ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/syntax/empty_body_error_test.dart b/tests/language/primary_constructors/syntax/empty_body_error_test.dart
new file mode 100644
index 0000000..2d8cd55
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/empty_body_error_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// For mixins, an empty body, `{}`, cannot be replaced by `;`. Enums require a
+// non-empty declaration.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1;
+
+mixin M1;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M2 implements C1;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M3 on C1;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+enum E1;
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+enum E2(final int x);
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+enum const E3;
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+enum const E4(final int x);
+//   ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/syntax/empty_body_test.dart b/tests/language/primary_constructors/syntax/empty_body_test.dart
new file mode 100644
index 0000000..d0808de
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/empty_body_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// An empty class body, `{}`, can be replaced by `;`.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1;
+
+class C2 with M1;
+
+class C3(var int x) extends C1;
+
+mixin class M1 implements C1;
+
+mixin class M2;
+
+extension type E1(int x);
+
+extension type const E2(int x);
+
+void main() {
+  print(C1());
+  print(C2());
+  print(C3(1));
+  print(E1(1));
+  print(E2(1));
+}
diff --git a/tests/language/primary_constructors/syntax/final_formal_parameter_error_test.dart b/tests/language/primary_constructors/syntax/final_formal_parameter_error_test.dart
new file mode 100644
index 0000000..7f0ad0b
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/final_formal_parameter_error_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Declaring any formal parameters with the `final` modifier is a compile-time
+// error.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C {
+  void method(final int x, [final int y = 1]) {}
+  //          ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  //                        ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+enum E(var int x) {
+  e(1);
+  void method(final int x, {required final int y = 1}) {}
+  //          ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  //                                 ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+extension type ET(final int x) {
+  void method(final int x, {final int y = 1}) {}
+  //          ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+  //                        ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
+
+void main() {
+  [1, 4, 6, 8].forEach((final value) => print(value + 2));
+  //                    ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language/primary_constructors/syntax/header_syntax_test.dart b/tests/language/primary_constructors/syntax/header_syntax_test.dart
new file mode 100644
index 0000000..6ca73f2
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/header_syntax_test.dart
@@ -0,0 +1,89 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 basic declaring header constructor.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import 'package:expect/expect.dart';
+
+class Point(var int x, var int y);
+
+class PointFinal(final int x, final int y);
+
+// Constant constructors.
+class const CConst(final int x);
+
+extension type const ExtConst(final int x);
+
+enum const EnumConst(final int x) {
+  e(1);
+}
+
+// Initializing parameters.
+class CInitParameters(this.y) {
+  late int y;
+}
+
+// Super parameters.
+class C1(final int y);
+class CSuperParameters(final int x, super.y) extends C1;
+
+// Named parameters (regular and required).
+class CNamedParameters({final int x = 1, required var int y});
+
+enum EnumNamedParameters({final int x = 1, required var int y}) {
+  e(x: 2, y: 3), f(y: 3);
+}
+
+// Optional parameters.
+class COptionalParameters([final int x = 1, var int y = 2]);
+
+enum EnumOptionalParameters([final int x = 1, var int y = 2]) {
+  e(3, 4), f(3), g();
+}
+
+// TODO(kallentu): Add tests for the type being inferred from the default value.
+
+void main() {
+  var p1 = Point(1, 2);
+  Expect.equals(1, p1.x);
+  Expect.equals(2, p1.y);
+
+  p1.x = 3;
+  Expect.equals(3, p1.x);
+
+  var p2 = PointFinal(3, 4);
+  Expect.equals(3, p2.x);
+  Expect.equals(4, p2.y);
+
+  Expect.equals(1, const CConst(1).x);
+
+  Expect.equals(1, const ExtConst(1).x);
+
+  Expect.equals(1, EnumConst.e.x);
+
+  Expect.equals(1, CInitParameters(1).y);
+
+  Expect.equals(1, CSuperParameters(1, 2).x);
+  Expect.equals(2, CSuperParameters(1, 2).y);
+
+  Expect.equals(1, CNamedParameters(y: 2).x);
+  Expect.equals(2, CNamedParameters(y: 2).y);
+
+  Expect.equals(2, EnumNamedParameters.e.x);
+  Expect.equals(3, EnumNamedParameters.e.y);
+  Expect.equals(1, EnumNamedParameters.f.x);
+  Expect.equals(3, EnumNamedParameters.f.y);
+
+  Expect.equals(1, COptionalParameters().x);
+  Expect.equals(2, COptionalParameters().y);
+
+  Expect.equals(3, EnumOptionalParameters.e.x);
+  Expect.equals(4, EnumOptionalParameters.e.y);
+  Expect.equals(3, EnumOptionalParameters.f.x);
+  Expect.equals(2, EnumOptionalParameters.f.y);
+  Expect.equals(1, EnumOptionalParameters.g.x);
+  Expect.equals(2, EnumOptionalParameters.g.y);
+}
diff --git a/tests/language/primary_constructors/syntax/late_external_error_test.dart b/tests/language/primary_constructors/syntax/late_external_error_test.dart
new file mode 100644
index 0000000..d6598fe
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/late_external_error_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// `late` and `external` instance variables cannot be introduced by a declaring
+// parameter.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1(late int x, external double d);
+//       ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/syntax/late_external_test.dart b/tests/language/primary_constructors/syntax/late_external_test.dart
new file mode 100644
index 0000000..e62af7a
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/late_external_test.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// `late` and `external` must be initialized in the body.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import "package:expect/expect.dart";
+
+class C1(this.x) {
+  late int x;
+  external double d;
+}
+
+void main() {
+  Expect.equals(1, C1(1).x);
+}
diff --git a/tests/language/primary_constructors/syntax/mixin_class_test.dart b/tests/language/primary_constructors/syntax/mixin_class_test.dart
new file mode 100644
index 0000000..7ca516c
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/mixin_class_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Body and header constructor syntax for mixin classes.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+import "package:expect/expect.dart";
+
+class C1 {}
+
+mixin class M1() implements C1;
+
+mixin class M2();
+
+mixin class M3.named();
+
+class C2<T> {}
+
+mixin class M4<T>() implements C2<T>;
+
+mixin class M5<T>();
+
+mixin class M6<T>.named();
+
+// Used for testing the mixins.
+
+class CImpl1 with M1;
+class CImpl2 with M2;
+class CImpl3 with M3;
+class CImpl4<T> with M4<T>;
+class CImpl5<T> with M5<T>;
+class CImpl6<T> with M6<T>;
+
+void main() {
+  CImpl1();
+  CImpl2();
+  CImpl3();
+  CImpl4<String>();
+  CImpl5<String>();
+  CImpl6<String>();
+}
diff --git a/tests/language/primary_constructors/syntax/mixin_error_test.dart b/tests/language/primary_constructors/syntax/mixin_error_test.dart
new file mode 100644
index 0000000..5c25752
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/mixin_error_test.dart
@@ -0,0 +1,71 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Mixins cannot have declaring header/body constructors.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1;
+
+mixin M1(var int x) implements C1;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M2(final int x) on C1;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M3(int x);
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M4.named(int x);
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M5();
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M6.named();
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2<T>;
+
+mixin M7<T>(var T x) implements C2<T>;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M8<T>(final T x) on C2<T>;
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M9<T>(T x);
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M10<T>.named(T x);
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M11<T>();
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+mixin M12<T>.named();
+//    ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/primary_constructors/syntax/no_parameter_list_error_test.dart b/tests/language/primary_constructors/syntax/no_parameter_list_error_test.dart
new file mode 100644
index 0000000..c013400
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/no_parameter_list_error_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It is an error if a class does not have a primary constructor, but the body
+// of the class contains a primary constructor body.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C {
+  this : assert(1 != 2);
+  // ^
+  // [analyzer] unspecified
+  // [cfe] unspecified
+}
diff --git a/tests/language/primary_constructors/syntax/required_with_default_error_test.dart b/tests/language/primary_constructors/syntax/required_with_default_error_test.dart
new file mode 100644
index 0000000..2bd965e
--- /dev/null
+++ b/tests/language/primary_constructors/syntax/required_with_default_error_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// It is an error for a named parameter to be both `required` and have a
+// default value.
+
+// SharedOptions=--enable-experiment=primary-constructors
+
+class C1({required var int x = 0});
+//       ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C2({required final int x = 0});
+//       ^
+// [analyzer] unspecified
+// [cfe] unspecified
+
+class C3({required int x = 0});
+//       ^
+// [analyzer] unspecified
+// [cfe] unspecified
diff --git a/tests/language/switch/null_int_case_test.dart b/tests/language/switch/null_int_case_test.dart
new file mode 100644
index 0000000..adde8e1
--- /dev/null
+++ b/tests/language/switch/null_int_case_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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';
+
+String test1(int? value) {
+  switch (value) {
+    case 55:
+      return '55';
+    case 352:
+      return '352';
+    case null:
+      return 'null';
+  }
+
+  return 'no match';
+}
+
+String test2(int? value) {
+  switch (value) {
+    case null:
+      return 'null';
+  }
+  return 'no match';
+}
+
+String test3(int? value) {
+  switch (value) {
+    case 10:
+    case null:
+      return 'null or 10';
+    case 20:
+      return '20';
+  }
+
+  return 'no match';
+}
+
+const nullConstant = null;
+
+test4(int? value) {
+  switch (value) {
+    case nullConstant:
+      return 'null';
+  }
+
+  return 'no match';
+}
+
+void main() {
+  Expect.equals(test1(55), '55');
+  Expect.equals(test1(352), '352');
+  Expect.equals(test1(null), 'null');
+  Expect.equals(test1(38792), 'no match');
+
+  Expect.equals(test2(0), 'no match');
+  Expect.equals(test2(null), 'null');
+
+  Expect.equals(test3(10), 'null or 10');
+  Expect.equals(test3(null), 'null or 10');
+  Expect.equals(test3(20), '20');
+  Expect.equals(test3(28132), 'no match');
+
+  Expect.equals(test4(nullConstant), 'null');
+  Expect.equals(test4(2189), 'no match');
+}
diff --git a/tests/standalone/standalone_vm.status b/tests/standalone/standalone_vm.status
index 8611bb9..786b161 100644
--- a/tests/standalone/standalone_vm.status
+++ b/tests/standalone/standalone_vm.status
@@ -57,5 +57,8 @@
 io/http_client_stays_alive_test: Skip # Spawns process in Dart2 mode.
 io/process_sync_test: Timeout, Pass
 
+[ $system == android || $system == linux ]
+file_system_watcher_isolate_exit_leak_test: SkipByDesign # Linux uses GC not NativeFinalizer for cleaning up FSW resources
+
 [ $hot_reload || $hot_reload_rollback ]
 io/named_pipe_script_test: Skip # Can't read from the pipe twice
diff --git a/tests/web/regress/issue/61833_helper.dart b/tests/web/regress/issue/61833_helper.dart
new file mode 100644
index 0000000..bbf6cb9
--- /dev/null
+++ b/tests/web/regress/issue/61833_helper.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+final String str = 'hello';
+final bool? nullBool = null;
+
+void foo() {}
diff --git a/tests/web/regress/issue/61833_test.dart b/tests/web/regress/issue/61833_test.dart
new file mode 100644
index 0000000..d09ce71
--- /dev/null
+++ b/tests/web/regress/issue/61833_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+import '61833_helper.dart' deferred as d;
+
+final String localStr = 'hello';
+
+Future<void> main() async {
+  asyncStart();
+  await d.loadLibrary();
+
+  // Don't use 'Expect' APIs since constants have to be direct
+  // inputs to the operators being tested.
+  Expect.isTrue(d.str == localStr);
+  Expect.isTrue(identical(d.str, localStr));
+  Expect.isTrue(d.nullBool ?? true);
+  d.foo();
+  asyncEnd();
+}
diff --git a/tests/web/wasm/closures/dynamic_call_nsm_test.dart b/tests/web/wasm/closures/dynamic_call_nsm_test.dart
new file mode 100644
index 0000000..6636a03
--- /dev/null
+++ b/tests/web/wasm/closures/dynamic_call_nsm_test.dart
@@ -0,0 +1,76 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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() {
+  final runtimeTrue = int.parse('1') == 1;
+  final recorder = Recorder();
+  final dynamic object = runtimeTrue ? recorder : () {};
+
+  // Dynamic closure call.
+
+  object();
+  expectInvocation(recorder, #call, [], {});
+
+  object(a: 1);
+  expectInvocation(recorder, #call, [], {#a: 1});
+
+  object(1);
+  expectInvocation(recorder, #call, [1], {});
+
+  object(1, 2, a: 1);
+  expectInvocation(recorder, #call, [1, 2], {#a: 1});
+
+  // Dynamic closure call via field (i.e. `tmp = object.bar; tmp(...)`)
+
+  object.bar();
+  expectInvocation(recorder, #call, [], {});
+
+  object.bar(a: 1, b: 2);
+  expectInvocation(recorder, #call, [], {#a: 1, #b: 2});
+
+  object.bar(1, 2, 3);
+  expectInvocation(recorder, #call, [1, 2, 3], {});
+
+  object.bar(1, 2, 3, 4, a: 1, b: 2);
+  expectInvocation(recorder, #call, [1, 2, 3, 4], {#a: 1, #b: 2});
+
+  // Dynamic method call.
+
+  object.foo();
+  expectInvocation(recorder, #foo, [], {});
+
+  object.foo(a: 1, b: 2, c: 3);
+  expectInvocation(recorder, #foo, [], {#a: 1, #b: 2, #c: 3});
+
+  object.foo(1, 2, 3, 4, 5);
+  expectInvocation(recorder, #foo, [1, 2, 3, 4, 5], {});
+
+  object.foo(1, 2, 3, 4, 5, 6, a: 1, b: 2, c: 3);
+  expectInvocation(recorder, #foo, [1, 2, 3, 4, 5, 6], {#a: 1, #b: 2, #c: 3});
+}
+
+void expectInvocation(
+  Recorder recorder,
+  Symbol name,
+  List<Object?> positional,
+  Map<Symbol, Object?> named,
+) {
+  final i = recorder.lastInvocation!;
+  Expect.equals(name, i.memberName);
+  Expect.deepEquals(positional, i.positionalArguments);
+  Expect.deepEquals(named, i.namedArguments);
+}
+
+class Recorder {
+  Invocation? lastInvocation;
+
+  dynamic get bar => this;
+
+  @override
+  void noSuchMethod(Invocation invocation) {
+    lastInvocation = invocation;
+  }
+}
diff --git a/tests/web/wasm/closures/dynamic_call_via_field_test.dart b/tests/web/wasm/closures/dynamic_call_via_field_test.dart
new file mode 100644
index 0000000..6bc4d2d
--- /dev/null
+++ b/tests/web/wasm/closures/dynamic_call_via_field_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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() {
+  final runtimeTrue = int.parse('1') == 1;
+  final dynamic object = runtimeTrue ? A() : 'a';
+
+  // The purpose of this test is to ensure that dar2wasm's closed-world closure
+  // layouter will consider `(foobar: 1)` as a closure call site and therefore
+  // register `foobar` to be a used name combination.
+  Expect.equals('foo<$int>(1)', object.closureGetter<int>(foobar: 1));
+}
+
+class A {
+  void Function<T>() get closureGetter => foo;
+}
+
+String foo<T>({int? foobar}) => "foo<$T>($foobar)";
diff --git a/tests/web/wasm/closures/function_apply_test.dart b/tests/web/wasm/closures/function_apply_test.dart
new file mode 100644
index 0000000..7547272
--- /dev/null
+++ b/tests/web/wasm/closures/function_apply_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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";
+
+main() {
+  // Prevent constant propagation of closure into `Function.apply`.
+  for (final (name, closure) in <(String, Function)>[
+    ('static1', static1),
+    ('static2', static2),
+  ]) {
+    test('$name: 1 missing-b', closure, [1]);
+    test('$name: 1 2', closure, [1, 2]);
+  }
+}
+
+String static1(a, [b = 'missing-b']) => 'static1: $a $b';
+String static2(a, [b = 'missing-b']) => 'static2: $a $b';
+
+void test(String expected, Function function, List positional) {
+  Expect.equals(expected, Function.apply(function, positional));
+  final oneMoreThanAllowed = [
+    for (int i = positional.length; i < 3; ++i) 'extra$i',
+  ];
+  Expect.throwsNoSuchMethodError(
+    () => Function.apply(function, [...positional, ...oneMoreThanAllowed]),
+  );
+}
diff --git a/tests/web/wasm/closures/large_name_combination_test.dart b/tests/web/wasm/closures/large_name_combination_test.dart
new file mode 100644
index 0000000..38a942f
--- /dev/null
+++ b/tests/web/wasm/closures/large_name_combination_test.dart
@@ -0,0 +1,124 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. 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() {
+  final l = <dynamic>['a', 1, foo];
+  final closure = l[int.parse('2')];
+
+  final sb = StringBuffer();
+
+  Expect.equals(foo(), closure());
+
+  Expect.equals(foo(a0: 0), closure(a0: 0));
+  Expect.equals(foo(a1: 1), closure(a1: 1));
+  Expect.equals(foo(a2: 2), closure(a2: 2));
+  Expect.equals(foo(a3: 3), closure(a3: 3));
+  Expect.equals(foo(a4: 4), closure(a4: 4));
+  Expect.equals(foo(a5: 5), closure(a5: 5));
+  Expect.equals(foo(a6: 6), closure(a6: 6));
+  Expect.equals(foo(a7: 7), closure(a7: 7));
+  Expect.equals(foo(a8: 8), closure(a8: 8));
+  Expect.equals(foo(a9: 9), closure(a9: 9));
+  Expect.equals(foo(a10: 10), closure(a10: 10));
+  Expect.equals(foo(a11: 11), closure(a11: 11));
+  Expect.equals(foo(a12: 12), closure(a12: 12));
+  Expect.equals(foo(a13: 13), closure(a13: 13));
+  Expect.equals(foo(a14: 14), closure(a14: 14));
+  Expect.equals(foo(a15: 15), closure(a15: 15));
+
+  Expect.equals(foo(a0: 0, a1: 1), closure(a0: 0, a1: 1));
+  Expect.equals(foo(a2: 2, a3: 3), closure(a2: 2, a3: 3));
+  Expect.equals(foo(a4: 4, a5: 5), closure(a4: 4, a5: 5));
+  Expect.equals(foo(a6: 6, a7: 7), closure(a6: 6, a7: 7));
+  Expect.equals(foo(a8: 8, a9: 9), closure(a8: 8, a9: 9));
+  Expect.equals(foo(a10: 10, a11: 11), closure(a10: 10, a11: 11));
+  Expect.equals(foo(a12: 12, a13: 13), closure(a12: 12, a13: 13));
+  Expect.equals(foo(a14: 14, a15: 15), closure(a14: 14, a15: 15));
+
+  Expect.equals(
+    foo(a0: 0, a1: 1, a2: 2, a3: 3),
+    closure(a0: 0, a1: 1, a2: 2, a3: 3),
+  );
+  Expect.equals(
+    foo(a4: 4, a5: 5, a6: 6, a7: 7),
+    closure(a4: 4, a5: 5, a6: 6, a7: 7),
+  );
+  Expect.equals(
+    foo(a8: 8, a9: 9, a10: 10, a11: 11),
+    closure(a8: 8, a9: 9, a10: 10, a11: 11),
+  );
+  Expect.equals(
+    foo(a12: 12, a13: 13, a14: 14, a15: 15),
+    closure(a12: 12, a13: 13, a14: 14, a15: 15),
+  );
+
+  Expect.equals(
+    foo(a0: 0, a1: 1, a2: 2, a3: 3, a4: 4, a5: 5, a6: 6, a7: 7),
+    closure(a0: 0, a1: 1, a2: 2, a3: 3, a4: 4, a5: 5, a6: 6, a7: 7),
+  );
+  Expect.equals(
+    foo(a8: 8, a9: 9, a10: 10, a11: 11, a12: 12, a13: 13, a14: 14, a15: 15),
+    closure(a8: 8, a9: 9, a10: 10, a11: 11, a12: 12, a13: 13, a14: 14, a15: 15),
+  );
+
+  Expect.equals(
+    foo(
+      a0: 0,
+      a1: 1,
+      a2: 2,
+      a3: 3,
+      a4: 4,
+      a5: 5,
+      a6: 6,
+      a7: 7,
+      a8: 8,
+      a9: 9,
+      a10: 10,
+      a11: 11,
+      a12: 12,
+      a13: 13,
+      a14: 14,
+      a15: 15,
+    ),
+    closure(
+      a0: 0,
+      a1: 1,
+      a2: 2,
+      a3: 3,
+      a4: 4,
+      a5: 5,
+      a6: 6,
+      a7: 7,
+      a8: 8,
+      a9: 9,
+      a10: 10,
+      a11: 11,
+      a12: 12,
+      a13: 13,
+      a14: 14,
+      a15: 15,
+    ),
+  );
+}
+
+String foo({
+  a0,
+  a1,
+  a2,
+  a3,
+  a4,
+  a5,
+  a6,
+  a7,
+  a8,
+  a9,
+  a10,
+  a11,
+  a12,
+  a13,
+  a14,
+  a15,
+}) => '$a0 $a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 $a10 $a11 $a12 $a13 $a14 $a15';
diff --git a/tests/web/wasm/deferred_constant_use_under_load_guard_def.dart b/tests/web/wasm/deferred_constant_use_under_load_guard_def.dart
new file mode 100644
index 0000000..893046e
--- /dev/null
+++ b/tests/web/wasm/deferred_constant_use_under_load_guard_def.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'deferred_constant_use_under_load_guard_def1.dart' deferred as D1;
+import 'deferred_constant_use_under_load_guard_def2.dart' deferred as D2;
+
+Future runTest() async {
+  await D1.loadLibrary();
+  await D2.loadLibrary();
+
+  // Access of `foo` under load guard D1.
+  D1.printValue(foo);
+
+  // Access of `foo` under load guard D2.
+  D2.printValue(foo);
+
+  // To prevent signature shaking from removing parameter and pushing `foo` to
+  // callee.
+  D1.printValue('a');
+  D2.printValue('b');
+}
+
+class FooConst {
+  final String value;
+  const FooConst(this.value);
+}
+
+const foo = FooConst('foo');
diff --git a/tests/web/wasm/deferred_constant_use_under_load_guard_def1.dart b/tests/web/wasm/deferred_constant_use_under_load_guard_def1.dart
new file mode 100644
index 0000000..1cd1fd5
--- /dev/null
+++ b/tests/web/wasm/deferred_constant_use_under_load_guard_def1.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 printValue(value) {
+  print(value);
+}
diff --git a/tests/web/wasm/deferred_constant_use_under_load_guard_def2.dart b/tests/web/wasm/deferred_constant_use_under_load_guard_def2.dart
new file mode 100644
index 0000000..1cd1fd5
--- /dev/null
+++ b/tests/web/wasm/deferred_constant_use_under_load_guard_def2.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 printValue(value) {
+  print(value);
+}
diff --git a/tests/web/wasm/deferred_constant_use_under_load_guard_test.dart b/tests/web/wasm/deferred_constant_use_under_load_guard_test.dart
new file mode 100644
index 0000000..aa6b035
--- /dev/null
+++ b/tests/web/wasm/deferred_constant_use_under_load_guard_test.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// dart2wasmOptions=--enable-deferred-loading
+
+import 'deferred_constant_use_under_load_guard_def.dart' deferred as D;
+
+main() async {
+  await D.loadLibrary();
+  await D.runTest();
+}
diff --git a/tests/web/wasm/deferred_loading_js_callback_helper.dart b/tests/web/wasm/deferred_loading_js_callback_helper.dart
new file mode 100644
index 0000000..b157516
--- /dev/null
+++ b/tests/web/wasm/deferred_loading_js_callback_helper.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:js_interop';
+
+int closureCalled = 0;
+JSFunction? func;
+void Function()? clos;
+
+void deferredMain() {
+  void closure() {
+    closureCalled++;
+  }
+
+  final jsClosure = closure.toJS;
+  jsClosure.callAsFunction();
+  clos = closure;
+  func = jsClosure;
+}
diff --git a/tests/web/wasm/deferred_loading_js_callback_test.dart b/tests/web/wasm/deferred_loading_js_callback_test.dart
new file mode 100644
index 0000000..11fa9ca
--- /dev/null
+++ b/tests/web/wasm/deferred_loading_js_callback_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// dart2wasmOptions=--enable-deferred-loading
+
+import 'dart:js_interop';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+import 'deferred_loading_js_callback_helper.dart' deferred as D;
+
+main() async {
+  asyncStart();
+  await D.loadLibrary();
+  Expect.equals(D.closureCalled, 0);
+  D.deferredMain();
+  Expect.equals(D.closureCalled, 1);
+  D.func!.callAsFunction();
+  Expect.equals(D.closureCalled, 2);
+  final jsClosure = D.clos!.toJS;
+  jsClosure.callAsFunction();
+  Expect.equals(D.closureCalled, 3);
+  asyncEnd();
+}
diff --git a/tests/web/wasm/delete_tostring2_test.dart b/tests/web/wasm/delete_tostring2_test.dart
index 286f01e..159fc94 100644
--- a/tests/web/wasm/delete_tostring2_test.dart
+++ b/tests/web/wasm/delete_tostring2_test.dart
@@ -2,16 +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.
 
-// dart2wasmOptions=--extra-compiler-option=--delete-tostring-package-uri=package:smith
+// dart2wasmOptions=--extra-compiler-option=--delete-tostring-package-uri=package:expect
 
 import 'package:expect/expect.dart';
-import 'package:smith/configuration.dart' show Architecture;
 
-import 'delete_tostring_test.dart' show archX64, archArm;
+import 'delete_tostring_test.dart' show first, second;
 
 main() {
   // The `toString()` was replaced with `super.toString()` which defaults to the
   // one from `Object.toString()`:
-  Expect.equals('Instance of \'$Architecture\'', archX64.toString());
-  Expect.equals('Instance of \'$Architecture\'', archArm.toString());
+  Expect.equals('Instance of \'$ExpectException\'', first.toString());
+  Expect.equals('Instance of \'$ExpectException\'', second.toString());
 }
diff --git a/tests/web/wasm/delete_tostring_test.dart b/tests/web/wasm/delete_tostring_test.dart
index cd4cd36..c0bcbb19 100644
--- a/tests/web/wasm/delete_tostring_test.dart
+++ b/tests/web/wasm/delete_tostring_test.dart
@@ -4,18 +4,23 @@
 
 import 'package:expect/expect.dart';
 
-import 'package:smith/configuration.dart' show Architecture;
-
 final _one = int.parse('1');
 final _two = int.parse('2');
 
-final _objects = [Object(), Architecture.x64, Architecture.arm];
+final message1 = 'foo';
+final message2 = 'bar';
 
-final archX64 = _objects[_one];
-final archArm = _objects[_two];
+final _objects = [
+  Object(),
+  ExpectException(message1),
+  ExpectException(message2),
+];
+
+final first = _objects[_one];
+final second = _objects[_two];
 
 main() {
-  // We get the normal `Architecture.toString()`
-  Expect.equals('x64', archX64.toString());
-  Expect.equals('arm', archArm.toString());
+  // We get the normal `ExpectException.toString()`
+  Expect.equals(message1, first.toString());
+  Expect.equals(message2, second.toString());
 }
diff --git a/tests/web/wasm/source_map_simple_lib.dart b/tests/web/wasm/source_map_simple_lib.dart
index 71c48ee..b23df6a 100644
--- a/tests/web/wasm/source_map_simple_lib.dart
+++ b/tests/web/wasm/source_map_simple_lib.dart
@@ -8,6 +8,8 @@
 
 import 'package:source_maps/parser.dart';
 
+final isMinified = const bool.fromEnvironment('dart.tool.dart2wasm.minify');
+
 void f() {
   g();
 }
@@ -144,7 +146,10 @@
     if (moduleIdMatch == null) {
       throw 'Unable to parse module name in frame "$line"';
     }
-    final moduleId = int.parse(moduleIdMatch.group(1)!);
+    final moduleIdString = moduleIdMatch.group(1)!;
+    final moduleId = isMinified
+        ? parseMinifiedModule(moduleIdString)
+        : int.parse(moduleIdString.replaceAll('module', ''));
     final uri = getFilename(testName, moduleId);
     final span = mapping.spanFor(0, offset, uri: uri);
     if (span == null) {
@@ -161,6 +166,17 @@
   return parsed;
 }
 
+int parseMinifiedModule(String moduleName) {
+  final codeUnits = moduleName.codeUnits;
+  int result = 0;
+  int power = 1;
+  for (final codeUnit in codeUnits) {
+    result += codeUnit * power;
+    power *= 128;
+  }
+  return result - 1;
+}
+
 /// Read the file at the given [path].
 ///
 /// This relies on the `readbuffer` function provided by d8.
@@ -171,4 +187,4 @@
 Uint8List readfile(String path) => Uint8List.view(readbuffer(path.toJS).toDart);
 
 final stackTraceHexOffsetRegExp = RegExp(r'wasm-function.*(0x[0-9a-fA-F]+)\)$');
-final stackTraceModuleNameRegExp = RegExp(r'wasm/module([0-9]+)');
+final stackTraceModuleNameRegExp = RegExp(r'wasm/(.*)-[0-9a-z]+:');
diff --git a/tests/web/wasm/source_map_simple_optimized_deferred_test.dart b/tests/web/wasm/source_map_simple_optimized_deferred_test.dart
new file mode 100644
index 0000000..1a6ad31
--- /dev/null
+++ b/tests/web/wasm/source_map_simple_optimized_deferred_test.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// dart2wasmOptions=-O4 --no-strip-wasm --enable-deferred-loading --extra-compiler-option=-DTEST_COMPILATION_DIR=$TEST_COMPILATION_DIR
+
+import 'source_map_simple_lib.dart' as Lib;
+
+void main() {
+  Lib.testMain('source_map_simple_optimized_deferred', frameDetails);
+}
+
+const List<(String?, int?, int?, String?)?> frameDetails = [
+  ('errors_patch.dart', null, null, '_throwWithCurrentStackTrace'),
+  ('source_map_simple_lib.dart', 18, 3, 'g'),
+  ('source_map_simple_lib.dart', 14, 3, 'f'),
+];
+
+/*
+at Error._throwWithCurrentStackTrace (wasm://wasm/0008d08e:wasm-function[115]:0xc095)
+at g (wasm://wasm/0008d08e:wasm-function[359]:0x11e15)
+at f (wasm://wasm/0008d08e:wasm-function[358]:0x11e0b)
+at main (wasm://wasm/0008d08e:wasm-function[357]:0x11913)
+at _invokeMain (wasm://wasm/0008d08e:wasm-function[82]:0xb349)
+at Module.invoke (...)
+at main (...)
+at async action (...)
+*/
diff --git a/tests/web/wasm/source_map_simple_optimized_test.dart b/tests/web/wasm/source_map_simple_optimized_test.dart
index f854a2a..47942ab 100644
--- a/tests/web/wasm/source_map_simple_optimized_test.dart
+++ b/tests/web/wasm/source_map_simple_optimized_test.dart
@@ -12,8 +12,8 @@
 
 const List<(String?, int?, int?, String?)?> frameDetails = [
   ('errors_patch.dart', null, null, '_throwWithCurrentStackTrace'),
-  ('source_map_simple_lib.dart', 16, 3, 'g'),
-  ('source_map_simple_lib.dart', 12, 3, 'f'),
+  ('source_map_simple_lib.dart', 18, 3, 'g'),
+  ('source_map_simple_lib.dart', 14, 3, 'f'),
 ];
 
 /*
diff --git a/tests/web/wasm/source_map_simple_test.dart b/tests/web/wasm/source_map_simple_test.dart
index 893f297..97c010c 100644
--- a/tests/web/wasm/source_map_simple_test.dart
+++ b/tests/web/wasm/source_map_simple_test.dart
@@ -12,9 +12,9 @@
 
 const List<(String?, int?, int?, String?)?> frameDetails = [
   ('errors_patch.dart', null, null, '_throwWithCurrentStackTrace'),
-  ('source_map_simple_lib.dart', 16, 3, 'g'),
-  ('source_map_simple_lib.dart', 12, 3, 'f'),
-  ('source_map_simple_lib.dart', 41, 5, 'testMain'),
+  ('source_map_simple_lib.dart', 18, 3, 'g'),
+  ('source_map_simple_lib.dart', 14, 3, 'f'),
+  ('source_map_simple_lib.dart', 43, 5, 'testMain'),
   ('source_map_simple_test.dart', 10, 7, 'main'),
   null, // main tear-off, compiler generated, not mapped
   // The rest of the stack is dependent on the compiler mode.
diff --git a/tests/web/web.status b/tests/web/web.status
index 4a3bb8c..47b1137 100644
--- a/tests/web/web.status
+++ b/tests/web/web.status
@@ -66,6 +66,7 @@
 dart2js/code_motion_exception_test: Skip # Required V8 specific format of JavaScript errors.
 
 [ $compiler == dart2wasm && $runtime != d8 ]
+wasm/source_map_simple_optimized_deferred_test: SkipByDesign # Reads source map file using d8's readbuffer
 wasm/source_map_simple_optimized_test: SkipByDesign # Reads source map file using d8's readbuffer
 wasm/source_map_simple_test: SkipByDesign # Reads source map file using d8's readbuffer
 
diff --git a/third_party/.gitignore b/third_party/.gitignore
index 857ad18..8b2f5a6 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -28,6 +28,7 @@
 !/pkg/hooks_runner.status
 !/pkg/hooks.status
 !/pkg/native_toolchain_c.status
+!/pkg/record_use.status
 
 # These packages are authored in third_party.
 !/pkg/dap
diff --git a/third_party/pkg/dap/CHANGELOG.md b/third_party/pkg/dap/CHANGELOG.md
index 4d5cea5..2a4e7e9 100644
--- a/third_party/pkg/dap/CHANGELOG.md
+++ b/third_party/pkg/dap/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.5.0-wip
+
+- Removed the `supportsDartUris` flag from `DartInitializeRequestArguments` because it was only required to support the (now removed) Dart macros experiment.
+
 ## 1.4.0
 
 - Updated all generated classes using the latest published version of the DAP spec.
diff --git a/third_party/pkg/dap/lib/src/protocol_special.dart b/third_party/pkg/dap/lib/src/protocol_special.dart
index 70f398d..96e51d4 100644
--- a/third_party/pkg/dap/lib/src/protocol_special.dart
+++ b/third_party/pkg/dap/lib/src/protocol_special.dart
@@ -58,33 +58,17 @@
 /// A custom version of [InitializeRequestArguments] that adds custom Dart
 /// capabilities not covered by the DAP spec.
 class DartInitializeRequestArguments extends InitializeRequestArguments {
-  /// Whether the client supports URIs in places where we would normally send
-  /// file paths.
-  ///
-  /// This may be replaced by something standard DAP in future
-  /// https://github.com/microsoft/debug-adapter-protocol/issues/444
-  final bool supportsDartUris;
-
   /// A reader for protocol arguments that throws detailed exceptions if
   /// arguments aren't of the correct type.
   static final arg = DebugAdapterArgumentReader('initialize');
 
   DartInitializeRequestArguments({
     required super.adapterID,
-    this.supportsDartUris = false,
     super.supportsRunInTerminalRequest,
     super.supportsProgressReporting,
   });
 
-  DartInitializeRequestArguments.fromMap(super.obj)
-      : supportsDartUris = arg.read<bool?>(obj, 'supportsDartUris') ?? false,
-        super.fromMap();
-
-  @override
-  Map<String, Object?> toJson() => {
-        ...super.toJson(),
-        if (supportsDartUris) 'supportsDartUris': supportsDartUris,
-      };
+  DartInitializeRequestArguments.fromMap(super.obj) : super.fromMap();
 
   static DartInitializeRequestArguments fromJson(Map<String, Object?> obj) =>
       DartInitializeRequestArguments.fromMap(obj);
diff --git a/third_party/pkg/dap/pubspec.yaml b/third_party/pkg/dap/pubspec.yaml
index bf98dd9..9d180e7 100644
--- a/third_party/pkg/dap/pubspec.yaml
+++ b/third_party/pkg/dap/pubspec.yaml
@@ -1,5 +1,5 @@
 name: dap
-version: 1.4.0
+version: 1.5.0-wip
 description: >-
   A package of classes that are generated from the DAP specifications along with
   their generating code.
diff --git a/third_party/pkg/language_server_protocol/lib/protocol_custom_generated.dart b/third_party/pkg/language_server_protocol/lib/protocol_custom_generated.dart
index d1aa2c6..37af23d 100644
--- a/third_party/pkg/language_server_protocol/lib/protocol_custom_generated.dart
+++ b/third_party/pkg/language_server_protocol/lib/protocol_custom_generated.dart
@@ -1168,218 +1168,6 @@
   }
 }
 
-class DartTextDocumentContent implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    DartTextDocumentContent.canParse,
-    DartTextDocumentContent.fromJson,
-  );
-
-  final String? content;
-
-  DartTextDocumentContent({
-    this.content,
-  });
-
-  @override
-  int get hashCode => content.hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other is DartTextDocumentContent &&
-        other.runtimeType == DartTextDocumentContent &&
-        content == other.content;
-  }
-
-  @override
-  Map<String, Object?> toJson() {
-    var result = <String, Object?>{};
-    result['content'] = content;
-    return result;
-  }
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      return _canParseString(obj, reporter, 'content',
-          allowsUndefined: false, allowsNull: true);
-    } else {
-      reporter.reportError('must be of type DartTextDocumentContent');
-      return false;
-    }
-  }
-
-  static DartTextDocumentContent fromJson(Map<String, Object?> json) {
-    final contentJson = json['content'];
-    final content = contentJson as String?;
-    return DartTextDocumentContent(
-      content: content,
-    );
-  }
-}
-
-class DartTextDocumentContentDidChangeParams implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    DartTextDocumentContentDidChangeParams.canParse,
-    DartTextDocumentContentDidChangeParams.fromJson,
-  );
-
-  final DocumentUri uri;
-
-  DartTextDocumentContentDidChangeParams({
-    required this.uri,
-  });
-
-  @override
-  int get hashCode => uri.hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other is DartTextDocumentContentDidChangeParams &&
-        other.runtimeType == DartTextDocumentContentDidChangeParams &&
-        uri == other.uri;
-  }
-
-  @override
-  Map<String, Object?> toJson() {
-    var result = <String, Object?>{};
-    result['uri'] = uri.toString();
-    return result;
-  }
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      return _canParseUri(obj, reporter, 'uri',
-          allowsUndefined: false, allowsNull: false);
-    } else {
-      reporter.reportError(
-          'must be of type DartTextDocumentContentDidChangeParams');
-      return false;
-    }
-  }
-
-  static DartTextDocumentContentDidChangeParams fromJson(
-      Map<String, Object?> json) {
-    final uriJson = json['uri'];
-    final uri = Uri.parse(uriJson as String);
-    return DartTextDocumentContentDidChangeParams(
-      uri: uri,
-    );
-  }
-}
-
-class DartTextDocumentContentParams implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    DartTextDocumentContentParams.canParse,
-    DartTextDocumentContentParams.fromJson,
-  );
-
-  final DocumentUri uri;
-
-  DartTextDocumentContentParams({
-    required this.uri,
-  });
-
-  @override
-  int get hashCode => uri.hashCode;
-
-  @override
-  bool operator ==(Object other) {
-    return other is DartTextDocumentContentParams &&
-        other.runtimeType == DartTextDocumentContentParams &&
-        uri == other.uri;
-  }
-
-  @override
-  Map<String, Object?> toJson() {
-    var result = <String, Object?>{};
-    result['uri'] = uri.toString();
-    return result;
-  }
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      return _canParseUri(obj, reporter, 'uri',
-          allowsUndefined: false, allowsNull: false);
-    } else {
-      reporter.reportError('must be of type DartTextDocumentContentParams');
-      return false;
-    }
-  }
-
-  static DartTextDocumentContentParams fromJson(Map<String, Object?> json) {
-    final uriJson = json['uri'];
-    final uri = Uri.parse(uriJson as String);
-    return DartTextDocumentContentParams(
-      uri: uri,
-    );
-  }
-}
-
-class DartTextDocumentContentProviderRegistrationOptions implements ToJsonable {
-  static const jsonHandler = LspJsonHandler(
-    DartTextDocumentContentProviderRegistrationOptions.canParse,
-    DartTextDocumentContentProviderRegistrationOptions.fromJson,
-  );
-
-  /// A set of URI schemes the server can provide content for. The server may
-  /// also return URIs with these schemes in responses to other requests.
-  final List<String> schemes;
-
-  DartTextDocumentContentProviderRegistrationOptions({
-    required this.schemes,
-  });
-
-  @override
-  int get hashCode => lspHashCode(schemes);
-
-  @override
-  bool operator ==(Object other) {
-    return other is DartTextDocumentContentProviderRegistrationOptions &&
-        other.runtimeType ==
-            DartTextDocumentContentProviderRegistrationOptions &&
-        const DeepCollectionEquality().equals(schemes, other.schemes);
-  }
-
-  @override
-  Map<String, Object?> toJson() {
-    var result = <String, Object?>{};
-    result['schemes'] = schemes;
-    return result;
-  }
-
-  @override
-  String toString() => jsonEncoder.convert(toJson());
-
-  static bool canParse(Object? obj, LspJsonReporter reporter) {
-    if (obj is Map<String, Object?>) {
-      return _canParseListString(obj, reporter, 'schemes',
-          allowsUndefined: false, allowsNull: false);
-    } else {
-      reporter.reportError(
-          'must be of type DartTextDocumentContentProviderRegistrationOptions');
-      return false;
-    }
-  }
-
-  static DartTextDocumentContentProviderRegistrationOptions fromJson(
-      Map<String, Object?> json) {
-    final schemesJson = json['schemes'];
-    final schemes =
-        (schemesJson as List<Object?>).map((item) => item as String).toList();
-    return DartTextDocumentContentProviderRegistrationOptions(
-      schemes: schemes,
-    );
-  }
-}
-
 class DartTextDocumentSummaryParams implements ToJsonable {
   static const jsonHandler = LspJsonHandler(
     DartTextDocumentSummaryParams.canParse,
diff --git a/third_party/pkg/record_use.status b/third_party/pkg/record_use.status
new file mode 100644
index 0000000..b789223
--- /dev/null
+++ b/third_party/pkg/record_use.status
@@ -0,0 +1,8 @@
+# Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+example/*: SkipByDesign # These test projects don't work without running pub in the project itself.
+lib/src/*: SkipByDesign # These are not tests.
+test/json_schema/*: SkipByDesign # Dev dependency not in Dart SDK.
+
diff --git a/tools/FAKE_COMMITS b/tools/FAKE_COMMITS
index d85d533..02495e1 100644
--- a/tools/FAKE_COMMITS
+++ b/tools/FAKE_COMMITS
@@ -32,6 +32,7 @@
 Trigger builds to test builder configuration change
 Trigger mac builds now that the snoopy service is installed
 Trigger bots
+Submit Gerrit CL with a bot
 
 Analyzer branch commits:
 Force build on new analyzer-branch linux build with new workflow
diff --git a/tools/OWNERS_DEV_INFRA b/tools/OWNERS_DEV_INFRA
new file mode 100644
index 0000000..1aaa395d
--- /dev/null
+++ b/tools/OWNERS_DEV_INFRA
@@ -0,0 +1,5 @@
+bkonyi@google.com
+yjessy@google.com
+nshahan@google.com
+markzipan@google.com
+natebiggs@google.com
\ No newline at end of file
diff --git a/tools/VERSION b/tools/VERSION
index cb7f19e..c553d32 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 3
 MINOR 11
 PATCH 0
-PRERELEASE 93
-PRERELEASE_PATCH 2
+PRERELEASE 200
+PRERELEASE_PATCH 1
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 46f11f8..c6d875b 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -183,7 +183,6 @@
       "pkg/kernel/",
       "pkg/meta/",
       "pkg/native_stack_traces/",
-      "pkg/hooks_runner/",
       "pkg/pkg.status",
       "pkg/smith/",
       "pkg/status_file/",
@@ -823,7 +822,7 @@
             "-j2"
           ],
           "fileset": "vm",
-          "shards": 10
+          "shards": 16
         }
       ]
     },
@@ -3101,6 +3100,7 @@
             "hooks_runner",
             "hooks",
             "native_toolchain_c",
+            "record_use",
             "package_config",
             "pkg/pkg/dartdev/test/native_assets"
           ]
@@ -3228,6 +3228,7 @@
             "hooks_runner",
             "hooks",
             "native_toolchain_c",
+            "record_use",
             "package_config",
             "pkg/pkg/dartdev/test/native_assets"
           ]
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index b92a1f4..d29ff89 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -176,9 +176,17 @@
     #     print(C(message: 'feature enabled')._message);
     #   }
 
-  declaring-constructors:
+  primary-constructors:
     help: "Less verbose constructors."
 
+  anonymous-methods:
+    help: "Anonymous methods."
+    # TODO(eernst): Enable this when the feature is implemented.
+    # validation: |
+    #   void main() {
+    #     2.{ print('Anonymous methods enabled: $isEven'); };
+    #   }
+
 # Experiment flag only used for testing.
   test-experiment:
     help: >-
diff --git a/tools/find_release.dart b/tools/find_release.dart
new file mode 100644
index 0000000..a0b04af
--- /dev/null
+++ b/tools/find_release.dart
@@ -0,0 +1,305 @@
+// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
+// for 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 tool to find the lowest Dart and Flutter release containing a given
+/// commit.
+///
+/// Usage:
+///
+/// `dart tools/find_release.dart --commit=<sha> --channel=<dev|beta|stable>`
+library;
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:http/http.dart' as http;
+import 'package:pub_semver/pub_semver.dart';
+
+final parser = ArgParser()
+  ..addOption(
+    'commit',
+    abbr: 'c',
+    help: 'The commit to search for',
+    mandatory: true,
+  )
+  ..addOption(
+    'channel',
+    help: 'The channel to search for the commit in, dev only supports the dart '
+        'sdk since flutter does not do dev releases.',
+    allowed: ['dev', 'stable', 'beta'],
+    mandatory: true,
+  )
+  ..addFlag(
+    'help',
+    abbr: 'h',
+    negatable: false,
+    help: 'Show usage information',
+  );
+
+void main(List<String> arguments) async {
+  try {
+    final parsedArgs = parser.parse(arguments);
+    if (parsedArgs['help'] as bool) {
+      print(parser.usage);
+      exit(0);
+    }
+    final commit = parsedArgs['commit'] as String;
+    final channel = parsedArgs['channel'] as String;
+    print('Searching for commit $commit in channel $channel');
+
+    final repo = await findRepoForCommit(commit);
+    if (repo == null) {
+      print('Commit not found in Dart or Flutter repositories.');
+      exit(1);
+    }
+    print('Found commit in $repo');
+
+    print('Fetching lowest release tag for $commit...');
+    final tag = await fetchLowestVersionTag(repo, commit);
+    if (tag == null) {
+      print('No release tags found for commit $commit in $repo');
+      exit(1);
+    }
+    print('Lowest release tag for $commit was: $tag');
+
+    if (repo == flutterSdkRepo || (channel == 'beta' || channel == 'stable')) {
+      print('Checking for lowest flutter release newer than $tag...');
+      final flutterRelease = await fetchLowestFlutterRelease(
+        repo,
+        channel,
+        tag,
+      );
+      if (flutterRelease == null) {
+        print(
+          'No Flutter releases found '
+          '${repo == dartSdkRepo ? 'with a Dart sdk ' : ''}'
+          'newer than $tag',
+        );
+      } else {
+        print('Lowest Flutter release: $flutterRelease');
+      }
+    } else {
+      print(
+        'Skipping flutter version check for channel $channel, only `beta` and '
+        '`stable` are supported for flutter version checks',
+      );
+    }
+
+    if (repo == dartSdkRepo) {
+      print('Checking for lowest Dart release newer than $tag...');
+      final dartRelease = await fetchLowestDartReleaseFromGcs(
+        'channels/$channel/release/',
+        tag,
+      );
+      if (dartRelease == null) {
+        print('No Dart releases found that were newer than $tag');
+      } else {
+        print('Lowest Dart release: $dartRelease');
+      }
+    } else {
+      print('Skipping dart version check as this was a flutter commit');
+    }
+  } on FormatException catch (e) {
+    print(e.message);
+    print(parser.usage);
+    exit(1);
+  }
+}
+
+const dartSdkRepo = 'dart-lang/sdk';
+const flutterSdkRepo = 'flutter/flutter';
+
+/// Searches the Dart and Flutter repos for the given [sha], and returns the
+/// org/repo string where it was found.
+Future<String?> findRepoForCommit(String sha) async {
+  if (await checkCommit(dartSdkRepo, sha)) return dartSdkRepo;
+  if (await checkCommit(flutterSdkRepo, sha)) return flutterSdkRepo;
+  return null;
+}
+
+/// Returns whether or not [sha] exists in [repo] (which should be an org/repo
+/// string).
+Future<bool> checkCommit(String repo, String sha) async {
+  try {
+    await makeGhApiRequest('repos/$repo/commits/$sha');
+    return true;
+  } on RequestException catch (_) {
+    return false;
+  }
+}
+
+/// Returns the lowest tag that parses as a semver version containing [commit].
+Future<Version?> fetchLowestVersionTag(
+  String repo,
+  String commit,
+) async {
+  // Note that this is not an official endpoint, it was reverse engineered from
+  // the commit page on github, and could break in the future.
+  final response = await makeGhApiRequest(
+    '$repo/branch_commits/$commit.json',
+    isApiRequest: false,
+  );
+  final tags = (response['tags'] as List).cast<String>();
+  Version? lowest;
+  for (final tag in tags) {
+    try {
+      final version = Version.parse(tag);
+      if (lowest == null || version < lowest) {
+        lowest = version;
+      }
+    } on FormatException catch (_) {
+      continue;
+    }
+  }
+  return lowest;
+}
+
+/// Makes a request to [path] against the github API.
+///
+/// If [isApiRequest] is false, treats this as a regular github request instead
+/// of an official API request.
+///
+/// Throws a [RequestException] if the request fails.
+Future<Map<String, Object?>> makeGhApiRequest(
+  String path, {
+  bool isApiRequest = true,
+}) async {
+  var uri = Uri.https(
+    isApiRequest ? 'api.github.com' : 'github.com',
+    '/$path',
+  );
+  final response = await http.get(uri);
+  if (response.statusCode != 200) {
+    throw RequestException(response, uri);
+  }
+  return jsonDecode(response.body) as Map<String, Object?>;
+}
+
+/// Returns the lowest Dart release version in the GCS storage bucket starting
+/// with [prefix] and greater than or equal to [minVersion].
+///
+/// Throws a [RequestException] if the request fails.
+Future<Version?> fetchLowestDartReleaseFromGcs(
+  String prefix,
+  Version minVersion,
+) async {
+  final uri = Uri.https(
+    'storage.googleapis.com',
+    '/storage/v1/b/dart-archive/o',
+    {
+      'delimiter': '/',
+      'prefix': prefix,
+      'alt': 'json',
+    },
+  );
+  final response = await http.get(uri);
+  if (response.statusCode != 200) {
+    throw RequestException(response, uri);
+  }
+  Version? lowest;
+  try {
+    final releases = ((jsonDecode(response.body)
+            as Map<String, Object?>)['prefixes'] as List)
+        .cast<String>();
+    for (var release in releases) {
+      final versionPart = release.split('/')[3];
+      try {
+        final version = Version.parse(versionPart);
+        if (version >= minVersion && (lowest == null || version < lowest)) {
+          lowest = version;
+        }
+      } on FormatException catch (_) {
+        continue;
+      }
+    }
+  } catch (e) {
+    throw RequestException(response, uri);
+  }
+  return lowest;
+}
+
+/// Returns the lowest Flutter version greater than or equal to [minVersion].
+///
+/// The [minVersion] is either a Dart or Flutter version, depending on [repo].
+///
+/// If [repo] is [flutterSdkRepo], then it will only return a version from
+/// [channel], otherwise it may contain a release from any channel. This is
+/// because the release channels do not always correspond to each other.
+///
+/// Throws a [RequestException] if the request fails.
+Future<Version?> fetchLowestFlutterRelease(
+  String repo, // The repo that `minVersion` corresponds to.
+  String channel,
+  Version minVersion,
+) async {
+  final uri = Uri.https(
+    'storage.googleapis.com',
+    '/flutter_infra_release/releases/releases_linux.json',
+  );
+  final response = await http.get(uri);
+  if (response.statusCode != 200) {
+    throw RequestException(response, uri);
+  }
+  Version? lowest;
+  try {
+    final releases = ((jsonDecode(response.body)
+            as Map<String, Object?>)['releases'] as List)
+        .cast<Map<String, Object?>>();
+    for (var release in releases) {
+      // We do search for dart releases in any flutter channel because sometimes
+      // stable flutter releases contain dart sdk releases from beta channels.
+      if (repo == flutterSdkRepo && release['channel'] != channel) continue;
+
+      var versionStr = switch (repo) {
+        dartSdkRepo => release['dart_sdk_version'] as String?,
+        flutterSdkRepo => release['version'] as String,
+        _ => throw FormatException('Unknown repository $repo'),
+      };
+      if (versionStr == null) continue;
+      // Some versions look like `3.11.0 (build 3.11.0-93.1.beta)`
+      if (versionStr.contains('(build')) {
+        versionStr = versionStr.split('(build ').last;
+        versionStr = versionStr.substring(0, versionStr.length - 1);
+      }
+
+      try {
+        final version = Version.parse(versionStr);
+        if (version >= minVersion) {
+          // This is a potential candidate, now check if the flutter version
+          // is the lowest we have seen.
+          final flutterVersion = switch (repo) {
+            flutterSdkRepo => version,
+            dartSdkRepo => Version.parse(release['version'] as String),
+            _ => throw StateError('Unexpected repo string $repo'),
+          };
+          if (lowest == null || flutterVersion < lowest) {
+            lowest = flutterVersion;
+          }
+        }
+      } on FormatException catch (_) {
+        continue;
+      }
+    }
+  } catch (e) {
+    throw RequestException(response, uri, e);
+  }
+  return lowest;
+}
+
+class RequestException implements Exception {
+  final http.Response response;
+  final Uri uri;
+  final Object? error;
+
+  RequestException(this.response, this.uri, [this.error]);
+
+  @override
+  String toString() => '''
+uri: $uri
+statusCode:  ${response.statusCode}
+body: ${response.body}
+error: $error
+''';
+}
diff --git a/tools/pubspec.yaml b/tools/pubspec.yaml
index 593a58b..4b41d49 100644
--- a/tools/pubspec.yaml
+++ b/tools/pubspec.yaml
@@ -19,6 +19,7 @@
   http:
   path:
   pool:
+  pub_semver:
   smith:
   test_runner:
   yaml:
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index ca4c915..6c7e5ec 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -485,7 +485,7 @@
     ;
 
 extensionTypeDeclaration
-    :    EXTENSION TYPE classNameMaybePrimary interfaces? extensionTypeBody
+    :    EXTENSION TYPE primaryConstructor interfaces? extensionTypeBody
     |    AUGMENT EXTENSION TYPE typeWithParameters interfaces?
          extensionTypeBody
     ;
@@ -512,6 +512,7 @@
     |    STATIC? setterSignature
     |    operatorSignature
     |    constructorSignature
+    |    primaryConstructorBodySignature
     ;
 
 declaration
@@ -533,6 +534,7 @@
     |    redirectingFactoryConstructorSignature
     |    constantConstructorSignature (redirection | initializers)?
     |    constructorSignature (redirection | initializers)?
+    |    primaryConstructorBodySignature
     ;
 
 operatorSignature
@@ -566,15 +568,6 @@
 constructorSignature
     :    constructorName formalParameterList // Old form.
     |    constructorHead formalParameterList // New form.
-    |    declaringConstructorSignature
-    ;
-
-declaringConstructorSignature
-    :    THIS identifier? declaringParameterList? // New form only.
-    ;
-
-declaringConstantConstructorSignature
-    :    CONST THIS identifier? declaringParameterList // New form only.
     ;
 
 declaringParameterList
@@ -637,6 +630,10 @@
     :    typeIdentifier ('.' identifierOrNew)?
     ;
 
+constructorTwoPartName
+    :    typeIdentifier '.' identifierOrNew
+    ;
+
 constructorHead
     :    NEW identifier?
     ;
@@ -677,21 +674,22 @@
     ;
 
 factoryConstructorSignature
-    :    CONST? FACTORY constructorName formalParameterList // Old form.
-    |    CONST? factoryConstructorHead formalParameterList // New form.
+    :    CONST? FACTORY constructorTwoPartName
+         formalParameterList // Old form.
+    |    CONST? factoryConstructorHead
+         formalParameterList // New form.
     ;
 
 redirectingFactoryConstructorSignature
-    :    CONST? FACTORY constructorName formalParameterList '='
-         constructorDesignation // Old form.
-    |    CONST? factoryConstructorHead formalParameterList '='
-         constructorDesignation // New form.
+    :    factoryConstructorSignature '=' constructorDesignation
+    ;
+
+primaryConstructorBodySignature
+    :    THIS initializers?
     ;
 
 constantConstructorSignature
-    :    CONST constructorName formalParameterList // Old form.
-    |    CONST constructorHead formalParameterList // New form.
-    |    declaringConstantConstructorSignature
+    :    CONST constructorSignature
     ;
 
 mixinApplication
diff --git a/tools/spec_parser/dart_spec_parser/Dart.g4 b/tools/spec_parser/dart_spec_parser/Dart.g4
index 09b1032..dafbb95 100644
--- a/tools/spec_parser/dart_spec_parser/Dart.g4
+++ b/tools/spec_parser/dart_spec_parser/Dart.g4
@@ -495,7 +495,7 @@
     ;
 
 extensionTypeDeclaration
-    :    EXTENSION TYPE classNameMaybePrimary interfaces? extensionTypeBody
+    :    EXTENSION TYPE primaryConstructor interfaces? extensionTypeBody
     |    AUGMENT EXTENSION TYPE typeWithParameters interfaces?
          extensionTypeBody
     ;
@@ -522,6 +522,7 @@
     |    STATIC? setterSignature
     |    operatorSignature
     |    constructorSignature
+    |    primaryConstructorBodySignature
     ;
 
 declaration
@@ -543,6 +544,7 @@
     |    redirectingFactoryConstructorSignature
     |    constantConstructorSignature (redirection | initializers)?
     |    constructorSignature (redirection | initializers)?
+    |    primaryConstructorBodySignature
     ;
 
 operatorSignature
@@ -576,15 +578,6 @@
 constructorSignature
     :    constructorName formalParameterList // Old form.
     |    constructorHead formalParameterList // New form.
-    |    declaringConstructorSignature
-    ;
-
-declaringConstructorSignature
-    :    THIS identifier? declaringParameterList? // New form only.
-    ;
-
-declaringConstantConstructorSignature
-    :    CONST THIS identifier? declaringParameterList // New form only.
     ;
 
 declaringParameterList
@@ -647,6 +640,10 @@
     :    typeIdentifier ('.' identifierOrNew)?
     ;
 
+constructorTwoPartName
+    :    typeIdentifier '.' identifierOrNew
+    ;
+
 constructorHead
     :    NEW identifier?
     ;
@@ -687,21 +684,22 @@
     ;
 
 factoryConstructorSignature
-    :    CONST? FACTORY constructorName formalParameterList // Old form.
-    |    CONST? factoryConstructorHead formalParameterList // New form.
+    :    CONST? FACTORY constructorTwoPartName
+         formalParameterList // Old form.
+    |    CONST? factoryConstructorHead
+         formalParameterList // New form.
     ;
 
 redirectingFactoryConstructorSignature
-    :    CONST? FACTORY constructorName formalParameterList '='
-         constructorDesignation // Old form.
-    |    CONST? factoryConstructorHead formalParameterList '='
-         constructorDesignation // New form.
+    :    factoryConstructorSignature '=' constructorDesignation
+    ;
+
+primaryConstructorBodySignature
+    :    THIS initializers?
     ;
 
 constantConstructorSignature
-    :    CONST constructorName formalParameterList // Old form.
-    |    CONST constructorHead formalParameterList // New form.
-    |    declaringConstantConstructorSignature
+    :    CONST constructorSignature
     ;
 
 mixinApplication
diff --git a/tools/task_kill.py b/tools/task_kill.py
index 7c54c57..da6083c 100755
--- a/tools/task_kill.py
+++ b/tools/task_kill.py
@@ -25,25 +25,30 @@
     'win32': {
         'chrome': 'chrome.exe',
         'crashpad_handler': 'crashpad_handler.exe',
-        'dart': 'dart.exe',\
-        'dart_product': 'dart_product.exe',
+        'dart': 'dart.exe',
+        'dartvm': 'dartvm.exe',
         'dartaotruntime': 'dartaotruntime.exe',
         'dartaotruntime_product': 'dartaotruntime_product.exe',
         'firefox': 'firefox.exe',
         'gen_snapshot': 'gen_snapshot.exe',
+        'gen_snapshot_product': 'gen_snapshot_product.exe',
+        'run_vm_tests': 'run_vm_tests.exe',
         'git': 'git.exe',
         'iexplore': 'iexplore.exe',
         'vctip': 'vctip.exe',
         'mspdbsrv': 'mspdbsrv.exe',
+        'explorer': 'explorer.exe',
     },
     'linux': {
         'chrome': 'chrome',
         'dart': 'dart',
-        'dart_product': 'dart_product',
+        'dartvm': 'dartvm',
         'dartaotruntime': 'dartaotruntime',
         'dartaotruntime_product': 'dartaotruntime_product',
         'firefox': 'firefox',
         'gen_snapshot': 'gen_snapshot',
+        'gen_snapshot_product': 'gen_snapshot_product',
+        'run_vm_tests': 'run_vm_tests',
         'flutter_tester': 'flutter_tester',
         'git': 'git',
     },
@@ -51,11 +56,13 @@
         'chrome': 'Chrome',
         'chrome_helper': 'Chrome Helper',
         'dart': 'dart',
-        'dart_product': 'dart_product',
+        'dartvm': 'dartvm',
         'dartaotruntime': 'dartaotruntime',
         'dartaotruntime_product': 'dartaotruntime_product',
         'firefox': 'firefox',
         'gen_snapshot': 'gen_snapshot',
+        'gen_snapshot_product': 'gen_snapshot_product',
+        'run_vm_tests': 'run_vm_tests',
         'git': 'git',
         'safari': 'Safari',
     }
@@ -274,9 +281,12 @@
 
 def KillDart():
     status = Kill("dart", dump_stacks=True)
+    status += Kill("dartvm", dump_stacks=True)
     status += Kill("gen_snapshot", dump_stacks=True)
+    status += Kill("gen_snapshot_product", dump_stacks=True)
     status += Kill("dartaotruntime", dump_stacks=True)
     status += Kill("dartaotruntime_product", dump_stacks=True)
+    status += Kill("run_vm_tests", dump_stacks=True)
     status += Kill("flutter_tester", dump_stacks=True)
     status += Kill("crashpad_handler", dump_stacks=True)
     return status
@@ -297,6 +307,20 @@
         status += KillVSBuild()
     if options.kill_browsers == 'True':
         status += KillBrowsers()
+    if os_name == 'win32':
+        # On Windows 11, a bunch of files accumulate in temp named `xml_file (#).xml`.
+        # These seem to be created by taskbar widgets. The swarming client is unable
+        # to delete them, presumably because Explorer normally still running. Killing
+        # Explorer should allow these files to be deleted. If it doesn't restart, it
+        # should also prevent them from being created.
+        status += Kill('explorer')
+        for path, dirs, files in os.walk(os.environ['TEMP']):
+            for filename in files:
+                print(os.path.join(path, filename))
+        for path, dirs, files in os.walk(
+                os.path.join(os.environ['LOCALAPPDATA'], 'Temp')):
+            for filename in files:
+                print(os.path.join(path, filename))
     return status
 
 
diff --git a/tools/verify_docs/bin/verify_docs.dart b/tools/verify_docs/bin/verify_docs.dart
index 64ce454..0a25405 100755
--- a/tools/verify_docs/bin/verify_docs.dart
+++ b/tools/verify_docs/bin/verify_docs.dart
@@ -20,7 +20,8 @@
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart'; // ignore: implementation_imports
-import 'package:analyzer/src/error/codes.dart'; // ignore: implementation_imports
+import 'package:analyzer/src/diagnostic/diagnostic.dart' // ignore: implementation_imports
+    as diag;
 import 'package:analyzer/src/util/comment.dart'; // ignore: implementation_imports
 import 'package:path/path.dart' as path;
 
@@ -342,22 +343,21 @@
 
       // Filter out unused imports, since we speculatively add imports to some
       // samples.
-      diagnostics
-          .removeWhere((e) => e.diagnosticCode == WarningCode.unusedImport);
+      diagnostics.removeWhere((e) => e.diagnosticCode == diag.unusedImport);
 
       // Also, don't worry about 'unused_local_variable' and related; this may
       // be intentional in samples.
       diagnostics.removeWhere(
         (e) =>
-            e.diagnosticCode == WarningCode.unusedLocalVariable ||
-            e.diagnosticCode == WarningCode.unusedElement,
+            e.diagnosticCode == diag.unusedLocalVariable ||
+            e.diagnosticCode == diag.unusedElement,
       );
 
       // Handle edge case around dart:_http
       diagnostics.removeWhere((e) {
         if (e.message.contains("'dart:_http'")) {
-          return e.diagnosticCode == HintCode.unnecessaryImport ||
-              e.diagnosticCode == CompileTimeErrorCode.importInternalLibrary;
+          return e.diagnosticCode == diag.unnecessaryImport ||
+              e.diagnosticCode == diag.importInternalLibrary;
         }
         return false;
       });
diff --git a/utils/aot_snapshot.gni b/utils/aot_snapshot.gni
index e48ec8e..25e84ed 100644
--- a/utils/aot_snapshot.gni
+++ b/utils/aot_snapshot.gni
@@ -92,12 +92,13 @@
       # (Instead of ensuring every user of the "application_snapshot" /
       # "kernel_snapshot" passes this if needed, we always pass it)
       "-Dsdk_hash=$sdk_hash",
+      "-Ddart.vm.product=$product_mode",
+      "-Ddart.vm.asan=$is_asan",
+      "-Ddart.vm.msan=$is_msan",
+      "-Ddart.vm.tsan=$is_tsan",
     ]
     args += gen_kernel_args
     args += [ rebase_path(main_dart, root_build_dir) ]
-    if (product_mode) {
-      args += [ "-Ddart.vm.product=true" ]
-    }
     if (defined(invoker.args)) {
       args += invoker.args
     }
diff --git a/utils/application_snapshot.gni b/utils/application_snapshot.gni
index 37037cf..eaa1025 100644
--- a/utils/application_snapshot.gni
+++ b/utils/application_snapshot.gni
@@ -168,6 +168,9 @@
       # "kernel_snapshot" passes this if needed, we always pass it)
       "-Dsdk_hash=$sdk_hash",
       "-Ddart.vm.product=$is_product_flag",
+      "-Ddart.vm.asan=$is_asan",
+      "-Ddart.vm.msan=$is_msan",
+      "-Ddart.vm.tsan=$is_tsan",
     ]
     args += gen_kernel_args
     args += [ rebase_path(main_dart, root_build_dir) ]
